{"version":3,"file":"static/js/main.d5dc5c91.js","mappings":"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CACA,0BACA,wBACA,8BACA,8BACA,8BACA,8BACA,qCACA,qCACA,qCACA,qCACA,6BACA,sBACA,2CACA,wDACA,iDACA,mDACA,wDACA,iDACA,mDACA,sCACA,6CACA,6CACA,sDACA,8DACA,8CACA,iFACA,wEACA,uCACA,gDACA,uDACA,kCACA,+BACA,+BACA,yBACA,gCACA,kCACA,sCACA,2CACA,yCACA,wBACA,4BACA,sCACA,mCAEEC,GAA8C,IAC7CD,GACH,mCACA,wCAEEE,GAAyB,IAAIz1I,IAAI,CACnC,uCACA,qCACA,SAEE01I,GAAoC,CAAC,mCAAoC,wCACzEC,GAAmD,IAClDD,GACH,mCACA,wCAGJ,SAASE,GAAUjrB,EAAUkrB,GACzB,OAAOA,EAAShkJ,MAAMs2F,GAAWwiC,EAASqC,WAAW7kC,IACzD,CC/EA,MAAM2tD,GAAa,CACfC,UAAW,YACXC,gBAAiB,yBAGfC,GAAsB,gBACtBC,GAA+B,gBAC/BC,GAA2B,IAAIr2I,IAAI,CACrC,gBACA,gBACA,gBACA,cACA,WACA,gBACA,kBACA,WACA,cACA,WACA,oBACA,gBACA,eACA,mBACA,YACA,aACA,WACA,eACA,oBACA,eACA,cACA,cACA,mBACA,YACA,aACA,aACA,sBACA,mBACA,eACA,YACA,YACA,YACA,gBACA,sBACA,iBACA,OACA,OACA,cACA,YACA,qBACA,mBACA,mBACA,mBACA,eACA,cACA,eACA,cACA,eACA,iBACA,cACA,UACA,UACA,aACA,UACA,aACA,mBACA,mBACA,cACFv7C,KAAK4vL,GAAS,CAACA,EAAKllL,cAAeklL,MAC/BiC,GAA2B,IAAIt2I,IAAI,CACrC,CAAC,gBAAiB,CAAEqoF,OAAQ,QAASliI,KAAM,UAAW87J,UAAW,GAAG2X,QACpE,CAAC,gBAAiB,CAAEvxC,OAAQ,QAASliI,KAAM,UAAW87J,UAAW,GAAG2X,QACpE,CAAC,aAAc,CAAEvxC,OAAQ,QAASliI,KAAM,OAAQ87J,UAAW,GAAG2X,QAC9D,CAAC,aAAc,CAAEvxC,OAAQ,QAASliI,KAAM,OAAQ87J,UAAW,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AAO,EACP,KAAO,EACP,OAAS,EACT,KAAO,EACP,KAAO,EACP,KAAO,EACP,KAAO,EACP,KAAO,EACP,KAAO,EACP,KAAO,EACP,KAAO,EACP,KAAO,EACP,KAAO,EACP,KAAO,EACP,KAAO,EACP,KAAO,EACP,KAAO,EACP,KAAO,EACP,KAAO,EACP,KAAO,EACP,KAAO,EACP,KAAO,EACP,KAAO,EACP,KAAO,EACP,KAAO,EACP,KAAO,EACP,KAAO,EACP,KAAO,EACP,KAAO,EACP,KAAO,EACP,KAAO,EACP,KAAO,EACP,KAAO,EACP,KAAO,EACP,KAAO,EACP,KAAO,EACP,KAAO,EACP,KAAO,EACP,KAAO,EACP,KAAO,EACP,KAAO,EACP,KAAO,EACP,KAAO,EACP,KAAO,EACP,KAAO,EACP,KAAO,EACP,KAAO,EACP,KAAO,EACP,KAAO,EACP,KAAO,EACP,KAAO,EACP,KAAO,EACP,KAAO,EACP,KAAO,EACP,KAAO,EACP,KAAO,EACP,KAAO,EACP,KAAO,EACP,KAAO,GAEX,yBAA4B,CACxB,KAAQ,QAGhB,WAAc,CACV,KAAQ,CAEJ,MAAS,CACL,QAAS6jS,GACT,QAASA,GACT,QAASL,GACT,QAASI,GACT,QAASC,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASb,GACT,QAASyH,GACT,QAAS7G,GACT,QAASR,GACT,QAASY,GACT,QAASE,GACT,QAAS8E,GACT,QAASA,GACT,QAAShG,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASyH,GACT,QAASzH,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASgG,GACT,QAAShG,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASiG,GACT,QAASwB,GACT,QAASC,GACT,QAASA,GACT,QAAS1B,GACT,QAASA,GACT,QAASyB,GACT,QAASA,GACT,QAASA,GACT,QAASA,GAET,QAAS5B,GACT,QAASG,GACT,QAASlF,GACT,QAASd,GACT,QAASyH,GACT,QAASzH,GACT,QAASA,GACT,QAASa,GACT,QAASb,GACT,QAASS,GACT,QAAST,GACT,QAASA,GACT,QAASa,GACT,QAASb,GACT,QAASe,GACT,QAASf,GACT,QAASA,GACT,QAASS,GACT,QAASM,GACT,QAASA,GACT,QAASf,GACT,QAASyH,GACT,QAAS1G,GACT,QAASF,GACT,QAASA,GACT,QAASb,GACT,QAASA,GACT,QAAS8H,GACT,QAASH,GACT,QAAS9G,GACT,QAASE,GACT,QAASF,GACT,QAASb,GACT,QAASwH,GACT,QAASxH,GACT,QAASQ,GACT,QAASK,GACT,QAASA,GACT,QAASL,GACT,QAASJ,GACT,QAASA,GACT,QAASJ,GACT,QAASgG,GACT,QAASpF,GACT,QAASR,GACT,QAASD,GACT,QAASA,GACT,QAASC,GACT,QAASI,GACT,QAASR,GACT,QAASQ,GACT,QAASwF,GACT,QAASI,GACT,QAAS5F,GACT,QAASA,GACT,QAASA,GACT,QAASM,GACT,QAAS6F,GACT,QAAS3G,GACT,QAASA,GACT,QAASyG,GACT,QAASe,GACT,QAASA,GACT,QAASA,GACT,QAAS3G,GACT,QAASb,GACT,QAASuG,GACT,QAASnG,GACT,QAASS,GACT,QAASuF,GACT,QAASjG,GACT,QAASA,GACT,QAASuG,GACT,QAASN,GACT,QAASvF,GACT,QAASA,GACT,QAASL,GACT,QAASK,GACT,QAASA,GACT,QAASmG,GACT,QAASnG,GACT,QAASM,GACT,QAASN,GACT,QAASmF,GACT,QAAShG,GACT,QAASwH,GACT,QAASpH,GACT,QAASoH,GACT,QAASA,GACT,QAAS3G,GACT,QAASA,GACT,QAASA,GACT,QAASb,GACT,QAASa,GACT,QAASC,GACT,QAASJ,GACT,QAASN,GACT,QAASM,GACT,QAAS8G,GACT,QAASpH,GACT,QAASA,GACT,QAASA,GACT,QAASI,GACT,QAASJ,GACT,QAASA,GACT,QAASA,GACT,QAASS,GACT,QAASA,GACT,QAASD,GACT,QAASC,GACT,QAAS2G,GACT,QAASpH,GACT,QAASS,GACT,QAASb,GACT,QAASA,GACT,QAASQ,GACT,QAASgH,GACT,QAAS3G,GACT,QAAST,GACT,QAASJ,GACT,QAASA,GACT,SAAUM,GACV,SAAUN,GACV,SAAUI,GACV,SAAUJ,GACV,SAAUA,GACV,SAAUA,GACV,SAAUA,GACV,SAAUwH,GACV,SAAUxH,GACV,SAAUwH,GACV,SAAU3G,GACV,SAAUA,GACV,SAAUA,GACV,SAAUb,GACV,SAAUI,GACV,SAAUJ,GACV,SAAU0H,GACV,SAAU1H,GACV,SAAUa,GACV,SAAUT,GACV,SAAUS,GACV,SAAUb,GACV,SAAUA,GACV,SAAUa,GACV,SAAUA,GACV,SAAUA,GACV,SAAUA,GACV,SAAUA,GACV,SAAUb,GACV,SAAUA,GACV,SAAUa,GACV,SAAUC,GACV,SAAUD,GACV,SAAUA,GACV,SAAUA,GACV,SAAUA,GACV,SAAUL,GACV,SAAUR,GACV,SAAUY,GAEV,SAAUC,GACV,SAAUA,GACV,SAAUA,GACV,SAAUL,GACV,SAAUK,GACV,SAAUA,GACV,SAAUb,GACV,SAAUQ,GAEV,SAAUI,GACV,SAAUA,GACV,SAAUA,GACV,SAAUA,GACV,SAAUZ,GACV,SAAUA,GAEV,SAAUA,GACV,SAAUyH,GACV,SAAUzH,GACV,SAAUyH,GACV,SAAUzH,GACV,SAAUA,GACV,SAAUA,GACV,SAAUyH,GACV,SAAUzH,GAEV,SAAUA,GACV,SAAUS,GACV,SAAUK,GACV,SAAUD,GACV,SAAU2G,GACV,SAAU3G,GACV,SAAUA,GACV,SAAUT,GACV,OAAU4F,GACV,UAAaA,GACb,UAAaA,KAGrB,OAAU,CAEN,MAAS,CACL,QAAS5F,GACT,QAASA,GACT,QAAS4F,GACT,QAASpF,GACT,QAASC,GACT,QAASL,GACT,QAASqF,GACT,QAASA,GACT,QAAShF,GACT,QAASA,GACT,QAASL,GACT,QAASR,GACT,QAASyH,GACT,QAAS7G,GACT,QAASR,GACT,QAASA,GACT,QAASc,GACT,QAAS8E,GACT,QAAShG,GACT,QAASgG,GACT,QAAShG,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASc,GACT,QAASN,GACT,QAASR,GACT,QAASA,GACT,QAASyH,GACT,QAASzH,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASyH,GACT,QAASzH,GACT,QAAS2H,GACT,QAASvH,GACT,QAAS4F,GACT,QAASlF,GACT,QAASd,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASyH,GACT,QAASC,GACT,QAAS7G,GACT,QAAS6G,GACT,QAAS1B,GACT,QAASA,GACT,QAASyB,GACT,QAASjH,GACT,QAASgH,GACT,QAASA,GACT,QAASC,GACT,QAASA,GACT,QAASA,GACT,QAAS5G,GACT,QAAS2G,GACT,QAASC,GACT,QAASzH,GACT,QAASyH,GACT,QAASD,GACT,QAASxH,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASyH,GACT,QAASzH,GACT,QAASA,GACT,QAASyH,GACT,QAASzH,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASyH,GACT,QAASzH,GACT,QAASA,GACT,QAASyH,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASD,GACT,QAASA,GACT,QAAS3G,GACT,QAAS4G,GACT,QAAS5G,GACT,QAASb,GACT,QAASgG,GACT,QAASA,GACT,QAAShG,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASa,GACT,QAASA,GACT,QAASb,GACT,QAASA,GACT,QAASA,GACT,QAASyH,GACT,QAASzH,GACT,QAASA,GACT,QAASyH,GACT,QAASA,GACT,QAASA,GACT,QAAS5G,GACT,QAASb,GACT,QAASQ,GACT,QAASiH,GACT,QAASA,GACT,QAASA,GACT,QAASrH,GACT,QAASJ,GACT,QAASyH,GACT,QAASjH,GACT,QAASA,GACT,QAASJ,GACT,QAASA,GACT,QAASA,GACT,QAASS,GACT,QAASA,GACT,QAASb,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASa,GACT,QAAS4G,GACT,QAASE,GACT,QAAS9G,GACT,QAASb,GACT,QAASa,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,SAAUA,GACV,QAASb,GACT,QAASA,GACT,QAASyH,GACT,QAASjH,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASK,GACT,QAASA,GACT,QAASb,GACT,QAASA,GACT,QAASQ,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASiH,GACT,QAASA,GACT,QAAS5G,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASb,GACT,QAASyH,GACT,QAASzH,GACT,QAASA,GACT,QAASA,GACT,QAASa,GAIT,SAAU8G,GACV,SAAU3H,GACV,SAAUA,GACV,SAAUyH,GACV,SAAUzH,GACV,SAAUA,GACV,SAAUA,GACV,SAAUa,GACV,SAAUb,KAGlB,QAAW,CAEP,MAAS,CACL,QAAS6F,GACT,QAASA,GACT,QAASG,GACT,QAASpF,GACT,QAASC,GACT,QAASL,GACT,QAASqF,GACT,QAASA,GACT,QAAShF,GACT,QAASL,GACT,QAASR,GACT,QAASA,GACT,QAASY,GACT,QAASR,GACT,QAASA,GACT,QAASc,GACT,QAAS8E,GACT,QAAShG,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASc,GACT,QAASkF,GACT,QAASlF,GACT,QAASd,GACT,QAASa,GACT,QAASb,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAAS8H,GACT,QAAS9B,GACT,QAAShG,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASyH,GACT,QAASC,GACT,QAASA,GACT,QAAS1B,GACT,QAASA,GACT,QAASnF,GACT,QAAS2G,GACT,QAASA,GACT,QAAS3G,GACT,QAAS4G,GACT,QAASA,GACT,QAAS5G,GACT,QAAS4G,GACT,QAAS5G,GACT,QAASb,GACT,QAASa,GACT,QAASA,GACT,QAASb,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASa,GACT,QAASb,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASa,GACT,QAAST,GACT,QAASA,GACT,QAASS,GACT,QAAST,GACT,QAASS,GACT,QAASA,GACT,QAASA,GACT,QAAS2G,GACT,QAASA,GACT,QAAS3G,GACT,QAASA,GACT,QAASA,GACT,QAASb,GACT,QAASgG,GACT,QAASA,GACT,QAAShG,GACT,QAASA,GACT,QAASA,GACT,QAASa,GACT,QAASb,GAET,QAASa,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASG,GACT,QAAShB,GACT,QAASA,GACT,QAASA,GACT,QAASQ,GACT,QAASA,GACT,QAASJ,GACT,QAASA,GACT,QAASA,GACT,QAASS,GACT,QAASA,GACT,QAASb,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASyH,GACT,QAAS5G,GACT,QAASb,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASyH,GACT,QAASjH,GACT,QAASA,GACT,QAASR,GACT,QAASa,GACT,QAASA,GACT,QAAST,GACT,QAASI,GACT,QAASA,GACT,QAASK,GACT,QAAST,GAIT,SAAUuH,GACV,SAAU3H,GACV,SAAUA,GACV,SAAUyH,GACV,SAAUzH,GACV,SAAUA,GACV,SAAUA,GACV,SAAUa,GACV,SAAUb,KAGlB,OAAU,CAEN,MAAS,CACL,QAAS6F,GACT,QAASA,GACT,QAASG,GACT,QAASpF,GACT,QAAS6G,GACT,QAAS7G,GACT,QAASR,GACT,QAASA,GACT,QAASc,GACT,QAAS8E,GACT,QAAShG,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASgG,GACT,QAAShG,GACT,QAAS8H,GACT,QAASA,GACT,QAAS9H,GACT,QAASI,GACT,QAASqH,GACT,QAASC,GACT,QAAS1B,GACT,QAASA,GACT,QAASwB,GACT,QAASA,GACT,QAAS9G,GACT,QAASV,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,KAGjB,gBAAmB,CACf,MAAS,CACL,QAASI,GACT,QAASA,GACT,QAAS4F,GACT,QAASpF,GACT,QAASC,GACT,QAASL,GACT,QAASqF,GACT,QAASA,GACT,QAAShF,GACT,QAASL,GACT,QAASK,GACT,QAAS4G,GACT,QAAS7G,GACT,QAASR,GACT,QAASA,GACT,QAASc,GACT,QAAS8E,GACT,QAAShG,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAAS8H,GACT,QAASL,GACT,QAASK,GACT,QAAS9H,GACT,QAASa,GACT,QAASb,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAAS2H,GACT,QAAS3B,GACT,QAAShG,GACT,QAASA,GACT,QAASA,GACT,QAASyH,GACT,QAASA,GACT,QAASC,GACT,QAASA,GACT,QAAS1B,GACT,QAASA,GACT,QAASnF,GACT,QAAS2G,GACT,QAASA,GACT,QAASC,GACT,QAASA,GACT,QAASA,GACT,QAAS5G,GACT,QAASA,GACT,QAASA,GACT,QAASb,GACT,QAASa,GACT,QAASA,GACT,QAASb,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASa,GACT,QAASb,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASa,GACT,QAAS4G,GACT,QAASzH,GACT,QAASa,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASb,GACT,QAASwH,GACT,QAASA,GACT,QAAS3G,GACT,QAAS4G,GACT,QAAS5G,GACT,QAASb,GACT,QAASgG,GACT,QAASA,GACT,QAAShG,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASa,GACT,QAASA,GACT,QAASb,GACT,QAASA,GACT,QAASA,GACT,QAASa,GACT,QAASb,GACT,QAASA,GACT,QAASA,GACT,QAASa,GACT,QAASA,GACT,QAASA,GACT,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,GACT,MAASqF,GACT,MAASxF,GACT,MAASO,GACT,MAAS8E,GACT,MAAS/E,GACT,MAAS6G,GACT,MAAS9B,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAAS5E,GAET,MAASX,GAET,MAASS,GACT,MAASP,GACT,MAASiH,GACT,MAASA,GACT,MAASzH,GACT,MAASA,GACT,MAASA,GACT,MAASyH,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASzH,GACT,MAASA,GACT,MAASA,GACT,MAASyH,GACT,MAASzG,GACT,MAAS6E,GACT,MAAS4B,GACT,MAASA,GACT,MAASjH,GACT,MAASiH,GACT,MAAS1G,GACT,MAAS0G,GACT,MAASA,GACT,MAASzH,GACT,MAASgG,GACT,MAAS5F,GACT,MAASqH,GACT,MAASrH,GACT,MAASqH,GACT,MAAS5B,GACT,MAAS4B,GACT,MAASrH,GACT,MAASqH,GACT,MAASA,GACT,MAASrH,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASqH,GACT,MAASrH,GACT,MAASA,GACT,MAASqH,GACT,MAASzH,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASI,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GAET,MAASI,GACT,MAASO,GACT,MAASyG,GACT,MAASpH,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASoH,GACT,MAASpH,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASqH,GACT,MAASC,GACT,MAASD,GACT,MAASrH,GACT,MAASoH,GACT,MAASpH,GACT,MAASA,GACT,MAASqH,GACT,MAASA,GACT,MAASrH,GACT,MAASJ,GACT,MAASA,GACT,MAASI,GACT,MAASqH,GACT,MAASzH,GACT,MAASA,GACT,MAASI,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASJ,GACT,MAASA,GACT,MAASI,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GAET,MAASA,GACT,MAASI,GACT,MAASL,GACT,MAASiG,GACT,MAASA,GACT,MAASA,GACT,MAASI,GACT,MAASC,GACT,MAASe,GACT,MAASpB,GACT,MAAS1F,GACT,MAASN,GACT,MAASgG,GACT,MAAS1F,GACT,MAASA,GACT,MAASN,GACT,MAASI,GACT,MAASO,GACT,MAASiF,GACT,MAASxF,GACT,MAASA,GACT,MAASL,GACT,MAASC,GACT,MAASI,GACT,MAASJ,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GAET,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAAS4F,GACT,MAAShG,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASI,GACT,MAASJ,GACT,MAASA,GACT,MAASA,GACT,MAASI,GACT,MAASA,GACT,MAASoH,GACT,MAASpH,GACT,MAASsH,GACT,MAAS1H,GACT,MAASA,GACT,MAASI,GACT,MAASA,GACT,MAASA,GACT,MAASJ,GACT,MAASI,GACT,MAASoH,GACT,MAASA,GACT,MAASpH,GACT,MAASJ,GACT,MAASA,GACT,MAASwH,GACT,MAASpH,GACT,MAASoH,GACT,MAASpH,GACT,MAASA,GACT,MAASJ,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASyH,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASzH,GACT,MAASyH,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASzH,GACT,MAASyH,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASzH,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASI,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GAET,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAAS4F,GACT,MAASxF,GACT,MAASO,GACT,MAASP,GACT,MAASA,GACT,MAASO,GACT,MAASP,GACT,MAASgH,GACT,MAAShH,GACT,MAASA,GACT,MAASA,GACT,MAASR,GACT,MAASI,GACT,MAASA,GACT,MAASJ,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASyH,GACT,MAASA,GACT,MAASA,GACT,MAASrH,GACT,MAASsH,GACT,MAASD,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASzH,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASyH,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GAGT,IAAOrH,GACP,IAAO4F,GACP,IAAOxF,GACP,IAAOqF,GACP,IAAOA,GACP,IAAOA,GACP,IAAOlF,GACP,IAAOM,GACP,KAAQL,GACR,KAAQR,GACR,KAAQA,GAER,MAAS4F,GACT,MAASA,GACT,MAASA,GACT,MAAS9E,GACT,MAASA,GACT,MAAS8E,GACT,MAASH,GACT,MAAS3E,GACT,MAAS8E,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAAS5F,GACT,MAASI,GACT,MAASJ,GACT,MAASI,GACT,MAASJ,GACT,MAASI,GACT,MAASJ,GACT,MAASW,GACT,MAASkF,GACT,MAAS7F,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASJ,GACT,MAAS0H,GACT,MAASpH,GACT,MAASN,GACT,MAASI,GACT,MAASJ,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASI,GACT,MAASI,GACT,MAASR,GACT,MAASI,GACT,MAASJ,GACT,MAASA,GACT,MAASI,GACT,MAASE,GACT,MAASF,GACT,MAASA,GACT,MAASA,GACT,MAASJ,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASI,GACT,MAASA,GACT,MAASA,GACT,MAASJ,GACT,MAASI,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAAS4F,GACT,MAASA,GACT,MAAS5F,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASa,GACT,MAASb,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASJ,GACT,MAASI,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASJ,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASI,GACT,MAASA,GACT,MAASoH,GACT,MAASA,GACT,MAASpH,GACT,MAASA,GACT,MAASsH,GACT,MAASpH,GACT,MAASN,GACT,MAASyH,GACT,MAASnH,GACT,MAASN,GAET,eAAgBgG,GAChB,mBAAoBhG,GACpB,iBAAkBA,GAClB,iBAAkBA,GAClB,eAAgBI,GAChB,iBAAkBJ,GAClB,eAAgBA,GAChB,kBAAmBA,GACnB,iBAAkBI,GAClB,oBAAqBJ,GACrB,kBAAmBG,GACnB,qBAAsB6F,GACtB,oBAAqBA,GACrB,gBAAiBA,GACjB,mDAAoD9E,GACpD,wBAAyBV,GACzB,uBAAwBwF,GACxB,cAAejF,GACf,gCAAiCH,GACjC,iCAAkCR,GAClC,gDAAiDgG,GACjD,+BAAgChG,GAChC,cAAeI,GACf,kCAAmCA,GACnC,iDAAkDgG,GAClD,iDAAkDC,GAClD,wCAAyCjG,GACzC,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MAAS4F,GACT,MAASA,GACT,MAASjF,GACT,MAASiF,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASxF,GACT,MAASwF,GACT,MAASA,GACT,MAASpF,GACT,MAASK,GACT,MAASX,GACT,MAASM,GACT,MAASZ,GACT,MAASQ,GAET,IAASR,GACT,MAASI,GACT,MAASU,GACT,MAASV,GACT,MAASgG,GACT,MAAShG,GACT,MAASA,GACT,MAASsG,GACT,MAASc,GACT,MAASpH,GACT,MAASA,GACT,MAASD,GACT,MAASa,GACT,MAASR,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASO,GACT,MAASA,GACT,MAASC,GACT,MAASZ,GACT,MAASA,GACT,MAASA,GACT,MAASoH,GACT,MAASpH,GACT,MAASA,GACT,MAASM,GACT,MAASN,GACT,MAASI,GACT,MAASC,GAET,IAASL,GACT,MAASJ,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GAET,IAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAAS0H,GACT,MAAS1H,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASwH,GACT,MAASxH,GACT,MAASiB,GACT,MAASjB,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAAS0H,GACT,MAASA,GACT,MAASA,GACT,MAAS1H,GAET,MAASA,GACT,MAASA,GACT,MAASyH,GACT,MAASzH,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,KAASc,GACT,MAASV,GACT,MAASA,GACT,MAASA,GACT,MAASoH,GACT,MAASxH,GACT,MAASA,GACT,MAASA,GACT,MAASI,GACT,MAASJ,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASyH,GACT,MAASzH,GACT,KAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,KAASe,GACT,MAASA,GACT,MAASP,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASQ,GACT,MAASZ,GACT,MAASA,GACT,MAASyF,GACT,MAASzF,GACT,MAASA,GACT,MAASI,GACT,MAASE,GACT,MAASN,GACT,MAASqH,GACT,MAASA,GACT,MAASD,GACT,MAAS3B,GAET,MAASzF,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASI,GACT,MAASR,GACT,MAASkB,GACT,MAASlB,GACT,MAASA,GACT,MAASA,GACT,MAAS6F,GACT,MAASzF,GACT,MAASA,GACT,MAASA,GACT,MAASqH,GACT,MAASA,GACT,MAASA,GACT,MAASrH,GACT,MAASqH,GACT,MAASrH,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASoH,GACT,MAAShH,GACT,MAASR,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASI,GACT,MAASsH,GACT,MAAS1H,GACT,MAAS0H,GACT,MAAStH,GACT,MAASA,GACT,MAASJ,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASQ,GACT,MAASA,GACT,MAASJ,GACT,MAASA,GACT,MAASqH,IAEb,MAAS,CAAC,GAEd,QAAW,CACP,eAAkB,EAClB,eAAkB,QAClB,gBAAmB,CACf,KAAQ,SAEZ,aAAgB,CACZ,OAAU,MACV,MAAS,UACT,QAAW,UACX,IAAO,OACP,SAAY,OACZ,OAAU,OACV,OAAU,OACV,QAAW,MACX,GAAM,WACN,cAAiB,YACjB,IAAO,QACP,iBAAkB,OAClB,SAAU,QACV,OAAU,SACV,WAAc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C,uCAAwC,GACxC,sCAAuC,EACvC,2BAA4B,GAC5B,2BAA4B,GAE5B,4BAA6B,GAC7B,yBAA0B,GAC1B,4BAA6B,GAC7B,qBAAsB,GACtB,yBAA0B,GAC1B,qBAAsB,GACtB,yBAA0B,GAE1B,+BAAgC,IAChC,6BAA8B,IAE9B,mCAAoC,EACpC,oCAAqC,EACrC,kCAAmC,IACnC,mCAAoC,IACpC,oCAAqC,IAErC,8BAA+B,EAE/B,sBAAuB,EACvB,oBAAqB,EACrB,2BAA4B,EAC5B,mCAAoC,EACpC,yCAA0C,KAItD,eAAkB,CACd,IAAO4jS,IAEX,WAAc,CAMV,MAAS,CACL,SAAUZ,GACV,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASyH,GACT,QAASzB,GACT,QAAShG,GACT,QAASA,GACT,QAASA,GACT,KAAQI,GACR,KAAQJ,GACR,MAASA,GACT,MAASkB,GACT,MAAS+E,GACT,MAASD,GACT,MAASxF,GACT,MAASI,GACT,MAASoF,GACT,MAASA,GACT,MAASA,GACT,MAASxF,GACT,MAASJ,GACT,MAASA,GACT,MAASA,GACT,MAASQ,GACT,MAASJ,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASR,GACT,MAASA,GACT,MAASA,GACT,OAAUQ,GACV,OAAUkH,GACV,OAAU1H,GACV,OAAUwH,GACV,OAAUC,GACV,OAAUD,GACV,OAAUA,GACV,OAAUC,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUD,GACV,OAAUC,GACV,OAAUD,GACV,OAAUC,GACV,OAAUA,GACV,OAAUA,GACV,OAAUrH,GACV,OAAUJ,GACV,OAAUyH,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUrH,GACV,OAAUA,GACV,OAAUqH,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OA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A,GACV,OAAUA,GACV,MAAUA,GACV,OAAUyH,GACV,OAAUA,GACV,OAAUD,GACV,OAAUC,GACV,OAAUA,GACV,OAAUD,GACV,OAAUE,GACV,OAAUD,GACV,OAAUA,GACV,OAAUjH,GACV,OAAUiH,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUzH,GACV,OAAUA,GACV,OAAUI,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUuH,GACV,OAAUvH,GACV,OAAUA,GACV,OAAUA,GACV,OAAUoH,GACV,OAAUpH,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUJ,GACV,OAAUI,GACV,OAAUI,GACV,OAAUA,GACV,OAAUA,GACV,OAAUJ,GACV,OAAUA,GACV,OAAUA,GACV,MAAUA,GACV,OAAUJ,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,MAAUA,GACV,OAAUA,GACV,MAAS0H,GACT,MAAS1H,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASI,GACT,MAASoH,GACT,MAAShH,GACT,MAASA,GACT,MAASA,GACT,MAASR,GACT,MAASA,GACT,MAASI,GACT,MAASJ,GACT,MAASA,GACT,MAASA,GACT,MAASyH,GACT,MAA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SoH,GACT,MAASxH,GACT,MAASI,GACT,KAAQqH,GACR,MAASzG,GACT,MAASyG,GACT,KAAQA,GACR,KAAQD,GACR,IAAOxH,GAEP,IAAOI,GACP,MAASI,GACT,MAASgH,GACT,MAASpH,GACT,MAASJ,GACT,MAASwH,GACT,OAAUtG,GACV,GAAMd,GACN,IAAO4F,GACP,MAASA,GACT,MAAShG,GACT,MAASA,GACT,MAASgG,GACT,MAASzF,GACT,MAASP,GACT,MAASA,GACT,MAASA,GACT,MAASyH,GACT,MAASrH,GACT,MAASU,GACT,MAASd,GACT,MAASI,GACT,MAASM,GACT,MAASA,GACT,MAASA,GACT,MAASD,GACT,MAASA,GACT,MAAS2F,GACT,MAAShG,GACT,MAASA,GACT,MAASJ,GACT,MAASc,GACT,MAASV,GACT,MAASA,GACT,MAASJ,GACT,MAASI,GACT,MAASA,GACT,MAASA,GACT,IAASA,GACT,MAASqH,GACT,MAASzH,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASyH,GACT,MAAS1G,GACT,MAASiF,GACT,MAAShG,GACT,MAASyH,GACT,MAASC,GACT,MAASD,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASrH,GACT,OAAU4F,GACV,OAAUA,GACV,OAAUhG,GACV,OAAUkB,GACV,OAAUV,GACV,OAAUA,GACV,OAAUR,GACV,OAAU2H,GACV,OAAU3H,GACV,KAAUI,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAU4F,GACV,OAAUA,GACV,OAAU5F,GACV,OAAUA,GACV,OAAU4F,GACV,OAAUU,IAEd,MAAS,CACL,8CAA+C1G,GAC/C,6CAA8CA,GAC9C,+BAAgCgB,GAChC,kCAAmCyG,GACnC,SAAYA,GACZ,wBAAyBD,GACzB,wBAAyBA,GACzB,0CAA2CxH,GAC3C,kBAAmBA,GACnB,eAAgBA,GAChB,YAAeM,M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AAkC,IAClC,8BAA+B,QAI3C,KAAQ,CACJ,QAAW,CACP,MAASd,KAAKw4S,YAAY,UAC1B,MAASx4S,KAAKw4S,YAAY,WAE9B,KAAQ,CACJ,MAASx4S,KAAKw4S,YAAY,UAC1B,MAASx4S,KAAKw4S,YAAY,WAE9B,OAAU,CACN,MAASx4S,KAAKw4S,YAAY,UAC1B,MAASx4S,KAAKw4S,YAAY,WAE9B,KAAQ,CACJ,MAASx4S,KAAKw4S,YAAY,WAC1B,MAASx4S,KAAKw4S,YAAY,aAGlC,oBAAuB,CACnB,QAAU,EACV,QAAU,EACV,UAAY,GAEhB,WAAc,CACV,MAAS,CAGL,EAAK7T,GACL,EAAKA,GACL,IAASb,GACT,MAASM,GACT,MAASN,GACT,MAASO,GACT,MAASU,GACT,MAASjB,GACT,MAASe,GACT,MAASiF,GACT,MAASjF,GACT,MAASf,GACT,MAASY,GACT,MAASR,GACT,MAASa,GACT,MAASjB,GACT,MAASA,GACT,MAASA,GACT,MAASI,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASJ,GACT,MAASA,GACT,MAASiB,GACT,MAAST,GACT,MAASiH,GACT,MAASA,GAET,MAASxG,GACT,MAAS+E,GACT,MAAS9E,GACT,MAAS8E,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAAShG,GACT,MAASI,GACT,MAASI,GACT,MAASwF,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAAShF,GACT,MAASR,GAET,KAASR,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASyH,GACT,MAASD,GACT,MAASzG,GACT,MAASP,GACT,MAASiH,GACT,MAAS3G,GACT,MAASV,GACT,MAASA,GACT,MAASqH,GACT,MAASzH,GACT,MAASI,GACT,MAASA,GACT,MAASJ,GACT,MAASI,GACT,MAASA,GACT,MAASqH,GACT,MAAS1G,GACT,MAAS0G,GACT,MAASrH,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASJ,GACT,MAASA,GACT,MAASA,GACT,MAASyH,GACT,MAASA,GACT,MAASA,GACT,MAASzH,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASyH,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAAS7G,GACT,MAAS6G,GACT,MAASzH,GACT,MAASyH,GACT,MAASA,GACT,MAASD,GACT,MAASxH,GACT,MAASA,GACT,MAASA,GACT,MAASyH,GACT,MAASA,GACT,MAASA,GACT,MAASD,GACT,MAASC,GACT,MAASA,GACT,MAASA,GACT,MAASD,GACT,MAASxH,GACT,MAASyH,GACT,MAASA,GACT,MAASzH,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASyH,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASzH,GACT,MAASyH,GACT,MAASzH,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASyH,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASC,GACT,MAASA,GACT,MAASA,GACT,MAASD,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASzH,GACT,MAASyH,GACT,MAASzH,GACT,MAASyH,GACT,MAASzH,GACT,MAASyH,GACT,MAASD,GACT,MAASC,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASzH,GACT,MAASA,GACT,MAASA,GACT,MAAS0H,GACT,MAAS1B,GACT,MAASA,GACT,MAASA,GACT,MAAS5F,GACT,MAASoH,GAET,KAASpH,GAET,KAASA,GACT,MAASA,GAET,KAASA,GACT,MAAS4F,GACT,MAASxF,GACT,MAASM,GACT,MAASC,GACT,MAASf,GACT,MAASI,GACT,MAASyF,GACT,MAASnF,GACT,MAASK,GACT,MAASH,GACT,MAASR,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASM,GACT,MAASA,GACT,MAASA,GACT,MAASV,GACT,MAASI,GACT,MAASM,GACT,MAASN,GACT,MAASM,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASiG,GACT,MAASA,GACT,MAASP,GACT,MAASjG,GACT,MAASY,GACT,MAAS0F,GACT,MAASD,GACT,MAASE,GACT,MAASN,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASJ,GACT,MAAS7F,GACT,MAASA,GACT,MAASiG,GACT,MAASA,GACT,MAASA,GACT,MAASoB,GACT,MAASR,GACT,MAASQ,GAET,KAASpH,GACT,MAASA,GACT,MAASqH,GACT,MAASA,GACT,MAASA,GACT,MAASD,GACT,MAASC,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASD,GACT,MAASC,GACT,MAASA,GACT,MAASD,GACT,MAASA,GACT,MAASC,GACT,MAASjH,GACT,MAASA,GACT,MAASJ,GACT,MAASA,GACT,MAASA,GACT,MAASA,GACT,MAASI,GACT,MAASwF,GACT,MAAS5F,GACT,MAAS4F,GACT,MAAShF,GACT,MAASgF,GACT,MAASA,GACT,MAAStF,GACT,MAASK,GACT,MAASX,GACT,MAASA,GA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SA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAAS7S,GACT,QAAS6S,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAAS62N,GACT,QAAS72N,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAAS8wZ,GACT,QAAS3ja,GACT,QAAS89O,GACT,QAASA,GACT,QAASpU,GACT,QAASA,GACT,QAAS1pO,GACT,QAASA,GACT,QAASA,GACT,QAASA,GAET,QAASw6O,GACT,QAAS9Q,GACT,QAASgV,GACT,QAAS7rO,GACT,QAAS7S,GACT,QAAS6S,GACT,QAASA,GACT,QAASkoO,GACT,QAASloO,GACT,QAASkwZ,GACT,QAASlwZ,GACT,QAASA,GACT,QAASkoO,GACT,QAASloO,GACT,QAASspO,GACT,QAAStpO,GACT,QAASA,GACT,QAASkwZ,GACT,QAAS5mL,GACT,QAASA,GACT,QAAStpO,GACT,QAAS7S,GACT,QAASm8O,GACT,QAASpB,GACT,QAASA,GACT,QAASloO,GACT,QAASA,GACT,QAASyiE,GACT,QAASgvV,GACT,QAASvpL,GACT,QAASoB,GACT,QAASpB,GACT,QAASloO,GACT,QAASy8D,GACT,QAASz8D,GACT,QAAS8nO,GACT,QAASI,GACT,QAASA,GACT,QAASJ,GACT,QAAS7V,GACT,QAASA,GACT,QAASjyN,GACT,QAAS62N,GACT,QAASqS,GACT,QAASjX,GACT,QAASomG,GACT,QAASA,GACT,QAASpmG,GACT,QAAS6V,GACT,QAAS9nO,GACT,QAAS8nO,GACT,QAASjR,GACT,QAASsW,GACT,QAASrF,GACT,QAASA,GACT,QAASA,GACT,QAAS+D,GACT,QAASqlL,GACT,QAASlxZ,GACT,QAASA,GACT,QAAS+3E,GACT,QAAStb,GACT,QAASA,GACT,QAASA,GACT,QAASyrK,GACT,QAASloO,GACT,QAASgxZ,GACT,QAAS/+L,GACT,QAASiW,GACT,QAASiF,GACT,QAASkrF,GACT,QAASA,GACT,QAASrgF,GACT,QAAS7K,GACT,QAASjF,GACT,QAASA,GACT,QAASJ,GACT,QAASI,GACT,QAASA,GACT,QAASopL,GACT,QAASppL,GACT,QAASx6F,GACT,QAASw6F,GACT,QAASrR,GACT,QAAS72N,GACT,QAASy8D,GACT,QAASw1J,GACT,QAASx1J,GACT,QAASA,GACT,QAASyrK,GACT,QAASA,GACT,QAASA,GACT,QAASloO,GACT,QAASkoO,GACT,QAAS2D,GACT,QAASqB,GACT,QAASjb,GACT,QAASib,GACT,QAASzwK,GACT,QAASw1J,GACT,QAASA,GACT,QAASA,GACT,QAAS6V,GACT,QAAS7V,GACT,QAASA,GACT,QAASA,GACT,QAASiW,GACT,QAASA,GACT,QAASgB,GACT,QAAShB,GACT,QAASzrK,GACT,QAASw1J,GACT,QAASiW,GACT,QAASloO,GACT,QAASA,GACT,QAAS8nO,GACT,QAASrrK,GACT,QAASyrK,GACT,QAASjW,GACT,QAASjyN,GACT,QAASA,GACT,SAAUiwZ,GACV,SAAUjwZ,GACV,SAAUiyN,GACV,SAAUjyN,GACV,SAAUA,GACV,SAAUA,GACV,SAAUA,GACV,SAAUy8D,GACV,SAAUz8D,GACV,SAAUy8D,GACV,SAAUyrK,GACV,SAAUA,GACV,SAAUA,GACV,SAAUloO,GACV,SAAUiyN,GACV,SAAUjyN,GACV,SAAUirO,GACV,SAAUjrO,GACV,SAAUkoO,GACV,SAAUjW,GACV,SAAUiW,GACV,SAAUloO,GACV,SAAUA,GACV,SAAUkoO,GACV,SAAUA,GACV,SAAUA,GACV,SAAUA,GACV,SAAUA,GACV,SAAUloO,GACV,SAAUA,GACV,SAAUkoO,GACV,SAAU2D,GACV,SAAU3D,GACV,SAAUA,GACV,SAAUA,GACV,SAAUA,GACV,SAAUJ,GACV,SAAU9nO,GACV,SAAUkpO,GAEV,SAAUhB,GACV,SAAUA,GACV,SAAUA,GACV,SAAUJ,GACV,SAAUI,GACV,SAAUA,GACV,SAAUloO,GACV,SAAU8nO,GAEV,SAAUoB,GACV,SAAUA,GACV,SAAUA,GACV,SAAUA,GACV,SAAUlpO,GACV,SAAUA,GAEV,SAAUA,GACV,SAAU7S,GACV,SAAU6S,GACV,SAAU7S,GACV,SAAU6S,GACV,SAAUA,GACV,SAAUA,GACV,SAAU7S,GACV,SAAU6S,GAEV,SAAUA,GACV,SAAUkwZ,GACV,SAAUrkL,GACV,SAAU3D,GACV,SAAUzrK,GACV,SAAUyrK,GACV,SAAUA,GACV,SAAUjW,GACV,OAAQ4E,GACR,UAAWA,GACX,UAAWA,KAIfy+G,OAAQ,CAEN1pH,MAAO,CACL,QAASqG,GACT,QAASA,GACT,QAAS4E,GACT,QAASqS,GACT,QAAShB,GACT,QAASJ,GACT,QAASH,GACT,QAASA,GACT,QAASO,GACT,QAASA,GACT,QAASJ,GACT,QAAS9nO,GACT,QAAS7S,GACT,QAAS+7O,GACT,QAASjX,GACT,QAASA,GACT,QAAS+W,GACT,QAASnS,GACT,QAAS72N,GACT,QAAS62N,GACT,QAAS72N,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAAS6rO,GACT,QAAS/D,GACT,QAAS9nO,GACT,QAASA,GACT,QAAS7S,GACT,QAAS6S,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAAS7S,GACT,QAAS6S,GACT,QAASyxZ,GACT,QAASx/L,GACT,QAAS4E,GACT,QAASgV,GACT,QAAS7rO,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAAS7S,GACT,QAAS89O,GACT,QAAS/C,GACT,QAAS+C,GACT,QAASpU,GACT,QAASA,GACT,QAAS1pO,GACT,QAAS26O,GACT,QAASrrK,GACT,QAASA,GACT,QAAStvE,GACT,QAASA,GACT,QAASA,GACT,QAAS+6O,GACT,QAASzrK,GACT,QAAStvE,GACT,QAAS6S,GACT,QAAS7S,GACT,QAASsvE,GACT,QAASz8D,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAAS7S,GACT,QAAS6S,GACT,QAASA,GACT,QAAS7S,GACT,QAAS6S,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAAS7S,GACT,QAAS6S,GACT,QAASA,GACT,QAAS7S,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASsvE,GACT,QAASA,GACT,QAASyrK,GACT,QAAS/6O,GACT,QAAS+6O,GACT,QAASloO,GACT,QAAS62N,GACT,QAASA,GACT,QAAS72N,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASkoO,GACT,QAASA,GACT,QAASloO,GACT,QAASA,GACT,QAASA,GACT,QAAS7S,GACT,QAAS6S,GACT,QAASA,GACT,QAAS7S,GACT,QAASA,GACT,QAASA,GACT,QAAS+6O,GACT,QAASloO,GACT,QAAS8nO,GACT,QAAS36O,GACT,QAASA,GACT,QAASA,GACT,QAAS8kO,GACT,QAASjyN,GACT,QAAS7S,GACT,QAAS26O,GACT,QAASA,GACT,QAAS7V,GACT,QAASA,GACT,QAASA,GACT,QAASiW,GACT,QAASA,GACT,QAASloO,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASkoO,GACT,QAAS/6O,GACT,QAASska,GACT,QAASvpL,GACT,QAASloO,GACT,QAASkoO,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,SAAUA,GACV,QAASloO,GACT,QAASA,GACT,QAAS7S,GACT,QAAS26O,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASI,GACT,QAASA,GACT,QAASloO,GACT,QAASA,GACT,QAAS8nO,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAAS36O,GACT,QAASA,GACT,QAAS+6O,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASloO,GACT,QAAS7S,GACT,QAAS6S,GACT,QAASA,GACT,QAASA,GACT,QAASkoO,GAIT,SAAUupL,GACV,SAAUzxZ,GACV,SAAUA,GACV,SAAU7S,GACV,SAAU6S,GACV,SAAUA,GACV,SAAUA,GACV,SAAUkoO,GACV,SAAUloO,KAIdqoS,QAAS,CAEPz8E,MAAO,CACL,QAAS+b,GACT,QAASA,GACT,QAAS9Q,GACT,QAASqS,GACT,QAAShB,GACT,QAASJ,GACT,QAASH,GACT,QAASA,GACT,QAASO,GACT,QAASJ,GACT,QAAS9nO,GACT,QAASA,GACT,QAASkpO,GACT,QAASjX,GACT,QAASA,GACT,QAAS+W,GACT,QAASnS,GACT,QAAS72N,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAAS6rO,GACT,QAAShV,GACT,QAASgV,GACT,QAAS7rO,GACT,QAASkoO,GACT,QAASloO,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASyiE,GACT,QAASo0J,GACT,QAAS72N,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAAS7S,GACT,QAAS89O,GACT,QAASA,GACT,QAASpU,GACT,QAASA,GACT,QAASqR,GACT,QAASzrK,GACT,QAASA,GACT,QAASyrK,GACT,QAAS/6O,GACT,QAASA,GACT,QAAS+6O,GACT,QAAS/6O,GACT,QAAS+6O,GACT,QAASloO,GACT,QAASkoO,GACT,QAASA,GACT,QAASloO,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASkoO,GACT,QAASloO,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASkoO,GACT,QAASjW,GACT,QAASA,GACT,QAASiW,GACT,QAASjW,GACT,QAASiW,GACT,QAASA,GACT,QAASA,GACT,QAASzrK,GACT,QAASA,GACT,QAASyrK,GACT,QAASA,GACT,QAASA,GACT,QAASloO,GACT,QAAS62N,GACT,QAASA,GACT,QAAS72N,GACT,QAASA,GACT,QAASA,GACT,QAASkoO,GACT,QAASloO,GAET,QAASkoO,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASK,GACT,QAASvoO,GACT,QAASA,GACT,QAASA,GACT,QAAS8nO,GACT,QAASA,GACT,QAAS7V,GACT,QAASA,GACT,QAASA,GACT,QAASiW,GACT,QAASA,GACT,QAASloO,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAAS7S,GACT,QAAS+6O,GACT,QAASloO,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAAS7S,GACT,QAAS26O,GACT,QAASA,GACT,QAAS9nO,GACT,QAASkoO,GACT,QAASA,GACT,QAASjW,GACT,QAAS6V,GACT,QAASA,GACT,QAASI,GACT,QAASjW,GAIT,SAAUw/L,GACV,SAAUzxZ,GACV,SAAUA,GACV,SAAU7S,GACV,SAAU6S,GACV,SAAUA,GACV,SAAUA,GACV,SAAUkoO,GACV,SAAUloO,KAId49E,OAAQ,CAENguI,MAAO,CACL,QAAS+b,GACT,QAASA,GACT,QAAS9Q,GACT,QAASqS,GACT,QAAS/7O,GACT,QAAS+7O,GACT,QAASjX,GACT,QAASA,GACT,QAAS+W,GACT,QAASnS,GACT,QAAS72N,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAAS62N,GACT,QAAS72N,GACT,QAASyiE,GACT,QAASA,GACT,QAASziE,GACT,QAASiyN,GACT,QAAS9kO,GACT,QAAS89O,GACT,QAASpU,GACT,QAASA,GACT,QAASp6J,GACT,QAASA,GACT,QAASywK,GACT,QAASltO,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,KAIb2xa,gBAAiB,CACf/lN,MAAO,CACL,QAASqG,GACT,QAASA,GACT,QAAS4E,GACT,QAASqS,GACT,QAAShB,GACT,QAASJ,GACT,QAASH,GACT,QAASA,GACT,QAASO,GACT,QAASJ,GACT,QAASI,GACT,QAAS/6O,GACT,QAAS+7O,GACT,QAASjX,GACT,QAASA,GACT,QAAS+W,GACT,QAASnS,GACT,QAAS72N,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASyiE,GACT,QAASt1E,GACT,QAASs1E,GACT,QAASziE,GACT,QAASkoO,GACT,QAASloO,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASyxZ,GACT,QAAS56L,GACT,QAAS72N,GACT,QAASA,GACT,QAASA,GACT,QAAS7S,GACT,QAASA,GACT,QAAS89O,GACT,QAASA,GACT,QAASpU,GACT,QAASA,GACT,QAASqR,GACT,QAASzrK,GACT,QAASA,GACT,QAAStvE,GACT,QAASA,GACT,QAASA,GACT,QAAS+6O,GACT,QAASA,GACT,QAASA,GACT,QAASloO,GACT,QAASkoO,GACT,QAASA,GACT,QAASloO,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASkoO,GACT,QAASloO,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASkoO,GACT,QAAS/6O,GACT,QAAS6S,GACT,QAASkoO,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASloO,GACT,QAASy8D,GACT,QAASA,GACT,QAASyrK,GACT,QAAS/6O,GACT,QAAS+6O,GACT,QAASloO,GACT,QAAS62N,GACT,QAASA,GACT,QAAS72N,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASkoO,GACT,QAASA,GACT,QAASloO,GACT,QAASA,GACT,QAASA,GACT,QAASkoO,GACT,QAASloO,GACT,QAASA,GACT,QAASA,GACT,QAASkoO,GACT,QAASA,GACT,QAASA,GACT,QAASloO,GACT,QAAS8nO,GACT,QAAS36O,GACT,QAASA,GACT,QAAS+6O,GACT,QAAS/6O,GACT,QAAS6S,GACT,QAASA,GACT,QAAS8nO,GACT,QAASA,GACT,QAAS9nO,GACT,QAASA,GACT,QAAS7S,GACT,QAAS+6O,GACT,QAASA,GACT,QAASloO,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAASA,GACT,QAAS7S,GACT,QAASska,GACT,QAASvpL,GACT,QAASA,GACT,QAASloO,GACT,QAASA,GACT,QAASA,GACT,QAAS7S,GACT,QAASA,KAIby+N,MAAO,CACL,+BAAgCqkM,GAChC,qBAAsBtoL,GACtB,kDAAmDG,GACnD,y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","sources":["../../../node_modules/@emotion/sheet/dist/emotion-sheet.esm.js","../../../node_modules/stylis/src/Utility.js","../../../node_modules/stylis/src/Tokenizer.js","../../../node_modules/stylis/src/Enum.js","../../../node_modules/stylis/src/Serializer.js","../../../node_modules/stylis/src/Parser.js","../../../node_modules/@emotion/cache/dist/emotion-cache.browser.esm.js","../../../node_modules/stylis/src/Middleware.js","../../../node_modules/@emotion/memoize/dist/emotion-memoize.esm.js","../../../node_modules/@emotion/weak-memoize/dist/emotion-weak-memoize.esm.js","../../../node_modules/@emotion/react/_isolated-hnrs/dist/emotion-react-_isolated-hnrs.browser.esm.js","../../../node_modules/@emotion/react/dist/emotion-element-5486c51c.browser.esm.js","../../../node_modules/@emotion/react/dist/emotion-react.browser.esm.js","../../../node_modules/@emotion/unitless/dist/emotion-unitless.esm.js","../../../node_modules/@emotion/serialize/dist/emotion-serialize.esm.js","../../../node_modules/@emotion/hash/dist/emotion-hash.esm.js","../../../node_modules/@emotion/use-insertion-effect-with-fallbacks/dist/emotion-use-insertion-effect-with-fallbacks.browser.esm.js","../../../node_modules/@emotion/utils/dist/emotion-utils.browser.esm.js","../../../node_modules/@metamask/object-multiplex/dist/ObjectMultiplex.js","../../../node_modules/@metamask/object-multiplex/dist/Substream.js","../../../node_modules/@metamask/object-multiplex/dist/index.js","../../../node_modules/@metamask/object-multiplex/node_modules/isarray/index.js","../../../node_modules/@metamask/object-multiplex/node_modules/readable-stream/lib/_stream_duplex.js","../../../node_modules/@metamask/object-multiplex/node_modules/readable-stream/lib/_stream_passthrough.js","../../../node_modules/@metamask/object-multiplex/node_modules/readable-stream/lib/_stream_readable.js","../../../node_modules/@metamask/object-multiplex/node_modules/readable-stream/lib/_stream_transform.js","../../../node_modules/@metamask/object-multiplex/node_modules/readable-stream/lib/_stream_writable.js","../../../node_modules/@metamask/object-multiplex/node_modules/readable-stream/lib/internal/streams/BufferList.js","../../../node_modules/@metamask/object-multiplex/node_modules/readable-stream/lib/internal/streams/destroy.js","../../../node_modules/@metamask/object-multiplex/node_modules/readable-stream/lib/internal/streams/stream-browser.js","../../../node_modules/@metamask/object-multiplex/node_modules/readable-stream/readable-browser.js","../../../node_modules/@metamask/object-multiplex/node_modules/safe-buffer/index.js","../../../node_modules/@metamask/object-multiplex/node_modules/string_decoder/lib/string_decoder.js","../../../node_modules/@metamask/providers/dist/messages.js","../../../node_modules/@metamask/providers/dist/utils.js","../../../node_modules/@mui/base/Portal/Portal.js","../../../node_modules/@mui/base/utils/appendOwnerState.js","../../../node_modules/@mui/base/utils/isHostComponent.js","../../../node_modules/@mui/base/utils/resolveComponentProps.js","../../../node_modules/@mui/base/node_modules/clsx/dist/clsx.m.js","../../../node_modules/@mui/base/utils/omitEventHandlers.js","../../../node_modules/@mui/base/utils/mergeSlotProps.js","../../../node_modules/@mui/base/utils/extractEventHandlers.js","../../../node_modules/@mui/base/utils/useSlotProps.js","../../../node_modules/@mui/icons-material/ArrowForward.js","../../../node_modules/@mui/icons-material/Cancel.js","../../../node_modules/@mui/icons-material/CheckCircle.js","../../../node_modules/@mui/icons-material/Close.js","../../../node_modules/@mui/icons-material/HelpOutline.js","../../../node_modules/@mui/icons-material/OpenInNew.js","../../../node_modules/@mui/icons-material/utils/createSvgIcon.js","../../../node_modules/@mui/material/esm/Alert/alertClasses.js","../../../node_modules/@mui/material/esm/internal/svg-icons/SuccessOutlined.js","../../../node_modules/@mui/material/esm/internal/svg-icons/ReportProblemOutlined.js","../../../node_modules/@mui/material/esm/internal/svg-icons/ErrorOutline.js","../../../node_modules/@mui/material/esm/internal/svg-icons/InfoOutlined.js","../../../node_modules/@mui/material/esm/Alert/Alert.js","../../../node_modules/@mui/material/esm/Backdrop/backdropClasses.js","../../../node_modules/@mui/material/esm/Backdrop/Backdrop.js","../../../node_modules/@mui/material/esm/Box/Box.js","../../../node_modules/@mui/material/esm/Button/buttonClasses.js","../../../node_modules/@mui/material/esm/ButtonGroup/ButtonGroupContext.js","../../../node_modules/@mui/material/esm/Button/Button.js","../../../node_modules/@mui/material/esm/ButtonBase/Ripple.js","../../../node_modules/@mui/material/esm/ButtonBase/touchRippleClasses.js","../../../node_modules/@mui/material/esm/ButtonBase/TouchRipple.js","../../../node_modules/@mui/material/esm/ButtonBase/buttonBaseClasses.js","../../../node_modules/@mui/material/esm/ButtonBase/ButtonBase.js","../../../node_modules/@mui/material/esm/Card/cardClasses.js","../../../node_modules/@mui/material/esm/Card/Card.js","../../../node_modules/@mui/material/esm/CardActionArea/cardActionAreaClasses.js","../../../node_modules/@mui/material/esm/CardActionArea/CardActionArea.js","../../../node_modules/@mui/material/esm/internal/svg-icons/Cancel.js","../../../node_modules/@mui/material/esm/Chip/chipClasses.js","../../../node_modules/@mui/material/esm/Chip/Chip.js","../../../node_modules/@mui/material/esm/CircularProgress/circularProgressClasses.js","../../../node_modules/@mui/material/esm/CircularProgress/CircularProgress.js","../../../node_modules/@mui/material/esm/CssBaseline/CssBaseline.js","../../../node_modules/@mui/material/esm/Divider/dividerClasses.js","../../../node_modules/@mui/material/esm/Fade/Fade.js","../../../node_modules/@mui/material/esm/FilledInput/FilledInput.js","../../../node_modules/@mui/material/esm/FilledInput/filledInputClasses.js","../../../node_modules/@mui/material/esm/FormControl/formControlClasses.js","../../../node_modules/@mui/material/esm/FormControl/FormControl.js","../../../node_modules/@mui/material/esm/FormControl/FormControlContext.js","../../../node_modules/@mui/material/esm/FormControl/formControlState.js","../../../node_modules/@mui/material/esm/FormControl/useFormControl.js","../../../node_modules/@mui/material/esm/FormHelperText/formHelperTextClasses.js","../../../node_modules/@mui/material/esm/FormHelperText/FormHelperText.js","../../../node_modules/@mui/material/esm/FormLabel/FormLabel.js","../../../node_modules/@mui/material/esm/FormLabel/formLabelClasses.js","../../../node_modules/@mui/styled-engine/GlobalStyles/GlobalStyles.js","../../../node_modules/@mui/system/esm/GlobalStyles/GlobalStyles.js","../../../node_modules/@mui/material/esm/GlobalStyles/GlobalStyles.js","../../../node_modules/@mui/material/esm/Grow/Grow.js","../../../node_modules/@mui/material/esm/IconButton/iconButtonClasses.js","../../../node_modules/@mui/material/esm/IconButton/IconButton.js","../../../node_modules/@mui/material/esm/Input/Input.js","../../../node_modules/@mui/material/esm/Input/inputClasses.js","../../../node_modules/@mui/material/esm/InputAdornment/inputAdornmentClasses.js","../../../node_modules/@mui/material/esm/InputAdornment/InputAdornment.js","../../../node_modules/@mui/base/TextareaAutosize/TextareaAutosize.js","../../../node_modules/@mui/material/esm/InputBase/InputBase.js","../../../node_modules/@mui/material/esm/InputBase/inputBaseClasses.js","../../../node_modules/@mui/material/esm/InputBase/utils.js","../../../node_modules/@mui/material/esm/InputLabel/inputLabelClasses.js","../../../node_modules/@mui/material/esm/InputLabel/InputLabel.js","../../../node_modules/@mui/material/esm/Link/linkClasses.js","../../../node_modules/@mui/material/esm/Link/getTextDecoration.js","../../../node_modules/@mui/material/esm/Link/Link.js","../../../node_modules/@mui/material/esm/List/ListContext.js","../../../node_modules/@mui/base/ModalUnstyled/ModalManager.js","../../../node_modules/@mui/base/TrapFocus/TrapFocus.js","../../../node_modules/@mui/base/ModalUnstyled/modalUnstyledClasses.js","../../../node_modules/@mui/base/ModalUnstyled/ModalUnstyled.js","../../../node_modules/@mui/material/esm/Modal/Modal.js","../../../node_modules/@mui/material/esm/OutlinedInput/NotchedOutline.js","../../../node_modules/@mui/material/esm/OutlinedInput/OutlinedInput.js","../../../node_modules/@mui/material/esm/OutlinedInput/outlinedInputClasses.js","../../../node_modules/@mui/material/esm/Paper/paperClasses.js","../../../node_modules/@mui/material/esm/Paper/Paper.js","../../../node_modules/@popperjs/core/lib/dom-utils/getWindow.js","../../../node_modules/@popperjs/core/lib/dom-utils/instanceOf.js","../../../node_modules/@popperjs/core/lib/utils/math.js","../../../node_modules/@popperjs/core/lib/utils/userAgent.js","../../../node_modules/@popperjs/core/lib/dom-utils/isLayoutViewport.js","../../../node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js","../../../node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js","../../../node_modules/@popperjs/core/lib/dom-utils/getNodeName.js","../../../node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js","../../../node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js","../../../node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js","../../../node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js","../../../node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js","../../../node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js","../../../node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js","../../../node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js","../../../node_modules/@popperjs/core/lib/dom-utils/getParentNode.js","../../../node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js","../../../node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js","../../../node_modules/@popperjs/core/lib/dom-utils/isTableElement.js","../../../node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js","../../../node_modules/@popperjs/core/lib/enums.js","../../../node_modules/@popperjs/core/lib/utils/orderModifiers.js","../../../node_modules/@popperjs/core/lib/utils/debounce.js","../../../node_modules/@popperjs/core/lib/createPopper.js","../../../node_modules/@popperjs/core/lib/utils/mergeByName.js","../../../node_modules/@popperjs/core/lib/modifiers/eventListeners.js","../../../node_modules/@popperjs/core/lib/utils/getBasePlacement.js","../../../node_modules/@popperjs/core/lib/utils/getVariation.js","../../../node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js","../../../node_modules/@popperjs/core/lib/utils/computeOffsets.js","../../../node_modules/@popperjs/core/lib/modifiers/computeStyles.js","../../../node_modules/@popperjs/core/lib/modifiers/offset.js","../../../node_modules/@popperjs/core/lib/utils/getOppositePlacement.js","../../../node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.js","../../../node_modules/@popperjs/core/lib/dom-utils/contains.js","../../../node_modules/@popperjs/core/lib/utils/rectToClientRect.js","../../../node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js","../../../node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js","../../../node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js","../../../node_modules/@popperjs/core/lib/utils/mergePaddingObject.js","../../../node_modules/@popperjs/core/lib/utils/getFreshSideObject.js","../../../node_modules/@popperjs/core/lib/utils/expandToHashMap.js","../../../node_modules/@popperjs/core/lib/utils/detectOverflow.js","../../../node_modules/@popperjs/core/lib/utils/within.js","../../../node_modules/@popperjs/core/lib/modifiers/preventOverflow.js","../../../node_modules/@popperjs/core/lib/utils/getAltAxis.js","../../../node_modules/@popperjs/core/lib/modifiers/arrow.js","../../../node_modules/@popperjs/core/lib/modifiers/hide.js","../../../node_modules/@popperjs/core/lib/popper.js","../../../node_modules/@popperjs/core/lib/modifiers/popperOffsets.js","../../../node_modules/@popperjs/core/lib/modifiers/applyStyles.js","../../../node_modules/@popperjs/core/lib/modifiers/flip.js","../../../node_modules/@popperjs/core/lib/utils/computeAutoPlacement.js","../../../node_modules/@mui/base/PopperUnstyled/popperUnstyledClasses.js","../../../node_modules/@mui/base/PopperUnstyled/PopperUnstyled.js","../../../node_modules/@mui/material/esm/Popper/Popper.js","../../../node_modules/@mui/material/esm/List/listClasses.js","../../../node_modules/@mui/material/esm/List/List.js","../../../node_modules/@mui/material/esm/utils/getScrollbarSize.js","../../../node_modules/@mui/material/esm/MenuList/MenuList.js","../../../node_modules/@mui/material/esm/Popover/popoverClasses.js","../../../node_modules/@mui/material/esm/Popover/Popover.js","../../../node_modules/@mui/material/esm/Menu/menuClasses.js","../../../node_modules/@mui/material/esm/Menu/Menu.js","../../../node_modules/@mui/material/esm/NativeSelect/nativeSelectClasses.js","../../../node_modules/@mui/material/esm/NativeSelect/NativeSelectInput.js","../../../node_modules/@mui/material/esm/Select/selectClasses.js","../../../node_modules/@mui/material/esm/Select/SelectInput.js","../../../node_modules/@mui/material/esm/Select/Select.js","../../../node_modules/@mui/material/esm/styles/cssUtils.js","../../../node_modules/@mui/material/esm/Skeleton/skeletonClasses.js","../../../node_modules/@mui/material/esm/Skeleton/Skeleton.js","../../../node_modules/@mui/material/esm/SvgIcon/svgIconClasses.js","../../../node_modules/@mui/material/esm/SvgIcon/SvgIcon.js","../../../node_modules/@mui/material/esm/TextField/textFieldClasses.js","../../../node_modules/@mui/material/esm/TextField/TextField.js","../../../node_modules/@mui/material/esm/Tooltip/Tooltip.js","../../../node_modules/@mui/material/esm/Tooltip/tooltipClasses.js","../../../node_modules/@mui/material/esm/Typography/typographyClasses.js","../../../node_modules/@mui/material/esm/Typography/Typography.js","../../../node_modules/@mui/material/esm/internal/svg-icons/ArrowDropDown.js","../../../node_modules/@mui/material/esm/internal/svg-icons/Close.js","../../../node_modules/@mui/material/esm/colors/common.js","../../../node_modules/@mui/material/esm/colors/grey.js","../../../node_modules/@mui/material/esm/colors/purple.js","../../../node_modules/@mui/material/esm/colors/red.js","../../../node_modules/@mui/material/esm/colors/orange.js","../../../node_modules/@mui/material/esm/colors/blue.js","../../../node_modules/@mui/material/esm/colors/lightBlue.js","../../../node_modules/@mui/material/esm/colors/green.js","../../../node_modules/@mui/material/esm/styles/createPalette.js","../../../node_modules/@mui/material/esm/styles/createTypography.js","../../../node_modules/@mui/material/esm/styles/shadows.js","../../../node_modules/@mui/material/esm/styles/zIndex.js","../../../node_modules/@mui/material/esm/styles/createTheme.js","../../../node_modules/@mui/material/esm/styles/createMixins.js","../../../node_modules/@mui/material/esm/styles/createTransitions.js","../../../node_modules/@mui/material/esm/styles/defaultTheme.js","../../../node_modules/@mui/system/esm/createStyled.js","../../../node_modules/@mui/material/esm/styles/styled.js","../../../node_modules/@mui/material/esm/styles/useTheme.js","../../../node_modules/@mui/material/esm/styles/useThemeProps.js","../../../node_modules/@mui/system/esm/useThemeProps/useThemeProps.js","../../../node_modules/@mui/material/esm/transitions/utils.js","../../../node_modules/@mui/material/esm/utils/capitalize.js","../../../node_modules/@mui/material/esm/utils/createSvgIcon.js","../../../node_modules/@mui/material/esm/utils/debounce.js","../../../node_modules/@mui/material/esm/utils/createChainedFunction.js","../../../node_modules/@mui/material/esm/utils/deprecatedPropType.js","../../../node_modules/@mui/utils/esm/deprecatedPropType/deprecatedPropType.js","../../../node_modules/@mui/material/esm/utils/requirePropFactory.js","../../../node_modules/@mui/utils/esm/requirePropFactory/requirePropFactory.js","../../../node_modules/@mui/material/esm/utils/setRef.js","../../../node_modules/@mui/material/esm/utils/unsupportedProp.js","../../../node_modules/@mui/utils/esm/unsupportedProp/unsupportedProp.js","../../../node_modules/@mui/material/esm/utils/index.js","../../../node_modules/@mui/material/esm/utils/isMuiElement.js","../../../node_modules/@mui/utils/esm/isMuiElement/isMuiElement.js","../../../node_modules/@mui/material/esm/utils/ownerDocument.js","../../../node_modules/@mui/material/esm/utils/ownerWindow.js","../../../node_modules/@mui/material/esm/utils/useControlled.js","../../../node_modules/@mui/material/esm/utils/useEnhancedEffect.js","../../../node_modules/@mui/material/esm/utils/useEventCallback.js","../../../node_modules/@mui/material/esm/utils/useForkRef.js","../../../node_modules/@mui/material/esm/utils/useId.js","../../../node_modules/@mui/utils/esm/useTimeout/useTimeout.js","../../../node_modules/@mui/utils/esm/useIsFocusVisible/useIsFocusVisible.js","../../../node_modules/@mui/material/esm/utils/useIsFocusVisible.js","../../../node_modules/@mui/material/node_modules/clsx/dist/clsx.m.js","../../../node_modules/@emotion/is-prop-valid/dist/emotion-is-prop-valid.esm.js","../../../node_modules/@emotion/styled/base/dist/emotion-styled-base.browser.esm.js","../../../node_modules/@emotion/styled/dist/emotion-styled.browser.esm.js","../../../node_modules/@mui/styled-engine/index.js","../../../node_modules/@mui/private-theming/useTheme/ThemeContext.js","../../../node_modules/@mui/private-theming/useTheme/useTheme.js","../../../node_modules/@mui/private-theming/ThemeProvider/nested.js","../../../node_modules/@mui/private-theming/ThemeProvider/ThemeProvider.js","../../../node_modules/@mui/system/esm/RtlProvider/index.js","../../../node_modules/@mui/system/esm/DefaultPropsProvider/DefaultPropsProvider.js","../../../node_modules/@mui/system/esm/ThemeProvider/ThemeProvider.js","../../../node_modules/@mui/system/esm/breakpoints.js","../../../node_modules/@mui/utils/esm/clamp/clamp.js","../../../node_modules/@mui/system/esm/colorManipulator.js","../../../node_modules/clsx/dist/clsx.mjs","../../../node_modules/@mui/system/esm/createBox.js","../../../node_modules/@mui/system/esm/createTheme/createBreakpoints.js","../../../node_modules/@mui/system/esm/createTheme/shape.js","../../../node_modules/@mui/system/esm/createTheme/applyStyles.js","../../../node_modules/@mui/system/esm/createTheme/createTheme.js","../../../node_modules/@mui/system/esm/createTheme/createSpacing.js","../../../node_modules/@mui/system/esm/merge.js","../../../node_modules/@mui/system/esm/spacing.js","../../../node_modules/@mui/system/esm/memoize.js","../../../node_modules/@mui/system/esm/style.js","../../../node_modules/@mui/system/esm/compose.js","../../../node_modules/@mui/system/esm/borders.js","../../../node_modules/@mui/system/esm/cssGrid.js","../../../node_modules/@mui/system/esm/palette.js","../../../node_modules/@mui/system/esm/sizing.js","../../../node_modules/@mui/system/esm/styleFunctionSx/defaultSxConfig.js","../../../node_modules/@mui/system/esm/styleFunctionSx/extendSxProp.js","../../../node_modules/@mui/system/esm/styleFunctionSx/styleFunctionSx.js","../../../node_modules/@mui/system/esm/useTheme.js","../../../node_modules/@mui/system/esm/useThemeProps/getThemeProps.js","../../../node_modules/@mui/system/esm/useThemeWithoutDefault.js","../../../node_modules/@mui/utils/esm/ClassNameGenerator/ClassNameGenerator.js","../../../node_modules/@mui/utils/esm/capitalize/capitalize.js","../../../node_modules/@mui/utils/esm/composeClasses/composeClasses.js","../../../node_modules/@mui/utils/esm/createChainedFunction/createChainedFunction.js","../../../node_modules/@mui/utils/esm/debounce/debounce.js","../../../node_modules/@mui/utils/esm/deepmerge/deepmerge.js","../../../node_modules/@mui/utils/esm/formatMuiErrorMessage/formatMuiErrorMessage.js","../../../node_modules/@mui/utils/esm/generateUtilityClass/generateUtilityClass.js","../../../node_modules/@mui/utils/esm/generateUtilityClasses/generateUtilityClasses.js","../../../node_modules/@mui/utils/esm/getScrollbarSize/getScrollbarSize.js","../../../node_modules/@mui/utils/esm/ownerDocument/ownerDocument.js","../../../node_modules/@mui/utils/esm/ownerWindow/ownerWindow.js","../../../node_modules/@mui/utils/esm/resolveProps/resolveProps.js","../../../node_modules/@mui/utils/esm/setRef/setRef.js","../../../node_modules/@mui/utils/esm/useControlled/useControlled.js","../../../node_modules/@mui/utils/esm/useEnhancedEffect/useEnhancedEffect.js","../../../node_modules/@mui/utils/esm/useEventCallback/useEventCallback.js","../../../node_modules/@mui/utils/esm/useForkRef/useForkRef.js","../../../node_modules/@mui/utils/esm/useId/useId.js","../../../node_modules/base64-js/index.js","../../../node_modules/buffer/index.js","../../../node_modules/core-util-is/lib/util.js","index.css","../../../node_modules/css-loader/dist/runtime/api.js","../../../node_modules/css-loader/dist/runtime/sourceMaps.js","../../../node_modules/end-of-stream/index.js","../../../core/ds/src/components/ActionButton/ActionButton.tsx","../../../core/ds/src/components/AddNewCexButton/AddNewCexButton.tsx","../../../core/ds/src/components/AddressDescription/index.tsx","../../../core/ds/src/components/AmountFieldWithTokens/AmountFieldWithTokens.tsx","../../../core/ds/src/components/BackButton/BackButton.tsx","../../../core/ds/src/components/Button/index.tsx","../../../core/ds/src/components/CexTooltip/CexTooltip.tsx","../../../core/ds/src/components/ComponentUnderlay/index.tsx","../../../core/ds/src/components/ConnectionStatus/ConnectionStatus.tsx","../../../core/ds/src/components/CopyBox/index.tsx","../../../core/ds/src/components/CopyCard/CopyCard.tsx","../../../core/ds/src/components/CopyIconButton/CopyIconButton.tsx","../../../node_modules/@mui/system/esm/Box/boxClasses.js","../../../node_modules/@mui/system/esm/Box/Box.js","../../../core/ds/src/components/CurrencyAmountFormatter/CurrencyAmountFormatter.tsx","../../../core/ds/src/components/DropListWithIcon/items/AmountDropListWithIconItem.tsx","../../../node_modules/react-virtualized-auto-sizer/dist/react-virtualized-auto-sizer.esm.js","../../../node_modules/memoize-one/dist/memoize-one.esm.js","../../../node_modules/react-window/dist/index.esm.js","../../../core/ds/src/components/DropListWithIconModal/DropListWithIconModal.tsx","../../../core/ds/src/components/EmptyState/EmptyState.types.ts","../../../core/ds/src/components/EmptyState/EmptyState.tsx","../../../core/ds/src/components/ExternalLink/ExternalLink.tsx","../../../core/ds/src/components/Icon/Icon.tsx","../../../node_modules/@mui/material/esm/Slide/Slide.js","../../../core/ds/src/components/IconButtonWithPopper/IconButtonWithPopper.tsx","../../../node_modules/@mui/icons-material/esm/KeyboardBackspace.js","../../../core/ds/src/components/IconGroup/IconGroup.tsx","../../../core/ds/src/components/IconText/IconText.tsx","../../../core/ds/src/components/IconTextSubText/IconTextSubText.tsx","../../../node_modules/@mui/material/esm/Collapse/collapseClasses.js","../../../node_modules/@mui/material/esm/Collapse/Collapse.js","../../../core/ds/src/components/InformationCard/InformationCard.tsx","../../../core/ds/src/components/Logo/Logo.types.ts","../../../core/ds/src/components/Logo/Logo.tsx","../../../core/ds/src/components/MultiSelectDropList/MultiSelectDropList.tsx","../../../node_modules/@mui/icons-material/esm/ArrowBack.js","../../../core/ds/src/components/NavBar/components/BackButton.tsx","../../../core/ds/src/components/NavBar/components/Title.tsx","../../../core/ds/src/components/NavBar/useNavBar.tsx","../../../core/ds/src/components/PendingTransactionLoader/index.tsx","../../../core/ds/src/components/PermissionIcon/PermissionIcon.tsx","../../../core/ds/src/components/Popups/Bubble/index.tsx","../../../core/ds/src/components/ResizeFieldsWrapper/ResizeFieldsWrapper.tsx","../../../core/ds/src/utils/getDomRoot.ts","../../../node_modules/@mui/icons-material/esm/Search.js","../../../core/ds/src/components/SearchBar/SearchBar.tsx","../../../core/ds/src/components/SelectGasPrice/SelectGasPrice.tsx","../../../node_modules/@mui/icons-material/esm/CreditCardOutlined.js","../../../node_modules/@mui/icons-material/esm/TollOutlined.js","../../../core/ds/src/components/ServiceIcon/ServiceIcon.tsx","../../../core/ds/src/components/ShareOnTwitter/ShareOnTwitter.tsx","../../../core/ds/src/components/SharedIcons/icons.tsx","../../../core/ds/src/components/SpinnerLoader.tsx","../../../core/ds/src/assets/pandaBasic.tsx","../../../core/ds/src/assets/pandaHappy.tsx","../../../core/ds/src/assets/pandaSad.tsx","../../../core/ds/src/components/StoreLogo/index.tsx","../../../node_modules/@mui/utils/esm/scrollLeft/scrollLeft.js","../../../node_modules/@mui/material/esm/internal/animate.js","../../../node_modules/@mui/material/esm/Tabs/ScrollbarSize.js","../../../node_modules/@mui/material/esm/internal/svg-icons/KeyboardArrowLeft.js","../../../node_modules/@mui/material/esm/internal/svg-icons/KeyboardArrowRight.js","../../../node_modules/@mui/material/esm/TabScrollButton/tabScrollButtonClasses.js","../../../node_modules/@mui/material/esm/TabScrollButton/TabScrollButton.js","../../../node_modules/@mui/material/esm/Tabs/tabsClasses.js","../../../node_modules/@mui/material/esm/Tabs/Tabs.js","../../../core/ds/src/components/Tabs/index.tsx","../../../core/ds/src/components/TextFieldWithIcon/TextFieldWithIcon.tsx","../../../node_modules/@mui/styled-engine/StyledEngineProvider/StyledEngineProvider.js","../../../core/ds/src/components/ThemeProvider/ThemeProvider.tsx","../../../core/ds/src/components/ThemeProvider/themeConfig.ts","../../../core/ds/src/components/TransactionStatusCardLite/TransactionStatusCardLite.tsx","../../../node_modules/@mui/base/AutocompleteUnstyled/useAutocomplete.js","../../../node_modules/@mui/material/esm/ListSubheader/listSubheaderClasses.js","../../../node_modules/@mui/material/esm/ListSubheader/ListSubheader.js","../../../node_modules/@mui/material/esm/Autocomplete/autocompleteClasses.js","../../../node_modules/@mui/material/esm/Autocomplete/Autocomplete.js","../../../core/ds/src/components/ValidationDropList/ValidationDropList.tsx","../../../core/ds/src/components/ValidationTextField/ValidationTextField.tsx","../../../core/ds/src/components/ValidationTextField/ValidationTextFieldWithIcon.tsx","../../../core/ds/src/components/ValidationTextField/useValidation.ts","../../../core/providers/src/providers/CedeProvider.ts","../../../core/providers/src/detectCedeProvider.ts","../../../core/providers/src/displayInstallationModal.ts","../../../core/utils/src/error/cedeErrors.ts","../../../core/providers/src/externalErrors.ts","../../../node_modules/@metamask/safe-event-emitter/dist/esm/index.mjs","../../../core/providers/src/providers/InpageProvider.ts","../../../core/react-sdk/src/contexts/dependencies/context.ts","../../../core/react-sdk/src/hooks/useDependencies.tsx","../../../core/utils/src/mocks/prices.ts","../../../core/react-sdk/src/hooks/accounts/useAccounts.ts","../../../core/utils/src/prices/index.ts","../../../core/react-sdk/src/hooks/prices/index.ts","../../../core/react-sdk/src/utils/background/handlerFactory.ts","../../../core/react-sdk/src/hooks/useBackgroundHandler.tsx","../../../core/react-sdk/src/store/login/login.ts","../../../core/react-sdk/src/hooks/useViewEnvironment.ts","../../../core/react-sdk/src/contexts/dependencies/dependencies.tsx","../../../core/react-sdk/src/hooks/useLogin.tsx","../../../core/react-sdk/src/hooks/useVaults.ts","../../../core/react-sdk/src/hooks/useSupportedExchanges.tsx","../../../core/react-sdk/src/hooks/useProviderEvents.ts","../../../core/react-sdk/src/contexts/dependencies/provider.tsx","../../../node_modules/comma-separated-tokens/index.js","../../../node_modules/hast-util-to-jsx-runtime/node_modules/estree-util-is-identifier-name/lib/index.js","../../../node_modules/hast-util-whitespace/lib/index.js","../../../node_modules/property-information/lib/util/schema.js","../../../node_modules/property-information/lib/util/merge.js","../../../node_modules/property-information/lib/normalize.js","../../../node_modules/property-information/lib/util/info.js","../../../node_modules/property-information/lib/util/types.js","../../../node_modules/property-information/lib/util/defined-info.js","../../../node_modules/property-information/lib/util/create.js","../../../node_modules/property-information/lib/xlink.js","../../../node_modules/property-information/lib/xml.js","../../../node_modules/property-information/lib/util/case-sensitive-transform.js","../../../node_modules/property-information/lib/util/case-insensitive-transform.js","../../../node_modules/property-information/lib/xmlns.js","../../../node_modules/property-information/lib/aria.js","../../../node_modules/property-information/lib/html.js","../../../node_modules/property-information/lib/svg.js","../../../node_modules/property-information/index.js","../../../node_modules/property-information/lib/find.js","../../../node_modules/property-information/lib/hast-to-react.js","../../../node_modules/space-separated-tokens/index.js","../../../node_modules/style-to-object/esm/index.mjs","../../../node_modules/unist-util-position/lib/index.js","../../../node_modules/vfile-message/node_modules/unist-util-stringify-position/lib/index.js","../../../node_modules/vfile-message/lib/index.js","../../../node_modules/hast-util-to-jsx-runtime/lib/index.js","../../../node_modules/html-url-attributes/lib/index.js","../../../node_modules/mdast-util-from-markdown/node_modules/mdast-util-to-string/lib/index.js","../../../node_modules/micromark/node_modules/micromark-util-chunked/index.js","../../../node_modules/micromark/node_modules/micromark-util-subtokenize/lib/splice-buffer.js","../../../node_modules/micromark/node_modules/micromark-util-subtokenize/index.js","../../../node_modules/micromark/node_modules/micromark-util-combine-extensions/index.js","../../../node_modules/micromark/node_modules/micromark-util-character/index.js","../../../node_modules/micromark/node_modules/micromark-factory-space/index.js","../../../node_modules/micromark/lib/initialize/content.js","../../../node_modules/micromark/lib/initialize/document.js","../../../node_modules/micromark/node_modules/micromark-core-commonmark/lib/blank-line.js","../../../node_modules/micromark/node_modules/micromark-core-commonmark/lib/content.js","../../../node_modules/micromark/lib/initialize/flow.js","../../../node_modules/micromark/lib/initialize/text.js","../../../node_modules/micromark/node_modules/micromark-util-resolve-all/index.js","../../../node_modules/micromark/lib/create-tokenizer.js","../../../node_modules/micromark/node_modules/micromark-core-commonmark/lib/thematic-break.js","../../../node_modules/micromark/node_modules/micromark-core-commonmark/lib/list.js","../../../node_modules/micromark/node_modules/micromark-core-commonmark/lib/block-quote.js","../../../node_modules/micromark/node_modules/micromark-factory-destination/index.js","../../../node_modules/micromark/node_modules/micromark-factory-label/index.js","../../../node_modules/micromark/node_modules/micromark-factory-title/index.js","../../../node_modules/micromark/node_modules/micromark-factory-whitespace/index.js","../../../node_modules/micromark/node_modules/micromark-util-normalize-identifier/index.js","../../../node_modules/micromark/node_modules/micromark-core-commonmark/lib/definition.js","../../../node_modules/micromark/node_modules/micromark-core-commonmark/lib/code-indented.js","../../../node_modules/micromark/node_modules/micromark-core-commonmark/lib/heading-atx.js","../../../node_modules/micromark/node_modules/micromark-core-commonmark/lib/setext-underline.js","../../../node_modules/micromark/node_modules/micromark-util-html-tag-name/index.js","../../../node_modules/micromark/node_modules/micromark-core-commonmark/lib/html-flow.js","../../../node_modules/micromark/node_modules/micromark-core-commonmark/lib/code-fenced.js","../../../node_modules/decode-named-character-reference/index.dom.js","../../../node_modules/micromark/node_modules/micromark-core-commonmark/lib/character-reference.js","../../../node_modules/micromark/node_modules/micromark-core-commonmark/lib/character-escape.js","../../../node_modules/micromark/node_modules/micromark-core-commonmark/lib/line-ending.js","../../../node_modules/micromark/node_modules/micromark-core-commonmark/lib/label-end.js","../../../node_modules/micromark/node_modules/micromark-core-commonmark/lib/label-start-image.js","../../../node_modules/micromark/node_modules/micromark-util-classify-character/index.js","../../../node_modules/micromark/node_modules/micromark-core-commonmark/lib/attention.js","../../../node_modules/micromark/node_modules/micromark-core-commonmark/lib/autolink.js","../../../node_modules/micromark/node_modules/micromark-core-commonmark/lib/html-text.js","../../../node_modules/micromark/node_modules/micromark-core-commonmark/lib/label-start-link.js","../../../node_modules/micromark/node_modules/micromark-core-commonmark/lib/hard-break-escape.js","../../../node_modules/micromark/node_modules/micromark-core-commonmark/lib/code-text.js","../../../node_modules/micromark/lib/constructs.js","../../../node_modules/micromark/lib/parse.js","../../../node_modules/micromark/lib/preprocess.js","../../../node_modules/mdast-util-from-markdown/node_modules/micromark-util-decode-numeric-character-reference/index.js","../../../node_modules/mdast-util-from-markdown/node_modules/micromark-util-decode-string/index.js","../../../node_modules/mdast-util-from-markdown/node_modules/micromark-util-normalize-identifier/index.js","../../../node_modules/mdast-util-from-markdown/node_modules/unist-util-stringify-position/lib/index.js","../../../node_modules/mdast-util-from-markdown/lib/index.js","../../../node_modules/micromark/lib/postprocess.js","../../../node_modules/remark-parse/lib/index.js","../../../node_modules/@ungap/structured-clone/esm/types.js","../../../node_modules/@ungap/structured-clone/esm/deserialize.js","../../../node_modules/@ungap/structured-clone/esm/serialize.js","../../../node_modules/@ungap/structured-clone/esm/index.js","../../../node_modules/mdast-util-to-hast/node_modules/micromark-util-character/index.js","../../../node_modules/mdast-util-to-hast/node_modules/micromark-util-sanitize-uri/index.js","../../../node_modules/mdast-util-to-hast/lib/footer.js","../../../node_modules/unist-util-visit-parents/node_modules/unist-util-is/lib/index.js","../../../node_modules/unist-util-visit-parents/lib/index.js","../../../node_modules/unist-util-visit/lib/index.js","../../../node_modules/mdast-util-to-hast/lib/revert.js","../../../node_modules/mdast-util-to-hast/lib/handlers/list-item.js","../../../node_modules/trim-lines/index.js","../../../node_modules/mdast-util-to-hast/lib/handlers/index.js","../../../node_modules/mdast-util-to-hast/lib/handlers/blockquote.js","../../../node_modules/mdast-util-to-hast/lib/handlers/break.js","../../../node_modules/mdast-util-to-hast/lib/handlers/code.js","../../../node_modules/mdast-util-to-hast/lib/handlers/delete.js","../../../node_modules/mdast-util-to-hast/lib/handlers/emphasis.js","../../../node_modules/mdast-util-to-hast/lib/handlers/footnote-reference.js","../../../node_modules/mdast-util-to-hast/lib/handlers/heading.js","../../../node_modules/mdast-util-to-hast/lib/handlers/html.js","../../../node_modules/mdast-util-to-hast/lib/handlers/image-reference.js","../../../node_modules/mdast-util-to-hast/lib/handlers/image.js","../../../node_modules/mdast-util-to-hast/lib/handlers/inline-code.js","../../../node_modules/mdast-util-to-hast/lib/handlers/link-reference.js","../../../node_modules/mdast-util-to-hast/lib/handlers/link.js","../../../node_modules/mdast-util-to-hast/lib/handlers/list.js","../../../node_modules/mdast-util-to-hast/lib/handlers/paragraph.js","../../../node_modules/mdast-util-to-hast/lib/handlers/root.js","../../../node_modules/mdast-util-to-hast/lib/handlers/strong.js","../../../node_modules/mdast-util-to-hast/lib/handlers/table.js","../../../node_modules/mdast-util-to-hast/lib/handlers/table-cell.js","../../../node_modules/mdast-util-to-hast/lib/handlers/table-row.js","../../../node_modules/mdast-util-to-hast/lib/handlers/text.js","../../../node_modules/mdast-util-to-hast/lib/handlers/thematic-break.js","../../../node_modules/mdast-util-to-hast/lib/state.js","../../../node_modules/mdast-util-to-hast/lib/index.js","../../../node_modules/remark-rehype/lib/index.js","../../../node_modules/bail/index.js","../../../node_modules/is-plain-obj/index.js","../../../node_modules/trough/lib/index.js","../../../node_modules/vfile/lib/minpath.browser.js","../../../node_modules/vfile/lib/minproc.browser.js","../../../node_modules/vfile/lib/minurl.shared.js","../../../node_modules/vfile/lib/minurl.browser.js","../../../node_modules/vfile/lib/index.js","../../../node_modules/unified/lib/callable-instance.js","../../../node_modules/unified/lib/index.js","../../../node_modules/react-markdown/lib/index.js","../../../core/utils/src/string/checkRequiredPermissionStatement.ts","../../../core/utils/src/browsers/chrome.ts","../../../core/utils/src/markdown/getters.ts","../../../node_modules/@mui/icons-material/esm/Checklist.js","../../../node_modules/@mui/icons-material/esm/ZoomOutMap.js","../../../core/react-utils/src/components/ExtensionImage/ExtensionImage.tsx","../../../core/react-utils/src/components/Tutorial/TutorialAffiliation/TutorialAffiliation.tsx","../../../core/react-utils/src/components/Tutorial/TutorialBox/TutorialBox.tsx","../../../core/react-utils/src/components/Tutorial/TutorialInfo/TutorialInfo.tsx","../../../core/react-utils/src/components/Tutorial/TutorialList/TutorialList.tsx","../../../core/react-utils/src/components/Tutorial/TutorialModal/TutorialModal.tsx","../../../node_modules/@mui/material/esm/CardContent/cardContentClasses.js","../../../node_modules/@mui/material/esm/CardContent/CardContent.js","../../../core/react-utils/src/components/Tutorial/TutorialVideoCard/TutorialVideoCard.tsx","../../../node_modules/@mui/icons-material/esm/CheckCircle.js","../../../node_modules/@mui/icons-material/esm/Cancel.js","../../../node_modules/@mui/material/esm/Divider/Divider.js","../../../node_modules/hast-util-parse-selector/lib/index.js","../../../node_modules/hastscript/lib/create-h.js","../../../node_modules/hastscript/lib/svg-case-sensitive-tag-names.js","../../../node_modules/hastscript/lib/index.js","../../../node_modules/vfile-location/lib/index.js","../../../node_modules/web-namespaces/index.js","../../../node_modules/hast-util-from-parse5/lib/index.js","../../../node_modules/zwitch/index.js","../../../node_modules/hast-util-to-parse5/lib/index.js","../../../node_modules/html-void-elements/index.js","../../../node_modules/parse5/dist/common/unicode.js","../../../node_modules/parse5/dist/common/error-codes.js","../../../node_modules/parse5/dist/tokenizer/preprocessor.js","../../../node_modules/parse5/dist/common/token.js","../../../node_modules/entities/lib/esm/generated/decode-data-html.js","../../../node_modules/entities/lib/esm/generated/decode-data-xml.js","../../../node_modules/entities/lib/esm/decode_codepoint.js","../../../node_modules/entities/lib/esm/decode.js","../../../node_modules/parse5/dist/common/html.js","../../../node_modules/parse5/dist/tokenizer/index.js","../../../node_modules/parse5/dist/parser/open-element-stack.js","../../../node_modules/parse5/dist/parser/formatting-element-list.js","../../../node_modules/parse5/dist/tree-adapters/default.js","../../../node_modules/parse5/dist/common/doctype.js","../../../node_modules/parse5/dist/common/foreign-content.js","../../../node_modules/parse5/dist/parser/index.js","../../../node_modules/entities/lib/esm/escape.js","../../../node_modules/parse5/dist/serializer/index.js","../../../node_modules/hast-util-raw/lib/index.js","../../../core/react-utils/src/components/Tutorial/TutorialReader/TutorialReader.tsx","../../../node_modules/rehype-raw/lib/index.js","../../../core/utils/src/string/buildStringWithPermissionRequirements.ts","../../../core/react-utils/src/hooks/useDependencies.ts","../../../core/types/src/api/exchange.ts","../../../core/types/src/backgroundHandler/index.ts","../../../core/types/src/cefi/CefiServices.ts","../../../core/types/src/cefi/ConnectionStatus.ts","../../../core/types/src/cefi/index.ts","../../../core/types/src/env/index.ts","../../../core/types/src/error/cedeErrors.ts","../../../core/types/src/error/userFacingMessages.ts","../../../core/types/src/events/widget.ts","../../../core/types/src/fakeTypes.ts","../../../core/types/src/features/index.ts","../../../core/types/src/untrustedApi/types.ts","../../../core/types/src/widgets/index.ts","../../../core/utils/src/currencies/constants.ts","../../../core/utils/src/amount/formatter.ts","../../../core/utils/src/balance/formatNumber.ts","../../../core/utils/src/balance/balance.ts","../../../core/utils/src/cdn-client/types.ts","../../../core/utils/src/cdn-client/index.ts","../../../core/utils/src/cexs/constants.ts","../../../core/utils/src/cexs/utils.ts","../../../core/utils/src/constants/cache.ts","../../../core/utils/src/constants/keyRoles.ts","../../../core/utils/src/constants/twitter.ts","../../../core/utils/src/dom/utils.ts","../../../core/utils/src/html-ui/assets/chrome-web-store.svg","../../../core/utils/src/html-ui/components/onboardingModal.ts","../../../core/utils/src/html-ui/utils/ui.ts","../../../core/utils/src/html-ui/utils/globalStyle.ts","../../../core/utils/src/icons/logo.ts","../../../core/utils/src/icons/index.ts","../../../core/utils/src/logger/logger.ts","../../../core/utils/src/mappings/global/transaction.ts","../../../core/utils/src/mappings/utils.ts","../../../core/utils/src/numbers/utils.ts","../../../core/utils/src/queries/queryKeys.ts","../../../core/utils/src/sort/index.ts","../../../core/utils/src/string/utils.ts","../../../core/utils/src/theme/inferTheme.ts","../../../core/utils/src/theme/theme.ts","../../../node_modules/eth-rpc-errors/dist/classes.js","../../../node_modules/eth-rpc-errors/dist/error-constants.js","../../../node_modules/eth-rpc-errors/dist/errors.js","../../../node_modules/eth-rpc-errors/dist/index.js","../../../node_modules/eth-rpc-errors/dist/utils.js","../../../node_modules/events/events.js","../../../node_modules/extend/index.js","../../../node_modules/fast-safe-stringify/index.js","../../../node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js","../../../node_modules/hoist-non-react-statics/node_modules/react-is/cjs/react-is.production.min.js","../../../node_modules/hoist-non-react-statics/node_modules/react-is/index.js","../../../node_modules/ieee754/index.js","../../../node_modules/inherits/inherits_browser.js","../../../node_modules/inline-style-parser/index.js","../../../node_modules/is-stream/index.js","../../../node_modules/json-rpc-engine/dist/JsonRpcEngine.js","../../../node_modules/json-rpc-engine/dist/createAsyncMiddleware.js","../../../node_modules/json-rpc-engine/dist/createScaffoldMiddleware.js","../../../node_modules/json-rpc-engine/dist/getUniqueId.js","../../../node_modules/json-rpc-engine/dist/idRemapMiddleware.js","../../../node_modules/json-rpc-engine/dist/index.js","../../../node_modules/json-rpc-engine/dist/mergeMiddleware.js","../../../node_modules/json-rpc-engine/node_modules/@metamask/safe-event-emitter/index.js","../../../node_modules/json-rpc-middleware-stream/dist/createEngineStream.js","../../../node_modules/json-rpc-middleware-stream/dist/createStreamMiddleware.js","../../../node_modules/json-rpc-middleware-stream/dist/index.js","../../../node_modules/json-rpc-middleware-stream/node_modules/@metamask/safe-event-emitter/index.js","../../../node_modules/json-rpc-middleware-stream/node_modules/isarray/index.js","../../../node_modules/json-rpc-middleware-stream/node_modules/readable-stream/lib/_stream_duplex.js","../../../node_modules/json-rpc-middleware-stream/node_modules/readable-stream/lib/_stream_passthrough.js","../../../node_modules/json-rpc-middleware-stream/node_modules/readable-stream/lib/_stream_readable.js","../../../node_modules/json-rpc-middleware-stream/node_modules/readable-stream/lib/_stream_transform.js","../../../node_modules/json-rpc-middleware-stream/node_modules/readable-stream/lib/_stream_writable.js","../../../node_modules/json-rpc-middleware-stream/node_modules/readable-stream/lib/internal/streams/BufferList.js","../../../node_modules/json-rpc-middleware-stream/node_modules/readable-stream/lib/internal/streams/destroy.js","../../../node_modules/json-rpc-middleware-stream/node_modules/readable-stream/lib/internal/streams/stream-browser.js","../../../node_modules/json-rpc-middleware-stream/node_modules/readable-stream/readable-browser.js","../../../node_modules/json-rpc-middleware-stream/node_modules/safe-buffer/index.js","../../../node_modules/json-rpc-middleware-stream/node_modules/string_decoder/lib/string_decoder.js","../../../node_modules/once/once.js","../../../node_modules/process-nextick-args/index.js","../../../node_modules/process/browser.js","../../../node_modules/prop-types/factoryWithThrowingShims.js","../../../node_modules/prop-types/index.js","../../../node_modules/prop-types/lib/ReactPropTypesSecret.js","../../../node_modules/pump/index.js","../../../node_modules/react-dom/cjs/react-dom-server-legacy.browser.production.min.js","../../../node_modules/react-dom/cjs/react-dom-server.browser.production.min.js","../../../node_modules/react-dom/cjs/react-dom.production.min.js","../../../node_modules/react-dom/client.js","../../../node_modules/react-dom/index.js","../../../node_modules/react-dom/server.browser.js","../../../node_modules/react-is/cjs/react-is.production.min.js","../../../node_modules/react-is/index.js","../../../node_modules/react-loader-spinner/dist/index.js","../../../node_modules/react-loader-spinner/dist/loader/Audio.js","../../../node_modules/react-loader-spinner/dist/loader/BallTriangle.js","../../../node_modules/react-loader-spinner/dist/loader/Bars.js","../../../node_modules/react-loader-spinner/dist/loader/Circles.js","../../../node_modules/react-loader-spinner/dist/loader/CradleLoader.js","../../../node_modules/react-loader-spinner/dist/loader/Grid.js","../../../node_modules/react-loader-spinner/dist/loader/Hearts.js","../../../node_modules/react-loader-spinner/dist/loader/MutatingDots.js","../../../node_modules/react-loader-spinner/dist/loader/Oval.js","../../../node_modules/react-loader-spinner/dist/loader/Plane.js","../../../node_modules/react-loader-spinner/dist/loader/Puff.js","../../../node_modules/react-loader-spinner/dist/loader/RevolvingDot.js","../../../node_modules/react-loader-spinner/dist/loader/Rings.js","../../../node_modules/react-loader-spinner/dist/loader/TailSpin.js","../../../node_modules/react-loader-spinner/dist/loader/ThreeDots.js","../../../node_modules/react-loader-spinner/dist/loader/Triangle.js","../../../node_modules/react-loader-spinner/dist/loader/Watch.js","../../../node_modules/react-loader-spinner/dist/loader/index.js","../../../node_modules/react-shadow/emotion.js","../../../node_modules/react-transition-group/esm/config.js","../../../node_modules/react-transition-group/esm/Transition.js","../../../node_modules/react-transition-group/esm/utils/reflow.js","../../../node_modules/react-transition-group/esm/utils/ChildMapping.js","../../../node_modules/react-transition-group/esm/TransitionGroup.js","../../../node_modules/react-transition-group/esm/TransitionGroupContext.js","../../../node_modules/react/cjs/react-jsx-runtime.production.min.js","../../../node_modules/react/cjs/react.production.min.js","../../../node_modules/react/index.js","../../../node_modules/react/jsx-runtime.js","../../../node_modules/scheduler/cjs/scheduler.production.min.js","../../../node_modules/scheduler/index.js","../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js","../../../node_modules/style-loader/dist/runtime/insertBySelector.js","../../../node_modules/style-loader/dist/runtime/insertStyleElement.js","../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js","../../../node_modules/style-loader/dist/runtime/styleDomAPI.js","../../../node_modules/style-loader/dist/runtime/styleTagTransform.js","../../../node_modules/style-to-object/cjs/index.js","assets/storeLogo.svg","../../widgets/src/assets/chrome.svg","../../../core/ds/src/assets/storeLogo.svg","../../../core/ds/src/assets/storeLogoBorderless.svg","../../../core/ds/src/components/SelectGasPrice/asset/gasIcon.svg","../../../core/utils/src/cdn-client/defaultNetwork.svg","../../../core/utils/src/cdn-client/defaultToken.svg","../../../core/utils/src/icons/assets/exchanges_logo/binance_logo.svg","../../../core/utils/src/icons/assets/exchanges_logo/bitfinexLogo.svg","../../../core/utils/src/icons/assets/exchanges_logo/bitgetLogo.svg","../../../core/utils/src/icons/assets/exchanges_logo/bitmartLogo.svg","../../../core/utils/src/icons/assets/exchanges_logo/bitstampLogo.svg","../../../core/utils/src/icons/assets/exchanges_logo/bybit_logo.svg","../../../core/utils/src/icons/assets/exchanges_logo/coinbase.svg","../../../core/utils/src/icons/assets/exchanges_logo/gateioLogo.svg","../../../core/utils/src/icons/assets/exchanges_logo/gemini_logo.svg","../../../core/utils/src/icons/assets/exchanges_logo/htxLogo.svg","../../../core/utils/src/icons/assets/exchanges_logo/kraken.svg","../../../core/utils/src/icons/assets/exchanges_logo/kucoin.svg","../../../core/utils/src/icons/assets/exchanges_logo/mexc_logo.svg","../../../core/utils/src/icons/assets/exchanges_logo/okx_logo.svg","../../../node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.min.js","../../../node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.production.min.js","../../../node_modules/use-sync-external-store/shim/index.js","../../../node_modules/use-sync-external-store/shim/with-selector.js","../../../node_modules/util-deprecate/browser.js","../../../node_modules/wrappy/wrappy.js","../../../core/ccxt/js/src/static_dependencies/qs/formats.cjs","../../../core/ccxt/js/src/static_dependencies/qs/index.cjs","../../../core/ccxt/js/src/static_dependencies/qs/parse.cjs","../../../core/ccxt/js/src/static_dependencies/qs/stringify.cjs","../../../core/ccxt/js/src/static_dependencies/qs/utils.cjs","../../../node_modules/@babel/runtime/helpers/interopRequireDefault.js","../../../core/ccxt/js/src/base/functions/platform.js","../../../core/ccxt/js/src/base/functions/type.js","../../../core/ccxt/js/src/base/functions/generic.js","../../../core/ccxt/js/src/base/functions/string.js","../../../core/ccxt/js/src/base/functions/number.js","../../../core/ccxt/js/src/static_dependencies/scure-base/index.js","../../../core/ccxt/js/src/static_dependencies/noble-curves/abstract/utils.js","../../../core/ccxt/js/src/static_dependencies/messagepack/msgpack.js","../../../core/ccxt/js/src/base/functions/encode.js","../../../core/ccxt/js/src/static_dependencies/noble-hashes/_assert.js","../../../core/ccxt/js/src/static_dependencies/noble-hashes/crypto.js","../../../core/ccxt/js/src/static_dependencies/noble-hashes/utils.js","../../../core/ccxt/js/src/static_dependencies/noble-hashes/hmac.js","../../../core/ccxt/js/src/static_dependencies/jsencrypt/lib/asn1js/base64.js","../../../core/ccxt/js/src/static_dependencies/jsencrypt/lib/asn1js/int10.js","../../../core/ccxt/js/src/static_dependencies/jsencrypt/lib/asn1js/asn1.js","../../../core/ccxt/js/src/static_dependencies/noble-hashes/_sha2.js","../../../core/ccxt/js/src/static_dependencies/noble-hashes/sha256.js","../../../core/ccxt/js/src/static_dependencies/noble-curves/abstract/modular.js","../../../core/ccxt/js/src/static_dependencies/noble-curves/abstract/curve.js","../../../core/ccxt/js/src/static_dependencies/noble-curves/abstract/weierstrass.js","../../../core/ccxt/js/src/static_dependencies/noble-curves/abstract/hash-to-curve.js","../../../core/ccxt/js/src/static_dependencies/noble-curves/_shortw_utils.js","../../../core/ccxt/js/src/static_dependencies/noble-curves/secp256k1.js","../../../core/ccxt/js/src/static_dependencies/noble-curves/p256.js","../../../core/ccxt/js/src/base/functions/crypto.js","../../../core/ccxt/js/src/base/functions/time.js","../../../core/ccxt/js/src/sdk/errorsMetadata.js","../../../core/ccxt/js/src/sdk/default.js","../../../core/ccxt/js/src/sdk/exchange.js","../../../core/ccxt/js/src/base/types.js","../../../core/ccxt/js/src/base/functions/customThrottle.js","../../../core/ccxt/js/src/base/functions/misc.js","../../../core/ccxt/js/src/base/Precise.js","../../../core/ccxt/js/src/base/ws/Future.js","../../../core/ccxt/js/src/sdk/internal.js","../../../core/ccxt/js/src/sdk/authentication.js","../../../core/ccxt/js/src/sdk/withdrawal.js","../../../core/ccxt/js/src/sdk/network.js","../../../core/ccxt/js/src/sdk/deposit.js","../../../core/ccxt/js/src/sdk/api.js","../../../core/ccxt/js/src/sdk/portfolio.js","../../../core/ccxt/js/src/sdk/trade.js","../../../core/ccxt/js/src/static_dependencies/jsencrypt/lib/jsbn/prng4.js","../../../core/ccxt/js/src/static_dependencies/jsencrypt/lib/jsbn/rng.js","../../../core/ccxt/js/src/base/cache.js","../../../core/ccxt/js/src/static_dependencies/noble-hashes/sha1.js","../../../core/ccxt/js/src/base/functions/totp.js","../../../core/ccxt/js/src/base/Exchange.js","../../../core/ccxt/js/src/abstract/binance.js","../../../core/ccxt/js/src/static_dependencies/jsencrypt/lib/jsbn/base64.js","../../../core/ccxt/js/src/static_dependencies/jsencrypt/lib/asn1js/hex.js","../../../core/ccxt/js/src/static_dependencies/jsencrypt/lib/jsbn/util.js","../../../core/ccxt/js/src/static_dependencies/jsencrypt/lib/jsbn/jsbn.js","../../../core/ccxt/js/src/static_dependencies/jsencrypt/lib/jsbn/rsa.js","../../../core/ccxt/js/src/static_dependencies/jsencrypt/lib/jsrsasign/yahoo.js","../../../core/ccxt/js/src/static_dependencies/jsencrypt/lib/jsrsasign/asn1-1.0.js","../../../core/ccxt/js/src/static_dependencies/jsencrypt/JSEncryptRSAKey.js","../../../core/ccxt/js/src/static_dependencies/jsencrypt/JSEncrypt.js","../../../core/ccxt/js/src/base/functions/rsa.js","../../../core/ccxt/js/src/static_dependencies/noble-hashes/_u64.js","../../../core/ccxt/js/src/static_dependencies/noble-hashes/sha512.js","../../../core/ccxt/js/src/static_dependencies/noble-curves/abstract/edwards.js","../../../core/ccxt/js/src/static_dependencies/noble-curves/abstract/montgomery.js","../../../core/ccxt/js/src/static_dependencies/noble-curves/ed25519.js","../../../core/ccxt/js/src/abstract/bitfinex2.js","../../../core/ccxt/js/src/abstract/bitget.js","../../../core/ccxt/js/src/sdk/subAccount.js","../../../core/ccxt/js/src/abstract/bitmart.js","../../../core/ccxt/js/src/base/stable.js","../../../core/ccxt/js/src/abstract/bitstamp.js","../../../core/ccxt/js/src/abstract/bybit.js","../../../core/ccxt/js/src/abstract/coinbase.js","../../../core/ccxt/js/src/abstract/coinbaseexchange.js","../../../core/ccxt/js/src/abstract/gate.js","../../../core/ccxt/js/src/gate.js","../../../core/ccxt/js/src/abstract/htx.js","../../../core/ccxt/js/src/abstract/kraken.js","../../../core/ccxt/js/src/abstract/kucoin.js","../../../core/ccxt/js/src/abstract/mexc.js","../../../core/ccxt/js/src/abstract/okx.js","../../../core/ccxt/js/ccxt.js","../../../core/ccxt/js/src/binance.js","../../../core/ccxt/js/src/bitfinex2.js","../../../core/ccxt/js/src/bitget.js","../../../core/ccxt/js/src/bitmart.js","../../../core/ccxt/js/src/bitstamp.js","../../../core/ccxt/js/src/bybit.js","../../../core/ccxt/js/src/coinbase.js","../../../core/ccxt/js/src/coinbaseexchange.js","../../../core/ccxt/js/src/gateio.js","../../../core/ccxt/js/src/htx.js","../../../core/ccxt/js/src/kraken.js","../../../core/ccxt/js/src/kucoin.js","../../../core/ccxt/js/src/mexc.js","../../../core/ccxt/js/src/okx.js","../../../node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js","../../../node_modules/@babel/runtime/helpers/esm/extends.js","../../../node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","../../../node_modules/@babel/runtime/helpers/esm/inheritsLoose.js","../../../node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js","../../../node_modules/@tanstack/query-core/build/modern/focusManager.js","../../../node_modules/@tanstack/query-core/build/modern/mutation.js","../../../node_modules/@tanstack/query-core/build/modern/notifyManager.js","../../../node_modules/@tanstack/query-core/build/modern/onlineManager.js","../../../node_modules/@tanstack/query-core/build/modern/query.js","../../../node_modules/@tanstack/query-core/build/modern/queryCache.js","../../../node_modules/@tanstack/query-core/build/modern/mutationCache.js","../../../node_modules/@tanstack/query-core/build/modern/infiniteQueryBehavior.js","../../../node_modules/@tanstack/query-core/build/modern/queryClient.js","../../../node_modules/@tanstack/query-core/build/modern/queryObserver.js","../../../node_modules/@tanstack/query-core/build/modern/removable.js","../../../node_modules/@tanstack/query-core/build/modern/retryer.js","../../../node_modules/@tanstack/query-core/build/modern/subscribable.js","../../../node_modules/@tanstack/query-core/build/modern/utils.js","../../../node_modules/@tanstack/react-query/build/modern/QueryClientProvider.js","../../../node_modules/@tanstack/react-query/build/modern/QueryErrorResetBoundary.js","../../../node_modules/@tanstack/react-query/build/modern/errorBoundaryUtils.js","../../../node_modules/@tanstack/react-query/build/modern/isRestoring.js","../../../node_modules/@tanstack/react-query/build/modern/suspense.js","../../../node_modules/@tanstack/query-core/build/modern/mutationObserver.js","../../../node_modules/@tanstack/react-query/build/modern/useMutation.js","../../../node_modules/@tanstack/react-query/build/modern/useQuery.js","../../../node_modules/@tanstack/react-query/build/modern/useBaseQuery.js","../../../node_modules/@tanstack/react-query/build/modern/utils.js","../../../node_modules/zustand/esm/vanilla.mjs","../../../node_modules/zustand/esm/index.mjs","../../../node_modules/zustand/esm/middleware.mjs","../webpack/bootstrap","../webpack/runtime/compat get default export","../webpack/runtime/create fake namespace object","../webpack/runtime/define property getters","../webpack/runtime/global","../webpack/runtime/hasOwnProperty shorthand","../webpack/runtime/make namespace object","../webpack/runtime/publicPath","../webpack/runtime/nonce","webpack://@cede/ballpit/./src/index.css?29a4","components/Header.tsx","../../../core/utils/src/object/nested.ts","constants/methods.ts","constants/widgetConfig.ts","hooks/useParamsForms/utils.ts","hooks/useParamsForms/useParamsForms.ts","../../../core/utils/src/object/cherryPick.ts","hooks/useCedeStore.ts","../../../node_modules/@mui/material/esm/ListItemIcon/listItemIconClasses.js","../../../node_modules/@mui/material/esm/ListItemText/listItemTextClasses.js","../../../node_modules/@mui/material/esm/MenuItem/menuItemClasses.js","../../../node_modules/@mui/material/esm/MenuItem/MenuItem.js","components/form/fields/AccountIdsField.tsx","components/form/fields/AccountOrVaultIdField.tsx","../../../node_modules/@mui/material/esm/FormGroup/formGroupClasses.js","../../../node_modules/@mui/material/esm/FormGroup/FormGroup.js","../../../node_modules/@mui/material/esm/internal/switchBaseClasses.js","../../../node_modules/@mui/material/esm/internal/SwitchBase.js","../../../node_modules/@mui/material/esm/Switch/switchClasses.js","../../../node_modules/@mui/material/esm/Switch/Switch.js","components/form/fields/BooleanField.tsx","components/form/fields/SelectField.tsx","components/form/UserFieldsGroup.tsx","../../../core/utils/src/object/json.ts","components/form/fields/JsonField.tsx","components/form/fields/ResultField.tsx","components/form/ActionCard.tsx","../../../node_modules/@mui/material/esm/Grid/GridContext.js","../../../node_modules/@mui/material/esm/Grid/gridClasses.js","../../../node_modules/@mui/material/esm/Grid/Grid.js","components/CheckConnection.tsx","../../../node_modules/@mui/material/esm/Stack/Stack.js","components/Settings.tsx","components/SuiteSection.tsx","../../../core/widgets-universal/dist/index-d82a9922.mjs","../../widgets/src/assets/chromeWebStore.svg","../../widgets/src/features/CedeOnboardingModal.tsx","../../../node_modules/@remix-run/router/dist/router.js","../../../node_modules/react-router/dist/index.js","../../../node_modules/@mui/material/esm/AppBar/appBarClasses.js","../../../node_modules/@mui/material/esm/AppBar/AppBar.js","../../../core/react-utils/src/components/NavBar/NavBar.tsx","../../../core/react-utils/src/components/NavBar/NavBarZustand.tsx","../../../core/react-utils/src/components/HelpLink/HelpLink.tsx","../../../core/react-utils/src/components/AlertQueue/AlertQueue.tsx","../../../core/react-utils/src/store/loading/loading.ts","../../../core/react-utils/src/components/Loading/index.tsx","../../widgets/src/components/Container/index.tsx","../../../core/utils/src/constants/routes.ts","../../../core/utils/src/random/index.ts","../../../core/utils/src/configs/walletTypes/walletTypes.common.config.ts","../../../core/utils/src/configs/walletTypes/walletTypes.test.config.ts","../../../core/utils/src/text/index.ts","../../../core/utils/src/mocks/accounts.ts","../../../core/utils/src/api-client/types.ts","../../../core/utils/src/api-client/mocks.ts","../../../node_modules/axios/lib/helpers/bind.js","../../../node_modules/axios/lib/utils.js","../../../node_modules/axios/lib/core/AxiosError.js","../../../node_modules/axios/lib/helpers/toFormData.js","../../../node_modules/axios/lib/helpers/AxiosURLSearchParams.js","../../../node_modules/axios/lib/helpers/buildURL.js","../../../node_modules/axios/lib/core/InterceptorManager.js","../../../node_modules/axios/lib/defaults/transitional.js","../../../node_modules/axios/lib/platform/browser/index.js","../../../node_modules/axios/lib/platform/browser/classes/URLSearchParams.js","../../../node_modules/axios/lib/platform/browser/classes/FormData.js","../../../node_modules/axios/lib/platform/browser/classes/Blob.js","../../../node_modules/axios/lib/platform/common/utils.js","../../../node_modules/axios/lib/platform/index.js","../../../node_modules/axios/lib/helpers/formDataToJSON.js","../../../node_modules/axios/lib/defaults/index.js","../../../node_modules/axios/lib/helpers/toURLEncodedForm.js","../../../node_modules/axios/lib/helpers/parseHeaders.js","../../../node_modules/axios/lib/core/AxiosHeaders.js","../../../node_modules/axios/lib/core/transformData.js","../../../node_modules/axios/lib/cancel/isCancel.js","../../../node_modules/axios/lib/cancel/CanceledError.js","../../../node_modules/axios/lib/core/settle.js","../../../node_modules/axios/lib/helpers/speedometer.js","../../../node_modules/axios/lib/helpers/throttle.js","../../../node_modules/axios/lib/helpers/progressEventReducer.js","../../../node_modules/axios/lib/helpers/isURLSameOrigin.js","../../../node_modules/axios/lib/helpers/cookies.js","../../../node_modules/axios/lib/core/buildFullPath.js","../../../node_modules/axios/lib/helpers/isAbsoluteURL.js","../../../node_modules/axios/lib/helpers/combineURLs.js","../../../node_modules/axios/lib/core/mergeConfig.js","../../../node_modules/axios/lib/helpers/resolveConfig.js","../../../node_modules/axios/lib/adapters/xhr.js","../../../node_modules/axios/lib/helpers/parseProtocol.js","../../../node_modules/axios/lib/helpers/composeSignals.js","../../../node_modules/axios/lib/helpers/trackStream.js","../../../node_modules/axios/lib/adapters/fetch.js","../../../node_modules/axios/lib/adapters/adapters.js","../../../node_modules/axios/lib/helpers/null.js","../../../node_modules/axios/lib/core/dispatchRequest.js","../../../node_modules/axios/lib/env/data.js","../../../node_modules/axios/lib/helpers/validator.js","../../../node_modules/axios/lib/core/Axios.js","../../../node_modules/axios/lib/cancel/CancelToken.js","../../../node_modules/axios/lib/helpers/HttpStatusCode.js","../../../node_modules/axios/lib/axios.js","../../../node_modules/axios/lib/helpers/spread.js","../../../node_modules/axios/lib/helpers/isAxiosError.js","../../../core/utils/src/api-client/index.ts","../../../core/utils/src/mocks/vaults.ts","../../../core/utils/src/mocks/settings.ts","../../../core/utils/src/mocks/supportedExchanges.ts","../../../core/utils/src/mocks/balances.ts","../../../core/utils/src/mocks/networks.ts","../../../node_modules/async-mutex/index.mjs","../../../core/utils/src/provider/mockedBackgroundHandler.ts","../../widgets/src/hooks/useDependencies.ts","../../../core/react-utils/src/store/alert/types.ts","../../../core/react-utils/src/utils/timeLimitedPersistStorage.ts","../../../core/react-utils/src/components/Trade/hooks/useTradeForm.tsx","../../widgets/src/hooks/useWidgetLogin.tsx","../../widgets/src/contexts/dependencies/dependencies.tsx","../../widgets/src/hooks/useInitialize.ts","../../widgets/src/stores/onboardingModal/onboardingModal.ts","../../widgets/src/hooks/useWidgetBackgroundHandler.ts","../../../core/utils/src/cms/index.ts","../../../core/react-utils/src/hooks/useConfig.ts","../../../core/react-utils/src/components/Trade/hooks/useTradeApi.ts","../../../core/utils/src/error/getErrorMessage.ts","../../../core/react-utils/src/hooks/useEffectOnce.ts","../../../core/react-utils/src/hooks/useTriggerEffect.ts","../../../core/react-utils/src/components/Send/hooks/utils.ts","../../../core/react-utils/src/components/Trade/hooks/useRepeatTrade.ts","../../../core/react-utils/src/utils/queryClient.ts","../../../core/react-utils/src/store/transaction/transaction.ts","../../../core/react-utils/src/store/tabs/useTabsFactory.ts","../../../core/react-utils/src/components/Trade/hooks/useTradeTabs.ts","../../../core/react-utils/src/utils/htmlExports.ts","../../../core/react-utils/src/components/DroplistMissingPermission/DroplistMissingPermission.tsx","../../../core/react-utils/src/store/layout/layout.ts","../../../core/react-utils/src/components/Send/types.ts","../../../core/react-utils/src/components/Send/hooks/useSendTabs.ts","../../../core/react-utils/src/components/Send/hooks/useSendApi.ts","../../../core/react-utils/src/hooks/useAddressBook.ts","../../../core/react-utils/src/components/Send/hooks/useSendValidation.ts","../../../node_modules/@mui/material/esm/useMediaQuery/useMediaQuery.js","../../../core/react-utils/src/components/Send/hooks/useSend.tsx","../../../core/utils/src/trade/getCurrentRate.ts","../../../core/react-utils/src/hooks/useMultipleTransactions.ts","../../../node_modules/@tanstack/query-core/build/modern/queriesObserver.js","../../../core/react-utils/src/hooks/withdrawableBalances/useWithdrawableBalances.ts","../../../core/react-utils/src/hooks/tradePathBySupportedTokens/useTradePathBySupportedTokens.ts","../../../core/react-utils/src/hooks/useCedeStoreVersion.ts","../../../core/utils/src/socials/socialsConstants.ts","../../../core/react-utils/src/hooks/useMultipleTransactionFees.ts","../../../core/react-utils/src/hooks/useMultipleTransactionsMinAmount.ts","../../../core/react-utils/src/hooks/useMultipleTransactionsStore.ts","../../../core/react-utils/src/store/send/send.ts","../../../core/react-utils/src/store/globalMenu/globalMenu.ts","../../../core/utils/src/languages/constants.ts","../../../core/react-utils/src/store/settings/settings.ts","../../../core/react-utils/src/store/alert/alert.ts","../../../core/react-utils/src/contexts/dependencies/dependencies.tsx","../../../node_modules/@tanstack/react-query/build/modern/useQueries.js","../../../core/react-utils/src/hooks/networks/useNetworks.ts","../../../core/react-utils/src/pages/CompletedTransaction/useCompletedTransaction.tsx","../../../core/react-utils/src/hooks/useTriggerUpdateTransaction.ts","../../../core/react-utils/src/hooks/useExtensionAsset.ts","../../../core/utils/src/api-client/readAssetFromExtension.ts","../../../core/react-utils/src/hooks/useExchangesStatusAlerts.ts","../../../core/react-utils/src/hooks/useStandardizedNetworks.ts","../../../core/react-utils/src/hooks/useAddressInputValue.ts","../../../core/react-utils/src/hooks/whitelistedAddresses/useWhitelistedAddresses.ts","../../../core/react-utils/src/hooks/supportedTokens/useSupportedTokens.ts","../../../core/react-utils/src/components/Send/hooks/useSendMinAmount.ts","../../../core/react-utils/src/hooks/useTriggerLoadingConditionally.ts","../../../core/react-utils/src/hooks/usePartners.ts","../../../core/react-utils/src/hooks/useShareOnTwitter.ts","../../../core/react-utils/src/hooks/tokenNamesAndSymbols/useTokenNamesAndSymbols.ts","../../../core/utils/src/balance/balancesByWalletTypeToBalancesByToken.ts","../../../core/react-utils/src/components/Trade/hooks/useTrade.tsx","../../../core/react-utils/src/hooks/useDebounceFn.ts","../../../core/react-utils/src/components/Trade/hooks/useTradeMinAmount.ts","../../../core/react-utils/src/hooks/useDiscordInvitation.ts","../../../core/react-utils/src/hooks/useTradePath.ts","../../../core/react-utils/src/components/Trade/hooks/useTradeFee.ts","../../../core/react-utils/src/components/Trade/hooks/useTradeAmountComputation.ts","../../../core/react-utils/src/components/Trade/hooks/useTradeDispatcher.ts","../../../core/react-utils/src/contexts/dependencies/provider.tsx","../../widgets/src/contexts/dependencies/provider.tsx","../../widgets/src/providers/index.tsx","../../widgets/src/hooks/useCustomTheme.ts","../../widgets/src/routes/renderRoutes.tsx","../../widgets/src/components/DefaultPage/index.tsx","../../widgets/src/components/Login/DefaultLogin.tsx","../../widgets/src/components/Login/index.tsx","../../../node_modules/react-router-dom/dist/index.js","../../../core/react-utils/src/assets/chromeWebStore.svg","../../../core/react-utils/src/components/HelpButton/HelpButton.tsx","../../../core/react-utils/src/components/MainFooter/MainFooter.tsx","../../../core/react-utils/src/components/WhitelistAddressTutorial/Tutorials/useWhitelistAddressTutorials.ts","../../../node_modules/@mui/material/esm/Dialog/dialogClasses.js","../../../node_modules/@mui/material/esm/Dialog/DialogContext.js","../../../node_modules/@mui/material/esm/Dialog/Dialog.js","../../../core/react-utils/src/components/WhitelistAddressTutorial/WhitelistAddressTutorial.tsx","../../../core/react-utils/src/components/WhitelistAddressTutorial/FullPageWhitelistTutorial.tsx","../../../core/react-utils/src/components/Send/TradeSendConfirmModal.tsx","../../../core/react-utils/src/components/Send/WithdrawMinAmount.tsx","../../../node_modules/@mui/icons-material/esm/Create.js","../../../node_modules/@mui/icons-material/esm/Add.js","../../../node_modules/@mui/icons-material/esm/SwapHoriz.js","../../../node_modules/@mui/material/esm/internal/svg-icons/CheckBoxOutlineBlank.js","../../../node_modules/@mui/material/esm/internal/svg-icons/CheckBox.js","../../../node_modules/@mui/material/esm/internal/svg-icons/IndeterminateCheckBox.js","../../../node_modules/@mui/material/esm/Checkbox/checkboxClasses.js","../../../node_modules/@mui/material/esm/Checkbox/Checkbox.js","../../../core/react-utils/src/components/Send/PresentationalSend.tsx","../../widgets/src/routes/authenticationMiddleware.tsx","../../../core/utils/src/browsers/detect.ts","../../widgets/src/components/NotSupported/index.tsx","../../widgets/src/routes/chromiumMiddleware.tsx","../../widgets/src/routes/initMiddleware.tsx","../../../core/react-utils/src/components/Page/Page.tsx","../../../core/react-utils/src/hooks/useIsOnboardingRequest.ts","../../../core/react-utils/src/components/Transaction/CedeStoreMessage.tsx","../../../core/react-utils/src/components/Transaction/CexLine.tsx","../../../core/react-utils/src/components/Transaction/ConfirmEmail.tsx","../../../core/react-utils/src/components/Transaction/ErrorLine.tsx","../../../core/react-utils/src/components/Transaction/NetworkLine.tsx","../../../core/react-utils/src/components/Transaction/RecipientAddressLine.tsx","../../../core/react-utils/src/components/Transaction/SendHeader.tsx","../../../core/react-utils/src/components/Transaction/StatusLine.tsx","../../../core/react-utils/src/components/Transaction/TotalFees.tsx","../../../node_modules/@mui/icons-material/esm/EastRounded.js","../../../core/react-utils/src/components/Transaction/TradeHeader.tsx","../../../core/react-utils/src/pages/CompletedTransaction/utils.ts","../../../core/react-utils/src/pages/CompletedTransaction/footers/DefaultFooter.tsx","../../../core/react-utils/src/pages/CompletedTransaction/footers/OnrampMoneyCustomFooter.tsx","../../../node_modules/@mui/icons-material/esm/WidgetsRounded.js","../../../node_modules/@mui/icons-material/esm/X.js","../../../core/react-utils/src/pages/CompletedTransaction/index.tsx","../../../core/react-utils/src/pages/CompletedTransaction/footers/getFooter.tsx","../../../core/react-utils/src/components/Transaction/AccountLine.tsx","../../../core/utils/src/date/getRelativeDate.ts","../../../core/react-utils/src/components/Transaction/DateLine.tsx","../../../core/react-utils/src/components/Transaction/FeeLine.tsx","../../../core/react-utils/src/components/Transaction/PriceLine.tsx","../../../core/react-utils/src/components/Transaction/TxHashLine.tsx","../../../core/react-utils/src/pages/CompletedTransactionDetails/ui/TransactionInformationsBlock.tsx","../../../core/react-utils/src/pages/CompletedTransactionDetails/ui/TransactionStatus.tsx","../../../core/react-utils/src/pages/CompletedTransactionDetails/ui/TxExplorerLink.tsx","../../../node_modules/@mui/icons-material/esm/Loop.js","../../../core/react-utils/src/pages/CompletedTransactionDetails/index.tsx","../../../core/react-utils/src/pages/FixInvalidPermissionsTutorial/useFixInvalidPermissionsTutorial.ts","../../../core/react-utils/src/pages/FixInvalidPermissionsTutorial/FixInvalidPermissionsTutorial.tsx","../../../core/react-utils/src/components/SingleTransaction/SingleTransaction.tsx","../../../core/react-utils/src/pages/MultipleTransactions/MultipleTransactions.tsx","../../widgets/src/routes/sendRoutes.tsx","../../widgets/src/components/Send/index.tsx","../../widgets/src/features/CedeSend.tsx","../../../core/react-utils/src/components/Trade/ui/LimitPrice.tsx","../../../core/react-utils/src/components/Trade/ui/TradeRouteInfoModal.tsx","../../../node_modules/@mui/icons-material/esm/HelpOutline.js","../../../node_modules/@mui/material/esm/Tab/tabClasses.js","../../../node_modules/@mui/material/esm/Tab/Tab.js","../../../core/react-utils/src/components/Trade/ui/index.tsx","../../widgets/src/routes/tradeRoutes.tsx","suites/Widgets.tsx","App.tsx","hooks/useSetupApp.ts","index.tsx"],"sourcesContent":["var isDevelopment = false;\n\n/*\n\nBased off glamor's StyleSheet, thanks Sunil ❤️\n\nhigh performance StyleSheet for css-in-js systems\n\n- uses multiple style tags behind the scenes for millions of rules\n- uses `insertRule` for appending in production for *much* faster performance\n\n// usage\n\nimport { StyleSheet } from '@emotion/sheet'\n\nlet styleSheet = new StyleSheet({ key: '', container: document.head })\n\nstyleSheet.insert('#box { border: 1px solid red; }')\n- appends a css rule into the stylesheet\n\nstyleSheet.flush()\n- empties the stylesheet of all its contents\n\n*/\n\nfunction sheetForTag(tag) {\n if (tag.sheet) {\n return tag.sheet;\n } // this weirdness brought to you by firefox\n\n /* istanbul ignore next */\n\n\n for (var i = 0; i < document.styleSheets.length; i++) {\n if (document.styleSheets[i].ownerNode === tag) {\n return document.styleSheets[i];\n }\n } // this function should always return with a value\n // TS can't understand it though so we make it stop complaining here\n\n\n return undefined;\n}\n\nfunction createStyleElement(options) {\n var tag = document.createElement('style');\n tag.setAttribute('data-emotion', options.key);\n\n if (options.nonce !== undefined) {\n tag.setAttribute('nonce', options.nonce);\n }\n\n tag.appendChild(document.createTextNode(''));\n tag.setAttribute('data-s', '');\n return tag;\n}\n\nvar StyleSheet = /*#__PURE__*/function () {\n // Using Node instead of HTMLElement since container may be a ShadowRoot\n function StyleSheet(options) {\n var _this = this;\n\n this._insertTag = function (tag) {\n var before;\n\n if (_this.tags.length === 0) {\n if (_this.insertionPoint) {\n before = _this.insertionPoint.nextSibling;\n } else if (_this.prepend) {\n before = _this.container.firstChild;\n } else {\n before = _this.before;\n }\n } else {\n before = _this.tags[_this.tags.length - 1].nextSibling;\n }\n\n _this.container.insertBefore(tag, before);\n\n _this.tags.push(tag);\n };\n\n this.isSpeedy = options.speedy === undefined ? !isDevelopment : options.speedy;\n this.tags = [];\n this.ctr = 0;\n this.nonce = options.nonce; // key is the value of the data-emotion attribute, it's used to identify different sheets\n\n this.key = options.key;\n this.container = options.container;\n this.prepend = options.prepend;\n this.insertionPoint = options.insertionPoint;\n this.before = null;\n }\n\n var _proto = StyleSheet.prototype;\n\n _proto.hydrate = function hydrate(nodes) {\n nodes.forEach(this._insertTag);\n };\n\n _proto.insert = function insert(rule) {\n // the max length is how many rules we have per style tag, it's 65000 in speedy mode\n // it's 1 in dev because we insert source maps that map a single rule to a location\n // and you can only have one source map per style tag\n if (this.ctr % (this.isSpeedy ? 65000 : 1) === 0) {\n this._insertTag(createStyleElement(this));\n }\n\n var tag = this.tags[this.tags.length - 1];\n\n if (this.isSpeedy) {\n var sheet = sheetForTag(tag);\n\n try {\n // this is the ultrafast version, works across browsers\n // the big drawback is that the css won't be editable in devtools\n sheet.insertRule(rule, sheet.cssRules.length);\n } catch (e) {\n }\n } else {\n tag.appendChild(document.createTextNode(rule));\n }\n\n this.ctr++;\n };\n\n _proto.flush = function flush() {\n this.tags.forEach(function (tag) {\n var _tag$parentNode;\n\n return (_tag$parentNode = tag.parentNode) == null ? void 0 : _tag$parentNode.removeChild(tag);\n });\n this.tags = [];\n this.ctr = 0;\n };\n\n return StyleSheet;\n}();\n\nexport { StyleSheet };\n","/**\n * @param {number}\n * @return {number}\n */\nexport var abs = Math.abs\n\n/**\n * @param {number}\n * @return {string}\n */\nexport var from = String.fromCharCode\n\n/**\n * @param {object}\n * @return {object}\n */\nexport var assign = Object.assign\n\n/**\n * @param {string} value\n * @param {number} length\n * @return {number}\n */\nexport function hash (value, length) {\n\treturn charat(value, 0) ^ 45 ? (((((((length << 2) ^ charat(value, 0)) << 2) ^ charat(value, 1)) << 2) ^ charat(value, 2)) << 2) ^ charat(value, 3) : 0\n}\n\n/**\n * @param {string} value\n * @return {string}\n */\nexport function trim (value) {\n\treturn value.trim()\n}\n\n/**\n * @param {string} value\n * @param {RegExp} pattern\n * @return {string?}\n */\nexport function match (value, pattern) {\n\treturn (value = pattern.exec(value)) ? value[0] : value\n}\n\n/**\n * @param {string} value\n * @param {(string|RegExp)} pattern\n * @param {string} replacement\n * @return {string}\n */\nexport function replace (value, pattern, replacement) {\n\treturn value.replace(pattern, replacement)\n}\n\n/**\n * @param {string} value\n * @param {string} search\n * @return {number}\n */\nexport function indexof (value, search) {\n\treturn value.indexOf(search)\n}\n\n/**\n * @param {string} value\n * @param {number} index\n * @return {number}\n */\nexport function charat (value, index) {\n\treturn value.charCodeAt(index) | 0\n}\n\n/**\n * @param {string} value\n * @param {number} begin\n * @param {number} end\n * @return {string}\n */\nexport function substr (value, begin, end) {\n\treturn value.slice(begin, end)\n}\n\n/**\n * @param {string} value\n * @return {number}\n */\nexport function strlen (value) {\n\treturn value.length\n}\n\n/**\n * @param {any[]} value\n * @return {number}\n */\nexport function sizeof (value) {\n\treturn value.length\n}\n\n/**\n * @param {any} value\n * @param {any[]} array\n * @return {any}\n */\nexport function append (value, array) {\n\treturn array.push(value), value\n}\n\n/**\n * @param {string[]} array\n * @param {function} callback\n * @return {string}\n */\nexport function combine (array, callback) {\n\treturn array.map(callback).join('')\n}\n","import {from, trim, charat, strlen, substr, append, assign} from './Utility.js'\n\nexport var line = 1\nexport var column = 1\nexport var length = 0\nexport var position = 0\nexport var character = 0\nexport var characters = ''\n\n/**\n * @param {string} value\n * @param {object | null} root\n * @param {object | null} parent\n * @param {string} type\n * @param {string[] | string} props\n * @param {object[] | string} children\n * @param {number} length\n */\nexport function node (value, root, parent, type, props, children, length) {\n\treturn {value: value, root: root, parent: parent, type: type, props: props, children: children, line: line, column: column, length: length, return: ''}\n}\n\n/**\n * @param {object} root\n * @param {object} props\n * @return {object}\n */\nexport function copy (root, props) {\n\treturn assign(node('', null, null, '', null, null, 0), root, {length: -root.length}, props)\n}\n\n/**\n * @return {number}\n */\nexport function char () {\n\treturn character\n}\n\n/**\n * @return {number}\n */\nexport function prev () {\n\tcharacter = position > 0 ? charat(characters, --position) : 0\n\n\tif (column--, character === 10)\n\t\tcolumn = 1, line--\n\n\treturn character\n}\n\n/**\n * @return {number}\n */\nexport function next () {\n\tcharacter = position < length ? charat(characters, position++) : 0\n\n\tif (column++, character === 10)\n\t\tcolumn = 1, line++\n\n\treturn character\n}\n\n/**\n * @return {number}\n */\nexport function peek () {\n\treturn charat(characters, position)\n}\n\n/**\n * @return {number}\n */\nexport function caret () {\n\treturn position\n}\n\n/**\n * @param {number} begin\n * @param {number} end\n * @return {string}\n */\nexport function slice (begin, end) {\n\treturn substr(characters, begin, end)\n}\n\n/**\n * @param {number} type\n * @return {number}\n */\nexport function token (type) {\n\tswitch (type) {\n\t\t// \\0 \\t \\n \\r \\s whitespace token\n\t\tcase 0: case 9: case 10: case 13: case 32:\n\t\t\treturn 5\n\t\t// ! + , / > @ ~ isolate token\n\t\tcase 33: case 43: case 44: case 47: case 62: case 64: case 126:\n\t\t// ; { } breakpoint token\n\t\tcase 59: case 123: case 125:\n\t\t\treturn 4\n\t\t// : accompanied token\n\t\tcase 58:\n\t\t\treturn 3\n\t\t// \" ' ( [ opening delimit token\n\t\tcase 34: case 39: case 40: case 91:\n\t\t\treturn 2\n\t\t// ) ] closing delimit token\n\t\tcase 41: case 93:\n\t\t\treturn 1\n\t}\n\n\treturn 0\n}\n\n/**\n * @param {string} value\n * @return {any[]}\n */\nexport function alloc (value) {\n\treturn line = column = 1, length = strlen(characters = value), position = 0, []\n}\n\n/**\n * @param {any} value\n * @return {any}\n */\nexport function dealloc (value) {\n\treturn characters = '', value\n}\n\n/**\n * @param {number} type\n * @return {string}\n */\nexport function delimit (type) {\n\treturn trim(slice(position - 1, delimiter(type === 91 ? type + 2 : type === 40 ? type + 1 : type)))\n}\n\n/**\n * @param {string} value\n * @return {string[]}\n */\nexport function tokenize (value) {\n\treturn dealloc(tokenizer(alloc(value)))\n}\n\n/**\n * @param {number} type\n * @return {string}\n */\nexport function whitespace (type) {\n\twhile (character = peek())\n\t\tif (character < 33)\n\t\t\tnext()\n\t\telse\n\t\t\tbreak\n\n\treturn token(type) > 2 || token(character) > 3 ? '' : ' '\n}\n\n/**\n * @param {string[]} children\n * @return {string[]}\n */\nexport function tokenizer (children) {\n\twhile (next())\n\t\tswitch (token(character)) {\n\t\t\tcase 0: append(identifier(position - 1), children)\n\t\t\t\tbreak\n\t\t\tcase 2: append(delimit(character), children)\n\t\t\t\tbreak\n\t\t\tdefault: append(from(character), children)\n\t\t}\n\n\treturn children\n}\n\n/**\n * @param {number} index\n * @param {number} count\n * @return {string}\n */\nexport function escaping (index, count) {\n\twhile (--count && next())\n\t\t// not 0-9 A-F a-f\n\t\tif (character < 48 || character > 102 || (character > 57 && character < 65) || (character > 70 && character < 97))\n\t\t\tbreak\n\n\treturn slice(index, caret() + (count < 6 && peek() == 32 && next() == 32))\n}\n\n/**\n * @param {number} type\n * @return {number}\n */\nexport function delimiter (type) {\n\twhile (next())\n\t\tswitch (character) {\n\t\t\t// ] ) \" '\n\t\t\tcase type:\n\t\t\t\treturn position\n\t\t\t// \" '\n\t\t\tcase 34: case 39:\n\t\t\t\tif (type !== 34 && type !== 39)\n\t\t\t\t\tdelimiter(character)\n\t\t\t\tbreak\n\t\t\t// (\n\t\t\tcase 40:\n\t\t\t\tif (type === 41)\n\t\t\t\t\tdelimiter(type)\n\t\t\t\tbreak\n\t\t\t// \\\n\t\t\tcase 92:\n\t\t\t\tnext()\n\t\t\t\tbreak\n\t\t}\n\n\treturn position\n}\n\n/**\n * @param {number} type\n * @param {number} index\n * @return {number}\n */\nexport function commenter (type, index) {\n\twhile (next())\n\t\t// //\n\t\tif (type + character === 47 + 10)\n\t\t\tbreak\n\t\t// /*\n\t\telse if (type + character === 42 + 42 && peek() === 47)\n\t\t\tbreak\n\n\treturn '/*' + slice(index, position - 1) + '*' + from(type === 47 ? type : next())\n}\n\n/**\n * @param {number} index\n * @return {string}\n */\nexport function identifier (index) {\n\twhile (!token(peek()))\n\t\tnext()\n\n\treturn slice(index, position)\n}\n","export var MS = '-ms-'\nexport var MOZ = '-moz-'\nexport var WEBKIT = '-webkit-'\n\nexport var COMMENT = 'comm'\nexport var RULESET = 'rule'\nexport var DECLARATION = 'decl'\n\nexport var PAGE = '@page'\nexport var MEDIA = '@media'\nexport var IMPORT = '@import'\nexport var CHARSET = '@charset'\nexport var VIEWPORT = '@viewport'\nexport var SUPPORTS = '@supports'\nexport var DOCUMENT = '@document'\nexport var NAMESPACE = '@namespace'\nexport var KEYFRAMES = '@keyframes'\nexport var FONT_FACE = '@font-face'\nexport var COUNTER_STYLE = '@counter-style'\nexport var FONT_FEATURE_VALUES = '@font-feature-values'\nexport var LAYER = '@layer'\n","import {IMPORT, LAYER, COMMENT, RULESET, DECLARATION, KEYFRAMES} from './Enum.js'\nimport {strlen, sizeof} from './Utility.js'\n\n/**\n * @param {object[]} children\n * @param {function} callback\n * @return {string}\n */\nexport function serialize (children, callback) {\n\tvar output = ''\n\tvar length = sizeof(children)\n\n\tfor (var i = 0; i < length; i++)\n\t\toutput += callback(children[i], i, children, callback) || ''\n\n\treturn output\n}\n\n/**\n * @param {object} element\n * @param {number} index\n * @param {object[]} children\n * @param {function} callback\n * @return {string}\n */\nexport function stringify (element, index, children, callback) {\n\tswitch (element.type) {\n\t\tcase LAYER: if (element.children.length) break\n\t\tcase IMPORT: case DECLARATION: return element.return = element.return || element.value\n\t\tcase COMMENT: return ''\n\t\tcase KEYFRAMES: return element.return = element.value + '{' + serialize(element.children, callback) + '}'\n\t\tcase RULESET: element.value = element.props.join(',')\n\t}\n\n\treturn strlen(children = serialize(element.children, callback)) ? element.return = element.value + '{' + children + '}' : ''\n}\n","import {COMMENT, RULESET, DECLARATION} from './Enum.js'\nimport {abs, charat, trim, from, sizeof, strlen, substr, append, replace, indexof} from './Utility.js'\nimport {node, char, prev, next, peek, caret, alloc, dealloc, delimit, whitespace, escaping, identifier, commenter} from './Tokenizer.js'\n\n/**\n * @param {string} value\n * @return {object[]}\n */\nexport function compile (value) {\n\treturn dealloc(parse('', null, null, null, [''], value = alloc(value), 0, [0], value))\n}\n\n/**\n * @param {string} value\n * @param {object} root\n * @param {object?} parent\n * @param {string[]} rule\n * @param {string[]} rules\n * @param {string[]} rulesets\n * @param {number[]} pseudo\n * @param {number[]} points\n * @param {string[]} declarations\n * @return {object}\n */\nexport function parse (value, root, parent, rule, rules, rulesets, pseudo, points, declarations) {\n\tvar index = 0\n\tvar offset = 0\n\tvar length = pseudo\n\tvar atrule = 0\n\tvar property = 0\n\tvar previous = 0\n\tvar variable = 1\n\tvar scanning = 1\n\tvar ampersand = 1\n\tvar character = 0\n\tvar type = ''\n\tvar props = rules\n\tvar children = rulesets\n\tvar reference = rule\n\tvar characters = type\n\n\twhile (scanning)\n\t\tswitch (previous = character, character = next()) {\n\t\t\t// (\n\t\t\tcase 40:\n\t\t\t\tif (previous != 108 && charat(characters, length - 1) == 58) {\n\t\t\t\t\tif (indexof(characters += replace(delimit(character), '&', '&\\f'), '&\\f') != -1)\n\t\t\t\t\t\tampersand = -1\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t// \" ' [\n\t\t\tcase 34: case 39: case 91:\n\t\t\t\tcharacters += delimit(character)\n\t\t\t\tbreak\n\t\t\t// \\t \\n \\r \\s\n\t\t\tcase 9: case 10: case 13: case 32:\n\t\t\t\tcharacters += whitespace(previous)\n\t\t\t\tbreak\n\t\t\t// \\\n\t\t\tcase 92:\n\t\t\t\tcharacters += escaping(caret() - 1, 7)\n\t\t\t\tcontinue\n\t\t\t// /\n\t\t\tcase 47:\n\t\t\t\tswitch (peek()) {\n\t\t\t\t\tcase 42: case 47:\n\t\t\t\t\t\tappend(comment(commenter(next(), caret()), root, parent), declarations)\n\t\t\t\t\t\tbreak\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tcharacters += '/'\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t// {\n\t\t\tcase 123 * variable:\n\t\t\t\tpoints[index++] = strlen(characters) * ampersand\n\t\t\t// } ; \\0\n\t\t\tcase 125 * variable: case 59: case 0:\n\t\t\t\tswitch (character) {\n\t\t\t\t\t// \\0 }\n\t\t\t\t\tcase 0: case 125: scanning = 0\n\t\t\t\t\t// ;\n\t\t\t\t\tcase 59 + offset: if (ampersand == -1) characters = replace(characters, /\\f/g, '')\n\t\t\t\t\t\tif (property > 0 && (strlen(characters) - length))\n\t\t\t\t\t\t\tappend(property > 32 ? declaration(characters + ';', rule, parent, length - 1) : declaration(replace(characters, ' ', '') + ';', rule, parent, length - 2), declarations)\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// @ ;\n\t\t\t\t\tcase 59: characters += ';'\n\t\t\t\t\t// { rule/at-rule\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tappend(reference = ruleset(characters, root, parent, index, offset, rules, points, type, props = [], children = [], length), rulesets)\n\n\t\t\t\t\t\tif (character === 123)\n\t\t\t\t\t\t\tif (offset === 0)\n\t\t\t\t\t\t\t\tparse(characters, root, reference, reference, props, rulesets, length, points, children)\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tswitch (atrule === 99 && charat(characters, 3) === 110 ? 100 : atrule) {\n\t\t\t\t\t\t\t\t\t// d l m s\n\t\t\t\t\t\t\t\t\tcase 100: case 108: case 109: case 115:\n\t\t\t\t\t\t\t\t\t\tparse(value, reference, reference, rule && append(ruleset(value, reference, reference, 0, 0, rules, points, type, rules, props = [], length), children), rules, children, length, points, rule ? props : children)\n\t\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\t\tparse(characters, reference, reference, reference, [''], children, 0, points, children)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tindex = offset = property = 0, variable = ampersand = 1, type = characters = '', length = pseudo\n\t\t\t\tbreak\n\t\t\t// :\n\t\t\tcase 58:\n\t\t\t\tlength = 1 + strlen(characters), property = previous\n\t\t\tdefault:\n\t\t\t\tif (variable < 1)\n\t\t\t\t\tif (character == 123)\n\t\t\t\t\t\t--variable\n\t\t\t\t\telse if (character == 125 && variable++ == 0 && prev() == 125)\n\t\t\t\t\t\tcontinue\n\n\t\t\t\tswitch (characters += from(character), character * variable) {\n\t\t\t\t\t// &\n\t\t\t\t\tcase 38:\n\t\t\t\t\t\tampersand = offset > 0 ? 1 : (characters += '\\f', -1)\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// ,\n\t\t\t\t\tcase 44:\n\t\t\t\t\t\tpoints[index++] = (strlen(characters) - 1) * ampersand, ampersand = 1\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// @\n\t\t\t\t\tcase 64:\n\t\t\t\t\t\t// -\n\t\t\t\t\t\tif (peek() === 45)\n\t\t\t\t\t\t\tcharacters += delimit(next())\n\n\t\t\t\t\t\tatrule = peek(), offset = length = strlen(type = characters += identifier(caret())), character++\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// -\n\t\t\t\t\tcase 45:\n\t\t\t\t\t\tif (previous === 45 && strlen(characters) == 2)\n\t\t\t\t\t\t\tvariable = 0\n\t\t\t\t}\n\t\t}\n\n\treturn rulesets\n}\n\n/**\n * @param {string} value\n * @param {object} root\n * @param {object?} parent\n * @param {number} index\n * @param {number} offset\n * @param {string[]} rules\n * @param {number[]} points\n * @param {string} type\n * @param {string[]} props\n * @param {string[]} children\n * @param {number} length\n * @return {object}\n */\nexport function ruleset (value, root, parent, index, offset, rules, points, type, props, children, length) {\n\tvar post = offset - 1\n\tvar rule = offset === 0 ? rules : ['']\n\tvar size = sizeof(rule)\n\n\tfor (var i = 0, j = 0, k = 0; i < index; ++i)\n\t\tfor (var x = 0, y = substr(value, post + 1, post = abs(j = points[i])), z = value; x < size; ++x)\n\t\t\tif (z = trim(j > 0 ? rule[x] + ' ' + y : replace(y, /&\\f/g, rule[x])))\n\t\t\t\tprops[k++] = z\n\n\treturn node(value, root, parent, offset === 0 ? RULESET : type, props, children, length)\n}\n\n/**\n * @param {number} value\n * @param {object} root\n * @param {object?} parent\n * @return {object}\n */\nexport function comment (value, root, parent) {\n\treturn node(value, root, parent, COMMENT, from(char()), substr(value, 2, -2), 0)\n}\n\n/**\n * @param {string} value\n * @param {object} root\n * @param {object?} parent\n * @param {number} length\n * @return {object}\n */\nexport function declaration (value, root, parent, length) {\n\treturn node(value, root, parent, DECLARATION, substr(value, 0, length), substr(value, length + 1, -1), length)\n}\n","import { StyleSheet } from '@emotion/sheet';\nimport { dealloc, alloc, next, token, from, peek, delimit, slice, position, RULESET, combine, match, serialize, copy, replace, WEBKIT, MOZ, MS, KEYFRAMES, DECLARATION, hash, charat, strlen, indexof, stringify, rulesheet, middleware, compile } from 'stylis';\nimport '@emotion/weak-memoize';\nimport '@emotion/memoize';\n\nvar identifierWithPointTracking = function identifierWithPointTracking(begin, points, index) {\n var previous = 0;\n var character = 0;\n\n while (true) {\n previous = character;\n character = peek(); // &\\f\n\n if (previous === 38 && character === 12) {\n points[index] = 1;\n }\n\n if (token(character)) {\n break;\n }\n\n next();\n }\n\n return slice(begin, position);\n};\n\nvar toRules = function toRules(parsed, points) {\n // pretend we've started with a comma\n var index = -1;\n var character = 44;\n\n do {\n switch (token(character)) {\n case 0:\n // &\\f\n if (character === 38 && peek() === 12) {\n // this is not 100% correct, we don't account for literal sequences here - like for example quoted strings\n // stylis inserts \\f after & to know when & where it should replace this sequence with the context selector\n // and when it should just concatenate the outer and inner selectors\n // it's very unlikely for this sequence to actually appear in a different context, so we just leverage this fact here\n points[index] = 1;\n }\n\n parsed[index] += identifierWithPointTracking(position - 1, points, index);\n break;\n\n case 2:\n parsed[index] += delimit(character);\n break;\n\n case 4:\n // comma\n if (character === 44) {\n // colon\n parsed[++index] = peek() === 58 ? '&\\f' : '';\n points[index] = parsed[index].length;\n break;\n }\n\n // fallthrough\n\n default:\n parsed[index] += from(character);\n }\n } while (character = next());\n\n return parsed;\n};\n\nvar getRules = function getRules(value, points) {\n return dealloc(toRules(alloc(value), points));\n}; // WeakSet would be more appropriate, but only WeakMap is supported in IE11\n\n\nvar fixedElements = /* #__PURE__ */new WeakMap();\nvar compat = function compat(element) {\n if (element.type !== 'rule' || !element.parent || // positive .length indicates that this rule contains pseudo\n // negative .length indicates that this rule has been already prefixed\n element.length < 1) {\n return;\n }\n\n var value = element.value,\n parent = element.parent;\n var isImplicitRule = element.column === parent.column && element.line === parent.line;\n\n while (parent.type !== 'rule') {\n parent = parent.parent;\n if (!parent) return;\n } // short-circuit for the simplest case\n\n\n if (element.props.length === 1 && value.charCodeAt(0) !== 58\n /* colon */\n && !fixedElements.get(parent)) {\n return;\n } // if this is an implicitly inserted rule (the one eagerly inserted at the each new nested level)\n // then the props has already been manipulated beforehand as they that array is shared between it and its \"rule parent\"\n\n\n if (isImplicitRule) {\n return;\n }\n\n fixedElements.set(element, true);\n var points = [];\n var rules = getRules(value, points);\n var parentRules = parent.props;\n\n for (var i = 0, k = 0; i < rules.length; i++) {\n for (var j = 0; j < parentRules.length; j++, k++) {\n element.props[k] = points[i] ? rules[i].replace(/&\\f/g, parentRules[j]) : parentRules[j] + \" \" + rules[i];\n }\n }\n};\nvar removeLabel = function removeLabel(element) {\n if (element.type === 'decl') {\n var value = element.value;\n\n if ( // charcode for l\n value.charCodeAt(0) === 108 && // charcode for b\n value.charCodeAt(2) === 98) {\n // this ignores label\n element[\"return\"] = '';\n element.value = '';\n }\n }\n};\n\n/* eslint-disable no-fallthrough */\n\nfunction prefix(value, length) {\n switch (hash(value, length)) {\n // color-adjust\n case 5103:\n return WEBKIT + 'print-' + value + value;\n // animation, animation-(delay|direction|duration|fill-mode|iteration-count|name|play-state|timing-function)\n\n case 5737:\n case 4201:\n case 3177:\n case 3433:\n case 1641:\n case 4457:\n case 2921: // text-decoration, filter, clip-path, backface-visibility, column, box-decoration-break\n\n case 5572:\n case 6356:\n case 5844:\n case 3191:\n case 6645:\n case 3005: // mask, mask-image, mask-(mode|clip|size), mask-(repeat|origin), mask-position, mask-composite,\n\n case 6391:\n case 5879:\n case 5623:\n case 6135:\n case 4599:\n case 4855: // background-clip, columns, column-(count|fill|gap|rule|rule-color|rule-style|rule-width|span|width)\n\n case 4215:\n case 6389:\n case 5109:\n case 5365:\n case 5621:\n case 3829:\n return WEBKIT + value + value;\n // appearance, user-select, transform, hyphens, text-size-adjust\n\n case 5349:\n case 4246:\n case 4810:\n case 6968:\n case 2756:\n return WEBKIT + value + MOZ + value + MS + value + value;\n // flex, flex-direction\n\n case 6828:\n case 4268:\n return WEBKIT + value + MS + value + value;\n // order\n\n case 6165:\n return WEBKIT + value + MS + 'flex-' + value + value;\n // align-items\n\n case 5187:\n return WEBKIT + value + replace(value, /(\\w+).+(:[^]+)/, WEBKIT + 'box-$1$2' + MS + 'flex-$1$2') + value;\n // align-self\n\n case 5443:\n return WEBKIT + value + MS + 'flex-item-' + replace(value, /flex-|-self/, '') + value;\n // align-content\n\n case 4675:\n return WEBKIT + value + MS + 'flex-line-pack' + replace(value, /align-content|flex-|-self/, '') + value;\n // flex-shrink\n\n case 5548:\n return WEBKIT + value + MS + replace(value, 'shrink', 'negative') + value;\n // flex-basis\n\n case 5292:\n return WEBKIT + value + MS + replace(value, 'basis', 'preferred-size') + value;\n // flex-grow\n\n case 6060:\n return WEBKIT + 'box-' + replace(value, '-grow', '') + WEBKIT + value + MS + replace(value, 'grow', 'positive') + value;\n // transition\n\n case 4554:\n return WEBKIT + replace(value, /([^-])(transform)/g, '$1' + WEBKIT + '$2') + value;\n // cursor\n\n case 6187:\n return replace(replace(replace(value, /(zoom-|grab)/, WEBKIT + '$1'), /(image-set)/, WEBKIT + '$1'), value, '') + value;\n // background, background-image\n\n case 5495:\n case 3959:\n return replace(value, /(image-set\\([^]*)/, WEBKIT + '$1' + '$`$1');\n // justify-content\n\n case 4968:\n return replace(replace(value, /(.+:)(flex-)?(.*)/, WEBKIT + 'box-pack:$3' + MS + 'flex-pack:$3'), /s.+-b[^;]+/, 'justify') + WEBKIT + value + value;\n // (margin|padding)-inline-(start|end)\n\n case 4095:\n case 3583:\n case 4068:\n case 2532:\n return replace(value, /(.+)-inline(.+)/, WEBKIT + '$1$2') + value;\n // (min|max)?(width|height|inline-size|block-size)\n\n case 8116:\n case 7059:\n case 5753:\n case 5535:\n case 5445:\n case 5701:\n case 4933:\n case 4677:\n case 5533:\n case 5789:\n case 5021:\n case 4765:\n // stretch, max-content, min-content, fill-available\n if (strlen(value) - 1 - length > 6) switch (charat(value, length + 1)) {\n // (m)ax-content, (m)in-content\n case 109:\n // -\n if (charat(value, length + 4) !== 45) break;\n // (f)ill-available, (f)it-content\n\n case 102:\n return replace(value, /(.+:)(.+)-([^]+)/, '$1' + WEBKIT + '$2-$3' + '$1' + MOZ + (charat(value, length + 3) == 108 ? '$3' : '$2-$3')) + value;\n // (s)tretch\n\n case 115:\n return ~indexof(value, 'stretch') ? prefix(replace(value, 'stretch', 'fill-available'), length) + value : value;\n }\n break;\n // position: sticky\n\n case 4949:\n // (s)ticky?\n if (charat(value, length + 1) !== 115) break;\n // display: (flex|inline-flex)\n\n case 6444:\n switch (charat(value, strlen(value) - 3 - (~indexof(value, '!important') && 10))) {\n // stic(k)y\n case 107:\n return replace(value, ':', ':' + WEBKIT) + value;\n // (inline-)?fl(e)x\n\n case 101:\n return replace(value, /(.+:)([^;!]+)(;|!.+)?/, '$1' + WEBKIT + (charat(value, 14) === 45 ? 'inline-' : '') + 'box$3' + '$1' + WEBKIT + '$2$3' + '$1' + MS + '$2box$3') + value;\n }\n\n break;\n // writing-mode\n\n case 5936:\n switch (charat(value, length + 11)) {\n // vertical-l(r)\n case 114:\n return WEBKIT + value + MS + replace(value, /[svh]\\w+-[tblr]{2}/, 'tb') + value;\n // vertical-r(l)\n\n case 108:\n return WEBKIT + value + MS + replace(value, /[svh]\\w+-[tblr]{2}/, 'tb-rl') + value;\n // horizontal(-)tb\n\n case 45:\n return WEBKIT + value + MS + replace(value, /[svh]\\w+-[tblr]{2}/, 'lr') + value;\n }\n\n return WEBKIT + value + MS + value + value;\n }\n\n return value;\n}\n\nvar prefixer = function prefixer(element, index, children, callback) {\n if (element.length > -1) if (!element[\"return\"]) switch (element.type) {\n case DECLARATION:\n element[\"return\"] = prefix(element.value, element.length);\n break;\n\n case KEYFRAMES:\n return serialize([copy(element, {\n value: replace(element.value, '@', '@' + WEBKIT)\n })], callback);\n\n case RULESET:\n if (element.length) return combine(element.props, function (value) {\n switch (match(value, /(::plac\\w+|:read-\\w+)/)) {\n // :read-(only|write)\n case ':read-only':\n case ':read-write':\n return serialize([copy(element, {\n props: [replace(value, /:(read-\\w+)/, ':' + MOZ + '$1')]\n })], callback);\n // :placeholder\n\n case '::placeholder':\n return serialize([copy(element, {\n props: [replace(value, /:(plac\\w+)/, ':' + WEBKIT + 'input-$1')]\n }), copy(element, {\n props: [replace(value, /:(plac\\w+)/, ':' + MOZ + '$1')]\n }), copy(element, {\n props: [replace(value, /:(plac\\w+)/, MS + 'input-$1')]\n })], callback);\n }\n\n return '';\n });\n }\n};\n\nvar defaultStylisPlugins = [prefixer];\n\nvar createCache = function\n /*: EmotionCache */\ncreateCache(options\n/*: Options */\n) {\n var key = options.key;\n\n if (key === 'css') {\n var ssrStyles = document.querySelectorAll(\"style[data-emotion]:not([data-s])\"); // get SSRed styles out of the way of React's hydration\n // document.head is a safe place to move them to(though note document.head is not necessarily the last place they will be)\n // note this very very intentionally targets all style elements regardless of the key to ensure\n // that creating a cache works inside of render of a React component\n\n Array.prototype.forEach.call(ssrStyles, function (node\n /*: HTMLStyleElement */\n ) {\n // we want to only move elements which have a space in the data-emotion attribute value\n // because that indicates that it is an Emotion 11 server-side rendered style elements\n // while we will already ignore Emotion 11 client-side inserted styles because of the :not([data-s]) part in the selector\n // Emotion 10 client-side inserted styles did not have data-s (but importantly did not have a space in their data-emotion attributes)\n // so checking for the space ensures that loading Emotion 11 after Emotion 10 has inserted some styles\n // will not result in the Emotion 10 styles being destroyed\n var dataEmotionAttribute = node.getAttribute('data-emotion');\n\n if (dataEmotionAttribute.indexOf(' ') === -1) {\n return;\n }\n\n document.head.appendChild(node);\n node.setAttribute('data-s', '');\n });\n }\n\n var stylisPlugins = options.stylisPlugins || defaultStylisPlugins;\n\n var inserted = {};\n var container;\n /* : Node */\n\n var nodesToHydrate = [];\n\n {\n container = options.container || document.head;\n Array.prototype.forEach.call( // this means we will ignore elements which don't have a space in them which\n // means that the style elements we're looking at are only Emotion 11 server-rendered style elements\n document.querySelectorAll(\"style[data-emotion^=\\\"\" + key + \" \\\"]\"), function (node\n /*: HTMLStyleElement */\n ) {\n var attrib = node.getAttribute(\"data-emotion\").split(' ');\n\n for (var i = 1; i < attrib.length; i++) {\n inserted[attrib[i]] = true;\n }\n\n nodesToHydrate.push(node);\n });\n }\n\n var _insert;\n /*: (\n selector: string,\n serialized: SerializedStyles,\n sheet: StyleSheet,\n shouldCache: boolean\n ) => string | void */\n\n\n var omnipresentPlugins = [compat, removeLabel];\n\n {\n var currentSheet;\n var finalizingPlugins = [stringify, rulesheet(function (rule) {\n currentSheet.insert(rule);\n })];\n var serializer = middleware(omnipresentPlugins.concat(stylisPlugins, finalizingPlugins));\n\n var stylis = function stylis(styles) {\n return serialize(compile(styles), serializer);\n };\n\n _insert = function\n /*: void */\n insert(selector\n /*: string */\n , serialized\n /*: SerializedStyles */\n , sheet\n /*: StyleSheet */\n , shouldCache\n /*: boolean */\n ) {\n currentSheet = sheet;\n\n stylis(selector ? selector + \"{\" + serialized.styles + \"}\" : serialized.styles);\n\n if (shouldCache) {\n cache.inserted[serialized.name] = true;\n }\n };\n }\n\n var cache\n /*: EmotionCache */\n = {\n key: key,\n sheet: new StyleSheet({\n key: key,\n container: container,\n nonce: options.nonce,\n speedy: options.speedy,\n prepend: options.prepend,\n insertionPoint: options.insertionPoint\n }),\n nonce: options.nonce,\n inserted: inserted,\n registered: {},\n insert: _insert\n };\n cache.sheet.hydrate(nodesToHydrate);\n return cache;\n};\n\nexport { createCache as default };\n","import {MS, MOZ, WEBKIT, RULESET, KEYFRAMES, DECLARATION} from './Enum.js'\nimport {match, charat, substr, strlen, sizeof, replace, combine} from './Utility.js'\nimport {copy, tokenize} from './Tokenizer.js'\nimport {serialize} from './Serializer.js'\nimport {prefix} from './Prefixer.js'\n\n/**\n * @param {function[]} collection\n * @return {function}\n */\nexport function middleware (collection) {\n\tvar length = sizeof(collection)\n\n\treturn function (element, index, children, callback) {\n\t\tvar output = ''\n\n\t\tfor (var i = 0; i < length; i++)\n\t\t\toutput += collection[i](element, index, children, callback) || ''\n\n\t\treturn output\n\t}\n}\n\n/**\n * @param {function} callback\n * @return {function}\n */\nexport function rulesheet (callback) {\n\treturn function (element) {\n\t\tif (!element.root)\n\t\t\tif (element = element.return)\n\t\t\t\tcallback(element)\n\t}\n}\n\n/**\n * @param {object} element\n * @param {number} index\n * @param {object[]} children\n * @param {function} callback\n */\nexport function prefixer (element, index, children, callback) {\n\tif (element.length > -1)\n\t\tif (!element.return)\n\t\t\tswitch (element.type) {\n\t\t\t\tcase DECLARATION: element.return = prefix(element.value, element.length, children)\n\t\t\t\t\treturn\n\t\t\t\tcase KEYFRAMES:\n\t\t\t\t\treturn serialize([copy(element, {value: replace(element.value, '@', '@' + WEBKIT)})], callback)\n\t\t\t\tcase RULESET:\n\t\t\t\t\tif (element.length)\n\t\t\t\t\t\treturn combine(element.props, function (value) {\n\t\t\t\t\t\t\tswitch (match(value, /(::plac\\w+|:read-\\w+)/)) {\n\t\t\t\t\t\t\t\t// :read-(only|write)\n\t\t\t\t\t\t\t\tcase ':read-only': case ':read-write':\n\t\t\t\t\t\t\t\t\treturn serialize([copy(element, {props: [replace(value, /:(read-\\w+)/, ':' + MOZ + '$1')]})], callback)\n\t\t\t\t\t\t\t\t// :placeholder\n\t\t\t\t\t\t\t\tcase '::placeholder':\n\t\t\t\t\t\t\t\t\treturn serialize([\n\t\t\t\t\t\t\t\t\t\tcopy(element, {props: [replace(value, /:(plac\\w+)/, ':' + WEBKIT + 'input-$1')]}),\n\t\t\t\t\t\t\t\t\t\tcopy(element, {props: [replace(value, /:(plac\\w+)/, ':' + MOZ + '$1')]}),\n\t\t\t\t\t\t\t\t\t\tcopy(element, {props: [replace(value, /:(plac\\w+)/, MS + 'input-$1')]})\n\t\t\t\t\t\t\t\t\t], callback)\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\treturn ''\n\t\t\t\t\t\t})\n\t\t\t}\n}\n\n/**\n * @param {object} element\n * @param {number} index\n * @param {object[]} children\n */\nexport function namespace (element) {\n\tswitch (element.type) {\n\t\tcase RULESET:\n\t\t\telement.props = element.props.map(function (value) {\n\t\t\t\treturn combine(tokenize(value), function (value, index, children) {\n\t\t\t\t\tswitch (charat(value, 0)) {\n\t\t\t\t\t\t// \\f\n\t\t\t\t\t\tcase 12:\n\t\t\t\t\t\t\treturn substr(value, 1, strlen(value))\n\t\t\t\t\t\t// \\0 ( + > ~\n\t\t\t\t\t\tcase 0: case 40: case 43: case 62: case 126:\n\t\t\t\t\t\t\treturn value\n\t\t\t\t\t\t// :\n\t\t\t\t\t\tcase 58:\n\t\t\t\t\t\t\tif (children[++index] === 'global')\n\t\t\t\t\t\t\t\tchildren[index] = '', children[++index] = '\\f' + substr(children[index], index = 1, -1)\n\t\t\t\t\t\t// \\s\n\t\t\t\t\t\tcase 32:\n\t\t\t\t\t\t\treturn index === 1 ? '' : value\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tswitch (index) {\n\t\t\t\t\t\t\t\tcase 0: element = value\n\t\t\t\t\t\t\t\t\treturn sizeof(children) > 1 ? '' : value\n\t\t\t\t\t\t\t\tcase index = sizeof(children) - 1: case 2:\n\t\t\t\t\t\t\t\t\treturn index === 2 ? value + element + element : value + element\n\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\treturn value\n\t\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t})\n\t}\n}\n","function memoize(fn) {\n var cache = Object.create(null);\n return function (arg) {\n if (cache[arg] === undefined) cache[arg] = fn(arg);\n return cache[arg];\n };\n}\n\nexport { memoize as default };\n","var weakMemoize = function weakMemoize(func) {\n var cache = new WeakMap();\n return function (arg) {\n if (cache.has(arg)) {\n // Use non-null assertion because we just checked that the cache `has` it\n // This allows us to remove `undefined` from the return value\n return cache.get(arg);\n }\n\n var ret = func(arg);\n cache.set(arg, ret);\n return ret;\n };\n};\n\nexport { weakMemoize as default };\n","import hoistNonReactStatics$1 from 'hoist-non-react-statics';\n\n// this file isolates this package that is not tree-shakeable\n// and if this module doesn't actually contain any logic of its own\n// then Rollup just use 'hoist-non-react-statics' directly in other chunks\n\nvar hoistNonReactStatics = (function (targetComponent, sourceComponent) {\n return hoistNonReactStatics$1(targetComponent, sourceComponent);\n});\n\nexport { hoistNonReactStatics as default };\n","import * as React from 'react';\nimport { useContext, forwardRef } from 'react';\nimport createCache from '@emotion/cache';\nimport _extends from '@babel/runtime/helpers/esm/extends';\nimport weakMemoize from '@emotion/weak-memoize';\nimport hoistNonReactStatics from '../_isolated-hnrs/dist/emotion-react-_isolated-hnrs.browser.esm.js';\nimport { getRegisteredStyles, registerStyles, insertStyles } from '@emotion/utils';\nimport { serializeStyles } from '@emotion/serialize';\nimport { useInsertionEffectAlwaysWithSyncFallback } from '@emotion/use-insertion-effect-with-fallbacks';\n\nvar isDevelopment = false;\n\n/* import { type EmotionCache } from '@emotion/utils' */\nvar EmotionCacheContext\n/*: React.Context */\n= /* #__PURE__ */React.createContext( // we're doing this to avoid preconstruct's dead code elimination in this one case\n// because this module is primarily intended for the browser and node\n// but it's also required in react native and similar environments sometimes\n// and we could have a special build just for that\n// but this is much easier and the native packages\n// might use a different theme context in the future anyway\ntypeof HTMLElement !== 'undefined' ? /* #__PURE__ */createCache({\n key: 'css'\n}) : null);\n\nvar CacheProvider = EmotionCacheContext.Provider;\nvar __unsafe_useEmotionCache = function useEmotionCache()\n/*: EmotionCache | null*/\n{\n return useContext(EmotionCacheContext);\n};\n\nvar withEmotionCache = function withEmotionCache\n/* > */\n(func\n/*: (props: Props, cache: EmotionCache, ref: Ref) => React.Node */\n)\n/*: React.AbstractComponent */\n{\n return /*#__PURE__*/forwardRef(function (props\n /*: Props */\n , ref\n /*: Ref */\n ) {\n // the cache will never be null in the browser\n var cache = useContext(EmotionCacheContext);\n return func(props, cache, ref);\n });\n};\n\nvar ThemeContext = /* #__PURE__ */React.createContext({});\n\nvar useTheme = function useTheme() {\n return React.useContext(ThemeContext);\n};\n\nvar getTheme = function getTheme(outerTheme\n/*: Object */\n, theme\n/*: Object | (Object => Object) */\n) {\n if (typeof theme === 'function') {\n var mergedTheme = theme(outerTheme);\n\n return mergedTheme;\n }\n\n return _extends({}, outerTheme, theme);\n};\n\nvar createCacheWithTheme = /* #__PURE__ */weakMemoize(function (outerTheme) {\n return weakMemoize(function (theme) {\n return getTheme(outerTheme, theme);\n });\n});\n/*\ntype ThemeProviderProps = {\n theme: Object | (Object => Object),\n children: React.Node\n}\n*/\n\nvar ThemeProvider = function ThemeProvider(props\n/*: ThemeProviderProps */\n) {\n var theme = React.useContext(ThemeContext);\n\n if (props.theme !== theme) {\n theme = createCacheWithTheme(theme)(props.theme);\n }\n\n return /*#__PURE__*/React.createElement(ThemeContext.Provider, {\n value: theme\n }, props.children);\n};\nfunction withTheme\n/* */\n(Component\n/*: React.AbstractComponent */\n)\n/*: React.AbstractComponent<$Diff> */\n{\n var componentName = Component.displayName || Component.name || 'Component';\n\n var render = function render(props, ref) {\n var theme = React.useContext(ThemeContext);\n return /*#__PURE__*/React.createElement(Component, _extends({\n theme: theme,\n ref: ref\n }, props));\n };\n\n var WithTheme = /*#__PURE__*/React.forwardRef(render);\n WithTheme.displayName = \"WithTheme(\" + componentName + \")\";\n return hoistNonReactStatics(WithTheme, Component);\n}\n\nvar hasOwn = {}.hasOwnProperty;\n\nvar typePropName = '__EMOTION_TYPE_PLEASE_DO_NOT_USE__';\nvar createEmotionProps = function createEmotionProps(type\n/*: React.ElementType */\n, props\n/*: Object */\n) {\n\n var newProps\n /*: any */\n = {};\n\n for (var key in props) {\n if (hasOwn.call(props, key)) {\n newProps[key] = props[key];\n }\n }\n\n newProps[typePropName] = type; // Runtime labeling is an opt-in feature because:\n\n return newProps;\n};\n\nvar Insertion = function Insertion(_ref) {\n var cache = _ref.cache,\n serialized = _ref.serialized,\n isStringTag = _ref.isStringTag;\n registerStyles(cache, serialized, isStringTag);\n useInsertionEffectAlwaysWithSyncFallback(function () {\n return insertStyles(cache, serialized, isStringTag);\n });\n\n return null;\n};\n\nvar Emotion = /* #__PURE__ */withEmotionCache(\n/* */\nfunction (props, cache, ref) {\n var cssProp = props.css; // so that using `css` from `emotion` and passing the result to the css prop works\n // not passing the registered cache to serializeStyles because it would\n // make certain babel optimisations not possible\n\n if (typeof cssProp === 'string' && cache.registered[cssProp] !== undefined) {\n cssProp = cache.registered[cssProp];\n }\n\n var WrappedComponent = props[typePropName];\n var registeredStyles = [cssProp];\n var className = '';\n\n if (typeof props.className === 'string') {\n className = getRegisteredStyles(cache.registered, registeredStyles, props.className);\n } else if (props.className != null) {\n className = props.className + \" \";\n }\n\n var serialized = serializeStyles(registeredStyles, undefined, React.useContext(ThemeContext));\n\n className += cache.key + \"-\" + serialized.name;\n var newProps = {};\n\n for (var key in props) {\n if (hasOwn.call(props, key) && key !== 'css' && key !== typePropName && (!isDevelopment )) {\n newProps[key] = props[key];\n }\n }\n\n newProps.className = className;\n\n if (ref) {\n newProps.ref = ref;\n }\n\n return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Insertion, {\n cache: cache,\n serialized: serialized,\n isStringTag: typeof WrappedComponent === 'string'\n }), /*#__PURE__*/React.createElement(WrappedComponent, newProps));\n});\n\nvar Emotion$1 = Emotion;\n\nexport { CacheProvider as C, Emotion$1 as E, ThemeContext as T, __unsafe_useEmotionCache as _, ThemeProvider as a, withTheme as b, createEmotionProps as c, hasOwn as h, isDevelopment as i, useTheme as u, withEmotionCache as w };\n","import { h as hasOwn, E as Emotion, c as createEmotionProps, w as withEmotionCache, T as ThemeContext, i as isDevelopment } from './emotion-element-5486c51c.browser.esm.js';\nexport { C as CacheProvider, T as ThemeContext, a as ThemeProvider, _ as __unsafe_useEmotionCache, u as useTheme, w as withEmotionCache, b as withTheme } from './emotion-element-5486c51c.browser.esm.js';\nimport * as React from 'react';\nimport { insertStyles, registerStyles, getRegisteredStyles } from '@emotion/utils';\nimport { useInsertionEffectWithLayoutFallback, useInsertionEffectAlwaysWithSyncFallback } from '@emotion/use-insertion-effect-with-fallbacks';\nimport { serializeStyles } from '@emotion/serialize';\nimport '@emotion/cache';\nimport '@babel/runtime/helpers/extends';\nimport '@emotion/weak-memoize';\nimport '../_isolated-hnrs/dist/emotion-react-_isolated-hnrs.browser.esm.js';\nimport 'hoist-non-react-statics';\n\nvar jsx\n/*: typeof React.createElement */\n= function jsx\n/*: typeof React.createElement */\n(type\n/*: React.ElementType */\n, props\n/*: Object */\n) {\n var args = arguments;\n\n if (props == null || !hasOwn.call(props, 'css')) {\n return React.createElement.apply(undefined, args);\n }\n\n var argsLength = args.length;\n var createElementArgArray = new Array(argsLength);\n createElementArgArray[0] = Emotion;\n createElementArgArray[1] = createEmotionProps(type, props);\n\n for (var i = 2; i < argsLength; i++) {\n createElementArgArray[i] = args[i];\n }\n\n return React.createElement.apply(null, createElementArgArray);\n};\n\n// initial render from browser, insertBefore context.sheet.tags[0] or if a style hasn't been inserted there yet, appendChild\n// initial client-side render from SSR, use place of hydrating tag\n\nvar Global\n/*: React.AbstractComponent<\nGlobalProps\n> */\n= /* #__PURE__ */withEmotionCache(function (props\n/*: GlobalProps */\n, cache) {\n\n var styles = props.styles;\n var serialized = serializeStyles([styles], undefined, React.useContext(ThemeContext));\n // but it is based on a constant that will never change at runtime\n // it's effectively like having two implementations and switching them out\n // so it's not actually breaking anything\n\n\n var sheetRef = React.useRef();\n useInsertionEffectWithLayoutFallback(function () {\n var key = cache.key + \"-global\"; // use case of https://github.com/emotion-js/emotion/issues/2675\n\n var sheet = new cache.sheet.constructor({\n key: key,\n nonce: cache.sheet.nonce,\n container: cache.sheet.container,\n speedy: cache.sheet.isSpeedy\n });\n var rehydrating = false;\n var node\n /*: HTMLStyleElement | null*/\n = document.querySelector(\"style[data-emotion=\\\"\" + key + \" \" + serialized.name + \"\\\"]\");\n\n if (cache.sheet.tags.length) {\n sheet.before = cache.sheet.tags[0];\n }\n\n if (node !== null) {\n rehydrating = true; // clear the hash so this node won't be recognizable as rehydratable by other s\n\n node.setAttribute('data-emotion', key);\n sheet.hydrate([node]);\n }\n\n sheetRef.current = [sheet, rehydrating];\n return function () {\n sheet.flush();\n };\n }, [cache]);\n useInsertionEffectWithLayoutFallback(function () {\n var sheetRefCurrent = sheetRef.current;\n var sheet = sheetRefCurrent[0],\n rehydrating = sheetRefCurrent[1];\n\n if (rehydrating) {\n sheetRefCurrent[1] = false;\n return;\n }\n\n if (serialized.next !== undefined) {\n // insert keyframes\n insertStyles(cache, serialized.next, true);\n }\n\n if (sheet.tags.length) {\n // if this doesn't exist then it will be null so the style element will be appended\n var element = sheet.tags[sheet.tags.length - 1].nextElementSibling;\n sheet.before = element;\n sheet.flush();\n }\n\n cache.insert(\"\", serialized, sheet, false);\n }, [cache, serialized.name]);\n return null;\n});\n\n/* import type { Interpolation, SerializedStyles } from '@emotion/utils' */\n\nfunction css()\n/*: SerializedStyles */\n{\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return serializeStyles(args);\n}\n\n/*\ntype Keyframes = {|\n name: string,\n styles: string,\n anim: 1,\n toString: () => string\n|} & string\n*/\n\nvar keyframes = function\n /*: Keyframes */\nkeyframes() {\n var insertable = css.apply(void 0, arguments);\n var name = \"animation-\" + insertable.name;\n return {\n name: name,\n styles: \"@keyframes \" + name + \"{\" + insertable.styles + \"}\",\n anim: 1,\n toString: function toString() {\n return \"_EMO_\" + this.name + \"_\" + this.styles + \"_EMO_\";\n }\n };\n};\n\n/*\ntype ClassNameArg =\n | string\n | boolean\n | { [key: string]: boolean }\n | Array\n | null\n | void\n*/\n\nvar classnames = function\n /*: string */\nclassnames(args\n/*: Array */\n) {\n var len = args.length;\n var i = 0;\n var cls = '';\n\n for (; i < len; i++) {\n var arg = args[i];\n if (arg == null) continue;\n var toAdd = void 0;\n\n switch (typeof arg) {\n case 'boolean':\n break;\n\n case 'object':\n {\n if (Array.isArray(arg)) {\n toAdd = classnames(arg);\n } else {\n\n toAdd = '';\n\n for (var k in arg) {\n if (arg[k] && k) {\n toAdd && (toAdd += ' ');\n toAdd += k;\n }\n }\n }\n\n break;\n }\n\n default:\n {\n toAdd = arg;\n }\n }\n\n if (toAdd) {\n cls && (cls += ' ');\n cls += toAdd;\n }\n }\n\n return cls;\n};\n\nfunction merge(registered\n/*: Object */\n, css\n/*: (...args: Array) => string */\n, className\n/*: string */\n) {\n var registeredStyles = [];\n var rawClassName = getRegisteredStyles(registered, registeredStyles, className);\n\n if (registeredStyles.length < 2) {\n return className;\n }\n\n return rawClassName + css(registeredStyles);\n}\n\nvar Insertion = function Insertion(_ref) {\n var cache = _ref.cache,\n serializedArr = _ref.serializedArr;\n useInsertionEffectAlwaysWithSyncFallback(function () {\n\n for (var i = 0; i < serializedArr.length; i++) {\n insertStyles(cache, serializedArr[i], false);\n }\n });\n\n return null;\n};\n/*\ntype Props = {\n children: ({\n css: (...args: any) => string,\n cx: (...args: Array) => string,\n theme: Object\n }) => React.Node\n} */\n\n\nvar ClassNames\n/*: React.AbstractComponent*/\n= /* #__PURE__ */withEmotionCache(function (props, cache) {\n var hasRendered = false;\n var serializedArr = [];\n\n var css = function css() {\n if (hasRendered && isDevelopment) {\n throw new Error('css can only be used during render');\n }\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n var serialized = serializeStyles(args, cache.registered);\n serializedArr.push(serialized); // registration has to happen here as the result of this might get consumed by `cx`\n\n registerStyles(cache, serialized, false);\n return cache.key + \"-\" + serialized.name;\n };\n\n var cx = function cx() {\n if (hasRendered && isDevelopment) {\n throw new Error('cx can only be used during render');\n }\n\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n return merge(cache.registered, css, classnames(args));\n };\n\n var content = {\n css: css,\n cx: cx,\n theme: React.useContext(ThemeContext)\n };\n var ele = props.children(content);\n hasRendered = true;\n return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Insertion, {\n cache: cache,\n serializedArr: serializedArr\n }), ele);\n});\n\nexport { ClassNames, Global, jsx as createElement, css, jsx, keyframes };\n","var unitlessKeys = {\n animationIterationCount: 1,\n aspectRatio: 1,\n borderImageOutset: 1,\n borderImageSlice: 1,\n borderImageWidth: 1,\n boxFlex: 1,\n boxFlexGroup: 1,\n boxOrdinalGroup: 1,\n columnCount: 1,\n columns: 1,\n flex: 1,\n flexGrow: 1,\n flexPositive: 1,\n flexShrink: 1,\n flexNegative: 1,\n flexOrder: 1,\n gridRow: 1,\n gridRowEnd: 1,\n gridRowSpan: 1,\n gridRowStart: 1,\n gridColumn: 1,\n gridColumnEnd: 1,\n gridColumnSpan: 1,\n gridColumnStart: 1,\n msGridRow: 1,\n msGridRowSpan: 1,\n msGridColumn: 1,\n msGridColumnSpan: 1,\n fontWeight: 1,\n lineHeight: 1,\n opacity: 1,\n order: 1,\n orphans: 1,\n tabSize: 1,\n widows: 1,\n zIndex: 1,\n zoom: 1,\n WebkitLineClamp: 1,\n // SVG-related properties\n fillOpacity: 1,\n floodOpacity: 1,\n stopOpacity: 1,\n strokeDasharray: 1,\n strokeDashoffset: 1,\n strokeMiterlimit: 1,\n strokeOpacity: 1,\n strokeWidth: 1\n};\n\nexport { unitlessKeys as default };\n","import hashString from '@emotion/hash';\nimport unitless from '@emotion/unitless';\nimport memoize from '@emotion/memoize';\n\nvar isDevelopment = false;\n\nvar hyphenateRegex = /[A-Z]|^ms/g;\nvar animationRegex = /_EMO_([^_]+?)_([^]*?)_EMO_/g;\n\nvar isCustomProperty = function isCustomProperty(property) {\n return property.charCodeAt(1) === 45;\n};\n\nvar isProcessableValue = function isProcessableValue(value) {\n return value != null && typeof value !== 'boolean';\n};\n\nvar processStyleName = /* #__PURE__ */memoize(function (styleName) {\n return isCustomProperty(styleName) ? styleName : styleName.replace(hyphenateRegex, '-$&').toLowerCase();\n});\n\nvar processStyleValue = function processStyleValue(key, value) {\n switch (key) {\n case 'animation':\n case 'animationName':\n {\n if (typeof value === 'string') {\n return value.replace(animationRegex, function (match, p1, p2) {\n cursor = {\n name: p1,\n styles: p2,\n next: cursor\n };\n return p1;\n });\n }\n }\n }\n\n if (unitless[key] !== 1 && !isCustomProperty(key) && typeof value === 'number' && value !== 0) {\n return value + 'px';\n }\n\n return value;\n};\n\nvar noComponentSelectorMessage = 'Component selectors can only be used in conjunction with ' + '@emotion/babel-plugin, the swc Emotion plugin, or another Emotion-aware ' + 'compiler transform.';\n\nfunction handleInterpolation(mergedProps, registered, interpolation) {\n if (interpolation == null) {\n return '';\n }\n\n var componentSelector = interpolation;\n\n if (componentSelector.__emotion_styles !== undefined) {\n\n return componentSelector;\n }\n\n switch (typeof interpolation) {\n case 'boolean':\n {\n return '';\n }\n\n case 'object':\n {\n var keyframes = interpolation;\n\n if (keyframes.anim === 1) {\n cursor = {\n name: keyframes.name,\n styles: keyframes.styles,\n next: cursor\n };\n return keyframes.name;\n }\n\n var serializedStyles = interpolation;\n\n if (serializedStyles.styles !== undefined) {\n var next = serializedStyles.next;\n\n if (next !== undefined) {\n // not the most efficient thing ever but this is a pretty rare case\n // and there will be very few iterations of this generally\n while (next !== undefined) {\n cursor = {\n name: next.name,\n styles: next.styles,\n next: cursor\n };\n next = next.next;\n }\n }\n\n var styles = serializedStyles.styles + \";\";\n\n return styles;\n }\n\n return createStringFromObject(mergedProps, registered, interpolation);\n }\n\n case 'function':\n {\n if (mergedProps !== undefined) {\n var previousCursor = cursor;\n var result = interpolation(mergedProps);\n cursor = previousCursor;\n return handleInterpolation(mergedProps, registered, result);\n }\n\n break;\n }\n } // finalize string values (regular strings and functions interpolated into css calls)\n\n\n var asString = interpolation;\n\n if (registered == null) {\n return asString;\n }\n\n var cached = registered[asString];\n return cached !== undefined ? cached : asString;\n}\n\nfunction createStringFromObject(mergedProps, registered, obj) {\n var string = '';\n\n if (Array.isArray(obj)) {\n for (var i = 0; i < obj.length; i++) {\n string += handleInterpolation(mergedProps, registered, obj[i]) + \";\";\n }\n } else {\n for (var key in obj) {\n var value = obj[key];\n\n if (typeof value !== 'object') {\n var asString = value;\n\n if (registered != null && registered[asString] !== undefined) {\n string += key + \"{\" + registered[asString] + \"}\";\n } else if (isProcessableValue(asString)) {\n string += processStyleName(key) + \":\" + processStyleValue(key, asString) + \";\";\n }\n } else {\n if (key === 'NO_COMPONENT_SELECTOR' && isDevelopment) {\n throw new Error(noComponentSelectorMessage);\n }\n\n if (Array.isArray(value) && typeof value[0] === 'string' && (registered == null || registered[value[0]] === undefined)) {\n for (var _i = 0; _i < value.length; _i++) {\n if (isProcessableValue(value[_i])) {\n string += processStyleName(key) + \":\" + processStyleValue(key, value[_i]) + \";\";\n }\n }\n } else {\n var interpolated = handleInterpolation(mergedProps, registered, value);\n\n switch (key) {\n case 'animation':\n case 'animationName':\n {\n string += processStyleName(key) + \":\" + interpolated + \";\";\n break;\n }\n\n default:\n {\n\n string += key + \"{\" + interpolated + \"}\";\n }\n }\n }\n }\n }\n }\n\n return string;\n}\n\nvar labelPattern = /label:\\s*([^\\s;\\n{]+)\\s*(;|$)/g;\n// keyframes are stored on the SerializedStyles object as a linked list\n\n\nvar cursor;\nfunction serializeStyles(args, registered, mergedProps) {\n if (args.length === 1 && typeof args[0] === 'object' && args[0] !== null && args[0].styles !== undefined) {\n return args[0];\n }\n\n var stringMode = true;\n var styles = '';\n cursor = undefined;\n var strings = args[0];\n\n if (strings == null || strings.raw === undefined) {\n stringMode = false;\n styles += handleInterpolation(mergedProps, registered, strings);\n } else {\n var asTemplateStringsArr = strings;\n\n styles += asTemplateStringsArr[0];\n } // we start at 1 since we've already handled the first arg\n\n\n for (var i = 1; i < args.length; i++) {\n styles += handleInterpolation(mergedProps, registered, args[i]);\n\n if (stringMode) {\n var templateStringsArr = strings;\n\n styles += templateStringsArr[i];\n }\n }\n\n\n labelPattern.lastIndex = 0;\n var identifierName = '';\n var match; // https://esbench.com/bench/5b809c2cf2949800a0f61fb5\n\n while ((match = labelPattern.exec(styles)) !== null) {\n identifierName += '-' + match[1];\n }\n\n var name = hashString(styles) + identifierName;\n\n return {\n name: name,\n styles: styles,\n next: cursor\n };\n}\n\nexport { serializeStyles };\n","/* eslint-disable */\n// Inspired by https://github.com/garycourt/murmurhash-js\n// Ported from https://github.com/aappleby/smhasher/blob/61a0530f28277f2e850bfc39600ce61d02b518de/src/MurmurHash2.cpp#L37-L86\nfunction murmur2(str) {\n // 'm' and 'r' are mixing constants generated offline.\n // They're not really 'magic', they just happen to work well.\n // const m = 0x5bd1e995;\n // const r = 24;\n // Initialize the hash\n var h = 0; // Mix 4 bytes at a time into the hash\n\n var k,\n i = 0,\n len = str.length;\n\n for (; len >= 4; ++i, len -= 4) {\n k = str.charCodeAt(i) & 0xff | (str.charCodeAt(++i) & 0xff) << 8 | (str.charCodeAt(++i) & 0xff) << 16 | (str.charCodeAt(++i) & 0xff) << 24;\n k =\n /* Math.imul(k, m): */\n (k & 0xffff) * 0x5bd1e995 + ((k >>> 16) * 0xe995 << 16);\n k ^=\n /* k >>> r: */\n k >>> 24;\n h =\n /* Math.imul(k, m): */\n (k & 0xffff) * 0x5bd1e995 + ((k >>> 16) * 0xe995 << 16) ^\n /* Math.imul(h, m): */\n (h & 0xffff) * 0x5bd1e995 + ((h >>> 16) * 0xe995 << 16);\n } // Handle the last few bytes of the input array\n\n\n switch (len) {\n case 3:\n h ^= (str.charCodeAt(i + 2) & 0xff) << 16;\n\n case 2:\n h ^= (str.charCodeAt(i + 1) & 0xff) << 8;\n\n case 1:\n h ^= str.charCodeAt(i) & 0xff;\n h =\n /* Math.imul(h, m): */\n (h & 0xffff) * 0x5bd1e995 + ((h >>> 16) * 0xe995 << 16);\n } // Do a few final mixes of the hash to ensure the last few\n // bytes are well-incorporated.\n\n\n h ^= h >>> 13;\n h =\n /* Math.imul(h, m): */\n (h & 0xffff) * 0x5bd1e995 + ((h >>> 16) * 0xe995 << 16);\n return ((h ^ h >>> 15) >>> 0).toString(36);\n}\n\nexport { murmur2 as default };\n","import * as React from 'react';\n\nvar syncFallback = function syncFallback(create) {\n return create();\n};\n\nvar useInsertionEffect = React['useInsertion' + 'Effect'] ? React['useInsertion' + 'Effect'] : false;\nvar useInsertionEffectAlwaysWithSyncFallback = useInsertionEffect || syncFallback;\nvar useInsertionEffectWithLayoutFallback = useInsertionEffect || React.useLayoutEffect;\n\nexport { useInsertionEffectAlwaysWithSyncFallback, useInsertionEffectWithLayoutFallback };\n","var isBrowser = true;\n\nfunction getRegisteredStyles(registered, registeredStyles, classNames) {\n var rawClassName = '';\n classNames.split(' ').forEach(function (className) {\n if (registered[className] !== undefined) {\n registeredStyles.push(registered[className] + \";\");\n } else {\n rawClassName += className + \" \";\n }\n });\n return rawClassName;\n}\nvar registerStyles = function registerStyles(cache, serialized, isStringTag) {\n var className = cache.key + \"-\" + serialized.name;\n\n if ( // we only need to add the styles to the registered cache if the\n // class name could be used further down\n // the tree but if it's a string tag, we know it won't\n // so we don't have to add it to registered cache.\n // this improves memory usage since we can avoid storing the whole style string\n (isStringTag === false || // we need to always store it if we're in compat mode and\n // in node since emotion-server relies on whether a style is in\n // the registered cache to know whether a style is global or not\n // also, note that this check will be dead code eliminated in the browser\n isBrowser === false ) && cache.registered[className] === undefined) {\n cache.registered[className] = serialized.styles;\n }\n};\nvar insertStyles = function insertStyles(cache, serialized, isStringTag) {\n registerStyles(cache, serialized, isStringTag);\n var className = cache.key + \"-\" + serialized.name;\n\n if (cache.inserted[serialized.name] === undefined) {\n var current = serialized;\n\n do {\n cache.insert(serialized === current ? \".\" + className : '', current, cache.sheet, true);\n\n current = current.next;\n } while (current !== undefined);\n }\n};\n\nexport { getRegisteredStyles, insertStyles, registerStyles };\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ObjectMultiplex = void 0;\nconst readable_stream_1 = require(\"readable-stream\");\nconst end_of_stream_1 = __importDefault(require(\"end-of-stream\"));\nconst once_1 = __importDefault(require(\"once\"));\nconst Substream_1 = require(\"./Substream\");\nconst IGNORE_SUBSTREAM = Symbol('IGNORE_SUBSTREAM');\nclass ObjectMultiplex extends readable_stream_1.Duplex {\n constructor(opts = {}) {\n super(Object.assign(Object.assign({}, opts), { objectMode: true }));\n this._substreams = {};\n }\n createStream(name) {\n // guard stream against destroyed already\n if (this.destroyed) {\n throw new Error(`ObjectMultiplex - parent stream for name \"${name}\" already destroyed`);\n }\n // guard stream against ended already\n if (this._readableState.ended || this._writableState.ended) {\n throw new Error(`ObjectMultiplex - parent stream for name \"${name}\" already ended`);\n }\n // validate name\n if (!name) {\n throw new Error('ObjectMultiplex - name must not be empty');\n }\n if (this._substreams[name]) {\n throw new Error(`ObjectMultiplex - Substream for name \"${name}\" already exists`);\n }\n // create substream\n const substream = new Substream_1.Substream({ parent: this, name });\n this._substreams[name] = substream;\n // listen for parent stream to end\n anyStreamEnd(this, (_error) => {\n return substream.destroy(_error || undefined);\n });\n return substream;\n }\n // ignore streams (dont display orphaned data warning)\n ignoreStream(name) {\n // validate name\n if (!name) {\n throw new Error('ObjectMultiplex - name must not be empty');\n }\n if (this._substreams[name]) {\n throw new Error(`ObjectMultiplex - Substream for name \"${name}\" already exists`);\n }\n // set\n this._substreams[name] = IGNORE_SUBSTREAM;\n }\n _read() {\n return undefined;\n }\n _write(chunk, _encoding, callback) {\n const { name, data } = chunk;\n if (!name) {\n console.warn(`ObjectMultiplex - malformed chunk without name \"${chunk}\"`);\n return callback();\n }\n // get corresponding substream\n const substream = this._substreams[name];\n if (!substream) {\n console.warn(`ObjectMultiplex - orphaned data for stream \"${name}\"`);\n return callback();\n }\n // push data into substream\n if (substream !== IGNORE_SUBSTREAM) {\n substream.push(data);\n }\n return callback();\n }\n}\nexports.ObjectMultiplex = ObjectMultiplex;\n// util\nfunction anyStreamEnd(stream, _cb) {\n const cb = once_1.default(_cb);\n end_of_stream_1.default(stream, { readable: false }, cb);\n end_of_stream_1.default(stream, { writable: false }, cb);\n}\n//# sourceMappingURL=ObjectMultiplex.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Substream = void 0;\nconst readable_stream_1 = require(\"readable-stream\");\nclass Substream extends readable_stream_1.Duplex {\n constructor({ parent, name }) {\n super({ objectMode: true });\n this._parent = parent;\n this._name = name;\n }\n /**\n * Explicitly sets read operations to a no-op.\n */\n _read() {\n return undefined;\n }\n /**\n * Called when data should be written to this writable stream.\n *\n * @param chunk - Arbitrary object to write\n * @param encoding - Encoding to use when writing payload\n * @param callback - Called when writing is complete or an error occurs\n */\n _write(chunk, _encoding, callback) {\n this._parent.push({\n name: this._name,\n data: chunk,\n });\n callback();\n }\n}\nexports.Substream = Substream;\n//# sourceMappingURL=Substream.js.map","\"use strict\";\nconst ObjectMultiplex_1 = require(\"./ObjectMultiplex\");\nmodule.exports = ObjectMultiplex_1.ObjectMultiplex;\n//# sourceMappingURL=index.js.map","var toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n return toString.call(arr) == '[object Array]';\n};\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a duplex stream is just a stream that is both readable and writable.\n// Since JS doesn't have multiple prototypal inheritance, this class\n// prototypally inherits from Readable, and then parasitically from\n// Writable.\n\n'use strict';\n\n/**/\n\nvar pna = require('process-nextick-args');\n/**/\n\n/**/\nvar objectKeys = Object.keys || function (obj) {\n var keys = [];\n for (var key in obj) {\n keys.push(key);\n }return keys;\n};\n/**/\n\nmodule.exports = Duplex;\n\n/**/\nvar util = Object.create(require('core-util-is'));\nutil.inherits = require('inherits');\n/**/\n\nvar Readable = require('./_stream_readable');\nvar Writable = require('./_stream_writable');\n\nutil.inherits(Duplex, Readable);\n\n{\n // avoid scope creep, the keys array can then be collected\n var keys = objectKeys(Writable.prototype);\n for (var v = 0; v < keys.length; v++) {\n var method = keys[v];\n if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];\n }\n}\n\nfunction Duplex(options) {\n if (!(this instanceof Duplex)) return new Duplex(options);\n\n Readable.call(this, options);\n Writable.call(this, options);\n\n if (options && options.readable === false) this.readable = false;\n\n if (options && options.writable === false) this.writable = false;\n\n this.allowHalfOpen = true;\n if (options && options.allowHalfOpen === false) this.allowHalfOpen = false;\n\n this.once('end', onend);\n}\n\nObject.defineProperty(Duplex.prototype, 'writableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function () {\n return this._writableState.highWaterMark;\n }\n});\n\n// the no-half-open enforcer\nfunction onend() {\n // if we allow half-open state, or if the writable side ended,\n // then we're ok.\n if (this.allowHalfOpen || this._writableState.ended) return;\n\n // no more data can be written.\n // But allow more writes to happen in this tick.\n pna.nextTick(onEndNT, this);\n}\n\nfunction onEndNT(self) {\n self.end();\n}\n\nObject.defineProperty(Duplex.prototype, 'destroyed', {\n get: function () {\n if (this._readableState === undefined || this._writableState === undefined) {\n return false;\n }\n return this._readableState.destroyed && this._writableState.destroyed;\n },\n set: function (value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (this._readableState === undefined || this._writableState === undefined) {\n return;\n }\n\n // backward compatibility, the user is explicitly\n // managing destroyed\n this._readableState.destroyed = value;\n this._writableState.destroyed = value;\n }\n});\n\nDuplex.prototype._destroy = function (err, cb) {\n this.push(null);\n this.end();\n\n pna.nextTick(cb, err);\n};","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a passthrough stream.\n// basically just the most minimal sort of Transform stream.\n// Every written chunk gets output as-is.\n\n'use strict';\n\nmodule.exports = PassThrough;\n\nvar Transform = require('./_stream_transform');\n\n/**/\nvar util = Object.create(require('core-util-is'));\nutil.inherits = require('inherits');\n/**/\n\nutil.inherits(PassThrough, Transform);\n\nfunction PassThrough(options) {\n if (!(this instanceof PassThrough)) return new PassThrough(options);\n\n Transform.call(this, options);\n}\n\nPassThrough.prototype._transform = function (chunk, encoding, cb) {\n cb(null, chunk);\n};","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\n/**/\n\nvar pna = require('process-nextick-args');\n/**/\n\nmodule.exports = Readable;\n\n/**/\nvar isArray = require('isarray');\n/**/\n\n/**/\nvar Duplex;\n/**/\n\nReadable.ReadableState = ReadableState;\n\n/**/\nvar EE = require('events').EventEmitter;\n\nvar EElistenerCount = function (emitter, type) {\n return emitter.listeners(type).length;\n};\n/**/\n\n/**/\nvar Stream = require('./internal/streams/stream');\n/**/\n\n/**/\n\nvar Buffer = require('safe-buffer').Buffer;\nvar OurUint8Array = (typeof global !== 'undefined' ? global : typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : {}).Uint8Array || function () {};\nfunction _uint8ArrayToBuffer(chunk) {\n return Buffer.from(chunk);\n}\nfunction _isUint8Array(obj) {\n return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n\n/**/\n\n/**/\nvar util = Object.create(require('core-util-is'));\nutil.inherits = require('inherits');\n/**/\n\n/**/\nvar debugUtil = require('util');\nvar debug = void 0;\nif (debugUtil && debugUtil.debuglog) {\n debug = debugUtil.debuglog('stream');\n} else {\n debug = function () {};\n}\n/**/\n\nvar BufferList = require('./internal/streams/BufferList');\nvar destroyImpl = require('./internal/streams/destroy');\nvar StringDecoder;\n\nutil.inherits(Readable, Stream);\n\nvar kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume'];\n\nfunction prependListener(emitter, event, fn) {\n // Sadly this is not cacheable as some libraries bundle their own\n // event emitter implementation with them.\n if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn);\n\n // This is a hack to make sure that our error handler is attached before any\n // userland ones. NEVER DO THIS. This is here only because this code needs\n // to continue to work with older versions of Node.js that do not include\n // the prependListener() method. The goal is to eventually remove this hack.\n if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];\n}\n\nfunction ReadableState(options, stream) {\n Duplex = Duplex || require('./_stream_duplex');\n\n options = options || {};\n\n // Duplex streams are both readable and writable, but share\n // the same options object.\n // However, some cases require setting options to different\n // values for the readable and the writable sides of the duplex stream.\n // These options can be provided separately as readableXXX and writableXXX.\n var isDuplex = stream instanceof Duplex;\n\n // object stream flag. Used to make read(n) ignore n and to\n // make all the buffer merging and length checks go away\n this.objectMode = !!options.objectMode;\n\n if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode;\n\n // the point at which it stops calling _read() to fill the buffer\n // Note: 0 is a valid value, means \"don't call _read preemptively ever\"\n var hwm = options.highWaterMark;\n var readableHwm = options.readableHighWaterMark;\n var defaultHwm = this.objectMode ? 16 : 16 * 1024;\n\n if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (readableHwm || readableHwm === 0)) this.highWaterMark = readableHwm;else this.highWaterMark = defaultHwm;\n\n // cast to ints.\n this.highWaterMark = Math.floor(this.highWaterMark);\n\n // A linked list is used to store data chunks instead of an array because the\n // linked list can remove elements from the beginning faster than\n // array.shift()\n this.buffer = new BufferList();\n this.length = 0;\n this.pipes = null;\n this.pipesCount = 0;\n this.flowing = null;\n this.ended = false;\n this.endEmitted = false;\n this.reading = false;\n\n // a flag to be able to tell if the event 'readable'/'data' is emitted\n // immediately, or on a later tick. We set this to true at first, because\n // any actions that shouldn't happen until \"later\" should generally also\n // not happen before the first read call.\n this.sync = true;\n\n // whenever we return null, then we set a flag to say\n // that we're awaiting a 'readable' event emission.\n this.needReadable = false;\n this.emittedReadable = false;\n this.readableListening = false;\n this.resumeScheduled = false;\n\n // has it been destroyed\n this.destroyed = false;\n\n // Crypto is kind of old and crusty. Historically, its default string\n // encoding is 'binary' so we have to make this configurable.\n // Everything else in the universe uses 'utf8', though.\n this.defaultEncoding = options.defaultEncoding || 'utf8';\n\n // the number of writers that are awaiting a drain event in .pipe()s\n this.awaitDrain = 0;\n\n // if true, a maybeReadMore has been scheduled\n this.readingMore = false;\n\n this.decoder = null;\n this.encoding = null;\n if (options.encoding) {\n if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n this.decoder = new StringDecoder(options.encoding);\n this.encoding = options.encoding;\n }\n}\n\nfunction Readable(options) {\n Duplex = Duplex || require('./_stream_duplex');\n\n if (!(this instanceof Readable)) return new Readable(options);\n\n this._readableState = new ReadableState(options, this);\n\n // legacy\n this.readable = true;\n\n if (options) {\n if (typeof options.read === 'function') this._read = options.read;\n\n if (typeof options.destroy === 'function') this._destroy = options.destroy;\n }\n\n Stream.call(this);\n}\n\nObject.defineProperty(Readable.prototype, 'destroyed', {\n get: function () {\n if (this._readableState === undefined) {\n return false;\n }\n return this._readableState.destroyed;\n },\n set: function (value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (!this._readableState) {\n return;\n }\n\n // backward compatibility, the user is explicitly\n // managing destroyed\n this._readableState.destroyed = value;\n }\n});\n\nReadable.prototype.destroy = destroyImpl.destroy;\nReadable.prototype._undestroy = destroyImpl.undestroy;\nReadable.prototype._destroy = function (err, cb) {\n this.push(null);\n cb(err);\n};\n\n// Manually shove something into the read() buffer.\n// This returns true if the highWaterMark has not been hit yet,\n// similar to how Writable.write() returns true if you should\n// write() some more.\nReadable.prototype.push = function (chunk, encoding) {\n var state = this._readableState;\n var skipChunkCheck;\n\n if (!state.objectMode) {\n if (typeof chunk === 'string') {\n encoding = encoding || state.defaultEncoding;\n if (encoding !== state.encoding) {\n chunk = Buffer.from(chunk, encoding);\n encoding = '';\n }\n skipChunkCheck = true;\n }\n } else {\n skipChunkCheck = true;\n }\n\n return readableAddChunk(this, chunk, encoding, false, skipChunkCheck);\n};\n\n// Unshift should *always* be something directly out of read()\nReadable.prototype.unshift = function (chunk) {\n return readableAddChunk(this, chunk, null, true, false);\n};\n\nfunction readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) {\n var state = stream._readableState;\n if (chunk === null) {\n state.reading = false;\n onEofChunk(stream, state);\n } else {\n var er;\n if (!skipChunkCheck) er = chunkInvalid(state, chunk);\n if (er) {\n stream.emit('error', er);\n } else if (state.objectMode || chunk && chunk.length > 0) {\n if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) {\n chunk = _uint8ArrayToBuffer(chunk);\n }\n\n if (addToFront) {\n if (state.endEmitted) stream.emit('error', new Error('stream.unshift() after end event'));else addChunk(stream, state, chunk, true);\n } else if (state.ended) {\n stream.emit('error', new Error('stream.push() after EOF'));\n } else {\n state.reading = false;\n if (state.decoder && !encoding) {\n chunk = state.decoder.write(chunk);\n if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state);\n } else {\n addChunk(stream, state, chunk, false);\n }\n }\n } else if (!addToFront) {\n state.reading = false;\n }\n }\n\n return needMoreData(state);\n}\n\nfunction addChunk(stream, state, chunk, addToFront) {\n if (state.flowing && state.length === 0 && !state.sync) {\n stream.emit('data', chunk);\n stream.read(0);\n } else {\n // update the buffer info.\n state.length += state.objectMode ? 1 : chunk.length;\n if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);\n\n if (state.needReadable) emitReadable(stream);\n }\n maybeReadMore(stream, state);\n}\n\nfunction chunkInvalid(state, chunk) {\n var er;\n if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n er = new TypeError('Invalid non-string/buffer chunk');\n }\n return er;\n}\n\n// if it's past the high water mark, we can push in some more.\n// Also, if we have no data yet, we can stand some\n// more bytes. This is to work around cases where hwm=0,\n// such as the repl. Also, if the push() triggered a\n// readable event, and the user called read(largeNumber) such that\n// needReadable was set, then we ought to push more, so that another\n// 'readable' event will be triggered.\nfunction needMoreData(state) {\n return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0);\n}\n\nReadable.prototype.isPaused = function () {\n return this._readableState.flowing === false;\n};\n\n// backwards compatibility.\nReadable.prototype.setEncoding = function (enc) {\n if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n this._readableState.decoder = new StringDecoder(enc);\n this._readableState.encoding = enc;\n return this;\n};\n\n// Don't raise the hwm > 8MB\nvar MAX_HWM = 0x800000;\nfunction computeNewHighWaterMark(n) {\n if (n >= MAX_HWM) {\n n = MAX_HWM;\n } else {\n // Get the next highest power of 2 to prevent increasing hwm excessively in\n // tiny amounts\n n--;\n n |= n >>> 1;\n n |= n >>> 2;\n n |= n >>> 4;\n n |= n >>> 8;\n n |= n >>> 16;\n n++;\n }\n return n;\n}\n\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction howMuchToRead(n, state) {\n if (n <= 0 || state.length === 0 && state.ended) return 0;\n if (state.objectMode) return 1;\n if (n !== n) {\n // Only flow one buffer at a time\n if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;\n }\n // If we're asking for more than the current hwm, then raise the hwm.\n if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);\n if (n <= state.length) return n;\n // Don't have enough\n if (!state.ended) {\n state.needReadable = true;\n return 0;\n }\n return state.length;\n}\n\n// you can override either this method, or the async _read(n) below.\nReadable.prototype.read = function (n) {\n debug('read', n);\n n = parseInt(n, 10);\n var state = this._readableState;\n var nOrig = n;\n\n if (n !== 0) state.emittedReadable = false;\n\n // if we're doing read(0) to trigger a readable event, but we\n // already have a bunch of data in the buffer, then just trigger\n // the 'readable' event and move on.\n if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) {\n debug('read: emitReadable', state.length, state.ended);\n if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);\n return null;\n }\n\n n = howMuchToRead(n, state);\n\n // if we've ended, and we're now clear, then finish it up.\n if (n === 0 && state.ended) {\n if (state.length === 0) endReadable(this);\n return null;\n }\n\n // All the actual chunk generation logic needs to be\n // *below* the call to _read. The reason is that in certain\n // synthetic stream cases, such as passthrough streams, _read\n // may be a completely synchronous operation which may change\n // the state of the read buffer, providing enough data when\n // before there was *not* enough.\n //\n // So, the steps are:\n // 1. Figure out what the state of things will be after we do\n // a read from the buffer.\n //\n // 2. If that resulting state will trigger a _read, then call _read.\n // Note that this may be asynchronous, or synchronous. Yes, it is\n // deeply ugly to write APIs this way, but that still doesn't mean\n // that the Readable class should behave improperly, as streams are\n // designed to be sync/async agnostic.\n // Take note if the _read call is sync or async (ie, if the read call\n // has returned yet), so that we know whether or not it's safe to emit\n // 'readable' etc.\n //\n // 3. Actually pull the requested chunks out of the buffer and return.\n\n // if we need a readable event, then we need to do some reading.\n var doRead = state.needReadable;\n debug('need readable', doRead);\n\n // if we currently have less than the highWaterMark, then also read some\n if (state.length === 0 || state.length - n < state.highWaterMark) {\n doRead = true;\n debug('length less than watermark', doRead);\n }\n\n // however, if we've ended, then there's no point, and if we're already\n // reading, then it's unnecessary.\n if (state.ended || state.reading) {\n doRead = false;\n debug('reading or ended', doRead);\n } else if (doRead) {\n debug('do read');\n state.reading = true;\n state.sync = true;\n // if the length is currently zero, then we *need* a readable event.\n if (state.length === 0) state.needReadable = true;\n // call internal read method\n this._read(state.highWaterMark);\n state.sync = false;\n // If _read pushed data synchronously, then `reading` will be false,\n // and we need to re-evaluate how much data we can return to the user.\n if (!state.reading) n = howMuchToRead(nOrig, state);\n }\n\n var ret;\n if (n > 0) ret = fromList(n, state);else ret = null;\n\n if (ret === null) {\n state.needReadable = true;\n n = 0;\n } else {\n state.length -= n;\n }\n\n if (state.length === 0) {\n // If we have nothing in the buffer, then we want to know\n // as soon as we *do* get something into the buffer.\n if (!state.ended) state.needReadable = true;\n\n // If we tried to read() past the EOF, then emit end on the next tick.\n if (nOrig !== n && state.ended) endReadable(this);\n }\n\n if (ret !== null) this.emit('data', ret);\n\n return ret;\n};\n\nfunction onEofChunk(stream, state) {\n if (state.ended) return;\n if (state.decoder) {\n var chunk = state.decoder.end();\n if (chunk && chunk.length) {\n state.buffer.push(chunk);\n state.length += state.objectMode ? 1 : chunk.length;\n }\n }\n state.ended = true;\n\n // emit 'readable' now to make sure it gets picked up.\n emitReadable(stream);\n}\n\n// Don't emit readable right away in sync mode, because this can trigger\n// another read() call => stack overflow. This way, it might trigger\n// a nextTick recursion warning, but that's not so bad.\nfunction emitReadable(stream) {\n var state = stream._readableState;\n state.needReadable = false;\n if (!state.emittedReadable) {\n debug('emitReadable', state.flowing);\n state.emittedReadable = true;\n if (state.sync) pna.nextTick(emitReadable_, stream);else emitReadable_(stream);\n }\n}\n\nfunction emitReadable_(stream) {\n debug('emit readable');\n stream.emit('readable');\n flow(stream);\n}\n\n// at this point, the user has presumably seen the 'readable' event,\n// and called read() to consume some data. that may have triggered\n// in turn another _read(n) call, in which case reading = true if\n// it's in progress.\n// However, if we're not ended, or reading, and the length < hwm,\n// then go ahead and try to read some more preemptively.\nfunction maybeReadMore(stream, state) {\n if (!state.readingMore) {\n state.readingMore = true;\n pna.nextTick(maybeReadMore_, stream, state);\n }\n}\n\nfunction maybeReadMore_(stream, state) {\n var len = state.length;\n while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) {\n debug('maybeReadMore read 0');\n stream.read(0);\n if (len === state.length)\n // didn't get any data, stop spinning.\n break;else len = state.length;\n }\n state.readingMore = false;\n}\n\n// abstract method. to be overridden in specific implementation classes.\n// call cb(er, data) where data is <= n in length.\n// for virtual (non-string, non-buffer) streams, \"length\" is somewhat\n// arbitrary, and perhaps not very meaningful.\nReadable.prototype._read = function (n) {\n this.emit('error', new Error('_read() is not implemented'));\n};\n\nReadable.prototype.pipe = function (dest, pipeOpts) {\n var src = this;\n var state = this._readableState;\n\n switch (state.pipesCount) {\n case 0:\n state.pipes = dest;\n break;\n case 1:\n state.pipes = [state.pipes, dest];\n break;\n default:\n state.pipes.push(dest);\n break;\n }\n state.pipesCount += 1;\n debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);\n\n var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;\n\n var endFn = doEnd ? onend : unpipe;\n if (state.endEmitted) pna.nextTick(endFn);else src.once('end', endFn);\n\n dest.on('unpipe', onunpipe);\n function onunpipe(readable, unpipeInfo) {\n debug('onunpipe');\n if (readable === src) {\n if (unpipeInfo && unpipeInfo.hasUnpiped === false) {\n unpipeInfo.hasUnpiped = true;\n cleanup();\n }\n }\n }\n\n function onend() {\n debug('onend');\n dest.end();\n }\n\n // when the dest drains, it reduces the awaitDrain counter\n // on the source. This would be more elegant with a .once()\n // handler in flow(), but adding and removing repeatedly is\n // too slow.\n var ondrain = pipeOnDrain(src);\n dest.on('drain', ondrain);\n\n var cleanedUp = false;\n function cleanup() {\n debug('cleanup');\n // cleanup event handlers once the pipe is broken\n dest.removeListener('close', onclose);\n dest.removeListener('finish', onfinish);\n dest.removeListener('drain', ondrain);\n dest.removeListener('error', onerror);\n dest.removeListener('unpipe', onunpipe);\n src.removeListener('end', onend);\n src.removeListener('end', unpipe);\n src.removeListener('data', ondata);\n\n cleanedUp = true;\n\n // if the reader is waiting for a drain event from this\n // specific writer, then it would cause it to never start\n // flowing again.\n // So, if this is awaiting a drain, then we just call it now.\n // If we don't know, then assume that we are waiting for one.\n if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();\n }\n\n // If the user pushes more data while we're writing to dest then we'll end up\n // in ondata again. However, we only want to increase awaitDrain once because\n // dest will only emit one 'drain' event for the multiple writes.\n // => Introduce a guard on increasing awaitDrain.\n var increasedAwaitDrain = false;\n src.on('data', ondata);\n function ondata(chunk) {\n debug('ondata');\n increasedAwaitDrain = false;\n var ret = dest.write(chunk);\n if (false === ret && !increasedAwaitDrain) {\n // If the user unpiped during `dest.write()`, it is possible\n // to get stuck in a permanently paused state if that write\n // also returned false.\n // => Check whether `dest` is still a piping destination.\n if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {\n debug('false write response, pause', state.awaitDrain);\n state.awaitDrain++;\n increasedAwaitDrain = true;\n }\n src.pause();\n }\n }\n\n // if the dest has an error, then stop piping into it.\n // however, don't suppress the throwing behavior for this.\n function onerror(er) {\n debug('onerror', er);\n unpipe();\n dest.removeListener('error', onerror);\n if (EElistenerCount(dest, 'error') === 0) dest.emit('error', er);\n }\n\n // Make sure our error handler is attached before userland ones.\n prependListener(dest, 'error', onerror);\n\n // Both close and finish should trigger unpipe, but only once.\n function onclose() {\n dest.removeListener('finish', onfinish);\n unpipe();\n }\n dest.once('close', onclose);\n function onfinish() {\n debug('onfinish');\n dest.removeListener('close', onclose);\n unpipe();\n }\n dest.once('finish', onfinish);\n\n function unpipe() {\n debug('unpipe');\n src.unpipe(dest);\n }\n\n // tell the dest that it's being piped to\n dest.emit('pipe', src);\n\n // start the flow if it hasn't been started already.\n if (!state.flowing) {\n debug('pipe resume');\n src.resume();\n }\n\n return dest;\n};\n\nfunction pipeOnDrain(src) {\n return function () {\n var state = src._readableState;\n debug('pipeOnDrain', state.awaitDrain);\n if (state.awaitDrain) state.awaitDrain--;\n if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {\n state.flowing = true;\n flow(src);\n }\n };\n}\n\nReadable.prototype.unpipe = function (dest) {\n var state = this._readableState;\n var unpipeInfo = { hasUnpiped: false };\n\n // if we're not piping anywhere, then do nothing.\n if (state.pipesCount === 0) return this;\n\n // just one destination. most common case.\n if (state.pipesCount === 1) {\n // passed in one, but it's not the right one.\n if (dest && dest !== state.pipes) return this;\n\n if (!dest) dest = state.pipes;\n\n // got a match.\n state.pipes = null;\n state.pipesCount = 0;\n state.flowing = false;\n if (dest) dest.emit('unpipe', this, unpipeInfo);\n return this;\n }\n\n // slow case. multiple pipe destinations.\n\n if (!dest) {\n // remove all.\n var dests = state.pipes;\n var len = state.pipesCount;\n state.pipes = null;\n state.pipesCount = 0;\n state.flowing = false;\n\n for (var i = 0; i < len; i++) {\n dests[i].emit('unpipe', this, { hasUnpiped: false });\n }return this;\n }\n\n // try to find the right one.\n var index = indexOf(state.pipes, dest);\n if (index === -1) return this;\n\n state.pipes.splice(index, 1);\n state.pipesCount -= 1;\n if (state.pipesCount === 1) state.pipes = state.pipes[0];\n\n dest.emit('unpipe', this, unpipeInfo);\n\n return this;\n};\n\n// set up data events if they are asked for\n// Ensure readable listeners eventually get something\nReadable.prototype.on = function (ev, fn) {\n var res = Stream.prototype.on.call(this, ev, fn);\n\n if (ev === 'data') {\n // Start flowing on next tick if stream isn't explicitly paused\n if (this._readableState.flowing !== false) this.resume();\n } else if (ev === 'readable') {\n var state = this._readableState;\n if (!state.endEmitted && !state.readableListening) {\n state.readableListening = state.needReadable = true;\n state.emittedReadable = false;\n if (!state.reading) {\n pna.nextTick(nReadingNextTick, this);\n } else if (state.length) {\n emitReadable(this);\n }\n }\n }\n\n return res;\n};\nReadable.prototype.addListener = Readable.prototype.on;\n\nfunction nReadingNextTick(self) {\n debug('readable nexttick read 0');\n self.read(0);\n}\n\n// pause() and resume() are remnants of the legacy readable stream API\n// If the user uses them, then switch into old mode.\nReadable.prototype.resume = function () {\n var state = this._readableState;\n if (!state.flowing) {\n debug('resume');\n state.flowing = true;\n resume(this, state);\n }\n return this;\n};\n\nfunction resume(stream, state) {\n if (!state.resumeScheduled) {\n state.resumeScheduled = true;\n pna.nextTick(resume_, stream, state);\n }\n}\n\nfunction resume_(stream, state) {\n if (!state.reading) {\n debug('resume read 0');\n stream.read(0);\n }\n\n state.resumeScheduled = false;\n state.awaitDrain = 0;\n stream.emit('resume');\n flow(stream);\n if (state.flowing && !state.reading) stream.read(0);\n}\n\nReadable.prototype.pause = function () {\n debug('call pause flowing=%j', this._readableState.flowing);\n if (false !== this._readableState.flowing) {\n debug('pause');\n this._readableState.flowing = false;\n this.emit('pause');\n }\n return this;\n};\n\nfunction flow(stream) {\n var state = stream._readableState;\n debug('flow', state.flowing);\n while (state.flowing && stream.read() !== null) {}\n}\n\n// wrap an old-style stream as the async data source.\n// This is *not* part of the readable stream interface.\n// It is an ugly unfortunate mess of history.\nReadable.prototype.wrap = function (stream) {\n var _this = this;\n\n var state = this._readableState;\n var paused = false;\n\n stream.on('end', function () {\n debug('wrapped end');\n if (state.decoder && !state.ended) {\n var chunk = state.decoder.end();\n if (chunk && chunk.length) _this.push(chunk);\n }\n\n _this.push(null);\n });\n\n stream.on('data', function (chunk) {\n debug('wrapped data');\n if (state.decoder) chunk = state.decoder.write(chunk);\n\n // don't skip over falsy values in objectMode\n if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;\n\n var ret = _this.push(chunk);\n if (!ret) {\n paused = true;\n stream.pause();\n }\n });\n\n // proxy all the other methods.\n // important when wrapping filters and duplexes.\n for (var i in stream) {\n if (this[i] === undefined && typeof stream[i] === 'function') {\n this[i] = function (method) {\n return function () {\n return stream[method].apply(stream, arguments);\n };\n }(i);\n }\n }\n\n // proxy certain important events.\n for (var n = 0; n < kProxyEvents.length; n++) {\n stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n]));\n }\n\n // when we try to consume some more bytes, simply unpause the\n // underlying stream.\n this._read = function (n) {\n debug('wrapped _read', n);\n if (paused) {\n paused = false;\n stream.resume();\n }\n };\n\n return this;\n};\n\nObject.defineProperty(Readable.prototype, 'readableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function () {\n return this._readableState.highWaterMark;\n }\n});\n\n// exposed for testing purposes only.\nReadable._fromList = fromList;\n\n// Pluck off n bytes from an array of buffers.\n// Length is the combined lengths of all the buffers in the list.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction fromList(n, state) {\n // nothing buffered\n if (state.length === 0) return null;\n\n var ret;\n if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {\n // read it all, truncate the list\n if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.head.data;else ret = state.buffer.concat(state.length);\n state.buffer.clear();\n } else {\n // read part of list\n ret = fromListPartial(n, state.buffer, state.decoder);\n }\n\n return ret;\n}\n\n// Extracts only enough buffered data to satisfy the amount requested.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction fromListPartial(n, list, hasStrings) {\n var ret;\n if (n < list.head.data.length) {\n // slice is the same for buffers and strings\n ret = list.head.data.slice(0, n);\n list.head.data = list.head.data.slice(n);\n } else if (n === list.head.data.length) {\n // first chunk is a perfect match\n ret = list.shift();\n } else {\n // result spans more than one buffer\n ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list);\n }\n return ret;\n}\n\n// Copies a specified amount of characters from the list of buffered data\n// chunks.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction copyFromBufferString(n, list) {\n var p = list.head;\n var c = 1;\n var ret = p.data;\n n -= ret.length;\n while (p = p.next) {\n var str = p.data;\n var nb = n > str.length ? str.length : n;\n if (nb === str.length) ret += str;else ret += str.slice(0, n);\n n -= nb;\n if (n === 0) {\n if (nb === str.length) {\n ++c;\n if (p.next) list.head = p.next;else list.head = list.tail = null;\n } else {\n list.head = p;\n p.data = str.slice(nb);\n }\n break;\n }\n ++c;\n }\n list.length -= c;\n return ret;\n}\n\n// Copies a specified amount of bytes from the list of buffered data chunks.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction copyFromBuffer(n, list) {\n var ret = Buffer.allocUnsafe(n);\n var p = list.head;\n var c = 1;\n p.data.copy(ret);\n n -= p.data.length;\n while (p = p.next) {\n var buf = p.data;\n var nb = n > buf.length ? buf.length : n;\n buf.copy(ret, ret.length - n, 0, nb);\n n -= nb;\n if (n === 0) {\n if (nb === buf.length) {\n ++c;\n if (p.next) list.head = p.next;else list.head = list.tail = null;\n } else {\n list.head = p;\n p.data = buf.slice(nb);\n }\n break;\n }\n ++c;\n }\n list.length -= c;\n return ret;\n}\n\nfunction endReadable(stream) {\n var state = stream._readableState;\n\n // If we get here before consuming all the bytes, then that is a\n // bug in node. Should never happen.\n if (state.length > 0) throw new Error('\"endReadable()\" called on non-empty stream');\n\n if (!state.endEmitted) {\n state.ended = true;\n pna.nextTick(endReadableNT, state, stream);\n }\n}\n\nfunction endReadableNT(state, stream) {\n // Check that we didn't get one last unshift.\n if (!state.endEmitted && state.length === 0) {\n state.endEmitted = true;\n stream.readable = false;\n stream.emit('end');\n }\n}\n\nfunction indexOf(xs, x) {\n for (var i = 0, l = xs.length; i < l; i++) {\n if (xs[i] === x) return i;\n }\n return -1;\n}","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a transform stream is a readable/writable stream where you do\n// something with the data. Sometimes it's called a \"filter\",\n// but that's not a great name for it, since that implies a thing where\n// some bits pass through, and others are simply ignored. (That would\n// be a valid example of a transform, of course.)\n//\n// While the output is causally related to the input, it's not a\n// necessarily symmetric or synchronous transformation. For example,\n// a zlib stream might take multiple plain-text writes(), and then\n// emit a single compressed chunk some time in the future.\n//\n// Here's how this works:\n//\n// The Transform stream has all the aspects of the readable and writable\n// stream classes. When you write(chunk), that calls _write(chunk,cb)\n// internally, and returns false if there's a lot of pending writes\n// buffered up. When you call read(), that calls _read(n) until\n// there's enough pending readable data buffered up.\n//\n// In a transform stream, the written data is placed in a buffer. When\n// _read(n) is called, it transforms the queued up data, calling the\n// buffered _write cb's as it consumes chunks. If consuming a single\n// written chunk would result in multiple output chunks, then the first\n// outputted bit calls the readcb, and subsequent chunks just go into\n// the read buffer, and will cause it to emit 'readable' if necessary.\n//\n// This way, back-pressure is actually determined by the reading side,\n// since _read has to be called to start processing a new chunk. However,\n// a pathological inflate type of transform can cause excessive buffering\n// here. For example, imagine a stream where every byte of input is\n// interpreted as an integer from 0-255, and then results in that many\n// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in\n// 1kb of data being output. In this case, you could write a very small\n// amount of input, and end up with a very large amount of output. In\n// such a pathological inflating mechanism, there'd be no way to tell\n// the system to stop doing the transform. A single 4MB write could\n// cause the system to run out of memory.\n//\n// However, even in such a pathological case, only a single written chunk\n// would be consumed, and then the rest would wait (un-transformed) until\n// the results of the previous transformed chunk were consumed.\n\n'use strict';\n\nmodule.exports = Transform;\n\nvar Duplex = require('./_stream_duplex');\n\n/**/\nvar util = Object.create(require('core-util-is'));\nutil.inherits = require('inherits');\n/**/\n\nutil.inherits(Transform, Duplex);\n\nfunction afterTransform(er, data) {\n var ts = this._transformState;\n ts.transforming = false;\n\n var cb = ts.writecb;\n\n if (!cb) {\n return this.emit('error', new Error('write callback called multiple times'));\n }\n\n ts.writechunk = null;\n ts.writecb = null;\n\n if (data != null) // single equals check for both `null` and `undefined`\n this.push(data);\n\n cb(er);\n\n var rs = this._readableState;\n rs.reading = false;\n if (rs.needReadable || rs.length < rs.highWaterMark) {\n this._read(rs.highWaterMark);\n }\n}\n\nfunction Transform(options) {\n if (!(this instanceof Transform)) return new Transform(options);\n\n Duplex.call(this, options);\n\n this._transformState = {\n afterTransform: afterTransform.bind(this),\n needTransform: false,\n transforming: false,\n writecb: null,\n writechunk: null,\n writeencoding: null\n };\n\n // start out asking for a readable event once data is transformed.\n this._readableState.needReadable = true;\n\n // we have implemented the _read method, and done the other things\n // that Readable wants before the first _read call, so unset the\n // sync guard flag.\n this._readableState.sync = false;\n\n if (options) {\n if (typeof options.transform === 'function') this._transform = options.transform;\n\n if (typeof options.flush === 'function') this._flush = options.flush;\n }\n\n // When the writable side finishes, then flush out anything remaining.\n this.on('prefinish', prefinish);\n}\n\nfunction prefinish() {\n var _this = this;\n\n if (typeof this._flush === 'function') {\n this._flush(function (er, data) {\n done(_this, er, data);\n });\n } else {\n done(this, null, null);\n }\n}\n\nTransform.prototype.push = function (chunk, encoding) {\n this._transformState.needTransform = false;\n return Duplex.prototype.push.call(this, chunk, encoding);\n};\n\n// This is the part where you do stuff!\n// override this function in implementation classes.\n// 'chunk' is an input chunk.\n//\n// Call `push(newChunk)` to pass along transformed output\n// to the readable side. You may call 'push' zero or more times.\n//\n// Call `cb(err)` when you are done with this chunk. If you pass\n// an error, then that'll put the hurt on the whole operation. If you\n// never call cb(), then you'll never get another chunk.\nTransform.prototype._transform = function (chunk, encoding, cb) {\n throw new Error('_transform() is not implemented');\n};\n\nTransform.prototype._write = function (chunk, encoding, cb) {\n var ts = this._transformState;\n ts.writecb = cb;\n ts.writechunk = chunk;\n ts.writeencoding = encoding;\n if (!ts.transforming) {\n var rs = this._readableState;\n if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);\n }\n};\n\n// Doesn't matter what the args are here.\n// _transform does all the work.\n// That we got here means that the readable side wants more data.\nTransform.prototype._read = function (n) {\n var ts = this._transformState;\n\n if (ts.writechunk !== null && ts.writecb && !ts.transforming) {\n ts.transforming = true;\n this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);\n } else {\n // mark that we need a transform, so that any data that comes in\n // will get processed, now that we've asked for it.\n ts.needTransform = true;\n }\n};\n\nTransform.prototype._destroy = function (err, cb) {\n var _this2 = this;\n\n Duplex.prototype._destroy.call(this, err, function (err2) {\n cb(err2);\n _this2.emit('close');\n });\n};\n\nfunction done(stream, er, data) {\n if (er) return stream.emit('error', er);\n\n if (data != null) // single equals check for both `null` and `undefined`\n stream.push(data);\n\n // if there's nothing in the write buffer, then that means\n // that nothing more will ever be provided\n if (stream._writableState.length) throw new Error('Calling transform done when ws.length != 0');\n\n if (stream._transformState.transforming) throw new Error('Calling transform done when still transforming');\n\n return stream.push(null);\n}","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// A bit simpler than readable streams.\n// Implement an async ._write(chunk, encoding, cb), and it'll handle all\n// the drain event emission and buffering.\n\n'use strict';\n\n/**/\n\nvar pna = require('process-nextick-args');\n/**/\n\nmodule.exports = Writable;\n\n/* */\nfunction WriteReq(chunk, encoding, cb) {\n this.chunk = chunk;\n this.encoding = encoding;\n this.callback = cb;\n this.next = null;\n}\n\n// It seems a linked list but it is not\n// there will be only 2 of these for each stream\nfunction CorkedRequest(state) {\n var _this = this;\n\n this.next = null;\n this.entry = null;\n this.finish = function () {\n onCorkedFinish(_this, state);\n };\n}\n/* */\n\n/**/\nvar asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : pna.nextTick;\n/**/\n\n/**/\nvar Duplex;\n/**/\n\nWritable.WritableState = WritableState;\n\n/**/\nvar util = Object.create(require('core-util-is'));\nutil.inherits = require('inherits');\n/**/\n\n/**/\nvar internalUtil = {\n deprecate: require('util-deprecate')\n};\n/**/\n\n/**/\nvar Stream = require('./internal/streams/stream');\n/**/\n\n/**/\n\nvar Buffer = require('safe-buffer').Buffer;\nvar OurUint8Array = (typeof global !== 'undefined' ? global : typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : {}).Uint8Array || function () {};\nfunction _uint8ArrayToBuffer(chunk) {\n return Buffer.from(chunk);\n}\nfunction _isUint8Array(obj) {\n return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n\n/**/\n\nvar destroyImpl = require('./internal/streams/destroy');\n\nutil.inherits(Writable, Stream);\n\nfunction nop() {}\n\nfunction WritableState(options, stream) {\n Duplex = Duplex || require('./_stream_duplex');\n\n options = options || {};\n\n // Duplex streams are both readable and writable, but share\n // the same options object.\n // However, some cases require setting options to different\n // values for the readable and the writable sides of the duplex stream.\n // These options can be provided separately as readableXXX and writableXXX.\n var isDuplex = stream instanceof Duplex;\n\n // object stream flag to indicate whether or not this stream\n // contains buffers or objects.\n this.objectMode = !!options.objectMode;\n\n if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode;\n\n // the point at which write() starts returning false\n // Note: 0 is a valid value, means that we always return false if\n // the entire buffer is not flushed immediately on write()\n var hwm = options.highWaterMark;\n var writableHwm = options.writableHighWaterMark;\n var defaultHwm = this.objectMode ? 16 : 16 * 1024;\n\n if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (writableHwm || writableHwm === 0)) this.highWaterMark = writableHwm;else this.highWaterMark = defaultHwm;\n\n // cast to ints.\n this.highWaterMark = Math.floor(this.highWaterMark);\n\n // if _final has been called\n this.finalCalled = false;\n\n // drain event flag.\n this.needDrain = false;\n // at the start of calling end()\n this.ending = false;\n // when end() has been called, and returned\n this.ended = false;\n // when 'finish' is emitted\n this.finished = false;\n\n // has it been destroyed\n this.destroyed = false;\n\n // should we decode strings into buffers before passing to _write?\n // this is here so that some node-core streams can optimize string\n // handling at a lower level.\n var noDecode = options.decodeStrings === false;\n this.decodeStrings = !noDecode;\n\n // Crypto is kind of old and crusty. Historically, its default string\n // encoding is 'binary' so we have to make this configurable.\n // Everything else in the universe uses 'utf8', though.\n this.defaultEncoding = options.defaultEncoding || 'utf8';\n\n // not an actual buffer we keep track of, but a measurement\n // of how much we're waiting to get pushed to some underlying\n // socket or file.\n this.length = 0;\n\n // a flag to see when we're in the middle of a write.\n this.writing = false;\n\n // when true all writes will be buffered until .uncork() call\n this.corked = 0;\n\n // a flag to be able to tell if the onwrite cb is called immediately,\n // or on a later tick. We set this to true at first, because any\n // actions that shouldn't happen until \"later\" should generally also\n // not happen before the first write call.\n this.sync = true;\n\n // a flag to know if we're processing previously buffered items, which\n // may call the _write() callback in the same tick, so that we don't\n // end up in an overlapped onwrite situation.\n this.bufferProcessing = false;\n\n // the callback that's passed to _write(chunk,cb)\n this.onwrite = function (er) {\n onwrite(stream, er);\n };\n\n // the callback that the user supplies to write(chunk,encoding,cb)\n this.writecb = null;\n\n // the amount that is being written when _write is called.\n this.writelen = 0;\n\n this.bufferedRequest = null;\n this.lastBufferedRequest = null;\n\n // number of pending user-supplied write callbacks\n // this must be 0 before 'finish' can be emitted\n this.pendingcb = 0;\n\n // emit prefinish if the only thing we're waiting for is _write cbs\n // This is relevant for synchronous Transform streams\n this.prefinished = false;\n\n // True if the error was already emitted and should not be thrown again\n this.errorEmitted = false;\n\n // count buffered requests\n this.bufferedRequestCount = 0;\n\n // allocate the first CorkedRequest, there is always\n // one allocated and free to use, and we maintain at most two\n this.corkedRequestsFree = new CorkedRequest(this);\n}\n\nWritableState.prototype.getBuffer = function getBuffer() {\n var current = this.bufferedRequest;\n var out = [];\n while (current) {\n out.push(current);\n current = current.next;\n }\n return out;\n};\n\n(function () {\n try {\n Object.defineProperty(WritableState.prototype, 'buffer', {\n get: internalUtil.deprecate(function () {\n return this.getBuffer();\n }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003')\n });\n } catch (_) {}\n})();\n\n// Test _writableState for inheritance to account for Duplex streams,\n// whose prototype chain only points to Readable.\nvar realHasInstance;\nif (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {\n realHasInstance = Function.prototype[Symbol.hasInstance];\n Object.defineProperty(Writable, Symbol.hasInstance, {\n value: function (object) {\n if (realHasInstance.call(this, object)) return true;\n if (this !== Writable) return false;\n\n return object && object._writableState instanceof WritableState;\n }\n });\n} else {\n realHasInstance = function (object) {\n return object instanceof this;\n };\n}\n\nfunction Writable(options) {\n Duplex = Duplex || require('./_stream_duplex');\n\n // Writable ctor is applied to Duplexes, too.\n // `realHasInstance` is necessary because using plain `instanceof`\n // would return false, as no `_writableState` property is attached.\n\n // Trying to use the custom `instanceof` for Writable here will also break the\n // Node.js LazyTransform implementation, which has a non-trivial getter for\n // `_writableState` that would lead to infinite recursion.\n if (!realHasInstance.call(Writable, this) && !(this instanceof Duplex)) {\n return new Writable(options);\n }\n\n this._writableState = new WritableState(options, this);\n\n // legacy.\n this.writable = true;\n\n if (options) {\n if (typeof options.write === 'function') this._write = options.write;\n\n if (typeof options.writev === 'function') this._writev = options.writev;\n\n if (typeof options.destroy === 'function') this._destroy = options.destroy;\n\n if (typeof options.final === 'function') this._final = options.final;\n }\n\n Stream.call(this);\n}\n\n// Otherwise people can pipe Writable streams, which is just wrong.\nWritable.prototype.pipe = function () {\n this.emit('error', new Error('Cannot pipe, not readable'));\n};\n\nfunction writeAfterEnd(stream, cb) {\n var er = new Error('write after end');\n // TODO: defer error events consistently everywhere, not just the cb\n stream.emit('error', er);\n pna.nextTick(cb, er);\n}\n\n// Checks that a user-supplied chunk is valid, especially for the particular\n// mode the stream is in. Currently this means that `null` is never accepted\n// and undefined/non-string values are only allowed in object mode.\nfunction validChunk(stream, state, chunk, cb) {\n var valid = true;\n var er = false;\n\n if (chunk === null) {\n er = new TypeError('May not write null values to stream');\n } else if (typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n er = new TypeError('Invalid non-string/buffer chunk');\n }\n if (er) {\n stream.emit('error', er);\n pna.nextTick(cb, er);\n valid = false;\n }\n return valid;\n}\n\nWritable.prototype.write = function (chunk, encoding, cb) {\n var state = this._writableState;\n var ret = false;\n var isBuf = !state.objectMode && _isUint8Array(chunk);\n\n if (isBuf && !Buffer.isBuffer(chunk)) {\n chunk = _uint8ArrayToBuffer(chunk);\n }\n\n if (typeof encoding === 'function') {\n cb = encoding;\n encoding = null;\n }\n\n if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;\n\n if (typeof cb !== 'function') cb = nop;\n\n if (state.ended) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) {\n state.pendingcb++;\n ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb);\n }\n\n return ret;\n};\n\nWritable.prototype.cork = function () {\n var state = this._writableState;\n\n state.corked++;\n};\n\nWritable.prototype.uncork = function () {\n var state = this._writableState;\n\n if (state.corked) {\n state.corked--;\n\n if (!state.writing && !state.corked && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);\n }\n};\n\nWritable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {\n // node::ParseEncoding() requires lower case.\n if (typeof encoding === 'string') encoding = encoding.toLowerCase();\n if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new TypeError('Unknown encoding: ' + encoding);\n this._writableState.defaultEncoding = encoding;\n return this;\n};\n\nfunction decodeChunk(state, chunk, encoding) {\n if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {\n chunk = Buffer.from(chunk, encoding);\n }\n return chunk;\n}\n\nObject.defineProperty(Writable.prototype, 'writableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function () {\n return this._writableState.highWaterMark;\n }\n});\n\n// if we're already writing something, then just put this\n// in the queue, and wait our turn. Otherwise, call _write\n// If we return false, then we need a drain event, so set that flag.\nfunction writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {\n if (!isBuf) {\n var newChunk = decodeChunk(state, chunk, encoding);\n if (chunk !== newChunk) {\n isBuf = true;\n encoding = 'buffer';\n chunk = newChunk;\n }\n }\n var len = state.objectMode ? 1 : chunk.length;\n\n state.length += len;\n\n var ret = state.length < state.highWaterMark;\n // we must ensure that previous needDrain will not be reset to false.\n if (!ret) state.needDrain = true;\n\n if (state.writing || state.corked) {\n var last = state.lastBufferedRequest;\n state.lastBufferedRequest = {\n chunk: chunk,\n encoding: encoding,\n isBuf: isBuf,\n callback: cb,\n next: null\n };\n if (last) {\n last.next = state.lastBufferedRequest;\n } else {\n state.bufferedRequest = state.lastBufferedRequest;\n }\n state.bufferedRequestCount += 1;\n } else {\n doWrite(stream, state, false, len, chunk, encoding, cb);\n }\n\n return ret;\n}\n\nfunction doWrite(stream, state, writev, len, chunk, encoding, cb) {\n state.writelen = len;\n state.writecb = cb;\n state.writing = true;\n state.sync = true;\n if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);\n state.sync = false;\n}\n\nfunction onwriteError(stream, state, sync, er, cb) {\n --state.pendingcb;\n\n if (sync) {\n // defer the callback if we are being called synchronously\n // to avoid piling up things on the stack\n pna.nextTick(cb, er);\n // this can emit finish, and it will always happen\n // after error\n pna.nextTick(finishMaybe, stream, state);\n stream._writableState.errorEmitted = true;\n stream.emit('error', er);\n } else {\n // the caller expect this to happen before if\n // it is async\n cb(er);\n stream._writableState.errorEmitted = true;\n stream.emit('error', er);\n // this can emit finish, but finish must\n // always follow error\n finishMaybe(stream, state);\n }\n}\n\nfunction onwriteStateUpdate(state) {\n state.writing = false;\n state.writecb = null;\n state.length -= state.writelen;\n state.writelen = 0;\n}\n\nfunction onwrite(stream, er) {\n var state = stream._writableState;\n var sync = state.sync;\n var cb = state.writecb;\n\n onwriteStateUpdate(state);\n\n if (er) onwriteError(stream, state, sync, er, cb);else {\n // Check if we're actually ready to finish, but don't emit yet\n var finished = needFinish(state);\n\n if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {\n clearBuffer(stream, state);\n }\n\n if (sync) {\n /**/\n asyncWrite(afterWrite, stream, state, finished, cb);\n /**/\n } else {\n afterWrite(stream, state, finished, cb);\n }\n }\n}\n\nfunction afterWrite(stream, state, finished, cb) {\n if (!finished) onwriteDrain(stream, state);\n state.pendingcb--;\n cb();\n finishMaybe(stream, state);\n}\n\n// Must force callback to be called on nextTick, so that we don't\n// emit 'drain' before the write() consumer gets the 'false' return\n// value, and has a chance to attach a 'drain' listener.\nfunction onwriteDrain(stream, state) {\n if (state.length === 0 && state.needDrain) {\n state.needDrain = false;\n stream.emit('drain');\n }\n}\n\n// if there's something in the buffer waiting, then process it\nfunction clearBuffer(stream, state) {\n state.bufferProcessing = true;\n var entry = state.bufferedRequest;\n\n if (stream._writev && entry && entry.next) {\n // Fast case, write everything using _writev()\n var l = state.bufferedRequestCount;\n var buffer = new Array(l);\n var holder = state.corkedRequestsFree;\n holder.entry = entry;\n\n var count = 0;\n var allBuffers = true;\n while (entry) {\n buffer[count] = entry;\n if (!entry.isBuf) allBuffers = false;\n entry = entry.next;\n count += 1;\n }\n buffer.allBuffers = allBuffers;\n\n doWrite(stream, state, true, state.length, buffer, '', holder.finish);\n\n // doWrite is almost always async, defer these to save a bit of time\n // as the hot path ends with doWrite\n state.pendingcb++;\n state.lastBufferedRequest = null;\n if (holder.next) {\n state.corkedRequestsFree = holder.next;\n holder.next = null;\n } else {\n state.corkedRequestsFree = new CorkedRequest(state);\n }\n state.bufferedRequestCount = 0;\n } else {\n // Slow case, write chunks one-by-one\n while (entry) {\n var chunk = entry.chunk;\n var encoding = entry.encoding;\n var cb = entry.callback;\n var len = state.objectMode ? 1 : chunk.length;\n\n doWrite(stream, state, false, len, chunk, encoding, cb);\n entry = entry.next;\n state.bufferedRequestCount--;\n // if we didn't call the onwrite immediately, then\n // it means that we need to wait until it does.\n // also, that means that the chunk and cb are currently\n // being processed, so move the buffer counter past them.\n if (state.writing) {\n break;\n }\n }\n\n if (entry === null) state.lastBufferedRequest = null;\n }\n\n state.bufferedRequest = entry;\n state.bufferProcessing = false;\n}\n\nWritable.prototype._write = function (chunk, encoding, cb) {\n cb(new Error('_write() is not implemented'));\n};\n\nWritable.prototype._writev = null;\n\nWritable.prototype.end = function (chunk, encoding, cb) {\n var state = this._writableState;\n\n if (typeof chunk === 'function') {\n cb = chunk;\n chunk = null;\n encoding = null;\n } else if (typeof encoding === 'function') {\n cb = encoding;\n encoding = null;\n }\n\n if (chunk !== null && chunk !== undefined) this.write(chunk, encoding);\n\n // .end() fully uncorks\n if (state.corked) {\n state.corked = 1;\n this.uncork();\n }\n\n // ignore unnecessary end() calls.\n if (!state.ending) endWritable(this, state, cb);\n};\n\nfunction needFinish(state) {\n return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;\n}\nfunction callFinal(stream, state) {\n stream._final(function (err) {\n state.pendingcb--;\n if (err) {\n stream.emit('error', err);\n }\n state.prefinished = true;\n stream.emit('prefinish');\n finishMaybe(stream, state);\n });\n}\nfunction prefinish(stream, state) {\n if (!state.prefinished && !state.finalCalled) {\n if (typeof stream._final === 'function') {\n state.pendingcb++;\n state.finalCalled = true;\n pna.nextTick(callFinal, stream, state);\n } else {\n state.prefinished = true;\n stream.emit('prefinish');\n }\n }\n}\n\nfunction finishMaybe(stream, state) {\n var need = needFinish(state);\n if (need) {\n prefinish(stream, state);\n if (state.pendingcb === 0) {\n state.finished = true;\n stream.emit('finish');\n }\n }\n return need;\n}\n\nfunction endWritable(stream, state, cb) {\n state.ending = true;\n finishMaybe(stream, state);\n if (cb) {\n if (state.finished) pna.nextTick(cb);else stream.once('finish', cb);\n }\n state.ended = true;\n stream.writable = false;\n}\n\nfunction onCorkedFinish(corkReq, state, err) {\n var entry = corkReq.entry;\n corkReq.entry = null;\n while (entry) {\n var cb = entry.callback;\n state.pendingcb--;\n cb(err);\n entry = entry.next;\n }\n\n // reuse the free corkReq.\n state.corkedRequestsFree.next = corkReq;\n}\n\nObject.defineProperty(Writable.prototype, 'destroyed', {\n get: function () {\n if (this._writableState === undefined) {\n return false;\n }\n return this._writableState.destroyed;\n },\n set: function (value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (!this._writableState) {\n return;\n }\n\n // backward compatibility, the user is explicitly\n // managing destroyed\n this._writableState.destroyed = value;\n }\n});\n\nWritable.prototype.destroy = destroyImpl.destroy;\nWritable.prototype._undestroy = destroyImpl.undestroy;\nWritable.prototype._destroy = function (err, cb) {\n this.end();\n cb(err);\n};","'use strict';\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Buffer = require('safe-buffer').Buffer;\nvar util = require('util');\n\nfunction copyBuffer(src, target, offset) {\n src.copy(target, offset);\n}\n\nmodule.exports = function () {\n function BufferList() {\n _classCallCheck(this, BufferList);\n\n this.head = null;\n this.tail = null;\n this.length = 0;\n }\n\n BufferList.prototype.push = function push(v) {\n var entry = { data: v, next: null };\n if (this.length > 0) this.tail.next = entry;else this.head = entry;\n this.tail = entry;\n ++this.length;\n };\n\n BufferList.prototype.unshift = function unshift(v) {\n var entry = { data: v, next: this.head };\n if (this.length === 0) this.tail = entry;\n this.head = entry;\n ++this.length;\n };\n\n BufferList.prototype.shift = function shift() {\n if (this.length === 0) return;\n var ret = this.head.data;\n if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;\n --this.length;\n return ret;\n };\n\n BufferList.prototype.clear = function clear() {\n this.head = this.tail = null;\n this.length = 0;\n };\n\n BufferList.prototype.join = function join(s) {\n if (this.length === 0) return '';\n var p = this.head;\n var ret = '' + p.data;\n while (p = p.next) {\n ret += s + p.data;\n }return ret;\n };\n\n BufferList.prototype.concat = function concat(n) {\n if (this.length === 0) return Buffer.alloc(0);\n var ret = Buffer.allocUnsafe(n >>> 0);\n var p = this.head;\n var i = 0;\n while (p) {\n copyBuffer(p.data, ret, i);\n i += p.data.length;\n p = p.next;\n }\n return ret;\n };\n\n return BufferList;\n}();\n\nif (util && util.inspect && util.inspect.custom) {\n module.exports.prototype[util.inspect.custom] = function () {\n var obj = util.inspect({ length: this.length });\n return this.constructor.name + ' ' + obj;\n };\n}","'use strict';\n\n/**/\n\nvar pna = require('process-nextick-args');\n/**/\n\n// undocumented cb() API, needed for core, not for public API\nfunction destroy(err, cb) {\n var _this = this;\n\n var readableDestroyed = this._readableState && this._readableState.destroyed;\n var writableDestroyed = this._writableState && this._writableState.destroyed;\n\n if (readableDestroyed || writableDestroyed) {\n if (cb) {\n cb(err);\n } else if (err) {\n if (!this._writableState) {\n pna.nextTick(emitErrorNT, this, err);\n } else if (!this._writableState.errorEmitted) {\n this._writableState.errorEmitted = true;\n pna.nextTick(emitErrorNT, this, err);\n }\n }\n\n return this;\n }\n\n // we set destroyed to true before firing error callbacks in order\n // to make it re-entrance safe in case destroy() is called within callbacks\n\n if (this._readableState) {\n this._readableState.destroyed = true;\n }\n\n // if this is a duplex stream mark the writable part as destroyed as well\n if (this._writableState) {\n this._writableState.destroyed = true;\n }\n\n this._destroy(err || null, function (err) {\n if (!cb && err) {\n if (!_this._writableState) {\n pna.nextTick(emitErrorNT, _this, err);\n } else if (!_this._writableState.errorEmitted) {\n _this._writableState.errorEmitted = true;\n pna.nextTick(emitErrorNT, _this, err);\n }\n } else if (cb) {\n cb(err);\n }\n });\n\n return this;\n}\n\nfunction undestroy() {\n if (this._readableState) {\n this._readableState.destroyed = false;\n this._readableState.reading = false;\n this._readableState.ended = false;\n this._readableState.endEmitted = false;\n }\n\n if (this._writableState) {\n this._writableState.destroyed = false;\n this._writableState.ended = false;\n this._writableState.ending = false;\n this._writableState.finalCalled = false;\n this._writableState.prefinished = false;\n this._writableState.finished = false;\n this._writableState.errorEmitted = false;\n }\n}\n\nfunction emitErrorNT(self, err) {\n self.emit('error', err);\n}\n\nmodule.exports = {\n destroy: destroy,\n undestroy: undestroy\n};","module.exports = require('events').EventEmitter;\n","exports = module.exports = require('./lib/_stream_readable.js');\nexports.Stream = exports;\nexports.Readable = exports;\nexports.Writable = require('./lib/_stream_writable.js');\nexports.Duplex = require('./lib/_stream_duplex.js');\nexports.Transform = require('./lib/_stream_transform.js');\nexports.PassThrough = require('./lib/_stream_passthrough.js');\n","/* eslint-disable node/no-deprecated-api */\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\n// alternative to using Object.keys for old browsers\nfunction copyProps (src, dst) {\n for (var key in src) {\n dst[key] = src[key]\n }\n}\nif (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {\n module.exports = buffer\n} else {\n // Copy properties from require('buffer')\n copyProps(buffer, exports)\n exports.Buffer = SafeBuffer\n}\n\nfunction SafeBuffer (arg, encodingOrOffset, length) {\n return Buffer(arg, encodingOrOffset, length)\n}\n\n// Copy static methods from Buffer\ncopyProps(Buffer, SafeBuffer)\n\nSafeBuffer.from = function (arg, encodingOrOffset, length) {\n if (typeof arg === 'number') {\n throw new TypeError('Argument must not be a number')\n }\n return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.alloc = function (size, fill, encoding) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n var buf = Buffer(size)\n if (fill !== undefined) {\n if (typeof encoding === 'string') {\n buf.fill(fill, encoding)\n } else {\n buf.fill(fill)\n }\n } else {\n buf.fill(0)\n }\n return buf\n}\n\nSafeBuffer.allocUnsafe = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return Buffer(size)\n}\n\nSafeBuffer.allocUnsafeSlow = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return buffer.SlowBuffer(size)\n}\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\n/**/\n\nvar Buffer = require('safe-buffer').Buffer;\n/**/\n\nvar isEncoding = Buffer.isEncoding || function (encoding) {\n encoding = '' + encoding;\n switch (encoding && encoding.toLowerCase()) {\n case 'hex':case 'utf8':case 'utf-8':case 'ascii':case 'binary':case 'base64':case 'ucs2':case 'ucs-2':case 'utf16le':case 'utf-16le':case 'raw':\n return true;\n default:\n return false;\n }\n};\n\nfunction _normalizeEncoding(enc) {\n if (!enc) return 'utf8';\n var retried;\n while (true) {\n switch (enc) {\n case 'utf8':\n case 'utf-8':\n return 'utf8';\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return 'utf16le';\n case 'latin1':\n case 'binary':\n return 'latin1';\n case 'base64':\n case 'ascii':\n case 'hex':\n return enc;\n default:\n if (retried) return; // undefined\n enc = ('' + enc).toLowerCase();\n retried = true;\n }\n }\n};\n\n// Do not cache `Buffer.isEncoding` when checking encoding names as some\n// modules monkey-patch it to support additional encodings\nfunction normalizeEncoding(enc) {\n var nenc = _normalizeEncoding(enc);\n if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc);\n return nenc || enc;\n}\n\n// StringDecoder provides an interface for efficiently splitting a series of\n// buffers into a series of JS strings without breaking apart multi-byte\n// characters.\nexports.StringDecoder = StringDecoder;\nfunction StringDecoder(encoding) {\n this.encoding = normalizeEncoding(encoding);\n var nb;\n switch (this.encoding) {\n case 'utf16le':\n this.text = utf16Text;\n this.end = utf16End;\n nb = 4;\n break;\n case 'utf8':\n this.fillLast = utf8FillLast;\n nb = 4;\n break;\n case 'base64':\n this.text = base64Text;\n this.end = base64End;\n nb = 3;\n break;\n default:\n this.write = simpleWrite;\n this.end = simpleEnd;\n return;\n }\n this.lastNeed = 0;\n this.lastTotal = 0;\n this.lastChar = Buffer.allocUnsafe(nb);\n}\n\nStringDecoder.prototype.write = function (buf) {\n if (buf.length === 0) return '';\n var r;\n var i;\n if (this.lastNeed) {\n r = this.fillLast(buf);\n if (r === undefined) return '';\n i = this.lastNeed;\n this.lastNeed = 0;\n } else {\n i = 0;\n }\n if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i);\n return r || '';\n};\n\nStringDecoder.prototype.end = utf8End;\n\n// Returns only complete characters in a Buffer\nStringDecoder.prototype.text = utf8Text;\n\n// Attempts to complete a partial non-UTF-8 character using bytes from a Buffer\nStringDecoder.prototype.fillLast = function (buf) {\n if (this.lastNeed <= buf.length) {\n buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed);\n return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n }\n buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length);\n this.lastNeed -= buf.length;\n};\n\n// Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a\n// continuation byte. If an invalid byte is detected, -2 is returned.\nfunction utf8CheckByte(byte) {\n if (byte <= 0x7F) return 0;else if (byte >> 5 === 0x06) return 2;else if (byte >> 4 === 0x0E) return 3;else if (byte >> 3 === 0x1E) return 4;\n return byte >> 6 === 0x02 ? -1 : -2;\n}\n\n// Checks at most 3 bytes at the end of a Buffer in order to detect an\n// incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4)\n// needed to complete the UTF-8 character (if applicable) are returned.\nfunction utf8CheckIncomplete(self, buf, i) {\n var j = buf.length - 1;\n if (j < i) return 0;\n var nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) self.lastNeed = nb - 1;\n return nb;\n }\n if (--j < i || nb === -2) return 0;\n nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) self.lastNeed = nb - 2;\n return nb;\n }\n if (--j < i || nb === -2) return 0;\n nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) {\n if (nb === 2) nb = 0;else self.lastNeed = nb - 3;\n }\n return nb;\n }\n return 0;\n}\n\n// Validates as many continuation bytes for a multi-byte UTF-8 character as\n// needed or are available. If we see a non-continuation byte where we expect\n// one, we \"replace\" the validated continuation bytes we've seen so far with\n// a single UTF-8 replacement character ('\\ufffd'), to match v8's UTF-8 decoding\n// behavior. The continuation byte check is included three times in the case\n// where all of the continuation bytes for a character exist in the same buffer.\n// It is also done this way as a slight performance increase instead of using a\n// loop.\nfunction utf8CheckExtraBytes(self, buf, p) {\n if ((buf[0] & 0xC0) !== 0x80) {\n self.lastNeed = 0;\n return '\\ufffd';\n }\n if (self.lastNeed > 1 && buf.length > 1) {\n if ((buf[1] & 0xC0) !== 0x80) {\n self.lastNeed = 1;\n return '\\ufffd';\n }\n if (self.lastNeed > 2 && buf.length > 2) {\n if ((buf[2] & 0xC0) !== 0x80) {\n self.lastNeed = 2;\n return '\\ufffd';\n }\n }\n }\n}\n\n// Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer.\nfunction utf8FillLast(buf) {\n var p = this.lastTotal - this.lastNeed;\n var r = utf8CheckExtraBytes(this, buf, p);\n if (r !== undefined) return r;\n if (this.lastNeed <= buf.length) {\n buf.copy(this.lastChar, p, 0, this.lastNeed);\n return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n }\n buf.copy(this.lastChar, p, 0, buf.length);\n this.lastNeed -= buf.length;\n}\n\n// Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a\n// partial character, the character's bytes are buffered until the required\n// number of bytes are available.\nfunction utf8Text(buf, i) {\n var total = utf8CheckIncomplete(this, buf, i);\n if (!this.lastNeed) return buf.toString('utf8', i);\n this.lastTotal = total;\n var end = buf.length - (total - this.lastNeed);\n buf.copy(this.lastChar, 0, end);\n return buf.toString('utf8', i, end);\n}\n\n// For UTF-8, a replacement character is added when ending on a partial\n// character.\nfunction utf8End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) return r + '\\ufffd';\n return r;\n}\n\n// UTF-16LE typically needs two bytes per character, but even if we have an even\n// number of bytes available, we need to check if we end on a leading/high\n// surrogate. In that case, we need to wait for the next two bytes in order to\n// decode the last character properly.\nfunction utf16Text(buf, i) {\n if ((buf.length - i) % 2 === 0) {\n var r = buf.toString('utf16le', i);\n if (r) {\n var c = r.charCodeAt(r.length - 1);\n if (c >= 0xD800 && c <= 0xDBFF) {\n this.lastNeed = 2;\n this.lastTotal = 4;\n this.lastChar[0] = buf[buf.length - 2];\n this.lastChar[1] = buf[buf.length - 1];\n return r.slice(0, -1);\n }\n }\n return r;\n }\n this.lastNeed = 1;\n this.lastTotal = 2;\n this.lastChar[0] = buf[buf.length - 1];\n return buf.toString('utf16le', i, buf.length - 1);\n}\n\n// For UTF-16LE we do not explicitly append special replacement characters if we\n// end on a partial character, we simply let v8 handle that.\nfunction utf16End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) {\n var end = this.lastTotal - this.lastNeed;\n return r + this.lastChar.toString('utf16le', 0, end);\n }\n return r;\n}\n\nfunction base64Text(buf, i) {\n var n = (buf.length - i) % 3;\n if (n === 0) return buf.toString('base64', i);\n this.lastNeed = 3 - n;\n this.lastTotal = 3;\n if (n === 1) {\n this.lastChar[0] = buf[buf.length - 1];\n } else {\n this.lastChar[0] = buf[buf.length - 2];\n this.lastChar[1] = buf[buf.length - 1];\n }\n return buf.toString('base64', i, buf.length - n);\n}\n\nfunction base64End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed);\n return r;\n}\n\n// Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex)\nfunction simpleWrite(buf) {\n return buf.toString(this.encoding);\n}\n\nfunction simpleEnd(buf) {\n return buf && buf.length ? this.write(buf) : '';\n}","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst messages = {\n errors: {\n disconnected: () => 'MetaMask: Disconnected from chain. Attempting to connect.',\n permanentlyDisconnected: () => 'MetaMask: Disconnected from MetaMask background. Page reload required.',\n sendSiteMetadata: () => `MetaMask: Failed to send site metadata. This is an internal error, please report this bug.`,\n unsupportedSync: (method) => `MetaMask: The MetaMask Ethereum provider does not support synchronous methods like ${method} without a callback parameter.`,\n invalidDuplexStream: () => 'Must provide a Node.js-style duplex stream.',\n invalidRequestArgs: () => `Expected a single, non-array, object argument.`,\n invalidRequestMethod: () => `'args.method' must be a non-empty string.`,\n invalidRequestParams: () => `'args.params' must be an object or array if provided.`,\n invalidLoggerObject: () => `'args.logger' must be an object if provided.`,\n invalidLoggerMethod: (method) => `'args.logger' must include required method '${method}'.`,\n },\n info: {\n connected: (chainId) => `MetaMask: Connected to chain with ID \"${chainId}\".`,\n },\n warnings: {\n // deprecated methods\n enableDeprecation: `MetaMask: 'ethereum.enable()' is deprecated and may be removed in the future. Please use the 'eth_requestAccounts' RPC method instead.\\nFor more information, see: https://eips.ethereum.org/EIPS/eip-1102`,\n sendDeprecation: `MetaMask: 'ethereum.send(...)' is deprecated and may be removed in the future. Please use 'ethereum.sendAsync(...)' or 'ethereum.request(...)' instead.\\nFor more information, see: https://eips.ethereum.org/EIPS/eip-1193`,\n // deprecated events\n events: {\n close: `MetaMask: The event 'close' is deprecated and may be removed in the future. Please use 'disconnect' instead.\\nFor more information, see: https://eips.ethereum.org/EIPS/eip-1193#disconnect`,\n data: `MetaMask: The event 'data' is deprecated and will be removed in the future. Use 'message' instead.\\nFor more information, see: https://eips.ethereum.org/EIPS/eip-1193#message`,\n networkChanged: `MetaMask: The event 'networkChanged' is deprecated and may be removed in the future. Use 'chainChanged' instead.\\nFor more information, see: https://eips.ethereum.org/EIPS/eip-1193#chainchanged`,\n notification: `MetaMask: The event 'notification' is deprecated and may be removed in the future. Use 'message' instead.\\nFor more information, see: https://eips.ethereum.org/EIPS/eip-1193#message`,\n },\n // misc\n experimentalMethods: `MetaMask: 'ethereum._metamask' exposes non-standard, experimental methods. They may be removed or changed without warning.`,\n },\n};\nexports.default = messages;\n//# sourceMappingURL=messages.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.EMITTED_NOTIFICATIONS = exports.NOOP = exports.logStreamDisconnectWarning = exports.getRpcPromiseCallback = exports.createErrorMiddleware = void 0;\nconst eth_rpc_errors_1 = require(\"eth-rpc-errors\");\n// utility functions\n/**\n * json-rpc-engine middleware that logs RPC errors and and validates req.method.\n *\n * @param log - The logging API to use.\n * @returns json-rpc-engine middleware function\n */\nfunction createErrorMiddleware(log) {\n return (req, res, next) => {\n // json-rpc-engine will terminate the request when it notices this error\n if (typeof req.method !== 'string' || !req.method) {\n res.error = eth_rpc_errors_1.ethErrors.rpc.invalidRequest({\n message: `The request 'method' must be a non-empty string.`,\n data: req,\n });\n }\n next((done) => {\n const { error } = res;\n if (!error) {\n return done();\n }\n log.error(`MetaMask - RPC Error: ${error.message}`, error);\n return done();\n });\n };\n}\nexports.createErrorMiddleware = createErrorMiddleware;\n// resolve response.result or response, reject errors\nconst getRpcPromiseCallback = (resolve, reject, unwrapResult = true) => (error, response) => {\n if (error || response.error) {\n reject(error || response.error);\n }\n else {\n !unwrapResult || Array.isArray(response)\n ? resolve(response)\n : resolve(response.result);\n }\n};\nexports.getRpcPromiseCallback = getRpcPromiseCallback;\n/**\n * Logs a stream disconnection error. Emits an 'error' if given an\n * EventEmitter that has listeners for the 'error' event.\n *\n * @param log - The logging API to use.\n * @param remoteLabel - The label of the disconnected stream.\n * @param error - The associated error to log.\n * @param emitter - The logging API to use.\n */\nfunction logStreamDisconnectWarning(log, remoteLabel, error, emitter) {\n let warningMsg = `MetaMask: Lost connection to \"${remoteLabel}\".`;\n if (error === null || error === void 0 ? void 0 : error.stack) {\n warningMsg += `\\n${error.stack}`;\n }\n log.warn(warningMsg);\n if (emitter && emitter.listenerCount('error') > 0) {\n emitter.emit('error', warningMsg);\n }\n}\nexports.logStreamDisconnectWarning = logStreamDisconnectWarning;\nconst NOOP = () => undefined;\nexports.NOOP = NOOP;\n// constants\nexports.EMITTED_NOTIFICATIONS = [\n 'eth_subscription', // per eth-json-rpc-filters/subscriptionManager\n];\n//# sourceMappingURL=utils.js.map","import * as React from 'react';\nimport * as ReactDOM from 'react-dom';\nimport PropTypes from 'prop-types';\nimport { exactProp, HTMLElementType, unstable_useEnhancedEffect as useEnhancedEffect, unstable_useForkRef as useForkRef, unstable_setRef as setRef } from '@mui/utils';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\n\nfunction getContainer(container) {\n return typeof container === 'function' ? container() : container;\n}\n/**\n * Portals provide a first-class way to render children into a DOM node\n * that exists outside the DOM hierarchy of the parent component.\n */\n\n\nconst Portal = /*#__PURE__*/React.forwardRef(function Portal(props, ref) {\n const {\n children,\n container,\n disablePortal = false\n } = props;\n const [mountNode, setMountNode] = React.useState(null);\n const handleRef = useForkRef( /*#__PURE__*/React.isValidElement(children) ? children.ref : null, ref);\n useEnhancedEffect(() => {\n if (!disablePortal) {\n setMountNode(getContainer(container) || document.body);\n }\n }, [container, disablePortal]);\n useEnhancedEffect(() => {\n if (mountNode && !disablePortal) {\n setRef(ref, mountNode);\n return () => {\n setRef(ref, null);\n };\n }\n\n return undefined;\n }, [ref, mountNode, disablePortal]);\n\n if (disablePortal) {\n if ( /*#__PURE__*/React.isValidElement(children)) {\n return /*#__PURE__*/React.cloneElement(children, {\n ref: handleRef\n });\n }\n\n return children;\n }\n\n return /*#__PURE__*/_jsx(React.Fragment, {\n children: mountNode ? /*#__PURE__*/ReactDOM.createPortal(children, mountNode) : mountNode\n });\n});\nprocess.env.NODE_ENV !== \"production\" ? Portal.propTypes\n/* remove-proptypes */\n= {\n // ----------------------------- Warning --------------------------------\n // | These PropTypes are generated from the TypeScript type definitions |\n // | To update them edit the d.ts file and run \"yarn proptypes\" |\n // ----------------------------------------------------------------------\n\n /**\n * The children to render into the `container`.\n */\n children: PropTypes.node,\n\n /**\n * An HTML element or function that returns one.\n * The `container` will have the portal children appended to it.\n *\n * By default, it uses the body of the top-level document object,\n * so it's simply `document.body` most of the time.\n */\n container: PropTypes\n /* @typescript-to-proptypes-ignore */\n .oneOfType([HTMLElementType, PropTypes.func]),\n\n /**\n * The `children` will be under the DOM hierarchy of the parent component.\n * @default false\n */\n disablePortal: PropTypes.bool\n} : void 0;\n\nif (process.env.NODE_ENV !== 'production') {\n // eslint-disable-next-line\n Portal['propTypes' + ''] = exactProp(Portal.propTypes);\n}\n\nexport default Portal;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport isHostComponent from './isHostComponent';\n/**\n * Type of the ownerState based on the type of an element it applies to.\n * This resolves to the provided OwnerState for React components and `undefined` for host components.\n * Falls back to `OwnerState | undefined` when the exact type can't be determined in development time.\n */\n\n/**\n * Appends the ownerState object to the props, merging with the existing one if necessary.\n *\n * @param elementType Type of the element that owns the `existingProps`. If the element is a DOM node, `ownerState` is not applied.\n * @param otherProps Props of the element.\n * @param ownerState\n */\nexport default function appendOwnerState(elementType, otherProps = {}, ownerState) {\n if (isHostComponent(elementType)) {\n return otherProps;\n }\n\n return _extends({}, otherProps, {\n ownerState: _extends({}, otherProps.ownerState, ownerState)\n });\n}","/**\n * Determines if a given element is a DOM element name (i.e. not a React component).\n */\nfunction isHostComponent(element) {\n return typeof element === 'string';\n}\n\nexport default isHostComponent;","/**\n * If `componentProps` is a function, calls it with the provided `ownerState`.\n * Otherwise, just returns `componentProps`.\n */\nexport default function resolveComponentProps(componentProps, ownerState) {\n if (typeof componentProps === 'function') {\n return componentProps(ownerState);\n }\n\n return componentProps;\n}","function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e))for(t=0;t !(prop.match(/^on[A-Z]/) && typeof object[prop] === 'function')).forEach(prop => {\n result[prop] = object[prop];\n });\n return result;\n}","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport clsx from 'clsx';\nimport extractEventHandlers from './extractEventHandlers';\nimport omitEventHandlers from './omitEventHandlers';\n\n/**\n * Merges the slot component internal props (usually coming from a hook)\n * with the externally provided ones.\n *\n * The merge order is (the latter overrides the former):\n * 1. The internal props (specified as a getter function to work with get*Props hook result)\n * 2. Additional props (specified internally on an unstyled component)\n * 3. External props specified on the owner component. These should only be used on a root slot.\n * 4. External props specified in the `componentsProps.*` prop.\n * 5. The `className` prop - combined from all the above.\n * @param parameters\n * @returns\n */\nexport default function mergeSlotProps(parameters) {\n const {\n getSlotProps,\n additionalProps,\n externalSlotProps,\n externalForwardedProps,\n className\n } = parameters;\n\n if (!getSlotProps) {\n // The simpler case - getSlotProps is not defined, so no internal event handlers are defined,\n // so we can simply merge all the props without having to worry about extracting event handlers.\n const joinedClasses = clsx(externalForwardedProps == null ? void 0 : externalForwardedProps.className, externalSlotProps == null ? void 0 : externalSlotProps.className, className, additionalProps == null ? void 0 : additionalProps.className);\n\n const mergedStyle = _extends({}, additionalProps == null ? void 0 : additionalProps.style, externalForwardedProps == null ? void 0 : externalForwardedProps.style, externalSlotProps == null ? void 0 : externalSlotProps.style);\n\n const props = _extends({}, additionalProps, externalForwardedProps, externalSlotProps);\n\n if (joinedClasses.length > 0) {\n props.className = joinedClasses;\n }\n\n if (Object.keys(mergedStyle).length > 0) {\n props.style = mergedStyle;\n }\n\n return {\n props,\n internalRef: undefined\n };\n } // In this case, getSlotProps is responsible for calling the external event handlers.\n // We don't need to include them in the merged props because of this.\n\n\n const eventHandlers = extractEventHandlers(_extends({}, externalForwardedProps, externalSlotProps));\n const componentsPropsWithoutEventHandlers = omitEventHandlers(externalSlotProps);\n const otherPropsWithoutEventHandlers = omitEventHandlers(externalForwardedProps);\n const internalSlotProps = getSlotProps(eventHandlers); // The order of classes is important here.\n // Emotion (that we use in libraries consuming MUI Base) depends on this order\n // to properly override style. It requires the most important classes to be last\n // (see https://github.com/mui/material-ui/pull/33205) for the related discussion.\n\n const joinedClasses = clsx(internalSlotProps == null ? void 0 : internalSlotProps.className, additionalProps == null ? void 0 : additionalProps.className, className, externalForwardedProps == null ? void 0 : externalForwardedProps.className, externalSlotProps == null ? void 0 : externalSlotProps.className);\n\n const mergedStyle = _extends({}, internalSlotProps == null ? void 0 : internalSlotProps.style, additionalProps == null ? void 0 : additionalProps.style, externalForwardedProps == null ? void 0 : externalForwardedProps.style, externalSlotProps == null ? void 0 : externalSlotProps.style);\n\n const props = _extends({}, internalSlotProps, additionalProps, otherPropsWithoutEventHandlers, componentsPropsWithoutEventHandlers);\n\n if (joinedClasses.length > 0) {\n props.className = joinedClasses;\n }\n\n if (Object.keys(mergedStyle).length > 0) {\n props.style = mergedStyle;\n }\n\n return {\n props,\n internalRef: internalSlotProps.ref\n };\n}","/**\n * Extracts event handlers from a given object.\n * A prop is considered an event handler if it is a function and its name starts with `on`.\n *\n * @param object An object to extract event handlers from.\n * @param excludeKeys An array of keys to exclude from the returned object.\n */\nexport default function extractEventHandlers(object, excludeKeys = []) {\n if (object === undefined) {\n return {};\n }\n\n const result = {};\n Object.keys(object).filter(prop => prop.match(/^on[A-Z]/) && typeof object[prop] === 'function' && !excludeKeys.includes(prop)).forEach(prop => {\n result[prop] = object[prop];\n });\n return result;\n}","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nconst _excluded = [\"elementType\", \"externalSlotProps\", \"ownerState\"];\nimport { unstable_useForkRef as useForkRef } from '@mui/utils';\nimport appendOwnerState from './appendOwnerState';\nimport mergeSlotProps from './mergeSlotProps';\nimport resolveComponentProps from './resolveComponentProps';\n\n/**\n * Builds the props to be passed into the slot of an unstyled component.\n * It merges the internal props of the component with the ones supplied by the user, allowing to customize the behavior.\n * If the slot component is not a host component, it also merges in the `ownerState`.\n *\n * @param parameters.getSlotProps - A function that returns the props to be passed to the slot component.\n */\nexport default function useSlotProps(parameters) {\n var _parameters$additiona;\n\n const {\n elementType,\n externalSlotProps,\n ownerState\n } = parameters,\n rest = _objectWithoutPropertiesLoose(parameters, _excluded);\n\n const resolvedComponentsProps = resolveComponentProps(externalSlotProps, ownerState);\n const {\n props: mergedProps,\n internalRef\n } = mergeSlotProps(_extends({}, rest, {\n externalSlotProps: resolvedComponentsProps\n }));\n const ref = useForkRef(internalRef, useForkRef(resolvedComponentsProps == null ? void 0 : resolvedComponentsProps.ref, (_parameters$additiona = parameters.additionalProps) == null ? void 0 : _parameters$additiona.ref));\n const props = appendOwnerState(elementType, _extends({}, mergedProps, {\n ref\n }), ownerState);\n return props;\n}","\"use strict\";\n\"use client\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\nvar _jsxRuntime = require(\"react/jsx-runtime\");\nvar _default = exports.default = (0, _createSvgIcon.default)( /*#__PURE__*/(0, _jsxRuntime.jsx)(\"path\", {\n d: \"m12 4-1.41 1.41L16.17 11H4v2h12.17l-5.58 5.59L12 20l8-8z\"\n}), 'ArrowForward');","\"use strict\";\n\"use client\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\nvar _jsxRuntime = require(\"react/jsx-runtime\");\nvar _default = exports.default = (0, _createSvgIcon.default)( /*#__PURE__*/(0, _jsxRuntime.jsx)(\"path\", {\n d: \"M12 2C6.47 2 2 6.47 2 12s4.47 10 10 10 10-4.47 10-10S17.53 2 12 2m5 13.59L15.59 17 12 13.41 8.41 17 7 15.59 10.59 12 7 8.41 8.41 7 12 10.59 15.59 7 17 8.41 13.41 12z\"\n}), 'Cancel');","\"use strict\";\n\"use client\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\nvar _jsxRuntime = require(\"react/jsx-runtime\");\nvar _default = exports.default = (0, _createSvgIcon.default)( /*#__PURE__*/(0, _jsxRuntime.jsx)(\"path\", {\n d: \"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2m-2 15-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8z\"\n}), 'CheckCircle');","\"use strict\";\n\"use client\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\nvar _jsxRuntime = require(\"react/jsx-runtime\");\nvar _default = exports.default = (0, _createSvgIcon.default)( /*#__PURE__*/(0, _jsxRuntime.jsx)(\"path\", {\n d: \"M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\"\n}), 'Close');","\"use strict\";\n\"use client\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\nvar _jsxRuntime = require(\"react/jsx-runtime\");\nvar _default = exports.default = (0, _createSvgIcon.default)( /*#__PURE__*/(0, _jsxRuntime.jsx)(\"path\", {\n d: \"M11 18h2v-2h-2zm1-16C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2m0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8m0-14c-2.21 0-4 1.79-4 4h2c0-1.1.9-2 2-2s2 .9 2 2c0 2-3 1.75-3 5h2c0-2.25 3-2.5 3-5 0-2.21-1.79-4-4-4\"\n}), 'HelpOutline');","\"use strict\";\n\"use client\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\nvar _jsxRuntime = require(\"react/jsx-runtime\");\nvar _default = exports.default = (0, _createSvgIcon.default)( /*#__PURE__*/(0, _jsxRuntime.jsx)(\"path\", {\n d: \"M19 19H5V5h7V3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2v-7h-2zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3z\"\n}), 'OpenInNew');","\"use strict\";\n'use client';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"default\", {\n enumerable: true,\n get: function () {\n return _utils.createSvgIcon;\n }\n});\nvar _utils = require(\"@mui/material/utils\");","import { generateUtilityClass, generateUtilityClasses } from '@mui/base';\nexport function getAlertUtilityClass(slot) {\n return generateUtilityClass('MuiAlert', slot);\n}\nconst alertClasses = generateUtilityClasses('MuiAlert', ['root', 'action', 'icon', 'message', 'filled', 'filledSuccess', 'filledInfo', 'filledWarning', 'filledError', 'outlined', 'outlinedSuccess', 'outlinedInfo', 'outlinedWarning', 'outlinedError', 'standard', 'standardSuccess', 'standardInfo', 'standardWarning', 'standardError']);\nexport default alertClasses;","import * as React from 'react';\nimport createSvgIcon from '../../utils/createSvgIcon';\n/**\n * @ignore - internal component.\n */\n\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon( /*#__PURE__*/_jsx(\"path\", {\n d: \"M20,12A8,8 0 0,1 12,20A8,8 0 0,1 4,12A8,8 0 0,1 12,4C12.76,4 13.5,4.11 14.2, 4.31L15.77,2.74C14.61,2.26 13.34,2 12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0, 0 22,12M7.91,10.08L6.5,11.5L11,16L21,6L19.59,4.58L11,13.17L7.91,10.08Z\"\n}), 'SuccessOutlined');","import * as React from 'react';\nimport createSvgIcon from '../../utils/createSvgIcon';\n/**\n * @ignore - internal component.\n */\n\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon( /*#__PURE__*/_jsx(\"path\", {\n d: \"M12 5.99L19.53 19H4.47L12 5.99M12 2L1 21h22L12 2zm1 14h-2v2h2v-2zm0-6h-2v4h2v-4z\"\n}), 'ReportProblemOutlined');","import * as React from 'react';\nimport createSvgIcon from '../../utils/createSvgIcon';\n/**\n * @ignore - internal component.\n */\n\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon( /*#__PURE__*/_jsx(\"path\", {\n d: \"M11 15h2v2h-2zm0-8h2v6h-2zm.99-5C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 22 17.52 22 12S17.52 2 11.99 2zM12 20c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z\"\n}), 'ErrorOutline');","import * as React from 'react';\nimport createSvgIcon from '../../utils/createSvgIcon';\n/**\n * @ignore - internal component.\n */\n\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon( /*#__PURE__*/_jsx(\"path\", {\n d: \"M11,9H13V7H11M12,20C7.59,20 4,16.41 4,12C4,7.59 7.59,4 12,4C16.41,4 20,7.59 20, 12C20,16.41 16.41,20 12,20M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10, 10 0 0,0 12,2M11,17H13V11H11V17Z\"\n}), 'InfoOutlined');","import _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\n\nvar _CloseIcon;\n\nconst _excluded = [\"action\", \"children\", \"className\", \"closeText\", \"color\", \"icon\", \"iconMapping\", \"onClose\", \"role\", \"severity\", \"variant\"];\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport { unstable_composeClasses as composeClasses } from '@mui/base';\nimport { darken, lighten } from '@mui/system';\nimport styled from '../styles/styled';\nimport useThemeProps from '../styles/useThemeProps';\nimport capitalize from '../utils/capitalize';\nimport Paper from '../Paper';\nimport alertClasses, { getAlertUtilityClass } from './alertClasses';\nimport IconButton from '../IconButton';\nimport SuccessOutlinedIcon from '../internal/svg-icons/SuccessOutlined';\nimport ReportProblemOutlinedIcon from '../internal/svg-icons/ReportProblemOutlined';\nimport ErrorOutlineIcon from '../internal/svg-icons/ErrorOutline';\nimport InfoOutlinedIcon from '../internal/svg-icons/InfoOutlined';\nimport CloseIcon from '../internal/svg-icons/Close';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\n\nconst useUtilityClasses = ownerState => {\n const {\n variant,\n color,\n severity,\n classes\n } = ownerState;\n const slots = {\n root: ['root', `${variant}${capitalize(color || severity)}`, `${variant}`],\n icon: ['icon'],\n message: ['message'],\n action: ['action']\n };\n return composeClasses(slots, getAlertUtilityClass, classes);\n};\n\nconst AlertRoot = styled(Paper, {\n name: 'MuiAlert',\n slot: 'Root',\n overridesResolver: (props, styles) => {\n const {\n ownerState\n } = props;\n return [styles.root, styles[ownerState.variant], styles[`${ownerState.variant}${capitalize(ownerState.color || ownerState.severity)}`]];\n }\n})(({\n theme,\n ownerState\n}) => {\n const getColor = theme.palette.mode === 'light' ? darken : lighten;\n const getBackgroundColor = theme.palette.mode === 'light' ? lighten : darken;\n const color = ownerState.color || ownerState.severity;\n return _extends({}, theme.typography.body2, {\n backgroundColor: 'transparent',\n display: 'flex',\n padding: '6px 16px'\n }, color && ownerState.variant === 'standard' && {\n color: theme.vars ? theme.vars.palette.Alert[`${color}Color`] : getColor(theme.palette[color].light, 0.6),\n backgroundColor: theme.vars ? theme.vars.palette.Alert[`${color}StandardBg`] : getBackgroundColor(theme.palette[color].light, 0.9),\n [`& .${alertClasses.icon}`]: theme.vars ? {\n color: theme.vars.palette.Alert[`${color}IconColor`]\n } : {\n color: theme.palette.mode === 'dark' ? theme.palette[color].main : theme.palette[color].light\n }\n }, color && ownerState.variant === 'outlined' && {\n color: theme.vars ? theme.vars.palette.Alert[`${color}Color`] : getColor(theme.palette[color].light, 0.6),\n border: `1px solid ${(theme.vars || theme).palette[color].light}`,\n [`& .${alertClasses.icon}`]: theme.vars ? {\n color: theme.vars.palette.Alert[`${color}IconColor`]\n } : {\n color: theme.palette.mode === 'dark' ? theme.palette[color].main : theme.palette[color].light\n }\n }, color && ownerState.variant === 'filled' && _extends({\n fontWeight: theme.typography.fontWeightMedium\n }, theme.vars ? {\n color: theme.vars.palette.Alert[`${color}FilledColor`],\n backgroundColor: theme.vars.palette.Alert[`${color}FilledBg`]\n } : {\n backgroundColor: theme.palette.mode === 'dark' ? theme.palette[color].dark : theme.palette[color].main,\n color: theme.palette.getContrastText(theme.palette.mode === 'dark' ? theme.palette[color].dark : theme.palette[color].main)\n }));\n});\nconst AlertIcon = styled('div', {\n name: 'MuiAlert',\n slot: 'Icon',\n overridesResolver: (props, styles) => styles.icon\n})({\n marginRight: 12,\n padding: '7px 0',\n display: 'flex',\n fontSize: 22,\n opacity: 0.9\n});\nconst AlertMessage = styled('div', {\n name: 'MuiAlert',\n slot: 'Message',\n overridesResolver: (props, styles) => styles.message\n})({\n padding: '8px 0',\n minWidth: 0,\n overflow: 'auto'\n});\nconst AlertAction = styled('div', {\n name: 'MuiAlert',\n slot: 'Action',\n overridesResolver: (props, styles) => styles.action\n})({\n display: 'flex',\n alignItems: 'flex-start',\n padding: '4px 0 0 16px',\n marginLeft: 'auto',\n marginRight: -8\n});\nconst defaultIconMapping = {\n success: /*#__PURE__*/_jsx(SuccessOutlinedIcon, {\n fontSize: \"inherit\"\n }),\n warning: /*#__PURE__*/_jsx(ReportProblemOutlinedIcon, {\n fontSize: \"inherit\"\n }),\n error: /*#__PURE__*/_jsx(ErrorOutlineIcon, {\n fontSize: \"inherit\"\n }),\n info: /*#__PURE__*/_jsx(InfoOutlinedIcon, {\n fontSize: \"inherit\"\n })\n};\nconst Alert = /*#__PURE__*/React.forwardRef(function Alert(inProps, ref) {\n const props = useThemeProps({\n props: inProps,\n name: 'MuiAlert'\n });\n\n const {\n action,\n children,\n className,\n closeText = 'Close',\n color,\n icon,\n iconMapping = defaultIconMapping,\n onClose,\n role = 'alert',\n severity = 'success',\n variant = 'standard'\n } = props,\n other = _objectWithoutPropertiesLoose(props, _excluded);\n\n const ownerState = _extends({}, props, {\n color,\n severity,\n variant\n });\n\n const classes = useUtilityClasses(ownerState);\n return /*#__PURE__*/_jsxs(AlertRoot, _extends({\n role: role,\n elevation: 0,\n ownerState: ownerState,\n className: clsx(classes.root, className),\n ref: ref\n }, other, {\n children: [icon !== false ? /*#__PURE__*/_jsx(AlertIcon, {\n ownerState: ownerState,\n className: classes.icon,\n children: icon || iconMapping[severity] || defaultIconMapping[severity]\n }) : null, /*#__PURE__*/_jsx(AlertMessage, {\n ownerState: ownerState,\n className: classes.message,\n children: children\n }), action != null ? /*#__PURE__*/_jsx(AlertAction, {\n ownerState: ownerState,\n className: classes.action,\n children: action\n }) : null, action == null && onClose ? /*#__PURE__*/_jsx(AlertAction, {\n ownerState: ownerState,\n className: classes.action,\n children: /*#__PURE__*/_jsx(IconButton, {\n size: \"small\",\n \"aria-label\": closeText,\n title: closeText,\n color: \"inherit\",\n onClick: onClose,\n children: _CloseIcon || (_CloseIcon = /*#__PURE__*/_jsx(CloseIcon, {\n fontSize: \"small\"\n }))\n })\n }) : null]\n }));\n});\nprocess.env.NODE_ENV !== \"production\" ? Alert.propTypes\n/* remove-proptypes */\n= {\n // ----------------------------- Warning --------------------------------\n // | These PropTypes are generated from the TypeScript type definitions |\n // | To update them edit the d.ts file and run \"yarn proptypes\" |\n // ----------------------------------------------------------------------\n\n /**\n * The action to display. It renders after the message, at the end of the alert.\n */\n action: PropTypes.node,\n\n /**\n * The content of the component.\n */\n children: PropTypes.node,\n\n /**\n * Override or extend the styles applied to the component.\n */\n classes: PropTypes.object,\n\n /**\n * @ignore\n */\n className: PropTypes.string,\n\n /**\n * Override the default label for the *close popup* icon button.\n *\n * For localization purposes, you can use the provided [translations](/material-ui/guides/localization/).\n * @default 'Close'\n */\n closeText: PropTypes.string,\n\n /**\n * The color of the component. Unless provided, the value is taken from the `severity` prop.\n * It supports both default and custom theme colors, which can be added as shown in the\n * [palette customization guide](https://mui.com/material-ui/customization/palette/#adding-new-colors).\n */\n color: PropTypes\n /* @typescript-to-proptypes-ignore */\n .oneOfType([PropTypes.oneOf(['error', 'info', 'success', 'warning']), PropTypes.string]),\n\n /**\n * Override the icon displayed before the children.\n * Unless provided, the icon is mapped to the value of the `severity` prop.\n * Set to `false` to remove the `icon`.\n */\n icon: PropTypes.node,\n\n /**\n * The component maps the `severity` prop to a range of different icons,\n * for instance success to ``.\n * If you wish to change this mapping, you can provide your own.\n * Alternatively, you can use the `icon` prop to override the icon displayed.\n */\n iconMapping: PropTypes.shape({\n error: PropTypes.node,\n info: PropTypes.node,\n success: PropTypes.node,\n warning: PropTypes.node\n }),\n\n /**\n * Callback fired when the component requests to be closed.\n * When provided and no `action` prop is set, a close icon button is displayed that triggers the callback when clicked.\n * @param {React.SyntheticEvent} event The event source of the callback.\n */\n onClose: PropTypes.func,\n\n /**\n * The ARIA role attribute of the element.\n * @default 'alert'\n */\n role: PropTypes.string,\n\n /**\n * The severity of the alert. This defines the color and icon used.\n * @default 'success'\n */\n severity: PropTypes.oneOf(['error', 'info', 'success', 'warning']),\n\n /**\n * The system prop that allows defining system overrides as well as additional CSS styles.\n */\n sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),\n\n /**\n * The variant to use.\n * @default 'standard'\n */\n variant: PropTypes\n /* @typescript-to-proptypes-ignore */\n .oneOfType([PropTypes.oneOf(['filled', 'outlined', 'standard']), PropTypes.string])\n} : void 0;\nexport default Alert;","import { generateUtilityClass, generateUtilityClasses } from '@mui/base';\nexport function getBackdropUtilityClass(slot) {\n return generateUtilityClass('MuiBackdrop', slot);\n}\nconst backdropClasses = generateUtilityClasses('MuiBackdrop', ['root', 'invisible']);\nexport default backdropClasses;","import _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nconst _excluded = [\"children\", \"component\", \"components\", \"componentsProps\", \"className\", \"invisible\", \"open\", \"transitionDuration\", \"TransitionComponent\"];\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport { unstable_composeClasses as composeClasses } from '@mui/base';\nimport styled from '../styles/styled';\nimport useThemeProps from '../styles/useThemeProps';\nimport Fade from '../Fade';\nimport { getBackdropUtilityClass } from './backdropClasses';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\n\nconst useUtilityClasses = ownerState => {\n const {\n classes,\n invisible\n } = ownerState;\n const slots = {\n root: ['root', invisible && 'invisible']\n };\n return composeClasses(slots, getBackdropUtilityClass, classes);\n};\n\nconst BackdropRoot = styled('div', {\n name: 'MuiBackdrop',\n slot: 'Root',\n overridesResolver: (props, styles) => {\n const {\n ownerState\n } = props;\n return [styles.root, ownerState.invisible && styles.invisible];\n }\n})(({\n ownerState\n}) => _extends({\n position: 'fixed',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n right: 0,\n bottom: 0,\n top: 0,\n left: 0,\n backgroundColor: 'rgba(0, 0, 0, 0.5)',\n WebkitTapHighlightColor: 'transparent'\n}, ownerState.invisible && {\n backgroundColor: 'transparent'\n}));\nconst Backdrop = /*#__PURE__*/React.forwardRef(function Backdrop(inProps, ref) {\n var _components$Root, _componentsProps$root;\n\n const props = useThemeProps({\n props: inProps,\n name: 'MuiBackdrop'\n });\n\n const {\n children,\n component = 'div',\n components = {},\n componentsProps = {},\n className,\n invisible = false,\n open,\n transitionDuration,\n // eslint-disable-next-line react/prop-types\n TransitionComponent = Fade\n } = props,\n other = _objectWithoutPropertiesLoose(props, _excluded);\n\n const ownerState = _extends({}, props, {\n component,\n invisible\n });\n\n const classes = useUtilityClasses(ownerState);\n return /*#__PURE__*/_jsx(TransitionComponent, _extends({\n in: open,\n timeout: transitionDuration\n }, other, {\n children: /*#__PURE__*/_jsx(BackdropRoot, {\n \"aria-hidden\": true,\n as: (_components$Root = components.Root) != null ? _components$Root : component,\n className: clsx(classes.root, className),\n ownerState: _extends({}, ownerState, (_componentsProps$root = componentsProps.root) == null ? void 0 : _componentsProps$root.ownerState),\n classes: classes,\n ref: ref,\n children: children\n })\n }));\n});\nprocess.env.NODE_ENV !== \"production\" ? Backdrop.propTypes\n/* remove-proptypes */\n= {\n // ----------------------------- Warning --------------------------------\n // | These PropTypes are generated from the TypeScript type definitions |\n // | To update them edit the d.ts file and run \"yarn proptypes\" |\n // ----------------------------------------------------------------------\n\n /**\n * The content of the component.\n */\n children: PropTypes.node,\n\n /**\n * Override or extend the styles applied to the component.\n */\n classes: PropTypes.object,\n\n /**\n * @ignore\n */\n className: PropTypes.string,\n\n /**\n * The component used for the root node.\n * Either a string to use a HTML element or a component.\n */\n component: PropTypes.elementType,\n\n /**\n * The components used for each slot inside the Backdrop.\n * Either a string to use a HTML element or a component.\n * @default {}\n */\n components: PropTypes.shape({\n Root: PropTypes.elementType\n }),\n\n /**\n * The props used for each slot inside the Backdrop.\n * @default {}\n */\n componentsProps: PropTypes.shape({\n root: PropTypes.object\n }),\n\n /**\n * If `true`, the backdrop is invisible.\n * It can be used when rendering a popover or a custom select component.\n * @default false\n */\n invisible: PropTypes.bool,\n\n /**\n * If `true`, the component is shown.\n */\n open: PropTypes.bool.isRequired,\n\n /**\n * The system prop that allows defining system overrides as well as additional CSS styles.\n */\n sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),\n\n /**\n * The duration for the transition, in milliseconds.\n * You may specify a single timeout for all transitions, or individually with an object.\n */\n transitionDuration: PropTypes.oneOfType([PropTypes.number, PropTypes.shape({\n appear: PropTypes.number,\n enter: PropTypes.number,\n exit: PropTypes.number\n })])\n} : void 0;\nexport default Backdrop;","import { createBox } from '@mui/system';\nimport PropTypes from 'prop-types';\nimport { unstable_ClassNameGenerator as ClassNameGenerator } from '../className';\nimport { createTheme } from '../styles';\nconst defaultTheme = createTheme();\nconst Box = createBox({\n defaultTheme,\n defaultClassName: 'MuiBox-root',\n generateClassName: ClassNameGenerator.generate\n});\nprocess.env.NODE_ENV !== \"production\" ? Box.propTypes\n/* remove-proptypes */\n= {\n // ----------------------------- Warning --------------------------------\n // | These PropTypes are generated from the TypeScript type definitions |\n // | To update them edit the d.ts file and run \"yarn proptypes\" |\n // ----------------------------------------------------------------------\n\n /**\n * @ignore\n */\n children: PropTypes.node,\n\n /**\n * The component used for the root node.\n * Either a string to use a HTML element or a component.\n */\n component: PropTypes.elementType,\n\n /**\n * The system prop that allows defining system overrides as well as additional CSS styles.\n */\n sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])\n} : void 0;\nexport default Box;","import { generateUtilityClass, generateUtilityClasses } from '@mui/base';\nexport function getButtonUtilityClass(slot) {\n return generateUtilityClass('MuiButton', slot);\n}\nconst buttonClasses = generateUtilityClasses('MuiButton', ['root', 'text', 'textInherit', 'textPrimary', 'textSecondary', 'textSuccess', 'textError', 'textInfo', 'textWarning', 'outlined', 'outlinedInherit', 'outlinedPrimary', 'outlinedSecondary', 'outlinedSuccess', 'outlinedError', 'outlinedInfo', 'outlinedWarning', 'contained', 'containedInherit', 'containedPrimary', 'containedSecondary', 'containedSuccess', 'containedError', 'containedInfo', 'containedWarning', 'disableElevation', 'focusVisible', 'disabled', 'colorInherit', 'textSizeSmall', 'textSizeMedium', 'textSizeLarge', 'outlinedSizeSmall', 'outlinedSizeMedium', 'outlinedSizeLarge', 'containedSizeSmall', 'containedSizeMedium', 'containedSizeLarge', 'sizeMedium', 'sizeSmall', 'sizeLarge', 'fullWidth', 'startIcon', 'endIcon', 'iconSizeSmall', 'iconSizeMedium', 'iconSizeLarge']);\nexport default buttonClasses;","import * as React from 'react';\n\n/**\n * @ignore - internal component.\n */\nconst ButtonGroupContext = /*#__PURE__*/React.createContext({});\n\nif (process.env.NODE_ENV !== 'production') {\n ButtonGroupContext.displayName = 'ButtonGroupContext';\n}\n\nexport default ButtonGroupContext;","import _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nconst _excluded = [\"children\", \"color\", \"component\", \"className\", \"disabled\", \"disableElevation\", \"disableFocusRipple\", \"endIcon\", \"focusVisibleClassName\", \"fullWidth\", \"size\", \"startIcon\", \"type\", \"variant\"],\n _excluded2 = [\"root\"];\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport { internal_resolveProps as resolveProps } from '@mui/utils';\nimport { unstable_composeClasses as composeClasses } from '@mui/base';\nimport { alpha } from '@mui/system';\nimport styled, { rootShouldForwardProp } from '../styles/styled';\nimport useThemeProps from '../styles/useThemeProps';\nimport ButtonBase from '../ButtonBase';\nimport capitalize from '../utils/capitalize';\nimport buttonClasses, { getButtonUtilityClass } from './buttonClasses';\nimport ButtonGroupContext from '../ButtonGroup/ButtonGroupContext';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\n\nconst useUtilityClasses = ownerState => {\n const {\n color,\n disableElevation,\n fullWidth,\n size,\n variant,\n classes\n } = ownerState;\n const slots = {\n root: ['root', variant, `${variant}${capitalize(color)}`, `size${capitalize(size)}`, `${variant}Size${capitalize(size)}`, color === 'inherit' && 'colorInherit', disableElevation && 'disableElevation', fullWidth && 'fullWidth'],\n label: ['label'],\n startIcon: ['startIcon', `iconSize${capitalize(size)}`],\n endIcon: ['endIcon', `iconSize${capitalize(size)}`]\n };\n const composedClasses = composeClasses(slots, getButtonUtilityClass, classes);\n return _extends({}, classes, composedClasses);\n};\n\nconst commonIconStyles = ownerState => _extends({}, ownerState.size === 'small' && {\n '& > *:nth-of-type(1)': {\n fontSize: 18\n }\n}, ownerState.size === 'medium' && {\n '& > *:nth-of-type(1)': {\n fontSize: 20\n }\n}, ownerState.size === 'large' && {\n '& > *:nth-of-type(1)': {\n fontSize: 22\n }\n});\n\nconst ButtonRoot = styled(ButtonBase, {\n shouldForwardProp: prop => rootShouldForwardProp(prop) || prop === 'classes',\n name: 'MuiButton',\n slot: 'Root',\n overridesResolver: (props, styles) => {\n const {\n ownerState\n } = props;\n return [styles.root, styles[ownerState.variant], styles[`${ownerState.variant}${capitalize(ownerState.color)}`], styles[`size${capitalize(ownerState.size)}`], styles[`${ownerState.variant}Size${capitalize(ownerState.size)}`], ownerState.color === 'inherit' && styles.colorInherit, ownerState.disableElevation && styles.disableElevation, ownerState.fullWidth && styles.fullWidth];\n }\n})(({\n theme,\n ownerState\n}) => {\n var _theme$palette$getCon, _theme$palette;\n\n return _extends({}, theme.typography.button, {\n minWidth: 64,\n padding: '6px 16px',\n borderRadius: (theme.vars || theme).shape.borderRadius,\n transition: theme.transitions.create(['background-color', 'box-shadow', 'border-color', 'color'], {\n duration: theme.transitions.duration.short\n }),\n '&:hover': _extends({\n textDecoration: 'none',\n backgroundColor: theme.vars ? `rgba(${theme.vars.palette.text.primaryChannel} / ${theme.vars.palette.action.hoverOpacity})` : alpha(theme.palette.text.primary, theme.palette.action.hoverOpacity),\n // Reset on touch devices, it doesn't add specificity\n '@media (hover: none)': {\n backgroundColor: 'transparent'\n }\n }, ownerState.variant === 'text' && ownerState.color !== 'inherit' && {\n backgroundColor: theme.vars ? `rgba(${theme.vars.palette[ownerState.color].mainChannel} / ${theme.vars.palette.action.hoverOpacity})` : alpha(theme.palette[ownerState.color].main, theme.palette.action.hoverOpacity),\n // Reset on touch devices, it doesn't add specificity\n '@media (hover: none)': {\n backgroundColor: 'transparent'\n }\n }, ownerState.variant === 'outlined' && ownerState.color !== 'inherit' && {\n border: `1px solid ${(theme.vars || theme).palette[ownerState.color].main}`,\n backgroundColor: theme.vars ? `rgba(${theme.vars.palette[ownerState.color].mainChannel} / ${theme.vars.palette.action.hoverOpacity})` : alpha(theme.palette[ownerState.color].main, theme.palette.action.hoverOpacity),\n // Reset on touch devices, it doesn't add specificity\n '@media (hover: none)': {\n backgroundColor: 'transparent'\n }\n }, ownerState.variant === 'contained' && {\n backgroundColor: (theme.vars || theme).palette.grey.A100,\n boxShadow: (theme.vars || theme).shadows[4],\n // Reset on touch devices, it doesn't add specificity\n '@media (hover: none)': {\n boxShadow: (theme.vars || theme).shadows[2],\n backgroundColor: (theme.vars || theme).palette.grey[300]\n }\n }, ownerState.variant === 'contained' && ownerState.color !== 'inherit' && {\n backgroundColor: (theme.vars || theme).palette[ownerState.color].dark,\n // Reset on touch devices, it doesn't add specificity\n '@media (hover: none)': {\n backgroundColor: (theme.vars || theme).palette[ownerState.color].main\n }\n }),\n '&:active': _extends({}, ownerState.variant === 'contained' && {\n boxShadow: (theme.vars || theme).shadows[8]\n }),\n [`&.${buttonClasses.focusVisible}`]: _extends({}, ownerState.variant === 'contained' && {\n boxShadow: (theme.vars || theme).shadows[6]\n }),\n [`&.${buttonClasses.disabled}`]: _extends({\n color: (theme.vars || theme).palette.action.disabled\n }, ownerState.variant === 'outlined' && {\n border: `1px solid ${(theme.vars || theme).palette.action.disabledBackground}`\n }, ownerState.variant === 'outlined' && ownerState.color === 'secondary' && {\n border: `1px solid ${(theme.vars || theme).palette.action.disabled}`\n }, ownerState.variant === 'contained' && {\n color: (theme.vars || theme).palette.action.disabled,\n boxShadow: (theme.vars || theme).shadows[0],\n backgroundColor: (theme.vars || theme).palette.action.disabledBackground\n })\n }, ownerState.variant === 'text' && {\n padding: '6px 8px'\n }, ownerState.variant === 'text' && ownerState.color !== 'inherit' && {\n color: (theme.vars || theme).palette[ownerState.color].main\n }, ownerState.variant === 'outlined' && {\n padding: '5px 15px',\n border: '1px solid currentColor'\n }, ownerState.variant === 'outlined' && ownerState.color !== 'inherit' && {\n color: (theme.vars || theme).palette[ownerState.color].main,\n border: theme.vars ? `1px solid rgba(${theme.vars.palette[ownerState.color].mainChannel} / 0.5)` : `1px solid ${alpha(theme.palette[ownerState.color].main, 0.5)}`\n }, ownerState.variant === 'contained' && {\n color: theme.vars ? // this is safe because grey does not change between default light/dark mode\n theme.vars.palette.text.primary : (_theme$palette$getCon = (_theme$palette = theme.palette).getContrastText) == null ? void 0 : _theme$palette$getCon.call(_theme$palette, theme.palette.grey[300]),\n backgroundColor: (theme.vars || theme).palette.grey[300],\n boxShadow: (theme.vars || theme).shadows[2]\n }, ownerState.variant === 'contained' && ownerState.color !== 'inherit' && {\n color: (theme.vars || theme).palette[ownerState.color].contrastText,\n backgroundColor: (theme.vars || theme).palette[ownerState.color].main\n }, ownerState.color === 'inherit' && {\n color: 'inherit',\n borderColor: 'currentColor'\n }, ownerState.size === 'small' && ownerState.variant === 'text' && {\n padding: '4px 5px',\n fontSize: theme.typography.pxToRem(13)\n }, ownerState.size === 'large' && ownerState.variant === 'text' && {\n padding: '8px 11px',\n fontSize: theme.typography.pxToRem(15)\n }, ownerState.size === 'small' && ownerState.variant === 'outlined' && {\n padding: '3px 9px',\n fontSize: theme.typography.pxToRem(13)\n }, ownerState.size === 'large' && ownerState.variant === 'outlined' && {\n padding: '7px 21px',\n fontSize: theme.typography.pxToRem(15)\n }, ownerState.size === 'small' && ownerState.variant === 'contained' && {\n padding: '4px 10px',\n fontSize: theme.typography.pxToRem(13)\n }, ownerState.size === 'large' && ownerState.variant === 'contained' && {\n padding: '8px 22px',\n fontSize: theme.typography.pxToRem(15)\n }, ownerState.fullWidth && {\n width: '100%'\n });\n}, ({\n ownerState\n}) => ownerState.disableElevation && {\n boxShadow: 'none',\n '&:hover': {\n boxShadow: 'none'\n },\n [`&.${buttonClasses.focusVisible}`]: {\n boxShadow: 'none'\n },\n '&:active': {\n boxShadow: 'none'\n },\n [`&.${buttonClasses.disabled}`]: {\n boxShadow: 'none'\n }\n});\nconst ButtonStartIcon = styled('span', {\n name: 'MuiButton',\n slot: 'StartIcon',\n overridesResolver: (props, styles) => {\n const {\n ownerState\n } = props;\n return [styles.startIcon, styles[`iconSize${capitalize(ownerState.size)}`]];\n }\n})(({\n ownerState\n}) => _extends({\n display: 'inherit',\n marginRight: 8,\n marginLeft: -4\n}, ownerState.size === 'small' && {\n marginLeft: -2\n}, commonIconStyles(ownerState)));\nconst ButtonEndIcon = styled('span', {\n name: 'MuiButton',\n slot: 'EndIcon',\n overridesResolver: (props, styles) => {\n const {\n ownerState\n } = props;\n return [styles.endIcon, styles[`iconSize${capitalize(ownerState.size)}`]];\n }\n})(({\n ownerState\n}) => _extends({\n display: 'inherit',\n marginRight: -4,\n marginLeft: 8\n}, ownerState.size === 'small' && {\n marginRight: -2\n}, commonIconStyles(ownerState)));\nconst Button = /*#__PURE__*/React.forwardRef(function Button(inProps, ref) {\n // props priority: `inProps` > `contextProps` > `themeDefaultProps`\n const contextProps = React.useContext(ButtonGroupContext);\n const resolvedProps = resolveProps(contextProps, inProps);\n const props = useThemeProps({\n props: resolvedProps,\n name: 'MuiButton'\n });\n\n const {\n children,\n color = 'primary',\n component = 'button',\n className,\n disabled = false,\n disableElevation = false,\n disableFocusRipple = false,\n endIcon: endIconProp,\n focusVisibleClassName,\n fullWidth = false,\n size = 'medium',\n startIcon: startIconProp,\n type,\n variant = 'text'\n } = props,\n other = _objectWithoutPropertiesLoose(props, _excluded);\n\n const ownerState = _extends({}, props, {\n color,\n component,\n disabled,\n disableElevation,\n disableFocusRipple,\n fullWidth,\n size,\n type,\n variant\n });\n\n const _useUtilityClasses = useUtilityClasses(ownerState),\n {\n root: classesRoot\n } = _useUtilityClasses,\n classes = _objectWithoutPropertiesLoose(_useUtilityClasses, _excluded2);\n\n const startIcon = startIconProp && /*#__PURE__*/_jsx(ButtonStartIcon, {\n className: classes.startIcon,\n ownerState: ownerState,\n children: startIconProp\n });\n\n const endIcon = endIconProp && /*#__PURE__*/_jsx(ButtonEndIcon, {\n className: classes.endIcon,\n ownerState: ownerState,\n children: endIconProp\n });\n\n return /*#__PURE__*/_jsxs(ButtonRoot, _extends({\n ownerState: ownerState,\n className: clsx(contextProps.className, classesRoot, className),\n component: component,\n disabled: disabled,\n focusRipple: !disableFocusRipple,\n focusVisibleClassName: clsx(classes.focusVisible, focusVisibleClassName),\n ref: ref,\n type: type\n }, other, {\n classes: classes,\n children: [startIcon, children, endIcon]\n }));\n});\nprocess.env.NODE_ENV !== \"production\" ? Button.propTypes\n/* remove-proptypes */\n= {\n // ----------------------------- Warning --------------------------------\n // | These PropTypes are generated from the TypeScript type definitions |\n // | To update them edit the d.ts file and run \"yarn proptypes\" |\n // ----------------------------------------------------------------------\n\n /**\n * The content of the component.\n */\n children: PropTypes.node,\n\n /**\n * Override or extend the styles applied to the component.\n */\n classes: PropTypes.object,\n\n /**\n * @ignore\n */\n className: PropTypes.string,\n\n /**\n * The color of the component.\n * It supports both default and custom theme colors, which can be added as shown in the\n * [palette customization guide](https://mui.com/material-ui/customization/palette/#adding-new-colors).\n * @default 'primary'\n */\n color: PropTypes\n /* @typescript-to-proptypes-ignore */\n .oneOfType([PropTypes.oneOf(['inherit', 'primary', 'secondary', 'success', 'error', 'info', 'warning']), PropTypes.string]),\n\n /**\n * The component used for the root node.\n * Either a string to use a HTML element or a component.\n */\n component: PropTypes.elementType,\n\n /**\n * If `true`, the component is disabled.\n * @default false\n */\n disabled: PropTypes.bool,\n\n /**\n * If `true`, no elevation is used.\n * @default false\n */\n disableElevation: PropTypes.bool,\n\n /**\n * If `true`, the keyboard focus ripple is disabled.\n * @default false\n */\n disableFocusRipple: PropTypes.bool,\n\n /**\n * If `true`, the ripple effect is disabled.\n *\n * ⚠️ Without a ripple there is no styling for :focus-visible by default. Be sure\n * to highlight the element by applying separate styles with the `.Mui-focusVisible` class.\n * @default false\n */\n disableRipple: PropTypes.bool,\n\n /**\n * Element placed after the children.\n */\n endIcon: PropTypes.node,\n\n /**\n * @ignore\n */\n focusVisibleClassName: PropTypes.string,\n\n /**\n * If `true`, the button will take up the full width of its container.\n * @default false\n */\n fullWidth: PropTypes.bool,\n\n /**\n * The URL to link to when the button is clicked.\n * If defined, an `a` element will be used as the root node.\n */\n href: PropTypes.string,\n\n /**\n * The size of the component.\n * `small` is equivalent to the dense button styling.\n * @default 'medium'\n */\n size: PropTypes\n /* @typescript-to-proptypes-ignore */\n .oneOfType([PropTypes.oneOf(['small', 'medium', 'large']), PropTypes.string]),\n\n /**\n * Element placed before the children.\n */\n startIcon: PropTypes.node,\n\n /**\n * The system prop that allows defining system overrides as well as additional CSS styles.\n */\n sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),\n\n /**\n * @ignore\n */\n type: PropTypes.oneOfType([PropTypes.oneOf(['button', 'reset', 'submit']), PropTypes.string]),\n\n /**\n * The variant to use.\n * @default 'text'\n */\n variant: PropTypes\n /* @typescript-to-proptypes-ignore */\n .oneOfType([PropTypes.oneOf(['contained', 'outlined', 'text']), PropTypes.string])\n} : void 0;\nexport default Button;","import * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\n/**\n * @ignore - internal component.\n */\n\nimport { jsx as _jsx } from \"react/jsx-runtime\";\n\nfunction Ripple(props) {\n const {\n className,\n classes,\n pulsate = false,\n rippleX,\n rippleY,\n rippleSize,\n in: inProp,\n onExited,\n timeout\n } = props;\n const [leaving, setLeaving] = React.useState(false);\n const rippleClassName = clsx(className, classes.ripple, classes.rippleVisible, pulsate && classes.ripplePulsate);\n const rippleStyles = {\n width: rippleSize,\n height: rippleSize,\n top: -(rippleSize / 2) + rippleY,\n left: -(rippleSize / 2) + rippleX\n };\n const childClassName = clsx(classes.child, leaving && classes.childLeaving, pulsate && classes.childPulsate);\n\n if (!inProp && !leaving) {\n setLeaving(true);\n }\n\n React.useEffect(() => {\n if (!inProp && onExited != null) {\n // react-transition-group#onExited\n const timeoutId = setTimeout(onExited, timeout);\n return () => {\n clearTimeout(timeoutId);\n };\n }\n\n return undefined;\n }, [onExited, inProp, timeout]);\n return /*#__PURE__*/_jsx(\"span\", {\n className: rippleClassName,\n style: rippleStyles,\n children: /*#__PURE__*/_jsx(\"span\", {\n className: childClassName\n })\n });\n}\n\nprocess.env.NODE_ENV !== \"production\" ? Ripple.propTypes = {\n /**\n * Override or extend the styles applied to the component.\n * See [CSS API](#css) below for more details.\n */\n classes: PropTypes.object.isRequired,\n className: PropTypes.string,\n\n /**\n * @ignore - injected from TransitionGroup\n */\n in: PropTypes.bool,\n\n /**\n * @ignore - injected from TransitionGroup\n */\n onExited: PropTypes.func,\n\n /**\n * If `true`, the ripple pulsates, typically indicating the keyboard focus state of an element.\n */\n pulsate: PropTypes.bool,\n\n /**\n * Diameter of the ripple.\n */\n rippleSize: PropTypes.number,\n\n /**\n * Horizontal position of the ripple center.\n */\n rippleX: PropTypes.number,\n\n /**\n * Vertical position of the ripple center.\n */\n rippleY: PropTypes.number,\n\n /**\n * exit delay\n */\n timeout: PropTypes.number.isRequired\n} : void 0;\nexport default Ripple;","import { generateUtilityClass, generateUtilityClasses } from '@mui/base';\nexport function getTouchRippleUtilityClass(slot) {\n return generateUtilityClass('MuiTouchRipple', slot);\n}\nconst touchRippleClasses = generateUtilityClasses('MuiTouchRipple', ['root', 'ripple', 'rippleVisible', 'ripplePulsate', 'child', 'childLeaving', 'childPulsate']);\nexport default touchRippleClasses;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nconst _excluded = [\"center\", \"classes\", \"className\"];\n\nlet _ = t => t,\n _t,\n _t2,\n _t3,\n _t4;\n\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport { TransitionGroup } from 'react-transition-group';\nimport clsx from 'clsx';\nimport { keyframes } from '@mui/system';\nimport styled from '../styles/styled';\nimport useThemeProps from '../styles/useThemeProps';\nimport Ripple from './Ripple';\nimport touchRippleClasses from './touchRippleClasses';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst DURATION = 550;\nexport const DELAY_RIPPLE = 80;\nconst enterKeyframe = keyframes(_t || (_t = _`\n 0% {\n transform: scale(0);\n opacity: 0.1;\n }\n\n 100% {\n transform: scale(1);\n opacity: 0.3;\n }\n`));\nconst exitKeyframe = keyframes(_t2 || (_t2 = _`\n 0% {\n opacity: 1;\n }\n\n 100% {\n opacity: 0;\n }\n`));\nconst pulsateKeyframe = keyframes(_t3 || (_t3 = _`\n 0% {\n transform: scale(1);\n }\n\n 50% {\n transform: scale(0.92);\n }\n\n 100% {\n transform: scale(1);\n }\n`));\nexport const TouchRippleRoot = styled('span', {\n name: 'MuiTouchRipple',\n slot: 'Root'\n})({\n overflow: 'hidden',\n pointerEvents: 'none',\n position: 'absolute',\n zIndex: 0,\n top: 0,\n right: 0,\n bottom: 0,\n left: 0,\n borderRadius: 'inherit'\n}); // This `styled()` function invokes keyframes. `styled-components` only supports keyframes\n// in string templates. Do not convert these styles in JS object as it will break.\n\nexport const TouchRippleRipple = styled(Ripple, {\n name: 'MuiTouchRipple',\n slot: 'Ripple'\n})(_t4 || (_t4 = _`\n opacity: 0;\n position: absolute;\n\n &.${0} {\n opacity: 0.3;\n transform: scale(1);\n animation-name: ${0};\n animation-duration: ${0}ms;\n animation-timing-function: ${0};\n }\n\n &.${0} {\n animation-duration: ${0}ms;\n }\n\n & .${0} {\n opacity: 1;\n display: block;\n width: 100%;\n height: 100%;\n border-radius: 50%;\n background-color: currentColor;\n }\n\n & .${0} {\n opacity: 0;\n animation-name: ${0};\n animation-duration: ${0}ms;\n animation-timing-function: ${0};\n }\n\n & .${0} {\n position: absolute;\n /* @noflip */\n left: 0px;\n top: 0;\n animation-name: ${0};\n animation-duration: 2500ms;\n animation-timing-function: ${0};\n animation-iteration-count: infinite;\n animation-delay: 200ms;\n }\n`), touchRippleClasses.rippleVisible, enterKeyframe, DURATION, ({\n theme\n}) => theme.transitions.easing.easeInOut, touchRippleClasses.ripplePulsate, ({\n theme\n}) => theme.transitions.duration.shorter, touchRippleClasses.child, touchRippleClasses.childLeaving, exitKeyframe, DURATION, ({\n theme\n}) => theme.transitions.easing.easeInOut, touchRippleClasses.childPulsate, pulsateKeyframe, ({\n theme\n}) => theme.transitions.easing.easeInOut);\n/**\n * @ignore - internal component.\n *\n * TODO v5: Make private\n */\n\nconst TouchRipple = /*#__PURE__*/React.forwardRef(function TouchRipple(inProps, ref) {\n const props = useThemeProps({\n props: inProps,\n name: 'MuiTouchRipple'\n });\n\n const {\n center: centerProp = false,\n classes = {},\n className\n } = props,\n other = _objectWithoutPropertiesLoose(props, _excluded);\n\n const [ripples, setRipples] = React.useState([]);\n const nextKey = React.useRef(0);\n const rippleCallback = React.useRef(null);\n React.useEffect(() => {\n if (rippleCallback.current) {\n rippleCallback.current();\n rippleCallback.current = null;\n }\n }, [ripples]); // Used to filter out mouse emulated events on mobile.\n\n const ignoringMouseDown = React.useRef(false); // We use a timer in order to only show the ripples for touch \"click\" like events.\n // We don't want to display the ripple for touch scroll events.\n\n const startTimer = React.useRef(null); // This is the hook called once the previous timeout is ready.\n\n const startTimerCommit = React.useRef(null);\n const container = React.useRef(null);\n React.useEffect(() => {\n return () => {\n clearTimeout(startTimer.current);\n };\n }, []);\n const startCommit = React.useCallback(params => {\n const {\n pulsate,\n rippleX,\n rippleY,\n rippleSize,\n cb\n } = params;\n setRipples(oldRipples => [...oldRipples, /*#__PURE__*/_jsx(TouchRippleRipple, {\n classes: {\n ripple: clsx(classes.ripple, touchRippleClasses.ripple),\n rippleVisible: clsx(classes.rippleVisible, touchRippleClasses.rippleVisible),\n ripplePulsate: clsx(classes.ripplePulsate, touchRippleClasses.ripplePulsate),\n child: clsx(classes.child, touchRippleClasses.child),\n childLeaving: clsx(classes.childLeaving, touchRippleClasses.childLeaving),\n childPulsate: clsx(classes.childPulsate, touchRippleClasses.childPulsate)\n },\n timeout: DURATION,\n pulsate: pulsate,\n rippleX: rippleX,\n rippleY: rippleY,\n rippleSize: rippleSize\n }, nextKey.current)]);\n nextKey.current += 1;\n rippleCallback.current = cb;\n }, [classes]);\n const start = React.useCallback((event = {}, options = {}, cb) => {\n const {\n pulsate = false,\n center = centerProp || options.pulsate,\n fakeElement = false // For test purposes\n\n } = options;\n\n if ((event == null ? void 0 : event.type) === 'mousedown' && ignoringMouseDown.current) {\n ignoringMouseDown.current = false;\n return;\n }\n\n if ((event == null ? void 0 : event.type) === 'touchstart') {\n ignoringMouseDown.current = true;\n }\n\n const element = fakeElement ? null : container.current;\n const rect = element ? element.getBoundingClientRect() : {\n width: 0,\n height: 0,\n left: 0,\n top: 0\n }; // Get the size of the ripple\n\n let rippleX;\n let rippleY;\n let rippleSize;\n\n if (center || event === undefined || event.clientX === 0 && event.clientY === 0 || !event.clientX && !event.touches) {\n rippleX = Math.round(rect.width / 2);\n rippleY = Math.round(rect.height / 2);\n } else {\n const {\n clientX,\n clientY\n } = event.touches && event.touches.length > 0 ? event.touches[0] : event;\n rippleX = Math.round(clientX - rect.left);\n rippleY = Math.round(clientY - rect.top);\n }\n\n if (center) {\n rippleSize = Math.sqrt((2 * rect.width ** 2 + rect.height ** 2) / 3); // For some reason the animation is broken on Mobile Chrome if the size is even.\n\n if (rippleSize % 2 === 0) {\n rippleSize += 1;\n }\n } else {\n const sizeX = Math.max(Math.abs((element ? element.clientWidth : 0) - rippleX), rippleX) * 2 + 2;\n const sizeY = Math.max(Math.abs((element ? element.clientHeight : 0) - rippleY), rippleY) * 2 + 2;\n rippleSize = Math.sqrt(sizeX ** 2 + sizeY ** 2);\n } // Touche devices\n\n\n if (event != null && event.touches) {\n // check that this isn't another touchstart due to multitouch\n // otherwise we will only clear a single timer when unmounting while two\n // are running\n if (startTimerCommit.current === null) {\n // Prepare the ripple effect.\n startTimerCommit.current = () => {\n startCommit({\n pulsate,\n rippleX,\n rippleY,\n rippleSize,\n cb\n });\n }; // Delay the execution of the ripple effect.\n\n\n startTimer.current = setTimeout(() => {\n if (startTimerCommit.current) {\n startTimerCommit.current();\n startTimerCommit.current = null;\n }\n }, DELAY_RIPPLE); // We have to make a tradeoff with this value.\n }\n } else {\n startCommit({\n pulsate,\n rippleX,\n rippleY,\n rippleSize,\n cb\n });\n }\n }, [centerProp, startCommit]);\n const pulsate = React.useCallback(() => {\n start({}, {\n pulsate: true\n });\n }, [start]);\n const stop = React.useCallback((event, cb) => {\n clearTimeout(startTimer.current); // The touch interaction occurs too quickly.\n // We still want to show ripple effect.\n\n if ((event == null ? void 0 : event.type) === 'touchend' && startTimerCommit.current) {\n startTimerCommit.current();\n startTimerCommit.current = null;\n startTimer.current = setTimeout(() => {\n stop(event, cb);\n });\n return;\n }\n\n startTimerCommit.current = null;\n setRipples(oldRipples => {\n if (oldRipples.length > 0) {\n return oldRipples.slice(1);\n }\n\n return oldRipples;\n });\n rippleCallback.current = cb;\n }, []);\n React.useImperativeHandle(ref, () => ({\n pulsate,\n start,\n stop\n }), [pulsate, start, stop]);\n return /*#__PURE__*/_jsx(TouchRippleRoot, _extends({\n className: clsx(touchRippleClasses.root, classes.root, className),\n ref: container\n }, other, {\n children: /*#__PURE__*/_jsx(TransitionGroup, {\n component: null,\n exit: true,\n children: ripples\n })\n }));\n});\nprocess.env.NODE_ENV !== \"production\" ? TouchRipple.propTypes = {\n /**\n * If `true`, the ripple starts at the center of the component\n * rather than at the point of interaction.\n */\n center: PropTypes.bool,\n\n /**\n * Override or extend the styles applied to the component.\n * See [CSS API](#css) below for more details.\n */\n classes: PropTypes.object,\n\n /**\n * @ignore\n */\n className: PropTypes.string\n} : void 0;\nexport default TouchRipple;","import { generateUtilityClass, generateUtilityClasses } from '@mui/base';\nexport function getButtonBaseUtilityClass(slot) {\n return generateUtilityClass('MuiButtonBase', slot);\n}\nconst buttonBaseClasses = generateUtilityClasses('MuiButtonBase', ['root', 'disabled', 'focusVisible']);\nexport default buttonBaseClasses;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nconst _excluded = [\"action\", \"centerRipple\", \"children\", \"className\", \"component\", \"disabled\", \"disableRipple\", \"disableTouchRipple\", \"focusRipple\", \"focusVisibleClassName\", \"LinkComponent\", \"onBlur\", \"onClick\", \"onContextMenu\", \"onDragLeave\", \"onFocus\", \"onFocusVisible\", \"onKeyDown\", \"onKeyUp\", \"onMouseDown\", \"onMouseLeave\", \"onMouseUp\", \"onTouchEnd\", \"onTouchMove\", \"onTouchStart\", \"tabIndex\", \"TouchRippleProps\", \"touchRippleRef\", \"type\"];\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport { elementTypeAcceptingRef, refType } from '@mui/utils';\nimport composeClasses from '@mui/base/composeClasses';\nimport styled from '../styles/styled';\nimport useThemeProps from '../styles/useThemeProps';\nimport useForkRef from '../utils/useForkRef';\nimport useEventCallback from '../utils/useEventCallback';\nimport useIsFocusVisible from '../utils/useIsFocusVisible';\nimport TouchRipple from './TouchRipple';\nimport buttonBaseClasses, { getButtonBaseUtilityClass } from './buttonBaseClasses';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\n\nconst useUtilityClasses = ownerState => {\n const {\n disabled,\n focusVisible,\n focusVisibleClassName,\n classes\n } = ownerState;\n const slots = {\n root: ['root', disabled && 'disabled', focusVisible && 'focusVisible']\n };\n const composedClasses = composeClasses(slots, getButtonBaseUtilityClass, classes);\n\n if (focusVisible && focusVisibleClassName) {\n composedClasses.root += ` ${focusVisibleClassName}`;\n }\n\n return composedClasses;\n};\n\nexport const ButtonBaseRoot = styled('button', {\n name: 'MuiButtonBase',\n slot: 'Root',\n overridesResolver: (props, styles) => styles.root\n})({\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n position: 'relative',\n boxSizing: 'border-box',\n WebkitTapHighlightColor: 'transparent',\n backgroundColor: 'transparent',\n // Reset default value\n // We disable the focus ring for mouse, touch and keyboard users.\n outline: 0,\n border: 0,\n margin: 0,\n // Remove the margin in Safari\n borderRadius: 0,\n padding: 0,\n // Remove the padding in Firefox\n cursor: 'pointer',\n userSelect: 'none',\n verticalAlign: 'middle',\n MozAppearance: 'none',\n // Reset\n WebkitAppearance: 'none',\n // Reset\n textDecoration: 'none',\n // So we take precedent over the style of a native element.\n color: 'inherit',\n '&::-moz-focus-inner': {\n borderStyle: 'none' // Remove Firefox dotted outline.\n\n },\n [`&.${buttonBaseClasses.disabled}`]: {\n pointerEvents: 'none',\n // Disable link interactions\n cursor: 'default'\n },\n '@media print': {\n colorAdjust: 'exact'\n }\n});\n/**\n * `ButtonBase` contains as few styles as possible.\n * It aims to be a simple building block for creating a button.\n * It contains a load of style reset and some focus/ripple logic.\n */\n\nconst ButtonBase = /*#__PURE__*/React.forwardRef(function ButtonBase(inProps, ref) {\n const props = useThemeProps({\n props: inProps,\n name: 'MuiButtonBase'\n });\n\n const {\n action,\n centerRipple = false,\n children,\n className,\n component = 'button',\n disabled = false,\n disableRipple = false,\n disableTouchRipple = false,\n focusRipple = false,\n LinkComponent = 'a',\n onBlur,\n onClick,\n onContextMenu,\n onDragLeave,\n onFocus,\n onFocusVisible,\n onKeyDown,\n onKeyUp,\n onMouseDown,\n onMouseLeave,\n onMouseUp,\n onTouchEnd,\n onTouchMove,\n onTouchStart,\n tabIndex = 0,\n TouchRippleProps,\n touchRippleRef,\n type\n } = props,\n other = _objectWithoutPropertiesLoose(props, _excluded);\n\n const buttonRef = React.useRef(null);\n const rippleRef = React.useRef(null);\n const handleRippleRef = useForkRef(rippleRef, touchRippleRef);\n const {\n isFocusVisibleRef,\n onFocus: handleFocusVisible,\n onBlur: handleBlurVisible,\n ref: focusVisibleRef\n } = useIsFocusVisible();\n const [focusVisible, setFocusVisible] = React.useState(false);\n\n if (disabled && focusVisible) {\n setFocusVisible(false);\n }\n\n React.useImperativeHandle(action, () => ({\n focusVisible: () => {\n setFocusVisible(true);\n buttonRef.current.focus();\n }\n }), []);\n const [mountedState, setMountedState] = React.useState(false);\n React.useEffect(() => {\n setMountedState(true);\n }, []);\n const enableTouchRipple = mountedState && !disableRipple && !disabled;\n React.useEffect(() => {\n if (focusVisible && focusRipple && !disableRipple && mountedState) {\n rippleRef.current.pulsate();\n }\n }, [disableRipple, focusRipple, focusVisible, mountedState]);\n\n function useRippleHandler(rippleAction, eventCallback, skipRippleAction = disableTouchRipple) {\n return useEventCallback(event => {\n if (eventCallback) {\n eventCallback(event);\n }\n\n const ignore = skipRippleAction;\n\n if (!ignore && rippleRef.current) {\n rippleRef.current[rippleAction](event);\n }\n\n return true;\n });\n }\n\n const handleMouseDown = useRippleHandler('start', onMouseDown);\n const handleContextMenu = useRippleHandler('stop', onContextMenu);\n const handleDragLeave = useRippleHandler('stop', onDragLeave);\n const handleMouseUp = useRippleHandler('stop', onMouseUp);\n const handleMouseLeave = useRippleHandler('stop', event => {\n if (focusVisible) {\n event.preventDefault();\n }\n\n if (onMouseLeave) {\n onMouseLeave(event);\n }\n });\n const handleTouchStart = useRippleHandler('start', onTouchStart);\n const handleTouchEnd = useRippleHandler('stop', onTouchEnd);\n const handleTouchMove = useRippleHandler('stop', onTouchMove);\n const handleBlur = useRippleHandler('stop', event => {\n handleBlurVisible(event);\n\n if (isFocusVisibleRef.current === false) {\n setFocusVisible(false);\n }\n\n if (onBlur) {\n onBlur(event);\n }\n }, false);\n const handleFocus = useEventCallback(event => {\n // Fix for https://github.com/facebook/react/issues/7769\n if (!buttonRef.current) {\n buttonRef.current = event.currentTarget;\n }\n\n handleFocusVisible(event);\n\n if (isFocusVisibleRef.current === true) {\n setFocusVisible(true);\n\n if (onFocusVisible) {\n onFocusVisible(event);\n }\n }\n\n if (onFocus) {\n onFocus(event);\n }\n });\n\n const isNonNativeButton = () => {\n const button = buttonRef.current;\n return component && component !== 'button' && !(button.tagName === 'A' && button.href);\n };\n /**\n * IE11 shim for https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/repeat\n */\n\n\n const keydownRef = React.useRef(false);\n const handleKeyDown = useEventCallback(event => {\n // Check if key is already down to avoid repeats being counted as multiple activations\n if (focusRipple && !keydownRef.current && focusVisible && rippleRef.current && event.key === ' ') {\n keydownRef.current = true;\n rippleRef.current.stop(event, () => {\n rippleRef.current.start(event);\n });\n }\n\n if (event.target === event.currentTarget && isNonNativeButton() && event.key === ' ') {\n event.preventDefault();\n }\n\n if (onKeyDown) {\n onKeyDown(event);\n } // Keyboard accessibility for non interactive elements\n\n\n if (event.target === event.currentTarget && isNonNativeButton() && event.key === 'Enter' && !disabled) {\n event.preventDefault();\n\n if (onClick) {\n onClick(event);\n }\n }\n });\n const handleKeyUp = useEventCallback(event => {\n // calling preventDefault in keyUp on a \n );\n },\n);\n","import { Button } from \"../Button\";\nimport { AddNewCexButtonProps } from \"./types\";\nimport { useTheme } from \"@mui/material\";\n\nexport const AddNewCexButton = (props: AddNewCexButtonProps) => {\n const theme = useTheme();\n // @TODO: Add this to a SVG sprite so we don't lose tracking of our SVGs by centralizing them\n return (\n \n \n \n \n Add new CEX\n \n );\n};\n","import { CopyCard } from \"@cede/ds\";\nimport { AddressDescriptionProps } from \"./types\";\nimport { Box, Typography, useTheme } from \"@mui/material\";\n\nexport function AddressDescription({ name, address }: AddressDescriptionProps) {\n const theme = useTheme();\n return (\n \n \n Address Description\n \n {\n if (\"clipboard\" in navigator) {\n return navigator.clipboard.writeText(name);\n } else {\n return new Promise(() => document.execCommand(\"copy\", true, name));\n }\n }}\n />\n \n Address\n \n {\n if (\"clipboard\" in navigator) {\n return navigator.clipboard.writeText(address);\n } else {\n return new Promise(() => document.execCommand(\"copy\", true, address));\n }\n }}\n />\n \n );\n}\n","import React, { ChangeEventHandler, Ref, useMemo } from \"react\";\nimport { DropListWithIconItem } from \"@cede/types\";\nimport { formatNumberAsString, sortItemsByDescendingAmountAndAlphabetical } from \"@cede/utils\";\nimport { CurrencyAmountFormatter } from \"../CurrencyAmountFormatter\";\nimport { DropListWithIconModal } from \"../DropListWithIconModal\";\nimport { AmountFieldInputComponentProps, AmountFieldWithTokensProps } from \"./types\";\nimport { Box, FormControl, InputBase, InputLabel, OutlinedInput, Skeleton, Typography, useTheme } from \"@mui/material\";\n\nexport const InputComponent = React.forwardRef(\n (\n {\n currency,\n estimatedValue,\n local,\n displayDefaultEstimatedValue = true,\n loading,\n ...props\n }: AmountFieldInputComponentProps,\n ref: Ref,\n ) => {\n const theme = useTheme();\n return (\n \n {loading ? (\n \n ) : (\n \n )}\n\n {displayDefaultEstimatedValue || estimatedValue > 0 ? (\n \n \n \n \n ) : (\n <>\n )}\n \n );\n },\n);\n\nexport const AmountFieldWithTokens = ({\n assets,\n label,\n amount,\n setAmount,\n local,\n currency,\n estimatedValue,\n selectedAsset,\n setSelectedAsset,\n loading,\n id,\n error,\n endAdornment,\n displayDefaultEstimatedValue,\n onFocus,\n onBlur,\n availableBalance,\n subListTitles,\n amountIsLoading,\n}: AmountFieldWithTokensProps) => {\n const theme = useTheme();\n\n const handleInput: ChangeEventHandler = (e) => {\n setAmount(formatNumberAsString(e.target.value || \"\"));\n };\n\n const sortedItems = useMemo(() => {\n if (Array.isArray(assets)) {\n return sortItemsByDescendingAmountAndAlphabetical(assets);\n }\n return Object.entries(assets).reduce((acc, [key, value]) => {\n acc[key] = sortItemsByDescendingAmountAndAlphabetical(value);\n return acc;\n }, {} as Record);\n }, [assets]);\n\n return (\n \n {label}\n ({\n padding: theme.custom.gutterMargin,\n paddingTop: theme.spacing(1.5),\n paddingBottom: theme.spacing(1.5),\n borderRadius: theme.custom.inputRadius.default,\n justifyContent: \"space-between\",\n })}\n notched\n value={amount}\n onChange={handleInput}\n label={label}\n inputComponent={InputComponent}\n error={error}\n inputProps={{\n theme,\n estimatedValue,\n displayDefaultEstimatedValue,\n currency,\n local,\n id,\n \"data-testid\": String(id),\n \"loading\": loading || amountIsLoading,\n }}\n endAdornment={\n endAdornment || (\n \n \n \n \n {availableBalance}\n \n )\n }\n onFocus={onFocus}\n onBlur={onBlur}\n />\n \n );\n};\n","import { BackButtonProps } from \"./types\";\nimport { Box, Typography, useTheme } from \"@mui/material\";\n\nexport const BackButton = (props: BackButtonProps) => {\n const theme = useTheme();\n\n return (\n props.handleReturn()}\n sx={{\n \":hover\": {\n cursor: \"pointer\",\n },\n }}\n >\n \n \n \n\n \n Back\n \n \n );\n};\n","import { CustomButtonIconVariantProps, CustomButtonProps } from \"./types\";\nimport { Box, CircularProgress, useTheme } from \"@mui/material\";\nimport { default as MuiButton } from \"@mui/material/Button\";\nimport { SystemCssProperties } from \"@mui/system\";\n\nexport const Button = ({ rounded, sx = {}, ...props }: CustomButtonProps) => {\n return (\n ({\n borderRadius: rounded ? theme.custom.buttonRoundedRadius : theme.custom.buttonDefaultRadius,\n height: props.height === \"tall\" ? \"50px\" : \"36px\",\n textTransform: \"none\",\n fontSize: theme.typography.body1.fontSize,\n }),\n sx as SystemCssProperties,\n ]}\n {...props}\n >\n {props.loading ? : props.children}\n \n );\n};\n\nButton.IconVariant = ({ children, icon, sx, ...props }: CustomButtonIconVariantProps) => {\n const theme = useTheme();\n return (\n \n {children}\n {icon}\n \n );\n};\n","import { styled, Tooltip, tooltipClasses, TooltipProps } from \"@mui/material\";\n\nexport const CexTooltip = styled(({ className, ...props }: TooltipProps) => (\n \n))(({ theme }) => ({\n [`& .${tooltipClasses.tooltip}`]: {\n maxWidth: 380,\n zIndex: 90,\n backgroundColor: theme.palette.background.paper,\n },\n}));\n","import React, { useEffect, useState } from \"react\";\nimport { Box, Theme, useTheme } from \"@mui/material\";\n\nexport interface Props {\n children: React.ReactElement;\n size: number | string;\n underlayColor?: string;\n}\n\nexport const ComponentUnderlay = ({ children, underlayColor, size }: Props) => {\n const theme = useTheme();\n const [newSize, setNewSize] = useState(() => {\n return changeSize(size);\n });\n\n useEffect(() => {\n setNewSize(changeSize(size));\n }, [size]);\n\n function changeSize(size: number | string) {\n if (typeof size === \"string\") {\n const sizeNumber = theme.custom.iconSize[size as keyof Theme[\"custom\"][\"iconSize\"]].replace(/\\D/g, \"\");\n return Number(sizeNumber) + theme.custom.iconUnderlayMargin;\n }\n if (typeof size === \"number\") {\n return size;\n }\n return 50;\n }\n\n return (\n \n {children}\n \n );\n};\n","import { ConnectionStatusProps } from \"./types\";\nimport { alpha, Chip, useTheme } from \"@mui/material\";\n\nexport const ConnectionStatus = ({ label, color }: ConnectionStatusProps) => {\n const theme = useTheme();\n return (\n \n );\n};\n","import { CopyIconButton } from \"@cede/ds\";\nimport { CopyBoxProps } from \"./types\";\nimport { Box, useTheme } from \"@mui/material\";\n\nexport function CopyBox({ children, value }: CopyBoxProps) {\n const theme = useTheme();\n return (\n \n \n \n \n {children}\n \n );\n}\n","import { MouseEventHandler, useEffect, useRef, useState } from \"react\";\nimport { Bubble } from \"../Popups/Bubble\";\nimport { CopyCardProps } from \"./types\";\nimport { Card, CardActionArea, Typography, useTheme } from \"@mui/material\";\n\nexport const CopyCard = ({ title, content, onCopy, testId = \"\" }: CopyCardProps) => {\n const theme = useTheme();\n const [isCopied, setIsCopied] = useState(false);\n const anchor = useRef(null);\n\n const onClick: MouseEventHandler = (e) => {\n e.stopPropagation();\n onCopy();\n setIsCopied(true);\n };\n\n useEffect(() => {\n const onClickBody = () => {\n setIsCopied(false);\n };\n document.body.addEventListener(\"click\", onClickBody);\n\n return () => document.body.removeEventListener(\"click\", onClickBody);\n }, []);\n\n return (\n <>\n {content && (\n <>\n \n \n \n {title}\n \n \n {content}\n \n \n \n \n \n Copied!\n \n \n \n )}\n \n );\n};\n","import { useRef, useState } from \"react\";\nimport { CopyIconButtonProps } from \"./types\";\nimport { Box, Fade, IconButton, Popper, useTheme } from \"@mui/material\";\n\nexport const CopyIconButton = ({ testId = \"\", opacity = 1, size, text }: CopyIconButtonProps) => {\n const theme = useTheme();\n const [popupOpened, setPopupOpened] = useState(false);\n\n const ref = useRef();\n\n function onCopy() {\n navigator.clipboard.writeText(text).catch((err) => {\n // eslint-disable-next-line no-console\n console.error(\"Failed to copy: \", err);\n });\n }\n\n let width;\n let height;\n if (size === \"large\") {\n width = 20;\n height = 20 * 1.2;\n } else if (size === \"medium\") {\n width = 15;\n height = 15 * 1.2;\n } else {\n width = 10;\n height = 12;\n }\n\n return (\n <>\n \n {\n if (popupOpened) return;\n onCopy();\n setPopupOpened(true);\n setTimeout(() => {\n setPopupOpened(false);\n }, 1000);\n }}\n sx={{\n color: theme.palette.text.primary,\n }}\n >\n \n \n \n \n \n \n {({ TransitionProps }) => (\n \n \n Copied!\n \n \n )}\n \n \n );\n};\n","import generateUtilityClasses from '@mui/utils/generateUtilityClasses';\nconst boxClasses = generateUtilityClasses('MuiBox', ['root']);\nexport default boxClasses;","'use client';\n\nimport PropTypes from 'prop-types';\nimport ClassNameGenerator from '@mui/utils/ClassNameGenerator';\nimport createBox from '../createBox';\nimport boxClasses from './boxClasses';\nconst Box = createBox({\n defaultClassName: boxClasses.root,\n generateClassName: ClassNameGenerator.generate\n});\nprocess.env.NODE_ENV !== \"production\" ? Box.propTypes /* remove-proptypes */ = {\n // ┌────────────────────────────── Warning ──────────────────────────────┐\n // │ These PropTypes are generated from the TypeScript type definitions. │\n // │ To update them, edit the d.ts file and run `pnpm proptypes`. │\n // └─────────────────────────────────────────────────────────────────────┘\n /**\n * @ignore\n */\n children: PropTypes.node,\n /**\n * The component used for the root node.\n * Either a string to use a HTML element or a component.\n */\n component: PropTypes.elementType,\n /**\n * The system prop that allows defining system overrides as well as additional CSS styles.\n */\n sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])\n} : void 0;\nexport default Box;","import { formatCurrencyAmount } from \"@cede/utils\";\nimport { CurrencyAmountFormatterProps, CurrencyAmountSizes } from \"./types\";\nimport { Typography } from \"@mui/material\";\nimport { Box } from \"@mui/system\";\n\nconst getTypography = (size: CurrencyAmountSizes) => {\n const typographies = {\n small: \"body2\",\n medium: \"h5\",\n large: \"h1\",\n };\n\n return typographies[size];\n};\n\nexport const CurrencyAmountFormatter = ({\n amount,\n colors,\n size,\n currency,\n local = \"en-US\",\n id,\n sx,\n hideBalance = false,\n}: CurrencyAmountFormatterProps) => {\n const formattedNumber = formatCurrencyAmount(amount * (currency?.rate ?? 1), local, currency?.symbol, hideBalance);\n const separatorIndex: number = formattedNumber.search(/[,.]/);\n return (\n \n getTypography(size)}\n component=\"span\"\n sx={{ color: colors.integer, ...(sx || {}) }}\n data-testid={`${id || \"\"}-integer`}\n >\n {separatorIndex === -1 ? formattedNumber : formattedNumber.slice(0, separatorIndex + 1)}\n \n {separatorIndex !== -1 && (\n getTypography(size)}\n component=\"span\"\n sx={{ color: colors.decimal, ...(sx || {}) }}\n data-testid={`${id || \"\"}-decimal`}\n >\n {formattedNumber.slice(separatorIndex + 1)}\n \n )}\n \n );\n};\n","import { userFacingMessages } from \"@cede/types\";\nimport { CurrencyAmountFormatter } from \"../../CurrencyAmountFormatter\";\nimport { Icon } from \"../../Icon\";\nimport { DropListWithIconItemElement } from \"../types\";\nimport { alpha, Box, Skeleton, Typography } from \"@mui/material\";\n\nexport const AmountDropListWithIconItemElement: DropListWithIconItemElement<{\n amount?: number;\n balance?: number;\n isLoading?: boolean;\n isDisabled?: boolean;\n disabledText?: string;\n}> = ({ setOpen, theme, shouldDisableItem, disabledTextItem, ...props }, option) => {\n const isDisabled = option.isDisabled || shouldDisableItem?.(option);\n\n return (\n {\n if (isDisabled) return;\n\n props.onClick && props.onClick(e);\n setOpen(false);\n }}\n sx={{\n \"& > img\": { mr: 2, flexShrink: 0 },\n '&[aria-selected=\"true\"]': {\n backgroundColor: alpha(theme.palette.background.default, 0.3) + \"!important\",\n },\n \"cursor\": isDisabled ? \"not-allowed\" : \"pointer\",\n }}\n >\n {option.img && (\n \n \n \n )}\n \n \n {option.label}\n \n \n {option.isLoading && !isDisabled && }\n {option.balance && !option.isLoading && (\n \n {option.balance} {option.label}\n \n )}\n {option.amount !== undefined && !option.isLoading && !isDisabled && (\n \n )}\n {isDisabled && (\n \n {option.disabledText ||\n (disabledTextItem\n ? disabledTextItem(option)\n : userFacingMessages.EXCHANGES_STATUSES.TEMPORARILY_UNAVAILABLE)}\n \n )}\n \n \n \n );\n};\n","import { Component, createElement } from 'react';\n\n/**\n * Detect Element Resize.\n * https://github.com/sdecima/javascript-detect-element-resize\n * Sebastian Decima\n *\n * Forked from version 0.5.3; includes the following modifications:\n * 1) Guard against unsafe 'window' and 'document' references (to support SSR).\n * 2) Defer initialization code via a top-level function wrapper (to support SSR).\n * 3) Avoid unnecessary reflows by not measuring size for scroll events bubbling from children.\n * 4) Add nonce for style element.\n * 5) Use 'export' statement over 'module.exports' assignment\n **/\n\n// Check `document` and `window` in case of server-side rendering\nlet windowObject;\nif (typeof window !== \"undefined\") {\n windowObject = window;\n\n // eslint-disable-next-line no-restricted-globals\n} else if (typeof self !== \"undefined\") {\n // eslint-disable-next-line no-restricted-globals\n windowObject = self;\n} else {\n windowObject = global;\n}\nlet cancelFrame = null;\nlet requestFrame = null;\nconst TIMEOUT_DURATION = 20;\nconst clearTimeoutFn = windowObject.clearTimeout;\nconst setTimeoutFn = windowObject.setTimeout;\nconst cancelAnimationFrameFn = windowObject.cancelAnimationFrame || windowObject.mozCancelAnimationFrame || windowObject.webkitCancelAnimationFrame;\nconst requestAnimationFrameFn = windowObject.requestAnimationFrame || windowObject.mozRequestAnimationFrame || windowObject.webkitRequestAnimationFrame;\nif (cancelAnimationFrameFn == null || requestAnimationFrameFn == null) {\n // For environments that don't support animation frame,\n // fallback to a setTimeout based approach.\n cancelFrame = clearTimeoutFn;\n requestFrame = function requestAnimationFrameViaSetTimeout(callback) {\n return setTimeoutFn(callback, TIMEOUT_DURATION);\n };\n} else {\n // Counter intuitively, environments that support animation frames can be trickier.\n // Chrome's \"Throttle non-visible cross-origin iframes\" flag can prevent rAFs from being called.\n // In this case, we should fallback to a setTimeout() implementation.\n cancelFrame = function cancelFrame([animationFrameID, timeoutID]) {\n cancelAnimationFrameFn(animationFrameID);\n clearTimeoutFn(timeoutID);\n };\n requestFrame = function requestAnimationFrameWithSetTimeoutFallback(callback) {\n const animationFrameID = requestAnimationFrameFn(function animationFrameCallback() {\n clearTimeoutFn(timeoutID);\n callback();\n });\n const timeoutID = setTimeoutFn(function timeoutCallback() {\n cancelAnimationFrameFn(animationFrameID);\n callback();\n }, TIMEOUT_DURATION);\n return [animationFrameID, timeoutID];\n };\n}\nfunction createDetectElementResize(nonce) {\n let animationKeyframes;\n let animationName;\n let animationStartEvent;\n let animationStyle;\n let checkTriggers;\n let resetTriggers;\n let scrollListener;\n const attachEvent = typeof document !== \"undefined\" && document.attachEvent;\n if (!attachEvent) {\n resetTriggers = function (element) {\n const triggers = element.__resizeTriggers__,\n expand = triggers.firstElementChild,\n contract = triggers.lastElementChild,\n expandChild = expand.firstElementChild;\n contract.scrollLeft = contract.scrollWidth;\n contract.scrollTop = contract.scrollHeight;\n expandChild.style.width = expand.offsetWidth + 1 + \"px\";\n expandChild.style.height = expand.offsetHeight + 1 + \"px\";\n expand.scrollLeft = expand.scrollWidth;\n expand.scrollTop = expand.scrollHeight;\n };\n checkTriggers = function (element) {\n return element.offsetWidth !== element.__resizeLast__.width || element.offsetHeight !== element.__resizeLast__.height;\n };\n scrollListener = function (e) {\n // Don't measure (which forces) reflow for scrolls that happen inside of children!\n if (e.target.className && typeof e.target.className.indexOf === \"function\" && e.target.className.indexOf(\"contract-trigger\") < 0 && e.target.className.indexOf(\"expand-trigger\") < 0) {\n return;\n }\n const element = this;\n resetTriggers(this);\n if (this.__resizeRAF__) {\n cancelFrame(this.__resizeRAF__);\n }\n this.__resizeRAF__ = requestFrame(function animationFrame() {\n if (checkTriggers(element)) {\n element.__resizeLast__.width = element.offsetWidth;\n element.__resizeLast__.height = element.offsetHeight;\n element.__resizeListeners__.forEach(function forEachResizeListener(fn) {\n fn.call(element, e);\n });\n }\n });\n };\n\n /* Detect CSS Animations support to detect element display/re-attach */\n let animation = false;\n let keyframeprefix = \"\";\n animationStartEvent = \"animationstart\";\n const domPrefixes = \"Webkit Moz O ms\".split(\" \");\n let startEvents = \"webkitAnimationStart animationstart oAnimationStart MSAnimationStart\".split(\" \");\n let pfx = \"\";\n {\n const elm = document.createElement(\"fakeelement\");\n if (elm.style.animationName !== undefined) {\n animation = true;\n }\n if (animation === false) {\n for (let i = 0; i < domPrefixes.length; i++) {\n if (elm.style[domPrefixes[i] + \"AnimationName\"] !== undefined) {\n pfx = domPrefixes[i];\n keyframeprefix = \"-\" + pfx.toLowerCase() + \"-\";\n animationStartEvent = startEvents[i];\n animation = true;\n break;\n }\n }\n }\n }\n animationName = \"resizeanim\";\n animationKeyframes = \"@\" + keyframeprefix + \"keyframes \" + animationName + \" { from { opacity: 0; } to { opacity: 0; } } \";\n animationStyle = keyframeprefix + \"animation: 1ms \" + animationName + \"; \";\n }\n const createStyles = function (doc) {\n if (!doc.getElementById(\"detectElementResize\")) {\n //opacity:0 works around a chrome bug https://code.google.com/p/chromium/issues/detail?id=286360\n const css = (animationKeyframes ? animationKeyframes : \"\") + \".resize-triggers { \" + (animationStyle ? animationStyle : \"\") + \"visibility: hidden; opacity: 0; } \" + '.resize-triggers, .resize-triggers > div, .contract-trigger:before { content: \" \"; display: block; position: absolute; top: 0; left: 0; height: 100%; width: 100%; overflow: hidden; z-index: -1; } .resize-triggers > div { background: #eee; overflow: auto; } .contract-trigger:before { width: 200%; height: 200%; }',\n head = doc.head || doc.getElementsByTagName(\"head\")[0],\n style = doc.createElement(\"style\");\n style.id = \"detectElementResize\";\n style.type = \"text/css\";\n if (nonce != null) {\n style.setAttribute(\"nonce\", nonce);\n }\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(doc.createTextNode(css));\n }\n head.appendChild(style);\n }\n };\n const addResizeListener = function (element, fn) {\n if (attachEvent) {\n element.attachEvent(\"onresize\", fn);\n } else {\n if (!element.__resizeTriggers__) {\n const doc = element.ownerDocument;\n const elementStyle = windowObject.getComputedStyle(element);\n if (elementStyle && elementStyle.position === \"static\") {\n element.style.position = \"relative\";\n }\n createStyles(doc);\n element.__resizeLast__ = {};\n element.__resizeListeners__ = [];\n (element.__resizeTriggers__ = doc.createElement(\"div\")).className = \"resize-triggers\";\n const expandTrigger = doc.createElement(\"div\");\n expandTrigger.className = \"expand-trigger\";\n expandTrigger.appendChild(doc.createElement(\"div\"));\n const contractTrigger = doc.createElement(\"div\");\n contractTrigger.className = \"contract-trigger\";\n element.__resizeTriggers__.appendChild(expandTrigger);\n element.__resizeTriggers__.appendChild(contractTrigger);\n element.appendChild(element.__resizeTriggers__);\n resetTriggers(element);\n element.addEventListener(\"scroll\", scrollListener, true);\n\n /* Listen for a css animation to detect element display/re-attach */\n if (animationStartEvent) {\n element.__resizeTriggers__.__animationListener__ = function animationListener(e) {\n if (e.animationName === animationName) {\n resetTriggers(element);\n }\n };\n element.__resizeTriggers__.addEventListener(animationStartEvent, element.__resizeTriggers__.__animationListener__);\n }\n }\n element.__resizeListeners__.push(fn);\n }\n };\n const removeResizeListener = function (element, fn) {\n if (attachEvent) {\n element.detachEvent(\"onresize\", fn);\n } else {\n element.__resizeListeners__.splice(element.__resizeListeners__.indexOf(fn), 1);\n if (!element.__resizeListeners__.length) {\n element.removeEventListener(\"scroll\", scrollListener, true);\n if (element.__resizeTriggers__.__animationListener__) {\n element.__resizeTriggers__.removeEventListener(animationStartEvent, element.__resizeTriggers__.__animationListener__);\n element.__resizeTriggers__.__animationListener__ = null;\n }\n try {\n element.__resizeTriggers__ = !element.removeChild(element.__resizeTriggers__);\n } catch (e) {\n // Preact compat; see developit/preact-compat/issues/228\n }\n }\n }\n };\n return {\n addResizeListener,\n removeResizeListener\n };\n}\n\nclass AutoSizer extends Component {\n constructor(...args) {\n super(...args);\n this.state = {\n height: this.props.defaultHeight || 0,\n scaledHeight: this.props.defaultHeight || 0,\n scaledWidth: this.props.defaultWidth || 0,\n width: this.props.defaultWidth || 0\n };\n this._autoSizer = null;\n this._detectElementResize = null;\n this._parentNode = null;\n this._resizeObserver = null;\n this._timeoutId = null;\n this._onResize = () => {\n this._timeoutId = null;\n const {\n disableHeight,\n disableWidth,\n onResize\n } = this.props;\n if (this._parentNode) {\n // Guard against AutoSizer component being removed from the DOM immediately after being added.\n // This can result in invalid style values which can result in NaN values if we don't handle them.\n // See issue #150 for more context.\n\n const style = window.getComputedStyle(this._parentNode) || {};\n const paddingLeft = parseFloat(style.paddingLeft || \"0\");\n const paddingRight = parseFloat(style.paddingRight || \"0\");\n const paddingTop = parseFloat(style.paddingTop || \"0\");\n const paddingBottom = parseFloat(style.paddingBottom || \"0\");\n const rect = this._parentNode.getBoundingClientRect();\n const scaledHeight = rect.height - paddingTop - paddingBottom;\n const scaledWidth = rect.width - paddingLeft - paddingRight;\n const height = this._parentNode.offsetHeight - paddingTop - paddingBottom;\n const width = this._parentNode.offsetWidth - paddingLeft - paddingRight;\n if (!disableHeight && (this.state.height !== height || this.state.scaledHeight !== scaledHeight) || !disableWidth && (this.state.width !== width || this.state.scaledWidth !== scaledWidth)) {\n this.setState({\n height,\n width,\n scaledHeight,\n scaledWidth\n });\n if (typeof onResize === \"function\") {\n onResize({\n height,\n scaledHeight,\n scaledWidth,\n width\n });\n }\n }\n }\n };\n this._setRef = autoSizer => {\n this._autoSizer = autoSizer;\n };\n }\n componentDidMount() {\n const {\n nonce\n } = this.props;\n const parentNode = this._autoSizer ? this._autoSizer.parentNode : null;\n if (parentNode != null && parentNode.ownerDocument && parentNode.ownerDocument.defaultView && parentNode instanceof parentNode.ownerDocument.defaultView.HTMLElement) {\n // Delay access of parentNode until mount.\n // This handles edge-cases where the component has already been unmounted before its ref has been set,\n // As well as libraries like react-lite which have a slightly different lifecycle.\n this._parentNode = parentNode;\n\n // Use ResizeObserver from the same context where parentNode (which we will observe) was defined\n // Using just global can result into onResize events not being emitted in cases with multiple realms\n const ResizeObserverInstance = parentNode.ownerDocument.defaultView.ResizeObserver;\n if (ResizeObserverInstance != null) {\n this._resizeObserver = new ResizeObserverInstance(() => {\n // Guard against \"ResizeObserver loop limit exceeded\" error;\n // could be triggered if the state update causes the ResizeObserver handler to run long.\n // See https://github.com/bvaughn/react-virtualized-auto-sizer/issues/55\n this._timeoutId = setTimeout(this._onResize, 0);\n });\n this._resizeObserver.observe(parentNode);\n } else {\n // Defer requiring resize handler in order to support server-side rendering.\n // See issue #41\n this._detectElementResize = createDetectElementResize(nonce);\n this._detectElementResize.addResizeListener(parentNode, this._onResize);\n }\n this._onResize();\n }\n }\n componentWillUnmount() {\n if (this._parentNode) {\n if (this._detectElementResize) {\n this._detectElementResize.removeResizeListener(this._parentNode, this._onResize);\n }\n if (this._timeoutId !== null) {\n clearTimeout(this._timeoutId);\n }\n if (this._resizeObserver) {\n this._resizeObserver.disconnect();\n }\n }\n }\n render() {\n const {\n children,\n defaultHeight,\n defaultWidth,\n disableHeight = false,\n disableWidth = false,\n doNotBailOutOnEmptyChildren = false,\n nonce,\n onResize,\n style = {},\n tagName = \"div\",\n ...rest\n } = this.props;\n const {\n height,\n scaledHeight,\n scaledWidth,\n width\n } = this.state;\n\n // Outer div should not force width/height since that may prevent containers from shrinking.\n // Inner component should overflow and use calculated width/height.\n // See issue #68 for more information.\n const outerStyle = {\n overflow: \"visible\"\n };\n const childParams = {};\n\n // Avoid rendering children before the initial measurements have been collected.\n // At best this would just be wasting cycles.\n let bailoutOnChildren = false;\n if (!disableHeight) {\n if (height === 0) {\n bailoutOnChildren = true;\n }\n outerStyle.height = 0;\n childParams.height = height;\n childParams.scaledHeight = scaledHeight;\n }\n if (!disableWidth) {\n if (width === 0) {\n bailoutOnChildren = true;\n }\n outerStyle.width = 0;\n childParams.width = width;\n childParams.scaledWidth = scaledWidth;\n }\n if (doNotBailOutOnEmptyChildren) {\n bailoutOnChildren = false;\n }\n return createElement(tagName, {\n ref: this._setRef,\n style: {\n ...outerStyle,\n ...style\n },\n ...rest\n }, !bailoutOnChildren && children(childParams));\n }\n}\n\nfunction isHeightAndWidthProps(props) {\n return props && props.disableHeight !== true && props.disableWidth !== true;\n}\nfunction isHeightOnlyProps(props) {\n return props && props.disableHeight !== true && props.disableWidth === true;\n}\nfunction isWidthOnlyProps(props) {\n return props && props.disableHeight === true && props.disableWidth !== true;\n}\n\nexport { AutoSizer as default, isHeightAndWidthProps, isHeightOnlyProps, isWidthOnlyProps };\n","var safeIsNaN = Number.isNaN ||\n function ponyfill(value) {\n return typeof value === 'number' && value !== value;\n };\nfunction isEqual(first, second) {\n if (first === second) {\n return true;\n }\n if (safeIsNaN(first) && safeIsNaN(second)) {\n return true;\n }\n return false;\n}\nfunction areInputsEqual(newInputs, lastInputs) {\n if (newInputs.length !== lastInputs.length) {\n return false;\n }\n for (var i = 0; i < newInputs.length; i++) {\n if (!isEqual(newInputs[i], lastInputs[i])) {\n return false;\n }\n }\n return true;\n}\n\nfunction memoizeOne(resultFn, isEqual) {\n if (isEqual === void 0) { isEqual = areInputsEqual; }\n var lastThis;\n var lastArgs = [];\n var lastResult;\n var calledOnce = false;\n function memoized() {\n var newArgs = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n newArgs[_i] = arguments[_i];\n }\n if (calledOnce && lastThis === this && isEqual(newArgs, lastArgs)) {\n return lastResult;\n }\n lastResult = resultFn.apply(this, newArgs);\n calledOnce = true;\n lastThis = this;\n lastArgs = newArgs;\n return lastResult;\n }\n return memoized;\n}\n\nexport default memoizeOne;\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport _assertThisInitialized from '@babel/runtime/helpers/esm/assertThisInitialized';\nimport _inheritsLoose from '@babel/runtime/helpers/esm/inheritsLoose';\nimport memoizeOne from 'memoize-one';\nimport { createElement, PureComponent } from 'react';\nimport _objectWithoutPropertiesLoose from '@babel/runtime/helpers/esm/objectWithoutPropertiesLoose';\n\n// Animation frame based implementation of setTimeout.\n// Inspired by Joe Lambert, https://gist.github.com/joelambert/1002116#file-requesttimeout-js\nvar hasNativePerformanceNow = typeof performance === 'object' && typeof performance.now === 'function';\nvar now = hasNativePerformanceNow ? function () {\n return performance.now();\n} : function () {\n return Date.now();\n};\nfunction cancelTimeout(timeoutID) {\n cancelAnimationFrame(timeoutID.id);\n}\nfunction requestTimeout(callback, delay) {\n var start = now();\n\n function tick() {\n if (now() - start >= delay) {\n callback.call(null);\n } else {\n timeoutID.id = requestAnimationFrame(tick);\n }\n }\n\n var timeoutID = {\n id: requestAnimationFrame(tick)\n };\n return timeoutID;\n}\n\nvar size = -1; // This utility copied from \"dom-helpers\" package.\n\nfunction getScrollbarSize(recalculate) {\n if (recalculate === void 0) {\n recalculate = false;\n }\n\n if (size === -1 || recalculate) {\n var div = document.createElement('div');\n var style = div.style;\n style.width = '50px';\n style.height = '50px';\n style.overflow = 'scroll';\n document.body.appendChild(div);\n size = div.offsetWidth - div.clientWidth;\n document.body.removeChild(div);\n }\n\n return size;\n}\nvar cachedRTLResult = null; // TRICKY According to the spec, scrollLeft should be negative for RTL aligned elements.\n// Chrome does not seem to adhere; its scrollLeft values are positive (measured relative to the left).\n// Safari's elastic bounce makes detecting this even more complicated wrt potential false positives.\n// The safest way to check this is to intentionally set a negative offset,\n// and then verify that the subsequent \"scroll\" event matches the negative offset.\n// If it does not match, then we can assume a non-standard RTL scroll implementation.\n\nfunction getRTLOffsetType(recalculate) {\n if (recalculate === void 0) {\n recalculate = false;\n }\n\n if (cachedRTLResult === null || recalculate) {\n var outerDiv = document.createElement('div');\n var outerStyle = outerDiv.style;\n outerStyle.width = '50px';\n outerStyle.height = '50px';\n outerStyle.overflow = 'scroll';\n outerStyle.direction = 'rtl';\n var innerDiv = document.createElement('div');\n var innerStyle = innerDiv.style;\n innerStyle.width = '100px';\n innerStyle.height = '100px';\n outerDiv.appendChild(innerDiv);\n document.body.appendChild(outerDiv);\n\n if (outerDiv.scrollLeft > 0) {\n cachedRTLResult = 'positive-descending';\n } else {\n outerDiv.scrollLeft = 1;\n\n if (outerDiv.scrollLeft === 0) {\n cachedRTLResult = 'negative';\n } else {\n cachedRTLResult = 'positive-ascending';\n }\n }\n\n document.body.removeChild(outerDiv);\n return cachedRTLResult;\n }\n\n return cachedRTLResult;\n}\n\nvar IS_SCROLLING_DEBOUNCE_INTERVAL = 150;\n\nvar defaultItemKey = function defaultItemKey(_ref) {\n var columnIndex = _ref.columnIndex,\n data = _ref.data,\n rowIndex = _ref.rowIndex;\n return rowIndex + \":\" + columnIndex;\n}; // In DEV mode, this Set helps us only log a warning once per component instance.\n// This avoids spamming the console every time a render happens.\n\n\nvar devWarningsOverscanCount = null;\nvar devWarningsOverscanRowsColumnsCount = null;\nvar devWarningsTagName = null;\n\nif (process.env.NODE_ENV !== 'production') {\n if (typeof window !== 'undefined' && typeof window.WeakSet !== 'undefined') {\n devWarningsOverscanCount = /*#__PURE__*/new WeakSet();\n devWarningsOverscanRowsColumnsCount = /*#__PURE__*/new WeakSet();\n devWarningsTagName = /*#__PURE__*/new WeakSet();\n }\n}\n\nfunction createGridComponent(_ref2) {\n var _class;\n\n var getColumnOffset = _ref2.getColumnOffset,\n getColumnStartIndexForOffset = _ref2.getColumnStartIndexForOffset,\n getColumnStopIndexForStartIndex = _ref2.getColumnStopIndexForStartIndex,\n getColumnWidth = _ref2.getColumnWidth,\n getEstimatedTotalHeight = _ref2.getEstimatedTotalHeight,\n getEstimatedTotalWidth = _ref2.getEstimatedTotalWidth,\n getOffsetForColumnAndAlignment = _ref2.getOffsetForColumnAndAlignment,\n getOffsetForRowAndAlignment = _ref2.getOffsetForRowAndAlignment,\n getRowHeight = _ref2.getRowHeight,\n getRowOffset = _ref2.getRowOffset,\n getRowStartIndexForOffset = _ref2.getRowStartIndexForOffset,\n getRowStopIndexForStartIndex = _ref2.getRowStopIndexForStartIndex,\n initInstanceProps = _ref2.initInstanceProps,\n shouldResetStyleCacheOnItemSizeChange = _ref2.shouldResetStyleCacheOnItemSizeChange,\n validateProps = _ref2.validateProps;\n return _class = /*#__PURE__*/function (_PureComponent) {\n _inheritsLoose(Grid, _PureComponent);\n\n // Always use explicit constructor for React components.\n // It produces less code after transpilation. (#26)\n // eslint-disable-next-line no-useless-constructor\n function Grid(props) {\n var _this;\n\n _this = _PureComponent.call(this, props) || this;\n _this._instanceProps = initInstanceProps(_this.props, _assertThisInitialized(_this));\n _this._resetIsScrollingTimeoutId = null;\n _this._outerRef = void 0;\n _this.state = {\n instance: _assertThisInitialized(_this),\n isScrolling: false,\n horizontalScrollDirection: 'forward',\n scrollLeft: typeof _this.props.initialScrollLeft === 'number' ? _this.props.initialScrollLeft : 0,\n scrollTop: typeof _this.props.initialScrollTop === 'number' ? _this.props.initialScrollTop : 0,\n scrollUpdateWasRequested: false,\n verticalScrollDirection: 'forward'\n };\n _this._callOnItemsRendered = void 0;\n _this._callOnItemsRendered = memoizeOne(function (overscanColumnStartIndex, overscanColumnStopIndex, overscanRowStartIndex, overscanRowStopIndex, visibleColumnStartIndex, visibleColumnStopIndex, visibleRowStartIndex, visibleRowStopIndex) {\n return _this.props.onItemsRendered({\n overscanColumnStartIndex: overscanColumnStartIndex,\n overscanColumnStopIndex: overscanColumnStopIndex,\n overscanRowStartIndex: overscanRowStartIndex,\n overscanRowStopIndex: overscanRowStopIndex,\n visibleColumnStartIndex: visibleColumnStartIndex,\n visibleColumnStopIndex: visibleColumnStopIndex,\n visibleRowStartIndex: visibleRowStartIndex,\n visibleRowStopIndex: visibleRowStopIndex\n });\n });\n _this._callOnScroll = void 0;\n _this._callOnScroll = memoizeOne(function (scrollLeft, scrollTop, horizontalScrollDirection, verticalScrollDirection, scrollUpdateWasRequested) {\n return _this.props.onScroll({\n horizontalScrollDirection: horizontalScrollDirection,\n scrollLeft: scrollLeft,\n scrollTop: scrollTop,\n verticalScrollDirection: verticalScrollDirection,\n scrollUpdateWasRequested: scrollUpdateWasRequested\n });\n });\n _this._getItemStyle = void 0;\n\n _this._getItemStyle = function (rowIndex, columnIndex) {\n var _this$props = _this.props,\n columnWidth = _this$props.columnWidth,\n direction = _this$props.direction,\n rowHeight = _this$props.rowHeight;\n\n var itemStyleCache = _this._getItemStyleCache(shouldResetStyleCacheOnItemSizeChange && columnWidth, shouldResetStyleCacheOnItemSizeChange && direction, shouldResetStyleCacheOnItemSizeChange && rowHeight);\n\n var key = rowIndex + \":\" + columnIndex;\n var style;\n\n if (itemStyleCache.hasOwnProperty(key)) {\n style = itemStyleCache[key];\n } else {\n var _offset = getColumnOffset(_this.props, columnIndex, _this._instanceProps);\n\n var isRtl = direction === 'rtl';\n itemStyleCache[key] = style = {\n position: 'absolute',\n left: isRtl ? undefined : _offset,\n right: isRtl ? _offset : undefined,\n top: getRowOffset(_this.props, rowIndex, _this._instanceProps),\n height: getRowHeight(_this.props, rowIndex, _this._instanceProps),\n width: getColumnWidth(_this.props, columnIndex, _this._instanceProps)\n };\n }\n\n return style;\n };\n\n _this._getItemStyleCache = void 0;\n _this._getItemStyleCache = memoizeOne(function (_, __, ___) {\n return {};\n });\n\n _this._onScroll = function (event) {\n var _event$currentTarget = event.currentTarget,\n clientHeight = _event$currentTarget.clientHeight,\n clientWidth = _event$currentTarget.clientWidth,\n scrollLeft = _event$currentTarget.scrollLeft,\n scrollTop = _event$currentTarget.scrollTop,\n scrollHeight = _event$currentTarget.scrollHeight,\n scrollWidth = _event$currentTarget.scrollWidth;\n\n _this.setState(function (prevState) {\n if (prevState.scrollLeft === scrollLeft && prevState.scrollTop === scrollTop) {\n // Scroll position may have been updated by cDM/cDU,\n // In which case we don't need to trigger another render,\n // And we don't want to update state.isScrolling.\n return null;\n }\n\n var direction = _this.props.direction; // TRICKY According to the spec, scrollLeft should be negative for RTL aligned elements.\n // This is not the case for all browsers though (e.g. Chrome reports values as positive, measured relative to the left).\n // It's also easier for this component if we convert offsets to the same format as they would be in for ltr.\n // So the simplest solution is to determine which browser behavior we're dealing with, and convert based on it.\n\n var calculatedScrollLeft = scrollLeft;\n\n if (direction === 'rtl') {\n switch (getRTLOffsetType()) {\n case 'negative':\n calculatedScrollLeft = -scrollLeft;\n break;\n\n case 'positive-descending':\n calculatedScrollLeft = scrollWidth - clientWidth - scrollLeft;\n break;\n }\n } // Prevent Safari's elastic scrolling from causing visual shaking when scrolling past bounds.\n\n\n calculatedScrollLeft = Math.max(0, Math.min(calculatedScrollLeft, scrollWidth - clientWidth));\n var calculatedScrollTop = Math.max(0, Math.min(scrollTop, scrollHeight - clientHeight));\n return {\n isScrolling: true,\n horizontalScrollDirection: prevState.scrollLeft < scrollLeft ? 'forward' : 'backward',\n scrollLeft: calculatedScrollLeft,\n scrollTop: calculatedScrollTop,\n verticalScrollDirection: prevState.scrollTop < scrollTop ? 'forward' : 'backward',\n scrollUpdateWasRequested: false\n };\n }, _this._resetIsScrollingDebounced);\n };\n\n _this._outerRefSetter = function (ref) {\n var outerRef = _this.props.outerRef;\n _this._outerRef = ref;\n\n if (typeof outerRef === 'function') {\n outerRef(ref);\n } else if (outerRef != null && typeof outerRef === 'object' && outerRef.hasOwnProperty('current')) {\n outerRef.current = ref;\n }\n };\n\n _this._resetIsScrollingDebounced = function () {\n if (_this._resetIsScrollingTimeoutId !== null) {\n cancelTimeout(_this._resetIsScrollingTimeoutId);\n }\n\n _this._resetIsScrollingTimeoutId = requestTimeout(_this._resetIsScrolling, IS_SCROLLING_DEBOUNCE_INTERVAL);\n };\n\n _this._resetIsScrolling = function () {\n _this._resetIsScrollingTimeoutId = null;\n\n _this.setState({\n isScrolling: false\n }, function () {\n // Clear style cache after state update has been committed.\n // This way we don't break pure sCU for items that don't use isScrolling param.\n _this._getItemStyleCache(-1);\n });\n };\n\n return _this;\n }\n\n Grid.getDerivedStateFromProps = function getDerivedStateFromProps(nextProps, prevState) {\n validateSharedProps(nextProps, prevState);\n validateProps(nextProps);\n return null;\n };\n\n var _proto = Grid.prototype;\n\n _proto.scrollTo = function scrollTo(_ref3) {\n var scrollLeft = _ref3.scrollLeft,\n scrollTop = _ref3.scrollTop;\n\n if (scrollLeft !== undefined) {\n scrollLeft = Math.max(0, scrollLeft);\n }\n\n if (scrollTop !== undefined) {\n scrollTop = Math.max(0, scrollTop);\n }\n\n this.setState(function (prevState) {\n if (scrollLeft === undefined) {\n scrollLeft = prevState.scrollLeft;\n }\n\n if (scrollTop === undefined) {\n scrollTop = prevState.scrollTop;\n }\n\n if (prevState.scrollLeft === scrollLeft && prevState.scrollTop === scrollTop) {\n return null;\n }\n\n return {\n horizontalScrollDirection: prevState.scrollLeft < scrollLeft ? 'forward' : 'backward',\n scrollLeft: scrollLeft,\n scrollTop: scrollTop,\n scrollUpdateWasRequested: true,\n verticalScrollDirection: prevState.scrollTop < scrollTop ? 'forward' : 'backward'\n };\n }, this._resetIsScrollingDebounced);\n };\n\n _proto.scrollToItem = function scrollToItem(_ref4) {\n var _ref4$align = _ref4.align,\n align = _ref4$align === void 0 ? 'auto' : _ref4$align,\n columnIndex = _ref4.columnIndex,\n rowIndex = _ref4.rowIndex;\n var _this$props2 = this.props,\n columnCount = _this$props2.columnCount,\n height = _this$props2.height,\n rowCount = _this$props2.rowCount,\n width = _this$props2.width;\n var _this$state = this.state,\n scrollLeft = _this$state.scrollLeft,\n scrollTop = _this$state.scrollTop;\n var scrollbarSize = getScrollbarSize();\n\n if (columnIndex !== undefined) {\n columnIndex = Math.max(0, Math.min(columnIndex, columnCount - 1));\n }\n\n if (rowIndex !== undefined) {\n rowIndex = Math.max(0, Math.min(rowIndex, rowCount - 1));\n }\n\n var estimatedTotalHeight = getEstimatedTotalHeight(this.props, this._instanceProps);\n var estimatedTotalWidth = getEstimatedTotalWidth(this.props, this._instanceProps); // The scrollbar size should be considered when scrolling an item into view,\n // to ensure it's fully visible.\n // But we only need to account for its size when it's actually visible.\n\n var horizontalScrollbarSize = estimatedTotalWidth > width ? scrollbarSize : 0;\n var verticalScrollbarSize = estimatedTotalHeight > height ? scrollbarSize : 0;\n this.scrollTo({\n scrollLeft: columnIndex !== undefined ? getOffsetForColumnAndAlignment(this.props, columnIndex, align, scrollLeft, this._instanceProps, verticalScrollbarSize) : scrollLeft,\n scrollTop: rowIndex !== undefined ? getOffsetForRowAndAlignment(this.props, rowIndex, align, scrollTop, this._instanceProps, horizontalScrollbarSize) : scrollTop\n });\n };\n\n _proto.componentDidMount = function componentDidMount() {\n var _this$props3 = this.props,\n initialScrollLeft = _this$props3.initialScrollLeft,\n initialScrollTop = _this$props3.initialScrollTop;\n\n if (this._outerRef != null) {\n var outerRef = this._outerRef;\n\n if (typeof initialScrollLeft === 'number') {\n outerRef.scrollLeft = initialScrollLeft;\n }\n\n if (typeof initialScrollTop === 'number') {\n outerRef.scrollTop = initialScrollTop;\n }\n }\n\n this._callPropsCallbacks();\n };\n\n _proto.componentDidUpdate = function componentDidUpdate() {\n var direction = this.props.direction;\n var _this$state2 = this.state,\n scrollLeft = _this$state2.scrollLeft,\n scrollTop = _this$state2.scrollTop,\n scrollUpdateWasRequested = _this$state2.scrollUpdateWasRequested;\n\n if (scrollUpdateWasRequested && this._outerRef != null) {\n // TRICKY According to the spec, scrollLeft should be negative for RTL aligned elements.\n // This is not the case for all browsers though (e.g. Chrome reports values as positive, measured relative to the left).\n // So we need to determine which browser behavior we're dealing with, and mimic it.\n var outerRef = this._outerRef;\n\n if (direction === 'rtl') {\n switch (getRTLOffsetType()) {\n case 'negative':\n outerRef.scrollLeft = -scrollLeft;\n break;\n\n case 'positive-ascending':\n outerRef.scrollLeft = scrollLeft;\n break;\n\n default:\n var clientWidth = outerRef.clientWidth,\n scrollWidth = outerRef.scrollWidth;\n outerRef.scrollLeft = scrollWidth - clientWidth - scrollLeft;\n break;\n }\n } else {\n outerRef.scrollLeft = Math.max(0, scrollLeft);\n }\n\n outerRef.scrollTop = Math.max(0, scrollTop);\n }\n\n this._callPropsCallbacks();\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n if (this._resetIsScrollingTimeoutId !== null) {\n cancelTimeout(this._resetIsScrollingTimeoutId);\n }\n };\n\n _proto.render = function render() {\n var _this$props4 = this.props,\n children = _this$props4.children,\n className = _this$props4.className,\n columnCount = _this$props4.columnCount,\n direction = _this$props4.direction,\n height = _this$props4.height,\n innerRef = _this$props4.innerRef,\n innerElementType = _this$props4.innerElementType,\n innerTagName = _this$props4.innerTagName,\n itemData = _this$props4.itemData,\n _this$props4$itemKey = _this$props4.itemKey,\n itemKey = _this$props4$itemKey === void 0 ? defaultItemKey : _this$props4$itemKey,\n outerElementType = _this$props4.outerElementType,\n outerTagName = _this$props4.outerTagName,\n rowCount = _this$props4.rowCount,\n style = _this$props4.style,\n useIsScrolling = _this$props4.useIsScrolling,\n width = _this$props4.width;\n var isScrolling = this.state.isScrolling;\n\n var _this$_getHorizontalR = this._getHorizontalRangeToRender(),\n columnStartIndex = _this$_getHorizontalR[0],\n columnStopIndex = _this$_getHorizontalR[1];\n\n var _this$_getVerticalRan = this._getVerticalRangeToRender(),\n rowStartIndex = _this$_getVerticalRan[0],\n rowStopIndex = _this$_getVerticalRan[1];\n\n var items = [];\n\n if (columnCount > 0 && rowCount) {\n for (var _rowIndex = rowStartIndex; _rowIndex <= rowStopIndex; _rowIndex++) {\n for (var _columnIndex = columnStartIndex; _columnIndex <= columnStopIndex; _columnIndex++) {\n items.push(createElement(children, {\n columnIndex: _columnIndex,\n data: itemData,\n isScrolling: useIsScrolling ? isScrolling : undefined,\n key: itemKey({\n columnIndex: _columnIndex,\n data: itemData,\n rowIndex: _rowIndex\n }),\n rowIndex: _rowIndex,\n style: this._getItemStyle(_rowIndex, _columnIndex)\n }));\n }\n }\n } // Read this value AFTER items have been created,\n // So their actual sizes (if variable) are taken into consideration.\n\n\n var estimatedTotalHeight = getEstimatedTotalHeight(this.props, this._instanceProps);\n var estimatedTotalWidth = getEstimatedTotalWidth(this.props, this._instanceProps);\n return createElement(outerElementType || outerTagName || 'div', {\n className: className,\n onScroll: this._onScroll,\n ref: this._outerRefSetter,\n style: _extends({\n position: 'relative',\n height: height,\n width: width,\n overflow: 'auto',\n WebkitOverflowScrolling: 'touch',\n willChange: 'transform',\n direction: direction\n }, style)\n }, createElement(innerElementType || innerTagName || 'div', {\n children: items,\n ref: innerRef,\n style: {\n height: estimatedTotalHeight,\n pointerEvents: isScrolling ? 'none' : undefined,\n width: estimatedTotalWidth\n }\n }));\n };\n\n _proto._callPropsCallbacks = function _callPropsCallbacks() {\n var _this$props5 = this.props,\n columnCount = _this$props5.columnCount,\n onItemsRendered = _this$props5.onItemsRendered,\n onScroll = _this$props5.onScroll,\n rowCount = _this$props5.rowCount;\n\n if (typeof onItemsRendered === 'function') {\n if (columnCount > 0 && rowCount > 0) {\n var _this$_getHorizontalR2 = this._getHorizontalRangeToRender(),\n _overscanColumnStartIndex = _this$_getHorizontalR2[0],\n _overscanColumnStopIndex = _this$_getHorizontalR2[1],\n _visibleColumnStartIndex = _this$_getHorizontalR2[2],\n _visibleColumnStopIndex = _this$_getHorizontalR2[3];\n\n var _this$_getVerticalRan2 = this._getVerticalRangeToRender(),\n _overscanRowStartIndex = _this$_getVerticalRan2[0],\n _overscanRowStopIndex = _this$_getVerticalRan2[1],\n _visibleRowStartIndex = _this$_getVerticalRan2[2],\n _visibleRowStopIndex = _this$_getVerticalRan2[3];\n\n this._callOnItemsRendered(_overscanColumnStartIndex, _overscanColumnStopIndex, _overscanRowStartIndex, _overscanRowStopIndex, _visibleColumnStartIndex, _visibleColumnStopIndex, _visibleRowStartIndex, _visibleRowStopIndex);\n }\n }\n\n if (typeof onScroll === 'function') {\n var _this$state3 = this.state,\n _horizontalScrollDirection = _this$state3.horizontalScrollDirection,\n _scrollLeft = _this$state3.scrollLeft,\n _scrollTop = _this$state3.scrollTop,\n _scrollUpdateWasRequested = _this$state3.scrollUpdateWasRequested,\n _verticalScrollDirection = _this$state3.verticalScrollDirection;\n\n this._callOnScroll(_scrollLeft, _scrollTop, _horizontalScrollDirection, _verticalScrollDirection, _scrollUpdateWasRequested);\n }\n } // Lazily create and cache item styles while scrolling,\n // So that pure component sCU will prevent re-renders.\n // We maintain this cache, and pass a style prop rather than index,\n // So that List can clear cached styles and force item re-render if necessary.\n ;\n\n _proto._getHorizontalRangeToRender = function _getHorizontalRangeToRender() {\n var _this$props6 = this.props,\n columnCount = _this$props6.columnCount,\n overscanColumnCount = _this$props6.overscanColumnCount,\n overscanColumnsCount = _this$props6.overscanColumnsCount,\n overscanCount = _this$props6.overscanCount,\n rowCount = _this$props6.rowCount;\n var _this$state4 = this.state,\n horizontalScrollDirection = _this$state4.horizontalScrollDirection,\n isScrolling = _this$state4.isScrolling,\n scrollLeft = _this$state4.scrollLeft;\n var overscanCountResolved = overscanColumnCount || overscanColumnsCount || overscanCount || 1;\n\n if (columnCount === 0 || rowCount === 0) {\n return [0, 0, 0, 0];\n }\n\n var startIndex = getColumnStartIndexForOffset(this.props, scrollLeft, this._instanceProps);\n var stopIndex = getColumnStopIndexForStartIndex(this.props, startIndex, scrollLeft, this._instanceProps); // Overscan by one item in each direction so that tab/focus works.\n // If there isn't at least one extra item, tab loops back around.\n\n var overscanBackward = !isScrolling || horizontalScrollDirection === 'backward' ? Math.max(1, overscanCountResolved) : 1;\n var overscanForward = !isScrolling || horizontalScrollDirection === 'forward' ? Math.max(1, overscanCountResolved) : 1;\n return [Math.max(0, startIndex - overscanBackward), Math.max(0, Math.min(columnCount - 1, stopIndex + overscanForward)), startIndex, stopIndex];\n };\n\n _proto._getVerticalRangeToRender = function _getVerticalRangeToRender() {\n var _this$props7 = this.props,\n columnCount = _this$props7.columnCount,\n overscanCount = _this$props7.overscanCount,\n overscanRowCount = _this$props7.overscanRowCount,\n overscanRowsCount = _this$props7.overscanRowsCount,\n rowCount = _this$props7.rowCount;\n var _this$state5 = this.state,\n isScrolling = _this$state5.isScrolling,\n verticalScrollDirection = _this$state5.verticalScrollDirection,\n scrollTop = _this$state5.scrollTop;\n var overscanCountResolved = overscanRowCount || overscanRowsCount || overscanCount || 1;\n\n if (columnCount === 0 || rowCount === 0) {\n return [0, 0, 0, 0];\n }\n\n var startIndex = getRowStartIndexForOffset(this.props, scrollTop, this._instanceProps);\n var stopIndex = getRowStopIndexForStartIndex(this.props, startIndex, scrollTop, this._instanceProps); // Overscan by one item in each direction so that tab/focus works.\n // If there isn't at least one extra item, tab loops back around.\n\n var overscanBackward = !isScrolling || verticalScrollDirection === 'backward' ? Math.max(1, overscanCountResolved) : 1;\n var overscanForward = !isScrolling || verticalScrollDirection === 'forward' ? Math.max(1, overscanCountResolved) : 1;\n return [Math.max(0, startIndex - overscanBackward), Math.max(0, Math.min(rowCount - 1, stopIndex + overscanForward)), startIndex, stopIndex];\n };\n\n return Grid;\n }(PureComponent), _class.defaultProps = {\n direction: 'ltr',\n itemData: undefined,\n useIsScrolling: false\n }, _class;\n}\n\nvar validateSharedProps = function validateSharedProps(_ref5, _ref6) {\n var children = _ref5.children,\n direction = _ref5.direction,\n height = _ref5.height,\n innerTagName = _ref5.innerTagName,\n outerTagName = _ref5.outerTagName,\n overscanColumnsCount = _ref5.overscanColumnsCount,\n overscanCount = _ref5.overscanCount,\n overscanRowsCount = _ref5.overscanRowsCount,\n width = _ref5.width;\n var instance = _ref6.instance;\n\n if (process.env.NODE_ENV !== 'production') {\n if (typeof overscanCount === 'number') {\n if (devWarningsOverscanCount && !devWarningsOverscanCount.has(instance)) {\n devWarningsOverscanCount.add(instance);\n console.warn('The overscanCount prop has been deprecated. ' + 'Please use the overscanColumnCount and overscanRowCount props instead.');\n }\n }\n\n if (typeof overscanColumnsCount === 'number' || typeof overscanRowsCount === 'number') {\n if (devWarningsOverscanRowsColumnsCount && !devWarningsOverscanRowsColumnsCount.has(instance)) {\n devWarningsOverscanRowsColumnsCount.add(instance);\n console.warn('The overscanColumnsCount and overscanRowsCount props have been deprecated. ' + 'Please use the overscanColumnCount and overscanRowCount props instead.');\n }\n }\n\n if (innerTagName != null || outerTagName != null) {\n if (devWarningsTagName && !devWarningsTagName.has(instance)) {\n devWarningsTagName.add(instance);\n console.warn('The innerTagName and outerTagName props have been deprecated. ' + 'Please use the innerElementType and outerElementType props instead.');\n }\n }\n\n if (children == null) {\n throw Error('An invalid \"children\" prop has been specified. ' + 'Value should be a React component. ' + (\"\\\"\" + (children === null ? 'null' : typeof children) + \"\\\" was specified.\"));\n }\n\n switch (direction) {\n case 'ltr':\n case 'rtl':\n // Valid values\n break;\n\n default:\n throw Error('An invalid \"direction\" prop has been specified. ' + 'Value should be either \"ltr\" or \"rtl\". ' + (\"\\\"\" + direction + \"\\\" was specified.\"));\n }\n\n if (typeof width !== 'number') {\n throw Error('An invalid \"width\" prop has been specified. ' + 'Grids must specify a number for width. ' + (\"\\\"\" + (width === null ? 'null' : typeof width) + \"\\\" was specified.\"));\n }\n\n if (typeof height !== 'number') {\n throw Error('An invalid \"height\" prop has been specified. ' + 'Grids must specify a number for height. ' + (\"\\\"\" + (height === null ? 'null' : typeof height) + \"\\\" was specified.\"));\n }\n }\n};\n\nvar DEFAULT_ESTIMATED_ITEM_SIZE = 50;\n\nvar getEstimatedTotalHeight = function getEstimatedTotalHeight(_ref, _ref2) {\n var rowCount = _ref.rowCount;\n var rowMetadataMap = _ref2.rowMetadataMap,\n estimatedRowHeight = _ref2.estimatedRowHeight,\n lastMeasuredRowIndex = _ref2.lastMeasuredRowIndex;\n var totalSizeOfMeasuredRows = 0; // Edge case check for when the number of items decreases while a scroll is in progress.\n // https://github.com/bvaughn/react-window/pull/138\n\n if (lastMeasuredRowIndex >= rowCount) {\n lastMeasuredRowIndex = rowCount - 1;\n }\n\n if (lastMeasuredRowIndex >= 0) {\n var itemMetadata = rowMetadataMap[lastMeasuredRowIndex];\n totalSizeOfMeasuredRows = itemMetadata.offset + itemMetadata.size;\n }\n\n var numUnmeasuredItems = rowCount - lastMeasuredRowIndex - 1;\n var totalSizeOfUnmeasuredItems = numUnmeasuredItems * estimatedRowHeight;\n return totalSizeOfMeasuredRows + totalSizeOfUnmeasuredItems;\n};\n\nvar getEstimatedTotalWidth = function getEstimatedTotalWidth(_ref3, _ref4) {\n var columnCount = _ref3.columnCount;\n var columnMetadataMap = _ref4.columnMetadataMap,\n estimatedColumnWidth = _ref4.estimatedColumnWidth,\n lastMeasuredColumnIndex = _ref4.lastMeasuredColumnIndex;\n var totalSizeOfMeasuredRows = 0; // Edge case check for when the number of items decreases while a scroll is in progress.\n // https://github.com/bvaughn/react-window/pull/138\n\n if (lastMeasuredColumnIndex >= columnCount) {\n lastMeasuredColumnIndex = columnCount - 1;\n }\n\n if (lastMeasuredColumnIndex >= 0) {\n var itemMetadata = columnMetadataMap[lastMeasuredColumnIndex];\n totalSizeOfMeasuredRows = itemMetadata.offset + itemMetadata.size;\n }\n\n var numUnmeasuredItems = columnCount - lastMeasuredColumnIndex - 1;\n var totalSizeOfUnmeasuredItems = numUnmeasuredItems * estimatedColumnWidth;\n return totalSizeOfMeasuredRows + totalSizeOfUnmeasuredItems;\n};\n\nvar getItemMetadata = function getItemMetadata(itemType, props, index, instanceProps) {\n var itemMetadataMap, itemSize, lastMeasuredIndex;\n\n if (itemType === 'column') {\n itemMetadataMap = instanceProps.columnMetadataMap;\n itemSize = props.columnWidth;\n lastMeasuredIndex = instanceProps.lastMeasuredColumnIndex;\n } else {\n itemMetadataMap = instanceProps.rowMetadataMap;\n itemSize = props.rowHeight;\n lastMeasuredIndex = instanceProps.lastMeasuredRowIndex;\n }\n\n if (index > lastMeasuredIndex) {\n var offset = 0;\n\n if (lastMeasuredIndex >= 0) {\n var itemMetadata = itemMetadataMap[lastMeasuredIndex];\n offset = itemMetadata.offset + itemMetadata.size;\n }\n\n for (var i = lastMeasuredIndex + 1; i <= index; i++) {\n var size = itemSize(i);\n itemMetadataMap[i] = {\n offset: offset,\n size: size\n };\n offset += size;\n }\n\n if (itemType === 'column') {\n instanceProps.lastMeasuredColumnIndex = index;\n } else {\n instanceProps.lastMeasuredRowIndex = index;\n }\n }\n\n return itemMetadataMap[index];\n};\n\nvar findNearestItem = function findNearestItem(itemType, props, instanceProps, offset) {\n var itemMetadataMap, lastMeasuredIndex;\n\n if (itemType === 'column') {\n itemMetadataMap = instanceProps.columnMetadataMap;\n lastMeasuredIndex = instanceProps.lastMeasuredColumnIndex;\n } else {\n itemMetadataMap = instanceProps.rowMetadataMap;\n lastMeasuredIndex = instanceProps.lastMeasuredRowIndex;\n }\n\n var lastMeasuredItemOffset = lastMeasuredIndex > 0 ? itemMetadataMap[lastMeasuredIndex].offset : 0;\n\n if (lastMeasuredItemOffset >= offset) {\n // If we've already measured items within this range just use a binary search as it's faster.\n return findNearestItemBinarySearch(itemType, props, instanceProps, lastMeasuredIndex, 0, offset);\n } else {\n // If we haven't yet measured this high, fallback to an exponential search with an inner binary search.\n // The exponential search avoids pre-computing sizes for the full set of items as a binary search would.\n // The overall complexity for this approach is O(log n).\n return findNearestItemExponentialSearch(itemType, props, instanceProps, Math.max(0, lastMeasuredIndex), offset);\n }\n};\n\nvar findNearestItemBinarySearch = function findNearestItemBinarySearch(itemType, props, instanceProps, high, low, offset) {\n while (low <= high) {\n var middle = low + Math.floor((high - low) / 2);\n var currentOffset = getItemMetadata(itemType, props, middle, instanceProps).offset;\n\n if (currentOffset === offset) {\n return middle;\n } else if (currentOffset < offset) {\n low = middle + 1;\n } else if (currentOffset > offset) {\n high = middle - 1;\n }\n }\n\n if (low > 0) {\n return low - 1;\n } else {\n return 0;\n }\n};\n\nvar findNearestItemExponentialSearch = function findNearestItemExponentialSearch(itemType, props, instanceProps, index, offset) {\n var itemCount = itemType === 'column' ? props.columnCount : props.rowCount;\n var interval = 1;\n\n while (index < itemCount && getItemMetadata(itemType, props, index, instanceProps).offset < offset) {\n index += interval;\n interval *= 2;\n }\n\n return findNearestItemBinarySearch(itemType, props, instanceProps, Math.min(index, itemCount - 1), Math.floor(index / 2), offset);\n};\n\nvar getOffsetForIndexAndAlignment = function getOffsetForIndexAndAlignment(itemType, props, index, align, scrollOffset, instanceProps, scrollbarSize) {\n var size = itemType === 'column' ? props.width : props.height;\n var itemMetadata = getItemMetadata(itemType, props, index, instanceProps); // Get estimated total size after ItemMetadata is computed,\n // To ensure it reflects actual measurements instead of just estimates.\n\n var estimatedTotalSize = itemType === 'column' ? getEstimatedTotalWidth(props, instanceProps) : getEstimatedTotalHeight(props, instanceProps);\n var maxOffset = Math.max(0, Math.min(estimatedTotalSize - size, itemMetadata.offset));\n var minOffset = Math.max(0, itemMetadata.offset - size + scrollbarSize + itemMetadata.size);\n\n if (align === 'smart') {\n if (scrollOffset >= minOffset - size && scrollOffset <= maxOffset + size) {\n align = 'auto';\n } else {\n align = 'center';\n }\n }\n\n switch (align) {\n case 'start':\n return maxOffset;\n\n case 'end':\n return minOffset;\n\n case 'center':\n return Math.round(minOffset + (maxOffset - minOffset) / 2);\n\n case 'auto':\n default:\n if (scrollOffset >= minOffset && scrollOffset <= maxOffset) {\n return scrollOffset;\n } else if (minOffset > maxOffset) {\n // Because we only take into account the scrollbar size when calculating minOffset\n // this value can be larger than maxOffset when at the end of the list\n return minOffset;\n } else if (scrollOffset < minOffset) {\n return minOffset;\n } else {\n return maxOffset;\n }\n\n }\n};\n\nvar VariableSizeGrid = /*#__PURE__*/createGridComponent({\n getColumnOffset: function getColumnOffset(props, index, instanceProps) {\n return getItemMetadata('column', props, index, instanceProps).offset;\n },\n getColumnStartIndexForOffset: function getColumnStartIndexForOffset(props, scrollLeft, instanceProps) {\n return findNearestItem('column', props, instanceProps, scrollLeft);\n },\n getColumnStopIndexForStartIndex: function getColumnStopIndexForStartIndex(props, startIndex, scrollLeft, instanceProps) {\n var columnCount = props.columnCount,\n width = props.width;\n var itemMetadata = getItemMetadata('column', props, startIndex, instanceProps);\n var maxOffset = scrollLeft + width;\n var offset = itemMetadata.offset + itemMetadata.size;\n var stopIndex = startIndex;\n\n while (stopIndex < columnCount - 1 && offset < maxOffset) {\n stopIndex++;\n offset += getItemMetadata('column', props, stopIndex, instanceProps).size;\n }\n\n return stopIndex;\n },\n getColumnWidth: function getColumnWidth(props, index, instanceProps) {\n return instanceProps.columnMetadataMap[index].size;\n },\n getEstimatedTotalHeight: getEstimatedTotalHeight,\n getEstimatedTotalWidth: getEstimatedTotalWidth,\n getOffsetForColumnAndAlignment: function getOffsetForColumnAndAlignment(props, index, align, scrollOffset, instanceProps, scrollbarSize) {\n return getOffsetForIndexAndAlignment('column', props, index, align, scrollOffset, instanceProps, scrollbarSize);\n },\n getOffsetForRowAndAlignment: function getOffsetForRowAndAlignment(props, index, align, scrollOffset, instanceProps, scrollbarSize) {\n return getOffsetForIndexAndAlignment('row', props, index, align, scrollOffset, instanceProps, scrollbarSize);\n },\n getRowOffset: function getRowOffset(props, index, instanceProps) {\n return getItemMetadata('row', props, index, instanceProps).offset;\n },\n getRowHeight: function getRowHeight(props, index, instanceProps) {\n return instanceProps.rowMetadataMap[index].size;\n },\n getRowStartIndexForOffset: function getRowStartIndexForOffset(props, scrollTop, instanceProps) {\n return findNearestItem('row', props, instanceProps, scrollTop);\n },\n getRowStopIndexForStartIndex: function getRowStopIndexForStartIndex(props, startIndex, scrollTop, instanceProps) {\n var rowCount = props.rowCount,\n height = props.height;\n var itemMetadata = getItemMetadata('row', props, startIndex, instanceProps);\n var maxOffset = scrollTop + height;\n var offset = itemMetadata.offset + itemMetadata.size;\n var stopIndex = startIndex;\n\n while (stopIndex < rowCount - 1 && offset < maxOffset) {\n stopIndex++;\n offset += getItemMetadata('row', props, stopIndex, instanceProps).size;\n }\n\n return stopIndex;\n },\n initInstanceProps: function initInstanceProps(props, instance) {\n var _ref5 = props,\n estimatedColumnWidth = _ref5.estimatedColumnWidth,\n estimatedRowHeight = _ref5.estimatedRowHeight;\n var instanceProps = {\n columnMetadataMap: {},\n estimatedColumnWidth: estimatedColumnWidth || DEFAULT_ESTIMATED_ITEM_SIZE,\n estimatedRowHeight: estimatedRowHeight || DEFAULT_ESTIMATED_ITEM_SIZE,\n lastMeasuredColumnIndex: -1,\n lastMeasuredRowIndex: -1,\n rowMetadataMap: {}\n };\n\n instance.resetAfterColumnIndex = function (columnIndex, shouldForceUpdate) {\n if (shouldForceUpdate === void 0) {\n shouldForceUpdate = true;\n }\n\n instance.resetAfterIndices({\n columnIndex: columnIndex,\n shouldForceUpdate: shouldForceUpdate\n });\n };\n\n instance.resetAfterRowIndex = function (rowIndex, shouldForceUpdate) {\n if (shouldForceUpdate === void 0) {\n shouldForceUpdate = true;\n }\n\n instance.resetAfterIndices({\n rowIndex: rowIndex,\n shouldForceUpdate: shouldForceUpdate\n });\n };\n\n instance.resetAfterIndices = function (_ref6) {\n var columnIndex = _ref6.columnIndex,\n rowIndex = _ref6.rowIndex,\n _ref6$shouldForceUpda = _ref6.shouldForceUpdate,\n shouldForceUpdate = _ref6$shouldForceUpda === void 0 ? true : _ref6$shouldForceUpda;\n\n if (typeof columnIndex === 'number') {\n instanceProps.lastMeasuredColumnIndex = Math.min(instanceProps.lastMeasuredColumnIndex, columnIndex - 1);\n }\n\n if (typeof rowIndex === 'number') {\n instanceProps.lastMeasuredRowIndex = Math.min(instanceProps.lastMeasuredRowIndex, rowIndex - 1);\n } // We could potentially optimize further by only evicting styles after this index,\n // But since styles are only cached while scrolling is in progress-\n // It seems an unnecessary optimization.\n // It's unlikely that resetAfterIndex() will be called while a user is scrolling.\n\n\n instance._getItemStyleCache(-1);\n\n if (shouldForceUpdate) {\n instance.forceUpdate();\n }\n };\n\n return instanceProps;\n },\n shouldResetStyleCacheOnItemSizeChange: false,\n validateProps: function validateProps(_ref7) {\n var columnWidth = _ref7.columnWidth,\n rowHeight = _ref7.rowHeight;\n\n if (process.env.NODE_ENV !== 'production') {\n if (typeof columnWidth !== 'function') {\n throw Error('An invalid \"columnWidth\" prop has been specified. ' + 'Value should be a function. ' + (\"\\\"\" + (columnWidth === null ? 'null' : typeof columnWidth) + \"\\\" was specified.\"));\n } else if (typeof rowHeight !== 'function') {\n throw Error('An invalid \"rowHeight\" prop has been specified. ' + 'Value should be a function. ' + (\"\\\"\" + (rowHeight === null ? 'null' : typeof rowHeight) + \"\\\" was specified.\"));\n }\n }\n }\n});\n\nvar IS_SCROLLING_DEBOUNCE_INTERVAL$1 = 150;\n\nvar defaultItemKey$1 = function defaultItemKey(index, data) {\n return index;\n}; // In DEV mode, this Set helps us only log a warning once per component instance.\n// This avoids spamming the console every time a render happens.\n\n\nvar devWarningsDirection = null;\nvar devWarningsTagName$1 = null;\n\nif (process.env.NODE_ENV !== 'production') {\n if (typeof window !== 'undefined' && typeof window.WeakSet !== 'undefined') {\n devWarningsDirection = /*#__PURE__*/new WeakSet();\n devWarningsTagName$1 = /*#__PURE__*/new WeakSet();\n }\n}\n\nfunction createListComponent(_ref) {\n var _class;\n\n var getItemOffset = _ref.getItemOffset,\n getEstimatedTotalSize = _ref.getEstimatedTotalSize,\n getItemSize = _ref.getItemSize,\n getOffsetForIndexAndAlignment = _ref.getOffsetForIndexAndAlignment,\n getStartIndexForOffset = _ref.getStartIndexForOffset,\n getStopIndexForStartIndex = _ref.getStopIndexForStartIndex,\n initInstanceProps = _ref.initInstanceProps,\n shouldResetStyleCacheOnItemSizeChange = _ref.shouldResetStyleCacheOnItemSizeChange,\n validateProps = _ref.validateProps;\n return _class = /*#__PURE__*/function (_PureComponent) {\n _inheritsLoose(List, _PureComponent);\n\n // Always use explicit constructor for React components.\n // It produces less code after transpilation. (#26)\n // eslint-disable-next-line no-useless-constructor\n function List(props) {\n var _this;\n\n _this = _PureComponent.call(this, props) || this;\n _this._instanceProps = initInstanceProps(_this.props, _assertThisInitialized(_this));\n _this._outerRef = void 0;\n _this._resetIsScrollingTimeoutId = null;\n _this.state = {\n instance: _assertThisInitialized(_this),\n isScrolling: false,\n scrollDirection: 'forward',\n scrollOffset: typeof _this.props.initialScrollOffset === 'number' ? _this.props.initialScrollOffset : 0,\n scrollUpdateWasRequested: false\n };\n _this._callOnItemsRendered = void 0;\n _this._callOnItemsRendered = memoizeOne(function (overscanStartIndex, overscanStopIndex, visibleStartIndex, visibleStopIndex) {\n return _this.props.onItemsRendered({\n overscanStartIndex: overscanStartIndex,\n overscanStopIndex: overscanStopIndex,\n visibleStartIndex: visibleStartIndex,\n visibleStopIndex: visibleStopIndex\n });\n });\n _this._callOnScroll = void 0;\n _this._callOnScroll = memoizeOne(function (scrollDirection, scrollOffset, scrollUpdateWasRequested) {\n return _this.props.onScroll({\n scrollDirection: scrollDirection,\n scrollOffset: scrollOffset,\n scrollUpdateWasRequested: scrollUpdateWasRequested\n });\n });\n _this._getItemStyle = void 0;\n\n _this._getItemStyle = function (index) {\n var _this$props = _this.props,\n direction = _this$props.direction,\n itemSize = _this$props.itemSize,\n layout = _this$props.layout;\n\n var itemStyleCache = _this._getItemStyleCache(shouldResetStyleCacheOnItemSizeChange && itemSize, shouldResetStyleCacheOnItemSizeChange && layout, shouldResetStyleCacheOnItemSizeChange && direction);\n\n var style;\n\n if (itemStyleCache.hasOwnProperty(index)) {\n style = itemStyleCache[index];\n } else {\n var _offset = getItemOffset(_this.props, index, _this._instanceProps);\n\n var size = getItemSize(_this.props, index, _this._instanceProps); // TODO Deprecate direction \"horizontal\"\n\n var isHorizontal = direction === 'horizontal' || layout === 'horizontal';\n var isRtl = direction === 'rtl';\n var offsetHorizontal = isHorizontal ? _offset : 0;\n itemStyleCache[index] = style = {\n position: 'absolute',\n left: isRtl ? undefined : offsetHorizontal,\n right: isRtl ? offsetHorizontal : undefined,\n top: !isHorizontal ? _offset : 0,\n height: !isHorizontal ? size : '100%',\n width: isHorizontal ? size : '100%'\n };\n }\n\n return style;\n };\n\n _this._getItemStyleCache = void 0;\n _this._getItemStyleCache = memoizeOne(function (_, __, ___) {\n return {};\n });\n\n _this._onScrollHorizontal = function (event) {\n var _event$currentTarget = event.currentTarget,\n clientWidth = _event$currentTarget.clientWidth,\n scrollLeft = _event$currentTarget.scrollLeft,\n scrollWidth = _event$currentTarget.scrollWidth;\n\n _this.setState(function (prevState) {\n if (prevState.scrollOffset === scrollLeft) {\n // Scroll position may have been updated by cDM/cDU,\n // In which case we don't need to trigger another render,\n // And we don't want to update state.isScrolling.\n return null;\n }\n\n var direction = _this.props.direction;\n var scrollOffset = scrollLeft;\n\n if (direction === 'rtl') {\n // TRICKY According to the spec, scrollLeft should be negative for RTL aligned elements.\n // This is not the case for all browsers though (e.g. Chrome reports values as positive, measured relative to the left).\n // It's also easier for this component if we convert offsets to the same format as they would be in for ltr.\n // So the simplest solution is to determine which browser behavior we're dealing with, and convert based on it.\n switch (getRTLOffsetType()) {\n case 'negative':\n scrollOffset = -scrollLeft;\n break;\n\n case 'positive-descending':\n scrollOffset = scrollWidth - clientWidth - scrollLeft;\n break;\n }\n } // Prevent Safari's elastic scrolling from causing visual shaking when scrolling past bounds.\n\n\n scrollOffset = Math.max(0, Math.min(scrollOffset, scrollWidth - clientWidth));\n return {\n isScrolling: true,\n scrollDirection: prevState.scrollOffset < scrollOffset ? 'forward' : 'backward',\n scrollOffset: scrollOffset,\n scrollUpdateWasRequested: false\n };\n }, _this._resetIsScrollingDebounced);\n };\n\n _this._onScrollVertical = function (event) {\n var _event$currentTarget2 = event.currentTarget,\n clientHeight = _event$currentTarget2.clientHeight,\n scrollHeight = _event$currentTarget2.scrollHeight,\n scrollTop = _event$currentTarget2.scrollTop;\n\n _this.setState(function (prevState) {\n if (prevState.scrollOffset === scrollTop) {\n // Scroll position may have been updated by cDM/cDU,\n // In which case we don't need to trigger another render,\n // And we don't want to update state.isScrolling.\n return null;\n } // Prevent Safari's elastic scrolling from causing visual shaking when scrolling past bounds.\n\n\n var scrollOffset = Math.max(0, Math.min(scrollTop, scrollHeight - clientHeight));\n return {\n isScrolling: true,\n scrollDirection: prevState.scrollOffset < scrollOffset ? 'forward' : 'backward',\n scrollOffset: scrollOffset,\n scrollUpdateWasRequested: false\n };\n }, _this._resetIsScrollingDebounced);\n };\n\n _this._outerRefSetter = function (ref) {\n var outerRef = _this.props.outerRef;\n _this._outerRef = ref;\n\n if (typeof outerRef === 'function') {\n outerRef(ref);\n } else if (outerRef != null && typeof outerRef === 'object' && outerRef.hasOwnProperty('current')) {\n outerRef.current = ref;\n }\n };\n\n _this._resetIsScrollingDebounced = function () {\n if (_this._resetIsScrollingTimeoutId !== null) {\n cancelTimeout(_this._resetIsScrollingTimeoutId);\n }\n\n _this._resetIsScrollingTimeoutId = requestTimeout(_this._resetIsScrolling, IS_SCROLLING_DEBOUNCE_INTERVAL$1);\n };\n\n _this._resetIsScrolling = function () {\n _this._resetIsScrollingTimeoutId = null;\n\n _this.setState({\n isScrolling: false\n }, function () {\n // Clear style cache after state update has been committed.\n // This way we don't break pure sCU for items that don't use isScrolling param.\n _this._getItemStyleCache(-1, null);\n });\n };\n\n return _this;\n }\n\n List.getDerivedStateFromProps = function getDerivedStateFromProps(nextProps, prevState) {\n validateSharedProps$1(nextProps, prevState);\n validateProps(nextProps);\n return null;\n };\n\n var _proto = List.prototype;\n\n _proto.scrollTo = function scrollTo(scrollOffset) {\n scrollOffset = Math.max(0, scrollOffset);\n this.setState(function (prevState) {\n if (prevState.scrollOffset === scrollOffset) {\n return null;\n }\n\n return {\n scrollDirection: prevState.scrollOffset < scrollOffset ? 'forward' : 'backward',\n scrollOffset: scrollOffset,\n scrollUpdateWasRequested: true\n };\n }, this._resetIsScrollingDebounced);\n };\n\n _proto.scrollToItem = function scrollToItem(index, align) {\n if (align === void 0) {\n align = 'auto';\n }\n\n var _this$props2 = this.props,\n itemCount = _this$props2.itemCount,\n layout = _this$props2.layout;\n var scrollOffset = this.state.scrollOffset;\n index = Math.max(0, Math.min(index, itemCount - 1)); // The scrollbar size should be considered when scrolling an item into view, to ensure it's fully visible.\n // But we only need to account for its size when it's actually visible.\n // This is an edge case for lists; normally they only scroll in the dominant direction.\n\n var scrollbarSize = 0;\n\n if (this._outerRef) {\n var outerRef = this._outerRef;\n\n if (layout === 'vertical') {\n scrollbarSize = outerRef.scrollWidth > outerRef.clientWidth ? getScrollbarSize() : 0;\n } else {\n scrollbarSize = outerRef.scrollHeight > outerRef.clientHeight ? getScrollbarSize() : 0;\n }\n }\n\n this.scrollTo(getOffsetForIndexAndAlignment(this.props, index, align, scrollOffset, this._instanceProps, scrollbarSize));\n };\n\n _proto.componentDidMount = function componentDidMount() {\n var _this$props3 = this.props,\n direction = _this$props3.direction,\n initialScrollOffset = _this$props3.initialScrollOffset,\n layout = _this$props3.layout;\n\n if (typeof initialScrollOffset === 'number' && this._outerRef != null) {\n var outerRef = this._outerRef; // TODO Deprecate direction \"horizontal\"\n\n if (direction === 'horizontal' || layout === 'horizontal') {\n outerRef.scrollLeft = initialScrollOffset;\n } else {\n outerRef.scrollTop = initialScrollOffset;\n }\n }\n\n this._callPropsCallbacks();\n };\n\n _proto.componentDidUpdate = function componentDidUpdate() {\n var _this$props4 = this.props,\n direction = _this$props4.direction,\n layout = _this$props4.layout;\n var _this$state = this.state,\n scrollOffset = _this$state.scrollOffset,\n scrollUpdateWasRequested = _this$state.scrollUpdateWasRequested;\n\n if (scrollUpdateWasRequested && this._outerRef != null) {\n var outerRef = this._outerRef; // TODO Deprecate direction \"horizontal\"\n\n if (direction === 'horizontal' || layout === 'horizontal') {\n if (direction === 'rtl') {\n // TRICKY According to the spec, scrollLeft should be negative for RTL aligned elements.\n // This is not the case for all browsers though (e.g. Chrome reports values as positive, measured relative to the left).\n // So we need to determine which browser behavior we're dealing with, and mimic it.\n switch (getRTLOffsetType()) {\n case 'negative':\n outerRef.scrollLeft = -scrollOffset;\n break;\n\n case 'positive-ascending':\n outerRef.scrollLeft = scrollOffset;\n break;\n\n default:\n var clientWidth = outerRef.clientWidth,\n scrollWidth = outerRef.scrollWidth;\n outerRef.scrollLeft = scrollWidth - clientWidth - scrollOffset;\n break;\n }\n } else {\n outerRef.scrollLeft = scrollOffset;\n }\n } else {\n outerRef.scrollTop = scrollOffset;\n }\n }\n\n this._callPropsCallbacks();\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n if (this._resetIsScrollingTimeoutId !== null) {\n cancelTimeout(this._resetIsScrollingTimeoutId);\n }\n };\n\n _proto.render = function render() {\n var _this$props5 = this.props,\n children = _this$props5.children,\n className = _this$props5.className,\n direction = _this$props5.direction,\n height = _this$props5.height,\n innerRef = _this$props5.innerRef,\n innerElementType = _this$props5.innerElementType,\n innerTagName = _this$props5.innerTagName,\n itemCount = _this$props5.itemCount,\n itemData = _this$props5.itemData,\n _this$props5$itemKey = _this$props5.itemKey,\n itemKey = _this$props5$itemKey === void 0 ? defaultItemKey$1 : _this$props5$itemKey,\n layout = _this$props5.layout,\n outerElementType = _this$props5.outerElementType,\n outerTagName = _this$props5.outerTagName,\n style = _this$props5.style,\n useIsScrolling = _this$props5.useIsScrolling,\n width = _this$props5.width;\n var isScrolling = this.state.isScrolling; // TODO Deprecate direction \"horizontal\"\n\n var isHorizontal = direction === 'horizontal' || layout === 'horizontal';\n var onScroll = isHorizontal ? this._onScrollHorizontal : this._onScrollVertical;\n\n var _this$_getRangeToRend = this._getRangeToRender(),\n startIndex = _this$_getRangeToRend[0],\n stopIndex = _this$_getRangeToRend[1];\n\n var items = [];\n\n if (itemCount > 0) {\n for (var _index = startIndex; _index <= stopIndex; _index++) {\n items.push(createElement(children, {\n data: itemData,\n key: itemKey(_index, itemData),\n index: _index,\n isScrolling: useIsScrolling ? isScrolling : undefined,\n style: this._getItemStyle(_index)\n }));\n }\n } // Read this value AFTER items have been created,\n // So their actual sizes (if variable) are taken into consideration.\n\n\n var estimatedTotalSize = getEstimatedTotalSize(this.props, this._instanceProps);\n return createElement(outerElementType || outerTagName || 'div', {\n className: className,\n onScroll: onScroll,\n ref: this._outerRefSetter,\n style: _extends({\n position: 'relative',\n height: height,\n width: width,\n overflow: 'auto',\n WebkitOverflowScrolling: 'touch',\n willChange: 'transform',\n direction: direction\n }, style)\n }, createElement(innerElementType || innerTagName || 'div', {\n children: items,\n ref: innerRef,\n style: {\n height: isHorizontal ? '100%' : estimatedTotalSize,\n pointerEvents: isScrolling ? 'none' : undefined,\n width: isHorizontal ? estimatedTotalSize : '100%'\n }\n }));\n };\n\n _proto._callPropsCallbacks = function _callPropsCallbacks() {\n if (typeof this.props.onItemsRendered === 'function') {\n var itemCount = this.props.itemCount;\n\n if (itemCount > 0) {\n var _this$_getRangeToRend2 = this._getRangeToRender(),\n _overscanStartIndex = _this$_getRangeToRend2[0],\n _overscanStopIndex = _this$_getRangeToRend2[1],\n _visibleStartIndex = _this$_getRangeToRend2[2],\n _visibleStopIndex = _this$_getRangeToRend2[3];\n\n this._callOnItemsRendered(_overscanStartIndex, _overscanStopIndex, _visibleStartIndex, _visibleStopIndex);\n }\n }\n\n if (typeof this.props.onScroll === 'function') {\n var _this$state2 = this.state,\n _scrollDirection = _this$state2.scrollDirection,\n _scrollOffset = _this$state2.scrollOffset,\n _scrollUpdateWasRequested = _this$state2.scrollUpdateWasRequested;\n\n this._callOnScroll(_scrollDirection, _scrollOffset, _scrollUpdateWasRequested);\n }\n } // Lazily create and cache item styles while scrolling,\n // So that pure component sCU will prevent re-renders.\n // We maintain this cache, and pass a style prop rather than index,\n // So that List can clear cached styles and force item re-render if necessary.\n ;\n\n _proto._getRangeToRender = function _getRangeToRender() {\n var _this$props6 = this.props,\n itemCount = _this$props6.itemCount,\n overscanCount = _this$props6.overscanCount;\n var _this$state3 = this.state,\n isScrolling = _this$state3.isScrolling,\n scrollDirection = _this$state3.scrollDirection,\n scrollOffset = _this$state3.scrollOffset;\n\n if (itemCount === 0) {\n return [0, 0, 0, 0];\n }\n\n var startIndex = getStartIndexForOffset(this.props, scrollOffset, this._instanceProps);\n var stopIndex = getStopIndexForStartIndex(this.props, startIndex, scrollOffset, this._instanceProps); // Overscan by one item in each direction so that tab/focus works.\n // If there isn't at least one extra item, tab loops back around.\n\n var overscanBackward = !isScrolling || scrollDirection === 'backward' ? Math.max(1, overscanCount) : 1;\n var overscanForward = !isScrolling || scrollDirection === 'forward' ? Math.max(1, overscanCount) : 1;\n return [Math.max(0, startIndex - overscanBackward), Math.max(0, Math.min(itemCount - 1, stopIndex + overscanForward)), startIndex, stopIndex];\n };\n\n return List;\n }(PureComponent), _class.defaultProps = {\n direction: 'ltr',\n itemData: undefined,\n layout: 'vertical',\n overscanCount: 2,\n useIsScrolling: false\n }, _class;\n} // NOTE: I considered further wrapping individual items with a pure ListItem component.\n// This would avoid ever calling the render function for the same index more than once,\n// But it would also add the overhead of a lot of components/fibers.\n// I assume people already do this (render function returning a class component),\n// So my doing it would just unnecessarily double the wrappers.\n\nvar validateSharedProps$1 = function validateSharedProps(_ref2, _ref3) {\n var children = _ref2.children,\n direction = _ref2.direction,\n height = _ref2.height,\n layout = _ref2.layout,\n innerTagName = _ref2.innerTagName,\n outerTagName = _ref2.outerTagName,\n width = _ref2.width;\n var instance = _ref3.instance;\n\n if (process.env.NODE_ENV !== 'production') {\n if (innerTagName != null || outerTagName != null) {\n if (devWarningsTagName$1 && !devWarningsTagName$1.has(instance)) {\n devWarningsTagName$1.add(instance);\n console.warn('The innerTagName and outerTagName props have been deprecated. ' + 'Please use the innerElementType and outerElementType props instead.');\n }\n } // TODO Deprecate direction \"horizontal\"\n\n\n var isHorizontal = direction === 'horizontal' || layout === 'horizontal';\n\n switch (direction) {\n case 'horizontal':\n case 'vertical':\n if (devWarningsDirection && !devWarningsDirection.has(instance)) {\n devWarningsDirection.add(instance);\n console.warn('The direction prop should be either \"ltr\" (default) or \"rtl\". ' + 'Please use the layout prop to specify \"vertical\" (default) or \"horizontal\" orientation.');\n }\n\n break;\n\n case 'ltr':\n case 'rtl':\n // Valid values\n break;\n\n default:\n throw Error('An invalid \"direction\" prop has been specified. ' + 'Value should be either \"ltr\" or \"rtl\". ' + (\"\\\"\" + direction + \"\\\" was specified.\"));\n }\n\n switch (layout) {\n case 'horizontal':\n case 'vertical':\n // Valid values\n break;\n\n default:\n throw Error('An invalid \"layout\" prop has been specified. ' + 'Value should be either \"horizontal\" or \"vertical\". ' + (\"\\\"\" + layout + \"\\\" was specified.\"));\n }\n\n if (children == null) {\n throw Error('An invalid \"children\" prop has been specified. ' + 'Value should be a React component. ' + (\"\\\"\" + (children === null ? 'null' : typeof children) + \"\\\" was specified.\"));\n }\n\n if (isHorizontal && typeof width !== 'number') {\n throw Error('An invalid \"width\" prop has been specified. ' + 'Horizontal lists must specify a number for width. ' + (\"\\\"\" + (width === null ? 'null' : typeof width) + \"\\\" was specified.\"));\n } else if (!isHorizontal && typeof height !== 'number') {\n throw Error('An invalid \"height\" prop has been specified. ' + 'Vertical lists must specify a number for height. ' + (\"\\\"\" + (height === null ? 'null' : typeof height) + \"\\\" was specified.\"));\n }\n }\n};\n\nvar DEFAULT_ESTIMATED_ITEM_SIZE$1 = 50;\n\nvar getItemMetadata$1 = function getItemMetadata(props, index, instanceProps) {\n var _ref = props,\n itemSize = _ref.itemSize;\n var itemMetadataMap = instanceProps.itemMetadataMap,\n lastMeasuredIndex = instanceProps.lastMeasuredIndex;\n\n if (index > lastMeasuredIndex) {\n var offset = 0;\n\n if (lastMeasuredIndex >= 0) {\n var itemMetadata = itemMetadataMap[lastMeasuredIndex];\n offset = itemMetadata.offset + itemMetadata.size;\n }\n\n for (var i = lastMeasuredIndex + 1; i <= index; i++) {\n var size = itemSize(i);\n itemMetadataMap[i] = {\n offset: offset,\n size: size\n };\n offset += size;\n }\n\n instanceProps.lastMeasuredIndex = index;\n }\n\n return itemMetadataMap[index];\n};\n\nvar findNearestItem$1 = function findNearestItem(props, instanceProps, offset) {\n var itemMetadataMap = instanceProps.itemMetadataMap,\n lastMeasuredIndex = instanceProps.lastMeasuredIndex;\n var lastMeasuredItemOffset = lastMeasuredIndex > 0 ? itemMetadataMap[lastMeasuredIndex].offset : 0;\n\n if (lastMeasuredItemOffset >= offset) {\n // If we've already measured items within this range just use a binary search as it's faster.\n return findNearestItemBinarySearch$1(props, instanceProps, lastMeasuredIndex, 0, offset);\n } else {\n // If we haven't yet measured this high, fallback to an exponential search with an inner binary search.\n // The exponential search avoids pre-computing sizes for the full set of items as a binary search would.\n // The overall complexity for this approach is O(log n).\n return findNearestItemExponentialSearch$1(props, instanceProps, Math.max(0, lastMeasuredIndex), offset);\n }\n};\n\nvar findNearestItemBinarySearch$1 = function findNearestItemBinarySearch(props, instanceProps, high, low, offset) {\n while (low <= high) {\n var middle = low + Math.floor((high - low) / 2);\n var currentOffset = getItemMetadata$1(props, middle, instanceProps).offset;\n\n if (currentOffset === offset) {\n return middle;\n } else if (currentOffset < offset) {\n low = middle + 1;\n } else if (currentOffset > offset) {\n high = middle - 1;\n }\n }\n\n if (low > 0) {\n return low - 1;\n } else {\n return 0;\n }\n};\n\nvar findNearestItemExponentialSearch$1 = function findNearestItemExponentialSearch(props, instanceProps, index, offset) {\n var itemCount = props.itemCount;\n var interval = 1;\n\n while (index < itemCount && getItemMetadata$1(props, index, instanceProps).offset < offset) {\n index += interval;\n interval *= 2;\n }\n\n return findNearestItemBinarySearch$1(props, instanceProps, Math.min(index, itemCount - 1), Math.floor(index / 2), offset);\n};\n\nvar getEstimatedTotalSize = function getEstimatedTotalSize(_ref2, _ref3) {\n var itemCount = _ref2.itemCount;\n var itemMetadataMap = _ref3.itemMetadataMap,\n estimatedItemSize = _ref3.estimatedItemSize,\n lastMeasuredIndex = _ref3.lastMeasuredIndex;\n var totalSizeOfMeasuredItems = 0; // Edge case check for when the number of items decreases while a scroll is in progress.\n // https://github.com/bvaughn/react-window/pull/138\n\n if (lastMeasuredIndex >= itemCount) {\n lastMeasuredIndex = itemCount - 1;\n }\n\n if (lastMeasuredIndex >= 0) {\n var itemMetadata = itemMetadataMap[lastMeasuredIndex];\n totalSizeOfMeasuredItems = itemMetadata.offset + itemMetadata.size;\n }\n\n var numUnmeasuredItems = itemCount - lastMeasuredIndex - 1;\n var totalSizeOfUnmeasuredItems = numUnmeasuredItems * estimatedItemSize;\n return totalSizeOfMeasuredItems + totalSizeOfUnmeasuredItems;\n};\n\nvar VariableSizeList = /*#__PURE__*/createListComponent({\n getItemOffset: function getItemOffset(props, index, instanceProps) {\n return getItemMetadata$1(props, index, instanceProps).offset;\n },\n getItemSize: function getItemSize(props, index, instanceProps) {\n return instanceProps.itemMetadataMap[index].size;\n },\n getEstimatedTotalSize: getEstimatedTotalSize,\n getOffsetForIndexAndAlignment: function getOffsetForIndexAndAlignment(props, index, align, scrollOffset, instanceProps, scrollbarSize) {\n var direction = props.direction,\n height = props.height,\n layout = props.layout,\n width = props.width; // TODO Deprecate direction \"horizontal\"\n\n var isHorizontal = direction === 'horizontal' || layout === 'horizontal';\n var size = isHorizontal ? width : height;\n var itemMetadata = getItemMetadata$1(props, index, instanceProps); // Get estimated total size after ItemMetadata is computed,\n // To ensure it reflects actual measurements instead of just estimates.\n\n var estimatedTotalSize = getEstimatedTotalSize(props, instanceProps);\n var maxOffset = Math.max(0, Math.min(estimatedTotalSize - size, itemMetadata.offset));\n var minOffset = Math.max(0, itemMetadata.offset - size + itemMetadata.size + scrollbarSize);\n\n if (align === 'smart') {\n if (scrollOffset >= minOffset - size && scrollOffset <= maxOffset + size) {\n align = 'auto';\n } else {\n align = 'center';\n }\n }\n\n switch (align) {\n case 'start':\n return maxOffset;\n\n case 'end':\n return minOffset;\n\n case 'center':\n return Math.round(minOffset + (maxOffset - minOffset) / 2);\n\n case 'auto':\n default:\n if (scrollOffset >= minOffset && scrollOffset <= maxOffset) {\n return scrollOffset;\n } else if (scrollOffset < minOffset) {\n return minOffset;\n } else {\n return maxOffset;\n }\n\n }\n },\n getStartIndexForOffset: function getStartIndexForOffset(props, offset, instanceProps) {\n return findNearestItem$1(props, instanceProps, offset);\n },\n getStopIndexForStartIndex: function getStopIndexForStartIndex(props, startIndex, scrollOffset, instanceProps) {\n var direction = props.direction,\n height = props.height,\n itemCount = props.itemCount,\n layout = props.layout,\n width = props.width; // TODO Deprecate direction \"horizontal\"\n\n var isHorizontal = direction === 'horizontal' || layout === 'horizontal';\n var size = isHorizontal ? width : height;\n var itemMetadata = getItemMetadata$1(props, startIndex, instanceProps);\n var maxOffset = scrollOffset + size;\n var offset = itemMetadata.offset + itemMetadata.size;\n var stopIndex = startIndex;\n\n while (stopIndex < itemCount - 1 && offset < maxOffset) {\n stopIndex++;\n offset += getItemMetadata$1(props, stopIndex, instanceProps).size;\n }\n\n return stopIndex;\n },\n initInstanceProps: function initInstanceProps(props, instance) {\n var _ref4 = props,\n estimatedItemSize = _ref4.estimatedItemSize;\n var instanceProps = {\n itemMetadataMap: {},\n estimatedItemSize: estimatedItemSize || DEFAULT_ESTIMATED_ITEM_SIZE$1,\n lastMeasuredIndex: -1\n };\n\n instance.resetAfterIndex = function (index, shouldForceUpdate) {\n if (shouldForceUpdate === void 0) {\n shouldForceUpdate = true;\n }\n\n instanceProps.lastMeasuredIndex = Math.min(instanceProps.lastMeasuredIndex, index - 1); // We could potentially optimize further by only evicting styles after this index,\n // But since styles are only cached while scrolling is in progress-\n // It seems an unnecessary optimization.\n // It's unlikely that resetAfterIndex() will be called while a user is scrolling.\n\n instance._getItemStyleCache(-1);\n\n if (shouldForceUpdate) {\n instance.forceUpdate();\n }\n };\n\n return instanceProps;\n },\n shouldResetStyleCacheOnItemSizeChange: false,\n validateProps: function validateProps(_ref5) {\n var itemSize = _ref5.itemSize;\n\n if (process.env.NODE_ENV !== 'production') {\n if (typeof itemSize !== 'function') {\n throw Error('An invalid \"itemSize\" prop has been specified. ' + 'Value should be a function. ' + (\"\\\"\" + (itemSize === null ? 'null' : typeof itemSize) + \"\\\" was specified.\"));\n }\n }\n }\n});\n\nvar FixedSizeGrid = /*#__PURE__*/createGridComponent({\n getColumnOffset: function getColumnOffset(_ref, index) {\n var columnWidth = _ref.columnWidth;\n return index * columnWidth;\n },\n getColumnWidth: function getColumnWidth(_ref2, index) {\n var columnWidth = _ref2.columnWidth;\n return columnWidth;\n },\n getRowOffset: function getRowOffset(_ref3, index) {\n var rowHeight = _ref3.rowHeight;\n return index * rowHeight;\n },\n getRowHeight: function getRowHeight(_ref4, index) {\n var rowHeight = _ref4.rowHeight;\n return rowHeight;\n },\n getEstimatedTotalHeight: function getEstimatedTotalHeight(_ref5) {\n var rowCount = _ref5.rowCount,\n rowHeight = _ref5.rowHeight;\n return rowHeight * rowCount;\n },\n getEstimatedTotalWidth: function getEstimatedTotalWidth(_ref6) {\n var columnCount = _ref6.columnCount,\n columnWidth = _ref6.columnWidth;\n return columnWidth * columnCount;\n },\n getOffsetForColumnAndAlignment: function getOffsetForColumnAndAlignment(_ref7, columnIndex, align, scrollLeft, instanceProps, scrollbarSize) {\n var columnCount = _ref7.columnCount,\n columnWidth = _ref7.columnWidth,\n width = _ref7.width;\n var lastColumnOffset = Math.max(0, columnCount * columnWidth - width);\n var maxOffset = Math.min(lastColumnOffset, columnIndex * columnWidth);\n var minOffset = Math.max(0, columnIndex * columnWidth - width + scrollbarSize + columnWidth);\n\n if (align === 'smart') {\n if (scrollLeft >= minOffset - width && scrollLeft <= maxOffset + width) {\n align = 'auto';\n } else {\n align = 'center';\n }\n }\n\n switch (align) {\n case 'start':\n return maxOffset;\n\n case 'end':\n return minOffset;\n\n case 'center':\n // \"Centered\" offset is usually the average of the min and max.\n // But near the edges of the list, this doesn't hold true.\n var middleOffset = Math.round(minOffset + (maxOffset - minOffset) / 2);\n\n if (middleOffset < Math.ceil(width / 2)) {\n return 0; // near the beginning\n } else if (middleOffset > lastColumnOffset + Math.floor(width / 2)) {\n return lastColumnOffset; // near the end\n } else {\n return middleOffset;\n }\n\n case 'auto':\n default:\n if (scrollLeft >= minOffset && scrollLeft <= maxOffset) {\n return scrollLeft;\n } else if (minOffset > maxOffset) {\n // Because we only take into account the scrollbar size when calculating minOffset\n // this value can be larger than maxOffset when at the end of the list\n return minOffset;\n } else if (scrollLeft < minOffset) {\n return minOffset;\n } else {\n return maxOffset;\n }\n\n }\n },\n getOffsetForRowAndAlignment: function getOffsetForRowAndAlignment(_ref8, rowIndex, align, scrollTop, instanceProps, scrollbarSize) {\n var rowHeight = _ref8.rowHeight,\n height = _ref8.height,\n rowCount = _ref8.rowCount;\n var lastRowOffset = Math.max(0, rowCount * rowHeight - height);\n var maxOffset = Math.min(lastRowOffset, rowIndex * rowHeight);\n var minOffset = Math.max(0, rowIndex * rowHeight - height + scrollbarSize + rowHeight);\n\n if (align === 'smart') {\n if (scrollTop >= minOffset - height && scrollTop <= maxOffset + height) {\n align = 'auto';\n } else {\n align = 'center';\n }\n }\n\n switch (align) {\n case 'start':\n return maxOffset;\n\n case 'end':\n return minOffset;\n\n case 'center':\n // \"Centered\" offset is usually the average of the min and max.\n // But near the edges of the list, this doesn't hold true.\n var middleOffset = Math.round(minOffset + (maxOffset - minOffset) / 2);\n\n if (middleOffset < Math.ceil(height / 2)) {\n return 0; // near the beginning\n } else if (middleOffset > lastRowOffset + Math.floor(height / 2)) {\n return lastRowOffset; // near the end\n } else {\n return middleOffset;\n }\n\n case 'auto':\n default:\n if (scrollTop >= minOffset && scrollTop <= maxOffset) {\n return scrollTop;\n } else if (minOffset > maxOffset) {\n // Because we only take into account the scrollbar size when calculating minOffset\n // this value can be larger than maxOffset when at the end of the list\n return minOffset;\n } else if (scrollTop < minOffset) {\n return minOffset;\n } else {\n return maxOffset;\n }\n\n }\n },\n getColumnStartIndexForOffset: function getColumnStartIndexForOffset(_ref9, scrollLeft) {\n var columnWidth = _ref9.columnWidth,\n columnCount = _ref9.columnCount;\n return Math.max(0, Math.min(columnCount - 1, Math.floor(scrollLeft / columnWidth)));\n },\n getColumnStopIndexForStartIndex: function getColumnStopIndexForStartIndex(_ref10, startIndex, scrollLeft) {\n var columnWidth = _ref10.columnWidth,\n columnCount = _ref10.columnCount,\n width = _ref10.width;\n var left = startIndex * columnWidth;\n var numVisibleColumns = Math.ceil((width + scrollLeft - left) / columnWidth);\n return Math.max(0, Math.min(columnCount - 1, startIndex + numVisibleColumns - 1 // -1 is because stop index is inclusive\n ));\n },\n getRowStartIndexForOffset: function getRowStartIndexForOffset(_ref11, scrollTop) {\n var rowHeight = _ref11.rowHeight,\n rowCount = _ref11.rowCount;\n return Math.max(0, Math.min(rowCount - 1, Math.floor(scrollTop / rowHeight)));\n },\n getRowStopIndexForStartIndex: function getRowStopIndexForStartIndex(_ref12, startIndex, scrollTop) {\n var rowHeight = _ref12.rowHeight,\n rowCount = _ref12.rowCount,\n height = _ref12.height;\n var top = startIndex * rowHeight;\n var numVisibleRows = Math.ceil((height + scrollTop - top) / rowHeight);\n return Math.max(0, Math.min(rowCount - 1, startIndex + numVisibleRows - 1 // -1 is because stop index is inclusive\n ));\n },\n initInstanceProps: function initInstanceProps(props) {// Noop\n },\n shouldResetStyleCacheOnItemSizeChange: true,\n validateProps: function validateProps(_ref13) {\n var columnWidth = _ref13.columnWidth,\n rowHeight = _ref13.rowHeight;\n\n if (process.env.NODE_ENV !== 'production') {\n if (typeof columnWidth !== 'number') {\n throw Error('An invalid \"columnWidth\" prop has been specified. ' + 'Value should be a number. ' + (\"\\\"\" + (columnWidth === null ? 'null' : typeof columnWidth) + \"\\\" was specified.\"));\n }\n\n if (typeof rowHeight !== 'number') {\n throw Error('An invalid \"rowHeight\" prop has been specified. ' + 'Value should be a number. ' + (\"\\\"\" + (rowHeight === null ? 'null' : typeof rowHeight) + \"\\\" was specified.\"));\n }\n }\n }\n});\n\nvar FixedSizeList = /*#__PURE__*/createListComponent({\n getItemOffset: function getItemOffset(_ref, index) {\n var itemSize = _ref.itemSize;\n return index * itemSize;\n },\n getItemSize: function getItemSize(_ref2, index) {\n var itemSize = _ref2.itemSize;\n return itemSize;\n },\n getEstimatedTotalSize: function getEstimatedTotalSize(_ref3) {\n var itemCount = _ref3.itemCount,\n itemSize = _ref3.itemSize;\n return itemSize * itemCount;\n },\n getOffsetForIndexAndAlignment: function getOffsetForIndexAndAlignment(_ref4, index, align, scrollOffset, instanceProps, scrollbarSize) {\n var direction = _ref4.direction,\n height = _ref4.height,\n itemCount = _ref4.itemCount,\n itemSize = _ref4.itemSize,\n layout = _ref4.layout,\n width = _ref4.width;\n // TODO Deprecate direction \"horizontal\"\n var isHorizontal = direction === 'horizontal' || layout === 'horizontal';\n var size = isHorizontal ? width : height;\n var lastItemOffset = Math.max(0, itemCount * itemSize - size);\n var maxOffset = Math.min(lastItemOffset, index * itemSize);\n var minOffset = Math.max(0, index * itemSize - size + itemSize + scrollbarSize);\n\n if (align === 'smart') {\n if (scrollOffset >= minOffset - size && scrollOffset <= maxOffset + size) {\n align = 'auto';\n } else {\n align = 'center';\n }\n }\n\n switch (align) {\n case 'start':\n return maxOffset;\n\n case 'end':\n return minOffset;\n\n case 'center':\n {\n // \"Centered\" offset is usually the average of the min and max.\n // But near the edges of the list, this doesn't hold true.\n var middleOffset = Math.round(minOffset + (maxOffset - minOffset) / 2);\n\n if (middleOffset < Math.ceil(size / 2)) {\n return 0; // near the beginning\n } else if (middleOffset > lastItemOffset + Math.floor(size / 2)) {\n return lastItemOffset; // near the end\n } else {\n return middleOffset;\n }\n }\n\n case 'auto':\n default:\n if (scrollOffset >= minOffset && scrollOffset <= maxOffset) {\n return scrollOffset;\n } else if (scrollOffset < minOffset) {\n return minOffset;\n } else {\n return maxOffset;\n }\n\n }\n },\n getStartIndexForOffset: function getStartIndexForOffset(_ref5, offset) {\n var itemCount = _ref5.itemCount,\n itemSize = _ref5.itemSize;\n return Math.max(0, Math.min(itemCount - 1, Math.floor(offset / itemSize)));\n },\n getStopIndexForStartIndex: function getStopIndexForStartIndex(_ref6, startIndex, scrollOffset) {\n var direction = _ref6.direction,\n height = _ref6.height,\n itemCount = _ref6.itemCount,\n itemSize = _ref6.itemSize,\n layout = _ref6.layout,\n width = _ref6.width;\n // TODO Deprecate direction \"horizontal\"\n var isHorizontal = direction === 'horizontal' || layout === 'horizontal';\n var offset = startIndex * itemSize;\n var size = isHorizontal ? width : height;\n var numVisibleItems = Math.ceil((size + scrollOffset - offset) / itemSize);\n return Math.max(0, Math.min(itemCount - 1, startIndex + numVisibleItems - 1 // -1 is because stop index is inclusive\n ));\n },\n initInstanceProps: function initInstanceProps(props) {// Noop\n },\n shouldResetStyleCacheOnItemSizeChange: true,\n validateProps: function validateProps(_ref7) {\n var itemSize = _ref7.itemSize;\n\n if (process.env.NODE_ENV !== 'production') {\n if (typeof itemSize !== 'number') {\n throw Error('An invalid \"itemSize\" prop has been specified. ' + 'Value should be a number. ' + (\"\\\"\" + (itemSize === null ? 'null' : typeof itemSize) + \"\\\" was specified.\"));\n }\n }\n }\n});\n\n// Pulled from react-compat\n// https://github.com/developit/preact-compat/blob/7c5de00e7c85e2ffd011bf3af02899b63f699d3a/src/index.js#L349\nfunction shallowDiffers(prev, next) {\n for (var attribute in prev) {\n if (!(attribute in next)) {\n return true;\n }\n }\n\n for (var _attribute in next) {\n if (prev[_attribute] !== next[_attribute]) {\n return true;\n }\n }\n\n return false;\n}\n\nvar _excluded = [\"style\"],\n _excluded2 = [\"style\"];\n// It knows to compare individual style props and ignore the wrapper object.\n// See https://reactjs.org/docs/react-api.html#reactmemo\n\nfunction areEqual(prevProps, nextProps) {\n var prevStyle = prevProps.style,\n prevRest = _objectWithoutPropertiesLoose(prevProps, _excluded);\n\n var nextStyle = nextProps.style,\n nextRest = _objectWithoutPropertiesLoose(nextProps, _excluded2);\n\n return !shallowDiffers(prevStyle, nextStyle) && !shallowDiffers(prevRest, nextRest);\n}\n\n// It knows to compare individual style props and ignore the wrapper object.\n// See https://reactjs.org/docs/react-component.html#shouldcomponentupdate\n\nfunction shouldComponentUpdate(nextProps, nextState) {\n return !areEqual(this.props, nextProps) || shallowDiffers(this.state, nextState);\n}\n\nexport { FixedSizeGrid, FixedSizeList, VariableSizeGrid, VariableSizeList, areEqual, shouldComponentUpdate };\n//# sourceMappingURL=index.esm.js.map\n","import { ChangeEvent, useEffect, useMemo, useState } from \"react\";\nimport AutoSizer from \"react-virtualized-auto-sizer\";\nimport { VariableSizeList as List } from \"react-window\";\nimport { Any } from \"@cede/types\";\nimport { sortItemsByDescendingAmountAndAlphabetical } from \"@cede/utils\";\nimport { BackButton } from \"../BackButton\";\nimport { AmountDropListWithIconItemElement } from \"../DropListWithIcon/items/AmountDropListWithIconItem\";\nimport { Icon } from \"../Icon\";\nimport { SearchBar } from \"../SearchBar\";\nimport {\n DropListItemTitle,\n DropListWithIconItemModal,\n DropListWithIconModalInputProps,\n DropListWithIconModalProps,\n} from \"./types\";\nimport {\n Box,\n CircularProgress,\n Fade,\n FormControl,\n IconButton,\n InputAdornment,\n InputLabel,\n Modal,\n OutlinedInput,\n Typography,\n alpha,\n useTheme,\n} from \"@mui/material\";\n\nconst DropListWithIconInput = ({\n onClick,\n id,\n label,\n rounded,\n value,\n isActive,\n placeholder,\n disabled,\n onChange,\n onClear,\n loading,\n padding,\n}: DropListWithIconModalInputProps) => {\n const theme = useTheme();\n return (\n \n \n {label}\n ({\n \"borderRadius\": rounded ? theme.custom.buttonRoundedRadius : theme.custom.inputRadius.default,\n \"paddingRight\": (padding || theme.custom.gutterMargin) + \"!important\",\n \"paddingLeft\": padding ? padding + \"!important\" : undefined,\n \"& .input__clear-icon\": {\n pointerEvents: \"none\",\n opacity: 0,\n },\n \"&:hover .input__clear-icon\": {\n pointerEvents: \"all\",\n opacity: 1,\n },\n })}\n startAdornment={\n \n {value && value.img !== \"\" && (\n \n )}\n \n }\n endAdornment={\n <>\n {onClear && value && (\n {\n onClear();\n e.stopPropagation();\n }}\n >\n \n \n \n \n )}\n \n \n \n \n \n \n }\n label={label}\n placeholder={placeholder}\n disabled={disabled}\n inputProps={{\n \"id\": id + \"-input\",\n \"data-testid\": `${id || \"\"}-input`,\n \"value\": loading ? \"Loading...\" : value?.label || \"\",\n \"onChange\": (event: ChangeEvent) => {\n onClick();\n onChange(event);\n },\n \"autoComplete\": \"off\",\n \"style\": {\n paddingTop: padding,\n paddingBottom: padding,\n },\n }}\n />\n \n \n );\n};\n\nconst isDropListItemTitle = (item: DropListWithIconItemModal | DropListItemTitle): item is DropListItemTitle =>\n (item as DropListItemTitle).title != undefined;\n\nexport function DropListWithIconModal>({\n title,\n items,\n rounded,\n value,\n emptyMessage,\n description,\n onChange,\n inputProps,\n loading,\n disableModalPortal,\n actionButton,\n shouldDisableItem,\n disabledTextItem,\n onClear,\n baseElement: BaseElement,\n renderItem,\n itemSize,\n padding,\n sublistTitles,\n bottomElement,\n}: DropListWithIconModalProps) {\n const theme = useTheme();\n const [searchValue, setSearchValue] = useState(\"\");\n const [isOpen, setIsOpen] = useState(false);\n\n const selectedItemValue = value?.value;\n\n const filterItemList = (items: DropListWithIconItemModal[]): DropListWithIconItemModal[] => {\n const sortedItems = sortItemsByDescendingAmountAndAlphabetical(items, shouldDisableItem);\n const filteredAndSortedItems = !searchValue\n ? sortedItems\n : sortedItems.filter((item) => {\n const isLabelSearched = item.label.toLowerCase().includes(searchValue.toLowerCase());\n const isSearchTermSearched = !!item.searchableTerms?.find((searchableTerm) =>\n searchableTerm.toLowerCase().includes(searchValue.toLowerCase()),\n );\n\n return isLabelSearched || isSearchTermSearched;\n });\n\n // Move the selected item to the beginning, if it exists\n if (selectedItemValue != null) {\n const selectedItemIndex = filteredAndSortedItems.findIndex((item) => item.value === selectedItemValue);\n if (selectedItemIndex > -1) {\n const selectedItem = filteredAndSortedItems.splice(selectedItemIndex, 1)[0];\n if (selectedItem) filteredAndSortedItems.unshift(selectedItem);\n }\n }\n\n return filteredAndSortedItems;\n };\n\n const filteredItems = useMemo(() => {\n if (Array.isArray(items)) {\n return filterItemList(items);\n }\n const sortedLists = Object.entries(items).reduce((acc, [key, value]) => {\n acc[key] = filterItemList(value);\n return acc;\n }, {} as Record);\n\n return Object.entries(sortedLists).reduce((acc, [key, values]) => {\n if (values.length === 0) return acc;\n const itemTitle: DropListItemTitle = {\n title: sublistTitles?.[key] || key,\n value: key,\n };\n acc.push(itemTitle);\n acc.push(...values);\n return acc;\n }, [] as (DropListWithIconItemModal | DropListItemTitle)[]);\n }, [items, searchValue, selectedItemValue]);\n\n const [searchInputRef, setSearchInputRef] = useState(null);\n\n const openModal = () => {\n if (inputProps?.disabled) return;\n setIsOpen(true);\n };\n\n useEffect(() => {\n if (isOpen && searchInputRef) {\n searchInputRef.focus();\n }\n }, [isOpen, searchInputRef]);\n\n const Row = ({ index, style, ...rest }: Any) => {\n const item = rest.data.filteredItems[index];\n\n const render = () => {\n if (!isDropListItemTitle(item)) {\n return renderItem\n ? renderItem(item)\n : AmountDropListWithIconItemElement(\n {\n setOpen: setIsOpen,\n theme,\n shouldDisableItem,\n disabledTextItem,\n },\n { ...item, amount: item.amount ? Number(item.amount) : undefined },\n );\n }\n return (\n \n \n {item.title}\n \n \n );\n };\n\n return (\n
\n {\n if (item.isDisabled || shouldDisableItem?.(item) || isDropListItemTitle(item)) return;\n\n onChange(item);\n setIsOpen(false);\n }}\n key={item.value}\n sx={{\n \"transition\": \"0.3s\",\n \"cursor\": isDropListItemTitle(item) ? undefined : \"pointer\",\n \":hover\": { background: isDropListItemTitle(item) ? undefined : alpha(\"#75B3FF\", 0.08) }, // Should we move this to the theme?\n \"background\": item.value === selectedItemValue ? alpha(\"#75B3FF\", 0.15) : \"transparent\",\n }}\n >\n {render()}\n \n
\n );\n };\n\n return (\n <>\n {/* INPUT */}\n {BaseElement ? (\n \n ) : (\n setSearchValue(event.target.value)}\n value={value}\n onClear={onClear}\n padding={padding}\n />\n )}\n {/* MODAL */}\n setIsOpen(false)} closeAfterTransition disablePortal={disableModalPortal}>\n \n \n \n \n {\n setIsOpen(false);\n }}\n />\n \n\n {title}\n {onClear && value && (\n \n {\n onClear();\n setIsOpen(false);\n }}\n >\n Clear\n \n \n )}\n \n \n {description && (\n \n {description}\n \n )}\n setSearchInputRef(ref)}\n onChange={(e) => setSearchValue(e.target.value)}\n value={searchValue}\n />\n \n \n {loading && (\n \n )}\n {filteredItems.length === 0 && !loading && (\n \n {emptyMessage ?? \"No results found\"}\n \n )}\n {!loading && filteredItems?.length !== 0 && (\n \n {({ width, height }) => {\n return (\n ((filteredItems[item] as DropListWithIconItemModal)?.balance ? 50 : 36)\n }\n itemCount={filteredItems.length}\n itemData={{\n filteredItems,\n }}\n >\n {Row}\n \n );\n }}\n \n )}\n {actionButton ? setIsOpen(false)}>{actionButton} : <>}\n \n {bottomElement}\n \n \n \n \n );\n}\n","import { ReactElement } from \"react\";\n\nexport enum EmptyStateTypeEnum {\n SUCCESS = \"success\",\n INFO = \"info\",\n WARNING = \"warning\",\n ERROR = \"error\",\n}\n\nexport interface EmptyStateProps {\n title: string;\n icon?: ReactElement;\n description?: string;\n type?: EmptyStateTypeEnum;\n actionButton?: ReactElement;\n}\n","import { EmptyStateProps, EmptyStateTypeEnum } from \"./EmptyState.types\";\nimport { Alert, Typography } from \"@mui/material\";\nimport { Box } from \"@mui/material\";\n\nexport const EmptyState = ({ icon, title, description, type, actionButton }: EmptyStateProps) => {\n // const theme = useTheme();\n\n const emptyStateType = (() => {\n if (type === EmptyStateTypeEnum.SUCCESS) {\n return \"success\";\n }\n if (type === EmptyStateTypeEnum.INFO) {\n return \"info\";\n }\n if (type === EmptyStateTypeEnum.ERROR) {\n return \"error\";\n }\n if (type === EmptyStateTypeEnum.WARNING) {\n return \"warning\";\n }\n return \"warning\";\n })();\n\n return (\n ({\n \"display\": \"flex\",\n \".MuiAlert-message\": {\n display: \"flex\",\n flex: 1,\n flexDirection: \"column\",\n gap: theme.custom.smallGutterMargin,\n },\n })}\n >\n {icon && (\n ({\n width: \"100%\",\n flex: 1,\n })}\n >\n {icon}\n \n )}\n ({\n fontSize: theme.typography.body1,\n marginBottom: 0,\n fontWeight: theme.typography.fontWeightBold,\n })}\n >\n {title}\n \n {description && (\n ({\n fontSize: theme.typography.body1,\n marginBottom: 0,\n fontWeight: theme.typography.fontWeightMedium,\n })}\n >\n {description}\n \n )}\n {actionButton && actionButton}\n \n );\n};\n","import { ExternalLinkProps } from \"./types\";\nimport OpenInNewIcon from \"@mui/icons-material/OpenInNew\";\nimport { Button, Box, useTheme } from \"@mui/material\";\n\nexport const ExternalLink = ({ label, url, inNewTab = true, color, onClick, ...props }: ExternalLinkProps) => {\n const theme = useTheme();\n const linkColor = color || theme.palette.primary.main;\n\n return (\n \n \n {label}\n \n \n \n );\n};\n","import { CEDE_CDN_URL, resolveCDNMiss } from \"@cede/utils\";\nimport { theme } from \"../ThemeProvider\";\nimport { IconProps } from \"./types\";\nimport { Box } from \"@mui/material\";\n\nexport const Icon = ({\n iconUrl,\n iconName,\n defaultIcon,\n iconSize = \"medium\",\n disabled = false,\n iconChildUrl,\n customSize,\n customChildIconPosition,\n testId,\n ...props\n}: IconProps) => {\n const size = () => {\n if (customSize) return customSize;\n switch (iconSize) {\n case \"small\":\n return theme.custom.iconSize.small;\n case \"medium\":\n return theme.custom.iconSize.medium;\n case \"large\":\n return theme.custom.iconSize.large;\n default:\n return theme.custom.iconSize.medium;\n }\n };\n\n const positionChildIcon = () => {\n if (customChildIconPosition) return customChildIconPosition;\n switch (iconSize) {\n case \"small\":\n return \"9px\";\n case \"medium\":\n return \"12px\";\n case \"large\":\n return \"18px\";\n default:\n return \"12px\";\n }\n };\n\n return (\n \n {\n currentTarget.onerror = null; // prevents looping\n if (defaultIcon) currentTarget.src = defaultIcon;\n\n const url = new URL(currentTarget.src);\n const isCDNIcon = url.origin === CEDE_CDN_URL;\n if (isCDNIcon) {\n currentTarget.src = resolveCDNMiss(url);\n } else currentTarget.src = \"\";\n }}\n />\n {iconChildUrl && (\n \n \n \n )}\n \n );\n};\n","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nconst _excluded = [\"addEndListener\", \"appear\", \"children\", \"container\", \"direction\", \"easing\", \"in\", \"onEnter\", \"onEntered\", \"onEntering\", \"onExit\", \"onExited\", \"onExiting\", \"style\", \"timeout\", \"TransitionComponent\"];\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport { Transition } from 'react-transition-group';\nimport { elementAcceptingRef, HTMLElementType, chainPropTypes } from '@mui/utils';\nimport debounce from '../utils/debounce';\nimport useForkRef from '../utils/useForkRef';\nimport useTheme from '../styles/useTheme';\nimport { reflow, getTransitionProps } from '../transitions/utils';\nimport { ownerWindow } from '../utils'; // Translate the node so it can't be seen on the screen.\n// Later, we're going to translate the node back to its original location with `none`.\n\nimport { jsx as _jsx } from \"react/jsx-runtime\";\n\nfunction getTranslateValue(direction, node, resolvedContainer) {\n const rect = node.getBoundingClientRect();\n const containerRect = resolvedContainer && resolvedContainer.getBoundingClientRect();\n const containerWindow = ownerWindow(node);\n let transform;\n\n if (node.fakeTransform) {\n transform = node.fakeTransform;\n } else {\n const computedStyle = containerWindow.getComputedStyle(node);\n transform = computedStyle.getPropertyValue('-webkit-transform') || computedStyle.getPropertyValue('transform');\n }\n\n let offsetX = 0;\n let offsetY = 0;\n\n if (transform && transform !== 'none' && typeof transform === 'string') {\n const transformValues = transform.split('(')[1].split(')')[0].split(',');\n offsetX = parseInt(transformValues[4], 10);\n offsetY = parseInt(transformValues[5], 10);\n }\n\n if (direction === 'left') {\n if (containerRect) {\n return `translateX(${containerRect.right + offsetX - rect.left}px)`;\n }\n\n return `translateX(${containerWindow.innerWidth + offsetX - rect.left}px)`;\n }\n\n if (direction === 'right') {\n if (containerRect) {\n return `translateX(-${rect.right - containerRect.left - offsetX}px)`;\n }\n\n return `translateX(-${rect.left + rect.width - offsetX}px)`;\n }\n\n if (direction === 'up') {\n if (containerRect) {\n return `translateY(${containerRect.bottom + offsetY - rect.top}px)`;\n }\n\n return `translateY(${containerWindow.innerHeight + offsetY - rect.top}px)`;\n } // direction === 'down'\n\n\n if (containerRect) {\n return `translateY(-${rect.top - containerRect.top + rect.height - offsetY}px)`;\n }\n\n return `translateY(-${rect.top + rect.height - offsetY}px)`;\n}\n\nfunction resolveContainer(containerPropProp) {\n return typeof containerPropProp === 'function' ? containerPropProp() : containerPropProp;\n}\n\nexport function setTranslateValue(direction, node, containerProp) {\n const resolvedContainer = resolveContainer(containerProp);\n const transform = getTranslateValue(direction, node, resolvedContainer);\n\n if (transform) {\n node.style.webkitTransform = transform;\n node.style.transform = transform;\n }\n}\n/**\n * The Slide transition is used by the [Drawer](/material-ui/react-drawer/) component.\n * It uses [react-transition-group](https://github.com/reactjs/react-transition-group) internally.\n */\n\nconst Slide = /*#__PURE__*/React.forwardRef(function Slide(props, ref) {\n const theme = useTheme();\n const defaultEasing = {\n enter: theme.transitions.easing.easeOut,\n exit: theme.transitions.easing.sharp\n };\n const defaultTimeout = {\n enter: theme.transitions.duration.enteringScreen,\n exit: theme.transitions.duration.leavingScreen\n };\n\n const {\n addEndListener,\n appear = true,\n children,\n container: containerProp,\n direction = 'down',\n easing: easingProp = defaultEasing,\n in: inProp,\n onEnter,\n onEntered,\n onEntering,\n onExit,\n onExited,\n onExiting,\n style,\n timeout = defaultTimeout,\n // eslint-disable-next-line react/prop-types\n TransitionComponent = Transition\n } = props,\n other = _objectWithoutPropertiesLoose(props, _excluded);\n\n const childrenRef = React.useRef(null);\n const handleRefIntermediary = useForkRef(children.ref, childrenRef);\n const handleRef = useForkRef(handleRefIntermediary, ref);\n\n const normalizedTransitionCallback = callback => isAppearing => {\n if (callback) {\n // onEnterXxx and onExitXxx callbacks have a different arguments.length value.\n if (isAppearing === undefined) {\n callback(childrenRef.current);\n } else {\n callback(childrenRef.current, isAppearing);\n }\n }\n };\n\n const handleEnter = normalizedTransitionCallback((node, isAppearing) => {\n setTranslateValue(direction, node, containerProp);\n reflow(node);\n\n if (onEnter) {\n onEnter(node, isAppearing);\n }\n });\n const handleEntering = normalizedTransitionCallback((node, isAppearing) => {\n const transitionProps = getTransitionProps({\n timeout,\n style,\n easing: easingProp\n }, {\n mode: 'enter'\n });\n node.style.webkitTransition = theme.transitions.create('-webkit-transform', _extends({}, transitionProps));\n node.style.transition = theme.transitions.create('transform', _extends({}, transitionProps));\n node.style.webkitTransform = 'none';\n node.style.transform = 'none';\n\n if (onEntering) {\n onEntering(node, isAppearing);\n }\n });\n const handleEntered = normalizedTransitionCallback(onEntered);\n const handleExiting = normalizedTransitionCallback(onExiting);\n const handleExit = normalizedTransitionCallback(node => {\n const transitionProps = getTransitionProps({\n timeout,\n style,\n easing: easingProp\n }, {\n mode: 'exit'\n });\n node.style.webkitTransition = theme.transitions.create('-webkit-transform', transitionProps);\n node.style.transition = theme.transitions.create('transform', transitionProps);\n setTranslateValue(direction, node, containerProp);\n\n if (onExit) {\n onExit(node);\n }\n });\n const handleExited = normalizedTransitionCallback(node => {\n // No need for transitions when the component is hidden\n node.style.webkitTransition = '';\n node.style.transition = '';\n\n if (onExited) {\n onExited(node);\n }\n });\n\n const handleAddEndListener = next => {\n if (addEndListener) {\n // Old call signature before `react-transition-group` implemented `nodeRef`\n addEndListener(childrenRef.current, next);\n }\n };\n\n const updatePosition = React.useCallback(() => {\n if (childrenRef.current) {\n setTranslateValue(direction, childrenRef.current, containerProp);\n }\n }, [direction, containerProp]);\n React.useEffect(() => {\n // Skip configuration where the position is screen size invariant.\n if (inProp || direction === 'down' || direction === 'right') {\n return undefined;\n }\n\n const handleResize = debounce(() => {\n if (childrenRef.current) {\n setTranslateValue(direction, childrenRef.current, containerProp);\n }\n });\n const containerWindow = ownerWindow(childrenRef.current);\n containerWindow.addEventListener('resize', handleResize);\n return () => {\n handleResize.clear();\n containerWindow.removeEventListener('resize', handleResize);\n };\n }, [direction, inProp, containerProp]);\n React.useEffect(() => {\n if (!inProp) {\n // We need to update the position of the drawer when the direction change and\n // when it's hidden.\n updatePosition();\n }\n }, [inProp, updatePosition]);\n return /*#__PURE__*/_jsx(TransitionComponent, _extends({\n nodeRef: childrenRef,\n onEnter: handleEnter,\n onEntered: handleEntered,\n onEntering: handleEntering,\n onExit: handleExit,\n onExited: handleExited,\n onExiting: handleExiting,\n addEndListener: handleAddEndListener,\n appear: appear,\n in: inProp,\n timeout: timeout\n }, other, {\n children: (state, childProps) => {\n return /*#__PURE__*/React.cloneElement(children, _extends({\n ref: handleRef,\n style: _extends({\n visibility: state === 'exited' && !inProp ? 'hidden' : undefined\n }, style, children.props.style)\n }, childProps));\n }\n }));\n});\nprocess.env.NODE_ENV !== \"production\" ? Slide.propTypes\n/* remove-proptypes */\n= {\n // ----------------------------- Warning --------------------------------\n // | These PropTypes are generated from the TypeScript type definitions |\n // | To update them edit the d.ts file and run \"yarn proptypes\" |\n // ----------------------------------------------------------------------\n\n /**\n * Add a custom transition end trigger. Called with the transitioning DOM\n * node and a done callback. Allows for more fine grained transition end\n * logic. Note: Timeouts are still used as a fallback if provided.\n */\n addEndListener: PropTypes.func,\n\n /**\n * Perform the enter transition when it first mounts if `in` is also `true`.\n * Set this to `false` to disable this behavior.\n * @default true\n */\n appear: PropTypes.bool,\n\n /**\n * A single child content element.\n */\n children: elementAcceptingRef.isRequired,\n\n /**\n * An HTML element, or a function that returns one.\n * It's used to set the container the Slide is transitioning from.\n */\n container: chainPropTypes(PropTypes.oneOfType([HTMLElementType, PropTypes.func]), props => {\n if (props.open) {\n const resolvedContainer = resolveContainer(props.container);\n\n if (resolvedContainer && resolvedContainer.nodeType === 1) {\n const box = resolvedContainer.getBoundingClientRect();\n\n if (process.env.NODE_ENV !== 'test' && box.top === 0 && box.left === 0 && box.right === 0 && box.bottom === 0) {\n return new Error(['MUI: The `container` prop provided to the component is invalid.', 'The anchor element should be part of the document layout.', \"Make sure the element is present in the document or that it's not display none.\"].join('\\n'));\n }\n } else if (!resolvedContainer || typeof resolvedContainer.getBoundingClientRect !== 'function' || resolvedContainer.contextElement != null && resolvedContainer.contextElement.nodeType !== 1) {\n return new Error(['MUI: The `container` prop provided to the component is invalid.', 'It should be an HTML element instance.'].join('\\n'));\n }\n }\n\n return null;\n }),\n\n /**\n * Direction the child node will enter from.\n * @default 'down'\n */\n direction: PropTypes.oneOf(['down', 'left', 'right', 'up']),\n\n /**\n * The transition timing function.\n * You may specify a single easing or a object containing enter and exit values.\n * @default {\n * enter: theme.transitions.easing.easeOut,\n * exit: theme.transitions.easing.sharp,\n * }\n */\n easing: PropTypes.oneOfType([PropTypes.shape({\n enter: PropTypes.string,\n exit: PropTypes.string\n }), PropTypes.string]),\n\n /**\n * If `true`, the component will transition in.\n */\n in: PropTypes.bool,\n\n /**\n * @ignore\n */\n onEnter: PropTypes.func,\n\n /**\n * @ignore\n */\n onEntered: PropTypes.func,\n\n /**\n * @ignore\n */\n onEntering: PropTypes.func,\n\n /**\n * @ignore\n */\n onExit: PropTypes.func,\n\n /**\n * @ignore\n */\n onExited: PropTypes.func,\n\n /**\n * @ignore\n */\n onExiting: PropTypes.func,\n\n /**\n * @ignore\n */\n style: PropTypes.object,\n\n /**\n * The duration for the transition, in milliseconds.\n * You may specify a single timeout for all transitions, or individually with an object.\n * @default {\n * enter: theme.transitions.duration.enteringScreen,\n * exit: theme.transitions.duration.leavingScreen,\n * }\n */\n timeout: PropTypes.oneOfType([PropTypes.number, PropTypes.shape({\n appear: PropTypes.number,\n enter: PropTypes.number,\n exit: PropTypes.number\n })])\n} : void 0;\nexport default Slide;","import { useRef, useState } from \"react\";\nimport { IconButtonWithPopperProps } from \"./types\";\nimport { Box, Fade, IconButton, Popper, Slide, useTheme } from \"@mui/material\";\n\nexport const IconButtonWithPopper = ({\n children,\n popperPlacement = \"bottom-end\",\n icon,\n id,\n disabled = false,\n onClick,\n onPopperClick,\n isAnimated = false,\n persistent = false,\n animationTimeout = 1000,\n popperSx = {},\n}: IconButtonWithPopperProps) => {\n const theme = useTheme();\n const [open, setOpen] = useState(isAnimated);\n // UI improvement for the top right border radius from animation start to finish\n const [hasBorderRadius, setHasBorderRadius] = useState(false);\n const anchorEl = useRef();\n\n const handleMouseEnter = () => {\n setOpen(true);\n };\n\n const handleMouseLeave = () => {\n // If the popper is animated, don't close it\n setOpen(isAnimated);\n };\n\n // Set top-right border radius during the transition\n const animationStart = async () => {\n setTimeout(() => {\n setHasBorderRadius(true);\n }, animationTimeout / 2);\n };\n\n const canBeOpen = open && Boolean(anchorEl);\n const popperId = canBeOpen ? \"transition-popper\" : undefined;\n\n return (\n \n \n {icon}\n \n \n {({ TransitionProps }) =>\n isAnimated ? (\n \n {\n node.addEventListener(\"transitionstart\", () => {\n animationStart();\n });\n }}\n >\n \n {children}\n \n \n \n ) : (\n \n \n {children}\n \n \n )\n }\n \n \n );\n};\n","\"use client\";\n\nimport createSvgIcon from './utils/createSvgIcon';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon( /*#__PURE__*/_jsx(\"path\", {\n d: \"M21 11H6.83l3.58-3.59L9 6l-6 6 6 6 1.41-1.41L6.83 13H21z\"\n}), 'KeyboardBackspace');","import { MouseEventHandler, useRef, useState } from \"react\";\nimport { ComponentUnderlay } from \"../ComponentUnderlay\";\nimport { Icon } from \"../Icon\";\nimport { Bubble } from \"../Popups\";\nimport {\n IconGroupButtonLabelProps,\n IconGroupExtraLabelProps,\n IconGroupProps,\n IconGroupsHideButtonVariantProps,\n} from \"./types\";\nimport { KeyboardBackspace } from \"@mui/icons-material\";\nimport { Box, IconButton, Theme, Typography, useTheme } from \"@mui/material\";\n\nconst COMPACT_TRANSLATION_PERCENT = 15;\n\nexport const getCompactWidth = (size: IconGroupProps[\"size\"] = \"small\", theme: Theme, maxIcons: number) => {\n const iconSize = Number(theme.custom.iconSize[size].replace(/\\D/g, \"\")) + theme.custom.iconUnderlayMargin;\n const width = iconSize * (1 - COMPACT_TRANSLATION_PERCENT / 100) * maxIcons + iconSize;\n return `${width}px`;\n};\n\nconst DefautExtraLabel = ({\n id,\n icons,\n maxIcons,\n size,\n filteredIcons,\n compactStyle,\n withBubble = false,\n itemTranslation,\n isOverlapped,\n}: IconGroupExtraLabelProps) => {\n const theme = useTheme();\n const [bubbleIsOpen, setBubbleIsOpen] = useState(false);\n const anchorRef = useRef(null);\n const popperRef = useRef(null);\n const hiddenIcons = icons.slice(maxIcons);\n\n const onMouseIn = () => {\n withBubble && setBubbleIsOpen(true);\n };\n\n const onMouseOut: MouseEventHandler = () => {\n setBubbleIsOpen(false);\n };\n\n return compactStyle ? (\n <>\n \n \n theme.custom.textSize[size]}>+{icons.length - maxIcons}\n \n \n \n \n \n \n ) : null;\n};\n\nexport const IconGroup = ({\n icons,\n size = \"small\",\n maxIcons,\n id,\n forceCollapse = false,\n renderLabelElement = DefautExtraLabel,\n withBubble,\n iconSx = {},\n isOverlapped = false,\n}: IconGroupProps) => {\n const compactStyle = icons.length > maxIcons;\n const filteredIcons = icons.slice(0, maxIcons);\n const theme = useTheme();\n\n return (\n \n {filteredIcons.map((icon, index) => (\n \n \n \n \n \n ))}\n {renderLabelElement({\n filteredIcons,\n icons,\n maxIcons,\n size,\n compactStyle,\n forceCollapse,\n id,\n withBubble,\n isOverlapped,\n itemTranslation: forceCollapse ? COMPACT_TRANSLATION_PERCENT : 0,\n })}\n \n );\n};\n\nconst ButtonExtraLabel = ({ id, size, filteredIcons, onClick, isSelected }: IconGroupButtonLabelProps) => (\n \n \n \n \n \n \n \n);\n\nIconGroup.HideButton = ({ onClick, isSelected, ...props }: IconGroupsHideButtonVariantProps) => {\n return (\n }\n />\n );\n};\n","import { Any } from \"@cede/types\";\nimport { Icon } from \"../Icon\";\nimport { IconTextProps } from \"./types\";\nimport { Box, CircularProgress, Typography, useTheme } from \"@mui/material\";\n\nexport const IconText = ({\n iconName,\n iconUrl,\n iconChildUrl,\n text,\n disabledText,\n iconSize = \"medium\",\n fontSize = \"14px\",\n sx,\n hover = true,\n textTag = \"p\",\n backgroundColor,\n isDisabled,\n isStateLoading = false,\n ...props\n}: IconTextProps) => {\n const theme = useTheme();\n return (\n \n \n \n \n {text}\n \n \n\n {isStateLoading && }\n {!isStateLoading && disabledText && (\n \n {disabledText}\n \n )}\n \n );\n};\n","import { Icon } from \"../Icon/Icon\";\nimport { IconTextSubTextProps } from \"./types\";\nimport { Box, Typography, useTheme } from \"@mui/material\";\n\nexport const IconTextSubText = (props: IconTextSubTextProps) => {\n const theme = useTheme();\n return (\n \n \n \n \n \n {props.text}\n \n \n \n {props.subText}\n \n \n \n );\n};\n","import { generateUtilityClass, generateUtilityClasses } from '@mui/base';\nexport function getCollapseUtilityClass(slot) {\n return generateUtilityClass('MuiCollapse', slot);\n}\nconst collapseClasses = generateUtilityClasses('MuiCollapse', ['root', 'horizontal', 'vertical', 'entered', 'hidden', 'wrapper', 'wrapperInner']);\nexport default collapseClasses;","import _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nconst _excluded = [\"addEndListener\", \"children\", \"className\", \"collapsedSize\", \"component\", \"easing\", \"in\", \"onEnter\", \"onEntered\", \"onEntering\", \"onExit\", \"onExited\", \"onExiting\", \"orientation\", \"style\", \"timeout\", \"TransitionComponent\"];\nimport * as React from 'react';\nimport clsx from 'clsx';\nimport PropTypes from 'prop-types';\nimport { Transition } from 'react-transition-group';\nimport { elementTypeAcceptingRef } from '@mui/utils';\nimport { unstable_composeClasses as composeClasses } from '@mui/base';\nimport styled from '../styles/styled';\nimport useThemeProps from '../styles/useThemeProps';\nimport { duration } from '../styles/createTransitions';\nimport { getTransitionProps } from '../transitions/utils';\nimport useTheme from '../styles/useTheme';\nimport { useForkRef } from '../utils';\nimport { getCollapseUtilityClass } from './collapseClasses';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\n\nconst useUtilityClasses = ownerState => {\n const {\n orientation,\n classes\n } = ownerState;\n const slots = {\n root: ['root', `${orientation}`],\n entered: ['entered'],\n hidden: ['hidden'],\n wrapper: ['wrapper', `${orientation}`],\n wrapperInner: ['wrapperInner', `${orientation}`]\n };\n return composeClasses(slots, getCollapseUtilityClass, classes);\n};\n\nconst CollapseRoot = styled('div', {\n name: 'MuiCollapse',\n slot: 'Root',\n overridesResolver: (props, styles) => {\n const {\n ownerState\n } = props;\n return [styles.root, styles[ownerState.orientation], ownerState.state === 'entered' && styles.entered, ownerState.state === 'exited' && !ownerState.in && ownerState.collapsedSize === '0px' && styles.hidden];\n }\n})(({\n theme,\n ownerState\n}) => _extends({\n height: 0,\n overflow: 'hidden',\n transition: theme.transitions.create('height')\n}, ownerState.orientation === 'horizontal' && {\n height: 'auto',\n width: 0,\n transition: theme.transitions.create('width')\n}, ownerState.state === 'entered' && _extends({\n height: 'auto',\n overflow: 'visible'\n}, ownerState.orientation === 'horizontal' && {\n width: 'auto'\n}), ownerState.state === 'exited' && !ownerState.in && ownerState.collapsedSize === '0px' && {\n visibility: 'hidden'\n}));\nconst CollapseWrapper = styled('div', {\n name: 'MuiCollapse',\n slot: 'Wrapper',\n overridesResolver: (props, styles) => styles.wrapper\n})(({\n ownerState\n}) => _extends({\n // Hack to get children with a negative margin to not falsify the height computation.\n display: 'flex',\n width: '100%'\n}, ownerState.orientation === 'horizontal' && {\n width: 'auto',\n height: '100%'\n}));\nconst CollapseWrapperInner = styled('div', {\n name: 'MuiCollapse',\n slot: 'WrapperInner',\n overridesResolver: (props, styles) => styles.wrapperInner\n})(({\n ownerState\n}) => _extends({\n width: '100%'\n}, ownerState.orientation === 'horizontal' && {\n width: 'auto',\n height: '100%'\n}));\n/**\n * The Collapse transition is used by the\n * [Vertical Stepper](/material-ui/react-stepper/#vertical-stepper) StepContent component.\n * It uses [react-transition-group](https://github.com/reactjs/react-transition-group) internally.\n */\n\nconst Collapse = /*#__PURE__*/React.forwardRef(function Collapse(inProps, ref) {\n const props = useThemeProps({\n props: inProps,\n name: 'MuiCollapse'\n });\n\n const {\n addEndListener,\n children,\n className,\n collapsedSize: collapsedSizeProp = '0px',\n component,\n easing,\n in: inProp,\n onEnter,\n onEntered,\n onEntering,\n onExit,\n onExited,\n onExiting,\n orientation = 'vertical',\n style,\n timeout = duration.standard,\n // eslint-disable-next-line react/prop-types\n TransitionComponent = Transition\n } = props,\n other = _objectWithoutPropertiesLoose(props, _excluded);\n\n const ownerState = _extends({}, props, {\n orientation,\n collapsedSize: collapsedSizeProp\n });\n\n const classes = useUtilityClasses(ownerState);\n const theme = useTheme();\n const timer = React.useRef();\n const wrapperRef = React.useRef(null);\n const autoTransitionDuration = React.useRef();\n const collapsedSize = typeof collapsedSizeProp === 'number' ? `${collapsedSizeProp}px` : collapsedSizeProp;\n const isHorizontal = orientation === 'horizontal';\n const size = isHorizontal ? 'width' : 'height';\n React.useEffect(() => {\n return () => {\n clearTimeout(timer.current);\n };\n }, []);\n const nodeRef = React.useRef(null);\n const handleRef = useForkRef(ref, nodeRef);\n\n const normalizedTransitionCallback = callback => maybeIsAppearing => {\n if (callback) {\n const node = nodeRef.current; // onEnterXxx and onExitXxx callbacks have a different arguments.length value.\n\n if (maybeIsAppearing === undefined) {\n callback(node);\n } else {\n callback(node, maybeIsAppearing);\n }\n }\n };\n\n const getWrapperSize = () => wrapperRef.current ? wrapperRef.current[isHorizontal ? 'clientWidth' : 'clientHeight'] : 0;\n\n const handleEnter = normalizedTransitionCallback((node, isAppearing) => {\n if (wrapperRef.current && isHorizontal) {\n // Set absolute position to get the size of collapsed content\n wrapperRef.current.style.position = 'absolute';\n }\n\n node.style[size] = collapsedSize;\n\n if (onEnter) {\n onEnter(node, isAppearing);\n }\n });\n const handleEntering = normalizedTransitionCallback((node, isAppearing) => {\n const wrapperSize = getWrapperSize();\n\n if (wrapperRef.current && isHorizontal) {\n // After the size is read reset the position back to default\n wrapperRef.current.style.position = '';\n }\n\n const {\n duration: transitionDuration,\n easing: transitionTimingFunction\n } = getTransitionProps({\n style,\n timeout,\n easing\n }, {\n mode: 'enter'\n });\n\n if (timeout === 'auto') {\n const duration2 = theme.transitions.getAutoHeightDuration(wrapperSize);\n node.style.transitionDuration = `${duration2}ms`;\n autoTransitionDuration.current = duration2;\n } else {\n node.style.transitionDuration = typeof transitionDuration === 'string' ? transitionDuration : `${transitionDuration}ms`;\n }\n\n node.style[size] = `${wrapperSize}px`;\n node.style.transitionTimingFunction = transitionTimingFunction;\n\n if (onEntering) {\n onEntering(node, isAppearing);\n }\n });\n const handleEntered = normalizedTransitionCallback((node, isAppearing) => {\n node.style[size] = 'auto';\n\n if (onEntered) {\n onEntered(node, isAppearing);\n }\n });\n const handleExit = normalizedTransitionCallback(node => {\n node.style[size] = `${getWrapperSize()}px`;\n\n if (onExit) {\n onExit(node);\n }\n });\n const handleExited = normalizedTransitionCallback(onExited);\n const handleExiting = normalizedTransitionCallback(node => {\n const wrapperSize = getWrapperSize();\n const {\n duration: transitionDuration,\n easing: transitionTimingFunction\n } = getTransitionProps({\n style,\n timeout,\n easing\n }, {\n mode: 'exit'\n });\n\n if (timeout === 'auto') {\n // TODO: rename getAutoHeightDuration to something more generic (width support)\n // Actually it just calculates animation duration based on size\n const duration2 = theme.transitions.getAutoHeightDuration(wrapperSize);\n node.style.transitionDuration = `${duration2}ms`;\n autoTransitionDuration.current = duration2;\n } else {\n node.style.transitionDuration = typeof transitionDuration === 'string' ? transitionDuration : `${transitionDuration}ms`;\n }\n\n node.style[size] = collapsedSize;\n node.style.transitionTimingFunction = transitionTimingFunction;\n\n if (onExiting) {\n onExiting(node);\n }\n });\n\n const handleAddEndListener = next => {\n if (timeout === 'auto') {\n timer.current = setTimeout(next, autoTransitionDuration.current || 0);\n }\n\n if (addEndListener) {\n // Old call signature before `react-transition-group` implemented `nodeRef`\n addEndListener(nodeRef.current, next);\n }\n };\n\n return /*#__PURE__*/_jsx(TransitionComponent, _extends({\n in: inProp,\n onEnter: handleEnter,\n onEntered: handleEntered,\n onEntering: handleEntering,\n onExit: handleExit,\n onExited: handleExited,\n onExiting: handleExiting,\n addEndListener: handleAddEndListener,\n nodeRef: nodeRef,\n timeout: timeout === 'auto' ? null : timeout\n }, other, {\n children: (state, childProps) => /*#__PURE__*/_jsx(CollapseRoot, _extends({\n as: component,\n className: clsx(classes.root, className, {\n 'entered': classes.entered,\n 'exited': !inProp && collapsedSize === '0px' && classes.hidden\n }[state]),\n style: _extends({\n [isHorizontal ? 'minWidth' : 'minHeight']: collapsedSize\n }, style),\n ownerState: _extends({}, ownerState, {\n state\n }),\n ref: handleRef\n }, childProps, {\n children: /*#__PURE__*/_jsx(CollapseWrapper, {\n ownerState: _extends({}, ownerState, {\n state\n }),\n className: classes.wrapper,\n ref: wrapperRef,\n children: /*#__PURE__*/_jsx(CollapseWrapperInner, {\n ownerState: _extends({}, ownerState, {\n state\n }),\n className: classes.wrapperInner,\n children: children\n })\n })\n }))\n }));\n});\nprocess.env.NODE_ENV !== \"production\" ? Collapse.propTypes\n/* remove-proptypes */\n= {\n // ----------------------------- Warning --------------------------------\n // | These PropTypes are generated from the TypeScript type definitions |\n // | To update them edit the d.ts file and run \"yarn proptypes\" |\n // ----------------------------------------------------------------------\n\n /**\n * Add a custom transition end trigger. Called with the transitioning DOM\n * node and a done callback. Allows for more fine grained transition end\n * logic. Note: Timeouts are still used as a fallback if provided.\n */\n addEndListener: PropTypes.func,\n\n /**\n * The content node to be collapsed.\n */\n children: PropTypes.node,\n\n /**\n * Override or extend the styles applied to the component.\n */\n classes: PropTypes.object,\n\n /**\n * @ignore\n */\n className: PropTypes.string,\n\n /**\n * The width (horizontal) or height (vertical) of the container when collapsed.\n * @default '0px'\n */\n collapsedSize: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n\n /**\n * The component used for the root node.\n * Either a string to use a HTML element or a component.\n */\n component: elementTypeAcceptingRef,\n\n /**\n * The transition timing function.\n * You may specify a single easing or a object containing enter and exit values.\n */\n easing: PropTypes.oneOfType([PropTypes.shape({\n enter: PropTypes.string,\n exit: PropTypes.string\n }), PropTypes.string]),\n\n /**\n * If `true`, the component will transition in.\n */\n in: PropTypes.bool,\n\n /**\n * @ignore\n */\n onEnter: PropTypes.func,\n\n /**\n * @ignore\n */\n onEntered: PropTypes.func,\n\n /**\n * @ignore\n */\n onEntering: PropTypes.func,\n\n /**\n * @ignore\n */\n onExit: PropTypes.func,\n\n /**\n * @ignore\n */\n onExited: PropTypes.func,\n\n /**\n * @ignore\n */\n onExiting: PropTypes.func,\n\n /**\n * The transition orientation.\n * @default 'vertical'\n */\n orientation: PropTypes.oneOf(['horizontal', 'vertical']),\n\n /**\n * @ignore\n */\n style: PropTypes.object,\n\n /**\n * The system prop that allows defining system overrides as well as additional CSS styles.\n */\n sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),\n\n /**\n * The duration for the transition, in milliseconds.\n * You may specify a single timeout for all transitions, or individually with an object.\n *\n * Set to 'auto' to automatically calculate transition time based on height.\n * @default duration.standard\n */\n timeout: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.number, PropTypes.shape({\n appear: PropTypes.number,\n enter: PropTypes.number,\n exit: PropTypes.number\n })])\n} : void 0;\nCollapse.muiSupportAuto = true;\nexport default Collapse;","import { useState } from \"react\";\nimport { InformationCardProps } from \"./types\";\nimport { Alert, Typography, Box, alpha, Collapse } from \"@mui/material\";\n\nexport const InformationCard = ({\n title,\n content,\n onClose,\n actionElement,\n onClick,\n color,\n id,\n sx,\n}: InformationCardProps) => {\n const [open, setOpen] = useState(true);\n return (\n \n {\n e.stopPropagation();\n onClose && onClose();\n setOpen(false);\n }}\n onClick={onClick}\n color={color}\n sx={(theme) => ({\n \"transition\": \"0.2s\",\n \"width\": \"100%\",\n \":hover\": {\n backgroundColor: alpha(theme.palette[color].main, theme.custom.opacity.alert),\n cursor: \"pointer\",\n },\n \".MuiAlert-message\": {\n flex: 1,\n },\n })}\n id={id}\n data-testid={id}\n >\n ({\n marginBottom: title && content ? theme.custom.gutterMargin : 0,\n width: \"100%\",\n flex: 1,\n })}\n >\n <>\n ({\n fontSize: theme.typography.body1,\n marginBottom: 0,\n fontWeight: title ? theme.typography.fontWeightBold : theme.typography.fontWeightMedium,\n })}\n data-testid={`${id || \"\"}-title`}\n >\n {title || content}\n \n {typeof actionElement === \"string\" && actionElement && (\n ({\n marginBottom: \"0\",\n fontWeight: theme.typography.fontWeightMedium,\n })}\n data-testid={`${id || \"\"}-action`}\n >\n {actionElement}\n \n )}\n {typeof actionElement === \"object\" && { actionElement }}\n \n \n\n {title && content && (\n \n {content}\n \n )}\n \n \n );\n};\n","export enum LogoSizeEnum {\n LARGE = \"large\",\n MEDIUM = \"medium\",\n SMALL = \"small\",\n}\n\nexport interface LogoProps {\n size?: LogoSizeEnum;\n isLoading?: boolean;\n}\n","import PandaIcon from \"../../assets/storeLogoBorderless.svg\";\nimport { StoreLogo } from \"@cede/ds\";\nimport { LogoProps, LogoSizeEnum } from \"./Logo.types\";\nimport { Box, useTheme } from \"@mui/material\";\n\nexport const Logo = ({ size, isLoading = false }: LogoProps) => {\n const theme = useTheme();\n\n const imageSize = (() => {\n if (size === LogoSizeEnum.LARGE) {\n return theme.custom.imgSize.large;\n }\n if (size === LogoSizeEnum.MEDIUM) {\n return theme.custom.imgSize.medium;\n }\n if (size === LogoSizeEnum.SMALL) {\n return theme.custom.imgSize.small;\n }\n return theme.custom.imgSize.large;\n })();\n\n const borderSize = (() => {\n if (size === LogoSizeEnum.LARGE) {\n return \"6px\";\n }\n if (size === LogoSizeEnum.MEDIUM) {\n return \"3px\";\n }\n if (size === LogoSizeEnum.SMALL) {\n return \"2px\";\n }\n return \"6px\";\n })();\n\n if (isLoading) {\n return (\n <>\n \n \n \n \n );\n }\n\n return ;\n};\n","import { ChangeEvent, forwardRef, RefObject, useEffect, useRef, useState } from \"react\";\nimport { Any } from \"@cede/types\";\nimport { isChildOf, sortItemsByDescendingAmountAndAlphabetical } from \"@cede/utils\";\nimport { IconGroup } from \"../IconGroup\";\nimport {\n MultiSelectDropListItem,\n MultiSelectDropListOption,\n MultiSelectDropListPaperProps,\n MultiSelectDropListProps,\n} from \"./types\";\nimport {\n Autocomplete,\n Box,\n Checkbox,\n FormControl,\n IconButton,\n InputAdornment,\n InputLabel,\n OutlinedInput,\n SxProps,\n Theme,\n useTheme,\n} from \"@mui/material\";\nimport { SystemCssProperties } from \"@mui/system\";\n\nconst paperSx: SxProps = (theme) => ({\n background: theme.palette.background.paper,\n borderRadius: \"4px\",\n marginTop: \"8px\",\n boxShadow:\n \"0px 5px 5px -3px rgba(0, 0, 0, 0.2), 0px 8px 10px 1px rgba(0, 0, 0, 0.14), 0px 3px 14px 2px rgba(0, 0, 0, 0.12)\",\n});\n\nconst PaperComponent = forwardRef(\n ({ children, header, value, handleChange, ...props }: MultiSelectDropListPaperProps, ref) => {\n return (\n \n {header && header({ value, handleChange })}\n {children}\n \n );\n },\n);\n\nconst defaultOptionRenderSx = { \"& > img\": { mr: 2, flexShrink: 0 } };\nconst defaultOptionRender: MultiSelectDropListOption = (props, option, { selected }) => (\n \n \n {option.img && \"\"}\n {option.label}\n \n);\n\nexport function MultiSelectDropList({\n id,\n data,\n handleChange,\n label,\n rounded = false,\n width = \"100%\",\n value,\n placeholder,\n listHeader,\n renderOption,\n maxIcons = 5,\n timeout,\n inputSx,\n listBoxSx = {},\n focusRef,\n}: MultiSelectDropListProps) {\n const theme = useTheme();\n const [open, setOpen] = useState(false);\n const [inputValue, setInputValue] = useState(\"\");\n const [sortedItems, setSortedItems] = useState([]);\n\n const autoCompleteRef = useRef();\n const popupRef = useRef();\n const inputRef = useRef();\n const timeoutId = useRef();\n\n const toggleModal = (forceState?: boolean) => {\n clearTimeout(timeoutId.current);\n if (timeout) {\n timeoutId.current = setTimeout(() => {\n setOpen(forceState === undefined ? (prev) => !prev : forceState);\n }, timeout);\n return;\n }\n\n setOpen(forceState === undefined ? (prev) => !prev : forceState);\n };\n\n const onInput: React.FormEventHandler = (e: ChangeEvent) =>\n setInputValue(e.target.value);\n\n useEffect(() => {\n if (!inputRef || !inputRef.current) return;\n\n const closePopupOnClickOutsideOfElement: (this: HTMLElement, ev: globalThis.MouseEvent) => void = (e) => {\n const { target } = e;\n\n if (!isChildOf(target, popupRef.current) && !isChildOf(target, autoCompleteRef.current)) {\n setOpen(false);\n clearTimeout(timeoutId.current);\n return;\n }\n\n if (inputRef.current) inputRef.current.focus();\n };\n\n document.body.addEventListener(\"click\", closePopupOnClickOutsideOfElement);\n\n return () => document.body.removeEventListener(\"click\", closePopupOnClickOutsideOfElement);\n }, [inputRef]);\n\n useEffect(() => {\n if (!open) setInputValue(\"\");\n\n if (!open && focusRef) {\n if (focusRef.current.unFocus != null) {\n focusRef.current.unFocus();\n }\n inputRef.current?.blur();\n }\n }, [open]);\n\n useEffect(() => {\n setSortedItems(sortItemsByDescendingAmountAndAlphabetical(data) as T[]);\n }, [data]);\n\n return (\n value.value === option.value}\n disablePortal\n inputValue={inputValue}\n onInput={onInput}\n value={value}\n ref={autoCompleteRef}\n multiple\n id={id}\n data-testid={id}\n open={open}\n options={sortedItems}\n autoHighlight\n disableCloseOnSelect\n PaperComponent={PaperComponent as Any}\n getOptionLabel={(option: MultiSelectDropListItem) => option.label}\n onChange={(_, values: T[]) => {\n handleChange && handleChange(values);\n }}\n ListboxProps={\n {\n \"sx\": { padding: \"0\", ...listBoxSx },\n \"data-testid\": `${id || \"\"}-list`,\n } as Any\n }\n componentsProps={{\n paper: {\n header: listHeader,\n value,\n handleChange,\n ref: popupRef as RefObject,\n } as MultiSelectDropListPaperProps,\n popper: {\n modifiers: [\n {\n name: \"flip\",\n enabled: false,\n },\n ],\n },\n }}\n renderOption={renderOption || defaultOptionRender}\n renderInput={({ InputProps, InputLabelProps, ...params }) => (\n \n \n {label}\n toggleModal(true)}\n onFocus={() => toggleModal(true)}\n sx={{\n \".MuiAutocomplete-input\": { padding: \"0!important\" },\n \"padding\": theme.custom.gutterMargin + \"!important\",\n \"borderRadius\": rounded ? theme.custom.buttonRoundedRadius : theme.custom.inputRadius.default,\n \"paddingRight\": theme.custom.gutterMargin + \"!important\",\n width,\n \"justifyContent\": \"space-between\",\n ...(typeof inputSx === \"function\" ? inputSx(theme) : (inputSx as SystemCssProperties)),\n }}\n value={params.inputProps.value}\n startAdornment={\n \n {\n ({\n name: v.value,\n src: v.img || \"\",\n }))}\n id={`${id || \"\"}-icon-group`}\n />\n }\n \n }\n endAdornment={\n toggleModal()}\n sx={{\n transition: \"transform 0.3s\",\n transformOrigin: \"center\",\n transform: open ? \"rotate(-180deg)\" : \"rotate(0)\",\n }}\n >\n \n \n \n \n }\n label={label}\n placeholder={value.length ? \"\" : placeholder}\n {...params}\n inputProps={{\n ...params.inputProps,\n \"data-testid\": `${id || \"\"}-input`,\n }}\n inputRef={inputRef}\n />\n \n \n )}\n />\n );\n}\n","\"use client\";\n\nimport createSvgIcon from './utils/createSvgIcon';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon( /*#__PURE__*/_jsx(\"path\", {\n d: \"M20 11H7.83l5.59-5.59L12 4l-8 8 8 8 1.41-1.41L7.83 13H20z\"\n}), 'ArrowBack');","import { Button } from \"@cede/ds\";\nimport { ArrowBack } from \"@mui/icons-material\";\nimport { Typography, Box, useTheme } from \"@mui/material\";\n\nexport const BackButton = ({ onClick = () => null }: { onClick?: () => void }) => {\n const theme = useTheme();\n\n return (\n \n \n \n );\n};\n","import { Typography, Box } from \"@mui/material\";\n\nexport const Title = ({ title }: { title: string }) => {\n return (\n \n {title}\n \n );\n};\n","import React from \"react\";\nimport { Logo, LogoSizeEnum } from \"@cede/ds\";\nimport { BackButton } from \"./components/BackButton\";\nimport { Title } from \"./components/Title\";\nimport { create } from \"zustand\";\n\ninterface StoreState {\n leftSide?: React.ReactElement | null;\n center?: React.ReactElement | null;\n rightSide?: React.ReactElement | null;\n isDisplayed: boolean;\n}\n\ninterface ZustandNavBarStore extends StoreState {\n setLeftSide: (component: React.ReactElement | null) => void;\n setCenter: (component: React.ReactElement | null) => void;\n setRightSide: (component: React.ReactElement | null) => void;\n setIsDisplayed: (newValue: boolean) => void;\n toggleDisplay: () => void;\n setLogo: (isLoading?: boolean) => void;\n setGoBack: (onClick: () => void) => void;\n setTitle: (title: string) => void;\n setGeneral: ({ leftSide, center, rightSide, isDisplayed }: StoreState) => void;\n}\n\nexport const useNavBar = create((set) => ({\n leftSide: null,\n center: null,\n rightSide: null,\n isDisplayed: false,\n setLeftSide: (component: React.ReactElement | null) => set(() => ({ leftSide: component })),\n setCenter: (component: React.ReactElement | null) => set(() => ({ center: component })),\n setRightSide: (component: React.ReactElement | null) => set(() => ({ rightSide: component })),\n setIsDisplayed: (newValue: boolean) => set(() => ({ isDisplayed: newValue })),\n toggleDisplay: () => set((state: StoreState) => ({ isDisplayed: !state.isDisplayed })),\n setLogo: (isLoading?: boolean) =>\n set(() => ({\n leftSide: ,\n })),\n setGoBack: (onClick: () => void) => set(() => ({ leftSide: })),\n setTitle: (title: string) => set(() => ({ center: })),\n setGeneral: ({ leftSide = null, center = null, rightSide = null, isDisplayed }: StoreState) =>\n set(() => ({\n leftSide,\n center,\n rightSide,\n isDisplayed,\n })),\n}));\n","import { IconButtonWithPopper } from \"@cede/ds\";\nimport { CircularProgress, Typography, useTheme } from \"@mui/material\";\n\nexport const PendingTransactionLoader = () => {\n const theme = useTheme();\n\n return (\n <IconButtonWithPopper icon={<CircularProgress size={20} thickness={8} color={\"warning\"} />}>\n <Typography variant=\"caption\" color={theme.palette.text.primary}>\n Transaction is pending, please wait for status update\n </Typography>\n </IconButtonWithPopper>\n );\n};\n","import { ApiPermissions } from \"@cede/types\";\n\nexport const PERMISSIONS_ICONS = {\n [ApiPermissions.READ]: (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\">\n <path\n d=\"M7 3.02801C5.90107 2.04224 4.47626 1.49797 3 1.50001C2.29867 1.50001 1.62533 1.62001 1 1.84134V11.3413C1.64241 11.1147 2.31878 10.9993 3 11C4.53667 11 5.93867 11.578 7 12.528M7 3.02801C8.09889 2.04219 9.52372 1.4979 11 1.50001C11.7013 1.50001 12.3747 1.62001 13 1.84134V11.3413C12.3576 11.1147 11.6812 10.9993 11 11C9.52374 10.998 8.09893 11.5422 7 12.528M7 3.02801V12.528\"\n stroke=\"white\"\n strokeOpacity=\"0.56\"\n strokeWidth=\"1.1\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n ),\n [ApiPermissions.TRADE]: (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M8.63115 0.846559C8.38381 0.997567 8.3812 1.39331 8.62854 1.52609C8.67801 1.55473 8.83423 1.61722 8.97743 1.66929C10.1386 2.08847 11.1879 2.93464 11.9507 4.0698C12.0523 4.22081 12.1356 4.35099 12.1304 4.35359C12.1252 4.3588 12.0471 4.34318 11.9533 4.31714C11.7919 4.27548 11.7789 4.27548 11.6617 4.31974C11.3753 4.4291 11.3154 4.81963 11.555 5.0097C11.594 5.03833 11.9117 5.1581 12.2658 5.27526C12.987 5.51479 13.0338 5.52 13.1978 5.36899C13.2759 5.29609 13.315 5.21017 13.4947 4.67904C13.7212 4.01512 13.7472 3.86672 13.6535 3.72613C13.5728 3.60636 13.4712 3.55429 13.315 3.55429C13.0911 3.55429 12.987 3.64542 12.8828 3.93181C12.8646 3.98128 12.8646 3.98128 12.8359 3.93441C12.8177 3.90838 12.7136 3.74956 12.6042 3.58293C11.7685 2.32279 10.5318 1.34384 9.19092 0.883009C8.89671 0.781469 8.75352 0.771055 8.63115 0.846559Z\"\n fill=\"white\"\n fillOpacity=\"0.56\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M2.33569 2.44514C2.97096 1.81247 3.726 1.43495 4.60341 1.31779C4.89762 1.27613 5.60319 1.30477 5.9026 1.36726C6.41811 1.47661 6.86853 1.66667 7.31114 1.95827C7.62357 2.16916 8.10784 2.63781 8.31873 2.94243C8.7301 3.53344 8.96702 4.19475 9.02951 4.92376L9.04773 5.13725L9.26123 5.15548C10.1803 5.23359 10.9978 5.59288 11.6487 6.20212C12.258 6.77751 12.6407 7.45965 12.8229 8.30322C12.9063 8.68334 12.9063 9.46442 12.8229 9.84454C12.6485 10.6569 12.3126 11.2739 11.7398 11.8493C11.016 12.5731 10.1491 12.9558 9.13365 12.9975C8.23542 13.0365 7.34238 12.7684 6.63421 12.245C6.37906 12.0576 5.93124 11.5994 5.7568 11.352C5.34543 10.7636 5.10851 10.1023 5.04602 9.37069L5.0278 9.15719L4.8143 9.13897C4.27796 9.09471 3.78849 8.95672 3.33286 8.725C2.93972 8.52452 2.66634 8.32404 2.32527 7.98297C1.7629 7.4206 1.42443 6.79313 1.25259 5.99123C1.16928 5.6059 1.16928 4.83263 1.2552 4.43949C1.42703 3.63759 1.7629 3.02054 2.33569 2.44514ZM8.18595 4.6608C7.92819 3.3538 6.89457 2.34621 5.60579 2.13532C4.61903 1.9765 3.62707 2.30195 2.90848 3.01793C1.79674 4.12966 1.67698 5.84022 2.62468 7.09775C3.0022 7.60025 3.55156 7.99599 4.14258 8.18605C4.50708 8.30322 4.69714 8.33185 5.13715 8.32925C5.56934 8.32925 5.83751 8.28239 6.19941 8.1444C7.02995 7.83457 7.72511 7.13941 8.03494 6.30887C8.17293 5.94697 8.21979 5.6788 8.21979 5.2466C8.2224 4.99926 8.20938 4.77275 8.18595 4.6608ZM12.0497 9.56856C12.3126 7.93351 11.2217 6.35834 9.58928 6.01466C9.48774 5.99383 9.30549 5.9678 9.18312 5.95999C8.97483 5.94176 8.96442 5.94436 8.96442 5.99383C8.96442 6.07715 8.84205 6.48591 8.74572 6.71763L8.6624 6.92592C8.10747 8.13984 7.18146 8.67276 6.78782 8.78748C6.78522 8.78748 6.6967 8.82133 6.58995 8.86299C6.36864 8.95411 5.96248 9.07388 5.88438 9.07388C5.83491 9.07388 5.8323 9.08429 5.85053 9.29258C5.93384 10.3939 6.57693 11.3546 7.56369 11.8597C9.43046 12.81 11.7112 11.6462 12.0497 9.56856Z\"\n fill=\"white\"\n fillOpacity=\"0.56\"\n />\n <path\n d=\"M1.01045 8.84218C0.849024 8.88644 0.799555 8.97757 0.580854 9.61805C0.354342 10.2768 0.328306 10.4252 0.422035 10.5684C0.502746 10.6881 0.604286 10.7402 0.760502 10.7402C0.98441 10.7402 1.08855 10.6491 1.1927 10.3627C1.21092 10.3132 1.21092 10.3132 1.23956 10.3601C1.58324 10.9198 1.9191 11.352 2.36431 11.7973C2.85899 12.2945 3.34847 12.6669 3.91084 12.9793C4.38209 13.2396 5.05121 13.5 5.24909 13.5C5.54329 13.5 5.72815 13.1693 5.58495 12.9038C5.52767 12.7996 5.44175 12.7476 5.09808 12.6252C3.93688 12.2086 2.87201 11.3468 2.11176 10.2091C2.01543 10.0659 1.93993 9.9435 1.94513 9.9409C1.95034 9.93569 2.02845 9.95131 2.12218 9.97735C2.2836 10.019 2.29662 10.019 2.41378 9.97474C2.57781 9.91226 2.66372 9.78468 2.66372 9.60764C2.66372 9.46444 2.60124 9.33686 2.4997 9.26917C2.41638 9.2171 1.21092 8.81354 1.14063 8.81615C1.11199 8.81615 1.0521 8.82916 1.01045 8.84218Z\"\n fill=\"white\"\n fillOpacity=\"0.56\"\n />\n </svg>\n ),\n [ApiPermissions.WITHDRAW]: (\n <svg width=\"13\" height=\"12\" viewBox=\"0 0 13 12\" fill=\"none\">\n <path\n d=\"M2.66699 2.00033C2.8438 2.00033 3.01337 1.93009 3.1384 1.80506C3.26342 1.68004 3.33366 1.51047 3.33366 1.33366C3.33366 1.15685 3.26342 0.987279 3.1384 0.862254C3.01337 0.73723 2.8438 0.666992 2.66699 0.666992H1.33366C1.15685 0.666992 0.987279 0.73723 0.862254 0.862254C0.73723 0.987279 0.666992 1.15685 0.666992 1.33366V10.667C0.666992 10.8438 0.73723 11.0134 0.862254 11.1384C0.987279 11.2634 1.15685 11.3337 1.33366 11.3337H2.66699C2.8438 11.3337 3.01337 11.2634 3.1384 11.1384C3.26342 11.0134 3.33366 10.8438 3.33366 10.667C3.33366 10.4902 3.26342 10.3206 3.1384 10.1956C3.01337 10.0706 2.8438 10.0003 2.66699 10.0003H2.00033V2.00033H2.66699ZM11.8803 5.61366L10.0003 2.94699C9.89837 2.80327 9.74366 2.70575 9.57001 2.67577C9.39636 2.64579 9.21791 2.68578 9.07366 2.78699C9.00156 2.83752 8.94018 2.90182 8.89306 2.9762C8.84595 3.05057 8.81403 3.13354 8.79916 3.22032C8.78428 3.30709 8.78674 3.39595 8.80639 3.48177C8.82605 3.56759 8.8625 3.64867 8.91366 3.72033L10.0603 5.33366H4.66699C4.49018 5.33366 4.32061 5.4039 4.19559 5.52892C4.07056 5.65394 4.00033 5.82351 4.00033 6.00033C4.00033 6.17714 4.07056 6.34671 4.19559 6.47173C4.32061 6.59675 4.49018 6.66699 4.66699 6.66699H10.0003L8.80033 8.26699C8.7478 8.33703 8.70958 8.41673 8.68785 8.50154C8.66612 8.58635 8.66131 8.67461 8.67369 8.76127C8.68607 8.84794 8.7154 8.93132 8.76001 9.00665C8.80462 9.08199 8.86362 9.1478 8.93366 9.20032C9.04906 9.28687 9.18941 9.33366 9.33366 9.33366C9.43716 9.33366 9.53923 9.30956 9.6318 9.26328C9.72437 9.21699 9.80489 9.14979 9.86699 9.06699L11.867 6.40033C11.9524 6.28757 11.9997 6.15058 12.0021 6.00917C12.0045 5.86775 11.9618 5.72924 11.8803 5.61366Z\"\n fill=\"white\"\n fillOpacity=\"0.56\"\n />\n </svg>\n ),\n};\n\nfunction getPermissionIcon(permission: ApiPermissions) {\n return PERMISSIONS_ICONS[permission];\n}\n\ntype Props = {\n permission: ApiPermissions;\n};\n\nexport function PermissionIcon({ permission }: Props) {\n return getPermissionIcon(permission);\n}\n","import { forwardRef } from \"react\";\nimport { Any } from \"@cede/types\";\nimport { BubbleProps } from \"./types\";\nimport { Box, Popper, useTheme } from \"@mui/material\";\n\nexport const Bubble = forwardRef<HTMLDivElement, BubbleProps>(\n (\n {\n children,\n isOpen,\n testId,\n id,\n anchor,\n placement = \"top\",\n sx = {},\n background,\n hideArrow,\n onMouseOut,\n disablePortal,\n },\n ref,\n ) => {\n const theme = useTheme();\n const popperBackground = background || theme.palette.cedeBubbleBackgroundColor;\n\n if (!anchor) return null;\n return (\n <Popper\n ref={ref}\n placement={placement}\n id={id}\n open={isOpen}\n anchorEl={anchor}\n sx={[{ padding: \"10px\", zIndex: 1 }, sx as Any]}\n data-testid={testId}\n onMouseOut={onMouseOut}\n disablePortal={disablePortal}\n placeholder={undefined}\n onPointerEnterCapture={undefined}\n onPointerLeaveCapture={undefined}\n >\n <Box\n sx={{\n paddingX: theme.custom.smallGutterMargin,\n paddingY: `calc(${theme.custom.smallGutterMargin} / 2)`,\n borderRadius: theme.custom.defaultBoxRadius,\n background: popperBackground,\n position: \"relative\",\n display: \"flex\",\n transform: placement?.includes(\"bottom\") ? \"rotate(180deg)\" : \"rotate(0)\",\n }}\n >\n <Box\n display={\"inline-flex\"}\n sx={{\n transform: placement?.includes(\"bottom\") ? \"rotate(180deg)\" : \"rotate(0)\",\n }}\n >\n {children}\n </Box>\n {!hideArrow && (\n <Box\n sx={{\n background: popperBackground,\n clipPath: \"polygon(0% 0, 100% 0%, 50% 100%)\",\n width: \"12px\",\n height: \"6px\",\n position: \"absolute\",\n bottom: \"-6px\",\n left: \"calc(50% - 6px)\",\n }}\n />\n )}\n </Box>\n </Popper>\n );\n },\n);\n","import { Fragment, useEffect, useRef, useState } from \"react\";\nimport { isChildOf } from \"@cede/utils\";\nimport { getDomRoot } from \"../../utils/getDomRoot\";\nimport { ResizeFieldsWrapperProps } from \"./types\";\nimport { Box, SxProps, Theme, useTheme } from \"@mui/material\";\n\nexport const ResizeFieldsWrapper = ({\n fieldElements,\n id,\n middleElement,\n sx,\n focusRef,\n indexesDisabled,\n}: ResizeFieldsWrapperProps) => {\n const theme = useTheme();\n\n const fieldRefs = useRef<HTMLElement[]>([]);\n const componentRef = useRef<HTMLElement>(null);\n const [focusElement, setFocusElement] = useState<number>(-1);\n\n useEffect(() => {\n const handler = (e: globalThis.Event) => {\n if (!fieldRefs.current.some((field) => isChildOf(e.target, field))) {\n unFocus();\n }\n };\n\n if (!componentRef.current) return;\n const root = getDomRoot(componentRef.current);\n\n root.addEventListener(\"click\", handler);\n return () => root.removeEventListener(\"click\", handler);\n }, []);\n\n const unFocus = () => {\n setFocusElement(-1);\n };\n\n useEffect(() => {\n if (focusRef) {\n focusRef.current.unFocus = unFocus;\n }\n }, []);\n\n return (\n <Box\n ref={componentRef}\n sx={{\n width: \"100%\",\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n ...sx,\n }}\n >\n {fieldElements.map((field, index) => {\n let removeStyle: SxProps<Theme> = {};\n let width = `calc(${100 / fieldElements.length}% - calc(${theme.custom.gutterMargin}) / 2)`;\n\n if (focusElement !== -1) {\n width = focusElement === index ? \"100%\" : \"0%\";\n\n if (focusElement !== index) {\n removeStyle = { overflowX: \"hidden\" };\n }\n }\n\n return (\n <Fragment key={index}>\n {index > 0 && focusElement === -1 && middleElement}\n <Box\n sx={{\n width,\n transition: \"width 0.3s\",\n opacity: 1,\n ...removeStyle,\n }}\n onClick={() => {\n if (indexesDisabled?.includes(index)) return;\n setFocusElement(index);\n }}\n ref={(element: HTMLElement) => {\n fieldRefs.current[index] = element;\n }}\n data-testid={`${id || \"\"}-wrapper-${index}`}\n >\n {field}\n </Box>\n </Fragment>\n );\n })}\n </Box>\n );\n};\n","/**\n * Get the DOM root relative to an element, used for environment agnostic event handling regarding the widget shadow DOM\n * @param element An element to get the root of, if null, the document.body will be returned\n * @returns The root of the element\n */\nexport function getDomRoot(element: HTMLElement | null): Node {\n if (!element) return document.body;\n return element.getRootNode();\n}\n","\"use client\";\n\nimport createSvgIcon from './utils/createSvgIcon';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon( /*#__PURE__*/_jsx(\"path\", {\n d: \"M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14\"\n}), 'Search');","import { TextFieldWithIcon } from \"../TextFieldWithIcon\";\nimport { SearchBarProps } from \"./types\";\nimport { Search } from \"@mui/icons-material\";\nimport { Box, useTheme } from \"@mui/material\";\n\nexport const SearchBar = ({ value, onChange, onSubmit, placeholder = \"Search\", inputRef, sx }: SearchBarProps) => {\n const theme = useTheme();\n return (\n <Box sx={{ ...sx }}>\n <TextFieldWithIcon\n sx={{\n \".MuiOutlinedInput-root\": {\n \"borderRadius\": theme.custom.buttonSmallRadius,\n \".MuiOutlinedInput-notchedOutline\": {\n border: \"none\",\n },\n \"background\": theme.palette.background?.paper,\n },\n \".MuiInputBase-input\": {\n padding: theme.custom.smallGutterMargin,\n },\n \".MuiInputBase-root\": {\n paddingLeft: theme.custom.smallGutterMargin,\n },\n }}\n inputRef={inputRef}\n placeholder={placeholder}\n value={value}\n handleChange={onChange}\n icon={\n <Box\n display={\"flex\"}\n onClick={onSubmit}\n sx={{\n \"cursor\": \"pointer\",\n \":hover .MuiSvgIcon-root\": {\n opacity: 0.9,\n },\n }}\n >\n <Search sx={{ opacity: 0.56, transition: \"0.3s\", color: \"text.primary\" }} />\n </Box>\n }\n iconPosition=\"start\"\n />\n </Box>\n );\n};\n","import GasIcon from \"./asset/gasIcon.svg\";\nimport { forwardRef } from \"react\";\nimport { Icon } from \"../Icon\";\nimport { SelectGasPriceProps } from \"./types\";\nimport { Box, IconButton, Typography } from \"@mui/material\";\n\nexport const SelectGasPrice = forwardRef(\n ({ icon, value, isActive = false, setIsActive, ...props }: SelectGasPriceProps, ref) => {\n return (\n <Box ref={ref} flex=\"1\" display={\"flex\"} justifyContent=\"flex-end\">\n <Box display=\"flex\" alignItems=\"center\">\n <Icon iconUrl={GasIcon} iconName={\"gas-icon\"} iconChildUrl={icon} />\n <Typography ml=\"11px\">{value}</Typography>\n\n <IconButton\n onClick={() => setIsActive(!isActive)}\n sx={{\n transition: \"transform 0.3s\",\n transformOrigin: \"center\",\n transform: isActive ? \"rotate(-180deg)\" : \"rotate(0)\",\n ml: \"16px\",\n }}\n data-testid={`${props.testId || \"\"}-btn`}\n >\n <svg width=\"12\" height=\"8\" viewBox=\"0 0 12 8\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M10.59 0.294922L6 4.87492L1.41 0.294922L0 1.70492L6 7.70492L12 1.70492L10.59 0.294922Z\"\n fill=\"white\"\n fillOpacity=\"0.56\"\n />\n </svg>\n </IconButton>\n </Box>\n </Box>\n );\n },\n);\n","\"use client\";\n\nimport createSvgIcon from './utils/createSvgIcon';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon( /*#__PURE__*/_jsx(\"path\", {\n d: \"M20 4H4c-1.11 0-1.99.89-1.99 2L2 18c0 1.11.89 2 2 2h16c1.11 0 2-.89 2-2V6c0-1.11-.89-2-2-2m0 14H4v-6h16zm0-10H4V6h16z\"\n}), 'CreditCardOutlined');","\"use client\";\n\nimport createSvgIcon from './utils/createSvgIcon';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon( /*#__PURE__*/_jsx(\"path\", {\n d: \"M15 4c-4.42 0-8 3.58-8 8s3.58 8 8 8 8-3.58 8-8-3.58-8-8-8m0 14c-3.31 0-6-2.69-6-6s2.69-6 6-6 6 2.69 6 6-2.69 6-6 6M3 12c0-2.61 1.67-4.83 4-5.65V4.26C3.55 5.15 1 8.27 1 12s2.55 6.85 6 7.74v-2.09c-2.33-.82-4-3.04-4-5.65\"\n}), 'TollOutlined');","import { CefiServices } from \"@cede/types\";\nimport { CreditCardOutlined, TollOutlined } from \"@mui/icons-material\";\n\nexport const SERVICE_ICONS = {\n [CefiServices.CARD]: <CreditCardOutlined />,\n [CefiServices.STAKING]: <TollOutlined />,\n};\n\nfunction getServiceIcon(type: CefiServices) {\n return SERVICE_ICONS[type];\n}\n\ntype Props = {\n type: CefiServices;\n};\n\nexport function ServiceIcon({ type }: Props) {\n return getServiceIcon(type);\n}\n","import { POST_ON_TWITTER_URL } from \"@cede/utils\";\nimport { XIcon } from \"../SharedIcons\";\nimport { ShareOnTwitterProps } from \"./types\";\nimport { Box, Link, SvgIcon, useTheme } from \"@mui/material\";\n\nfunction mapContent(content: string, mappingTable: Record<string, string | undefined>) {\n return Object.entries(mappingTable).reduce((acc, [key, value]) => {\n if (!value) return acc;\n return acc.replace(`{${key}}`, value);\n }, content);\n}\n\n/**\n * @param content - The content to share on Twitter\n * @param mappingTable - If the content contains placeholders like \"{key}\", this object will be used to replace them with the corresponding value\n * @param props - Basic props for the component (id, testId, sx)\n */\nexport const ShareOnTwitter = ({ content, mappingTable, ...props }: ShareOnTwitterProps) => {\n const theme = useTheme();\n\n const mappedContent = mapContent(content, mappingTable);\n const twitterUrl = `${POST_ON_TWITTER_URL}${encodeURIComponent(mappedContent)}`;\n\n return (\n <Box\n id={props.id}\n data-testId={props.testId}\n sx={{\n padding: theme.custom.smallGutterMargin,\n ...props.sx,\n }}\n >\n <Link\n href={twitterUrl}\n sx={{\n color: theme.palette.text.primary,\n display: \"flex\",\n columnGap: theme.custom.smallGutterMargin,\n marginLeft: \"auto\",\n alignItems: \"center\",\n }}\n target=\"_blank\"\n rel=\"noreferrer\"\n >\n Share on\n <SvgIcon\n component=\"svg\"\n sx={{\n fontSize: \"14px\",\n fill: theme.palette.text.primary,\n }}\n viewBox=\"0 0 14 14\"\n >\n <XIcon innerLogoColor={theme.palette.text.primary} />\n </SvgIcon>\n </Link>\n </Box>\n );\n};\n","// @TODO: Add this to a SVG sprite so we don't lose tracking of our SVGs by centralizing them\n\nconst TELEGRAM_ICON = (\n <path d=\"M24 12C24 18.627 18.627 24 12 24C5.373 24 0 18.627 0 12C0 5.373 5.373 0 12 0C18.627 0 24 5.373 24 12ZM12.43 8.859C11.2633 9.34433 8.93067 10.349 5.432 11.873C4.864 12.099 4.56633 12.32 4.539 12.536C4.493 12.902 4.951 13.046 5.573 13.241L5.836 13.325C6.449 13.524 7.273 13.757 7.701 13.766C8.08967 13.774 8.52367 13.614 9.003 13.286C12.271 11.0793 13.958 9.964 14.064 9.94C14.139 9.923 14.243 9.901 14.313 9.964C14.383 10.026 14.376 10.144 14.369 10.176C14.323 10.369 12.529 12.038 11.599 12.902C11.309 13.171 11.104 13.362 11.062 13.406C10.9667 13.5027 10.8727 13.5957 10.78 13.685C10.21 14.233 9.784 14.645 10.804 15.317C11.294 15.64 11.686 15.907 12.077 16.173C12.504 16.464 12.93 16.754 13.482 17.116C13.622 17.2093 13.757 17.3027 13.887 17.396C14.384 17.751 14.831 18.069 15.383 18.019C15.703 17.989 16.035 17.688 16.203 16.789C16.6 14.663 17.382 10.059 17.563 8.161C17.575 8.00343 17.5683 7.84499 17.543 7.689C17.529 7.56275 17.4675 7.44655 17.371 7.364C17.228 7.247 17.006 7.222 16.906 7.224C16.455 7.232 15.763 7.473 12.43 8.859Z\" />\n);\n\nconst TWITTER_ICON = (\n <path d=\"M12 0C5.37321 0 0 5.37321 0 12C0 18.6268 5.37321 24 12 24C18.6268 24 24 18.6268 24 12C24 5.37321 18.6268 0 12 0ZM17.767 9.04554C17.775 9.17143 17.775 9.30268 17.775 9.43125C17.775 13.3634 14.7804 17.8929 9.30804 17.8929C7.62054 17.8929 6.05625 17.4027 4.73839 16.5589C4.97946 16.5857 5.20982 16.5964 5.45625 16.5964C6.84911 16.5964 8.12946 16.125 9.15 15.3268C7.84286 15.3 6.74464 14.4429 6.36964 13.2643C6.82768 13.3313 7.24018 13.3313 7.71161 13.2107C7.03855 13.074 6.43359 12.7084 5.99951 12.1762C5.56542 11.644 5.32898 10.9779 5.33036 10.2911V10.2536C5.72411 10.4759 6.1875 10.6125 6.67232 10.6313C6.26476 10.3596 5.93051 9.99164 5.69923 9.5599C5.46794 9.12817 5.34676 8.64603 5.34643 8.15625C5.34643 7.60179 5.49107 7.09554 5.75089 6.65625C6.49795 7.5759 7.43017 8.32806 8.48696 8.86384C9.54375 9.39961 10.7014 9.70702 11.8848 9.76607C11.4643 7.74375 12.975 6.10714 14.7911 6.10714C15.6482 6.10714 16.4196 6.46607 16.9634 7.04464C17.6357 6.91875 18.2786 6.66696 18.8518 6.32946C18.6295 7.01786 18.1634 7.59911 17.5446 7.96607C18.1446 7.90179 18.7232 7.73571 19.2589 7.50268C18.8545 8.09732 18.3482 8.625 17.767 9.04554Z\" />\n);\n\nexport const XIcon = ({ innerLogoColor = \"#1F1F1F\" }: { innerLogoColor?: string }) => (\n <path\n d=\"M0.0365853 0L5.82851 7.7228L0 14H1.3125L6.41387 8.50261L10.5366 14H15L8.88338 5.84397L14.3072 0H12.997L8.29802 5.06189L4.50229 0H0.0365853ZM1.96646 0.962215H4.01753L13.0724 13.0355H11.0213L1.96646 0.962215Z\"\n fill={innerLogoColor}\n />\n);\n\nconst X_ICON_OUTLINED = (\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M12 24C18.6274 24 24 18.6274 24 12C24 5.37258 18.6274 0 12 0C5.37258 0 0 5.37258 0 12C0 18.6274 5.37258 24 12 24ZM17.2903 6.56232H15.45L12.4166 10.0372L9.79714 6.56317H6L10.5351 12.5092L6.23571 17.4377H8.07771L11.3949 13.6363L14.2971 17.4377H18L13.2703 11.1686L17.2903 6.56232ZM15.8229 16.3337H14.8029L8.14629 7.60889H9.24L15.8229 16.3337Z\"\n />\n);\n\nconst LINKEDIN_ICON = (\n <path d=\"M12 0C5.3725 0 0 5.3725 0 12C0 18.6275 5.3725 24 12 24C18.6275 24 24 18.6275 24 12C24 5.3725 18.6275 0 12 0ZM9.0625 16.9738H6.6325V9.15375H9.0625V16.9738ZM7.8325 8.19375C7.065 8.19375 6.56875 7.65 6.56875 6.9775C6.56875 6.29125 7.08 5.76375 7.86375 5.76375C8.6475 5.76375 9.1275 6.29125 9.1425 6.9775C9.1425 7.65 8.6475 8.19375 7.8325 8.19375ZM17.9375 16.9738H15.5075V12.64C15.5075 11.6313 15.155 10.9462 14.2763 10.9462C13.605 10.9462 13.2063 11.41 13.03 11.8563C12.965 12.015 12.9488 12.24 12.9488 12.4638V16.9725H10.5175V11.6475C10.5175 10.6713 10.4862 9.855 10.4537 9.1525H12.565L12.6763 10.2388H12.725C13.045 9.72875 13.8288 8.97625 15.14 8.97625C16.7388 8.97625 17.9375 10.0475 17.9375 12.35V16.9738Z\" />\n);\n\nexport const DiscordIcon = ({ innerLogoColor = \"#1F1F1F\" }: { innerLogoColor?: string }) => (\n <>\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M24 12C24 18.627 18.627 24 12 24C5.373 24 0 18.627 0 12C0 5.373 5.373 0 12 0C18.627 0 24 5.373 24 12Z\"\n />\n <path\n fill={innerLogoColor}\n d=\"M16.8515 7.82936C15.959 7.44605 15.0024 7.16274 14.002 7.00164C13.9931 7.00001 13.9839 7.00106 13.9756 7.00464C13.9674 7.00823 13.9605 7.01416 13.9559 7.02164C13.8334 7.22662 13.6969 7.49383 13.6013 7.70493C12.5403 7.55396 11.4616 7.55396 10.4006 7.70493C10.2941 7.47097 10.1739 7.24286 10.0407 7.02164C10.0362 7.01407 10.0294 7.008 10.0211 7.00423C10.0129 7.00046 10.0037 6.99917 9.99464 7.00053C8.99483 7.16163 8.03819 7.44494 7.14513 7.82881C7.13745 7.83188 7.13094 7.83711 7.12647 7.84381C5.31119 10.3853 4.81362 12.864 5.05803 15.3116C5.05871 15.3176 5.06066 15.3234 5.06377 15.3287C5.06688 15.3339 5.07108 15.3385 5.07611 15.3422C6.13564 16.0768 7.31741 16.6365 8.57193 16.9976C8.58067 17.0002 8.59003 17.0002 8.59877 16.9976C8.60751 16.9951 8.61523 16.99 8.62092 16.9832C8.89088 16.6394 9.1301 16.2746 9.33607 15.8927C9.33893 15.8875 9.34058 15.8818 9.3409 15.8759C9.34123 15.87 9.34022 15.8641 9.33795 15.8586C9.33569 15.8532 9.33221 15.8482 9.32776 15.8441C9.32331 15.84 9.31799 15.8369 9.31216 15.8349C8.93534 15.6998 8.57023 15.5367 8.22019 15.3472C8.2139 15.3438 8.2086 15.3389 8.20476 15.3331C8.20093 15.3272 8.19868 15.3206 8.19822 15.3137C8.19775 15.3068 8.19909 15.2999 8.20211 15.2936C8.20513 15.2874 8.20974 15.2819 8.21552 15.2778C8.28902 15.2261 8.36252 15.1722 8.43251 15.1183C8.43882 15.1135 8.44641 15.1104 8.45444 15.1094C8.46247 15.1084 8.47063 15.1096 8.47801 15.1128C10.7687 16.0927 13.2495 16.0927 15.5134 15.1128C15.5208 15.1094 15.529 15.1081 15.5372 15.109C15.5453 15.1099 15.5531 15.1129 15.5595 15.1178C15.6295 15.1722 15.7024 15.2261 15.7765 15.2778C15.7823 15.2818 15.787 15.2872 15.7901 15.2934C15.7932 15.2996 15.7947 15.3065 15.7943 15.3134C15.794 15.3203 15.7918 15.3269 15.7881 15.3329C15.7844 15.3388 15.7792 15.3437 15.773 15.3472C15.4241 15.5383 15.0613 15.7 14.6804 15.8344C14.6746 15.8364 14.6692 15.8396 14.6648 15.8437C14.6603 15.8479 14.6569 15.8529 14.6546 15.8584C14.6523 15.8639 14.6513 15.8698 14.6517 15.8758C14.652 15.8817 14.6536 15.8875 14.6565 15.8927C14.8665 16.2744 15.1068 16.6377 15.3711 16.9826C15.3766 16.9897 15.3842 16.995 15.393 16.9978C15.4017 17.0006 15.4112 17.0007 15.4201 16.9982C16.6767 16.638 17.8604 16.0781 18.9211 15.3422C18.9263 15.3388 18.9306 15.3343 18.9339 15.3291C18.9371 15.3239 18.9391 15.3182 18.9398 15.3122C19.2315 12.4824 18.451 10.0237 16.8696 7.84492C16.8657 7.83784 16.8593 7.83232 16.8515 7.82936ZM9.67848 13.8212C8.989 13.8212 8.42026 13.2273 8.42026 12.4991C8.42026 11.7702 8.97791 11.1769 9.67848 11.1769C10.3843 11.1769 10.9478 11.7752 10.9367 12.4991C10.9367 13.2279 10.379 13.8212 9.67848 13.8212ZM14.3304 13.8212C13.6404 13.8212 13.0722 13.2273 13.0722 12.4991C13.0722 11.7702 13.6293 11.1769 14.3304 11.1769C15.0362 11.1769 15.5997 11.7752 15.5886 12.4991C15.5886 13.2279 15.0368 13.8212 14.3304 13.8212Z\"\n />\n </>\n);\n\nexport const TwitterIcon = () => TWITTER_ICON;\nexport const LinkedInIcon = () => LINKEDIN_ICON;\nexport const TelegramIcon = () => TELEGRAM_ICON;\nexport const XIconOutlined = () => X_ICON_OUTLINED;\n\nexport const DiscordIconSingle = ({ width, color }: { width: string; color: string }) => (\n <svg width={width} viewBox=\"0 0 20 15\" fill=\"none\">\n <path\n d=\"M16.6577 1.2432C15.4031 0.667482 14.0589 0.243572 12.6525 0.00106511C12.6267 -0.00370864 12.6009 0.00775489 12.5885 0.0316237C12.4157 0.339053 12.2238 0.741002 12.0901 1.05607C10.5778 0.829793 9.07314 0.829793 7.59137 1.05607C7.45675 0.733364 7.25816 0.339053 7.08439 0.0316237C7.07103 0.00870964 7.04525 -0.00275389 7.02043 0.00106511C5.61504 0.243572 4.2698 0.667482 3.01526 1.2432C3.00475 1.24797 2.9952 1.25561 2.98852 1.26611C0.437427 5.07747 -0.26147 8.79528 0.081286 12.4673C0.0831955 12.4854 0.0927448 12.5026 0.107066 12.5131C1.79029 13.7495 3.42103 14.4999 5.02119 14.9973C5.04697 15.005 5.0737 14.9954 5.08993 14.9744C5.46801 14.4579 5.80599 13.9127 6.09528 13.3389C6.11247 13.3055 6.09527 13.2654 6.0609 13.2521C5.52529 13.0487 5.0164 12.8014 4.52566 12.5207C4.48651 12.4978 4.48366 12.4424 4.51899 12.4157C4.6221 12.3384 4.72521 12.2582 4.82355 12.177C4.84169 12.1617 4.8665 12.1589 4.88751 12.1684C8.10788 13.6387 11.5946 13.6387 14.7768 12.1684C14.7978 12.1579 14.8226 12.1617 14.8408 12.176C14.9391 12.2572 15.0422 12.3384 15.1463 12.4157C15.1816 12.4424 15.1797 12.4978 15.1406 12.5207C14.6508 12.8071 14.141 13.0496 13.6044 13.2521C13.5691 13.2654 13.5538 13.3055 13.571 13.3399C13.8669 13.9127 14.204 14.457 14.5754 14.9744C14.5906 14.9964 14.6183 15.0059 14.6441 14.9983C16.2519 14.5009 17.8826 13.7504 19.5658 12.514C19.5802 12.5035 19.5897 12.4863 19.5916 12.4692C20.0022 8.22434 18.9042 4.53709 16.6825 1.26802C16.6768 1.25752 16.6682 1.24893 16.6567 1.24415L16.6577 1.2432ZM6.57455 10.2312C5.60452 10.2312 4.80637 9.34139 4.80637 8.2482C4.80637 7.15501 5.5902 6.26519 6.57455 6.26519C7.55889 6.26519 8.35898 7.16361 8.34275 8.2482C8.34275 9.34139 7.55889 10.2312 6.57455 10.2312ZM13.1136 10.2312C12.1436 10.2312 11.3455 9.34139 11.3455 8.2482C11.3455 7.15501 12.1293 6.26519 13.1136 6.26519C14.098 6.26519 14.8981 7.16361 14.8818 8.2482C14.8818 9.34139 14.1066 10.2312 13.1136 10.2312Z\"\n fill={color}\n />\n </svg>\n);\n","/*\n * Copyright (C) CEDE Labs, SAS - All Rights Reserved\n * Unauthorized copying of this file, via any medium is strictly prohibited\n * Proprietary and confidential\n * Written by CEDE Labs team <team@cedelabs.io>, September 2021\n */\nimport Loader from \"react-loader-spinner\";\n\ntype Props = {\n width?: number;\n height?: number;\n};\n\nexport const SpinnerLoader = ({ width = 100, height = 100 }: Props) => (\n <Loader\n type=\"Rings\"\n color=\"#11A49A\"\n height={height}\n width={width}\n timeout={60000} //1 min\n />\n);\n","export const PandaBasic = () => {\n return (\n <svg viewBox=\"0 0 110 110\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M0.00745909 26.3991C0.00745909 11.815 11.8292 0 26.4048 0H83.6027C98.1857 0 110 11.8225 110 26.3991V83.6009C110 98.185 98.1783 110 83.6027 110H26.2704C11.762 110 0 98.2372 0 83.7278V26.3917L0.00745909 26.3991Z\"\n fill=\"url(#paint0_linear_2187_113375)\"\n />\n <path\n d=\"M6.35721 29.6979C6.35721 16.8006 16.8131 6.34399 29.7095 6.34399H80.31C93.2064 6.34399 103.662 16.8006 103.662 29.6979V80.3018C103.662 93.1991 93.2064 103.656 80.31 103.656H29.5901C16.7534 103.656 6.34974 93.2513 6.34974 80.4138V29.6904L6.35721 29.6979Z\"\n fill=\"black\"\n />\n <path\n d=\"M12.6995 32.9969C12.6995 21.7789 21.7896 12.6881 33.0068 12.6881H77.0098C88.227 12.6881 97.3171 21.7789 97.3171 32.9969V77.0029C97.3171 88.2208 88.227 97.3116 77.0098 97.3116H32.9098C21.7523 97.3116 12.7069 88.2656 12.7069 77.0999V32.9969H12.6995Z\"\n fill=\"white\"\n />\n <path\n d=\"M45.7361 59.2219C49.8786 52.0466 48.6935 43.6066 43.0892 40.3708C37.485 37.1349 29.5838 40.3286 25.4414 47.5039C21.2989 54.6793 22.484 63.1192 28.0882 66.355C33.6925 69.5909 41.5937 66.3973 45.7361 59.2219Z\"\n fill=\"black\"\n />\n <path\n d=\"M41.3015 52.747C43.7375 52.747 45.7123 50.7721 45.7123 48.3359C45.7123 45.8998 43.7375 43.9249 41.3015 43.9249C38.8656 43.9249 36.8908 45.8998 36.8908 48.3359C36.8908 50.7721 38.8656 52.747 41.3015 52.747Z\"\n fill=\"white\"\n />\n <path\n d=\"M82.1606 66.4148C87.7649 63.1789 88.9499 54.739 84.8075 47.5636C80.6651 40.3883 72.7639 37.1947 67.1596 40.4305C61.5554 43.6663 60.3703 52.1063 64.5127 59.2817C68.6551 66.457 76.5564 69.6506 82.1606 66.4148Z\"\n fill=\"black\"\n />\n <path\n d=\"M68.9501 52.814C71.3861 52.814 73.3608 50.8392 73.3608 48.403C73.3608 45.9669 71.3861 43.9919 68.9501 43.9919C66.5141 43.9919 64.5393 45.9669 64.5393 48.403C64.5393 50.8392 66.5141 52.814 68.9501 52.814Z\"\n fill=\"white\"\n />\n <path\n d=\"M55.1234 71.4422C55.1234 71.4422 51.9739 71.3153 50.8469 72.1213C49.72 72.9274 49.7946 74.1739 49.7946 74.1739C49.7946 74.1739 49.6454 75.4501 50.0185 76.2786C50.3917 77.1071 52.5784 76.9653 53.6531 78.8088C53.6531 78.8088 54.6382 79.1447 55.1234 79.0477\"\n fill=\"black\"\n />\n <path\n d=\"M55.1234 71.4422C55.1234 71.4422 58.273 71.3154 59.4 72.1215C60.5269 72.9276 60.4523 74.174 60.4523 74.174C60.4523 74.174 60.6015 75.4503 60.2284 76.2788C59.8552 77.1073 57.6685 76.9655 56.5938 78.809C56.5938 78.809 55.6085 79.1447 55.1234 79.0477\"\n fill=\"black\"\n />\n <defs>\n <linearGradient\n id=\"paint0_linear_2187_113375\"\n x1=\"55\"\n y1=\"0\"\n x2=\"55\"\n y2=\"123.049\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"currentColor\" />\n <stop offset=\"1\" stopColor=\"currentColor\" stopOpacity=\"0.4\" />\n </linearGradient>\n </defs>\n </svg>\n );\n};\n","export const PandaHappy = () => {\n return (\n <svg viewBox=\"0 0 115 115\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M0.00779067 27.599C0.00779067 12.3521 12.3668 0 27.605 0H87.4028C102.649 0 115 12.3599 115 27.599V87.4009C115 102.648 102.641 115 87.4028 115H27.4645C12.2966 115 0 102.703 0 87.5336V27.5913L0.00779067 27.599Z\"\n fill=\"url(#paint0_linear_2403_134167)\"\n />\n <path\n d=\"M6.64611 31.0476C6.64611 17.5641 17.5773 6.63214 31.0599 6.63214H83.9604C97.443 6.63214 108.374 17.5641 108.374 31.0476V83.9517C108.374 97.4352 97.443 108.367 83.9604 108.367H30.9351C17.5149 108.367 6.6383 97.4898 6.6383 84.0687V31.0398L6.64611 31.0476Z\"\n fill=\"black\"\n />\n <path\n d=\"M13.2766 34.4968C13.2766 22.769 22.78 13.265 34.507 13.265H80.5101C92.2372 13.265 101.741 22.769 101.741 34.4968V80.5031C101.741 92.231 92.2372 101.735 80.5101 101.735H34.4056C22.741 101.735 13.2844 92.2778 13.2844 80.6045V34.4968H13.2766Z\"\n fill=\"white\"\n />\n <path\n d=\"M47.815 61.914C52.1457 54.4124 50.9067 45.5889 45.0477 42.2059C39.1887 38.823 30.9284 42.1618 26.5977 49.6633C22.267 57.1648 23.5059 65.9884 29.3649 69.3713C35.2239 72.7542 43.4843 69.4155 47.815 61.914Z\"\n fill=\"black\"\n />\n <path\n d=\"M85.8952 69.4338C91.7542 66.0508 92.9931 57.2273 88.6624 49.7258C84.3317 42.2243 76.0713 38.8855 70.2123 42.2684C64.3533 45.6513 63.1144 54.4749 67.4451 61.9764C71.7758 69.4779 80.0362 72.8167 85.8952 69.4338Z\"\n fill=\"black\"\n />\n <path\n d=\"M72.0841 50C74.6308 50 76.6953 53.15 76.6953 50.6031C76.6953 48.0562 74.6308 45.9915 72.0841 45.9915C69.5374 45.9915 67.4729 48.0562 67.4729 50.6031C67.4729 53.15 69.5374 50 72.0841 50Z\"\n fill=\"white\"\n />\n <path\n d=\"M57.629 74.6895C57.629 74.6895 54.3363 74.5569 53.1582 75.3996C51.98 76.2423 52.058 77.5454 52.058 77.5454C52.058 77.5454 51.902 78.8797 52.2921 79.7458C52.6822 80.612 54.9683 80.4637 56.0919 82.3911C56.0919 82.3911 57.1218 82.7422 57.629 82.6408\"\n fill=\"black\"\n />\n <path\n d=\"M57.629 74.6895C57.629 74.6895 60.9217 74.5567 62.0999 75.3994C63.2781 76.2421 63.2001 77.5452 63.2001 77.5452C63.2001 77.5452 63.3561 78.8795 62.966 79.7457C62.5759 80.6118 60.2897 80.4635 59.1662 82.3909C59.1662 82.3909 58.1361 82.7422 57.629 82.6408\"\n fill=\"black\"\n />\n <path\n d=\"M42.912 50.0002C45.4587 50.0002 47.5232 53.1502 47.5232 50.6033C47.5232 48.0564 45.4587 45.9917 42.912 45.9917C40.3653 45.9917 38.3008 48.0564 38.3008 50.6033C38.3008 53.1502 40.3653 50.0002 42.912 50.0002Z\"\n fill=\"white\"\n />\n <defs>\n <linearGradient\n id=\"paint0_linear_2403_134167\"\n x1=\"57.5\"\n y1=\"0\"\n x2=\"57.5\"\n y2=\"128.642\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"currentColor\" />\n <stop offset=\"1\" stopColor=\"currentColor\" stopOpacity=\"0.4\" />\n </linearGradient>\n </defs>\n </svg>\n );\n};\n","export const PandaSad = () => {\n return (\n <svg viewBox=\"0 0 110 110\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M0.00745909 26.3991C0.00745909 11.815 11.8292 0 26.4048 0H83.6027C98.1857 0 110 11.8225 110 26.3991V83.6009C110 98.185 98.1783 110 83.6027 110H26.2704C11.762 110 0 98.2372 0 83.7278V26.3917L0.00745909 26.3991Z\"\n fill=\"url(#paint0_linear_8387_338047)\"\n />\n <path\n d=\"M6.35721 29.6979C6.35721 16.8006 16.8131 6.34399 29.7095 6.34399H80.31C93.2064 6.34399 103.662 16.8006 103.662 29.6979V80.3018C103.662 93.1991 93.2064 103.656 80.31 103.656H29.5901C16.7534 103.656 6.34974 93.2513 6.34974 80.4138V29.6904L6.35721 29.6979Z\"\n fill=\"black\"\n />\n <path\n d=\"M12.6995 32.9969C12.6995 21.7789 21.7896 12.6881 33.0068 12.6881H77.0098C88.227 12.6881 97.3171 21.7789 97.3171 32.9969V77.0029C97.3171 88.2208 88.227 97.3116 77.0098 97.3116H32.9098C21.7523 97.3116 12.7069 88.2656 12.7069 77.0999V32.9969H12.6995Z\"\n fill=\"white\"\n />\n <path\n d=\"M45.7361 59.2219C49.8786 52.0466 48.6935 43.6066 43.0892 40.3708C37.485 37.1349 29.5838 40.3286 25.4414 47.5039C21.299 54.6793 22.484 63.1192 28.0882 66.355C33.6925 69.5909 41.5937 66.3973 45.7361 59.2219Z\"\n fill=\"black\"\n />\n <path\n d=\"M82.1606 66.4148C87.7649 63.1789 88.9499 54.739 84.8075 47.5636C80.6651 40.3883 72.7639 37.1947 67.1596 40.4305C61.5554 43.6664 60.3703 52.1063 64.5127 59.2817C68.6551 66.457 76.5564 69.6506 82.1606 66.4148Z\"\n fill=\"black\"\n />\n <path\n d=\"M55.1234 71.4422C55.1234 71.4422 51.9739 71.3153 50.8469 72.1213C49.72 72.9274 49.7946 74.1739 49.7946 74.1739C49.7946 74.1739 49.6454 75.4502 50.0185 76.2786C50.3917 77.1071 52.5784 76.9653 53.6531 78.8088C53.6531 78.8088 54.6383 79.1447 55.1234 79.0477\"\n fill=\"black\"\n />\n <path\n d=\"M55.1234 71.4422C55.1234 71.4422 58.273 71.3154 59.4 72.1215C60.5269 72.9276 60.4523 74.174 60.4523 74.174C60.4523 74.174 60.6016 75.4503 60.2284 76.2788C59.8552 77.1072 57.6685 76.9654 56.5938 78.809C56.5938 78.809 55.6085 79.1447 55.1234 79.0477\"\n fill=\"black\"\n />\n <path\n d=\"M41.4107 58.8221C43.8467 58.8221 45.8215 56.8472 45.8215 54.411C45.8215 51.9749 43.8467 50 41.4107 50C38.9748 50 37 51.9749 37 54.411C37 56.8472 38.9748 58.8221 41.4107 58.8221Z\"\n fill=\"white\"\n />\n <path\n d=\"M69.0593 58.8891C71.4953 58.8891 73.47 56.9143 73.47 54.4781C73.47 52.042 71.4953 50.0671 69.0593 50.0671C66.6233 50.0671 64.6485 52.042 64.6485 54.4781C64.6485 56.9143 66.6233 58.8891 69.0593 58.8891Z\"\n fill=\"white\"\n />\n <defs>\n <linearGradient\n id=\"paint0_linear_8387_338047\"\n x1=\"55\"\n y1=\"0\"\n x2=\"55\"\n y2=\"123.049\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"currentColor\" />\n <stop offset=\"1\" stopColor=\"currentColor\" stopOpacity=\"0.4\" />\n </linearGradient>\n </defs>\n </svg>\n );\n};\n","import { PandaBasic } from \"../../assets/pandaBasic\";\nimport { PandaHappy } from \"../../assets/pandaHappy\";\nimport { PandaSad } from \"../../assets/pandaSad\";\nimport { StoreLogoProps } from \"./types\";\nimport { Box, useTheme } from \"@mui/material\";\n\nexport const StoreLogo = ({ size, type, width, height }: StoreLogoProps) => {\n const theme = useTheme();\n const imageSize = (() => {\n if (size === \"large\") {\n return theme.custom.imgSize.large;\n }\n if (size === \"medium\") {\n return theme.custom.imgSize.medium;\n }\n if (size === \"small\") {\n return theme.custom.imgSize.small;\n }\n return theme.custom.imgSize.large;\n })();\n\n const Logo = type === \"happy\" ? PandaHappy : type === \"sad\" ? PandaSad : PandaBasic;\n\n return (\n <Box\n data-testid=\"store-logo\"\n sx={{\n height: height || imageSize,\n width: width || imageSize,\n color: theme.palette.logoBorderColor,\n display: \"inline-block\",\n }}\n >\n <Logo />\n </Box>\n );\n};\n","// Source from https://github.com/alitaheri/normalize-scroll-left\nlet cachedType;\n\n/**\n * Based on the jquery plugin https://github.com/othree/jquery.rtl-scroll-type\n *\n * Types of scrollLeft, assuming scrollWidth=100 and direction is rtl.\n *\n * Type | <- Most Left | Most Right -> | Initial\n * ---------------- | ------------ | ------------- | -------\n * default | 0 | 100 | 100\n * negative (spec*) | -100 | 0 | 0\n * reverse | 100 | 0 | 0\n *\n * Edge 85: default\n * Safari 14: negative\n * Chrome 85: negative\n * Firefox 81: negative\n * IE11: reverse\n *\n * spec* https://drafts.csswg.org/cssom-view/#dom-window-scroll\n */\nexport function detectScrollType() {\n if (cachedType) {\n return cachedType;\n }\n const dummy = document.createElement('div');\n const container = document.createElement('div');\n container.style.width = '10px';\n container.style.height = '1px';\n dummy.appendChild(container);\n dummy.dir = 'rtl';\n dummy.style.fontSize = '14px';\n dummy.style.width = '4px';\n dummy.style.height = '1px';\n dummy.style.position = 'absolute';\n dummy.style.top = '-1000px';\n dummy.style.overflow = 'scroll';\n document.body.appendChild(dummy);\n cachedType = 'reverse';\n if (dummy.scrollLeft > 0) {\n cachedType = 'default';\n } else {\n dummy.scrollLeft = 1;\n if (dummy.scrollLeft === 0) {\n cachedType = 'negative';\n }\n }\n document.body.removeChild(dummy);\n return cachedType;\n}\n\n// Based on https://stackoverflow.com/a/24394376\nexport function getNormalizedScrollLeft(element, direction) {\n const scrollLeft = element.scrollLeft;\n\n // Perform the calculations only when direction is rtl to avoid messing up the ltr behavior\n if (direction !== 'rtl') {\n return scrollLeft;\n }\n const type = detectScrollType();\n switch (type) {\n case 'negative':\n return element.scrollWidth - element.clientWidth + scrollLeft;\n case 'reverse':\n return element.scrollWidth - element.clientWidth - scrollLeft;\n default:\n return scrollLeft;\n }\n}","function easeInOutSin(time) {\n return (1 + Math.sin(Math.PI * time - Math.PI / 2)) / 2;\n}\n\nexport default function animate(property, element, to, options = {}, cb = () => {}) {\n const {\n ease = easeInOutSin,\n duration = 300 // standard\n\n } = options;\n let start = null;\n const from = element[property];\n let cancelled = false;\n\n const cancel = () => {\n cancelled = true;\n };\n\n const step = timestamp => {\n if (cancelled) {\n cb(new Error('Animation cancelled'));\n return;\n }\n\n if (start === null) {\n start = timestamp;\n }\n\n const time = Math.min(1, (timestamp - start) / duration);\n element[property] = ease(time) * (to - from) + from;\n\n if (time >= 1) {\n requestAnimationFrame(() => {\n cb(null);\n });\n return;\n }\n\n requestAnimationFrame(step);\n };\n\n if (from === to) {\n cb(new Error('Element already at target position'));\n return cancel;\n }\n\n requestAnimationFrame(step);\n return cancel;\n}","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nconst _excluded = [\"onChange\"];\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport debounce from '../utils/debounce';\nimport { ownerWindow } from '../utils';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst styles = {\n width: 99,\n height: 99,\n position: 'absolute',\n top: -9999,\n overflow: 'scroll'\n};\n/**\n * @ignore - internal component.\n * The component originates from https://github.com/STORIS/react-scrollbar-size.\n * It has been moved into the core in order to minimize the bundle size.\n */\n\nexport default function ScrollbarSize(props) {\n const {\n onChange\n } = props,\n other = _objectWithoutPropertiesLoose(props, _excluded);\n\n const scrollbarHeight = React.useRef();\n const nodeRef = React.useRef(null);\n\n const setMeasurements = () => {\n scrollbarHeight.current = nodeRef.current.offsetHeight - nodeRef.current.clientHeight;\n };\n\n React.useEffect(() => {\n const handleResize = debounce(() => {\n const prevHeight = scrollbarHeight.current;\n setMeasurements();\n\n if (prevHeight !== scrollbarHeight.current) {\n onChange(scrollbarHeight.current);\n }\n });\n const containerWindow = ownerWindow(nodeRef.current);\n containerWindow.addEventListener('resize', handleResize);\n return () => {\n handleResize.clear();\n containerWindow.removeEventListener('resize', handleResize);\n };\n }, [onChange]);\n React.useEffect(() => {\n setMeasurements();\n onChange(scrollbarHeight.current);\n }, [onChange]);\n return /*#__PURE__*/_jsx(\"div\", _extends({\n style: styles,\n ref: nodeRef\n }, other));\n}\nprocess.env.NODE_ENV !== \"production\" ? ScrollbarSize.propTypes = {\n onChange: PropTypes.func.isRequired\n} : void 0;","import * as React from 'react';\nimport createSvgIcon from '../../utils/createSvgIcon';\n/**\n * @ignore - internal component.\n */\n\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon( /*#__PURE__*/_jsx(\"path\", {\n d: \"M15.41 16.09l-4.58-4.59 4.58-4.59L14 5.5l-6 6 6 6z\"\n}), 'KeyboardArrowLeft');","import * as React from 'react';\nimport createSvgIcon from '../../utils/createSvgIcon';\n/**\n * @ignore - internal component.\n */\n\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon( /*#__PURE__*/_jsx(\"path\", {\n d: \"M8.59 16.34l4.58-4.59-4.58-4.59L10 5.75l6 6-6 6z\"\n}), 'KeyboardArrowRight');","import { generateUtilityClass, generateUtilityClasses } from '@mui/base';\nexport function getTabScrollButtonUtilityClass(slot) {\n return generateUtilityClass('MuiTabScrollButton', slot);\n}\nconst tabScrollButtonClasses = generateUtilityClasses('MuiTabScrollButton', ['root', 'vertical', 'horizontal', 'disabled']);\nexport default tabScrollButtonClasses;","import _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\n\nvar _KeyboardArrowLeft, _KeyboardArrowRight;\n\nconst _excluded = [\"className\", \"direction\", \"orientation\", \"disabled\"];\n\n/* eslint-disable jsx-a11y/aria-role */\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport { unstable_composeClasses as composeClasses } from '@mui/base';\nimport KeyboardArrowLeft from '../internal/svg-icons/KeyboardArrowLeft';\nimport KeyboardArrowRight from '../internal/svg-icons/KeyboardArrowRight';\nimport ButtonBase from '../ButtonBase';\nimport useTheme from '../styles/useTheme';\nimport useThemeProps from '../styles/useThemeProps';\nimport styled from '../styles/styled';\nimport tabScrollButtonClasses, { getTabScrollButtonUtilityClass } from './tabScrollButtonClasses';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\n\nconst useUtilityClasses = ownerState => {\n const {\n classes,\n orientation,\n disabled\n } = ownerState;\n const slots = {\n root: ['root', orientation, disabled && 'disabled']\n };\n return composeClasses(slots, getTabScrollButtonUtilityClass, classes);\n};\n\nconst TabScrollButtonRoot = styled(ButtonBase, {\n name: 'MuiTabScrollButton',\n slot: 'Root',\n overridesResolver: (props, styles) => {\n const {\n ownerState\n } = props;\n return [styles.root, ownerState.orientation && styles[ownerState.orientation]];\n }\n})(({\n ownerState\n}) => _extends({\n width: 40,\n flexShrink: 0,\n opacity: 0.8,\n [`&.${tabScrollButtonClasses.disabled}`]: {\n opacity: 0\n }\n}, ownerState.orientation === 'vertical' && {\n width: '100%',\n height: 40,\n '& svg': {\n transform: `rotate(${ownerState.isRtl ? -90 : 90}deg)`\n }\n}));\nconst TabScrollButton = /*#__PURE__*/React.forwardRef(function TabScrollButton(inProps, ref) {\n const props = useThemeProps({\n props: inProps,\n name: 'MuiTabScrollButton'\n });\n\n const {\n className,\n direction\n } = props,\n other = _objectWithoutPropertiesLoose(props, _excluded);\n\n const theme = useTheme();\n const isRtl = theme.direction === 'rtl';\n\n const ownerState = _extends({\n isRtl\n }, props);\n\n const classes = useUtilityClasses(ownerState);\n return /*#__PURE__*/_jsx(TabScrollButtonRoot, _extends({\n component: \"div\",\n className: clsx(classes.root, className),\n ref: ref,\n role: null,\n ownerState: ownerState,\n tabIndex: null\n }, other, {\n children: direction === 'left' ? _KeyboardArrowLeft || (_KeyboardArrowLeft = /*#__PURE__*/_jsx(KeyboardArrowLeft, {\n fontSize: \"small\"\n })) : _KeyboardArrowRight || (_KeyboardArrowRight = /*#__PURE__*/_jsx(KeyboardArrowRight, {\n fontSize: \"small\"\n }))\n }));\n});\nprocess.env.NODE_ENV !== \"production\" ? TabScrollButton.propTypes\n/* remove-proptypes */\n= {\n // ----------------------------- Warning --------------------------------\n // | These PropTypes are generated from the TypeScript type definitions |\n // | To update them edit the d.ts file and run \"yarn proptypes\" |\n // ----------------------------------------------------------------------\n\n /**\n * The content of the component.\n */\n children: PropTypes.node,\n\n /**\n * Override or extend the styles applied to the component.\n */\n classes: PropTypes.object,\n\n /**\n * @ignore\n */\n className: PropTypes.string,\n\n /**\n * The direction the button should indicate.\n */\n direction: PropTypes.oneOf(['left', 'right']).isRequired,\n\n /**\n * If `true`, the component is disabled.\n */\n disabled: PropTypes.bool,\n\n /**\n * The component orientation (layout flow direction).\n */\n orientation: PropTypes.oneOf(['horizontal', 'vertical']).isRequired,\n\n /**\n * The system prop that allows defining system overrides as well as additional CSS styles.\n */\n sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])\n} : void 0;\nexport default TabScrollButton;","import { generateUtilityClass, generateUtilityClasses } from '@mui/base';\nexport function getTabsUtilityClass(slot) {\n return generateUtilityClass('MuiTabs', slot);\n}\nconst tabsClasses = generateUtilityClasses('MuiTabs', ['root', 'vertical', 'flexContainer', 'flexContainerVertical', 'centered', 'scroller', 'fixed', 'scrollableX', 'scrollableY', 'hideScrollbar', 'scrollButtons', 'scrollButtonsHideMobile', 'indicator']);\nexport default tabsClasses;","import _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nconst _excluded = [\"aria-label\", \"aria-labelledby\", \"action\", \"centered\", \"children\", \"className\", \"component\", \"allowScrollButtonsMobile\", \"indicatorColor\", \"onChange\", \"orientation\", \"ScrollButtonComponent\", \"scrollButtons\", \"selectionFollowsFocus\", \"TabIndicatorProps\", \"TabScrollButtonProps\", \"textColor\", \"value\", \"variant\", \"visibleScrollbar\"];\nimport * as React from 'react';\nimport { isFragment } from 'react-is';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport { refType } from '@mui/utils';\nimport { unstable_composeClasses as composeClasses } from '@mui/base';\nimport styled from '../styles/styled';\nimport useThemeProps from '../styles/useThemeProps';\nimport useTheme from '../styles/useTheme';\nimport debounce from '../utils/debounce';\nimport { getNormalizedScrollLeft, detectScrollType } from '../utils/scrollLeft';\nimport animate from '../internal/animate';\nimport ScrollbarSize from './ScrollbarSize';\nimport TabScrollButton from '../TabScrollButton';\nimport useEventCallback from '../utils/useEventCallback';\nimport tabsClasses, { getTabsUtilityClass } from './tabsClasses';\nimport ownerDocument from '../utils/ownerDocument';\nimport ownerWindow from '../utils/ownerWindow';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\n\nconst nextItem = (list, item) => {\n if (list === item) {\n return list.firstChild;\n }\n\n if (item && item.nextElementSibling) {\n return item.nextElementSibling;\n }\n\n return list.firstChild;\n};\n\nconst previousItem = (list, item) => {\n if (list === item) {\n return list.lastChild;\n }\n\n if (item && item.previousElementSibling) {\n return item.previousElementSibling;\n }\n\n return list.lastChild;\n};\n\nconst moveFocus = (list, currentFocus, traversalFunction) => {\n let wrappedOnce = false;\n let nextFocus = traversalFunction(list, currentFocus);\n\n while (nextFocus) {\n // Prevent infinite loop.\n if (nextFocus === list.firstChild) {\n if (wrappedOnce) {\n return;\n }\n\n wrappedOnce = true;\n } // Same logic as useAutocomplete.js\n\n\n const nextFocusDisabled = nextFocus.disabled || nextFocus.getAttribute('aria-disabled') === 'true';\n\n if (!nextFocus.hasAttribute('tabindex') || nextFocusDisabled) {\n // Move to the next element.\n nextFocus = traversalFunction(list, nextFocus);\n } else {\n nextFocus.focus();\n return;\n }\n }\n};\n\nconst useUtilityClasses = ownerState => {\n const {\n vertical,\n fixed,\n hideScrollbar,\n scrollableX,\n scrollableY,\n centered,\n scrollButtonsHideMobile,\n classes\n } = ownerState;\n const slots = {\n root: ['root', vertical && 'vertical'],\n scroller: ['scroller', fixed && 'fixed', hideScrollbar && 'hideScrollbar', scrollableX && 'scrollableX', scrollableY && 'scrollableY'],\n flexContainer: ['flexContainer', vertical && 'flexContainerVertical', centered && 'centered'],\n indicator: ['indicator'],\n scrollButtons: ['scrollButtons', scrollButtonsHideMobile && 'scrollButtonsHideMobile'],\n scrollableX: [scrollableX && 'scrollableX'],\n hideScrollbar: [hideScrollbar && 'hideScrollbar']\n };\n return composeClasses(slots, getTabsUtilityClass, classes);\n};\n\nconst TabsRoot = styled('div', {\n name: 'MuiTabs',\n slot: 'Root',\n overridesResolver: (props, styles) => {\n const {\n ownerState\n } = props;\n return [{\n [`& .${tabsClasses.scrollButtons}`]: styles.scrollButtons\n }, {\n [`& .${tabsClasses.scrollButtons}`]: ownerState.scrollButtonsHideMobile && styles.scrollButtonsHideMobile\n }, styles.root, ownerState.vertical && styles.vertical];\n }\n})(({\n ownerState,\n theme\n}) => _extends({\n overflow: 'hidden',\n minHeight: 48,\n // Add iOS momentum scrolling for iOS < 13.0\n WebkitOverflowScrolling: 'touch',\n display: 'flex'\n}, ownerState.vertical && {\n flexDirection: 'column'\n}, ownerState.scrollButtonsHideMobile && {\n [`& .${tabsClasses.scrollButtons}`]: {\n [theme.breakpoints.down('sm')]: {\n display: 'none'\n }\n }\n}));\nconst TabsScroller = styled('div', {\n name: 'MuiTabs',\n slot: 'Scroller',\n overridesResolver: (props, styles) => {\n const {\n ownerState\n } = props;\n return [styles.scroller, ownerState.fixed && styles.fixed, ownerState.hideScrollbar && styles.hideScrollbar, ownerState.scrollableX && styles.scrollableX, ownerState.scrollableY && styles.scrollableY];\n }\n})(({\n ownerState\n}) => _extends({\n position: 'relative',\n display: 'inline-block',\n flex: '1 1 auto',\n whiteSpace: 'nowrap'\n}, ownerState.fixed && {\n overflowX: 'hidden',\n width: '100%'\n}, ownerState.hideScrollbar && {\n // Hide dimensionless scrollbar on macOS\n scrollbarWidth: 'none',\n // Firefox\n '&::-webkit-scrollbar': {\n display: 'none' // Safari + Chrome\n\n }\n}, ownerState.scrollableX && {\n overflowX: 'auto',\n overflowY: 'hidden'\n}, ownerState.scrollableY && {\n overflowY: 'auto',\n overflowX: 'hidden'\n}));\nconst FlexContainer = styled('div', {\n name: 'MuiTabs',\n slot: 'FlexContainer',\n overridesResolver: (props, styles) => {\n const {\n ownerState\n } = props;\n return [styles.flexContainer, ownerState.vertical && styles.flexContainerVertical, ownerState.centered && styles.centered];\n }\n})(({\n ownerState\n}) => _extends({\n display: 'flex'\n}, ownerState.vertical && {\n flexDirection: 'column'\n}, ownerState.centered && {\n justifyContent: 'center'\n}));\nconst TabsIndicator = styled('span', {\n name: 'MuiTabs',\n slot: 'Indicator',\n overridesResolver: (props, styles) => styles.indicator\n})(({\n ownerState,\n theme\n}) => _extends({\n position: 'absolute',\n height: 2,\n bottom: 0,\n width: '100%',\n transition: theme.transitions.create()\n}, ownerState.indicatorColor === 'primary' && {\n backgroundColor: (theme.vars || theme).palette.primary.main\n}, ownerState.indicatorColor === 'secondary' && {\n backgroundColor: (theme.vars || theme).palette.secondary.main\n}, ownerState.vertical && {\n height: '100%',\n width: 2,\n right: 0\n}));\nconst TabsScrollbarSize = styled(ScrollbarSize, {\n name: 'MuiTabs',\n slot: 'ScrollbarSize'\n})({\n overflowX: 'auto',\n overflowY: 'hidden',\n // Hide dimensionless scrollbar on macOS\n scrollbarWidth: 'none',\n // Firefox\n '&::-webkit-scrollbar': {\n display: 'none' // Safari + Chrome\n\n }\n});\nconst defaultIndicatorStyle = {};\nlet warnedOnceTabPresent = false;\nconst Tabs = /*#__PURE__*/React.forwardRef(function Tabs(inProps, ref) {\n const props = useThemeProps({\n props: inProps,\n name: 'MuiTabs'\n });\n const theme = useTheme();\n const isRtl = theme.direction === 'rtl';\n\n const {\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledBy,\n action,\n centered = false,\n children: childrenProp,\n className,\n component = 'div',\n allowScrollButtonsMobile = false,\n indicatorColor = 'primary',\n onChange,\n orientation = 'horizontal',\n ScrollButtonComponent = TabScrollButton,\n scrollButtons = 'auto',\n selectionFollowsFocus,\n TabIndicatorProps = {},\n TabScrollButtonProps = {},\n textColor = 'primary',\n value,\n variant = 'standard',\n visibleScrollbar = false\n } = props,\n other = _objectWithoutPropertiesLoose(props, _excluded);\n\n const scrollable = variant === 'scrollable';\n const vertical = orientation === 'vertical';\n const scrollStart = vertical ? 'scrollTop' : 'scrollLeft';\n const start = vertical ? 'top' : 'left';\n const end = vertical ? 'bottom' : 'right';\n const clientSize = vertical ? 'clientHeight' : 'clientWidth';\n const size = vertical ? 'height' : 'width';\n\n const ownerState = _extends({}, props, {\n component,\n allowScrollButtonsMobile,\n indicatorColor,\n orientation,\n vertical,\n scrollButtons,\n textColor,\n variant,\n visibleScrollbar,\n fixed: !scrollable,\n hideScrollbar: scrollable && !visibleScrollbar,\n scrollableX: scrollable && !vertical,\n scrollableY: scrollable && vertical,\n centered: centered && !scrollable,\n scrollButtonsHideMobile: !allowScrollButtonsMobile\n });\n\n const classes = useUtilityClasses(ownerState);\n\n if (process.env.NODE_ENV !== 'production') {\n if (centered && scrollable) {\n console.error('MUI: You can not use the `centered={true}` and `variant=\"scrollable\"` properties ' + 'at the same time on a `Tabs` component.');\n }\n }\n\n const [mounted, setMounted] = React.useState(false);\n const [indicatorStyle, setIndicatorStyle] = React.useState(defaultIndicatorStyle);\n const [displayScroll, setDisplayScroll] = React.useState({\n start: false,\n end: false\n });\n const [scrollerStyle, setScrollerStyle] = React.useState({\n overflow: 'hidden',\n scrollbarWidth: 0\n });\n const valueToIndex = new Map();\n const tabsRef = React.useRef(null);\n const tabListRef = React.useRef(null);\n\n const getTabsMeta = () => {\n const tabsNode = tabsRef.current;\n let tabsMeta;\n\n if (tabsNode) {\n const rect = tabsNode.getBoundingClientRect(); // create a new object with ClientRect class props + scrollLeft\n\n tabsMeta = {\n clientWidth: tabsNode.clientWidth,\n scrollLeft: tabsNode.scrollLeft,\n scrollTop: tabsNode.scrollTop,\n scrollLeftNormalized: getNormalizedScrollLeft(tabsNode, theme.direction),\n scrollWidth: tabsNode.scrollWidth,\n top: rect.top,\n bottom: rect.bottom,\n left: rect.left,\n right: rect.right\n };\n }\n\n let tabMeta;\n\n if (tabsNode && value !== false) {\n const children = tabListRef.current.children;\n\n if (children.length > 0) {\n const tab = children[valueToIndex.get(value)];\n\n if (process.env.NODE_ENV !== 'production') {\n if (!tab) {\n console.error([`MUI: The \\`value\\` provided to the Tabs component is invalid.`, `None of the Tabs' children match with \"${value}\".`, valueToIndex.keys ? `You can provide one of the following values: ${Array.from(valueToIndex.keys()).join(', ')}.` : null].join('\\n'));\n }\n }\n\n tabMeta = tab ? tab.getBoundingClientRect() : null;\n\n if (process.env.NODE_ENV !== 'production') {\n if (process.env.NODE_ENV !== 'test' && !warnedOnceTabPresent && tabMeta && tabMeta.width === 0 && tabMeta.height === 0) {\n tabsMeta = null;\n console.error(['MUI: The `value` provided to the Tabs component is invalid.', `The Tab with this \\`value\\` (\"${value}\") is not part of the document layout.`, \"Make sure the tab item is present in the document or that it's not `display: none`.\"].join('\\n'));\n warnedOnceTabPresent = true;\n }\n }\n }\n }\n\n return {\n tabsMeta,\n tabMeta\n };\n };\n\n const updateIndicatorState = useEventCallback(() => {\n const {\n tabsMeta,\n tabMeta\n } = getTabsMeta();\n let startValue = 0;\n let startIndicator;\n\n if (vertical) {\n startIndicator = 'top';\n\n if (tabMeta && tabsMeta) {\n startValue = tabMeta.top - tabsMeta.top + tabsMeta.scrollTop;\n }\n } else {\n startIndicator = isRtl ? 'right' : 'left';\n\n if (tabMeta && tabsMeta) {\n const correction = isRtl ? tabsMeta.scrollLeftNormalized + tabsMeta.clientWidth - tabsMeta.scrollWidth : tabsMeta.scrollLeft;\n startValue = (isRtl ? -1 : 1) * (tabMeta[startIndicator] - tabsMeta[startIndicator] + correction);\n }\n }\n\n const newIndicatorStyle = {\n [startIndicator]: startValue,\n // May be wrong until the font is loaded.\n [size]: tabMeta ? tabMeta[size] : 0\n }; // IE11 support, replace with Number.isNaN\n // eslint-disable-next-line no-restricted-globals\n\n if (isNaN(indicatorStyle[startIndicator]) || isNaN(indicatorStyle[size])) {\n setIndicatorStyle(newIndicatorStyle);\n } else {\n const dStart = Math.abs(indicatorStyle[startIndicator] - newIndicatorStyle[startIndicator]);\n const dSize = Math.abs(indicatorStyle[size] - newIndicatorStyle[size]);\n\n if (dStart >= 1 || dSize >= 1) {\n setIndicatorStyle(newIndicatorStyle);\n }\n }\n });\n\n const scroll = (scrollValue, {\n animation = true\n } = {}) => {\n if (animation) {\n animate(scrollStart, tabsRef.current, scrollValue, {\n duration: theme.transitions.duration.standard\n });\n } else {\n tabsRef.current[scrollStart] = scrollValue;\n }\n };\n\n const moveTabsScroll = delta => {\n let scrollValue = tabsRef.current[scrollStart];\n\n if (vertical) {\n scrollValue += delta;\n } else {\n scrollValue += delta * (isRtl ? -1 : 1); // Fix for Edge\n\n scrollValue *= isRtl && detectScrollType() === 'reverse' ? -1 : 1;\n }\n\n scroll(scrollValue);\n };\n\n const getScrollSize = () => {\n const containerSize = tabsRef.current[clientSize];\n let totalSize = 0;\n const children = Array.from(tabListRef.current.children);\n\n for (let i = 0; i < children.length; i += 1) {\n const tab = children[i];\n\n if (totalSize + tab[clientSize] > containerSize) {\n // If the first item is longer than the container size, then only scroll\n // by the container size.\n if (i === 0) {\n totalSize = containerSize;\n }\n\n break;\n }\n\n totalSize += tab[clientSize];\n }\n\n return totalSize;\n };\n\n const handleStartScrollClick = () => {\n moveTabsScroll(-1 * getScrollSize());\n };\n\n const handleEndScrollClick = () => {\n moveTabsScroll(getScrollSize());\n }; // TODO Remove <ScrollbarSize /> as browser support for hidding the scrollbar\n // with CSS improves.\n\n\n const handleScrollbarSizeChange = React.useCallback(scrollbarWidth => {\n setScrollerStyle({\n overflow: null,\n scrollbarWidth\n });\n }, []);\n\n const getConditionalElements = () => {\n const conditionalElements = {};\n conditionalElements.scrollbarSizeListener = scrollable ? /*#__PURE__*/_jsx(TabsScrollbarSize, {\n onChange: handleScrollbarSizeChange,\n className: clsx(classes.scrollableX, classes.hideScrollbar)\n }) : null;\n const scrollButtonsActive = displayScroll.start || displayScroll.end;\n const showScrollButtons = scrollable && (scrollButtons === 'auto' && scrollButtonsActive || scrollButtons === true);\n conditionalElements.scrollButtonStart = showScrollButtons ? /*#__PURE__*/_jsx(ScrollButtonComponent, _extends({\n orientation: orientation,\n direction: isRtl ? 'right' : 'left',\n onClick: handleStartScrollClick,\n disabled: !displayScroll.start\n }, TabScrollButtonProps, {\n className: clsx(classes.scrollButtons, TabScrollButtonProps.className)\n })) : null;\n conditionalElements.scrollButtonEnd = showScrollButtons ? /*#__PURE__*/_jsx(ScrollButtonComponent, _extends({\n orientation: orientation,\n direction: isRtl ? 'left' : 'right',\n onClick: handleEndScrollClick,\n disabled: !displayScroll.end\n }, TabScrollButtonProps, {\n className: clsx(classes.scrollButtons, TabScrollButtonProps.className)\n })) : null;\n return conditionalElements;\n };\n\n const scrollSelectedIntoView = useEventCallback(animation => {\n const {\n tabsMeta,\n tabMeta\n } = getTabsMeta();\n\n if (!tabMeta || !tabsMeta) {\n return;\n }\n\n if (tabMeta[start] < tabsMeta[start]) {\n // left side of button is out of view\n const nextScrollStart = tabsMeta[scrollStart] + (tabMeta[start] - tabsMeta[start]);\n scroll(nextScrollStart, {\n animation\n });\n } else if (tabMeta[end] > tabsMeta[end]) {\n // right side of button is out of view\n const nextScrollStart = tabsMeta[scrollStart] + (tabMeta[end] - tabsMeta[end]);\n scroll(nextScrollStart, {\n animation\n });\n }\n });\n const updateScrollButtonState = useEventCallback(() => {\n if (scrollable && scrollButtons !== false) {\n const {\n scrollTop,\n scrollHeight,\n clientHeight,\n scrollWidth,\n clientWidth\n } = tabsRef.current;\n let showStartScroll;\n let showEndScroll;\n\n if (vertical) {\n showStartScroll = scrollTop > 1;\n showEndScroll = scrollTop < scrollHeight - clientHeight - 1;\n } else {\n const scrollLeft = getNormalizedScrollLeft(tabsRef.current, theme.direction); // use 1 for the potential rounding error with browser zooms.\n\n showStartScroll = isRtl ? scrollLeft < scrollWidth - clientWidth - 1 : scrollLeft > 1;\n showEndScroll = !isRtl ? scrollLeft < scrollWidth - clientWidth - 1 : scrollLeft > 1;\n }\n\n if (showStartScroll !== displayScroll.start || showEndScroll !== displayScroll.end) {\n setDisplayScroll({\n start: showStartScroll,\n end: showEndScroll\n });\n }\n }\n });\n React.useEffect(() => {\n const handleResize = debounce(() => {\n // If the Tabs component is replaced by Suspense with a fallback, the last\n // ResizeObserver's handler that runs because of the change in the layout is trying to\n // access a dom node that is no longer there (as the fallback component is being shown instead).\n // See https://github.com/mui/material-ui/issues/33276\n // TODO: Add tests that will ensure the component is not failing when\n // replaced by Suspense with a fallback, once React is updated to version 18\n if (tabsRef.current) {\n updateIndicatorState();\n updateScrollButtonState();\n }\n });\n const win = ownerWindow(tabsRef.current);\n win.addEventListener('resize', handleResize);\n let resizeObserver;\n\n if (typeof ResizeObserver !== 'undefined') {\n resizeObserver = new ResizeObserver(handleResize);\n Array.from(tabListRef.current.children).forEach(child => {\n resizeObserver.observe(child);\n });\n }\n\n return () => {\n handleResize.clear();\n win.removeEventListener('resize', handleResize);\n\n if (resizeObserver) {\n resizeObserver.disconnect();\n }\n };\n }, [updateIndicatorState, updateScrollButtonState]);\n const handleTabsScroll = React.useMemo(() => debounce(() => {\n updateScrollButtonState();\n }), [updateScrollButtonState]);\n React.useEffect(() => {\n return () => {\n handleTabsScroll.clear();\n };\n }, [handleTabsScroll]);\n React.useEffect(() => {\n setMounted(true);\n }, []);\n React.useEffect(() => {\n updateIndicatorState();\n updateScrollButtonState();\n });\n React.useEffect(() => {\n // Don't animate on the first render.\n scrollSelectedIntoView(defaultIndicatorStyle !== indicatorStyle);\n }, [scrollSelectedIntoView, indicatorStyle]);\n React.useImperativeHandle(action, () => ({\n updateIndicator: updateIndicatorState,\n updateScrollButtons: updateScrollButtonState\n }), [updateIndicatorState, updateScrollButtonState]);\n\n const indicator = /*#__PURE__*/_jsx(TabsIndicator, _extends({}, TabIndicatorProps, {\n className: clsx(classes.indicator, TabIndicatorProps.className),\n ownerState: ownerState,\n style: _extends({}, indicatorStyle, TabIndicatorProps.style)\n }));\n\n let childIndex = 0;\n const children = React.Children.map(childrenProp, child => {\n if (! /*#__PURE__*/React.isValidElement(child)) {\n return null;\n }\n\n if (process.env.NODE_ENV !== 'production') {\n if (isFragment(child)) {\n console.error([\"MUI: The Tabs component doesn't accept a Fragment as a child.\", 'Consider providing an array instead.'].join('\\n'));\n }\n }\n\n const childValue = child.props.value === undefined ? childIndex : child.props.value;\n valueToIndex.set(childValue, childIndex);\n const selected = childValue === value;\n childIndex += 1;\n return /*#__PURE__*/React.cloneElement(child, _extends({\n fullWidth: variant === 'fullWidth',\n indicator: selected && !mounted && indicator,\n selected,\n selectionFollowsFocus,\n onChange,\n textColor,\n value: childValue\n }, childIndex === 1 && value === false && !child.props.tabIndex ? {\n tabIndex: 0\n } : {}));\n });\n\n const handleKeyDown = event => {\n const list = tabListRef.current;\n const currentFocus = ownerDocument(list).activeElement; // Keyboard navigation assumes that [role=\"tab\"] are siblings\n // though we might warn in the future about nested, interactive elements\n // as a a11y violation\n\n const role = currentFocus.getAttribute('role');\n\n if (role !== 'tab') {\n return;\n }\n\n let previousItemKey = orientation === 'horizontal' ? 'ArrowLeft' : 'ArrowUp';\n let nextItemKey = orientation === 'horizontal' ? 'ArrowRight' : 'ArrowDown';\n\n if (orientation === 'horizontal' && isRtl) {\n // swap previousItemKey with nextItemKey\n previousItemKey = 'ArrowRight';\n nextItemKey = 'ArrowLeft';\n }\n\n switch (event.key) {\n case previousItemKey:\n event.preventDefault();\n moveFocus(list, currentFocus, previousItem);\n break;\n\n case nextItemKey:\n event.preventDefault();\n moveFocus(list, currentFocus, nextItem);\n break;\n\n case 'Home':\n event.preventDefault();\n moveFocus(list, null, nextItem);\n break;\n\n case 'End':\n event.preventDefault();\n moveFocus(list, null, previousItem);\n break;\n\n default:\n break;\n }\n };\n\n const conditionalElements = getConditionalElements();\n return /*#__PURE__*/_jsxs(TabsRoot, _extends({\n className: clsx(classes.root, className),\n ownerState: ownerState,\n ref: ref,\n as: component\n }, other, {\n children: [conditionalElements.scrollButtonStart, conditionalElements.scrollbarSizeListener, /*#__PURE__*/_jsxs(TabsScroller, {\n className: classes.scroller,\n ownerState: ownerState,\n style: {\n overflow: scrollerStyle.overflow,\n [vertical ? `margin${isRtl ? 'Left' : 'Right'}` : 'marginBottom']: visibleScrollbar ? undefined : -scrollerStyle.scrollbarWidth\n },\n ref: tabsRef,\n onScroll: handleTabsScroll,\n children: [/*#__PURE__*/_jsx(FlexContainer, {\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": ariaLabelledBy,\n \"aria-orientation\": orientation === 'vertical' ? 'vertical' : null,\n className: classes.flexContainer,\n ownerState: ownerState,\n onKeyDown: handleKeyDown,\n ref: tabListRef,\n role: \"tablist\",\n children: children\n }), mounted && indicator]\n }), conditionalElements.scrollButtonEnd]\n }));\n});\nprocess.env.NODE_ENV !== \"production\" ? Tabs.propTypes\n/* remove-proptypes */\n= {\n // ----------------------------- Warning --------------------------------\n // | These PropTypes are generated from the TypeScript type definitions |\n // | To update them edit the d.ts file and run \"yarn proptypes\" |\n // ----------------------------------------------------------------------\n\n /**\n * Callback fired when the component mounts.\n * This is useful when you want to trigger an action programmatically.\n * It supports two actions: `updateIndicator()` and `updateScrollButtons()`\n *\n * @param {object} actions This object contains all possible actions\n * that can be triggered programmatically.\n */\n action: refType,\n\n /**\n * If `true`, the scroll buttons aren't forced hidden on mobile.\n * By default the scroll buttons are hidden on mobile and takes precedence over `scrollButtons`.\n * @default false\n */\n allowScrollButtonsMobile: PropTypes.bool,\n\n /**\n * The label for the Tabs as a string.\n */\n 'aria-label': PropTypes.string,\n\n /**\n * An id or list of ids separated by a space that label the Tabs.\n */\n 'aria-labelledby': PropTypes.string,\n\n /**\n * If `true`, the tabs are centered.\n * This prop is intended for large views.\n * @default false\n */\n centered: PropTypes.bool,\n\n /**\n * The content of the component.\n */\n children: PropTypes.node,\n\n /**\n * Override or extend the styles applied to the component.\n */\n classes: PropTypes.object,\n\n /**\n * @ignore\n */\n className: PropTypes.string,\n\n /**\n * The component used for the root node.\n * Either a string to use a HTML element or a component.\n */\n component: PropTypes.elementType,\n\n /**\n * Determines the color of the indicator.\n * @default 'primary'\n */\n indicatorColor: PropTypes\n /* @typescript-to-proptypes-ignore */\n .oneOfType([PropTypes.oneOf(['primary', 'secondary']), PropTypes.string]),\n\n /**\n * Callback fired when the value changes.\n *\n * @param {React.SyntheticEvent} event The event source of the callback. **Warning**: This is a generic event not a change event.\n * @param {any} value We default to the index of the child (number)\n */\n onChange: PropTypes.func,\n\n /**\n * The component orientation (layout flow direction).\n * @default 'horizontal'\n */\n orientation: PropTypes.oneOf(['horizontal', 'vertical']),\n\n /**\n * The component used to render the scroll buttons.\n * @default TabScrollButton\n */\n ScrollButtonComponent: PropTypes.elementType,\n\n /**\n * Determine behavior of scroll buttons when tabs are set to scroll:\n *\n * - `auto` will only present them when not all the items are visible.\n * - `true` will always present them.\n * - `false` will never present them.\n *\n * By default the scroll buttons are hidden on mobile.\n * This behavior can be disabled with `allowScrollButtonsMobile`.\n * @default 'auto'\n */\n scrollButtons: PropTypes\n /* @typescript-to-proptypes-ignore */\n .oneOf(['auto', false, true]),\n\n /**\n * If `true` the selected tab changes on focus. Otherwise it only\n * changes on activation.\n */\n selectionFollowsFocus: PropTypes.bool,\n\n /**\n * The system prop that allows defining system overrides as well as additional CSS styles.\n */\n sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),\n\n /**\n * Props applied to the tab indicator element.\n * @default {}\n */\n TabIndicatorProps: PropTypes.object,\n\n /**\n * Props applied to the [`TabScrollButton`](/material-ui/api/tab-scroll-button/) element.\n * @default {}\n */\n TabScrollButtonProps: PropTypes.object,\n\n /**\n * Determines the color of the `Tab`.\n * @default 'primary'\n */\n textColor: PropTypes.oneOf(['inherit', 'primary', 'secondary']),\n\n /**\n * The value of the currently selected `Tab`.\n * If you don't want any selected `Tab`, you can set this prop to `false`.\n */\n value: PropTypes.any,\n\n /**\n * Determines additional display behavior of the tabs:\n *\n * - `scrollable` will invoke scrolling properties and allow for horizontally\n * scrolling (or swiping) of the tab bar.\n * -`fullWidth` will make the tabs grow to use all the available space,\n * which should be used for small views, like on mobile.\n * - `standard` will render the default state.\n * @default 'standard'\n */\n variant: PropTypes.oneOf(['fullWidth', 'scrollable', 'standard']),\n\n /**\n * If `true`, the scrollbar is visible. It can be useful when displaying\n * a long vertical list of tabs.\n * @default false\n */\n visibleScrollbar: PropTypes.bool\n} : void 0;\nexport default Tabs;","import { Tabs as MuiTabs, TabsProps as MuiTabsProps, useTheme } from \"@mui/material\";\n\nexport interface TabsProps extends MuiTabsProps {\n tabsColor?: \"primary\" | \"secondary\";\n}\n\nexport const Tabs = ({ tabsColor, children, sx, ...props }: TabsProps) => {\n const theme = useTheme();\n\n const selectedColor = (() => {\n if (tabsColor === \"primary\") {\n return {\n active: theme.palette.primary.main,\n inactive: theme.palette.cedePrimaryColorLight,\n };\n }\n if (tabsColor === \"secondary\") {\n return {\n active: theme.palette.secondary.main,\n inactive: theme.palette.cedeSecondaryColorDark,\n };\n }\n return {\n active: theme.palette.cedeTextPrimaryColor,\n inactive: theme.palette.cedeTextDisabled,\n };\n })();\n\n return (\n <MuiTabs\n TabIndicatorProps={{\n sx: {\n backgroundColor: selectedColor.active,\n },\n ...props.TabIndicatorProps,\n }}\n sx={{\n \"& button\": {\n color: selectedColor.inactive,\n },\n \"& button.Mui-selected\": {\n color: selectedColor.active,\n },\n ...sx,\n }}\n {...props}\n >\n {children}\n </MuiTabs>\n );\n};\n","import { CSSProperties } from \"@emotion/serialize\";\nimport { TextFieldWithIconProps } from \"./types\";\nimport { Box, FormControl, InputAdornment, InputLabel, OutlinedInput } from \"@mui/material\";\nimport { SystemCssProperties } from \"@mui/system\";\n\nexport const TextFieldWithIcon = ({\n label,\n type = \"text\",\n value,\n handleChange,\n icon,\n placeholder,\n id,\n color = \"primary\",\n children,\n sx,\n focused,\n inputSx,\n inputRef,\n error,\n disabled,\n iconPosition = \"end\",\n iconRotation = 0,\n iconVisibility = true,\n}: TextFieldWithIconProps) => {\n const iconPositionProps = {\n [iconPosition === \"end\" ? \"endAdornment\" : \"startAdornment\"]: (\n <InputAdornment position=\"end\">\n <Box\n data-testid={`${id || \"\"}-icon`}\n id={`${id || \"\"}-icon`}\n display=\"flex\"\n sx={{\n transform: `rotate(${iconRotation}deg)`,\n visibility: iconVisibility ? \"visible\" : \"hidden\",\n }}\n >\n {icon}\n </Box>\n </InputAdornment>\n ),\n };\n return (\n <FormControl\n focused={focused}\n sx={(theme) => ({\n width: \"100%\",\n ...(typeof sx === \"function\" ? sx(theme) : (sx as CSSProperties)),\n })}\n variant=\"outlined\"\n >\n {label && (\n <InputLabel\n htmlFor={id}\n color={color}\n data-testid={`${id || \"\"}-input-label`}\n error={error}\n sx={(theme) => ({ color: theme.palette.cedeTextDisabled })}\n >\n {label}\n </InputLabel>\n )}\n\n <OutlinedInput\n sx={(theme) => ({\n borderRadius: theme.custom.inputRadius.default,\n ...(typeof inputSx === \"function\" ? inputSx(theme) : (inputSx as SystemCssProperties)),\n })}\n inputRef={inputRef}\n data-testid={id}\n placeholder={placeholder}\n id={id}\n type={type}\n value={value}\n onChange={handleChange}\n color={color}\n error={error}\n inputProps={{\n \"data-testid\": `${id || \"\"}-input-text`,\n \"autoComplete\": \"off\",\n }}\n {...iconPositionProps}\n label={label}\n disabled={disabled}\n />\n {children}\n </FormControl>\n );\n};\n","'use client';\n\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport { CacheProvider } from '@emotion/react';\nimport createCache from '@emotion/cache';\n\n// prepend: true moves MUI styles to the top of the <head> so they're loaded first.\n// It allows developers to easily override MUI styles with other styling solutions, like CSS modules.\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nlet cache;\nif (typeof document === 'object') {\n cache = createCache({\n key: 'css',\n prepend: true\n });\n}\nexport default function StyledEngineProvider(props) {\n const {\n injectFirst,\n children\n } = props;\n return injectFirst && cache ? /*#__PURE__*/_jsx(CacheProvider, {\n value: cache,\n children: children\n }) : children;\n}\nprocess.env.NODE_ENV !== \"production\" ? StyledEngineProvider.propTypes = {\n /**\n * Your component tree.\n */\n children: PropTypes.node,\n /**\n * By default, the styles are injected last in the <head> element of the page.\n * As a result, they gain more specificity than any other style sheet.\n * If you want to override MUI's styles, set this prop.\n */\n injectFirst: PropTypes.bool\n} : void 0;","import React from \"react\";\nimport { theme } from \"./themeConfig\";\nimport { CssBaseline, StyledEngineProvider, ThemeProvider as MUIThemeProvider } from \"@mui/material\";\n\nexport const ThemeProvider = ({ children }: { children: React.ReactNode }) => {\n return (\n <StyledEngineProvider injectFirst>\n <MUIThemeProvider theme={theme}>\n <CssBaseline />\n {children}\n </MUIThemeProvider>\n </StyledEngineProvider>\n );\n};\n","import { CustomVariables, PaletteOptions, colors, themeConfig } from \"@cede/utils\";\nimport { Components, createTheme, Theme } from \"@mui/material\";\n\nexport const palette: PaletteOptions = themeConfig.palette(colors);\n\nexport const typography = themeConfig.typography;\n\nexport const components: Components<Theme> = {\n MuiCssBaseline: {\n styleOverrides: {},\n },\n MuiFormControl: {\n styleOverrides: {\n root: {\n margin: \"none\",\n },\n },\n },\n MuiChip: {\n defaultProps: {\n variant: \"outlined\",\n color: \"primary\",\n },\n styleOverrides: {\n root: {\n \"borderRadius\": 5,\n \"height\": \"fit-content\",\n \".MuiChip-label\": {\n lineHeight: \"20px\",\n padding: \"0 6px\",\n fontSize: \"12px\",\n },\n },\n },\n },\n MuiSwitch: {\n styleOverrides: {\n root: {\n \".MuiCardActions-root .MuiCardActions-spacing\": {\n padding: 0,\n },\n },\n },\n },\n MuiTextField: {\n styleOverrides: {\n root: {\n legend: {\n width: \"auto\",\n },\n },\n },\n },\n MuiOutlinedInput: {\n styleOverrides: {\n root: {\n legend: {\n width: \"auto\",\n },\n },\n },\n },\n MuiListItem: {\n styleOverrides: {\n root: {\n \"&.Mui-selected\": {\n backgroundColor: \"#424242\",\n },\n },\n },\n },\n MuiTab: {\n styleOverrides: {\n root: {\n \"&.MuiTab-labelIcon\": {\n minHeight: \"48px\",\n height: \"48px\",\n padding: \"12px 16px\",\n },\n },\n },\n },\n MuiAutocomplete: {\n styleOverrides: {\n paper: ({ theme }: { theme: Omit<Theme, \"components\"> }) => ({\n background: theme.palette.background.paper,\n }),\n },\n },\n MuiSkeleton: {\n styleOverrides: {\n root: ({ theme }: { theme: Omit<Theme, \"components\"> }) => ({\n \"&.MuiSkeleton-root\": {\n backgroundColor: theme.palette.cedeSkeleton,\n },\n }),\n },\n },\n};\n\nexport const custom: CustomVariables = themeConfig.custom;\n\nexport const breakpoints = themeConfig.breakpoints;\n\nexport const theme = createTheme({\n palette,\n custom,\n typography,\n components: {\n ...components,\n },\n breakpoints,\n});\n","import { CurrencyAmountFormatter, Icon } from \"@cede/ds\";\nimport { formatBalance, forgeTokenURL } from \"@cede/utils\";\nimport { TransactionStatusCardLiteProps } from \"./types\";\nimport { Box, Typography, useTheme } from \"@mui/material\";\n\nexport const TransactionStatusCardLite = ({\n amountValue,\n currency,\n content,\n cryptoCurrency,\n cryptoCurrencyTo,\n transactionType,\n assetTokenSymbol,\n}: TransactionStatusCardLiteProps) => {\n const theme = useTheme();\n\n if (transactionType === \"trade\") {\n return (\n <Box\n sx={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n width: \"100%\",\n paddingY: `calc(${theme.custom.gutterMargin} - 2px)`,\n paddingX: theme.custom.smallGutterMargin,\n margin: \"auto\",\n }}\n >\n <Box\n sx={{\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"flex-start\",\n justifyContent: \"center\",\n flex: 1,\n }}\n >\n <Typography typography={\"body2\"}>From</Typography>\n {cryptoCurrency && (\n <Box display={\"flex\"} alignItems=\"center\" gap={theme.custom.smallGutterMargin}>\n <Typography typography={\"body1\"}>{`${formatBalance(amountValue, {\n maxDigits: 5,\n })}`}</Typography>\n <Box display={\"flex\"} alignItems=\"center\">\n <Icon iconUrl={forgeTokenURL(cryptoCurrency)} iconName={cryptoCurrency} />\n <Typography typography={\"body1\"} ml=\"3px\">{`${cryptoCurrency.toUpperCase()}`}</Typography>\n </Box>\n </Box>\n )}\n </Box>\n <Box height=\"100%\" display=\"flex\" alignItems=\"flex-end\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M8 0L6.59 1.41L12.17 7H0V9H12.17L6.59 14.59L8 16L16 8L8 0Z\" fill=\"white\" fillOpacity=\"1\" />\n </svg>\n </Box>\n <Box\n sx={{\n display: \"flex\",\n justifyContent: \"flex-end\",\n alignItems: \"center\",\n flex: 1,\n }}\n >\n <Box\n sx={{\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"flex-start\",\n justifyContent: \"center\",\n }}\n >\n <Typography typography={\"body2\"}>To</Typography>\n {cryptoCurrencyTo && (\n <Box display={\"flex\"} alignItems=\"center\" gap={theme.custom.smallGutterMargin}>\n <Typography typography={\"body1\"}>{content}</Typography>\n <Box display={\"flex\"} alignItems=\"center\">\n <Icon iconUrl={forgeTokenURL(cryptoCurrencyTo)} iconName={\"asset-icon\"} />\n <Typography typography={\"body1\"} ml=\"3px\">\n {cryptoCurrencyTo}\n </Typography>\n </Box>\n </Box>\n )}\n </Box>\n </Box>\n </Box>\n );\n }\n\n return (\n <Box\n sx={{\n display: \"grid\",\n placeItems: \"center\",\n backgroundColor: theme.palette.background.component,\n borderRadius: theme.custom.largeBoxRadius,\n width: \"100%\",\n paddingY: `calc(${theme.custom.gutterMargin} - 2px)`,\n margin: \"auto\",\n border: `1px solid ${theme.palette.cedeComponentHr}`,\n }}\n >\n {currency && (\n <CurrencyAmountFormatter\n amount={amountValue}\n colors={{\n integer: theme.palette.text.secondary,\n decimal: theme.palette.text.secondary,\n }}\n size={\"small\"}\n currency={currency}\n />\n )}\n {cryptoCurrency && (\n <Box display={\"flex\"} alignItems=\"center\" gap={theme.custom.smallGutterMargin}>\n <Icon iconUrl={forgeTokenURL(cryptoCurrency)} iconName={cryptoCurrency} />\n <Typography typography={\"body2\"}>{`${formatBalance(\n amountValue,\n )} ${cryptoCurrency.toUpperCase()}`}</Typography>\n </Box>\n )}\n\n <Box display=\"flex\" alignItems=\"center\" marginTop=\"6px\">\n <Icon iconUrl={forgeTokenURL(assetTokenSymbol)} iconName={\"asset-icon\"} />\n <Typography\n component=\"p\"\n color={theme.palette.text.primary}\n ml=\"12px\"\n fontSize=\"20px\"\n fontWeight=\"600\"\n lineHeight=\"32px\"\n >\n {content}\n </Typography>\n </Box>\n </Box>\n );\n};\n","import _extends from \"@babel/runtime/helpers/esm/extends\";\n\n/* eslint-disable no-constant-condition */\nimport * as React from 'react';\nimport { unstable_setRef as setRef, unstable_useEventCallback as useEventCallback, unstable_useControlled as useControlled, unstable_useId as useId } from '@mui/utils'; // https://stackoverflow.com/questions/990904/remove-accents-diacritics-in-a-string-in-javascript\n// Give up on IE11 support for this feature\n\nfunction stripDiacritics(string) {\n return typeof string.normalize !== 'undefined' ? string.normalize('NFD').replace(/[\\u0300-\\u036f]/g, '') : string;\n}\n\nexport function createFilterOptions(config = {}) {\n const {\n ignoreAccents = true,\n ignoreCase = true,\n limit,\n matchFrom = 'any',\n stringify,\n trim = false\n } = config;\n return (options, {\n inputValue,\n getOptionLabel\n }) => {\n let input = trim ? inputValue.trim() : inputValue;\n\n if (ignoreCase) {\n input = input.toLowerCase();\n }\n\n if (ignoreAccents) {\n input = stripDiacritics(input);\n }\n\n const filteredOptions = options.filter(option => {\n let candidate = (stringify || getOptionLabel)(option);\n\n if (ignoreCase) {\n candidate = candidate.toLowerCase();\n }\n\n if (ignoreAccents) {\n candidate = stripDiacritics(candidate);\n }\n\n return matchFrom === 'start' ? candidate.indexOf(input) === 0 : candidate.indexOf(input) > -1;\n });\n return typeof limit === 'number' ? filteredOptions.slice(0, limit) : filteredOptions;\n };\n} // To replace with .findIndex() once we stop IE11 support.\n\nfunction findIndex(array, comp) {\n for (let i = 0; i < array.length; i += 1) {\n if (comp(array[i])) {\n return i;\n }\n }\n\n return -1;\n}\n\nconst defaultFilterOptions = createFilterOptions(); // Number of options to jump in list box when pageup and pagedown keys are used.\n\nconst pageSize = 5;\nexport default function useAutocomplete(props) {\n const {\n autoComplete = false,\n autoHighlight = false,\n autoSelect = false,\n blurOnSelect = false,\n clearOnBlur = !props.freeSolo,\n clearOnEscape = false,\n componentName = 'useAutocomplete',\n defaultValue = props.multiple ? [] : null,\n disableClearable = false,\n disableCloseOnSelect = false,\n disabled: disabledProp,\n disabledItemsFocusable = false,\n disableListWrap = false,\n filterOptions = defaultFilterOptions,\n filterSelectedOptions = false,\n freeSolo = false,\n getOptionDisabled,\n getOptionLabel: getOptionLabelProp = option => {\n var _option$label;\n\n return (_option$label = option.label) != null ? _option$label : option;\n },\n groupBy,\n handleHomeEndKeys = !props.freeSolo,\n id: idProp,\n includeInputInList = false,\n inputValue: inputValueProp,\n isOptionEqualToValue = (option, value) => option === value,\n multiple = false,\n onChange,\n onClose,\n onHighlightChange,\n onInputChange,\n onOpen,\n open: openProp,\n openOnFocus = false,\n options,\n readOnly = false,\n selectOnFocus = !props.freeSolo,\n value: valueProp\n } = props;\n const id = useId(idProp);\n let getOptionLabel = getOptionLabelProp;\n\n getOptionLabel = option => {\n const optionLabel = getOptionLabelProp(option);\n\n if (typeof optionLabel !== 'string') {\n if (process.env.NODE_ENV !== 'production') {\n const erroneousReturn = optionLabel === undefined ? 'undefined' : `${typeof optionLabel} (${optionLabel})`;\n console.error(`MUI: The \\`getOptionLabel\\` method of ${componentName} returned ${erroneousReturn} instead of a string for ${JSON.stringify(option)}.`);\n }\n\n return String(optionLabel);\n }\n\n return optionLabel;\n };\n\n const ignoreFocus = React.useRef(false);\n const firstFocus = React.useRef(true);\n const inputRef = React.useRef(null);\n const listboxRef = React.useRef(null);\n const [anchorEl, setAnchorEl] = React.useState(null);\n const [focusedTag, setFocusedTag] = React.useState(-1);\n const defaultHighlighted = autoHighlight ? 0 : -1;\n const highlightedIndexRef = React.useRef(defaultHighlighted);\n const [value, setValueState] = useControlled({\n controlled: valueProp,\n default: defaultValue,\n name: componentName\n });\n const [inputValue, setInputValueState] = useControlled({\n controlled: inputValueProp,\n default: '',\n name: componentName,\n state: 'inputValue'\n });\n const [focused, setFocused] = React.useState(false);\n const resetInputValue = React.useCallback((event, newValue) => {\n // retain current `inputValue` if new option isn't selected and `clearOnBlur` is false\n // When `multiple` is enabled, `newValue` is an array of all selected items including the newly selected item\n const isOptionSelected = multiple ? value.length < newValue.length : newValue !== null;\n\n if (!isOptionSelected && !clearOnBlur) {\n return;\n }\n\n let newInputValue;\n\n if (multiple) {\n newInputValue = '';\n } else if (newValue == null) {\n newInputValue = '';\n } else {\n const optionLabel = getOptionLabel(newValue);\n newInputValue = typeof optionLabel === 'string' ? optionLabel : '';\n }\n\n if (inputValue === newInputValue) {\n return;\n }\n\n setInputValueState(newInputValue);\n\n if (onInputChange) {\n onInputChange(event, newInputValue, 'reset');\n }\n }, [getOptionLabel, inputValue, multiple, onInputChange, setInputValueState, clearOnBlur, value]);\n const prevValue = React.useRef();\n React.useEffect(() => {\n const valueChange = value !== prevValue.current;\n prevValue.current = value;\n\n if (focused && !valueChange) {\n return;\n } // Only reset the input's value when freeSolo if the component's value changes.\n\n\n if (freeSolo && !valueChange) {\n return;\n }\n\n resetInputValue(null, value);\n }, [value, resetInputValue, focused, prevValue, freeSolo]);\n const [open, setOpenState] = useControlled({\n controlled: openProp,\n default: false,\n name: componentName,\n state: 'open'\n });\n const [inputPristine, setInputPristine] = React.useState(true);\n const inputValueIsSelectedValue = !multiple && value != null && inputValue === getOptionLabel(value);\n const popupOpen = open && !readOnly;\n const filteredOptions = popupOpen ? filterOptions(options.filter(option => {\n if (filterSelectedOptions && (multiple ? value : [value]).some(value2 => value2 !== null && isOptionEqualToValue(option, value2))) {\n return false;\n }\n\n return true;\n }), // we use the empty string to manipulate `filterOptions` to not filter any options\n // i.e. the filter predicate always returns true\n {\n inputValue: inputValueIsSelectedValue && inputPristine ? '' : inputValue,\n getOptionLabel\n }) : [];\n const listboxAvailable = open && filteredOptions.length > 0 && !readOnly;\n\n if (process.env.NODE_ENV !== 'production') {\n if (value !== null && !freeSolo && options.length > 0) {\n const missingValue = (multiple ? value : [value]).filter(value2 => !options.some(option => isOptionEqualToValue(option, value2)));\n\n if (missingValue.length > 0) {\n console.warn([`MUI: The value provided to ${componentName} is invalid.`, `None of the options match with \\`${missingValue.length > 1 ? JSON.stringify(missingValue) : JSON.stringify(missingValue[0])}\\`.`, 'You can use the `isOptionEqualToValue` prop to customize the equality test.'].join('\\n'));\n }\n }\n }\n\n const focusTag = useEventCallback(tagToFocus => {\n if (tagToFocus === -1) {\n inputRef.current.focus();\n } else {\n anchorEl.querySelector(`[data-tag-index=\"${tagToFocus}\"]`).focus();\n }\n }); // Ensure the focusedTag is never inconsistent\n\n React.useEffect(() => {\n if (multiple && focusedTag > value.length - 1) {\n setFocusedTag(-1);\n focusTag(-1);\n }\n }, [value, multiple, focusedTag, focusTag]);\n\n function validOptionIndex(index, direction) {\n if (!listboxRef.current || index === -1) {\n return -1;\n }\n\n let nextFocus = index;\n\n while (true) {\n // Out of range\n if (direction === 'next' && nextFocus === filteredOptions.length || direction === 'previous' && nextFocus === -1) {\n return -1;\n }\n\n const option = listboxRef.current.querySelector(`[data-option-index=\"${nextFocus}\"]`); // Same logic as MenuList.js\n\n const nextFocusDisabled = disabledItemsFocusable ? false : !option || option.disabled || option.getAttribute('aria-disabled') === 'true';\n\n if (option && !option.hasAttribute('tabindex') || nextFocusDisabled) {\n // Move to the next element.\n nextFocus += direction === 'next' ? 1 : -1;\n } else {\n return nextFocus;\n }\n }\n }\n\n const setHighlightedIndex = useEventCallback(({\n event,\n index,\n reason = 'auto'\n }) => {\n highlightedIndexRef.current = index; // does the index exist?\n\n if (index === -1) {\n inputRef.current.removeAttribute('aria-activedescendant');\n } else {\n inputRef.current.setAttribute('aria-activedescendant', `${id}-option-${index}`);\n }\n\n if (onHighlightChange) {\n onHighlightChange(event, index === -1 ? null : filteredOptions[index], reason);\n }\n\n if (!listboxRef.current) {\n return;\n }\n\n const prev = listboxRef.current.querySelector('[role=\"option\"].Mui-focused');\n\n if (prev) {\n prev.classList.remove('Mui-focused');\n prev.classList.remove('Mui-focusVisible');\n }\n\n const listboxNode = listboxRef.current.parentElement.querySelector('[role=\"listbox\"]'); // \"No results\"\n\n if (!listboxNode) {\n return;\n }\n\n if (index === -1) {\n listboxNode.scrollTop = 0;\n return;\n }\n\n const option = listboxRef.current.querySelector(`[data-option-index=\"${index}\"]`);\n\n if (!option) {\n return;\n }\n\n option.classList.add('Mui-focused');\n\n if (reason === 'keyboard') {\n option.classList.add('Mui-focusVisible');\n } // Scroll active descendant into view.\n // Logic copied from https://www.w3.org/WAI/ARIA/apg/example-index/combobox/js/select-only.js\n //\n // Consider this API instead once it has a better browser support:\n // .scrollIntoView({ scrollMode: 'if-needed', block: 'nearest' });\n\n\n if (listboxNode.scrollHeight > listboxNode.clientHeight && reason !== 'mouse') {\n const element = option;\n const scrollBottom = listboxNode.clientHeight + listboxNode.scrollTop;\n const elementBottom = element.offsetTop + element.offsetHeight;\n\n if (elementBottom > scrollBottom) {\n listboxNode.scrollTop = elementBottom - listboxNode.clientHeight;\n } else if (element.offsetTop - element.offsetHeight * (groupBy ? 1.3 : 0) < listboxNode.scrollTop) {\n listboxNode.scrollTop = element.offsetTop - element.offsetHeight * (groupBy ? 1.3 : 0);\n }\n }\n });\n const changeHighlightedIndex = useEventCallback(({\n event,\n diff,\n direction = 'next',\n reason = 'auto'\n }) => {\n if (!popupOpen) {\n return;\n }\n\n const getNextIndex = () => {\n const maxIndex = filteredOptions.length - 1;\n\n if (diff === 'reset') {\n return defaultHighlighted;\n }\n\n if (diff === 'start') {\n return 0;\n }\n\n if (diff === 'end') {\n return maxIndex;\n }\n\n const newIndex = highlightedIndexRef.current + diff;\n\n if (newIndex < 0) {\n if (newIndex === -1 && includeInputInList) {\n return -1;\n }\n\n if (disableListWrap && highlightedIndexRef.current !== -1 || Math.abs(diff) > 1) {\n return 0;\n }\n\n return maxIndex;\n }\n\n if (newIndex > maxIndex) {\n if (newIndex === maxIndex + 1 && includeInputInList) {\n return -1;\n }\n\n if (disableListWrap || Math.abs(diff) > 1) {\n return maxIndex;\n }\n\n return 0;\n }\n\n return newIndex;\n };\n\n const nextIndex = validOptionIndex(getNextIndex(), direction);\n setHighlightedIndex({\n index: nextIndex,\n reason,\n event\n }); // Sync the content of the input with the highlighted option.\n\n if (autoComplete && diff !== 'reset') {\n if (nextIndex === -1) {\n inputRef.current.value = inputValue;\n } else {\n const option = getOptionLabel(filteredOptions[nextIndex]);\n inputRef.current.value = option; // The portion of the selected suggestion that has not been typed by the user,\n // a completion string, appears inline after the input cursor in the textbox.\n\n const index = option.toLowerCase().indexOf(inputValue.toLowerCase());\n\n if (index === 0 && inputValue.length > 0) {\n inputRef.current.setSelectionRange(inputValue.length, option.length);\n }\n }\n }\n });\n const syncHighlightedIndex = React.useCallback(() => {\n if (!popupOpen) {\n return;\n }\n\n const valueItem = multiple ? value[0] : value; // The popup is empty, reset\n\n if (filteredOptions.length === 0 || valueItem == null) {\n changeHighlightedIndex({\n diff: 'reset'\n });\n return;\n }\n\n if (!listboxRef.current) {\n return;\n } // Synchronize the value with the highlighted index\n\n\n if (valueItem != null) {\n const currentOption = filteredOptions[highlightedIndexRef.current]; // Keep the current highlighted index if possible\n\n if (multiple && currentOption && findIndex(value, val => isOptionEqualToValue(currentOption, val)) !== -1) {\n return;\n }\n\n const itemIndex = findIndex(filteredOptions, optionItem => isOptionEqualToValue(optionItem, valueItem));\n\n if (itemIndex === -1) {\n changeHighlightedIndex({\n diff: 'reset'\n });\n } else {\n setHighlightedIndex({\n index: itemIndex\n });\n }\n\n return;\n } // Prevent the highlighted index to leak outside the boundaries.\n\n\n if (highlightedIndexRef.current >= filteredOptions.length - 1) {\n setHighlightedIndex({\n index: filteredOptions.length - 1\n });\n return;\n } // Restore the focus to the previous index.\n\n\n setHighlightedIndex({\n index: highlightedIndexRef.current\n }); // Ignore filteredOptions (and options, isOptionEqualToValue, getOptionLabel) not to break the scroll position\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [// Only sync the highlighted index when the option switch between empty and not\n filteredOptions.length, // Don't sync the highlighted index with the value when multiple\n // eslint-disable-next-line react-hooks/exhaustive-deps\n multiple ? false : value, filterSelectedOptions, changeHighlightedIndex, setHighlightedIndex, popupOpen, inputValue, multiple]);\n const handleListboxRef = useEventCallback(node => {\n setRef(listboxRef, node);\n\n if (!node) {\n return;\n }\n\n syncHighlightedIndex();\n });\n\n if (process.env.NODE_ENV !== 'production') {\n // eslint-disable-next-line react-hooks/rules-of-hooks\n React.useEffect(() => {\n if (!inputRef.current || inputRef.current.nodeName !== 'INPUT') {\n if (inputRef.current && inputRef.current.nodeName === 'TEXTAREA') {\n console.warn([`A textarea element was provided to ${componentName} where input was expected.`, `This is not a supported scenario but it may work under certain conditions.`, `A textarea keyboard navigation may conflict with Autocomplete controls (e.g. enter and arrow keys).`, `Make sure to test keyboard navigation and add custom event handlers if necessary.`].join('\\n'));\n } else {\n console.error([`MUI: Unable to find the input element. It was resolved to ${inputRef.current} while an HTMLInputElement was expected.`, `Instead, ${componentName} expects an input element.`, '', componentName === 'useAutocomplete' ? 'Make sure you have binded getInputProps correctly and that the normal ref/effect resolutions order is guaranteed.' : 'Make sure you have customized the input component correctly.'].join('\\n'));\n }\n }\n }, [componentName]);\n }\n\n React.useEffect(() => {\n syncHighlightedIndex();\n }, [syncHighlightedIndex]);\n\n const handleOpen = event => {\n if (open) {\n return;\n }\n\n setOpenState(true);\n setInputPristine(true);\n\n if (onOpen) {\n onOpen(event);\n }\n };\n\n const handleClose = (event, reason) => {\n if (!open) {\n return;\n }\n\n setOpenState(false);\n\n if (onClose) {\n onClose(event, reason);\n }\n };\n\n const handleValue = (event, newValue, reason, details) => {\n if (multiple) {\n if (value.length === newValue.length && value.every((val, i) => val === newValue[i])) {\n return;\n }\n } else if (value === newValue) {\n return;\n }\n\n if (onChange) {\n onChange(event, newValue, reason, details);\n }\n\n setValueState(newValue);\n };\n\n const isTouch = React.useRef(false);\n\n const selectNewValue = (event, option, reasonProp = 'selectOption', origin = 'options') => {\n let reason = reasonProp;\n let newValue = option;\n\n if (multiple) {\n newValue = Array.isArray(value) ? value.slice() : [];\n\n if (process.env.NODE_ENV !== 'production') {\n const matches = newValue.filter(val => isOptionEqualToValue(option, val));\n\n if (matches.length > 1) {\n console.error([`MUI: The \\`isOptionEqualToValue\\` method of ${componentName} do not handle the arguments correctly.`, `The component expects a single value to match a given option but found ${matches.length} matches.`].join('\\n'));\n }\n }\n\n const itemIndex = findIndex(newValue, valueItem => isOptionEqualToValue(option, valueItem));\n\n if (itemIndex === -1) {\n newValue.push(option);\n } else if (origin !== 'freeSolo') {\n newValue.splice(itemIndex, 1);\n reason = 'removeOption';\n }\n }\n\n resetInputValue(event, newValue);\n handleValue(event, newValue, reason, {\n option\n });\n\n if (!disableCloseOnSelect && (!event || !event.ctrlKey && !event.metaKey)) {\n handleClose(event, reason);\n }\n\n if (blurOnSelect === true || blurOnSelect === 'touch' && isTouch.current || blurOnSelect === 'mouse' && !isTouch.current) {\n inputRef.current.blur();\n }\n };\n\n function validTagIndex(index, direction) {\n if (index === -1) {\n return -1;\n }\n\n let nextFocus = index;\n\n while (true) {\n // Out of range\n if (direction === 'next' && nextFocus === value.length || direction === 'previous' && nextFocus === -1) {\n return -1;\n }\n\n const option = anchorEl.querySelector(`[data-tag-index=\"${nextFocus}\"]`); // Same logic as MenuList.js\n\n if (!option || !option.hasAttribute('tabindex') || option.disabled || option.getAttribute('aria-disabled') === 'true') {\n nextFocus += direction === 'next' ? 1 : -1;\n } else {\n return nextFocus;\n }\n }\n }\n\n const handleFocusTag = (event, direction) => {\n if (!multiple) {\n return;\n }\n\n if (inputValue === '') {\n handleClose(event, 'toggleInput');\n }\n\n let nextTag = focusedTag;\n\n if (focusedTag === -1) {\n if (inputValue === '' && direction === 'previous') {\n nextTag = value.length - 1;\n }\n } else {\n nextTag += direction === 'next' ? 1 : -1;\n\n if (nextTag < 0) {\n nextTag = 0;\n }\n\n if (nextTag === value.length) {\n nextTag = -1;\n }\n }\n\n nextTag = validTagIndex(nextTag, direction);\n setFocusedTag(nextTag);\n focusTag(nextTag);\n };\n\n const handleClear = event => {\n ignoreFocus.current = true;\n setInputValueState('');\n\n if (onInputChange) {\n onInputChange(event, '', 'clear');\n }\n\n handleValue(event, multiple ? [] : null, 'clear');\n };\n\n const handleKeyDown = other => event => {\n if (other.onKeyDown) {\n other.onKeyDown(event);\n }\n\n if (event.defaultMuiPrevented) {\n return;\n }\n\n if (focusedTag !== -1 && ['ArrowLeft', 'ArrowRight'].indexOf(event.key) === -1) {\n setFocusedTag(-1);\n focusTag(-1);\n } // Wait until IME is settled.\n\n\n if (event.which !== 229) {\n switch (event.key) {\n case 'Home':\n if (popupOpen && handleHomeEndKeys) {\n // Prevent scroll of the page\n event.preventDefault();\n changeHighlightedIndex({\n diff: 'start',\n direction: 'next',\n reason: 'keyboard',\n event\n });\n }\n\n break;\n\n case 'End':\n if (popupOpen && handleHomeEndKeys) {\n // Prevent scroll of the page\n event.preventDefault();\n changeHighlightedIndex({\n diff: 'end',\n direction: 'previous',\n reason: 'keyboard',\n event\n });\n }\n\n break;\n\n case 'PageUp':\n // Prevent scroll of the page\n event.preventDefault();\n changeHighlightedIndex({\n diff: -pageSize,\n direction: 'previous',\n reason: 'keyboard',\n event\n });\n handleOpen(event);\n break;\n\n case 'PageDown':\n // Prevent scroll of the page\n event.preventDefault();\n changeHighlightedIndex({\n diff: pageSize,\n direction: 'next',\n reason: 'keyboard',\n event\n });\n handleOpen(event);\n break;\n\n case 'ArrowDown':\n // Prevent cursor move\n event.preventDefault();\n changeHighlightedIndex({\n diff: 1,\n direction: 'next',\n reason: 'keyboard',\n event\n });\n handleOpen(event);\n break;\n\n case 'ArrowUp':\n // Prevent cursor move\n event.preventDefault();\n changeHighlightedIndex({\n diff: -1,\n direction: 'previous',\n reason: 'keyboard',\n event\n });\n handleOpen(event);\n break;\n\n case 'ArrowLeft':\n handleFocusTag(event, 'previous');\n break;\n\n case 'ArrowRight':\n handleFocusTag(event, 'next');\n break;\n\n case 'Enter':\n if (highlightedIndexRef.current !== -1 && popupOpen) {\n const option = filteredOptions[highlightedIndexRef.current];\n const disabled = getOptionDisabled ? getOptionDisabled(option) : false; // Avoid early form validation, let the end-users continue filling the form.\n\n event.preventDefault();\n\n if (disabled) {\n return;\n }\n\n selectNewValue(event, option, 'selectOption'); // Move the selection to the end.\n\n if (autoComplete) {\n inputRef.current.setSelectionRange(inputRef.current.value.length, inputRef.current.value.length);\n }\n } else if (freeSolo && inputValue !== '' && inputValueIsSelectedValue === false) {\n if (multiple) {\n // Allow people to add new values before they submit the form.\n event.preventDefault();\n }\n\n selectNewValue(event, inputValue, 'createOption', 'freeSolo');\n }\n\n break;\n\n case 'Escape':\n if (popupOpen) {\n // Avoid Opera to exit fullscreen mode.\n event.preventDefault(); // Avoid the Modal to handle the event.\n\n event.stopPropagation();\n handleClose(event, 'escape');\n } else if (clearOnEscape && (inputValue !== '' || multiple && value.length > 0)) {\n // Avoid Opera to exit fullscreen mode.\n event.preventDefault(); // Avoid the Modal to handle the event.\n\n event.stopPropagation();\n handleClear(event);\n }\n\n break;\n\n case 'Backspace':\n if (multiple && !readOnly && inputValue === '' && value.length > 0) {\n const index = focusedTag === -1 ? value.length - 1 : focusedTag;\n const newValue = value.slice();\n newValue.splice(index, 1);\n handleValue(event, newValue, 'removeOption', {\n option: value[index]\n });\n }\n\n break;\n\n default:\n }\n }\n };\n\n const handleFocus = event => {\n setFocused(true);\n\n if (openOnFocus && !ignoreFocus.current) {\n handleOpen(event);\n }\n };\n\n const handleBlur = event => {\n // Ignore the event when using the scrollbar with IE11\n if (listboxRef.current !== null && listboxRef.current.parentElement.contains(document.activeElement)) {\n inputRef.current.focus();\n return;\n }\n\n setFocused(false);\n firstFocus.current = true;\n ignoreFocus.current = false;\n\n if (autoSelect && highlightedIndexRef.current !== -1 && popupOpen) {\n selectNewValue(event, filteredOptions[highlightedIndexRef.current], 'blur');\n } else if (autoSelect && freeSolo && inputValue !== '') {\n selectNewValue(event, inputValue, 'blur', 'freeSolo');\n } else if (clearOnBlur) {\n resetInputValue(event, value);\n }\n\n handleClose(event, 'blur');\n };\n\n const handleInputChange = event => {\n const newValue = event.target.value;\n\n if (inputValue !== newValue) {\n setInputValueState(newValue);\n setInputPristine(false);\n\n if (onInputChange) {\n onInputChange(event, newValue, 'input');\n }\n }\n\n if (newValue === '') {\n if (!disableClearable && !multiple) {\n handleValue(event, null, 'clear');\n }\n } else {\n handleOpen(event);\n }\n };\n\n const handleOptionMouseOver = event => {\n setHighlightedIndex({\n event,\n index: Number(event.currentTarget.getAttribute('data-option-index')),\n reason: 'mouse'\n });\n };\n\n const handleOptionTouchStart = () => {\n isTouch.current = true;\n };\n\n const handleOptionClick = event => {\n const index = Number(event.currentTarget.getAttribute('data-option-index'));\n selectNewValue(event, filteredOptions[index], 'selectOption');\n isTouch.current = false;\n };\n\n const handleTagDelete = index => event => {\n const newValue = value.slice();\n newValue.splice(index, 1);\n handleValue(event, newValue, 'removeOption', {\n option: value[index]\n });\n };\n\n const handlePopupIndicator = event => {\n if (open) {\n handleClose(event, 'toggleInput');\n } else {\n handleOpen(event);\n }\n }; // Prevent input blur when interacting with the combobox\n\n\n const handleMouseDown = event => {\n if (event.target.getAttribute('id') !== id) {\n event.preventDefault();\n }\n }; // Focus the input when interacting with the combobox\n\n\n const handleClick = () => {\n inputRef.current.focus();\n\n if (selectOnFocus && firstFocus.current && inputRef.current.selectionEnd - inputRef.current.selectionStart === 0) {\n inputRef.current.select();\n }\n\n firstFocus.current = false;\n };\n\n const handleInputMouseDown = event => {\n if (inputValue === '' || !open) {\n handlePopupIndicator(event);\n }\n };\n\n let dirty = freeSolo && inputValue.length > 0;\n dirty = dirty || (multiple ? value.length > 0 : value !== null);\n let groupedOptions = filteredOptions;\n\n if (groupBy) {\n // used to keep track of key and indexes in the result array\n const indexBy = new Map();\n let warn = false;\n groupedOptions = filteredOptions.reduce((acc, option, index) => {\n const group = groupBy(option);\n\n if (acc.length > 0 && acc[acc.length - 1].group === group) {\n acc[acc.length - 1].options.push(option);\n } else {\n if (process.env.NODE_ENV !== 'production') {\n if (indexBy.get(group) && !warn) {\n console.warn(`MUI: The options provided combined with the \\`groupBy\\` method of ${componentName} returns duplicated headers.`, 'You can solve the issue by sorting the options with the output of `groupBy`.');\n warn = true;\n }\n\n indexBy.set(group, true);\n }\n\n acc.push({\n key: index,\n index,\n group,\n options: [option]\n });\n }\n\n return acc;\n }, []);\n }\n\n if (disabledProp && focused) {\n handleBlur();\n }\n\n return {\n getRootProps: (other = {}) => _extends({\n 'aria-owns': listboxAvailable ? `${id}-listbox` : null\n }, other, {\n onKeyDown: handleKeyDown(other),\n onMouseDown: handleMouseDown,\n onClick: handleClick\n }),\n getInputLabelProps: () => ({\n id: `${id}-label`,\n htmlFor: id\n }),\n getInputProps: () => ({\n id,\n value: inputValue,\n onBlur: handleBlur,\n onFocus: handleFocus,\n onChange: handleInputChange,\n onMouseDown: handleInputMouseDown,\n // if open then this is handled imperativeley so don't let react override\n // only have an opinion about this when closed\n 'aria-activedescendant': popupOpen ? '' : null,\n 'aria-autocomplete': autoComplete ? 'both' : 'list',\n 'aria-controls': listboxAvailable ? `${id}-listbox` : undefined,\n 'aria-expanded': listboxAvailable,\n // Disable browser's suggestion that might overlap with the popup.\n // Handle autocomplete but not autofill.\n autoComplete: 'off',\n ref: inputRef,\n autoCapitalize: 'none',\n spellCheck: 'false',\n role: 'combobox'\n }),\n getClearProps: () => ({\n tabIndex: -1,\n onClick: handleClear\n }),\n getPopupIndicatorProps: () => ({\n tabIndex: -1,\n onClick: handlePopupIndicator\n }),\n getTagProps: ({\n index\n }) => _extends({\n key: index,\n 'data-tag-index': index,\n tabIndex: -1\n }, !readOnly && {\n onDelete: handleTagDelete(index)\n }),\n getListboxProps: () => ({\n role: 'listbox',\n id: `${id}-listbox`,\n 'aria-labelledby': `${id}-label`,\n ref: handleListboxRef,\n onMouseDown: event => {\n // Prevent blur\n event.preventDefault();\n }\n }),\n getOptionProps: ({\n index,\n option\n }) => {\n const selected = (multiple ? value : [value]).some(value2 => value2 != null && isOptionEqualToValue(option, value2));\n const disabled = getOptionDisabled ? getOptionDisabled(option) : false;\n return {\n key: getOptionLabel(option),\n tabIndex: -1,\n role: 'option',\n id: `${id}-option-${index}`,\n onMouseOver: handleOptionMouseOver,\n onClick: handleOptionClick,\n onTouchStart: handleOptionTouchStart,\n 'data-option-index': index,\n 'aria-disabled': disabled,\n 'aria-selected': selected\n };\n },\n id,\n inputValue,\n value,\n dirty,\n popupOpen,\n focused: focused || focusedTag !== -1,\n anchorEl,\n setAnchorEl,\n focusedTag,\n groupedOptions\n };\n}","import { generateUtilityClass, generateUtilityClasses } from '@mui/base';\nexport function getListSubheaderUtilityClass(slot) {\n return generateUtilityClass('MuiListSubheader', slot);\n}\nconst listSubheaderClasses = generateUtilityClasses('MuiListSubheader', ['root', 'colorPrimary', 'colorInherit', 'gutters', 'inset', 'sticky']);\nexport default listSubheaderClasses;","import _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nconst _excluded = [\"className\", \"color\", \"component\", \"disableGutters\", \"disableSticky\", \"inset\"];\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport { unstable_composeClasses as composeClasses } from '@mui/base';\nimport styled from '../styles/styled';\nimport useThemeProps from '../styles/useThemeProps';\nimport capitalize from '../utils/capitalize';\nimport { getListSubheaderUtilityClass } from './listSubheaderClasses';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\n\nconst useUtilityClasses = ownerState => {\n const {\n classes,\n color,\n disableGutters,\n inset,\n disableSticky\n } = ownerState;\n const slots = {\n root: ['root', color !== 'default' && `color${capitalize(color)}`, !disableGutters && 'gutters', inset && 'inset', !disableSticky && 'sticky']\n };\n return composeClasses(slots, getListSubheaderUtilityClass, classes);\n};\n\nconst ListSubheaderRoot = styled('li', {\n name: 'MuiListSubheader',\n slot: 'Root',\n overridesResolver: (props, styles) => {\n const {\n ownerState\n } = props;\n return [styles.root, ownerState.color !== 'default' && styles[`color${capitalize(ownerState.color)}`], !ownerState.disableGutters && styles.gutters, ownerState.inset && styles.inset, !ownerState.disableSticky && styles.sticky];\n }\n})(({\n theme,\n ownerState\n}) => _extends({\n boxSizing: 'border-box',\n lineHeight: '48px',\n listStyle: 'none',\n color: (theme.vars || theme).palette.text.secondary,\n fontFamily: theme.typography.fontFamily,\n fontWeight: theme.typography.fontWeightMedium,\n fontSize: theme.typography.pxToRem(14)\n}, ownerState.color === 'primary' && {\n color: (theme.vars || theme).palette.primary.main\n}, ownerState.color === 'inherit' && {\n color: 'inherit'\n}, !ownerState.disableGutters && {\n paddingLeft: 16,\n paddingRight: 16\n}, ownerState.inset && {\n paddingLeft: 72\n}, !ownerState.disableSticky && {\n position: 'sticky',\n top: 0,\n zIndex: 1,\n backgroundColor: (theme.vars || theme).palette.background.paper\n}));\nconst ListSubheader = /*#__PURE__*/React.forwardRef(function ListSubheader(inProps, ref) {\n const props = useThemeProps({\n props: inProps,\n name: 'MuiListSubheader'\n });\n\n const {\n className,\n color = 'default',\n component = 'li',\n disableGutters = false,\n disableSticky = false,\n inset = false\n } = props,\n other = _objectWithoutPropertiesLoose(props, _excluded);\n\n const ownerState = _extends({}, props, {\n color,\n component,\n disableGutters,\n disableSticky,\n inset\n });\n\n const classes = useUtilityClasses(ownerState);\n return /*#__PURE__*/_jsx(ListSubheaderRoot, _extends({\n as: component,\n className: clsx(classes.root, className),\n ref: ref,\n ownerState: ownerState\n }, other));\n});\nprocess.env.NODE_ENV !== \"production\" ? ListSubheader.propTypes\n/* remove-proptypes */\n= {\n // ----------------------------- Warning --------------------------------\n // | These PropTypes are generated from the TypeScript type definitions |\n // | To update them edit the d.ts file and run \"yarn proptypes\" |\n // ----------------------------------------------------------------------\n\n /**\n * The content of the component.\n */\n children: PropTypes.node,\n\n /**\n * Override or extend the styles applied to the component.\n */\n classes: PropTypes.object,\n\n /**\n * @ignore\n */\n className: PropTypes.string,\n\n /**\n * The color of the component. It supports those theme colors that make sense for this component.\n * @default 'default'\n */\n color: PropTypes.oneOf(['default', 'inherit', 'primary']),\n\n /**\n * The component used for the root node.\n * Either a string to use a HTML element or a component.\n */\n component: PropTypes.elementType,\n\n /**\n * If `true`, the List Subheader will not have gutters.\n * @default false\n */\n disableGutters: PropTypes.bool,\n\n /**\n * If `true`, the List Subheader will not stick to the top during scroll.\n * @default false\n */\n disableSticky: PropTypes.bool,\n\n /**\n * If `true`, the List Subheader is indented.\n * @default false\n */\n inset: PropTypes.bool,\n\n /**\n * The system prop that allows defining system overrides as well as additional CSS styles.\n */\n sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])\n} : void 0;\nexport default ListSubheader;","import { generateUtilityClass, generateUtilityClasses } from '@mui/base';\nexport function getAutocompleteUtilityClass(slot) {\n return generateUtilityClass('MuiAutocomplete', slot);\n}\nconst autocompleteClasses = generateUtilityClasses('MuiAutocomplete', ['root', 'fullWidth', 'focused', 'focusVisible', 'tag', 'tagSizeSmall', 'tagSizeMedium', 'hasPopupIcon', 'hasClearIcon', 'inputRoot', 'input', 'inputFocused', 'endAdornment', 'clearIndicator', 'popupIndicator', 'popupIndicatorOpen', 'popper', 'popperDisablePortal', 'paper', 'listbox', 'loading', 'noOptions', 'option', 'groupLabel', 'groupUl']);\nexport default autocompleteClasses;","import _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\n\nvar _ClearIcon, _ArrowDropDownIcon;\n\nconst _excluded = [\"autoComplete\", \"autoHighlight\", \"autoSelect\", \"blurOnSelect\", \"ChipProps\", \"className\", \"clearIcon\", \"clearOnBlur\", \"clearOnEscape\", \"clearText\", \"closeText\", \"componentsProps\", \"defaultValue\", \"disableClearable\", \"disableCloseOnSelect\", \"disabled\", \"disabledItemsFocusable\", \"disableListWrap\", \"disablePortal\", \"filterOptions\", \"filterSelectedOptions\", \"forcePopupIcon\", \"freeSolo\", \"fullWidth\", \"getLimitTagsText\", \"getOptionDisabled\", \"getOptionLabel\", \"isOptionEqualToValue\", \"groupBy\", \"handleHomeEndKeys\", \"id\", \"includeInputInList\", \"inputValue\", \"limitTags\", \"ListboxComponent\", \"ListboxProps\", \"loading\", \"loadingText\", \"multiple\", \"noOptionsText\", \"onChange\", \"onClose\", \"onHighlightChange\", \"onInputChange\", \"onOpen\", \"open\", \"openOnFocus\", \"openText\", \"options\", \"PaperComponent\", \"PopperComponent\", \"popupIcon\", \"readOnly\", \"renderGroup\", \"renderInput\", \"renderOption\", \"renderTags\", \"selectOnFocus\", \"size\", \"value\"];\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport { chainPropTypes, integerPropType } from '@mui/utils';\nimport { unstable_composeClasses as composeClasses, useAutocomplete, createFilterOptions } from '@mui/base';\nimport { alpha } from '@mui/system';\nimport Popper from '../Popper';\nimport ListSubheader from '../ListSubheader';\nimport Paper from '../Paper';\nimport IconButton from '../IconButton';\nimport Chip from '../Chip';\nimport inputClasses from '../Input/inputClasses';\nimport inputBaseClasses from '../InputBase/inputBaseClasses';\nimport outlinedInputClasses from '../OutlinedInput/outlinedInputClasses';\nimport filledInputClasses from '../FilledInput/filledInputClasses';\nimport ClearIcon from '../internal/svg-icons/Close';\nimport ArrowDropDownIcon from '../internal/svg-icons/ArrowDropDown';\nimport useThemeProps from '../styles/useThemeProps';\nimport styled from '../styles/styled';\nimport autocompleteClasses, { getAutocompleteUtilityClass } from './autocompleteClasses';\nimport capitalize from '../utils/capitalize';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\n\nconst useUtilityClasses = ownerState => {\n const {\n classes,\n disablePortal,\n focused,\n fullWidth,\n hasClearIcon,\n hasPopupIcon,\n inputFocused,\n popupOpen,\n size\n } = ownerState;\n const slots = {\n root: ['root', focused && 'focused', fullWidth && 'fullWidth', hasClearIcon && 'hasClearIcon', hasPopupIcon && 'hasPopupIcon'],\n inputRoot: ['inputRoot'],\n input: ['input', inputFocused && 'inputFocused'],\n tag: ['tag', `tagSize${capitalize(size)}`],\n endAdornment: ['endAdornment'],\n clearIndicator: ['clearIndicator'],\n popupIndicator: ['popupIndicator', popupOpen && 'popupIndicatorOpen'],\n popper: ['popper', disablePortal && 'popperDisablePortal'],\n paper: ['paper'],\n listbox: ['listbox'],\n loading: ['loading'],\n noOptions: ['noOptions'],\n option: ['option'],\n groupLabel: ['groupLabel'],\n groupUl: ['groupUl']\n };\n return composeClasses(slots, getAutocompleteUtilityClass, classes);\n};\n\nconst AutocompleteRoot = styled('div', {\n name: 'MuiAutocomplete',\n slot: 'Root',\n overridesResolver: (props, styles) => {\n const {\n ownerState\n } = props;\n const {\n fullWidth,\n hasClearIcon,\n hasPopupIcon,\n inputFocused,\n size\n } = ownerState;\n return [{\n [`& .${autocompleteClasses.tag}`]: styles.tag\n }, {\n [`& .${autocompleteClasses.tag}`]: styles[`tagSize${capitalize(size)}`]\n }, {\n [`& .${autocompleteClasses.inputRoot}`]: styles.inputRoot\n }, {\n [`& .${autocompleteClasses.input}`]: styles.input\n }, {\n [`& .${autocompleteClasses.input}`]: inputFocused && styles.inputFocused\n }, styles.root, fullWidth && styles.fullWidth, hasPopupIcon && styles.hasPopupIcon, hasClearIcon && styles.hasClearIcon];\n }\n})(({\n ownerState\n}) => _extends({\n [`&.${autocompleteClasses.focused} .${autocompleteClasses.clearIndicator}`]: {\n visibility: 'visible'\n },\n\n /* Avoid double tap issue on iOS */\n '@media (pointer: fine)': {\n [`&:hover .${autocompleteClasses.clearIndicator}`]: {\n visibility: 'visible'\n }\n }\n}, ownerState.fullWidth && {\n width: '100%'\n}, {\n [`& .${autocompleteClasses.tag}`]: _extends({\n margin: 3,\n maxWidth: 'calc(100% - 6px)'\n }, ownerState.size === 'small' && {\n margin: 2,\n maxWidth: 'calc(100% - 4px)'\n }),\n [`& .${autocompleteClasses.inputRoot}`]: {\n flexWrap: 'wrap',\n [`.${autocompleteClasses.hasPopupIcon}&, .${autocompleteClasses.hasClearIcon}&`]: {\n paddingRight: 26 + 4\n },\n [`.${autocompleteClasses.hasPopupIcon}.${autocompleteClasses.hasClearIcon}&`]: {\n paddingRight: 52 + 4\n },\n [`& .${autocompleteClasses.input}`]: {\n width: 0,\n minWidth: 30\n }\n },\n [`& .${inputClasses.root}`]: {\n paddingBottom: 1,\n '& .MuiInput-input': {\n padding: '4px 4px 4px 0px'\n }\n },\n [`& .${inputClasses.root}.${inputBaseClasses.sizeSmall}`]: {\n [`& .${inputClasses.input}`]: {\n padding: '2px 4px 3px 0'\n }\n },\n [`& .${outlinedInputClasses.root}`]: {\n padding: 9,\n [`.${autocompleteClasses.hasPopupIcon}&, .${autocompleteClasses.hasClearIcon}&`]: {\n paddingRight: 26 + 4 + 9\n },\n [`.${autocompleteClasses.hasPopupIcon}.${autocompleteClasses.hasClearIcon}&`]: {\n paddingRight: 52 + 4 + 9\n },\n [`& .${autocompleteClasses.input}`]: {\n padding: '7.5px 4px 7.5px 6px'\n },\n [`& .${autocompleteClasses.endAdornment}`]: {\n right: 9\n }\n },\n [`& .${outlinedInputClasses.root}.${inputBaseClasses.sizeSmall}`]: {\n // Don't specify paddingRight, as it overrides the default value set when there is only\n // one of the popup or clear icon as the specificity is equal so the latter one wins\n paddingTop: 6,\n paddingBottom: 6,\n paddingLeft: 6,\n [`& .${autocompleteClasses.input}`]: {\n padding: '2.5px 4px 2.5px 6px'\n }\n },\n [`& .${filledInputClasses.root}`]: {\n paddingTop: 19,\n paddingLeft: 8,\n [`.${autocompleteClasses.hasPopupIcon}&, .${autocompleteClasses.hasClearIcon}&`]: {\n paddingRight: 26 + 4 + 9\n },\n [`.${autocompleteClasses.hasPopupIcon}.${autocompleteClasses.hasClearIcon}&`]: {\n paddingRight: 52 + 4 + 9\n },\n [`& .${filledInputClasses.input}`]: {\n padding: '7px 4px'\n },\n [`& .${autocompleteClasses.endAdornment}`]: {\n right: 9\n }\n },\n [`& .${filledInputClasses.root}.${inputBaseClasses.sizeSmall}`]: {\n paddingBottom: 1,\n [`& .${filledInputClasses.input}`]: {\n padding: '2.5px 4px'\n }\n },\n [`& .${inputBaseClasses.hiddenLabel}`]: {\n paddingTop: 8\n },\n [`& .${autocompleteClasses.input}`]: _extends({\n flexGrow: 1,\n textOverflow: 'ellipsis',\n opacity: 0\n }, ownerState.inputFocused && {\n opacity: 1\n })\n}));\nconst AutocompleteEndAdornment = styled('div', {\n name: 'MuiAutocomplete',\n slot: 'EndAdornment',\n overridesResolver: (props, styles) => styles.endAdornment\n})({\n // We use a position absolute to support wrapping tags.\n position: 'absolute',\n right: 0,\n top: 'calc(50% - 14px)' // Center vertically\n\n});\nconst AutocompleteClearIndicator = styled(IconButton, {\n name: 'MuiAutocomplete',\n slot: 'ClearIndicator',\n overridesResolver: (props, styles) => styles.clearIndicator\n})({\n marginRight: -2,\n padding: 4,\n visibility: 'hidden'\n});\nconst AutocompletePopupIndicator = styled(IconButton, {\n name: 'MuiAutocomplete',\n slot: 'PopupIndicator',\n overridesResolver: ({\n ownerState\n }, styles) => _extends({}, styles.popupIndicator, ownerState.popupOpen && styles.popupIndicatorOpen)\n})(({\n ownerState\n}) => _extends({\n padding: 2,\n marginRight: -2\n}, ownerState.popupOpen && {\n transform: 'rotate(180deg)'\n}));\nconst AutocompletePopper = styled(Popper, {\n name: 'MuiAutocomplete',\n slot: 'Popper',\n overridesResolver: (props, styles) => {\n const {\n ownerState\n } = props;\n return [{\n [`& .${autocompleteClasses.option}`]: styles.option\n }, styles.popper, ownerState.disablePortal && styles.popperDisablePortal];\n }\n})(({\n theme,\n ownerState\n}) => _extends({\n zIndex: (theme.vars || theme).zIndex.modal\n}, ownerState.disablePortal && {\n position: 'absolute'\n}));\nconst AutocompletePaper = styled(Paper, {\n name: 'MuiAutocomplete',\n slot: 'Paper',\n overridesResolver: (props, styles) => styles.paper\n})(({\n theme\n}) => _extends({}, theme.typography.body1, {\n overflow: 'auto'\n}));\nconst AutocompleteLoading = styled('div', {\n name: 'MuiAutocomplete',\n slot: 'Loading',\n overridesResolver: (props, styles) => styles.loading\n})(({\n theme\n}) => ({\n color: (theme.vars || theme).palette.text.secondary,\n padding: '14px 16px'\n}));\nconst AutocompleteNoOptions = styled('div', {\n name: 'MuiAutocomplete',\n slot: 'NoOptions',\n overridesResolver: (props, styles) => styles.noOptions\n})(({\n theme\n}) => ({\n color: (theme.vars || theme).palette.text.secondary,\n padding: '14px 16px'\n}));\nconst AutocompleteListbox = styled('div', {\n name: 'MuiAutocomplete',\n slot: 'Listbox',\n overridesResolver: (props, styles) => styles.listbox\n})(({\n theme\n}) => ({\n listStyle: 'none',\n margin: 0,\n padding: '8px 0',\n maxHeight: '40vh',\n overflow: 'auto',\n [`& .${autocompleteClasses.option}`]: {\n minHeight: 48,\n display: 'flex',\n overflow: 'hidden',\n justifyContent: 'flex-start',\n alignItems: 'center',\n cursor: 'pointer',\n paddingTop: 6,\n boxSizing: 'border-box',\n outline: '0',\n WebkitTapHighlightColor: 'transparent',\n paddingBottom: 6,\n paddingLeft: 16,\n paddingRight: 16,\n [theme.breakpoints.up('sm')]: {\n minHeight: 'auto'\n },\n [`&.${autocompleteClasses.focused}`]: {\n backgroundColor: (theme.vars || theme).palette.action.hover,\n // Reset on touch devices, it doesn't add specificity\n '@media (hover: none)': {\n backgroundColor: 'transparent'\n }\n },\n '&[aria-disabled=\"true\"]': {\n opacity: (theme.vars || theme).palette.action.disabledOpacity,\n pointerEvents: 'none'\n },\n [`&.${autocompleteClasses.focusVisible}`]: {\n backgroundColor: (theme.vars || theme).palette.action.focus\n },\n '&[aria-selected=\"true\"]': {\n backgroundColor: theme.vars ? `rgba(${theme.vars.palette.primary.mainChannel} / ${theme.vars.palette.action.selectedOpacity})` : alpha(theme.palette.primary.main, theme.palette.action.selectedOpacity),\n [`&.${autocompleteClasses.focused}`]: {\n backgroundColor: theme.vars ? `rgba(${theme.vars.palette.primary.mainChannel} / calc(${theme.vars.palette.action.selectedOpacity} + ${theme.vars.palette.action.hoverOpacity}))` : alpha(theme.palette.primary.main, theme.palette.action.selectedOpacity + theme.palette.action.hoverOpacity),\n // Reset on touch devices, it doesn't add specificity\n '@media (hover: none)': {\n backgroundColor: (theme.vars || theme).palette.action.selected\n }\n },\n [`&.${autocompleteClasses.focusVisible}`]: {\n backgroundColor: theme.vars ? `rgba(${theme.vars.palette.primary.mainChannel} / calc(${theme.vars.palette.action.selectedOpacity} + ${theme.vars.palette.action.focusOpacity}))` : alpha(theme.palette.primary.main, theme.palette.action.selectedOpacity + theme.palette.action.focusOpacity)\n }\n }\n }\n}));\nconst AutocompleteGroupLabel = styled(ListSubheader, {\n name: 'MuiAutocomplete',\n slot: 'GroupLabel',\n overridesResolver: (props, styles) => styles.groupLabel\n})(({\n theme\n}) => ({\n backgroundColor: (theme.vars || theme).palette.background.paper,\n top: -8\n}));\nconst AutocompleteGroupUl = styled('ul', {\n name: 'MuiAutocomplete',\n slot: 'GroupUl',\n overridesResolver: (props, styles) => styles.groupUl\n})({\n padding: 0,\n [`& .${autocompleteClasses.option}`]: {\n paddingLeft: 24\n }\n});\nexport { createFilterOptions };\nconst Autocomplete = /*#__PURE__*/React.forwardRef(function Autocomplete(inProps, ref) {\n var _componentsProps$clea, _componentsProps$popu, _componentsProps$popp, _componentsProps$pape;\n\n const props = useThemeProps({\n props: inProps,\n name: 'MuiAutocomplete'\n });\n /* eslint-disable @typescript-eslint/no-unused-vars */\n\n const {\n autoComplete = false,\n autoHighlight = false,\n autoSelect = false,\n blurOnSelect = false,\n ChipProps,\n className,\n clearIcon = _ClearIcon || (_ClearIcon = /*#__PURE__*/_jsx(ClearIcon, {\n fontSize: \"small\"\n })),\n clearOnBlur = !props.freeSolo,\n clearOnEscape = false,\n clearText = 'Clear',\n closeText = 'Close',\n componentsProps = {},\n defaultValue = props.multiple ? [] : null,\n disableClearable = false,\n disableCloseOnSelect = false,\n disabled = false,\n disabledItemsFocusable = false,\n disableListWrap = false,\n disablePortal = false,\n filterSelectedOptions = false,\n forcePopupIcon = 'auto',\n freeSolo = false,\n fullWidth = false,\n getLimitTagsText = more => `+${more}`,\n getOptionLabel = option => {\n var _option$label;\n\n return (_option$label = option.label) != null ? _option$label : option;\n },\n groupBy,\n handleHomeEndKeys = !props.freeSolo,\n includeInputInList = false,\n limitTags = -1,\n ListboxComponent = 'ul',\n ListboxProps,\n loading = false,\n loadingText = 'Loading…',\n multiple = false,\n noOptionsText = 'No options',\n openOnFocus = false,\n openText = 'Open',\n PaperComponent = Paper,\n PopperComponent = Popper,\n popupIcon = _ArrowDropDownIcon || (_ArrowDropDownIcon = /*#__PURE__*/_jsx(ArrowDropDownIcon, {})),\n readOnly = false,\n renderGroup: renderGroupProp,\n renderInput,\n renderOption: renderOptionProp,\n renderTags,\n selectOnFocus = !props.freeSolo,\n size = 'medium'\n } = props,\n other = _objectWithoutPropertiesLoose(props, _excluded);\n /* eslint-enable @typescript-eslint/no-unused-vars */\n\n\n const {\n getRootProps,\n getInputProps,\n getInputLabelProps,\n getPopupIndicatorProps,\n getClearProps,\n getTagProps,\n getListboxProps,\n getOptionProps,\n value,\n dirty,\n id,\n popupOpen,\n focused,\n focusedTag,\n anchorEl,\n setAnchorEl,\n inputValue,\n groupedOptions\n } = useAutocomplete(_extends({}, props, {\n componentName: 'Autocomplete'\n }));\n const hasClearIcon = !disableClearable && !disabled && dirty && !readOnly;\n const hasPopupIcon = (!freeSolo || forcePopupIcon === true) && forcePopupIcon !== false; // If you modify this, make sure to keep the `AutocompleteOwnerState` type in sync.\n\n const ownerState = _extends({}, props, {\n disablePortal,\n focused,\n fullWidth,\n hasClearIcon,\n hasPopupIcon,\n inputFocused: focusedTag === -1,\n popupOpen,\n size\n });\n\n const classes = useUtilityClasses(ownerState);\n let startAdornment;\n\n if (multiple && value.length > 0) {\n const getCustomizedTagProps = params => _extends({\n className: classes.tag,\n disabled\n }, getTagProps(params));\n\n if (renderTags) {\n startAdornment = renderTags(value, getCustomizedTagProps, ownerState);\n } else {\n startAdornment = value.map((option, index) => /*#__PURE__*/_jsx(Chip, _extends({\n label: getOptionLabel(option),\n size: size\n }, getCustomizedTagProps({\n index\n }), ChipProps)));\n }\n }\n\n if (limitTags > -1 && Array.isArray(startAdornment)) {\n const more = startAdornment.length - limitTags;\n\n if (!focused && more > 0) {\n startAdornment = startAdornment.splice(0, limitTags);\n startAdornment.push( /*#__PURE__*/_jsx(\"span\", {\n className: classes.tag,\n children: getLimitTagsText(more)\n }, startAdornment.length));\n }\n }\n\n const defaultRenderGroup = params => /*#__PURE__*/_jsxs(\"li\", {\n children: [/*#__PURE__*/_jsx(AutocompleteGroupLabel, {\n className: classes.groupLabel,\n ownerState: ownerState,\n component: \"div\",\n children: params.group\n }), /*#__PURE__*/_jsx(AutocompleteGroupUl, {\n className: classes.groupUl,\n ownerState: ownerState,\n children: params.children\n })]\n }, params.key);\n\n const renderGroup = renderGroupProp || defaultRenderGroup;\n\n const defaultRenderOption = (props2, option) => /*#__PURE__*/_jsx(\"li\", _extends({}, props2, {\n children: getOptionLabel(option)\n }));\n\n const renderOption = renderOptionProp || defaultRenderOption;\n\n const renderListOption = (option, index) => {\n const optionProps = getOptionProps({\n option,\n index\n });\n return renderOption(_extends({}, optionProps, {\n className: classes.option\n }), option, {\n selected: optionProps['aria-selected'],\n inputValue\n });\n };\n\n return /*#__PURE__*/_jsxs(React.Fragment, {\n children: [/*#__PURE__*/_jsx(AutocompleteRoot, _extends({\n ref: ref,\n className: clsx(classes.root, className),\n ownerState: ownerState\n }, getRootProps(other), {\n children: renderInput({\n id,\n disabled,\n fullWidth: true,\n size: size === 'small' ? 'small' : undefined,\n InputLabelProps: getInputLabelProps(),\n InputProps: _extends({\n ref: setAnchorEl,\n className: classes.inputRoot,\n startAdornment\n }, (hasClearIcon || hasPopupIcon) && {\n endAdornment: /*#__PURE__*/_jsxs(AutocompleteEndAdornment, {\n className: classes.endAdornment,\n ownerState: ownerState,\n children: [hasClearIcon ? /*#__PURE__*/_jsx(AutocompleteClearIndicator, _extends({}, getClearProps(), {\n \"aria-label\": clearText,\n title: clearText,\n ownerState: ownerState\n }, componentsProps.clearIndicator, {\n className: clsx(classes.clearIndicator, (_componentsProps$clea = componentsProps.clearIndicator) == null ? void 0 : _componentsProps$clea.className),\n children: clearIcon\n })) : null, hasPopupIcon ? /*#__PURE__*/_jsx(AutocompletePopupIndicator, _extends({}, getPopupIndicatorProps(), {\n disabled: disabled,\n \"aria-label\": popupOpen ? closeText : openText,\n title: popupOpen ? closeText : openText,\n ownerState: ownerState\n }, componentsProps.popupIndicator, {\n className: clsx(classes.popupIndicator, (_componentsProps$popu = componentsProps.popupIndicator) == null ? void 0 : _componentsProps$popu.className),\n children: popupIcon\n })) : null]\n })\n }),\n inputProps: _extends({\n className: classes.input,\n disabled,\n readOnly\n }, getInputProps())\n })\n })), anchorEl ? /*#__PURE__*/_jsx(AutocompletePopper, _extends({\n as: PopperComponent,\n disablePortal: disablePortal,\n style: {\n width: anchorEl ? anchorEl.clientWidth : null\n },\n ownerState: ownerState,\n role: \"presentation\",\n anchorEl: anchorEl,\n open: popupOpen\n }, componentsProps.popper, {\n className: clsx(classes.popper, (_componentsProps$popp = componentsProps.popper) == null ? void 0 : _componentsProps$popp.className),\n children: /*#__PURE__*/_jsxs(AutocompletePaper, _extends({\n ownerState: ownerState,\n as: PaperComponent\n }, componentsProps.paper, {\n className: clsx(classes.paper, (_componentsProps$pape = componentsProps.paper) == null ? void 0 : _componentsProps$pape.className),\n children: [loading && groupedOptions.length === 0 ? /*#__PURE__*/_jsx(AutocompleteLoading, {\n className: classes.loading,\n ownerState: ownerState,\n children: loadingText\n }) : null, groupedOptions.length === 0 && !freeSolo && !loading ? /*#__PURE__*/_jsx(AutocompleteNoOptions, {\n className: classes.noOptions,\n ownerState: ownerState,\n role: \"presentation\",\n onMouseDown: event => {\n // Prevent input blur when interacting with the \"no options\" content\n event.preventDefault();\n },\n children: noOptionsText\n }) : null, groupedOptions.length > 0 ? /*#__PURE__*/_jsx(AutocompleteListbox, _extends({\n as: ListboxComponent,\n className: classes.listbox,\n ownerState: ownerState\n }, getListboxProps(), ListboxProps, {\n children: groupedOptions.map((option, index) => {\n if (groupBy) {\n return renderGroup({\n key: option.key,\n group: option.group,\n children: option.options.map((option2, index2) => renderListOption(option2, option.index + index2))\n });\n }\n\n return renderListOption(option, index);\n })\n })) : null]\n }))\n })) : null]\n });\n});\nprocess.env.NODE_ENV !== \"production\" ? Autocomplete.propTypes\n/* remove-proptypes */\n= {\n // ----------------------------- Warning --------------------------------\n // | These PropTypes are generated from the TypeScript type definitions |\n // | To update them edit the d.ts file and run \"yarn proptypes\" |\n // ----------------------------------------------------------------------\n\n /**\n * If `true`, the portion of the selected suggestion that has not been typed by the user,\n * known as the completion string, appears inline after the input cursor in the textbox.\n * The inline completion string is visually highlighted and has a selected state.\n * @default false\n */\n autoComplete: PropTypes.bool,\n\n /**\n * If `true`, the first option is automatically highlighted.\n * @default false\n */\n autoHighlight: PropTypes.bool,\n\n /**\n * If `true`, the selected option becomes the value of the input\n * when the Autocomplete loses focus unless the user chooses\n * a different option or changes the character string in the input.\n * @default false\n */\n autoSelect: PropTypes.bool,\n\n /**\n * Control if the input should be blurred when an option is selected:\n *\n * - `false` the input is not blurred.\n * - `true` the input is always blurred.\n * - `touch` the input is blurred after a touch event.\n * - `mouse` the input is blurred after a mouse event.\n * @default false\n */\n blurOnSelect: PropTypes.oneOfType([PropTypes.oneOf(['mouse', 'touch']), PropTypes.bool]),\n\n /**\n * Props applied to the [`Chip`](/material-ui/api/chip/) element.\n */\n ChipProps: PropTypes.object,\n\n /**\n * Override or extend the styles applied to the component.\n */\n classes: PropTypes.object,\n\n /**\n * @ignore\n */\n className: PropTypes.string,\n\n /**\n * The icon to display in place of the default clear icon.\n * @default <ClearIcon fontSize=\"small\" />\n */\n clearIcon: PropTypes.node,\n\n /**\n * If `true`, the input's text is cleared on blur if no value is selected.\n *\n * Set to `true` if you want to help the user enter a new value.\n * Set to `false` if you want to help the user resume their search.\n * @default !props.freeSolo\n */\n clearOnBlur: PropTypes.bool,\n\n /**\n * If `true`, clear all values when the user presses escape and the popup is closed.\n * @default false\n */\n clearOnEscape: PropTypes.bool,\n\n /**\n * Override the default text for the *clear* icon button.\n *\n * For localization purposes, you can use the provided [translations](/material-ui/guides/localization/).\n * @default 'Clear'\n */\n clearText: PropTypes.string,\n\n /**\n * Override the default text for the *close popup* icon button.\n *\n * For localization purposes, you can use the provided [translations](/material-ui/guides/localization/).\n * @default 'Close'\n */\n closeText: PropTypes.string,\n\n /**\n * The props used for each slot inside.\n * @default {}\n */\n componentsProps: PropTypes.shape({\n clearIndicator: PropTypes.object,\n paper: PropTypes.object,\n popper: PropTypes.object,\n popupIndicator: PropTypes.object\n }),\n\n /**\n * The default value. Use when the component is not controlled.\n * @default props.multiple ? [] : null\n */\n defaultValue: chainPropTypes(PropTypes.any, props => {\n if (props.multiple && props.defaultValue !== undefined && !Array.isArray(props.defaultValue)) {\n return new Error(['MUI: The Autocomplete expects the `defaultValue` prop to be an array when `multiple={true}` or undefined.', `However, ${props.defaultValue} was provided.`].join('\\n'));\n }\n\n return null;\n }),\n\n /**\n * If `true`, the input can't be cleared.\n * @default false\n */\n disableClearable: PropTypes.bool,\n\n /**\n * If `true`, the popup won't close when a value is selected.\n * @default false\n */\n disableCloseOnSelect: PropTypes.bool,\n\n /**\n * If `true`, the component is disabled.\n * @default false\n */\n disabled: PropTypes.bool,\n\n /**\n * If `true`, will allow focus on disabled items.\n * @default false\n */\n disabledItemsFocusable: PropTypes.bool,\n\n /**\n * If `true`, the list box in the popup will not wrap focus.\n * @default false\n */\n disableListWrap: PropTypes.bool,\n\n /**\n * If `true`, the `Popper` content will be under the DOM hierarchy of the parent component.\n * @default false\n */\n disablePortal: PropTypes.bool,\n\n /**\n * A function that determines the filtered options to be rendered on search.\n *\n * @param {T[]} options The options to render.\n * @param {object} state The state of the component.\n * @returns {T[]}\n */\n filterOptions: PropTypes.func,\n\n /**\n * If `true`, hide the selected options from the list box.\n * @default false\n */\n filterSelectedOptions: PropTypes.bool,\n\n /**\n * Force the visibility display of the popup icon.\n * @default 'auto'\n */\n forcePopupIcon: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.bool]),\n\n /**\n * If `true`, the Autocomplete is free solo, meaning that the user input is not bound to provided options.\n * @default false\n */\n freeSolo: PropTypes.bool,\n\n /**\n * If `true`, the input will take up the full width of its container.\n * @default false\n */\n fullWidth: PropTypes.bool,\n\n /**\n * The label to display when the tags are truncated (`limitTags`).\n *\n * @param {number} more The number of truncated tags.\n * @returns {ReactNode}\n * @default (more) => `+${more}`\n */\n getLimitTagsText: PropTypes.func,\n\n /**\n * Used to determine the disabled state for a given option.\n *\n * @param {T} option The option to test.\n * @returns {boolean}\n */\n getOptionDisabled: PropTypes.func,\n\n /**\n * Used to determine the string value for a given option.\n * It's used to fill the input (and the list box options if `renderOption` is not provided).\n *\n * If used in free solo mode, it must accept both the type of the options and a string.\n *\n * @param {T} option\n * @returns {string}\n * @default (option) => option.label ?? option\n */\n getOptionLabel: PropTypes.func,\n\n /**\n * If provided, the options will be grouped under the returned string.\n * The groupBy value is also used as the text for group headings when `renderGroup` is not provided.\n *\n * @param {T} options The options to group.\n * @returns {string}\n */\n groupBy: PropTypes.func,\n\n /**\n * If `true`, the component handles the \"Home\" and \"End\" keys when the popup is open.\n * It should move focus to the first option and last option, respectively.\n * @default !props.freeSolo\n */\n handleHomeEndKeys: PropTypes.bool,\n\n /**\n * This prop is used to help implement the accessibility logic.\n * If you don't provide an id it will fall back to a randomly generated one.\n */\n id: PropTypes.string,\n\n /**\n * If `true`, the highlight can move to the input.\n * @default false\n */\n includeInputInList: PropTypes.bool,\n\n /**\n * The input value.\n */\n inputValue: PropTypes.string,\n\n /**\n * Used to determine if the option represents the given value.\n * Uses strict equality by default.\n * ⚠️ Both arguments need to be handled, an option can only match with one value.\n *\n * @param {T} option The option to test.\n * @param {T} value The value to test against.\n * @returns {boolean}\n */\n isOptionEqualToValue: PropTypes.func,\n\n /**\n * The maximum number of tags that will be visible when not focused.\n * Set `-1` to disable the limit.\n * @default -1\n */\n limitTags: integerPropType,\n\n /**\n * The component used to render the listbox.\n * @default 'ul'\n */\n ListboxComponent: PropTypes.elementType,\n\n /**\n * Props applied to the Listbox element.\n */\n ListboxProps: PropTypes.object,\n\n /**\n * If `true`, the component is in a loading state.\n * This shows the `loadingText` in place of suggestions (only if there are no suggestions to show, e.g. `options` are empty).\n * @default false\n */\n loading: PropTypes.bool,\n\n /**\n * Text to display when in a loading state.\n *\n * For localization purposes, you can use the provided [translations](/material-ui/guides/localization/).\n * @default 'Loading…'\n */\n loadingText: PropTypes.node,\n\n /**\n * If `true`, `value` must be an array and the menu will support multiple selections.\n * @default false\n */\n multiple: PropTypes.bool,\n\n /**\n * Text to display when there are no options.\n *\n * For localization purposes, you can use the provided [translations](/material-ui/guides/localization/).\n * @default 'No options'\n */\n noOptionsText: PropTypes.node,\n\n /**\n * Callback fired when the value changes.\n *\n * @param {React.SyntheticEvent} event The event source of the callback.\n * @param {T|T[]} value The new value of the component.\n * @param {string} reason One of \"createOption\", \"selectOption\", \"removeOption\", \"blur\" or \"clear\".\n * @param {string} [details]\n */\n onChange: PropTypes.func,\n\n /**\n * Callback fired when the popup requests to be closed.\n * Use in controlled mode (see open).\n *\n * @param {React.SyntheticEvent} event The event source of the callback.\n * @param {string} reason Can be: `\"toggleInput\"`, `\"escape\"`, `\"selectOption\"`, `\"removeOption\"`, `\"blur\"`.\n */\n onClose: PropTypes.func,\n\n /**\n * Callback fired when the highlight option changes.\n *\n * @param {React.SyntheticEvent} event The event source of the callback.\n * @param {T} option The highlighted option.\n * @param {string} reason Can be: `\"keyboard\"`, `\"auto\"`, `\"mouse\"`.\n */\n onHighlightChange: PropTypes.func,\n\n /**\n * Callback fired when the input value changes.\n *\n * @param {React.SyntheticEvent} event The event source of the callback.\n * @param {string} value The new value of the text input.\n * @param {string} reason Can be: `\"input\"` (user input), `\"reset\"` (programmatic change), `\"clear\"`.\n */\n onInputChange: PropTypes.func,\n\n /**\n * Callback fired when the popup requests to be opened.\n * Use in controlled mode (see open).\n *\n * @param {React.SyntheticEvent} event The event source of the callback.\n */\n onOpen: PropTypes.func,\n\n /**\n * If `true`, the component is shown.\n */\n open: PropTypes.bool,\n\n /**\n * If `true`, the popup will open on input focus.\n * @default false\n */\n openOnFocus: PropTypes.bool,\n\n /**\n * Override the default text for the *open popup* icon button.\n *\n * For localization purposes, you can use the provided [translations](/material-ui/guides/localization/).\n * @default 'Open'\n */\n openText: PropTypes.string,\n\n /**\n * Array of options.\n */\n options: PropTypes.array.isRequired,\n\n /**\n * The component used to render the body of the popup.\n * @default Paper\n */\n PaperComponent: PropTypes.elementType,\n\n /**\n * The component used to position the popup.\n * @default Popper\n */\n PopperComponent: PropTypes.elementType,\n\n /**\n * The icon to display in place of the default popup icon.\n * @default <ArrowDropDownIcon />\n */\n popupIcon: PropTypes.node,\n\n /**\n * If `true`, the component becomes readonly. It is also supported for multiple tags where the tag cannot be deleted.\n * @default false\n */\n readOnly: PropTypes.bool,\n\n /**\n * Render the group.\n *\n * @param {AutocompleteRenderGroupParams} params The group to render.\n * @returns {ReactNode}\n */\n renderGroup: PropTypes.func,\n\n /**\n * Render the input.\n *\n * @param {object} params\n * @returns {ReactNode}\n */\n renderInput: PropTypes.func.isRequired,\n\n /**\n * Render the option, use `getOptionLabel` by default.\n *\n * @param {object} props The props to apply on the li element.\n * @param {T} option The option to render.\n * @param {object} state The state of the component.\n * @returns {ReactNode}\n */\n renderOption: PropTypes.func,\n\n /**\n * Render the selected value.\n *\n * @param {T[]} value The `value` provided to the component.\n * @param {function} getTagProps A tag props getter.\n * @param {object} ownerState The state of the Autocomplete component.\n * @returns {ReactNode}\n */\n renderTags: PropTypes.func,\n\n /**\n * If `true`, the input's text is selected on focus.\n * It helps the user clear the selected value.\n * @default !props.freeSolo\n */\n selectOnFocus: PropTypes.bool,\n\n /**\n * The size of the component.\n * @default 'medium'\n */\n size: PropTypes\n /* @typescript-to-proptypes-ignore */\n .oneOfType([PropTypes.oneOf(['small', 'medium']), PropTypes.string]),\n\n /**\n * The system prop that allows defining system overrides as well as additional CSS styles.\n */\n sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),\n\n /**\n * The value of the autocomplete.\n *\n * The value must have reference equality with the option in order to be selected.\n * You can customize the equality behavior with the `isOptionEqualToValue` prop.\n */\n value: chainPropTypes(PropTypes.any, props => {\n if (props.multiple && props.value !== undefined && !Array.isArray(props.value)) {\n return new Error(['MUI: The Autocomplete expects the `value` prop to be an array when `multiple={true}` or undefined.', `However, ${props.value} was provided.`].join('\\n'));\n }\n\n return null;\n })\n} : void 0;\nexport default Autocomplete;","import { useRef, MutableRefObject, useEffect, useState, FocusEvent } from \"react\";\nimport React from \"react\";\nimport { DropListWithIconItem } from \"@cede/types\";\nimport { ValidationDropListProps } from \"./types\";\nimport {\n useTheme,\n Autocomplete,\n autocompleteClasses,\n TextField,\n Typography,\n AutocompleteRenderGroupParams,\n AutocompleteRenderInputParams,\n Box,\n Skeleton,\n} from \"@mui/material\";\n\nexport const ValidationDropList = (props: ValidationDropListProps) => {\n const theme = useTheme();\n const {\n selectTitle,\n items,\n renderItem,\n placeholder,\n validate,\n value,\n setValue,\n id,\n noOptionsText,\n sx,\n disableOptions,\n onBlur,\n onFocus,\n isLoading,\n timeout = 0,\n } = props;\n\n const SKELETON_IDENTIFIER = \"skeleton\";\n const [validationStatus, setValidationStatus] = React.useState<\"error\" | \"success\" | \"warning\">(\"success\");\n const [helperText, setHelperText] = useState<string>(\"\");\n // We start checking the input validity once the user start typing or lost focus\n const [firstLostFocusOrType, setFirstLostFocusOrType] = useState(false);\n const timeoutId = useRef<NodeJS.Timeout>();\n\n useEffect(() => {\n if (!firstLostFocusOrType) return;\n const validation = validate(value);\n if (!validation) return;\n setValidationStatus(validation.color as \"error\" | \"success\" | \"warning\");\n setHelperText(validation.message ?? \"\");\n }, [value, firstLostFocusOrType, items]);\n\n const inputRef = useRef<HTMLInputElement>() as MutableRefObject<HTMLInputElement>;\n\n const [open, setOpen] = React.useState(false);\n\n const toggleModal = (forceState: boolean) => {\n const currentModalState = open;\n clearTimeout(timeoutId.current);\n\n const manageModalState = () => {\n setOpen(forceState === undefined ? (prev) => !prev : forceState);\n };\n\n if (currentModalState === forceState) return;\n if (timeout && !currentModalState) {\n timeoutId.current = setTimeout(manageModalState, timeout);\n return;\n }\n\n manageModalState();\n };\n\n const handleInputChange = (_event: unknown, newInputValue: string) => {\n setValue(newInputValue);\n if (newInputValue) setFirstLostFocusOrType(true);\n };\n\n // All options\n const options = items\n .map((item, i) => {\n return {\n label: `${item.label}`,\n img: \"\",\n type: \"item\",\n value: item.value,\n name: item.name,\n disabled: validate(item.value)?.color === \"error\",\n testId: `droplist-option-${i}`,\n };\n })\n .sort((a, b) => {\n if (a.disabled === b.disabled) return -(b.label[0] || \"\").localeCompare(a.label[0] || \"\");\n else if (a.disabled) return 1;\n else return -1;\n });\n\n // Loader\n if (isLoading) {\n options.push({\n label: \"\",\n img: \"\",\n type: SKELETON_IDENTIFIER,\n value: \"\",\n name: \"\",\n disabled: true,\n testId: `option-${SKELETON_IDENTIFIER}`,\n });\n }\n\n // Render the groups\n const renderGroup = (params: AutocompleteRenderGroupParams) => {\n return (\n <>\n <Typography\n variant=\"body2\"\n sx={{\n paddingX: theme.custom.gutterMargin,\n paddingY: theme.custom.smallGutterMargin,\n backgroundColor: theme.palette.cedePaperDarkBackgroundColor,\n color: theme.palette.text.primary,\n textAlign: \"left\",\n }}\n >\n {params.group}\n </Typography>\n {params.children}\n <Box\n width={\"100%\"}\n sx={{\n backgroundColor: theme.palette.cedePaperDarkBackgroundColor,\n }}\n >\n {props.bottomElement}\n </Box>\n </>\n );\n };\n // Popup icon\n const popupIcon = (\n <svg\n width=\"18\"\n height=\"20\"\n viewBox=\"0 0 18 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n data-testid={\"popup-icon\"}\n >\n <path\n d=\"M16.5 0.25H3.75C2.95435 0.25 2.19129 0.56607 1.62868 1.12868C1.06607 1.69129 0.75 2.45435 0.75 3.25V19C0.75 19.1989 0.829018 19.3897 0.96967 19.5303C1.11032 19.671 1.30109 19.75 1.5 19.75H15C15.1989 19.75 15.3897 19.671 15.5303 19.5303C15.671 19.3897 15.75 19.1989 15.75 19C15.75 18.8011 15.671 18.6103 15.5303 18.4697C15.3897 18.329 15.1989 18.25 15 18.25H2.25C2.25 17.8522 2.40804 17.4706 2.68934 17.1893C2.97064 16.908 3.35218 16.75 3.75 16.75H16.5C16.6989 16.75 16.8897 16.671 17.0303 16.5303C17.171 16.3897 17.25 16.1989 17.25 16V1C17.25 0.801088 17.171 0.610322 17.0303 0.46967C16.8897 0.329018 16.6989 0.25 16.5 0.25ZM8.25 1.75H12.75V8.5L10.9491 7.15C10.8192 7.05263 10.6613 7 10.4991 7C10.3368 7 10.1789 7.05263 10.0491 7.15L8.25 8.5V1.75ZM15.75 15.25H3.75C3.22326 15.2493 2.70572 15.388 2.25 15.6522V3.25C2.25 2.85218 2.40804 2.47064 2.68934 2.18934C2.97064 1.90804 3.35218 1.75 3.75 1.75H6.75V10C6.75 10.1393 6.78879 10.2758 6.86201 10.3943C6.93524 10.5128 7.04001 10.6085 7.16459 10.6708C7.28917 10.7331 7.42863 10.7595 7.56735 10.747C7.70608 10.7345 7.83857 10.6836 7.95 10.6L10.5 8.6875L13.0509 10.6C13.1805 10.6972 13.338 10.7498 13.5 10.75C13.6989 10.75 13.8897 10.671 14.0303 10.5303C14.171 10.3897 14.25 10.1989 14.25 10V1.75H15.75V15.25Z\"\n fill=\"white\"\n fillOpacity=\"0.7\"\n />\n </svg>\n );\n // Render the input\n const renderInput = (params: AutocompleteRenderInputParams) => (\n <TextField\n error={validationStatus && validationStatus === \"error\"}\n helperText={validationStatus && validationStatus === \"error\" ? helperText : \"\"}\n data-testid={`${id ?? \"\"}-select-textfield`}\n {...params}\n inputRef={inputRef}\n placeholder={placeholder}\n InputProps={{\n ...params.InputProps,\n }}\n />\n );\n\n const renderOption = (_props: unknown, option: DropListWithIconItem) => {\n return option.type === SKELETON_IDENTIFIER ? (\n <Skeleton variant=\"text\" sx={{ flex: 1, marginX: theme.custom.smallGutterMargin, height: \"50px\" }} />\n ) : (\n renderItem(option, () => {\n // On item click\n toggleModal(false);\n inputRef.current?.blur();\n })\n );\n };\n\n return (\n <Autocomplete\n id={id}\n data-testid={id}\n sx={{\n \"flex\": 1,\n // Disable popup icon rotation\n [`& .${autocompleteClasses.popupIndicator}`]: {\n transform: \"none\",\n paddingX: theme.custom.smallGutterMargin,\n },\n \"& .MuiOutlinedInput-root .MuiOutlinedInput-notchedOutline\": {\n borderRadius: theme.custom.inputRadius.default,\n },\n ...sx,\n }}\n options={options}\n groupBy={() => selectTitle}\n noOptionsText={noOptionsText}\n // Disable the popup if there are no options\n freeSolo={!!disableOptions}\n renderGroup={renderGroup}\n getOptionDisabled={(option) => validate(option.value).color === \"error\"}\n popupIcon={popupIcon}\n disablePortal={true}\n renderOption={renderOption}\n ListboxProps={{\n style: {\n padding: 0,\n },\n }}\n open={open}\n clearOnBlur={false}\n inputValue={value}\n onInputChange={handleInputChange}\n renderInput={renderInput}\n onBlur={(event) => {\n setFirstLostFocusOrType(true);\n toggleModal(false);\n onBlur?.(event as FocusEvent<HTMLInputElement | HTMLTextAreaElement, Element>);\n }}\n onInput={() => toggleModal(true)}\n onFocus={(event) => {\n toggleModal(true);\n onFocus?.(event as FocusEvent<HTMLInputElement | HTMLTextAreaElement, Element>);\n }}\n />\n );\n};\n","import { TextField } from \"@mui/material\";\nimport { useImperativeHandle } from \"react\";\nimport { ValidationTextFieldProps } from \"./types\";\nimport { useValidation } from \"./useValidation\";\n\nexport const ValidationTextField = ({\n validate,\n validateOnMount = true,\n elementRef,\n ...props\n}: ValidationTextFieldProps) => {\n const { validationStatus, triggerValidate, cancelValidation } = useValidation({\n validate,\n value: props.value,\n validateOnMount,\n });\n\n useImperativeHandle(elementRef, () => ({\n validate: triggerValidate,\n cancelValidation,\n }));\n\n return (\n <TextField\n {...props}\n error={validationStatus ? validationStatus.color === \"error\" : false}\n helperText={validationStatus && validationStatus.color === \"error\" ? validationStatus.message : \"\"}\n InputLabelProps={{ id: `${props.id || \"\"}-label` }}\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n sx={(theme) => ({\n ...props.sx,\n \".MuiFormLabel-root\": {\n color: validationStatus?.color === \"error\" ? theme.palette.error.main : theme.palette.action.disabled,\n },\n \".Mui-focused\": {\n color: validationStatus?.color === \"error\" ? theme.palette.error.main : theme.palette.primary.main,\n },\n \".Mui-focused .MuiOutlinedInput-input\": {\n color: theme.palette.text.primary,\n },\n \".MuiInputBase-root\": {\n borderRadius: theme.custom.inputRadius.default,\n marginBottom: \"0\",\n position: \"relative\",\n },\n \".MuiFormHelperText-root\": {\n position: \"absolute\",\n top: \"100%\",\n },\n })}\n />\n );\n};\n","import { useImperativeHandle } from \"react\";\nimport { TextFieldWithIcon } from \"../TextFieldWithIcon\";\nimport { ValidationTextFieldWithIconProps } from \"./types\";\nimport { useValidation } from \"./useValidation\";\nimport { Typography, useTheme } from \"@mui/material\";\n\nexport const ValidationTextFieldWithIcon = ({\n validate,\n validateOnMount = true,\n elementRef,\n subCaption = null,\n ...props\n}: ValidationTextFieldWithIconProps) => {\n const { validationStatus, triggerValidate, cancelValidation } = useValidation({\n validate,\n value: props.value,\n validateOnMount,\n });\n\n const theme = useTheme();\n\n useImperativeHandle(elementRef, () => ({\n validate: triggerValidate,\n cancelValidation,\n }));\n\n return (\n <TextFieldWithIcon\n {...props}\n sx={{ position: \"relative\", ...(props?.sx || {}) }}\n error={validationStatus?.color === \"error\"}\n >\n <>\n <Typography\n data-testid={`${props.id || \"\"}-helper-text`}\n color={\"error\"}\n sx={{\n position: \"absolute\",\n top: \"110%\",\n fontSize: theme.typography.caption.fontSize,\n paddingLeft: theme.custom.gutterMargin,\n ...props.helperSx,\n }}\n >\n {validationStatus && validationStatus.color === \"error\" ? validationStatus.message : \"\"}\n </Typography>\n {subCaption}\n </>\n </TextFieldWithIcon>\n );\n};\n","import { useEffect, useRef, useState } from \"react\";\nimport { ValidateFunctionReturnValue } from \"../../types/utils\";\nimport { ValidationProps } from \"./types\";\n\nexport const useValidation = ({ validate, value, validateOnMount = true }: ValidationProps) => {\n const [validationStatus, setValidationStatus] = useState<ValidateFunctionReturnValue>();\n const allowValidationRef = useRef<boolean>(validateOnMount);\n\n const _validate = () => {\n setValidationStatus(validate(value || \"\"));\n };\n\n useEffect(() => {\n if (!allowValidationRef.current) {\n allowValidationRef.current = true;\n return;\n }\n _validate();\n }, [value]);\n\n const cancelValidation = () => {\n setValidationStatus(undefined);\n };\n\n return { validationStatus, triggerValidate: _validate, cancelValidation };\n};\n","import { CedeEvents, RequestArguments, UntrustedApi, UntrustedApiMethods, UntrustedApiReturn } from \"@cede/types\";\nimport { InpageProvider } from \"./InpageProvider\";\n\nexport enum RequestVersion {\n V1 = 1,\n V2,\n V3,\n}\n\nconst latestVersion = {\n connect: RequestVersion.V2 as const,\n disconnect: RequestVersion.V1 as const,\n vaults: RequestVersion.V1 as const,\n vaultAccounts: RequestVersion.V1 as const,\n supportedExchanges: RequestVersion.V1 as const,\n getWithdrawalById: RequestVersion.V2 as const,\n transactions: RequestVersion.V2 as const,\n balances: RequestVersion.V3 as const,\n nfts: RequestVersion.V2 as const,\n openOrders: RequestVersion.V2 as const,\n retrieveOrder: RequestVersion.V2 as const,\n editOrder: RequestVersion.V2 as const,\n getMinAmounts: RequestVersion.V2 as const,\n createOrder: RequestVersion.V2 as const,\n prepareOrder: RequestVersion.V2 as const,\n getStandardizedNetworks: RequestVersion.V1 as const,\n getMarketPairs: RequestVersion.V2 as const,\n getMarketRate: RequestVersion.V2 as const,\n tickers: RequestVersion.V1 as const,\n tokens: RequestVersion.V1 as const,\n activeVault: RequestVersion.V1 as const,\n depositableTokens: RequestVersion.V2 as const,\n getNetworks: RequestVersion.V2 as const,\n deposit: RequestVersion.V2 as const,\n cancelOrder: RequestVersion.V2 as const,\n addCex: RequestVersion.V2 as const,\n withdrawToDefi: RequestVersion.V2 as const,\n withdrawableTokens: RequestVersion.V2 as const,\n getPrices: RequestVersion.V1 as const,\n prepareWithdrawal: RequestVersion.V2 as const,\n getSettings: RequestVersion.V1 as const,\n getEnvironment: RequestVersion.V1 as const,\n getAddressBook: RequestVersion.V1 as const,\n checkAddressIsWhitelisted: RequestVersion.V1 as const,\n searchTransaction: RequestVersion.V1 as const,\n getWidgetBundleUrl: RequestVersion.V1 as const,\n getWhitelistedAddresses: RequestVersion.V1 as const,\n getTradePath: RequestVersion.V1 as const,\n getSupportedTokens: RequestVersion.V1 as const,\n isWalletTypeTotupNeeded: RequestVersion.V1 as const,\n trackLink: RequestVersion.V1 as const,\n openPageWithHelper: RequestVersion.V1 as const,\n untrackLink: RequestVersion.V1 as const,\n getConfig: RequestVersion.V1 as const,\n fetchPartners: RequestVersion.V1 as const,\n getCurrentAppTab: RequestVersion.V1 as const,\n focusTab: RequestVersion.V1 as const,\n getUserId: RequestVersion.V1 as const,\n getTradePathBySupportedTokens: RequestVersion.V1 as const,\n verifyKYC: RequestVersion.V1 as const,\n getTokenNamesAndSymbols: RequestVersion.V1 as const,\n getDiscordInvitation: RequestVersion.V1 as const,\n hasJoinedDiscord: RequestVersion.V1 as const,\n getOHLCV: RequestVersion.V1 as const,\n openTab: RequestVersion.V1 as const,\n setByPassApprovalTradeHub: RequestVersion.V1 as const,\n canByPassApprovalTradeHub: RequestVersion.V1 as const,\n getAppVersion: RequestVersion.V1 as const,\n};\n\nexport type LatestVersion = typeof latestVersion;\n\ntype TypeGuard = {\n [key in keyof UntrustedApi]: LatestVersion[key];\n};\n\nexport class CedeProvider {\n private inpageProvider: InpageProvider;\n\n constructor(inpageProvider: InpageProvider) {\n this.inpageProvider = inpageProvider;\n }\n\n public request = async <T extends UntrustedApiMethods>(args: RequestArguments<T>): Promise<UntrustedApiReturn[T]> => {\n const guardedLatestVersion: TypeGuard = latestVersion;\n const version = guardedLatestVersion[args.method] ?? -1; // -1 if the method is non existent;\n\n const anyArgs = args as any; // eslint-disable-line @typescript-eslint/no-explicit-any\n // add version to params\n if (anyArgs.params) {\n anyArgs.params = { ...anyArgs.params, version };\n } else {\n anyArgs.params = { version };\n }\n\n return this.inpageProvider.request(anyArgs) as Promise<UntrustedApiReturn[T]>;\n };\n\n on = (event: CedeEvents, listener: (...args: unknown[]) => void): this => {\n this.inpageProvider.on(event, listener);\n return this;\n };\n\n once = (event: CedeEvents, callback: (...args: unknown[]) => void): this => {\n this.inpageProvider.on(event, callback);\n return this;\n };\n\n off = (event: CedeEvents, callback: (...args: unknown[]) => void): this => {\n this.inpageProvider.off(event, callback);\n return this;\n };\n\n removeListener = (event: CedeEvents, callback: (...args: unknown[]) => void): this => {\n this.inpageProvider.removeListener(event, callback);\n return this;\n };\n\n removeAllListeners = (event?: CedeEvents): this => {\n this.inpageProvider.removeAllListeners(event);\n return this;\n };\n\n emit = (event: CedeEvents, ...args: unknown[]): boolean => {\n return this.inpageProvider.emit(event, ...args);\n };\n\n getVaultPreviews = () => {\n return this.inpageProvider.getVaultPreviews();\n };\n\n getIsUnlocked = () => {\n return this.inpageProvider.getIsUnlocked();\n };\n\n getIsConnected = () => {\n return this.inpageProvider.getIsConnected();\n };\n\n getActiveVault = () => {\n return this.inpageProvider.getActiveVault();\n };\n}\n","import { CedeProvider } from \"./providers/CedeProvider\";\nimport { InpageProvider } from \"./providers/InpageProvider\";\n\ninterface Window {\n cede?: CedeProvider;\n}\n\nexport function detectCedeProvider(timeout = 1500): Promise<CedeProvider | null> {\n let handled = false;\n\n return new Promise((resolve) => {\n if ((window as Window).cede) {\n handleConnection();\n } else {\n window.addEventListener(\"cede#initialized\", handleConnection, {\n once: true,\n });\n\n setTimeout(() => {\n handleConnection();\n }, timeout);\n }\n\n function handleConnection() {\n if (handled) {\n const inpageProvider = (window as Window).cede as unknown as InpageProvider;\n const cedeProvider = new CedeProvider(inpageProvider);\n resolve(cedeProvider);\n return;\n }\n handled = true;\n\n window.removeEventListener(\"cede#initialized\", handleConnection);\n\n const { cede } = window as Window;\n\n if (cede) {\n const inpageProvider = (window as Window).cede as unknown as InpageProvider;\n const cedeProvider = new CedeProvider(inpageProvider);\n resolve(cedeProvider);\n } else {\n resolve(null);\n }\n }\n });\n}\n","import { DisplayInstallationModalConfig, OnBoardingModal, UI, inferTheme } from \"@cede/utils\";\n\nexport const displayInstallationModal = ({ readOnlyOnboarding, callbackUrl }: DisplayInstallationModalConfig) => {\n const root = document.documentElement;\n if (!root) {\n throw new Error(\"Could not find root element\");\n }\n\n // Setup UI\n const theme = inferTheme();\n const ui = new UI(root, theme, { selector: \":root\", displayLayout: false });\n\n // Display layout component\n ui.renderHtml(OnBoardingModal({ readOnlyOnboarding, callbackUrl }), { clearPrevious: false, animateOnExit: true });\n};\n","import { Any, CedeError } from \"@cede/types\";\n\nexport type ExtractedError = {\n code: number;\n message: string;\n documentation: string;\n};\n\nexport type CedeExposedErrors = {\n [key: string]: ExtractedError | CedeExposedErrors;\n};\n\nexport type AnyErrorObject = {\n [key: string]: CedeError | AnyErrorObject | number | string;\n};\n\nexport const sanitizeErrors = (errorObj: AnyErrorObject): CedeExposedErrors => {\n const flattened: CedeExposedErrors = {};\n\n function recursiveExtract(obj: AnyErrorObject, parentKey = \"\") {\n for (const key in obj) {\n const currentObj = obj[key];\n const fullKey = parentKey ? `${parentKey}.${key}` : key;\n\n if (\n typeof currentObj === \"object\" &&\n \"code\" in currentObj &&\n typeof currentObj.code === \"number\" &&\n typeof currentObj.documentation === \"string\" &&\n typeof currentObj.message === \"string\"\n ) {\n flattened[fullKey] = {\n code: currentObj.code,\n message: currentObj.message,\n documentation: currentObj.documentation,\n };\n } else if (typeof currentObj === \"object\") {\n recursiveExtract(currentObj, fullKey);\n }\n }\n }\n\n recursiveExtract(errorObj);\n\n return flattened;\n};\n\nexport function flattenErrors(obj: Any, result: CedeError[] = []): CedeError[] {\n if (obj && typeof obj === \"object\") {\n if (\n obj.code !== undefined &&\n obj.message !== undefined &&\n obj.description !== undefined &&\n obj.documentation !== undefined\n ) {\n result.push(obj);\n } else {\n for (const key in obj) {\n flattenErrors(obj[key], result);\n }\n }\n }\n return result;\n}\n","import { cedeErrors } from \"@cede/types\";\nimport { AnyErrorObject } from \"@cede/utils\";\nimport { sanitizeErrors } from \"@cede/utils/src/error/cedeErrors\";\n\nexport const CedeErrors = sanitizeErrors(cedeErrors as unknown as AnyErrorObject);\n","import { EventEmitter } from 'events';\nfunction safeApply(handler, context, args) {\n try {\n Reflect.apply(handler, context, args);\n }\n catch (err) {\n // Throw error after timeout so as not to interrupt the stack\n setTimeout(() => {\n throw err;\n });\n }\n}\nfunction arrayClone(arr) {\n const n = arr.length;\n const copy = new Array(n);\n for (let i = 0; i < n; i += 1) {\n copy[i] = arr[i];\n }\n return copy;\n}\nexport default class SafeEventEmitter extends EventEmitter {\n emit(type, ...args) {\n let doError = type === 'error';\n const events = this._events;\n if (events !== undefined) {\n doError = doError && events.error === undefined;\n }\n else if (!doError) {\n return false;\n }\n // If there is no 'error' event listener then throw.\n if (doError) {\n let er;\n if (args.length > 0) {\n [er] = args;\n }\n if (er instanceof Error) {\n // Note: The comments on the `throw` lines are intentional, they show\n // up in Node's output if this results in an unhandled exception.\n throw er; // Unhandled 'error' event\n }\n // At least give some kind of context to the user\n const err = new Error(`Unhandled error.${er ? ` (${er.message})` : ''}`);\n err.context = er;\n throw err; // Unhandled 'error' event\n }\n const handler = events[type];\n if (handler === undefined) {\n return false;\n }\n if (typeof handler === 'function') {\n safeApply(handler, this, args);\n }\n else {\n const len = handler.length;\n const listeners = arrayClone(handler);\n for (let i = 0; i < len; i += 1) {\n safeApply(listeners[i], this, args);\n }\n }\n return true;\n }\n}\n//# sourceMappingURL=index.mjs.map","/*\n * Copyright (C) CEDE Labs, SAS - All Rights Reserved\n * Unauthorized copying of this file, via any medium is strictly prohibited\n * Proprietary and confidential\n * Written by CEDE Labs team <team@cedelabs.io>, September 2021\n */\nimport { Any, ExchangeStatus, VaultItem } from \"@cede/types\";\nimport { onElementAvailable } from \"@cede/utils\";\nimport { BaseProviderState, InpageProviderApi, InpageProviderApiMethods } from \"./types\";\nimport ObjectMultiplex from \"@metamask/object-multiplex\";\nimport {\n BaseProviderOptions,\n JsonRpcConnection,\n UnvalidatedJsonRpcRequest,\n} from \"@metamask/providers/dist/BaseProvider\";\nimport messages from \"@metamask/providers/dist/messages\";\nimport { EMITTED_NOTIFICATIONS, getRpcPromiseCallback } from \"@metamask/providers/dist/utils\";\nimport SafeEventEmitter from \"@metamask/safe-event-emitter\";\nimport { ethErrors } from \"eth-rpc-errors\";\nimport { duplex as isDuplex } from \"is-stream\";\nimport { JsonRpcEngine, JsonRpcRequest, JsonRpcResponse, createIdRemapMiddleware } from \"json-rpc-engine\";\nimport { createStreamMiddleware } from \"json-rpc-middleware-stream\";\nimport pump, { Callback } from \"pump\";\nimport { Duplex } from \"stream\";\n\n/* eslint-disable no-console */\n\nexport const PROVIDER = \"cede-provider\";\n\nexport class InpageProvider extends SafeEventEmitter {\n protected _state: BaseProviderState;\n protected _rpcEngine: JsonRpcEngine;\n protected _jsonRpcConnection: JsonRpcConnection;\n protected _connectionStream: Duplex;\n\n protected static _defaultState: BaseProviderState = {\n vaultPreviews: null,\n isConnected: false,\n isUnlocked: false,\n };\n\n constructor(\n connectionStream: Duplex,\n { jsonRpcStreamName = PROVIDER, maxEventListeners = 100 }: BaseProviderOptions = {},\n ) {\n super();\n this._connectionStream = connectionStream;\n\n connectionStream.addListener(\"close\", () => {\n console.log(\"Connection closed !\");\n });\n\n if (!isDuplex(connectionStream)) {\n throw new Error(messages.errors.invalidDuplexStream());\n }\n\n this.setMaxListeners(maxEventListeners);\n\n // setup default private state\n this._state = structuredClone({\n ...InpageProvider._defaultState,\n });\n\n // bind functions (to prevent consumers from making unbound calls)\n this._handleStreamDisconnect = this._handleStreamDisconnect.bind(this);\n this.request = this.request.bind(this);\n\n // setup connectionStream multiplexing\n const mux = new ObjectMultiplex();\n pump(\n connectionStream,\n mux as unknown as Duplex,\n connectionStream,\n this._handleStreamDisconnect.bind(this, \"CEDE.store\") as Callback,\n );\n\n // EIP-1193 connect\n this.on(\"connect\", () => {\n this._state.isConnected = true;\n });\n\n // setup RPC connection\n this._jsonRpcConnection = createStreamMiddleware() as unknown as JsonRpcConnection;\n pump(\n this._jsonRpcConnection.stream,\n mux.createStream(jsonRpcStreamName) as unknown as Duplex,\n this._jsonRpcConnection.stream,\n this._handleStreamDisconnect.bind(this, \"CEDE.store RpcProvider\") as Callback,\n );\n\n // handle RPC requests via dapp-side rpc engine\n const rpcEngine = new JsonRpcEngine();\n rpcEngine.push(createIdRemapMiddleware());\n rpcEngine.push(this._jsonRpcConnection.middleware);\n this._rpcEngine = rpcEngine;\n\n // handle JSON-RPC notifications\n this._jsonRpcConnection.events.on(\"notification\", (payload) => {\n const { method, params } = payload;\n if (EMITTED_NOTIFICATIONS.includes(method)) {\n this.emit(\"message\", {\n type: method,\n data: params,\n });\n } else if (method === \"STREAM_FAILURE\") {\n connectionStream.destroy(new Error(messages.errors.permanentlyDisconnected()));\n } else {\n this.executeMethod(method, params);\n }\n });\n }\n\n /**\n * Called when connection is lost to critical streams.\n *\n * @emits InpageProvider#disconnect\n */\n protected _handleStreamDisconnect(streamName: string, error: Error) {\n console.log(`Critical stream failure for ${streamName}`);\n if (this._state.isConnected) {\n this._state.isConnected = false;\n this._state.vaultPreviews = null;\n this._state.isUnlocked = false;\n this.emit(\"disconnect\", error);\n }\n }\n\n /**\n * Internal RPC method. Forwards requests to background via the RPC engine.\n * Also remap ids inbound and outbound.\n *\n * @param payload - The RPC request object.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public request = async (args: any) => {\n if (!args || typeof args !== \"object\" || Array.isArray(args)) {\n throw ethErrors.rpc.invalidRequest({\n message: messages.errors.invalidRequestArgs(),\n data: args,\n });\n }\n\n const { method, params } = args;\n\n if (typeof method !== \"string\" || method.length === 0) {\n throw ethErrors.rpc.invalidRequest({\n message: messages.errors.invalidRequestMethod(),\n data: args,\n });\n }\n\n if (params !== undefined && !Array.isArray(params) && (typeof params !== \"object\" || params === null)) {\n throw ethErrors.rpc.invalidRequest({\n message: messages.errors.invalidRequestParams(),\n data: args,\n });\n }\n\n if (!params?.version) {\n throw new Error(\"No version provided\");\n }\n\n const executedMethodPromise = new Promise((resolve, reject) => {\n const payload = { method, params } as UnvalidatedJsonRpcRequest;\n const callback = getRpcPromiseCallback(resolve, reject) as (\n error: unknown,\n response: JsonRpcResponse<unknown>,\n ) => void;\n\n if (!payload.jsonrpc) {\n payload.jsonrpc = \"2.0\";\n }\n return this._rpcEngine.handle(payload as JsonRpcRequest<unknown>, callback);\n });\n\n // If the method is connect, in any cases we wan't to update the state if it doesn't throw\n if (method === \"connect\") {\n executedMethodPromise\n .then((isConnected) => {\n if (isConnected) {\n this._state.isUnlocked = true;\n }\n // We need to handle the error silently because we return the promise so the dApp should handle it itself\n })\n .catch((e) => e);\n }\n\n return executedMethodPromise;\n };\n\n /**\n * When the provider becomes connected, updates internal state and emits\n * required events. Idempotent.\n *\n * @emits connect event\n */\n protected _connectionEstablished() {\n console.log(\"Connection established !\");\n if (!this._state.isConnected) {\n this._state.isConnected = true;\n this.emit(\"connect\");\n }\n }\n\n protected async _updateVaults(vaultPreviews: { vaultsPreview: VaultItem[] }) {\n this._state.vaultPreviews = vaultPreviews.vaultsPreview;\n\n // Trigger accountsChanged event to automatically refresh the dapp data\n this.emit(\"accountsChanged\", [\n (vaultPreviews as Any).vaultsPreview.find((vault: VaultItem) => vault.isActive)?.name,\n ]);\n }\n\n protected async onExchangesStatusesUpdate(exchangesStatuses: Record<string, ExchangeStatus>) {\n this.emit(\"exchangesStatusesUpdate\", { exchangesStatuses });\n }\n\n protected _unlock() {\n this._state.isUnlocked = true;\n this.emit(\"unlock\");\n }\n\n protected _lock() {\n this._state.isUnlocked = false;\n this._state.vaultPreviews = [];\n this.emit(\"lock\");\n }\n\n protected _trackLogin({\n tabId,\n redirectLink,\n websiteHomelinkIdentifier,\n notConnectedIdentifier,\n }: {\n tabId: number;\n redirectLink: string;\n websiteHomelinkIdentifier: string;\n notConnectedIdentifier: string;\n }) {\n const handleRedirection = () => {\n const redirectUrl = new URL(redirectLink);\n const isConnected =\n !document.querySelector(notConnectedIdentifier) &&\n document.querySelector<HTMLLinkElement>(websiteHomelinkIdentifier);\n\n if (isConnected) {\n this.request({ method: \"untrackLink\", params: { tabId, version: 1 } });\n\n if (!window.location.pathname.includes(redirectUrl.pathname)) {\n window.location.href = redirectLink;\n }\n\n return;\n }\n };\n\n onElementAvailable(\n notConnectedIdentifier,\n () => {\n handleRedirection();\n\n window.addEventListener(\"hashchange\", handleRedirection);\n },\n websiteHomelinkIdentifier,\n );\n }\n\n protected getNotificationApi() {\n const api = {\n [\"connect\"]: this._connectionEstablished.bind(this),\n [\"accountsChanged\"]: this._updateVaults.bind(this),\n [\"exchangesStatusesUpdate\"]: this.onExchangesStatusesUpdate.bind(this),\n [\"unlock\"]: this._unlock.bind(this),\n [\"lock\"]: this._lock.bind(this),\n [\"trackLogin\"]: this._trackLogin.bind(this),\n [\"sendTxStatusUpdate\"]: this.emit.bind(this, \"sendTxStatusUpdate\"),\n };\n return api;\n }\n\n protected executeMethod<T extends InpageProviderApiMethods>(\n method: InpageProviderApiMethods,\n ...params: Any[]\n ): ReturnType<InpageProviderApi[T]> {\n const api = this.getNotificationApi();\n const methodFn = api[method] as InpageProviderApi[T];\n if (!methodFn) throw new Error(`Method not found : ${method}`);\n\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-expect-error\n return methodFn(...params);\n }\n\n getIsUnlocked() {\n return this._state.isUnlocked;\n }\n\n getIsConnected() {\n return this._state.isConnected;\n }\n\n getVaultPreviews() {\n return this._state.vaultPreviews;\n }\n\n getActiveVault() {\n return (this.getVaultPreviews() || []).find((vault: VaultItem) => vault.isActive);\n }\n}\n","import { createContext } from \"react\";\n\nexport const DependenciesContext = createContext({});\n","import { useContext } from \"react\";\nimport { DependenciesContext } from \"../contexts/dependencies/context\";\nimport type { CedeReactDependencies } from \"../contexts/dependencies/dependencies\";\n\nexport function useDependencies<T>() {\n return useContext<T & CedeReactDependencies>(\n DependenciesContext as unknown as React.Context<T & CedeReactDependencies>,\n );\n}\n","import { Any } from \"@cede/types\";\n\n/**\n * Provides a price for a given symbol of a token. (Only for testing)\n */\nexport const fakePrices = new Proxy(\n {\n BTC: 28000,\n ETH: 1800,\n },\n {\n get: (target: Any, property: Any) => {\n if (target[property]) {\n return target[property];\n }\n\n return 1;\n },\n },\n);\n","import { useMemo } from \"react\";\nimport { ConnectionStatus, PublicAccount, userFacingMessages } from \"@cede/types\";\nimport { getExchangeLogo } from \"@cede/utils\";\nimport { useDependencies } from \"../useDependencies\";\nimport { UseAccountsHook } from \"./types\";\n\nexport const useAccounts: UseAccountsHook = () => {\n const { useVaults, useSupportedExchanges } = useDependencies();\n const { activeVault } = useVaults();\n const { downExchangesIds } = useSupportedExchanges();\n\n const { accounts, droplistAccounts, accountsByIds, accountsIds, areAccountsLoading } = useMemo(() => {\n if (!activeVault)\n return {\n accounts: [],\n droplistAccounts: [],\n accountsByIds: {},\n accountsIds: [],\n areAccountsLoading: true,\n };\n return {\n accounts: activeVault.accounts,\n droplistAccounts: activeVault.accounts?.map((account) => {\n return {\n label: account.accountName,\n value: account.id,\n img: getExchangeLogo(account.exchangeId),\n cexValue: account.exchangeId,\n permissions: account.permissions,\n disabledText:\n account.status === ConnectionStatus.RECONNECTION_REQUIRED\n ? userFacingMessages.ACCOUNT.RECONNECTION_REQUIRED\n : undefined,\n isDisabled:\n downExchangesIds.includes(account.exchangeId) ||\n [ConnectionStatus.OFFLINE, ConnectionStatus.RECONNECTION_REQUIRED].includes(account.status),\n };\n }),\n accountsByIds: activeVault.accounts.reduce((acc, account) => {\n acc[account.id] = account;\n return acc;\n }, {} as Record<string, PublicAccount>),\n accountsIds: activeVault.accounts.map((account) => account.id),\n areAccountsLoading: false,\n };\n }, [activeVault, downExchangesIds]);\n\n return {\n accounts,\n droplistAccounts,\n accountsByIds,\n accountsIds,\n areAccountsLoading,\n };\n};\n","import { PricesByTokenSymbol, TokenPrices } from \"@cede/types\";\n\n/**\n * Converts the prices objects array to a dictionary.\n * @param prices\n */\nexport const convertToDictionary = (prices: PricesByTokenSymbol) => {\n return Object.keys(prices).reduce(\n (r: TokenPrices, tokenSymbol: string) => ((r[tokenSymbol] = prices[tokenSymbol] || 0), r),\n {},\n );\n};\n\nexport * from \"./candles\";\n","import { useState, useEffect } from \"react\";\nimport { PricesByTokenSymbol, TokenPrices } from \"@cede/types\";\nimport { fakePrices, convertToDictionary } from \"@cede/utils\";\nimport { useDependencies } from \"../useDependencies\";\nimport { useQuery } from \"@tanstack/react-query\";\n\nconst ENVIRONMENT = process.env.CEDE_NODE_ENV;\n\nexport const usePrices = () => {\n const { useBackgroundHandler } = useDependencies();\n const { backgroundHandler } = useBackgroundHandler();\n\n const { data } = useQuery<PricesByTokenSymbol>({\n queryKey: [\"pricesData\"],\n queryFn: async () => {\n if (ENVIRONMENT === \"test\") {\n return fakePrices;\n }\n const data = await backgroundHandler?.getPrices();\n return data;\n },\n enabled: !!backgroundHandler?.isReady,\n });\n\n const [prices, setPrices] = useState<PricesByTokenSymbol>({});\n\n useEffect(() => {\n if (data) {\n setPrices(ENVIRONMENT === \"test\" ? fakePrices : convertToDictionary(data));\n }\n }, [data]);\n return prices;\n};\n\n/**\n * Provides a price for a given symbol of a token.\n * @param symbol\n */\nexport const usePrice = (symbol: string) => {\n const data = usePrices();\n\n if (data) {\n return data[symbol] ?? 0;\n }\n\n return 0;\n};\n\n/**\n * React hook returning a function to get prices.\n * Once the function is called, it will continue to poll with a given interval.\n * Once the prices are fetched, the callback is called with the prices as argument.\n * @param callbacks\n */\nexport const useSetupPrices = (...callbacks: (({ prices }?: { prices: TokenPrices }) => void)[]) => {\n const { useBackgroundHandler } = useDependencies();\n const { backgroundHandler } = useBackgroundHandler();\n\n const { refetch: getPrices, data } = useQuery({\n queryKey: [\"pricesData\"],\n queryFn: async () => {\n if (ENVIRONMENT === \"test\") {\n return fakePrices;\n }\n const data = await backgroundHandler?.getPrices();\n return data;\n },\n refetchOnWindowFocus: false,\n enabled: !!backgroundHandler?.isReady,\n refetchInterval: 1000 * 60 * 5, // 5 minutes\n });\n\n useEffect(() => {\n if (ENVIRONMENT === \"test\") {\n callbacks.forEach((callback) => callback());\n return;\n }\n\n if (data) {\n const prices = convertToDictionary(data);\n callbacks.forEach((callback) => callback({ prices }));\n }\n }, [data]);\n\n return getPrices;\n};\n","/*\n * Copyright (C) CEDE Labs, SAS - All Rights Reserved\n * Unauthorized copying of this file, via any medium is strictly prohibited\n * Proprietary and confidential\n * Written by CEDE Labs team <team@cedelabs.io>, September 2021\n */\nimport { Any, HandlerType, ProviderHandler, UntrustedApi, UntrustedApiMethods, UntrustedApiParams } from \"@cede/types\";\nimport { CedeProvider } from \"@cedelabs/providers/src\";\n\nexport default function providerHandlerFactory(provider: CedeProvider) {\n return new Proxy(provider, {\n get: (object: Any, property: string) => {\n if (property === \"type\") return HandlerType.UNTRUSTED_PROVIDER_API;\n if (property === \"then\") return undefined; // we don't want to make the provider thenable\n if (property === \"isReal\") return true;\n if (property === \"isReady\") {\n // we can execute methods on the provider object when the connection with the background is ready\n return object.inpageProvider.getIsConnected();\n }\n if (object[property]) return object[property];\n return async (parameters: UntrustedApiParams[UntrustedApiMethods]) => {\n const response = await provider.request({ method: property as keyof UntrustedApi, params: parameters });\n return response;\n };\n },\n }) as ProviderHandler & CedeProvider;\n}\n","import { useEffect } from \"react\";\nimport { ProviderHandler } from \"@cede/types\";\nimport providerHandlerFactory from \"../utils/background/handlerFactory\";\n// @TODO: import from root path when we will be using vitest\nimport { CedeProvider, detectCedeProvider } from \"@cedelabs/providers/src\";\nimport { useQuery } from \"@tanstack/react-query\";\n\nexport type UseProviderProps = {\n onProviderNotFound?: () => void;\n onProviderFound?: (provider: ProviderHandler & CedeProvider) => void;\n};\n\n/**\n * This hook is only used in the client side for untrusted connections.\n */\nexport const useBackgroundHandler = ({ onProviderNotFound, onProviderFound }: UseProviderProps = {}) => {\n const { data: backgroundHandler, refetch: refetchProvider } = useQuery({\n queryKey: [\"detectCedeProvider\"],\n queryFn: async () => {\n const provider = await detectCedeProvider();\n\n if (!provider) {\n return null;\n }\n\n const backgroundHandler = providerHandlerFactory(provider);\n\n return backgroundHandler;\n },\n gcTime: Infinity,\n staleTime: Infinity,\n });\n\n useEffect(() => {\n if (backgroundHandler) {\n onProviderFound?.(backgroundHandler);\n } else if (backgroundHandler === null) {\n onProviderNotFound?.();\n }\n }, [backgroundHandler]);\n\n return {\n backgroundHandler,\n refetchProvider,\n };\n};\n","/*\n * Copyright (C) CEDE Labs, SAS - All Rights Reserved\n * Unauthorized copying of this file, via any medium is strictly prohibited\n * Proprietary and confidential\n * Written by CEDE Labs team <team@cedelabs.io>, September 2021\n */\nimport { create } from \"zustand\";\nimport { subscribeWithSelector } from \"zustand/middleware\";\n\nexport type UseLoginStoreState = {\n isLoggedIn: boolean;\n setIsLoggedIn: (isLoggedIn: boolean) => void;\n};\n\nexport type UseLoginStore = typeof useLoginStore;\n\nexport const useLoginStore = create(\n subscribeWithSelector<UseLoginStoreState>((set) => ({\n isLoggedIn: false,\n setIsLoggedIn: (isLoggedIn: boolean) => {\n set(() => ({ isLoggedIn }));\n },\n })),\n);\n","import { useEffect } from \"react\";\nimport { Any, HandlerType, ViewEnvironment } from \"@cede/types\";\nimport { useDependencies } from \"./useDependencies\";\nimport { create } from \"zustand\";\n\ninterface ViewEnvironmentState {\n viewEnvironment: ViewEnvironment | null;\n setViewEnvironment: (environment: ViewEnvironment | null) => void;\n}\n\nexport const useViewEnvironmentStore = create<ViewEnvironmentState>((set) => ({\n viewEnvironment: null,\n setViewEnvironment: (environment: ViewEnvironment | null) => set({ viewEnvironment: environment }),\n}));\n\nasync function determineViewEnvironment(backgroundHandler: Any) {\n if (!backgroundHandler) {\n return null;\n }\n\n if (backgroundHandler.type === HandlerType.UNTRUSTED_PROVIDER_API) {\n return ViewEnvironment.WIDGET;\n }\n\n const tab = await chrome.tabs?.getCurrent();\n return tab ? ViewEnvironment.TAB : ViewEnvironment.POPUP;\n}\n/**\n *\n * @returns\n * source: if we were redirected from a source\n * origin: the origin of the current page\n * environment: the current view environment\n */\nexport const useViewEnvironment = () => {\n const { useBackgroundHandler } = useDependencies();\n const { backgroundHandler } = useBackgroundHandler();\n const setViewEnvironment = useViewEnvironmentStore((state) => state.setViewEnvironment);\n\n const queryParams = new URLSearchParams(window.location.search);\n const source = queryParams.get(\"source\") ?? undefined;\n\n const origin = window.location.origin;\n\n useEffect(() => {\n determineViewEnvironment(backgroundHandler).then(setViewEnvironment);\n }, [backgroundHandler]);\n\n return {\n source,\n origin,\n environment: useViewEnvironmentStore((state) => state.viewEnvironment),\n };\n};\n","import { useAccounts } from \"../../hooks/accounts/useAccounts\";\nimport { usePrice, usePrices, useSetupPrices } from \"../../hooks/prices\";\nimport { useBackgroundHandler } from \"../../hooks/useBackgroundHandler\";\nimport { useLogin } from \"../../hooks/useLogin\";\nimport { useProviderEvents } from \"../../hooks/useProviderEvents\";\nimport { useSupportedExchanges } from \"../../hooks/useSupportedExchanges\";\nimport { useVaults } from \"../../hooks/useVaults\";\nimport { useViewEnvironment } from \"../../hooks/useViewEnvironment\";\nimport { useLoginStore } from \"../../store/login/login\";\n\nexport type CedeReactDependencies = {\n useLogin: typeof useLogin;\n useLoginStore: typeof useLoginStore;\n useBackgroundHandler: typeof useBackgroundHandler;\n useVaults: typeof useVaults;\n useAccounts: typeof useAccounts;\n useSupportedExchanges: typeof useSupportedExchanges;\n usePrice: typeof usePrice;\n usePrices: typeof usePrices;\n useSetupPrices: typeof useSetupPrices;\n useProviderEvents: typeof useProviderEvents;\n useViewEnvironment: typeof useViewEnvironment;\n};\n\nexport const reactSdkDefaultDependencies: CedeReactDependencies = {\n useBackgroundHandler,\n useLogin,\n useLoginStore,\n useVaults,\n useSupportedExchanges,\n useAccounts,\n usePrice,\n usePrices,\n useSetupPrices,\n useProviderEvents,\n useViewEnvironment,\n} as CedeReactDependencies;\n","import { useEffect } from \"react\";\nimport { ConnectParams, ProviderHandler } from \"@cede/types\";\nimport { useLoginStore } from \"../store/login/login\";\nimport { useDependencies } from \"./useDependencies\";\nimport { CedeProvider } from \"@cedelabs/providers/src\";\nimport { useMutation } from \"@tanstack/react-query\";\n\nexport type UseLoginProps = {\n onSuccess?: () => void;\n};\n\nexport const useLogin = ({ onSuccess }: UseLoginProps = {}) => {\n const { useBackgroundHandler, useProviderEvents } = useDependencies();\n const { backgroundHandler } = useBackgroundHandler();\n const isLoggedIn = useLoginStore((state) => state.isLoggedIn);\n const setIsLoggedIn = useLoginStore((state) => state.setIsLoggedIn);\n\n const checkAutoLogin = async (bgHandler: ProviderHandler & CedeProvider) => {\n try {\n await bgHandler.connect({ silent: true, onboard: false });\n onSuccess?.();\n return true;\n } catch (e) {\n return false;\n }\n };\n\n useProviderEvents({\n onUnlock: () => setIsLoggedIn(true),\n onLock: () => setIsLoggedIn(false),\n });\n\n const connect = async (props: ConnectParams) => {\n const response = await backgroundHandler?.connect(props);\n\n return response;\n };\n\n const {\n mutateAsync: login,\n isPending,\n isError,\n } = useMutation({\n mutationFn: connect,\n });\n\n const handleLogin = async (props: ConnectParams) => {\n if (!backgroundHandler && !props.silent) {\n return;\n }\n\n const vaults = await login(props);\n onSuccess?.();\n\n return vaults;\n };\n\n useEffect(() => {\n (async () => {\n if (backgroundHandler && !isLoggedIn) {\n await checkAutoLogin(backgroundHandler);\n }\n })();\n }, [backgroundHandler, isLoggedIn]);\n\n return {\n handleLogin,\n isLoading: isPending,\n isError,\n checkAutoLogin,\n isLoggedIn,\n };\n};\n","import { useMemo } from \"react\";\nimport { VaultItem } from \"@cede/types\";\nimport { QueryKeys } from \"@cede/utils\";\nimport { useDependencies } from \"./useDependencies\";\nimport { useQuery } from \"@tanstack/react-query\";\n\nexport const useVaults = () => {\n const { useBackgroundHandler, useProviderEvents, useLoginStore } = useDependencies();\n const { isLoggedIn } = useLoginStore();\n const { backgroundHandler } = useBackgroundHandler();\n\n const {\n data: fetchedVaults,\n refetch: refetchVaults,\n isLoading: areVaultsLoading,\n } = useQuery<VaultItem[] | undefined, Error>({\n queryKey: [QueryKeys.VAULTS_QUERY_KEY],\n queryFn: async () => {\n try {\n return await backgroundHandler?.vaults();\n } catch {\n return [];\n }\n },\n enabled: !!backgroundHandler?.isReady && isLoggedIn,\n staleTime: Infinity,\n gcTime: Infinity,\n });\n\n useProviderEvents({\n onAccountsChanged: () => refetchVaults(),\n onLock: () => {\n refetchVaults();\n },\n onUnlock: () => {\n refetchVaults();\n },\n queryKey: QueryKeys.VAULTS_EVENTS_QUERY_KEY,\n });\n\n const { activeVault, vaults, vaultsById } = useMemo(() => {\n if (!fetchedVaults) return { vaults: [], activeVault: null, vaultsById: {} };\n return {\n vaults: fetchedVaults,\n activeVault: fetchedVaults.find((vault) => vault.isActive) || null,\n vaultsById: fetchedVaults.reduce((acc, vault) => {\n acc[vault.id] = vault;\n return acc;\n }, {} as Record<string, VaultItem>),\n };\n }, [fetchedVaults]);\n\n return {\n refetchVaults,\n areVaultsLoading,\n activeVault,\n vaultsById,\n vaults,\n };\n};\n","import { useMemo } from \"react\";\nimport {\n ApiPermissions,\n DropListWithIconItem,\n ExchangeInfo,\n ExchangeInfoById,\n ExchangeStatus,\n FeaturesKeys,\n featureKeyToPermission,\n userFacingMessages,\n} from \"@cede/types\";\nimport { AVAILABLE_EXCHANGES_CACHE_TIME, QueryKeys, SUPPORTED_EXCHANGES_CACHE_TIME } from \"@cede/utils\";\nimport { useDependencies } from \"./useDependencies\";\nimport { useQuery } from \"@tanstack/react-query\";\n\ntype ExchangeAvailibility = {\n [exchangeId: string]: boolean;\n};\n\nexport const useSupportedExchanges = () => {\n const { useVaults, useBackgroundHandler, useLoginStore } = useDependencies();\n const { vaults } = useVaults();\n\n const { backgroundHandler } = useBackgroundHandler();\n const { isLoggedIn } = useLoginStore();\n\n const {\n data: supportedExchanges,\n error,\n isLoading,\n refetch,\n } = useQuery<ExchangeInfo[] | undefined, Error>({\n queryKey: [QueryKeys.SUPPORTED_EXCHANGES, vaults],\n queryFn: async () => {\n if (!backgroundHandler?.isReady || !isLoggedIn) return;\n return await backgroundHandler.supportedExchanges();\n },\n enabled: !!backgroundHandler?.isReady && isLoggedIn,\n staleTime: SUPPORTED_EXCHANGES_CACHE_TIME,\n gcTime: SUPPORTED_EXCHANGES_CACHE_TIME,\n });\n\n const {\n data: availableExchanges,\n isFetching: isUnavailableExchangesLoading,\n refetch: refetchUnavailableExchanges,\n } = useQuery<ExchangeAvailibility | undefined>({\n queryKey: [QueryKeys.AVAILABLE_EXCHANGES, vaults],\n queryFn: async () => {\n if (!supportedExchanges || !backgroundHandler?.isReady || !isLoggedIn) return;\n const availableExchanges: ExchangeAvailibility = {};\n const promises = supportedExchanges.map((exchange) =>\n // TODO fix the type of backgroundHanler. `useBackgroundHandler` is overrided in cede.store by the hook for trusted connection that has a method `verifyApiCountryAvailability`.\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n backgroundHandler.verifyApiCountryAvailability({\n exchangeId: exchange.id,\n }),\n );\n\n await Promise.all(promises);\n\n for (const exchange of supportedExchanges) {\n availableExchanges[exchange.id] = await promises[supportedExchanges.indexOf(exchange)];\n }\n return availableExchanges;\n },\n enabled: !!backgroundHandler?.isReady && isLoggedIn && !!supportedExchanges,\n staleTime: AVAILABLE_EXCHANGES_CACHE_TIME,\n gcTime: AVAILABLE_EXCHANGES_CACHE_TIME,\n });\n\n const supportedExchangesById = useMemo(() => {\n if (!supportedExchanges) return {};\n\n return supportedExchanges.reduce((acc, curr) => {\n acc[curr.id] = curr;\n return acc;\n }, {} as ExchangeInfoById);\n }, [supportedExchanges]);\n\n const downExchanges = useMemo(() => {\n const groups: ExchangeInfo[] = [];\n if (!supportedExchanges) return groups;\n\n return supportedExchanges.filter((exchange) =>\n [ExchangeStatus.Shutdown, ExchangeStatus.Error, ExchangeStatus.Maintenance].includes(exchange.status),\n );\n }, [supportedExchanges]);\n\n const downExchangesIds = useMemo(() => {\n if (!downExchanges) return [];\n\n return downExchanges.map((exchange) => exchange.id);\n }, [downExchanges]);\n\n const unavailableExchangesIds = useMemo(() => {\n if (!availableExchanges) return [];\n\n return Object.entries(availableExchanges)\n .filter(([, isAvailable]) => !isAvailable)\n .map(([exchangeId]) => exchangeId);\n }, [availableExchanges]);\n\n const isRequiringWhitelist = (permissions: { type: ApiPermissions }[], exchangeId: string) => {\n if (!supportedExchangesById[exchangeId]) return false;\n const exchange = supportedExchangesById[exchangeId];\n return permissions.some((permission) => exchange?.whitelistScopes?.includes(permission.type));\n };\n\n const shouldDisableCex =\n (feature: FeaturesKeys) =>\n (option: DropListWithIconItem<{ cexValue?: string; permissions?: ApiPermissions[] }>) => {\n if (!option.cexValue) return false;\n if (supportedExchangesById[option.cexValue]?.featuresUnderMaintenance?.[feature]) return true;\n if (!option.permissions?.includes(featureKeyToPermission[feature])) return true;\n\n return false;\n };\n\n const disabledCexText =\n (\n feature: FeaturesKeys,\n MissingPermissionElement: React.FC<{\n option: DropListWithIconItem<{ cexValue?: string; permissions?: ApiPermissions[] }>;\n }>,\n ) =>\n (option: DropListWithIconItem<{ cexValue?: string; permissions?: ApiPermissions[] }>) => {\n if (!option.cexValue) return userFacingMessages.EXCHANGES_STATUSES.TEMPORARILY_UNAVAILABLE;\n if (supportedExchangesById[option.cexValue]?.featuresUnderMaintenance?.[feature])\n return userFacingMessages.EXCHANGES_STATUSES.UNDER_MAINTENANCE;\n if (!option.permissions?.includes(featureKeyToPermission[feature]))\n return <MissingPermissionElement option={option} />;\n\n return userFacingMessages.EXCHANGES_STATUSES.TEMPORARILY_UNAVAILABLE;\n };\n\n const isFeatureSupportedByCex = (exchangeId: string, feature: FeaturesKeys) => {\n return supportedExchangesById[exchangeId]?.supportedFeatures?.includes(feature);\n };\n\n const hasAtLeastOneCexSupported = (feature: FeaturesKeys) => {\n return !!supportedExchanges?.find((exchange) => exchange.supportedFeatures.includes(feature));\n };\n\n return {\n refetchSupportedExchanges: refetch,\n supportedExchanges,\n downExchanges,\n downExchangesIds,\n supportedExchangesById,\n isSupportedExchangesLoading: isLoading,\n supportedExchangesError: error,\n isRequiringWhitelist,\n shouldDisableCex,\n disabledCexText,\n isFeatureSupportedByCex,\n hasAtLeastOneCexSupported,\n unavailableExchangesIds,\n isUnavailableExchangesLoading,\n refetchUnavailableExchanges,\n };\n};\n","import { useRef } from \"react\";\nimport { VaultItem } from \"@cede/types\";\nimport { QueryKeys, generateRandomNumber } from \"@cede/utils\";\nimport { useDependencies } from \"./useDependencies\";\nimport { useQuery } from \"@tanstack/react-query\";\n\nexport type UseProviderEventsProps = {\n onUnlock?: () => void;\n onLock?: () => void;\n onAccountsChanged?: (vaultsPreview: VaultItem[]) => void;\n queryKey?: number | string;\n};\n\nexport const useProviderEvents = ({ onUnlock, onLock, onAccountsChanged, queryKey }: UseProviderEventsProps = {}) => {\n const { useBackgroundHandler } = useDependencies();\n const { backgroundHandler } = useBackgroundHandler();\n const hasBeenUnlockedRef = useRef<boolean>(false);\n const queryKeyRef = useRef<number | string>(queryKey ?? generateRandomNumber(0, 1000000000));\n\n const onUnlockHandler = () => {\n if (!hasBeenUnlockedRef.current) {\n hasBeenUnlockedRef.current = true;\n onUnlock?.();\n }\n };\n\n const onLockHandler = () => {\n hasBeenUnlockedRef.current = false;\n onLock?.();\n };\n\n const onAccountsChangedHandler = (...args: unknown[]) => {\n onAccountsChanged?.(args as VaultItem[]);\n };\n\n useQuery({\n queryKey: [QueryKeys.PROVIDER_EVENTS_QUERY, queryKeyRef.current],\n queryFn: () => {\n if (!backgroundHandler) return;\n\n backgroundHandler.off(\"unlock\", onUnlockHandler);\n backgroundHandler.off(\"lock\", onLockHandler);\n backgroundHandler.off(\"accountsChanged\", onAccountsChangedHandler);\n\n backgroundHandler.on(\"unlock\", onUnlockHandler);\n backgroundHandler.on(\"lock\", onLockHandler);\n backgroundHandler.on(\"accountsChanged\", onAccountsChangedHandler);\n },\n enabled: !!backgroundHandler?.isReady,\n staleTime: Infinity,\n gcTime: Infinity,\n });\n};\n","import { useMemo } from \"react\";\nimport { DependenciesContext } from \"./context\";\nimport { reactSdkDefaultDependencies } from \"./dependencies\";\nimport { QueryClient, QueryClientProvider } from \"@tanstack/react-query\";\n\nexport type CedeDependenciesProviderProps<T> = {\n children: React.ReactNode;\n dependencies?: T;\n};\n\nconst queryClient = new QueryClient({\n defaultOptions: {\n queries: {\n refetchOnWindowFocus: false,\n },\n },\n});\n\nexport function DependenciesProvider<T extends Record<string, unknown>>({\n children,\n dependencies,\n}: CedeDependenciesProviderProps<T>) {\n const finalDependencies = useMemo(() => {\n return {\n ...reactSdkDefaultDependencies,\n ...dependencies,\n };\n }, [dependencies]);\n\n return (\n <QueryClientProvider client={queryClient}>\n <DependenciesContext.Provider value={finalDependencies}>{children}</DependenciesContext.Provider>\n </QueryClientProvider>\n );\n}\n","/**\n * @typedef Options\n * Configuration for `stringify`.\n * @property {boolean} [padLeft=true]\n * Whether to pad a space before a token.\n * @property {boolean} [padRight=false]\n * Whether to pad a space after a token.\n */\n\n/**\n * @typedef {Options} StringifyOptions\n * Please use `StringifyOptions` instead.\n */\n\n/**\n * Parse comma-separated tokens to an array.\n *\n * @param {string} value\n * Comma-separated tokens.\n * @returns {Array<string>}\n * List of tokens.\n */\nexport function parse(value) {\n /** @type {Array<string>} */\n const tokens = []\n const input = String(value || '')\n let index = input.indexOf(',')\n let start = 0\n /** @type {boolean} */\n let end = false\n\n while (!end) {\n if (index === -1) {\n index = input.length\n end = true\n }\n\n const token = input.slice(start, index).trim()\n\n if (token || !end) {\n tokens.push(token)\n }\n\n start = index + 1\n index = input.indexOf(',', start)\n }\n\n return tokens\n}\n\n/**\n * Serialize an array of strings or numbers to comma-separated tokens.\n *\n * @param {Array<string|number>} values\n * List of tokens.\n * @param {Options} [options]\n * Configuration for `stringify` (optional).\n * @returns {string}\n * Comma-separated tokens.\n */\nexport function stringify(values, options) {\n const settings = options || {}\n\n // Ensure the last empty entry is seen.\n const input = values[values.length - 1] === '' ? [...values, ''] : values\n\n return input\n .join(\n (settings.padRight ? ' ' : '') +\n ',' +\n (settings.padLeft === false ? '' : ' ')\n )\n .trim()\n}\n","/**\n * @typedef Options\n * Configuration.\n * @property {boolean | null | undefined} [jsx=false]\n * Support JSX identifiers (default: `false`).\n */\n\nconst startRe = /[$_\\p{ID_Start}]/u\nconst contRe = /[$_\\u{200C}\\u{200D}\\p{ID_Continue}]/u\nconst contReJsx = /[-$_\\u{200C}\\u{200D}\\p{ID_Continue}]/u\nconst nameRe = /^[$_\\p{ID_Start}][$_\\u{200C}\\u{200D}\\p{ID_Continue}]*$/u\nconst nameReJsx = /^[$_\\p{ID_Start}][-$_\\u{200C}\\u{200D}\\p{ID_Continue}]*$/u\n\n/** @type {Options} */\nconst emptyOptions = {}\n\n/**\n * Checks if the given code point can start an identifier.\n *\n * @param {number | undefined} code\n * Code point to check.\n * @returns {boolean}\n * Whether `code` can start an identifier.\n */\n// Note: `undefined` is supported so you can pass the result from `''.codePointAt`.\nexport function start(code) {\n return code ? startRe.test(String.fromCodePoint(code)) : false\n}\n\n/**\n * Checks if the given code point can continue an identifier.\n *\n * @param {number | undefined} code\n * Code point to check.\n * @param {Options | null | undefined} [options]\n * Configuration (optional).\n * @returns {boolean}\n * Whether `code` can continue an identifier.\n */\n// Note: `undefined` is supported so you can pass the result from `''.codePointAt`.\nexport function cont(code, options) {\n const settings = options || emptyOptions\n const re = settings.jsx ? contReJsx : contRe\n return code ? re.test(String.fromCodePoint(code)) : false\n}\n\n/**\n * Checks if the given value is a valid identifier name.\n *\n * @param {string} name\n * Identifier to check.\n * @param {Options | null | undefined} [options]\n * Configuration (optional).\n * @returns {boolean}\n * Whether `name` can be an identifier.\n */\nexport function name(name, options) {\n const settings = options || emptyOptions\n const re = settings.jsx ? nameReJsx : nameRe\n return re.test(name)\n}\n","/**\n * @typedef {import('hast').Nodes} Nodes\n */\n\n// HTML whitespace expression.\n// See <https://infra.spec.whatwg.org/#ascii-whitespace>.\nconst re = /[ \\t\\n\\f\\r]/g\n\n/**\n * Check if the given value is *inter-element whitespace*.\n *\n * @param {Nodes | string} thing\n * Thing to check (`Node` or `string`).\n * @returns {boolean}\n * Whether the `value` is inter-element whitespace (`boolean`): consisting of\n * zero or more of space, tab (`\\t`), line feed (`\\n`), carriage return\n * (`\\r`), or form feed (`\\f`); if a node is passed it must be a `Text` node,\n * whose `value` field is checked.\n */\nexport function whitespace(thing) {\n return typeof thing === 'object'\n ? thing.type === 'text'\n ? empty(thing.value)\n : false\n : empty(thing)\n}\n\n/**\n * @param {string} value\n * @returns {boolean}\n */\nfunction empty(value) {\n return value.replace(re, '') === ''\n}\n","/**\n * @typedef {import('./info.js').Info} Info\n * @typedef {Record<string, Info>} Properties\n * @typedef {Record<string, string>} Normal\n */\n\nexport class Schema {\n /**\n * @constructor\n * @param {Properties} property\n * @param {Normal} normal\n * @param {string} [space]\n */\n constructor(property, normal, space) {\n this.property = property\n this.normal = normal\n if (space) {\n this.space = space\n }\n }\n}\n\n/** @type {Properties} */\nSchema.prototype.property = {}\n/** @type {Normal} */\nSchema.prototype.normal = {}\n/** @type {string|null} */\nSchema.prototype.space = null\n","/**\n * @typedef {import('./schema.js').Properties} Properties\n * @typedef {import('./schema.js').Normal} Normal\n */\n\nimport {Schema} from './schema.js'\n\n/**\n * @param {Schema[]} definitions\n * @param {string} [space]\n * @returns {Schema}\n */\nexport function merge(definitions, space) {\n /** @type {Properties} */\n const property = {}\n /** @type {Normal} */\n const normal = {}\n let index = -1\n\n while (++index < definitions.length) {\n Object.assign(property, definitions[index].property)\n Object.assign(normal, definitions[index].normal)\n }\n\n return new Schema(property, normal, space)\n}\n","/**\n * @param {string} value\n * @returns {string}\n */\nexport function normalize(value) {\n return value.toLowerCase()\n}\n","export class Info {\n /**\n * @constructor\n * @param {string} property\n * @param {string} attribute\n */\n constructor(property, attribute) {\n /** @type {string} */\n this.property = property\n /** @type {string} */\n this.attribute = attribute\n }\n}\n\n/** @type {string|null} */\nInfo.prototype.space = null\nInfo.prototype.boolean = false\nInfo.prototype.booleanish = false\nInfo.prototype.overloadedBoolean = false\nInfo.prototype.number = false\nInfo.prototype.commaSeparated = false\nInfo.prototype.spaceSeparated = false\nInfo.prototype.commaOrSpaceSeparated = false\nInfo.prototype.mustUseProperty = false\nInfo.prototype.defined = false\n","let powers = 0\n\nexport const boolean = increment()\nexport const booleanish = increment()\nexport const overloadedBoolean = increment()\nexport const number = increment()\nexport const spaceSeparated = increment()\nexport const commaSeparated = increment()\nexport const commaOrSpaceSeparated = increment()\n\nfunction increment() {\n return 2 ** ++powers\n}\n","import {Info} from './info.js'\nimport * as types from './types.js'\n\n/** @type {Array<keyof types>} */\n// @ts-expect-error: hush.\nconst checks = Object.keys(types)\n\nexport class DefinedInfo extends Info {\n /**\n * @constructor\n * @param {string} property\n * @param {string} attribute\n * @param {number|null} [mask]\n * @param {string} [space]\n */\n constructor(property, attribute, mask, space) {\n let index = -1\n\n super(property, attribute)\n\n mark(this, 'space', space)\n\n if (typeof mask === 'number') {\n while (++index < checks.length) {\n const check = checks[index]\n mark(this, checks[index], (mask & types[check]) === types[check])\n }\n }\n }\n}\n\nDefinedInfo.prototype.defined = true\n\n/**\n * @param {DefinedInfo} values\n * @param {string} key\n * @param {unknown} value\n */\nfunction mark(values, key, value) {\n if (value) {\n // @ts-expect-error: assume `value` matches the expected value of `key`.\n values[key] = value\n }\n}\n","/**\n * @typedef {import('./schema.js').Properties} Properties\n * @typedef {import('./schema.js').Normal} Normal\n *\n * @typedef {Record<string, string>} Attributes\n *\n * @typedef {Object} Definition\n * @property {Record<string, number|null>} properties\n * @property {(attributes: Attributes, property: string) => string} transform\n * @property {string} [space]\n * @property {Attributes} [attributes]\n * @property {Array<string>} [mustUseProperty]\n */\n\nimport {normalize} from '../normalize.js'\nimport {Schema} from './schema.js'\nimport {DefinedInfo} from './defined-info.js'\n\nconst own = {}.hasOwnProperty\n\n/**\n * @param {Definition} definition\n * @returns {Schema}\n */\nexport function create(definition) {\n /** @type {Properties} */\n const property = {}\n /** @type {Normal} */\n const normal = {}\n /** @type {string} */\n let prop\n\n for (prop in definition.properties) {\n if (own.call(definition.properties, prop)) {\n const value = definition.properties[prop]\n const info = new DefinedInfo(\n prop,\n definition.transform(definition.attributes || {}, prop),\n value,\n definition.space\n )\n\n if (\n definition.mustUseProperty &&\n definition.mustUseProperty.includes(prop)\n ) {\n info.mustUseProperty = true\n }\n\n property[prop] = info\n\n normal[normalize(prop)] = prop\n normal[normalize(info.attribute)] = prop\n }\n }\n\n return new Schema(property, normal, definition.space)\n}\n","import {create} from './util/create.js'\n\nexport const xlink = create({\n space: 'xlink',\n transform(_, prop) {\n return 'xlink:' + prop.slice(5).toLowerCase()\n },\n properties: {\n xLinkActuate: null,\n xLinkArcRole: null,\n xLinkHref: null,\n xLinkRole: null,\n xLinkShow: null,\n xLinkTitle: null,\n xLinkType: null\n }\n})\n","import {create} from './util/create.js'\n\nexport const xml = create({\n space: 'xml',\n transform(_, prop) {\n return 'xml:' + prop.slice(3).toLowerCase()\n },\n properties: {xmlLang: null, xmlBase: null, xmlSpace: null}\n})\n","/**\n * @param {Record<string, string>} attributes\n * @param {string} attribute\n * @returns {string}\n */\nexport function caseSensitiveTransform(attributes, attribute) {\n return attribute in attributes ? attributes[attribute] : attribute\n}\n","import {caseSensitiveTransform} from './case-sensitive-transform.js'\n\n/**\n * @param {Record<string, string>} attributes\n * @param {string} property\n * @returns {string}\n */\nexport function caseInsensitiveTransform(attributes, property) {\n return caseSensitiveTransform(attributes, property.toLowerCase())\n}\n","import {create} from './util/create.js'\nimport {caseInsensitiveTransform} from './util/case-insensitive-transform.js'\n\nexport const xmlns = create({\n space: 'xmlns',\n attributes: {xmlnsxlink: 'xmlns:xlink'},\n transform: caseInsensitiveTransform,\n properties: {xmlns: null, xmlnsXLink: null}\n})\n","import {booleanish, number, spaceSeparated} from './util/types.js'\nimport {create} from './util/create.js'\n\nexport const aria = create({\n transform(_, prop) {\n return prop === 'role' ? prop : 'aria-' + prop.slice(4).toLowerCase()\n },\n properties: {\n ariaActiveDescendant: null,\n ariaAtomic: booleanish,\n ariaAutoComplete: null,\n ariaBusy: booleanish,\n ariaChecked: booleanish,\n ariaColCount: number,\n ariaColIndex: number,\n ariaColSpan: number,\n ariaControls: spaceSeparated,\n ariaCurrent: null,\n ariaDescribedBy: spaceSeparated,\n ariaDetails: null,\n ariaDisabled: booleanish,\n ariaDropEffect: spaceSeparated,\n ariaErrorMessage: null,\n ariaExpanded: booleanish,\n ariaFlowTo: spaceSeparated,\n ariaGrabbed: booleanish,\n ariaHasPopup: null,\n ariaHidden: booleanish,\n ariaInvalid: null,\n ariaKeyShortcuts: null,\n ariaLabel: null,\n ariaLabelledBy: spaceSeparated,\n ariaLevel: number,\n ariaLive: null,\n ariaModal: booleanish,\n ariaMultiLine: booleanish,\n ariaMultiSelectable: booleanish,\n ariaOrientation: null,\n ariaOwns: spaceSeparated,\n ariaPlaceholder: null,\n ariaPosInSet: number,\n ariaPressed: booleanish,\n ariaReadOnly: booleanish,\n ariaRelevant: null,\n ariaRequired: booleanish,\n ariaRoleDescription: spaceSeparated,\n ariaRowCount: number,\n ariaRowIndex: number,\n ariaRowSpan: number,\n ariaSelected: booleanish,\n ariaSetSize: number,\n ariaSort: null,\n ariaValueMax: number,\n ariaValueMin: number,\n ariaValueNow: number,\n ariaValueText: null,\n role: null\n }\n})\n","import {\n boolean,\n overloadedBoolean,\n booleanish,\n number,\n spaceSeparated,\n commaSeparated\n} from './util/types.js'\nimport {create} from './util/create.js'\nimport {caseInsensitiveTransform} from './util/case-insensitive-transform.js'\n\nexport const html = create({\n space: 'html',\n attributes: {\n acceptcharset: 'accept-charset',\n classname: 'class',\n htmlfor: 'for',\n httpequiv: 'http-equiv'\n },\n transform: caseInsensitiveTransform,\n mustUseProperty: ['checked', 'multiple', 'muted', 'selected'],\n properties: {\n // Standard Properties.\n abbr: null,\n accept: commaSeparated,\n acceptCharset: spaceSeparated,\n accessKey: spaceSeparated,\n action: null,\n allow: null,\n allowFullScreen: boolean,\n allowPaymentRequest: boolean,\n allowUserMedia: boolean,\n alt: null,\n as: null,\n async: boolean,\n autoCapitalize: null,\n autoComplete: spaceSeparated,\n autoFocus: boolean,\n autoPlay: boolean,\n blocking: spaceSeparated,\n capture: null,\n charSet: null,\n checked: boolean,\n cite: null,\n className: spaceSeparated,\n cols: number,\n colSpan: null,\n content: null,\n contentEditable: booleanish,\n controls: boolean,\n controlsList: spaceSeparated,\n coords: number | commaSeparated,\n crossOrigin: null,\n data: null,\n dateTime: null,\n decoding: null,\n default: boolean,\n defer: boolean,\n dir: null,\n dirName: null,\n disabled: boolean,\n download: overloadedBoolean,\n draggable: booleanish,\n encType: null,\n enterKeyHint: null,\n fetchPriority: null,\n form: null,\n formAction: null,\n formEncType: null,\n formMethod: null,\n formNoValidate: boolean,\n formTarget: null,\n headers: spaceSeparated,\n height: number,\n hidden: boolean,\n high: number,\n href: null,\n hrefLang: null,\n htmlFor: spaceSeparated,\n httpEquiv: spaceSeparated,\n id: null,\n imageSizes: null,\n imageSrcSet: null,\n inert: boolean,\n inputMode: null,\n integrity: null,\n is: null,\n isMap: boolean,\n itemId: null,\n itemProp: spaceSeparated,\n itemRef: spaceSeparated,\n itemScope: boolean,\n itemType: spaceSeparated,\n kind: null,\n label: null,\n lang: null,\n language: null,\n list: null,\n loading: null,\n loop: boolean,\n low: number,\n manifest: null,\n max: null,\n maxLength: number,\n media: null,\n method: null,\n min: null,\n minLength: number,\n multiple: boolean,\n muted: boolean,\n name: null,\n nonce: null,\n noModule: boolean,\n noValidate: boolean,\n onAbort: null,\n onAfterPrint: null,\n onAuxClick: null,\n onBeforeMatch: null,\n onBeforePrint: null,\n onBeforeToggle: null,\n onBeforeUnload: null,\n onBlur: null,\n onCancel: null,\n onCanPlay: null,\n onCanPlayThrough: null,\n onChange: null,\n onClick: null,\n onClose: null,\n onContextLost: null,\n onContextMenu: null,\n onContextRestored: null,\n onCopy: null,\n onCueChange: null,\n onCut: null,\n onDblClick: null,\n onDrag: null,\n onDragEnd: null,\n onDragEnter: null,\n onDragExit: null,\n onDragLeave: null,\n onDragOver: null,\n onDragStart: null,\n onDrop: null,\n onDurationChange: null,\n onEmptied: null,\n onEnded: null,\n onError: null,\n onFocus: null,\n onFormData: null,\n onHashChange: null,\n onInput: null,\n onInvalid: null,\n onKeyDown: null,\n onKeyPress: null,\n onKeyUp: null,\n onLanguageChange: null,\n onLoad: null,\n onLoadedData: null,\n onLoadedMetadata: null,\n onLoadEnd: null,\n onLoadStart: null,\n onMessage: null,\n onMessageError: null,\n onMouseDown: null,\n onMouseEnter: null,\n onMouseLeave: null,\n onMouseMove: null,\n onMouseOut: null,\n onMouseOver: null,\n onMouseUp: null,\n onOffline: null,\n onOnline: null,\n onPageHide: null,\n onPageShow: null,\n onPaste: null,\n onPause: null,\n onPlay: null,\n onPlaying: null,\n onPopState: null,\n onProgress: null,\n onRateChange: null,\n onRejectionHandled: null,\n onReset: null,\n onResize: null,\n onScroll: null,\n onScrollEnd: null,\n onSecurityPolicyViolation: null,\n onSeeked: null,\n onSeeking: null,\n onSelect: null,\n onSlotChange: null,\n onStalled: null,\n onStorage: null,\n onSubmit: null,\n onSuspend: null,\n onTimeUpdate: null,\n onToggle: null,\n onUnhandledRejection: null,\n onUnload: null,\n onVolumeChange: null,\n onWaiting: null,\n onWheel: null,\n open: boolean,\n optimum: number,\n pattern: null,\n ping: spaceSeparated,\n placeholder: null,\n playsInline: boolean,\n popover: null,\n popoverTarget: null,\n popoverTargetAction: null,\n poster: null,\n preload: null,\n readOnly: boolean,\n referrerPolicy: null,\n rel: spaceSeparated,\n required: boolean,\n reversed: boolean,\n rows: number,\n rowSpan: number,\n sandbox: spaceSeparated,\n scope: null,\n scoped: boolean,\n seamless: boolean,\n selected: boolean,\n shadowRootClonable: boolean,\n shadowRootDelegatesFocus: boolean,\n shadowRootMode: null,\n shape: null,\n size: number,\n sizes: null,\n slot: null,\n span: number,\n spellCheck: booleanish,\n src: null,\n srcDoc: null,\n srcLang: null,\n srcSet: null,\n start: number,\n step: null,\n style: null,\n tabIndex: number,\n target: null,\n title: null,\n translate: null,\n type: null,\n typeMustMatch: boolean,\n useMap: null,\n value: booleanish,\n width: number,\n wrap: null,\n writingSuggestions: null,\n\n // Legacy.\n // See: https://html.spec.whatwg.org/#other-elements,-attributes-and-apis\n align: null, // Several. Use CSS `text-align` instead,\n aLink: null, // `<body>`. Use CSS `a:active {color}` instead\n archive: spaceSeparated, // `<object>`. List of URIs to archives\n axis: null, // `<td>` and `<th>`. Use `scope` on `<th>`\n background: null, // `<body>`. Use CSS `background-image` instead\n bgColor: null, // `<body>` and table elements. Use CSS `background-color` instead\n border: number, // `<table>`. Use CSS `border-width` instead,\n borderColor: null, // `<table>`. Use CSS `border-color` instead,\n bottomMargin: number, // `<body>`\n cellPadding: null, // `<table>`\n cellSpacing: null, // `<table>`\n char: null, // Several table elements. When `align=char`, sets the character to align on\n charOff: null, // Several table elements. When `char`, offsets the alignment\n classId: null, // `<object>`\n clear: null, // `<br>`. Use CSS `clear` instead\n code: null, // `<object>`\n codeBase: null, // `<object>`\n codeType: null, // `<object>`\n color: null, // `<font>` and `<hr>`. Use CSS instead\n compact: boolean, // Lists. Use CSS to reduce space between items instead\n declare: boolean, // `<object>`\n event: null, // `<script>`\n face: null, // `<font>`. Use CSS instead\n frame: null, // `<table>`\n frameBorder: null, // `<iframe>`. Use CSS `border` instead\n hSpace: number, // `<img>` and `<object>`\n leftMargin: number, // `<body>`\n link: null, // `<body>`. Use CSS `a:link {color: *}` instead\n longDesc: null, // `<frame>`, `<iframe>`, and `<img>`. Use an `<a>`\n lowSrc: null, // `<img>`. Use a `<picture>`\n marginHeight: number, // `<body>`\n marginWidth: number, // `<body>`\n noResize: boolean, // `<frame>`\n noHref: boolean, // `<area>`. Use no href instead of an explicit `nohref`\n noShade: boolean, // `<hr>`. Use background-color and height instead of borders\n noWrap: boolean, // `<td>` and `<th>`\n object: null, // `<applet>`\n profile: null, // `<head>`\n prompt: null, // `<isindex>`\n rev: null, // `<link>`\n rightMargin: number, // `<body>`\n rules: null, // `<table>`\n scheme: null, // `<meta>`\n scrolling: booleanish, // `<frame>`. Use overflow in the child context\n standby: null, // `<object>`\n summary: null, // `<table>`\n text: null, // `<body>`. Use CSS `color` instead\n topMargin: number, // `<body>`\n valueType: null, // `<param>`\n version: null, // `<html>`. Use a doctype.\n vAlign: null, // Several. Use CSS `vertical-align` instead\n vLink: null, // `<body>`. Use CSS `a:visited {color}` instead\n vSpace: number, // `<img>` and `<object>`\n\n // Non-standard Properties.\n allowTransparency: null,\n autoCorrect: null,\n autoSave: null,\n disablePictureInPicture: boolean,\n disableRemotePlayback: boolean,\n prefix: null,\n property: null,\n results: number,\n security: null,\n unselectable: null\n }\n})\n","import {\n boolean,\n number,\n spaceSeparated,\n commaSeparated,\n commaOrSpaceSeparated\n} from './util/types.js'\nimport {create} from './util/create.js'\nimport {caseSensitiveTransform} from './util/case-sensitive-transform.js'\n\nexport const svg = create({\n space: 'svg',\n attributes: {\n accentHeight: 'accent-height',\n alignmentBaseline: 'alignment-baseline',\n arabicForm: 'arabic-form',\n baselineShift: 'baseline-shift',\n capHeight: 'cap-height',\n className: 'class',\n clipPath: 'clip-path',\n clipRule: 'clip-rule',\n colorInterpolation: 'color-interpolation',\n colorInterpolationFilters: 'color-interpolation-filters',\n colorProfile: 'color-profile',\n colorRendering: 'color-rendering',\n crossOrigin: 'crossorigin',\n dataType: 'datatype',\n dominantBaseline: 'dominant-baseline',\n enableBackground: 'enable-background',\n fillOpacity: 'fill-opacity',\n fillRule: 'fill-rule',\n floodColor: 'flood-color',\n floodOpacity: 'flood-opacity',\n fontFamily: 'font-family',\n fontSize: 'font-size',\n fontSizeAdjust: 'font-size-adjust',\n fontStretch: 'font-stretch',\n fontStyle: 'font-style',\n fontVariant: 'font-variant',\n fontWeight: 'font-weight',\n glyphName: 'glyph-name',\n glyphOrientationHorizontal: 'glyph-orientation-horizontal',\n glyphOrientationVertical: 'glyph-orientation-vertical',\n hrefLang: 'hreflang',\n horizAdvX: 'horiz-adv-x',\n horizOriginX: 'horiz-origin-x',\n horizOriginY: 'horiz-origin-y',\n imageRendering: 'image-rendering',\n letterSpacing: 'letter-spacing',\n lightingColor: 'lighting-color',\n markerEnd: 'marker-end',\n markerMid: 'marker-mid',\n markerStart: 'marker-start',\n navDown: 'nav-down',\n navDownLeft: 'nav-down-left',\n navDownRight: 'nav-down-right',\n navLeft: 'nav-left',\n navNext: 'nav-next',\n navPrev: 'nav-prev',\n navRight: 'nav-right',\n navUp: 'nav-up',\n navUpLeft: 'nav-up-left',\n navUpRight: 'nav-up-right',\n onAbort: 'onabort',\n onActivate: 'onactivate',\n onAfterPrint: 'onafterprint',\n onBeforePrint: 'onbeforeprint',\n onBegin: 'onbegin',\n onCancel: 'oncancel',\n onCanPlay: 'oncanplay',\n onCanPlayThrough: 'oncanplaythrough',\n onChange: 'onchange',\n onClick: 'onclick',\n onClose: 'onclose',\n onCopy: 'oncopy',\n onCueChange: 'oncuechange',\n onCut: 'oncut',\n onDblClick: 'ondblclick',\n onDrag: 'ondrag',\n onDragEnd: 'ondragend',\n onDragEnter: 'ondragenter',\n onDragExit: 'ondragexit',\n onDragLeave: 'ondragleave',\n onDragOver: 'ondragover',\n onDragStart: 'ondragstart',\n onDrop: 'ondrop',\n onDurationChange: 'ondurationchange',\n onEmptied: 'onemptied',\n onEnd: 'onend',\n onEnded: 'onended',\n onError: 'onerror',\n onFocus: 'onfocus',\n onFocusIn: 'onfocusin',\n onFocusOut: 'onfocusout',\n onHashChange: 'onhashchange',\n onInput: 'oninput',\n onInvalid: 'oninvalid',\n onKeyDown: 'onkeydown',\n onKeyPress: 'onkeypress',\n onKeyUp: 'onkeyup',\n onLoad: 'onload',\n onLoadedData: 'onloadeddata',\n onLoadedMetadata: 'onloadedmetadata',\n onLoadStart: 'onloadstart',\n onMessage: 'onmessage',\n onMouseDown: 'onmousedown',\n onMouseEnter: 'onmouseenter',\n onMouseLeave: 'onmouseleave',\n onMouseMove: 'onmousemove',\n onMouseOut: 'onmouseout',\n onMouseOver: 'onmouseover',\n onMouseUp: 'onmouseup',\n onMouseWheel: 'onmousewheel',\n onOffline: 'onoffline',\n onOnline: 'ononline',\n onPageHide: 'onpagehide',\n onPageShow: 'onpageshow',\n onPaste: 'onpaste',\n onPause: 'onpause',\n onPlay: 'onplay',\n onPlaying: 'onplaying',\n onPopState: 'onpopstate',\n onProgress: 'onprogress',\n onRateChange: 'onratechange',\n onRepeat: 'onrepeat',\n onReset: 'onreset',\n onResize: 'onresize',\n onScroll: 'onscroll',\n onSeeked: 'onseeked',\n onSeeking: 'onseeking',\n onSelect: 'onselect',\n onShow: 'onshow',\n onStalled: 'onstalled',\n onStorage: 'onstorage',\n onSubmit: 'onsubmit',\n onSuspend: 'onsuspend',\n onTimeUpdate: 'ontimeupdate',\n onToggle: 'ontoggle',\n onUnload: 'onunload',\n onVolumeChange: 'onvolumechange',\n onWaiting: 'onwaiting',\n onZoom: 'onzoom',\n overlinePosition: 'overline-position',\n overlineThickness: 'overline-thickness',\n paintOrder: 'paint-order',\n panose1: 'panose-1',\n pointerEvents: 'pointer-events',\n referrerPolicy: 'referrerpolicy',\n renderingIntent: 'rendering-intent',\n shapeRendering: 'shape-rendering',\n stopColor: 'stop-color',\n stopOpacity: 'stop-opacity',\n strikethroughPosition: 'strikethrough-position',\n strikethroughThickness: 'strikethrough-thickness',\n strokeDashArray: 'stroke-dasharray',\n strokeDashOffset: 'stroke-dashoffset',\n strokeLineCap: 'stroke-linecap',\n strokeLineJoin: 'stroke-linejoin',\n strokeMiterLimit: 'stroke-miterlimit',\n strokeOpacity: 'stroke-opacity',\n strokeWidth: 'stroke-width',\n tabIndex: 'tabindex',\n textAnchor: 'text-anchor',\n textDecoration: 'text-decoration',\n textRendering: 'text-rendering',\n transformOrigin: 'transform-origin',\n typeOf: 'typeof',\n underlinePosition: 'underline-position',\n underlineThickness: 'underline-thickness',\n unicodeBidi: 'unicode-bidi',\n unicodeRange: 'unicode-range',\n unitsPerEm: 'units-per-em',\n vAlphabetic: 'v-alphabetic',\n vHanging: 'v-hanging',\n vIdeographic: 'v-ideographic',\n vMathematical: 'v-mathematical',\n vectorEffect: 'vector-effect',\n vertAdvY: 'vert-adv-y',\n vertOriginX: 'vert-origin-x',\n vertOriginY: 'vert-origin-y',\n wordSpacing: 'word-spacing',\n writingMode: 'writing-mode',\n xHeight: 'x-height',\n // These were camelcased in Tiny. Now lowercased in SVG 2\n playbackOrder: 'playbackorder',\n timelineBegin: 'timelinebegin'\n },\n transform: caseSensitiveTransform,\n properties: {\n about: commaOrSpaceSeparated,\n accentHeight: number,\n accumulate: null,\n additive: null,\n alignmentBaseline: null,\n alphabetic: number,\n amplitude: number,\n arabicForm: null,\n ascent: number,\n attributeName: null,\n attributeType: null,\n azimuth: number,\n bandwidth: null,\n baselineShift: null,\n baseFrequency: null,\n baseProfile: null,\n bbox: null,\n begin: null,\n bias: number,\n by: null,\n calcMode: null,\n capHeight: number,\n className: spaceSeparated,\n clip: null,\n clipPath: null,\n clipPathUnits: null,\n clipRule: null,\n color: null,\n colorInterpolation: null,\n colorInterpolationFilters: null,\n colorProfile: null,\n colorRendering: null,\n content: null,\n contentScriptType: null,\n contentStyleType: null,\n crossOrigin: null,\n cursor: null,\n cx: null,\n cy: null,\n d: null,\n dataType: null,\n defaultAction: null,\n descent: number,\n diffuseConstant: number,\n direction: null,\n display: null,\n dur: null,\n divisor: number,\n dominantBaseline: null,\n download: boolean,\n dx: null,\n dy: null,\n edgeMode: null,\n editable: null,\n elevation: number,\n enableBackground: null,\n end: null,\n event: null,\n exponent: number,\n externalResourcesRequired: null,\n fill: null,\n fillOpacity: number,\n fillRule: null,\n filter: null,\n filterRes: null,\n filterUnits: null,\n floodColor: null,\n floodOpacity: null,\n focusable: null,\n focusHighlight: null,\n fontFamily: null,\n fontSize: null,\n fontSizeAdjust: null,\n fontStretch: null,\n fontStyle: null,\n fontVariant: null,\n fontWeight: null,\n format: null,\n fr: null,\n from: null,\n fx: null,\n fy: null,\n g1: commaSeparated,\n g2: commaSeparated,\n glyphName: commaSeparated,\n glyphOrientationHorizontal: null,\n glyphOrientationVertical: null,\n glyphRef: null,\n gradientTransform: null,\n gradientUnits: null,\n handler: null,\n hanging: number,\n hatchContentUnits: null,\n hatchUnits: null,\n height: null,\n href: null,\n hrefLang: null,\n horizAdvX: number,\n horizOriginX: number,\n horizOriginY: number,\n id: null,\n ideographic: number,\n imageRendering: null,\n initialVisibility: null,\n in: null,\n in2: null,\n intercept: number,\n k: number,\n k1: number,\n k2: number,\n k3: number,\n k4: number,\n kernelMatrix: commaOrSpaceSeparated,\n kernelUnitLength: null,\n keyPoints: null, // SEMI_COLON_SEPARATED\n keySplines: null, // SEMI_COLON_SEPARATED\n keyTimes: null, // SEMI_COLON_SEPARATED\n kerning: null,\n lang: null,\n lengthAdjust: null,\n letterSpacing: null,\n lightingColor: null,\n limitingConeAngle: number,\n local: null,\n markerEnd: null,\n markerMid: null,\n markerStart: null,\n markerHeight: null,\n markerUnits: null,\n markerWidth: null,\n mask: null,\n maskContentUnits: null,\n maskUnits: null,\n mathematical: null,\n max: null,\n media: null,\n mediaCharacterEncoding: null,\n mediaContentEncodings: null,\n mediaSize: number,\n mediaTime: null,\n method: null,\n min: null,\n mode: null,\n name: null,\n navDown: null,\n navDownLeft: null,\n navDownRight: null,\n navLeft: null,\n navNext: null,\n navPrev: null,\n navRight: null,\n navUp: null,\n navUpLeft: null,\n navUpRight: null,\n numOctaves: null,\n observer: null,\n offset: null,\n onAbort: null,\n onActivate: null,\n onAfterPrint: null,\n onBeforePrint: null,\n onBegin: null,\n onCancel: null,\n onCanPlay: null,\n onCanPlayThrough: null,\n onChange: null,\n onClick: null,\n onClose: null,\n onCopy: null,\n onCueChange: null,\n onCut: null,\n onDblClick: null,\n onDrag: null,\n onDragEnd: null,\n onDragEnter: null,\n onDragExit: null,\n onDragLeave: null,\n onDragOver: null,\n onDragStart: null,\n onDrop: null,\n onDurationChange: null,\n onEmptied: null,\n onEnd: null,\n onEnded: null,\n onError: null,\n onFocus: null,\n onFocusIn: null,\n onFocusOut: null,\n onHashChange: null,\n onInput: null,\n onInvalid: null,\n onKeyDown: null,\n onKeyPress: null,\n onKeyUp: null,\n onLoad: null,\n onLoadedData: null,\n onLoadedMetadata: null,\n onLoadStart: null,\n onMessage: null,\n onMouseDown: null,\n onMouseEnter: null,\n onMouseLeave: null,\n onMouseMove: null,\n onMouseOut: null,\n onMouseOver: null,\n onMouseUp: null,\n onMouseWheel: null,\n onOffline: null,\n onOnline: null,\n onPageHide: null,\n onPageShow: null,\n onPaste: null,\n onPause: null,\n onPlay: null,\n onPlaying: null,\n onPopState: null,\n onProgress: null,\n onRateChange: null,\n onRepeat: null,\n onReset: null,\n onResize: null,\n onScroll: null,\n onSeeked: null,\n onSeeking: null,\n onSelect: null,\n onShow: null,\n onStalled: null,\n onStorage: null,\n onSubmit: null,\n onSuspend: null,\n onTimeUpdate: null,\n onToggle: null,\n onUnload: null,\n onVolumeChange: null,\n onWaiting: null,\n onZoom: null,\n opacity: null,\n operator: null,\n order: null,\n orient: null,\n orientation: null,\n origin: null,\n overflow: null,\n overlay: null,\n overlinePosition: number,\n overlineThickness: number,\n paintOrder: null,\n panose1: null,\n path: null,\n pathLength: number,\n patternContentUnits: null,\n patternTransform: null,\n patternUnits: null,\n phase: null,\n ping: spaceSeparated,\n pitch: null,\n playbackOrder: null,\n pointerEvents: null,\n points: null,\n pointsAtX: number,\n pointsAtY: number,\n pointsAtZ: number,\n preserveAlpha: null,\n preserveAspectRatio: null,\n primitiveUnits: null,\n propagate: null,\n property: commaOrSpaceSeparated,\n r: null,\n radius: null,\n referrerPolicy: null,\n refX: null,\n refY: null,\n rel: commaOrSpaceSeparated,\n rev: commaOrSpaceSeparated,\n renderingIntent: null,\n repeatCount: null,\n repeatDur: null,\n requiredExtensions: commaOrSpaceSeparated,\n requiredFeatures: commaOrSpaceSeparated,\n requiredFonts: commaOrSpaceSeparated,\n requiredFormats: commaOrSpaceSeparated,\n resource: null,\n restart: null,\n result: null,\n rotate: null,\n rx: null,\n ry: null,\n scale: null,\n seed: null,\n shapeRendering: null,\n side: null,\n slope: null,\n snapshotTime: null,\n specularConstant: number,\n specularExponent: number,\n spreadMethod: null,\n spacing: null,\n startOffset: null,\n stdDeviation: null,\n stemh: null,\n stemv: null,\n stitchTiles: null,\n stopColor: null,\n stopOpacity: null,\n strikethroughPosition: number,\n strikethroughThickness: number,\n string: null,\n stroke: null,\n strokeDashArray: commaOrSpaceSeparated,\n strokeDashOffset: null,\n strokeLineCap: null,\n strokeLineJoin: null,\n strokeMiterLimit: number,\n strokeOpacity: number,\n strokeWidth: null,\n style: null,\n surfaceScale: number,\n syncBehavior: null,\n syncBehaviorDefault: null,\n syncMaster: null,\n syncTolerance: null,\n syncToleranceDefault: null,\n systemLanguage: commaOrSpaceSeparated,\n tabIndex: number,\n tableValues: null,\n target: null,\n targetX: number,\n targetY: number,\n textAnchor: null,\n textDecoration: null,\n textRendering: null,\n textLength: null,\n timelineBegin: null,\n title: null,\n transformBehavior: null,\n type: null,\n typeOf: commaOrSpaceSeparated,\n to: null,\n transform: null,\n transformOrigin: null,\n u1: null,\n u2: null,\n underlinePosition: number,\n underlineThickness: number,\n unicode: null,\n unicodeBidi: null,\n unicodeRange: null,\n unitsPerEm: number,\n values: null,\n vAlphabetic: number,\n vMathematical: number,\n vectorEffect: null,\n vHanging: number,\n vIdeographic: number,\n version: null,\n vertAdvY: number,\n vertOriginX: number,\n vertOriginY: number,\n viewBox: null,\n viewTarget: null,\n visibility: null,\n width: null,\n widths: null,\n wordSpacing: null,\n writingMode: null,\n x: null,\n x1: null,\n x2: null,\n xChannelSelector: null,\n xHeight: number,\n y: null,\n y1: null,\n y2: null,\n yChannelSelector: null,\n z: null,\n zoomAndPan: null\n }\n})\n","/**\n * @typedef {import('./lib/util/info.js').Info} Info\n * @typedef {import('./lib/util/schema.js').Schema} Schema\n */\n\nimport {merge} from './lib/util/merge.js'\nimport {xlink} from './lib/xlink.js'\nimport {xml} from './lib/xml.js'\nimport {xmlns} from './lib/xmlns.js'\nimport {aria} from './lib/aria.js'\nimport {html as htmlBase} from './lib/html.js'\nimport {svg as svgBase} from './lib/svg.js'\n\nexport {find} from './lib/find.js'\nexport {hastToReact} from './lib/hast-to-react.js'\nexport {normalize} from './lib/normalize.js'\nexport const html = merge([xml, xlink, xmlns, aria, htmlBase], 'html')\nexport const svg = merge([xml, xlink, xmlns, aria, svgBase], 'svg')\n","/**\n * @typedef {import('./util/schema.js').Schema} Schema\n */\n\nimport {normalize} from './normalize.js'\nimport {DefinedInfo} from './util/defined-info.js'\nimport {Info} from './util/info.js'\n\nconst valid = /^data[-\\w.:]+$/i\nconst dash = /-[a-z]/g\nconst cap = /[A-Z]/g\n\n/**\n * @param {Schema} schema\n * @param {string} value\n * @returns {Info}\n */\nexport function find(schema, value) {\n const normal = normalize(value)\n let prop = value\n let Type = Info\n\n if (normal in schema.normal) {\n return schema.property[schema.normal[normal]]\n }\n\n if (normal.length > 4 && normal.slice(0, 4) === 'data' && valid.test(value)) {\n // Attribute or property.\n if (value.charAt(4) === '-') {\n // Turn it into a property.\n const rest = value.slice(5).replace(dash, camelcase)\n prop = 'data' + rest.charAt(0).toUpperCase() + rest.slice(1)\n } else {\n // Turn it into an attribute.\n const rest = value.slice(4)\n\n if (!dash.test(rest)) {\n let dashes = rest.replace(cap, kebab)\n\n if (dashes.charAt(0) !== '-') {\n dashes = '-' + dashes\n }\n\n value = 'data' + dashes\n }\n }\n\n Type = DefinedInfo\n }\n\n return new Type(prop, value)\n}\n\n/**\n * @param {string} $0\n * @returns {string}\n */\nfunction kebab($0) {\n return '-' + $0.toLowerCase()\n}\n\n/**\n * @param {string} $0\n * @returns {string}\n */\nfunction camelcase($0) {\n return $0.charAt(1).toUpperCase()\n}\n","/**\n * `hast` is close to `React`, but differs in a couple of cases.\n *\n * To get a React property from a hast property, check if it is in\n * `hastToReact`, if it is, then use the corresponding value,\n * otherwise, use the hast property.\n *\n * @type {Record<string, string>}\n */\nexport const hastToReact = {\n classId: 'classID',\n dataType: 'datatype',\n itemId: 'itemID',\n strokeDashArray: 'strokeDasharray',\n strokeDashOffset: 'strokeDashoffset',\n strokeLineCap: 'strokeLinecap',\n strokeLineJoin: 'strokeLinejoin',\n strokeMiterLimit: 'strokeMiterlimit',\n typeOf: 'typeof',\n xLinkActuate: 'xlinkActuate',\n xLinkArcRole: 'xlinkArcrole',\n xLinkHref: 'xlinkHref',\n xLinkRole: 'xlinkRole',\n xLinkShow: 'xlinkShow',\n xLinkTitle: 'xlinkTitle',\n xLinkType: 'xlinkType',\n xmlnsXLink: 'xmlnsXlink'\n}\n","/**\n * Parse space-separated tokens to an array of strings.\n *\n * @param {string} value\n * Space-separated tokens.\n * @returns {Array<string>}\n * List of tokens.\n */\nexport function parse(value) {\n const input = String(value || '').trim()\n return input ? input.split(/[ \\t\\n\\r\\f]+/g) : []\n}\n\n/**\n * Serialize an array of strings as space separated-tokens.\n *\n * @param {Array<string|number>} values\n * List of tokens.\n * @returns {string}\n * Space-separated tokens.\n */\nexport function stringify(values) {\n return values.join(' ').trim()\n}\n","import StyleToObject from '../cjs/index.js';\n\n// ensure compatibility with rollup umd build\nexport default StyleToObject.default || StyleToObject;\n","/**\n * @typedef {import('unist').Node} Node\n * @typedef {import('unist').Point} Point\n * @typedef {import('unist').Position} Position\n */\n\n/**\n * @typedef NodeLike\n * @property {string} type\n * @property {PositionLike | null | undefined} [position]\n *\n * @typedef PositionLike\n * @property {PointLike | null | undefined} [start]\n * @property {PointLike | null | undefined} [end]\n *\n * @typedef PointLike\n * @property {number | null | undefined} [line]\n * @property {number | null | undefined} [column]\n * @property {number | null | undefined} [offset]\n */\n\n/**\n * Get the ending point of `node`.\n *\n * @param node\n * Node.\n * @returns\n * Point.\n */\nexport const pointEnd = point('end')\n\n/**\n * Get the starting point of `node`.\n *\n * @param node\n * Node.\n * @returns\n * Point.\n */\nexport const pointStart = point('start')\n\n/**\n * Get the positional info of `node`.\n *\n * @param {'end' | 'start'} type\n * Side.\n * @returns\n * Getter.\n */\nfunction point(type) {\n return point\n\n /**\n * Get the point info of `node` at a bound side.\n *\n * @param {Node | NodeLike | null | undefined} [node]\n * @returns {Point | undefined}\n */\n function point(node) {\n const point = (node && node.position && node.position[type]) || {}\n\n if (\n typeof point.line === 'number' &&\n point.line > 0 &&\n typeof point.column === 'number' &&\n point.column > 0\n ) {\n return {\n line: point.line,\n column: point.column,\n offset:\n typeof point.offset === 'number' && point.offset > -1\n ? point.offset\n : undefined\n }\n }\n }\n}\n\n/**\n * Get the positional info of `node`.\n *\n * @param {Node | NodeLike | null | undefined} [node]\n * Node.\n * @returns {Position | undefined}\n * Position.\n */\nexport function position(node) {\n const start = pointStart(node)\n const end = pointEnd(node)\n\n if (start && end) {\n return {start, end}\n }\n}\n","/**\n * @typedef {import('unist').Node} Node\n * @typedef {import('unist').Point} Point\n * @typedef {import('unist').Position} Position\n */\n\n/**\n * @typedef NodeLike\n * @property {string} type\n * @property {PositionLike | null | undefined} [position]\n *\n * @typedef PointLike\n * @property {number | null | undefined} [line]\n * @property {number | null | undefined} [column]\n * @property {number | null | undefined} [offset]\n *\n * @typedef PositionLike\n * @property {PointLike | null | undefined} [start]\n * @property {PointLike | null | undefined} [end]\n */\n\n/**\n * Serialize the positional info of a point, position (start and end points),\n * or node.\n *\n * @param {Node | NodeLike | Point | PointLike | Position | PositionLike | null | undefined} [value]\n * Node, position, or point.\n * @returns {string}\n * Pretty printed positional info of a node (`string`).\n *\n * In the format of a range `ls:cs-le:ce` (when given `node` or `position`)\n * or a point `l:c` (when given `point`), where `l` stands for line, `c` for\n * column, `s` for `start`, and `e` for end.\n * An empty string (`''`) is returned if the given value is neither `node`,\n * `position`, nor `point`.\n */\nexport function stringifyPosition(value) {\n // Nothing.\n if (!value || typeof value !== 'object') {\n return ''\n }\n\n // Node.\n if ('position' in value || 'type' in value) {\n return position(value.position)\n }\n\n // Position.\n if ('start' in value || 'end' in value) {\n return position(value)\n }\n\n // Point.\n if ('line' in value || 'column' in value) {\n return point(value)\n }\n\n // ?\n return ''\n}\n\n/**\n * @param {Point | PointLike | null | undefined} point\n * @returns {string}\n */\nfunction point(point) {\n return index(point && point.line) + ':' + index(point && point.column)\n}\n\n/**\n * @param {Position | PositionLike | null | undefined} pos\n * @returns {string}\n */\nfunction position(pos) {\n return point(pos && pos.start) + '-' + point(pos && pos.end)\n}\n\n/**\n * @param {number | null | undefined} value\n * @returns {number}\n */\nfunction index(value) {\n return value && typeof value === 'number' ? value : 1\n}\n","/**\n * @typedef {import('unist').Node} Node\n * @typedef {import('unist').Point} Point\n * @typedef {import('unist').Position} Position\n */\n\n/**\n * @typedef {object & {type: string, position?: Position | undefined}} NodeLike\n *\n * @typedef Options\n * Configuration.\n * @property {Array<Node> | null | undefined} [ancestors]\n * Stack of (inclusive) ancestor nodes surrounding the message (optional).\n * @property {Error | null | undefined} [cause]\n * Original error cause of the message (optional).\n * @property {Point | Position | null | undefined} [place]\n * Place of message (optional).\n * @property {string | null | undefined} [ruleId]\n * Category of message (optional, example: `'my-rule'`).\n * @property {string | null | undefined} [source]\n * Namespace of who sent the message (optional, example: `'my-package'`).\n */\n\nimport {stringifyPosition} from 'unist-util-stringify-position'\n\n/**\n * Message.\n */\nexport class VFileMessage extends Error {\n /**\n * Create a message for `reason`.\n *\n * > 🪦 **Note**: also has obsolete signatures.\n *\n * @overload\n * @param {string} reason\n * @param {Options | null | undefined} [options]\n * @returns\n *\n * @overload\n * @param {string} reason\n * @param {Node | NodeLike | null | undefined} parent\n * @param {string | null | undefined} [origin]\n * @returns\n *\n * @overload\n * @param {string} reason\n * @param {Point | Position | null | undefined} place\n * @param {string | null | undefined} [origin]\n * @returns\n *\n * @overload\n * @param {string} reason\n * @param {string | null | undefined} [origin]\n * @returns\n *\n * @overload\n * @param {Error | VFileMessage} cause\n * @param {Node | NodeLike | null | undefined} parent\n * @param {string | null | undefined} [origin]\n * @returns\n *\n * @overload\n * @param {Error | VFileMessage} cause\n * @param {Point | Position | null | undefined} place\n * @param {string | null | undefined} [origin]\n * @returns\n *\n * @overload\n * @param {Error | VFileMessage} cause\n * @param {string | null | undefined} [origin]\n * @returns\n *\n * @param {Error | VFileMessage | string} causeOrReason\n * Reason for message, should use markdown.\n * @param {Node | NodeLike | Options | Point | Position | string | null | undefined} [optionsOrParentOrPlace]\n * Configuration (optional).\n * @param {string | null | undefined} [origin]\n * Place in code where the message originates (example:\n * `'my-package:my-rule'` or `'my-rule'`).\n * @returns\n * Instance of `VFileMessage`.\n */\n // eslint-disable-next-line complexity\n constructor(causeOrReason, optionsOrParentOrPlace, origin) {\n super()\n\n if (typeof optionsOrParentOrPlace === 'string') {\n origin = optionsOrParentOrPlace\n optionsOrParentOrPlace = undefined\n }\n\n /** @type {string} */\n let reason = ''\n /** @type {Options} */\n let options = {}\n let legacyCause = false\n\n if (optionsOrParentOrPlace) {\n // Point.\n if (\n 'line' in optionsOrParentOrPlace &&\n 'column' in optionsOrParentOrPlace\n ) {\n options = {place: optionsOrParentOrPlace}\n }\n // Position.\n else if (\n 'start' in optionsOrParentOrPlace &&\n 'end' in optionsOrParentOrPlace\n ) {\n options = {place: optionsOrParentOrPlace}\n }\n // Node.\n else if ('type' in optionsOrParentOrPlace) {\n options = {\n ancestors: [optionsOrParentOrPlace],\n place: optionsOrParentOrPlace.position\n }\n }\n // Options.\n else {\n options = {...optionsOrParentOrPlace}\n }\n }\n\n if (typeof causeOrReason === 'string') {\n reason = causeOrReason\n }\n // Error.\n else if (!options.cause && causeOrReason) {\n legacyCause = true\n reason = causeOrReason.message\n options.cause = causeOrReason\n }\n\n if (!options.ruleId && !options.source && typeof origin === 'string') {\n const index = origin.indexOf(':')\n\n if (index === -1) {\n options.ruleId = origin\n } else {\n options.source = origin.slice(0, index)\n options.ruleId = origin.slice(index + 1)\n }\n }\n\n if (!options.place && options.ancestors && options.ancestors) {\n const parent = options.ancestors[options.ancestors.length - 1]\n\n if (parent) {\n options.place = parent.position\n }\n }\n\n const start =\n options.place && 'start' in options.place\n ? options.place.start\n : options.place\n\n /* eslint-disable no-unused-expressions */\n /**\n * Stack of ancestor nodes surrounding the message.\n *\n * @type {Array<Node> | undefined}\n */\n this.ancestors = options.ancestors || undefined\n\n /**\n * Original error cause of the message.\n *\n * @type {Error | undefined}\n */\n this.cause = options.cause || undefined\n\n /**\n * Starting column of message.\n *\n * @type {number | undefined}\n */\n this.column = start ? start.column : undefined\n\n /**\n * State of problem.\n *\n * * `true` — error, file not usable\n * * `false` — warning, change may be needed\n * * `undefined` — change likely not needed\n *\n * @type {boolean | null | undefined}\n */\n this.fatal = undefined\n\n /**\n * Path of a file (used throughout the `VFile` ecosystem).\n *\n * @type {string | undefined}\n */\n this.file\n\n // Field from `Error`.\n /**\n * Reason for message.\n *\n * @type {string}\n */\n this.message = reason\n\n /**\n * Starting line of error.\n *\n * @type {number | undefined}\n */\n this.line = start ? start.line : undefined\n\n // Field from `Error`.\n /**\n * Serialized positional info of message.\n *\n * On normal errors, this would be something like `ParseError`, buit in\n * `VFile` messages we use this space to show where an error happened.\n */\n this.name = stringifyPosition(options.place) || '1:1'\n\n /**\n * Place of message.\n *\n * @type {Point | Position | undefined}\n */\n this.place = options.place || undefined\n\n /**\n * Reason for message, should use markdown.\n *\n * @type {string}\n */\n this.reason = this.message\n\n /**\n * Category of message (example: `'my-rule'`).\n *\n * @type {string | undefined}\n */\n this.ruleId = options.ruleId || undefined\n\n /**\n * Namespace of message (example: `'my-package'`).\n *\n * @type {string | undefined}\n */\n this.source = options.source || undefined\n\n // Field from `Error`.\n /**\n * Stack of message.\n *\n * This is used by normal errors to show where something happened in\n * programming code, irrelevant for `VFile` messages,\n *\n * @type {string}\n */\n this.stack =\n legacyCause && options.cause && typeof options.cause.stack === 'string'\n ? options.cause.stack\n : ''\n\n // The following fields are “well known”.\n // Not standard.\n // Feel free to add other non-standard fields to your messages.\n\n /**\n * Specify the source value that’s being reported, which is deemed\n * incorrect.\n *\n * @type {string | undefined}\n */\n this.actual\n\n /**\n * Suggest acceptable values that can be used instead of `actual`.\n *\n * @type {Array<string> | undefined}\n */\n this.expected\n\n /**\n * Long form description of the message (you should use markdown).\n *\n * @type {string | undefined}\n */\n this.note\n\n /**\n * Link to docs for the message.\n *\n * > 👉 **Note**: this must be an absolute URL that can be passed as `x`\n * > to `new URL(x)`.\n *\n * @type {string | undefined}\n */\n this.url\n /* eslint-enable no-unused-expressions */\n }\n}\n\nVFileMessage.prototype.file = ''\nVFileMessage.prototype.name = ''\nVFileMessage.prototype.reason = ''\nVFileMessage.prototype.message = ''\nVFileMessage.prototype.stack = ''\nVFileMessage.prototype.column = undefined\nVFileMessage.prototype.line = undefined\nVFileMessage.prototype.ancestors = undefined\nVFileMessage.prototype.cause = undefined\nVFileMessage.prototype.fatal = undefined\nVFileMessage.prototype.place = undefined\nVFileMessage.prototype.ruleId = undefined\nVFileMessage.prototype.source = undefined\n","/**\n * @import {Identifier, Literal, MemberExpression} from 'estree'\n * @import {Jsx, JsxDev, Options, Props} from 'hast-util-to-jsx-runtime'\n * @import {Element, Nodes, Parents, Root, Text} from 'hast'\n * @import {MdxFlowExpressionHast, MdxTextExpressionHast} from 'mdast-util-mdx-expression'\n * @import {MdxJsxFlowElementHast, MdxJsxTextElementHast} from 'mdast-util-mdx-jsx'\n * @import {MdxjsEsmHast} from 'mdast-util-mdxjs-esm'\n * @import {Position} from 'unist'\n * @import {Child, Create, Field, State, Style} from './types.js'\n */\n\nimport {stringify as commas} from 'comma-separated-tokens'\nimport {ok as assert} from 'devlop'\nimport {name as isIdentifierName} from 'estree-util-is-identifier-name'\nimport {whitespace} from 'hast-util-whitespace'\nimport {find, hastToReact, html, svg} from 'property-information'\nimport {stringify as spaces} from 'space-separated-tokens'\nimport styleToObject from 'style-to-object'\nimport {pointStart} from 'unist-util-position'\nimport {VFileMessage} from 'vfile-message'\n\n// To do: next major: `Object.hasOwn`.\nconst own = {}.hasOwnProperty\n\n/** @type {Map<string, number>} */\nconst emptyMap = new Map()\n\nconst cap = /[A-Z]/g\nconst dashSomething = /-([a-z])/g\n\n// `react-dom` triggers a warning for *any* white space in tables.\n// To follow GFM, `mdast-util-to-hast` injects line endings between elements.\n// Other tools might do so too, but they don’t do here, so we remove all of\n// that.\n\n// See: <https://github.com/facebook/react/pull/7081>.\n// See: <https://github.com/facebook/react/pull/7515>.\n// See: <https://github.com/remarkjs/remark-react/issues/64>.\n// See: <https://github.com/rehypejs/rehype-react/pull/29>.\n// See: <https://github.com/rehypejs/rehype-react/pull/32>.\n// See: <https://github.com/rehypejs/rehype-react/pull/45>.\nconst tableElements = new Set(['table', 'tbody', 'thead', 'tfoot', 'tr'])\n\nconst tableCellElement = new Set(['td', 'th'])\n\nconst docs = 'https://github.com/syntax-tree/hast-util-to-jsx-runtime'\n\n/**\n * Transform a hast tree to preact, react, solid, svelte, vue, etc.,\n * with an automatic JSX runtime.\n *\n * @param {Nodes} tree\n * Tree to transform.\n * @param {Options} options\n * Configuration (required).\n * @returns {JSX.Element}\n * JSX element.\n */\n\nexport function toJsxRuntime(tree, options) {\n if (!options || options.Fragment === undefined) {\n throw new TypeError('Expected `Fragment` in options')\n }\n\n const filePath = options.filePath || undefined\n /** @type {Create} */\n let create\n\n if (options.development) {\n if (typeof options.jsxDEV !== 'function') {\n throw new TypeError(\n 'Expected `jsxDEV` in options when `development: true`'\n )\n }\n\n create = developmentCreate(filePath, options.jsxDEV)\n } else {\n if (typeof options.jsx !== 'function') {\n throw new TypeError('Expected `jsx` in production options')\n }\n\n if (typeof options.jsxs !== 'function') {\n throw new TypeError('Expected `jsxs` in production options')\n }\n\n create = productionCreate(filePath, options.jsx, options.jsxs)\n }\n\n /** @type {State} */\n const state = {\n Fragment: options.Fragment,\n ancestors: [],\n components: options.components || {},\n create,\n elementAttributeNameCase: options.elementAttributeNameCase || 'react',\n evaluater: options.createEvaluater ? options.createEvaluater() : undefined,\n filePath,\n ignoreInvalidStyle: options.ignoreInvalidStyle || false,\n passKeys: options.passKeys !== false,\n passNode: options.passNode || false,\n schema: options.space === 'svg' ? svg : html,\n stylePropertyNameCase: options.stylePropertyNameCase || 'dom',\n tableCellAlignToStyle: options.tableCellAlignToStyle !== false\n }\n\n const result = one(state, tree, undefined)\n\n // JSX element.\n if (result && typeof result !== 'string') {\n return result\n }\n\n // Text node or something that turned into nothing.\n return state.create(\n tree,\n state.Fragment,\n {children: result || undefined},\n undefined\n )\n}\n\n/**\n * Transform a node.\n *\n * @param {State} state\n * Info passed around.\n * @param {Nodes} node\n * Current node.\n * @param {string | undefined} key\n * Key.\n * @returns {Child | undefined}\n * Child, optional.\n */\nfunction one(state, node, key) {\n if (node.type === 'element') {\n return element(state, node, key)\n }\n\n if (node.type === 'mdxFlowExpression' || node.type === 'mdxTextExpression') {\n return mdxExpression(state, node)\n }\n\n if (node.type === 'mdxJsxFlowElement' || node.type === 'mdxJsxTextElement') {\n return mdxJsxElement(state, node, key)\n }\n\n if (node.type === 'mdxjsEsm') {\n return mdxEsm(state, node)\n }\n\n if (node.type === 'root') {\n return root(state, node, key)\n }\n\n if (node.type === 'text') {\n return text(state, node)\n }\n}\n\n/**\n * Handle element.\n *\n * @param {State} state\n * Info passed around.\n * @param {Element} node\n * Current node.\n * @param {string | undefined} key\n * Key.\n * @returns {Child | undefined}\n * Child, optional.\n */\nfunction element(state, node, key) {\n const parentSchema = state.schema\n let schema = parentSchema\n\n if (node.tagName.toLowerCase() === 'svg' && parentSchema.space === 'html') {\n schema = svg\n state.schema = schema\n }\n\n state.ancestors.push(node)\n\n const type = findComponentFromName(state, node.tagName, false)\n const props = createElementProps(state, node)\n let children = createChildren(state, node)\n\n if (tableElements.has(node.tagName)) {\n children = children.filter(function (child) {\n return typeof child === 'string' ? !whitespace(child) : true\n })\n }\n\n addNode(state, props, type, node)\n addChildren(props, children)\n\n // Restore.\n state.ancestors.pop()\n state.schema = parentSchema\n\n return state.create(node, type, props, key)\n}\n\n/**\n * Handle MDX expression.\n *\n * @param {State} state\n * Info passed around.\n * @param {MdxFlowExpressionHast | MdxTextExpressionHast} node\n * Current node.\n * @returns {Child | undefined}\n * Child, optional.\n */\nfunction mdxExpression(state, node) {\n if (node.data && node.data.estree && state.evaluater) {\n const program = node.data.estree\n const expression = program.body[0]\n assert(expression.type === 'ExpressionStatement')\n\n // Assume result is a child.\n return /** @type {Child | undefined} */ (\n state.evaluater.evaluateExpression(expression.expression)\n )\n }\n\n crashEstree(state, node.position)\n}\n\n/**\n * Handle MDX ESM.\n *\n * @param {State} state\n * Info passed around.\n * @param {MdxjsEsmHast} node\n * Current node.\n * @returns {Child | undefined}\n * Child, optional.\n */\nfunction mdxEsm(state, node) {\n if (node.data && node.data.estree && state.evaluater) {\n // Assume result is a child.\n return /** @type {Child | undefined} */ (\n state.evaluater.evaluateProgram(node.data.estree)\n )\n }\n\n crashEstree(state, node.position)\n}\n\n/**\n * Handle MDX JSX.\n *\n * @param {State} state\n * Info passed around.\n * @param {MdxJsxFlowElementHast | MdxJsxTextElementHast} node\n * Current node.\n * @param {string | undefined} key\n * Key.\n * @returns {Child | undefined}\n * Child, optional.\n */\nfunction mdxJsxElement(state, node, key) {\n const parentSchema = state.schema\n let schema = parentSchema\n\n if (node.name === 'svg' && parentSchema.space === 'html') {\n schema = svg\n state.schema = schema\n }\n\n state.ancestors.push(node)\n\n const type =\n node.name === null\n ? state.Fragment\n : findComponentFromName(state, node.name, true)\n const props = createJsxElementProps(state, node)\n const children = createChildren(state, node)\n\n addNode(state, props, type, node)\n addChildren(props, children)\n\n // Restore.\n state.ancestors.pop()\n state.schema = parentSchema\n\n return state.create(node, type, props, key)\n}\n\n/**\n * Handle root.\n *\n * @param {State} state\n * Info passed around.\n * @param {Root} node\n * Current node.\n * @param {string | undefined} key\n * Key.\n * @returns {Child | undefined}\n * Child, optional.\n */\nfunction root(state, node, key) {\n /** @type {Props} */\n const props = {}\n\n addChildren(props, createChildren(state, node))\n\n return state.create(node, state.Fragment, props, key)\n}\n\n/**\n * Handle text.\n *\n * @param {State} _\n * Info passed around.\n * @param {Text} node\n * Current node.\n * @returns {Child | undefined}\n * Child, optional.\n */\nfunction text(_, node) {\n return node.value\n}\n\n/**\n * Add `node` to props.\n *\n * @param {State} state\n * Info passed around.\n * @param {Props} props\n * Props.\n * @param {unknown} type\n * Type.\n * @param {Element | MdxJsxFlowElementHast | MdxJsxTextElementHast} node\n * Node.\n * @returns {undefined}\n * Nothing.\n */\nfunction addNode(state, props, type, node) {\n // If this is swapped out for a component:\n if (typeof type !== 'string' && type !== state.Fragment && state.passNode) {\n props.node = node\n }\n}\n\n/**\n * Add children to props.\n *\n * @param {Props} props\n * Props.\n * @param {Array<Child>} children\n * Children.\n * @returns {undefined}\n * Nothing.\n */\nfunction addChildren(props, children) {\n if (children.length > 0) {\n const value = children.length > 1 ? children : children[0]\n\n if (value) {\n props.children = value\n }\n }\n}\n\n/**\n * @param {string | undefined} _\n * Path to file.\n * @param {Jsx} jsx\n * Dynamic.\n * @param {Jsx} jsxs\n * Static.\n * @returns {Create}\n * Create a production element.\n */\nfunction productionCreate(_, jsx, jsxs) {\n return create\n /** @type {Create} */\n function create(_, type, props, key) {\n // Only an array when there are 2 or more children.\n const isStaticChildren = Array.isArray(props.children)\n const fn = isStaticChildren ? jsxs : jsx\n return key ? fn(type, props, key) : fn(type, props)\n }\n}\n\n/**\n * @param {string | undefined} filePath\n * Path to file.\n * @param {JsxDev} jsxDEV\n * Development.\n * @returns {Create}\n * Create a development element.\n */\nfunction developmentCreate(filePath, jsxDEV) {\n return create\n /** @type {Create} */\n function create(node, type, props, key) {\n // Only an array when there are 2 or more children.\n const isStaticChildren = Array.isArray(props.children)\n const point = pointStart(node)\n return jsxDEV(\n type,\n props,\n key,\n isStaticChildren,\n {\n columnNumber: point ? point.column - 1 : undefined,\n fileName: filePath,\n lineNumber: point ? point.line : undefined\n },\n undefined\n )\n }\n}\n\n/**\n * Create props from an element.\n *\n * @param {State} state\n * Info passed around.\n * @param {Element} node\n * Current element.\n * @returns {Props}\n * Props.\n */\nfunction createElementProps(state, node) {\n /** @type {Props} */\n const props = {}\n /** @type {string | undefined} */\n let alignValue\n /** @type {string} */\n let prop\n\n for (prop in node.properties) {\n if (prop !== 'children' && own.call(node.properties, prop)) {\n const result = createProperty(state, prop, node.properties[prop])\n\n if (result) {\n const [key, value] = result\n\n if (\n state.tableCellAlignToStyle &&\n key === 'align' &&\n typeof value === 'string' &&\n tableCellElement.has(node.tagName)\n ) {\n alignValue = value\n } else {\n props[key] = value\n }\n }\n }\n }\n\n if (alignValue) {\n // Assume style is an object.\n const style = /** @type {Style} */ (props.style || (props.style = {}))\n style[state.stylePropertyNameCase === 'css' ? 'text-align' : 'textAlign'] =\n alignValue\n }\n\n return props\n}\n\n/**\n * Create props from a JSX element.\n *\n * @param {State} state\n * Info passed around.\n * @param {MdxJsxFlowElementHast | MdxJsxTextElementHast} node\n * Current JSX element.\n * @returns {Props}\n * Props.\n */\nfunction createJsxElementProps(state, node) {\n /** @type {Props} */\n const props = {}\n\n for (const attribute of node.attributes) {\n if (attribute.type === 'mdxJsxExpressionAttribute') {\n if (attribute.data && attribute.data.estree && state.evaluater) {\n const program = attribute.data.estree\n const expression = program.body[0]\n assert(expression.type === 'ExpressionStatement')\n const objectExpression = expression.expression\n assert(objectExpression.type === 'ObjectExpression')\n const property = objectExpression.properties[0]\n assert(property.type === 'SpreadElement')\n\n Object.assign(\n props,\n state.evaluater.evaluateExpression(property.argument)\n )\n } else {\n crashEstree(state, node.position)\n }\n } else {\n // For JSX, the author is responsible of passing in the correct values.\n const name = attribute.name\n /** @type {unknown} */\n let value\n\n if (attribute.value && typeof attribute.value === 'object') {\n if (\n attribute.value.data &&\n attribute.value.data.estree &&\n state.evaluater\n ) {\n const program = attribute.value.data.estree\n const expression = program.body[0]\n assert(expression.type === 'ExpressionStatement')\n value = state.evaluater.evaluateExpression(expression.expression)\n } else {\n crashEstree(state, node.position)\n }\n } else {\n value = attribute.value === null ? true : attribute.value\n }\n\n // Assume a prop.\n props[name] = /** @type {Props[keyof Props]} */ (value)\n }\n }\n\n return props\n}\n\n/**\n * Create children.\n *\n * @param {State} state\n * Info passed around.\n * @param {Parents} node\n * Current element.\n * @returns {Array<Child>}\n * Children.\n */\nfunction createChildren(state, node) {\n /** @type {Array<Child>} */\n const children = []\n let index = -1\n /** @type {Map<string, number>} */\n // Note: test this when Solid doesn’t want to merge my upcoming PR.\n /* c8 ignore next */\n const countsByName = state.passKeys ? new Map() : emptyMap\n\n while (++index < node.children.length) {\n const child = node.children[index]\n /** @type {string | undefined} */\n let key\n\n if (state.passKeys) {\n const name =\n child.type === 'element'\n ? child.tagName\n : child.type === 'mdxJsxFlowElement' ||\n child.type === 'mdxJsxTextElement'\n ? child.name\n : undefined\n\n if (name) {\n const count = countsByName.get(name) || 0\n key = name + '-' + count\n countsByName.set(name, count + 1)\n }\n }\n\n const result = one(state, child, key)\n if (result !== undefined) children.push(result)\n }\n\n return children\n}\n\n/**\n * Handle a property.\n *\n * @param {State} state\n * Info passed around.\n * @param {string} prop\n * Key.\n * @param {Array<number | string> | boolean | number | string | null | undefined} value\n * hast property value.\n * @returns {Field | undefined}\n * Field for runtime, optional.\n */\nfunction createProperty(state, prop, value) {\n const info = find(state.schema, prop)\n\n // Ignore nullish and `NaN` values.\n if (\n value === null ||\n value === undefined ||\n (typeof value === 'number' && Number.isNaN(value))\n ) {\n return\n }\n\n if (Array.isArray(value)) {\n // Accept `array`.\n // Most props are space-separated.\n value = info.commaSeparated ? commas(value) : spaces(value)\n }\n\n // React only accepts `style` as object.\n if (info.property === 'style') {\n let styleObject =\n typeof value === 'object' ? value : parseStyle(state, String(value))\n\n if (state.stylePropertyNameCase === 'css') {\n styleObject = transformStylesToCssCasing(styleObject)\n }\n\n return ['style', styleObject]\n }\n\n return [\n state.elementAttributeNameCase === 'react' && info.space\n ? hastToReact[info.property] || info.property\n : info.attribute,\n value\n ]\n}\n\n/**\n * Parse a CSS declaration to an object.\n *\n * @param {State} state\n * Info passed around.\n * @param {string} value\n * CSS declarations.\n * @returns {Style}\n * Properties.\n * @throws\n * Throws `VFileMessage` when CSS cannot be parsed.\n */\nfunction parseStyle(state, value) {\n /** @type {Style} */\n const result = {}\n\n try {\n styleToObject(value, replacer)\n } catch (error) {\n if (!state.ignoreInvalidStyle) {\n const cause = /** @type {Error} */ (error)\n const message = new VFileMessage('Cannot parse `style` attribute', {\n ancestors: state.ancestors,\n cause,\n ruleId: 'style',\n source: 'hast-util-to-jsx-runtime'\n })\n message.file = state.filePath || undefined\n message.url = docs + '#cannot-parse-style-attribute'\n\n throw message\n }\n }\n\n return result\n\n /**\n * Add a CSS property (normal, so with dashes) to `result` as a DOM CSS\n * property.\n *\n * @param {string} name\n * Key.\n * @param {string} value\n * Value\n * @returns {undefined}\n * Nothing.\n */\n function replacer(name, value) {\n let key = name\n\n if (key.slice(0, 2) !== '--') {\n if (key.slice(0, 4) === '-ms-') key = 'ms-' + key.slice(4)\n key = key.replace(dashSomething, toCamel)\n }\n\n result[key] = value\n }\n}\n\n/**\n * Create a JSX name from a string.\n *\n * @param {State} state\n * To do.\n * @param {string} name\n * Name.\n * @param {boolean} allowExpression\n * Allow member expressions and identifiers.\n * @returns {unknown}\n * To do.\n */\nfunction findComponentFromName(state, name, allowExpression) {\n /** @type {Identifier | Literal | MemberExpression} */\n let result\n\n if (!allowExpression) {\n result = {type: 'Literal', value: name}\n } else if (name.includes('.')) {\n const identifiers = name.split('.')\n let index = -1\n /** @type {Identifier | Literal | MemberExpression | undefined} */\n let node\n\n while (++index < identifiers.length) {\n /** @type {Identifier | Literal} */\n const prop = isIdentifierName(identifiers[index])\n ? {type: 'Identifier', name: identifiers[index]}\n : {type: 'Literal', value: identifiers[index]}\n node = node\n ? {\n type: 'MemberExpression',\n object: node,\n property: prop,\n computed: Boolean(index && prop.type === 'Literal'),\n optional: false\n }\n : prop\n }\n\n assert(node, 'always a result')\n result = node\n } else {\n result =\n isIdentifierName(name) && !/^[a-z]/.test(name)\n ? {type: 'Identifier', name}\n : {type: 'Literal', value: name}\n }\n\n // Only literals can be passed in `components` currently.\n // No identifiers / member expressions.\n if (result.type === 'Literal') {\n const name = /** @type {keyof JSX.IntrinsicElements} */ (result.value)\n\n return own.call(state.components, name) ? state.components[name] : name\n }\n\n // Assume component.\n if (state.evaluater) {\n return state.evaluater.evaluateExpression(result)\n }\n\n crashEstree(state)\n}\n\n/**\n * @param {State} state\n * @param {Position | undefined} [place]\n * @returns {never}\n */\nfunction crashEstree(state, place) {\n const message = new VFileMessage(\n 'Cannot handle MDX estrees without `createEvaluater`',\n {\n ancestors: state.ancestors,\n place,\n ruleId: 'mdx-estree',\n source: 'hast-util-to-jsx-runtime'\n }\n )\n message.file = state.filePath || undefined\n message.url = docs + '#cannot-handle-mdx-estrees-without-createevaluater'\n\n throw message\n}\n\n/**\n * Transform a DOM casing style object to a CSS casing style object.\n *\n * @param {Style} domCasing\n * @returns {Style}\n */\nfunction transformStylesToCssCasing(domCasing) {\n /** @type {Style} */\n const cssCasing = {}\n /** @type {string} */\n let from\n\n for (from in domCasing) {\n if (own.call(domCasing, from)) {\n cssCasing[transformStyleToCssCasing(from)] = domCasing[from]\n }\n }\n\n return cssCasing\n}\n\n/**\n * Transform a DOM casing style field to a CSS casing style field.\n *\n * @param {string} from\n * @returns {string}\n */\nfunction transformStyleToCssCasing(from) {\n let to = from.replace(cap, toDash)\n // Handle `ms-xxx` -> `-ms-xxx`.\n if (to.slice(0, 3) === 'ms-') to = '-' + to\n return to\n}\n\n/**\n * Make `$1` capitalized.\n *\n * @param {string} _\n * Whatever.\n * @param {string} $1\n * Single ASCII alphabetical.\n * @returns {string}\n * Capitalized `$1`.\n */\nfunction toCamel(_, $1) {\n return $1.toUpperCase()\n}\n\n/**\n * Make `$0` dash cased.\n *\n * @param {string} $0\n * Capitalized ASCII leter.\n * @returns {string}\n * Dash and lower letter.\n */\nfunction toDash($0) {\n return '-' + $0.toLowerCase()\n}\n","/**\n * HTML URL properties.\n *\n * Each key is a property name and each value is a list of tag names it applies\n * to or `null` if it applies to all elements.\n *\n * @type {Record<string, Array<string> | null>}\n */\nexport const urlAttributes = {\n action: ['form'],\n cite: ['blockquote', 'del', 'ins', 'q'],\n data: ['object'],\n formAction: ['button', 'input'],\n href: ['a', 'area', 'base', 'link'],\n icon: ['menuitem'],\n itemId: null,\n manifest: ['html'],\n ping: ['a', 'area'],\n poster: ['video'],\n src: [\n 'audio',\n 'embed',\n 'iframe',\n 'img',\n 'input',\n 'script',\n 'source',\n 'track',\n 'video'\n ]\n}\n","/**\n * @typedef {import('mdast').Nodes} Nodes\n *\n * @typedef Options\n * Configuration (optional).\n * @property {boolean | null | undefined} [includeImageAlt=true]\n * Whether to use `alt` for `image`s (default: `true`).\n * @property {boolean | null | undefined} [includeHtml=true]\n * Whether to use `value` of HTML (default: `true`).\n */\n\n/** @type {Options} */\nconst emptyOptions = {}\n\n/**\n * Get the text content of a node or list of nodes.\n *\n * Prefers the node’s plain-text fields, otherwise serializes its children,\n * and if the given value is an array, serialize the nodes in it.\n *\n * @param {unknown} [value]\n * Thing to serialize, typically `Node`.\n * @param {Options | null | undefined} [options]\n * Configuration (optional).\n * @returns {string}\n * Serialized `value`.\n */\nexport function toString(value, options) {\n const settings = options || emptyOptions\n const includeImageAlt =\n typeof settings.includeImageAlt === 'boolean'\n ? settings.includeImageAlt\n : true\n const includeHtml =\n typeof settings.includeHtml === 'boolean' ? settings.includeHtml : true\n\n return one(value, includeImageAlt, includeHtml)\n}\n\n/**\n * One node or several nodes.\n *\n * @param {unknown} value\n * Thing to serialize.\n * @param {boolean} includeImageAlt\n * Include image `alt`s.\n * @param {boolean} includeHtml\n * Include HTML.\n * @returns {string}\n * Serialized node.\n */\nfunction one(value, includeImageAlt, includeHtml) {\n if (node(value)) {\n if ('value' in value) {\n return value.type === 'html' && !includeHtml ? '' : value.value\n }\n\n if (includeImageAlt && 'alt' in value && value.alt) {\n return value.alt\n }\n\n if ('children' in value) {\n return all(value.children, includeImageAlt, includeHtml)\n }\n }\n\n if (Array.isArray(value)) {\n return all(value, includeImageAlt, includeHtml)\n }\n\n return ''\n}\n\n/**\n * Serialize a list of nodes.\n *\n * @param {Array<unknown>} values\n * Thing to serialize.\n * @param {boolean} includeImageAlt\n * Include image `alt`s.\n * @param {boolean} includeHtml\n * Include HTML.\n * @returns {string}\n * Serialized nodes.\n */\nfunction all(values, includeImageAlt, includeHtml) {\n /** @type {Array<string>} */\n const result = []\n let index = -1\n\n while (++index < values.length) {\n result[index] = one(values[index], includeImageAlt, includeHtml)\n }\n\n return result.join('')\n}\n\n/**\n * Check if `value` looks like a node.\n *\n * @param {unknown} value\n * Thing.\n * @returns {value is Nodes}\n * Whether `value` is a node.\n */\nfunction node(value) {\n return Boolean(value && typeof value === 'object')\n}\n","/**\n * Like `Array#splice`, but smarter for giant arrays.\n *\n * `Array#splice` takes all items to be inserted as individual argument which\n * causes a stack overflow in V8 when trying to insert 100k items for instance.\n *\n * Otherwise, this does not return the removed items, and takes `items` as an\n * array instead of rest parameters.\n *\n * @template {unknown} T\n * Item type.\n * @param {Array<T>} list\n * List to operate on.\n * @param {number} start\n * Index to remove/insert at (can be negative).\n * @param {number} remove\n * Number of items to remove.\n * @param {Array<T>} items\n * Items to inject into `list`.\n * @returns {undefined}\n * Nothing.\n */\nexport function splice(list, start, remove, items) {\n const end = list.length\n let chunkStart = 0\n /** @type {Array<unknown>} */\n let parameters\n\n // Make start between zero and `end` (included).\n if (start < 0) {\n start = -start > end ? 0 : end + start\n } else {\n start = start > end ? end : start\n }\n remove = remove > 0 ? remove : 0\n\n // No need to chunk the items if there’s only a couple (10k) items.\n if (items.length < 10000) {\n parameters = Array.from(items)\n parameters.unshift(start, remove)\n // @ts-expect-error Hush, it’s fine.\n list.splice(...parameters)\n } else {\n // Delete `remove` items starting from `start`\n if (remove) list.splice(start, remove)\n\n // Insert the items in chunks to not cause stack overflows.\n while (chunkStart < items.length) {\n parameters = items.slice(chunkStart, chunkStart + 10000)\n parameters.unshift(start, 0)\n // @ts-expect-error Hush, it’s fine.\n list.splice(...parameters)\n chunkStart += 10000\n start += 10000\n }\n }\n}\n\n/**\n * Append `items` (an array) at the end of `list` (another array).\n * When `list` was empty, returns `items` instead.\n *\n * This prevents a potentially expensive operation when `list` is empty,\n * and adds items in batches to prevent V8 from hanging.\n *\n * @template {unknown} T\n * Item type.\n * @param {Array<T>} list\n * List to operate on.\n * @param {Array<T>} items\n * Items to add to `list`.\n * @returns {Array<T>}\n * Either `list` or `items`.\n */\nexport function push(list, items) {\n if (list.length > 0) {\n splice(list, list.length, 0, items)\n return list\n }\n return items\n}\n","/**\n * Some of the internal operations of micromark do lots of editing\n * operations on very large arrays. This runs into problems with two\n * properties of most circa-2020 JavaScript interpreters:\n *\n * - Array-length modifications at the high end of an array (push/pop) are\n * expected to be common and are implemented in (amortized) time\n * proportional to the number of elements added or removed, whereas\n * other operations (shift/unshift and splice) are much less efficient.\n * - Function arguments are passed on the stack, so adding tens of thousands\n * of elements to an array with `arr.push[...newElements]` will frequently\n * cause stack overflows. (see <https://stackoverflow.com/questions/22123769/rangeerror-maximum-call-stack-size-exceeded-why>)\n *\n * SpliceBuffers are an implementation of gap buffers, which are a\n * generalization of the \"queue made of two stacks\" idea. The splice buffer\n * maintains a cursor, and moving the cursor has cost proportional to the\n * distance the cursor moves, but inserting, deleting, or splicing in\n * new information at the cursor is as efficient as the push/pop operation.\n * This allows for an efficient sequence of splices (or pushes, pops, shifts,\n * or unshifts) as long such edits happen at the same part of the array or\n * generally sweep through the array from the beginning to the end.\n *\n * The interface for splice buffers also supports large numbers of inputs by\n * passing a single array argument rather passing multiple arguments on the\n * function call stack.\n *\n * @template T\n * Item type.\n */\nexport class SpliceBuffer {\n /**\n * @param {ReadonlyArray<T> | null | undefined} [initial]\n * Initial items (optional).\n * @returns\n * Splice buffer.\n */\n constructor(initial) {\n /** @type {Array<T>} */\n this.left = initial ? [...initial] : [];\n /** @type {Array<T>} */\n this.right = [];\n }\n\n /**\n * Array access;\n * does not move the cursor.\n *\n * @param {number} index\n * Index.\n * @return {T}\n * Item.\n */\n get(index) {\n if (index < 0 || index >= this.left.length + this.right.length) {\n throw new RangeError('Cannot access index `' + index + '` in a splice buffer of size `' + (this.left.length + this.right.length) + '`');\n }\n if (index < this.left.length) return this.left[index];\n return this.right[this.right.length - index + this.left.length - 1];\n }\n\n /**\n * The length of the splice buffer, one greater than the largest index in the\n * array.\n */\n get length() {\n return this.left.length + this.right.length;\n }\n\n /**\n * Remove and return `list[0]`;\n * moves the cursor to `0`.\n *\n * @returns {T | undefined}\n * Item, optional.\n */\n shift() {\n this.setCursor(0);\n return this.right.pop();\n }\n\n /**\n * Slice the buffer to get an array;\n * does not move the cursor.\n *\n * @param {number} start\n * Start.\n * @param {number | null | undefined} [end]\n * End (optional).\n * @returns {Array<T>}\n * Array of items.\n */\n slice(start, end) {\n /** @type {number} */\n const stop = end === null || end === undefined ? Number.POSITIVE_INFINITY : end;\n if (stop < this.left.length) {\n return this.left.slice(start, stop);\n }\n if (start > this.left.length) {\n return this.right.slice(this.right.length - stop + this.left.length, this.right.length - start + this.left.length).reverse();\n }\n return this.left.slice(start).concat(this.right.slice(this.right.length - stop + this.left.length).reverse());\n }\n\n /**\n * Mimics the behavior of Array.prototype.splice() except for the change of\n * interface necessary to avoid segfaults when patching in very large arrays.\n *\n * This operation moves cursor is moved to `start` and results in the cursor\n * placed after any inserted items.\n *\n * @param {number} start\n * Start;\n * zero-based index at which to start changing the array;\n * negative numbers count backwards from the end of the array and values\n * that are out-of bounds are clamped to the appropriate end of the array.\n * @param {number | null | undefined} [deleteCount=0]\n * Delete count (default: `0`);\n * maximum number of elements to delete, starting from start.\n * @param {Array<T> | null | undefined} [items=[]]\n * Items to include in place of the deleted items (default: `[]`).\n * @return {Array<T>}\n * Any removed items.\n */\n splice(start, deleteCount, items) {\n /** @type {number} */\n const count = deleteCount || 0;\n this.setCursor(Math.trunc(start));\n const removed = this.right.splice(this.right.length - count, Number.POSITIVE_INFINITY);\n if (items) chunkedPush(this.left, items);\n return removed.reverse();\n }\n\n /**\n * Remove and return the highest-numbered item in the array, so\n * `list[list.length - 1]`;\n * Moves the cursor to `length`.\n *\n * @returns {T | undefined}\n * Item, optional.\n */\n pop() {\n this.setCursor(Number.POSITIVE_INFINITY);\n return this.left.pop();\n }\n\n /**\n * Inserts a single item to the high-numbered side of the array;\n * moves the cursor to `length`.\n *\n * @param {T} item\n * Item.\n * @returns {undefined}\n * Nothing.\n */\n push(item) {\n this.setCursor(Number.POSITIVE_INFINITY);\n this.left.push(item);\n }\n\n /**\n * Inserts many items to the high-numbered side of the array.\n * Moves the cursor to `length`.\n *\n * @param {Array<T>} items\n * Items.\n * @returns {undefined}\n * Nothing.\n */\n pushMany(items) {\n this.setCursor(Number.POSITIVE_INFINITY);\n chunkedPush(this.left, items);\n }\n\n /**\n * Inserts a single item to the low-numbered side of the array;\n * Moves the cursor to `0`.\n *\n * @param {T} item\n * Item.\n * @returns {undefined}\n * Nothing.\n */\n unshift(item) {\n this.setCursor(0);\n this.right.push(item);\n }\n\n /**\n * Inserts many items to the low-numbered side of the array;\n * moves the cursor to `0`.\n *\n * @param {Array<T>} items\n * Items.\n * @returns {undefined}\n * Nothing.\n */\n unshiftMany(items) {\n this.setCursor(0);\n chunkedPush(this.right, items.reverse());\n }\n\n /**\n * Move the cursor to a specific position in the array. Requires\n * time proportional to the distance moved.\n *\n * If `n < 0`, the cursor will end up at the beginning.\n * If `n > length`, the cursor will end up at the end.\n *\n * @param {number} n\n * Position.\n * @return {undefined}\n * Nothing.\n */\n setCursor(n) {\n if (n === this.left.length || n > this.left.length && this.right.length === 0 || n < 0 && this.left.length === 0) return;\n if (n < this.left.length) {\n // Move cursor to the this.left\n const removed = this.left.splice(n, Number.POSITIVE_INFINITY);\n chunkedPush(this.right, removed.reverse());\n } else {\n // Move cursor to the this.right\n const removed = this.right.splice(this.left.length + this.right.length - n, Number.POSITIVE_INFINITY);\n chunkedPush(this.left, removed.reverse());\n }\n }\n}\n\n/**\n * Avoid stack overflow by pushing items onto the stack in segments\n *\n * @template T\n * Item type.\n * @param {Array<T>} list\n * List to inject into.\n * @param {ReadonlyArray<T>} right\n * Items to inject.\n * @return {undefined}\n * Nothing.\n */\nfunction chunkedPush(list, right) {\n /** @type {number} */\n let chunkStart = 0;\n if (right.length < 10000) {\n list.push(...right);\n } else {\n while (chunkStart < right.length) {\n list.push(...right.slice(chunkStart, chunkStart + 10000));\n chunkStart += 10000;\n }\n }\n}","/**\n * @typedef {import('micromark-util-types').Chunk} Chunk\n * @typedef {import('micromark-util-types').Event} Event\n * @typedef {import('micromark-util-types').Token} Token\n */\n\nimport { splice } from 'micromark-util-chunked';\nimport { SpliceBuffer } from './lib/splice-buffer.js';\n\n// Hidden API exposed for testing.\nexport { SpliceBuffer } from './lib/splice-buffer.js';\n\n/**\n * Tokenize subcontent.\n *\n * @param {Array<Event>} eventsArray\n * List of events.\n * @returns {boolean}\n * Whether subtokens were found.\n */\n// eslint-disable-next-line complexity\nexport function subtokenize(eventsArray) {\n /** @type {Record<string, number>} */\n const jumps = {};\n let index = -1;\n /** @type {Event} */\n let event;\n /** @type {number | undefined} */\n let lineIndex;\n /** @type {number} */\n let otherIndex;\n /** @type {Event} */\n let otherEvent;\n /** @type {Array<Event>} */\n let parameters;\n /** @type {Array<Event>} */\n let subevents;\n /** @type {boolean | undefined} */\n let more;\n const events = new SpliceBuffer(eventsArray);\n while (++index < events.length) {\n while (index in jumps) {\n index = jumps[index];\n }\n event = events.get(index);\n\n // Add a hook for the GFM tasklist extension, which needs to know if text\n // is in the first content of a list item.\n if (index && event[1].type === \"chunkFlow\" && events.get(index - 1)[1].type === \"listItemPrefix\") {\n subevents = event[1]._tokenizer.events;\n otherIndex = 0;\n if (otherIndex < subevents.length && subevents[otherIndex][1].type === \"lineEndingBlank\") {\n otherIndex += 2;\n }\n if (otherIndex < subevents.length && subevents[otherIndex][1].type === \"content\") {\n while (++otherIndex < subevents.length) {\n if (subevents[otherIndex][1].type === \"content\") {\n break;\n }\n if (subevents[otherIndex][1].type === \"chunkText\") {\n subevents[otherIndex][1]._isInFirstContentOfListItem = true;\n otherIndex++;\n }\n }\n }\n }\n\n // Enter.\n if (event[0] === 'enter') {\n if (event[1].contentType) {\n Object.assign(jumps, subcontent(events, index));\n index = jumps[index];\n more = true;\n }\n }\n // Exit.\n else if (event[1]._container) {\n otherIndex = index;\n lineIndex = undefined;\n while (otherIndex--) {\n otherEvent = events.get(otherIndex);\n if (otherEvent[1].type === \"lineEnding\" || otherEvent[1].type === \"lineEndingBlank\") {\n if (otherEvent[0] === 'enter') {\n if (lineIndex) {\n events.get(lineIndex)[1].type = \"lineEndingBlank\";\n }\n otherEvent[1].type = \"lineEnding\";\n lineIndex = otherIndex;\n }\n } else {\n break;\n }\n }\n if (lineIndex) {\n // Fix position.\n event[1].end = Object.assign({}, events.get(lineIndex)[1].start);\n\n // Switch container exit w/ line endings.\n parameters = events.slice(lineIndex, index);\n parameters.unshift(event);\n events.splice(lineIndex, index - lineIndex + 1, parameters);\n }\n }\n }\n\n // The changes to the `events` buffer must be copied back into the eventsArray\n splice(eventsArray, 0, Number.POSITIVE_INFINITY, events.slice(0));\n return !more;\n}\n\n/**\n * Tokenize embedded tokens.\n *\n * @param {SpliceBuffer<Event>} events\n * @param {number} eventIndex\n * @returns {Record<string, number>}\n */\nfunction subcontent(events, eventIndex) {\n const token = events.get(eventIndex)[1];\n const context = events.get(eventIndex)[2];\n let startPosition = eventIndex - 1;\n /** @type {Array<number>} */\n const startPositions = [];\n const tokenizer = token._tokenizer || context.parser[token.contentType](token.start);\n const childEvents = tokenizer.events;\n /** @type {Array<[number, number]>} */\n const jumps = [];\n /** @type {Record<string, number>} */\n const gaps = {};\n /** @type {Array<Chunk>} */\n let stream;\n /** @type {Token | undefined} */\n let previous;\n let index = -1;\n /** @type {Token | undefined} */\n let current = token;\n let adjust = 0;\n let start = 0;\n const breaks = [start];\n\n // Loop forward through the linked tokens to pass them in order to the\n // subtokenizer.\n while (current) {\n // Find the position of the event for this token.\n while (events.get(++startPosition)[1] !== current) {\n // Empty.\n }\n startPositions.push(startPosition);\n if (!current._tokenizer) {\n stream = context.sliceStream(current);\n if (!current.next) {\n stream.push(null);\n }\n if (previous) {\n tokenizer.defineSkip(current.start);\n }\n if (current._isInFirstContentOfListItem) {\n tokenizer._gfmTasklistFirstContentOfListItem = true;\n }\n tokenizer.write(stream);\n if (current._isInFirstContentOfListItem) {\n tokenizer._gfmTasklistFirstContentOfListItem = undefined;\n }\n }\n\n // Unravel the next token.\n previous = current;\n current = current.next;\n }\n\n // Now, loop back through all events (and linked tokens), to figure out which\n // parts belong where.\n current = token;\n while (++index < childEvents.length) {\n if (\n // Find a void token that includes a break.\n childEvents[index][0] === 'exit' && childEvents[index - 1][0] === 'enter' && childEvents[index][1].type === childEvents[index - 1][1].type && childEvents[index][1].start.line !== childEvents[index][1].end.line) {\n start = index + 1;\n breaks.push(start);\n // Help GC.\n current._tokenizer = undefined;\n current.previous = undefined;\n current = current.next;\n }\n }\n\n // Help GC.\n tokenizer.events = [];\n\n // If there’s one more token (which is the cases for lines that end in an\n // EOF), that’s perfect: the last point we found starts it.\n // If there isn’t then make sure any remaining content is added to it.\n if (current) {\n // Help GC.\n current._tokenizer = undefined;\n current.previous = undefined;\n } else {\n breaks.pop();\n }\n\n // Now splice the events from the subtokenizer into the current events,\n // moving back to front so that splice indices aren’t affected.\n index = breaks.length;\n while (index--) {\n const slice = childEvents.slice(breaks[index], breaks[index + 1]);\n const start = startPositions.pop();\n jumps.push([start, start + slice.length - 1]);\n events.splice(start, 2, slice);\n }\n jumps.reverse();\n index = -1;\n while (++index < jumps.length) {\n gaps[adjust + jumps[index][0]] = adjust + jumps[index][1];\n adjust += jumps[index][1] - jumps[index][0] - 1;\n }\n return gaps;\n}","/**\n * @typedef {import('micromark-util-types').Extension} Extension\n * @typedef {import('micromark-util-types').Handles} Handles\n * @typedef {import('micromark-util-types').HtmlExtension} HtmlExtension\n * @typedef {import('micromark-util-types').NormalizedExtension} NormalizedExtension\n */\n\nimport {splice} from 'micromark-util-chunked'\n\nconst hasOwnProperty = {}.hasOwnProperty\n\n/**\n * Combine multiple syntax extensions into one.\n *\n * @param {Array<Extension>} extensions\n * List of syntax extensions.\n * @returns {NormalizedExtension}\n * A single combined extension.\n */\nexport function combineExtensions(extensions) {\n /** @type {NormalizedExtension} */\n const all = {}\n let index = -1\n\n while (++index < extensions.length) {\n syntaxExtension(all, extensions[index])\n }\n\n return all\n}\n\n/**\n * Merge `extension` into `all`.\n *\n * @param {NormalizedExtension} all\n * Extension to merge into.\n * @param {Extension} extension\n * Extension to merge.\n * @returns {undefined}\n */\nfunction syntaxExtension(all, extension) {\n /** @type {keyof Extension} */\n let hook\n\n for (hook in extension) {\n const maybe = hasOwnProperty.call(all, hook) ? all[hook] : undefined\n /** @type {Record<string, unknown>} */\n const left = maybe || (all[hook] = {})\n /** @type {Record<string, unknown> | undefined} */\n const right = extension[hook]\n /** @type {string} */\n let code\n\n if (right) {\n for (code in right) {\n if (!hasOwnProperty.call(left, code)) left[code] = []\n const value = right[code]\n constructs(\n // @ts-expect-error Looks like a list.\n left[code],\n Array.isArray(value) ? value : value ? [value] : []\n )\n }\n }\n }\n}\n\n/**\n * Merge `list` into `existing` (both lists of constructs).\n * Mutates `existing`.\n *\n * @param {Array<unknown>} existing\n * @param {Array<unknown>} list\n * @returns {undefined}\n */\nfunction constructs(existing, list) {\n let index = -1\n /** @type {Array<unknown>} */\n const before = []\n\n while (++index < list.length) {\n // @ts-expect-error Looks like an object.\n ;(list[index].add === 'after' ? existing : before).push(list[index])\n }\n\n splice(existing, 0, 0, before)\n}\n\n/**\n * Combine multiple HTML extensions into one.\n *\n * @param {Array<HtmlExtension>} htmlExtensions\n * List of HTML extensions.\n * @returns {HtmlExtension}\n * A single combined HTML extension.\n */\nexport function combineHtmlExtensions(htmlExtensions) {\n /** @type {HtmlExtension} */\n const handlers = {}\n let index = -1\n\n while (++index < htmlExtensions.length) {\n htmlExtension(handlers, htmlExtensions[index])\n }\n\n return handlers\n}\n\n/**\n * Merge `extension` into `all`.\n *\n * @param {HtmlExtension} all\n * Extension to merge into.\n * @param {HtmlExtension} extension\n * Extension to merge.\n * @returns {undefined}\n */\nfunction htmlExtension(all, extension) {\n /** @type {keyof HtmlExtension} */\n let hook\n\n for (hook in extension) {\n const maybe = hasOwnProperty.call(all, hook) ? all[hook] : undefined\n const left = maybe || (all[hook] = {})\n const right = extension[hook]\n /** @type {keyof Handles} */\n let type\n\n if (right) {\n for (type in right) {\n // @ts-expect-error assume document vs regular handler are managed correctly.\n left[type] = right[type]\n }\n }\n }\n}\n","/**\n * @typedef {import('micromark-util-types').Code} Code\n */\n\n/**\n * Check whether the character code represents an ASCII alpha (`a` through `z`,\n * case insensitive).\n *\n * An **ASCII alpha** is an ASCII upper alpha or ASCII lower alpha.\n *\n * An **ASCII upper alpha** is a character in the inclusive range U+0041 (`A`)\n * to U+005A (`Z`).\n *\n * An **ASCII lower alpha** is a character in the inclusive range U+0061 (`a`)\n * to U+007A (`z`).\n *\n * @param code\n * Code.\n * @returns {boolean}\n * Whether it matches.\n */\nexport const asciiAlpha = regexCheck(/[A-Za-z]/);\n\n/**\n * Check whether the character code represents an ASCII alphanumeric (`a`\n * through `z`, case insensitive, or `0` through `9`).\n *\n * An **ASCII alphanumeric** is an ASCII digit (see `asciiDigit`) or ASCII alpha\n * (see `asciiAlpha`).\n *\n * @param code\n * Code.\n * @returns {boolean}\n * Whether it matches.\n */\nexport const asciiAlphanumeric = regexCheck(/[\\dA-Za-z]/);\n\n/**\n * Check whether the character code represents an ASCII atext.\n *\n * atext is an ASCII alphanumeric (see `asciiAlphanumeric`), or a character in\n * the inclusive ranges U+0023 NUMBER SIGN (`#`) to U+0027 APOSTROPHE (`'`),\n * U+002A ASTERISK (`*`), U+002B PLUS SIGN (`+`), U+002D DASH (`-`), U+002F\n * SLASH (`/`), U+003D EQUALS TO (`=`), U+003F QUESTION MARK (`?`), U+005E\n * CARET (`^`) to U+0060 GRAVE ACCENT (`` ` ``), or U+007B LEFT CURLY BRACE\n * (`{`) to U+007E TILDE (`~`).\n *\n * See:\n * **\\[RFC5322]**:\n * [Internet Message Format](https://tools.ietf.org/html/rfc5322).\n * P. Resnick.\n * IETF.\n *\n * @param code\n * Code.\n * @returns {boolean}\n * Whether it matches.\n */\nexport const asciiAtext = regexCheck(/[#-'*+\\--9=?A-Z^-~]/);\n\n/**\n * Check whether a character code is an ASCII control character.\n *\n * An **ASCII control** is a character in the inclusive range U+0000 NULL (NUL)\n * to U+001F (US), or U+007F (DEL).\n *\n * @param {Code} code\n * Code.\n * @returns {boolean}\n * Whether it matches.\n */\nexport function asciiControl(code) {\n return (\n // Special whitespace codes (which have negative values), C0 and Control\n // character DEL\n code !== null && (code < 32 || code === 127)\n );\n}\n\n/**\n * Check whether the character code represents an ASCII digit (`0` through `9`).\n *\n * An **ASCII digit** is a character in the inclusive range U+0030 (`0`) to\n * U+0039 (`9`).\n *\n * @param code\n * Code.\n * @returns {boolean}\n * Whether it matches.\n */\nexport const asciiDigit = regexCheck(/\\d/);\n\n/**\n * Check whether the character code represents an ASCII hex digit (`a` through\n * `f`, case insensitive, or `0` through `9`).\n *\n * An **ASCII hex digit** is an ASCII digit (see `asciiDigit`), ASCII upper hex\n * digit, or an ASCII lower hex digit.\n *\n * An **ASCII upper hex digit** is a character in the inclusive range U+0041\n * (`A`) to U+0046 (`F`).\n *\n * An **ASCII lower hex digit** is a character in the inclusive range U+0061\n * (`a`) to U+0066 (`f`).\n *\n * @param code\n * Code.\n * @returns {boolean}\n * Whether it matches.\n */\nexport const asciiHexDigit = regexCheck(/[\\dA-Fa-f]/);\n\n/**\n * Check whether the character code represents ASCII punctuation.\n *\n * An **ASCII punctuation** is a character in the inclusive ranges U+0021\n * EXCLAMATION MARK (`!`) to U+002F SLASH (`/`), U+003A COLON (`:`) to U+0040 AT\n * SIGN (`@`), U+005B LEFT SQUARE BRACKET (`[`) to U+0060 GRAVE ACCENT\n * (`` ` ``), or U+007B LEFT CURLY BRACE (`{`) to U+007E TILDE (`~`).\n *\n * @param code\n * Code.\n * @returns {boolean}\n * Whether it matches.\n */\nexport const asciiPunctuation = regexCheck(/[!-/:-@[-`{-~]/);\n\n/**\n * Check whether a character code is a markdown line ending.\n *\n * A **markdown line ending** is the virtual characters M-0003 CARRIAGE RETURN\n * LINE FEED (CRLF), M-0004 LINE FEED (LF) and M-0005 CARRIAGE RETURN (CR).\n *\n * In micromark, the actual character U+000A LINE FEED (LF) and U+000D CARRIAGE\n * RETURN (CR) are replaced by these virtual characters depending on whether\n * they occurred together.\n *\n * @param {Code} code\n * Code.\n * @returns {boolean}\n * Whether it matches.\n */\nexport function markdownLineEnding(code) {\n return code !== null && code < -2;\n}\n\n/**\n * Check whether a character code is a markdown line ending (see\n * `markdownLineEnding`) or markdown space (see `markdownSpace`).\n *\n * @param {Code} code\n * Code.\n * @returns {boolean}\n * Whether it matches.\n */\nexport function markdownLineEndingOrSpace(code) {\n return code !== null && (code < 0 || code === 32);\n}\n\n/**\n * Check whether a character code is a markdown space.\n *\n * A **markdown space** is the concrete character U+0020 SPACE (SP) and the\n * virtual characters M-0001 VIRTUAL SPACE (VS) and M-0002 HORIZONTAL TAB (HT).\n *\n * In micromark, the actual character U+0009 CHARACTER TABULATION (HT) is\n * replaced by one M-0002 HORIZONTAL TAB (HT) and between 0 and 3 M-0001 VIRTUAL\n * SPACE (VS) characters, depending on the column at which the tab occurred.\n *\n * @param {Code} code\n * Code.\n * @returns {boolean}\n * Whether it matches.\n */\nexport function markdownSpace(code) {\n return code === -2 || code === -1 || code === 32;\n}\n\n// Size note: removing ASCII from the regex and using `asciiPunctuation` here\n// In fact adds to the bundle size.\n/**\n * Check whether the character code represents Unicode punctuation.\n *\n * A **Unicode punctuation** is a character in the Unicode `Pc` (Punctuation,\n * Connector), `Pd` (Punctuation, Dash), `Pe` (Punctuation, Close), `Pf`\n * (Punctuation, Final quote), `Pi` (Punctuation, Initial quote), `Po`\n * (Punctuation, Other), or `Ps` (Punctuation, Open) categories, or an ASCII\n * punctuation (see `asciiPunctuation`).\n *\n * See:\n * **\\[UNICODE]**:\n * [The Unicode Standard](https://www.unicode.org/versions/).\n * Unicode Consortium.\n *\n * @param code\n * Code.\n * @returns\n * Whether it matches.\n */\nexport const unicodePunctuation = regexCheck(/\\p{P}|\\p{S}/u);\n\n/**\n * Check whether the character code represents Unicode whitespace.\n *\n * Note that this does handle micromark specific markdown whitespace characters.\n * See `markdownLineEndingOrSpace` to check that.\n *\n * A **Unicode whitespace** is a character in the Unicode `Zs` (Separator,\n * Space) category, or U+0009 CHARACTER TABULATION (HT), U+000A LINE FEED (LF),\n * U+000C (FF), or U+000D CARRIAGE RETURN (CR) (**\\[UNICODE]**).\n *\n * See:\n * **\\[UNICODE]**:\n * [The Unicode Standard](https://www.unicode.org/versions/).\n * Unicode Consortium.\n *\n * @param code\n * Code.\n * @returns\n * Whether it matches.\n */\nexport const unicodeWhitespace = regexCheck(/\\s/);\n\n/**\n * Create a code check from a regex.\n *\n * @param {RegExp} regex\n * @returns {(code: Code) => boolean}\n */\nfunction regexCheck(regex) {\n return check;\n\n /**\n * Check whether a code matches the bound regex.\n *\n * @param {Code} code\n * Character code.\n * @returns {boolean}\n * Whether the character code matches the bound regex.\n */\n function check(code) {\n return code !== null && code > -1 && regex.test(String.fromCharCode(code));\n }\n}","/**\n * @typedef {import('micromark-util-types').Effects} Effects\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenType} TokenType\n */\n\nimport {markdownSpace} from 'micromark-util-character'\n\n// To do: implement `spaceOrTab`, `spaceOrTabMinMax`, `spaceOrTabWithOptions`.\n\n/**\n * Parse spaces and tabs.\n *\n * There is no `nok` parameter:\n *\n * * spaces in markdown are often optional, in which case this factory can be\n * used and `ok` will be switched to whether spaces were found or not\n * * one line ending or space can be detected with `markdownSpace(code)` right\n * before using `factorySpace`\n *\n * ###### Examples\n *\n * Where `␉` represents a tab (plus how much it expands) and `␠` represents a\n * single space.\n *\n * ```markdown\n * ␉\n * ␠␠␠␠\n * ␉␠\n * ```\n *\n * @param {Effects} effects\n * Context.\n * @param {State} ok\n * State switched to when successful.\n * @param {TokenType} type\n * Type (`' \\t'`).\n * @param {number | undefined} [max=Infinity]\n * Max (exclusive).\n * @returns {State}\n * Start state.\n */\nexport function factorySpace(effects, ok, type, max) {\n const limit = max ? max - 1 : Number.POSITIVE_INFINITY\n let size = 0\n return start\n\n /** @type {State} */\n function start(code) {\n if (markdownSpace(code)) {\n effects.enter(type)\n return prefix(code)\n }\n return ok(code)\n }\n\n /** @type {State} */\n function prefix(code) {\n if (markdownSpace(code) && size++ < limit) {\n effects.consume(code)\n return prefix\n }\n effects.exit(type)\n return ok(code)\n }\n}\n","/**\n * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct\n * @typedef {import('micromark-util-types').Initializer} Initializer\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n */\n\nimport {factorySpace} from 'micromark-factory-space'\nimport {markdownLineEnding} from 'micromark-util-character'\n/** @type {InitialConstruct} */\nexport const content = {\n tokenize: initializeContent\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Initializer}\n */\nfunction initializeContent(effects) {\n const contentStart = effects.attempt(\n this.parser.constructs.contentInitial,\n afterContentStartConstruct,\n paragraphInitial\n )\n /** @type {Token} */\n let previous\n return contentStart\n\n /** @type {State} */\n function afterContentStartConstruct(code) {\n if (code === null) {\n effects.consume(code)\n return\n }\n effects.enter('lineEnding')\n effects.consume(code)\n effects.exit('lineEnding')\n return factorySpace(effects, contentStart, 'linePrefix')\n }\n\n /** @type {State} */\n function paragraphInitial(code) {\n effects.enter('paragraph')\n return lineStart(code)\n }\n\n /** @type {State} */\n function lineStart(code) {\n const token = effects.enter('chunkText', {\n contentType: 'text',\n previous\n })\n if (previous) {\n previous.next = token\n }\n previous = token\n return data(code)\n }\n\n /** @type {State} */\n function data(code) {\n if (code === null) {\n effects.exit('chunkText')\n effects.exit('paragraph')\n effects.consume(code)\n return\n }\n if (markdownLineEnding(code)) {\n effects.consume(code)\n effects.exit('chunkText')\n return lineStart\n }\n\n // Data.\n effects.consume(code)\n return data\n }\n}\n","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').ContainerState} ContainerState\n * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct\n * @typedef {import('micromark-util-types').Initializer} Initializer\n * @typedef {import('micromark-util-types').Point} Point\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\n/**\n * @typedef {[Construct, ContainerState]} StackItem\n */\n\nimport {factorySpace} from 'micromark-factory-space'\nimport {markdownLineEnding} from 'micromark-util-character'\nimport {splice} from 'micromark-util-chunked'\n/** @type {InitialConstruct} */\nexport const document = {\n tokenize: initializeDocument\n}\n\n/** @type {Construct} */\nconst containerConstruct = {\n tokenize: tokenizeContainer\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Initializer}\n */\nfunction initializeDocument(effects) {\n const self = this\n /** @type {Array<StackItem>} */\n const stack = []\n let continued = 0\n /** @type {TokenizeContext | undefined} */\n let childFlow\n /** @type {Token | undefined} */\n let childToken\n /** @type {number} */\n let lineStartOffset\n return start\n\n /** @type {State} */\n function start(code) {\n // First we iterate through the open blocks, starting with the root\n // document, and descending through last children down to the last open\n // block.\n // Each block imposes a condition that the line must satisfy if the block is\n // to remain open.\n // For example, a block quote requires a `>` character.\n // A paragraph requires a non-blank line.\n // In this phase we may match all or just some of the open blocks.\n // But we cannot close unmatched blocks yet, because we may have a lazy\n // continuation line.\n if (continued < stack.length) {\n const item = stack[continued]\n self.containerState = item[1]\n return effects.attempt(\n item[0].continuation,\n documentContinue,\n checkNewContainers\n )(code)\n }\n\n // Done.\n return checkNewContainers(code)\n }\n\n /** @type {State} */\n function documentContinue(code) {\n continued++\n\n // Note: this field is called `_closeFlow` but it also closes containers.\n // Perhaps a good idea to rename it but it’s already used in the wild by\n // extensions.\n if (self.containerState._closeFlow) {\n self.containerState._closeFlow = undefined\n if (childFlow) {\n closeFlow()\n }\n\n // Note: this algorithm for moving events around is similar to the\n // algorithm when dealing with lazy lines in `writeToChild`.\n const indexBeforeExits = self.events.length\n let indexBeforeFlow = indexBeforeExits\n /** @type {Point | undefined} */\n let point\n\n // Find the flow chunk.\n while (indexBeforeFlow--) {\n if (\n self.events[indexBeforeFlow][0] === 'exit' &&\n self.events[indexBeforeFlow][1].type === 'chunkFlow'\n ) {\n point = self.events[indexBeforeFlow][1].end\n break\n }\n }\n exitContainers(continued)\n\n // Fix positions.\n let index = indexBeforeExits\n while (index < self.events.length) {\n self.events[index][1].end = Object.assign({}, point)\n index++\n }\n\n // Inject the exits earlier (they’re still also at the end).\n splice(\n self.events,\n indexBeforeFlow + 1,\n 0,\n self.events.slice(indexBeforeExits)\n )\n\n // Discard the duplicate exits.\n self.events.length = index\n return checkNewContainers(code)\n }\n return start(code)\n }\n\n /** @type {State} */\n function checkNewContainers(code) {\n // Next, after consuming the continuation markers for existing blocks, we\n // look for new block starts (e.g. `>` for a block quote).\n // If we encounter a new block start, we close any blocks unmatched in\n // step 1 before creating the new block as a child of the last matched\n // block.\n if (continued === stack.length) {\n // No need to `check` whether there’s a container, of `exitContainers`\n // would be moot.\n // We can instead immediately `attempt` to parse one.\n if (!childFlow) {\n return documentContinued(code)\n }\n\n // If we have concrete content, such as block HTML or fenced code,\n // we can’t have containers “pierce” into them, so we can immediately\n // start.\n if (childFlow.currentConstruct && childFlow.currentConstruct.concrete) {\n return flowStart(code)\n }\n\n // If we do have flow, it could still be a blank line,\n // but we’d be interrupting it w/ a new container if there’s a current\n // construct.\n // To do: next major: remove `_gfmTableDynamicInterruptHack` (no longer\n // needed in micromark-extension-gfm-table@1.0.6).\n self.interrupt = Boolean(\n childFlow.currentConstruct && !childFlow._gfmTableDynamicInterruptHack\n )\n }\n\n // Check if there is a new container.\n self.containerState = {}\n return effects.check(\n containerConstruct,\n thereIsANewContainer,\n thereIsNoNewContainer\n )(code)\n }\n\n /** @type {State} */\n function thereIsANewContainer(code) {\n if (childFlow) closeFlow()\n exitContainers(continued)\n return documentContinued(code)\n }\n\n /** @type {State} */\n function thereIsNoNewContainer(code) {\n self.parser.lazy[self.now().line] = continued !== stack.length\n lineStartOffset = self.now().offset\n return flowStart(code)\n }\n\n /** @type {State} */\n function documentContinued(code) {\n // Try new containers.\n self.containerState = {}\n return effects.attempt(\n containerConstruct,\n containerContinue,\n flowStart\n )(code)\n }\n\n /** @type {State} */\n function containerContinue(code) {\n continued++\n stack.push([self.currentConstruct, self.containerState])\n // Try another.\n return documentContinued(code)\n }\n\n /** @type {State} */\n function flowStart(code) {\n if (code === null) {\n if (childFlow) closeFlow()\n exitContainers(0)\n effects.consume(code)\n return\n }\n childFlow = childFlow || self.parser.flow(self.now())\n effects.enter('chunkFlow', {\n contentType: 'flow',\n previous: childToken,\n _tokenizer: childFlow\n })\n return flowContinue(code)\n }\n\n /** @type {State} */\n function flowContinue(code) {\n if (code === null) {\n writeToChild(effects.exit('chunkFlow'), true)\n exitContainers(0)\n effects.consume(code)\n return\n }\n if (markdownLineEnding(code)) {\n effects.consume(code)\n writeToChild(effects.exit('chunkFlow'))\n // Get ready for the next line.\n continued = 0\n self.interrupt = undefined\n return start\n }\n effects.consume(code)\n return flowContinue\n }\n\n /**\n * @param {Token} token\n * @param {boolean | undefined} [eof]\n * @returns {undefined}\n */\n function writeToChild(token, eof) {\n const stream = self.sliceStream(token)\n if (eof) stream.push(null)\n token.previous = childToken\n if (childToken) childToken.next = token\n childToken = token\n childFlow.defineSkip(token.start)\n childFlow.write(stream)\n\n // Alright, so we just added a lazy line:\n //\n // ```markdown\n // > a\n // b.\n //\n // Or:\n //\n // > ~~~c\n // d\n //\n // Or:\n //\n // > | e |\n // f\n // ```\n //\n // The construct in the second example (fenced code) does not accept lazy\n // lines, so it marked itself as done at the end of its first line, and\n // then the content construct parses `d`.\n // Most constructs in markdown match on the first line: if the first line\n // forms a construct, a non-lazy line can’t “unmake” it.\n //\n // The construct in the third example is potentially a GFM table, and\n // those are *weird*.\n // It *could* be a table, from the first line, if the following line\n // matches a condition.\n // In this case, that second line is lazy, which “unmakes” the first line\n // and turns the whole into one content block.\n //\n // We’ve now parsed the non-lazy and the lazy line, and can figure out\n // whether the lazy line started a new flow block.\n // If it did, we exit the current containers between the two flow blocks.\n if (self.parser.lazy[token.start.line]) {\n let index = childFlow.events.length\n while (index--) {\n if (\n // The token starts before the line ending…\n childFlow.events[index][1].start.offset < lineStartOffset &&\n // …and either is not ended yet…\n (!childFlow.events[index][1].end ||\n // …or ends after it.\n childFlow.events[index][1].end.offset > lineStartOffset)\n ) {\n // Exit: there’s still something open, which means it’s a lazy line\n // part of something.\n return\n }\n }\n\n // Note: this algorithm for moving events around is similar to the\n // algorithm when closing flow in `documentContinue`.\n const indexBeforeExits = self.events.length\n let indexBeforeFlow = indexBeforeExits\n /** @type {boolean | undefined} */\n let seen\n /** @type {Point | undefined} */\n let point\n\n // Find the previous chunk (the one before the lazy line).\n while (indexBeforeFlow--) {\n if (\n self.events[indexBeforeFlow][0] === 'exit' &&\n self.events[indexBeforeFlow][1].type === 'chunkFlow'\n ) {\n if (seen) {\n point = self.events[indexBeforeFlow][1].end\n break\n }\n seen = true\n }\n }\n exitContainers(continued)\n\n // Fix positions.\n index = indexBeforeExits\n while (index < self.events.length) {\n self.events[index][1].end = Object.assign({}, point)\n index++\n }\n\n // Inject the exits earlier (they’re still also at the end).\n splice(\n self.events,\n indexBeforeFlow + 1,\n 0,\n self.events.slice(indexBeforeExits)\n )\n\n // Discard the duplicate exits.\n self.events.length = index\n }\n }\n\n /**\n * @param {number} size\n * @returns {undefined}\n */\n function exitContainers(size) {\n let index = stack.length\n\n // Exit open containers.\n while (index-- > size) {\n const entry = stack[index]\n self.containerState = entry[1]\n entry[0].exit.call(self, effects)\n }\n stack.length = size\n }\n function closeFlow() {\n childFlow.write([null])\n childToken = undefined\n childFlow = undefined\n self.containerState._closeFlow = undefined\n }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeContainer(effects, ok, nok) {\n // Always populated by defaults.\n\n return factorySpace(\n effects,\n effects.attempt(this.parser.constructs.document, ok, nok),\n 'linePrefix',\n this.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4\n )\n}\n","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding, markdownSpace } from 'micromark-util-character';\n/** @type {Construct} */\nexport const blankLine = {\n tokenize: tokenizeBlankLine,\n partial: true\n};\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeBlankLine(effects, ok, nok) {\n return start;\n\n /**\n * Start of blank line.\n *\n * > 👉 **Note**: `␠` represents a space character.\n *\n * ```markdown\n * > | ␠␠␊\n * ^\n * > | ␊\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n return markdownSpace(code) ? factorySpace(effects, after, \"linePrefix\")(code) : after(code);\n }\n\n /**\n * At eof/eol, after optional whitespace.\n *\n * > 👉 **Note**: `␠` represents a space character.\n *\n * ```markdown\n * > | ␠␠␊\n * ^\n * > | ␊\n * ^\n * ```\n *\n * @type {State}\n */\n function after(code) {\n return code === null || markdownLineEnding(code) ? ok(code) : nok(code);\n }\n}","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding } from 'micromark-util-character';\nimport { subtokenize } from 'micromark-util-subtokenize';\n/**\n * No name because it must not be turned off.\n * @type {Construct}\n */\nexport const content = {\n tokenize: tokenizeContent,\n resolve: resolveContent\n};\n\n/** @type {Construct} */\nconst continuationConstruct = {\n tokenize: tokenizeContinuation,\n partial: true\n};\n\n/**\n * Content is transparent: it’s parsed right now. That way, definitions are also\n * parsed right now: before text in paragraphs (specifically, media) are parsed.\n *\n * @type {Resolver}\n */\nfunction resolveContent(events) {\n subtokenize(events);\n return events;\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeContent(effects, ok) {\n /** @type {Token | undefined} */\n let previous;\n return chunkStart;\n\n /**\n * Before a content chunk.\n *\n * ```markdown\n * > | abc\n * ^\n * ```\n *\n * @type {State}\n */\n function chunkStart(code) {\n effects.enter(\"content\");\n previous = effects.enter(\"chunkContent\", {\n contentType: \"content\"\n });\n return chunkInside(code);\n }\n\n /**\n * In a content chunk.\n *\n * ```markdown\n * > | abc\n * ^^^\n * ```\n *\n * @type {State}\n */\n function chunkInside(code) {\n if (code === null) {\n return contentEnd(code);\n }\n\n // To do: in `markdown-rs`, each line is parsed on its own, and everything\n // is stitched together resolving.\n if (markdownLineEnding(code)) {\n return effects.check(continuationConstruct, contentContinue, contentEnd)(code);\n }\n\n // Data.\n effects.consume(code);\n return chunkInside;\n }\n\n /**\n *\n *\n * @type {State}\n */\n function contentEnd(code) {\n effects.exit(\"chunkContent\");\n effects.exit(\"content\");\n return ok(code);\n }\n\n /**\n *\n *\n * @type {State}\n */\n function contentContinue(code) {\n effects.consume(code);\n effects.exit(\"chunkContent\");\n previous.next = effects.enter(\"chunkContent\", {\n contentType: \"content\",\n previous\n });\n previous = previous.next;\n return chunkInside;\n }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeContinuation(effects, ok, nok) {\n const self = this;\n return startLookahead;\n\n /**\n *\n *\n * @type {State}\n */\n function startLookahead(code) {\n effects.exit(\"chunkContent\");\n effects.enter(\"lineEnding\");\n effects.consume(code);\n effects.exit(\"lineEnding\");\n return factorySpace(effects, prefixed, \"linePrefix\");\n }\n\n /**\n *\n *\n * @type {State}\n */\n function prefixed(code) {\n if (code === null || markdownLineEnding(code)) {\n return nok(code);\n }\n\n // Always populated by defaults.\n\n const tail = self.events[self.events.length - 1];\n if (!self.parser.constructs.disable.null.includes('codeIndented') && tail && tail[1].type === \"linePrefix\" && tail[2].sliceSerialize(tail[1], true).length >= 4) {\n return ok(code);\n }\n return effects.interrupt(self.parser.constructs.flow, nok, ok)(code);\n }\n}","/**\n * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct\n * @typedef {import('micromark-util-types').Initializer} Initializer\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n */\n\nimport {blankLine, content} from 'micromark-core-commonmark'\nimport {factorySpace} from 'micromark-factory-space'\nimport {markdownLineEnding} from 'micromark-util-character'\n/** @type {InitialConstruct} */\nexport const flow = {\n tokenize: initializeFlow\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Initializer}\n */\nfunction initializeFlow(effects) {\n const self = this\n const initial = effects.attempt(\n // Try to parse a blank line.\n blankLine,\n atBlankEnding,\n // Try to parse initial flow (essentially, only code).\n effects.attempt(\n this.parser.constructs.flowInitial,\n afterConstruct,\n factorySpace(\n effects,\n effects.attempt(\n this.parser.constructs.flow,\n afterConstruct,\n effects.attempt(content, afterConstruct)\n ),\n 'linePrefix'\n )\n )\n )\n return initial\n\n /** @type {State} */\n function atBlankEnding(code) {\n if (code === null) {\n effects.consume(code)\n return\n }\n effects.enter('lineEndingBlank')\n effects.consume(code)\n effects.exit('lineEndingBlank')\n self.currentConstruct = undefined\n return initial\n }\n\n /** @type {State} */\n function afterConstruct(code) {\n if (code === null) {\n effects.consume(code)\n return\n }\n effects.enter('lineEnding')\n effects.consume(code)\n effects.exit('lineEnding')\n self.currentConstruct = undefined\n return initial\n }\n}\n","/**\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct\n * @typedef {import('micromark-util-types').Initializer} Initializer\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n */\n\nexport const resolver = {\n resolveAll: createResolver()\n}\nexport const string = initializeFactory('string')\nexport const text = initializeFactory('text')\n\n/**\n * @param {'string' | 'text'} field\n * @returns {InitialConstruct}\n */\nfunction initializeFactory(field) {\n return {\n tokenize: initializeText,\n resolveAll: createResolver(\n field === 'text' ? resolveAllLineSuffixes : undefined\n )\n }\n\n /**\n * @this {TokenizeContext}\n * @type {Initializer}\n */\n function initializeText(effects) {\n const self = this\n const constructs = this.parser.constructs[field]\n const text = effects.attempt(constructs, start, notText)\n return start\n\n /** @type {State} */\n function start(code) {\n return atBreak(code) ? text(code) : notText(code)\n }\n\n /** @type {State} */\n function notText(code) {\n if (code === null) {\n effects.consume(code)\n return\n }\n effects.enter('data')\n effects.consume(code)\n return data\n }\n\n /** @type {State} */\n function data(code) {\n if (atBreak(code)) {\n effects.exit('data')\n return text(code)\n }\n\n // Data.\n effects.consume(code)\n return data\n }\n\n /**\n * @param {Code} code\n * @returns {boolean}\n */\n function atBreak(code) {\n if (code === null) {\n return true\n }\n const list = constructs[code]\n let index = -1\n if (list) {\n // Always populated by defaults.\n\n while (++index < list.length) {\n const item = list[index]\n if (!item.previous || item.previous.call(self, self.previous)) {\n return true\n }\n }\n }\n return false\n }\n }\n}\n\n/**\n * @param {Resolver | undefined} [extraResolver]\n * @returns {Resolver}\n */\nfunction createResolver(extraResolver) {\n return resolveAllText\n\n /** @type {Resolver} */\n function resolveAllText(events, context) {\n let index = -1\n /** @type {number | undefined} */\n let enter\n\n // A rather boring computation (to merge adjacent `data` events) which\n // improves mm performance by 29%.\n while (++index <= events.length) {\n if (enter === undefined) {\n if (events[index] && events[index][1].type === 'data') {\n enter = index\n index++\n }\n } else if (!events[index] || events[index][1].type !== 'data') {\n // Don’t do anything if there is one data token.\n if (index !== enter + 2) {\n events[enter][1].end = events[index - 1][1].end\n events.splice(enter + 2, index - enter - 2)\n index = enter + 2\n }\n enter = undefined\n }\n }\n return extraResolver ? extraResolver(events, context) : events\n }\n}\n\n/**\n * A rather ugly set of instructions which again looks at chunks in the input\n * stream.\n * The reason to do this here is that it is *much* faster to parse in reverse.\n * And that we can’t hook into `null` to split the line suffix before an EOF.\n * To do: figure out if we can make this into a clean utility, or even in core.\n * As it will be useful for GFMs literal autolink extension (and maybe even\n * tables?)\n *\n * @type {Resolver}\n */\nfunction resolveAllLineSuffixes(events, context) {\n let eventIndex = 0 // Skip first.\n\n while (++eventIndex <= events.length) {\n if (\n (eventIndex === events.length ||\n events[eventIndex][1].type === 'lineEnding') &&\n events[eventIndex - 1][1].type === 'data'\n ) {\n const data = events[eventIndex - 1][1]\n const chunks = context.sliceStream(data)\n let index = chunks.length\n let bufferIndex = -1\n let size = 0\n /** @type {boolean | undefined} */\n let tabs\n while (index--) {\n const chunk = chunks[index]\n if (typeof chunk === 'string') {\n bufferIndex = chunk.length\n while (chunk.charCodeAt(bufferIndex - 1) === 32) {\n size++\n bufferIndex--\n }\n if (bufferIndex) break\n bufferIndex = -1\n }\n // Number\n else if (chunk === -2) {\n tabs = true\n size++\n } else if (chunk === -1) {\n // Empty\n } else {\n // Replacement character, exit.\n index++\n break\n }\n }\n if (size) {\n const token = {\n type:\n eventIndex === events.length || tabs || size < 2\n ? 'lineSuffix'\n : 'hardBreakTrailing',\n start: {\n line: data.end.line,\n column: data.end.column - size,\n offset: data.end.offset - size,\n _index: data.start._index + index,\n _bufferIndex: index\n ? bufferIndex\n : data.start._bufferIndex + bufferIndex\n },\n end: Object.assign({}, data.end)\n }\n data.end = Object.assign({}, token.start)\n if (data.start.offset === data.end.offset) {\n Object.assign(data, token)\n } else {\n events.splice(\n eventIndex,\n 0,\n ['enter', token, context],\n ['exit', token, context]\n )\n eventIndex += 2\n }\n }\n eventIndex++\n }\n }\n return events\n}\n","/**\n * @typedef {import('micromark-util-types').Event} Event\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n */\n\n/**\n * Call all `resolveAll`s.\n *\n * @param {Array<{resolveAll?: Resolver | undefined}>} constructs\n * List of constructs, optionally with `resolveAll`s.\n * @param {Array<Event>} events\n * List of events.\n * @param {TokenizeContext} context\n * Context used by `tokenize`.\n * @returns {Array<Event>}\n * Changed events.\n */\nexport function resolveAll(constructs, events, context) {\n /** @type {Array<Resolver>} */\n const called = []\n let index = -1\n\n while (++index < constructs.length) {\n const resolve = constructs[index].resolveAll\n\n if (resolve && !called.includes(resolve)) {\n events = resolve(events, context)\n called.push(resolve)\n }\n }\n\n return events\n}\n","/**\n * @typedef {import('micromark-util-types').Chunk} Chunk\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').ConstructRecord} ConstructRecord\n * @typedef {import('micromark-util-types').Effects} Effects\n * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct\n * @typedef {import('micromark-util-types').ParseContext} ParseContext\n * @typedef {import('micromark-util-types').Point} Point\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').TokenType} TokenType\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n */\n\n/**\n * @callback Restore\n * @returns {undefined}\n *\n * @typedef Info\n * @property {Restore} restore\n * @property {number} from\n *\n * @callback ReturnHandle\n * Handle a successful run.\n * @param {Construct} construct\n * @param {Info} info\n * @returns {undefined}\n */\n\nimport {markdownLineEnding} from 'micromark-util-character'\nimport {push, splice} from 'micromark-util-chunked'\nimport {resolveAll} from 'micromark-util-resolve-all'\n/**\n * Create a tokenizer.\n * Tokenizers deal with one type of data (e.g., containers, flow, text).\n * The parser is the object dealing with it all.\n * `initialize` works like other constructs, except that only its `tokenize`\n * function is used, in which case it doesn’t receive an `ok` or `nok`.\n * `from` can be given to set the point before the first character, although\n * when further lines are indented, they must be set with `defineSkip`.\n *\n * @param {ParseContext} parser\n * @param {InitialConstruct} initialize\n * @param {Omit<Point, '_bufferIndex' | '_index'> | undefined} [from]\n * @returns {TokenizeContext}\n */\nexport function createTokenizer(parser, initialize, from) {\n /** @type {Point} */\n let point = Object.assign(\n from\n ? Object.assign({}, from)\n : {\n line: 1,\n column: 1,\n offset: 0\n },\n {\n _index: 0,\n _bufferIndex: -1\n }\n )\n /** @type {Record<string, number>} */\n const columnStart = {}\n /** @type {Array<Construct>} */\n const resolveAllConstructs = []\n /** @type {Array<Chunk>} */\n let chunks = []\n /** @type {Array<Token>} */\n let stack = []\n /** @type {boolean | undefined} */\n let consumed = true\n\n /**\n * Tools used for tokenizing.\n *\n * @type {Effects}\n */\n const effects = {\n consume,\n enter,\n exit,\n attempt: constructFactory(onsuccessfulconstruct),\n check: constructFactory(onsuccessfulcheck),\n interrupt: constructFactory(onsuccessfulcheck, {\n interrupt: true\n })\n }\n\n /**\n * State and tools for resolving and serializing.\n *\n * @type {TokenizeContext}\n */\n const context = {\n previous: null,\n code: null,\n containerState: {},\n events: [],\n parser,\n sliceStream,\n sliceSerialize,\n now,\n defineSkip,\n write\n }\n\n /**\n * The state function.\n *\n * @type {State | undefined}\n */\n let state = initialize.tokenize.call(context, effects)\n\n /**\n * Track which character we expect to be consumed, to catch bugs.\n *\n * @type {Code}\n */\n let expectedCode\n if (initialize.resolveAll) {\n resolveAllConstructs.push(initialize)\n }\n return context\n\n /** @type {TokenizeContext['write']} */\n function write(slice) {\n chunks = push(chunks, slice)\n main()\n\n // Exit if we’re not done, resolve might change stuff.\n if (chunks[chunks.length - 1] !== null) {\n return []\n }\n addResult(initialize, 0)\n\n // Otherwise, resolve, and exit.\n context.events = resolveAll(resolveAllConstructs, context.events, context)\n return context.events\n }\n\n //\n // Tools.\n //\n\n /** @type {TokenizeContext['sliceSerialize']} */\n function sliceSerialize(token, expandTabs) {\n return serializeChunks(sliceStream(token), expandTabs)\n }\n\n /** @type {TokenizeContext['sliceStream']} */\n function sliceStream(token) {\n return sliceChunks(chunks, token)\n }\n\n /** @type {TokenizeContext['now']} */\n function now() {\n // This is a hot path, so we clone manually instead of `Object.assign({}, point)`\n const {line, column, offset, _index, _bufferIndex} = point\n return {\n line,\n column,\n offset,\n _index,\n _bufferIndex\n }\n }\n\n /** @type {TokenizeContext['defineSkip']} */\n function defineSkip(value) {\n columnStart[value.line] = value.column\n accountForPotentialSkip()\n }\n\n //\n // State management.\n //\n\n /**\n * Main loop (note that `_index` and `_bufferIndex` in `point` are modified by\n * `consume`).\n * Here is where we walk through the chunks, which either include strings of\n * several characters, or numerical character codes.\n * The reason to do this in a loop instead of a call is so the stack can\n * drain.\n *\n * @returns {undefined}\n */\n function main() {\n /** @type {number} */\n let chunkIndex\n while (point._index < chunks.length) {\n const chunk = chunks[point._index]\n\n // If we’re in a buffer chunk, loop through it.\n if (typeof chunk === 'string') {\n chunkIndex = point._index\n if (point._bufferIndex < 0) {\n point._bufferIndex = 0\n }\n while (\n point._index === chunkIndex &&\n point._bufferIndex < chunk.length\n ) {\n go(chunk.charCodeAt(point._bufferIndex))\n }\n } else {\n go(chunk)\n }\n }\n }\n\n /**\n * Deal with one code.\n *\n * @param {Code} code\n * @returns {undefined}\n */\n function go(code) {\n consumed = undefined\n expectedCode = code\n state = state(code)\n }\n\n /** @type {Effects['consume']} */\n function consume(code) {\n if (markdownLineEnding(code)) {\n point.line++\n point.column = 1\n point.offset += code === -3 ? 2 : 1\n accountForPotentialSkip()\n } else if (code !== -1) {\n point.column++\n point.offset++\n }\n\n // Not in a string chunk.\n if (point._bufferIndex < 0) {\n point._index++\n } else {\n point._bufferIndex++\n\n // At end of string chunk.\n // @ts-expect-error Points w/ non-negative `_bufferIndex` reference\n // strings.\n if (point._bufferIndex === chunks[point._index].length) {\n point._bufferIndex = -1\n point._index++\n }\n }\n\n // Expose the previous character.\n context.previous = code\n\n // Mark as consumed.\n consumed = true\n }\n\n /** @type {Effects['enter']} */\n function enter(type, fields) {\n /** @type {Token} */\n // @ts-expect-error Patch instead of assign required fields to help GC.\n const token = fields || {}\n token.type = type\n token.start = now()\n context.events.push(['enter', token, context])\n stack.push(token)\n return token\n }\n\n /** @type {Effects['exit']} */\n function exit(type) {\n const token = stack.pop()\n token.end = now()\n context.events.push(['exit', token, context])\n return token\n }\n\n /**\n * Use results.\n *\n * @type {ReturnHandle}\n */\n function onsuccessfulconstruct(construct, info) {\n addResult(construct, info.from)\n }\n\n /**\n * Discard results.\n *\n * @type {ReturnHandle}\n */\n function onsuccessfulcheck(_, info) {\n info.restore()\n }\n\n /**\n * Factory to attempt/check/interrupt.\n *\n * @param {ReturnHandle} onreturn\n * @param {{interrupt?: boolean | undefined} | undefined} [fields]\n */\n function constructFactory(onreturn, fields) {\n return hook\n\n /**\n * Handle either an object mapping codes to constructs, a list of\n * constructs, or a single construct.\n *\n * @param {Array<Construct> | Construct | ConstructRecord} constructs\n * @param {State} returnState\n * @param {State | undefined} [bogusState]\n * @returns {State}\n */\n function hook(constructs, returnState, bogusState) {\n /** @type {Array<Construct>} */\n let listOfConstructs\n /** @type {number} */\n let constructIndex\n /** @type {Construct} */\n let currentConstruct\n /** @type {Info} */\n let info\n return Array.isArray(constructs) /* c8 ignore next 1 */\n ? handleListOfConstructs(constructs)\n : 'tokenize' in constructs\n ? // @ts-expect-error Looks like a construct.\n handleListOfConstructs([constructs])\n : handleMapOfConstructs(constructs)\n\n /**\n * Handle a list of construct.\n *\n * @param {ConstructRecord} map\n * @returns {State}\n */\n function handleMapOfConstructs(map) {\n return start\n\n /** @type {State} */\n function start(code) {\n const def = code !== null && map[code]\n const all = code !== null && map.null\n const list = [\n // To do: add more extension tests.\n /* c8 ignore next 2 */\n ...(Array.isArray(def) ? def : def ? [def] : []),\n ...(Array.isArray(all) ? all : all ? [all] : [])\n ]\n return handleListOfConstructs(list)(code)\n }\n }\n\n /**\n * Handle a list of construct.\n *\n * @param {Array<Construct>} list\n * @returns {State}\n */\n function handleListOfConstructs(list) {\n listOfConstructs = list\n constructIndex = 0\n if (list.length === 0) {\n return bogusState\n }\n return handleConstruct(list[constructIndex])\n }\n\n /**\n * Handle a single construct.\n *\n * @param {Construct} construct\n * @returns {State}\n */\n function handleConstruct(construct) {\n return start\n\n /** @type {State} */\n function start(code) {\n // To do: not needed to store if there is no bogus state, probably?\n // Currently doesn’t work because `inspect` in document does a check\n // w/o a bogus, which doesn’t make sense. But it does seem to help perf\n // by not storing.\n info = store()\n currentConstruct = construct\n if (!construct.partial) {\n context.currentConstruct = construct\n }\n\n // Always populated by defaults.\n\n if (\n construct.name &&\n context.parser.constructs.disable.null.includes(construct.name)\n ) {\n return nok(code)\n }\n return construct.tokenize.call(\n // If we do have fields, create an object w/ `context` as its\n // prototype.\n // This allows a “live binding”, which is needed for `interrupt`.\n fields ? Object.assign(Object.create(context), fields) : context,\n effects,\n ok,\n nok\n )(code)\n }\n }\n\n /** @type {State} */\n function ok(code) {\n consumed = true\n onreturn(currentConstruct, info)\n return returnState\n }\n\n /** @type {State} */\n function nok(code) {\n consumed = true\n info.restore()\n if (++constructIndex < listOfConstructs.length) {\n return handleConstruct(listOfConstructs[constructIndex])\n }\n return bogusState\n }\n }\n }\n\n /**\n * @param {Construct} construct\n * @param {number} from\n * @returns {undefined}\n */\n function addResult(construct, from) {\n if (construct.resolveAll && !resolveAllConstructs.includes(construct)) {\n resolveAllConstructs.push(construct)\n }\n if (construct.resolve) {\n splice(\n context.events,\n from,\n context.events.length - from,\n construct.resolve(context.events.slice(from), context)\n )\n }\n if (construct.resolveTo) {\n context.events = construct.resolveTo(context.events, context)\n }\n }\n\n /**\n * Store state.\n *\n * @returns {Info}\n */\n function store() {\n const startPoint = now()\n const startPrevious = context.previous\n const startCurrentConstruct = context.currentConstruct\n const startEventsIndex = context.events.length\n const startStack = Array.from(stack)\n return {\n restore,\n from: startEventsIndex\n }\n\n /**\n * Restore state.\n *\n * @returns {undefined}\n */\n function restore() {\n point = startPoint\n context.previous = startPrevious\n context.currentConstruct = startCurrentConstruct\n context.events.length = startEventsIndex\n stack = startStack\n accountForPotentialSkip()\n }\n }\n\n /**\n * Move the current point a bit forward in the line when it’s on a column\n * skip.\n *\n * @returns {undefined}\n */\n function accountForPotentialSkip() {\n if (point.line in columnStart && point.column < 2) {\n point.column = columnStart[point.line]\n point.offset += columnStart[point.line] - 1\n }\n }\n}\n\n/**\n * Get the chunks from a slice of chunks in the range of a token.\n *\n * @param {Array<Chunk>} chunks\n * @param {Pick<Token, 'end' | 'start'>} token\n * @returns {Array<Chunk>}\n */\nfunction sliceChunks(chunks, token) {\n const startIndex = token.start._index\n const startBufferIndex = token.start._bufferIndex\n const endIndex = token.end._index\n const endBufferIndex = token.end._bufferIndex\n /** @type {Array<Chunk>} */\n let view\n if (startIndex === endIndex) {\n // @ts-expect-error `_bufferIndex` is used on string chunks.\n view = [chunks[startIndex].slice(startBufferIndex, endBufferIndex)]\n } else {\n view = chunks.slice(startIndex, endIndex)\n if (startBufferIndex > -1) {\n const head = view[0]\n if (typeof head === 'string') {\n view[0] = head.slice(startBufferIndex)\n } else {\n view.shift()\n }\n }\n if (endBufferIndex > 0) {\n // @ts-expect-error `_bufferIndex` is used on string chunks.\n view.push(chunks[endIndex].slice(0, endBufferIndex))\n }\n }\n return view\n}\n\n/**\n * Get the string value of a slice of chunks.\n *\n * @param {Array<Chunk>} chunks\n * @param {boolean | undefined} [expandTabs=false]\n * @returns {string}\n */\nfunction serializeChunks(chunks, expandTabs) {\n let index = -1\n /** @type {Array<string>} */\n const result = []\n /** @type {boolean | undefined} */\n let atTab\n while (++index < chunks.length) {\n const chunk = chunks[index]\n /** @type {string} */\n let value\n if (typeof chunk === 'string') {\n value = chunk\n } else\n switch (chunk) {\n case -5: {\n value = '\\r'\n break\n }\n case -4: {\n value = '\\n'\n break\n }\n case -3: {\n value = '\\r' + '\\n'\n break\n }\n case -2: {\n value = expandTabs ? ' ' : '\\t'\n break\n }\n case -1: {\n if (!expandTabs && atTab) continue\n value = ' '\n break\n }\n default: {\n // Currently only replacement character.\n value = String.fromCharCode(chunk)\n }\n }\n atTab = chunk === -2\n result.push(value)\n }\n return result.join('')\n}\n","/**\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding, markdownSpace } from 'micromark-util-character';\n/** @type {Construct} */\nexport const thematicBreak = {\n name: 'thematicBreak',\n tokenize: tokenizeThematicBreak\n};\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeThematicBreak(effects, ok, nok) {\n let size = 0;\n /** @type {NonNullable<Code>} */\n let marker;\n return start;\n\n /**\n * Start of thematic break.\n *\n * ```markdown\n * > | ***\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n effects.enter(\"thematicBreak\");\n // To do: parse indent like `markdown-rs`.\n return before(code);\n }\n\n /**\n * After optional whitespace, at marker.\n *\n * ```markdown\n * > | ***\n * ^\n * ```\n *\n * @type {State}\n */\n function before(code) {\n marker = code;\n return atBreak(code);\n }\n\n /**\n * After something, before something else.\n *\n * ```markdown\n * > | ***\n * ^\n * ```\n *\n * @type {State}\n */\n function atBreak(code) {\n if (code === marker) {\n effects.enter(\"thematicBreakSequence\");\n return sequence(code);\n }\n if (size >= 3 && (code === null || markdownLineEnding(code))) {\n effects.exit(\"thematicBreak\");\n return ok(code);\n }\n return nok(code);\n }\n\n /**\n * In sequence.\n *\n * ```markdown\n * > | ***\n * ^\n * ```\n *\n * @type {State}\n */\n function sequence(code) {\n if (code === marker) {\n effects.consume(code);\n size++;\n return sequence;\n }\n effects.exit(\"thematicBreakSequence\");\n return markdownSpace(code) ? factorySpace(effects, atBreak, \"whitespace\")(code) : atBreak(code);\n }\n}","/**\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').ContainerState} ContainerState\n * @typedef {import('micromark-util-types').Exiter} Exiter\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { asciiDigit, markdownSpace } from 'micromark-util-character';\nimport { blankLine } from './blank-line.js';\nimport { thematicBreak } from './thematic-break.js';\n\n/** @type {Construct} */\nexport const list = {\n name: 'list',\n tokenize: tokenizeListStart,\n continuation: {\n tokenize: tokenizeListContinuation\n },\n exit: tokenizeListEnd\n};\n\n/** @type {Construct} */\nconst listItemPrefixWhitespaceConstruct = {\n tokenize: tokenizeListItemPrefixWhitespace,\n partial: true\n};\n\n/** @type {Construct} */\nconst indentConstruct = {\n tokenize: tokenizeIndent,\n partial: true\n};\n\n// To do: `markdown-rs` parses list items on their own and later stitches them\n// together.\n\n/**\n * @type {Tokenizer}\n * @this {TokenizeContext}\n */\nfunction tokenizeListStart(effects, ok, nok) {\n const self = this;\n const tail = self.events[self.events.length - 1];\n let initialSize = tail && tail[1].type === \"linePrefix\" ? tail[2].sliceSerialize(tail[1], true).length : 0;\n let size = 0;\n return start;\n\n /** @type {State} */\n function start(code) {\n const kind = self.containerState.type || (code === 42 || code === 43 || code === 45 ? \"listUnordered\" : \"listOrdered\");\n if (kind === \"listUnordered\" ? !self.containerState.marker || code === self.containerState.marker : asciiDigit(code)) {\n if (!self.containerState.type) {\n self.containerState.type = kind;\n effects.enter(kind, {\n _container: true\n });\n }\n if (kind === \"listUnordered\") {\n effects.enter(\"listItemPrefix\");\n return code === 42 || code === 45 ? effects.check(thematicBreak, nok, atMarker)(code) : atMarker(code);\n }\n if (!self.interrupt || code === 49) {\n effects.enter(\"listItemPrefix\");\n effects.enter(\"listItemValue\");\n return inside(code);\n }\n }\n return nok(code);\n }\n\n /** @type {State} */\n function inside(code) {\n if (asciiDigit(code) && ++size < 10) {\n effects.consume(code);\n return inside;\n }\n if ((!self.interrupt || size < 2) && (self.containerState.marker ? code === self.containerState.marker : code === 41 || code === 46)) {\n effects.exit(\"listItemValue\");\n return atMarker(code);\n }\n return nok(code);\n }\n\n /**\n * @type {State}\n **/\n function atMarker(code) {\n effects.enter(\"listItemMarker\");\n effects.consume(code);\n effects.exit(\"listItemMarker\");\n self.containerState.marker = self.containerState.marker || code;\n return effects.check(blankLine,\n // Can’t be empty when interrupting.\n self.interrupt ? nok : onBlank, effects.attempt(listItemPrefixWhitespaceConstruct, endOfPrefix, otherPrefix));\n }\n\n /** @type {State} */\n function onBlank(code) {\n self.containerState.initialBlankLine = true;\n initialSize++;\n return endOfPrefix(code);\n }\n\n /** @type {State} */\n function otherPrefix(code) {\n if (markdownSpace(code)) {\n effects.enter(\"listItemPrefixWhitespace\");\n effects.consume(code);\n effects.exit(\"listItemPrefixWhitespace\");\n return endOfPrefix;\n }\n return nok(code);\n }\n\n /** @type {State} */\n function endOfPrefix(code) {\n self.containerState.size = initialSize + self.sliceSerialize(effects.exit(\"listItemPrefix\"), true).length;\n return ok(code);\n }\n}\n\n/**\n * @type {Tokenizer}\n * @this {TokenizeContext}\n */\nfunction tokenizeListContinuation(effects, ok, nok) {\n const self = this;\n self.containerState._closeFlow = undefined;\n return effects.check(blankLine, onBlank, notBlank);\n\n /** @type {State} */\n function onBlank(code) {\n self.containerState.furtherBlankLines = self.containerState.furtherBlankLines || self.containerState.initialBlankLine;\n\n // We have a blank line.\n // Still, try to consume at most the items size.\n return factorySpace(effects, ok, \"listItemIndent\", self.containerState.size + 1)(code);\n }\n\n /** @type {State} */\n function notBlank(code) {\n if (self.containerState.furtherBlankLines || !markdownSpace(code)) {\n self.containerState.furtherBlankLines = undefined;\n self.containerState.initialBlankLine = undefined;\n return notInCurrentItem(code);\n }\n self.containerState.furtherBlankLines = undefined;\n self.containerState.initialBlankLine = undefined;\n return effects.attempt(indentConstruct, ok, notInCurrentItem)(code);\n }\n\n /** @type {State} */\n function notInCurrentItem(code) {\n // While we do continue, we signal that the flow should be closed.\n self.containerState._closeFlow = true;\n // As we’re closing flow, we’re no longer interrupting.\n self.interrupt = undefined;\n // Always populated by defaults.\n\n return factorySpace(effects, effects.attempt(list, ok, nok), \"linePrefix\", self.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4)(code);\n }\n}\n\n/**\n * @type {Tokenizer}\n * @this {TokenizeContext}\n */\nfunction tokenizeIndent(effects, ok, nok) {\n const self = this;\n return factorySpace(effects, afterPrefix, \"listItemIndent\", self.containerState.size + 1);\n\n /** @type {State} */\n function afterPrefix(code) {\n const tail = self.events[self.events.length - 1];\n return tail && tail[1].type === \"listItemIndent\" && tail[2].sliceSerialize(tail[1], true).length === self.containerState.size ? ok(code) : nok(code);\n }\n}\n\n/**\n * @type {Exiter}\n * @this {TokenizeContext}\n */\nfunction tokenizeListEnd(effects) {\n effects.exit(this.containerState.type);\n}\n\n/**\n * @type {Tokenizer}\n * @this {TokenizeContext}\n */\nfunction tokenizeListItemPrefixWhitespace(effects, ok, nok) {\n const self = this;\n\n // Always populated by defaults.\n\n return factorySpace(effects, afterPrefix, \"listItemPrefixWhitespace\", self.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4 + 1);\n\n /** @type {State} */\n function afterPrefix(code) {\n const tail = self.events[self.events.length - 1];\n return !markdownSpace(code) && tail && tail[1].type === \"listItemPrefixWhitespace\" ? ok(code) : nok(code);\n }\n}","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Exiter} Exiter\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownSpace } from 'micromark-util-character';\n/** @type {Construct} */\nexport const blockQuote = {\n name: 'blockQuote',\n tokenize: tokenizeBlockQuoteStart,\n continuation: {\n tokenize: tokenizeBlockQuoteContinuation\n },\n exit\n};\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeBlockQuoteStart(effects, ok, nok) {\n const self = this;\n return start;\n\n /**\n * Start of block quote.\n *\n * ```markdown\n * > | > a\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n if (code === 62) {\n const state = self.containerState;\n if (!state.open) {\n effects.enter(\"blockQuote\", {\n _container: true\n });\n state.open = true;\n }\n effects.enter(\"blockQuotePrefix\");\n effects.enter(\"blockQuoteMarker\");\n effects.consume(code);\n effects.exit(\"blockQuoteMarker\");\n return after;\n }\n return nok(code);\n }\n\n /**\n * After `>`, before optional whitespace.\n *\n * ```markdown\n * > | > a\n * ^\n * ```\n *\n * @type {State}\n */\n function after(code) {\n if (markdownSpace(code)) {\n effects.enter(\"blockQuotePrefixWhitespace\");\n effects.consume(code);\n effects.exit(\"blockQuotePrefixWhitespace\");\n effects.exit(\"blockQuotePrefix\");\n return ok;\n }\n effects.exit(\"blockQuotePrefix\");\n return ok(code);\n }\n}\n\n/**\n * Start of block quote continuation.\n *\n * ```markdown\n * | > a\n * > | > b\n * ^\n * ```\n *\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeBlockQuoteContinuation(effects, ok, nok) {\n const self = this;\n return contStart;\n\n /**\n * Start of block quote continuation.\n *\n * Also used to parse the first block quote opening.\n *\n * ```markdown\n * | > a\n * > | > b\n * ^\n * ```\n *\n * @type {State}\n */\n function contStart(code) {\n if (markdownSpace(code)) {\n // Always populated by defaults.\n\n return factorySpace(effects, contBefore, \"linePrefix\", self.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4)(code);\n }\n return contBefore(code);\n }\n\n /**\n * At `>`, after optional whitespace.\n *\n * Also used to parse the first block quote opening.\n *\n * ```markdown\n * | > a\n * > | > b\n * ^\n * ```\n *\n * @type {State}\n */\n function contBefore(code) {\n return effects.attempt(blockQuote, ok, nok)(code);\n }\n}\n\n/** @type {Exiter} */\nfunction exit(effects) {\n effects.exit(\"blockQuote\");\n}","/**\n * @typedef {import('micromark-util-types').Effects} Effects\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenType} TokenType\n */\n\nimport {\n asciiControl,\n markdownLineEndingOrSpace,\n markdownLineEnding\n} from 'micromark-util-character'\n/**\n * Parse destinations.\n *\n * ###### Examples\n *\n * ```markdown\n * <a>\n * <a\\>b>\n * <a b>\n * <a)>\n * a\n * a\\)b\n * a(b)c\n * a(b)\n * ```\n *\n * @param {Effects} effects\n * Context.\n * @param {State} ok\n * State switched to when successful.\n * @param {State} nok\n * State switched to when unsuccessful.\n * @param {TokenType} type\n * Type for whole (`<a>` or `b`).\n * @param {TokenType} literalType\n * Type when enclosed (`<a>`).\n * @param {TokenType} literalMarkerType\n * Type for enclosing (`<` and `>`).\n * @param {TokenType} rawType\n * Type when not enclosed (`b`).\n * @param {TokenType} stringType\n * Type for the value (`a` or `b`).\n * @param {number | undefined} [max=Infinity]\n * Depth of nested parens (inclusive).\n * @returns {State}\n * Start state.\n */ // eslint-disable-next-line max-params\nexport function factoryDestination(\n effects,\n ok,\n nok,\n type,\n literalType,\n literalMarkerType,\n rawType,\n stringType,\n max\n) {\n const limit = max || Number.POSITIVE_INFINITY\n let balance = 0\n return start\n\n /**\n * Start of destination.\n *\n * ```markdown\n * > | <aa>\n * ^\n * > | aa\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n if (code === 60) {\n effects.enter(type)\n effects.enter(literalType)\n effects.enter(literalMarkerType)\n effects.consume(code)\n effects.exit(literalMarkerType)\n return enclosedBefore\n }\n\n // ASCII control, space, closing paren.\n if (code === null || code === 32 || code === 41 || asciiControl(code)) {\n return nok(code)\n }\n effects.enter(type)\n effects.enter(rawType)\n effects.enter(stringType)\n effects.enter('chunkString', {\n contentType: 'string'\n })\n return raw(code)\n }\n\n /**\n * After `<`, at an enclosed destination.\n *\n * ```markdown\n * > | <aa>\n * ^\n * ```\n *\n * @type {State}\n */\n function enclosedBefore(code) {\n if (code === 62) {\n effects.enter(literalMarkerType)\n effects.consume(code)\n effects.exit(literalMarkerType)\n effects.exit(literalType)\n effects.exit(type)\n return ok\n }\n effects.enter(stringType)\n effects.enter('chunkString', {\n contentType: 'string'\n })\n return enclosed(code)\n }\n\n /**\n * In enclosed destination.\n *\n * ```markdown\n * > | <aa>\n * ^\n * ```\n *\n * @type {State}\n */\n function enclosed(code) {\n if (code === 62) {\n effects.exit('chunkString')\n effects.exit(stringType)\n return enclosedBefore(code)\n }\n if (code === null || code === 60 || markdownLineEnding(code)) {\n return nok(code)\n }\n effects.consume(code)\n return code === 92 ? enclosedEscape : enclosed\n }\n\n /**\n * After `\\`, at a special character.\n *\n * ```markdown\n * > | <a\\*a>\n * ^\n * ```\n *\n * @type {State}\n */\n function enclosedEscape(code) {\n if (code === 60 || code === 62 || code === 92) {\n effects.consume(code)\n return enclosed\n }\n return enclosed(code)\n }\n\n /**\n * In raw destination.\n *\n * ```markdown\n * > | aa\n * ^\n * ```\n *\n * @type {State}\n */\n function raw(code) {\n if (\n !balance &&\n (code === null || code === 41 || markdownLineEndingOrSpace(code))\n ) {\n effects.exit('chunkString')\n effects.exit(stringType)\n effects.exit(rawType)\n effects.exit(type)\n return ok(code)\n }\n if (balance < limit && code === 40) {\n effects.consume(code)\n balance++\n return raw\n }\n if (code === 41) {\n effects.consume(code)\n balance--\n return raw\n }\n\n // ASCII control (but *not* `\\0`) and space and `(`.\n // Note: in `markdown-rs`, `\\0` exists in codes, in `micromark-js` it\n // doesn’t.\n if (code === null || code === 32 || code === 40 || asciiControl(code)) {\n return nok(code)\n }\n effects.consume(code)\n return code === 92 ? rawEscape : raw\n }\n\n /**\n * After `\\`, at special character.\n *\n * ```markdown\n * > | a\\*a\n * ^\n * ```\n *\n * @type {State}\n */\n function rawEscape(code) {\n if (code === 40 || code === 41 || code === 92) {\n effects.consume(code)\n return raw\n }\n return raw(code)\n }\n}\n","/**\n * @typedef {import('micromark-util-types').Effects} Effects\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').TokenType} TokenType\n */\n\nimport {markdownLineEnding, markdownSpace} from 'micromark-util-character'\n/**\n * Parse labels.\n *\n * > 👉 **Note**: labels in markdown are capped at 999 characters in the string.\n *\n * ###### Examples\n *\n * ```markdown\n * [a]\n * [a\n * b]\n * [a\\]b]\n * ```\n *\n * @this {TokenizeContext}\n * Tokenize context.\n * @param {Effects} effects\n * Context.\n * @param {State} ok\n * State switched to when successful.\n * @param {State} nok\n * State switched to when unsuccessful.\n * @param {TokenType} type\n * Type of the whole label (`[a]`).\n * @param {TokenType} markerType\n * Type for the markers (`[` and `]`).\n * @param {TokenType} stringType\n * Type for the identifier (`a`).\n * @returns {State}\n * Start state.\n */ // eslint-disable-next-line max-params\nexport function factoryLabel(effects, ok, nok, type, markerType, stringType) {\n const self = this\n let size = 0\n /** @type {boolean} */\n let seen\n return start\n\n /**\n * Start of label.\n *\n * ```markdown\n * > | [a]\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n effects.enter(type)\n effects.enter(markerType)\n effects.consume(code)\n effects.exit(markerType)\n effects.enter(stringType)\n return atBreak\n }\n\n /**\n * In label, at something, before something else.\n *\n * ```markdown\n * > | [a]\n * ^\n * ```\n *\n * @type {State}\n */\n function atBreak(code) {\n if (\n size > 999 ||\n code === null ||\n code === 91 ||\n (code === 93 && !seen) ||\n // To do: remove in the future once we’ve switched from\n // `micromark-extension-footnote` to `micromark-extension-gfm-footnote`,\n // which doesn’t need this.\n // Hidden footnotes hook.\n /* c8 ignore next 3 */\n (code === 94 &&\n !size &&\n '_hiddenFootnoteSupport' in self.parser.constructs)\n ) {\n return nok(code)\n }\n if (code === 93) {\n effects.exit(stringType)\n effects.enter(markerType)\n effects.consume(code)\n effects.exit(markerType)\n effects.exit(type)\n return ok\n }\n\n // To do: indent? Link chunks and EOLs together?\n if (markdownLineEnding(code)) {\n effects.enter('lineEnding')\n effects.consume(code)\n effects.exit('lineEnding')\n return atBreak\n }\n effects.enter('chunkString', {\n contentType: 'string'\n })\n return labelInside(code)\n }\n\n /**\n * In label, in text.\n *\n * ```markdown\n * > | [a]\n * ^\n * ```\n *\n * @type {State}\n */\n function labelInside(code) {\n if (\n code === null ||\n code === 91 ||\n code === 93 ||\n markdownLineEnding(code) ||\n size++ > 999\n ) {\n effects.exit('chunkString')\n return atBreak(code)\n }\n effects.consume(code)\n if (!seen) seen = !markdownSpace(code)\n return code === 92 ? labelEscape : labelInside\n }\n\n /**\n * After `\\`, at a special character.\n *\n * ```markdown\n * > | [a\\*a]\n * ^\n * ```\n *\n * @type {State}\n */\n function labelEscape(code) {\n if (code === 91 || code === 92 || code === 93) {\n effects.consume(code)\n size++\n return labelInside\n }\n return labelInside(code)\n }\n}\n","/**\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').Effects} Effects\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenType} TokenType\n */\n\nimport {factorySpace} from 'micromark-factory-space'\nimport {markdownLineEnding} from 'micromark-util-character'\n/**\n * Parse titles.\n *\n * ###### Examples\n *\n * ```markdown\n * \"a\"\n * 'b'\n * (c)\n * \"a\n * b\"\n * 'a\n * b'\n * (a\\)b)\n * ```\n *\n * @param {Effects} effects\n * Context.\n * @param {State} ok\n * State switched to when successful.\n * @param {State} nok\n * State switched to when unsuccessful.\n * @param {TokenType} type\n * Type of the whole title (`\"a\"`, `'b'`, `(c)`).\n * @param {TokenType} markerType\n * Type for the markers (`\"`, `'`, `(`, and `)`).\n * @param {TokenType} stringType\n * Type for the value (`a`).\n * @returns {State}\n * Start state.\n */ // eslint-disable-next-line max-params\nexport function factoryTitle(effects, ok, nok, type, markerType, stringType) {\n /** @type {NonNullable<Code>} */\n let marker\n return start\n\n /**\n * Start of title.\n *\n * ```markdown\n * > | \"a\"\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n if (code === 34 || code === 39 || code === 40) {\n effects.enter(type)\n effects.enter(markerType)\n effects.consume(code)\n effects.exit(markerType)\n marker = code === 40 ? 41 : code\n return begin\n }\n return nok(code)\n }\n\n /**\n * After opening marker.\n *\n * This is also used at the closing marker.\n *\n * ```markdown\n * > | \"a\"\n * ^\n * ```\n *\n * @type {State}\n */\n function begin(code) {\n if (code === marker) {\n effects.enter(markerType)\n effects.consume(code)\n effects.exit(markerType)\n effects.exit(type)\n return ok\n }\n effects.enter(stringType)\n return atBreak(code)\n }\n\n /**\n * At something, before something else.\n *\n * ```markdown\n * > | \"a\"\n * ^\n * ```\n *\n * @type {State}\n */\n function atBreak(code) {\n if (code === marker) {\n effects.exit(stringType)\n return begin(marker)\n }\n if (code === null) {\n return nok(code)\n }\n\n // Note: blank lines can’t exist in content.\n if (markdownLineEnding(code)) {\n // To do: use `space_or_tab_eol_with_options`, connect.\n effects.enter('lineEnding')\n effects.consume(code)\n effects.exit('lineEnding')\n return factorySpace(effects, atBreak, 'linePrefix')\n }\n effects.enter('chunkString', {\n contentType: 'string'\n })\n return inside(code)\n }\n\n /**\n *\n *\n * @type {State}\n */\n function inside(code) {\n if (code === marker || code === null || markdownLineEnding(code)) {\n effects.exit('chunkString')\n return atBreak(code)\n }\n effects.consume(code)\n return code === 92 ? escape : inside\n }\n\n /**\n * After `\\`, at a special character.\n *\n * ```markdown\n * > | \"a\\*b\"\n * ^\n * ```\n *\n * @type {State}\n */\n function escape(code) {\n if (code === marker || code === 92) {\n effects.consume(code)\n return inside\n }\n return inside(code)\n }\n}\n","/**\n * @typedef {import('micromark-util-types').Effects} Effects\n * @typedef {import('micromark-util-types').State} State\n */\n\nimport {factorySpace} from 'micromark-factory-space'\nimport {markdownLineEnding, markdownSpace} from 'micromark-util-character'\n/**\n * Parse spaces and tabs.\n *\n * There is no `nok` parameter:\n *\n * * line endings or spaces in markdown are often optional, in which case this\n * factory can be used and `ok` will be switched to whether spaces were found\n * or not\n * * one line ending or space can be detected with\n * `markdownLineEndingOrSpace(code)` right before using `factoryWhitespace`\n *\n * @param {Effects} effects\n * Context.\n * @param {State} ok\n * State switched to when successful.\n * @returns {State}\n * Start state.\n */\nexport function factoryWhitespace(effects, ok) {\n /** @type {boolean} */\n let seen\n return start\n\n /** @type {State} */\n function start(code) {\n if (markdownLineEnding(code)) {\n effects.enter('lineEnding')\n effects.consume(code)\n effects.exit('lineEnding')\n seen = true\n return start\n }\n if (markdownSpace(code)) {\n return factorySpace(\n effects,\n start,\n seen ? 'linePrefix' : 'lineSuffix'\n )(code)\n }\n return ok(code)\n }\n}\n","/**\n * Normalize an identifier (as found in references, definitions).\n *\n * Collapses markdown whitespace, trim, and then lower- and uppercase.\n *\n * Some characters are considered “uppercase”, such as U+03F4 (`ϴ`), but if their\n * lowercase counterpart (U+03B8 (`θ`)) is uppercased will result in a different\n * uppercase character (U+0398 (`Θ`)).\n * So, to get a canonical form, we perform both lower- and uppercase.\n *\n * Using uppercase last makes sure keys will never interact with default\n * prototypal values (such as `constructor`): nothing in the prototype of\n * `Object` is uppercase.\n *\n * @param {string} value\n * Identifier to normalize.\n * @returns {string}\n * Normalized identifier.\n */\nexport function normalizeIdentifier(value) {\n return (\n value\n // Collapse markdown whitespace.\n .replace(/[\\t\\n\\r ]+/g, ' ')\n // Trim.\n .replace(/^ | $/g, '')\n // Some characters are considered “uppercase”, but if their lowercase\n // counterpart is uppercased will result in a different uppercase\n // character.\n // Hence, to get that form, we perform both lower- and uppercase.\n // Upper case makes sure keys will not interact with default prototypal\n // methods: no method is uppercase.\n .toLowerCase()\n .toUpperCase()\n )\n}\n","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport { factoryDestination } from 'micromark-factory-destination';\nimport { factoryLabel } from 'micromark-factory-label';\nimport { factorySpace } from 'micromark-factory-space';\nimport { factoryTitle } from 'micromark-factory-title';\nimport { factoryWhitespace } from 'micromark-factory-whitespace';\nimport { markdownLineEnding, markdownLineEndingOrSpace, markdownSpace } from 'micromark-util-character';\nimport { normalizeIdentifier } from 'micromark-util-normalize-identifier';\n/** @type {Construct} */\nexport const definition = {\n name: 'definition',\n tokenize: tokenizeDefinition\n};\n\n/** @type {Construct} */\nconst titleBefore = {\n tokenize: tokenizeTitleBefore,\n partial: true\n};\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeDefinition(effects, ok, nok) {\n const self = this;\n /** @type {string} */\n let identifier;\n return start;\n\n /**\n * At start of a definition.\n *\n * ```markdown\n * > | [a]: b \"c\"\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n // Do not interrupt paragraphs (but do follow definitions).\n // To do: do `interrupt` the way `markdown-rs` does.\n // To do: parse whitespace the way `markdown-rs` does.\n effects.enter(\"definition\");\n return before(code);\n }\n\n /**\n * After optional whitespace, at `[`.\n *\n * ```markdown\n * > | [a]: b \"c\"\n * ^\n * ```\n *\n * @type {State}\n */\n function before(code) {\n // To do: parse whitespace the way `markdown-rs` does.\n\n return factoryLabel.call(self, effects, labelAfter,\n // Note: we don’t need to reset the way `markdown-rs` does.\n nok, \"definitionLabel\", \"definitionLabelMarker\", \"definitionLabelString\")(code);\n }\n\n /**\n * After label.\n *\n * ```markdown\n * > | [a]: b \"c\"\n * ^\n * ```\n *\n * @type {State}\n */\n function labelAfter(code) {\n identifier = normalizeIdentifier(self.sliceSerialize(self.events[self.events.length - 1][1]).slice(1, -1));\n if (code === 58) {\n effects.enter(\"definitionMarker\");\n effects.consume(code);\n effects.exit(\"definitionMarker\");\n return markerAfter;\n }\n return nok(code);\n }\n\n /**\n * After marker.\n *\n * ```markdown\n * > | [a]: b \"c\"\n * ^\n * ```\n *\n * @type {State}\n */\n function markerAfter(code) {\n // Note: whitespace is optional.\n return markdownLineEndingOrSpace(code) ? factoryWhitespace(effects, destinationBefore)(code) : destinationBefore(code);\n }\n\n /**\n * Before destination.\n *\n * ```markdown\n * > | [a]: b \"c\"\n * ^\n * ```\n *\n * @type {State}\n */\n function destinationBefore(code) {\n return factoryDestination(effects, destinationAfter,\n // Note: we don’t need to reset the way `markdown-rs` does.\n nok, \"definitionDestination\", \"definitionDestinationLiteral\", \"definitionDestinationLiteralMarker\", \"definitionDestinationRaw\", \"definitionDestinationString\")(code);\n }\n\n /**\n * After destination.\n *\n * ```markdown\n * > | [a]: b \"c\"\n * ^\n * ```\n *\n * @type {State}\n */\n function destinationAfter(code) {\n return effects.attempt(titleBefore, after, after)(code);\n }\n\n /**\n * After definition.\n *\n * ```markdown\n * > | [a]: b\n * ^\n * > | [a]: b \"c\"\n * ^\n * ```\n *\n * @type {State}\n */\n function after(code) {\n return markdownSpace(code) ? factorySpace(effects, afterWhitespace, \"whitespace\")(code) : afterWhitespace(code);\n }\n\n /**\n * After definition, after optional whitespace.\n *\n * ```markdown\n * > | [a]: b\n * ^\n * > | [a]: b \"c\"\n * ^\n * ```\n *\n * @type {State}\n */\n function afterWhitespace(code) {\n if (code === null || markdownLineEnding(code)) {\n effects.exit(\"definition\");\n\n // Note: we don’t care about uniqueness.\n // It’s likely that that doesn’t happen very frequently.\n // It is more likely that it wastes precious time.\n self.parser.defined.push(identifier);\n\n // To do: `markdown-rs` interrupt.\n // // You’d be interrupting.\n // tokenizer.interrupt = true\n return ok(code);\n }\n return nok(code);\n }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeTitleBefore(effects, ok, nok) {\n return titleBefore;\n\n /**\n * After destination, at whitespace.\n *\n * ```markdown\n * > | [a]: b\n * ^\n * > | [a]: b \"c\"\n * ^\n * ```\n *\n * @type {State}\n */\n function titleBefore(code) {\n return markdownLineEndingOrSpace(code) ? factoryWhitespace(effects, beforeMarker)(code) : nok(code);\n }\n\n /**\n * At title.\n *\n * ```markdown\n * | [a]: b\n * > | \"c\"\n * ^\n * ```\n *\n * @type {State}\n */\n function beforeMarker(code) {\n return factoryTitle(effects, titleAfter, nok, \"definitionTitle\", \"definitionTitleMarker\", \"definitionTitleString\")(code);\n }\n\n /**\n * After title.\n *\n * ```markdown\n * > | [a]: b \"c\"\n * ^\n * ```\n *\n * @type {State}\n */\n function titleAfter(code) {\n return markdownSpace(code) ? factorySpace(effects, titleAfterOptionalWhitespace, \"whitespace\")(code) : titleAfterOptionalWhitespace(code);\n }\n\n /**\n * After title, after optional whitespace.\n *\n * ```markdown\n * > | [a]: b \"c\"\n * ^\n * ```\n *\n * @type {State}\n */\n function titleAfterOptionalWhitespace(code) {\n return code === null || markdownLineEnding(code) ? ok(code) : nok(code);\n }\n}","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding, markdownSpace } from 'micromark-util-character';\n/** @type {Construct} */\nexport const codeIndented = {\n name: 'codeIndented',\n tokenize: tokenizeCodeIndented\n};\n\n/** @type {Construct} */\nconst furtherStart = {\n tokenize: tokenizeFurtherStart,\n partial: true\n};\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeCodeIndented(effects, ok, nok) {\n const self = this;\n return start;\n\n /**\n * Start of code (indented).\n *\n * > **Parsing note**: it is not needed to check if this first line is a\n * > filled line (that it has a non-whitespace character), because blank lines\n * > are parsed already, so we never run into that.\n *\n * ```markdown\n * > | aaa\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n // To do: manually check if interrupting like `markdown-rs`.\n\n effects.enter(\"codeIndented\");\n // To do: use an improved `space_or_tab` function like `markdown-rs`,\n // so that we can drop the next state.\n return factorySpace(effects, afterPrefix, \"linePrefix\", 4 + 1)(code);\n }\n\n /**\n * At start, after 1 or 4 spaces.\n *\n * ```markdown\n * > | aaa\n * ^\n * ```\n *\n * @type {State}\n */\n function afterPrefix(code) {\n const tail = self.events[self.events.length - 1];\n return tail && tail[1].type === \"linePrefix\" && tail[2].sliceSerialize(tail[1], true).length >= 4 ? atBreak(code) : nok(code);\n }\n\n /**\n * At a break.\n *\n * ```markdown\n * > | aaa\n * ^ ^\n * ```\n *\n * @type {State}\n */\n function atBreak(code) {\n if (code === null) {\n return after(code);\n }\n if (markdownLineEnding(code)) {\n return effects.attempt(furtherStart, atBreak, after)(code);\n }\n effects.enter(\"codeFlowValue\");\n return inside(code);\n }\n\n /**\n * In code content.\n *\n * ```markdown\n * > | aaa\n * ^^^^\n * ```\n *\n * @type {State}\n */\n function inside(code) {\n if (code === null || markdownLineEnding(code)) {\n effects.exit(\"codeFlowValue\");\n return atBreak(code);\n }\n effects.consume(code);\n return inside;\n }\n\n /** @type {State} */\n function after(code) {\n effects.exit(\"codeIndented\");\n // To do: allow interrupting like `markdown-rs`.\n // Feel free to interrupt.\n // tokenizer.interrupt = false\n return ok(code);\n }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeFurtherStart(effects, ok, nok) {\n const self = this;\n return furtherStart;\n\n /**\n * At eol, trying to parse another indent.\n *\n * ```markdown\n * > | aaa\n * ^\n * | bbb\n * ```\n *\n * @type {State}\n */\n function furtherStart(code) {\n // To do: improve `lazy` / `pierce` handling.\n // If this is a lazy line, it can’t be code.\n if (self.parser.lazy[self.now().line]) {\n return nok(code);\n }\n if (markdownLineEnding(code)) {\n effects.enter(\"lineEnding\");\n effects.consume(code);\n effects.exit(\"lineEnding\");\n return furtherStart;\n }\n\n // To do: the code here in `micromark-js` is a bit different from\n // `markdown-rs` because there it can attempt spaces.\n // We can’t yet.\n //\n // To do: use an improved `space_or_tab` function like `markdown-rs`,\n // so that we can drop the next state.\n return factorySpace(effects, afterPrefix, \"linePrefix\", 4 + 1)(code);\n }\n\n /**\n * At start, after 1 or 4 spaces.\n *\n * ```markdown\n * > | aaa\n * ^\n * ```\n *\n * @type {State}\n */\n function afterPrefix(code) {\n const tail = self.events[self.events.length - 1];\n return tail && tail[1].type === \"linePrefix\" && tail[2].sliceSerialize(tail[1], true).length >= 4 ? ok(code) : markdownLineEnding(code) ? furtherStart(code) : nok(code);\n }\n}","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding, markdownLineEndingOrSpace, markdownSpace } from 'micromark-util-character';\nimport { splice } from 'micromark-util-chunked';\n/** @type {Construct} */\nexport const headingAtx = {\n name: 'headingAtx',\n tokenize: tokenizeHeadingAtx,\n resolve: resolveHeadingAtx\n};\n\n/** @type {Resolver} */\nfunction resolveHeadingAtx(events, context) {\n let contentEnd = events.length - 2;\n let contentStart = 3;\n /** @type {Token} */\n let content;\n /** @type {Token} */\n let text;\n\n // Prefix whitespace, part of the opening.\n if (events[contentStart][1].type === \"whitespace\") {\n contentStart += 2;\n }\n\n // Suffix whitespace, part of the closing.\n if (contentEnd - 2 > contentStart && events[contentEnd][1].type === \"whitespace\") {\n contentEnd -= 2;\n }\n if (events[contentEnd][1].type === \"atxHeadingSequence\" && (contentStart === contentEnd - 1 || contentEnd - 4 > contentStart && events[contentEnd - 2][1].type === \"whitespace\")) {\n contentEnd -= contentStart + 1 === contentEnd ? 2 : 4;\n }\n if (contentEnd > contentStart) {\n content = {\n type: \"atxHeadingText\",\n start: events[contentStart][1].start,\n end: events[contentEnd][1].end\n };\n text = {\n type: \"chunkText\",\n start: events[contentStart][1].start,\n end: events[contentEnd][1].end,\n contentType: \"text\"\n };\n splice(events, contentStart, contentEnd - contentStart + 1, [['enter', content, context], ['enter', text, context], ['exit', text, context], ['exit', content, context]]);\n }\n return events;\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeHeadingAtx(effects, ok, nok) {\n let size = 0;\n return start;\n\n /**\n * Start of a heading (atx).\n *\n * ```markdown\n * > | ## aa\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n // To do: parse indent like `markdown-rs`.\n effects.enter(\"atxHeading\");\n return before(code);\n }\n\n /**\n * After optional whitespace, at `#`.\n *\n * ```markdown\n * > | ## aa\n * ^\n * ```\n *\n * @type {State}\n */\n function before(code) {\n effects.enter(\"atxHeadingSequence\");\n return sequenceOpen(code);\n }\n\n /**\n * In opening sequence.\n *\n * ```markdown\n * > | ## aa\n * ^\n * ```\n *\n * @type {State}\n */\n function sequenceOpen(code) {\n if (code === 35 && size++ < 6) {\n effects.consume(code);\n return sequenceOpen;\n }\n\n // Always at least one `#`.\n if (code === null || markdownLineEndingOrSpace(code)) {\n effects.exit(\"atxHeadingSequence\");\n return atBreak(code);\n }\n return nok(code);\n }\n\n /**\n * After something, before something else.\n *\n * ```markdown\n * > | ## aa\n * ^\n * ```\n *\n * @type {State}\n */\n function atBreak(code) {\n if (code === 35) {\n effects.enter(\"atxHeadingSequence\");\n return sequenceFurther(code);\n }\n if (code === null || markdownLineEnding(code)) {\n effects.exit(\"atxHeading\");\n // To do: interrupt like `markdown-rs`.\n // // Feel free to interrupt.\n // tokenizer.interrupt = false\n return ok(code);\n }\n if (markdownSpace(code)) {\n return factorySpace(effects, atBreak, \"whitespace\")(code);\n }\n\n // To do: generate `data` tokens, add the `text` token later.\n // Needs edit map, see: `markdown.rs`.\n effects.enter(\"atxHeadingText\");\n return data(code);\n }\n\n /**\n * In further sequence (after whitespace).\n *\n * Could be normal “visible” hashes in the heading or a final sequence.\n *\n * ```markdown\n * > | ## aa ##\n * ^\n * ```\n *\n * @type {State}\n */\n function sequenceFurther(code) {\n if (code === 35) {\n effects.consume(code);\n return sequenceFurther;\n }\n effects.exit(\"atxHeadingSequence\");\n return atBreak(code);\n }\n\n /**\n * In text.\n *\n * ```markdown\n * > | ## aa\n * ^\n * ```\n *\n * @type {State}\n */\n function data(code) {\n if (code === null || code === 35 || markdownLineEndingOrSpace(code)) {\n effects.exit(\"atxHeadingText\");\n return atBreak(code);\n }\n effects.consume(code);\n return data;\n }\n}","/**\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding, markdownSpace } from 'micromark-util-character';\n/** @type {Construct} */\nexport const setextUnderline = {\n name: 'setextUnderline',\n tokenize: tokenizeSetextUnderline,\n resolveTo: resolveToSetextUnderline\n};\n\n/** @type {Resolver} */\nfunction resolveToSetextUnderline(events, context) {\n // To do: resolve like `markdown-rs`.\n let index = events.length;\n /** @type {number | undefined} */\n let content;\n /** @type {number | undefined} */\n let text;\n /** @type {number | undefined} */\n let definition;\n\n // Find the opening of the content.\n // It’ll always exist: we don’t tokenize if it isn’t there.\n while (index--) {\n if (events[index][0] === 'enter') {\n if (events[index][1].type === \"content\") {\n content = index;\n break;\n }\n if (events[index][1].type === \"paragraph\") {\n text = index;\n }\n }\n // Exit\n else {\n if (events[index][1].type === \"content\") {\n // Remove the content end (if needed we’ll add it later)\n events.splice(index, 1);\n }\n if (!definition && events[index][1].type === \"definition\") {\n definition = index;\n }\n }\n }\n const heading = {\n type: \"setextHeading\",\n start: Object.assign({}, events[text][1].start),\n end: Object.assign({}, events[events.length - 1][1].end)\n };\n\n // Change the paragraph to setext heading text.\n events[text][1].type = \"setextHeadingText\";\n\n // If we have definitions in the content, we’ll keep on having content,\n // but we need move it.\n if (definition) {\n events.splice(text, 0, ['enter', heading, context]);\n events.splice(definition + 1, 0, ['exit', events[content][1], context]);\n events[content][1].end = Object.assign({}, events[definition][1].end);\n } else {\n events[content][1] = heading;\n }\n\n // Add the heading exit at the end.\n events.push(['exit', heading, context]);\n return events;\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeSetextUnderline(effects, ok, nok) {\n const self = this;\n /** @type {NonNullable<Code>} */\n let marker;\n return start;\n\n /**\n * At start of heading (setext) underline.\n *\n * ```markdown\n * | aa\n * > | ==\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n let index = self.events.length;\n /** @type {boolean | undefined} */\n let paragraph;\n // Find an opening.\n while (index--) {\n // Skip enter/exit of line ending, line prefix, and content.\n // We can now either have a definition or a paragraph.\n if (self.events[index][1].type !== \"lineEnding\" && self.events[index][1].type !== \"linePrefix\" && self.events[index][1].type !== \"content\") {\n paragraph = self.events[index][1].type === \"paragraph\";\n break;\n }\n }\n\n // To do: handle lazy/pierce like `markdown-rs`.\n // To do: parse indent like `markdown-rs`.\n if (!self.parser.lazy[self.now().line] && (self.interrupt || paragraph)) {\n effects.enter(\"setextHeadingLine\");\n marker = code;\n return before(code);\n }\n return nok(code);\n }\n\n /**\n * After optional whitespace, at `-` or `=`.\n *\n * ```markdown\n * | aa\n * > | ==\n * ^\n * ```\n *\n * @type {State}\n */\n function before(code) {\n effects.enter(\"setextHeadingLineSequence\");\n return inside(code);\n }\n\n /**\n * In sequence.\n *\n * ```markdown\n * | aa\n * > | ==\n * ^\n * ```\n *\n * @type {State}\n */\n function inside(code) {\n if (code === marker) {\n effects.consume(code);\n return inside;\n }\n effects.exit(\"setextHeadingLineSequence\");\n return markdownSpace(code) ? factorySpace(effects, after, \"lineSuffix\")(code) : after(code);\n }\n\n /**\n * After sequence, after optional whitespace.\n *\n * ```markdown\n * | aa\n * > | ==\n * ^\n * ```\n *\n * @type {State}\n */\n function after(code) {\n if (code === null || markdownLineEnding(code)) {\n effects.exit(\"setextHeadingLine\");\n return ok(code);\n }\n return nok(code);\n }\n}","/**\n * List of lowercase HTML “block” tag names.\n *\n * The list, when parsing HTML (flow), results in more relaxed rules (condition\n * 6).\n * Because they are known blocks, the HTML-like syntax doesn’t have to be\n * strictly parsed.\n * For tag names not in this list, a more strict algorithm (condition 7) is used\n * to detect whether the HTML-like syntax is seen as HTML (flow) or not.\n *\n * This is copied from:\n * <https://spec.commonmark.org/0.30/#html-blocks>.\n *\n * > 👉 **Note**: `search` was added in `CommonMark@0.31`.\n */\nexport const htmlBlockNames = [\n 'address',\n 'article',\n 'aside',\n 'base',\n 'basefont',\n 'blockquote',\n 'body',\n 'caption',\n 'center',\n 'col',\n 'colgroup',\n 'dd',\n 'details',\n 'dialog',\n 'dir',\n 'div',\n 'dl',\n 'dt',\n 'fieldset',\n 'figcaption',\n 'figure',\n 'footer',\n 'form',\n 'frame',\n 'frameset',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'head',\n 'header',\n 'hr',\n 'html',\n 'iframe',\n 'legend',\n 'li',\n 'link',\n 'main',\n 'menu',\n 'menuitem',\n 'nav',\n 'noframes',\n 'ol',\n 'optgroup',\n 'option',\n 'p',\n 'param',\n 'search',\n 'section',\n 'summary',\n 'table',\n 'tbody',\n 'td',\n 'tfoot',\n 'th',\n 'thead',\n 'title',\n 'tr',\n 'track',\n 'ul'\n]\n\n/**\n * List of lowercase HTML “raw” tag names.\n *\n * The list, when parsing HTML (flow), results in HTML that can include lines\n * without exiting, until a closing tag also in this list is found (condition\n * 1).\n *\n * This module is copied from:\n * <https://spec.commonmark.org/0.30/#html-blocks>.\n *\n * > 👉 **Note**: `textarea` was added in `CommonMark@0.30`.\n */\nexport const htmlRawNames = ['pre', 'script', 'style', 'textarea']\n","/**\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport { asciiAlpha, asciiAlphanumeric, markdownLineEnding, markdownLineEndingOrSpace, markdownSpace } from 'micromark-util-character';\nimport { htmlBlockNames, htmlRawNames } from 'micromark-util-html-tag-name';\nimport { blankLine } from './blank-line.js';\n\n/** @type {Construct} */\nexport const htmlFlow = {\n name: 'htmlFlow',\n tokenize: tokenizeHtmlFlow,\n resolveTo: resolveToHtmlFlow,\n concrete: true\n};\n\n/** @type {Construct} */\nconst blankLineBefore = {\n tokenize: tokenizeBlankLineBefore,\n partial: true\n};\nconst nonLazyContinuationStart = {\n tokenize: tokenizeNonLazyContinuationStart,\n partial: true\n};\n\n/** @type {Resolver} */\nfunction resolveToHtmlFlow(events) {\n let index = events.length;\n while (index--) {\n if (events[index][0] === 'enter' && events[index][1].type === \"htmlFlow\") {\n break;\n }\n }\n if (index > 1 && events[index - 2][1].type === \"linePrefix\") {\n // Add the prefix start to the HTML token.\n events[index][1].start = events[index - 2][1].start;\n // Add the prefix start to the HTML line token.\n events[index + 1][1].start = events[index - 2][1].start;\n // Remove the line prefix.\n events.splice(index - 2, 2);\n }\n return events;\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeHtmlFlow(effects, ok, nok) {\n const self = this;\n /** @type {number} */\n let marker;\n /** @type {boolean} */\n let closingTag;\n /** @type {string} */\n let buffer;\n /** @type {number} */\n let index;\n /** @type {Code} */\n let markerB;\n return start;\n\n /**\n * Start of HTML (flow).\n *\n * ```markdown\n * > | <x />\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n // To do: parse indent like `markdown-rs`.\n return before(code);\n }\n\n /**\n * At `<`, after optional whitespace.\n *\n * ```markdown\n * > | <x />\n * ^\n * ```\n *\n * @type {State}\n */\n function before(code) {\n effects.enter(\"htmlFlow\");\n effects.enter(\"htmlFlowData\");\n effects.consume(code);\n return open;\n }\n\n /**\n * After `<`, at tag name or other stuff.\n *\n * ```markdown\n * > | <x />\n * ^\n * > | <!doctype>\n * ^\n * > | <!--xxx-->\n * ^\n * ```\n *\n * @type {State}\n */\n function open(code) {\n if (code === 33) {\n effects.consume(code);\n return declarationOpen;\n }\n if (code === 47) {\n effects.consume(code);\n closingTag = true;\n return tagCloseStart;\n }\n if (code === 63) {\n effects.consume(code);\n marker = 3;\n // To do:\n // tokenizer.concrete = true\n // To do: use `markdown-rs` style interrupt.\n // While we’re in an instruction instead of a declaration, we’re on a `?`\n // right now, so we do need to search for `>`, similar to declarations.\n return self.interrupt ? ok : continuationDeclarationInside;\n }\n\n // ASCII alphabetical.\n if (asciiAlpha(code)) {\n effects.consume(code);\n // @ts-expect-error: not null.\n buffer = String.fromCharCode(code);\n return tagName;\n }\n return nok(code);\n }\n\n /**\n * After `<!`, at declaration, comment, or CDATA.\n *\n * ```markdown\n * > | <!doctype>\n * ^\n * > | <!--xxx-->\n * ^\n * > | <![CDATA[>&<]]>\n * ^\n * ```\n *\n * @type {State}\n */\n function declarationOpen(code) {\n if (code === 45) {\n effects.consume(code);\n marker = 2;\n return commentOpenInside;\n }\n if (code === 91) {\n effects.consume(code);\n marker = 5;\n index = 0;\n return cdataOpenInside;\n }\n\n // ASCII alphabetical.\n if (asciiAlpha(code)) {\n effects.consume(code);\n marker = 4;\n // // Do not form containers.\n // tokenizer.concrete = true\n return self.interrupt ? ok : continuationDeclarationInside;\n }\n return nok(code);\n }\n\n /**\n * After `<!-`, inside a comment, at another `-`.\n *\n * ```markdown\n * > | <!--xxx-->\n * ^\n * ```\n *\n * @type {State}\n */\n function commentOpenInside(code) {\n if (code === 45) {\n effects.consume(code);\n // // Do not form containers.\n // tokenizer.concrete = true\n return self.interrupt ? ok : continuationDeclarationInside;\n }\n return nok(code);\n }\n\n /**\n * After `<![`, inside CDATA, expecting `CDATA[`.\n *\n * ```markdown\n * > | <![CDATA[>&<]]>\n * ^^^^^^\n * ```\n *\n * @type {State}\n */\n function cdataOpenInside(code) {\n const value = \"CDATA[\";\n if (code === value.charCodeAt(index++)) {\n effects.consume(code);\n if (index === value.length) {\n // // Do not form containers.\n // tokenizer.concrete = true\n return self.interrupt ? ok : continuation;\n }\n return cdataOpenInside;\n }\n return nok(code);\n }\n\n /**\n * After `</`, in closing tag, at tag name.\n *\n * ```markdown\n * > | </x>\n * ^\n * ```\n *\n * @type {State}\n */\n function tagCloseStart(code) {\n if (asciiAlpha(code)) {\n effects.consume(code);\n // @ts-expect-error: not null.\n buffer = String.fromCharCode(code);\n return tagName;\n }\n return nok(code);\n }\n\n /**\n * In tag name.\n *\n * ```markdown\n * > | <ab>\n * ^^\n * > | </ab>\n * ^^\n * ```\n *\n * @type {State}\n */\n function tagName(code) {\n if (code === null || code === 47 || code === 62 || markdownLineEndingOrSpace(code)) {\n const slash = code === 47;\n const name = buffer.toLowerCase();\n if (!slash && !closingTag && htmlRawNames.includes(name)) {\n marker = 1;\n // // Do not form containers.\n // tokenizer.concrete = true\n return self.interrupt ? ok(code) : continuation(code);\n }\n if (htmlBlockNames.includes(buffer.toLowerCase())) {\n marker = 6;\n if (slash) {\n effects.consume(code);\n return basicSelfClosing;\n }\n\n // // Do not form containers.\n // tokenizer.concrete = true\n return self.interrupt ? ok(code) : continuation(code);\n }\n marker = 7;\n // Do not support complete HTML when interrupting.\n return self.interrupt && !self.parser.lazy[self.now().line] ? nok(code) : closingTag ? completeClosingTagAfter(code) : completeAttributeNameBefore(code);\n }\n\n // ASCII alphanumerical and `-`.\n if (code === 45 || asciiAlphanumeric(code)) {\n effects.consume(code);\n buffer += String.fromCharCode(code);\n return tagName;\n }\n return nok(code);\n }\n\n /**\n * After closing slash of a basic tag name.\n *\n * ```markdown\n * > | <div/>\n * ^\n * ```\n *\n * @type {State}\n */\n function basicSelfClosing(code) {\n if (code === 62) {\n effects.consume(code);\n // // Do not form containers.\n // tokenizer.concrete = true\n return self.interrupt ? ok : continuation;\n }\n return nok(code);\n }\n\n /**\n * After closing slash of a complete tag name.\n *\n * ```markdown\n * > | <x/>\n * ^\n * ```\n *\n * @type {State}\n */\n function completeClosingTagAfter(code) {\n if (markdownSpace(code)) {\n effects.consume(code);\n return completeClosingTagAfter;\n }\n return completeEnd(code);\n }\n\n /**\n * At an attribute name.\n *\n * At first, this state is used after a complete tag name, after whitespace,\n * where it expects optional attributes or the end of the tag.\n * It is also reused after attributes, when expecting more optional\n * attributes.\n *\n * ```markdown\n * > | <a />\n * ^\n * > | <a :b>\n * ^\n * > | <a _b>\n * ^\n * > | <a b>\n * ^\n * > | <a >\n * ^\n * ```\n *\n * @type {State}\n */\n function completeAttributeNameBefore(code) {\n if (code === 47) {\n effects.consume(code);\n return completeEnd;\n }\n\n // ASCII alphanumerical and `:` and `_`.\n if (code === 58 || code === 95 || asciiAlpha(code)) {\n effects.consume(code);\n return completeAttributeName;\n }\n if (markdownSpace(code)) {\n effects.consume(code);\n return completeAttributeNameBefore;\n }\n return completeEnd(code);\n }\n\n /**\n * In attribute name.\n *\n * ```markdown\n * > | <a :b>\n * ^\n * > | <a _b>\n * ^\n * > | <a b>\n * ^\n * ```\n *\n * @type {State}\n */\n function completeAttributeName(code) {\n // ASCII alphanumerical and `-`, `.`, `:`, and `_`.\n if (code === 45 || code === 46 || code === 58 || code === 95 || asciiAlphanumeric(code)) {\n effects.consume(code);\n return completeAttributeName;\n }\n return completeAttributeNameAfter(code);\n }\n\n /**\n * After attribute name, at an optional initializer, the end of the tag, or\n * whitespace.\n *\n * ```markdown\n * > | <a b>\n * ^\n * > | <a b=c>\n * ^\n * ```\n *\n * @type {State}\n */\n function completeAttributeNameAfter(code) {\n if (code === 61) {\n effects.consume(code);\n return completeAttributeValueBefore;\n }\n if (markdownSpace(code)) {\n effects.consume(code);\n return completeAttributeNameAfter;\n }\n return completeAttributeNameBefore(code);\n }\n\n /**\n * Before unquoted, double quoted, or single quoted attribute value, allowing\n * whitespace.\n *\n * ```markdown\n * > | <a b=c>\n * ^\n * > | <a b=\"c\">\n * ^\n * ```\n *\n * @type {State}\n */\n function completeAttributeValueBefore(code) {\n if (code === null || code === 60 || code === 61 || code === 62 || code === 96) {\n return nok(code);\n }\n if (code === 34 || code === 39) {\n effects.consume(code);\n markerB = code;\n return completeAttributeValueQuoted;\n }\n if (markdownSpace(code)) {\n effects.consume(code);\n return completeAttributeValueBefore;\n }\n return completeAttributeValueUnquoted(code);\n }\n\n /**\n * In double or single quoted attribute value.\n *\n * ```markdown\n * > | <a b=\"c\">\n * ^\n * > | <a b='c'>\n * ^\n * ```\n *\n * @type {State}\n */\n function completeAttributeValueQuoted(code) {\n if (code === markerB) {\n effects.consume(code);\n markerB = null;\n return completeAttributeValueQuotedAfter;\n }\n if (code === null || markdownLineEnding(code)) {\n return nok(code);\n }\n effects.consume(code);\n return completeAttributeValueQuoted;\n }\n\n /**\n * In unquoted attribute value.\n *\n * ```markdown\n * > | <a b=c>\n * ^\n * ```\n *\n * @type {State}\n */\n function completeAttributeValueUnquoted(code) {\n if (code === null || code === 34 || code === 39 || code === 47 || code === 60 || code === 61 || code === 62 || code === 96 || markdownLineEndingOrSpace(code)) {\n return completeAttributeNameAfter(code);\n }\n effects.consume(code);\n return completeAttributeValueUnquoted;\n }\n\n /**\n * After double or single quoted attribute value, before whitespace or the\n * end of the tag.\n *\n * ```markdown\n * > | <a b=\"c\">\n * ^\n * ```\n *\n * @type {State}\n */\n function completeAttributeValueQuotedAfter(code) {\n if (code === 47 || code === 62 || markdownSpace(code)) {\n return completeAttributeNameBefore(code);\n }\n return nok(code);\n }\n\n /**\n * In certain circumstances of a complete tag where only an `>` is allowed.\n *\n * ```markdown\n * > | <a b=\"c\">\n * ^\n * ```\n *\n * @type {State}\n */\n function completeEnd(code) {\n if (code === 62) {\n effects.consume(code);\n return completeAfter;\n }\n return nok(code);\n }\n\n /**\n * After `>` in a complete tag.\n *\n * ```markdown\n * > | <x>\n * ^\n * ```\n *\n * @type {State}\n */\n function completeAfter(code) {\n if (code === null || markdownLineEnding(code)) {\n // // Do not form containers.\n // tokenizer.concrete = true\n return continuation(code);\n }\n if (markdownSpace(code)) {\n effects.consume(code);\n return completeAfter;\n }\n return nok(code);\n }\n\n /**\n * In continuation of any HTML kind.\n *\n * ```markdown\n * > | <!--xxx-->\n * ^\n * ```\n *\n * @type {State}\n */\n function continuation(code) {\n if (code === 45 && marker === 2) {\n effects.consume(code);\n return continuationCommentInside;\n }\n if (code === 60 && marker === 1) {\n effects.consume(code);\n return continuationRawTagOpen;\n }\n if (code === 62 && marker === 4) {\n effects.consume(code);\n return continuationClose;\n }\n if (code === 63 && marker === 3) {\n effects.consume(code);\n return continuationDeclarationInside;\n }\n if (code === 93 && marker === 5) {\n effects.consume(code);\n return continuationCdataInside;\n }\n if (markdownLineEnding(code) && (marker === 6 || marker === 7)) {\n effects.exit(\"htmlFlowData\");\n return effects.check(blankLineBefore, continuationAfter, continuationStart)(code);\n }\n if (code === null || markdownLineEnding(code)) {\n effects.exit(\"htmlFlowData\");\n return continuationStart(code);\n }\n effects.consume(code);\n return continuation;\n }\n\n /**\n * In continuation, at eol.\n *\n * ```markdown\n * > | <x>\n * ^\n * | asd\n * ```\n *\n * @type {State}\n */\n function continuationStart(code) {\n return effects.check(nonLazyContinuationStart, continuationStartNonLazy, continuationAfter)(code);\n }\n\n /**\n * In continuation, at eol, before non-lazy content.\n *\n * ```markdown\n * > | <x>\n * ^\n * | asd\n * ```\n *\n * @type {State}\n */\n function continuationStartNonLazy(code) {\n effects.enter(\"lineEnding\");\n effects.consume(code);\n effects.exit(\"lineEnding\");\n return continuationBefore;\n }\n\n /**\n * In continuation, before non-lazy content.\n *\n * ```markdown\n * | <x>\n * > | asd\n * ^\n * ```\n *\n * @type {State}\n */\n function continuationBefore(code) {\n if (code === null || markdownLineEnding(code)) {\n return continuationStart(code);\n }\n effects.enter(\"htmlFlowData\");\n return continuation(code);\n }\n\n /**\n * In comment continuation, after one `-`, expecting another.\n *\n * ```markdown\n * > | <!--xxx-->\n * ^\n * ```\n *\n * @type {State}\n */\n function continuationCommentInside(code) {\n if (code === 45) {\n effects.consume(code);\n return continuationDeclarationInside;\n }\n return continuation(code);\n }\n\n /**\n * In raw continuation, after `<`, at `/`.\n *\n * ```markdown\n * > | <script>console.log(1)</script>\n * ^\n * ```\n *\n * @type {State}\n */\n function continuationRawTagOpen(code) {\n if (code === 47) {\n effects.consume(code);\n buffer = '';\n return continuationRawEndTag;\n }\n return continuation(code);\n }\n\n /**\n * In raw continuation, after `</`, in a raw tag name.\n *\n * ```markdown\n * > | <script>console.log(1)</script>\n * ^^^^^^\n * ```\n *\n * @type {State}\n */\n function continuationRawEndTag(code) {\n if (code === 62) {\n const name = buffer.toLowerCase();\n if (htmlRawNames.includes(name)) {\n effects.consume(code);\n return continuationClose;\n }\n return continuation(code);\n }\n if (asciiAlpha(code) && buffer.length < 8) {\n effects.consume(code);\n // @ts-expect-error: not null.\n buffer += String.fromCharCode(code);\n return continuationRawEndTag;\n }\n return continuation(code);\n }\n\n /**\n * In cdata continuation, after `]`, expecting `]>`.\n *\n * ```markdown\n * > | <![CDATA[>&<]]>\n * ^\n * ```\n *\n * @type {State}\n */\n function continuationCdataInside(code) {\n if (code === 93) {\n effects.consume(code);\n return continuationDeclarationInside;\n }\n return continuation(code);\n }\n\n /**\n * In declaration or instruction continuation, at `>`.\n *\n * ```markdown\n * > | <!-->\n * ^\n * > | <?>\n * ^\n * > | <!q>\n * ^\n * > | <!--ab-->\n * ^\n * > | <![CDATA[>&<]]>\n * ^\n * ```\n *\n * @type {State}\n */\n function continuationDeclarationInside(code) {\n if (code === 62) {\n effects.consume(code);\n return continuationClose;\n }\n\n // More dashes.\n if (code === 45 && marker === 2) {\n effects.consume(code);\n return continuationDeclarationInside;\n }\n return continuation(code);\n }\n\n /**\n * In closed continuation: everything we get until the eol/eof is part of it.\n *\n * ```markdown\n * > | <!doctype>\n * ^\n * ```\n *\n * @type {State}\n */\n function continuationClose(code) {\n if (code === null || markdownLineEnding(code)) {\n effects.exit(\"htmlFlowData\");\n return continuationAfter(code);\n }\n effects.consume(code);\n return continuationClose;\n }\n\n /**\n * Done.\n *\n * ```markdown\n * > | <!doctype>\n * ^\n * ```\n *\n * @type {State}\n */\n function continuationAfter(code) {\n effects.exit(\"htmlFlow\");\n // // Feel free to interrupt.\n // tokenizer.interrupt = false\n // // No longer concrete.\n // tokenizer.concrete = false\n return ok(code);\n }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeNonLazyContinuationStart(effects, ok, nok) {\n const self = this;\n return start;\n\n /**\n * At eol, before continuation.\n *\n * ```markdown\n * > | * ```js\n * ^\n * | b\n * ```\n *\n * @type {State}\n */\n function start(code) {\n if (markdownLineEnding(code)) {\n effects.enter(\"lineEnding\");\n effects.consume(code);\n effects.exit(\"lineEnding\");\n return after;\n }\n return nok(code);\n }\n\n /**\n * A continuation.\n *\n * ```markdown\n * | * ```js\n * > | b\n * ^\n * ```\n *\n * @type {State}\n */\n function after(code) {\n return self.parser.lazy[self.now().line] ? nok(code) : ok(code);\n }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeBlankLineBefore(effects, ok, nok) {\n return start;\n\n /**\n * Before eol, expecting blank line.\n *\n * ```markdown\n * > | <div>\n * ^\n * |\n * ```\n *\n * @type {State}\n */\n function start(code) {\n effects.enter(\"lineEnding\");\n effects.consume(code);\n effects.exit(\"lineEnding\");\n return effects.attempt(blankLine, ok, nok);\n }\n}","/**\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding, markdownSpace } from 'micromark-util-character';\n/** @type {Construct} */\nconst nonLazyContinuation = {\n tokenize: tokenizeNonLazyContinuation,\n partial: true\n};\n\n/** @type {Construct} */\nexport const codeFenced = {\n name: 'codeFenced',\n tokenize: tokenizeCodeFenced,\n concrete: true\n};\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeCodeFenced(effects, ok, nok) {\n const self = this;\n /** @type {Construct} */\n const closeStart = {\n tokenize: tokenizeCloseStart,\n partial: true\n };\n let initialPrefix = 0;\n let sizeOpen = 0;\n /** @type {NonNullable<Code>} */\n let marker;\n return start;\n\n /**\n * Start of code.\n *\n * ```markdown\n * > | ~~~js\n * ^\n * | alert(1)\n * | ~~~\n * ```\n *\n * @type {State}\n */\n function start(code) {\n // To do: parse whitespace like `markdown-rs`.\n return beforeSequenceOpen(code);\n }\n\n /**\n * In opening fence, after prefix, at sequence.\n *\n * ```markdown\n * > | ~~~js\n * ^\n * | alert(1)\n * | ~~~\n * ```\n *\n * @type {State}\n */\n function beforeSequenceOpen(code) {\n const tail = self.events[self.events.length - 1];\n initialPrefix = tail && tail[1].type === \"linePrefix\" ? tail[2].sliceSerialize(tail[1], true).length : 0;\n marker = code;\n effects.enter(\"codeFenced\");\n effects.enter(\"codeFencedFence\");\n effects.enter(\"codeFencedFenceSequence\");\n return sequenceOpen(code);\n }\n\n /**\n * In opening fence sequence.\n *\n * ```markdown\n * > | ~~~js\n * ^\n * | alert(1)\n * | ~~~\n * ```\n *\n * @type {State}\n */\n function sequenceOpen(code) {\n if (code === marker) {\n sizeOpen++;\n effects.consume(code);\n return sequenceOpen;\n }\n if (sizeOpen < 3) {\n return nok(code);\n }\n effects.exit(\"codeFencedFenceSequence\");\n return markdownSpace(code) ? factorySpace(effects, infoBefore, \"whitespace\")(code) : infoBefore(code);\n }\n\n /**\n * In opening fence, after the sequence (and optional whitespace), before info.\n *\n * ```markdown\n * > | ~~~js\n * ^\n * | alert(1)\n * | ~~~\n * ```\n *\n * @type {State}\n */\n function infoBefore(code) {\n if (code === null || markdownLineEnding(code)) {\n effects.exit(\"codeFencedFence\");\n return self.interrupt ? ok(code) : effects.check(nonLazyContinuation, atNonLazyBreak, after)(code);\n }\n effects.enter(\"codeFencedFenceInfo\");\n effects.enter(\"chunkString\", {\n contentType: \"string\"\n });\n return info(code);\n }\n\n /**\n * In info.\n *\n * ```markdown\n * > | ~~~js\n * ^\n * | alert(1)\n * | ~~~\n * ```\n *\n * @type {State}\n */\n function info(code) {\n if (code === null || markdownLineEnding(code)) {\n effects.exit(\"chunkString\");\n effects.exit(\"codeFencedFenceInfo\");\n return infoBefore(code);\n }\n if (markdownSpace(code)) {\n effects.exit(\"chunkString\");\n effects.exit(\"codeFencedFenceInfo\");\n return factorySpace(effects, metaBefore, \"whitespace\")(code);\n }\n if (code === 96 && code === marker) {\n return nok(code);\n }\n effects.consume(code);\n return info;\n }\n\n /**\n * In opening fence, after info and whitespace, before meta.\n *\n * ```markdown\n * > | ~~~js eval\n * ^\n * | alert(1)\n * | ~~~\n * ```\n *\n * @type {State}\n */\n function metaBefore(code) {\n if (code === null || markdownLineEnding(code)) {\n return infoBefore(code);\n }\n effects.enter(\"codeFencedFenceMeta\");\n effects.enter(\"chunkString\", {\n contentType: \"string\"\n });\n return meta(code);\n }\n\n /**\n * In meta.\n *\n * ```markdown\n * > | ~~~js eval\n * ^\n * | alert(1)\n * | ~~~\n * ```\n *\n * @type {State}\n */\n function meta(code) {\n if (code === null || markdownLineEnding(code)) {\n effects.exit(\"chunkString\");\n effects.exit(\"codeFencedFenceMeta\");\n return infoBefore(code);\n }\n if (code === 96 && code === marker) {\n return nok(code);\n }\n effects.consume(code);\n return meta;\n }\n\n /**\n * At eol/eof in code, before a non-lazy closing fence or content.\n *\n * ```markdown\n * > | ~~~js\n * ^\n * > | alert(1)\n * ^\n * | ~~~\n * ```\n *\n * @type {State}\n */\n function atNonLazyBreak(code) {\n return effects.attempt(closeStart, after, contentBefore)(code);\n }\n\n /**\n * Before code content, not a closing fence, at eol.\n *\n * ```markdown\n * | ~~~js\n * > | alert(1)\n * ^\n * | ~~~\n * ```\n *\n * @type {State}\n */\n function contentBefore(code) {\n effects.enter(\"lineEnding\");\n effects.consume(code);\n effects.exit(\"lineEnding\");\n return contentStart;\n }\n\n /**\n * Before code content, not a closing fence.\n *\n * ```markdown\n * | ~~~js\n * > | alert(1)\n * ^\n * | ~~~\n * ```\n *\n * @type {State}\n */\n function contentStart(code) {\n return initialPrefix > 0 && markdownSpace(code) ? factorySpace(effects, beforeContentChunk, \"linePrefix\", initialPrefix + 1)(code) : beforeContentChunk(code);\n }\n\n /**\n * Before code content, after optional prefix.\n *\n * ```markdown\n * | ~~~js\n * > | alert(1)\n * ^\n * | ~~~\n * ```\n *\n * @type {State}\n */\n function beforeContentChunk(code) {\n if (code === null || markdownLineEnding(code)) {\n return effects.check(nonLazyContinuation, atNonLazyBreak, after)(code);\n }\n effects.enter(\"codeFlowValue\");\n return contentChunk(code);\n }\n\n /**\n * In code content.\n *\n * ```markdown\n * | ~~~js\n * > | alert(1)\n * ^^^^^^^^\n * | ~~~\n * ```\n *\n * @type {State}\n */\n function contentChunk(code) {\n if (code === null || markdownLineEnding(code)) {\n effects.exit(\"codeFlowValue\");\n return beforeContentChunk(code);\n }\n effects.consume(code);\n return contentChunk;\n }\n\n /**\n * After code.\n *\n * ```markdown\n * | ~~~js\n * | alert(1)\n * > | ~~~\n * ^\n * ```\n *\n * @type {State}\n */\n function after(code) {\n effects.exit(\"codeFenced\");\n return ok(code);\n }\n\n /**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\n function tokenizeCloseStart(effects, ok, nok) {\n let size = 0;\n return startBefore;\n\n /**\n *\n *\n * @type {State}\n */\n function startBefore(code) {\n effects.enter(\"lineEnding\");\n effects.consume(code);\n effects.exit(\"lineEnding\");\n return start;\n }\n\n /**\n * Before closing fence, at optional whitespace.\n *\n * ```markdown\n * | ~~~js\n * | alert(1)\n * > | ~~~\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n // Always populated by defaults.\n\n // To do: `enter` here or in next state?\n effects.enter(\"codeFencedFence\");\n return markdownSpace(code) ? factorySpace(effects, beforeSequenceClose, \"linePrefix\", self.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4)(code) : beforeSequenceClose(code);\n }\n\n /**\n * In closing fence, after optional whitespace, at sequence.\n *\n * ```markdown\n * | ~~~js\n * | alert(1)\n * > | ~~~\n * ^\n * ```\n *\n * @type {State}\n */\n function beforeSequenceClose(code) {\n if (code === marker) {\n effects.enter(\"codeFencedFenceSequence\");\n return sequenceClose(code);\n }\n return nok(code);\n }\n\n /**\n * In closing fence sequence.\n *\n * ```markdown\n * | ~~~js\n * | alert(1)\n * > | ~~~\n * ^\n * ```\n *\n * @type {State}\n */\n function sequenceClose(code) {\n if (code === marker) {\n size++;\n effects.consume(code);\n return sequenceClose;\n }\n if (size >= sizeOpen) {\n effects.exit(\"codeFencedFenceSequence\");\n return markdownSpace(code) ? factorySpace(effects, sequenceCloseAfter, \"whitespace\")(code) : sequenceCloseAfter(code);\n }\n return nok(code);\n }\n\n /**\n * After closing fence sequence, after optional whitespace.\n *\n * ```markdown\n * | ~~~js\n * | alert(1)\n * > | ~~~\n * ^\n * ```\n *\n * @type {State}\n */\n function sequenceCloseAfter(code) {\n if (code === null || markdownLineEnding(code)) {\n effects.exit(\"codeFencedFence\");\n return ok(code);\n }\n return nok(code);\n }\n }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeNonLazyContinuation(effects, ok, nok) {\n const self = this;\n return start;\n\n /**\n *\n *\n * @type {State}\n */\n function start(code) {\n if (code === null) {\n return nok(code);\n }\n effects.enter(\"lineEnding\");\n effects.consume(code);\n effects.exit(\"lineEnding\");\n return lineStart;\n }\n\n /**\n *\n *\n * @type {State}\n */\n function lineStart(code) {\n return self.parser.lazy[self.now().line] ? nok(code) : ok(code);\n }\n}","/// <reference lib=\"dom\" />\n\n/* eslint-env browser */\n\nconst element = document.createElement('i')\n\n/**\n * @param {string} value\n * @returns {string|false}\n */\nexport function decodeNamedCharacterReference(value) {\n const characterReference = '&' + value + ';'\n element.innerHTML = characterReference\n const char = element.textContent\n\n // Some named character references do not require the closing semicolon\n // (`¬`, for instance), which leads to situations where parsing the assumed\n // named reference of `¬it;` will result in the string `¬it;`.\n // When we encounter a trailing semicolon after parsing, and the character\n // reference to decode was not a semicolon (`;`), we can assume that the\n // matching was not complete.\n // @ts-expect-error: TypeScript is wrong that `textContent` on elements can\n // yield `null`.\n if (char.charCodeAt(char.length - 1) === 59 /* `;` */ && value !== 'semi') {\n return false\n }\n\n // If the decoded string is equal to the input, the character reference was\n // not valid.\n // @ts-expect-error: TypeScript is wrong that `textContent` on elements can\n // yield `null`.\n return char === characterReference ? false : char\n}\n","/**\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport { decodeNamedCharacterReference } from 'decode-named-character-reference';\nimport { asciiAlphanumeric, asciiDigit, asciiHexDigit } from 'micromark-util-character';\n/** @type {Construct} */\nexport const characterReference = {\n name: 'characterReference',\n tokenize: tokenizeCharacterReference\n};\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeCharacterReference(effects, ok, nok) {\n const self = this;\n let size = 0;\n /** @type {number} */\n let max;\n /** @type {(code: Code) => boolean} */\n let test;\n return start;\n\n /**\n * Start of character reference.\n *\n * ```markdown\n * > | a&b\n * ^\n * > | a{b\n * ^\n * > | a b\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n effects.enter(\"characterReference\");\n effects.enter(\"characterReferenceMarker\");\n effects.consume(code);\n effects.exit(\"characterReferenceMarker\");\n return open;\n }\n\n /**\n * After `&`, at `#` for numeric references or alphanumeric for named\n * references.\n *\n * ```markdown\n * > | a&b\n * ^\n * > | a{b\n * ^\n * > | a b\n * ^\n * ```\n *\n * @type {State}\n */\n function open(code) {\n if (code === 35) {\n effects.enter(\"characterReferenceMarkerNumeric\");\n effects.consume(code);\n effects.exit(\"characterReferenceMarkerNumeric\");\n return numeric;\n }\n effects.enter(\"characterReferenceValue\");\n max = 31;\n test = asciiAlphanumeric;\n return value(code);\n }\n\n /**\n * After `#`, at `x` for hexadecimals or digit for decimals.\n *\n * ```markdown\n * > | a{b\n * ^\n * > | a b\n * ^\n * ```\n *\n * @type {State}\n */\n function numeric(code) {\n if (code === 88 || code === 120) {\n effects.enter(\"characterReferenceMarkerHexadecimal\");\n effects.consume(code);\n effects.exit(\"characterReferenceMarkerHexadecimal\");\n effects.enter(\"characterReferenceValue\");\n max = 6;\n test = asciiHexDigit;\n return value;\n }\n effects.enter(\"characterReferenceValue\");\n max = 7;\n test = asciiDigit;\n return value(code);\n }\n\n /**\n * After markers (`&#x`, `&#`, or `&`), in value, before `;`.\n *\n * The character reference kind defines what and how many characters are\n * allowed.\n *\n * ```markdown\n * > | a&b\n * ^^^\n * > | a{b\n * ^^^\n * > | a b\n * ^\n * ```\n *\n * @type {State}\n */\n function value(code) {\n if (code === 59 && size) {\n const token = effects.exit(\"characterReferenceValue\");\n if (test === asciiAlphanumeric && !decodeNamedCharacterReference(self.sliceSerialize(token))) {\n return nok(code);\n }\n\n // To do: `markdown-rs` uses a different name:\n // `CharacterReferenceMarkerSemi`.\n effects.enter(\"characterReferenceMarker\");\n effects.consume(code);\n effects.exit(\"characterReferenceMarker\");\n effects.exit(\"characterReference\");\n return ok;\n }\n if (test(code) && size++ < max) {\n effects.consume(code);\n return value;\n }\n return nok(code);\n }\n}","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport { asciiPunctuation } from 'micromark-util-character';\n/** @type {Construct} */\nexport const characterEscape = {\n name: 'characterEscape',\n tokenize: tokenizeCharacterEscape\n};\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeCharacterEscape(effects, ok, nok) {\n return start;\n\n /**\n * Start of character escape.\n *\n * ```markdown\n * > | a\\*b\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n effects.enter(\"characterEscape\");\n effects.enter(\"escapeMarker\");\n effects.consume(code);\n effects.exit(\"escapeMarker\");\n return inside;\n }\n\n /**\n * After `\\`, at punctuation.\n *\n * ```markdown\n * > | a\\*b\n * ^\n * ```\n *\n * @type {State}\n */\n function inside(code) {\n // ASCII punctuation.\n if (asciiPunctuation(code)) {\n effects.enter(\"characterEscapeValue\");\n effects.consume(code);\n effects.exit(\"characterEscapeValue\");\n effects.exit(\"characterEscape\");\n return ok;\n }\n return nok(code);\n }\n}","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding } from 'micromark-util-character';\n/** @type {Construct} */\nexport const lineEnding = {\n name: 'lineEnding',\n tokenize: tokenizeLineEnding\n};\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeLineEnding(effects, ok) {\n return start;\n\n /** @type {State} */\n function start(code) {\n effects.enter(\"lineEnding\");\n effects.consume(code);\n effects.exit(\"lineEnding\");\n return factorySpace(effects, ok, \"linePrefix\");\n }\n}","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Event} Event\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport { factoryDestination } from 'micromark-factory-destination';\nimport { factoryLabel } from 'micromark-factory-label';\nimport { factoryTitle } from 'micromark-factory-title';\nimport { factoryWhitespace } from 'micromark-factory-whitespace';\nimport { markdownLineEndingOrSpace } from 'micromark-util-character';\nimport { push, splice } from 'micromark-util-chunked';\nimport { normalizeIdentifier } from 'micromark-util-normalize-identifier';\nimport { resolveAll } from 'micromark-util-resolve-all';\n/** @type {Construct} */\nexport const labelEnd = {\n name: 'labelEnd',\n tokenize: tokenizeLabelEnd,\n resolveTo: resolveToLabelEnd,\n resolveAll: resolveAllLabelEnd\n};\n\n/** @type {Construct} */\nconst resourceConstruct = {\n tokenize: tokenizeResource\n};\n/** @type {Construct} */\nconst referenceFullConstruct = {\n tokenize: tokenizeReferenceFull\n};\n/** @type {Construct} */\nconst referenceCollapsedConstruct = {\n tokenize: tokenizeReferenceCollapsed\n};\n\n/** @type {Resolver} */\nfunction resolveAllLabelEnd(events) {\n let index = -1;\n while (++index < events.length) {\n const token = events[index][1];\n if (token.type === \"labelImage\" || token.type === \"labelLink\" || token.type === \"labelEnd\") {\n // Remove the marker.\n events.splice(index + 1, token.type === \"labelImage\" ? 4 : 2);\n token.type = \"data\";\n index++;\n }\n }\n return events;\n}\n\n/** @type {Resolver} */\nfunction resolveToLabelEnd(events, context) {\n let index = events.length;\n let offset = 0;\n /** @type {Token} */\n let token;\n /** @type {number | undefined} */\n let open;\n /** @type {number | undefined} */\n let close;\n /** @type {Array<Event>} */\n let media;\n\n // Find an opening.\n while (index--) {\n token = events[index][1];\n if (open) {\n // If we see another link, or inactive link label, we’ve been here before.\n if (token.type === \"link\" || token.type === \"labelLink\" && token._inactive) {\n break;\n }\n\n // Mark other link openings as inactive, as we can’t have links in\n // links.\n if (events[index][0] === 'enter' && token.type === \"labelLink\") {\n token._inactive = true;\n }\n } else if (close) {\n if (events[index][0] === 'enter' && (token.type === \"labelImage\" || token.type === \"labelLink\") && !token._balanced) {\n open = index;\n if (token.type !== \"labelLink\") {\n offset = 2;\n break;\n }\n }\n } else if (token.type === \"labelEnd\") {\n close = index;\n }\n }\n const group = {\n type: events[open][1].type === \"labelLink\" ? \"link\" : \"image\",\n start: Object.assign({}, events[open][1].start),\n end: Object.assign({}, events[events.length - 1][1].end)\n };\n const label = {\n type: \"label\",\n start: Object.assign({}, events[open][1].start),\n end: Object.assign({}, events[close][1].end)\n };\n const text = {\n type: \"labelText\",\n start: Object.assign({}, events[open + offset + 2][1].end),\n end: Object.assign({}, events[close - 2][1].start)\n };\n media = [['enter', group, context], ['enter', label, context]];\n\n // Opening marker.\n media = push(media, events.slice(open + 1, open + offset + 3));\n\n // Text open.\n media = push(media, [['enter', text, context]]);\n\n // Always populated by defaults.\n\n // Between.\n media = push(media, resolveAll(context.parser.constructs.insideSpan.null, events.slice(open + offset + 4, close - 3), context));\n\n // Text close, marker close, label close.\n media = push(media, [['exit', text, context], events[close - 2], events[close - 1], ['exit', label, context]]);\n\n // Reference, resource, or so.\n media = push(media, events.slice(close + 1));\n\n // Media close.\n media = push(media, [['exit', group, context]]);\n splice(events, open, events.length, media);\n return events;\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeLabelEnd(effects, ok, nok) {\n const self = this;\n let index = self.events.length;\n /** @type {Token} */\n let labelStart;\n /** @type {boolean} */\n let defined;\n\n // Find an opening.\n while (index--) {\n if ((self.events[index][1].type === \"labelImage\" || self.events[index][1].type === \"labelLink\") && !self.events[index][1]._balanced) {\n labelStart = self.events[index][1];\n break;\n }\n }\n return start;\n\n /**\n * Start of label end.\n *\n * ```markdown\n * > | [a](b) c\n * ^\n * > | [a][b] c\n * ^\n * > | [a][] b\n * ^\n * > | [a] b\n * ```\n *\n * @type {State}\n */\n function start(code) {\n // If there is not an okay opening.\n if (!labelStart) {\n return nok(code);\n }\n\n // If the corresponding label (link) start is marked as inactive,\n // it means we’d be wrapping a link, like this:\n //\n // ```markdown\n // > | a [b [c](d) e](f) g.\n // ^\n // ```\n //\n // We can’t have that, so it’s just balanced brackets.\n if (labelStart._inactive) {\n return labelEndNok(code);\n }\n defined = self.parser.defined.includes(normalizeIdentifier(self.sliceSerialize({\n start: labelStart.end,\n end: self.now()\n })));\n effects.enter(\"labelEnd\");\n effects.enter(\"labelMarker\");\n effects.consume(code);\n effects.exit(\"labelMarker\");\n effects.exit(\"labelEnd\");\n return after;\n }\n\n /**\n * After `]`.\n *\n * ```markdown\n * > | [a](b) c\n * ^\n * > | [a][b] c\n * ^\n * > | [a][] b\n * ^\n * > | [a] b\n * ^\n * ```\n *\n * @type {State}\n */\n function after(code) {\n // Note: `markdown-rs` also parses GFM footnotes here, which for us is in\n // an extension.\n\n // Resource (`[asd](fgh)`)?\n if (code === 40) {\n return effects.attempt(resourceConstruct, labelEndOk, defined ? labelEndOk : labelEndNok)(code);\n }\n\n // Full (`[asd][fgh]`) or collapsed (`[asd][]`) reference?\n if (code === 91) {\n return effects.attempt(referenceFullConstruct, labelEndOk, defined ? referenceNotFull : labelEndNok)(code);\n }\n\n // Shortcut (`[asd]`) reference?\n return defined ? labelEndOk(code) : labelEndNok(code);\n }\n\n /**\n * After `]`, at `[`, but not at a full reference.\n *\n * > 👉 **Note**: we only get here if the label is defined.\n *\n * ```markdown\n * > | [a][] b\n * ^\n * > | [a] b\n * ^\n * ```\n *\n * @type {State}\n */\n function referenceNotFull(code) {\n return effects.attempt(referenceCollapsedConstruct, labelEndOk, labelEndNok)(code);\n }\n\n /**\n * Done, we found something.\n *\n * ```markdown\n * > | [a](b) c\n * ^\n * > | [a][b] c\n * ^\n * > | [a][] b\n * ^\n * > | [a] b\n * ^\n * ```\n *\n * @type {State}\n */\n function labelEndOk(code) {\n // Note: `markdown-rs` does a bunch of stuff here.\n return ok(code);\n }\n\n /**\n * Done, it’s nothing.\n *\n * There was an okay opening, but we didn’t match anything.\n *\n * ```markdown\n * > | [a](b c\n * ^\n * > | [a][b c\n * ^\n * > | [a] b\n * ^\n * ```\n *\n * @type {State}\n */\n function labelEndNok(code) {\n labelStart._balanced = true;\n return nok(code);\n }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeResource(effects, ok, nok) {\n return resourceStart;\n\n /**\n * At a resource.\n *\n * ```markdown\n * > | [a](b) c\n * ^\n * ```\n *\n * @type {State}\n */\n function resourceStart(code) {\n effects.enter(\"resource\");\n effects.enter(\"resourceMarker\");\n effects.consume(code);\n effects.exit(\"resourceMarker\");\n return resourceBefore;\n }\n\n /**\n * In resource, after `(`, at optional whitespace.\n *\n * ```markdown\n * > | [a](b) c\n * ^\n * ```\n *\n * @type {State}\n */\n function resourceBefore(code) {\n return markdownLineEndingOrSpace(code) ? factoryWhitespace(effects, resourceOpen)(code) : resourceOpen(code);\n }\n\n /**\n * In resource, after optional whitespace, at `)` or a destination.\n *\n * ```markdown\n * > | [a](b) c\n * ^\n * ```\n *\n * @type {State}\n */\n function resourceOpen(code) {\n if (code === 41) {\n return resourceEnd(code);\n }\n return factoryDestination(effects, resourceDestinationAfter, resourceDestinationMissing, \"resourceDestination\", \"resourceDestinationLiteral\", \"resourceDestinationLiteralMarker\", \"resourceDestinationRaw\", \"resourceDestinationString\", 32)(code);\n }\n\n /**\n * In resource, after destination, at optional whitespace.\n *\n * ```markdown\n * > | [a](b) c\n * ^\n * ```\n *\n * @type {State}\n */\n function resourceDestinationAfter(code) {\n return markdownLineEndingOrSpace(code) ? factoryWhitespace(effects, resourceBetween)(code) : resourceEnd(code);\n }\n\n /**\n * At invalid destination.\n *\n * ```markdown\n * > | [a](<<) b\n * ^\n * ```\n *\n * @type {State}\n */\n function resourceDestinationMissing(code) {\n return nok(code);\n }\n\n /**\n * In resource, after destination and whitespace, at `(` or title.\n *\n * ```markdown\n * > | [a](b ) c\n * ^\n * ```\n *\n * @type {State}\n */\n function resourceBetween(code) {\n if (code === 34 || code === 39 || code === 40) {\n return factoryTitle(effects, resourceTitleAfter, nok, \"resourceTitle\", \"resourceTitleMarker\", \"resourceTitleString\")(code);\n }\n return resourceEnd(code);\n }\n\n /**\n * In resource, after title, at optional whitespace.\n *\n * ```markdown\n * > | [a](b \"c\") d\n * ^\n * ```\n *\n * @type {State}\n */\n function resourceTitleAfter(code) {\n return markdownLineEndingOrSpace(code) ? factoryWhitespace(effects, resourceEnd)(code) : resourceEnd(code);\n }\n\n /**\n * In resource, at `)`.\n *\n * ```markdown\n * > | [a](b) d\n * ^\n * ```\n *\n * @type {State}\n */\n function resourceEnd(code) {\n if (code === 41) {\n effects.enter(\"resourceMarker\");\n effects.consume(code);\n effects.exit(\"resourceMarker\");\n effects.exit(\"resource\");\n return ok;\n }\n return nok(code);\n }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeReferenceFull(effects, ok, nok) {\n const self = this;\n return referenceFull;\n\n /**\n * In a reference (full), at the `[`.\n *\n * ```markdown\n * > | [a][b] d\n * ^\n * ```\n *\n * @type {State}\n */\n function referenceFull(code) {\n return factoryLabel.call(self, effects, referenceFullAfter, referenceFullMissing, \"reference\", \"referenceMarker\", \"referenceString\")(code);\n }\n\n /**\n * In a reference (full), after `]`.\n *\n * ```markdown\n * > | [a][b] d\n * ^\n * ```\n *\n * @type {State}\n */\n function referenceFullAfter(code) {\n return self.parser.defined.includes(normalizeIdentifier(self.sliceSerialize(self.events[self.events.length - 1][1]).slice(1, -1))) ? ok(code) : nok(code);\n }\n\n /**\n * In reference (full) that was missing.\n *\n * ```markdown\n * > | [a][b d\n * ^\n * ```\n *\n * @type {State}\n */\n function referenceFullMissing(code) {\n return nok(code);\n }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeReferenceCollapsed(effects, ok, nok) {\n return referenceCollapsedStart;\n\n /**\n * In reference (collapsed), at `[`.\n *\n * > 👉 **Note**: we only get here if the label is defined.\n *\n * ```markdown\n * > | [a][] d\n * ^\n * ```\n *\n * @type {State}\n */\n function referenceCollapsedStart(code) {\n // We only attempt a collapsed label if there’s a `[`.\n\n effects.enter(\"reference\");\n effects.enter(\"referenceMarker\");\n effects.consume(code);\n effects.exit(\"referenceMarker\");\n return referenceCollapsedOpen;\n }\n\n /**\n * In reference (collapsed), at `]`.\n *\n * > 👉 **Note**: we only get here if the label is defined.\n *\n * ```markdown\n * > | [a][] d\n * ^\n * ```\n *\n * @type {State}\n */\n function referenceCollapsedOpen(code) {\n if (code === 93) {\n effects.enter(\"referenceMarker\");\n effects.consume(code);\n effects.exit(\"referenceMarker\");\n effects.exit(\"reference\");\n return ok;\n }\n return nok(code);\n }\n}","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport { labelEnd } from './label-end.js';\n\n/** @type {Construct} */\nexport const labelStartImage = {\n name: 'labelStartImage',\n tokenize: tokenizeLabelStartImage,\n resolveAll: labelEnd.resolveAll\n};\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeLabelStartImage(effects, ok, nok) {\n const self = this;\n return start;\n\n /**\n * Start of label (image) start.\n *\n * ```markdown\n * > | a ![b] c\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n effects.enter(\"labelImage\");\n effects.enter(\"labelImageMarker\");\n effects.consume(code);\n effects.exit(\"labelImageMarker\");\n return open;\n }\n\n /**\n * After `!`, at `[`.\n *\n * ```markdown\n * > | a ![b] c\n * ^\n * ```\n *\n * @type {State}\n */\n function open(code) {\n if (code === 91) {\n effects.enter(\"labelMarker\");\n effects.consume(code);\n effects.exit(\"labelMarker\");\n effects.exit(\"labelImage\");\n return after;\n }\n return nok(code);\n }\n\n /**\n * After `![`.\n *\n * ```markdown\n * > | a ![b] c\n * ^\n * ```\n *\n * This is needed in because, when GFM footnotes are enabled, images never\n * form when started with a `^`.\n * Instead, links form:\n *\n * ```markdown\n * ![^a](b)\n *\n * ![^a][b]\n *\n * [b]: c\n * ```\n *\n * ```html\n * <p>!<a href=\\\"b\\\">^a</a></p>\n * <p>!<a href=\\\"c\\\">^a</a></p>\n * ```\n *\n * @type {State}\n */\n function after(code) {\n // To do: use a new field to do this, this is still needed for\n // `micromark-extension-gfm-footnote`, but the `label-start-link`\n // behavior isn’t.\n // Hidden footnotes hook.\n /* c8 ignore next 3 */\n return code === 94 && '_hiddenFootnoteSupport' in self.parser.constructs ? nok(code) : ok(code);\n }\n}","/**\n * @typedef {import('micromark-util-types').Code} Code\n */\n\nimport {\n markdownLineEndingOrSpace,\n unicodePunctuation,\n unicodeWhitespace\n} from 'micromark-util-character'\n/**\n * Classify whether a code represents whitespace, punctuation, or something\n * else.\n *\n * Used for attention (emphasis, strong), whose sequences can open or close\n * based on the class of surrounding characters.\n *\n * > 👉 **Note**: eof (`null`) is seen as whitespace.\n *\n * @param {Code} code\n * Code.\n * @returns {typeof constants.characterGroupWhitespace | typeof constants.characterGroupPunctuation | undefined}\n * Group.\n */\nexport function classifyCharacter(code) {\n if (\n code === null ||\n markdownLineEndingOrSpace(code) ||\n unicodeWhitespace(code)\n ) {\n return 1\n }\n if (unicodePunctuation(code)) {\n return 2\n }\n}\n","/**\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Event} Event\n * @typedef {import('micromark-util-types').Point} Point\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport { push, splice } from 'micromark-util-chunked';\nimport { classifyCharacter } from 'micromark-util-classify-character';\nimport { resolveAll } from 'micromark-util-resolve-all';\n/** @type {Construct} */\nexport const attention = {\n name: 'attention',\n tokenize: tokenizeAttention,\n resolveAll: resolveAllAttention\n};\n\n/**\n * Take all events and resolve attention to emphasis or strong.\n *\n * @type {Resolver}\n */\n// eslint-disable-next-line complexity\nfunction resolveAllAttention(events, context) {\n let index = -1;\n /** @type {number} */\n let open;\n /** @type {Token} */\n let group;\n /** @type {Token} */\n let text;\n /** @type {Token} */\n let openingSequence;\n /** @type {Token} */\n let closingSequence;\n /** @type {number} */\n let use;\n /** @type {Array<Event>} */\n let nextEvents;\n /** @type {number} */\n let offset;\n\n // Walk through all events.\n //\n // Note: performance of this is fine on an mb of normal markdown, but it’s\n // a bottleneck for malicious stuff.\n while (++index < events.length) {\n // Find a token that can close.\n if (events[index][0] === 'enter' && events[index][1].type === 'attentionSequence' && events[index][1]._close) {\n open = index;\n\n // Now walk back to find an opener.\n while (open--) {\n // Find a token that can open the closer.\n if (events[open][0] === 'exit' && events[open][1].type === 'attentionSequence' && events[open][1]._open &&\n // If the markers are the same:\n context.sliceSerialize(events[open][1]).charCodeAt(0) === context.sliceSerialize(events[index][1]).charCodeAt(0)) {\n // If the opening can close or the closing can open,\n // and the close size *is not* a multiple of three,\n // but the sum of the opening and closing size *is* multiple of three,\n // then don’t match.\n if ((events[open][1]._close || events[index][1]._open) && (events[index][1].end.offset - events[index][1].start.offset) % 3 && !((events[open][1].end.offset - events[open][1].start.offset + events[index][1].end.offset - events[index][1].start.offset) % 3)) {\n continue;\n }\n\n // Number of markers to use from the sequence.\n use = events[open][1].end.offset - events[open][1].start.offset > 1 && events[index][1].end.offset - events[index][1].start.offset > 1 ? 2 : 1;\n const start = Object.assign({}, events[open][1].end);\n const end = Object.assign({}, events[index][1].start);\n movePoint(start, -use);\n movePoint(end, use);\n openingSequence = {\n type: use > 1 ? \"strongSequence\" : \"emphasisSequence\",\n start,\n end: Object.assign({}, events[open][1].end)\n };\n closingSequence = {\n type: use > 1 ? \"strongSequence\" : \"emphasisSequence\",\n start: Object.assign({}, events[index][1].start),\n end\n };\n text = {\n type: use > 1 ? \"strongText\" : \"emphasisText\",\n start: Object.assign({}, events[open][1].end),\n end: Object.assign({}, events[index][1].start)\n };\n group = {\n type: use > 1 ? \"strong\" : \"emphasis\",\n start: Object.assign({}, openingSequence.start),\n end: Object.assign({}, closingSequence.end)\n };\n events[open][1].end = Object.assign({}, openingSequence.start);\n events[index][1].start = Object.assign({}, closingSequence.end);\n nextEvents = [];\n\n // If there are more markers in the opening, add them before.\n if (events[open][1].end.offset - events[open][1].start.offset) {\n nextEvents = push(nextEvents, [['enter', events[open][1], context], ['exit', events[open][1], context]]);\n }\n\n // Opening.\n nextEvents = push(nextEvents, [['enter', group, context], ['enter', openingSequence, context], ['exit', openingSequence, context], ['enter', text, context]]);\n\n // Always populated by defaults.\n\n // Between.\n nextEvents = push(nextEvents, resolveAll(context.parser.constructs.insideSpan.null, events.slice(open + 1, index), context));\n\n // Closing.\n nextEvents = push(nextEvents, [['exit', text, context], ['enter', closingSequence, context], ['exit', closingSequence, context], ['exit', group, context]]);\n\n // If there are more markers in the closing, add them after.\n if (events[index][1].end.offset - events[index][1].start.offset) {\n offset = 2;\n nextEvents = push(nextEvents, [['enter', events[index][1], context], ['exit', events[index][1], context]]);\n } else {\n offset = 0;\n }\n splice(events, open - 1, index - open + 3, nextEvents);\n index = open + nextEvents.length - offset - 2;\n break;\n }\n }\n }\n }\n\n // Remove remaining sequences.\n index = -1;\n while (++index < events.length) {\n if (events[index][1].type === 'attentionSequence') {\n events[index][1].type = 'data';\n }\n }\n return events;\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeAttention(effects, ok) {\n const attentionMarkers = this.parser.constructs.attentionMarkers.null;\n const previous = this.previous;\n const before = classifyCharacter(previous);\n\n /** @type {NonNullable<Code>} */\n let marker;\n return start;\n\n /**\n * Before a sequence.\n *\n * ```markdown\n * > | **\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n marker = code;\n effects.enter('attentionSequence');\n return inside(code);\n }\n\n /**\n * In a sequence.\n *\n * ```markdown\n * > | **\n * ^^\n * ```\n *\n * @type {State}\n */\n function inside(code) {\n if (code === marker) {\n effects.consume(code);\n return inside;\n }\n const token = effects.exit('attentionSequence');\n\n // To do: next major: move this to resolver, just like `markdown-rs`.\n const after = classifyCharacter(code);\n\n // Always populated by defaults.\n\n const open = !after || after === 2 && before || attentionMarkers.includes(code);\n const close = !before || before === 2 && after || attentionMarkers.includes(previous);\n token._open = Boolean(marker === 42 ? open : open && (before || !close));\n token._close = Boolean(marker === 42 ? close : close && (after || !open));\n return ok(code);\n }\n}\n\n/**\n * Move a point a bit.\n *\n * Note: `move` only works inside lines! It’s not possible to move past other\n * chunks (replacement characters, tabs, or line endings).\n *\n * @param {Point} point\n * @param {number} offset\n * @returns {undefined}\n */\nfunction movePoint(point, offset) {\n point.column += offset;\n point.offset += offset;\n point._bufferIndex += offset;\n}","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport { asciiAlpha, asciiAlphanumeric, asciiAtext, asciiControl } from 'micromark-util-character';\n/** @type {Construct} */\nexport const autolink = {\n name: 'autolink',\n tokenize: tokenizeAutolink\n};\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeAutolink(effects, ok, nok) {\n let size = 0;\n return start;\n\n /**\n * Start of an autolink.\n *\n * ```markdown\n * > | a<https://example.com>b\n * ^\n * > | a<user@example.com>b\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n effects.enter(\"autolink\");\n effects.enter(\"autolinkMarker\");\n effects.consume(code);\n effects.exit(\"autolinkMarker\");\n effects.enter(\"autolinkProtocol\");\n return open;\n }\n\n /**\n * After `<`, at protocol or atext.\n *\n * ```markdown\n * > | a<https://example.com>b\n * ^\n * > | a<user@example.com>b\n * ^\n * ```\n *\n * @type {State}\n */\n function open(code) {\n if (asciiAlpha(code)) {\n effects.consume(code);\n return schemeOrEmailAtext;\n }\n if (code === 64) {\n return nok(code);\n }\n return emailAtext(code);\n }\n\n /**\n * At second byte of protocol or atext.\n *\n * ```markdown\n * > | a<https://example.com>b\n * ^\n * > | a<user@example.com>b\n * ^\n * ```\n *\n * @type {State}\n */\n function schemeOrEmailAtext(code) {\n // ASCII alphanumeric and `+`, `-`, and `.`.\n if (code === 43 || code === 45 || code === 46 || asciiAlphanumeric(code)) {\n // Count the previous alphabetical from `open` too.\n size = 1;\n return schemeInsideOrEmailAtext(code);\n }\n return emailAtext(code);\n }\n\n /**\n * In ambiguous protocol or atext.\n *\n * ```markdown\n * > | a<https://example.com>b\n * ^\n * > | a<user@example.com>b\n * ^\n * ```\n *\n * @type {State}\n */\n function schemeInsideOrEmailAtext(code) {\n if (code === 58) {\n effects.consume(code);\n size = 0;\n return urlInside;\n }\n\n // ASCII alphanumeric and `+`, `-`, and `.`.\n if ((code === 43 || code === 45 || code === 46 || asciiAlphanumeric(code)) && size++ < 32) {\n effects.consume(code);\n return schemeInsideOrEmailAtext;\n }\n size = 0;\n return emailAtext(code);\n }\n\n /**\n * After protocol, in URL.\n *\n * ```markdown\n * > | a<https://example.com>b\n * ^\n * ```\n *\n * @type {State}\n */\n function urlInside(code) {\n if (code === 62) {\n effects.exit(\"autolinkProtocol\");\n effects.enter(\"autolinkMarker\");\n effects.consume(code);\n effects.exit(\"autolinkMarker\");\n effects.exit(\"autolink\");\n return ok;\n }\n\n // ASCII control, space, or `<`.\n if (code === null || code === 32 || code === 60 || asciiControl(code)) {\n return nok(code);\n }\n effects.consume(code);\n return urlInside;\n }\n\n /**\n * In email atext.\n *\n * ```markdown\n * > | a<user.name@example.com>b\n * ^\n * ```\n *\n * @type {State}\n */\n function emailAtext(code) {\n if (code === 64) {\n effects.consume(code);\n return emailAtSignOrDot;\n }\n if (asciiAtext(code)) {\n effects.consume(code);\n return emailAtext;\n }\n return nok(code);\n }\n\n /**\n * In label, after at-sign or dot.\n *\n * ```markdown\n * > | a<user.name@example.com>b\n * ^ ^\n * ```\n *\n * @type {State}\n */\n function emailAtSignOrDot(code) {\n return asciiAlphanumeric(code) ? emailLabel(code) : nok(code);\n }\n\n /**\n * In label, where `.` and `>` are allowed.\n *\n * ```markdown\n * > | a<user.name@example.com>b\n * ^\n * ```\n *\n * @type {State}\n */\n function emailLabel(code) {\n if (code === 46) {\n effects.consume(code);\n size = 0;\n return emailAtSignOrDot;\n }\n if (code === 62) {\n // Exit, then change the token type.\n effects.exit(\"autolinkProtocol\").type = \"autolinkEmail\";\n effects.enter(\"autolinkMarker\");\n effects.consume(code);\n effects.exit(\"autolinkMarker\");\n effects.exit(\"autolink\");\n return ok;\n }\n return emailValue(code);\n }\n\n /**\n * In label, where `.` and `>` are *not* allowed.\n *\n * Though, this is also used in `emailLabel` to parse other values.\n *\n * ```markdown\n * > | a<user.name@ex-ample.com>b\n * ^\n * ```\n *\n * @type {State}\n */\n function emailValue(code) {\n // ASCII alphanumeric or `-`.\n if ((code === 45 || asciiAlphanumeric(code)) && size++ < 63) {\n const next = code === 45 ? emailValue : emailLabel;\n effects.consume(code);\n return next;\n }\n return nok(code);\n }\n}","/**\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { asciiAlpha, asciiAlphanumeric, markdownLineEnding, markdownLineEndingOrSpace, markdownSpace } from 'micromark-util-character';\n/** @type {Construct} */\nexport const htmlText = {\n name: 'htmlText',\n tokenize: tokenizeHtmlText\n};\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeHtmlText(effects, ok, nok) {\n const self = this;\n /** @type {NonNullable<Code> | undefined} */\n let marker;\n /** @type {number} */\n let index;\n /** @type {State} */\n let returnState;\n return start;\n\n /**\n * Start of HTML (text).\n *\n * ```markdown\n * > | a <b> c\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n effects.enter(\"htmlText\");\n effects.enter(\"htmlTextData\");\n effects.consume(code);\n return open;\n }\n\n /**\n * After `<`, at tag name or other stuff.\n *\n * ```markdown\n * > | a <b> c\n * ^\n * > | a <!doctype> c\n * ^\n * > | a <!--b--> c\n * ^\n * ```\n *\n * @type {State}\n */\n function open(code) {\n if (code === 33) {\n effects.consume(code);\n return declarationOpen;\n }\n if (code === 47) {\n effects.consume(code);\n return tagCloseStart;\n }\n if (code === 63) {\n effects.consume(code);\n return instruction;\n }\n\n // ASCII alphabetical.\n if (asciiAlpha(code)) {\n effects.consume(code);\n return tagOpen;\n }\n return nok(code);\n }\n\n /**\n * After `<!`, at declaration, comment, or CDATA.\n *\n * ```markdown\n * > | a <!doctype> c\n * ^\n * > | a <!--b--> c\n * ^\n * > | a <![CDATA[>&<]]> c\n * ^\n * ```\n *\n * @type {State}\n */\n function declarationOpen(code) {\n if (code === 45) {\n effects.consume(code);\n return commentOpenInside;\n }\n if (code === 91) {\n effects.consume(code);\n index = 0;\n return cdataOpenInside;\n }\n if (asciiAlpha(code)) {\n effects.consume(code);\n return declaration;\n }\n return nok(code);\n }\n\n /**\n * In a comment, after `<!-`, at another `-`.\n *\n * ```markdown\n * > | a <!--b--> c\n * ^\n * ```\n *\n * @type {State}\n */\n function commentOpenInside(code) {\n if (code === 45) {\n effects.consume(code);\n return commentEnd;\n }\n return nok(code);\n }\n\n /**\n * In comment.\n *\n * ```markdown\n * > | a <!--b--> c\n * ^\n * ```\n *\n * @type {State}\n */\n function comment(code) {\n if (code === null) {\n return nok(code);\n }\n if (code === 45) {\n effects.consume(code);\n return commentClose;\n }\n if (markdownLineEnding(code)) {\n returnState = comment;\n return lineEndingBefore(code);\n }\n effects.consume(code);\n return comment;\n }\n\n /**\n * In comment, after `-`.\n *\n * ```markdown\n * > | a <!--b--> c\n * ^\n * ```\n *\n * @type {State}\n */\n function commentClose(code) {\n if (code === 45) {\n effects.consume(code);\n return commentEnd;\n }\n return comment(code);\n }\n\n /**\n * In comment, after `--`.\n *\n * ```markdown\n * > | a <!--b--> c\n * ^\n * ```\n *\n * @type {State}\n */\n function commentEnd(code) {\n return code === 62 ? end(code) : code === 45 ? commentClose(code) : comment(code);\n }\n\n /**\n * After `<![`, in CDATA, expecting `CDATA[`.\n *\n * ```markdown\n * > | a <![CDATA[>&<]]> b\n * ^^^^^^\n * ```\n *\n * @type {State}\n */\n function cdataOpenInside(code) {\n const value = \"CDATA[\";\n if (code === value.charCodeAt(index++)) {\n effects.consume(code);\n return index === value.length ? cdata : cdataOpenInside;\n }\n return nok(code);\n }\n\n /**\n * In CDATA.\n *\n * ```markdown\n * > | a <![CDATA[>&<]]> b\n * ^^^\n * ```\n *\n * @type {State}\n */\n function cdata(code) {\n if (code === null) {\n return nok(code);\n }\n if (code === 93) {\n effects.consume(code);\n return cdataClose;\n }\n if (markdownLineEnding(code)) {\n returnState = cdata;\n return lineEndingBefore(code);\n }\n effects.consume(code);\n return cdata;\n }\n\n /**\n * In CDATA, after `]`, at another `]`.\n *\n * ```markdown\n * > | a <![CDATA[>&<]]> b\n * ^\n * ```\n *\n * @type {State}\n */\n function cdataClose(code) {\n if (code === 93) {\n effects.consume(code);\n return cdataEnd;\n }\n return cdata(code);\n }\n\n /**\n * In CDATA, after `]]`, at `>`.\n *\n * ```markdown\n * > | a <![CDATA[>&<]]> b\n * ^\n * ```\n *\n * @type {State}\n */\n function cdataEnd(code) {\n if (code === 62) {\n return end(code);\n }\n if (code === 93) {\n effects.consume(code);\n return cdataEnd;\n }\n return cdata(code);\n }\n\n /**\n * In declaration.\n *\n * ```markdown\n * > | a <!b> c\n * ^\n * ```\n *\n * @type {State}\n */\n function declaration(code) {\n if (code === null || code === 62) {\n return end(code);\n }\n if (markdownLineEnding(code)) {\n returnState = declaration;\n return lineEndingBefore(code);\n }\n effects.consume(code);\n return declaration;\n }\n\n /**\n * In instruction.\n *\n * ```markdown\n * > | a <?b?> c\n * ^\n * ```\n *\n * @type {State}\n */\n function instruction(code) {\n if (code === null) {\n return nok(code);\n }\n if (code === 63) {\n effects.consume(code);\n return instructionClose;\n }\n if (markdownLineEnding(code)) {\n returnState = instruction;\n return lineEndingBefore(code);\n }\n effects.consume(code);\n return instruction;\n }\n\n /**\n * In instruction, after `?`, at `>`.\n *\n * ```markdown\n * > | a <?b?> c\n * ^\n * ```\n *\n * @type {State}\n */\n function instructionClose(code) {\n return code === 62 ? end(code) : instruction(code);\n }\n\n /**\n * After `</`, in closing tag, at tag name.\n *\n * ```markdown\n * > | a </b> c\n * ^\n * ```\n *\n * @type {State}\n */\n function tagCloseStart(code) {\n // ASCII alphabetical.\n if (asciiAlpha(code)) {\n effects.consume(code);\n return tagClose;\n }\n return nok(code);\n }\n\n /**\n * After `</x`, in a tag name.\n *\n * ```markdown\n * > | a </b> c\n * ^\n * ```\n *\n * @type {State}\n */\n function tagClose(code) {\n // ASCII alphanumerical and `-`.\n if (code === 45 || asciiAlphanumeric(code)) {\n effects.consume(code);\n return tagClose;\n }\n return tagCloseBetween(code);\n }\n\n /**\n * In closing tag, after tag name.\n *\n * ```markdown\n * > | a </b> c\n * ^\n * ```\n *\n * @type {State}\n */\n function tagCloseBetween(code) {\n if (markdownLineEnding(code)) {\n returnState = tagCloseBetween;\n return lineEndingBefore(code);\n }\n if (markdownSpace(code)) {\n effects.consume(code);\n return tagCloseBetween;\n }\n return end(code);\n }\n\n /**\n * After `<x`, in opening tag name.\n *\n * ```markdown\n * > | a <b> c\n * ^\n * ```\n *\n * @type {State}\n */\n function tagOpen(code) {\n // ASCII alphanumerical and `-`.\n if (code === 45 || asciiAlphanumeric(code)) {\n effects.consume(code);\n return tagOpen;\n }\n if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) {\n return tagOpenBetween(code);\n }\n return nok(code);\n }\n\n /**\n * In opening tag, after tag name.\n *\n * ```markdown\n * > | a <b> c\n * ^\n * ```\n *\n * @type {State}\n */\n function tagOpenBetween(code) {\n if (code === 47) {\n effects.consume(code);\n return end;\n }\n\n // ASCII alphabetical and `:` and `_`.\n if (code === 58 || code === 95 || asciiAlpha(code)) {\n effects.consume(code);\n return tagOpenAttributeName;\n }\n if (markdownLineEnding(code)) {\n returnState = tagOpenBetween;\n return lineEndingBefore(code);\n }\n if (markdownSpace(code)) {\n effects.consume(code);\n return tagOpenBetween;\n }\n return end(code);\n }\n\n /**\n * In attribute name.\n *\n * ```markdown\n * > | a <b c> d\n * ^\n * ```\n *\n * @type {State}\n */\n function tagOpenAttributeName(code) {\n // ASCII alphabetical and `-`, `.`, `:`, and `_`.\n if (code === 45 || code === 46 || code === 58 || code === 95 || asciiAlphanumeric(code)) {\n effects.consume(code);\n return tagOpenAttributeName;\n }\n return tagOpenAttributeNameAfter(code);\n }\n\n /**\n * After attribute name, before initializer, the end of the tag, or\n * whitespace.\n *\n * ```markdown\n * > | a <b c> d\n * ^\n * ```\n *\n * @type {State}\n */\n function tagOpenAttributeNameAfter(code) {\n if (code === 61) {\n effects.consume(code);\n return tagOpenAttributeValueBefore;\n }\n if (markdownLineEnding(code)) {\n returnState = tagOpenAttributeNameAfter;\n return lineEndingBefore(code);\n }\n if (markdownSpace(code)) {\n effects.consume(code);\n return tagOpenAttributeNameAfter;\n }\n return tagOpenBetween(code);\n }\n\n /**\n * Before unquoted, double quoted, or single quoted attribute value, allowing\n * whitespace.\n *\n * ```markdown\n * > | a <b c=d> e\n * ^\n * ```\n *\n * @type {State}\n */\n function tagOpenAttributeValueBefore(code) {\n if (code === null || code === 60 || code === 61 || code === 62 || code === 96) {\n return nok(code);\n }\n if (code === 34 || code === 39) {\n effects.consume(code);\n marker = code;\n return tagOpenAttributeValueQuoted;\n }\n if (markdownLineEnding(code)) {\n returnState = tagOpenAttributeValueBefore;\n return lineEndingBefore(code);\n }\n if (markdownSpace(code)) {\n effects.consume(code);\n return tagOpenAttributeValueBefore;\n }\n effects.consume(code);\n return tagOpenAttributeValueUnquoted;\n }\n\n /**\n * In double or single quoted attribute value.\n *\n * ```markdown\n * > | a <b c=\"d\"> e\n * ^\n * ```\n *\n * @type {State}\n */\n function tagOpenAttributeValueQuoted(code) {\n if (code === marker) {\n effects.consume(code);\n marker = undefined;\n return tagOpenAttributeValueQuotedAfter;\n }\n if (code === null) {\n return nok(code);\n }\n if (markdownLineEnding(code)) {\n returnState = tagOpenAttributeValueQuoted;\n return lineEndingBefore(code);\n }\n effects.consume(code);\n return tagOpenAttributeValueQuoted;\n }\n\n /**\n * In unquoted attribute value.\n *\n * ```markdown\n * > | a <b c=d> e\n * ^\n * ```\n *\n * @type {State}\n */\n function tagOpenAttributeValueUnquoted(code) {\n if (code === null || code === 34 || code === 39 || code === 60 || code === 61 || code === 96) {\n return nok(code);\n }\n if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) {\n return tagOpenBetween(code);\n }\n effects.consume(code);\n return tagOpenAttributeValueUnquoted;\n }\n\n /**\n * After double or single quoted attribute value, before whitespace or the end\n * of the tag.\n *\n * ```markdown\n * > | a <b c=\"d\"> e\n * ^\n * ```\n *\n * @type {State}\n */\n function tagOpenAttributeValueQuotedAfter(code) {\n if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) {\n return tagOpenBetween(code);\n }\n return nok(code);\n }\n\n /**\n * In certain circumstances of a tag where only an `>` is allowed.\n *\n * ```markdown\n * > | a <b c=\"d\"> e\n * ^\n * ```\n *\n * @type {State}\n */\n function end(code) {\n if (code === 62) {\n effects.consume(code);\n effects.exit(\"htmlTextData\");\n effects.exit(\"htmlText\");\n return ok;\n }\n return nok(code);\n }\n\n /**\n * At eol.\n *\n * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about\n * > empty tokens.\n *\n * ```markdown\n * > | a <!--a\n * ^\n * | b-->\n * ```\n *\n * @type {State}\n */\n function lineEndingBefore(code) {\n effects.exit(\"htmlTextData\");\n effects.enter(\"lineEnding\");\n effects.consume(code);\n effects.exit(\"lineEnding\");\n return lineEndingAfter;\n }\n\n /**\n * After eol, at optional whitespace.\n *\n * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about\n * > empty tokens.\n *\n * ```markdown\n * | a <!--a\n * > | b-->\n * ^\n * ```\n *\n * @type {State}\n */\n function lineEndingAfter(code) {\n // Always populated by defaults.\n\n return markdownSpace(code) ? factorySpace(effects, lineEndingAfterPrefix, \"linePrefix\", self.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4)(code) : lineEndingAfterPrefix(code);\n }\n\n /**\n * After eol, after optional whitespace.\n *\n * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about\n * > empty tokens.\n *\n * ```markdown\n * | a <!--a\n * > | b-->\n * ^\n * ```\n *\n * @type {State}\n */\n function lineEndingAfterPrefix(code) {\n effects.enter(\"htmlTextData\");\n return returnState(code);\n }\n}","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport { labelEnd } from './label-end.js';\n\n/** @type {Construct} */\nexport const labelStartLink = {\n name: 'labelStartLink',\n tokenize: tokenizeLabelStartLink,\n resolveAll: labelEnd.resolveAll\n};\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeLabelStartLink(effects, ok, nok) {\n const self = this;\n return start;\n\n /**\n * Start of label (link) start.\n *\n * ```markdown\n * > | a [b] c\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n effects.enter(\"labelLink\");\n effects.enter(\"labelMarker\");\n effects.consume(code);\n effects.exit(\"labelMarker\");\n effects.exit(\"labelLink\");\n return after;\n }\n\n /** @type {State} */\n function after(code) {\n // To do: this isn’t needed in `micromark-extension-gfm-footnote`,\n // remove.\n // Hidden footnotes hook.\n /* c8 ignore next 3 */\n return code === 94 && '_hiddenFootnoteSupport' in self.parser.constructs ? nok(code) : ok(code);\n }\n}","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport { markdownLineEnding } from 'micromark-util-character';\n/** @type {Construct} */\nexport const hardBreakEscape = {\n name: 'hardBreakEscape',\n tokenize: tokenizeHardBreakEscape\n};\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeHardBreakEscape(effects, ok, nok) {\n return start;\n\n /**\n * Start of a hard break (escape).\n *\n * ```markdown\n * > | a\\\n * ^\n * | b\n * ```\n *\n * @type {State}\n */\n function start(code) {\n effects.enter(\"hardBreakEscape\");\n effects.consume(code);\n return after;\n }\n\n /**\n * After `\\`, at eol.\n *\n * ```markdown\n * > | a\\\n * ^\n * | b\n * ```\n *\n * @type {State}\n */\n function after(code) {\n if (markdownLineEnding(code)) {\n effects.exit(\"hardBreakEscape\");\n return ok(code);\n }\n return nok(code);\n }\n}","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Previous} Previous\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport { markdownLineEnding } from 'micromark-util-character';\n/** @type {Construct} */\nexport const codeText = {\n name: 'codeText',\n tokenize: tokenizeCodeText,\n resolve: resolveCodeText,\n previous\n};\n\n// To do: next major: don’t resolve, like `markdown-rs`.\n/** @type {Resolver} */\nfunction resolveCodeText(events) {\n let tailExitIndex = events.length - 4;\n let headEnterIndex = 3;\n /** @type {number} */\n let index;\n /** @type {number | undefined} */\n let enter;\n\n // If we start and end with an EOL or a space.\n if ((events[headEnterIndex][1].type === \"lineEnding\" || events[headEnterIndex][1].type === 'space') && (events[tailExitIndex][1].type === \"lineEnding\" || events[tailExitIndex][1].type === 'space')) {\n index = headEnterIndex;\n\n // And we have data.\n while (++index < tailExitIndex) {\n if (events[index][1].type === \"codeTextData\") {\n // Then we have padding.\n events[headEnterIndex][1].type = \"codeTextPadding\";\n events[tailExitIndex][1].type = \"codeTextPadding\";\n headEnterIndex += 2;\n tailExitIndex -= 2;\n break;\n }\n }\n }\n\n // Merge adjacent spaces and data.\n index = headEnterIndex - 1;\n tailExitIndex++;\n while (++index <= tailExitIndex) {\n if (enter === undefined) {\n if (index !== tailExitIndex && events[index][1].type !== \"lineEnding\") {\n enter = index;\n }\n } else if (index === tailExitIndex || events[index][1].type === \"lineEnding\") {\n events[enter][1].type = \"codeTextData\";\n if (index !== enter + 2) {\n events[enter][1].end = events[index - 1][1].end;\n events.splice(enter + 2, index - enter - 2);\n tailExitIndex -= index - enter - 2;\n index = enter + 2;\n }\n enter = undefined;\n }\n }\n return events;\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Previous}\n */\nfunction previous(code) {\n // If there is a previous code, there will always be a tail.\n return code !== 96 || this.events[this.events.length - 1][1].type === \"characterEscape\";\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeCodeText(effects, ok, nok) {\n const self = this;\n let sizeOpen = 0;\n /** @type {number} */\n let size;\n /** @type {Token} */\n let token;\n return start;\n\n /**\n * Start of code (text).\n *\n * ```markdown\n * > | `a`\n * ^\n * > | \\`a`\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n effects.enter(\"codeText\");\n effects.enter(\"codeTextSequence\");\n return sequenceOpen(code);\n }\n\n /**\n * In opening sequence.\n *\n * ```markdown\n * > | `a`\n * ^\n * ```\n *\n * @type {State}\n */\n function sequenceOpen(code) {\n if (code === 96) {\n effects.consume(code);\n sizeOpen++;\n return sequenceOpen;\n }\n effects.exit(\"codeTextSequence\");\n return between(code);\n }\n\n /**\n * Between something and something else.\n *\n * ```markdown\n * > | `a`\n * ^^\n * ```\n *\n * @type {State}\n */\n function between(code) {\n // EOF.\n if (code === null) {\n return nok(code);\n }\n\n // To do: next major: don’t do spaces in resolve, but when compiling,\n // like `markdown-rs`.\n // Tabs don’t work, and virtual spaces don’t make sense.\n if (code === 32) {\n effects.enter('space');\n effects.consume(code);\n effects.exit('space');\n return between;\n }\n\n // Closing fence? Could also be data.\n if (code === 96) {\n token = effects.enter(\"codeTextSequence\");\n size = 0;\n return sequenceClose(code);\n }\n if (markdownLineEnding(code)) {\n effects.enter(\"lineEnding\");\n effects.consume(code);\n effects.exit(\"lineEnding\");\n return between;\n }\n\n // Data.\n effects.enter(\"codeTextData\");\n return data(code);\n }\n\n /**\n * In data.\n *\n * ```markdown\n * > | `a`\n * ^\n * ```\n *\n * @type {State}\n */\n function data(code) {\n if (code === null || code === 32 || code === 96 || markdownLineEnding(code)) {\n effects.exit(\"codeTextData\");\n return between(code);\n }\n effects.consume(code);\n return data;\n }\n\n /**\n * In closing sequence.\n *\n * ```markdown\n * > | `a`\n * ^\n * ```\n *\n * @type {State}\n */\n function sequenceClose(code) {\n // More.\n if (code === 96) {\n effects.consume(code);\n size++;\n return sequenceClose;\n }\n\n // Done!\n if (size === sizeOpen) {\n effects.exit(\"codeTextSequence\");\n effects.exit(\"codeText\");\n return ok(code);\n }\n\n // More or less accents: mark as data.\n token.type = \"codeTextData\";\n return data(code);\n }\n}","/**\n * @typedef {import('micromark-util-types').Extension} Extension\n */\n\nimport {\n attention,\n autolink,\n blockQuote,\n characterEscape,\n characterReference,\n codeFenced,\n codeIndented,\n codeText,\n definition,\n hardBreakEscape,\n headingAtx,\n htmlFlow,\n htmlText,\n labelEnd,\n labelStartImage,\n labelStartLink,\n lineEnding,\n list,\n setextUnderline,\n thematicBreak\n} from 'micromark-core-commonmark'\nimport {resolver as resolveText} from './initialize/text.js'\n\n/** @satisfies {Extension['document']} */\nexport const document = {\n [42]: list,\n [43]: list,\n [45]: list,\n [48]: list,\n [49]: list,\n [50]: list,\n [51]: list,\n [52]: list,\n [53]: list,\n [54]: list,\n [55]: list,\n [56]: list,\n [57]: list,\n [62]: blockQuote\n}\n\n/** @satisfies {Extension['contentInitial']} */\nexport const contentInitial = {\n [91]: definition\n}\n\n/** @satisfies {Extension['flowInitial']} */\nexport const flowInitial = {\n [-2]: codeIndented,\n [-1]: codeIndented,\n [32]: codeIndented\n}\n\n/** @satisfies {Extension['flow']} */\nexport const flow = {\n [35]: headingAtx,\n [42]: thematicBreak,\n [45]: [setextUnderline, thematicBreak],\n [60]: htmlFlow,\n [61]: setextUnderline,\n [95]: thematicBreak,\n [96]: codeFenced,\n [126]: codeFenced\n}\n\n/** @satisfies {Extension['string']} */\nexport const string = {\n [38]: characterReference,\n [92]: characterEscape\n}\n\n/** @satisfies {Extension['text']} */\nexport const text = {\n [-5]: lineEnding,\n [-4]: lineEnding,\n [-3]: lineEnding,\n [33]: labelStartImage,\n [38]: characterReference,\n [42]: attention,\n [60]: [autolink, htmlText],\n [91]: labelStartLink,\n [92]: [hardBreakEscape, characterEscape],\n [93]: labelEnd,\n [95]: attention,\n [96]: codeText\n}\n\n/** @satisfies {Extension['insideSpan']} */\nexport const insideSpan = {\n null: [attention, resolveText]\n}\n\n/** @satisfies {Extension['attentionMarkers']} */\nexport const attentionMarkers = {\n null: [42, 95]\n}\n\n/** @satisfies {Extension['disable']} */\nexport const disable = {\n null: []\n}\n","/**\n * @typedef {import('micromark-util-types').Create} Create\n * @typedef {import('micromark-util-types').FullNormalizedExtension} FullNormalizedExtension\n * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct\n * @typedef {import('micromark-util-types').ParseContext} ParseContext\n * @typedef {import('micromark-util-types').ParseOptions} ParseOptions\n */\n\nimport {combineExtensions} from 'micromark-util-combine-extensions'\nimport {content} from './initialize/content.js'\nimport {document} from './initialize/document.js'\nimport {flow} from './initialize/flow.js'\nimport {string, text} from './initialize/text.js'\nimport {createTokenizer} from './create-tokenizer.js'\nimport * as defaultConstructs from './constructs.js'\n\n/**\n * @param {ParseOptions | null | undefined} [options]\n * @returns {ParseContext}\n */\nexport function parse(options) {\n const settings = options || {}\n const constructs =\n /** @type {FullNormalizedExtension} */\n combineExtensions([defaultConstructs, ...(settings.extensions || [])])\n\n /** @type {ParseContext} */\n const parser = {\n defined: [],\n lazy: {},\n constructs,\n content: create(content),\n document: create(document),\n flow: create(flow),\n string: create(string),\n text: create(text)\n }\n return parser\n\n /**\n * @param {InitialConstruct} initial\n */\n function create(initial) {\n return creator\n /** @type {Create} */\n function creator(from) {\n return createTokenizer(parser, initial, from)\n }\n }\n}\n","/**\n * @typedef {import('micromark-util-types').Chunk} Chunk\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').Encoding} Encoding\n * @typedef {import('micromark-util-types').Value} Value\n */\n\n/**\n * @callback Preprocessor\n * @param {Value} value\n * @param {Encoding | null | undefined} [encoding]\n * @param {boolean | null | undefined} [end=false]\n * @returns {Array<Chunk>}\n */\n\nconst search = /[\\0\\t\\n\\r]/g\n\n/**\n * @returns {Preprocessor}\n */\nexport function preprocess() {\n let column = 1\n let buffer = ''\n /** @type {boolean | undefined} */\n let start = true\n /** @type {boolean | undefined} */\n let atCarriageReturn\n return preprocessor\n\n /** @type {Preprocessor} */\n // eslint-disable-next-line complexity\n function preprocessor(value, encoding, end) {\n /** @type {Array<Chunk>} */\n const chunks = []\n /** @type {RegExpMatchArray | null} */\n let match\n /** @type {number} */\n let next\n /** @type {number} */\n let startPosition\n /** @type {number} */\n let endPosition\n /** @type {Code} */\n let code\n value =\n buffer +\n (typeof value === 'string'\n ? value.toString()\n : new TextDecoder(encoding || undefined).decode(value))\n startPosition = 0\n buffer = ''\n if (start) {\n // To do: `markdown-rs` actually parses BOMs (byte order mark).\n if (value.charCodeAt(0) === 65279) {\n startPosition++\n }\n start = undefined\n }\n while (startPosition < value.length) {\n search.lastIndex = startPosition\n match = search.exec(value)\n endPosition =\n match && match.index !== undefined ? match.index : value.length\n code = value.charCodeAt(endPosition)\n if (!match) {\n buffer = value.slice(startPosition)\n break\n }\n if (code === 10 && startPosition === endPosition && atCarriageReturn) {\n chunks.push(-3)\n atCarriageReturn = undefined\n } else {\n if (atCarriageReturn) {\n chunks.push(-5)\n atCarriageReturn = undefined\n }\n if (startPosition < endPosition) {\n chunks.push(value.slice(startPosition, endPosition))\n column += endPosition - startPosition\n }\n switch (code) {\n case 0: {\n chunks.push(65533)\n column++\n break\n }\n case 9: {\n next = Math.ceil(column / 4) * 4\n chunks.push(-2)\n while (column++ < next) chunks.push(-1)\n break\n }\n case 10: {\n chunks.push(-4)\n column = 1\n break\n }\n default: {\n atCarriageReturn = true\n column = 1\n }\n }\n }\n startPosition = endPosition + 1\n }\n if (end) {\n if (atCarriageReturn) chunks.push(-5)\n if (buffer) chunks.push(buffer)\n chunks.push(null)\n }\n return chunks\n }\n}\n","/**\n * Turn the number (in string form as either hexa- or plain decimal) coming from\n * a numeric character reference into a character.\n *\n * Sort of like `String.fromCodePoint(Number.parseInt(value, base))`, but makes\n * non-characters and control characters safe.\n *\n * @param {string} value\n * Value to decode.\n * @param {number} base\n * Numeric base.\n * @returns {string}\n * Character.\n */\nexport function decodeNumericCharacterReference(value, base) {\n const code = Number.parseInt(value, base);\n if (\n // C0 except for HT, LF, FF, CR, space.\n code < 9 || code === 11 || code > 13 && code < 32 ||\n // Control character (DEL) of C0, and C1 controls.\n code > 126 && code < 160 ||\n // Lone high surrogates and low surrogates.\n code > 55_295 && code < 57_344 ||\n // Noncharacters.\n code > 64_975 && code < 65_008 || /* eslint-disable no-bitwise */\n (code & 65_535) === 65_535 || (code & 65_535) === 65_534 || /* eslint-enable no-bitwise */\n // Out of range\n code > 1_114_111) {\n return \"\\uFFFD\";\n }\n return String.fromCodePoint(code);\n}","import {decodeNamedCharacterReference} from 'decode-named-character-reference'\nimport {decodeNumericCharacterReference} from 'micromark-util-decode-numeric-character-reference'\nconst characterEscapeOrReference =\n /\\\\([!-/:-@[-`{-~])|&(#(?:\\d{1,7}|x[\\da-f]{1,6})|[\\da-z]{1,31});/gi\n\n/**\n * Decode markdown strings (which occur in places such as fenced code info\n * strings, destinations, labels, and titles).\n *\n * The “string” content type allows character escapes and -references.\n * This decodes those.\n *\n * @param {string} value\n * Value to decode.\n * @returns {string}\n * Decoded value.\n */\nexport function decodeString(value) {\n return value.replace(characterEscapeOrReference, decode)\n}\n\n/**\n * @param {string} $0\n * @param {string} $1\n * @param {string} $2\n * @returns {string}\n */\nfunction decode($0, $1, $2) {\n if ($1) {\n // Escape.\n return $1\n }\n\n // Reference.\n const head = $2.charCodeAt(0)\n if (head === 35) {\n const head = $2.charCodeAt(1)\n const hex = head === 120 || head === 88\n return decodeNumericCharacterReference($2.slice(hex ? 2 : 1), hex ? 16 : 10)\n }\n return decodeNamedCharacterReference($2) || $0\n}\n","/**\n * Normalize an identifier (as found in references, definitions).\n *\n * Collapses markdown whitespace, trim, and then lower- and uppercase.\n *\n * Some characters are considered “uppercase”, such as U+03F4 (`ϴ`), but if their\n * lowercase counterpart (U+03B8 (`θ`)) is uppercased will result in a different\n * uppercase character (U+0398 (`Θ`)).\n * So, to get a canonical form, we perform both lower- and uppercase.\n *\n * Using uppercase last makes sure keys will never interact with default\n * prototypal values (such as `constructor`): nothing in the prototype of\n * `Object` is uppercase.\n *\n * @param {string} value\n * Identifier to normalize.\n * @returns {string}\n * Normalized identifier.\n */\nexport function normalizeIdentifier(value) {\n return (\n value\n // Collapse markdown whitespace.\n .replace(/[\\t\\n\\r ]+/g, ' ')\n // Trim.\n .replace(/^ | $/g, '')\n // Some characters are considered “uppercase”, but if their lowercase\n // counterpart is uppercased will result in a different uppercase\n // character.\n // Hence, to get that form, we perform both lower- and uppercase.\n // Upper case makes sure keys will not interact with default prototypal\n // methods: no method is uppercase.\n .toLowerCase()\n .toUpperCase()\n )\n}\n","/**\n * @typedef {import('unist').Node} Node\n * @typedef {import('unist').Point} Point\n * @typedef {import('unist').Position} Position\n */\n\n/**\n * @typedef NodeLike\n * @property {string} type\n * @property {PositionLike | null | undefined} [position]\n *\n * @typedef PointLike\n * @property {number | null | undefined} [line]\n * @property {number | null | undefined} [column]\n * @property {number | null | undefined} [offset]\n *\n * @typedef PositionLike\n * @property {PointLike | null | undefined} [start]\n * @property {PointLike | null | undefined} [end]\n */\n\n/**\n * Serialize the positional info of a point, position (start and end points),\n * or node.\n *\n * @param {Node | NodeLike | Point | PointLike | Position | PositionLike | null | undefined} [value]\n * Node, position, or point.\n * @returns {string}\n * Pretty printed positional info of a node (`string`).\n *\n * In the format of a range `ls:cs-le:ce` (when given `node` or `position`)\n * or a point `l:c` (when given `point`), where `l` stands for line, `c` for\n * column, `s` for `start`, and `e` for end.\n * An empty string (`''`) is returned if the given value is neither `node`,\n * `position`, nor `point`.\n */\nexport function stringifyPosition(value) {\n // Nothing.\n if (!value || typeof value !== 'object') {\n return ''\n }\n\n // Node.\n if ('position' in value || 'type' in value) {\n return position(value.position)\n }\n\n // Position.\n if ('start' in value || 'end' in value) {\n return position(value)\n }\n\n // Point.\n if ('line' in value || 'column' in value) {\n return point(value)\n }\n\n // ?\n return ''\n}\n\n/**\n * @param {Point | PointLike | null | undefined} point\n * @returns {string}\n */\nfunction point(point) {\n return index(point && point.line) + ':' + index(point && point.column)\n}\n\n/**\n * @param {Position | PositionLike | null | undefined} pos\n * @returns {string}\n */\nfunction position(pos) {\n return point(pos && pos.start) + '-' + point(pos && pos.end)\n}\n\n/**\n * @param {number | null | undefined} value\n * @returns {number}\n */\nfunction index(value) {\n return value && typeof value === 'number' ? value : 1\n}\n","/**\n * @typedef {import('mdast').Break} Break\n * @typedef {import('mdast').Blockquote} Blockquote\n * @typedef {import('mdast').Code} Code\n * @typedef {import('mdast').Definition} Definition\n * @typedef {import('mdast').Emphasis} Emphasis\n * @typedef {import('mdast').Heading} Heading\n * @typedef {import('mdast').Html} Html\n * @typedef {import('mdast').Image} Image\n * @typedef {import('mdast').InlineCode} InlineCode\n * @typedef {import('mdast').Link} Link\n * @typedef {import('mdast').List} List\n * @typedef {import('mdast').ListItem} ListItem\n * @typedef {import('mdast').Nodes} Nodes\n * @typedef {import('mdast').Paragraph} Paragraph\n * @typedef {import('mdast').Parent} Parent\n * @typedef {import('mdast').PhrasingContent} PhrasingContent\n * @typedef {import('mdast').ReferenceType} ReferenceType\n * @typedef {import('mdast').Root} Root\n * @typedef {import('mdast').Strong} Strong\n * @typedef {import('mdast').Text} Text\n * @typedef {import('mdast').ThematicBreak} ThematicBreak\n *\n * @typedef {import('micromark-util-types').Encoding} Encoding\n * @typedef {import('micromark-util-types').Event} Event\n * @typedef {import('micromark-util-types').ParseOptions} ParseOptions\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Value} Value\n *\n * @typedef {import('unist').Point} Point\n *\n * @typedef {import('../index.js').CompileData} CompileData\n */\n\n/**\n * @typedef {Omit<Parent, 'children' | 'type'> & {type: 'fragment', children: Array<PhrasingContent>}} Fragment\n */\n\n/**\n * @callback Transform\n * Extra transform, to change the AST afterwards.\n * @param {Root} tree\n * Tree to transform.\n * @returns {Root | null | undefined | void}\n * New tree or nothing (in which case the current tree is used).\n *\n * @callback Handle\n * Handle a token.\n * @param {CompileContext} this\n * Context.\n * @param {Token} token\n * Current token.\n * @returns {undefined | void}\n * Nothing.\n *\n * @typedef {Record<string, Handle>} Handles\n * Token types mapping to handles\n *\n * @callback OnEnterError\n * Handle the case where the `right` token is open, but it is closed (by the\n * `left` token) or because we reached the end of the document.\n * @param {Omit<CompileContext, 'sliceSerialize'>} this\n * Context.\n * @param {Token | undefined} left\n * Left token.\n * @param {Token} right\n * Right token.\n * @returns {undefined}\n * Nothing.\n *\n * @callback OnExitError\n * Handle the case where the `right` token is open but it is closed by\n * exiting the `left` token.\n * @param {Omit<CompileContext, 'sliceSerialize'>} this\n * Context.\n * @param {Token} left\n * Left token.\n * @param {Token} right\n * Right token.\n * @returns {undefined}\n * Nothing.\n *\n * @typedef {[Token, OnEnterError | undefined]} TokenTuple\n * Open token on the stack, with an optional error handler for when\n * that token isn’t closed properly.\n */\n\n/**\n * @typedef Config\n * Configuration.\n *\n * We have our defaults, but extensions will add more.\n * @property {Array<string>} canContainEols\n * Token types where line endings are used.\n * @property {Handles} enter\n * Opening handles.\n * @property {Handles} exit\n * Closing handles.\n * @property {Array<Transform>} transforms\n * Tree transforms.\n *\n * @typedef {Partial<Config>} Extension\n * Change how markdown tokens from micromark are turned into mdast.\n *\n * @typedef CompileContext\n * mdast compiler context.\n * @property {Array<Fragment | Nodes>} stack\n * Stack of nodes.\n * @property {Array<TokenTuple>} tokenStack\n * Stack of tokens.\n * @property {(this: CompileContext) => undefined} buffer\n * Capture some of the output data.\n * @property {(this: CompileContext) => string} resume\n * Stop capturing and access the output data.\n * @property {(this: CompileContext, node: Nodes, token: Token, onError?: OnEnterError) => undefined} enter\n * Enter a node.\n * @property {(this: CompileContext, token: Token, onError?: OnExitError) => undefined} exit\n * Exit a node.\n * @property {TokenizeContext['sliceSerialize']} sliceSerialize\n * Get the string value of a token.\n * @property {Config} config\n * Configuration.\n * @property {CompileData} data\n * Info passed around; key/value store.\n *\n * @typedef FromMarkdownOptions\n * Configuration for how to build mdast.\n * @property {Array<Extension | Array<Extension>> | null | undefined} [mdastExtensions]\n * Extensions for this utility to change how tokens are turned into a tree.\n *\n * @typedef {ParseOptions & FromMarkdownOptions} Options\n * Configuration.\n */\n\nimport { toString } from 'mdast-util-to-string';\nimport { parse, postprocess, preprocess } from 'micromark';\nimport { decodeNumericCharacterReference } from 'micromark-util-decode-numeric-character-reference';\nimport { decodeString } from 'micromark-util-decode-string';\nimport { normalizeIdentifier } from 'micromark-util-normalize-identifier';\nimport { decodeNamedCharacterReference } from 'decode-named-character-reference';\nimport { stringifyPosition } from 'unist-util-stringify-position';\nconst own = {}.hasOwnProperty;\n\n/**\n * Turn markdown into a syntax tree.\n *\n * @overload\n * @param {Value} value\n * @param {Encoding | null | undefined} [encoding]\n * @param {Options | null | undefined} [options]\n * @returns {Root}\n *\n * @overload\n * @param {Value} value\n * @param {Options | null | undefined} [options]\n * @returns {Root}\n *\n * @param {Value} value\n * Markdown to parse.\n * @param {Encoding | Options | null | undefined} [encoding]\n * Character encoding for when `value` is `Buffer`.\n * @param {Options | null | undefined} [options]\n * Configuration.\n * @returns {Root}\n * mdast tree.\n */\nexport function fromMarkdown(value, encoding, options) {\n if (typeof encoding !== 'string') {\n options = encoding;\n encoding = undefined;\n }\n return compiler(options)(postprocess(parse(options).document().write(preprocess()(value, encoding, true))));\n}\n\n/**\n * Note this compiler only understand complete buffering, not streaming.\n *\n * @param {Options | null | undefined} [options]\n */\nfunction compiler(options) {\n /** @type {Config} */\n const config = {\n transforms: [],\n canContainEols: ['emphasis', 'fragment', 'heading', 'paragraph', 'strong'],\n enter: {\n autolink: opener(link),\n autolinkProtocol: onenterdata,\n autolinkEmail: onenterdata,\n atxHeading: opener(heading),\n blockQuote: opener(blockQuote),\n characterEscape: onenterdata,\n characterReference: onenterdata,\n codeFenced: opener(codeFlow),\n codeFencedFenceInfo: buffer,\n codeFencedFenceMeta: buffer,\n codeIndented: opener(codeFlow, buffer),\n codeText: opener(codeText, buffer),\n codeTextData: onenterdata,\n data: onenterdata,\n codeFlowValue: onenterdata,\n definition: opener(definition),\n definitionDestinationString: buffer,\n definitionLabelString: buffer,\n definitionTitleString: buffer,\n emphasis: opener(emphasis),\n hardBreakEscape: opener(hardBreak),\n hardBreakTrailing: opener(hardBreak),\n htmlFlow: opener(html, buffer),\n htmlFlowData: onenterdata,\n htmlText: opener(html, buffer),\n htmlTextData: onenterdata,\n image: opener(image),\n label: buffer,\n link: opener(link),\n listItem: opener(listItem),\n listItemValue: onenterlistitemvalue,\n listOrdered: opener(list, onenterlistordered),\n listUnordered: opener(list),\n paragraph: opener(paragraph),\n reference: onenterreference,\n referenceString: buffer,\n resourceDestinationString: buffer,\n resourceTitleString: buffer,\n setextHeading: opener(heading),\n strong: opener(strong),\n thematicBreak: opener(thematicBreak)\n },\n exit: {\n atxHeading: closer(),\n atxHeadingSequence: onexitatxheadingsequence,\n autolink: closer(),\n autolinkEmail: onexitautolinkemail,\n autolinkProtocol: onexitautolinkprotocol,\n blockQuote: closer(),\n characterEscapeValue: onexitdata,\n characterReferenceMarkerHexadecimal: onexitcharacterreferencemarker,\n characterReferenceMarkerNumeric: onexitcharacterreferencemarker,\n characterReferenceValue: onexitcharacterreferencevalue,\n characterReference: onexitcharacterreference,\n codeFenced: closer(onexitcodefenced),\n codeFencedFence: onexitcodefencedfence,\n codeFencedFenceInfo: onexitcodefencedfenceinfo,\n codeFencedFenceMeta: onexitcodefencedfencemeta,\n codeFlowValue: onexitdata,\n codeIndented: closer(onexitcodeindented),\n codeText: closer(onexitcodetext),\n codeTextData: onexitdata,\n data: onexitdata,\n definition: closer(),\n definitionDestinationString: onexitdefinitiondestinationstring,\n definitionLabelString: onexitdefinitionlabelstring,\n definitionTitleString: onexitdefinitiontitlestring,\n emphasis: closer(),\n hardBreakEscape: closer(onexithardbreak),\n hardBreakTrailing: closer(onexithardbreak),\n htmlFlow: closer(onexithtmlflow),\n htmlFlowData: onexitdata,\n htmlText: closer(onexithtmltext),\n htmlTextData: onexitdata,\n image: closer(onexitimage),\n label: onexitlabel,\n labelText: onexitlabeltext,\n lineEnding: onexitlineending,\n link: closer(onexitlink),\n listItem: closer(),\n listOrdered: closer(),\n listUnordered: closer(),\n paragraph: closer(),\n referenceString: onexitreferencestring,\n resourceDestinationString: onexitresourcedestinationstring,\n resourceTitleString: onexitresourcetitlestring,\n resource: onexitresource,\n setextHeading: closer(onexitsetextheading),\n setextHeadingLineSequence: onexitsetextheadinglinesequence,\n setextHeadingText: onexitsetextheadingtext,\n strong: closer(),\n thematicBreak: closer()\n }\n };\n configure(config, (options || {}).mdastExtensions || []);\n\n /** @type {CompileData} */\n const data = {};\n return compile;\n\n /**\n * Turn micromark events into an mdast tree.\n *\n * @param {Array<Event>} events\n * Events.\n * @returns {Root}\n * mdast tree.\n */\n function compile(events) {\n /** @type {Root} */\n let tree = {\n type: 'root',\n children: []\n };\n /** @type {Omit<CompileContext, 'sliceSerialize'>} */\n const context = {\n stack: [tree],\n tokenStack: [],\n config,\n enter,\n exit,\n buffer,\n resume,\n data\n };\n /** @type {Array<number>} */\n const listStack = [];\n let index = -1;\n while (++index < events.length) {\n // We preprocess lists to add `listItem` tokens, and to infer whether\n // items the list itself are spread out.\n if (events[index][1].type === \"listOrdered\" || events[index][1].type === \"listUnordered\") {\n if (events[index][0] === 'enter') {\n listStack.push(index);\n } else {\n const tail = listStack.pop();\n index = prepareList(events, tail, index);\n }\n }\n }\n index = -1;\n while (++index < events.length) {\n const handler = config[events[index][0]];\n if (own.call(handler, events[index][1].type)) {\n handler[events[index][1].type].call(Object.assign({\n sliceSerialize: events[index][2].sliceSerialize\n }, context), events[index][1]);\n }\n }\n\n // Handle tokens still being open.\n if (context.tokenStack.length > 0) {\n const tail = context.tokenStack[context.tokenStack.length - 1];\n const handler = tail[1] || defaultOnError;\n handler.call(context, undefined, tail[0]);\n }\n\n // Figure out `root` position.\n tree.position = {\n start: point(events.length > 0 ? events[0][1].start : {\n line: 1,\n column: 1,\n offset: 0\n }),\n end: point(events.length > 0 ? events[events.length - 2][1].end : {\n line: 1,\n column: 1,\n offset: 0\n })\n };\n\n // Call transforms.\n index = -1;\n while (++index < config.transforms.length) {\n tree = config.transforms[index](tree) || tree;\n }\n return tree;\n }\n\n /**\n * @param {Array<Event>} events\n * @param {number} start\n * @param {number} length\n * @returns {number}\n */\n function prepareList(events, start, length) {\n let index = start - 1;\n let containerBalance = -1;\n let listSpread = false;\n /** @type {Token | undefined} */\n let listItem;\n /** @type {number | undefined} */\n let lineIndex;\n /** @type {number | undefined} */\n let firstBlankLineIndex;\n /** @type {boolean | undefined} */\n let atMarker;\n while (++index <= length) {\n const event = events[index];\n switch (event[1].type) {\n case \"listUnordered\":\n case \"listOrdered\":\n case \"blockQuote\":\n {\n if (event[0] === 'enter') {\n containerBalance++;\n } else {\n containerBalance--;\n }\n atMarker = undefined;\n break;\n }\n case \"lineEndingBlank\":\n {\n if (event[0] === 'enter') {\n if (listItem && !atMarker && !containerBalance && !firstBlankLineIndex) {\n firstBlankLineIndex = index;\n }\n atMarker = undefined;\n }\n break;\n }\n case \"linePrefix\":\n case \"listItemValue\":\n case \"listItemMarker\":\n case \"listItemPrefix\":\n case \"listItemPrefixWhitespace\":\n {\n // Empty.\n\n break;\n }\n default:\n {\n atMarker = undefined;\n }\n }\n if (!containerBalance && event[0] === 'enter' && event[1].type === \"listItemPrefix\" || containerBalance === -1 && event[0] === 'exit' && (event[1].type === \"listUnordered\" || event[1].type === \"listOrdered\")) {\n if (listItem) {\n let tailIndex = index;\n lineIndex = undefined;\n while (tailIndex--) {\n const tailEvent = events[tailIndex];\n if (tailEvent[1].type === \"lineEnding\" || tailEvent[1].type === \"lineEndingBlank\") {\n if (tailEvent[0] === 'exit') continue;\n if (lineIndex) {\n events[lineIndex][1].type = \"lineEndingBlank\";\n listSpread = true;\n }\n tailEvent[1].type = \"lineEnding\";\n lineIndex = tailIndex;\n } else if (tailEvent[1].type === \"linePrefix\" || tailEvent[1].type === \"blockQuotePrefix\" || tailEvent[1].type === \"blockQuotePrefixWhitespace\" || tailEvent[1].type === \"blockQuoteMarker\" || tailEvent[1].type === \"listItemIndent\") {\n // Empty\n } else {\n break;\n }\n }\n if (firstBlankLineIndex && (!lineIndex || firstBlankLineIndex < lineIndex)) {\n listItem._spread = true;\n }\n\n // Fix position.\n listItem.end = Object.assign({}, lineIndex ? events[lineIndex][1].start : event[1].end);\n events.splice(lineIndex || index, 0, ['exit', listItem, event[2]]);\n index++;\n length++;\n }\n\n // Create a new list item.\n if (event[1].type === \"listItemPrefix\") {\n /** @type {Token} */\n const item = {\n type: 'listItem',\n _spread: false,\n start: Object.assign({}, event[1].start),\n // @ts-expect-error: we’ll add `end` in a second.\n end: undefined\n };\n listItem = item;\n events.splice(index, 0, ['enter', item, event[2]]);\n index++;\n length++;\n firstBlankLineIndex = undefined;\n atMarker = true;\n }\n }\n }\n events[start][1]._spread = listSpread;\n return length;\n }\n\n /**\n * Create an opener handle.\n *\n * @param {(token: Token) => Nodes} create\n * Create a node.\n * @param {Handle | undefined} [and]\n * Optional function to also run.\n * @returns {Handle}\n * Handle.\n */\n function opener(create, and) {\n return open;\n\n /**\n * @this {CompileContext}\n * @param {Token} token\n * @returns {undefined}\n */\n function open(token) {\n enter.call(this, create(token), token);\n if (and) and.call(this, token);\n }\n }\n\n /**\n * @this {CompileContext}\n * @returns {undefined}\n */\n function buffer() {\n this.stack.push({\n type: 'fragment',\n children: []\n });\n }\n\n /**\n * @this {CompileContext}\n * Context.\n * @param {Nodes} node\n * Node to enter.\n * @param {Token} token\n * Corresponding token.\n * @param {OnEnterError | undefined} [errorHandler]\n * Handle the case where this token is open, but it is closed by something else.\n * @returns {undefined}\n * Nothing.\n */\n function enter(node, token, errorHandler) {\n const parent = this.stack[this.stack.length - 1];\n /** @type {Array<Nodes>} */\n const siblings = parent.children;\n siblings.push(node);\n this.stack.push(node);\n this.tokenStack.push([token, errorHandler]);\n node.position = {\n start: point(token.start),\n // @ts-expect-error: `end` will be patched later.\n end: undefined\n };\n }\n\n /**\n * Create a closer handle.\n *\n * @param {Handle | undefined} [and]\n * Optional function to also run.\n * @returns {Handle}\n * Handle.\n */\n function closer(and) {\n return close;\n\n /**\n * @this {CompileContext}\n * @param {Token} token\n * @returns {undefined}\n */\n function close(token) {\n if (and) and.call(this, token);\n exit.call(this, token);\n }\n }\n\n /**\n * @this {CompileContext}\n * Context.\n * @param {Token} token\n * Corresponding token.\n * @param {OnExitError | undefined} [onExitError]\n * Handle the case where another token is open.\n * @returns {undefined}\n * Nothing.\n */\n function exit(token, onExitError) {\n const node = this.stack.pop();\n const open = this.tokenStack.pop();\n if (!open) {\n throw new Error('Cannot close `' + token.type + '` (' + stringifyPosition({\n start: token.start,\n end: token.end\n }) + '): it’s not open');\n } else if (open[0].type !== token.type) {\n if (onExitError) {\n onExitError.call(this, token, open[0]);\n } else {\n const handler = open[1] || defaultOnError;\n handler.call(this, token, open[0]);\n }\n }\n node.position.end = point(token.end);\n }\n\n /**\n * @this {CompileContext}\n * @returns {string}\n */\n function resume() {\n return toString(this.stack.pop());\n }\n\n //\n // Handlers.\n //\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onenterlistordered() {\n this.data.expectingFirstListItemValue = true;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onenterlistitemvalue(token) {\n if (this.data.expectingFirstListItemValue) {\n const ancestor = this.stack[this.stack.length - 2];\n ancestor.start = Number.parseInt(this.sliceSerialize(token), 10);\n this.data.expectingFirstListItemValue = undefined;\n }\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitcodefencedfenceinfo() {\n const data = this.resume();\n const node = this.stack[this.stack.length - 1];\n node.lang = data;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitcodefencedfencemeta() {\n const data = this.resume();\n const node = this.stack[this.stack.length - 1];\n node.meta = data;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitcodefencedfence() {\n // Exit if this is the closing fence.\n if (this.data.flowCodeInside) return;\n this.buffer();\n this.data.flowCodeInside = true;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitcodefenced() {\n const data = this.resume();\n const node = this.stack[this.stack.length - 1];\n node.value = data.replace(/^(\\r?\\n|\\r)|(\\r?\\n|\\r)$/g, '');\n this.data.flowCodeInside = undefined;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitcodeindented() {\n const data = this.resume();\n const node = this.stack[this.stack.length - 1];\n node.value = data.replace(/(\\r?\\n|\\r)$/g, '');\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitdefinitionlabelstring(token) {\n const label = this.resume();\n const node = this.stack[this.stack.length - 1];\n node.label = label;\n node.identifier = normalizeIdentifier(this.sliceSerialize(token)).toLowerCase();\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitdefinitiontitlestring() {\n const data = this.resume();\n const node = this.stack[this.stack.length - 1];\n node.title = data;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitdefinitiondestinationstring() {\n const data = this.resume();\n const node = this.stack[this.stack.length - 1];\n node.url = data;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitatxheadingsequence(token) {\n const node = this.stack[this.stack.length - 1];\n if (!node.depth) {\n const depth = this.sliceSerialize(token).length;\n node.depth = depth;\n }\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitsetextheadingtext() {\n this.data.setextHeadingSlurpLineEnding = true;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitsetextheadinglinesequence(token) {\n const node = this.stack[this.stack.length - 1];\n node.depth = this.sliceSerialize(token).codePointAt(0) === 61 ? 1 : 2;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitsetextheading() {\n this.data.setextHeadingSlurpLineEnding = undefined;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onenterdata(token) {\n const node = this.stack[this.stack.length - 1];\n /** @type {Array<Nodes>} */\n const siblings = node.children;\n let tail = siblings[siblings.length - 1];\n if (!tail || tail.type !== 'text') {\n // Add a new text node.\n tail = text();\n tail.position = {\n start: point(token.start),\n // @ts-expect-error: we’ll add `end` later.\n end: undefined\n };\n siblings.push(tail);\n }\n this.stack.push(tail);\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitdata(token) {\n const tail = this.stack.pop();\n tail.value += this.sliceSerialize(token);\n tail.position.end = point(token.end);\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitlineending(token) {\n const context = this.stack[this.stack.length - 1];\n // If we’re at a hard break, include the line ending in there.\n if (this.data.atHardBreak) {\n const tail = context.children[context.children.length - 1];\n tail.position.end = point(token.end);\n this.data.atHardBreak = undefined;\n return;\n }\n if (!this.data.setextHeadingSlurpLineEnding && config.canContainEols.includes(context.type)) {\n onenterdata.call(this, token);\n onexitdata.call(this, token);\n }\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexithardbreak() {\n this.data.atHardBreak = true;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexithtmlflow() {\n const data = this.resume();\n const node = this.stack[this.stack.length - 1];\n node.value = data;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexithtmltext() {\n const data = this.resume();\n const node = this.stack[this.stack.length - 1];\n node.value = data;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitcodetext() {\n const data = this.resume();\n const node = this.stack[this.stack.length - 1];\n node.value = data;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitlink() {\n const node = this.stack[this.stack.length - 1];\n // Note: there are also `identifier` and `label` fields on this link node!\n // These are used / cleaned here.\n\n // To do: clean.\n if (this.data.inReference) {\n /** @type {ReferenceType} */\n const referenceType = this.data.referenceType || 'shortcut';\n node.type += 'Reference';\n // @ts-expect-error: mutate.\n node.referenceType = referenceType;\n // @ts-expect-error: mutate.\n delete node.url;\n delete node.title;\n } else {\n // @ts-expect-error: mutate.\n delete node.identifier;\n // @ts-expect-error: mutate.\n delete node.label;\n }\n this.data.referenceType = undefined;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitimage() {\n const node = this.stack[this.stack.length - 1];\n // Note: there are also `identifier` and `label` fields on this link node!\n // These are used / cleaned here.\n\n // To do: clean.\n if (this.data.inReference) {\n /** @type {ReferenceType} */\n const referenceType = this.data.referenceType || 'shortcut';\n node.type += 'Reference';\n // @ts-expect-error: mutate.\n node.referenceType = referenceType;\n // @ts-expect-error: mutate.\n delete node.url;\n delete node.title;\n } else {\n // @ts-expect-error: mutate.\n delete node.identifier;\n // @ts-expect-error: mutate.\n delete node.label;\n }\n this.data.referenceType = undefined;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitlabeltext(token) {\n const string = this.sliceSerialize(token);\n const ancestor = this.stack[this.stack.length - 2];\n // @ts-expect-error: stash this on the node, as it might become a reference\n // later.\n ancestor.label = decodeString(string);\n // @ts-expect-error: same as above.\n ancestor.identifier = normalizeIdentifier(string).toLowerCase();\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitlabel() {\n const fragment = this.stack[this.stack.length - 1];\n const value = this.resume();\n const node = this.stack[this.stack.length - 1];\n // Assume a reference.\n this.data.inReference = true;\n if (node.type === 'link') {\n /** @type {Array<PhrasingContent>} */\n const children = fragment.children;\n node.children = children;\n } else {\n node.alt = value;\n }\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitresourcedestinationstring() {\n const data = this.resume();\n const node = this.stack[this.stack.length - 1];\n node.url = data;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitresourcetitlestring() {\n const data = this.resume();\n const node = this.stack[this.stack.length - 1];\n node.title = data;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitresource() {\n this.data.inReference = undefined;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onenterreference() {\n this.data.referenceType = 'collapsed';\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitreferencestring(token) {\n const label = this.resume();\n const node = this.stack[this.stack.length - 1];\n // @ts-expect-error: stash this on the node, as it might become a reference\n // later.\n node.label = label;\n // @ts-expect-error: same as above.\n node.identifier = normalizeIdentifier(this.sliceSerialize(token)).toLowerCase();\n this.data.referenceType = 'full';\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitcharacterreferencemarker(token) {\n this.data.characterReferenceType = token.type;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitcharacterreferencevalue(token) {\n const data = this.sliceSerialize(token);\n const type = this.data.characterReferenceType;\n /** @type {string} */\n let value;\n if (type) {\n value = decodeNumericCharacterReference(data, type === \"characterReferenceMarkerNumeric\" ? 10 : 16);\n this.data.characterReferenceType = undefined;\n } else {\n const result = decodeNamedCharacterReference(data);\n value = result;\n }\n const tail = this.stack[this.stack.length - 1];\n tail.value += value;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitcharacterreference(token) {\n const tail = this.stack.pop();\n tail.position.end = point(token.end);\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitautolinkprotocol(token) {\n onexitdata.call(this, token);\n const node = this.stack[this.stack.length - 1];\n node.url = this.sliceSerialize(token);\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitautolinkemail(token) {\n onexitdata.call(this, token);\n const node = this.stack[this.stack.length - 1];\n node.url = 'mailto:' + this.sliceSerialize(token);\n }\n\n //\n // Creaters.\n //\n\n /** @returns {Blockquote} */\n function blockQuote() {\n return {\n type: 'blockquote',\n children: []\n };\n }\n\n /** @returns {Code} */\n function codeFlow() {\n return {\n type: 'code',\n lang: null,\n meta: null,\n value: ''\n };\n }\n\n /** @returns {InlineCode} */\n function codeText() {\n return {\n type: 'inlineCode',\n value: ''\n };\n }\n\n /** @returns {Definition} */\n function definition() {\n return {\n type: 'definition',\n identifier: '',\n label: null,\n title: null,\n url: ''\n };\n }\n\n /** @returns {Emphasis} */\n function emphasis() {\n return {\n type: 'emphasis',\n children: []\n };\n }\n\n /** @returns {Heading} */\n function heading() {\n return {\n type: 'heading',\n // @ts-expect-error `depth` will be set later.\n depth: 0,\n children: []\n };\n }\n\n /** @returns {Break} */\n function hardBreak() {\n return {\n type: 'break'\n };\n }\n\n /** @returns {Html} */\n function html() {\n return {\n type: 'html',\n value: ''\n };\n }\n\n /** @returns {Image} */\n function image() {\n return {\n type: 'image',\n title: null,\n url: '',\n alt: null\n };\n }\n\n /** @returns {Link} */\n function link() {\n return {\n type: 'link',\n title: null,\n url: '',\n children: []\n };\n }\n\n /**\n * @param {Token} token\n * @returns {List}\n */\n function list(token) {\n return {\n type: 'list',\n ordered: token.type === 'listOrdered',\n start: null,\n spread: token._spread,\n children: []\n };\n }\n\n /**\n * @param {Token} token\n * @returns {ListItem}\n */\n function listItem(token) {\n return {\n type: 'listItem',\n spread: token._spread,\n checked: null,\n children: []\n };\n }\n\n /** @returns {Paragraph} */\n function paragraph() {\n return {\n type: 'paragraph',\n children: []\n };\n }\n\n /** @returns {Strong} */\n function strong() {\n return {\n type: 'strong',\n children: []\n };\n }\n\n /** @returns {Text} */\n function text() {\n return {\n type: 'text',\n value: ''\n };\n }\n\n /** @returns {ThematicBreak} */\n function thematicBreak() {\n return {\n type: 'thematicBreak'\n };\n }\n}\n\n/**\n * Copy a point-like value.\n *\n * @param {Point} d\n * Point-like value.\n * @returns {Point}\n * unist point.\n */\nfunction point(d) {\n return {\n line: d.line,\n column: d.column,\n offset: d.offset\n };\n}\n\n/**\n * @param {Config} combined\n * @param {Array<Array<Extension> | Extension>} extensions\n * @returns {undefined}\n */\nfunction configure(combined, extensions) {\n let index = -1;\n while (++index < extensions.length) {\n const value = extensions[index];\n if (Array.isArray(value)) {\n configure(combined, value);\n } else {\n extension(combined, value);\n }\n }\n}\n\n/**\n * @param {Config} combined\n * @param {Extension} extension\n * @returns {undefined}\n */\nfunction extension(combined, extension) {\n /** @type {keyof Extension} */\n let key;\n for (key in extension) {\n if (own.call(extension, key)) {\n switch (key) {\n case 'canContainEols':\n {\n const right = extension[key];\n if (right) {\n combined[key].push(...right);\n }\n break;\n }\n case 'transforms':\n {\n const right = extension[key];\n if (right) {\n combined[key].push(...right);\n }\n break;\n }\n case 'enter':\n case 'exit':\n {\n const right = extension[key];\n if (right) {\n Object.assign(combined[key], right);\n }\n break;\n }\n // No default\n }\n }\n }\n}\n\n/** @type {OnEnterError} */\nfunction defaultOnError(left, right) {\n if (left) {\n throw new Error('Cannot close `' + left.type + '` (' + stringifyPosition({\n start: left.start,\n end: left.end\n }) + '): a different token (`' + right.type + '`, ' + stringifyPosition({\n start: right.start,\n end: right.end\n }) + ') is open');\n } else {\n throw new Error('Cannot close document, a token (`' + right.type + '`, ' + stringifyPosition({\n start: right.start,\n end: right.end\n }) + ') is still open');\n }\n}","/**\n * @typedef {import('micromark-util-types').Event} Event\n */\n\nimport {subtokenize} from 'micromark-util-subtokenize'\n\n/**\n * @param {Array<Event>} events\n * @returns {Array<Event>}\n */\nexport function postprocess(events) {\n while (!subtokenize(events)) {\n // Empty\n }\n return events\n}\n","/**\n * @typedef {import('mdast').Root} Root\n * @typedef {import('mdast-util-from-markdown').Options} FromMarkdownOptions\n * @typedef {import('unified').Parser<Root>} Parser\n * @typedef {import('unified').Processor<Root>} Processor\n */\n\n/**\n * @typedef {Omit<FromMarkdownOptions, 'extensions' | 'mdastExtensions'>} Options\n */\n\nimport {fromMarkdown} from 'mdast-util-from-markdown'\n\n/**\n * Aadd support for parsing from markdown.\n *\n * @param {Readonly<Options> | null | undefined} [options]\n * Configuration (optional).\n * @returns {undefined}\n * Nothing.\n */\nexport default function remarkParse(options) {\n /** @type {Processor} */\n // @ts-expect-error: TS in JSDoc generates wrong types if `this` is typed regularly.\n const self = this\n\n self.parser = parser\n\n /**\n * @type {Parser}\n */\n function parser(doc) {\n return fromMarkdown(doc, {\n ...self.data('settings'),\n ...options,\n // Note: these options are not in the readme.\n // The goal is for them to be set by plugins on `data` instead of being\n // passed by users.\n extensions: self.data('micromarkExtensions') || [],\n mdastExtensions: self.data('fromMarkdownExtensions') || []\n })\n }\n}\n","export const VOID = -1;\nexport const PRIMITIVE = 0;\nexport const ARRAY = 1;\nexport const OBJECT = 2;\nexport const DATE = 3;\nexport const REGEXP = 4;\nexport const MAP = 5;\nexport const SET = 6;\nexport const ERROR = 7;\nexport const BIGINT = 8;\n// export const SYMBOL = 9;\n","import {\n VOID, PRIMITIVE,\n ARRAY, OBJECT,\n DATE, REGEXP, MAP, SET,\n ERROR, BIGINT\n} from './types.js';\n\nconst env = typeof self === 'object' ? self : globalThis;\n\nconst deserializer = ($, _) => {\n const as = (out, index) => {\n $.set(index, out);\n return out;\n };\n\n const unpair = index => {\n if ($.has(index))\n return $.get(index);\n\n const [type, value] = _[index];\n switch (type) {\n case PRIMITIVE:\n case VOID:\n return as(value, index);\n case ARRAY: {\n const arr = as([], index);\n for (const index of value)\n arr.push(unpair(index));\n return arr;\n }\n case OBJECT: {\n const object = as({}, index);\n for (const [key, index] of value)\n object[unpair(key)] = unpair(index);\n return object;\n }\n case DATE:\n return as(new Date(value), index);\n case REGEXP: {\n const {source, flags} = value;\n return as(new RegExp(source, flags), index);\n }\n case MAP: {\n const map = as(new Map, index);\n for (const [key, index] of value)\n map.set(unpair(key), unpair(index));\n return map;\n }\n case SET: {\n const set = as(new Set, index);\n for (const index of value)\n set.add(unpair(index));\n return set;\n }\n case ERROR: {\n const {name, message} = value;\n return as(new env[name](message), index);\n }\n case BIGINT:\n return as(BigInt(value), index);\n case 'BigInt':\n return as(Object(BigInt(value)), index);\n }\n return as(new env[type](value), index);\n };\n\n return unpair;\n};\n\n/**\n * @typedef {Array<string,any>} Record a type representation\n */\n\n/**\n * Returns a deserialized value from a serialized array of Records.\n * @param {Record[]} serialized a previously serialized value.\n * @returns {any}\n */\nexport const deserialize = serialized => deserializer(new Map, serialized)(0);\n","import {\n VOID, PRIMITIVE,\n ARRAY, OBJECT,\n DATE, REGEXP, MAP, SET,\n ERROR, BIGINT\n} from './types.js';\n\nconst EMPTY = '';\n\nconst {toString} = {};\nconst {keys} = Object;\n\nconst typeOf = value => {\n const type = typeof value;\n if (type !== 'object' || !value)\n return [PRIMITIVE, type];\n\n const asString = toString.call(value).slice(8, -1);\n switch (asString) {\n case 'Array':\n return [ARRAY, EMPTY];\n case 'Object':\n return [OBJECT, EMPTY];\n case 'Date':\n return [DATE, EMPTY];\n case 'RegExp':\n return [REGEXP, EMPTY];\n case 'Map':\n return [MAP, EMPTY];\n case 'Set':\n return [SET, EMPTY];\n }\n\n if (asString.includes('Array'))\n return [ARRAY, asString];\n\n if (asString.includes('Error'))\n return [ERROR, asString];\n\n return [OBJECT, asString];\n};\n\nconst shouldSkip = ([TYPE, type]) => (\n TYPE === PRIMITIVE &&\n (type === 'function' || type === 'symbol')\n);\n\nconst serializer = (strict, json, $, _) => {\n\n const as = (out, value) => {\n const index = _.push(out) - 1;\n $.set(value, index);\n return index;\n };\n\n const pair = value => {\n if ($.has(value))\n return $.get(value);\n\n let [TYPE, type] = typeOf(value);\n switch (TYPE) {\n case PRIMITIVE: {\n let entry = value;\n switch (type) {\n case 'bigint':\n TYPE = BIGINT;\n entry = value.toString();\n break;\n case 'function':\n case 'symbol':\n if (strict)\n throw new TypeError('unable to serialize ' + type);\n entry = null;\n break;\n case 'undefined':\n return as([VOID], value);\n }\n return as([TYPE, entry], value);\n }\n case ARRAY: {\n if (type)\n return as([type, [...value]], value);\n \n const arr = [];\n const index = as([TYPE, arr], value);\n for (const entry of value)\n arr.push(pair(entry));\n return index;\n }\n case OBJECT: {\n if (type) {\n switch (type) {\n case 'BigInt':\n return as([type, value.toString()], value);\n case 'Boolean':\n case 'Number':\n case 'String':\n return as([type, value.valueOf()], value);\n }\n }\n\n if (json && ('toJSON' in value))\n return pair(value.toJSON());\n\n const entries = [];\n const index = as([TYPE, entries], value);\n for (const key of keys(value)) {\n if (strict || !shouldSkip(typeOf(value[key])))\n entries.push([pair(key), pair(value[key])]);\n }\n return index;\n }\n case DATE:\n return as([TYPE, value.toISOString()], value);\n case REGEXP: {\n const {source, flags} = value;\n return as([TYPE, {source, flags}], value);\n }\n case MAP: {\n const entries = [];\n const index = as([TYPE, entries], value);\n for (const [key, entry] of value) {\n if (strict || !(shouldSkip(typeOf(key)) || shouldSkip(typeOf(entry))))\n entries.push([pair(key), pair(entry)]);\n }\n return index;\n }\n case SET: {\n const entries = [];\n const index = as([TYPE, entries], value);\n for (const entry of value) {\n if (strict || !shouldSkip(typeOf(entry)))\n entries.push(pair(entry));\n }\n return index;\n }\n }\n\n const {message} = value;\n return as([TYPE, {name: type, message}], value);\n };\n\n return pair;\n};\n\n/**\n * @typedef {Array<string,any>} Record a type representation\n */\n\n/**\n * Returns an array of serialized Records.\n * @param {any} value a serializable value.\n * @param {{json?: boolean, lossy?: boolean}?} options an object with a `lossy` or `json` property that,\n * if `true`, will not throw errors on incompatible types, and behave more\n * like JSON stringify would behave. Symbol and Function will be discarded.\n * @returns {Record[]}\n */\n export const serialize = (value, {json, lossy} = {}) => {\n const _ = [];\n return serializer(!(json || lossy), !!json, new Map, _)(value), _;\n};\n","import {deserialize} from './deserialize.js';\nimport {serialize} from './serialize.js';\n\n/**\n * @typedef {Array<string,any>} Record a type representation\n */\n\n/**\n * Returns an array of serialized Records.\n * @param {any} any a serializable value.\n * @param {{transfer?: any[], json?: boolean, lossy?: boolean}?} options an object with\n * a transfer option (ignored when polyfilled) and/or non standard fields that\n * fallback to the polyfill if present.\n * @returns {Record[]}\n */\nexport default typeof structuredClone === \"function\" ?\n /* c8 ignore start */\n (any, options) => (\n options && ('json' in options || 'lossy' in options) ?\n deserialize(serialize(any, options)) : structuredClone(any)\n ) :\n (any, options) => deserialize(serialize(any, options));\n /* c8 ignore stop */\n\nexport {deserialize, serialize};\n","/**\n * @typedef {import('micromark-util-types').Code} Code\n */\n\n/**\n * Check whether the character code represents an ASCII alpha (`a` through `z`,\n * case insensitive).\n *\n * An **ASCII alpha** is an ASCII upper alpha or ASCII lower alpha.\n *\n * An **ASCII upper alpha** is a character in the inclusive range U+0041 (`A`)\n * to U+005A (`Z`).\n *\n * An **ASCII lower alpha** is a character in the inclusive range U+0061 (`a`)\n * to U+007A (`z`).\n *\n * @param code\n * Code.\n * @returns {boolean}\n * Whether it matches.\n */\nexport const asciiAlpha = regexCheck(/[A-Za-z]/);\n\n/**\n * Check whether the character code represents an ASCII alphanumeric (`a`\n * through `z`, case insensitive, or `0` through `9`).\n *\n * An **ASCII alphanumeric** is an ASCII digit (see `asciiDigit`) or ASCII alpha\n * (see `asciiAlpha`).\n *\n * @param code\n * Code.\n * @returns {boolean}\n * Whether it matches.\n */\nexport const asciiAlphanumeric = regexCheck(/[\\dA-Za-z]/);\n\n/**\n * Check whether the character code represents an ASCII atext.\n *\n * atext is an ASCII alphanumeric (see `asciiAlphanumeric`), or a character in\n * the inclusive ranges U+0023 NUMBER SIGN (`#`) to U+0027 APOSTROPHE (`'`),\n * U+002A ASTERISK (`*`), U+002B PLUS SIGN (`+`), U+002D DASH (`-`), U+002F\n * SLASH (`/`), U+003D EQUALS TO (`=`), U+003F QUESTION MARK (`?`), U+005E\n * CARET (`^`) to U+0060 GRAVE ACCENT (`` ` ``), or U+007B LEFT CURLY BRACE\n * (`{`) to U+007E TILDE (`~`).\n *\n * See:\n * **\\[RFC5322]**:\n * [Internet Message Format](https://tools.ietf.org/html/rfc5322).\n * P. Resnick.\n * IETF.\n *\n * @param code\n * Code.\n * @returns {boolean}\n * Whether it matches.\n */\nexport const asciiAtext = regexCheck(/[#-'*+\\--9=?A-Z^-~]/);\n\n/**\n * Check whether a character code is an ASCII control character.\n *\n * An **ASCII control** is a character in the inclusive range U+0000 NULL (NUL)\n * to U+001F (US), or U+007F (DEL).\n *\n * @param {Code} code\n * Code.\n * @returns {boolean}\n * Whether it matches.\n */\nexport function asciiControl(code) {\n return (\n // Special whitespace codes (which have negative values), C0 and Control\n // character DEL\n code !== null && (code < 32 || code === 127)\n );\n}\n\n/**\n * Check whether the character code represents an ASCII digit (`0` through `9`).\n *\n * An **ASCII digit** is a character in the inclusive range U+0030 (`0`) to\n * U+0039 (`9`).\n *\n * @param code\n * Code.\n * @returns {boolean}\n * Whether it matches.\n */\nexport const asciiDigit = regexCheck(/\\d/);\n\n/**\n * Check whether the character code represents an ASCII hex digit (`a` through\n * `f`, case insensitive, or `0` through `9`).\n *\n * An **ASCII hex digit** is an ASCII digit (see `asciiDigit`), ASCII upper hex\n * digit, or an ASCII lower hex digit.\n *\n * An **ASCII upper hex digit** is a character in the inclusive range U+0041\n * (`A`) to U+0046 (`F`).\n *\n * An **ASCII lower hex digit** is a character in the inclusive range U+0061\n * (`a`) to U+0066 (`f`).\n *\n * @param code\n * Code.\n * @returns {boolean}\n * Whether it matches.\n */\nexport const asciiHexDigit = regexCheck(/[\\dA-Fa-f]/);\n\n/**\n * Check whether the character code represents ASCII punctuation.\n *\n * An **ASCII punctuation** is a character in the inclusive ranges U+0021\n * EXCLAMATION MARK (`!`) to U+002F SLASH (`/`), U+003A COLON (`:`) to U+0040 AT\n * SIGN (`@`), U+005B LEFT SQUARE BRACKET (`[`) to U+0060 GRAVE ACCENT\n * (`` ` ``), or U+007B LEFT CURLY BRACE (`{`) to U+007E TILDE (`~`).\n *\n * @param code\n * Code.\n * @returns {boolean}\n * Whether it matches.\n */\nexport const asciiPunctuation = regexCheck(/[!-/:-@[-`{-~]/);\n\n/**\n * Check whether a character code is a markdown line ending.\n *\n * A **markdown line ending** is the virtual characters M-0003 CARRIAGE RETURN\n * LINE FEED (CRLF), M-0004 LINE FEED (LF) and M-0005 CARRIAGE RETURN (CR).\n *\n * In micromark, the actual character U+000A LINE FEED (LF) and U+000D CARRIAGE\n * RETURN (CR) are replaced by these virtual characters depending on whether\n * they occurred together.\n *\n * @param {Code} code\n * Code.\n * @returns {boolean}\n * Whether it matches.\n */\nexport function markdownLineEnding(code) {\n return code !== null && code < -2;\n}\n\n/**\n * Check whether a character code is a markdown line ending (see\n * `markdownLineEnding`) or markdown space (see `markdownSpace`).\n *\n * @param {Code} code\n * Code.\n * @returns {boolean}\n * Whether it matches.\n */\nexport function markdownLineEndingOrSpace(code) {\n return code !== null && (code < 0 || code === 32);\n}\n\n/**\n * Check whether a character code is a markdown space.\n *\n * A **markdown space** is the concrete character U+0020 SPACE (SP) and the\n * virtual characters M-0001 VIRTUAL SPACE (VS) and M-0002 HORIZONTAL TAB (HT).\n *\n * In micromark, the actual character U+0009 CHARACTER TABULATION (HT) is\n * replaced by one M-0002 HORIZONTAL TAB (HT) and between 0 and 3 M-0001 VIRTUAL\n * SPACE (VS) characters, depending on the column at which the tab occurred.\n *\n * @param {Code} code\n * Code.\n * @returns {boolean}\n * Whether it matches.\n */\nexport function markdownSpace(code) {\n return code === -2 || code === -1 || code === 32;\n}\n\n// Size note: removing ASCII from the regex and using `asciiPunctuation` here\n// In fact adds to the bundle size.\n/**\n * Check whether the character code represents Unicode punctuation.\n *\n * A **Unicode punctuation** is a character in the Unicode `Pc` (Punctuation,\n * Connector), `Pd` (Punctuation, Dash), `Pe` (Punctuation, Close), `Pf`\n * (Punctuation, Final quote), `Pi` (Punctuation, Initial quote), `Po`\n * (Punctuation, Other), or `Ps` (Punctuation, Open) categories, or an ASCII\n * punctuation (see `asciiPunctuation`).\n *\n * See:\n * **\\[UNICODE]**:\n * [The Unicode Standard](https://www.unicode.org/versions/).\n * Unicode Consortium.\n *\n * @param code\n * Code.\n * @returns\n * Whether it matches.\n */\nexport const unicodePunctuation = regexCheck(/\\p{P}|\\p{S}/u);\n\n/**\n * Check whether the character code represents Unicode whitespace.\n *\n * Note that this does handle micromark specific markdown whitespace characters.\n * See `markdownLineEndingOrSpace` to check that.\n *\n * A **Unicode whitespace** is a character in the Unicode `Zs` (Separator,\n * Space) category, or U+0009 CHARACTER TABULATION (HT), U+000A LINE FEED (LF),\n * U+000C (FF), or U+000D CARRIAGE RETURN (CR) (**\\[UNICODE]**).\n *\n * See:\n * **\\[UNICODE]**:\n * [The Unicode Standard](https://www.unicode.org/versions/).\n * Unicode Consortium.\n *\n * @param code\n * Code.\n * @returns\n * Whether it matches.\n */\nexport const unicodeWhitespace = regexCheck(/\\s/);\n\n/**\n * Create a code check from a regex.\n *\n * @param {RegExp} regex\n * @returns {(code: Code) => boolean}\n */\nfunction regexCheck(regex) {\n return check;\n\n /**\n * Check whether a code matches the bound regex.\n *\n * @param {Code} code\n * Character code.\n * @returns {boolean}\n * Whether the character code matches the bound regex.\n */\n function check(code) {\n return code !== null && code > -1 && regex.test(String.fromCharCode(code));\n }\n}","import {asciiAlphanumeric} from 'micromark-util-character'\nimport {encode} from 'micromark-util-encode'\n/**\n * Make a value safe for injection as a URL.\n *\n * This encodes unsafe characters with percent-encoding and skips already\n * encoded sequences (see `normalizeUri`).\n * Further unsafe characters are encoded as character references (see\n * `micromark-util-encode`).\n *\n * A regex of allowed protocols can be given, in which case the URL is\n * sanitized.\n * For example, `/^(https?|ircs?|mailto|xmpp)$/i` can be used for `a[href]`, or\n * `/^https?$/i` for `img[src]` (this is what `github.com` allows).\n * If the URL includes an unknown protocol (one not matched by `protocol`, such\n * as a dangerous example, `javascript:`), the value is ignored.\n *\n * @param {string | null | undefined} url\n * URI to sanitize.\n * @param {RegExp | null | undefined} [protocol]\n * Allowed protocols.\n * @returns {string}\n * Sanitized URI.\n */\nexport function sanitizeUri(url, protocol) {\n const value = encode(normalizeUri(url || ''))\n if (!protocol) {\n return value\n }\n const colon = value.indexOf(':')\n const questionMark = value.indexOf('?')\n const numberSign = value.indexOf('#')\n const slash = value.indexOf('/')\n if (\n // If there is no protocol, it’s relative.\n colon < 0 ||\n // If the first colon is after a `?`, `#`, or `/`, it’s not a protocol.\n (slash > -1 && colon > slash) ||\n (questionMark > -1 && colon > questionMark) ||\n (numberSign > -1 && colon > numberSign) ||\n // It is a protocol, it should be allowed.\n protocol.test(value.slice(0, colon))\n ) {\n return value\n }\n return ''\n}\n\n/**\n * Normalize a URL.\n *\n * Encode unsafe characters with percent-encoding, skipping already encoded\n * sequences.\n *\n * @param {string} value\n * URI to normalize.\n * @returns {string}\n * Normalized URI.\n */\nexport function normalizeUri(value) {\n /** @type {Array<string>} */\n const result = []\n let index = -1\n let start = 0\n let skip = 0\n while (++index < value.length) {\n const code = value.charCodeAt(index)\n /** @type {string} */\n let replace = ''\n\n // A correct percent encoded value.\n if (\n code === 37 &&\n asciiAlphanumeric(value.charCodeAt(index + 1)) &&\n asciiAlphanumeric(value.charCodeAt(index + 2))\n ) {\n skip = 2\n }\n // ASCII.\n else if (code < 128) {\n if (!/[!#$&-;=?-Z_a-z~]/.test(String.fromCharCode(code))) {\n replace = String.fromCharCode(code)\n }\n }\n // Astral.\n else if (code > 55_295 && code < 57_344) {\n const next = value.charCodeAt(index + 1)\n\n // A correct surrogate pair.\n if (code < 56_320 && next > 56_319 && next < 57_344) {\n replace = String.fromCharCode(code, next)\n skip = 1\n }\n // Lone surrogate.\n else {\n replace = '\\uFFFD'\n }\n }\n // Unicode.\n else {\n replace = String.fromCharCode(code)\n }\n if (replace) {\n result.push(value.slice(start, index), encodeURIComponent(replace))\n start = index + skip + 1\n replace = ''\n }\n if (skip) {\n index += skip\n skip = 0\n }\n }\n return result.join('') + value.slice(start)\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').ElementContent} ElementContent\n *\n * @typedef {import('./state.js').State} State\n */\n\n/**\n * @callback FootnoteBackContentTemplate\n * Generate content for the backreference dynamically.\n *\n * For the following markdown:\n *\n * ```markdown\n * Alpha[^micromark], bravo[^micromark], and charlie[^remark].\n *\n * [^remark]: things about remark\n * [^micromark]: things about micromark\n * ```\n *\n * This function will be called with:\n *\n * * `0` and `0` for the backreference from `things about micromark` to\n * `alpha`, as it is the first used definition, and the first call to it\n * * `0` and `1` for the backreference from `things about micromark` to\n * `bravo`, as it is the first used definition, and the second call to it\n * * `1` and `0` for the backreference from `things about remark` to\n * `charlie`, as it is the second used definition\n * @param {number} referenceIndex\n * Index of the definition in the order that they are first referenced,\n * 0-indexed.\n * @param {number} rereferenceIndex\n * Index of calls to the same definition, 0-indexed.\n * @returns {Array<ElementContent> | ElementContent | string}\n * Content for the backreference when linking back from definitions to their\n * reference.\n *\n * @callback FootnoteBackLabelTemplate\n * Generate a back label dynamically.\n *\n * For the following markdown:\n *\n * ```markdown\n * Alpha[^micromark], bravo[^micromark], and charlie[^remark].\n *\n * [^remark]: things about remark\n * [^micromark]: things about micromark\n * ```\n *\n * This function will be called with:\n *\n * * `0` and `0` for the backreference from `things about micromark` to\n * `alpha`, as it is the first used definition, and the first call to it\n * * `0` and `1` for the backreference from `things about micromark` to\n * `bravo`, as it is the first used definition, and the second call to it\n * * `1` and `0` for the backreference from `things about remark` to\n * `charlie`, as it is the second used definition\n * @param {number} referenceIndex\n * Index of the definition in the order that they are first referenced,\n * 0-indexed.\n * @param {number} rereferenceIndex\n * Index of calls to the same definition, 0-indexed.\n * @returns {string}\n * Back label to use when linking back from definitions to their reference.\n */\n\nimport structuredClone from '@ungap/structured-clone'\nimport {normalizeUri} from 'micromark-util-sanitize-uri'\n\n/**\n * Generate the default content that GitHub uses on backreferences.\n *\n * @param {number} _\n * Index of the definition in the order that they are first referenced,\n * 0-indexed.\n * @param {number} rereferenceIndex\n * Index of calls to the same definition, 0-indexed.\n * @returns {Array<ElementContent>}\n * Content.\n */\nexport function defaultFootnoteBackContent(_, rereferenceIndex) {\n /** @type {Array<ElementContent>} */\n const result = [{type: 'text', value: '↩'}]\n\n if (rereferenceIndex > 1) {\n result.push({\n type: 'element',\n tagName: 'sup',\n properties: {},\n children: [{type: 'text', value: String(rereferenceIndex)}]\n })\n }\n\n return result\n}\n\n/**\n * Generate the default label that GitHub uses on backreferences.\n *\n * @param {number} referenceIndex\n * Index of the definition in the order that they are first referenced,\n * 0-indexed.\n * @param {number} rereferenceIndex\n * Index of calls to the same definition, 0-indexed.\n * @returns {string}\n * Label.\n */\nexport function defaultFootnoteBackLabel(referenceIndex, rereferenceIndex) {\n return (\n 'Back to reference ' +\n (referenceIndex + 1) +\n (rereferenceIndex > 1 ? '-' + rereferenceIndex : '')\n )\n}\n\n/**\n * Generate a hast footer for called footnote definitions.\n *\n * @param {State} state\n * Info passed around.\n * @returns {Element | undefined}\n * `section` element or `undefined`.\n */\n// eslint-disable-next-line complexity\nexport function footer(state) {\n const clobberPrefix =\n typeof state.options.clobberPrefix === 'string'\n ? state.options.clobberPrefix\n : 'user-content-'\n const footnoteBackContent =\n state.options.footnoteBackContent || defaultFootnoteBackContent\n const footnoteBackLabel =\n state.options.footnoteBackLabel || defaultFootnoteBackLabel\n const footnoteLabel = state.options.footnoteLabel || 'Footnotes'\n const footnoteLabelTagName = state.options.footnoteLabelTagName || 'h2'\n const footnoteLabelProperties = state.options.footnoteLabelProperties || {\n className: ['sr-only']\n }\n /** @type {Array<ElementContent>} */\n const listItems = []\n let referenceIndex = -1\n\n while (++referenceIndex < state.footnoteOrder.length) {\n const definition = state.footnoteById.get(\n state.footnoteOrder[referenceIndex]\n )\n\n if (!definition) {\n continue\n }\n\n const content = state.all(definition)\n const id = String(definition.identifier).toUpperCase()\n const safeId = normalizeUri(id.toLowerCase())\n let rereferenceIndex = 0\n /** @type {Array<ElementContent>} */\n const backReferences = []\n const counts = state.footnoteCounts.get(id)\n\n // eslint-disable-next-line no-unmodified-loop-condition\n while (counts !== undefined && ++rereferenceIndex <= counts) {\n if (backReferences.length > 0) {\n backReferences.push({type: 'text', value: ' '})\n }\n\n let children =\n typeof footnoteBackContent === 'string'\n ? footnoteBackContent\n : footnoteBackContent(referenceIndex, rereferenceIndex)\n\n if (typeof children === 'string') {\n children = {type: 'text', value: children}\n }\n\n backReferences.push({\n type: 'element',\n tagName: 'a',\n properties: {\n href:\n '#' +\n clobberPrefix +\n 'fnref-' +\n safeId +\n (rereferenceIndex > 1 ? '-' + rereferenceIndex : ''),\n dataFootnoteBackref: '',\n ariaLabel:\n typeof footnoteBackLabel === 'string'\n ? footnoteBackLabel\n : footnoteBackLabel(referenceIndex, rereferenceIndex),\n className: ['data-footnote-backref']\n },\n children: Array.isArray(children) ? children : [children]\n })\n }\n\n const tail = content[content.length - 1]\n\n if (tail && tail.type === 'element' && tail.tagName === 'p') {\n const tailTail = tail.children[tail.children.length - 1]\n if (tailTail && tailTail.type === 'text') {\n tailTail.value += ' '\n } else {\n tail.children.push({type: 'text', value: ' '})\n }\n\n tail.children.push(...backReferences)\n } else {\n content.push(...backReferences)\n }\n\n /** @type {Element} */\n const listItem = {\n type: 'element',\n tagName: 'li',\n properties: {id: clobberPrefix + 'fn-' + safeId},\n children: state.wrap(content, true)\n }\n\n state.patch(definition, listItem)\n\n listItems.push(listItem)\n }\n\n if (listItems.length === 0) {\n return\n }\n\n return {\n type: 'element',\n tagName: 'section',\n properties: {dataFootnotes: true, className: ['footnotes']},\n children: [\n {\n type: 'element',\n tagName: footnoteLabelTagName,\n properties: {\n ...structuredClone(footnoteLabelProperties),\n id: 'footnote-label'\n },\n children: [{type: 'text', value: footnoteLabel}]\n },\n {type: 'text', value: '\\n'},\n {\n type: 'element',\n tagName: 'ol',\n properties: {},\n children: state.wrap(listItems, true)\n },\n {type: 'text', value: '\\n'}\n ]\n }\n}\n","/**\n * @typedef {import('unist').Node} Node\n * @typedef {import('unist').Parent} Parent\n */\n\n/**\n * @template Fn\n * @template Fallback\n * @typedef {Fn extends (value: any) => value is infer Thing ? Thing : Fallback} Predicate\n */\n\n/**\n * @callback Check\n * Check that an arbitrary value is a node.\n * @param {unknown} this\n * The given context.\n * @param {unknown} [node]\n * Anything (typically a node).\n * @param {number | null | undefined} [index]\n * The node’s position in its parent.\n * @param {Parent | null | undefined} [parent]\n * The node’s parent.\n * @returns {boolean}\n * Whether this is a node and passes a test.\n *\n * @typedef {Record<string, unknown> | Node} Props\n * Object to check for equivalence.\n *\n * Note: `Node` is included as it is common but is not indexable.\n *\n * @typedef {Array<Props | TestFunction | string> | Props | TestFunction | string | null | undefined} Test\n * Check for an arbitrary node.\n *\n * @callback TestFunction\n * Check if a node passes a test.\n * @param {unknown} this\n * The given context.\n * @param {Node} node\n * A node.\n * @param {number | undefined} [index]\n * The node’s position in its parent.\n * @param {Parent | undefined} [parent]\n * The node’s parent.\n * @returns {boolean | undefined | void}\n * Whether this node passes the test.\n *\n * Note: `void` is included until TS sees no return as `undefined`.\n */\n\n/**\n * Check if `node` is a `Node` and whether it passes the given test.\n *\n * @param {unknown} node\n * Thing to check, typically `Node`.\n * @param {Test} test\n * A check for a specific node.\n * @param {number | null | undefined} index\n * The node’s position in its parent.\n * @param {Parent | null | undefined} parent\n * The node’s parent.\n * @param {unknown} context\n * Context object (`this`) to pass to `test` functions.\n * @returns {boolean}\n * Whether `node` is a node and passes a test.\n */\nexport const is =\n // Note: overloads in JSDoc can’t yet use different `@template`s.\n /**\n * @type {(\n * (<Condition extends string>(node: unknown, test: Condition, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & {type: Condition}) &\n * (<Condition extends Props>(node: unknown, test: Condition, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & Condition) &\n * (<Condition extends TestFunction>(node: unknown, test: Condition, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & Predicate<Condition, Node>) &\n * ((node?: null | undefined) => false) &\n * ((node: unknown, test?: null | undefined, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node) &\n * ((node: unknown, test?: Test, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => boolean)\n * )}\n */\n (\n /**\n * @param {unknown} [node]\n * @param {Test} [test]\n * @param {number | null | undefined} [index]\n * @param {Parent | null | undefined} [parent]\n * @param {unknown} [context]\n * @returns {boolean}\n */\n // eslint-disable-next-line max-params\n function (node, test, index, parent, context) {\n const check = convert(test)\n\n if (\n index !== undefined &&\n index !== null &&\n (typeof index !== 'number' ||\n index < 0 ||\n index === Number.POSITIVE_INFINITY)\n ) {\n throw new Error('Expected positive finite index')\n }\n\n if (\n parent !== undefined &&\n parent !== null &&\n (!is(parent) || !parent.children)\n ) {\n throw new Error('Expected parent node')\n }\n\n if (\n (parent === undefined || parent === null) !==\n (index === undefined || index === null)\n ) {\n throw new Error('Expected both parent and index')\n }\n\n return looksLikeANode(node)\n ? check.call(context, node, index, parent)\n : false\n }\n )\n\n/**\n * Generate an assertion from a test.\n *\n * Useful if you’re going to test many nodes, for example when creating a\n * utility where something else passes a compatible test.\n *\n * The created function is a bit faster because it expects valid input only:\n * a `node`, `index`, and `parent`.\n *\n * @param {Test} test\n * * when nullish, checks if `node` is a `Node`.\n * * when `string`, works like passing `(node) => node.type === test`.\n * * when `function` checks if function passed the node is true.\n * * when `object`, checks that all keys in test are in node, and that they have (strictly) equal values.\n * * when `array`, checks if any one of the subtests pass.\n * @returns {Check}\n * An assertion.\n */\nexport const convert =\n // Note: overloads in JSDoc can’t yet use different `@template`s.\n /**\n * @type {(\n * (<Condition extends string>(test: Condition) => (node: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & {type: Condition}) &\n * (<Condition extends Props>(test: Condition) => (node: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & Condition) &\n * (<Condition extends TestFunction>(test: Condition) => (node: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & Predicate<Condition, Node>) &\n * ((test?: null | undefined) => (node?: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node) &\n * ((test?: Test) => Check)\n * )}\n */\n (\n /**\n * @param {Test} [test]\n * @returns {Check}\n */\n function (test) {\n if (test === null || test === undefined) {\n return ok\n }\n\n if (typeof test === 'function') {\n return castFactory(test)\n }\n\n if (typeof test === 'object') {\n return Array.isArray(test) ? anyFactory(test) : propsFactory(test)\n }\n\n if (typeof test === 'string') {\n return typeFactory(test)\n }\n\n throw new Error('Expected function, string, or object as test')\n }\n )\n\n/**\n * @param {Array<Props | TestFunction | string>} tests\n * @returns {Check}\n */\nfunction anyFactory(tests) {\n /** @type {Array<Check>} */\n const checks = []\n let index = -1\n\n while (++index < tests.length) {\n checks[index] = convert(tests[index])\n }\n\n return castFactory(any)\n\n /**\n * @this {unknown}\n * @type {TestFunction}\n */\n function any(...parameters) {\n let index = -1\n\n while (++index < checks.length) {\n if (checks[index].apply(this, parameters)) return true\n }\n\n return false\n }\n}\n\n/**\n * Turn an object into a test for a node with a certain fields.\n *\n * @param {Props} check\n * @returns {Check}\n */\nfunction propsFactory(check) {\n const checkAsRecord = /** @type {Record<string, unknown>} */ (check)\n\n return castFactory(all)\n\n /**\n * @param {Node} node\n * @returns {boolean}\n */\n function all(node) {\n const nodeAsRecord = /** @type {Record<string, unknown>} */ (\n /** @type {unknown} */ (node)\n )\n\n /** @type {string} */\n let key\n\n for (key in check) {\n if (nodeAsRecord[key] !== checkAsRecord[key]) return false\n }\n\n return true\n }\n}\n\n/**\n * Turn a string into a test for a node with a certain type.\n *\n * @param {string} check\n * @returns {Check}\n */\nfunction typeFactory(check) {\n return castFactory(type)\n\n /**\n * @param {Node} node\n */\n function type(node) {\n return node && node.type === check\n }\n}\n\n/**\n * Turn a custom test into a test for a node that passes that test.\n *\n * @param {TestFunction} testFunction\n * @returns {Check}\n */\nfunction castFactory(testFunction) {\n return check\n\n /**\n * @this {unknown}\n * @type {Check}\n */\n function check(value, index, parent) {\n return Boolean(\n looksLikeANode(value) &&\n testFunction.call(\n this,\n value,\n typeof index === 'number' ? index : undefined,\n parent || undefined\n )\n )\n }\n}\n\nfunction ok() {\n return true\n}\n\n/**\n * @param {unknown} value\n * @returns {value is Node}\n */\nfunction looksLikeANode(value) {\n return value !== null && typeof value === 'object' && 'type' in value\n}\n","/**\n * @typedef {import('unist').Node} UnistNode\n * @typedef {import('unist').Parent} UnistParent\n */\n\n/**\n * @typedef {Exclude<import('unist-util-is').Test, undefined> | undefined} Test\n * Test from `unist-util-is`.\n *\n * Note: we have remove and add `undefined`, because otherwise when generating\n * automatic `.d.ts` files, TS tries to flatten paths from a local perspective,\n * which doesn’t work when publishing on npm.\n */\n\n/**\n * @typedef {(\n * Fn extends (value: any) => value is infer Thing\n * ? Thing\n * : Fallback\n * )} Predicate\n * Get the value of a type guard `Fn`.\n * @template Fn\n * Value; typically function that is a type guard (such as `(x): x is Y`).\n * @template Fallback\n * Value to yield if `Fn` is not a type guard.\n */\n\n/**\n * @typedef {(\n * Check extends null | undefined // No test.\n * ? Value\n * : Value extends {type: Check} // String (type) test.\n * ? Value\n * : Value extends Check // Partial test.\n * ? Value\n * : Check extends Function // Function test.\n * ? Predicate<Check, Value> extends Value\n * ? Predicate<Check, Value>\n * : never\n * : never // Some other test?\n * )} MatchesOne\n * Check whether a node matches a primitive check in the type system.\n * @template Value\n * Value; typically unist `Node`.\n * @template Check\n * Value; typically `unist-util-is`-compatible test, but not arrays.\n */\n\n/**\n * @typedef {(\n * Check extends Array<any>\n * ? MatchesOne<Value, Check[keyof Check]>\n * : MatchesOne<Value, Check>\n * )} Matches\n * Check whether a node matches a check in the type system.\n * @template Value\n * Value; typically unist `Node`.\n * @template Check\n * Value; typically `unist-util-is`-compatible test.\n */\n\n/**\n * @typedef {0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10} Uint\n * Number; capped reasonably.\n */\n\n/**\n * @typedef {I extends 0 ? 1 : I extends 1 ? 2 : I extends 2 ? 3 : I extends 3 ? 4 : I extends 4 ? 5 : I extends 5 ? 6 : I extends 6 ? 7 : I extends 7 ? 8 : I extends 8 ? 9 : 10} Increment\n * Increment a number in the type system.\n * @template {Uint} [I=0]\n * Index.\n */\n\n/**\n * @typedef {(\n * Node extends UnistParent\n * ? Node extends {children: Array<infer Children>}\n * ? Child extends Children ? Node : never\n * : never\n * : never\n * )} InternalParent\n * Collect nodes that can be parents of `Child`.\n * @template {UnistNode} Node\n * All node types in a tree.\n * @template {UnistNode} Child\n * Node to search for.\n */\n\n/**\n * @typedef {InternalParent<InclusiveDescendant<Tree>, Child>} Parent\n * Collect nodes in `Tree` that can be parents of `Child`.\n * @template {UnistNode} Tree\n * All node types in a tree.\n * @template {UnistNode} Child\n * Node to search for.\n */\n\n/**\n * @typedef {(\n * Depth extends Max\n * ? never\n * :\n * | InternalParent<Node, Child>\n * | InternalAncestor<Node, InternalParent<Node, Child>, Max, Increment<Depth>>\n * )} InternalAncestor\n * Collect nodes in `Tree` that can be ancestors of `Child`.\n * @template {UnistNode} Node\n * All node types in a tree.\n * @template {UnistNode} Child\n * Node to search for.\n * @template {Uint} [Max=10]\n * Max; searches up to this depth.\n * @template {Uint} [Depth=0]\n * Current depth.\n */\n\n/**\n * @typedef {InternalAncestor<InclusiveDescendant<Tree>, Child>} Ancestor\n * Collect nodes in `Tree` that can be ancestors of `Child`.\n * @template {UnistNode} Tree\n * All node types in a tree.\n * @template {UnistNode} Child\n * Node to search for.\n */\n\n/**\n * @typedef {(\n * Tree extends UnistParent\n * ? Depth extends Max\n * ? Tree\n * : Tree | InclusiveDescendant<Tree['children'][number], Max, Increment<Depth>>\n * : Tree\n * )} InclusiveDescendant\n * Collect all (inclusive) descendants of `Tree`.\n *\n * > 👉 **Note**: for performance reasons, this seems to be the fastest way to\n * > recurse without actually running into an infinite loop, which the\n * > previous version did.\n * >\n * > Practically, a max of `2` is typically enough assuming a `Root` is\n * > passed, but it doesn’t improve performance.\n * > It gets higher with `List > ListItem > Table > TableRow > TableCell`.\n * > Using up to `10` doesn’t hurt or help either.\n * @template {UnistNode} Tree\n * Tree type.\n * @template {Uint} [Max=10]\n * Max; searches up to this depth.\n * @template {Uint} [Depth=0]\n * Current depth.\n */\n\n/**\n * @typedef {'skip' | boolean} Action\n * Union of the action types.\n *\n * @typedef {number} Index\n * Move to the sibling at `index` next (after node itself is completely\n * traversed).\n *\n * Useful if mutating the tree, such as removing the node the visitor is\n * currently on, or any of its previous siblings.\n * Results less than 0 or greater than or equal to `children.length` stop\n * traversing the parent.\n *\n * @typedef {[(Action | null | undefined | void)?, (Index | null | undefined)?]} ActionTuple\n * List with one or two values, the first an action, the second an index.\n *\n * @typedef {Action | ActionTuple | Index | null | undefined | void} VisitorResult\n * Any value that can be returned from a visitor.\n */\n\n/**\n * @callback Visitor\n * Handle a node (matching `test`, if given).\n *\n * Visitors are free to transform `node`.\n * They can also transform the parent of node (the last of `ancestors`).\n *\n * Replacing `node` itself, if `SKIP` is not returned, still causes its\n * descendants to be walked (which is a bug).\n *\n * When adding or removing previous siblings of `node` (or next siblings, in\n * case of reverse), the `Visitor` should return a new `Index` to specify the\n * sibling to traverse after `node` is traversed.\n * Adding or removing next siblings of `node` (or previous siblings, in case\n * of reverse) is handled as expected without needing to return a new `Index`.\n *\n * Removing the children property of an ancestor still results in them being\n * traversed.\n * @param {Visited} node\n * Found node.\n * @param {Array<VisitedParents>} ancestors\n * Ancestors of `node`.\n * @returns {VisitorResult}\n * What to do next.\n *\n * An `Index` is treated as a tuple of `[CONTINUE, Index]`.\n * An `Action` is treated as a tuple of `[Action]`.\n *\n * Passing a tuple back only makes sense if the `Action` is `SKIP`.\n * When the `Action` is `EXIT`, that action can be returned.\n * When the `Action` is `CONTINUE`, `Index` can be returned.\n * @template {UnistNode} [Visited=UnistNode]\n * Visited node type.\n * @template {UnistParent} [VisitedParents=UnistParent]\n * Ancestor type.\n */\n\n/**\n * @typedef {Visitor<Matches<InclusiveDescendant<Tree>, Check>, Ancestor<Tree, Matches<InclusiveDescendant<Tree>, Check>>>} BuildVisitor\n * Build a typed `Visitor` function from a tree and a test.\n *\n * It will infer which values are passed as `node` and which as `parents`.\n * @template {UnistNode} [Tree=UnistNode]\n * Tree type.\n * @template {Test} [Check=Test]\n * Test type.\n */\n\nimport {convert} from 'unist-util-is'\nimport {color} from 'unist-util-visit-parents/do-not-use-color'\n\n/** @type {Readonly<ActionTuple>} */\nconst empty = []\n\n/**\n * Continue traversing as normal.\n */\nexport const CONTINUE = true\n\n/**\n * Stop traversing immediately.\n */\nexport const EXIT = false\n\n/**\n * Do not traverse this node’s children.\n */\nexport const SKIP = 'skip'\n\n/**\n * Visit nodes, with ancestral information.\n *\n * This algorithm performs *depth-first* *tree traversal* in *preorder*\n * (**NLR**) or if `reverse` is given, in *reverse preorder* (**NRL**).\n *\n * You can choose for which nodes `visitor` is called by passing a `test`.\n * For complex tests, you should test yourself in `visitor`, as it will be\n * faster and will have improved type information.\n *\n * Walking the tree is an intensive task.\n * Make use of the return values of the visitor when possible.\n * Instead of walking a tree multiple times, walk it once, use `unist-util-is`\n * to check if a node matches, and then perform different operations.\n *\n * You can change the tree.\n * See `Visitor` for more info.\n *\n * @overload\n * @param {Tree} tree\n * @param {Check} check\n * @param {BuildVisitor<Tree, Check>} visitor\n * @param {boolean | null | undefined} [reverse]\n * @returns {undefined}\n *\n * @overload\n * @param {Tree} tree\n * @param {BuildVisitor<Tree>} visitor\n * @param {boolean | null | undefined} [reverse]\n * @returns {undefined}\n *\n * @param {UnistNode} tree\n * Tree to traverse.\n * @param {Visitor | Test} test\n * `unist-util-is`-compatible test\n * @param {Visitor | boolean | null | undefined} [visitor]\n * Handle each node.\n * @param {boolean | null | undefined} [reverse]\n * Traverse in reverse preorder (NRL) instead of the default preorder (NLR).\n * @returns {undefined}\n * Nothing.\n *\n * @template {UnistNode} Tree\n * Node type.\n * @template {Test} Check\n * `unist-util-is`-compatible test.\n */\nexport function visitParents(tree, test, visitor, reverse) {\n /** @type {Test} */\n let check\n\n if (typeof test === 'function' && typeof visitor !== 'function') {\n reverse = visitor\n // @ts-expect-error no visitor given, so `visitor` is test.\n visitor = test\n } else {\n // @ts-expect-error visitor given, so `test` isn’t a visitor.\n check = test\n }\n\n const is = convert(check)\n const step = reverse ? -1 : 1\n\n factory(tree, undefined, [])()\n\n /**\n * @param {UnistNode} node\n * @param {number | undefined} index\n * @param {Array<UnistParent>} parents\n */\n function factory(node, index, parents) {\n const value = /** @type {Record<string, unknown>} */ (\n node && typeof node === 'object' ? node : {}\n )\n\n if (typeof value.type === 'string') {\n const name =\n // `hast`\n typeof value.tagName === 'string'\n ? value.tagName\n : // `xast`\n typeof value.name === 'string'\n ? value.name\n : undefined\n\n Object.defineProperty(visit, 'name', {\n value:\n 'node (' + color(node.type + (name ? '<' + name + '>' : '')) + ')'\n })\n }\n\n return visit\n\n function visit() {\n /** @type {Readonly<ActionTuple>} */\n let result = empty\n /** @type {Readonly<ActionTuple>} */\n let subresult\n /** @type {number} */\n let offset\n /** @type {Array<UnistParent>} */\n let grandparents\n\n if (!test || is(node, index, parents[parents.length - 1] || undefined)) {\n // @ts-expect-error: `visitor` is now a visitor.\n result = toResult(visitor(node, parents))\n\n if (result[0] === EXIT) {\n return result\n }\n }\n\n if ('children' in node && node.children) {\n const nodeAsParent = /** @type {UnistParent} */ (node)\n\n if (nodeAsParent.children && result[0] !== SKIP) {\n offset = (reverse ? nodeAsParent.children.length : -1) + step\n grandparents = parents.concat(nodeAsParent)\n\n while (offset > -1 && offset < nodeAsParent.children.length) {\n const child = nodeAsParent.children[offset]\n\n subresult = factory(child, offset, grandparents)()\n\n if (subresult[0] === EXIT) {\n return subresult\n }\n\n offset =\n typeof subresult[1] === 'number' ? subresult[1] : offset + step\n }\n }\n }\n\n return result\n }\n }\n}\n\n/**\n * Turn a return value into a clean result.\n *\n * @param {VisitorResult} value\n * Valid return values from visitors.\n * @returns {Readonly<ActionTuple>}\n * Clean result.\n */\nfunction toResult(value) {\n if (Array.isArray(value)) {\n return value\n }\n\n if (typeof value === 'number') {\n return [CONTINUE, value]\n }\n\n return value === null || value === undefined ? empty : [value]\n}\n","/**\n * @typedef {import('unist').Node} UnistNode\n * @typedef {import('unist').Parent} UnistParent\n * @typedef {import('unist-util-visit-parents').VisitorResult} VisitorResult\n */\n\n/**\n * @typedef {Exclude<import('unist-util-is').Test, undefined> | undefined} Test\n * Test from `unist-util-is`.\n *\n * Note: we have remove and add `undefined`, because otherwise when generating\n * automatic `.d.ts` files, TS tries to flatten paths from a local perspective,\n * which doesn’t work when publishing on npm.\n */\n\n// To do: use types from `unist-util-visit-parents` when it’s released.\n\n/**\n * @typedef {(\n * Fn extends (value: any) => value is infer Thing\n * ? Thing\n * : Fallback\n * )} Predicate\n * Get the value of a type guard `Fn`.\n * @template Fn\n * Value; typically function that is a type guard (such as `(x): x is Y`).\n * @template Fallback\n * Value to yield if `Fn` is not a type guard.\n */\n\n/**\n * @typedef {(\n * Check extends null | undefined // No test.\n * ? Value\n * : Value extends {type: Check} // String (type) test.\n * ? Value\n * : Value extends Check // Partial test.\n * ? Value\n * : Check extends Function // Function test.\n * ? Predicate<Check, Value> extends Value\n * ? Predicate<Check, Value>\n * : never\n * : never // Some other test?\n * )} MatchesOne\n * Check whether a node matches a primitive check in the type system.\n * @template Value\n * Value; typically unist `Node`.\n * @template Check\n * Value; typically `unist-util-is`-compatible test, but not arrays.\n */\n\n/**\n * @typedef {(\n * Check extends Array<any>\n * ? MatchesOne<Value, Check[keyof Check]>\n * : MatchesOne<Value, Check>\n * )} Matches\n * Check whether a node matches a check in the type system.\n * @template Value\n * Value; typically unist `Node`.\n * @template Check\n * Value; typically `unist-util-is`-compatible test.\n */\n\n/**\n * @typedef {0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10} Uint\n * Number; capped reasonably.\n */\n\n/**\n * @typedef {I extends 0 ? 1 : I extends 1 ? 2 : I extends 2 ? 3 : I extends 3 ? 4 : I extends 4 ? 5 : I extends 5 ? 6 : I extends 6 ? 7 : I extends 7 ? 8 : I extends 8 ? 9 : 10} Increment\n * Increment a number in the type system.\n * @template {Uint} [I=0]\n * Index.\n */\n\n/**\n * @typedef {(\n * Node extends UnistParent\n * ? Node extends {children: Array<infer Children>}\n * ? Child extends Children ? Node : never\n * : never\n * : never\n * )} InternalParent\n * Collect nodes that can be parents of `Child`.\n * @template {UnistNode} Node\n * All node types in a tree.\n * @template {UnistNode} Child\n * Node to search for.\n */\n\n/**\n * @typedef {InternalParent<InclusiveDescendant<Tree>, Child>} Parent\n * Collect nodes in `Tree` that can be parents of `Child`.\n * @template {UnistNode} Tree\n * All node types in a tree.\n * @template {UnistNode} Child\n * Node to search for.\n */\n\n/**\n * @typedef {(\n * Depth extends Max\n * ? never\n * :\n * | InternalParent<Node, Child>\n * | InternalAncestor<Node, InternalParent<Node, Child>, Max, Increment<Depth>>\n * )} InternalAncestor\n * Collect nodes in `Tree` that can be ancestors of `Child`.\n * @template {UnistNode} Node\n * All node types in a tree.\n * @template {UnistNode} Child\n * Node to search for.\n * @template {Uint} [Max=10]\n * Max; searches up to this depth.\n * @template {Uint} [Depth=0]\n * Current depth.\n */\n\n/**\n * @typedef {(\n * Tree extends UnistParent\n * ? Depth extends Max\n * ? Tree\n * : Tree | InclusiveDescendant<Tree['children'][number], Max, Increment<Depth>>\n * : Tree\n * )} InclusiveDescendant\n * Collect all (inclusive) descendants of `Tree`.\n *\n * > 👉 **Note**: for performance reasons, this seems to be the fastest way to\n * > recurse without actually running into an infinite loop, which the\n * > previous version did.\n * >\n * > Practically, a max of `2` is typically enough assuming a `Root` is\n * > passed, but it doesn’t improve performance.\n * > It gets higher with `List > ListItem > Table > TableRow > TableCell`.\n * > Using up to `10` doesn’t hurt or help either.\n * @template {UnistNode} Tree\n * Tree type.\n * @template {Uint} [Max=10]\n * Max; searches up to this depth.\n * @template {Uint} [Depth=0]\n * Current depth.\n */\n\n/**\n * @callback Visitor\n * Handle a node (matching `test`, if given).\n *\n * Visitors are free to transform `node`.\n * They can also transform `parent`.\n *\n * Replacing `node` itself, if `SKIP` is not returned, still causes its\n * descendants to be walked (which is a bug).\n *\n * When adding or removing previous siblings of `node` (or next siblings, in\n * case of reverse), the `Visitor` should return a new `Index` to specify the\n * sibling to traverse after `node` is traversed.\n * Adding or removing next siblings of `node` (or previous siblings, in case\n * of reverse) is handled as expected without needing to return a new `Index`.\n *\n * Removing the children property of `parent` still results in them being\n * traversed.\n * @param {Visited} node\n * Found node.\n * @param {Visited extends UnistNode ? number | undefined : never} index\n * Index of `node` in `parent`.\n * @param {Ancestor extends UnistParent ? Ancestor | undefined : never} parent\n * Parent of `node`.\n * @returns {VisitorResult}\n * What to do next.\n *\n * An `Index` is treated as a tuple of `[CONTINUE, Index]`.\n * An `Action` is treated as a tuple of `[Action]`.\n *\n * Passing a tuple back only makes sense if the `Action` is `SKIP`.\n * When the `Action` is `EXIT`, that action can be returned.\n * When the `Action` is `CONTINUE`, `Index` can be returned.\n * @template {UnistNode} [Visited=UnistNode]\n * Visited node type.\n * @template {UnistParent} [Ancestor=UnistParent]\n * Ancestor type.\n */\n\n/**\n * @typedef {Visitor<Visited, Parent<Ancestor, Visited>>} BuildVisitorFromMatch\n * Build a typed `Visitor` function from a node and all possible parents.\n *\n * It will infer which values are passed as `node` and which as `parent`.\n * @template {UnistNode} Visited\n * Node type.\n * @template {UnistParent} Ancestor\n * Parent type.\n */\n\n/**\n * @typedef {(\n * BuildVisitorFromMatch<\n * Matches<Descendant, Check>,\n * Extract<Descendant, UnistParent>\n * >\n * )} BuildVisitorFromDescendants\n * Build a typed `Visitor` function from a list of descendants and a test.\n *\n * It will infer which values are passed as `node` and which as `parent`.\n * @template {UnistNode} Descendant\n * Node type.\n * @template {Test} Check\n * Test type.\n */\n\n/**\n * @typedef {(\n * BuildVisitorFromDescendants<\n * InclusiveDescendant<Tree>,\n * Check\n * >\n * )} BuildVisitor\n * Build a typed `Visitor` function from a tree and a test.\n *\n * It will infer which values are passed as `node` and which as `parent`.\n * @template {UnistNode} [Tree=UnistNode]\n * Node type.\n * @template {Test} [Check=Test]\n * Test type.\n */\n\nimport {visitParents} from 'unist-util-visit-parents'\n\nexport {CONTINUE, EXIT, SKIP} from 'unist-util-visit-parents'\n\n/**\n * Visit nodes.\n *\n * This algorithm performs *depth-first* *tree traversal* in *preorder*\n * (**NLR**) or if `reverse` is given, in *reverse preorder* (**NRL**).\n *\n * You can choose for which nodes `visitor` is called by passing a `test`.\n * For complex tests, you should test yourself in `visitor`, as it will be\n * faster and will have improved type information.\n *\n * Walking the tree is an intensive task.\n * Make use of the return values of the visitor when possible.\n * Instead of walking a tree multiple times, walk it once, use `unist-util-is`\n * to check if a node matches, and then perform different operations.\n *\n * You can change the tree.\n * See `Visitor` for more info.\n *\n * @overload\n * @param {Tree} tree\n * @param {Check} check\n * @param {BuildVisitor<Tree, Check>} visitor\n * @param {boolean | null | undefined} [reverse]\n * @returns {undefined}\n *\n * @overload\n * @param {Tree} tree\n * @param {BuildVisitor<Tree>} visitor\n * @param {boolean | null | undefined} [reverse]\n * @returns {undefined}\n *\n * @param {UnistNode} tree\n * Tree to traverse.\n * @param {Visitor | Test} testOrVisitor\n * `unist-util-is`-compatible test (optional, omit to pass a visitor).\n * @param {Visitor | boolean | null | undefined} [visitorOrReverse]\n * Handle each node (when test is omitted, pass `reverse`).\n * @param {boolean | null | undefined} [maybeReverse=false]\n * Traverse in reverse preorder (NRL) instead of the default preorder (NLR).\n * @returns {undefined}\n * Nothing.\n *\n * @template {UnistNode} Tree\n * Node type.\n * @template {Test} Check\n * `unist-util-is`-compatible test.\n */\nexport function visit(tree, testOrVisitor, visitorOrReverse, maybeReverse) {\n /** @type {boolean | null | undefined} */\n let reverse\n /** @type {Test} */\n let test\n /** @type {Visitor} */\n let visitor\n\n if (\n typeof testOrVisitor === 'function' &&\n typeof visitorOrReverse !== 'function'\n ) {\n test = undefined\n visitor = testOrVisitor\n reverse = visitorOrReverse\n } else {\n // @ts-expect-error: assume the overload with test was given.\n test = testOrVisitor\n // @ts-expect-error: assume the overload with test was given.\n visitor = visitorOrReverse\n reverse = maybeReverse\n }\n\n visitParents(tree, test, overload, reverse)\n\n /**\n * @param {UnistNode} node\n * @param {Array<UnistParent>} parents\n */\n function overload(node, parents) {\n const parent = parents[parents.length - 1]\n const index = parent ? parent.children.indexOf(node) : undefined\n return visitor(node, index, parent)\n }\n}\n","/**\n * @typedef {import('hast').ElementContent} ElementContent\n *\n * @typedef {import('mdast').Nodes} Nodes\n * @typedef {import('mdast').Reference} Reference\n *\n * @typedef {import('./state.js').State} State\n */\n\n// Make VS Code show references to the above types.\n''\n\n/**\n * Return the content of a reference without definition as plain text.\n *\n * @param {State} state\n * Info passed around.\n * @param {Extract<Nodes, Reference>} node\n * Reference node (image, link).\n * @returns {Array<ElementContent>}\n * hast content.\n */\nexport function revert(state, node) {\n const subtype = node.referenceType\n let suffix = ']'\n\n if (subtype === 'collapsed') {\n suffix += '[]'\n } else if (subtype === 'full') {\n suffix += '[' + (node.label || node.identifier) + ']'\n }\n\n if (node.type === 'imageReference') {\n return [{type: 'text', value: '![' + node.alt + suffix}]\n }\n\n const contents = state.all(node)\n const head = contents[0]\n\n if (head && head.type === 'text') {\n head.value = '[' + head.value\n } else {\n contents.unshift({type: 'text', value: '['})\n }\n\n const tail = contents[contents.length - 1]\n\n if (tail && tail.type === 'text') {\n tail.value += suffix\n } else {\n contents.push({type: 'text', value: suffix})\n }\n\n return contents\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').ElementContent} ElementContent\n * @typedef {import('hast').Properties} Properties\n * @typedef {import('mdast').ListItem} ListItem\n * @typedef {import('mdast').Parents} Parents\n * @typedef {import('../state.js').State} State\n */\n\n// Make VS Code show references to the above types.\n''\n\n/**\n * Turn an mdast `listItem` node into hast.\n *\n * @param {State} state\n * Info passed around.\n * @param {ListItem} node\n * mdast node.\n * @param {Parents | undefined} parent\n * Parent of `node`.\n * @returns {Element}\n * hast node.\n */\nexport function listItem(state, node, parent) {\n const results = state.all(node)\n const loose = parent ? listLoose(parent) : listItemLoose(node)\n /** @type {Properties} */\n const properties = {}\n /** @type {Array<ElementContent>} */\n const children = []\n\n if (typeof node.checked === 'boolean') {\n const head = results[0]\n /** @type {Element} */\n let paragraph\n\n if (head && head.type === 'element' && head.tagName === 'p') {\n paragraph = head\n } else {\n paragraph = {type: 'element', tagName: 'p', properties: {}, children: []}\n results.unshift(paragraph)\n }\n\n if (paragraph.children.length > 0) {\n paragraph.children.unshift({type: 'text', value: ' '})\n }\n\n paragraph.children.unshift({\n type: 'element',\n tagName: 'input',\n properties: {type: 'checkbox', checked: node.checked, disabled: true},\n children: []\n })\n\n // According to github-markdown-css, this class hides bullet.\n // See: <https://github.com/sindresorhus/github-markdown-css>.\n properties.className = ['task-list-item']\n }\n\n let index = -1\n\n while (++index < results.length) {\n const child = results[index]\n\n // Add eols before nodes, except if this is a loose, first paragraph.\n if (\n loose ||\n index !== 0 ||\n child.type !== 'element' ||\n child.tagName !== 'p'\n ) {\n children.push({type: 'text', value: '\\n'})\n }\n\n if (child.type === 'element' && child.tagName === 'p' && !loose) {\n children.push(...child.children)\n } else {\n children.push(child)\n }\n }\n\n const tail = results[results.length - 1]\n\n // Add a final eol.\n if (tail && (loose || tail.type !== 'element' || tail.tagName !== 'p')) {\n children.push({type: 'text', value: '\\n'})\n }\n\n /** @type {Element} */\n const result = {type: 'element', tagName: 'li', properties, children}\n state.patch(node, result)\n return state.applyData(node, result)\n}\n\n/**\n * @param {Parents} node\n * @return {Boolean}\n */\nfunction listLoose(node) {\n let loose = false\n if (node.type === 'list') {\n loose = node.spread || false\n const children = node.children\n let index = -1\n\n while (!loose && ++index < children.length) {\n loose = listItemLoose(children[index])\n }\n }\n\n return loose\n}\n\n/**\n * @param {ListItem} node\n * @return {Boolean}\n */\nfunction listItemLoose(node) {\n const spread = node.spread\n\n return spread === null || spread === undefined\n ? node.children.length > 1\n : spread\n}\n","const tab = 9 /* `\\t` */\nconst space = 32 /* ` ` */\n\n/**\n * Remove initial and final spaces and tabs at the line breaks in `value`.\n * Does not trim initial and final spaces and tabs of the value itself.\n *\n * @param {string} value\n * Value to trim.\n * @returns {string}\n * Trimmed value.\n */\nexport function trimLines(value) {\n const source = String(value)\n const search = /\\r?\\n|\\r/g\n let match = search.exec(source)\n let last = 0\n /** @type {Array<string>} */\n const lines = []\n\n while (match) {\n lines.push(\n trimLine(source.slice(last, match.index), last > 0, true),\n match[0]\n )\n\n last = match.index + match[0].length\n match = search.exec(source)\n }\n\n lines.push(trimLine(source.slice(last), last > 0, false))\n\n return lines.join('')\n}\n\n/**\n * @param {string} value\n * Line to trim.\n * @param {boolean} start\n * Whether to trim the start of the line.\n * @param {boolean} end\n * Whether to trim the end of the line.\n * @returns {string}\n * Trimmed line.\n */\nfunction trimLine(value, start, end) {\n let startIndex = 0\n let endIndex = value.length\n\n if (start) {\n let code = value.codePointAt(startIndex)\n\n while (code === tab || code === space) {\n startIndex++\n code = value.codePointAt(startIndex)\n }\n }\n\n if (end) {\n let code = value.codePointAt(endIndex - 1)\n\n while (code === tab || code === space) {\n endIndex--\n code = value.codePointAt(endIndex - 1)\n }\n }\n\n return endIndex > startIndex ? value.slice(startIndex, endIndex) : ''\n}\n","import {blockquote} from './blockquote.js'\nimport {hardBreak} from './break.js'\nimport {code} from './code.js'\nimport {strikethrough} from './delete.js'\nimport {emphasis} from './emphasis.js'\nimport {footnoteReference} from './footnote-reference.js'\nimport {heading} from './heading.js'\nimport {html} from './html.js'\nimport {imageReference} from './image-reference.js'\nimport {image} from './image.js'\nimport {inlineCode} from './inline-code.js'\nimport {linkReference} from './link-reference.js'\nimport {link} from './link.js'\nimport {listItem} from './list-item.js'\nimport {list} from './list.js'\nimport {paragraph} from './paragraph.js'\nimport {root} from './root.js'\nimport {strong} from './strong.js'\nimport {table} from './table.js'\nimport {tableRow} from './table-row.js'\nimport {tableCell} from './table-cell.js'\nimport {text} from './text.js'\nimport {thematicBreak} from './thematic-break.js'\n\n/**\n * Default handlers for nodes.\n *\n * @satisfies {import('../state.js').Handlers}\n */\nexport const handlers = {\n blockquote,\n break: hardBreak,\n code,\n delete: strikethrough,\n emphasis,\n footnoteReference,\n heading,\n html,\n imageReference,\n image,\n inlineCode,\n linkReference,\n link,\n listItem,\n list,\n paragraph,\n // @ts-expect-error: root is different, but hard to type.\n root,\n strong,\n table,\n tableCell,\n tableRow,\n text,\n thematicBreak,\n toml: ignore,\n yaml: ignore,\n definition: ignore,\n footnoteDefinition: ignore\n}\n\n// Return nothing for nodes that are ignored.\nfunction ignore() {\n return undefined\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('mdast').Blockquote} Blockquote\n * @typedef {import('../state.js').State} State\n */\n\n// Make VS Code show references to the above types.\n''\n\n/**\n * Turn an mdast `blockquote` node into hast.\n *\n * @param {State} state\n * Info passed around.\n * @param {Blockquote} node\n * mdast node.\n * @returns {Element}\n * hast node.\n */\nexport function blockquote(state, node) {\n /** @type {Element} */\n const result = {\n type: 'element',\n tagName: 'blockquote',\n properties: {},\n children: state.wrap(state.all(node), true)\n }\n state.patch(node, result)\n return state.applyData(node, result)\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').Text} Text\n * @typedef {import('mdast').Break} Break\n * @typedef {import('../state.js').State} State\n */\n\n// Make VS Code show references to the above types.\n''\n\n/**\n * Turn an mdast `break` node into hast.\n *\n * @param {State} state\n * Info passed around.\n * @param {Break} node\n * mdast node.\n * @returns {Array<Element | Text>}\n * hast element content.\n */\nexport function hardBreak(state, node) {\n /** @type {Element} */\n const result = {type: 'element', tagName: 'br', properties: {}, children: []}\n state.patch(node, result)\n return [state.applyData(node, result), {type: 'text', value: '\\n'}]\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').Properties} Properties\n * @typedef {import('mdast').Code} Code\n * @typedef {import('../state.js').State} State\n */\n\n// Make VS Code show references to the above types.\n''\n\n/**\n * Turn an mdast `code` node into hast.\n *\n * @param {State} state\n * Info passed around.\n * @param {Code} node\n * mdast node.\n * @returns {Element}\n * hast node.\n */\nexport function code(state, node) {\n const value = node.value ? node.value + '\\n' : ''\n /** @type {Properties} */\n const properties = {}\n\n if (node.lang) {\n properties.className = ['language-' + node.lang]\n }\n\n // Create `<code>`.\n /** @type {Element} */\n let result = {\n type: 'element',\n tagName: 'code',\n properties,\n children: [{type: 'text', value}]\n }\n\n if (node.meta) {\n result.data = {meta: node.meta}\n }\n\n state.patch(node, result)\n result = state.applyData(node, result)\n\n // Create `<pre>`.\n result = {type: 'element', tagName: 'pre', properties: {}, children: [result]}\n state.patch(node, result)\n return result\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('mdast').Delete} Delete\n * @typedef {import('../state.js').State} State\n */\n\n// Make VS Code show references to the above types.\n''\n\n/**\n * Turn an mdast `delete` node into hast.\n *\n * @param {State} state\n * Info passed around.\n * @param {Delete} node\n * mdast node.\n * @returns {Element}\n * hast node.\n */\nexport function strikethrough(state, node) {\n /** @type {Element} */\n const result = {\n type: 'element',\n tagName: 'del',\n properties: {},\n children: state.all(node)\n }\n state.patch(node, result)\n return state.applyData(node, result)\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('mdast').Emphasis} Emphasis\n * @typedef {import('../state.js').State} State\n */\n\n// Make VS Code show references to the above types.\n''\n\n/**\n * Turn an mdast `emphasis` node into hast.\n *\n * @param {State} state\n * Info passed around.\n * @param {Emphasis} node\n * mdast node.\n * @returns {Element}\n * hast node.\n */\nexport function emphasis(state, node) {\n /** @type {Element} */\n const result = {\n type: 'element',\n tagName: 'em',\n properties: {},\n children: state.all(node)\n }\n state.patch(node, result)\n return state.applyData(node, result)\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('mdast').FootnoteReference} FootnoteReference\n * @typedef {import('../state.js').State} State\n */\n\nimport {normalizeUri} from 'micromark-util-sanitize-uri'\n\n/**\n * Turn an mdast `footnoteReference` node into hast.\n *\n * @param {State} state\n * Info passed around.\n * @param {FootnoteReference} node\n * mdast node.\n * @returns {Element}\n * hast node.\n */\nexport function footnoteReference(state, node) {\n const clobberPrefix =\n typeof state.options.clobberPrefix === 'string'\n ? state.options.clobberPrefix\n : 'user-content-'\n const id = String(node.identifier).toUpperCase()\n const safeId = normalizeUri(id.toLowerCase())\n const index = state.footnoteOrder.indexOf(id)\n /** @type {number} */\n let counter\n\n let reuseCounter = state.footnoteCounts.get(id)\n\n if (reuseCounter === undefined) {\n reuseCounter = 0\n state.footnoteOrder.push(id)\n counter = state.footnoteOrder.length\n } else {\n counter = index + 1\n }\n\n reuseCounter += 1\n state.footnoteCounts.set(id, reuseCounter)\n\n /** @type {Element} */\n const link = {\n type: 'element',\n tagName: 'a',\n properties: {\n href: '#' + clobberPrefix + 'fn-' + safeId,\n id:\n clobberPrefix +\n 'fnref-' +\n safeId +\n (reuseCounter > 1 ? '-' + reuseCounter : ''),\n dataFootnoteRef: true,\n ariaDescribedBy: ['footnote-label']\n },\n children: [{type: 'text', value: String(counter)}]\n }\n state.patch(node, link)\n\n /** @type {Element} */\n const sup = {\n type: 'element',\n tagName: 'sup',\n properties: {},\n children: [link]\n }\n state.patch(node, sup)\n return state.applyData(node, sup)\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('mdast').Heading} Heading\n * @typedef {import('../state.js').State} State\n */\n\n// Make VS Code show references to the above types.\n''\n\n/**\n * Turn an mdast `heading` node into hast.\n *\n * @param {State} state\n * Info passed around.\n * @param {Heading} node\n * mdast node.\n * @returns {Element}\n * hast node.\n */\nexport function heading(state, node) {\n /** @type {Element} */\n const result = {\n type: 'element',\n tagName: 'h' + node.depth,\n properties: {},\n children: state.all(node)\n }\n state.patch(node, result)\n return state.applyData(node, result)\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('mdast').Html} Html\n * @typedef {import('../state.js').State} State\n * @typedef {import('../../index.js').Raw} Raw\n */\n\n// Make VS Code show references to the above types.\n''\n\n/**\n * Turn an mdast `html` node into hast (`raw` node in dangerous mode, otherwise\n * nothing).\n *\n * @param {State} state\n * Info passed around.\n * @param {Html} node\n * mdast node.\n * @returns {Element | Raw | undefined}\n * hast node.\n */\nexport function html(state, node) {\n if (state.options.allowDangerousHtml) {\n /** @type {Raw} */\n const result = {type: 'raw', value: node.value}\n state.patch(node, result)\n return state.applyData(node, result)\n }\n\n return undefined\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').ElementContent} ElementContent\n * @typedef {import('hast').Properties} Properties\n * @typedef {import('mdast').ImageReference} ImageReference\n * @typedef {import('../state.js').State} State\n */\n\nimport {normalizeUri} from 'micromark-util-sanitize-uri'\nimport {revert} from '../revert.js'\n\n/**\n * Turn an mdast `imageReference` node into hast.\n *\n * @param {State} state\n * Info passed around.\n * @param {ImageReference} node\n * mdast node.\n * @returns {Array<ElementContent> | ElementContent}\n * hast node.\n */\nexport function imageReference(state, node) {\n const id = String(node.identifier).toUpperCase()\n const definition = state.definitionById.get(id)\n\n if (!definition) {\n return revert(state, node)\n }\n\n /** @type {Properties} */\n const properties = {src: normalizeUri(definition.url || ''), alt: node.alt}\n\n if (definition.title !== null && definition.title !== undefined) {\n properties.title = definition.title\n }\n\n /** @type {Element} */\n const result = {type: 'element', tagName: 'img', properties, children: []}\n state.patch(node, result)\n return state.applyData(node, result)\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').Properties} Properties\n * @typedef {import('mdast').Image} Image\n * @typedef {import('../state.js').State} State\n */\n\nimport {normalizeUri} from 'micromark-util-sanitize-uri'\n\n/**\n * Turn an mdast `image` node into hast.\n *\n * @param {State} state\n * Info passed around.\n * @param {Image} node\n * mdast node.\n * @returns {Element}\n * hast node.\n */\nexport function image(state, node) {\n /** @type {Properties} */\n const properties = {src: normalizeUri(node.url)}\n\n if (node.alt !== null && node.alt !== undefined) {\n properties.alt = node.alt\n }\n\n if (node.title !== null && node.title !== undefined) {\n properties.title = node.title\n }\n\n /** @type {Element} */\n const result = {type: 'element', tagName: 'img', properties, children: []}\n state.patch(node, result)\n return state.applyData(node, result)\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').Text} Text\n * @typedef {import('mdast').InlineCode} InlineCode\n * @typedef {import('../state.js').State} State\n */\n\n// Make VS Code show references to the above types.\n''\n\n/**\n * Turn an mdast `inlineCode` node into hast.\n *\n * @param {State} state\n * Info passed around.\n * @param {InlineCode} node\n * mdast node.\n * @returns {Element}\n * hast node.\n */\nexport function inlineCode(state, node) {\n /** @type {Text} */\n const text = {type: 'text', value: node.value.replace(/\\r?\\n|\\r/g, ' ')}\n state.patch(node, text)\n\n /** @type {Element} */\n const result = {\n type: 'element',\n tagName: 'code',\n properties: {},\n children: [text]\n }\n state.patch(node, result)\n return state.applyData(node, result)\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').ElementContent} ElementContent\n * @typedef {import('hast').Properties} Properties\n * @typedef {import('mdast').LinkReference} LinkReference\n * @typedef {import('../state.js').State} State\n */\n\nimport {normalizeUri} from 'micromark-util-sanitize-uri'\nimport {revert} from '../revert.js'\n\n/**\n * Turn an mdast `linkReference` node into hast.\n *\n * @param {State} state\n * Info passed around.\n * @param {LinkReference} node\n * mdast node.\n * @returns {Array<ElementContent> | ElementContent}\n * hast node.\n */\nexport function linkReference(state, node) {\n const id = String(node.identifier).toUpperCase()\n const definition = state.definitionById.get(id)\n\n if (!definition) {\n return revert(state, node)\n }\n\n /** @type {Properties} */\n const properties = {href: normalizeUri(definition.url || '')}\n\n if (definition.title !== null && definition.title !== undefined) {\n properties.title = definition.title\n }\n\n /** @type {Element} */\n const result = {\n type: 'element',\n tagName: 'a',\n properties,\n children: state.all(node)\n }\n state.patch(node, result)\n return state.applyData(node, result)\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').Properties} Properties\n * @typedef {import('mdast').Link} Link\n * @typedef {import('../state.js').State} State\n */\n\nimport {normalizeUri} from 'micromark-util-sanitize-uri'\n\n/**\n * Turn an mdast `link` node into hast.\n *\n * @param {State} state\n * Info passed around.\n * @param {Link} node\n * mdast node.\n * @returns {Element}\n * hast node.\n */\nexport function link(state, node) {\n /** @type {Properties} */\n const properties = {href: normalizeUri(node.url)}\n\n if (node.title !== null && node.title !== undefined) {\n properties.title = node.title\n }\n\n /** @type {Element} */\n const result = {\n type: 'element',\n tagName: 'a',\n properties,\n children: state.all(node)\n }\n state.patch(node, result)\n return state.applyData(node, result)\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').Properties} Properties\n * @typedef {import('mdast').List} List\n * @typedef {import('../state.js').State} State\n */\n\n// Make VS Code show references to the above types.\n''\n\n/**\n * Turn an mdast `list` node into hast.\n *\n * @param {State} state\n * Info passed around.\n * @param {List} node\n * mdast node.\n * @returns {Element}\n * hast node.\n */\nexport function list(state, node) {\n /** @type {Properties} */\n const properties = {}\n const results = state.all(node)\n let index = -1\n\n if (typeof node.start === 'number' && node.start !== 1) {\n properties.start = node.start\n }\n\n // Like GitHub, add a class for custom styling.\n while (++index < results.length) {\n const child = results[index]\n\n if (\n child.type === 'element' &&\n child.tagName === 'li' &&\n child.properties &&\n Array.isArray(child.properties.className) &&\n child.properties.className.includes('task-list-item')\n ) {\n properties.className = ['contains-task-list']\n break\n }\n }\n\n /** @type {Element} */\n const result = {\n type: 'element',\n tagName: node.ordered ? 'ol' : 'ul',\n properties,\n children: state.wrap(results, true)\n }\n state.patch(node, result)\n return state.applyData(node, result)\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('mdast').Paragraph} Paragraph\n * @typedef {import('../state.js').State} State\n */\n\n// Make VS Code show references to the above types.\n''\n\n/**\n * Turn an mdast `paragraph` node into hast.\n *\n * @param {State} state\n * Info passed around.\n * @param {Paragraph} node\n * mdast node.\n * @returns {Element}\n * hast node.\n */\nexport function paragraph(state, node) {\n /** @type {Element} */\n const result = {\n type: 'element',\n tagName: 'p',\n properties: {},\n children: state.all(node)\n }\n state.patch(node, result)\n return state.applyData(node, result)\n}\n","/**\n * @typedef {import('hast').Parents} HastParents\n * @typedef {import('hast').Root} HastRoot\n * @typedef {import('mdast').Root} MdastRoot\n * @typedef {import('../state.js').State} State\n */\n\n// Make VS Code show references to the above types.\n''\n\n/**\n * Turn an mdast `root` node into hast.\n *\n * @param {State} state\n * Info passed around.\n * @param {MdastRoot} node\n * mdast node.\n * @returns {HastParents}\n * hast node.\n */\nexport function root(state, node) {\n /** @type {HastRoot} */\n const result = {type: 'root', children: state.wrap(state.all(node))}\n state.patch(node, result)\n return state.applyData(node, result)\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('mdast').Strong} Strong\n * @typedef {import('../state.js').State} State\n */\n\n// Make VS Code show references to the above types.\n''\n\n/**\n * Turn an mdast `strong` node into hast.\n *\n * @param {State} state\n * Info passed around.\n * @param {Strong} node\n * mdast node.\n * @returns {Element}\n * hast node.\n */\nexport function strong(state, node) {\n /** @type {Element} */\n const result = {\n type: 'element',\n tagName: 'strong',\n properties: {},\n children: state.all(node)\n }\n state.patch(node, result)\n return state.applyData(node, result)\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('mdast').Table} Table\n * @typedef {import('../state.js').State} State\n */\n\nimport {pointEnd, pointStart} from 'unist-util-position'\n\n/**\n * Turn an mdast `table` node into hast.\n *\n * @param {State} state\n * Info passed around.\n * @param {Table} node\n * mdast node.\n * @returns {Element}\n * hast node.\n */\nexport function table(state, node) {\n const rows = state.all(node)\n const firstRow = rows.shift()\n /** @type {Array<Element>} */\n const tableContent = []\n\n if (firstRow) {\n /** @type {Element} */\n const head = {\n type: 'element',\n tagName: 'thead',\n properties: {},\n children: state.wrap([firstRow], true)\n }\n state.patch(node.children[0], head)\n tableContent.push(head)\n }\n\n if (rows.length > 0) {\n /** @type {Element} */\n const body = {\n type: 'element',\n tagName: 'tbody',\n properties: {},\n children: state.wrap(rows, true)\n }\n\n const start = pointStart(node.children[1])\n const end = pointEnd(node.children[node.children.length - 1])\n if (start && end) body.position = {start, end}\n tableContent.push(body)\n }\n\n /** @type {Element} */\n const result = {\n type: 'element',\n tagName: 'table',\n properties: {},\n children: state.wrap(tableContent, true)\n }\n state.patch(node, result)\n return state.applyData(node, result)\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('mdast').TableCell} TableCell\n * @typedef {import('../state.js').State} State\n */\n\n// Make VS Code show references to the above types.\n''\n\n/**\n * Turn an mdast `tableCell` node into hast.\n *\n * @param {State} state\n * Info passed around.\n * @param {TableCell} node\n * mdast node.\n * @returns {Element}\n * hast node.\n */\nexport function tableCell(state, node) {\n // Note: this function is normally not called: see `table-row` for how rows\n // and their cells are compiled.\n /** @type {Element} */\n const result = {\n type: 'element',\n tagName: 'td', // Assume body cell.\n properties: {},\n children: state.all(node)\n }\n state.patch(node, result)\n return state.applyData(node, result)\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').ElementContent} ElementContent\n * @typedef {import('hast').Properties} Properties\n * @typedef {import('mdast').Parents} Parents\n * @typedef {import('mdast').TableRow} TableRow\n * @typedef {import('../state.js').State} State\n */\n\n// Make VS Code show references to the above types.\n''\n\n/**\n * Turn an mdast `tableRow` node into hast.\n *\n * @param {State} state\n * Info passed around.\n * @param {TableRow} node\n * mdast node.\n * @param {Parents | undefined} parent\n * Parent of `node`.\n * @returns {Element}\n * hast node.\n */\nexport function tableRow(state, node, parent) {\n const siblings = parent ? parent.children : undefined\n // Generate a body row when without parent.\n const rowIndex = siblings ? siblings.indexOf(node) : 1\n const tagName = rowIndex === 0 ? 'th' : 'td'\n // To do: option to use `style`?\n const align = parent && parent.type === 'table' ? parent.align : undefined\n const length = align ? align.length : node.children.length\n let cellIndex = -1\n /** @type {Array<ElementContent>} */\n const cells = []\n\n while (++cellIndex < length) {\n // Note: can also be undefined.\n const cell = node.children[cellIndex]\n /** @type {Properties} */\n const properties = {}\n const alignValue = align ? align[cellIndex] : undefined\n\n if (alignValue) {\n properties.align = alignValue\n }\n\n /** @type {Element} */\n let result = {type: 'element', tagName, properties, children: []}\n\n if (cell) {\n result.children = state.all(cell)\n state.patch(cell, result)\n result = state.applyData(cell, result)\n }\n\n cells.push(result)\n }\n\n /** @type {Element} */\n const result = {\n type: 'element',\n tagName: 'tr',\n properties: {},\n children: state.wrap(cells, true)\n }\n state.patch(node, result)\n return state.applyData(node, result)\n}\n","/**\n * @typedef {import('hast').Element} HastElement\n * @typedef {import('hast').Text} HastText\n * @typedef {import('mdast').Text} MdastText\n * @typedef {import('../state.js').State} State\n */\n\nimport {trimLines} from 'trim-lines'\n\n/**\n * Turn an mdast `text` node into hast.\n *\n * @param {State} state\n * Info passed around.\n * @param {MdastText} node\n * mdast node.\n * @returns {HastElement | HastText}\n * hast node.\n */\nexport function text(state, node) {\n /** @type {HastText} */\n const result = {type: 'text', value: trimLines(String(node.value))}\n state.patch(node, result)\n return state.applyData(node, result)\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('mdast').ThematicBreak} ThematicBreak\n * @typedef {import('../state.js').State} State\n */\n\n// Make VS Code show references to the above types.\n''\n\n/**\n * Turn an mdast `thematicBreak` node into hast.\n *\n * @param {State} state\n * Info passed around.\n * @param {ThematicBreak} node\n * mdast node.\n * @returns {Element}\n * hast node.\n */\nexport function thematicBreak(state, node) {\n /** @type {Element} */\n const result = {\n type: 'element',\n tagName: 'hr',\n properties: {},\n children: []\n }\n state.patch(node, result)\n return state.applyData(node, result)\n}\n","/**\n * @typedef {import('hast').Element} HastElement\n * @typedef {import('hast').ElementContent} HastElementContent\n * @typedef {import('hast').Nodes} HastNodes\n * @typedef {import('hast').Properties} HastProperties\n * @typedef {import('hast').RootContent} HastRootContent\n * @typedef {import('hast').Text} HastText\n *\n * @typedef {import('mdast').Definition} MdastDefinition\n * @typedef {import('mdast').FootnoteDefinition} MdastFootnoteDefinition\n * @typedef {import('mdast').Nodes} MdastNodes\n * @typedef {import('mdast').Parents} MdastParents\n *\n * @typedef {import('vfile').VFile} VFile\n *\n * @typedef {import('./footer.js').FootnoteBackContentTemplate} FootnoteBackContentTemplate\n * @typedef {import('./footer.js').FootnoteBackLabelTemplate} FootnoteBackLabelTemplate\n */\n\n/**\n * @callback Handler\n * Handle a node.\n * @param {State} state\n * Info passed around.\n * @param {any} node\n * mdast node to handle.\n * @param {MdastParents | undefined} parent\n * Parent of `node`.\n * @returns {Array<HastElementContent> | HastElementContent | undefined}\n * hast node.\n *\n * @typedef {Partial<Record<MdastNodes['type'], Handler>>} Handlers\n * Handle nodes.\n *\n * @typedef Options\n * Configuration (optional).\n * @property {boolean | null | undefined} [allowDangerousHtml=false]\n * Whether to persist raw HTML in markdown in the hast tree (default:\n * `false`).\n * @property {string | null | undefined} [clobberPrefix='user-content-']\n * Prefix to use before the `id` property on footnotes to prevent them from\n * *clobbering* (default: `'user-content-'`).\n *\n * Pass `''` for trusted markdown and when you are careful with\n * polyfilling.\n * You could pass a different prefix.\n *\n * DOM clobbering is this:\n *\n * ```html\n * <p id=\"x\"></p>\n * <script>alert(x) // `x` now refers to the `p#x` DOM element</script>\n * ```\n *\n * The above example shows that elements are made available by browsers, by\n * their ID, on the `window` object.\n * This is a security risk because you might be expecting some other variable\n * at that place.\n * It can also break polyfills.\n * Using a prefix solves these problems.\n * @property {VFile | null | undefined} [file]\n * Corresponding virtual file representing the input document (optional).\n * @property {FootnoteBackContentTemplate | string | null | undefined} [footnoteBackContent]\n * Content of the backreference back to references (default: `defaultFootnoteBackContent`).\n *\n * The default value is:\n *\n * ```js\n * function defaultFootnoteBackContent(_, rereferenceIndex) {\n * const result = [{type: 'text', value: '↩'}]\n *\n * if (rereferenceIndex > 1) {\n * result.push({\n * type: 'element',\n * tagName: 'sup',\n * properties: {},\n * children: [{type: 'text', value: String(rereferenceIndex)}]\n * })\n * }\n *\n * return result\n * }\n * ```\n *\n * This content is used in the `a` element of each backreference (the `↩`\n * links).\n * @property {FootnoteBackLabelTemplate | string | null | undefined} [footnoteBackLabel]\n * Label to describe the backreference back to references (default:\n * `defaultFootnoteBackLabel`).\n *\n * The default value is:\n *\n * ```js\n * function defaultFootnoteBackLabel(referenceIndex, rereferenceIndex) {\n * return (\n * 'Back to reference ' +\n * (referenceIndex + 1) +\n * (rereferenceIndex > 1 ? '-' + rereferenceIndex : '')\n * )\n * }\n * ```\n *\n * Change it when the markdown is not in English.\n *\n * This label is used in the `ariaLabel` property on each backreference\n * (the `↩` links).\n * It affects users of assistive technology.\n * @property {string | null | undefined} [footnoteLabel='Footnotes']\n * Textual label to use for the footnotes section (default: `'Footnotes'`).\n *\n * Change it when the markdown is not in English.\n *\n * This label is typically hidden visually (assuming a `sr-only` CSS class\n * is defined that does that) and so affects screen readers only.\n * If you do have such a class, but want to show this section to everyone,\n * pass different properties with the `footnoteLabelProperties` option.\n * @property {HastProperties | null | undefined} [footnoteLabelProperties={className: ['sr-only']}]\n * Properties to use on the footnote label (default: `{className:\n * ['sr-only']}`).\n *\n * Change it to show the label and add other properties.\n *\n * This label is typically hidden visually (assuming an `sr-only` CSS class\n * is defined that does that) and so affects screen readers only.\n * If you do have such a class, but want to show this section to everyone,\n * pass an empty string.\n * You can also add different properties.\n *\n * > **Note**: `id: 'footnote-label'` is always added, because footnote\n * > calls use it with `aria-describedby` to provide an accessible label.\n * @property {string | null | undefined} [footnoteLabelTagName='h2']\n * HTML tag name to use for the footnote label element (default: `'h2'`).\n *\n * Change it to match your document structure.\n *\n * This label is typically hidden visually (assuming a `sr-only` CSS class\n * is defined that does that) and so affects screen readers only.\n * If you do have such a class, but want to show this section to everyone,\n * pass different properties with the `footnoteLabelProperties` option.\n * @property {Handlers | null | undefined} [handlers]\n * Extra handlers for nodes (optional).\n * @property {Array<MdastNodes['type']> | null | undefined} [passThrough]\n * List of custom mdast node types to pass through (keep) in hast (note that\n * the node itself is passed, but eventual children are transformed)\n * (optional).\n * @property {Handler | null | undefined} [unknownHandler]\n * Handler for all unknown nodes (optional).\n *\n * @typedef State\n * Info passed around.\n * @property {(node: MdastNodes) => Array<HastElementContent>} all\n * Transform the children of an mdast parent to hast.\n * @property {<Type extends HastNodes>(from: MdastNodes, to: Type) => HastElement | Type} applyData\n * Honor the `data` of `from`, and generate an element instead of `node`.\n * @property {Map<string, MdastDefinition>} definitionById\n * Definitions by their identifier.\n * @property {Map<string, MdastFootnoteDefinition>} footnoteById\n * Footnote definitions by their identifier.\n * @property {Map<string, number>} footnoteCounts\n * Counts for how often the same footnote was called.\n * @property {Array<string>} footnoteOrder\n * Identifiers of order when footnote calls first appear in tree order.\n * @property {Handlers} handlers\n * Applied handlers.\n * @property {(node: MdastNodes, parent: MdastParents | undefined) => Array<HastElementContent> | HastElementContent | undefined} one\n * Transform an mdast node to hast.\n * @property {Options} options\n * Configuration.\n * @property {(from: MdastNodes, node: HastNodes) => undefined} patch\n * Copy a node’s positional info.\n * @property {<Type extends HastRootContent>(nodes: Array<Type>, loose?: boolean | undefined) => Array<HastText | Type>} wrap\n * Wrap `nodes` with line endings between each node, adds initial/final line endings when `loose`.\n */\n\nimport structuredClone from '@ungap/structured-clone'\nimport {visit} from 'unist-util-visit'\nimport {position} from 'unist-util-position'\nimport {handlers as defaultHandlers} from './handlers/index.js'\n\nconst own = {}.hasOwnProperty\n\n/** @type {Options} */\nconst emptyOptions = {}\n\n/**\n * Create `state` from an mdast tree.\n *\n * @param {MdastNodes} tree\n * mdast node to transform.\n * @param {Options | null | undefined} [options]\n * Configuration (optional).\n * @returns {State}\n * `state` function.\n */\nexport function createState(tree, options) {\n const settings = options || emptyOptions\n /** @type {Map<string, MdastDefinition>} */\n const definitionById = new Map()\n /** @type {Map<string, MdastFootnoteDefinition>} */\n const footnoteById = new Map()\n /** @type {Map<string, number>} */\n const footnoteCounts = new Map()\n /** @type {Handlers} */\n // @ts-expect-error: the root handler returns a root.\n // Hard to type.\n const handlers = {...defaultHandlers, ...settings.handlers}\n\n /** @type {State} */\n const state = {\n all,\n applyData,\n definitionById,\n footnoteById,\n footnoteCounts,\n footnoteOrder: [],\n handlers,\n one,\n options: settings,\n patch,\n wrap\n }\n\n visit(tree, function (node) {\n if (node.type === 'definition' || node.type === 'footnoteDefinition') {\n const map = node.type === 'definition' ? definitionById : footnoteById\n const id = String(node.identifier).toUpperCase()\n\n // Mimick CM behavior of link definitions.\n // See: <https://github.com/syntax-tree/mdast-util-definitions/blob/9032189/lib/index.js#L20-L21>.\n if (!map.has(id)) {\n // @ts-expect-error: node type matches map.\n map.set(id, node)\n }\n }\n })\n\n return state\n\n /**\n * Transform an mdast node into a hast node.\n *\n * @param {MdastNodes} node\n * mdast node.\n * @param {MdastParents | undefined} [parent]\n * Parent of `node`.\n * @returns {Array<HastElementContent> | HastElementContent | undefined}\n * Resulting hast node.\n */\n function one(node, parent) {\n const type = node.type\n const handle = state.handlers[type]\n\n if (own.call(state.handlers, type) && handle) {\n return handle(state, node, parent)\n }\n\n if (state.options.passThrough && state.options.passThrough.includes(type)) {\n if ('children' in node) {\n const {children, ...shallow} = node\n const result = structuredClone(shallow)\n // @ts-expect-error: TS doesn’t understand…\n result.children = state.all(node)\n // @ts-expect-error: TS doesn’t understand…\n return result\n }\n\n // @ts-expect-error: it’s custom.\n return structuredClone(node)\n }\n\n const unknown = state.options.unknownHandler || defaultUnknownHandler\n\n return unknown(state, node, parent)\n }\n\n /**\n * Transform the children of an mdast node into hast nodes.\n *\n * @param {MdastNodes} parent\n * mdast node to compile\n * @returns {Array<HastElementContent>}\n * Resulting hast nodes.\n */\n function all(parent) {\n /** @type {Array<HastElementContent>} */\n const values = []\n\n if ('children' in parent) {\n const nodes = parent.children\n let index = -1\n while (++index < nodes.length) {\n const result = state.one(nodes[index], parent)\n\n // To do: see if we van clean this? Can we merge texts?\n if (result) {\n if (index && nodes[index - 1].type === 'break') {\n if (!Array.isArray(result) && result.type === 'text') {\n result.value = trimMarkdownSpaceStart(result.value)\n }\n\n if (!Array.isArray(result) && result.type === 'element') {\n const head = result.children[0]\n\n if (head && head.type === 'text') {\n head.value = trimMarkdownSpaceStart(head.value)\n }\n }\n }\n\n if (Array.isArray(result)) {\n values.push(...result)\n } else {\n values.push(result)\n }\n }\n }\n }\n\n return values\n }\n}\n\n/**\n * Copy a node’s positional info.\n *\n * @param {MdastNodes} from\n * mdast node to copy from.\n * @param {HastNodes} to\n * hast node to copy into.\n * @returns {undefined}\n * Nothing.\n */\nfunction patch(from, to) {\n if (from.position) to.position = position(from)\n}\n\n/**\n * Honor the `data` of `from` and maybe generate an element instead of `to`.\n *\n * @template {HastNodes} Type\n * Node type.\n * @param {MdastNodes} from\n * mdast node to use data from.\n * @param {Type} to\n * hast node to change.\n * @returns {HastElement | Type}\n * Nothing.\n */\nfunction applyData(from, to) {\n /** @type {HastElement | Type} */\n let result = to\n\n // Handle `data.hName`, `data.hProperties, `data.hChildren`.\n if (from && from.data) {\n const hName = from.data.hName\n const hChildren = from.data.hChildren\n const hProperties = from.data.hProperties\n\n if (typeof hName === 'string') {\n // Transforming the node resulted in an element with a different name\n // than wanted:\n if (result.type === 'element') {\n result.tagName = hName\n }\n // Transforming the node resulted in a non-element, which happens for\n // raw, text, and root nodes (unless custom handlers are passed).\n // The intent of `hName` is to create an element, but likely also to keep\n // the content around (otherwise: pass `hChildren`).\n else {\n /** @type {Array<HastElementContent>} */\n // @ts-expect-error: assume no doctypes in `root`.\n const children = 'children' in result ? result.children : [result]\n result = {type: 'element', tagName: hName, properties: {}, children}\n }\n }\n\n if (result.type === 'element' && hProperties) {\n Object.assign(result.properties, structuredClone(hProperties))\n }\n\n if (\n 'children' in result &&\n result.children &&\n hChildren !== null &&\n hChildren !== undefined\n ) {\n result.children = hChildren\n }\n }\n\n return result\n}\n\n/**\n * Transform an unknown node.\n *\n * @param {State} state\n * Info passed around.\n * @param {MdastNodes} node\n * Unknown mdast node.\n * @returns {HastElement | HastText}\n * Resulting hast node.\n */\nfunction defaultUnknownHandler(state, node) {\n const data = node.data || {}\n /** @type {HastElement | HastText} */\n const result =\n 'value' in node &&\n !(own.call(data, 'hProperties') || own.call(data, 'hChildren'))\n ? {type: 'text', value: node.value}\n : {\n type: 'element',\n tagName: 'div',\n properties: {},\n children: state.all(node)\n }\n\n state.patch(node, result)\n return state.applyData(node, result)\n}\n\n/**\n * Wrap `nodes` with line endings between each node.\n *\n * @template {HastRootContent} Type\n * Node type.\n * @param {Array<Type>} nodes\n * List of nodes to wrap.\n * @param {boolean | undefined} [loose=false]\n * Whether to add line endings at start and end (default: `false`).\n * @returns {Array<HastText | Type>}\n * Wrapped nodes.\n */\nexport function wrap(nodes, loose) {\n /** @type {Array<HastText | Type>} */\n const result = []\n let index = -1\n\n if (loose) {\n result.push({type: 'text', value: '\\n'})\n }\n\n while (++index < nodes.length) {\n if (index) result.push({type: 'text', value: '\\n'})\n result.push(nodes[index])\n }\n\n if (loose && nodes.length > 0) {\n result.push({type: 'text', value: '\\n'})\n }\n\n return result\n}\n\n/**\n * Trim spaces and tabs at the start of `value`.\n *\n * @param {string} value\n * Value to trim.\n * @returns {string}\n * Result.\n */\nfunction trimMarkdownSpaceStart(value) {\n let index = 0\n let code = value.charCodeAt(index)\n\n while (code === 9 || code === 32) {\n index++\n code = value.charCodeAt(index)\n }\n\n return value.slice(index)\n}\n","/**\n * @typedef {import('hast').Nodes} HastNodes\n * @typedef {import('mdast').Nodes} MdastNodes\n * @typedef {import('./state.js').Options} Options\n */\n\nimport {ok as assert} from 'devlop'\nimport {footer} from './footer.js'\nimport {createState} from './state.js'\n\n/**\n * Transform mdast to hast.\n *\n * ##### Notes\n *\n * ###### HTML\n *\n * Raw HTML is available in mdast as `html` nodes and can be embedded in hast\n * as semistandard `raw` nodes.\n * Most utilities ignore `raw` nodes but two notable ones don’t:\n *\n * * `hast-util-to-html` also has an option `allowDangerousHtml` which will\n * output the raw HTML.\n * This is typically discouraged as noted by the option name but is useful\n * if you completely trust authors\n * * `hast-util-raw` can handle the raw embedded HTML strings by parsing them\n * into standard hast nodes (`element`, `text`, etc).\n * This is a heavy task as it needs a full HTML parser, but it is the only\n * way to support untrusted content\n *\n * ###### Footnotes\n *\n * Many options supported here relate to footnotes.\n * Footnotes are not specified by CommonMark, which we follow by default.\n * They are supported by GitHub, so footnotes can be enabled in markdown with\n * `mdast-util-gfm`.\n *\n * The options `footnoteBackLabel` and `footnoteLabel` define natural language\n * that explains footnotes, which is hidden for sighted users but shown to\n * assistive technology.\n * When your page is not in English, you must define translated values.\n *\n * Back references use ARIA attributes, but the section label itself uses a\n * heading that is hidden with an `sr-only` class.\n * To show it to sighted users, define different attributes in\n * `footnoteLabelProperties`.\n *\n * ###### Clobbering\n *\n * Footnotes introduces a problem, as it links footnote calls to footnote\n * definitions on the page through `id` attributes generated from user content,\n * which results in DOM clobbering.\n *\n * DOM clobbering is this:\n *\n * ```html\n * <p id=x></p>\n * <script>alert(x) // `x` now refers to the DOM `p#x` element</script>\n * ```\n *\n * Elements by their ID are made available by browsers on the `window` object,\n * which is a security risk.\n * Using a prefix solves this problem.\n *\n * More information on how to handle clobbering and the prefix is explained in\n * Example: headings (DOM clobbering) in `rehype-sanitize`.\n *\n * ###### Unknown nodes\n *\n * Unknown nodes are nodes with a type that isn’t in `handlers` or `passThrough`.\n * The default behavior for unknown nodes is:\n *\n * * when the node has a `value` (and doesn’t have `data.hName`,\n * `data.hProperties`, or `data.hChildren`, see later), create a hast `text`\n * node\n * * otherwise, create a `<div>` element (which could be changed with\n * `data.hName`), with its children mapped from mdast to hast as well\n *\n * This behavior can be changed by passing an `unknownHandler`.\n *\n * @param {MdastNodes} tree\n * mdast tree.\n * @param {Options | null | undefined} [options]\n * Configuration (optional).\n * @returns {HastNodes}\n * hast tree.\n */\nexport function toHast(tree, options) {\n const state = createState(tree, options)\n const node = state.one(tree, undefined)\n const foot = footer(state)\n /** @type {HastNodes} */\n const result = Array.isArray(node)\n ? {type: 'root', children: node}\n : node || {type: 'root', children: []}\n\n if (foot) {\n // If there’s a footer, there were definitions, meaning block\n // content.\n // So `result` is a parent node.\n assert('children' in result)\n result.children.push({type: 'text', value: '\\n'}, foot)\n }\n\n return result\n}\n","// Include `data` fields in mdast and `raw` nodes in hast.\n/// <reference types=\"mdast-util-to-hast\" />\n\n/**\n * @import {Root as HastRoot} from 'hast'\n * @import {Root as MdastRoot} from 'mdast'\n * @import {Options as ToHastOptions} from 'mdast-util-to-hast'\n * @import {Processor} from 'unified'\n * @import {VFile} from 'vfile'\n */\n\n/**\n * @typedef {Omit<ToHastOptions, 'file'>} Options\n *\n * @callback TransformBridge\n * Bridge-mode.\n *\n * Runs the destination with the new hast tree.\n * Discards result.\n * @param {MdastRoot} tree\n * Tree.\n * @param {VFile} file\n * File.\n * @returns {Promise<undefined>}\n * Nothing.\n *\n * @callback TransformMutate\n * Mutate-mode.\n *\n * Further transformers run on the hast tree.\n * @param {MdastRoot} tree\n * Tree.\n * @param {VFile} file\n * File.\n * @returns {HastRoot}\n * Tree (hast).\n */\n\nimport {toHast} from 'mdast-util-to-hast'\n\n/**\n * Turn markdown into HTML.\n *\n * ##### Notes\n *\n * ###### Signature\n *\n * * if a processor is given, runs the (rehype) plugins used on it with a\n * hast tree, then discards the result (*bridge mode*)\n * * otherwise, returns a hast tree, the plugins used after `remarkRehype`\n * are rehype plugins (*mutate mode*)\n *\n * > 👉 **Note**: It’s highly unlikely that you want to pass a `processor`.\n *\n * ###### HTML\n *\n * Raw HTML is available in mdast as `html` nodes and can be embedded in hast\n * as semistandard `raw` nodes.\n * Most plugins ignore `raw` nodes but two notable ones don’t:\n *\n * * `rehype-stringify` also has an option `allowDangerousHtml` which will\n * output the raw HTML.\n * This is typically discouraged as noted by the option name but is useful if\n * you completely trust authors\n * * `rehype-raw` can handle the raw embedded HTML strings by parsing them\n * into standard hast nodes (`element`, `text`, etc).\n * This is a heavy task as it needs a full HTML parser, but it is the only way\n * to support untrusted content\n *\n * ###### Footnotes\n *\n * Many options supported here relate to footnotes.\n * Footnotes are not specified by CommonMark, which we follow by default.\n * They are supported by GitHub, so footnotes can be enabled in markdown with\n * `remark-gfm`.\n *\n * The options `footnoteBackLabel` and `footnoteLabel` define natural language\n * that explains footnotes, which is hidden for sighted users but shown to\n * assistive technology.\n * When your page is not in English, you must define translated values.\n *\n * Back references use ARIA attributes, but the section label itself uses a\n * heading that is hidden with an `sr-only` class.\n * To show it to sighted users, define different attributes in\n * `footnoteLabelProperties`.\n *\n * ###### Clobbering\n *\n * Footnotes introduces a problem, as it links footnote calls to footnote\n * definitions on the page through `id` attributes generated from user content,\n * which results in DOM clobbering.\n *\n * DOM clobbering is this:\n *\n * ```html\n * <p id=x></p>\n * <script>alert(x) // `x` now refers to the DOM `p#x` element</script>\n * ```\n *\n * Elements by their ID are made available by browsers on the `window` object,\n * which is a security risk.\n * Using a prefix solves this problem.\n *\n * More information on how to handle clobbering and the prefix is explained in\n * *Example: headings (DOM clobbering)* in `rehype-sanitize`.\n *\n * ###### Unknown nodes\n *\n * Unknown nodes are nodes with a type that isn’t in `handlers` or `passThrough`.\n * The default behavior for unknown nodes is:\n *\n * * when the node has a `value` (and doesn’t have `data.hName`,\n * `data.hProperties`, or `data.hChildren`, see later), create a hast `text`\n * node\n * * otherwise, create a `<div>` element (which could be changed with\n * `data.hName`), with its children mapped from mdast to hast as well\n *\n * This behavior can be changed by passing an `unknownHandler`.\n *\n * @overload\n * @param {Processor} processor\n * @param {Readonly<Options> | null | undefined} [options]\n * @returns {TransformBridge}\n *\n * @overload\n * @param {Readonly<Options> | null | undefined} [options]\n * @returns {TransformMutate}\n *\n * @param {Readonly<Options> | Processor | null | undefined} [destination]\n * Processor or configuration (optional).\n * @param {Readonly<Options> | null | undefined} [options]\n * When a processor was given, configuration (optional).\n * @returns {TransformBridge | TransformMutate}\n * Transform.\n */\nexport default function remarkRehype(destination, options) {\n if (destination && 'run' in destination) {\n /**\n * @type {TransformBridge}\n */\n return async function (tree, file) {\n // Cast because root in -> root out.\n const hastTree = /** @type {HastRoot} */ (\n toHast(tree, {file, ...options})\n )\n await destination.run(hastTree, file)\n }\n }\n\n /**\n * @type {TransformMutate}\n */\n return function (tree, file) {\n // Cast because root in -> root out.\n // To do: in the future, disallow ` || options` fallback.\n // With `unified-engine`, `destination` can be `undefined` but\n // `options` will be the file set.\n // We should not pass that as `options`.\n return /** @type {HastRoot} */ (\n toHast(tree, {file, ...(destination || options)})\n )\n }\n}\n","/**\n * Throw a given error.\n *\n * @param {Error|null|undefined} [error]\n * Maybe error.\n * @returns {asserts error is null|undefined}\n */\nexport function bail(error) {\n if (error) {\n throw error\n }\n}\n","export default function isPlainObject(value) {\n\tif (typeof value !== 'object' || value === null) {\n\t\treturn false;\n\t}\n\n\tconst prototype = Object.getPrototypeOf(value);\n\treturn (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(Symbol.toStringTag in value) && !(Symbol.iterator in value);\n}\n","// To do: remove `void`s\n// To do: remove `null` from output of our APIs, allow it as user APIs.\n\n/**\n * @typedef {(error?: Error | null | undefined, ...output: Array<any>) => void} Callback\n * Callback.\n *\n * @typedef {(...input: Array<any>) => any} Middleware\n * Ware.\n *\n * @typedef Pipeline\n * Pipeline.\n * @property {Run} run\n * Run the pipeline.\n * @property {Use} use\n * Add middleware.\n *\n * @typedef {(...input: Array<any>) => void} Run\n * Call all middleware.\n *\n * Calls `done` on completion with either an error or the output of the\n * last middleware.\n *\n * > 👉 **Note**: as the length of input defines whether async functions get a\n * > `next` function,\n * > it’s recommended to keep `input` at one value normally.\n\n *\n * @typedef {(fn: Middleware) => Pipeline} Use\n * Add middleware.\n */\n\n/**\n * Create new middleware.\n *\n * @returns {Pipeline}\n * Pipeline.\n */\nexport function trough() {\n /** @type {Array<Middleware>} */\n const fns = []\n /** @type {Pipeline} */\n const pipeline = {run, use}\n\n return pipeline\n\n /** @type {Run} */\n function run(...values) {\n let middlewareIndex = -1\n /** @type {Callback} */\n const callback = values.pop()\n\n if (typeof callback !== 'function') {\n throw new TypeError('Expected function as last argument, not ' + callback)\n }\n\n next(null, ...values)\n\n /**\n * Run the next `fn`, or we’re done.\n *\n * @param {Error | null | undefined} error\n * @param {Array<any>} output\n */\n function next(error, ...output) {\n const fn = fns[++middlewareIndex]\n let index = -1\n\n if (error) {\n callback(error)\n return\n }\n\n // Copy non-nullish input into values.\n while (++index < values.length) {\n if (output[index] === null || output[index] === undefined) {\n output[index] = values[index]\n }\n }\n\n // Save the newly created `output` for the next call.\n values = output\n\n // Next or done.\n if (fn) {\n wrap(fn, next)(...output)\n } else {\n callback(null, ...output)\n }\n }\n }\n\n /** @type {Use} */\n function use(middelware) {\n if (typeof middelware !== 'function') {\n throw new TypeError(\n 'Expected `middelware` to be a function, not ' + middelware\n )\n }\n\n fns.push(middelware)\n return pipeline\n }\n}\n\n/**\n * Wrap `middleware` into a uniform interface.\n *\n * You can pass all input to the resulting function.\n * `callback` is then called with the output of `middleware`.\n *\n * If `middleware` accepts more arguments than the later given in input,\n * an extra `done` function is passed to it after that input,\n * which must be called by `middleware`.\n *\n * The first value in `input` is the main input value.\n * All other input values are the rest input values.\n * The values given to `callback` are the input values,\n * merged with every non-nullish output value.\n *\n * * if `middleware` throws an error,\n * returns a promise that is rejected,\n * or calls the given `done` function with an error,\n * `callback` is called with that error\n * * if `middleware` returns a value or returns a promise that is resolved,\n * that value is the main output value\n * * if `middleware` calls `done`,\n * all non-nullish values except for the first one (the error) overwrite the\n * output values\n *\n * @param {Middleware} middleware\n * Function to wrap.\n * @param {Callback} callback\n * Callback called with the output of `middleware`.\n * @returns {Run}\n * Wrapped middleware.\n */\nexport function wrap(middleware, callback) {\n /** @type {boolean} */\n let called\n\n return wrapped\n\n /**\n * Call `middleware`.\n * @this {any}\n * @param {Array<any>} parameters\n * @returns {void}\n */\n function wrapped(...parameters) {\n const fnExpectsCallback = middleware.length > parameters.length\n /** @type {any} */\n let result\n\n if (fnExpectsCallback) {\n parameters.push(done)\n }\n\n try {\n result = middleware.apply(this, parameters)\n } catch (error) {\n const exception = /** @type {Error} */ (error)\n\n // Well, this is quite the pickle.\n // `middleware` received a callback and called it synchronously, but that\n // threw an error.\n // The only thing left to do is to throw the thing instead.\n if (fnExpectsCallback && called) {\n throw exception\n }\n\n return done(exception)\n }\n\n if (!fnExpectsCallback) {\n if (result && result.then && typeof result.then === 'function') {\n result.then(then, done)\n } else if (result instanceof Error) {\n done(result)\n } else {\n then(result)\n }\n }\n }\n\n /**\n * Call `callback`, only once.\n *\n * @type {Callback}\n */\n function done(error, ...output) {\n if (!called) {\n called = true\n callback(error, ...output)\n }\n }\n\n /**\n * Call `done` with one value.\n *\n * @param {any} [value]\n */\n function then(value) {\n done(null, value)\n }\n}\n","// A derivative work based on:\n// <https://github.com/browserify/path-browserify>.\n// Which is licensed:\n//\n// MIT License\n//\n// Copyright (c) 2013 James Halliday\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy of\n// this software and associated documentation files (the \"Software\"), to deal in\n// the Software without restriction, including without limitation the rights to\n// use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\n// the Software, and to permit persons to whom the Software is furnished to do so,\n// subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in all\n// copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\n// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\n// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\n// IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n// A derivative work based on:\n//\n// Parts of that are extracted from Node’s internal `path` module:\n// <https://github.com/nodejs/node/blob/master/lib/path.js>.\n// Which is licensed:\n//\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nexport const minpath = {basename, dirname, extname, join, sep: '/'}\n\n/* eslint-disable max-depth, complexity */\n\n/**\n * Get the basename from a path.\n *\n * @param {string} path\n * File path.\n * @param {string | null | undefined} [extname]\n * Extension to strip.\n * @returns {string}\n * Stem or basename.\n */\nfunction basename(path, extname) {\n if (extname !== undefined && typeof extname !== 'string') {\n throw new TypeError('\"ext\" argument must be a string')\n }\n\n assertPath(path)\n let start = 0\n let end = -1\n let index = path.length\n /** @type {boolean | undefined} */\n let seenNonSlash\n\n if (\n extname === undefined ||\n extname.length === 0 ||\n extname.length > path.length\n ) {\n while (index--) {\n if (path.codePointAt(index) === 47 /* `/` */) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now.\n if (seenNonSlash) {\n start = index + 1\n break\n }\n } else if (end < 0) {\n // We saw the first non-path separator, mark this as the end of our\n // path component.\n seenNonSlash = true\n end = index + 1\n }\n }\n\n return end < 0 ? '' : path.slice(start, end)\n }\n\n if (extname === path) {\n return ''\n }\n\n let firstNonSlashEnd = -1\n let extnameIndex = extname.length - 1\n\n while (index--) {\n if (path.codePointAt(index) === 47 /* `/` */) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now.\n if (seenNonSlash) {\n start = index + 1\n break\n }\n } else {\n if (firstNonSlashEnd < 0) {\n // We saw the first non-path separator, remember this index in case\n // we need it if the extension ends up not matching.\n seenNonSlash = true\n firstNonSlashEnd = index + 1\n }\n\n if (extnameIndex > -1) {\n // Try to match the explicit extension.\n if (path.codePointAt(index) === extname.codePointAt(extnameIndex--)) {\n if (extnameIndex < 0) {\n // We matched the extension, so mark this as the end of our path\n // component\n end = index\n }\n } else {\n // Extension does not match, so our result is the entire path\n // component\n extnameIndex = -1\n end = firstNonSlashEnd\n }\n }\n }\n }\n\n if (start === end) {\n end = firstNonSlashEnd\n } else if (end < 0) {\n end = path.length\n }\n\n return path.slice(start, end)\n}\n\n/**\n * Get the dirname from a path.\n *\n * @param {string} path\n * File path.\n * @returns {string}\n * File path.\n */\nfunction dirname(path) {\n assertPath(path)\n\n if (path.length === 0) {\n return '.'\n }\n\n let end = -1\n let index = path.length\n /** @type {boolean | undefined} */\n let unmatchedSlash\n\n // Prefix `--` is important to not run on `0`.\n while (--index) {\n if (path.codePointAt(index) === 47 /* `/` */) {\n if (unmatchedSlash) {\n end = index\n break\n }\n } else if (!unmatchedSlash) {\n // We saw the first non-path separator\n unmatchedSlash = true\n }\n }\n\n return end < 0\n ? path.codePointAt(0) === 47 /* `/` */\n ? '/'\n : '.'\n : end === 1 && path.codePointAt(0) === 47 /* `/` */\n ? '//'\n : path.slice(0, end)\n}\n\n/**\n * Get an extname from a path.\n *\n * @param {string} path\n * File path.\n * @returns {string}\n * Extname.\n */\nfunction extname(path) {\n assertPath(path)\n\n let index = path.length\n\n let end = -1\n let startPart = 0\n let startDot = -1\n // Track the state of characters (if any) we see before our first dot and\n // after any path separator we find.\n let preDotState = 0\n /** @type {boolean | undefined} */\n let unmatchedSlash\n\n while (index--) {\n const code = path.codePointAt(index)\n\n if (code === 47 /* `/` */) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now.\n if (unmatchedSlash) {\n startPart = index + 1\n break\n }\n\n continue\n }\n\n if (end < 0) {\n // We saw the first non-path separator, mark this as the end of our\n // extension.\n unmatchedSlash = true\n end = index + 1\n }\n\n if (code === 46 /* `.` */) {\n // If this is our first dot, mark it as the start of our extension.\n if (startDot < 0) {\n startDot = index\n } else if (preDotState !== 1) {\n preDotState = 1\n }\n } else if (startDot > -1) {\n // We saw a non-dot and non-path separator before our dot, so we should\n // have a good chance at having a non-empty extension.\n preDotState = -1\n }\n }\n\n if (\n startDot < 0 ||\n end < 0 ||\n // We saw a non-dot character immediately before the dot.\n preDotState === 0 ||\n // The (right-most) trimmed path component is exactly `..`.\n (preDotState === 1 && startDot === end - 1 && startDot === startPart + 1)\n ) {\n return ''\n }\n\n return path.slice(startDot, end)\n}\n\n/**\n * Join segments from a path.\n *\n * @param {Array<string>} segments\n * Path segments.\n * @returns {string}\n * File path.\n */\nfunction join(...segments) {\n let index = -1\n /** @type {string | undefined} */\n let joined\n\n while (++index < segments.length) {\n assertPath(segments[index])\n\n if (segments[index]) {\n joined =\n joined === undefined ? segments[index] : joined + '/' + segments[index]\n }\n }\n\n return joined === undefined ? '.' : normalize(joined)\n}\n\n/**\n * Normalize a basic file path.\n *\n * @param {string} path\n * File path.\n * @returns {string}\n * File path.\n */\n// Note: `normalize` is not exposed as `path.normalize`, so some code is\n// manually removed from it.\nfunction normalize(path) {\n assertPath(path)\n\n const absolute = path.codePointAt(0) === 47 /* `/` */\n\n // Normalize the path according to POSIX rules.\n let value = normalizeString(path, !absolute)\n\n if (value.length === 0 && !absolute) {\n value = '.'\n }\n\n if (value.length > 0 && path.codePointAt(path.length - 1) === 47 /* / */) {\n value += '/'\n }\n\n return absolute ? '/' + value : value\n}\n\n/**\n * Resolve `.` and `..` elements in a path with directory names.\n *\n * @param {string} path\n * File path.\n * @param {boolean} allowAboveRoot\n * Whether `..` can move above root.\n * @returns {string}\n * File path.\n */\nfunction normalizeString(path, allowAboveRoot) {\n let result = ''\n let lastSegmentLength = 0\n let lastSlash = -1\n let dots = 0\n let index = -1\n /** @type {number | undefined} */\n let code\n /** @type {number} */\n let lastSlashIndex\n\n while (++index <= path.length) {\n if (index < path.length) {\n code = path.codePointAt(index)\n } else if (code === 47 /* `/` */) {\n break\n } else {\n code = 47 /* `/` */\n }\n\n if (code === 47 /* `/` */) {\n if (lastSlash === index - 1 || dots === 1) {\n // Empty.\n } else if (lastSlash !== index - 1 && dots === 2) {\n if (\n result.length < 2 ||\n lastSegmentLength !== 2 ||\n result.codePointAt(result.length - 1) !== 46 /* `.` */ ||\n result.codePointAt(result.length - 2) !== 46 /* `.` */\n ) {\n if (result.length > 2) {\n lastSlashIndex = result.lastIndexOf('/')\n\n if (lastSlashIndex !== result.length - 1) {\n if (lastSlashIndex < 0) {\n result = ''\n lastSegmentLength = 0\n } else {\n result = result.slice(0, lastSlashIndex)\n lastSegmentLength = result.length - 1 - result.lastIndexOf('/')\n }\n\n lastSlash = index\n dots = 0\n continue\n }\n } else if (result.length > 0) {\n result = ''\n lastSegmentLength = 0\n lastSlash = index\n dots = 0\n continue\n }\n }\n\n if (allowAboveRoot) {\n result = result.length > 0 ? result + '/..' : '..'\n lastSegmentLength = 2\n }\n } else {\n if (result.length > 0) {\n result += '/' + path.slice(lastSlash + 1, index)\n } else {\n result = path.slice(lastSlash + 1, index)\n }\n\n lastSegmentLength = index - lastSlash - 1\n }\n\n lastSlash = index\n dots = 0\n } else if (code === 46 /* `.` */ && dots > -1) {\n dots++\n } else {\n dots = -1\n }\n }\n\n return result\n}\n\n/**\n * Make sure `path` is a string.\n *\n * @param {string} path\n * File path.\n * @returns {asserts path is string}\n * Nothing.\n */\nfunction assertPath(path) {\n if (typeof path !== 'string') {\n throw new TypeError(\n 'Path must be a string. Received ' + JSON.stringify(path)\n )\n }\n}\n\n/* eslint-enable max-depth, complexity */\n","// Somewhat based on:\n// <https://github.com/defunctzombie/node-process/blob/master/browser.js>.\n// But I don’t think one tiny line of code can be copyrighted. 😅\nexport const minproc = {cwd}\n\nfunction cwd() {\n return '/'\n}\n","/**\n * Checks if a value has the shape of a WHATWG URL object.\n *\n * Using a symbol or instanceof would not be able to recognize URL objects\n * coming from other implementations (e.g. in Electron), so instead we are\n * checking some well known properties for a lack of a better test.\n *\n * We use `href` and `protocol` as they are the only properties that are\n * easy to retrieve and calculate due to the lazy nature of the getters.\n *\n * We check for auth attribute to distinguish legacy url instance with\n * WHATWG URL instance.\n *\n * @param {unknown} fileUrlOrPath\n * File path or URL.\n * @returns {fileUrlOrPath is URL}\n * Whether it’s a URL.\n */\n// From: <https://github.com/nodejs/node/blob/6a3403c/lib/internal/url.js#L720>\nexport function isUrl(fileUrlOrPath) {\n return Boolean(\n fileUrlOrPath !== null &&\n typeof fileUrlOrPath === 'object' &&\n 'href' in fileUrlOrPath &&\n fileUrlOrPath.href &&\n 'protocol' in fileUrlOrPath &&\n fileUrlOrPath.protocol &&\n // @ts-expect-error: indexing is fine.\n fileUrlOrPath.auth === undefined\n )\n}\n","import {isUrl} from './minurl.shared.js'\n\nexport {isUrl} from './minurl.shared.js'\n\n// See: <https://github.com/nodejs/node/blob/6a3403c/lib/internal/url.js>\n\n/**\n * @param {URL | string} path\n * File URL.\n * @returns {string}\n * File URL.\n */\nexport function urlToPath(path) {\n if (typeof path === 'string') {\n path = new URL(path)\n } else if (!isUrl(path)) {\n /** @type {NodeJS.ErrnoException} */\n const error = new TypeError(\n 'The \"path\" argument must be of type string or an instance of URL. Received `' +\n path +\n '`'\n )\n error.code = 'ERR_INVALID_ARG_TYPE'\n throw error\n }\n\n if (path.protocol !== 'file:') {\n /** @type {NodeJS.ErrnoException} */\n const error = new TypeError('The URL must be of scheme file')\n error.code = 'ERR_INVALID_URL_SCHEME'\n throw error\n }\n\n return getPathFromURLPosix(path)\n}\n\n/**\n * Get a path from a POSIX URL.\n *\n * @param {URL} url\n * URL.\n * @returns {string}\n * File path.\n */\nfunction getPathFromURLPosix(url) {\n if (url.hostname !== '') {\n /** @type {NodeJS.ErrnoException} */\n const error = new TypeError(\n 'File URL host must be \"localhost\" or empty on darwin'\n )\n error.code = 'ERR_INVALID_FILE_URL_HOST'\n throw error\n }\n\n const pathname = url.pathname\n let index = -1\n\n while (++index < pathname.length) {\n if (\n pathname.codePointAt(index) === 37 /* `%` */ &&\n pathname.codePointAt(index + 1) === 50 /* `2` */\n ) {\n const third = pathname.codePointAt(index + 2)\n if (third === 70 /* `F` */ || third === 102 /* `f` */) {\n /** @type {NodeJS.ErrnoException} */\n const error = new TypeError(\n 'File URL path must not include encoded / characters'\n )\n error.code = 'ERR_INVALID_FILE_URL_PATH'\n throw error\n }\n }\n }\n\n return decodeURIComponent(pathname)\n}\n","/**\n * @import {Node, Point, Position} from 'unist'\n * @import {Options as MessageOptions} from 'vfile-message'\n * @import {Compatible, Data, Map, Options, Value} from 'vfile'\n */\n\n/**\n * @typedef {object & {type: string, position?: Position | undefined}} NodeLike\n */\n\nimport {VFileMessage} from 'vfile-message'\nimport {minpath} from '#minpath'\nimport {minproc} from '#minproc'\nimport {urlToPath, isUrl} from '#minurl'\n\n/**\n * Order of setting (least specific to most), we need this because otherwise\n * `{stem: 'a', path: '~/b.js'}` would throw, as a path is needed before a\n * stem can be set.\n */\nconst order = /** @type {const} */ ([\n 'history',\n 'path',\n 'basename',\n 'stem',\n 'extname',\n 'dirname'\n])\n\nexport class VFile {\n /**\n * Create a new virtual file.\n *\n * `options` is treated as:\n *\n * * `string` or `Uint8Array` — `{value: options}`\n * * `URL` — `{path: options}`\n * * `VFile` — shallow copies its data over to the new file\n * * `object` — all fields are shallow copied over to the new file\n *\n * Path related fields are set in the following order (least specific to\n * most specific): `history`, `path`, `basename`, `stem`, `extname`,\n * `dirname`.\n *\n * You cannot set `dirname` or `extname` without setting either `history`,\n * `path`, `basename`, or `stem` too.\n *\n * @param {Compatible | null | undefined} [value]\n * File value.\n * @returns\n * New instance.\n */\n constructor(value) {\n /** @type {Options | VFile} */\n let options\n\n if (!value) {\n options = {}\n } else if (isUrl(value)) {\n options = {path: value}\n } else if (typeof value === 'string' || isUint8Array(value)) {\n options = {value}\n } else {\n options = value\n }\n\n /* eslint-disable no-unused-expressions */\n\n /**\n * Base of `path` (default: `process.cwd()` or `'/'` in browsers).\n *\n * @type {string}\n */\n // Prevent calling `cwd` (which could be expensive) if it’s not needed;\n // the empty string will be overridden in the next block.\n this.cwd = 'cwd' in options ? '' : minproc.cwd()\n\n /**\n * Place to store custom info (default: `{}`).\n *\n * It’s OK to store custom data directly on the file but moving it to\n * `data` is recommended.\n *\n * @type {Data}\n */\n this.data = {}\n\n /**\n * List of file paths the file moved between.\n *\n * The first is the original path and the last is the current path.\n *\n * @type {Array<string>}\n */\n this.history = []\n\n /**\n * List of messages associated with the file.\n *\n * @type {Array<VFileMessage>}\n */\n this.messages = []\n\n /**\n * Raw value.\n *\n * @type {Value}\n */\n this.value\n\n // The below are non-standard, they are “well-known”.\n // As in, used in several tools.\n /**\n * Source map.\n *\n * This type is equivalent to the `RawSourceMap` type from the `source-map`\n * module.\n *\n * @type {Map | null | undefined}\n */\n this.map\n\n /**\n * Custom, non-string, compiled, representation.\n *\n * This is used by unified to store non-string results.\n * One example is when turning markdown into React nodes.\n *\n * @type {unknown}\n */\n this.result\n\n /**\n * Whether a file was saved to disk.\n *\n * This is used by vfile reporters.\n *\n * @type {boolean}\n */\n this.stored\n /* eslint-enable no-unused-expressions */\n\n // Set path related properties in the correct order.\n let index = -1\n\n while (++index < order.length) {\n const field = order[index]\n\n // Note: we specifically use `in` instead of `hasOwnProperty` to accept\n // `vfile`s too.\n if (\n field in options &&\n options[field] !== undefined &&\n options[field] !== null\n ) {\n // @ts-expect-error: TS doesn’t understand basic reality.\n this[field] = field === 'history' ? [...options[field]] : options[field]\n }\n }\n\n /** @type {string} */\n let field\n\n // Set non-path related properties.\n for (field in options) {\n // @ts-expect-error: fine to set other things.\n if (!order.includes(field)) {\n // @ts-expect-error: fine to set other things.\n this[field] = options[field]\n }\n }\n }\n\n /**\n * Get the basename (including extname) (example: `'index.min.js'`).\n *\n * @returns {string | undefined}\n * Basename.\n */\n get basename() {\n return typeof this.path === 'string'\n ? minpath.basename(this.path)\n : undefined\n }\n\n /**\n * Set basename (including extname) (`'index.min.js'`).\n *\n * Cannot contain path separators (`'/'` on unix, macOS, and browsers, `'\\'`\n * on windows).\n * Cannot be nullified (use `file.path = file.dirname` instead).\n *\n * @param {string} basename\n * Basename.\n * @returns {undefined}\n * Nothing.\n */\n set basename(basename) {\n assertNonEmpty(basename, 'basename')\n assertPart(basename, 'basename')\n this.path = minpath.join(this.dirname || '', basename)\n }\n\n /**\n * Get the parent path (example: `'~'`).\n *\n * @returns {string | undefined}\n * Dirname.\n */\n get dirname() {\n return typeof this.path === 'string'\n ? minpath.dirname(this.path)\n : undefined\n }\n\n /**\n * Set the parent path (example: `'~'`).\n *\n * Cannot be set if there’s no `path` yet.\n *\n * @param {string | undefined} dirname\n * Dirname.\n * @returns {undefined}\n * Nothing.\n */\n set dirname(dirname) {\n assertPath(this.basename, 'dirname')\n this.path = minpath.join(dirname || '', this.basename)\n }\n\n /**\n * Get the extname (including dot) (example: `'.js'`).\n *\n * @returns {string | undefined}\n * Extname.\n */\n get extname() {\n return typeof this.path === 'string'\n ? minpath.extname(this.path)\n : undefined\n }\n\n /**\n * Set the extname (including dot) (example: `'.js'`).\n *\n * Cannot contain path separators (`'/'` on unix, macOS, and browsers, `'\\'`\n * on windows).\n * Cannot be set if there’s no `path` yet.\n *\n * @param {string | undefined} extname\n * Extname.\n * @returns {undefined}\n * Nothing.\n */\n set extname(extname) {\n assertPart(extname, 'extname')\n assertPath(this.dirname, 'extname')\n\n if (extname) {\n if (extname.codePointAt(0) !== 46 /* `.` */) {\n throw new Error('`extname` must start with `.`')\n }\n\n if (extname.includes('.', 1)) {\n throw new Error('`extname` cannot contain multiple dots')\n }\n }\n\n this.path = minpath.join(this.dirname, this.stem + (extname || ''))\n }\n\n /**\n * Get the full path (example: `'~/index.min.js'`).\n *\n * @returns {string}\n * Path.\n */\n get path() {\n return this.history[this.history.length - 1]\n }\n\n /**\n * Set the full path (example: `'~/index.min.js'`).\n *\n * Cannot be nullified.\n * You can set a file URL (a `URL` object with a `file:` protocol) which will\n * be turned into a path with `url.fileURLToPath`.\n *\n * @param {URL | string} path\n * Path.\n * @returns {undefined}\n * Nothing.\n */\n set path(path) {\n if (isUrl(path)) {\n path = urlToPath(path)\n }\n\n assertNonEmpty(path, 'path')\n\n if (this.path !== path) {\n this.history.push(path)\n }\n }\n\n /**\n * Get the stem (basename w/o extname) (example: `'index.min'`).\n *\n * @returns {string | undefined}\n * Stem.\n */\n get stem() {\n return typeof this.path === 'string'\n ? minpath.basename(this.path, this.extname)\n : undefined\n }\n\n /**\n * Set the stem (basename w/o extname) (example: `'index.min'`).\n *\n * Cannot contain path separators (`'/'` on unix, macOS, and browsers, `'\\'`\n * on windows).\n * Cannot be nullified (use `file.path = file.dirname` instead).\n *\n * @param {string} stem\n * Stem.\n * @returns {undefined}\n * Nothing.\n */\n set stem(stem) {\n assertNonEmpty(stem, 'stem')\n assertPart(stem, 'stem')\n this.path = minpath.join(this.dirname || '', stem + (this.extname || ''))\n }\n\n // Normal prototypal methods.\n /**\n * Create a fatal message for `reason` associated with the file.\n *\n * The `fatal` field of the message is set to `true` (error; file not usable)\n * and the `file` field is set to the current file path.\n * The message is added to the `messages` field on `file`.\n *\n * > 🪦 **Note**: also has obsolete signatures.\n *\n * @overload\n * @param {string} reason\n * @param {MessageOptions | null | undefined} [options]\n * @returns {never}\n *\n * @overload\n * @param {string} reason\n * @param {Node | NodeLike | null | undefined} parent\n * @param {string | null | undefined} [origin]\n * @returns {never}\n *\n * @overload\n * @param {string} reason\n * @param {Point | Position | null | undefined} place\n * @param {string | null | undefined} [origin]\n * @returns {never}\n *\n * @overload\n * @param {string} reason\n * @param {string | null | undefined} [origin]\n * @returns {never}\n *\n * @overload\n * @param {Error | VFileMessage} cause\n * @param {Node | NodeLike | null | undefined} parent\n * @param {string | null | undefined} [origin]\n * @returns {never}\n *\n * @overload\n * @param {Error | VFileMessage} cause\n * @param {Point | Position | null | undefined} place\n * @param {string | null | undefined} [origin]\n * @returns {never}\n *\n * @overload\n * @param {Error | VFileMessage} cause\n * @param {string | null | undefined} [origin]\n * @returns {never}\n *\n * @param {Error | VFileMessage | string} causeOrReason\n * Reason for message, should use markdown.\n * @param {Node | NodeLike | MessageOptions | Point | Position | string | null | undefined} [optionsOrParentOrPlace]\n * Configuration (optional).\n * @param {string | null | undefined} [origin]\n * Place in code where the message originates (example:\n * `'my-package:my-rule'` or `'my-rule'`).\n * @returns {never}\n * Never.\n * @throws {VFileMessage}\n * Message.\n */\n fail(causeOrReason, optionsOrParentOrPlace, origin) {\n // @ts-expect-error: the overloads are fine.\n const message = this.message(causeOrReason, optionsOrParentOrPlace, origin)\n\n message.fatal = true\n\n throw message\n }\n\n /**\n * Create an info message for `reason` associated with the file.\n *\n * The `fatal` field of the message is set to `undefined` (info; change\n * likely not needed) and the `file` field is set to the current file path.\n * The message is added to the `messages` field on `file`.\n *\n * > 🪦 **Note**: also has obsolete signatures.\n *\n * @overload\n * @param {string} reason\n * @param {MessageOptions | null | undefined} [options]\n * @returns {VFileMessage}\n *\n * @overload\n * @param {string} reason\n * @param {Node | NodeLike | null | undefined} parent\n * @param {string | null | undefined} [origin]\n * @returns {VFileMessage}\n *\n * @overload\n * @param {string} reason\n * @param {Point | Position | null | undefined} place\n * @param {string | null | undefined} [origin]\n * @returns {VFileMessage}\n *\n * @overload\n * @param {string} reason\n * @param {string | null | undefined} [origin]\n * @returns {VFileMessage}\n *\n * @overload\n * @param {Error | VFileMessage} cause\n * @param {Node | NodeLike | null | undefined} parent\n * @param {string | null | undefined} [origin]\n * @returns {VFileMessage}\n *\n * @overload\n * @param {Error | VFileMessage} cause\n * @param {Point | Position | null | undefined} place\n * @param {string | null | undefined} [origin]\n * @returns {VFileMessage}\n *\n * @overload\n * @param {Error | VFileMessage} cause\n * @param {string | null | undefined} [origin]\n * @returns {VFileMessage}\n *\n * @param {Error | VFileMessage | string} causeOrReason\n * Reason for message, should use markdown.\n * @param {Node | NodeLike | MessageOptions | Point | Position | string | null | undefined} [optionsOrParentOrPlace]\n * Configuration (optional).\n * @param {string | null | undefined} [origin]\n * Place in code where the message originates (example:\n * `'my-package:my-rule'` or `'my-rule'`).\n * @returns {VFileMessage}\n * Message.\n */\n info(causeOrReason, optionsOrParentOrPlace, origin) {\n // @ts-expect-error: the overloads are fine.\n const message = this.message(causeOrReason, optionsOrParentOrPlace, origin)\n\n message.fatal = undefined\n\n return message\n }\n\n /**\n * Create a message for `reason` associated with the file.\n *\n * The `fatal` field of the message is set to `false` (warning; change may be\n * needed) and the `file` field is set to the current file path.\n * The message is added to the `messages` field on `file`.\n *\n * > 🪦 **Note**: also has obsolete signatures.\n *\n * @overload\n * @param {string} reason\n * @param {MessageOptions | null | undefined} [options]\n * @returns {VFileMessage}\n *\n * @overload\n * @param {string} reason\n * @param {Node | NodeLike | null | undefined} parent\n * @param {string | null | undefined} [origin]\n * @returns {VFileMessage}\n *\n * @overload\n * @param {string} reason\n * @param {Point | Position | null | undefined} place\n * @param {string | null | undefined} [origin]\n * @returns {VFileMessage}\n *\n * @overload\n * @param {string} reason\n * @param {string | null | undefined} [origin]\n * @returns {VFileMessage}\n *\n * @overload\n * @param {Error | VFileMessage} cause\n * @param {Node | NodeLike | null | undefined} parent\n * @param {string | null | undefined} [origin]\n * @returns {VFileMessage}\n *\n * @overload\n * @param {Error | VFileMessage} cause\n * @param {Point | Position | null | undefined} place\n * @param {string | null | undefined} [origin]\n * @returns {VFileMessage}\n *\n * @overload\n * @param {Error | VFileMessage} cause\n * @param {string | null | undefined} [origin]\n * @returns {VFileMessage}\n *\n * @param {Error | VFileMessage | string} causeOrReason\n * Reason for message, should use markdown.\n * @param {Node | NodeLike | MessageOptions | Point | Position | string | null | undefined} [optionsOrParentOrPlace]\n * Configuration (optional).\n * @param {string | null | undefined} [origin]\n * Place in code where the message originates (example:\n * `'my-package:my-rule'` or `'my-rule'`).\n * @returns {VFileMessage}\n * Message.\n */\n message(causeOrReason, optionsOrParentOrPlace, origin) {\n const message = new VFileMessage(\n // @ts-expect-error: the overloads are fine.\n causeOrReason,\n optionsOrParentOrPlace,\n origin\n )\n\n if (this.path) {\n message.name = this.path + ':' + message.name\n message.file = this.path\n }\n\n message.fatal = false\n\n this.messages.push(message)\n\n return message\n }\n\n /**\n * Serialize the file.\n *\n * > **Note**: which encodings are supported depends on the engine.\n * > For info on Node.js, see:\n * > <https://nodejs.org/api/util.html#whatwg-supported-encodings>.\n *\n * @param {string | null | undefined} [encoding='utf8']\n * Character encoding to understand `value` as when it’s a `Uint8Array`\n * (default: `'utf-8'`).\n * @returns {string}\n * Serialized file.\n */\n toString(encoding) {\n if (this.value === undefined) {\n return ''\n }\n\n if (typeof this.value === 'string') {\n return this.value\n }\n\n const decoder = new TextDecoder(encoding || undefined)\n return decoder.decode(this.value)\n }\n}\n\n/**\n * Assert that `part` is not a path (as in, does not contain `path.sep`).\n *\n * @param {string | null | undefined} part\n * File path part.\n * @param {string} name\n * Part name.\n * @returns {undefined}\n * Nothing.\n */\nfunction assertPart(part, name) {\n if (part && part.includes(minpath.sep)) {\n throw new Error(\n '`' + name + '` cannot be a path: did not expect `' + minpath.sep + '`'\n )\n }\n}\n\n/**\n * Assert that `part` is not empty.\n *\n * @param {string | undefined} part\n * Thing.\n * @param {string} name\n * Part name.\n * @returns {asserts part is string}\n * Nothing.\n */\nfunction assertNonEmpty(part, name) {\n if (!part) {\n throw new Error('`' + name + '` cannot be empty')\n }\n}\n\n/**\n * Assert `path` exists.\n *\n * @param {string | undefined} path\n * Path.\n * @param {string} name\n * Dependency name.\n * @returns {asserts path is string}\n * Nothing.\n */\nfunction assertPath(path, name) {\n if (!path) {\n throw new Error('Setting `' + name + '` requires `path` to be set too')\n }\n}\n\n/**\n * Assert `value` is an `Uint8Array`.\n *\n * @param {unknown} value\n * thing.\n * @returns {value is Uint8Array}\n * Whether `value` is an `Uint8Array`.\n */\nfunction isUint8Array(value) {\n return Boolean(\n value &&\n typeof value === 'object' &&\n 'byteLength' in value &&\n 'byteOffset' in value\n )\n}\n","export const CallableInstance =\n /**\n * @type {new <Parameters extends Array<unknown>, Result>(property: string | symbol) => (...parameters: Parameters) => Result}\n */\n (\n /** @type {unknown} */\n (\n /**\n * @this {Function}\n * @param {string | symbol} property\n * @returns {(...parameters: Array<unknown>) => unknown}\n */\n function (property) {\n const self = this\n const constr = self.constructor\n const proto = /** @type {Record<string | symbol, Function>} */ (\n // Prototypes do exist.\n // type-coverage:ignore-next-line\n constr.prototype\n )\n const value = proto[property]\n /** @type {(...parameters: Array<unknown>) => unknown} */\n const apply = function () {\n return value.apply(apply, arguments)\n }\n\n Object.setPrototypeOf(apply, proto)\n\n // Not needed for us in `unified`: we only call this on the `copy`\n // function,\n // and we don't need to add its fields (`length`, `name`)\n // over.\n // See also: GH-246.\n // const names = Object.getOwnPropertyNames(value)\n //\n // for (const p of names) {\n // const descriptor = Object.getOwnPropertyDescriptor(value, p)\n // if (descriptor) Object.defineProperty(apply, p, descriptor)\n // }\n\n return apply\n }\n )\n )\n","/**\n * @typedef {import('trough').Pipeline} Pipeline\n *\n * @typedef {import('unist').Node} Node\n *\n * @typedef {import('vfile').Compatible} Compatible\n * @typedef {import('vfile').Value} Value\n *\n * @typedef {import('../index.js').CompileResultMap} CompileResultMap\n * @typedef {import('../index.js').Data} Data\n * @typedef {import('../index.js').Settings} Settings\n */\n\n/**\n * @typedef {CompileResultMap[keyof CompileResultMap]} CompileResults\n * Acceptable results from compilers.\n *\n * To register custom results, add them to\n * {@linkcode CompileResultMap}.\n */\n\n/**\n * @template {Node} [Tree=Node]\n * The node that the compiler receives (default: `Node`).\n * @template {CompileResults} [Result=CompileResults]\n * The thing that the compiler yields (default: `CompileResults`).\n * @callback Compiler\n * A **compiler** handles the compiling of a syntax tree to something else\n * (in most cases, text) (TypeScript type).\n *\n * It is used in the stringify phase and called with a {@linkcode Node}\n * and {@linkcode VFile} representation of the document to compile.\n * It should return the textual representation of the given tree (typically\n * `string`).\n *\n * > **Note**: unified typically compiles by serializing: most compilers\n * > return `string` (or `Uint8Array`).\n * > Some compilers, such as the one configured with\n * > [`rehype-react`][rehype-react], return other values (in this case, a\n * > React tree).\n * > If you’re using a compiler that doesn’t serialize, expect different\n * > result values.\n * >\n * > To register custom results in TypeScript, add them to\n * > {@linkcode CompileResultMap}.\n *\n * [rehype-react]: https://github.com/rehypejs/rehype-react\n * @param {Tree} tree\n * Tree to compile.\n * @param {VFile} file\n * File associated with `tree`.\n * @returns {Result}\n * New content: compiled text (`string` or `Uint8Array`, for `file.value`) or\n * something else (for `file.result`).\n */\n\n/**\n * @template {Node} [Tree=Node]\n * The node that the parser yields (default: `Node`)\n * @callback Parser\n * A **parser** handles the parsing of text to a syntax tree.\n *\n * It is used in the parse phase and is called with a `string` and\n * {@linkcode VFile} of the document to parse.\n * It must return the syntax tree representation of the given file\n * ({@linkcode Node}).\n * @param {string} document\n * Document to parse.\n * @param {VFile} file\n * File associated with `document`.\n * @returns {Tree}\n * Node representing the given file.\n */\n\n/**\n * @typedef {(\n * Plugin<Array<any>, any, any> |\n * PluginTuple<Array<any>, any, any> |\n * Preset\n * )} Pluggable\n * Union of the different ways to add plugins and settings.\n */\n\n/**\n * @typedef {Array<Pluggable>} PluggableList\n * List of plugins and presets.\n */\n\n// Note: we can’t use `callback` yet as it messes up `this`:\n// <https://github.com/microsoft/TypeScript/issues/55197>.\n/**\n * @template {Array<unknown>} [PluginParameters=[]]\n * Arguments passed to the plugin (default: `[]`, the empty tuple).\n * @template {Node | string | undefined} [Input=Node]\n * Value that is expected as input (default: `Node`).\n *\n * * If the plugin returns a {@linkcode Transformer}, this\n * should be the node it expects.\n * * If the plugin sets a {@linkcode Parser}, this should be\n * `string`.\n * * If the plugin sets a {@linkcode Compiler}, this should be the\n * node it expects.\n * @template [Output=Input]\n * Value that is yielded as output (default: `Input`).\n *\n * * If the plugin returns a {@linkcode Transformer}, this\n * should be the node that that yields.\n * * If the plugin sets a {@linkcode Parser}, this should be the\n * node that it yields.\n * * If the plugin sets a {@linkcode Compiler}, this should be\n * result it yields.\n * @typedef {(\n * (this: Processor, ...parameters: PluginParameters) =>\n * Input extends string ? // Parser.\n * Output extends Node | undefined ? undefined | void : never :\n * Output extends CompileResults ? // Compiler.\n * Input extends Node | undefined ? undefined | void : never :\n * Transformer<\n * Input extends Node ? Input : Node,\n * Output extends Node ? Output : Node\n * > | undefined | void\n * )} Plugin\n * Single plugin.\n *\n * Plugins configure the processors they are applied on in the following\n * ways:\n *\n * * they change the processor, such as the parser, the compiler, or by\n * configuring data\n * * they specify how to handle trees and files\n *\n * In practice, they are functions that can receive options and configure the\n * processor (`this`).\n *\n * > **Note**: plugins are called when the processor is *frozen*, not when\n * > they are applied.\n */\n\n/**\n * Tuple of a plugin and its configuration.\n *\n * The first item is a plugin, the rest are its parameters.\n *\n * @template {Array<unknown>} [TupleParameters=[]]\n * Arguments passed to the plugin (default: `[]`, the empty tuple).\n * @template {Node | string | undefined} [Input=undefined]\n * Value that is expected as input (optional).\n *\n * * If the plugin returns a {@linkcode Transformer}, this\n * should be the node it expects.\n * * If the plugin sets a {@linkcode Parser}, this should be\n * `string`.\n * * If the plugin sets a {@linkcode Compiler}, this should be the\n * node it expects.\n * @template [Output=undefined] (optional).\n * Value that is yielded as output.\n *\n * * If the plugin returns a {@linkcode Transformer}, this\n * should be the node that that yields.\n * * If the plugin sets a {@linkcode Parser}, this should be the\n * node that it yields.\n * * If the plugin sets a {@linkcode Compiler}, this should be\n * result it yields.\n * @typedef {(\n * [\n * plugin: Plugin<TupleParameters, Input, Output>,\n * ...parameters: TupleParameters\n * ]\n * )} PluginTuple\n */\n\n/**\n * @typedef Preset\n * Sharable configuration.\n *\n * They can contain plugins and settings.\n * @property {PluggableList | undefined} [plugins]\n * List of plugins and presets (optional).\n * @property {Settings | undefined} [settings]\n * Shared settings for parsers and compilers (optional).\n */\n\n/**\n * @template {VFile} [File=VFile]\n * The file that the callback receives (default: `VFile`).\n * @callback ProcessCallback\n * Callback called when the process is done.\n *\n * Called with either an error or a result.\n * @param {Error | undefined} [error]\n * Fatal error (optional).\n * @param {File | undefined} [file]\n * Processed file (optional).\n * @returns {undefined}\n * Nothing.\n */\n\n/**\n * @template {Node} [Tree=Node]\n * The tree that the callback receives (default: `Node`).\n * @callback RunCallback\n * Callback called when transformers are done.\n *\n * Called with either an error or results.\n * @param {Error | undefined} [error]\n * Fatal error (optional).\n * @param {Tree | undefined} [tree]\n * Transformed tree (optional).\n * @param {VFile | undefined} [file]\n * File (optional).\n * @returns {undefined}\n * Nothing.\n */\n\n/**\n * @template {Node} [Output=Node]\n * Node type that the transformer yields (default: `Node`).\n * @callback TransformCallback\n * Callback passed to transforms.\n *\n * If the signature of a `transformer` accepts a third argument, the\n * transformer may perform asynchronous operations, and must call it.\n * @param {Error | undefined} [error]\n * Fatal error to stop the process (optional).\n * @param {Output | undefined} [tree]\n * New, changed, tree (optional).\n * @param {VFile | undefined} [file]\n * New, changed, file (optional).\n * @returns {undefined}\n * Nothing.\n */\n\n/**\n * @template {Node} [Input=Node]\n * Node type that the transformer expects (default: `Node`).\n * @template {Node} [Output=Input]\n * Node type that the transformer yields (default: `Input`).\n * @callback Transformer\n * Transformers handle syntax trees and files.\n *\n * They are functions that are called each time a syntax tree and file are\n * passed through the run phase.\n * When an error occurs in them (either because it’s thrown, returned,\n * rejected, or passed to `next`), the process stops.\n *\n * The run phase is handled by [`trough`][trough], see its documentation for\n * the exact semantics of these functions.\n *\n * > **Note**: you should likely ignore `next`: don’t accept it.\n * > it supports callback-style async work.\n * > But promises are likely easier to reason about.\n *\n * [trough]: https://github.com/wooorm/trough#function-fninput-next\n * @param {Input} tree\n * Tree to handle.\n * @param {VFile} file\n * File to handle.\n * @param {TransformCallback<Output>} next\n * Callback.\n * @returns {(\n * Promise<Output | undefined | void> |\n * Promise<never> | // For some reason this is needed separately.\n * Output |\n * Error |\n * undefined |\n * void\n * )}\n * If you accept `next`, nothing.\n * Otherwise:\n *\n * * `Error` — fatal error to stop the process\n * * `Promise<undefined>` or `undefined` — the next transformer keeps using\n * same tree\n * * `Promise<Node>` or `Node` — new, changed, tree\n */\n\n/**\n * @template {Node | undefined} ParseTree\n * Output of `parse`.\n * @template {Node | undefined} HeadTree\n * Input for `run`.\n * @template {Node | undefined} TailTree\n * Output for `run`.\n * @template {Node | undefined} CompileTree\n * Input of `stringify`.\n * @template {CompileResults | undefined} CompileResult\n * Output of `stringify`.\n * @template {Node | string | undefined} Input\n * Input of plugin.\n * @template Output\n * Output of plugin (optional).\n * @typedef {(\n * Input extends string\n * ? Output extends Node | undefined\n * ? // Parser.\n * Processor<\n * Output extends undefined ? ParseTree : Output,\n * HeadTree,\n * TailTree,\n * CompileTree,\n * CompileResult\n * >\n * : // Unknown.\n * Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>\n * : Output extends CompileResults\n * ? Input extends Node | undefined\n * ? // Compiler.\n * Processor<\n * ParseTree,\n * HeadTree,\n * TailTree,\n * Input extends undefined ? CompileTree : Input,\n * Output extends undefined ? CompileResult : Output\n * >\n * : // Unknown.\n * Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>\n * : Input extends Node | undefined\n * ? Output extends Node | undefined\n * ? // Transform.\n * Processor<\n * ParseTree,\n * HeadTree extends undefined ? Input : HeadTree,\n * Output extends undefined ? TailTree : Output,\n * CompileTree,\n * CompileResult\n * >\n * : // Unknown.\n * Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>\n * : // Unknown.\n * Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>\n * )} UsePlugin\n * Create a processor based on the input/output of a {@link Plugin plugin}.\n */\n\n/**\n * @template {CompileResults | undefined} Result\n * Node type that the transformer yields.\n * @typedef {(\n * Result extends Value | undefined ?\n * VFile :\n * VFile & {result: Result}\n * )} VFileWithOutput\n * Type to generate a {@linkcode VFile} corresponding to a compiler result.\n *\n * If a result that is not acceptable on a `VFile` is used, that will\n * be stored on the `result` field of {@linkcode VFile}.\n */\n\nimport {bail} from 'bail'\nimport extend from 'extend'\nimport {ok as assert} from 'devlop'\nimport isPlainObj from 'is-plain-obj'\nimport {trough} from 'trough'\nimport {VFile} from 'vfile'\nimport {CallableInstance} from './callable-instance.js'\n\n// To do: next major: drop `Compiler`, `Parser`: prefer lowercase.\n\n// To do: we could start yielding `never` in TS when a parser is missing and\n// `parse` is called.\n// Currently, we allow directly setting `processor.parser`, which is untyped.\n\nconst own = {}.hasOwnProperty\n\n/**\n * @template {Node | undefined} [ParseTree=undefined]\n * Output of `parse` (optional).\n * @template {Node | undefined} [HeadTree=undefined]\n * Input for `run` (optional).\n * @template {Node | undefined} [TailTree=undefined]\n * Output for `run` (optional).\n * @template {Node | undefined} [CompileTree=undefined]\n * Input of `stringify` (optional).\n * @template {CompileResults | undefined} [CompileResult=undefined]\n * Output of `stringify` (optional).\n * @extends {CallableInstance<[], Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>>}\n */\nexport class Processor extends CallableInstance {\n /**\n * Create a processor.\n */\n constructor() {\n // If `Processor()` is called (w/o new), `copy` is called instead.\n super('copy')\n\n /**\n * Compiler to use (deprecated).\n *\n * @deprecated\n * Use `compiler` instead.\n * @type {(\n * Compiler<\n * CompileTree extends undefined ? Node : CompileTree,\n * CompileResult extends undefined ? CompileResults : CompileResult\n * > |\n * undefined\n * )}\n */\n this.Compiler = undefined\n\n /**\n * Parser to use (deprecated).\n *\n * @deprecated\n * Use `parser` instead.\n * @type {(\n * Parser<ParseTree extends undefined ? Node : ParseTree> |\n * undefined\n * )}\n */\n this.Parser = undefined\n\n // Note: the following fields are considered private.\n // However, they are needed for tests, and TSC generates an untyped\n // `private freezeIndex` field for, which trips `type-coverage` up.\n // Instead, we use `@deprecated` to visualize that they shouldn’t be used.\n /**\n * Internal list of configured plugins.\n *\n * @deprecated\n * This is a private internal property and should not be used.\n * @type {Array<PluginTuple<Array<unknown>>>}\n */\n this.attachers = []\n\n /**\n * Compiler to use.\n *\n * @type {(\n * Compiler<\n * CompileTree extends undefined ? Node : CompileTree,\n * CompileResult extends undefined ? CompileResults : CompileResult\n * > |\n * undefined\n * )}\n */\n this.compiler = undefined\n\n /**\n * Internal state to track where we are while freezing.\n *\n * @deprecated\n * This is a private internal property and should not be used.\n * @type {number}\n */\n this.freezeIndex = -1\n\n /**\n * Internal state to track whether we’re frozen.\n *\n * @deprecated\n * This is a private internal property and should not be used.\n * @type {boolean | undefined}\n */\n this.frozen = undefined\n\n /**\n * Internal state.\n *\n * @deprecated\n * This is a private internal property and should not be used.\n * @type {Data}\n */\n this.namespace = {}\n\n /**\n * Parser to use.\n *\n * @type {(\n * Parser<ParseTree extends undefined ? Node : ParseTree> |\n * undefined\n * )}\n */\n this.parser = undefined\n\n /**\n * Internal list of configured transformers.\n *\n * @deprecated\n * This is a private internal property and should not be used.\n * @type {Pipeline}\n */\n this.transformers = trough()\n }\n\n /**\n * Copy a processor.\n *\n * @deprecated\n * This is a private internal method and should not be used.\n * @returns {Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>}\n * New *unfrozen* processor ({@linkcode Processor}) that is\n * configured to work the same as its ancestor.\n * When the descendant processor is configured in the future it does not\n * affect the ancestral processor.\n */\n copy() {\n // Cast as the type parameters will be the same after attaching.\n const destination =\n /** @type {Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>} */ (\n new Processor()\n )\n let index = -1\n\n while (++index < this.attachers.length) {\n const attacher = this.attachers[index]\n destination.use(...attacher)\n }\n\n destination.data(extend(true, {}, this.namespace))\n\n return destination\n }\n\n /**\n * Configure the processor with info available to all plugins.\n * Information is stored in an object.\n *\n * Typically, options can be given to a specific plugin, but sometimes it\n * makes sense to have information shared with several plugins.\n * For example, a list of HTML elements that are self-closing, which is\n * needed during all phases.\n *\n * > **Note**: setting information cannot occur on *frozen* processors.\n * > Call the processor first to create a new unfrozen processor.\n *\n * > **Note**: to register custom data in TypeScript, augment the\n * > {@linkcode Data} interface.\n *\n * @example\n * This example show how to get and set info:\n *\n * ```js\n * import {unified} from 'unified'\n *\n * const processor = unified().data('alpha', 'bravo')\n *\n * processor.data('alpha') // => 'bravo'\n *\n * processor.data() // => {alpha: 'bravo'}\n *\n * processor.data({charlie: 'delta'})\n *\n * processor.data() // => {charlie: 'delta'}\n * ```\n *\n * @template {keyof Data} Key\n *\n * @overload\n * @returns {Data}\n *\n * @overload\n * @param {Data} dataset\n * @returns {Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>}\n *\n * @overload\n * @param {Key} key\n * @returns {Data[Key]}\n *\n * @overload\n * @param {Key} key\n * @param {Data[Key]} value\n * @returns {Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>}\n *\n * @param {Data | Key} [key]\n * Key to get or set, or entire dataset to set, or nothing to get the\n * entire dataset (optional).\n * @param {Data[Key]} [value]\n * Value to set (optional).\n * @returns {unknown}\n * The current processor when setting, the value at `key` when getting, or\n * the entire dataset when getting without key.\n */\n data(key, value) {\n if (typeof key === 'string') {\n // Set `key`.\n if (arguments.length === 2) {\n assertUnfrozen('data', this.frozen)\n this.namespace[key] = value\n return this\n }\n\n // Get `key`.\n return (own.call(this.namespace, key) && this.namespace[key]) || undefined\n }\n\n // Set space.\n if (key) {\n assertUnfrozen('data', this.frozen)\n this.namespace = key\n return this\n }\n\n // Get space.\n return this.namespace\n }\n\n /**\n * Freeze a processor.\n *\n * Frozen processors are meant to be extended and not to be configured\n * directly.\n *\n * When a processor is frozen it cannot be unfrozen.\n * New processors working the same way can be created by calling the\n * processor.\n *\n * It’s possible to freeze processors explicitly by calling `.freeze()`.\n * Processors freeze automatically when `.parse()`, `.run()`, `.runSync()`,\n * `.stringify()`, `.process()`, or `.processSync()` are called.\n *\n * @returns {Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>}\n * The current processor.\n */\n freeze() {\n if (this.frozen) {\n return this\n }\n\n // Cast so that we can type plugins easier.\n // Plugins are supposed to be usable on different processors, not just on\n // this exact processor.\n const self = /** @type {Processor} */ (/** @type {unknown} */ (this))\n\n while (++this.freezeIndex < this.attachers.length) {\n const [attacher, ...options] = this.attachers[this.freezeIndex]\n\n if (options[0] === false) {\n continue\n }\n\n if (options[0] === true) {\n options[0] = undefined\n }\n\n const transformer = attacher.call(self, ...options)\n\n if (typeof transformer === 'function') {\n this.transformers.use(transformer)\n }\n }\n\n this.frozen = true\n this.freezeIndex = Number.POSITIVE_INFINITY\n\n return this\n }\n\n /**\n * Parse text to a syntax tree.\n *\n * > **Note**: `parse` freezes the processor if not already *frozen*.\n *\n * > **Note**: `parse` performs the parse phase, not the run phase or other\n * > phases.\n *\n * @param {Compatible | undefined} [file]\n * file to parse (optional); typically `string` or `VFile`; any value\n * accepted as `x` in `new VFile(x)`.\n * @returns {ParseTree extends undefined ? Node : ParseTree}\n * Syntax tree representing `file`.\n */\n parse(file) {\n this.freeze()\n const realFile = vfile(file)\n const parser = this.parser || this.Parser\n assertParser('parse', parser)\n return parser(String(realFile), realFile)\n }\n\n /**\n * Process the given file as configured on the processor.\n *\n * > **Note**: `process` freezes the processor if not already *frozen*.\n *\n * > **Note**: `process` performs the parse, run, and stringify phases.\n *\n * @overload\n * @param {Compatible | undefined} file\n * @param {ProcessCallback<VFileWithOutput<CompileResult>>} done\n * @returns {undefined}\n *\n * @overload\n * @param {Compatible | undefined} [file]\n * @returns {Promise<VFileWithOutput<CompileResult>>}\n *\n * @param {Compatible | undefined} [file]\n * File (optional); typically `string` or `VFile`]; any value accepted as\n * `x` in `new VFile(x)`.\n * @param {ProcessCallback<VFileWithOutput<CompileResult>> | undefined} [done]\n * Callback (optional).\n * @returns {Promise<VFile> | undefined}\n * Nothing if `done` is given.\n * Otherwise a promise, rejected with a fatal error or resolved with the\n * processed file.\n *\n * The parsed, transformed, and compiled value is available at\n * `file.value` (see note).\n *\n * > **Note**: unified typically compiles by serializing: most\n * > compilers return `string` (or `Uint8Array`).\n * > Some compilers, such as the one configured with\n * > [`rehype-react`][rehype-react], return other values (in this case, a\n * > React tree).\n * > If you’re using a compiler that doesn’t serialize, expect different\n * > result values.\n * >\n * > To register custom results in TypeScript, add them to\n * > {@linkcode CompileResultMap}.\n *\n * [rehype-react]: https://github.com/rehypejs/rehype-react\n */\n process(file, done) {\n const self = this\n\n this.freeze()\n assertParser('process', this.parser || this.Parser)\n assertCompiler('process', this.compiler || this.Compiler)\n\n return done ? executor(undefined, done) : new Promise(executor)\n\n // Note: `void`s needed for TS.\n /**\n * @param {((file: VFileWithOutput<CompileResult>) => undefined | void) | undefined} resolve\n * @param {(error: Error | undefined) => undefined | void} reject\n * @returns {undefined}\n */\n function executor(resolve, reject) {\n const realFile = vfile(file)\n // Assume `ParseTree` (the result of the parser) matches `HeadTree` (the\n // input of the first transform).\n const parseTree =\n /** @type {HeadTree extends undefined ? Node : HeadTree} */ (\n /** @type {unknown} */ (self.parse(realFile))\n )\n\n self.run(parseTree, realFile, function (error, tree, file) {\n if (error || !tree || !file) {\n return realDone(error)\n }\n\n // Assume `TailTree` (the output of the last transform) matches\n // `CompileTree` (the input of the compiler).\n const compileTree =\n /** @type {CompileTree extends undefined ? Node : CompileTree} */ (\n /** @type {unknown} */ (tree)\n )\n\n const compileResult = self.stringify(compileTree, file)\n\n if (looksLikeAValue(compileResult)) {\n file.value = compileResult\n } else {\n file.result = compileResult\n }\n\n realDone(error, /** @type {VFileWithOutput<CompileResult>} */ (file))\n })\n\n /**\n * @param {Error | undefined} error\n * @param {VFileWithOutput<CompileResult> | undefined} [file]\n * @returns {undefined}\n */\n function realDone(error, file) {\n if (error || !file) {\n reject(error)\n } else if (resolve) {\n resolve(file)\n } else {\n assert(done, '`done` is defined if `resolve` is not')\n done(undefined, file)\n }\n }\n }\n }\n\n /**\n * Process the given file as configured on the processor.\n *\n * An error is thrown if asynchronous transforms are configured.\n *\n * > **Note**: `processSync` freezes the processor if not already *frozen*.\n *\n * > **Note**: `processSync` performs the parse, run, and stringify phases.\n *\n * @param {Compatible | undefined} [file]\n * File (optional); typically `string` or `VFile`; any value accepted as\n * `x` in `new VFile(x)`.\n * @returns {VFileWithOutput<CompileResult>}\n * The processed file.\n *\n * The parsed, transformed, and compiled value is available at\n * `file.value` (see note).\n *\n * > **Note**: unified typically compiles by serializing: most\n * > compilers return `string` (or `Uint8Array`).\n * > Some compilers, such as the one configured with\n * > [`rehype-react`][rehype-react], return other values (in this case, a\n * > React tree).\n * > If you’re using a compiler that doesn’t serialize, expect different\n * > result values.\n * >\n * > To register custom results in TypeScript, add them to\n * > {@linkcode CompileResultMap}.\n *\n * [rehype-react]: https://github.com/rehypejs/rehype-react\n */\n processSync(file) {\n /** @type {boolean} */\n let complete = false\n /** @type {VFileWithOutput<CompileResult> | undefined} */\n let result\n\n this.freeze()\n assertParser('processSync', this.parser || this.Parser)\n assertCompiler('processSync', this.compiler || this.Compiler)\n\n this.process(file, realDone)\n assertDone('processSync', 'process', complete)\n assert(result, 'we either bailed on an error or have a tree')\n\n return result\n\n /**\n * @type {ProcessCallback<VFileWithOutput<CompileResult>>}\n */\n function realDone(error, file) {\n complete = true\n bail(error)\n result = file\n }\n }\n\n /**\n * Run *transformers* on a syntax tree.\n *\n * > **Note**: `run` freezes the processor if not already *frozen*.\n *\n * > **Note**: `run` performs the run phase, not other phases.\n *\n * @overload\n * @param {HeadTree extends undefined ? Node : HeadTree} tree\n * @param {RunCallback<TailTree extends undefined ? Node : TailTree>} done\n * @returns {undefined}\n *\n * @overload\n * @param {HeadTree extends undefined ? Node : HeadTree} tree\n * @param {Compatible | undefined} file\n * @param {RunCallback<TailTree extends undefined ? Node : TailTree>} done\n * @returns {undefined}\n *\n * @overload\n * @param {HeadTree extends undefined ? Node : HeadTree} tree\n * @param {Compatible | undefined} [file]\n * @returns {Promise<TailTree extends undefined ? Node : TailTree>}\n *\n * @param {HeadTree extends undefined ? Node : HeadTree} tree\n * Tree to transform and inspect.\n * @param {(\n * RunCallback<TailTree extends undefined ? Node : TailTree> |\n * Compatible\n * )} [file]\n * File associated with `node` (optional); any value accepted as `x` in\n * `new VFile(x)`.\n * @param {RunCallback<TailTree extends undefined ? Node : TailTree>} [done]\n * Callback (optional).\n * @returns {Promise<TailTree extends undefined ? Node : TailTree> | undefined}\n * Nothing if `done` is given.\n * Otherwise, a promise rejected with a fatal error or resolved with the\n * transformed tree.\n */\n run(tree, file, done) {\n assertNode(tree)\n this.freeze()\n\n const transformers = this.transformers\n\n if (!done && typeof file === 'function') {\n done = file\n file = undefined\n }\n\n return done ? executor(undefined, done) : new Promise(executor)\n\n // Note: `void`s needed for TS.\n /**\n * @param {(\n * ((tree: TailTree extends undefined ? Node : TailTree) => undefined | void) |\n * undefined\n * )} resolve\n * @param {(error: Error) => undefined | void} reject\n * @returns {undefined}\n */\n function executor(resolve, reject) {\n assert(\n typeof file !== 'function',\n '`file` can’t be a `done` anymore, we checked'\n )\n const realFile = vfile(file)\n transformers.run(tree, realFile, realDone)\n\n /**\n * @param {Error | undefined} error\n * @param {Node} outputTree\n * @param {VFile} file\n * @returns {undefined}\n */\n function realDone(error, outputTree, file) {\n const resultingTree =\n /** @type {TailTree extends undefined ? Node : TailTree} */ (\n outputTree || tree\n )\n\n if (error) {\n reject(error)\n } else if (resolve) {\n resolve(resultingTree)\n } else {\n assert(done, '`done` is defined if `resolve` is not')\n done(undefined, resultingTree, file)\n }\n }\n }\n }\n\n /**\n * Run *transformers* on a syntax tree.\n *\n * An error is thrown if asynchronous transforms are configured.\n *\n * > **Note**: `runSync` freezes the processor if not already *frozen*.\n *\n * > **Note**: `runSync` performs the run phase, not other phases.\n *\n * @param {HeadTree extends undefined ? Node : HeadTree} tree\n * Tree to transform and inspect.\n * @param {Compatible | undefined} [file]\n * File associated with `node` (optional); any value accepted as `x` in\n * `new VFile(x)`.\n * @returns {TailTree extends undefined ? Node : TailTree}\n * Transformed tree.\n */\n runSync(tree, file) {\n /** @type {boolean} */\n let complete = false\n /** @type {(TailTree extends undefined ? Node : TailTree) | undefined} */\n let result\n\n this.run(tree, file, realDone)\n\n assertDone('runSync', 'run', complete)\n assert(result, 'we either bailed on an error or have a tree')\n return result\n\n /**\n * @type {RunCallback<TailTree extends undefined ? Node : TailTree>}\n */\n function realDone(error, tree) {\n bail(error)\n result = tree\n complete = true\n }\n }\n\n /**\n * Compile a syntax tree.\n *\n * > **Note**: `stringify` freezes the processor if not already *frozen*.\n *\n * > **Note**: `stringify` performs the stringify phase, not the run phase\n * > or other phases.\n *\n * @param {CompileTree extends undefined ? Node : CompileTree} tree\n * Tree to compile.\n * @param {Compatible | undefined} [file]\n * File associated with `node` (optional); any value accepted as `x` in\n * `new VFile(x)`.\n * @returns {CompileResult extends undefined ? Value : CompileResult}\n * Textual representation of the tree (see note).\n *\n * > **Note**: unified typically compiles by serializing: most compilers\n * > return `string` (or `Uint8Array`).\n * > Some compilers, such as the one configured with\n * > [`rehype-react`][rehype-react], return other values (in this case, a\n * > React tree).\n * > If you’re using a compiler that doesn’t serialize, expect different\n * > result values.\n * >\n * > To register custom results in TypeScript, add them to\n * > {@linkcode CompileResultMap}.\n *\n * [rehype-react]: https://github.com/rehypejs/rehype-react\n */\n stringify(tree, file) {\n this.freeze()\n const realFile = vfile(file)\n const compiler = this.compiler || this.Compiler\n assertCompiler('stringify', compiler)\n assertNode(tree)\n\n return compiler(tree, realFile)\n }\n\n /**\n * Configure the processor to use a plugin, a list of usable values, or a\n * preset.\n *\n * If the processor is already using a plugin, the previous plugin\n * configuration is changed based on the options that are passed in.\n * In other words, the plugin is not added a second time.\n *\n * > **Note**: `use` cannot be called on *frozen* processors.\n * > Call the processor first to create a new unfrozen processor.\n *\n * @example\n * There are many ways to pass plugins to `.use()`.\n * This example gives an overview:\n *\n * ```js\n * import {unified} from 'unified'\n *\n * unified()\n * // Plugin with options:\n * .use(pluginA, {x: true, y: true})\n * // Passing the same plugin again merges configuration (to `{x: true, y: false, z: true}`):\n * .use(pluginA, {y: false, z: true})\n * // Plugins:\n * .use([pluginB, pluginC])\n * // Two plugins, the second with options:\n * .use([pluginD, [pluginE, {}]])\n * // Preset with plugins and settings:\n * .use({plugins: [pluginF, [pluginG, {}]], settings: {position: false}})\n * // Settings only:\n * .use({settings: {position: false}})\n * ```\n *\n * @template {Array<unknown>} [Parameters=[]]\n * @template {Node | string | undefined} [Input=undefined]\n * @template [Output=Input]\n *\n * @overload\n * @param {Preset | null | undefined} [preset]\n * @returns {Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>}\n *\n * @overload\n * @param {PluggableList} list\n * @returns {Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>}\n *\n * @overload\n * @param {Plugin<Parameters, Input, Output>} plugin\n * @param {...(Parameters | [boolean])} parameters\n * @returns {UsePlugin<ParseTree, HeadTree, TailTree, CompileTree, CompileResult, Input, Output>}\n *\n * @param {PluggableList | Plugin | Preset | null | undefined} value\n * Usable value.\n * @param {...unknown} parameters\n * Parameters, when a plugin is given as a usable value.\n * @returns {Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>}\n * Current processor.\n */\n use(value, ...parameters) {\n const attachers = this.attachers\n const namespace = this.namespace\n\n assertUnfrozen('use', this.frozen)\n\n if (value === null || value === undefined) {\n // Empty.\n } else if (typeof value === 'function') {\n addPlugin(value, parameters)\n } else if (typeof value === 'object') {\n if (Array.isArray(value)) {\n addList(value)\n } else {\n addPreset(value)\n }\n } else {\n throw new TypeError('Expected usable value, not `' + value + '`')\n }\n\n return this\n\n /**\n * @param {Pluggable} value\n * @returns {undefined}\n */\n function add(value) {\n if (typeof value === 'function') {\n addPlugin(value, [])\n } else if (typeof value === 'object') {\n if (Array.isArray(value)) {\n const [plugin, ...parameters] =\n /** @type {PluginTuple<Array<unknown>>} */ (value)\n addPlugin(plugin, parameters)\n } else {\n addPreset(value)\n }\n } else {\n throw new TypeError('Expected usable value, not `' + value + '`')\n }\n }\n\n /**\n * @param {Preset} result\n * @returns {undefined}\n */\n function addPreset(result) {\n if (!('plugins' in result) && !('settings' in result)) {\n throw new Error(\n 'Expected usable value but received an empty preset, which is probably a mistake: presets typically come with `plugins` and sometimes with `settings`, but this has neither'\n )\n }\n\n addList(result.plugins)\n\n if (result.settings) {\n namespace.settings = extend(true, namespace.settings, result.settings)\n }\n }\n\n /**\n * @param {PluggableList | null | undefined} plugins\n * @returns {undefined}\n */\n function addList(plugins) {\n let index = -1\n\n if (plugins === null || plugins === undefined) {\n // Empty.\n } else if (Array.isArray(plugins)) {\n while (++index < plugins.length) {\n const thing = plugins[index]\n add(thing)\n }\n } else {\n throw new TypeError('Expected a list of plugins, not `' + plugins + '`')\n }\n }\n\n /**\n * @param {Plugin} plugin\n * @param {Array<unknown>} parameters\n * @returns {undefined}\n */\n function addPlugin(plugin, parameters) {\n let index = -1\n let entryIndex = -1\n\n while (++index < attachers.length) {\n if (attachers[index][0] === plugin) {\n entryIndex = index\n break\n }\n }\n\n if (entryIndex === -1) {\n attachers.push([plugin, ...parameters])\n }\n // Only set if there was at least a `primary` value, otherwise we’d change\n // `arguments.length`.\n else if (parameters.length > 0) {\n let [primary, ...rest] = parameters\n const currentPrimary = attachers[entryIndex][1]\n if (isPlainObj(currentPrimary) && isPlainObj(primary)) {\n primary = extend(true, currentPrimary, primary)\n }\n\n attachers[entryIndex] = [plugin, primary, ...rest]\n }\n }\n }\n}\n\n// Note: this returns a *callable* instance.\n// That’s why it’s documented as a function.\n/**\n * Create a new processor.\n *\n * @example\n * This example shows how a new processor can be created (from `remark`) and linked\n * to **stdin**(4) and **stdout**(4).\n *\n * ```js\n * import process from 'node:process'\n * import concatStream from 'concat-stream'\n * import {remark} from 'remark'\n *\n * process.stdin.pipe(\n * concatStream(function (buf) {\n * process.stdout.write(String(remark().processSync(buf)))\n * })\n * )\n * ```\n *\n * @returns\n * New *unfrozen* processor (`processor`).\n *\n * This processor is configured to work the same as its ancestor.\n * When the descendant processor is configured in the future it does not\n * affect the ancestral processor.\n */\nexport const unified = new Processor().freeze()\n\n/**\n * Assert a parser is available.\n *\n * @param {string} name\n * @param {unknown} value\n * @returns {asserts value is Parser}\n */\nfunction assertParser(name, value) {\n if (typeof value !== 'function') {\n throw new TypeError('Cannot `' + name + '` without `parser`')\n }\n}\n\n/**\n * Assert a compiler is available.\n *\n * @param {string} name\n * @param {unknown} value\n * @returns {asserts value is Compiler}\n */\nfunction assertCompiler(name, value) {\n if (typeof value !== 'function') {\n throw new TypeError('Cannot `' + name + '` without `compiler`')\n }\n}\n\n/**\n * Assert the processor is not frozen.\n *\n * @param {string} name\n * @param {unknown} frozen\n * @returns {asserts frozen is false}\n */\nfunction assertUnfrozen(name, frozen) {\n if (frozen) {\n throw new Error(\n 'Cannot call `' +\n name +\n '` on a frozen processor.\\nCreate a new processor first, by calling it: use `processor()` instead of `processor`.'\n )\n }\n}\n\n/**\n * Assert `node` is a unist node.\n *\n * @param {unknown} node\n * @returns {asserts node is Node}\n */\nfunction assertNode(node) {\n // `isPlainObj` unfortunately uses `any` instead of `unknown`.\n // type-coverage:ignore-next-line\n if (!isPlainObj(node) || typeof node.type !== 'string') {\n throw new TypeError('Expected node, got `' + node + '`')\n // Fine.\n }\n}\n\n/**\n * Assert that `complete` is `true`.\n *\n * @param {string} name\n * @param {string} asyncName\n * @param {unknown} complete\n * @returns {asserts complete is true}\n */\nfunction assertDone(name, asyncName, complete) {\n if (!complete) {\n throw new Error(\n '`' + name + '` finished async. Use `' + asyncName + '` instead'\n )\n }\n}\n\n/**\n * @param {Compatible | undefined} [value]\n * @returns {VFile}\n */\nfunction vfile(value) {\n return looksLikeAVFile(value) ? value : new VFile(value)\n}\n\n/**\n * @param {Compatible | undefined} [value]\n * @returns {value is VFile}\n */\nfunction looksLikeAVFile(value) {\n return Boolean(\n value &&\n typeof value === 'object' &&\n 'message' in value &&\n 'messages' in value\n )\n}\n\n/**\n * @param {unknown} [value]\n * @returns {value is Value}\n */\nfunction looksLikeAValue(value) {\n return typeof value === 'string' || isUint8Array(value)\n}\n\n/**\n * Assert `value` is an `Uint8Array`.\n *\n * @param {unknown} value\n * thing.\n * @returns {value is Uint8Array}\n * Whether `value` is an `Uint8Array`.\n */\nfunction isUint8Array(value) {\n return Boolean(\n value &&\n typeof value === 'object' &&\n 'byteLength' in value &&\n 'byteOffset' in value\n )\n}\n","// Register `Raw` in tree:\n/// <reference types=\"mdast-util-to-hast\" />\n\n/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').ElementContent} ElementContent\n * @typedef {import('hast').Nodes} Nodes\n * @typedef {import('hast').Parents} Parents\n * @typedef {import('hast').Root} Root\n * @typedef {import('hast-util-to-jsx-runtime').Components} JsxRuntimeComponents\n * @typedef {import('remark-rehype').Options} RemarkRehypeOptions\n * @typedef {import('unist-util-visit').BuildVisitor<Root>} Visitor\n * @typedef {import('unified').PluggableList} PluggableList\n */\n\n/**\n * @callback AllowElement\n * Filter elements.\n * @param {Readonly<Element>} element\n * Element to check.\n * @param {number} index\n * Index of `element` in `parent`.\n * @param {Readonly<Parents> | undefined} parent\n * Parent of `element`.\n * @returns {boolean | null | undefined}\n * Whether to allow `element` (default: `false`).\n *\n * @typedef {Partial<JsxRuntimeComponents>} Components\n * Map tag names to components.\n *\n * @typedef Deprecation\n * Deprecation.\n * @property {string} from\n * Old field.\n * @property {string} id\n * ID in readme.\n * @property {keyof Options} [to]\n * New field.\n *\n * @typedef Options\n * Configuration.\n * @property {AllowElement | null | undefined} [allowElement]\n * Filter elements (optional);\n * `allowedElements` / `disallowedElements` is used first.\n * @property {ReadonlyArray<string> | null | undefined} [allowedElements]\n * Tag names to allow (default: all tag names);\n * cannot combine w/ `disallowedElements`.\n * @property {string | null | undefined} [children]\n * Markdown.\n * @property {string | null | undefined} [className]\n * Wrap in a `div` with this class name.\n * @property {Components | null | undefined} [components]\n * Map tag names to components.\n * @property {ReadonlyArray<string> | null | undefined} [disallowedElements]\n * Tag names to disallow (default: `[]`);\n * cannot combine w/ `allowedElements`.\n * @property {PluggableList | null | undefined} [rehypePlugins]\n * List of rehype plugins to use.\n * @property {PluggableList | null | undefined} [remarkPlugins]\n * List of remark plugins to use.\n * @property {Readonly<RemarkRehypeOptions> | null | undefined} [remarkRehypeOptions]\n * Options to pass through to `remark-rehype`.\n * @property {boolean | null | undefined} [skipHtml=false]\n * Ignore HTML in markdown completely (default: `false`).\n * @property {boolean | null | undefined} [unwrapDisallowed=false]\n * Extract (unwrap) what’s in disallowed elements (default: `false`);\n * normally when say `strong` is not allowed, it and it’s children are dropped,\n * with `unwrapDisallowed` the element itself is replaced by its children.\n * @property {UrlTransform | null | undefined} [urlTransform]\n * Change URLs (default: `defaultUrlTransform`)\n *\n * @callback UrlTransform\n * Transform all URLs.\n * @param {string} url\n * URL.\n * @param {string} key\n * Property name (example: `'href'`).\n * @param {Readonly<Element>} node\n * Node.\n * @returns {string | null | undefined}\n * Transformed URL (optional).\n */\n\nimport {unreachable} from 'devlop'\nimport {toJsxRuntime} from 'hast-util-to-jsx-runtime'\nimport {urlAttributes} from 'html-url-attributes'\n// @ts-expect-error: untyped.\nimport {Fragment, jsx, jsxs} from 'react/jsx-runtime'\nimport remarkParse from 'remark-parse'\nimport remarkRehype from 'remark-rehype'\nimport {unified} from 'unified'\nimport {visit} from 'unist-util-visit'\nimport {VFile} from 'vfile'\n\nconst changelog =\n 'https://github.com/remarkjs/react-markdown/blob/main/changelog.md'\n\n/** @type {PluggableList} */\nconst emptyPlugins = []\n/** @type {Readonly<RemarkRehypeOptions>} */\nconst emptyRemarkRehypeOptions = {allowDangerousHtml: true}\nconst safeProtocol = /^(https?|ircs?|mailto|xmpp)$/i\n\n// Mutable because we `delete` any time it’s used and a message is sent.\n/** @type {ReadonlyArray<Readonly<Deprecation>>} */\nconst deprecations = [\n {from: 'astPlugins', id: 'remove-buggy-html-in-markdown-parser'},\n {from: 'allowDangerousHtml', id: 'remove-buggy-html-in-markdown-parser'},\n {\n from: 'allowNode',\n id: 'replace-allownode-allowedtypes-and-disallowedtypes',\n to: 'allowElement'\n },\n {\n from: 'allowedTypes',\n id: 'replace-allownode-allowedtypes-and-disallowedtypes',\n to: 'allowedElements'\n },\n {\n from: 'disallowedTypes',\n id: 'replace-allownode-allowedtypes-and-disallowedtypes',\n to: 'disallowedElements'\n },\n {from: 'escapeHtml', id: 'remove-buggy-html-in-markdown-parser'},\n {from: 'includeElementIndex', id: '#remove-includeelementindex'},\n {\n from: 'includeNodeIndex',\n id: 'change-includenodeindex-to-includeelementindex'\n },\n {from: 'linkTarget', id: 'remove-linktarget'},\n {from: 'plugins', id: 'change-plugins-to-remarkplugins', to: 'remarkPlugins'},\n {from: 'rawSourcePos', id: '#remove-rawsourcepos'},\n {from: 'renderers', id: 'change-renderers-to-components', to: 'components'},\n {from: 'source', id: 'change-source-to-children', to: 'children'},\n {from: 'sourcePos', id: '#remove-sourcepos'},\n {from: 'transformImageUri', id: '#add-urltransform', to: 'urlTransform'},\n {from: 'transformLinkUri', id: '#add-urltransform', to: 'urlTransform'}\n]\n\n/**\n * Component to render markdown.\n *\n * @param {Readonly<Options>} options\n * Props.\n * @returns {JSX.Element}\n * React element.\n */\nexport function Markdown(options) {\n const allowedElements = options.allowedElements\n const allowElement = options.allowElement\n const children = options.children || ''\n const className = options.className\n const components = options.components\n const disallowedElements = options.disallowedElements\n const rehypePlugins = options.rehypePlugins || emptyPlugins\n const remarkPlugins = options.remarkPlugins || emptyPlugins\n const remarkRehypeOptions = options.remarkRehypeOptions\n ? {...options.remarkRehypeOptions, ...emptyRemarkRehypeOptions}\n : emptyRemarkRehypeOptions\n const skipHtml = options.skipHtml\n const unwrapDisallowed = options.unwrapDisallowed\n const urlTransform = options.urlTransform || defaultUrlTransform\n\n const processor = unified()\n .use(remarkParse)\n .use(remarkPlugins)\n .use(remarkRehype, remarkRehypeOptions)\n .use(rehypePlugins)\n\n const file = new VFile()\n\n if (typeof children === 'string') {\n file.value = children\n } else {\n unreachable(\n 'Unexpected value `' +\n children +\n '` for `children` prop, expected `string`'\n )\n }\n\n if (allowedElements && disallowedElements) {\n unreachable(\n 'Unexpected combined `allowedElements` and `disallowedElements`, expected one or the other'\n )\n }\n\n for (const deprecation of deprecations) {\n if (Object.hasOwn(options, deprecation.from)) {\n unreachable(\n 'Unexpected `' +\n deprecation.from +\n '` prop, ' +\n (deprecation.to\n ? 'use `' + deprecation.to + '` instead'\n : 'remove it') +\n ' (see <' +\n changelog +\n '#' +\n deprecation.id +\n '> for more info)'\n )\n }\n }\n\n const mdastTree = processor.parse(file)\n /** @type {Nodes} */\n let hastTree = processor.runSync(mdastTree, file)\n\n // Wrap in `div` if there’s a class name.\n if (className) {\n hastTree = {\n type: 'element',\n tagName: 'div',\n properties: {className},\n // Assume no doctypes.\n children: /** @type {Array<ElementContent>} */ (\n hastTree.type === 'root' ? hastTree.children : [hastTree]\n )\n }\n }\n\n visit(hastTree, transform)\n\n return toJsxRuntime(hastTree, {\n Fragment,\n components,\n ignoreInvalidStyle: true,\n jsx,\n jsxs,\n passKeys: true,\n passNode: true\n })\n\n /** @type {Visitor} */\n function transform(node, index, parent) {\n if (node.type === 'raw' && parent && typeof index === 'number') {\n if (skipHtml) {\n parent.children.splice(index, 1)\n } else {\n parent.children[index] = {type: 'text', value: node.value}\n }\n\n return index\n }\n\n if (node.type === 'element') {\n /** @type {string} */\n let key\n\n for (key in urlAttributes) {\n if (\n Object.hasOwn(urlAttributes, key) &&\n Object.hasOwn(node.properties, key)\n ) {\n const value = node.properties[key]\n const test = urlAttributes[key]\n if (test === null || test.includes(node.tagName)) {\n node.properties[key] = urlTransform(String(value || ''), key, node)\n }\n }\n }\n }\n\n if (node.type === 'element') {\n let remove = allowedElements\n ? !allowedElements.includes(node.tagName)\n : disallowedElements\n ? disallowedElements.includes(node.tagName)\n : false\n\n if (!remove && allowElement && typeof index === 'number') {\n remove = !allowElement(node, index, parent)\n }\n\n if (remove && parent && typeof index === 'number') {\n if (unwrapDisallowed && node.children) {\n parent.children.splice(index, 1, ...node.children)\n } else {\n parent.children.splice(index, 1)\n }\n\n return index\n }\n }\n }\n}\n\n/**\n * Make a URL safe.\n *\n * @satisfies {UrlTransform}\n * @param {string} value\n * URL.\n * @returns {string}\n * Safe URL.\n */\nexport function defaultUrlTransform(value) {\n // Same as:\n // <https://github.com/micromark/micromark/blob/929275e/packages/micromark-util-sanitize-uri/dev/index.js#L34>\n // But without the `encode` part.\n const colon = value.indexOf(':')\n const questionMark = value.indexOf('?')\n const numberSign = value.indexOf('#')\n const slash = value.indexOf('/')\n\n if (\n // If there is no protocol, it’s relative.\n colon < 0 ||\n // If the first colon is after a `?`, `#`, or `/`, it’s not a protocol.\n (slash > -1 && colon > slash) ||\n (questionMark > -1 && colon > questionMark) ||\n (numberSign > -1 && colon > numberSign) ||\n // It is a protocol, it should be allowed.\n safeProtocol.test(value.slice(0, colon))\n ) {\n return value\n }\n\n return ''\n}\n","import { ApiPermissions } from \"@cede/types\";\n\n// Check if the current process has the required permissions\nexport function checkRequiredPermissionStatement(requireStatement: string | undefined, permissions: ApiPermissions[]) {\n if (!requireStatement) return true;\n const requiredPermissions = requireStatement.split(\",\") as ApiPermissions[];\n return (\n requiredPermissions.every((permission) => permissions.includes(permission)) &&\n requiredPermissions.length === permissions.length\n );\n}\n","export const redirectInBrowser = (url: string) => {\n chrome.tabs.create({\n url: url,\n });\n};\n","const PAGE_SEPARATOR = \"--/\";\n\nfunction removeGarbage(mdContent: string): string {\n return mdContent\n .replace(/\\n\\s+\\n/g, \"\") // remove breaking line with white spaces\n .replace(/^(\\s+)?(\\n+)?/g, \"\") // remove breaking line and white spaces at the beginning\n .replace(/(\\s+)?(\\n+)?$/g, \"\") // remove breaking line and white spaces at the end\n .replace(/--\\//g, \"\"); // remove pagination separator if it's disabled\n}\n\nfunction removeComments(mdContent: string): string {\n return mdContent.replace(/<!--[\\s\\S]*?-->/g, \"\");\n}\n\nexport function extractPages(mdContent: string, disablePagination?: boolean) {\n if (!disablePagination) {\n return removeComments(mdContent)\n .split(PAGE_SEPARATOR)\n .map(removeGarbage)\n .filter((pageContent) => pageContent.trim().length > 0);\n }\n\n return removeGarbage(removeComments(mdContent));\n}\n","\"use client\";\n\nimport createSvgIcon from './utils/createSvgIcon';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon( /*#__PURE__*/_jsx(\"path\", {\n d: \"M22 7h-9v2h9zm0 8h-9v2h9zM5.54 11 2 7.46l1.41-1.41 2.12 2.12 4.24-4.24 1.41 1.41zm0 8L2 15.46l1.41-1.41 2.12 2.12 4.24-4.24 1.41 1.41z\"\n}), 'Checklist');","\"use client\";\n\nimport createSvgIcon from './utils/createSvgIcon';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon( /*#__PURE__*/_jsx(\"path\", {\n d: \"m15 3 2.3 2.3-2.89 2.87 1.42 1.42L18.7 6.7 21 9V3zM3 9l2.3-2.3 2.87 2.89 1.42-1.42L6.7 5.3 9 3H3zm6 12-2.3-2.3 2.89-2.87-1.42-1.42L5.3 17.3 3 15v6zm12-6-2.3 2.3-2.87-2.89-1.42 1.42 2.89 2.87L15 21h6z\"\n}), 'ZoomOutMap');","import { useState } from \"react\";\nimport { BackButton, Button } from \"@cede/ds\";\nimport { useDependencies } from \"../../hooks\";\nimport { ExtensionImageProps } from \"./types\";\nimport { Checklist, ZoomOutMap } from \"@mui/icons-material\";\nimport { Box, Fade, Modal, useTheme } from \"@mui/material\";\n\nexport const ExtensionImage = ({ path, alt, icon, canZoom, iconColor, width }: ExtensionImageProps) => {\n const { useExtensionAsset } = useDependencies();\n const [isZoom, setIsZoom] = useState(false);\n\n const { fullPath } = useExtensionAsset({ path, disable: true });\n const theme = useTheme();\n\n const onZoom = () => {\n setIsZoom(true);\n };\n\n const onClose = () => {\n setIsZoom(false);\n };\n\n if (!fullPath) return null;\n\n return (\n <>\n <Box position={\"relative\"} width=\"100%\">\n {icon && (\n <Checklist\n sx={{\n position: \"absolute\",\n right: theme.custom.smallGutterMargin,\n bottom: theme.custom.smallGutterMargin,\n color: iconColor,\n }}\n />\n )}\n {canZoom && (\n <ZoomOutMap\n sx={{\n position: \"absolute\",\n right: \"1px\",\n bottom: \"12px\",\n color: theme.palette.primary.main,\n pointerEvents: \"none\",\n }}\n />\n )}\n <Box\n component={\"img\"}\n src={fullPath}\n width={width ?? \"100%\"}\n alt={alt}\n sx={{\n margin: `${theme.custom.smallGutterMargin} 0`,\n borderRadius: theme.custom.defaultBoxRadius,\n maxHeight: canZoom ? \"50px\" : \"inherit\",\n }}\n onClick={canZoom ? onZoom : undefined}\n />\n </Box>\n\n {canZoom && (\n <Modal open={isZoom} onClose={onClose} closeAfterTransition>\n <Fade in={isZoom}>\n <Box\n sx={{\n \"width\": `100%`,\n \"maxWidth\": `calc(${theme.custom.storeSize.bigTabWidth} + ${theme.custom.bigGutterMargin})`,\n \"height\": \"max-content\",\n \"padding\": theme.custom.gutterMargin,\n \"position\": \"absolute\",\n \"top\": \"50%\",\n \"left\": \"50%\",\n \"transform\": \"translate(-50%, -50%)\",\n \"background\": theme.palette.background.darkPaper,\n \"borderRadius\": theme.custom.mediumBoxRadius,\n \":focus\": {\n outline: \"none\",\n },\n }}\n >\n <Button>\n <BackButton handleReturn={onClose} />\n </Button>\n <Box\n component={\"img\"}\n src={fullPath}\n width={\"100%\"}\n alt={alt}\n sx={{\n margin: `${theme.custom.smallGutterMargin} 0`,\n marginTop: theme.custom.bigGutterMargin,\n borderRadius: theme.custom.defaultBoxRadius,\n }}\n />\n </Box>\n </Fade>\n </Modal>\n )}\n </>\n );\n};\n","import { TutorialAffiliationProps } from \"./types\";\nimport { Box, Button, Typography, useTheme } from \"@mui/material\";\n\nexport function TutorialAffiliation({ onClick }: TutorialAffiliationProps) {\n const theme = useTheme();\n return (\n <Box\n sx={{\n background: theme.palette.background.darkPaper,\n position: \"relative\",\n display: \"flex\",\n }}\n >\n <Typography component={\"p\"} sx={{ display: \"inline\", flex: \"5 1 0\", textAlign: \"center\", margin: \"auto\" }}>\n Don't have an account yet?\n </Typography>\n\n <Box\n sx={{\n display: \"flex\",\n flex: \"4 1 0\",\n alignItems: \"center\",\n justifyContent: \"center\",\n }}\n >\n <Button\n variant=\"contained\"\n color=\"primary\"\n onClick={onClick}\n sx={{\n \"paddingY\": theme.custom.smallGutterMargin,\n \"paddingX\": theme.custom.smallGutterMargin,\n \"margin\": \"auto\",\n \"backgroundColor\": theme.palette.background.default,\n \"borderRadius\": theme.custom.mediumBoxRadius,\n \"color\": theme.palette.text.primary,\n \"textTransform\": \"none\",\n \"gap\": theme.custom.smallGutterMargin,\n \"&:hover\": {\n backgroundColor: theme.palette.background.component,\n },\n \"fontSize\": \"14px\",\n }}\n >\n <svg width=\"25\" height=\"20\" viewBox=\"0 0 25 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <g id=\"Group 1321316282\">\n <path\n id=\"Subtract\"\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M20.5076 7.0301L21.3442 7.51277C22.5401 8.2028 22.9502 9.73166 22.2602 10.9276L21.0223 13.0731L20.3186 15.6883C20.1054 16.4805 19.6687 17.1529 19.0947 17.6557C19.9137 17.3372 20.6338 16.7479 21.1072 15.9275L23.5595 11.6772C24.6635 9.76374 24.0073 7.31756 22.0938 6.21353L12.2537 0.536008C10.3403 -0.568027 7.89408 0.0881602 6.79005 2.00164L6.21716 2.99455C6.7312 2.92383 7.26758 2.95258 7.80012 3.09588L7.87832 3.11693L8.0893 2.75128C8.77932 1.55535 10.3082 1.14523 11.5041 1.83526L18.8377 6.06656C19.4864 6.25309 20.0524 6.59045 20.5076 7.0301Z\"\n fill=\"white\"\n />\n <path\n id=\"Subtract_2\"\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M17.1256 7.15567L18.3885 7.49548C19.7217 7.85425 20.5117 9.22593 20.153 10.5592L19.3683 13.4751V15.657C19.3683 16.5512 19.0749 17.3769 18.5791 18.043C19.4089 17.5262 20.0523 16.7059 20.3264 15.6875L21.6014 10.949C22.1755 8.81573 20.9115 6.62104 18.7782 6.04701L7.80791 3.09504C5.67466 2.52101 3.47997 3.78501 2.90594 5.91827L2.61509 6.99913C3.0488 6.83803 3.51802 6.75 4.00781 6.75H4.23548L4.35441 6.30804C4.71318 4.97475 6.08487 4.18475 7.41815 4.54352L15.6558 6.76017C16.1802 6.79741 16.6765 6.9357 17.1256 7.15567Z\"\n fill=\"white\"\n />\n <rect\n id=\"Rectangle 14962\"\n x=\"0.75\"\n y=\"7.5\"\n width=\"17.8605\"\n height=\"11.407\"\n rx=\"3.25\"\n stroke=\"white\"\n strokeWidth=\"1.5\"\n />\n <path\n id=\"Union\"\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M9.94441 11.4434H9.17192V13.082H7.62195L7.62195 13.8545H9.17192V15.3058H9.94441V13.8545H11.4844V13.082H9.94441V11.4434Z\"\n fill=\"white\"\n />\n </g>\n </svg>\n Create account\n </Button>\n </Box>\n </Box>\n );\n}\n","import { TutorialBoxProps } from \"./types\";\nimport HelpOutlineIcon from \"@mui/icons-material/HelpOutline\";\nimport { Box, Tooltip, Typography, tooltipClasses, useTheme } from \"@mui/material\";\n\nexport function TutorialBox({ children, title, help }: TutorialBoxProps) {\n const theme = useTheme();\n return (\n <Box\n sx={{\n background: theme.palette.background.darkPaper,\n position: \"relative\",\n padding: `20px ${theme.custom.gutterMargin}`,\n borderRadius: \"16px\",\n textAlign: \"left\",\n }}\n >\n <Typography\n component={\"h2\"}\n sx={{\n padding: `4px ${theme.custom.bigGutterMargin}`,\n fontWeight: \"bold\",\n borderRadius: theme.custom.buttonRoundedRadius,\n background: theme.palette.primary.main,\n display: \"inline-block\",\n position: \"absolute\",\n top: 0,\n left: \"50%\",\n transform: \"translate(-50%, -50%)\",\n color: theme.palette.background.default,\n }}\n >\n {title}\n </Typography>\n {help && (\n <Tooltip\n title={\n <Typography\n display=\"flex\"\n alignItems=\"center\"\n justifyContent=\"space-between\"\n fontSize=\"14px\"\n sx={{\n minWidth: \"164px\",\n }}\n >\n {help}\n </Typography>\n }\n sx={{\n fontSize: \"20px\",\n color: theme.palette.text.primary,\n position: \"absolute\",\n top: theme.custom.smallGutterMargin,\n right: theme.custom.smallGutterMargin,\n }}\n placement=\"bottom-end\"\n arrow\n PopperProps={{\n disablePortal: true,\n sx: {\n [`& .${tooltipClasses.tooltip}`]: {\n marginTop: \"6px!important\",\n padding: \"8px\",\n },\n },\n }}\n >\n <HelpOutlineIcon color=\"inherit\" fontSize=\"inherit\" cursor=\"pointer\" />\n </Tooltip>\n )}\n {children}\n </Box>\n );\n}\n","import { TutorialInfoProps } from \"./types\";\nimport { Box, useTheme } from \"@mui/material\";\n\nexport function TutorialInfo({ children }: TutorialInfoProps) {\n const theme = useTheme();\n return (\n <Box\n sx={{\n background: theme.palette.background.darkPaper,\n position: \"relative\",\n padding: `20px ${theme.custom.gutterMargin}`,\n borderRadius: \"16px\",\n textAlign: \"left\",\n }}\n >\n <Box\n sx={{\n \"& p\": {\n color: theme.palette.text.disabled,\n },\n }}\n >\n {children}\n </Box>\n </Box>\n );\n}\n","import { useEffect, useRef } from \"react\";\nimport { TutorialListProps } from \"./types\";\nimport { useTheme, Box } from \"@mui/material\";\n\nexport function TutorialList(props: TutorialListProps) {\n const theme = useTheme();\n const listRef = useRef<HTMLUListElement>(null);\n\n const activateStrippable = (li: HTMLLIElement) => {\n li.addEventListener(\"click\", () => {\n li.style.textDecoration = li.style.textDecoration === \"line-through\" ? \"none\" : \"line-through\";\n });\n };\n\n useEffect(() => {\n if (props.strippable === \"true\" && listRef.current) {\n const liItems = listRef.current.querySelectorAll(\"li\");\n liItems.forEach((li) => activateStrippable(li));\n }\n\n return () => {\n if (listRef.current) {\n const liItems = listRef.current.querySelectorAll(\"li\");\n liItems.forEach((li) => li.replaceWith(li.cloneNode(true)));\n }\n };\n }, [props.strippable, listRef.current]);\n\n return (\n <Box\n ref={listRef}\n component={\"ul\"}\n sx={{\n \"mt\": 2,\n \"color\": theme.palette.text.primary,\n \"*\": {\n cursor: props.strippable ? \"pointer\" : \"default\",\n fontSize: theme.typography.body1.fontSize,\n },\n }}\n alignSelf=\"flex-start\"\n >\n {props.children}\n </Box>\n );\n}\n","import { Button } from \"@cede/ds\";\nimport { TutorialModalProps } from \"./types\";\nimport { Box, Fade, Modal, Theme, Typography, useTheme } from \"@mui/material\";\n\nconst style = (theme: Theme) => ({\n position: \"absolute\" as const,\n top: \"50%\",\n left: \"50%\",\n transform: \"translate(-50%, -50%)\",\n width: `calc(${theme.custom.storeSize.tabWidth} * 0.9)`,\n maxHeight: \"476px\",\n overflowY: \"auto\",\n background: theme.palette.background.paper,\n boxShadow: 24,\n padding: theme.custom.gutterMargin,\n borderRadius: theme.custom.largeBoxRadius,\n display: \"flex\",\n flexDirection: \"column\" as const,\n alignItems: \"center\",\n});\n\nexport function TutorialModal({ onClose, open, children, subtitle, title }: TutorialModalProps) {\n const theme = useTheme();\n return (\n <Modal\n aria-labelledby=\"transition-modal-title\"\n aria-describedby=\"transition-modal-description\"\n open={open}\n onClose={onClose}\n closeAfterTransition\n sx={{\n zIndex: \"99999999999\",\n }}\n >\n <Fade in={open}>\n <Box sx={style}>\n <Typography variant=\"h1\" component=\"h2\" fontWeight={\"500\"} fontSize={theme.typography.h2.fontSize}>\n {title}\n </Typography>\n {typeof subtitle === \"string\" ? (\n <Typography variant=\"body2\" component={\"h3\"} fontWeight=\"normal\" sx={{ mt: 2 }}>\n {subtitle}\n </Typography>\n ) : (\n subtitle\n )}\n\n <Box sx={{ mt: 2 }} alignSelf=\"flex-start\">\n {children}\n </Box>\n <Button variant=\"text\" fullWidth onClick={onClose} sx={{ mt: 2 }}>\n Close\n </Button>\n </Box>\n </Fade>\n </Modal>\n );\n}\n","import { generateUtilityClass, generateUtilityClasses } from '@mui/base';\nexport function getCardContentUtilityClass(slot) {\n return generateUtilityClass('MuiCardContent', slot);\n}\nconst cardContentClasses = generateUtilityClasses('MuiCardContent', ['root']);\nexport default cardContentClasses;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nconst _excluded = [\"className\", \"component\"];\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport { unstable_composeClasses as composeClasses } from '@mui/base';\nimport styled from '../styles/styled';\nimport useThemeProps from '../styles/useThemeProps';\nimport { getCardContentUtilityClass } from './cardContentClasses';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\n\nconst useUtilityClasses = ownerState => {\n const {\n classes\n } = ownerState;\n const slots = {\n root: ['root']\n };\n return composeClasses(slots, getCardContentUtilityClass, classes);\n};\n\nconst CardContentRoot = styled('div', {\n name: 'MuiCardContent',\n slot: 'Root',\n overridesResolver: (props, styles) => styles.root\n})(() => {\n return {\n padding: 16,\n '&:last-child': {\n paddingBottom: 24\n }\n };\n});\nconst CardContent = /*#__PURE__*/React.forwardRef(function CardContent(inProps, ref) {\n const props = useThemeProps({\n props: inProps,\n name: 'MuiCardContent'\n });\n\n const {\n className,\n component = 'div'\n } = props,\n other = _objectWithoutPropertiesLoose(props, _excluded);\n\n const ownerState = _extends({}, props, {\n component\n });\n\n const classes = useUtilityClasses(ownerState);\n return /*#__PURE__*/_jsx(CardContentRoot, _extends({\n as: component,\n className: clsx(classes.root, className),\n ownerState: ownerState,\n ref: ref\n }, other));\n});\nprocess.env.NODE_ENV !== \"production\" ? CardContent.propTypes\n/* remove-proptypes */\n= {\n // ----------------------------- Warning --------------------------------\n // | These PropTypes are generated from the TypeScript type definitions |\n // | To update them edit the d.ts file and run \"yarn proptypes\" |\n // ----------------------------------------------------------------------\n\n /**\n * The content of the component.\n */\n children: PropTypes.node,\n\n /**\n * Override or extend the styles applied to the component.\n */\n classes: PropTypes.object,\n\n /**\n * @ignore\n */\n className: PropTypes.string,\n\n /**\n * The component used for the root node.\n * Either a string to use a HTML element or a component.\n */\n component: PropTypes.elementType,\n\n /**\n * The system prop that allows defining system overrides as well as additional CSS styles.\n */\n sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])\n} : void 0;\nexport default CardContent;","import { TutorialVideoCardProps } from \"./types\";\nimport { Box, CardActionArea, CardContent, Typography, useTheme } from \"@mui/material\";\n\nexport function TutorialVideoCard({ title, onClick }: TutorialVideoCardProps) {\n const theme = useTheme();\n return (\n <Box flex={\"1\"} display=\"flex\" flexDirection={\"column\"} justifyContent=\"flex-end\">\n <CardActionArea\n sx={{\n background: theme.palette.background.darkPaper,\n borderRadius: theme.custom.mediumBoxRadius,\n }}\n onClick={onClick}\n >\n <CardContent\n sx={{\n display: \"flex\",\n alignItems: \"center\",\n gap: theme.custom.gutterMargin,\n }}\n >\n <svg width=\"16\" height=\"20\" viewBox=\"0 0 16 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M0 17.2389V2.59235C0 1.0249 1.72118 0.0666484 3.05353 0.892331L14.3713 7.90617C15.6048 8.67058 15.6392 10.453 14.436 11.2643L3.11826 18.897C1.78989 19.7929 0 18.8411 0 17.2389Z\"\n fill=\"white\"\n />\n </svg>\n\n <Typography\n sx={{\n marginBottom: \"0\",\n color: theme.palette.text.primary,\n }}\n component={\"p\"}\n typography=\"h2\"\n >\n {title}\n </Typography>\n </CardContent>\n </CardActionArea>\n </Box>\n );\n}\n","\"use client\";\n\nimport createSvgIcon from './utils/createSvgIcon';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon( /*#__PURE__*/_jsx(\"path\", {\n d: \"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2m-2 15-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8z\"\n}), 'CheckCircle');","\"use client\";\n\nimport createSvgIcon from './utils/createSvgIcon';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon( /*#__PURE__*/_jsx(\"path\", {\n d: \"M12 2C6.47 2 2 6.47 2 12s4.47 10 10 10 10-4.47 10-10S17.53 2 12 2m5 13.59L15.59 17 12 13.41 8.41 17 7 15.59 10.59 12 7 8.41 8.41 7 12 10.59 15.59 7 17 8.41 13.41 12z\"\n}), 'Cancel');","import _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nconst _excluded = [\"absolute\", \"children\", \"className\", \"component\", \"flexItem\", \"light\", \"orientation\", \"role\", \"textAlign\", \"variant\"];\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport { unstable_composeClasses as composeClasses } from '@mui/base';\nimport { alpha } from '@mui/system';\nimport styled from '../styles/styled';\nimport useThemeProps from '../styles/useThemeProps';\nimport { getDividerUtilityClass } from './dividerClasses';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\n\nconst useUtilityClasses = ownerState => {\n const {\n absolute,\n children,\n classes,\n flexItem,\n light,\n orientation,\n textAlign,\n variant\n } = ownerState;\n const slots = {\n root: ['root', absolute && 'absolute', variant, light && 'light', orientation === 'vertical' && 'vertical', flexItem && 'flexItem', children && 'withChildren', children && orientation === 'vertical' && 'withChildrenVertical', textAlign === 'right' && orientation !== 'vertical' && 'textAlignRight', textAlign === 'left' && orientation !== 'vertical' && 'textAlignLeft'],\n wrapper: ['wrapper', orientation === 'vertical' && 'wrapperVertical']\n };\n return composeClasses(slots, getDividerUtilityClass, classes);\n};\n\nconst DividerRoot = styled('div', {\n name: 'MuiDivider',\n slot: 'Root',\n overridesResolver: (props, styles) => {\n const {\n ownerState\n } = props;\n return [styles.root, ownerState.absolute && styles.absolute, styles[ownerState.variant], ownerState.light && styles.light, ownerState.orientation === 'vertical' && styles.vertical, ownerState.flexItem && styles.flexItem, ownerState.children && styles.withChildren, ownerState.children && ownerState.orientation === 'vertical' && styles.withChildrenVertical, ownerState.textAlign === 'right' && ownerState.orientation !== 'vertical' && styles.textAlignRight, ownerState.textAlign === 'left' && ownerState.orientation !== 'vertical' && styles.textAlignLeft];\n }\n})(({\n theme,\n ownerState\n}) => _extends({\n margin: 0,\n // Reset browser default style.\n flexShrink: 0,\n borderWidth: 0,\n borderStyle: 'solid',\n borderColor: (theme.vars || theme).palette.divider,\n borderBottomWidth: 'thin'\n}, ownerState.absolute && {\n position: 'absolute',\n bottom: 0,\n left: 0,\n width: '100%'\n}, ownerState.light && {\n borderColor: theme.vars ? `rgba(${theme.vars.palette.dividerChannel} / 0.08)` : alpha(theme.palette.divider, 0.08)\n}, ownerState.variant === 'inset' && {\n marginLeft: 72\n}, ownerState.variant === 'middle' && ownerState.orientation === 'horizontal' && {\n marginLeft: theme.spacing(2),\n marginRight: theme.spacing(2)\n}, ownerState.variant === 'middle' && ownerState.orientation === 'vertical' && {\n marginTop: theme.spacing(1),\n marginBottom: theme.spacing(1)\n}, ownerState.orientation === 'vertical' && {\n height: '100%',\n borderBottomWidth: 0,\n borderRightWidth: 'thin'\n}, ownerState.flexItem && {\n alignSelf: 'stretch',\n height: 'auto'\n}), ({\n theme,\n ownerState\n}) => _extends({}, ownerState.children && {\n display: 'flex',\n whiteSpace: 'nowrap',\n textAlign: 'center',\n border: 0,\n '&::before, &::after': {\n position: 'relative',\n width: '100%',\n borderTop: `thin solid ${(theme.vars || theme).palette.divider}`,\n top: '50%',\n content: '\"\"',\n transform: 'translateY(50%)'\n }\n}), ({\n theme,\n ownerState\n}) => _extends({}, ownerState.children && ownerState.orientation === 'vertical' && {\n flexDirection: 'column',\n '&::before, &::after': {\n height: '100%',\n top: '0%',\n left: '50%',\n borderTop: 0,\n borderLeft: `thin solid ${(theme.vars || theme).palette.divider}`,\n transform: 'translateX(0%)'\n }\n}), ({\n ownerState\n}) => _extends({}, ownerState.textAlign === 'right' && ownerState.orientation !== 'vertical' && {\n '&::before': {\n width: '90%'\n },\n '&::after': {\n width: '10%'\n }\n}, ownerState.textAlign === 'left' && ownerState.orientation !== 'vertical' && {\n '&::before': {\n width: '10%'\n },\n '&::after': {\n width: '90%'\n }\n}));\nconst DividerWrapper = styled('span', {\n name: 'MuiDivider',\n slot: 'Wrapper',\n overridesResolver: (props, styles) => {\n const {\n ownerState\n } = props;\n return [styles.wrapper, ownerState.orientation === 'vertical' && styles.wrapperVertical];\n }\n})(({\n theme,\n ownerState\n}) => _extends({\n display: 'inline-block',\n paddingLeft: `calc(${theme.spacing(1)} * 1.2)`,\n paddingRight: `calc(${theme.spacing(1)} * 1.2)`\n}, ownerState.orientation === 'vertical' && {\n paddingTop: `calc(${theme.spacing(1)} * 1.2)`,\n paddingBottom: `calc(${theme.spacing(1)} * 1.2)`\n}));\nconst Divider = /*#__PURE__*/React.forwardRef(function Divider(inProps, ref) {\n const props = useThemeProps({\n props: inProps,\n name: 'MuiDivider'\n });\n\n const {\n absolute = false,\n children,\n className,\n component = children ? 'div' : 'hr',\n flexItem = false,\n light = false,\n orientation = 'horizontal',\n role = component !== 'hr' ? 'separator' : undefined,\n textAlign = 'center',\n variant = 'fullWidth'\n } = props,\n other = _objectWithoutPropertiesLoose(props, _excluded);\n\n const ownerState = _extends({}, props, {\n absolute,\n component,\n flexItem,\n light,\n orientation,\n role,\n textAlign,\n variant\n });\n\n const classes = useUtilityClasses(ownerState);\n return /*#__PURE__*/_jsx(DividerRoot, _extends({\n as: component,\n className: clsx(classes.root, className),\n role: role,\n ref: ref,\n ownerState: ownerState\n }, other, {\n children: children ? /*#__PURE__*/_jsx(DividerWrapper, {\n className: classes.wrapper,\n ownerState: ownerState,\n children: children\n }) : null\n }));\n});\nprocess.env.NODE_ENV !== \"production\" ? Divider.propTypes\n/* remove-proptypes */\n= {\n // ----------------------------- Warning --------------------------------\n // | These PropTypes are generated from the TypeScript type definitions |\n // | To update them edit the d.ts file and run \"yarn proptypes\" |\n // ----------------------------------------------------------------------\n\n /**\n * Absolutely position the element.\n * @default false\n */\n absolute: PropTypes.bool,\n\n /**\n * The content of the component.\n */\n children: PropTypes.node,\n\n /**\n * Override or extend the styles applied to the component.\n */\n classes: PropTypes.object,\n\n /**\n * @ignore\n */\n className: PropTypes.string,\n\n /**\n * The component used for the root node.\n * Either a string to use a HTML element or a component.\n */\n component: PropTypes.elementType,\n\n /**\n * If `true`, a vertical divider will have the correct height when used in flex container.\n * (By default, a vertical divider will have a calculated height of `0px` if it is the child of a flex container.)\n * @default false\n */\n flexItem: PropTypes.bool,\n\n /**\n * If `true`, the divider will have a lighter color.\n * @default false\n */\n light: PropTypes.bool,\n\n /**\n * The component orientation.\n * @default 'horizontal'\n */\n orientation: PropTypes.oneOf(['horizontal', 'vertical']),\n\n /**\n * @ignore\n */\n role: PropTypes\n /* @typescript-to-proptypes-ignore */\n .string,\n\n /**\n * The system prop that allows defining system overrides as well as additional CSS styles.\n */\n sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),\n\n /**\n * The text alignment.\n * @default 'center'\n */\n textAlign: PropTypes.oneOf(['center', 'left', 'right']),\n\n /**\n * The variant to use.\n * @default 'fullWidth'\n */\n variant: PropTypes\n /* @typescript-to-proptypes-ignore */\n .oneOfType([PropTypes.oneOf(['fullWidth', 'inset', 'middle']), PropTypes.string])\n} : void 0;\nexport default Divider;","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').Properties} Properties\n */\n\n/**\n * @template {string} SimpleSelector\n * Selector type.\n * @template {string} DefaultTagName\n * Default tag name.\n * @typedef {(\n * SimpleSelector extends ''\n * ? DefaultTagName\n * : SimpleSelector extends `${infer TagName}.${infer Rest}`\n * ? ExtractTagName<TagName, DefaultTagName>\n * : SimpleSelector extends `${infer TagName}#${infer Rest}`\n * ? ExtractTagName<TagName, DefaultTagName>\n * : SimpleSelector extends string\n * ? SimpleSelector\n * : DefaultTagName\n * )} ExtractTagName\n * Extract tag name from a simple selector.\n */\n\nconst search = /[#.]/g\n\n/**\n * Create a hast element from a simple CSS selector.\n *\n * @template {string} Selector\n * Type of selector.\n * @template {string} [DefaultTagName='div']\n * Type of default tag name (default: `'div'`).\n * @param {Selector | null | undefined} [selector]\n * Simple CSS selector (optional).\n *\n * Can contain a tag name (`foo`), classes (`.bar`), and an ID (`#baz`).\n * Multiple classes are allowed.\n * Uses the last ID if multiple IDs are found.\n * @param {DefaultTagName | null | undefined} [defaultTagName='div']\n * Tag name to use if `selector` does not specify one (default: `'div'`).\n * @returns {Element & {tagName: ExtractTagName<Selector, DefaultTagName>}}\n * Built element.\n */\nexport function parseSelector(selector, defaultTagName) {\n const value = selector || ''\n /** @type {Properties} */\n const props = {}\n let start = 0\n /** @type {string | undefined} */\n let previous\n /** @type {string | undefined} */\n let tagName\n\n while (start < value.length) {\n search.lastIndex = start\n const match = search.exec(value)\n const subvalue = value.slice(start, match ? match.index : value.length)\n\n if (subvalue) {\n if (!previous) {\n tagName = subvalue\n } else if (previous === '#') {\n props.id = subvalue\n } else if (Array.isArray(props.className)) {\n props.className.push(subvalue)\n } else {\n props.className = [subvalue]\n }\n\n start += subvalue.length\n }\n\n if (match) {\n previous = match[0]\n start++\n }\n }\n\n return {\n type: 'element',\n // @ts-expect-error: tag name is parsed.\n tagName: tagName || defaultTagName || 'div',\n properties: props,\n children: []\n }\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').Nodes} Nodes\n * @typedef {import('hast').Root} Root\n * @typedef {import('hast').RootContent} RootContent\n *\n * @typedef {import('property-information').Info} Info\n * @typedef {import('property-information').Schema} Schema\n */\n\n/**\n * @typedef {Element | Root} Result\n * Result from a `h` (or `s`) call.\n *\n * @typedef {number | string} StyleValue\n * Value for a CSS style field.\n * @typedef {Record<string, StyleValue>} Style\n * Supported value of a `style` prop.\n * @typedef {boolean | number | string | null | undefined} PrimitiveValue\n * Primitive property value.\n * @typedef {Array<number | string>} ArrayValue\n * List of property values for space- or comma separated values (such as `className`).\n * @typedef {ArrayValue | PrimitiveValue} PropertyValue\n * Primitive value or list value.\n * @typedef {{[property: string]: PropertyValue | Style}} Properties\n * Acceptable value for element properties.\n *\n * @typedef {number | string | null | undefined} PrimitiveChild\n * Primitive children, either ignored (nullish), or turned into text nodes.\n * @typedef {Array<ArrayChildNested | Nodes | PrimitiveChild>} ArrayChild\n * List of children.\n * @typedef {Array<Nodes | PrimitiveChild>} ArrayChildNested\n * List of children (deep).\n * @typedef {ArrayChild | Nodes | PrimitiveChild} Child\n * Acceptable child value.\n */\n\nimport {parse as commas} from 'comma-separated-tokens'\nimport {parseSelector} from 'hast-util-parse-selector'\nimport {find, normalize} from 'property-information'\nimport {parse as spaces} from 'space-separated-tokens'\n\nconst buttonTypes = new Set(['button', 'menu', 'reset', 'submit'])\n\nconst own = {}.hasOwnProperty\n\n/**\n * @param {Schema} schema\n * Schema to use.\n * @param {string} defaultTagName\n * Default tag name.\n * @param {Array<string> | undefined} [caseSensitive]\n * Case-sensitive tag names (default: `undefined`).\n * @returns\n * `h`.\n */\nexport function createH(schema, defaultTagName, caseSensitive) {\n const adjust = caseSensitive && createAdjustMap(caseSensitive)\n\n /**\n * Hyperscript compatible DSL for creating virtual hast trees.\n *\n * @overload\n * @param {null | undefined} [selector]\n * @param {...Child} children\n * @returns {Root}\n *\n * @overload\n * @param {string} selector\n * @param {Properties} properties\n * @param {...Child} children\n * @returns {Element}\n *\n * @overload\n * @param {string} selector\n * @param {...Child} children\n * @returns {Element}\n *\n * @param {string | null | undefined} [selector]\n * Selector.\n * @param {Child | Properties | null | undefined} [properties]\n * Properties (or first child) (default: `undefined`).\n * @param {...Child} children\n * Children.\n * @returns {Result}\n * Result.\n */\n function h(selector, properties, ...children) {\n let index = -1\n /** @type {Result} */\n let node\n\n if (selector === undefined || selector === null) {\n node = {type: 'root', children: []}\n // Properties are not supported for roots.\n const child = /** @type {Child} */ (properties)\n children.unshift(child)\n } else {\n node = parseSelector(selector, defaultTagName)\n // Normalize the name.\n node.tagName = node.tagName.toLowerCase()\n if (adjust && own.call(adjust, node.tagName)) {\n node.tagName = adjust[node.tagName]\n }\n\n // Handle props.\n if (isProperties(properties, node.tagName)) {\n /** @type {string} */\n let key\n\n for (key in properties) {\n if (own.call(properties, key)) {\n addProperty(schema, node.properties, key, properties[key])\n }\n }\n } else {\n children.unshift(properties)\n }\n }\n\n // Handle children.\n while (++index < children.length) {\n addChild(node.children, children[index])\n }\n\n if (node.type === 'element' && node.tagName === 'template') {\n node.content = {type: 'root', children: node.children}\n node.children = []\n }\n\n return node\n }\n\n return h\n}\n\n/**\n * Check if something is properties or a child.\n *\n * @param {Child | Properties} value\n * Value to check.\n * @param {string} name\n * Tag name.\n * @returns {value is Properties}\n * Whether `value` is a properties object.\n */\nfunction isProperties(value, name) {\n if (\n value === null ||\n value === undefined ||\n typeof value !== 'object' ||\n Array.isArray(value)\n ) {\n return false\n }\n\n if (name === 'input' || !value.type || typeof value.type !== 'string') {\n return true\n }\n\n if ('children' in value && Array.isArray(value.children)) {\n return false\n }\n\n if (name === 'button') {\n return buttonTypes.has(value.type.toLowerCase())\n }\n\n return !('value' in value)\n}\n\n/**\n * @param {Schema} schema\n * Schema.\n * @param {Properties} properties\n * Properties object.\n * @param {string} key\n * Property name.\n * @param {PropertyValue | Style} value\n * Property value.\n * @returns {undefined}\n * Nothing.\n */\nfunction addProperty(schema, properties, key, value) {\n const info = find(schema, key)\n let index = -1\n /** @type {PropertyValue} */\n let result\n\n // Ignore nullish and NaN values.\n if (value === undefined || value === null) return\n\n if (typeof value === 'number') {\n // Ignore NaN.\n if (Number.isNaN(value)) return\n\n result = value\n }\n // Booleans.\n else if (typeof value === 'boolean') {\n result = value\n }\n // Handle list values.\n else if (typeof value === 'string') {\n if (info.spaceSeparated) {\n result = spaces(value)\n } else if (info.commaSeparated) {\n result = commas(value)\n } else if (info.commaOrSpaceSeparated) {\n result = spaces(commas(value).join(' '))\n } else {\n result = parsePrimitive(info, info.property, value)\n }\n } else if (Array.isArray(value)) {\n result = value.concat()\n } else {\n result = info.property === 'style' ? style(value) : String(value)\n }\n\n if (Array.isArray(result)) {\n /** @type {Array<number | string>} */\n const finalResult = []\n\n while (++index < result.length) {\n // Assume no booleans in array.\n const value = /** @type {number | string} */ (\n parsePrimitive(info, info.property, result[index])\n )\n finalResult[index] = value\n }\n\n result = finalResult\n }\n\n // Class names (which can be added both on the `selector` and here).\n if (info.property === 'className' && Array.isArray(properties.className)) {\n // Assume no booleans in `className`.\n const value = /** @type {number | string} */ (result)\n result = properties.className.concat(value)\n }\n\n properties[info.property] = result\n}\n\n/**\n * @param {Array<RootContent>} nodes\n * Children.\n * @param {Child} value\n * Child.\n * @returns {undefined}\n * Nothing.\n */\nfunction addChild(nodes, value) {\n let index = -1\n\n if (value === undefined || value === null) {\n // Empty.\n } else if (typeof value === 'string' || typeof value === 'number') {\n nodes.push({type: 'text', value: String(value)})\n } else if (Array.isArray(value)) {\n while (++index < value.length) {\n addChild(nodes, value[index])\n }\n } else if (typeof value === 'object' && 'type' in value) {\n if (value.type === 'root') {\n addChild(nodes, value.children)\n } else {\n nodes.push(value)\n }\n } else {\n throw new Error('Expected node, nodes, or string, got `' + value + '`')\n }\n}\n\n/**\n * Parse a single primitives.\n *\n * @param {Info} info\n * Property information.\n * @param {string} name\n * Property name.\n * @param {PrimitiveValue} value\n * Property value.\n * @returns {PrimitiveValue}\n * Property value.\n */\nfunction parsePrimitive(info, name, value) {\n if (typeof value === 'string') {\n if (info.number && value && !Number.isNaN(Number(value))) {\n return Number(value)\n }\n\n if (\n (info.boolean || info.overloadedBoolean) &&\n (value === '' || normalize(value) === normalize(name))\n ) {\n return true\n }\n }\n\n return value\n}\n\n/**\n * Serialize a `style` object as a string.\n *\n * @param {Style} value\n * Style object.\n * @returns {string}\n * CSS string.\n */\nfunction style(value) {\n /** @type {Array<string>} */\n const result = []\n /** @type {string} */\n let key\n\n for (key in value) {\n if (own.call(value, key)) {\n result.push([key, value[key]].join(': '))\n }\n }\n\n return result.join('; ')\n}\n\n/**\n * Create a map to adjust casing.\n *\n * @param {Array<string>} values\n * List of properly cased keys.\n * @returns {Record<string, string>}\n * Map of lowercase keys to uppercase keys.\n */\nfunction createAdjustMap(values) {\n /** @type {Record<string, string>} */\n const result = {}\n let index = -1\n\n while (++index < values.length) {\n result[values[index].toLowerCase()] = values[index]\n }\n\n return result\n}\n","export const svgCaseSensitiveTagNames = [\n 'altGlyph',\n 'altGlyphDef',\n 'altGlyphItem',\n 'animateColor',\n 'animateMotion',\n 'animateTransform',\n 'clipPath',\n 'feBlend',\n 'feColorMatrix',\n 'feComponentTransfer',\n 'feComposite',\n 'feConvolveMatrix',\n 'feDiffuseLighting',\n 'feDisplacementMap',\n 'feDistantLight',\n 'feDropShadow',\n 'feFlood',\n 'feFuncA',\n 'feFuncB',\n 'feFuncG',\n 'feFuncR',\n 'feGaussianBlur',\n 'feImage',\n 'feMerge',\n 'feMergeNode',\n 'feMorphology',\n 'feOffset',\n 'fePointLight',\n 'feSpecularLighting',\n 'feSpotLight',\n 'feTile',\n 'feTurbulence',\n 'foreignObject',\n 'glyphRef',\n 'linearGradient',\n 'radialGradient',\n 'solidColor',\n 'textArea',\n 'textPath'\n]\n","/**\n * @typedef {import('./create-h.js').Child} Child\n * Acceptable child value.\n * @typedef {import('./create-h.js').Properties} Properties\n * Acceptable value for element properties.\n * @typedef {import('./create-h.js').Result} Result\n * Result from a `h` (or `s`) call.\n */\n\n// Register the JSX namespace on `h`.\n/**\n * @typedef {import('./jsx-classic.js').Element} h.JSX.Element\n * @typedef {import('./jsx-classic.js').ElementChildrenAttribute} h.JSX.ElementChildrenAttribute\n * @typedef {import('./jsx-classic.js').IntrinsicAttributes} h.JSX.IntrinsicAttributes\n * @typedef {import('./jsx-classic.js').IntrinsicElements} h.JSX.IntrinsicElements\n */\n\n// Register the JSX namespace on `s`.\n/**\n * @typedef {import('./jsx-classic.js').Element} s.JSX.Element\n * @typedef {import('./jsx-classic.js').ElementChildrenAttribute} s.JSX.ElementChildrenAttribute\n * @typedef {import('./jsx-classic.js').IntrinsicAttributes} s.JSX.IntrinsicAttributes\n * @typedef {import('./jsx-classic.js').IntrinsicElements} s.JSX.IntrinsicElements\n */\n\nimport {html, svg} from 'property-information'\nimport {createH} from './create-h.js'\nimport {svgCaseSensitiveTagNames} from './svg-case-sensitive-tag-names.js'\n\n// Note: this explicit type is needed, otherwise TS creates broken types.\n/** @type {ReturnType<createH>} */\nexport const h = createH(html, 'div')\n\n// Note: this explicit type is needed, otherwise TS creates broken types.\n/** @type {ReturnType<createH>} */\nexport const s = createH(svg, 'g', svgCaseSensitiveTagNames)\n","/**\n * @import {VFile, Value} from 'vfile'\n * @import {Location} from 'vfile-location'\n */\n\n/**\n * Create an index of the given document to translate between line/column and\n * offset based positional info.\n *\n * Also implemented in Rust in [`wooorm/markdown-rs`][markdown-rs].\n *\n * [markdown-rs]: https://github.com/wooorm/markdown-rs/blob/main/src/util/location.rs\n *\n * @param {VFile | Value} file\n * File to index.\n * @returns {Location}\n * Accessors for index.\n */\nexport function location(file) {\n const value = String(file)\n /**\n * List, where each index is a line number (0-based), and each value is the\n * byte index *after* where the line ends.\n *\n * @type {Array<number>}\n */\n const indices = []\n\n return {toOffset, toPoint}\n\n /** @type {Location['toPoint']} */\n function toPoint(offset) {\n if (typeof offset === 'number' && offset > -1 && offset <= value.length) {\n let index = 0\n\n while (true) {\n let end = indices[index]\n\n if (end === undefined) {\n const eol = next(value, indices[index - 1])\n end = eol === -1 ? value.length + 1 : eol + 1\n indices[index] = end\n }\n\n if (end > offset) {\n return {\n line: index + 1,\n column: offset - (index > 0 ? indices[index - 1] : 0) + 1,\n offset\n }\n }\n\n index++\n }\n }\n }\n\n /** @type {Location['toOffset']} */\n function toOffset(point) {\n if (\n point &&\n typeof point.line === 'number' &&\n typeof point.column === 'number' &&\n !Number.isNaN(point.line) &&\n !Number.isNaN(point.column)\n ) {\n while (indices.length < point.line) {\n const from = indices[indices.length - 1]\n const eol = next(value, from)\n const end = eol === -1 ? value.length + 1 : eol + 1\n if (from === end) break\n indices.push(end)\n }\n\n const offset =\n (point.line > 1 ? indices[point.line - 2] : 0) + point.column - 1\n // The given `column` could not exist on this line.\n if (offset < indices[point.line - 1]) return offset\n }\n }\n}\n\n/**\n * @param {string} value\n * @param {number} from\n */\nfunction next(value, from) {\n const cr = value.indexOf('\\r', from)\n const lf = value.indexOf('\\n', from)\n if (lf === -1) return cr\n if (cr === -1 || cr + 1 === lf) return lf\n return cr < lf ? cr : lf\n}\n","/**\n * Map of web namespaces.\n *\n * @type {Record<string, string>}\n */\nexport const webNamespaces = {\n html: 'http://www.w3.org/1999/xhtml',\n mathml: 'http://www.w3.org/1998/Math/MathML',\n svg: 'http://www.w3.org/2000/svg',\n xlink: 'http://www.w3.org/1999/xlink',\n xml: 'http://www.w3.org/XML/1998/namespace',\n xmlns: 'http://www.w3.org/2000/xmlns/'\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').ElementData} ElementData\n * @typedef {import('hast').Nodes} Nodes\n * @typedef {import('hast').Root} Root\n * @typedef {import('hast').RootContent} RootContent\n *\n * @typedef {import('parse5').DefaultTreeAdapterMap} DefaultTreeAdapterMap\n * @typedef {import('parse5').Token.ElementLocation} P5ElementLocation\n * @typedef {import('parse5').Token.Location} P5Location\n *\n * @typedef {import('property-information').Schema} Schema\n *\n * @typedef {import('unist').Point} Point\n * @typedef {import('unist').Position} Position\n *\n * @typedef {import('vfile').VFile} VFile\n */\n\n/**\n * @typedef {DefaultTreeAdapterMap['document']} P5Document\n * @typedef {DefaultTreeAdapterMap['documentFragment']} P5DocumentFragment\n * @typedef {DefaultTreeAdapterMap['documentType']} P5DocumentType\n * @typedef {DefaultTreeAdapterMap['commentNode']} P5Comment\n * @typedef {DefaultTreeAdapterMap['textNode']} P5Text\n * @typedef {DefaultTreeAdapterMap['element']} P5Element\n * @typedef {DefaultTreeAdapterMap['node']} P5Node\n * @typedef {DefaultTreeAdapterMap['template']} P5Template\n */\n\n/**\n * @typedef Options\n * Configuration.\n * @property {Space | null | undefined} [space='html']\n * Which space the document is in (default: `'html'`).\n *\n * When an `<svg>` element is found in the HTML space, this package already\n * automatically switches to and from the SVG space when entering and exiting\n * it.\n * @property {VFile | null | undefined} [file]\n * File used to add positional info to nodes (optional).\n *\n * If given, the file should represent the original HTML source.\n * @property {boolean | null | undefined} [verbose=false]\n * Whether to add extra positional info about starting tags, closing tags,\n * and attributes to elements (default: `false`).\n *\n * > 👉 **Note**: only used when `file` is given.\n *\n * @typedef {'html' | 'svg'} Space\n * Namespace.\n *\n * @typedef State\n * Info passed around about the current state.\n * @property {VFile | undefined} file\n * Corresponding file.\n * @property {boolean} location\n * Whether location info was found.\n * @property {Schema} schema\n * Current schema.\n * @property {boolean | undefined} verbose\n * Add extra positional info.\n */\n\nimport {ok as assert} from 'devlop'\nimport {h, s} from 'hastscript'\nimport {find, html, svg} from 'property-information'\nimport {location} from 'vfile-location'\nimport {webNamespaces} from 'web-namespaces'\n\nconst own = {}.hasOwnProperty\n/** @type {unknown} */\n// type-coverage:ignore-next-line\nconst proto = Object.prototype\n\n/**\n * Transform a `parse5` AST to hast.\n *\n * @param {P5Node} tree\n * `parse5` tree to transform.\n * @param {Options | null | undefined} [options]\n * Configuration (optional).\n * @returns {Nodes}\n * hast tree.\n */\nexport function fromParse5(tree, options) {\n const settings = options || {}\n\n return one(\n {\n file: settings.file || undefined,\n location: false,\n schema: settings.space === 'svg' ? svg : html,\n verbose: settings.verbose || false\n },\n tree\n )\n}\n\n/**\n * Transform a node.\n *\n * @param {State} state\n * Info passed around about the current state.\n * @param {P5Node} node\n * p5 node.\n * @returns {Nodes}\n * hast node.\n */\nfunction one(state, node) {\n /** @type {Nodes} */\n let result\n\n switch (node.nodeName) {\n case '#comment': {\n const reference = /** @type {P5Comment} */ (node)\n result = {type: 'comment', value: reference.data}\n patch(state, reference, result)\n return result\n }\n\n case '#document':\n case '#document-fragment': {\n const reference = /** @type {P5Document | P5DocumentFragment} */ (node)\n const quirksMode =\n 'mode' in reference\n ? reference.mode === 'quirks' || reference.mode === 'limited-quirks'\n : false\n\n result = {\n type: 'root',\n children: all(state, node.childNodes),\n data: {quirksMode}\n }\n\n if (state.file && state.location) {\n const doc = String(state.file)\n const loc = location(doc)\n const start = loc.toPoint(0)\n const end = loc.toPoint(doc.length)\n // Always defined as we give valid input.\n assert(start, 'expected `start`')\n assert(end, 'expected `end`')\n result.position = {start, end}\n }\n\n return result\n }\n\n case '#documentType': {\n const reference = /** @type {P5DocumentType} */ (node)\n result = {type: 'doctype'}\n patch(state, reference, result)\n return result\n }\n\n case '#text': {\n const reference = /** @type {P5Text} */ (node)\n result = {type: 'text', value: reference.value}\n patch(state, reference, result)\n return result\n }\n\n // Element.\n default: {\n const reference = /** @type {P5Element} */ (node)\n result = element(state, reference)\n return result\n }\n }\n}\n\n/**\n * Transform children.\n *\n * @param {State} state\n * Info passed around about the current state.\n * @param {Array<P5Node>} nodes\n * Nodes.\n * @returns {Array<RootContent>}\n * hast nodes.\n */\nfunction all(state, nodes) {\n let index = -1\n /** @type {Array<RootContent>} */\n const results = []\n\n while (++index < nodes.length) {\n // Assume no roots in `nodes`.\n const result = /** @type {RootContent} */ (one(state, nodes[index]))\n results.push(result)\n }\n\n return results\n}\n\n/**\n * Transform an element.\n *\n * @param {State} state\n * Info passed around about the current state.\n * @param {P5Element} node\n * `parse5` node to transform.\n * @returns {Element}\n * hast node.\n */\nfunction element(state, node) {\n const schema = state.schema\n\n state.schema = node.namespaceURI === webNamespaces.svg ? svg : html\n\n // Props.\n let index = -1\n /** @type {Record<string, string>} */\n const props = {}\n\n while (++index < node.attrs.length) {\n const attribute = node.attrs[index]\n const name =\n (attribute.prefix ? attribute.prefix + ':' : '') + attribute.name\n if (!own.call(proto, name)) {\n props[name] = attribute.value\n }\n }\n\n // Build.\n const fn = state.schema.space === 'svg' ? s : h\n const result = fn(node.tagName, props, all(state, node.childNodes))\n patch(state, node, result)\n\n // Switch content.\n if (result.tagName === 'template') {\n const reference = /** @type {P5Template} */ (node)\n const pos = reference.sourceCodeLocation\n const startTag = pos && pos.startTag && position(pos.startTag)\n const endTag = pos && pos.endTag && position(pos.endTag)\n\n // Root in, root out.\n const content = /** @type {Root} */ (one(state, reference.content))\n\n if (startTag && endTag && state.file) {\n content.position = {start: startTag.end, end: endTag.start}\n }\n\n result.content = content\n }\n\n state.schema = schema\n\n return result\n}\n\n/**\n * Patch positional info from `from` onto `to`.\n *\n * @param {State} state\n * Info passed around about the current state.\n * @param {P5Node} from\n * p5 node.\n * @param {Nodes} to\n * hast node.\n * @returns {undefined}\n * Nothing.\n */\nfunction patch(state, from, to) {\n if ('sourceCodeLocation' in from && from.sourceCodeLocation && state.file) {\n const position = createLocation(state, to, from.sourceCodeLocation)\n\n if (position) {\n state.location = true\n to.position = position\n }\n }\n}\n\n/**\n * Create clean positional information.\n *\n * @param {State} state\n * Info passed around about the current state.\n * @param {Nodes} node\n * hast node.\n * @param {P5ElementLocation} location\n * p5 location info.\n * @returns {Position | undefined}\n * Position, or nothing.\n */\nfunction createLocation(state, node, location) {\n const result = position(location)\n\n if (node.type === 'element') {\n const tail = node.children[node.children.length - 1]\n\n // Bug for unclosed with children.\n // See: <https://github.com/inikulin/parse5/issues/109>.\n if (\n result &&\n !location.endTag &&\n tail &&\n tail.position &&\n tail.position.end\n ) {\n result.end = Object.assign({}, tail.position.end)\n }\n\n if (state.verbose) {\n /** @type {Record<string, Position | undefined>} */\n const props = {}\n /** @type {string} */\n let key\n\n if (location.attrs) {\n for (key in location.attrs) {\n if (own.call(location.attrs, key)) {\n props[find(state.schema, key).property] = position(\n location.attrs[key]\n )\n }\n }\n }\n\n assert(location.startTag, 'a start tag should exist')\n const opening = position(location.startTag)\n const closing = location.endTag ? position(location.endTag) : undefined\n /** @type {ElementData['position']} */\n const data = {opening}\n if (closing) data.closing = closing\n data.properties = props\n\n node.data = {position: data}\n }\n }\n\n return result\n}\n\n/**\n * Turn a p5 location into a position.\n *\n * @param {P5Location} loc\n * Location.\n * @returns {Position | undefined}\n * Position or nothing.\n */\nfunction position(loc) {\n const start = point({\n line: loc.startLine,\n column: loc.startCol,\n offset: loc.startOffset\n })\n const end = point({\n line: loc.endLine,\n column: loc.endCol,\n offset: loc.endOffset\n })\n\n // @ts-expect-error: we do use `undefined` for points if one or the other\n // exists.\n return start || end ? {start, end} : undefined\n}\n\n/**\n * Filter out invalid points.\n *\n * @param {Point} point\n * Point with potentially `undefined` values.\n * @returns {Point | undefined}\n * Point or nothing.\n */\nfunction point(point) {\n return point.line && point.column ? point : undefined\n}\n","/**\n * @callback Handler\n * Handle a value, with a certain ID field set to a certain value.\n * The ID field is passed to `zwitch`, and it’s value is this function’s\n * place on the `handlers` record.\n * @param {...any} parameters\n * Arbitrary parameters passed to the zwitch.\n * The first will be an object with a certain ID field set to a certain value.\n * @returns {any}\n * Anything!\n */\n\n/**\n * @callback UnknownHandler\n * Handle values that do have a certain ID field, but it’s set to a value\n * that is not listed in the `handlers` record.\n * @param {unknown} value\n * An object with a certain ID field set to an unknown value.\n * @param {...any} rest\n * Arbitrary parameters passed to the zwitch.\n * @returns {any}\n * Anything!\n */\n\n/**\n * @callback InvalidHandler\n * Handle values that do not have a certain ID field.\n * @param {unknown} value\n * Any unknown value.\n * @param {...any} rest\n * Arbitrary parameters passed to the zwitch.\n * @returns {void|null|undefined|never}\n * This should crash or return nothing.\n */\n\n/**\n * @template {InvalidHandler} [Invalid=InvalidHandler]\n * @template {UnknownHandler} [Unknown=UnknownHandler]\n * @template {Record<string, Handler>} [Handlers=Record<string, Handler>]\n * @typedef Options\n * Configuration (required).\n * @property {Invalid} [invalid]\n * Handler to use for invalid values.\n * @property {Unknown} [unknown]\n * Handler to use for unknown values.\n * @property {Handlers} [handlers]\n * Handlers to use.\n */\n\nconst own = {}.hasOwnProperty\n\n/**\n * Handle values based on a field.\n *\n * @template {InvalidHandler} [Invalid=InvalidHandler]\n * @template {UnknownHandler} [Unknown=UnknownHandler]\n * @template {Record<string, Handler>} [Handlers=Record<string, Handler>]\n * @param {string} key\n * Field to switch on.\n * @param {Options<Invalid, Unknown, Handlers>} [options]\n * Configuration (required).\n * @returns {{unknown: Unknown, invalid: Invalid, handlers: Handlers, (...parameters: Parameters<Handlers[keyof Handlers]>): ReturnType<Handlers[keyof Handlers]>, (...parameters: Parameters<Unknown>): ReturnType<Unknown>}}\n */\nexport function zwitch(key, options) {\n const settings = options || {}\n\n /**\n * Handle one value.\n *\n * Based on the bound `key`, a respective handler will be called.\n * If `value` is not an object, or doesn’t have a `key` property, the special\n * “invalid” handler will be called.\n * If `value` has an unknown `key`, the special “unknown” handler will be\n * called.\n *\n * All arguments, and the context object, are passed through to the handler,\n * and it’s result is returned.\n *\n * @this {unknown}\n * Any context object.\n * @param {unknown} [value]\n * Any value.\n * @param {...unknown} parameters\n * Arbitrary parameters passed to the zwitch.\n * @property {Handler} invalid\n * Handle for values that do not have a certain ID field.\n * @property {Handler} unknown\n * Handle values that do have a certain ID field, but it’s set to a value\n * that is not listed in the `handlers` record.\n * @property {Handlers} handlers\n * Record of handlers.\n * @returns {unknown}\n * Anything.\n */\n function one(value, ...parameters) {\n /** @type {Handler|undefined} */\n let fn = one.invalid\n const handlers = one.handlers\n\n if (value && own.call(value, key)) {\n // @ts-expect-error Indexable.\n const id = String(value[key])\n // @ts-expect-error Indexable.\n fn = own.call(handlers, id) ? handlers[id] : one.unknown\n }\n\n if (fn) {\n return fn.call(this, value, ...parameters)\n }\n }\n\n one.handlers = settings.handlers || {}\n one.invalid = settings.invalid\n one.unknown = settings.unknown\n\n // @ts-expect-error: matches!\n return one\n}\n","/**\n * @typedef {import('hast').Comment} Comment\n * @typedef {import('hast').Doctype} Doctype\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').Nodes} Nodes\n * @typedef {import('hast').Root} Root\n * @typedef {import('hast').RootContent} RootContent\n * @typedef {import('hast').Text} Text\n *\n * @typedef {import('parse5').DefaultTreeAdapterMap['document']} Parse5Document\n * @typedef {import('parse5').DefaultTreeAdapterMap['documentFragment']} Parse5Fragment\n * @typedef {import('parse5').DefaultTreeAdapterMap['element']} Parse5Element\n * @typedef {import('parse5').DefaultTreeAdapterMap['node']} Parse5Nodes\n * @typedef {import('parse5').DefaultTreeAdapterMap['documentType']} Parse5Doctype\n * @typedef {import('parse5').DefaultTreeAdapterMap['commentNode']} Parse5Comment\n * @typedef {import('parse5').DefaultTreeAdapterMap['textNode']} Parse5Text\n * @typedef {import('parse5').DefaultTreeAdapterMap['parentNode']} Parse5Parent\n * @typedef {import('parse5').Token.Attribute} Parse5Attribute\n *\n * @typedef {import('property-information').Schema} Schema\n */\n\n/**\n * @typedef Options\n * Configuration.\n * @property {Space | null | undefined} [space='html']\n * Which space the document is in (default: `'html'`).\n *\n * When an `<svg>` element is found in the HTML space, this package already\n * automatically switches to and from the SVG space when entering and exiting\n * it.\n *\n * @typedef {Exclude<Parse5Nodes, Parse5Document | Parse5Fragment>} Parse5Content\n *\n * @typedef {'html' | 'svg'} Space\n */\n\nimport {stringify as commas} from 'comma-separated-tokens'\nimport {ok as assert} from 'devlop'\nimport {find, html, svg} from 'property-information'\nimport {stringify as spaces} from 'space-separated-tokens'\nimport {webNamespaces} from 'web-namespaces'\nimport {zwitch} from 'zwitch'\n\n/** @type {Options} */\nconst emptyOptions = {}\n\nconst own = {}.hasOwnProperty\n\nconst one = zwitch('type', {handlers: {root, element, text, comment, doctype}})\n\n/**\n * Transform a hast tree to a `parse5` AST.\n *\n * @param {Nodes} tree\n * Tree to transform.\n * @param {Options | null | undefined} [options]\n * Configuration (optional).\n * @returns {Parse5Nodes}\n * `parse5` node.\n */\nexport function toParse5(tree, options) {\n const settings = options || emptyOptions\n const space = settings.space\n return one(tree, space === 'svg' ? svg : html)\n}\n\n/**\n * @param {Root} node\n * Node (hast) to transform.\n * @param {Schema} schema\n * Current schema.\n * @returns {Parse5Document}\n * Parse5 node.\n */\nfunction root(node, schema) {\n /** @type {Parse5Document} */\n const result = {\n nodeName: '#document',\n // @ts-expect-error: `parse5` uses enums, which are actually strings.\n mode: (node.data || {}).quirksMode ? 'quirks' : 'no-quirks',\n childNodes: []\n }\n result.childNodes = all(node.children, result, schema)\n patch(node, result)\n return result\n}\n\n/**\n * @param {Root} node\n * Node (hast) to transform.\n * @param {Schema} schema\n * Current schema.\n * @returns {Parse5Fragment}\n * Parse5 node.\n */\nfunction fragment(node, schema) {\n /** @type {Parse5Fragment} */\n const result = {nodeName: '#document-fragment', childNodes: []}\n result.childNodes = all(node.children, result, schema)\n patch(node, result)\n return result\n}\n\n/**\n * @param {Doctype} node\n * Node (hast) to transform.\n * @returns {Parse5Doctype}\n * Parse5 node.\n */\nfunction doctype(node) {\n /** @type {Parse5Doctype} */\n const result = {\n nodeName: '#documentType',\n name: 'html',\n publicId: '',\n systemId: '',\n parentNode: null\n }\n\n patch(node, result)\n return result\n}\n\n/**\n * @param {Text} node\n * Node (hast) to transform.\n * @returns {Parse5Text}\n * Parse5 node.\n */\nfunction text(node) {\n /** @type {Parse5Text} */\n const result = {\n nodeName: '#text',\n value: node.value,\n parentNode: null\n }\n patch(node, result)\n return result\n}\n\n/**\n * @param {Comment} node\n * Node (hast) to transform.\n * @returns {Parse5Comment}\n * Parse5 node.\n */\nfunction comment(node) {\n /** @type {Parse5Comment} */\n const result = {\n nodeName: '#comment',\n data: node.value,\n parentNode: null\n }\n\n patch(node, result)\n\n return result\n}\n\n/**\n * @param {Element} node\n * Node (hast) to transform.\n * @param {Schema} schema\n * Current schema.\n * @returns {Parse5Element}\n * Parse5 node.\n */\nfunction element(node, schema) {\n const parentSchema = schema\n let currentSchema = parentSchema\n\n if (\n node.type === 'element' &&\n node.tagName.toLowerCase() === 'svg' &&\n parentSchema.space === 'html'\n ) {\n currentSchema = svg\n }\n\n /** @type {Array<Parse5Attribute>} */\n const attrs = []\n /** @type {string} */\n let prop\n\n if (node.properties) {\n for (prop in node.properties) {\n if (prop !== 'children' && own.call(node.properties, prop)) {\n const result = createProperty(\n currentSchema,\n prop,\n node.properties[prop]\n )\n\n if (result) {\n attrs.push(result)\n }\n }\n }\n }\n\n const space = currentSchema.space\n // `html` and `svg` both have a space.\n assert(space)\n\n /** @type {Parse5Element} */\n const result = {\n nodeName: node.tagName,\n tagName: node.tagName,\n attrs,\n // @ts-expect-error: `parse5` types are wrong.\n namespaceURI: webNamespaces[space],\n childNodes: [],\n parentNode: null\n }\n result.childNodes = all(node.children, result, currentSchema)\n patch(node, result)\n\n if (node.tagName === 'template' && node.content) {\n // @ts-expect-error: `parse5` types are wrong.\n result.content = fragment(node.content, currentSchema)\n }\n\n return result\n}\n\n/**\n * Handle a property.\n *\n * @param {Schema} schema\n * Current schema.\n * @param {string} prop\n * Key.\n * @param {Array<number | string> | boolean | number | string | null | undefined} value\n * hast property value.\n * @returns {Parse5Attribute | undefined}\n * Field for runtime, optional.\n */\nfunction createProperty(schema, prop, value) {\n const info = find(schema, prop)\n\n // Ignore nullish and `NaN` values.\n if (\n value === false ||\n value === null ||\n value === undefined ||\n (typeof value === 'number' && Number.isNaN(value)) ||\n (!value && info.boolean)\n ) {\n return\n }\n\n if (Array.isArray(value)) {\n // Accept `array`.\n // Most props are space-separated.\n value = info.commaSeparated ? commas(value) : spaces(value)\n }\n\n /** @type {Parse5Attribute} */\n const attribute = {\n name: info.attribute,\n value: value === true ? '' : String(value)\n }\n\n if (info.space && info.space !== 'html' && info.space !== 'svg') {\n const index = attribute.name.indexOf(':')\n\n if (index < 0) {\n attribute.prefix = ''\n } else {\n attribute.name = attribute.name.slice(index + 1)\n attribute.prefix = info.attribute.slice(0, index)\n }\n\n attribute.namespace = webNamespaces[info.space]\n }\n\n return attribute\n}\n\n/**\n * Transform all hast nodes.\n *\n * @param {Array<RootContent>} children\n * List of children.\n * @param {Parse5Parent} parentNode\n * `parse5` parent node.\n * @param {Schema} schema\n * Current schema.\n * @returns {Array<Parse5Content>}\n * Transformed children.\n */\nfunction all(children, parentNode, schema) {\n let index = -1\n /** @type {Array<Parse5Content>} */\n const results = []\n\n if (children) {\n while (++index < children.length) {\n /** @type {Parse5Content} */\n const child = one(children[index], schema)\n\n child.parentNode = parentNode\n\n results.push(child)\n }\n }\n\n return results\n}\n\n/**\n * Add position info from `from` to `to`.\n *\n * @param {Nodes} from\n * hast node.\n * @param {Parse5Nodes} to\n * `parse5` node.\n * @returns {undefined}\n * Nothing.\n */\nfunction patch(from, to) {\n const position = from.position\n\n if (position && position.start && position.end) {\n assert(typeof position.start.offset === 'number')\n assert(typeof position.end.offset === 'number')\n\n to.sourceCodeLocation = {\n startLine: position.start.line,\n startCol: position.start.column,\n startOffset: position.start.offset,\n endLine: position.end.line,\n endCol: position.end.column,\n endOffset: position.end.offset\n }\n }\n}\n","/**\n * List of HTML void tag names.\n *\n * @type {Array<string>}\n */\nexport const htmlVoidElements = [\n 'area',\n 'base',\n 'basefont',\n 'bgsound',\n 'br',\n 'col',\n 'command',\n 'embed',\n 'frame',\n 'hr',\n 'image',\n 'img',\n 'input',\n 'keygen',\n 'link',\n 'meta',\n 'param',\n 'source',\n 'track',\n 'wbr'\n]\n","const UNDEFINED_CODE_POINTS = new Set([\n 65534, 65535, 131070, 131071, 196606, 196607, 262142, 262143, 327678, 327679, 393214,\n 393215, 458750, 458751, 524286, 524287, 589822, 589823, 655358, 655359, 720894,\n 720895, 786430, 786431, 851966, 851967, 917502, 917503, 983038, 983039, 1048574,\n 1048575, 1114110, 1114111,\n]);\nexport const REPLACEMENT_CHARACTER = '\\uFFFD';\nexport var CODE_POINTS;\n(function (CODE_POINTS) {\n CODE_POINTS[CODE_POINTS[\"EOF\"] = -1] = \"EOF\";\n CODE_POINTS[CODE_POINTS[\"NULL\"] = 0] = \"NULL\";\n CODE_POINTS[CODE_POINTS[\"TABULATION\"] = 9] = \"TABULATION\";\n CODE_POINTS[CODE_POINTS[\"CARRIAGE_RETURN\"] = 13] = \"CARRIAGE_RETURN\";\n CODE_POINTS[CODE_POINTS[\"LINE_FEED\"] = 10] = \"LINE_FEED\";\n CODE_POINTS[CODE_POINTS[\"FORM_FEED\"] = 12] = \"FORM_FEED\";\n CODE_POINTS[CODE_POINTS[\"SPACE\"] = 32] = \"SPACE\";\n CODE_POINTS[CODE_POINTS[\"EXCLAMATION_MARK\"] = 33] = \"EXCLAMATION_MARK\";\n CODE_POINTS[CODE_POINTS[\"QUOTATION_MARK\"] = 34] = \"QUOTATION_MARK\";\n CODE_POINTS[CODE_POINTS[\"NUMBER_SIGN\"] = 35] = \"NUMBER_SIGN\";\n CODE_POINTS[CODE_POINTS[\"AMPERSAND\"] = 38] = \"AMPERSAND\";\n CODE_POINTS[CODE_POINTS[\"APOSTROPHE\"] = 39] = \"APOSTROPHE\";\n CODE_POINTS[CODE_POINTS[\"HYPHEN_MINUS\"] = 45] = \"HYPHEN_MINUS\";\n CODE_POINTS[CODE_POINTS[\"SOLIDUS\"] = 47] = \"SOLIDUS\";\n CODE_POINTS[CODE_POINTS[\"DIGIT_0\"] = 48] = \"DIGIT_0\";\n CODE_POINTS[CODE_POINTS[\"DIGIT_9\"] = 57] = \"DIGIT_9\";\n CODE_POINTS[CODE_POINTS[\"SEMICOLON\"] = 59] = \"SEMICOLON\";\n CODE_POINTS[CODE_POINTS[\"LESS_THAN_SIGN\"] = 60] = \"LESS_THAN_SIGN\";\n CODE_POINTS[CODE_POINTS[\"EQUALS_SIGN\"] = 61] = \"EQUALS_SIGN\";\n CODE_POINTS[CODE_POINTS[\"GREATER_THAN_SIGN\"] = 62] = \"GREATER_THAN_SIGN\";\n CODE_POINTS[CODE_POINTS[\"QUESTION_MARK\"] = 63] = \"QUESTION_MARK\";\n CODE_POINTS[CODE_POINTS[\"LATIN_CAPITAL_A\"] = 65] = \"LATIN_CAPITAL_A\";\n CODE_POINTS[CODE_POINTS[\"LATIN_CAPITAL_F\"] = 70] = \"LATIN_CAPITAL_F\";\n CODE_POINTS[CODE_POINTS[\"LATIN_CAPITAL_X\"] = 88] = \"LATIN_CAPITAL_X\";\n CODE_POINTS[CODE_POINTS[\"LATIN_CAPITAL_Z\"] = 90] = \"LATIN_CAPITAL_Z\";\n CODE_POINTS[CODE_POINTS[\"RIGHT_SQUARE_BRACKET\"] = 93] = \"RIGHT_SQUARE_BRACKET\";\n CODE_POINTS[CODE_POINTS[\"GRAVE_ACCENT\"] = 96] = \"GRAVE_ACCENT\";\n CODE_POINTS[CODE_POINTS[\"LATIN_SMALL_A\"] = 97] = \"LATIN_SMALL_A\";\n CODE_POINTS[CODE_POINTS[\"LATIN_SMALL_F\"] = 102] = \"LATIN_SMALL_F\";\n CODE_POINTS[CODE_POINTS[\"LATIN_SMALL_X\"] = 120] = \"LATIN_SMALL_X\";\n CODE_POINTS[CODE_POINTS[\"LATIN_SMALL_Z\"] = 122] = \"LATIN_SMALL_Z\";\n CODE_POINTS[CODE_POINTS[\"REPLACEMENT_CHARACTER\"] = 65533] = \"REPLACEMENT_CHARACTER\";\n})(CODE_POINTS = CODE_POINTS || (CODE_POINTS = {}));\nexport const SEQUENCES = {\n DASH_DASH: '--',\n CDATA_START: '[CDATA[',\n DOCTYPE: 'doctype',\n SCRIPT: 'script',\n PUBLIC: 'public',\n SYSTEM: 'system',\n};\n//Surrogates\nexport function isSurrogate(cp) {\n return cp >= 55296 && cp <= 57343;\n}\nexport function isSurrogatePair(cp) {\n return cp >= 56320 && cp <= 57343;\n}\nexport function getSurrogatePairCodePoint(cp1, cp2) {\n return (cp1 - 55296) * 1024 + 9216 + cp2;\n}\n//NOTE: excluding NULL and ASCII whitespace\nexport function isControlCodePoint(cp) {\n return ((cp !== 0x20 && cp !== 0x0a && cp !== 0x0d && cp !== 0x09 && cp !== 0x0c && cp >= 0x01 && cp <= 0x1f) ||\n (cp >= 0x7f && cp <= 0x9f));\n}\nexport function isUndefinedCodePoint(cp) {\n return (cp >= 64976 && cp <= 65007) || UNDEFINED_CODE_POINTS.has(cp);\n}\n//# sourceMappingURL=unicode.js.map","export var ERR;\n(function (ERR) {\n ERR[\"controlCharacterInInputStream\"] = \"control-character-in-input-stream\";\n ERR[\"noncharacterInInputStream\"] = \"noncharacter-in-input-stream\";\n ERR[\"surrogateInInputStream\"] = \"surrogate-in-input-stream\";\n ERR[\"nonVoidHtmlElementStartTagWithTrailingSolidus\"] = \"non-void-html-element-start-tag-with-trailing-solidus\";\n ERR[\"endTagWithAttributes\"] = \"end-tag-with-attributes\";\n ERR[\"endTagWithTrailingSolidus\"] = \"end-tag-with-trailing-solidus\";\n ERR[\"unexpectedSolidusInTag\"] = \"unexpected-solidus-in-tag\";\n ERR[\"unexpectedNullCharacter\"] = \"unexpected-null-character\";\n ERR[\"unexpectedQuestionMarkInsteadOfTagName\"] = \"unexpected-question-mark-instead-of-tag-name\";\n ERR[\"invalidFirstCharacterOfTagName\"] = \"invalid-first-character-of-tag-name\";\n ERR[\"unexpectedEqualsSignBeforeAttributeName\"] = \"unexpected-equals-sign-before-attribute-name\";\n ERR[\"missingEndTagName\"] = \"missing-end-tag-name\";\n ERR[\"unexpectedCharacterInAttributeName\"] = \"unexpected-character-in-attribute-name\";\n ERR[\"unknownNamedCharacterReference\"] = \"unknown-named-character-reference\";\n ERR[\"missingSemicolonAfterCharacterReference\"] = \"missing-semicolon-after-character-reference\";\n ERR[\"unexpectedCharacterAfterDoctypeSystemIdentifier\"] = \"unexpected-character-after-doctype-system-identifier\";\n ERR[\"unexpectedCharacterInUnquotedAttributeValue\"] = \"unexpected-character-in-unquoted-attribute-value\";\n ERR[\"eofBeforeTagName\"] = \"eof-before-tag-name\";\n ERR[\"eofInTag\"] = \"eof-in-tag\";\n ERR[\"missingAttributeValue\"] = \"missing-attribute-value\";\n ERR[\"missingWhitespaceBetweenAttributes\"] = \"missing-whitespace-between-attributes\";\n ERR[\"missingWhitespaceAfterDoctypePublicKeyword\"] = \"missing-whitespace-after-doctype-public-keyword\";\n ERR[\"missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers\"] = \"missing-whitespace-between-doctype-public-and-system-identifiers\";\n ERR[\"missingWhitespaceAfterDoctypeSystemKeyword\"] = \"missing-whitespace-after-doctype-system-keyword\";\n ERR[\"missingQuoteBeforeDoctypePublicIdentifier\"] = \"missing-quote-before-doctype-public-identifier\";\n ERR[\"missingQuoteBeforeDoctypeSystemIdentifier\"] = \"missing-quote-before-doctype-system-identifier\";\n ERR[\"missingDoctypePublicIdentifier\"] = \"missing-doctype-public-identifier\";\n ERR[\"missingDoctypeSystemIdentifier\"] = \"missing-doctype-system-identifier\";\n ERR[\"abruptDoctypePublicIdentifier\"] = \"abrupt-doctype-public-identifier\";\n ERR[\"abruptDoctypeSystemIdentifier\"] = \"abrupt-doctype-system-identifier\";\n ERR[\"cdataInHtmlContent\"] = \"cdata-in-html-content\";\n ERR[\"incorrectlyOpenedComment\"] = \"incorrectly-opened-comment\";\n ERR[\"eofInScriptHtmlCommentLikeText\"] = \"eof-in-script-html-comment-like-text\";\n ERR[\"eofInDoctype\"] = \"eof-in-doctype\";\n ERR[\"nestedComment\"] = \"nested-comment\";\n ERR[\"abruptClosingOfEmptyComment\"] = \"abrupt-closing-of-empty-comment\";\n ERR[\"eofInComment\"] = \"eof-in-comment\";\n ERR[\"incorrectlyClosedComment\"] = \"incorrectly-closed-comment\";\n ERR[\"eofInCdata\"] = \"eof-in-cdata\";\n ERR[\"absenceOfDigitsInNumericCharacterReference\"] = \"absence-of-digits-in-numeric-character-reference\";\n ERR[\"nullCharacterReference\"] = \"null-character-reference\";\n ERR[\"surrogateCharacterReference\"] = \"surrogate-character-reference\";\n ERR[\"characterReferenceOutsideUnicodeRange\"] = \"character-reference-outside-unicode-range\";\n ERR[\"controlCharacterReference\"] = \"control-character-reference\";\n ERR[\"noncharacterCharacterReference\"] = \"noncharacter-character-reference\";\n ERR[\"missingWhitespaceBeforeDoctypeName\"] = \"missing-whitespace-before-doctype-name\";\n ERR[\"missingDoctypeName\"] = \"missing-doctype-name\";\n ERR[\"invalidCharacterSequenceAfterDoctypeName\"] = \"invalid-character-sequence-after-doctype-name\";\n ERR[\"duplicateAttribute\"] = \"duplicate-attribute\";\n ERR[\"nonConformingDoctype\"] = \"non-conforming-doctype\";\n ERR[\"missingDoctype\"] = \"missing-doctype\";\n ERR[\"misplacedDoctype\"] = \"misplaced-doctype\";\n ERR[\"endTagWithoutMatchingOpenElement\"] = \"end-tag-without-matching-open-element\";\n ERR[\"closingOfElementWithOpenChildElements\"] = \"closing-of-element-with-open-child-elements\";\n ERR[\"disallowedContentInNoscriptInHead\"] = \"disallowed-content-in-noscript-in-head\";\n ERR[\"openElementsLeftAfterEof\"] = \"open-elements-left-after-eof\";\n ERR[\"abandonedHeadElementChild\"] = \"abandoned-head-element-child\";\n ERR[\"misplacedStartTagForHeadElement\"] = \"misplaced-start-tag-for-head-element\";\n ERR[\"nestedNoscriptInHead\"] = \"nested-noscript-in-head\";\n ERR[\"eofInElementThatCanContainOnlyText\"] = \"eof-in-element-that-can-contain-only-text\";\n})(ERR = ERR || (ERR = {}));\n//# sourceMappingURL=error-codes.js.map","import { CODE_POINTS as $, getSurrogatePairCodePoint, isControlCodePoint, isSurrogate, isSurrogatePair, isUndefinedCodePoint, } from '../common/unicode.js';\nimport { ERR } from '../common/error-codes.js';\n//Const\nconst DEFAULT_BUFFER_WATERLINE = 1 << 16;\n//Preprocessor\n//NOTE: HTML input preprocessing\n//(see: http://www.whatwg.org/specs/web-apps/current-work/multipage/parsing.html#preprocessing-the-input-stream)\nexport class Preprocessor {\n constructor(handler) {\n this.handler = handler;\n this.html = '';\n this.pos = -1;\n // NOTE: Initial `lastGapPos` is -2, to ensure `col` on initialisation is 0\n this.lastGapPos = -2;\n this.gapStack = [];\n this.skipNextNewLine = false;\n this.lastChunkWritten = false;\n this.endOfChunkHit = false;\n this.bufferWaterline = DEFAULT_BUFFER_WATERLINE;\n this.isEol = false;\n this.lineStartPos = 0;\n this.droppedBufferSize = 0;\n this.line = 1;\n //NOTE: avoid reporting errors twice on advance/retreat\n this.lastErrOffset = -1;\n }\n /** The column on the current line. If we just saw a gap (eg. a surrogate pair), return the index before. */\n get col() {\n return this.pos - this.lineStartPos + Number(this.lastGapPos !== this.pos);\n }\n get offset() {\n return this.droppedBufferSize + this.pos;\n }\n getError(code) {\n const { line, col, offset } = this;\n return {\n code,\n startLine: line,\n endLine: line,\n startCol: col,\n endCol: col,\n startOffset: offset,\n endOffset: offset,\n };\n }\n _err(code) {\n if (this.handler.onParseError && this.lastErrOffset !== this.offset) {\n this.lastErrOffset = this.offset;\n this.handler.onParseError(this.getError(code));\n }\n }\n _addGap() {\n this.gapStack.push(this.lastGapPos);\n this.lastGapPos = this.pos;\n }\n _processSurrogate(cp) {\n //NOTE: try to peek a surrogate pair\n if (this.pos !== this.html.length - 1) {\n const nextCp = this.html.charCodeAt(this.pos + 1);\n if (isSurrogatePair(nextCp)) {\n //NOTE: we have a surrogate pair. Peek pair character and recalculate code point.\n this.pos++;\n //NOTE: add a gap that should be avoided during retreat\n this._addGap();\n return getSurrogatePairCodePoint(cp, nextCp);\n }\n }\n //NOTE: we are at the end of a chunk, therefore we can't infer the surrogate pair yet.\n else if (!this.lastChunkWritten) {\n this.endOfChunkHit = true;\n return $.EOF;\n }\n //NOTE: isolated surrogate\n this._err(ERR.surrogateInInputStream);\n return cp;\n }\n willDropParsedChunk() {\n return this.pos > this.bufferWaterline;\n }\n dropParsedChunk() {\n if (this.willDropParsedChunk()) {\n this.html = this.html.substring(this.pos);\n this.lineStartPos -= this.pos;\n this.droppedBufferSize += this.pos;\n this.pos = 0;\n this.lastGapPos = -2;\n this.gapStack.length = 0;\n }\n }\n write(chunk, isLastChunk) {\n if (this.html.length > 0) {\n this.html += chunk;\n }\n else {\n this.html = chunk;\n }\n this.endOfChunkHit = false;\n this.lastChunkWritten = isLastChunk;\n }\n insertHtmlAtCurrentPos(chunk) {\n this.html = this.html.substring(0, this.pos + 1) + chunk + this.html.substring(this.pos + 1);\n this.endOfChunkHit = false;\n }\n startsWith(pattern, caseSensitive) {\n // Check if our buffer has enough characters\n if (this.pos + pattern.length > this.html.length) {\n this.endOfChunkHit = !this.lastChunkWritten;\n return false;\n }\n if (caseSensitive) {\n return this.html.startsWith(pattern, this.pos);\n }\n for (let i = 0; i < pattern.length; i++) {\n const cp = this.html.charCodeAt(this.pos + i) | 0x20;\n if (cp !== pattern.charCodeAt(i)) {\n return false;\n }\n }\n return true;\n }\n peek(offset) {\n const pos = this.pos + offset;\n if (pos >= this.html.length) {\n this.endOfChunkHit = !this.lastChunkWritten;\n return $.EOF;\n }\n const code = this.html.charCodeAt(pos);\n return code === $.CARRIAGE_RETURN ? $.LINE_FEED : code;\n }\n advance() {\n this.pos++;\n //NOTE: LF should be in the last column of the line\n if (this.isEol) {\n this.isEol = false;\n this.line++;\n this.lineStartPos = this.pos;\n }\n if (this.pos >= this.html.length) {\n this.endOfChunkHit = !this.lastChunkWritten;\n return $.EOF;\n }\n let cp = this.html.charCodeAt(this.pos);\n //NOTE: all U+000D CARRIAGE RETURN (CR) characters must be converted to U+000A LINE FEED (LF) characters\n if (cp === $.CARRIAGE_RETURN) {\n this.isEol = true;\n this.skipNextNewLine = true;\n return $.LINE_FEED;\n }\n //NOTE: any U+000A LINE FEED (LF) characters that immediately follow a U+000D CARRIAGE RETURN (CR) character\n //must be ignored.\n if (cp === $.LINE_FEED) {\n this.isEol = true;\n if (this.skipNextNewLine) {\n // `line` will be bumped again in the recursive call.\n this.line--;\n this.skipNextNewLine = false;\n this._addGap();\n return this.advance();\n }\n }\n this.skipNextNewLine = false;\n if (isSurrogate(cp)) {\n cp = this._processSurrogate(cp);\n }\n //OPTIMIZATION: first check if code point is in the common allowed\n //range (ASCII alphanumeric, whitespaces, big chunk of BMP)\n //before going into detailed performance cost validation.\n const isCommonValidRange = this.handler.onParseError === null ||\n (cp > 0x1f && cp < 0x7f) ||\n cp === $.LINE_FEED ||\n cp === $.CARRIAGE_RETURN ||\n (cp > 0x9f && cp < 64976);\n if (!isCommonValidRange) {\n this._checkForProblematicCharacters(cp);\n }\n return cp;\n }\n _checkForProblematicCharacters(cp) {\n if (isControlCodePoint(cp)) {\n this._err(ERR.controlCharacterInInputStream);\n }\n else if (isUndefinedCodePoint(cp)) {\n this._err(ERR.noncharacterInInputStream);\n }\n }\n retreat(count) {\n this.pos -= count;\n while (this.pos < this.lastGapPos) {\n this.lastGapPos = this.gapStack.pop();\n this.pos--;\n }\n this.isEol = false;\n }\n}\n//# sourceMappingURL=preprocessor.js.map","export var TokenType;\n(function (TokenType) {\n TokenType[TokenType[\"CHARACTER\"] = 0] = \"CHARACTER\";\n TokenType[TokenType[\"NULL_CHARACTER\"] = 1] = \"NULL_CHARACTER\";\n TokenType[TokenType[\"WHITESPACE_CHARACTER\"] = 2] = \"WHITESPACE_CHARACTER\";\n TokenType[TokenType[\"START_TAG\"] = 3] = \"START_TAG\";\n TokenType[TokenType[\"END_TAG\"] = 4] = \"END_TAG\";\n TokenType[TokenType[\"COMMENT\"] = 5] = \"COMMENT\";\n TokenType[TokenType[\"DOCTYPE\"] = 6] = \"DOCTYPE\";\n TokenType[TokenType[\"EOF\"] = 7] = \"EOF\";\n TokenType[TokenType[\"HIBERNATION\"] = 8] = \"HIBERNATION\";\n})(TokenType = TokenType || (TokenType = {}));\nexport function getTokenAttr(token, attrName) {\n for (let i = token.attrs.length - 1; i >= 0; i--) {\n if (token.attrs[i].name === attrName) {\n return token.attrs[i].value;\n }\n }\n return null;\n}\n//# sourceMappingURL=token.js.map","// Generated using scripts/write-decode-map.ts\nexport default new Uint16Array(\n// prettier-ignore\n\"\\u1d41<\\xd5\\u0131\\u028a\\u049d\\u057b\\u05d0\\u0675\\u06de\\u07a2\\u07d6\\u080f\\u0a4a\\u0a91\\u0da1\\u0e6d\\u0f09\\u0f26\\u10ca\\u1228\\u12e1\\u1415\\u149d\\u14c3\\u14df\\u1525\\0\\0\\0\\0\\0\\0\\u156b\\u16cd\\u198d\\u1c12\\u1ddd\\u1f7e\\u2060\\u21b0\\u228d\\u23c0\\u23fb\\u2442\\u2824\\u2912\\u2d08\\u2e48\\u2fce\\u3016\\u32ba\\u3639\\u37ac\\u38fe\\u3a28\\u3a71\\u3ae0\\u3b2e\\u0800EMabcfglmnoprstu\\\\bfms\\x7f\\x84\\x8b\\x90\\x95\\x98\\xa6\\xb3\\xb9\\xc8\\xcflig\\u803b\\xc6\\u40c6P\\u803b&\\u4026cute\\u803b\\xc1\\u40c1reve;\\u4102\\u0100iyx}rc\\u803b\\xc2\\u40c2;\\u4410r;\\uc000\\ud835\\udd04rave\\u803b\\xc0\\u40c0pha;\\u4391acr;\\u4100d;\\u6a53\\u0100gp\\x9d\\xa1on;\\u4104f;\\uc000\\ud835\\udd38plyFunction;\\u6061ing\\u803b\\xc5\\u40c5\\u0100cs\\xbe\\xc3r;\\uc000\\ud835\\udc9cign;\\u6254ilde\\u803b\\xc3\\u40c3ml\\u803b\\xc4\\u40c4\\u0400aceforsu\\xe5\\xfb\\xfe\\u0117\\u011c\\u0122\\u0127\\u012a\\u0100cr\\xea\\xf2kslash;\\u6216\\u0176\\xf6\\xf8;\\u6ae7ed;\\u6306y;\\u4411\\u0180crt\\u0105\\u010b\\u0114ause;\\u6235noullis;\\u612ca;\\u4392r;\\uc000\\ud835\\udd05pf;\\uc000\\ud835\\udd39eve;\\u42d8c\\xf2\\u0113mpeq;\\u624e\\u0700HOacdefhilorsu\\u014d\\u0151\\u0156\\u0180\\u019e\\u01a2\\u01b5\\u01b7\\u01ba\\u01dc\\u0215\\u0273\\u0278\\u027ecy;\\u4427PY\\u803b\\xa9\\u40a9\\u0180cpy\\u015d\\u0162\\u017aute;\\u4106\\u0100;i\\u0167\\u0168\\u62d2talDifferentialD;\\u6145leys;\\u612d\\u0200aeio\\u0189\\u018e\\u0194\\u0198ron;\\u410cdil\\u803b\\xc7\\u40c7rc;\\u4108nint;\\u6230ot;\\u410a\\u0100dn\\u01a7\\u01adilla;\\u40b8terDot;\\u40b7\\xf2\\u017fi;\\u43a7rcle\\u0200DMPT\\u01c7\\u01cb\\u01d1\\u01d6ot;\\u6299inus;\\u6296lus;\\u6295imes;\\u6297o\\u0100cs\\u01e2\\u01f8kwiseContourIntegral;\\u6232eCurly\\u0100DQ\\u0203\\u020foubleQuote;\\u601duote;\\u6019\\u0200lnpu\\u021e\\u0228\\u0247\\u0255on\\u0100;e\\u0225\\u0226\\u6237;\\u6a74\\u0180git\\u022f\\u0236\\u023aruent;\\u6261nt;\\u622fourIntegral;\\u622e\\u0100fr\\u024c\\u024e;\\u6102oduct;\\u6210nterClockwiseContourIntegral;\\u6233oss;\\u6a2fcr;\\uc000\\ud835\\udc9ep\\u0100;C\\u0284\\u0285\\u62d3ap;\\u624d\\u0580DJSZacefios\\u02a0\\u02ac\\u02b0\\u02b4\\u02b8\\u02cb\\u02d7\\u02e1\\u02e6\\u0333\\u048d\\u0100;o\\u0179\\u02a5trahd;\\u6911cy;\\u4402cy;\\u4405cy;\\u440f\\u0180grs\\u02bf\\u02c4\\u02c7ger;\\u6021r;\\u61a1hv;\\u6ae4\\u0100ay\\u02d0\\u02d5ron;\\u410e;\\u4414l\\u0100;t\\u02dd\\u02de\\u6207a;\\u4394r;\\uc000\\ud835\\udd07\\u0100af\\u02eb\\u0327\\u0100cm\\u02f0\\u0322ritical\\u0200ADGT\\u0300\\u0306\\u0316\\u031ccute;\\u40b4o\\u0174\\u030b\\u030d;\\u42d9bleAcute;\\u42ddrave;\\u4060ilde;\\u42dcond;\\u62c4ferentialD;\\u6146\\u0470\\u033d\\0\\0\\0\\u0342\\u0354\\0\\u0405f;\\uc000\\ud835\\udd3b\\u0180;DE\\u0348\\u0349\\u034d\\u40a8ot;\\u60dcqual;\\u6250ble\\u0300CDLRUV\\u0363\\u0372\\u0382\\u03cf\\u03e2\\u03f8ontourIntegra\\xec\\u0239o\\u0274\\u0379\\0\\0\\u037b\\xbb\\u0349nArrow;\\u61d3\\u0100eo\\u0387\\u03a4ft\\u0180ART\\u0390\\u0396\\u03a1rrow;\\u61d0ightArrow;\\u61d4e\\xe5\\u02cang\\u0100LR\\u03ab\\u03c4eft\\u0100AR\\u03b3\\u03b9rrow;\\u67f8ightArrow;\\u67faightArrow;\\u67f9ight\\u0100AT\\u03d8\\u03derrow;\\u61d2ee;\\u62a8p\\u0241\\u03e9\\0\\0\\u03efrrow;\\u61d1ownArrow;\\u61d5erticalBar;\\u6225n\\u0300ABLRTa\\u0412\\u042a\\u0430\\u045e\\u047f\\u037crrow\\u0180;BU\\u041d\\u041e\\u0422\\u6193ar;\\u6913pArrow;\\u61f5reve;\\u4311eft\\u02d2\\u043a\\0\\u0446\\0\\u0450ightVector;\\u6950eeVector;\\u695eector\\u0100;B\\u0459\\u045a\\u61bdar;\\u6956ight\\u01d4\\u0467\\0\\u0471eeVector;\\u695fector\\u0100;B\\u047a\\u047b\\u61c1ar;\\u6957ee\\u0100;A\\u0486\\u0487\\u62a4rrow;\\u61a7\\u0100ct\\u0492\\u0497r;\\uc000\\ud835\\udc9frok;\\u4110\\u0800NTacdfglmopqstux\\u04bd\\u04c0\\u04c4\\u04cb\\u04de\\u04e2\\u04e7\\u04ee\\u04f5\\u0521\\u052f\\u0536\\u0552\\u055d\\u0560\\u0565G;\\u414aH\\u803b\\xd0\\u40d0cute\\u803b\\xc9\\u40c9\\u0180aiy\\u04d2\\u04d7\\u04dcron;\\u411arc\\u803b\\xca\\u40ca;\\u442dot;\\u4116r;\\uc000\\ud835\\udd08rave\\u803b\\xc8\\u40c8ement;\\u6208\\u0100ap\\u04fa\\u04fecr;\\u4112ty\\u0253\\u0506\\0\\0\\u0512mallSquare;\\u65fberySmallSquare;\\u65ab\\u0100gp\\u0526\\u052aon;\\u4118f;\\uc000\\ud835\\udd3csilon;\\u4395u\\u0100ai\\u053c\\u0549l\\u0100;T\\u0542\\u0543\\u6a75ilde;\\u6242librium;\\u61cc\\u0100ci\\u0557\\u055ar;\\u6130m;\\u6a73a;\\u4397ml\\u803b\\xcb\\u40cb\\u0100ip\\u056a\\u056fsts;\\u6203onentialE;\\u6147\\u0280cfios\\u0585\\u0588\\u058d\\u05b2\\u05ccy;\\u4424r;\\uc000\\ud835\\udd09lled\\u0253\\u0597\\0\\0\\u05a3mallSquare;\\u65fcerySmallSquare;\\u65aa\\u0370\\u05ba\\0\\u05bf\\0\\0\\u05c4f;\\uc000\\ud835\\udd3dAll;\\u6200riertrf;\\u6131c\\xf2\\u05cb\\u0600JTabcdfgorst\\u05e8\\u05ec\\u05ef\\u05fa\\u0600\\u0612\\u0616\\u061b\\u061d\\u0623\\u066c\\u0672cy;\\u4403\\u803b>\\u403emma\\u0100;d\\u05f7\\u05f8\\u4393;\\u43dcreve;\\u411e\\u0180eiy\\u0607\\u060c\\u0610dil;\\u4122rc;\\u411c;\\u4413ot;\\u4120r;\\uc000\\ud835\\udd0a;\\u62d9pf;\\uc000\\ud835\\udd3eeater\\u0300EFGLST\\u0635\\u0644\\u064e\\u0656\\u065b\\u0666qual\\u0100;L\\u063e\\u063f\\u6265ess;\\u62dbullEqual;\\u6267reater;\\u6aa2ess;\\u6277lantEqual;\\u6a7eilde;\\u6273cr;\\uc000\\ud835\\udca2;\\u626b\\u0400Aacfiosu\\u0685\\u068b\\u0696\\u069b\\u069e\\u06aa\\u06be\\u06caRDcy;\\u442a\\u0100ct\\u0690\\u0694ek;\\u42c7;\\u405eirc;\\u4124r;\\u610clbertSpace;\\u610b\\u01f0\\u06af\\0\\u06b2f;\\u610dizontalLine;\\u6500\\u0100ct\\u06c3\\u06c5\\xf2\\u06a9rok;\\u4126mp\\u0144\\u06d0\\u06d8ownHum\\xf0\\u012fqual;\\u624f\\u0700EJOacdfgmnostu\\u06fa\\u06fe\\u0703\\u0707\\u070e\\u071a\\u071e\\u0721\\u0728\\u0744\\u0778\\u078b\\u078f\\u0795cy;\\u4415lig;\\u4132cy;\\u4401cute\\u803b\\xcd\\u40cd\\u0100iy\\u0713\\u0718rc\\u803b\\xce\\u40ce;\\u4418ot;\\u4130r;\\u6111rave\\u803b\\xcc\\u40cc\\u0180;ap\\u0720\\u072f\\u073f\\u0100cg\\u0734\\u0737r;\\u412ainaryI;\\u6148lie\\xf3\\u03dd\\u01f4\\u0749\\0\\u0762\\u0100;e\\u074d\\u074e\\u622c\\u0100gr\\u0753\\u0758ral;\\u622bsection;\\u62c2isible\\u0100CT\\u076c\\u0772omma;\\u6063imes;\\u6062\\u0180gpt\\u077f\\u0783\\u0788on;\\u412ef;\\uc000\\ud835\\udd40a;\\u4399cr;\\u6110ilde;\\u4128\\u01eb\\u079a\\0\\u079ecy;\\u4406l\\u803b\\xcf\\u40cf\\u0280cfosu\\u07ac\\u07b7\\u07bc\\u07c2\\u07d0\\u0100iy\\u07b1\\u07b5rc;\\u4134;\\u4419r;\\uc000\\ud835\\udd0dpf;\\uc000\\ud835\\udd41\\u01e3\\u07c7\\0\\u07ccr;\\uc000\\ud835\\udca5rcy;\\u4408kcy;\\u4404\\u0380HJacfos\\u07e4\\u07e8\\u07ec\\u07f1\\u07fd\\u0802\\u0808cy;\\u4425cy;\\u440cppa;\\u439a\\u0100ey\\u07f6\\u07fbdil;\\u4136;\\u441ar;\\uc000\\ud835\\udd0epf;\\uc000\\ud835\\udd42cr;\\uc000\\ud835\\udca6\\u0580JTaceflmost\\u0825\\u0829\\u082c\\u0850\\u0863\\u09b3\\u09b8\\u09c7\\u09cd\\u0a37\\u0a47cy;\\u4409\\u803b<\\u403c\\u0280cmnpr\\u0837\\u083c\\u0841\\u0844\\u084dute;\\u4139bda;\\u439bg;\\u67ealacetrf;\\u6112r;\\u619e\\u0180aey\\u0857\\u085c\\u0861ron;\\u413ddil;\\u413b;\\u441b\\u0100fs\\u0868\\u0970t\\u0500ACDFRTUVar\\u087e\\u08a9\\u08b1\\u08e0\\u08e6\\u08fc\\u092f\\u095b\\u0390\\u096a\\u0100nr\\u0883\\u088fgleBracket;\\u67e8row\\u0180;BR\\u0899\\u089a\\u089e\\u6190ar;\\u61e4ightArrow;\\u61c6eiling;\\u6308o\\u01f5\\u08b7\\0\\u08c3bleBracket;\\u67e6n\\u01d4\\u08c8\\0\\u08d2eeVector;\\u6961ector\\u0100;B\\u08db\\u08dc\\u61c3ar;\\u6959loor;\\u630aight\\u0100AV\\u08ef\\u08f5rrow;\\u6194ector;\\u694e\\u0100er\\u0901\\u0917e\\u0180;AV\\u0909\\u090a\\u0910\\u62a3rrow;\\u61a4ector;\\u695aiangle\\u0180;BE\\u0924\\u0925\\u0929\\u62b2ar;\\u69cfqual;\\u62b4p\\u0180DTV\\u0937\\u0942\\u094cownVector;\\u6951eeVector;\\u6960ector\\u0100;B\\u0956\\u0957\\u61bfar;\\u6958ector\\u0100;B\\u0965\\u0966\\u61bcar;\\u6952ight\\xe1\\u039cs\\u0300EFGLST\\u097e\\u098b\\u0995\\u099d\\u09a2\\u09adqualGreater;\\u62daullEqual;\\u6266reater;\\u6276ess;\\u6aa1lantEqual;\\u6a7dilde;\\u6272r;\\uc000\\ud835\\udd0f\\u0100;e\\u09bd\\u09be\\u62d8ftarrow;\\u61daidot;\\u413f\\u0180npw\\u09d4\\u0a16\\u0a1bg\\u0200LRlr\\u09de\\u09f7\\u0a02\\u0a10eft\\u0100AR\\u09e6\\u09ecrrow;\\u67f5ightArrow;\\u67f7ightArrow;\\u67f6eft\\u0100ar\\u03b3\\u0a0aight\\xe1\\u03bfight\\xe1\\u03caf;\\uc000\\ud835\\udd43er\\u0100LR\\u0a22\\u0a2ceftArrow;\\u6199ightArrow;\\u6198\\u0180cht\\u0a3e\\u0a40\\u0a42\\xf2\\u084c;\\u61b0rok;\\u4141;\\u626a\\u0400acefiosu\\u0a5a\\u0a5d\\u0a60\\u0a77\\u0a7c\\u0a85\\u0a8b\\u0a8ep;\\u6905y;\\u441c\\u0100dl\\u0a65\\u0a6fiumSpace;\\u605flintrf;\\u6133r;\\uc000\\ud835\\udd10nusPlus;\\u6213pf;\\uc000\\ud835\\udd44c\\xf2\\u0a76;\\u439c\\u0480Jacefostu\\u0aa3\\u0aa7\\u0aad\\u0ac0\\u0b14\\u0b19\\u0d91\\u0d97\\u0d9ecy;\\u440acute;\\u4143\\u0180aey\\u0ab4\\u0ab9\\u0aberon;\\u4147dil;\\u4145;\\u441d\\u0180gsw\\u0ac7\\u0af0\\u0b0eative\\u0180MTV\\u0ad3\\u0adf\\u0ae8ediumSpace;\\u600bhi\\u0100cn\\u0ae6\\u0ad8\\xeb\\u0ad9eryThi\\xee\\u0ad9ted\\u0100GL\\u0af8\\u0b06reaterGreate\\xf2\\u0673essLes\\xf3\\u0a48Line;\\u400ar;\\uc000\\ud835\\udd11\\u0200Bnpt\\u0b22\\u0b28\\u0b37\\u0b3areak;\\u6060BreakingSpace;\\u40a0f;\\u6115\\u0680;CDEGHLNPRSTV\\u0b55\\u0b56\\u0b6a\\u0b7c\\u0ba1\\u0beb\\u0c04\\u0c5e\\u0c84\\u0ca6\\u0cd8\\u0d61\\u0d85\\u6aec\\u0100ou\\u0b5b\\u0b64ngruent;\\u6262pCap;\\u626doubleVerticalBar;\\u6226\\u0180lqx\\u0b83\\u0b8a\\u0b9bement;\\u6209ual\\u0100;T\\u0b92\\u0b93\\u6260ilde;\\uc000\\u2242\\u0338ists;\\u6204reater\\u0380;EFGLST\\u0bb6\\u0bb7\\u0bbd\\u0bc9\\u0bd3\\u0bd8\\u0be5\\u626fqual;\\u6271ullEqual;\\uc000\\u2267\\u0338reater;\\uc000\\u226b\\u0338ess;\\u6279lantEqual;\\uc000\\u2a7e\\u0338ilde;\\u6275ump\\u0144\\u0bf2\\u0bfdownHump;\\uc000\\u224e\\u0338qual;\\uc000\\u224f\\u0338e\\u0100fs\\u0c0a\\u0c27tTriangle\\u0180;BE\\u0c1a\\u0c1b\\u0c21\\u62eaar;\\uc000\\u29cf\\u0338qual;\\u62ecs\\u0300;EGLST\\u0c35\\u0c36\\u0c3c\\u0c44\\u0c4b\\u0c58\\u626equal;\\u6270reater;\\u6278ess;\\uc000\\u226a\\u0338lantEqual;\\uc000\\u2a7d\\u0338ilde;\\u6274ested\\u0100GL\\u0c68\\u0c79reaterGreater;\\uc000\\u2aa2\\u0338essLess;\\uc000\\u2aa1\\u0338recedes\\u0180;ES\\u0c92\\u0c93\\u0c9b\\u6280qual;\\uc000\\u2aaf\\u0338lantEqual;\\u62e0\\u0100ei\\u0cab\\u0cb9verseElement;\\u620cghtTriangle\\u0180;BE\\u0ccb\\u0ccc\\u0cd2\\u62ebar;\\uc000\\u29d0\\u0338qual;\\u62ed\\u0100qu\\u0cdd\\u0d0cuareSu\\u0100bp\\u0ce8\\u0cf9set\\u0100;E\\u0cf0\\u0cf3\\uc000\\u228f\\u0338qual;\\u62e2erset\\u0100;E\\u0d03\\u0d06\\uc000\\u2290\\u0338qual;\\u62e3\\u0180bcp\\u0d13\\u0d24\\u0d4eset\\u0100;E\\u0d1b\\u0d1e\\uc000\\u2282\\u20d2qual;\\u6288ceeds\\u0200;EST\\u0d32\\u0d33\\u0d3b\\u0d46\\u6281qual;\\uc000\\u2ab0\\u0338lantEqual;\\u62e1ilde;\\uc000\\u227f\\u0338erset\\u0100;E\\u0d58\\u0d5b\\uc000\\u2283\\u20d2qual;\\u6289ilde\\u0200;EFT\\u0d6e\\u0d6f\\u0d75\\u0d7f\\u6241qual;\\u6244ullEqual;\\u6247ilde;\\u6249erticalBar;\\u6224cr;\\uc000\\ud835\\udca9ilde\\u803b\\xd1\\u40d1;\\u439d\\u0700Eacdfgmoprstuv\\u0dbd\\u0dc2\\u0dc9\\u0dd5\\u0ddb\\u0de0\\u0de7\\u0dfc\\u0e02\\u0e20\\u0e22\\u0e32\\u0e3f\\u0e44lig;\\u4152cute\\u803b\\xd3\\u40d3\\u0100iy\\u0dce\\u0dd3rc\\u803b\\xd4\\u40d4;\\u441eblac;\\u4150r;\\uc000\\ud835\\udd12rave\\u803b\\xd2\\u40d2\\u0180aei\\u0dee\\u0df2\\u0df6cr;\\u414cga;\\u43a9cron;\\u439fpf;\\uc000\\ud835\\udd46enCurly\\u0100DQ\\u0e0e\\u0e1aoubleQuote;\\u601cuote;\\u6018;\\u6a54\\u0100cl\\u0e27\\u0e2cr;\\uc000\\ud835\\udcaaash\\u803b\\xd8\\u40d8i\\u016c\\u0e37\\u0e3cde\\u803b\\xd5\\u40d5es;\\u6a37ml\\u803b\\xd6\\u40d6er\\u0100BP\\u0e4b\\u0e60\\u0100ar\\u0e50\\u0e53r;\\u603eac\\u0100ek\\u0e5a\\u0e5c;\\u63deet;\\u63b4arenthesis;\\u63dc\\u0480acfhilors\\u0e7f\\u0e87\\u0e8a\\u0e8f\\u0e92\\u0e94\\u0e9d\\u0eb0\\u0efcrtialD;\\u6202y;\\u441fr;\\uc000\\ud835\\udd13i;\\u43a6;\\u43a0usMinus;\\u40b1\\u0100ip\\u0ea2\\u0eadncareplan\\xe5\\u069df;\\u6119\\u0200;eio\\u0eb9\\u0eba\\u0ee0\\u0ee4\\u6abbcedes\\u0200;EST\\u0ec8\\u0ec9\\u0ecf\\u0eda\\u627aqual;\\u6aaflantEqual;\\u627cilde;\\u627eme;\\u6033\\u0100dp\\u0ee9\\u0eeeuct;\\u620fortion\\u0100;a\\u0225\\u0ef9l;\\u621d\\u0100ci\\u0f01\\u0f06r;\\uc000\\ud835\\udcab;\\u43a8\\u0200Ufos\\u0f11\\u0f16\\u0f1b\\u0f1fOT\\u803b\\\"\\u4022r;\\uc000\\ud835\\udd14pf;\\u611acr;\\uc000\\ud835\\udcac\\u0600BEacefhiorsu\\u0f3e\\u0f43\\u0f47\\u0f60\\u0f73\\u0fa7\\u0faa\\u0fad\\u1096\\u10a9\\u10b4\\u10bearr;\\u6910G\\u803b\\xae\\u40ae\\u0180cnr\\u0f4e\\u0f53\\u0f56ute;\\u4154g;\\u67ebr\\u0100;t\\u0f5c\\u0f5d\\u61a0l;\\u6916\\u0180aey\\u0f67\\u0f6c\\u0f71ron;\\u4158dil;\\u4156;\\u4420\\u0100;v\\u0f78\\u0f79\\u611cerse\\u0100EU\\u0f82\\u0f99\\u0100lq\\u0f87\\u0f8eement;\\u620builibrium;\\u61cbpEquilibrium;\\u696fr\\xbb\\u0f79o;\\u43a1ght\\u0400ACDFTUVa\\u0fc1\\u0feb\\u0ff3\\u1022\\u1028\\u105b\\u1087\\u03d8\\u0100nr\\u0fc6\\u0fd2gleBracket;\\u67e9row\\u0180;BL\\u0fdc\\u0fdd\\u0fe1\\u6192ar;\\u61e5eftArrow;\\u61c4eiling;\\u6309o\\u01f5\\u0ff9\\0\\u1005bleBracket;\\u67e7n\\u01d4\\u100a\\0\\u1014eeVector;\\u695dector\\u0100;B\\u101d\\u101e\\u61c2ar;\\u6955loor;\\u630b\\u0100er\\u102d\\u1043e\\u0180;AV\\u1035\\u1036\\u103c\\u62a2rrow;\\u61a6ector;\\u695biangle\\u0180;BE\\u1050\\u1051\\u1055\\u62b3ar;\\u69d0qual;\\u62b5p\\u0180DTV\\u1063\\u106e\\u1078ownVector;\\u694feeVector;\\u695cector\\u0100;B\\u1082\\u1083\\u61bear;\\u6954ector\\u0100;B\\u1091\\u1092\\u61c0ar;\\u6953\\u0100pu\\u109b\\u109ef;\\u611dndImplies;\\u6970ightarrow;\\u61db\\u0100ch\\u10b9\\u10bcr;\\u611b;\\u61b1leDelayed;\\u69f4\\u0680HOacfhimoqstu\\u10e4\\u10f1\\u10f7\\u10fd\\u1119\\u111e\\u1151\\u1156\\u1161\\u1167\\u11b5\\u11bb\\u11bf\\u0100Cc\\u10e9\\u10eeHcy;\\u4429y;\\u4428FTcy;\\u442ccute;\\u415a\\u0280;aeiy\\u1108\\u1109\\u110e\\u1113\\u1117\\u6abcron;\\u4160dil;\\u415erc;\\u415c;\\u4421r;\\uc000\\ud835\\udd16ort\\u0200DLRU\\u112a\\u1134\\u113e\\u1149ownArrow\\xbb\\u041eeftArrow\\xbb\\u089aightArrow\\xbb\\u0fddpArrow;\\u6191gma;\\u43a3allCircle;\\u6218pf;\\uc000\\ud835\\udd4a\\u0272\\u116d\\0\\0\\u1170t;\\u621aare\\u0200;ISU\\u117b\\u117c\\u1189\\u11af\\u65a1ntersection;\\u6293u\\u0100bp\\u118f\\u119eset\\u0100;E\\u1197\\u1198\\u628fqual;\\u6291erset\\u0100;E\\u11a8\\u11a9\\u6290qual;\\u6292nion;\\u6294cr;\\uc000\\ud835\\udcaear;\\u62c6\\u0200bcmp\\u11c8\\u11db\\u1209\\u120b\\u0100;s\\u11cd\\u11ce\\u62d0et\\u0100;E\\u11cd\\u11d5qual;\\u6286\\u0100ch\\u11e0\\u1205eeds\\u0200;EST\\u11ed\\u11ee\\u11f4\\u11ff\\u627bqual;\\u6ab0lantEqual;\\u627dilde;\\u627fTh\\xe1\\u0f8c;\\u6211\\u0180;es\\u1212\\u1213\\u1223\\u62d1rset\\u0100;E\\u121c\\u121d\\u6283qual;\\u6287et\\xbb\\u1213\\u0580HRSacfhiors\\u123e\\u1244\\u1249\\u1255\\u125e\\u1271\\u1276\\u129f\\u12c2\\u12c8\\u12d1ORN\\u803b\\xde\\u40deADE;\\u6122\\u0100Hc\\u124e\\u1252cy;\\u440by;\\u4426\\u0100bu\\u125a\\u125c;\\u4009;\\u43a4\\u0180aey\\u1265\\u126a\\u126fron;\\u4164dil;\\u4162;\\u4422r;\\uc000\\ud835\\udd17\\u0100ei\\u127b\\u1289\\u01f2\\u1280\\0\\u1287efore;\\u6234a;\\u4398\\u0100cn\\u128e\\u1298kSpace;\\uc000\\u205f\\u200aSpace;\\u6009lde\\u0200;EFT\\u12ab\\u12ac\\u12b2\\u12bc\\u623cqual;\\u6243ullEqual;\\u6245ilde;\\u6248pf;\\uc000\\ud835\\udd4bipleDot;\\u60db\\u0100ct\\u12d6\\u12dbr;\\uc000\\ud835\\udcafrok;\\u4166\\u0ae1\\u12f7\\u130e\\u131a\\u1326\\0\\u132c\\u1331\\0\\0\\0\\0\\0\\u1338\\u133d\\u1377\\u1385\\0\\u13ff\\u1404\\u140a\\u1410\\u0100cr\\u12fb\\u1301ute\\u803b\\xda\\u40dar\\u0100;o\\u1307\\u1308\\u619fcir;\\u6949r\\u01e3\\u1313\\0\\u1316y;\\u440eve;\\u416c\\u0100iy\\u131e\\u1323rc\\u803b\\xdb\\u40db;\\u4423blac;\\u4170r;\\uc000\\ud835\\udd18rave\\u803b\\xd9\\u40d9acr;\\u416a\\u0100di\\u1341\\u1369er\\u0100BP\\u1348\\u135d\\u0100ar\\u134d\\u1350r;\\u405fac\\u0100ek\\u1357\\u1359;\\u63dfet;\\u63b5arenthesis;\\u63ddon\\u0100;P\\u1370\\u1371\\u62c3lus;\\u628e\\u0100gp\\u137b\\u137fon;\\u4172f;\\uc000\\ud835\\udd4c\\u0400ADETadps\\u1395\\u13ae\\u13b8\\u13c4\\u03e8\\u13d2\\u13d7\\u13f3rrow\\u0180;BD\\u1150\\u13a0\\u13a4ar;\\u6912ownArrow;\\u61c5ownArrow;\\u6195quilibrium;\\u696eee\\u0100;A\\u13cb\\u13cc\\u62a5rrow;\\u61a5own\\xe1\\u03f3er\\u0100LR\\u13de\\u13e8eftArrow;\\u6196ightArrow;\\u6197i\\u0100;l\\u13f9\\u13fa\\u43d2on;\\u43a5ing;\\u416ecr;\\uc000\\ud835\\udcb0ilde;\\u4168ml\\u803b\\xdc\\u40dc\\u0480Dbcdefosv\\u1427\\u142c\\u1430\\u1433\\u143e\\u1485\\u148a\\u1490\\u1496ash;\\u62abar;\\u6aeby;\\u4412ash\\u0100;l\\u143b\\u143c\\u62a9;\\u6ae6\\u0100er\\u1443\\u1445;\\u62c1\\u0180bty\\u144c\\u1450\\u147aar;\\u6016\\u0100;i\\u144f\\u1455cal\\u0200BLST\\u1461\\u1465\\u146a\\u1474ar;\\u6223ine;\\u407ceparator;\\u6758ilde;\\u6240ThinSpace;\\u600ar;\\uc000\\ud835\\udd19pf;\\uc000\\ud835\\udd4dcr;\\uc000\\ud835\\udcb1dash;\\u62aa\\u0280cefos\\u14a7\\u14ac\\u14b1\\u14b6\\u14bcirc;\\u4174dge;\\u62c0r;\\uc000\\ud835\\udd1apf;\\uc000\\ud835\\udd4ecr;\\uc000\\ud835\\udcb2\\u0200fios\\u14cb\\u14d0\\u14d2\\u14d8r;\\uc000\\ud835\\udd1b;\\u439epf;\\uc000\\ud835\\udd4fcr;\\uc000\\ud835\\udcb3\\u0480AIUacfosu\\u14f1\\u14f5\\u14f9\\u14fd\\u1504\\u150f\\u1514\\u151a\\u1520cy;\\u442fcy;\\u4407cy;\\u442ecute\\u803b\\xdd\\u40dd\\u0100iy\\u1509\\u150drc;\\u4176;\\u442br;\\uc000\\ud835\\udd1cpf;\\uc000\\ud835\\udd50cr;\\uc000\\ud835\\udcb4ml;\\u4178\\u0400Hacdefos\\u1535\\u1539\\u153f\\u154b\\u154f\\u155d\\u1560\\u1564cy;\\u4416cute;\\u4179\\u0100ay\\u1544\\u1549ron;\\u417d;\\u4417ot;\\u417b\\u01f2\\u1554\\0\\u155boWidt\\xe8\\u0ad9a;\\u4396r;\\u6128pf;\\u6124cr;\\uc000\\ud835\\udcb5\\u0be1\\u1583\\u158a\\u1590\\0\\u15b0\\u15b6\\u15bf\\0\\0\\0\\0\\u15c6\\u15db\\u15eb\\u165f\\u166d\\0\\u1695\\u169b\\u16b2\\u16b9\\0\\u16becute\\u803b\\xe1\\u40e1reve;\\u4103\\u0300;Ediuy\\u159c\\u159d\\u15a1\\u15a3\\u15a8\\u15ad\\u623e;\\uc000\\u223e\\u0333;\\u623frc\\u803b\\xe2\\u40e2te\\u80bb\\xb4\\u0306;\\u4430lig\\u803b\\xe6\\u40e6\\u0100;r\\xb2\\u15ba;\\uc000\\ud835\\udd1erave\\u803b\\xe0\\u40e0\\u0100ep\\u15ca\\u15d6\\u0100fp\\u15cf\\u15d4sym;\\u6135\\xe8\\u15d3ha;\\u43b1\\u0100ap\\u15dfc\\u0100cl\\u15e4\\u15e7r;\\u4101g;\\u6a3f\\u0264\\u15f0\\0\\0\\u160a\\u0280;adsv\\u15fa\\u15fb\\u15ff\\u1601\\u1607\\u6227nd;\\u6a55;\\u6a5clope;\\u6a58;\\u6a5a\\u0380;elmrsz\\u1618\\u1619\\u161b\\u161e\\u163f\\u164f\\u1659\\u6220;\\u69a4e\\xbb\\u1619sd\\u0100;a\\u1625\\u1626\\u6221\\u0461\\u1630\\u1632\\u1634\\u1636\\u1638\\u163a\\u163c\\u163e;\\u69a8;\\u69a9;\\u69aa;\\u69ab;\\u69ac;\\u69ad;\\u69ae;\\u69aft\\u0100;v\\u1645\\u1646\\u621fb\\u0100;d\\u164c\\u164d\\u62be;\\u699d\\u0100pt\\u1654\\u1657h;\\u6222\\xbb\\xb9arr;\\u637c\\u0100gp\\u1663\\u1667on;\\u4105f;\\uc000\\ud835\\udd52\\u0380;Eaeiop\\u12c1\\u167b\\u167d\\u1682\\u1684\\u1687\\u168a;\\u6a70cir;\\u6a6f;\\u624ad;\\u624bs;\\u4027rox\\u0100;e\\u12c1\\u1692\\xf1\\u1683ing\\u803b\\xe5\\u40e5\\u0180cty\\u16a1\\u16a6\\u16a8r;\\uc000\\ud835\\udcb6;\\u402amp\\u0100;e\\u12c1\\u16af\\xf1\\u0288ilde\\u803b\\xe3\\u40e3ml\\u803b\\xe4\\u40e4\\u0100ci\\u16c2\\u16c8onin\\xf4\\u0272nt;\\u6a11\\u0800Nabcdefiklnoprsu\\u16ed\\u16f1\\u1730\\u173c\\u1743\\u1748\\u1778\\u177d\\u17e0\\u17e6\\u1839\\u1850\\u170d\\u193d\\u1948\\u1970ot;\\u6aed\\u0100cr\\u16f6\\u171ek\\u0200ceps\\u1700\\u1705\\u170d\\u1713ong;\\u624cpsilon;\\u43f6rime;\\u6035im\\u0100;e\\u171a\\u171b\\u623dq;\\u62cd\\u0176\\u1722\\u1726ee;\\u62bded\\u0100;g\\u172c\\u172d\\u6305e\\xbb\\u172drk\\u0100;t\\u135c\\u1737brk;\\u63b6\\u0100oy\\u1701\\u1741;\\u4431quo;\\u601e\\u0280cmprt\\u1753\\u175b\\u1761\\u1764\\u1768aus\\u0100;e\\u010a\\u0109ptyv;\\u69b0s\\xe9\\u170cno\\xf5\\u0113\\u0180ahw\\u176f\\u1771\\u1773;\\u43b2;\\u6136een;\\u626cr;\\uc000\\ud835\\udd1fg\\u0380costuvw\\u178d\\u179d\\u17b3\\u17c1\\u17d5\\u17db\\u17de\\u0180aiu\\u1794\\u1796\\u179a\\xf0\\u0760rc;\\u65efp\\xbb\\u1371\\u0180dpt\\u17a4\\u17a8\\u17adot;\\u6a00lus;\\u6a01imes;\\u6a02\\u0271\\u17b9\\0\\0\\u17becup;\\u6a06ar;\\u6605riangle\\u0100du\\u17cd\\u17d2own;\\u65bdp;\\u65b3plus;\\u6a04e\\xe5\\u1444\\xe5\\u14adarow;\\u690d\\u0180ako\\u17ed\\u1826\\u1835\\u0100cn\\u17f2\\u1823k\\u0180lst\\u17fa\\u05ab\\u1802ozenge;\\u69ebriangle\\u0200;dlr\\u1812\\u1813\\u1818\\u181d\\u65b4own;\\u65beeft;\\u65c2ight;\\u65b8k;\\u6423\\u01b1\\u182b\\0\\u1833\\u01b2\\u182f\\0\\u1831;\\u6592;\\u65914;\\u6593ck;\\u6588\\u0100eo\\u183e\\u184d\\u0100;q\\u1843\\u1846\\uc000=\\u20e5uiv;\\uc000\\u2261\\u20e5t;\\u6310\\u0200ptwx\\u1859\\u185e\\u1867\\u186cf;\\uc000\\ud835\\udd53\\u0100;t\\u13cb\\u1863om\\xbb\\u13cctie;\\u62c8\\u0600DHUVbdhmptuv\\u1885\\u1896\\u18aa\\u18bb\\u18d7\\u18db\\u18ec\\u18ff\\u1905\\u190a\\u1910\\u1921\\u0200LRlr\\u188e\\u1890\\u1892\\u1894;\\u6557;\\u6554;\\u6556;\\u6553\\u0280;DUdu\\u18a1\\u18a2\\u18a4\\u18a6\\u18a8\\u6550;\\u6566;\\u6569;\\u6564;\\u6567\\u0200LRlr\\u18b3\\u18b5\\u18b7\\u18b9;\\u655d;\\u655a;\\u655c;\\u6559\\u0380;HLRhlr\\u18ca\\u18cb\\u18cd\\u18cf\\u18d1\\u18d3\\u18d5\\u6551;\\u656c;\\u6563;\\u6560;\\u656b;\\u6562;\\u655fox;\\u69c9\\u0200LRlr\\u18e4\\u18e6\\u18e8\\u18ea;\\u6555;\\u6552;\\u6510;\\u650c\\u0280;DUdu\\u06bd\\u18f7\\u18f9\\u18fb\\u18fd;\\u6565;\\u6568;\\u652c;\\u6534inus;\\u629flus;\\u629eimes;\\u62a0\\u0200LRlr\\u1919\\u191b\\u191d\\u191f;\\u655b;\\u6558;\\u6518;\\u6514\\u0380;HLRhlr\\u1930\\u1931\\u1933\\u1935\\u1937\\u1939\\u193b\\u6502;\\u656a;\\u6561;\\u655e;\\u653c;\\u6524;\\u651c\\u0100ev\\u0123\\u1942bar\\u803b\\xa6\\u40a6\\u0200ceio\\u1951\\u1956\\u195a\\u1960r;\\uc000\\ud835\\udcb7mi;\\u604fm\\u0100;e\\u171a\\u171cl\\u0180;bh\\u1968\\u1969\\u196b\\u405c;\\u69c5sub;\\u67c8\\u016c\\u1974\\u197el\\u0100;e\\u1979\\u197a\\u6022t\\xbb\\u197ap\\u0180;Ee\\u012f\\u1985\\u1987;\\u6aae\\u0100;q\\u06dc\\u06db\\u0ce1\\u19a7\\0\\u19e8\\u1a11\\u1a15\\u1a32\\0\\u1a37\\u1a50\\0\\0\\u1ab4\\0\\0\\u1ac1\\0\\0\\u1b21\\u1b2e\\u1b4d\\u1b52\\0\\u1bfd\\0\\u1c0c\\u0180cpr\\u19ad\\u19b2\\u19ddute;\\u4107\\u0300;abcds\\u19bf\\u19c0\\u19c4\\u19ca\\u19d5\\u19d9\\u6229nd;\\u6a44rcup;\\u6a49\\u0100au\\u19cf\\u19d2p;\\u6a4bp;\\u6a47ot;\\u6a40;\\uc000\\u2229\\ufe00\\u0100eo\\u19e2\\u19e5t;\\u6041\\xee\\u0693\\u0200aeiu\\u19f0\\u19fb\\u1a01\\u1a05\\u01f0\\u19f5\\0\\u19f8s;\\u6a4don;\\u410ddil\\u803b\\xe7\\u40e7rc;\\u4109ps\\u0100;s\\u1a0c\\u1a0d\\u6a4cm;\\u6a50ot;\\u410b\\u0180dmn\\u1a1b\\u1a20\\u1a26il\\u80bb\\xb8\\u01adptyv;\\u69b2t\\u8100\\xa2;e\\u1a2d\\u1a2e\\u40a2r\\xe4\\u01b2r;\\uc000\\ud835\\udd20\\u0180cei\\u1a3d\\u1a40\\u1a4dy;\\u4447ck\\u0100;m\\u1a47\\u1a48\\u6713ark\\xbb\\u1a48;\\u43c7r\\u0380;Ecefms\\u1a5f\\u1a60\\u1a62\\u1a6b\\u1aa4\\u1aaa\\u1aae\\u65cb;\\u69c3\\u0180;el\\u1a69\\u1a6a\\u1a6d\\u42c6q;\\u6257e\\u0261\\u1a74\\0\\0\\u1a88rrow\\u0100lr\\u1a7c\\u1a81eft;\\u61baight;\\u61bb\\u0280RSacd\\u1a92\\u1a94\\u1a96\\u1a9a\\u1a9f\\xbb\\u0f47;\\u64c8st;\\u629birc;\\u629aash;\\u629dnint;\\u6a10id;\\u6aefcir;\\u69c2ubs\\u0100;u\\u1abb\\u1abc\\u6663it\\xbb\\u1abc\\u02ec\\u1ac7\\u1ad4\\u1afa\\0\\u1b0aon\\u0100;e\\u1acd\\u1ace\\u403a\\u0100;q\\xc7\\xc6\\u026d\\u1ad9\\0\\0\\u1ae2a\\u0100;t\\u1ade\\u1adf\\u402c;\\u4040\\u0180;fl\\u1ae8\\u1ae9\\u1aeb\\u6201\\xee\\u1160e\\u0100mx\\u1af1\\u1af6ent\\xbb\\u1ae9e\\xf3\\u024d\\u01e7\\u1afe\\0\\u1b07\\u0100;d\\u12bb\\u1b02ot;\\u6a6dn\\xf4\\u0246\\u0180fry\\u1b10\\u1b14\\u1b17;\\uc000\\ud835\\udd54o\\xe4\\u0254\\u8100\\xa9;s\\u0155\\u1b1dr;\\u6117\\u0100ao\\u1b25\\u1b29rr;\\u61b5ss;\\u6717\\u0100cu\\u1b32\\u1b37r;\\uc000\\ud835\\udcb8\\u0100bp\\u1b3c\\u1b44\\u0100;e\\u1b41\\u1b42\\u6acf;\\u6ad1\\u0100;e\\u1b49\\u1b4a\\u6ad0;\\u6ad2dot;\\u62ef\\u0380delprvw\\u1b60\\u1b6c\\u1b77\\u1b82\\u1bac\\u1bd4\\u1bf9arr\\u0100lr\\u1b68\\u1b6a;\\u6938;\\u6935\\u0270\\u1b72\\0\\0\\u1b75r;\\u62dec;\\u62dfarr\\u0100;p\\u1b7f\\u1b80\\u61b6;\\u693d\\u0300;bcdos\\u1b8f\\u1b90\\u1b96\\u1ba1\\u1ba5\\u1ba8\\u622arcap;\\u6a48\\u0100au\\u1b9b\\u1b9ep;\\u6a46p;\\u6a4aot;\\u628dr;\\u6a45;\\uc000\\u222a\\ufe00\\u0200alrv\\u1bb5\\u1bbf\\u1bde\\u1be3rr\\u0100;m\\u1bbc\\u1bbd\\u61b7;\\u693cy\\u0180evw\\u1bc7\\u1bd4\\u1bd8q\\u0270\\u1bce\\0\\0\\u1bd2re\\xe3\\u1b73u\\xe3\\u1b75ee;\\u62ceedge;\\u62cfen\\u803b\\xa4\\u40a4earrow\\u0100lr\\u1bee\\u1bf3eft\\xbb\\u1b80ight\\xbb\\u1bbde\\xe4\\u1bdd\\u0100ci\\u1c01\\u1c07onin\\xf4\\u01f7nt;\\u6231lcty;\\u632d\\u0980AHabcdefhijlorstuwz\\u1c38\\u1c3b\\u1c3f\\u1c5d\\u1c69\\u1c75\\u1c8a\\u1c9e\\u1cac\\u1cb7\\u1cfb\\u1cff\\u1d0d\\u1d7b\\u1d91\\u1dab\\u1dbb\\u1dc6\\u1dcdr\\xf2\\u0381ar;\\u6965\\u0200glrs\\u1c48\\u1c4d\\u1c52\\u1c54ger;\\u6020eth;\\u6138\\xf2\\u1133h\\u0100;v\\u1c5a\\u1c5b\\u6010\\xbb\\u090a\\u016b\\u1c61\\u1c67arow;\\u690fa\\xe3\\u0315\\u0100ay\\u1c6e\\u1c73ron;\\u410f;\\u4434\\u0180;ao\\u0332\\u1c7c\\u1c84\\u0100gr\\u02bf\\u1c81r;\\u61catseq;\\u6a77\\u0180glm\\u1c91\\u1c94\\u1c98\\u803b\\xb0\\u40b0ta;\\u43b4ptyv;\\u69b1\\u0100ir\\u1ca3\\u1ca8sht;\\u697f;\\uc000\\ud835\\udd21ar\\u0100lr\\u1cb3\\u1cb5\\xbb\\u08dc\\xbb\\u101e\\u0280aegsv\\u1cc2\\u0378\\u1cd6\\u1cdc\\u1ce0m\\u0180;os\\u0326\\u1cca\\u1cd4nd\\u0100;s\\u0326\\u1cd1uit;\\u6666amma;\\u43ddin;\\u62f2\\u0180;io\\u1ce7\\u1ce8\\u1cf8\\u40f7de\\u8100\\xf7;o\\u1ce7\\u1cf0ntimes;\\u62c7n\\xf8\\u1cf7cy;\\u4452c\\u026f\\u1d06\\0\\0\\u1d0arn;\\u631eop;\\u630d\\u0280lptuw\\u1d18\\u1d1d\\u1d22\\u1d49\\u1d55lar;\\u4024f;\\uc000\\ud835\\udd55\\u0280;emps\\u030b\\u1d2d\\u1d37\\u1d3d\\u1d42q\\u0100;d\\u0352\\u1d33ot;\\u6251inus;\\u6238lus;\\u6214quare;\\u62a1blebarwedg\\xe5\\xfan\\u0180adh\\u112e\\u1d5d\\u1d67ownarrow\\xf3\\u1c83arpoon\\u0100lr\\u1d72\\u1d76ef\\xf4\\u1cb4igh\\xf4\\u1cb6\\u0162\\u1d7f\\u1d85karo\\xf7\\u0f42\\u026f\\u1d8a\\0\\0\\u1d8ern;\\u631fop;\\u630c\\u0180cot\\u1d98\\u1da3\\u1da6\\u0100ry\\u1d9d\\u1da1;\\uc000\\ud835\\udcb9;\\u4455l;\\u69f6rok;\\u4111\\u0100dr\\u1db0\\u1db4ot;\\u62f1i\\u0100;f\\u1dba\\u1816\\u65bf\\u0100ah\\u1dc0\\u1dc3r\\xf2\\u0429a\\xf2\\u0fa6angle;\\u69a6\\u0100ci\\u1dd2\\u1dd5y;\\u445fgrarr;\\u67ff\\u0900Dacdefglmnopqrstux\\u1e01\\u1e09\\u1e19\\u1e38\\u0578\\u1e3c\\u1e49\\u1e61\\u1e7e\\u1ea5\\u1eaf\\u1ebd\\u1ee1\\u1f2a\\u1f37\\u1f44\\u1f4e\\u1f5a\\u0100Do\\u1e06\\u1d34o\\xf4\\u1c89\\u0100cs\\u1e0e\\u1e14ute\\u803b\\xe9\\u40e9ter;\\u6a6e\\u0200aioy\\u1e22\\u1e27\\u1e31\\u1e36ron;\\u411br\\u0100;c\\u1e2d\\u1e2e\\u6256\\u803b\\xea\\u40ealon;\\u6255;\\u444dot;\\u4117\\u0100Dr\\u1e41\\u1e45ot;\\u6252;\\uc000\\ud835\\udd22\\u0180;rs\\u1e50\\u1e51\\u1e57\\u6a9aave\\u803b\\xe8\\u40e8\\u0100;d\\u1e5c\\u1e5d\\u6a96ot;\\u6a98\\u0200;ils\\u1e6a\\u1e6b\\u1e72\\u1e74\\u6a99nters;\\u63e7;\\u6113\\u0100;d\\u1e79\\u1e7a\\u6a95ot;\\u6a97\\u0180aps\\u1e85\\u1e89\\u1e97cr;\\u4113ty\\u0180;sv\\u1e92\\u1e93\\u1e95\\u6205et\\xbb\\u1e93p\\u01001;\\u1e9d\\u1ea4\\u0133\\u1ea1\\u1ea3;\\u6004;\\u6005\\u6003\\u0100gs\\u1eaa\\u1eac;\\u414bp;\\u6002\\u0100gp\\u1eb4\\u1eb8on;\\u4119f;\\uc000\\ud835\\udd56\\u0180als\\u1ec4\\u1ece\\u1ed2r\\u0100;s\\u1eca\\u1ecb\\u62d5l;\\u69e3us;\\u6a71i\\u0180;lv\\u1eda\\u1edb\\u1edf\\u43b5on\\xbb\\u1edb;\\u43f5\\u0200csuv\\u1eea\\u1ef3\\u1f0b\\u1f23\\u0100io\\u1eef\\u1e31rc\\xbb\\u1e2e\\u0269\\u1ef9\\0\\0\\u1efb\\xed\\u0548ant\\u0100gl\\u1f02\\u1f06tr\\xbb\\u1e5dess\\xbb\\u1e7a\\u0180aei\\u1f12\\u1f16\\u1f1als;\\u403dst;\\u625fv\\u0100;D\\u0235\\u1f20D;\\u6a78parsl;\\u69e5\\u0100Da\\u1f2f\\u1f33ot;\\u6253rr;\\u6971\\u0180cdi\\u1f3e\\u1f41\\u1ef8r;\\u612fo\\xf4\\u0352\\u0100ah\\u1f49\\u1f4b;\\u43b7\\u803b\\xf0\\u40f0\\u0100mr\\u1f53\\u1f57l\\u803b\\xeb\\u40ebo;\\u60ac\\u0180cip\\u1f61\\u1f64\\u1f67l;\\u4021s\\xf4\\u056e\\u0100eo\\u1f6c\\u1f74ctatio\\xee\\u0559nential\\xe5\\u0579\\u09e1\\u1f92\\0\\u1f9e\\0\\u1fa1\\u1fa7\\0\\0\\u1fc6\\u1fcc\\0\\u1fd3\\0\\u1fe6\\u1fea\\u2000\\0\\u2008\\u205allingdotse\\xf1\\u1e44y;\\u4444male;\\u6640\\u0180ilr\\u1fad\\u1fb3\\u1fc1lig;\\u8000\\ufb03\\u0269\\u1fb9\\0\\0\\u1fbdg;\\u8000\\ufb00ig;\\u8000\\ufb04;\\uc000\\ud835\\udd23lig;\\u8000\\ufb01lig;\\uc000fj\\u0180alt\\u1fd9\\u1fdc\\u1fe1t;\\u666dig;\\u8000\\ufb02ns;\\u65b1of;\\u4192\\u01f0\\u1fee\\0\\u1ff3f;\\uc000\\ud835\\udd57\\u0100ak\\u05bf\\u1ff7\\u0100;v\\u1ffc\\u1ffd\\u62d4;\\u6ad9artint;\\u6a0d\\u0100ao\\u200c\\u2055\\u0100cs\\u2011\\u2052\\u03b1\\u201a\\u2030\\u2038\\u2045\\u2048\\0\\u2050\\u03b2\\u2022\\u2025\\u2027\\u202a\\u202c\\0\\u202e\\u803b\\xbd\\u40bd;\\u6153\\u803b\\xbc\\u40bc;\\u6155;\\u6159;\\u615b\\u01b3\\u2034\\0\\u2036;\\u6154;\\u6156\\u02b4\\u203e\\u2041\\0\\0\\u2043\\u803b\\xbe\\u40be;\\u6157;\\u615c5;\\u6158\\u01b6\\u204c\\0\\u204e;\\u615a;\\u615d8;\\u615el;\\u6044wn;\\u6322cr;\\uc000\\ud835\\udcbb\\u0880Eabcdefgijlnorstv\\u2082\\u2089\\u209f\\u20a5\\u20b0\\u20b4\\u20f0\\u20f5\\u20fa\\u20ff\\u2103\\u2112\\u2138\\u0317\\u213e\\u2152\\u219e\\u0100;l\\u064d\\u2087;\\u6a8c\\u0180cmp\\u2090\\u2095\\u209dute;\\u41f5ma\\u0100;d\\u209c\\u1cda\\u43b3;\\u6a86reve;\\u411f\\u0100iy\\u20aa\\u20aerc;\\u411d;\\u4433ot;\\u4121\\u0200;lqs\\u063e\\u0642\\u20bd\\u20c9\\u0180;qs\\u063e\\u064c\\u20c4lan\\xf4\\u0665\\u0200;cdl\\u0665\\u20d2\\u20d5\\u20e5c;\\u6aa9ot\\u0100;o\\u20dc\\u20dd\\u6a80\\u0100;l\\u20e2\\u20e3\\u6a82;\\u6a84\\u0100;e\\u20ea\\u20ed\\uc000\\u22db\\ufe00s;\\u6a94r;\\uc000\\ud835\\udd24\\u0100;g\\u0673\\u061bmel;\\u6137cy;\\u4453\\u0200;Eaj\\u065a\\u210c\\u210e\\u2110;\\u6a92;\\u6aa5;\\u6aa4\\u0200Eaes\\u211b\\u211d\\u2129\\u2134;\\u6269p\\u0100;p\\u2123\\u2124\\u6a8arox\\xbb\\u2124\\u0100;q\\u212e\\u212f\\u6a88\\u0100;q\\u212e\\u211bim;\\u62e7pf;\\uc000\\ud835\\udd58\\u0100ci\\u2143\\u2146r;\\u610am\\u0180;el\\u066b\\u214e\\u2150;\\u6a8e;\\u6a90\\u8300>;cdlqr\\u05ee\\u2160\\u216a\\u216e\\u2173\\u2179\\u0100ci\\u2165\\u2167;\\u6aa7r;\\u6a7aot;\\u62d7Par;\\u6995uest;\\u6a7c\\u0280adels\\u2184\\u216a\\u2190\\u0656\\u219b\\u01f0\\u2189\\0\\u218epro\\xf8\\u209er;\\u6978q\\u0100lq\\u063f\\u2196les\\xf3\\u2088i\\xed\\u066b\\u0100en\\u21a3\\u21adrtneqq;\\uc000\\u2269\\ufe00\\xc5\\u21aa\\u0500Aabcefkosy\\u21c4\\u21c7\\u21f1\\u21f5\\u21fa\\u2218\\u221d\\u222f\\u2268\\u227dr\\xf2\\u03a0\\u0200ilmr\\u21d0\\u21d4\\u21d7\\u21dbrs\\xf0\\u1484f\\xbb\\u2024il\\xf4\\u06a9\\u0100dr\\u21e0\\u21e4cy;\\u444a\\u0180;cw\\u08f4\\u21eb\\u21efir;\\u6948;\\u61adar;\\u610firc;\\u4125\\u0180alr\\u2201\\u220e\\u2213rts\\u0100;u\\u2209\\u220a\\u6665it\\xbb\\u220alip;\\u6026con;\\u62b9r;\\uc000\\ud835\\udd25s\\u0100ew\\u2223\\u2229arow;\\u6925arow;\\u6926\\u0280amopr\\u223a\\u223e\\u2243\\u225e\\u2263rr;\\u61fftht;\\u623bk\\u0100lr\\u2249\\u2253eftarrow;\\u61a9ightarrow;\\u61aaf;\\uc000\\ud835\\udd59bar;\\u6015\\u0180clt\\u226f\\u2274\\u2278r;\\uc000\\ud835\\udcbdas\\xe8\\u21f4rok;\\u4127\\u0100bp\\u2282\\u2287ull;\\u6043hen\\xbb\\u1c5b\\u0ae1\\u22a3\\0\\u22aa\\0\\u22b8\\u22c5\\u22ce\\0\\u22d5\\u22f3\\0\\0\\u22f8\\u2322\\u2367\\u2362\\u237f\\0\\u2386\\u23aa\\u23b4cute\\u803b\\xed\\u40ed\\u0180;iy\\u0771\\u22b0\\u22b5rc\\u803b\\xee\\u40ee;\\u4438\\u0100cx\\u22bc\\u22bfy;\\u4435cl\\u803b\\xa1\\u40a1\\u0100fr\\u039f\\u22c9;\\uc000\\ud835\\udd26rave\\u803b\\xec\\u40ec\\u0200;ino\\u073e\\u22dd\\u22e9\\u22ee\\u0100in\\u22e2\\u22e6nt;\\u6a0ct;\\u622dfin;\\u69dcta;\\u6129lig;\\u4133\\u0180aop\\u22fe\\u231a\\u231d\\u0180cgt\\u2305\\u2308\\u2317r;\\u412b\\u0180elp\\u071f\\u230f\\u2313in\\xe5\\u078ear\\xf4\\u0720h;\\u4131f;\\u62b7ed;\\u41b5\\u0280;cfot\\u04f4\\u232c\\u2331\\u233d\\u2341are;\\u6105in\\u0100;t\\u2338\\u2339\\u621eie;\\u69dddo\\xf4\\u2319\\u0280;celp\\u0757\\u234c\\u2350\\u235b\\u2361al;\\u62ba\\u0100gr\\u2355\\u2359er\\xf3\\u1563\\xe3\\u234darhk;\\u6a17rod;\\u6a3c\\u0200cgpt\\u236f\\u2372\\u2376\\u237by;\\u4451on;\\u412ff;\\uc000\\ud835\\udd5aa;\\u43b9uest\\u803b\\xbf\\u40bf\\u0100ci\\u238a\\u238fr;\\uc000\\ud835\\udcben\\u0280;Edsv\\u04f4\\u239b\\u239d\\u23a1\\u04f3;\\u62f9ot;\\u62f5\\u0100;v\\u23a6\\u23a7\\u62f4;\\u62f3\\u0100;i\\u0777\\u23aelde;\\u4129\\u01eb\\u23b8\\0\\u23bccy;\\u4456l\\u803b\\xef\\u40ef\\u0300cfmosu\\u23cc\\u23d7\\u23dc\\u23e1\\u23e7\\u23f5\\u0100iy\\u23d1\\u23d5rc;\\u4135;\\u4439r;\\uc000\\ud835\\udd27ath;\\u4237pf;\\uc000\\ud835\\udd5b\\u01e3\\u23ec\\0\\u23f1r;\\uc000\\ud835\\udcbfrcy;\\u4458kcy;\\u4454\\u0400acfghjos\\u240b\\u2416\\u2422\\u2427\\u242d\\u2431\\u2435\\u243bppa\\u0100;v\\u2413\\u2414\\u43ba;\\u43f0\\u0100ey\\u241b\\u2420dil;\\u4137;\\u443ar;\\uc000\\ud835\\udd28reen;\\u4138cy;\\u4445cy;\\u445cpf;\\uc000\\ud835\\udd5ccr;\\uc000\\ud835\\udcc0\\u0b80ABEHabcdefghjlmnoprstuv\\u2470\\u2481\\u2486\\u248d\\u2491\\u250e\\u253d\\u255a\\u2580\\u264e\\u265e\\u2665\\u2679\\u267d\\u269a\\u26b2\\u26d8\\u275d\\u2768\\u278b\\u27c0\\u2801\\u2812\\u0180art\\u2477\\u247a\\u247cr\\xf2\\u09c6\\xf2\\u0395ail;\\u691barr;\\u690e\\u0100;g\\u0994\\u248b;\\u6a8bar;\\u6962\\u0963\\u24a5\\0\\u24aa\\0\\u24b1\\0\\0\\0\\0\\0\\u24b5\\u24ba\\0\\u24c6\\u24c8\\u24cd\\0\\u24f9ute;\\u413amptyv;\\u69b4ra\\xee\\u084cbda;\\u43bbg\\u0180;dl\\u088e\\u24c1\\u24c3;\\u6991\\xe5\\u088e;\\u6a85uo\\u803b\\xab\\u40abr\\u0400;bfhlpst\\u0899\\u24de\\u24e6\\u24e9\\u24eb\\u24ee\\u24f1\\u24f5\\u0100;f\\u089d\\u24e3s;\\u691fs;\\u691d\\xeb\\u2252p;\\u61abl;\\u6939im;\\u6973l;\\u61a2\\u0180;ae\\u24ff\\u2500\\u2504\\u6aabil;\\u6919\\u0100;s\\u2509\\u250a\\u6aad;\\uc000\\u2aad\\ufe00\\u0180abr\\u2515\\u2519\\u251drr;\\u690crk;\\u6772\\u0100ak\\u2522\\u252cc\\u0100ek\\u2528\\u252a;\\u407b;\\u405b\\u0100es\\u2531\\u2533;\\u698bl\\u0100du\\u2539\\u253b;\\u698f;\\u698d\\u0200aeuy\\u2546\\u254b\\u2556\\u2558ron;\\u413e\\u0100di\\u2550\\u2554il;\\u413c\\xec\\u08b0\\xe2\\u2529;\\u443b\\u0200cqrs\\u2563\\u2566\\u256d\\u257da;\\u6936uo\\u0100;r\\u0e19\\u1746\\u0100du\\u2572\\u2577har;\\u6967shar;\\u694bh;\\u61b2\\u0280;fgqs\\u258b\\u258c\\u0989\\u25f3\\u25ff\\u6264t\\u0280ahlrt\\u2598\\u25a4\\u25b7\\u25c2\\u25e8rrow\\u0100;t\\u0899\\u25a1a\\xe9\\u24f6arpoon\\u0100du\\u25af\\u25b4own\\xbb\\u045ap\\xbb\\u0966eftarrows;\\u61c7ight\\u0180ahs\\u25cd\\u25d6\\u25derrow\\u0100;s\\u08f4\\u08a7arpoon\\xf3\\u0f98quigarro\\xf7\\u21f0hreetimes;\\u62cb\\u0180;qs\\u258b\\u0993\\u25falan\\xf4\\u09ac\\u0280;cdgs\\u09ac\\u260a\\u260d\\u261d\\u2628c;\\u6aa8ot\\u0100;o\\u2614\\u2615\\u6a7f\\u0100;r\\u261a\\u261b\\u6a81;\\u6a83\\u0100;e\\u2622\\u2625\\uc000\\u22da\\ufe00s;\\u6a93\\u0280adegs\\u2633\\u2639\\u263d\\u2649\\u264bppro\\xf8\\u24c6ot;\\u62d6q\\u0100gq\\u2643\\u2645\\xf4\\u0989gt\\xf2\\u248c\\xf4\\u099bi\\xed\\u09b2\\u0180ilr\\u2655\\u08e1\\u265asht;\\u697c;\\uc000\\ud835\\udd29\\u0100;E\\u099c\\u2663;\\u6a91\\u0161\\u2669\\u2676r\\u0100du\\u25b2\\u266e\\u0100;l\\u0965\\u2673;\\u696alk;\\u6584cy;\\u4459\\u0280;acht\\u0a48\\u2688\\u268b\\u2691\\u2696r\\xf2\\u25c1orne\\xf2\\u1d08ard;\\u696bri;\\u65fa\\u0100io\\u269f\\u26a4dot;\\u4140ust\\u0100;a\\u26ac\\u26ad\\u63b0che\\xbb\\u26ad\\u0200Eaes\\u26bb\\u26bd\\u26c9\\u26d4;\\u6268p\\u0100;p\\u26c3\\u26c4\\u6a89rox\\xbb\\u26c4\\u0100;q\\u26ce\\u26cf\\u6a87\\u0100;q\\u26ce\\u26bbim;\\u62e6\\u0400abnoptwz\\u26e9\\u26f4\\u26f7\\u271a\\u272f\\u2741\\u2747\\u2750\\u0100nr\\u26ee\\u26f1g;\\u67ecr;\\u61fdr\\xeb\\u08c1g\\u0180lmr\\u26ff\\u270d\\u2714eft\\u0100ar\\u09e6\\u2707ight\\xe1\\u09f2apsto;\\u67fcight\\xe1\\u09fdparrow\\u0100lr\\u2725\\u2729ef\\xf4\\u24edight;\\u61ac\\u0180afl\\u2736\\u2739\\u273dr;\\u6985;\\uc000\\ud835\\udd5dus;\\u6a2dimes;\\u6a34\\u0161\\u274b\\u274fst;\\u6217\\xe1\\u134e\\u0180;ef\\u2757\\u2758\\u1800\\u65cange\\xbb\\u2758ar\\u0100;l\\u2764\\u2765\\u4028t;\\u6993\\u0280achmt\\u2773\\u2776\\u277c\\u2785\\u2787r\\xf2\\u08a8orne\\xf2\\u1d8car\\u0100;d\\u0f98\\u2783;\\u696d;\\u600eri;\\u62bf\\u0300achiqt\\u2798\\u279d\\u0a40\\u27a2\\u27ae\\u27bbquo;\\u6039r;\\uc000\\ud835\\udcc1m\\u0180;eg\\u09b2\\u27aa\\u27ac;\\u6a8d;\\u6a8f\\u0100bu\\u252a\\u27b3o\\u0100;r\\u0e1f\\u27b9;\\u601arok;\\u4142\\u8400<;cdhilqr\\u082b\\u27d2\\u2639\\u27dc\\u27e0\\u27e5\\u27ea\\u27f0\\u0100ci\\u27d7\\u27d9;\\u6aa6r;\\u6a79re\\xe5\\u25f2mes;\\u62c9arr;\\u6976uest;\\u6a7b\\u0100Pi\\u27f5\\u27f9ar;\\u6996\\u0180;ef\\u2800\\u092d\\u181b\\u65c3r\\u0100du\\u2807\\u280dshar;\\u694ahar;\\u6966\\u0100en\\u2817\\u2821rtneqq;\\uc000\\u2268\\ufe00\\xc5\\u281e\\u0700Dacdefhilnopsu\\u2840\\u2845\\u2882\\u288e\\u2893\\u28a0\\u28a5\\u28a8\\u28da\\u28e2\\u28e4\\u0a83\\u28f3\\u2902Dot;\\u623a\\u0200clpr\\u284e\\u2852\\u2863\\u287dr\\u803b\\xaf\\u40af\\u0100et\\u2857\\u2859;\\u6642\\u0100;e\\u285e\\u285f\\u6720se\\xbb\\u285f\\u0100;s\\u103b\\u2868to\\u0200;dlu\\u103b\\u2873\\u2877\\u287bow\\xee\\u048cef\\xf4\\u090f\\xf0\\u13d1ker;\\u65ae\\u0100oy\\u2887\\u288cmma;\\u6a29;\\u443cash;\\u6014asuredangle\\xbb\\u1626r;\\uc000\\ud835\\udd2ao;\\u6127\\u0180cdn\\u28af\\u28b4\\u28c9ro\\u803b\\xb5\\u40b5\\u0200;acd\\u1464\\u28bd\\u28c0\\u28c4s\\xf4\\u16a7ir;\\u6af0ot\\u80bb\\xb7\\u01b5us\\u0180;bd\\u28d2\\u1903\\u28d3\\u6212\\u0100;u\\u1d3c\\u28d8;\\u6a2a\\u0163\\u28de\\u28e1p;\\u6adb\\xf2\\u2212\\xf0\\u0a81\\u0100dp\\u28e9\\u28eeels;\\u62a7f;\\uc000\\ud835\\udd5e\\u0100ct\\u28f8\\u28fdr;\\uc000\\ud835\\udcc2pos\\xbb\\u159d\\u0180;lm\\u2909\\u290a\\u290d\\u43bctimap;\\u62b8\\u0c00GLRVabcdefghijlmoprstuvw\\u2942\\u2953\\u297e\\u2989\\u2998\\u29da\\u29e9\\u2a15\\u2a1a\\u2a58\\u2a5d\\u2a83\\u2a95\\u2aa4\\u2aa8\\u2b04\\u2b07\\u2b44\\u2b7f\\u2bae\\u2c34\\u2c67\\u2c7c\\u2ce9\\u0100gt\\u2947\\u294b;\\uc000\\u22d9\\u0338\\u0100;v\\u2950\\u0bcf\\uc000\\u226b\\u20d2\\u0180elt\\u295a\\u2972\\u2976ft\\u0100ar\\u2961\\u2967rrow;\\u61cdightarrow;\\u61ce;\\uc000\\u22d8\\u0338\\u0100;v\\u297b\\u0c47\\uc000\\u226a\\u20d2ightarrow;\\u61cf\\u0100Dd\\u298e\\u2993ash;\\u62afash;\\u62ae\\u0280bcnpt\\u29a3\\u29a7\\u29ac\\u29b1\\u29ccla\\xbb\\u02deute;\\u4144g;\\uc000\\u2220\\u20d2\\u0280;Eiop\\u0d84\\u29bc\\u29c0\\u29c5\\u29c8;\\uc000\\u2a70\\u0338d;\\uc000\\u224b\\u0338s;\\u4149ro\\xf8\\u0d84ur\\u0100;a\\u29d3\\u29d4\\u666el\\u0100;s\\u29d3\\u0b38\\u01f3\\u29df\\0\\u29e3p\\u80bb\\xa0\\u0b37mp\\u0100;e\\u0bf9\\u0c00\\u0280aeouy\\u29f4\\u29fe\\u2a03\\u2a10\\u2a13\\u01f0\\u29f9\\0\\u29fb;\\u6a43on;\\u4148dil;\\u4146ng\\u0100;d\\u0d7e\\u2a0aot;\\uc000\\u2a6d\\u0338p;\\u6a42;\\u443dash;\\u6013\\u0380;Aadqsx\\u0b92\\u2a29\\u2a2d\\u2a3b\\u2a41\\u2a45\\u2a50rr;\\u61d7r\\u0100hr\\u2a33\\u2a36k;\\u6924\\u0100;o\\u13f2\\u13f0ot;\\uc000\\u2250\\u0338ui\\xf6\\u0b63\\u0100ei\\u2a4a\\u2a4ear;\\u6928\\xed\\u0b98ist\\u0100;s\\u0ba0\\u0b9fr;\\uc000\\ud835\\udd2b\\u0200Eest\\u0bc5\\u2a66\\u2a79\\u2a7c\\u0180;qs\\u0bbc\\u2a6d\\u0be1\\u0180;qs\\u0bbc\\u0bc5\\u2a74lan\\xf4\\u0be2i\\xed\\u0bea\\u0100;r\\u0bb6\\u2a81\\xbb\\u0bb7\\u0180Aap\\u2a8a\\u2a8d\\u2a91r\\xf2\\u2971rr;\\u61aear;\\u6af2\\u0180;sv\\u0f8d\\u2a9c\\u0f8c\\u0100;d\\u2aa1\\u2aa2\\u62fc;\\u62facy;\\u445a\\u0380AEadest\\u2ab7\\u2aba\\u2abe\\u2ac2\\u2ac5\\u2af6\\u2af9r\\xf2\\u2966;\\uc000\\u2266\\u0338rr;\\u619ar;\\u6025\\u0200;fqs\\u0c3b\\u2ace\\u2ae3\\u2aeft\\u0100ar\\u2ad4\\u2ad9rro\\xf7\\u2ac1ightarro\\xf7\\u2a90\\u0180;qs\\u0c3b\\u2aba\\u2aealan\\xf4\\u0c55\\u0100;s\\u0c55\\u2af4\\xbb\\u0c36i\\xed\\u0c5d\\u0100;r\\u0c35\\u2afei\\u0100;e\\u0c1a\\u0c25i\\xe4\\u0d90\\u0100pt\\u2b0c\\u2b11f;\\uc000\\ud835\\udd5f\\u8180\\xac;in\\u2b19\\u2b1a\\u2b36\\u40acn\\u0200;Edv\\u0b89\\u2b24\\u2b28\\u2b2e;\\uc000\\u22f9\\u0338ot;\\uc000\\u22f5\\u0338\\u01e1\\u0b89\\u2b33\\u2b35;\\u62f7;\\u62f6i\\u0100;v\\u0cb8\\u2b3c\\u01e1\\u0cb8\\u2b41\\u2b43;\\u62fe;\\u62fd\\u0180aor\\u2b4b\\u2b63\\u2b69r\\u0200;ast\\u0b7b\\u2b55\\u2b5a\\u2b5flle\\xec\\u0b7bl;\\uc000\\u2afd\\u20e5;\\uc000\\u2202\\u0338lint;\\u6a14\\u0180;ce\\u0c92\\u2b70\\u2b73u\\xe5\\u0ca5\\u0100;c\\u0c98\\u2b78\\u0100;e\\u0c92\\u2b7d\\xf1\\u0c98\\u0200Aait\\u2b88\\u2b8b\\u2b9d\\u2ba7r\\xf2\\u2988rr\\u0180;cw\\u2b94\\u2b95\\u2b99\\u619b;\\uc000\\u2933\\u0338;\\uc000\\u219d\\u0338ghtarrow\\xbb\\u2b95ri\\u0100;e\\u0ccb\\u0cd6\\u0380chimpqu\\u2bbd\\u2bcd\\u2bd9\\u2b04\\u0b78\\u2be4\\u2bef\\u0200;cer\\u0d32\\u2bc6\\u0d37\\u2bc9u\\xe5\\u0d45;\\uc000\\ud835\\udcc3ort\\u026d\\u2b05\\0\\0\\u2bd6ar\\xe1\\u2b56m\\u0100;e\\u0d6e\\u2bdf\\u0100;q\\u0d74\\u0d73su\\u0100bp\\u2beb\\u2bed\\xe5\\u0cf8\\xe5\\u0d0b\\u0180bcp\\u2bf6\\u2c11\\u2c19\\u0200;Ees\\u2bff\\u2c00\\u0d22\\u2c04\\u6284;\\uc000\\u2ac5\\u0338et\\u0100;e\\u0d1b\\u2c0bq\\u0100;q\\u0d23\\u2c00c\\u0100;e\\u0d32\\u2c17\\xf1\\u0d38\\u0200;Ees\\u2c22\\u2c23\\u0d5f\\u2c27\\u6285;\\uc000\\u2ac6\\u0338et\\u0100;e\\u0d58\\u2c2eq\\u0100;q\\u0d60\\u2c23\\u0200gilr\\u2c3d\\u2c3f\\u2c45\\u2c47\\xec\\u0bd7lde\\u803b\\xf1\\u40f1\\xe7\\u0c43iangle\\u0100lr\\u2c52\\u2c5ceft\\u0100;e\\u0c1a\\u2c5a\\xf1\\u0c26ight\\u0100;e\\u0ccb\\u2c65\\xf1\\u0cd7\\u0100;m\\u2c6c\\u2c6d\\u43bd\\u0180;es\\u2c74\\u2c75\\u2c79\\u4023ro;\\u6116p;\\u6007\\u0480DHadgilrs\\u2c8f\\u2c94\\u2c99\\u2c9e\\u2ca3\\u2cb0\\u2cb6\\u2cd3\\u2ce3ash;\\u62adarr;\\u6904p;\\uc000\\u224d\\u20d2ash;\\u62ac\\u0100et\\u2ca8\\u2cac;\\uc000\\u2265\\u20d2;\\uc000>\\u20d2nfin;\\u69de\\u0180Aet\\u2cbd\\u2cc1\\u2cc5rr;\\u6902;\\uc000\\u2264\\u20d2\\u0100;r\\u2cca\\u2ccd\\uc000<\\u20d2ie;\\uc000\\u22b4\\u20d2\\u0100At\\u2cd8\\u2cdcrr;\\u6903rie;\\uc000\\u22b5\\u20d2im;\\uc000\\u223c\\u20d2\\u0180Aan\\u2cf0\\u2cf4\\u2d02rr;\\u61d6r\\u0100hr\\u2cfa\\u2cfdk;\\u6923\\u0100;o\\u13e7\\u13e5ear;\\u6927\\u1253\\u1a95\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\u2d2d\\0\\u2d38\\u2d48\\u2d60\\u2d65\\u2d72\\u2d84\\u1b07\\0\\0\\u2d8d\\u2dab\\0\\u2dc8\\u2dce\\0\\u2ddc\\u2e19\\u2e2b\\u2e3e\\u2e43\\u0100cs\\u2d31\\u1a97ute\\u803b\\xf3\\u40f3\\u0100iy\\u2d3c\\u2d45r\\u0100;c\\u1a9e\\u2d42\\u803b\\xf4\\u40f4;\\u443e\\u0280abios\\u1aa0\\u2d52\\u2d57\\u01c8\\u2d5alac;\\u4151v;\\u6a38old;\\u69bclig;\\u4153\\u0100cr\\u2d69\\u2d6dir;\\u69bf;\\uc000\\ud835\\udd2c\\u036f\\u2d79\\0\\0\\u2d7c\\0\\u2d82n;\\u42dbave\\u803b\\xf2\\u40f2;\\u69c1\\u0100bm\\u2d88\\u0df4ar;\\u69b5\\u0200acit\\u2d95\\u2d98\\u2da5\\u2da8r\\xf2\\u1a80\\u0100ir\\u2d9d\\u2da0r;\\u69beoss;\\u69bbn\\xe5\\u0e52;\\u69c0\\u0180aei\\u2db1\\u2db5\\u2db9cr;\\u414dga;\\u43c9\\u0180cdn\\u2dc0\\u2dc5\\u01cdron;\\u43bf;\\u69b6pf;\\uc000\\ud835\\udd60\\u0180ael\\u2dd4\\u2dd7\\u01d2r;\\u69b7rp;\\u69b9\\u0380;adiosv\\u2dea\\u2deb\\u2dee\\u2e08\\u2e0d\\u2e10\\u2e16\\u6228r\\xf2\\u1a86\\u0200;efm\\u2df7\\u2df8\\u2e02\\u2e05\\u6a5dr\\u0100;o\\u2dfe\\u2dff\\u6134f\\xbb\\u2dff\\u803b\\xaa\\u40aa\\u803b\\xba\\u40bagof;\\u62b6r;\\u6a56lope;\\u6a57;\\u6a5b\\u0180clo\\u2e1f\\u2e21\\u2e27\\xf2\\u2e01ash\\u803b\\xf8\\u40f8l;\\u6298i\\u016c\\u2e2f\\u2e34de\\u803b\\xf5\\u40f5es\\u0100;a\\u01db\\u2e3as;\\u6a36ml\\u803b\\xf6\\u40f6bar;\\u633d\\u0ae1\\u2e5e\\0\\u2e7d\\0\\u2e80\\u2e9d\\0\\u2ea2\\u2eb9\\0\\0\\u2ecb\\u0e9c\\0\\u2f13\\0\\0\\u2f2b\\u2fbc\\0\\u2fc8r\\u0200;ast\\u0403\\u2e67\\u2e72\\u0e85\\u8100\\xb6;l\\u2e6d\\u2e6e\\u40b6le\\xec\\u0403\\u0269\\u2e78\\0\\0\\u2e7bm;\\u6af3;\\u6afdy;\\u443fr\\u0280cimpt\\u2e8b\\u2e8f\\u2e93\\u1865\\u2e97nt;\\u4025od;\\u402eil;\\u6030enk;\\u6031r;\\uc000\\ud835\\udd2d\\u0180imo\\u2ea8\\u2eb0\\u2eb4\\u0100;v\\u2ead\\u2eae\\u43c6;\\u43d5ma\\xf4\\u0a76ne;\\u660e\\u0180;tv\\u2ebf\\u2ec0\\u2ec8\\u43c0chfork\\xbb\\u1ffd;\\u43d6\\u0100au\\u2ecf\\u2edfn\\u0100ck\\u2ed5\\u2eddk\\u0100;h\\u21f4\\u2edb;\\u610e\\xf6\\u21f4s\\u0480;abcdemst\\u2ef3\\u2ef4\\u1908\\u2ef9\\u2efd\\u2f04\\u2f06\\u2f0a\\u2f0e\\u402bcir;\\u6a23ir;\\u6a22\\u0100ou\\u1d40\\u2f02;\\u6a25;\\u6a72n\\u80bb\\xb1\\u0e9dim;\\u6a26wo;\\u6a27\\u0180ipu\\u2f19\\u2f20\\u2f25ntint;\\u6a15f;\\uc000\\ud835\\udd61nd\\u803b\\xa3\\u40a3\\u0500;Eaceinosu\\u0ec8\\u2f3f\\u2f41\\u2f44\\u2f47\\u2f81\\u2f89\\u2f92\\u2f7e\\u2fb6;\\u6ab3p;\\u6ab7u\\xe5\\u0ed9\\u0100;c\\u0ece\\u2f4c\\u0300;acens\\u0ec8\\u2f59\\u2f5f\\u2f66\\u2f68\\u2f7eppro\\xf8\\u2f43urlye\\xf1\\u0ed9\\xf1\\u0ece\\u0180aes\\u2f6f\\u2f76\\u2f7approx;\\u6ab9qq;\\u6ab5im;\\u62e8i\\xed\\u0edfme\\u0100;s\\u2f88\\u0eae\\u6032\\u0180Eas\\u2f78\\u2f90\\u2f7a\\xf0\\u2f75\\u0180dfp\\u0eec\\u2f99\\u2faf\\u0180als\\u2fa0\\u2fa5\\u2faalar;\\u632eine;\\u6312urf;\\u6313\\u0100;t\\u0efb\\u2fb4\\xef\\u0efbrel;\\u62b0\\u0100ci\\u2fc0\\u2fc5r;\\uc000\\ud835\\udcc5;\\u43c8ncsp;\\u6008\\u0300fiopsu\\u2fda\\u22e2\\u2fdf\\u2fe5\\u2feb\\u2ff1r;\\uc000\\ud835\\udd2epf;\\uc000\\ud835\\udd62rime;\\u6057cr;\\uc000\\ud835\\udcc6\\u0180aeo\\u2ff8\\u3009\\u3013t\\u0100ei\\u2ffe\\u3005rnion\\xf3\\u06b0nt;\\u6a16st\\u0100;e\\u3010\\u3011\\u403f\\xf1\\u1f19\\xf4\\u0f14\\u0a80ABHabcdefhilmnoprstux\\u3040\\u3051\\u3055\\u3059\\u30e0\\u310e\\u312b\\u3147\\u3162\\u3172\\u318e\\u3206\\u3215\\u3224\\u3229\\u3258\\u326e\\u3272\\u3290\\u32b0\\u32b7\\u0180art\\u3047\\u304a\\u304cr\\xf2\\u10b3\\xf2\\u03ddail;\\u691car\\xf2\\u1c65ar;\\u6964\\u0380cdenqrt\\u3068\\u3075\\u3078\\u307f\\u308f\\u3094\\u30cc\\u0100eu\\u306d\\u3071;\\uc000\\u223d\\u0331te;\\u4155i\\xe3\\u116emptyv;\\u69b3g\\u0200;del\\u0fd1\\u3089\\u308b\\u308d;\\u6992;\\u69a5\\xe5\\u0fd1uo\\u803b\\xbb\\u40bbr\\u0580;abcfhlpstw\\u0fdc\\u30ac\\u30af\\u30b7\\u30b9\\u30bc\\u30be\\u30c0\\u30c3\\u30c7\\u30cap;\\u6975\\u0100;f\\u0fe0\\u30b4s;\\u6920;\\u6933s;\\u691e\\xeb\\u225d\\xf0\\u272el;\\u6945im;\\u6974l;\\u61a3;\\u619d\\u0100ai\\u30d1\\u30d5il;\\u691ao\\u0100;n\\u30db\\u30dc\\u6236al\\xf3\\u0f1e\\u0180abr\\u30e7\\u30ea\\u30eer\\xf2\\u17e5rk;\\u6773\\u0100ak\\u30f3\\u30fdc\\u0100ek\\u30f9\\u30fb;\\u407d;\\u405d\\u0100es\\u3102\\u3104;\\u698cl\\u0100du\\u310a\\u310c;\\u698e;\\u6990\\u0200aeuy\\u3117\\u311c\\u3127\\u3129ron;\\u4159\\u0100di\\u3121\\u3125il;\\u4157\\xec\\u0ff2\\xe2\\u30fa;\\u4440\\u0200clqs\\u3134\\u3137\\u313d\\u3144a;\\u6937dhar;\\u6969uo\\u0100;r\\u020e\\u020dh;\\u61b3\\u0180acg\\u314e\\u315f\\u0f44l\\u0200;ips\\u0f78\\u3158\\u315b\\u109cn\\xe5\\u10bbar\\xf4\\u0fa9t;\\u65ad\\u0180ilr\\u3169\\u1023\\u316esht;\\u697d;\\uc000\\ud835\\udd2f\\u0100ao\\u3177\\u3186r\\u0100du\\u317d\\u317f\\xbb\\u047b\\u0100;l\\u1091\\u3184;\\u696c\\u0100;v\\u318b\\u318c\\u43c1;\\u43f1\\u0180gns\\u3195\\u31f9\\u31fcht\\u0300ahlrst\\u31a4\\u31b0\\u31c2\\u31d8\\u31e4\\u31eerrow\\u0100;t\\u0fdc\\u31ada\\xe9\\u30c8arpoon\\u0100du\\u31bb\\u31bfow\\xee\\u317ep\\xbb\\u1092eft\\u0100ah\\u31ca\\u31d0rrow\\xf3\\u0feaarpoon\\xf3\\u0551ightarrows;\\u61c9quigarro\\xf7\\u30cbhreetimes;\\u62ccg;\\u42daingdotse\\xf1\\u1f32\\u0180ahm\\u320d\\u3210\\u3213r\\xf2\\u0feaa\\xf2\\u0551;\\u600foust\\u0100;a\\u321e\\u321f\\u63b1che\\xbb\\u321fmid;\\u6aee\\u0200abpt\\u3232\\u323d\\u3240\\u3252\\u0100nr\\u3237\\u323ag;\\u67edr;\\u61fer\\xeb\\u1003\\u0180afl\\u3247\\u324a\\u324er;\\u6986;\\uc000\\ud835\\udd63us;\\u6a2eimes;\\u6a35\\u0100ap\\u325d\\u3267r\\u0100;g\\u3263\\u3264\\u4029t;\\u6994olint;\\u6a12ar\\xf2\\u31e3\\u0200achq\\u327b\\u3280\\u10bc\\u3285quo;\\u603ar;\\uc000\\ud835\\udcc7\\u0100bu\\u30fb\\u328ao\\u0100;r\\u0214\\u0213\\u0180hir\\u3297\\u329b\\u32a0re\\xe5\\u31f8mes;\\u62cai\\u0200;efl\\u32aa\\u1059\\u1821\\u32ab\\u65b9tri;\\u69celuhar;\\u6968;\\u611e\\u0d61\\u32d5\\u32db\\u32df\\u332c\\u3338\\u3371\\0\\u337a\\u33a4\\0\\0\\u33ec\\u33f0\\0\\u3428\\u3448\\u345a\\u34ad\\u34b1\\u34ca\\u34f1\\0\\u3616\\0\\0\\u3633cute;\\u415bqu\\xef\\u27ba\\u0500;Eaceinpsy\\u11ed\\u32f3\\u32f5\\u32ff\\u3302\\u330b\\u330f\\u331f\\u3326\\u3329;\\u6ab4\\u01f0\\u32fa\\0\\u32fc;\\u6ab8on;\\u4161u\\xe5\\u11fe\\u0100;d\\u11f3\\u3307il;\\u415frc;\\u415d\\u0180Eas\\u3316\\u3318\\u331b;\\u6ab6p;\\u6abaim;\\u62e9olint;\\u6a13i\\xed\\u1204;\\u4441ot\\u0180;be\\u3334\\u1d47\\u3335\\u62c5;\\u6a66\\u0380Aacmstx\\u3346\\u334a\\u3357\\u335b\\u335e\\u3363\\u336drr;\\u61d8r\\u0100hr\\u3350\\u3352\\xeb\\u2228\\u0100;o\\u0a36\\u0a34t\\u803b\\xa7\\u40a7i;\\u403bwar;\\u6929m\\u0100in\\u3369\\xf0nu\\xf3\\xf1t;\\u6736r\\u0100;o\\u3376\\u2055\\uc000\\ud835\\udd30\\u0200acoy\\u3382\\u3386\\u3391\\u33a0rp;\\u666f\\u0100hy\\u338b\\u338fcy;\\u4449;\\u4448rt\\u026d\\u3399\\0\\0\\u339ci\\xe4\\u1464ara\\xec\\u2e6f\\u803b\\xad\\u40ad\\u0100gm\\u33a8\\u33b4ma\\u0180;fv\\u33b1\\u33b2\\u33b2\\u43c3;\\u43c2\\u0400;deglnpr\\u12ab\\u33c5\\u33c9\\u33ce\\u33d6\\u33de\\u33e1\\u33e6ot;\\u6a6a\\u0100;q\\u12b1\\u12b0\\u0100;E\\u33d3\\u33d4\\u6a9e;\\u6aa0\\u0100;E\\u33db\\u33dc\\u6a9d;\\u6a9fe;\\u6246lus;\\u6a24arr;\\u6972ar\\xf2\\u113d\\u0200aeit\\u33f8\\u3408\\u340f\\u3417\\u0100ls\\u33fd\\u3404lsetm\\xe9\\u336ahp;\\u6a33parsl;\\u69e4\\u0100dl\\u1463\\u3414e;\\u6323\\u0100;e\\u341c\\u341d\\u6aaa\\u0100;s\\u3422\\u3423\\u6aac;\\uc000\\u2aac\\ufe00\\u0180flp\\u342e\\u3433\\u3442tcy;\\u444c\\u0100;b\\u3438\\u3439\\u402f\\u0100;a\\u343e\\u343f\\u69c4r;\\u633ff;\\uc000\\ud835\\udd64a\\u0100dr\\u344d\\u0402es\\u0100;u\\u3454\\u3455\\u6660it\\xbb\\u3455\\u0180csu\\u3460\\u3479\\u349f\\u0100au\\u3465\\u346fp\\u0100;s\\u1188\\u346b;\\uc000\\u2293\\ufe00p\\u0100;s\\u11b4\\u3475;\\uc000\\u2294\\ufe00u\\u0100bp\\u347f\\u348f\\u0180;es\\u1197\\u119c\\u3486et\\u0100;e\\u1197\\u348d\\xf1\\u119d\\u0180;es\\u11a8\\u11ad\\u3496et\\u0100;e\\u11a8\\u349d\\xf1\\u11ae\\u0180;af\\u117b\\u34a6\\u05b0r\\u0165\\u34ab\\u05b1\\xbb\\u117car\\xf2\\u1148\\u0200cemt\\u34b9\\u34be\\u34c2\\u34c5r;\\uc000\\ud835\\udcc8tm\\xee\\xf1i\\xec\\u3415ar\\xe6\\u11be\\u0100ar\\u34ce\\u34d5r\\u0100;f\\u34d4\\u17bf\\u6606\\u0100an\\u34da\\u34edight\\u0100ep\\u34e3\\u34eapsilo\\xee\\u1ee0h\\xe9\\u2eafs\\xbb\\u2852\\u0280bcmnp\\u34fb\\u355e\\u1209\\u358b\\u358e\\u0480;Edemnprs\\u350e\\u350f\\u3511\\u3515\\u351e\\u3523\\u352c\\u3531\\u3536\\u6282;\\u6ac5ot;\\u6abd\\u0100;d\\u11da\\u351aot;\\u6ac3ult;\\u6ac1\\u0100Ee\\u3528\\u352a;\\u6acb;\\u628alus;\\u6abfarr;\\u6979\\u0180eiu\\u353d\\u3552\\u3555t\\u0180;en\\u350e\\u3545\\u354bq\\u0100;q\\u11da\\u350feq\\u0100;q\\u352b\\u3528m;\\u6ac7\\u0100bp\\u355a\\u355c;\\u6ad5;\\u6ad3c\\u0300;acens\\u11ed\\u356c\\u3572\\u3579\\u357b\\u3326ppro\\xf8\\u32faurlye\\xf1\\u11fe\\xf1\\u11f3\\u0180aes\\u3582\\u3588\\u331bppro\\xf8\\u331aq\\xf1\\u3317g;\\u666a\\u0680123;Edehlmnps\\u35a9\\u35ac\\u35af\\u121c\\u35b2\\u35b4\\u35c0\\u35c9\\u35d5\\u35da\\u35df\\u35e8\\u35ed\\u803b\\xb9\\u40b9\\u803b\\xb2\\u40b2\\u803b\\xb3\\u40b3;\\u6ac6\\u0100os\\u35b9\\u35bct;\\u6abeub;\\u6ad8\\u0100;d\\u1222\\u35c5ot;\\u6ac4s\\u0100ou\\u35cf\\u35d2l;\\u67c9b;\\u6ad7arr;\\u697bult;\\u6ac2\\u0100Ee\\u35e4\\u35e6;\\u6acc;\\u628blus;\\u6ac0\\u0180eiu\\u35f4\\u3609\\u360ct\\u0180;en\\u121c\\u35fc\\u3602q\\u0100;q\\u1222\\u35b2eq\\u0100;q\\u35e7\\u35e4m;\\u6ac8\\u0100bp\\u3611\\u3613;\\u6ad4;\\u6ad6\\u0180Aan\\u361c\\u3620\\u362drr;\\u61d9r\\u0100hr\\u3626\\u3628\\xeb\\u222e\\u0100;o\\u0a2b\\u0a29war;\\u692alig\\u803b\\xdf\\u40df\\u0be1\\u3651\\u365d\\u3660\\u12ce\\u3673\\u3679\\0\\u367e\\u36c2\\0\\0\\0\\0\\0\\u36db\\u3703\\0\\u3709\\u376c\\0\\0\\0\\u3787\\u0272\\u3656\\0\\0\\u365bget;\\u6316;\\u43c4r\\xeb\\u0e5f\\u0180aey\\u3666\\u366b\\u3670ron;\\u4165dil;\\u4163;\\u4442lrec;\\u6315r;\\uc000\\ud835\\udd31\\u0200eiko\\u3686\\u369d\\u36b5\\u36bc\\u01f2\\u368b\\0\\u3691e\\u01004f\\u1284\\u1281a\\u0180;sv\\u3698\\u3699\\u369b\\u43b8ym;\\u43d1\\u0100cn\\u36a2\\u36b2k\\u0100as\\u36a8\\u36aeppro\\xf8\\u12c1im\\xbb\\u12acs\\xf0\\u129e\\u0100as\\u36ba\\u36ae\\xf0\\u12c1rn\\u803b\\xfe\\u40fe\\u01ec\\u031f\\u36c6\\u22e7es\\u8180\\xd7;bd\\u36cf\\u36d0\\u36d8\\u40d7\\u0100;a\\u190f\\u36d5r;\\u6a31;\\u6a30\\u0180eps\\u36e1\\u36e3\\u3700\\xe1\\u2a4d\\u0200;bcf\\u0486\\u36ec\\u36f0\\u36f4ot;\\u6336ir;\\u6af1\\u0100;o\\u36f9\\u36fc\\uc000\\ud835\\udd65rk;\\u6ada\\xe1\\u3362rime;\\u6034\\u0180aip\\u370f\\u3712\\u3764d\\xe5\\u1248\\u0380adempst\\u3721\\u374d\\u3740\\u3751\\u3757\\u375c\\u375fngle\\u0280;dlqr\\u3730\\u3731\\u3736\\u3740\\u3742\\u65b5own\\xbb\\u1dbbeft\\u0100;e\\u2800\\u373e\\xf1\\u092e;\\u625cight\\u0100;e\\u32aa\\u374b\\xf1\\u105aot;\\u65ecinus;\\u6a3alus;\\u6a39b;\\u69cdime;\\u6a3bezium;\\u63e2\\u0180cht\\u3772\\u377d\\u3781\\u0100ry\\u3777\\u377b;\\uc000\\ud835\\udcc9;\\u4446cy;\\u445brok;\\u4167\\u0100io\\u378b\\u378ex\\xf4\\u1777head\\u0100lr\\u3797\\u37a0eftarro\\xf7\\u084fightarrow\\xbb\\u0f5d\\u0900AHabcdfghlmoprstuw\\u37d0\\u37d3\\u37d7\\u37e4\\u37f0\\u37fc\\u380e\\u381c\\u3823\\u3834\\u3851\\u385d\\u386b\\u38a9\\u38cc\\u38d2\\u38ea\\u38f6r\\xf2\\u03edar;\\u6963\\u0100cr\\u37dc\\u37e2ute\\u803b\\xfa\\u40fa\\xf2\\u1150r\\u01e3\\u37ea\\0\\u37edy;\\u445eve;\\u416d\\u0100iy\\u37f5\\u37farc\\u803b\\xfb\\u40fb;\\u4443\\u0180abh\\u3803\\u3806\\u380br\\xf2\\u13adlac;\\u4171a\\xf2\\u13c3\\u0100ir\\u3813\\u3818sht;\\u697e;\\uc000\\ud835\\udd32rave\\u803b\\xf9\\u40f9\\u0161\\u3827\\u3831r\\u0100lr\\u382c\\u382e\\xbb\\u0957\\xbb\\u1083lk;\\u6580\\u0100ct\\u3839\\u384d\\u026f\\u383f\\0\\0\\u384arn\\u0100;e\\u3845\\u3846\\u631cr\\xbb\\u3846op;\\u630fri;\\u65f8\\u0100al\\u3856\\u385acr;\\u416b\\u80bb\\xa8\\u0349\\u0100gp\\u3862\\u3866on;\\u4173f;\\uc000\\ud835\\udd66\\u0300adhlsu\\u114b\\u3878\\u387d\\u1372\\u3891\\u38a0own\\xe1\\u13b3arpoon\\u0100lr\\u3888\\u388cef\\xf4\\u382digh\\xf4\\u382fi\\u0180;hl\\u3899\\u389a\\u389c\\u43c5\\xbb\\u13faon\\xbb\\u389aparrows;\\u61c8\\u0180cit\\u38b0\\u38c4\\u38c8\\u026f\\u38b6\\0\\0\\u38c1rn\\u0100;e\\u38bc\\u38bd\\u631dr\\xbb\\u38bdop;\\u630eng;\\u416fri;\\u65f9cr;\\uc000\\ud835\\udcca\\u0180dir\\u38d9\\u38dd\\u38e2ot;\\u62f0lde;\\u4169i\\u0100;f\\u3730\\u38e8\\xbb\\u1813\\u0100am\\u38ef\\u38f2r\\xf2\\u38a8l\\u803b\\xfc\\u40fcangle;\\u69a7\\u0780ABDacdeflnoprsz\\u391c\\u391f\\u3929\\u392d\\u39b5\\u39b8\\u39bd\\u39df\\u39e4\\u39e8\\u39f3\\u39f9\\u39fd\\u3a01\\u3a20r\\xf2\\u03f7ar\\u0100;v\\u3926\\u3927\\u6ae8;\\u6ae9as\\xe8\\u03e1\\u0100nr\\u3932\\u3937grt;\\u699c\\u0380eknprst\\u34e3\\u3946\\u394b\\u3952\\u395d\\u3964\\u3996app\\xe1\\u2415othin\\xe7\\u1e96\\u0180hir\\u34eb\\u2ec8\\u3959op\\xf4\\u2fb5\\u0100;h\\u13b7\\u3962\\xef\\u318d\\u0100iu\\u3969\\u396dgm\\xe1\\u33b3\\u0100bp\\u3972\\u3984setneq\\u0100;q\\u397d\\u3980\\uc000\\u228a\\ufe00;\\uc000\\u2acb\\ufe00setneq\\u0100;q\\u398f\\u3992\\uc000\\u228b\\ufe00;\\uc000\\u2acc\\ufe00\\u0100hr\\u399b\\u399fet\\xe1\\u369ciangle\\u0100lr\\u39aa\\u39afeft\\xbb\\u0925ight\\xbb\\u1051y;\\u4432ash\\xbb\\u1036\\u0180elr\\u39c4\\u39d2\\u39d7\\u0180;be\\u2dea\\u39cb\\u39cfar;\\u62bbq;\\u625alip;\\u62ee\\u0100bt\\u39dc\\u1468a\\xf2\\u1469r;\\uc000\\ud835\\udd33tr\\xe9\\u39aesu\\u0100bp\\u39ef\\u39f1\\xbb\\u0d1c\\xbb\\u0d59pf;\\uc000\\ud835\\udd67ro\\xf0\\u0efbtr\\xe9\\u39b4\\u0100cu\\u3a06\\u3a0br;\\uc000\\ud835\\udccb\\u0100bp\\u3a10\\u3a18n\\u0100Ee\\u3980\\u3a16\\xbb\\u397en\\u0100Ee\\u3992\\u3a1e\\xbb\\u3990igzag;\\u699a\\u0380cefoprs\\u3a36\\u3a3b\\u3a56\\u3a5b\\u3a54\\u3a61\\u3a6airc;\\u4175\\u0100di\\u3a40\\u3a51\\u0100bg\\u3a45\\u3a49ar;\\u6a5fe\\u0100;q\\u15fa\\u3a4f;\\u6259erp;\\u6118r;\\uc000\\ud835\\udd34pf;\\uc000\\ud835\\udd68\\u0100;e\\u1479\\u3a66at\\xe8\\u1479cr;\\uc000\\ud835\\udccc\\u0ae3\\u178e\\u3a87\\0\\u3a8b\\0\\u3a90\\u3a9b\\0\\0\\u3a9d\\u3aa8\\u3aab\\u3aaf\\0\\0\\u3ac3\\u3ace\\0\\u3ad8\\u17dc\\u17dftr\\xe9\\u17d1r;\\uc000\\ud835\\udd35\\u0100Aa\\u3a94\\u3a97r\\xf2\\u03c3r\\xf2\\u09f6;\\u43be\\u0100Aa\\u3aa1\\u3aa4r\\xf2\\u03b8r\\xf2\\u09eba\\xf0\\u2713is;\\u62fb\\u0180dpt\\u17a4\\u3ab5\\u3abe\\u0100fl\\u3aba\\u17a9;\\uc000\\ud835\\udd69im\\xe5\\u17b2\\u0100Aa\\u3ac7\\u3acar\\xf2\\u03cer\\xf2\\u0a01\\u0100cq\\u3ad2\\u17b8r;\\uc000\\ud835\\udccd\\u0100pt\\u17d6\\u3adcr\\xe9\\u17d4\\u0400acefiosu\\u3af0\\u3afd\\u3b08\\u3b0c\\u3b11\\u3b15\\u3b1b\\u3b21c\\u0100uy\\u3af6\\u3afbte\\u803b\\xfd\\u40fd;\\u444f\\u0100iy\\u3b02\\u3b06rc;\\u4177;\\u444bn\\u803b\\xa5\\u40a5r;\\uc000\\ud835\\udd36cy;\\u4457pf;\\uc000\\ud835\\udd6acr;\\uc000\\ud835\\udcce\\u0100cm\\u3b26\\u3b29y;\\u444el\\u803b\\xff\\u40ff\\u0500acdefhiosw\\u3b42\\u3b48\\u3b54\\u3b58\\u3b64\\u3b69\\u3b6d\\u3b74\\u3b7a\\u3b80cute;\\u417a\\u0100ay\\u3b4d\\u3b52ron;\\u417e;\\u4437ot;\\u417c\\u0100et\\u3b5d\\u3b61tr\\xe6\\u155fa;\\u43b6r;\\uc000\\ud835\\udd37cy;\\u4436grarr;\\u61ddpf;\\uc000\\ud835\\udd6bcr;\\uc000\\ud835\\udccf\\u0100jn\\u3b85\\u3b87;\\u600dj;\\u600c\"\n .split(\"\")\n .map((c) => c.charCodeAt(0)));\n//# sourceMappingURL=decode-data-html.js.map","// Generated using scripts/write-decode-map.ts\nexport default new Uint16Array(\n// prettier-ignore\n\"\\u0200aglq\\t\\x15\\x18\\x1b\\u026d\\x0f\\0\\0\\x12p;\\u4026os;\\u4027t;\\u403et;\\u403cuot;\\u4022\"\n .split(\"\")\n .map((c) => c.charCodeAt(0)));\n//# sourceMappingURL=decode-data-xml.js.map","// Adapted from https://github.com/mathiasbynens/he/blob/36afe179392226cf1b6ccdb16ebbb7a5a844d93a/src/he.js#L106-L134\nvar _a;\nconst decodeMap = new Map([\n [0, 65533],\n // C1 Unicode control character reference replacements\n [128, 8364],\n [130, 8218],\n [131, 402],\n [132, 8222],\n [133, 8230],\n [134, 8224],\n [135, 8225],\n [136, 710],\n [137, 8240],\n [138, 352],\n [139, 8249],\n [140, 338],\n [142, 381],\n [145, 8216],\n [146, 8217],\n [147, 8220],\n [148, 8221],\n [149, 8226],\n [150, 8211],\n [151, 8212],\n [152, 732],\n [153, 8482],\n [154, 353],\n [155, 8250],\n [156, 339],\n [158, 382],\n [159, 376],\n]);\n/**\n * Polyfill for `String.fromCodePoint`. It is used to create a string from a Unicode code point.\n */\nexport const fromCodePoint = \n// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition, node/no-unsupported-features/es-builtins\n(_a = String.fromCodePoint) !== null && _a !== void 0 ? _a : function (codePoint) {\n let output = \"\";\n if (codePoint > 0xffff) {\n codePoint -= 0x10000;\n output += String.fromCharCode(((codePoint >>> 10) & 0x3ff) | 0xd800);\n codePoint = 0xdc00 | (codePoint & 0x3ff);\n }\n output += String.fromCharCode(codePoint);\n return output;\n};\n/**\n * Replace the given code point with a replacement character if it is a\n * surrogate or is outside the valid range. Otherwise return the code\n * point unchanged.\n */\nexport function replaceCodePoint(codePoint) {\n var _a;\n if ((codePoint >= 0xd800 && codePoint <= 0xdfff) || codePoint > 0x10ffff) {\n return 0xfffd;\n }\n return (_a = decodeMap.get(codePoint)) !== null && _a !== void 0 ? _a : codePoint;\n}\n/**\n * Replace the code point if relevant, then convert it to a string.\n *\n * @deprecated Use `fromCodePoint(replaceCodePoint(codePoint))` instead.\n * @param codePoint The code point to decode.\n * @returns The decoded code point.\n */\nexport default function decodeCodePoint(codePoint) {\n return fromCodePoint(replaceCodePoint(codePoint));\n}\n//# sourceMappingURL=decode_codepoint.js.map","import htmlDecodeTree from \"./generated/decode-data-html.js\";\nimport xmlDecodeTree from \"./generated/decode-data-xml.js\";\nimport decodeCodePoint, { replaceCodePoint, fromCodePoint, } from \"./decode_codepoint.js\";\n// Re-export for use by eg. htmlparser2\nexport { htmlDecodeTree, xmlDecodeTree, decodeCodePoint };\nexport { replaceCodePoint, fromCodePoint } from \"./decode_codepoint.js\";\nvar CharCodes;\n(function (CharCodes) {\n CharCodes[CharCodes[\"NUM\"] = 35] = \"NUM\";\n CharCodes[CharCodes[\"SEMI\"] = 59] = \"SEMI\";\n CharCodes[CharCodes[\"EQUALS\"] = 61] = \"EQUALS\";\n CharCodes[CharCodes[\"ZERO\"] = 48] = \"ZERO\";\n CharCodes[CharCodes[\"NINE\"] = 57] = \"NINE\";\n CharCodes[CharCodes[\"LOWER_A\"] = 97] = \"LOWER_A\";\n CharCodes[CharCodes[\"LOWER_F\"] = 102] = \"LOWER_F\";\n CharCodes[CharCodes[\"LOWER_X\"] = 120] = \"LOWER_X\";\n CharCodes[CharCodes[\"LOWER_Z\"] = 122] = \"LOWER_Z\";\n CharCodes[CharCodes[\"UPPER_A\"] = 65] = \"UPPER_A\";\n CharCodes[CharCodes[\"UPPER_F\"] = 70] = \"UPPER_F\";\n CharCodes[CharCodes[\"UPPER_Z\"] = 90] = \"UPPER_Z\";\n})(CharCodes || (CharCodes = {}));\n/** Bit that needs to be set to convert an upper case ASCII character to lower case */\nconst TO_LOWER_BIT = 0b100000;\nexport var BinTrieFlags;\n(function (BinTrieFlags) {\n BinTrieFlags[BinTrieFlags[\"VALUE_LENGTH\"] = 49152] = \"VALUE_LENGTH\";\n BinTrieFlags[BinTrieFlags[\"BRANCH_LENGTH\"] = 16256] = \"BRANCH_LENGTH\";\n BinTrieFlags[BinTrieFlags[\"JUMP_TABLE\"] = 127] = \"JUMP_TABLE\";\n})(BinTrieFlags || (BinTrieFlags = {}));\nfunction isNumber(code) {\n return code >= CharCodes.ZERO && code <= CharCodes.NINE;\n}\nfunction isHexadecimalCharacter(code) {\n return ((code >= CharCodes.UPPER_A && code <= CharCodes.UPPER_F) ||\n (code >= CharCodes.LOWER_A && code <= CharCodes.LOWER_F));\n}\nfunction isAsciiAlphaNumeric(code) {\n return ((code >= CharCodes.UPPER_A && code <= CharCodes.UPPER_Z) ||\n (code >= CharCodes.LOWER_A && code <= CharCodes.LOWER_Z) ||\n isNumber(code));\n}\n/**\n * Checks if the given character is a valid end character for an entity in an attribute.\n *\n * Attribute values that aren't terminated properly aren't parsed, and shouldn't lead to a parser error.\n * See the example in https://html.spec.whatwg.org/multipage/parsing.html#named-character-reference-state\n */\nfunction isEntityInAttributeInvalidEnd(code) {\n return code === CharCodes.EQUALS || isAsciiAlphaNumeric(code);\n}\nvar EntityDecoderState;\n(function (EntityDecoderState) {\n EntityDecoderState[EntityDecoderState[\"EntityStart\"] = 0] = \"EntityStart\";\n EntityDecoderState[EntityDecoderState[\"NumericStart\"] = 1] = \"NumericStart\";\n EntityDecoderState[EntityDecoderState[\"NumericDecimal\"] = 2] = \"NumericDecimal\";\n EntityDecoderState[EntityDecoderState[\"NumericHex\"] = 3] = \"NumericHex\";\n EntityDecoderState[EntityDecoderState[\"NamedEntity\"] = 4] = \"NamedEntity\";\n})(EntityDecoderState || (EntityDecoderState = {}));\nexport var DecodingMode;\n(function (DecodingMode) {\n /** Entities in text nodes that can end with any character. */\n DecodingMode[DecodingMode[\"Legacy\"] = 0] = \"Legacy\";\n /** Only allow entities terminated with a semicolon. */\n DecodingMode[DecodingMode[\"Strict\"] = 1] = \"Strict\";\n /** Entities in attributes have limitations on ending characters. */\n DecodingMode[DecodingMode[\"Attribute\"] = 2] = \"Attribute\";\n})(DecodingMode || (DecodingMode = {}));\n/**\n * Token decoder with support of writing partial entities.\n */\nexport class EntityDecoder {\n constructor(\n /** The tree used to decode entities. */\n decodeTree, \n /**\n * The function that is called when a codepoint is decoded.\n *\n * For multi-byte named entities, this will be called multiple times,\n * with the second codepoint, and the same `consumed` value.\n *\n * @param codepoint The decoded codepoint.\n * @param consumed The number of bytes consumed by the decoder.\n */\n emitCodePoint, \n /** An object that is used to produce errors. */\n errors) {\n this.decodeTree = decodeTree;\n this.emitCodePoint = emitCodePoint;\n this.errors = errors;\n /** The current state of the decoder. */\n this.state = EntityDecoderState.EntityStart;\n /** Characters that were consumed while parsing an entity. */\n this.consumed = 1;\n /**\n * The result of the entity.\n *\n * Either the result index of a numeric entity, or the codepoint of a\n * numeric entity.\n */\n this.result = 0;\n /** The current index in the decode tree. */\n this.treeIndex = 0;\n /** The number of characters that were consumed in excess. */\n this.excess = 1;\n /** The mode in which the decoder is operating. */\n this.decodeMode = DecodingMode.Strict;\n }\n /** Resets the instance to make it reusable. */\n startEntity(decodeMode) {\n this.decodeMode = decodeMode;\n this.state = EntityDecoderState.EntityStart;\n this.result = 0;\n this.treeIndex = 0;\n this.excess = 1;\n this.consumed = 1;\n }\n /**\n * Write an entity to the decoder. This can be called multiple times with partial entities.\n * If the entity is incomplete, the decoder will return -1.\n *\n * Mirrors the implementation of `getDecoder`, but with the ability to stop decoding if the\n * entity is incomplete, and resume when the next string is written.\n *\n * @param string The string containing the entity (or a continuation of the entity).\n * @param offset The offset at which the entity begins. Should be 0 if this is not the first call.\n * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n */\n write(str, offset) {\n switch (this.state) {\n case EntityDecoderState.EntityStart: {\n if (str.charCodeAt(offset) === CharCodes.NUM) {\n this.state = EntityDecoderState.NumericStart;\n this.consumed += 1;\n return this.stateNumericStart(str, offset + 1);\n }\n this.state = EntityDecoderState.NamedEntity;\n return this.stateNamedEntity(str, offset);\n }\n case EntityDecoderState.NumericStart: {\n return this.stateNumericStart(str, offset);\n }\n case EntityDecoderState.NumericDecimal: {\n return this.stateNumericDecimal(str, offset);\n }\n case EntityDecoderState.NumericHex: {\n return this.stateNumericHex(str, offset);\n }\n case EntityDecoderState.NamedEntity: {\n return this.stateNamedEntity(str, offset);\n }\n }\n }\n /**\n * Switches between the numeric decimal and hexadecimal states.\n *\n * Equivalent to the `Numeric character reference state` in the HTML spec.\n *\n * @param str The string containing the entity (or a continuation of the entity).\n * @param offset The current offset.\n * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n */\n stateNumericStart(str, offset) {\n if (offset >= str.length) {\n return -1;\n }\n if ((str.charCodeAt(offset) | TO_LOWER_BIT) === CharCodes.LOWER_X) {\n this.state = EntityDecoderState.NumericHex;\n this.consumed += 1;\n return this.stateNumericHex(str, offset + 1);\n }\n this.state = EntityDecoderState.NumericDecimal;\n return this.stateNumericDecimal(str, offset);\n }\n addToNumericResult(str, start, end, base) {\n if (start !== end) {\n const digitCount = end - start;\n this.result =\n this.result * Math.pow(base, digitCount) +\n parseInt(str.substr(start, digitCount), base);\n this.consumed += digitCount;\n }\n }\n /**\n * Parses a hexadecimal numeric entity.\n *\n * Equivalent to the `Hexademical character reference state` in the HTML spec.\n *\n * @param str The string containing the entity (or a continuation of the entity).\n * @param offset The current offset.\n * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n */\n stateNumericHex(str, offset) {\n const startIdx = offset;\n while (offset < str.length) {\n const char = str.charCodeAt(offset);\n if (isNumber(char) || isHexadecimalCharacter(char)) {\n offset += 1;\n }\n else {\n this.addToNumericResult(str, startIdx, offset, 16);\n return this.emitNumericEntity(char, 3);\n }\n }\n this.addToNumericResult(str, startIdx, offset, 16);\n return -1;\n }\n /**\n * Parses a decimal numeric entity.\n *\n * Equivalent to the `Decimal character reference state` in the HTML spec.\n *\n * @param str The string containing the entity (or a continuation of the entity).\n * @param offset The current offset.\n * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n */\n stateNumericDecimal(str, offset) {\n const startIdx = offset;\n while (offset < str.length) {\n const char = str.charCodeAt(offset);\n if (isNumber(char)) {\n offset += 1;\n }\n else {\n this.addToNumericResult(str, startIdx, offset, 10);\n return this.emitNumericEntity(char, 2);\n }\n }\n this.addToNumericResult(str, startIdx, offset, 10);\n return -1;\n }\n /**\n * Validate and emit a numeric entity.\n *\n * Implements the logic from the `Hexademical character reference start\n * state` and `Numeric character reference end state` in the HTML spec.\n *\n * @param lastCp The last code point of the entity. Used to see if the\n * entity was terminated with a semicolon.\n * @param expectedLength The minimum number of characters that should be\n * consumed. Used to validate that at least one digit\n * was consumed.\n * @returns The number of characters that were consumed.\n */\n emitNumericEntity(lastCp, expectedLength) {\n var _a;\n // Ensure we consumed at least one digit.\n if (this.consumed <= expectedLength) {\n (_a = this.errors) === null || _a === void 0 ? void 0 : _a.absenceOfDigitsInNumericCharacterReference(this.consumed);\n return 0;\n }\n // Figure out if this is a legit end of the entity\n if (lastCp === CharCodes.SEMI) {\n this.consumed += 1;\n }\n else if (this.decodeMode === DecodingMode.Strict) {\n return 0;\n }\n this.emitCodePoint(replaceCodePoint(this.result), this.consumed);\n if (this.errors) {\n if (lastCp !== CharCodes.SEMI) {\n this.errors.missingSemicolonAfterCharacterReference();\n }\n this.errors.validateNumericCharacterReference(this.result);\n }\n return this.consumed;\n }\n /**\n * Parses a named entity.\n *\n * Equivalent to the `Named character reference state` in the HTML spec.\n *\n * @param str The string containing the entity (or a continuation of the entity).\n * @param offset The current offset.\n * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n */\n stateNamedEntity(str, offset) {\n const { decodeTree } = this;\n let current = decodeTree[this.treeIndex];\n // The mask is the number of bytes of the value, including the current byte.\n let valueLength = (current & BinTrieFlags.VALUE_LENGTH) >> 14;\n for (; offset < str.length; offset++, this.excess++) {\n const char = str.charCodeAt(offset);\n this.treeIndex = determineBranch(decodeTree, current, this.treeIndex + Math.max(1, valueLength), char);\n if (this.treeIndex < 0) {\n return this.result === 0 ||\n // If we are parsing an attribute\n (this.decodeMode === DecodingMode.Attribute &&\n // We shouldn't have consumed any characters after the entity,\n (valueLength === 0 ||\n // And there should be no invalid characters.\n isEntityInAttributeInvalidEnd(char)))\n ? 0\n : this.emitNotTerminatedNamedEntity();\n }\n current = decodeTree[this.treeIndex];\n valueLength = (current & BinTrieFlags.VALUE_LENGTH) >> 14;\n // If the branch is a value, store it and continue\n if (valueLength !== 0) {\n // If the entity is terminated by a semicolon, we are done.\n if (char === CharCodes.SEMI) {\n return this.emitNamedEntityData(this.treeIndex, valueLength, this.consumed + this.excess);\n }\n // If we encounter a non-terminated (legacy) entity while parsing strictly, then ignore it.\n if (this.decodeMode !== DecodingMode.Strict) {\n this.result = this.treeIndex;\n this.consumed += this.excess;\n this.excess = 0;\n }\n }\n }\n return -1;\n }\n /**\n * Emit a named entity that was not terminated with a semicolon.\n *\n * @returns The number of characters consumed.\n */\n emitNotTerminatedNamedEntity() {\n var _a;\n const { result, decodeTree } = this;\n const valueLength = (decodeTree[result] & BinTrieFlags.VALUE_LENGTH) >> 14;\n this.emitNamedEntityData(result, valueLength, this.consumed);\n (_a = this.errors) === null || _a === void 0 ? void 0 : _a.missingSemicolonAfterCharacterReference();\n return this.consumed;\n }\n /**\n * Emit a named entity.\n *\n * @param result The index of the entity in the decode tree.\n * @param valueLength The number of bytes in the entity.\n * @param consumed The number of characters consumed.\n *\n * @returns The number of characters consumed.\n */\n emitNamedEntityData(result, valueLength, consumed) {\n const { decodeTree } = this;\n this.emitCodePoint(valueLength === 1\n ? decodeTree[result] & ~BinTrieFlags.VALUE_LENGTH\n : decodeTree[result + 1], consumed);\n if (valueLength === 3) {\n // For multi-byte values, we need to emit the second byte.\n this.emitCodePoint(decodeTree[result + 2], consumed);\n }\n return consumed;\n }\n /**\n * Signal to the parser that the end of the input was reached.\n *\n * Remaining data will be emitted and relevant errors will be produced.\n *\n * @returns The number of characters consumed.\n */\n end() {\n var _a;\n switch (this.state) {\n case EntityDecoderState.NamedEntity: {\n // Emit a named entity if we have one.\n return this.result !== 0 &&\n (this.decodeMode !== DecodingMode.Attribute ||\n this.result === this.treeIndex)\n ? this.emitNotTerminatedNamedEntity()\n : 0;\n }\n // Otherwise, emit a numeric entity if we have one.\n case EntityDecoderState.NumericDecimal: {\n return this.emitNumericEntity(0, 2);\n }\n case EntityDecoderState.NumericHex: {\n return this.emitNumericEntity(0, 3);\n }\n case EntityDecoderState.NumericStart: {\n (_a = this.errors) === null || _a === void 0 ? void 0 : _a.absenceOfDigitsInNumericCharacterReference(this.consumed);\n return 0;\n }\n case EntityDecoderState.EntityStart: {\n // Return 0 if we have no entity.\n return 0;\n }\n }\n }\n}\n/**\n * Creates a function that decodes entities in a string.\n *\n * @param decodeTree The decode tree.\n * @returns A function that decodes entities in a string.\n */\nfunction getDecoder(decodeTree) {\n let ret = \"\";\n const decoder = new EntityDecoder(decodeTree, (str) => (ret += fromCodePoint(str)));\n return function decodeWithTrie(str, decodeMode) {\n let lastIndex = 0;\n let offset = 0;\n while ((offset = str.indexOf(\"&\", offset)) >= 0) {\n ret += str.slice(lastIndex, offset);\n decoder.startEntity(decodeMode);\n const len = decoder.write(str, \n // Skip the \"&\"\n offset + 1);\n if (len < 0) {\n lastIndex = offset + decoder.end();\n break;\n }\n lastIndex = offset + len;\n // If `len` is 0, skip the current `&` and continue.\n offset = len === 0 ? lastIndex + 1 : lastIndex;\n }\n const result = ret + str.slice(lastIndex);\n // Make sure we don't keep a reference to the final string.\n ret = \"\";\n return result;\n };\n}\n/**\n * Determines the branch of the current node that is taken given the current\n * character. This function is used to traverse the trie.\n *\n * @param decodeTree The trie.\n * @param current The current node.\n * @param nodeIdx The index right after the current node and its value.\n * @param char The current character.\n * @returns The index of the next node, or -1 if no branch is taken.\n */\nexport function determineBranch(decodeTree, current, nodeIdx, char) {\n const branchCount = (current & BinTrieFlags.BRANCH_LENGTH) >> 7;\n const jumpOffset = current & BinTrieFlags.JUMP_TABLE;\n // Case 1: Single branch encoded in jump offset\n if (branchCount === 0) {\n return jumpOffset !== 0 && char === jumpOffset ? nodeIdx : -1;\n }\n // Case 2: Multiple branches encoded in jump table\n if (jumpOffset) {\n const value = char - jumpOffset;\n return value < 0 || value >= branchCount\n ? -1\n : decodeTree[nodeIdx + value] - 1;\n }\n // Case 3: Multiple branches encoded in dictionary\n // Binary search for the character.\n let lo = nodeIdx;\n let hi = lo + branchCount - 1;\n while (lo <= hi) {\n const mid = (lo + hi) >>> 1;\n const midVal = decodeTree[mid];\n if (midVal < char) {\n lo = mid + 1;\n }\n else if (midVal > char) {\n hi = mid - 1;\n }\n else {\n return decodeTree[mid + branchCount];\n }\n }\n return -1;\n}\nconst htmlDecoder = getDecoder(htmlDecodeTree);\nconst xmlDecoder = getDecoder(xmlDecodeTree);\n/**\n * Decodes an HTML string.\n *\n * @param str The string to decode.\n * @param mode The decoding mode.\n * @returns The decoded string.\n */\nexport function decodeHTML(str, mode = DecodingMode.Legacy) {\n return htmlDecoder(str, mode);\n}\n/**\n * Decodes an HTML string in an attribute.\n *\n * @param str The string to decode.\n * @returns The decoded string.\n */\nexport function decodeHTMLAttribute(str) {\n return htmlDecoder(str, DecodingMode.Attribute);\n}\n/**\n * Decodes an HTML string, requiring all entities to be terminated by a semicolon.\n *\n * @param str The string to decode.\n * @returns The decoded string.\n */\nexport function decodeHTMLStrict(str) {\n return htmlDecoder(str, DecodingMode.Strict);\n}\n/**\n * Decodes an XML string, requiring all entities to be terminated by a semicolon.\n *\n * @param str The string to decode.\n * @returns The decoded string.\n */\nexport function decodeXML(str) {\n return xmlDecoder(str, DecodingMode.Strict);\n}\n//# sourceMappingURL=decode.js.map","/** All valid namespaces in HTML. */\nexport var NS;\n(function (NS) {\n NS[\"HTML\"] = \"http://www.w3.org/1999/xhtml\";\n NS[\"MATHML\"] = \"http://www.w3.org/1998/Math/MathML\";\n NS[\"SVG\"] = \"http://www.w3.org/2000/svg\";\n NS[\"XLINK\"] = \"http://www.w3.org/1999/xlink\";\n NS[\"XML\"] = \"http://www.w3.org/XML/1998/namespace\";\n NS[\"XMLNS\"] = \"http://www.w3.org/2000/xmlns/\";\n})(NS = NS || (NS = {}));\nexport var ATTRS;\n(function (ATTRS) {\n ATTRS[\"TYPE\"] = \"type\";\n ATTRS[\"ACTION\"] = \"action\";\n ATTRS[\"ENCODING\"] = \"encoding\";\n ATTRS[\"PROMPT\"] = \"prompt\";\n ATTRS[\"NAME\"] = \"name\";\n ATTRS[\"COLOR\"] = \"color\";\n ATTRS[\"FACE\"] = \"face\";\n ATTRS[\"SIZE\"] = \"size\";\n})(ATTRS = ATTRS || (ATTRS = {}));\n/**\n * The mode of the document.\n *\n * @see {@link https://dom.spec.whatwg.org/#concept-document-limited-quirks}\n */\nexport var DOCUMENT_MODE;\n(function (DOCUMENT_MODE) {\n DOCUMENT_MODE[\"NO_QUIRKS\"] = \"no-quirks\";\n DOCUMENT_MODE[\"QUIRKS\"] = \"quirks\";\n DOCUMENT_MODE[\"LIMITED_QUIRKS\"] = \"limited-quirks\";\n})(DOCUMENT_MODE = DOCUMENT_MODE || (DOCUMENT_MODE = {}));\nexport var TAG_NAMES;\n(function (TAG_NAMES) {\n TAG_NAMES[\"A\"] = \"a\";\n TAG_NAMES[\"ADDRESS\"] = \"address\";\n TAG_NAMES[\"ANNOTATION_XML\"] = \"annotation-xml\";\n TAG_NAMES[\"APPLET\"] = \"applet\";\n TAG_NAMES[\"AREA\"] = \"area\";\n TAG_NAMES[\"ARTICLE\"] = \"article\";\n TAG_NAMES[\"ASIDE\"] = \"aside\";\n TAG_NAMES[\"B\"] = \"b\";\n TAG_NAMES[\"BASE\"] = \"base\";\n TAG_NAMES[\"BASEFONT\"] = \"basefont\";\n TAG_NAMES[\"BGSOUND\"] = \"bgsound\";\n TAG_NAMES[\"BIG\"] = \"big\";\n TAG_NAMES[\"BLOCKQUOTE\"] = \"blockquote\";\n TAG_NAMES[\"BODY\"] = \"body\";\n TAG_NAMES[\"BR\"] = \"br\";\n TAG_NAMES[\"BUTTON\"] = \"button\";\n TAG_NAMES[\"CAPTION\"] = \"caption\";\n TAG_NAMES[\"CENTER\"] = \"center\";\n TAG_NAMES[\"CODE\"] = \"code\";\n TAG_NAMES[\"COL\"] = \"col\";\n TAG_NAMES[\"COLGROUP\"] = \"colgroup\";\n TAG_NAMES[\"DD\"] = \"dd\";\n TAG_NAMES[\"DESC\"] = \"desc\";\n TAG_NAMES[\"DETAILS\"] = \"details\";\n TAG_NAMES[\"DIALOG\"] = \"dialog\";\n TAG_NAMES[\"DIR\"] = \"dir\";\n TAG_NAMES[\"DIV\"] = \"div\";\n TAG_NAMES[\"DL\"] = \"dl\";\n TAG_NAMES[\"DT\"] = \"dt\";\n TAG_NAMES[\"EM\"] = \"em\";\n TAG_NAMES[\"EMBED\"] = \"embed\";\n TAG_NAMES[\"FIELDSET\"] = \"fieldset\";\n TAG_NAMES[\"FIGCAPTION\"] = \"figcaption\";\n TAG_NAMES[\"FIGURE\"] = \"figure\";\n TAG_NAMES[\"FONT\"] = \"font\";\n TAG_NAMES[\"FOOTER\"] = \"footer\";\n TAG_NAMES[\"FOREIGN_OBJECT\"] = \"foreignObject\";\n TAG_NAMES[\"FORM\"] = \"form\";\n TAG_NAMES[\"FRAME\"] = \"frame\";\n TAG_NAMES[\"FRAMESET\"] = \"frameset\";\n TAG_NAMES[\"H1\"] = \"h1\";\n TAG_NAMES[\"H2\"] = \"h2\";\n TAG_NAMES[\"H3\"] = \"h3\";\n TAG_NAMES[\"H4\"] = \"h4\";\n TAG_NAMES[\"H5\"] = \"h5\";\n TAG_NAMES[\"H6\"] = \"h6\";\n TAG_NAMES[\"HEAD\"] = \"head\";\n TAG_NAMES[\"HEADER\"] = \"header\";\n TAG_NAMES[\"HGROUP\"] = \"hgroup\";\n TAG_NAMES[\"HR\"] = \"hr\";\n TAG_NAMES[\"HTML\"] = \"html\";\n TAG_NAMES[\"I\"] = \"i\";\n TAG_NAMES[\"IMG\"] = \"img\";\n TAG_NAMES[\"IMAGE\"] = \"image\";\n TAG_NAMES[\"INPUT\"] = \"input\";\n TAG_NAMES[\"IFRAME\"] = \"iframe\";\n TAG_NAMES[\"KEYGEN\"] = \"keygen\";\n TAG_NAMES[\"LABEL\"] = \"label\";\n TAG_NAMES[\"LI\"] = \"li\";\n TAG_NAMES[\"LINK\"] = \"link\";\n TAG_NAMES[\"LISTING\"] = \"listing\";\n TAG_NAMES[\"MAIN\"] = \"main\";\n TAG_NAMES[\"MALIGNMARK\"] = \"malignmark\";\n TAG_NAMES[\"MARQUEE\"] = \"marquee\";\n TAG_NAMES[\"MATH\"] = \"math\";\n TAG_NAMES[\"MENU\"] = \"menu\";\n TAG_NAMES[\"META\"] = \"meta\";\n TAG_NAMES[\"MGLYPH\"] = \"mglyph\";\n TAG_NAMES[\"MI\"] = \"mi\";\n TAG_NAMES[\"MO\"] = \"mo\";\n TAG_NAMES[\"MN\"] = \"mn\";\n TAG_NAMES[\"MS\"] = \"ms\";\n TAG_NAMES[\"MTEXT\"] = \"mtext\";\n TAG_NAMES[\"NAV\"] = \"nav\";\n TAG_NAMES[\"NOBR\"] = \"nobr\";\n TAG_NAMES[\"NOFRAMES\"] = \"noframes\";\n TAG_NAMES[\"NOEMBED\"] = \"noembed\";\n TAG_NAMES[\"NOSCRIPT\"] = \"noscript\";\n TAG_NAMES[\"OBJECT\"] = \"object\";\n TAG_NAMES[\"OL\"] = \"ol\";\n TAG_NAMES[\"OPTGROUP\"] = \"optgroup\";\n TAG_NAMES[\"OPTION\"] = \"option\";\n TAG_NAMES[\"P\"] = \"p\";\n TAG_NAMES[\"PARAM\"] = \"param\";\n TAG_NAMES[\"PLAINTEXT\"] = \"plaintext\";\n TAG_NAMES[\"PRE\"] = \"pre\";\n TAG_NAMES[\"RB\"] = \"rb\";\n TAG_NAMES[\"RP\"] = \"rp\";\n TAG_NAMES[\"RT\"] = \"rt\";\n TAG_NAMES[\"RTC\"] = \"rtc\";\n TAG_NAMES[\"RUBY\"] = \"ruby\";\n TAG_NAMES[\"S\"] = \"s\";\n TAG_NAMES[\"SCRIPT\"] = \"script\";\n TAG_NAMES[\"SECTION\"] = \"section\";\n TAG_NAMES[\"SELECT\"] = \"select\";\n TAG_NAMES[\"SOURCE\"] = \"source\";\n TAG_NAMES[\"SMALL\"] = \"small\";\n TAG_NAMES[\"SPAN\"] = \"span\";\n TAG_NAMES[\"STRIKE\"] = \"strike\";\n TAG_NAMES[\"STRONG\"] = \"strong\";\n TAG_NAMES[\"STYLE\"] = \"style\";\n TAG_NAMES[\"SUB\"] = \"sub\";\n TAG_NAMES[\"SUMMARY\"] = \"summary\";\n TAG_NAMES[\"SUP\"] = \"sup\";\n TAG_NAMES[\"TABLE\"] = \"table\";\n TAG_NAMES[\"TBODY\"] = \"tbody\";\n TAG_NAMES[\"TEMPLATE\"] = \"template\";\n TAG_NAMES[\"TEXTAREA\"] = \"textarea\";\n TAG_NAMES[\"TFOOT\"] = \"tfoot\";\n TAG_NAMES[\"TD\"] = \"td\";\n TAG_NAMES[\"TH\"] = \"th\";\n TAG_NAMES[\"THEAD\"] = \"thead\";\n TAG_NAMES[\"TITLE\"] = \"title\";\n TAG_NAMES[\"TR\"] = \"tr\";\n TAG_NAMES[\"TRACK\"] = \"track\";\n TAG_NAMES[\"TT\"] = \"tt\";\n TAG_NAMES[\"U\"] = \"u\";\n TAG_NAMES[\"UL\"] = \"ul\";\n TAG_NAMES[\"SVG\"] = \"svg\";\n TAG_NAMES[\"VAR\"] = \"var\";\n TAG_NAMES[\"WBR\"] = \"wbr\";\n TAG_NAMES[\"XMP\"] = \"xmp\";\n})(TAG_NAMES = TAG_NAMES || (TAG_NAMES = {}));\n/**\n * Tag IDs are numeric IDs for known tag names.\n *\n * We use tag IDs to improve the performance of tag name comparisons.\n */\nexport var TAG_ID;\n(function (TAG_ID) {\n TAG_ID[TAG_ID[\"UNKNOWN\"] = 0] = \"UNKNOWN\";\n TAG_ID[TAG_ID[\"A\"] = 1] = \"A\";\n TAG_ID[TAG_ID[\"ADDRESS\"] = 2] = \"ADDRESS\";\n TAG_ID[TAG_ID[\"ANNOTATION_XML\"] = 3] = \"ANNOTATION_XML\";\n TAG_ID[TAG_ID[\"APPLET\"] = 4] = \"APPLET\";\n TAG_ID[TAG_ID[\"AREA\"] = 5] = \"AREA\";\n TAG_ID[TAG_ID[\"ARTICLE\"] = 6] = \"ARTICLE\";\n TAG_ID[TAG_ID[\"ASIDE\"] = 7] = \"ASIDE\";\n TAG_ID[TAG_ID[\"B\"] = 8] = \"B\";\n TAG_ID[TAG_ID[\"BASE\"] = 9] = \"BASE\";\n TAG_ID[TAG_ID[\"BASEFONT\"] = 10] = \"BASEFONT\";\n TAG_ID[TAG_ID[\"BGSOUND\"] = 11] = \"BGSOUND\";\n TAG_ID[TAG_ID[\"BIG\"] = 12] = \"BIG\";\n TAG_ID[TAG_ID[\"BLOCKQUOTE\"] = 13] = \"BLOCKQUOTE\";\n TAG_ID[TAG_ID[\"BODY\"] = 14] = \"BODY\";\n TAG_ID[TAG_ID[\"BR\"] = 15] = \"BR\";\n TAG_ID[TAG_ID[\"BUTTON\"] = 16] = \"BUTTON\";\n TAG_ID[TAG_ID[\"CAPTION\"] = 17] = \"CAPTION\";\n TAG_ID[TAG_ID[\"CENTER\"] = 18] = \"CENTER\";\n TAG_ID[TAG_ID[\"CODE\"] = 19] = \"CODE\";\n TAG_ID[TAG_ID[\"COL\"] = 20] = \"COL\";\n TAG_ID[TAG_ID[\"COLGROUP\"] = 21] = \"COLGROUP\";\n TAG_ID[TAG_ID[\"DD\"] = 22] = \"DD\";\n TAG_ID[TAG_ID[\"DESC\"] = 23] = \"DESC\";\n TAG_ID[TAG_ID[\"DETAILS\"] = 24] = \"DETAILS\";\n TAG_ID[TAG_ID[\"DIALOG\"] = 25] = \"DIALOG\";\n TAG_ID[TAG_ID[\"DIR\"] = 26] = \"DIR\";\n TAG_ID[TAG_ID[\"DIV\"] = 27] = \"DIV\";\n TAG_ID[TAG_ID[\"DL\"] = 28] = \"DL\";\n TAG_ID[TAG_ID[\"DT\"] = 29] = \"DT\";\n TAG_ID[TAG_ID[\"EM\"] = 30] = \"EM\";\n TAG_ID[TAG_ID[\"EMBED\"] = 31] = \"EMBED\";\n TAG_ID[TAG_ID[\"FIELDSET\"] = 32] = \"FIELDSET\";\n TAG_ID[TAG_ID[\"FIGCAPTION\"] = 33] = \"FIGCAPTION\";\n TAG_ID[TAG_ID[\"FIGURE\"] = 34] = \"FIGURE\";\n TAG_ID[TAG_ID[\"FONT\"] = 35] = \"FONT\";\n TAG_ID[TAG_ID[\"FOOTER\"] = 36] = \"FOOTER\";\n TAG_ID[TAG_ID[\"FOREIGN_OBJECT\"] = 37] = \"FOREIGN_OBJECT\";\n TAG_ID[TAG_ID[\"FORM\"] = 38] = \"FORM\";\n TAG_ID[TAG_ID[\"FRAME\"] = 39] = \"FRAME\";\n TAG_ID[TAG_ID[\"FRAMESET\"] = 40] = \"FRAMESET\";\n TAG_ID[TAG_ID[\"H1\"] = 41] = \"H1\";\n TAG_ID[TAG_ID[\"H2\"] = 42] = \"H2\";\n TAG_ID[TAG_ID[\"H3\"] = 43] = \"H3\";\n TAG_ID[TAG_ID[\"H4\"] = 44] = \"H4\";\n TAG_ID[TAG_ID[\"H5\"] = 45] = \"H5\";\n TAG_ID[TAG_ID[\"H6\"] = 46] = \"H6\";\n TAG_ID[TAG_ID[\"HEAD\"] = 47] = \"HEAD\";\n TAG_ID[TAG_ID[\"HEADER\"] = 48] = \"HEADER\";\n TAG_ID[TAG_ID[\"HGROUP\"] = 49] = \"HGROUP\";\n TAG_ID[TAG_ID[\"HR\"] = 50] = \"HR\";\n TAG_ID[TAG_ID[\"HTML\"] = 51] = \"HTML\";\n TAG_ID[TAG_ID[\"I\"] = 52] = \"I\";\n TAG_ID[TAG_ID[\"IMG\"] = 53] = \"IMG\";\n TAG_ID[TAG_ID[\"IMAGE\"] = 54] = \"IMAGE\";\n TAG_ID[TAG_ID[\"INPUT\"] = 55] = \"INPUT\";\n TAG_ID[TAG_ID[\"IFRAME\"] = 56] = \"IFRAME\";\n TAG_ID[TAG_ID[\"KEYGEN\"] = 57] = \"KEYGEN\";\n TAG_ID[TAG_ID[\"LABEL\"] = 58] = \"LABEL\";\n TAG_ID[TAG_ID[\"LI\"] = 59] = \"LI\";\n TAG_ID[TAG_ID[\"LINK\"] = 60] = \"LINK\";\n TAG_ID[TAG_ID[\"LISTING\"] = 61] = \"LISTING\";\n TAG_ID[TAG_ID[\"MAIN\"] = 62] = \"MAIN\";\n TAG_ID[TAG_ID[\"MALIGNMARK\"] = 63] = \"MALIGNMARK\";\n TAG_ID[TAG_ID[\"MARQUEE\"] = 64] = \"MARQUEE\";\n TAG_ID[TAG_ID[\"MATH\"] = 65] = \"MATH\";\n TAG_ID[TAG_ID[\"MENU\"] = 66] = \"MENU\";\n TAG_ID[TAG_ID[\"META\"] = 67] = \"META\";\n TAG_ID[TAG_ID[\"MGLYPH\"] = 68] = \"MGLYPH\";\n TAG_ID[TAG_ID[\"MI\"] = 69] = \"MI\";\n TAG_ID[TAG_ID[\"MO\"] = 70] = \"MO\";\n TAG_ID[TAG_ID[\"MN\"] = 71] = \"MN\";\n TAG_ID[TAG_ID[\"MS\"] = 72] = \"MS\";\n TAG_ID[TAG_ID[\"MTEXT\"] = 73] = \"MTEXT\";\n TAG_ID[TAG_ID[\"NAV\"] = 74] = \"NAV\";\n TAG_ID[TAG_ID[\"NOBR\"] = 75] = \"NOBR\";\n TAG_ID[TAG_ID[\"NOFRAMES\"] = 76] = \"NOFRAMES\";\n TAG_ID[TAG_ID[\"NOEMBED\"] = 77] = \"NOEMBED\";\n TAG_ID[TAG_ID[\"NOSCRIPT\"] = 78] = \"NOSCRIPT\";\n TAG_ID[TAG_ID[\"OBJECT\"] = 79] = \"OBJECT\";\n TAG_ID[TAG_ID[\"OL\"] = 80] = \"OL\";\n TAG_ID[TAG_ID[\"OPTGROUP\"] = 81] = \"OPTGROUP\";\n TAG_ID[TAG_ID[\"OPTION\"] = 82] = \"OPTION\";\n TAG_ID[TAG_ID[\"P\"] = 83] = \"P\";\n TAG_ID[TAG_ID[\"PARAM\"] = 84] = \"PARAM\";\n TAG_ID[TAG_ID[\"PLAINTEXT\"] = 85] = \"PLAINTEXT\";\n TAG_ID[TAG_ID[\"PRE\"] = 86] = \"PRE\";\n TAG_ID[TAG_ID[\"RB\"] = 87] = \"RB\";\n TAG_ID[TAG_ID[\"RP\"] = 88] = \"RP\";\n TAG_ID[TAG_ID[\"RT\"] = 89] = \"RT\";\n TAG_ID[TAG_ID[\"RTC\"] = 90] = \"RTC\";\n TAG_ID[TAG_ID[\"RUBY\"] = 91] = \"RUBY\";\n TAG_ID[TAG_ID[\"S\"] = 92] = \"S\";\n TAG_ID[TAG_ID[\"SCRIPT\"] = 93] = \"SCRIPT\";\n TAG_ID[TAG_ID[\"SECTION\"] = 94] = \"SECTION\";\n TAG_ID[TAG_ID[\"SELECT\"] = 95] = \"SELECT\";\n TAG_ID[TAG_ID[\"SOURCE\"] = 96] = \"SOURCE\";\n TAG_ID[TAG_ID[\"SMALL\"] = 97] = \"SMALL\";\n TAG_ID[TAG_ID[\"SPAN\"] = 98] = \"SPAN\";\n TAG_ID[TAG_ID[\"STRIKE\"] = 99] = \"STRIKE\";\n TAG_ID[TAG_ID[\"STRONG\"] = 100] = \"STRONG\";\n TAG_ID[TAG_ID[\"STYLE\"] = 101] = \"STYLE\";\n TAG_ID[TAG_ID[\"SUB\"] = 102] = \"SUB\";\n TAG_ID[TAG_ID[\"SUMMARY\"] = 103] = \"SUMMARY\";\n TAG_ID[TAG_ID[\"SUP\"] = 104] = \"SUP\";\n TAG_ID[TAG_ID[\"TABLE\"] = 105] = \"TABLE\";\n TAG_ID[TAG_ID[\"TBODY\"] = 106] = \"TBODY\";\n TAG_ID[TAG_ID[\"TEMPLATE\"] = 107] = \"TEMPLATE\";\n TAG_ID[TAG_ID[\"TEXTAREA\"] = 108] = \"TEXTAREA\";\n TAG_ID[TAG_ID[\"TFOOT\"] = 109] = \"TFOOT\";\n TAG_ID[TAG_ID[\"TD\"] = 110] = \"TD\";\n TAG_ID[TAG_ID[\"TH\"] = 111] = \"TH\";\n TAG_ID[TAG_ID[\"THEAD\"] = 112] = \"THEAD\";\n TAG_ID[TAG_ID[\"TITLE\"] = 113] = \"TITLE\";\n TAG_ID[TAG_ID[\"TR\"] = 114] = \"TR\";\n TAG_ID[TAG_ID[\"TRACK\"] = 115] = \"TRACK\";\n TAG_ID[TAG_ID[\"TT\"] = 116] = \"TT\";\n TAG_ID[TAG_ID[\"U\"] = 117] = \"U\";\n TAG_ID[TAG_ID[\"UL\"] = 118] = \"UL\";\n TAG_ID[TAG_ID[\"SVG\"] = 119] = \"SVG\";\n TAG_ID[TAG_ID[\"VAR\"] = 120] = \"VAR\";\n TAG_ID[TAG_ID[\"WBR\"] = 121] = \"WBR\";\n TAG_ID[TAG_ID[\"XMP\"] = 122] = \"XMP\";\n})(TAG_ID = TAG_ID || (TAG_ID = {}));\nconst TAG_NAME_TO_ID = new Map([\n [TAG_NAMES.A, TAG_ID.A],\n [TAG_NAMES.ADDRESS, TAG_ID.ADDRESS],\n [TAG_NAMES.ANNOTATION_XML, TAG_ID.ANNOTATION_XML],\n [TAG_NAMES.APPLET, TAG_ID.APPLET],\n [TAG_NAMES.AREA, TAG_ID.AREA],\n [TAG_NAMES.ARTICLE, TAG_ID.ARTICLE],\n [TAG_NAMES.ASIDE, TAG_ID.ASIDE],\n [TAG_NAMES.B, TAG_ID.B],\n [TAG_NAMES.BASE, TAG_ID.BASE],\n [TAG_NAMES.BASEFONT, TAG_ID.BASEFONT],\n [TAG_NAMES.BGSOUND, TAG_ID.BGSOUND],\n [TAG_NAMES.BIG, TAG_ID.BIG],\n [TAG_NAMES.BLOCKQUOTE, TAG_ID.BLOCKQUOTE],\n [TAG_NAMES.BODY, TAG_ID.BODY],\n [TAG_NAMES.BR, TAG_ID.BR],\n [TAG_NAMES.BUTTON, TAG_ID.BUTTON],\n [TAG_NAMES.CAPTION, TAG_ID.CAPTION],\n [TAG_NAMES.CENTER, TAG_ID.CENTER],\n [TAG_NAMES.CODE, TAG_ID.CODE],\n [TAG_NAMES.COL, TAG_ID.COL],\n [TAG_NAMES.COLGROUP, TAG_ID.COLGROUP],\n [TAG_NAMES.DD, TAG_ID.DD],\n [TAG_NAMES.DESC, TAG_ID.DESC],\n [TAG_NAMES.DETAILS, TAG_ID.DETAILS],\n [TAG_NAMES.DIALOG, TAG_ID.DIALOG],\n [TAG_NAMES.DIR, TAG_ID.DIR],\n [TAG_NAMES.DIV, TAG_ID.DIV],\n [TAG_NAMES.DL, TAG_ID.DL],\n [TAG_NAMES.DT, TAG_ID.DT],\n [TAG_NAMES.EM, TAG_ID.EM],\n [TAG_NAMES.EMBED, TAG_ID.EMBED],\n [TAG_NAMES.FIELDSET, TAG_ID.FIELDSET],\n [TAG_NAMES.FIGCAPTION, TAG_ID.FIGCAPTION],\n [TAG_NAMES.FIGURE, TAG_ID.FIGURE],\n [TAG_NAMES.FONT, TAG_ID.FONT],\n [TAG_NAMES.FOOTER, TAG_ID.FOOTER],\n [TAG_NAMES.FOREIGN_OBJECT, TAG_ID.FOREIGN_OBJECT],\n [TAG_NAMES.FORM, TAG_ID.FORM],\n [TAG_NAMES.FRAME, TAG_ID.FRAME],\n [TAG_NAMES.FRAMESET, TAG_ID.FRAMESET],\n [TAG_NAMES.H1, TAG_ID.H1],\n [TAG_NAMES.H2, TAG_ID.H2],\n [TAG_NAMES.H3, TAG_ID.H3],\n [TAG_NAMES.H4, TAG_ID.H4],\n [TAG_NAMES.H5, TAG_ID.H5],\n [TAG_NAMES.H6, TAG_ID.H6],\n [TAG_NAMES.HEAD, TAG_ID.HEAD],\n [TAG_NAMES.HEADER, TAG_ID.HEADER],\n [TAG_NAMES.HGROUP, TAG_ID.HGROUP],\n [TAG_NAMES.HR, TAG_ID.HR],\n [TAG_NAMES.HTML, TAG_ID.HTML],\n [TAG_NAMES.I, TAG_ID.I],\n [TAG_NAMES.IMG, TAG_ID.IMG],\n [TAG_NAMES.IMAGE, TAG_ID.IMAGE],\n [TAG_NAMES.INPUT, TAG_ID.INPUT],\n [TAG_NAMES.IFRAME, TAG_ID.IFRAME],\n [TAG_NAMES.KEYGEN, TAG_ID.KEYGEN],\n [TAG_NAMES.LABEL, TAG_ID.LABEL],\n [TAG_NAMES.LI, TAG_ID.LI],\n [TAG_NAMES.LINK, TAG_ID.LINK],\n [TAG_NAMES.LISTING, TAG_ID.LISTING],\n [TAG_NAMES.MAIN, TAG_ID.MAIN],\n [TAG_NAMES.MALIGNMARK, TAG_ID.MALIGNMARK],\n [TAG_NAMES.MARQUEE, TAG_ID.MARQUEE],\n [TAG_NAMES.MATH, TAG_ID.MATH],\n [TAG_NAMES.MENU, TAG_ID.MENU],\n [TAG_NAMES.META, TAG_ID.META],\n [TAG_NAMES.MGLYPH, TAG_ID.MGLYPH],\n [TAG_NAMES.MI, TAG_ID.MI],\n [TAG_NAMES.MO, TAG_ID.MO],\n [TAG_NAMES.MN, TAG_ID.MN],\n [TAG_NAMES.MS, TAG_ID.MS],\n [TAG_NAMES.MTEXT, TAG_ID.MTEXT],\n [TAG_NAMES.NAV, TAG_ID.NAV],\n [TAG_NAMES.NOBR, TAG_ID.NOBR],\n [TAG_NAMES.NOFRAMES, TAG_ID.NOFRAMES],\n [TAG_NAMES.NOEMBED, TAG_ID.NOEMBED],\n [TAG_NAMES.NOSCRIPT, TAG_ID.NOSCRIPT],\n [TAG_NAMES.OBJECT, TAG_ID.OBJECT],\n [TAG_NAMES.OL, TAG_ID.OL],\n [TAG_NAMES.OPTGROUP, TAG_ID.OPTGROUP],\n [TAG_NAMES.OPTION, TAG_ID.OPTION],\n [TAG_NAMES.P, TAG_ID.P],\n [TAG_NAMES.PARAM, TAG_ID.PARAM],\n [TAG_NAMES.PLAINTEXT, TAG_ID.PLAINTEXT],\n [TAG_NAMES.PRE, TAG_ID.PRE],\n [TAG_NAMES.RB, TAG_ID.RB],\n [TAG_NAMES.RP, TAG_ID.RP],\n [TAG_NAMES.RT, TAG_ID.RT],\n [TAG_NAMES.RTC, TAG_ID.RTC],\n [TAG_NAMES.RUBY, TAG_ID.RUBY],\n [TAG_NAMES.S, TAG_ID.S],\n [TAG_NAMES.SCRIPT, TAG_ID.SCRIPT],\n [TAG_NAMES.SECTION, TAG_ID.SECTION],\n [TAG_NAMES.SELECT, TAG_ID.SELECT],\n [TAG_NAMES.SOURCE, TAG_ID.SOURCE],\n [TAG_NAMES.SMALL, TAG_ID.SMALL],\n [TAG_NAMES.SPAN, TAG_ID.SPAN],\n [TAG_NAMES.STRIKE, TAG_ID.STRIKE],\n [TAG_NAMES.STRONG, TAG_ID.STRONG],\n [TAG_NAMES.STYLE, TAG_ID.STYLE],\n [TAG_NAMES.SUB, TAG_ID.SUB],\n [TAG_NAMES.SUMMARY, TAG_ID.SUMMARY],\n [TAG_NAMES.SUP, TAG_ID.SUP],\n [TAG_NAMES.TABLE, TAG_ID.TABLE],\n [TAG_NAMES.TBODY, TAG_ID.TBODY],\n [TAG_NAMES.TEMPLATE, TAG_ID.TEMPLATE],\n [TAG_NAMES.TEXTAREA, TAG_ID.TEXTAREA],\n [TAG_NAMES.TFOOT, TAG_ID.TFOOT],\n [TAG_NAMES.TD, TAG_ID.TD],\n [TAG_NAMES.TH, TAG_ID.TH],\n [TAG_NAMES.THEAD, TAG_ID.THEAD],\n [TAG_NAMES.TITLE, TAG_ID.TITLE],\n [TAG_NAMES.TR, TAG_ID.TR],\n [TAG_NAMES.TRACK, TAG_ID.TRACK],\n [TAG_NAMES.TT, TAG_ID.TT],\n [TAG_NAMES.U, TAG_ID.U],\n [TAG_NAMES.UL, TAG_ID.UL],\n [TAG_NAMES.SVG, TAG_ID.SVG],\n [TAG_NAMES.VAR, TAG_ID.VAR],\n [TAG_NAMES.WBR, TAG_ID.WBR],\n [TAG_NAMES.XMP, TAG_ID.XMP],\n]);\nexport function getTagID(tagName) {\n var _a;\n return (_a = TAG_NAME_TO_ID.get(tagName)) !== null && _a !== void 0 ? _a : TAG_ID.UNKNOWN;\n}\nconst $ = TAG_ID;\nexport const SPECIAL_ELEMENTS = {\n [NS.HTML]: new Set([\n $.ADDRESS,\n $.APPLET,\n $.AREA,\n $.ARTICLE,\n $.ASIDE,\n $.BASE,\n $.BASEFONT,\n $.BGSOUND,\n $.BLOCKQUOTE,\n $.BODY,\n $.BR,\n $.BUTTON,\n $.CAPTION,\n $.CENTER,\n $.COL,\n $.COLGROUP,\n $.DD,\n $.DETAILS,\n $.DIR,\n $.DIV,\n $.DL,\n $.DT,\n $.EMBED,\n $.FIELDSET,\n $.FIGCAPTION,\n $.FIGURE,\n $.FOOTER,\n $.FORM,\n $.FRAME,\n $.FRAMESET,\n $.H1,\n $.H2,\n $.H3,\n $.H4,\n $.H5,\n $.H6,\n $.HEAD,\n $.HEADER,\n $.HGROUP,\n $.HR,\n $.HTML,\n $.IFRAME,\n $.IMG,\n $.INPUT,\n $.LI,\n $.LINK,\n $.LISTING,\n $.MAIN,\n $.MARQUEE,\n $.MENU,\n $.META,\n $.NAV,\n $.NOEMBED,\n $.NOFRAMES,\n $.NOSCRIPT,\n $.OBJECT,\n $.OL,\n $.P,\n $.PARAM,\n $.PLAINTEXT,\n $.PRE,\n $.SCRIPT,\n $.SECTION,\n $.SELECT,\n $.SOURCE,\n $.STYLE,\n $.SUMMARY,\n $.TABLE,\n $.TBODY,\n $.TD,\n $.TEMPLATE,\n $.TEXTAREA,\n $.TFOOT,\n $.TH,\n $.THEAD,\n $.TITLE,\n $.TR,\n $.TRACK,\n $.UL,\n $.WBR,\n $.XMP,\n ]),\n [NS.MATHML]: new Set([$.MI, $.MO, $.MN, $.MS, $.MTEXT, $.ANNOTATION_XML]),\n [NS.SVG]: new Set([$.TITLE, $.FOREIGN_OBJECT, $.DESC]),\n [NS.XLINK]: new Set(),\n [NS.XML]: new Set(),\n [NS.XMLNS]: new Set(),\n};\nexport function isNumberedHeader(tn) {\n return tn === $.H1 || tn === $.H2 || tn === $.H3 || tn === $.H4 || tn === $.H5 || tn === $.H6;\n}\nconst UNESCAPED_TEXT = new Set([\n TAG_NAMES.STYLE,\n TAG_NAMES.SCRIPT,\n TAG_NAMES.XMP,\n TAG_NAMES.IFRAME,\n TAG_NAMES.NOEMBED,\n TAG_NAMES.NOFRAMES,\n TAG_NAMES.PLAINTEXT,\n]);\nexport function hasUnescapedText(tn, scriptingEnabled) {\n return UNESCAPED_TEXT.has(tn) || (scriptingEnabled && tn === TAG_NAMES.NOSCRIPT);\n}\n//# sourceMappingURL=html.js.map","import { Preprocessor } from './preprocessor.js';\nimport { CODE_POINTS as $, SEQUENCES as $$, REPLACEMENT_CHARACTER, isSurrogate, isUndefinedCodePoint, isControlCodePoint, } from '../common/unicode.js';\nimport { TokenType, getTokenAttr, } from '../common/token.js';\nimport { htmlDecodeTree, BinTrieFlags, determineBranch } from 'entities/lib/decode.js';\nimport { ERR } from '../common/error-codes.js';\nimport { TAG_ID, getTagID } from '../common/html.js';\n//C1 Unicode control character reference replacements\nconst C1_CONTROLS_REFERENCE_REPLACEMENTS = new Map([\n [0x80, 8364],\n [0x82, 8218],\n [0x83, 402],\n [0x84, 8222],\n [0x85, 8230],\n [0x86, 8224],\n [0x87, 8225],\n [0x88, 710],\n [0x89, 8240],\n [0x8a, 352],\n [0x8b, 8249],\n [0x8c, 338],\n [0x8e, 381],\n [0x91, 8216],\n [0x92, 8217],\n [0x93, 8220],\n [0x94, 8221],\n [0x95, 8226],\n [0x96, 8211],\n [0x97, 8212],\n [0x98, 732],\n [0x99, 8482],\n [0x9a, 353],\n [0x9b, 8250],\n [0x9c, 339],\n [0x9e, 382],\n [0x9f, 376],\n]);\n//States\nvar State;\n(function (State) {\n State[State[\"DATA\"] = 0] = \"DATA\";\n State[State[\"RCDATA\"] = 1] = \"RCDATA\";\n State[State[\"RAWTEXT\"] = 2] = \"RAWTEXT\";\n State[State[\"SCRIPT_DATA\"] = 3] = \"SCRIPT_DATA\";\n State[State[\"PLAINTEXT\"] = 4] = \"PLAINTEXT\";\n State[State[\"TAG_OPEN\"] = 5] = \"TAG_OPEN\";\n State[State[\"END_TAG_OPEN\"] = 6] = \"END_TAG_OPEN\";\n State[State[\"TAG_NAME\"] = 7] = \"TAG_NAME\";\n State[State[\"RCDATA_LESS_THAN_SIGN\"] = 8] = \"RCDATA_LESS_THAN_SIGN\";\n State[State[\"RCDATA_END_TAG_OPEN\"] = 9] = \"RCDATA_END_TAG_OPEN\";\n State[State[\"RCDATA_END_TAG_NAME\"] = 10] = \"RCDATA_END_TAG_NAME\";\n State[State[\"RAWTEXT_LESS_THAN_SIGN\"] = 11] = \"RAWTEXT_LESS_THAN_SIGN\";\n State[State[\"RAWTEXT_END_TAG_OPEN\"] = 12] = \"RAWTEXT_END_TAG_OPEN\";\n State[State[\"RAWTEXT_END_TAG_NAME\"] = 13] = \"RAWTEXT_END_TAG_NAME\";\n State[State[\"SCRIPT_DATA_LESS_THAN_SIGN\"] = 14] = \"SCRIPT_DATA_LESS_THAN_SIGN\";\n State[State[\"SCRIPT_DATA_END_TAG_OPEN\"] = 15] = \"SCRIPT_DATA_END_TAG_OPEN\";\n State[State[\"SCRIPT_DATA_END_TAG_NAME\"] = 16] = \"SCRIPT_DATA_END_TAG_NAME\";\n State[State[\"SCRIPT_DATA_ESCAPE_START\"] = 17] = \"SCRIPT_DATA_ESCAPE_START\";\n State[State[\"SCRIPT_DATA_ESCAPE_START_DASH\"] = 18] = \"SCRIPT_DATA_ESCAPE_START_DASH\";\n State[State[\"SCRIPT_DATA_ESCAPED\"] = 19] = \"SCRIPT_DATA_ESCAPED\";\n State[State[\"SCRIPT_DATA_ESCAPED_DASH\"] = 20] = \"SCRIPT_DATA_ESCAPED_DASH\";\n State[State[\"SCRIPT_DATA_ESCAPED_DASH_DASH\"] = 21] = \"SCRIPT_DATA_ESCAPED_DASH_DASH\";\n State[State[\"SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN\"] = 22] = \"SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN\";\n State[State[\"SCRIPT_DATA_ESCAPED_END_TAG_OPEN\"] = 23] = \"SCRIPT_DATA_ESCAPED_END_TAG_OPEN\";\n State[State[\"SCRIPT_DATA_ESCAPED_END_TAG_NAME\"] = 24] = \"SCRIPT_DATA_ESCAPED_END_TAG_NAME\";\n State[State[\"SCRIPT_DATA_DOUBLE_ESCAPE_START\"] = 25] = \"SCRIPT_DATA_DOUBLE_ESCAPE_START\";\n State[State[\"SCRIPT_DATA_DOUBLE_ESCAPED\"] = 26] = \"SCRIPT_DATA_DOUBLE_ESCAPED\";\n State[State[\"SCRIPT_DATA_DOUBLE_ESCAPED_DASH\"] = 27] = \"SCRIPT_DATA_DOUBLE_ESCAPED_DASH\";\n State[State[\"SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH\"] = 28] = \"SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH\";\n State[State[\"SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN\"] = 29] = \"SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN\";\n State[State[\"SCRIPT_DATA_DOUBLE_ESCAPE_END\"] = 30] = \"SCRIPT_DATA_DOUBLE_ESCAPE_END\";\n State[State[\"BEFORE_ATTRIBUTE_NAME\"] = 31] = \"BEFORE_ATTRIBUTE_NAME\";\n State[State[\"ATTRIBUTE_NAME\"] = 32] = \"ATTRIBUTE_NAME\";\n State[State[\"AFTER_ATTRIBUTE_NAME\"] = 33] = \"AFTER_ATTRIBUTE_NAME\";\n State[State[\"BEFORE_ATTRIBUTE_VALUE\"] = 34] = \"BEFORE_ATTRIBUTE_VALUE\";\n State[State[\"ATTRIBUTE_VALUE_DOUBLE_QUOTED\"] = 35] = \"ATTRIBUTE_VALUE_DOUBLE_QUOTED\";\n State[State[\"ATTRIBUTE_VALUE_SINGLE_QUOTED\"] = 36] = \"ATTRIBUTE_VALUE_SINGLE_QUOTED\";\n State[State[\"ATTRIBUTE_VALUE_UNQUOTED\"] = 37] = \"ATTRIBUTE_VALUE_UNQUOTED\";\n State[State[\"AFTER_ATTRIBUTE_VALUE_QUOTED\"] = 38] = \"AFTER_ATTRIBUTE_VALUE_QUOTED\";\n State[State[\"SELF_CLOSING_START_TAG\"] = 39] = \"SELF_CLOSING_START_TAG\";\n State[State[\"BOGUS_COMMENT\"] = 40] = \"BOGUS_COMMENT\";\n State[State[\"MARKUP_DECLARATION_OPEN\"] = 41] = \"MARKUP_DECLARATION_OPEN\";\n State[State[\"COMMENT_START\"] = 42] = \"COMMENT_START\";\n State[State[\"COMMENT_START_DASH\"] = 43] = \"COMMENT_START_DASH\";\n State[State[\"COMMENT\"] = 44] = \"COMMENT\";\n State[State[\"COMMENT_LESS_THAN_SIGN\"] = 45] = \"COMMENT_LESS_THAN_SIGN\";\n State[State[\"COMMENT_LESS_THAN_SIGN_BANG\"] = 46] = \"COMMENT_LESS_THAN_SIGN_BANG\";\n State[State[\"COMMENT_LESS_THAN_SIGN_BANG_DASH\"] = 47] = \"COMMENT_LESS_THAN_SIGN_BANG_DASH\";\n State[State[\"COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH\"] = 48] = \"COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH\";\n State[State[\"COMMENT_END_DASH\"] = 49] = \"COMMENT_END_DASH\";\n State[State[\"COMMENT_END\"] = 50] = \"COMMENT_END\";\n State[State[\"COMMENT_END_BANG\"] = 51] = \"COMMENT_END_BANG\";\n State[State[\"DOCTYPE\"] = 52] = \"DOCTYPE\";\n State[State[\"BEFORE_DOCTYPE_NAME\"] = 53] = \"BEFORE_DOCTYPE_NAME\";\n State[State[\"DOCTYPE_NAME\"] = 54] = \"DOCTYPE_NAME\";\n State[State[\"AFTER_DOCTYPE_NAME\"] = 55] = \"AFTER_DOCTYPE_NAME\";\n State[State[\"AFTER_DOCTYPE_PUBLIC_KEYWORD\"] = 56] = \"AFTER_DOCTYPE_PUBLIC_KEYWORD\";\n State[State[\"BEFORE_DOCTYPE_PUBLIC_IDENTIFIER\"] = 57] = \"BEFORE_DOCTYPE_PUBLIC_IDENTIFIER\";\n State[State[\"DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED\"] = 58] = \"DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED\";\n State[State[\"DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED\"] = 59] = \"DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED\";\n State[State[\"AFTER_DOCTYPE_PUBLIC_IDENTIFIER\"] = 60] = \"AFTER_DOCTYPE_PUBLIC_IDENTIFIER\";\n State[State[\"BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS\"] = 61] = \"BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS\";\n State[State[\"AFTER_DOCTYPE_SYSTEM_KEYWORD\"] = 62] = \"AFTER_DOCTYPE_SYSTEM_KEYWORD\";\n State[State[\"BEFORE_DOCTYPE_SYSTEM_IDENTIFIER\"] = 63] = \"BEFORE_DOCTYPE_SYSTEM_IDENTIFIER\";\n State[State[\"DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED\"] = 64] = \"DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED\";\n State[State[\"DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED\"] = 65] = \"DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED\";\n State[State[\"AFTER_DOCTYPE_SYSTEM_IDENTIFIER\"] = 66] = \"AFTER_DOCTYPE_SYSTEM_IDENTIFIER\";\n State[State[\"BOGUS_DOCTYPE\"] = 67] = \"BOGUS_DOCTYPE\";\n State[State[\"CDATA_SECTION\"] = 68] = \"CDATA_SECTION\";\n State[State[\"CDATA_SECTION_BRACKET\"] = 69] = \"CDATA_SECTION_BRACKET\";\n State[State[\"CDATA_SECTION_END\"] = 70] = \"CDATA_SECTION_END\";\n State[State[\"CHARACTER_REFERENCE\"] = 71] = \"CHARACTER_REFERENCE\";\n State[State[\"NAMED_CHARACTER_REFERENCE\"] = 72] = \"NAMED_CHARACTER_REFERENCE\";\n State[State[\"AMBIGUOUS_AMPERSAND\"] = 73] = \"AMBIGUOUS_AMPERSAND\";\n State[State[\"NUMERIC_CHARACTER_REFERENCE\"] = 74] = \"NUMERIC_CHARACTER_REFERENCE\";\n State[State[\"HEXADEMICAL_CHARACTER_REFERENCE_START\"] = 75] = \"HEXADEMICAL_CHARACTER_REFERENCE_START\";\n State[State[\"HEXADEMICAL_CHARACTER_REFERENCE\"] = 76] = \"HEXADEMICAL_CHARACTER_REFERENCE\";\n State[State[\"DECIMAL_CHARACTER_REFERENCE\"] = 77] = \"DECIMAL_CHARACTER_REFERENCE\";\n State[State[\"NUMERIC_CHARACTER_REFERENCE_END\"] = 78] = \"NUMERIC_CHARACTER_REFERENCE_END\";\n})(State || (State = {}));\n//Tokenizer initial states for different modes\nexport const TokenizerMode = {\n DATA: State.DATA,\n RCDATA: State.RCDATA,\n RAWTEXT: State.RAWTEXT,\n SCRIPT_DATA: State.SCRIPT_DATA,\n PLAINTEXT: State.PLAINTEXT,\n CDATA_SECTION: State.CDATA_SECTION,\n};\n//Utils\n//OPTIMIZATION: these utility functions should not be moved out of this module. V8 Crankshaft will not inline\n//this functions if they will be situated in another module due to context switch.\n//Always perform inlining check before modifying this functions ('node --trace-inlining').\nfunction isAsciiDigit(cp) {\n return cp >= $.DIGIT_0 && cp <= $.DIGIT_9;\n}\nfunction isAsciiUpper(cp) {\n return cp >= $.LATIN_CAPITAL_A && cp <= $.LATIN_CAPITAL_Z;\n}\nfunction isAsciiLower(cp) {\n return cp >= $.LATIN_SMALL_A && cp <= $.LATIN_SMALL_Z;\n}\nfunction isAsciiLetter(cp) {\n return isAsciiLower(cp) || isAsciiUpper(cp);\n}\nfunction isAsciiAlphaNumeric(cp) {\n return isAsciiLetter(cp) || isAsciiDigit(cp);\n}\nfunction isAsciiUpperHexDigit(cp) {\n return cp >= $.LATIN_CAPITAL_A && cp <= $.LATIN_CAPITAL_F;\n}\nfunction isAsciiLowerHexDigit(cp) {\n return cp >= $.LATIN_SMALL_A && cp <= $.LATIN_SMALL_F;\n}\nfunction isAsciiHexDigit(cp) {\n return isAsciiDigit(cp) || isAsciiUpperHexDigit(cp) || isAsciiLowerHexDigit(cp);\n}\nfunction toAsciiLower(cp) {\n return cp + 32;\n}\nfunction isWhitespace(cp) {\n return cp === $.SPACE || cp === $.LINE_FEED || cp === $.TABULATION || cp === $.FORM_FEED;\n}\nfunction isEntityInAttributeInvalidEnd(nextCp) {\n return nextCp === $.EQUALS_SIGN || isAsciiAlphaNumeric(nextCp);\n}\nfunction isScriptDataDoubleEscapeSequenceEnd(cp) {\n return isWhitespace(cp) || cp === $.SOLIDUS || cp === $.GREATER_THAN_SIGN;\n}\n//Tokenizer\nexport class Tokenizer {\n constructor(options, handler) {\n this.options = options;\n this.handler = handler;\n this.paused = false;\n /** Ensures that the parsing loop isn't run multiple times at once. */\n this.inLoop = false;\n /**\n * Indicates that the current adjusted node exists, is not an element in the HTML namespace,\n * and that it is not an integration point for either MathML or HTML.\n *\n * @see {@link https://html.spec.whatwg.org/multipage/parsing.html#tree-construction}\n */\n this.inForeignNode = false;\n this.lastStartTagName = '';\n this.active = false;\n this.state = State.DATA;\n this.returnState = State.DATA;\n this.charRefCode = -1;\n this.consumedAfterSnapshot = -1;\n this.currentCharacterToken = null;\n this.currentToken = null;\n this.currentAttr = { name: '', value: '' };\n this.preprocessor = new Preprocessor(handler);\n this.currentLocation = this.getCurrentLocation(-1);\n }\n //Errors\n _err(code) {\n var _a, _b;\n (_b = (_a = this.handler).onParseError) === null || _b === void 0 ? void 0 : _b.call(_a, this.preprocessor.getError(code));\n }\n // NOTE: `offset` may never run across line boundaries.\n getCurrentLocation(offset) {\n if (!this.options.sourceCodeLocationInfo) {\n return null;\n }\n return {\n startLine: this.preprocessor.line,\n startCol: this.preprocessor.col - offset,\n startOffset: this.preprocessor.offset - offset,\n endLine: -1,\n endCol: -1,\n endOffset: -1,\n };\n }\n _runParsingLoop() {\n if (this.inLoop)\n return;\n this.inLoop = true;\n while (this.active && !this.paused) {\n this.consumedAfterSnapshot = 0;\n const cp = this._consume();\n if (!this._ensureHibernation()) {\n this._callState(cp);\n }\n }\n this.inLoop = false;\n }\n //API\n pause() {\n this.paused = true;\n }\n resume(writeCallback) {\n if (!this.paused) {\n throw new Error('Parser was already resumed');\n }\n this.paused = false;\n // Necessary for synchronous resume.\n if (this.inLoop)\n return;\n this._runParsingLoop();\n if (!this.paused) {\n writeCallback === null || writeCallback === void 0 ? void 0 : writeCallback();\n }\n }\n write(chunk, isLastChunk, writeCallback) {\n this.active = true;\n this.preprocessor.write(chunk, isLastChunk);\n this._runParsingLoop();\n if (!this.paused) {\n writeCallback === null || writeCallback === void 0 ? void 0 : writeCallback();\n }\n }\n insertHtmlAtCurrentPos(chunk) {\n this.active = true;\n this.preprocessor.insertHtmlAtCurrentPos(chunk);\n this._runParsingLoop();\n }\n //Hibernation\n _ensureHibernation() {\n if (this.preprocessor.endOfChunkHit) {\n this._unconsume(this.consumedAfterSnapshot);\n this.active = false;\n return true;\n }\n return false;\n }\n //Consumption\n _consume() {\n this.consumedAfterSnapshot++;\n return this.preprocessor.advance();\n }\n _unconsume(count) {\n this.consumedAfterSnapshot -= count;\n this.preprocessor.retreat(count);\n }\n _reconsumeInState(state, cp) {\n this.state = state;\n this._callState(cp);\n }\n _advanceBy(count) {\n this.consumedAfterSnapshot += count;\n for (let i = 0; i < count; i++) {\n this.preprocessor.advance();\n }\n }\n _consumeSequenceIfMatch(pattern, caseSensitive) {\n if (this.preprocessor.startsWith(pattern, caseSensitive)) {\n // We will already have consumed one character before calling this method.\n this._advanceBy(pattern.length - 1);\n return true;\n }\n return false;\n }\n //Token creation\n _createStartTagToken() {\n this.currentToken = {\n type: TokenType.START_TAG,\n tagName: '',\n tagID: TAG_ID.UNKNOWN,\n selfClosing: false,\n ackSelfClosing: false,\n attrs: [],\n location: this.getCurrentLocation(1),\n };\n }\n _createEndTagToken() {\n this.currentToken = {\n type: TokenType.END_TAG,\n tagName: '',\n tagID: TAG_ID.UNKNOWN,\n selfClosing: false,\n ackSelfClosing: false,\n attrs: [],\n location: this.getCurrentLocation(2),\n };\n }\n _createCommentToken(offset) {\n this.currentToken = {\n type: TokenType.COMMENT,\n data: '',\n location: this.getCurrentLocation(offset),\n };\n }\n _createDoctypeToken(initialName) {\n this.currentToken = {\n type: TokenType.DOCTYPE,\n name: initialName,\n forceQuirks: false,\n publicId: null,\n systemId: null,\n location: this.currentLocation,\n };\n }\n _createCharacterToken(type, chars) {\n this.currentCharacterToken = {\n type,\n chars,\n location: this.currentLocation,\n };\n }\n //Tag attributes\n _createAttr(attrNameFirstCh) {\n this.currentAttr = {\n name: attrNameFirstCh,\n value: '',\n };\n this.currentLocation = this.getCurrentLocation(0);\n }\n _leaveAttrName() {\n var _a;\n var _b;\n const token = this.currentToken;\n if (getTokenAttr(token, this.currentAttr.name) === null) {\n token.attrs.push(this.currentAttr);\n if (token.location && this.currentLocation) {\n const attrLocations = ((_a = (_b = token.location).attrs) !== null && _a !== void 0 ? _a : (_b.attrs = Object.create(null)));\n attrLocations[this.currentAttr.name] = this.currentLocation;\n // Set end location\n this._leaveAttrValue();\n }\n }\n else {\n this._err(ERR.duplicateAttribute);\n }\n }\n _leaveAttrValue() {\n if (this.currentLocation) {\n this.currentLocation.endLine = this.preprocessor.line;\n this.currentLocation.endCol = this.preprocessor.col;\n this.currentLocation.endOffset = this.preprocessor.offset;\n }\n }\n //Token emission\n prepareToken(ct) {\n this._emitCurrentCharacterToken(ct.location);\n this.currentToken = null;\n if (ct.location) {\n ct.location.endLine = this.preprocessor.line;\n ct.location.endCol = this.preprocessor.col + 1;\n ct.location.endOffset = this.preprocessor.offset + 1;\n }\n this.currentLocation = this.getCurrentLocation(-1);\n }\n emitCurrentTagToken() {\n const ct = this.currentToken;\n this.prepareToken(ct);\n ct.tagID = getTagID(ct.tagName);\n if (ct.type === TokenType.START_TAG) {\n this.lastStartTagName = ct.tagName;\n this.handler.onStartTag(ct);\n }\n else {\n if (ct.attrs.length > 0) {\n this._err(ERR.endTagWithAttributes);\n }\n if (ct.selfClosing) {\n this._err(ERR.endTagWithTrailingSolidus);\n }\n this.handler.onEndTag(ct);\n }\n this.preprocessor.dropParsedChunk();\n }\n emitCurrentComment(ct) {\n this.prepareToken(ct);\n this.handler.onComment(ct);\n this.preprocessor.dropParsedChunk();\n }\n emitCurrentDoctype(ct) {\n this.prepareToken(ct);\n this.handler.onDoctype(ct);\n this.preprocessor.dropParsedChunk();\n }\n _emitCurrentCharacterToken(nextLocation) {\n if (this.currentCharacterToken) {\n //NOTE: if we have a pending character token, make it's end location equal to the\n //current token's start location.\n if (nextLocation && this.currentCharacterToken.location) {\n this.currentCharacterToken.location.endLine = nextLocation.startLine;\n this.currentCharacterToken.location.endCol = nextLocation.startCol;\n this.currentCharacterToken.location.endOffset = nextLocation.startOffset;\n }\n switch (this.currentCharacterToken.type) {\n case TokenType.CHARACTER: {\n this.handler.onCharacter(this.currentCharacterToken);\n break;\n }\n case TokenType.NULL_CHARACTER: {\n this.handler.onNullCharacter(this.currentCharacterToken);\n break;\n }\n case TokenType.WHITESPACE_CHARACTER: {\n this.handler.onWhitespaceCharacter(this.currentCharacterToken);\n break;\n }\n }\n this.currentCharacterToken = null;\n }\n }\n _emitEOFToken() {\n const location = this.getCurrentLocation(0);\n if (location) {\n location.endLine = location.startLine;\n location.endCol = location.startCol;\n location.endOffset = location.startOffset;\n }\n this._emitCurrentCharacterToken(location);\n this.handler.onEof({ type: TokenType.EOF, location });\n this.active = false;\n }\n //Characters emission\n //OPTIMIZATION: specification uses only one type of character tokens (one token per character).\n //This causes a huge memory overhead and a lot of unnecessary parser loops. parse5 uses 3 groups of characters.\n //If we have a sequence of characters that belong to the same group, the parser can process it\n //as a single solid character token.\n //So, there are 3 types of character tokens in parse5:\n //1)TokenType.NULL_CHARACTER - \\u0000-character sequences (e.g. '\\u0000\\u0000\\u0000')\n //2)TokenType.WHITESPACE_CHARACTER - any whitespace/new-line character sequences (e.g. '\\n \\r\\t \\f')\n //3)TokenType.CHARACTER - any character sequence which don't belong to groups 1 and 2 (e.g. 'abcdef1234@@#$%^')\n _appendCharToCurrentCharacterToken(type, ch) {\n if (this.currentCharacterToken) {\n if (this.currentCharacterToken.type !== type) {\n this.currentLocation = this.getCurrentLocation(0);\n this._emitCurrentCharacterToken(this.currentLocation);\n this.preprocessor.dropParsedChunk();\n }\n else {\n this.currentCharacterToken.chars += ch;\n return;\n }\n }\n this._createCharacterToken(type, ch);\n }\n _emitCodePoint(cp) {\n const type = isWhitespace(cp)\n ? TokenType.WHITESPACE_CHARACTER\n : cp === $.NULL\n ? TokenType.NULL_CHARACTER\n : TokenType.CHARACTER;\n this._appendCharToCurrentCharacterToken(type, String.fromCodePoint(cp));\n }\n //NOTE: used when we emit characters explicitly.\n //This is always for non-whitespace and non-null characters, which allows us to avoid additional checks.\n _emitChars(ch) {\n this._appendCharToCurrentCharacterToken(TokenType.CHARACTER, ch);\n }\n // Character reference helpers\n _matchNamedCharacterReference(cp) {\n let result = null;\n let excess = 0;\n let withoutSemicolon = false;\n for (let i = 0, current = htmlDecodeTree[0]; i >= 0; cp = this._consume()) {\n i = determineBranch(htmlDecodeTree, current, i + 1, cp);\n if (i < 0)\n break;\n excess += 1;\n current = htmlDecodeTree[i];\n const masked = current & BinTrieFlags.VALUE_LENGTH;\n // If the branch is a value, store it and continue\n if (masked) {\n // The mask is the number of bytes of the value, including the current byte.\n const valueLength = (masked >> 14) - 1;\n // Attribute values that aren't terminated properly aren't parsed, and shouldn't lead to a parser error.\n // See the example in https://html.spec.whatwg.org/multipage/parsing.html#named-character-reference-state\n if (cp !== $.SEMICOLON &&\n this._isCharacterReferenceInAttribute() &&\n isEntityInAttributeInvalidEnd(this.preprocessor.peek(1))) {\n //NOTE: we don't flush all consumed code points here, and instead switch back to the original state after\n //emitting an ampersand. This is fine, as alphanumeric characters won't be parsed differently in attributes.\n result = [$.AMPERSAND];\n // Skip over the value.\n i += valueLength;\n }\n else {\n // If this is a surrogate pair, consume the next two bytes.\n result =\n valueLength === 0\n ? [htmlDecodeTree[i] & ~BinTrieFlags.VALUE_LENGTH]\n : valueLength === 1\n ? [htmlDecodeTree[++i]]\n : [htmlDecodeTree[++i], htmlDecodeTree[++i]];\n excess = 0;\n withoutSemicolon = cp !== $.SEMICOLON;\n }\n if (valueLength === 0) {\n // If the value is zero-length, we're done.\n this._consume();\n break;\n }\n }\n }\n this._unconsume(excess);\n if (withoutSemicolon && !this.preprocessor.endOfChunkHit) {\n this._err(ERR.missingSemicolonAfterCharacterReference);\n }\n // We want to emit the error above on the code point after the entity.\n // We always consume one code point too many in the loop, and we wait to\n // unconsume it until after the error is emitted.\n this._unconsume(1);\n return result;\n }\n _isCharacterReferenceInAttribute() {\n return (this.returnState === State.ATTRIBUTE_VALUE_DOUBLE_QUOTED ||\n this.returnState === State.ATTRIBUTE_VALUE_SINGLE_QUOTED ||\n this.returnState === State.ATTRIBUTE_VALUE_UNQUOTED);\n }\n _flushCodePointConsumedAsCharacterReference(cp) {\n if (this._isCharacterReferenceInAttribute()) {\n this.currentAttr.value += String.fromCodePoint(cp);\n }\n else {\n this._emitCodePoint(cp);\n }\n }\n // Calling states this way turns out to be much faster than any other approach.\n _callState(cp) {\n switch (this.state) {\n case State.DATA: {\n this._stateData(cp);\n break;\n }\n case State.RCDATA: {\n this._stateRcdata(cp);\n break;\n }\n case State.RAWTEXT: {\n this._stateRawtext(cp);\n break;\n }\n case State.SCRIPT_DATA: {\n this._stateScriptData(cp);\n break;\n }\n case State.PLAINTEXT: {\n this._statePlaintext(cp);\n break;\n }\n case State.TAG_OPEN: {\n this._stateTagOpen(cp);\n break;\n }\n case State.END_TAG_OPEN: {\n this._stateEndTagOpen(cp);\n break;\n }\n case State.TAG_NAME: {\n this._stateTagName(cp);\n break;\n }\n case State.RCDATA_LESS_THAN_SIGN: {\n this._stateRcdataLessThanSign(cp);\n break;\n }\n case State.RCDATA_END_TAG_OPEN: {\n this._stateRcdataEndTagOpen(cp);\n break;\n }\n case State.RCDATA_END_TAG_NAME: {\n this._stateRcdataEndTagName(cp);\n break;\n }\n case State.RAWTEXT_LESS_THAN_SIGN: {\n this._stateRawtextLessThanSign(cp);\n break;\n }\n case State.RAWTEXT_END_TAG_OPEN: {\n this._stateRawtextEndTagOpen(cp);\n break;\n }\n case State.RAWTEXT_END_TAG_NAME: {\n this._stateRawtextEndTagName(cp);\n break;\n }\n case State.SCRIPT_DATA_LESS_THAN_SIGN: {\n this._stateScriptDataLessThanSign(cp);\n break;\n }\n case State.SCRIPT_DATA_END_TAG_OPEN: {\n this._stateScriptDataEndTagOpen(cp);\n break;\n }\n case State.SCRIPT_DATA_END_TAG_NAME: {\n this._stateScriptDataEndTagName(cp);\n break;\n }\n case State.SCRIPT_DATA_ESCAPE_START: {\n this._stateScriptDataEscapeStart(cp);\n break;\n }\n case State.SCRIPT_DATA_ESCAPE_START_DASH: {\n this._stateScriptDataEscapeStartDash(cp);\n break;\n }\n case State.SCRIPT_DATA_ESCAPED: {\n this._stateScriptDataEscaped(cp);\n break;\n }\n case State.SCRIPT_DATA_ESCAPED_DASH: {\n this._stateScriptDataEscapedDash(cp);\n break;\n }\n case State.SCRIPT_DATA_ESCAPED_DASH_DASH: {\n this._stateScriptDataEscapedDashDash(cp);\n break;\n }\n case State.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN: {\n this._stateScriptDataEscapedLessThanSign(cp);\n break;\n }\n case State.SCRIPT_DATA_ESCAPED_END_TAG_OPEN: {\n this._stateScriptDataEscapedEndTagOpen(cp);\n break;\n }\n case State.SCRIPT_DATA_ESCAPED_END_TAG_NAME: {\n this._stateScriptDataEscapedEndTagName(cp);\n break;\n }\n case State.SCRIPT_DATA_DOUBLE_ESCAPE_START: {\n this._stateScriptDataDoubleEscapeStart(cp);\n break;\n }\n case State.SCRIPT_DATA_DOUBLE_ESCAPED: {\n this._stateScriptDataDoubleEscaped(cp);\n break;\n }\n case State.SCRIPT_DATA_DOUBLE_ESCAPED_DASH: {\n this._stateScriptDataDoubleEscapedDash(cp);\n break;\n }\n case State.SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH: {\n this._stateScriptDataDoubleEscapedDashDash(cp);\n break;\n }\n case State.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN: {\n this._stateScriptDataDoubleEscapedLessThanSign(cp);\n break;\n }\n case State.SCRIPT_DATA_DOUBLE_ESCAPE_END: {\n this._stateScriptDataDoubleEscapeEnd(cp);\n break;\n }\n case State.BEFORE_ATTRIBUTE_NAME: {\n this._stateBeforeAttributeName(cp);\n break;\n }\n case State.ATTRIBUTE_NAME: {\n this._stateAttributeName(cp);\n break;\n }\n case State.AFTER_ATTRIBUTE_NAME: {\n this._stateAfterAttributeName(cp);\n break;\n }\n case State.BEFORE_ATTRIBUTE_VALUE: {\n this._stateBeforeAttributeValue(cp);\n break;\n }\n case State.ATTRIBUTE_VALUE_DOUBLE_QUOTED: {\n this._stateAttributeValueDoubleQuoted(cp);\n break;\n }\n case State.ATTRIBUTE_VALUE_SINGLE_QUOTED: {\n this._stateAttributeValueSingleQuoted(cp);\n break;\n }\n case State.ATTRIBUTE_VALUE_UNQUOTED: {\n this._stateAttributeValueUnquoted(cp);\n break;\n }\n case State.AFTER_ATTRIBUTE_VALUE_QUOTED: {\n this._stateAfterAttributeValueQuoted(cp);\n break;\n }\n case State.SELF_CLOSING_START_TAG: {\n this._stateSelfClosingStartTag(cp);\n break;\n }\n case State.BOGUS_COMMENT: {\n this._stateBogusComment(cp);\n break;\n }\n case State.MARKUP_DECLARATION_OPEN: {\n this._stateMarkupDeclarationOpen(cp);\n break;\n }\n case State.COMMENT_START: {\n this._stateCommentStart(cp);\n break;\n }\n case State.COMMENT_START_DASH: {\n this._stateCommentStartDash(cp);\n break;\n }\n case State.COMMENT: {\n this._stateComment(cp);\n break;\n }\n case State.COMMENT_LESS_THAN_SIGN: {\n this._stateCommentLessThanSign(cp);\n break;\n }\n case State.COMMENT_LESS_THAN_SIGN_BANG: {\n this._stateCommentLessThanSignBang(cp);\n break;\n }\n case State.COMMENT_LESS_THAN_SIGN_BANG_DASH: {\n this._stateCommentLessThanSignBangDash(cp);\n break;\n }\n case State.COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH: {\n this._stateCommentLessThanSignBangDashDash(cp);\n break;\n }\n case State.COMMENT_END_DASH: {\n this._stateCommentEndDash(cp);\n break;\n }\n case State.COMMENT_END: {\n this._stateCommentEnd(cp);\n break;\n }\n case State.COMMENT_END_BANG: {\n this._stateCommentEndBang(cp);\n break;\n }\n case State.DOCTYPE: {\n this._stateDoctype(cp);\n break;\n }\n case State.BEFORE_DOCTYPE_NAME: {\n this._stateBeforeDoctypeName(cp);\n break;\n }\n case State.DOCTYPE_NAME: {\n this._stateDoctypeName(cp);\n break;\n }\n case State.AFTER_DOCTYPE_NAME: {\n this._stateAfterDoctypeName(cp);\n break;\n }\n case State.AFTER_DOCTYPE_PUBLIC_KEYWORD: {\n this._stateAfterDoctypePublicKeyword(cp);\n break;\n }\n case State.BEFORE_DOCTYPE_PUBLIC_IDENTIFIER: {\n this._stateBeforeDoctypePublicIdentifier(cp);\n break;\n }\n case State.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED: {\n this._stateDoctypePublicIdentifierDoubleQuoted(cp);\n break;\n }\n case State.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED: {\n this._stateDoctypePublicIdentifierSingleQuoted(cp);\n break;\n }\n case State.AFTER_DOCTYPE_PUBLIC_IDENTIFIER: {\n this._stateAfterDoctypePublicIdentifier(cp);\n break;\n }\n case State.BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS: {\n this._stateBetweenDoctypePublicAndSystemIdentifiers(cp);\n break;\n }\n case State.AFTER_DOCTYPE_SYSTEM_KEYWORD: {\n this._stateAfterDoctypeSystemKeyword(cp);\n break;\n }\n case State.BEFORE_DOCTYPE_SYSTEM_IDENTIFIER: {\n this._stateBeforeDoctypeSystemIdentifier(cp);\n break;\n }\n case State.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED: {\n this._stateDoctypeSystemIdentifierDoubleQuoted(cp);\n break;\n }\n case State.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED: {\n this._stateDoctypeSystemIdentifierSingleQuoted(cp);\n break;\n }\n case State.AFTER_DOCTYPE_SYSTEM_IDENTIFIER: {\n this._stateAfterDoctypeSystemIdentifier(cp);\n break;\n }\n case State.BOGUS_DOCTYPE: {\n this._stateBogusDoctype(cp);\n break;\n }\n case State.CDATA_SECTION: {\n this._stateCdataSection(cp);\n break;\n }\n case State.CDATA_SECTION_BRACKET: {\n this._stateCdataSectionBracket(cp);\n break;\n }\n case State.CDATA_SECTION_END: {\n this._stateCdataSectionEnd(cp);\n break;\n }\n case State.CHARACTER_REFERENCE: {\n this._stateCharacterReference(cp);\n break;\n }\n case State.NAMED_CHARACTER_REFERENCE: {\n this._stateNamedCharacterReference(cp);\n break;\n }\n case State.AMBIGUOUS_AMPERSAND: {\n this._stateAmbiguousAmpersand(cp);\n break;\n }\n case State.NUMERIC_CHARACTER_REFERENCE: {\n this._stateNumericCharacterReference(cp);\n break;\n }\n case State.HEXADEMICAL_CHARACTER_REFERENCE_START: {\n this._stateHexademicalCharacterReferenceStart(cp);\n break;\n }\n case State.HEXADEMICAL_CHARACTER_REFERENCE: {\n this._stateHexademicalCharacterReference(cp);\n break;\n }\n case State.DECIMAL_CHARACTER_REFERENCE: {\n this._stateDecimalCharacterReference(cp);\n break;\n }\n case State.NUMERIC_CHARACTER_REFERENCE_END: {\n this._stateNumericCharacterReferenceEnd(cp);\n break;\n }\n default: {\n throw new Error('Unknown state');\n }\n }\n }\n // State machine\n // Data state\n //------------------------------------------------------------------\n _stateData(cp) {\n switch (cp) {\n case $.LESS_THAN_SIGN: {\n this.state = State.TAG_OPEN;\n break;\n }\n case $.AMPERSAND: {\n this.returnState = State.DATA;\n this.state = State.CHARACTER_REFERENCE;\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n this._emitCodePoint(cp);\n break;\n }\n case $.EOF: {\n this._emitEOFToken();\n break;\n }\n default: {\n this._emitCodePoint(cp);\n }\n }\n }\n // RCDATA state\n //------------------------------------------------------------------\n _stateRcdata(cp) {\n switch (cp) {\n case $.AMPERSAND: {\n this.returnState = State.RCDATA;\n this.state = State.CHARACTER_REFERENCE;\n break;\n }\n case $.LESS_THAN_SIGN: {\n this.state = State.RCDATA_LESS_THAN_SIGN;\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n this._emitChars(REPLACEMENT_CHARACTER);\n break;\n }\n case $.EOF: {\n this._emitEOFToken();\n break;\n }\n default: {\n this._emitCodePoint(cp);\n }\n }\n }\n // RAWTEXT state\n //------------------------------------------------------------------\n _stateRawtext(cp) {\n switch (cp) {\n case $.LESS_THAN_SIGN: {\n this.state = State.RAWTEXT_LESS_THAN_SIGN;\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n this._emitChars(REPLACEMENT_CHARACTER);\n break;\n }\n case $.EOF: {\n this._emitEOFToken();\n break;\n }\n default: {\n this._emitCodePoint(cp);\n }\n }\n }\n // Script data state\n //------------------------------------------------------------------\n _stateScriptData(cp) {\n switch (cp) {\n case $.LESS_THAN_SIGN: {\n this.state = State.SCRIPT_DATA_LESS_THAN_SIGN;\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n this._emitChars(REPLACEMENT_CHARACTER);\n break;\n }\n case $.EOF: {\n this._emitEOFToken();\n break;\n }\n default: {\n this._emitCodePoint(cp);\n }\n }\n }\n // PLAINTEXT state\n //------------------------------------------------------------------\n _statePlaintext(cp) {\n switch (cp) {\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n this._emitChars(REPLACEMENT_CHARACTER);\n break;\n }\n case $.EOF: {\n this._emitEOFToken();\n break;\n }\n default: {\n this._emitCodePoint(cp);\n }\n }\n }\n // Tag open state\n //------------------------------------------------------------------\n _stateTagOpen(cp) {\n if (isAsciiLetter(cp)) {\n this._createStartTagToken();\n this.state = State.TAG_NAME;\n this._stateTagName(cp);\n }\n else\n switch (cp) {\n case $.EXCLAMATION_MARK: {\n this.state = State.MARKUP_DECLARATION_OPEN;\n break;\n }\n case $.SOLIDUS: {\n this.state = State.END_TAG_OPEN;\n break;\n }\n case $.QUESTION_MARK: {\n this._err(ERR.unexpectedQuestionMarkInsteadOfTagName);\n this._createCommentToken(1);\n this.state = State.BOGUS_COMMENT;\n this._stateBogusComment(cp);\n break;\n }\n case $.EOF: {\n this._err(ERR.eofBeforeTagName);\n this._emitChars('<');\n this._emitEOFToken();\n break;\n }\n default: {\n this._err(ERR.invalidFirstCharacterOfTagName);\n this._emitChars('<');\n this.state = State.DATA;\n this._stateData(cp);\n }\n }\n }\n // End tag open state\n //------------------------------------------------------------------\n _stateEndTagOpen(cp) {\n if (isAsciiLetter(cp)) {\n this._createEndTagToken();\n this.state = State.TAG_NAME;\n this._stateTagName(cp);\n }\n else\n switch (cp) {\n case $.GREATER_THAN_SIGN: {\n this._err(ERR.missingEndTagName);\n this.state = State.DATA;\n break;\n }\n case $.EOF: {\n this._err(ERR.eofBeforeTagName);\n this._emitChars('</');\n this._emitEOFToken();\n break;\n }\n default: {\n this._err(ERR.invalidFirstCharacterOfTagName);\n this._createCommentToken(2);\n this.state = State.BOGUS_COMMENT;\n this._stateBogusComment(cp);\n }\n }\n }\n // Tag name state\n //------------------------------------------------------------------\n _stateTagName(cp) {\n const token = this.currentToken;\n switch (cp) {\n case $.SPACE:\n case $.LINE_FEED:\n case $.TABULATION:\n case $.FORM_FEED: {\n this.state = State.BEFORE_ATTRIBUTE_NAME;\n break;\n }\n case $.SOLIDUS: {\n this.state = State.SELF_CLOSING_START_TAG;\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this.state = State.DATA;\n this.emitCurrentTagToken();\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n token.tagName += REPLACEMENT_CHARACTER;\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInTag);\n this._emitEOFToken();\n break;\n }\n default: {\n token.tagName += String.fromCodePoint(isAsciiUpper(cp) ? toAsciiLower(cp) : cp);\n }\n }\n }\n // RCDATA less-than sign state\n //------------------------------------------------------------------\n _stateRcdataLessThanSign(cp) {\n if (cp === $.SOLIDUS) {\n this.state = State.RCDATA_END_TAG_OPEN;\n }\n else {\n this._emitChars('<');\n this.state = State.RCDATA;\n this._stateRcdata(cp);\n }\n }\n // RCDATA end tag open state\n //------------------------------------------------------------------\n _stateRcdataEndTagOpen(cp) {\n if (isAsciiLetter(cp)) {\n this.state = State.RCDATA_END_TAG_NAME;\n this._stateRcdataEndTagName(cp);\n }\n else {\n this._emitChars('</');\n this.state = State.RCDATA;\n this._stateRcdata(cp);\n }\n }\n handleSpecialEndTag(_cp) {\n if (!this.preprocessor.startsWith(this.lastStartTagName, false)) {\n return !this._ensureHibernation();\n }\n this._createEndTagToken();\n const token = this.currentToken;\n token.tagName = this.lastStartTagName;\n const cp = this.preprocessor.peek(this.lastStartTagName.length);\n switch (cp) {\n case $.SPACE:\n case $.LINE_FEED:\n case $.TABULATION:\n case $.FORM_FEED: {\n this._advanceBy(this.lastStartTagName.length);\n this.state = State.BEFORE_ATTRIBUTE_NAME;\n return false;\n }\n case $.SOLIDUS: {\n this._advanceBy(this.lastStartTagName.length);\n this.state = State.SELF_CLOSING_START_TAG;\n return false;\n }\n case $.GREATER_THAN_SIGN: {\n this._advanceBy(this.lastStartTagName.length);\n this.emitCurrentTagToken();\n this.state = State.DATA;\n return false;\n }\n default: {\n return !this._ensureHibernation();\n }\n }\n }\n // RCDATA end tag name state\n //------------------------------------------------------------------\n _stateRcdataEndTagName(cp) {\n if (this.handleSpecialEndTag(cp)) {\n this._emitChars('</');\n this.state = State.RCDATA;\n this._stateRcdata(cp);\n }\n }\n // RAWTEXT less-than sign state\n //------------------------------------------------------------------\n _stateRawtextLessThanSign(cp) {\n if (cp === $.SOLIDUS) {\n this.state = State.RAWTEXT_END_TAG_OPEN;\n }\n else {\n this._emitChars('<');\n this.state = State.RAWTEXT;\n this._stateRawtext(cp);\n }\n }\n // RAWTEXT end tag open state\n //------------------------------------------------------------------\n _stateRawtextEndTagOpen(cp) {\n if (isAsciiLetter(cp)) {\n this.state = State.RAWTEXT_END_TAG_NAME;\n this._stateRawtextEndTagName(cp);\n }\n else {\n this._emitChars('</');\n this.state = State.RAWTEXT;\n this._stateRawtext(cp);\n }\n }\n // RAWTEXT end tag name state\n //------------------------------------------------------------------\n _stateRawtextEndTagName(cp) {\n if (this.handleSpecialEndTag(cp)) {\n this._emitChars('</');\n this.state = State.RAWTEXT;\n this._stateRawtext(cp);\n }\n }\n // Script data less-than sign state\n //------------------------------------------------------------------\n _stateScriptDataLessThanSign(cp) {\n switch (cp) {\n case $.SOLIDUS: {\n this.state = State.SCRIPT_DATA_END_TAG_OPEN;\n break;\n }\n case $.EXCLAMATION_MARK: {\n this.state = State.SCRIPT_DATA_ESCAPE_START;\n this._emitChars('<!');\n break;\n }\n default: {\n this._emitChars('<');\n this.state = State.SCRIPT_DATA;\n this._stateScriptData(cp);\n }\n }\n }\n // Script data end tag open state\n //------------------------------------------------------------------\n _stateScriptDataEndTagOpen(cp) {\n if (isAsciiLetter(cp)) {\n this.state = State.SCRIPT_DATA_END_TAG_NAME;\n this._stateScriptDataEndTagName(cp);\n }\n else {\n this._emitChars('</');\n this.state = State.SCRIPT_DATA;\n this._stateScriptData(cp);\n }\n }\n // Script data end tag name state\n //------------------------------------------------------------------\n _stateScriptDataEndTagName(cp) {\n if (this.handleSpecialEndTag(cp)) {\n this._emitChars('</');\n this.state = State.SCRIPT_DATA;\n this._stateScriptData(cp);\n }\n }\n // Script data escape start state\n //------------------------------------------------------------------\n _stateScriptDataEscapeStart(cp) {\n if (cp === $.HYPHEN_MINUS) {\n this.state = State.SCRIPT_DATA_ESCAPE_START_DASH;\n this._emitChars('-');\n }\n else {\n this.state = State.SCRIPT_DATA;\n this._stateScriptData(cp);\n }\n }\n // Script data escape start dash state\n //------------------------------------------------------------------\n _stateScriptDataEscapeStartDash(cp) {\n if (cp === $.HYPHEN_MINUS) {\n this.state = State.SCRIPT_DATA_ESCAPED_DASH_DASH;\n this._emitChars('-');\n }\n else {\n this.state = State.SCRIPT_DATA;\n this._stateScriptData(cp);\n }\n }\n // Script data escaped state\n //------------------------------------------------------------------\n _stateScriptDataEscaped(cp) {\n switch (cp) {\n case $.HYPHEN_MINUS: {\n this.state = State.SCRIPT_DATA_ESCAPED_DASH;\n this._emitChars('-');\n break;\n }\n case $.LESS_THAN_SIGN: {\n this.state = State.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN;\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n this._emitChars(REPLACEMENT_CHARACTER);\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInScriptHtmlCommentLikeText);\n this._emitEOFToken();\n break;\n }\n default: {\n this._emitCodePoint(cp);\n }\n }\n }\n // Script data escaped dash state\n //------------------------------------------------------------------\n _stateScriptDataEscapedDash(cp) {\n switch (cp) {\n case $.HYPHEN_MINUS: {\n this.state = State.SCRIPT_DATA_ESCAPED_DASH_DASH;\n this._emitChars('-');\n break;\n }\n case $.LESS_THAN_SIGN: {\n this.state = State.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN;\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n this.state = State.SCRIPT_DATA_ESCAPED;\n this._emitChars(REPLACEMENT_CHARACTER);\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInScriptHtmlCommentLikeText);\n this._emitEOFToken();\n break;\n }\n default: {\n this.state = State.SCRIPT_DATA_ESCAPED;\n this._emitCodePoint(cp);\n }\n }\n }\n // Script data escaped dash dash state\n //------------------------------------------------------------------\n _stateScriptDataEscapedDashDash(cp) {\n switch (cp) {\n case $.HYPHEN_MINUS: {\n this._emitChars('-');\n break;\n }\n case $.LESS_THAN_SIGN: {\n this.state = State.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN;\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this.state = State.SCRIPT_DATA;\n this._emitChars('>');\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n this.state = State.SCRIPT_DATA_ESCAPED;\n this._emitChars(REPLACEMENT_CHARACTER);\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInScriptHtmlCommentLikeText);\n this._emitEOFToken();\n break;\n }\n default: {\n this.state = State.SCRIPT_DATA_ESCAPED;\n this._emitCodePoint(cp);\n }\n }\n }\n // Script data escaped less-than sign state\n //------------------------------------------------------------------\n _stateScriptDataEscapedLessThanSign(cp) {\n if (cp === $.SOLIDUS) {\n this.state = State.SCRIPT_DATA_ESCAPED_END_TAG_OPEN;\n }\n else if (isAsciiLetter(cp)) {\n this._emitChars('<');\n this.state = State.SCRIPT_DATA_DOUBLE_ESCAPE_START;\n this._stateScriptDataDoubleEscapeStart(cp);\n }\n else {\n this._emitChars('<');\n this.state = State.SCRIPT_DATA_ESCAPED;\n this._stateScriptDataEscaped(cp);\n }\n }\n // Script data escaped end tag open state\n //------------------------------------------------------------------\n _stateScriptDataEscapedEndTagOpen(cp) {\n if (isAsciiLetter(cp)) {\n this.state = State.SCRIPT_DATA_ESCAPED_END_TAG_NAME;\n this._stateScriptDataEscapedEndTagName(cp);\n }\n else {\n this._emitChars('</');\n this.state = State.SCRIPT_DATA_ESCAPED;\n this._stateScriptDataEscaped(cp);\n }\n }\n // Script data escaped end tag name state\n //------------------------------------------------------------------\n _stateScriptDataEscapedEndTagName(cp) {\n if (this.handleSpecialEndTag(cp)) {\n this._emitChars('</');\n this.state = State.SCRIPT_DATA_ESCAPED;\n this._stateScriptDataEscaped(cp);\n }\n }\n // Script data double escape start state\n //------------------------------------------------------------------\n _stateScriptDataDoubleEscapeStart(cp) {\n if (this.preprocessor.startsWith($$.SCRIPT, false) &&\n isScriptDataDoubleEscapeSequenceEnd(this.preprocessor.peek($$.SCRIPT.length))) {\n this._emitCodePoint(cp);\n for (let i = 0; i < $$.SCRIPT.length; i++) {\n this._emitCodePoint(this._consume());\n }\n this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED;\n }\n else if (!this._ensureHibernation()) {\n this.state = State.SCRIPT_DATA_ESCAPED;\n this._stateScriptDataEscaped(cp);\n }\n }\n // Script data double escaped state\n //------------------------------------------------------------------\n _stateScriptDataDoubleEscaped(cp) {\n switch (cp) {\n case $.HYPHEN_MINUS: {\n this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED_DASH;\n this._emitChars('-');\n break;\n }\n case $.LESS_THAN_SIGN: {\n this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN;\n this._emitChars('<');\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n this._emitChars(REPLACEMENT_CHARACTER);\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInScriptHtmlCommentLikeText);\n this._emitEOFToken();\n break;\n }\n default: {\n this._emitCodePoint(cp);\n }\n }\n }\n // Script data double escaped dash state\n //------------------------------------------------------------------\n _stateScriptDataDoubleEscapedDash(cp) {\n switch (cp) {\n case $.HYPHEN_MINUS: {\n this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH;\n this._emitChars('-');\n break;\n }\n case $.LESS_THAN_SIGN: {\n this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN;\n this._emitChars('<');\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED;\n this._emitChars(REPLACEMENT_CHARACTER);\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInScriptHtmlCommentLikeText);\n this._emitEOFToken();\n break;\n }\n default: {\n this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED;\n this._emitCodePoint(cp);\n }\n }\n }\n // Script data double escaped dash dash state\n //------------------------------------------------------------------\n _stateScriptDataDoubleEscapedDashDash(cp) {\n switch (cp) {\n case $.HYPHEN_MINUS: {\n this._emitChars('-');\n break;\n }\n case $.LESS_THAN_SIGN: {\n this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN;\n this._emitChars('<');\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this.state = State.SCRIPT_DATA;\n this._emitChars('>');\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED;\n this._emitChars(REPLACEMENT_CHARACTER);\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInScriptHtmlCommentLikeText);\n this._emitEOFToken();\n break;\n }\n default: {\n this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED;\n this._emitCodePoint(cp);\n }\n }\n }\n // Script data double escaped less-than sign state\n //------------------------------------------------------------------\n _stateScriptDataDoubleEscapedLessThanSign(cp) {\n if (cp === $.SOLIDUS) {\n this.state = State.SCRIPT_DATA_DOUBLE_ESCAPE_END;\n this._emitChars('/');\n }\n else {\n this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED;\n this._stateScriptDataDoubleEscaped(cp);\n }\n }\n // Script data double escape end state\n //------------------------------------------------------------------\n _stateScriptDataDoubleEscapeEnd(cp) {\n if (this.preprocessor.startsWith($$.SCRIPT, false) &&\n isScriptDataDoubleEscapeSequenceEnd(this.preprocessor.peek($$.SCRIPT.length))) {\n this._emitCodePoint(cp);\n for (let i = 0; i < $$.SCRIPT.length; i++) {\n this._emitCodePoint(this._consume());\n }\n this.state = State.SCRIPT_DATA_ESCAPED;\n }\n else if (!this._ensureHibernation()) {\n this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED;\n this._stateScriptDataDoubleEscaped(cp);\n }\n }\n // Before attribute name state\n //------------------------------------------------------------------\n _stateBeforeAttributeName(cp) {\n switch (cp) {\n case $.SPACE:\n case $.LINE_FEED:\n case $.TABULATION:\n case $.FORM_FEED: {\n // Ignore whitespace\n break;\n }\n case $.SOLIDUS:\n case $.GREATER_THAN_SIGN:\n case $.EOF: {\n this.state = State.AFTER_ATTRIBUTE_NAME;\n this._stateAfterAttributeName(cp);\n break;\n }\n case $.EQUALS_SIGN: {\n this._err(ERR.unexpectedEqualsSignBeforeAttributeName);\n this._createAttr('=');\n this.state = State.ATTRIBUTE_NAME;\n break;\n }\n default: {\n this._createAttr('');\n this.state = State.ATTRIBUTE_NAME;\n this._stateAttributeName(cp);\n }\n }\n }\n // Attribute name state\n //------------------------------------------------------------------\n _stateAttributeName(cp) {\n switch (cp) {\n case $.SPACE:\n case $.LINE_FEED:\n case $.TABULATION:\n case $.FORM_FEED:\n case $.SOLIDUS:\n case $.GREATER_THAN_SIGN:\n case $.EOF: {\n this._leaveAttrName();\n this.state = State.AFTER_ATTRIBUTE_NAME;\n this._stateAfterAttributeName(cp);\n break;\n }\n case $.EQUALS_SIGN: {\n this._leaveAttrName();\n this.state = State.BEFORE_ATTRIBUTE_VALUE;\n break;\n }\n case $.QUOTATION_MARK:\n case $.APOSTROPHE:\n case $.LESS_THAN_SIGN: {\n this._err(ERR.unexpectedCharacterInAttributeName);\n this.currentAttr.name += String.fromCodePoint(cp);\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n this.currentAttr.name += REPLACEMENT_CHARACTER;\n break;\n }\n default: {\n this.currentAttr.name += String.fromCodePoint(isAsciiUpper(cp) ? toAsciiLower(cp) : cp);\n }\n }\n }\n // After attribute name state\n //------------------------------------------------------------------\n _stateAfterAttributeName(cp) {\n switch (cp) {\n case $.SPACE:\n case $.LINE_FEED:\n case $.TABULATION:\n case $.FORM_FEED: {\n // Ignore whitespace\n break;\n }\n case $.SOLIDUS: {\n this.state = State.SELF_CLOSING_START_TAG;\n break;\n }\n case $.EQUALS_SIGN: {\n this.state = State.BEFORE_ATTRIBUTE_VALUE;\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this.state = State.DATA;\n this.emitCurrentTagToken();\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInTag);\n this._emitEOFToken();\n break;\n }\n default: {\n this._createAttr('');\n this.state = State.ATTRIBUTE_NAME;\n this._stateAttributeName(cp);\n }\n }\n }\n // Before attribute value state\n //------------------------------------------------------------------\n _stateBeforeAttributeValue(cp) {\n switch (cp) {\n case $.SPACE:\n case $.LINE_FEED:\n case $.TABULATION:\n case $.FORM_FEED: {\n // Ignore whitespace\n break;\n }\n case $.QUOTATION_MARK: {\n this.state = State.ATTRIBUTE_VALUE_DOUBLE_QUOTED;\n break;\n }\n case $.APOSTROPHE: {\n this.state = State.ATTRIBUTE_VALUE_SINGLE_QUOTED;\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this._err(ERR.missingAttributeValue);\n this.state = State.DATA;\n this.emitCurrentTagToken();\n break;\n }\n default: {\n this.state = State.ATTRIBUTE_VALUE_UNQUOTED;\n this._stateAttributeValueUnquoted(cp);\n }\n }\n }\n // Attribute value (double-quoted) state\n //------------------------------------------------------------------\n _stateAttributeValueDoubleQuoted(cp) {\n switch (cp) {\n case $.QUOTATION_MARK: {\n this.state = State.AFTER_ATTRIBUTE_VALUE_QUOTED;\n break;\n }\n case $.AMPERSAND: {\n this.returnState = State.ATTRIBUTE_VALUE_DOUBLE_QUOTED;\n this.state = State.CHARACTER_REFERENCE;\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n this.currentAttr.value += REPLACEMENT_CHARACTER;\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInTag);\n this._emitEOFToken();\n break;\n }\n default: {\n this.currentAttr.value += String.fromCodePoint(cp);\n }\n }\n }\n // Attribute value (single-quoted) state\n //------------------------------------------------------------------\n _stateAttributeValueSingleQuoted(cp) {\n switch (cp) {\n case $.APOSTROPHE: {\n this.state = State.AFTER_ATTRIBUTE_VALUE_QUOTED;\n break;\n }\n case $.AMPERSAND: {\n this.returnState = State.ATTRIBUTE_VALUE_SINGLE_QUOTED;\n this.state = State.CHARACTER_REFERENCE;\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n this.currentAttr.value += REPLACEMENT_CHARACTER;\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInTag);\n this._emitEOFToken();\n break;\n }\n default: {\n this.currentAttr.value += String.fromCodePoint(cp);\n }\n }\n }\n // Attribute value (unquoted) state\n //------------------------------------------------------------------\n _stateAttributeValueUnquoted(cp) {\n switch (cp) {\n case $.SPACE:\n case $.LINE_FEED:\n case $.TABULATION:\n case $.FORM_FEED: {\n this._leaveAttrValue();\n this.state = State.BEFORE_ATTRIBUTE_NAME;\n break;\n }\n case $.AMPERSAND: {\n this.returnState = State.ATTRIBUTE_VALUE_UNQUOTED;\n this.state = State.CHARACTER_REFERENCE;\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this._leaveAttrValue();\n this.state = State.DATA;\n this.emitCurrentTagToken();\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n this.currentAttr.value += REPLACEMENT_CHARACTER;\n break;\n }\n case $.QUOTATION_MARK:\n case $.APOSTROPHE:\n case $.LESS_THAN_SIGN:\n case $.EQUALS_SIGN:\n case $.GRAVE_ACCENT: {\n this._err(ERR.unexpectedCharacterInUnquotedAttributeValue);\n this.currentAttr.value += String.fromCodePoint(cp);\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInTag);\n this._emitEOFToken();\n break;\n }\n default: {\n this.currentAttr.value += String.fromCodePoint(cp);\n }\n }\n }\n // After attribute value (quoted) state\n //------------------------------------------------------------------\n _stateAfterAttributeValueQuoted(cp) {\n switch (cp) {\n case $.SPACE:\n case $.LINE_FEED:\n case $.TABULATION:\n case $.FORM_FEED: {\n this._leaveAttrValue();\n this.state = State.BEFORE_ATTRIBUTE_NAME;\n break;\n }\n case $.SOLIDUS: {\n this._leaveAttrValue();\n this.state = State.SELF_CLOSING_START_TAG;\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this._leaveAttrValue();\n this.state = State.DATA;\n this.emitCurrentTagToken();\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInTag);\n this._emitEOFToken();\n break;\n }\n default: {\n this._err(ERR.missingWhitespaceBetweenAttributes);\n this.state = State.BEFORE_ATTRIBUTE_NAME;\n this._stateBeforeAttributeName(cp);\n }\n }\n }\n // Self-closing start tag state\n //------------------------------------------------------------------\n _stateSelfClosingStartTag(cp) {\n switch (cp) {\n case $.GREATER_THAN_SIGN: {\n const token = this.currentToken;\n token.selfClosing = true;\n this.state = State.DATA;\n this.emitCurrentTagToken();\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInTag);\n this._emitEOFToken();\n break;\n }\n default: {\n this._err(ERR.unexpectedSolidusInTag);\n this.state = State.BEFORE_ATTRIBUTE_NAME;\n this._stateBeforeAttributeName(cp);\n }\n }\n }\n // Bogus comment state\n //------------------------------------------------------------------\n _stateBogusComment(cp) {\n const token = this.currentToken;\n switch (cp) {\n case $.GREATER_THAN_SIGN: {\n this.state = State.DATA;\n this.emitCurrentComment(token);\n break;\n }\n case $.EOF: {\n this.emitCurrentComment(token);\n this._emitEOFToken();\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n token.data += REPLACEMENT_CHARACTER;\n break;\n }\n default: {\n token.data += String.fromCodePoint(cp);\n }\n }\n }\n // Markup declaration open state\n //------------------------------------------------------------------\n _stateMarkupDeclarationOpen(cp) {\n if (this._consumeSequenceIfMatch($$.DASH_DASH, true)) {\n this._createCommentToken($$.DASH_DASH.length + 1);\n this.state = State.COMMENT_START;\n }\n else if (this._consumeSequenceIfMatch($$.DOCTYPE, false)) {\n // NOTE: Doctypes tokens are created without fixed offsets. We keep track of the moment a doctype *might* start here.\n this.currentLocation = this.getCurrentLocation($$.DOCTYPE.length + 1);\n this.state = State.DOCTYPE;\n }\n else if (this._consumeSequenceIfMatch($$.CDATA_START, true)) {\n if (this.inForeignNode) {\n this.state = State.CDATA_SECTION;\n }\n else {\n this._err(ERR.cdataInHtmlContent);\n this._createCommentToken($$.CDATA_START.length + 1);\n this.currentToken.data = '[CDATA[';\n this.state = State.BOGUS_COMMENT;\n }\n }\n //NOTE: Sequence lookups can be abrupted by hibernation. In that case, lookup\n //results are no longer valid and we will need to start over.\n else if (!this._ensureHibernation()) {\n this._err(ERR.incorrectlyOpenedComment);\n this._createCommentToken(2);\n this.state = State.BOGUS_COMMENT;\n this._stateBogusComment(cp);\n }\n }\n // Comment start state\n //------------------------------------------------------------------\n _stateCommentStart(cp) {\n switch (cp) {\n case $.HYPHEN_MINUS: {\n this.state = State.COMMENT_START_DASH;\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this._err(ERR.abruptClosingOfEmptyComment);\n this.state = State.DATA;\n const token = this.currentToken;\n this.emitCurrentComment(token);\n break;\n }\n default: {\n this.state = State.COMMENT;\n this._stateComment(cp);\n }\n }\n }\n // Comment start dash state\n //------------------------------------------------------------------\n _stateCommentStartDash(cp) {\n const token = this.currentToken;\n switch (cp) {\n case $.HYPHEN_MINUS: {\n this.state = State.COMMENT_END;\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this._err(ERR.abruptClosingOfEmptyComment);\n this.state = State.DATA;\n this.emitCurrentComment(token);\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInComment);\n this.emitCurrentComment(token);\n this._emitEOFToken();\n break;\n }\n default: {\n token.data += '-';\n this.state = State.COMMENT;\n this._stateComment(cp);\n }\n }\n }\n // Comment state\n //------------------------------------------------------------------\n _stateComment(cp) {\n const token = this.currentToken;\n switch (cp) {\n case $.HYPHEN_MINUS: {\n this.state = State.COMMENT_END_DASH;\n break;\n }\n case $.LESS_THAN_SIGN: {\n token.data += '<';\n this.state = State.COMMENT_LESS_THAN_SIGN;\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n token.data += REPLACEMENT_CHARACTER;\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInComment);\n this.emitCurrentComment(token);\n this._emitEOFToken();\n break;\n }\n default: {\n token.data += String.fromCodePoint(cp);\n }\n }\n }\n // Comment less-than sign state\n //------------------------------------------------------------------\n _stateCommentLessThanSign(cp) {\n const token = this.currentToken;\n switch (cp) {\n case $.EXCLAMATION_MARK: {\n token.data += '!';\n this.state = State.COMMENT_LESS_THAN_SIGN_BANG;\n break;\n }\n case $.LESS_THAN_SIGN: {\n token.data += '<';\n break;\n }\n default: {\n this.state = State.COMMENT;\n this._stateComment(cp);\n }\n }\n }\n // Comment less-than sign bang state\n //------------------------------------------------------------------\n _stateCommentLessThanSignBang(cp) {\n if (cp === $.HYPHEN_MINUS) {\n this.state = State.COMMENT_LESS_THAN_SIGN_BANG_DASH;\n }\n else {\n this.state = State.COMMENT;\n this._stateComment(cp);\n }\n }\n // Comment less-than sign bang dash state\n //------------------------------------------------------------------\n _stateCommentLessThanSignBangDash(cp) {\n if (cp === $.HYPHEN_MINUS) {\n this.state = State.COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH;\n }\n else {\n this.state = State.COMMENT_END_DASH;\n this._stateCommentEndDash(cp);\n }\n }\n // Comment less-than sign bang dash dash state\n //------------------------------------------------------------------\n _stateCommentLessThanSignBangDashDash(cp) {\n if (cp !== $.GREATER_THAN_SIGN && cp !== $.EOF) {\n this._err(ERR.nestedComment);\n }\n this.state = State.COMMENT_END;\n this._stateCommentEnd(cp);\n }\n // Comment end dash state\n //------------------------------------------------------------------\n _stateCommentEndDash(cp) {\n const token = this.currentToken;\n switch (cp) {\n case $.HYPHEN_MINUS: {\n this.state = State.COMMENT_END;\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInComment);\n this.emitCurrentComment(token);\n this._emitEOFToken();\n break;\n }\n default: {\n token.data += '-';\n this.state = State.COMMENT;\n this._stateComment(cp);\n }\n }\n }\n // Comment end state\n //------------------------------------------------------------------\n _stateCommentEnd(cp) {\n const token = this.currentToken;\n switch (cp) {\n case $.GREATER_THAN_SIGN: {\n this.state = State.DATA;\n this.emitCurrentComment(token);\n break;\n }\n case $.EXCLAMATION_MARK: {\n this.state = State.COMMENT_END_BANG;\n break;\n }\n case $.HYPHEN_MINUS: {\n token.data += '-';\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInComment);\n this.emitCurrentComment(token);\n this._emitEOFToken();\n break;\n }\n default: {\n token.data += '--';\n this.state = State.COMMENT;\n this._stateComment(cp);\n }\n }\n }\n // Comment end bang state\n //------------------------------------------------------------------\n _stateCommentEndBang(cp) {\n const token = this.currentToken;\n switch (cp) {\n case $.HYPHEN_MINUS: {\n token.data += '--!';\n this.state = State.COMMENT_END_DASH;\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this._err(ERR.incorrectlyClosedComment);\n this.state = State.DATA;\n this.emitCurrentComment(token);\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInComment);\n this.emitCurrentComment(token);\n this._emitEOFToken();\n break;\n }\n default: {\n token.data += '--!';\n this.state = State.COMMENT;\n this._stateComment(cp);\n }\n }\n }\n // DOCTYPE state\n //------------------------------------------------------------------\n _stateDoctype(cp) {\n switch (cp) {\n case $.SPACE:\n case $.LINE_FEED:\n case $.TABULATION:\n case $.FORM_FEED: {\n this.state = State.BEFORE_DOCTYPE_NAME;\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this.state = State.BEFORE_DOCTYPE_NAME;\n this._stateBeforeDoctypeName(cp);\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInDoctype);\n this._createDoctypeToken(null);\n const token = this.currentToken;\n token.forceQuirks = true;\n this.emitCurrentDoctype(token);\n this._emitEOFToken();\n break;\n }\n default: {\n this._err(ERR.missingWhitespaceBeforeDoctypeName);\n this.state = State.BEFORE_DOCTYPE_NAME;\n this._stateBeforeDoctypeName(cp);\n }\n }\n }\n // Before DOCTYPE name state\n //------------------------------------------------------------------\n _stateBeforeDoctypeName(cp) {\n if (isAsciiUpper(cp)) {\n this._createDoctypeToken(String.fromCharCode(toAsciiLower(cp)));\n this.state = State.DOCTYPE_NAME;\n }\n else\n switch (cp) {\n case $.SPACE:\n case $.LINE_FEED:\n case $.TABULATION:\n case $.FORM_FEED: {\n // Ignore whitespace\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n this._createDoctypeToken(REPLACEMENT_CHARACTER);\n this.state = State.DOCTYPE_NAME;\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this._err(ERR.missingDoctypeName);\n this._createDoctypeToken(null);\n const token = this.currentToken;\n token.forceQuirks = true;\n this.emitCurrentDoctype(token);\n this.state = State.DATA;\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInDoctype);\n this._createDoctypeToken(null);\n const token = this.currentToken;\n token.forceQuirks = true;\n this.emitCurrentDoctype(token);\n this._emitEOFToken();\n break;\n }\n default: {\n this._createDoctypeToken(String.fromCodePoint(cp));\n this.state = State.DOCTYPE_NAME;\n }\n }\n }\n // DOCTYPE name state\n //------------------------------------------------------------------\n _stateDoctypeName(cp) {\n const token = this.currentToken;\n switch (cp) {\n case $.SPACE:\n case $.LINE_FEED:\n case $.TABULATION:\n case $.FORM_FEED: {\n this.state = State.AFTER_DOCTYPE_NAME;\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this.state = State.DATA;\n this.emitCurrentDoctype(token);\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n token.name += REPLACEMENT_CHARACTER;\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInDoctype);\n token.forceQuirks = true;\n this.emitCurrentDoctype(token);\n this._emitEOFToken();\n break;\n }\n default: {\n token.name += String.fromCodePoint(isAsciiUpper(cp) ? toAsciiLower(cp) : cp);\n }\n }\n }\n // After DOCTYPE name state\n //------------------------------------------------------------------\n _stateAfterDoctypeName(cp) {\n const token = this.currentToken;\n switch (cp) {\n case $.SPACE:\n case $.LINE_FEED:\n case $.TABULATION:\n case $.FORM_FEED: {\n // Ignore whitespace\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this.state = State.DATA;\n this.emitCurrentDoctype(token);\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInDoctype);\n token.forceQuirks = true;\n this.emitCurrentDoctype(token);\n this._emitEOFToken();\n break;\n }\n default: {\n if (this._consumeSequenceIfMatch($$.PUBLIC, false)) {\n this.state = State.AFTER_DOCTYPE_PUBLIC_KEYWORD;\n }\n else if (this._consumeSequenceIfMatch($$.SYSTEM, false)) {\n this.state = State.AFTER_DOCTYPE_SYSTEM_KEYWORD;\n }\n //NOTE: sequence lookup can be abrupted by hibernation. In that case lookup\n //results are no longer valid and we will need to start over.\n else if (!this._ensureHibernation()) {\n this._err(ERR.invalidCharacterSequenceAfterDoctypeName);\n token.forceQuirks = true;\n this.state = State.BOGUS_DOCTYPE;\n this._stateBogusDoctype(cp);\n }\n }\n }\n }\n // After DOCTYPE public keyword state\n //------------------------------------------------------------------\n _stateAfterDoctypePublicKeyword(cp) {\n const token = this.currentToken;\n switch (cp) {\n case $.SPACE:\n case $.LINE_FEED:\n case $.TABULATION:\n case $.FORM_FEED: {\n this.state = State.BEFORE_DOCTYPE_PUBLIC_IDENTIFIER;\n break;\n }\n case $.QUOTATION_MARK: {\n this._err(ERR.missingWhitespaceAfterDoctypePublicKeyword);\n token.publicId = '';\n this.state = State.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED;\n break;\n }\n case $.APOSTROPHE: {\n this._err(ERR.missingWhitespaceAfterDoctypePublicKeyword);\n token.publicId = '';\n this.state = State.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED;\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this._err(ERR.missingDoctypePublicIdentifier);\n token.forceQuirks = true;\n this.state = State.DATA;\n this.emitCurrentDoctype(token);\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInDoctype);\n token.forceQuirks = true;\n this.emitCurrentDoctype(token);\n this._emitEOFToken();\n break;\n }\n default: {\n this._err(ERR.missingQuoteBeforeDoctypePublicIdentifier);\n token.forceQuirks = true;\n this.state = State.BOGUS_DOCTYPE;\n this._stateBogusDoctype(cp);\n }\n }\n }\n // Before DOCTYPE public identifier state\n //------------------------------------------------------------------\n _stateBeforeDoctypePublicIdentifier(cp) {\n const token = this.currentToken;\n switch (cp) {\n case $.SPACE:\n case $.LINE_FEED:\n case $.TABULATION:\n case $.FORM_FEED: {\n // Ignore whitespace\n break;\n }\n case $.QUOTATION_MARK: {\n token.publicId = '';\n this.state = State.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED;\n break;\n }\n case $.APOSTROPHE: {\n token.publicId = '';\n this.state = State.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED;\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this._err(ERR.missingDoctypePublicIdentifier);\n token.forceQuirks = true;\n this.state = State.DATA;\n this.emitCurrentDoctype(token);\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInDoctype);\n token.forceQuirks = true;\n this.emitCurrentDoctype(token);\n this._emitEOFToken();\n break;\n }\n default: {\n this._err(ERR.missingQuoteBeforeDoctypePublicIdentifier);\n token.forceQuirks = true;\n this.state = State.BOGUS_DOCTYPE;\n this._stateBogusDoctype(cp);\n }\n }\n }\n // DOCTYPE public identifier (double-quoted) state\n //------------------------------------------------------------------\n _stateDoctypePublicIdentifierDoubleQuoted(cp) {\n const token = this.currentToken;\n switch (cp) {\n case $.QUOTATION_MARK: {\n this.state = State.AFTER_DOCTYPE_PUBLIC_IDENTIFIER;\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n token.publicId += REPLACEMENT_CHARACTER;\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this._err(ERR.abruptDoctypePublicIdentifier);\n token.forceQuirks = true;\n this.emitCurrentDoctype(token);\n this.state = State.DATA;\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInDoctype);\n token.forceQuirks = true;\n this.emitCurrentDoctype(token);\n this._emitEOFToken();\n break;\n }\n default: {\n token.publicId += String.fromCodePoint(cp);\n }\n }\n }\n // DOCTYPE public identifier (single-quoted) state\n //------------------------------------------------------------------\n _stateDoctypePublicIdentifierSingleQuoted(cp) {\n const token = this.currentToken;\n switch (cp) {\n case $.APOSTROPHE: {\n this.state = State.AFTER_DOCTYPE_PUBLIC_IDENTIFIER;\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n token.publicId += REPLACEMENT_CHARACTER;\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this._err(ERR.abruptDoctypePublicIdentifier);\n token.forceQuirks = true;\n this.emitCurrentDoctype(token);\n this.state = State.DATA;\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInDoctype);\n token.forceQuirks = true;\n this.emitCurrentDoctype(token);\n this._emitEOFToken();\n break;\n }\n default: {\n token.publicId += String.fromCodePoint(cp);\n }\n }\n }\n // After DOCTYPE public identifier state\n //------------------------------------------------------------------\n _stateAfterDoctypePublicIdentifier(cp) {\n const token = this.currentToken;\n switch (cp) {\n case $.SPACE:\n case $.LINE_FEED:\n case $.TABULATION:\n case $.FORM_FEED: {\n this.state = State.BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS;\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this.state = State.DATA;\n this.emitCurrentDoctype(token);\n break;\n }\n case $.QUOTATION_MARK: {\n this._err(ERR.missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers);\n token.systemId = '';\n this.state = State.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED;\n break;\n }\n case $.APOSTROPHE: {\n this._err(ERR.missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers);\n token.systemId = '';\n this.state = State.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED;\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInDoctype);\n token.forceQuirks = true;\n this.emitCurrentDoctype(token);\n this._emitEOFToken();\n break;\n }\n default: {\n this._err(ERR.missingQuoteBeforeDoctypeSystemIdentifier);\n token.forceQuirks = true;\n this.state = State.BOGUS_DOCTYPE;\n this._stateBogusDoctype(cp);\n }\n }\n }\n // Between DOCTYPE public and system identifiers state\n //------------------------------------------------------------------\n _stateBetweenDoctypePublicAndSystemIdentifiers(cp) {\n const token = this.currentToken;\n switch (cp) {\n case $.SPACE:\n case $.LINE_FEED:\n case $.TABULATION:\n case $.FORM_FEED: {\n // Ignore whitespace\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this.emitCurrentDoctype(token);\n this.state = State.DATA;\n break;\n }\n case $.QUOTATION_MARK: {\n token.systemId = '';\n this.state = State.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED;\n break;\n }\n case $.APOSTROPHE: {\n token.systemId = '';\n this.state = State.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED;\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInDoctype);\n token.forceQuirks = true;\n this.emitCurrentDoctype(token);\n this._emitEOFToken();\n break;\n }\n default: {\n this._err(ERR.missingQuoteBeforeDoctypeSystemIdentifier);\n token.forceQuirks = true;\n this.state = State.BOGUS_DOCTYPE;\n this._stateBogusDoctype(cp);\n }\n }\n }\n // After DOCTYPE system keyword state\n //------------------------------------------------------------------\n _stateAfterDoctypeSystemKeyword(cp) {\n const token = this.currentToken;\n switch (cp) {\n case $.SPACE:\n case $.LINE_FEED:\n case $.TABULATION:\n case $.FORM_FEED: {\n this.state = State.BEFORE_DOCTYPE_SYSTEM_IDENTIFIER;\n break;\n }\n case $.QUOTATION_MARK: {\n this._err(ERR.missingWhitespaceAfterDoctypeSystemKeyword);\n token.systemId = '';\n this.state = State.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED;\n break;\n }\n case $.APOSTROPHE: {\n this._err(ERR.missingWhitespaceAfterDoctypeSystemKeyword);\n token.systemId = '';\n this.state = State.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED;\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this._err(ERR.missingDoctypeSystemIdentifier);\n token.forceQuirks = true;\n this.state = State.DATA;\n this.emitCurrentDoctype(token);\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInDoctype);\n token.forceQuirks = true;\n this.emitCurrentDoctype(token);\n this._emitEOFToken();\n break;\n }\n default: {\n this._err(ERR.missingQuoteBeforeDoctypeSystemIdentifier);\n token.forceQuirks = true;\n this.state = State.BOGUS_DOCTYPE;\n this._stateBogusDoctype(cp);\n }\n }\n }\n // Before DOCTYPE system identifier state\n //------------------------------------------------------------------\n _stateBeforeDoctypeSystemIdentifier(cp) {\n const token = this.currentToken;\n switch (cp) {\n case $.SPACE:\n case $.LINE_FEED:\n case $.TABULATION:\n case $.FORM_FEED: {\n // Ignore whitespace\n break;\n }\n case $.QUOTATION_MARK: {\n token.systemId = '';\n this.state = State.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED;\n break;\n }\n case $.APOSTROPHE: {\n token.systemId = '';\n this.state = State.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED;\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this._err(ERR.missingDoctypeSystemIdentifier);\n token.forceQuirks = true;\n this.state = State.DATA;\n this.emitCurrentDoctype(token);\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInDoctype);\n token.forceQuirks = true;\n this.emitCurrentDoctype(token);\n this._emitEOFToken();\n break;\n }\n default: {\n this._err(ERR.missingQuoteBeforeDoctypeSystemIdentifier);\n token.forceQuirks = true;\n this.state = State.BOGUS_DOCTYPE;\n this._stateBogusDoctype(cp);\n }\n }\n }\n // DOCTYPE system identifier (double-quoted) state\n //------------------------------------------------------------------\n _stateDoctypeSystemIdentifierDoubleQuoted(cp) {\n const token = this.currentToken;\n switch (cp) {\n case $.QUOTATION_MARK: {\n this.state = State.AFTER_DOCTYPE_SYSTEM_IDENTIFIER;\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n token.systemId += REPLACEMENT_CHARACTER;\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this._err(ERR.abruptDoctypeSystemIdentifier);\n token.forceQuirks = true;\n this.emitCurrentDoctype(token);\n this.state = State.DATA;\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInDoctype);\n token.forceQuirks = true;\n this.emitCurrentDoctype(token);\n this._emitEOFToken();\n break;\n }\n default: {\n token.systemId += String.fromCodePoint(cp);\n }\n }\n }\n // DOCTYPE system identifier (single-quoted) state\n //------------------------------------------------------------------\n _stateDoctypeSystemIdentifierSingleQuoted(cp) {\n const token = this.currentToken;\n switch (cp) {\n case $.APOSTROPHE: {\n this.state = State.AFTER_DOCTYPE_SYSTEM_IDENTIFIER;\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n token.systemId += REPLACEMENT_CHARACTER;\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this._err(ERR.abruptDoctypeSystemIdentifier);\n token.forceQuirks = true;\n this.emitCurrentDoctype(token);\n this.state = State.DATA;\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInDoctype);\n token.forceQuirks = true;\n this.emitCurrentDoctype(token);\n this._emitEOFToken();\n break;\n }\n default: {\n token.systemId += String.fromCodePoint(cp);\n }\n }\n }\n // After DOCTYPE system identifier state\n //------------------------------------------------------------------\n _stateAfterDoctypeSystemIdentifier(cp) {\n const token = this.currentToken;\n switch (cp) {\n case $.SPACE:\n case $.LINE_FEED:\n case $.TABULATION:\n case $.FORM_FEED: {\n // Ignore whitespace\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this.emitCurrentDoctype(token);\n this.state = State.DATA;\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInDoctype);\n token.forceQuirks = true;\n this.emitCurrentDoctype(token);\n this._emitEOFToken();\n break;\n }\n default: {\n this._err(ERR.unexpectedCharacterAfterDoctypeSystemIdentifier);\n this.state = State.BOGUS_DOCTYPE;\n this._stateBogusDoctype(cp);\n }\n }\n }\n // Bogus DOCTYPE state\n //------------------------------------------------------------------\n _stateBogusDoctype(cp) {\n const token = this.currentToken;\n switch (cp) {\n case $.GREATER_THAN_SIGN: {\n this.emitCurrentDoctype(token);\n this.state = State.DATA;\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n break;\n }\n case $.EOF: {\n this.emitCurrentDoctype(token);\n this._emitEOFToken();\n break;\n }\n default:\n // Do nothing\n }\n }\n // CDATA section state\n //------------------------------------------------------------------\n _stateCdataSection(cp) {\n switch (cp) {\n case $.RIGHT_SQUARE_BRACKET: {\n this.state = State.CDATA_SECTION_BRACKET;\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInCdata);\n this._emitEOFToken();\n break;\n }\n default: {\n this._emitCodePoint(cp);\n }\n }\n }\n // CDATA section bracket state\n //------------------------------------------------------------------\n _stateCdataSectionBracket(cp) {\n if (cp === $.RIGHT_SQUARE_BRACKET) {\n this.state = State.CDATA_SECTION_END;\n }\n else {\n this._emitChars(']');\n this.state = State.CDATA_SECTION;\n this._stateCdataSection(cp);\n }\n }\n // CDATA section end state\n //------------------------------------------------------------------\n _stateCdataSectionEnd(cp) {\n switch (cp) {\n case $.GREATER_THAN_SIGN: {\n this.state = State.DATA;\n break;\n }\n case $.RIGHT_SQUARE_BRACKET: {\n this._emitChars(']');\n break;\n }\n default: {\n this._emitChars(']]');\n this.state = State.CDATA_SECTION;\n this._stateCdataSection(cp);\n }\n }\n }\n // Character reference state\n //------------------------------------------------------------------\n _stateCharacterReference(cp) {\n if (cp === $.NUMBER_SIGN) {\n this.state = State.NUMERIC_CHARACTER_REFERENCE;\n }\n else if (isAsciiAlphaNumeric(cp)) {\n this.state = State.NAMED_CHARACTER_REFERENCE;\n this._stateNamedCharacterReference(cp);\n }\n else {\n this._flushCodePointConsumedAsCharacterReference($.AMPERSAND);\n this._reconsumeInState(this.returnState, cp);\n }\n }\n // Named character reference state\n //------------------------------------------------------------------\n _stateNamedCharacterReference(cp) {\n const matchResult = this._matchNamedCharacterReference(cp);\n //NOTE: Matching can be abrupted by hibernation. In that case, match\n //results are no longer valid and we will need to start over.\n if (this._ensureHibernation()) {\n // Stay in the state, try again.\n }\n else if (matchResult) {\n for (let i = 0; i < matchResult.length; i++) {\n this._flushCodePointConsumedAsCharacterReference(matchResult[i]);\n }\n this.state = this.returnState;\n }\n else {\n this._flushCodePointConsumedAsCharacterReference($.AMPERSAND);\n this.state = State.AMBIGUOUS_AMPERSAND;\n }\n }\n // Ambiguos ampersand state\n //------------------------------------------------------------------\n _stateAmbiguousAmpersand(cp) {\n if (isAsciiAlphaNumeric(cp)) {\n this._flushCodePointConsumedAsCharacterReference(cp);\n }\n else {\n if (cp === $.SEMICOLON) {\n this._err(ERR.unknownNamedCharacterReference);\n }\n this._reconsumeInState(this.returnState, cp);\n }\n }\n // Numeric character reference state\n //------------------------------------------------------------------\n _stateNumericCharacterReference(cp) {\n this.charRefCode = 0;\n if (cp === $.LATIN_SMALL_X || cp === $.LATIN_CAPITAL_X) {\n this.state = State.HEXADEMICAL_CHARACTER_REFERENCE_START;\n }\n // Inlined decimal character reference start state\n else if (isAsciiDigit(cp)) {\n this.state = State.DECIMAL_CHARACTER_REFERENCE;\n this._stateDecimalCharacterReference(cp);\n }\n else {\n this._err(ERR.absenceOfDigitsInNumericCharacterReference);\n this._flushCodePointConsumedAsCharacterReference($.AMPERSAND);\n this._flushCodePointConsumedAsCharacterReference($.NUMBER_SIGN);\n this._reconsumeInState(this.returnState, cp);\n }\n }\n // Hexademical character reference start state\n //------------------------------------------------------------------\n _stateHexademicalCharacterReferenceStart(cp) {\n if (isAsciiHexDigit(cp)) {\n this.state = State.HEXADEMICAL_CHARACTER_REFERENCE;\n this._stateHexademicalCharacterReference(cp);\n }\n else {\n this._err(ERR.absenceOfDigitsInNumericCharacterReference);\n this._flushCodePointConsumedAsCharacterReference($.AMPERSAND);\n this._flushCodePointConsumedAsCharacterReference($.NUMBER_SIGN);\n this._unconsume(2);\n this.state = this.returnState;\n }\n }\n // Hexademical character reference state\n //------------------------------------------------------------------\n _stateHexademicalCharacterReference(cp) {\n if (isAsciiUpperHexDigit(cp)) {\n this.charRefCode = this.charRefCode * 16 + cp - 0x37;\n }\n else if (isAsciiLowerHexDigit(cp)) {\n this.charRefCode = this.charRefCode * 16 + cp - 0x57;\n }\n else if (isAsciiDigit(cp)) {\n this.charRefCode = this.charRefCode * 16 + cp - 0x30;\n }\n else if (cp === $.SEMICOLON) {\n this.state = State.NUMERIC_CHARACTER_REFERENCE_END;\n }\n else {\n this._err(ERR.missingSemicolonAfterCharacterReference);\n this.state = State.NUMERIC_CHARACTER_REFERENCE_END;\n this._stateNumericCharacterReferenceEnd(cp);\n }\n }\n // Decimal character reference state\n //------------------------------------------------------------------\n _stateDecimalCharacterReference(cp) {\n if (isAsciiDigit(cp)) {\n this.charRefCode = this.charRefCode * 10 + cp - 0x30;\n }\n else if (cp === $.SEMICOLON) {\n this.state = State.NUMERIC_CHARACTER_REFERENCE_END;\n }\n else {\n this._err(ERR.missingSemicolonAfterCharacterReference);\n this.state = State.NUMERIC_CHARACTER_REFERENCE_END;\n this._stateNumericCharacterReferenceEnd(cp);\n }\n }\n // Numeric character reference end state\n //------------------------------------------------------------------\n _stateNumericCharacterReferenceEnd(cp) {\n if (this.charRefCode === $.NULL) {\n this._err(ERR.nullCharacterReference);\n this.charRefCode = $.REPLACEMENT_CHARACTER;\n }\n else if (this.charRefCode > 1114111) {\n this._err(ERR.characterReferenceOutsideUnicodeRange);\n this.charRefCode = $.REPLACEMENT_CHARACTER;\n }\n else if (isSurrogate(this.charRefCode)) {\n this._err(ERR.surrogateCharacterReference);\n this.charRefCode = $.REPLACEMENT_CHARACTER;\n }\n else if (isUndefinedCodePoint(this.charRefCode)) {\n this._err(ERR.noncharacterCharacterReference);\n }\n else if (isControlCodePoint(this.charRefCode) || this.charRefCode === $.CARRIAGE_RETURN) {\n this._err(ERR.controlCharacterReference);\n const replacement = C1_CONTROLS_REFERENCE_REPLACEMENTS.get(this.charRefCode);\n if (replacement !== undefined) {\n this.charRefCode = replacement;\n }\n }\n this._flushCodePointConsumedAsCharacterReference(this.charRefCode);\n this._reconsumeInState(this.returnState, cp);\n }\n}\n//# sourceMappingURL=index.js.map","import { TAG_ID as $, NS, isNumberedHeader } from '../common/html.js';\n//Element utils\nconst IMPLICIT_END_TAG_REQUIRED = new Set([$.DD, $.DT, $.LI, $.OPTGROUP, $.OPTION, $.P, $.RB, $.RP, $.RT, $.RTC]);\nconst IMPLICIT_END_TAG_REQUIRED_THOROUGHLY = new Set([\n ...IMPLICIT_END_TAG_REQUIRED,\n $.CAPTION,\n $.COLGROUP,\n $.TBODY,\n $.TD,\n $.TFOOT,\n $.TH,\n $.THEAD,\n $.TR,\n]);\nconst SCOPING_ELEMENT_NS = new Map([\n [$.APPLET, NS.HTML],\n [$.CAPTION, NS.HTML],\n [$.HTML, NS.HTML],\n [$.MARQUEE, NS.HTML],\n [$.OBJECT, NS.HTML],\n [$.TABLE, NS.HTML],\n [$.TD, NS.HTML],\n [$.TEMPLATE, NS.HTML],\n [$.TH, NS.HTML],\n [$.ANNOTATION_XML, NS.MATHML],\n [$.MI, NS.MATHML],\n [$.MN, NS.MATHML],\n [$.MO, NS.MATHML],\n [$.MS, NS.MATHML],\n [$.MTEXT, NS.MATHML],\n [$.DESC, NS.SVG],\n [$.FOREIGN_OBJECT, NS.SVG],\n [$.TITLE, NS.SVG],\n]);\nconst NAMED_HEADERS = [$.H1, $.H2, $.H3, $.H4, $.H5, $.H6];\nconst TABLE_ROW_CONTEXT = [$.TR, $.TEMPLATE, $.HTML];\nconst TABLE_BODY_CONTEXT = [$.TBODY, $.TFOOT, $.THEAD, $.TEMPLATE, $.HTML];\nconst TABLE_CONTEXT = [$.TABLE, $.TEMPLATE, $.HTML];\nconst TABLE_CELLS = [$.TD, $.TH];\n//Stack of open elements\nexport class OpenElementStack {\n get currentTmplContentOrNode() {\n return this._isInTemplate() ? this.treeAdapter.getTemplateContent(this.current) : this.current;\n }\n constructor(document, treeAdapter, handler) {\n this.treeAdapter = treeAdapter;\n this.handler = handler;\n this.items = [];\n this.tagIDs = [];\n this.stackTop = -1;\n this.tmplCount = 0;\n this.currentTagId = $.UNKNOWN;\n this.current = document;\n }\n //Index of element\n _indexOf(element) {\n return this.items.lastIndexOf(element, this.stackTop);\n }\n //Update current element\n _isInTemplate() {\n return this.currentTagId === $.TEMPLATE && this.treeAdapter.getNamespaceURI(this.current) === NS.HTML;\n }\n _updateCurrentElement() {\n this.current = this.items[this.stackTop];\n this.currentTagId = this.tagIDs[this.stackTop];\n }\n //Mutations\n push(element, tagID) {\n this.stackTop++;\n this.items[this.stackTop] = element;\n this.current = element;\n this.tagIDs[this.stackTop] = tagID;\n this.currentTagId = tagID;\n if (this._isInTemplate()) {\n this.tmplCount++;\n }\n this.handler.onItemPush(element, tagID, true);\n }\n pop() {\n const popped = this.current;\n if (this.tmplCount > 0 && this._isInTemplate()) {\n this.tmplCount--;\n }\n this.stackTop--;\n this._updateCurrentElement();\n this.handler.onItemPop(popped, true);\n }\n replace(oldElement, newElement) {\n const idx = this._indexOf(oldElement);\n this.items[idx] = newElement;\n if (idx === this.stackTop) {\n this.current = newElement;\n }\n }\n insertAfter(referenceElement, newElement, newElementID) {\n const insertionIdx = this._indexOf(referenceElement) + 1;\n this.items.splice(insertionIdx, 0, newElement);\n this.tagIDs.splice(insertionIdx, 0, newElementID);\n this.stackTop++;\n if (insertionIdx === this.stackTop) {\n this._updateCurrentElement();\n }\n this.handler.onItemPush(this.current, this.currentTagId, insertionIdx === this.stackTop);\n }\n popUntilTagNamePopped(tagName) {\n let targetIdx = this.stackTop + 1;\n do {\n targetIdx = this.tagIDs.lastIndexOf(tagName, targetIdx - 1);\n } while (targetIdx > 0 && this.treeAdapter.getNamespaceURI(this.items[targetIdx]) !== NS.HTML);\n this.shortenToLength(targetIdx < 0 ? 0 : targetIdx);\n }\n shortenToLength(idx) {\n while (this.stackTop >= idx) {\n const popped = this.current;\n if (this.tmplCount > 0 && this._isInTemplate()) {\n this.tmplCount -= 1;\n }\n this.stackTop--;\n this._updateCurrentElement();\n this.handler.onItemPop(popped, this.stackTop < idx);\n }\n }\n popUntilElementPopped(element) {\n const idx = this._indexOf(element);\n this.shortenToLength(idx < 0 ? 0 : idx);\n }\n popUntilPopped(tagNames, targetNS) {\n const idx = this._indexOfTagNames(tagNames, targetNS);\n this.shortenToLength(idx < 0 ? 0 : idx);\n }\n popUntilNumberedHeaderPopped() {\n this.popUntilPopped(NAMED_HEADERS, NS.HTML);\n }\n popUntilTableCellPopped() {\n this.popUntilPopped(TABLE_CELLS, NS.HTML);\n }\n popAllUpToHtmlElement() {\n //NOTE: here we assume that the root <html> element is always first in the open element stack, so\n //we perform this fast stack clean up.\n this.tmplCount = 0;\n this.shortenToLength(1);\n }\n _indexOfTagNames(tagNames, namespace) {\n for (let i = this.stackTop; i >= 0; i--) {\n if (tagNames.includes(this.tagIDs[i]) && this.treeAdapter.getNamespaceURI(this.items[i]) === namespace) {\n return i;\n }\n }\n return -1;\n }\n clearBackTo(tagNames, targetNS) {\n const idx = this._indexOfTagNames(tagNames, targetNS);\n this.shortenToLength(idx + 1);\n }\n clearBackToTableContext() {\n this.clearBackTo(TABLE_CONTEXT, NS.HTML);\n }\n clearBackToTableBodyContext() {\n this.clearBackTo(TABLE_BODY_CONTEXT, NS.HTML);\n }\n clearBackToTableRowContext() {\n this.clearBackTo(TABLE_ROW_CONTEXT, NS.HTML);\n }\n remove(element) {\n const idx = this._indexOf(element);\n if (idx >= 0) {\n if (idx === this.stackTop) {\n this.pop();\n }\n else {\n this.items.splice(idx, 1);\n this.tagIDs.splice(idx, 1);\n this.stackTop--;\n this._updateCurrentElement();\n this.handler.onItemPop(element, false);\n }\n }\n }\n //Search\n tryPeekProperlyNestedBodyElement() {\n //Properly nested <body> element (should be second element in stack).\n return this.stackTop >= 1 && this.tagIDs[1] === $.BODY ? this.items[1] : null;\n }\n contains(element) {\n return this._indexOf(element) > -1;\n }\n getCommonAncestor(element) {\n const elementIdx = this._indexOf(element) - 1;\n return elementIdx >= 0 ? this.items[elementIdx] : null;\n }\n isRootHtmlElementCurrent() {\n return this.stackTop === 0 && this.tagIDs[0] === $.HTML;\n }\n //Element in scope\n hasInScope(tagName) {\n for (let i = this.stackTop; i >= 0; i--) {\n const tn = this.tagIDs[i];\n const ns = this.treeAdapter.getNamespaceURI(this.items[i]);\n if (tn === tagName && ns === NS.HTML) {\n return true;\n }\n if (SCOPING_ELEMENT_NS.get(tn) === ns) {\n return false;\n }\n }\n return true;\n }\n hasNumberedHeaderInScope() {\n for (let i = this.stackTop; i >= 0; i--) {\n const tn = this.tagIDs[i];\n const ns = this.treeAdapter.getNamespaceURI(this.items[i]);\n if (isNumberedHeader(tn) && ns === NS.HTML) {\n return true;\n }\n if (SCOPING_ELEMENT_NS.get(tn) === ns) {\n return false;\n }\n }\n return true;\n }\n hasInListItemScope(tagName) {\n for (let i = this.stackTop; i >= 0; i--) {\n const tn = this.tagIDs[i];\n const ns = this.treeAdapter.getNamespaceURI(this.items[i]);\n if (tn === tagName && ns === NS.HTML) {\n return true;\n }\n if (((tn === $.UL || tn === $.OL) && ns === NS.HTML) || SCOPING_ELEMENT_NS.get(tn) === ns) {\n return false;\n }\n }\n return true;\n }\n hasInButtonScope(tagName) {\n for (let i = this.stackTop; i >= 0; i--) {\n const tn = this.tagIDs[i];\n const ns = this.treeAdapter.getNamespaceURI(this.items[i]);\n if (tn === tagName && ns === NS.HTML) {\n return true;\n }\n if ((tn === $.BUTTON && ns === NS.HTML) || SCOPING_ELEMENT_NS.get(tn) === ns) {\n return false;\n }\n }\n return true;\n }\n hasInTableScope(tagName) {\n for (let i = this.stackTop; i >= 0; i--) {\n const tn = this.tagIDs[i];\n const ns = this.treeAdapter.getNamespaceURI(this.items[i]);\n if (ns !== NS.HTML) {\n continue;\n }\n if (tn === tagName) {\n return true;\n }\n if (tn === $.TABLE || tn === $.TEMPLATE || tn === $.HTML) {\n return false;\n }\n }\n return true;\n }\n hasTableBodyContextInTableScope() {\n for (let i = this.stackTop; i >= 0; i--) {\n const tn = this.tagIDs[i];\n const ns = this.treeAdapter.getNamespaceURI(this.items[i]);\n if (ns !== NS.HTML) {\n continue;\n }\n if (tn === $.TBODY || tn === $.THEAD || tn === $.TFOOT) {\n return true;\n }\n if (tn === $.TABLE || tn === $.HTML) {\n return false;\n }\n }\n return true;\n }\n hasInSelectScope(tagName) {\n for (let i = this.stackTop; i >= 0; i--) {\n const tn = this.tagIDs[i];\n const ns = this.treeAdapter.getNamespaceURI(this.items[i]);\n if (ns !== NS.HTML) {\n continue;\n }\n if (tn === tagName) {\n return true;\n }\n if (tn !== $.OPTION && tn !== $.OPTGROUP) {\n return false;\n }\n }\n return true;\n }\n //Implied end tags\n generateImpliedEndTags() {\n while (IMPLICIT_END_TAG_REQUIRED.has(this.currentTagId)) {\n this.pop();\n }\n }\n generateImpliedEndTagsThoroughly() {\n while (IMPLICIT_END_TAG_REQUIRED_THOROUGHLY.has(this.currentTagId)) {\n this.pop();\n }\n }\n generateImpliedEndTagsWithExclusion(exclusionId) {\n while (this.currentTagId !== exclusionId && IMPLICIT_END_TAG_REQUIRED_THOROUGHLY.has(this.currentTagId)) {\n this.pop();\n }\n }\n}\n//# sourceMappingURL=open-element-stack.js.map","//Const\nconst NOAH_ARK_CAPACITY = 3;\nexport var EntryType;\n(function (EntryType) {\n EntryType[EntryType[\"Marker\"] = 0] = \"Marker\";\n EntryType[EntryType[\"Element\"] = 1] = \"Element\";\n})(EntryType = EntryType || (EntryType = {}));\nconst MARKER = { type: EntryType.Marker };\n//List of formatting elements\nexport class FormattingElementList {\n constructor(treeAdapter) {\n this.treeAdapter = treeAdapter;\n this.entries = [];\n this.bookmark = null;\n }\n //Noah Ark's condition\n //OPTIMIZATION: at first we try to find possible candidates for exclusion using\n //lightweight heuristics without thorough attributes check.\n _getNoahArkConditionCandidates(newElement, neAttrs) {\n const candidates = [];\n const neAttrsLength = neAttrs.length;\n const neTagName = this.treeAdapter.getTagName(newElement);\n const neNamespaceURI = this.treeAdapter.getNamespaceURI(newElement);\n for (let i = 0; i < this.entries.length; i++) {\n const entry = this.entries[i];\n if (entry.type === EntryType.Marker) {\n break;\n }\n const { element } = entry;\n if (this.treeAdapter.getTagName(element) === neTagName &&\n this.treeAdapter.getNamespaceURI(element) === neNamespaceURI) {\n const elementAttrs = this.treeAdapter.getAttrList(element);\n if (elementAttrs.length === neAttrsLength) {\n candidates.push({ idx: i, attrs: elementAttrs });\n }\n }\n }\n return candidates;\n }\n _ensureNoahArkCondition(newElement) {\n if (this.entries.length < NOAH_ARK_CAPACITY)\n return;\n const neAttrs = this.treeAdapter.getAttrList(newElement);\n const candidates = this._getNoahArkConditionCandidates(newElement, neAttrs);\n if (candidates.length < NOAH_ARK_CAPACITY)\n return;\n //NOTE: build attrs map for the new element, so we can perform fast lookups\n const neAttrsMap = new Map(neAttrs.map((neAttr) => [neAttr.name, neAttr.value]));\n let validCandidates = 0;\n //NOTE: remove bottommost candidates, until Noah's Ark condition will not be met\n for (let i = 0; i < candidates.length; i++) {\n const candidate = candidates[i];\n // We know that `candidate.attrs.length === neAttrs.length`\n if (candidate.attrs.every((cAttr) => neAttrsMap.get(cAttr.name) === cAttr.value)) {\n validCandidates += 1;\n if (validCandidates >= NOAH_ARK_CAPACITY) {\n this.entries.splice(candidate.idx, 1);\n }\n }\n }\n }\n //Mutations\n insertMarker() {\n this.entries.unshift(MARKER);\n }\n pushElement(element, token) {\n this._ensureNoahArkCondition(element);\n this.entries.unshift({\n type: EntryType.Element,\n element,\n token,\n });\n }\n insertElementAfterBookmark(element, token) {\n const bookmarkIdx = this.entries.indexOf(this.bookmark);\n this.entries.splice(bookmarkIdx, 0, {\n type: EntryType.Element,\n element,\n token,\n });\n }\n removeEntry(entry) {\n const entryIndex = this.entries.indexOf(entry);\n if (entryIndex >= 0) {\n this.entries.splice(entryIndex, 1);\n }\n }\n /**\n * Clears the list of formatting elements up to the last marker.\n *\n * @see https://html.spec.whatwg.org/multipage/parsing.html#clear-the-list-of-active-formatting-elements-up-to-the-last-marker\n */\n clearToLastMarker() {\n const markerIdx = this.entries.indexOf(MARKER);\n if (markerIdx >= 0) {\n this.entries.splice(0, markerIdx + 1);\n }\n else {\n this.entries.length = 0;\n }\n }\n //Search\n getElementEntryInScopeWithTagName(tagName) {\n const entry = this.entries.find((entry) => entry.type === EntryType.Marker || this.treeAdapter.getTagName(entry.element) === tagName);\n return entry && entry.type === EntryType.Element ? entry : null;\n }\n getElementEntry(element) {\n return this.entries.find((entry) => entry.type === EntryType.Element && entry.element === element);\n }\n}\n//# sourceMappingURL=formatting-element-list.js.map","import { DOCUMENT_MODE } from '../common/html.js';\nfunction createTextNode(value) {\n return {\n nodeName: '#text',\n value,\n parentNode: null,\n };\n}\nexport const defaultTreeAdapter = {\n //Node construction\n createDocument() {\n return {\n nodeName: '#document',\n mode: DOCUMENT_MODE.NO_QUIRKS,\n childNodes: [],\n };\n },\n createDocumentFragment() {\n return {\n nodeName: '#document-fragment',\n childNodes: [],\n };\n },\n createElement(tagName, namespaceURI, attrs) {\n return {\n nodeName: tagName,\n tagName,\n attrs,\n namespaceURI,\n childNodes: [],\n parentNode: null,\n };\n },\n createCommentNode(data) {\n return {\n nodeName: '#comment',\n data,\n parentNode: null,\n };\n },\n //Tree mutation\n appendChild(parentNode, newNode) {\n parentNode.childNodes.push(newNode);\n newNode.parentNode = parentNode;\n },\n insertBefore(parentNode, newNode, referenceNode) {\n const insertionIdx = parentNode.childNodes.indexOf(referenceNode);\n parentNode.childNodes.splice(insertionIdx, 0, newNode);\n newNode.parentNode = parentNode;\n },\n setTemplateContent(templateElement, contentElement) {\n templateElement.content = contentElement;\n },\n getTemplateContent(templateElement) {\n return templateElement.content;\n },\n setDocumentType(document, name, publicId, systemId) {\n const doctypeNode = document.childNodes.find((node) => node.nodeName === '#documentType');\n if (doctypeNode) {\n doctypeNode.name = name;\n doctypeNode.publicId = publicId;\n doctypeNode.systemId = systemId;\n }\n else {\n const node = {\n nodeName: '#documentType',\n name,\n publicId,\n systemId,\n parentNode: null,\n };\n defaultTreeAdapter.appendChild(document, node);\n }\n },\n setDocumentMode(document, mode) {\n document.mode = mode;\n },\n getDocumentMode(document) {\n return document.mode;\n },\n detachNode(node) {\n if (node.parentNode) {\n const idx = node.parentNode.childNodes.indexOf(node);\n node.parentNode.childNodes.splice(idx, 1);\n node.parentNode = null;\n }\n },\n insertText(parentNode, text) {\n if (parentNode.childNodes.length > 0) {\n const prevNode = parentNode.childNodes[parentNode.childNodes.length - 1];\n if (defaultTreeAdapter.isTextNode(prevNode)) {\n prevNode.value += text;\n return;\n }\n }\n defaultTreeAdapter.appendChild(parentNode, createTextNode(text));\n },\n insertTextBefore(parentNode, text, referenceNode) {\n const prevNode = parentNode.childNodes[parentNode.childNodes.indexOf(referenceNode) - 1];\n if (prevNode && defaultTreeAdapter.isTextNode(prevNode)) {\n prevNode.value += text;\n }\n else {\n defaultTreeAdapter.insertBefore(parentNode, createTextNode(text), referenceNode);\n }\n },\n adoptAttributes(recipient, attrs) {\n const recipientAttrsMap = new Set(recipient.attrs.map((attr) => attr.name));\n for (let j = 0; j < attrs.length; j++) {\n if (!recipientAttrsMap.has(attrs[j].name)) {\n recipient.attrs.push(attrs[j]);\n }\n }\n },\n //Tree traversing\n getFirstChild(node) {\n return node.childNodes[0];\n },\n getChildNodes(node) {\n return node.childNodes;\n },\n getParentNode(node) {\n return node.parentNode;\n },\n getAttrList(element) {\n return element.attrs;\n },\n //Node data\n getTagName(element) {\n return element.tagName;\n },\n getNamespaceURI(element) {\n return element.namespaceURI;\n },\n getTextNodeContent(textNode) {\n return textNode.value;\n },\n getCommentNodeContent(commentNode) {\n return commentNode.data;\n },\n getDocumentTypeNodeName(doctypeNode) {\n return doctypeNode.name;\n },\n getDocumentTypeNodePublicId(doctypeNode) {\n return doctypeNode.publicId;\n },\n getDocumentTypeNodeSystemId(doctypeNode) {\n return doctypeNode.systemId;\n },\n //Node types\n isTextNode(node) {\n return node.nodeName === '#text';\n },\n isCommentNode(node) {\n return node.nodeName === '#comment';\n },\n isDocumentTypeNode(node) {\n return node.nodeName === '#documentType';\n },\n isElementNode(node) {\n return Object.prototype.hasOwnProperty.call(node, 'tagName');\n },\n // Source code location\n setNodeSourceCodeLocation(node, location) {\n node.sourceCodeLocation = location;\n },\n getNodeSourceCodeLocation(node) {\n return node.sourceCodeLocation;\n },\n updateNodeSourceCodeLocation(node, endLocation) {\n node.sourceCodeLocation = { ...node.sourceCodeLocation, ...endLocation };\n },\n};\n//# sourceMappingURL=default.js.map","import { DOCUMENT_MODE } from './html.js';\n//Const\nconst VALID_DOCTYPE_NAME = 'html';\nconst VALID_SYSTEM_ID = 'about:legacy-compat';\nconst QUIRKS_MODE_SYSTEM_ID = 'http://www.ibm.com/data/dtd/v11/ibmxhtml1-transitional.dtd';\nconst QUIRKS_MODE_PUBLIC_ID_PREFIXES = [\n '+//silmaril//dtd html pro v0r11 19970101//',\n '-//as//dtd html 3.0 aswedit + extensions//',\n '-//advasoft ltd//dtd html 3.0 aswedit + extensions//',\n '-//ietf//dtd html 2.0 level 1//',\n '-//ietf//dtd html 2.0 level 2//',\n '-//ietf//dtd html 2.0 strict level 1//',\n '-//ietf//dtd html 2.0 strict level 2//',\n '-//ietf//dtd html 2.0 strict//',\n '-//ietf//dtd html 2.0//',\n '-//ietf//dtd html 2.1e//',\n '-//ietf//dtd html 3.0//',\n '-//ietf//dtd html 3.2 final//',\n '-//ietf//dtd html 3.2//',\n '-//ietf//dtd html 3//',\n '-//ietf//dtd html level 0//',\n '-//ietf//dtd html level 1//',\n '-//ietf//dtd html level 2//',\n '-//ietf//dtd html level 3//',\n '-//ietf//dtd html strict level 0//',\n '-//ietf//dtd html strict level 1//',\n '-//ietf//dtd html strict level 2//',\n '-//ietf//dtd html strict level 3//',\n '-//ietf//dtd html strict//',\n '-//ietf//dtd html//',\n '-//metrius//dtd metrius presentational//',\n '-//microsoft//dtd internet explorer 2.0 html strict//',\n '-//microsoft//dtd internet explorer 2.0 html//',\n '-//microsoft//dtd internet explorer 2.0 tables//',\n '-//microsoft//dtd internet explorer 3.0 html strict//',\n '-//microsoft//dtd internet explorer 3.0 html//',\n '-//microsoft//dtd internet explorer 3.0 tables//',\n '-//netscape comm. corp.//dtd html//',\n '-//netscape comm. corp.//dtd strict html//',\n \"-//o'reilly and associates//dtd html 2.0//\",\n \"-//o'reilly and associates//dtd html extended 1.0//\",\n \"-//o'reilly and associates//dtd html extended relaxed 1.0//\",\n '-//sq//dtd html 2.0 hotmetal + extensions//',\n '-//softquad software//dtd hotmetal pro 6.0::19990601::extensions to html 4.0//',\n '-//softquad//dtd hotmetal pro 4.0::19971010::extensions to html 4.0//',\n '-//spyglass//dtd html 2.0 extended//',\n '-//sun microsystems corp.//dtd hotjava html//',\n '-//sun microsystems corp.//dtd hotjava strict html//',\n '-//w3c//dtd html 3 1995-03-24//',\n '-//w3c//dtd html 3.2 draft//',\n '-//w3c//dtd html 3.2 final//',\n '-//w3c//dtd html 3.2//',\n '-//w3c//dtd html 3.2s draft//',\n '-//w3c//dtd html 4.0 frameset//',\n '-//w3c//dtd html 4.0 transitional//',\n '-//w3c//dtd html experimental 19960712//',\n '-//w3c//dtd html experimental 970421//',\n '-//w3c//dtd w3 html//',\n '-//w3o//dtd w3 html 3.0//',\n '-//webtechs//dtd mozilla html 2.0//',\n '-//webtechs//dtd mozilla html//',\n];\nconst QUIRKS_MODE_NO_SYSTEM_ID_PUBLIC_ID_PREFIXES = [\n ...QUIRKS_MODE_PUBLIC_ID_PREFIXES,\n '-//w3c//dtd html 4.01 frameset//',\n '-//w3c//dtd html 4.01 transitional//',\n];\nconst QUIRKS_MODE_PUBLIC_IDS = new Set([\n '-//w3o//dtd w3 html strict 3.0//en//',\n '-/w3c/dtd html 4.0 transitional/en',\n 'html',\n]);\nconst LIMITED_QUIRKS_PUBLIC_ID_PREFIXES = ['-//w3c//dtd xhtml 1.0 frameset//', '-//w3c//dtd xhtml 1.0 transitional//'];\nconst LIMITED_QUIRKS_WITH_SYSTEM_ID_PUBLIC_ID_PREFIXES = [\n ...LIMITED_QUIRKS_PUBLIC_ID_PREFIXES,\n '-//w3c//dtd html 4.01 frameset//',\n '-//w3c//dtd html 4.01 transitional//',\n];\n//Utils\nfunction hasPrefix(publicId, prefixes) {\n return prefixes.some((prefix) => publicId.startsWith(prefix));\n}\n//API\nexport function isConforming(token) {\n return (token.name === VALID_DOCTYPE_NAME &&\n token.publicId === null &&\n (token.systemId === null || token.systemId === VALID_SYSTEM_ID));\n}\nexport function getDocumentMode(token) {\n if (token.name !== VALID_DOCTYPE_NAME) {\n return DOCUMENT_MODE.QUIRKS;\n }\n const { systemId } = token;\n if (systemId && systemId.toLowerCase() === QUIRKS_MODE_SYSTEM_ID) {\n return DOCUMENT_MODE.QUIRKS;\n }\n let { publicId } = token;\n if (publicId !== null) {\n publicId = publicId.toLowerCase();\n if (QUIRKS_MODE_PUBLIC_IDS.has(publicId)) {\n return DOCUMENT_MODE.QUIRKS;\n }\n let prefixes = systemId === null ? QUIRKS_MODE_NO_SYSTEM_ID_PUBLIC_ID_PREFIXES : QUIRKS_MODE_PUBLIC_ID_PREFIXES;\n if (hasPrefix(publicId, prefixes)) {\n return DOCUMENT_MODE.QUIRKS;\n }\n prefixes =\n systemId === null ? LIMITED_QUIRKS_PUBLIC_ID_PREFIXES : LIMITED_QUIRKS_WITH_SYSTEM_ID_PUBLIC_ID_PREFIXES;\n if (hasPrefix(publicId, prefixes)) {\n return DOCUMENT_MODE.LIMITED_QUIRKS;\n }\n }\n return DOCUMENT_MODE.NO_QUIRKS;\n}\n//# sourceMappingURL=doctype.js.map","import { TAG_ID as $, NS, ATTRS, getTagID } from './html.js';\n//MIME types\nconst MIME_TYPES = {\n TEXT_HTML: 'text/html',\n APPLICATION_XML: 'application/xhtml+xml',\n};\n//Attributes\nconst DEFINITION_URL_ATTR = 'definitionurl';\nconst ADJUSTED_DEFINITION_URL_ATTR = 'definitionURL';\nconst SVG_ATTRS_ADJUSTMENT_MAP = new Map([\n 'attributeName',\n 'attributeType',\n 'baseFrequency',\n 'baseProfile',\n 'calcMode',\n 'clipPathUnits',\n 'diffuseConstant',\n 'edgeMode',\n 'filterUnits',\n 'glyphRef',\n 'gradientTransform',\n 'gradientUnits',\n 'kernelMatrix',\n 'kernelUnitLength',\n 'keyPoints',\n 'keySplines',\n 'keyTimes',\n 'lengthAdjust',\n 'limitingConeAngle',\n 'markerHeight',\n 'markerUnits',\n 'markerWidth',\n 'maskContentUnits',\n 'maskUnits',\n 'numOctaves',\n 'pathLength',\n 'patternContentUnits',\n 'patternTransform',\n 'patternUnits',\n 'pointsAtX',\n 'pointsAtY',\n 'pointsAtZ',\n 'preserveAlpha',\n 'preserveAspectRatio',\n 'primitiveUnits',\n 'refX',\n 'refY',\n 'repeatCount',\n 'repeatDur',\n 'requiredExtensions',\n 'requiredFeatures',\n 'specularConstant',\n 'specularExponent',\n 'spreadMethod',\n 'startOffset',\n 'stdDeviation',\n 'stitchTiles',\n 'surfaceScale',\n 'systemLanguage',\n 'tableValues',\n 'targetX',\n 'targetY',\n 'textLength',\n 'viewBox',\n 'viewTarget',\n 'xChannelSelector',\n 'yChannelSelector',\n 'zoomAndPan',\n].map((attr) => [attr.toLowerCase(), attr]));\nconst XML_ATTRS_ADJUSTMENT_MAP = new Map([\n ['xlink:actuate', { prefix: 'xlink', name: 'actuate', namespace: NS.XLINK }],\n ['xlink:arcrole', { prefix: 'xlink', name: 'arcrole', namespace: NS.XLINK }],\n ['xlink:href', { prefix: 'xlink', name: 'href', namespace: NS.XLINK }],\n ['xlink:role', { prefix: 'xlink', name: 'role', namespace: NS.XLINK }],\n ['xlink:show', { prefix: 'xlink', name: 'show', namespace: NS.XLINK }],\n ['xlink:title', { prefix: 'xlink', name: 'title', namespace: NS.XLINK }],\n ['xlink:type', { prefix: 'xlink', name: 'type', namespace: NS.XLINK }],\n ['xml:base', { prefix: 'xml', name: 'base', namespace: NS.XML }],\n ['xml:lang', { prefix: 'xml', name: 'lang', namespace: NS.XML }],\n ['xml:space', { prefix: 'xml', name: 'space', namespace: NS.XML }],\n ['xmlns', { prefix: '', name: 'xmlns', namespace: NS.XMLNS }],\n ['xmlns:xlink', { prefix: 'xmlns', name: 'xlink', namespace: NS.XMLNS }],\n]);\n//SVG tag names adjustment map\nexport const SVG_TAG_NAMES_ADJUSTMENT_MAP = new Map([\n 'altGlyph',\n 'altGlyphDef',\n 'altGlyphItem',\n 'animateColor',\n 'animateMotion',\n 'animateTransform',\n 'clipPath',\n 'feBlend',\n 'feColorMatrix',\n 'feComponentTransfer',\n 'feComposite',\n 'feConvolveMatrix',\n 'feDiffuseLighting',\n 'feDisplacementMap',\n 'feDistantLight',\n 'feFlood',\n 'feFuncA',\n 'feFuncB',\n 'feFuncG',\n 'feFuncR',\n 'feGaussianBlur',\n 'feImage',\n 'feMerge',\n 'feMergeNode',\n 'feMorphology',\n 'feOffset',\n 'fePointLight',\n 'feSpecularLighting',\n 'feSpotLight',\n 'feTile',\n 'feTurbulence',\n 'foreignObject',\n 'glyphRef',\n 'linearGradient',\n 'radialGradient',\n 'textPath',\n].map((tn) => [tn.toLowerCase(), tn]));\n//Tags that causes exit from foreign content\nconst EXITS_FOREIGN_CONTENT = new Set([\n $.B,\n $.BIG,\n $.BLOCKQUOTE,\n $.BODY,\n $.BR,\n $.CENTER,\n $.CODE,\n $.DD,\n $.DIV,\n $.DL,\n $.DT,\n $.EM,\n $.EMBED,\n $.H1,\n $.H2,\n $.H3,\n $.H4,\n $.H5,\n $.H6,\n $.HEAD,\n $.HR,\n $.I,\n $.IMG,\n $.LI,\n $.LISTING,\n $.MENU,\n $.META,\n $.NOBR,\n $.OL,\n $.P,\n $.PRE,\n $.RUBY,\n $.S,\n $.SMALL,\n $.SPAN,\n $.STRONG,\n $.STRIKE,\n $.SUB,\n $.SUP,\n $.TABLE,\n $.TT,\n $.U,\n $.UL,\n $.VAR,\n]);\n//Check exit from foreign content\nexport function causesExit(startTagToken) {\n const tn = startTagToken.tagID;\n const isFontWithAttrs = tn === $.FONT &&\n startTagToken.attrs.some(({ name }) => name === ATTRS.COLOR || name === ATTRS.SIZE || name === ATTRS.FACE);\n return isFontWithAttrs || EXITS_FOREIGN_CONTENT.has(tn);\n}\n//Token adjustments\nexport function adjustTokenMathMLAttrs(token) {\n for (let i = 0; i < token.attrs.length; i++) {\n if (token.attrs[i].name === DEFINITION_URL_ATTR) {\n token.attrs[i].name = ADJUSTED_DEFINITION_URL_ATTR;\n break;\n }\n }\n}\nexport function adjustTokenSVGAttrs(token) {\n for (let i = 0; i < token.attrs.length; i++) {\n const adjustedAttrName = SVG_ATTRS_ADJUSTMENT_MAP.get(token.attrs[i].name);\n if (adjustedAttrName != null) {\n token.attrs[i].name = adjustedAttrName;\n }\n }\n}\nexport function adjustTokenXMLAttrs(token) {\n for (let i = 0; i < token.attrs.length; i++) {\n const adjustedAttrEntry = XML_ATTRS_ADJUSTMENT_MAP.get(token.attrs[i].name);\n if (adjustedAttrEntry) {\n token.attrs[i].prefix = adjustedAttrEntry.prefix;\n token.attrs[i].name = adjustedAttrEntry.name;\n token.attrs[i].namespace = adjustedAttrEntry.namespace;\n }\n }\n}\nexport function adjustTokenSVGTagName(token) {\n const adjustedTagName = SVG_TAG_NAMES_ADJUSTMENT_MAP.get(token.tagName);\n if (adjustedTagName != null) {\n token.tagName = adjustedTagName;\n token.tagID = getTagID(token.tagName);\n }\n}\n//Integration points\nfunction isMathMLTextIntegrationPoint(tn, ns) {\n return ns === NS.MATHML && (tn === $.MI || tn === $.MO || tn === $.MN || tn === $.MS || tn === $.MTEXT);\n}\nfunction isHtmlIntegrationPoint(tn, ns, attrs) {\n if (ns === NS.MATHML && tn === $.ANNOTATION_XML) {\n for (let i = 0; i < attrs.length; i++) {\n if (attrs[i].name === ATTRS.ENCODING) {\n const value = attrs[i].value.toLowerCase();\n return value === MIME_TYPES.TEXT_HTML || value === MIME_TYPES.APPLICATION_XML;\n }\n }\n }\n return ns === NS.SVG && (tn === $.FOREIGN_OBJECT || tn === $.DESC || tn === $.TITLE);\n}\nexport function isIntegrationPoint(tn, ns, attrs, foreignNS) {\n return (((!foreignNS || foreignNS === NS.HTML) && isHtmlIntegrationPoint(tn, ns, attrs)) ||\n ((!foreignNS || foreignNS === NS.MATHML) && isMathMLTextIntegrationPoint(tn, ns)));\n}\n//# sourceMappingURL=foreign-content.js.map","import { Tokenizer, TokenizerMode } from '../tokenizer/index.js';\nimport { OpenElementStack } from './open-element-stack.js';\nimport { FormattingElementList, EntryType } from './formatting-element-list.js';\nimport { defaultTreeAdapter } from '../tree-adapters/default.js';\nimport * as doctype from '../common/doctype.js';\nimport * as foreignContent from '../common/foreign-content.js';\nimport { ERR } from '../common/error-codes.js';\nimport * as unicode from '../common/unicode.js';\nimport { TAG_ID as $, TAG_NAMES as TN, NS, ATTRS, SPECIAL_ELEMENTS, DOCUMENT_MODE, isNumberedHeader, getTagID, } from '../common/html.js';\nimport { TokenType, getTokenAttr, } from '../common/token.js';\n//Misc constants\nconst HIDDEN_INPUT_TYPE = 'hidden';\n//Adoption agency loops iteration count\nconst AA_OUTER_LOOP_ITER = 8;\nconst AA_INNER_LOOP_ITER = 3;\n//Insertion modes\nvar InsertionMode;\n(function (InsertionMode) {\n InsertionMode[InsertionMode[\"INITIAL\"] = 0] = \"INITIAL\";\n InsertionMode[InsertionMode[\"BEFORE_HTML\"] = 1] = \"BEFORE_HTML\";\n InsertionMode[InsertionMode[\"BEFORE_HEAD\"] = 2] = \"BEFORE_HEAD\";\n InsertionMode[InsertionMode[\"IN_HEAD\"] = 3] = \"IN_HEAD\";\n InsertionMode[InsertionMode[\"IN_HEAD_NO_SCRIPT\"] = 4] = \"IN_HEAD_NO_SCRIPT\";\n InsertionMode[InsertionMode[\"AFTER_HEAD\"] = 5] = \"AFTER_HEAD\";\n InsertionMode[InsertionMode[\"IN_BODY\"] = 6] = \"IN_BODY\";\n InsertionMode[InsertionMode[\"TEXT\"] = 7] = \"TEXT\";\n InsertionMode[InsertionMode[\"IN_TABLE\"] = 8] = \"IN_TABLE\";\n InsertionMode[InsertionMode[\"IN_TABLE_TEXT\"] = 9] = \"IN_TABLE_TEXT\";\n InsertionMode[InsertionMode[\"IN_CAPTION\"] = 10] = \"IN_CAPTION\";\n InsertionMode[InsertionMode[\"IN_COLUMN_GROUP\"] = 11] = \"IN_COLUMN_GROUP\";\n InsertionMode[InsertionMode[\"IN_TABLE_BODY\"] = 12] = \"IN_TABLE_BODY\";\n InsertionMode[InsertionMode[\"IN_ROW\"] = 13] = \"IN_ROW\";\n InsertionMode[InsertionMode[\"IN_CELL\"] = 14] = \"IN_CELL\";\n InsertionMode[InsertionMode[\"IN_SELECT\"] = 15] = \"IN_SELECT\";\n InsertionMode[InsertionMode[\"IN_SELECT_IN_TABLE\"] = 16] = \"IN_SELECT_IN_TABLE\";\n InsertionMode[InsertionMode[\"IN_TEMPLATE\"] = 17] = \"IN_TEMPLATE\";\n InsertionMode[InsertionMode[\"AFTER_BODY\"] = 18] = \"AFTER_BODY\";\n InsertionMode[InsertionMode[\"IN_FRAMESET\"] = 19] = \"IN_FRAMESET\";\n InsertionMode[InsertionMode[\"AFTER_FRAMESET\"] = 20] = \"AFTER_FRAMESET\";\n InsertionMode[InsertionMode[\"AFTER_AFTER_BODY\"] = 21] = \"AFTER_AFTER_BODY\";\n InsertionMode[InsertionMode[\"AFTER_AFTER_FRAMESET\"] = 22] = \"AFTER_AFTER_FRAMESET\";\n})(InsertionMode || (InsertionMode = {}));\nconst BASE_LOC = {\n startLine: -1,\n startCol: -1,\n startOffset: -1,\n endLine: -1,\n endCol: -1,\n endOffset: -1,\n};\nconst TABLE_STRUCTURE_TAGS = new Set([$.TABLE, $.TBODY, $.TFOOT, $.THEAD, $.TR]);\nconst defaultParserOptions = {\n scriptingEnabled: true,\n sourceCodeLocationInfo: false,\n treeAdapter: defaultTreeAdapter,\n onParseError: null,\n};\n//Parser\nexport class Parser {\n constructor(options, document, fragmentContext = null, scriptHandler = null) {\n this.fragmentContext = fragmentContext;\n this.scriptHandler = scriptHandler;\n this.currentToken = null;\n this.stopped = false;\n this.insertionMode = InsertionMode.INITIAL;\n this.originalInsertionMode = InsertionMode.INITIAL;\n this.headElement = null;\n this.formElement = null;\n /** Indicates that the current node is not an element in the HTML namespace */\n this.currentNotInHTML = false;\n /**\n * The template insertion mode stack is maintained from the left.\n * Ie. the topmost element will always have index 0.\n */\n this.tmplInsertionModeStack = [];\n this.pendingCharacterTokens = [];\n this.hasNonWhitespacePendingCharacterToken = false;\n this.framesetOk = true;\n this.skipNextNewLine = false;\n this.fosterParentingEnabled = false;\n this.options = {\n ...defaultParserOptions,\n ...options,\n };\n this.treeAdapter = this.options.treeAdapter;\n this.onParseError = this.options.onParseError;\n // Always enable location info if we report parse errors.\n if (this.onParseError) {\n this.options.sourceCodeLocationInfo = true;\n }\n this.document = document !== null && document !== void 0 ? document : this.treeAdapter.createDocument();\n this.tokenizer = new Tokenizer(this.options, this);\n this.activeFormattingElements = new FormattingElementList(this.treeAdapter);\n this.fragmentContextID = fragmentContext ? getTagID(this.treeAdapter.getTagName(fragmentContext)) : $.UNKNOWN;\n this._setContextModes(fragmentContext !== null && fragmentContext !== void 0 ? fragmentContext : this.document, this.fragmentContextID);\n this.openElements = new OpenElementStack(this.document, this.treeAdapter, this);\n }\n // API\n static parse(html, options) {\n const parser = new this(options);\n parser.tokenizer.write(html, true);\n return parser.document;\n }\n static getFragmentParser(fragmentContext, options) {\n const opts = {\n ...defaultParserOptions,\n ...options,\n };\n //NOTE: use a <template> element as the fragment context if no context element was provided,\n //so we will parse in a \"forgiving\" manner\n fragmentContext !== null && fragmentContext !== void 0 ? fragmentContext : (fragmentContext = opts.treeAdapter.createElement(TN.TEMPLATE, NS.HTML, []));\n //NOTE: create a fake element which will be used as the `document` for fragment parsing.\n //This is important for jsdom, where a new `document` cannot be created. This led to\n //fragment parsing messing with the main `document`.\n const documentMock = opts.treeAdapter.createElement('documentmock', NS.HTML, []);\n const parser = new this(opts, documentMock, fragmentContext);\n if (parser.fragmentContextID === $.TEMPLATE) {\n parser.tmplInsertionModeStack.unshift(InsertionMode.IN_TEMPLATE);\n }\n parser._initTokenizerForFragmentParsing();\n parser._insertFakeRootElement();\n parser._resetInsertionMode();\n parser._findFormInFragmentContext();\n return parser;\n }\n getFragment() {\n const rootElement = this.treeAdapter.getFirstChild(this.document);\n const fragment = this.treeAdapter.createDocumentFragment();\n this._adoptNodes(rootElement, fragment);\n return fragment;\n }\n //Errors\n _err(token, code, beforeToken) {\n var _a;\n if (!this.onParseError)\n return;\n const loc = (_a = token.location) !== null && _a !== void 0 ? _a : BASE_LOC;\n const err = {\n code,\n startLine: loc.startLine,\n startCol: loc.startCol,\n startOffset: loc.startOffset,\n endLine: beforeToken ? loc.startLine : loc.endLine,\n endCol: beforeToken ? loc.startCol : loc.endCol,\n endOffset: beforeToken ? loc.startOffset : loc.endOffset,\n };\n this.onParseError(err);\n }\n //Stack events\n onItemPush(node, tid, isTop) {\n var _a, _b;\n (_b = (_a = this.treeAdapter).onItemPush) === null || _b === void 0 ? void 0 : _b.call(_a, node);\n if (isTop && this.openElements.stackTop > 0)\n this._setContextModes(node, tid);\n }\n onItemPop(node, isTop) {\n var _a, _b;\n if (this.options.sourceCodeLocationInfo) {\n this._setEndLocation(node, this.currentToken);\n }\n (_b = (_a = this.treeAdapter).onItemPop) === null || _b === void 0 ? void 0 : _b.call(_a, node, this.openElements.current);\n if (isTop) {\n let current;\n let currentTagId;\n if (this.openElements.stackTop === 0 && this.fragmentContext) {\n current = this.fragmentContext;\n currentTagId = this.fragmentContextID;\n }\n else {\n ({ current, currentTagId } = this.openElements);\n }\n this._setContextModes(current, currentTagId);\n }\n }\n _setContextModes(current, tid) {\n const isHTML = current === this.document || this.treeAdapter.getNamespaceURI(current) === NS.HTML;\n this.currentNotInHTML = !isHTML;\n this.tokenizer.inForeignNode = !isHTML && !this._isIntegrationPoint(tid, current);\n }\n _switchToTextParsing(currentToken, nextTokenizerState) {\n this._insertElement(currentToken, NS.HTML);\n this.tokenizer.state = nextTokenizerState;\n this.originalInsertionMode = this.insertionMode;\n this.insertionMode = InsertionMode.TEXT;\n }\n switchToPlaintextParsing() {\n this.insertionMode = InsertionMode.TEXT;\n this.originalInsertionMode = InsertionMode.IN_BODY;\n this.tokenizer.state = TokenizerMode.PLAINTEXT;\n }\n //Fragment parsing\n _getAdjustedCurrentElement() {\n return this.openElements.stackTop === 0 && this.fragmentContext\n ? this.fragmentContext\n : this.openElements.current;\n }\n _findFormInFragmentContext() {\n let node = this.fragmentContext;\n while (node) {\n if (this.treeAdapter.getTagName(node) === TN.FORM) {\n this.formElement = node;\n break;\n }\n node = this.treeAdapter.getParentNode(node);\n }\n }\n _initTokenizerForFragmentParsing() {\n if (!this.fragmentContext || this.treeAdapter.getNamespaceURI(this.fragmentContext) !== NS.HTML) {\n return;\n }\n switch (this.fragmentContextID) {\n case $.TITLE:\n case $.TEXTAREA: {\n this.tokenizer.state = TokenizerMode.RCDATA;\n break;\n }\n case $.STYLE:\n case $.XMP:\n case $.IFRAME:\n case $.NOEMBED:\n case $.NOFRAMES:\n case $.NOSCRIPT: {\n this.tokenizer.state = TokenizerMode.RAWTEXT;\n break;\n }\n case $.SCRIPT: {\n this.tokenizer.state = TokenizerMode.SCRIPT_DATA;\n break;\n }\n case $.PLAINTEXT: {\n this.tokenizer.state = TokenizerMode.PLAINTEXT;\n break;\n }\n default:\n // Do nothing\n }\n }\n //Tree mutation\n _setDocumentType(token) {\n const name = token.name || '';\n const publicId = token.publicId || '';\n const systemId = token.systemId || '';\n this.treeAdapter.setDocumentType(this.document, name, publicId, systemId);\n if (token.location) {\n const documentChildren = this.treeAdapter.getChildNodes(this.document);\n const docTypeNode = documentChildren.find((node) => this.treeAdapter.isDocumentTypeNode(node));\n if (docTypeNode) {\n this.treeAdapter.setNodeSourceCodeLocation(docTypeNode, token.location);\n }\n }\n }\n _attachElementToTree(element, location) {\n if (this.options.sourceCodeLocationInfo) {\n const loc = location && {\n ...location,\n startTag: location,\n };\n this.treeAdapter.setNodeSourceCodeLocation(element, loc);\n }\n if (this._shouldFosterParentOnInsertion()) {\n this._fosterParentElement(element);\n }\n else {\n const parent = this.openElements.currentTmplContentOrNode;\n this.treeAdapter.appendChild(parent, element);\n }\n }\n _appendElement(token, namespaceURI) {\n const element = this.treeAdapter.createElement(token.tagName, namespaceURI, token.attrs);\n this._attachElementToTree(element, token.location);\n }\n _insertElement(token, namespaceURI) {\n const element = this.treeAdapter.createElement(token.tagName, namespaceURI, token.attrs);\n this._attachElementToTree(element, token.location);\n this.openElements.push(element, token.tagID);\n }\n _insertFakeElement(tagName, tagID) {\n const element = this.treeAdapter.createElement(tagName, NS.HTML, []);\n this._attachElementToTree(element, null);\n this.openElements.push(element, tagID);\n }\n _insertTemplate(token) {\n const tmpl = this.treeAdapter.createElement(token.tagName, NS.HTML, token.attrs);\n const content = this.treeAdapter.createDocumentFragment();\n this.treeAdapter.setTemplateContent(tmpl, content);\n this._attachElementToTree(tmpl, token.location);\n this.openElements.push(tmpl, token.tagID);\n if (this.options.sourceCodeLocationInfo)\n this.treeAdapter.setNodeSourceCodeLocation(content, null);\n }\n _insertFakeRootElement() {\n const element = this.treeAdapter.createElement(TN.HTML, NS.HTML, []);\n if (this.options.sourceCodeLocationInfo)\n this.treeAdapter.setNodeSourceCodeLocation(element, null);\n this.treeAdapter.appendChild(this.openElements.current, element);\n this.openElements.push(element, $.HTML);\n }\n _appendCommentNode(token, parent) {\n const commentNode = this.treeAdapter.createCommentNode(token.data);\n this.treeAdapter.appendChild(parent, commentNode);\n if (this.options.sourceCodeLocationInfo) {\n this.treeAdapter.setNodeSourceCodeLocation(commentNode, token.location);\n }\n }\n _insertCharacters(token) {\n let parent;\n let beforeElement;\n if (this._shouldFosterParentOnInsertion()) {\n ({ parent, beforeElement } = this._findFosterParentingLocation());\n if (beforeElement) {\n this.treeAdapter.insertTextBefore(parent, token.chars, beforeElement);\n }\n else {\n this.treeAdapter.insertText(parent, token.chars);\n }\n }\n else {\n parent = this.openElements.currentTmplContentOrNode;\n this.treeAdapter.insertText(parent, token.chars);\n }\n if (!token.location)\n return;\n const siblings = this.treeAdapter.getChildNodes(parent);\n const textNodeIdx = beforeElement ? siblings.lastIndexOf(beforeElement) : siblings.length;\n const textNode = siblings[textNodeIdx - 1];\n //NOTE: if we have a location assigned by another token, then just update the end position\n const tnLoc = this.treeAdapter.getNodeSourceCodeLocation(textNode);\n if (tnLoc) {\n const { endLine, endCol, endOffset } = token.location;\n this.treeAdapter.updateNodeSourceCodeLocation(textNode, { endLine, endCol, endOffset });\n }\n else if (this.options.sourceCodeLocationInfo) {\n this.treeAdapter.setNodeSourceCodeLocation(textNode, token.location);\n }\n }\n _adoptNodes(donor, recipient) {\n for (let child = this.treeAdapter.getFirstChild(donor); child; child = this.treeAdapter.getFirstChild(donor)) {\n this.treeAdapter.detachNode(child);\n this.treeAdapter.appendChild(recipient, child);\n }\n }\n _setEndLocation(element, closingToken) {\n if (this.treeAdapter.getNodeSourceCodeLocation(element) && closingToken.location) {\n const ctLoc = closingToken.location;\n const tn = this.treeAdapter.getTagName(element);\n const endLoc = \n // NOTE: For cases like <p> <p> </p> - First 'p' closes without a closing\n // tag and for cases like <td> <p> </td> - 'p' closes without a closing tag.\n closingToken.type === TokenType.END_TAG && tn === closingToken.tagName\n ? {\n endTag: { ...ctLoc },\n endLine: ctLoc.endLine,\n endCol: ctLoc.endCol,\n endOffset: ctLoc.endOffset,\n }\n : {\n endLine: ctLoc.startLine,\n endCol: ctLoc.startCol,\n endOffset: ctLoc.startOffset,\n };\n this.treeAdapter.updateNodeSourceCodeLocation(element, endLoc);\n }\n }\n //Token processing\n shouldProcessStartTagTokenInForeignContent(token) {\n // Check that neither current === document, or ns === NS.HTML\n if (!this.currentNotInHTML)\n return false;\n let current;\n let currentTagId;\n if (this.openElements.stackTop === 0 && this.fragmentContext) {\n current = this.fragmentContext;\n currentTagId = this.fragmentContextID;\n }\n else {\n ({ current, currentTagId } = this.openElements);\n }\n if (token.tagID === $.SVG &&\n this.treeAdapter.getTagName(current) === TN.ANNOTATION_XML &&\n this.treeAdapter.getNamespaceURI(current) === NS.MATHML) {\n return false;\n }\n return (\n // Check that `current` is not an integration point for HTML or MathML elements.\n this.tokenizer.inForeignNode ||\n // If it _is_ an integration point, then we might have to check that it is not an HTML\n // integration point.\n ((token.tagID === $.MGLYPH || token.tagID === $.MALIGNMARK) &&\n !this._isIntegrationPoint(currentTagId, current, NS.HTML)));\n }\n _processToken(token) {\n switch (token.type) {\n case TokenType.CHARACTER: {\n this.onCharacter(token);\n break;\n }\n case TokenType.NULL_CHARACTER: {\n this.onNullCharacter(token);\n break;\n }\n case TokenType.COMMENT: {\n this.onComment(token);\n break;\n }\n case TokenType.DOCTYPE: {\n this.onDoctype(token);\n break;\n }\n case TokenType.START_TAG: {\n this._processStartTag(token);\n break;\n }\n case TokenType.END_TAG: {\n this.onEndTag(token);\n break;\n }\n case TokenType.EOF: {\n this.onEof(token);\n break;\n }\n case TokenType.WHITESPACE_CHARACTER: {\n this.onWhitespaceCharacter(token);\n break;\n }\n }\n }\n //Integration points\n _isIntegrationPoint(tid, element, foreignNS) {\n const ns = this.treeAdapter.getNamespaceURI(element);\n const attrs = this.treeAdapter.getAttrList(element);\n return foreignContent.isIntegrationPoint(tid, ns, attrs, foreignNS);\n }\n //Active formatting elements reconstruction\n _reconstructActiveFormattingElements() {\n const listLength = this.activeFormattingElements.entries.length;\n if (listLength) {\n const endIndex = this.activeFormattingElements.entries.findIndex((entry) => entry.type === EntryType.Marker || this.openElements.contains(entry.element));\n const unopenIdx = endIndex < 0 ? listLength - 1 : endIndex - 1;\n for (let i = unopenIdx; i >= 0; i--) {\n const entry = this.activeFormattingElements.entries[i];\n this._insertElement(entry.token, this.treeAdapter.getNamespaceURI(entry.element));\n entry.element = this.openElements.current;\n }\n }\n }\n //Close elements\n _closeTableCell() {\n this.openElements.generateImpliedEndTags();\n this.openElements.popUntilTableCellPopped();\n this.activeFormattingElements.clearToLastMarker();\n this.insertionMode = InsertionMode.IN_ROW;\n }\n _closePElement() {\n this.openElements.generateImpliedEndTagsWithExclusion($.P);\n this.openElements.popUntilTagNamePopped($.P);\n }\n //Insertion modes\n _resetInsertionMode() {\n for (let i = this.openElements.stackTop; i >= 0; i--) {\n //Insertion mode reset map\n switch (i === 0 && this.fragmentContext ? this.fragmentContextID : this.openElements.tagIDs[i]) {\n case $.TR: {\n this.insertionMode = InsertionMode.IN_ROW;\n return;\n }\n case $.TBODY:\n case $.THEAD:\n case $.TFOOT: {\n this.insertionMode = InsertionMode.IN_TABLE_BODY;\n return;\n }\n case $.CAPTION: {\n this.insertionMode = InsertionMode.IN_CAPTION;\n return;\n }\n case $.COLGROUP: {\n this.insertionMode = InsertionMode.IN_COLUMN_GROUP;\n return;\n }\n case $.TABLE: {\n this.insertionMode = InsertionMode.IN_TABLE;\n return;\n }\n case $.BODY: {\n this.insertionMode = InsertionMode.IN_BODY;\n return;\n }\n case $.FRAMESET: {\n this.insertionMode = InsertionMode.IN_FRAMESET;\n return;\n }\n case $.SELECT: {\n this._resetInsertionModeForSelect(i);\n return;\n }\n case $.TEMPLATE: {\n this.insertionMode = this.tmplInsertionModeStack[0];\n return;\n }\n case $.HTML: {\n this.insertionMode = this.headElement ? InsertionMode.AFTER_HEAD : InsertionMode.BEFORE_HEAD;\n return;\n }\n case $.TD:\n case $.TH: {\n if (i > 0) {\n this.insertionMode = InsertionMode.IN_CELL;\n return;\n }\n break;\n }\n case $.HEAD: {\n if (i > 0) {\n this.insertionMode = InsertionMode.IN_HEAD;\n return;\n }\n break;\n }\n }\n }\n this.insertionMode = InsertionMode.IN_BODY;\n }\n _resetInsertionModeForSelect(selectIdx) {\n if (selectIdx > 0) {\n for (let i = selectIdx - 1; i > 0; i--) {\n const tn = this.openElements.tagIDs[i];\n if (tn === $.TEMPLATE) {\n break;\n }\n else if (tn === $.TABLE) {\n this.insertionMode = InsertionMode.IN_SELECT_IN_TABLE;\n return;\n }\n }\n }\n this.insertionMode = InsertionMode.IN_SELECT;\n }\n //Foster parenting\n _isElementCausesFosterParenting(tn) {\n return TABLE_STRUCTURE_TAGS.has(tn);\n }\n _shouldFosterParentOnInsertion() {\n return this.fosterParentingEnabled && this._isElementCausesFosterParenting(this.openElements.currentTagId);\n }\n _findFosterParentingLocation() {\n for (let i = this.openElements.stackTop; i >= 0; i--) {\n const openElement = this.openElements.items[i];\n switch (this.openElements.tagIDs[i]) {\n case $.TEMPLATE: {\n if (this.treeAdapter.getNamespaceURI(openElement) === NS.HTML) {\n return { parent: this.treeAdapter.getTemplateContent(openElement), beforeElement: null };\n }\n break;\n }\n case $.TABLE: {\n const parent = this.treeAdapter.getParentNode(openElement);\n if (parent) {\n return { parent, beforeElement: openElement };\n }\n return { parent: this.openElements.items[i - 1], beforeElement: null };\n }\n default:\n // Do nothing\n }\n }\n return { parent: this.openElements.items[0], beforeElement: null };\n }\n _fosterParentElement(element) {\n const location = this._findFosterParentingLocation();\n if (location.beforeElement) {\n this.treeAdapter.insertBefore(location.parent, element, location.beforeElement);\n }\n else {\n this.treeAdapter.appendChild(location.parent, element);\n }\n }\n //Special elements\n _isSpecialElement(element, id) {\n const ns = this.treeAdapter.getNamespaceURI(element);\n return SPECIAL_ELEMENTS[ns].has(id);\n }\n onCharacter(token) {\n this.skipNextNewLine = false;\n if (this.tokenizer.inForeignNode) {\n characterInForeignContent(this, token);\n return;\n }\n switch (this.insertionMode) {\n case InsertionMode.INITIAL: {\n tokenInInitialMode(this, token);\n break;\n }\n case InsertionMode.BEFORE_HTML: {\n tokenBeforeHtml(this, token);\n break;\n }\n case InsertionMode.BEFORE_HEAD: {\n tokenBeforeHead(this, token);\n break;\n }\n case InsertionMode.IN_HEAD: {\n tokenInHead(this, token);\n break;\n }\n case InsertionMode.IN_HEAD_NO_SCRIPT: {\n tokenInHeadNoScript(this, token);\n break;\n }\n case InsertionMode.AFTER_HEAD: {\n tokenAfterHead(this, token);\n break;\n }\n case InsertionMode.IN_BODY:\n case InsertionMode.IN_CAPTION:\n case InsertionMode.IN_CELL:\n case InsertionMode.IN_TEMPLATE: {\n characterInBody(this, token);\n break;\n }\n case InsertionMode.TEXT:\n case InsertionMode.IN_SELECT:\n case InsertionMode.IN_SELECT_IN_TABLE: {\n this._insertCharacters(token);\n break;\n }\n case InsertionMode.IN_TABLE:\n case InsertionMode.IN_TABLE_BODY:\n case InsertionMode.IN_ROW: {\n characterInTable(this, token);\n break;\n }\n case InsertionMode.IN_TABLE_TEXT: {\n characterInTableText(this, token);\n break;\n }\n case InsertionMode.IN_COLUMN_GROUP: {\n tokenInColumnGroup(this, token);\n break;\n }\n case InsertionMode.AFTER_BODY: {\n tokenAfterBody(this, token);\n break;\n }\n case InsertionMode.AFTER_AFTER_BODY: {\n tokenAfterAfterBody(this, token);\n break;\n }\n default:\n // Do nothing\n }\n }\n onNullCharacter(token) {\n this.skipNextNewLine = false;\n if (this.tokenizer.inForeignNode) {\n nullCharacterInForeignContent(this, token);\n return;\n }\n switch (this.insertionMode) {\n case InsertionMode.INITIAL: {\n tokenInInitialMode(this, token);\n break;\n }\n case InsertionMode.BEFORE_HTML: {\n tokenBeforeHtml(this, token);\n break;\n }\n case InsertionMode.BEFORE_HEAD: {\n tokenBeforeHead(this, token);\n break;\n }\n case InsertionMode.IN_HEAD: {\n tokenInHead(this, token);\n break;\n }\n case InsertionMode.IN_HEAD_NO_SCRIPT: {\n tokenInHeadNoScript(this, token);\n break;\n }\n case InsertionMode.AFTER_HEAD: {\n tokenAfterHead(this, token);\n break;\n }\n case InsertionMode.TEXT: {\n this._insertCharacters(token);\n break;\n }\n case InsertionMode.IN_TABLE:\n case InsertionMode.IN_TABLE_BODY:\n case InsertionMode.IN_ROW: {\n characterInTable(this, token);\n break;\n }\n case InsertionMode.IN_COLUMN_GROUP: {\n tokenInColumnGroup(this, token);\n break;\n }\n case InsertionMode.AFTER_BODY: {\n tokenAfterBody(this, token);\n break;\n }\n case InsertionMode.AFTER_AFTER_BODY: {\n tokenAfterAfterBody(this, token);\n break;\n }\n default:\n // Do nothing\n }\n }\n onComment(token) {\n this.skipNextNewLine = false;\n if (this.currentNotInHTML) {\n appendComment(this, token);\n return;\n }\n switch (this.insertionMode) {\n case InsertionMode.INITIAL:\n case InsertionMode.BEFORE_HTML:\n case InsertionMode.BEFORE_HEAD:\n case InsertionMode.IN_HEAD:\n case InsertionMode.IN_HEAD_NO_SCRIPT:\n case InsertionMode.AFTER_HEAD:\n case InsertionMode.IN_BODY:\n case InsertionMode.IN_TABLE:\n case InsertionMode.IN_CAPTION:\n case InsertionMode.IN_COLUMN_GROUP:\n case InsertionMode.IN_TABLE_BODY:\n case InsertionMode.IN_ROW:\n case InsertionMode.IN_CELL:\n case InsertionMode.IN_SELECT:\n case InsertionMode.IN_SELECT_IN_TABLE:\n case InsertionMode.IN_TEMPLATE:\n case InsertionMode.IN_FRAMESET:\n case InsertionMode.AFTER_FRAMESET: {\n appendComment(this, token);\n break;\n }\n case InsertionMode.IN_TABLE_TEXT: {\n tokenInTableText(this, token);\n break;\n }\n case InsertionMode.AFTER_BODY: {\n appendCommentToRootHtmlElement(this, token);\n break;\n }\n case InsertionMode.AFTER_AFTER_BODY:\n case InsertionMode.AFTER_AFTER_FRAMESET: {\n appendCommentToDocument(this, token);\n break;\n }\n default:\n // Do nothing\n }\n }\n onDoctype(token) {\n this.skipNextNewLine = false;\n switch (this.insertionMode) {\n case InsertionMode.INITIAL: {\n doctypeInInitialMode(this, token);\n break;\n }\n case InsertionMode.BEFORE_HEAD:\n case InsertionMode.IN_HEAD:\n case InsertionMode.IN_HEAD_NO_SCRIPT:\n case InsertionMode.AFTER_HEAD: {\n this._err(token, ERR.misplacedDoctype);\n break;\n }\n case InsertionMode.IN_TABLE_TEXT: {\n tokenInTableText(this, token);\n break;\n }\n default:\n // Do nothing\n }\n }\n onStartTag(token) {\n this.skipNextNewLine = false;\n this.currentToken = token;\n this._processStartTag(token);\n if (token.selfClosing && !token.ackSelfClosing) {\n this._err(token, ERR.nonVoidHtmlElementStartTagWithTrailingSolidus);\n }\n }\n /**\n * Processes a given start tag.\n *\n * `onStartTag` checks if a self-closing tag was recognized. When a token\n * is moved inbetween multiple insertion modes, this check for self-closing\n * could lead to false positives. To avoid this, `_processStartTag` is used\n * for nested calls.\n *\n * @param token The token to process.\n */\n _processStartTag(token) {\n if (this.shouldProcessStartTagTokenInForeignContent(token)) {\n startTagInForeignContent(this, token);\n }\n else {\n this._startTagOutsideForeignContent(token);\n }\n }\n _startTagOutsideForeignContent(token) {\n switch (this.insertionMode) {\n case InsertionMode.INITIAL: {\n tokenInInitialMode(this, token);\n break;\n }\n case InsertionMode.BEFORE_HTML: {\n startTagBeforeHtml(this, token);\n break;\n }\n case InsertionMode.BEFORE_HEAD: {\n startTagBeforeHead(this, token);\n break;\n }\n case InsertionMode.IN_HEAD: {\n startTagInHead(this, token);\n break;\n }\n case InsertionMode.IN_HEAD_NO_SCRIPT: {\n startTagInHeadNoScript(this, token);\n break;\n }\n case InsertionMode.AFTER_HEAD: {\n startTagAfterHead(this, token);\n break;\n }\n case InsertionMode.IN_BODY: {\n startTagInBody(this, token);\n break;\n }\n case InsertionMode.IN_TABLE: {\n startTagInTable(this, token);\n break;\n }\n case InsertionMode.IN_TABLE_TEXT: {\n tokenInTableText(this, token);\n break;\n }\n case InsertionMode.IN_CAPTION: {\n startTagInCaption(this, token);\n break;\n }\n case InsertionMode.IN_COLUMN_GROUP: {\n startTagInColumnGroup(this, token);\n break;\n }\n case InsertionMode.IN_TABLE_BODY: {\n startTagInTableBody(this, token);\n break;\n }\n case InsertionMode.IN_ROW: {\n startTagInRow(this, token);\n break;\n }\n case InsertionMode.IN_CELL: {\n startTagInCell(this, token);\n break;\n }\n case InsertionMode.IN_SELECT: {\n startTagInSelect(this, token);\n break;\n }\n case InsertionMode.IN_SELECT_IN_TABLE: {\n startTagInSelectInTable(this, token);\n break;\n }\n case InsertionMode.IN_TEMPLATE: {\n startTagInTemplate(this, token);\n break;\n }\n case InsertionMode.AFTER_BODY: {\n startTagAfterBody(this, token);\n break;\n }\n case InsertionMode.IN_FRAMESET: {\n startTagInFrameset(this, token);\n break;\n }\n case InsertionMode.AFTER_FRAMESET: {\n startTagAfterFrameset(this, token);\n break;\n }\n case InsertionMode.AFTER_AFTER_BODY: {\n startTagAfterAfterBody(this, token);\n break;\n }\n case InsertionMode.AFTER_AFTER_FRAMESET: {\n startTagAfterAfterFrameset(this, token);\n break;\n }\n default:\n // Do nothing\n }\n }\n onEndTag(token) {\n this.skipNextNewLine = false;\n this.currentToken = token;\n if (this.currentNotInHTML) {\n endTagInForeignContent(this, token);\n }\n else {\n this._endTagOutsideForeignContent(token);\n }\n }\n _endTagOutsideForeignContent(token) {\n switch (this.insertionMode) {\n case InsertionMode.INITIAL: {\n tokenInInitialMode(this, token);\n break;\n }\n case InsertionMode.BEFORE_HTML: {\n endTagBeforeHtml(this, token);\n break;\n }\n case InsertionMode.BEFORE_HEAD: {\n endTagBeforeHead(this, token);\n break;\n }\n case InsertionMode.IN_HEAD: {\n endTagInHead(this, token);\n break;\n }\n case InsertionMode.IN_HEAD_NO_SCRIPT: {\n endTagInHeadNoScript(this, token);\n break;\n }\n case InsertionMode.AFTER_HEAD: {\n endTagAfterHead(this, token);\n break;\n }\n case InsertionMode.IN_BODY: {\n endTagInBody(this, token);\n break;\n }\n case InsertionMode.TEXT: {\n endTagInText(this, token);\n break;\n }\n case InsertionMode.IN_TABLE: {\n endTagInTable(this, token);\n break;\n }\n case InsertionMode.IN_TABLE_TEXT: {\n tokenInTableText(this, token);\n break;\n }\n case InsertionMode.IN_CAPTION: {\n endTagInCaption(this, token);\n break;\n }\n case InsertionMode.IN_COLUMN_GROUP: {\n endTagInColumnGroup(this, token);\n break;\n }\n case InsertionMode.IN_TABLE_BODY: {\n endTagInTableBody(this, token);\n break;\n }\n case InsertionMode.IN_ROW: {\n endTagInRow(this, token);\n break;\n }\n case InsertionMode.IN_CELL: {\n endTagInCell(this, token);\n break;\n }\n case InsertionMode.IN_SELECT: {\n endTagInSelect(this, token);\n break;\n }\n case InsertionMode.IN_SELECT_IN_TABLE: {\n endTagInSelectInTable(this, token);\n break;\n }\n case InsertionMode.IN_TEMPLATE: {\n endTagInTemplate(this, token);\n break;\n }\n case InsertionMode.AFTER_BODY: {\n endTagAfterBody(this, token);\n break;\n }\n case InsertionMode.IN_FRAMESET: {\n endTagInFrameset(this, token);\n break;\n }\n case InsertionMode.AFTER_FRAMESET: {\n endTagAfterFrameset(this, token);\n break;\n }\n case InsertionMode.AFTER_AFTER_BODY: {\n tokenAfterAfterBody(this, token);\n break;\n }\n default:\n // Do nothing\n }\n }\n onEof(token) {\n switch (this.insertionMode) {\n case InsertionMode.INITIAL: {\n tokenInInitialMode(this, token);\n break;\n }\n case InsertionMode.BEFORE_HTML: {\n tokenBeforeHtml(this, token);\n break;\n }\n case InsertionMode.BEFORE_HEAD: {\n tokenBeforeHead(this, token);\n break;\n }\n case InsertionMode.IN_HEAD: {\n tokenInHead(this, token);\n break;\n }\n case InsertionMode.IN_HEAD_NO_SCRIPT: {\n tokenInHeadNoScript(this, token);\n break;\n }\n case InsertionMode.AFTER_HEAD: {\n tokenAfterHead(this, token);\n break;\n }\n case InsertionMode.IN_BODY:\n case InsertionMode.IN_TABLE:\n case InsertionMode.IN_CAPTION:\n case InsertionMode.IN_COLUMN_GROUP:\n case InsertionMode.IN_TABLE_BODY:\n case InsertionMode.IN_ROW:\n case InsertionMode.IN_CELL:\n case InsertionMode.IN_SELECT:\n case InsertionMode.IN_SELECT_IN_TABLE: {\n eofInBody(this, token);\n break;\n }\n case InsertionMode.TEXT: {\n eofInText(this, token);\n break;\n }\n case InsertionMode.IN_TABLE_TEXT: {\n tokenInTableText(this, token);\n break;\n }\n case InsertionMode.IN_TEMPLATE: {\n eofInTemplate(this, token);\n break;\n }\n case InsertionMode.AFTER_BODY:\n case InsertionMode.IN_FRAMESET:\n case InsertionMode.AFTER_FRAMESET:\n case InsertionMode.AFTER_AFTER_BODY:\n case InsertionMode.AFTER_AFTER_FRAMESET: {\n stopParsing(this, token);\n break;\n }\n default:\n // Do nothing\n }\n }\n onWhitespaceCharacter(token) {\n if (this.skipNextNewLine) {\n this.skipNextNewLine = false;\n if (token.chars.charCodeAt(0) === unicode.CODE_POINTS.LINE_FEED) {\n if (token.chars.length === 1) {\n return;\n }\n token.chars = token.chars.substr(1);\n }\n }\n if (this.tokenizer.inForeignNode) {\n this._insertCharacters(token);\n return;\n }\n switch (this.insertionMode) {\n case InsertionMode.IN_HEAD:\n case InsertionMode.IN_HEAD_NO_SCRIPT:\n case InsertionMode.AFTER_HEAD:\n case InsertionMode.TEXT:\n case InsertionMode.IN_COLUMN_GROUP:\n case InsertionMode.IN_SELECT:\n case InsertionMode.IN_SELECT_IN_TABLE:\n case InsertionMode.IN_FRAMESET:\n case InsertionMode.AFTER_FRAMESET: {\n this._insertCharacters(token);\n break;\n }\n case InsertionMode.IN_BODY:\n case InsertionMode.IN_CAPTION:\n case InsertionMode.IN_CELL:\n case InsertionMode.IN_TEMPLATE:\n case InsertionMode.AFTER_BODY:\n case InsertionMode.AFTER_AFTER_BODY:\n case InsertionMode.AFTER_AFTER_FRAMESET: {\n whitespaceCharacterInBody(this, token);\n break;\n }\n case InsertionMode.IN_TABLE:\n case InsertionMode.IN_TABLE_BODY:\n case InsertionMode.IN_ROW: {\n characterInTable(this, token);\n break;\n }\n case InsertionMode.IN_TABLE_TEXT: {\n whitespaceCharacterInTableText(this, token);\n break;\n }\n default:\n // Do nothing\n }\n }\n}\n//Adoption agency algorithm\n//(see: http://www.whatwg.org/specs/web-apps/current-work/multipage/tree-construction.html#adoptionAgency)\n//------------------------------------------------------------------\n//Steps 5-8 of the algorithm\nfunction aaObtainFormattingElementEntry(p, token) {\n let formattingElementEntry = p.activeFormattingElements.getElementEntryInScopeWithTagName(token.tagName);\n if (formattingElementEntry) {\n if (!p.openElements.contains(formattingElementEntry.element)) {\n p.activeFormattingElements.removeEntry(formattingElementEntry);\n formattingElementEntry = null;\n }\n else if (!p.openElements.hasInScope(token.tagID)) {\n formattingElementEntry = null;\n }\n }\n else {\n genericEndTagInBody(p, token);\n }\n return formattingElementEntry;\n}\n//Steps 9 and 10 of the algorithm\nfunction aaObtainFurthestBlock(p, formattingElementEntry) {\n let furthestBlock = null;\n let idx = p.openElements.stackTop;\n for (; idx >= 0; idx--) {\n const element = p.openElements.items[idx];\n if (element === formattingElementEntry.element) {\n break;\n }\n if (p._isSpecialElement(element, p.openElements.tagIDs[idx])) {\n furthestBlock = element;\n }\n }\n if (!furthestBlock) {\n p.openElements.shortenToLength(idx < 0 ? 0 : idx);\n p.activeFormattingElements.removeEntry(formattingElementEntry);\n }\n return furthestBlock;\n}\n//Step 13 of the algorithm\nfunction aaInnerLoop(p, furthestBlock, formattingElement) {\n let lastElement = furthestBlock;\n let nextElement = p.openElements.getCommonAncestor(furthestBlock);\n for (let i = 0, element = nextElement; element !== formattingElement; i++, element = nextElement) {\n //NOTE: store the next element for the next loop iteration (it may be deleted from the stack by step 9.5)\n nextElement = p.openElements.getCommonAncestor(element);\n const elementEntry = p.activeFormattingElements.getElementEntry(element);\n const counterOverflow = elementEntry && i >= AA_INNER_LOOP_ITER;\n const shouldRemoveFromOpenElements = !elementEntry || counterOverflow;\n if (shouldRemoveFromOpenElements) {\n if (counterOverflow) {\n p.activeFormattingElements.removeEntry(elementEntry);\n }\n p.openElements.remove(element);\n }\n else {\n element = aaRecreateElementFromEntry(p, elementEntry);\n if (lastElement === furthestBlock) {\n p.activeFormattingElements.bookmark = elementEntry;\n }\n p.treeAdapter.detachNode(lastElement);\n p.treeAdapter.appendChild(element, lastElement);\n lastElement = element;\n }\n }\n return lastElement;\n}\n//Step 13.7 of the algorithm\nfunction aaRecreateElementFromEntry(p, elementEntry) {\n const ns = p.treeAdapter.getNamespaceURI(elementEntry.element);\n const newElement = p.treeAdapter.createElement(elementEntry.token.tagName, ns, elementEntry.token.attrs);\n p.openElements.replace(elementEntry.element, newElement);\n elementEntry.element = newElement;\n return newElement;\n}\n//Step 14 of the algorithm\nfunction aaInsertLastNodeInCommonAncestor(p, commonAncestor, lastElement) {\n const tn = p.treeAdapter.getTagName(commonAncestor);\n const tid = getTagID(tn);\n if (p._isElementCausesFosterParenting(tid)) {\n p._fosterParentElement(lastElement);\n }\n else {\n const ns = p.treeAdapter.getNamespaceURI(commonAncestor);\n if (tid === $.TEMPLATE && ns === NS.HTML) {\n commonAncestor = p.treeAdapter.getTemplateContent(commonAncestor);\n }\n p.treeAdapter.appendChild(commonAncestor, lastElement);\n }\n}\n//Steps 15-19 of the algorithm\nfunction aaReplaceFormattingElement(p, furthestBlock, formattingElementEntry) {\n const ns = p.treeAdapter.getNamespaceURI(formattingElementEntry.element);\n const { token } = formattingElementEntry;\n const newElement = p.treeAdapter.createElement(token.tagName, ns, token.attrs);\n p._adoptNodes(furthestBlock, newElement);\n p.treeAdapter.appendChild(furthestBlock, newElement);\n p.activeFormattingElements.insertElementAfterBookmark(newElement, token);\n p.activeFormattingElements.removeEntry(formattingElementEntry);\n p.openElements.remove(formattingElementEntry.element);\n p.openElements.insertAfter(furthestBlock, newElement, token.tagID);\n}\n//Algorithm entry point\nfunction callAdoptionAgency(p, token) {\n for (let i = 0; i < AA_OUTER_LOOP_ITER; i++) {\n const formattingElementEntry = aaObtainFormattingElementEntry(p, token);\n if (!formattingElementEntry) {\n break;\n }\n const furthestBlock = aaObtainFurthestBlock(p, formattingElementEntry);\n if (!furthestBlock) {\n break;\n }\n p.activeFormattingElements.bookmark = formattingElementEntry;\n const lastElement = aaInnerLoop(p, furthestBlock, formattingElementEntry.element);\n const commonAncestor = p.openElements.getCommonAncestor(formattingElementEntry.element);\n p.treeAdapter.detachNode(lastElement);\n if (commonAncestor)\n aaInsertLastNodeInCommonAncestor(p, commonAncestor, lastElement);\n aaReplaceFormattingElement(p, furthestBlock, formattingElementEntry);\n }\n}\n//Generic token handlers\n//------------------------------------------------------------------\nfunction appendComment(p, token) {\n p._appendCommentNode(token, p.openElements.currentTmplContentOrNode);\n}\nfunction appendCommentToRootHtmlElement(p, token) {\n p._appendCommentNode(token, p.openElements.items[0]);\n}\nfunction appendCommentToDocument(p, token) {\n p._appendCommentNode(token, p.document);\n}\nfunction stopParsing(p, token) {\n p.stopped = true;\n // NOTE: Set end locations for elements that remain on the open element stack.\n if (token.location) {\n // NOTE: If we are not in a fragment, `html` and `body` will stay on the stack.\n // This is a problem, as we might overwrite their end position here.\n const target = p.fragmentContext ? 0 : 2;\n for (let i = p.openElements.stackTop; i >= target; i--) {\n p._setEndLocation(p.openElements.items[i], token);\n }\n // Handle `html` and `body`\n if (!p.fragmentContext && p.openElements.stackTop >= 0) {\n const htmlElement = p.openElements.items[0];\n const htmlLocation = p.treeAdapter.getNodeSourceCodeLocation(htmlElement);\n if (htmlLocation && !htmlLocation.endTag) {\n p._setEndLocation(htmlElement, token);\n if (p.openElements.stackTop >= 1) {\n const bodyElement = p.openElements.items[1];\n const bodyLocation = p.treeAdapter.getNodeSourceCodeLocation(bodyElement);\n if (bodyLocation && !bodyLocation.endTag) {\n p._setEndLocation(bodyElement, token);\n }\n }\n }\n }\n }\n}\n// The \"initial\" insertion mode\n//------------------------------------------------------------------\nfunction doctypeInInitialMode(p, token) {\n p._setDocumentType(token);\n const mode = token.forceQuirks ? DOCUMENT_MODE.QUIRKS : doctype.getDocumentMode(token);\n if (!doctype.isConforming(token)) {\n p._err(token, ERR.nonConformingDoctype);\n }\n p.treeAdapter.setDocumentMode(p.document, mode);\n p.insertionMode = InsertionMode.BEFORE_HTML;\n}\nfunction tokenInInitialMode(p, token) {\n p._err(token, ERR.missingDoctype, true);\n p.treeAdapter.setDocumentMode(p.document, DOCUMENT_MODE.QUIRKS);\n p.insertionMode = InsertionMode.BEFORE_HTML;\n p._processToken(token);\n}\n// The \"before html\" insertion mode\n//------------------------------------------------------------------\nfunction startTagBeforeHtml(p, token) {\n if (token.tagID === $.HTML) {\n p._insertElement(token, NS.HTML);\n p.insertionMode = InsertionMode.BEFORE_HEAD;\n }\n else {\n tokenBeforeHtml(p, token);\n }\n}\nfunction endTagBeforeHtml(p, token) {\n const tn = token.tagID;\n if (tn === $.HTML || tn === $.HEAD || tn === $.BODY || tn === $.BR) {\n tokenBeforeHtml(p, token);\n }\n}\nfunction tokenBeforeHtml(p, token) {\n p._insertFakeRootElement();\n p.insertionMode = InsertionMode.BEFORE_HEAD;\n p._processToken(token);\n}\n// The \"before head\" insertion mode\n//------------------------------------------------------------------\nfunction startTagBeforeHead(p, token) {\n switch (token.tagID) {\n case $.HTML: {\n startTagInBody(p, token);\n break;\n }\n case $.HEAD: {\n p._insertElement(token, NS.HTML);\n p.headElement = p.openElements.current;\n p.insertionMode = InsertionMode.IN_HEAD;\n break;\n }\n default: {\n tokenBeforeHead(p, token);\n }\n }\n}\nfunction endTagBeforeHead(p, token) {\n const tn = token.tagID;\n if (tn === $.HEAD || tn === $.BODY || tn === $.HTML || tn === $.BR) {\n tokenBeforeHead(p, token);\n }\n else {\n p._err(token, ERR.endTagWithoutMatchingOpenElement);\n }\n}\nfunction tokenBeforeHead(p, token) {\n p._insertFakeElement(TN.HEAD, $.HEAD);\n p.headElement = p.openElements.current;\n p.insertionMode = InsertionMode.IN_HEAD;\n p._processToken(token);\n}\n// The \"in head\" insertion mode\n//------------------------------------------------------------------\nfunction startTagInHead(p, token) {\n switch (token.tagID) {\n case $.HTML: {\n startTagInBody(p, token);\n break;\n }\n case $.BASE:\n case $.BASEFONT:\n case $.BGSOUND:\n case $.LINK:\n case $.META: {\n p._appendElement(token, NS.HTML);\n token.ackSelfClosing = true;\n break;\n }\n case $.TITLE: {\n p._switchToTextParsing(token, TokenizerMode.RCDATA);\n break;\n }\n case $.NOSCRIPT: {\n if (p.options.scriptingEnabled) {\n p._switchToTextParsing(token, TokenizerMode.RAWTEXT);\n }\n else {\n p._insertElement(token, NS.HTML);\n p.insertionMode = InsertionMode.IN_HEAD_NO_SCRIPT;\n }\n break;\n }\n case $.NOFRAMES:\n case $.STYLE: {\n p._switchToTextParsing(token, TokenizerMode.RAWTEXT);\n break;\n }\n case $.SCRIPT: {\n p._switchToTextParsing(token, TokenizerMode.SCRIPT_DATA);\n break;\n }\n case $.TEMPLATE: {\n p._insertTemplate(token);\n p.activeFormattingElements.insertMarker();\n p.framesetOk = false;\n p.insertionMode = InsertionMode.IN_TEMPLATE;\n p.tmplInsertionModeStack.unshift(InsertionMode.IN_TEMPLATE);\n break;\n }\n case $.HEAD: {\n p._err(token, ERR.misplacedStartTagForHeadElement);\n break;\n }\n default: {\n tokenInHead(p, token);\n }\n }\n}\nfunction endTagInHead(p, token) {\n switch (token.tagID) {\n case $.HEAD: {\n p.openElements.pop();\n p.insertionMode = InsertionMode.AFTER_HEAD;\n break;\n }\n case $.BODY:\n case $.BR:\n case $.HTML: {\n tokenInHead(p, token);\n break;\n }\n case $.TEMPLATE: {\n templateEndTagInHead(p, token);\n break;\n }\n default: {\n p._err(token, ERR.endTagWithoutMatchingOpenElement);\n }\n }\n}\nfunction templateEndTagInHead(p, token) {\n if (p.openElements.tmplCount > 0) {\n p.openElements.generateImpliedEndTagsThoroughly();\n if (p.openElements.currentTagId !== $.TEMPLATE) {\n p._err(token, ERR.closingOfElementWithOpenChildElements);\n }\n p.openElements.popUntilTagNamePopped($.TEMPLATE);\n p.activeFormattingElements.clearToLastMarker();\n p.tmplInsertionModeStack.shift();\n p._resetInsertionMode();\n }\n else {\n p._err(token, ERR.endTagWithoutMatchingOpenElement);\n }\n}\nfunction tokenInHead(p, token) {\n p.openElements.pop();\n p.insertionMode = InsertionMode.AFTER_HEAD;\n p._processToken(token);\n}\n// The \"in head no script\" insertion mode\n//------------------------------------------------------------------\nfunction startTagInHeadNoScript(p, token) {\n switch (token.tagID) {\n case $.HTML: {\n startTagInBody(p, token);\n break;\n }\n case $.BASEFONT:\n case $.BGSOUND:\n case $.HEAD:\n case $.LINK:\n case $.META:\n case $.NOFRAMES:\n case $.STYLE: {\n startTagInHead(p, token);\n break;\n }\n case $.NOSCRIPT: {\n p._err(token, ERR.nestedNoscriptInHead);\n break;\n }\n default: {\n tokenInHeadNoScript(p, token);\n }\n }\n}\nfunction endTagInHeadNoScript(p, token) {\n switch (token.tagID) {\n case $.NOSCRIPT: {\n p.openElements.pop();\n p.insertionMode = InsertionMode.IN_HEAD;\n break;\n }\n case $.BR: {\n tokenInHeadNoScript(p, token);\n break;\n }\n default: {\n p._err(token, ERR.endTagWithoutMatchingOpenElement);\n }\n }\n}\nfunction tokenInHeadNoScript(p, token) {\n const errCode = token.type === TokenType.EOF ? ERR.openElementsLeftAfterEof : ERR.disallowedContentInNoscriptInHead;\n p._err(token, errCode);\n p.openElements.pop();\n p.insertionMode = InsertionMode.IN_HEAD;\n p._processToken(token);\n}\n// The \"after head\" insertion mode\n//------------------------------------------------------------------\nfunction startTagAfterHead(p, token) {\n switch (token.tagID) {\n case $.HTML: {\n startTagInBody(p, token);\n break;\n }\n case $.BODY: {\n p._insertElement(token, NS.HTML);\n p.framesetOk = false;\n p.insertionMode = InsertionMode.IN_BODY;\n break;\n }\n case $.FRAMESET: {\n p._insertElement(token, NS.HTML);\n p.insertionMode = InsertionMode.IN_FRAMESET;\n break;\n }\n case $.BASE:\n case $.BASEFONT:\n case $.BGSOUND:\n case $.LINK:\n case $.META:\n case $.NOFRAMES:\n case $.SCRIPT:\n case $.STYLE:\n case $.TEMPLATE:\n case $.TITLE: {\n p._err(token, ERR.abandonedHeadElementChild);\n p.openElements.push(p.headElement, $.HEAD);\n startTagInHead(p, token);\n p.openElements.remove(p.headElement);\n break;\n }\n case $.HEAD: {\n p._err(token, ERR.misplacedStartTagForHeadElement);\n break;\n }\n default: {\n tokenAfterHead(p, token);\n }\n }\n}\nfunction endTagAfterHead(p, token) {\n switch (token.tagID) {\n case $.BODY:\n case $.HTML:\n case $.BR: {\n tokenAfterHead(p, token);\n break;\n }\n case $.TEMPLATE: {\n templateEndTagInHead(p, token);\n break;\n }\n default: {\n p._err(token, ERR.endTagWithoutMatchingOpenElement);\n }\n }\n}\nfunction tokenAfterHead(p, token) {\n p._insertFakeElement(TN.BODY, $.BODY);\n p.insertionMode = InsertionMode.IN_BODY;\n modeInBody(p, token);\n}\n// The \"in body\" insertion mode\n//------------------------------------------------------------------\nfunction modeInBody(p, token) {\n switch (token.type) {\n case TokenType.CHARACTER: {\n characterInBody(p, token);\n break;\n }\n case TokenType.WHITESPACE_CHARACTER: {\n whitespaceCharacterInBody(p, token);\n break;\n }\n case TokenType.COMMENT: {\n appendComment(p, token);\n break;\n }\n case TokenType.START_TAG: {\n startTagInBody(p, token);\n break;\n }\n case TokenType.END_TAG: {\n endTagInBody(p, token);\n break;\n }\n case TokenType.EOF: {\n eofInBody(p, token);\n break;\n }\n default:\n // Do nothing\n }\n}\nfunction whitespaceCharacterInBody(p, token) {\n p._reconstructActiveFormattingElements();\n p._insertCharacters(token);\n}\nfunction characterInBody(p, token) {\n p._reconstructActiveFormattingElements();\n p._insertCharacters(token);\n p.framesetOk = false;\n}\nfunction htmlStartTagInBody(p, token) {\n if (p.openElements.tmplCount === 0) {\n p.treeAdapter.adoptAttributes(p.openElements.items[0], token.attrs);\n }\n}\nfunction bodyStartTagInBody(p, token) {\n const bodyElement = p.openElements.tryPeekProperlyNestedBodyElement();\n if (bodyElement && p.openElements.tmplCount === 0) {\n p.framesetOk = false;\n p.treeAdapter.adoptAttributes(bodyElement, token.attrs);\n }\n}\nfunction framesetStartTagInBody(p, token) {\n const bodyElement = p.openElements.tryPeekProperlyNestedBodyElement();\n if (p.framesetOk && bodyElement) {\n p.treeAdapter.detachNode(bodyElement);\n p.openElements.popAllUpToHtmlElement();\n p._insertElement(token, NS.HTML);\n p.insertionMode = InsertionMode.IN_FRAMESET;\n }\n}\nfunction addressStartTagInBody(p, token) {\n if (p.openElements.hasInButtonScope($.P)) {\n p._closePElement();\n }\n p._insertElement(token, NS.HTML);\n}\nfunction numberedHeaderStartTagInBody(p, token) {\n if (p.openElements.hasInButtonScope($.P)) {\n p._closePElement();\n }\n if (isNumberedHeader(p.openElements.currentTagId)) {\n p.openElements.pop();\n }\n p._insertElement(token, NS.HTML);\n}\nfunction preStartTagInBody(p, token) {\n if (p.openElements.hasInButtonScope($.P)) {\n p._closePElement();\n }\n p._insertElement(token, NS.HTML);\n //NOTE: If the next token is a U+000A LINE FEED (LF) character token, then ignore that token and move\n //on to the next one. (Newlines at the start of pre blocks are ignored as an authoring convenience.)\n p.skipNextNewLine = true;\n p.framesetOk = false;\n}\nfunction formStartTagInBody(p, token) {\n const inTemplate = p.openElements.tmplCount > 0;\n if (!p.formElement || inTemplate) {\n if (p.openElements.hasInButtonScope($.P)) {\n p._closePElement();\n }\n p._insertElement(token, NS.HTML);\n if (!inTemplate) {\n p.formElement = p.openElements.current;\n }\n }\n}\nfunction listItemStartTagInBody(p, token) {\n p.framesetOk = false;\n const tn = token.tagID;\n for (let i = p.openElements.stackTop; i >= 0; i--) {\n const elementId = p.openElements.tagIDs[i];\n if ((tn === $.LI && elementId === $.LI) ||\n ((tn === $.DD || tn === $.DT) && (elementId === $.DD || elementId === $.DT))) {\n p.openElements.generateImpliedEndTagsWithExclusion(elementId);\n p.openElements.popUntilTagNamePopped(elementId);\n break;\n }\n if (elementId !== $.ADDRESS &&\n elementId !== $.DIV &&\n elementId !== $.P &&\n p._isSpecialElement(p.openElements.items[i], elementId)) {\n break;\n }\n }\n if (p.openElements.hasInButtonScope($.P)) {\n p._closePElement();\n }\n p._insertElement(token, NS.HTML);\n}\nfunction plaintextStartTagInBody(p, token) {\n if (p.openElements.hasInButtonScope($.P)) {\n p._closePElement();\n }\n p._insertElement(token, NS.HTML);\n p.tokenizer.state = TokenizerMode.PLAINTEXT;\n}\nfunction buttonStartTagInBody(p, token) {\n if (p.openElements.hasInScope($.BUTTON)) {\n p.openElements.generateImpliedEndTags();\n p.openElements.popUntilTagNamePopped($.BUTTON);\n }\n p._reconstructActiveFormattingElements();\n p._insertElement(token, NS.HTML);\n p.framesetOk = false;\n}\nfunction aStartTagInBody(p, token) {\n const activeElementEntry = p.activeFormattingElements.getElementEntryInScopeWithTagName(TN.A);\n if (activeElementEntry) {\n callAdoptionAgency(p, token);\n p.openElements.remove(activeElementEntry.element);\n p.activeFormattingElements.removeEntry(activeElementEntry);\n }\n p._reconstructActiveFormattingElements();\n p._insertElement(token, NS.HTML);\n p.activeFormattingElements.pushElement(p.openElements.current, token);\n}\nfunction bStartTagInBody(p, token) {\n p._reconstructActiveFormattingElements();\n p._insertElement(token, NS.HTML);\n p.activeFormattingElements.pushElement(p.openElements.current, token);\n}\nfunction nobrStartTagInBody(p, token) {\n p._reconstructActiveFormattingElements();\n if (p.openElements.hasInScope($.NOBR)) {\n callAdoptionAgency(p, token);\n p._reconstructActiveFormattingElements();\n }\n p._insertElement(token, NS.HTML);\n p.activeFormattingElements.pushElement(p.openElements.current, token);\n}\nfunction appletStartTagInBody(p, token) {\n p._reconstructActiveFormattingElements();\n p._insertElement(token, NS.HTML);\n p.activeFormattingElements.insertMarker();\n p.framesetOk = false;\n}\nfunction tableStartTagInBody(p, token) {\n if (p.treeAdapter.getDocumentMode(p.document) !== DOCUMENT_MODE.QUIRKS && p.openElements.hasInButtonScope($.P)) {\n p._closePElement();\n }\n p._insertElement(token, NS.HTML);\n p.framesetOk = false;\n p.insertionMode = InsertionMode.IN_TABLE;\n}\nfunction areaStartTagInBody(p, token) {\n p._reconstructActiveFormattingElements();\n p._appendElement(token, NS.HTML);\n p.framesetOk = false;\n token.ackSelfClosing = true;\n}\nfunction isHiddenInput(token) {\n const inputType = getTokenAttr(token, ATTRS.TYPE);\n return inputType != null && inputType.toLowerCase() === HIDDEN_INPUT_TYPE;\n}\nfunction inputStartTagInBody(p, token) {\n p._reconstructActiveFormattingElements();\n p._appendElement(token, NS.HTML);\n if (!isHiddenInput(token)) {\n p.framesetOk = false;\n }\n token.ackSelfClosing = true;\n}\nfunction paramStartTagInBody(p, token) {\n p._appendElement(token, NS.HTML);\n token.ackSelfClosing = true;\n}\nfunction hrStartTagInBody(p, token) {\n if (p.openElements.hasInButtonScope($.P)) {\n p._closePElement();\n }\n p._appendElement(token, NS.HTML);\n p.framesetOk = false;\n token.ackSelfClosing = true;\n}\nfunction imageStartTagInBody(p, token) {\n token.tagName = TN.IMG;\n token.tagID = $.IMG;\n areaStartTagInBody(p, token);\n}\nfunction textareaStartTagInBody(p, token) {\n p._insertElement(token, NS.HTML);\n //NOTE: If the next token is a U+000A LINE FEED (LF) character token, then ignore that token and move\n //on to the next one. (Newlines at the start of textarea elements are ignored as an authoring convenience.)\n p.skipNextNewLine = true;\n p.tokenizer.state = TokenizerMode.RCDATA;\n p.originalInsertionMode = p.insertionMode;\n p.framesetOk = false;\n p.insertionMode = InsertionMode.TEXT;\n}\nfunction xmpStartTagInBody(p, token) {\n if (p.openElements.hasInButtonScope($.P)) {\n p._closePElement();\n }\n p._reconstructActiveFormattingElements();\n p.framesetOk = false;\n p._switchToTextParsing(token, TokenizerMode.RAWTEXT);\n}\nfunction iframeStartTagInBody(p, token) {\n p.framesetOk = false;\n p._switchToTextParsing(token, TokenizerMode.RAWTEXT);\n}\n//NOTE: here we assume that we always act as an user agent with enabled plugins, so we parse\n//<noembed> as rawtext.\nfunction noembedStartTagInBody(p, token) {\n p._switchToTextParsing(token, TokenizerMode.RAWTEXT);\n}\nfunction selectStartTagInBody(p, token) {\n p._reconstructActiveFormattingElements();\n p._insertElement(token, NS.HTML);\n p.framesetOk = false;\n p.insertionMode =\n p.insertionMode === InsertionMode.IN_TABLE ||\n p.insertionMode === InsertionMode.IN_CAPTION ||\n p.insertionMode === InsertionMode.IN_TABLE_BODY ||\n p.insertionMode === InsertionMode.IN_ROW ||\n p.insertionMode === InsertionMode.IN_CELL\n ? InsertionMode.IN_SELECT_IN_TABLE\n : InsertionMode.IN_SELECT;\n}\nfunction optgroupStartTagInBody(p, token) {\n if (p.openElements.currentTagId === $.OPTION) {\n p.openElements.pop();\n }\n p._reconstructActiveFormattingElements();\n p._insertElement(token, NS.HTML);\n}\nfunction rbStartTagInBody(p, token) {\n if (p.openElements.hasInScope($.RUBY)) {\n p.openElements.generateImpliedEndTags();\n }\n p._insertElement(token, NS.HTML);\n}\nfunction rtStartTagInBody(p, token) {\n if (p.openElements.hasInScope($.RUBY)) {\n p.openElements.generateImpliedEndTagsWithExclusion($.RTC);\n }\n p._insertElement(token, NS.HTML);\n}\nfunction mathStartTagInBody(p, token) {\n p._reconstructActiveFormattingElements();\n foreignContent.adjustTokenMathMLAttrs(token);\n foreignContent.adjustTokenXMLAttrs(token);\n if (token.selfClosing) {\n p._appendElement(token, NS.MATHML);\n }\n else {\n p._insertElement(token, NS.MATHML);\n }\n token.ackSelfClosing = true;\n}\nfunction svgStartTagInBody(p, token) {\n p._reconstructActiveFormattingElements();\n foreignContent.adjustTokenSVGAttrs(token);\n foreignContent.adjustTokenXMLAttrs(token);\n if (token.selfClosing) {\n p._appendElement(token, NS.SVG);\n }\n else {\n p._insertElement(token, NS.SVG);\n }\n token.ackSelfClosing = true;\n}\nfunction genericStartTagInBody(p, token) {\n p._reconstructActiveFormattingElements();\n p._insertElement(token, NS.HTML);\n}\nfunction startTagInBody(p, token) {\n switch (token.tagID) {\n case $.I:\n case $.S:\n case $.B:\n case $.U:\n case $.EM:\n case $.TT:\n case $.BIG:\n case $.CODE:\n case $.FONT:\n case $.SMALL:\n case $.STRIKE:\n case $.STRONG: {\n bStartTagInBody(p, token);\n break;\n }\n case $.A: {\n aStartTagInBody(p, token);\n break;\n }\n case $.H1:\n case $.H2:\n case $.H3:\n case $.H4:\n case $.H5:\n case $.H6: {\n numberedHeaderStartTagInBody(p, token);\n break;\n }\n case $.P:\n case $.DL:\n case $.OL:\n case $.UL:\n case $.DIV:\n case $.DIR:\n case $.NAV:\n case $.MAIN:\n case $.MENU:\n case $.ASIDE:\n case $.CENTER:\n case $.FIGURE:\n case $.FOOTER:\n case $.HEADER:\n case $.HGROUP:\n case $.DIALOG:\n case $.DETAILS:\n case $.ADDRESS:\n case $.ARTICLE:\n case $.SECTION:\n case $.SUMMARY:\n case $.FIELDSET:\n case $.BLOCKQUOTE:\n case $.FIGCAPTION: {\n addressStartTagInBody(p, token);\n break;\n }\n case $.LI:\n case $.DD:\n case $.DT: {\n listItemStartTagInBody(p, token);\n break;\n }\n case $.BR:\n case $.IMG:\n case $.WBR:\n case $.AREA:\n case $.EMBED:\n case $.KEYGEN: {\n areaStartTagInBody(p, token);\n break;\n }\n case $.HR: {\n hrStartTagInBody(p, token);\n break;\n }\n case $.RB:\n case $.RTC: {\n rbStartTagInBody(p, token);\n break;\n }\n case $.RT:\n case $.RP: {\n rtStartTagInBody(p, token);\n break;\n }\n case $.PRE:\n case $.LISTING: {\n preStartTagInBody(p, token);\n break;\n }\n case $.XMP: {\n xmpStartTagInBody(p, token);\n break;\n }\n case $.SVG: {\n svgStartTagInBody(p, token);\n break;\n }\n case $.HTML: {\n htmlStartTagInBody(p, token);\n break;\n }\n case $.BASE:\n case $.LINK:\n case $.META:\n case $.STYLE:\n case $.TITLE:\n case $.SCRIPT:\n case $.BGSOUND:\n case $.BASEFONT:\n case $.TEMPLATE: {\n startTagInHead(p, token);\n break;\n }\n case $.BODY: {\n bodyStartTagInBody(p, token);\n break;\n }\n case $.FORM: {\n formStartTagInBody(p, token);\n break;\n }\n case $.NOBR: {\n nobrStartTagInBody(p, token);\n break;\n }\n case $.MATH: {\n mathStartTagInBody(p, token);\n break;\n }\n case $.TABLE: {\n tableStartTagInBody(p, token);\n break;\n }\n case $.INPUT: {\n inputStartTagInBody(p, token);\n break;\n }\n case $.PARAM:\n case $.TRACK:\n case $.SOURCE: {\n paramStartTagInBody(p, token);\n break;\n }\n case $.IMAGE: {\n imageStartTagInBody(p, token);\n break;\n }\n case $.BUTTON: {\n buttonStartTagInBody(p, token);\n break;\n }\n case $.APPLET:\n case $.OBJECT:\n case $.MARQUEE: {\n appletStartTagInBody(p, token);\n break;\n }\n case $.IFRAME: {\n iframeStartTagInBody(p, token);\n break;\n }\n case $.SELECT: {\n selectStartTagInBody(p, token);\n break;\n }\n case $.OPTION:\n case $.OPTGROUP: {\n optgroupStartTagInBody(p, token);\n break;\n }\n case $.NOEMBED: {\n noembedStartTagInBody(p, token);\n break;\n }\n case $.FRAMESET: {\n framesetStartTagInBody(p, token);\n break;\n }\n case $.TEXTAREA: {\n textareaStartTagInBody(p, token);\n break;\n }\n case $.NOSCRIPT: {\n if (p.options.scriptingEnabled) {\n noembedStartTagInBody(p, token);\n }\n else {\n genericStartTagInBody(p, token);\n }\n break;\n }\n case $.PLAINTEXT: {\n plaintextStartTagInBody(p, token);\n break;\n }\n case $.COL:\n case $.TH:\n case $.TD:\n case $.TR:\n case $.HEAD:\n case $.FRAME:\n case $.TBODY:\n case $.TFOOT:\n case $.THEAD:\n case $.CAPTION:\n case $.COLGROUP: {\n // Ignore token\n break;\n }\n default: {\n genericStartTagInBody(p, token);\n }\n }\n}\nfunction bodyEndTagInBody(p, token) {\n if (p.openElements.hasInScope($.BODY)) {\n p.insertionMode = InsertionMode.AFTER_BODY;\n //NOTE: <body> is never popped from the stack, so we need to updated\n //the end location explicitly.\n if (p.options.sourceCodeLocationInfo) {\n const bodyElement = p.openElements.tryPeekProperlyNestedBodyElement();\n if (bodyElement) {\n p._setEndLocation(bodyElement, token);\n }\n }\n }\n}\nfunction htmlEndTagInBody(p, token) {\n if (p.openElements.hasInScope($.BODY)) {\n p.insertionMode = InsertionMode.AFTER_BODY;\n endTagAfterBody(p, token);\n }\n}\nfunction addressEndTagInBody(p, token) {\n const tn = token.tagID;\n if (p.openElements.hasInScope(tn)) {\n p.openElements.generateImpliedEndTags();\n p.openElements.popUntilTagNamePopped(tn);\n }\n}\nfunction formEndTagInBody(p) {\n const inTemplate = p.openElements.tmplCount > 0;\n const { formElement } = p;\n if (!inTemplate) {\n p.formElement = null;\n }\n if ((formElement || inTemplate) && p.openElements.hasInScope($.FORM)) {\n p.openElements.generateImpliedEndTags();\n if (inTemplate) {\n p.openElements.popUntilTagNamePopped($.FORM);\n }\n else if (formElement) {\n p.openElements.remove(formElement);\n }\n }\n}\nfunction pEndTagInBody(p) {\n if (!p.openElements.hasInButtonScope($.P)) {\n p._insertFakeElement(TN.P, $.P);\n }\n p._closePElement();\n}\nfunction liEndTagInBody(p) {\n if (p.openElements.hasInListItemScope($.LI)) {\n p.openElements.generateImpliedEndTagsWithExclusion($.LI);\n p.openElements.popUntilTagNamePopped($.LI);\n }\n}\nfunction ddEndTagInBody(p, token) {\n const tn = token.tagID;\n if (p.openElements.hasInScope(tn)) {\n p.openElements.generateImpliedEndTagsWithExclusion(tn);\n p.openElements.popUntilTagNamePopped(tn);\n }\n}\nfunction numberedHeaderEndTagInBody(p) {\n if (p.openElements.hasNumberedHeaderInScope()) {\n p.openElements.generateImpliedEndTags();\n p.openElements.popUntilNumberedHeaderPopped();\n }\n}\nfunction appletEndTagInBody(p, token) {\n const tn = token.tagID;\n if (p.openElements.hasInScope(tn)) {\n p.openElements.generateImpliedEndTags();\n p.openElements.popUntilTagNamePopped(tn);\n p.activeFormattingElements.clearToLastMarker();\n }\n}\nfunction brEndTagInBody(p) {\n p._reconstructActiveFormattingElements();\n p._insertFakeElement(TN.BR, $.BR);\n p.openElements.pop();\n p.framesetOk = false;\n}\nfunction genericEndTagInBody(p, token) {\n const tn = token.tagName;\n const tid = token.tagID;\n for (let i = p.openElements.stackTop; i > 0; i--) {\n const element = p.openElements.items[i];\n const elementId = p.openElements.tagIDs[i];\n // Compare the tag name here, as the tag might not be a known tag with an ID.\n if (tid === elementId && (tid !== $.UNKNOWN || p.treeAdapter.getTagName(element) === tn)) {\n p.openElements.generateImpliedEndTagsWithExclusion(tid);\n if (p.openElements.stackTop >= i)\n p.openElements.shortenToLength(i);\n break;\n }\n if (p._isSpecialElement(element, elementId)) {\n break;\n }\n }\n}\nfunction endTagInBody(p, token) {\n switch (token.tagID) {\n case $.A:\n case $.B:\n case $.I:\n case $.S:\n case $.U:\n case $.EM:\n case $.TT:\n case $.BIG:\n case $.CODE:\n case $.FONT:\n case $.NOBR:\n case $.SMALL:\n case $.STRIKE:\n case $.STRONG: {\n callAdoptionAgency(p, token);\n break;\n }\n case $.P: {\n pEndTagInBody(p);\n break;\n }\n case $.DL:\n case $.UL:\n case $.OL:\n case $.DIR:\n case $.DIV:\n case $.NAV:\n case $.PRE:\n case $.MAIN:\n case $.MENU:\n case $.ASIDE:\n case $.BUTTON:\n case $.CENTER:\n case $.FIGURE:\n case $.FOOTER:\n case $.HEADER:\n case $.HGROUP:\n case $.DIALOG:\n case $.ADDRESS:\n case $.ARTICLE:\n case $.DETAILS:\n case $.SECTION:\n case $.SUMMARY:\n case $.LISTING:\n case $.FIELDSET:\n case $.BLOCKQUOTE:\n case $.FIGCAPTION: {\n addressEndTagInBody(p, token);\n break;\n }\n case $.LI: {\n liEndTagInBody(p);\n break;\n }\n case $.DD:\n case $.DT: {\n ddEndTagInBody(p, token);\n break;\n }\n case $.H1:\n case $.H2:\n case $.H3:\n case $.H4:\n case $.H5:\n case $.H6: {\n numberedHeaderEndTagInBody(p);\n break;\n }\n case $.BR: {\n brEndTagInBody(p);\n break;\n }\n case $.BODY: {\n bodyEndTagInBody(p, token);\n break;\n }\n case $.HTML: {\n htmlEndTagInBody(p, token);\n break;\n }\n case $.FORM: {\n formEndTagInBody(p);\n break;\n }\n case $.APPLET:\n case $.OBJECT:\n case $.MARQUEE: {\n appletEndTagInBody(p, token);\n break;\n }\n case $.TEMPLATE: {\n templateEndTagInHead(p, token);\n break;\n }\n default: {\n genericEndTagInBody(p, token);\n }\n }\n}\nfunction eofInBody(p, token) {\n if (p.tmplInsertionModeStack.length > 0) {\n eofInTemplate(p, token);\n }\n else {\n stopParsing(p, token);\n }\n}\n// The \"text\" insertion mode\n//------------------------------------------------------------------\nfunction endTagInText(p, token) {\n var _a;\n if (token.tagID === $.SCRIPT) {\n (_a = p.scriptHandler) === null || _a === void 0 ? void 0 : _a.call(p, p.openElements.current);\n }\n p.openElements.pop();\n p.insertionMode = p.originalInsertionMode;\n}\nfunction eofInText(p, token) {\n p._err(token, ERR.eofInElementThatCanContainOnlyText);\n p.openElements.pop();\n p.insertionMode = p.originalInsertionMode;\n p.onEof(token);\n}\n// The \"in table\" insertion mode\n//------------------------------------------------------------------\nfunction characterInTable(p, token) {\n if (TABLE_STRUCTURE_TAGS.has(p.openElements.currentTagId)) {\n p.pendingCharacterTokens.length = 0;\n p.hasNonWhitespacePendingCharacterToken = false;\n p.originalInsertionMode = p.insertionMode;\n p.insertionMode = InsertionMode.IN_TABLE_TEXT;\n switch (token.type) {\n case TokenType.CHARACTER: {\n characterInTableText(p, token);\n break;\n }\n case TokenType.WHITESPACE_CHARACTER: {\n whitespaceCharacterInTableText(p, token);\n break;\n }\n // Ignore null\n }\n }\n else {\n tokenInTable(p, token);\n }\n}\nfunction captionStartTagInTable(p, token) {\n p.openElements.clearBackToTableContext();\n p.activeFormattingElements.insertMarker();\n p._insertElement(token, NS.HTML);\n p.insertionMode = InsertionMode.IN_CAPTION;\n}\nfunction colgroupStartTagInTable(p, token) {\n p.openElements.clearBackToTableContext();\n p._insertElement(token, NS.HTML);\n p.insertionMode = InsertionMode.IN_COLUMN_GROUP;\n}\nfunction colStartTagInTable(p, token) {\n p.openElements.clearBackToTableContext();\n p._insertFakeElement(TN.COLGROUP, $.COLGROUP);\n p.insertionMode = InsertionMode.IN_COLUMN_GROUP;\n startTagInColumnGroup(p, token);\n}\nfunction tbodyStartTagInTable(p, token) {\n p.openElements.clearBackToTableContext();\n p._insertElement(token, NS.HTML);\n p.insertionMode = InsertionMode.IN_TABLE_BODY;\n}\nfunction tdStartTagInTable(p, token) {\n p.openElements.clearBackToTableContext();\n p._insertFakeElement(TN.TBODY, $.TBODY);\n p.insertionMode = InsertionMode.IN_TABLE_BODY;\n startTagInTableBody(p, token);\n}\nfunction tableStartTagInTable(p, token) {\n if (p.openElements.hasInTableScope($.TABLE)) {\n p.openElements.popUntilTagNamePopped($.TABLE);\n p._resetInsertionMode();\n p._processStartTag(token);\n }\n}\nfunction inputStartTagInTable(p, token) {\n if (isHiddenInput(token)) {\n p._appendElement(token, NS.HTML);\n }\n else {\n tokenInTable(p, token);\n }\n token.ackSelfClosing = true;\n}\nfunction formStartTagInTable(p, token) {\n if (!p.formElement && p.openElements.tmplCount === 0) {\n p._insertElement(token, NS.HTML);\n p.formElement = p.openElements.current;\n p.openElements.pop();\n }\n}\nfunction startTagInTable(p, token) {\n switch (token.tagID) {\n case $.TD:\n case $.TH:\n case $.TR: {\n tdStartTagInTable(p, token);\n break;\n }\n case $.STYLE:\n case $.SCRIPT:\n case $.TEMPLATE: {\n startTagInHead(p, token);\n break;\n }\n case $.COL: {\n colStartTagInTable(p, token);\n break;\n }\n case $.FORM: {\n formStartTagInTable(p, token);\n break;\n }\n case $.TABLE: {\n tableStartTagInTable(p, token);\n break;\n }\n case $.TBODY:\n case $.TFOOT:\n case $.THEAD: {\n tbodyStartTagInTable(p, token);\n break;\n }\n case $.INPUT: {\n inputStartTagInTable(p, token);\n break;\n }\n case $.CAPTION: {\n captionStartTagInTable(p, token);\n break;\n }\n case $.COLGROUP: {\n colgroupStartTagInTable(p, token);\n break;\n }\n default: {\n tokenInTable(p, token);\n }\n }\n}\nfunction endTagInTable(p, token) {\n switch (token.tagID) {\n case $.TABLE: {\n if (p.openElements.hasInTableScope($.TABLE)) {\n p.openElements.popUntilTagNamePopped($.TABLE);\n p._resetInsertionMode();\n }\n break;\n }\n case $.TEMPLATE: {\n templateEndTagInHead(p, token);\n break;\n }\n case $.BODY:\n case $.CAPTION:\n case $.COL:\n case $.COLGROUP:\n case $.HTML:\n case $.TBODY:\n case $.TD:\n case $.TFOOT:\n case $.TH:\n case $.THEAD:\n case $.TR: {\n // Ignore token\n break;\n }\n default: {\n tokenInTable(p, token);\n }\n }\n}\nfunction tokenInTable(p, token) {\n const savedFosterParentingState = p.fosterParentingEnabled;\n p.fosterParentingEnabled = true;\n // Process token in `In Body` mode\n modeInBody(p, token);\n p.fosterParentingEnabled = savedFosterParentingState;\n}\n// The \"in table text\" insertion mode\n//------------------------------------------------------------------\nfunction whitespaceCharacterInTableText(p, token) {\n p.pendingCharacterTokens.push(token);\n}\nfunction characterInTableText(p, token) {\n p.pendingCharacterTokens.push(token);\n p.hasNonWhitespacePendingCharacterToken = true;\n}\nfunction tokenInTableText(p, token) {\n let i = 0;\n if (p.hasNonWhitespacePendingCharacterToken) {\n for (; i < p.pendingCharacterTokens.length; i++) {\n tokenInTable(p, p.pendingCharacterTokens[i]);\n }\n }\n else {\n for (; i < p.pendingCharacterTokens.length; i++) {\n p._insertCharacters(p.pendingCharacterTokens[i]);\n }\n }\n p.insertionMode = p.originalInsertionMode;\n p._processToken(token);\n}\n// The \"in caption\" insertion mode\n//------------------------------------------------------------------\nconst TABLE_VOID_ELEMENTS = new Set([$.CAPTION, $.COL, $.COLGROUP, $.TBODY, $.TD, $.TFOOT, $.TH, $.THEAD, $.TR]);\nfunction startTagInCaption(p, token) {\n const tn = token.tagID;\n if (TABLE_VOID_ELEMENTS.has(tn)) {\n if (p.openElements.hasInTableScope($.CAPTION)) {\n p.openElements.generateImpliedEndTags();\n p.openElements.popUntilTagNamePopped($.CAPTION);\n p.activeFormattingElements.clearToLastMarker();\n p.insertionMode = InsertionMode.IN_TABLE;\n startTagInTable(p, token);\n }\n }\n else {\n startTagInBody(p, token);\n }\n}\nfunction endTagInCaption(p, token) {\n const tn = token.tagID;\n switch (tn) {\n case $.CAPTION:\n case $.TABLE: {\n if (p.openElements.hasInTableScope($.CAPTION)) {\n p.openElements.generateImpliedEndTags();\n p.openElements.popUntilTagNamePopped($.CAPTION);\n p.activeFormattingElements.clearToLastMarker();\n p.insertionMode = InsertionMode.IN_TABLE;\n if (tn === $.TABLE) {\n endTagInTable(p, token);\n }\n }\n break;\n }\n case $.BODY:\n case $.COL:\n case $.COLGROUP:\n case $.HTML:\n case $.TBODY:\n case $.TD:\n case $.TFOOT:\n case $.TH:\n case $.THEAD:\n case $.TR: {\n // Ignore token\n break;\n }\n default: {\n endTagInBody(p, token);\n }\n }\n}\n// The \"in column group\" insertion mode\n//------------------------------------------------------------------\nfunction startTagInColumnGroup(p, token) {\n switch (token.tagID) {\n case $.HTML: {\n startTagInBody(p, token);\n break;\n }\n case $.COL: {\n p._appendElement(token, NS.HTML);\n token.ackSelfClosing = true;\n break;\n }\n case $.TEMPLATE: {\n startTagInHead(p, token);\n break;\n }\n default: {\n tokenInColumnGroup(p, token);\n }\n }\n}\nfunction endTagInColumnGroup(p, token) {\n switch (token.tagID) {\n case $.COLGROUP: {\n if (p.openElements.currentTagId === $.COLGROUP) {\n p.openElements.pop();\n p.insertionMode = InsertionMode.IN_TABLE;\n }\n break;\n }\n case $.TEMPLATE: {\n templateEndTagInHead(p, token);\n break;\n }\n case $.COL: {\n // Ignore token\n break;\n }\n default: {\n tokenInColumnGroup(p, token);\n }\n }\n}\nfunction tokenInColumnGroup(p, token) {\n if (p.openElements.currentTagId === $.COLGROUP) {\n p.openElements.pop();\n p.insertionMode = InsertionMode.IN_TABLE;\n p._processToken(token);\n }\n}\n// The \"in table body\" insertion mode\n//------------------------------------------------------------------\nfunction startTagInTableBody(p, token) {\n switch (token.tagID) {\n case $.TR: {\n p.openElements.clearBackToTableBodyContext();\n p._insertElement(token, NS.HTML);\n p.insertionMode = InsertionMode.IN_ROW;\n break;\n }\n case $.TH:\n case $.TD: {\n p.openElements.clearBackToTableBodyContext();\n p._insertFakeElement(TN.TR, $.TR);\n p.insertionMode = InsertionMode.IN_ROW;\n startTagInRow(p, token);\n break;\n }\n case $.CAPTION:\n case $.COL:\n case $.COLGROUP:\n case $.TBODY:\n case $.TFOOT:\n case $.THEAD: {\n if (p.openElements.hasTableBodyContextInTableScope()) {\n p.openElements.clearBackToTableBodyContext();\n p.openElements.pop();\n p.insertionMode = InsertionMode.IN_TABLE;\n startTagInTable(p, token);\n }\n break;\n }\n default: {\n startTagInTable(p, token);\n }\n }\n}\nfunction endTagInTableBody(p, token) {\n const tn = token.tagID;\n switch (token.tagID) {\n case $.TBODY:\n case $.TFOOT:\n case $.THEAD: {\n if (p.openElements.hasInTableScope(tn)) {\n p.openElements.clearBackToTableBodyContext();\n p.openElements.pop();\n p.insertionMode = InsertionMode.IN_TABLE;\n }\n break;\n }\n case $.TABLE: {\n if (p.openElements.hasTableBodyContextInTableScope()) {\n p.openElements.clearBackToTableBodyContext();\n p.openElements.pop();\n p.insertionMode = InsertionMode.IN_TABLE;\n endTagInTable(p, token);\n }\n break;\n }\n case $.BODY:\n case $.CAPTION:\n case $.COL:\n case $.COLGROUP:\n case $.HTML:\n case $.TD:\n case $.TH:\n case $.TR: {\n // Ignore token\n break;\n }\n default: {\n endTagInTable(p, token);\n }\n }\n}\n// The \"in row\" insertion mode\n//------------------------------------------------------------------\nfunction startTagInRow(p, token) {\n switch (token.tagID) {\n case $.TH:\n case $.TD: {\n p.openElements.clearBackToTableRowContext();\n p._insertElement(token, NS.HTML);\n p.insertionMode = InsertionMode.IN_CELL;\n p.activeFormattingElements.insertMarker();\n break;\n }\n case $.CAPTION:\n case $.COL:\n case $.COLGROUP:\n case $.TBODY:\n case $.TFOOT:\n case $.THEAD:\n case $.TR: {\n if (p.openElements.hasInTableScope($.TR)) {\n p.openElements.clearBackToTableRowContext();\n p.openElements.pop();\n p.insertionMode = InsertionMode.IN_TABLE_BODY;\n startTagInTableBody(p, token);\n }\n break;\n }\n default: {\n startTagInTable(p, token);\n }\n }\n}\nfunction endTagInRow(p, token) {\n switch (token.tagID) {\n case $.TR: {\n if (p.openElements.hasInTableScope($.TR)) {\n p.openElements.clearBackToTableRowContext();\n p.openElements.pop();\n p.insertionMode = InsertionMode.IN_TABLE_BODY;\n }\n break;\n }\n case $.TABLE: {\n if (p.openElements.hasInTableScope($.TR)) {\n p.openElements.clearBackToTableRowContext();\n p.openElements.pop();\n p.insertionMode = InsertionMode.IN_TABLE_BODY;\n endTagInTableBody(p, token);\n }\n break;\n }\n case $.TBODY:\n case $.TFOOT:\n case $.THEAD: {\n if (p.openElements.hasInTableScope(token.tagID) || p.openElements.hasInTableScope($.TR)) {\n p.openElements.clearBackToTableRowContext();\n p.openElements.pop();\n p.insertionMode = InsertionMode.IN_TABLE_BODY;\n endTagInTableBody(p, token);\n }\n break;\n }\n case $.BODY:\n case $.CAPTION:\n case $.COL:\n case $.COLGROUP:\n case $.HTML:\n case $.TD:\n case $.TH: {\n // Ignore end tag\n break;\n }\n default: {\n endTagInTable(p, token);\n }\n }\n}\n// The \"in cell\" insertion mode\n//------------------------------------------------------------------\nfunction startTagInCell(p, token) {\n const tn = token.tagID;\n if (TABLE_VOID_ELEMENTS.has(tn)) {\n if (p.openElements.hasInTableScope($.TD) || p.openElements.hasInTableScope($.TH)) {\n p._closeTableCell();\n startTagInRow(p, token);\n }\n }\n else {\n startTagInBody(p, token);\n }\n}\nfunction endTagInCell(p, token) {\n const tn = token.tagID;\n switch (tn) {\n case $.TD:\n case $.TH: {\n if (p.openElements.hasInTableScope(tn)) {\n p.openElements.generateImpliedEndTags();\n p.openElements.popUntilTagNamePopped(tn);\n p.activeFormattingElements.clearToLastMarker();\n p.insertionMode = InsertionMode.IN_ROW;\n }\n break;\n }\n case $.TABLE:\n case $.TBODY:\n case $.TFOOT:\n case $.THEAD:\n case $.TR: {\n if (p.openElements.hasInTableScope(tn)) {\n p._closeTableCell();\n endTagInRow(p, token);\n }\n break;\n }\n case $.BODY:\n case $.CAPTION:\n case $.COL:\n case $.COLGROUP:\n case $.HTML: {\n // Ignore token\n break;\n }\n default: {\n endTagInBody(p, token);\n }\n }\n}\n// The \"in select\" insertion mode\n//------------------------------------------------------------------\nfunction startTagInSelect(p, token) {\n switch (token.tagID) {\n case $.HTML: {\n startTagInBody(p, token);\n break;\n }\n case $.OPTION: {\n if (p.openElements.currentTagId === $.OPTION) {\n p.openElements.pop();\n }\n p._insertElement(token, NS.HTML);\n break;\n }\n case $.OPTGROUP: {\n if (p.openElements.currentTagId === $.OPTION) {\n p.openElements.pop();\n }\n if (p.openElements.currentTagId === $.OPTGROUP) {\n p.openElements.pop();\n }\n p._insertElement(token, NS.HTML);\n break;\n }\n case $.INPUT:\n case $.KEYGEN:\n case $.TEXTAREA:\n case $.SELECT: {\n if (p.openElements.hasInSelectScope($.SELECT)) {\n p.openElements.popUntilTagNamePopped($.SELECT);\n p._resetInsertionMode();\n if (token.tagID !== $.SELECT) {\n p._processStartTag(token);\n }\n }\n break;\n }\n case $.SCRIPT:\n case $.TEMPLATE: {\n startTagInHead(p, token);\n break;\n }\n default:\n // Do nothing\n }\n}\nfunction endTagInSelect(p, token) {\n switch (token.tagID) {\n case $.OPTGROUP: {\n if (p.openElements.stackTop > 0 &&\n p.openElements.currentTagId === $.OPTION &&\n p.openElements.tagIDs[p.openElements.stackTop - 1] === $.OPTGROUP) {\n p.openElements.pop();\n }\n if (p.openElements.currentTagId === $.OPTGROUP) {\n p.openElements.pop();\n }\n break;\n }\n case $.OPTION: {\n if (p.openElements.currentTagId === $.OPTION) {\n p.openElements.pop();\n }\n break;\n }\n case $.SELECT: {\n if (p.openElements.hasInSelectScope($.SELECT)) {\n p.openElements.popUntilTagNamePopped($.SELECT);\n p._resetInsertionMode();\n }\n break;\n }\n case $.TEMPLATE: {\n templateEndTagInHead(p, token);\n break;\n }\n default:\n // Do nothing\n }\n}\n// The \"in select in table\" insertion mode\n//------------------------------------------------------------------\nfunction startTagInSelectInTable(p, token) {\n const tn = token.tagID;\n if (tn === $.CAPTION ||\n tn === $.TABLE ||\n tn === $.TBODY ||\n tn === $.TFOOT ||\n tn === $.THEAD ||\n tn === $.TR ||\n tn === $.TD ||\n tn === $.TH) {\n p.openElements.popUntilTagNamePopped($.SELECT);\n p._resetInsertionMode();\n p._processStartTag(token);\n }\n else {\n startTagInSelect(p, token);\n }\n}\nfunction endTagInSelectInTable(p, token) {\n const tn = token.tagID;\n if (tn === $.CAPTION ||\n tn === $.TABLE ||\n tn === $.TBODY ||\n tn === $.TFOOT ||\n tn === $.THEAD ||\n tn === $.TR ||\n tn === $.TD ||\n tn === $.TH) {\n if (p.openElements.hasInTableScope(tn)) {\n p.openElements.popUntilTagNamePopped($.SELECT);\n p._resetInsertionMode();\n p.onEndTag(token);\n }\n }\n else {\n endTagInSelect(p, token);\n }\n}\n// The \"in template\" insertion mode\n//------------------------------------------------------------------\nfunction startTagInTemplate(p, token) {\n switch (token.tagID) {\n // First, handle tags that can start without a mode change\n case $.BASE:\n case $.BASEFONT:\n case $.BGSOUND:\n case $.LINK:\n case $.META:\n case $.NOFRAMES:\n case $.SCRIPT:\n case $.STYLE:\n case $.TEMPLATE:\n case $.TITLE: {\n startTagInHead(p, token);\n break;\n }\n // Re-process the token in the appropriate mode\n case $.CAPTION:\n case $.COLGROUP:\n case $.TBODY:\n case $.TFOOT:\n case $.THEAD: {\n p.tmplInsertionModeStack[0] = InsertionMode.IN_TABLE;\n p.insertionMode = InsertionMode.IN_TABLE;\n startTagInTable(p, token);\n break;\n }\n case $.COL: {\n p.tmplInsertionModeStack[0] = InsertionMode.IN_COLUMN_GROUP;\n p.insertionMode = InsertionMode.IN_COLUMN_GROUP;\n startTagInColumnGroup(p, token);\n break;\n }\n case $.TR: {\n p.tmplInsertionModeStack[0] = InsertionMode.IN_TABLE_BODY;\n p.insertionMode = InsertionMode.IN_TABLE_BODY;\n startTagInTableBody(p, token);\n break;\n }\n case $.TD:\n case $.TH: {\n p.tmplInsertionModeStack[0] = InsertionMode.IN_ROW;\n p.insertionMode = InsertionMode.IN_ROW;\n startTagInRow(p, token);\n break;\n }\n default: {\n p.tmplInsertionModeStack[0] = InsertionMode.IN_BODY;\n p.insertionMode = InsertionMode.IN_BODY;\n startTagInBody(p, token);\n }\n }\n}\nfunction endTagInTemplate(p, token) {\n if (token.tagID === $.TEMPLATE) {\n templateEndTagInHead(p, token);\n }\n}\nfunction eofInTemplate(p, token) {\n if (p.openElements.tmplCount > 0) {\n p.openElements.popUntilTagNamePopped($.TEMPLATE);\n p.activeFormattingElements.clearToLastMarker();\n p.tmplInsertionModeStack.shift();\n p._resetInsertionMode();\n p.onEof(token);\n }\n else {\n stopParsing(p, token);\n }\n}\n// The \"after body\" insertion mode\n//------------------------------------------------------------------\nfunction startTagAfterBody(p, token) {\n if (token.tagID === $.HTML) {\n startTagInBody(p, token);\n }\n else {\n tokenAfterBody(p, token);\n }\n}\nfunction endTagAfterBody(p, token) {\n var _a;\n if (token.tagID === $.HTML) {\n if (!p.fragmentContext) {\n p.insertionMode = InsertionMode.AFTER_AFTER_BODY;\n }\n //NOTE: <html> is never popped from the stack, so we need to updated\n //the end location explicitly.\n if (p.options.sourceCodeLocationInfo && p.openElements.tagIDs[0] === $.HTML) {\n p._setEndLocation(p.openElements.items[0], token);\n // Update the body element, if it doesn't have an end tag\n const bodyElement = p.openElements.items[1];\n if (bodyElement && !((_a = p.treeAdapter.getNodeSourceCodeLocation(bodyElement)) === null || _a === void 0 ? void 0 : _a.endTag)) {\n p._setEndLocation(bodyElement, token);\n }\n }\n }\n else {\n tokenAfterBody(p, token);\n }\n}\nfunction tokenAfterBody(p, token) {\n p.insertionMode = InsertionMode.IN_BODY;\n modeInBody(p, token);\n}\n// The \"in frameset\" insertion mode\n//------------------------------------------------------------------\nfunction startTagInFrameset(p, token) {\n switch (token.tagID) {\n case $.HTML: {\n startTagInBody(p, token);\n break;\n }\n case $.FRAMESET: {\n p._insertElement(token, NS.HTML);\n break;\n }\n case $.FRAME: {\n p._appendElement(token, NS.HTML);\n token.ackSelfClosing = true;\n break;\n }\n case $.NOFRAMES: {\n startTagInHead(p, token);\n break;\n }\n default:\n // Do nothing\n }\n}\nfunction endTagInFrameset(p, token) {\n if (token.tagID === $.FRAMESET && !p.openElements.isRootHtmlElementCurrent()) {\n p.openElements.pop();\n if (!p.fragmentContext && p.openElements.currentTagId !== $.FRAMESET) {\n p.insertionMode = InsertionMode.AFTER_FRAMESET;\n }\n }\n}\n// The \"after frameset\" insertion mode\n//------------------------------------------------------------------\nfunction startTagAfterFrameset(p, token) {\n switch (token.tagID) {\n case $.HTML: {\n startTagInBody(p, token);\n break;\n }\n case $.NOFRAMES: {\n startTagInHead(p, token);\n break;\n }\n default:\n // Do nothing\n }\n}\nfunction endTagAfterFrameset(p, token) {\n if (token.tagID === $.HTML) {\n p.insertionMode = InsertionMode.AFTER_AFTER_FRAMESET;\n }\n}\n// The \"after after body\" insertion mode\n//------------------------------------------------------------------\nfunction startTagAfterAfterBody(p, token) {\n if (token.tagID === $.HTML) {\n startTagInBody(p, token);\n }\n else {\n tokenAfterAfterBody(p, token);\n }\n}\nfunction tokenAfterAfterBody(p, token) {\n p.insertionMode = InsertionMode.IN_BODY;\n modeInBody(p, token);\n}\n// The \"after after frameset\" insertion mode\n//------------------------------------------------------------------\nfunction startTagAfterAfterFrameset(p, token) {\n switch (token.tagID) {\n case $.HTML: {\n startTagInBody(p, token);\n break;\n }\n case $.NOFRAMES: {\n startTagInHead(p, token);\n break;\n }\n default:\n // Do nothing\n }\n}\n// The rules for parsing tokens in foreign content\n//------------------------------------------------------------------\nfunction nullCharacterInForeignContent(p, token) {\n token.chars = unicode.REPLACEMENT_CHARACTER;\n p._insertCharacters(token);\n}\nfunction characterInForeignContent(p, token) {\n p._insertCharacters(token);\n p.framesetOk = false;\n}\nfunction popUntilHtmlOrIntegrationPoint(p) {\n while (p.treeAdapter.getNamespaceURI(p.openElements.current) !== NS.HTML &&\n !p._isIntegrationPoint(p.openElements.currentTagId, p.openElements.current)) {\n p.openElements.pop();\n }\n}\nfunction startTagInForeignContent(p, token) {\n if (foreignContent.causesExit(token)) {\n popUntilHtmlOrIntegrationPoint(p);\n p._startTagOutsideForeignContent(token);\n }\n else {\n const current = p._getAdjustedCurrentElement();\n const currentNs = p.treeAdapter.getNamespaceURI(current);\n if (currentNs === NS.MATHML) {\n foreignContent.adjustTokenMathMLAttrs(token);\n }\n else if (currentNs === NS.SVG) {\n foreignContent.adjustTokenSVGTagName(token);\n foreignContent.adjustTokenSVGAttrs(token);\n }\n foreignContent.adjustTokenXMLAttrs(token);\n if (token.selfClosing) {\n p._appendElement(token, currentNs);\n }\n else {\n p._insertElement(token, currentNs);\n }\n token.ackSelfClosing = true;\n }\n}\nfunction endTagInForeignContent(p, token) {\n if (token.tagID === $.P || token.tagID === $.BR) {\n popUntilHtmlOrIntegrationPoint(p);\n p._endTagOutsideForeignContent(token);\n return;\n }\n for (let i = p.openElements.stackTop; i > 0; i--) {\n const element = p.openElements.items[i];\n if (p.treeAdapter.getNamespaceURI(element) === NS.HTML) {\n p._endTagOutsideForeignContent(token);\n break;\n }\n const tagName = p.treeAdapter.getTagName(element);\n if (tagName.toLowerCase() === token.tagName) {\n //NOTE: update the token tag name for `_setEndLocation`.\n token.tagName = tagName;\n p.openElements.shortenToLength(i);\n break;\n }\n }\n}\n//# sourceMappingURL=index.js.map","export const xmlReplacer = /[\"&'<>$\\x80-\\uFFFF]/g;\nconst xmlCodeMap = new Map([\n [34, \""\"],\n [38, \"&\"],\n [39, \"'\"],\n [60, \"<\"],\n [62, \">\"],\n]);\n// For compatibility with node < 4, we wrap `codePointAt`\nexport const getCodePoint = \n// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\nString.prototype.codePointAt != null\n ? (str, index) => str.codePointAt(index)\n : // http://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae\n (c, index) => (c.charCodeAt(index) & 0xfc00) === 0xd800\n ? (c.charCodeAt(index) - 0xd800) * 0x400 +\n c.charCodeAt(index + 1) -\n 0xdc00 +\n 0x10000\n : c.charCodeAt(index);\n/**\n * Encodes all non-ASCII characters, as well as characters not valid in XML\n * documents using XML entities.\n *\n * If a character has no equivalent entity, a\n * numeric hexadecimal reference (eg. `ü`) will be used.\n */\nexport function encodeXML(str) {\n let ret = \"\";\n let lastIdx = 0;\n let match;\n while ((match = xmlReplacer.exec(str)) !== null) {\n const i = match.index;\n const char = str.charCodeAt(i);\n const next = xmlCodeMap.get(char);\n if (next !== undefined) {\n ret += str.substring(lastIdx, i) + next;\n lastIdx = i + 1;\n }\n else {\n ret += `${str.substring(lastIdx, i)}&#x${getCodePoint(str, i).toString(16)};`;\n // Increase by 1 if we have a surrogate pair\n lastIdx = xmlReplacer.lastIndex += Number((char & 0xfc00) === 0xd800);\n }\n }\n return ret + str.substr(lastIdx);\n}\n/**\n * Encodes all non-ASCII characters, as well as characters not valid in XML\n * documents using numeric hexadecimal reference (eg. `ü`).\n *\n * Have a look at `escapeUTF8` if you want a more concise output at the expense\n * of reduced transportability.\n *\n * @param data String to escape.\n */\nexport const escape = encodeXML;\n/**\n * Creates a function that escapes all characters matched by the given regular\n * expression using the given map of characters to escape to their entities.\n *\n * @param regex Regular expression to match characters to escape.\n * @param map Map of characters to escape to their entities.\n *\n * @returns Function that escapes all characters matched by the given regular\n * expression using the given map of characters to escape to their entities.\n */\nfunction getEscaper(regex, map) {\n return function escape(data) {\n let match;\n let lastIdx = 0;\n let result = \"\";\n while ((match = regex.exec(data))) {\n if (lastIdx !== match.index) {\n result += data.substring(lastIdx, match.index);\n }\n // We know that this character will be in the map.\n result += map.get(match[0].charCodeAt(0));\n // Every match will be of length 1\n lastIdx = match.index + 1;\n }\n return result + data.substring(lastIdx);\n };\n}\n/**\n * Encodes all characters not valid in XML documents using XML entities.\n *\n * Note that the output will be character-set dependent.\n *\n * @param data String to escape.\n */\nexport const escapeUTF8 = getEscaper(/[&<>'\"]/g, xmlCodeMap);\n/**\n * Encodes all characters that have to be escaped in HTML attributes,\n * following {@link https://html.spec.whatwg.org/multipage/parsing.html#escapingString}.\n *\n * @param data String to escape.\n */\nexport const escapeAttribute = getEscaper(/[\"&\\u00A0]/g, new Map([\n [34, \""\"],\n [38, \"&\"],\n [160, \" \"],\n]));\n/**\n * Encodes all characters that have to be escaped in HTML text,\n * following {@link https://html.spec.whatwg.org/multipage/parsing.html#escapingString}.\n *\n * @param data String to escape.\n */\nexport const escapeText = getEscaper(/[&<>\\u00A0]/g, new Map([\n [38, \"&\"],\n [60, \"<\"],\n [62, \">\"],\n [160, \" \"],\n]));\n//# sourceMappingURL=escape.js.map","import { TAG_NAMES as $, NS, hasUnescapedText } from '../common/html.js';\nimport { escapeText, escapeAttribute } from 'entities/lib/escape.js';\nimport { defaultTreeAdapter } from '../tree-adapters/default.js';\n// Sets\nconst VOID_ELEMENTS = new Set([\n $.AREA,\n $.BASE,\n $.BASEFONT,\n $.BGSOUND,\n $.BR,\n $.COL,\n $.EMBED,\n $.FRAME,\n $.HR,\n $.IMG,\n $.INPUT,\n $.KEYGEN,\n $.LINK,\n $.META,\n $.PARAM,\n $.SOURCE,\n $.TRACK,\n $.WBR,\n]);\nfunction isVoidElement(node, options) {\n return (options.treeAdapter.isElementNode(node) &&\n options.treeAdapter.getNamespaceURI(node) === NS.HTML &&\n VOID_ELEMENTS.has(options.treeAdapter.getTagName(node)));\n}\nconst defaultOpts = { treeAdapter: defaultTreeAdapter, scriptingEnabled: true };\n/**\n * Serializes an AST node to an HTML string.\n *\n * @example\n *\n * ```js\n * const parse5 = require('parse5');\n *\n * const document = parse5.parse('<!DOCTYPE html><html><head></head><body>Hi there!</body></html>');\n *\n * // Serializes a document.\n * const html = parse5.serialize(document);\n *\n * // Serializes the <html> element content.\n * const str = parse5.serialize(document.childNodes[1]);\n *\n * console.log(str); //> '<head></head><body>Hi there!</body>'\n * ```\n *\n * @param node Node to serialize.\n * @param options Serialization options.\n */\nexport function serialize(node, options) {\n const opts = { ...defaultOpts, ...options };\n if (isVoidElement(node, opts)) {\n return '';\n }\n return serializeChildNodes(node, opts);\n}\n/**\n * Serializes an AST element node to an HTML string, including the element node.\n *\n * @example\n *\n * ```js\n * const parse5 = require('parse5');\n *\n * const document = parse5.parseFragment('<div>Hello, <b>world</b>!</div>');\n *\n * // Serializes the <div> element.\n * const html = parse5.serializeOuter(document.childNodes[0]);\n *\n * console.log(str); //> '<div>Hello, <b>world</b>!</div>'\n * ```\n *\n * @param node Node to serialize.\n * @param options Serialization options.\n */\nexport function serializeOuter(node, options) {\n const opts = { ...defaultOpts, ...options };\n return serializeNode(node, opts);\n}\nfunction serializeChildNodes(parentNode, options) {\n let html = '';\n // Get container of the child nodes\n const container = options.treeAdapter.isElementNode(parentNode) &&\n options.treeAdapter.getTagName(parentNode) === $.TEMPLATE &&\n options.treeAdapter.getNamespaceURI(parentNode) === NS.HTML\n ? options.treeAdapter.getTemplateContent(parentNode)\n : parentNode;\n const childNodes = options.treeAdapter.getChildNodes(container);\n if (childNodes) {\n for (const currentNode of childNodes) {\n html += serializeNode(currentNode, options);\n }\n }\n return html;\n}\nfunction serializeNode(node, options) {\n if (options.treeAdapter.isElementNode(node)) {\n return serializeElement(node, options);\n }\n if (options.treeAdapter.isTextNode(node)) {\n return serializeTextNode(node, options);\n }\n if (options.treeAdapter.isCommentNode(node)) {\n return serializeCommentNode(node, options);\n }\n if (options.treeAdapter.isDocumentTypeNode(node)) {\n return serializeDocumentTypeNode(node, options);\n }\n // Return an empty string for unknown nodes\n return '';\n}\nfunction serializeElement(node, options) {\n const tn = options.treeAdapter.getTagName(node);\n return `<${tn}${serializeAttributes(node, options)}>${isVoidElement(node, options) ? '' : `${serializeChildNodes(node, options)}</${tn}>`}`;\n}\nfunction serializeAttributes(node, { treeAdapter }) {\n let html = '';\n for (const attr of treeAdapter.getAttrList(node)) {\n html += ' ';\n if (!attr.namespace) {\n html += attr.name;\n }\n else\n switch (attr.namespace) {\n case NS.XML: {\n html += `xml:${attr.name}`;\n break;\n }\n case NS.XMLNS: {\n if (attr.name !== 'xmlns') {\n html += 'xmlns:';\n }\n html += attr.name;\n break;\n }\n case NS.XLINK: {\n html += `xlink:${attr.name}`;\n break;\n }\n default: {\n html += `${attr.prefix}:${attr.name}`;\n }\n }\n html += `=\"${escapeAttribute(attr.value)}\"`;\n }\n return html;\n}\nfunction serializeTextNode(node, options) {\n const { treeAdapter } = options;\n const content = treeAdapter.getTextNodeContent(node);\n const parent = treeAdapter.getParentNode(node);\n const parentTn = parent && treeAdapter.isElementNode(parent) && treeAdapter.getTagName(parent);\n return parentTn &&\n treeAdapter.getNamespaceURI(parent) === NS.HTML &&\n hasUnescapedText(parentTn, options.scriptingEnabled)\n ? content\n : escapeText(content);\n}\nfunction serializeCommentNode(node, { treeAdapter }) {\n return `<!--${treeAdapter.getCommentNodeContent(node)}-->`;\n}\nfunction serializeDocumentTypeNode(node, { treeAdapter }) {\n return `<!DOCTYPE ${treeAdapter.getDocumentTypeNodeName(node)}>`;\n}\n//# sourceMappingURL=index.js.map","/**\n * @typedef {import('hast').Comment} Comment\n * @typedef {import('hast').Doctype} Doctype\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').Nodes} Nodes\n * @typedef {import('hast').Root} Root\n * @typedef {import('hast').RootContent} RootContent\n * @typedef {import('hast').Text} Text\n *\n * @typedef {import('hast-util-raw').Options} Options\n *\n * @typedef {import('mdast-util-to-hast').Raw} Raw\n *\n * @typedef {import('parse5').DefaultTreeAdapterMap} DefaultTreeAdapterMap\n * @typedef {import('parse5').ParserOptions<DefaultTreeAdapterMap>} ParserOptions\n * @typedef {import('parse5').Token.CharacterToken} CharacterToken\n * @typedef {import('parse5').Token.CommentToken} CommentToken\n * @typedef {import('parse5').Token.DoctypeToken} DoctypeToken\n * @typedef {import('parse5').Token.Location} Location\n * @typedef {import('parse5').Token.TagToken} TagToken\n *\n * @typedef {import('unist').Point} Point\n */\n\n/**\n * @typedef State\n * Info passed around about the current state.\n * @property {(node: Nodes) => undefined} handle\n * Add a hast node to the parser.\n * @property {Options} options\n * User configuration.\n * @property {Parser<DefaultTreeAdapterMap>} parser\n * Current parser.\n * @property {boolean} stitches\n * Whether there are stitches.\n */\n\n/**\n * @typedef Stitch\n * Custom comment-like value we pass through parse5, which contains a\n * replacement node that we’ll swap back in afterwards.\n * @property {'comment'} type\n * Node type.\n * @property {{stitch: Nodes}} value\n * Replacement value.\n */\n\nimport structuredClone from '@ungap/structured-clone'\nimport {fromParse5} from 'hast-util-from-parse5'\nimport {toParse5} from 'hast-util-to-parse5'\nimport {htmlVoidElements} from 'html-void-elements'\nimport {Parser, Token, TokenizerMode, html} from 'parse5'\nimport {pointEnd, pointStart} from 'unist-util-position'\nimport {visit} from 'unist-util-visit'\nimport {webNamespaces} from 'web-namespaces'\nimport {zwitch} from 'zwitch'\n\n// Node types associated with MDX.\n// <https://github.com/mdx-js/mdx/blob/8a56312/packages/mdx/lib/node-types.js>\nconst knownMdxNames = new Set([\n 'mdxFlowExpression',\n 'mdxJsxFlowElement',\n 'mdxJsxTextElement',\n 'mdxTextExpression',\n 'mdxjsEsm'\n])\n\n/** @type {ParserOptions} */\nconst parseOptions = {sourceCodeLocationInfo: true, scriptingEnabled: false}\n\n/**\n * Pass a hast tree through an HTML parser, which will fix nesting, and turn\n * raw nodes into actual nodes.\n *\n * @param {Nodes} tree\n * Original hast tree to transform.\n * @param {Options | null | undefined} [options]\n * Configuration (optional).\n * @returns {Nodes}\n * Parsed again tree.\n */\nexport function raw(tree, options) {\n const document = documentMode(tree)\n /** @type {(node: Nodes, state: State) => undefined} */\n const one = zwitch('type', {\n handlers: {root, element, text, comment, doctype, raw: handleRaw},\n unknown\n })\n\n /** @type {State} */\n const state = {\n parser: document\n ? new Parser(parseOptions)\n : Parser.getFragmentParser(undefined, parseOptions),\n handle(node) {\n one(node, state)\n },\n stitches: false,\n options: options || {}\n }\n\n one(tree, state)\n resetTokenizer(state, pointStart())\n\n const p5 = document ? state.parser.document : state.parser.getFragment()\n const result = fromParse5(p5, {\n // To do: support `space`?\n file: state.options.file\n })\n\n if (state.stitches) {\n visit(result, 'comment', function (node, index, parent) {\n const stitch = /** @type {Stitch} */ (/** @type {unknown} */ (node))\n if (stitch.value.stitch && parent && index !== undefined) {\n /** @type {Array<RootContent>} */\n const siblings = parent.children\n // @ts-expect-error: assume the stitch is allowed.\n siblings[index] = stitch.value.stitch\n return index\n }\n })\n }\n\n // Unpack if possible and when not given a `root`.\n if (\n result.type === 'root' &&\n result.children.length === 1 &&\n result.children[0].type === tree.type\n ) {\n return result.children[0]\n }\n\n return result\n}\n\n/**\n * Transform all nodes\n *\n * @param {Array<RootContent>} nodes\n * hast content.\n * @param {State} state\n * Info passed around about the current state.\n * @returns {undefined}\n * Nothing.\n */\nfunction all(nodes, state) {\n let index = -1\n\n /* istanbul ignore else - invalid nodes, see rehypejs/rehype-raw#7. */\n if (nodes) {\n while (++index < nodes.length) {\n state.handle(nodes[index])\n }\n }\n}\n\n/**\n * Transform a root.\n *\n * @param {Root} node\n * hast root node.\n * @param {State} state\n * Info passed around about the current state.\n * @returns {undefined}\n * Nothing.\n */\nfunction root(node, state) {\n all(node.children, state)\n}\n\n/**\n * Transform an element.\n *\n * @param {Element} node\n * hast element node.\n * @param {State} state\n * Info passed around about the current state.\n * @returns {undefined}\n * Nothing.\n */\nfunction element(node, state) {\n startTag(node, state)\n\n all(node.children, state)\n\n endTag(node, state)\n}\n\n/**\n * Transform a text.\n *\n * @param {Text} node\n * hast text node.\n * @param {State} state\n * Info passed around about the current state.\n * @returns {undefined}\n * Nothing.\n */\nfunction text(node, state) {\n // Allow `DATA` through `PLAINTEXT`,\n // but when hanging in a tag for example,\n // switch back to `DATA`.\n // Note: `State` is not exposed by `parse5`, so these numbers are fragile.\n // See: <https://github.com/inikulin/parse5/blob/46cba43/packages/parse5/lib/tokenizer/index.ts#L58>\n if (state.parser.tokenizer.state > 4) {\n state.parser.tokenizer.state = 0\n }\n\n /** @type {CharacterToken} */\n const token = {\n type: Token.TokenType.CHARACTER,\n chars: node.value,\n location: createParse5Location(node)\n }\n\n resetTokenizer(state, pointStart(node))\n // @ts-expect-error: private.\n // type-coverage:ignore-next-line\n state.parser.currentToken = token\n // @ts-expect-error: private.\n // type-coverage:ignore-next-line\n state.parser._processToken(state.parser.currentToken)\n}\n\n/**\n * Transform a doctype.\n *\n * @param {Doctype} node\n * hast doctype node.\n * @param {State} state\n * Info passed around about the current state.\n * @returns {undefined}\n * Nothing.\n */\nfunction doctype(node, state) {\n /** @type {DoctypeToken} */\n const token = {\n type: Token.TokenType.DOCTYPE,\n name: 'html',\n forceQuirks: false,\n publicId: '',\n systemId: '',\n location: createParse5Location(node)\n }\n\n resetTokenizer(state, pointStart(node))\n // @ts-expect-error: private.\n // type-coverage:ignore-next-line\n state.parser.currentToken = token\n // @ts-expect-error: private.\n // type-coverage:ignore-next-line\n state.parser._processToken(state.parser.currentToken)\n}\n\n/**\n * Transform a stitch.\n *\n * @param {Nodes} node\n * unknown node.\n * @param {State} state\n * Info passed around about the current state.\n * @returns {undefined}\n * Nothing.\n */\nfunction stitch(node, state) {\n // Mark that there are stitches, so we need to walk the tree and revert them.\n state.stitches = true\n\n /** @type {Nodes} */\n const clone = cloneWithoutChildren(node)\n\n // Recurse, because to somewhat handle `[<x>]</x>` (where `[]` denotes the\n // passed through node).\n if ('children' in node && 'children' in clone) {\n // Root in root out.\n const fakeRoot = /** @type {Root} */ (\n raw({type: 'root', children: node.children}, state.options)\n )\n clone.children = fakeRoot.children\n }\n\n // Hack: `value` is supposed to be a string, but as none of the tools\n // (`parse5` or `hast-util-from-parse5`) looks at it, we can pass nodes\n // through.\n comment({type: 'comment', value: {stitch: clone}}, state)\n}\n\n/**\n * Transform a comment (or stitch).\n *\n * @param {Comment | Stitch} node\n * hast comment node.\n * @param {State} state\n * Info passed around about the current state.\n * @returns {undefined}\n * Nothing.\n */\nfunction comment(node, state) {\n /** @type {string} */\n // @ts-expect-error: we pass stitches through.\n const data = node.value\n\n /** @type {CommentToken} */\n const token = {\n type: Token.TokenType.COMMENT,\n data,\n location: createParse5Location(node)\n }\n resetTokenizer(state, pointStart(node))\n // @ts-expect-error: private.\n // type-coverage:ignore-next-line\n state.parser.currentToken = token\n // @ts-expect-error: private.\n // type-coverage:ignore-next-line\n state.parser._processToken(state.parser.currentToken)\n}\n\n/**\n * Transform a raw node.\n *\n * @param {Raw} node\n * hast raw node.\n * @param {State} state\n * Info passed around about the current state.\n * @returns {undefined}\n * Nothing.\n */\nfunction handleRaw(node, state) {\n // Reset preprocessor:\n // See: <https://github.com/inikulin/parse5/blob/6f7ca60/packages/parse5/lib/tokenizer/preprocessor.ts#L18-L31>.\n state.parser.tokenizer.preprocessor.html = ''\n // @ts-expect-error: private.\n // type-coverage:ignore-next-line\n state.parser.tokenizer.preprocessor.pos = -1\n // @ts-expect-error: private.\n // type-coverage:ignore-next-line\n state.parser.tokenizer.preprocessor.lastGapPos = -2\n // @ts-expect-error: private.\n // type-coverage:ignore-next-line\n state.parser.tokenizer.preprocessor.gapStack = []\n // @ts-expect-error: private.\n // type-coverage:ignore-next-line\n state.parser.tokenizer.preprocessor.skipNextNewLine = false\n // @ts-expect-error: private.\n // type-coverage:ignore-next-line\n state.parser.tokenizer.preprocessor.lastChunkWritten = false\n state.parser.tokenizer.preprocessor.endOfChunkHit = false\n // @ts-expect-error: private.\n // type-coverage:ignore-next-line\n state.parser.tokenizer.preprocessor.isEol = false\n\n // Now pass `node.value`.\n setPoint(state, pointStart(node))\n state.parser.tokenizer.write(node.value, false)\n // @ts-expect-error: private.\n // type-coverage:ignore-next-line\n state.parser.tokenizer._runParsingLoop()\n\n // Character references hang, so if we ended there, we need to flush\n // those too.\n // We reset the preprocessor as if the document ends here.\n // Then one single call to the relevant state does the trick, parse5\n // consumes the whole token.\n\n // Note: `State` is not exposed by `parse5`, so these numbers are fragile.\n // See: <https://github.com/inikulin/parse5/blob/46cba43/packages/parse5/lib/tokenizer/index.ts#L58>\n // Note: a change to `parse5`, which breaks this, was merged but not released.\n // Investigate when it is.\n if (\n state.parser.tokenizer.state === 72 /* NAMED_CHARACTER_REFERENCE */ ||\n state.parser.tokenizer.state === 78 /* NUMERIC_CHARACTER_REFERENCE_END */\n ) {\n // @ts-expect-error: private.\n // type-coverage:ignore-next-line\n state.parser.tokenizer.preprocessor.lastChunkWritten = true\n /** @type {number} */\n // @ts-expect-error: private.\n // type-coverage:ignore-next-line\n const cp = state.parser.tokenizer._consume()\n // @ts-expect-error: private.\n // type-coverage:ignore-next-line\n state.parser.tokenizer._callState(cp)\n }\n}\n\n/**\n * Crash on an unknown node.\n *\n * @param {unknown} node_\n * unknown node.\n * @param {State} state\n * Info passed around about the current state.\n * @returns {undefined}\n * Never.\n */\nfunction unknown(node_, state) {\n const node = /** @type {Nodes} */ (node_)\n\n if (\n state.options.passThrough &&\n state.options.passThrough.includes(node.type)\n ) {\n stitch(node, state)\n } else {\n let extra = ''\n\n if (knownMdxNames.has(node.type)) {\n extra =\n \". It looks like you are using MDX nodes with `hast-util-raw` (or `rehype-raw`). If you use this because you are using remark or rehype plugins that inject `'html'` nodes, then please raise an issue with that plugin, as its a bad and slow idea. If you use this because you are using markdown syntax, then you have to configure this utility (or plugin) to pass through these nodes (see `passThrough` in docs), but you can also migrate to use the MDX syntax\"\n }\n\n throw new Error('Cannot compile `' + node.type + '` node' + extra)\n }\n}\n\n/**\n * Reset the tokenizer of a parser.\n *\n * @param {State} state\n * Info passed around about the current state.\n * @param {Point | undefined} point\n * Point.\n * @returns {undefined}\n * Nothing.\n */\nfunction resetTokenizer(state, point) {\n setPoint(state, point)\n\n // Process final characters if they’re still there after hibernating.\n /** @type {CharacterToken} */\n // @ts-expect-error: private.\n // type-coverage:ignore-next-line\n const token = state.parser.tokenizer.currentCharacterToken\n\n if (token && token.location) {\n token.location.endLine = state.parser.tokenizer.preprocessor.line\n token.location.endCol = state.parser.tokenizer.preprocessor.col + 1\n token.location.endOffset = state.parser.tokenizer.preprocessor.offset + 1\n // @ts-expect-error: private.\n // type-coverage:ignore-next-line\n state.parser.currentToken = token\n // @ts-expect-error: private.\n // type-coverage:ignore-next-line\n state.parser._processToken(state.parser.currentToken)\n }\n\n // Reset tokenizer:\n // See: <https://github.com/inikulin/parse5/blob/6f7ca60/packages/parse5/lib/tokenizer/index.ts#L187-L223>.\n // Especially putting it back in the `data` state is useful: some elements,\n // like textareas and iframes, change the state.\n // See GH-7.\n // But also if broken HTML is in `raw`, and then a correct element is given.\n // See GH-11.\n // @ts-expect-error: private.\n // type-coverage:ignore-next-line\n state.parser.tokenizer.paused = false\n // @ts-expect-error: private.\n // type-coverage:ignore-next-line\n state.parser.tokenizer.inLoop = false\n\n // Note: don’t reset `state`, `inForeignNode`, or `lastStartTagName`, we\n // manually update those when needed.\n state.parser.tokenizer.active = false\n // @ts-expect-error: private.\n // type-coverage:ignore-next-line\n state.parser.tokenizer.returnState = TokenizerMode.DATA\n // @ts-expect-error: private.\n // type-coverage:ignore-next-line\n state.parser.tokenizer.charRefCode = -1\n // @ts-expect-error: private.\n // type-coverage:ignore-next-line\n state.parser.tokenizer.consumedAfterSnapshot = -1\n // @ts-expect-error: private.\n // type-coverage:ignore-next-line\n state.parser.tokenizer.currentLocation = null\n // @ts-expect-error: private.\n // type-coverage:ignore-next-line\n state.parser.tokenizer.currentCharacterToken = null\n // @ts-expect-error: private.\n // type-coverage:ignore-next-line\n state.parser.tokenizer.currentToken = null\n // @ts-expect-error: private.\n // type-coverage:ignore-next-line\n state.parser.tokenizer.currentAttr = {name: '', value: ''}\n}\n\n/**\n * Set current location.\n *\n * @param {State} state\n * Info passed around about the current state.\n * @param {Point | undefined} point\n * Point.\n * @returns {undefined}\n * Nothing.\n */\nfunction setPoint(state, point) {\n if (point && point.offset !== undefined) {\n /** @type {Location} */\n const location = {\n startLine: point.line,\n startCol: point.column,\n startOffset: point.offset,\n endLine: -1,\n endCol: -1,\n endOffset: -1\n }\n\n // @ts-expect-error: private.\n // type-coverage:ignore-next-line\n state.parser.tokenizer.preprocessor.lineStartPos = -point.column + 1 // Looks weird, but ensures we get correct positional info.\n state.parser.tokenizer.preprocessor.droppedBufferSize = point.offset\n state.parser.tokenizer.preprocessor.line = point.line\n // @ts-expect-error: private.\n // type-coverage:ignore-next-line\n state.parser.tokenizer.currentLocation = location\n }\n}\n\n/**\n * Emit a start tag.\n *\n * @param {Element} node\n * Element.\n * @param {State} state\n * Info passed around about the current state.\n * @returns {undefined}\n * Nothing.\n */\nfunction startTag(node, state) {\n const tagName = node.tagName.toLowerCase()\n\n // Ignore tags if we’re in plain text.\n if (state.parser.tokenizer.state === TokenizerMode.PLAINTEXT) return\n\n resetTokenizer(state, pointStart(node))\n\n const current = state.parser.openElements.current\n let ns = 'namespaceURI' in current ? current.namespaceURI : webNamespaces.html\n\n if (ns === webNamespaces.html && tagName === 'svg') {\n ns = webNamespaces.svg\n }\n\n const result = toParse5(\n // Shallow clone to not delve into `children`: we only need the attributes.\n {...node, children: []},\n {space: ns === webNamespaces.svg ? 'svg' : 'html'}\n )\n\n /** @type {TagToken} */\n const tag = {\n type: Token.TokenType.START_TAG,\n tagName,\n tagID: html.getTagID(tagName),\n // We always send start and end tags.\n selfClosing: false,\n ackSelfClosing: false,\n // Always element.\n /* c8 ignore next */\n attrs: 'attrs' in result ? result.attrs : [],\n location: createParse5Location(node)\n }\n\n // The HTML parsing algorithm works by doing half of the state management in\n // the tokenizer and half in the parser.\n // We can’t use the tokenizer here, as we don’t have strings.\n // So we act *as if* the tokenizer emits tokens:\n\n // @ts-expect-error: private.\n // type-coverage:ignore-next-line\n state.parser.currentToken = tag\n // @ts-expect-error: private.\n // type-coverage:ignore-next-line\n state.parser._processToken(state.parser.currentToken)\n\n // …but then we still need a bunch of work that the tokenizer would normally\n // do, such as:\n\n // Set a tag name, similar to how the tokenizer would do it.\n state.parser.tokenizer.lastStartTagName = tagName\n\n // `inForeignNode` is correctly set by the parser.\n}\n\n/**\n * Emit an end tag.\n *\n * @param {Element} node\n * Element.\n * @param {State} state\n * Info passed around about the current state.\n * @returns {undefined}\n * Nothing.\n */\nfunction endTag(node, state) {\n const tagName = node.tagName.toLowerCase()\n // Do not emit closing tags for HTML void elements.\n if (\n !state.parser.tokenizer.inForeignNode &&\n htmlVoidElements.includes(tagName)\n ) {\n return\n }\n\n // Ignore tags if we’re in plain text.\n if (state.parser.tokenizer.state === TokenizerMode.PLAINTEXT) return\n\n resetTokenizer(state, pointEnd(node))\n\n /** @type {TagToken} */\n const tag = {\n type: Token.TokenType.END_TAG,\n tagName,\n tagID: html.getTagID(tagName),\n selfClosing: false,\n ackSelfClosing: false,\n attrs: [],\n location: createParse5Location(node)\n }\n\n // The HTML parsing algorithm works by doing half of the state management in\n // the tokenizer and half in the parser.\n // We can’t use the tokenizer here, as we don’t have strings.\n // So we act *as if* the tokenizer emits tokens:\n\n // @ts-expect-error: private.\n // type-coverage:ignore-next-line\n state.parser.currentToken = tag\n // @ts-expect-error: private.\n // type-coverage:ignore-next-line\n state.parser._processToken(state.parser.currentToken)\n\n // …but then we still need a bunch of work that the tokenizer would normally\n // do, such as:\n\n // Switch back to the data state after alternative states that don’t accept\n // tags:\n if (\n // Current element is closed.\n tagName === state.parser.tokenizer.lastStartTagName &&\n // `<textarea>` and `<title>`\n (state.parser.tokenizer.state === TokenizerMode.RCDATA ||\n // `<iframe>`, `<noembed>`, `<style>`, `<xmp>`\n state.parser.tokenizer.state === TokenizerMode.RAWTEXT ||\n // `<script>`\n state.parser.tokenizer.state === TokenizerMode.SCRIPT_DATA)\n ) {\n state.parser.tokenizer.state = TokenizerMode.DATA\n }\n}\n\n/**\n * Check if `node` represents a whole document or a fragment.\n *\n * @param {Nodes} node\n * hast node.\n * @returns {boolean}\n * Whether this represents a whole document or a fragment.\n */\nfunction documentMode(node) {\n const head = node.type === 'root' ? node.children[0] : node\n return Boolean(\n head &&\n (head.type === 'doctype' ||\n (head.type === 'element' && head.tagName.toLowerCase() === 'html'))\n )\n}\n\n/**\n * Get a `parse5` location from a node.\n *\n * @param {Nodes | Stitch} node\n * hast node.\n * @returns {Location}\n * `parse5` location.\n */\nfunction createParse5Location(node) {\n const start = pointStart(node) || {\n line: undefined,\n column: undefined,\n offset: undefined\n }\n const end = pointEnd(node) || {\n line: undefined,\n column: undefined,\n offset: undefined\n }\n\n /** @type {Record<keyof Location, number | undefined>} */\n const location = {\n startLine: start.line,\n startCol: start.column,\n startOffset: start.offset,\n endLine: end.line,\n endCol: end.column,\n endOffset: end.offset\n }\n\n // @ts-expect-error: unist point values can be `undefined` in hast, which\n // `parse5` types don’t want.\n return location\n}\n\n/**\n * @template {Nodes} NodeType\n * Node type.\n * @param {NodeType} node\n * Node to clone.\n * @returns {NodeType}\n * Cloned node, without children.\n */\nfunction cloneWithoutChildren(node) {\n return 'children' in node\n ? structuredClone({...node, children: []})\n : structuredClone(node)\n}\n","import { useEffect, useMemo } from \"react\";\nimport ReactMarkdown from \"react-markdown\";\nimport { AddressDescription, CopyBox, ExternalLink, SpinnerLoader, theme } from \"@cede/ds\";\nimport { Any, ApiPermissions } from \"@cede/types\";\nimport {\n buildStringWithRequirements,\n checkRequiredPermissionStatement,\n extractPages,\n hasPermissionsWithProxy,\n hasPermissionsWithoutProxy,\n makeFirstLettersCapital,\n redirectInBrowser,\n} from \"@cede/utils\";\nimport { useDependencies } from \"../../../hooks\";\nimport { ExtensionImage } from \"../../ExtensionImage/ExtensionImage\";\nimport { ExtensionImageProps } from \"../../ExtensionImage/types\";\nimport { TutorialAffiliation } from \"../TutorialAffiliation/TutorialAffiliation\";\nimport { TutorialBox } from \"../TutorialBox/TutorialBox\";\nimport { TutorialInfo } from \"../TutorialInfo/TutorialInfo\";\nimport { TutorialList } from \"../TutorialList/TutorialList\";\nimport { TutorialModal } from \"../TutorialModal/TutorialModal\";\nimport { TutorialModalProps } from \"../TutorialModal/types\";\nimport { TutorialVideoCard } from \"../TutorialVideoCard/TutorialVideoCard\";\nimport { ActionProps, TutorialReaderProps, UseTutoModalManagerState } from \"./types\";\nimport { Cancel, CheckCircle } from \"@mui/icons-material\";\nimport { Box, CardActionArea, Divider, Theme, Typography, useTheme } from \"@mui/material\";\nimport { useMutation } from \"@tanstack/react-query\";\nimport rehypeRaw from \"rehype-raw\";\nimport { create } from \"zustand\";\n\nconst DEFAULT_DATA = {};\nconst DEFAULT_ACTION_PROPS = {};\nconst REHYPE_PLUGINS = [rehypeRaw] as Any[];\n\n// Manage the active modal\nconst useTutoModalManager = create<UseTutoModalManagerState>((set) => ({\n activeModal: null,\n setActiveModal: (activeModal: string | null) => set({ activeModal }),\n}));\n\n// Wrap the TutorialModal to manage the active modal\nconst WrappedTutorialModal = (props: TutorialModalProps & { id: string }) => {\n const { activeModal, setActiveModal } = useTutoModalManager();\n return <TutorialModal {...props} onClose={() => setActiveModal(null)} open={props.id === activeModal} />;\n};\n\n// Wrap the ExtensionImage to manage the active modal\nconst WrappedExtensionImage = (\n props: ExtensionImageProps & { modal?: string; type?: string; data: Record<string, string | number>; width?: string },\n) => {\n const { setActiveModal } = useTutoModalManager();\n if (!props.modal && !props.type) {\n return <ExtensionImage {...props} />;\n }\n // Specific case for Coinbase\n else if (props.type === \"allowedValueToSend\") {\n return (\n <Box\n sx={{\n position: \"relative\",\n }}\n >\n <Typography\n sx={{\n zIndex: 999,\n position: \"absolute\",\n bottom: \"25%\",\n left: \"15%\",\n color: theme.palette.common.black,\n fontSize: theme.custom.textSize.medium,\n }}\n >\n {props.data[\"allowedValueToSend\"]}\n </Typography>\n <ExtensionImage {...props} />\n </Box>\n );\n }\n return (\n <CardActionArea onClick={() => setActiveModal(props.modal as string)}>\n <ExtensionImage {...props} />\n </CardActionArea>\n );\n};\n\n// Render children as a string or as a component\nfunction renderChildren(children: Any) {\n if (!Array.isArray(children)) {\n children = [children];\n }\n return children.map((child: Any, index: number) => {\n if (typeof child === \"string\") {\n return (\n <Typography key={child.toString() + `${index}`} component={\"p\"} sx={{ display: \"inline\" }}>\n {child}\n </Typography>\n );\n }\n\n return child;\n });\n}\n\nfunction renderChildrenAsString(children: Any) {\n if (!Array.isArray(children)) {\n return children;\n }\n return children.join(\"\");\n}\n\nfunction divTransformer(\n componentType: string,\n properties: Record<string, Any>,\n theme: Theme,\n permissions: ApiPermissions[],\n) {\n // Check the permissions of the current process to display the section or not\n if (properties.require && !checkRequiredPermissionStatement(properties.require, permissions)) return null;\n switch (componentType) {\n case \"section\": {\n const title = buildStringWithRequirements(properties.title, permissions);\n return (\n <TutorialBox title={title} help={properties.help}>\n {renderChildren(properties.children)}\n </TutorialBox>\n );\n }\n case \"info\": {\n return <TutorialInfo>{renderChildren(properties.children)}</TutorialInfo>;\n }\n case \"video\": {\n return (\n <TutorialVideoCard\n title={renderChildrenAsString(properties.children)}\n onClick={() => redirectInBrowser(properties.url)}\n />\n );\n }\n case \"copy\": {\n return (\n <Box marginTop={theme.custom.smallGutterMargin}>\n <CopyBox value={properties.value}>{renderChildren(properties.children)}</CopyBox>\n </Box>\n );\n }\n case \"modal\": {\n return <WrappedTutorialModal data-testid=\"tutorial-modal\" {...(properties as Any)} />;\n }\n case \"affiliation\": {\n return <TutorialAffiliation {...(properties as Any)}></TutorialAffiliation>;\n }\n case \"divider\": {\n return (\n <Divider\n sx={{\n marginY: \"1rem\",\n color: theme.palette.cedeComponentHr,\n }}\n />\n );\n }\n case \"withBackground\": {\n return (\n <Box\n sx={{\n \"paddingY\": theme.custom.smallGutterMargin,\n \"paddingX\": theme.custom.smallGutterMargin,\n \"marginTop\": theme.custom.smallGutterMargin,\n \"backgroundColor\": theme.palette.background.lightPaper,\n \"borderRadius\": theme.custom.mediumBoxRadius,\n \"color\": `${theme.palette.text.primary} !important`,\n \"textTransform\": \"none\",\n \"gap\": theme.custom.smallGutterMargin,\n \"fontSize\": theme.custom.textSize.medium,\n \"overflowX\": \"scroll\",\n \"::-webkit-scrollbar\": {\n display: \"none\",\n },\n }}\n >\n {renderChildren(properties.children)}\n </Box>\n );\n }\n default: {\n return <div {...properties} />;\n }\n }\n}\n\nexport function reactMarkdownComponents(\n theme: Theme,\n folder: string,\n permissions: ApiPermissions[],\n accountPermissions: ApiPermissions[],\n exchangeId: string,\n actionProps: ActionProps,\n data: Record<string, string | number> = {},\n requireTwoKeys: boolean,\n onLinkClick?: (url: string, trackedType: string | undefined) => void,\n) {\n const cex = exchangeId.toLowerCase();\n\n return {\n div: ({ node, ...props }: Any) => {\n const componentType = props.type;\n const identifier = props.identifier || \"\";\n const actions = actionProps[identifier];\n\n // Used for nested elements to handle the componentType and the properties\n if (!componentType) {\n const properties = (Array.isArray(node.children) ? node.children[0] : node.children) || {};\n const { type, ...rest } = properties;\n\n return divTransformer(type, { ...rest, ...actions, children: props.children }, theme, permissions);\n }\n\n return divTransformer(\n componentType,\n {\n ...props,\n ...actions,\n },\n theme,\n permissions,\n );\n },\n a: (props: Any) => {\n if (data[props.custom]) {\n return (\n <ExternalLink\n label={renderChildrenAsString(props.children)}\n url={String(data[props.custom])}\n onClick={() => onLinkClick?.(String(data[props.custom]), props.tracked)}\n />\n );\n } else {\n return (\n <ExternalLink\n label={renderChildrenAsString(props.children)}\n url={String(props.href)}\n onClick={() => onLinkClick?.(String(props.href), props.tracked)}\n />\n );\n }\n },\n img: (props: Any) => {\n // Check the permissions of the current process to display the image or not\n if (!checkRequiredPermissionStatement(props.require, permissions)) return null;\n\n return (\n <WrappedExtensionImage\n alt={props.alt}\n path={`tutorials/${folder}/` + props.src.replace(\"./\", \"\")}\n width={props.width}\n canZoom={props.zoom}\n icon={props.icon}\n modal={props.modal}\n iconColor={props.iconcolor}\n type={props[\"data-type\"]}\n data={data}\n />\n );\n },\n strong: (props: Any) => {\n return (\n <Typography\n component={\"strong\"}\n sx={{\n display: \"inline\",\n fontWeight: \"bold\",\n ...(props.color === \"disabled\"\n ? {\n color: theme.palette.text.secondary,\n }\n : {}),\n }}\n >\n {props.children}\n </Typography>\n );\n },\n h1: (props: Any) => {\n return (\n <Typography\n component={\"p\"}\n fontSize=\"16px\"\n sx={{\n display: \"inline\",\n ...(props.color === \"disabled\"\n ? {\n color: theme.palette.text.secondary,\n }\n : {}),\n }}\n style={props.style || {}}\n >\n {props.children}\n </Typography>\n );\n },\n p: (props: Any) => {\n return (\n <Typography\n component={\"p\"}\n sx={{\n display: \"inline\",\n ...(props.color === \"disabled\"\n ? {\n color: theme.palette.text.secondary,\n }\n : {}),\n }}\n style={props.style || {}}\n >\n {props.children}\n </Typography>\n );\n },\n span: (props: Any) => {\n if (props.type === \"var\") {\n let value = \"\";\n if (props.name === \"permissions\") {\n value = permissions.map((perm) => makeFirstLettersCapital(perm)).join(\"/\");\n } else if (props.name === \"step\") {\n if (requireTwoKeys) {\n // Account does not exist\n if (accountPermissions.length === 0) {\n // If the permissions are proxyfied, we'll have another step (1/2), else it's (1/1)\n value = hasPermissionsWithProxy(permissions, cex) ? \"(1/2)\" : \"(1/1)\";\n } else {\n // Account exists\n // Permissions are both proxyfied and whitelisted, so it's the second step\n if (hasPermissionsWithProxy(permissions, cex) && hasPermissionsWithoutProxy(permissions, cex)) {\n value = \"(2/2)\";\n // We're just updating/adding a single key\n } else {\n value = \"(1/1)\";\n }\n }\n } else {\n value = \"(1/1)\";\n }\n } else if (props.name === \"publicKey\") {\n return (\n <Typography component={\"span\"} sx={{ display: \"inline\", color: theme.palette.text.primary }}>\n {data[props.name]}\n </Typography>\n );\n } else if (props.name === \"address-description\") {\n return <AddressDescription name={String(data.name)} address={String(data.address)} />;\n } else if (props.name === \"address-verification\") {\n switch (data.status) {\n case \"waiting\":\n return <SpinnerLoader />;\n case \"success\":\n return <CheckCircle color={\"success\"} style={{ width: \"30px\", height: \"30px\" }} />;\n case \"failed\":\n return <Cancel color={\"error\"} style={{ width: \"30px\", height: \"30px\" }} />;\n default:\n return <></>;\n }\n } else if (data[props.name]) {\n return (\n <Typography component={\"span\"} sx={{ display: \"inline\", color: theme.palette.primary.main }}>\n {data[props.name]}\n </Typography>\n );\n }\n\n if (!value) return null;\n return (\n <Typography component={\"span\"} sx={{ display: \"inline\" }}>\n {value}\n </Typography>\n );\n }\n return null;\n },\n ul: (props: Any) => {\n if (props.require && !checkRequiredPermissionStatement(props.require, permissions)) return null;\n return <TutorialList strippable={props.strippable}>{props.children}</TutorialList>;\n },\n ol: (props: Any) => {\n return (\n <Box\n component={\"p\"}\n sx={{ textAlign: \"left\", display: \"flex\", alignItems: \"baseline\", gap: theme.custom.smallGutterMargin }}\n {...props}\n >\n <Typography component={\"p\"}>{props.start ?? \"1\"}.</Typography>\n {props.children}\n </Box>\n );\n },\n i: (props: Any) => {\n return (\n <Typography component={\"p\"} sx={{ display: \"inline\", fontStyle: \"italic\" }}>\n {props.children}\n </Typography>\n );\n },\n };\n}\n\nexport function TutorialReader({\n mdContent,\n currentPage = 0,\n setMaxPage,\n folder,\n permissions,\n accountPermissions,\n exchangeId,\n actionProps = DEFAULT_ACTION_PROPS,\n data = DEFAULT_DATA,\n ...props\n}: TutorialReaderProps) {\n const { useSupportedExchanges, useBackgroundHandler } = useDependencies();\n const { backgroundHandler } = useBackgroundHandler();\n const theme = useTheme();\n const { supportedExchangesById } = useSupportedExchanges();\n const { mutateAsync: trackEvent } = useMutation({\n mutationFn: async (params: { link: string; exchangeId: string }) => {\n if (!backgroundHandler) return;\n\n return backgroundHandler.trackLink({ link: params.link, exchangeId: params.exchangeId });\n },\n });\n const { mutateAsync: openTabWithHelper } = useMutation({\n mutationFn: async (params: { link: string; exchangeId: string; permissions: ApiPermissions[] }) => {\n if (!backgroundHandler) return;\n\n return backgroundHandler.openPageWithHelper({ link: params.link, permissions, exchangeId: params.exchangeId });\n },\n });\n\n const onLinkClick = async (link: string, trackedType: string | undefined) => {\n if (!trackedType) return;\n\n event?.preventDefault();\n\n if (trackedType === \"helper\") {\n await openTabWithHelper({ link, exchangeId, permissions });\n } else {\n await trackEvent({ link, exchangeId });\n }\n };\n\n const pages = useMemo(() => {\n if (!mdContent) return [];\n return extractPages(mdContent, !setMaxPage ? true : false);\n }, [mdContent]);\n // mdContent, folder, exchangeId\n\n const components = useMemo(() => {\n const mdComponents = reactMarkdownComponents(\n theme,\n folder,\n permissions,\n accountPermissions,\n exchangeId,\n actionProps,\n data,\n supportedExchangesById[exchangeId]?.requiresTwoKeys ?? false,\n onLinkClick,\n );\n return mdComponents;\n }, [data, supportedExchangesById, exchangeId, permissions, accountPermissions]);\n\n useEffect(() => {\n setMaxPage?.(pages.length - 1);\n }, [pages]);\n\n return (\n <Box\n display={\"flex\"}\n flexDirection=\"column\"\n gap={\"30px\"}\n height=\"100%\"\n {...props}\n sx={{\n \"& > p:first-of-type, & > p:first-of-type span\": {\n fontWeight: \"bold\",\n },\n ...props.sx,\n }}\n >\n <ReactMarkdown\n rehypePlugins={REHYPE_PLUGINS}\n components={components}\n children={typeof pages === \"object\" ? pages[currentPage] ?? \"\" : pages || \"\"}\n />\n </Box>\n );\n}\n","/**\n * @typedef {import('hast').Root} Root\n * @typedef {import('hast-util-raw').Options} RawOptions\n * @typedef {import('vfile').VFile} VFile\n */\n\n/**\n * @typedef {Omit<RawOptions, 'file'>} Options\n * Configuration.\n */\n\nimport {raw} from 'hast-util-raw'\n\n/**\n * Parse the tree (and raw nodes) again, keeping positional info okay.\n *\n * @param {Options | null | undefined} [options]\n * Configuration (optional).\n * @returns\n * Transform.\n */\nexport default function rehypeRaw(options) {\n /**\n * @param {Root} tree\n * Tree.\n * @param {VFile} file\n * File.\n * @returns {Root}\n * New tree.\n */\n return function (tree, file) {\n // Assume root in -> root out.\n const result = /** @type {Root} */ (raw(tree, {...options, file}))\n return result\n }\n}\n","import { ApiPermissions } from \"@cede/types\";\nimport { checkRequiredPermissionStatement } from \"./checkRequiredPermissionStatement\";\n\nexport function buildStringWithRequirements(value: string, permissions: ApiPermissions[]) {\n const regex = /{(.*?)}/g;\n const matches = value.match(regex);\n matches?.forEach((match) => {\n try {\n const require = match.match(/{require(.*?)}/g);\n if (!require?.length) throw new Error();\n const requireStatement = require[0]?.match(/\\[(.*?)\\]/g);\n if (!requireStatement?.length) throw new Error();\n const requiredPermissions = requireStatement[0]?.replace(\"[\", \"\")?.replace(\"]\", \"\");\n if (!checkRequiredPermissionStatement(requiredPermissions, permissions)) throw new Error();\n const conditionalValue = match.match(/=(.*?)\\}/g);\n if (!conditionalValue?.length) throw new Error();\n value = value.replace(match, conditionalValue[0]?.replace(\"=\", \"\")?.replace(\"}\", \"\") || \"\");\n } catch (error) {\n value = value.replace(match, \"\");\n }\n });\n return value;\n}\n","import { Any, SendWidgetProps, WidgetType } from \"@cede/types\";\nimport type { DefaultDependenciesWithFeatures } from \"../contexts\";\nimport { TokenPlatformBalance } from \"./balances/tokenPlatformBalance\";\nimport { useDependencies as useDependenciesSdk } from \"@cedelabs/react-sdk/src\";\n\nexport function useDependencies<\n T extends {\n // @TODO: Make this working with both store backgroundHandler and provider types, BackgroundHandlerType is private\n backgroundHandler: Any;\n widgetProps?: SendWidgetProps;\n widgetType?: WidgetType;\n useCefiBalances?: () => {\n balances: TokenPlatformBalance[];\n isLoading: boolean;\n };\n },\n>() {\n return useDependenciesSdk<T & DefaultDependenciesWithFeatures>();\n}\n","export type TokenInfo = {\n token: string;\n minimumQuantity: number;\n fee: number;\n};\n\nexport type KrakenWithdrawalNetworkDto = {\n asset: string;\n method: string;\n network: string;\n minimum: string;\n}[];\n\nexport enum ExchangeStatus {\n Ok = \"ok\",\n Shutdown = \"shutdown\",\n Error = \"error\",\n Maintenance = \"maintenance\",\n Unknown = \"unknown\",\n}\n\nexport type ExchangeNameStatus = {\n name: string;\n id: string;\n status: ExchangeStatus;\n};\n\nexport type StandardizedChain = {\n icid: string;\n ecid: string;\n icn: string;\n chainId: number | undefined;\n};\n\nexport type ExchangeTokenNetworks = Record<string, string[]>;\n\nexport type ExchangeTokenNetworksData = {\n networks: ExchangeTokenNetworks;\n updatedAt: string;\n};\n\nexport type ExchangeTokenNetworksResponse = {\n data: ExchangeTokenNetworksData;\n};\n\nexport type ExchangeStatusesUpdateResponse = {\n hasBackOnline: Array<string>;\n hasGoneOffline: Array<string>;\n};\n","import { UntrustedApi } from \"../untrustedApi\";\n\nexport type ProviderHandler = UntrustedApi & { isReady: boolean; isReal: boolean; isServerSide?: boolean };\n\nexport enum HandlerType {\n TRUSTED_API = \"TRUSTED_API\",\n UNTRUSTED_PROVIDER_API = \"provider\",\n}\n","export enum CefiServices {\n CARD = \"card\",\n STAKING = \"staking\",\n}\n","export enum ConnectionStatus {\n ONLINE = \"online\",\n OFFLINE = \"offline\",\n NOT_GOOD = \"notGood\",\n RECONNECTION_REQUIRED = \"reconnectionRequired\",\n}\n","import { Any } from \"../fakeTypes\";\n\nexport interface AssetPair {\n pairName: string;\n baseAsset: string;\n quoteAsset: string;\n}\nexport declare function isTicker(obj: Any): obj is AssetPair;\n\n/**\n * A ticker is a report of the current market prices for an individual currency pair\n */\nexport interface MarketTicker {\n baseAsset: string;\n quoteAsset: string;\n time: number;\n avgPrice: string;\n originExchange: string;\n}\n\nexport interface AssetPairResponse<AssetPairDtoArray> {\n assetPairs: AssetPairDtoArray[];\n}\n\nexport interface TickersResponse<TickerDto> {\n tickers: TickerDto[];\n}\n\nexport enum OrderCategory {\n TAKER = \"taker\",\n MAKER = \"maker\",\n}\n\nexport enum ApiPermissions {\n TRADE = \"trade\",\n READ = \"read\",\n WITHDRAW = \"withdraw\",\n}\n\nexport type AvailablePermissionType = {\n type: ApiPermissions;\n title: string;\n content: string;\n};\n\nexport type AddressStructure = {\n currency: string; // currency code\n network?: string; // a list of deposit/withdraw networks, ERC20, TRC20, BSC20 (see below)\n address: string; // address in terms of requested currency\n tag?: string; // tag / memo / paymentId for particular currencies (XRP, XMR, ...)\n info: Any; // raw unparsed data as returned from the exchange\n id?: string; // unique identifier of the address (if any)\n};\n\nexport * from \"./MarketNetwork\";\nexport * from \"./CefiServices\";\nexport * from \"./ConnectionStatus\";\nexport * from \"./Ledger\";\n","export enum Env {\n DEMO = \"DEMO\",\n TEST = \"TEST\",\n PROD = \"PROD\",\n}\n\nexport enum EnvMessage {\n DEMO = \"You're using the Demo vault.\",\n PROD = \"You're using the Real vault.\",\n PROD_NEW_VAULT = \"No real vault found, please create one\",\n DEMO_NEW_VAULT_CREATED = \"This is a Demo Vault, go to the menu to switch to a real vault\",\n}\n\nexport enum ViewEnvironment {\n POPUP = \"popup\",\n WIDGET = \"widget\",\n TAB = \"tab\",\n}\n","import { CedeErrors } from \"./types\";\n\nexport enum ErrorPlaceholder {\n VAULT_AND_ACCOUNT = \"{vault_and_account}\",\n VAULT = \"{vault}\",\n ACCOUNT = \"{account}\",\n}\n\nexport const cedeErrors: CedeErrors = {\n // transport related errors\n rpc: {\n parse: {\n code: -32700,\n message: \"JSON parsing error\",\n description: \"{data.description}\",\n documentation: \"An error occurred on the server while parsing the JSON text\",\n },\n invalidRequest: {\n code: -32600,\n message: \"Invalid request object\",\n description: \"{data.description}\",\n documentation: \"The JSON sent is not a valid Request object\",\n },\n methodNotFound: {\n code: -32601,\n message: \"Method not found\",\n description: \"{data.description}\",\n documentation: \"The method does not exist / is not available\",\n },\n invalidParams: {\n code: -32602,\n message: \"Invalid method parameter(s)\",\n description: \"{data.description}\",\n documentation: \"Provided parameters do not match the method signature\",\n },\n internal: {\n code: -32603,\n message: \"Internal JSON-RPC error\",\n description: \"{data.description}\",\n documentation: \"Something went wrong in the communication engine of cede.store\",\n },\n },\n\n defaultError: {\n code: 1000,\n message: \"cede.store default error\",\n description: `${ErrorPlaceholder.VAULT_AND_ACCOUNT}: An error occurred`,\n documentation: \"Something went wrong in cede.store\",\n },\n\n // ccxt library specific errors\n ccxt: {\n baseError: {\n code: 3000,\n message: \"CEX error\",\n description: `${ErrorPlaceholder.ACCOUNT}: {error.message}`,\n documentation: \"The exchange has a system abnormality. The original exchange error is provided.\",\n },\n requestExpired: {\n code: 3001,\n message: \"Request expired\",\n description: `${ErrorPlaceholder.ACCOUNT}: request expired. This happens when ccxt throttler drops pending requests`,\n documentation: \"The request has expired\",\n },\n // general: {\n // cexError: {\n // code: 3001,\n // message: \"CEX error\",\n // description: `${ErrorPlaceholder.ACCOUNT}: {error.message}`,\n // documentation: \"The exchange has a system abnormality. The original exchange error is provided.\",\n // },\n // cexApiAuthError: {\n // code: 3002,\n // message: \"CEX API authentication error\",\n // description: `${ErrorPlaceholder.ACCOUNT}: {error.message}`,\n // documentation: \"Invalid API key or permission denied\",\n // },\n // cexNotAvailable: {\n // code: 3003,\n // message: \"CEX is not available\",\n // description: `${ErrorPlaceholder.ACCOUNT}: {error.message}`,\n // documentation: \"Exchange is not available, please try again later\",\n // },\n // cexOnMaintenance: {\n // code: 3004,\n // message: \"CEX on maintenance\",\n // description: `${ErrorPlaceholder.ACCOUNT}: {error.message}`,\n // documentation: \"Exchange is on maintenance, please try again later\",\n // },\n // invalidNonce: {\n // code: 3005,\n // message: \"Invalid nonce\",\n // description: `${ErrorPlaceholder.ACCOUNT}: {error.message}`,\n // documentation:\n // \"The API keys seem to be used by another app. The user should create new API keys and use them only for cede.store.\",\n // },\n // notSupported: {\n // code: 3006,\n // message: \"Not supported\",\n // description: `${ErrorPlaceholder.ACCOUNT}: {error.message}`,\n // documentation: \"This error is raised if the endpoint is not offered/not supported by the exchange API\",\n // },\n // },\n // order: {\n // orderNotFound: {\n // code: 3100,\n // message: \"Could not find the order\",\n // description: `${ErrorPlaceholder.ACCOUNT}: {error.message}`,\n // documentation: \"Raised when you are trying to fetch or cancel a non-existent order\",\n // },\n // orderImmediatelyFillable: {\n // code: 3101,\n // message: \"The order is immediately fillable\",\n // description: `${ErrorPlaceholder.ACCOUNT}: {error.message}`,\n // documentation:\n // \"Raised when the order you're trying to place would immediately be triggered and filled, and not be placed on the order book\",\n // },\n // orderNotFillable: {\n // code: 3102,\n // message: \"The order is not fillable\",\n // description: `${ErrorPlaceholder.ACCOUNT}: {error.message}`,\n // documentation: \"Unable to fill this order\",\n // },\n // invalidOrder: {\n // code: 3103,\n // message: \"The order is invalid\",\n // description: `${ErrorPlaceholder.ACCOUNT}: {error.message}`,\n // documentation: \"Raised when the order you're trying to place is not valid\",\n // },\n // duplicateOrderId: {\n // code: 3104,\n // message: \"Two or more orders have identical ids\",\n // description: `${ErrorPlaceholder.ACCOUNT}: {error.message}`,\n // documentation: \"Raised when two or more orders have identical ids\",\n // },\n // },\n // request: {\n // badRequest: {\n // code: 3200,\n // message: \"Bad request\",\n // description: `${ErrorPlaceholder.ACCOUNT}: {error.message}`,\n // documentation: \"The request is malformed, the content of the request is not valid\",\n // },\n // requestTimeout: {\n // code: 3201,\n // message: \"Request timeout\",\n // description: `${ErrorPlaceholder.ACCOUNT}: {error.message}`,\n // documentation: \"The request timed out\",\n // },\n // badResponse: {\n // code: 3202,\n // message: \"Bad response\",\n // description: `${ErrorPlaceholder.ACCOUNT}: {error.message}`,\n // documentation: \"The response from the exchange is malformed\",\n // },\n // rateLimitExceeded: {\n // code: 3203,\n // message: \"Rate limit exceeded\",\n // description: `${ErrorPlaceholder.ACCOUNT}: {error.message}`,\n // documentation: \"The request rate limit has been exceeded\",\n // },\n // argumentsRequired: {\n // code: 3204,\n // message: \"Method requires some arguments\",\n // description: `${ErrorPlaceholder.ACCOUNT}: {error.message}`,\n // documentation: \"The method requires some arguments\",\n // },\n // nullResponse: {\n // code: 3205,\n // message: \"Null response\",\n // description: `${ErrorPlaceholder.ACCOUNT}: {error.message}`,\n // documentation: \"The response from the exchange is null\",\n // },\n // ddosProtection: {\n // code: 3206,\n // message: \"DDOS protection\",\n // description: `${ErrorPlaceholder.ACCOUNT}: {error.message}`,\n // documentation: \"The request has been rejected by the exchange due to DDOS protection\",\n // },\n // badSymbol: {\n // code: 3207,\n // message: \"Bad symbol\",\n // description: `${ErrorPlaceholder.ACCOUNT}: {error.message}`,\n // documentation: \"The symbol is not valid\",\n // },\n // },\n // account: {\n // accountSuspended: {\n // code: 3300,\n // message: \"Account suspended\",\n // description: `${ErrorPlaceholder.ACCOUNT}: {error.message}`,\n // documentation: \"The user account is suspended\",\n // },\n // permissionDenied: {\n // code: 3301,\n // message: \"Permission denied\",\n // description: `${ErrorPlaceholder.ACCOUNT}: {error.message}`,\n // documentation: \"The user doesn't have enough permission to perform the action\",\n // },\n // insufficientFunds: {\n // code: 3302,\n // message: \"Insufficient funds\",\n // description: `${ErrorPlaceholder.ACCOUNT}: {error.message}`,\n // documentation: \"The user doesn't have enough funds to perform the action\",\n // },\n // invalidAddress: {\n // code: 3303,\n // message: \"Invalid address\",\n // description: `${ErrorPlaceholder.ACCOUNT}: {error.message}`,\n // documentation: \"The address is not valid\",\n // },\n // addressPending: {\n // code: 3304,\n // message: \"Address pending\",\n // description: `${ErrorPlaceholder.ACCOUNT}: {error.message}`,\n // documentation: \"The address is pending\",\n // },\n // cancelPending: {\n // code: 3305,\n // message: \"Cancel pending\",\n // description: `${ErrorPlaceholder.ACCOUNT}: {error.message}`,\n // documentation: \"The cancel is pending\",\n // },\n // },\n },\n\n internal: {\n general: {\n badPassword: {\n code: 4000,\n message: \"Bad password\",\n description: \"Bad password\",\n documentation: \"The password provided is incorrect\",\n },\n },\n misc: {\n jobs: {\n fetchTransactionHistoryError: {\n code: 4100,\n message: \"Transaction history cannot be fetched through the job\",\n description: \"An error happened while fetching the transaction history\",\n documentation: \"An error happened while fetching the transaction history\",\n },\n getLastTxUpdateError: {\n code: 4101,\n message: \"Last transaction update cannot be fetched through the job\",\n description: \"An error happened while getting the last transaction update\",\n documentation: \"An error happened while getting the last transaction update\",\n },\n },\n cancelTrackingError: {\n code: 4102,\n message: \"Tracking cannot be cancelled\",\n description: \"An error happened while cancelling the tracking\",\n documentation: \"An error happened while cancelling the tracking\",\n },\n },\n vault: {\n accountAlreadyExists: {\n code: 4200,\n message: \"Vault account already exists\",\n description: \"The exchange account has already been added to the vault\",\n documentation: \"The exchange account has already been added to the vault\",\n },\n nameExists: {\n code: 4201,\n message: \"Vault name already exists\",\n description: `The vault ${ErrorPlaceholder.VAULT} already exists`,\n documentation: \"Raised when trying to create the vault with same name as the existent vault\",\n },\n nameCannotBeGenerated: {\n code: 4202,\n message: \"Vault name cannot be generated\",\n description: \"The vault name cannot be generated\",\n documentation: \"Raised when there is an error in the vault name generation\",\n },\n accountKeysInconsistent: {\n code: 4203,\n message: \"Account keys inconsistent. They may not relate to the same account\",\n description: \"The Api Keys are not related to the same CEX account\",\n documentation:\n \"Raised when the user is trying to a second pair of API keys for the 2 key CEX which are not related to the same account\",\n },\n cannotUnlockStorage: {\n code: 4204,\n message: \"The storage cannot be unlocked\",\n description: \"Cede Store cannot unlock the storage\",\n documentation: \"Raised when the storage cannot be unlocked\",\n },\n cannotPersisted: {\n code: 4205,\n message: \"Vaults cannot persisted\",\n description: \"The vaults cannot be persisted\",\n documentation: \"Raised when the vaults cannot be persisted\",\n },\n creationError: {\n code: 4206,\n message: \"Vault creation error\",\n description: `${ErrorPlaceholder.VAULT}: An error happened while creating the vault`,\n documentation: \"Raised when an error happened while creating the vault\",\n },\n deletionError: {\n code: 4207,\n message: \"Vault deletion error\",\n description: `${ErrorPlaceholder.VAULT}: An error happened while deleting the vault`,\n documentation: \"Raised when an error happened while deleting the vault\",\n },\n checkApiCredentialsError: {\n code: 4208,\n message: \"API check credentials failure\",\n description: `${ErrorPlaceholder.VAULT}: An error happened while checking the API credentials`,\n documentation: \"Raised when an error happened while checking the API credentials when adding a new CEX\",\n },\n updateApiCredentialsError: {\n code: 4209,\n message: \"API update credentials failure\",\n description: `${ErrorPlaceholder.VAULT_AND_ACCOUNT}: An error happened while updating the API credentials`,\n documentation: \"Raised when an error happened while updating the API credentials when updating a CEX\",\n },\n updateCexSettingsError: {\n code: 4210,\n message: \"Vault CEX update settings error\",\n description: `${ErrorPlaceholder.VAULT_AND_ACCOUNT}: An error happened while updating the CEX settings`,\n documentation: \"Raised when an error happened while updating the CEX settings when updating a CEX\",\n },\n accountCreationError: {\n code: 4211,\n message: \"Vault account creation error\",\n description: `${ErrorPlaceholder.VAULT}: An error happened while creating the account`,\n documentation: \"Raised when an error happened while creating the account\",\n },\n accountUpdateError: {\n code: 4212,\n message: \"Vault account update error\",\n description: `${ErrorPlaceholder.VAULT_AND_ACCOUNT}: An error happened while updating the account`,\n documentation: \"Raised when an error happened while updating the account\",\n },\n globalUnlockError: {\n code: 4213,\n message: \"Vault cannot be unlocked\",\n description: \"An error happened while unlocking the vaults\",\n documentation: \"Raised when an error happened while unlocking globally the vaults\",\n },\n notWhitelisted: {\n code: 4214,\n message: \"IP not whitelisted for API keys\",\n description: \"IP addresses weren't whitelisted. Please, whitelist them first.\",\n documentation: \"Raised when cede.store proxy IP was not whitelisted on the CEX side\",\n },\n accountKeyAlreadyExists: {\n code: 4215,\n message: \"API key already exists\",\n description: \"The API Key already exists\",\n documentation:\n \"Raised when the user is trying to update a key using one that already exists in the vault for the same CEX\",\n },\n whitelistCheckFail: {\n code: 4216,\n message: \"Whitelist check failed\",\n description: \"Whitelist check failed. Please try again later.\",\n documentation: \"Raised when the whitelist check failed\",\n },\n },\n },\n\n // cede.store background errors\n cede: {\n general: {\n dispatcherDefaultError: {\n code: 5000,\n message: \"Dispatcher default error\",\n description: \"An error occured while {data.humanizedAction}\",\n documentation: \"An error occured while executing the method.\",\n },\n approvalNotFound: {\n code: 5001,\n message: \"Approval not found\",\n description: \"The approval {data.approvalId} isn't found\",\n documentation: \"The approval isn't found. This can happen if the approval is not in pending approvals array\",\n },\n vaultNotAllowedToAccess: {\n code: 5002,\n message: \"Vault is not allowed to access\",\n description: \"You aren't allowed to access to this vault\",\n documentation: \"You aren't allowed to access to this vault\",\n },\n accountNotPermission: {\n code: 5003,\n message: \"Account does not have sufficient permissions to perform this action\",\n description: `The account ${ErrorPlaceholder.ACCOUNT} doesn't have the permission to {data.permission} : ${ErrorPlaceholder.VAULT}`,\n documentation:\n \"The account doesn't have the permission to perform this action. If the account is read-only, you can't perform trades/withdrawals\",\n },\n notConnected: {\n code: 5005,\n message: \"Not connected\",\n description: \"Connect with cede.store to perfom this request\",\n documentation: \"Connect with cede.store to perfom this request\",\n },\n notInitialized: {\n code: 5006,\n message: \"Not initialized\",\n description: \"The user must set up at least one vault in the cede.store first\",\n documentation:\n \"Raised when cede.store has been downloaded but not initialized. The user must set up at least one vault in the cede.store first\",\n },\n notSupportedFeature: {\n code: 5008,\n message: `This feature is not supported by the ${ErrorPlaceholder.ACCOUNT}`,\n description: `This feature is not supported by the ${ErrorPlaceholder.ACCOUNT}`,\n documentation: \"Verify if the feature is supported by the CEX\",\n },\n userDeniedApproval: {\n code: 5009,\n message: \"User denied approval\",\n description: \"User denied approval\",\n documentation: \"User denied approval\",\n },\n accountInvalidSetOfPermissions: {\n code: 5010,\n message: \"Invalid set of permissions\",\n description: \"The account has an invalid set of permissions\",\n documentation: \"The account has an invalid set of permissions\",\n },\n methodNotAvailableForThisExchange: {\n code: 5011,\n message: \"Method not available\",\n description: \"This method is not available on this exchange\",\n documentation:\n \"The provider was requested to perform an action on an exchange that does not support the action\",\n },\n invalidPermissionsSetup: {\n code: 5012,\n message: \"Invalid key permissions\",\n description: \"Missing API permissions, please reimport your API key with the valid permissions\",\n documentation: \"API key permissions aren't valid, you should add missing permissions to the key and try again\",\n },\n },\n vault: {\n notFound: {\n code: 5100,\n message: \"Vault not found\",\n description: \"The vault was not found\",\n documentation: \"The vault was not found. Verify the vauld id\",\n },\n accountNotFound: {\n code: 5101,\n message: \"Vault account not found\",\n // TODO make sure the error handler puts accountId in the context\n description: `${ErrorPlaceholder.VAULT}: The account ${ErrorPlaceholder.ACCOUNT} was not found`,\n documentation: \"The account was not found. Verify the account name\",\n },\n fetchVaultsError: {\n code: 5102,\n message: \"Vaults cannot be retrieved\",\n description: \"An error happened while retrieveing the vaults\",\n documentation: \"Raised when the vaults cannot be retrieved from cede.store\",\n },\n generateAccountNameError: {\n code: 5103,\n message: \"An error occured while generating the account name\",\n description: \"An error occured while generating the account name\",\n documentation: \"The generate account name method shouldn't fail\",\n },\n validateAccountNameError: {\n code: 5104,\n message: \"An error occured while validating the account name\",\n description: \"An error occured while validating the account name\",\n documentation: \"The validate account name method shouldn't fail\",\n },\n updateAccountNameError: {\n code: 5105,\n message: \"An error occured while updating the account name\",\n description: \"An error occured while updating the account name\",\n documentation: \"Verify if the old account name is valid because we are using it to update the account\",\n },\n getAccountError: {\n code: 5106,\n message: \"An error occured while getting the account\",\n description: \"An error occured while getting the account\",\n documentation: \"Verify if the account id is valid\",\n },\n getAccountsError: {\n code: 5107,\n message: \"An error occured while getting the accounts\",\n description: \"An error occured while getting the accounts\",\n documentation: \"Verify if the vault id is valid\",\n },\n notOAuthAccount: {\n code: 5108,\n message: \"The account is not an OAuth account\",\n description: \"The account is not an OAuth account\",\n documentation:\n \"This error is raised when we try to perform an action on an OAuth account and the account is not using OAuth\",\n },\n accountAlreadyContainsApiKeys: {\n code: 5109,\n message: \"The account already contains these API keys\",\n description: \"The account already contains these API keys\",\n documentation:\n \"The account already contains the API keys added for different permissions. The CEX requires different keys for different permissions.\",\n },\n },\n exchange: {\n // public data, such as available tickers, tokens, etc.\n public: {\n fetchTickerFromTokenError: {\n code: 5201,\n message: \"Cannot fetch ticker from token\",\n description: `${ErrorPlaceholder.VAULT_AND_ACCOUNT}: An error happened while fetching tickers`,\n documentation: \"Raised when the ticker for a given token symbol cannot be retrieved from the CEX\",\n },\n serverDown: {\n code: 5204,\n message: \"Exchange's server is down\",\n description: `The exchange's server is down`,\n documentation: \"Raised when the exchange server status is offline.\",\n },\n underMaintenance: {\n code: 5205,\n message: \"Exchange is under maintenance\",\n description: `The exchange is under maintenance`,\n documentation: \"Raised when the exchange server status is under maintenance.\",\n },\n supportedTokensError: {\n code: 5206,\n message: \"Supported tokens not found\",\n description: `${ErrorPlaceholder.ACCOUNT}: The supported tokens were not found`,\n documentation: \"Raised when getSupportedTokens returns an error.\",\n },\n unavailableInThisCountry: {\n code: 5207,\n message: \"The exchange is not available in this country\",\n description: `${ErrorPlaceholder.ACCOUNT}: The exchange is not available in this country`,\n documentation: \"Raised when the exchange is not available in this country\",\n },\n },\n // fungible and non-fungible balances (tokens, nfts, fiat)\n balances: {\n getBalancesError: {\n code: 5210,\n message: \"Cannot retrieve vault portfolio from CEX\",\n description: `${ErrorPlaceholder.VAULT_AND_ACCOUNT}: An error happened while fetching the portfolio from the CEX`,\n documentation: \"Raised when the portfolio cannot be retrieved from the CEX\",\n },\n getNftFromCexError: {\n code: 5211,\n message: \"NFTs cannot be fetched from CEX\",\n description: `${ErrorPlaceholder.VAULT_AND_ACCOUNT}: An error happened while fetching the NFTs`,\n documentation: \"Raised when the NFTs cannot be retrieved from the CEX\",\n },\n },\n transactions: {\n getVaultTransactionsError: {\n code: 5220,\n message: \"Cannot retrieve vault transactions\",\n description: `${ErrorPlaceholder.VAULT_AND_ACCOUNT}: An error happened while fetching the vault transactions`,\n documentation: \"Raised when the transactions cannot be retrieved from the CEX\",\n },\n },\n deposit: {\n getDepositableTokensError: {\n code: 5230,\n message: \"Cannot get depositable tokens\",\n description: `${ErrorPlaceholder.VAULT_AND_ACCOUNT}: An error happened while fetching the depositable tokens`,\n documentation: \"Raised when the depositable tokens cannot be retrieved from the CEX\",\n },\n getDepositAddressError: {\n code: 5231,\n message: \"Cannot get deposit address\",\n description: `${ErrorPlaceholder.VAULT_AND_ACCOUNT}: An error happened while fetching the deposit address`,\n documentation: \"Raised when the deposit address cannot be retrieved from the CEX\",\n },\n },\n trade: {\n postOrderError: {\n code: 5240,\n message: \"Error encountered while posting order\",\n description: `${ErrorPlaceholder.VAULT_AND_ACCOUNT}: An error occured with the market order`,\n documentation: \"Raised when the order cannot be posted to the CEX\",\n },\n fetchMarketPairsError: {\n code: 5241,\n message: \"Market pairs cannot be fetched\",\n description: `${ErrorPlaceholder.VAULT_AND_ACCOUNT}: An error happened while fetching the market pairs`,\n documentation: \"Raised when the market pairs cannot be retrieved from the CEX\",\n },\n fetchAllTickersFromSymbolsError: {\n code: 5242,\n message: \"Tickers cannot be fetched from symbols\",\n description: `${ErrorPlaceholder.VAULT_AND_ACCOUNT}: An error happened while fetching the tickers`,\n documentation: \"Raised when the tickers cannot be retrieved from the CEX\",\n },\n orderNotFound: {\n code: 5243,\n message: \"Order not found\",\n description: `${ErrorPlaceholder.VAULT_AND_ACCOUNT}: The order {data.orderId} was not found`,\n documentation: \"Raised when the order cannot be found on the CEX\",\n },\n minAmountError: {\n code: 5244,\n message: \"Minimum amount error\",\n description: `${ErrorPlaceholder.VAULT_AND_ACCOUNT}: The amount should be greater than {data.minAmount}`,\n documentation: \"Raised when the amount is too low to execute the trade\",\n },\n tickerNotFound: {\n code: 5245,\n message: \"Ticker not found\",\n description: `${ErrorPlaceholder.VAULT_AND_ACCOUNT}: The ticker for {data.pairSymbol} was not found`,\n documentation: \"Raised when the ticker cannot be found on the CEX\",\n },\n invalidOrderRequest: {\n code: 5246,\n message: \"Invalid order request\",\n description: `${ErrorPlaceholder.VAULT_AND_ACCOUNT}: The order request is invalid: {data.error}`,\n documentation:\n \"This error is triggered by invalid order requests. It could arise due to inappropriate data inputs, such as a price set to zero. To streamline error handling, we avoid generating overly specific errors for each scenario. This approach assumes that proper data validation is performed within the dApp, ensuring user inputs are correct.\",\n },\n fetchMarketPriceError: {\n code: 5247,\n message: \"Market rates cannot be fetched\",\n description: `${ErrorPlaceholder.VAULT_AND_ACCOUNT}: An error happened while fetching market rates`,\n documentation: \"Raised when market rates cannot be retrieved from the CEX\",\n },\n getTradePathError: {\n code: 5248,\n message: \"Trade path cannot be fetched\",\n description: `${ErrorPlaceholder.VAULT_AND_ACCOUNT}: An error happened while fetching trade path`,\n documentation: \"Raised when trade path cannot be retrieved from the CEX\",\n },\n },\n network: {\n networkNotFound: {\n code: 5250,\n message: \"Network not found\",\n description: \"The network {data.network} isn't found\",\n documentation: \"Raised when the network isn't found\",\n },\n networkNotProvided: {\n code: 5251,\n message: \"Network not provided\",\n description: \"The network is not provided\",\n documentation: \"Raised when the network is not provided, but required\",\n },\n networksNotStandardized: {\n code: 5252,\n message: \"Networks are not standardized\",\n description: \"The networks are not standardized\",\n documentation: \"Raised when the networks are not standardized\",\n },\n },\n withdrawal: {\n tokenToDefiAddressError: {\n code: 5260,\n message: \"Error encountered while withdrawing token to DeFi address\",\n description: `${ErrorPlaceholder.VAULT_AND_ACCOUNT}: An error happened while withdrawing to a DeFi address`,\n documentation: \"Raised when the withdrawal cannot be posted to DeFi address\",\n },\n tokenToAnotherCexError: {\n code: 5261,\n message: \"Error encountered while withdrawing token to another CEX\",\n description: `${ErrorPlaceholder.VAULT_AND_ACCOUNT}: An error happened while withdrawing to another CEX`,\n documentation: \"Raised when the withdrawal cannot be posted to the CEX\",\n },\n notFound: {\n code: 5262,\n message: \"Withdrawal not found\",\n description: \"The withdrawal with id {data.withdrawalId} isn't found\",\n documentation: \"Raised when the withdrawal isn't found\",\n },\n infoError: {\n code: 5263,\n message: \"Withdrawal info error\",\n description: `${ErrorPlaceholder.VAULT_AND_ACCOUNT}: Withdrawal info not found`,\n documentation: \"Raised when the withdrawal info cannot be retrieved from the CEX\",\n },\n invalidAddress: {\n code: 5268,\n message: \"Invalid address\",\n description: `${ErrorPlaceholder.VAULT_AND_ACCOUNT}: Invalid address`,\n documentation: \"Raised when the address is invalid\",\n },\n },\n coinbase: {\n accountNotFound: {\n code: 5270,\n message: \"Coinbase account not found\",\n description: `${ErrorPlaceholder.ACCOUNT}: The account for currency {data.currency} was not found`,\n documentation: \"Raised when the account for currency cannot be found on the CEX\",\n },\n },\n exchangeInstance: {\n notFound: {\n code: 5293,\n message: \"Exchange instance not found\",\n description: \"The exchange instance was not found\",\n documentation: \"Raised when the exchange instance was not found\",\n },\n },\n authentication: {\n oauthFlowInterruptedByTheUser: {\n code: 5301,\n message: \"Connection has been interrupted. Please try again.\",\n description: \"Connection has been interrupted. Please try again.\",\n documentation:\n \"Raised when the OAuth flow is interrupted by the user (e.g. user closes the authorization popup)\",\n },\n },\n nft: {\n notSupportedNfts: {\n code: 5400,\n message: \"NFTs are not supported\",\n description: `${ErrorPlaceholder.ACCOUNT}: NFTs aren't supported.`,\n documentation: \"NFTs aren't supported on the given exchange\",\n },\n },\n },\n },\n api: {\n invalidRequest: {\n code: 6000,\n message: \"Error encountered when sending a request to the api\",\n description: \"Request failed\",\n documentation: \"Raised when an API request failed\",\n },\n },\n};\n","export const userFacingMessages = {\n LOCKED_FOR_INACTIVITY: \"Cede.store has been automatically locked due to a period of inactivity.\",\n MESSAGE_SENT_TO_CEDE_TEAM: \"Message sent to Cede\\u00A0Labs team\",\n FEEDBACK_ERROR: \"Error when sending feedback\",\n API_KEY: {\n ALREADY_EXISTS: \"API keys already exist.\",\n CREDENTIALS_INCORRECT: \"API credentials are incorrect\",\n SUCCESSFULLY: (endOfSentence: string) => `API key successfully ${endOfSentence}`,\n REMOVED: `API key successfully removed`,\n VERIFYING_VALIDITY: \"Just verifying the validity of your keys…\",\n },\n VAULT: {\n CANT_DELETE_SINGLE: \"You can't delete your single vault.\",\n REQUIRE_NON_EMPTY: \"You must have at least one account in your vault to perform this action.\",\n CREATED_SUCCESSFULLY: \"Vault created successfully\",\n NOT_FOUND: \"Vault not found\",\n },\n TRANSACTION: {\n TOKEN_FROM_NOT_FOUND: \"Token from not found for this transaction\",\n ACCOUNT_NOT_FOUND: \"Account not found for this transaction\",\n ORDER_NOT_FOUND: \"Order not found for this transaction\",\n },\n ACCOUNT: {\n NOT_FOUND: \"Account not found\",\n NOT_FOUND_WITH_NAME: (accountName: string) => `Account ${accountName} not found`,\n RECONNECT: (accountName: string) => `Please, reconnect your ${accountName} account`,\n DELETED: (accountName: string) => `${accountName} has been deleted.`,\n RECONNECTION_REQUIRED: \"Reconnection required\",\n },\n MARKET_NOT_FOUND: (symbol?: string | null) => `Market ${symbol} not found`,\n CANCELLATION_FAILED: \"The cancellation failed\",\n OAUTH: {\n FAILED: \"OAuth2 Connection failed, please try again.\",\n SUCCESSFULLY_SETUP: `OAuth successfully setup`,\n },\n UNKNOWN_ERROR: \"Oups, something went wrong.\",\n PRICES: {\n CANT_FETCH: \"Sorry, we can't fetch the prices.\",\n },\n SEND: {\n YOUR_FUND_SAFE: \"Your funds are safe\",\n CONFIRM_EMAIL: (\n exchangeId: string,\n ) => `To process, please confirm the email from ${exchangeId} sent to your email address linked\n with your ${exchangeId} account.`,\n },\n WIDGETS: {\n SEND: {\n LOGIN_LOADING_FIRST_LINE: `Select the vault you want to connect to from cede.store extension.`,\n LOGIN_LOADING_SECOND_LINE: `You will be transferring your assets from the CEX accounts connected in the vault.`,\n TRANSACTION_LOADING_FIRST_LINE: `Confirm the transaction on the cede.store popup.`,\n TRANSACTION_LOADING_SECOND_LINE: `Make sure all the parameters are correct before confirming.`,\n TRANSFER_CEX_ASSETS: `Transfer your CEX assets to your blockchain address from any dApp`,\n CONNECT: `Connect`,\n CONNECT_WALLET: `Connect wallet`,\n CANT_FETCH_BUNDLE: `Could not connect to Cede.store. Please make sure you have the latest version of the extension.`,\n },\n TRADE_SEND: {\n ACTIONS_LABEL: \"What actions you will validate:\",\n WITHDRAW_CURRENCY: (destCurrency: string, recipientAddress: string, network: string) =>\n `Withdraw ${destCurrency} to ${recipientAddress} on ${network}`,\n RECEIVE_CURRENCY: (destCurrency: string) => `In the end, you will receive ${destCurrency} in your wallet`,\n MODAL_CONFIRM: \"Continue\",\n PERFORM_TRADE_PATH: (tradePathLabel: string, network: string) =>\n `You will need to perform the following ${tradePathLabel} trade(s) in order to withdraw on the ${network} network.`,\n NO_TRADE_PATH: \"There is no trade path available for the destination currency. Please select another currency.\",\n CONFIRM_TX: (number: number) => `Confirm Transaction ${number}`,\n FINISH: \"Finish\",\n ERROR: \"Error, try again later\",\n },\n TRADE_SQUARE: {\n ACTIONS_LABEL: \"What actions you will validate:\",\n PERFORM_TRADE_PATH: (tradePathLabel: string, destinationTokenSymbol: string) =>\n `You will need to perform the following ${tradePathLabel} trade(s) in order to get ${destinationTokenSymbol} token.`,\n INFO_DETAILS: (cexName: string, tokenFrom: string, tokenTo: string) => [\n `${cexName} `,\n \"does not support \",\n `a ${tokenFrom}/${tokenTo} pair. However, cede.store `,\n \"has found the best price route. \",\n \"You are going to \",\n `automatically perform a series of trades to receive ${tokenTo}`,\n ],\n CLOSE: \"Close\",\n },\n TRADE: {\n CONNECT: `Connect`,\n TRANSACTION_LOADING_FIRST_LINE: `Confirm the transaction on the cede.store popup.`,\n TRANSACTION_LOADING_SECOND_LINE: `Make sure all the parameters are correct before confirming.`,\n CANT_FETCH_BUNDLE: `Could not connect to Cede.store. Please make sure you have the latest version of the extension.`,\n WELCOME_MESSAGE: `Your non-custodial gateway to your CeFi liquidity from any dApp`,\n },\n },\n EXCHANGES_STATUSES: {\n SINGLE_DOWN: (cexName: string) => `${cexName} server is temporarily down, please try again later.`,\n TWO_DOWN: (firstName: string, secondName: string) =>\n `${firstName} and ${secondName} servers are temporarily down, please try again later.`,\n THREE_DOWN: (firstName: string, secondName: string, thirdName: string) =>\n `${firstName}, ${secondName} and ${thirdName} servers are temporarily down, please try again later.`,\n\n SINGLE_BACK_ONLINE: (cexName: string) => `${cexName} server is back available.`,\n TWO_BACK_ONLINE: (firstName: string, secondName: string) =>\n `${firstName} and ${secondName} servers are back available.`,\n THREE_BACK_ONLINE: (firstName: string, secondName: string, thirdName: string) =>\n `${firstName}, ${secondName} and ${thirdName} servers are back available.`,\n UNDER_MAINTENANCE: \"Under maintenance\",\n ADD_PERMISSION: \"Add permission +\",\n TEMPORARILY_UNAVAILABLE: \"Temporarily unavailable\",\n TEMPORARILY_UNAVAILABLE_IN_YOUR_COUNTRY: \"Temporarily unavailable in your country\",\n },\n STATE_MACHINE_ROUTER: {\n ERRORS: {\n MISSING_PARAMETERS: \"Missing parameters from the redirection.\",\n TWO_KEY_NOT_SUPPORTED: (exchangeId: string) => `The exchange ${exchangeId} doesn't support 2 key system.`,\n },\n },\n READ_ONLY_ONBOARDING: {\n TITLE: \"Specific server-side onboarding\",\n PERMISSION_HINT: \"Trade and withdraw permissions are not available for this specific onboarding\",\n },\n AVAILABLE_SOON: \"Available soon\",\n};\n","import { Any } from \"../fakeTypes\";\n\nexport type WidgetEventMessage<T = Any> = {\n type: string;\n payload: T;\n};\n\nexport enum WidgetWindowEvents {\n UPDATE_EXCHANGE = \"update-exchange\",\n UPDATE_PAIR = \"update-pair\",\n}\n\nexport const isWidgetEventMessage = (message: Any): message is WidgetEventMessage => {\n return message && typeof message === \"object\" && \"type\" in message && \"payload\" in message;\n};\n\nexport type WidgetEventUpdatePairPayload = {\n pairSymbol: string;\n precision: number;\n} | null;\n\nexport type WidgetEventUpdateExchangePayload = {\n exchangeId: string;\n accountId: string;\n} | null;\n","// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type Any = any;\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport type TestSelector = Function;\nexport type JSONLikeObject =\n | undefined\n | string\n | number\n | boolean\n | null\n | { [x: string]: JSONLikeObject }\n | Array<JSONLikeObject>;\n\nexport function checkObject(obj: JSONLikeObject): obj is { [x: string]: JSONLikeObject } {\n return !!obj && Object.keys(obj).length > 0;\n}\n\nexport function checkArray(obj: JSONLikeObject): obj is Array<JSONLikeObject> {\n return Array.isArray(obj);\n}\n\nexport function toObject(obj: JSONLikeObject): { [x: string]: JSONLikeObject } {\n if (!checkObject(obj)) return {};\n return obj as unknown as { [x: string]: JSONLikeObject };\n}\n\nexport function toArray(obj: JSONLikeObject): Array<JSONLikeObject> {\n if (!checkArray(obj)) return [];\n return obj as unknown as Array<JSONLikeObject>;\n}\n","import { ApiPermissions } from \"../cefi\";\n\nexport type FeaturesKeys = \"send\" | \"trade\" | \"receive\" | \"limit_trade\";\n\nexport const featureKeyToPermission: Record<FeaturesKeys, ApiPermissions> = {\n send: ApiPermissions.WITHDRAW,\n trade: ApiPermissions.TRADE,\n receive: ApiPermissions.READ,\n limit_trade: ApiPermissions.TRADE,\n};\n","import { ExchangeStatus } from \"../api\";\nimport { ApiPermissions, MarketNetwork } from \"../cefi\";\nimport { InternalChainId } from \"../chains\";\nimport { Any } from \"../fakeTypes\";\nimport { Timeframe } from \"../trade\";\nimport { AccountId } from \"../vault\";\n\nexport type VaultId = string;\n\nexport type Pong = \"pong\";\n\nexport type Transaction<\n F extends CefiInfoTx | DefiInfoTx = CefiInfoTx | DefiInfoTx,\n T extends CefiInfoTx | DefiInfoTx = CefiInfoTx | DefiInfoTx,\n> = {\n from: F;\n to: T;\n type: TxType;\n pairSymbol?: string; // Only for trades\n partnerId?: number;\n};\n\nexport type TemporaryTransaction = Transaction & {\n isTemp: boolean;\n};\n\nexport type StoreTransaction = Transaction & {\n id: string; // Unique identifier for the transaction whatever the type is or the exchange is\n vaultId: VaultId;\n timestamp: number;\n};\n\nexport enum TxStatus {\n PENDING = \"pending\",\n OK = \"ok\",\n CANCELLED = \"cancelled\",\n FAILED = \"failed\",\n}\n\nexport type TxType = \"transfer\" | \"swap\" | \"deposit\" | \"withdrawal\" | \"order\";\n\nexport type PrepareWithdrawalParams = {\n accountId: AccountId;\n tokenSymbol: TokenSymbol;\n amount: number;\n address?: string;\n network?: InternalChainId;\n opts?: {\n tradeAndSend?: boolean;\n isInternalTransfer?: boolean;\n };\n};\n\nexport type TotupWalletTypeParams = {\n accountId: AccountId;\n amount: number;\n tokenSymbol: TokenSymbol;\n action: AssetMovementAction;\n};\n\nexport function isWalletType(value: Any): value is WalletType {\n return Object.values(WalletType).includes(value);\n}\n\nexport enum WalletTypeV1 {\n MAIN = \"main\",\n FUNDING = \"funding\",\n SPOT = \"spot\",\n FUTURES = \"futures\",\n MARGIN = \"margin\",\n OPTIONS = \"options\",\n EARN = \"earn\",\n BOT = \"bot\",\n CARD = \"card\",\n OTHER = \"other\",\n}\n\nexport enum WalletType {\n SPOT = \"spot\",\n FUNDING = \"funding\",\n ISOLATED_MARGIN = \"isolated_margin\",\n CROSS_MARGIN = \"cross_margin\",\n USD_M_FUTURES = \"usd_m_futures\",\n COIN_M_FUTURES = \"coin_m_futures\",\n COIN_M_SWAP = \"coin_m_swap\",\n OPTIONS = \"options\",\n EARN = \"earn\",\n DERIVATIVES = \"derivatives\",\n\n UNKNOWN = \"unknown\",\n}\n\nexport type ExchangeInfo = {\n /**\n * @description The exchange label\n */\n name: string;\n /**\n * @description The exchange identifier\n */\n id: string;\n /**\n * @description The exchange logo\n */\n logo: string;\n /**\n * @description The exchange API's status\n * @example \"ok\", \"shutdown\", \"error\", \"maintenance\", \"unknown\n */\n status: ExchangeStatus;\n /**\n * @description The exchange's internal wallet types supported\n * @example [\"spot\", \"margin\", \"futures\"]\n */\n supportedWalletTypes: string[];\n /**\n * @description The exchange's supported features\n * @example [\"send\", \"trade\", \"trade_and_send\", \"receive\"]\n */\n supportedFeatures: string[];\n /**\n * @description The exchange's authentication method\n */\n auhenticationMethod: \"oauth\" | \"apiKeys\";\n /**\n * @description True if the exchange requires email confirmation\n */\n isRequiringEmailConfirmation: boolean;\n minimumWithdrawalUrl: string | undefined;\n minimumDepositlUrl: string | undefined;\n /**\n * @description True if the exchange requires address whitelisting for withdrawals\n */\n isRequiringAddressWhitelisting: boolean;\n /**\n * @description True if the exchange allows the check if an address is whitelisted\n */\n shouldCheckWhitelist: boolean;\n /**\n * @description True if the exchange provides whitelisted addresses\n */\n provideWhitelistedAddresses: boolean;\n /**\n * @description List of IP addresses that should be whitelisted for a set of credentials\n */\n ipWhitelistAddresses: string[];\n /**\n * @description List of scopes of API permissions that require the use of whitelisted ip addresses\n */\n whitelistScopes: ApiPermissions[] | undefined;\n /**\n * @description The set of features that are under maintenance\n * @example { send: false, trade: false, receive: false, trade_and_send: false }\n */\n featuresUnderMaintenance: {\n send: boolean;\n trade: boolean;\n receive: boolean;\n trade_and_send: boolean;\n limit_trade: boolean;\n };\n /**\n * @description Link to the exchange's API management page\n */\n apiManagementLink: string | undefined;\n /**\n * @description Link to the exchange's address whitelisting and management page\n */\n addressManagementUrl: string | undefined;\n /**\n * @description Cede Labs affiliation link\n */\n affiliationLink: string | undefined;\n /**\n * @description For hybrid exchanges accepting both OAuth and API keys, the permissions allowed for each authentication method\n * @example { oauth: [\"read\", \"trade\"], api_keys: [\"read\", \"trade\", \"withdraw\"] }\n */\n hybridAuthentication:\n | {\n oauth: ApiPermissions[];\n api_keys: ApiPermissions[];\n }\n | undefined;\n /**\n * @description Exchange OAuth authentication information\n */\n oauthAuthentication: {\n isOauthLoginSupported: boolean;\n hasPkceFlow: boolean;\n isUsingFastApi: boolean;\n };\n /**\n * @description True if the exchange requires an UID for authentication\n */\n requiresUid: boolean;\n /**\n * @description True if the exchange requires a password for authentication\n */\n requiresPassword: boolean;\n /**\n * @description True if the exchange requires two different keys, one for reading/trading and one for withdrawals\n */\n requiresTwoKeys: boolean;\n /**\n * @description Set of permittions that are induced by other permissions\n * @example { \"trade\": [\"withdraw\"], \"withdraw\": [\"trade\"] } This example means that the user cannot trade without the withdraw permission and vice versa\n */\n inducedPermissions: Partial<Record<ApiPermissions, ApiPermissions[]>> | undefined;\n /**\n * @description List of internal wallet types that support transfers between them\n * @example [\"spot\", \"margin\"]\n */\n transferWalletTypes: WalletType[] | undefined;\n notConnectedIdentifier: string | undefined;\n websiteHomelinkIdentifier: string | undefined;\n /**\n * @description True if the exchange supports KYC verification\n */\n supportVerifyKYC: boolean;\n};\n\nexport type ExchangeInfoById = { [key: string]: ExchangeInfo };\n\nexport type Fee = {\n amount: number; // amount (not percentage) of crypto taken as fee\n refAmount?: number;\n tokenSymbol: TokenSymbol; // crypto token involved in the taken fee\n};\n\nexport type CefiTx = {\n amount: number;\n refAmount?: number;\n tokenSymbol: TokenSymbol;\n transactionId: string;\n fee: Fee;\n status: TxStatus;\n timestamp: number;\n};\n\nexport type FeeWithAmounts = {\n feeAmount: number;\n feeTokenSymbol: TokenSymbol;\n baseAmount: number; // amount of crypto after charging the fee\n quoteAmount: number; // amount of crypto after charging the fee\n};\n\nexport type CefiInfoTx = {\n account: {\n exchangeId: string;\n accountId: AccountId;\n network?: string;\n };\n wallet: {\n depositAddress: string;\n walletType: WalletType;\n };\n transaction: CefiTx;\n};\n\nexport function isCefiInfoTx(tx: CefiInfoTx | DefiInfoTx): tx is CefiInfoTx {\n return \"wallet\" in tx;\n}\n\nexport type DefiInfoTx = {\n account: {\n address: string;\n network: InternalChainId;\n };\n transaction: {\n transactionHash: string;\n fee: Fee;\n status: TxStatus;\n timestamp: number;\n tokens: {\n amount: number;\n refAmount?: number;\n tokenSymbol: TokenSymbol;\n address: string; // why do we need an address here? I think we should remove it\n }[];\n };\n};\n\nexport function isDefiInfoTx(tx: CefiInfoTx | DefiInfoTx): tx is DefiInfoTx {\n return !(\"wallet\" in tx);\n}\n\nexport function hasRefAmount(tx: CefiInfoTx | DefiInfoTx): boolean {\n if (isDefiInfoTx(tx)) {\n return tx.transaction.tokens.every((token) => token.refAmount !== undefined);\n }\n return tx.transaction.refAmount !== undefined;\n}\n\n// TODO merge with TokenBalance type\nexport type TokenBalanceTypes = {\n tokenName?: string;\n freeBalance: number;\n refFreeBalance: number;\n usedBalance: number;\n refUsedBalance: number;\n totalBalance: number;\n refTotalBalance: number;\n marginBalance?: {\n [symbol: string]: {\n freeBalance: number;\n totalBalance: number;\n type: \"base\" | \"quote\";\n };\n };\n};\n\nexport type GroupedBalancesByWalletType = {\n [tokenSymbol: TokenSymbol]: TokenBalanceTypes & {\n [type in WalletType]?: TokenBalanceTypes;\n };\n};\n\nexport type BalancesByAccountByWalletType = {\n [accountId: AccountId]: BalancesByWalletType;\n};\n\nexport type BalancesByWalletType = {\n [walletType in WalletType]: {\n [tokenSymbol: TokenSymbol]: TokenBalanceTypes;\n };\n};\n\nexport type SubAccountBalancesByWalletType = {\n [walletType: string]: {\n [tokenSymbol: TokenSymbol]: TokenBalanceTypes;\n };\n};\nexport type BalancesByToken = {\n [tokenSymbol: TokenSymbol]: TokenBalanceTypes;\n};\n\nexport type GroupedBalancesByAccount = {\n [accountId: AccountId]: GroupedBalancesByWalletType;\n};\n\nexport type BalanceDetailsByType = {\n [type: string]: TokenBalanceTypes;\n};\n\nexport type MarketPair = {\n pairSymbol: PairSymbol;\n base: TokenSymbol;\n quote: TokenSymbol;\n type: WalletType;\n taker: number;\n maker: number;\n active: boolean;\n precision: {\n amount: number;\n price: number;\n base: number;\n quote: number;\n };\n};\n\nexport type Ticker = {\n timestamp: number;\n open: number | undefined;\n high: number;\n close: number | undefined;\n low: number;\n last: number | undefined;\n average: number | undefined;\n baseVolume: number | undefined;\n quoteVolume: number | undefined;\n};\n\nexport type Tickers = {\n [pairSymbol: PairSymbol]: Ticker;\n};\n\nexport type Nft = {\n data?: {\n name: string;\n description: string;\n imageUrl: string;\n animationUrl?: string;\n attributes: Record<string, string | number>;\n collection: {\n name: string;\n imageUrl: string;\n creator: string;\n };\n };\n amount?: number;\n tokenId: string;\n tokenAddress: string;\n owner?: string;\n network: InternalChainId;\n};\n\nexport type DepositableToken = {\n tokenSymbol: TokenSymbol;\n networks?: MarketNetwork[];\n};\n\nexport type TokenWithMarketNetwork = {\n tokenSymbol: TokenSymbol;\n isDepositable: boolean;\n isWithdrawable: boolean;\n networks: MarketNetwork[];\n precision?: number;\n contracts?: Record<string, string>;\n};\n\nexport type TokenWithMarketNetworkAndTokenName = {\n name?: string;\n} & TokenWithMarketNetwork;\n\nexport type Network = {\n name: string;\n network: InternalChainId;\n chainId: number; // chain id in decimal format, if possible\n};\n\nexport type ProviderConfig = {\n [key: string]: string;\n};\n\nexport type DepositAddress = {\n tokenSymbol: TokenSymbol;\n address: string;\n network: InternalChainId;\n /**\n * @description\n * A tag or memo is a unique identifier assigned to each account\n * for identifying a deposit and crediting the appropriate account.\n *\n * Some exchanges require a tag or memo to be included with the deposit\n * for some tokens, such as BNB or ATOM\n */\n tag?: string;\n /**\n * @description\n * A contract address for a token on a specific network\n */\n contract?: string;\n};\n\nexport type TokenSymbol = string;\nexport type PairSymbol = string;\n\nexport type FuturePosition = {\n pairSymbol: PairSymbol;\n marginTokenSymbol: TokenSymbol;\n marginMode: MarginMode;\n positionSide: PositionSide;\n notional: string | undefined;\n timestamp: number | undefined;\n unrealizedPnl: string | undefined;\n leverage: string | undefined;\n entryPrice: string | undefined;\n percentage: string | undefined;\n initialMargin: string | undefined;\n initialMarginPercentage: string | undefined;\n};\n\nexport type MarketRate = {\n bid: string;\n ask: string;\n};\n\nexport type Order = {\n id: OrderId;\n timestamp: number;\n status: OrderStatus;\n pairSymbol: PairSymbol;\n type: OrderType;\n side: OrderSide;\n price: number;\n amount: number;\n filled: number;\n fee: Fee;\n};\n\nexport type OrderId = string;\n\nexport type OrderSide = \"buy\" | \"sell\";\nexport type PositionSide = \"long\" | \"short\";\nexport enum MarginMode {\n CROSS = \"cross\",\n ISOLATED = \"isolated\",\n UNKNOWN = \"unknown\",\n}\n\nexport enum OrderType {\n LIMIT = \"limit\",\n MARKET = \"market\",\n UNKNOWN = \"unknown\",\n}\n\nexport enum OrderStatus {\n OPEN = \"open\",\n CLOSED = \"closed\",\n CANCELED = \"canceled\",\n UNKNOWN = \"unknown\",\n}\n\nexport enum CancelOrderStatus {\n CANCELED = \"canceled\",\n ALREADY_FILLED = \"already_filled\",\n}\n\nexport type Result = \"success\" | \"error\";\n\nexport type WithdrawToDefiResult = {\n id: string;\n timestamp: number;\n};\n\nexport type EstimatedFee = Fee;\n\nexport type EstimatedFeeAndAmount = {\n estimatedFee: EstimatedFee;\n estimatedAmount: string; // in base currency\n};\n\nexport type PreparedOrder = EstimatedFeeAndAmount & {\n createOrderRequest: CreateOrderRequest;\n};\n\nexport type CreateOrderRequest = {\n pairSymbol: PairSymbol;\n orderSide: OrderSide;\n orderType: OrderType;\n price: string; // price from the ticker (base to quote).\n amount: string; // the amount in base currency\n metadata?: {\n tradeAndSend?: boolean;\n defiAddress?: string;\n };\n};\n\nexport type ConnectParams = {\n onboard?: boolean;\n readOnlyOnboarding?: boolean;\n silent?: boolean;\n callbackUrl?: string;\n};\n\nexport type MinAmounts = {\n minBaseAmount: string;\n minQuoteAmount: string;\n minPrice: string;\n};\n\nexport type WithdrawToDefiParams = {\n accountId: AccountId;\n tokenSymbol: TokenSymbol;\n network: string | number;\n amount: string;\n address: string;\n code?: string;\n withdrawalTag?: string;\n isInternalTransfer?: boolean;\n metadata?: {\n tradeAndSend?: boolean;\n referrerSource?: string;\n origin?: string;\n clientTxId?: string;\n callbackUrl?: string;\n };\n};\n\nexport type GetWhitelistedAddressesParams = {\n accountId: AccountId;\n tokenSymbol?: TokenSymbol;\n network?: InternalChainId;\n};\nexport enum AssetMovementAction {\n TRADE = \"trade\",\n SEND = \"send\",\n}\n\nexport type TotupPath = {\n fromWalletType: WalletType;\n fromWalletTypeExternalName: string;\n toWalletType: WalletType;\n toWalletTypeExternalName: string;\n};\n\nexport type WithdrawableTokensParams = {\n accountId: AccountId;\n network?: InternalChainId;\n};\n\nexport type VaultAccountsParams = {\n vaultId: VaultId;\n};\nexport type TransactionsParams = {\n vaultId: VaultId;\n accountIds?: AccountId[];\n tokenSymbol?: TokenSymbol;\n txType?: string;\n startTime?: number;\n pageCount?: number;\n pageIndex?: number;\n};\n\nexport type BalancesParams = {\n vaultId: VaultId;\n accountId?: AccountId[];\n walletTypes?: WalletType[];\n opts?: {\n forceRefresh?: boolean;\n };\n};\n\nexport type DepositableTokensParams = {\n accountId: AccountId;\n};\n\nexport type GetNetworksParams = {\n accountId: AccountId;\n tokenSymbol?: TokenSymbol;\n opts: {\n toDeposit?: boolean;\n toWithdraw?: boolean;\n isInternalTransfer?: boolean;\n };\n};\n\nexport type GetNetworksBetweenCexParams = {\n accountId: AccountId;\n toAccountId: AccountId;\n tokenSymbol: TokenSymbol;\n};\n\nexport type GetSupportedTokensParams = {\n accountId: AccountId;\n network?: string;\n};\n\nexport type DepositParams = {\n accountId: AccountId;\n tokenSymbol: TokenSymbol;\n network: InternalChainId;\n};\n\nexport type OpenOrdersParams = {\n accountId: AccountId;\n pairSymbol: PairSymbol;\n since?: number;\n limit?: number;\n};\n\nexport type CreateOrderParams = {\n accountId: AccountId;\n pairSymbol: PairSymbol;\n orderSide: OrderSide;\n orderType: OrderType;\n amount: string;\n price: string;\n metadata?: {\n tradeAndSend?: boolean;\n defiAddress?: string;\n };\n};\n\nexport type NftsParams = {\n accountId: AccountId;\n};\n\nexport type RetrieveOrderParams = {\n accountId: AccountId;\n orderId: string;\n pairSymbol: PairSymbol;\n metadata?: {\n defiAddress?: string;\n };\n};\n\nexport type EditOrderParams = {\n accountId: AccountId;\n orderId: OrderId;\n pairSymbol: PairSymbol;\n orderSide?: OrderSide;\n orderType?: OrderType;\n price?: string;\n amount?: string;\n};\n\nexport type GetMinAmountsParams = {\n accountId: AccountId;\n pairSymbol: PairSymbol;\n orderSide: OrderSide;\n price: string;\n};\n\nexport type MarketPairsParams = {\n accountId: AccountId;\n};\n\nexport type MarketRateParams = {\n accountId: AccountId;\n pairSymbol: PairSymbol;\n};\n\nexport type CancelOrderParams = {\n accountId: AccountId;\n orderId: OrderId;\n pairSymbol: PairSymbol;\n};\n\nexport type AddCexParams = {\n exchangeId?: string;\n readOnlyOnboarding?: boolean;\n callbackUrl?: string;\n};\n\nexport type GetWithdrawalByIdParams = {\n accountId: string;\n withdrawalId: string;\n tokenSymbol: string;\n timestamp: number;\n};\n\n/**\n * @param timestamp Only for withdrawal transaction\n * @param tokenOrPairSymbol For trade transaction, it's the pair symbol (ex: BTC/USDT) and for withdrawal transaction, it's the token symbol (ex: BTC)\n */\nexport type SearchTransactionParams = {\n accountId: string;\n transactionId: string;\n transactionType: \"trade\" | \"withdrawal\";\n tokenOrPairSymbol: string;\n timestamp?: number;\n metadata?: {\n defiAddress?: string;\n };\n};\n\nexport type GetWidgetBundleUrlParams = {\n name: string;\n};\n\nexport type WhitelistedAddresses = {\n address: string;\n key: string;\n network: InternalChainId;\n tokenSymbol?: TokenSymbol; // It's not defined for universal addresses\n verified: boolean;\n};\n\nexport type GetTradePathParams = {\n accountId: string;\n to: string;\n from: string;\n};\n\nexport type GetTradePathBySupportedTokensParams = {\n accountId: string;\n from: string;\n network: InternalChainId;\n};\n\nexport type GetOHLCVParams = {\n accountId: string;\n pairSymbol: string;\n timeframe: Timeframe;\n from: number;\n to: number;\n limit: number;\n opts?: {\n forceRefresh?: boolean;\n };\n};\n\nexport type VerifyKYCParams = {\n accountId: string;\n tokenSymbol?: TokenSymbol;\n network?: InternalChainId;\n callbackUrl: string;\n};\n\nexport type VerifyKYCReturn = {\n balances: BalancesByWalletType;\n depositAddress: DepositAddress;\n exchangeId: string;\n};\n\nexport enum UrlRoot {\n POPUP = \"popup\",\n REQUEST_ONBOARDING = \"requestOnboarding\",\n REQUEST = \"request\",\n}\n\nexport type OpenTabParams = {\n route?: string;\n root?: UrlRoot;\n};\n","import { ReactElement } from \"react\";\nimport { ApiPermissions } from \"../cefi\";\nimport { Any } from \"../fakeTypes\";\nimport { Order, TokenSymbol } from \"../untrustedApi\";\n\nexport type WidgetEvents = \"sendTxStatusUpdate\" | \"widgetClosed\";\n\nexport type SendTxStatusUpdate = \"submitted\" | \"txIdRetrieved\" | \"txIdNotRetrieved\" | \"failed\";\n\nexport type SendWidgetConfig = {\n tokenSymbol?: TokenSymbol;\n network?: string | number;\n address?: string;\n amount?: string;\n lockNetwork?: boolean;\n exchangeIds?: string[];\n clientTxId?: string;\n callbackUrl?: string;\n isInternalTransfer?: boolean;\n};\n\nexport type SendWidgetTheme = {\n mode?: \"dark\" | \"light\";\n logoTheme?: \"dark\" | \"light\";\n fontFamily?: string;\n borderRadius?: number;\n width?: string;\n primaryColor?: string;\n primaryTextColor?: string;\n secondaryTextColor?: string;\n inputBorderColor?: string;\n logoBorderColor?: string;\n borderColor?: string;\n errorColor?: string;\n warningColor?: string;\n secondaryColor?: string;\n accentColor?: string;\n buttonTextColor?: string;\n deactivateButtonColor?: string;\n};\n\nexport enum WidgetType {\n TRADE = \"trade\",\n SEND = \"send\",\n}\n\nexport type SendWidgetProps = {\n title?: string;\n description?: string;\n config?: SendWidgetConfig;\n logo?: ReactElement | null;\n navbarLogo?: ReactElement | null;\n theme?: SendWidgetTheme;\n CustomOnboardingModal?: (props: Any) => JSX.Element;\n};\n\nexport type TradeWidgetConfig = {\n tokenSymbols?: TokenSymbol[];\n exchangeIds?: string[];\n recommendedTokenTo?: TokenSymbol;\n keepPreviousTradeValues?: boolean;\n onTradeSubmitted?: (trade: Order) => void;\n};\n\nexport type TradeWidgetProps = {\n title?: string;\n description?: string;\n config?: TradeWidgetConfig;\n logo?: ReactElement | null;\n navbarLogo?: ReactElement | null;\n theme?: SendWidgetTheme;\n CustomOnboardingModal?: (props: Any) => JSX.Element;\n};\n\nexport type SendUniversalWidgetConfig = SendWidgetProps & {\n selector: string;\n logo?: string;\n navbarLogo?: string;\n};\n\nexport type TradeUniversalWidgetConfig = TradeWidgetProps & {\n selector: string;\n logo?: string;\n navbarLogo?: string;\n};\n\nexport type InpageHelperConfig = {\n exchangeId: string;\n permissions: ApiPermissions[];\n};\n","export const CURRENCY_CODE_MAP = new Map<string, string>(\n Object.entries({\n AED: \"د.إ\",\n AFN: \"؋\",\n ALL: \"L\",\n AMD: \"֏\",\n ANG: \"ƒ\",\n AOA: \"Kz\",\n ARS: \"$\",\n AUD: \"$\",\n AWG: \"ƒ\",\n AZN: \"₼\",\n BAM: \"KM\",\n BBD: \"$\",\n BDT: \"৳\",\n BGN: \"лв\",\n BHD: \".د.ب\",\n BIF: \"FBu\",\n BMD: \"$\",\n BND: \"$\",\n BOB: \"$b\",\n BOV: \"BOV\",\n BRL: \"R$\",\n BSD: \"$\",\n BTC: \"₿\",\n BTN: \"Nu.\",\n BWP: \"P\",\n BYN: \"Br\",\n BYR: \"Br\",\n BZD: \"BZ$\",\n CAD: \"$\",\n CDF: \"FC\",\n CHE: \"CHE\",\n CHF: \"CHF\",\n CHW: \"CHW\",\n CLF: \"CLF\",\n CLP: \"$\",\n CNH: \"¥\",\n CNY: \"¥\",\n COP: \"$\",\n COU: \"COU\",\n CRC: \"₡\",\n CUC: \"$\",\n CUP: \"₱\",\n CVE: \"$\",\n CZK: \"Kč\",\n DJF: \"Fdj\",\n DKK: \"kr\",\n DOP: \"RD$\",\n DZD: \"دج\",\n EEK: \"kr\",\n EGP: \"£\",\n ERN: \"Nfk\",\n ETB: \"Br\",\n ETH: \"Ξ\",\n EUR: \"€\",\n FJD: \"$\",\n FKP: \"£\",\n GBP: \"£\",\n GEL: \"₾\",\n GGP: \"£\",\n GHC: \"₵\",\n GHS: \"GH₵\",\n GIP: \"£\",\n GMD: \"D\",\n GNF: \"FG\",\n GTQ: \"Q\",\n GYD: \"$\",\n HKD: \"$\",\n HNL: \"L\",\n HRK: \"kn\",\n HTG: \"G\",\n HUF: \"Ft\",\n IDR: \"Rp\",\n ILS: \"₪\",\n IMP: \"£\",\n INR: \"₹\",\n IQD: \"ع.د\",\n IRR: \"﷼\",\n ISK: \"kr\",\n JEP: \"£\",\n JMD: \"J$\",\n JOD: \"JD\",\n JPY: \"¥\",\n KES: \"KSh\",\n KGS: \"лв\",\n KHR: \"៛\",\n KMF: \"CF\",\n KPW: \"₩\",\n KRW: \"₩\",\n KWD: \"KD\",\n KYD: \"$\",\n KZT: \"₸\",\n LAK: \"₭\",\n LBP: \"£\",\n LKR: \"₨\",\n LRD: \"$\",\n LSL: \"M\",\n LTC: \"Ł\",\n LTL: \"Lt\",\n LVL: \"Ls\",\n LYD: \"LD\",\n MAD: \"MAD\",\n MDL: \"lei\",\n MGA: \"Ar\",\n MKD: \"ден\",\n MMK: \"K\",\n MNT: \"₮\",\n MOP: \"MOP$\",\n MRO: \"UM\",\n MRU: \"UM\",\n MUR: \"₨\",\n MVR: \"Rf\",\n MWK: \"MK\",\n MXN: \"$\",\n MXV: \"MXV\",\n MYR: \"RM\",\n MZN: \"MT\",\n NAD: \"$\",\n NGN: \"₦\",\n NIO: \"C$\",\n NOK: \"kr\",\n NPR: \"₨\",\n NZD: \"$\",\n OMR: \"﷼\",\n PAB: \"B/.\",\n PEN: \"S/.\",\n PGK: \"K\",\n PHP: \"₱\",\n PKR: \"₨\",\n PLN: \"zł\",\n PYG: \"Gs\",\n QAR: \"﷼\",\n RMB: \"¥\",\n RON: \"lei\",\n RSD: \"Дин.\",\n RUB: \"₽\",\n RWF: \"R₣\",\n SAR: \"﷼\",\n SBD: \"$\",\n SCR: \"₨\",\n SDG: \"ج.س.\",\n SEK: \"kr\",\n SGD: \"S$\",\n SHP: \"£\",\n SLL: \"Le\",\n SOS: \"S\",\n SRD: \"$\",\n SSP: \"£\",\n STD: \"Db\",\n STN: \"Db\",\n SVC: \"$\",\n SYP: \"£\",\n SZL: \"E\",\n THB: \"฿\",\n TJS: \"SM\",\n TMT: \"T\",\n TND: \"د.ت\",\n TOP: \"T$\",\n TRL: \"₤\",\n TRY: \"₺\",\n TTD: \"TT$\",\n TVD: \"$\",\n TWD: \"NT$\",\n TZS: \"TSh\",\n UAH: \"₴\",\n UGX: \"USh\",\n USD: \"$\",\n UYI: \"UYI\",\n UYU: \"$U\",\n UYW: \"UYW\",\n UZS: \"лв\",\n VEF: \"Bs\",\n VES: \"Bs.S\",\n VND: \"₫\",\n VUV: \"VT\",\n WST: \"WS$\",\n XAF: \"FCFA\",\n XBT: \"Ƀ\",\n XCD: \"$\",\n XOF: \"CFA\",\n XPF: \"₣\",\n XSU: \"Sucre\",\n XUA: \"XUA\",\n YER: \"﷼\",\n ZAR: \"R\",\n ZMW: \"ZK\",\n ZWD: \"Z$\",\n ZWL: \"$\",\n }),\n);\n","import { formatBalance } from \"../balance\";\nimport { CURRENCY_CODE_MAP } from \"../currencies\";\n\nexport const DEFAULT_CURRENCY = \"USD\";\n\nexport const formatCurrencyAmount = (\n amount: number,\n local = \"en-US\",\n currency = DEFAULT_CURRENCY,\n hideBalance = false,\n) => {\n const amountNumber = formatBalance(amount, {\n roundForFiat: currency === DEFAULT_CURRENCY,\n hideBalance,\n });\n const currencySymbol = getCurrencySymbol(local, currency);\n\n if (amountNumber[0] === \"-\") {\n return `-${currencySymbol}${amountNumber.slice(1)}`;\n } else {\n return `${currencySymbol}${amountNumber}`;\n }\n};\n\nexport const getCurrencySymbol = (locale: string, currency: string) =>\n CURRENCY_CODE_MAP.has(currency)\n ? CURRENCY_CODE_MAP.get(currency)!\n : (0)\n .toLocaleString(locale, {\n style: \"currency\",\n currency,\n minimumFractionDigits: 0,\n maximumFractionDigits: 0,\n })\n .replace(/\\d/g, \"\")\n .trim();\n","import { Any } from \"@cede/types\";\nimport { DEFAULT_UNDEFINED_STRING } from \"../mappings\";\n\nfunction formatter(options: Any) {\n options = options || {};\n\n // *********************************************************************************************\n // Set defaults for negatives\n // options.negative, options.negativeOut, options.separator retained for backward compatibility\n // *********************************************************************************************\n\n // type of negative; default left\n options.negativeType = options.negativeType || (options.negative === \"R\" ? \"right\" : \"left\");\n\n // negative symbols '-' or '()'\n if (typeof options.negativeLeftSymbol !== \"string\") {\n switch (options.negativeType) {\n case \"left\":\n options.negativeLeftSymbol = \"-\";\n break;\n case \"brackets\":\n options.negativeLeftSymbol = \"(\";\n break;\n default:\n options.negativeLeftSymbol = \"\";\n }\n }\n if (typeof options.negativeRightSymbol !== \"string\") {\n switch (options.negativeType) {\n case \"right\":\n options.negativeRightSymbol = \"-\";\n break;\n case \"brackets\":\n options.negativeRightSymbol = \")\";\n break;\n default:\n options.negativeRightSymbol = \"\";\n }\n }\n\n // whether negative symbol should be inside/outside prefix and suffix\n\n if (typeof options.negativeLeftOut !== \"boolean\") {\n options.negativeLeftOut = options.negativeOut === false ? false : true;\n }\n if (typeof options.negativeRightOut !== \"boolean\") {\n options.negativeRightOut = options.negativeOut === false ? false : true;\n }\n\n //prefix and suffix\n options.prefix = options.prefix || \"\";\n options.suffix = options.suffix || \"\";\n\n //separators\n if (typeof options.integerSeparator !== \"string\") {\n options.integerSeparator = typeof options.separator === \"string\" ? options.separator : \",\";\n }\n options.decimalsSeparator = typeof options.decimalsSeparator === \"string\" ? options.decimalsSeparator : \"\";\n options.decimal = options.decimal || \".\";\n\n //padders\n options.padLeft = options.padLeft || -1; //default no padding\n options.padRight = options.padRight || -1; //default no padding\n\n function format(number: Any, overrideOptions?: Any) {\n overrideOptions = overrideOptions || {};\n\n if (number || number === 0) {\n number = \"\" + number; //convert number to string if it isn't already\n } else {\n return \"\";\n }\n\n //identify a negative number and make it absolute\n const output: string[] = [];\n const negative = number.charAt(0) === \"-\";\n number = number.replace(/^\\\\-/g, \"\");\n\n //Prepare output with left hand negative and/or prefix\n if (!options.negativeLeftOut && !overrideOptions.noUnits) {\n output.push(options.prefix);\n }\n if (negative) {\n output.push(options.negativeLeftSymbol);\n }\n if (options.negativeLeftOut && !overrideOptions.noUnits) {\n output.push(options.prefix);\n }\n\n //Format core number\n number = number.split(\".\");\n if (options.round != null) round(number, options.round);\n if (options.truncate != null) number[1] = truncate(number[1], options.truncate);\n if (options.padLeft > 0) number[0] = padLeft(number[0], options.padLeft);\n if (options.padRight > 0) number[1] = padRight(number[1], options.padRight);\n if (!overrideOptions.noSeparator && number[1])\n number[1] = addDecimalSeparators(number[1], options.decimalsSeparator);\n if (!overrideOptions.noSeparator && number[0])\n number[0] = addIntegerSeparators(number[0], options.integerSeparator);\n output.push(number[0]);\n if (number[1]) {\n output.push(options.decimal);\n output.push(number[1]);\n }\n\n //Prepare output with right hand negative and/or prefix\n if (options.negativeRightOut && !overrideOptions.noUnits) {\n output.push(options.suffix);\n }\n if (negative) {\n output.push(options.negativeRightSymbol);\n }\n if (!options.negativeRightOut && !overrideOptions.noUnits) {\n output.push(options.suffix);\n }\n\n //join output and return\n return output.join(\"\");\n }\n\n format.negative = options.negative;\n format.negativeOut = options.negativeOut;\n format.negativeType = options.negativeType;\n format.negativeLeftOut = options.negativeLeftOut;\n format.negativeLeftSymbol = options.negativeLeftSymbol;\n format.negativeRightOut = options.negativeRightOut;\n format.negativeRightSymbol = options.negativeRightSymbol;\n format.prefix = options.prefix;\n format.suffix = options.suffix;\n format.separate = options.separate;\n format.integerSeparator = options.integerSeparator;\n format.decimalsSeparator = options.decimalsSeparator;\n format.decimal = options.decimal;\n format.padLeft = options.padLeft;\n format.padRight = options.padRight;\n format.truncate = options.truncate;\n format.round = options.round;\n\n function unformat(number: string, allowedSeparators: string[]) {\n allowedSeparators = allowedSeparators || [];\n if (options.allowedSeparators) {\n options.allowedSeparators.forEach(function (s: string) {\n allowedSeparators.push(s);\n });\n }\n allowedSeparators.push(options.integerSeparator);\n allowedSeparators.push(options.decimalsSeparator);\n number = number.replace(options.prefix, \"\");\n number = number.replace(options.suffix, \"\");\n let newNumber = number;\n do {\n number = newNumber;\n for (let i = 0; i < allowedSeparators.length; i++) {\n newNumber = newNumber.replace(allowedSeparators[i] || DEFAULT_UNDEFINED_STRING, \"\");\n }\n } while (newNumber != number);\n return number;\n }\n format.unformat = unformat;\n\n return format;\n}\n\n//where x is already the integer part of the number\nfunction addIntegerSeparators(x: string, separator: string) {\n x += \"\";\n if (!separator) return x;\n const rgx = /(\\d+)(\\d{3})/;\n while (rgx.test(x)) {\n x = x.replace(rgx, \"$1\" + separator + \"$2\");\n }\n return x;\n}\n\n//where x is already the decimal part of the number\nfunction addDecimalSeparators(x: string, separator: string) {\n x += \"\";\n if (!separator) return x;\n const rgx = /(\\d{3})(\\d+)/;\n while (rgx.test(x)) {\n x = x.replace(rgx, \"$1\" + separator + \"$2\");\n }\n return x;\n}\n\n//where x is the integer part of the number\nfunction padLeft(x: string, padding: number) {\n x = x + \"\";\n const buf: string[] = [];\n while (buf.length + x.length < padding) {\n buf.push(\"0\");\n }\n return buf.join(\"\") + x;\n}\n\n//where x is the decimals part of the number\nfunction padRight(x: string, padding: number) {\n if (x) {\n x += \"\";\n } else {\n x = \"\";\n }\n const buf: string[] = [];\n while (buf.length + x.length < padding) {\n buf.push(\"0\");\n }\n return x + buf.join(\"\");\n}\nfunction truncate(x: string, length: number) {\n if (x) {\n x += \"\";\n }\n if (x && x.length > length) {\n return x.substr(0, length);\n } else {\n return x;\n }\n}\n\n//where number is an array with 0th item as integer string and 1st item as decimal string (no negatives)\nfunction round(number: string[], places: number) {\n if (number[1] && places >= 0 && number[1].length > places) {\n //truncate to correct number of decimal places\n let decim = number[1].slice(0, places);\n //if next digit was >= 5 we need to round up\n if (+number[1].substr(places, 1) >= 5) {\n //But first count leading zeros as converting to a number will loose them\n let leadingzeros = \"\";\n while (decim.charAt(0) === \"0\") {\n leadingzeros = leadingzeros + \"0\";\n decim = decim.substr(1);\n }\n //Then we can change decim to a number and add 1 before replacing leading zeros\n decim = +decim + 1 + \"\";\n decim = leadingzeros + decim;\n if (decim.length > places) {\n //adding one has made it longer\n number[0] = +(number[0] || \"\") + +decim.charAt(0) + \"\"; //add value of firstchar to the integer part\n decim = decim.substring(1); //ignore the 1st char at the beginning which is the carry to the integer part\n }\n }\n number[1] = decim;\n }\n return number;\n}\n\nexport default formatter;\n","import format from \"./formatNumber\";\n\nconst MAX_DIGITS = 10;\nconst MAX_DECIMALS = 8;\n\n/**\n * Formats a number to a string with a limited number of decimals, and spaces for thousands\n *\n * @param {number} balance - The number to format\n * @param {object} [options] - Additional options\n * param {boolean} [roundForFiat=false] - Whether to only show 2 decimals for fiat currencies\n * param {number} [maxDigits=MAX_DIGITS] - The maximum number of digits to display\n * param {boolean} [canHideNumberOverMaxDigits=false] - If true, numbers over maxDigits or after the first non-digit will be hidden with a > sign\n * @returns {string}\n */\nexport const formatBalance = (\n balance: number | string,\n options?: {\n roundForFiat?: boolean;\n maxDigits?: number;\n hideBalance?: boolean;\n keepExponential?: boolean;\n canHideNumberOverMaxDigits?: boolean;\n },\n): string => {\n // cast balance to number if needed\n balance = typeof balance === \"string\" ? Number(balance) : balance;\n const hideBalance = options?.hideBalance ?? false;\n const roundForFiat = options?.roundForFiat ?? false;\n const maxDigits = options?.maxDigits ?? MAX_DIGITS;\n const keepExponential = options?.keepExponential ?? false;\n const canHideNumberOverMaxDigits = options?.canHideNumberOverMaxDigits ?? false;\n\n const value = Math.abs(balance);\n const sign = balance < 0 ? \"-\" : \"\";\n\n // Avoid scientific notation for very small numbers\n if (value < 0.000001 && value > 0 && !canHideNumberOverMaxDigits) {\n return sign + (keepExponential ? value : value.toFixed(MAX_DECIMALS));\n }\n // Force scientific notation for very large numbers\n if (value > 9999999999) {\n return sign + value.toPrecision(MAX_DECIMALS);\n }\n\n if (value < 0.09 && canHideNumberOverMaxDigits) {\n const decimalsNumber = value.toString().split(\"-\")[1];\n const formattedValue = value.toFixed(decimalsNumber ? parseInt(decimalsNumber) + 1 : value.toString().length - 1);\n const firstNonZeroDigit = formattedValue.match(/[1-9]/);\n\n if (firstNonZeroDigit && firstNonZeroDigit.index && formattedValue[firstNonZeroDigit.index + 1] !== \"0\") {\n // Include all zeros before the first non-zero digit\n const zerosBeforeNonZero = `0.${\"0\".repeat(firstNonZeroDigit.index - 2)}`;\n\n return `>${zerosBeforeNonZero}${firstNonZeroDigit[0]}`;\n }\n }\n\n if (hideBalance) return \"****\";\n\n const round = (() => {\n if (roundForFiat) return 2;\n if (value > 10 ** (maxDigits - 1)) return 0;\n return MAX_DECIMALS;\n })();\n\n const params = {\n decimal: \".\",\n integerSeparator: \" \",\n };\n\n const formattedValue = format({ round, ...params })(value);\n\n const int = (formattedValue.split(\".\")[0] || \"\").replace(/\\s/g, \"\");\n\n const diff = maxDigits - int.length;\n\n return sign + format({ round: diff >= 0 ? diff : 0, ...params })(Number(formattedValue.replace(/\\s/g, \"\")));\n};\n\nexport function unformatNumberAsString(balance: string): number {\n return parseFloat(balance.replace(/\\s/g, \"\") || \"0\");\n}\n","export enum CDN_MODULES {\n NETWORK = \"network\",\n PARTNERS = \"partners\",\n TOKEN = \"token\",\n}\n","import DEFAULT_NETWORK_ICON_SVG from \"./defaultNetwork.svg\";\nimport DEFAULT_TOKEN_ICON_SVG from \"./defaultToken.svg\";\nimport { InternalChainId, TokenSymbol } from \"@cede/types\";\nimport { TokenIcon } from \"@cede/types\";\nimport { CDN_MODULES } from \"./types\";\n\nexport const CEDE_CDN_URL = \"https://cdn.cedelabs.io\";\nexport const DEFAULT_NETWORK_ICON = DEFAULT_NETWORK_ICON_SVG;\nexport const DEFAULT_TOKEN_ICON = DEFAULT_TOKEN_ICON_SVG;\n// Icons from CoinMarketCap\nlet icons: TokenIcon[] = [];\n\nexport async function fetchIcons(fetcher: () => Promise<{ data: TokenIcon[] }>) {\n const { data } = await fetcher();\n icons = data;\n}\n\nexport const forgeCDNUrl = (module: CDN_MODULES, path: string, cdnUrl?: string) =>\n `${cdnUrl ?? CEDE_CDN_URL}/${module}/${path}`;\n\nexport const forgeNetworkURL = (icid?: InternalChainId): string => {\n if (!icid) return DEFAULT_NETWORK_ICON;\n return forgeCDNUrl(CDN_MODULES.NETWORK, `${icid}.png`);\n};\n\nexport const forgeTokenURL = (token?: TokenSymbol): string => {\n if (!token) return DEFAULT_TOKEN_ICON;\n return forgeCDNUrl(CDN_MODULES.TOKEN, `${token.toLowerCase()}.svg`);\n};\n\nexport const resolveCDNMiss = (url: URL) => {\n const path = url.pathname.split(\"/\");\n if (path.length < 3) return \"\";\n\n const module = path[1];\n const target = path[2]?.replace(\".png\", \"\").replace(\".svg\", \"\");\n switch (module) {\n case CDN_MODULES.NETWORK:\n return DEFAULT_NETWORK_ICON;\n case CDN_MODULES.TOKEN:\n return icons.find((icon) => icon.token.toLowerCase() === target)?.icon || DEFAULT_TOKEN_ICON;\n default:\n return \"\";\n }\n};\n\nexport * from \"./types\";\n","// values mapped to CCXT exchanges' ids\nexport const CEDE_CEXS = {\n BINANCE: \"binance\",\n COINBASE: \"coinbase\",\n KRAKEN: \"kraken\",\n GATEIO: \"gateio\",\n OKX: \"okx\",\n BITFINEX: \"bitfinex\",\n HTX: \"huobi\",\n KUCOIN: \"kucoin\",\n BYBIT: \"bybit\",\n BITGET: \"bitget\",\n BITSTAMP: \"bitstamp\",\n BITMART: \"bitmart\",\n MEXC: \"mexc\",\n COINBASE_EXCHANGE: \"coinbaseexchange\",\n};\n\nexport const CEDE_CEXS_SOON_SUPPORTED = {\n GEMINI: \"gemini\",\n BINANCE_US: \"binanceus\",\n};\n\nexport const getCCXTExchangeId = (internalCexId: string) => {\n switch (internalCexId) {\n case CEDE_CEXS.BITFINEX: {\n return \"bitfinex2\";\n }\n case CEDE_CEXS.HTX: {\n return \"htx\";\n }\n default: {\n return internalCexId;\n }\n }\n};\n\nexport const getInternalExchangeId = (ccxtExchangeId: string) => {\n switch (ccxtExchangeId) {\n case \"bitfinex2\": {\n return CEDE_CEXS.BITFINEX;\n }\n case \"htx\": {\n return CEDE_CEXS.HTX;\n }\n default: {\n return ccxtExchangeId;\n }\n }\n};\n\nexport const CEDE_CEX_LABELS = {\n [CEDE_CEXS.BINANCE]: \"Binance\",\n [CEDE_CEXS.COINBASE]: \"Coinbase\",\n [CEDE_CEXS.COINBASE_EXCHANGE]: \"Coinbase Exchange\",\n [CEDE_CEXS.KRAKEN]: \"Kraken\",\n [CEDE_CEXS.GATEIO]: \"Gate.io\",\n [CEDE_CEXS.OKX]: \"OKX\",\n [CEDE_CEXS.BITFINEX]: \"Bitfinex\",\n [CEDE_CEXS.HTX]: \"HTX\",\n [CEDE_CEXS.KUCOIN]: \"Kucoin\",\n [CEDE_CEXS.BYBIT]: \"Bybit\",\n [CEDE_CEXS.BITGET]: \"Bitget\",\n [CEDE_CEXS.BITSTAMP]: \"Bitstamp\",\n [CEDE_CEXS.BITMART]: \"Bitmart\",\n [CEDE_CEXS.MEXC]: \"MEXC\",\n\n // not supported yet, but promoted on our landing\n [CEDE_CEXS_SOON_SUPPORTED.GEMINI]: \"Gemini\",\n [CEDE_CEXS_SOON_SUPPORTED.BINANCE_US]: \"Binance US\",\n};\n","import { ApiPermissions, ExchangeStatus } from \"@cede/types\";\nimport { TWO_KEYS_PERMISSIONS_WITH_PROXY, TWO_KEYS_PERMISSIONS_WITHOUT_PROXY } from \"../constants\";\nimport { advancedRandomId } from \"../random\";\nimport { CEDE_CEX_LABELS } from \"./constants\";\n\nexport const getCexLabel = (cexValue: string): string => {\n return CEDE_CEX_LABELS[cexValue] || cexValue;\n};\n\n/**\n * Computes the account id for a given cexId and key. The key can be the API key or the access token.\n */\nexport const computeExchangeInstanceId = (): string => {\n return advancedRandomId(5);\n};\n\n/**\n * Check if the permissions include some of the proxied permissions.\n */\nexport function hasPermissionsWithProxy(permissions: ApiPermissions[], cex: string): boolean {\n return permissions.some((permission) => TWO_KEYS_PERMISSIONS_WITH_PROXY[cex]?.includes(permission));\n}\n\nexport function hasPermissionsWithoutProxy(permissions: ApiPermissions[], cex: string): boolean {\n return permissions.some((permission) => TWO_KEYS_PERMISSIONS_WITHOUT_PROXY[cex]?.includes(permission));\n}\n\nexport function externalExchangeStatusToInternalExchangeStatus(externalStatus?: string): ExchangeStatus {\n for (const key in ExchangeStatus) {\n const internalExchangeStatus = ExchangeStatus[key as keyof typeof ExchangeStatus];\n if (internalExchangeStatus === externalStatus) {\n return internalExchangeStatus;\n }\n }\n return ExchangeStatus.Unknown;\n}\n","export const USE_NETWORKS_CACHE_TIME = 120_000;\nexport const USE_DEPOSITABLE_TOKENS_CACHE_TIME = 120_000;\nexport const TOKENS_NAMES_AND_SYMBOLS_CACHE_TIME = 60 * 60 * 1000;\nexport const USE_PORTFOLIO_REFETCH_INTERVAL = 60 * 1000;\nexport const SUPPORTED_EXCHANGES_CACHE_TIME = 60 * 1000;\nexport const USE_SUPPORTED_TOKENS_CACHE_TIME = 60 * 1000;\nexport const WITHDRAWABLE_BALANCES_TTL = 10_000;\nexport const DEFAULT_SDK_CACHE_TTL = 300_000;\nexport const USE_WHITELISTED_ADDRESSES_CACHE_TIME = 30 * 1000;\nexport const USE_WHITELISTED_ADDRESSES_STALE_TIME = 15 * 1000;\nexport const AVAILABLE_EXCHANGES_CACHE_TIME = 60 * 60 * 1000;\nexport const WALLET_TYPES_CONFIG_CACHE_TTL = 24 * 60 * 60 * 1000; // 24 hours\nexport const WITHDRAWAL_FEE_CACHE_TTL = 5 * 1000;\nexport const TRADE_PATH_BY_SUPPORTED_TOKENS_CACHE_TTL = 60 * 1000;\nexport const OHLCV_TTL = 10 * 60 * 1000; // 10 minutes\n","import { ApiPermissions } from \"@cede/types\";\nimport { CEDE_CEXS } from \"../cexs\";\n\n/**\n * Some endpoints' rate limit is based on the IP address. These endpoints\n * cannot be proxified. That's why we require the user to create the second key,\n * which doesn't have any IP whitelist and is not proxyfied.\n */\nexport const TWO_KEYS_PERMISSIONS_WITHOUT_PROXY: { [exchangeId: string]: ApiPermissions[] | undefined } = {\n [CEDE_CEXS.BINANCE]: [ApiPermissions.READ, ApiPermissions.TRADE],\n};\n\n/**\n * Several CEXs require IP whitelisting for API keys.\n * As the user's IP address changes frequently, we use the proxy\n * to whitelist the proxy's IP address instead of the user's.\n *\n * To proxify request, we must be sure that the rate limit is not based on the IP.\n */\nexport const TWO_KEYS_PERMISSIONS_WITH_PROXY: { [exchangeId: string]: ApiPermissions[] | undefined } =\n Object.fromEntries(\n Object.entries(TWO_KEYS_PERMISSIONS_WITHOUT_PROXY).map(([cex, permissions]) => [\n cex,\n Object.values(ApiPermissions).filter((permission) => !permissions?.includes(permission)),\n ]),\n );\n","export const tweets = {\n TRADE:\n \"Hey Frens! Just made a trade with my {cexLabel} asset via cede.store! Huge shoutout to @cedelabs for the seamless flow! 🚀 #CeFi #Crypto #UnlockingLiquidity\",\n SEND_WITH_PARTNER:\n \"Hey Frens! I just moved my {cexLabel} assets to my {network} wallet thanks to cede.store! Shoutout to @cedelabs and {partner} for fast CEX to DeFi transfers! 🚀 #DeFi #Crypto\",\n SEND_WITHOUT_PARTNER:\n \"Hey Frens! I just moved my {cexLabel} assets to my {network} wallet thanks to cede.store! Shoutout to @cedelabs for fast CEX to DeFi transfers! 🚀 #DeFi #Crypto\",\n REFERRAL:\n 'Hey Frens! Install @cedelabs to track and manage all your CeFi assets ! Use my referral code \"{referralCode}\" for a special reward! 🚀 #CeFi #Crypto',\n};\n\n/** Used to identify twitter handles for networks in the config @example network_twitter_handle:ethereum */\nexport const NETWORK_TWITTER_HANDLE_CONFIG_IDENTIFIER = \"network_twitter_handle:\";\n\nexport enum TweetDataKey {\n CEX_LABEL = \"cexLabel\",\n NETWORK = \"network\",\n PARTNER = \"partner\",\n}\n\nexport const POST_ON_TWITTER_URL = \"https://twitter.com/intent/tweet?text=\";\n","import { Any } from \"@cede/types\";\n\nexport function isChildOf(child: Any, parent: Any) {\n let childRef = child;\n\n while (childRef && childRef.nodeName !== \"BODY\" && !childRef.isEqualNode(parent)) {\n childRef = childRef.parentNode;\n }\n\n if (!childRef) return false;\n\n return childRef.isEqualNode(parent) as boolean;\n}\n\nexport function onElementAvailable(selector: string, callback: () => void, fallback: string) {\n const observer = new MutationObserver(() => {\n // For some exchanges, we always see the register element even if we are logged in a fraction of second before everything builds up\n const timeout = setTimeout(() => {\n if (document.querySelector(fallback)) {\n observer.disconnect();\n callback();\n }\n }, 2000);\n\n if (!document.querySelector(selector) && document.querySelector(fallback)) {\n clearTimeout(timeout);\n observer.disconnect();\n callback();\n }\n });\n\n observer.observe(document.body, { childList: true, subtree: true });\n}\n","export default __webpack_public_path__ + \"f42be28a1a26aec2441488502c4494e9.svg\";","import ChromeWebStoreLogo from \"../assets/chrome-web-store.svg\";\nimport { CedeLogo } from \"../assets/cede-store-logo\";\nimport { HtmlComponent } from \"../types/component\";\n\nconst style: HtmlComponent[\"style\"] = (theme) => `\n .modal-container {\n position: fixed;\n top: 0;\n left: 0;\n z-index: 9999;\n height: 100%;\n width: 100%;\n background: rgba(0, 0, 0, 0.5);\n display: flex;\n justify-content: center;\n align-items: center;\n animation: fade-in 0.3s ease-in-out;\n }\n\n .modal {\n max-width: 100%;\n width: 600px;\n height: 500px;\n border-radius: 14px;\n text-align: center;\n display: flex;\n flex-direction: column;\n justify-content: flex-start;\n background: ${theme.palette.background.default};\n overflow-y: auto;\n overflow-x: hidden;\n box-shadow: 0px 4px 70px 50px #5EA6FF26;\n }\n\n .modal-header {\n display: flex;\n flex-direction: row-reverse;\n width: auto;\n min-height: 50px;\n padding: 8px;\n }\n\n .close-icon {\n width: 24px;\n height: 24px;\n fill: rgb(155, 155, 155);\n }\n\n .modal-content {\n display: flex;\n flex-direction: column;\n align-items: center;\n height: calc(100% - 50px);\n overflow: hidden;\n padding: 10px 50px 25px 50px;\n justify-content: space-between;\n }\n\n .modal-title {\n width: 100%;\n }\n\n .modal-title img {\n width: 110px;\n height: 110px;\n }\n\n .modal-title h1 {\n font-weight: 600;\n margin-top: 28px;\n font-size: 24px;\n color: ${theme.palette.text.primary};\n }\n\n .modal-title h1 span {\n color: ${theme.palette.primary.main};\n }\n\n .modal-title p {\n font-size: 14px;\n color: ${theme.palette.text.secondary};\n line-height: 18px;\n font-weight: 400;\n margin-top: 20px;\n }\n\n .modal-title p.modal-content-last {\n margin-top: 35px;\n }\n\n .modal-title p strong {\n color: ${theme.palette.text.secondary};\n }\n\n .modal-content-image:hover {\n box-shadow: 0px 0px 20px 14px rgba(94, 166, 255, 0.31);\n }\n \n .modal-content-image {\n margin-top: 20px;\n transition: box-shadow 0.3s ease-in-out;\n box-shadow: 0px 0px 0px 0px rgba(94, 166, 255, 0.31);\n height: 67px;\n width: 220px;\n border: 1px solid ${theme.palette.cedeComponentHr};\n border-radius: 13px;\n padding: 0 10px;\n cursor: pointer;\n }\n\n .modal-banner-link {\n color: ${theme.palette.text.secondary};\n margin-top: 20px;\n }\n`;\n\nconst html: HtmlComponent[\"html\"] = () => `\n <div class=\"modal-container\" id=\"cede-modal-onboarding\">\n <div class=\"modal\">\n <header class=\"modal-header\">\n <button class=\"icon-button\" id=\"close-modal\">\n <svg class=\"close-icon\" focusable=\"false\" aria-hidden=\"true\" viewBox=\"0 0 24 24\" data-testid=\"CloseIcon\"><path d=\"M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\"></path></svg>\n </button>\n </header>\n <section class=\"modal-content\">\n <div class=\"modal-title\">\n <div class=\"cede-logo\">\n ${CedeLogo}\n </div>\n <h1>\n <span>Cede.store</span>\n is not detected\n </h1>\n <p>\n To proceed, you will need to <strong>download</strong> the extension from the \n <strong>Chrome Web Store</strong>. Let you guide by the <strong>onboarding flow</strong>.\n </p>\n <p class=\"modal-content-last\">\n Click below to access the Chrome Web Store\n </p>\n </div>\n <img id=\"chrome-web-store\" src=${ChromeWebStoreLogo} class=\"modal-content-image\" alt=\"Download from Chrome Web Store\" />\n <a href=\"https://cede.store\" target=\"_blank\" class=\"modal-banner-link\">\n Discover more about cede.store\n </a>\n </section>\n </div>\n </div>\n`;\n\nexport type DisplayInstallationModalConfig = {\n readOnlyOnboarding?: boolean;\n callbackUrl: string;\n};\n\nconst action: (params?: DisplayInstallationModalConfig) => HtmlComponent[\"action\"] = (params) => (component, ui) => {\n const closeBtn = component.html.querySelector(\"#close-modal\");\n const chromeWebStoreBtn = component.html.querySelector(\"#chrome-web-store\");\n\n if (!closeBtn || !chromeWebStoreBtn) return;\n\n closeBtn.addEventListener(\"click\", () => {\n ui.remove(component);\n });\n\n chromeWebStoreBtn.addEventListener(\"click\", () => {\n // stores a value in the local storage for the extension to know from where the user installed the extension.\n localStorage.setItem(\"cede.store-onboarding\", JSON.stringify(params ?? {}));\n window.open(\"https://chrome.google.com/webstore/detail/cedestore/dcfphbfmjohnlcpelbhfbjolhmmlcbhd\", \"_blank\");\n });\n};\n\nexport const OnBoardingModal = (params?: DisplayInstallationModalConfig) => ({\n style,\n html,\n action: action(params),\n});\n","import { ThemeConfig } from \"@cede/utils\";\nimport { HtmlComponent, UIComponent, UIConfig } from \"../types/component\";\nimport { globalStyle } from \"./globalStyle\";\n\nexport class UI {\n // Shadow dom to isolate styles\n private shadow: ShadowRoot;\n\n // Layout to contain components\n private layout: HTMLElement;\n\n // Keep track of active components to remove them later\n private activeComponents: UIComponent[] = [];\n\n constructor(private root: HTMLElement, private theme: ThemeConfig, private config: UIConfig) {\n // Init shadow wrapper to contain shadow dom\n const shadowWrapper = document.createElement(\"div\");\n this.root.appendChild(shadowWrapper);\n this.shadow = shadowWrapper.attachShadow({ mode: \"open\" });\n\n // Setup global style\n const globalStyleElement = document.createElement(\"style\");\n globalStyleElement.innerHTML = globalStyle(this.theme);\n globalStyleElement.id = \"cede-global-style\";\n this.shadow.appendChild(globalStyleElement);\n\n // Init layout to contain components\n this.layout = document.createElement(\"div\");\n // we don't display the widget layout if we need to display only the installation modal\n if (config?.displayLayout !== false) this.layout.classList.add(\"cede-layout\");\n this.layout.id = \"cede-layout\";\n this.shadow.appendChild(this.layout);\n }\n\n renderHtml(\n component: HtmlComponent,\n { clearPrevious = true, animateOnExit = false, layout = false, data = {} } = {},\n ) {\n // Clear previous components\n if (this.activeComponents?.length && clearPrevious && !layout) {\n this.activeComponents.forEach((component) => this.remove(component));\n this.activeComponents = [];\n }\n\n // Setup component style\n const style = document.createElement(\"style\");\n style.innerHTML = component.style(this.theme);\n this.shadow.appendChild(style);\n if (component.name) {\n style.id = `${component.name}-style`;\n }\n\n // Setup component html\n const html = document.createElement(\"div\");\n html.classList.add(\"component-container\");\n html.innerHTML = component.html(this.config, data);\n this.layout.appendChild(html);\n if (component.name) {\n html.id = `${component.name}-html`;\n }\n\n const newActiveComponent: UIComponent = { style, html, opts: { animateOnExit } };\n // We don't want to clear layout components when we add a new one\n if (!layout) {\n this.activeComponents.push(newActiveComponent);\n }\n\n if (component.action) {\n component.action(newActiveComponent, this);\n }\n }\n\n remove(component: UIComponent) {\n if (component.opts?.animateOnExit) {\n // We need to let the animation finish before removing the component\n component.html.classList.add(\"animate-exit\");\n setTimeout(() => {\n this.layout.removeChild(component.html);\n this.shadow.removeChild(component.style);\n }, 600);\n return;\n }\n\n this.layout.removeChild(component.html);\n this.shadow.removeChild(component.style);\n }\n\n clear() {\n this.root.innerHTML = \"\";\n }\n}\n","import { ThemeConfig } from \"@cede/utils\";\n\nexport const globalStyle = (theme: ThemeConfig) => `\n * {\n color: ${theme.palette.text.primary};\n font-family: ${theme.typography(theme.palette).fontFamily};\n margin: 0;\n padding: 0;\n box-sizing: border-box;\n }\n\n .cede-layout {\n position: relative;\n overflow: hidden;\n max-width: ${theme.custom.storeSize.widgetMaxWidth};\n min-width: ${theme.custom.storeSize.widgetMinWidth};\n background: ${theme.palette.background.default};\n width: ${theme.custom.storeSize.widgetWidth};\n height: ${theme.custom.storeSize.widgetHeight};\n border-radius: 12px;\n padding: 12px;\n border: 1px solid transparent;\n }\n\n .component-container {\n position: absolute;\n left: 0;\n top: 0;\n width: 100%;\n height: 100%;\n padding: 12px;\n box-sizing: border-box;\n }\n\n .cede-button {\n height: 50px;\n border-radius: 14px;\n background: ${theme.palette.primary.main};\n color: ${theme.palette.text.primary};\n border: none;\n color: rgba(0, 0, 0, 0.87);\n cursor: pointer;\n width: 100%;\n font-size: ${theme.typography(theme.palette).body1.fontSize};\n }\n\n .icon-button {\n border: none;\n background: transparent;\n cursor: pointer;\n }\n\n .cede-logo, .cede-logo * {\n color: ${theme.palette.logoBorderColor};\n display: inline-block;\n }\n\n .animate-exit {\n z-index: 2;\n animation: fade-out .5s ease-in forwards;\n }\n\n @keyframes fade-out {\n from { opacity: 1; }\n to { opacity: 0; }\n }\n\n @keyframes fade-in {\n from { opacity: 0; }\n to { opacity: 1; }\n }\n`;\n","import BINANCE_LOGO from \"./assets/exchanges_logo/binance_logo.svg\";\nimport BITFINEX_LOGO from \"./assets/exchanges_logo/bitfinexLogo.svg\";\nimport BITGET_LOGO from \"./assets/exchanges_logo/bitgetLogo.svg\";\nimport BITMART_LOGO from \"./assets/exchanges_logo/bitmartLogo.svg\";\nimport BITSTAMP_LOGO from \"./assets/exchanges_logo/bitstampLogo.svg\";\nimport BYBIT_LOGO from \"./assets/exchanges_logo/bybit_logo.svg\";\nimport COINBASE_LOGO from \"./assets/exchanges_logo/coinbase.svg\";\nimport GATEIO_LOGO from \"./assets/exchanges_logo/gateioLogo.svg\";\nimport GEMINI_LOGO from \"./assets/exchanges_logo/gemini_logo.svg\";\nimport HTX_LOGO from \"./assets/exchanges_logo/htxLogo.svg\";\nimport KRAKEN_LOGO from \"./assets/exchanges_logo/kraken.svg\";\nimport KUCOIN_LOGO from \"./assets/exchanges_logo/kucoin.svg\";\nimport MEXC_LOGO from \"./assets/exchanges_logo/mexc_logo.svg\";\nimport OKX_LOGO from \"./assets/exchanges_logo/okx_logo.svg\";\nimport { CEDE_CEXS, CEDE_CEXS_SOON_SUPPORTED } from \"../cexs\";\n\nexport const EXCHANGE_LOGOS: { [key: string]: string } = {\n [CEDE_CEXS.COINBASE]: COINBASE_LOGO,\n [CEDE_CEXS.BINANCE]: BINANCE_LOGO,\n [CEDE_CEXS.KRAKEN]: KRAKEN_LOGO,\n [CEDE_CEXS.GATEIO]: GATEIO_LOGO,\n [CEDE_CEXS.OKX]: OKX_LOGO,\n [CEDE_CEXS.BITFINEX]: BITFINEX_LOGO,\n [CEDE_CEXS.HTX]: HTX_LOGO,\n [CEDE_CEXS.KUCOIN]: KUCOIN_LOGO,\n [CEDE_CEXS.BYBIT]: BYBIT_LOGO,\n [CEDE_CEXS.BITGET]: BITGET_LOGO,\n [CEDE_CEXS.BITSTAMP]: BITSTAMP_LOGO,\n [CEDE_CEXS.BITMART]: BITMART_LOGO,\n [CEDE_CEXS.MEXC]: MEXC_LOGO,\n [CEDE_CEXS.COINBASE_EXCHANGE]: COINBASE_LOGO,\n\n // not supported yet, but promoted on our landing\n [CEDE_CEXS_SOON_SUPPORTED.GEMINI]: GEMINI_LOGO,\n [CEDE_CEXS_SOON_SUPPORTED.BINANCE_US]: BINANCE_LOGO,\n};\n","import { EXCHANGE_LOGOS } from \"./logo\";\n\nexport const getExchangeLogo = (exchangeId: string): string => {\n // Force value for vitest test\n if (process?.env?.VITEST_WORKER_ID) return exchangeId.toLowerCase().replace(\".\", \"\") + \".svg\";\n if (!exchangeId) return \"\";\n return EXCHANGE_LOGOS[exchangeId] || \"\";\n};\n","/* eslint-disable no-console */\nimport { Any } from \"@cede/types\";\nimport { LoggerMessageType, LoggerType } from \"./logger.type\";\n\nexport class Logger implements LoggerType {\n static singleton: Logger;\n verbose?: boolean;\n\n static readonly types = {\n ERROR: { color: \"red\", type: \"ERROR\" },\n WARNING: { color: \"orange\", type: \"WARNING\" },\n INFO: { color: \"#3399ff\", type: \"INFO\" },\n SUCCESS: { color: \"green\", type: \"SUCCESS\" },\n };\n\n log(message: string, type: LoggerMessageType) {\n if (process.env.CEDE_NODE_ENV === \"development\" || this.verbose) {\n console.log(`%c[${type.type}] ${message}`, `color: ${type.color}`);\n }\n }\n\n error(e: Any) {\n if (process.env.CEDE_NODE_ENV === \"development\" && e instanceof Error) {\n console.error(e);\n }\n }\n\n enableVerbose() {\n this.verbose = true;\n }\n\n static getInstance() {\n if (!Logger.singleton) {\n Logger.singleton = new Logger();\n }\n return Logger.singleton;\n }\n\n static log(message: string, type: LoggerMessageType) {\n Logger.getInstance().log(message, type);\n }\n\n static error(e: Any) {\n Logger.getInstance().error(e);\n }\n}\n","import ccxt from \"@cede/ccxt\";\nimport { AccountId, CefiInfoTx, Order, Transaction, TxStatus, TxType, WalletType } from \"@cede/types\";\nimport { DEFAULT_UNDEFINED_STRING } from \"../utils\";\n\nexport const orderStatusToTransactionStatus = (status: Order[\"status\"]): TxStatus => {\n return (() => {\n switch (status) {\n case \"open\":\n return TxStatus.PENDING;\n case \"closed\":\n return TxStatus.OK;\n case \"canceled\":\n return TxStatus.CANCELLED;\n default:\n return TxStatus.CANCELLED; // it can only be 'expired' or 'rejected' according to CCXT\n }\n })();\n};\n\nexport function orderToTransactionMapper(\n order: Order & { accountId: AccountId; exchangeId: string },\n): Transaction<CefiInfoTx, CefiInfoTx> {\n const status = orderStatusToTransactionStatus(order.status);\n const type: TxType = \"order\";\n const filled = order.type === \"market\" ? order.filled : order.amount;\n // cost is equal to 0 when order is opened so we need to guess it\n const cost = ccxt.Precise.stringMul(String(order.price), String(filled));\n const from: CefiInfoTx = {\n account: {\n exchangeId: order.exchangeId,\n accountId: order.accountId,\n },\n wallet: {\n walletType: WalletType.SPOT,\n depositAddress: \"unknown\",\n },\n transaction: {\n amount: order.side === \"sell\" ? filled : Number(cost),\n tokenSymbol: order.pairSymbol.split(\"/\")[order.side === \"sell\" ? 0 : 1] || DEFAULT_UNDEFINED_STRING,\n transactionId: order.id,\n fee: {\n amount: order.fee?.amount ?? 0,\n tokenSymbol: order.fee?.tokenSymbol ?? order.pairSymbol.split(\"/\")[0],\n },\n status,\n timestamp: order.timestamp,\n },\n };\n const to: CefiInfoTx = {\n account: {\n exchangeId: order.exchangeId,\n accountId: order.accountId,\n },\n wallet: {\n walletType: WalletType.SPOT,\n depositAddress: \"unknown\",\n },\n transaction: {\n // cost is equal to 0 when order is opened\n amount: order.side === \"sell\" ? Number(cost) : filled,\n tokenSymbol: order.pairSymbol.split(\"/\")[order.side === \"sell\" ? 1 : 0] || DEFAULT_UNDEFINED_STRING,\n transactionId: order.id,\n fee: {\n amount: order.fee?.amount ?? 0,\n tokenSymbol: order.fee?.tokenSymbol ?? order.pairSymbol.split(\"/\")[1],\n },\n status,\n timestamp: order.timestamp,\n },\n };\n\n return {\n from,\n to,\n type,\n pairSymbol: order.pairSymbol,\n };\n}\n","/**\n * Parse limit amount in for the Market order, from quote (cost) to base minimum amount\n * @param minCost\n * @param tickerPrice\n * @param toPrecision\n * @param safetyMargin - safety margin to take into account the price fluctuation. 0.15 = 15%\n */\nexport const parseMinAmountFromMinCost = (\n minCost: number,\n tickerPrice: string,\n toPrecision: number,\n safetyMargin = 0.15,\n) => {\n const limitAmount = minCost / parseFloat(tickerPrice);\n const limitAmountWithMargin = limitAmount * (1 + safetyMargin); // add x% safety margin if the price fluctuates\n return parseFloat(limitAmountWithMargin.toPrecision(toPrecision));\n};\n\n/**\n * Parse limit amount in for the Market order, from base minimum amount required to quote (cost)\n * @param minAmount\n * @param tickerPrice\n * @param toPrecision\n * @param safetyMargin\n */\nexport const parseMinCostFromMinAmount = (\n minAmount: number,\n tickerPrice: string,\n toPrecision: number,\n safetyMargin = 0.15,\n) => {\n const limitCost = minAmount * parseFloat(tickerPrice);\n const limitCostWithMargin = limitCost * (1 + safetyMargin); // add x% safety margin if the price fluctuates\n return parseFloat(limitCostWithMargin.toPrecision(toPrecision));\n};\n\n/**\n * Parse trade minimum safe amount by adding a safety margin (15%)\n * @param minLimit\n * @param toPrecision\n * @param safetyMargin - safety margin to take into account the price fluctuation. 0.15 = 15%\n */\nexport const parseLimit = (minLimit: number, toPrecision: number, safetyMargin = 0.15) => {\n const limitCostWithMargin = minLimit * (1 + safetyMargin); // add x% safety margin if the price fluctuates\n return parseFloat(limitCostWithMargin.toPrecision(toPrecision));\n};\n\nexport const DEFAULT_UNDEFINED_STRING = \"unknown\";\nexport const DEFAULT_UNDEFINED_NUMBER = 0;\n","import { formatBalance } from \"../balance\";\n\n/**\n *\n * This function generates a Random number from a given range\n *\n * @param minRange - Max value of the range\n * @param maxRange - Min value of the range\n * @returns - return an integer random number\n */\nexport const generateRandomNumber = (minRange: number, maxRange: number): number => {\n return Math.floor(Math.random() * (maxRange - minRange + 1)) + minRange;\n};\n\n// If we pass the amount as '$1000.20' or 'EUR1000.20'\n// as string instead of a number,\n// use this to get the number back\nexport const getNumberFromAmount = (amount: string | number) => {\n if (typeof amount === \"number\") return amount;\n return +amount.replace(/[$a-z]+/i, \"\").replace(/\\s/g, \"\");\n};\n\nexport const euclideanDivision = (a: number, b: number): [number, number] => {\n const q = Math.floor(a / b);\n const r = a - b * q;\n return [q, r];\n};\n\nexport const formatNumberAsString = (value: string) => {\n // \\s is used to match any whitespace character\n value = value.replace(/\\s/g, \"\");\n\n // If the value is an empty string, set the amount to \"0\"\n if (value === \"\") {\n return \"0\";\n }\n\n const hasMoreDecimalPoints = (value.match(/\\./gi) ?? \"\").length > 1;\n if (hasMoreDecimalPoints && value.endsWith(\".\")) {\n // amount without the decimal point at the end\n const newAmount = value.substring(0, value.length - 1);\n return newAmount;\n }\n\n // if value contains \".\" and value.endsWith(\"0\") => 1.0; 1.10; 1.100\n const decimalZero = value.includes(\".\") && value.endsWith(\"0\"); // 1.00...; 1.10...\n const decimalPlaces = value.includes(\".\") ? (value.split(\".\")[1] || \"\").length : 0;\n\n // Prevent 10e-7 error\n if (decimalPlaces > 6) {\n const newAmount = value.split(\".\");\n newAmount[1] = (newAmount[1] || \"\").slice(0, 6);\n return newAmount.join(\".\");\n }\n\n // If the value ends with \".\", append \"0\" to form a valid floating point number\n const inputNumber = decimalZero ? value : parseFloat(value.endsWith(\".\") ? value + \"0\" : value);\n if (!decimalZero && isNaN(inputNumber as number)) return value;\n\n // If the number is too large, return to avoid setting amount to \"Infinity\"\n if (inputNumber === Infinity) return value; // TODO: we should use BigNumber instead of float everywhere (to refactor)\n\n // If the original value ends with \".\", add it back after formatting the balance\n return decimalZero ? value : formatBalance(inputNumber as number) + (value.endsWith(\".\") ? \".\" : \"\");\n};\n","export enum QueryKeys {\n STANDARDIZED_NETWORKS = \"standardizedNetworks\",\n SUPPORTED_EXCHANGES = \"supportedExchanges\",\n WITHDRAWABLE_CURRENCIES = \"withdrawableCurrencies\",\n VAULT_TRANSACTIONS = \"getVaultTransactions\",\n VAULTS_QUERY_KEY = \"vaults\",\n VAULTS_EVENTS_QUERY_KEY = \"vaults-events\",\n PROVIDER_EVENTS_QUERY = \"provider-events\",\n AVAILABLE_EXCHANGES = \"availableExchanges\",\n PARTNERS = \"partners\",\n CONFIG = \"config\",\n ADDRESS_BOOK = \"addressBook\",\n USER_REWARDS = \"userRewards\",\n QUESTS = \"quests\",\n PASSWORDLESS_LOGIN = \"passwordlessLogin\",\n ENVIRONMENT = \"environment\",\n PENDING_APPROVAL_REQUEST = \"pendingApprovalRequest\",\n DISCORD_STATUS = \"DISCORD_STATUS\",\n REFERRAL_CODE = \"referralCode\",\n HAS_JOINED_DISCORD = \"hasJoinedDiscord\",\n USER_MULTIPLIERS = \"userMultipliers\",\n MULTIPLE_TX_FEES = \"multipleTxFees\",\n LEADERBOARD = \"leaderboard\",\n BYPASS_APPROVAL_TRADE_HUB = \"bypassApprovalTradeHub\",\n CAMPAIGN_OPEN_ORDERS = \"campaignOpenOrders\",\n CEDE_STORE_VERSION = \"cedeStoreVersion\",\n CAMPAIGNS_METADATA = \"campaignsMetadata\",\n GENERAL_STATS = \"generalStats\",\n USER_STATS = \"userStats\",\n GLOBAL_LEADERBOARD = \"globalLeaderboard\",\n}\n","import { Any } from \"@cede/types\";\nimport { getNumberFromAmount } from \"../numbers/utils\";\n\n// We set \"any\" because there are multiple types that have \"amount\" and \"label\" values\n// and if we set the returned value, it will create warnings in other files\nconst sortItemsByDescendingAmountAndAlphabetical = <T = Any>(\n options: T[],\n shouldDisable?: (option: T) => boolean,\n): T[] => {\n if (!options) return [];\n const sortedOptions = [...options].sort((a: Any, b: Any) => {\n if ((a.isDisabled && b.isDisabled) || (shouldDisable?.(a) && shouldDisable?.(b))) return 0;\n if (a.isDisabled || shouldDisable?.(a)) return 1;\n if (b.isDisabled || shouldDisable?.(b)) return -1;\n\n const hasAmount = a.amount && b.amount;\n const hasValue = a.value && b.value;\n if (hasAmount || hasValue) {\n const amountA = a.amount || a.value;\n const amountB = b.amount || b.value;\n if (typeof amountA === \"string\" || typeof amountB === \"string\") {\n // If values are numbers that are passed as strings, eg. '50'\n if (+amountA || +amountB) {\n return +amountB - +amountA;\n }\n if (amountA.trim()[0] === \"$\" || amountB.trim()[0] === \"$\") {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n const valueA = getNumberFromAmount(amountA);\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n const valueB = getNumberFromAmount(amountB);\n\n return valueA > valueB ? -1 : 1;\n }\n return (a.amount || a.value).toLowerCase() > (b.amount || b.value).toLowerCase() ? 1 : -1;\n }\n return amountB - amountA;\n }\n return a.label.toLowerCase() > b.label.toLowerCase() ? 1 : -1;\n });\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return sortedOptions;\n};\n\nexport { sortItemsByDescendingAmountAndAlphabetical };\n","import { AmountValidator, PropertyType } from \"@cede/types\";\n\n/**\n * Capitalize a given string\n *\n * @param string - string to capitalize\n * @returns Return a capitalized string\n *\n * @example\n * Here is an example of how to use the function\n * ```\n * // Prints Hello\n * capitalize(\"hello\")\n * ```\n * @public\n */\nexport const capitalize = (string?: string) => {\n if (!string) return \"\";\n return string.charAt(0).toUpperCase() + string.substring(1);\n};\n\nconst plainWords = new Set([\"the\", \"of\", \"to\"]);\n\n/**\n * Capitalize all words in a given string\n *\n * @remarks\n * This is just a method to illustrate how can we document or use\n * in other packages\n *\n * @example\n * Here is an example of how to use id\n * ```\n * // Prints Hello World\n * makeFistLettersCapital(\"hello world\")\n * ```\n *\n * @param rawStr - array to check\n * @param usePlainwords - if true it will not capitalize some words\n * @param plainWordList - array of words it should not capitalize. By default [the, of, to] is the array\n * @returns The capitalized string\n */\nexport const makeFirstLettersCapital = (rawStr: string, usePlainwords?: boolean, plainWordList?: string[]): string => {\n if (usePlainwords) {\n const customPlainWords = plainWordList && plainWordList.length ? new Set(plainWordList) : plainWords;\n return (\n rawStr\n // eslint-disable-next-line no-useless-escape\n .split(/[\\s\\_]+/)\n .map((word) => (customPlainWords.has(word) ? word : capitalize(word)))\n .join(\" \")\n );\n }\n return (\n rawStr\n // eslint-disable-next-line no-useless-escape\n .split(/[\\s\\_]+/)\n .map(capitalize)\n .join(\" \")\n );\n};\n\nexport const countOccurence = (text: string, occurence: string) => {\n return text.split(occurence).length - 1;\n};\n\nexport const formatNumericString = (numericString: string) => {\n let value: string = numericString.replace(/\\s/g, \"\");\n value = value.length === 2 && value[0] === \"0\" && value[1] !== \".\" ? value.slice(1) : value;\n value = !value ? \"0\" : value;\n return value;\n};\n\nexport const isNumericString = (numericString: string) => /^\\d*\\.?\\d*$/.test(numericString);\n\nexport const cropTextInMiddle = (text: string, maxLength: number) => {\n if (maxLength > text.length) return text;\n const middleLength = Math.floor(maxLength / 2);\n const part1 = text.slice(0, middleLength);\n const part2 = text.slice(-middleLength);\n return `${part1}...${part2}`;\n};\n\nexport function formatShortAddress(address: string): string {\n if (address.length < 15) return address;\n const newAddress = \"\";\n return newAddress.concat(address.slice(0, 6), \"...\", address.slice(-6));\n}\n\nexport function generateAcronym(words: string): string {\n const matches = words.match(/\\b(\\w)/g);\n if (!matches) return \"\";\n return matches.join(\"\");\n}\n\nexport const validateAmountFrom: PropertyType<AmountValidator, \"validate\"> = (integerPart, decimalPart, opts) => {\n if (opts?.decimals) {\n if (decimalPart.length > opts.decimals) {\n return false;\n }\n }\n if (opts?.integer) {\n if (integerPart.length > opts.integer) {\n return false;\n }\n }\n return true;\n};\n\nexport function replacePlaceholdersByValue(content: string, mappingTable: Record<string, string | undefined>) {\n return Object.entries(mappingTable).reduce((acc, [key, value]) => {\n if (!value) return acc;\n return acc.replace(`{${key}}`, value);\n }, content);\n}\n","import { SendWidgetTheme } from \"@cede/types\";\nimport { ThemeConfig, colors, lightColors, themeConfig } from \"@cede/utils\";\n\n/**\n * @description Merge theme with widget theme\n */\nexport const inferTheme = (widgetTheme?: SendWidgetTheme): ThemeConfig => {\n const { palette, typography, custom } = themeConfig;\n const paletteConfig = palette(widgetTheme?.mode === \"light\" ? lightColors : colors, widgetTheme?.mode);\n return {\n ...themeConfig,\n palette: {\n ...paletteConfig,\n background: {\n ...paletteConfig.background,\n default: widgetTheme?.primaryColor ?? paletteConfig.background?.default,\n darkPaper: widgetTheme?.primaryColor ?? paletteConfig.background?.darkPaper,\n paper: widgetTheme?.secondaryColor ?? paletteConfig.background?.paper,\n component: widgetTheme?.secondaryColor ?? paletteConfig.background?.component,\n },\n text: {\n ...paletteConfig.text,\n primary: widgetTheme?.primaryTextColor ?? paletteConfig.text?.primary,\n secondary: widgetTheme?.secondaryTextColor ?? paletteConfig.text?.secondary,\n },\n error: {\n main: widgetTheme?.errorColor ?? paletteConfig.cedeErrorColor,\n },\n primary: {\n main: widgetTheme?.accentColor ?? paletteConfig.cedePrimaryColor,\n },\n warning: {\n main: widgetTheme?.warningColor ?? paletteConfig.cedeWarningColor,\n },\n cedeTextDisabled: widgetTheme?.primaryTextColor ?? paletteConfig.cedeTextDisabled,\n logoBorderColor: widgetTheme?.logoBorderColor ?? paletteConfig.logoBorderColor,\n cedeComponentHr: widgetTheme?.inputBorderColor ?? paletteConfig.cedeComponentHr,\n },\n typography: (palette) => ({\n ...typography(palette),\n fontFamily: widgetTheme?.fontFamily ?? typography(palette).fontFamily,\n }),\n shape: {\n borderRadius: widgetTheme?.borderRadius ?? themeConfig.shape.borderRadius,\n },\n custom: {\n ...custom,\n storeSize: {\n ...custom.storeSize,\n widgetWidth: widgetTheme?.width ?? custom.storeSize.widgetWidth,\n },\n },\n breakpoints: themeConfig.breakpoints,\n };\n};\n","import { Breakpoints, PaletteOptions } from \"./types\";\n\nexport const colors = {\n primaryDarkBlue: \"#3D4E5B\", //Grey Blue\n secondaryDarkBlue: \"#247CEC\", //Navy blue\n cedePrimaryColor: \"#5EA6FF\", //Blue\n cedePrimaryColorLight: \"#9acfed\", // This color is not part of the DS can change at any time\n cedeSecondaryColor: \"#A6FB74\", //Green\n cedeSuccessColor: \"#A6FB74\", // Same color as above but this is not a primary color it is a success color\n cedeWarningColor: \"#FFA726\",\n cedeWarningLightColor: \"#E2C395\",\n cedeErrorColor: \"#f44335\",\n cedeSecondaryColorDark: \"#0B7400\", // This color is not part of the DS can change at any time\n cedePrimaryBackgroundColor: \"#0A0B0b\", //Black\n cedeTextPrimaryColor: \"#FFFFFF\", //White\n cedeTextSecondaryColor: \"#9B9B9B\",\n cedeSecondaryBackgroundColor: \"#1B1B1B\", //Black\n cedeTextGrey: \"rgba(255, 255, 255, 0.5)\",\n cedeTextDisabled: \"rgba(255, 255, 255, 0.7)\",\n cedeSkeleton: \"rgba(255, 255, 255, 0.2)\",\n cedeComponentHr: \"rgba(255, 255, 255, 0.12)\",\n cedeComponentBackgroundColor: \"rgba(255, 255, 255, 0.08)\",\n cedeComponentBorderGreyColor: \"#A3A3A3\",\n cedeComponentHoveredBackgroundColor: \"rgba(255, 255, 255, 0.18)\",\n cedePaperBackgroundColor:\n \"linear-gradient(180deg, rgba(255, 255, 255, 0.12) 0%, rgba(255, 255, 255, 0.12) 100%), #121212\",\n cedePaperLightBackgroundColor: \"#373737\",\n cedePaperDarkBackgroundColor: \"#1F1F1F\",\n cedePaperGradientBackground:\n \"linear-gradient(180deg, rgba(255, 255, 255, 0.13) 0%, rgba(255, 255, 255, 0.13) 100%), #121212\",\n cedePaperModalGradientBackground:\n \"linear-gradient(180deg, rgba(255, 255, 255, 0.05) 0%, rgba(255, 255, 255, 0.05) 100%), #121212\",\n cedeBubbleBackgroundColor: \"#616161E5\",\n cedeGradientPrimaryBackground: \"linear-gradient(140.84deg, #5EA6FF -14.8%, #A6FB75 127.29%);\",\n cedeBuyColor: \"#11cb81\",\n cedeSellColor: \"#f5465d\",\n cedeHelpBackgroundColor: \"#404040\",\n};\n\nexport const lightColors: typeof colors = {\n ...colors,\n cedePrimaryBackgroundColor: \"#FFFEFD\",\n cedeTextPrimaryColor: \"#1B2026\",\n cedeTextSecondaryColor: \"#525860\",\n cedeHelpBackgroundColor: \"#EDEDED\",\n cedePaperLightBackgroundColor: \"#EDEDED\",\n cedePaperDarkBackgroundColor: \"#F6F6F6\",\n cedePaperBackgroundColor: \"#FFFEFD\",\n cedeTextDisabled: \"rgba(54, 63, 77, 0.5)\",\n cedeSkeleton: \"rgba(54, 63, 77, 0.2)\",\n cedeComponentBackgroundColor: \"#F6F6F6\",\n cedeSuccessColor: \"rgb(91, 188, 33)\",\n cedeComponentHr: \"#EDEDED\",\n};\n\ntype CustomColors = typeof colors;\n\nconst palette = (colors: CustomColors, mode: \"dark\" | \"light\" = \"dark\"): PaletteOptions => ({\n mode,\n background: {\n default: colors.cedePrimaryBackgroundColor,\n paper: colors.cedePaperBackgroundColor,\n lightPaper: colors.cedePaperLightBackgroundColor,\n darkPaper: colors.cedePaperDarkBackgroundColor,\n component: colors.cedeComponentBackgroundColor,\n help: colors.cedeHelpBackgroundColor,\n },\n primary: { main: colors.cedePrimaryColor },\n secondary: { main: colors.cedeSecondaryColor },\n text: {\n primary: colors.cedeTextPrimaryColor,\n secondary: colors.cedeTextSecondaryColor,\n disabled: colors.cedeTextDisabled,\n },\n action: {\n disabledBackground: colors.cedeComponentHr,\n disabled: colors.cedeTextDisabled,\n },\n success: {\n main: colors.cedeSuccessColor,\n },\n warning: {\n main: colors.cedeWarningColor,\n light: colors.cedeWarningLightColor,\n },\n error: {\n main: colors.cedeErrorColor,\n },\n logoBorderColor: colors.cedePrimaryColor,\n ...colors,\n});\n\nconst custom = {\n zIndex: {\n baseLayer: 1,\n mediumLayer: 5,\n topLayer: 10,\n extraLayer: 15,\n },\n storeSize: {\n width: \"370px\",\n tabWidth: \"450px\",\n bigTabWidth: \"1265px\",\n requestTabWidth: \"600px\",\n height: \"600px\",\n tabHeight: \"600px\",\n bigTabHeight: \"800px\",\n requestTabHeight: \"500px\",\n widgetWidth: \"385px\",\n tradeWidgetHeight: \"600px\",\n widgetHeight: \"565px\",\n widgetMinWidth: \"330px\",\n widgetMaxWidth: \"500px\",\n },\n navBarSize: {\n height: \"50px\",\n widgetHeight: \"35px\",\n },\n defaultBoxRadius: 1,\n largeBoxRadius: 3.5,\n mediumBoxRadius: 2,\n buttonSmallRadius: 3,\n buttonDefaultRadius: 3.5,\n buttonRoundedRadius: 100,\n smallGutterMargin: \"8px\",\n gutterMargin: \"16px\",\n mediumGutterMargin: \"28px\",\n bigGutterMargin: \"40px\",\n cedeLinkBigContentMargin: \"60px\",\n cedeLinkSmallContentMargin: \"16px\",\n cedeLinkBigContentMaxWidth: \"1315px\",\n inputRadius: {\n default: 4,\n rounded: 5,\n },\n imgSize: {\n small: \"32px\",\n medium: \"56px\",\n large: \"110px\",\n },\n iconSize: {\n small: \"16px\",\n medium: \"20px\",\n large: \"29px\",\n },\n linkLogoWidth: {\n small: \"99px\",\n medium: \"151px\",\n large: \"230px\",\n },\n linkLogoHeight: {\n small: \"15px\",\n medium: \"23px\",\n large: \"35px\",\n },\n inputWidth: {\n small: \"256px\",\n },\n circleSize: {\n small: \"8px\",\n },\n opacity: {\n alert: 0.6,\n legend: 0.7,\n },\n textSize: {\n small: \"9px\",\n medium: \"11px\",\n large: \"13px\",\n },\n iconUnderlayMargin: 4,\n portfolioItemWidth: \"170px\",\n portfolioItemHeight: \"60px\",\n linkInactiveFilterWidth: \"160px\",\n linkActiveFilterWidth: \"200px\",\n txHistoryItem: {\n height: 50,\n },\n txHistoryList: {\n dateLineHeight: 74,\n dateLineMargin: 16,\n txDate: {\n margin: 15,\n height: 35,\n },\n txPlace: {\n margin: 16,\n height: 50,\n },\n txItem: {\n collapsed: 75,\n toggled: 145,\n },\n },\n dappListItemHeight: 55,\n gradientButtonBackground: colors.cedeGradientPrimaryBackground,\n};\n\nexport const InterFont = \"'Inter', sans-serif\";\n\nexport const typography = (palette: PaletteOptions) => ({\n fontFamily: InterFont,\n h1: {\n fontWeight: \"600\",\n marginTop: \"16px\",\n fontSize: \"24px\",\n color: palette.text?.primary,\n },\n h2: {\n fontWeight: \"500\",\n fontSize: \"20px\",\n marginBottom: \"15px\",\n lineHeight: \"18px\",\n color: palette.text?.secondary,\n },\n h3: {\n fontSize: \"16px\",\n color: palette.text?.primary,\n },\n h4: {\n color: palette.text?.primary,\n },\n h5: {\n color: palette.text?.primary,\n },\n subtitle1: {\n color: palette.text?.primary,\n },\n subtitle2: {\n color: palette.text?.secondary,\n },\n body1: {\n fontSize: \"14px\",\n lineHeight: \"18px\",\n fontWeight: 400,\n color: palette.text?.primary,\n },\n body2: {\n color: palette.text?.secondary,\n fontSize: \"14px\",\n },\n caption: {\n fontSize: \"11px\",\n color: palette.text?.secondary,\n },\n});\n\nexport const breakpoints: Breakpoints = {\n values: {\n xs: 0,\n sm: 600,\n md: 960,\n lg: 1480,\n xl: 1920,\n },\n};\n\nexport const shape = {\n borderRadius: 4,\n};\n\nexport const themeConfig = { palette, custom, typography, breakpoints, shape };\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.EthereumProviderError = exports.EthereumRpcError = void 0;\nconst fast_safe_stringify_1 = require(\"fast-safe-stringify\");\n/**\n * Error subclass implementing JSON RPC 2.0 errors and Ethereum RPC errors\n * per EIP-1474.\n * Permits any integer error code.\n */\nclass EthereumRpcError extends Error {\n constructor(code, message, data) {\n if (!Number.isInteger(code)) {\n throw new Error('\"code\" must be an integer.');\n }\n if (!message || typeof message !== 'string') {\n throw new Error('\"message\" must be a nonempty string.');\n }\n super(message);\n this.code = code;\n if (data !== undefined) {\n this.data = data;\n }\n }\n /**\n * Returns a plain object with all public class properties.\n */\n serialize() {\n const serialized = {\n code: this.code,\n message: this.message,\n };\n if (this.data !== undefined) {\n serialized.data = this.data;\n }\n if (this.stack) {\n serialized.stack = this.stack;\n }\n return serialized;\n }\n /**\n * Return a string representation of the serialized error, omitting\n * any circular references.\n */\n toString() {\n return fast_safe_stringify_1.default(this.serialize(), stringifyReplacer, 2);\n }\n}\nexports.EthereumRpcError = EthereumRpcError;\n/**\n * Error subclass implementing Ethereum Provider errors per EIP-1193.\n * Permits integer error codes in the [ 1000 <= 4999 ] range.\n */\nclass EthereumProviderError extends EthereumRpcError {\n /**\n * Create an Ethereum Provider JSON-RPC error.\n * `code` must be an integer in the 1000 <= 4999 range.\n */\n constructor(code, message, data) {\n if (!isValidEthProviderCode(code)) {\n throw new Error('\"code\" must be an integer such that: 1000 <= code <= 4999');\n }\n super(code, message, data);\n }\n}\nexports.EthereumProviderError = EthereumProviderError;\n// Internal\nfunction isValidEthProviderCode(code) {\n return Number.isInteger(code) && code >= 1000 && code <= 4999;\n}\nfunction stringifyReplacer(_, value) {\n if (value === '[Circular]') {\n return undefined;\n }\n return value;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9jbGFzc2VzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDZEQUFnRDtBQVNoRDs7OztHQUlHO0FBQ0gsTUFBYSxnQkFBb0IsU0FBUSxLQUFLO0lBTTVDLFlBQVksSUFBWSxFQUFFLE9BQWUsRUFBRSxJQUFRO1FBRWpELElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQzNCLE1BQU0sSUFBSSxLQUFLLENBQ2IsNEJBQTRCLENBQzdCLENBQUM7U0FDSDtRQUNELElBQUksQ0FBQyxPQUFPLElBQUksT0FBTyxPQUFPLEtBQUssUUFBUSxFQUFFO1lBQzNDLE1BQU0sSUFBSSxLQUFLLENBQ2Isc0NBQXNDLENBQ3ZDLENBQUM7U0FDSDtRQUVELEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNmLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLElBQUksSUFBSSxLQUFLLFNBQVMsRUFBRTtZQUN0QixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztTQUNsQjtJQUNILENBQUM7SUFFRDs7T0FFRztJQUNILFNBQVM7UUFDUCxNQUFNLFVBQVUsR0FBK0I7WUFDN0MsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO1lBQ2YsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO1NBQ3RCLENBQUM7UUFDRixJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssU0FBUyxFQUFFO1lBQzNCLFVBQVUsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztTQUM3QjtRQUNELElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNkLFVBQVUsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztTQUMvQjtRQUNELE9BQU8sVUFBVSxDQUFDO0lBQ3BCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxRQUFRO1FBQ04sT0FBTyw2QkFBYSxDQUNsQixJQUFJLENBQUMsU0FBUyxFQUFFLEVBQ2hCLGlCQUFpQixFQUNqQixDQUFDLENBQ0YsQ0FBQztJQUNKLENBQUM7Q0FDRjtBQXRERCw0Q0FzREM7QUFFRDs7O0dBR0c7QUFDSCxNQUFhLHFCQUF5QixTQUFRLGdCQUFtQjtJQUUvRDs7O09BR0c7SUFDSCxZQUFZLElBQVksRUFBRSxPQUFlLEVBQUUsSUFBUTtRQUVqRCxJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDakMsTUFBTSxJQUFJLEtBQUssQ0FDYiwyREFBMkQsQ0FDNUQsQ0FBQztTQUNIO1FBRUQsS0FBSyxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDN0IsQ0FBQztDQUNGO0FBaEJELHNEQWdCQztBQUVELFdBQVc7QUFFWCxTQUFTLHNCQUFzQixDQUFDLElBQVk7SUFDMUMsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQztBQUNoRSxDQUFDO0FBRUQsU0FBUyxpQkFBaUIsQ0FBQyxDQUFVLEVBQUUsS0FBYztJQUNuRCxJQUFJLEtBQUssS0FBSyxZQUFZLEVBQUU7UUFDMUIsT0FBTyxTQUFTLENBQUM7S0FDbEI7SUFDRCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUMifQ==","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.errorValues = exports.errorCodes = void 0;\nexports.errorCodes = {\n rpc: {\n invalidInput: -32000,\n resourceNotFound: -32001,\n resourceUnavailable: -32002,\n transactionRejected: -32003,\n methodNotSupported: -32004,\n limitExceeded: -32005,\n parse: -32700,\n invalidRequest: -32600,\n methodNotFound: -32601,\n invalidParams: -32602,\n internal: -32603,\n },\n provider: {\n userRejectedRequest: 4001,\n unauthorized: 4100,\n unsupportedMethod: 4200,\n disconnected: 4900,\n chainDisconnected: 4901,\n },\n};\nexports.errorValues = {\n '-32700': {\n standard: 'JSON RPC 2.0',\n message: 'Invalid JSON was received by the server. An error occurred on the server while parsing the JSON text.',\n },\n '-32600': {\n standard: 'JSON RPC 2.0',\n message: 'The JSON sent is not a valid Request object.',\n },\n '-32601': {\n standard: 'JSON RPC 2.0',\n message: 'The method does not exist / is not available.',\n },\n '-32602': {\n standard: 'JSON RPC 2.0',\n message: 'Invalid method parameter(s).',\n },\n '-32603': {\n standard: 'JSON RPC 2.0',\n message: 'Internal JSON-RPC error.',\n },\n '-32000': {\n standard: 'EIP-1474',\n message: 'Invalid input.',\n },\n '-32001': {\n standard: 'EIP-1474',\n message: 'Resource not found.',\n },\n '-32002': {\n standard: 'EIP-1474',\n message: 'Resource unavailable.',\n },\n '-32003': {\n standard: 'EIP-1474',\n message: 'Transaction rejected.',\n },\n '-32004': {\n standard: 'EIP-1474',\n message: 'Method not supported.',\n },\n '-32005': {\n standard: 'EIP-1474',\n message: 'Request limit exceeded.',\n },\n '4001': {\n standard: 'EIP-1193',\n message: 'User rejected the request.',\n },\n '4100': {\n standard: 'EIP-1193',\n message: 'The requested account and/or method has not been authorized by the user.',\n },\n '4200': {\n standard: 'EIP-1193',\n message: 'The requested method is not supported by this Ethereum provider.',\n },\n '4900': {\n standard: 'EIP-1193',\n message: 'The provider is disconnected from all chains.',\n },\n '4901': {\n standard: 'EIP-1193',\n message: 'The provider is disconnected from the specified chain.',\n },\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3ItY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2Vycm9yLWNvbnN0YW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUF1QmEsUUFBQSxVQUFVLEdBQWU7SUFDcEMsR0FBRyxFQUFFO1FBQ0gsWUFBWSxFQUFFLENBQUMsS0FBSztRQUNwQixnQkFBZ0IsRUFBRSxDQUFDLEtBQUs7UUFDeEIsbUJBQW1CLEVBQUUsQ0FBQyxLQUFLO1FBQzNCLG1CQUFtQixFQUFFLENBQUMsS0FBSztRQUMzQixrQkFBa0IsRUFBRSxDQUFDLEtBQUs7UUFDMUIsYUFBYSxFQUFFLENBQUMsS0FBSztRQUNyQixLQUFLLEVBQUUsQ0FBQyxLQUFLO1FBQ2IsY0FBYyxFQUFFLENBQUMsS0FBSztRQUN0QixjQUFjLEVBQUUsQ0FBQyxLQUFLO1FBQ3RCLGFBQWEsRUFBRSxDQUFDLEtBQUs7UUFDckIsUUFBUSxFQUFFLENBQUMsS0FBSztLQUNqQjtJQUNELFFBQVEsRUFBRTtRQUNSLG1CQUFtQixFQUFFLElBQUk7UUFDekIsWUFBWSxFQUFFLElBQUk7UUFDbEIsaUJBQWlCLEVBQUUsSUFBSTtRQUN2QixZQUFZLEVBQUUsSUFBSTtRQUNsQixpQkFBaUIsRUFBRSxJQUFJO0tBQ3hCO0NBQ0YsQ0FBQztBQUVXLFFBQUEsV0FBVyxHQUFHO0lBQ3pCLFFBQVEsRUFBRTtRQUNSLFFBQVEsRUFBRSxjQUFjO1FBQ3hCLE9BQU8sRUFBRSx1R0FBdUc7S0FDakg7SUFDRCxRQUFRLEVBQUU7UUFDUixRQUFRLEVBQUUsY0FBYztRQUN4QixPQUFPLEVBQUUsOENBQThDO0tBQ3hEO0lBQ0QsUUFBUSxFQUFFO1FBQ1IsUUFBUSxFQUFFLGNBQWM7UUFDeEIsT0FBTyxFQUFFLCtDQUErQztLQUN6RDtJQUNELFFBQVEsRUFBRTtRQUNSLFFBQVEsRUFBRSxjQUFjO1FBQ3hCLE9BQU8sRUFBRSw4QkFBOEI7S0FDeEM7SUFDRCxRQUFRLEVBQUU7UUFDUixRQUFRLEVBQUUsY0FBYztRQUN4QixPQUFPLEVBQUUsMEJBQTBCO0tBQ3BDO0lBQ0QsUUFBUSxFQUFFO1FBQ1IsUUFBUSxFQUFFLFVBQVU7UUFDcEIsT0FBTyxFQUFFLGdCQUFnQjtLQUMxQjtJQUNELFFBQVEsRUFBRTtRQUNSLFFBQVEsRUFBRSxVQUFVO1FBQ3BCLE9BQU8sRUFBRSxxQkFBcUI7S0FDL0I7SUFDRCxRQUFRLEVBQUU7UUFDUixRQUFRLEVBQUUsVUFBVTtRQUNwQixPQUFPLEVBQUUsdUJBQXVCO0tBQ2pDO0lBQ0QsUUFBUSxFQUFFO1FBQ1IsUUFBUSxFQUFFLFVBQVU7UUFDcEIsT0FBTyxFQUFFLHVCQUF1QjtLQUNqQztJQUNELFFBQVEsRUFBRTtRQUNSLFFBQVEsRUFBRSxVQUFVO1FBQ3BCLE9BQU8sRUFBRSx1QkFBdUI7S0FDakM7SUFDRCxRQUFRLEVBQUU7UUFDUixRQUFRLEVBQUUsVUFBVTtRQUNwQixPQUFPLEVBQUUseUJBQXlCO0tBQ25DO0lBQ0QsTUFBTSxFQUFFO1FBQ04sUUFBUSxFQUFFLFVBQVU7UUFDcEIsT0FBTyxFQUFFLDRCQUE0QjtLQUN0QztJQUNELE1BQU0sRUFBRTtRQUNOLFFBQVEsRUFBRSxVQUFVO1FBQ3BCLE9BQU8sRUFBRSwwRUFBMEU7S0FDcEY7SUFDRCxNQUFNLEVBQUU7UUFDTixRQUFRLEVBQUUsVUFBVTtRQUNwQixPQUFPLEVBQUUsa0VBQWtFO0tBQzVFO0lBQ0QsTUFBTSxFQUFFO1FBQ04sUUFBUSxFQUFFLFVBQVU7UUFDcEIsT0FBTyxFQUFFLCtDQUErQztLQUN6RDtJQUNELE1BQU0sRUFBRTtRQUNOLFFBQVEsRUFBRSxVQUFVO1FBQ3BCLE9BQU8sRUFBRSx3REFBd0Q7S0FDbEU7Q0FDRixDQUFDIn0=","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ethErrors = void 0;\nconst classes_1 = require(\"./classes\");\nconst utils_1 = require(\"./utils\");\nconst error_constants_1 = require(\"./error-constants\");\nexports.ethErrors = {\n rpc: {\n /**\n * Get a JSON RPC 2.0 Parse (-32700) error.\n */\n parse: (arg) => getEthJsonRpcError(error_constants_1.errorCodes.rpc.parse, arg),\n /**\n * Get a JSON RPC 2.0 Invalid Request (-32600) error.\n */\n invalidRequest: (arg) => getEthJsonRpcError(error_constants_1.errorCodes.rpc.invalidRequest, arg),\n /**\n * Get a JSON RPC 2.0 Invalid Params (-32602) error.\n */\n invalidParams: (arg) => getEthJsonRpcError(error_constants_1.errorCodes.rpc.invalidParams, arg),\n /**\n * Get a JSON RPC 2.0 Method Not Found (-32601) error.\n */\n methodNotFound: (arg) => getEthJsonRpcError(error_constants_1.errorCodes.rpc.methodNotFound, arg),\n /**\n * Get a JSON RPC 2.0 Internal (-32603) error.\n */\n internal: (arg) => getEthJsonRpcError(error_constants_1.errorCodes.rpc.internal, arg),\n /**\n * Get a JSON RPC 2.0 Server error.\n * Permits integer error codes in the [ -32099 <= -32005 ] range.\n * Codes -32000 through -32004 are reserved by EIP-1474.\n */\n server: (opts) => {\n if (!opts || typeof opts !== 'object' || Array.isArray(opts)) {\n throw new Error('Ethereum RPC Server errors must provide single object argument.');\n }\n const { code } = opts;\n if (!Number.isInteger(code) || code > -32005 || code < -32099) {\n throw new Error('\"code\" must be an integer such that: -32099 <= code <= -32005');\n }\n return getEthJsonRpcError(code, opts);\n },\n /**\n * Get an Ethereum JSON RPC Invalid Input (-32000) error.\n */\n invalidInput: (arg) => getEthJsonRpcError(error_constants_1.errorCodes.rpc.invalidInput, arg),\n /**\n * Get an Ethereum JSON RPC Resource Not Found (-32001) error.\n */\n resourceNotFound: (arg) => getEthJsonRpcError(error_constants_1.errorCodes.rpc.resourceNotFound, arg),\n /**\n * Get an Ethereum JSON RPC Resource Unavailable (-32002) error.\n */\n resourceUnavailable: (arg) => getEthJsonRpcError(error_constants_1.errorCodes.rpc.resourceUnavailable, arg),\n /**\n * Get an Ethereum JSON RPC Transaction Rejected (-32003) error.\n */\n transactionRejected: (arg) => getEthJsonRpcError(error_constants_1.errorCodes.rpc.transactionRejected, arg),\n /**\n * Get an Ethereum JSON RPC Method Not Supported (-32004) error.\n */\n methodNotSupported: (arg) => getEthJsonRpcError(error_constants_1.errorCodes.rpc.methodNotSupported, arg),\n /**\n * Get an Ethereum JSON RPC Limit Exceeded (-32005) error.\n */\n limitExceeded: (arg) => getEthJsonRpcError(error_constants_1.errorCodes.rpc.limitExceeded, arg),\n },\n provider: {\n /**\n * Get an Ethereum Provider User Rejected Request (4001) error.\n */\n userRejectedRequest: (arg) => {\n return getEthProviderError(error_constants_1.errorCodes.provider.userRejectedRequest, arg);\n },\n /**\n * Get an Ethereum Provider Unauthorized (4100) error.\n */\n unauthorized: (arg) => {\n return getEthProviderError(error_constants_1.errorCodes.provider.unauthorized, arg);\n },\n /**\n * Get an Ethereum Provider Unsupported Method (4200) error.\n */\n unsupportedMethod: (arg) => {\n return getEthProviderError(error_constants_1.errorCodes.provider.unsupportedMethod, arg);\n },\n /**\n * Get an Ethereum Provider Not Connected (4900) error.\n */\n disconnected: (arg) => {\n return getEthProviderError(error_constants_1.errorCodes.provider.disconnected, arg);\n },\n /**\n * Get an Ethereum Provider Chain Not Connected (4901) error.\n */\n chainDisconnected: (arg) => {\n return getEthProviderError(error_constants_1.errorCodes.provider.chainDisconnected, arg);\n },\n /**\n * Get a custom Ethereum Provider error.\n */\n custom: (opts) => {\n if (!opts || typeof opts !== 'object' || Array.isArray(opts)) {\n throw new Error('Ethereum Provider custom errors must provide single object argument.');\n }\n const { code, message, data } = opts;\n if (!message || typeof message !== 'string') {\n throw new Error('\"message\" must be a nonempty string');\n }\n return new classes_1.EthereumProviderError(code, message, data);\n },\n },\n};\n// Internal\nfunction getEthJsonRpcError(code, arg) {\n const [message, data] = parseOpts(arg);\n return new classes_1.EthereumRpcError(code, message || utils_1.getMessageFromCode(code), data);\n}\nfunction getEthProviderError(code, arg) {\n const [message, data] = parseOpts(arg);\n return new classes_1.EthereumProviderError(code, message || utils_1.getMessageFromCode(code), data);\n}\nfunction parseOpts(arg) {\n if (arg) {\n if (typeof arg === 'string') {\n return [arg];\n }\n else if (typeof arg === 'object' && !Array.isArray(arg)) {\n const { message, data } = arg;\n if (message && typeof message !== 'string') {\n throw new Error('Must specify string message.');\n }\n return [message || undefined, data];\n }\n }\n return [];\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3JzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2Vycm9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx1Q0FBb0U7QUFDcEUsbUNBQTZDO0FBQzdDLHVEQUErQztBQWVsQyxRQUFBLFNBQVMsR0FBRztJQUN2QixHQUFHLEVBQUU7UUFFSDs7V0FFRztRQUNILEtBQUssRUFBRSxDQUFJLEdBQXFCLEVBQUUsRUFBRSxDQUFDLGtCQUFrQixDQUNyRCw0QkFBVSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUMxQjtRQUVEOztXQUVHO1FBQ0gsY0FBYyxFQUFFLENBQUksR0FBcUIsRUFBRSxFQUFFLENBQUMsa0JBQWtCLENBQzlELDRCQUFVLENBQUMsR0FBRyxDQUFDLGNBQWMsRUFBRSxHQUFHLENBQ25DO1FBRUQ7O1dBRUc7UUFDSCxhQUFhLEVBQUUsQ0FBSSxHQUFxQixFQUFFLEVBQUUsQ0FBQyxrQkFBa0IsQ0FDN0QsNEJBQVUsQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLEdBQUcsQ0FDbEM7UUFFRDs7V0FFRztRQUNILGNBQWMsRUFBRSxDQUFJLEdBQXFCLEVBQUUsRUFBRSxDQUFDLGtCQUFrQixDQUM5RCw0QkFBVSxDQUFDLEdBQUcsQ0FBQyxjQUFjLEVBQUUsR0FBRyxDQUNuQztRQUVEOztXQUVHO1FBQ0gsUUFBUSxFQUFFLENBQUksR0FBcUIsRUFBRSxFQUFFLENBQUMsa0JBQWtCLENBQ3hELDRCQUFVLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQzdCO1FBRUQ7Ozs7V0FJRztRQUNILE1BQU0sRUFBRSxDQUFJLElBQTJCLEVBQUUsRUFBRTtZQUN6QyxJQUFJLENBQUMsSUFBSSxJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUM1RCxNQUFNLElBQUksS0FBSyxDQUFDLGlFQUFpRSxDQUFDLENBQUM7YUFDcEY7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","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getMessageFromCode = exports.serializeError = exports.EthereumProviderError = exports.EthereumRpcError = exports.ethErrors = exports.errorCodes = void 0;\nconst classes_1 = require(\"./classes\");\nObject.defineProperty(exports, \"EthereumRpcError\", { enumerable: true, get: function () { return classes_1.EthereumRpcError; } });\nObject.defineProperty(exports, \"EthereumProviderError\", { enumerable: true, get: function () { return classes_1.EthereumProviderError; } });\nconst utils_1 = require(\"./utils\");\nObject.defineProperty(exports, \"serializeError\", { enumerable: true, get: function () { return utils_1.serializeError; } });\nObject.defineProperty(exports, \"getMessageFromCode\", { enumerable: true, get: function () { return utils_1.getMessageFromCode; } });\nconst errors_1 = require(\"./errors\");\nObject.defineProperty(exports, \"ethErrors\", { enumerable: true, get: function () { return errors_1.ethErrors; } });\nconst error_constants_1 = require(\"./error-constants\");\nObject.defineProperty(exports, \"errorCodes\", { enumerable: true, get: function () { return error_constants_1.errorCodes; } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsdUNBQW9FO0FBVWxFLGlHQVZPLDBCQUFnQixPQVVQO0FBQ2hCLHNHQVh5QiwrQkFBcUIsT0FXekI7QUFWdkIsbUNBRWlCO0FBU2YsK0ZBVkEsc0JBQWMsT0FVQTtBQUNkLG1HQVhnQiwwQkFBa0IsT0FXaEI7QUFUcEIscUNBQXFDO0FBS25DLDBGQUxPLGtCQUFTLE9BS1A7QUFKWCx1REFBK0M7QUFHN0MsMkZBSE8sNEJBQVUsT0FHUCJ9","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.serializeError = exports.isValidCode = exports.getMessageFromCode = exports.JSON_RPC_SERVER_ERROR_MESSAGE = void 0;\nconst error_constants_1 = require(\"./error-constants\");\nconst classes_1 = require(\"./classes\");\nconst FALLBACK_ERROR_CODE = error_constants_1.errorCodes.rpc.internal;\nconst FALLBACK_MESSAGE = 'Unspecified error message. This is a bug, please report it.';\nconst FALLBACK_ERROR = {\n code: FALLBACK_ERROR_CODE,\n message: getMessageFromCode(FALLBACK_ERROR_CODE),\n};\nexports.JSON_RPC_SERVER_ERROR_MESSAGE = 'Unspecified server error.';\n/**\n * Gets the message for a given code, or a fallback message if the code has\n * no corresponding message.\n */\nfunction getMessageFromCode(code, fallbackMessage = FALLBACK_MESSAGE) {\n if (Number.isInteger(code)) {\n const codeString = code.toString();\n if (hasKey(error_constants_1.errorValues, codeString)) {\n return error_constants_1.errorValues[codeString].message;\n }\n if (isJsonRpcServerError(code)) {\n return exports.JSON_RPC_SERVER_ERROR_MESSAGE;\n }\n }\n return fallbackMessage;\n}\nexports.getMessageFromCode = getMessageFromCode;\n/**\n * Returns whether the given code is valid.\n * A code is only valid if it has a message.\n */\nfunction isValidCode(code) {\n if (!Number.isInteger(code)) {\n return false;\n }\n const codeString = code.toString();\n if (error_constants_1.errorValues[codeString]) {\n return true;\n }\n if (isJsonRpcServerError(code)) {\n return true;\n }\n return false;\n}\nexports.isValidCode = isValidCode;\n/**\n * Serializes the given error to an Ethereum JSON RPC-compatible error object.\n * Merely copies the given error's values if it is already compatible.\n * If the given error is not fully compatible, it will be preserved on the\n * returned object's data.originalError property.\n */\nfunction serializeError(error, { fallbackError = FALLBACK_ERROR, shouldIncludeStack = false, } = {}) {\n var _a, _b;\n if (!fallbackError ||\n !Number.isInteger(fallbackError.code) ||\n typeof fallbackError.message !== 'string') {\n throw new Error('Must provide fallback error with integer number code and string message.');\n }\n if (error instanceof classes_1.EthereumRpcError) {\n return error.serialize();\n }\n const serialized = {};\n if (error &&\n typeof error === 'object' &&\n !Array.isArray(error) &&\n hasKey(error, 'code') &&\n isValidCode(error.code)) {\n const _error = error;\n serialized.code = _error.code;\n if (_error.message && typeof _error.message === 'string') {\n serialized.message = _error.message;\n if (hasKey(_error, 'data')) {\n serialized.data = _error.data;\n }\n }\n else {\n serialized.message = getMessageFromCode(serialized.code);\n serialized.data = { originalError: assignOriginalError(error) };\n }\n }\n else {\n serialized.code = fallbackError.code;\n const message = (_a = error) === null || _a === void 0 ? void 0 : _a.message;\n serialized.message = (message && typeof message === 'string'\n ? message\n : fallbackError.message);\n serialized.data = { originalError: assignOriginalError(error) };\n }\n const stack = (_b = error) === null || _b === void 0 ? void 0 : _b.stack;\n if (shouldIncludeStack && error && stack && typeof stack === 'string') {\n serialized.stack = stack;\n }\n return serialized;\n}\nexports.serializeError = serializeError;\n// Internal\nfunction isJsonRpcServerError(code) {\n return code >= -32099 && code <= -32000;\n}\nfunction assignOriginalError(error) {\n if (error && typeof error === 'object' && !Array.isArray(error)) {\n return Object.assign({}, error);\n }\n return error;\n}\nfunction hasKey(obj, key) {\n return Object.prototype.hasOwnProperty.call(obj, key);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsdURBQTREO0FBQzVELHVDQUF5RTtBQUV6RSxNQUFNLG1CQUFtQixHQUFHLDRCQUFVLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQztBQUNwRCxNQUFNLGdCQUFnQixHQUFHLDZEQUE2RCxDQUFDO0FBQ3ZGLE1BQU0sY0FBYyxHQUErQjtJQUNqRCxJQUFJLEVBQUUsbUJBQW1CO0lBQ3pCLE9BQU8sRUFBRSxrQkFBa0IsQ0FBQyxtQkFBbUIsQ0FBQztDQUNqRCxDQUFDO0FBRVcsUUFBQSw2QkFBNkIsR0FBRywyQkFBMkIsQ0FBQztBQUl6RTs7O0dBR0c7QUFDSCxTQUFnQixrQkFBa0IsQ0FDaEMsSUFBWSxFQUNaLGtCQUEwQixnQkFBZ0I7SUFFMUMsSUFBSSxNQUFNLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFO1FBQzFCLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUVuQyxJQUFJLE1BQU0sQ0FBQyw2QkFBVyxFQUFFLFVBQVUsQ0FBQyxFQUFFO1lBQ25DLE9BQU8sNkJBQVcsQ0FBQyxVQUEyQixDQUFDLENBQUMsT0FBTyxDQUFDO1NBQ3pEO1FBQ0QsSUFBSSxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUM5QixPQUFPLHFDQUE2QixDQUFDO1NBQ3RDO0tBQ0Y7SUFDRCxPQUFPLGVBQWUsQ0FBQztBQUN6QixDQUFDO0FBZkQsZ0RBZUM7QUFFRDs7O0dBR0c7QUFDSCxTQUFnQixXQUFXLENBQUMsSUFBWTtJQUN0QyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRTtRQUMzQixPQUFPLEtBQUssQ0FBQztLQUNkO0lBRUQsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ25DLElBQUksNkJBQVcsQ0FBQyxVQUEy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","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar R = typeof Reflect === 'object' ? Reflect : null\nvar ReflectApply = R && typeof R.apply === 'function'\n ? R.apply\n : function ReflectApply(target, receiver, args) {\n return Function.prototype.apply.call(target, receiver, args);\n }\n\nvar ReflectOwnKeys\nif (R && typeof R.ownKeys === 'function') {\n ReflectOwnKeys = R.ownKeys\n} else if (Object.getOwnPropertySymbols) {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target)\n .concat(Object.getOwnPropertySymbols(target));\n };\n} else {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target);\n };\n}\n\nfunction ProcessEmitWarning(warning) {\n if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n return value !== value;\n}\n\nfunction EventEmitter() {\n EventEmitter.init.call(this);\n}\nmodule.exports = EventEmitter;\nmodule.exports.once = once;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nfunction checkListener(listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n}\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n enumerable: true,\n get: function() {\n return defaultMaxListeners;\n },\n set: function(arg) {\n if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n }\n defaultMaxListeners = arg;\n }\n});\n\nEventEmitter.init = function() {\n\n if (this._events === undefined ||\n this._events === Object.getPrototypeOf(this)._events) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n }\n this._maxListeners = n;\n return this;\n};\n\nfunction _getMaxListeners(that) {\n if (that._maxListeners === undefined)\n return EventEmitter.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n return _getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n var args = [];\n for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n var doError = (type === 'error');\n\n var events = this._events;\n if (events !== undefined)\n doError = (doError && events.error === undefined);\n else if (!doError)\n return false;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n var er;\n if (args.length > 0)\n er = args[0];\n if (er instanceof Error) {\n // Note: The comments on the `throw` lines are intentional, they show\n // up in Node's output if this results in an unhandled exception.\n throw er; // Unhandled 'error' event\n }\n // At least give some kind of context to the user\n var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n err.context = er;\n throw err; // Unhandled 'error' event\n }\n\n var handler = events[type];\n\n if (handler === undefined)\n return false;\n\n if (typeof handler === 'function') {\n ReflectApply(handler, this, args);\n } else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n ReflectApply(listeners[i], this, args);\n }\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n checkListener(listener);\n\n events = target._events;\n if (events === undefined) {\n events = target._events = Object.create(null);\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener !== undefined) {\n target.emit('newListener', type,\n listener.listener ? listener.listener : listener);\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (existing === undefined) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] =\n prepend ? [listener, existing] : [existing, listener];\n // If we've already got an array, just append.\n } else if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n\n // Check for listener leak\n m = _getMaxListeners(target);\n if (m > 0 && existing.length > m && !existing.warned) {\n existing.warned = true;\n // No error code for this since it is a Warning\n // eslint-disable-next-line no-restricted-syntax\n var w = new Error('Possible EventEmitter memory leak detected. ' +\n existing.length + ' ' + String(type) + ' listeners ' +\n 'added. Use emitter.setMaxListeners() to ' +\n 'increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n ProcessEmitWarning(w);\n }\n }\n\n return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n };\n\nfunction onceWrapper() {\n if (!this.fired) {\n this.target.removeListener(this.type, this.wrapFn);\n this.fired = true;\n if (arguments.length === 0)\n return this.listener.call(this.target);\n return this.listener.apply(this.target, arguments);\n }\n}\n\nfunction _onceWrap(target, type, listener) {\n var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n var wrapped = onceWrapper.bind(state);\n wrapped.listener = listener;\n state.wrapFn = wrapped;\n return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n checkListener(listener);\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n checkListener(listener);\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n\n checkListener(listener);\n\n events = this._events;\n if (events === undefined)\n return this;\n\n list = events[type];\n if (list === undefined)\n return this;\n\n if (list === listener || list.listener === listener) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else {\n delete events[type];\n if (events.removeListener)\n this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length - 1; i >= 0; i--) {\n if (list[i] === listener || list[i].listener === listener) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (position === 0)\n list.shift();\n else {\n spliceOne(list, position);\n }\n\n if (list.length === 1)\n events[type] = list[0];\n\n if (events.removeListener !== undefined)\n this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n function removeAllListeners(type) {\n var listeners, events, i;\n\n events = this._events;\n if (events === undefined)\n return this;\n\n // not listening for removeListener, no need to emit\n if (events.removeListener === undefined) {\n if (arguments.length === 0) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n } else if (events[type] !== undefined) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else\n delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n var key;\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = Object.create(null);\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners !== undefined) {\n // LIFO order\n for (i = listeners.length - 1; i >= 0; i--) {\n this.removeListener(type, listeners[i]);\n }\n }\n\n return this;\n };\n\nfunction _listeners(target, type, unwrap) {\n var events = target._events;\n\n if (events === undefined)\n return [];\n\n var evlistener = events[type];\n if (evlistener === undefined)\n return [];\n\n if (typeof evlistener === 'function')\n return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n return unwrap ?\n unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount.call(emitter, type);\n }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n var events = this._events;\n\n if (events !== undefined) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener !== undefined) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n var copy = new Array(n);\n for (var i = 0; i < n; ++i)\n copy[i] = arr[i];\n return copy;\n}\n\nfunction spliceOne(list, index) {\n for (; index + 1 < list.length; index++)\n list[index] = list[index + 1];\n list.pop();\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n\nfunction once(emitter, name) {\n return new Promise(function (resolve, reject) {\n function errorListener(err) {\n emitter.removeListener(name, resolver);\n reject(err);\n }\n\n function resolver() {\n if (typeof emitter.removeListener === 'function') {\n emitter.removeListener('error', errorListener);\n }\n resolve([].slice.call(arguments));\n };\n\n eventTargetAgnosticAddListener(emitter, name, resolver, { once: true });\n if (name !== 'error') {\n addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true });\n }\n });\n}\n\nfunction addErrorHandlerIfEventEmitter(emitter, handler, flags) {\n if (typeof emitter.on === 'function') {\n eventTargetAgnosticAddListener(emitter, 'error', handler, flags);\n }\n}\n\nfunction eventTargetAgnosticAddListener(emitter, name, listener, flags) {\n if (typeof emitter.on === 'function') {\n if (flags.once) {\n emitter.once(name, listener);\n } else {\n emitter.on(name, listener);\n }\n } else if (typeof emitter.addEventListener === 'function') {\n // EventTarget does not have `error` event semantics like Node\n // EventEmitters, we do not listen for `error` events here.\n emitter.addEventListener(name, function wrapListener(arg) {\n // IE does not have builtin `{ once: true }` support so we\n // have to do it manually.\n if (flags.once) {\n emitter.removeEventListener(name, wrapListener);\n }\n listener(arg);\n });\n } else {\n throw new TypeError('The \"emitter\" argument must be of type EventEmitter. Received type ' + typeof emitter);\n }\n}\n","'use strict';\n\nvar hasOwn = Object.prototype.hasOwnProperty;\nvar toStr = Object.prototype.toString;\nvar defineProperty = Object.defineProperty;\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nvar isArray = function isArray(arr) {\n\tif (typeof Array.isArray === 'function') {\n\t\treturn Array.isArray(arr);\n\t}\n\n\treturn toStr.call(arr) === '[object Array]';\n};\n\nvar isPlainObject = function isPlainObject(obj) {\n\tif (!obj || toStr.call(obj) !== '[object Object]') {\n\t\treturn false;\n\t}\n\n\tvar hasOwnConstructor = hasOwn.call(obj, 'constructor');\n\tvar hasIsPrototypeOf = obj.constructor && obj.constructor.prototype && hasOwn.call(obj.constructor.prototype, 'isPrototypeOf');\n\t// Not own constructor property must be Object\n\tif (obj.constructor && !hasOwnConstructor && !hasIsPrototypeOf) {\n\t\treturn false;\n\t}\n\n\t// Own properties are enumerated firstly, so to speed up,\n\t// if last one is own, then all properties are own.\n\tvar key;\n\tfor (key in obj) { /**/ }\n\n\treturn typeof key === 'undefined' || hasOwn.call(obj, key);\n};\n\n// If name is '__proto__', and Object.defineProperty is available, define __proto__ as an own property on target\nvar setProperty = function setProperty(target, options) {\n\tif (defineProperty && options.name === '__proto__') {\n\t\tdefineProperty(target, options.name, {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\t\t\tvalue: options.newValue,\n\t\t\twritable: true\n\t\t});\n\t} else {\n\t\ttarget[options.name] = options.newValue;\n\t}\n};\n\n// Return undefined instead of __proto__ if '__proto__' is not an own property\nvar getProperty = function getProperty(obj, name) {\n\tif (name === '__proto__') {\n\t\tif (!hasOwn.call(obj, name)) {\n\t\t\treturn void 0;\n\t\t} else if (gOPD) {\n\t\t\t// In early versions of node, obj['__proto__'] is buggy when obj has\n\t\t\t// __proto__ as an own property. Object.getOwnPropertyDescriptor() works.\n\t\t\treturn gOPD(obj, name).value;\n\t\t}\n\t}\n\n\treturn obj[name];\n};\n\nmodule.exports = function extend() {\n\tvar options, name, src, copy, copyIsArray, clone;\n\tvar target = arguments[0];\n\tvar i = 1;\n\tvar length = arguments.length;\n\tvar deep = false;\n\n\t// Handle a deep copy situation\n\tif (typeof target === 'boolean') {\n\t\tdeep = target;\n\t\ttarget = arguments[1] || {};\n\t\t// skip the boolean and the target\n\t\ti = 2;\n\t}\n\tif (target == null || (typeof target !== 'object' && typeof target !== 'function')) {\n\t\ttarget = {};\n\t}\n\n\tfor (; i < length; ++i) {\n\t\toptions = arguments[i];\n\t\t// Only deal with non-null/undefined values\n\t\tif (options != null) {\n\t\t\t// Extend the base object\n\t\t\tfor (name in options) {\n\t\t\t\tsrc = getProperty(target, name);\n\t\t\t\tcopy = getProperty(options, name);\n\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif (target !== copy) {\n\t\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\t\tif (deep && copy && (isPlainObject(copy) || (copyIsArray = isArray(copy)))) {\n\t\t\t\t\t\tif (copyIsArray) {\n\t\t\t\t\t\t\tcopyIsArray = false;\n\t\t\t\t\t\t\tclone = src && isArray(src) ? src : [];\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tclone = src && isPlainObject(src) ? src : {};\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\t\tsetProperty(target, { name: name, newValue: extend(deep, clone, copy) });\n\n\t\t\t\t\t// Don't bring in undefined values\n\t\t\t\t\t} else if (typeof copy !== 'undefined') {\n\t\t\t\t\t\tsetProperty(target, { name: name, newValue: copy });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n","module.exports = stringify\nstringify.default = stringify\nstringify.stable = deterministicStringify\nstringify.stableStringify = deterministicStringify\n\nvar LIMIT_REPLACE_NODE = '[...]'\nvar CIRCULAR_REPLACE_NODE = '[Circular]'\n\nvar arr = []\nvar replacerStack = []\n\nfunction defaultOptions () {\n return {\n depthLimit: Number.MAX_SAFE_INTEGER,\n edgesLimit: Number.MAX_SAFE_INTEGER\n }\n}\n\n// Regular stringify\nfunction stringify (obj, replacer, spacer, options) {\n if (typeof options === 'undefined') {\n options = defaultOptions()\n }\n\n decirc(obj, '', 0, [], undefined, 0, options)\n var res\n try {\n if (replacerStack.length === 0) {\n res = JSON.stringify(obj, replacer, spacer)\n } else {\n res = JSON.stringify(obj, replaceGetterValues(replacer), spacer)\n }\n } catch (_) {\n return JSON.stringify('[unable to serialize, circular reference is too complex to analyze]')\n } finally {\n while (arr.length !== 0) {\n var part = arr.pop()\n if (part.length === 4) {\n Object.defineProperty(part[0], part[1], part[3])\n } else {\n part[0][part[1]] = part[2]\n }\n }\n }\n return res\n}\n\nfunction setReplace (replace, val, k, parent) {\n var propertyDescriptor = Object.getOwnPropertyDescriptor(parent, k)\n if (propertyDescriptor.get !== undefined) {\n if (propertyDescriptor.configurable) {\n Object.defineProperty(parent, k, { value: replace })\n arr.push([parent, k, val, propertyDescriptor])\n } else {\n replacerStack.push([val, k, replace])\n }\n } else {\n parent[k] = replace\n arr.push([parent, k, val])\n }\n}\n\nfunction decirc (val, k, edgeIndex, stack, parent, depth, options) {\n depth += 1\n var i\n if (typeof val === 'object' && val !== null) {\n for (i = 0; i < stack.length; i++) {\n if (stack[i] === val) {\n setReplace(CIRCULAR_REPLACE_NODE, val, k, parent)\n return\n }\n }\n\n if (\n typeof options.depthLimit !== 'undefined' &&\n depth > options.depthLimit\n ) {\n setReplace(LIMIT_REPLACE_NODE, val, k, parent)\n return\n }\n\n if (\n typeof options.edgesLimit !== 'undefined' &&\n edgeIndex + 1 > options.edgesLimit\n ) {\n setReplace(LIMIT_REPLACE_NODE, val, k, parent)\n return\n }\n\n stack.push(val)\n // Optimize for Arrays. Big arrays could kill the performance otherwise!\n if (Array.isArray(val)) {\n for (i = 0; i < val.length; i++) {\n decirc(val[i], i, i, stack, val, depth, options)\n }\n } else {\n var keys = Object.keys(val)\n for (i = 0; i < keys.length; i++) {\n var key = keys[i]\n decirc(val[key], key, i, stack, val, depth, options)\n }\n }\n stack.pop()\n }\n}\n\n// Stable-stringify\nfunction compareFunction (a, b) {\n if (a < b) {\n return -1\n }\n if (a > b) {\n return 1\n }\n return 0\n}\n\nfunction deterministicStringify (obj, replacer, spacer, options) {\n if (typeof options === 'undefined') {\n options = defaultOptions()\n }\n\n var tmp = deterministicDecirc(obj, '', 0, [], undefined, 0, options) || obj\n var res\n try {\n if (replacerStack.length === 0) {\n res = JSON.stringify(tmp, replacer, spacer)\n } else {\n res = JSON.stringify(tmp, replaceGetterValues(replacer), spacer)\n }\n } catch (_) {\n return JSON.stringify('[unable to serialize, circular reference is too complex to analyze]')\n } finally {\n // Ensure that we restore the object as it was.\n while (arr.length !== 0) {\n var part = arr.pop()\n if (part.length === 4) {\n Object.defineProperty(part[0], part[1], part[3])\n } else {\n part[0][part[1]] = part[2]\n }\n }\n }\n return res\n}\n\nfunction deterministicDecirc (val, k, edgeIndex, stack, parent, depth, options) {\n depth += 1\n var i\n if (typeof val === 'object' && val !== null) {\n for (i = 0; i < stack.length; i++) {\n if (stack[i] === val) {\n setReplace(CIRCULAR_REPLACE_NODE, val, k, parent)\n return\n }\n }\n try {\n if (typeof val.toJSON === 'function') {\n return\n }\n } catch (_) {\n return\n }\n\n if (\n typeof options.depthLimit !== 'undefined' &&\n depth > options.depthLimit\n ) {\n setReplace(LIMIT_REPLACE_NODE, val, k, parent)\n return\n }\n\n if (\n typeof options.edgesLimit !== 'undefined' &&\n edgeIndex + 1 > options.edgesLimit\n ) {\n setReplace(LIMIT_REPLACE_NODE, val, k, parent)\n return\n }\n\n stack.push(val)\n // Optimize for Arrays. Big arrays could kill the performance otherwise!\n if (Array.isArray(val)) {\n for (i = 0; i < val.length; i++) {\n deterministicDecirc(val[i], i, i, stack, val, depth, options)\n }\n } else {\n // Create a temporary object in the required way\n var tmp = {}\n var keys = Object.keys(val).sort(compareFunction)\n for (i = 0; i < keys.length; i++) {\n var key = keys[i]\n deterministicDecirc(val[key], key, i, stack, val, depth, options)\n tmp[key] = val[key]\n }\n if (typeof parent !== 'undefined') {\n arr.push([parent, k, val])\n parent[k] = tmp\n } else {\n return tmp\n }\n }\n stack.pop()\n }\n}\n\n// wraps replacer function to handle values we couldn't replace\n// and mark them as replaced value\nfunction replaceGetterValues (replacer) {\n replacer =\n typeof replacer !== 'undefined'\n ? replacer\n : function (k, v) {\n return v\n }\n return function (key, val) {\n if (replacerStack.length > 0) {\n for (var i = 0; i < replacerStack.length; i++) {\n var part = replacerStack[i]\n if (part[1] === key && part[0] === val) {\n val = part[2]\n replacerStack.splice(i, 1)\n break\n }\n }\n }\n return replacer.call(this, key, val)\n }\n}\n","'use strict';\n\nvar reactIs = require('react-is');\n\n/**\n * Copyright 2015, Yahoo! Inc.\n * Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.\n */\nvar REACT_STATICS = {\n childContextTypes: true,\n contextType: true,\n contextTypes: true,\n defaultProps: true,\n displayName: true,\n getDefaultProps: true,\n getDerivedStateFromError: true,\n getDerivedStateFromProps: true,\n mixins: true,\n propTypes: true,\n type: true\n};\nvar KNOWN_STATICS = {\n name: true,\n length: true,\n prototype: true,\n caller: true,\n callee: true,\n arguments: true,\n arity: true\n};\nvar FORWARD_REF_STATICS = {\n '$$typeof': true,\n render: true,\n defaultProps: true,\n displayName: true,\n propTypes: true\n};\nvar MEMO_STATICS = {\n '$$typeof': true,\n compare: true,\n defaultProps: true,\n displayName: true,\n propTypes: true,\n type: true\n};\nvar TYPE_STATICS = {};\nTYPE_STATICS[reactIs.ForwardRef] = FORWARD_REF_STATICS;\nTYPE_STATICS[reactIs.Memo] = MEMO_STATICS;\n\nfunction getStatics(component) {\n // React v16.11 and below\n if (reactIs.isMemo(component)) {\n return MEMO_STATICS;\n } // React v16.12 and above\n\n\n return TYPE_STATICS[component['$$typeof']] || REACT_STATICS;\n}\n\nvar defineProperty = Object.defineProperty;\nvar getOwnPropertyNames = Object.getOwnPropertyNames;\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nvar getPrototypeOf = Object.getPrototypeOf;\nvar objectPrototype = Object.prototype;\nfunction hoistNonReactStatics(targetComponent, sourceComponent, blacklist) {\n if (typeof sourceComponent !== 'string') {\n // don't hoist over string (html) components\n if (objectPrototype) {\n var inheritedComponent = getPrototypeOf(sourceComponent);\n\n if (inheritedComponent && inheritedComponent !== objectPrototype) {\n hoistNonReactStatics(targetComponent, inheritedComponent, blacklist);\n }\n }\n\n var keys = getOwnPropertyNames(sourceComponent);\n\n if (getOwnPropertySymbols) {\n keys = keys.concat(getOwnPropertySymbols(sourceComponent));\n }\n\n var targetStatics = getStatics(targetComponent);\n var sourceStatics = getStatics(sourceComponent);\n\n for (var i = 0; i < keys.length; ++i) {\n var key = keys[i];\n\n if (!KNOWN_STATICS[key] && !(blacklist && blacklist[key]) && !(sourceStatics && sourceStatics[key]) && !(targetStatics && targetStatics[key])) {\n var descriptor = getOwnPropertyDescriptor(sourceComponent, key);\n\n try {\n // Avoid failures from read-only properties\n defineProperty(targetComponent, key, descriptor);\n } catch (e) {}\n }\n }\n }\n\n return targetComponent;\n}\n\nmodule.exports = hoistNonReactStatics;\n","/** @license React v16.13.1\n * react-is.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';var b=\"function\"===typeof Symbol&&Symbol.for,c=b?Symbol.for(\"react.element\"):60103,d=b?Symbol.for(\"react.portal\"):60106,e=b?Symbol.for(\"react.fragment\"):60107,f=b?Symbol.for(\"react.strict_mode\"):60108,g=b?Symbol.for(\"react.profiler\"):60114,h=b?Symbol.for(\"react.provider\"):60109,k=b?Symbol.for(\"react.context\"):60110,l=b?Symbol.for(\"react.async_mode\"):60111,m=b?Symbol.for(\"react.concurrent_mode\"):60111,n=b?Symbol.for(\"react.forward_ref\"):60112,p=b?Symbol.for(\"react.suspense\"):60113,q=b?\nSymbol.for(\"react.suspense_list\"):60120,r=b?Symbol.for(\"react.memo\"):60115,t=b?Symbol.for(\"react.lazy\"):60116,v=b?Symbol.for(\"react.block\"):60121,w=b?Symbol.for(\"react.fundamental\"):60117,x=b?Symbol.for(\"react.responder\"):60118,y=b?Symbol.for(\"react.scope\"):60119;\nfunction z(a){if(\"object\"===typeof a&&null!==a){var u=a.$$typeof;switch(u){case c:switch(a=a.type,a){case l:case m:case e:case g:case f:case p:return a;default:switch(a=a&&a.$$typeof,a){case k:case n:case t:case r:case h:return a;default:return u}}case d:return u}}}function A(a){return z(a)===m}exports.AsyncMode=l;exports.ConcurrentMode=m;exports.ContextConsumer=k;exports.ContextProvider=h;exports.Element=c;exports.ForwardRef=n;exports.Fragment=e;exports.Lazy=t;exports.Memo=r;exports.Portal=d;\nexports.Profiler=g;exports.StrictMode=f;exports.Suspense=p;exports.isAsyncMode=function(a){return A(a)||z(a)===l};exports.isConcurrentMode=A;exports.isContextConsumer=function(a){return z(a)===k};exports.isContextProvider=function(a){return z(a)===h};exports.isElement=function(a){return\"object\"===typeof a&&null!==a&&a.$$typeof===c};exports.isForwardRef=function(a){return z(a)===n};exports.isFragment=function(a){return z(a)===e};exports.isLazy=function(a){return z(a)===t};\nexports.isMemo=function(a){return z(a)===r};exports.isPortal=function(a){return z(a)===d};exports.isProfiler=function(a){return z(a)===g};exports.isStrictMode=function(a){return z(a)===f};exports.isSuspense=function(a){return z(a)===p};\nexports.isValidElementType=function(a){return\"string\"===typeof a||\"function\"===typeof a||a===e||a===m||a===g||a===f||a===p||a===q||\"object\"===typeof a&&null!==a&&(a.$$typeof===t||a.$$typeof===r||a.$$typeof===h||a.$$typeof===k||a.$$typeof===n||a.$$typeof===w||a.$$typeof===x||a.$$typeof===y||a.$$typeof===v)};exports.typeOf=z;\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-is.production.min.js');\n} else {\n module.exports = require('./cjs/react-is.development.js');\n}\n","/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh <https://feross.org/opensource> */\nexports.read = function (buffer, offset, isLE, mLen, nBytes) {\n var e, m\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var nBits = -7\n var i = isLE ? (nBytes - 1) : 0\n var d = isLE ? -1 : 1\n var s = buffer[offset + i]\n\n i += d\n\n e = s & ((1 << (-nBits)) - 1)\n s >>= (-nBits)\n nBits += eLen\n for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n m = e & ((1 << (-nBits)) - 1)\n e >>= (-nBits)\n nBits += mLen\n for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n if (e === 0) {\n e = 1 - eBias\n } else if (e === eMax) {\n return m ? NaN : ((s ? -1 : 1) * Infinity)\n } else {\n m = m + Math.pow(2, mLen)\n e = e - eBias\n }\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n var e, m, c\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n var i = isLE ? 0 : (nBytes - 1)\n var d = isLE ? 1 : -1\n var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n value = Math.abs(value)\n\n if (isNaN(value) || value === Infinity) {\n m = isNaN(value) ? 1 : 0\n e = eMax\n } else {\n e = Math.floor(Math.log(value) / Math.LN2)\n if (value * (c = Math.pow(2, -e)) < 1) {\n e--\n c *= 2\n }\n if (e + eBias >= 1) {\n value += rt / c\n } else {\n value += rt * Math.pow(2, 1 - eBias)\n }\n if (value * c >= 2) {\n e++\n c /= 2\n }\n\n if (e + eBias >= eMax) {\n m = 0\n e = eMax\n } else if (e + eBias >= 1) {\n m = ((value * c) - 1) * Math.pow(2, mLen)\n e = e + eBias\n } else {\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n e = 0\n }\n }\n\n for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n e = (e << mLen) | m\n eLen += mLen\n for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n buffer[offset + i - d] |= s * 128\n}\n","if (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n })\n }\n };\n} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n var TempCtor = function () {}\n TempCtor.prototype = superCtor.prototype\n ctor.prototype = new TempCtor()\n ctor.prototype.constructor = ctor\n }\n }\n}\n","// http://www.w3.org/TR/CSS21/grammar.html\n// https://github.com/visionmedia/css-parse/pull/49#issuecomment-30088027\nvar COMMENT_REGEX = /\\/\\*[^*]*\\*+([^/*][^*]*\\*+)*\\//g;\n\nvar NEWLINE_REGEX = /\\n/g;\nvar WHITESPACE_REGEX = /^\\s*/;\n\n// declaration\nvar PROPERTY_REGEX = /^(\\*?[-#/*\\\\\\w]+(\\[[0-9a-z_-]+\\])?)\\s*/;\nvar COLON_REGEX = /^:\\s*/;\nvar VALUE_REGEX = /^((?:'(?:\\\\'|.)*?'|\"(?:\\\\\"|.)*?\"|\\([^)]*?\\)|[^};])+)/;\nvar SEMICOLON_REGEX = /^[;\\s]*/;\n\n// https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String/Trim#Polyfill\nvar TRIM_REGEX = /^\\s+|\\s+$/g;\n\n// strings\nvar NEWLINE = '\\n';\nvar FORWARD_SLASH = '/';\nvar ASTERISK = '*';\nvar EMPTY_STRING = '';\n\n// types\nvar TYPE_COMMENT = 'comment';\nvar TYPE_DECLARATION = 'declaration';\n\n/**\n * @param {String} style\n * @param {Object} [options]\n * @return {Object[]}\n * @throws {TypeError}\n * @throws {Error}\n */\nmodule.exports = function (style, options) {\n if (typeof style !== 'string') {\n throw new TypeError('First argument must be a string');\n }\n\n if (!style) return [];\n\n options = options || {};\n\n /**\n * Positional.\n */\n var lineno = 1;\n var column = 1;\n\n /**\n * Update lineno and column based on `str`.\n *\n * @param {String} str\n */\n function updatePosition(str) {\n var lines = str.match(NEWLINE_REGEX);\n if (lines) lineno += lines.length;\n var i = str.lastIndexOf(NEWLINE);\n column = ~i ? str.length - i : column + str.length;\n }\n\n /**\n * Mark position and patch `node.position`.\n *\n * @return {Function}\n */\n function position() {\n var start = { line: lineno, column: column };\n return function (node) {\n node.position = new Position(start);\n whitespace();\n return node;\n };\n }\n\n /**\n * Store position information for a node.\n *\n * @constructor\n * @property {Object} start\n * @property {Object} end\n * @property {undefined|String} source\n */\n function Position(start) {\n this.start = start;\n this.end = { line: lineno, column: column };\n this.source = options.source;\n }\n\n /**\n * Non-enumerable source string.\n */\n Position.prototype.content = style;\n\n var errorsList = [];\n\n /**\n * Error `msg`.\n *\n * @param {String} msg\n * @throws {Error}\n */\n function error(msg) {\n var err = new Error(\n options.source + ':' + lineno + ':' + column + ': ' + msg\n );\n err.reason = msg;\n err.filename = options.source;\n err.line = lineno;\n err.column = column;\n err.source = style;\n\n if (options.silent) {\n errorsList.push(err);\n } else {\n throw err;\n }\n }\n\n /**\n * Match `re` and return captures.\n *\n * @param {RegExp} re\n * @return {undefined|Array}\n */\n function match(re) {\n var m = re.exec(style);\n if (!m) return;\n var str = m[0];\n updatePosition(str);\n style = style.slice(str.length);\n return m;\n }\n\n /**\n * Parse whitespace.\n */\n function whitespace() {\n match(WHITESPACE_REGEX);\n }\n\n /**\n * Parse comments.\n *\n * @param {Object[]} [rules]\n * @return {Object[]}\n */\n function comments(rules) {\n var c;\n rules = rules || [];\n while ((c = comment())) {\n if (c !== false) {\n rules.push(c);\n }\n }\n return rules;\n }\n\n /**\n * Parse comment.\n *\n * @return {Object}\n * @throws {Error}\n */\n function comment() {\n var pos = position();\n if (FORWARD_SLASH != style.charAt(0) || ASTERISK != style.charAt(1)) return;\n\n var i = 2;\n while (\n EMPTY_STRING != style.charAt(i) &&\n (ASTERISK != style.charAt(i) || FORWARD_SLASH != style.charAt(i + 1))\n ) {\n ++i;\n }\n i += 2;\n\n if (EMPTY_STRING === style.charAt(i - 1)) {\n return error('End of comment missing');\n }\n\n var str = style.slice(2, i - 2);\n column += 2;\n updatePosition(str);\n style = style.slice(i);\n column += 2;\n\n return pos({\n type: TYPE_COMMENT,\n comment: str\n });\n }\n\n /**\n * Parse declaration.\n *\n * @return {Object}\n * @throws {Error}\n */\n function declaration() {\n var pos = position();\n\n // prop\n var prop = match(PROPERTY_REGEX);\n if (!prop) return;\n comment();\n\n // :\n if (!match(COLON_REGEX)) return error(\"property missing ':'\");\n\n // val\n var val = match(VALUE_REGEX);\n\n var ret = pos({\n type: TYPE_DECLARATION,\n property: trim(prop[0].replace(COMMENT_REGEX, EMPTY_STRING)),\n value: val\n ? trim(val[0].replace(COMMENT_REGEX, EMPTY_STRING))\n : EMPTY_STRING\n });\n\n // ;\n match(SEMICOLON_REGEX);\n\n return ret;\n }\n\n /**\n * Parse declarations.\n *\n * @return {Object[]}\n */\n function declarations() {\n var decls = [];\n\n comments(decls);\n\n // declarations\n var decl;\n while ((decl = declaration())) {\n if (decl !== false) {\n decls.push(decl);\n comments(decls);\n }\n }\n\n return decls;\n }\n\n whitespace();\n return declarations();\n};\n\n/**\n * Trim `str`.\n *\n * @param {String} str\n * @return {String}\n */\nfunction trim(str) {\n return str ? str.replace(TRIM_REGEX, EMPTY_STRING) : EMPTY_STRING;\n}\n","'use strict';\n\nconst isStream = stream =>\n\tstream !== null &&\n\ttypeof stream === 'object' &&\n\ttypeof stream.pipe === 'function';\n\nisStream.writable = stream =>\n\tisStream(stream) &&\n\tstream.writable !== false &&\n\ttypeof stream._write === 'function' &&\n\ttypeof stream._writableState === 'object';\n\nisStream.readable = stream =>\n\tisStream(stream) &&\n\tstream.readable !== false &&\n\ttypeof stream._read === 'function' &&\n\ttypeof stream._readableState === 'object';\n\nisStream.duplex = stream =>\n\tisStream.writable(stream) &&\n\tisStream.readable(stream);\n\nisStream.transform = stream =>\n\tisStream.duplex(stream) &&\n\ttypeof stream._transform === 'function';\n\nmodule.exports = isStream;\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.JsonRpcEngine = void 0;\nconst safe_event_emitter_1 = __importDefault(require(\"@metamask/safe-event-emitter\"));\nconst eth_rpc_errors_1 = require(\"eth-rpc-errors\");\n/**\n * A JSON-RPC request and response processor.\n * Give it a stack of middleware, pass it requests, and get back responses.\n */\nclass JsonRpcEngine extends safe_event_emitter_1.default {\n constructor() {\n super();\n this._middleware = [];\n }\n /**\n * Add a middleware function to the engine's middleware stack.\n *\n * @param middleware - The middleware function to add.\n */\n push(middleware) {\n this._middleware.push(middleware);\n }\n handle(req, cb) {\n if (cb && typeof cb !== 'function') {\n throw new Error('\"callback\" must be a function if provided.');\n }\n if (Array.isArray(req)) {\n if (cb) {\n return this._handleBatch(req, cb);\n }\n return this._handleBatch(req);\n }\n if (cb) {\n return this._handle(req, cb);\n }\n return this._promiseHandle(req);\n }\n /**\n * Returns this engine as a middleware function that can be pushed to other\n * engines.\n *\n * @returns This engine as a middleware function.\n */\n asMiddleware() {\n return async (req, res, next, end) => {\n try {\n const [middlewareError, isComplete, returnHandlers,] = await JsonRpcEngine._runAllMiddleware(req, res, this._middleware);\n if (isComplete) {\n await JsonRpcEngine._runReturnHandlers(returnHandlers);\n return end(middlewareError);\n }\n return next(async (handlerCallback) => {\n try {\n await JsonRpcEngine._runReturnHandlers(returnHandlers);\n }\n catch (error) {\n return handlerCallback(error);\n }\n return handlerCallback();\n });\n }\n catch (error) {\n return end(error);\n }\n };\n }\n async _handleBatch(reqs, cb) {\n // The order here is important\n try {\n // 2. Wait for all requests to finish, or throw on some kind of fatal\n // error\n const responses = await Promise.all(\n // 1. Begin executing each request in the order received\n reqs.map(this._promiseHandle.bind(this)));\n // 3. Return batch response\n if (cb) {\n return cb(null, responses);\n }\n return responses;\n }\n catch (error) {\n if (cb) {\n return cb(error);\n }\n throw error;\n }\n }\n /**\n * A promise-wrapped _handle.\n */\n _promiseHandle(req) {\n return new Promise((resolve) => {\n this._handle(req, (_err, res) => {\n // There will always be a response, and it will always have any error\n // that is caught and propagated.\n resolve(res);\n });\n });\n }\n /**\n * Ensures that the request object is valid, processes it, and passes any\n * error and the response object to the given callback.\n *\n * Does not reject.\n */\n async _handle(callerReq, cb) {\n if (!callerReq ||\n Array.isArray(callerReq) ||\n typeof callerReq !== 'object') {\n const error = new eth_rpc_errors_1.EthereumRpcError(eth_rpc_errors_1.errorCodes.rpc.invalidRequest, `Requests must be plain objects. Received: ${typeof callerReq}`, { request: callerReq });\n return cb(error, { id: undefined, jsonrpc: '2.0', error });\n }\n if (typeof callerReq.method !== 'string') {\n const error = new eth_rpc_errors_1.EthereumRpcError(eth_rpc_errors_1.errorCodes.rpc.invalidRequest, `Must specify a string method. Received: ${typeof callerReq.method}`, { request: callerReq });\n return cb(error, { id: callerReq.id, jsonrpc: '2.0', error });\n }\n const req = Object.assign({}, callerReq);\n const res = {\n id: req.id,\n jsonrpc: req.jsonrpc,\n };\n let error = null;\n try {\n await this._processRequest(req, res);\n }\n catch (_error) {\n // A request handler error, a re-thrown middleware error, or something\n // unexpected.\n error = _error;\n }\n if (error) {\n // Ensure no result is present on an errored response\n delete res.result;\n if (!res.error) {\n res.error = eth_rpc_errors_1.serializeError(error);\n }\n }\n return cb(error, res);\n }\n /**\n * For the given request and response, runs all middleware and their return\n * handlers, if any, and ensures that internal request processing semantics\n * are satisfied.\n */\n async _processRequest(req, res) {\n const [error, isComplete, returnHandlers,] = await JsonRpcEngine._runAllMiddleware(req, res, this._middleware);\n // Throw if \"end\" was not called, or if the response has neither a result\n // nor an error.\n JsonRpcEngine._checkForCompletion(req, res, isComplete);\n // The return handlers should run even if an error was encountered during\n // middleware processing.\n await JsonRpcEngine._runReturnHandlers(returnHandlers);\n // Now we re-throw the middleware processing error, if any, to catch it\n // further up the call chain.\n if (error) {\n throw error;\n }\n }\n /**\n * Serially executes the given stack of middleware.\n *\n * @returns An array of any error encountered during middleware execution,\n * a boolean indicating whether the request was completed, and an array of\n * middleware-defined return handlers.\n */\n static async _runAllMiddleware(req, res, middlewareStack) {\n const returnHandlers = [];\n let error = null;\n let isComplete = false;\n // Go down stack of middleware, call and collect optional returnHandlers\n for (const middleware of middlewareStack) {\n [error, isComplete] = await JsonRpcEngine._runMiddleware(req, res, middleware, returnHandlers);\n if (isComplete) {\n break;\n }\n }\n return [error, isComplete, returnHandlers.reverse()];\n }\n /**\n * Runs an individual middleware.\n *\n * @returns An array of any error encountered during middleware exection,\n * and a boolean indicating whether the request should end.\n */\n static _runMiddleware(req, res, middleware, returnHandlers) {\n return new Promise((resolve) => {\n const end = (err) => {\n const error = err || res.error;\n if (error) {\n res.error = eth_rpc_errors_1.serializeError(error);\n }\n // True indicates that the request should end\n resolve([error, true]);\n };\n const next = (returnHandler) => {\n if (res.error) {\n end(res.error);\n }\n else {\n if (returnHandler) {\n if (typeof returnHandler !== 'function') {\n end(new eth_rpc_errors_1.EthereumRpcError(eth_rpc_errors_1.errorCodes.rpc.internal, `JsonRpcEngine: \"next\" return handlers must be functions. ` +\n `Received \"${typeof returnHandler}\" for request:\\n${jsonify(req)}`, { request: req }));\n }\n returnHandlers.push(returnHandler);\n }\n // False indicates that the request should not end\n resolve([null, false]);\n }\n };\n try {\n middleware(req, res, next, end);\n }\n catch (error) {\n end(error);\n }\n });\n }\n /**\n * Serially executes array of return handlers. The request and response are\n * assumed to be in their scope.\n */\n static async _runReturnHandlers(handlers) {\n for (const handler of handlers) {\n await new Promise((resolve, reject) => {\n handler((err) => (err ? reject(err) : resolve()));\n });\n }\n }\n /**\n * Throws an error if the response has neither a result nor an error, or if\n * the \"isComplete\" flag is falsy.\n */\n static _checkForCompletion(req, res, isComplete) {\n if (!('result' in res) && !('error' in res)) {\n throw new eth_rpc_errors_1.EthereumRpcError(eth_rpc_errors_1.errorCodes.rpc.internal, `JsonRpcEngine: Response has no error or result for request:\\n${jsonify(req)}`, { request: req });\n }\n if (!isComplete) {\n throw new eth_rpc_errors_1.EthereumRpcError(eth_rpc_errors_1.errorCodes.rpc.internal, `JsonRpcEngine: Nothing ended request:\\n${jsonify(req)}`, { request: req });\n }\n }\n}\nexports.JsonRpcEngine = JsonRpcEngine;\nfunction jsonify(request) {\n return JSON.stringify(request, null, 2);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSnNvblJwY0VuZ2luZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9Kc29uUnBjRW5naW5lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLHNGQUE0RDtBQUM1RCxtREFBOEU7QUF1RjlFOzs7R0FHRztBQUNILE1BQWEsYUFBYyxTQUFRLDRCQUFnQjtJQUdqRDtRQUNFLEtBQUssRUFBRSxDQUFDO1FBQ1IsSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7SUFDeEIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxJQUFJLENBQU8sVUFBbUM7UUFDNUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsVUFBaUQsQ0FBQyxDQUFDO0lBQzNFLENBQUM7SUEyQ0QsTUFBTSxDQUFDLEdBQVksRUFBRSxFQUFRO1FBQzNCLElBQUksRUFBRSxJQUFJLE9BQU8sRUFBRSxLQUFLLFVBQVUsRUFBRTtZQUNsQyxNQUFNLElBQUksS0FBSyxDQUFDLDRDQUE0QyxDQUFDLENBQUM7U0FDL0Q7UUFFRCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDdEIsSUFBSSxFQUFFLEVBQUU7Z0JBQ04sT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQzthQUNuQztZQUNELE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUMvQjtRQUVELElBQUksRUFBRSxFQUFFO1lBQ04sT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQThCLEVBQUUsRUFBRSxDQUFDLENBQUM7U0FDekQ7UUFDRCxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBOEIsQ0FBQyxDQUFDO0lBQzdELENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILFlBQVk7UUFDVixPQUFPLEtBQUssRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsRUFBRTtZQUNuQyxJQUFJ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","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.createAsyncMiddleware = void 0;\n/**\n * JsonRpcEngine only accepts callback-based middleware directly.\n * createAsyncMiddleware exists to enable consumers to pass in async middleware\n * functions.\n *\n * Async middleware have no \"end\" function. Instead, they \"end\" if they return\n * without calling \"next\". Rather than passing in explicit return handlers,\n * async middleware can simply await \"next\", and perform operations on the\n * response object when execution resumes.\n *\n * To accomplish this, createAsyncMiddleware passes the async middleware a\n * wrapped \"next\" function. That function calls the internal JsonRpcEngine\n * \"next\" function with a return handler that resolves a promise when called.\n *\n * The return handler will always be called. Its resolution of the promise\n * enables the control flow described above.\n */\nfunction createAsyncMiddleware(asyncMiddleware) {\n return async (req, res, next, end) => {\n // nextPromise is the key to the implementation\n // it is resolved by the return handler passed to the\n // \"next\" function\n let resolveNextPromise;\n const nextPromise = new Promise((resolve) => {\n resolveNextPromise = resolve;\n });\n let returnHandlerCallback = null;\n let nextWasCalled = false;\n // This will be called by the consumer's async middleware.\n const asyncNext = async () => {\n nextWasCalled = true;\n // We pass a return handler to next(). When it is called by the engine,\n // the consumer's async middleware will resume executing.\n // eslint-disable-next-line node/callback-return\n next((runReturnHandlersCallback) => {\n // This callback comes from JsonRpcEngine._runReturnHandlers\n returnHandlerCallback = runReturnHandlersCallback;\n resolveNextPromise();\n });\n await nextPromise;\n };\n try {\n await asyncMiddleware(req, res, asyncNext);\n if (nextWasCalled) {\n await nextPromise; // we must wait until the return handler is called\n returnHandlerCallback(null);\n }\n else {\n end(null);\n }\n }\n catch (error) {\n if (returnHandlerCallback) {\n returnHandlerCallback(error);\n }\n else {\n end(error);\n }\n }\n };\n}\nexports.createAsyncMiddleware = createAsyncMiddleware;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlQXN5bmNNaWRkbGV3YXJlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NyZWF0ZUFzeW5jTWlkZGxld2FyZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFnQkE7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnQkc7QUFDSCxTQUFnQixxQkFBcUIsQ0FDbkMsZUFBNkM7SUFFN0MsT0FBTyxLQUFLLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEVBQUU7UUFDbkMsK0NBQStDO1FBQy9DLHFEQUFxRDtRQUNyRCxrQkFBa0I7UUFDbEIsSUFBSSxrQkFBOEIsQ0FBQztRQUNuQyxNQUFNLFdBQVcsR0FBRyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQzFDLGtCQUFrQixHQUFHLE9BQU8sQ0FBQztRQUMvQixDQUFDLENBQUMsQ0FBQztRQUVILElBQUkscUJBQXFCLEdBQVksSUFBSSxDQUFDO1FBQzFDLElBQUksYUFBYSxHQUFHLEtBQUssQ0FBQztRQUUxQiwwREFBMEQ7UUFDMUQsTUFBTSxTQUFTLEdBQUcsS0FBSyxJQUFJLEVBQUU7WUFDM0IsYUFBYSxHQUFHLElBQUksQ0FBQztZQUVyQix1RUFBdUU7WUFDdkUseURBQXlEO1lBQ3pELGdEQUFnRDtZQUNoRCxJQUFJLENBQUMsQ0FBQyx5QkFBeUIsRUFBRSxFQUFFO2dCQUNqQyw0REFBNEQ7Z0JBQzVELHFCQUFxQixHQUFHLHlCQUF5QixDQUFDO2dCQUNsRCxrQkFBa0IsRUFBRSxDQUFDO1lBQ3ZCLENBQUMsQ0FBQyxDQUFDO1lBQ0gsTUFBTSxXQUFXLENBQUM7UUFDcEIsQ0FBQyxDQUFDO1FBRUYsSUFBSTtZQUNGLE1BQU0sZUFBZSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFFM0MsSUFBSSxhQUFhLEVBQUU7Z0JBQ2pCLE1BQU0sV0FBVyxDQUFDLENBQUMsa0RBQWtEO2dCQUNwRSxxQkFBK0MsQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUN4RDtpQkFBTTtnQkFDTCxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDWDtTQUNGO1FBQUMsT0FBTyxLQUFLLEVBQUU7WUFDZCxJQUFJLHFCQUFxQixFQUFFO2dCQUN4QixxQkFBK0MsQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUN6RDtpQkFBTTtnQkFDTCxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDWjtTQUNGO0lBQ0gsQ0FBQyxDQUFDO0FBQ0osQ0FBQztBQS9DRCxzREErQ0MifQ==","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.createScaffoldMiddleware = void 0;\nfunction createScaffoldMiddleware(handlers) {\n return (req, res, next, end) => {\n const handler = handlers[req.method];\n // if no handler, return\n if (handler === undefined) {\n return next();\n }\n // if handler is fn, call as middleware\n if (typeof handler === 'function') {\n return handler(req, res, next, end);\n }\n // if handler is some other value, use as result\n res.result = handler;\n return end();\n };\n}\nexports.createScaffoldMiddleware = createScaffoldMiddleware;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlU2NhZmZvbGRNaWRkbGV3YXJlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NyZWF0ZVNjYWZmb2xkTWlkZGxld2FyZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFJQSxTQUFnQix3QkFBd0IsQ0FBQyxRQUV4QztJQUNDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsRUFBRTtRQUM3QixNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3JDLHdCQUF3QjtRQUN4QixJQUFJLE9BQU8sS0FBSyxTQUFTLEVBQUU7WUFDekIsT0FBTyxJQUFJLEVBQUUsQ0FBQztTQUNmO1FBQ0QsdUNBQXVDO1FBQ3ZDLElBQUksT0FBTyxPQUFPLEtBQUssVUFBVSxFQUFFO1lBQ2pDLE9BQU8sT0FBTyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1NBQ3JDO1FBQ0QsZ0RBQWdEO1FBQy9DLEdBQStCLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQztRQUNsRCxPQUFPLEdBQUcsRUFBRSxDQUFDO0lBQ2YsQ0FBQyxDQUFDO0FBQ0osQ0FBQztBQWpCRCw0REFpQkMifQ==","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getUniqueId = void 0;\n// uint32 (two's complement) max\n// more conservative than Number.MAX_SAFE_INTEGER\nconst MAX = 4294967295;\nlet idCounter = Math.floor(Math.random() * MAX);\nfunction getUniqueId() {\n idCounter = (idCounter + 1) % MAX;\n return idCounter;\n}\nexports.getUniqueId = getUniqueId;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0VW5pcXVlSWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvZ2V0VW5pcXVlSWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsZ0NBQWdDO0FBQ2hDLGlEQUFpRDtBQUNqRCxNQUFNLEdBQUcsR0FBRyxVQUFVLENBQUM7QUFDdkIsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFFaEQsU0FBZ0IsV0FBVztJQUN6QixTQUFTLEdBQUcsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0lBQ2xDLE9BQU8sU0FBUyxDQUFDO0FBQ25CLENBQUM7QUFIRCxrQ0FHQyJ9","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.createIdRemapMiddleware = void 0;\nconst getUniqueId_1 = require(\"./getUniqueId\");\nfunction createIdRemapMiddleware() {\n return (req, res, next, _end) => {\n const originalId = req.id;\n const newId = getUniqueId_1.getUniqueId();\n req.id = newId;\n res.id = newId;\n next((done) => {\n req.id = originalId;\n res.id = originalId;\n done();\n });\n };\n}\nexports.createIdRemapMiddleware = createIdRemapMiddleware;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWRSZW1hcE1pZGRsZXdhcmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaWRSZW1hcE1pZGRsZXdhcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsK0NBQTRDO0FBRzVDLFNBQWdCLHVCQUF1QjtJQUNyQyxPQUFPLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUU7UUFDOUIsTUFBTSxVQUFVLEdBQUcsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUMxQixNQUFNLEtBQUssR0FBRyx5QkFBVyxFQUFFLENBQUM7UUFDNUIsR0FBRyxDQUFDLEVBQUUsR0FBRyxLQUFLLENBQUM7UUFDZixHQUFHLENBQUMsRUFBRSxHQUFHLEtBQUssQ0FBQztRQUNmLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQ1osR0FBRyxDQUFDLEVBQUUsR0FBRyxVQUFVLENBQUM7WUFDcEIsR0FBRyxDQUFDLEVBQUUsR0FBRyxVQUFVLENBQUM7WUFDcEIsSUFBSSxFQUFFLENBQUM7UUFDVCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQztBQUNKLENBQUM7QUFaRCwwREFZQyJ9","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__exportStar(require(\"./idRemapMiddleware\"), exports);\n__exportStar(require(\"./createAsyncMiddleware\"), exports);\n__exportStar(require(\"./createScaffoldMiddleware\"), exports);\n__exportStar(require(\"./getUniqueId\"), exports);\n__exportStar(require(\"./JsonRpcEngine\"), exports);\n__exportStar(require(\"./mergeMiddleware\"), exports);\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQUEsc0RBQW9DO0FBQ3BDLDBEQUF3QztBQUN4Qyw2REFBMkM7QUFDM0MsZ0RBQThCO0FBQzlCLGtEQUFnQztBQUNoQyxvREFBa0MifQ==","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.mergeMiddleware = void 0;\nconst JsonRpcEngine_1 = require(\"./JsonRpcEngine\");\nfunction mergeMiddleware(middlewareStack) {\n const engine = new JsonRpcEngine_1.JsonRpcEngine();\n middlewareStack.forEach((middleware) => engine.push(middleware));\n return engine.asMiddleware();\n}\nexports.mergeMiddleware = mergeMiddleware;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVyZ2VNaWRkbGV3YXJlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL21lcmdlTWlkZGxld2FyZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtREFBbUU7QUFFbkUsU0FBZ0IsZUFBZSxDQUFDLGVBQXNEO0lBQ3BGLE1BQU0sTUFBTSxHQUFHLElBQUksNkJBQWEsRUFBRSxDQUFDO0lBQ25DLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztJQUNqRSxPQUFPLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQztBQUMvQixDQUFDO0FBSkQsMENBSUMifQ==","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst events_1 = require(\"events\");\nfunction safeApply(handler, context, args) {\n try {\n Reflect.apply(handler, context, args);\n }\n catch (err) {\n // Throw error after timeout so as not to interrupt the stack\n setTimeout(() => {\n throw err;\n });\n }\n}\nfunction arrayClone(arr) {\n const n = arr.length;\n const copy = new Array(n);\n for (let i = 0; i < n; i += 1) {\n copy[i] = arr[i];\n }\n return copy;\n}\nclass SafeEventEmitter extends events_1.EventEmitter {\n emit(type, ...args) {\n let doError = type === 'error';\n const events = this._events;\n if (events !== undefined) {\n doError = doError && events.error === undefined;\n }\n else if (!doError) {\n return false;\n }\n // If there is no 'error' event listener then throw.\n if (doError) {\n let er;\n if (args.length > 0) {\n [er] = args;\n }\n if (er instanceof Error) {\n // Note: The comments on the `throw` lines are intentional, they show\n // up in Node's output if this results in an unhandled exception.\n throw er; // Unhandled 'error' event\n }\n // At least give some kind of context to the user\n const err = new Error(`Unhandled error.${er ? ` (${er.message})` : ''}`);\n err.context = er;\n throw err; // Unhandled 'error' event\n }\n const handler = events[type];\n if (handler === undefined) {\n return false;\n }\n if (typeof handler === 'function') {\n safeApply(handler, this, args);\n }\n else {\n const len = handler.length;\n const listeners = arrayClone(handler);\n for (let i = 0; i < len; i += 1) {\n safeApply(listeners[i], this, args);\n }\n }\n return true;\n }\n}\nexports.default = SafeEventEmitter;\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst readable_stream_1 = require(\"readable-stream\");\n/**\n * Takes a JsonRpcEngine and returns a Duplex stream wrapping it.\n *\n * @param opts - Options bag.\n * @param opts.engine - The JsonRpcEngine to wrap in a stream.\n * @returns The stream wrapping the engine.\n */\nfunction createEngineStream(opts) {\n if (!opts || !opts.engine) {\n throw new Error('Missing engine parameter!');\n }\n const { engine } = opts;\n const stream = new readable_stream_1.Duplex({ objectMode: true, read, write });\n // forward notifications\n if (engine.on) {\n engine.on('notification', (message) => {\n stream.push(message);\n });\n }\n return stream;\n function read() {\n return undefined;\n }\n function write(req, _encoding, cb) {\n engine.handle(req, (_err, res) => {\n stream.push(res);\n });\n cb();\n }\n}\nexports.default = createEngineStream;\n//# sourceMappingURL=createEngineStream.js.map","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst safe_event_emitter_1 = __importDefault(require(\"@metamask/safe-event-emitter\"));\nconst readable_stream_1 = require(\"readable-stream\");\n/**\n * Creates a JsonRpcEngine middleware with an associated Duplex stream and\n * EventEmitter. The middleware, and by extension stream, assume that middleware\n * parameters are properly formatted. No runtime type checking or validation is\n * performed.\n *\n * @returns The event emitter, middleware, and stream.\n */\nfunction createStreamMiddleware() {\n const idMap = {};\n const stream = new readable_stream_1.Duplex({\n objectMode: true,\n read: readNoop,\n write: processMessage,\n });\n const events = new safe_event_emitter_1.default();\n const middleware = (req, res, next, end) => {\n // write req to stream\n stream.push(req);\n // register request on id map\n idMap[req.id] = { req, res, next, end };\n };\n return { events, middleware, stream };\n function readNoop() {\n return false;\n }\n function processMessage(res, _encoding, cb) {\n let err;\n try {\n const isNotification = !res.id;\n if (isNotification) {\n processNotification(res);\n }\n else {\n processResponse(res);\n }\n }\n catch (_err) {\n err = _err;\n }\n // continue processing stream\n cb(err);\n }\n function processResponse(res) {\n const context = idMap[res.id];\n if (!context) {\n throw new Error(`StreamMiddleware - Unknown response id \"${res.id}\"`);\n }\n delete idMap[res.id];\n // copy whole res onto original res\n Object.assign(context.res, res);\n // run callback on empty stack,\n // prevent internal stream-handler from catching errors\n setTimeout(context.end);\n }\n function processNotification(res) {\n events.emit('notification', res);\n }\n}\nexports.default = createStreamMiddleware;\n//# sourceMappingURL=createStreamMiddleware.js.map","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.createStreamMiddleware = exports.createEngineStream = void 0;\nconst createEngineStream_1 = __importDefault(require(\"./createEngineStream\"));\nexports.createEngineStream = createEngineStream_1.default;\nconst createStreamMiddleware_1 = __importDefault(require(\"./createStreamMiddleware\"));\nexports.createStreamMiddleware = createStreamMiddleware_1.default;\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst events_1 = require(\"events\");\nfunction safeApply(handler, context, args) {\n try {\n Reflect.apply(handler, context, args);\n }\n catch (err) {\n // Throw error after timeout so as not to interrupt the stack\n setTimeout(() => {\n throw err;\n });\n }\n}\nfunction arrayClone(arr) {\n const n = arr.length;\n const copy = new Array(n);\n for (let i = 0; i < n; i += 1) {\n copy[i] = arr[i];\n }\n return copy;\n}\nclass SafeEventEmitter extends events_1.EventEmitter {\n emit(type, ...args) {\n let doError = type === 'error';\n const events = this._events;\n if (events !== undefined) {\n doError = doError && events.error === undefined;\n }\n else if (!doError) {\n return false;\n }\n // If there is no 'error' event listener then throw.\n if (doError) {\n let er;\n if (args.length > 0) {\n [er] = args;\n }\n if (er instanceof Error) {\n // Note: The comments on the `throw` lines are intentional, they show\n // up in Node's output if this results in an unhandled exception.\n throw er; // Unhandled 'error' event\n }\n // At least give some kind of context to the user\n const err = new Error(`Unhandled error.${er ? ` (${er.message})` : ''}`);\n err.context = er;\n throw err; // Unhandled 'error' event\n }\n const handler = events[type];\n if (handler === undefined) {\n return false;\n }\n if (typeof handler === 'function') {\n safeApply(handler, this, args);\n }\n else {\n const len = handler.length;\n const listeners = arrayClone(handler);\n for (let i = 0; i < len; i += 1) {\n safeApply(listeners[i], this, args);\n }\n }\n return true;\n }\n}\nexports.default = SafeEventEmitter;\n//# sourceMappingURL=index.js.map","var toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n return toString.call(arr) == '[object Array]';\n};\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a duplex stream is just a stream that is both readable and writable.\n// Since JS doesn't have multiple prototypal inheritance, this class\n// prototypally inherits from Readable, and then parasitically from\n// Writable.\n\n'use strict';\n\n/*<replacement>*/\n\nvar pna = require('process-nextick-args');\n/*</replacement>*/\n\n/*<replacement>*/\nvar objectKeys = Object.keys || function (obj) {\n var keys = [];\n for (var key in obj) {\n keys.push(key);\n }return keys;\n};\n/*</replacement>*/\n\nmodule.exports = Duplex;\n\n/*<replacement>*/\nvar util = Object.create(require('core-util-is'));\nutil.inherits = require('inherits');\n/*</replacement>*/\n\nvar Readable = require('./_stream_readable');\nvar Writable = require('./_stream_writable');\n\nutil.inherits(Duplex, Readable);\n\n{\n // avoid scope creep, the keys array can then be collected\n var keys = objectKeys(Writable.prototype);\n for (var v = 0; v < keys.length; v++) {\n var method = keys[v];\n if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];\n }\n}\n\nfunction Duplex(options) {\n if (!(this instanceof Duplex)) return new Duplex(options);\n\n Readable.call(this, options);\n Writable.call(this, options);\n\n if (options && options.readable === false) this.readable = false;\n\n if (options && options.writable === false) this.writable = false;\n\n this.allowHalfOpen = true;\n if (options && options.allowHalfOpen === false) this.allowHalfOpen = false;\n\n this.once('end', onend);\n}\n\nObject.defineProperty(Duplex.prototype, 'writableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function () {\n return this._writableState.highWaterMark;\n }\n});\n\n// the no-half-open enforcer\nfunction onend() {\n // if we allow half-open state, or if the writable side ended,\n // then we're ok.\n if (this.allowHalfOpen || this._writableState.ended) return;\n\n // no more data can be written.\n // But allow more writes to happen in this tick.\n pna.nextTick(onEndNT, this);\n}\n\nfunction onEndNT(self) {\n self.end();\n}\n\nObject.defineProperty(Duplex.prototype, 'destroyed', {\n get: function () {\n if (this._readableState === undefined || this._writableState === undefined) {\n return false;\n }\n return this._readableState.destroyed && this._writableState.destroyed;\n },\n set: function (value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (this._readableState === undefined || this._writableState === undefined) {\n return;\n }\n\n // backward compatibility, the user is explicitly\n // managing destroyed\n this._readableState.destroyed = value;\n this._writableState.destroyed = value;\n }\n});\n\nDuplex.prototype._destroy = function (err, cb) {\n this.push(null);\n this.end();\n\n pna.nextTick(cb, err);\n};","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a passthrough stream.\n// basically just the most minimal sort of Transform stream.\n// Every written chunk gets output as-is.\n\n'use strict';\n\nmodule.exports = PassThrough;\n\nvar Transform = require('./_stream_transform');\n\n/*<replacement>*/\nvar util = Object.create(require('core-util-is'));\nutil.inherits = require('inherits');\n/*</replacement>*/\n\nutil.inherits(PassThrough, Transform);\n\nfunction PassThrough(options) {\n if (!(this instanceof PassThrough)) return new PassThrough(options);\n\n Transform.call(this, options);\n}\n\nPassThrough.prototype._transform = function (chunk, encoding, cb) {\n cb(null, chunk);\n};","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\n/*<replacement>*/\n\nvar pna = require('process-nextick-args');\n/*</replacement>*/\n\nmodule.exports = Readable;\n\n/*<replacement>*/\nvar isArray = require('isarray');\n/*</replacement>*/\n\n/*<replacement>*/\nvar Duplex;\n/*</replacement>*/\n\nReadable.ReadableState = ReadableState;\n\n/*<replacement>*/\nvar EE = require('events').EventEmitter;\n\nvar EElistenerCount = function (emitter, type) {\n return emitter.listeners(type).length;\n};\n/*</replacement>*/\n\n/*<replacement>*/\nvar Stream = require('./internal/streams/stream');\n/*</replacement>*/\n\n/*<replacement>*/\n\nvar Buffer = require('safe-buffer').Buffer;\nvar OurUint8Array = (typeof global !== 'undefined' ? global : typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : {}).Uint8Array || function () {};\nfunction _uint8ArrayToBuffer(chunk) {\n return Buffer.from(chunk);\n}\nfunction _isUint8Array(obj) {\n return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n\n/*</replacement>*/\n\n/*<replacement>*/\nvar util = Object.create(require('core-util-is'));\nutil.inherits = require('inherits');\n/*</replacement>*/\n\n/*<replacement>*/\nvar debugUtil = require('util');\nvar debug = void 0;\nif (debugUtil && debugUtil.debuglog) {\n debug = debugUtil.debuglog('stream');\n} else {\n debug = function () {};\n}\n/*</replacement>*/\n\nvar BufferList = require('./internal/streams/BufferList');\nvar destroyImpl = require('./internal/streams/destroy');\nvar StringDecoder;\n\nutil.inherits(Readable, Stream);\n\nvar kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume'];\n\nfunction prependListener(emitter, event, fn) {\n // Sadly this is not cacheable as some libraries bundle their own\n // event emitter implementation with them.\n if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn);\n\n // This is a hack to make sure that our error handler is attached before any\n // userland ones. NEVER DO THIS. This is here only because this code needs\n // to continue to work with older versions of Node.js that do not include\n // the prependListener() method. The goal is to eventually remove this hack.\n if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];\n}\n\nfunction ReadableState(options, stream) {\n Duplex = Duplex || require('./_stream_duplex');\n\n options = options || {};\n\n // Duplex streams are both readable and writable, but share\n // the same options object.\n // However, some cases require setting options to different\n // values for the readable and the writable sides of the duplex stream.\n // These options can be provided separately as readableXXX and writableXXX.\n var isDuplex = stream instanceof Duplex;\n\n // object stream flag. Used to make read(n) ignore n and to\n // make all the buffer merging and length checks go away\n this.objectMode = !!options.objectMode;\n\n if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode;\n\n // the point at which it stops calling _read() to fill the buffer\n // Note: 0 is a valid value, means \"don't call _read preemptively ever\"\n var hwm = options.highWaterMark;\n var readableHwm = options.readableHighWaterMark;\n var defaultHwm = this.objectMode ? 16 : 16 * 1024;\n\n if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (readableHwm || readableHwm === 0)) this.highWaterMark = readableHwm;else this.highWaterMark = defaultHwm;\n\n // cast to ints.\n this.highWaterMark = Math.floor(this.highWaterMark);\n\n // A linked list is used to store data chunks instead of an array because the\n // linked list can remove elements from the beginning faster than\n // array.shift()\n this.buffer = new BufferList();\n this.length = 0;\n this.pipes = null;\n this.pipesCount = 0;\n this.flowing = null;\n this.ended = false;\n this.endEmitted = false;\n this.reading = false;\n\n // a flag to be able to tell if the event 'readable'/'data' is emitted\n // immediately, or on a later tick. We set this to true at first, because\n // any actions that shouldn't happen until \"later\" should generally also\n // not happen before the first read call.\n this.sync = true;\n\n // whenever we return null, then we set a flag to say\n // that we're awaiting a 'readable' event emission.\n this.needReadable = false;\n this.emittedReadable = false;\n this.readableListening = false;\n this.resumeScheduled = false;\n\n // has it been destroyed\n this.destroyed = false;\n\n // Crypto is kind of old and crusty. Historically, its default string\n // encoding is 'binary' so we have to make this configurable.\n // Everything else in the universe uses 'utf8', though.\n this.defaultEncoding = options.defaultEncoding || 'utf8';\n\n // the number of writers that are awaiting a drain event in .pipe()s\n this.awaitDrain = 0;\n\n // if true, a maybeReadMore has been scheduled\n this.readingMore = false;\n\n this.decoder = null;\n this.encoding = null;\n if (options.encoding) {\n if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n this.decoder = new StringDecoder(options.encoding);\n this.encoding = options.encoding;\n }\n}\n\nfunction Readable(options) {\n Duplex = Duplex || require('./_stream_duplex');\n\n if (!(this instanceof Readable)) return new Readable(options);\n\n this._readableState = new ReadableState(options, this);\n\n // legacy\n this.readable = true;\n\n if (options) {\n if (typeof options.read === 'function') this._read = options.read;\n\n if (typeof options.destroy === 'function') this._destroy = options.destroy;\n }\n\n Stream.call(this);\n}\n\nObject.defineProperty(Readable.prototype, 'destroyed', {\n get: function () {\n if (this._readableState === undefined) {\n return false;\n }\n return this._readableState.destroyed;\n },\n set: function (value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (!this._readableState) {\n return;\n }\n\n // backward compatibility, the user is explicitly\n // managing destroyed\n this._readableState.destroyed = value;\n }\n});\n\nReadable.prototype.destroy = destroyImpl.destroy;\nReadable.prototype._undestroy = destroyImpl.undestroy;\nReadable.prototype._destroy = function (err, cb) {\n this.push(null);\n cb(err);\n};\n\n// Manually shove something into the read() buffer.\n// This returns true if the highWaterMark has not been hit yet,\n// similar to how Writable.write() returns true if you should\n// write() some more.\nReadable.prototype.push = function (chunk, encoding) {\n var state = this._readableState;\n var skipChunkCheck;\n\n if (!state.objectMode) {\n if (typeof chunk === 'string') {\n encoding = encoding || state.defaultEncoding;\n if (encoding !== state.encoding) {\n chunk = Buffer.from(chunk, encoding);\n encoding = '';\n }\n skipChunkCheck = true;\n }\n } else {\n skipChunkCheck = true;\n }\n\n return readableAddChunk(this, chunk, encoding, false, skipChunkCheck);\n};\n\n// Unshift should *always* be something directly out of read()\nReadable.prototype.unshift = function (chunk) {\n return readableAddChunk(this, chunk, null, true, false);\n};\n\nfunction readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) {\n var state = stream._readableState;\n if (chunk === null) {\n state.reading = false;\n onEofChunk(stream, state);\n } else {\n var er;\n if (!skipChunkCheck) er = chunkInvalid(state, chunk);\n if (er) {\n stream.emit('error', er);\n } else if (state.objectMode || chunk && chunk.length > 0) {\n if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) {\n chunk = _uint8ArrayToBuffer(chunk);\n }\n\n if (addToFront) {\n if (state.endEmitted) stream.emit('error', new Error('stream.unshift() after end event'));else addChunk(stream, state, chunk, true);\n } else if (state.ended) {\n stream.emit('error', new Error('stream.push() after EOF'));\n } else {\n state.reading = false;\n if (state.decoder && !encoding) {\n chunk = state.decoder.write(chunk);\n if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state);\n } else {\n addChunk(stream, state, chunk, false);\n }\n }\n } else if (!addToFront) {\n state.reading = false;\n }\n }\n\n return needMoreData(state);\n}\n\nfunction addChunk(stream, state, chunk, addToFront) {\n if (state.flowing && state.length === 0 && !state.sync) {\n stream.emit('data', chunk);\n stream.read(0);\n } else {\n // update the buffer info.\n state.length += state.objectMode ? 1 : chunk.length;\n if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);\n\n if (state.needReadable) emitReadable(stream);\n }\n maybeReadMore(stream, state);\n}\n\nfunction chunkInvalid(state, chunk) {\n var er;\n if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n er = new TypeError('Invalid non-string/buffer chunk');\n }\n return er;\n}\n\n// if it's past the high water mark, we can push in some more.\n// Also, if we have no data yet, we can stand some\n// more bytes. This is to work around cases where hwm=0,\n// such as the repl. Also, if the push() triggered a\n// readable event, and the user called read(largeNumber) such that\n// needReadable was set, then we ought to push more, so that another\n// 'readable' event will be triggered.\nfunction needMoreData(state) {\n return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0);\n}\n\nReadable.prototype.isPaused = function () {\n return this._readableState.flowing === false;\n};\n\n// backwards compatibility.\nReadable.prototype.setEncoding = function (enc) {\n if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n this._readableState.decoder = new StringDecoder(enc);\n this._readableState.encoding = enc;\n return this;\n};\n\n// Don't raise the hwm > 8MB\nvar MAX_HWM = 0x800000;\nfunction computeNewHighWaterMark(n) {\n if (n >= MAX_HWM) {\n n = MAX_HWM;\n } else {\n // Get the next highest power of 2 to prevent increasing hwm excessively in\n // tiny amounts\n n--;\n n |= n >>> 1;\n n |= n >>> 2;\n n |= n >>> 4;\n n |= n >>> 8;\n n |= n >>> 16;\n n++;\n }\n return n;\n}\n\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction howMuchToRead(n, state) {\n if (n <= 0 || state.length === 0 && state.ended) return 0;\n if (state.objectMode) return 1;\n if (n !== n) {\n // Only flow one buffer at a time\n if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;\n }\n // If we're asking for more than the current hwm, then raise the hwm.\n if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);\n if (n <= state.length) return n;\n // Don't have enough\n if (!state.ended) {\n state.needReadable = true;\n return 0;\n }\n return state.length;\n}\n\n// you can override either this method, or the async _read(n) below.\nReadable.prototype.read = function (n) {\n debug('read', n);\n n = parseInt(n, 10);\n var state = this._readableState;\n var nOrig = n;\n\n if (n !== 0) state.emittedReadable = false;\n\n // if we're doing read(0) to trigger a readable event, but we\n // already have a bunch of data in the buffer, then just trigger\n // the 'readable' event and move on.\n if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) {\n debug('read: emitReadable', state.length, state.ended);\n if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);\n return null;\n }\n\n n = howMuchToRead(n, state);\n\n // if we've ended, and we're now clear, then finish it up.\n if (n === 0 && state.ended) {\n if (state.length === 0) endReadable(this);\n return null;\n }\n\n // All the actual chunk generation logic needs to be\n // *below* the call to _read. The reason is that in certain\n // synthetic stream cases, such as passthrough streams, _read\n // may be a completely synchronous operation which may change\n // the state of the read buffer, providing enough data when\n // before there was *not* enough.\n //\n // So, the steps are:\n // 1. Figure out what the state of things will be after we do\n // a read from the buffer.\n //\n // 2. If that resulting state will trigger a _read, then call _read.\n // Note that this may be asynchronous, or synchronous. Yes, it is\n // deeply ugly to write APIs this way, but that still doesn't mean\n // that the Readable class should behave improperly, as streams are\n // designed to be sync/async agnostic.\n // Take note if the _read call is sync or async (ie, if the read call\n // has returned yet), so that we know whether or not it's safe to emit\n // 'readable' etc.\n //\n // 3. Actually pull the requested chunks out of the buffer and return.\n\n // if we need a readable event, then we need to do some reading.\n var doRead = state.needReadable;\n debug('need readable', doRead);\n\n // if we currently have less than the highWaterMark, then also read some\n if (state.length === 0 || state.length - n < state.highWaterMark) {\n doRead = true;\n debug('length less than watermark', doRead);\n }\n\n // however, if we've ended, then there's no point, and if we're already\n // reading, then it's unnecessary.\n if (state.ended || state.reading) {\n doRead = false;\n debug('reading or ended', doRead);\n } else if (doRead) {\n debug('do read');\n state.reading = true;\n state.sync = true;\n // if the length is currently zero, then we *need* a readable event.\n if (state.length === 0) state.needReadable = true;\n // call internal read method\n this._read(state.highWaterMark);\n state.sync = false;\n // If _read pushed data synchronously, then `reading` will be false,\n // and we need to re-evaluate how much data we can return to the user.\n if (!state.reading) n = howMuchToRead(nOrig, state);\n }\n\n var ret;\n if (n > 0) ret = fromList(n, state);else ret = null;\n\n if (ret === null) {\n state.needReadable = true;\n n = 0;\n } else {\n state.length -= n;\n }\n\n if (state.length === 0) {\n // If we have nothing in the buffer, then we want to know\n // as soon as we *do* get something into the buffer.\n if (!state.ended) state.needReadable = true;\n\n // If we tried to read() past the EOF, then emit end on the next tick.\n if (nOrig !== n && state.ended) endReadable(this);\n }\n\n if (ret !== null) this.emit('data', ret);\n\n return ret;\n};\n\nfunction onEofChunk(stream, state) {\n if (state.ended) return;\n if (state.decoder) {\n var chunk = state.decoder.end();\n if (chunk && chunk.length) {\n state.buffer.push(chunk);\n state.length += state.objectMode ? 1 : chunk.length;\n }\n }\n state.ended = true;\n\n // emit 'readable' now to make sure it gets picked up.\n emitReadable(stream);\n}\n\n// Don't emit readable right away in sync mode, because this can trigger\n// another read() call => stack overflow. This way, it might trigger\n// a nextTick recursion warning, but that's not so bad.\nfunction emitReadable(stream) {\n var state = stream._readableState;\n state.needReadable = false;\n if (!state.emittedReadable) {\n debug('emitReadable', state.flowing);\n state.emittedReadable = true;\n if (state.sync) pna.nextTick(emitReadable_, stream);else emitReadable_(stream);\n }\n}\n\nfunction emitReadable_(stream) {\n debug('emit readable');\n stream.emit('readable');\n flow(stream);\n}\n\n// at this point, the user has presumably seen the 'readable' event,\n// and called read() to consume some data. that may have triggered\n// in turn another _read(n) call, in which case reading = true if\n// it's in progress.\n// However, if we're not ended, or reading, and the length < hwm,\n// then go ahead and try to read some more preemptively.\nfunction maybeReadMore(stream, state) {\n if (!state.readingMore) {\n state.readingMore = true;\n pna.nextTick(maybeReadMore_, stream, state);\n }\n}\n\nfunction maybeReadMore_(stream, state) {\n var len = state.length;\n while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) {\n debug('maybeReadMore read 0');\n stream.read(0);\n if (len === state.length)\n // didn't get any data, stop spinning.\n break;else len = state.length;\n }\n state.readingMore = false;\n}\n\n// abstract method. to be overridden in specific implementation classes.\n// call cb(er, data) where data is <= n in length.\n// for virtual (non-string, non-buffer) streams, \"length\" is somewhat\n// arbitrary, and perhaps not very meaningful.\nReadable.prototype._read = function (n) {\n this.emit('error', new Error('_read() is not implemented'));\n};\n\nReadable.prototype.pipe = function (dest, pipeOpts) {\n var src = this;\n var state = this._readableState;\n\n switch (state.pipesCount) {\n case 0:\n state.pipes = dest;\n break;\n case 1:\n state.pipes = [state.pipes, dest];\n break;\n default:\n state.pipes.push(dest);\n break;\n }\n state.pipesCount += 1;\n debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);\n\n var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;\n\n var endFn = doEnd ? onend : unpipe;\n if (state.endEmitted) pna.nextTick(endFn);else src.once('end', endFn);\n\n dest.on('unpipe', onunpipe);\n function onunpipe(readable, unpipeInfo) {\n debug('onunpipe');\n if (readable === src) {\n if (unpipeInfo && unpipeInfo.hasUnpiped === false) {\n unpipeInfo.hasUnpiped = true;\n cleanup();\n }\n }\n }\n\n function onend() {\n debug('onend');\n dest.end();\n }\n\n // when the dest drains, it reduces the awaitDrain counter\n // on the source. This would be more elegant with a .once()\n // handler in flow(), but adding and removing repeatedly is\n // too slow.\n var ondrain = pipeOnDrain(src);\n dest.on('drain', ondrain);\n\n var cleanedUp = false;\n function cleanup() {\n debug('cleanup');\n // cleanup event handlers once the pipe is broken\n dest.removeListener('close', onclose);\n dest.removeListener('finish', onfinish);\n dest.removeListener('drain', ondrain);\n dest.removeListener('error', onerror);\n dest.removeListener('unpipe', onunpipe);\n src.removeListener('end', onend);\n src.removeListener('end', unpipe);\n src.removeListener('data', ondata);\n\n cleanedUp = true;\n\n // if the reader is waiting for a drain event from this\n // specific writer, then it would cause it to never start\n // flowing again.\n // So, if this is awaiting a drain, then we just call it now.\n // If we don't know, then assume that we are waiting for one.\n if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();\n }\n\n // If the user pushes more data while we're writing to dest then we'll end up\n // in ondata again. However, we only want to increase awaitDrain once because\n // dest will only emit one 'drain' event for the multiple writes.\n // => Introduce a guard on increasing awaitDrain.\n var increasedAwaitDrain = false;\n src.on('data', ondata);\n function ondata(chunk) {\n debug('ondata');\n increasedAwaitDrain = false;\n var ret = dest.write(chunk);\n if (false === ret && !increasedAwaitDrain) {\n // If the user unpiped during `dest.write()`, it is possible\n // to get stuck in a permanently paused state if that write\n // also returned false.\n // => Check whether `dest` is still a piping destination.\n if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {\n debug('false write response, pause', state.awaitDrain);\n state.awaitDrain++;\n increasedAwaitDrain = true;\n }\n src.pause();\n }\n }\n\n // if the dest has an error, then stop piping into it.\n // however, don't suppress the throwing behavior for this.\n function onerror(er) {\n debug('onerror', er);\n unpipe();\n dest.removeListener('error', onerror);\n if (EElistenerCount(dest, 'error') === 0) dest.emit('error', er);\n }\n\n // Make sure our error handler is attached before userland ones.\n prependListener(dest, 'error', onerror);\n\n // Both close and finish should trigger unpipe, but only once.\n function onclose() {\n dest.removeListener('finish', onfinish);\n unpipe();\n }\n dest.once('close', onclose);\n function onfinish() {\n debug('onfinish');\n dest.removeListener('close', onclose);\n unpipe();\n }\n dest.once('finish', onfinish);\n\n function unpipe() {\n debug('unpipe');\n src.unpipe(dest);\n }\n\n // tell the dest that it's being piped to\n dest.emit('pipe', src);\n\n // start the flow if it hasn't been started already.\n if (!state.flowing) {\n debug('pipe resume');\n src.resume();\n }\n\n return dest;\n};\n\nfunction pipeOnDrain(src) {\n return function () {\n var state = src._readableState;\n debug('pipeOnDrain', state.awaitDrain);\n if (state.awaitDrain) state.awaitDrain--;\n if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {\n state.flowing = true;\n flow(src);\n }\n };\n}\n\nReadable.prototype.unpipe = function (dest) {\n var state = this._readableState;\n var unpipeInfo = { hasUnpiped: false };\n\n // if we're not piping anywhere, then do nothing.\n if (state.pipesCount === 0) return this;\n\n // just one destination. most common case.\n if (state.pipesCount === 1) {\n // passed in one, but it's not the right one.\n if (dest && dest !== state.pipes) return this;\n\n if (!dest) dest = state.pipes;\n\n // got a match.\n state.pipes = null;\n state.pipesCount = 0;\n state.flowing = false;\n if (dest) dest.emit('unpipe', this, unpipeInfo);\n return this;\n }\n\n // slow case. multiple pipe destinations.\n\n if (!dest) {\n // remove all.\n var dests = state.pipes;\n var len = state.pipesCount;\n state.pipes = null;\n state.pipesCount = 0;\n state.flowing = false;\n\n for (var i = 0; i < len; i++) {\n dests[i].emit('unpipe', this, { hasUnpiped: false });\n }return this;\n }\n\n // try to find the right one.\n var index = indexOf(state.pipes, dest);\n if (index === -1) return this;\n\n state.pipes.splice(index, 1);\n state.pipesCount -= 1;\n if (state.pipesCount === 1) state.pipes = state.pipes[0];\n\n dest.emit('unpipe', this, unpipeInfo);\n\n return this;\n};\n\n// set up data events if they are asked for\n// Ensure readable listeners eventually get something\nReadable.prototype.on = function (ev, fn) {\n var res = Stream.prototype.on.call(this, ev, fn);\n\n if (ev === 'data') {\n // Start flowing on next tick if stream isn't explicitly paused\n if (this._readableState.flowing !== false) this.resume();\n } else if (ev === 'readable') {\n var state = this._readableState;\n if (!state.endEmitted && !state.readableListening) {\n state.readableListening = state.needReadable = true;\n state.emittedReadable = false;\n if (!state.reading) {\n pna.nextTick(nReadingNextTick, this);\n } else if (state.length) {\n emitReadable(this);\n }\n }\n }\n\n return res;\n};\nReadable.prototype.addListener = Readable.prototype.on;\n\nfunction nReadingNextTick(self) {\n debug('readable nexttick read 0');\n self.read(0);\n}\n\n// pause() and resume() are remnants of the legacy readable stream API\n// If the user uses them, then switch into old mode.\nReadable.prototype.resume = function () {\n var state = this._readableState;\n if (!state.flowing) {\n debug('resume');\n state.flowing = true;\n resume(this, state);\n }\n return this;\n};\n\nfunction resume(stream, state) {\n if (!state.resumeScheduled) {\n state.resumeScheduled = true;\n pna.nextTick(resume_, stream, state);\n }\n}\n\nfunction resume_(stream, state) {\n if (!state.reading) {\n debug('resume read 0');\n stream.read(0);\n }\n\n state.resumeScheduled = false;\n state.awaitDrain = 0;\n stream.emit('resume');\n flow(stream);\n if (state.flowing && !state.reading) stream.read(0);\n}\n\nReadable.prototype.pause = function () {\n debug('call pause flowing=%j', this._readableState.flowing);\n if (false !== this._readableState.flowing) {\n debug('pause');\n this._readableState.flowing = false;\n this.emit('pause');\n }\n return this;\n};\n\nfunction flow(stream) {\n var state = stream._readableState;\n debug('flow', state.flowing);\n while (state.flowing && stream.read() !== null) {}\n}\n\n// wrap an old-style stream as the async data source.\n// This is *not* part of the readable stream interface.\n// It is an ugly unfortunate mess of history.\nReadable.prototype.wrap = function (stream) {\n var _this = this;\n\n var state = this._readableState;\n var paused = false;\n\n stream.on('end', function () {\n debug('wrapped end');\n if (state.decoder && !state.ended) {\n var chunk = state.decoder.end();\n if (chunk && chunk.length) _this.push(chunk);\n }\n\n _this.push(null);\n });\n\n stream.on('data', function (chunk) {\n debug('wrapped data');\n if (state.decoder) chunk = state.decoder.write(chunk);\n\n // don't skip over falsy values in objectMode\n if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;\n\n var ret = _this.push(chunk);\n if (!ret) {\n paused = true;\n stream.pause();\n }\n });\n\n // proxy all the other methods.\n // important when wrapping filters and duplexes.\n for (var i in stream) {\n if (this[i] === undefined && typeof stream[i] === 'function') {\n this[i] = function (method) {\n return function () {\n return stream[method].apply(stream, arguments);\n };\n }(i);\n }\n }\n\n // proxy certain important events.\n for (var n = 0; n < kProxyEvents.length; n++) {\n stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n]));\n }\n\n // when we try to consume some more bytes, simply unpause the\n // underlying stream.\n this._read = function (n) {\n debug('wrapped _read', n);\n if (paused) {\n paused = false;\n stream.resume();\n }\n };\n\n return this;\n};\n\nObject.defineProperty(Readable.prototype, 'readableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function () {\n return this._readableState.highWaterMark;\n }\n});\n\n// exposed for testing purposes only.\nReadable._fromList = fromList;\n\n// Pluck off n bytes from an array of buffers.\n// Length is the combined lengths of all the buffers in the list.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction fromList(n, state) {\n // nothing buffered\n if (state.length === 0) return null;\n\n var ret;\n if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {\n // read it all, truncate the list\n if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.head.data;else ret = state.buffer.concat(state.length);\n state.buffer.clear();\n } else {\n // read part of list\n ret = fromListPartial(n, state.buffer, state.decoder);\n }\n\n return ret;\n}\n\n// Extracts only enough buffered data to satisfy the amount requested.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction fromListPartial(n, list, hasStrings) {\n var ret;\n if (n < list.head.data.length) {\n // slice is the same for buffers and strings\n ret = list.head.data.slice(0, n);\n list.head.data = list.head.data.slice(n);\n } else if (n === list.head.data.length) {\n // first chunk is a perfect match\n ret = list.shift();\n } else {\n // result spans more than one buffer\n ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list);\n }\n return ret;\n}\n\n// Copies a specified amount of characters from the list of buffered data\n// chunks.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction copyFromBufferString(n, list) {\n var p = list.head;\n var c = 1;\n var ret = p.data;\n n -= ret.length;\n while (p = p.next) {\n var str = p.data;\n var nb = n > str.length ? str.length : n;\n if (nb === str.length) ret += str;else ret += str.slice(0, n);\n n -= nb;\n if (n === 0) {\n if (nb === str.length) {\n ++c;\n if (p.next) list.head = p.next;else list.head = list.tail = null;\n } else {\n list.head = p;\n p.data = str.slice(nb);\n }\n break;\n }\n ++c;\n }\n list.length -= c;\n return ret;\n}\n\n// Copies a specified amount of bytes from the list of buffered data chunks.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction copyFromBuffer(n, list) {\n var ret = Buffer.allocUnsafe(n);\n var p = list.head;\n var c = 1;\n p.data.copy(ret);\n n -= p.data.length;\n while (p = p.next) {\n var buf = p.data;\n var nb = n > buf.length ? buf.length : n;\n buf.copy(ret, ret.length - n, 0, nb);\n n -= nb;\n if (n === 0) {\n if (nb === buf.length) {\n ++c;\n if (p.next) list.head = p.next;else list.head = list.tail = null;\n } else {\n list.head = p;\n p.data = buf.slice(nb);\n }\n break;\n }\n ++c;\n }\n list.length -= c;\n return ret;\n}\n\nfunction endReadable(stream) {\n var state = stream._readableState;\n\n // If we get here before consuming all the bytes, then that is a\n // bug in node. Should never happen.\n if (state.length > 0) throw new Error('\"endReadable()\" called on non-empty stream');\n\n if (!state.endEmitted) {\n state.ended = true;\n pna.nextTick(endReadableNT, state, stream);\n }\n}\n\nfunction endReadableNT(state, stream) {\n // Check that we didn't get one last unshift.\n if (!state.endEmitted && state.length === 0) {\n state.endEmitted = true;\n stream.readable = false;\n stream.emit('end');\n }\n}\n\nfunction indexOf(xs, x) {\n for (var i = 0, l = xs.length; i < l; i++) {\n if (xs[i] === x) return i;\n }\n return -1;\n}","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a transform stream is a readable/writable stream where you do\n// something with the data. Sometimes it's called a \"filter\",\n// but that's not a great name for it, since that implies a thing where\n// some bits pass through, and others are simply ignored. (That would\n// be a valid example of a transform, of course.)\n//\n// While the output is causally related to the input, it's not a\n// necessarily symmetric or synchronous transformation. For example,\n// a zlib stream might take multiple plain-text writes(), and then\n// emit a single compressed chunk some time in the future.\n//\n// Here's how this works:\n//\n// The Transform stream has all the aspects of the readable and writable\n// stream classes. When you write(chunk), that calls _write(chunk,cb)\n// internally, and returns false if there's a lot of pending writes\n// buffered up. When you call read(), that calls _read(n) until\n// there's enough pending readable data buffered up.\n//\n// In a transform stream, the written data is placed in a buffer. When\n// _read(n) is called, it transforms the queued up data, calling the\n// buffered _write cb's as it consumes chunks. If consuming a single\n// written chunk would result in multiple output chunks, then the first\n// outputted bit calls the readcb, and subsequent chunks just go into\n// the read buffer, and will cause it to emit 'readable' if necessary.\n//\n// This way, back-pressure is actually determined by the reading side,\n// since _read has to be called to start processing a new chunk. However,\n// a pathological inflate type of transform can cause excessive buffering\n// here. For example, imagine a stream where every byte of input is\n// interpreted as an integer from 0-255, and then results in that many\n// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in\n// 1kb of data being output. In this case, you could write a very small\n// amount of input, and end up with a very large amount of output. In\n// such a pathological inflating mechanism, there'd be no way to tell\n// the system to stop doing the transform. A single 4MB write could\n// cause the system to run out of memory.\n//\n// However, even in such a pathological case, only a single written chunk\n// would be consumed, and then the rest would wait (un-transformed) until\n// the results of the previous transformed chunk were consumed.\n\n'use strict';\n\nmodule.exports = Transform;\n\nvar Duplex = require('./_stream_duplex');\n\n/*<replacement>*/\nvar util = Object.create(require('core-util-is'));\nutil.inherits = require('inherits');\n/*</replacement>*/\n\nutil.inherits(Transform, Duplex);\n\nfunction afterTransform(er, data) {\n var ts = this._transformState;\n ts.transforming = false;\n\n var cb = ts.writecb;\n\n if (!cb) {\n return this.emit('error', new Error('write callback called multiple times'));\n }\n\n ts.writechunk = null;\n ts.writecb = null;\n\n if (data != null) // single equals check for both `null` and `undefined`\n this.push(data);\n\n cb(er);\n\n var rs = this._readableState;\n rs.reading = false;\n if (rs.needReadable || rs.length < rs.highWaterMark) {\n this._read(rs.highWaterMark);\n }\n}\n\nfunction Transform(options) {\n if (!(this instanceof Transform)) return new Transform(options);\n\n Duplex.call(this, options);\n\n this._transformState = {\n afterTransform: afterTransform.bind(this),\n needTransform: false,\n transforming: false,\n writecb: null,\n writechunk: null,\n writeencoding: null\n };\n\n // start out asking for a readable event once data is transformed.\n this._readableState.needReadable = true;\n\n // we have implemented the _read method, and done the other things\n // that Readable wants before the first _read call, so unset the\n // sync guard flag.\n this._readableState.sync = false;\n\n if (options) {\n if (typeof options.transform === 'function') this._transform = options.transform;\n\n if (typeof options.flush === 'function') this._flush = options.flush;\n }\n\n // When the writable side finishes, then flush out anything remaining.\n this.on('prefinish', prefinish);\n}\n\nfunction prefinish() {\n var _this = this;\n\n if (typeof this._flush === 'function') {\n this._flush(function (er, data) {\n done(_this, er, data);\n });\n } else {\n done(this, null, null);\n }\n}\n\nTransform.prototype.push = function (chunk, encoding) {\n this._transformState.needTransform = false;\n return Duplex.prototype.push.call(this, chunk, encoding);\n};\n\n// This is the part where you do stuff!\n// override this function in implementation classes.\n// 'chunk' is an input chunk.\n//\n// Call `push(newChunk)` to pass along transformed output\n// to the readable side. You may call 'push' zero or more times.\n//\n// Call `cb(err)` when you are done with this chunk. If you pass\n// an error, then that'll put the hurt on the whole operation. If you\n// never call cb(), then you'll never get another chunk.\nTransform.prototype._transform = function (chunk, encoding, cb) {\n throw new Error('_transform() is not implemented');\n};\n\nTransform.prototype._write = function (chunk, encoding, cb) {\n var ts = this._transformState;\n ts.writecb = cb;\n ts.writechunk = chunk;\n ts.writeencoding = encoding;\n if (!ts.transforming) {\n var rs = this._readableState;\n if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);\n }\n};\n\n// Doesn't matter what the args are here.\n// _transform does all the work.\n// That we got here means that the readable side wants more data.\nTransform.prototype._read = function (n) {\n var ts = this._transformState;\n\n if (ts.writechunk !== null && ts.writecb && !ts.transforming) {\n ts.transforming = true;\n this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);\n } else {\n // mark that we need a transform, so that any data that comes in\n // will get processed, now that we've asked for it.\n ts.needTransform = true;\n }\n};\n\nTransform.prototype._destroy = function (err, cb) {\n var _this2 = this;\n\n Duplex.prototype._destroy.call(this, err, function (err2) {\n cb(err2);\n _this2.emit('close');\n });\n};\n\nfunction done(stream, er, data) {\n if (er) return stream.emit('error', er);\n\n if (data != null) // single equals check for both `null` and `undefined`\n stream.push(data);\n\n // if there's nothing in the write buffer, then that means\n // that nothing more will ever be provided\n if (stream._writableState.length) throw new Error('Calling transform done when ws.length != 0');\n\n if (stream._transformState.transforming) throw new Error('Calling transform done when still transforming');\n\n return stream.push(null);\n}","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// A bit simpler than readable streams.\n// Implement an async ._write(chunk, encoding, cb), and it'll handle all\n// the drain event emission and buffering.\n\n'use strict';\n\n/*<replacement>*/\n\nvar pna = require('process-nextick-args');\n/*</replacement>*/\n\nmodule.exports = Writable;\n\n/* <replacement> */\nfunction WriteReq(chunk, encoding, cb) {\n this.chunk = chunk;\n this.encoding = encoding;\n this.callback = cb;\n this.next = null;\n}\n\n// It seems a linked list but it is not\n// there will be only 2 of these for each stream\nfunction CorkedRequest(state) {\n var _this = this;\n\n this.next = null;\n this.entry = null;\n this.finish = function () {\n onCorkedFinish(_this, state);\n };\n}\n/* </replacement> */\n\n/*<replacement>*/\nvar asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : pna.nextTick;\n/*</replacement>*/\n\n/*<replacement>*/\nvar Duplex;\n/*</replacement>*/\n\nWritable.WritableState = WritableState;\n\n/*<replacement>*/\nvar util = Object.create(require('core-util-is'));\nutil.inherits = require('inherits');\n/*</replacement>*/\n\n/*<replacement>*/\nvar internalUtil = {\n deprecate: require('util-deprecate')\n};\n/*</replacement>*/\n\n/*<replacement>*/\nvar Stream = require('./internal/streams/stream');\n/*</replacement>*/\n\n/*<replacement>*/\n\nvar Buffer = require('safe-buffer').Buffer;\nvar OurUint8Array = (typeof global !== 'undefined' ? global : typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : {}).Uint8Array || function () {};\nfunction _uint8ArrayToBuffer(chunk) {\n return Buffer.from(chunk);\n}\nfunction _isUint8Array(obj) {\n return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n\n/*</replacement>*/\n\nvar destroyImpl = require('./internal/streams/destroy');\n\nutil.inherits(Writable, Stream);\n\nfunction nop() {}\n\nfunction WritableState(options, stream) {\n Duplex = Duplex || require('./_stream_duplex');\n\n options = options || {};\n\n // Duplex streams are both readable and writable, but share\n // the same options object.\n // However, some cases require setting options to different\n // values for the readable and the writable sides of the duplex stream.\n // These options can be provided separately as readableXXX and writableXXX.\n var isDuplex = stream instanceof Duplex;\n\n // object stream flag to indicate whether or not this stream\n // contains buffers or objects.\n this.objectMode = !!options.objectMode;\n\n if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode;\n\n // the point at which write() starts returning false\n // Note: 0 is a valid value, means that we always return false if\n // the entire buffer is not flushed immediately on write()\n var hwm = options.highWaterMark;\n var writableHwm = options.writableHighWaterMark;\n var defaultHwm = this.objectMode ? 16 : 16 * 1024;\n\n if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (writableHwm || writableHwm === 0)) this.highWaterMark = writableHwm;else this.highWaterMark = defaultHwm;\n\n // cast to ints.\n this.highWaterMark = Math.floor(this.highWaterMark);\n\n // if _final has been called\n this.finalCalled = false;\n\n // drain event flag.\n this.needDrain = false;\n // at the start of calling end()\n this.ending = false;\n // when end() has been called, and returned\n this.ended = false;\n // when 'finish' is emitted\n this.finished = false;\n\n // has it been destroyed\n this.destroyed = false;\n\n // should we decode strings into buffers before passing to _write?\n // this is here so that some node-core streams can optimize string\n // handling at a lower level.\n var noDecode = options.decodeStrings === false;\n this.decodeStrings = !noDecode;\n\n // Crypto is kind of old and crusty. Historically, its default string\n // encoding is 'binary' so we have to make this configurable.\n // Everything else in the universe uses 'utf8', though.\n this.defaultEncoding = options.defaultEncoding || 'utf8';\n\n // not an actual buffer we keep track of, but a measurement\n // of how much we're waiting to get pushed to some underlying\n // socket or file.\n this.length = 0;\n\n // a flag to see when we're in the middle of a write.\n this.writing = false;\n\n // when true all writes will be buffered until .uncork() call\n this.corked = 0;\n\n // a flag to be able to tell if the onwrite cb is called immediately,\n // or on a later tick. We set this to true at first, because any\n // actions that shouldn't happen until \"later\" should generally also\n // not happen before the first write call.\n this.sync = true;\n\n // a flag to know if we're processing previously buffered items, which\n // may call the _write() callback in the same tick, so that we don't\n // end up in an overlapped onwrite situation.\n this.bufferProcessing = false;\n\n // the callback that's passed to _write(chunk,cb)\n this.onwrite = function (er) {\n onwrite(stream, er);\n };\n\n // the callback that the user supplies to write(chunk,encoding,cb)\n this.writecb = null;\n\n // the amount that is being written when _write is called.\n this.writelen = 0;\n\n this.bufferedRequest = null;\n this.lastBufferedRequest = null;\n\n // number of pending user-supplied write callbacks\n // this must be 0 before 'finish' can be emitted\n this.pendingcb = 0;\n\n // emit prefinish if the only thing we're waiting for is _write cbs\n // This is relevant for synchronous Transform streams\n this.prefinished = false;\n\n // True if the error was already emitted and should not be thrown again\n this.errorEmitted = false;\n\n // count buffered requests\n this.bufferedRequestCount = 0;\n\n // allocate the first CorkedRequest, there is always\n // one allocated and free to use, and we maintain at most two\n this.corkedRequestsFree = new CorkedRequest(this);\n}\n\nWritableState.prototype.getBuffer = function getBuffer() {\n var current = this.bufferedRequest;\n var out = [];\n while (current) {\n out.push(current);\n current = current.next;\n }\n return out;\n};\n\n(function () {\n try {\n Object.defineProperty(WritableState.prototype, 'buffer', {\n get: internalUtil.deprecate(function () {\n return this.getBuffer();\n }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003')\n });\n } catch (_) {}\n})();\n\n// Test _writableState for inheritance to account for Duplex streams,\n// whose prototype chain only points to Readable.\nvar realHasInstance;\nif (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {\n realHasInstance = Function.prototype[Symbol.hasInstance];\n Object.defineProperty(Writable, Symbol.hasInstance, {\n value: function (object) {\n if (realHasInstance.call(this, object)) return true;\n if (this !== Writable) return false;\n\n return object && object._writableState instanceof WritableState;\n }\n });\n} else {\n realHasInstance = function (object) {\n return object instanceof this;\n };\n}\n\nfunction Writable(options) {\n Duplex = Duplex || require('./_stream_duplex');\n\n // Writable ctor is applied to Duplexes, too.\n // `realHasInstance` is necessary because using plain `instanceof`\n // would return false, as no `_writableState` property is attached.\n\n // Trying to use the custom `instanceof` for Writable here will also break the\n // Node.js LazyTransform implementation, which has a non-trivial getter for\n // `_writableState` that would lead to infinite recursion.\n if (!realHasInstance.call(Writable, this) && !(this instanceof Duplex)) {\n return new Writable(options);\n }\n\n this._writableState = new WritableState(options, this);\n\n // legacy.\n this.writable = true;\n\n if (options) {\n if (typeof options.write === 'function') this._write = options.write;\n\n if (typeof options.writev === 'function') this._writev = options.writev;\n\n if (typeof options.destroy === 'function') this._destroy = options.destroy;\n\n if (typeof options.final === 'function') this._final = options.final;\n }\n\n Stream.call(this);\n}\n\n// Otherwise people can pipe Writable streams, which is just wrong.\nWritable.prototype.pipe = function () {\n this.emit('error', new Error('Cannot pipe, not readable'));\n};\n\nfunction writeAfterEnd(stream, cb) {\n var er = new Error('write after end');\n // TODO: defer error events consistently everywhere, not just the cb\n stream.emit('error', er);\n pna.nextTick(cb, er);\n}\n\n// Checks that a user-supplied chunk is valid, especially for the particular\n// mode the stream is in. Currently this means that `null` is never accepted\n// and undefined/non-string values are only allowed in object mode.\nfunction validChunk(stream, state, chunk, cb) {\n var valid = true;\n var er = false;\n\n if (chunk === null) {\n er = new TypeError('May not write null values to stream');\n } else if (typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n er = new TypeError('Invalid non-string/buffer chunk');\n }\n if (er) {\n stream.emit('error', er);\n pna.nextTick(cb, er);\n valid = false;\n }\n return valid;\n}\n\nWritable.prototype.write = function (chunk, encoding, cb) {\n var state = this._writableState;\n var ret = false;\n var isBuf = !state.objectMode && _isUint8Array(chunk);\n\n if (isBuf && !Buffer.isBuffer(chunk)) {\n chunk = _uint8ArrayToBuffer(chunk);\n }\n\n if (typeof encoding === 'function') {\n cb = encoding;\n encoding = null;\n }\n\n if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;\n\n if (typeof cb !== 'function') cb = nop;\n\n if (state.ended) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) {\n state.pendingcb++;\n ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb);\n }\n\n return ret;\n};\n\nWritable.prototype.cork = function () {\n var state = this._writableState;\n\n state.corked++;\n};\n\nWritable.prototype.uncork = function () {\n var state = this._writableState;\n\n if (state.corked) {\n state.corked--;\n\n if (!state.writing && !state.corked && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);\n }\n};\n\nWritable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {\n // node::ParseEncoding() requires lower case.\n if (typeof encoding === 'string') encoding = encoding.toLowerCase();\n if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new TypeError('Unknown encoding: ' + encoding);\n this._writableState.defaultEncoding = encoding;\n return this;\n};\n\nfunction decodeChunk(state, chunk, encoding) {\n if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {\n chunk = Buffer.from(chunk, encoding);\n }\n return chunk;\n}\n\nObject.defineProperty(Writable.prototype, 'writableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function () {\n return this._writableState.highWaterMark;\n }\n});\n\n// if we're already writing something, then just put this\n// in the queue, and wait our turn. Otherwise, call _write\n// If we return false, then we need a drain event, so set that flag.\nfunction writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {\n if (!isBuf) {\n var newChunk = decodeChunk(state, chunk, encoding);\n if (chunk !== newChunk) {\n isBuf = true;\n encoding = 'buffer';\n chunk = newChunk;\n }\n }\n var len = state.objectMode ? 1 : chunk.length;\n\n state.length += len;\n\n var ret = state.length < state.highWaterMark;\n // we must ensure that previous needDrain will not be reset to false.\n if (!ret) state.needDrain = true;\n\n if (state.writing || state.corked) {\n var last = state.lastBufferedRequest;\n state.lastBufferedRequest = {\n chunk: chunk,\n encoding: encoding,\n isBuf: isBuf,\n callback: cb,\n next: null\n };\n if (last) {\n last.next = state.lastBufferedRequest;\n } else {\n state.bufferedRequest = state.lastBufferedRequest;\n }\n state.bufferedRequestCount += 1;\n } else {\n doWrite(stream, state, false, len, chunk, encoding, cb);\n }\n\n return ret;\n}\n\nfunction doWrite(stream, state, writev, len, chunk, encoding, cb) {\n state.writelen = len;\n state.writecb = cb;\n state.writing = true;\n state.sync = true;\n if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);\n state.sync = false;\n}\n\nfunction onwriteError(stream, state, sync, er, cb) {\n --state.pendingcb;\n\n if (sync) {\n // defer the callback if we are being called synchronously\n // to avoid piling up things on the stack\n pna.nextTick(cb, er);\n // this can emit finish, and it will always happen\n // after error\n pna.nextTick(finishMaybe, stream, state);\n stream._writableState.errorEmitted = true;\n stream.emit('error', er);\n } else {\n // the caller expect this to happen before if\n // it is async\n cb(er);\n stream._writableState.errorEmitted = true;\n stream.emit('error', er);\n // this can emit finish, but finish must\n // always follow error\n finishMaybe(stream, state);\n }\n}\n\nfunction onwriteStateUpdate(state) {\n state.writing = false;\n state.writecb = null;\n state.length -= state.writelen;\n state.writelen = 0;\n}\n\nfunction onwrite(stream, er) {\n var state = stream._writableState;\n var sync = state.sync;\n var cb = state.writecb;\n\n onwriteStateUpdate(state);\n\n if (er) onwriteError(stream, state, sync, er, cb);else {\n // Check if we're actually ready to finish, but don't emit yet\n var finished = needFinish(state);\n\n if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {\n clearBuffer(stream, state);\n }\n\n if (sync) {\n /*<replacement>*/\n asyncWrite(afterWrite, stream, state, finished, cb);\n /*</replacement>*/\n } else {\n afterWrite(stream, state, finished, cb);\n }\n }\n}\n\nfunction afterWrite(stream, state, finished, cb) {\n if (!finished) onwriteDrain(stream, state);\n state.pendingcb--;\n cb();\n finishMaybe(stream, state);\n}\n\n// Must force callback to be called on nextTick, so that we don't\n// emit 'drain' before the write() consumer gets the 'false' return\n// value, and has a chance to attach a 'drain' listener.\nfunction onwriteDrain(stream, state) {\n if (state.length === 0 && state.needDrain) {\n state.needDrain = false;\n stream.emit('drain');\n }\n}\n\n// if there's something in the buffer waiting, then process it\nfunction clearBuffer(stream, state) {\n state.bufferProcessing = true;\n var entry = state.bufferedRequest;\n\n if (stream._writev && entry && entry.next) {\n // Fast case, write everything using _writev()\n var l = state.bufferedRequestCount;\n var buffer = new Array(l);\n var holder = state.corkedRequestsFree;\n holder.entry = entry;\n\n var count = 0;\n var allBuffers = true;\n while (entry) {\n buffer[count] = entry;\n if (!entry.isBuf) allBuffers = false;\n entry = entry.next;\n count += 1;\n }\n buffer.allBuffers = allBuffers;\n\n doWrite(stream, state, true, state.length, buffer, '', holder.finish);\n\n // doWrite is almost always async, defer these to save a bit of time\n // as the hot path ends with doWrite\n state.pendingcb++;\n state.lastBufferedRequest = null;\n if (holder.next) {\n state.corkedRequestsFree = holder.next;\n holder.next = null;\n } else {\n state.corkedRequestsFree = new CorkedRequest(state);\n }\n state.bufferedRequestCount = 0;\n } else {\n // Slow case, write chunks one-by-one\n while (entry) {\n var chunk = entry.chunk;\n var encoding = entry.encoding;\n var cb = entry.callback;\n var len = state.objectMode ? 1 : chunk.length;\n\n doWrite(stream, state, false, len, chunk, encoding, cb);\n entry = entry.next;\n state.bufferedRequestCount--;\n // if we didn't call the onwrite immediately, then\n // it means that we need to wait until it does.\n // also, that means that the chunk and cb are currently\n // being processed, so move the buffer counter past them.\n if (state.writing) {\n break;\n }\n }\n\n if (entry === null) state.lastBufferedRequest = null;\n }\n\n state.bufferedRequest = entry;\n state.bufferProcessing = false;\n}\n\nWritable.prototype._write = function (chunk, encoding, cb) {\n cb(new Error('_write() is not implemented'));\n};\n\nWritable.prototype._writev = null;\n\nWritable.prototype.end = function (chunk, encoding, cb) {\n var state = this._writableState;\n\n if (typeof chunk === 'function') {\n cb = chunk;\n chunk = null;\n encoding = null;\n } else if (typeof encoding === 'function') {\n cb = encoding;\n encoding = null;\n }\n\n if (chunk !== null && chunk !== undefined) this.write(chunk, encoding);\n\n // .end() fully uncorks\n if (state.corked) {\n state.corked = 1;\n this.uncork();\n }\n\n // ignore unnecessary end() calls.\n if (!state.ending) endWritable(this, state, cb);\n};\n\nfunction needFinish(state) {\n return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;\n}\nfunction callFinal(stream, state) {\n stream._final(function (err) {\n state.pendingcb--;\n if (err) {\n stream.emit('error', err);\n }\n state.prefinished = true;\n stream.emit('prefinish');\n finishMaybe(stream, state);\n });\n}\nfunction prefinish(stream, state) {\n if (!state.prefinished && !state.finalCalled) {\n if (typeof stream._final === 'function') {\n state.pendingcb++;\n state.finalCalled = true;\n pna.nextTick(callFinal, stream, state);\n } else {\n state.prefinished = true;\n stream.emit('prefinish');\n }\n }\n}\n\nfunction finishMaybe(stream, state) {\n var need = needFinish(state);\n if (need) {\n prefinish(stream, state);\n if (state.pendingcb === 0) {\n state.finished = true;\n stream.emit('finish');\n }\n }\n return need;\n}\n\nfunction endWritable(stream, state, cb) {\n state.ending = true;\n finishMaybe(stream, state);\n if (cb) {\n if (state.finished) pna.nextTick(cb);else stream.once('finish', cb);\n }\n state.ended = true;\n stream.writable = false;\n}\n\nfunction onCorkedFinish(corkReq, state, err) {\n var entry = corkReq.entry;\n corkReq.entry = null;\n while (entry) {\n var cb = entry.callback;\n state.pendingcb--;\n cb(err);\n entry = entry.next;\n }\n\n // reuse the free corkReq.\n state.corkedRequestsFree.next = corkReq;\n}\n\nObject.defineProperty(Writable.prototype, 'destroyed', {\n get: function () {\n if (this._writableState === undefined) {\n return false;\n }\n return this._writableState.destroyed;\n },\n set: function (value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (!this._writableState) {\n return;\n }\n\n // backward compatibility, the user is explicitly\n // managing destroyed\n this._writableState.destroyed = value;\n }\n});\n\nWritable.prototype.destroy = destroyImpl.destroy;\nWritable.prototype._undestroy = destroyImpl.undestroy;\nWritable.prototype._destroy = function (err, cb) {\n this.end();\n cb(err);\n};","'use strict';\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Buffer = require('safe-buffer').Buffer;\nvar util = require('util');\n\nfunction copyBuffer(src, target, offset) {\n src.copy(target, offset);\n}\n\nmodule.exports = function () {\n function BufferList() {\n _classCallCheck(this, BufferList);\n\n this.head = null;\n this.tail = null;\n this.length = 0;\n }\n\n BufferList.prototype.push = function push(v) {\n var entry = { data: v, next: null };\n if (this.length > 0) this.tail.next = entry;else this.head = entry;\n this.tail = entry;\n ++this.length;\n };\n\n BufferList.prototype.unshift = function unshift(v) {\n var entry = { data: v, next: this.head };\n if (this.length === 0) this.tail = entry;\n this.head = entry;\n ++this.length;\n };\n\n BufferList.prototype.shift = function shift() {\n if (this.length === 0) return;\n var ret = this.head.data;\n if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;\n --this.length;\n return ret;\n };\n\n BufferList.prototype.clear = function clear() {\n this.head = this.tail = null;\n this.length = 0;\n };\n\n BufferList.prototype.join = function join(s) {\n if (this.length === 0) return '';\n var p = this.head;\n var ret = '' + p.data;\n while (p = p.next) {\n ret += s + p.data;\n }return ret;\n };\n\n BufferList.prototype.concat = function concat(n) {\n if (this.length === 0) return Buffer.alloc(0);\n var ret = Buffer.allocUnsafe(n >>> 0);\n var p = this.head;\n var i = 0;\n while (p) {\n copyBuffer(p.data, ret, i);\n i += p.data.length;\n p = p.next;\n }\n return ret;\n };\n\n return BufferList;\n}();\n\nif (util && util.inspect && util.inspect.custom) {\n module.exports.prototype[util.inspect.custom] = function () {\n var obj = util.inspect({ length: this.length });\n return this.constructor.name + ' ' + obj;\n };\n}","'use strict';\n\n/*<replacement>*/\n\nvar pna = require('process-nextick-args');\n/*</replacement>*/\n\n// undocumented cb() API, needed for core, not for public API\nfunction destroy(err, cb) {\n var _this = this;\n\n var readableDestroyed = this._readableState && this._readableState.destroyed;\n var writableDestroyed = this._writableState && this._writableState.destroyed;\n\n if (readableDestroyed || writableDestroyed) {\n if (cb) {\n cb(err);\n } else if (err) {\n if (!this._writableState) {\n pna.nextTick(emitErrorNT, this, err);\n } else if (!this._writableState.errorEmitted) {\n this._writableState.errorEmitted = true;\n pna.nextTick(emitErrorNT, this, err);\n }\n }\n\n return this;\n }\n\n // we set destroyed to true before firing error callbacks in order\n // to make it re-entrance safe in case destroy() is called within callbacks\n\n if (this._readableState) {\n this._readableState.destroyed = true;\n }\n\n // if this is a duplex stream mark the writable part as destroyed as well\n if (this._writableState) {\n this._writableState.destroyed = true;\n }\n\n this._destroy(err || null, function (err) {\n if (!cb && err) {\n if (!_this._writableState) {\n pna.nextTick(emitErrorNT, _this, err);\n } else if (!_this._writableState.errorEmitted) {\n _this._writableState.errorEmitted = true;\n pna.nextTick(emitErrorNT, _this, err);\n }\n } else if (cb) {\n cb(err);\n }\n });\n\n return this;\n}\n\nfunction undestroy() {\n if (this._readableState) {\n this._readableState.destroyed = false;\n this._readableState.reading = false;\n this._readableState.ended = false;\n this._readableState.endEmitted = false;\n }\n\n if (this._writableState) {\n this._writableState.destroyed = false;\n this._writableState.ended = false;\n this._writableState.ending = false;\n this._writableState.finalCalled = false;\n this._writableState.prefinished = false;\n this._writableState.finished = false;\n this._writableState.errorEmitted = false;\n }\n}\n\nfunction emitErrorNT(self, err) {\n self.emit('error', err);\n}\n\nmodule.exports = {\n destroy: destroy,\n undestroy: undestroy\n};","module.exports = require('events').EventEmitter;\n","exports = module.exports = require('./lib/_stream_readable.js');\nexports.Stream = exports;\nexports.Readable = exports;\nexports.Writable = require('./lib/_stream_writable.js');\nexports.Duplex = require('./lib/_stream_duplex.js');\nexports.Transform = require('./lib/_stream_transform.js');\nexports.PassThrough = require('./lib/_stream_passthrough.js');\n","/* eslint-disable node/no-deprecated-api */\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\n// alternative to using Object.keys for old browsers\nfunction copyProps (src, dst) {\n for (var key in src) {\n dst[key] = src[key]\n }\n}\nif (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {\n module.exports = buffer\n} else {\n // Copy properties from require('buffer')\n copyProps(buffer, exports)\n exports.Buffer = SafeBuffer\n}\n\nfunction SafeBuffer (arg, encodingOrOffset, length) {\n return Buffer(arg, encodingOrOffset, length)\n}\n\n// Copy static methods from Buffer\ncopyProps(Buffer, SafeBuffer)\n\nSafeBuffer.from = function (arg, encodingOrOffset, length) {\n if (typeof arg === 'number') {\n throw new TypeError('Argument must not be a number')\n }\n return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.alloc = function (size, fill, encoding) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n var buf = Buffer(size)\n if (fill !== undefined) {\n if (typeof encoding === 'string') {\n buf.fill(fill, encoding)\n } else {\n buf.fill(fill)\n }\n } else {\n buf.fill(0)\n }\n return buf\n}\n\nSafeBuffer.allocUnsafe = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return Buffer(size)\n}\n\nSafeBuffer.allocUnsafeSlow = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return buffer.SlowBuffer(size)\n}\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\n/*<replacement>*/\n\nvar Buffer = require('safe-buffer').Buffer;\n/*</replacement>*/\n\nvar isEncoding = Buffer.isEncoding || function (encoding) {\n encoding = '' + encoding;\n switch (encoding && encoding.toLowerCase()) {\n case 'hex':case 'utf8':case 'utf-8':case 'ascii':case 'binary':case 'base64':case 'ucs2':case 'ucs-2':case 'utf16le':case 'utf-16le':case 'raw':\n return true;\n default:\n return false;\n }\n};\n\nfunction _normalizeEncoding(enc) {\n if (!enc) return 'utf8';\n var retried;\n while (true) {\n switch (enc) {\n case 'utf8':\n case 'utf-8':\n return 'utf8';\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return 'utf16le';\n case 'latin1':\n case 'binary':\n return 'latin1';\n case 'base64':\n case 'ascii':\n case 'hex':\n return enc;\n default:\n if (retried) return; // undefined\n enc = ('' + enc).toLowerCase();\n retried = true;\n }\n }\n};\n\n// Do not cache `Buffer.isEncoding` when checking encoding names as some\n// modules monkey-patch it to support additional encodings\nfunction normalizeEncoding(enc) {\n var nenc = _normalizeEncoding(enc);\n if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc);\n return nenc || enc;\n}\n\n// StringDecoder provides an interface for efficiently splitting a series of\n// buffers into a series of JS strings without breaking apart multi-byte\n// characters.\nexports.StringDecoder = StringDecoder;\nfunction StringDecoder(encoding) {\n this.encoding = normalizeEncoding(encoding);\n var nb;\n switch (this.encoding) {\n case 'utf16le':\n this.text = utf16Text;\n this.end = utf16End;\n nb = 4;\n break;\n case 'utf8':\n this.fillLast = utf8FillLast;\n nb = 4;\n break;\n case 'base64':\n this.text = base64Text;\n this.end = base64End;\n nb = 3;\n break;\n default:\n this.write = simpleWrite;\n this.end = simpleEnd;\n return;\n }\n this.lastNeed = 0;\n this.lastTotal = 0;\n this.lastChar = Buffer.allocUnsafe(nb);\n}\n\nStringDecoder.prototype.write = function (buf) {\n if (buf.length === 0) return '';\n var r;\n var i;\n if (this.lastNeed) {\n r = this.fillLast(buf);\n if (r === undefined) return '';\n i = this.lastNeed;\n this.lastNeed = 0;\n } else {\n i = 0;\n }\n if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i);\n return r || '';\n};\n\nStringDecoder.prototype.end = utf8End;\n\n// Returns only complete characters in a Buffer\nStringDecoder.prototype.text = utf8Text;\n\n// Attempts to complete a partial non-UTF-8 character using bytes from a Buffer\nStringDecoder.prototype.fillLast = function (buf) {\n if (this.lastNeed <= buf.length) {\n buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed);\n return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n }\n buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length);\n this.lastNeed -= buf.length;\n};\n\n// Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a\n// continuation byte. If an invalid byte is detected, -2 is returned.\nfunction utf8CheckByte(byte) {\n if (byte <= 0x7F) return 0;else if (byte >> 5 === 0x06) return 2;else if (byte >> 4 === 0x0E) return 3;else if (byte >> 3 === 0x1E) return 4;\n return byte >> 6 === 0x02 ? -1 : -2;\n}\n\n// Checks at most 3 bytes at the end of a Buffer in order to detect an\n// incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4)\n// needed to complete the UTF-8 character (if applicable) are returned.\nfunction utf8CheckIncomplete(self, buf, i) {\n var j = buf.length - 1;\n if (j < i) return 0;\n var nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) self.lastNeed = nb - 1;\n return nb;\n }\n if (--j < i || nb === -2) return 0;\n nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) self.lastNeed = nb - 2;\n return nb;\n }\n if (--j < i || nb === -2) return 0;\n nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) {\n if (nb === 2) nb = 0;else self.lastNeed = nb - 3;\n }\n return nb;\n }\n return 0;\n}\n\n// Validates as many continuation bytes for a multi-byte UTF-8 character as\n// needed or are available. If we see a non-continuation byte where we expect\n// one, we \"replace\" the validated continuation bytes we've seen so far with\n// a single UTF-8 replacement character ('\\ufffd'), to match v8's UTF-8 decoding\n// behavior. The continuation byte check is included three times in the case\n// where all of the continuation bytes for a character exist in the same buffer.\n// It is also done this way as a slight performance increase instead of using a\n// loop.\nfunction utf8CheckExtraBytes(self, buf, p) {\n if ((buf[0] & 0xC0) !== 0x80) {\n self.lastNeed = 0;\n return '\\ufffd';\n }\n if (self.lastNeed > 1 && buf.length > 1) {\n if ((buf[1] & 0xC0) !== 0x80) {\n self.lastNeed = 1;\n return '\\ufffd';\n }\n if (self.lastNeed > 2 && buf.length > 2) {\n if ((buf[2] & 0xC0) !== 0x80) {\n self.lastNeed = 2;\n return '\\ufffd';\n }\n }\n }\n}\n\n// Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer.\nfunction utf8FillLast(buf) {\n var p = this.lastTotal - this.lastNeed;\n var r = utf8CheckExtraBytes(this, buf, p);\n if (r !== undefined) return r;\n if (this.lastNeed <= buf.length) {\n buf.copy(this.lastChar, p, 0, this.lastNeed);\n return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n }\n buf.copy(this.lastChar, p, 0, buf.length);\n this.lastNeed -= buf.length;\n}\n\n// Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a\n// partial character, the character's bytes are buffered until the required\n// number of bytes are available.\nfunction utf8Text(buf, i) {\n var total = utf8CheckIncomplete(this, buf, i);\n if (!this.lastNeed) return buf.toString('utf8', i);\n this.lastTotal = total;\n var end = buf.length - (total - this.lastNeed);\n buf.copy(this.lastChar, 0, end);\n return buf.toString('utf8', i, end);\n}\n\n// For UTF-8, a replacement character is added when ending on a partial\n// character.\nfunction utf8End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) return r + '\\ufffd';\n return r;\n}\n\n// UTF-16LE typically needs two bytes per character, but even if we have an even\n// number of bytes available, we need to check if we end on a leading/high\n// surrogate. In that case, we need to wait for the next two bytes in order to\n// decode the last character properly.\nfunction utf16Text(buf, i) {\n if ((buf.length - i) % 2 === 0) {\n var r = buf.toString('utf16le', i);\n if (r) {\n var c = r.charCodeAt(r.length - 1);\n if (c >= 0xD800 && c <= 0xDBFF) {\n this.lastNeed = 2;\n this.lastTotal = 4;\n this.lastChar[0] = buf[buf.length - 2];\n this.lastChar[1] = buf[buf.length - 1];\n return r.slice(0, -1);\n }\n }\n return r;\n }\n this.lastNeed = 1;\n this.lastTotal = 2;\n this.lastChar[0] = buf[buf.length - 1];\n return buf.toString('utf16le', i, buf.length - 1);\n}\n\n// For UTF-16LE we do not explicitly append special replacement characters if we\n// end on a partial character, we simply let v8 handle that.\nfunction utf16End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) {\n var end = this.lastTotal - this.lastNeed;\n return r + this.lastChar.toString('utf16le', 0, end);\n }\n return r;\n}\n\nfunction base64Text(buf, i) {\n var n = (buf.length - i) % 3;\n if (n === 0) return buf.toString('base64', i);\n this.lastNeed = 3 - n;\n this.lastTotal = 3;\n if (n === 1) {\n this.lastChar[0] = buf[buf.length - 1];\n } else {\n this.lastChar[0] = buf[buf.length - 2];\n this.lastChar[1] = buf[buf.length - 1];\n }\n return buf.toString('base64', i, buf.length - n);\n}\n\nfunction base64End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed);\n return r;\n}\n\n// Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex)\nfunction simpleWrite(buf) {\n return buf.toString(this.encoding);\n}\n\nfunction simpleEnd(buf) {\n return buf && buf.length ? this.write(buf) : '';\n}","var wrappy = require('wrappy')\nmodule.exports = wrappy(once)\nmodule.exports.strict = wrappy(onceStrict)\n\nonce.proto = once(function () {\n Object.defineProperty(Function.prototype, 'once', {\n value: function () {\n return once(this)\n },\n configurable: true\n })\n\n Object.defineProperty(Function.prototype, 'onceStrict', {\n value: function () {\n return onceStrict(this)\n },\n configurable: true\n })\n})\n\nfunction once (fn) {\n var f = function () {\n if (f.called) return f.value\n f.called = true\n return f.value = fn.apply(this, arguments)\n }\n f.called = false\n return f\n}\n\nfunction onceStrict (fn) {\n var f = function () {\n if (f.called)\n throw new Error(f.onceError)\n f.called = true\n return f.value = fn.apply(this, arguments)\n }\n var name = fn.name || 'Function wrapped with `once`'\n f.onceError = name + \" shouldn't be called more than once\"\n f.called = false\n return f\n}\n","'use strict';\n\nif (typeof process === 'undefined' ||\n !process.version ||\n process.version.indexOf('v0.') === 0 ||\n process.version.indexOf('v1.') === 0 && process.version.indexOf('v1.8.') !== 0) {\n module.exports = { nextTick: nextTick };\n} else {\n module.exports = process\n}\n\nfunction nextTick(fn, arg1, arg2, arg3) {\n if (typeof fn !== 'function') {\n throw new TypeError('\"callback\" argument must be a function');\n }\n var len = arguments.length;\n var args, i;\n switch (len) {\n case 0:\n case 1:\n return process.nextTick(fn);\n case 2:\n return process.nextTick(function afterTickOne() {\n fn.call(null, arg1);\n });\n case 3:\n return process.nextTick(function afterTickTwo() {\n fn.call(null, arg1, arg2);\n });\n case 4:\n return process.nextTick(function afterTickThree() {\n fn.call(null, arg1, arg2, arg3);\n });\n default:\n args = new Array(len - 1);\n i = 0;\n while (i < args.length) {\n args[i++] = arguments[i];\n }\n return process.nextTick(function afterTick() {\n fn.apply(null, args);\n });\n }\n}\n\n","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');\n\nfunction emptyFunction() {}\nfunction emptyFunctionWithReset() {}\nemptyFunctionWithReset.resetWarningCache = emptyFunction;\n\nmodule.exports = function() {\n function shim(props, propName, componentName, location, propFullName, secret) {\n if (secret === ReactPropTypesSecret) {\n // It is still safe when called from React.\n return;\n }\n var err = new Error(\n 'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +\n 'Use PropTypes.checkPropTypes() to call them. ' +\n 'Read more at http://fb.me/use-check-prop-types'\n );\n err.name = 'Invariant Violation';\n throw err;\n };\n shim.isRequired = shim;\n function getShim() {\n return shim;\n };\n // Important!\n // Keep this list in sync with production version in `./factoryWithTypeCheckers.js`.\n var ReactPropTypes = {\n array: shim,\n bigint: shim,\n bool: shim,\n func: shim,\n number: shim,\n object: shim,\n string: shim,\n symbol: shim,\n\n any: shim,\n arrayOf: getShim,\n element: shim,\n elementType: shim,\n instanceOf: getShim,\n node: shim,\n objectOf: getShim,\n oneOf: getShim,\n oneOfType: getShim,\n shape: getShim,\n exact: getShim,\n\n checkPropTypes: emptyFunctionWithReset,\n resetWarningCache: emptyFunction\n };\n\n ReactPropTypes.PropTypes = ReactPropTypes;\n\n return ReactPropTypes;\n};\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nif (process.env.NODE_ENV !== 'production') {\n var ReactIs = require('react-is');\n\n // By explicitly using `prop-types` you are opting into new development behavior.\n // http://fb.me/prop-types-in-prod\n var throwOnDirectAccess = true;\n module.exports = require('./factoryWithTypeCheckers')(ReactIs.isElement, throwOnDirectAccess);\n} else {\n // By explicitly using `prop-types` you are opting into new production behavior.\n // http://fb.me/prop-types-in-prod\n module.exports = require('./factoryWithThrowingShims')();\n}\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\n\nmodule.exports = ReactPropTypesSecret;\n","var once = require('once')\nvar eos = require('end-of-stream')\nvar fs = require('fs') // we only need fs to get the ReadStream and WriteStream prototypes\n\nvar noop = function () {}\nvar ancient = /^v?\\.0/.test(process.version)\n\nvar isFn = function (fn) {\n return typeof fn === 'function'\n}\n\nvar isFS = function (stream) {\n if (!ancient) return false // newer node version do not need to care about fs is a special way\n if (!fs) return false // browser\n return (stream instanceof (fs.ReadStream || noop) || stream instanceof (fs.WriteStream || noop)) && isFn(stream.close)\n}\n\nvar isRequest = function (stream) {\n return stream.setHeader && isFn(stream.abort)\n}\n\nvar destroyer = function (stream, reading, writing, callback) {\n callback = once(callback)\n\n var closed = false\n stream.on('close', function () {\n closed = true\n })\n\n eos(stream, {readable: reading, writable: writing}, function (err) {\n if (err) return callback(err)\n closed = true\n callback()\n })\n\n var destroyed = false\n return function (err) {\n if (closed) return\n if (destroyed) return\n destroyed = true\n\n if (isFS(stream)) return stream.close(noop) // use close for fs streams to avoid fd leaks\n if (isRequest(stream)) return stream.abort() // request.destroy just do .end - .abort is what we want\n\n if (isFn(stream.destroy)) return stream.destroy()\n\n callback(err || new Error('stream was destroyed'))\n }\n}\n\nvar call = function (fn) {\n fn()\n}\n\nvar pipe = function (from, to) {\n return from.pipe(to)\n}\n\nvar pump = function () {\n var streams = Array.prototype.slice.call(arguments)\n var callback = isFn(streams[streams.length - 1] || noop) && streams.pop() || noop\n\n if (Array.isArray(streams[0])) streams = streams[0]\n if (streams.length < 2) throw new Error('pump requires two streams per minimum')\n\n var error\n var destroys = streams.map(function (stream, i) {\n var reading = i < streams.length - 1\n var writing = i > 0\n return destroyer(stream, reading, writing, function (err) {\n if (!error) error = err\n if (err) destroys.forEach(call)\n if (reading) return\n destroys.forEach(call)\n callback(error)\n })\n })\n\n return streams.reduce(pipe)\n}\n\nmodule.exports = pump\n","/**\n * @license React\n * react-dom-server-legacy.browser.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var aa=require(\"react\");function l(a){for(var b=\"https://reactjs.org/docs/error-decoder.html?invariant=\"+a,c=1;c<arguments.length;c++)b+=\"&args[]=\"+encodeURIComponent(arguments[c]);return\"Minified React error #\"+a+\"; visit \"+b+\" for the full message or use the non-minified dev environment for full errors and additional helpful warnings.\"}\nvar p=Object.prototype.hasOwnProperty,fa=/^[:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD][:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$/,ha={},ia={};\nfunction ja(a){if(p.call(ia,a))return!0;if(p.call(ha,a))return!1;if(fa.test(a))return ia[a]=!0;ha[a]=!0;return!1}function r(a,b,c,d,f,e,g){this.acceptsBooleans=2===b||3===b||4===b;this.attributeName=d;this.attributeNamespace=f;this.mustUseProperty=c;this.propertyName=a;this.type=b;this.sanitizeURL=e;this.removeEmptyString=g}var t={};\n\"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style\".split(\" \").forEach(function(a){t[a]=new r(a,0,!1,a,null,!1,!1)});[[\"acceptCharset\",\"accept-charset\"],[\"className\",\"class\"],[\"htmlFor\",\"for\"],[\"httpEquiv\",\"http-equiv\"]].forEach(function(a){var b=a[0];t[b]=new r(b,1,!1,a[1],null,!1,!1)});[\"contentEditable\",\"draggable\",\"spellCheck\",\"value\"].forEach(function(a){t[a]=new r(a,2,!1,a.toLowerCase(),null,!1,!1)});\n[\"autoReverse\",\"externalResourcesRequired\",\"focusable\",\"preserveAlpha\"].forEach(function(a){t[a]=new r(a,2,!1,a,null,!1,!1)});\"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope\".split(\" \").forEach(function(a){t[a]=new r(a,3,!1,a.toLowerCase(),null,!1,!1)});\n[\"checked\",\"multiple\",\"muted\",\"selected\"].forEach(function(a){t[a]=new r(a,3,!0,a,null,!1,!1)});[\"capture\",\"download\"].forEach(function(a){t[a]=new r(a,4,!1,a,null,!1,!1)});[\"cols\",\"rows\",\"size\",\"span\"].forEach(function(a){t[a]=new r(a,6,!1,a,null,!1,!1)});[\"rowSpan\",\"start\"].forEach(function(a){t[a]=new r(a,5,!1,a.toLowerCase(),null,!1,!1)});var ka=/[\\-:]([a-z])/g;function la(a){return a[1].toUpperCase()}\n\"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height\".split(\" \").forEach(function(a){var b=a.replace(ka,\nla);t[b]=new r(b,1,!1,a,null,!1,!1)});\"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type\".split(\" \").forEach(function(a){var b=a.replace(ka,la);t[b]=new r(b,1,!1,a,\"http://www.w3.org/1999/xlink\",!1,!1)});[\"xml:base\",\"xml:lang\",\"xml:space\"].forEach(function(a){var b=a.replace(ka,la);t[b]=new r(b,1,!1,a,\"http://www.w3.org/XML/1998/namespace\",!1,!1)});[\"tabIndex\",\"crossOrigin\"].forEach(function(a){t[a]=new r(a,1,!1,a.toLowerCase(),null,!1,!1)});\nt.xlinkHref=new r(\"xlinkHref\",1,!1,\"xlink:href\",\"http://www.w3.org/1999/xlink\",!0,!1);[\"src\",\"href\",\"action\",\"formAction\"].forEach(function(a){t[a]=new r(a,1,!1,a.toLowerCase(),null,!0,!0)});\nvar u={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,\nfillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},ma=[\"Webkit\",\"ms\",\"Moz\",\"O\"];Object.keys(u).forEach(function(a){ma.forEach(function(b){b=b+a.charAt(0).toUpperCase()+a.substring(1);u[b]=u[a]})});var na=/[\"'&<>]/;\nfunction v(a){if(\"boolean\"===typeof a||\"number\"===typeof a)return\"\"+a;a=\"\"+a;var b=na.exec(a);if(b){var c=\"\",d,f=0;for(d=b.index;d<a.length;d++){switch(a.charCodeAt(d)){case 34:b=\""\";break;case 38:b=\"&\";break;case 39:b=\"'\";break;case 60:b=\"<\";break;case 62:b=\">\";break;default:continue}f!==d&&(c+=a.substring(f,d));f=d+1;c+=b}a=f!==d?c+a.substring(f,d):c}return a}var oa=/([A-Z])/g,pa=/^ms-/,qa=Array.isArray;function w(a,b){return{insertionMode:a,selectedValue:b}}\nfunction ra(a,b,c){switch(b){case \"select\":return w(1,null!=c.value?c.value:c.defaultValue);case \"svg\":return w(2,null);case \"math\":return w(3,null);case \"foreignObject\":return w(1,null);case \"table\":return w(4,null);case \"thead\":case \"tbody\":case \"tfoot\":return w(5,null);case \"colgroup\":return w(7,null);case \"tr\":return w(6,null)}return 4<=a.insertionMode||0===a.insertionMode?w(1,null):a}var sa=new Map;\nfunction ta(a,b,c){if(\"object\"!==typeof c)throw Error(l(62));b=!0;for(var d in c)if(p.call(c,d)){var f=c[d];if(null!=f&&\"boolean\"!==typeof f&&\"\"!==f){if(0===d.indexOf(\"--\")){var e=v(d);f=v((\"\"+f).trim())}else{e=d;var g=sa.get(e);void 0!==g?e=g:(g=v(e.replace(oa,\"-$1\").toLowerCase().replace(pa,\"-ms-\")),sa.set(e,g),e=g);f=\"number\"===typeof f?0===f||p.call(u,d)?\"\"+f:f+\"px\":v((\"\"+f).trim())}b?(b=!1,a.push(' style=\"',e,\":\",f)):a.push(\";\",e,\":\",f)}}b||a.push('\"')}\nfunction x(a,b,c,d){switch(c){case \"style\":ta(a,b,d);return;case \"defaultValue\":case \"defaultChecked\":case \"innerHTML\":case \"suppressContentEditableWarning\":case \"suppressHydrationWarning\":return}if(!(2<c.length)||\"o\"!==c[0]&&\"O\"!==c[0]||\"n\"!==c[1]&&\"N\"!==c[1])if(b=t.hasOwnProperty(c)?t[c]:null,null!==b){switch(typeof d){case \"function\":case \"symbol\":return;case \"boolean\":if(!b.acceptsBooleans)return}c=b.attributeName;switch(b.type){case 3:d&&a.push(\" \",c,'=\"\"');break;case 4:!0===d?a.push(\" \",c,'=\"\"'):\n!1!==d&&a.push(\" \",c,'=\"',v(d),'\"');break;case 5:isNaN(d)||a.push(\" \",c,'=\"',v(d),'\"');break;case 6:!isNaN(d)&&1<=d&&a.push(\" \",c,'=\"',v(d),'\"');break;default:b.sanitizeURL&&(d=\"\"+d),a.push(\" \",c,'=\"',v(d),'\"')}}else if(ja(c)){switch(typeof d){case \"function\":case \"symbol\":return;case \"boolean\":if(b=c.toLowerCase().slice(0,5),\"data-\"!==b&&\"aria-\"!==b)return}a.push(\" \",c,'=\"',v(d),'\"')}}\nfunction y(a,b,c){if(null!=b){if(null!=c)throw Error(l(60));if(\"object\"!==typeof b||!(\"__html\"in b))throw Error(l(61));b=b.__html;null!==b&&void 0!==b&&a.push(\"\"+b)}}function ua(a){var b=\"\";aa.Children.forEach(a,function(a){null!=a&&(b+=a)});return b}\nfunction va(a,b,c,d){a.push(A(c));var f=c=null,e;for(e in b)if(p.call(b,e)){var g=b[e];if(null!=g)switch(e){case \"children\":c=g;break;case \"dangerouslySetInnerHTML\":f=g;break;default:x(a,d,e,g)}}a.push(\">\");y(a,f,c);return\"string\"===typeof c?(a.push(v(c)),null):c}var wa=/^[a-zA-Z][a-zA-Z:_\\.\\-\\d]*$/,xa=new Map;function A(a){var b=xa.get(a);if(void 0===b){if(!wa.test(a))throw Error(l(65,a));b=\"<\"+a;xa.set(a,b)}return b}\nfunction ya(a,b,c,d,f){switch(b){case \"select\":a.push(A(\"select\"));var e=null,g=null;for(n in c)if(p.call(c,n)){var h=c[n];if(null!=h)switch(n){case \"children\":e=h;break;case \"dangerouslySetInnerHTML\":g=h;break;case \"defaultValue\":case \"value\":break;default:x(a,d,n,h)}}a.push(\">\");y(a,g,e);return e;case \"option\":g=f.selectedValue;a.push(A(\"option\"));var k=h=null,m=null;var n=null;for(e in c)if(p.call(c,e)){var q=c[e];if(null!=q)switch(e){case \"children\":h=q;break;case \"selected\":m=q;break;case \"dangerouslySetInnerHTML\":n=\nq;break;case \"value\":k=q;default:x(a,d,e,q)}}if(null!=g)if(c=null!==k?\"\"+k:ua(h),qa(g))for(d=0;d<g.length;d++){if(\"\"+g[d]===c){a.push(' selected=\"\"');break}}else\"\"+g===c&&a.push(' selected=\"\"');else m&&a.push(' selected=\"\"');a.push(\">\");y(a,n,h);return h;case \"textarea\":a.push(A(\"textarea\"));n=g=e=null;for(h in c)if(p.call(c,h)&&(k=c[h],null!=k))switch(h){case \"children\":n=k;break;case \"value\":e=k;break;case \"defaultValue\":g=k;break;case \"dangerouslySetInnerHTML\":throw Error(l(91));default:x(a,d,\nh,k)}null===e&&null!==g&&(e=g);a.push(\">\");if(null!=n){if(null!=e)throw Error(l(92));if(qa(n)&&1<n.length)throw Error(l(93));e=\"\"+n}\"string\"===typeof e&&\"\\n\"===e[0]&&a.push(\"\\n\");null!==e&&a.push(v(\"\"+e));return null;case \"input\":a.push(A(\"input\"));k=n=h=e=null;for(g in c)if(p.call(c,g)&&(m=c[g],null!=m))switch(g){case \"children\":case \"dangerouslySetInnerHTML\":throw Error(l(399,\"input\"));case \"defaultChecked\":k=m;break;case \"defaultValue\":h=m;break;case \"checked\":n=m;break;case \"value\":e=m;break;\ndefault:x(a,d,g,m)}null!==n?x(a,d,\"checked\",n):null!==k&&x(a,d,\"checked\",k);null!==e?x(a,d,\"value\",e):null!==h&&x(a,d,\"value\",h);a.push(\"/>\");return null;case \"menuitem\":a.push(A(\"menuitem\"));for(var C in c)if(p.call(c,C)&&(e=c[C],null!=e))switch(C){case \"children\":case \"dangerouslySetInnerHTML\":throw Error(l(400));default:x(a,d,C,e)}a.push(\">\");return null;case \"title\":a.push(A(\"title\"));e=null;for(q in c)if(p.call(c,q)&&(g=c[q],null!=g))switch(q){case \"children\":e=g;break;case \"dangerouslySetInnerHTML\":throw Error(l(434));\ndefault:x(a,d,q,g)}a.push(\">\");return e;case \"listing\":case \"pre\":a.push(A(b));g=e=null;for(k in c)if(p.call(c,k)&&(h=c[k],null!=h))switch(k){case \"children\":e=h;break;case \"dangerouslySetInnerHTML\":g=h;break;default:x(a,d,k,h)}a.push(\">\");if(null!=g){if(null!=e)throw Error(l(60));if(\"object\"!==typeof g||!(\"__html\"in g))throw Error(l(61));c=g.__html;null!==c&&void 0!==c&&(\"string\"===typeof c&&0<c.length&&\"\\n\"===c[0]?a.push(\"\\n\",c):a.push(\"\"+c))}\"string\"===typeof e&&\"\\n\"===e[0]&&a.push(\"\\n\");return e;\ncase \"area\":case \"base\":case \"br\":case \"col\":case \"embed\":case \"hr\":case \"img\":case \"keygen\":case \"link\":case \"meta\":case \"param\":case \"source\":case \"track\":case \"wbr\":a.push(A(b));for(var D in c)if(p.call(c,D)&&(e=c[D],null!=e))switch(D){case \"children\":case \"dangerouslySetInnerHTML\":throw Error(l(399,b));default:x(a,d,D,e)}a.push(\"/>\");return null;case \"annotation-xml\":case \"color-profile\":case \"font-face\":case \"font-face-src\":case \"font-face-uri\":case \"font-face-format\":case \"font-face-name\":case \"missing-glyph\":return va(a,\nc,b,d);case \"html\":return 0===f.insertionMode&&a.push(\"<!DOCTYPE html>\"),va(a,c,b,d);default:if(-1===b.indexOf(\"-\")&&\"string\"!==typeof c.is)return va(a,c,b,d);a.push(A(b));g=e=null;for(m in c)if(p.call(c,m)&&(h=c[m],null!=h))switch(m){case \"children\":e=h;break;case \"dangerouslySetInnerHTML\":g=h;break;case \"style\":ta(a,d,h);break;case \"suppressContentEditableWarning\":case \"suppressHydrationWarning\":break;default:ja(m)&&\"function\"!==typeof h&&\"symbol\"!==typeof h&&a.push(\" \",m,'=\"',v(h),'\"')}a.push(\">\");\ny(a,g,e);return e}}function za(a,b,c){a.push('\\x3c!--$?--\\x3e<template id=\"');if(null===c)throw Error(l(395));a.push(c);return a.push('\"></template>')}\nfunction Aa(a,b,c,d){switch(c.insertionMode){case 0:case 1:return a.push('<div hidden id=\"'),a.push(b.segmentPrefix),b=d.toString(16),a.push(b),a.push('\">');case 2:return a.push('<svg aria-hidden=\"true\" style=\"display:none\" id=\"'),a.push(b.segmentPrefix),b=d.toString(16),a.push(b),a.push('\">');case 3:return a.push('<math aria-hidden=\"true\" style=\"display:none\" id=\"'),a.push(b.segmentPrefix),b=d.toString(16),a.push(b),a.push('\">');case 4:return a.push('<table hidden id=\"'),a.push(b.segmentPrefix),\nb=d.toString(16),a.push(b),a.push('\">');case 5:return a.push('<table hidden><tbody id=\"'),a.push(b.segmentPrefix),b=d.toString(16),a.push(b),a.push('\">');case 6:return a.push('<table hidden><tr id=\"'),a.push(b.segmentPrefix),b=d.toString(16),a.push(b),a.push('\">');case 7:return a.push('<table hidden><colgroup id=\"'),a.push(b.segmentPrefix),b=d.toString(16),a.push(b),a.push('\">');default:throw Error(l(397));}}\nfunction Ba(a,b){switch(b.insertionMode){case 0:case 1:return a.push(\"</div>\");case 2:return a.push(\"</svg>\");case 3:return a.push(\"</math>\");case 4:return a.push(\"</table>\");case 5:return a.push(\"</tbody></table>\");case 6:return a.push(\"</tr></table>\");case 7:return a.push(\"</colgroup></table>\");default:throw Error(l(397));}}var Ca=/[<\\u2028\\u2029]/g;\nfunction Da(a){return JSON.stringify(a).replace(Ca,function(a){switch(a){case \"<\":return\"\\\\u003c\";case \"\\u2028\":return\"\\\\u2028\";case \"\\u2029\":return\"\\\\u2029\";default:throw Error(\"escapeJSStringsForInstructionScripts encountered a match it does not know how to replace. this means the match regex and the replacement characters are no longer in sync. This is a bug in React\");}})}\nfunction Ea(a,b){b=void 0===b?\"\":b;return{bootstrapChunks:[],startInlineScript:\"<script>\",placeholderPrefix:b+\"P:\",segmentPrefix:b+\"S:\",boundaryPrefix:b+\"B:\",idPrefix:b,nextSuspenseID:0,sentCompleteSegmentFunction:!1,sentCompleteBoundaryFunction:!1,sentClientRenderFunction:!1,generateStaticMarkup:a}}function Fa(a,b,c,d){if(c.generateStaticMarkup)return a.push(v(b)),!1;\"\"===b?a=d:(d&&a.push(\"\\x3c!-- --\\x3e\"),a.push(v(b)),a=!0);return a}\nvar B=Object.assign,Ga=Symbol.for(\"react.element\"),Ha=Symbol.for(\"react.portal\"),Ia=Symbol.for(\"react.fragment\"),Ja=Symbol.for(\"react.strict_mode\"),Ka=Symbol.for(\"react.profiler\"),La=Symbol.for(\"react.provider\"),Ma=Symbol.for(\"react.context\"),Na=Symbol.for(\"react.forward_ref\"),Oa=Symbol.for(\"react.suspense\"),Pa=Symbol.for(\"react.suspense_list\"),Qa=Symbol.for(\"react.memo\"),Ra=Symbol.for(\"react.lazy\"),Sa=Symbol.for(\"react.scope\"),Ta=Symbol.for(\"react.debug_trace_mode\"),Ua=Symbol.for(\"react.legacy_hidden\"),\nVa=Symbol.for(\"react.default_value\"),Wa=Symbol.iterator;\nfunction Xa(a){if(null==a)return null;if(\"function\"===typeof a)return a.displayName||a.name||null;if(\"string\"===typeof a)return a;switch(a){case Ia:return\"Fragment\";case Ha:return\"Portal\";case Ka:return\"Profiler\";case Ja:return\"StrictMode\";case Oa:return\"Suspense\";case Pa:return\"SuspenseList\"}if(\"object\"===typeof a)switch(a.$$typeof){case Ma:return(a.displayName||\"Context\")+\".Consumer\";case La:return(a._context.displayName||\"Context\")+\".Provider\";case Na:var b=a.render;a=a.displayName;a||(a=b.displayName||\nb.name||\"\",a=\"\"!==a?\"ForwardRef(\"+a+\")\":\"ForwardRef\");return a;case Qa:return b=a.displayName||null,null!==b?b:Xa(a.type)||\"Memo\";case Ra:b=a._payload;a=a._init;try{return Xa(a(b))}catch(c){}}return null}var Ya={};function Za(a,b){a=a.contextTypes;if(!a)return Ya;var c={},d;for(d in a)c[d]=b[d];return c}var E=null;\nfunction F(a,b){if(a!==b){a.context._currentValue2=a.parentValue;a=a.parent;var c=b.parent;if(null===a){if(null!==c)throw Error(l(401));}else{if(null===c)throw Error(l(401));F(a,c)}b.context._currentValue2=b.value}}function $a(a){a.context._currentValue2=a.parentValue;a=a.parent;null!==a&&$a(a)}function ab(a){var b=a.parent;null!==b&&ab(b);a.context._currentValue2=a.value}\nfunction bb(a,b){a.context._currentValue2=a.parentValue;a=a.parent;if(null===a)throw Error(l(402));a.depth===b.depth?F(a,b):bb(a,b)}function cb(a,b){var c=b.parent;if(null===c)throw Error(l(402));a.depth===c.depth?F(a,c):cb(a,c);b.context._currentValue2=b.value}function G(a){var b=E;b!==a&&(null===b?ab(a):null===a?$a(b):b.depth===a.depth?F(b,a):b.depth>a.depth?bb(b,a):cb(b,a),E=a)}\nvar db={isMounted:function(){return!1},enqueueSetState:function(a,b){a=a._reactInternals;null!==a.queue&&a.queue.push(b)},enqueueReplaceState:function(a,b){a=a._reactInternals;a.replace=!0;a.queue=[b]},enqueueForceUpdate:function(){}};\nfunction eb(a,b,c,d){var f=void 0!==a.state?a.state:null;a.updater=db;a.props=c;a.state=f;var e={queue:[],replace:!1};a._reactInternals=e;var g=b.contextType;a.context=\"object\"===typeof g&&null!==g?g._currentValue2:d;g=b.getDerivedStateFromProps;\"function\"===typeof g&&(g=g(c,f),f=null===g||void 0===g?f:B({},f,g),a.state=f);if(\"function\"!==typeof b.getDerivedStateFromProps&&\"function\"!==typeof a.getSnapshotBeforeUpdate&&(\"function\"===typeof a.UNSAFE_componentWillMount||\"function\"===typeof a.componentWillMount))if(b=\na.state,\"function\"===typeof a.componentWillMount&&a.componentWillMount(),\"function\"===typeof a.UNSAFE_componentWillMount&&a.UNSAFE_componentWillMount(),b!==a.state&&db.enqueueReplaceState(a,a.state,null),null!==e.queue&&0<e.queue.length)if(b=e.queue,g=e.replace,e.queue=null,e.replace=!1,g&&1===b.length)a.state=b[0];else{e=g?b[0]:a.state;f=!0;for(g=g?1:0;g<b.length;g++){var h=b[g];h=\"function\"===typeof h?h.call(a,e,c,d):h;null!=h&&(f?(f=!1,e=B({},e,h)):B(e,h))}a.state=e}else e.queue=null}\nvar fb={id:1,overflow:\"\"};function gb(a,b,c){var d=a.id;a=a.overflow;var f=32-H(d)-1;d&=~(1<<f);c+=1;var e=32-H(b)+f;if(30<e){var g=f-f%5;e=(d&(1<<g)-1).toString(32);d>>=g;f-=g;return{id:1<<32-H(b)+f|c<<f|d,overflow:e+a}}return{id:1<<e|c<<f|d,overflow:a}}var H=Math.clz32?Math.clz32:hb,ib=Math.log,jb=Math.LN2;function hb(a){a>>>=0;return 0===a?32:31-(ib(a)/jb|0)|0}function kb(a,b){return a===b&&(0!==a||1/a===1/b)||a!==a&&b!==b}\nvar lb=\"function\"===typeof Object.is?Object.is:kb,I=null,ob=null,J=null,K=null,L=!1,M=!1,N=0,O=null,P=0;function Q(){if(null===I)throw Error(l(321));return I}function pb(){if(0<P)throw Error(l(312));return{memoizedState:null,queue:null,next:null}}function qb(){null===K?null===J?(L=!1,J=K=pb()):(L=!0,K=J):null===K.next?(L=!1,K=K.next=pb()):(L=!0,K=K.next);return K}function rb(){ob=I=null;M=!1;J=null;P=0;K=O=null}function sb(a,b){return\"function\"===typeof b?b(a):b}\nfunction tb(a,b,c){I=Q();K=qb();if(L){var d=K.queue;b=d.dispatch;if(null!==O&&(c=O.get(d),void 0!==c)){O.delete(d);d=K.memoizedState;do d=a(d,c.action),c=c.next;while(null!==c);K.memoizedState=d;return[d,b]}return[K.memoizedState,b]}a=a===sb?\"function\"===typeof b?b():b:void 0!==c?c(b):b;K.memoizedState=a;a=K.queue={last:null,dispatch:null};a=a.dispatch=ub.bind(null,I,a);return[K.memoizedState,a]}\nfunction vb(a,b){I=Q();K=qb();b=void 0===b?null:b;if(null!==K){var c=K.memoizedState;if(null!==c&&null!==b){var d=c[1];a:if(null===d)d=!1;else{for(var f=0;f<d.length&&f<b.length;f++)if(!lb(b[f],d[f])){d=!1;break a}d=!0}if(d)return c[0]}}a=a();K.memoizedState=[a,b];return a}function ub(a,b,c){if(25<=P)throw Error(l(301));if(a===I)if(M=!0,a={action:c,next:null},null===O&&(O=new Map),c=O.get(b),void 0===c)O.set(b,a);else{for(b=c;null!==b.next;)b=b.next;b.next=a}}function wb(){throw Error(l(394));}\nfunction R(){}\nvar xb={readContext:function(a){return a._currentValue2},useContext:function(a){Q();return a._currentValue2},useMemo:vb,useReducer:tb,useRef:function(a){I=Q();K=qb();var b=K.memoizedState;return null===b?(a={current:a},K.memoizedState=a):b},useState:function(a){return tb(sb,a)},useInsertionEffect:R,useLayoutEffect:function(){},useCallback:function(a,b){return vb(function(){return a},b)},useImperativeHandle:R,useEffect:R,useDebugValue:R,useDeferredValue:function(a){Q();return a},useTransition:function(){Q();return[!1,\nwb]},useId:function(){var a=ob.treeContext;var b=a.overflow;a=a.id;a=(a&~(1<<32-H(a)-1)).toString(32)+b;var c=S;if(null===c)throw Error(l(404));b=N++;a=\":\"+c.idPrefix+\"R\"+a;0<b&&(a+=\"H\"+b.toString(32));return a+\":\"},useMutableSource:function(a,b){Q();return b(a._source)},useSyncExternalStore:function(a,b,c){if(void 0===c)throw Error(l(407));return c()}},S=null,yb=aa.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentDispatcher;function zb(a){console.error(a);return null}\nfunction T(){}\nfunction Ab(a,b,c,d,f,e,g,h,k){var m=[],n=new Set;b={destination:null,responseState:b,progressiveChunkSize:void 0===d?12800:d,status:0,fatalError:null,nextSegmentId:0,allPendingTasks:0,pendingRootTasks:0,completedRootSegment:null,abortableTasks:n,pingedTasks:m,clientRenderedBoundaries:[],completedBoundaries:[],partialBoundaries:[],onError:void 0===f?zb:f,onAllReady:void 0===e?T:e,onShellReady:void 0===g?T:g,onShellError:void 0===h?T:h,onFatalError:void 0===k?T:k};c=U(b,0,null,c,!1,!1);c.parentFlushed=\n!0;a=Bb(b,a,null,c,n,Ya,null,fb);m.push(a);return b}function Bb(a,b,c,d,f,e,g,h){a.allPendingTasks++;null===c?a.pendingRootTasks++:c.pendingTasks++;var k={node:b,ping:function(){var b=a.pingedTasks;b.push(k);1===b.length&&Cb(a)},blockedBoundary:c,blockedSegment:d,abortSet:f,legacyContext:e,context:g,treeContext:h};f.add(k);return k}function U(a,b,c,d,f,e){return{status:0,id:-1,index:b,parentFlushed:!1,chunks:[],children:[],formatContext:d,boundary:c,lastPushedText:f,textEmbedded:e}}\nfunction V(a,b){a=a.onError(b);if(null!=a&&\"string\"!==typeof a)throw Error('onError returned something with a type other than \"string\". onError should return a string and may return null or undefined but must not return anything else. It received something of type \"'+typeof a+'\" instead');return a}function W(a,b){var c=a.onShellError;c(b);c=a.onFatalError;c(b);null!==a.destination?(a.status=2,a.destination.destroy(b)):(a.status=1,a.fatalError=b)}\nfunction Db(a,b,c,d,f){I={};ob=b;N=0;for(a=c(d,f);M;)M=!1,N=0,P+=1,K=null,a=c(d,f);rb();return a}function Eb(a,b,c,d){var f=c.render(),e=d.childContextTypes;if(null!==e&&void 0!==e){var g=b.legacyContext;if(\"function\"!==typeof c.getChildContext)d=g;else{c=c.getChildContext();for(var h in c)if(!(h in e))throw Error(l(108,Xa(d)||\"Unknown\",h));d=B({},g,c)}b.legacyContext=d;X(a,b,f);b.legacyContext=g}else X(a,b,f)}\nfunction Fb(a,b){if(a&&a.defaultProps){b=B({},b);a=a.defaultProps;for(var c in a)void 0===b[c]&&(b[c]=a[c]);return b}return b}\nfunction Gb(a,b,c,d,f){if(\"function\"===typeof c)if(c.prototype&&c.prototype.isReactComponent){f=Za(c,b.legacyContext);var e=c.contextType;e=new c(d,\"object\"===typeof e&&null!==e?e._currentValue2:f);eb(e,c,d,f);Eb(a,b,e,c)}else{e=Za(c,b.legacyContext);f=Db(a,b,c,d,e);var g=0!==N;if(\"object\"===typeof f&&null!==f&&\"function\"===typeof f.render&&void 0===f.$$typeof)eb(f,c,d,e),Eb(a,b,f,c);else if(g){d=b.treeContext;b.treeContext=gb(d,1,0);try{X(a,b,f)}finally{b.treeContext=d}}else X(a,b,f)}else if(\"string\"===\ntypeof c){f=b.blockedSegment;e=ya(f.chunks,c,d,a.responseState,f.formatContext);f.lastPushedText=!1;g=f.formatContext;f.formatContext=ra(g,c,d);Hb(a,b,e);f.formatContext=g;switch(c){case \"area\":case \"base\":case \"br\":case \"col\":case \"embed\":case \"hr\":case \"img\":case \"input\":case \"keygen\":case \"link\":case \"meta\":case \"param\":case \"source\":case \"track\":case \"wbr\":break;default:f.chunks.push(\"</\",c,\">\")}f.lastPushedText=!1}else{switch(c){case Ua:case Ta:case Ja:case Ka:case Ia:X(a,b,d.children);return;\ncase Pa:X(a,b,d.children);return;case Sa:throw Error(l(343));case Oa:a:{c=b.blockedBoundary;f=b.blockedSegment;e=d.fallback;d=d.children;g=new Set;var h={id:null,rootSegmentID:-1,parentFlushed:!1,pendingTasks:0,forceClientRender:!1,completedSegments:[],byteSize:0,fallbackAbortableTasks:g,errorDigest:null},k=U(a,f.chunks.length,h,f.formatContext,!1,!1);f.children.push(k);f.lastPushedText=!1;var m=U(a,0,null,f.formatContext,!1,!1);m.parentFlushed=!0;b.blockedBoundary=h;b.blockedSegment=m;try{if(Hb(a,\nb,d),a.responseState.generateStaticMarkup||m.lastPushedText&&m.textEmbedded&&m.chunks.push(\"\\x3c!-- --\\x3e\"),m.status=1,Y(h,m),0===h.pendingTasks)break a}catch(n){m.status=4,h.forceClientRender=!0,h.errorDigest=V(a,n)}finally{b.blockedBoundary=c,b.blockedSegment=f}b=Bb(a,e,c,k,g,b.legacyContext,b.context,b.treeContext);a.pingedTasks.push(b)}return}if(\"object\"===typeof c&&null!==c)switch(c.$$typeof){case Na:d=Db(a,b,c.render,d,f);if(0!==N){c=b.treeContext;b.treeContext=gb(c,1,0);try{X(a,b,d)}finally{b.treeContext=\nc}}else X(a,b,d);return;case Qa:c=c.type;d=Fb(c,d);Gb(a,b,c,d,f);return;case La:f=d.children;c=c._context;d=d.value;e=c._currentValue2;c._currentValue2=d;g=E;E=d={parent:g,depth:null===g?0:g.depth+1,context:c,parentValue:e,value:d};b.context=d;X(a,b,f);a=E;if(null===a)throw Error(l(403));d=a.parentValue;a.context._currentValue2=d===Va?a.context._defaultValue:d;a=E=a.parent;b.context=a;return;case Ma:d=d.children;d=d(c._currentValue2);X(a,b,d);return;case Ra:f=c._init;c=f(c._payload);d=Fb(c,d);Gb(a,\nb,c,d,void 0);return}throw Error(l(130,null==c?c:typeof c,\"\"));}}\nfunction X(a,b,c){b.node=c;if(\"object\"===typeof c&&null!==c){switch(c.$$typeof){case Ga:Gb(a,b,c.type,c.props,c.ref);return;case Ha:throw Error(l(257));case Ra:var d=c._init;c=d(c._payload);X(a,b,c);return}if(qa(c)){Ib(a,b,c);return}null===c||\"object\"!==typeof c?d=null:(d=Wa&&c[Wa]||c[\"@@iterator\"],d=\"function\"===typeof d?d:null);if(d&&(d=d.call(c))){c=d.next();if(!c.done){var f=[];do f.push(c.value),c=d.next();while(!c.done);Ib(a,b,f)}return}a=Object.prototype.toString.call(c);throw Error(l(31,\"[object Object]\"===\na?\"object with keys {\"+Object.keys(c).join(\", \")+\"}\":a));}\"string\"===typeof c?(d=b.blockedSegment,d.lastPushedText=Fa(b.blockedSegment.chunks,c,a.responseState,d.lastPushedText)):\"number\"===typeof c&&(d=b.blockedSegment,d.lastPushedText=Fa(b.blockedSegment.chunks,\"\"+c,a.responseState,d.lastPushedText))}function Ib(a,b,c){for(var d=c.length,f=0;f<d;f++){var e=b.treeContext;b.treeContext=gb(e,d,f);try{Hb(a,b,c[f])}finally{b.treeContext=e}}}\nfunction Hb(a,b,c){var d=b.blockedSegment.formatContext,f=b.legacyContext,e=b.context;try{return X(a,b,c)}catch(k){if(rb(),\"object\"===typeof k&&null!==k&&\"function\"===typeof k.then){c=k;var g=b.blockedSegment,h=U(a,g.chunks.length,null,g.formatContext,g.lastPushedText,!0);g.children.push(h);g.lastPushedText=!1;a=Bb(a,b.node,b.blockedBoundary,h,b.abortSet,b.legacyContext,b.context,b.treeContext).ping;c.then(a,a);b.blockedSegment.formatContext=d;b.legacyContext=f;b.context=e;G(e)}else throw b.blockedSegment.formatContext=\nd,b.legacyContext=f,b.context=e,G(e),k;}}function Jb(a){var b=a.blockedBoundary;a=a.blockedSegment;a.status=3;Kb(this,b,a)}\nfunction Lb(a,b,c){var d=a.blockedBoundary;a.blockedSegment.status=3;null===d?(b.allPendingTasks--,2!==b.status&&(b.status=2,null!==b.destination&&b.destination.push(null))):(d.pendingTasks--,d.forceClientRender||(d.forceClientRender=!0,a=void 0===c?Error(l(432)):c,d.errorDigest=b.onError(a),d.parentFlushed&&b.clientRenderedBoundaries.push(d)),d.fallbackAbortableTasks.forEach(function(a){return Lb(a,b,c)}),d.fallbackAbortableTasks.clear(),b.allPendingTasks--,0===b.allPendingTasks&&(d=b.onAllReady,\nd()))}function Y(a,b){if(0===b.chunks.length&&1===b.children.length&&null===b.children[0].boundary){var c=b.children[0];c.id=b.id;c.parentFlushed=!0;1===c.status&&Y(a,c)}else a.completedSegments.push(b)}\nfunction Kb(a,b,c){if(null===b){if(c.parentFlushed){if(null!==a.completedRootSegment)throw Error(l(389));a.completedRootSegment=c}a.pendingRootTasks--;0===a.pendingRootTasks&&(a.onShellError=T,b=a.onShellReady,b())}else b.pendingTasks--,b.forceClientRender||(0===b.pendingTasks?(c.parentFlushed&&1===c.status&&Y(b,c),b.parentFlushed&&a.completedBoundaries.push(b),b.fallbackAbortableTasks.forEach(Jb,a),b.fallbackAbortableTasks.clear()):c.parentFlushed&&1===c.status&&(Y(b,c),1===b.completedSegments.length&&\nb.parentFlushed&&a.partialBoundaries.push(b)));a.allPendingTasks--;0===a.allPendingTasks&&(a=a.onAllReady,a())}\nfunction Cb(a){if(2!==a.status){var b=E,c=yb.current;yb.current=xb;var d=S;S=a.responseState;try{var f=a.pingedTasks,e;for(e=0;e<f.length;e++){var g=f[e];var h=a,k=g.blockedSegment;if(0===k.status){G(g.context);try{X(h,g,g.node),h.responseState.generateStaticMarkup||k.lastPushedText&&k.textEmbedded&&k.chunks.push(\"\\x3c!-- --\\x3e\"),g.abortSet.delete(g),k.status=1,Kb(h,g.blockedBoundary,k)}catch(z){if(rb(),\"object\"===typeof z&&null!==z&&\"function\"===typeof z.then){var m=g.ping;z.then(m,m)}else{g.abortSet.delete(g);\nk.status=4;var n=g.blockedBoundary,q=z,C=V(h,q);null===n?W(h,q):(n.pendingTasks--,n.forceClientRender||(n.forceClientRender=!0,n.errorDigest=C,n.parentFlushed&&h.clientRenderedBoundaries.push(n)));h.allPendingTasks--;if(0===h.allPendingTasks){var D=h.onAllReady;D()}}}finally{}}}f.splice(0,e);null!==a.destination&&Mb(a,a.destination)}catch(z){V(a,z),W(a,z)}finally{S=d,yb.current=c,c===xb&&G(b)}}}\nfunction Z(a,b,c){c.parentFlushed=!0;switch(c.status){case 0:var d=c.id=a.nextSegmentId++;c.lastPushedText=!1;c.textEmbedded=!1;a=a.responseState;b.push('<template id=\"');b.push(a.placeholderPrefix);a=d.toString(16);b.push(a);return b.push('\"></template>');case 1:c.status=2;var f=!0;d=c.chunks;var e=0;c=c.children;for(var g=0;g<c.length;g++){for(f=c[g];e<f.index;e++)b.push(d[e]);f=Nb(a,b,f)}for(;e<d.length-1;e++)b.push(d[e]);e<d.length&&(f=b.push(d[e]));return f;default:throw Error(l(390));}}\nfunction Nb(a,b,c){var d=c.boundary;if(null===d)return Z(a,b,c);d.parentFlushed=!0;if(d.forceClientRender)return a.responseState.generateStaticMarkup||(d=d.errorDigest,b.push(\"\\x3c!--$!--\\x3e\"),b.push(\"<template\"),d&&(b.push(' data-dgst=\"'),d=v(d),b.push(d),b.push('\"')),b.push(\"></template>\")),Z(a,b,c),a=a.responseState.generateStaticMarkup?!0:b.push(\"\\x3c!--/$--\\x3e\"),a;if(0<d.pendingTasks){d.rootSegmentID=a.nextSegmentId++;0<d.completedSegments.length&&a.partialBoundaries.push(d);var f=a.responseState;\nvar e=f.nextSuspenseID++;f=f.boundaryPrefix+e.toString(16);d=d.id=f;za(b,a.responseState,d);Z(a,b,c);return b.push(\"\\x3c!--/$--\\x3e\")}if(d.byteSize>a.progressiveChunkSize)return d.rootSegmentID=a.nextSegmentId++,a.completedBoundaries.push(d),za(b,a.responseState,d.id),Z(a,b,c),b.push(\"\\x3c!--/$--\\x3e\");a.responseState.generateStaticMarkup||b.push(\"\\x3c!--$--\\x3e\");c=d.completedSegments;if(1!==c.length)throw Error(l(391));Nb(a,b,c[0]);a=a.responseState.generateStaticMarkup?!0:b.push(\"\\x3c!--/$--\\x3e\");\nreturn a}function Ob(a,b,c){Aa(b,a.responseState,c.formatContext,c.id);Nb(a,b,c);return Ba(b,c.formatContext)}\nfunction Pb(a,b,c){for(var d=c.completedSegments,f=0;f<d.length;f++)Qb(a,b,c,d[f]);d.length=0;a=a.responseState;d=c.id;c=c.rootSegmentID;b.push(a.startInlineScript);a.sentCompleteBoundaryFunction?b.push('$RC(\"'):(a.sentCompleteBoundaryFunction=!0,b.push('function $RC(a,b){a=document.getElementById(a);b=document.getElementById(b);b.parentNode.removeChild(b);if(a){a=a.previousSibling;var f=a.parentNode,c=a.nextSibling,e=0;do{if(c&&8===c.nodeType){var d=c.data;if(\"/$\"===d)if(0===e)break;else e--;else\"$\"!==d&&\"$?\"!==d&&\"$!\"!==d||e++}d=c.nextSibling;f.removeChild(c);c=d}while(c);for(;b.firstChild;)f.insertBefore(b.firstChild,c);a.data=\"$\";a._reactRetry&&a._reactRetry()}};$RC(\"'));if(null===\nd)throw Error(l(395));c=c.toString(16);b.push(d);b.push('\",\"');b.push(a.segmentPrefix);b.push(c);return b.push('\")\\x3c/script>')}\nfunction Qb(a,b,c,d){if(2===d.status)return!0;var f=d.id;if(-1===f){if(-1===(d.id=c.rootSegmentID))throw Error(l(392));return Ob(a,b,d)}Ob(a,b,d);a=a.responseState;b.push(a.startInlineScript);a.sentCompleteSegmentFunction?b.push('$RS(\"'):(a.sentCompleteSegmentFunction=!0,b.push('function $RS(a,b){a=document.getElementById(a);b=document.getElementById(b);for(a.parentNode.removeChild(a);a.firstChild;)b.parentNode.insertBefore(a.firstChild,b);b.parentNode.removeChild(b)};$RS(\"'));b.push(a.segmentPrefix);\nf=f.toString(16);b.push(f);b.push('\",\"');b.push(a.placeholderPrefix);b.push(f);return b.push('\")\\x3c/script>')}\nfunction Mb(a,b){try{var c=a.completedRootSegment;if(null!==c&&0===a.pendingRootTasks){Nb(a,b,c);a.completedRootSegment=null;var d=a.responseState.bootstrapChunks;for(c=0;c<d.length-1;c++)b.push(d[c]);c<d.length&&b.push(d[c])}var f=a.clientRenderedBoundaries,e;for(e=0;e<f.length;e++){var g=f[e];d=b;var h=a.responseState,k=g.id,m=g.errorDigest,n=g.errorMessage,q=g.errorComponentStack;d.push(h.startInlineScript);h.sentClientRenderFunction?d.push('$RX(\"'):(h.sentClientRenderFunction=!0,d.push('function $RX(b,c,d,e){var a=document.getElementById(b);a&&(b=a.previousSibling,b.data=\"$!\",a=a.dataset,c&&(a.dgst=c),d&&(a.msg=d),e&&(a.stck=e),b._reactRetry&&b._reactRetry())};$RX(\"'));\nif(null===k)throw Error(l(395));d.push(k);d.push('\"');if(m||n||q){d.push(\",\");var C=Da(m||\"\");d.push(C)}if(n||q){d.push(\",\");var D=Da(n||\"\");d.push(D)}if(q){d.push(\",\");var z=Da(q);d.push(z)}if(!d.push(\")\\x3c/script>\")){a.destination=null;e++;f.splice(0,e);return}}f.splice(0,e);var ba=a.completedBoundaries;for(e=0;e<ba.length;e++)if(!Pb(a,b,ba[e])){a.destination=null;e++;ba.splice(0,e);return}ba.splice(0,e);var ca=a.partialBoundaries;for(e=0;e<ca.length;e++){var mb=ca[e];a:{f=a;g=b;var da=mb.completedSegments;\nfor(h=0;h<da.length;h++)if(!Qb(f,g,mb,da[h])){h++;da.splice(0,h);var nb=!1;break a}da.splice(0,h);nb=!0}if(!nb){a.destination=null;e++;ca.splice(0,e);return}}ca.splice(0,e);var ea=a.completedBoundaries;for(e=0;e<ea.length;e++)if(!Pb(a,b,ea[e])){a.destination=null;e++;ea.splice(0,e);return}ea.splice(0,e)}finally{0===a.allPendingTasks&&0===a.pingedTasks.length&&0===a.clientRenderedBoundaries.length&&0===a.completedBoundaries.length&&b.push(null)}}\nfunction Rb(a,b){try{var c=a.abortableTasks;c.forEach(function(c){return Lb(c,a,b)});c.clear();null!==a.destination&&Mb(a,a.destination)}catch(d){V(a,d),W(a,d)}}function Sb(){}\nfunction Tb(a,b,c,d){var f=!1,e=null,g=\"\",h={push:function(a){null!==a&&(g+=a);return!0},destroy:function(a){f=!0;e=a}},k=!1;a=Ab(a,Ea(c,b?b.identifierPrefix:void 0),{insertionMode:1,selectedValue:null},Infinity,Sb,void 0,function(){k=!0},void 0,void 0);Cb(a);Rb(a,d);if(1===a.status)a.status=2,h.destroy(a.fatalError);else if(2!==a.status&&null===a.destination){a.destination=h;try{Mb(a,h)}catch(m){V(a,m),W(a,m)}}if(f)throw e;if(!k)throw Error(l(426));return g}\nexports.renderToNodeStream=function(){throw Error(l(207));};exports.renderToStaticMarkup=function(a,b){return Tb(a,b,!0,'The server used \"renderToStaticMarkup\" which does not support Suspense. If you intended to have the server wait for the suspended component please switch to \"renderToReadableStream\" which supports Suspense on the server')};exports.renderToStaticNodeStream=function(){throw Error(l(208));};exports.renderToString=function(a,b){return Tb(a,b,!1,'The server used \"renderToString\" which does not support Suspense. If you intended for this Suspense boundary to render the fallback content on the server consider throwing an Error somewhere within the Suspense boundary. If you intended to have the server wait for the suspended component please switch to \"renderToReadableStream\" which supports Suspense on the server')};\nexports.version=\"18.3.1\";\n","/**\n * @license React\n * react-dom-server.browser.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var aa=require(\"react\");function k(a){for(var b=\"https://reactjs.org/docs/error-decoder.html?invariant=\"+a,c=1;c<arguments.length;c++)b+=\"&args[]=\"+encodeURIComponent(arguments[c]);return\"Minified React error #\"+a+\"; visit \"+b+\" for the full message or use the non-minified dev environment for full errors and additional helpful warnings.\"}var l=null,n=0;\nfunction p(a,b){if(0!==b.length)if(512<b.length)0<n&&(a.enqueue(new Uint8Array(l.buffer,0,n)),l=new Uint8Array(512),n=0),a.enqueue(b);else{var c=l.length-n;c<b.length&&(0===c?a.enqueue(l):(l.set(b.subarray(0,c),n),a.enqueue(l),b=b.subarray(c)),l=new Uint8Array(512),n=0);l.set(b,n);n+=b.length}}function t(a,b){p(a,b);return!0}function ba(a){l&&0<n&&(a.enqueue(new Uint8Array(l.buffer,0,n)),l=null,n=0)}var ca=new TextEncoder;function u(a){return ca.encode(a)}function w(a){return ca.encode(a)}\nfunction da(a,b){\"function\"===typeof a.error?a.error(b):a.close()}var x=Object.prototype.hasOwnProperty,ea=/^[:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD][:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$/,fa={},ha={};\nfunction ia(a){if(x.call(ha,a))return!0;if(x.call(fa,a))return!1;if(ea.test(a))return ha[a]=!0;fa[a]=!0;return!1}function y(a,b,c,d,f,e,g){this.acceptsBooleans=2===b||3===b||4===b;this.attributeName=d;this.attributeNamespace=f;this.mustUseProperty=c;this.propertyName=a;this.type=b;this.sanitizeURL=e;this.removeEmptyString=g}var z={};\n\"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style\".split(\" \").forEach(function(a){z[a]=new y(a,0,!1,a,null,!1,!1)});[[\"acceptCharset\",\"accept-charset\"],[\"className\",\"class\"],[\"htmlFor\",\"for\"],[\"httpEquiv\",\"http-equiv\"]].forEach(function(a){var b=a[0];z[b]=new y(b,1,!1,a[1],null,!1,!1)});[\"contentEditable\",\"draggable\",\"spellCheck\",\"value\"].forEach(function(a){z[a]=new y(a,2,!1,a.toLowerCase(),null,!1,!1)});\n[\"autoReverse\",\"externalResourcesRequired\",\"focusable\",\"preserveAlpha\"].forEach(function(a){z[a]=new y(a,2,!1,a,null,!1,!1)});\"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope\".split(\" \").forEach(function(a){z[a]=new y(a,3,!1,a.toLowerCase(),null,!1,!1)});\n[\"checked\",\"multiple\",\"muted\",\"selected\"].forEach(function(a){z[a]=new y(a,3,!0,a,null,!1,!1)});[\"capture\",\"download\"].forEach(function(a){z[a]=new y(a,4,!1,a,null,!1,!1)});[\"cols\",\"rows\",\"size\",\"span\"].forEach(function(a){z[a]=new y(a,6,!1,a,null,!1,!1)});[\"rowSpan\",\"start\"].forEach(function(a){z[a]=new y(a,5,!1,a.toLowerCase(),null,!1,!1)});var ja=/[\\-:]([a-z])/g;function ka(a){return a[1].toUpperCase()}\n\"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height\".split(\" \").forEach(function(a){var b=a.replace(ja,\nka);z[b]=new y(b,1,!1,a,null,!1,!1)});\"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type\".split(\" \").forEach(function(a){var b=a.replace(ja,ka);z[b]=new y(b,1,!1,a,\"http://www.w3.org/1999/xlink\",!1,!1)});[\"xml:base\",\"xml:lang\",\"xml:space\"].forEach(function(a){var b=a.replace(ja,ka);z[b]=new y(b,1,!1,a,\"http://www.w3.org/XML/1998/namespace\",!1,!1)});[\"tabIndex\",\"crossOrigin\"].forEach(function(a){z[a]=new y(a,1,!1,a.toLowerCase(),null,!1,!1)});\nz.xlinkHref=new y(\"xlinkHref\",1,!1,\"xlink:href\",\"http://www.w3.org/1999/xlink\",!0,!1);[\"src\",\"href\",\"action\",\"formAction\"].forEach(function(a){z[a]=new y(a,1,!1,a.toLowerCase(),null,!0,!0)});\nvar B={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,\nfillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},la=[\"Webkit\",\"ms\",\"Moz\",\"O\"];Object.keys(B).forEach(function(a){la.forEach(function(b){b=b+a.charAt(0).toUpperCase()+a.substring(1);B[b]=B[a]})});var oa=/[\"'&<>]/;\nfunction C(a){if(\"boolean\"===typeof a||\"number\"===typeof a)return\"\"+a;a=\"\"+a;var b=oa.exec(a);if(b){var c=\"\",d,f=0;for(d=b.index;d<a.length;d++){switch(a.charCodeAt(d)){case 34:b=\""\";break;case 38:b=\"&\";break;case 39:b=\"'\";break;case 60:b=\"<\";break;case 62:b=\">\";break;default:continue}f!==d&&(c+=a.substring(f,d));f=d+1;c+=b}a=f!==d?c+a.substring(f,d):c}return a}\nvar pa=/([A-Z])/g,qa=/^ms-/,ra=Array.isArray,sa=w(\"<script>\"),ta=w(\"\\x3c/script>\"),ua=w('<script src=\"'),va=w('<script type=\"module\" src=\"'),wa=w('\" async=\"\">\\x3c/script>'),xa=/(<\\/|<)(s)(cript)/gi;function ya(a,b,c,d){return\"\"+b+(\"s\"===c?\"\\\\u0073\":\"\\\\u0053\")+d}\nfunction za(a,b,c,d,f){a=void 0===a?\"\":a;b=void 0===b?sa:w('<script nonce=\"'+C(b)+'\">');var e=[];void 0!==c&&e.push(b,u((\"\"+c).replace(xa,ya)),ta);if(void 0!==d)for(c=0;c<d.length;c++)e.push(ua,u(C(d[c])),wa);if(void 0!==f)for(d=0;d<f.length;d++)e.push(va,u(C(f[d])),wa);return{bootstrapChunks:e,startInlineScript:b,placeholderPrefix:w(a+\"P:\"),segmentPrefix:w(a+\"S:\"),boundaryPrefix:a+\"B:\",idPrefix:a,nextSuspenseID:0,sentCompleteSegmentFunction:!1,sentCompleteBoundaryFunction:!1,sentClientRenderFunction:!1}}\nfunction D(a,b){return{insertionMode:a,selectedValue:b}}function Aa(a){return D(\"http://www.w3.org/2000/svg\"===a?2:\"http://www.w3.org/1998/Math/MathML\"===a?3:0,null)}\nfunction Ba(a,b,c){switch(b){case \"select\":return D(1,null!=c.value?c.value:c.defaultValue);case \"svg\":return D(2,null);case \"math\":return D(3,null);case \"foreignObject\":return D(1,null);case \"table\":return D(4,null);case \"thead\":case \"tbody\":case \"tfoot\":return D(5,null);case \"colgroup\":return D(7,null);case \"tr\":return D(6,null)}return 4<=a.insertionMode||0===a.insertionMode?D(1,null):a}var Ca=w(\"\\x3c!-- --\\x3e\");function Da(a,b,c,d){if(\"\"===b)return d;d&&a.push(Ca);a.push(u(C(b)));return!0}\nvar Ea=new Map,Fa=w(' style=\"'),Ga=w(\":\"),Ha=w(\";\");\nfunction Ia(a,b,c){if(\"object\"!==typeof c)throw Error(k(62));b=!0;for(var d in c)if(x.call(c,d)){var f=c[d];if(null!=f&&\"boolean\"!==typeof f&&\"\"!==f){if(0===d.indexOf(\"--\")){var e=u(C(d));f=u(C((\"\"+f).trim()))}else{e=d;var g=Ea.get(e);void 0!==g?e=g:(g=w(C(e.replace(pa,\"-$1\").toLowerCase().replace(qa,\"-ms-\"))),Ea.set(e,g),e=g);f=\"number\"===typeof f?0===f||x.call(B,d)?u(\"\"+f):u(f+\"px\"):u(C((\"\"+f).trim()))}b?(b=!1,a.push(Fa,e,Ga,f)):a.push(Ha,e,Ga,f)}}b||a.push(E)}\nvar H=w(\" \"),I=w('=\"'),E=w('\"'),Ja=w('=\"\"');\nfunction J(a,b,c,d){switch(c){case \"style\":Ia(a,b,d);return;case \"defaultValue\":case \"defaultChecked\":case \"innerHTML\":case \"suppressContentEditableWarning\":case \"suppressHydrationWarning\":return}if(!(2<c.length)||\"o\"!==c[0]&&\"O\"!==c[0]||\"n\"!==c[1]&&\"N\"!==c[1])if(b=z.hasOwnProperty(c)?z[c]:null,null!==b){switch(typeof d){case \"function\":case \"symbol\":return;case \"boolean\":if(!b.acceptsBooleans)return}c=u(b.attributeName);switch(b.type){case 3:d&&a.push(H,c,Ja);break;case 4:!0===d?a.push(H,c,Ja):!1!==\nd&&a.push(H,c,I,u(C(d)),E);break;case 5:isNaN(d)||a.push(H,c,I,u(C(d)),E);break;case 6:!isNaN(d)&&1<=d&&a.push(H,c,I,u(C(d)),E);break;default:b.sanitizeURL&&(d=\"\"+d),a.push(H,c,I,u(C(d)),E)}}else if(ia(c)){switch(typeof d){case \"function\":case \"symbol\":return;case \"boolean\":if(b=c.toLowerCase().slice(0,5),\"data-\"!==b&&\"aria-\"!==b)return}a.push(H,u(c),I,u(C(d)),E)}}var K=w(\">\"),Ka=w(\"/>\");\nfunction L(a,b,c){if(null!=b){if(null!=c)throw Error(k(60));if(\"object\"!==typeof b||!(\"__html\"in b))throw Error(k(61));b=b.__html;null!==b&&void 0!==b&&a.push(u(\"\"+b))}}function La(a){var b=\"\";aa.Children.forEach(a,function(a){null!=a&&(b+=a)});return b}var Ma=w(' selected=\"\"');\nfunction Na(a,b,c,d){a.push(M(c));var f=c=null,e;for(e in b)if(x.call(b,e)){var g=b[e];if(null!=g)switch(e){case \"children\":c=g;break;case \"dangerouslySetInnerHTML\":f=g;break;default:J(a,d,e,g)}}a.push(K);L(a,f,c);return\"string\"===typeof c?(a.push(u(C(c))),null):c}var Oa=w(\"\\n\"),Pa=/^[a-zA-Z][a-zA-Z:_\\.\\-\\d]*$/,Qa=new Map;function M(a){var b=Qa.get(a);if(void 0===b){if(!Pa.test(a))throw Error(k(65,a));b=w(\"<\"+a);Qa.set(a,b)}return b}var Ra=w(\"<!DOCTYPE html>\");\nfunction Sa(a,b,c,d,f){switch(b){case \"select\":a.push(M(\"select\"));var e=null,g=null;for(r in c)if(x.call(c,r)){var h=c[r];if(null!=h)switch(r){case \"children\":e=h;break;case \"dangerouslySetInnerHTML\":g=h;break;case \"defaultValue\":case \"value\":break;default:J(a,d,r,h)}}a.push(K);L(a,g,e);return e;case \"option\":g=f.selectedValue;a.push(M(\"option\"));var m=h=null,q=null;var r=null;for(e in c)if(x.call(c,e)){var v=c[e];if(null!=v)switch(e){case \"children\":h=v;break;case \"selected\":q=v;break;case \"dangerouslySetInnerHTML\":r=\nv;break;case \"value\":m=v;default:J(a,d,e,v)}}if(null!=g)if(c=null!==m?\"\"+m:La(h),ra(g))for(d=0;d<g.length;d++){if(\"\"+g[d]===c){a.push(Ma);break}}else\"\"+g===c&&a.push(Ma);else q&&a.push(Ma);a.push(K);L(a,r,h);return h;case \"textarea\":a.push(M(\"textarea\"));r=g=e=null;for(h in c)if(x.call(c,h)&&(m=c[h],null!=m))switch(h){case \"children\":r=m;break;case \"value\":e=m;break;case \"defaultValue\":g=m;break;case \"dangerouslySetInnerHTML\":throw Error(k(91));default:J(a,d,h,m)}null===e&&null!==g&&(e=g);a.push(K);\nif(null!=r){if(null!=e)throw Error(k(92));if(ra(r)&&1<r.length)throw Error(k(93));e=\"\"+r}\"string\"===typeof e&&\"\\n\"===e[0]&&a.push(Oa);null!==e&&a.push(u(C(\"\"+e)));return null;case \"input\":a.push(M(\"input\"));m=r=h=e=null;for(g in c)if(x.call(c,g)&&(q=c[g],null!=q))switch(g){case \"children\":case \"dangerouslySetInnerHTML\":throw Error(k(399,\"input\"));case \"defaultChecked\":m=q;break;case \"defaultValue\":h=q;break;case \"checked\":r=q;break;case \"value\":e=q;break;default:J(a,d,g,q)}null!==r?J(a,d,\"checked\",\nr):null!==m&&J(a,d,\"checked\",m);null!==e?J(a,d,\"value\",e):null!==h&&J(a,d,\"value\",h);a.push(Ka);return null;case \"menuitem\":a.push(M(\"menuitem\"));for(var A in c)if(x.call(c,A)&&(e=c[A],null!=e))switch(A){case \"children\":case \"dangerouslySetInnerHTML\":throw Error(k(400));default:J(a,d,A,e)}a.push(K);return null;case \"title\":a.push(M(\"title\"));e=null;for(v in c)if(x.call(c,v)&&(g=c[v],null!=g))switch(v){case \"children\":e=g;break;case \"dangerouslySetInnerHTML\":throw Error(k(434));default:J(a,d,v,g)}a.push(K);\nreturn e;case \"listing\":case \"pre\":a.push(M(b));g=e=null;for(m in c)if(x.call(c,m)&&(h=c[m],null!=h))switch(m){case \"children\":e=h;break;case \"dangerouslySetInnerHTML\":g=h;break;default:J(a,d,m,h)}a.push(K);if(null!=g){if(null!=e)throw Error(k(60));if(\"object\"!==typeof g||!(\"__html\"in g))throw Error(k(61));c=g.__html;null!==c&&void 0!==c&&(\"string\"===typeof c&&0<c.length&&\"\\n\"===c[0]?a.push(Oa,u(c)):a.push(u(\"\"+c)))}\"string\"===typeof e&&\"\\n\"===e[0]&&a.push(Oa);return e;case \"area\":case \"base\":case \"br\":case \"col\":case \"embed\":case \"hr\":case \"img\":case \"keygen\":case \"link\":case \"meta\":case \"param\":case \"source\":case \"track\":case \"wbr\":a.push(M(b));\nfor(var F in c)if(x.call(c,F)&&(e=c[F],null!=e))switch(F){case \"children\":case \"dangerouslySetInnerHTML\":throw Error(k(399,b));default:J(a,d,F,e)}a.push(Ka);return null;case \"annotation-xml\":case \"color-profile\":case \"font-face\":case \"font-face-src\":case \"font-face-uri\":case \"font-face-format\":case \"font-face-name\":case \"missing-glyph\":return Na(a,c,b,d);case \"html\":return 0===f.insertionMode&&a.push(Ra),Na(a,c,b,d);default:if(-1===b.indexOf(\"-\")&&\"string\"!==typeof c.is)return Na(a,c,b,d);a.push(M(b));\ng=e=null;for(q in c)if(x.call(c,q)&&(h=c[q],null!=h))switch(q){case \"children\":e=h;break;case \"dangerouslySetInnerHTML\":g=h;break;case \"style\":Ia(a,d,h);break;case \"suppressContentEditableWarning\":case \"suppressHydrationWarning\":break;default:ia(q)&&\"function\"!==typeof h&&\"symbol\"!==typeof h&&a.push(H,u(q),I,u(C(h)),E)}a.push(K);L(a,g,e);return e}}\nvar Ta=w(\"</\"),Ua=w(\">\"),Va=w('<template id=\"'),Wa=w('\"></template>'),Xa=w(\"\\x3c!--$--\\x3e\"),Ya=w('\\x3c!--$?--\\x3e<template id=\"'),Za=w('\"></template>'),$a=w(\"\\x3c!--$!--\\x3e\"),ab=w(\"\\x3c!--/$--\\x3e\"),bb=w(\"<template\"),cb=w('\"'),db=w(' data-dgst=\"');w(' data-msg=\"');w(' data-stck=\"');var eb=w(\"></template>\");function fb(a,b,c){p(a,Ya);if(null===c)throw Error(k(395));p(a,c);return t(a,Za)}\nvar gb=w('<div hidden id=\"'),hb=w('\">'),ib=w(\"</div>\"),jb=w('<svg aria-hidden=\"true\" style=\"display:none\" id=\"'),kb=w('\">'),lb=w(\"</svg>\"),mb=w('<math aria-hidden=\"true\" style=\"display:none\" id=\"'),nb=w('\">'),ob=w(\"</math>\"),pb=w('<table hidden id=\"'),qb=w('\">'),rb=w(\"</table>\"),sb=w('<table hidden><tbody id=\"'),tb=w('\">'),ub=w(\"</tbody></table>\"),vb=w('<table hidden><tr id=\"'),wb=w('\">'),xb=w(\"</tr></table>\"),yb=w('<table hidden><colgroup id=\"'),zb=w('\">'),Ab=w(\"</colgroup></table>\");\nfunction Bb(a,b,c,d){switch(c.insertionMode){case 0:case 1:return p(a,gb),p(a,b.segmentPrefix),p(a,u(d.toString(16))),t(a,hb);case 2:return p(a,jb),p(a,b.segmentPrefix),p(a,u(d.toString(16))),t(a,kb);case 3:return p(a,mb),p(a,b.segmentPrefix),p(a,u(d.toString(16))),t(a,nb);case 4:return p(a,pb),p(a,b.segmentPrefix),p(a,u(d.toString(16))),t(a,qb);case 5:return p(a,sb),p(a,b.segmentPrefix),p(a,u(d.toString(16))),t(a,tb);case 6:return p(a,vb),p(a,b.segmentPrefix),p(a,u(d.toString(16))),t(a,wb);case 7:return p(a,\nyb),p(a,b.segmentPrefix),p(a,u(d.toString(16))),t(a,zb);default:throw Error(k(397));}}function Cb(a,b){switch(b.insertionMode){case 0:case 1:return t(a,ib);case 2:return t(a,lb);case 3:return t(a,ob);case 4:return t(a,rb);case 5:return t(a,ub);case 6:return t(a,xb);case 7:return t(a,Ab);default:throw Error(k(397));}}\nvar Db=w('function $RS(a,b){a=document.getElementById(a);b=document.getElementById(b);for(a.parentNode.removeChild(a);a.firstChild;)b.parentNode.insertBefore(a.firstChild,b);b.parentNode.removeChild(b)};$RS(\"'),Eb=w('$RS(\"'),Gb=w('\",\"'),Hb=w('\")\\x3c/script>'),Ib=w('function $RC(a,b){a=document.getElementById(a);b=document.getElementById(b);b.parentNode.removeChild(b);if(a){a=a.previousSibling;var f=a.parentNode,c=a.nextSibling,e=0;do{if(c&&8===c.nodeType){var d=c.data;if(\"/$\"===d)if(0===e)break;else e--;else\"$\"!==d&&\"$?\"!==d&&\"$!\"!==d||e++}d=c.nextSibling;f.removeChild(c);c=d}while(c);for(;b.firstChild;)f.insertBefore(b.firstChild,c);a.data=\"$\";a._reactRetry&&a._reactRetry()}};$RC(\"'),\nJb=w('$RC(\"'),Kb=w('\",\"'),Lb=w('\")\\x3c/script>'),Mb=w('function $RX(b,c,d,e){var a=document.getElementById(b);a&&(b=a.previousSibling,b.data=\"$!\",a=a.dataset,c&&(a.dgst=c),d&&(a.msg=d),e&&(a.stck=e),b._reactRetry&&b._reactRetry())};$RX(\"'),Nb=w('$RX(\"'),Ob=w('\"'),Pb=w(\")\\x3c/script>\"),Qb=w(\",\"),Rb=/[<\\u2028\\u2029]/g;\nfunction Sb(a){return JSON.stringify(a).replace(Rb,function(a){switch(a){case \"<\":return\"\\\\u003c\";case \"\\u2028\":return\"\\\\u2028\";case \"\\u2029\":return\"\\\\u2029\";default:throw Error(\"escapeJSStringsForInstructionScripts encountered a match it does not know how to replace. this means the match regex and the replacement characters are no longer in sync. This is a bug in React\");}})}\nvar N=Object.assign,Tb=Symbol.for(\"react.element\"),Ub=Symbol.for(\"react.portal\"),Vb=Symbol.for(\"react.fragment\"),Wb=Symbol.for(\"react.strict_mode\"),Xb=Symbol.for(\"react.profiler\"),Yb=Symbol.for(\"react.provider\"),Zb=Symbol.for(\"react.context\"),$b=Symbol.for(\"react.forward_ref\"),ac=Symbol.for(\"react.suspense\"),bc=Symbol.for(\"react.suspense_list\"),cc=Symbol.for(\"react.memo\"),dc=Symbol.for(\"react.lazy\"),ec=Symbol.for(\"react.scope\"),fc=Symbol.for(\"react.debug_trace_mode\"),gc=Symbol.for(\"react.legacy_hidden\"),\nhc=Symbol.for(\"react.default_value\"),ic=Symbol.iterator;\nfunction jc(a){if(null==a)return null;if(\"function\"===typeof a)return a.displayName||a.name||null;if(\"string\"===typeof a)return a;switch(a){case Vb:return\"Fragment\";case Ub:return\"Portal\";case Xb:return\"Profiler\";case Wb:return\"StrictMode\";case ac:return\"Suspense\";case bc:return\"SuspenseList\"}if(\"object\"===typeof a)switch(a.$$typeof){case Zb:return(a.displayName||\"Context\")+\".Consumer\";case Yb:return(a._context.displayName||\"Context\")+\".Provider\";case $b:var b=a.render;a=a.displayName;a||(a=b.displayName||\nb.name||\"\",a=\"\"!==a?\"ForwardRef(\"+a+\")\":\"ForwardRef\");return a;case cc:return b=a.displayName||null,null!==b?b:jc(a.type)||\"Memo\";case dc:b=a._payload;a=a._init;try{return jc(a(b))}catch(c){}}return null}var kc={};function lc(a,b){a=a.contextTypes;if(!a)return kc;var c={},d;for(d in a)c[d]=b[d];return c}var O=null;\nfunction P(a,b){if(a!==b){a.context._currentValue=a.parentValue;a=a.parent;var c=b.parent;if(null===a){if(null!==c)throw Error(k(401));}else{if(null===c)throw Error(k(401));P(a,c)}b.context._currentValue=b.value}}function mc(a){a.context._currentValue=a.parentValue;a=a.parent;null!==a&&mc(a)}function nc(a){var b=a.parent;null!==b&&nc(b);a.context._currentValue=a.value}\nfunction oc(a,b){a.context._currentValue=a.parentValue;a=a.parent;if(null===a)throw Error(k(402));a.depth===b.depth?P(a,b):oc(a,b)}function pc(a,b){var c=b.parent;if(null===c)throw Error(k(402));a.depth===c.depth?P(a,c):pc(a,c);b.context._currentValue=b.value}function Q(a){var b=O;b!==a&&(null===b?nc(a):null===a?mc(b):b.depth===a.depth?P(b,a):b.depth>a.depth?oc(b,a):pc(b,a),O=a)}\nvar qc={isMounted:function(){return!1},enqueueSetState:function(a,b){a=a._reactInternals;null!==a.queue&&a.queue.push(b)},enqueueReplaceState:function(a,b){a=a._reactInternals;a.replace=!0;a.queue=[b]},enqueueForceUpdate:function(){}};\nfunction rc(a,b,c,d){var f=void 0!==a.state?a.state:null;a.updater=qc;a.props=c;a.state=f;var e={queue:[],replace:!1};a._reactInternals=e;var g=b.contextType;a.context=\"object\"===typeof g&&null!==g?g._currentValue:d;g=b.getDerivedStateFromProps;\"function\"===typeof g&&(g=g(c,f),f=null===g||void 0===g?f:N({},f,g),a.state=f);if(\"function\"!==typeof b.getDerivedStateFromProps&&\"function\"!==typeof a.getSnapshotBeforeUpdate&&(\"function\"===typeof a.UNSAFE_componentWillMount||\"function\"===typeof a.componentWillMount))if(b=\na.state,\"function\"===typeof a.componentWillMount&&a.componentWillMount(),\"function\"===typeof a.UNSAFE_componentWillMount&&a.UNSAFE_componentWillMount(),b!==a.state&&qc.enqueueReplaceState(a,a.state,null),null!==e.queue&&0<e.queue.length)if(b=e.queue,g=e.replace,e.queue=null,e.replace=!1,g&&1===b.length)a.state=b[0];else{e=g?b[0]:a.state;f=!0;for(g=g?1:0;g<b.length;g++){var h=b[g];h=\"function\"===typeof h?h.call(a,e,c,d):h;null!=h&&(f?(f=!1,e=N({},e,h)):N(e,h))}a.state=e}else e.queue=null}\nvar sc={id:1,overflow:\"\"};function tc(a,b,c){var d=a.id;a=a.overflow;var f=32-uc(d)-1;d&=~(1<<f);c+=1;var e=32-uc(b)+f;if(30<e){var g=f-f%5;e=(d&(1<<g)-1).toString(32);d>>=g;f-=g;return{id:1<<32-uc(b)+f|c<<f|d,overflow:e+a}}return{id:1<<e|c<<f|d,overflow:a}}var uc=Math.clz32?Math.clz32:vc,wc=Math.log,xc=Math.LN2;function vc(a){a>>>=0;return 0===a?32:31-(wc(a)/xc|0)|0}function yc(a,b){return a===b&&(0!==a||1/a===1/b)||a!==a&&b!==b}\nvar zc=\"function\"===typeof Object.is?Object.is:yc,R=null,Ac=null,Bc=null,S=null,T=!1,Cc=!1,U=0,V=null,Dc=0;function W(){if(null===R)throw Error(k(321));return R}function Ec(){if(0<Dc)throw Error(k(312));return{memoizedState:null,queue:null,next:null}}function Fc(){null===S?null===Bc?(T=!1,Bc=S=Ec()):(T=!0,S=Bc):null===S.next?(T=!1,S=S.next=Ec()):(T=!0,S=S.next);return S}function Gc(){Ac=R=null;Cc=!1;Bc=null;Dc=0;S=V=null}function Hc(a,b){return\"function\"===typeof b?b(a):b}\nfunction Ic(a,b,c){R=W();S=Fc();if(T){var d=S.queue;b=d.dispatch;if(null!==V&&(c=V.get(d),void 0!==c)){V.delete(d);d=S.memoizedState;do d=a(d,c.action),c=c.next;while(null!==c);S.memoizedState=d;return[d,b]}return[S.memoizedState,b]}a=a===Hc?\"function\"===typeof b?b():b:void 0!==c?c(b):b;S.memoizedState=a;a=S.queue={last:null,dispatch:null};a=a.dispatch=Jc.bind(null,R,a);return[S.memoizedState,a]}\nfunction Kc(a,b){R=W();S=Fc();b=void 0===b?null:b;if(null!==S){var c=S.memoizedState;if(null!==c&&null!==b){var d=c[1];a:if(null===d)d=!1;else{for(var f=0;f<d.length&&f<b.length;f++)if(!zc(b[f],d[f])){d=!1;break a}d=!0}if(d)return c[0]}}a=a();S.memoizedState=[a,b];return a}function Jc(a,b,c){if(25<=Dc)throw Error(k(301));if(a===R)if(Cc=!0,a={action:c,next:null},null===V&&(V=new Map),c=V.get(b),void 0===c)V.set(b,a);else{for(b=c;null!==b.next;)b=b.next;b.next=a}}\nfunction Lc(){throw Error(k(394));}function Mc(){}\nvar Oc={readContext:function(a){return a._currentValue},useContext:function(a){W();return a._currentValue},useMemo:Kc,useReducer:Ic,useRef:function(a){R=W();S=Fc();var b=S.memoizedState;return null===b?(a={current:a},S.memoizedState=a):b},useState:function(a){return Ic(Hc,a)},useInsertionEffect:Mc,useLayoutEffect:function(){},useCallback:function(a,b){return Kc(function(){return a},b)},useImperativeHandle:Mc,useEffect:Mc,useDebugValue:Mc,useDeferredValue:function(a){W();return a},useTransition:function(){W();\nreturn[!1,Lc]},useId:function(){var a=Ac.treeContext;var b=a.overflow;a=a.id;a=(a&~(1<<32-uc(a)-1)).toString(32)+b;var c=Nc;if(null===c)throw Error(k(404));b=U++;a=\":\"+c.idPrefix+\"R\"+a;0<b&&(a+=\"H\"+b.toString(32));return a+\":\"},useMutableSource:function(a,b){W();return b(a._source)},useSyncExternalStore:function(a,b,c){if(void 0===c)throw Error(k(407));return c()}},Nc=null,Pc=aa.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentDispatcher;function Qc(a){console.error(a);return null}\nfunction X(){}\nfunction Rc(a,b,c,d,f,e,g,h,m){var q=[],r=new Set;b={destination:null,responseState:b,progressiveChunkSize:void 0===d?12800:d,status:0,fatalError:null,nextSegmentId:0,allPendingTasks:0,pendingRootTasks:0,completedRootSegment:null,abortableTasks:r,pingedTasks:q,clientRenderedBoundaries:[],completedBoundaries:[],partialBoundaries:[],onError:void 0===f?Qc:f,onAllReady:void 0===e?X:e,onShellReady:void 0===g?X:g,onShellError:void 0===h?X:h,onFatalError:void 0===m?X:m};c=Sc(b,0,null,c,!1,!1);c.parentFlushed=\n!0;a=Tc(b,a,null,c,r,kc,null,sc);q.push(a);return b}function Tc(a,b,c,d,f,e,g,h){a.allPendingTasks++;null===c?a.pendingRootTasks++:c.pendingTasks++;var m={node:b,ping:function(){var b=a.pingedTasks;b.push(m);1===b.length&&Uc(a)},blockedBoundary:c,blockedSegment:d,abortSet:f,legacyContext:e,context:g,treeContext:h};f.add(m);return m}function Sc(a,b,c,d,f,e){return{status:0,id:-1,index:b,parentFlushed:!1,chunks:[],children:[],formatContext:d,boundary:c,lastPushedText:f,textEmbedded:e}}\nfunction Y(a,b){a=a.onError(b);if(null!=a&&\"string\"!==typeof a)throw Error('onError returned something with a type other than \"string\". onError should return a string and may return null or undefined but must not return anything else. It received something of type \"'+typeof a+'\" instead');return a}function Vc(a,b){var c=a.onShellError;c(b);c=a.onFatalError;c(b);null!==a.destination?(a.status=2,da(a.destination,b)):(a.status=1,a.fatalError=b)}\nfunction Wc(a,b,c,d,f){R={};Ac=b;U=0;for(a=c(d,f);Cc;)Cc=!1,U=0,Dc+=1,S=null,a=c(d,f);Gc();return a}function Xc(a,b,c,d){var f=c.render(),e=d.childContextTypes;if(null!==e&&void 0!==e){var g=b.legacyContext;if(\"function\"!==typeof c.getChildContext)d=g;else{c=c.getChildContext();for(var h in c)if(!(h in e))throw Error(k(108,jc(d)||\"Unknown\",h));d=N({},g,c)}b.legacyContext=d;Z(a,b,f);b.legacyContext=g}else Z(a,b,f)}\nfunction Yc(a,b){if(a&&a.defaultProps){b=N({},b);a=a.defaultProps;for(var c in a)void 0===b[c]&&(b[c]=a[c]);return b}return b}\nfunction Zc(a,b,c,d,f){if(\"function\"===typeof c)if(c.prototype&&c.prototype.isReactComponent){f=lc(c,b.legacyContext);var e=c.contextType;e=new c(d,\"object\"===typeof e&&null!==e?e._currentValue:f);rc(e,c,d,f);Xc(a,b,e,c)}else{e=lc(c,b.legacyContext);f=Wc(a,b,c,d,e);var g=0!==U;if(\"object\"===typeof f&&null!==f&&\"function\"===typeof f.render&&void 0===f.$$typeof)rc(f,c,d,e),Xc(a,b,f,c);else if(g){d=b.treeContext;b.treeContext=tc(d,1,0);try{Z(a,b,f)}finally{b.treeContext=d}}else Z(a,b,f)}else if(\"string\"===\ntypeof c){f=b.blockedSegment;e=Sa(f.chunks,c,d,a.responseState,f.formatContext);f.lastPushedText=!1;g=f.formatContext;f.formatContext=Ba(g,c,d);$c(a,b,e);f.formatContext=g;switch(c){case \"area\":case \"base\":case \"br\":case \"col\":case \"embed\":case \"hr\":case \"img\":case \"input\":case \"keygen\":case \"link\":case \"meta\":case \"param\":case \"source\":case \"track\":case \"wbr\":break;default:f.chunks.push(Ta,u(c),Ua)}f.lastPushedText=!1}else{switch(c){case gc:case fc:case Wb:case Xb:case Vb:Z(a,b,d.children);return;\ncase bc:Z(a,b,d.children);return;case ec:throw Error(k(343));case ac:a:{c=b.blockedBoundary;f=b.blockedSegment;e=d.fallback;d=d.children;g=new Set;var h={id:null,rootSegmentID:-1,parentFlushed:!1,pendingTasks:0,forceClientRender:!1,completedSegments:[],byteSize:0,fallbackAbortableTasks:g,errorDigest:null},m=Sc(a,f.chunks.length,h,f.formatContext,!1,!1);f.children.push(m);f.lastPushedText=!1;var q=Sc(a,0,null,f.formatContext,!1,!1);q.parentFlushed=!0;b.blockedBoundary=h;b.blockedSegment=q;try{if($c(a,\nb,d),q.lastPushedText&&q.textEmbedded&&q.chunks.push(Ca),q.status=1,ad(h,q),0===h.pendingTasks)break a}catch(r){q.status=4,h.forceClientRender=!0,h.errorDigest=Y(a,r)}finally{b.blockedBoundary=c,b.blockedSegment=f}b=Tc(a,e,c,m,g,b.legacyContext,b.context,b.treeContext);a.pingedTasks.push(b)}return}if(\"object\"===typeof c&&null!==c)switch(c.$$typeof){case $b:d=Wc(a,b,c.render,d,f);if(0!==U){c=b.treeContext;b.treeContext=tc(c,1,0);try{Z(a,b,d)}finally{b.treeContext=c}}else Z(a,b,d);return;case cc:c=\nc.type;d=Yc(c,d);Zc(a,b,c,d,f);return;case Yb:f=d.children;c=c._context;d=d.value;e=c._currentValue;c._currentValue=d;g=O;O=d={parent:g,depth:null===g?0:g.depth+1,context:c,parentValue:e,value:d};b.context=d;Z(a,b,f);a=O;if(null===a)throw Error(k(403));d=a.parentValue;a.context._currentValue=d===hc?a.context._defaultValue:d;a=O=a.parent;b.context=a;return;case Zb:d=d.children;d=d(c._currentValue);Z(a,b,d);return;case dc:f=c._init;c=f(c._payload);d=Yc(c,d);Zc(a,b,c,d,void 0);return}throw Error(k(130,\nnull==c?c:typeof c,\"\"));}}\nfunction Z(a,b,c){b.node=c;if(\"object\"===typeof c&&null!==c){switch(c.$$typeof){case Tb:Zc(a,b,c.type,c.props,c.ref);return;case Ub:throw Error(k(257));case dc:var d=c._init;c=d(c._payload);Z(a,b,c);return}if(ra(c)){bd(a,b,c);return}null===c||\"object\"!==typeof c?d=null:(d=ic&&c[ic]||c[\"@@iterator\"],d=\"function\"===typeof d?d:null);if(d&&(d=d.call(c))){c=d.next();if(!c.done){var f=[];do f.push(c.value),c=d.next();while(!c.done);bd(a,b,f)}return}a=Object.prototype.toString.call(c);throw Error(k(31,\"[object Object]\"===\na?\"object with keys {\"+Object.keys(c).join(\", \")+\"}\":a));}\"string\"===typeof c?(d=b.blockedSegment,d.lastPushedText=Da(b.blockedSegment.chunks,c,a.responseState,d.lastPushedText)):\"number\"===typeof c&&(d=b.blockedSegment,d.lastPushedText=Da(b.blockedSegment.chunks,\"\"+c,a.responseState,d.lastPushedText))}function bd(a,b,c){for(var d=c.length,f=0;f<d;f++){var e=b.treeContext;b.treeContext=tc(e,d,f);try{$c(a,b,c[f])}finally{b.treeContext=e}}}\nfunction $c(a,b,c){var d=b.blockedSegment.formatContext,f=b.legacyContext,e=b.context;try{return Z(a,b,c)}catch(m){if(Gc(),\"object\"===typeof m&&null!==m&&\"function\"===typeof m.then){c=m;var g=b.blockedSegment,h=Sc(a,g.chunks.length,null,g.formatContext,g.lastPushedText,!0);g.children.push(h);g.lastPushedText=!1;a=Tc(a,b.node,b.blockedBoundary,h,b.abortSet,b.legacyContext,b.context,b.treeContext).ping;c.then(a,a);b.blockedSegment.formatContext=d;b.legacyContext=f;b.context=e;Q(e)}else throw b.blockedSegment.formatContext=\nd,b.legacyContext=f,b.context=e,Q(e),m;}}function cd(a){var b=a.blockedBoundary;a=a.blockedSegment;a.status=3;dd(this,b,a)}\nfunction ed(a,b,c){var d=a.blockedBoundary;a.blockedSegment.status=3;null===d?(b.allPendingTasks--,2!==b.status&&(b.status=2,null!==b.destination&&b.destination.close())):(d.pendingTasks--,d.forceClientRender||(d.forceClientRender=!0,a=void 0===c?Error(k(432)):c,d.errorDigest=b.onError(a),d.parentFlushed&&b.clientRenderedBoundaries.push(d)),d.fallbackAbortableTasks.forEach(function(a){return ed(a,b,c)}),d.fallbackAbortableTasks.clear(),b.allPendingTasks--,0===b.allPendingTasks&&(d=b.onAllReady,d()))}\nfunction ad(a,b){if(0===b.chunks.length&&1===b.children.length&&null===b.children[0].boundary){var c=b.children[0];c.id=b.id;c.parentFlushed=!0;1===c.status&&ad(a,c)}else a.completedSegments.push(b)}\nfunction dd(a,b,c){if(null===b){if(c.parentFlushed){if(null!==a.completedRootSegment)throw Error(k(389));a.completedRootSegment=c}a.pendingRootTasks--;0===a.pendingRootTasks&&(a.onShellError=X,b=a.onShellReady,b())}else b.pendingTasks--,b.forceClientRender||(0===b.pendingTasks?(c.parentFlushed&&1===c.status&&ad(b,c),b.parentFlushed&&a.completedBoundaries.push(b),b.fallbackAbortableTasks.forEach(cd,a),b.fallbackAbortableTasks.clear()):c.parentFlushed&&1===c.status&&(ad(b,c),1===b.completedSegments.length&&\nb.parentFlushed&&a.partialBoundaries.push(b)));a.allPendingTasks--;0===a.allPendingTasks&&(a=a.onAllReady,a())}\nfunction Uc(a){if(2!==a.status){var b=O,c=Pc.current;Pc.current=Oc;var d=Nc;Nc=a.responseState;try{var f=a.pingedTasks,e;for(e=0;e<f.length;e++){var g=f[e];var h=a,m=g.blockedSegment;if(0===m.status){Q(g.context);try{Z(h,g,g.node),m.lastPushedText&&m.textEmbedded&&m.chunks.push(Ca),g.abortSet.delete(g),m.status=1,dd(h,g.blockedBoundary,m)}catch(G){if(Gc(),\"object\"===typeof G&&null!==G&&\"function\"===typeof G.then){var q=g.ping;G.then(q,q)}else{g.abortSet.delete(g);m.status=4;var r=g.blockedBoundary,\nv=G,A=Y(h,v);null===r?Vc(h,v):(r.pendingTasks--,r.forceClientRender||(r.forceClientRender=!0,r.errorDigest=A,r.parentFlushed&&h.clientRenderedBoundaries.push(r)));h.allPendingTasks--;if(0===h.allPendingTasks){var F=h.onAllReady;F()}}}finally{}}}f.splice(0,e);null!==a.destination&&fd(a,a.destination)}catch(G){Y(a,G),Vc(a,G)}finally{Nc=d,Pc.current=c,c===Oc&&Q(b)}}}\nfunction gd(a,b,c){c.parentFlushed=!0;switch(c.status){case 0:var d=c.id=a.nextSegmentId++;c.lastPushedText=!1;c.textEmbedded=!1;a=a.responseState;p(b,Va);p(b,a.placeholderPrefix);a=u(d.toString(16));p(b,a);return t(b,Wa);case 1:c.status=2;var f=!0;d=c.chunks;var e=0;c=c.children;for(var g=0;g<c.length;g++){for(f=c[g];e<f.index;e++)p(b,d[e]);f=hd(a,b,f)}for(;e<d.length-1;e++)p(b,d[e]);e<d.length&&(f=t(b,d[e]));return f;default:throw Error(k(390));}}\nfunction hd(a,b,c){var d=c.boundary;if(null===d)return gd(a,b,c);d.parentFlushed=!0;if(d.forceClientRender)d=d.errorDigest,t(b,$a),p(b,bb),d&&(p(b,db),p(b,u(C(d))),p(b,cb)),t(b,eb),gd(a,b,c);else if(0<d.pendingTasks){d.rootSegmentID=a.nextSegmentId++;0<d.completedSegments.length&&a.partialBoundaries.push(d);var f=a.responseState;var e=f.nextSuspenseID++;f=w(f.boundaryPrefix+e.toString(16));d=d.id=f;fb(b,a.responseState,d);gd(a,b,c)}else if(d.byteSize>a.progressiveChunkSize)d.rootSegmentID=a.nextSegmentId++,\na.completedBoundaries.push(d),fb(b,a.responseState,d.id),gd(a,b,c);else{t(b,Xa);c=d.completedSegments;if(1!==c.length)throw Error(k(391));hd(a,b,c[0])}return t(b,ab)}function id(a,b,c){Bb(b,a.responseState,c.formatContext,c.id);hd(a,b,c);return Cb(b,c.formatContext)}\nfunction jd(a,b,c){for(var d=c.completedSegments,f=0;f<d.length;f++)kd(a,b,c,d[f]);d.length=0;a=a.responseState;d=c.id;c=c.rootSegmentID;p(b,a.startInlineScript);a.sentCompleteBoundaryFunction?p(b,Jb):(a.sentCompleteBoundaryFunction=!0,p(b,Ib));if(null===d)throw Error(k(395));c=u(c.toString(16));p(b,d);p(b,Kb);p(b,a.segmentPrefix);p(b,c);return t(b,Lb)}\nfunction kd(a,b,c,d){if(2===d.status)return!0;var f=d.id;if(-1===f){if(-1===(d.id=c.rootSegmentID))throw Error(k(392));return id(a,b,d)}id(a,b,d);a=a.responseState;p(b,a.startInlineScript);a.sentCompleteSegmentFunction?p(b,Eb):(a.sentCompleteSegmentFunction=!0,p(b,Db));p(b,a.segmentPrefix);f=u(f.toString(16));p(b,f);p(b,Gb);p(b,a.placeholderPrefix);p(b,f);return t(b,Hb)}\nfunction fd(a,b){l=new Uint8Array(512);n=0;try{var c=a.completedRootSegment;if(null!==c&&0===a.pendingRootTasks){hd(a,b,c);a.completedRootSegment=null;var d=a.responseState.bootstrapChunks;for(c=0;c<d.length-1;c++)p(b,d[c]);c<d.length&&t(b,d[c])}var f=a.clientRenderedBoundaries,e;for(e=0;e<f.length;e++){var g=f[e];d=b;var h=a.responseState,m=g.id,q=g.errorDigest,r=g.errorMessage,v=g.errorComponentStack;p(d,h.startInlineScript);h.sentClientRenderFunction?p(d,Nb):(h.sentClientRenderFunction=!0,p(d,\nMb));if(null===m)throw Error(k(395));p(d,m);p(d,Ob);if(q||r||v)p(d,Qb),p(d,u(Sb(q||\"\")));if(r||v)p(d,Qb),p(d,u(Sb(r||\"\")));v&&(p(d,Qb),p(d,u(Sb(v))));if(!t(d,Pb)){a.destination=null;e++;f.splice(0,e);return}}f.splice(0,e);var A=a.completedBoundaries;for(e=0;e<A.length;e++)if(!jd(a,b,A[e])){a.destination=null;e++;A.splice(0,e);return}A.splice(0,e);ba(b);l=new Uint8Array(512);n=0;var F=a.partialBoundaries;for(e=0;e<F.length;e++){var G=F[e];a:{f=a;g=b;var ma=G.completedSegments;for(h=0;h<ma.length;h++)if(!kd(f,\ng,G,ma[h])){h++;ma.splice(0,h);var Fb=!1;break a}ma.splice(0,h);Fb=!0}if(!Fb){a.destination=null;e++;F.splice(0,e);return}}F.splice(0,e);var na=a.completedBoundaries;for(e=0;e<na.length;e++)if(!jd(a,b,na[e])){a.destination=null;e++;na.splice(0,e);return}na.splice(0,e)}finally{ba(b),0===a.allPendingTasks&&0===a.pingedTasks.length&&0===a.clientRenderedBoundaries.length&&0===a.completedBoundaries.length&&b.close()}}\nfunction ld(a,b){try{var c=a.abortableTasks;c.forEach(function(c){return ed(c,a,b)});c.clear();null!==a.destination&&fd(a,a.destination)}catch(d){Y(a,d),Vc(a,d)}}\nexports.renderToReadableStream=function(a,b){return new Promise(function(c,d){var f,e,g=new Promise(function(a,b){e=a;f=b}),h=Rc(a,za(b?b.identifierPrefix:void 0,b?b.nonce:void 0,b?b.bootstrapScriptContent:void 0,b?b.bootstrapScripts:void 0,b?b.bootstrapModules:void 0),Aa(b?b.namespaceURI:void 0),b?b.progressiveChunkSize:void 0,b?b.onError:void 0,e,function(){var a=new ReadableStream({type:\"bytes\",pull:function(a){if(1===h.status)h.status=2,da(a,h.fatalError);else if(2!==h.status&&null===h.destination){h.destination=\na;try{fd(h,a)}catch(A){Y(h,A),Vc(h,A)}}},cancel:function(){ld(h)}},{highWaterMark:0});a.allReady=g;c(a)},function(a){g.catch(function(){});d(a)},f);if(b&&b.signal){var m=b.signal,q=function(){ld(h,m.reason);m.removeEventListener(\"abort\",q)};m.addEventListener(\"abort\",q)}Uc(h)})};exports.version=\"18.3.1\";\n","/**\n * @license React\n * react-dom.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n/*\n Modernizr 3.0.0pre (Custom Build) | MIT\n*/\n'use strict';var aa=require(\"react\"),ca=require(\"scheduler\");function p(a){for(var b=\"https://reactjs.org/docs/error-decoder.html?invariant=\"+a,c=1;c<arguments.length;c++)b+=\"&args[]=\"+encodeURIComponent(arguments[c]);return\"Minified React error #\"+a+\"; visit \"+b+\" for the full message or use the non-minified dev environment for full errors and additional helpful warnings.\"}var da=new Set,ea={};function fa(a,b){ha(a,b);ha(a+\"Capture\",b)}\nfunction ha(a,b){ea[a]=b;for(a=0;a<b.length;a++)da.add(b[a])}\nvar ia=!(\"undefined\"===typeof window||\"undefined\"===typeof window.document||\"undefined\"===typeof window.document.createElement),ja=Object.prototype.hasOwnProperty,ka=/^[:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD][:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$/,la=\n{},ma={};function oa(a){if(ja.call(ma,a))return!0;if(ja.call(la,a))return!1;if(ka.test(a))return ma[a]=!0;la[a]=!0;return!1}function pa(a,b,c,d){if(null!==c&&0===c.type)return!1;switch(typeof b){case \"function\":case \"symbol\":return!0;case \"boolean\":if(d)return!1;if(null!==c)return!c.acceptsBooleans;a=a.toLowerCase().slice(0,5);return\"data-\"!==a&&\"aria-\"!==a;default:return!1}}\nfunction qa(a,b,c,d){if(null===b||\"undefined\"===typeof b||pa(a,b,c,d))return!0;if(d)return!1;if(null!==c)switch(c.type){case 3:return!b;case 4:return!1===b;case 5:return isNaN(b);case 6:return isNaN(b)||1>b}return!1}function v(a,b,c,d,e,f,g){this.acceptsBooleans=2===b||3===b||4===b;this.attributeName=d;this.attributeNamespace=e;this.mustUseProperty=c;this.propertyName=a;this.type=b;this.sanitizeURL=f;this.removeEmptyString=g}var z={};\n\"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style\".split(\" \").forEach(function(a){z[a]=new v(a,0,!1,a,null,!1,!1)});[[\"acceptCharset\",\"accept-charset\"],[\"className\",\"class\"],[\"htmlFor\",\"for\"],[\"httpEquiv\",\"http-equiv\"]].forEach(function(a){var b=a[0];z[b]=new v(b,1,!1,a[1],null,!1,!1)});[\"contentEditable\",\"draggable\",\"spellCheck\",\"value\"].forEach(function(a){z[a]=new v(a,2,!1,a.toLowerCase(),null,!1,!1)});\n[\"autoReverse\",\"externalResourcesRequired\",\"focusable\",\"preserveAlpha\"].forEach(function(a){z[a]=new v(a,2,!1,a,null,!1,!1)});\"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope\".split(\" \").forEach(function(a){z[a]=new v(a,3,!1,a.toLowerCase(),null,!1,!1)});\n[\"checked\",\"multiple\",\"muted\",\"selected\"].forEach(function(a){z[a]=new v(a,3,!0,a,null,!1,!1)});[\"capture\",\"download\"].forEach(function(a){z[a]=new v(a,4,!1,a,null,!1,!1)});[\"cols\",\"rows\",\"size\",\"span\"].forEach(function(a){z[a]=new v(a,6,!1,a,null,!1,!1)});[\"rowSpan\",\"start\"].forEach(function(a){z[a]=new v(a,5,!1,a.toLowerCase(),null,!1,!1)});var ra=/[\\-:]([a-z])/g;function sa(a){return a[1].toUpperCase()}\n\"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height\".split(\" \").forEach(function(a){var b=a.replace(ra,\nsa);z[b]=new v(b,1,!1,a,null,!1,!1)});\"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type\".split(\" \").forEach(function(a){var b=a.replace(ra,sa);z[b]=new v(b,1,!1,a,\"http://www.w3.org/1999/xlink\",!1,!1)});[\"xml:base\",\"xml:lang\",\"xml:space\"].forEach(function(a){var b=a.replace(ra,sa);z[b]=new v(b,1,!1,a,\"http://www.w3.org/XML/1998/namespace\",!1,!1)});[\"tabIndex\",\"crossOrigin\"].forEach(function(a){z[a]=new v(a,1,!1,a.toLowerCase(),null,!1,!1)});\nz.xlinkHref=new v(\"xlinkHref\",1,!1,\"xlink:href\",\"http://www.w3.org/1999/xlink\",!0,!1);[\"src\",\"href\",\"action\",\"formAction\"].forEach(function(a){z[a]=new v(a,1,!1,a.toLowerCase(),null,!0,!0)});\nfunction ta(a,b,c,d){var e=z.hasOwnProperty(b)?z[b]:null;if(null!==e?0!==e.type:d||!(2<b.length)||\"o\"!==b[0]&&\"O\"!==b[0]||\"n\"!==b[1]&&\"N\"!==b[1])qa(b,c,e,d)&&(c=null),d||null===e?oa(b)&&(null===c?a.removeAttribute(b):a.setAttribute(b,\"\"+c)):e.mustUseProperty?a[e.propertyName]=null===c?3===e.type?!1:\"\":c:(b=e.attributeName,d=e.attributeNamespace,null===c?a.removeAttribute(b):(e=e.type,c=3===e||4===e&&!0===c?\"\":\"\"+c,d?a.setAttributeNS(d,b,c):a.setAttribute(b,c)))}\nvar ua=aa.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,va=Symbol.for(\"react.element\"),wa=Symbol.for(\"react.portal\"),ya=Symbol.for(\"react.fragment\"),za=Symbol.for(\"react.strict_mode\"),Aa=Symbol.for(\"react.profiler\"),Ba=Symbol.for(\"react.provider\"),Ca=Symbol.for(\"react.context\"),Da=Symbol.for(\"react.forward_ref\"),Ea=Symbol.for(\"react.suspense\"),Fa=Symbol.for(\"react.suspense_list\"),Ga=Symbol.for(\"react.memo\"),Ha=Symbol.for(\"react.lazy\");Symbol.for(\"react.scope\");Symbol.for(\"react.debug_trace_mode\");\nvar Ia=Symbol.for(\"react.offscreen\");Symbol.for(\"react.legacy_hidden\");Symbol.for(\"react.cache\");Symbol.for(\"react.tracing_marker\");var Ja=Symbol.iterator;function Ka(a){if(null===a||\"object\"!==typeof a)return null;a=Ja&&a[Ja]||a[\"@@iterator\"];return\"function\"===typeof a?a:null}var A=Object.assign,La;function Ma(a){if(void 0===La)try{throw Error();}catch(c){var b=c.stack.trim().match(/\\n( *(at )?)/);La=b&&b[1]||\"\"}return\"\\n\"+La+a}var Na=!1;\nfunction Oa(a,b){if(!a||Na)return\"\";Na=!0;var c=Error.prepareStackTrace;Error.prepareStackTrace=void 0;try{if(b)if(b=function(){throw Error();},Object.defineProperty(b.prototype,\"props\",{set:function(){throw Error();}}),\"object\"===typeof Reflect&&Reflect.construct){try{Reflect.construct(b,[])}catch(l){var d=l}Reflect.construct(a,[],b)}else{try{b.call()}catch(l){d=l}a.call(b.prototype)}else{try{throw Error();}catch(l){d=l}a()}}catch(l){if(l&&d&&\"string\"===typeof l.stack){for(var e=l.stack.split(\"\\n\"),\nf=d.stack.split(\"\\n\"),g=e.length-1,h=f.length-1;1<=g&&0<=h&&e[g]!==f[h];)h--;for(;1<=g&&0<=h;g--,h--)if(e[g]!==f[h]){if(1!==g||1!==h){do if(g--,h--,0>h||e[g]!==f[h]){var k=\"\\n\"+e[g].replace(\" at new \",\" at \");a.displayName&&k.includes(\"<anonymous>\")&&(k=k.replace(\"<anonymous>\",a.displayName));return k}while(1<=g&&0<=h)}break}}}finally{Na=!1,Error.prepareStackTrace=c}return(a=a?a.displayName||a.name:\"\")?Ma(a):\"\"}\nfunction Pa(a){switch(a.tag){case 5:return Ma(a.type);case 16:return Ma(\"Lazy\");case 13:return Ma(\"Suspense\");case 19:return Ma(\"SuspenseList\");case 0:case 2:case 15:return a=Oa(a.type,!1),a;case 11:return a=Oa(a.type.render,!1),a;case 1:return a=Oa(a.type,!0),a;default:return\"\"}}\nfunction Qa(a){if(null==a)return null;if(\"function\"===typeof a)return a.displayName||a.name||null;if(\"string\"===typeof a)return a;switch(a){case ya:return\"Fragment\";case wa:return\"Portal\";case Aa:return\"Profiler\";case za:return\"StrictMode\";case Ea:return\"Suspense\";case Fa:return\"SuspenseList\"}if(\"object\"===typeof a)switch(a.$$typeof){case Ca:return(a.displayName||\"Context\")+\".Consumer\";case Ba:return(a._context.displayName||\"Context\")+\".Provider\";case Da:var b=a.render;a=a.displayName;a||(a=b.displayName||\nb.name||\"\",a=\"\"!==a?\"ForwardRef(\"+a+\")\":\"ForwardRef\");return a;case Ga:return b=a.displayName||null,null!==b?b:Qa(a.type)||\"Memo\";case Ha:b=a._payload;a=a._init;try{return Qa(a(b))}catch(c){}}return null}\nfunction Ra(a){var b=a.type;switch(a.tag){case 24:return\"Cache\";case 9:return(b.displayName||\"Context\")+\".Consumer\";case 10:return(b._context.displayName||\"Context\")+\".Provider\";case 18:return\"DehydratedFragment\";case 11:return a=b.render,a=a.displayName||a.name||\"\",b.displayName||(\"\"!==a?\"ForwardRef(\"+a+\")\":\"ForwardRef\");case 7:return\"Fragment\";case 5:return b;case 4:return\"Portal\";case 3:return\"Root\";case 6:return\"Text\";case 16:return Qa(b);case 8:return b===za?\"StrictMode\":\"Mode\";case 22:return\"Offscreen\";\ncase 12:return\"Profiler\";case 21:return\"Scope\";case 13:return\"Suspense\";case 19:return\"SuspenseList\";case 25:return\"TracingMarker\";case 1:case 0:case 17:case 2:case 14:case 15:if(\"function\"===typeof b)return b.displayName||b.name||null;if(\"string\"===typeof b)return b}return null}function Sa(a){switch(typeof a){case \"boolean\":case \"number\":case \"string\":case \"undefined\":return a;case \"object\":return a;default:return\"\"}}\nfunction Ta(a){var b=a.type;return(a=a.nodeName)&&\"input\"===a.toLowerCase()&&(\"checkbox\"===b||\"radio\"===b)}\nfunction Ua(a){var b=Ta(a)?\"checked\":\"value\",c=Object.getOwnPropertyDescriptor(a.constructor.prototype,b),d=\"\"+a[b];if(!a.hasOwnProperty(b)&&\"undefined\"!==typeof c&&\"function\"===typeof c.get&&\"function\"===typeof c.set){var e=c.get,f=c.set;Object.defineProperty(a,b,{configurable:!0,get:function(){return e.call(this)},set:function(a){d=\"\"+a;f.call(this,a)}});Object.defineProperty(a,b,{enumerable:c.enumerable});return{getValue:function(){return d},setValue:function(a){d=\"\"+a},stopTracking:function(){a._valueTracker=\nnull;delete a[b]}}}}function Va(a){a._valueTracker||(a._valueTracker=Ua(a))}function Wa(a){if(!a)return!1;var b=a._valueTracker;if(!b)return!0;var c=b.getValue();var d=\"\";a&&(d=Ta(a)?a.checked?\"true\":\"false\":a.value);a=d;return a!==c?(b.setValue(a),!0):!1}function Xa(a){a=a||(\"undefined\"!==typeof document?document:void 0);if(\"undefined\"===typeof a)return null;try{return a.activeElement||a.body}catch(b){return a.body}}\nfunction Ya(a,b){var c=b.checked;return A({},b,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:null!=c?c:a._wrapperState.initialChecked})}function Za(a,b){var c=null==b.defaultValue?\"\":b.defaultValue,d=null!=b.checked?b.checked:b.defaultChecked;c=Sa(null!=b.value?b.value:c);a._wrapperState={initialChecked:d,initialValue:c,controlled:\"checkbox\"===b.type||\"radio\"===b.type?null!=b.checked:null!=b.value}}function ab(a,b){b=b.checked;null!=b&&ta(a,\"checked\",b,!1)}\nfunction bb(a,b){ab(a,b);var c=Sa(b.value),d=b.type;if(null!=c)if(\"number\"===d){if(0===c&&\"\"===a.value||a.value!=c)a.value=\"\"+c}else a.value!==\"\"+c&&(a.value=\"\"+c);else if(\"submit\"===d||\"reset\"===d){a.removeAttribute(\"value\");return}b.hasOwnProperty(\"value\")?cb(a,b.type,c):b.hasOwnProperty(\"defaultValue\")&&cb(a,b.type,Sa(b.defaultValue));null==b.checked&&null!=b.defaultChecked&&(a.defaultChecked=!!b.defaultChecked)}\nfunction db(a,b,c){if(b.hasOwnProperty(\"value\")||b.hasOwnProperty(\"defaultValue\")){var d=b.type;if(!(\"submit\"!==d&&\"reset\"!==d||void 0!==b.value&&null!==b.value))return;b=\"\"+a._wrapperState.initialValue;c||b===a.value||(a.value=b);a.defaultValue=b}c=a.name;\"\"!==c&&(a.name=\"\");a.defaultChecked=!!a._wrapperState.initialChecked;\"\"!==c&&(a.name=c)}\nfunction cb(a,b,c){if(\"number\"!==b||Xa(a.ownerDocument)!==a)null==c?a.defaultValue=\"\"+a._wrapperState.initialValue:a.defaultValue!==\"\"+c&&(a.defaultValue=\"\"+c)}var eb=Array.isArray;\nfunction fb(a,b,c,d){a=a.options;if(b){b={};for(var e=0;e<c.length;e++)b[\"$\"+c[e]]=!0;for(c=0;c<a.length;c++)e=b.hasOwnProperty(\"$\"+a[c].value),a[c].selected!==e&&(a[c].selected=e),e&&d&&(a[c].defaultSelected=!0)}else{c=\"\"+Sa(c);b=null;for(e=0;e<a.length;e++){if(a[e].value===c){a[e].selected=!0;d&&(a[e].defaultSelected=!0);return}null!==b||a[e].disabled||(b=a[e])}null!==b&&(b.selected=!0)}}\nfunction gb(a,b){if(null!=b.dangerouslySetInnerHTML)throw Error(p(91));return A({},b,{value:void 0,defaultValue:void 0,children:\"\"+a._wrapperState.initialValue})}function hb(a,b){var c=b.value;if(null==c){c=b.children;b=b.defaultValue;if(null!=c){if(null!=b)throw Error(p(92));if(eb(c)){if(1<c.length)throw Error(p(93));c=c[0]}b=c}null==b&&(b=\"\");c=b}a._wrapperState={initialValue:Sa(c)}}\nfunction ib(a,b){var c=Sa(b.value),d=Sa(b.defaultValue);null!=c&&(c=\"\"+c,c!==a.value&&(a.value=c),null==b.defaultValue&&a.defaultValue!==c&&(a.defaultValue=c));null!=d&&(a.defaultValue=\"\"+d)}function jb(a){var b=a.textContent;b===a._wrapperState.initialValue&&\"\"!==b&&null!==b&&(a.value=b)}function kb(a){switch(a){case \"svg\":return\"http://www.w3.org/2000/svg\";case \"math\":return\"http://www.w3.org/1998/Math/MathML\";default:return\"http://www.w3.org/1999/xhtml\"}}\nfunction lb(a,b){return null==a||\"http://www.w3.org/1999/xhtml\"===a?kb(b):\"http://www.w3.org/2000/svg\"===a&&\"foreignObject\"===b?\"http://www.w3.org/1999/xhtml\":a}\nvar mb,nb=function(a){return\"undefined\"!==typeof MSApp&&MSApp.execUnsafeLocalFunction?function(b,c,d,e){MSApp.execUnsafeLocalFunction(function(){return a(b,c,d,e)})}:a}(function(a,b){if(\"http://www.w3.org/2000/svg\"!==a.namespaceURI||\"innerHTML\"in a)a.innerHTML=b;else{mb=mb||document.createElement(\"div\");mb.innerHTML=\"<svg>\"+b.valueOf().toString()+\"</svg>\";for(b=mb.firstChild;a.firstChild;)a.removeChild(a.firstChild);for(;b.firstChild;)a.appendChild(b.firstChild)}});\nfunction ob(a,b){if(b){var c=a.firstChild;if(c&&c===a.lastChild&&3===c.nodeType){c.nodeValue=b;return}}a.textContent=b}\nvar pb={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,\nzoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},qb=[\"Webkit\",\"ms\",\"Moz\",\"O\"];Object.keys(pb).forEach(function(a){qb.forEach(function(b){b=b+a.charAt(0).toUpperCase()+a.substring(1);pb[b]=pb[a]})});function rb(a,b,c){return null==b||\"boolean\"===typeof b||\"\"===b?\"\":c||\"number\"!==typeof b||0===b||pb.hasOwnProperty(a)&&pb[a]?(\"\"+b).trim():b+\"px\"}\nfunction sb(a,b){a=a.style;for(var c in b)if(b.hasOwnProperty(c)){var d=0===c.indexOf(\"--\"),e=rb(c,b[c],d);\"float\"===c&&(c=\"cssFloat\");d?a.setProperty(c,e):a[c]=e}}var tb=A({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});\nfunction ub(a,b){if(b){if(tb[a]&&(null!=b.children||null!=b.dangerouslySetInnerHTML))throw Error(p(137,a));if(null!=b.dangerouslySetInnerHTML){if(null!=b.children)throw Error(p(60));if(\"object\"!==typeof b.dangerouslySetInnerHTML||!(\"__html\"in b.dangerouslySetInnerHTML))throw Error(p(61));}if(null!=b.style&&\"object\"!==typeof b.style)throw Error(p(62));}}\nfunction vb(a,b){if(-1===a.indexOf(\"-\"))return\"string\"===typeof b.is;switch(a){case \"annotation-xml\":case \"color-profile\":case \"font-face\":case \"font-face-src\":case \"font-face-uri\":case \"font-face-format\":case \"font-face-name\":case \"missing-glyph\":return!1;default:return!0}}var wb=null;function xb(a){a=a.target||a.srcElement||window;a.correspondingUseElement&&(a=a.correspondingUseElement);return 3===a.nodeType?a.parentNode:a}var yb=null,zb=null,Ab=null;\nfunction Bb(a){if(a=Cb(a)){if(\"function\"!==typeof yb)throw Error(p(280));var b=a.stateNode;b&&(b=Db(b),yb(a.stateNode,a.type,b))}}function Eb(a){zb?Ab?Ab.push(a):Ab=[a]:zb=a}function Fb(){if(zb){var a=zb,b=Ab;Ab=zb=null;Bb(a);if(b)for(a=0;a<b.length;a++)Bb(b[a])}}function Gb(a,b){return a(b)}function Hb(){}var Ib=!1;function Jb(a,b,c){if(Ib)return a(b,c);Ib=!0;try{return Gb(a,b,c)}finally{if(Ib=!1,null!==zb||null!==Ab)Hb(),Fb()}}\nfunction Kb(a,b){var c=a.stateNode;if(null===c)return null;var d=Db(c);if(null===d)return null;c=d[b];a:switch(b){case \"onClick\":case \"onClickCapture\":case \"onDoubleClick\":case \"onDoubleClickCapture\":case \"onMouseDown\":case \"onMouseDownCapture\":case \"onMouseMove\":case \"onMouseMoveCapture\":case \"onMouseUp\":case \"onMouseUpCapture\":case \"onMouseEnter\":(d=!d.disabled)||(a=a.type,d=!(\"button\"===a||\"input\"===a||\"select\"===a||\"textarea\"===a));a=!d;break a;default:a=!1}if(a)return null;if(c&&\"function\"!==\ntypeof c)throw Error(p(231,b,typeof c));return c}var Lb=!1;if(ia)try{var Mb={};Object.defineProperty(Mb,\"passive\",{get:function(){Lb=!0}});window.addEventListener(\"test\",Mb,Mb);window.removeEventListener(\"test\",Mb,Mb)}catch(a){Lb=!1}function Nb(a,b,c,d,e,f,g,h,k){var l=Array.prototype.slice.call(arguments,3);try{b.apply(c,l)}catch(m){this.onError(m)}}var Ob=!1,Pb=null,Qb=!1,Rb=null,Sb={onError:function(a){Ob=!0;Pb=a}};function Tb(a,b,c,d,e,f,g,h,k){Ob=!1;Pb=null;Nb.apply(Sb,arguments)}\nfunction Ub(a,b,c,d,e,f,g,h,k){Tb.apply(this,arguments);if(Ob){if(Ob){var l=Pb;Ob=!1;Pb=null}else throw Error(p(198));Qb||(Qb=!0,Rb=l)}}function Vb(a){var b=a,c=a;if(a.alternate)for(;b.return;)b=b.return;else{a=b;do b=a,0!==(b.flags&4098)&&(c=b.return),a=b.return;while(a)}return 3===b.tag?c:null}function Wb(a){if(13===a.tag){var b=a.memoizedState;null===b&&(a=a.alternate,null!==a&&(b=a.memoizedState));if(null!==b)return b.dehydrated}return null}function Xb(a){if(Vb(a)!==a)throw Error(p(188));}\nfunction Yb(a){var b=a.alternate;if(!b){b=Vb(a);if(null===b)throw Error(p(188));return b!==a?null:a}for(var c=a,d=b;;){var e=c.return;if(null===e)break;var f=e.alternate;if(null===f){d=e.return;if(null!==d){c=d;continue}break}if(e.child===f.child){for(f=e.child;f;){if(f===c)return Xb(e),a;if(f===d)return Xb(e),b;f=f.sibling}throw Error(p(188));}if(c.return!==d.return)c=e,d=f;else{for(var g=!1,h=e.child;h;){if(h===c){g=!0;c=e;d=f;break}if(h===d){g=!0;d=e;c=f;break}h=h.sibling}if(!g){for(h=f.child;h;){if(h===\nc){g=!0;c=f;d=e;break}if(h===d){g=!0;d=f;c=e;break}h=h.sibling}if(!g)throw Error(p(189));}}if(c.alternate!==d)throw Error(p(190));}if(3!==c.tag)throw Error(p(188));return c.stateNode.current===c?a:b}function Zb(a){a=Yb(a);return null!==a?$b(a):null}function $b(a){if(5===a.tag||6===a.tag)return a;for(a=a.child;null!==a;){var b=$b(a);if(null!==b)return b;a=a.sibling}return null}\nvar ac=ca.unstable_scheduleCallback,bc=ca.unstable_cancelCallback,cc=ca.unstable_shouldYield,dc=ca.unstable_requestPaint,B=ca.unstable_now,ec=ca.unstable_getCurrentPriorityLevel,fc=ca.unstable_ImmediatePriority,gc=ca.unstable_UserBlockingPriority,hc=ca.unstable_NormalPriority,ic=ca.unstable_LowPriority,jc=ca.unstable_IdlePriority,kc=null,lc=null;function mc(a){if(lc&&\"function\"===typeof lc.onCommitFiberRoot)try{lc.onCommitFiberRoot(kc,a,void 0,128===(a.current.flags&128))}catch(b){}}\nvar oc=Math.clz32?Math.clz32:nc,pc=Math.log,qc=Math.LN2;function nc(a){a>>>=0;return 0===a?32:31-(pc(a)/qc|0)|0}var rc=64,sc=4194304;\nfunction tc(a){switch(a&-a){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return a&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return a&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;\ndefault:return a}}function uc(a,b){var c=a.pendingLanes;if(0===c)return 0;var d=0,e=a.suspendedLanes,f=a.pingedLanes,g=c&268435455;if(0!==g){var h=g&~e;0!==h?d=tc(h):(f&=g,0!==f&&(d=tc(f)))}else g=c&~e,0!==g?d=tc(g):0!==f&&(d=tc(f));if(0===d)return 0;if(0!==b&&b!==d&&0===(b&e)&&(e=d&-d,f=b&-b,e>=f||16===e&&0!==(f&4194240)))return b;0!==(d&4)&&(d|=c&16);b=a.entangledLanes;if(0!==b)for(a=a.entanglements,b&=d;0<b;)c=31-oc(b),e=1<<c,d|=a[c],b&=~e;return d}\nfunction vc(a,b){switch(a){case 1:case 2:case 4:return b+250;case 8:case 16:case 32:case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return b+5E3;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return-1;case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}\nfunction wc(a,b){for(var c=a.suspendedLanes,d=a.pingedLanes,e=a.expirationTimes,f=a.pendingLanes;0<f;){var g=31-oc(f),h=1<<g,k=e[g];if(-1===k){if(0===(h&c)||0!==(h&d))e[g]=vc(h,b)}else k<=b&&(a.expiredLanes|=h);f&=~h}}function xc(a){a=a.pendingLanes&-1073741825;return 0!==a?a:a&1073741824?1073741824:0}function yc(){var a=rc;rc<<=1;0===(rc&4194240)&&(rc=64);return a}function zc(a){for(var b=[],c=0;31>c;c++)b.push(a);return b}\nfunction Ac(a,b,c){a.pendingLanes|=b;536870912!==b&&(a.suspendedLanes=0,a.pingedLanes=0);a=a.eventTimes;b=31-oc(b);a[b]=c}function Bc(a,b){var c=a.pendingLanes&~b;a.pendingLanes=b;a.suspendedLanes=0;a.pingedLanes=0;a.expiredLanes&=b;a.mutableReadLanes&=b;a.entangledLanes&=b;b=a.entanglements;var d=a.eventTimes;for(a=a.expirationTimes;0<c;){var e=31-oc(c),f=1<<e;b[e]=0;d[e]=-1;a[e]=-1;c&=~f}}\nfunction Cc(a,b){var c=a.entangledLanes|=b;for(a=a.entanglements;c;){var d=31-oc(c),e=1<<d;e&b|a[d]&b&&(a[d]|=b);c&=~e}}var C=0;function Dc(a){a&=-a;return 1<a?4<a?0!==(a&268435455)?16:536870912:4:1}var Ec,Fc,Gc,Hc,Ic,Jc=!1,Kc=[],Lc=null,Mc=null,Nc=null,Oc=new Map,Pc=new Map,Qc=[],Rc=\"mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput copy cut paste click change contextmenu reset submit\".split(\" \");\nfunction Sc(a,b){switch(a){case \"focusin\":case \"focusout\":Lc=null;break;case \"dragenter\":case \"dragleave\":Mc=null;break;case \"mouseover\":case \"mouseout\":Nc=null;break;case \"pointerover\":case \"pointerout\":Oc.delete(b.pointerId);break;case \"gotpointercapture\":case \"lostpointercapture\":Pc.delete(b.pointerId)}}\nfunction Tc(a,b,c,d,e,f){if(null===a||a.nativeEvent!==f)return a={blockedOn:b,domEventName:c,eventSystemFlags:d,nativeEvent:f,targetContainers:[e]},null!==b&&(b=Cb(b),null!==b&&Fc(b)),a;a.eventSystemFlags|=d;b=a.targetContainers;null!==e&&-1===b.indexOf(e)&&b.push(e);return a}\nfunction Uc(a,b,c,d,e){switch(b){case \"focusin\":return Lc=Tc(Lc,a,b,c,d,e),!0;case \"dragenter\":return Mc=Tc(Mc,a,b,c,d,e),!0;case \"mouseover\":return Nc=Tc(Nc,a,b,c,d,e),!0;case \"pointerover\":var f=e.pointerId;Oc.set(f,Tc(Oc.get(f)||null,a,b,c,d,e));return!0;case \"gotpointercapture\":return f=e.pointerId,Pc.set(f,Tc(Pc.get(f)||null,a,b,c,d,e)),!0}return!1}\nfunction Vc(a){var b=Wc(a.target);if(null!==b){var c=Vb(b);if(null!==c)if(b=c.tag,13===b){if(b=Wb(c),null!==b){a.blockedOn=b;Ic(a.priority,function(){Gc(c)});return}}else if(3===b&&c.stateNode.current.memoizedState.isDehydrated){a.blockedOn=3===c.tag?c.stateNode.containerInfo:null;return}}a.blockedOn=null}\nfunction Xc(a){if(null!==a.blockedOn)return!1;for(var b=a.targetContainers;0<b.length;){var c=Yc(a.domEventName,a.eventSystemFlags,b[0],a.nativeEvent);if(null===c){c=a.nativeEvent;var d=new c.constructor(c.type,c);wb=d;c.target.dispatchEvent(d);wb=null}else return b=Cb(c),null!==b&&Fc(b),a.blockedOn=c,!1;b.shift()}return!0}function Zc(a,b,c){Xc(a)&&c.delete(b)}function $c(){Jc=!1;null!==Lc&&Xc(Lc)&&(Lc=null);null!==Mc&&Xc(Mc)&&(Mc=null);null!==Nc&&Xc(Nc)&&(Nc=null);Oc.forEach(Zc);Pc.forEach(Zc)}\nfunction ad(a,b){a.blockedOn===b&&(a.blockedOn=null,Jc||(Jc=!0,ca.unstable_scheduleCallback(ca.unstable_NormalPriority,$c)))}\nfunction bd(a){function b(b){return ad(b,a)}if(0<Kc.length){ad(Kc[0],a);for(var c=1;c<Kc.length;c++){var d=Kc[c];d.blockedOn===a&&(d.blockedOn=null)}}null!==Lc&&ad(Lc,a);null!==Mc&&ad(Mc,a);null!==Nc&&ad(Nc,a);Oc.forEach(b);Pc.forEach(b);for(c=0;c<Qc.length;c++)d=Qc[c],d.blockedOn===a&&(d.blockedOn=null);for(;0<Qc.length&&(c=Qc[0],null===c.blockedOn);)Vc(c),null===c.blockedOn&&Qc.shift()}var cd=ua.ReactCurrentBatchConfig,dd=!0;\nfunction ed(a,b,c,d){var e=C,f=cd.transition;cd.transition=null;try{C=1,fd(a,b,c,d)}finally{C=e,cd.transition=f}}function gd(a,b,c,d){var e=C,f=cd.transition;cd.transition=null;try{C=4,fd(a,b,c,d)}finally{C=e,cd.transition=f}}\nfunction fd(a,b,c,d){if(dd){var e=Yc(a,b,c,d);if(null===e)hd(a,b,d,id,c),Sc(a,d);else if(Uc(e,a,b,c,d))d.stopPropagation();else if(Sc(a,d),b&4&&-1<Rc.indexOf(a)){for(;null!==e;){var f=Cb(e);null!==f&&Ec(f);f=Yc(a,b,c,d);null===f&&hd(a,b,d,id,c);if(f===e)break;e=f}null!==e&&d.stopPropagation()}else hd(a,b,d,null,c)}}var id=null;\nfunction Yc(a,b,c,d){id=null;a=xb(d);a=Wc(a);if(null!==a)if(b=Vb(a),null===b)a=null;else if(c=b.tag,13===c){a=Wb(b);if(null!==a)return a;a=null}else if(3===c){if(b.stateNode.current.memoizedState.isDehydrated)return 3===b.tag?b.stateNode.containerInfo:null;a=null}else b!==a&&(a=null);id=a;return null}\nfunction jd(a){switch(a){case \"cancel\":case \"click\":case \"close\":case \"contextmenu\":case \"copy\":case \"cut\":case \"auxclick\":case \"dblclick\":case \"dragend\":case \"dragstart\":case \"drop\":case \"focusin\":case \"focusout\":case \"input\":case \"invalid\":case \"keydown\":case \"keypress\":case \"keyup\":case \"mousedown\":case \"mouseup\":case \"paste\":case \"pause\":case \"play\":case \"pointercancel\":case \"pointerdown\":case \"pointerup\":case \"ratechange\":case \"reset\":case \"resize\":case \"seeked\":case \"submit\":case \"touchcancel\":case \"touchend\":case \"touchstart\":case \"volumechange\":case \"change\":case \"selectionchange\":case \"textInput\":case \"compositionstart\":case \"compositionend\":case \"compositionupdate\":case \"beforeblur\":case \"afterblur\":case \"beforeinput\":case \"blur\":case \"fullscreenchange\":case \"focus\":case \"hashchange\":case \"popstate\":case \"select\":case \"selectstart\":return 1;case \"drag\":case \"dragenter\":case \"dragexit\":case \"dragleave\":case \"dragover\":case \"mousemove\":case \"mouseout\":case \"mouseover\":case \"pointermove\":case \"pointerout\":case \"pointerover\":case \"scroll\":case \"toggle\":case \"touchmove\":case \"wheel\":case \"mouseenter\":case \"mouseleave\":case \"pointerenter\":case \"pointerleave\":return 4;\ncase \"message\":switch(ec()){case fc:return 1;case gc:return 4;case hc:case ic:return 16;case jc:return 536870912;default:return 16}default:return 16}}var kd=null,ld=null,md=null;function nd(){if(md)return md;var a,b=ld,c=b.length,d,e=\"value\"in kd?kd.value:kd.textContent,f=e.length;for(a=0;a<c&&b[a]===e[a];a++);var g=c-a;for(d=1;d<=g&&b[c-d]===e[f-d];d++);return md=e.slice(a,1<d?1-d:void 0)}\nfunction od(a){var b=a.keyCode;\"charCode\"in a?(a=a.charCode,0===a&&13===b&&(a=13)):a=b;10===a&&(a=13);return 32<=a||13===a?a:0}function pd(){return!0}function qd(){return!1}\nfunction rd(a){function b(b,d,e,f,g){this._reactName=b;this._targetInst=e;this.type=d;this.nativeEvent=f;this.target=g;this.currentTarget=null;for(var c in a)a.hasOwnProperty(c)&&(b=a[c],this[c]=b?b(f):f[c]);this.isDefaultPrevented=(null!=f.defaultPrevented?f.defaultPrevented:!1===f.returnValue)?pd:qd;this.isPropagationStopped=qd;return this}A(b.prototype,{preventDefault:function(){this.defaultPrevented=!0;var a=this.nativeEvent;a&&(a.preventDefault?a.preventDefault():\"unknown\"!==typeof a.returnValue&&\n(a.returnValue=!1),this.isDefaultPrevented=pd)},stopPropagation:function(){var a=this.nativeEvent;a&&(a.stopPropagation?a.stopPropagation():\"unknown\"!==typeof a.cancelBubble&&(a.cancelBubble=!0),this.isPropagationStopped=pd)},persist:function(){},isPersistent:pd});return b}\nvar sd={eventPhase:0,bubbles:0,cancelable:0,timeStamp:function(a){return a.timeStamp||Date.now()},defaultPrevented:0,isTrusted:0},td=rd(sd),ud=A({},sd,{view:0,detail:0}),vd=rd(ud),wd,xd,yd,Ad=A({},ud,{screenX:0,screenY:0,clientX:0,clientY:0,pageX:0,pageY:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,getModifierState:zd,button:0,buttons:0,relatedTarget:function(a){return void 0===a.relatedTarget?a.fromElement===a.srcElement?a.toElement:a.fromElement:a.relatedTarget},movementX:function(a){if(\"movementX\"in\na)return a.movementX;a!==yd&&(yd&&\"mousemove\"===a.type?(wd=a.screenX-yd.screenX,xd=a.screenY-yd.screenY):xd=wd=0,yd=a);return wd},movementY:function(a){return\"movementY\"in a?a.movementY:xd}}),Bd=rd(Ad),Cd=A({},Ad,{dataTransfer:0}),Dd=rd(Cd),Ed=A({},ud,{relatedTarget:0}),Fd=rd(Ed),Gd=A({},sd,{animationName:0,elapsedTime:0,pseudoElement:0}),Hd=rd(Gd),Id=A({},sd,{clipboardData:function(a){return\"clipboardData\"in a?a.clipboardData:window.clipboardData}}),Jd=rd(Id),Kd=A({},sd,{data:0}),Ld=rd(Kd),Md={Esc:\"Escape\",\nSpacebar:\" \",Left:\"ArrowLeft\",Up:\"ArrowUp\",Right:\"ArrowRight\",Down:\"ArrowDown\",Del:\"Delete\",Win:\"OS\",Menu:\"ContextMenu\",Apps:\"ContextMenu\",Scroll:\"ScrollLock\",MozPrintableKey:\"Unidentified\"},Nd={8:\"Backspace\",9:\"Tab\",12:\"Clear\",13:\"Enter\",16:\"Shift\",17:\"Control\",18:\"Alt\",19:\"Pause\",20:\"CapsLock\",27:\"Escape\",32:\" \",33:\"PageUp\",34:\"PageDown\",35:\"End\",36:\"Home\",37:\"ArrowLeft\",38:\"ArrowUp\",39:\"ArrowRight\",40:\"ArrowDown\",45:\"Insert\",46:\"Delete\",112:\"F1\",113:\"F2\",114:\"F3\",115:\"F4\",116:\"F5\",117:\"F6\",118:\"F7\",\n119:\"F8\",120:\"F9\",121:\"F10\",122:\"F11\",123:\"F12\",144:\"NumLock\",145:\"ScrollLock\",224:\"Meta\"},Od={Alt:\"altKey\",Control:\"ctrlKey\",Meta:\"metaKey\",Shift:\"shiftKey\"};function Pd(a){var b=this.nativeEvent;return b.getModifierState?b.getModifierState(a):(a=Od[a])?!!b[a]:!1}function zd(){return Pd}\nvar Qd=A({},ud,{key:function(a){if(a.key){var b=Md[a.key]||a.key;if(\"Unidentified\"!==b)return b}return\"keypress\"===a.type?(a=od(a),13===a?\"Enter\":String.fromCharCode(a)):\"keydown\"===a.type||\"keyup\"===a.type?Nd[a.keyCode]||\"Unidentified\":\"\"},code:0,location:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,repeat:0,locale:0,getModifierState:zd,charCode:function(a){return\"keypress\"===a.type?od(a):0},keyCode:function(a){return\"keydown\"===a.type||\"keyup\"===a.type?a.keyCode:0},which:function(a){return\"keypress\"===\na.type?od(a):\"keydown\"===a.type||\"keyup\"===a.type?a.keyCode:0}}),Rd=rd(Qd),Sd=A({},Ad,{pointerId:0,width:0,height:0,pressure:0,tangentialPressure:0,tiltX:0,tiltY:0,twist:0,pointerType:0,isPrimary:0}),Td=rd(Sd),Ud=A({},ud,{touches:0,targetTouches:0,changedTouches:0,altKey:0,metaKey:0,ctrlKey:0,shiftKey:0,getModifierState:zd}),Vd=rd(Ud),Wd=A({},sd,{propertyName:0,elapsedTime:0,pseudoElement:0}),Xd=rd(Wd),Yd=A({},Ad,{deltaX:function(a){return\"deltaX\"in a?a.deltaX:\"wheelDeltaX\"in a?-a.wheelDeltaX:0},\ndeltaY:function(a){return\"deltaY\"in a?a.deltaY:\"wheelDeltaY\"in a?-a.wheelDeltaY:\"wheelDelta\"in a?-a.wheelDelta:0},deltaZ:0,deltaMode:0}),Zd=rd(Yd),$d=[9,13,27,32],ae=ia&&\"CompositionEvent\"in window,be=null;ia&&\"documentMode\"in document&&(be=document.documentMode);var ce=ia&&\"TextEvent\"in window&&!be,de=ia&&(!ae||be&&8<be&&11>=be),ee=String.fromCharCode(32),fe=!1;\nfunction ge(a,b){switch(a){case \"keyup\":return-1!==$d.indexOf(b.keyCode);case \"keydown\":return 229!==b.keyCode;case \"keypress\":case \"mousedown\":case \"focusout\":return!0;default:return!1}}function he(a){a=a.detail;return\"object\"===typeof a&&\"data\"in a?a.data:null}var ie=!1;function je(a,b){switch(a){case \"compositionend\":return he(b);case \"keypress\":if(32!==b.which)return null;fe=!0;return ee;case \"textInput\":return a=b.data,a===ee&&fe?null:a;default:return null}}\nfunction ke(a,b){if(ie)return\"compositionend\"===a||!ae&&ge(a,b)?(a=nd(),md=ld=kd=null,ie=!1,a):null;switch(a){case \"paste\":return null;case \"keypress\":if(!(b.ctrlKey||b.altKey||b.metaKey)||b.ctrlKey&&b.altKey){if(b.char&&1<b.char.length)return b.char;if(b.which)return String.fromCharCode(b.which)}return null;case \"compositionend\":return de&&\"ko\"!==b.locale?null:b.data;default:return null}}\nvar le={color:!0,date:!0,datetime:!0,\"datetime-local\":!0,email:!0,month:!0,number:!0,password:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0};function me(a){var b=a&&a.nodeName&&a.nodeName.toLowerCase();return\"input\"===b?!!le[a.type]:\"textarea\"===b?!0:!1}function ne(a,b,c,d){Eb(d);b=oe(b,\"onChange\");0<b.length&&(c=new td(\"onChange\",\"change\",null,c,d),a.push({event:c,listeners:b}))}var pe=null,qe=null;function re(a){se(a,0)}function te(a){var b=ue(a);if(Wa(b))return a}\nfunction ve(a,b){if(\"change\"===a)return b}var we=!1;if(ia){var xe;if(ia){var ye=\"oninput\"in document;if(!ye){var ze=document.createElement(\"div\");ze.setAttribute(\"oninput\",\"return;\");ye=\"function\"===typeof ze.oninput}xe=ye}else xe=!1;we=xe&&(!document.documentMode||9<document.documentMode)}function Ae(){pe&&(pe.detachEvent(\"onpropertychange\",Be),qe=pe=null)}function Be(a){if(\"value\"===a.propertyName&&te(qe)){var b=[];ne(b,qe,a,xb(a));Jb(re,b)}}\nfunction Ce(a,b,c){\"focusin\"===a?(Ae(),pe=b,qe=c,pe.attachEvent(\"onpropertychange\",Be)):\"focusout\"===a&&Ae()}function De(a){if(\"selectionchange\"===a||\"keyup\"===a||\"keydown\"===a)return te(qe)}function Ee(a,b){if(\"click\"===a)return te(b)}function Fe(a,b){if(\"input\"===a||\"change\"===a)return te(b)}function Ge(a,b){return a===b&&(0!==a||1/a===1/b)||a!==a&&b!==b}var He=\"function\"===typeof Object.is?Object.is:Ge;\nfunction Ie(a,b){if(He(a,b))return!0;if(\"object\"!==typeof a||null===a||\"object\"!==typeof b||null===b)return!1;var c=Object.keys(a),d=Object.keys(b);if(c.length!==d.length)return!1;for(d=0;d<c.length;d++){var e=c[d];if(!ja.call(b,e)||!He(a[e],b[e]))return!1}return!0}function Je(a){for(;a&&a.firstChild;)a=a.firstChild;return a}\nfunction Ke(a,b){var c=Je(a);a=0;for(var d;c;){if(3===c.nodeType){d=a+c.textContent.length;if(a<=b&&d>=b)return{node:c,offset:b-a};a=d}a:{for(;c;){if(c.nextSibling){c=c.nextSibling;break a}c=c.parentNode}c=void 0}c=Je(c)}}function Le(a,b){return a&&b?a===b?!0:a&&3===a.nodeType?!1:b&&3===b.nodeType?Le(a,b.parentNode):\"contains\"in a?a.contains(b):a.compareDocumentPosition?!!(a.compareDocumentPosition(b)&16):!1:!1}\nfunction Me(){for(var a=window,b=Xa();b instanceof a.HTMLIFrameElement;){try{var c=\"string\"===typeof b.contentWindow.location.href}catch(d){c=!1}if(c)a=b.contentWindow;else break;b=Xa(a.document)}return b}function Ne(a){var b=a&&a.nodeName&&a.nodeName.toLowerCase();return b&&(\"input\"===b&&(\"text\"===a.type||\"search\"===a.type||\"tel\"===a.type||\"url\"===a.type||\"password\"===a.type)||\"textarea\"===b||\"true\"===a.contentEditable)}\nfunction Oe(a){var b=Me(),c=a.focusedElem,d=a.selectionRange;if(b!==c&&c&&c.ownerDocument&&Le(c.ownerDocument.documentElement,c)){if(null!==d&&Ne(c))if(b=d.start,a=d.end,void 0===a&&(a=b),\"selectionStart\"in c)c.selectionStart=b,c.selectionEnd=Math.min(a,c.value.length);else if(a=(b=c.ownerDocument||document)&&b.defaultView||window,a.getSelection){a=a.getSelection();var e=c.textContent.length,f=Math.min(d.start,e);d=void 0===d.end?f:Math.min(d.end,e);!a.extend&&f>d&&(e=d,d=f,f=e);e=Ke(c,f);var g=Ke(c,\nd);e&&g&&(1!==a.rangeCount||a.anchorNode!==e.node||a.anchorOffset!==e.offset||a.focusNode!==g.node||a.focusOffset!==g.offset)&&(b=b.createRange(),b.setStart(e.node,e.offset),a.removeAllRanges(),f>d?(a.addRange(b),a.extend(g.node,g.offset)):(b.setEnd(g.node,g.offset),a.addRange(b)))}b=[];for(a=c;a=a.parentNode;)1===a.nodeType&&b.push({element:a,left:a.scrollLeft,top:a.scrollTop});\"function\"===typeof c.focus&&c.focus();for(c=0;c<b.length;c++)a=b[c],a.element.scrollLeft=a.left,a.element.scrollTop=a.top}}\nvar Pe=ia&&\"documentMode\"in document&&11>=document.documentMode,Qe=null,Re=null,Se=null,Te=!1;\nfunction Ue(a,b,c){var d=c.window===c?c.document:9===c.nodeType?c:c.ownerDocument;Te||null==Qe||Qe!==Xa(d)||(d=Qe,\"selectionStart\"in d&&Ne(d)?d={start:d.selectionStart,end:d.selectionEnd}:(d=(d.ownerDocument&&d.ownerDocument.defaultView||window).getSelection(),d={anchorNode:d.anchorNode,anchorOffset:d.anchorOffset,focusNode:d.focusNode,focusOffset:d.focusOffset}),Se&&Ie(Se,d)||(Se=d,d=oe(Re,\"onSelect\"),0<d.length&&(b=new td(\"onSelect\",\"select\",null,b,c),a.push({event:b,listeners:d}),b.target=Qe)))}\nfunction Ve(a,b){var c={};c[a.toLowerCase()]=b.toLowerCase();c[\"Webkit\"+a]=\"webkit\"+b;c[\"Moz\"+a]=\"moz\"+b;return c}var We={animationend:Ve(\"Animation\",\"AnimationEnd\"),animationiteration:Ve(\"Animation\",\"AnimationIteration\"),animationstart:Ve(\"Animation\",\"AnimationStart\"),transitionend:Ve(\"Transition\",\"TransitionEnd\")},Xe={},Ye={};\nia&&(Ye=document.createElement(\"div\").style,\"AnimationEvent\"in window||(delete We.animationend.animation,delete We.animationiteration.animation,delete We.animationstart.animation),\"TransitionEvent\"in window||delete We.transitionend.transition);function Ze(a){if(Xe[a])return Xe[a];if(!We[a])return a;var b=We[a],c;for(c in b)if(b.hasOwnProperty(c)&&c in Ye)return Xe[a]=b[c];return a}var $e=Ze(\"animationend\"),af=Ze(\"animationiteration\"),bf=Ze(\"animationstart\"),cf=Ze(\"transitionend\"),df=new Map,ef=\"abort auxClick cancel canPlay canPlayThrough click close contextMenu copy cut drag dragEnd dragEnter dragExit dragLeave dragOver dragStart drop durationChange emptied encrypted ended error gotPointerCapture input invalid keyDown keyPress keyUp load loadedData loadedMetadata loadStart lostPointerCapture mouseDown mouseMove mouseOut mouseOver mouseUp paste pause play playing pointerCancel pointerDown pointerMove pointerOut pointerOver pointerUp progress rateChange reset resize seeked seeking stalled submit suspend timeUpdate touchCancel touchEnd touchStart volumeChange scroll toggle touchMove waiting wheel\".split(\" \");\nfunction ff(a,b){df.set(a,b);fa(b,[a])}for(var gf=0;gf<ef.length;gf++){var hf=ef[gf],jf=hf.toLowerCase(),kf=hf[0].toUpperCase()+hf.slice(1);ff(jf,\"on\"+kf)}ff($e,\"onAnimationEnd\");ff(af,\"onAnimationIteration\");ff(bf,\"onAnimationStart\");ff(\"dblclick\",\"onDoubleClick\");ff(\"focusin\",\"onFocus\");ff(\"focusout\",\"onBlur\");ff(cf,\"onTransitionEnd\");ha(\"onMouseEnter\",[\"mouseout\",\"mouseover\"]);ha(\"onMouseLeave\",[\"mouseout\",\"mouseover\"]);ha(\"onPointerEnter\",[\"pointerout\",\"pointerover\"]);\nha(\"onPointerLeave\",[\"pointerout\",\"pointerover\"]);fa(\"onChange\",\"change click focusin focusout input keydown keyup selectionchange\".split(\" \"));fa(\"onSelect\",\"focusout contextmenu dragend focusin keydown keyup mousedown mouseup selectionchange\".split(\" \"));fa(\"onBeforeInput\",[\"compositionend\",\"keypress\",\"textInput\",\"paste\"]);fa(\"onCompositionEnd\",\"compositionend focusout keydown keypress keyup mousedown\".split(\" \"));fa(\"onCompositionStart\",\"compositionstart focusout keydown keypress keyup mousedown\".split(\" \"));\nfa(\"onCompositionUpdate\",\"compositionupdate focusout keydown keypress keyup mousedown\".split(\" \"));var lf=\"abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange resize seeked seeking stalled suspend timeupdate volumechange waiting\".split(\" \"),mf=new Set(\"cancel close invalid load scroll toggle\".split(\" \").concat(lf));\nfunction nf(a,b,c){var d=a.type||\"unknown-event\";a.currentTarget=c;Ub(d,b,void 0,a);a.currentTarget=null}\nfunction se(a,b){b=0!==(b&4);for(var c=0;c<a.length;c++){var d=a[c],e=d.event;d=d.listeners;a:{var f=void 0;if(b)for(var g=d.length-1;0<=g;g--){var h=d[g],k=h.instance,l=h.currentTarget;h=h.listener;if(k!==f&&e.isPropagationStopped())break a;nf(e,h,l);f=k}else for(g=0;g<d.length;g++){h=d[g];k=h.instance;l=h.currentTarget;h=h.listener;if(k!==f&&e.isPropagationStopped())break a;nf(e,h,l);f=k}}}if(Qb)throw a=Rb,Qb=!1,Rb=null,a;}\nfunction D(a,b){var c=b[of];void 0===c&&(c=b[of]=new Set);var d=a+\"__bubble\";c.has(d)||(pf(b,a,2,!1),c.add(d))}function qf(a,b,c){var d=0;b&&(d|=4);pf(c,a,d,b)}var rf=\"_reactListening\"+Math.random().toString(36).slice(2);function sf(a){if(!a[rf]){a[rf]=!0;da.forEach(function(b){\"selectionchange\"!==b&&(mf.has(b)||qf(b,!1,a),qf(b,!0,a))});var b=9===a.nodeType?a:a.ownerDocument;null===b||b[rf]||(b[rf]=!0,qf(\"selectionchange\",!1,b))}}\nfunction pf(a,b,c,d){switch(jd(b)){case 1:var e=ed;break;case 4:e=gd;break;default:e=fd}c=e.bind(null,b,c,a);e=void 0;!Lb||\"touchstart\"!==b&&\"touchmove\"!==b&&\"wheel\"!==b||(e=!0);d?void 0!==e?a.addEventListener(b,c,{capture:!0,passive:e}):a.addEventListener(b,c,!0):void 0!==e?a.addEventListener(b,c,{passive:e}):a.addEventListener(b,c,!1)}\nfunction hd(a,b,c,d,e){var f=d;if(0===(b&1)&&0===(b&2)&&null!==d)a:for(;;){if(null===d)return;var g=d.tag;if(3===g||4===g){var h=d.stateNode.containerInfo;if(h===e||8===h.nodeType&&h.parentNode===e)break;if(4===g)for(g=d.return;null!==g;){var k=g.tag;if(3===k||4===k)if(k=g.stateNode.containerInfo,k===e||8===k.nodeType&&k.parentNode===e)return;g=g.return}for(;null!==h;){g=Wc(h);if(null===g)return;k=g.tag;if(5===k||6===k){d=f=g;continue a}h=h.parentNode}}d=d.return}Jb(function(){var d=f,e=xb(c),g=[];\na:{var h=df.get(a);if(void 0!==h){var k=td,n=a;switch(a){case \"keypress\":if(0===od(c))break a;case \"keydown\":case \"keyup\":k=Rd;break;case \"focusin\":n=\"focus\";k=Fd;break;case \"focusout\":n=\"blur\";k=Fd;break;case \"beforeblur\":case \"afterblur\":k=Fd;break;case \"click\":if(2===c.button)break a;case \"auxclick\":case \"dblclick\":case \"mousedown\":case \"mousemove\":case \"mouseup\":case \"mouseout\":case \"mouseover\":case \"contextmenu\":k=Bd;break;case \"drag\":case \"dragend\":case \"dragenter\":case \"dragexit\":case \"dragleave\":case \"dragover\":case \"dragstart\":case \"drop\":k=\nDd;break;case \"touchcancel\":case \"touchend\":case \"touchmove\":case \"touchstart\":k=Vd;break;case $e:case af:case bf:k=Hd;break;case cf:k=Xd;break;case \"scroll\":k=vd;break;case \"wheel\":k=Zd;break;case \"copy\":case \"cut\":case \"paste\":k=Jd;break;case \"gotpointercapture\":case \"lostpointercapture\":case \"pointercancel\":case \"pointerdown\":case \"pointermove\":case \"pointerout\":case \"pointerover\":case \"pointerup\":k=Td}var t=0!==(b&4),J=!t&&\"scroll\"===a,x=t?null!==h?h+\"Capture\":null:h;t=[];for(var w=d,u;null!==\nw;){u=w;var F=u.stateNode;5===u.tag&&null!==F&&(u=F,null!==x&&(F=Kb(w,x),null!=F&&t.push(tf(w,F,u))));if(J)break;w=w.return}0<t.length&&(h=new k(h,n,null,c,e),g.push({event:h,listeners:t}))}}if(0===(b&7)){a:{h=\"mouseover\"===a||\"pointerover\"===a;k=\"mouseout\"===a||\"pointerout\"===a;if(h&&c!==wb&&(n=c.relatedTarget||c.fromElement)&&(Wc(n)||n[uf]))break a;if(k||h){h=e.window===e?e:(h=e.ownerDocument)?h.defaultView||h.parentWindow:window;if(k){if(n=c.relatedTarget||c.toElement,k=d,n=n?Wc(n):null,null!==\nn&&(J=Vb(n),n!==J||5!==n.tag&&6!==n.tag))n=null}else k=null,n=d;if(k!==n){t=Bd;F=\"onMouseLeave\";x=\"onMouseEnter\";w=\"mouse\";if(\"pointerout\"===a||\"pointerover\"===a)t=Td,F=\"onPointerLeave\",x=\"onPointerEnter\",w=\"pointer\";J=null==k?h:ue(k);u=null==n?h:ue(n);h=new t(F,w+\"leave\",k,c,e);h.target=J;h.relatedTarget=u;F=null;Wc(e)===d&&(t=new t(x,w+\"enter\",n,c,e),t.target=u,t.relatedTarget=J,F=t);J=F;if(k&&n)b:{t=k;x=n;w=0;for(u=t;u;u=vf(u))w++;u=0;for(F=x;F;F=vf(F))u++;for(;0<w-u;)t=vf(t),w--;for(;0<u-w;)x=\nvf(x),u--;for(;w--;){if(t===x||null!==x&&t===x.alternate)break b;t=vf(t);x=vf(x)}t=null}else t=null;null!==k&&wf(g,h,k,t,!1);null!==n&&null!==J&&wf(g,J,n,t,!0)}}}a:{h=d?ue(d):window;k=h.nodeName&&h.nodeName.toLowerCase();if(\"select\"===k||\"input\"===k&&\"file\"===h.type)var na=ve;else if(me(h))if(we)na=Fe;else{na=De;var xa=Ce}else(k=h.nodeName)&&\"input\"===k.toLowerCase()&&(\"checkbox\"===h.type||\"radio\"===h.type)&&(na=Ee);if(na&&(na=na(a,d))){ne(g,na,c,e);break a}xa&&xa(a,h,d);\"focusout\"===a&&(xa=h._wrapperState)&&\nxa.controlled&&\"number\"===h.type&&cb(h,\"number\",h.value)}xa=d?ue(d):window;switch(a){case \"focusin\":if(me(xa)||\"true\"===xa.contentEditable)Qe=xa,Re=d,Se=null;break;case \"focusout\":Se=Re=Qe=null;break;case \"mousedown\":Te=!0;break;case \"contextmenu\":case \"mouseup\":case \"dragend\":Te=!1;Ue(g,c,e);break;case \"selectionchange\":if(Pe)break;case \"keydown\":case \"keyup\":Ue(g,c,e)}var $a;if(ae)b:{switch(a){case \"compositionstart\":var ba=\"onCompositionStart\";break b;case \"compositionend\":ba=\"onCompositionEnd\";\nbreak b;case \"compositionupdate\":ba=\"onCompositionUpdate\";break b}ba=void 0}else ie?ge(a,c)&&(ba=\"onCompositionEnd\"):\"keydown\"===a&&229===c.keyCode&&(ba=\"onCompositionStart\");ba&&(de&&\"ko\"!==c.locale&&(ie||\"onCompositionStart\"!==ba?\"onCompositionEnd\"===ba&&ie&&($a=nd()):(kd=e,ld=\"value\"in kd?kd.value:kd.textContent,ie=!0)),xa=oe(d,ba),0<xa.length&&(ba=new Ld(ba,a,null,c,e),g.push({event:ba,listeners:xa}),$a?ba.data=$a:($a=he(c),null!==$a&&(ba.data=$a))));if($a=ce?je(a,c):ke(a,c))d=oe(d,\"onBeforeInput\"),\n0<d.length&&(e=new Ld(\"onBeforeInput\",\"beforeinput\",null,c,e),g.push({event:e,listeners:d}),e.data=$a)}se(g,b)})}function tf(a,b,c){return{instance:a,listener:b,currentTarget:c}}function oe(a,b){for(var c=b+\"Capture\",d=[];null!==a;){var e=a,f=e.stateNode;5===e.tag&&null!==f&&(e=f,f=Kb(a,c),null!=f&&d.unshift(tf(a,f,e)),f=Kb(a,b),null!=f&&d.push(tf(a,f,e)));a=a.return}return d}function vf(a){if(null===a)return null;do a=a.return;while(a&&5!==a.tag);return a?a:null}\nfunction wf(a,b,c,d,e){for(var f=b._reactName,g=[];null!==c&&c!==d;){var h=c,k=h.alternate,l=h.stateNode;if(null!==k&&k===d)break;5===h.tag&&null!==l&&(h=l,e?(k=Kb(c,f),null!=k&&g.unshift(tf(c,k,h))):e||(k=Kb(c,f),null!=k&&g.push(tf(c,k,h))));c=c.return}0!==g.length&&a.push({event:b,listeners:g})}var xf=/\\r\\n?/g,yf=/\\u0000|\\uFFFD/g;function zf(a){return(\"string\"===typeof a?a:\"\"+a).replace(xf,\"\\n\").replace(yf,\"\")}function Af(a,b,c){b=zf(b);if(zf(a)!==b&&c)throw Error(p(425));}function Bf(){}\nvar Cf=null,Df=null;function Ef(a,b){return\"textarea\"===a||\"noscript\"===a||\"string\"===typeof b.children||\"number\"===typeof b.children||\"object\"===typeof b.dangerouslySetInnerHTML&&null!==b.dangerouslySetInnerHTML&&null!=b.dangerouslySetInnerHTML.__html}\nvar Ff=\"function\"===typeof setTimeout?setTimeout:void 0,Gf=\"function\"===typeof clearTimeout?clearTimeout:void 0,Hf=\"function\"===typeof Promise?Promise:void 0,Jf=\"function\"===typeof queueMicrotask?queueMicrotask:\"undefined\"!==typeof Hf?function(a){return Hf.resolve(null).then(a).catch(If)}:Ff;function If(a){setTimeout(function(){throw a;})}\nfunction Kf(a,b){var c=b,d=0;do{var e=c.nextSibling;a.removeChild(c);if(e&&8===e.nodeType)if(c=e.data,\"/$\"===c){if(0===d){a.removeChild(e);bd(b);return}d--}else\"$\"!==c&&\"$?\"!==c&&\"$!\"!==c||d++;c=e}while(c);bd(b)}function Lf(a){for(;null!=a;a=a.nextSibling){var b=a.nodeType;if(1===b||3===b)break;if(8===b){b=a.data;if(\"$\"===b||\"$!\"===b||\"$?\"===b)break;if(\"/$\"===b)return null}}return a}\nfunction Mf(a){a=a.previousSibling;for(var b=0;a;){if(8===a.nodeType){var c=a.data;if(\"$\"===c||\"$!\"===c||\"$?\"===c){if(0===b)return a;b--}else\"/$\"===c&&b++}a=a.previousSibling}return null}var Nf=Math.random().toString(36).slice(2),Of=\"__reactFiber$\"+Nf,Pf=\"__reactProps$\"+Nf,uf=\"__reactContainer$\"+Nf,of=\"__reactEvents$\"+Nf,Qf=\"__reactListeners$\"+Nf,Rf=\"__reactHandles$\"+Nf;\nfunction Wc(a){var b=a[Of];if(b)return b;for(var c=a.parentNode;c;){if(b=c[uf]||c[Of]){c=b.alternate;if(null!==b.child||null!==c&&null!==c.child)for(a=Mf(a);null!==a;){if(c=a[Of])return c;a=Mf(a)}return b}a=c;c=a.parentNode}return null}function Cb(a){a=a[Of]||a[uf];return!a||5!==a.tag&&6!==a.tag&&13!==a.tag&&3!==a.tag?null:a}function ue(a){if(5===a.tag||6===a.tag)return a.stateNode;throw Error(p(33));}function Db(a){return a[Pf]||null}var Sf=[],Tf=-1;function Uf(a){return{current:a}}\nfunction E(a){0>Tf||(a.current=Sf[Tf],Sf[Tf]=null,Tf--)}function G(a,b){Tf++;Sf[Tf]=a.current;a.current=b}var Vf={},H=Uf(Vf),Wf=Uf(!1),Xf=Vf;function Yf(a,b){var c=a.type.contextTypes;if(!c)return Vf;var d=a.stateNode;if(d&&d.__reactInternalMemoizedUnmaskedChildContext===b)return d.__reactInternalMemoizedMaskedChildContext;var e={},f;for(f in c)e[f]=b[f];d&&(a=a.stateNode,a.__reactInternalMemoizedUnmaskedChildContext=b,a.__reactInternalMemoizedMaskedChildContext=e);return e}\nfunction Zf(a){a=a.childContextTypes;return null!==a&&void 0!==a}function $f(){E(Wf);E(H)}function ag(a,b,c){if(H.current!==Vf)throw Error(p(168));G(H,b);G(Wf,c)}function bg(a,b,c){var d=a.stateNode;b=b.childContextTypes;if(\"function\"!==typeof d.getChildContext)return c;d=d.getChildContext();for(var e in d)if(!(e in b))throw Error(p(108,Ra(a)||\"Unknown\",e));return A({},c,d)}\nfunction cg(a){a=(a=a.stateNode)&&a.__reactInternalMemoizedMergedChildContext||Vf;Xf=H.current;G(H,a);G(Wf,Wf.current);return!0}function dg(a,b,c){var d=a.stateNode;if(!d)throw Error(p(169));c?(a=bg(a,b,Xf),d.__reactInternalMemoizedMergedChildContext=a,E(Wf),E(H),G(H,a)):E(Wf);G(Wf,c)}var eg=null,fg=!1,gg=!1;function hg(a){null===eg?eg=[a]:eg.push(a)}function ig(a){fg=!0;hg(a)}\nfunction jg(){if(!gg&&null!==eg){gg=!0;var a=0,b=C;try{var c=eg;for(C=1;a<c.length;a++){var d=c[a];do d=d(!0);while(null!==d)}eg=null;fg=!1}catch(e){throw null!==eg&&(eg=eg.slice(a+1)),ac(fc,jg),e;}finally{C=b,gg=!1}}return null}var kg=[],lg=0,mg=null,ng=0,og=[],pg=0,qg=null,rg=1,sg=\"\";function tg(a,b){kg[lg++]=ng;kg[lg++]=mg;mg=a;ng=b}\nfunction ug(a,b,c){og[pg++]=rg;og[pg++]=sg;og[pg++]=qg;qg=a;var d=rg;a=sg;var e=32-oc(d)-1;d&=~(1<<e);c+=1;var f=32-oc(b)+e;if(30<f){var g=e-e%5;f=(d&(1<<g)-1).toString(32);d>>=g;e-=g;rg=1<<32-oc(b)+e|c<<e|d;sg=f+a}else rg=1<<f|c<<e|d,sg=a}function vg(a){null!==a.return&&(tg(a,1),ug(a,1,0))}function wg(a){for(;a===mg;)mg=kg[--lg],kg[lg]=null,ng=kg[--lg],kg[lg]=null;for(;a===qg;)qg=og[--pg],og[pg]=null,sg=og[--pg],og[pg]=null,rg=og[--pg],og[pg]=null}var xg=null,yg=null,I=!1,zg=null;\nfunction Ag(a,b){var c=Bg(5,null,null,0);c.elementType=\"DELETED\";c.stateNode=b;c.return=a;b=a.deletions;null===b?(a.deletions=[c],a.flags|=16):b.push(c)}\nfunction Cg(a,b){switch(a.tag){case 5:var c=a.type;b=1!==b.nodeType||c.toLowerCase()!==b.nodeName.toLowerCase()?null:b;return null!==b?(a.stateNode=b,xg=a,yg=Lf(b.firstChild),!0):!1;case 6:return b=\"\"===a.pendingProps||3!==b.nodeType?null:b,null!==b?(a.stateNode=b,xg=a,yg=null,!0):!1;case 13:return b=8!==b.nodeType?null:b,null!==b?(c=null!==qg?{id:rg,overflow:sg}:null,a.memoizedState={dehydrated:b,treeContext:c,retryLane:1073741824},c=Bg(18,null,null,0),c.stateNode=b,c.return=a,a.child=c,xg=a,yg=\nnull,!0):!1;default:return!1}}function Dg(a){return 0!==(a.mode&1)&&0===(a.flags&128)}function Eg(a){if(I){var b=yg;if(b){var c=b;if(!Cg(a,b)){if(Dg(a))throw Error(p(418));b=Lf(c.nextSibling);var d=xg;b&&Cg(a,b)?Ag(d,c):(a.flags=a.flags&-4097|2,I=!1,xg=a)}}else{if(Dg(a))throw Error(p(418));a.flags=a.flags&-4097|2;I=!1;xg=a}}}function Fg(a){for(a=a.return;null!==a&&5!==a.tag&&3!==a.tag&&13!==a.tag;)a=a.return;xg=a}\nfunction Gg(a){if(a!==xg)return!1;if(!I)return Fg(a),I=!0,!1;var b;(b=3!==a.tag)&&!(b=5!==a.tag)&&(b=a.type,b=\"head\"!==b&&\"body\"!==b&&!Ef(a.type,a.memoizedProps));if(b&&(b=yg)){if(Dg(a))throw Hg(),Error(p(418));for(;b;)Ag(a,b),b=Lf(b.nextSibling)}Fg(a);if(13===a.tag){a=a.memoizedState;a=null!==a?a.dehydrated:null;if(!a)throw Error(p(317));a:{a=a.nextSibling;for(b=0;a;){if(8===a.nodeType){var c=a.data;if(\"/$\"===c){if(0===b){yg=Lf(a.nextSibling);break a}b--}else\"$\"!==c&&\"$!\"!==c&&\"$?\"!==c||b++}a=a.nextSibling}yg=\nnull}}else yg=xg?Lf(a.stateNode.nextSibling):null;return!0}function Hg(){for(var a=yg;a;)a=Lf(a.nextSibling)}function Ig(){yg=xg=null;I=!1}function Jg(a){null===zg?zg=[a]:zg.push(a)}var Kg=ua.ReactCurrentBatchConfig;\nfunction Lg(a,b,c){a=c.ref;if(null!==a&&\"function\"!==typeof a&&\"object\"!==typeof a){if(c._owner){c=c._owner;if(c){if(1!==c.tag)throw Error(p(309));var d=c.stateNode}if(!d)throw Error(p(147,a));var e=d,f=\"\"+a;if(null!==b&&null!==b.ref&&\"function\"===typeof b.ref&&b.ref._stringRef===f)return b.ref;b=function(a){var b=e.refs;null===a?delete b[f]:b[f]=a};b._stringRef=f;return b}if(\"string\"!==typeof a)throw Error(p(284));if(!c._owner)throw Error(p(290,a));}return a}\nfunction Mg(a,b){a=Object.prototype.toString.call(b);throw Error(p(31,\"[object Object]\"===a?\"object with keys {\"+Object.keys(b).join(\", \")+\"}\":a));}function Ng(a){var b=a._init;return b(a._payload)}\nfunction Og(a){function b(b,c){if(a){var d=b.deletions;null===d?(b.deletions=[c],b.flags|=16):d.push(c)}}function c(c,d){if(!a)return null;for(;null!==d;)b(c,d),d=d.sibling;return null}function d(a,b){for(a=new Map;null!==b;)null!==b.key?a.set(b.key,b):a.set(b.index,b),b=b.sibling;return a}function e(a,b){a=Pg(a,b);a.index=0;a.sibling=null;return a}function f(b,c,d){b.index=d;if(!a)return b.flags|=1048576,c;d=b.alternate;if(null!==d)return d=d.index,d<c?(b.flags|=2,c):d;b.flags|=2;return c}function g(b){a&&\nnull===b.alternate&&(b.flags|=2);return b}function h(a,b,c,d){if(null===b||6!==b.tag)return b=Qg(c,a.mode,d),b.return=a,b;b=e(b,c);b.return=a;return b}function k(a,b,c,d){var f=c.type;if(f===ya)return m(a,b,c.props.children,d,c.key);if(null!==b&&(b.elementType===f||\"object\"===typeof f&&null!==f&&f.$$typeof===Ha&&Ng(f)===b.type))return d=e(b,c.props),d.ref=Lg(a,b,c),d.return=a,d;d=Rg(c.type,c.key,c.props,null,a.mode,d);d.ref=Lg(a,b,c);d.return=a;return d}function l(a,b,c,d){if(null===b||4!==b.tag||\nb.stateNode.containerInfo!==c.containerInfo||b.stateNode.implementation!==c.implementation)return b=Sg(c,a.mode,d),b.return=a,b;b=e(b,c.children||[]);b.return=a;return b}function m(a,b,c,d,f){if(null===b||7!==b.tag)return b=Tg(c,a.mode,d,f),b.return=a,b;b=e(b,c);b.return=a;return b}function q(a,b,c){if(\"string\"===typeof b&&\"\"!==b||\"number\"===typeof b)return b=Qg(\"\"+b,a.mode,c),b.return=a,b;if(\"object\"===typeof b&&null!==b){switch(b.$$typeof){case va:return c=Rg(b.type,b.key,b.props,null,a.mode,c),\nc.ref=Lg(a,null,b),c.return=a,c;case wa:return b=Sg(b,a.mode,c),b.return=a,b;case Ha:var d=b._init;return q(a,d(b._payload),c)}if(eb(b)||Ka(b))return b=Tg(b,a.mode,c,null),b.return=a,b;Mg(a,b)}return null}function r(a,b,c,d){var e=null!==b?b.key:null;if(\"string\"===typeof c&&\"\"!==c||\"number\"===typeof c)return null!==e?null:h(a,b,\"\"+c,d);if(\"object\"===typeof c&&null!==c){switch(c.$$typeof){case va:return c.key===e?k(a,b,c,d):null;case wa:return c.key===e?l(a,b,c,d):null;case Ha:return e=c._init,r(a,\nb,e(c._payload),d)}if(eb(c)||Ka(c))return null!==e?null:m(a,b,c,d,null);Mg(a,c)}return null}function y(a,b,c,d,e){if(\"string\"===typeof d&&\"\"!==d||\"number\"===typeof d)return a=a.get(c)||null,h(b,a,\"\"+d,e);if(\"object\"===typeof d&&null!==d){switch(d.$$typeof){case va:return a=a.get(null===d.key?c:d.key)||null,k(b,a,d,e);case wa:return a=a.get(null===d.key?c:d.key)||null,l(b,a,d,e);case Ha:var f=d._init;return y(a,b,c,f(d._payload),e)}if(eb(d)||Ka(d))return a=a.get(c)||null,m(b,a,d,e,null);Mg(b,d)}return null}\nfunction n(e,g,h,k){for(var l=null,m=null,u=g,w=g=0,x=null;null!==u&&w<h.length;w++){u.index>w?(x=u,u=null):x=u.sibling;var n=r(e,u,h[w],k);if(null===n){null===u&&(u=x);break}a&&u&&null===n.alternate&&b(e,u);g=f(n,g,w);null===m?l=n:m.sibling=n;m=n;u=x}if(w===h.length)return c(e,u),I&&tg(e,w),l;if(null===u){for(;w<h.length;w++)u=q(e,h[w],k),null!==u&&(g=f(u,g,w),null===m?l=u:m.sibling=u,m=u);I&&tg(e,w);return l}for(u=d(e,u);w<h.length;w++)x=y(u,e,w,h[w],k),null!==x&&(a&&null!==x.alternate&&u.delete(null===\nx.key?w:x.key),g=f(x,g,w),null===m?l=x:m.sibling=x,m=x);a&&u.forEach(function(a){return b(e,a)});I&&tg(e,w);return l}function t(e,g,h,k){var l=Ka(h);if(\"function\"!==typeof l)throw Error(p(150));h=l.call(h);if(null==h)throw Error(p(151));for(var u=l=null,m=g,w=g=0,x=null,n=h.next();null!==m&&!n.done;w++,n=h.next()){m.index>w?(x=m,m=null):x=m.sibling;var t=r(e,m,n.value,k);if(null===t){null===m&&(m=x);break}a&&m&&null===t.alternate&&b(e,m);g=f(t,g,w);null===u?l=t:u.sibling=t;u=t;m=x}if(n.done)return c(e,\nm),I&&tg(e,w),l;if(null===m){for(;!n.done;w++,n=h.next())n=q(e,n.value,k),null!==n&&(g=f(n,g,w),null===u?l=n:u.sibling=n,u=n);I&&tg(e,w);return l}for(m=d(e,m);!n.done;w++,n=h.next())n=y(m,e,w,n.value,k),null!==n&&(a&&null!==n.alternate&&m.delete(null===n.key?w:n.key),g=f(n,g,w),null===u?l=n:u.sibling=n,u=n);a&&m.forEach(function(a){return b(e,a)});I&&tg(e,w);return l}function J(a,d,f,h){\"object\"===typeof f&&null!==f&&f.type===ya&&null===f.key&&(f=f.props.children);if(\"object\"===typeof f&&null!==f){switch(f.$$typeof){case va:a:{for(var k=\nf.key,l=d;null!==l;){if(l.key===k){k=f.type;if(k===ya){if(7===l.tag){c(a,l.sibling);d=e(l,f.props.children);d.return=a;a=d;break a}}else if(l.elementType===k||\"object\"===typeof k&&null!==k&&k.$$typeof===Ha&&Ng(k)===l.type){c(a,l.sibling);d=e(l,f.props);d.ref=Lg(a,l,f);d.return=a;a=d;break a}c(a,l);break}else b(a,l);l=l.sibling}f.type===ya?(d=Tg(f.props.children,a.mode,h,f.key),d.return=a,a=d):(h=Rg(f.type,f.key,f.props,null,a.mode,h),h.ref=Lg(a,d,f),h.return=a,a=h)}return g(a);case wa:a:{for(l=f.key;null!==\nd;){if(d.key===l)if(4===d.tag&&d.stateNode.containerInfo===f.containerInfo&&d.stateNode.implementation===f.implementation){c(a,d.sibling);d=e(d,f.children||[]);d.return=a;a=d;break a}else{c(a,d);break}else b(a,d);d=d.sibling}d=Sg(f,a.mode,h);d.return=a;a=d}return g(a);case Ha:return l=f._init,J(a,d,l(f._payload),h)}if(eb(f))return n(a,d,f,h);if(Ka(f))return t(a,d,f,h);Mg(a,f)}return\"string\"===typeof f&&\"\"!==f||\"number\"===typeof f?(f=\"\"+f,null!==d&&6===d.tag?(c(a,d.sibling),d=e(d,f),d.return=a,a=d):\n(c(a,d),d=Qg(f,a.mode,h),d.return=a,a=d),g(a)):c(a,d)}return J}var Ug=Og(!0),Vg=Og(!1),Wg=Uf(null),Xg=null,Yg=null,Zg=null;function $g(){Zg=Yg=Xg=null}function ah(a){var b=Wg.current;E(Wg);a._currentValue=b}function bh(a,b,c){for(;null!==a;){var d=a.alternate;(a.childLanes&b)!==b?(a.childLanes|=b,null!==d&&(d.childLanes|=b)):null!==d&&(d.childLanes&b)!==b&&(d.childLanes|=b);if(a===c)break;a=a.return}}\nfunction ch(a,b){Xg=a;Zg=Yg=null;a=a.dependencies;null!==a&&null!==a.firstContext&&(0!==(a.lanes&b)&&(dh=!0),a.firstContext=null)}function eh(a){var b=a._currentValue;if(Zg!==a)if(a={context:a,memoizedValue:b,next:null},null===Yg){if(null===Xg)throw Error(p(308));Yg=a;Xg.dependencies={lanes:0,firstContext:a}}else Yg=Yg.next=a;return b}var fh=null;function gh(a){null===fh?fh=[a]:fh.push(a)}\nfunction hh(a,b,c,d){var e=b.interleaved;null===e?(c.next=c,gh(b)):(c.next=e.next,e.next=c);b.interleaved=c;return ih(a,d)}function ih(a,b){a.lanes|=b;var c=a.alternate;null!==c&&(c.lanes|=b);c=a;for(a=a.return;null!==a;)a.childLanes|=b,c=a.alternate,null!==c&&(c.childLanes|=b),c=a,a=a.return;return 3===c.tag?c.stateNode:null}var jh=!1;function kh(a){a.updateQueue={baseState:a.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}\nfunction lh(a,b){a=a.updateQueue;b.updateQueue===a&&(b.updateQueue={baseState:a.baseState,firstBaseUpdate:a.firstBaseUpdate,lastBaseUpdate:a.lastBaseUpdate,shared:a.shared,effects:a.effects})}function mh(a,b){return{eventTime:a,lane:b,tag:0,payload:null,callback:null,next:null}}\nfunction nh(a,b,c){var d=a.updateQueue;if(null===d)return null;d=d.shared;if(0!==(K&2)){var e=d.pending;null===e?b.next=b:(b.next=e.next,e.next=b);d.pending=b;return ih(a,c)}e=d.interleaved;null===e?(b.next=b,gh(d)):(b.next=e.next,e.next=b);d.interleaved=b;return ih(a,c)}function oh(a,b,c){b=b.updateQueue;if(null!==b&&(b=b.shared,0!==(c&4194240))){var d=b.lanes;d&=a.pendingLanes;c|=d;b.lanes=c;Cc(a,c)}}\nfunction ph(a,b){var c=a.updateQueue,d=a.alternate;if(null!==d&&(d=d.updateQueue,c===d)){var e=null,f=null;c=c.firstBaseUpdate;if(null!==c){do{var g={eventTime:c.eventTime,lane:c.lane,tag:c.tag,payload:c.payload,callback:c.callback,next:null};null===f?e=f=g:f=f.next=g;c=c.next}while(null!==c);null===f?e=f=b:f=f.next=b}else e=f=b;c={baseState:d.baseState,firstBaseUpdate:e,lastBaseUpdate:f,shared:d.shared,effects:d.effects};a.updateQueue=c;return}a=c.lastBaseUpdate;null===a?c.firstBaseUpdate=b:a.next=\nb;c.lastBaseUpdate=b}\nfunction qh(a,b,c,d){var e=a.updateQueue;jh=!1;var f=e.firstBaseUpdate,g=e.lastBaseUpdate,h=e.shared.pending;if(null!==h){e.shared.pending=null;var k=h,l=k.next;k.next=null;null===g?f=l:g.next=l;g=k;var m=a.alternate;null!==m&&(m=m.updateQueue,h=m.lastBaseUpdate,h!==g&&(null===h?m.firstBaseUpdate=l:h.next=l,m.lastBaseUpdate=k))}if(null!==f){var q=e.baseState;g=0;m=l=k=null;h=f;do{var r=h.lane,y=h.eventTime;if((d&r)===r){null!==m&&(m=m.next={eventTime:y,lane:0,tag:h.tag,payload:h.payload,callback:h.callback,\nnext:null});a:{var n=a,t=h;r=b;y=c;switch(t.tag){case 1:n=t.payload;if(\"function\"===typeof n){q=n.call(y,q,r);break a}q=n;break a;case 3:n.flags=n.flags&-65537|128;case 0:n=t.payload;r=\"function\"===typeof n?n.call(y,q,r):n;if(null===r||void 0===r)break a;q=A({},q,r);break a;case 2:jh=!0}}null!==h.callback&&0!==h.lane&&(a.flags|=64,r=e.effects,null===r?e.effects=[h]:r.push(h))}else y={eventTime:y,lane:r,tag:h.tag,payload:h.payload,callback:h.callback,next:null},null===m?(l=m=y,k=q):m=m.next=y,g|=r;\nh=h.next;if(null===h)if(h=e.shared.pending,null===h)break;else r=h,h=r.next,r.next=null,e.lastBaseUpdate=r,e.shared.pending=null}while(1);null===m&&(k=q);e.baseState=k;e.firstBaseUpdate=l;e.lastBaseUpdate=m;b=e.shared.interleaved;if(null!==b){e=b;do g|=e.lane,e=e.next;while(e!==b)}else null===f&&(e.shared.lanes=0);rh|=g;a.lanes=g;a.memoizedState=q}}\nfunction sh(a,b,c){a=b.effects;b.effects=null;if(null!==a)for(b=0;b<a.length;b++){var d=a[b],e=d.callback;if(null!==e){d.callback=null;d=c;if(\"function\"!==typeof e)throw Error(p(191,e));e.call(d)}}}var th={},uh=Uf(th),vh=Uf(th),wh=Uf(th);function xh(a){if(a===th)throw Error(p(174));return a}\nfunction yh(a,b){G(wh,b);G(vh,a);G(uh,th);a=b.nodeType;switch(a){case 9:case 11:b=(b=b.documentElement)?b.namespaceURI:lb(null,\"\");break;default:a=8===a?b.parentNode:b,b=a.namespaceURI||null,a=a.tagName,b=lb(b,a)}E(uh);G(uh,b)}function zh(){E(uh);E(vh);E(wh)}function Ah(a){xh(wh.current);var b=xh(uh.current);var c=lb(b,a.type);b!==c&&(G(vh,a),G(uh,c))}function Bh(a){vh.current===a&&(E(uh),E(vh))}var L=Uf(0);\nfunction Ch(a){for(var b=a;null!==b;){if(13===b.tag){var c=b.memoizedState;if(null!==c&&(c=c.dehydrated,null===c||\"$?\"===c.data||\"$!\"===c.data))return b}else if(19===b.tag&&void 0!==b.memoizedProps.revealOrder){if(0!==(b.flags&128))return b}else if(null!==b.child){b.child.return=b;b=b.child;continue}if(b===a)break;for(;null===b.sibling;){if(null===b.return||b.return===a)return null;b=b.return}b.sibling.return=b.return;b=b.sibling}return null}var Dh=[];\nfunction Eh(){for(var a=0;a<Dh.length;a++)Dh[a]._workInProgressVersionPrimary=null;Dh.length=0}var Fh=ua.ReactCurrentDispatcher,Gh=ua.ReactCurrentBatchConfig,Hh=0,M=null,N=null,O=null,Ih=!1,Jh=!1,Kh=0,Lh=0;function P(){throw Error(p(321));}function Mh(a,b){if(null===b)return!1;for(var c=0;c<b.length&&c<a.length;c++)if(!He(a[c],b[c]))return!1;return!0}\nfunction Nh(a,b,c,d,e,f){Hh=f;M=b;b.memoizedState=null;b.updateQueue=null;b.lanes=0;Fh.current=null===a||null===a.memoizedState?Oh:Ph;a=c(d,e);if(Jh){f=0;do{Jh=!1;Kh=0;if(25<=f)throw Error(p(301));f+=1;O=N=null;b.updateQueue=null;Fh.current=Qh;a=c(d,e)}while(Jh)}Fh.current=Rh;b=null!==N&&null!==N.next;Hh=0;O=N=M=null;Ih=!1;if(b)throw Error(p(300));return a}function Sh(){var a=0!==Kh;Kh=0;return a}\nfunction Th(){var a={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};null===O?M.memoizedState=O=a:O=O.next=a;return O}function Uh(){if(null===N){var a=M.alternate;a=null!==a?a.memoizedState:null}else a=N.next;var b=null===O?M.memoizedState:O.next;if(null!==b)O=b,N=a;else{if(null===a)throw Error(p(310));N=a;a={memoizedState:N.memoizedState,baseState:N.baseState,baseQueue:N.baseQueue,queue:N.queue,next:null};null===O?M.memoizedState=O=a:O=O.next=a}return O}\nfunction Vh(a,b){return\"function\"===typeof b?b(a):b}\nfunction Wh(a){var b=Uh(),c=b.queue;if(null===c)throw Error(p(311));c.lastRenderedReducer=a;var d=N,e=d.baseQueue,f=c.pending;if(null!==f){if(null!==e){var g=e.next;e.next=f.next;f.next=g}d.baseQueue=e=f;c.pending=null}if(null!==e){f=e.next;d=d.baseState;var h=g=null,k=null,l=f;do{var m=l.lane;if((Hh&m)===m)null!==k&&(k=k.next={lane:0,action:l.action,hasEagerState:l.hasEagerState,eagerState:l.eagerState,next:null}),d=l.hasEagerState?l.eagerState:a(d,l.action);else{var q={lane:m,action:l.action,hasEagerState:l.hasEagerState,\neagerState:l.eagerState,next:null};null===k?(h=k=q,g=d):k=k.next=q;M.lanes|=m;rh|=m}l=l.next}while(null!==l&&l!==f);null===k?g=d:k.next=h;He(d,b.memoizedState)||(dh=!0);b.memoizedState=d;b.baseState=g;b.baseQueue=k;c.lastRenderedState=d}a=c.interleaved;if(null!==a){e=a;do f=e.lane,M.lanes|=f,rh|=f,e=e.next;while(e!==a)}else null===e&&(c.lanes=0);return[b.memoizedState,c.dispatch]}\nfunction Xh(a){var b=Uh(),c=b.queue;if(null===c)throw Error(p(311));c.lastRenderedReducer=a;var d=c.dispatch,e=c.pending,f=b.memoizedState;if(null!==e){c.pending=null;var g=e=e.next;do f=a(f,g.action),g=g.next;while(g!==e);He(f,b.memoizedState)||(dh=!0);b.memoizedState=f;null===b.baseQueue&&(b.baseState=f);c.lastRenderedState=f}return[f,d]}function Yh(){}\nfunction Zh(a,b){var c=M,d=Uh(),e=b(),f=!He(d.memoizedState,e);f&&(d.memoizedState=e,dh=!0);d=d.queue;$h(ai.bind(null,c,d,a),[a]);if(d.getSnapshot!==b||f||null!==O&&O.memoizedState.tag&1){c.flags|=2048;bi(9,ci.bind(null,c,d,e,b),void 0,null);if(null===Q)throw Error(p(349));0!==(Hh&30)||di(c,b,e)}return e}function di(a,b,c){a.flags|=16384;a={getSnapshot:b,value:c};b=M.updateQueue;null===b?(b={lastEffect:null,stores:null},M.updateQueue=b,b.stores=[a]):(c=b.stores,null===c?b.stores=[a]:c.push(a))}\nfunction ci(a,b,c,d){b.value=c;b.getSnapshot=d;ei(b)&&fi(a)}function ai(a,b,c){return c(function(){ei(b)&&fi(a)})}function ei(a){var b=a.getSnapshot;a=a.value;try{var c=b();return!He(a,c)}catch(d){return!0}}function fi(a){var b=ih(a,1);null!==b&&gi(b,a,1,-1)}\nfunction hi(a){var b=Th();\"function\"===typeof a&&(a=a());b.memoizedState=b.baseState=a;a={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:Vh,lastRenderedState:a};b.queue=a;a=a.dispatch=ii.bind(null,M,a);return[b.memoizedState,a]}\nfunction bi(a,b,c,d){a={tag:a,create:b,destroy:c,deps:d,next:null};b=M.updateQueue;null===b?(b={lastEffect:null,stores:null},M.updateQueue=b,b.lastEffect=a.next=a):(c=b.lastEffect,null===c?b.lastEffect=a.next=a:(d=c.next,c.next=a,a.next=d,b.lastEffect=a));return a}function ji(){return Uh().memoizedState}function ki(a,b,c,d){var e=Th();M.flags|=a;e.memoizedState=bi(1|b,c,void 0,void 0===d?null:d)}\nfunction li(a,b,c,d){var e=Uh();d=void 0===d?null:d;var f=void 0;if(null!==N){var g=N.memoizedState;f=g.destroy;if(null!==d&&Mh(d,g.deps)){e.memoizedState=bi(b,c,f,d);return}}M.flags|=a;e.memoizedState=bi(1|b,c,f,d)}function mi(a,b){return ki(8390656,8,a,b)}function $h(a,b){return li(2048,8,a,b)}function ni(a,b){return li(4,2,a,b)}function oi(a,b){return li(4,4,a,b)}\nfunction pi(a,b){if(\"function\"===typeof b)return a=a(),b(a),function(){b(null)};if(null!==b&&void 0!==b)return a=a(),b.current=a,function(){b.current=null}}function qi(a,b,c){c=null!==c&&void 0!==c?c.concat([a]):null;return li(4,4,pi.bind(null,b,a),c)}function ri(){}function si(a,b){var c=Uh();b=void 0===b?null:b;var d=c.memoizedState;if(null!==d&&null!==b&&Mh(b,d[1]))return d[0];c.memoizedState=[a,b];return a}\nfunction ti(a,b){var c=Uh();b=void 0===b?null:b;var d=c.memoizedState;if(null!==d&&null!==b&&Mh(b,d[1]))return d[0];a=a();c.memoizedState=[a,b];return a}function ui(a,b,c){if(0===(Hh&21))return a.baseState&&(a.baseState=!1,dh=!0),a.memoizedState=c;He(c,b)||(c=yc(),M.lanes|=c,rh|=c,a.baseState=!0);return b}function vi(a,b){var c=C;C=0!==c&&4>c?c:4;a(!0);var d=Gh.transition;Gh.transition={};try{a(!1),b()}finally{C=c,Gh.transition=d}}function wi(){return Uh().memoizedState}\nfunction xi(a,b,c){var d=yi(a);c={lane:d,action:c,hasEagerState:!1,eagerState:null,next:null};if(zi(a))Ai(b,c);else if(c=hh(a,b,c,d),null!==c){var e=R();gi(c,a,d,e);Bi(c,b,d)}}\nfunction ii(a,b,c){var d=yi(a),e={lane:d,action:c,hasEagerState:!1,eagerState:null,next:null};if(zi(a))Ai(b,e);else{var f=a.alternate;if(0===a.lanes&&(null===f||0===f.lanes)&&(f=b.lastRenderedReducer,null!==f))try{var g=b.lastRenderedState,h=f(g,c);e.hasEagerState=!0;e.eagerState=h;if(He(h,g)){var k=b.interleaved;null===k?(e.next=e,gh(b)):(e.next=k.next,k.next=e);b.interleaved=e;return}}catch(l){}finally{}c=hh(a,b,e,d);null!==c&&(e=R(),gi(c,a,d,e),Bi(c,b,d))}}\nfunction zi(a){var b=a.alternate;return a===M||null!==b&&b===M}function Ai(a,b){Jh=Ih=!0;var c=a.pending;null===c?b.next=b:(b.next=c.next,c.next=b);a.pending=b}function Bi(a,b,c){if(0!==(c&4194240)){var d=b.lanes;d&=a.pendingLanes;c|=d;b.lanes=c;Cc(a,c)}}\nvar Rh={readContext:eh,useCallback:P,useContext:P,useEffect:P,useImperativeHandle:P,useInsertionEffect:P,useLayoutEffect:P,useMemo:P,useReducer:P,useRef:P,useState:P,useDebugValue:P,useDeferredValue:P,useTransition:P,useMutableSource:P,useSyncExternalStore:P,useId:P,unstable_isNewReconciler:!1},Oh={readContext:eh,useCallback:function(a,b){Th().memoizedState=[a,void 0===b?null:b];return a},useContext:eh,useEffect:mi,useImperativeHandle:function(a,b,c){c=null!==c&&void 0!==c?c.concat([a]):null;return ki(4194308,\n4,pi.bind(null,b,a),c)},useLayoutEffect:function(a,b){return ki(4194308,4,a,b)},useInsertionEffect:function(a,b){return ki(4,2,a,b)},useMemo:function(a,b){var c=Th();b=void 0===b?null:b;a=a();c.memoizedState=[a,b];return a},useReducer:function(a,b,c){var d=Th();b=void 0!==c?c(b):b;d.memoizedState=d.baseState=b;a={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:a,lastRenderedState:b};d.queue=a;a=a.dispatch=xi.bind(null,M,a);return[d.memoizedState,a]},useRef:function(a){var b=\nTh();a={current:a};return b.memoizedState=a},useState:hi,useDebugValue:ri,useDeferredValue:function(a){return Th().memoizedState=a},useTransition:function(){var a=hi(!1),b=a[0];a=vi.bind(null,a[1]);Th().memoizedState=a;return[b,a]},useMutableSource:function(){},useSyncExternalStore:function(a,b,c){var d=M,e=Th();if(I){if(void 0===c)throw Error(p(407));c=c()}else{c=b();if(null===Q)throw Error(p(349));0!==(Hh&30)||di(d,b,c)}e.memoizedState=c;var f={value:c,getSnapshot:b};e.queue=f;mi(ai.bind(null,d,\nf,a),[a]);d.flags|=2048;bi(9,ci.bind(null,d,f,c,b),void 0,null);return c},useId:function(){var a=Th(),b=Q.identifierPrefix;if(I){var c=sg;var d=rg;c=(d&~(1<<32-oc(d)-1)).toString(32)+c;b=\":\"+b+\"R\"+c;c=Kh++;0<c&&(b+=\"H\"+c.toString(32));b+=\":\"}else c=Lh++,b=\":\"+b+\"r\"+c.toString(32)+\":\";return a.memoizedState=b},unstable_isNewReconciler:!1},Ph={readContext:eh,useCallback:si,useContext:eh,useEffect:$h,useImperativeHandle:qi,useInsertionEffect:ni,useLayoutEffect:oi,useMemo:ti,useReducer:Wh,useRef:ji,useState:function(){return Wh(Vh)},\nuseDebugValue:ri,useDeferredValue:function(a){var b=Uh();return ui(b,N.memoizedState,a)},useTransition:function(){var a=Wh(Vh)[0],b=Uh().memoizedState;return[a,b]},useMutableSource:Yh,useSyncExternalStore:Zh,useId:wi,unstable_isNewReconciler:!1},Qh={readContext:eh,useCallback:si,useContext:eh,useEffect:$h,useImperativeHandle:qi,useInsertionEffect:ni,useLayoutEffect:oi,useMemo:ti,useReducer:Xh,useRef:ji,useState:function(){return Xh(Vh)},useDebugValue:ri,useDeferredValue:function(a){var b=Uh();return null===\nN?b.memoizedState=a:ui(b,N.memoizedState,a)},useTransition:function(){var a=Xh(Vh)[0],b=Uh().memoizedState;return[a,b]},useMutableSource:Yh,useSyncExternalStore:Zh,useId:wi,unstable_isNewReconciler:!1};function Ci(a,b){if(a&&a.defaultProps){b=A({},b);a=a.defaultProps;for(var c in a)void 0===b[c]&&(b[c]=a[c]);return b}return b}function Di(a,b,c,d){b=a.memoizedState;c=c(d,b);c=null===c||void 0===c?b:A({},b,c);a.memoizedState=c;0===a.lanes&&(a.updateQueue.baseState=c)}\nvar Ei={isMounted:function(a){return(a=a._reactInternals)?Vb(a)===a:!1},enqueueSetState:function(a,b,c){a=a._reactInternals;var d=R(),e=yi(a),f=mh(d,e);f.payload=b;void 0!==c&&null!==c&&(f.callback=c);b=nh(a,f,e);null!==b&&(gi(b,a,e,d),oh(b,a,e))},enqueueReplaceState:function(a,b,c){a=a._reactInternals;var d=R(),e=yi(a),f=mh(d,e);f.tag=1;f.payload=b;void 0!==c&&null!==c&&(f.callback=c);b=nh(a,f,e);null!==b&&(gi(b,a,e,d),oh(b,a,e))},enqueueForceUpdate:function(a,b){a=a._reactInternals;var c=R(),d=\nyi(a),e=mh(c,d);e.tag=2;void 0!==b&&null!==b&&(e.callback=b);b=nh(a,e,d);null!==b&&(gi(b,a,d,c),oh(b,a,d))}};function Fi(a,b,c,d,e,f,g){a=a.stateNode;return\"function\"===typeof a.shouldComponentUpdate?a.shouldComponentUpdate(d,f,g):b.prototype&&b.prototype.isPureReactComponent?!Ie(c,d)||!Ie(e,f):!0}\nfunction Gi(a,b,c){var d=!1,e=Vf;var f=b.contextType;\"object\"===typeof f&&null!==f?f=eh(f):(e=Zf(b)?Xf:H.current,d=b.contextTypes,f=(d=null!==d&&void 0!==d)?Yf(a,e):Vf);b=new b(c,f);a.memoizedState=null!==b.state&&void 0!==b.state?b.state:null;b.updater=Ei;a.stateNode=b;b._reactInternals=a;d&&(a=a.stateNode,a.__reactInternalMemoizedUnmaskedChildContext=e,a.__reactInternalMemoizedMaskedChildContext=f);return b}\nfunction Hi(a,b,c,d){a=b.state;\"function\"===typeof b.componentWillReceiveProps&&b.componentWillReceiveProps(c,d);\"function\"===typeof b.UNSAFE_componentWillReceiveProps&&b.UNSAFE_componentWillReceiveProps(c,d);b.state!==a&&Ei.enqueueReplaceState(b,b.state,null)}\nfunction Ii(a,b,c,d){var e=a.stateNode;e.props=c;e.state=a.memoizedState;e.refs={};kh(a);var f=b.contextType;\"object\"===typeof f&&null!==f?e.context=eh(f):(f=Zf(b)?Xf:H.current,e.context=Yf(a,f));e.state=a.memoizedState;f=b.getDerivedStateFromProps;\"function\"===typeof f&&(Di(a,b,f,c),e.state=a.memoizedState);\"function\"===typeof b.getDerivedStateFromProps||\"function\"===typeof e.getSnapshotBeforeUpdate||\"function\"!==typeof e.UNSAFE_componentWillMount&&\"function\"!==typeof e.componentWillMount||(b=e.state,\n\"function\"===typeof e.componentWillMount&&e.componentWillMount(),\"function\"===typeof e.UNSAFE_componentWillMount&&e.UNSAFE_componentWillMount(),b!==e.state&&Ei.enqueueReplaceState(e,e.state,null),qh(a,c,e,d),e.state=a.memoizedState);\"function\"===typeof e.componentDidMount&&(a.flags|=4194308)}function Ji(a,b){try{var c=\"\",d=b;do c+=Pa(d),d=d.return;while(d);var e=c}catch(f){e=\"\\nError generating stack: \"+f.message+\"\\n\"+f.stack}return{value:a,source:b,stack:e,digest:null}}\nfunction Ki(a,b,c){return{value:a,source:null,stack:null!=c?c:null,digest:null!=b?b:null}}function Li(a,b){try{console.error(b.value)}catch(c){setTimeout(function(){throw c;})}}var Mi=\"function\"===typeof WeakMap?WeakMap:Map;function Ni(a,b,c){c=mh(-1,c);c.tag=3;c.payload={element:null};var d=b.value;c.callback=function(){Oi||(Oi=!0,Pi=d);Li(a,b)};return c}\nfunction Qi(a,b,c){c=mh(-1,c);c.tag=3;var d=a.type.getDerivedStateFromError;if(\"function\"===typeof d){var e=b.value;c.payload=function(){return d(e)};c.callback=function(){Li(a,b)}}var f=a.stateNode;null!==f&&\"function\"===typeof f.componentDidCatch&&(c.callback=function(){Li(a,b);\"function\"!==typeof d&&(null===Ri?Ri=new Set([this]):Ri.add(this));var c=b.stack;this.componentDidCatch(b.value,{componentStack:null!==c?c:\"\"})});return c}\nfunction Si(a,b,c){var d=a.pingCache;if(null===d){d=a.pingCache=new Mi;var e=new Set;d.set(b,e)}else e=d.get(b),void 0===e&&(e=new Set,d.set(b,e));e.has(c)||(e.add(c),a=Ti.bind(null,a,b,c),b.then(a,a))}function Ui(a){do{var b;if(b=13===a.tag)b=a.memoizedState,b=null!==b?null!==b.dehydrated?!0:!1:!0;if(b)return a;a=a.return}while(null!==a);return null}\nfunction Vi(a,b,c,d,e){if(0===(a.mode&1))return a===b?a.flags|=65536:(a.flags|=128,c.flags|=131072,c.flags&=-52805,1===c.tag&&(null===c.alternate?c.tag=17:(b=mh(-1,1),b.tag=2,nh(c,b,1))),c.lanes|=1),a;a.flags|=65536;a.lanes=e;return a}var Wi=ua.ReactCurrentOwner,dh=!1;function Xi(a,b,c,d){b.child=null===a?Vg(b,null,c,d):Ug(b,a.child,c,d)}\nfunction Yi(a,b,c,d,e){c=c.render;var f=b.ref;ch(b,e);d=Nh(a,b,c,d,f,e);c=Sh();if(null!==a&&!dh)return b.updateQueue=a.updateQueue,b.flags&=-2053,a.lanes&=~e,Zi(a,b,e);I&&c&&vg(b);b.flags|=1;Xi(a,b,d,e);return b.child}\nfunction $i(a,b,c,d,e){if(null===a){var f=c.type;if(\"function\"===typeof f&&!aj(f)&&void 0===f.defaultProps&&null===c.compare&&void 0===c.defaultProps)return b.tag=15,b.type=f,bj(a,b,f,d,e);a=Rg(c.type,null,d,b,b.mode,e);a.ref=b.ref;a.return=b;return b.child=a}f=a.child;if(0===(a.lanes&e)){var g=f.memoizedProps;c=c.compare;c=null!==c?c:Ie;if(c(g,d)&&a.ref===b.ref)return Zi(a,b,e)}b.flags|=1;a=Pg(f,d);a.ref=b.ref;a.return=b;return b.child=a}\nfunction bj(a,b,c,d,e){if(null!==a){var f=a.memoizedProps;if(Ie(f,d)&&a.ref===b.ref)if(dh=!1,b.pendingProps=d=f,0!==(a.lanes&e))0!==(a.flags&131072)&&(dh=!0);else return b.lanes=a.lanes,Zi(a,b,e)}return cj(a,b,c,d,e)}\nfunction dj(a,b,c){var d=b.pendingProps,e=d.children,f=null!==a?a.memoizedState:null;if(\"hidden\"===d.mode)if(0===(b.mode&1))b.memoizedState={baseLanes:0,cachePool:null,transitions:null},G(ej,fj),fj|=c;else{if(0===(c&1073741824))return a=null!==f?f.baseLanes|c:c,b.lanes=b.childLanes=1073741824,b.memoizedState={baseLanes:a,cachePool:null,transitions:null},b.updateQueue=null,G(ej,fj),fj|=a,null;b.memoizedState={baseLanes:0,cachePool:null,transitions:null};d=null!==f?f.baseLanes:c;G(ej,fj);fj|=d}else null!==\nf?(d=f.baseLanes|c,b.memoizedState=null):d=c,G(ej,fj),fj|=d;Xi(a,b,e,c);return b.child}function gj(a,b){var c=b.ref;if(null===a&&null!==c||null!==a&&a.ref!==c)b.flags|=512,b.flags|=2097152}function cj(a,b,c,d,e){var f=Zf(c)?Xf:H.current;f=Yf(b,f);ch(b,e);c=Nh(a,b,c,d,f,e);d=Sh();if(null!==a&&!dh)return b.updateQueue=a.updateQueue,b.flags&=-2053,a.lanes&=~e,Zi(a,b,e);I&&d&&vg(b);b.flags|=1;Xi(a,b,c,e);return b.child}\nfunction hj(a,b,c,d,e){if(Zf(c)){var f=!0;cg(b)}else f=!1;ch(b,e);if(null===b.stateNode)ij(a,b),Gi(b,c,d),Ii(b,c,d,e),d=!0;else if(null===a){var g=b.stateNode,h=b.memoizedProps;g.props=h;var k=g.context,l=c.contextType;\"object\"===typeof l&&null!==l?l=eh(l):(l=Zf(c)?Xf:H.current,l=Yf(b,l));var m=c.getDerivedStateFromProps,q=\"function\"===typeof m||\"function\"===typeof g.getSnapshotBeforeUpdate;q||\"function\"!==typeof g.UNSAFE_componentWillReceiveProps&&\"function\"!==typeof g.componentWillReceiveProps||\n(h!==d||k!==l)&&Hi(b,g,d,l);jh=!1;var r=b.memoizedState;g.state=r;qh(b,d,g,e);k=b.memoizedState;h!==d||r!==k||Wf.current||jh?(\"function\"===typeof m&&(Di(b,c,m,d),k=b.memoizedState),(h=jh||Fi(b,c,h,d,r,k,l))?(q||\"function\"!==typeof g.UNSAFE_componentWillMount&&\"function\"!==typeof g.componentWillMount||(\"function\"===typeof g.componentWillMount&&g.componentWillMount(),\"function\"===typeof g.UNSAFE_componentWillMount&&g.UNSAFE_componentWillMount()),\"function\"===typeof g.componentDidMount&&(b.flags|=4194308)):\n(\"function\"===typeof g.componentDidMount&&(b.flags|=4194308),b.memoizedProps=d,b.memoizedState=k),g.props=d,g.state=k,g.context=l,d=h):(\"function\"===typeof g.componentDidMount&&(b.flags|=4194308),d=!1)}else{g=b.stateNode;lh(a,b);h=b.memoizedProps;l=b.type===b.elementType?h:Ci(b.type,h);g.props=l;q=b.pendingProps;r=g.context;k=c.contextType;\"object\"===typeof k&&null!==k?k=eh(k):(k=Zf(c)?Xf:H.current,k=Yf(b,k));var y=c.getDerivedStateFromProps;(m=\"function\"===typeof y||\"function\"===typeof g.getSnapshotBeforeUpdate)||\n\"function\"!==typeof g.UNSAFE_componentWillReceiveProps&&\"function\"!==typeof g.componentWillReceiveProps||(h!==q||r!==k)&&Hi(b,g,d,k);jh=!1;r=b.memoizedState;g.state=r;qh(b,d,g,e);var n=b.memoizedState;h!==q||r!==n||Wf.current||jh?(\"function\"===typeof y&&(Di(b,c,y,d),n=b.memoizedState),(l=jh||Fi(b,c,l,d,r,n,k)||!1)?(m||\"function\"!==typeof g.UNSAFE_componentWillUpdate&&\"function\"!==typeof g.componentWillUpdate||(\"function\"===typeof g.componentWillUpdate&&g.componentWillUpdate(d,n,k),\"function\"===typeof g.UNSAFE_componentWillUpdate&&\ng.UNSAFE_componentWillUpdate(d,n,k)),\"function\"===typeof g.componentDidUpdate&&(b.flags|=4),\"function\"===typeof g.getSnapshotBeforeUpdate&&(b.flags|=1024)):(\"function\"!==typeof g.componentDidUpdate||h===a.memoizedProps&&r===a.memoizedState||(b.flags|=4),\"function\"!==typeof g.getSnapshotBeforeUpdate||h===a.memoizedProps&&r===a.memoizedState||(b.flags|=1024),b.memoizedProps=d,b.memoizedState=n),g.props=d,g.state=n,g.context=k,d=l):(\"function\"!==typeof g.componentDidUpdate||h===a.memoizedProps&&r===\na.memoizedState||(b.flags|=4),\"function\"!==typeof g.getSnapshotBeforeUpdate||h===a.memoizedProps&&r===a.memoizedState||(b.flags|=1024),d=!1)}return jj(a,b,c,d,f,e)}\nfunction jj(a,b,c,d,e,f){gj(a,b);var g=0!==(b.flags&128);if(!d&&!g)return e&&dg(b,c,!1),Zi(a,b,f);d=b.stateNode;Wi.current=b;var h=g&&\"function\"!==typeof c.getDerivedStateFromError?null:d.render();b.flags|=1;null!==a&&g?(b.child=Ug(b,a.child,null,f),b.child=Ug(b,null,h,f)):Xi(a,b,h,f);b.memoizedState=d.state;e&&dg(b,c,!0);return b.child}function kj(a){var b=a.stateNode;b.pendingContext?ag(a,b.pendingContext,b.pendingContext!==b.context):b.context&&ag(a,b.context,!1);yh(a,b.containerInfo)}\nfunction lj(a,b,c,d,e){Ig();Jg(e);b.flags|=256;Xi(a,b,c,d);return b.child}var mj={dehydrated:null,treeContext:null,retryLane:0};function nj(a){return{baseLanes:a,cachePool:null,transitions:null}}\nfunction oj(a,b,c){var d=b.pendingProps,e=L.current,f=!1,g=0!==(b.flags&128),h;(h=g)||(h=null!==a&&null===a.memoizedState?!1:0!==(e&2));if(h)f=!0,b.flags&=-129;else if(null===a||null!==a.memoizedState)e|=1;G(L,e&1);if(null===a){Eg(b);a=b.memoizedState;if(null!==a&&(a=a.dehydrated,null!==a))return 0===(b.mode&1)?b.lanes=1:\"$!\"===a.data?b.lanes=8:b.lanes=1073741824,null;g=d.children;a=d.fallback;return f?(d=b.mode,f=b.child,g={mode:\"hidden\",children:g},0===(d&1)&&null!==f?(f.childLanes=0,f.pendingProps=\ng):f=pj(g,d,0,null),a=Tg(a,d,c,null),f.return=b,a.return=b,f.sibling=a,b.child=f,b.child.memoizedState=nj(c),b.memoizedState=mj,a):qj(b,g)}e=a.memoizedState;if(null!==e&&(h=e.dehydrated,null!==h))return rj(a,b,g,d,h,e,c);if(f){f=d.fallback;g=b.mode;e=a.child;h=e.sibling;var k={mode:\"hidden\",children:d.children};0===(g&1)&&b.child!==e?(d=b.child,d.childLanes=0,d.pendingProps=k,b.deletions=null):(d=Pg(e,k),d.subtreeFlags=e.subtreeFlags&14680064);null!==h?f=Pg(h,f):(f=Tg(f,g,c,null),f.flags|=2);f.return=\nb;d.return=b;d.sibling=f;b.child=d;d=f;f=b.child;g=a.child.memoizedState;g=null===g?nj(c):{baseLanes:g.baseLanes|c,cachePool:null,transitions:g.transitions};f.memoizedState=g;f.childLanes=a.childLanes&~c;b.memoizedState=mj;return d}f=a.child;a=f.sibling;d=Pg(f,{mode:\"visible\",children:d.children});0===(b.mode&1)&&(d.lanes=c);d.return=b;d.sibling=null;null!==a&&(c=b.deletions,null===c?(b.deletions=[a],b.flags|=16):c.push(a));b.child=d;b.memoizedState=null;return d}\nfunction qj(a,b){b=pj({mode:\"visible\",children:b},a.mode,0,null);b.return=a;return a.child=b}function sj(a,b,c,d){null!==d&&Jg(d);Ug(b,a.child,null,c);a=qj(b,b.pendingProps.children);a.flags|=2;b.memoizedState=null;return a}\nfunction rj(a,b,c,d,e,f,g){if(c){if(b.flags&256)return b.flags&=-257,d=Ki(Error(p(422))),sj(a,b,g,d);if(null!==b.memoizedState)return b.child=a.child,b.flags|=128,null;f=d.fallback;e=b.mode;d=pj({mode:\"visible\",children:d.children},e,0,null);f=Tg(f,e,g,null);f.flags|=2;d.return=b;f.return=b;d.sibling=f;b.child=d;0!==(b.mode&1)&&Ug(b,a.child,null,g);b.child.memoizedState=nj(g);b.memoizedState=mj;return f}if(0===(b.mode&1))return sj(a,b,g,null);if(\"$!\"===e.data){d=e.nextSibling&&e.nextSibling.dataset;\nif(d)var h=d.dgst;d=h;f=Error(p(419));d=Ki(f,d,void 0);return sj(a,b,g,d)}h=0!==(g&a.childLanes);if(dh||h){d=Q;if(null!==d){switch(g&-g){case 4:e=2;break;case 16:e=8;break;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:e=32;break;case 536870912:e=268435456;break;default:e=0}e=0!==(e&(d.suspendedLanes|g))?0:e;\n0!==e&&e!==f.retryLane&&(f.retryLane=e,ih(a,e),gi(d,a,e,-1))}tj();d=Ki(Error(p(421)));return sj(a,b,g,d)}if(\"$?\"===e.data)return b.flags|=128,b.child=a.child,b=uj.bind(null,a),e._reactRetry=b,null;a=f.treeContext;yg=Lf(e.nextSibling);xg=b;I=!0;zg=null;null!==a&&(og[pg++]=rg,og[pg++]=sg,og[pg++]=qg,rg=a.id,sg=a.overflow,qg=b);b=qj(b,d.children);b.flags|=4096;return b}function vj(a,b,c){a.lanes|=b;var d=a.alternate;null!==d&&(d.lanes|=b);bh(a.return,b,c)}\nfunction wj(a,b,c,d,e){var f=a.memoizedState;null===f?a.memoizedState={isBackwards:b,rendering:null,renderingStartTime:0,last:d,tail:c,tailMode:e}:(f.isBackwards=b,f.rendering=null,f.renderingStartTime=0,f.last=d,f.tail=c,f.tailMode=e)}\nfunction xj(a,b,c){var d=b.pendingProps,e=d.revealOrder,f=d.tail;Xi(a,b,d.children,c);d=L.current;if(0!==(d&2))d=d&1|2,b.flags|=128;else{if(null!==a&&0!==(a.flags&128))a:for(a=b.child;null!==a;){if(13===a.tag)null!==a.memoizedState&&vj(a,c,b);else if(19===a.tag)vj(a,c,b);else if(null!==a.child){a.child.return=a;a=a.child;continue}if(a===b)break a;for(;null===a.sibling;){if(null===a.return||a.return===b)break a;a=a.return}a.sibling.return=a.return;a=a.sibling}d&=1}G(L,d);if(0===(b.mode&1))b.memoizedState=\nnull;else switch(e){case \"forwards\":c=b.child;for(e=null;null!==c;)a=c.alternate,null!==a&&null===Ch(a)&&(e=c),c=c.sibling;c=e;null===c?(e=b.child,b.child=null):(e=c.sibling,c.sibling=null);wj(b,!1,e,c,f);break;case \"backwards\":c=null;e=b.child;for(b.child=null;null!==e;){a=e.alternate;if(null!==a&&null===Ch(a)){b.child=e;break}a=e.sibling;e.sibling=c;c=e;e=a}wj(b,!0,c,null,f);break;case \"together\":wj(b,!1,null,null,void 0);break;default:b.memoizedState=null}return b.child}\nfunction ij(a,b){0===(b.mode&1)&&null!==a&&(a.alternate=null,b.alternate=null,b.flags|=2)}function Zi(a,b,c){null!==a&&(b.dependencies=a.dependencies);rh|=b.lanes;if(0===(c&b.childLanes))return null;if(null!==a&&b.child!==a.child)throw Error(p(153));if(null!==b.child){a=b.child;c=Pg(a,a.pendingProps);b.child=c;for(c.return=b;null!==a.sibling;)a=a.sibling,c=c.sibling=Pg(a,a.pendingProps),c.return=b;c.sibling=null}return b.child}\nfunction yj(a,b,c){switch(b.tag){case 3:kj(b);Ig();break;case 5:Ah(b);break;case 1:Zf(b.type)&&cg(b);break;case 4:yh(b,b.stateNode.containerInfo);break;case 10:var d=b.type._context,e=b.memoizedProps.value;G(Wg,d._currentValue);d._currentValue=e;break;case 13:d=b.memoizedState;if(null!==d){if(null!==d.dehydrated)return G(L,L.current&1),b.flags|=128,null;if(0!==(c&b.child.childLanes))return oj(a,b,c);G(L,L.current&1);a=Zi(a,b,c);return null!==a?a.sibling:null}G(L,L.current&1);break;case 19:d=0!==(c&\nb.childLanes);if(0!==(a.flags&128)){if(d)return xj(a,b,c);b.flags|=128}e=b.memoizedState;null!==e&&(e.rendering=null,e.tail=null,e.lastEffect=null);G(L,L.current);if(d)break;else return null;case 22:case 23:return b.lanes=0,dj(a,b,c)}return Zi(a,b,c)}var zj,Aj,Bj,Cj;\nzj=function(a,b){for(var c=b.child;null!==c;){if(5===c.tag||6===c.tag)a.appendChild(c.stateNode);else if(4!==c.tag&&null!==c.child){c.child.return=c;c=c.child;continue}if(c===b)break;for(;null===c.sibling;){if(null===c.return||c.return===b)return;c=c.return}c.sibling.return=c.return;c=c.sibling}};Aj=function(){};\nBj=function(a,b,c,d){var e=a.memoizedProps;if(e!==d){a=b.stateNode;xh(uh.current);var f=null;switch(c){case \"input\":e=Ya(a,e);d=Ya(a,d);f=[];break;case \"select\":e=A({},e,{value:void 0});d=A({},d,{value:void 0});f=[];break;case \"textarea\":e=gb(a,e);d=gb(a,d);f=[];break;default:\"function\"!==typeof e.onClick&&\"function\"===typeof d.onClick&&(a.onclick=Bf)}ub(c,d);var g;c=null;for(l in e)if(!d.hasOwnProperty(l)&&e.hasOwnProperty(l)&&null!=e[l])if(\"style\"===l){var h=e[l];for(g in h)h.hasOwnProperty(g)&&\n(c||(c={}),c[g]=\"\")}else\"dangerouslySetInnerHTML\"!==l&&\"children\"!==l&&\"suppressContentEditableWarning\"!==l&&\"suppressHydrationWarning\"!==l&&\"autoFocus\"!==l&&(ea.hasOwnProperty(l)?f||(f=[]):(f=f||[]).push(l,null));for(l in d){var k=d[l];h=null!=e?e[l]:void 0;if(d.hasOwnProperty(l)&&k!==h&&(null!=k||null!=h))if(\"style\"===l)if(h){for(g in h)!h.hasOwnProperty(g)||k&&k.hasOwnProperty(g)||(c||(c={}),c[g]=\"\");for(g in k)k.hasOwnProperty(g)&&h[g]!==k[g]&&(c||(c={}),c[g]=k[g])}else c||(f||(f=[]),f.push(l,\nc)),c=k;else\"dangerouslySetInnerHTML\"===l?(k=k?k.__html:void 0,h=h?h.__html:void 0,null!=k&&h!==k&&(f=f||[]).push(l,k)):\"children\"===l?\"string\"!==typeof k&&\"number\"!==typeof k||(f=f||[]).push(l,\"\"+k):\"suppressContentEditableWarning\"!==l&&\"suppressHydrationWarning\"!==l&&(ea.hasOwnProperty(l)?(null!=k&&\"onScroll\"===l&&D(\"scroll\",a),f||h===k||(f=[])):(f=f||[]).push(l,k))}c&&(f=f||[]).push(\"style\",c);var l=f;if(b.updateQueue=l)b.flags|=4}};Cj=function(a,b,c,d){c!==d&&(b.flags|=4)};\nfunction Dj(a,b){if(!I)switch(a.tailMode){case \"hidden\":b=a.tail;for(var c=null;null!==b;)null!==b.alternate&&(c=b),b=b.sibling;null===c?a.tail=null:c.sibling=null;break;case \"collapsed\":c=a.tail;for(var d=null;null!==c;)null!==c.alternate&&(d=c),c=c.sibling;null===d?b||null===a.tail?a.tail=null:a.tail.sibling=null:d.sibling=null}}\nfunction S(a){var b=null!==a.alternate&&a.alternate.child===a.child,c=0,d=0;if(b)for(var e=a.child;null!==e;)c|=e.lanes|e.childLanes,d|=e.subtreeFlags&14680064,d|=e.flags&14680064,e.return=a,e=e.sibling;else for(e=a.child;null!==e;)c|=e.lanes|e.childLanes,d|=e.subtreeFlags,d|=e.flags,e.return=a,e=e.sibling;a.subtreeFlags|=d;a.childLanes=c;return b}\nfunction Ej(a,b,c){var d=b.pendingProps;wg(b);switch(b.tag){case 2:case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return S(b),null;case 1:return Zf(b.type)&&$f(),S(b),null;case 3:d=b.stateNode;zh();E(Wf);E(H);Eh();d.pendingContext&&(d.context=d.pendingContext,d.pendingContext=null);if(null===a||null===a.child)Gg(b)?b.flags|=4:null===a||a.memoizedState.isDehydrated&&0===(b.flags&256)||(b.flags|=1024,null!==zg&&(Fj(zg),zg=null));Aj(a,b);S(b);return null;case 5:Bh(b);var e=xh(wh.current);\nc=b.type;if(null!==a&&null!=b.stateNode)Bj(a,b,c,d,e),a.ref!==b.ref&&(b.flags|=512,b.flags|=2097152);else{if(!d){if(null===b.stateNode)throw Error(p(166));S(b);return null}a=xh(uh.current);if(Gg(b)){d=b.stateNode;c=b.type;var f=b.memoizedProps;d[Of]=b;d[Pf]=f;a=0!==(b.mode&1);switch(c){case \"dialog\":D(\"cancel\",d);D(\"close\",d);break;case \"iframe\":case \"object\":case \"embed\":D(\"load\",d);break;case \"video\":case \"audio\":for(e=0;e<lf.length;e++)D(lf[e],d);break;case \"source\":D(\"error\",d);break;case \"img\":case \"image\":case \"link\":D(\"error\",\nd);D(\"load\",d);break;case \"details\":D(\"toggle\",d);break;case \"input\":Za(d,f);D(\"invalid\",d);break;case \"select\":d._wrapperState={wasMultiple:!!f.multiple};D(\"invalid\",d);break;case \"textarea\":hb(d,f),D(\"invalid\",d)}ub(c,f);e=null;for(var g in f)if(f.hasOwnProperty(g)){var h=f[g];\"children\"===g?\"string\"===typeof h?d.textContent!==h&&(!0!==f.suppressHydrationWarning&&Af(d.textContent,h,a),e=[\"children\",h]):\"number\"===typeof h&&d.textContent!==\"\"+h&&(!0!==f.suppressHydrationWarning&&Af(d.textContent,\nh,a),e=[\"children\",\"\"+h]):ea.hasOwnProperty(g)&&null!=h&&\"onScroll\"===g&&D(\"scroll\",d)}switch(c){case \"input\":Va(d);db(d,f,!0);break;case \"textarea\":Va(d);jb(d);break;case \"select\":case \"option\":break;default:\"function\"===typeof f.onClick&&(d.onclick=Bf)}d=e;b.updateQueue=d;null!==d&&(b.flags|=4)}else{g=9===e.nodeType?e:e.ownerDocument;\"http://www.w3.org/1999/xhtml\"===a&&(a=kb(c));\"http://www.w3.org/1999/xhtml\"===a?\"script\"===c?(a=g.createElement(\"div\"),a.innerHTML=\"<script>\\x3c/script>\",a=a.removeChild(a.firstChild)):\n\"string\"===typeof d.is?a=g.createElement(c,{is:d.is}):(a=g.createElement(c),\"select\"===c&&(g=a,d.multiple?g.multiple=!0:d.size&&(g.size=d.size))):a=g.createElementNS(a,c);a[Of]=b;a[Pf]=d;zj(a,b,!1,!1);b.stateNode=a;a:{g=vb(c,d);switch(c){case \"dialog\":D(\"cancel\",a);D(\"close\",a);e=d;break;case \"iframe\":case \"object\":case \"embed\":D(\"load\",a);e=d;break;case \"video\":case \"audio\":for(e=0;e<lf.length;e++)D(lf[e],a);e=d;break;case \"source\":D(\"error\",a);e=d;break;case \"img\":case \"image\":case \"link\":D(\"error\",\na);D(\"load\",a);e=d;break;case \"details\":D(\"toggle\",a);e=d;break;case \"input\":Za(a,d);e=Ya(a,d);D(\"invalid\",a);break;case \"option\":e=d;break;case \"select\":a._wrapperState={wasMultiple:!!d.multiple};e=A({},d,{value:void 0});D(\"invalid\",a);break;case \"textarea\":hb(a,d);e=gb(a,d);D(\"invalid\",a);break;default:e=d}ub(c,e);h=e;for(f in h)if(h.hasOwnProperty(f)){var k=h[f];\"style\"===f?sb(a,k):\"dangerouslySetInnerHTML\"===f?(k=k?k.__html:void 0,null!=k&&nb(a,k)):\"children\"===f?\"string\"===typeof k?(\"textarea\"!==\nc||\"\"!==k)&&ob(a,k):\"number\"===typeof k&&ob(a,\"\"+k):\"suppressContentEditableWarning\"!==f&&\"suppressHydrationWarning\"!==f&&\"autoFocus\"!==f&&(ea.hasOwnProperty(f)?null!=k&&\"onScroll\"===f&&D(\"scroll\",a):null!=k&&ta(a,f,k,g))}switch(c){case \"input\":Va(a);db(a,d,!1);break;case \"textarea\":Va(a);jb(a);break;case \"option\":null!=d.value&&a.setAttribute(\"value\",\"\"+Sa(d.value));break;case \"select\":a.multiple=!!d.multiple;f=d.value;null!=f?fb(a,!!d.multiple,f,!1):null!=d.defaultValue&&fb(a,!!d.multiple,d.defaultValue,\n!0);break;default:\"function\"===typeof e.onClick&&(a.onclick=Bf)}switch(c){case \"button\":case \"input\":case \"select\":case \"textarea\":d=!!d.autoFocus;break a;case \"img\":d=!0;break a;default:d=!1}}d&&(b.flags|=4)}null!==b.ref&&(b.flags|=512,b.flags|=2097152)}S(b);return null;case 6:if(a&&null!=b.stateNode)Cj(a,b,a.memoizedProps,d);else{if(\"string\"!==typeof d&&null===b.stateNode)throw Error(p(166));c=xh(wh.current);xh(uh.current);if(Gg(b)){d=b.stateNode;c=b.memoizedProps;d[Of]=b;if(f=d.nodeValue!==c)if(a=\nxg,null!==a)switch(a.tag){case 3:Af(d.nodeValue,c,0!==(a.mode&1));break;case 5:!0!==a.memoizedProps.suppressHydrationWarning&&Af(d.nodeValue,c,0!==(a.mode&1))}f&&(b.flags|=4)}else d=(9===c.nodeType?c:c.ownerDocument).createTextNode(d),d[Of]=b,b.stateNode=d}S(b);return null;case 13:E(L);d=b.memoizedState;if(null===a||null!==a.memoizedState&&null!==a.memoizedState.dehydrated){if(I&&null!==yg&&0!==(b.mode&1)&&0===(b.flags&128))Hg(),Ig(),b.flags|=98560,f=!1;else if(f=Gg(b),null!==d&&null!==d.dehydrated){if(null===\na){if(!f)throw Error(p(318));f=b.memoizedState;f=null!==f?f.dehydrated:null;if(!f)throw Error(p(317));f[Of]=b}else Ig(),0===(b.flags&128)&&(b.memoizedState=null),b.flags|=4;S(b);f=!1}else null!==zg&&(Fj(zg),zg=null),f=!0;if(!f)return b.flags&65536?b:null}if(0!==(b.flags&128))return b.lanes=c,b;d=null!==d;d!==(null!==a&&null!==a.memoizedState)&&d&&(b.child.flags|=8192,0!==(b.mode&1)&&(null===a||0!==(L.current&1)?0===T&&(T=3):tj()));null!==b.updateQueue&&(b.flags|=4);S(b);return null;case 4:return zh(),\nAj(a,b),null===a&&sf(b.stateNode.containerInfo),S(b),null;case 10:return ah(b.type._context),S(b),null;case 17:return Zf(b.type)&&$f(),S(b),null;case 19:E(L);f=b.memoizedState;if(null===f)return S(b),null;d=0!==(b.flags&128);g=f.rendering;if(null===g)if(d)Dj(f,!1);else{if(0!==T||null!==a&&0!==(a.flags&128))for(a=b.child;null!==a;){g=Ch(a);if(null!==g){b.flags|=128;Dj(f,!1);d=g.updateQueue;null!==d&&(b.updateQueue=d,b.flags|=4);b.subtreeFlags=0;d=c;for(c=b.child;null!==c;)f=c,a=d,f.flags&=14680066,\ng=f.alternate,null===g?(f.childLanes=0,f.lanes=a,f.child=null,f.subtreeFlags=0,f.memoizedProps=null,f.memoizedState=null,f.updateQueue=null,f.dependencies=null,f.stateNode=null):(f.childLanes=g.childLanes,f.lanes=g.lanes,f.child=g.child,f.subtreeFlags=0,f.deletions=null,f.memoizedProps=g.memoizedProps,f.memoizedState=g.memoizedState,f.updateQueue=g.updateQueue,f.type=g.type,a=g.dependencies,f.dependencies=null===a?null:{lanes:a.lanes,firstContext:a.firstContext}),c=c.sibling;G(L,L.current&1|2);return b.child}a=\na.sibling}null!==f.tail&&B()>Gj&&(b.flags|=128,d=!0,Dj(f,!1),b.lanes=4194304)}else{if(!d)if(a=Ch(g),null!==a){if(b.flags|=128,d=!0,c=a.updateQueue,null!==c&&(b.updateQueue=c,b.flags|=4),Dj(f,!0),null===f.tail&&\"hidden\"===f.tailMode&&!g.alternate&&!I)return S(b),null}else 2*B()-f.renderingStartTime>Gj&&1073741824!==c&&(b.flags|=128,d=!0,Dj(f,!1),b.lanes=4194304);f.isBackwards?(g.sibling=b.child,b.child=g):(c=f.last,null!==c?c.sibling=g:b.child=g,f.last=g)}if(null!==f.tail)return b=f.tail,f.rendering=\nb,f.tail=b.sibling,f.renderingStartTime=B(),b.sibling=null,c=L.current,G(L,d?c&1|2:c&1),b;S(b);return null;case 22:case 23:return Hj(),d=null!==b.memoizedState,null!==a&&null!==a.memoizedState!==d&&(b.flags|=8192),d&&0!==(b.mode&1)?0!==(fj&1073741824)&&(S(b),b.subtreeFlags&6&&(b.flags|=8192)):S(b),null;case 24:return null;case 25:return null}throw Error(p(156,b.tag));}\nfunction Ij(a,b){wg(b);switch(b.tag){case 1:return Zf(b.type)&&$f(),a=b.flags,a&65536?(b.flags=a&-65537|128,b):null;case 3:return zh(),E(Wf),E(H),Eh(),a=b.flags,0!==(a&65536)&&0===(a&128)?(b.flags=a&-65537|128,b):null;case 5:return Bh(b),null;case 13:E(L);a=b.memoizedState;if(null!==a&&null!==a.dehydrated){if(null===b.alternate)throw Error(p(340));Ig()}a=b.flags;return a&65536?(b.flags=a&-65537|128,b):null;case 19:return E(L),null;case 4:return zh(),null;case 10:return ah(b.type._context),null;case 22:case 23:return Hj(),\nnull;case 24:return null;default:return null}}var Jj=!1,U=!1,Kj=\"function\"===typeof WeakSet?WeakSet:Set,V=null;function Lj(a,b){var c=a.ref;if(null!==c)if(\"function\"===typeof c)try{c(null)}catch(d){W(a,b,d)}else c.current=null}function Mj(a,b,c){try{c()}catch(d){W(a,b,d)}}var Nj=!1;\nfunction Oj(a,b){Cf=dd;a=Me();if(Ne(a)){if(\"selectionStart\"in a)var c={start:a.selectionStart,end:a.selectionEnd};else a:{c=(c=a.ownerDocument)&&c.defaultView||window;var d=c.getSelection&&c.getSelection();if(d&&0!==d.rangeCount){c=d.anchorNode;var e=d.anchorOffset,f=d.focusNode;d=d.focusOffset;try{c.nodeType,f.nodeType}catch(F){c=null;break a}var g=0,h=-1,k=-1,l=0,m=0,q=a,r=null;b:for(;;){for(var y;;){q!==c||0!==e&&3!==q.nodeType||(h=g+e);q!==f||0!==d&&3!==q.nodeType||(k=g+d);3===q.nodeType&&(g+=\nq.nodeValue.length);if(null===(y=q.firstChild))break;r=q;q=y}for(;;){if(q===a)break b;r===c&&++l===e&&(h=g);r===f&&++m===d&&(k=g);if(null!==(y=q.nextSibling))break;q=r;r=q.parentNode}q=y}c=-1===h||-1===k?null:{start:h,end:k}}else c=null}c=c||{start:0,end:0}}else c=null;Df={focusedElem:a,selectionRange:c};dd=!1;for(V=b;null!==V;)if(b=V,a=b.child,0!==(b.subtreeFlags&1028)&&null!==a)a.return=b,V=a;else for(;null!==V;){b=V;try{var n=b.alternate;if(0!==(b.flags&1024))switch(b.tag){case 0:case 11:case 15:break;\ncase 1:if(null!==n){var t=n.memoizedProps,J=n.memoizedState,x=b.stateNode,w=x.getSnapshotBeforeUpdate(b.elementType===b.type?t:Ci(b.type,t),J);x.__reactInternalSnapshotBeforeUpdate=w}break;case 3:var u=b.stateNode.containerInfo;1===u.nodeType?u.textContent=\"\":9===u.nodeType&&u.documentElement&&u.removeChild(u.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(p(163));}}catch(F){W(b,b.return,F)}a=b.sibling;if(null!==a){a.return=b.return;V=a;break}V=b.return}n=Nj;Nj=!1;return n}\nfunction Pj(a,b,c){var d=b.updateQueue;d=null!==d?d.lastEffect:null;if(null!==d){var e=d=d.next;do{if((e.tag&a)===a){var f=e.destroy;e.destroy=void 0;void 0!==f&&Mj(b,c,f)}e=e.next}while(e!==d)}}function Qj(a,b){b=b.updateQueue;b=null!==b?b.lastEffect:null;if(null!==b){var c=b=b.next;do{if((c.tag&a)===a){var d=c.create;c.destroy=d()}c=c.next}while(c!==b)}}function Rj(a){var b=a.ref;if(null!==b){var c=a.stateNode;switch(a.tag){case 5:a=c;break;default:a=c}\"function\"===typeof b?b(a):b.current=a}}\nfunction Sj(a){var b=a.alternate;null!==b&&(a.alternate=null,Sj(b));a.child=null;a.deletions=null;a.sibling=null;5===a.tag&&(b=a.stateNode,null!==b&&(delete b[Of],delete b[Pf],delete b[of],delete b[Qf],delete b[Rf]));a.stateNode=null;a.return=null;a.dependencies=null;a.memoizedProps=null;a.memoizedState=null;a.pendingProps=null;a.stateNode=null;a.updateQueue=null}function Tj(a){return 5===a.tag||3===a.tag||4===a.tag}\nfunction Uj(a){a:for(;;){for(;null===a.sibling;){if(null===a.return||Tj(a.return))return null;a=a.return}a.sibling.return=a.return;for(a=a.sibling;5!==a.tag&&6!==a.tag&&18!==a.tag;){if(a.flags&2)continue a;if(null===a.child||4===a.tag)continue a;else a.child.return=a,a=a.child}if(!(a.flags&2))return a.stateNode}}\nfunction Vj(a,b,c){var d=a.tag;if(5===d||6===d)a=a.stateNode,b?8===c.nodeType?c.parentNode.insertBefore(a,b):c.insertBefore(a,b):(8===c.nodeType?(b=c.parentNode,b.insertBefore(a,c)):(b=c,b.appendChild(a)),c=c._reactRootContainer,null!==c&&void 0!==c||null!==b.onclick||(b.onclick=Bf));else if(4!==d&&(a=a.child,null!==a))for(Vj(a,b,c),a=a.sibling;null!==a;)Vj(a,b,c),a=a.sibling}\nfunction Wj(a,b,c){var d=a.tag;if(5===d||6===d)a=a.stateNode,b?c.insertBefore(a,b):c.appendChild(a);else if(4!==d&&(a=a.child,null!==a))for(Wj(a,b,c),a=a.sibling;null!==a;)Wj(a,b,c),a=a.sibling}var X=null,Xj=!1;function Yj(a,b,c){for(c=c.child;null!==c;)Zj(a,b,c),c=c.sibling}\nfunction Zj(a,b,c){if(lc&&\"function\"===typeof lc.onCommitFiberUnmount)try{lc.onCommitFiberUnmount(kc,c)}catch(h){}switch(c.tag){case 5:U||Lj(c,b);case 6:var d=X,e=Xj;X=null;Yj(a,b,c);X=d;Xj=e;null!==X&&(Xj?(a=X,c=c.stateNode,8===a.nodeType?a.parentNode.removeChild(c):a.removeChild(c)):X.removeChild(c.stateNode));break;case 18:null!==X&&(Xj?(a=X,c=c.stateNode,8===a.nodeType?Kf(a.parentNode,c):1===a.nodeType&&Kf(a,c),bd(a)):Kf(X,c.stateNode));break;case 4:d=X;e=Xj;X=c.stateNode.containerInfo;Xj=!0;\nYj(a,b,c);X=d;Xj=e;break;case 0:case 11:case 14:case 15:if(!U&&(d=c.updateQueue,null!==d&&(d=d.lastEffect,null!==d))){e=d=d.next;do{var f=e,g=f.destroy;f=f.tag;void 0!==g&&(0!==(f&2)?Mj(c,b,g):0!==(f&4)&&Mj(c,b,g));e=e.next}while(e!==d)}Yj(a,b,c);break;case 1:if(!U&&(Lj(c,b),d=c.stateNode,\"function\"===typeof d.componentWillUnmount))try{d.props=c.memoizedProps,d.state=c.memoizedState,d.componentWillUnmount()}catch(h){W(c,b,h)}Yj(a,b,c);break;case 21:Yj(a,b,c);break;case 22:c.mode&1?(U=(d=U)||null!==\nc.memoizedState,Yj(a,b,c),U=d):Yj(a,b,c);break;default:Yj(a,b,c)}}function ak(a){var b=a.updateQueue;if(null!==b){a.updateQueue=null;var c=a.stateNode;null===c&&(c=a.stateNode=new Kj);b.forEach(function(b){var d=bk.bind(null,a,b);c.has(b)||(c.add(b),b.then(d,d))})}}\nfunction ck(a,b){var c=b.deletions;if(null!==c)for(var d=0;d<c.length;d++){var e=c[d];try{var f=a,g=b,h=g;a:for(;null!==h;){switch(h.tag){case 5:X=h.stateNode;Xj=!1;break a;case 3:X=h.stateNode.containerInfo;Xj=!0;break a;case 4:X=h.stateNode.containerInfo;Xj=!0;break a}h=h.return}if(null===X)throw Error(p(160));Zj(f,g,e);X=null;Xj=!1;var k=e.alternate;null!==k&&(k.return=null);e.return=null}catch(l){W(e,b,l)}}if(b.subtreeFlags&12854)for(b=b.child;null!==b;)dk(b,a),b=b.sibling}\nfunction dk(a,b){var c=a.alternate,d=a.flags;switch(a.tag){case 0:case 11:case 14:case 15:ck(b,a);ek(a);if(d&4){try{Pj(3,a,a.return),Qj(3,a)}catch(t){W(a,a.return,t)}try{Pj(5,a,a.return)}catch(t){W(a,a.return,t)}}break;case 1:ck(b,a);ek(a);d&512&&null!==c&&Lj(c,c.return);break;case 5:ck(b,a);ek(a);d&512&&null!==c&&Lj(c,c.return);if(a.flags&32){var e=a.stateNode;try{ob(e,\"\")}catch(t){W(a,a.return,t)}}if(d&4&&(e=a.stateNode,null!=e)){var f=a.memoizedProps,g=null!==c?c.memoizedProps:f,h=a.type,k=a.updateQueue;\na.updateQueue=null;if(null!==k)try{\"input\"===h&&\"radio\"===f.type&&null!=f.name&&ab(e,f);vb(h,g);var l=vb(h,f);for(g=0;g<k.length;g+=2){var m=k[g],q=k[g+1];\"style\"===m?sb(e,q):\"dangerouslySetInnerHTML\"===m?nb(e,q):\"children\"===m?ob(e,q):ta(e,m,q,l)}switch(h){case \"input\":bb(e,f);break;case \"textarea\":ib(e,f);break;case \"select\":var r=e._wrapperState.wasMultiple;e._wrapperState.wasMultiple=!!f.multiple;var y=f.value;null!=y?fb(e,!!f.multiple,y,!1):r!==!!f.multiple&&(null!=f.defaultValue?fb(e,!!f.multiple,\nf.defaultValue,!0):fb(e,!!f.multiple,f.multiple?[]:\"\",!1))}e[Pf]=f}catch(t){W(a,a.return,t)}}break;case 6:ck(b,a);ek(a);if(d&4){if(null===a.stateNode)throw Error(p(162));e=a.stateNode;f=a.memoizedProps;try{e.nodeValue=f}catch(t){W(a,a.return,t)}}break;case 3:ck(b,a);ek(a);if(d&4&&null!==c&&c.memoizedState.isDehydrated)try{bd(b.containerInfo)}catch(t){W(a,a.return,t)}break;case 4:ck(b,a);ek(a);break;case 13:ck(b,a);ek(a);e=a.child;e.flags&8192&&(f=null!==e.memoizedState,e.stateNode.isHidden=f,!f||\nnull!==e.alternate&&null!==e.alternate.memoizedState||(fk=B()));d&4&&ak(a);break;case 22:m=null!==c&&null!==c.memoizedState;a.mode&1?(U=(l=U)||m,ck(b,a),U=l):ck(b,a);ek(a);if(d&8192){l=null!==a.memoizedState;if((a.stateNode.isHidden=l)&&!m&&0!==(a.mode&1))for(V=a,m=a.child;null!==m;){for(q=V=m;null!==V;){r=V;y=r.child;switch(r.tag){case 0:case 11:case 14:case 15:Pj(4,r,r.return);break;case 1:Lj(r,r.return);var n=r.stateNode;if(\"function\"===typeof n.componentWillUnmount){d=r;c=r.return;try{b=d,n.props=\nb.memoizedProps,n.state=b.memoizedState,n.componentWillUnmount()}catch(t){W(d,c,t)}}break;case 5:Lj(r,r.return);break;case 22:if(null!==r.memoizedState){gk(q);continue}}null!==y?(y.return=r,V=y):gk(q)}m=m.sibling}a:for(m=null,q=a;;){if(5===q.tag){if(null===m){m=q;try{e=q.stateNode,l?(f=e.style,\"function\"===typeof f.setProperty?f.setProperty(\"display\",\"none\",\"important\"):f.display=\"none\"):(h=q.stateNode,k=q.memoizedProps.style,g=void 0!==k&&null!==k&&k.hasOwnProperty(\"display\")?k.display:null,h.style.display=\nrb(\"display\",g))}catch(t){W(a,a.return,t)}}}else if(6===q.tag){if(null===m)try{q.stateNode.nodeValue=l?\"\":q.memoizedProps}catch(t){W(a,a.return,t)}}else if((22!==q.tag&&23!==q.tag||null===q.memoizedState||q===a)&&null!==q.child){q.child.return=q;q=q.child;continue}if(q===a)break a;for(;null===q.sibling;){if(null===q.return||q.return===a)break a;m===q&&(m=null);q=q.return}m===q&&(m=null);q.sibling.return=q.return;q=q.sibling}}break;case 19:ck(b,a);ek(a);d&4&&ak(a);break;case 21:break;default:ck(b,\na),ek(a)}}function ek(a){var b=a.flags;if(b&2){try{a:{for(var c=a.return;null!==c;){if(Tj(c)){var d=c;break a}c=c.return}throw Error(p(160));}switch(d.tag){case 5:var e=d.stateNode;d.flags&32&&(ob(e,\"\"),d.flags&=-33);var f=Uj(a);Wj(a,f,e);break;case 3:case 4:var g=d.stateNode.containerInfo,h=Uj(a);Vj(a,h,g);break;default:throw Error(p(161));}}catch(k){W(a,a.return,k)}a.flags&=-3}b&4096&&(a.flags&=-4097)}function hk(a,b,c){V=a;ik(a,b,c)}\nfunction ik(a,b,c){for(var d=0!==(a.mode&1);null!==V;){var e=V,f=e.child;if(22===e.tag&&d){var g=null!==e.memoizedState||Jj;if(!g){var h=e.alternate,k=null!==h&&null!==h.memoizedState||U;h=Jj;var l=U;Jj=g;if((U=k)&&!l)for(V=e;null!==V;)g=V,k=g.child,22===g.tag&&null!==g.memoizedState?jk(e):null!==k?(k.return=g,V=k):jk(e);for(;null!==f;)V=f,ik(f,b,c),f=f.sibling;V=e;Jj=h;U=l}kk(a,b,c)}else 0!==(e.subtreeFlags&8772)&&null!==f?(f.return=e,V=f):kk(a,b,c)}}\nfunction kk(a){for(;null!==V;){var b=V;if(0!==(b.flags&8772)){var c=b.alternate;try{if(0!==(b.flags&8772))switch(b.tag){case 0:case 11:case 15:U||Qj(5,b);break;case 1:var d=b.stateNode;if(b.flags&4&&!U)if(null===c)d.componentDidMount();else{var e=b.elementType===b.type?c.memoizedProps:Ci(b.type,c.memoizedProps);d.componentDidUpdate(e,c.memoizedState,d.__reactInternalSnapshotBeforeUpdate)}var f=b.updateQueue;null!==f&&sh(b,f,d);break;case 3:var g=b.updateQueue;if(null!==g){c=null;if(null!==b.child)switch(b.child.tag){case 5:c=\nb.child.stateNode;break;case 1:c=b.child.stateNode}sh(b,g,c)}break;case 5:var h=b.stateNode;if(null===c&&b.flags&4){c=h;var k=b.memoizedProps;switch(b.type){case \"button\":case \"input\":case \"select\":case \"textarea\":k.autoFocus&&c.focus();break;case \"img\":k.src&&(c.src=k.src)}}break;case 6:break;case 4:break;case 12:break;case 13:if(null===b.memoizedState){var l=b.alternate;if(null!==l){var m=l.memoizedState;if(null!==m){var q=m.dehydrated;null!==q&&bd(q)}}}break;case 19:case 17:case 21:case 22:case 23:case 25:break;\ndefault:throw Error(p(163));}U||b.flags&512&&Rj(b)}catch(r){W(b,b.return,r)}}if(b===a){V=null;break}c=b.sibling;if(null!==c){c.return=b.return;V=c;break}V=b.return}}function gk(a){for(;null!==V;){var b=V;if(b===a){V=null;break}var c=b.sibling;if(null!==c){c.return=b.return;V=c;break}V=b.return}}\nfunction jk(a){for(;null!==V;){var b=V;try{switch(b.tag){case 0:case 11:case 15:var c=b.return;try{Qj(4,b)}catch(k){W(b,c,k)}break;case 1:var d=b.stateNode;if(\"function\"===typeof d.componentDidMount){var e=b.return;try{d.componentDidMount()}catch(k){W(b,e,k)}}var f=b.return;try{Rj(b)}catch(k){W(b,f,k)}break;case 5:var g=b.return;try{Rj(b)}catch(k){W(b,g,k)}}}catch(k){W(b,b.return,k)}if(b===a){V=null;break}var h=b.sibling;if(null!==h){h.return=b.return;V=h;break}V=b.return}}\nvar lk=Math.ceil,mk=ua.ReactCurrentDispatcher,nk=ua.ReactCurrentOwner,ok=ua.ReactCurrentBatchConfig,K=0,Q=null,Y=null,Z=0,fj=0,ej=Uf(0),T=0,pk=null,rh=0,qk=0,rk=0,sk=null,tk=null,fk=0,Gj=Infinity,uk=null,Oi=!1,Pi=null,Ri=null,vk=!1,wk=null,xk=0,yk=0,zk=null,Ak=-1,Bk=0;function R(){return 0!==(K&6)?B():-1!==Ak?Ak:Ak=B()}\nfunction yi(a){if(0===(a.mode&1))return 1;if(0!==(K&2)&&0!==Z)return Z&-Z;if(null!==Kg.transition)return 0===Bk&&(Bk=yc()),Bk;a=C;if(0!==a)return a;a=window.event;a=void 0===a?16:jd(a.type);return a}function gi(a,b,c,d){if(50<yk)throw yk=0,zk=null,Error(p(185));Ac(a,c,d);if(0===(K&2)||a!==Q)a===Q&&(0===(K&2)&&(qk|=c),4===T&&Ck(a,Z)),Dk(a,d),1===c&&0===K&&0===(b.mode&1)&&(Gj=B()+500,fg&&jg())}\nfunction Dk(a,b){var c=a.callbackNode;wc(a,b);var d=uc(a,a===Q?Z:0);if(0===d)null!==c&&bc(c),a.callbackNode=null,a.callbackPriority=0;else if(b=d&-d,a.callbackPriority!==b){null!=c&&bc(c);if(1===b)0===a.tag?ig(Ek.bind(null,a)):hg(Ek.bind(null,a)),Jf(function(){0===(K&6)&&jg()}),c=null;else{switch(Dc(d)){case 1:c=fc;break;case 4:c=gc;break;case 16:c=hc;break;case 536870912:c=jc;break;default:c=hc}c=Fk(c,Gk.bind(null,a))}a.callbackPriority=b;a.callbackNode=c}}\nfunction Gk(a,b){Ak=-1;Bk=0;if(0!==(K&6))throw Error(p(327));var c=a.callbackNode;if(Hk()&&a.callbackNode!==c)return null;var d=uc(a,a===Q?Z:0);if(0===d)return null;if(0!==(d&30)||0!==(d&a.expiredLanes)||b)b=Ik(a,d);else{b=d;var e=K;K|=2;var f=Jk();if(Q!==a||Z!==b)uk=null,Gj=B()+500,Kk(a,b);do try{Lk();break}catch(h){Mk(a,h)}while(1);$g();mk.current=f;K=e;null!==Y?b=0:(Q=null,Z=0,b=T)}if(0!==b){2===b&&(e=xc(a),0!==e&&(d=e,b=Nk(a,e)));if(1===b)throw c=pk,Kk(a,0),Ck(a,d),Dk(a,B()),c;if(6===b)Ck(a,d);\nelse{e=a.current.alternate;if(0===(d&30)&&!Ok(e)&&(b=Ik(a,d),2===b&&(f=xc(a),0!==f&&(d=f,b=Nk(a,f))),1===b))throw c=pk,Kk(a,0),Ck(a,d),Dk(a,B()),c;a.finishedWork=e;a.finishedLanes=d;switch(b){case 0:case 1:throw Error(p(345));case 2:Pk(a,tk,uk);break;case 3:Ck(a,d);if((d&130023424)===d&&(b=fk+500-B(),10<b)){if(0!==uc(a,0))break;e=a.suspendedLanes;if((e&d)!==d){R();a.pingedLanes|=a.suspendedLanes&e;break}a.timeoutHandle=Ff(Pk.bind(null,a,tk,uk),b);break}Pk(a,tk,uk);break;case 4:Ck(a,d);if((d&4194240)===\nd)break;b=a.eventTimes;for(e=-1;0<d;){var g=31-oc(d);f=1<<g;g=b[g];g>e&&(e=g);d&=~f}d=e;d=B()-d;d=(120>d?120:480>d?480:1080>d?1080:1920>d?1920:3E3>d?3E3:4320>d?4320:1960*lk(d/1960))-d;if(10<d){a.timeoutHandle=Ff(Pk.bind(null,a,tk,uk),d);break}Pk(a,tk,uk);break;case 5:Pk(a,tk,uk);break;default:throw Error(p(329));}}}Dk(a,B());return a.callbackNode===c?Gk.bind(null,a):null}\nfunction Nk(a,b){var c=sk;a.current.memoizedState.isDehydrated&&(Kk(a,b).flags|=256);a=Ik(a,b);2!==a&&(b=tk,tk=c,null!==b&&Fj(b));return a}function Fj(a){null===tk?tk=a:tk.push.apply(tk,a)}\nfunction Ok(a){for(var b=a;;){if(b.flags&16384){var c=b.updateQueue;if(null!==c&&(c=c.stores,null!==c))for(var d=0;d<c.length;d++){var e=c[d],f=e.getSnapshot;e=e.value;try{if(!He(f(),e))return!1}catch(g){return!1}}}c=b.child;if(b.subtreeFlags&16384&&null!==c)c.return=b,b=c;else{if(b===a)break;for(;null===b.sibling;){if(null===b.return||b.return===a)return!0;b=b.return}b.sibling.return=b.return;b=b.sibling}}return!0}\nfunction Ck(a,b){b&=~rk;b&=~qk;a.suspendedLanes|=b;a.pingedLanes&=~b;for(a=a.expirationTimes;0<b;){var c=31-oc(b),d=1<<c;a[c]=-1;b&=~d}}function Ek(a){if(0!==(K&6))throw Error(p(327));Hk();var b=uc(a,0);if(0===(b&1))return Dk(a,B()),null;var c=Ik(a,b);if(0!==a.tag&&2===c){var d=xc(a);0!==d&&(b=d,c=Nk(a,d))}if(1===c)throw c=pk,Kk(a,0),Ck(a,b),Dk(a,B()),c;if(6===c)throw Error(p(345));a.finishedWork=a.current.alternate;a.finishedLanes=b;Pk(a,tk,uk);Dk(a,B());return null}\nfunction Qk(a,b){var c=K;K|=1;try{return a(b)}finally{K=c,0===K&&(Gj=B()+500,fg&&jg())}}function Rk(a){null!==wk&&0===wk.tag&&0===(K&6)&&Hk();var b=K;K|=1;var c=ok.transition,d=C;try{if(ok.transition=null,C=1,a)return a()}finally{C=d,ok.transition=c,K=b,0===(K&6)&&jg()}}function Hj(){fj=ej.current;E(ej)}\nfunction Kk(a,b){a.finishedWork=null;a.finishedLanes=0;var c=a.timeoutHandle;-1!==c&&(a.timeoutHandle=-1,Gf(c));if(null!==Y)for(c=Y.return;null!==c;){var d=c;wg(d);switch(d.tag){case 1:d=d.type.childContextTypes;null!==d&&void 0!==d&&$f();break;case 3:zh();E(Wf);E(H);Eh();break;case 5:Bh(d);break;case 4:zh();break;case 13:E(L);break;case 19:E(L);break;case 10:ah(d.type._context);break;case 22:case 23:Hj()}c=c.return}Q=a;Y=a=Pg(a.current,null);Z=fj=b;T=0;pk=null;rk=qk=rh=0;tk=sk=null;if(null!==fh){for(b=\n0;b<fh.length;b++)if(c=fh[b],d=c.interleaved,null!==d){c.interleaved=null;var e=d.next,f=c.pending;if(null!==f){var g=f.next;f.next=e;d.next=g}c.pending=d}fh=null}return a}\nfunction Mk(a,b){do{var c=Y;try{$g();Fh.current=Rh;if(Ih){for(var d=M.memoizedState;null!==d;){var e=d.queue;null!==e&&(e.pending=null);d=d.next}Ih=!1}Hh=0;O=N=M=null;Jh=!1;Kh=0;nk.current=null;if(null===c||null===c.return){T=1;pk=b;Y=null;break}a:{var f=a,g=c.return,h=c,k=b;b=Z;h.flags|=32768;if(null!==k&&\"object\"===typeof k&&\"function\"===typeof k.then){var l=k,m=h,q=m.tag;if(0===(m.mode&1)&&(0===q||11===q||15===q)){var r=m.alternate;r?(m.updateQueue=r.updateQueue,m.memoizedState=r.memoizedState,\nm.lanes=r.lanes):(m.updateQueue=null,m.memoizedState=null)}var y=Ui(g);if(null!==y){y.flags&=-257;Vi(y,g,h,f,b);y.mode&1&&Si(f,l,b);b=y;k=l;var n=b.updateQueue;if(null===n){var t=new Set;t.add(k);b.updateQueue=t}else n.add(k);break a}else{if(0===(b&1)){Si(f,l,b);tj();break a}k=Error(p(426))}}else if(I&&h.mode&1){var J=Ui(g);if(null!==J){0===(J.flags&65536)&&(J.flags|=256);Vi(J,g,h,f,b);Jg(Ji(k,h));break a}}f=k=Ji(k,h);4!==T&&(T=2);null===sk?sk=[f]:sk.push(f);f=g;do{switch(f.tag){case 3:f.flags|=65536;\nb&=-b;f.lanes|=b;var x=Ni(f,k,b);ph(f,x);break a;case 1:h=k;var w=f.type,u=f.stateNode;if(0===(f.flags&128)&&(\"function\"===typeof w.getDerivedStateFromError||null!==u&&\"function\"===typeof u.componentDidCatch&&(null===Ri||!Ri.has(u)))){f.flags|=65536;b&=-b;f.lanes|=b;var F=Qi(f,h,b);ph(f,F);break a}}f=f.return}while(null!==f)}Sk(c)}catch(na){b=na;Y===c&&null!==c&&(Y=c=c.return);continue}break}while(1)}function Jk(){var a=mk.current;mk.current=Rh;return null===a?Rh:a}\nfunction tj(){if(0===T||3===T||2===T)T=4;null===Q||0===(rh&268435455)&&0===(qk&268435455)||Ck(Q,Z)}function Ik(a,b){var c=K;K|=2;var d=Jk();if(Q!==a||Z!==b)uk=null,Kk(a,b);do try{Tk();break}catch(e){Mk(a,e)}while(1);$g();K=c;mk.current=d;if(null!==Y)throw Error(p(261));Q=null;Z=0;return T}function Tk(){for(;null!==Y;)Uk(Y)}function Lk(){for(;null!==Y&&!cc();)Uk(Y)}function Uk(a){var b=Vk(a.alternate,a,fj);a.memoizedProps=a.pendingProps;null===b?Sk(a):Y=b;nk.current=null}\nfunction Sk(a){var b=a;do{var c=b.alternate;a=b.return;if(0===(b.flags&32768)){if(c=Ej(c,b,fj),null!==c){Y=c;return}}else{c=Ij(c,b);if(null!==c){c.flags&=32767;Y=c;return}if(null!==a)a.flags|=32768,a.subtreeFlags=0,a.deletions=null;else{T=6;Y=null;return}}b=b.sibling;if(null!==b){Y=b;return}Y=b=a}while(null!==b);0===T&&(T=5)}function Pk(a,b,c){var d=C,e=ok.transition;try{ok.transition=null,C=1,Wk(a,b,c,d)}finally{ok.transition=e,C=d}return null}\nfunction Wk(a,b,c,d){do Hk();while(null!==wk);if(0!==(K&6))throw Error(p(327));c=a.finishedWork;var e=a.finishedLanes;if(null===c)return null;a.finishedWork=null;a.finishedLanes=0;if(c===a.current)throw Error(p(177));a.callbackNode=null;a.callbackPriority=0;var f=c.lanes|c.childLanes;Bc(a,f);a===Q&&(Y=Q=null,Z=0);0===(c.subtreeFlags&2064)&&0===(c.flags&2064)||vk||(vk=!0,Fk(hc,function(){Hk();return null}));f=0!==(c.flags&15990);if(0!==(c.subtreeFlags&15990)||f){f=ok.transition;ok.transition=null;\nvar g=C;C=1;var h=K;K|=4;nk.current=null;Oj(a,c);dk(c,a);Oe(Df);dd=!!Cf;Df=Cf=null;a.current=c;hk(c,a,e);dc();K=h;C=g;ok.transition=f}else a.current=c;vk&&(vk=!1,wk=a,xk=e);f=a.pendingLanes;0===f&&(Ri=null);mc(c.stateNode,d);Dk(a,B());if(null!==b)for(d=a.onRecoverableError,c=0;c<b.length;c++)e=b[c],d(e.value,{componentStack:e.stack,digest:e.digest});if(Oi)throw Oi=!1,a=Pi,Pi=null,a;0!==(xk&1)&&0!==a.tag&&Hk();f=a.pendingLanes;0!==(f&1)?a===zk?yk++:(yk=0,zk=a):yk=0;jg();return null}\nfunction Hk(){if(null!==wk){var a=Dc(xk),b=ok.transition,c=C;try{ok.transition=null;C=16>a?16:a;if(null===wk)var d=!1;else{a=wk;wk=null;xk=0;if(0!==(K&6))throw Error(p(331));var e=K;K|=4;for(V=a.current;null!==V;){var f=V,g=f.child;if(0!==(V.flags&16)){var h=f.deletions;if(null!==h){for(var k=0;k<h.length;k++){var l=h[k];for(V=l;null!==V;){var m=V;switch(m.tag){case 0:case 11:case 15:Pj(8,m,f)}var q=m.child;if(null!==q)q.return=m,V=q;else for(;null!==V;){m=V;var r=m.sibling,y=m.return;Sj(m);if(m===\nl){V=null;break}if(null!==r){r.return=y;V=r;break}V=y}}}var n=f.alternate;if(null!==n){var t=n.child;if(null!==t){n.child=null;do{var J=t.sibling;t.sibling=null;t=J}while(null!==t)}}V=f}}if(0!==(f.subtreeFlags&2064)&&null!==g)g.return=f,V=g;else b:for(;null!==V;){f=V;if(0!==(f.flags&2048))switch(f.tag){case 0:case 11:case 15:Pj(9,f,f.return)}var x=f.sibling;if(null!==x){x.return=f.return;V=x;break b}V=f.return}}var w=a.current;for(V=w;null!==V;){g=V;var u=g.child;if(0!==(g.subtreeFlags&2064)&&null!==\nu)u.return=g,V=u;else b:for(g=w;null!==V;){h=V;if(0!==(h.flags&2048))try{switch(h.tag){case 0:case 11:case 15:Qj(9,h)}}catch(na){W(h,h.return,na)}if(h===g){V=null;break b}var F=h.sibling;if(null!==F){F.return=h.return;V=F;break b}V=h.return}}K=e;jg();if(lc&&\"function\"===typeof lc.onPostCommitFiberRoot)try{lc.onPostCommitFiberRoot(kc,a)}catch(na){}d=!0}return d}finally{C=c,ok.transition=b}}return!1}function Xk(a,b,c){b=Ji(c,b);b=Ni(a,b,1);a=nh(a,b,1);b=R();null!==a&&(Ac(a,1,b),Dk(a,b))}\nfunction W(a,b,c){if(3===a.tag)Xk(a,a,c);else for(;null!==b;){if(3===b.tag){Xk(b,a,c);break}else if(1===b.tag){var d=b.stateNode;if(\"function\"===typeof b.type.getDerivedStateFromError||\"function\"===typeof d.componentDidCatch&&(null===Ri||!Ri.has(d))){a=Ji(c,a);a=Qi(b,a,1);b=nh(b,a,1);a=R();null!==b&&(Ac(b,1,a),Dk(b,a));break}}b=b.return}}\nfunction Ti(a,b,c){var d=a.pingCache;null!==d&&d.delete(b);b=R();a.pingedLanes|=a.suspendedLanes&c;Q===a&&(Z&c)===c&&(4===T||3===T&&(Z&130023424)===Z&&500>B()-fk?Kk(a,0):rk|=c);Dk(a,b)}function Yk(a,b){0===b&&(0===(a.mode&1)?b=1:(b=sc,sc<<=1,0===(sc&130023424)&&(sc=4194304)));var c=R();a=ih(a,b);null!==a&&(Ac(a,b,c),Dk(a,c))}function uj(a){var b=a.memoizedState,c=0;null!==b&&(c=b.retryLane);Yk(a,c)}\nfunction bk(a,b){var c=0;switch(a.tag){case 13:var d=a.stateNode;var e=a.memoizedState;null!==e&&(c=e.retryLane);break;case 19:d=a.stateNode;break;default:throw Error(p(314));}null!==d&&d.delete(b);Yk(a,c)}var Vk;\nVk=function(a,b,c){if(null!==a)if(a.memoizedProps!==b.pendingProps||Wf.current)dh=!0;else{if(0===(a.lanes&c)&&0===(b.flags&128))return dh=!1,yj(a,b,c);dh=0!==(a.flags&131072)?!0:!1}else dh=!1,I&&0!==(b.flags&1048576)&&ug(b,ng,b.index);b.lanes=0;switch(b.tag){case 2:var d=b.type;ij(a,b);a=b.pendingProps;var e=Yf(b,H.current);ch(b,c);e=Nh(null,b,d,a,e,c);var f=Sh();b.flags|=1;\"object\"===typeof e&&null!==e&&\"function\"===typeof e.render&&void 0===e.$$typeof?(b.tag=1,b.memoizedState=null,b.updateQueue=\nnull,Zf(d)?(f=!0,cg(b)):f=!1,b.memoizedState=null!==e.state&&void 0!==e.state?e.state:null,kh(b),e.updater=Ei,b.stateNode=e,e._reactInternals=b,Ii(b,d,a,c),b=jj(null,b,d,!0,f,c)):(b.tag=0,I&&f&&vg(b),Xi(null,b,e,c),b=b.child);return b;case 16:d=b.elementType;a:{ij(a,b);a=b.pendingProps;e=d._init;d=e(d._payload);b.type=d;e=b.tag=Zk(d);a=Ci(d,a);switch(e){case 0:b=cj(null,b,d,a,c);break a;case 1:b=hj(null,b,d,a,c);break a;case 11:b=Yi(null,b,d,a,c);break a;case 14:b=$i(null,b,d,Ci(d.type,a),c);break a}throw Error(p(306,\nd,\"\"));}return b;case 0:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:Ci(d,e),cj(a,b,d,e,c);case 1:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:Ci(d,e),hj(a,b,d,e,c);case 3:a:{kj(b);if(null===a)throw Error(p(387));d=b.pendingProps;f=b.memoizedState;e=f.element;lh(a,b);qh(b,d,null,c);var g=b.memoizedState;d=g.element;if(f.isDehydrated)if(f={element:d,isDehydrated:!1,cache:g.cache,pendingSuspenseBoundaries:g.pendingSuspenseBoundaries,transitions:g.transitions},b.updateQueue.baseState=\nf,b.memoizedState=f,b.flags&256){e=Ji(Error(p(423)),b);b=lj(a,b,d,c,e);break a}else if(d!==e){e=Ji(Error(p(424)),b);b=lj(a,b,d,c,e);break a}else for(yg=Lf(b.stateNode.containerInfo.firstChild),xg=b,I=!0,zg=null,c=Vg(b,null,d,c),b.child=c;c;)c.flags=c.flags&-3|4096,c=c.sibling;else{Ig();if(d===e){b=Zi(a,b,c);break a}Xi(a,b,d,c)}b=b.child}return b;case 5:return Ah(b),null===a&&Eg(b),d=b.type,e=b.pendingProps,f=null!==a?a.memoizedProps:null,g=e.children,Ef(d,e)?g=null:null!==f&&Ef(d,f)&&(b.flags|=32),\ngj(a,b),Xi(a,b,g,c),b.child;case 6:return null===a&&Eg(b),null;case 13:return oj(a,b,c);case 4:return yh(b,b.stateNode.containerInfo),d=b.pendingProps,null===a?b.child=Ug(b,null,d,c):Xi(a,b,d,c),b.child;case 11:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:Ci(d,e),Yi(a,b,d,e,c);case 7:return Xi(a,b,b.pendingProps,c),b.child;case 8:return Xi(a,b,b.pendingProps.children,c),b.child;case 12:return Xi(a,b,b.pendingProps.children,c),b.child;case 10:a:{d=b.type._context;e=b.pendingProps;f=b.memoizedProps;\ng=e.value;G(Wg,d._currentValue);d._currentValue=g;if(null!==f)if(He(f.value,g)){if(f.children===e.children&&!Wf.current){b=Zi(a,b,c);break a}}else for(f=b.child,null!==f&&(f.return=b);null!==f;){var h=f.dependencies;if(null!==h){g=f.child;for(var k=h.firstContext;null!==k;){if(k.context===d){if(1===f.tag){k=mh(-1,c&-c);k.tag=2;var l=f.updateQueue;if(null!==l){l=l.shared;var m=l.pending;null===m?k.next=k:(k.next=m.next,m.next=k);l.pending=k}}f.lanes|=c;k=f.alternate;null!==k&&(k.lanes|=c);bh(f.return,\nc,b);h.lanes|=c;break}k=k.next}}else if(10===f.tag)g=f.type===b.type?null:f.child;else if(18===f.tag){g=f.return;if(null===g)throw Error(p(341));g.lanes|=c;h=g.alternate;null!==h&&(h.lanes|=c);bh(g,c,b);g=f.sibling}else g=f.child;if(null!==g)g.return=f;else for(g=f;null!==g;){if(g===b){g=null;break}f=g.sibling;if(null!==f){f.return=g.return;g=f;break}g=g.return}f=g}Xi(a,b,e.children,c);b=b.child}return b;case 9:return e=b.type,d=b.pendingProps.children,ch(b,c),e=eh(e),d=d(e),b.flags|=1,Xi(a,b,d,c),\nb.child;case 14:return d=b.type,e=Ci(d,b.pendingProps),e=Ci(d.type,e),$i(a,b,d,e,c);case 15:return bj(a,b,b.type,b.pendingProps,c);case 17:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:Ci(d,e),ij(a,b),b.tag=1,Zf(d)?(a=!0,cg(b)):a=!1,ch(b,c),Gi(b,d,e),Ii(b,d,e,c),jj(null,b,d,!0,a,c);case 19:return xj(a,b,c);case 22:return dj(a,b,c)}throw Error(p(156,b.tag));};function Fk(a,b){return ac(a,b)}\nfunction $k(a,b,c,d){this.tag=a;this.key=c;this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null;this.index=0;this.ref=null;this.pendingProps=b;this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null;this.mode=d;this.subtreeFlags=this.flags=0;this.deletions=null;this.childLanes=this.lanes=0;this.alternate=null}function Bg(a,b,c,d){return new $k(a,b,c,d)}function aj(a){a=a.prototype;return!(!a||!a.isReactComponent)}\nfunction Zk(a){if(\"function\"===typeof a)return aj(a)?1:0;if(void 0!==a&&null!==a){a=a.$$typeof;if(a===Da)return 11;if(a===Ga)return 14}return 2}\nfunction Pg(a,b){var c=a.alternate;null===c?(c=Bg(a.tag,b,a.key,a.mode),c.elementType=a.elementType,c.type=a.type,c.stateNode=a.stateNode,c.alternate=a,a.alternate=c):(c.pendingProps=b,c.type=a.type,c.flags=0,c.subtreeFlags=0,c.deletions=null);c.flags=a.flags&14680064;c.childLanes=a.childLanes;c.lanes=a.lanes;c.child=a.child;c.memoizedProps=a.memoizedProps;c.memoizedState=a.memoizedState;c.updateQueue=a.updateQueue;b=a.dependencies;c.dependencies=null===b?null:{lanes:b.lanes,firstContext:b.firstContext};\nc.sibling=a.sibling;c.index=a.index;c.ref=a.ref;return c}\nfunction Rg(a,b,c,d,e,f){var g=2;d=a;if(\"function\"===typeof a)aj(a)&&(g=1);else if(\"string\"===typeof a)g=5;else a:switch(a){case ya:return Tg(c.children,e,f,b);case za:g=8;e|=8;break;case Aa:return a=Bg(12,c,b,e|2),a.elementType=Aa,a.lanes=f,a;case Ea:return a=Bg(13,c,b,e),a.elementType=Ea,a.lanes=f,a;case Fa:return a=Bg(19,c,b,e),a.elementType=Fa,a.lanes=f,a;case Ia:return pj(c,e,f,b);default:if(\"object\"===typeof a&&null!==a)switch(a.$$typeof){case Ba:g=10;break a;case Ca:g=9;break a;case Da:g=11;\nbreak a;case Ga:g=14;break a;case Ha:g=16;d=null;break a}throw Error(p(130,null==a?a:typeof a,\"\"));}b=Bg(g,c,b,e);b.elementType=a;b.type=d;b.lanes=f;return b}function Tg(a,b,c,d){a=Bg(7,a,d,b);a.lanes=c;return a}function pj(a,b,c,d){a=Bg(22,a,d,b);a.elementType=Ia;a.lanes=c;a.stateNode={isHidden:!1};return a}function Qg(a,b,c){a=Bg(6,a,null,b);a.lanes=c;return a}\nfunction Sg(a,b,c){b=Bg(4,null!==a.children?a.children:[],a.key,b);b.lanes=c;b.stateNode={containerInfo:a.containerInfo,pendingChildren:null,implementation:a.implementation};return b}\nfunction al(a,b,c,d,e){this.tag=b;this.containerInfo=a;this.finishedWork=this.pingCache=this.current=this.pendingChildren=null;this.timeoutHandle=-1;this.callbackNode=this.pendingContext=this.context=null;this.callbackPriority=0;this.eventTimes=zc(0);this.expirationTimes=zc(-1);this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0;this.entanglements=zc(0);this.identifierPrefix=d;this.onRecoverableError=e;this.mutableSourceEagerHydrationData=\nnull}function bl(a,b,c,d,e,f,g,h,k){a=new al(a,b,c,h,k);1===b?(b=1,!0===f&&(b|=8)):b=0;f=Bg(3,null,null,b);a.current=f;f.stateNode=a;f.memoizedState={element:d,isDehydrated:c,cache:null,transitions:null,pendingSuspenseBoundaries:null};kh(f);return a}function cl(a,b,c){var d=3<arguments.length&&void 0!==arguments[3]?arguments[3]:null;return{$$typeof:wa,key:null==d?null:\"\"+d,children:a,containerInfo:b,implementation:c}}\nfunction dl(a){if(!a)return Vf;a=a._reactInternals;a:{if(Vb(a)!==a||1!==a.tag)throw Error(p(170));var b=a;do{switch(b.tag){case 3:b=b.stateNode.context;break a;case 1:if(Zf(b.type)){b=b.stateNode.__reactInternalMemoizedMergedChildContext;break a}}b=b.return}while(null!==b);throw Error(p(171));}if(1===a.tag){var c=a.type;if(Zf(c))return bg(a,c,b)}return b}\nfunction el(a,b,c,d,e,f,g,h,k){a=bl(c,d,!0,a,e,f,g,h,k);a.context=dl(null);c=a.current;d=R();e=yi(c);f=mh(d,e);f.callback=void 0!==b&&null!==b?b:null;nh(c,f,e);a.current.lanes=e;Ac(a,e,d);Dk(a,d);return a}function fl(a,b,c,d){var e=b.current,f=R(),g=yi(e);c=dl(c);null===b.context?b.context=c:b.pendingContext=c;b=mh(f,g);b.payload={element:a};d=void 0===d?null:d;null!==d&&(b.callback=d);a=nh(e,b,g);null!==a&&(gi(a,e,g,f),oh(a,e,g));return g}\nfunction gl(a){a=a.current;if(!a.child)return null;switch(a.child.tag){case 5:return a.child.stateNode;default:return a.child.stateNode}}function hl(a,b){a=a.memoizedState;if(null!==a&&null!==a.dehydrated){var c=a.retryLane;a.retryLane=0!==c&&c<b?c:b}}function il(a,b){hl(a,b);(a=a.alternate)&&hl(a,b)}function jl(){return null}var kl=\"function\"===typeof reportError?reportError:function(a){console.error(a)};function ll(a){this._internalRoot=a}\nml.prototype.render=ll.prototype.render=function(a){var b=this._internalRoot;if(null===b)throw Error(p(409));fl(a,b,null,null)};ml.prototype.unmount=ll.prototype.unmount=function(){var a=this._internalRoot;if(null!==a){this._internalRoot=null;var b=a.containerInfo;Rk(function(){fl(null,a,null,null)});b[uf]=null}};function ml(a){this._internalRoot=a}\nml.prototype.unstable_scheduleHydration=function(a){if(a){var b=Hc();a={blockedOn:null,target:a,priority:b};for(var c=0;c<Qc.length&&0!==b&&b<Qc[c].priority;c++);Qc.splice(c,0,a);0===c&&Vc(a)}};function nl(a){return!(!a||1!==a.nodeType&&9!==a.nodeType&&11!==a.nodeType)}function ol(a){return!(!a||1!==a.nodeType&&9!==a.nodeType&&11!==a.nodeType&&(8!==a.nodeType||\" react-mount-point-unstable \"!==a.nodeValue))}function pl(){}\nfunction ql(a,b,c,d,e){if(e){if(\"function\"===typeof d){var f=d;d=function(){var a=gl(g);f.call(a)}}var g=el(b,d,a,0,null,!1,!1,\"\",pl);a._reactRootContainer=g;a[uf]=g.current;sf(8===a.nodeType?a.parentNode:a);Rk();return g}for(;e=a.lastChild;)a.removeChild(e);if(\"function\"===typeof d){var h=d;d=function(){var a=gl(k);h.call(a)}}var k=bl(a,0,!1,null,null,!1,!1,\"\",pl);a._reactRootContainer=k;a[uf]=k.current;sf(8===a.nodeType?a.parentNode:a);Rk(function(){fl(b,k,c,d)});return k}\nfunction rl(a,b,c,d,e){var f=c._reactRootContainer;if(f){var g=f;if(\"function\"===typeof e){var h=e;e=function(){var a=gl(g);h.call(a)}}fl(b,g,a,e)}else g=ql(c,b,a,e,d);return gl(g)}Ec=function(a){switch(a.tag){case 3:var b=a.stateNode;if(b.current.memoizedState.isDehydrated){var c=tc(b.pendingLanes);0!==c&&(Cc(b,c|1),Dk(b,B()),0===(K&6)&&(Gj=B()+500,jg()))}break;case 13:Rk(function(){var b=ih(a,1);if(null!==b){var c=R();gi(b,a,1,c)}}),il(a,1)}};\nFc=function(a){if(13===a.tag){var b=ih(a,134217728);if(null!==b){var c=R();gi(b,a,134217728,c)}il(a,134217728)}};Gc=function(a){if(13===a.tag){var b=yi(a),c=ih(a,b);if(null!==c){var d=R();gi(c,a,b,d)}il(a,b)}};Hc=function(){return C};Ic=function(a,b){var c=C;try{return C=a,b()}finally{C=c}};\nyb=function(a,b,c){switch(b){case \"input\":bb(a,c);b=c.name;if(\"radio\"===c.type&&null!=b){for(c=a;c.parentNode;)c=c.parentNode;c=c.querySelectorAll(\"input[name=\"+JSON.stringify(\"\"+b)+'][type=\"radio\"]');for(b=0;b<c.length;b++){var d=c[b];if(d!==a&&d.form===a.form){var e=Db(d);if(!e)throw Error(p(90));Wa(d);bb(d,e)}}}break;case \"textarea\":ib(a,c);break;case \"select\":b=c.value,null!=b&&fb(a,!!c.multiple,b,!1)}};Gb=Qk;Hb=Rk;\nvar sl={usingClientEntryPoint:!1,Events:[Cb,ue,Db,Eb,Fb,Qk]},tl={findFiberByHostInstance:Wc,bundleType:0,version:\"18.3.1\",rendererPackageName:\"react-dom\"};\nvar ul={bundleType:tl.bundleType,version:tl.version,rendererPackageName:tl.rendererPackageName,rendererConfig:tl.rendererConfig,overrideHookState:null,overrideHookStateDeletePath:null,overrideHookStateRenamePath:null,overrideProps:null,overridePropsDeletePath:null,overridePropsRenamePath:null,setErrorHandler:null,setSuspenseHandler:null,scheduleUpdate:null,currentDispatcherRef:ua.ReactCurrentDispatcher,findHostInstanceByFiber:function(a){a=Zb(a);return null===a?null:a.stateNode},findFiberByHostInstance:tl.findFiberByHostInstance||\njl,findHostInstancesForRefresh:null,scheduleRefresh:null,scheduleRoot:null,setRefreshHandler:null,getCurrentFiber:null,reconcilerVersion:\"18.3.1-next-f1338f8080-20240426\"};if(\"undefined\"!==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__){var vl=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(!vl.isDisabled&&vl.supportsFiber)try{kc=vl.inject(ul),lc=vl}catch(a){}}exports.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=sl;\nexports.createPortal=function(a,b){var c=2<arguments.length&&void 0!==arguments[2]?arguments[2]:null;if(!nl(b))throw Error(p(200));return cl(a,b,null,c)};exports.createRoot=function(a,b){if(!nl(a))throw Error(p(299));var c=!1,d=\"\",e=kl;null!==b&&void 0!==b&&(!0===b.unstable_strictMode&&(c=!0),void 0!==b.identifierPrefix&&(d=b.identifierPrefix),void 0!==b.onRecoverableError&&(e=b.onRecoverableError));b=bl(a,1,!1,null,null,c,!1,d,e);a[uf]=b.current;sf(8===a.nodeType?a.parentNode:a);return new ll(b)};\nexports.findDOMNode=function(a){if(null==a)return null;if(1===a.nodeType)return a;var b=a._reactInternals;if(void 0===b){if(\"function\"===typeof a.render)throw Error(p(188));a=Object.keys(a).join(\",\");throw Error(p(268,a));}a=Zb(b);a=null===a?null:a.stateNode;return a};exports.flushSync=function(a){return Rk(a)};exports.hydrate=function(a,b,c){if(!ol(b))throw Error(p(200));return rl(null,a,b,!0,c)};\nexports.hydrateRoot=function(a,b,c){if(!nl(a))throw Error(p(405));var d=null!=c&&c.hydratedSources||null,e=!1,f=\"\",g=kl;null!==c&&void 0!==c&&(!0===c.unstable_strictMode&&(e=!0),void 0!==c.identifierPrefix&&(f=c.identifierPrefix),void 0!==c.onRecoverableError&&(g=c.onRecoverableError));b=el(b,null,a,1,null!=c?c:null,e,!1,f,g);a[uf]=b.current;sf(a);if(d)for(a=0;a<d.length;a++)c=d[a],e=c._getVersion,e=e(c._source),null==b.mutableSourceEagerHydrationData?b.mutableSourceEagerHydrationData=[c,e]:b.mutableSourceEagerHydrationData.push(c,\ne);return new ml(b)};exports.render=function(a,b,c){if(!ol(b))throw Error(p(200));return rl(null,a,b,!1,c)};exports.unmountComponentAtNode=function(a){if(!ol(a))throw Error(p(40));return a._reactRootContainer?(Rk(function(){rl(null,null,a,!1,function(){a._reactRootContainer=null;a[uf]=null})}),!0):!1};exports.unstable_batchedUpdates=Qk;\nexports.unstable_renderSubtreeIntoContainer=function(a,b,c,d){if(!ol(c))throw Error(p(200));if(null==a||void 0===a._reactInternals)throw Error(p(38));return rl(a,b,c,!1,d)};exports.version=\"18.3.1-next-f1338f8080-20240426\";\n","'use strict';\n\nvar m = require('react-dom');\nif (process.env.NODE_ENV === 'production') {\n exports.createRoot = m.createRoot;\n exports.hydrateRoot = m.hydrateRoot;\n} else {\n var i = m.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;\n exports.createRoot = function(c, o) {\n i.usingClientEntryPoint = true;\n try {\n return m.createRoot(c, o);\n } finally {\n i.usingClientEntryPoint = false;\n }\n };\n exports.hydrateRoot = function(c, h, o) {\n i.usingClientEntryPoint = true;\n try {\n return m.hydrateRoot(c, h, o);\n } finally {\n i.usingClientEntryPoint = false;\n }\n };\n}\n","'use strict';\n\nfunction checkDCE() {\n /* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\n if (\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === 'undefined' ||\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE !== 'function'\n ) {\n return;\n }\n if (process.env.NODE_ENV !== 'production') {\n // This branch is unreachable because this function is only called\n // in production, but the condition is true only in development.\n // Therefore if the branch is still here, dead code elimination wasn't\n // properly applied.\n // Don't change the message. React DevTools relies on it. Also make sure\n // this message doesn't occur elsewhere in this function, or it will cause\n // a false positive.\n throw new Error('^_^');\n }\n try {\n // Verify that the code above has been dead code eliminated (DCE'd).\n __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(checkDCE);\n } catch (err) {\n // DevTools shouldn't crash React, no matter what.\n // We should still report in case we break this code.\n console.error(err);\n }\n}\n\nif (process.env.NODE_ENV === 'production') {\n // DCE check should happen before ReactDOM bundle executes so that\n // DevTools can report bad minification during injection.\n checkDCE();\n module.exports = require('./cjs/react-dom.production.min.js');\n} else {\n module.exports = require('./cjs/react-dom.development.js');\n}\n","'use strict';\n\nvar l, s;\nif (process.env.NODE_ENV === 'production') {\n l = require('./cjs/react-dom-server-legacy.browser.production.min.js');\n s = require('./cjs/react-dom-server.browser.production.min.js');\n} else {\n l = require('./cjs/react-dom-server-legacy.browser.development.js');\n s = require('./cjs/react-dom-server.browser.development.js');\n}\n\nexports.version = l.version;\nexports.renderToString = l.renderToString;\nexports.renderToStaticMarkup = l.renderToStaticMarkup;\nexports.renderToNodeStream = l.renderToNodeStream;\nexports.renderToStaticNodeStream = l.renderToStaticNodeStream;\nexports.renderToReadableStream = s.renderToReadableStream;\n","/**\n * @license React\n * react-is.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var b=Symbol.for(\"react.element\"),c=Symbol.for(\"react.portal\"),d=Symbol.for(\"react.fragment\"),e=Symbol.for(\"react.strict_mode\"),f=Symbol.for(\"react.profiler\"),g=Symbol.for(\"react.provider\"),h=Symbol.for(\"react.context\"),k=Symbol.for(\"react.server_context\"),l=Symbol.for(\"react.forward_ref\"),m=Symbol.for(\"react.suspense\"),n=Symbol.for(\"react.suspense_list\"),p=Symbol.for(\"react.memo\"),q=Symbol.for(\"react.lazy\"),t=Symbol.for(\"react.offscreen\"),u;u=Symbol.for(\"react.module.reference\");\nfunction v(a){if(\"object\"===typeof a&&null!==a){var r=a.$$typeof;switch(r){case b:switch(a=a.type,a){case d:case f:case e:case m:case n:return a;default:switch(a=a&&a.$$typeof,a){case k:case h:case l:case q:case p:case g:return a;default:return r}}case c:return r}}}exports.ContextConsumer=h;exports.ContextProvider=g;exports.Element=b;exports.ForwardRef=l;exports.Fragment=d;exports.Lazy=q;exports.Memo=p;exports.Portal=c;exports.Profiler=f;exports.StrictMode=e;exports.Suspense=m;\nexports.SuspenseList=n;exports.isAsyncMode=function(){return!1};exports.isConcurrentMode=function(){return!1};exports.isContextConsumer=function(a){return v(a)===h};exports.isContextProvider=function(a){return v(a)===g};exports.isElement=function(a){return\"object\"===typeof a&&null!==a&&a.$$typeof===b};exports.isForwardRef=function(a){return v(a)===l};exports.isFragment=function(a){return v(a)===d};exports.isLazy=function(a){return v(a)===q};exports.isMemo=function(a){return v(a)===p};\nexports.isPortal=function(a){return v(a)===c};exports.isProfiler=function(a){return v(a)===f};exports.isStrictMode=function(a){return v(a)===e};exports.isSuspense=function(a){return v(a)===m};exports.isSuspenseList=function(a){return v(a)===n};\nexports.isValidElementType=function(a){return\"string\"===typeof a||\"function\"===typeof a||a===d||a===f||a===e||a===m||a===n||a===t||\"object\"===typeof a&&null!==a&&(a.$$typeof===q||a.$$typeof===p||a.$$typeof===g||a.$$typeof===h||a.$$typeof===l||a.$$typeof===u||void 0!==a.getModuleId)?!0:!1};exports.typeOf=v;\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-is.production.min.js');\n} else {\n module.exports = require('./cjs/react-is.development.js');\n}\n","\"use strict\";\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = Loader;\n\nvar _react = _interopRequireWildcard(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _loader = require(\"./loader\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nfunction _getRequireWildcardCache() { if (typeof WeakMap !== \"function\") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== \"object\" && typeof obj !== \"function\") { return { \"default\": obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj[\"default\"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { if (typeof Symbol === \"undefined\" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nvar componentNames = [\"Audio\", \"BallTriangle\", \"Bars\", \"Circles\", \"Grid\", \"Hearts\", \"Oval\", \"Puff\", \"Rings\", \"TailSpin\", \"ThreeDots\", \"Watch\", \"RevolvingDot\", \"Triangle\", \"Plane\", \"MutatingDots\", \"CradleLoader\"];\n\nfunction componentName(type) {\n if (componentNames.includes(type)) {\n return _loader.Spinner[type];\n }\n\n return _loader.Spinner.Audio;\n}\n/**\n * @return {null}\n */\n\n\nfunction Loader(props) {\n var _useState = (0, _react.useState)(true),\n _useState2 = _slicedToArray(_useState, 2),\n display = _useState2[0],\n setDisplay = _useState2[1];\n\n (0, _react.useEffect)(function () {\n var timer;\n\n if (props.timeout && props.timeout > 0) {\n timer = setTimeout(function () {\n setDisplay(false);\n }, props.timeout);\n }\n\n return function () {\n if (timer) clearTimeout(timer);\n };\n });\n\n if (!props.visible || props.visible === \"false\") {\n return null;\n }\n\n return display ? /*#__PURE__*/_react[\"default\"].createElement(\"div\", {\n \"aria-busy\": \"true\",\n className: props.className,\n style: props.style\n }, /*#__PURE__*/_react[\"default\"].createElement(componentName(props.type), _objectSpread({}, props))) : null;\n}\n\nLoader.propTypes = {\n type: _propTypes[\"default\"].oneOf([].concat(componentNames)),\n style: _propTypes[\"default\"].objectOf(_propTypes[\"default\"].string),\n className: _propTypes[\"default\"].string,\n visible: _propTypes[\"default\"].oneOfType([_propTypes[\"default\"].bool, _propTypes[\"default\"].string]),\n timeout: _propTypes[\"default\"].number\n};\nLoader.defaultProps = {\n type: \"Audio\",\n style: {},\n className: \"\",\n visible: true,\n timeout: 0\n};","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.Audio = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nvar Audio = function Audio(props) {\n return /*#__PURE__*/_react[\"default\"].createElement(\"svg\", {\n height: props.height,\n width: props.width,\n fill: props.color,\n viewBox: \"0 0 55 80\",\n xmlns: \"http://www.w3.org/2000/svg\",\n \"aria-label\": props.label\n }, /*#__PURE__*/_react[\"default\"].createElement(\"g\", {\n transform: \"matrix(1 0 0 -1 0 80)\"\n }, /*#__PURE__*/_react[\"default\"].createElement(\"rect\", {\n width: \"10\",\n height: \"20\",\n rx: \"3\"\n }, /*#__PURE__*/_react[\"default\"].createElement(\"animate\", {\n attributeName: \"height\",\n begin: \"0s\",\n dur: \"4.3s\",\n values: \"20;45;57;80;64;32;66;45;64;23;66;13;64;56;34;34;2;23;76;79;20\",\n calcMode: \"linear\",\n repeatCount: \"indefinite\"\n })), /*#__PURE__*/_react[\"default\"].createElement(\"rect\", {\n x: \"15\",\n width: \"10\",\n height: \"80\",\n rx: \"3\"\n }, /*#__PURE__*/_react[\"default\"].createElement(\"animate\", {\n attributeName: \"height\",\n begin: \"0s\",\n dur: \"2s\",\n values: \"80;55;33;5;75;23;73;33;12;14;60;80\",\n calcMode: \"linear\",\n repeatCount: \"indefinite\"\n })), /*#__PURE__*/_react[\"default\"].createElement(\"rect\", {\n x: \"30\",\n width: \"10\",\n height: \"50\",\n rx: \"3\"\n }, /*#__PURE__*/_react[\"default\"].createElement(\"animate\", {\n attributeName: \"height\",\n begin: \"0s\",\n dur: \"1.4s\",\n values: \"50;34;78;23;56;23;34;76;80;54;21;50\",\n calcMode: \"linear\",\n repeatCount: \"indefinite\"\n })), /*#__PURE__*/_react[\"default\"].createElement(\"rect\", {\n x: \"45\",\n width: \"10\",\n height: \"30\",\n rx: \"3\"\n }, /*#__PURE__*/_react[\"default\"].createElement(\"animate\", {\n attributeName: \"height\",\n begin: \"0s\",\n dur: \"2s\",\n values: \"30;45;13;80;56;72;45;76;34;23;67;30\",\n calcMode: \"linear\",\n repeatCount: \"indefinite\"\n }))));\n};\n\nexports.Audio = Audio;\nAudio.propTypes = {\n height: _propTypes[\"default\"].oneOfType([_propTypes[\"default\"].string, _propTypes[\"default\"].number]),\n width: _propTypes[\"default\"].oneOfType([_propTypes[\"default\"].string, _propTypes[\"default\"].number]),\n color: _propTypes[\"default\"].string,\n label: _propTypes[\"default\"].string\n};\nAudio.defaultProps = {\n height: 80,\n width: 80,\n color: \"green\",\n label: \"audio-loading\"\n};","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.BallTriangle = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nvar BallTriangle = function BallTriangle(props) {\n return /*#__PURE__*/_react[\"default\"].createElement(\"svg\", {\n height: props.height,\n width: props.width,\n stroke: props.color,\n viewBox: \"0 0 57 57\",\n xmlns: \"http://www.w3.org/2000/svg\",\n \"aria-label\": props.label\n }, /*#__PURE__*/_react[\"default\"].createElement(\"g\", {\n fill: \"none\",\n fillRule: \"evenodd\"\n }, /*#__PURE__*/_react[\"default\"].createElement(\"g\", {\n transform: \"translate(1 1)\",\n strokeWidth: \"2\"\n }, /*#__PURE__*/_react[\"default\"].createElement(\"circle\", {\n cx: \"5\",\n cy: \"50\",\n r: props.radius\n }, /*#__PURE__*/_react[\"default\"].createElement(\"animate\", {\n attributeName: \"cy\",\n begin: \"0s\",\n dur: \"2.2s\",\n values: \"50;5;50;50\",\n calcMode: \"linear\",\n repeatCount: \"indefinite\"\n }), /*#__PURE__*/_react[\"default\"].createElement(\"animate\", {\n attributeName: \"cx\",\n begin: \"0s\",\n dur: \"2.2s\",\n values: \"5;27;49;5\",\n calcMode: \"linear\",\n repeatCount: \"indefinite\"\n })), /*#__PURE__*/_react[\"default\"].createElement(\"circle\", {\n cx: \"27\",\n cy: \"5\",\n r: props.radius\n }, /*#__PURE__*/_react[\"default\"].createElement(\"animate\", {\n attributeName: \"cy\",\n begin: \"0s\",\n dur: \"2.2s\",\n from: \"5\",\n to: \"5\",\n values: \"5;50;50;5\",\n calcMode: \"linear\",\n repeatCount: \"indefinite\"\n }), /*#__PURE__*/_react[\"default\"].createElement(\"animate\", {\n attributeName: \"cx\",\n begin: \"0s\",\n dur: \"2.2s\",\n from: \"27\",\n to: \"27\",\n values: \"27;49;5;27\",\n calcMode: \"linear\",\n repeatCount: \"indefinite\"\n })), /*#__PURE__*/_react[\"default\"].createElement(\"circle\", {\n cx: \"49\",\n cy: \"50\",\n r: props.radius\n }, /*#__PURE__*/_react[\"default\"].createElement(\"animate\", {\n attributeName: \"cy\",\n begin: \"0s\",\n dur: \"2.2s\",\n values: \"50;50;5;50\",\n calcMode: \"linear\",\n repeatCount: \"indefinite\"\n }), /*#__PURE__*/_react[\"default\"].createElement(\"animate\", {\n attributeName: \"cx\",\n from: \"49\",\n to: \"49\",\n begin: \"0s\",\n dur: \"2.2s\",\n values: \"49;5;27;49\",\n calcMode: \"linear\",\n repeatCount: \"indefinite\"\n })))));\n};\n\nexports.BallTriangle = BallTriangle;\nBallTriangle.propTypes = {\n height: _propTypes[\"default\"].oneOfType([_propTypes[\"default\"].string, _propTypes[\"default\"].number]),\n width: _propTypes[\"default\"].oneOfType([_propTypes[\"default\"].string, _propTypes[\"default\"].number]),\n color: _propTypes[\"default\"].string,\n label: _propTypes[\"default\"].string,\n radius: _propTypes[\"default\"].number\n};\nBallTriangle.defaultProps = {\n height: 80,\n width: 80,\n color: \"green\",\n radius: 5,\n label: \"audio-loading\"\n};","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.Bars = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nvar Bars = function Bars(props) {\n return /*#__PURE__*/_react[\"default\"].createElement(\"svg\", {\n width: props.width,\n height: props.height,\n fill: props.color,\n viewBox: \"0 0 135 140\",\n xmlns: \"http://www.w3.org/2000/svg\",\n \"aria-label\": props.label\n }, /*#__PURE__*/_react[\"default\"].createElement(\"rect\", {\n y: \"10\",\n width: \"15\",\n height: \"120\",\n rx: \"6\"\n }, /*#__PURE__*/_react[\"default\"].createElement(\"animate\", {\n attributeName: \"height\",\n begin: \"0.5s\",\n dur: \"1s\",\n values: \"120;110;100;90;80;70;60;50;40;140;120\",\n calcMode: \"linear\",\n repeatCount: \"indefinite\"\n }), /*#__PURE__*/_react[\"default\"].createElement(\"animate\", {\n attributeName: \"y\",\n begin: \"0.5s\",\n dur: \"1s\",\n values: \"10;15;20;25;30;35;40;45;50;0;10\",\n calcMode: \"linear\",\n repeatCount: \"indefinite\"\n })), /*#__PURE__*/_react[\"default\"].createElement(\"rect\", {\n x: \"30\",\n y: \"10\",\n width: \"15\",\n height: \"120\",\n rx: \"6\"\n }, /*#__PURE__*/_react[\"default\"].createElement(\"animate\", {\n attributeName: \"height\",\n begin: \"0.25s\",\n dur: \"1s\",\n values: \"120;110;100;90;80;70;60;50;40;140;120\",\n calcMode: \"linear\",\n repeatCount: \"indefinite\"\n }), /*#__PURE__*/_react[\"default\"].createElement(\"animate\", {\n attributeName: \"y\",\n begin: \"0.25s\",\n dur: \"1s\",\n values: \"10;15;20;25;30;35;40;45;50;0;10\",\n calcMode: \"linear\",\n repeatCount: \"indefinite\"\n })), /*#__PURE__*/_react[\"default\"].createElement(\"rect\", {\n x: \"60\",\n width: \"15\",\n height: \"140\",\n rx: \"6\"\n }, /*#__PURE__*/_react[\"default\"].createElement(\"animate\", {\n attributeName: \"height\",\n begin: \"0s\",\n dur: \"1s\",\n values: \"120;110;100;90;80;70;60;50;40;140;120\",\n calcMode: \"linear\",\n repeatCount: \"indefinite\"\n }), /*#__PURE__*/_react[\"default\"].createElement(\"animate\", {\n attributeName: \"y\",\n begin: \"0s\",\n dur: \"1s\",\n values: \"10;15;20;25;30;35;40;45;50;0;10\",\n calcMode: \"linear\",\n repeatCount: \"indefinite\"\n })), /*#__PURE__*/_react[\"default\"].createElement(\"rect\", {\n x: \"90\",\n y: \"10\",\n width: \"15\",\n height: \"120\",\n rx: \"6\"\n }, /*#__PURE__*/_react[\"default\"].createElement(\"animate\", {\n attributeName: \"height\",\n begin: \"0.25s\",\n dur: \"1s\",\n values: \"120;110;100;90;80;70;60;50;40;140;120\",\n calcMode: \"linear\",\n repeatCount: \"indefinite\"\n }), /*#__PURE__*/_react[\"default\"].createElement(\"animate\", {\n attributeName: \"y\",\n begin: \"0.25s\",\n dur: \"1s\",\n values: \"10;15;20;25;30;35;40;45;50;0;10\",\n calcMode: \"linear\",\n repeatCount: \"indefinite\"\n })), /*#__PURE__*/_react[\"default\"].createElement(\"rect\", {\n x: \"120\",\n y: \"10\",\n width: \"15\",\n height: \"120\",\n rx: \"6\"\n }, /*#__PURE__*/_react[\"default\"].createElement(\"animate\", {\n attributeName: \"height\",\n begin: \"0.5s\",\n dur: \"1s\",\n values: \"120;110;100;90;80;70;60;50;40;140;120\",\n calcMode: \"linear\",\n repeatCount: \"indefinite\"\n }), /*#__PURE__*/_react[\"default\"].createElement(\"animate\", {\n attributeName: \"y\",\n begin: \"0.5s\",\n dur: \"1s\",\n values: \"10;15;20;25;30;35;40;45;50;0;10\",\n calcMode: \"linear\",\n repeatCount: \"indefinite\"\n })));\n};\n\nexports.Bars = Bars;\nBars.propTypes = {\n height: _propTypes[\"default\"].oneOfType([_propTypes[\"default\"].string, _propTypes[\"default\"].number]),\n width: _propTypes[\"default\"].oneOfType([_propTypes[\"default\"].string, _propTypes[\"default\"].number]),\n color: _propTypes[\"default\"].string,\n label: _propTypes[\"default\"].string\n};\nBars.defaultProps = {\n height: 80,\n width: 80,\n color: \"green\",\n label: \"audio-loading\"\n};","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.Circles = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nvar Circles = function Circles(props) {\n return /*#__PURE__*/_react[\"default\"].createElement(\"svg\", {\n width: props.width,\n height: props.height,\n viewBox: \"0 0 135 135\",\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: props.color,\n \"aria-label\": props.label\n }, /*#__PURE__*/_react[\"default\"].createElement(\"path\", {\n d: \"M67.447 58c5.523 0 10-4.477 10-10s-4.477-10-10-10-10 4.477-10 10 4.477 10 10 10zm9.448 9.447c0 5.523 4.477 10 10 10 5.522 0 10-4.477 10-10s-4.478-10-10-10c-5.523 0-10 4.477-10 10zm-9.448 9.448c-5.523 0-10 4.477-10 10 0 5.522 4.477 10 10 10s10-4.478 10-10c0-5.523-4.477-10-10-10zM58 67.447c0-5.523-4.477-10-10-10s-10 4.477-10 10 4.477 10 10 10 10-4.477 10-10z\"\n }, /*#__PURE__*/_react[\"default\"].createElement(\"animateTransform\", {\n attributeName: \"transform\",\n type: \"rotate\",\n from: \"0 67 67\",\n to: \"-360 67 67\",\n dur: \"2.5s\",\n repeatCount: \"indefinite\"\n })), /*#__PURE__*/_react[\"default\"].createElement(\"path\", {\n d: \"M28.19 40.31c6.627 0 12-5.374 12-12 0-6.628-5.373-12-12-12-6.628 0-12 5.372-12 12 0 6.626 5.372 12 12 12zm30.72-19.825c4.686 4.687 12.284 4.687 16.97 0 4.686-4.686 4.686-12.284 0-16.97-4.686-4.687-12.284-4.687-16.97 0-4.687 4.686-4.687 12.284 0 16.97zm35.74 7.705c0 6.627 5.37 12 12 12 6.626 0 12-5.373 12-12 0-6.628-5.374-12-12-12-6.63 0-12 5.372-12 12zm19.822 30.72c-4.686 4.686-4.686 12.284 0 16.97 4.687 4.686 12.285 4.686 16.97 0 4.687-4.686 4.687-12.284 0-16.97-4.685-4.687-12.283-4.687-16.97 0zm-7.704 35.74c-6.627 0-12 5.37-12 12 0 6.626 5.373 12 12 12s12-5.374 12-12c0-6.63-5.373-12-12-12zm-30.72 19.822c-4.686-4.686-12.284-4.686-16.97 0-4.686 4.687-4.686 12.285 0 16.97 4.686 4.687 12.284 4.687 16.97 0 4.687-4.685 4.687-12.283 0-16.97zm-35.74-7.704c0-6.627-5.372-12-12-12-6.626 0-12 5.373-12 12s5.374 12 12 12c6.628 0 12-5.373 12-12zm-19.823-30.72c4.687-4.686 4.687-12.284 0-16.97-4.686-4.686-12.284-4.686-16.97 0-4.687 4.686-4.687 12.284 0 16.97 4.686 4.687 12.284 4.687 16.97 0z\"\n }, /*#__PURE__*/_react[\"default\"].createElement(\"animateTransform\", {\n attributeName: \"transform\",\n type: \"rotate\",\n from: \"0 67 67\",\n to: \"360 67 67\",\n dur: \"8s\",\n repeatCount: \"indefinite\"\n })));\n};\n\nexports.Circles = Circles;\nCircles.propTypes = {\n height: _propTypes[\"default\"].oneOfType([_propTypes[\"default\"].string, _propTypes[\"default\"].number]),\n width: _propTypes[\"default\"].oneOfType([_propTypes[\"default\"].string, _propTypes[\"default\"].number]),\n color: _propTypes[\"default\"].string,\n label: _propTypes[\"default\"].string\n};\nCircles.defaultProps = {\n height: 80,\n width: 80,\n color: \"green\",\n label: \"audio-loading\"\n};","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.CradleLoader = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nvar CradleLoader = function CradleLoader(props) {\n return /*#__PURE__*/_react[\"default\"].createElement(\"div\", {\n \"aria-label\": props.label,\n role: \"presentation\",\n className: \"container\"\n }, /*#__PURE__*/_react[\"default\"].createElement(\"div\", {\n className: \"react-spinner-loader-swing\"\n }, /*#__PURE__*/_react[\"default\"].createElement(\"div\", {\n className: \"react-spinner-loader-swing-l\"\n }), /*#__PURE__*/_react[\"default\"].createElement(\"div\", null), /*#__PURE__*/_react[\"default\"].createElement(\"div\", null), /*#__PURE__*/_react[\"default\"].createElement(\"div\", null), /*#__PURE__*/_react[\"default\"].createElement(\"div\", null), /*#__PURE__*/_react[\"default\"].createElement(\"div\", null), /*#__PURE__*/_react[\"default\"].createElement(\"div\", {\n className: \"react-spinner-loader-swing-r\"\n })), /*#__PURE__*/_react[\"default\"].createElement(\"div\", {\n className: \"react-spinner-loader-shadow\"\n }, /*#__PURE__*/_react[\"default\"].createElement(\"div\", {\n className: \"react-spinner-loader-shadow-l\"\n }), /*#__PURE__*/_react[\"default\"].createElement(\"div\", null), /*#__PURE__*/_react[\"default\"].createElement(\"div\", null), /*#__PURE__*/_react[\"default\"].createElement(\"div\", null), /*#__PURE__*/_react[\"default\"].createElement(\"div\", null), /*#__PURE__*/_react[\"default\"].createElement(\"div\", null), /*#__PURE__*/_react[\"default\"].createElement(\"div\", {\n className: \"react-spinner-loader-shadow-r\"\n })));\n};\n\nexports.CradleLoader = CradleLoader;\nCradleLoader.propTypes = {\n label: _propTypes[\"default\"].string\n};\nCradleLoader.defaultProps = {\n label: \"audio-loading\"\n};","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.Grid = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nvar Grid = function Grid(props) {\n return /*#__PURE__*/_react[\"default\"].createElement(\"svg\", {\n width: props.width,\n height: props.height,\n viewBox: \"0 0 105 105\",\n fill: props.color,\n \"aria-label\": props.label\n }, /*#__PURE__*/_react[\"default\"].createElement(\"circle\", {\n cx: \"12.5\",\n cy: \"12.5\",\n r: props.radius\n }, /*#__PURE__*/_react[\"default\"].createElement(\"animate\", {\n attributeName: \"fill-opacity\",\n begin: \"0s\",\n dur: \"1s\",\n values: \"1;.2;1\",\n calcMode: \"linear\",\n repeatCount: \"indefinite\"\n })), /*#__PURE__*/_react[\"default\"].createElement(\"circle\", {\n cx: \"12.5\",\n cy: \"52.5\",\n r: props.radius\n }, /*#__PURE__*/_react[\"default\"].createElement(\"animate\", {\n attributeName: \"fill-opacity\",\n begin: \"100ms\",\n dur: \"1s\",\n values: \"1;.2;1\",\n calcMode: \"linear\",\n repeatCount: \"indefinite\"\n })), /*#__PURE__*/_react[\"default\"].createElement(\"circle\", {\n cx: \"52.5\",\n cy: \"12.5\",\n r: props.radius\n }, /*#__PURE__*/_react[\"default\"].createElement(\"animate\", {\n attributeName: \"fill-opacity\",\n begin: \"300ms\",\n dur: \"1s\",\n values: \"1;.2;1\",\n calcMode: \"linear\",\n repeatCount: \"indefinite\"\n })), /*#__PURE__*/_react[\"default\"].createElement(\"circle\", {\n cx: \"52.5\",\n cy: \"52.5\",\n r: props.radius\n }, /*#__PURE__*/_react[\"default\"].createElement(\"animate\", {\n attributeName: \"fill-opacity\",\n begin: \"600ms\",\n dur: \"1s\",\n values: \"1;.2;1\",\n calcMode: \"linear\",\n repeatCount: \"indefinite\"\n })), /*#__PURE__*/_react[\"default\"].createElement(\"circle\", {\n cx: \"92.5\",\n cy: \"12.5\",\n r: props.radius\n }, /*#__PURE__*/_react[\"default\"].createElement(\"animate\", {\n attributeName: \"fill-opacity\",\n begin: \"800ms\",\n dur: \"1s\",\n values: \"1;.2;1\",\n calcMode: \"linear\",\n repeatCount: \"indefinite\"\n })), /*#__PURE__*/_react[\"default\"].createElement(\"circle\", {\n cx: \"92.5\",\n cy: \"52.5\",\n r: props.radius\n }, /*#__PURE__*/_react[\"default\"].createElement(\"animate\", {\n attributeName: \"fill-opacity\",\n begin: \"400ms\",\n dur: \"1s\",\n values: \"1;.2;1\",\n calcMode: \"linear\",\n repeatCount: \"indefinite\"\n })), /*#__PURE__*/_react[\"default\"].createElement(\"circle\", {\n cx: \"12.5\",\n cy: \"92.5\",\n r: props.radius\n }, /*#__PURE__*/_react[\"default\"].createElement(\"animate\", {\n attributeName: \"fill-opacity\",\n begin: \"700ms\",\n dur: \"1s\",\n values: \"1;.2;1\",\n calcMode: \"linear\",\n repeatCount: \"indefinite\"\n })), /*#__PURE__*/_react[\"default\"].createElement(\"circle\", {\n cx: \"52.5\",\n cy: \"92.5\",\n r: props.radius\n }, /*#__PURE__*/_react[\"default\"].createElement(\"animate\", {\n attributeName: \"fill-opacity\",\n begin: \"500ms\",\n dur: \"1s\",\n values: \"1;.2;1\",\n calcMode: \"linear\",\n repeatCount: \"indefinite\"\n })), /*#__PURE__*/_react[\"default\"].createElement(\"circle\", {\n cx: \"92.5\",\n cy: \"92.5\",\n r: props.radius\n }, /*#__PURE__*/_react[\"default\"].createElement(\"animate\", {\n attributeName: \"fill-opacity\",\n begin: \"200ms\",\n dur: \"1s\",\n values: \"1;.2;1\",\n calcMode: \"linear\",\n repeatCount: \"indefinite\"\n })));\n};\n\nexports.Grid = Grid;\nGrid.propTypes = {\n height: _propTypes[\"default\"].oneOfType([_propTypes[\"default\"].string, _propTypes[\"default\"].number]),\n width: _propTypes[\"default\"].oneOfType([_propTypes[\"default\"].string, _propTypes[\"default\"].number]),\n color: _propTypes[\"default\"].string,\n label: _propTypes[\"default\"].string,\n radius: _propTypes[\"default\"].number\n};\nGrid.defaultProps = {\n height: 80,\n width: 80,\n color: \"green\",\n radius: 12.5,\n label: \"audio-loading\"\n};","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.Hearts = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nvar Hearts = function Hearts(props) {\n return /*#__PURE__*/_react[\"default\"].createElement(\"svg\", {\n width: props.width,\n height: props.height,\n viewBox: \"0 0 140 64\",\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: props.color,\n \"aria-label\": props.label\n }, /*#__PURE__*/_react[\"default\"].createElement(\"path\", {\n d: \"M30.262 57.02L7.195 40.723c-5.84-3.976-7.56-12.06-3.842-18.063 3.715-6 11.467-7.65 17.306-3.68l4.52 3.76 2.6-5.274c3.717-6.002 11.47-7.65 17.305-3.68 5.84 3.97 7.56 12.054 3.842 18.062L34.49 56.118c-.897 1.512-2.793 1.915-4.228.9z\",\n attributeName: \"fill-opacity\",\n from: \"0\",\n to: \".5\"\n }, /*#__PURE__*/_react[\"default\"].createElement(\"animate\", {\n attributeName: \"fill-opacity\",\n begin: \"0s\",\n dur: \"1.4s\",\n values: \"0.5;1;0.5\",\n calcMode: \"linear\",\n repeatCount: \"indefinite\"\n })), /*#__PURE__*/_react[\"default\"].createElement(\"path\", {\n d: \"M105.512 56.12l-14.44-24.272c-3.716-6.008-1.996-14.093 3.843-18.062 5.835-3.97 13.588-2.322 17.306 3.68l2.6 5.274 4.52-3.76c5.84-3.97 13.592-2.32 17.307 3.68 3.718 6.003 1.998 14.088-3.842 18.064L109.74 57.02c-1.434 1.014-3.33.61-4.228-.9z\",\n attributeName: \"fill-opacity\",\n from: \"0\",\n to: \".5\"\n }, /*#__PURE__*/_react[\"default\"].createElement(\"animate\", {\n attributeName: \"fill-opacity\",\n begin: \"0.7s\",\n dur: \"1.4s\",\n values: \"0.5;1;0.5\",\n calcMode: \"linear\",\n repeatCount: \"indefinite\"\n })), /*#__PURE__*/_react[\"default\"].createElement(\"path\", {\n d: \"M67.408 57.834l-23.01-24.98c-5.864-6.15-5.864-16.108 0-22.248 5.86-6.14 15.37-6.14 21.234 0L70 16.168l4.368-5.562c5.863-6.14 15.375-6.14 21.235 0 5.863 6.14 5.863 16.098 0 22.247l-23.007 24.98c-1.43 1.556-3.757 1.556-5.188 0z\"\n }));\n};\n\nexports.Hearts = Hearts;\nHearts.propTypes = {\n height: _propTypes[\"default\"].oneOfType([_propTypes[\"default\"].string, _propTypes[\"default\"].number]),\n width: _propTypes[\"default\"].oneOfType([_propTypes[\"default\"].string, _propTypes[\"default\"].number]),\n color: _propTypes[\"default\"].string,\n label: _propTypes[\"default\"].string\n};\nHearts.defaultProps = {\n height: 80,\n width: 80,\n color: \"green\",\n label: \"audio-loading\"\n};","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.MutatingDots = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nvar MutatingDots = function MutatingDots(props) {\n return /*#__PURE__*/_react[\"default\"].createElement(\"svg\", {\n id: \"goo-loader\",\n width: props.width,\n height: props.height,\n \"aria-label\": props.label\n }, /*#__PURE__*/_react[\"default\"].createElement(\"filter\", {\n id: \"fancy-goo\"\n }, /*#__PURE__*/_react[\"default\"].createElement(\"feGaussianBlur\", {\n \"in\": \"SourceGraphic\",\n stdDeviation: \"6\",\n result: \"blur\"\n }), /*#__PURE__*/_react[\"default\"].createElement(\"feColorMatrix\", {\n \"in\": \"blur\",\n mode: \"matrix\",\n values: \"1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 19 -9\",\n result: \"goo\"\n }), /*#__PURE__*/_react[\"default\"].createElement(\"feComposite\", {\n \"in\": \"SourceGraphic\",\n in2: \"goo\",\n operator: \"atop\"\n })), /*#__PURE__*/_react[\"default\"].createElement(\"g\", {\n filter: \"url(#fancy-goo)\"\n }, /*#__PURE__*/_react[\"default\"].createElement(\"animateTransform\", {\n id: \"mainAnim\",\n attributeName: \"transform\",\n attributeType: \"XML\",\n type: \"rotate\",\n from: \"0 50 50\",\n to: \"359 50 50\",\n dur: \"1.2s\",\n repeatCount: \"indefinite\"\n }), /*#__PURE__*/_react[\"default\"].createElement(\"circle\", {\n cx: \"50%\",\n cy: \"40\",\n r: props.radius,\n fill: props.color\n }, /*#__PURE__*/_react[\"default\"].createElement(\"animate\", {\n id: \"cAnim1\",\n attributeType: \"XML\",\n attributeName: \"cy\",\n dur: \"0.6s\",\n begin: \"0;cAnim1.end+0.2s\",\n calcMode: \"spline\",\n values: \"40;20;40\",\n keyTimes: \"0;0.3;1\",\n keySplines: \"0.09, 0.45, 0.16, 1;0.09, 0.45, 0.16, 1\"\n })), /*#__PURE__*/_react[\"default\"].createElement(\"circle\", {\n cx: \"50%\",\n cy: \"60\",\n r: props.radius,\n fill: props.secondaryColor\n }, /*#__PURE__*/_react[\"default\"].createElement(\"animate\", {\n id: \"cAnim2\",\n attributeType: \"XML\",\n attributeName: \"cy\",\n dur: \"0.6s\",\n begin: \"0.4s;cAnim2.end+0.2s\",\n calcMode: \"spline\",\n values: \"60;80;60\",\n keyTimes: \"0;0.3;1\",\n keySplines: \"0.09, 0.45, 0.16, 1;0.09, 0.45, 0.16, 1\"\n }))));\n};\n\nexports.MutatingDots = MutatingDots;\nMutatingDots.propTypes = {\n width: _propTypes[\"default\"].number,\n secondaryColor: _propTypes[\"default\"].string,\n height: _propTypes[\"default\"].number,\n color: _propTypes[\"default\"].string,\n radius: _propTypes[\"default\"].number,\n label: _propTypes[\"default\"].string\n};\nMutatingDots.defaultProps = {\n width: 80,\n height: 90,\n color: \"green\",\n radius: 11,\n secondaryColor: \"green\",\n label: \"audio-loading\"\n};","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.Oval = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nvar Oval = function Oval(props) {\n return /*#__PURE__*/_react[\"default\"].createElement(\"svg\", {\n width: props.width,\n height: props.height,\n viewBox: \"0 0 38 38\",\n xmlns: \"http://www.w3.org/2000/svg\",\n stroke: props.color,\n \"aria-label\": props.label\n }, /*#__PURE__*/_react[\"default\"].createElement(\"g\", {\n fill: \"none\",\n fillRule: \"evenodd\"\n }, /*#__PURE__*/_react[\"default\"].createElement(\"g\", {\n transform: \"translate(1 1)\",\n strokeWidth: \"2\"\n }, /*#__PURE__*/_react[\"default\"].createElement(\"circle\", {\n strokeOpacity: \".5\",\n cx: \"18\",\n cy: \"18\",\n r: props.radius\n }), /*#__PURE__*/_react[\"default\"].createElement(\"path\", {\n d: \"M36 18c0-9.94-8.06-18-18-18\"\n }, /*#__PURE__*/_react[\"default\"].createElement(\"animateTransform\", {\n attributeName: \"transform\",\n type: \"rotate\",\n from: \"0 18 18\",\n to: \"360 18 18\",\n dur: \"1s\",\n repeatCount: \"indefinite\"\n })))));\n};\n\nexports.Oval = Oval;\nOval.propTypes = {\n height: _propTypes[\"default\"].oneOfType([_propTypes[\"default\"].string, _propTypes[\"default\"].number]),\n width: _propTypes[\"default\"].oneOfType([_propTypes[\"default\"].string, _propTypes[\"default\"].number]),\n color: _propTypes[\"default\"].string,\n label: _propTypes[\"default\"].string,\n radius: _propTypes[\"default\"].number\n};\nOval.defaultProps = {\n height: 80,\n width: 80,\n color: \"green\",\n label: \"audio-loading\",\n radius: 18\n};","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.Plane = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nvar Plane = function Plane(props) {\n return /*#__PURE__*/_react[\"default\"].createElement(\"svg\", {\n className: \"react-spinner-loader-svg-calLoader\",\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"230\",\n height: \"230\",\n \"aria-label\": props.label\n }, /*#__PURE__*/_react[\"default\"].createElement(\"desc\", null, \"Plane animation. Loading \"), /*#__PURE__*/_react[\"default\"].createElement(\"path\", {\n className: \"react-spinner-loader-cal-loader__path\",\n style: {\n stroke: props.secondaryColor\n },\n d: \"M86.429 40c63.616-20.04 101.511 25.08 107.265 61.93 6.487 41.54-18.593 76.99-50.6 87.643-59.46 19.791-101.262-23.577-107.142-62.616C29.398 83.441 59.945 48.343 86.43 40z\",\n fill: \"none\",\n stroke: \"#0099cc\",\n strokeWidth: \"4\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeDasharray: \"10 10 10 10 10 10 10 432\",\n strokeDashoffset: \"77\"\n }), /*#__PURE__*/_react[\"default\"].createElement(\"path\", {\n className: \"cal-loader__plane\",\n style: {\n fill: props.color\n },\n d: \"M141.493 37.93c-1.087-.927-2.942-2.002-4.32-2.501-2.259-.824-3.252-.955-9.293-1.172-4.017-.146-5.197-.23-5.47-.37-.766-.407-1.526-1.448-7.114-9.773-4.8-7.145-5.344-7.914-6.327-8.976-1.214-1.306-1.396-1.378-3.79-1.473-1.036-.04-2-.043-2.153-.002-.353.1-.87.586-1 .952-.139.399-.076.71.431 2.22.241.72 1.029 3.386 1.742 5.918 1.644 5.844 2.378 8.343 2.863 9.705.206.601.33 1.1.275 1.125-.24.097-10.56 1.066-11.014 1.032a3.532 3.532 0 0 1-1.002-.276l-.487-.246-2.044-2.613c-2.234-2.87-2.228-2.864-3.35-3.309-.717-.287-2.82-.386-3.276-.163-.457.237-.727.644-.737 1.152-.018.39.167.805 1.916 4.373 1.06 2.166 1.964 4.083 1.998 4.27.04.179.004.521-.076.75-.093.228-1.109 2.064-2.269 4.088-1.921 3.34-2.11 3.711-2.123 4.107-.008.25.061.557.168.725.328.512.72.644 1.966.676 1.32.029 2.352-.236 3.05-.762.222-.171 1.275-1.313 2.412-2.611 1.918-2.185 2.048-2.32 2.45-2.505.241-.111.601-.232.82-.271.267-.058 2.213.201 5.912.8 3.036.48 5.525.894 5.518.914 0 .026-.121.306-.27.638-.54 1.198-1.515 3.842-3.35 9.021-1.029 2.913-2.107 5.897-2.4 6.62-.703 1.748-.725 1.833-.594 2.286.137.46.45.833.872 1.012.41.177 3.823.24 4.37.085.852-.25 1.44-.688 2.312-1.724 1.166-1.39 3.169-3.948 6.771-8.661 5.8-7.583 6.561-8.49 7.387-8.702.233-.065 2.828-.056 5.784.011 5.827.138 6.64.09 8.62-.5 2.24-.67 4.035-1.65 5.517-3.016 1.136-1.054 1.135-1.014.207-1.962-.357-.38-.767-.777-.902-.893z\",\n fill: \"#000033\"\n }));\n};\n\nexports.Plane = Plane;\nPlane.propTypes = {\n secondaryColor: _propTypes[\"default\"].string,\n color: _propTypes[\"default\"].string,\n label: _propTypes[\"default\"].string\n};\nPlane.defaultProps = {\n secondaryColor: \"grey\",\n color: \"#FFA500\",\n label: \"async-loading\"\n};","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.Puff = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nvar Puff = function Puff(props) {\n return /*#__PURE__*/_react[\"default\"].createElement(\"svg\", {\n width: props.width,\n height: props.height,\n viewBox: \"0 0 44 44\",\n xmlns: \"http://www.w3.org/2000/svg\",\n stroke: props.color,\n \"aria-label\": props.label\n }, /*#__PURE__*/_react[\"default\"].createElement(\"g\", {\n fill: \"none\",\n fillRule: \"evenodd\",\n strokeWidth: \"2\"\n }, /*#__PURE__*/_react[\"default\"].createElement(\"circle\", {\n cx: \"22\",\n cy: \"22\",\n r: props.radius\n }, /*#__PURE__*/_react[\"default\"].createElement(\"animate\", {\n attributeName: \"r\",\n begin: \"0s\",\n dur: \"1.8s\",\n values: \"1; 20\",\n calcMode: \"spline\",\n keyTimes: \"0; 1\",\n keySplines: \"0.165, 0.84, 0.44, 1\",\n repeatCount: \"indefinite\"\n }), /*#__PURE__*/_react[\"default\"].createElement(\"animate\", {\n attributeName: \"strokeOpacity\",\n begin: \"0s\",\n dur: \"1.8s\",\n values: \"1; 0\",\n calcMode: \"spline\",\n keyTimes: \"0; 1\",\n keySplines: \"0.3, 0.61, 0.355, 1\",\n repeatCount: \"indefinite\"\n })), /*#__PURE__*/_react[\"default\"].createElement(\"circle\", {\n cx: \"22\",\n cy: \"22\",\n r: props.radius\n }, /*#__PURE__*/_react[\"default\"].createElement(\"animate\", {\n attributeName: \"r\",\n begin: \"-0.9s\",\n dur: \"1.8s\",\n values: \"1; 20\",\n calcMode: \"spline\",\n keyTimes: \"0; 1\",\n keySplines: \"0.165, 0.84, 0.44, 1\",\n repeatCount: \"indefinite\"\n }), /*#__PURE__*/_react[\"default\"].createElement(\"animate\", {\n attributeName: \"strokeOpacity\",\n begin: \"-0.9s\",\n dur: \"1.8s\",\n values: \"1; 0\",\n calcMode: \"spline\",\n keyTimes: \"0; 1\",\n keySplines: \"0.3, 0.61, 0.355, 1\",\n repeatCount: \"indefinite\"\n }))));\n};\n\nexports.Puff = Puff;\nPuff.propTypes = {\n height: _propTypes[\"default\"].oneOfType([_propTypes[\"default\"].string, _propTypes[\"default\"].number]),\n width: _propTypes[\"default\"].oneOfType([_propTypes[\"default\"].string, _propTypes[\"default\"].number]),\n color: _propTypes[\"default\"].string,\n label: _propTypes[\"default\"].string,\n radius: _propTypes[\"default\"].number\n};\nPuff.defaultProps = {\n height: 80,\n width: 80,\n color: \"green\",\n label: \"audio-loading\",\n radius: 1\n};","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.RevolvingDot = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nvar RevolvingDot = function RevolvingDot(props) {\n return /*#__PURE__*/_react[\"default\"].createElement(\"svg\", {\n version: \"1.1\",\n width: props.width,\n height: props.height,\n xmlns: \"http://www.w3.org/2000/svg\",\n x: \"0px\",\n y: \"0px\",\n \"aria-label\": props.label\n }, /*#__PURE__*/_react[\"default\"].createElement(\"circle\", {\n fill: \"none\",\n stroke: props.color,\n strokeWidth: \"4\",\n cx: \"50\",\n cy: \"50\",\n r: props.radius + 38,\n style: {\n opacity: 0.5\n }\n }), /*#__PURE__*/_react[\"default\"].createElement(\"circle\", {\n fill: props.color,\n stroke: props.color,\n strokeWidth: \"3\",\n cx: \"8\",\n cy: \"54\",\n r: props.radius\n }, /*#__PURE__*/_react[\"default\"].createElement(\"animateTransform\", {\n attributeName: \"transform\",\n dur: \"2s\",\n type: \"rotate\",\n from: \"0 50 48\",\n to: \"360 50 52\",\n repeatCount: \"indefinite\"\n })));\n};\n\nexports.RevolvingDot = RevolvingDot;\nRevolvingDot.propTypes = {\n height: _propTypes[\"default\"].oneOfType([_propTypes[\"default\"].string, _propTypes[\"default\"].number]),\n width: _propTypes[\"default\"].oneOfType([_propTypes[\"default\"].string, _propTypes[\"default\"].number]),\n color: _propTypes[\"default\"].string,\n label: _propTypes[\"default\"].string,\n radius: _propTypes[\"default\"].number\n};\nRevolvingDot.defaultProps = {\n height: 80,\n width: 80,\n color: \"green\",\n label: \"audio-loading\",\n radius: 6\n};","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.Rings = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nvar Rings = function Rings(props) {\n return /*#__PURE__*/_react[\"default\"].createElement(\"svg\", {\n width: props.width,\n height: props.height,\n viewBox: \"0 0 45 45\",\n xmlns: \"http://www.w3.org/2000/svg\",\n stroke: props.color,\n \"aria-label\": props.label\n }, /*#__PURE__*/_react[\"default\"].createElement(\"g\", {\n fill: \"none\",\n fillRule: \"evenodd\",\n transform: \"translate(1 1)\",\n strokeWidth: \"2\"\n }, /*#__PURE__*/_react[\"default\"].createElement(\"circle\", {\n cx: \"22\",\n cy: \"22\",\n r: props.radius,\n strokeOpacity: \"0\"\n }, /*#__PURE__*/_react[\"default\"].createElement(\"animate\", {\n attributeName: \"r\",\n begin: \"1.5s\",\n dur: \"3s\",\n values: \"6;22\",\n calcMode: \"linear\",\n repeatCount: \"indefinite\"\n }), /*#__PURE__*/_react[\"default\"].createElement(\"animate\", {\n attributeName: \"stroke-opacity\",\n begin: \"1.5s\",\n dur: \"3s\",\n values: \"1;0\",\n calcMode: \"linear\",\n repeatCount: \"indefinite\"\n }), /*#__PURE__*/_react[\"default\"].createElement(\"animate\", {\n attributeName: \"stroke-width\",\n begin: \"1.5s\",\n dur: \"3s\",\n values: \"2;0\",\n calcMode: \"linear\",\n repeatCount: \"indefinite\"\n })), /*#__PURE__*/_react[\"default\"].createElement(\"circle\", {\n cx: \"22\",\n cy: \"22\",\n r: props.radius,\n strokeOpacity: \"0\"\n }, /*#__PURE__*/_react[\"default\"].createElement(\"animate\", {\n attributeName: \"r\",\n begin: \"3s\",\n dur: \"3s\",\n values: \"6;22\",\n calcMode: \"linear\",\n repeatCount: \"indefinite\"\n }), /*#__PURE__*/_react[\"default\"].createElement(\"animate\", {\n attributeName: \"strokeOpacity\",\n begin: \"3s\",\n dur: \"3s\",\n values: \"1;0\",\n calcMode: \"linear\",\n repeatCount: \"indefinite\"\n }), /*#__PURE__*/_react[\"default\"].createElement(\"animate\", {\n attributeName: \"strokeWidth\",\n begin: \"3s\",\n dur: \"3s\",\n values: \"2;0\",\n calcMode: \"linear\",\n repeatCount: \"indefinite\"\n })), /*#__PURE__*/_react[\"default\"].createElement(\"circle\", {\n cx: \"22\",\n cy: \"22\",\n r: props.radius + 2\n }, /*#__PURE__*/_react[\"default\"].createElement(\"animate\", {\n attributeName: \"r\",\n begin: \"0s\",\n dur: \"1.5s\",\n values: \"6;1;2;3;4;5;6\",\n calcMode: \"linear\",\n repeatCount: \"indefinite\"\n }))));\n};\n\nexports.Rings = Rings;\nRings.propTypes = {\n height: _propTypes[\"default\"].oneOfType([_propTypes[\"default\"].string, _propTypes[\"default\"].number]),\n width: _propTypes[\"default\"].oneOfType([_propTypes[\"default\"].string, _propTypes[\"default\"].number]),\n color: _propTypes[\"default\"].string,\n label: _propTypes[\"default\"].string,\n radius: _propTypes[\"default\"].number\n};\nRings.defaultProps = {\n height: 80,\n width: 80,\n color: \"green\",\n radius: 6,\n label: \"audio-loading\"\n};","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.TailSpin = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nvar TailSpin = function TailSpin(props) {\n return /*#__PURE__*/_react[\"default\"].createElement(\"svg\", {\n width: props.width,\n height: props.height,\n viewBox: \"0 0 38 38\",\n xmlns: \"http://www.w3.org/2000/svg\",\n \"aria-label\": props.label\n }, /*#__PURE__*/_react[\"default\"].createElement(\"defs\", null, /*#__PURE__*/_react[\"default\"].createElement(\"linearGradient\", {\n x1: \"8.042%\",\n y1: \"0%\",\n x2: \"65.682%\",\n y2: \"23.865%\",\n id: \"a\"\n }, /*#__PURE__*/_react[\"default\"].createElement(\"stop\", {\n stopColor: props.color,\n stopOpacity: \"0\",\n offset: \"0%\"\n }), /*#__PURE__*/_react[\"default\"].createElement(\"stop\", {\n stopColor: props.color,\n stopOpacity: \".631\",\n offset: \"63.146%\"\n }), /*#__PURE__*/_react[\"default\"].createElement(\"stop\", {\n stopColor: props.color,\n offset: \"100%\"\n }))), /*#__PURE__*/_react[\"default\"].createElement(\"g\", {\n fill: \"none\",\n fillRule: \"evenodd\"\n }, /*#__PURE__*/_react[\"default\"].createElement(\"g\", {\n transform: \"translate(1 1)\"\n }, /*#__PURE__*/_react[\"default\"].createElement(\"path\", {\n d: \"M36 18c0-9.94-8.06-18-18-18\",\n id: \"Oval-2\",\n stroke: props.color,\n strokeWidth: \"2\"\n }, /*#__PURE__*/_react[\"default\"].createElement(\"animateTransform\", {\n attributeName: \"transform\",\n type: \"rotate\",\n from: \"0 18 18\",\n to: \"360 18 18\",\n dur: \"0.9s\",\n repeatCount: \"indefinite\"\n })), /*#__PURE__*/_react[\"default\"].createElement(\"circle\", {\n fill: \"#fff\",\n cx: \"36\",\n cy: \"18\",\n r: props.radius\n }, /*#__PURE__*/_react[\"default\"].createElement(\"animateTransform\", {\n attributeName: \"transform\",\n type: \"rotate\",\n from: \"0 18 18\",\n to: \"360 18 18\",\n dur: \"0.9s\",\n repeatCount: \"indefinite\"\n })))));\n};\n\nexports.TailSpin = TailSpin;\nTailSpin.propTypes = {\n height: _propTypes[\"default\"].oneOfType([_propTypes[\"default\"].string, _propTypes[\"default\"].number]),\n width: _propTypes[\"default\"].oneOfType([_propTypes[\"default\"].string, _propTypes[\"default\"].number]),\n color: _propTypes[\"default\"].string,\n label: _propTypes[\"default\"].string,\n radius: _propTypes[\"default\"].number\n};\nTailSpin.defaultProps = {\n height: 80,\n width: 80,\n color: \"green\",\n radius: 1,\n label: \"audio-loading\"\n};","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.ThreeDots = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nvar ThreeDots = function ThreeDots(props) {\n return /*#__PURE__*/_react[\"default\"].createElement(\"svg\", {\n width: props.width,\n height: props.height,\n viewBox: \"0 0 120 30\",\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: props.color,\n \"aria-label\": props.label\n }, /*#__PURE__*/_react[\"default\"].createElement(\"circle\", {\n cx: \"15\",\n cy: \"15\",\n r: props.radius + 6\n }, /*#__PURE__*/_react[\"default\"].createElement(\"animate\", {\n attributeName: \"r\",\n from: \"15\",\n to: \"15\",\n begin: \"0s\",\n dur: \"0.8s\",\n values: \"15;9;15\",\n calcMode: \"linear\",\n repeatCount: \"indefinite\"\n }), /*#__PURE__*/_react[\"default\"].createElement(\"animate\", {\n attributeName: \"fillOpacity\",\n from: \"1\",\n to: \"1\",\n begin: \"0s\",\n dur: \"0.8s\",\n values: \"1;.5;1\",\n calcMode: \"linear\",\n repeatCount: \"indefinite\"\n })), /*#__PURE__*/_react[\"default\"].createElement(\"circle\", {\n cx: \"60\",\n cy: \"15\",\n r: props.radius,\n attributeName: \"fillOpacity\",\n from: \"1\",\n to: \"0.3\"\n }, /*#__PURE__*/_react[\"default\"].createElement(\"animate\", {\n attributeName: \"r\",\n from: \"9\",\n to: \"9\",\n begin: \"0s\",\n dur: \"0.8s\",\n values: \"9;15;9\",\n calcMode: \"linear\",\n repeatCount: \"indefinite\"\n }), /*#__PURE__*/_react[\"default\"].createElement(\"animate\", {\n attributeName: \"fillOpacity\",\n from: \"0.5\",\n to: \"0.5\",\n begin: \"0s\",\n dur: \"0.8s\",\n values: \".5;1;.5\",\n calcMode: \"linear\",\n repeatCount: \"indefinite\"\n })), /*#__PURE__*/_react[\"default\"].createElement(\"circle\", {\n cx: \"105\",\n cy: \"15\",\n r: props.radius + 6\n }, /*#__PURE__*/_react[\"default\"].createElement(\"animate\", {\n attributeName: \"r\",\n from: \"15\",\n to: \"15\",\n begin: \"0s\",\n dur: \"0.8s\",\n values: \"15;9;15\",\n calcMode: \"linear\",\n repeatCount: \"indefinite\"\n }), /*#__PURE__*/_react[\"default\"].createElement(\"animate\", {\n attributeName: \"fillOpacity\",\n from: \"1\",\n to: \"1\",\n begin: \"0s\",\n dur: \"0.8s\",\n values: \"1;.5;1\",\n calcMode: \"linear\",\n repeatCount: \"indefinite\"\n })));\n};\n\nexports.ThreeDots = ThreeDots;\nThreeDots.propTypes = {\n height: _propTypes[\"default\"].oneOfType([_propTypes[\"default\"].string, _propTypes[\"default\"].number]),\n width: _propTypes[\"default\"].oneOfType([_propTypes[\"default\"].string, _propTypes[\"default\"].number]),\n color: _propTypes[\"default\"].string,\n label: _propTypes[\"default\"].string,\n radius: _propTypes[\"default\"].number\n};\nThreeDots.defaultProps = {\n height: 80,\n width: 80,\n color: \"green\",\n label: \"audio-loading\",\n radius: 9\n};","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.Triangle = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nvar Triangle = function Triangle(props) {\n return /*#__PURE__*/_react[\"default\"].createElement(\"div\", {\n className: \"react-spinner-loader-svg\"\n }, /*#__PURE__*/_react[\"default\"].createElement(\"svg\", {\n id: \"triangle\",\n width: props.width,\n height: props.height,\n viewBox: \"-3 -4 39 39\",\n \"aria-label\": props.label\n }, /*#__PURE__*/_react[\"default\"].createElement(\"polygon\", {\n fill: \"transparent\",\n stroke: props.color,\n strokeWidth: \"1\",\n points: \"16,0 32,32 0,32\"\n })));\n};\n\nexports.Triangle = Triangle;\nTriangle.propTypes = {\n height: _propTypes[\"default\"].oneOfType([_propTypes[\"default\"].string, _propTypes[\"default\"].number]),\n width: _propTypes[\"default\"].oneOfType([_propTypes[\"default\"].string, _propTypes[\"default\"].number]),\n color: _propTypes[\"default\"].string,\n label: _propTypes[\"default\"].string\n};\nTriangle.defaultProps = {\n height: 80,\n width: 80,\n color: \"green\",\n label: \"audio-loading\"\n};","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.Watch = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nvar Watch = function Watch(props) {\n return /*#__PURE__*/_react[\"default\"].createElement(\"svg\", {\n width: props.width,\n height: props.height,\n version: \"1.1\",\n id: \"L2\",\n xmlns: \"http://www.w3.org/2000/svg\",\n x: \"0px\",\n y: \"0px\",\n viewBox: \"0 0 100 100\",\n enableBackground: \"new 0 0 100 100\",\n xmlSpace: \"preserve\",\n \"aria-label\": props.label\n }, /*#__PURE__*/_react[\"default\"].createElement(\"circle\", {\n fill: \"none\",\n stroke: props.color,\n strokeWidth: \"4\",\n strokeMiterlimit: \"10\",\n cx: \"50\",\n cy: \"50\",\n r: props.radius\n }), /*#__PURE__*/_react[\"default\"].createElement(\"line\", {\n fill: \"none\",\n strokeLinecap: \"round\",\n stroke: props.color,\n strokeWidth: \"4\",\n strokeMiterlimit: \"10\",\n x1: \"50\",\n y1: \"50\",\n x2: \"85\",\n y2: \"50.5\"\n }, /*#__PURE__*/_react[\"default\"].createElement(\"animateTransform\", {\n attributeName: \"transform\",\n dur: \"2s\",\n type: \"rotate\",\n from: \"0 50 50\",\n to: \"360 50 50\",\n repeatCount: \"indefinite\"\n })), /*#__PURE__*/_react[\"default\"].createElement(\"line\", {\n fill: \"none\",\n strokeLinecap: \"round\",\n stroke: props.color,\n strokeWidth: \"4\",\n strokeMiterlimit: \"10\",\n x1: \"50\",\n y1: \"50\",\n x2: \"49.5\",\n y2: \"74\"\n }, /*#__PURE__*/_react[\"default\"].createElement(\"animateTransform\", {\n attributeName: \"transform\",\n dur: \"15s\",\n type: \"rotate\",\n from: \"0 50 50\",\n to: \"360 50 50\",\n repeatCount: \"indefinite\"\n })));\n};\n\nexports.Watch = Watch;\nWatch.propTypes = {\n height: _propTypes[\"default\"].oneOfType([_propTypes[\"default\"].string, _propTypes[\"default\"].number]),\n width: _propTypes[\"default\"].oneOfType([_propTypes[\"default\"].string, _propTypes[\"default\"].number]),\n color: _propTypes[\"default\"].string,\n label: _propTypes[\"default\"].string,\n radius: _propTypes[\"default\"].number\n};\nWatch.defaultProps = {\n height: 80,\n width: 80,\n color: \"green\",\n label: \"audio-loading\",\n radius: 48\n};","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.Spinner = void 0;\n\nvar _Circles = require(\"./Circles\");\n\nvar _Watch = require(\"./Watch\");\n\nvar _Audio = require(\"./Audio\");\n\nvar _BallTriangle = require(\"./BallTriangle\");\n\nvar _Bars = require(\"./Bars\");\n\nvar _CradleLoader = require(\"./CradleLoader\");\n\nvar _Grid = require(\"./Grid\");\n\nvar _Hearts = require(\"./Hearts\");\n\nvar _MutatingDots = require(\"./MutatingDots\");\n\nvar _Oval = require(\"./Oval\");\n\nvar _Plane = require(\"./Plane\");\n\nvar _Puff = require(\"./Puff\");\n\nvar _RevolvingDot = require(\"./RevolvingDot\");\n\nvar _Rings = require(\"./Rings\");\n\nvar _TailSpin = require(\"./TailSpin\");\n\nvar _ThreeDots = require(\"./ThreeDots\");\n\nvar _Triangle = require(\"./Triangle\");\n\nvar Spinner = {\n Circles: _Circles.Circles,\n Audio: _Audio.Audio,\n BallTriangle: _BallTriangle.BallTriangle,\n Bars: _Bars.Bars,\n CradleLoader: _CradleLoader.CradleLoader,\n Grid: _Grid.Grid,\n Hearts: _Hearts.Hearts,\n MutatingDots: _MutatingDots.MutatingDots,\n Oval: _Oval.Oval,\n Plane: _Plane.Plane,\n Puff: _Puff.Puff,\n RevolvingDot: _RevolvingDot.RevolvingDot,\n Rings: _Rings.Rings,\n TailSpin: _TailSpin.TailSpin,\n ThreeDots: _ThreeDots.ThreeDots,\n Triangle: _Triangle.Triangle,\n Watch: _Watch.Watch\n};\nexports.Spinner = Spinner;","\"use strict\";Object.defineProperty(exports,\"__esModule\",{value:!0});var e=require(\"react\"),t=require(\"@emotion/react\"),r=require(\"@emotion/cache\"),n=require(\"react-dom\"),o=require(\"react-dom/server\"),a=require(\"prop-types\");function u(e){return e&&\"object\"==typeof e&&\"default\"in e?e:{default:e}}var l=u(e),c=u(r),i=u(a),f=\"undefined\"!=typeof globalThis?globalThis:\"undefined\"!=typeof window?window:\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:{};function s(e,t){return e(t={exports:{}},t.exports),t.exports}var d=s((function(e){!function(t){var r=function(e,t,n){if(!c(t)||f(t)||s(t)||d(t)||l(t))return t;var o,a=0,u=0;if(i(t))for(o=[],u=t.length;a<u;a++)o.push(r(e,t[a],n));else for(var p in o={},t)Object.prototype.hasOwnProperty.call(t,p)&&(o[e(p,n)]=r(e,t[p],n));return o},n=function(e){return p(e)?e:(e=e.replace(/[\\-_\\s]+(.)?/g,(function(e,t){return t?t.toUpperCase():\"\"}))).substr(0,1).toLowerCase()+e.substr(1)},o=function(e){var t=n(e);return t.substr(0,1).toUpperCase()+t.substr(1)},a=function(e,t){return function(e,t){var r=(t=t||{}).separator||\"_\",n=t.split||/(?=[A-Z])/;return e.split(n).join(r)}(e,t).toLowerCase()},u=Object.prototype.toString,l=function(e){return\"function\"==typeof e},c=function(e){return e===Object(e)},i=function(e){return\"[object Array]\"==u.call(e)},f=function(e){return\"[object Date]\"==u.call(e)},s=function(e){return\"[object RegExp]\"==u.call(e)},d=function(e){return\"[object Boolean]\"==u.call(e)},p=function(e){return(e-=0)==e},y=function(e,t){var r=t&&\"process\"in t?t.process:t;return\"function\"!=typeof r?e:function(t,n){return r(t,e,n)}},v={camelize:n,decamelize:a,pascalize:o,depascalize:a,camelizeKeys:function(e,t){return r(y(n,t),e)},decamelizeKeys:function(e,t){return r(y(a,t),e,t)},pascalizeKeys:function(e,t){return r(y(o,t),e)},depascalizeKeys:function(){return this.decamelizeKeys.apply(this,arguments)}};e.exports?e.exports=v:t.humps=v}(f)})).decamelize;var p=function(e){if(Array.isArray(e))return e};var y=function(e,t){if(\"undefined\"!=typeof Symbol&&Symbol.iterator in Object(e)){var r=[],n=!0,o=!1,a=void 0;try{for(var u,l=e[Symbol.iterator]();!(n=(u=l.next()).done)&&(r.push(u.value),!t||r.length!==t);n=!0);}catch(e){o=!0,a=e}finally{try{n||null==l.return||l.return()}finally{if(o)throw a}}return r}};var v=function(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r<t;r++)n[r]=e[r];return n};var h=function(e,t){if(e){if(\"string\"==typeof e)return v(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return\"Object\"===r&&e.constructor&&(r=e.constructor.name),\"Map\"===r||\"Set\"===r?Array.from(e):\"Arguments\"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?v(e,t):void 0}};var m=function(){throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")};var b=function(e,t){return p(e)||y(e,t)||h(e,t)||m()},g=s((function(e){function t(){return e.exports=t=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},t.apply(this,arguments)}e.exports=t}));var S=function(e,t){if(null==e)return{};var r,n,o={},a=Object.keys(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||(o[r]=e[r]);return o};var w=function(e,t){if(null==e)return{};var r,n,o=S(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o};var O=e.createContext(null);function j(e){var t=e.children,r=void 0===t?\"\":t,n=w(e,[\"children\"]);return\"string\"!=typeof r&&(r=o.renderToString(r)),l.default.createElement(\"template\",g({},n,{dangerouslySetInnerHTML:{__html:r}}))}function x(e){var t=e.root,r=e.children,o=void 0===r?null:r;return n.createPortal(o,t)}function E(t){var r=e.forwardRef((function(r,n){var o,a,u=r.mode,c=void 0===u?\"open\":u,i=r.delegatesFocus,f=void 0!==i&&i,s=r.styleSheets,d=void 0===s?[]:s,p=r.ssr,y=void 0!==p&&p,v=r.children,h=w(r,[\"mode\",\"delegatesFocus\",\"styleSheets\",\"ssr\",\"children\"]),m=(o=n,a=e.useRef(o&&o.current),e.useEffect((function(){o&&(o.current=a.current)}),[o]),a),S=e.useState(null),E=b(S,2),z=E[0],T=E[1],P=\"node_\".concat(c).concat(f);return e.useLayoutEffect((function(){if(m.current)try{if(\"function\"==typeof n&&n(m.current),y){var e=m.current.shadowRoot;return void T(e)}var t=m.current.attachShadow({mode:c,delegatesFocus:f});d.length>0&&(t.adoptedStyleSheets=d),T(t)}catch(e){!function(e){var t=e.error,r=e.styleSheets,n=e.root;switch(t.name){case\"NotSupportedError\":r.length>0&&(n.adoptedStyleSheets=r);break;default:throw t}}({error:e,styleSheets:d,root:z})}}),[n,m,d]),l.default.createElement(l.default.Fragment,null,l.default.createElement(t.tag,g({key:P,ref:m},h),(z||y)&&l.default.createElement(O.Provider,{value:z},y?l.default.createElement(j,{shadowroot:c,shadowrootmode:c},t.render({root:z,ssr:y,children:v})):l.default.createElement(x,{root:z},t.render({root:z,ssr:y,children:v})))))}));return r.propTypes={mode:i.default.oneOf([\"open\",\"closed\"]),delegatesFocus:i.default.bool,styleSheets:i.default.arrayOf(i.default.instanceOf(globalThis.CSSStyleSheet)),ssr:i.default.bool,children:i.default.node},r}j.propTypes={children:i.default.oneOfType([i.default.string,i.default.node])},x.propTypes={root:i.default.object.isRequired,children:i.default.node};var z=new Map;function T(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:\"core\",r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:function(e){return e.children};return new Proxy(e,{get:function(e,n){var o=d(n,{separator:\"-\"}),a=\"\".concat(t,\"-\").concat(o);return z.has(a)||z.set(a,E({tag:o,render:r})),z.get(a)}})}T();var P=new WeakMap,A=T({},\"emotion\",(function(e){var r=e.root,n=e.children,o=P.get(r)||function(){var e=c.default({container:r,key:\"react-shadow\"});return P.set(r,e),e}();return l.default.createElement(t.CacheProvider,{value:o},l.default.createElement(l.default.Fragment,null,n))}));exports.default=A;\n//# sourceMappingURL=emotion.js.map\n","export default {\n disabled: false\n};","import _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport _inheritsLoose from \"@babel/runtime/helpers/esm/inheritsLoose\";\nimport PropTypes from 'prop-types';\nimport React from 'react';\nimport ReactDOM from 'react-dom';\nimport config from './config';\nimport { timeoutsShape } from './utils/PropTypes';\nimport TransitionGroupContext from './TransitionGroupContext';\nimport { forceReflow } from './utils/reflow';\nexport var UNMOUNTED = 'unmounted';\nexport var EXITED = 'exited';\nexport var ENTERING = 'entering';\nexport var ENTERED = 'entered';\nexport var EXITING = 'exiting';\n/**\n * The Transition component lets you describe a transition from one component\n * state to another _over time_ with a simple declarative API. Most commonly\n * it's used to animate the mounting and unmounting of a component, but can also\n * be used to describe in-place transition states as well.\n *\n * ---\n *\n * **Note**: `Transition` is a platform-agnostic base component. If you're using\n * transitions in CSS, you'll probably want to use\n * [`CSSTransition`](https://reactcommunity.org/react-transition-group/css-transition)\n * instead. It inherits all the features of `Transition`, but contains\n * additional features necessary to play nice with CSS transitions (hence the\n * name of the component).\n *\n * ---\n *\n * By default the `Transition` component does not alter the behavior of the\n * component it renders, it only tracks \"enter\" and \"exit\" states for the\n * components. It's up to you to give meaning and effect to those states. For\n * example we can add styles to a component when it enters or exits:\n *\n * ```jsx\n * import { Transition } from 'react-transition-group';\n *\n * const duration = 300;\n *\n * const defaultStyle = {\n * transition: `opacity ${duration}ms ease-in-out`,\n * opacity: 0,\n * }\n *\n * const transitionStyles = {\n * entering: { opacity: 1 },\n * entered: { opacity: 1 },\n * exiting: { opacity: 0 },\n * exited: { opacity: 0 },\n * };\n *\n * const Fade = ({ in: inProp }) => (\n * <Transition in={inProp} timeout={duration}>\n * {state => (\n * <div style={{\n * ...defaultStyle,\n * ...transitionStyles[state]\n * }}>\n * I'm a fade Transition!\n * </div>\n * )}\n * </Transition>\n * );\n * ```\n *\n * There are 4 main states a Transition can be in:\n * - `'entering'`\n * - `'entered'`\n * - `'exiting'`\n * - `'exited'`\n *\n * Transition state is toggled via the `in` prop. When `true` the component\n * begins the \"Enter\" stage. During this stage, the component will shift from\n * its current transition state, to `'entering'` for the duration of the\n * transition and then to the `'entered'` stage once it's complete. Let's take\n * the following example (we'll use the\n * [useState](https://reactjs.org/docs/hooks-reference.html#usestate) hook):\n *\n * ```jsx\n * function App() {\n * const [inProp, setInProp] = useState(false);\n * return (\n * <div>\n * <Transition in={inProp} timeout={500}>\n * {state => (\n * // ...\n * )}\n * </Transition>\n * <button onClick={() => setInProp(true)}>\n * Click to Enter\n * </button>\n * </div>\n * );\n * }\n * ```\n *\n * When the button is clicked the component will shift to the `'entering'` state\n * and stay there for 500ms (the value of `timeout`) before it finally switches\n * to `'entered'`.\n *\n * When `in` is `false` the same thing happens except the state moves from\n * `'exiting'` to `'exited'`.\n */\n\nvar Transition = /*#__PURE__*/function (_React$Component) {\n _inheritsLoose(Transition, _React$Component);\n\n function Transition(props, context) {\n var _this;\n\n _this = _React$Component.call(this, props, context) || this;\n var parentGroup = context; // In the context of a TransitionGroup all enters are really appears\n\n var appear = parentGroup && !parentGroup.isMounting ? props.enter : props.appear;\n var initialStatus;\n _this.appearStatus = null;\n\n if (props.in) {\n if (appear) {\n initialStatus = EXITED;\n _this.appearStatus = ENTERING;\n } else {\n initialStatus = ENTERED;\n }\n } else {\n if (props.unmountOnExit || props.mountOnEnter) {\n initialStatus = UNMOUNTED;\n } else {\n initialStatus = EXITED;\n }\n }\n\n _this.state = {\n status: initialStatus\n };\n _this.nextCallback = null;\n return _this;\n }\n\n Transition.getDerivedStateFromProps = function getDerivedStateFromProps(_ref, prevState) {\n var nextIn = _ref.in;\n\n if (nextIn && prevState.status === UNMOUNTED) {\n return {\n status: EXITED\n };\n }\n\n return null;\n } // getSnapshotBeforeUpdate(prevProps) {\n // let nextStatus = null\n // if (prevProps !== this.props) {\n // const { status } = this.state\n // if (this.props.in) {\n // if (status !== ENTERING && status !== ENTERED) {\n // nextStatus = ENTERING\n // }\n // } else {\n // if (status === ENTERING || status === ENTERED) {\n // nextStatus = EXITING\n // }\n // }\n // }\n // return { nextStatus }\n // }\n ;\n\n var _proto = Transition.prototype;\n\n _proto.componentDidMount = function componentDidMount() {\n this.updateStatus(true, this.appearStatus);\n };\n\n _proto.componentDidUpdate = function componentDidUpdate(prevProps) {\n var nextStatus = null;\n\n if (prevProps !== this.props) {\n var status = this.state.status;\n\n if (this.props.in) {\n if (status !== ENTERING && status !== ENTERED) {\n nextStatus = ENTERING;\n }\n } else {\n if (status === ENTERING || status === ENTERED) {\n nextStatus = EXITING;\n }\n }\n }\n\n this.updateStatus(false, nextStatus);\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n this.cancelNextCallback();\n };\n\n _proto.getTimeouts = function getTimeouts() {\n var timeout = this.props.timeout;\n var exit, enter, appear;\n exit = enter = appear = timeout;\n\n if (timeout != null && typeof timeout !== 'number') {\n exit = timeout.exit;\n enter = timeout.enter; // TODO: remove fallback for next major\n\n appear = timeout.appear !== undefined ? timeout.appear : enter;\n }\n\n return {\n exit: exit,\n enter: enter,\n appear: appear\n };\n };\n\n _proto.updateStatus = function updateStatus(mounting, nextStatus) {\n if (mounting === void 0) {\n mounting = false;\n }\n\n if (nextStatus !== null) {\n // nextStatus will always be ENTERING or EXITING.\n this.cancelNextCallback();\n\n if (nextStatus === ENTERING) {\n if (this.props.unmountOnExit || this.props.mountOnEnter) {\n var node = this.props.nodeRef ? this.props.nodeRef.current : ReactDOM.findDOMNode(this); // https://github.com/reactjs/react-transition-group/pull/749\n // With unmountOnExit or mountOnEnter, the enter animation should happen at the transition between `exited` and `entering`.\n // To make the animation happen, we have to separate each rendering and avoid being processed as batched.\n\n if (node) forceReflow(node);\n }\n\n this.performEnter(mounting);\n } else {\n this.performExit();\n }\n } else if (this.props.unmountOnExit && this.state.status === EXITED) {\n this.setState({\n status: UNMOUNTED\n });\n }\n };\n\n _proto.performEnter = function performEnter(mounting) {\n var _this2 = this;\n\n var enter = this.props.enter;\n var appearing = this.context ? this.context.isMounting : mounting;\n\n var _ref2 = this.props.nodeRef ? [appearing] : [ReactDOM.findDOMNode(this), appearing],\n maybeNode = _ref2[0],\n maybeAppearing = _ref2[1];\n\n var timeouts = this.getTimeouts();\n var enterTimeout = appearing ? timeouts.appear : timeouts.enter; // no enter animation skip right to ENTERED\n // if we are mounting and running this it means appear _must_ be set\n\n if (!mounting && !enter || config.disabled) {\n this.safeSetState({\n status: ENTERED\n }, function () {\n _this2.props.onEntered(maybeNode);\n });\n return;\n }\n\n this.props.onEnter(maybeNode, maybeAppearing);\n this.safeSetState({\n status: ENTERING\n }, function () {\n _this2.props.onEntering(maybeNode, maybeAppearing);\n\n _this2.onTransitionEnd(enterTimeout, function () {\n _this2.safeSetState({\n status: ENTERED\n }, function () {\n _this2.props.onEntered(maybeNode, maybeAppearing);\n });\n });\n });\n };\n\n _proto.performExit = function performExit() {\n var _this3 = this;\n\n var exit = this.props.exit;\n var timeouts = this.getTimeouts();\n var maybeNode = this.props.nodeRef ? undefined : ReactDOM.findDOMNode(this); // no exit animation skip right to EXITED\n\n if (!exit || config.disabled) {\n this.safeSetState({\n status: EXITED\n }, function () {\n _this3.props.onExited(maybeNode);\n });\n return;\n }\n\n this.props.onExit(maybeNode);\n this.safeSetState({\n status: EXITING\n }, function () {\n _this3.props.onExiting(maybeNode);\n\n _this3.onTransitionEnd(timeouts.exit, function () {\n _this3.safeSetState({\n status: EXITED\n }, function () {\n _this3.props.onExited(maybeNode);\n });\n });\n });\n };\n\n _proto.cancelNextCallback = function cancelNextCallback() {\n if (this.nextCallback !== null) {\n this.nextCallback.cancel();\n this.nextCallback = null;\n }\n };\n\n _proto.safeSetState = function safeSetState(nextState, callback) {\n // This shouldn't be necessary, but there are weird race conditions with\n // setState callbacks and unmounting in testing, so always make sure that\n // we can cancel any pending setState callbacks after we unmount.\n callback = this.setNextCallback(callback);\n this.setState(nextState, callback);\n };\n\n _proto.setNextCallback = function setNextCallback(callback) {\n var _this4 = this;\n\n var active = true;\n\n this.nextCallback = function (event) {\n if (active) {\n active = false;\n _this4.nextCallback = null;\n callback(event);\n }\n };\n\n this.nextCallback.cancel = function () {\n active = false;\n };\n\n return this.nextCallback;\n };\n\n _proto.onTransitionEnd = function onTransitionEnd(timeout, handler) {\n this.setNextCallback(handler);\n var node = this.props.nodeRef ? this.props.nodeRef.current : ReactDOM.findDOMNode(this);\n var doesNotHaveTimeoutOrListener = timeout == null && !this.props.addEndListener;\n\n if (!node || doesNotHaveTimeoutOrListener) {\n setTimeout(this.nextCallback, 0);\n return;\n }\n\n if (this.props.addEndListener) {\n var _ref3 = this.props.nodeRef ? [this.nextCallback] : [node, this.nextCallback],\n maybeNode = _ref3[0],\n maybeNextCallback = _ref3[1];\n\n this.props.addEndListener(maybeNode, maybeNextCallback);\n }\n\n if (timeout != null) {\n setTimeout(this.nextCallback, timeout);\n }\n };\n\n _proto.render = function render() {\n var status = this.state.status;\n\n if (status === UNMOUNTED) {\n return null;\n }\n\n var _this$props = this.props,\n children = _this$props.children,\n _in = _this$props.in,\n _mountOnEnter = _this$props.mountOnEnter,\n _unmountOnExit = _this$props.unmountOnExit,\n _appear = _this$props.appear,\n _enter = _this$props.enter,\n _exit = _this$props.exit,\n _timeout = _this$props.timeout,\n _addEndListener = _this$props.addEndListener,\n _onEnter = _this$props.onEnter,\n _onEntering = _this$props.onEntering,\n _onEntered = _this$props.onEntered,\n _onExit = _this$props.onExit,\n _onExiting = _this$props.onExiting,\n _onExited = _this$props.onExited,\n _nodeRef = _this$props.nodeRef,\n childProps = _objectWithoutPropertiesLoose(_this$props, [\"children\", \"in\", \"mountOnEnter\", \"unmountOnExit\", \"appear\", \"enter\", \"exit\", \"timeout\", \"addEndListener\", \"onEnter\", \"onEntering\", \"onEntered\", \"onExit\", \"onExiting\", \"onExited\", \"nodeRef\"]);\n\n return (\n /*#__PURE__*/\n // allows for nested Transitions\n React.createElement(TransitionGroupContext.Provider, {\n value: null\n }, typeof children === 'function' ? children(status, childProps) : React.cloneElement(React.Children.only(children), childProps))\n );\n };\n\n return Transition;\n}(React.Component);\n\nTransition.contextType = TransitionGroupContext;\nTransition.propTypes = process.env.NODE_ENV !== \"production\" ? {\n /**\n * A React reference to DOM element that need to transition:\n * https://stackoverflow.com/a/51127130/4671932\n *\n * - When `nodeRef` prop is used, `node` is not passed to callback functions\n * (e.g. `onEnter`) because user already has direct access to the node.\n * - When changing `key` prop of `Transition` in a `TransitionGroup` a new\n * `nodeRef` need to be provided to `Transition` with changed `key` prop\n * (see\n * [test/CSSTransition-test.js](https://github.com/reactjs/react-transition-group/blob/13435f897b3ab71f6e19d724f145596f5910581c/test/CSSTransition-test.js#L362-L437)).\n */\n nodeRef: PropTypes.shape({\n current: typeof Element === 'undefined' ? PropTypes.any : function (propValue, key, componentName, location, propFullName, secret) {\n var value = propValue[key];\n return PropTypes.instanceOf(value && 'ownerDocument' in value ? value.ownerDocument.defaultView.Element : Element)(propValue, key, componentName, location, propFullName, secret);\n }\n }),\n\n /**\n * A `function` child can be used instead of a React element. This function is\n * called with the current transition status (`'entering'`, `'entered'`,\n * `'exiting'`, `'exited'`), which can be used to apply context\n * specific props to a component.\n *\n * ```jsx\n * <Transition in={this.state.in} timeout={150}>\n * {state => (\n * <MyComponent className={`fade fade-${state}`} />\n * )}\n * </Transition>\n * ```\n */\n children: PropTypes.oneOfType([PropTypes.func.isRequired, PropTypes.element.isRequired]).isRequired,\n\n /**\n * Show the component; triggers the enter or exit states\n */\n in: PropTypes.bool,\n\n /**\n * By default the child component is mounted immediately along with\n * the parent `Transition` component. If you want to \"lazy mount\" the component on the\n * first `in={true}` you can set `mountOnEnter`. After the first enter transition the component will stay\n * mounted, even on \"exited\", unless you also specify `unmountOnExit`.\n */\n mountOnEnter: PropTypes.bool,\n\n /**\n * By default the child component stays mounted after it reaches the `'exited'` state.\n * Set `unmountOnExit` if you'd prefer to unmount the component after it finishes exiting.\n */\n unmountOnExit: PropTypes.bool,\n\n /**\n * By default the child component does not perform the enter transition when\n * it first mounts, regardless of the value of `in`. If you want this\n * behavior, set both `appear` and `in` to `true`.\n *\n * > **Note**: there are no special appear states like `appearing`/`appeared`, this prop\n * > only adds an additional enter transition. However, in the\n * > `<CSSTransition>` component that first enter transition does result in\n * > additional `.appear-*` classes, that way you can choose to style it\n * > differently.\n */\n appear: PropTypes.bool,\n\n /**\n * Enable or disable enter transitions.\n */\n enter: PropTypes.bool,\n\n /**\n * Enable or disable exit transitions.\n */\n exit: PropTypes.bool,\n\n /**\n * The duration of the transition, in milliseconds.\n * Required unless `addEndListener` is provided.\n *\n * You may specify a single timeout for all transitions:\n *\n * ```jsx\n * timeout={500}\n * ```\n *\n * or individually:\n *\n * ```jsx\n * timeout={{\n * appear: 500,\n * enter: 300,\n * exit: 500,\n * }}\n * ```\n *\n * - `appear` defaults to the value of `enter`\n * - `enter` defaults to `0`\n * - `exit` defaults to `0`\n *\n * @type {number | { enter?: number, exit?: number, appear?: number }}\n */\n timeout: function timeout(props) {\n var pt = timeoutsShape;\n if (!props.addEndListener) pt = pt.isRequired;\n\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n return pt.apply(void 0, [props].concat(args));\n },\n\n /**\n * Add a custom transition end trigger. Called with the transitioning\n * DOM node and a `done` callback. Allows for more fine grained transition end\n * logic. Timeouts are still used as a fallback if provided.\n *\n * **Note**: when `nodeRef` prop is passed, `node` is not passed.\n *\n * ```jsx\n * addEndListener={(node, done) => {\n * // use the css transitionend event to mark the finish of a transition\n * node.addEventListener('transitionend', done, false);\n * }}\n * ```\n */\n addEndListener: PropTypes.func,\n\n /**\n * Callback fired before the \"entering\" status is applied. An extra parameter\n * `isAppearing` is supplied to indicate if the enter stage is occurring on the initial mount\n *\n * **Note**: when `nodeRef` prop is passed, `node` is not passed.\n *\n * @type Function(node: HtmlElement, isAppearing: bool) -> void\n */\n onEnter: PropTypes.func,\n\n /**\n * Callback fired after the \"entering\" status is applied. An extra parameter\n * `isAppearing` is supplied to indicate if the enter stage is occurring on the initial mount\n *\n * **Note**: when `nodeRef` prop is passed, `node` is not passed.\n *\n * @type Function(node: HtmlElement, isAppearing: bool)\n */\n onEntering: PropTypes.func,\n\n /**\n * Callback fired after the \"entered\" status is applied. An extra parameter\n * `isAppearing` is supplied to indicate if the enter stage is occurring on the initial mount\n *\n * **Note**: when `nodeRef` prop is passed, `node` is not passed.\n *\n * @type Function(node: HtmlElement, isAppearing: bool) -> void\n */\n onEntered: PropTypes.func,\n\n /**\n * Callback fired before the \"exiting\" status is applied.\n *\n * **Note**: when `nodeRef` prop is passed, `node` is not passed.\n *\n * @type Function(node: HtmlElement) -> void\n */\n onExit: PropTypes.func,\n\n /**\n * Callback fired after the \"exiting\" status is applied.\n *\n * **Note**: when `nodeRef` prop is passed, `node` is not passed.\n *\n * @type Function(node: HtmlElement) -> void\n */\n onExiting: PropTypes.func,\n\n /**\n * Callback fired after the \"exited\" status is applied.\n *\n * **Note**: when `nodeRef` prop is passed, `node` is not passed\n *\n * @type Function(node: HtmlElement) -> void\n */\n onExited: PropTypes.func\n} : {}; // Name the function so it is clearer in the documentation\n\nfunction noop() {}\n\nTransition.defaultProps = {\n in: false,\n mountOnEnter: false,\n unmountOnExit: false,\n appear: false,\n enter: true,\n exit: true,\n onEnter: noop,\n onEntering: noop,\n onEntered: noop,\n onExit: noop,\n onExiting: noop,\n onExited: noop\n};\nTransition.UNMOUNTED = UNMOUNTED;\nTransition.EXITED = EXITED;\nTransition.ENTERING = ENTERING;\nTransition.ENTERED = ENTERED;\nTransition.EXITING = EXITING;\nexport default Transition;","export var forceReflow = function forceReflow(node) {\n return node.scrollTop;\n};","import { Children, cloneElement, isValidElement } from 'react';\n/**\n * Given `this.props.children`, return an object mapping key to child.\n *\n * @param {*} children `this.props.children`\n * @return {object} Mapping of key to child\n */\n\nexport function getChildMapping(children, mapFn) {\n var mapper = function mapper(child) {\n return mapFn && isValidElement(child) ? mapFn(child) : child;\n };\n\n var result = Object.create(null);\n if (children) Children.map(children, function (c) {\n return c;\n }).forEach(function (child) {\n // run the map function here instead so that the key is the computed one\n result[child.key] = mapper(child);\n });\n return result;\n}\n/**\n * When you're adding or removing children some may be added or removed in the\n * same render pass. We want to show *both* since we want to simultaneously\n * animate elements in and out. This function takes a previous set of keys\n * and a new set of keys and merges them with its best guess of the correct\n * ordering. In the future we may expose some of the utilities in\n * ReactMultiChild to make this easy, but for now React itself does not\n * directly have this concept of the union of prevChildren and nextChildren\n * so we implement it here.\n *\n * @param {object} prev prev children as returned from\n * `ReactTransitionChildMapping.getChildMapping()`.\n * @param {object} next next children as returned from\n * `ReactTransitionChildMapping.getChildMapping()`.\n * @return {object} a key set that contains all keys in `prev` and all keys\n * in `next` in a reasonable order.\n */\n\nexport function mergeChildMappings(prev, next) {\n prev = prev || {};\n next = next || {};\n\n function getValueForKey(key) {\n return key in next ? next[key] : prev[key];\n } // For each key of `next`, the list of keys to insert before that key in\n // the combined list\n\n\n var nextKeysPending = Object.create(null);\n var pendingKeys = [];\n\n for (var prevKey in prev) {\n if (prevKey in next) {\n if (pendingKeys.length) {\n nextKeysPending[prevKey] = pendingKeys;\n pendingKeys = [];\n }\n } else {\n pendingKeys.push(prevKey);\n }\n }\n\n var i;\n var childMapping = {};\n\n for (var nextKey in next) {\n if (nextKeysPending[nextKey]) {\n for (i = 0; i < nextKeysPending[nextKey].length; i++) {\n var pendingNextKey = nextKeysPending[nextKey][i];\n childMapping[nextKeysPending[nextKey][i]] = getValueForKey(pendingNextKey);\n }\n }\n\n childMapping[nextKey] = getValueForKey(nextKey);\n } // Finally, add the keys which didn't appear before any key in `next`\n\n\n for (i = 0; i < pendingKeys.length; i++) {\n childMapping[pendingKeys[i]] = getValueForKey(pendingKeys[i]);\n }\n\n return childMapping;\n}\n\nfunction getProp(child, prop, props) {\n return props[prop] != null ? props[prop] : child.props[prop];\n}\n\nexport function getInitialChildMapping(props, onExited) {\n return getChildMapping(props.children, function (child) {\n return cloneElement(child, {\n onExited: onExited.bind(null, child),\n in: true,\n appear: getProp(child, 'appear', props),\n enter: getProp(child, 'enter', props),\n exit: getProp(child, 'exit', props)\n });\n });\n}\nexport function getNextChildMapping(nextProps, prevChildMapping, onExited) {\n var nextChildMapping = getChildMapping(nextProps.children);\n var children = mergeChildMappings(prevChildMapping, nextChildMapping);\n Object.keys(children).forEach(function (key) {\n var child = children[key];\n if (!isValidElement(child)) return;\n var hasPrev = (key in prevChildMapping);\n var hasNext = (key in nextChildMapping);\n var prevChild = prevChildMapping[key];\n var isLeaving = isValidElement(prevChild) && !prevChild.props.in; // item is new (entering)\n\n if (hasNext && (!hasPrev || isLeaving)) {\n // console.log('entering', key)\n children[key] = cloneElement(child, {\n onExited: onExited.bind(null, child),\n in: true,\n exit: getProp(child, 'exit', nextProps),\n enter: getProp(child, 'enter', nextProps)\n });\n } else if (!hasNext && hasPrev && !isLeaving) {\n // item is old (exiting)\n // console.log('leaving', key)\n children[key] = cloneElement(child, {\n in: false\n });\n } else if (hasNext && hasPrev && isValidElement(prevChild)) {\n // item hasn't changed transition states\n // copy over the last transition props;\n // console.log('unchanged', key)\n children[key] = cloneElement(child, {\n onExited: onExited.bind(null, child),\n in: prevChild.props.in,\n exit: getProp(child, 'exit', nextProps),\n enter: getProp(child, 'enter', nextProps)\n });\n }\n });\n return children;\n}","import _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inheritsLoose from \"@babel/runtime/helpers/esm/inheritsLoose\";\nimport PropTypes from 'prop-types';\nimport React from 'react';\nimport TransitionGroupContext from './TransitionGroupContext';\nimport { getChildMapping, getInitialChildMapping, getNextChildMapping } from './utils/ChildMapping';\n\nvar values = Object.values || function (obj) {\n return Object.keys(obj).map(function (k) {\n return obj[k];\n });\n};\n\nvar defaultProps = {\n component: 'div',\n childFactory: function childFactory(child) {\n return child;\n }\n};\n/**\n * The `<TransitionGroup>` component manages a set of transition components\n * (`<Transition>` and `<CSSTransition>`) in a list. Like with the transition\n * components, `<TransitionGroup>` is a state machine for managing the mounting\n * and unmounting of components over time.\n *\n * Consider the example below. As items are removed or added to the TodoList the\n * `in` prop is toggled automatically by the `<TransitionGroup>`.\n *\n * Note that `<TransitionGroup>` does not define any animation behavior!\n * Exactly _how_ a list item animates is up to the individual transition\n * component. This means you can mix and match animations across different list\n * items.\n */\n\nvar TransitionGroup = /*#__PURE__*/function (_React$Component) {\n _inheritsLoose(TransitionGroup, _React$Component);\n\n function TransitionGroup(props, context) {\n var _this;\n\n _this = _React$Component.call(this, props, context) || this;\n\n var handleExited = _this.handleExited.bind(_assertThisInitialized(_this)); // Initial children should all be entering, dependent on appear\n\n\n _this.state = {\n contextValue: {\n isMounting: true\n },\n handleExited: handleExited,\n firstRender: true\n };\n return _this;\n }\n\n var _proto = TransitionGroup.prototype;\n\n _proto.componentDidMount = function componentDidMount() {\n this.mounted = true;\n this.setState({\n contextValue: {\n isMounting: false\n }\n });\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n this.mounted = false;\n };\n\n TransitionGroup.getDerivedStateFromProps = function getDerivedStateFromProps(nextProps, _ref) {\n var prevChildMapping = _ref.children,\n handleExited = _ref.handleExited,\n firstRender = _ref.firstRender;\n return {\n children: firstRender ? getInitialChildMapping(nextProps, handleExited) : getNextChildMapping(nextProps, prevChildMapping, handleExited),\n firstRender: false\n };\n } // node is `undefined` when user provided `nodeRef` prop\n ;\n\n _proto.handleExited = function handleExited(child, node) {\n var currentChildMapping = getChildMapping(this.props.children);\n if (child.key in currentChildMapping) return;\n\n if (child.props.onExited) {\n child.props.onExited(node);\n }\n\n if (this.mounted) {\n this.setState(function (state) {\n var children = _extends({}, state.children);\n\n delete children[child.key];\n return {\n children: children\n };\n });\n }\n };\n\n _proto.render = function render() {\n var _this$props = this.props,\n Component = _this$props.component,\n childFactory = _this$props.childFactory,\n props = _objectWithoutPropertiesLoose(_this$props, [\"component\", \"childFactory\"]);\n\n var contextValue = this.state.contextValue;\n var children = values(this.state.children).map(childFactory);\n delete props.appear;\n delete props.enter;\n delete props.exit;\n\n if (Component === null) {\n return /*#__PURE__*/React.createElement(TransitionGroupContext.Provider, {\n value: contextValue\n }, children);\n }\n\n return /*#__PURE__*/React.createElement(TransitionGroupContext.Provider, {\n value: contextValue\n }, /*#__PURE__*/React.createElement(Component, props, children));\n };\n\n return TransitionGroup;\n}(React.Component);\n\nTransitionGroup.propTypes = process.env.NODE_ENV !== \"production\" ? {\n /**\n * `<TransitionGroup>` renders a `<div>` by default. You can change this\n * behavior by providing a `component` prop.\n * If you use React v16+ and would like to avoid a wrapping `<div>` element\n * you can pass in `component={null}`. This is useful if the wrapping div\n * borks your css styles.\n */\n component: PropTypes.any,\n\n /**\n * A set of `<Transition>` components, that are toggled `in` and out as they\n * leave. the `<TransitionGroup>` will inject specific transition props, so\n * remember to spread them through if you are wrapping the `<Transition>` as\n * with our `<Fade>` example.\n *\n * While this component is meant for multiple `Transition` or `CSSTransition`\n * children, sometimes you may want to have a single transition child with\n * content that you want to be transitioned out and in when you change it\n * (e.g. routes, images etc.) In that case you can change the `key` prop of\n * the transition child as you change its content, this will cause\n * `TransitionGroup` to transition the child out and back in.\n */\n children: PropTypes.node,\n\n /**\n * A convenience prop that enables or disables appear animations\n * for all children. Note that specifying this will override any defaults set\n * on individual children Transitions.\n */\n appear: PropTypes.bool,\n\n /**\n * A convenience prop that enables or disables enter animations\n * for all children. Note that specifying this will override any defaults set\n * on individual children Transitions.\n */\n enter: PropTypes.bool,\n\n /**\n * A convenience prop that enables or disables exit animations\n * for all children. Note that specifying this will override any defaults set\n * on individual children Transitions.\n */\n exit: PropTypes.bool,\n\n /**\n * You may need to apply reactive updates to a child as it is exiting.\n * This is generally done by using `cloneElement` however in the case of an exiting\n * child the element has already been removed and not accessible to the consumer.\n *\n * If you do need to update a child as it leaves you can provide a `childFactory`\n * to wrap every child, even the ones that are leaving.\n *\n * @type Function(child: ReactElement) -> ReactElement\n */\n childFactory: PropTypes.func\n} : {};\nTransitionGroup.defaultProps = defaultProps;\nexport default TransitionGroup;","import React from 'react';\nexport default React.createContext(null);","/**\n * @license React\n * react-jsx-runtime.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var f=require(\"react\"),k=Symbol.for(\"react.element\"),l=Symbol.for(\"react.fragment\"),m=Object.prototype.hasOwnProperty,n=f.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,p={key:!0,ref:!0,__self:!0,__source:!0};\nfunction q(c,a,g){var b,d={},e=null,h=null;void 0!==g&&(e=\"\"+g);void 0!==a.key&&(e=\"\"+a.key);void 0!==a.ref&&(h=a.ref);for(b in a)m.call(a,b)&&!p.hasOwnProperty(b)&&(d[b]=a[b]);if(c&&c.defaultProps)for(b in a=c.defaultProps,a)void 0===d[b]&&(d[b]=a[b]);return{$$typeof:k,type:c,key:e,ref:h,props:d,_owner:n.current}}exports.Fragment=l;exports.jsx=q;exports.jsxs=q;\n","/**\n * @license React\n * react.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var l=Symbol.for(\"react.element\"),n=Symbol.for(\"react.portal\"),p=Symbol.for(\"react.fragment\"),q=Symbol.for(\"react.strict_mode\"),r=Symbol.for(\"react.profiler\"),t=Symbol.for(\"react.provider\"),u=Symbol.for(\"react.context\"),v=Symbol.for(\"react.forward_ref\"),w=Symbol.for(\"react.suspense\"),x=Symbol.for(\"react.memo\"),y=Symbol.for(\"react.lazy\"),z=Symbol.iterator;function A(a){if(null===a||\"object\"!==typeof a)return null;a=z&&a[z]||a[\"@@iterator\"];return\"function\"===typeof a?a:null}\nvar B={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},C=Object.assign,D={};function E(a,b,e){this.props=a;this.context=b;this.refs=D;this.updater=e||B}E.prototype.isReactComponent={};\nE.prototype.setState=function(a,b){if(\"object\"!==typeof a&&\"function\"!==typeof a&&null!=a)throw Error(\"setState(...): takes an object of state variables to update or a function which returns an object of state variables.\");this.updater.enqueueSetState(this,a,b,\"setState\")};E.prototype.forceUpdate=function(a){this.updater.enqueueForceUpdate(this,a,\"forceUpdate\")};function F(){}F.prototype=E.prototype;function G(a,b,e){this.props=a;this.context=b;this.refs=D;this.updater=e||B}var H=G.prototype=new F;\nH.constructor=G;C(H,E.prototype);H.isPureReactComponent=!0;var I=Array.isArray,J=Object.prototype.hasOwnProperty,K={current:null},L={key:!0,ref:!0,__self:!0,__source:!0};\nfunction M(a,b,e){var d,c={},k=null,h=null;if(null!=b)for(d in void 0!==b.ref&&(h=b.ref),void 0!==b.key&&(k=\"\"+b.key),b)J.call(b,d)&&!L.hasOwnProperty(d)&&(c[d]=b[d]);var g=arguments.length-2;if(1===g)c.children=e;else if(1<g){for(var f=Array(g),m=0;m<g;m++)f[m]=arguments[m+2];c.children=f}if(a&&a.defaultProps)for(d in g=a.defaultProps,g)void 0===c[d]&&(c[d]=g[d]);return{$$typeof:l,type:a,key:k,ref:h,props:c,_owner:K.current}}\nfunction N(a,b){return{$$typeof:l,type:a.type,key:b,ref:a.ref,props:a.props,_owner:a._owner}}function O(a){return\"object\"===typeof a&&null!==a&&a.$$typeof===l}function escape(a){var b={\"=\":\"=0\",\":\":\"=2\"};return\"$\"+a.replace(/[=:]/g,function(a){return b[a]})}var P=/\\/+/g;function Q(a,b){return\"object\"===typeof a&&null!==a&&null!=a.key?escape(\"\"+a.key):b.toString(36)}\nfunction R(a,b,e,d,c){var k=typeof a;if(\"undefined\"===k||\"boolean\"===k)a=null;var h=!1;if(null===a)h=!0;else switch(k){case \"string\":case \"number\":h=!0;break;case \"object\":switch(a.$$typeof){case l:case n:h=!0}}if(h)return h=a,c=c(h),a=\"\"===d?\".\"+Q(h,0):d,I(c)?(e=\"\",null!=a&&(e=a.replace(P,\"$&/\")+\"/\"),R(c,b,e,\"\",function(a){return a})):null!=c&&(O(c)&&(c=N(c,e+(!c.key||h&&h.key===c.key?\"\":(\"\"+c.key).replace(P,\"$&/\")+\"/\")+a)),b.push(c)),1;h=0;d=\"\"===d?\".\":d+\":\";if(I(a))for(var g=0;g<a.length;g++){k=\na[g];var f=d+Q(k,g);h+=R(k,b,e,f,c)}else if(f=A(a),\"function\"===typeof f)for(a=f.call(a),g=0;!(k=a.next()).done;)k=k.value,f=d+Q(k,g++),h+=R(k,b,e,f,c);else if(\"object\"===k)throw b=String(a),Error(\"Objects are not valid as a React child (found: \"+(\"[object Object]\"===b?\"object with keys {\"+Object.keys(a).join(\", \")+\"}\":b)+\"). If you meant to render a collection of children, use an array instead.\");return h}\nfunction S(a,b,e){if(null==a)return a;var d=[],c=0;R(a,d,\"\",\"\",function(a){return b.call(e,a,c++)});return d}function T(a){if(-1===a._status){var b=a._result;b=b();b.then(function(b){if(0===a._status||-1===a._status)a._status=1,a._result=b},function(b){if(0===a._status||-1===a._status)a._status=2,a._result=b});-1===a._status&&(a._status=0,a._result=b)}if(1===a._status)return a._result.default;throw a._result;}\nvar U={current:null},V={transition:null},W={ReactCurrentDispatcher:U,ReactCurrentBatchConfig:V,ReactCurrentOwner:K};function X(){throw Error(\"act(...) is not supported in production builds of React.\");}\nexports.Children={map:S,forEach:function(a,b,e){S(a,function(){b.apply(this,arguments)},e)},count:function(a){var b=0;S(a,function(){b++});return b},toArray:function(a){return S(a,function(a){return a})||[]},only:function(a){if(!O(a))throw Error(\"React.Children.only expected to receive a single React element child.\");return a}};exports.Component=E;exports.Fragment=p;exports.Profiler=r;exports.PureComponent=G;exports.StrictMode=q;exports.Suspense=w;\nexports.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=W;exports.act=X;\nexports.cloneElement=function(a,b,e){if(null===a||void 0===a)throw Error(\"React.cloneElement(...): The argument must be a React element, but you passed \"+a+\".\");var d=C({},a.props),c=a.key,k=a.ref,h=a._owner;if(null!=b){void 0!==b.ref&&(k=b.ref,h=K.current);void 0!==b.key&&(c=\"\"+b.key);if(a.type&&a.type.defaultProps)var g=a.type.defaultProps;for(f in b)J.call(b,f)&&!L.hasOwnProperty(f)&&(d[f]=void 0===b[f]&&void 0!==g?g[f]:b[f])}var f=arguments.length-2;if(1===f)d.children=e;else if(1<f){g=Array(f);\nfor(var m=0;m<f;m++)g[m]=arguments[m+2];d.children=g}return{$$typeof:l,type:a.type,key:c,ref:k,props:d,_owner:h}};exports.createContext=function(a){a={$$typeof:u,_currentValue:a,_currentValue2:a,_threadCount:0,Provider:null,Consumer:null,_defaultValue:null,_globalName:null};a.Provider={$$typeof:t,_context:a};return a.Consumer=a};exports.createElement=M;exports.createFactory=function(a){var b=M.bind(null,a);b.type=a;return b};exports.createRef=function(){return{current:null}};\nexports.forwardRef=function(a){return{$$typeof:v,render:a}};exports.isValidElement=O;exports.lazy=function(a){return{$$typeof:y,_payload:{_status:-1,_result:a},_init:T}};exports.memo=function(a,b){return{$$typeof:x,type:a,compare:void 0===b?null:b}};exports.startTransition=function(a){var b=V.transition;V.transition={};try{a()}finally{V.transition=b}};exports.unstable_act=X;exports.useCallback=function(a,b){return U.current.useCallback(a,b)};exports.useContext=function(a){return U.current.useContext(a)};\nexports.useDebugValue=function(){};exports.useDeferredValue=function(a){return U.current.useDeferredValue(a)};exports.useEffect=function(a,b){return U.current.useEffect(a,b)};exports.useId=function(){return U.current.useId()};exports.useImperativeHandle=function(a,b,e){return U.current.useImperativeHandle(a,b,e)};exports.useInsertionEffect=function(a,b){return U.current.useInsertionEffect(a,b)};exports.useLayoutEffect=function(a,b){return U.current.useLayoutEffect(a,b)};\nexports.useMemo=function(a,b){return U.current.useMemo(a,b)};exports.useReducer=function(a,b,e){return U.current.useReducer(a,b,e)};exports.useRef=function(a){return U.current.useRef(a)};exports.useState=function(a){return U.current.useState(a)};exports.useSyncExternalStore=function(a,b,e){return U.current.useSyncExternalStore(a,b,e)};exports.useTransition=function(){return U.current.useTransition()};exports.version=\"18.3.1\";\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react.production.min.js');\n} else {\n module.exports = require('./cjs/react.development.js');\n}\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-jsx-runtime.production.min.js');\n} else {\n module.exports = require('./cjs/react-jsx-runtime.development.js');\n}\n","/**\n * @license React\n * scheduler.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';function f(a,b){var c=a.length;a.push(b);a:for(;0<c;){var d=c-1>>>1,e=a[d];if(0<g(e,b))a[d]=b,a[c]=e,c=d;else break a}}function h(a){return 0===a.length?null:a[0]}function k(a){if(0===a.length)return null;var b=a[0],c=a.pop();if(c!==b){a[0]=c;a:for(var d=0,e=a.length,w=e>>>1;d<w;){var m=2*(d+1)-1,C=a[m],n=m+1,x=a[n];if(0>g(C,c))n<e&&0>g(x,C)?(a[d]=x,a[n]=c,d=n):(a[d]=C,a[m]=c,d=m);else if(n<e&&0>g(x,c))a[d]=x,a[n]=c,d=n;else break a}}return b}\nfunction g(a,b){var c=a.sortIndex-b.sortIndex;return 0!==c?c:a.id-b.id}if(\"object\"===typeof performance&&\"function\"===typeof performance.now){var l=performance;exports.unstable_now=function(){return l.now()}}else{var p=Date,q=p.now();exports.unstable_now=function(){return p.now()-q}}var r=[],t=[],u=1,v=null,y=3,z=!1,A=!1,B=!1,D=\"function\"===typeof setTimeout?setTimeout:null,E=\"function\"===typeof clearTimeout?clearTimeout:null,F=\"undefined\"!==typeof setImmediate?setImmediate:null;\n\"undefined\"!==typeof navigator&&void 0!==navigator.scheduling&&void 0!==navigator.scheduling.isInputPending&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function G(a){for(var b=h(t);null!==b;){if(null===b.callback)k(t);else if(b.startTime<=a)k(t),b.sortIndex=b.expirationTime,f(r,b);else break;b=h(t)}}function H(a){B=!1;G(a);if(!A)if(null!==h(r))A=!0,I(J);else{var b=h(t);null!==b&&K(H,b.startTime-a)}}\nfunction J(a,b){A=!1;B&&(B=!1,E(L),L=-1);z=!0;var c=y;try{G(b);for(v=h(r);null!==v&&(!(v.expirationTime>b)||a&&!M());){var d=v.callback;if(\"function\"===typeof d){v.callback=null;y=v.priorityLevel;var e=d(v.expirationTime<=b);b=exports.unstable_now();\"function\"===typeof e?v.callback=e:v===h(r)&&k(r);G(b)}else k(r);v=h(r)}if(null!==v)var w=!0;else{var m=h(t);null!==m&&K(H,m.startTime-b);w=!1}return w}finally{v=null,y=c,z=!1}}var N=!1,O=null,L=-1,P=5,Q=-1;\nfunction M(){return exports.unstable_now()-Q<P?!1:!0}function R(){if(null!==O){var a=exports.unstable_now();Q=a;var b=!0;try{b=O(!0,a)}finally{b?S():(N=!1,O=null)}}else N=!1}var S;if(\"function\"===typeof F)S=function(){F(R)};else if(\"undefined\"!==typeof MessageChannel){var T=new MessageChannel,U=T.port2;T.port1.onmessage=R;S=function(){U.postMessage(null)}}else S=function(){D(R,0)};function I(a){O=a;N||(N=!0,S())}function K(a,b){L=D(function(){a(exports.unstable_now())},b)}\nexports.unstable_IdlePriority=5;exports.unstable_ImmediatePriority=1;exports.unstable_LowPriority=4;exports.unstable_NormalPriority=3;exports.unstable_Profiling=null;exports.unstable_UserBlockingPriority=2;exports.unstable_cancelCallback=function(a){a.callback=null};exports.unstable_continueExecution=function(){A||z||(A=!0,I(J))};\nexports.unstable_forceFrameRate=function(a){0>a||125<a?console.error(\"forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported\"):P=0<a?Math.floor(1E3/a):5};exports.unstable_getCurrentPriorityLevel=function(){return y};exports.unstable_getFirstCallbackNode=function(){return h(r)};exports.unstable_next=function(a){switch(y){case 1:case 2:case 3:var b=3;break;default:b=y}var c=y;y=b;try{return a()}finally{y=c}};exports.unstable_pauseExecution=function(){};\nexports.unstable_requestPaint=function(){};exports.unstable_runWithPriority=function(a,b){switch(a){case 1:case 2:case 3:case 4:case 5:break;default:a=3}var c=y;y=a;try{return b()}finally{y=c}};\nexports.unstable_scheduleCallback=function(a,b,c){var d=exports.unstable_now();\"object\"===typeof c&&null!==c?(c=c.delay,c=\"number\"===typeof c&&0<c?d+c:d):c=d;switch(a){case 1:var e=-1;break;case 2:e=250;break;case 5:e=1073741823;break;case 4:e=1E4;break;default:e=5E3}e=c+e;a={id:u++,callback:b,priorityLevel:a,startTime:c,expirationTime:e,sortIndex:-1};c>d?(a.sortIndex=c,f(t,a),null===h(r)&&a===h(t)&&(B?(E(L),L=-1):B=!0,K(H,c-d))):(a.sortIndex=e,f(r,a),A||z||(A=!0,I(J)));return a};\nexports.unstable_shouldYield=M;exports.unstable_wrapCallback=function(a){var b=y;return function(){var c=y;y=b;try{return a.apply(this,arguments)}finally{y=c}}};\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/scheduler.production.min.js');\n} else {\n module.exports = require('./cjs/scheduler.development.js');\n}\n","\"use strict\";\n\nvar stylesInDOM = [];\nfunction getIndexByIdentifier(identifier) {\n var result = -1;\n for (var i = 0; i < stylesInDOM.length; i++) {\n if (stylesInDOM[i].identifier === identifier) {\n result = i;\n break;\n }\n }\n return result;\n}\nfunction modulesToDom(list, options) {\n var idCountMap = {};\n var identifiers = [];\n for (var i = 0; i < list.length; i++) {\n var item = list[i];\n var id = options.base ? item[0] + options.base : item[0];\n var count = idCountMap[id] || 0;\n var identifier = \"\".concat(id, \" \").concat(count);\n idCountMap[id] = count + 1;\n var indexByIdentifier = getIndexByIdentifier(identifier);\n var obj = {\n css: item[1],\n media: item[2],\n sourceMap: item[3],\n supports: item[4],\n layer: item[5]\n };\n if (indexByIdentifier !== -1) {\n stylesInDOM[indexByIdentifier].references++;\n stylesInDOM[indexByIdentifier].updater(obj);\n } else {\n var updater = addElementStyle(obj, options);\n options.byIndex = i;\n stylesInDOM.splice(i, 0, {\n identifier: identifier,\n updater: updater,\n references: 1\n });\n }\n identifiers.push(identifier);\n }\n return identifiers;\n}\nfunction addElementStyle(obj, options) {\n var api = options.domAPI(options);\n api.update(obj);\n var updater = function updater(newObj) {\n if (newObj) {\n if (newObj.css === obj.css && newObj.media === obj.media && newObj.sourceMap === obj.sourceMap && newObj.supports === obj.supports && newObj.layer === obj.layer) {\n return;\n }\n api.update(obj = newObj);\n } else {\n api.remove();\n }\n };\n return updater;\n}\nmodule.exports = function (list, options) {\n options = options || {};\n list = list || [];\n var lastIdentifiers = modulesToDom(list, options);\n return function update(newList) {\n newList = newList || [];\n for (var i = 0; i < lastIdentifiers.length; i++) {\n var identifier = lastIdentifiers[i];\n var index = getIndexByIdentifier(identifier);\n stylesInDOM[index].references--;\n }\n var newLastIdentifiers = modulesToDom(newList, options);\n for (var _i = 0; _i < lastIdentifiers.length; _i++) {\n var _identifier = lastIdentifiers[_i];\n var _index = getIndexByIdentifier(_identifier);\n if (stylesInDOM[_index].references === 0) {\n stylesInDOM[_index].updater();\n stylesInDOM.splice(_index, 1);\n }\n }\n lastIdentifiers = newLastIdentifiers;\n };\n};","\"use strict\";\n\nvar memo = {};\n\n/* istanbul ignore next */\nfunction getTarget(target) {\n if (typeof memo[target] === \"undefined\") {\n var styleTarget = document.querySelector(target);\n\n // Special case to return head of iframe instead of iframe itself\n if (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) {\n try {\n // This will throw an exception if access to iframe is blocked\n // due to cross-origin restrictions\n styleTarget = styleTarget.contentDocument.head;\n } catch (e) {\n // istanbul ignore next\n styleTarget = null;\n }\n }\n memo[target] = styleTarget;\n }\n return memo[target];\n}\n\n/* istanbul ignore next */\nfunction insertBySelector(insert, style) {\n var target = getTarget(insert);\n if (!target) {\n throw new Error(\"Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.\");\n }\n target.appendChild(style);\n}\nmodule.exports = insertBySelector;","\"use strict\";\n\n/* istanbul ignore next */\nfunction insertStyleElement(options) {\n var element = document.createElement(\"style\");\n options.setAttributes(element, options.attributes);\n options.insert(element, options.options);\n return element;\n}\nmodule.exports = insertStyleElement;","\"use strict\";\n\n/* istanbul ignore next */\nfunction setAttributesWithoutAttributes(styleElement) {\n var nonce = typeof __webpack_nonce__ !== \"undefined\" ? __webpack_nonce__ : null;\n if (nonce) {\n styleElement.setAttribute(\"nonce\", nonce);\n }\n}\nmodule.exports = setAttributesWithoutAttributes;","\"use strict\";\n\n/* istanbul ignore next */\nfunction apply(styleElement, options, obj) {\n var css = \"\";\n if (obj.supports) {\n css += \"@supports (\".concat(obj.supports, \") {\");\n }\n if (obj.media) {\n css += \"@media \".concat(obj.media, \" {\");\n }\n var needLayer = typeof obj.layer !== \"undefined\";\n if (needLayer) {\n css += \"@layer\".concat(obj.layer.length > 0 ? \" \".concat(obj.layer) : \"\", \" {\");\n }\n css += obj.css;\n if (needLayer) {\n css += \"}\";\n }\n if (obj.media) {\n css += \"}\";\n }\n if (obj.supports) {\n css += \"}\";\n }\n var sourceMap = obj.sourceMap;\n if (sourceMap && typeof btoa !== \"undefined\") {\n css += \"\\n/*# sourceMappingURL=data:application/json;base64,\".concat(btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))), \" */\");\n }\n\n // For old IE\n /* istanbul ignore if */\n options.styleTagTransform(css, styleElement, options.options);\n}\nfunction removeStyleElement(styleElement) {\n // istanbul ignore if\n if (styleElement.parentNode === null) {\n return false;\n }\n styleElement.parentNode.removeChild(styleElement);\n}\n\n/* istanbul ignore next */\nfunction domAPI(options) {\n if (typeof document === \"undefined\") {\n return {\n update: function update() {},\n remove: function remove() {}\n };\n }\n var styleElement = options.insertStyleElement(options);\n return {\n update: function update(obj) {\n apply(styleElement, options, obj);\n },\n remove: function remove() {\n removeStyleElement(styleElement);\n }\n };\n}\nmodule.exports = domAPI;","\"use strict\";\n\n/* istanbul ignore next */\nfunction styleTagTransform(css, styleElement) {\n if (styleElement.styleSheet) {\n styleElement.styleSheet.cssText = css;\n } else {\n while (styleElement.firstChild) {\n styleElement.removeChild(styleElement.firstChild);\n }\n styleElement.appendChild(document.createTextNode(css));\n }\n}\nmodule.exports = styleTagTransform;","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = StyleToObject;\nvar inline_style_parser_1 = __importDefault(require(\"inline-style-parser\"));\n/**\n * Parses inline style to object.\n *\n * @param style - Inline style.\n * @param iterator - Iterator.\n * @returns - Style object or null.\n *\n * @example Parsing inline style to object:\n *\n * ```js\n * import parse from 'style-to-object';\n * parse('line-height: 42;'); // { 'line-height': '42' }\n * ```\n */\nfunction StyleToObject(style, iterator) {\n var styleObject = null;\n if (!style || typeof style !== 'string') {\n return styleObject;\n }\n var declarations = (0, inline_style_parser_1.default)(style);\n var hasIterator = typeof iterator === 'function';\n declarations.forEach(function (declaration) {\n if (declaration.type !== 'declaration') {\n return;\n }\n var property = declaration.property, value = declaration.value;\n if (hasIterator) {\n iterator(property, value, declaration);\n }\n else if (value) {\n styleObject = styleObject || {};\n styleObject[property] = value;\n }\n });\n return styleObject;\n}\n//# sourceMappingURL=index.js.map","module.exports = \"data:image/svg+xml,%3csvg width='115' height='115' viewBox='0 0 115 115' fill='none' xmlns='http://www.w3.org/2000/svg'%3e %3cpath d='M0.00779067 27.599C0.00779067 12.3521 12.3668 0 27.605 0H87.4028C102.649 0 115 12.3599 115 27.599V87.4009C115 102.648 102.641 115 87.4028 115H27.4645C12.2966 115 0 102.703 0 87.5336V27.5913L0.00779067 27.599Z' fill='url(%23paint0_linear_2403_134177)'/%3e %3cpath d='M6.64611 31.0476C6.64611 17.5641 17.5773 6.63214 31.0599 6.63214H83.9604C97.443 6.63214 108.374 17.5641 108.374 31.0476V83.9517C108.374 97.4352 97.443 108.367 83.9604 108.367H30.9351C17.5149 108.367 6.6383 97.4898 6.6383 84.0687V31.0398L6.64611 31.0476Z' fill='black'/%3e %3cpath d='M13.2766 34.4968C13.2766 22.769 22.78 13.265 34.507 13.265H80.5101C92.2372 13.265 101.741 22.769 101.741 34.4968V80.5031C101.741 92.231 92.2372 101.735 80.5101 101.735H34.4056C22.741 101.735 13.2844 92.2778 13.2844 80.6045V34.4968H13.2766Z' fill='white'/%3e %3cpath d='M47.815 61.914C52.1457 54.4124 50.9067 45.5889 45.0477 42.2059C39.1887 38.823 30.9284 42.1618 26.5977 49.6633C22.267 57.1648 23.5059 65.9884 29.3649 69.3713C35.2239 72.7543 43.4843 69.4155 47.815 61.914Z' fill='black'/%3e %3cpath d='M85.8952 69.4338C91.7542 66.0508 92.9931 57.2273 88.6624 49.7258C84.3317 42.2242 76.0713 38.8855 70.2123 42.2684C64.3533 45.6513 63.1144 54.4749 67.4451 61.9764C71.7758 69.4779 80.0362 72.8167 85.8952 69.4338Z' fill='black'/%3e %3cpath d='M72.0841 50C74.6308 50 76.6953 53.15 76.6953 50.6031C76.6953 48.0562 74.6308 45.9915 72.0841 45.9915C69.5374 45.9915 67.4729 48.0562 67.4729 50.6031C67.4729 53.15 69.5374 50 72.0841 50Z' fill='white'/%3e %3cpath d='M57.629 74.6895C57.629 74.6895 54.3363 74.5569 53.1582 75.3996C51.98 76.2423 52.058 77.5454 52.058 77.5454C52.058 77.5454 51.902 78.8797 52.2921 79.7458C52.6822 80.612 54.9684 80.4637 56.0919 82.3911C56.0919 82.3911 57.1218 82.7422 57.629 82.6408' fill='black'/%3e %3cpath d='M57.629 74.6895C57.629 74.6895 60.9217 74.5567 62.0999 75.3994C63.2781 76.2421 63.2001 77.5452 63.2001 77.5452C63.2001 77.5452 63.3561 78.8795 62.966 79.7457C62.5759 80.6118 60.2897 80.4635 59.1662 82.3909C59.1662 82.3909 58.1361 82.7422 57.629 82.6408' fill='black'/%3e %3cpath d='M42.912 50.0002C45.4587 50.0002 47.5232 53.1502 47.5232 50.6033C47.5232 48.0564 45.4587 45.9917 42.912 45.9917C40.3653 45.9917 38.3008 48.0564 38.3008 50.6033C38.3008 53.1502 40.3653 50.0002 42.912 50.0002Z' fill='white'/%3e %3cdefs%3e %3clinearGradient id='paint0_linear_2403_134177' x1='57.5' y1='0' x2='57.5' y2='128.642' gradientUnits='userSpaceOnUse'%3e %3cstop stop-color='%235EA6FF'/%3e %3cstop offset='1' stop-color='%235EA6FF' stop-opacity='0.4'/%3e %3c/linearGradient%3e %3c/defs%3e %3c/svg%3e\"","module.exports = \"data:image/svg+xml,%3csvg width='256' height='256' viewBox='0 0 256 256' fill='none' xmlns='http://www.w3.org/2000/svg'%3e %3cg clip-path='url(%23clip0_2693_4913)'%3e %3cpath d='M128.003 199.216C167.338 199.216 199.224 167.328 199.224 127.993C199.224 88.658 167.338 56.77 128.003 56.77C88.668 56.77 56.781 88.658 56.781 127.993C56.781 167.328 88.668 199.216 128.003 199.216Z' fill='white'/%3e %3cpath d='M35.8899 92.997C30.5769 83.794 24.3319 74.135 17.1539 64.02C5.91758 83.4774 0.00184652 105.55 0.00146486 128.019C0.0010832 150.488 5.91607 172.56 17.1517 192.018C28.3874 211.476 44.5477 227.633 64.0078 238.864C83.468 250.096 105.542 256.006 128.011 256.001C139.791 239.478 147.791 227.564 152.007 220.261C160.106 206.233 170.58 186.149 183.43 160.01V159.995C177.816 169.728 169.738 177.812 160.009 183.433C150.28 189.054 139.242 192.014 128.006 192.016C116.77 192.017 105.732 189.06 96.0007 183.443C86.2699 177.825 78.1897 169.744 72.5729 160.012C55.1199 127.464 42.8929 105.125 35.8899 92.997Z' fill='%23229342'/%3e %3cpath d='M128.008 255.996C144.818 255.999 161.463 252.69 176.993 246.258C192.524 239.826 206.635 230.398 218.52 218.511C230.406 206.625 239.834 192.513 246.265 176.983C252.696 161.452 256.004 144.806 256 127.997C255.996 105.528 250.077 83.4559 238.837 64C214.589 61.61 196.694 60.415 185.151 60.415C172.063 60.415 153.012 61.61 127.999 64L127.985 64.01C139.221 64.0047 150.261 66.9581 159.994 72.5732C169.727 78.1882 177.809 86.267 183.429 95.997C189.049 105.727 192.007 116.766 192.007 128.002C192.007 139.239 189.048 150.277 183.428 160.007L128.008 255.996Z' fill='%23FBC116'/%3e %3cpath d='M128.003 178.677C155.987 178.677 178.672 155.992 178.672 128.007C178.672 100.021 155.987 77.337 128.002 77.337C100.019 77.337 77.333 100.023 77.333 128.007C77.333 155.991 100.019 178.677 128.003 178.677Z' fill='%231A73E8'/%3e %3cpath d='M128.003 64.004H238.84C227.609 44.5436 211.452 28.3832 191.994 17.1478C172.535 5.91242 150.462 -0.00185573 127.993 -0.0003354C105.524 0.00118493 83.4518 5.91844 63.9952 17.1564C44.5386 28.3944 28.3837 44.557 17.155 64.019L72.574 160.009L72.589 160.017C66.9666 150.289 64.0047 139.251 64.0014 128.015C63.9981 116.779 66.9535 105.739 72.5702 96.0076C78.1869 86.2758 86.2671 78.1945 95.998 72.5764C105.729 66.9582 116.768 64.0013 128.004 64.003L128.003 64.004Z' fill='%23E33B2E'/%3e %3c/g%3e %3cdefs%3e %3cclipPath id='clip0_2693_4913'%3e %3crect width='256' height='256' fill='white'/%3e %3c/clipPath%3e %3c/defs%3e %3c/svg%3e\"","module.exports = \"data:image/svg+xml,%3csvg width='110' height='110' viewBox='0 0 110 110' fill='none' xmlns='http://www.w3.org/2000/svg'%3e %3cpath d='M0.00745909 26.3991C0.00745909 11.815 11.8292 0 26.4048 0H83.6027C98.1857 0 110 11.8225 110 26.3991V83.6009C110 98.185 98.1783 110 83.6027 110H26.2704C11.762 110 0 98.2372 0 83.7278V26.3917L0.00745909 26.3991Z' fill='url(%23paint0_linear_2187_113375)'/%3e %3cpath d='M6.35721 29.6979C6.35721 16.8006 16.8131 6.34399 29.7095 6.34399H80.31C93.2064 6.34399 103.662 16.8006 103.662 29.6979V80.3018C103.662 93.1991 93.2064 103.656 80.31 103.656H29.5901C16.7534 103.656 6.34974 93.2513 6.34974 80.4138V29.6904L6.35721 29.6979Z' fill='black'/%3e %3cpath d='M12.6995 32.9969C12.6995 21.7789 21.7896 12.6881 33.0068 12.6881H77.0098C88.227 12.6881 97.3171 21.7789 97.3171 32.9969V77.0029C97.3171 88.2208 88.227 97.3116 77.0098 97.3116H32.9098C21.7523 97.3116 12.7069 88.2656 12.7069 77.0999V32.9969H12.6995Z' fill='white'/%3e %3cpath d='M45.7361 59.2219C49.8786 52.0466 48.6935 43.6066 43.0892 40.3708C37.485 37.1349 29.5838 40.3286 25.4414 47.5039C21.2989 54.6793 22.484 63.1192 28.0882 66.355C33.6925 69.5909 41.5937 66.3973 45.7361 59.2219Z' fill='black'/%3e %3cpath d='M41.3015 52.747C43.7375 52.747 45.7123 50.7721 45.7123 48.3359C45.7123 45.8998 43.7375 43.9249 41.3015 43.9249C38.8656 43.9249 36.8908 45.8998 36.8908 48.3359C36.8908 50.7721 38.8656 52.747 41.3015 52.747Z' fill='white'/%3e %3cpath d='M82.1606 66.4148C87.7649 63.1789 88.9499 54.739 84.8075 47.5636C80.6651 40.3883 72.7639 37.1947 67.1596 40.4305C61.5554 43.6663 60.3703 52.1063 64.5127 59.2817C68.6551 66.457 76.5564 69.6506 82.1606 66.4148Z' fill='black'/%3e %3cpath d='M68.9501 52.814C71.3861 52.814 73.3608 50.8392 73.3608 48.403C73.3608 45.9669 71.3861 43.9919 68.9501 43.9919C66.5141 43.9919 64.5393 45.9669 64.5393 48.403C64.5393 50.8392 66.5141 52.814 68.9501 52.814Z' fill='white'/%3e %3cpath d='M55.1234 71.4422C55.1234 71.4422 51.9739 71.3153 50.8469 72.1213C49.72 72.9274 49.7946 74.1739 49.7946 74.1739C49.7946 74.1739 49.6454 75.4501 50.0185 76.2786C50.3917 77.1071 52.5784 76.9653 53.6531 78.8088C53.6531 78.8088 54.6382 79.1447 55.1234 79.0477' fill='black'/%3e %3cpath d='M55.1234 71.4422C55.1234 71.4422 58.273 71.3154 59.4 72.1215C60.5269 72.9276 60.4523 74.174 60.4523 74.174C60.4523 74.174 60.6015 75.4503 60.2284 76.2788C59.8552 77.1073 57.6685 76.9655 56.5938 78.809C56.5938 78.809 55.6085 79.1447 55.1234 79.0477' fill='black'/%3e %3cdefs%3e %3clinearGradient id='paint0_linear_2187_113375' x1='55' y1='0' x2='55' y2='123.049' gradientUnits='userSpaceOnUse'%3e %3cstop stop-color='%235EA6FF'/%3e %3cstop offset='1' stop-color='%235EA6FF' stop-opacity='0.4'/%3e %3c/linearGradient%3e %3c/defs%3e %3c/svg%3e\"","module.exports = \"data:image/svg+xml,%3csvg width='102' height='102' viewBox='0 0 102 102' fill='none' xmlns='http://www.w3.org/2000/svg'%3e %3cpath d='M0.588318 24.7776C0.588318 11.4114 11.4245 0.574471 24.7898 0.574471H77.2303C90.5956 0.574471 101.432 11.4114 101.432 24.7776V77.2216C101.432 90.5879 90.5956 101.425 77.2303 101.425H24.6661C11.3626 101.425 0.580574 90.6421 0.580574 77.3377V24.7699L0.588318 24.7776Z' fill='black'/%3e %3cpath d='M7.16116 28.1969C7.16116 16.571 16.5819 7.14962 28.207 7.14962H73.81C85.4351 7.14962 94.8558 16.571 94.8558 28.1969V73.8031C94.8558 85.4289 85.4351 94.8503 73.81 94.8503H28.1064C16.5432 94.8503 7.16888 85.4754 7.16888 73.9036V28.1969H7.16116Z' fill='white'/%3e %3cpath d='M41.3992 55.3756C45.6922 47.9393 44.4641 39.1924 38.656 35.8389C32.848 32.4854 24.6595 35.7952 20.3664 43.2315C16.0734 50.6678 17.3015 59.4146 23.1095 62.7681C28.9176 66.1216 37.1061 62.8119 41.3992 55.3756Z' fill='black'/%3e %3cpath d='M36.8035 48.6653C39.3281 48.6653 41.3747 46.6185 41.3747 44.0938C41.3747 41.569 39.3281 39.5223 36.8035 39.5223C34.279 39.5223 32.2324 41.569 32.2324 44.0938C32.2324 46.6185 34.279 48.6653 36.8035 48.6653Z' fill='white'/%3e %3cpath d='M79.1483 62.83C84.9563 59.4765 86.1845 50.7297 81.8914 43.2934C77.5984 35.8571 69.4098 32.5473 63.6018 35.9009C57.7937 39.2544 56.5656 48.0012 60.8586 55.4375C65.1517 62.8738 73.3402 66.1835 79.1483 62.83Z' fill='black'/%3e %3cpath d='M65.4573 48.7345C67.9819 48.7345 70.0284 46.6878 70.0284 44.1631C70.0284 41.6383 67.9819 39.5916 65.4573 39.5916C62.9327 39.5916 60.8861 41.6383 60.8861 44.1631C60.8861 46.6878 62.9327 48.7345 65.4573 48.7345Z' fill='white'/%3e %3cpath d='M51.1279 68.0401C51.1279 68.0401 47.8639 67.9086 46.6959 68.7439C45.528 69.5793 45.6054 70.8711 45.6054 70.8711C45.6054 70.8711 45.4506 72.1938 45.8374 73.0524C46.2241 73.911 48.4904 73.7641 49.6041 75.6746C49.6041 75.6746 50.6251 76.0227 51.1279 75.9222' fill='black'/%3e %3cpath d='M51.1279 68.0401C51.1279 68.0401 54.392 67.9084 55.5599 68.7438C56.7278 69.5792 56.6505 70.8709 56.6505 70.8709C56.6505 70.8709 56.8052 72.1936 56.4185 73.0522C56.0317 73.9108 53.7655 73.7639 52.6517 75.6744C52.6517 75.6744 51.6306 76.0227 51.1279 75.9222' fill='black'/%3e %3c/svg%3e\"","module.exports = \"data:image/svg+xml,%3csvg width='18' height='19' viewBox='0 0 18 19' fill='none' xmlns='http://www.w3.org/2000/svg'%3e %3cpath d='M4.75 3C4.55109 3 4.36032 3.07902 4.21967 3.21967C4.07902 3.36032 4 3.55109 4 3.75V8.25C4 8.664 4.336 9 4.75 9H10.25C10.4489 9 10.6397 8.92098 10.7803 8.78033C10.921 8.63968 11 8.44891 11 8.25V3.75C11 3.55109 10.921 3.36032 10.7803 3.21967C10.6397 3.07902 10.4489 3 10.25 3H4.75ZM5.5 7.5V4.5H9.5V7.5H5.5ZM3.75 0C3.02065 0 2.32118 0.289731 1.80546 0.805456C1.28973 1.32118 1 2.02065 1 2.75V17.5H0.75C0.551088 17.5 0.360322 17.579 0.21967 17.7197C0.0790175 17.8603 0 18.0511 0 18.25C0 18.4489 0.0790175 18.6397 0.21967 18.7803C0.360322 18.921 0.551088 19 0.75 19H14.25C14.4489 19 14.6397 18.921 14.7803 18.7803C14.921 18.6397 15 18.4489 15 18.25C15 18.0511 14.921 17.8603 14.7803 17.7197C14.6397 17.579 14.4489 17.5 14.25 17.5H14V15.697C14.4185 15.9121 14.8853 16.0161 15.3555 15.9988C15.8258 15.9816 16.2837 15.8438 16.6853 15.5986C17.087 15.3534 17.4188 15.0091 17.649 14.5987C17.8793 14.1883 18.0001 13.7256 18 13.255V7.417C18 6.82198 17.807 6.24301 17.45 5.767L16.35 4.3C16.2307 4.14087 16.053 4.03567 15.8561 4.00754C15.6592 3.97941 15.4591 4.03065 15.3 4.15C15.1409 4.26935 15.0357 4.44702 15.0075 4.64393C14.9794 4.84085 15.0307 5.04087 15.15 5.2L16.25 6.667C16.412 6.883 16.5 7.147 16.5 7.417V13.255C16.5 13.4185 16.4678 13.5804 16.4052 13.7314C16.3427 13.8825 16.251 14.0197 16.1353 14.1353C16.0197 14.251 15.8825 14.3427 15.7314 14.4052C15.5804 14.4678 15.4185 14.5 15.255 14.5C15.0915 14.5 14.9296 14.4678 14.7786 14.4052C14.6275 14.3427 14.4903 14.251 14.3747 14.1353C14.259 14.0197 14.1673 13.8825 14.1048 13.7314C14.0422 13.5804 14.01 13.4185 14.01 13.255V11.5C14.0099 11.4595 14.0066 11.419 14 11.379V2.75C14 2.38886 13.9289 2.03127 13.7907 1.69762C13.6525 1.36398 13.4499 1.06082 13.1945 0.805456C12.9392 0.550095 12.636 0.347532 12.3024 0.209331C11.9687 0.0711308 11.6111 0 11.25 0H3.75ZM12.5 17.5H2.5V2.75C2.5 2.06 3.06 1.5 3.75 1.5H11.25C11.94 1.5 12.5 2.06 12.5 2.75V17.5Z' fill='white'/%3e %3c/svg%3e\"","module.exports = \"data:image/svg+xml,%3csvg width='38' height='38' viewBox='0 0 38 38' fill='none' xmlns='http://www.w3.org/2000/svg'%3e %3ccircle cx='19' cy='19' r='19' fill='%23334761'/%3e %3cpath d='M22 13H16' stroke='%235EA6FF' stroke-opacity='0.8' stroke-width='0.5' stroke-linecap='round' stroke-linejoin='round'/%3e %3cpath d='M16.2426 23.2426L12 19' stroke='%235EA6FF' stroke-opacity='0.8' stroke-width='0.5' stroke-linecap='round' stroke-linejoin='round'/%3e %3cpath d='M22.7574 23.2426L27 19' stroke='%235EA6FF' stroke-opacity='0.8' stroke-width='0.5' stroke-linecap='round' stroke-linejoin='round'/%3e %3cpath d='M5.20703 10.7102C6.6068 11.3974 7.95568 12.0718 9.35545 12.7971' stroke='%235EA6FF' stroke-opacity='0.8' stroke-width='0.5' stroke-linecap='round' stroke-linejoin='round'/%3e %3cpath d='M24.207 10.7102C25.6068 11.3974 26.9557 12.0718 28.3555 12.7971' stroke='%235EA6FF' stroke-opacity='0.8' stroke-width='0.5' stroke-linecap='round' stroke-linejoin='round'/%3e %3cpath d='M15.207 26.7102C16.6068 27.3974 17.9557 28.0718 19.3555 28.7971' stroke='%235EA6FF' stroke-opacity='0.8' stroke-width='0.5' stroke-linecap='round' stroke-linejoin='round'/%3e %3cpath d='M9.35547 12.7843L13.7838 10.2393' stroke='%235EA6FF' stroke-opacity='0.8' stroke-width='0.5' stroke-linecap='round' stroke-linejoin='round'/%3e %3cpath d='M28.3555 12.7843L32.7838 10.2393' stroke='%235EA6FF' stroke-opacity='0.8' stroke-width='0.5' stroke-linecap='round' stroke-linejoin='round'/%3e %3cpath d='M19.3555 28.7843L23.7838 26.2393' stroke='%235EA6FF' stroke-opacity='0.8' stroke-width='0.5' stroke-linecap='round' stroke-linejoin='round'/%3e %3cpath d='M9.41846 12.7719C9.41846 14.4007 9.41846 17.6583 9.41846 17.6583' stroke='%235EA6FF' stroke-opacity='0.8' stroke-width='0.5' stroke-linecap='round' stroke-linejoin='round'/%3e %3cpath d='M28.4185 12.7719C28.4185 14.4007 28.4185 17.6583 28.4185 17.6583' stroke='%235EA6FF' stroke-opacity='0.8' stroke-width='0.5' stroke-linecap='round' stroke-linejoin='round'/%3e %3cpath d='M19.4185 28.7719C19.4185 30.4007 19.4185 33.6583 19.4185 33.6583' stroke='%235EA6FF' stroke-opacity='0.8' stroke-width='0.5' stroke-linecap='round' stroke-linejoin='round'/%3e %3cpath d='M13.9111 10.1506C13.9661 10.9428 13.9661 11.7379 13.9111 12.5302V14.6171C13.9111 14.7953 13.9111 14.9989 13.7966 15.1261C13.6821 15.2534 13.453 15.317 13.2876 15.4188C12.9058 15.6224 12.5368 15.8387 12.1678 16.0551C11.7987 16.2714 9.49546 17.6966 9.38093 17.7221C9.0233 17.6081 8.68132 17.45 8.36292 17.2512L7.26855 16.7168C6.74681 16.4495 6.22508 16.1696 5.69062 15.9151C5.48858 15.8305 5.29653 15.7238 5.11799 15.597C5.03754 15.4494 5.00634 15.28 5.02891 15.1134C5.02891 14.8334 5.02891 13.3828 5.02891 12.9501C4.99036 12.1913 4.99036 11.4311 5.02891 10.6723C5.02891 10.456 5.70335 10.1633 6.00875 9.98513L7.1922 9.27252C7.94915 8.73859 8.77543 8.31046 9.64816 8C10.4001 8.22112 11.1223 8.53307 11.7987 8.92894C12.5612 9.22561 13.2737 9.63762 13.9111 10.1506Z' stroke='%235EA6FF' stroke-opacity='0.8' stroke-width='0.5' stroke-linecap='round' stroke-linejoin='round'/%3e %3cpath d='M32.9111 10.1506C32.9661 10.9428 32.9661 11.7379 32.9111 12.5302V14.6171C32.9111 14.7953 32.9111 14.9989 32.7966 15.1261C32.6821 15.2534 32.453 15.317 32.2876 15.4188C31.9058 15.6224 31.5368 15.8387 31.1678 16.0551C30.7987 16.2714 28.4955 17.6966 28.3809 17.7221C28.0233 17.6081 27.6813 17.45 27.3629 17.2512L26.2685 16.7168C25.7468 16.4495 25.2251 16.1696 24.6906 15.9151C24.4886 15.8305 24.2965 15.7238 24.118 15.597C24.0375 15.4494 24.0063 15.28 24.0289 15.1134C24.0289 14.8334 24.0289 13.3828 24.0289 12.9501C23.9904 12.1913 23.9904 11.4311 24.0289 10.6723C24.0289 10.456 24.7033 10.1633 25.0088 9.98513L26.1922 9.27252C26.9491 8.73859 27.7754 8.31046 28.6482 8C29.4001 8.22112 30.1223 8.53307 30.7987 8.92894C31.5612 9.22561 32.2737 9.63762 32.9111 10.1506Z' stroke='%235EA6FF' stroke-opacity='0.8' stroke-width='0.5' stroke-linecap='round' stroke-linejoin='round'/%3e %3cpath d='M23.9111 26.1506C23.9661 26.9428 23.9661 27.7379 23.9111 28.5302V30.6171C23.9111 30.7953 23.9111 30.9989 23.7966 31.1261C23.6821 31.2534 23.453 31.317 23.2876 31.4188C22.9058 31.6224 22.5368 31.8387 22.1678 32.0551C21.7987 32.2714 19.4955 33.6966 19.3809 33.7221C19.0233 33.6081 18.6813 33.45 18.3629 33.2512L17.2685 32.7168C16.7468 32.4495 16.2251 32.1696 15.6906 31.9151C15.4886 31.8305 15.2965 31.7238 15.118 31.597C15.0375 31.4494 15.0063 31.28 15.0289 31.1134C15.0289 30.8334 15.0289 29.3828 15.0289 28.9501C14.9904 28.1913 14.9904 27.4311 15.0289 26.6723C15.0289 26.456 15.7033 26.1633 16.0088 25.9851L17.1922 25.2725C17.9491 24.7386 18.7754 24.3105 19.6482 24C20.4001 24.2211 21.1223 24.5331 21.7987 24.9289C22.5612 25.2256 23.2737 25.6376 23.9111 26.1506Z' stroke='%235EA6FF' stroke-opacity='0.8' stroke-width='0.5' stroke-linecap='round' stroke-linejoin='round'/%3e %3c/svg%3e\"","module.exports = \"data:image/svg+xml,%3csvg width='40' height='41' viewBox='0 0 40 41' fill='none' xmlns='http://www.w3.org/2000/svg'%3e %3crect y='0.5' width='40' height='40' rx='20' fill='%235EA6FF' fill-opacity='0.3'/%3e %3cpath d='M25.25 16.9V16.375C25.25 14.0219 21.7063 12.25 17 12.25C12.2937 12.25 8.75 14.0219 8.75 16.375V20.125C8.75 22.0844 11.2063 23.6406 14.75 24.1094V24.625C14.75 26.9781 18.2937 28.75 23 28.75C27.7063 28.75 31.25 26.9781 31.25 24.625V20.875C31.25 18.9344 28.8687 17.3781 25.25 16.9ZM29.75 20.875C29.75 22.1125 26.8625 23.5 23 23.5C22.6531 23.5 22.3062 23.4906 21.9594 23.4625C23.9844 22.7313 25.25 21.5312 25.25 20.125V18.4094C28.0531 18.8312 29.75 19.9656 29.75 20.875ZM14.75 22.5812V20.3594C15.4961 20.4553 16.2477 20.5022 17 20.5C17.7523 20.5022 18.5039 20.4553 19.25 20.3594V22.5812C18.5057 22.6972 17.7533 22.7537 17 22.75C16.2467 22.7537 15.4943 22.6972 14.75 22.5812V22.5812ZM23.75 18.8031V20.125C23.75 20.9125 22.5875 21.7562 20.75 22.2719V20.0781C21.9594 19.7875 22.9813 19.3469 23.75 18.8031V18.8031ZM17 13.75C20.8625 13.75 23.75 15.1375 23.75 16.375C23.75 17.6125 20.8625 19 17 19C13.1375 19 10.25 17.6125 10.25 16.375C10.25 15.1375 13.1375 13.75 17 13.75ZM10.25 20.125V18.8031C11.0187 19.3469 12.0406 19.7875 13.25 20.0781V22.2719C11.4125 21.7562 10.25 20.9125 10.25 20.125ZM16.25 24.625V24.2313L17 24.25C17.3688 24.25 17.725 24.2406 18.0688 24.2219C18.4438 24.3531 18.8375 24.4656 19.25 24.5687V26.7719C17.4125 26.2562 16.25 25.4125 16.25 24.625V24.625ZM20.75 27.0812V24.85C21.496 24.9479 22.2476 24.998 23 25C23.7523 25.0022 24.5039 24.9553 25.25 24.8594V27.0812C23.7584 27.3062 22.2416 27.3062 20.75 27.0812V27.0812ZM26.75 26.7719V24.5781C27.9594 24.2875 28.9813 23.8469 29.75 23.3031V24.625C29.75 25.4125 28.5875 26.2562 26.75 26.7719V26.7719Z' fill='%235EA6FF' fill-opacity='0.5'/%3e %3c/svg%3e\"","module.exports = \"data:image/svg+xml,%3csvg viewBox='0 0 126.61 126.61' xmlns='http://www.w3.org/2000/svg'%3e%3cg fill='%23f3ba2f'%3e%3cpath d='m38.73 53.2 24.59-24.58 24.6 24.6 14.3-14.31-38.9-38.91-38.9 38.9z'/%3e%3cpath d='m0 63.31 14.3-14.31 14.31 14.31-14.31 14.3z'/%3e%3cpath d='m38.73 73.41 24.59 24.59 24.6-24.6 14.31 14.29-38.9 38.91-38.91-38.88z'/%3e%3cpath d='m98 63.31 14.3-14.31 14.31 14.3-14.31 14.32z'/%3e%3cpath d='m77.83 63.3-14.51-14.52-10.73 10.73-1.24 1.23-2.54 2.54 14.51 14.5 14.51-14.47z'/%3e%3c/g%3e%3c/svg%3e\"","module.exports = \"data:image/svg+xml,%3c!-- - Copyright (C) CEDE Labs, SAS - All Rights Reserved - Unauthorized copying of this file, via any medium is strictly prohibited - Proprietary and confidential - Written by CEDE Labs team %3cteam@cedelabs.io%3e, September 2021 --%3e %3csvg viewBox='0 0 104 103' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='m3.94 88.41c4.79 5.08 31.13 29.42 72.47 1.17 29.9-23.28 29.15-73.75 26.28-89-1 2.22-35.69 78.26-98.75 87.83zm98.75-87.84c-.37-.15-38.83-5.39-76.85 19.1-23.61 15.2-26.74 37.46-25.66 52.33 55.27-6.22 101.25-69.68 102.51-71.43z' fill='%2397c554'/%3e%3cpath d='m102.69.57c-.37-.15-38.83-5.39-76.85 19.1-23.61 15.2-26.74 37.46-25.66 52.33 55.27-6.22 101.25-69.68 102.51-71.43z' fill='%23709b30'/%3e%3c/svg%3e\"","module.exports = \"data:image/svg+xml,%3csvg xmlns:xodm='http://www.corel.com/coreldraw/odm/2003' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' version='1.1' id='Layer_1' x='0px' y='0px' viewBox='0 0 2500 2500' style='enable-background:new 0 0 2500 2500;' xml:space='preserve'%3e %3cstyle type='text/css'%3e .st0%7bfill-rule:evenodd;clip-rule:evenodd;fill:%231DA2B4;%7d .st1%7bfill-rule:evenodd;clip-rule:evenodd;fill:%23FFFFFF;%7d %3c/style%3e %3cg id='Layer_x0020_1'%3e %3cg id='_2806038301888'%3e %3ccircle class='st0' cx='1250' cy='1250' r='1250'%3e%3c/circle%3e %3cg%3e %3cpath class='st1' d='M925,415c22-24,54-37,86-37h212c27,0,41,32,22,51L826,876h231l235,249H826l466,499h-282c-33,0-64-14-86-37 l-473-506c-42-45-42-115,0-160l473-506H925z'%3e%3c/path%3e %3cpath class='st1' d='M1575,2085c-22,24-54,37-86,37h-212c-27,0-41-32-22-51l419-447h-231l-235-249h466l-466-499h282 c33,0,64,14,86,37l473,506c42,45,42,115,0,160l-473,506H1575z'%3e%3c/path%3e %3c/g%3e %3c/g%3e %3c/g%3e %3c/svg%3e\"","module.exports = \"data:image/svg+xml,%3csvg width='249' height='249' viewBox='0 0 249 249' fill='none' xmlns='http://www.w3.org/2000/svg'%3e %3ccircle cx='124.5' cy='124.5' r='124.5' fill='%230A0B0B'/%3e %3cpath d='M169.4 56.8C159.1 48.3 145 44.1 127 44.1H82.2V50.4H126.2C141.5 50.4 155.3 53.5 163.8 60.9C172.3 68.3 178.6 79.1 178.6 92.5C178.6 105.5 173 115 164.3 122.3C155.6 129.6 139.8 132.8 124.1 132.8H73.6V139.1H124.5C143.4 139.1 158.2 135 168.9 126.8C179.5 118.6 184.9 107 184.9 92.1C184.9 76.9 179.7 65.2 169.4 56.8Z' fill='white'/%3e %3cpath d='M165.6 65.8C159.2 60.9 151.9 57 131.1 57H96.5V63.1C96.5 63.1 112 62.9 130.3 63.1C148 63.3 154.5 65.3 160.5 69.7C168.1 75.3 172.9 82.3 172.9 92C172.9 101.4 168.1 108 160.4 113.7C152.6 119.5 140.6 119.5 135.7 119.7C133.9 119.7 110 119.7 110 119.7V125.8C110 125.8 121.8 126 129.2 125.8C146 125.4 156 124.4 165.3 117.5C174 111 178.6 102.5 178.6 91.7C178.6 77.5 171.4 70.4 165.6 65.8Z' fill='white'/%3e %3cpath d='M162.5 73.9C157.7 70.9 153.5 68.9 133.6 68.9H108.7V72.9H132.9C150.5 72.9 157.1 76 159.2 77.3C163.2 79.7 168.4 83.7 168.4 91.7C168.4 96.8 165.4 103.3 160.9 105.8C156.8 108.1 149.3 110.2 136.2 110.2H55V114.2H136.4C152.3 114.2 157.7 112.4 163.3 109.3C168.9 106.2 172.7 99.8 172.7 91.7C172.7 82.5 167.6 77.1 162.5 73.9Z' fill='white'/%3e %3cpath d='M178.3 118.2C168 109.7 153.9 105.5 135.9 105.5H105.9V111.8H135C150.3 111.8 164.1 115 172.6 122.3C181.1 129.6 187.5 140.5 187.5 153.9C187.5 166.9 182 176.4 173.2 183.7C164.4 191 148.7 194.2 133 194.2H82.5V200.5H133.4C152.3 200.5 167.1 196.4 177.8 188.2C188.5 180 193.8 168.4 193.8 153.5C193.7 138.4 188.6 126.7 178.3 118.2Z' fill='white'/%3e %3cpath d='M174.5 127.2C168.1 122.4 160.8 118.4 140 118.4H93V124.5C93 124.5 120.9 124.3 139.2 124.5C156.9 124.7 163.4 126.7 169.4 131.1C177 136.7 181.8 143.7 181.8 153.4C181.8 162.8 177 169.4 169.3 175.1C161.5 180.9 149.5 180.9 144.6 181.1C142.8 181.1 118.9 181.1 118.9 181.1V187.2C118.9 187.2 130.8 187.4 138.1 187.2C154.9 186.8 164.9 185.8 174.2 178.9C182.9 172.4 187.5 163.9 187.5 153.1C187.5 139 180.4 131.8 174.5 127.2Z' fill='white'/%3e %3cpath d='M103 148H147.1V144.6H103V148Z' fill='white'/%3e %3cpath d='M121.2 159.9H146.8V157H121.2V159.9Z' fill='white'/%3e %3cpath d='M82.5 148H95.5V144.6H82.5V148Z' fill='white'/%3e %3cpath d='M74.3 160.1H114V156.7H74.3V160.1Z' fill='white'/%3e %3cpath d='M84.1 72.6H99.6V69.8H84.1V72.6Z' fill='white'/%3e %3cpath d='M73.4 95.4H108.7V92.2H73.4V95.4Z' fill='white'/%3e %3cpath d='M74.3 186.8H111.6V182.8H74.3V186.8Z' fill='white'/%3e %3cpath d='M65.1 200.1H74.4V194.2H65.1V200.1Z' fill='white'/%3e %3cpath d='M88.3 85.4H146.9V82.2H88.3V85.4Z' fill='white'/%3e %3cpath d='M117.6 95.4H145.8V92.2H117.6V95.4Z' fill='white'/%3e %3cpath d='M171.4 135.9C166.6 133 162.4 131 142.5 131H110.9V134.9H141.9C159.5 134.9 166.2 137.9 168.2 139.1C172.1 141.4 177.4 145.2 177.4 153C177.4 158 174.4 164.2 169.9 166.6C165.8 168.8 158.3 170.8 145.2 170.8H63.9V174.7H145.3C161.2 174.7 166.6 173 172.2 170C177.8 167 181.5 160.9 181.5 153C181.6 144.3 176.5 139.1 171.4 135.9Z' fill='white'/%3e %3c/svg%3e\"","module.exports = \"data:image/svg+xml,%3csvg viewBox='0 0 446.4 446.4' xmlns='http://www.w3.org/2000/svg'%3e%3cg fill='%23149f49' fill-rule='evenodd'%3e%3cpath d='m249.84 197.5c-7.78-1.23-15.77-.8-23.62-.87-11.66 0-23.32.15-34.92-.07q-.21 31.65 0 63.29c14-.15 27.94-.07 41.91-.07 7.41 0 15 .28 22.1-2.38a30.07 30.07 0 0 0 19.23-21.82c1.65-8.35.79-17.49-4-24.69-4.54-7.2-12.49-11.74-20.7-13.39z'/%3e%3cpath d='m223.2 0c-123.27 0-223.2 99.93-223.2 223.2s99.93 223.2 223.2 223.2 223.2-99.93 223.2-223.2-99.93-223.2-223.2-223.2zm-93 262.3c11.88.21 23.25-7.35 28.15-18.08a33.23 33.23 0 0 0 2.88-16.05c.5-10.66-4.68-21.53-13.75-27.36-5-3.6-11.16-5-17.21-5.4-.07-8.43 0-16.78-.07-25.13 8.71.36 17.2-3.67 23-10.08a31.86 31.86 0 0 0 8-23c-1-10.22-7-20.09-16.27-24.77-4.47-2.59-9.58-3.53-14.69-3.74-.15-9.22 0-18.36-.07-27.51 39.67-.07 79.34-.14 119.08 0 15.77 1 31.76 6.56 43.49 17.43a50.33 50.33 0 0 1 15.12 27.79c1.73 12.74.58 26.64-7.13 37.37-4.89 7.63-12.38 13.17-20.37 17.35 12.38 4.75 23.47 13.46 29.66 25.34 8.5 16.28 8.28 36.87-.86 52.78-6.27 11.16-16.78 19.58-28.51 24.48s-24.77 6.62-37.44 6.48h-113c-.03-9.33.04-18.62-.03-27.9zm186 102.88c-25.27.29-50.61.08-76 .15-36.65-.07-73.29.14-109.94-.15-.22-9.93-.22-19.94 0-29.95 38.3-.29 76.61 0 115-.07 23.62.07 47.31-.22 70.92.07.19 10.01.19 20.02-.03 29.95z'/%3e%3cpath d='m229.18 169.2c6.26-.14 12.6.58 18.64-1.37 9.94-2.81 18.87-11.09 20.45-21.6 1.44-8.64-.21-18.21-6.26-24.84-6.41-7.13-16.35-10.58-25.78-10.22h-45.07c.07 19.37.07 38.66 0 58z'/%3e%3c/g%3e%3cpath d='m243.22 290.16c12.67.14 25.7-1.44 37.44-6.48s22.24-13.32 28.51-24.48c9.14-15.91 9.36-36.5.86-52.78-6.19-11.88-17.28-20.59-29.66-25.34 8-4.18 15.48-9.72 20.37-17.35 7.71-10.73 8.86-24.63 7.13-37.37a50.33 50.33 0 0 0 -15.12-27.79c-11.75-10.87-27.75-16.42-43.49-17.43-39.74-.14-79.41-.07-119.08 0 .07 9.15-.08 18.29.07 27.51 5.11.21 10.22 1.15 14.69 3.74 9.28 4.68 15.26 14.55 16.27 24.77a31.86 31.86 0 0 1 -8 23c-5.84 6.41-14.33 10.44-23 10.08.07 8.35 0 16.7.07 25.13 6.05.43 12.24 1.8 17.21 5.4 9.07 5.83 14.25 16.7 13.75 27.36a33.23 33.23 0 0 1 -2.88 16.05c-4.9 10.73-16.27 18.29-28.15 18.08.07 9.28 0 18.57 0 27.86zm31.32-54.58a30.07 30.07 0 0 1 -19.23 21.82c-7.05 2.66-14.69 2.38-22.1 2.38-14 0-27.94-.08-41.91.07q-.21-31.65 0-63.29c11.6.22 23.26.07 34.92.07 7.85.07 15.84-.36 23.62.87 8.21 1.65 16.13 6.19 20.66 13.39 4.83 7.2 5.69 16.34 4.04 24.69zm-83.38-124.41h45.07c9.43-.36 19.37 3.09 25.78 10.22 6.05 6.63 7.7 16.2 6.26 24.84-1.58 10.51-10.51 18.79-20.45 21.6-6 1.95-12.38 1.23-18.64 1.37h-38c.05-19.37.05-38.66-.02-58.03z' fill='%23fff'/%3e%3cpath d='m245.23 335.16c-38.37.07-76.68-.22-115 .07-.22 10-.22 20 0 29.95 36.65.29 73.29.08 109.94.15 25.35-.07 50.69.14 76-.15.22-9.93.22-19.94 0-29.95-23.63-.29-47.32 0-70.94-.07z' fill='%2373c692'/%3e%3c/svg%3e\"","module.exports = \"data:image/svg+xml,%3csvg width='1080' height='1080' viewBox='0 0 1080 1080' fill='none' xmlns='http://www.w3.org/2000/svg'%3e %3cg clip-path='url(%23clip0_1_13)'%3e %3crect width='1080' height='1080' fill='black' fill-opacity='0.9'/%3e %3cpath d='M736.191 580.17V374.586H777.514V580.17H736.191Z' fill='%23F7A600'/%3e %3cpath d='M254.589 641.237H166V435.654H251.027C292.35 435.654 316.429 458.175 316.429 493.404C316.429 516.207 300.965 530.944 290.261 535.851C303.037 541.623 319.391 554.613 319.391 582.057C319.391 620.446 292.35 641.237 254.589 641.237ZM247.756 471.464H207.323V518.818H247.756C265.293 518.818 275.105 509.288 275.105 495.133C275.105 480.995 265.293 471.464 247.756 471.464ZM250.428 554.912H207.323V605.442H250.428C269.162 605.442 278.068 593.899 278.068 580.028C278.068 566.172 269.146 554.912 250.428 554.912Z' fill='white'/%3e %3cpath d='M445.432 556.925V641.237H404.4V556.925L340.78 435.654H385.665L425.207 518.519L464.151 435.654H509.036L445.432 556.925Z' fill='white'/%3e %3cpath d='M626.19 641.237H537.601V435.654H622.628C663.951 435.654 688.029 458.175 688.029 493.404C688.029 516.207 672.565 530.944 661.862 535.851C674.638 541.623 690.993 554.613 690.993 582.057C690.993 620.446 663.951 641.237 626.19 641.237ZM619.357 471.464H578.924V518.818H619.357C636.894 518.818 646.706 509.288 646.706 495.133C646.706 480.995 636.894 471.464 619.357 471.464ZM622.029 554.912H578.924V605.442H622.029C640.763 605.442 649.669 593.899 649.669 580.028C649.669 566.172 640.763 554.912 622.029 554.912Z' fill='white'/%3e %3cpath d='M910.699 471.464V641.253H869.376V471.464H814.078V435.654H965.996V471.464H910.699Z' fill='white'/%3e %3c/g%3e %3cdefs%3e %3cclipPath id='clip0_1_13'%3e %3crect width='1080' height='1080' fill='white'/%3e %3c/clipPath%3e %3c/defs%3e %3c/svg%3e\"","module.exports = \"data:image/svg+xml,%3c!-- - Copyright (C) CEDE Labs, SAS - All Rights Reserved - Unauthorized copying of this file, via any medium is strictly prohibited - Proprietary and confidential - Written by CEDE Labs team %3cteam@cedelabs.io%3e, September 2021 --%3e %3csvg width='21' height='21' viewBox='0 0 21 21' fill='none' xmlns='http://www.w3.org/2000/svg'%3e %3cpath d='M10.1335 0.732758C15.6564 0.732758 20.1335 5.23976 20.1335 10.7994C20.1335 16.3591 15.6564 20.8661 10.1335 20.8661C4.6107 20.8661 0.133545 16.3591 0.133545 10.7994C0.133545 5.23976 4.6107 0.732758 10.1335 0.732758Z' fill='%231652F0'/%3e %3cpath d='M11.0554 7.65359C11.5671 7.65359 12.0789 7.76763 12.532 7.93868L13.4968 6.45228C12.6453 5.99416 11.7351 5.76609 10.7703 5.76609C7.87378 5.76609 5.71362 7.71061 5.71362 10.7994C5.77026 13.8882 7.98706 15.8328 10.8269 15.8328C11.8503 15.8328 12.5886 15.6047 13.3835 15.2036L12.4753 13.6602C12.0203 13.8312 11.5105 13.9453 10.9988 13.9453C9.2937 13.9453 7.93042 12.858 7.93042 10.7994C7.93042 8.85491 9.23706 7.65359 11.0554 7.65359Z' fill='white'/%3e %3c/svg%3e\"","module.exports = \"data:image/svg+xml,%3csvg width='600px' height='600px' viewBox='0 0 600 600' version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'%3e %3ctitle%3e编组 7%3c/title%3e %3cdefs%3e %3cpolygon id='path-1' points='0 0 600 0 600 600 0 600'%3e%3c/polygon%3e %3c/defs%3e %3cg id='换色' stroke='none' stroke-width='1' fill='none' fill-rule='evenodd'%3e %3cg id='SVG' transform='translate(-1755.000000, -5518.000000)'%3e %3cg id='编组-7' transform='translate(1755.000000, 5518.000000)'%3e %3cg id='编组'%3e %3cmask id='mask-2' fill='white'%3e %3cuse xlink:href='%23path-1'%3e%3c/use%3e %3c/mask%3e %3cg id='Clip-2'%3e%3c/g%3e %3cpath d='M300,464.998427 C208.873069,464.998427 134.996504,391.122566 134.996504,299.996504 C134.996504,208.870442 208.873069,135.000938 300,135.000938 L300,-0.000635600624 C134.310049,-0.000635600624 0,134.314489 0,299.996504 C0,465.67852 134.310049,600 300,600 C465.689951,600 600,465.67852 600,299.996504 L465.003496,299.996504 C465.003496,391.122566 391.126931,464.998427 300,464.998427' id='Fill-1' fill='%232354E6' mask='url(%23mask-2)'%3e%3c/path%3e %3c/g%3e %3cpolygon id='Fill-3' fill='%2317E6A1' points='299.992373 299.99714 464.995869 299.99714 464.995869 134.995217 299.992373 134.995217'%3e%3c/polygon%3e %3c/g%3e %3c/g%3e %3c/g%3e %3c/svg%3e\"","module.exports = \"data:image/svg+xml,%3csvg viewBox='0 0 324 324' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='m211.74 0c-57 0-105.39 43.84-111.49 100.25-56.41 6.1-100.25 54.51-100.25 111.49a112.34 112.34 0 0 0 112.26 112.26c57 0 105.58-43.84 111.49-100.25 56.41-6.1 100.25-54.51 100.25-111.49a112.34 112.34 0 0 0 -112.26-112.26zm86 124.84a87.35 87.35 0 0 1 -73.23 73.16v-73.16zm-271.44 74.32a87.35 87.35 0 0 1 73.19-73.37v73.21h-73.19zm171.91 25.35a86.9 86.9 0 0 1 -171.91 0zm.95-99.67v74.16h-74.32v-74.16zm98.54-25.35h-171.91a86.9 86.9 0 0 1 171.91 0z' fill='%2300dcfa'/%3e%3c/svg%3e\"","module.exports = \"data:image/svg+xml,%3c!-- - Copyright (C) CEDE Labs, SAS - All Rights Reserved - Unauthorized copying of this file, via any medium is strictly prohibited - Proprietary and confidential - Written by CEDE Labs team %3cteam@cedelabs.io%3e, September 2021 --%3e %3csvg enable-background='new 0 0 88 135.9' viewBox='0 0 88 135.9' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='m57.8 41.8c0-19.5-9.4-36.3-16.6-41.8 0 0-.5-.3-.5.5-.6 37.7-19.7 48-30.3 61.7-24.3 31.8-1.7 66.6 21.3 73 12.9 3.6-3-6.4-5-27.4-2.4-25.5 31.1-44.9 31.1-66' fill='%23282e5b'/%3e%3cpath d='m70.4 54.7c-.1-.1-.3-.1-.5 0 0 0 0 0-.1.1-.4 4.7-5.6 14.9-12.1 24.2-22.1 31.6-9.5 46.8-2.4 55 4.1 4.8 0 0 10.3-4.9.8-.4 20-10.6 22.1-33.7 2.1-22.5-12.2-36.6-17.3-40.7' fill='%23059bdc'/%3e%3c/svg%3e\"","module.exports = \"data:image/svg+xml,%3c!-- - Copyright (C) CEDE Labs, SAS - All Rights Reserved - Unauthorized copying of this file, via any medium is strictly prohibited - Proprietary and confidential - Written by CEDE Labs team %3cteam@cedelabs.io%3e, September 2021 --%3e %3csvg width='21' height='17' viewBox='0 0 21 17' fill='none' xmlns='http://www.w3.org/2000/svg'%3e %3cpath d='M9.57659 0.993065C11.3143 0.876107 13.0853 1.22698 14.6392 2.01227C16.9449 3.14843 18.7828 5.18684 19.635 7.59282C20.0193 8.66215 20.2197 9.78161 20.2197 10.9178V15.1115C20.2197 15.2786 20.2197 15.4624 20.1863 15.6295C20.0861 16.0472 19.7853 16.4315 19.3843 16.6153C19.1003 16.7489 18.7828 16.7657 18.4988 16.7155C17.8639 16.5986 17.3626 15.9971 17.3626 15.3455C17.3626 14.0422 17.3626 12.739 17.3626 11.4357C17.3793 11.0681 17.3793 10.6671 17.1788 10.3497C16.8614 9.74819 16.0594 9.46415 15.4412 9.71477C14.9065 9.89856 14.5222 10.4499 14.5055 11.018C14.5055 12.338 14.5055 13.6579 14.5055 14.9779C14.5055 15.2285 14.5222 15.4791 14.4387 15.713C14.305 16.1809 13.9207 16.5484 13.4529 16.6821C12.8347 16.8492 12.133 16.5819 11.8322 16.0138C11.615 15.6796 11.6317 15.2619 11.6484 14.8776C11.6484 13.5577 11.6484 12.2544 11.6484 10.9345C11.6317 10.2661 11.0803 9.66465 10.4287 9.58111C9.9943 9.51427 9.54318 9.66465 9.22572 9.9654C8.94168 10.2327 8.7913 10.617 8.7913 11.0013V14.8275C8.7913 15.145 8.82472 15.4791 8.70776 15.7799C8.52397 16.3312 7.9726 16.7322 7.38781 16.7155C6.78631 16.7489 6.20153 16.3312 6.01773 15.7799C5.91749 15.4958 5.93419 15.2118 5.93419 14.911C5.93419 13.5911 5.93419 12.2711 5.93419 10.9512C5.93419 10.2996 5.41624 9.69806 4.78132 9.58111C4.19653 9.46415 3.56162 9.74819 3.26087 10.2829C3.14392 10.5001 3.07708 10.7507 3.07708 11.0013V15.2953C3.07708 15.713 2.89329 16.1307 2.57583 16.3981C2.0913 16.8158 1.30601 16.8492 0.80476 16.4649C0.437178 16.2143 0.219971 15.7799 0.219971 15.3287V10.9846C0.219971 9.34719 0.637677 7.70978 1.42296 6.25616C2.05788 5.06988 2.94342 4.01726 3.99604 3.18185C5.5499 1.8786 7.53819 1.11002 9.57659 0.993065Z' fill='%235741D9'/%3e %3c/svg%3e\"","module.exports = \"data:image/svg+xml,%3c!-- - Copyright (C) CEDE Labs, SAS - All Rights Reserved - Unauthorized copying of this file, via any medium is strictly prohibited - Proprietary and confidential - Written by CEDE Labs team %3cteam@cedelabs.io%3e, September 2021 --%3e %3csvg width='16' height='17' viewBox='0 0 16 17' fill='none' xmlns='http://www.w3.org/2000/svg'%3e %3cpath fill-rule='evenodd' clip-rule='evenodd' d='M5.44333 8.42142L10.3226 13.3014L13.4021 10.2219C13.9459 9.67791 14.8282 9.67805 15.3721 10.2219C15.916 10.7658 15.9161 11.6479 15.3721 12.1918L11.3076 16.2563C10.7661 16.7976 9.87408 16.7927 9.33773 16.2563L3.47469 10.3925L3.47459 13.8785C3.47459 14.6438 2.84695 15.2716 2.08146 15.2716C1.31233 15.2716 0.688721 14.6478 0.688721 13.8787V2.96442C0.688721 2.19533 1.31232 1.57149 2.08146 1.57149C2.85075 1.57149 3.47459 2.19553 3.47459 2.96442V6.45044L9.33773 0.586529C9.87408 0.0501316 10.7661 0.0451827 11.3076 0.586529L15.3721 4.65103C15.9161 5.19488 15.916 6.07703 15.3721 6.62087C14.8282 7.16472 13.9459 7.16491 13.4021 6.62087L10.3226 3.54144L5.44333 8.42142ZM10.3247 7.02704C11.0945 7.02704 11.719 7.65146 11.719 8.42127C11.719 9.19128 11.0945 9.8157 10.3247 9.8157C9.55472 9.8157 8.9303 9.19128 8.9303 8.42127C8.9303 7.65146 9.55472 7.02704 10.3247 7.02704Z' fill='%230093DD'/%3e %3c/svg%3e\"","module.exports = \"data:image/svg+xml,%3csvg width='14' height='9' viewBox='0 0 14 9' fill='none' xmlns='http://www.w3.org/2000/svg'%3e %3cpath d='M13.3814 5.8995L10.4403 0.797834C9.79552 -0.265486 8.22317 -0.276797 7.60102 0.843081L4.5129 6.14838C3.93598 7.1212 4.64863 8.34289 5.80246 8.34289H11.9901C13.1552 8.34289 14.0262 7.08724 13.3814 5.8995Z' fill='%233156AA'/%3e %3cpath d='M9.14009 6.29541L8.95912 5.97871C8.78944 5.68458 8.41612 5.05114 8.41612 5.05114L5.92753 0.729971C5.28276 -0.231539 3.75563 -0.310723 3.11086 0.89965L0.215011 5.9108C-0.38452 6.96281 0.328129 8.33156 1.629 8.34289H7.78267H10.407H11.9681C10.3731 8.35418 9.86407 7.52843 9.14009 6.29541Z' fill='%231972E2'/%3e %3cpath d='M9.14098 6.29519L8.96001 5.97844C8.79032 5.68432 8.41705 5.05087 8.41705 5.05087L6.81075 2.2229L4.50313 6.15946C3.92621 7.13227 4.63886 8.35396 5.79269 8.35396H7.77227H10.3966H11.969C10.3627 8.34263 9.86496 7.52817 9.14098 6.29519Z' fill='url(%23paint0_linear_11192_15395)'/%3e %3cdefs%3e %3clinearGradient id='paint0_linear_11192_15395' x1='3.68183' y1='4.37082' x2='10.8307' y2='7.01257' gradientUnits='userSpaceOnUse'%3e %3cstop stop-color='%23264CA2' stop-opacity='0'/%3e %3cstop offset='1' stop-color='%23234588'/%3e %3c/linearGradient%3e %3c/defs%3e %3c/svg%3e\"","module.exports = \"data:image/svg+xml,%3csvg width='1080' height='1080' viewBox='0 0 1080 1080' fill='none' xmlns='http://www.w3.org/2000/svg'%3e %3crect width='1080' height='1080' fill='white'/%3e %3cpath d='M385.67 428H171.631C170.311 428 169.045 428.524 168.112 429.458C167.178 430.391 166.654 431.657 166.654 432.978V647.017C166.654 648.337 167.178 649.603 168.112 650.536C169.045 651.47 170.311 651.994 171.631 651.994H385.67C386.991 651.994 388.257 651.47 389.19 650.536C390.124 649.603 390.648 648.337 390.648 647.017V432.978C390.648 431.657 390.124 430.391 389.19 429.458C388.257 428.524 386.991 428 385.67 428ZM315.983 572.352C315.983 573.672 315.459 574.938 314.525 575.872C313.592 576.805 312.326 577.33 311.006 577.33H246.296C244.976 577.33 243.71 576.805 242.776 575.872C241.843 574.938 241.319 573.672 241.319 572.352V507.642C241.319 506.322 241.843 505.056 242.776 504.123C243.71 503.189 244.976 502.665 246.296 502.665H311.006C312.326 502.665 313.592 503.189 314.525 504.123C315.459 505.056 315.983 506.322 315.983 507.642V572.352Z' fill='black'/%3e %3cpath d='M833.783 502.673H769.074C766.325 502.673 764.096 504.901 764.096 507.65V572.36C764.096 575.109 766.325 577.338 769.074 577.338H833.783C836.532 577.338 838.761 575.109 838.761 572.36V507.65C838.761 504.901 836.532 502.673 833.783 502.673Z' fill='black'/%3e %3cpath d='M759.088 428.006H694.379C691.63 428.006 689.401 430.234 689.401 432.984V497.693C689.401 500.442 691.63 502.671 694.379 502.671H759.088C761.838 502.671 764.066 500.442 764.066 497.693V432.984C764.066 430.234 761.838 428.006 759.088 428.006Z' fill='black'/%3e %3cpath d='M908.418 428.006H843.708C840.959 428.006 838.73 430.234 838.73 432.984V497.693C838.73 500.442 840.959 502.671 843.708 502.671H908.418C911.167 502.671 913.395 500.442 913.395 497.693V432.984C913.395 430.234 911.167 428.006 908.418 428.006Z' fill='black'/%3e %3cpath d='M759.088 577.334H694.379C691.63 577.334 689.401 579.562 689.401 582.311V647.021C689.401 649.77 691.63 651.999 694.379 651.999H759.088C761.838 651.999 764.066 649.77 764.066 647.021V582.311C764.066 579.562 761.838 577.334 759.088 577.334Z' fill='black'/%3e %3cpath d='M908.418 577.334H843.708C840.959 577.334 838.73 579.562 838.73 582.311V647.021C838.73 649.77 840.959 651.999 843.708 651.999H908.418C911.167 651.999 913.395 649.77 913.395 647.021V582.311C913.395 579.562 911.167 577.334 908.418 577.334Z' fill='black'/%3e %3cpath d='M646.997 428.006H582.288C579.539 428.006 577.31 430.234 577.31 432.984V497.693C577.31 500.442 579.539 502.671 582.288 502.671H646.997C649.746 502.671 651.975 500.442 651.975 497.693V432.984C651.975 430.234 649.746 428.006 646.997 428.006Z' fill='black'/%3e %3cpath d='M646.997 577.334H582.288C579.539 577.334 577.31 579.562 577.31 582.311V647.021C577.31 649.77 579.539 651.999 582.288 651.999H646.997C649.746 651.999 651.975 649.77 651.975 647.021V582.311C651.975 579.562 649.746 577.334 646.997 577.334Z' fill='black'/%3e %3cpath d='M577.31 507.586C577.31 506.266 576.785 505 575.852 504.067C574.918 503.133 573.652 502.609 572.332 502.609H502.645V432.978C502.645 431.657 502.12 430.391 501.187 429.458C500.253 428.524 498.987 428 497.667 428H432.958C431.637 428 430.371 428.524 429.438 429.458C428.504 430.391 427.98 431.657 427.98 432.978V646.905C427.98 648.225 428.504 649.491 429.438 650.424C430.371 651.358 431.637 651.882 432.958 651.882H497.667C498.987 651.882 500.253 651.358 501.187 650.424C502.12 649.491 502.645 648.225 502.645 646.905V577.274H572.332C573.652 577.274 574.918 576.749 575.852 575.816C576.785 574.882 577.31 573.616 577.31 572.296V507.586Z' fill='black'/%3e %3c/svg%3e\"","/**\n * @license React\n * use-sync-external-store-shim.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var e=require(\"react\");function h(a,b){return a===b&&(0!==a||1/a===1/b)||a!==a&&b!==b}var k=\"function\"===typeof Object.is?Object.is:h,l=e.useState,m=e.useEffect,n=e.useLayoutEffect,p=e.useDebugValue;function q(a,b){var d=b(),f=l({inst:{value:d,getSnapshot:b}}),c=f[0].inst,g=f[1];n(function(){c.value=d;c.getSnapshot=b;r(c)&&g({inst:c})},[a,d,b]);m(function(){r(c)&&g({inst:c});return a(function(){r(c)&&g({inst:c})})},[a]);p(d);return d}\nfunction r(a){var b=a.getSnapshot;a=a.value;try{var d=b();return!k(a,d)}catch(f){return!0}}function t(a,b){return b()}var u=\"undefined\"===typeof window||\"undefined\"===typeof window.document||\"undefined\"===typeof window.document.createElement?t:q;exports.useSyncExternalStore=void 0!==e.useSyncExternalStore?e.useSyncExternalStore:u;\n","/**\n * @license React\n * use-sync-external-store-shim/with-selector.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var h=require(\"react\"),n=require(\"use-sync-external-store/shim\");function p(a,b){return a===b&&(0!==a||1/a===1/b)||a!==a&&b!==b}var q=\"function\"===typeof Object.is?Object.is:p,r=n.useSyncExternalStore,t=h.useRef,u=h.useEffect,v=h.useMemo,w=h.useDebugValue;\nexports.useSyncExternalStoreWithSelector=function(a,b,e,l,g){var c=t(null);if(null===c.current){var f={hasValue:!1,value:null};c.current=f}else f=c.current;c=v(function(){function a(a){if(!c){c=!0;d=a;a=l(a);if(void 0!==g&&f.hasValue){var b=f.value;if(g(b,a))return k=b}return k=a}b=k;if(q(d,a))return b;var e=l(a);if(void 0!==g&&g(b,e))return b;d=a;return k=e}var c=!1,d,k,m=void 0===e?null:e;return[function(){return a(b())},null===m?void 0:function(){return a(m())}]},[b,e,l,g]);var d=r(a,c[0],c[1]);\nu(function(){f.hasValue=!0;f.value=d},[d]);w(d);return d};\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('../cjs/use-sync-external-store-shim.production.min.js');\n} else {\n module.exports = require('../cjs/use-sync-external-store-shim.development.js');\n}\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('../cjs/use-sync-external-store-shim/with-selector.production.min.js');\n} else {\n module.exports = require('../cjs/use-sync-external-store-shim/with-selector.development.js');\n}\n","\n/**\n * Module exports.\n */\n\nmodule.exports = deprecate;\n\n/**\n * Mark that a method should not be used.\n * Returns a modified function which warns once by default.\n *\n * If `localStorage.noDeprecation = true` is set, then it is a no-op.\n *\n * If `localStorage.throwDeprecation = true` is set, then deprecated functions\n * will throw an Error when invoked.\n *\n * If `localStorage.traceDeprecation = true` is set, then deprecated functions\n * will invoke `console.trace()` instead of `console.error()`.\n *\n * @param {Function} fn - the function to deprecate\n * @param {String} msg - the string to print to the console when `fn` is invoked\n * @returns {Function} a new \"deprecated\" version of `fn`\n * @api public\n */\n\nfunction deprecate (fn, msg) {\n if (config('noDeprecation')) {\n return fn;\n }\n\n var warned = false;\n function deprecated() {\n if (!warned) {\n if (config('throwDeprecation')) {\n throw new Error(msg);\n } else if (config('traceDeprecation')) {\n console.trace(msg);\n } else {\n console.warn(msg);\n }\n warned = true;\n }\n return fn.apply(this, arguments);\n }\n\n return deprecated;\n}\n\n/**\n * Checks `localStorage` for boolean values for the given `name`.\n *\n * @param {String} name\n * @returns {Boolean}\n * @api private\n */\n\nfunction config (name) {\n // accessing global.localStorage can trigger a DOMException in sandboxed iframes\n try {\n if (!global.localStorage) return false;\n } catch (_) {\n return false;\n }\n var val = global.localStorage[name];\n if (null == val) return false;\n return String(val).toLowerCase() === 'true';\n}\n","// Returns a wrapper function that returns a wrapped callback\n// The wrapper function should do some stuff, and return a\n// presumably different callback function.\n// This makes sure that own properties are retained, so that\n// decorations and such are not lost along the way.\nmodule.exports = wrappy\nfunction wrappy (fn, cb) {\n if (fn && cb) return wrappy(fn)(cb)\n\n if (typeof fn !== 'function')\n throw new TypeError('need wrapper function')\n\n Object.keys(fn).forEach(function (k) {\n wrapper[k] = fn[k]\n })\n\n return wrapper\n\n function wrapper() {\n var args = new Array(arguments.length)\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i]\n }\n var ret = fn.apply(this, args)\n var cb = args[args.length-1]\n if (typeof ret === 'function' && ret !== cb) {\n Object.keys(cb).forEach(function (k) {\n ret[k] = cb[k]\n })\n }\n return ret\n }\n}\n","// ----------------------------------------------------------------------------\n\n// PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:\n// https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code\n// EDIT THE CORRESPONDENT .ts FILE INSTEAD\n\n'use strict';\nvar replace = String.prototype.replace;\nvar percentTwenties = /%20/g;\nmodule.exports = {\n 'default': 'RFC3986',\n formatters: {\n RFC1738: function (value) {\n return replace.call(value, percentTwenties, '+');\n },\n RFC3986: function (value) {\n return value;\n }\n },\n RFC1738: 'RFC1738',\n RFC3986: 'RFC3986'\n};\n","// ----------------------------------------------------------------------------\n\n// PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:\n// https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code\n// EDIT THE CORRESPONDENT .ts FILE INSTEAD\n\n'use strict';\nvar stringify = require('./stringify.cjs');\nvar parse = require('./parse.cjs');\nvar formats = require('./formats.cjs');\nmodule.exports = {\n formats: formats,\n parse: parse,\n stringify: stringify\n};\n","// ----------------------------------------------------------------------------\n\n// PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:\n// https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code\n// EDIT THE CORRESPONDENT .ts FILE INSTEAD\n\n'use strict';\nvar utils = require('./utils.cjs');\nvar has = Object.prototype.hasOwnProperty;\nvar defaults = {\n allowDots: false,\n allowPrototypes: false,\n arrayLimit: 20,\n charset: 'utf-8',\n charsetSentinel: false,\n comma: false,\n decoder: utils.decode,\n delimiter: '&',\n depth: 5,\n ignoreQueryPrefix: false,\n interpretNumericEntities: false,\n parameterLimit: 1000,\n parseArrays: true,\n plainObjects: false,\n strictNullHandling: false\n};\nvar interpretNumericEntities = function (str) {\n return str.replace(/&#(\\d+);/g, function ($0, numberStr) {\n return String.fromCharCode(parseInt(numberStr, 10));\n });\n};\n// This is what browsers will submit when the ✓ character occurs in an\n// application/x-www-form-urlencoded body and the encoding of the page containing\n// the form is iso-8859-1, or when the submitted form has an accept-charset\n// attribute of iso-8859-1. Presumably also with other charsets that do not contain\n// the ✓ character, such as us-ascii.\nvar isoSentinel = 'utf8=%26%2310003%3B'; // encodeURIComponent('✓')\n// These are the percent-encoded utf-8 octets representing a checkmark, indicating that the request actually is utf-8 encoded.\nvar charsetSentinel = 'utf8=%E2%9C%93'; // encodeURIComponent('✓')\nvar parseValues = function parseQueryStringValues(str, options) {\n var obj = {};\n var cleanStr = options.ignoreQueryPrefix ? str.replace(/^\\?/, '') : str;\n var limit = options.parameterLimit === Infinity ? undefined : options.parameterLimit;\n var parts = cleanStr.split(options.delimiter, limit);\n var skipIndex = -1; // Keep track of where the utf8 sentinel was found\n var i;\n var charset = options.charset;\n if (options.charsetSentinel) {\n for (i = 0; i < parts.length; ++i) {\n if (parts[i].indexOf('utf8=') === 0) {\n if (parts[i] === charsetSentinel) {\n charset = 'utf-8';\n }\n else if (parts[i] === isoSentinel) {\n charset = 'iso-8859-1';\n }\n skipIndex = i;\n i = parts.length; // The eslint settings do not allow break;\n }\n }\n }\n for (i = 0; i < parts.length; ++i) {\n if (i === skipIndex) {\n continue;\n }\n var part = parts[i];\n var bracketEqualsPos = part.indexOf(']=');\n var pos = bracketEqualsPos === -1 ? part.indexOf('=') : bracketEqualsPos + 1;\n var key, val;\n if (pos === -1) {\n key = options.decoder(part, defaults.decoder, charset);\n val = options.strictNullHandling ? null : '';\n }\n else {\n key = options.decoder(part.slice(0, pos), defaults.decoder, charset);\n val = options.decoder(part.slice(pos + 1), defaults.decoder, charset);\n }\n if (val && options.interpretNumericEntities && charset === 'iso-8859-1') {\n val = interpretNumericEntities(val);\n }\n if (val && options.comma && val.indexOf(',') > -1) {\n val = val.split(',');\n }\n if (has.call(obj, key)) {\n obj[key] = utils.combine(obj[key], val);\n }\n else {\n obj[key] = val;\n }\n }\n return obj;\n};\nvar parseObject = function (chain, val, options) {\n var leaf = val;\n for (var i = chain.length - 1; i >= 0; --i) {\n var obj;\n var root = chain[i];\n if (root === '[]' && options.parseArrays) {\n obj = [].concat(leaf);\n }\n else {\n obj = options.plainObjects ? Object.create(null) : {};\n var cleanRoot = root.charAt(0) === '[' && root.charAt(root.length - 1) === ']' ? root.slice(1, -1) : root;\n var index = parseInt(cleanRoot, 10);\n if (!options.parseArrays && cleanRoot === '') {\n obj = { 0: leaf };\n }\n else if (!isNaN(index)\n && root !== cleanRoot\n && String(index) === cleanRoot\n && index >= 0\n && (options.parseArrays && index <= options.arrayLimit)) {\n obj = [];\n obj[index] = leaf;\n }\n else {\n obj[cleanRoot] = leaf;\n }\n }\n leaf = obj;\n }\n return leaf;\n};\nvar parseKeys = function parseQueryStringKeys(givenKey, val, options) {\n if (!givenKey) {\n return;\n }\n // Transform dot notation to bracket notation\n var key = options.allowDots ? givenKey.replace(/\\.([^.[]+)/g, '[$1]') : givenKey;\n // The regex chunks\n var brackets = /(\\[[^[\\]]*])/;\n var child = /(\\[[^[\\]]*])/g;\n // Get the parent\n var segment = brackets.exec(key);\n var parent = segment ? key.slice(0, segment.index) : key;\n // Stash the parent if it exists\n var keys = [];\n if (parent) {\n // If we aren't using plain objects, optionally prefix keys that would overwrite object prototype properties\n if (!options.plainObjects && has.call(Object.prototype, parent)) {\n if (!options.allowPrototypes) {\n return;\n }\n }\n keys.push(parent);\n }\n // Loop through children appending to the array until we hit depth\n var i = 0;\n while ((segment = child.exec(key)) !== null && i < options.depth) {\n i += 1;\n if (!options.plainObjects && has.call(Object.prototype, segment[1].slice(1, -1))) {\n if (!options.allowPrototypes) {\n return;\n }\n }\n keys.push(segment[1]);\n }\n // If there's a remainder, just add whatever is left\n if (segment) {\n keys.push('[' + key.slice(segment.index) + ']');\n }\n return parseObject(keys, val, options);\n};\nvar normalizeParseOptions = function normalizeParseOptions(opts) {\n if (!opts) {\n return defaults;\n }\n if (opts.decoder !== null && opts.decoder !== undefined && typeof opts.decoder !== 'function') {\n throw new TypeError('Decoder has to be a function.');\n }\n if (typeof opts.charset !== 'undefined' && opts.charset !== 'utf-8' && opts.charset !== 'iso-8859-1') {\n throw new Error('The charset option must be either utf-8, iso-8859-1, or undefined');\n }\n var charset = typeof opts.charset === 'undefined' ? defaults.charset : opts.charset;\n return {\n allowDots: typeof opts.allowDots === 'undefined' ? defaults.allowDots : !!opts.allowDots,\n allowPrototypes: typeof opts.allowPrototypes === 'boolean' ? opts.allowPrototypes : defaults.allowPrototypes,\n arrayLimit: typeof opts.arrayLimit === 'number' ? opts.arrayLimit : defaults.arrayLimit,\n charset: charset,\n charsetSentinel: typeof opts.charsetSentinel === 'boolean' ? opts.charsetSentinel : defaults.charsetSentinel,\n comma: typeof opts.comma === 'boolean' ? opts.comma : defaults.comma,\n decoder: typeof opts.decoder === 'function' ? opts.decoder : defaults.decoder,\n delimiter: typeof opts.delimiter === 'string' || utils.isRegExp(opts.delimiter) ? opts.delimiter : defaults.delimiter,\n depth: typeof opts.depth === 'number' ? opts.depth : defaults.depth,\n ignoreQueryPrefix: opts.ignoreQueryPrefix === true,\n interpretNumericEntities: typeof opts.interpretNumericEntities === 'boolean' ? opts.interpretNumericEntities : defaults.interpretNumericEntities,\n parameterLimit: typeof opts.parameterLimit === 'number' ? opts.parameterLimit : defaults.parameterLimit,\n parseArrays: opts.parseArrays !== false,\n plainObjects: typeof opts.plainObjects === 'boolean' ? opts.plainObjects : defaults.plainObjects,\n strictNullHandling: typeof opts.strictNullHandling === 'boolean' ? opts.strictNullHandling : defaults.strictNullHandling\n };\n};\nmodule.exports = function (str, opts) {\n var options = normalizeParseOptions(opts);\n if (str === '' || str === null || typeof str === 'undefined') {\n return options.plainObjects ? Object.create(null) : {};\n }\n var tempObj = typeof str === 'string' ? parseValues(str, options) : str;\n var obj = options.plainObjects ? Object.create(null) : {};\n // Iterate over the keys and setup the new object\n var keys = Object.keys(tempObj);\n for (var i = 0; i < keys.length; ++i) {\n var key = keys[i];\n var newObj = parseKeys(key, tempObj[key], options);\n obj = utils.merge(obj, newObj, options);\n }\n return utils.compact(obj);\n};\n","// ----------------------------------------------------------------------------\n\n// PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:\n// https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code\n// EDIT THE CORRESPONDENT .ts FILE INSTEAD\n\n'use strict';\nvar utils = require('./utils.cjs');\nvar formats = require('./formats.cjs');\nvar has = Object.prototype.hasOwnProperty;\nvar arrayPrefixGenerators = {\n brackets: function brackets(prefix) {\n return prefix + '[]';\n },\n comma: 'comma',\n indices: function indices(prefix, key) {\n return prefix + '[' + key + ']';\n },\n repeat: function repeat(prefix) {\n return prefix;\n }\n};\nvar isArray = Array.isArray;\nvar push = Array.prototype.push;\nvar pushToArray = function (arr, valueOrArray) {\n push.apply(arr, isArray(valueOrArray) ? valueOrArray : [valueOrArray]);\n};\nvar toISO = Date.prototype.toISOString;\nvar defaults = {\n addQueryPrefix: false,\n allowDots: false,\n charset: 'utf-8',\n charsetSentinel: false,\n delimiter: '&',\n encode: true,\n encoder: utils.encode,\n encodeValuesOnly: false,\n formatter: formats.formatters[formats['default']],\n // deprecated\n indices: false,\n serializeDate: function serializeDate(date) {\n return toISO.call(date);\n },\n skipNulls: false,\n strictNullHandling: false\n};\nvar stringify = function stringify(// eslint-disable-line func-name-matching\nobject, prefix, generateArrayPrefix, strictNullHandling, skipNulls, encoder, filter, sort, allowDots, serializeDate, formatter, encodeValuesOnly, charset) {\n var obj = object;\n if (typeof filter === 'function') {\n obj = filter(prefix, obj);\n }\n else if (obj instanceof Date) {\n obj = serializeDate(obj);\n }\n else if (generateArrayPrefix === 'comma' && isArray(obj)) {\n obj = obj.join(',');\n }\n if (obj === null) {\n if (strictNullHandling) {\n return encoder && !encodeValuesOnly ? encoder(prefix, defaults.encoder, charset) : prefix;\n }\n obj = '';\n }\n if (typeof obj === 'string' || typeof obj === 'number' || typeof obj === 'boolean' || utils.isBuffer(obj)) {\n if (encoder) {\n var keyValue = encodeValuesOnly ? prefix : encoder(prefix, defaults.encoder, charset);\n return [formatter(keyValue) + '=' + formatter(encoder(obj, defaults.encoder, charset))];\n }\n return [formatter(prefix) + '=' + formatter(String(obj))];\n }\n var values = [];\n if (typeof obj === 'undefined') {\n return values;\n }\n var objKeys;\n if (isArray(filter)) {\n objKeys = filter;\n }\n else {\n var keys = Object.keys(obj);\n objKeys = sort ? keys.sort(sort) : keys;\n }\n for (var i = 0; i < objKeys.length; ++i) {\n var key = objKeys[i];\n if (skipNulls && obj[key] === null) {\n continue;\n }\n if (isArray(obj)) {\n pushToArray(values, stringify(obj[key], typeof generateArrayPrefix === 'function' ? generateArrayPrefix(prefix, key) : prefix, generateArrayPrefix, strictNullHandling, skipNulls, encoder, filter, sort, allowDots, serializeDate, formatter, encodeValuesOnly, charset));\n }\n else {\n pushToArray(values, stringify(obj[key], prefix + (allowDots ? '.' + key : '[' + key + ']'), generateArrayPrefix, strictNullHandling, skipNulls, encoder, filter, sort, allowDots, serializeDate, formatter, encodeValuesOnly, charset));\n }\n }\n return values;\n};\nvar normalizeStringifyOptions = function normalizeStringifyOptions(opts) {\n if (!opts) {\n return defaults;\n }\n if (opts.encoder !== null && opts.encoder !== undefined && typeof opts.encoder !== 'function') {\n throw new TypeError('Encoder has to be a function.');\n }\n var charset = opts.charset || defaults.charset;\n if (typeof opts.charset !== 'undefined' && opts.charset !== 'utf-8' && opts.charset !== 'iso-8859-1') {\n throw new TypeError('The charset option must be either utf-8, iso-8859-1, or undefined');\n }\n var format = formats['default'];\n if (typeof opts.format !== 'undefined') {\n if (!has.call(formats.formatters, opts.format)) {\n throw new TypeError('Unknown format option provided.');\n }\n format = opts.format;\n }\n var formatter = formats.formatters[format];\n var filter = defaults.filter;\n if (typeof opts.filter === 'function' || isArray(opts.filter)) {\n filter = opts.filter;\n }\n return {\n addQueryPrefix: typeof opts.addQueryPrefix === 'boolean' ? opts.addQueryPrefix : defaults.addQueryPrefix,\n allowDots: typeof opts.allowDots === 'undefined' ? defaults.allowDots : !!opts.allowDots,\n charset: charset,\n charsetSentinel: typeof opts.charsetSentinel === 'boolean' ? opts.charsetSentinel : defaults.charsetSentinel,\n delimiter: typeof opts.delimiter === 'undefined' ? defaults.delimiter : opts.delimiter,\n encode: typeof opts.encode === 'boolean' ? opts.encode : defaults.encode,\n encoder: typeof opts.encoder === 'function' ? opts.encoder : defaults.encoder,\n encodeValuesOnly: typeof opts.encodeValuesOnly === 'boolean' ? opts.encodeValuesOnly : defaults.encodeValuesOnly,\n filter: filter,\n formatter: formatter,\n serializeDate: typeof opts.serializeDate === 'function' ? opts.serializeDate : defaults.serializeDate,\n skipNulls: typeof opts.skipNulls === 'boolean' ? opts.skipNulls : defaults.skipNulls,\n sort: typeof opts.sort === 'function' ? opts.sort : null,\n strictNullHandling: typeof opts.strictNullHandling === 'boolean' ? opts.strictNullHandling : defaults.strictNullHandling\n };\n};\nmodule.exports = function (object, opts) {\n var obj = object;\n var options = normalizeStringifyOptions(opts);\n var objKeys;\n var filter;\n if (typeof options.filter === 'function') {\n filter = options.filter;\n obj = filter('', obj);\n }\n else if (isArray(options.filter)) {\n filter = options.filter;\n objKeys = filter;\n }\n var keys = [];\n if (typeof obj !== 'object' || obj === null) {\n return '';\n }\n var arrayFormat;\n if (opts && opts.arrayFormat in arrayPrefixGenerators) {\n arrayFormat = opts.arrayFormat;\n }\n else if (opts && 'indices' in opts) {\n arrayFormat = opts.indices ? 'indices' : 'repeat';\n }\n else {\n arrayFormat = 'indices';\n }\n var generateArrayPrefix = arrayPrefixGenerators[arrayFormat];\n if (!objKeys) {\n objKeys = Object.keys(obj);\n }\n if (options.sort) {\n objKeys.sort(options.sort);\n }\n for (var i = 0; i < objKeys.length; ++i) {\n var key = objKeys[i];\n if (options.skipNulls && obj[key] === null) {\n continue;\n }\n pushToArray(keys, stringify(obj[key], key, generateArrayPrefix, options.strictNullHandling, options.skipNulls, options.encode ? options.encoder : null, options.filter, options.sort, options.allowDots, options.serializeDate, options.formatter, options.encodeValuesOnly, options.charset));\n }\n var joined = keys.join(options.delimiter);\n var prefix = options.addQueryPrefix === true ? '?' : '';\n if (options.charsetSentinel) {\n if (options.charset === 'iso-8859-1') {\n // encodeURIComponent('✓'), the \"numeric entity\" representation of a checkmark\n prefix += 'utf8=%26%2310003%3B&';\n }\n else {\n // encodeURIComponent('✓')\n prefix += 'utf8=%E2%9C%93&';\n }\n }\n return joined.length > 0 ? prefix + joined : '';\n};\n","// ----------------------------------------------------------------------------\n\n// PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:\n// https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code\n// EDIT THE CORRESPONDENT .ts FILE INSTEAD\n\n'use strict';\nvar has = Object.prototype.hasOwnProperty;\nvar isArray = Array.isArray;\nvar hexTable = (function () {\n var array = [];\n for (var i = 0; i < 256; ++i) {\n array.push('%' + ((i < 16 ? '0' : '') + i.toString(16)).toUpperCase());\n }\n return array;\n}());\nvar compactQueue = function compactQueue(queue) {\n while (queue.length > 1) {\n var item = queue.pop();\n var obj = item.obj[item.prop];\n if (isArray(obj)) {\n var compacted = [];\n for (var j = 0; j < obj.length; ++j) {\n if (typeof obj[j] !== 'undefined') {\n compacted.push(obj[j]);\n }\n }\n item.obj[item.prop] = compacted;\n }\n }\n};\nvar arrayToObject = function arrayToObject(source, options) {\n var obj = options && options.plainObjects ? Object.create(null) : {};\n for (var i = 0; i < source.length; ++i) {\n if (typeof source[i] !== 'undefined') {\n obj[i] = source[i];\n }\n }\n return obj;\n};\nvar merge = function merge(target, source, options) {\n if (!source) {\n return target;\n }\n if (typeof source !== 'object') {\n if (isArray(target)) {\n target.push(source);\n }\n else if (target && typeof target === 'object') {\n if ((options && (options.plainObjects || options.allowPrototypes)) || !has.call(Object.prototype, source)) {\n target[source] = true;\n }\n }\n else {\n return [target, source];\n }\n return target;\n }\n if (!target || typeof target !== 'object') {\n return [target].concat(source);\n }\n var mergeTarget = target;\n if (isArray(target) && !isArray(source)) {\n mergeTarget = arrayToObject(target, options);\n }\n if (isArray(target) && isArray(source)) {\n source.forEach(function (item, i) {\n if (has.call(target, i)) {\n var targetItem = target[i];\n if (targetItem && typeof targetItem === 'object' && item && typeof item === 'object') {\n target[i] = merge(targetItem, item, options);\n }\n else {\n target.push(item);\n }\n }\n else {\n target[i] = item;\n }\n });\n return target;\n }\n return Object.keys(source).reduce(function (acc, key) {\n var value = source[key];\n if (has.call(acc, key)) {\n acc[key] = merge(acc[key], value, options);\n }\n else {\n acc[key] = value;\n }\n return acc;\n }, mergeTarget);\n};\nvar assign = function assignSingleSource(target, source) {\n return Object.keys(source).reduce(function (acc, key) {\n acc[key] = source[key];\n return acc;\n }, target);\n};\nvar decode = function (str, decoder, charset) {\n var strWithoutPlus = str.replace(/\\+/g, ' ');\n if (charset === 'iso-8859-1') {\n // unescape never throws, no try...catch needed:\n return strWithoutPlus.replace(/%[0-9a-f]{2}/gi, unescape);\n }\n // utf-8\n try {\n return decodeURIComponent(strWithoutPlus);\n }\n catch (e) {\n return strWithoutPlus;\n }\n};\nvar encode = function encode(str, defaultEncoder, charset) {\n // This code was originally written by Brian White (mscdex) for the io.js core querystring library.\n // It has been adapted here for stricter adherence to RFC 3986\n if (str.length === 0) {\n return str;\n }\n var string = typeof str === 'string' ? str : String(str);\n if (charset === 'iso-8859-1') {\n return escape(string).replace(/%u[0-9a-f]{4}/gi, function ($0) {\n return '%26%23' + parseInt($0.slice(2), 16) + '%3B';\n });\n }\n var out = '';\n for (var i = 0; i < string.length; ++i) {\n var c = string.charCodeAt(i);\n if (c === 0x2D // -\n || c === 0x2E // .\n || c === 0x5F // _\n || c === 0x7E // ~\n || (c >= 0x30 && c <= 0x39) // 0-9\n || (c >= 0x41 && c <= 0x5A) // a-z\n || (c >= 0x61 && c <= 0x7A) // A-Z\n ) {\n out += string.charAt(i);\n continue;\n }\n if (c < 0x80) {\n out = out + hexTable[c];\n continue;\n }\n if (c < 0x800) {\n out = out + (hexTable[0xC0 | (c >> 6)] + hexTable[0x80 | (c & 0x3F)]);\n continue;\n }\n if (c < 0xD800 || c >= 0xE000) {\n out = out + (hexTable[0xE0 | (c >> 12)] + hexTable[0x80 | ((c >> 6) & 0x3F)] + hexTable[0x80 | (c & 0x3F)]);\n continue;\n }\n i += 1;\n c = 0x10000 + (((c & 0x3FF) << 10) | (string.charCodeAt(i) & 0x3FF));\n out += hexTable[0xF0 | (c >> 18)]\n + hexTable[0x80 | ((c >> 12) & 0x3F)]\n + hexTable[0x80 | ((c >> 6) & 0x3F)]\n + hexTable[0x80 | (c & 0x3F)];\n }\n return out;\n};\nvar compact = function compact(value) {\n var queue = [{ obj: { o: value }, prop: 'o' }];\n var refs = [];\n for (var i = 0; i < queue.length; ++i) {\n var item = queue[i];\n var obj = item.obj[item.prop];\n var keys = Object.keys(obj);\n for (var j = 0; j < keys.length; ++j) {\n var key = keys[j];\n var val = obj[key];\n if (typeof val === 'object' && val !== null && refs.indexOf(val) === -1) {\n queue.push({ obj: obj, prop: key });\n refs.push(val);\n }\n }\n }\n compactQueue(queue);\n return value;\n};\nvar isRegExp = function isRegExp(obj) {\n return Object.prototype.toString.call(obj) === '[object RegExp]';\n};\nvar isBuffer = function isBuffer(obj) {\n if (!obj || typeof obj !== 'object') {\n return false;\n }\n return !!(obj.constructor && obj.constructor.isBuffer && obj.constructor.isBuffer(obj));\n};\nvar combine = function combine(a, b) {\n return [].concat(a, b);\n};\nmodule.exports = {\n arrayToObject: arrayToObject,\n assign: assign,\n combine: combine,\n compact: compact,\n decode: decode,\n encode: encode,\n isBuffer: isBuffer,\n isRegExp: isRegExp,\n merge: merge\n};\n","function _interopRequireDefault(e) {\n return e && e.__esModule ? e : {\n \"default\": e\n };\n}\nmodule.exports = _interopRequireDefault, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","// ----------------------------------------------------------------------------\n\n// PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:\n// https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code\n// EDIT THE CORRESPONDENT .ts FILE INSTEAD\n\n// @ts-nocheck\n// ----------------------------------------------------------------------------\n// There's been a lot of messing with this code...\n// The problem is to satisfy the following requirements:\n// - properly detect isNode == true on server side and isNode == false in the browser (on client side)\n// - make sure create-react-app, react-starter-kit and other react frameworks work\n// - make sure it does not break the browserified version (when linked into a html from a cdn)\n// - make sure it does not break the webpacking and babel-transpiled scripts\n// - make sure it works in Electron\n// - make sure it works with Angular.js\n// - make sure it does not break other possible usage scenarios\nconst isBrowser = typeof window !== 'undefined';\nconst isElectron = typeof process !== 'undefined' &&\n typeof process.versions !== 'undefined' &&\n typeof process.versions.electron !== 'undefined';\nconst isWebWorker = typeof WorkerGlobalScope !== 'undefined' && (self instanceof WorkerGlobalScope);\nconst isWindows = typeof process !== 'undefined' && process.platform === \"win32\";\nconst isNode = !(isBrowser || isWebWorker);\n// ----------------------------------------------------------------------------\nexport { isBrowser, isElectron, isWebWorker, isNode, isWindows, };\n","// ----------------------------------------------------------------------------\n\n// PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:\n// https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code\n// EDIT THE CORRESPONDENT .ts FILE INSTEAD\n\n/* ------------------------------------------------------------------------ */\nconst isNumber = Number.isFinite;\nconst isInteger = Number.isInteger;\nconst isArray = Array.isArray;\nconst hasProps = (o) => ((o !== undefined) && (o !== null));\nconst isString = (s) => (typeof s === 'string');\nconst isObject = (o) => ((o !== null) && (typeof o === 'object'));\nconst isRegExp = (o) => (o instanceof RegExp);\nconst isDictionary = (o) => (isObject(o) && (Object.getPrototypeOf(o) === Object.prototype) && !isArray(o) && !isRegExp(o));\nconst isStringCoercible = (x) => ((hasProps(x) && x.toString) || isNumber(x));\n/* ............................................. */\nconst prop = (o, k) => (isObject(o) && o[k] !== '' && o[k] !== null ? o[k] : undefined);\nconst prop2 = (o, k1, k2) => (!isObject(o)\n ? undefined\n : (o[k1] !== undefined && o[k1] !== '' && o[k1] !== null\n ? o[k1]\n : (o[k2] !== '' && o[k2] !== null\n ? o[k2]\n : undefined)));\nconst getValueFromKeysInArray = (object, array) => object[array.find((k) => prop(object, k) !== undefined)];\n/* ............................................. */\nconst asFloat = (x) => ((isNumber(x) || (isString(x) && x.length !== 0)) ? parseFloat(x) : NaN);\nconst asInteger = (x) => ((isNumber(x) || (isString(x) && x.length !== 0)) ? Math.trunc(Number(x)) : NaN);\n/* ............................................. */\nconst safeFloat = (o, k, $default) => {\n const n = asFloat(prop(o, k));\n return isNumber(n) ? n : $default;\n};\nconst safeInteger = (o, k, $default) => {\n const n = asInteger(prop(o, k));\n return isNumber(n) ? n : $default;\n};\nconst safeIntegerProduct = (o, k, $factor, $default) => {\n const n = asFloat(prop(o, k));\n return isNumber(n) ? parseInt(n * $factor) : $default;\n};\nconst safeTimestamp = (o, k, $default) => {\n const n = asFloat(prop(o, k));\n return isNumber(n) ? parseInt(n * 1000) : $default;\n};\nconst safeValue = (o, k, $default) => {\n const x = prop(o, k);\n return hasProps(x) ? x : $default;\n};\nconst safeString = (o, k, $default) => {\n const x = prop(o, k);\n return isStringCoercible(x) ? String(x) : $default;\n};\nconst safeStringLower = (o, k, $default) => {\n const x = prop(o, k);\n return isStringCoercible(x) ? String(x).toLowerCase() : $default;\n};\nconst safeStringUpper = (o, k, $default) => {\n const x = prop(o, k);\n return isStringCoercible(x) ? String(x).toUpperCase() : $default;\n};\n/* ............................................. */\nconst safeFloat2 = (o, k1, k2, $default) => {\n const n = asFloat(prop2(o, k1, k2));\n return isNumber(n) ? n : $default;\n};\nconst safeInteger2 = (o, k1, k2, $default) => {\n const n = asInteger(prop2(o, k1, k2));\n return isNumber(n) ? n : $default;\n};\nconst safeIntegerProduct2 = (o, k1, k2, $factor, $default) => {\n const n = asInteger(prop2(o, k1, k2));\n return isNumber(n) ? parseInt(n * $factor) : $default;\n};\nconst safeTimestamp2 = (o, k1, k2, $default) => {\n const n = asFloat(prop2(o, k1, k2));\n return isNumber(n) ? parseInt(n * 1000) : $default;\n};\nconst safeValue2 = (o, k1, k2, $default) => {\n const x = prop2(o, k1, k2);\n return hasProps(x) ? x : $default;\n};\nconst safeString2 = (o, k1, k2, $default) => {\n const x = prop2(o, k1, k2);\n return isStringCoercible(x) ? String(x) : $default;\n};\nconst safeStringLower2 = (o, k1, k2, $default) => {\n const x = prop2(o, k1, k2);\n return isStringCoercible(x) ? String(x).toLowerCase() : $default;\n};\nconst safeStringUpper2 = (o, k1, k2, $default) => {\n const x = prop2(o, k1, k2);\n return isStringCoercible(x) ? String(x).toUpperCase() : $default;\n};\nconst safeFloatN = (o, k, $default) => {\n const n = asFloat(getValueFromKeysInArray(o, k));\n return isNumber(n) ? n : $default;\n};\nconst safeIntegerN = (o, k, $default) => {\n if (o === undefined) {\n return $default;\n }\n const n = asInteger(getValueFromKeysInArray(o, k));\n return isNumber(n) ? n : $default;\n};\nconst safeIntegerProductN = (o, k, $factor, $default) => {\n const n = asInteger(getValueFromKeysInArray(o, k));\n return isNumber(n) ? parseInt(n * $factor) : $default;\n};\nconst safeTimestampN = (o, k, $default) => {\n const n = asFloat(getValueFromKeysInArray(o, k));\n return isNumber(n) ? parseInt(n * 1000) : $default;\n};\nconst safeValueN = (o, k, $default) => {\n if (o === undefined) {\n return $default;\n }\n const x = getValueFromKeysInArray(o, k);\n return hasProps(x) ? x : $default;\n};\nconst safeStringN = (o, k, $default) => {\n if (o === undefined) {\n return $default;\n }\n const x = getValueFromKeysInArray(o, k);\n return isStringCoercible(x) ? String(x) : $default;\n};\nconst safeStringLowerN = (o, k, $default) => {\n if (o === undefined) {\n return $default;\n }\n const x = getValueFromKeysInArray(o, k);\n return isStringCoercible(x) ? String(x).toLowerCase() : $default;\n};\nconst safeStringUpperN = (o, k, $default) => {\n const x = getValueFromKeysInArray(o, k);\n return isStringCoercible(x) ? String(x).toUpperCase() : $default;\n};\nexport { isNumber, isInteger, isArray, isObject, isString, isStringCoercible, isDictionary, hasProps, prop, asFloat, asInteger, safeFloat, safeInteger, safeIntegerProduct, safeTimestamp, safeValue, safeString, safeStringLower, safeStringUpper\n// not using safeFloats with an array argument as we're trying to save some cycles here\n// we're not using safeFloat3 either because those cases are too rare to deserve their own optimization\n, safeFloat2, safeInteger2, safeIntegerProduct2, safeTimestamp2, safeValue2, safeString2, safeStringLower2, safeStringUpper2\n// safeMethodN\n, safeFloatN, safeIntegerN, safeIntegerProductN, safeTimestampN, safeValueN, safeStringN, safeStringLowerN, safeStringUpperN, };\n/* ------------------------------------------------------------------------ */\n","// ----------------------------------------------------------------------------\n\n// PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:\n// https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code\n// EDIT THE CORRESPONDENT .ts FILE INSTEAD\n\n// ----------------------------------------------------------------------------\nimport { isNumber, isDictionary, isArray } from './type.js';\n// ----------------------------------------------------------------------------\nconst keys = Object.keys; // eslint-disable-line padding-line-between-statements\nconst values = (x) => ((!isArray(x)) ? Object.values(x) : x); // don't copy arrays if they're already arrays\nconst index = (x) => new Set(values(x));\nconst extend = (...args) => Object.assign({}, ...args); // NB: side-effect free\nconst clone = (x) => (isArray(x) ? Array.from(x) : extend(x)); // clone arrays or objects\n// ----------------------------------------------------------------------------\nconst ordered = (x) => x; // a stub to keep assoc keys in order (in JS it does nothing, it's mostly for Python)\nconst unique = (x) => Array.from(index(x));\nconst arrayConcat = (a, b) => a.concat(b);\n// ------------------------------------------------------------------------\nconst inArray = (needle, haystack) => haystack.includes(needle);\nconst toArray = (object) => Object.values(object);\nconst isEmpty = (object) => {\n if (!object) {\n return true;\n }\n return (Array.isArray(object) ? object : Object.keys(object)).length < 1;\n};\nconst keysort = (x, out = {}) => {\n for (const k of keys(x).sort()) {\n out[k] = x[k];\n }\n return out;\n};\n/*\n Accepts a map/array of objects and a key name to be used as an index:\n array = [\n { someKey: 'value1', anotherKey: 'anotherValue1' },\n { someKey: 'value2', anotherKey: 'anotherValue2' },\n { someKey: 'value3', anotherKey: 'anotherValue3' },\n ]\n key = 'someKey'\n Returns a map:\n {\n value1: { someKey: 'value1', anotherKey: 'anotherValue1' },\n value2: { someKey: 'value2', anotherKey: 'anotherValue2' },\n value3: { someKey: 'value3', anotherKey: 'anotherValue3' },\n }\n*/\nconst groupBy = (x, k, out = {}) => {\n for (const v of values(x)) {\n if (k in v) {\n const p = v[k];\n out[p] = out[p] || [];\n out[p].push(v);\n }\n }\n return out;\n};\nconst indexBy = (x, k, out = {}) => {\n for (const v of values(x)) {\n if (k in v) {\n out[v[k]] = v;\n }\n }\n return out;\n};\nconst filterBy = (x, k, value = undefined, out = []) => {\n for (const v of values(x)) {\n if (v[k] === value) {\n out.push(v);\n }\n }\n return out;\n};\nconst sortBy = (array, key, descending = false, defaultValue = 0, direction = descending ? -1 : 1) => array.sort((a, b) => {\n const first = (key in a) ? a[key] : defaultValue;\n const second = (key in b) ? b[key] : defaultValue;\n if (first < second) {\n return -direction;\n }\n else if (first > second) {\n return direction;\n }\n else {\n return 0;\n }\n});\nconst sortBy2 = (array, key1, key2, descending = false, direction = descending ? -1 : 1) => array.sort((a, b) => {\n if (a[key1] < b[key1]) {\n return -direction;\n }\n else if (a[key1] > b[key1]) {\n return direction;\n }\n else {\n if (a[key2] < b[key2]) {\n return -direction;\n }\n else if (a[key2] > b[key2]) {\n return direction;\n }\n else {\n return 0;\n }\n }\n});\nconst flatten = function flatten(x, out = []) {\n for (const v of x) {\n if (isArray(v)) {\n flatten(v, out);\n }\n else {\n out.push(v);\n }\n }\n return out;\n};\nconst pluck = (x, k) => values(x).filter((v) => k in v).map((v) => v[k]);\nconst omit = (x, ...args) => {\n if (!Array.isArray(x)) {\n const out = clone(x);\n for (const k of args) {\n if (isArray(k)) { // omit (x, ['a', 'b'])\n for (const kk of k) {\n delete out[kk];\n }\n }\n else {\n delete out[k]; // omit (x, 'a', 'b')\n }\n }\n return out;\n }\n return x;\n};\nconst sum = (...xs) => {\n const ns = xs.filter(isNumber); // leave only numbers\n return (ns.length > 0) ? ns.reduce((a, b) => a + b, 0) : undefined;\n};\nconst deepExtend = function deepExtend(...xs) {\n let out = undefined;\n for (const x of xs) {\n if (isDictionary(x)) {\n if (!isDictionary(out)) {\n out = {};\n }\n for (const k in x) {\n out[k] = deepExtend(out[k], x[k]);\n }\n }\n else {\n out = x;\n }\n }\n return out;\n};\nconst merge = (target, ...args) => {\n // doesn't overwrite defined keys with undefined\n const overwrite = {};\n const merged = Object.assign({}, ...args);\n const keys = Object.keys(merged);\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n if (target[key] === undefined) {\n overwrite[key] = merged[key];\n }\n }\n // eslint-disable-next-line\n return Object.assign({}, target, overwrite);\n};\nexport { keys, values, extend, clone, index, ordered, unique, arrayConcat\n// ------------------------------------------------------------------------\n, inArray, toArray, isEmpty\n// ------------------------------------------------------------------------\n, keysort\n// ------------------------------------------------------------------------\n, indexBy\n// ------------------------------------------------------------------------\n, groupBy\n// ------------------------------------------------------------------------\n, filterBy\n// ------------------------------------------------------------------------\n// NB: MUTATES ARRAY!\n, sortBy, sortBy2\n// ------------------------------------------------------------------------\n, flatten\n// ------------------------------------------------------------------------\n, pluck\n// ------------------------------------------------------------------------\n, omit\n// ------------------------------------------------------------------------\n, sum\n// ------------------------------------------------------------------------\n, deepExtend\n// ------------------------------------------------------------------------\n, merge,\n// ----------------------------------------------------------------------------\n };\n","// ----------------------------------------------------------------------------\n\n// PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:\n// https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code\n// EDIT THE CORRESPONDENT .ts FILE INSTEAD\n\n// ----------------------------------------------------------------------------\n// unCamelCase has to work with the following edge cases\n//\n// parseOHLCVs > parse_ohlcvs\n// safeString2 > safe_string_2\n// safeStringN > safe_string_n\n// convertOHLCVToTradingView > convert_ohlcv_to_trading_view\n// fetchL2OrderBook > fetch_l2_order_book\n// stringToBase64 > string_to_base64\n// base64ToString > base64_to_string\n// parseHTTPResponse > parse_http_response\n// hasFetchOHLCV > has_fetch_ohlcv\n//\n// @ts-nocheck\nconst unCamelCase = (s) => {\n const exceptions = {\n 'fetchOHLCVWs': 'fetch_ohlcv_ws', // ws = websocket\n };\n if (exceptions[s]) {\n return exceptions[s];\n }\n return s.match(/[A-Z]/) ? s.replace(/[a-z0-9][A-Z]/g, (x) => x[0] + '_' + x[1]).replace(/[A-Z0-9][A-Z0-9][a-z][^$]/g, (x) => x[0] + '_' + x[1] + x[2] + x[3]).replace(/[a-z][0-9]$/g, (x) => x[0] + '_' + x[1]).toLowerCase() : s;\n};\nconst capitalize = (s) => {\n return s.length ? (s.charAt(0).toUpperCase() + s.slice(1)) : s;\n};\nconst strip = (s) => s.replace(/^\\s+|\\s+$/g, '');\n// ----------------------------------------------------------------------------\nconst uuid = (a) => {\n return a ? (a ^ Math.random() * 16 >> a / 4).toString(16) : ([1e7] + -1e3 + -4e3 + -8e3 + -1e11).replace(/[018]/g, uuid);\n};\nconst uuid16 = (a) => {\n return a ? (a ^ Math.random() * 16 >> a / 4).toString(16) : ([1e5] + 1e2 + 4e2 + 8e3).replace(/[018]/g, uuid16);\n};\nconst uuid22 = (a) => {\n return a ? (a ^ Math.random() * 16 >> a / 4).toString(16) : ([1e7] + 1e3 + 4e3 + 8e5).replace(/[018]/g, uuid22);\n};\nexport { uuid, uuid16, uuid22, unCamelCase, capitalize, strip, };\n","// ----------------------------------------------------------------------------\n\n// PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:\n// https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code\n// EDIT THE CORRESPONDENT .ts FILE INSTEAD\n\n// ------------------------------------------------------------------------\n//\n// NB: initially, I used objects for options passing:\n//\n// decimalToPrecision ('123.456', { digits: 2, round: true, afterPoint: true })\n//\n// ...but it turns out it's hard to port that across different languages and it is also\n// probably has a performance penalty -- while it's a performance critical code! So\n// I switched to using named constants instead, as it is actually more readable and\n// succinct, and surely doesn't come with any inherent performance downside:\n//\n// decimalToPrecision ('123.456', ROUND, 2, DECIMAL_PLACES)\nconst TRUNCATE = 0; // rounding mode\nconst ROUND = 1;\nconst ROUND_UP = 2;\nconst ROUND_DOWN = 3;\nconst DECIMAL_PLACES = 2; // digits counting mode\nconst SIGNIFICANT_DIGITS = 3;\nconst TICK_SIZE = 4;\nconst NO_PADDING = 5; // zero-padding mode\nconst PAD_WITH_ZERO = 6;\nconst precisionConstants = {\n ROUND,\n TRUNCATE,\n ROUND_UP,\n ROUND_DOWN,\n DECIMAL_PLACES,\n SIGNIFICANT_DIGITS,\n TICK_SIZE,\n NO_PADDING,\n PAD_WITH_ZERO,\n};\n/** Used when we turn precision like 1e-10 to the number 10, it represents the most precise value (1e-22) */\nconst MINIMUM_PRECISION = 22;\n/**\n * When rounding/truncating, we apply a first rounding with a precision of exchangePrecision + FIXED_POIND_ERROR_TOLERANCE.\n * We assume that all decimals after exchangePrecision + FIXED_POIND_ERROR_TOLERANCE are imprecise and introduced by floating point operation errors.\n * @example With precision = 3, mode = TRUNCATE, 1.999996 will be rounded to 2 (correct the fp error) and then to 2 because 6 was introduced by a fp operation\n * @example With precision = 3, mode = TRUNCATE, 1.999989 will be rounded to 1.99999 (correct the fp error) and then to 1.99 because 8 was not introduced by a fp operation\n */\nconst FIXED_POIND_ERROR_TOLERANCE = 2;\n/* ------------------------------------------------------------------------ */\n// See https://stackoverflow.com/questions/1685680/how-to-avoid-scientific-notation-for-large-numbers-in-javascript for discussion\nfunction numberToString(x) {\n if (x === undefined)\n return undefined;\n if (typeof x !== 'number')\n return x.toString();\n const s = x.toString();\n if (Math.abs(x) < 1.0) {\n const n_e = s.split('e-');\n const n = n_e[0].replace('.', '');\n const e = parseInt(n_e[1]);\n const neg = (s[0] === '-');\n if (e) {\n x = (neg ? '-' : '') + '0.' + (new Array(e)).join('0') + n.substring(neg);\n return x;\n }\n }\n else {\n const parts = s.split('e');\n if (parts[1]) {\n let e = parseInt(parts[1]);\n const m = parts[0].split('.');\n let part = '';\n if (m[1]) {\n e -= m[1].length;\n part = m[1];\n }\n return m[0] + part + (new Array(e + 1)).join('0');\n }\n }\n return s;\n}\n//-----------------------------------------------------------------------------\n// expects non-scientific notation\nconst truncate_regExpCache = [];\nconst truncate_to_string = (num, precision = 0) => {\n num = numberToString(num);\n if (precision > 0) {\n const re = truncate_regExpCache[precision] || (truncate_regExpCache[precision] = new RegExp('([-]*\\\\d+\\\\.\\\\d{' + precision + '})(\\\\d)'));\n const [, result] = num.toString().match(re) || [null, num];\n return result.toString();\n }\n return parseInt(num).toString();\n};\nconst truncate = (num, precision = 0) => parseFloat(truncate_to_string(num, precision));\nfunction precisionFromString(str) {\n // support string formats like '1e-4'\n if (str.indexOf('e') > -1) {\n const numStr = str.replace(/\\de/, '');\n return parseInt(numStr) * -1;\n }\n // support integer formats (without dot) like '1', '10' etc [Note: bug in decimalToPrecision, so this should not be used atm]\n // if (str.indexOf ('.') === -1) {\n // return str.length * -1\n // }\n // default strings like '0.0001'\n const split = str.replace(/0+$/g, '').split('.');\n return (split.length > 1) ? (split[1].length) : 0;\n}\n/* ------------------------------------------------------------------------ */\nconst decimalToPrecision = (x, roundingMode, numPrecisionDigits, countingMode = DECIMAL_PLACES, paddingMode = NO_PADDING, disableThreshold = false) => {\n // Turn precision value to an integer. ex: 1e-7 to 7\n let precision = numPrecisionDigits;\n if (typeof precision === 'string') {\n precision = parseFloat(precision);\n }\n if (!disableThreshold) {\n if (countingMode === TICK_SIZE) {\n const precisionDigitsString = internalDecimalToPrecision(precision, ROUND, MINIMUM_PRECISION, DECIMAL_PLACES, NO_PADDING);\n precision = precisionFromString(precisionDigitsString);\n }\n // Eliminate rounding errors\n x = internalDecimalToPrecision(x, ROUND, precision + FIXED_POIND_ERROR_TOLERANCE, DECIMAL_PLACES, NO_PADDING);\n }\n // Round the number\n return internalDecimalToPrecision(x, roundingMode, numPrecisionDigits, countingMode, paddingMode);\n};\nconst internalDecimalToPrecision = (x, roundingMode, numPrecisionDigits, countingMode = DECIMAL_PLACES, paddingMode = NO_PADDING) => {\n if (countingMode === TICK_SIZE) {\n if (typeof numPrecisionDigits === 'string') {\n numPrecisionDigits = parseFloat(numPrecisionDigits);\n }\n if (numPrecisionDigits <= 0) {\n throw new Error('TICK_SIZE cant be used with negative or zero numPrecisionDigits');\n }\n }\n if (numPrecisionDigits < 0) {\n const toNearest = Math.pow(10, -numPrecisionDigits);\n if (roundingMode === ROUND) {\n return (toNearest * internalDecimalToPrecision(x / toNearest, roundingMode, 0, countingMode, paddingMode)).toString();\n }\n if (roundingMode === TRUNCATE) {\n return (x - (x % toNearest)).toString();\n }\n }\n /* handle tick size */\n if (countingMode === TICK_SIZE) {\n const precisionDigitsString = internalDecimalToPrecision(numPrecisionDigits, ROUND, MINIMUM_PRECISION, DECIMAL_PLACES, NO_PADDING);\n const newNumPrecisionDigits = precisionFromString(precisionDigitsString);\n let missing = x % numPrecisionDigits;\n // See: https://github.com/ccxt/ccxt/pull/6486\n missing = Number(internalDecimalToPrecision(missing, ROUND, 8, DECIMAL_PLACES, NO_PADDING));\n const fpError = internalDecimalToPrecision(missing / numPrecisionDigits, ROUND, Math.max(newNumPrecisionDigits, 8), DECIMAL_PLACES, NO_PADDING);\n if (precisionFromString(fpError) !== 0) {\n if (roundingMode === ROUND) {\n if (x > 0) {\n if (missing >= numPrecisionDigits / 2) {\n x = x - missing + numPrecisionDigits;\n }\n else {\n x = x - missing;\n }\n }\n else {\n if (missing >= numPrecisionDigits / 2) {\n x = Number(x) - missing;\n }\n else {\n x = Number(x) - missing - numPrecisionDigits;\n }\n }\n }\n else if (roundingMode === TRUNCATE) {\n x = x - missing;\n }\n }\n return internalDecimalToPrecision(x, roundingMode, newNumPrecisionDigits, DECIMAL_PLACES, paddingMode);\n }\n /* Convert to a string (if needed), skip leading minus sign (if any) */\n const str = numberToString(x);\n const isNegative = str[0] === '-';\n const strStart = isNegative ? 1 : 0;\n const strEnd = str.length;\n /* Find the dot position in the source buffer */\n for (var strDot = 0; strDot < strEnd; strDot++) {\n if (str[strDot] === '.')\n break;\n }\n const hasDot = strDot < str.length;\n /* Char code constants */\n const MINUS = 45;\n const DOT = 46;\n const ZERO = 48;\n const ONE = (ZERO + 1);\n const FIVE = (ZERO + 5);\n const NINE = (ZERO + 9);\n /* For -123.4567 the `chars` array will hold 01234567 (leading zero is reserved for rounding cases when 099 → 100) */\n const chars = new Uint8Array((strEnd - strStart) + (hasDot ? 0 : 1));\n chars[0] = ZERO;\n /* Validate & copy digits, determine certain locations in the resulting buffer */\n let afterDot = chars.length;\n let digitsStart = -1; // significant digits\n let digitsEnd = -1;\n for (var i = 1, j = strStart; j < strEnd; j++, i++) {\n const c = str.charCodeAt(j);\n if (c === DOT) {\n afterDot = i--;\n }\n else if ((c < ZERO) || (c > NINE)) {\n throw new Error(`${str}: invalid number (contains an illegal character '${str[i - 1]}')`);\n }\n else {\n chars[i] = c;\n if ((c !== ZERO) && (digitsStart < 0))\n digitsStart = i;\n }\n }\n if (digitsStart < 0)\n digitsStart = 1;\n /* Determine the range to cut */\n let precisionStart = (countingMode === DECIMAL_PLACES) ? afterDot // 0.(0)001234567\n : digitsStart; // 0.00(1)234567\n let precisionEnd = precisionStart\n + numPrecisionDigits;\n /* Reset the last significant digit index, as it will change during the rounding/truncation. */\n digitsEnd = -1;\n // Perform rounding/truncation per digit, from digitsEnd to digitsStart, by using the following\n // algorithm (rounding 999 → 1000, as an example):\n //\n // step = i=3 i=2 i=1 i=0\n //\n // chars = 0999 0999 0900 1000\n // memo = ---0 --1- -1-- 0---\n let allZeros = true;\n let signNeeded = isNegative;\n for (let i = chars.length - 1, memo = 0; i >= 0; i--) {\n let c = chars[i];\n if (i !== 0) {\n c += memo;\n if (i >= (precisionStart + numPrecisionDigits)) {\n const ceil = (roundingMode === ROUND)\n && (c >= FIVE)\n && !((c === FIVE) && memo); // prevents rounding of 1.45 to 2\n const roundUp = (roundingMode === ROUND_UP) && (c >= ONE);\n c = ceil || roundUp ? (NINE + 1) : ZERO;\n }\n if (c > NINE) {\n c = ZERO;\n memo = 1;\n }\n else\n memo = 0;\n }\n else if (memo)\n c = ONE; // leading extra digit (0900 → 1000)\n chars[i] = c;\n if (c !== ZERO) {\n allZeros = false;\n digitsStart = i;\n digitsEnd = (digitsEnd < 0) ? (i + 1) : digitsEnd;\n }\n }\n /* Update the precision range, as `digitsStart` may have changed... & the need for a negative sign if it is only 0 */\n if (countingMode === SIGNIFICANT_DIGITS) {\n precisionStart = digitsStart;\n precisionEnd = precisionStart + numPrecisionDigits;\n }\n if (allZeros) {\n signNeeded = false;\n }\n /* Determine the input character range */\n const readStart = ((digitsStart >= afterDot) || allZeros) ? (afterDot - 1) : digitsStart; // 0.000(1)234 ----> (0).0001234\n const readEnd = (digitsEnd < afterDot) ? (afterDot) : digitsEnd; // 12(3)000 ----> 123000( )\n /* Compute various sub-ranges */\n const nSign = (signNeeded ? 1 : 0); // (-)123.456\n const nBeforeDot = (nSign + (afterDot - readStart)); // (-123).456\n const nAfterDot = Math.max(readEnd - afterDot, 0); // -123.(456)\n const actualLength = (readEnd - readStart); // -(123.456)\n const desiredLength = (paddingMode === NO_PADDING)\n ? (actualLength) // -(123.456)\n : (precisionEnd - readStart); // -(123.456 )\n const pad = Math.max(desiredLength - actualLength, 0); // -123.456( )\n const padStart = (nBeforeDot + 1 + nAfterDot); // -123.456( )\n const padEnd = (padStart + pad); // -123.456 ( )\n const isInteger = (nAfterDot + pad) === 0; // -123\n /* Fill the output buffer with characters */\n const out = new Uint8Array(nBeforeDot + (isInteger ? 0 : 1) + nAfterDot + pad);\n // ------------------------------------------------------------------------------------------ // ---------------------\n if (signNeeded)\n out[0] = MINUS; // - minus sign\n for (i = nSign, j = readStart; i < nBeforeDot; i++, j++)\n out[i] = chars[j]; // 123 before dot\n if (!isInteger)\n out[nBeforeDot] = DOT; // . dot\n for (i = nBeforeDot + 1, j = afterDot; i < padStart; i++, j++)\n out[i] = chars[j]; // 456 after dot\n for (i = padStart; i < padEnd; i++)\n out[i] = ZERO; // 000 padding\n /* Build a string from the output buffer */\n return String.fromCharCode(...out);\n};\nfunction omitZero(stringNumber) {\n if (stringNumber === undefined || stringNumber === '') {\n return undefined;\n }\n if (parseFloat(stringNumber) === 0) {\n return undefined;\n }\n return stringNumber;\n}\n/* ------------------------------------------------------------------------ */\nexport { numberToString, precisionFromString, decimalToPrecision, truncate_to_string, truncate, omitZero, precisionConstants, ROUND, TRUNCATE, ROUND_UP, ROUND_DOWN, DECIMAL_PLACES, SIGNIFICANT_DIGITS, TICK_SIZE, NO_PADDING, PAD_WITH_ZERO, };\n/* ------------------------------------------------------------------------ */\n","// ----------------------------------------------------------------------------\n\n// PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:\n// https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code\n// EDIT THE CORRESPONDENT .ts FILE INSTEAD\n\n/*! scure-base - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n// Utilities\nexport function assertNumber(n) {\n if (!Number.isSafeInteger(n))\n throw new Error(`Wrong integer: ${n}`);\n}\nfunction chain(...args) {\n // Wrap call in closure so JIT can inline calls\n const wrap = (a, b) => (c) => a(b(c));\n // Construct chain of args[-1].encode(args[-2].encode([...]))\n const encode = Array.from(args)\n .reverse()\n .reduce((acc, i) => (acc ? wrap(acc, i.encode) : i.encode), undefined);\n // Construct chain of args[0].decode(args[1].decode(...))\n const decode = args.reduce((acc, i) => (acc ? wrap(acc, i.decode) : i.decode), undefined);\n return { encode, decode };\n}\n// Encodes integer radix representation to array of strings using alphabet and back\nfunction alphabet(alphabet) {\n return {\n encode: (digits) => {\n if (!Array.isArray(digits) || (digits.length && typeof digits[0] !== 'number'))\n throw new Error('alphabet.encode input should be an array of numbers');\n return digits.map((i) => {\n assertNumber(i);\n if (i < 0 || i >= alphabet.length)\n throw new Error(`Digit index outside alphabet: ${i} (alphabet: ${alphabet.length})`);\n return alphabet[i];\n });\n },\n decode: (input) => {\n if (!Array.isArray(input) || (input.length && typeof input[0] !== 'string'))\n throw new Error('alphabet.decode input should be array of strings');\n return input.map((letter) => {\n if (typeof letter !== 'string')\n throw new Error(`alphabet.decode: not string element=${letter}`);\n const index = alphabet.indexOf(letter);\n if (index === -1)\n throw new Error(`Unknown letter: \"${letter}\". Allowed: ${alphabet}`);\n return index;\n });\n },\n };\n}\nfunction join(separator = '') {\n if (typeof separator !== 'string')\n throw new Error('join separator should be string');\n return {\n encode: (from) => {\n if (!Array.isArray(from) || (from.length && typeof from[0] !== 'string'))\n throw new Error('join.encode input should be array of strings');\n for (let i of from)\n if (typeof i !== 'string')\n throw new Error(`join.encode: non-string input=${i}`);\n return from.join(separator);\n },\n decode: (to) => {\n if (typeof to !== 'string')\n throw new Error('join.decode input should be string');\n return to.split(separator);\n },\n };\n}\n// Pad strings array so it has integer number of bits\nfunction padding(bits, chr = '=') {\n assertNumber(bits);\n if (typeof chr !== 'string')\n throw new Error('padding chr should be string');\n return {\n encode(data) {\n if (!Array.isArray(data) || (data.length && typeof data[0] !== 'string'))\n throw new Error('padding.encode input should be array of strings');\n for (let i of data)\n if (typeof i !== 'string')\n throw new Error(`padding.encode: non-string input=${i}`);\n while ((data.length * bits) % 8)\n data.push(chr);\n return data;\n },\n decode(input) {\n if (!Array.isArray(input) || (input.length && typeof input[0] !== 'string'))\n throw new Error('padding.encode input should be array of strings');\n for (let i of input)\n if (typeof i !== 'string')\n throw new Error(`padding.decode: non-string input=${i}`);\n let end = input.length;\n if ((end * bits) % 8)\n throw new Error('Invalid padding: string should have whole number of bytes');\n for (; end > 0 && input[end - 1] === chr; end--) {\n if (!(((end - 1) * bits) % 8))\n throw new Error('Invalid padding: string has too much padding');\n }\n return input.slice(0, end);\n },\n };\n}\nfunction normalize(fn) {\n if (typeof fn !== 'function')\n throw new Error('normalize fn should be function');\n return { encode: (from) => from, decode: (to) => fn(to) };\n}\n// NOTE: it has quadratic time complexity\nfunction convertRadix(data, from, to) {\n // base 1 is impossible\n if (from < 2)\n throw new Error(`convertRadix: wrong from=${from}, base cannot be less than 2`);\n if (to < 2)\n throw new Error(`convertRadix: wrong to=${to}, base cannot be less than 2`);\n if (!Array.isArray(data))\n throw new Error('convertRadix: data should be array');\n if (!data.length)\n return [];\n let pos = 0;\n const res = [];\n const digits = Array.from(data);\n digits.forEach((d) => {\n assertNumber(d);\n if (d < 0 || d >= from)\n throw new Error(`Wrong integer: ${d}`);\n });\n while (true) {\n let carry = 0;\n let done = true;\n for (let i = pos; i < digits.length; i++) {\n const digit = digits[i];\n const digitBase = from * carry + digit;\n if (!Number.isSafeInteger(digitBase) ||\n (from * carry) / from !== carry ||\n digitBase - digit !== from * carry) {\n throw new Error('convertRadix: carry overflow');\n }\n carry = digitBase % to;\n digits[i] = Math.floor(digitBase / to);\n if (!Number.isSafeInteger(digits[i]) || digits[i] * to + carry !== digitBase)\n throw new Error('convertRadix: carry overflow');\n if (!done)\n continue;\n else if (!digits[i])\n pos = i;\n else\n done = false;\n }\n res.push(carry);\n if (done)\n break;\n }\n for (let i = 0; i < data.length - 1 && data[i] === 0; i++)\n res.push(0);\n return res.reverse();\n}\nconst gcd = (a, b) => (!b ? a : gcd(b, a % b));\nconst radix2carry = (from, to) => from + (to - gcd(from, to));\n// BigInt is 5x slower\nfunction convertRadix2(data, from, to, padding) {\n if (!Array.isArray(data))\n throw new Error('convertRadix2: data should be array');\n if (from <= 0 || from > 32)\n throw new Error(`convertRadix2: wrong from=${from}`);\n if (to <= 0 || to > 32)\n throw new Error(`convertRadix2: wrong to=${to}`);\n if (radix2carry(from, to) > 32) {\n throw new Error(`convertRadix2: carry overflow from=${from} to=${to} carryBits=${radix2carry(from, to)}`);\n }\n let carry = 0;\n let pos = 0; // bitwise position in current element\n const mask = 2 ** to - 1;\n const res = [];\n for (const n of data) {\n assertNumber(n);\n if (n >= 2 ** from)\n throw new Error(`convertRadix2: invalid data word=${n} from=${from}`);\n carry = (carry << from) | n;\n if (pos + from > 32)\n throw new Error(`convertRadix2: carry overflow pos=${pos} from=${from}`);\n pos += from;\n for (; pos >= to; pos -= to)\n res.push(((carry >> (pos - to)) & mask) >>> 0);\n carry &= 2 ** pos - 1; // clean carry, otherwise it will cause overflow\n }\n carry = (carry << (to - pos)) & mask;\n if (!padding && pos >= from)\n throw new Error('Excess padding');\n if (!padding && carry)\n throw new Error(`Non-zero padding: ${carry}`);\n if (padding && pos > 0)\n res.push(carry >>> 0);\n return res;\n}\nfunction radix(num) {\n assertNumber(num);\n return {\n encode: (bytes) => {\n if (!(bytes instanceof Uint8Array))\n throw new Error('radix.encode input should be Uint8Array');\n return convertRadix(Array.from(bytes), 2 ** 8, num);\n },\n decode: (digits) => {\n if (!Array.isArray(digits) || (digits.length && typeof digits[0] !== 'number'))\n throw new Error('radix.decode input should be array of strings');\n return Uint8Array.from(convertRadix(digits, num, 2 ** 8));\n },\n };\n}\n// If both bases are power of same number (like `2**8 <-> 2**64`),\n// there is a linear algorithm. For now we have implementation for power-of-two bases only\nfunction radix2(bits, revPadding = false) {\n assertNumber(bits);\n if (bits <= 0 || bits > 32)\n throw new Error('radix2: bits should be in (0..32]');\n if (radix2carry(8, bits) > 32 || radix2carry(bits, 8) > 32)\n throw new Error('radix2: carry overflow');\n return {\n encode: (bytes) => {\n if (!(bytes instanceof Uint8Array))\n throw new Error('radix2.encode input should be Uint8Array');\n return convertRadix2(Array.from(bytes), 8, bits, !revPadding);\n },\n decode: (digits) => {\n if (!Array.isArray(digits) || (digits.length && typeof digits[0] !== 'number'))\n throw new Error('radix2.decode input should be array of strings');\n return Uint8Array.from(convertRadix2(digits, bits, 8, revPadding));\n },\n };\n}\nfunction unsafeWrapper(fn) {\n if (typeof fn !== 'function')\n throw new Error('unsafeWrapper fn should be function');\n return function (...args) {\n try {\n return fn.apply(null, args);\n }\n catch (e) { }\n };\n}\nfunction checksum(len, fn) {\n assertNumber(len);\n if (typeof fn !== 'function')\n throw new Error('checksum fn should be function');\n return {\n encode(data) {\n if (!(data instanceof Uint8Array))\n throw new Error('checksum.encode: input should be Uint8Array');\n const checksum = fn(data).slice(0, len);\n const res = new Uint8Array(data.length + len);\n res.set(data);\n res.set(checksum, data.length);\n return res;\n },\n decode(data) {\n if (!(data instanceof Uint8Array))\n throw new Error('checksum.decode: input should be Uint8Array');\n const payload = data.slice(0, -len);\n const newChecksum = fn(payload).slice(0, len);\n const oldChecksum = data.slice(-len);\n for (let i = 0; i < len; i++)\n if (newChecksum[i] !== oldChecksum[i])\n throw new Error('Invalid checksum');\n return payload;\n },\n };\n}\nexport const utils = { alphabet, chain, checksum, radix, radix2, join, padding };\n// RFC 4648 aka RFC 3548\n// ---------------------\nexport const base16 = chain(radix2(4), alphabet('0123456789abcdef'), join(''));\nexport const base32 = chain(radix2(5), alphabet('ABCDEFGHIJKLMNOPQRSTUVWXYZ234567'), padding(5), join(''));\nexport const base32hex = chain(radix2(5), alphabet('0123456789ABCDEFGHIJKLMNOPQRSTUV'), padding(5), join(''));\nexport const base32crockford = chain(radix2(5), alphabet('0123456789ABCDEFGHJKMNPQRSTVWXYZ'), join(''), normalize((s) => s.toUpperCase().replace(/O/g, '0').replace(/[IL]/g, '1')));\nexport const base64 = chain(radix2(6), alphabet('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'), padding(6), join(''));\nexport const base64url = chain(radix2(6), alphabet('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_'), padding(6), join(''));\n// base58 code\n// -----------\nconst genBase58 = (abc) => chain(radix(58), alphabet(abc), join(''));\nexport const base58 = genBase58('123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz');\nexport const base58flickr = genBase58('123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ');\nexport const base58xrp = genBase58('rpshnaf39wBUDNEGHJKLM4PQRST7VWXYZ2bcdeCg65jkm8oFqi1tuvAxyz');\n// xmr ver is done in 8-byte blocks (which equals 11 chars in decoding). Last (non-full) block padded with '1' to size in XMR_BLOCK_LEN.\n// Block encoding significantly reduces quadratic complexity of base58.\n// Data len (index) -> encoded block len\nconst XMR_BLOCK_LEN = [0, 2, 3, 5, 6, 7, 9, 10, 11];\nexport const base58xmr = {\n encode(data) {\n let res = '';\n for (let i = 0; i < data.length; i += 8) {\n const block = data.subarray(i, i + 8);\n res += base58.encode(block).padStart(XMR_BLOCK_LEN[block.length], '1');\n }\n return res;\n },\n decode(str) {\n let res = [];\n for (let i = 0; i < str.length; i += 11) {\n const slice = str.slice(i, i + 11);\n const blockLen = XMR_BLOCK_LEN.indexOf(slice.length);\n const block = base58.decode(slice);\n for (let j = 0; j < block.length - blockLen; j++) {\n if (block[j] !== 0)\n throw new Error('base58xmr: wrong padding');\n }\n res = res.concat(Array.from(block.slice(block.length - blockLen)));\n }\n return Uint8Array.from(res);\n },\n};\nexport const base58check = (sha256) => chain(checksum(4, (data) => sha256(sha256(data))), base58);\nconst BECH_ALPHABET = chain(alphabet('qpzry9x8gf2tvdw0s3jn54khce6mua7l'), join(''));\nconst POLYMOD_GENERATORS = [0x3b6a57b2, 0x26508e6d, 0x1ea119fa, 0x3d4233dd, 0x2a1462b3];\nfunction bech32Polymod(pre) {\n const b = pre >> 25;\n let chk = (pre & 0x1ffffff) << 5;\n for (let i = 0; i < POLYMOD_GENERATORS.length; i++) {\n if (((b >> i) & 1) === 1)\n chk ^= POLYMOD_GENERATORS[i];\n }\n return chk;\n}\nfunction bechChecksum(prefix, words, encodingConst = 1) {\n const len = prefix.length;\n let chk = 1;\n for (let i = 0; i < len; i++) {\n const c = prefix.charCodeAt(i);\n if (c < 33 || c > 126)\n throw new Error(`Invalid prefix (${prefix})`);\n chk = bech32Polymod(chk) ^ (c >> 5);\n }\n chk = bech32Polymod(chk);\n for (let i = 0; i < len; i++)\n chk = bech32Polymod(chk) ^ (prefix.charCodeAt(i) & 0x1f);\n for (let v of words)\n chk = bech32Polymod(chk) ^ v;\n for (let i = 0; i < 6; i++)\n chk = bech32Polymod(chk);\n chk ^= encodingConst;\n return BECH_ALPHABET.encode(convertRadix2([chk % 2 ** 30], 30, 5, false));\n}\nfunction genBech32(encoding) {\n const ENCODING_CONST = encoding === 'bech32' ? 1 : 0x2bc830a3;\n const _words = radix2(5);\n const fromWords = _words.decode;\n const toWords = _words.encode;\n const fromWordsUnsafe = unsafeWrapper(fromWords);\n function encode(prefix, words, limit = 90) {\n if (typeof prefix !== 'string')\n throw new Error(`bech32.encode prefix should be string, not ${typeof prefix}`);\n if (!Array.isArray(words) || (words.length && typeof words[0] !== 'number'))\n throw new Error(`bech32.encode words should be array of numbers, not ${typeof words}`);\n const actualLength = prefix.length + 7 + words.length;\n if (limit !== false && actualLength > limit)\n throw new TypeError(`Length ${actualLength} exceeds limit ${limit}`);\n prefix = prefix.toLowerCase();\n return `${prefix}1${BECH_ALPHABET.encode(words)}${bechChecksum(prefix, words, ENCODING_CONST)}`;\n }\n function decode(str, limit = 90) {\n if (typeof str !== 'string')\n throw new Error(`bech32.decode input should be string, not ${typeof str}`);\n if (str.length < 8 || (limit !== false && str.length > limit))\n throw new TypeError(`Wrong string length: ${str.length} (${str}). Expected (8..${limit})`);\n // don't allow mixed case\n const lowered = str.toLowerCase();\n if (str !== lowered && str !== str.toUpperCase())\n throw new Error(`String must be lowercase or uppercase`);\n str = lowered;\n const sepIndex = str.lastIndexOf('1');\n if (sepIndex === 0 || sepIndex === -1)\n throw new Error(`Letter \"1\" must be present between prefix and data only`);\n const prefix = str.slice(0, sepIndex);\n const _words = str.slice(sepIndex + 1);\n if (_words.length < 6)\n throw new Error('Data must be at least 6 characters long');\n const words = BECH_ALPHABET.decode(_words).slice(0, -6);\n const sum = bechChecksum(prefix, words, ENCODING_CONST);\n if (!_words.endsWith(sum))\n throw new Error(`Invalid checksum in ${str}: expected \"${sum}\"`);\n return { prefix, words };\n }\n const decodeUnsafe = unsafeWrapper(decode);\n function decodeToBytes(str) {\n const { prefix, words } = decode(str, false);\n return { prefix, words, bytes: fromWords(words) };\n }\n return { encode, decode, decodeToBytes, decodeUnsafe, fromWords, fromWordsUnsafe, toWords };\n}\nexport const bech32 = genBech32('bech32');\nexport const bech32m = genBech32('bech32m');\nexport const utf8 = {\n encode: (data) => new TextDecoder().decode(data),\n decode: (str) => new TextEncoder().encode(str),\n};\nexport const hex = chain(radix2(4), alphabet('0123456789abcdef'), join(''), normalize((s) => {\n if (typeof s !== 'string' || s.length % 2)\n throw new TypeError(`hex.decode: expected string, got ${typeof s} with length ${s.length}`);\n return s.toLowerCase();\n}));\n// prettier-ignore\nconst CODERS = {\n utf8, hex, base16, base32, base64, base64url, base58, base58xmr\n};\nconst coderTypeError = `Invalid encoding type. Available types: ${Object.keys(CODERS).join(', ')}`;\nexport const bytesToString = (type, bytes) => {\n if (typeof type !== 'string' || !CODERS.hasOwnProperty(type))\n throw new TypeError(coderTypeError);\n if (!(bytes instanceof Uint8Array))\n throw new TypeError('bytesToString() expects Uint8Array');\n return CODERS[type].encode(bytes);\n};\nexport const str = bytesToString; // as in python, but for bytes only\nexport const stringToBytes = (type, str) => {\n if (!CODERS.hasOwnProperty(type))\n throw new TypeError(coderTypeError);\n if (typeof str !== 'string')\n throw new TypeError('stringToBytes() expects string');\n return CODERS[type].decode(str);\n};\nexport const bytes = stringToBytes;\n","// ----------------------------------------------------------------------------\n\n// PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:\n// https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code\n// EDIT THE CORRESPONDENT .ts FILE INSTEAD\n\n/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nconst _0n = BigInt(0);\nconst _1n = BigInt(1);\nconst _2n = BigInt(2);\nconst u8a = (a) => a instanceof Uint8Array;\nconst hexes = Array.from({ length: 256 }, (v, i) => i.toString(16).padStart(2, '0'));\nexport function bytesToHex(bytes) {\n if (!u8a(bytes))\n throw new Error('Uint8Array expected');\n // pre-caching improves the speed 6x\n let hex = '';\n for (let i = 0; i < bytes.length; i++) {\n hex += hexes[bytes[i]];\n }\n return hex;\n}\nexport function numberToHexUnpadded(num) {\n const hex = num.toString(16);\n return hex.length & 1 ? `0${hex}` : hex;\n}\nexport function hexToNumber(hex) {\n if (typeof hex !== 'string')\n throw new Error('hex string expected, got ' + typeof hex);\n // Big Endian\n return BigInt(hex === '' ? '0' : `0x${hex}`);\n}\n// Caching slows it down 2-3x\nexport function hexToBytes(hex) {\n if (typeof hex !== 'string')\n throw new Error('hex string expected, got ' + typeof hex);\n if (hex.length % 2)\n throw new Error('hex string is invalid: unpadded ' + hex.length);\n const array = new Uint8Array(hex.length / 2);\n for (let i = 0; i < array.length; i++) {\n const j = i * 2;\n const hexByte = hex.slice(j, j + 2);\n const byte = Number.parseInt(hexByte, 16);\n if (Number.isNaN(byte) || byte < 0)\n throw new Error('invalid byte sequence');\n array[i] = byte;\n }\n return array;\n}\n// Big Endian\nexport function bytesToNumberBE(bytes) {\n return hexToNumber(bytesToHex(bytes));\n}\nexport function bytesToNumberLE(bytes) {\n if (!u8a(bytes))\n throw new Error('Uint8Array expected');\n return hexToNumber(bytesToHex(Uint8Array.from(bytes).reverse()));\n}\nexport const numberToBytesBE = (n, len) => hexToBytes(n.toString(16).padStart(len * 2, '0'));\nexport const numberToBytesLE = (n, len) => numberToBytesBE(n, len).reverse();\n// Returns variable number bytes (minimal bigint encoding?)\nexport const numberToVarBytesBE = (n) => hexToBytes(numberToHexUnpadded(n));\nexport function ensureBytes(title, hex, expectedLength) {\n let res;\n if (typeof hex === 'string') {\n try {\n res = hexToBytes(hex);\n }\n catch (e) {\n throw new Error(`${title} must be valid hex string, got \"${hex}\". Cause: ${e}`);\n }\n }\n else if (u8a(hex)) {\n // Uint8Array.from() instead of hash.slice() because node.js Buffer\n // is instance of Uint8Array, and its slice() creates **mutable** copy\n res = Uint8Array.from(hex);\n }\n else {\n throw new Error(`${title} must be hex string or Uint8Array`);\n }\n const len = res.length;\n if (typeof expectedLength === 'number' && len !== expectedLength)\n throw new Error(`${title} expected ${expectedLength} bytes, got ${len}`);\n return res;\n}\n// Copies several Uint8Arrays into one.\nexport function concatBytes(...arrs) {\n const r = new Uint8Array(arrs.reduce((sum, a) => sum + a.length, 0));\n let pad = 0; // walk through each item, ensure they have proper type\n arrs.forEach((a) => {\n if (!u8a(a))\n throw new Error('Uint8Array expected');\n r.set(a, pad);\n pad += a.length;\n });\n return r;\n}\nexport function equalBytes(b1, b2) {\n // We don't care about timing attacks here\n if (b1.length !== b2.length)\n return false;\n for (let i = 0; i < b1.length; i++)\n if (b1[i] !== b2[i])\n return false;\n return true;\n}\nexport function utf8ToBytes(str) {\n if (typeof str !== 'string') {\n throw new Error(`utf8ToBytes expected string, got ${typeof str}`);\n }\n return new TextEncoder().encode(str);\n}\n// Bit operations\n// Amount of bits inside bigint (Same as n.toString(2).length)\nexport function bitLen(n) {\n let len;\n for (len = 0; n > 0n; n >>= _1n, len += 1)\n ;\n return len;\n}\n// Gets single bit at position. NOTE: first bit position is 0 (same as arrays)\n// Same as !!+Array.from(n.toString(2)).reverse()[pos]\nexport const bitGet = (n, pos) => (n >> BigInt(pos)) & 1n;\n// Sets single bit at position\nexport const bitSet = (n, pos, value) => n | ((value ? _1n : _0n) << BigInt(pos));\n// Return mask for N bits (Same as BigInt(`0b${Array(i).fill('1').join('')}`))\n// Not using ** operator with bigints for old engines.\nexport const bitMask = (n) => (_2n << BigInt(n - 1)) - _1n;\n// DRBG\nconst u8n = (data) => new Uint8Array(data); // creates Uint8Array\nconst u8fr = (arr) => Uint8Array.from(arr); // another shortcut\n/**\n * Minimal HMAC-DRBG from NIST 800-90 for RFC6979 sigs.\n * @returns function that will call DRBG until 2nd arg returns something meaningful\n * @example\n * const drbg = createHmacDRBG<Key>(32, 32, hmac);\n * drbg(seed, bytesToKey); // bytesToKey must return Key or undefined\n */\nexport function createHmacDrbg(hashLen, qByteLen, hmacFn) {\n if (typeof hashLen !== 'number' || hashLen < 2)\n throw new Error('hashLen must be a number');\n if (typeof qByteLen !== 'number' || qByteLen < 2)\n throw new Error('qByteLen must be a number');\n if (typeof hmacFn !== 'function')\n throw new Error('hmacFn must be a function');\n // Step B, Step C: set hashLen to 8*ceil(hlen/8)\n let v = u8n(hashLen); // Minimal non-full-spec HMAC-DRBG from NIST 800-90 for RFC6979 sigs.\n let k = u8n(hashLen); // Steps B and C of RFC6979 3.2: set hashLen, in our case always same\n let i = 0; // Iterations counter, will throw when over 1000\n const reset = () => {\n v.fill(1);\n k.fill(0);\n i = 0;\n };\n const h = (...b) => hmacFn(k, v, ...b); // hmac(k)(v, ...values)\n const reseed = (seed = u8n()) => {\n // HMAC-DRBG reseed() function. Steps D-G\n k = h(u8fr([0x00]), seed); // k = hmac(k || v || 0x00 || seed)\n v = h(); // v = hmac(k || v)\n if (seed.length === 0)\n return;\n k = h(u8fr([0x01]), seed); // k = hmac(k || v || 0x01 || seed)\n v = h(); // v = hmac(k || v)\n };\n const gen = () => {\n // HMAC-DRBG generate() function\n if (i++ >= 1000)\n throw new Error('drbg: tried 1000 values');\n let len = 0;\n const out = [];\n while (len < qByteLen) {\n v = h();\n const sl = v.slice();\n out.push(sl);\n len += v.length;\n }\n return concatBytes(...out);\n };\n const genUntil = (seed, pred) => {\n reset();\n reseed(seed); // Steps D-G\n let res = undefined; // Step H: grind until k is in [1..n-1]\n while (!(res = pred(gen())))\n reseed();\n reset();\n return res;\n };\n return genUntil;\n}\n// Validating curves and fields\nconst validatorFns = {\n bigint: (val) => typeof val === 'bigint',\n function: (val) => typeof val === 'function',\n boolean: (val) => typeof val === 'boolean',\n string: (val) => typeof val === 'string',\n isSafeInteger: (val) => Number.isSafeInteger(val),\n array: (val) => Array.isArray(val),\n field: (val, object) => object.Fp.isValid(val),\n hash: (val) => typeof val === 'function' && Number.isSafeInteger(val.outputLen),\n};\n// type Record<K extends string | number | symbol, T> = { [P in K]: T; }\nexport function validateObject(object, validators, optValidators = {}) {\n const checkField = (fieldName, type, isOptional) => {\n const checkVal = validatorFns[type];\n if (typeof checkVal !== 'function')\n throw new Error(`Invalid validator \"${type}\", expected function`);\n const val = object[fieldName];\n if (isOptional && val === undefined)\n return;\n if (!checkVal(val, object)) {\n throw new Error(`Invalid param ${String(fieldName)}=${val} (${typeof val}), expected ${type}`);\n }\n };\n for (const [fieldName, type] of Object.entries(validators))\n checkField(fieldName, type, false);\n for (const [fieldName, type] of Object.entries(optValidators))\n checkField(fieldName, type, true);\n return object;\n}\n// validate type tests\n// const o: { a: number; b: number; c: number } = { a: 1, b: 5, c: 6 };\n// const z0 = validateObject(o, { a: 'isSafeInteger' }, { c: 'bigint' }); // Ok!\n// // Should fail type-check\n// const z1 = validateObject(o, { a: 'tmp' }, { c: 'zz' });\n// const z2 = validateObject(o, { a: 'isSafeInteger' }, { c: 'zz' });\n// const z3 = validateObject(o, { test: 'boolean', z: 'bug' });\n// const z4 = validateObject(o, { a: 'boolean', z: 'bug' });\n","// ----------------------------------------------------------------------------\n\n// PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:\n// https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code\n// EDIT THE CORRESPONDENT .ts FILE INSTEAD\n\n// (function () {\n// \t\"use strict\";\n// Serializes a value to a MessagePack byte array.\n//\n// data: The value to serialize. This can be a scalar, array or object.\n// options: An object that defines additional options.\n// - multiple: (boolean) Indicates whether multiple values in data are concatenated to multiple MessagePack arrays. Default: false.\n// - invalidTypeReplacement:\n// (any) The value that is used to replace values of unsupported types.\n// (function) A function that returns such a value, given the original value as parameter.\nfunction serialize(data, options) {\n if (options && options.multiple && !Array.isArray(data)) {\n throw new Error(\"Invalid argument type: Expected an Array to serialize multiple values.\");\n }\n const pow32 = 0x100000000; // 2^32\n let floatBuffer, floatView;\n let array = new Uint8Array(128);\n let length = 0;\n if (options && options.multiple) {\n for (let i = 0; i < data.length; i++) {\n append(data[i]);\n }\n }\n else {\n append(data);\n }\n return array.subarray(0, length);\n function append(data, isReplacement) {\n switch (typeof data) {\n case \"undefined\":\n appendNull(data);\n break;\n case \"boolean\":\n appendBoolean(data);\n break;\n case \"number\":\n appendNumber(data);\n break;\n case \"string\":\n appendString(data);\n break;\n case \"object\":\n if (data === null)\n appendNull(data);\n else if (data instanceof Date)\n appendDate(data);\n else if (Array.isArray(data))\n appendArray(data);\n else if (data instanceof Uint8Array || data instanceof Uint8ClampedArray)\n appendBinArray(data);\n else if (data instanceof Int8Array || data instanceof Int16Array || data instanceof Uint16Array ||\n data instanceof Int32Array || data instanceof Uint32Array ||\n data instanceof Float32Array || data instanceof Float64Array)\n appendArray(data);\n else\n appendObject(data);\n break;\n default:\n if (!isReplacement && options && options.invalidTypeReplacement) {\n if (typeof options.invalidTypeReplacement === \"function\")\n append(options.invalidTypeReplacement(data), true);\n else\n append(options.invalidTypeReplacement, true);\n }\n else {\n throw new Error(\"Invalid argument type: The type '\" + (typeof data) + \"' cannot be serialized.\");\n }\n }\n }\n function appendNull(data) {\n appendByte(0xc0);\n }\n function appendBoolean(data) {\n appendByte(data ? 0xc3 : 0xc2);\n }\n function appendNumber(data) {\n if (isFinite(data) && Math.floor(data) === data) {\n // Integer\n if (data >= 0 && data <= 0x7f) {\n appendByte(data);\n }\n else if (data < 0 && data >= -0x20) {\n appendByte(data);\n }\n else if (data > 0 && data <= 0xff) { // uint8\n appendBytes([0xcc, data]);\n }\n else if (data >= -0x80 && data <= 0x7f) { // int8\n appendBytes([0xd0, data]);\n }\n else if (data > 0 && data <= 0xffff) { // uint16\n appendBytes([0xcd, data >>> 8, data]);\n }\n else if (data >= -0x8000 && data <= 0x7fff) { // int16\n appendBytes([0xd1, data >>> 8, data]);\n }\n else if (data > 0 && data <= 0xffffffff) { // uint32\n appendBytes([0xce, data >>> 24, data >>> 16, data >>> 8, data]);\n }\n else if (data >= -0x80000000 && data <= 0x7fffffff) { // int32\n appendBytes([0xd2, data >>> 24, data >>> 16, data >>> 8, data]);\n }\n else if (data > 0 && data <= 0xffffffffffffffff) { // uint64\n // Split 64 bit number into two 32 bit numbers because JavaScript only regards\n // 32 bits for bitwise operations.\n let hi = data / pow32;\n let lo = data % pow32;\n appendBytes([0xcf, hi >>> 24, hi >>> 16, hi >>> 8, hi, lo >>> 24, lo >>> 16, lo >>> 8, lo]);\n }\n else if (data >= -0x8000000000000000 && data <= 0x7fffffffffffffff) { // int64\n appendByte(0xd3);\n appendInt64(data);\n }\n else if (data < 0) { // below int64\n appendBytes([0xd3, 0x80, 0, 0, 0, 0, 0, 0, 0]);\n }\n else { // above uint64\n appendBytes([0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff]);\n }\n }\n else {\n // Float\n if (!floatView) {\n floatBuffer = new ArrayBuffer(8);\n floatView = new DataView(floatBuffer);\n }\n floatView.setFloat64(0, data);\n appendByte(0xcb);\n appendBytes(new Uint8Array(floatBuffer));\n }\n }\n function appendString(data) {\n let bytes = encodeUtf8(data);\n let length = bytes.length;\n if (length <= 0x1f)\n appendByte(0xa0 + length);\n else if (length <= 0xff)\n appendBytes([0xd9, length]);\n else if (length <= 0xffff)\n appendBytes([0xda, length >>> 8, length]);\n else\n appendBytes([0xdb, length >>> 24, length >>> 16, length >>> 8, length]);\n appendBytes(bytes);\n }\n function appendArray(data) {\n let length = data.length;\n if (length <= 0xf)\n appendByte(0x90 + length);\n else if (length <= 0xffff)\n appendBytes([0xdc, length >>> 8, length]);\n else\n appendBytes([0xdd, length >>> 24, length >>> 16, length >>> 8, length]);\n for (let index = 0; index < length; index++) {\n append(data[index]);\n }\n }\n function appendBinArray(data) {\n let length = data.length;\n if (length <= 0xf)\n appendBytes([0xc4, length]);\n else if (length <= 0xffff)\n appendBytes([0xc5, length >>> 8, length]);\n else\n appendBytes([0xc6, length >>> 24, length >>> 16, length >>> 8, length]);\n appendBytes(data);\n }\n function appendObject(data) {\n let length = 0;\n for (let key in data) {\n if (data[key] !== undefined) {\n length++;\n }\n }\n if (length <= 0xf)\n appendByte(0x80 + length);\n else if (length <= 0xffff)\n appendBytes([0xde, length >>> 8, length]);\n else\n appendBytes([0xdf, length >>> 24, length >>> 16, length >>> 8, length]);\n for (let key in data) {\n let value = data[key];\n if (value !== undefined) {\n append(key);\n append(value);\n }\n }\n }\n function appendDate(data) {\n let sec = data.getTime() / 1000;\n if (data.getMilliseconds() === 0 && sec >= 0 && sec < 0x100000000) { // 32 bit seconds\n appendBytes([0xd6, 0xff, sec >>> 24, sec >>> 16, sec >>> 8, sec]);\n }\n else if (sec >= 0 && sec < 0x400000000) { // 30 bit nanoseconds, 34 bit seconds\n let ns = data.getMilliseconds() * 1000000;\n appendBytes([0xd7, 0xff, ns >>> 22, ns >>> 14, ns >>> 6, ((ns << 2) >>> 0) | (sec / pow32), sec >>> 24, sec >>> 16, sec >>> 8, sec]);\n }\n else { // 32 bit nanoseconds, 64 bit seconds, negative values allowed\n let ns = data.getMilliseconds() * 1000000;\n appendBytes([0xc7, 12, 0xff, ns >>> 24, ns >>> 16, ns >>> 8, ns]);\n appendInt64(sec);\n }\n }\n function appendByte(byte) {\n if (array.length < length + 1) {\n let newLength = array.length * 2;\n while (newLength < length + 1)\n newLength *= 2;\n let newArray = new Uint8Array(newLength);\n newArray.set(array);\n array = newArray;\n }\n array[length] = byte;\n length++;\n }\n function appendBytes(bytes) {\n if (array.length < length + bytes.length) {\n let newLength = array.length * 2;\n while (newLength < length + bytes.length)\n newLength *= 2;\n let newArray = new Uint8Array(newLength);\n newArray.set(array);\n array = newArray;\n }\n array.set(bytes, length);\n length += bytes.length;\n }\n function appendInt64(value) {\n // Split 64 bit number into two 32 bit numbers because JavaScript only regards 32 bits for\n // bitwise operations.\n let hi, lo;\n if (value >= 0) {\n // Same as uint64\n hi = value / pow32;\n lo = value % pow32;\n }\n else {\n // Split absolute value to high and low, then NOT and ADD(1) to restore negativity\n value++;\n hi = Math.abs(value) / pow32;\n lo = Math.abs(value) % pow32;\n hi = ~hi;\n lo = ~lo;\n }\n appendBytes([hi >>> 24, hi >>> 16, hi >>> 8, hi, lo >>> 24, lo >>> 16, lo >>> 8, lo]);\n }\n}\n// Deserializes a MessagePack byte array to a value.\n//\n// array: The MessagePack byte array to deserialize. This must be an Array or Uint8Array containing bytes, not a string.\n// options: An object that defines additional options.\n// - multiple: (boolean) Indicates whether multiple concatenated MessagePack arrays are returned as an array. Default: false.\nfunction deserialize(array, options) {\n const pow32 = 0x100000000; // 2^32\n let pos = 0;\n if (array instanceof ArrayBuffer) {\n array = new Uint8Array(array);\n }\n if (typeof array !== \"object\" || typeof array.length === \"undefined\") {\n throw new Error(\"Invalid argument type: Expected a byte array (Array or Uint8Array) to deserialize.\");\n }\n if (!array.length) {\n throw new Error(\"Invalid argument: The byte array to deserialize is empty.\");\n }\n if (!(array instanceof Uint8Array)) {\n array = new Uint8Array(array);\n }\n let data;\n if (options && options.multiple) {\n // Read as many messages as are available\n data = [];\n while (pos < array.length) {\n data.push(read());\n }\n }\n else {\n // Read only one message and ignore additional data\n data = read();\n }\n return data;\n function read() {\n const byte = array[pos++];\n if (byte >= 0x00 && byte <= 0x7f)\n return byte; // positive fixint\n if (byte >= 0x80 && byte <= 0x8f)\n return readMap(byte - 0x80); // fixmap\n if (byte >= 0x90 && byte <= 0x9f)\n return readArray(byte - 0x90); // fixarray\n if (byte >= 0xa0 && byte <= 0xbf)\n return readStr(byte - 0xa0); // fixstr\n if (byte === 0xc0)\n return null; // nil\n if (byte === 0xc1)\n throw new Error(\"Invalid byte code 0xc1 found.\"); // never used\n if (byte === 0xc2)\n return false; // false\n if (byte === 0xc3)\n return true; // true\n if (byte === 0xc4)\n return readBin(-1, 1); // bin 8\n if (byte === 0xc5)\n return readBin(-1, 2); // bin 16\n if (byte === 0xc6)\n return readBin(-1, 4); // bin 32\n if (byte === 0xc7)\n return readExt(-1, 1); // ext 8\n if (byte === 0xc8)\n return readExt(-1, 2); // ext 16\n if (byte === 0xc9)\n return readExt(-1, 4); // ext 32\n if (byte === 0xca)\n return readFloat(4); // float 32\n if (byte === 0xcb)\n return readFloat(8); // float 64\n if (byte === 0xcc)\n return readUInt(1); // uint 8\n if (byte === 0xcd)\n return readUInt(2); // uint 16\n if (byte === 0xce)\n return readUInt(4); // uint 32\n if (byte === 0xcf)\n return readUInt(8); // uint 64\n if (byte === 0xd0)\n return readInt(1); // int 8\n if (byte === 0xd1)\n return readInt(2); // int 16\n if (byte === 0xd2)\n return readInt(4); // int 32\n if (byte === 0xd3)\n return readInt(8); // int 64\n if (byte === 0xd4)\n return readExt(1); // fixext 1\n if (byte === 0xd5)\n return readExt(2); // fixext 2\n if (byte === 0xd6)\n return readExt(4); // fixext 4\n if (byte === 0xd7)\n return readExt(8); // fixext 8\n if (byte === 0xd8)\n return readExt(16); // fixext 16\n if (byte === 0xd9)\n return readStr(-1, 1); // str 8\n if (byte === 0xda)\n return readStr(-1, 2); // str 16\n if (byte === 0xdb)\n return readStr(-1, 4); // str 32\n if (byte === 0xdc)\n return readArray(-1, 2); // array 16\n if (byte === 0xdd)\n return readArray(-1, 4); // array 32\n if (byte === 0xde)\n return readMap(-1, 2); // map 16\n if (byte === 0xdf)\n return readMap(-1, 4); // map 32\n if (byte >= 0xe0 && byte <= 0xff)\n return byte - 256; // negative fixint\n console.debug(\"msgpack array:\", array);\n throw new Error(\"Invalid byte value '\" + byte + \"' at index \" + (pos - 1) + \" in the MessagePack binary data (length \" + array.length + \"): Expecting a range of 0 to 255. This is not a byte array.\");\n }\n function readInt(size) {\n let value = 0;\n let first = true;\n while (size-- > 0) {\n if (first) {\n let byte = array[pos++];\n value += byte & 0x7f;\n if (byte & 0x80) {\n value -= 0x80; // Treat most-significant bit as -2^i instead of 2^i\n }\n first = false;\n }\n else {\n value *= 256;\n value += array[pos++];\n }\n }\n return value;\n }\n function readUInt(size) {\n let value = 0;\n while (size-- > 0) {\n value *= 256;\n value += array[pos++];\n }\n return value;\n }\n function readFloat(size) {\n let view = new DataView(array.buffer, pos + array.byteOffset, size);\n pos += size;\n if (size === 4)\n return view.getFloat32(0, false);\n if (size === 8)\n return view.getFloat64(0, false);\n }\n function readBin(size, lengthSize) {\n if (size < 0)\n size = readUInt(lengthSize);\n let data = array.subarray(pos, pos + size);\n pos += size;\n return data;\n }\n function readMap(size, lengthSize) {\n if (size < 0)\n size = readUInt(lengthSize);\n let data = {};\n while (size-- > 0) {\n let key = read();\n data[key] = read();\n }\n return data;\n }\n function readArray(size, lengthSize) {\n if (size < 0)\n size = readUInt(lengthSize);\n let data = [];\n while (size-- > 0) {\n data.push(read());\n }\n return data;\n }\n function readStr(size, lengthSize) {\n if (size < 0)\n size = readUInt(lengthSize);\n let start = pos;\n pos += size;\n return decodeUtf8(array, start, size);\n }\n function readExt(size, lengthSize) {\n if (size < 0)\n size = readUInt(lengthSize);\n let type = readUInt(1);\n let data = readBin(size);\n switch (type) {\n case 255:\n return readExtDate(data);\n }\n return { type: type, data: data };\n }\n function readExtDate(data) {\n if (data.length === 4) {\n let sec = ((data[0] << 24) >>> 0) +\n ((data[1] << 16) >>> 0) +\n ((data[2] << 8) >>> 0) +\n data[3];\n return new Date(sec * 1000);\n }\n if (data.length === 8) {\n let ns = ((data[0] << 22) >>> 0) +\n ((data[1] << 14) >>> 0) +\n ((data[2] << 6) >>> 0) +\n (data[3] >>> 2);\n let sec = ((data[3] & 0x3) * pow32) +\n ((data[4] << 24) >>> 0) +\n ((data[5] << 16) >>> 0) +\n ((data[6] << 8) >>> 0) +\n data[7];\n return new Date(sec * 1000 + ns / 1000000);\n }\n if (data.length === 12) {\n let ns = ((data[0] << 24) >>> 0) +\n ((data[1] << 16) >>> 0) +\n ((data[2] << 8) >>> 0) +\n data[3];\n pos -= 8;\n let sec = readInt(8);\n return new Date(sec * 1000 + ns / 1000000);\n }\n throw new Error(\"Invalid data length for a date value.\");\n }\n}\n// Encodes a string to UTF-8 bytes.\nfunction encodeUtf8(str) {\n // Prevent excessive array allocation and slicing for all 7-bit characters\n let ascii = true, length = str.length;\n for (let x = 0; x < length; x++) {\n if (str.charCodeAt(x) > 127) {\n ascii = false;\n break;\n }\n }\n // Based on: https://gist.github.com/pascaldekloe/62546103a1576803dade9269ccf76330\n let i = 0, bytes = new Uint8Array(str.length * (ascii ? 1 : 4));\n for (let ci = 0; ci !== length; ci++) {\n let c = str.charCodeAt(ci);\n if (c < 128) {\n bytes[i++] = c;\n continue;\n }\n if (c < 2048) {\n bytes[i++] = c >> 6 | 192;\n }\n else {\n if (c > 0xd7ff && c < 0xdc00) {\n if (++ci >= length)\n throw new Error(\"UTF-8 encode: incomplete surrogate pair\");\n let c2 = str.charCodeAt(ci);\n if (c2 < 0xdc00 || c2 > 0xdfff)\n throw new Error(\"UTF-8 encode: second surrogate character 0x\" + c2.toString(16) + \" at index \" + ci + \" out of range\");\n c = 0x10000 + ((c & 0x03ff) << 10) + (c2 & 0x03ff);\n bytes[i++] = c >> 18 | 240;\n bytes[i++] = c >> 12 & 63 | 128;\n }\n else\n bytes[i++] = c >> 12 | 224;\n bytes[i++] = c >> 6 & 63 | 128;\n }\n bytes[i++] = c & 63 | 128;\n }\n return ascii ? bytes : bytes.subarray(0, i);\n}\n// Decodes a string from UTF-8 bytes.\nfunction decodeUtf8(bytes, start, length) {\n // Based on: https://gist.github.com/pascaldekloe/62546103a1576803dade9269ccf76330\n let i = start, str = \"\";\n length += start;\n while (i < length) {\n let c = bytes[i++];\n if (c > 127) {\n if (c > 191 && c < 224) {\n if (i >= length)\n throw new Error(\"UTF-8 decode: incomplete 2-byte sequence\");\n c = (c & 31) << 6 | bytes[i++] & 63;\n }\n else if (c > 223 && c < 240) {\n if (i + 1 >= length)\n throw new Error(\"UTF-8 decode: incomplete 3-byte sequence\");\n c = (c & 15) << 12 | (bytes[i++] & 63) << 6 | bytes[i++] & 63;\n }\n else if (c > 239 && c < 248) {\n if (i + 2 >= length)\n throw new Error(\"UTF-8 decode: incomplete 4-byte sequence\");\n c = (c & 7) << 18 | (bytes[i++] & 63) << 12 | (bytes[i++] & 63) << 6 | bytes[i++] & 63;\n }\n else\n throw new Error(\"UTF-8 decode: unknown multibyte start 0x\" + c.toString(16) + \" at index \" + (i - 1));\n }\n if (c <= 0xffff)\n str += String.fromCharCode(c);\n else if (c <= 0x10ffff) {\n c -= 0x10000;\n str += String.fromCharCode(c >> 10 | 0xd800);\n str += String.fromCharCode(c & 0x3FF | 0xdc00);\n }\n else\n throw new Error(\"UTF-8 decode: code point 0x\" + c.toString(16) + \" exceeds UTF-16 reach\");\n }\n return str;\n}\n// // The exported functions\n// let msgpack = {\n// \tserialize: serialize,\n// \tdeserialize: deserialize,\n// \t// Compatibility with other libraries\n// \tencode: serialize,\n// \tdecode: deserialize\n// };\n// // Environment detection\n// if (typeof module === \"object\" && module && typeof module.exports === \"object\") {\n// \t// Node.js\n// \tmodule.exports = msgpack;\n// }\n// else {\n// \t// Global object\n// \twindow[window.msgpackJsName || \"msgpack\"] = msgpack;\n// }\n// })();\nexport { serialize, deserialize };\n","// ----------------------------------------------------------------------------\n\n// PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:\n// https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code\n// EDIT THE CORRESPONDENT .ts FILE INSTEAD\n\n/* eslint-disable */\n/* ------------------------------------------------------------------------ */\nimport { base16, base58, base64, utf8 } from \"../../static_dependencies/scure-base/index.js\";\nimport { numberToBytesBE, numberToBytesLE, concatBytes } from '../../static_dependencies/noble-curves/abstract/utils.js';\nimport { serialize } from '../../static_dependencies/messagepack/msgpack.js';\nimport * as qs from '../../static_dependencies/qs/index.cjs';\n/* ------------------------------------------------------------------------ */\nconst json = (data, params = undefined) => JSON.stringify(data), isJsonEncodedObject = (object) => ((typeof object === 'string') &&\n (object.length >= 2) &&\n ((object[0] === '{') || (object[0] === '['))), binaryToString = utf8.encode, stringToBinary = utf8.decode, stringToBase64 = (string) => base64.encode(utf8.decode(string)), base64ToString = (string) => utf8.encode(base64.decode(string)), base64ToBinary = base64.decode, binaryToBase64 = base64.encode, base16ToBinary = base16.decode, binaryToBase16 = base16.encode, base58ToBinary = base58.decode, binaryToBase58 = base58.encode, binaryConcat = concatBytes, binaryConcatArray = (arr) => concatBytes(...arr), urlencode = (object) => qs.stringify(object), urlencodeNested = (object) => qs.stringify(object) // implemented only in python\n, urlencodeWithArrayRepeat = (object) => qs.stringify(object, { arrayFormat: 'repeat' }), rawencode = (object) => qs.stringify(object, { encode: false }), encode = utf8.decode // lol\n, decode = utf8.encode\n// Url-safe-base64 without equals signs, with + replaced by - and slashes replaced by underscores\n, urlencodeBase64 = (payload) => {\n const payload64 = (typeof payload === 'string') ? stringToBase64(payload) : binaryToBase64(payload);\n return payload64.replace(/[=]+$/, '')\n .replace(/\\+/g, '-')\n .replace(/\\//g, '_');\n}, numberToLE = (n, padding) => numberToBytesLE(BigInt(n), padding), numberToBE = (n, padding) => numberToBytesBE(BigInt(n), padding);\nfunction packb(req) {\n return serialize(req);\n}\nexport { json, isJsonEncodedObject, binaryToString, stringToBinary, stringToBase64, base64ToBinary, base64ToString, binaryToBase64, base16ToBinary, binaryToBase16, binaryConcat, binaryConcatArray, urlencode, urlencodeWithArrayRepeat, rawencode, encode, decode\n// Url-safe-base64 without equals signs, with + replaced by - and slashes replaced by underscores\n, urlencodeBase64, numberToLE, numberToBE, base58ToBinary, binaryToBase58, urlencodeNested, packb };\n/* ------------------------------------------------------------------------ */\n","// ----------------------------------------------------------------------------\n\n// PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:\n// https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code\n// EDIT THE CORRESPONDENT .ts FILE INSTEAD\n\nexport function number(n) {\n if (!Number.isSafeInteger(n) || n < 0)\n throw new Error(`Wrong positive integer: ${n}`);\n}\nexport function bool(b) {\n if (typeof b !== 'boolean')\n throw new Error(`Expected boolean, not ${b}`);\n}\nexport function bytes(b, ...lengths) {\n if (!(b instanceof Uint8Array))\n throw new TypeError('Expected Uint8Array');\n if (lengths.length > 0 && !lengths.includes(b.length))\n throw new TypeError(`Expected Uint8Array of length ${lengths}, not of length=${b.length}`);\n}\nexport function hash(hash) {\n if (typeof hash !== 'function' || typeof hash.create !== 'function')\n throw new Error('Hash should be wrapped by utils.wrapConstructor');\n number(hash.outputLen);\n number(hash.blockLen);\n}\nexport function exists(instance, checkFinished = true) {\n if (instance.destroyed)\n throw new Error('Hash instance has been destroyed');\n if (checkFinished && instance.finished)\n throw new Error('Hash#digest() has already been called');\n}\nexport function output(out, instance) {\n bytes(out);\n const min = instance.outputLen;\n if (out.length < min) {\n throw new Error(`digestInto() expects output buffer of length at least ${min}`);\n }\n}\nconst assert = {\n number,\n bool,\n bytes,\n hash,\n exists,\n output,\n};\nexport default assert;\n","// ----------------------------------------------------------------------------\n\n// PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:\n// https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code\n// EDIT THE CORRESPONDENT .ts FILE INSTEAD\n\nexport const crypto = typeof globalThis === 'object' && 'crypto' in globalThis ? globalThis.crypto : undefined;\n","// ----------------------------------------------------------------------------\n\n// PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:\n// https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code\n// EDIT THE CORRESPONDENT .ts FILE INSTEAD\n\n/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n// We use `globalThis.crypto`, but node.js versions earlier than v19 don't\n// declare it in global scope. For node.js, package.json#exports field mapping\n// rewrites import from `crypto` to `cryptoNode`, which imports native module.\n// Makes the utils un-importable in browsers without a bundler.\n// Once node.js 18 is deprecated, we can just drop the import.\nimport { crypto } from './crypto.js';\n// Cast array to different type\nexport const u8 = (arr) => new Uint8Array(arr.buffer, arr.byteOffset, arr.byteLength);\nexport const u32 = (arr) => new Uint32Array(arr.buffer, arr.byteOffset, Math.floor(arr.byteLength / 4));\n// Cast array to view\nexport const createView = (arr) => new DataView(arr.buffer, arr.byteOffset, arr.byteLength);\n// The rotate right (circular right shift) operation for uint32\nexport const rotr = (word, shift) => (word << (32 - shift)) | (word >>> shift);\n// big-endian hardware is rare. Just in case someone still decides to run hashes:\n// early-throw an error because we don't support BE yet.\nexport const isLE = new Uint8Array(new Uint32Array([0x11223344]).buffer)[0] === 0x44;\nif (!isLE)\n throw new Error('Non little-endian hardware is not supported');\nconst hexes = Array.from({ length: 256 }, (v, i) => i.toString(16).padStart(2, '0'));\n/**\n * @example bytesToHex(Uint8Array.from([0xde, 0xad, 0xbe, 0xef])) // 'deadbeef'\n */\nexport function bytesToHex(uint8a) {\n // pre-caching improves the speed 6x\n if (!(uint8a instanceof Uint8Array))\n throw new Error('Uint8Array expected');\n let hex = '';\n for (let i = 0; i < uint8a.length; i++) {\n hex += hexes[uint8a[i]];\n }\n return hex;\n}\n/**\n * @example hexToBytes('deadbeef') // Uint8Array.from([0xde, 0xad, 0xbe, 0xef])\n */\nexport function hexToBytes(hex) {\n if (typeof hex !== 'string') {\n throw new TypeError('hexToBytes: expected string, got ' + typeof hex);\n }\n if (hex.length % 2)\n throw new Error('hexToBytes: received invalid unpadded hex');\n const array = new Uint8Array(hex.length / 2);\n for (let i = 0; i < array.length; i++) {\n const j = i * 2;\n const hexByte = hex.slice(j, j + 2);\n const byte = Number.parseInt(hexByte, 16);\n if (Number.isNaN(byte) || byte < 0)\n throw new Error('Invalid byte sequence');\n array[i] = byte;\n }\n return array;\n}\n// There is no setImmediate in browser and setTimeout is slow.\n// call of async fn will return Promise, which will be fullfiled only on\n// next scheduler queue processing step and this is exactly what we need.\nexport const nextTick = async () => { };\n// Returns control to thread each 'tick' ms to avoid blocking\nexport async function asyncLoop(iters, tick, cb) {\n let ts = Date.now();\n for (let i = 0; i < iters; i++) {\n cb(i);\n // Date.now() is not monotonic, so in case if clock goes backwards we return return control too\n const diff = Date.now() - ts;\n if (diff >= 0 && diff < tick)\n continue;\n await nextTick();\n ts += diff;\n }\n}\nexport function utf8ToBytes(str) {\n if (typeof str !== 'string') {\n throw new TypeError(`utf8ToBytes expected string, got ${typeof str}`);\n }\n return new TextEncoder().encode(str);\n}\nexport function toBytes(data) {\n if (typeof data === 'string')\n data = utf8ToBytes(data);\n if (!(data instanceof Uint8Array))\n throw new TypeError(`Expected input type is Uint8Array (got ${typeof data})`);\n return data;\n}\n/**\n * Concats Uint8Array-s into one; like `Buffer.concat([buf1, buf2])`\n * @example concatBytes(buf1, buf2)\n */\nexport function concatBytes(...arrays) {\n if (!arrays.every((a) => a instanceof Uint8Array))\n throw new Error('Uint8Array list expected');\n if (arrays.length === 1)\n return arrays[0];\n const length = arrays.reduce((a, arr) => a + arr.length, 0);\n const result = new Uint8Array(length);\n for (let i = 0, pad = 0; i < arrays.length; i++) {\n const arr = arrays[i];\n result.set(arr, pad);\n pad += arr.length;\n }\n return result;\n}\n// For runtime check if class implements interface\nexport class Hash {\n // Safe version that clones internal state\n clone() {\n return this._cloneInto();\n }\n}\n// Check if object doens't have custom constructor (like Uint8Array/Array)\nconst isPlainObject = (obj) => Object.prototype.toString.call(obj) === '[object Object]' && obj.constructor === Object;\nexport function checkOpts(defaults, opts) {\n if (opts !== undefined && (typeof opts !== 'object' || !isPlainObject(opts)))\n throw new TypeError('Options should be object or undefined');\n const merged = Object.assign(defaults, opts);\n return merged;\n}\nexport function wrapConstructor(hashConstructor) {\n const hashC = (message) => hashConstructor().update(toBytes(message)).digest();\n const tmp = hashConstructor();\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = () => hashConstructor();\n return hashC;\n}\nexport function wrapConstructorWithOpts(hashCons) {\n const hashC = (msg, opts) => hashCons(opts).update(toBytes(msg)).digest();\n const tmp = hashCons({});\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = (opts) => hashCons(opts);\n return hashC;\n}\n/**\n * Secure PRNG. Uses `globalThis.crypto` or node.js crypto module.\n */\nexport function randomBytes(bytesLength = 32) {\n if (crypto && typeof crypto.getRandomValues === 'function') {\n return crypto.getRandomValues(new Uint8Array(bytesLength));\n }\n throw new Error('crypto.getRandomValues must be defined');\n}\n","// ----------------------------------------------------------------------------\n\n// PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:\n// https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code\n// EDIT THE CORRESPONDENT .ts FILE INSTEAD\n\nimport assert from './_assert.js';\nimport { Hash, toBytes } from './utils.js';\n// HMAC (RFC 2104)\nclass HMAC extends Hash {\n constructor(hash, _key) {\n super();\n this.finished = false;\n this.destroyed = false;\n assert.hash(hash);\n const key = toBytes(_key);\n this.iHash = hash.create();\n if (typeof this.iHash.update !== 'function')\n throw new TypeError('Expected instance of class which extends utils.Hash');\n this.blockLen = this.iHash.blockLen;\n this.outputLen = this.iHash.outputLen;\n const blockLen = this.blockLen;\n const pad = new Uint8Array(blockLen);\n // blockLen can be bigger than outputLen\n pad.set(key.length > blockLen ? hash.create().update(key).digest() : key);\n for (let i = 0; i < pad.length; i++)\n pad[i] ^= 0x36;\n this.iHash.update(pad);\n // By doing update (processing of first block) of outer hash here we can re-use it between multiple calls via clone\n this.oHash = hash.create();\n // Undo internal XOR && apply outer XOR\n for (let i = 0; i < pad.length; i++)\n pad[i] ^= 0x36 ^ 0x5c;\n this.oHash.update(pad);\n pad.fill(0);\n }\n update(buf) {\n assert.exists(this);\n this.iHash.update(buf);\n return this;\n }\n digestInto(out) {\n assert.exists(this);\n assert.bytes(out, this.outputLen);\n this.finished = true;\n this.iHash.digestInto(out);\n this.oHash.update(out);\n this.oHash.digestInto(out);\n this.destroy();\n }\n digest() {\n const out = new Uint8Array(this.oHash.outputLen);\n this.digestInto(out);\n return out;\n }\n _cloneInto(to) {\n // Create new instance without calling constructor since key already in state and we don't know it.\n to || (to = Object.create(Object.getPrototypeOf(this), {}));\n const { oHash, iHash, finished, destroyed, blockLen, outputLen } = this;\n to = to;\n to.finished = finished;\n to.destroyed = destroyed;\n to.blockLen = blockLen;\n to.outputLen = outputLen;\n to.oHash = oHash._cloneInto(to.oHash);\n to.iHash = iHash._cloneInto(to.iHash);\n return to;\n }\n destroy() {\n this.destroyed = true;\n this.oHash.destroy();\n this.iHash.destroy();\n }\n}\n/**\n * HMAC: RFC2104 message authentication code.\n * @param hash - function that would be used e.g. sha256\n * @param key - message key\n * @param message - message data\n */\nexport const hmac = (hash, key, message) => new HMAC(hash, key).update(message).digest();\nhmac.create = (hash, key) => new HMAC(hash, key);\n","// ----------------------------------------------------------------------------\n\n// PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:\n// https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code\n// EDIT THE CORRESPONDENT .ts FILE INSTEAD\n\n// Base64 JavaScript decoder\n// Copyright (c) 2008-2013 Lapo Luchini <lapo@lapo.it>\n// Permission to use, copy, modify, and/or distribute this software for any\n// purpose with or without fee is hereby granted, provided that the above\n// copyright notice and this permission notice appear in all copies.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\n// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\n// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\n// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\n// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\n// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF\n// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n/*jshint browser: true, strict: true, immed: true, latedef: true, undef: true, regexdash: false */\nlet decoder;\nexport const Base64 = {\n decode(a) {\n let i;\n if (decoder === undefined) {\n const b64 = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\n const ignore = \"= \\f\\n\\r\\t\\u00A0\\u2028\\u2029\";\n decoder = Object.create(null);\n for (i = 0; i < 64; ++i) {\n decoder[b64.charAt(i)] = i;\n }\n decoder['-'] = 62; //+\n decoder['_'] = 63; //-\n for (i = 0; i < ignore.length; ++i) {\n decoder[ignore.charAt(i)] = -1;\n }\n }\n const out = [];\n let bits = 0;\n let char_count = 0;\n for (i = 0; i < a.length; ++i) {\n let c = a.charAt(i);\n if (c == \"=\") {\n break;\n }\n c = decoder[c];\n if (c == -1) {\n continue;\n }\n if (c === undefined) {\n throw new Error(\"Illegal character at offset \" + i);\n }\n bits |= c;\n if (++char_count >= 4) {\n out[out.length] = (bits >> 16);\n out[out.length] = (bits >> 8) & 0xFF;\n out[out.length] = bits & 0xFF;\n bits = 0;\n char_count = 0;\n }\n else {\n bits <<= 6;\n }\n }\n switch (char_count) {\n case 1:\n throw new Error(\"Base64 encoding incomplete: at least 2 bits missing\");\n case 2:\n out[out.length] = (bits >> 10);\n break;\n case 3:\n out[out.length] = (bits >> 16);\n out[out.length] = (bits >> 8) & 0xFF;\n break;\n }\n return out;\n },\n re: /-----BEGIN [^-]+-----([A-Za-z0-9+\\/=\\s]+)-----END [^-]+-----|begin-base64[^\\n]+\\n([A-Za-z0-9+\\/=\\s]+)====/,\n unarmor(a) {\n const m = Base64.re.exec(a);\n if (m) {\n if (m[1]) {\n a = m[1];\n }\n else if (m[2]) {\n a = m[2];\n }\n else {\n throw new Error(\"RegExp out of sync\");\n }\n }\n return Base64.decode(a);\n }\n};\n","// ----------------------------------------------------------------------------\n\n// PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:\n// https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code\n// EDIT THE CORRESPONDENT .ts FILE INSTEAD\n\n// Big integer base-10 printing library\n// Copyright (c) 2014 Lapo Luchini <lapo@lapo.it>\n// Permission to use, copy, modify, and/or distribute this software for any\n// purpose with or without fee is hereby granted, provided that the above\n// copyright notice and this permission notice appear in all copies.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\n// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\n// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\n// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\n// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\n// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF\n// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n/*jshint browser: true, strict: true, immed: true, latedef: true, undef: true, regexdash: false */\nconst max = 10000000000000; // biggest integer that can still fit 2^53 when multiplied by 256\nexport class Int10 {\n constructor(value) {\n this.buf = [+value || 0];\n }\n mulAdd(m, c) {\n // assert(m <= 256)\n const b = this.buf;\n const l = b.length;\n let i;\n let t;\n for (i = 0; i < l; ++i) {\n t = b[i] * m + c;\n if (t < max) {\n c = 0;\n }\n else {\n c = 0 | (t / max);\n t -= c * max;\n }\n b[i] = t;\n }\n if (c > 0) {\n b[i] = c;\n }\n }\n sub(c) {\n // assert(m <= 256)\n const b = this.buf;\n const l = b.length;\n let i;\n let t;\n for (i = 0; i < l; ++i) {\n t = b[i] - c;\n if (t < 0) {\n t += max;\n c = 1;\n }\n else {\n c = 0;\n }\n b[i] = t;\n }\n while (b[b.length - 1] === 0) {\n b.pop();\n }\n }\n toString(base) {\n if ((base || 10) != 10) {\n throw new Error(\"only base 10 is supported\");\n }\n const b = this.buf;\n let s = b[b.length - 1].toString();\n for (let i = b.length - 2; i >= 0; --i) {\n s += (max + b[i]).toString().substring(1);\n }\n return s;\n }\n valueOf() {\n const b = this.buf;\n let v = 0;\n for (let i = b.length - 1; i >= 0; --i) {\n v = v * max + b[i];\n }\n return v;\n }\n simplify() {\n const b = this.buf;\n return (b.length == 1) ? b[0] : this;\n }\n}\n","// ----------------------------------------------------------------------------\n\n// PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:\n// https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code\n// EDIT THE CORRESPONDENT .ts FILE INSTEAD\n\n// ASN.1 JavaScript decoder\n// Copyright (c) 2008-2014 Lapo Luchini <lapo@lapo.it>\n// Permission to use, copy, modify, and/or distribute this software for any\n// purpose with or without fee is hereby granted, provided that the above\n// copyright notice and this permission notice appear in all copies.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\n// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\n// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\n// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\n// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\n// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF\n// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n/*jshint browser: true, strict: true, immed: true, latedef: true, undef: true, regexdash: false */\n/*global oids */\nimport { Int10 } from \"./int10.js\";\nconst ellipsis = \"\\u2026\";\nconst reTimeS = /^(\\d\\d)(0[1-9]|1[0-2])(0[1-9]|[12]\\d|3[01])([01]\\d|2[0-3])(?:([0-5]\\d)(?:([0-5]\\d)(?:[.,](\\d{1,3}))?)?)?(Z|[-+](?:[0]\\d|1[0-2])([0-5]\\d)?)?$/;\nconst reTimeL = /^(\\d\\d\\d\\d)(0[1-9]|1[0-2])(0[1-9]|[12]\\d|3[01])([01]\\d|2[0-3])(?:([0-5]\\d)(?:([0-5]\\d)(?:[.,](\\d{1,3}))?)?)?(Z|[-+](?:[0]\\d|1[0-2])([0-5]\\d)?)?$/;\nfunction stringCut(str, len) {\n if (str.length > len) {\n str = str.substring(0, len) + ellipsis;\n }\n return str;\n}\nexport class Stream {\n constructor(enc, pos) {\n this.hexDigits = \"0123456789ABCDEF\";\n if (enc instanceof Stream) {\n this.enc = enc.enc;\n this.pos = enc.pos;\n }\n else {\n // enc should be an array or a binary string\n this.enc = enc;\n this.pos = pos;\n }\n }\n get(pos) {\n if (pos === undefined) {\n pos = this.pos++;\n }\n if (pos >= this.enc.length) {\n throw new Error(`Requesting byte offset ${pos} on a stream of length ${this.enc.length}`);\n }\n return (\"string\" === typeof this.enc) ? this.enc.charCodeAt(pos) : this.enc[pos];\n }\n hexByte(b) {\n return this.hexDigits.charAt((b >> 4) & 0xF) + this.hexDigits.charAt(b & 0xF);\n }\n hexDump(start, end, raw) {\n let s = \"\";\n for (let i = start; i < end; ++i) {\n s += this.hexByte(this.get(i));\n if (raw !== true) {\n switch (i & 0xF) {\n case 0x7:\n s += \" \";\n break;\n case 0xF:\n s += \"\\n\";\n break;\n default:\n s += \" \";\n }\n }\n }\n return s;\n }\n isASCII(start, end) {\n for (let i = start; i < end; ++i) {\n const c = this.get(i);\n if (c < 32 || c > 176) {\n return false;\n }\n }\n return true;\n }\n parseStringISO(start, end) {\n let s = \"\";\n for (let i = start; i < end; ++i) {\n s += String.fromCharCode(this.get(i));\n }\n return s;\n }\n parseStringUTF(start, end) {\n let s = \"\";\n for (let i = start; i < end;) {\n const c = this.get(i++);\n if (c < 128) {\n s += String.fromCharCode(c);\n }\n else if ((c > 191) && (c < 224)) {\n s += String.fromCharCode(((c & 0x1F) << 6) | (this.get(i++) & 0x3F));\n }\n else {\n s += String.fromCharCode(((c & 0x0F) << 12) | ((this.get(i++) & 0x3F) << 6) | (this.get(i++) & 0x3F));\n }\n }\n return s;\n }\n parseStringBMP(start, end) {\n let str = \"\";\n let hi;\n let lo;\n for (let i = start; i < end;) {\n hi = this.get(i++);\n lo = this.get(i++);\n str += String.fromCharCode((hi << 8) | lo);\n }\n return str;\n }\n parseTime(start, end, shortYear) {\n let s = this.parseStringISO(start, end);\n const m = (shortYear ? reTimeS : reTimeL).exec(s);\n if (!m) {\n return \"Unrecognized time: \" + s;\n }\n if (shortYear) {\n // to avoid querying the timer, use the fixed range [1970, 2069]\n // it will conform with ITU X.400 [-10, +40] sliding window until 2030\n m[1] = +m[1];\n m[1] += (+m[1] < 70) ? 2000 : 1900;\n }\n s = m[1] + \"-\" + m[2] + \"-\" + m[3] + \" \" + m[4];\n if (m[5]) {\n s += \":\" + m[5];\n if (m[6]) {\n s += \":\" + m[6];\n if (m[7]) {\n s += \".\" + m[7];\n }\n }\n }\n if (m[8]) {\n s += \" UTC\";\n if (m[8] != \"Z\") {\n s += m[8];\n if (m[9]) {\n s += \":\" + m[9];\n }\n }\n }\n return s;\n }\n parseInteger(start, end) {\n let v = this.get(start);\n const neg = (v > 127);\n const pad = neg ? 255 : 0;\n let len;\n let s = \"\";\n // skip unuseful bits (not allowed in DER)\n while (v == pad && ++start < end) {\n v = this.get(start);\n }\n len = end - start;\n if (len === 0) {\n return neg ? -1 : 0;\n }\n // show bit length of huge integers\n if (len > 4) {\n s = v;\n len <<= 3;\n while (((+s ^ pad) & 0x80) == 0) {\n s = +s << 1;\n --len;\n }\n s = \"(\" + len + \" bit)\\n\";\n }\n // decode the integer\n if (neg) {\n v = v - 256;\n }\n const n = new Int10(v);\n for (let i = start + 1; i < end; ++i) {\n n.mulAdd(256, this.get(i));\n }\n return s + n.toString();\n }\n parseBitString(start, end, maxLength) {\n const unusedBit = this.get(start);\n const lenBit = ((end - start - 1) << 3) - unusedBit;\n const intro = \"(\" + lenBit + \" bit)\\n\";\n let s = \"\";\n for (let i = start + 1; i < end; ++i) {\n const b = this.get(i);\n const skip = (i == end - 1) ? unusedBit : 0;\n for (let j = 7; j >= skip; --j) {\n s += (b >> j) & 1 ? \"1\" : \"0\";\n }\n if (s.length > maxLength) {\n return intro + stringCut(s, maxLength);\n }\n }\n return intro + s;\n }\n parseOctetString(start, end, maxLength) {\n if (this.isASCII(start, end)) {\n return stringCut(this.parseStringISO(start, end), maxLength);\n }\n const len = end - start;\n let s = \"(\" + len + \" byte)\\n\";\n maxLength /= 2; // we work in bytes\n if (len > maxLength) {\n end = start + maxLength;\n }\n for (let i = start; i < end; ++i) {\n s += this.hexByte(this.get(i));\n }\n if (len > maxLength) {\n s += ellipsis;\n }\n return s;\n }\n parseOID(start, end, maxLength) {\n let s = \"\";\n let n = new Int10();\n let bits = 0;\n for (let i = start; i < end; ++i) {\n const v = this.get(i);\n n.mulAdd(128, v & 0x7F);\n bits += 7;\n if (!(v & 0x80)) { // finished\n if (s === \"\") {\n n = n.simplify();\n if (n instanceof Int10) {\n n.sub(80);\n s = \"2.\" + n.toString();\n }\n else {\n const m = n < 80 ? n < 40 ? 0 : 1 : 2;\n s = m + \".\" + (n - m * 40);\n }\n }\n else {\n s += \".\" + n.toString();\n }\n if (s.length > maxLength) {\n return stringCut(s, maxLength);\n }\n n = new Int10();\n bits = 0;\n }\n }\n if (bits > 0) {\n s += \".incomplete\";\n }\n return s;\n }\n}\nexport class ASN1 {\n constructor(stream, header, length, tag, sub) {\n if (!(tag instanceof ASN1Tag)) {\n throw new Error(\"Invalid tag value.\");\n }\n this.stream = stream;\n this.header = header;\n this.length = length;\n this.tag = tag;\n this.sub = sub;\n }\n typeName() {\n switch (this.tag.tagClass) {\n case 0: // universal\n switch (this.tag.tagNumber) {\n case 0x00:\n return \"EOC\";\n case 0x01:\n return \"BOOLEAN\";\n case 0x02:\n return \"INTEGER\";\n case 0x03:\n return \"BIT_STRING\";\n case 0x04:\n return \"OCTET_STRING\";\n case 0x05:\n return \"NULL\";\n case 0x06:\n return \"OBJECT_IDENTIFIER\";\n case 0x07:\n return \"ObjectDescriptor\";\n case 0x08:\n return \"EXTERNAL\";\n case 0x09:\n return \"REAL\";\n case 0x0A:\n return \"ENUMERATED\";\n case 0x0B:\n return \"EMBEDDED_PDV\";\n case 0x0C:\n return \"UTF8String\";\n case 0x10:\n return \"SEQUENCE\";\n case 0x11:\n return \"SET\";\n case 0x12:\n return \"NumericString\";\n case 0x13:\n return \"PrintableString\"; // ASCII subset\n case 0x14:\n return \"TeletexString\"; // aka T61String\n case 0x15:\n return \"VideotexString\";\n case 0x16:\n return \"IA5String\"; // ASCII\n case 0x17:\n return \"UTCTime\";\n case 0x18:\n return \"GeneralizedTime\";\n case 0x19:\n return \"GraphicString\";\n case 0x1A:\n return \"VisibleString\"; // ASCII subset\n case 0x1B:\n return \"GeneralString\";\n case 0x1C:\n return \"UniversalString\";\n case 0x1E:\n return \"BMPString\";\n }\n return \"Universal_\" + this.tag.tagNumber.toString();\n case 1:\n return \"Application_\" + this.tag.tagNumber.toString();\n case 2:\n return \"[\" + this.tag.tagNumber.toString() + \"]\"; // Context\n case 3:\n return \"Private_\" + this.tag.tagNumber.toString();\n }\n }\n content(maxLength) {\n if (this.tag === undefined) {\n return null;\n }\n if (maxLength === undefined) {\n maxLength = Infinity;\n }\n const content = this.posContent();\n const len = Math.abs(this.length);\n if (!this.tag.isUniversal()) {\n if (this.sub !== null) {\n return \"(\" + this.sub.length + \" elem)\";\n }\n return this.stream.parseOctetString(content, content + len, maxLength);\n }\n switch (this.tag.tagNumber) {\n case 0x01: // BOOLEAN\n return (this.stream.get(content) === 0) ? \"false\" : \"true\";\n case 0x02: // INTEGER\n return this.stream.parseInteger(content, content + len);\n case 0x03: // BIT_STRING\n return this.sub ? \"(\" + this.sub.length + \" elem)\" :\n this.stream.parseBitString(content, content + len, maxLength);\n case 0x04: // OCTET_STRING\n return this.sub ? \"(\" + this.sub.length + \" elem)\" :\n this.stream.parseOctetString(content, content + len, maxLength);\n // case 0x05: // NULL\n case 0x06: // OBJECT_IDENTIFIER\n return this.stream.parseOID(content, content + len, maxLength);\n // case 0x07: // ObjectDescriptor\n // case 0x08: // EXTERNAL\n // case 0x09: // REAL\n // case 0x0A: // ENUMERATED\n // case 0x0B: // EMBEDDED_PDV\n case 0x10: // SEQUENCE\n case 0x11: // SET\n if (this.sub !== null) {\n return \"(\" + this.sub.length + \" elem)\";\n }\n else {\n return \"(no elem)\";\n }\n case 0x0C: // UTF8String\n return stringCut(this.stream.parseStringUTF(content, content + len), maxLength);\n case 0x12: // NumericString\n case 0x13: // PrintableString\n case 0x14: // TeletexString\n case 0x15: // VideotexString\n case 0x16: // IA5String\n // case 0x19: // GraphicString\n case 0x1A: // VisibleString\n // case 0x1B: // GeneralString\n // case 0x1C: // UniversalString\n return stringCut(this.stream.parseStringISO(content, content + len), maxLength);\n case 0x1E: // BMPString\n return stringCut(this.stream.parseStringBMP(content, content + len), maxLength);\n case 0x17: // UTCTime\n case 0x18: // GeneralizedTime\n return this.stream.parseTime(content, content + len, (this.tag.tagNumber == 0x17));\n }\n return null;\n }\n toString() {\n return this.typeName() + \"@\" + this.stream.pos + \"[header:\" + this.header + \",length:\" + this.length + \",sub:\" + ((this.sub === null) ? \"null\" : this.sub.length) + \"]\";\n }\n toPrettyString(indent) {\n if (indent === undefined) {\n indent = \"\";\n }\n let s = indent + this.typeName() + \" @\" + this.stream.pos;\n if (this.length >= 0) {\n s += \"+\";\n }\n s += this.length;\n if (this.tag.tagConstructed) {\n s += \" (constructed)\";\n }\n else if ((this.tag.isUniversal() && ((this.tag.tagNumber == 0x03) || (this.tag.tagNumber == 0x04))) && (this.sub !== null)) {\n s += \" (encapsulates)\";\n }\n s += \"\\n\";\n if (this.sub !== null) {\n indent += \" \";\n for (let i = 0, max = this.sub.length; i < max; ++i) {\n s += this.sub[i].toPrettyString(indent);\n }\n }\n return s;\n }\n posStart() {\n return this.stream.pos;\n }\n posContent() {\n return this.stream.pos + this.header;\n }\n posEnd() {\n return this.stream.pos + this.header + Math.abs(this.length);\n }\n toHexString() {\n return this.stream.hexDump(this.posStart(), this.posEnd(), true);\n }\n static decodeLength(stream) {\n let buf = stream.get();\n const len = buf & 0x7F;\n if (len == buf) {\n return len;\n }\n // no reason to use Int10, as it would be a huge buffer anyways\n if (len > 6) {\n throw new Error(\"Length over 48 bits not supported at position \" + (stream.pos - 1));\n }\n if (len === 0) {\n return null;\n } // undefined\n buf = 0;\n for (let i = 0; i < len; ++i) {\n buf = (buf * 256) + stream.get();\n }\n return buf;\n }\n /**\n * Retrieve the hexadecimal value (as a string) of the current ASN.1 element\n * @returns {string}\n * @public\n */\n getHexStringValue() {\n const hexString = this.toHexString();\n const offset = this.header * 2;\n const length = this.length * 2;\n return hexString.substr(offset, length);\n }\n static decode(str) {\n let stream;\n if (!(str instanceof Stream)) {\n stream = new Stream(str, 0);\n }\n else {\n stream = str;\n }\n const streamStart = new Stream(stream);\n const tag = new ASN1Tag(stream);\n let len = ASN1.decodeLength(stream);\n const start = stream.pos;\n const header = start - streamStart.pos;\n let sub = null;\n const getSub = function () {\n const ret = [];\n if (len !== null) {\n // definite length\n const end = start + len;\n while (stream.pos < end) {\n ret[ret.length] = ASN1.decode(stream);\n }\n if (stream.pos != end) {\n throw new Error(\"Content size is not correct for container starting at offset \" + start);\n }\n }\n else {\n // undefined length\n try {\n for (;;) {\n const s = ASN1.decode(stream);\n if (s.tag.isEOC()) {\n break;\n }\n ret[ret.length] = s;\n }\n len = start - stream.pos; // undefined lengths are represented as negative values\n }\n catch (e) {\n throw new Error(\"Exception while decoding undefined length content: \" + e);\n }\n }\n return ret;\n };\n if (tag.tagConstructed) {\n // must have valid content\n sub = getSub();\n }\n else if (tag.isUniversal() && ((tag.tagNumber == 0x03) || (tag.tagNumber == 0x04))) {\n // sometimes BitString and OctetString are used to encapsulate ASN.1\n try {\n if (tag.tagNumber == 0x03) {\n if (stream.get() != 0) {\n throw new Error(\"BIT STRINGs with unused bits cannot encapsulate.\");\n }\n }\n sub = getSub();\n for (let i = 0; i < sub.length; ++i) {\n if (sub[i].tag.isEOC()) {\n throw new Error(\"EOC is not supposed to be actual content.\");\n }\n }\n }\n catch (e) {\n // but silently ignore when they don't\n sub = null;\n }\n }\n if (sub === null) {\n if (len === null) {\n throw new Error(\"We can't skip over an invalid tag with undefined length at offset \" + start);\n }\n stream.pos = start + Math.abs(len);\n }\n return new ASN1(streamStart, header, len, tag, sub);\n }\n}\nexport class ASN1Tag {\n constructor(stream) {\n let buf = stream.get();\n this.tagClass = buf >> 6;\n this.tagConstructed = ((buf & 0x20) !== 0);\n this.tagNumber = buf & 0x1F;\n if (this.tagNumber == 0x1F) { // long tag\n const n = new Int10();\n do {\n buf = stream.get();\n n.mulAdd(128, buf & 0x7F);\n } while (buf & 0x80);\n this.tagNumber = n.simplify();\n }\n }\n isUniversal() {\n return this.tagClass === 0x00;\n }\n isEOC() {\n return this.tagClass === 0x00 && this.tagNumber === 0x00;\n }\n}\n","// ----------------------------------------------------------------------------\n\n// PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:\n// https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code\n// EDIT THE CORRESPONDENT .ts FILE INSTEAD\n\nimport assert from './_assert.js';\nimport { Hash, createView, toBytes } from './utils.js';\n// Polyfill for Safari 14\nfunction setBigUint64(view, byteOffset, value, isLE) {\n if (typeof view.setBigUint64 === 'function')\n return view.setBigUint64(byteOffset, value, isLE);\n const _32n = BigInt(32);\n const _u32_max = BigInt(0xffffffff);\n const wh = Number((value >> _32n) & _u32_max);\n const wl = Number(value & _u32_max);\n const h = isLE ? 4 : 0;\n const l = isLE ? 0 : 4;\n view.setUint32(byteOffset + h, wh, isLE);\n view.setUint32(byteOffset + l, wl, isLE);\n}\n// Base SHA2 class (RFC 6234)\nexport class SHA2 extends Hash {\n constructor(blockLen, outputLen, padOffset, isLE) {\n super();\n this.blockLen = blockLen;\n this.outputLen = outputLen;\n this.padOffset = padOffset;\n this.isLE = isLE;\n this.finished = false;\n this.length = 0;\n this.pos = 0;\n this.destroyed = false;\n this.buffer = new Uint8Array(blockLen);\n this.view = createView(this.buffer);\n }\n update(data) {\n assert.exists(this);\n const { view, buffer, blockLen } = this;\n data = toBytes(data);\n const len = data.length;\n for (let pos = 0; pos < len;) {\n const take = Math.min(blockLen - this.pos, len - pos);\n // Fast path: we have at least one block in input, cast it to view and process\n if (take === blockLen) {\n const dataView = createView(data);\n for (; blockLen <= len - pos; pos += blockLen)\n this.process(dataView, pos);\n continue;\n }\n buffer.set(data.subarray(pos, pos + take), this.pos);\n this.pos += take;\n pos += take;\n if (this.pos === blockLen) {\n this.process(view, 0);\n this.pos = 0;\n }\n }\n this.length += data.length;\n this.roundClean();\n return this;\n }\n digestInto(out) {\n assert.exists(this);\n assert.output(out, this);\n this.finished = true;\n // Padding\n // We can avoid allocation of buffer for padding completely if it\n // was previously not allocated here. But it won't change performance.\n const { buffer, view, blockLen, isLE } = this;\n let { pos } = this;\n // append the bit '1' to the message\n buffer[pos++] = 0b10000000;\n this.buffer.subarray(pos).fill(0);\n // we have less than padOffset left in buffer, so we cannot put length in current block, need process it and pad again\n if (this.padOffset > blockLen - pos) {\n this.process(view, 0);\n pos = 0;\n }\n // Pad until full block byte with zeros\n for (let i = pos; i < blockLen; i++)\n buffer[i] = 0;\n // Note: sha512 requires length to be 128bit integer, but length in JS will overflow before that\n // You need to write around 2 exabytes (u64_max / 8 / (1024**6)) for this to happen.\n // So we just write lowest 64 bits of that value.\n setBigUint64(view, blockLen - 8, BigInt(this.length * 8), isLE);\n this.process(view, 0);\n const oview = createView(out);\n const len = this.outputLen;\n // NOTE: we do division by 4 later, which should be fused in single op with modulo by JIT\n if (len % 4)\n throw new Error('_sha2: outputLen should be aligned to 32bit');\n const outLen = len / 4;\n const state = this.get();\n if (outLen > state.length)\n throw new Error('_sha2: outputLen bigger than state');\n for (let i = 0; i < outLen; i++)\n oview.setUint32(4 * i, state[i], isLE);\n }\n digest() {\n const { buffer, outputLen } = this;\n this.digestInto(buffer);\n const res = buffer.slice(0, outputLen);\n this.destroy();\n return res;\n }\n _cloneInto(to) {\n to || (to = new this.constructor());\n to.set(...this.get());\n const { blockLen, buffer, length, finished, destroyed, pos } = this;\n to.length = length;\n to.pos = pos;\n to.finished = finished;\n to.destroyed = destroyed;\n if (length % blockLen)\n to.buffer.set(buffer);\n return to;\n }\n}\n","// ----------------------------------------------------------------------------\n\n// PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:\n// https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code\n// EDIT THE CORRESPONDENT .ts FILE INSTEAD\n\nimport { SHA2 } from './_sha2.js';\nimport { rotr, wrapConstructor } from './utils.js';\n// Choice: a ? b : c\nconst Chi = (a, b, c) => (a & b) ^ (~a & c);\n// Majority function, true if any two inpust is true\nconst Maj = (a, b, c) => (a & b) ^ (a & c) ^ (b & c);\n// Round constants:\n// first 32 bits of the fractional parts of the cube roots of the first 64 primes 2..311)\n// prettier-ignore\nconst SHA256_K = new Uint32Array([\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n]);\n// Initial state (first 32 bits of the fractional parts of the square roots of the first 8 primes 2..19):\n// prettier-ignore\nconst IV = new Uint32Array([\n 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19\n]);\n// Temporary buffer, not used to store anything between runs\n// Named this way because it matches specification.\nconst SHA256_W = new Uint32Array(64);\nclass SHA256 extends SHA2 {\n constructor() {\n super(64, 32, 8, false);\n // We cannot use array here since array allows indexing by variable\n // which means optimizer/compiler cannot use registers.\n this.A = IV[0] | 0;\n this.B = IV[1] | 0;\n this.C = IV[2] | 0;\n this.D = IV[3] | 0;\n this.E = IV[4] | 0;\n this.F = IV[5] | 0;\n this.G = IV[6] | 0;\n this.H = IV[7] | 0;\n }\n get() {\n const { A, B, C, D, E, F, G, H } = this;\n return [A, B, C, D, E, F, G, H];\n }\n // prettier-ignore\n set(A, B, C, D, E, F, G, H) {\n this.A = A | 0;\n this.B = B | 0;\n this.C = C | 0;\n this.D = D | 0;\n this.E = E | 0;\n this.F = F | 0;\n this.G = G | 0;\n this.H = H | 0;\n }\n process(view, offset) {\n // Extend the first 16 words into the remaining 48 words w[16..63] of the message schedule array\n for (let i = 0; i < 16; i++, offset += 4)\n SHA256_W[i] = view.getUint32(offset, false);\n for (let i = 16; i < 64; i++) {\n const W15 = SHA256_W[i - 15];\n const W2 = SHA256_W[i - 2];\n const s0 = rotr(W15, 7) ^ rotr(W15, 18) ^ (W15 >>> 3);\n const s1 = rotr(W2, 17) ^ rotr(W2, 19) ^ (W2 >>> 10);\n SHA256_W[i] = (s1 + SHA256_W[i - 7] + s0 + SHA256_W[i - 16]) | 0;\n }\n // Compression function main loop, 64 rounds\n let { A, B, C, D, E, F, G, H } = this;\n for (let i = 0; i < 64; i++) {\n const sigma1 = rotr(E, 6) ^ rotr(E, 11) ^ rotr(E, 25);\n const T1 = (H + sigma1 + Chi(E, F, G) + SHA256_K[i] + SHA256_W[i]) | 0;\n const sigma0 = rotr(A, 2) ^ rotr(A, 13) ^ rotr(A, 22);\n const T2 = (sigma0 + Maj(A, B, C)) | 0;\n H = G;\n G = F;\n F = E;\n E = (D + T1) | 0;\n D = C;\n C = B;\n B = A;\n A = (T1 + T2) | 0;\n }\n // Add the compressed chunk to the current hash value\n A = (A + this.A) | 0;\n B = (B + this.B) | 0;\n C = (C + this.C) | 0;\n D = (D + this.D) | 0;\n E = (E + this.E) | 0;\n F = (F + this.F) | 0;\n G = (G + this.G) | 0;\n H = (H + this.H) | 0;\n this.set(A, B, C, D, E, F, G, H);\n }\n roundClean() {\n SHA256_W.fill(0);\n }\n destroy() {\n this.set(0, 0, 0, 0, 0, 0, 0, 0);\n this.buffer.fill(0);\n }\n}\n// Constants from https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.180-4.pdf\nclass SHA224 extends SHA256 {\n constructor() {\n super();\n this.A = 0xc1059ed8 | 0;\n this.B = 0x367cd507 | 0;\n this.C = 0x3070dd17 | 0;\n this.D = 0xf70e5939 | 0;\n this.E = 0xffc00b31 | 0;\n this.F = 0x68581511 | 0;\n this.G = 0x64f98fa7 | 0;\n this.H = 0xbefa4fa4 | 0;\n this.outputLen = 28;\n }\n}\n/**\n * SHA2-256 hash function\n * @param message - data that would be hashed\n */\nexport const sha256 = wrapConstructor(() => new SHA256());\nexport const sha224 = wrapConstructor(() => new SHA224());\n","// ----------------------------------------------------------------------------\n\n// PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:\n// https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code\n// EDIT THE CORRESPONDENT .ts FILE INSTEAD\n\n/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n// Utilities for modular arithmetics and finite fields\nimport { bitMask, numberToBytesBE, numberToBytesLE, bytesToNumberBE, bytesToNumberLE, ensureBytes, validateObject, } from './utils.js';\n// prettier-ignore\nconst _0n = BigInt(0), _1n = BigInt(1), _2n = BigInt(2), _3n = BigInt(3);\n// prettier-ignore\nconst _4n = BigInt(4), _5n = BigInt(5), _8n = BigInt(8);\n// prettier-ignore\nconst _9n = BigInt(9), _16n = BigInt(16);\n// Calculates a modulo b\nexport function mod(a, b) {\n const result = a % b;\n return result >= _0n ? result : b + result;\n}\n/**\n * Efficiently exponentiate num to power and do modular division.\n * Unsafe in some contexts: uses ladder, so can expose bigint bits.\n * @example\n * powMod(2n, 6n, 11n) // 64n % 11n == 9n\n */\n// TODO: use field version && remove\nexport function pow(num, power, modulo) {\n if (modulo <= _0n || power < _0n)\n throw new Error('Expected power/modulo > 0');\n if (modulo === _1n)\n return _0n;\n let res = _1n;\n while (power > _0n) {\n if (power & _1n)\n res = (res * num) % modulo;\n num = (num * num) % modulo;\n power >>= _1n;\n }\n return res;\n}\n// Does x ^ (2 ^ power) mod p. pow2(30, 4) == 30 ^ (2 ^ 4)\nexport function pow2(x, power, modulo) {\n let res = x;\n while (power-- > _0n) {\n res *= res;\n res %= modulo;\n }\n return res;\n}\n// Inverses number over modulo\nexport function invert(number, modulo) {\n if (number === _0n || modulo <= _0n) {\n throw new Error(`invert: expected positive integers, got n=${number} mod=${modulo}`);\n }\n // Eucledian GCD https://brilliant.org/wiki/extended-euclidean-algorithm/\n // Fermat's little theorem \"CT-like\" version inv(n) = n^(m-2) mod m is 30x slower.\n let a = mod(number, modulo);\n let b = modulo;\n // prettier-ignore\n let x = _0n, y = _1n, u = _1n, v = _0n;\n while (a !== _0n) {\n // JIT applies optimization if those two lines follow each other\n const q = b / a;\n const r = b % a;\n const m = x - u * q;\n const n = y - v * q;\n // prettier-ignore\n b = a, a = r, x = u, y = v, u = m, v = n;\n }\n const gcd = b;\n if (gcd !== _1n)\n throw new Error('invert: does not exist');\n return mod(x, modulo);\n}\n// Tonelli-Shanks algorithm\n// Paper 1: https://eprint.iacr.org/2012/685.pdf (page 12)\n// Paper 2: Square Roots from 1; 24, 51, 10 to Dan Shanks\nexport function tonelliShanks(P) {\n // Legendre constant: used to calculate Legendre symbol (a | p),\n // which denotes the value of a^((p-1)/2) (mod p).\n // (a | p) ≡ 1 if a is a square (mod p)\n // (a | p) ≡ -1 if a is not a square (mod p)\n // (a | p) ≡ 0 if a ≡ 0 (mod p)\n const legendreC = (P - _1n) / _2n;\n let Q, S, Z;\n // Step 1: By factoring out powers of 2 from p - 1,\n // find q and s such that p - 1 = q*(2^s) with q odd\n for (Q = P - _1n, S = 0; Q % _2n === _0n; Q /= _2n, S++)\n ;\n // Step 2: Select a non-square z such that (z | p) ≡ -1 and set c ≡ zq\n for (Z = _2n; Z < P && pow(Z, legendreC, P) !== P - _1n; Z++)\n ;\n // Fast-path\n if (S === 1) {\n const p1div4 = (P + _1n) / _4n;\n return function tonelliFast(Fp, n) {\n const root = Fp.pow(n, p1div4);\n if (!Fp.eql(Fp.sqr(root), n))\n throw new Error('Cannot find square root');\n return root;\n };\n }\n // Slow-path\n const Q1div2 = (Q + _1n) / _2n;\n return function tonelliSlow(Fp, n) {\n // Step 0: Check that n is indeed a square: (n | p) should not be ≡ -1\n if (Fp.pow(n, legendreC) === Fp.neg(Fp.ONE))\n throw new Error('Cannot find square root');\n let r = S;\n // TODO: will fail at Fp2/etc\n let g = Fp.pow(Fp.mul(Fp.ONE, Z), Q); // will update both x and b\n let x = Fp.pow(n, Q1div2); // first guess at the square root\n let b = Fp.pow(n, Q); // first guess at the fudge factor\n while (!Fp.eql(b, Fp.ONE)) {\n if (Fp.eql(b, Fp.ZERO))\n return Fp.ZERO; // https://en.wikipedia.org/wiki/Tonelli%E2%80%93Shanks_algorithm (4. If t = 0, return r = 0)\n // Find m such b^(2^m)==1\n let m = 1;\n for (let t2 = Fp.sqr(b); m < r; m++) {\n if (Fp.eql(t2, Fp.ONE))\n break;\n t2 = Fp.sqr(t2); // t2 *= t2\n }\n // NOTE: r-m-1 can be bigger than 32, need to convert to bigint before shift, otherwise there will be overflow\n const ge = Fp.pow(g, _1n << BigInt(r - m - 1)); // ge = 2^(r-m-1)\n g = Fp.sqr(ge); // g = ge * ge\n x = Fp.mul(x, ge); // x *= ge\n b = Fp.mul(b, g); // b *= g\n r = m;\n }\n return x;\n };\n}\nexport function FpSqrt(P) {\n // NOTE: different algorithms can give different roots, it is up to user to decide which one they want.\n // For example there is FpSqrtOdd/FpSqrtEven to choice root based on oddness (used for hash-to-curve).\n // P ≡ 3 (mod 4)\n // √n = n^((P+1)/4)\n if (P % _4n === _3n) {\n // Not all roots possible!\n // const ORDER =\n // 0x1a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffaaabn;\n // const NUM = 72057594037927816n;\n const p1div4 = (P + _1n) / _4n;\n return function sqrt3mod4(Fp, n) {\n const root = Fp.pow(n, p1div4);\n // Throw if root**2 != n\n if (!Fp.eql(Fp.sqr(root), n))\n throw new Error('Cannot find square root');\n return root;\n };\n }\n // Atkin algorithm for q ≡ 5 (mod 8), https://eprint.iacr.org/2012/685.pdf (page 10)\n if (P % _8n === _5n) {\n const c1 = (P - _5n) / _8n;\n return function sqrt5mod8(Fp, n) {\n const n2 = Fp.mul(n, _2n);\n const v = Fp.pow(n2, c1);\n const nv = Fp.mul(n, v);\n const i = Fp.mul(Fp.mul(nv, _2n), v);\n const root = Fp.mul(nv, Fp.sub(i, Fp.ONE));\n if (!Fp.eql(Fp.sqr(root), n))\n throw new Error('Cannot find square root');\n return root;\n };\n }\n // P ≡ 9 (mod 16)\n if (P % _16n === _9n) {\n // NOTE: tonelli is too slow for bls-Fp2 calculations even on start\n // Means we cannot use sqrt for constants at all!\n //\n // const c1 = Fp.sqrt(Fp.negate(Fp.ONE)); // 1. c1 = sqrt(-1) in F, i.e., (c1^2) == -1 in F\n // const c2 = Fp.sqrt(c1); // 2. c2 = sqrt(c1) in F, i.e., (c2^2) == c1 in F\n // const c3 = Fp.sqrt(Fp.negate(c1)); // 3. c3 = sqrt(-c1) in F, i.e., (c3^2) == -c1 in F\n // const c4 = (P + _7n) / _16n; // 4. c4 = (q + 7) / 16 # Integer arithmetic\n // sqrt = (x) => {\n // let tv1 = Fp.pow(x, c4); // 1. tv1 = x^c4\n // let tv2 = Fp.mul(c1, tv1); // 2. tv2 = c1 * tv1\n // const tv3 = Fp.mul(c2, tv1); // 3. tv3 = c2 * tv1\n // let tv4 = Fp.mul(c3, tv1); // 4. tv4 = c3 * tv1\n // const e1 = Fp.equals(Fp.square(tv2), x); // 5. e1 = (tv2^2) == x\n // const e2 = Fp.equals(Fp.square(tv3), x); // 6. e2 = (tv3^2) == x\n // tv1 = Fp.cmov(tv1, tv2, e1); // 7. tv1 = CMOV(tv1, tv2, e1) # Select tv2 if (tv2^2) == x\n // tv2 = Fp.cmov(tv4, tv3, e2); // 8. tv2 = CMOV(tv4, tv3, e2) # Select tv3 if (tv3^2) == x\n // const e3 = Fp.equals(Fp.square(tv2), x); // 9. e3 = (tv2^2) == x\n // return Fp.cmov(tv1, tv2, e3); // 10. z = CMOV(tv1, tv2, e3) # Select the sqrt from tv1 and tv2\n // }\n }\n // Other cases: Tonelli-Shanks algorithm\n return tonelliShanks(P);\n}\n// Little-endian check for first LE bit (last BE bit);\nexport const isNegativeLE = (num, modulo) => (mod(num, modulo) & _1n) === _1n;\n// prettier-ignore\nconst FIELD_FIELDS = [\n 'create', 'isValid', 'is0', 'neg', 'inv', 'sqrt', 'sqr',\n 'eql', 'add', 'sub', 'mul', 'pow', 'div',\n 'addN', 'subN', 'mulN', 'sqrN'\n];\nexport function validateField(field) {\n const initial = {\n ORDER: 'bigint',\n MASK: 'bigint',\n BYTES: 'isSafeInteger',\n BITS: 'isSafeInteger',\n };\n const opts = FIELD_FIELDS.reduce((map, val) => {\n map[val] = 'function';\n return map;\n }, initial);\n return validateObject(field, opts);\n}\n// Generic field functions\nexport function FpPow(f, num, power) {\n // Should have same speed as pow for bigints\n // TODO: benchmark!\n if (power < _0n)\n throw new Error('Expected power > 0');\n if (power === _0n)\n return f.ONE;\n if (power === _1n)\n return num;\n let p = f.ONE;\n let d = num;\n while (power > _0n) {\n if (power & _1n)\n p = f.mul(p, d);\n d = f.sqr(d);\n power >>= 1n;\n }\n return p;\n}\nexport function FpInvertBatch(f, nums) {\n const tmp = new Array(nums.length);\n // Walk from first to last, multiply them by each other MOD p\n const lastMultiplied = nums.reduce((acc, num, i) => {\n if (f.is0(num))\n return acc;\n tmp[i] = acc;\n return f.mul(acc, num);\n }, f.ONE);\n // Invert last element\n const inverted = f.inv(lastMultiplied);\n // Walk from last to first, multiply them by inverted each other MOD p\n nums.reduceRight((acc, num, i) => {\n if (f.is0(num))\n return acc;\n tmp[i] = f.mul(acc, tmp[i]);\n return f.mul(acc, num);\n }, inverted);\n return tmp;\n}\nexport function FpDiv(f, lhs, rhs) {\n return f.mul(lhs, typeof rhs === 'bigint' ? invert(rhs, f.ORDER) : f.inv(rhs));\n}\n// This function returns True whenever the value x is a square in the field F.\nexport function FpIsSquare(f) {\n const legendreConst = (f.ORDER - _1n) / _2n; // Integer arithmetic\n return (x) => {\n const p = f.pow(x, legendreConst);\n return f.eql(p, f.ZERO) || f.eql(p, f.ONE);\n };\n}\n// CURVE.n lengths\nexport function nLength(n, nBitLength) {\n // Bit size, byte size of CURVE.n\n const _nBitLength = nBitLength !== undefined ? nBitLength : n.toString(2).length;\n const nByteLength = Math.ceil(_nBitLength / 8);\n return { nBitLength: _nBitLength, nByteLength };\n}\nexport function Fp(ORDER, bitLen, isLE = false, redef = {}) {\n if (ORDER <= _0n)\n throw new Error(`Expected Fp ORDER > 0, got ${ORDER}`);\n const { nBitLength: BITS, nByteLength: BYTES } = nLength(ORDER, bitLen);\n if (BYTES > 2048)\n throw new Error('Field lengths over 2048 bytes are not supported');\n const sqrtP = FpSqrt(ORDER);\n const f = Object.freeze({\n ORDER,\n BITS,\n BYTES,\n MASK: bitMask(BITS),\n ZERO: _0n,\n ONE: _1n,\n create: (num) => mod(num, ORDER),\n isValid: (num) => {\n if (typeof num !== 'bigint')\n throw new Error(`Invalid field element: expected bigint, got ${typeof num}`);\n return _0n <= num && num < ORDER; // 0 is valid element, but it's not invertible\n },\n is0: (num) => num === _0n,\n isOdd: (num) => (num & _1n) === _1n,\n neg: (num) => mod(-num, ORDER),\n eql: (lhs, rhs) => lhs === rhs,\n sqr: (num) => mod(num * num, ORDER),\n add: (lhs, rhs) => mod(lhs + rhs, ORDER),\n sub: (lhs, rhs) => mod(lhs - rhs, ORDER),\n mul: (lhs, rhs) => mod(lhs * rhs, ORDER),\n pow: (num, power) => FpPow(f, num, power),\n div: (lhs, rhs) => mod(lhs * invert(rhs, ORDER), ORDER),\n // Same as above, but doesn't normalize\n sqrN: (num) => num * num,\n addN: (lhs, rhs) => lhs + rhs,\n subN: (lhs, rhs) => lhs - rhs,\n mulN: (lhs, rhs) => lhs * rhs,\n inv: (num) => invert(num, ORDER),\n sqrt: redef.sqrt || ((n) => sqrtP(f, n)),\n invertBatch: (lst) => FpInvertBatch(f, lst),\n // TODO: do we really need constant cmov?\n // We don't have const-time bigints anyway, so probably will be not very useful\n cmov: (a, b, c) => (c ? b : a),\n toBytes: (num) => (isLE ? numberToBytesLE(num, BYTES) : numberToBytesBE(num, BYTES)),\n fromBytes: (bytes) => {\n if (bytes.length !== BYTES)\n throw new Error(`Fp.fromBytes: expected ${BYTES}, got ${bytes.length}`);\n return isLE ? bytesToNumberLE(bytes) : bytesToNumberBE(bytes);\n },\n });\n return Object.freeze(f);\n}\nexport function FpSqrtOdd(Fp, elm) {\n if (!Fp.isOdd)\n throw new Error(`Field doesn't have isOdd`);\n const root = Fp.sqrt(elm);\n return Fp.isOdd(root) ? root : Fp.neg(root);\n}\nexport function FpSqrtEven(Fp, elm) {\n if (!Fp.isOdd)\n throw new Error(`Field doesn't have isOdd`);\n const root = Fp.sqrt(elm);\n return Fp.isOdd(root) ? Fp.neg(root) : root;\n}\n/**\n * FIPS 186 B.4.1-compliant \"constant-time\" private key generation utility.\n * Can take (n+8) or more bytes of uniform input e.g. from CSPRNG or KDF\n * and convert them into private scalar, with the modulo bias being neglible.\n * Needs at least 40 bytes of input for 32-byte private key.\n * https://research.kudelskisecurity.com/2020/07/28/the-definitive-guide-to-modulo-bias-and-how-to-avoid-it/\n * @param hash hash output from SHA3 or a similar function\n * @returns valid private scalar\n */\nexport function hashToPrivateScalar(hash, groupOrder, isLE = false) {\n hash = ensureBytes('privateHash', hash);\n const hashLen = hash.length;\n const minLen = nLength(groupOrder).nByteLength + 8;\n if (minLen < 24 || hashLen < minLen || hashLen > 1024)\n throw new Error(`hashToPrivateScalar: expected ${minLen}-1024 bytes of input, got ${hashLen}`);\n const num = isLE ? bytesToNumberLE(hash) : bytesToNumberBE(hash);\n return mod(num, groupOrder - _1n) + _1n;\n}\n","// ----------------------------------------------------------------------------\n\n// PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:\n// https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code\n// EDIT THE CORRESPONDENT .ts FILE INSTEAD\n\n/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n// Abelian group utilities\nimport { validateField, nLength } from './modular.js';\nimport { validateObject } from './utils.js';\nconst _0n = BigInt(0);\nconst _1n = BigInt(1);\n// Elliptic curve multiplication of Point by scalar. Fragile.\n// Scalars should always be less than curve order: this should be checked inside of a curve itself.\n// Creates precomputation tables for fast multiplication:\n// - private scalar is split by fixed size windows of W bits\n// - every window point is collected from window's table & added to accumulator\n// - since windows are different, same point inside tables won't be accessed more than once per calc\n// - each multiplication is 'Math.ceil(CURVE_ORDER / 𝑊) + 1' point additions (fixed for any scalar)\n// - +1 window is neccessary for wNAF\n// - wNAF reduces table size: 2x less memory + 2x faster generation, but 10% slower multiplication\n// TODO: Research returning 2d JS array of windows, instead of a single window. This would allow\n// windows to be in different memory locations\nexport function wNAF(c, bits) {\n const constTimeNegate = (condition, item) => {\n const neg = item.negate();\n return condition ? neg : item;\n };\n const opts = (W) => {\n const windows = Math.ceil(bits / W) + 1; // +1, because\n const windowSize = 2 ** (W - 1); // -1 because we skip zero\n return { windows, windowSize };\n };\n return {\n constTimeNegate,\n // non-const time multiplication ladder\n unsafeLadder(elm, n) {\n let p = c.ZERO;\n let d = elm;\n while (n > _0n) {\n if (n & _1n)\n p = p.add(d);\n d = d.double();\n n >>= _1n;\n }\n return p;\n },\n /**\n * Creates a wNAF precomputation window. Used for caching.\n * Default window size is set by `utils.precompute()` and is equal to 8.\n * Number of precomputed points depends on the curve size:\n * 2^(𝑊−1) * (Math.ceil(𝑛 / 𝑊) + 1), where:\n * - 𝑊 is the window size\n * - 𝑛 is the bitlength of the curve order.\n * For a 256-bit curve and window size 8, the number of precomputed points is 128 * 33 = 4224.\n * @returns precomputed point tables flattened to a single array\n */\n precomputeWindow(elm, W) {\n const { windows, windowSize } = opts(W);\n const points = [];\n let p = elm;\n let base = p;\n for (let window = 0; window < windows; window++) {\n base = p;\n points.push(base);\n // =1, because we skip zero\n for (let i = 1; i < windowSize; i++) {\n base = base.add(p);\n points.push(base);\n }\n p = base.double();\n }\n return points;\n },\n /**\n * Implements ec multiplication using precomputed tables and w-ary non-adjacent form.\n * @param W window size\n * @param precomputes precomputed tables\n * @param n scalar (we don't check here, but should be less than curve order)\n * @returns real and fake (for const-time) points\n */\n wNAF(W, precomputes, n) {\n // TODO: maybe check that scalar is less than group order? wNAF behavious is undefined otherwise\n // But need to carefully remove other checks before wNAF. ORDER == bits here\n const { windows, windowSize } = opts(W);\n let p = c.ZERO;\n let f = c.BASE;\n const mask = BigInt(2 ** W - 1); // Create mask with W ones: 0b1111 for W=4 etc.\n const maxNumber = 2 ** W;\n const shiftBy = BigInt(W);\n for (let window = 0; window < windows; window++) {\n const offset = window * windowSize;\n // Extract W bits.\n let wbits = Number(n & mask);\n // Shift number by W bits.\n n >>= shiftBy;\n // If the bits are bigger than max size, we'll split those.\n // +224 => 256 - 32\n if (wbits > windowSize) {\n wbits -= maxNumber;\n n += _1n;\n }\n // This code was first written with assumption that 'f' and 'p' will never be infinity point:\n // since each addition is multiplied by 2 ** W, it cannot cancel each other. However,\n // there is negate now: it is possible that negated element from low value\n // would be the same as high element, which will create carry into next window.\n // It's not obvious how this can fail, but still worth investigating later.\n // Check if we're onto Zero point.\n // Add random point inside current window to f.\n const offset1 = offset;\n const offset2 = offset + Math.abs(wbits) - 1; // -1 because we skip zero\n const cond1 = window % 2 !== 0;\n const cond2 = wbits < 0;\n if (wbits === 0) {\n // The most important part for const-time getPublicKey\n f = f.add(constTimeNegate(cond1, precomputes[offset1]));\n }\n else {\n p = p.add(constTimeNegate(cond2, precomputes[offset2]));\n }\n }\n // JIT-compiler should not eliminate f here, since it will later be used in normalizeZ()\n // Even if the variable is still unused, there are some checks which will\n // throw an exception, so compiler needs to prove they won't happen, which is hard.\n // At this point there is a way to F be infinity-point even if p is not,\n // which makes it less const-time: around 1 bigint multiply.\n return { p, f };\n },\n wNAFCached(P, precomputesMap, n, transform) {\n // @ts-ignore\n const W = P._WINDOW_SIZE || 1;\n // Calculate precomputes on a first run, reuse them after\n let comp = precomputesMap.get(P);\n if (!comp) {\n comp = this.precomputeWindow(P, W);\n if (W !== 1) {\n precomputesMap.set(P, transform(comp));\n }\n }\n return this.wNAF(W, comp, n);\n },\n };\n}\nexport function validateBasic(curve) {\n validateField(curve.Fp);\n validateObject(curve, {\n n: 'bigint',\n h: 'bigint',\n Gx: 'field',\n Gy: 'field',\n }, {\n nBitLength: 'isSafeInteger',\n nByteLength: 'isSafeInteger',\n });\n // Set defaults\n return Object.freeze({ ...nLength(curve.n, curve.nBitLength), ...curve });\n}\n","// ----------------------------------------------------------------------------\n\n// PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:\n// https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code\n// EDIT THE CORRESPONDENT .ts FILE INSTEAD\n\n/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n// Short Weierstrass curve. The formula is: y² = x³ + ax + b\nimport * as mod from './modular.js';\nimport * as ut from './utils.js';\nimport { ensureBytes } from './utils.js';\nimport { wNAF, validateBasic } from './curve.js';\nfunction validatePointOpts(curve) {\n const opts = validateBasic(curve);\n ut.validateObject(opts, {\n a: 'field',\n b: 'field',\n fromBytes: 'function',\n toBytes: 'function',\n }, {\n allowedPrivateKeyLengths: 'array',\n wrapPrivateKey: 'boolean',\n isTorsionFree: 'function',\n clearCofactor: 'function',\n allowInfinityPoint: 'boolean',\n });\n const { endo, Fp, a } = opts;\n if (endo) {\n if (!Fp.eql(a, Fp.ZERO)) {\n throw new Error('Endomorphism can only be defined for Koblitz curves that have a=0');\n }\n if (typeof endo !== 'object' ||\n typeof endo.beta !== 'bigint' ||\n typeof endo.splitScalar !== 'function') {\n throw new Error('Expected endomorphism with beta: bigint and splitScalar: function');\n }\n }\n return Object.freeze({ ...opts });\n}\n// ASN.1 DER encoding utilities\nconst { bytesToNumberBE: b2n, hexToBytes: h2b } = ut;\nconst DER = {\n // asn.1 DER encoding utils\n Err: class DERErr extends Error {\n constructor(m = '') {\n super(m);\n }\n },\n _parseInt(data) {\n const { Err: E } = DER;\n if (data.length < 2 || data[0] !== 0x02)\n throw new E('Invalid signature integer tag');\n const len = data[1];\n const res = data.subarray(2, len + 2);\n if (!len || res.length !== len)\n throw new E('Invalid signature integer: wrong length');\n if (res[0] === 0x00 && res[1] <= 0x7f)\n throw new E('Invalid signature integer: trailing length');\n // ^ Weird condition: not about length, but about first bytes of number.\n return { d: b2n(res), l: data.subarray(len + 2) }; // d is data, l is left\n },\n toSig(hex) {\n // parse DER signature\n const { Err: E } = DER;\n const data = typeof hex === 'string' ? h2b(hex) : hex;\n if (!(data instanceof Uint8Array))\n throw new Error('ui8a expected');\n let l = data.length;\n if (l < 2 || data[0] != 0x30)\n throw new E('Invalid signature tag');\n if (data[1] !== l - 2)\n throw new E('Invalid signature: incorrect length');\n const { d: r, l: sBytes } = DER._parseInt(data.subarray(2));\n const { d: s, l: rBytesLeft } = DER._parseInt(sBytes);\n if (rBytesLeft.length)\n throw new E('Invalid signature: left bytes after parsing');\n return { r, s };\n },\n hexFromSig(sig) {\n const slice = (s) => (Number.parseInt(s[0], 16) >= 8 ? '00' + s : s); // slice DER\n const h = (num) => {\n const hex = num.toString(16);\n return hex.length & 1 ? `0${hex}` : hex;\n };\n const s = slice(h(sig.s));\n const r = slice(h(sig.r));\n const shl = s.length / 2;\n const rhl = r.length / 2;\n const sl = h(shl);\n const rl = h(rhl);\n return `30${h(rhl + shl + 4)}02${rl}${r}02${sl}${s}`;\n },\n};\n// Be friendly to bad ECMAScript parsers by not using bigint literals like 123n\nconst _0n = BigInt(0);\nconst _1n = BigInt(1);\nexport function weierstrassPoints(opts) {\n const CURVE = validatePointOpts(opts);\n const { Fp } = CURVE; // All curves has same field / group length as for now, but they can differ\n /**\n * y² = x³ + ax + b: Short weierstrass curve formula\n * @returns y²\n */\n function weierstrassEquation(x) {\n const { a, b } = CURVE;\n const x2 = Fp.sqr(x); // x * x\n const x3 = Fp.mul(x2, x); // x2 * x\n return Fp.add(Fp.add(x3, Fp.mul(x, a)), b); // x3 + a * x + b\n }\n // Valid group elements reside in range 1..n-1\n function isWithinCurveOrder(num) {\n return typeof num === 'bigint' && _0n < num && num < CURVE.n;\n }\n function assertGE(num) {\n if (!isWithinCurveOrder(num))\n throw new Error('Expected valid bigint: 0 < bigint < curve.n');\n }\n // Validates if priv key is valid and converts it to bigint.\n // Supports options allowedPrivateKeyLengths and wrapPrivateKey.\n function normPrivateKeyToScalar(key) {\n const { allowedPrivateKeyLengths: lengths, nByteLength, wrapPrivateKey, n } = CURVE;\n if (lengths && typeof key !== 'bigint') {\n if (key instanceof Uint8Array)\n key = ut.bytesToHex(key);\n // Normalize to hex string, pad. E.g. P521 would norm 130-132 char hex to 132-char bytes\n if (typeof key !== 'string' || !lengths.includes(key.length))\n throw new Error('Invalid key');\n key = key.padStart(nByteLength * 2, '0');\n }\n let num;\n try {\n num =\n typeof key === 'bigint'\n ? key\n : ut.bytesToNumberBE(ensureBytes('private key', key, nByteLength));\n }\n catch (error) {\n throw new Error(`private key must be ${nByteLength} bytes, hex or bigint, not ${typeof key}`);\n }\n if (wrapPrivateKey)\n num = mod.mod(num, n); // disabled by default, enabled for BLS\n assertGE(num); // num in range [1..N-1]\n return num;\n }\n const pointPrecomputes = new Map();\n function assertPrjPoint(other) {\n if (!(other instanceof Point))\n throw new Error('ProjectivePoint expected');\n }\n /**\n * Projective Point works in 3d / projective (homogeneous) coordinates: (x, y, z) ∋ (x=x/z, y=y/z)\n * Default Point works in 2d / affine coordinates: (x, y)\n * We're doing calculations in projective, because its operations don't require costly inversion.\n */\n class Point {\n constructor(px, py, pz) {\n this.px = px;\n this.py = py;\n this.pz = pz;\n if (px == null || !Fp.isValid(px))\n throw new Error('x required');\n if (py == null || !Fp.isValid(py))\n throw new Error('y required');\n if (pz == null || !Fp.isValid(pz))\n throw new Error('z required');\n }\n // Does not validate if the point is on-curve.\n // Use fromHex instead, or call assertValidity() later.\n static fromAffine(p) {\n const { x, y } = p || {};\n if (!p || !Fp.isValid(x) || !Fp.isValid(y))\n throw new Error('invalid affine point');\n if (p instanceof Point)\n throw new Error('projective point not allowed');\n const is0 = (i) => Fp.eql(i, Fp.ZERO);\n // fromAffine(x:0, y:0) would produce (x:0, y:0, z:1), but we need (x:0, y:1, z:0)\n if (is0(x) && is0(y))\n return Point.ZERO;\n return new Point(x, y, Fp.ONE);\n }\n get x() {\n return this.toAffine().x;\n }\n get y() {\n return this.toAffine().y;\n }\n /**\n * Takes a bunch of Projective Points but executes only one\n * inversion on all of them. Inversion is very slow operation,\n * so this improves performance massively.\n * Optimization: converts a list of projective points to a list of identical points with Z=1.\n */\n static normalizeZ(points) {\n const toInv = Fp.invertBatch(points.map((p) => p.pz));\n return points.map((p, i) => p.toAffine(toInv[i])).map(Point.fromAffine);\n }\n /**\n * Converts hash string or Uint8Array to Point.\n * @param hex short/long ECDSA hex\n */\n static fromHex(hex) {\n const P = Point.fromAffine(CURVE.fromBytes(ensureBytes('pointHex', hex)));\n P.assertValidity();\n return P;\n }\n // Multiplies generator point by privateKey.\n static fromPrivateKey(privateKey) {\n return Point.BASE.multiply(normPrivateKeyToScalar(privateKey));\n }\n // \"Private method\", don't use it directly\n _setWindowSize(windowSize) {\n this._WINDOW_SIZE = windowSize;\n pointPrecomputes.delete(this);\n }\n // A point on curve is valid if it conforms to equation.\n assertValidity() {\n // Zero is valid point too!\n if (this.is0()) {\n if (CURVE.allowInfinityPoint)\n return;\n throw new Error('bad point: ZERO');\n }\n // Some 3rd-party test vectors require different wording between here & `fromCompressedHex`\n const { x, y } = this.toAffine();\n // Check if x, y are valid field elements\n if (!Fp.isValid(x) || !Fp.isValid(y))\n throw new Error('bad point: x or y not FE');\n const left = Fp.sqr(y); // y²\n const right = weierstrassEquation(x); // x³ + ax + b\n if (!Fp.eql(left, right))\n throw new Error('bad point: equation left != right');\n if (!this.isTorsionFree())\n throw new Error('bad point: not in prime-order subgroup');\n }\n hasEvenY() {\n const { y } = this.toAffine();\n if (Fp.isOdd)\n return !Fp.isOdd(y);\n throw new Error(\"Field doesn't support isOdd\");\n }\n /**\n * Compare one point to another.\n */\n equals(other) {\n assertPrjPoint(other);\n const { px: X1, py: Y1, pz: Z1 } = this;\n const { px: X2, py: Y2, pz: Z2 } = other;\n const U1 = Fp.eql(Fp.mul(X1, Z2), Fp.mul(X2, Z1));\n const U2 = Fp.eql(Fp.mul(Y1, Z2), Fp.mul(Y2, Z1));\n return U1 && U2;\n }\n /**\n * Flips point to one corresponding to (x, -y) in Affine coordinates.\n */\n negate() {\n return new Point(this.px, Fp.neg(this.py), this.pz);\n }\n // Renes-Costello-Batina exception-free doubling formula.\n // There is 30% faster Jacobian formula, but it is not complete.\n // https://eprint.iacr.org/2015/1060, algorithm 3\n // Cost: 8M + 3S + 3*a + 2*b3 + 15add.\n double() {\n const { a, b } = CURVE;\n const b3 = Fp.mul(b, 3n);\n const { px: X1, py: Y1, pz: Z1 } = this;\n let X3 = Fp.ZERO, Y3 = Fp.ZERO, Z3 = Fp.ZERO; // prettier-ignore\n let t0 = Fp.mul(X1, X1); // step 1\n let t1 = Fp.mul(Y1, Y1);\n let t2 = Fp.mul(Z1, Z1);\n let t3 = Fp.mul(X1, Y1);\n t3 = Fp.add(t3, t3); // step 5\n Z3 = Fp.mul(X1, Z1);\n Z3 = Fp.add(Z3, Z3);\n X3 = Fp.mul(a, Z3);\n Y3 = Fp.mul(b3, t2);\n Y3 = Fp.add(X3, Y3); // step 10\n X3 = Fp.sub(t1, Y3);\n Y3 = Fp.add(t1, Y3);\n Y3 = Fp.mul(X3, Y3);\n X3 = Fp.mul(t3, X3);\n Z3 = Fp.mul(b3, Z3); // step 15\n t2 = Fp.mul(a, t2);\n t3 = Fp.sub(t0, t2);\n t3 = Fp.mul(a, t3);\n t3 = Fp.add(t3, Z3);\n Z3 = Fp.add(t0, t0); // step 20\n t0 = Fp.add(Z3, t0);\n t0 = Fp.add(t0, t2);\n t0 = Fp.mul(t0, t3);\n Y3 = Fp.add(Y3, t0);\n t2 = Fp.mul(Y1, Z1); // step 25\n t2 = Fp.add(t2, t2);\n t0 = Fp.mul(t2, t3);\n X3 = Fp.sub(X3, t0);\n Z3 = Fp.mul(t2, t1);\n Z3 = Fp.add(Z3, Z3); // step 30\n Z3 = Fp.add(Z3, Z3);\n return new Point(X3, Y3, Z3);\n }\n // Renes-Costello-Batina exception-free addition formula.\n // There is 30% faster Jacobian formula, but it is not complete.\n // https://eprint.iacr.org/2015/1060, algorithm 1\n // Cost: 12M + 0S + 3*a + 3*b3 + 23add.\n add(other) {\n assertPrjPoint(other);\n const { px: X1, py: Y1, pz: Z1 } = this;\n const { px: X2, py: Y2, pz: Z2 } = other;\n let X3 = Fp.ZERO, Y3 = Fp.ZERO, Z3 = Fp.ZERO; // prettier-ignore\n const a = CURVE.a;\n const b3 = Fp.mul(CURVE.b, 3n);\n let t0 = Fp.mul(X1, X2); // step 1\n let t1 = Fp.mul(Y1, Y2);\n let t2 = Fp.mul(Z1, Z2);\n let t3 = Fp.add(X1, Y1);\n let t4 = Fp.add(X2, Y2); // step 5\n t3 = Fp.mul(t3, t4);\n t4 = Fp.add(t0, t1);\n t3 = Fp.sub(t3, t4);\n t4 = Fp.add(X1, Z1);\n let t5 = Fp.add(X2, Z2); // step 10\n t4 = Fp.mul(t4, t5);\n t5 = Fp.add(t0, t2);\n t4 = Fp.sub(t4, t5);\n t5 = Fp.add(Y1, Z1);\n X3 = Fp.add(Y2, Z2); // step 15\n t5 = Fp.mul(t5, X3);\n X3 = Fp.add(t1, t2);\n t5 = Fp.sub(t5, X3);\n Z3 = Fp.mul(a, t4);\n X3 = Fp.mul(b3, t2); // step 20\n Z3 = Fp.add(X3, Z3);\n X3 = Fp.sub(t1, Z3);\n Z3 = Fp.add(t1, Z3);\n Y3 = Fp.mul(X3, Z3);\n t1 = Fp.add(t0, t0); // step 25\n t1 = Fp.add(t1, t0);\n t2 = Fp.mul(a, t2);\n t4 = Fp.mul(b3, t4);\n t1 = Fp.add(t1, t2);\n t2 = Fp.sub(t0, t2); // step 30\n t2 = Fp.mul(a, t2);\n t4 = Fp.add(t4, t2);\n t0 = Fp.mul(t1, t4);\n Y3 = Fp.add(Y3, t0);\n t0 = Fp.mul(t5, t4); // step 35\n X3 = Fp.mul(t3, X3);\n X3 = Fp.sub(X3, t0);\n t0 = Fp.mul(t3, t1);\n Z3 = Fp.mul(t5, Z3);\n Z3 = Fp.add(Z3, t0); // step 40\n return new Point(X3, Y3, Z3);\n }\n subtract(other) {\n return this.add(other.negate());\n }\n is0() {\n return this.equals(Point.ZERO);\n }\n wNAF(n) {\n return wnaf.wNAFCached(this, pointPrecomputes, n, (comp) => {\n const toInv = Fp.invertBatch(comp.map((p) => p.pz));\n return comp.map((p, i) => p.toAffine(toInv[i])).map(Point.fromAffine);\n });\n }\n /**\n * Non-constant-time multiplication. Uses double-and-add algorithm.\n * It's faster, but should only be used when you don't care about\n * an exposed private key e.g. sig verification, which works over *public* keys.\n */\n multiplyUnsafe(n) {\n const I = Point.ZERO;\n if (n === _0n)\n return I;\n assertGE(n); // Will throw on 0\n if (n === _1n)\n return this;\n const { endo } = CURVE;\n if (!endo)\n return wnaf.unsafeLadder(this, n);\n // Apply endomorphism\n let { k1neg, k1, k2neg, k2 } = endo.splitScalar(n);\n let k1p = I;\n let k2p = I;\n let d = this;\n while (k1 > _0n || k2 > _0n) {\n if (k1 & _1n)\n k1p = k1p.add(d);\n if (k2 & _1n)\n k2p = k2p.add(d);\n d = d.double();\n k1 >>= _1n;\n k2 >>= _1n;\n }\n if (k1neg)\n k1p = k1p.negate();\n if (k2neg)\n k2p = k2p.negate();\n k2p = new Point(Fp.mul(k2p.px, endo.beta), k2p.py, k2p.pz);\n return k1p.add(k2p);\n }\n /**\n * Constant time multiplication.\n * Uses wNAF method. Windowed method may be 10% faster,\n * but takes 2x longer to generate and consumes 2x memory.\n * Uses precomputes when available.\n * Uses endomorphism for Koblitz curves.\n * @param scalar by which the point would be multiplied\n * @returns New point\n */\n multiply(scalar) {\n assertGE(scalar);\n let n = scalar;\n let point, fake; // Fake point is used to const-time mult\n const { endo } = CURVE;\n if (endo) {\n const { k1neg, k1, k2neg, k2 } = endo.splitScalar(n);\n let { p: k1p, f: f1p } = this.wNAF(k1);\n let { p: k2p, f: f2p } = this.wNAF(k2);\n k1p = wnaf.constTimeNegate(k1neg, k1p);\n k2p = wnaf.constTimeNegate(k2neg, k2p);\n k2p = new Point(Fp.mul(k2p.px, endo.beta), k2p.py, k2p.pz);\n point = k1p.add(k2p);\n fake = f1p.add(f2p);\n }\n else {\n const { p, f } = this.wNAF(n);\n point = p;\n fake = f;\n }\n // Normalize `z` for both points, but return only real one\n return Point.normalizeZ([point, fake])[0];\n }\n /**\n * Efficiently calculate `aP + bQ`. Unsafe, can expose private key, if used incorrectly.\n * Not using Strauss-Shamir trick: precomputation tables are faster.\n * The trick could be useful if both P and Q are not G (not in our case).\n * @returns non-zero affine point\n */\n multiplyAndAddUnsafe(Q, a, b) {\n const G = Point.BASE; // No Strauss-Shamir trick: we have 10% faster G precomputes\n const mul = (P, a // Select faster multiply() method\n ) => (a === _0n || a === _1n || !P.equals(G) ? P.multiplyUnsafe(a) : P.multiply(a));\n const sum = mul(this, a).add(mul(Q, b));\n return sum.is0() ? undefined : sum;\n }\n // Converts Projective point to affine (x, y) coordinates.\n // Can accept precomputed Z^-1 - for example, from invertBatch.\n // (x, y, z) ∋ (x=x/z, y=y/z)\n toAffine(iz) {\n const { px: x, py: y, pz: z } = this;\n const is0 = this.is0();\n // If invZ was 0, we return zero point. However we still want to execute\n // all operations, so we replace invZ with a random number, 1.\n if (iz == null)\n iz = is0 ? Fp.ONE : Fp.inv(z);\n const ax = Fp.mul(x, iz);\n const ay = Fp.mul(y, iz);\n const zz = Fp.mul(z, iz);\n if (is0)\n return { x: Fp.ZERO, y: Fp.ZERO };\n if (!Fp.eql(zz, Fp.ONE))\n throw new Error('invZ was invalid');\n return { x: ax, y: ay };\n }\n isTorsionFree() {\n const { h: cofactor, isTorsionFree } = CURVE;\n if (cofactor === _1n)\n return true; // No subgroups, always torsion-free\n if (isTorsionFree)\n return isTorsionFree(Point, this);\n throw new Error('isTorsionFree() has not been declared for the elliptic curve');\n }\n clearCofactor() {\n const { h: cofactor, clearCofactor } = CURVE;\n if (cofactor === _1n)\n return this; // Fast-path\n if (clearCofactor)\n return clearCofactor(Point, this);\n return this.multiplyUnsafe(CURVE.h);\n }\n toRawBytes(isCompressed = true) {\n this.assertValidity();\n return CURVE.toBytes(Point, this, isCompressed);\n }\n toHex(isCompressed = true) {\n return ut.bytesToHex(this.toRawBytes(isCompressed));\n }\n }\n Point.BASE = new Point(CURVE.Gx, CURVE.Gy, Fp.ONE);\n Point.ZERO = new Point(Fp.ZERO, Fp.ONE, Fp.ZERO);\n const _bits = CURVE.nBitLength;\n const wnaf = wNAF(Point, CURVE.endo ? Math.ceil(_bits / 2) : _bits);\n return {\n ProjectivePoint: Point,\n normPrivateKeyToScalar,\n weierstrassEquation,\n isWithinCurveOrder,\n };\n}\nfunction validateOpts(curve) {\n const opts = validateBasic(curve);\n ut.validateObject(opts, {\n hash: 'hash',\n hmac: 'function',\n randomBytes: 'function',\n }, {\n bits2int: 'function',\n bits2int_modN: 'function',\n lowS: 'boolean',\n });\n return Object.freeze({ lowS: true, ...opts });\n}\nexport function weierstrass(curveDef) {\n const CURVE = validateOpts(curveDef);\n const CURVE_ORDER = CURVE.n;\n const Fp = CURVE.Fp;\n const compressedLen = Fp.BYTES + 1; // e.g. 33 for 32\n const uncompressedLen = 2 * Fp.BYTES + 1; // e.g. 65 for 32\n function isValidFieldElement(num) {\n return _0n < num && num < Fp.ORDER; // 0 is banned since it's not invertible FE\n }\n function modN(a) {\n return mod.mod(a, CURVE_ORDER);\n }\n function invN(a) {\n return mod.invert(a, CURVE_ORDER);\n }\n const { ProjectivePoint: Point, normPrivateKeyToScalar, weierstrassEquation, isWithinCurveOrder, } = weierstrassPoints({\n ...CURVE,\n toBytes(c, point, isCompressed) {\n const a = point.toAffine();\n const x = Fp.toBytes(a.x);\n const cat = ut.concatBytes;\n if (isCompressed) {\n return cat(Uint8Array.from([point.hasEvenY() ? 0x02 : 0x03]), x);\n }\n else {\n return cat(Uint8Array.from([0x04]), x, Fp.toBytes(a.y));\n }\n },\n fromBytes(bytes) {\n const len = bytes.length;\n const head = bytes[0];\n const tail = bytes.subarray(1);\n // this.assertValidity() is done inside of fromHex\n if (len === compressedLen && (head === 0x02 || head === 0x03)) {\n const x = ut.bytesToNumberBE(tail);\n if (!isValidFieldElement(x))\n throw new Error('Point is not on curve');\n const y2 = weierstrassEquation(x); // y² = x³ + ax + b\n let y = Fp.sqrt(y2); // y = y² ^ (p+1)/4\n const isYOdd = (y & _1n) === _1n;\n // ECDSA\n const isHeadOdd = (head & 1) === 1;\n if (isHeadOdd !== isYOdd)\n y = Fp.neg(y);\n return { x, y };\n }\n else if (len === uncompressedLen && head === 0x04) {\n const x = Fp.fromBytes(tail.subarray(0, Fp.BYTES));\n const y = Fp.fromBytes(tail.subarray(Fp.BYTES, 2 * Fp.BYTES));\n return { x, y };\n }\n else {\n throw new Error(`Point of length ${len} was invalid. Expected ${compressedLen} compressed bytes or ${uncompressedLen} uncompressed bytes`);\n }\n },\n });\n const numToNByteStr = (num) => ut.bytesToHex(ut.numberToBytesBE(num, CURVE.nByteLength));\n function isBiggerThanHalfOrder(number) {\n const HALF = CURVE_ORDER >> _1n;\n return number > HALF;\n }\n function normalizeS(s) {\n return isBiggerThanHalfOrder(s) ? modN(-s) : s;\n }\n // slice bytes num\n const slcNum = (b, from, to) => ut.bytesToNumberBE(b.slice(from, to));\n /**\n * ECDSA signature with its (r, s) properties. Supports DER & compact representations.\n */\n class Signature {\n constructor(r, s, recovery) {\n this.r = r;\n this.s = s;\n this.recovery = recovery;\n this.assertValidity();\n }\n // pair (bytes of r, bytes of s)\n static fromCompact(hex) {\n const l = CURVE.nByteLength;\n hex = ensureBytes('compactSignature', hex, l * 2);\n return new Signature(slcNum(hex, 0, l), slcNum(hex, l, 2 * l));\n }\n // DER encoded ECDSA signature\n // https://bitcoin.stackexchange.com/questions/57644/what-are-the-parts-of-a-bitcoin-transaction-input-script\n static fromDER(hex) {\n const { r, s } = DER.toSig(ensureBytes('DER', hex));\n return new Signature(r, s);\n }\n assertValidity() {\n // can use assertGE here\n if (!isWithinCurveOrder(this.r))\n throw new Error('r must be 0 < r < CURVE.n');\n if (!isWithinCurveOrder(this.s))\n throw new Error('s must be 0 < s < CURVE.n');\n }\n addRecoveryBit(recovery) {\n return new Signature(this.r, this.s, recovery);\n }\n recoverPublicKey(msgHash) {\n const { r, s, recovery: rec } = this;\n const h = bits2int_modN(ensureBytes('msgHash', msgHash)); // Truncate hash\n if (rec == null || ![0, 1, 2, 3].includes(rec))\n throw new Error('recovery id invalid');\n const radj = rec === 2 || rec === 3 ? r + CURVE.n : r;\n if (radj >= Fp.ORDER)\n throw new Error('recovery id 2 or 3 invalid');\n const prefix = (rec & 1) === 0 ? '02' : '03';\n const R = Point.fromHex(prefix + numToNByteStr(radj));\n const ir = invN(radj); // r^-1\n const u1 = modN(-h * ir); // -hr^-1\n const u2 = modN(s * ir); // sr^-1\n const Q = Point.BASE.multiplyAndAddUnsafe(R, u1, u2); // (sr^-1)R-(hr^-1)G = -(hr^-1)G + (sr^-1)\n if (!Q)\n throw new Error('point at infinify'); // unsafe is fine: no priv data leaked\n Q.assertValidity();\n return Q;\n }\n // Signatures should be low-s, to prevent malleability.\n hasHighS() {\n return isBiggerThanHalfOrder(this.s);\n }\n normalizeS() {\n return this.hasHighS() ? new Signature(this.r, modN(-this.s), this.recovery) : this;\n }\n // DER-encoded\n toDERRawBytes() {\n return ut.hexToBytes(this.toDERHex());\n }\n toDERHex() {\n return DER.hexFromSig({ r: this.r, s: this.s });\n }\n // padded bytes of r, then padded bytes of s\n toCompactRawBytes() {\n return ut.hexToBytes(this.toCompactHex());\n }\n toCompactHex() {\n return numToNByteStr(this.r) + numToNByteStr(this.s);\n }\n }\n const utils = {\n isValidPrivateKey(privateKey) {\n try {\n normPrivateKeyToScalar(privateKey);\n return true;\n }\n catch (error) {\n return false;\n }\n },\n normPrivateKeyToScalar: normPrivateKeyToScalar,\n /**\n * Produces cryptographically secure private key from random of size (nBitLength+64)\n * as per FIPS 186 B.4.1 with modulo bias being neglible.\n */\n randomPrivateKey: () => {\n const rand = CURVE.randomBytes(Fp.BYTES + 8);\n const num = mod.hashToPrivateScalar(rand, CURVE_ORDER);\n return ut.numberToBytesBE(num, CURVE.nByteLength);\n },\n /**\n * Creates precompute table for an arbitrary EC point. Makes point \"cached\".\n * Allows to massively speed-up `point.multiply(scalar)`.\n * @returns cached point\n * @example\n * const fast = utils.precompute(8, ProjectivePoint.fromHex(someonesPubKey));\n * fast.multiply(privKey); // much faster ECDH now\n */\n precompute(windowSize = 8, point = Point.BASE) {\n point._setWindowSize(windowSize);\n point.multiply(BigInt(3)); // 3 is arbitrary, just need any number here\n return point;\n },\n };\n /**\n * Computes public key for a private key. Checks for validity of the private key.\n * @param privateKey private key\n * @param isCompressed whether to return compact (default), or full key\n * @returns Public key, full when isCompressed=false; short when isCompressed=true\n */\n function getPublicKey(privateKey, isCompressed = true) {\n return Point.fromPrivateKey(privateKey).toRawBytes(isCompressed);\n }\n /**\n * Quick and dirty check for item being public key. Does not validate hex, or being on-curve.\n */\n function isProbPub(item) {\n const arr = item instanceof Uint8Array;\n const str = typeof item === 'string';\n const len = (arr || str) && item.length;\n if (arr)\n return len === compressedLen || len === uncompressedLen;\n if (str)\n return len === 2 * compressedLen || len === 2 * uncompressedLen;\n if (item instanceof Point)\n return true;\n return false;\n }\n /**\n * ECDH (Elliptic Curve Diffie Hellman).\n * Computes shared public key from private key and public key.\n * Checks: 1) private key validity 2) shared key is on-curve.\n * Does NOT hash the result.\n * @param privateA private key\n * @param publicB different public key\n * @param isCompressed whether to return compact (default), or full key\n * @returns shared public key\n */\n function getSharedSecret(privateA, publicB, isCompressed = true) {\n if (isProbPub(privateA))\n throw new Error('first arg must be private key');\n if (!isProbPub(publicB))\n throw new Error('second arg must be public key');\n const b = Point.fromHex(publicB); // check for being on-curve\n return b.multiply(normPrivateKeyToScalar(privateA)).toRawBytes(isCompressed);\n }\n // RFC6979: ensure ECDSA msg is X bytes and < N. RFC suggests optional truncating via bits2octets.\n // FIPS 186-4 4.6 suggests the leftmost min(nBitLen, outLen) bits, which matches bits2int.\n // bits2int can produce res>N, we can do mod(res, N) since the bitLen is the same.\n // int2octets can't be used; pads small msgs with 0: unacceptatble for trunc as per RFC vectors\n const bits2int = CURVE.bits2int ||\n function (bytes) {\n // For curves with nBitLength % 8 !== 0: bits2octets(bits2octets(m)) !== bits2octets(m)\n // for some cases, since bytes.length * 8 is not actual bitLength.\n const num = ut.bytesToNumberBE(bytes); // check for == u8 done here\n const delta = bytes.length * 8 - CURVE.nBitLength; // truncate to nBitLength leftmost bits\n return delta > 0 ? num >> BigInt(delta) : num;\n };\n const bits2int_modN = CURVE.bits2int_modN ||\n function (bytes) {\n return modN(bits2int(bytes)); // can't use bytesToNumberBE here\n };\n // NOTE: pads output with zero as per spec\n const ORDER_MASK = ut.bitMask(CURVE.nBitLength);\n /**\n * Converts to bytes. Checks if num in `[0..ORDER_MASK-1]` e.g.: `[0..2^256-1]`.\n */\n function int2octets(num) {\n if (typeof num !== 'bigint')\n throw new Error('bigint expected');\n if (!(_0n <= num && num < ORDER_MASK))\n throw new Error(`bigint expected < 2^${CURVE.nBitLength}`);\n // works with order, can have different size than numToField!\n return ut.numberToBytesBE(num, CURVE.nByteLength);\n }\n // Steps A, D of RFC6979 3.2\n // Creates RFC6979 seed; converts msg/privKey to numbers.\n // Used only in sign, not in verify.\n // NOTE: we cannot assume here that msgHash has same amount of bytes as curve order, this will be wrong at least for P521.\n // Also it can be bigger for P224 + SHA256\n function prepSig(msgHash, privateKey, opts = defaultSigOpts) {\n if (['recovered', 'canonical'].some((k) => k in opts))\n throw new Error('sign() legacy options not supported');\n const { hash, randomBytes } = CURVE;\n let { lowS, prehash, extraEntropy: ent } = opts; // generates low-s sigs by default\n if (lowS == null)\n lowS = true; // RFC6979 3.2: we skip step A, because we already provide hash\n msgHash = ensureBytes('msgHash', msgHash);\n if (prehash)\n msgHash = ensureBytes('prehashed msgHash', hash(msgHash));\n // We can't later call bits2octets, since nested bits2int is broken for curves\n // with nBitLength % 8 !== 0. Because of that, we unwrap it here as int2octets call.\n // const bits2octets = (bits) => int2octets(bits2int_modN(bits))\n const h1int = bits2int_modN(msgHash);\n const d = normPrivateKeyToScalar(privateKey); // validate private key, convert to bigint\n const seedArgs = [int2octets(d), int2octets(h1int)];\n // extraEntropy. RFC6979 3.6: additional k' (optional).\n if (ent != null) {\n // K = HMAC_K(V || 0x00 || int2octets(x) || bits2octets(h1) || k')\n const e = ent === true ? randomBytes(Fp.BYTES) : ent; // generate random bytes OR pass as-is\n seedArgs.push(ensureBytes('extraEntropy', e, Fp.BYTES)); // check for being of size BYTES\n }\n const seed = ut.concatBytes(...seedArgs); // Step D of RFC6979 3.2\n const m = h1int; // NOTE: no need to call bits2int second time here, it is inside truncateHash!\n // Converts signature params into point w r/s, checks result for validity.\n function k2sig(kBytes) {\n // RFC 6979 Section 3.2, step 3: k = bits2int(T)\n const k = bits2int(kBytes); // Cannot use fields methods, since it is group element\n if (!isWithinCurveOrder(k))\n return; // Important: all mod() calls here must be done over N\n const ik = invN(k); // k^-1 mod n\n const q = Point.BASE.multiply(k).toAffine(); // q = Gk\n const r = modN(q.x); // r = q.x mod n\n if (r === _0n)\n return;\n // Can use scalar blinding b^-1(bm + bdr) where b ∈ [1,q−1] according to\n // https://tches.iacr.org/index.php/TCHES/article/view/7337/6509. We've decided against it:\n // a) dependency on CSPRNG b) 15% slowdown c) doesn't really help since bigints are not CT\n const s = modN(ik * modN(m + r * d)); // Not using blinding here\n if (s === _0n)\n return;\n let recovery = (q.x === r ? 0 : 2) | Number(q.y & _1n); // recovery bit (2 or 3, when q.x > n)\n let normS = s;\n if (lowS && isBiggerThanHalfOrder(s)) {\n normS = normalizeS(s); // if lowS was passed, ensure s is always\n recovery ^= 1; // // in the bottom half of N\n }\n return new Signature(r, normS, recovery); // use normS, not s\n }\n return { seed, k2sig };\n }\n const defaultSigOpts = { lowS: CURVE.lowS, prehash: false };\n const defaultVerOpts = { lowS: CURVE.lowS, prehash: false };\n /**\n * Signs message hash (not message: you need to hash it by yourself).\n * ```\n * sign(m, d, k) where\n * (x, y) = G × k\n * r = x mod n\n * s = (m + dr)/k mod n\n * ```\n * @param opts `lowS, extraEntropy, prehash`\n */\n function sign(msgHash, privKey, opts = defaultSigOpts) {\n const { seed, k2sig } = prepSig(msgHash, privKey, opts); // Steps A, D of RFC6979 3.2.\n const drbg = ut.createHmacDrbg(CURVE.hash.outputLen, CURVE.nByteLength, CURVE.hmac);\n return drbg(seed, k2sig); // Steps B, C, D, E, F, G\n }\n // Enable precomputes. Slows down first publicKey computation by 20ms.\n Point.BASE._setWindowSize(8);\n // utils.precompute(8, ProjectivePoint.BASE)\n /**\n * Verifies a signature against message hash and public key.\n * Rejects lowS signatures by default: to override,\n * specify option `{lowS: false}`. Implements section 4.1.4 from https://www.secg.org/sec1-v2.pdf:\n *\n * ```\n * verify(r, s, h, P) where\n * U1 = hs^-1 mod n\n * U2 = rs^-1 mod n\n * R = U1⋅G - U2⋅P\n * mod(R.x, n) == r\n * ```\n */\n function verify(signature, msgHash, publicKey, opts = defaultVerOpts) {\n const sg = signature;\n msgHash = ensureBytes('msgHash', msgHash);\n publicKey = ensureBytes('publicKey', publicKey);\n if ('strict' in opts)\n throw new Error('options.strict was renamed to lowS');\n const { lowS, prehash } = opts;\n let _sig = undefined;\n let P;\n try {\n if (typeof sg === 'string' || sg instanceof Uint8Array) {\n // Signature can be represented in 2 ways: compact (2*nByteLength) & DER (variable-length).\n // Since DER can also be 2*nByteLength bytes, we check for it first.\n try {\n _sig = Signature.fromDER(sg);\n }\n catch (derError) {\n if (!(derError instanceof DER.Err))\n throw derError;\n _sig = Signature.fromCompact(sg);\n }\n }\n else if (typeof sg === 'object' && typeof sg.r === 'bigint' && typeof sg.s === 'bigint') {\n const { r, s } = sg;\n _sig = new Signature(r, s);\n }\n else {\n throw new Error('PARSE');\n }\n P = Point.fromHex(publicKey);\n }\n catch (error) {\n if (error.message === 'PARSE')\n throw new Error(`signature must be Signature instance, Uint8Array or hex string`);\n return false;\n }\n if (lowS && _sig.hasHighS())\n return false;\n if (prehash)\n msgHash = CURVE.hash(msgHash);\n const { r, s } = _sig;\n const h = bits2int_modN(msgHash); // Cannot use fields methods, since it is group element\n const is = invN(s); // s^-1\n const u1 = modN(h * is); // u1 = hs^-1 mod n\n const u2 = modN(r * is); // u2 = rs^-1 mod n\n const R = Point.BASE.multiplyAndAddUnsafe(P, u1, u2)?.toAffine(); // R = u1⋅G + u2⋅P\n if (!R)\n return false;\n const v = modN(R.x);\n return v === r;\n }\n return {\n CURVE,\n getPublicKey,\n getSharedSecret,\n sign,\n verify,\n ProjectivePoint: Point,\n Signature,\n utils,\n };\n}\n// Implementation of the Shallue and van de Woestijne method for any Weierstrass curve\n// TODO: check if there is a way to merge this with uvRatio in Edwards && move to modular?\n// b = True and y = sqrt(u / v) if (u / v) is square in F, and\n// b = False and y = sqrt(Z * (u / v)) otherwise.\nexport function SWUFpSqrtRatio(Fp, Z) {\n // Generic implementation\n const q = Fp.ORDER;\n let l = 0n;\n for (let o = q - 1n; o % 2n === 0n; o /= 2n)\n l += 1n;\n const c1 = l; // 1. c1, the largest integer such that 2^c1 divides q - 1.\n const c2 = (q - 1n) / 2n ** c1; // 2. c2 = (q - 1) / (2^c1) # Integer arithmetic\n const c3 = (c2 - 1n) / 2n; // 3. c3 = (c2 - 1) / 2 # Integer arithmetic\n const c4 = 2n ** c1 - 1n; // 4. c4 = 2^c1 - 1 # Integer arithmetic\n const c5 = 2n ** (c1 - 1n); // 5. c5 = 2^(c1 - 1) # Integer arithmetic\n const c6 = Fp.pow(Z, c2); // 6. c6 = Z^c2\n const c7 = Fp.pow(Z, (c2 + 1n) / 2n); // 7. c7 = Z^((c2 + 1) / 2)\n let sqrtRatio = (u, v) => {\n let tv1 = c6; // 1. tv1 = c6\n let tv2 = Fp.pow(v, c4); // 2. tv2 = v^c4\n let tv3 = Fp.sqr(tv2); // 3. tv3 = tv2^2\n tv3 = Fp.mul(tv3, v); // 4. tv3 = tv3 * v\n let tv5 = Fp.mul(u, tv3); // 5. tv5 = u * tv3\n tv5 = Fp.pow(tv5, c3); // 6. tv5 = tv5^c3\n tv5 = Fp.mul(tv5, tv2); // 7. tv5 = tv5 * tv2\n tv2 = Fp.mul(tv5, v); // 8. tv2 = tv5 * v\n tv3 = Fp.mul(tv5, u); // 9. tv3 = tv5 * u\n let tv4 = Fp.mul(tv3, tv2); // 10. tv4 = tv3 * tv2\n tv5 = Fp.pow(tv4, c5); // 11. tv5 = tv4^c5\n let isQR = Fp.eql(tv5, Fp.ONE); // 12. isQR = tv5 == 1\n tv2 = Fp.mul(tv3, c7); // 13. tv2 = tv3 * c7\n tv5 = Fp.mul(tv4, tv1); // 14. tv5 = tv4 * tv1\n tv3 = Fp.cmov(tv2, tv3, isQR); // 15. tv3 = CMOV(tv2, tv3, isQR)\n tv4 = Fp.cmov(tv5, tv4, isQR); // 16. tv4 = CMOV(tv5, tv4, isQR)\n // 17. for i in (c1, c1 - 1, ..., 2):\n for (let i = c1; i > 1; i--) {\n let tv5 = 2n ** (i - 2n); // 18. tv5 = i - 2; 19. tv5 = 2^tv5\n let tvv5 = Fp.pow(tv4, tv5); // 20. tv5 = tv4^tv5\n const e1 = Fp.eql(tvv5, Fp.ONE); // 21. e1 = tv5 == 1\n tv2 = Fp.mul(tv3, tv1); // 22. tv2 = tv3 * tv1\n tv1 = Fp.mul(tv1, tv1); // 23. tv1 = tv1 * tv1\n tvv5 = Fp.mul(tv4, tv1); // 24. tv5 = tv4 * tv1\n tv3 = Fp.cmov(tv2, tv3, e1); // 25. tv3 = CMOV(tv2, tv3, e1)\n tv4 = Fp.cmov(tvv5, tv4, e1); // 26. tv4 = CMOV(tv5, tv4, e1)\n }\n return { isValid: isQR, value: tv3 };\n };\n if (Fp.ORDER % 4n === 3n) {\n // sqrt_ratio_3mod4(u, v)\n const c1 = (Fp.ORDER - 3n) / 4n; // 1. c1 = (q - 3) / 4 # Integer arithmetic\n const c2 = Fp.sqrt(Fp.neg(Z)); // 2. c2 = sqrt(-Z)\n sqrtRatio = (u, v) => {\n let tv1 = Fp.sqr(v); // 1. tv1 = v^2\n const tv2 = Fp.mul(u, v); // 2. tv2 = u * v\n tv1 = Fp.mul(tv1, tv2); // 3. tv1 = tv1 * tv2\n let y1 = Fp.pow(tv1, c1); // 4. y1 = tv1^c1\n y1 = Fp.mul(y1, tv2); // 5. y1 = y1 * tv2\n const y2 = Fp.mul(y1, c2); // 6. y2 = y1 * c2\n const tv3 = Fp.mul(Fp.sqr(y1), v); // 7. tv3 = y1^2; 8. tv3 = tv3 * v\n const isQR = Fp.eql(tv3, u); // 9. isQR = tv3 == u\n let y = Fp.cmov(y2, y1, isQR); // 10. y = CMOV(y2, y1, isQR)\n return { isValid: isQR, value: y }; // 11. return (isQR, y) isQR ? y : y*c2\n };\n }\n // No curves uses that\n // if (Fp.ORDER % 8n === 5n) // sqrt_ratio_5mod8\n return sqrtRatio;\n}\n// From draft-irtf-cfrg-hash-to-curve-16\nexport function mapToCurveSimpleSWU(Fp, opts) {\n mod.validateField(Fp);\n if (!Fp.isValid(opts.A) || !Fp.isValid(opts.B) || !Fp.isValid(opts.Z))\n throw new Error('mapToCurveSimpleSWU: invalid opts');\n const sqrtRatio = SWUFpSqrtRatio(Fp, opts.Z);\n if (!Fp.isOdd)\n throw new Error('Fp.isOdd is not implemented!');\n // Input: u, an element of F.\n // Output: (x, y), a point on E.\n return (u) => {\n // prettier-ignore\n let tv1, tv2, tv3, tv4, tv5, tv6, x, y;\n tv1 = Fp.sqr(u); // 1. tv1 = u^2\n tv1 = Fp.mul(tv1, opts.Z); // 2. tv1 = Z * tv1\n tv2 = Fp.sqr(tv1); // 3. tv2 = tv1^2\n tv2 = Fp.add(tv2, tv1); // 4. tv2 = tv2 + tv1\n tv3 = Fp.add(tv2, Fp.ONE); // 5. tv3 = tv2 + 1\n tv3 = Fp.mul(tv3, opts.B); // 6. tv3 = B * tv3\n tv4 = Fp.cmov(opts.Z, Fp.neg(tv2), !Fp.eql(tv2, Fp.ZERO)); // 7. tv4 = CMOV(Z, -tv2, tv2 != 0)\n tv4 = Fp.mul(tv4, opts.A); // 8. tv4 = A * tv4\n tv2 = Fp.sqr(tv3); // 9. tv2 = tv3^2\n tv6 = Fp.sqr(tv4); // 10. tv6 = tv4^2\n tv5 = Fp.mul(tv6, opts.A); // 11. tv5 = A * tv6\n tv2 = Fp.add(tv2, tv5); // 12. tv2 = tv2 + tv5\n tv2 = Fp.mul(tv2, tv3); // 13. tv2 = tv2 * tv3\n tv6 = Fp.mul(tv6, tv4); // 14. tv6 = tv6 * tv4\n tv5 = Fp.mul(tv6, opts.B); // 15. tv5 = B * tv6\n tv2 = Fp.add(tv2, tv5); // 16. tv2 = tv2 + tv5\n x = Fp.mul(tv1, tv3); // 17. x = tv1 * tv3\n const { isValid, value } = sqrtRatio(tv2, tv6); // 18. (is_gx1_square, y1) = sqrt_ratio(tv2, tv6)\n y = Fp.mul(tv1, u); // 19. y = tv1 * u -> Z * u^3 * y1\n y = Fp.mul(y, value); // 20. y = y * y1\n x = Fp.cmov(x, tv3, isValid); // 21. x = CMOV(x, tv3, is_gx1_square)\n y = Fp.cmov(y, value, isValid); // 22. y = CMOV(y, y1, is_gx1_square)\n const e1 = Fp.isOdd(u) === Fp.isOdd(y); // 23. e1 = sgn0(u) == sgn0(y)\n y = Fp.cmov(Fp.neg(y), y, e1); // 24. y = CMOV(-y, y, e1)\n x = Fp.div(x, tv4); // 25. x = x / tv4\n return { x, y };\n };\n}\n","// ----------------------------------------------------------------------------\n\n// PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:\n// https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code\n// EDIT THE CORRESPONDENT .ts FILE INSTEAD\n\nimport { mod } from './modular.js';\nimport { bytesToNumberBE, concatBytes, utf8ToBytes, validateObject } from './utils.js';\nfunction validateDST(dst) {\n if (dst instanceof Uint8Array)\n return dst;\n if (typeof dst === 'string')\n return utf8ToBytes(dst);\n throw new Error('DST must be Uint8Array or string');\n}\n// Octet Stream to Integer. \"spec\" implementation of os2ip is 2.5x slower vs bytesToNumberBE.\nconst os2ip = bytesToNumberBE;\n// Integer to Octet Stream (numberToBytesBE)\nfunction i2osp(value, length) {\n if (value < 0 || value >= 1 << (8 * length)) {\n throw new Error(`bad I2OSP call: value=${value} length=${length}`);\n }\n const res = Array.from({ length }).fill(0);\n for (let i = length - 1; i >= 0; i--) {\n res[i] = value & 0xff;\n value >>>= 8;\n }\n return new Uint8Array(res);\n}\nfunction strxor(a, b) {\n const arr = new Uint8Array(a.length);\n for (let i = 0; i < a.length; i++) {\n arr[i] = a[i] ^ b[i];\n }\n return arr;\n}\nfunction isBytes(item) {\n if (!(item instanceof Uint8Array))\n throw new Error('Uint8Array expected');\n}\nfunction isNum(item) {\n if (!Number.isSafeInteger(item))\n throw new Error('number expected');\n}\n// Produces a uniformly random byte string using a cryptographic hash function H that outputs b bits\n// https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-hash-to-curve-11#section-5.4.1\nexport function expand_message_xmd(msg, DST, lenInBytes, H) {\n isBytes(msg);\n isBytes(DST);\n isNum(lenInBytes);\n // https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-hash-to-curve-16#section-5.3.3\n if (DST.length > 255)\n DST = H(concatBytes(utf8ToBytes('H2C-OVERSIZE-DST-'), DST));\n const { outputLen: b_in_bytes, blockLen: r_in_bytes } = H;\n const ell = Math.ceil(lenInBytes / b_in_bytes);\n if (ell > 255)\n throw new Error('Invalid xmd length');\n const DST_prime = concatBytes(DST, i2osp(DST.length, 1));\n const Z_pad = i2osp(0, r_in_bytes);\n const l_i_b_str = i2osp(lenInBytes, 2); // len_in_bytes_str\n const b = new Array(ell);\n const b_0 = H(concatBytes(Z_pad, msg, l_i_b_str, i2osp(0, 1), DST_prime));\n b[0] = H(concatBytes(b_0, i2osp(1, 1), DST_prime));\n for (let i = 1; i <= ell; i++) {\n const args = [strxor(b_0, b[i - 1]), i2osp(i + 1, 1), DST_prime];\n b[i] = H(concatBytes(...args));\n }\n const pseudo_random_bytes = concatBytes(...b);\n return pseudo_random_bytes.slice(0, lenInBytes);\n}\nexport function expand_message_xof(msg, DST, lenInBytes, k, H) {\n isBytes(msg);\n isBytes(DST);\n isNum(lenInBytes);\n // https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-hash-to-curve-16#section-5.3.3\n // DST = H('H2C-OVERSIZE-DST-' || a_very_long_DST, Math.ceil((lenInBytes * k) / 8));\n if (DST.length > 255) {\n const dkLen = Math.ceil((2 * k) / 8);\n DST = H.create({ dkLen }).update(utf8ToBytes('H2C-OVERSIZE-DST-')).update(DST).digest();\n }\n if (lenInBytes > 65535 || DST.length > 255)\n throw new Error('expand_message_xof: invalid lenInBytes');\n return (H.create({ dkLen: lenInBytes })\n .update(msg)\n .update(i2osp(lenInBytes, 2))\n // 2. DST_prime = DST || I2OSP(len(DST), 1)\n .update(DST)\n .update(i2osp(DST.length, 1))\n .digest());\n}\n/**\n * Hashes arbitrary-length byte strings to a list of one or more elements of a finite field F\n * https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-hash-to-curve-11#section-5.3\n * @param msg a byte string containing the message to hash\n * @param count the number of elements of F to output\n * @param options `{DST: string, p: bigint, m: number, k: number, expand: 'xmd' | 'xof', hash: H}`, see above\n * @returns [u_0, ..., u_(count - 1)], a list of field elements.\n */\nexport function hash_to_field(msg, count, options) {\n validateObject(options, {\n DST: 'string',\n p: 'bigint',\n m: 'isSafeInteger',\n k: 'isSafeInteger',\n hash: 'hash',\n });\n const { p, k, m, hash, expand, DST: _DST } = options;\n isBytes(msg);\n isNum(count);\n const DST = validateDST(_DST);\n const log2p = p.toString(2).length;\n const L = Math.ceil((log2p + k) / 8); // section 5.1 of ietf draft link above\n const len_in_bytes = count * m * L;\n let prb; // pseudo_random_bytes\n if (expand === 'xmd') {\n prb = expand_message_xmd(msg, DST, len_in_bytes, hash);\n }\n else if (expand === 'xof') {\n prb = expand_message_xof(msg, DST, len_in_bytes, k, hash);\n }\n else if (expand === undefined) {\n prb = msg;\n }\n else {\n throw new Error('expand must be \"xmd\", \"xof\" or undefined');\n }\n const u = new Array(count);\n for (let i = 0; i < count; i++) {\n const e = new Array(m);\n for (let j = 0; j < m; j++) {\n const elm_offset = L * (j + i * m);\n const tv = prb.subarray(elm_offset, elm_offset + L);\n e[j] = mod(os2ip(tv), p);\n }\n u[i] = e;\n }\n return u;\n}\nexport function isogenyMap(field, map) {\n // Make same order as in spec\n const COEFF = map.map((i) => Array.from(i).reverse());\n return (x, y) => {\n const [xNum, xDen, yNum, yDen] = COEFF.map((val) => val.reduce((acc, i) => field.add(field.mul(acc, x), i)));\n x = field.div(xNum, xDen); // xNum / xDen\n y = field.mul(y, field.div(yNum, yDen)); // y * (yNum / yDev)\n return { x, y };\n };\n}\nexport function createHasher(Point, mapToCurve, def) {\n if (typeof mapToCurve !== 'function')\n throw new Error('mapToCurve() must be defined');\n return {\n // Encodes byte string to elliptic curve\n // https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-hash-to-curve-16#section-3\n hashToCurve(msg, options) {\n const u = hash_to_field(msg, 2, { ...def, DST: def.DST, ...options });\n const u0 = Point.fromAffine(mapToCurve(u[0]));\n const u1 = Point.fromAffine(mapToCurve(u[1]));\n const P = u0.add(u1).clearCofactor();\n P.assertValidity();\n return P;\n },\n // https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-hash-to-curve-16#section-3\n encodeToCurve(msg, options) {\n const u = hash_to_field(msg, 1, { ...def, DST: def.encodeDST, ...options });\n const P = Point.fromAffine(mapToCurve(u[0])).clearCofactor();\n P.assertValidity();\n return P;\n },\n };\n}\n","// ----------------------------------------------------------------------------\n\n// PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:\n// https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code\n// EDIT THE CORRESPONDENT .ts FILE INSTEAD\n\n/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nimport { hmac } from '../noble-hashes/hmac.js';\nimport { concatBytes, randomBytes } from '../noble-hashes/utils.js';\nimport { weierstrass } from './abstract/weierstrass.js';\n// connects noble-curves to noble-hashes\nexport function getHash(hash) {\n return {\n hash,\n hmac: (key, ...msgs) => hmac(hash, key, concatBytes(...msgs)),\n randomBytes,\n };\n}\nexport function createCurve(curveDef, defHash) {\n const create = (hash) => weierstrass({ ...curveDef, ...getHash(hash) });\n return Object.freeze({ ...create(defHash), create });\n}\n","// ----------------------------------------------------------------------------\n\n// PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:\n// https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code\n// EDIT THE CORRESPONDENT .ts FILE INSTEAD\n\n/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nimport { sha256 } from '../noble-hashes/sha256.js';\nimport { randomBytes } from '../noble-hashes/utils.js';\nimport { Fp as Field, mod, pow2 } from './abstract/modular.js';\nimport { mapToCurveSimpleSWU } from './abstract/weierstrass.js';\nimport { bytesToNumberBE, concatBytes, ensureBytes, numberToBytesBE } from './abstract/utils.js';\nimport * as htf from './abstract/hash-to-curve.js';\nimport { createCurve } from './_shortw_utils.js';\nconst secp256k1P = BigInt('0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f');\nconst secp256k1N = BigInt('0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141');\nconst _1n = BigInt(1);\nconst _2n = BigInt(2);\nconst divNearest = (a, b) => (a + b / _2n) / b;\n/**\n * √n = n^((p+1)/4) for fields p = 3 mod 4. We unwrap the loop and multiply bit-by-bit.\n * (P+1n/4n).toString(2) would produce bits [223x 1, 0, 22x 1, 4x 0, 11, 00]\n */\nfunction sqrtMod(y) {\n const P = secp256k1P;\n // prettier-ignore\n const _3n = BigInt(3), _6n = BigInt(6), _11n = BigInt(11), _22n = BigInt(22);\n // prettier-ignore\n const _23n = BigInt(23), _44n = BigInt(44), _88n = BigInt(88);\n const b2 = (y * y * y) % P; // x^3, 11\n const b3 = (b2 * b2 * y) % P; // x^7\n const b6 = (pow2(b3, _3n, P) * b3) % P;\n const b9 = (pow2(b6, _3n, P) * b3) % P;\n const b11 = (pow2(b9, _2n, P) * b2) % P;\n const b22 = (pow2(b11, _11n, P) * b11) % P;\n const b44 = (pow2(b22, _22n, P) * b22) % P;\n const b88 = (pow2(b44, _44n, P) * b44) % P;\n const b176 = (pow2(b88, _88n, P) * b88) % P;\n const b220 = (pow2(b176, _44n, P) * b44) % P;\n const b223 = (pow2(b220, _3n, P) * b3) % P;\n const t1 = (pow2(b223, _23n, P) * b22) % P;\n const t2 = (pow2(t1, _6n, P) * b2) % P;\n const root = pow2(t2, _2n, P);\n if (!Fp.eql(Fp.sqr(root), y))\n throw new Error('Cannot find square root');\n return root;\n}\nconst Fp = Field(secp256k1P, undefined, undefined, { sqrt: sqrtMod });\nexport const secp256k1 = createCurve({\n a: BigInt(0),\n b: BigInt(7),\n Fp,\n n: secp256k1N,\n // Base point (x, y) aka generator point\n Gx: BigInt('55066263022277343669578718895168534326250603453777594175500187360389116729240'),\n Gy: BigInt('32670510020758816978083085130507043184471273380659243275938904335757337482424'),\n h: BigInt(1),\n lowS: true,\n /**\n * secp256k1 belongs to Koblitz curves: it has efficiently computable endomorphism.\n * Endomorphism uses 2x less RAM, speeds up precomputation by 2x and ECDH / key recovery by 20%.\n * For precomputed wNAF it trades off 1/2 init time & 1/3 ram for 20% perf hit.\n * Explanation: https://gist.github.com/paulmillr/eb670806793e84df628a7c434a873066\n */\n endo: {\n beta: BigInt('0x7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee'),\n splitScalar: (k) => {\n const n = secp256k1N;\n const a1 = BigInt('0x3086d221a7d46bcde86c90e49284eb15');\n const b1 = -_1n * BigInt('0xe4437ed6010e88286f547fa90abfe4c3');\n const a2 = BigInt('0x114ca50f7a8e2f3f657c1108d9d44cfd8');\n const b2 = a1;\n const POW_2_128 = BigInt('0x100000000000000000000000000000000'); // (2n**128n).toString(16)\n const c1 = divNearest(b2 * k, n);\n const c2 = divNearest(-b1 * k, n);\n let k1 = mod(k - c1 * a1 - c2 * a2, n);\n let k2 = mod(-c1 * b1 - c2 * b2, n);\n const k1neg = k1 > POW_2_128;\n const k2neg = k2 > POW_2_128;\n if (k1neg)\n k1 = n - k1;\n if (k2neg)\n k2 = n - k2;\n if (k1 > POW_2_128 || k2 > POW_2_128) {\n throw new Error('splitScalar: Endomorphism failed, k=' + k);\n }\n return { k1neg, k1, k2neg, k2 };\n },\n },\n}, sha256);\n// Schnorr signatures are superior to ECDSA from above. Below is Schnorr-specific BIP0340 code.\n// https://github.com/bitcoin/bips/blob/master/bip-0340.mediawiki\nconst _0n = BigInt(0);\nconst fe = (x) => typeof x === 'bigint' && _0n < x && x < secp256k1P;\nconst ge = (x) => typeof x === 'bigint' && _0n < x && x < secp256k1N;\n/** An object mapping tags to their tagged hash prefix of [SHA256(tag) | SHA256(tag)] */\nconst TAGGED_HASH_PREFIXES = {};\nfunction taggedHash(tag, ...messages) {\n let tagP = TAGGED_HASH_PREFIXES[tag];\n if (tagP === undefined) {\n const tagH = sha256(Uint8Array.from(tag, (c) => c.charCodeAt(0)));\n tagP = concatBytes(tagH, tagH);\n TAGGED_HASH_PREFIXES[tag] = tagP;\n }\n return sha256(concatBytes(tagP, ...messages));\n}\n// ECDSA compact points are 33-byte. Schnorr is 32: we strip first byte 0x02 or 0x03\nconst pointToBytes = (point) => point.toRawBytes(true).slice(1);\nconst numTo32b = (n) => numberToBytesBE(n, 32);\nconst modP = (x) => mod(x, secp256k1P);\nconst modN = (x) => mod(x, secp256k1N);\nconst Point = secp256k1.ProjectivePoint;\nconst GmulAdd = (Q, a, b) => Point.BASE.multiplyAndAddUnsafe(Q, a, b);\n// Calculate point, scalar and bytes\nfunction schnorrGetExtPubKey(priv) {\n let d_ = secp256k1.utils.normPrivateKeyToScalar(priv); // same method executed in fromPrivateKey\n let p = Point.fromPrivateKey(d_); // P = d'⋅G; 0 < d' < n check is done inside\n const scalar = p.hasEvenY() ? d_ : modN(-d_);\n return { scalar: scalar, bytes: pointToBytes(p) };\n}\n/**\n * lift_x from BIP340. Convert 32-byte x coordinate to elliptic curve point.\n * @returns valid point checked for being on-curve\n */\nfunction lift_x(x) {\n if (!fe(x))\n throw new Error('bad x: need 0 < x < p'); // Fail if x ≥ p.\n const xx = modP(x * x);\n const c = modP(xx * x + BigInt(7)); // Let c = x³ + 7 mod p.\n let y = sqrtMod(c); // Let y = c^(p+1)/4 mod p.\n if (y % 2n !== 0n)\n y = modP(-y); // Return the unique point P such that x(P) = x and\n const p = new Point(x, y, _1n); // y(P) = y if y mod 2 = 0 or y(P) = p-y otherwise.\n p.assertValidity();\n return p;\n}\n/**\n * Create tagged hash, convert it to bigint, reduce modulo-n.\n */\nfunction challenge(...args) {\n return modN(bytesToNumberBE(taggedHash('BIP0340/challenge', ...args)));\n}\n/**\n * Schnorr public key is just `x` coordinate of Point as per BIP340.\n */\nfunction schnorrGetPublicKey(privateKey) {\n return schnorrGetExtPubKey(privateKey).bytes; // d'=int(sk). Fail if d'=0 or d'≥n. Ret bytes(d'⋅G)\n}\n/**\n * Creates Schnorr signature as per BIP340. Verifies itself before returning anything.\n * auxRand is optional and is not the sole source of k generation: bad CSPRNG won't be dangerous.\n */\nfunction schnorrSign(message, privateKey, auxRand = randomBytes(32)) {\n const m = ensureBytes('message', message);\n const { bytes: px, scalar: d } = schnorrGetExtPubKey(privateKey); // checks for isWithinCurveOrder\n const a = ensureBytes('auxRand', auxRand, 32); // Auxiliary random data a: a 32-byte array\n const t = numTo32b(d ^ bytesToNumberBE(taggedHash('BIP0340/aux', a))); // Let t be the byte-wise xor of bytes(d) and hash/aux(a)\n const rand = taggedHash('BIP0340/nonce', t, px, m); // Let rand = hash/nonce(t || bytes(P) || m)\n const k_ = modN(bytesToNumberBE(rand)); // Let k' = int(rand) mod n\n if (k_ === _0n)\n throw new Error('sign failed: k is zero'); // Fail if k' = 0.\n const { bytes: rx, scalar: k } = schnorrGetExtPubKey(k_); // Let R = k'⋅G.\n const e = challenge(rx, px, m); // Let e = int(hash/challenge(bytes(R) || bytes(P) || m)) mod n.\n const sig = new Uint8Array(64); // Let sig = bytes(R) || bytes((k + ed) mod n).\n sig.set(rx, 0);\n sig.set(numTo32b(modN(k + e * d)), 32);\n // If Verify(bytes(P), m, sig) (see below) returns failure, abort\n if (!schnorrVerify(sig, m, px))\n throw new Error('sign: Invalid signature produced');\n return sig;\n}\n/**\n * Verifies Schnorr signature.\n * Will swallow errors & return false except for initial type validation of arguments.\n */\nfunction schnorrVerify(signature, message, publicKey) {\n const sig = ensureBytes('signature', signature, 64);\n const m = ensureBytes('message', message);\n const pub = ensureBytes('publicKey', publicKey, 32);\n try {\n const P = lift_x(bytesToNumberBE(pub)); // P = lift_x(int(pk)); fail if that fails\n const r = bytesToNumberBE(sig.subarray(0, 32)); // Let r = int(sig[0:32]); fail if r ≥ p.\n if (!fe(r))\n return false;\n const s = bytesToNumberBE(sig.subarray(32, 64)); // Let s = int(sig[32:64]); fail if s ≥ n.\n if (!ge(s))\n return false;\n const e = challenge(numTo32b(r), pointToBytes(P), m); // int(challenge(bytes(r)||bytes(P)||m))%n\n const R = GmulAdd(P, s, modN(-e)); // R = s⋅G - e⋅P\n if (!R || !R.hasEvenY() || R.toAffine().x !== r)\n return false; // -eP == (n-e)P\n return true; // Fail if is_infinite(R) / not has_even_y(R) / x(R) ≠ r.\n }\n catch (error) {\n return false;\n }\n}\nexport const schnorr = {\n getPublicKey: schnorrGetPublicKey,\n sign: schnorrSign,\n verify: schnorrVerify,\n utils: {\n randomPrivateKey: secp256k1.utils.randomPrivateKey,\n lift_x,\n pointToBytes,\n numberToBytesBE,\n bytesToNumberBE,\n taggedHash,\n mod,\n },\n};\nconst isoMap = htf.isogenyMap(Fp, [\n // xNum\n [\n '0x8e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38daaaaa8c7',\n '0x7d3d4c80bc321d5b9f315cea7fd44c5d595d2fc0bf63b92dfff1044f17c6581',\n '0x534c328d23f234e6e2a413deca25caece4506144037c40314ecbd0b53d9dd262',\n '0x8e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38daaaaa88c',\n ],\n // xDen\n [\n '0xd35771193d94918a9ca34ccbb7b640dd86cd409542f8487d9fe6b745781eb49b',\n '0xedadc6f64383dc1df7c4b2d51b54225406d36b641f5e41bbc52a56612a8c6d14',\n '0x0000000000000000000000000000000000000000000000000000000000000001', // LAST 1\n ],\n // yNum\n [\n '0x4bda12f684bda12f684bda12f684bda12f684bda12f684bda12f684b8e38e23c',\n '0xc75e0c32d5cb7c0fa9d0a54b12a0a6d5647ab046d686da6fdffc90fc201d71a3',\n '0x29a6194691f91a73715209ef6512e576722830a201be2018a765e85a9ecee931',\n '0x2f684bda12f684bda12f684bda12f684bda12f684bda12f684bda12f38e38d84',\n ],\n // yDen\n [\n '0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffff93b',\n '0x7a06534bb8bdb49fd5e9e6632722c2989467c1bfc8e8d978dfb425d2685c2573',\n '0x6484aa716545ca2cf3a70c3fa8fe337e0a3d21162f0d6299a7bf8192bfd2a76f',\n '0x0000000000000000000000000000000000000000000000000000000000000001', // LAST 1\n ],\n].map((i) => i.map((j) => BigInt(j))));\nconst mapSWU = mapToCurveSimpleSWU(Fp, {\n A: BigInt('0x3f8731abdd661adca08a5558f0f5d272e953d363cb6f0e5d405447c01a444533'),\n B: BigInt('1771'),\n Z: Fp.create(BigInt('-11')),\n});\nexport const { hashToCurve, encodeToCurve } = htf.createHasher(secp256k1.ProjectivePoint, (scalars) => {\n const { x, y } = mapSWU(Fp.create(scalars[0]));\n return isoMap(x, y);\n}, {\n DST: 'secp256k1_XMD:SHA-256_SSWU_RO_',\n encodeDST: 'secp256k1_XMD:SHA-256_SSWU_NU_',\n p: Fp.ORDER,\n m: 1,\n k: 128,\n expand: 'xmd',\n hash: sha256,\n});\n","// ----------------------------------------------------------------------------\n\n// PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:\n// https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code\n// EDIT THE CORRESPONDENT .ts FILE INSTEAD\n\n/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nimport { createCurve } from './_shortw_utils.js';\nimport { sha256 } from '../noble-hashes/sha256.js';\nimport { Fp as Field } from './abstract/modular.js';\nimport { mapToCurveSimpleSWU } from './abstract/weierstrass.js';\nimport * as htf from './abstract/hash-to-curve.js';\n// NIST secp256r1 aka P256\n// https://www.secg.org/sec2-v2.pdf, https://neuromancer.sk/std/nist/P-256\n// Field over which we'll do calculations; 2n**224n * (2n**32n-1n) + 2n**192n + 2n**96n-1n\nconst Fp = Field(BigInt('0xffffffff00000001000000000000000000000000ffffffffffffffffffffffff'));\nconst CURVE_A = Fp.create(BigInt('-3'));\nconst CURVE_B = BigInt('0x5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b');\nconst mapSWU = mapToCurveSimpleSWU(Fp, {\n A: CURVE_A,\n B: CURVE_B,\n Z: Fp.create(BigInt('-10')),\n});\nexport const P256 = createCurve({\n // Params: a, b\n a: CURVE_A,\n b: CURVE_B,\n Fp,\n // Curve order, total count of valid points in the field\n n: BigInt('0xffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551'),\n // Base point (x, y) aka generator point\n Gx: BigInt('0x6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296'),\n Gy: BigInt('0x4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5'),\n h: BigInt(1),\n lowS: false,\n}, sha256);\nexport const secp256r1 = P256;\nconst { hashToCurve, encodeToCurve } = htf.createHasher(secp256r1.ProjectivePoint, (scalars) => mapSWU(scalars[0]), {\n DST: 'P256_XMD:SHA-256_SSWU_RO_',\n encodeDST: 'P256_XMD:SHA-256_SSWU_NU_',\n p: Fp.ORDER,\n m: 1,\n k: 128,\n expand: 'xmd',\n hash: sha256,\n});\nexport { hashToCurve, encodeToCurve };\n","// ----------------------------------------------------------------------------\n\n// PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:\n// https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code\n// EDIT THE CORRESPONDENT .ts FILE INSTEAD\n\n/* ------------------------------------------------------------------------ */\nimport { hmac as _hmac } from '../../static_dependencies/noble-hashes/hmac.js';\nimport { base16, base64, base58 } from '../../static_dependencies/scure-base/index.js';\nimport { Base64 } from '../../static_dependencies/jsencrypt/lib/asn1js/base64.js';\nimport { ASN1 } from \"../../static_dependencies/jsencrypt/lib/asn1js/asn1.js\";\nimport { secp256k1 } from '../../static_dependencies/noble-curves/secp256k1.js';\nimport { P256 } from '../../static_dependencies/noble-curves/p256.js';\nimport { numberToBytesLE } from '../../static_dependencies/noble-curves/abstract/utils.js';\nimport { sha256 } from '../../static_dependencies/noble-hashes/sha256.js';\n/* ------------------------------------------------------------------------ */\nconst encoders = {\n binary: x => x,\n hex: base16.encode,\n base64: base64.encode,\n};\nconst supportedCurve = {\n '1.3.132.0.10': secp256k1,\n '1.2.840.10045.3.1.7': P256,\n};\n/* ............................................. */\nconst hash = (request, hash, digest = 'hex') => {\n const binary = hash(request);\n return encoders[digest](binary);\n};\n/* ............................................. */\nconst hmac = (request, secret, hash, digest = 'hex') => {\n const binary = _hmac(hash, secret, request);\n return encoders[digest](binary);\n};\n/* ............................................. */\nfunction ecdsa(request, secret, curve, prehash = null, fixedLength = false) {\n if (prehash) {\n request = hash(request, prehash, 'hex');\n }\n if (typeof secret === 'string' && secret.length > 64) {\n // decode pem key\n if (secret.startsWith('-----BEGIN EC PRIVATE KEY-----')) {\n const der = Base64.unarmor(secret);\n let asn1 = ASN1.decode(der);\n if (asn1.sub.length === 4) {\n // ECPrivateKey ::= SEQUENCE {\n // version INTEGER { ecPrivkeyVer1(1) } (ecPrivkeyVer1),\n // privateKey OCTET STRING,\n // parameters [0] ECParameters {{ NamedCurve }} OPTIONAL,\n // publicKey [1] BIT STRING OPTIONAL\n // }\n if (typeof asn1.sub[2].sub !== null && asn1.sub[2].sub.length > 0) {\n const oid = asn1.sub[2].sub[0].content(undefined);\n if (supportedCurve[oid] === undefined)\n throw new Error('Unsupported curve');\n curve = supportedCurve[oid];\n }\n secret = asn1.sub[1].getHexStringValue();\n }\n else {\n // maybe return false\n throw new Error('Unsupported key format');\n }\n }\n else {\n // maybe return false\n throw new Error('Unsupported key format');\n }\n }\n let signature = curve.sign(request, secret, {\n lowS: true,\n });\n const minimumSize = (BigInt(1) << (BigInt(8) * BigInt(31))) - BigInt(1);\n const halfOrder = curve.CURVE.n / BigInt(2);\n let counter = 0;\n while (fixedLength && (signature.r > halfOrder || signature.r <= minimumSize || signature.s <= minimumSize)) {\n signature = curve.sign(request, secret, {\n lowS: true,\n extraEntropy: numberToBytesLE(BigInt(counter), 32)\n });\n counter += 1;\n }\n return {\n 'r': signature.r.toString(16),\n 's': signature.s.toString(16),\n 'v': signature.recovery,\n };\n}\nfunction axolotl(request, secret, curve) {\n // used for waves.exchange (that's why the output is base58)\n const signature = curve.signModified(request, secret);\n return base58.encode(signature);\n}\nfunction eddsa(request, secret, curve) {\n let privateKey = undefined;\n if (secret.length === 32) {\n // ed25519 secret is 32 bytes\n privateKey = secret;\n }\n else if (typeof secret === 'string') {\n // secret is the base64 pem encoded key\n // we get the last 32 bytes\n privateKey = new Uint8Array(Base64.unarmor(secret).slice(16));\n }\n const signature = curve.sign(request, privateKey);\n return base64.encode(signature);\n}\n/* ------------------------------------------------------------------------ */\n// source: https://stackoverflow.com/a/18639975/1067003\nfunction crc32(str, signed = false) {\n const crcTable = '00000000 77073096 EE0E612C 990951BA 076DC419 706AF48F E963A535 9E6495A3 0EDB8832 79DCB8A4 E0D5E91E 97D2D988 09B64C2B 7EB17CBD E7B82D07 90BF1D91 1DB71064 6AB020F2 F3B97148 84BE41DE 1ADAD47D 6DDDE4EB F4D4B551 83D385C7 136C9856 646BA8C0 FD62F97A 8A65C9EC 14015C4F 63066CD9 FA0F3D63 8D080DF5 3B6E20C8 4C69105E D56041E4 A2677172 3C03E4D1 4B04D447 D20D85FD A50AB56B 35B5A8FA 42B2986C DBBBC9D6 ACBCF940 32D86CE3 45DF5C75 DCD60DCF ABD13D59 26D930AC 51DE003A C8D75180 BFD06116 21B4F4B5 56B3C423 CFBA9599 B8BDA50F 2802B89E 5F058808 C60CD9B2 B10BE924 2F6F7C87 58684C11 C1611DAB B6662D3D 76DC4190 01DB7106 98D220BC EFD5102A 71B18589 06B6B51F 9FBFE4A5 E8B8D433 7807C9A2 0F00F934 9609A88E E10E9818 7F6A0DBB 086D3D2D 91646C97 E6635C01 6B6B51F4 1C6C6162 856530D8 F262004E 6C0695ED 1B01A57B 8208F4C1 F50FC457 65B0D9C6 12B7E950 8BBEB8EA FCB9887C 62DD1DDF 15DA2D49 8CD37CF3 FBD44C65 4DB26158 3AB551CE A3BC0074 D4BB30E2 4ADFA541 3DD895D7 A4D1C46D D3D6F4FB 4369E96A 346ED9FC AD678846 DA60B8D0 44042D73 33031DE5 AA0A4C5F DD0D7CC9 5005713C 270241AA BE0B1010 C90C2086 5768B525 206F85B3 B966D409 CE61E49F 5EDEF90E 29D9C998 B0D09822 C7D7A8B4 59B33D17 2EB40D81 B7BD5C3B C0BA6CAD EDB88320 9ABFB3B6 03B6E20C 74B1D29A EAD54739 9DD277AF 04DB2615 73DC1683 E3630B12 94643B84 0D6D6A3E 7A6A5AA8 E40ECF0B 9309FF9D 0A00AE27 7D079EB1 F00F9344 8708A3D2 1E01F268 6906C2FE F762575D 806567CB 196C3671 6E6B06E7 FED41B76 89D32BE0 10DA7A5A 67DD4ACC F9B9DF6F 8EBEEFF9 17B7BE43 60B08ED5 D6D6A3E8 A1D1937E 38D8C2C4 4FDFF252 D1BB67F1 A6BC5767 3FB506DD 48B2364B D80D2BDA AF0A1B4C 36034AF6 41047A60 DF60EFC3 A867DF55 316E8EEF 4669BE79 CB61B38C BC66831A 256FD2A0 5268E236 CC0C7795 BB0B4703 220216B9 5505262F C5BA3BBE B2BD0B28 2BB45A92 5CB36A04 C2D7FFA7 B5D0CF31 2CD99E8B 5BDEAE1D 9B64C2B0 EC63F226 756AA39C 026D930A 9C0906A9 EB0E363F 72076785 05005713 95BF4A82 E2B87A14 7BB12BAE 0CB61B38 92D28E9B E5D5BE0D 7CDCEFB7 0BDBDF21 86D3D2D4 F1D4E242 68DDB3F8 1FDA836E 81BE16CD F6B9265B 6FB077E1 18B74777 88085AE6 FF0F6A70 66063BCA 11010B5C 8F659EFF F862AE69 616BFFD3 166CCF45 A00AE278 D70DD2EE 4E048354 3903B3C2 A7672661 D06016F7 4969474D 3E6E77DB AED16A4A D9D65ADC 40DF0B66 37D83BF0 A9BCAE53 DEBB9EC5 47B2CF7F 30B5FFE9 BDBDF21C CABAC28A 53B39330 24B4A3A6 BAD03605 CDD70693 54DE5729 23D967BF B3667A2E C4614AB8 5D681B02 2A6F2B94 B40BBE37 C30C8EA1 5A05DF1B 2D02EF8D';\n if (crc32.table === undefined) {\n crc32.table = crcTable.split(' ').map(s => parseInt(s, 16));\n }\n let crc = -1;\n for (let i = 0; i < str.length; i++) {\n // eslint-disable-next-line\n crc = (crc >>> 8) ^ crc32.table[(crc ^ str.charCodeAt(i)) & 0xFF];\n }\n // eslint-disable-next-line\n const unsigned = (crc ^ (-1)) >>> 0;\n if (signed && (unsigned >= 0x80000000)) {\n return unsigned - 0x100000000;\n }\n else {\n return unsigned;\n }\n}\n/* ------------------------------------------------------------------------ */\nexport { hash, hmac, crc32, ecdsa, eddsa, axolotl, sha256, };\n/* ------------------------------------------------------------------------ */\n","// ----------------------------------------------------------------------------\n\n// PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:\n// https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code\n// EDIT THE CORRESPONDENT .ts FILE INSTEAD\n\n// @ts-nocheck\nconst now = Date.now; // TODO: figure out how to utilize performance.now () properly – it's not as easy as it does not return a unix timestamp...\nconst microseconds = () => now() * 1000; // TODO: utilize performance.now for that purpose\nconst milliseconds = now;\nconst seconds = () => Math.floor(now() / 1000);\nconst uuidv1 = () => {\n const biasSeconds = 12219292800; // seconds from 15th Oct 1572 to Jan 1st 1970\n const bias = biasSeconds * 10000000; // in hundreds of nanoseconds\n const time = microseconds() * 10 + bias;\n const timeHex = time.toString(16);\n const arranged = timeHex.slice(7, 15) + timeHex.slice(3, 7) + '1' + timeHex.slice(0, 3);\n // these should be random, but we're not making more than 10 requests per microsecond so who cares\n const clockId = '9696'; // a 14 bit number\n const macAddress = 'ff'.repeat(6);\n return arranged + clockId + macAddress;\n};\nconst setTimeout_original = setTimeout;\nconst setTimeout_safe = (done, ms, setTimeout = setTimeout_original /* overrideable for mocking purposes */, targetTime = now() + ms) => {\n // avoid MAX_INT issue https://github.com/ccxt/ccxt/issues/10761\n if (ms >= 2147483647) {\n throw new Error('setTimeout() function was called with unrealistic value of ' + ms.toString());\n }\n // The built-in setTimeout function can fire its callback earlier than specified, so we\n // need to ensure that it does not happen: sleep recursively until `targetTime` is reached...\n let clearInnerTimeout = () => { };\n let active = true;\n const id = setTimeout(() => {\n active = true;\n const rest = targetTime - now();\n if (rest > 0) {\n clearInnerTimeout = setTimeout_safe(done, rest, setTimeout, targetTime); // try sleep more\n }\n else {\n done();\n }\n }, ms);\n return function clear() {\n if (active) {\n active = false; // dunno if IDs are unique on various platforms, so it's better to rely on this flag to exclude the possible cancellation of the wrong timer (if called after completion)\n clearTimeout(id);\n }\n clearInnerTimeout();\n };\n};\nclass TimedOut extends Error {\n constructor() {\n const message = 'timed out';\n super(message);\n this.constructor = TimedOut;\n // // @ts-expect-error\n this.__proto__ = TimedOut.prototype;\n this.message = message;\n }\n}\nconst iso8601 = (timestamp) => {\n let _timestampNumber = undefined;\n if (typeof timestamp === 'number') {\n _timestampNumber = Math.floor(timestamp);\n }\n else {\n _timestampNumber = parseInt(timestamp, 10);\n }\n // undefined, null and lots of nasty non-numeric values yield NaN\n if (Number.isNaN(_timestampNumber) || _timestampNumber < 0) {\n return undefined;\n }\n // last line of defence\n try {\n return new Date(_timestampNumber).toISOString();\n }\n catch (e) {\n return undefined;\n }\n};\nconst parse8601 = (x) => {\n if (typeof x !== 'string' || !x) {\n return undefined;\n }\n if (x.match(/^[0-9]+$/)) {\n // a valid number in a string, not a date.\n return undefined;\n }\n if (x.indexOf('-') < 0 || x.indexOf(':') < 0) { // no date can be without a dash and a colon\n return undefined;\n }\n // last line of defence\n try {\n const candidate = Date.parse(((x.indexOf('+') >= 0) || (x.slice(-1) === 'Z')) ? x : (x + 'Z').replace(/\\s(\\d\\d):/, 'T$1:'));\n if (Number.isNaN(candidate)) {\n return undefined;\n }\n return candidate;\n }\n catch (e) {\n return undefined;\n }\n};\nconst parseDate = (x) => {\n if (typeof x !== 'string' || !x) {\n return undefined;\n }\n if (x.indexOf('GMT') >= 0) {\n try {\n return Date.parse(x);\n }\n catch (e) {\n return undefined;\n }\n }\n return parse8601(x);\n};\nconst rfc2616 = (timestamp = undefined) => new Date(timestamp).toUTCString();\nconst mdy = (timestamp, infix = '-') => {\n infix = infix || '';\n const date = new Date(timestamp);\n const Y = date.getUTCFullYear().toString();\n let m = date.getUTCMonth() + 1;\n let d = date.getUTCDate();\n m = m < 10 ? ('0' + m) : m.toString();\n d = d < 10 ? ('0' + d) : d.toString();\n return m + infix + d + infix + Y;\n};\nconst ymd = (timestamp, infix, fullYear = true) => {\n infix = infix || '';\n const date = new Date(timestamp);\n const intYear = date.getUTCFullYear();\n const year = fullYear ? intYear : (intYear - 2000);\n const Y = year.toString();\n let m = date.getUTCMonth() + 1;\n let d = date.getUTCDate();\n m = m < 10 ? ('0' + m) : m.toString();\n d = d < 10 ? ('0' + d) : d.toString();\n return Y + infix + m + infix + d;\n};\nconst yymmdd = (timestamp, infix = '') => ymd(timestamp, infix, false);\nconst yyyymmdd = (timestamp, infix = '-') => ymd(timestamp, infix, true);\nconst ymdhms = (timestamp, infix = ' ') => {\n const date = new Date(timestamp);\n const Y = date.getUTCFullYear();\n let m = date.getUTCMonth() + 1;\n let d = date.getUTCDate();\n let H = date.getUTCHours();\n let M = date.getUTCMinutes();\n let S = date.getUTCSeconds();\n m = m < 10 ? ('0' + m) : m;\n d = d < 10 ? ('0' + d) : d;\n H = H < 10 ? ('0' + H) : H;\n M = M < 10 ? ('0' + M) : M;\n S = S < 10 ? ('0' + S) : S;\n return Y + '-' + m + '-' + d + infix + H + ':' + M + ':' + S;\n};\nconst sleep = (ms) => new Promise((resolve) => setTimeout_safe(resolve, ms));\nconst timeout = async (ms, promise) => {\n let clear = () => { };\n const expires = new Promise((resolve) => (clear = setTimeout_safe(resolve, ms)));\n try {\n return await Promise.race([promise, expires.then(() => {\n throw new TimedOut();\n })]);\n }\n finally {\n clear(); // fixes https://github.com/ccxt/ccxt/issues/749\n }\n};\nexport { now, microseconds, milliseconds, seconds, iso8601, parse8601, rfc2616, uuidv1, parseDate, mdy, ymd, yymmdd, yyyymmdd, ymdhms, setTimeout_safe, sleep, TimedOut, timeout, };\n","// ----------------------------------------------------------------------------\n\n// PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:\n// https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code\n// EDIT THE CORRESPONDENT .ts FILE INSTEAD\n\n/**\n * @description It aggregates all the error codes that can be thrown by the SDK.\n * It should be the only source of truth for the error codes.\n * You should separate each error type by a blank line.\n * Use `_` to separate the group of digits\n */\nexport var SdkErrorCodes;\n(function (SdkErrorCodes) {\n SdkErrorCodes[SdkErrorCodes[\"DEFAULT_ERROR\"] = 10000] = \"DEFAULT_ERROR\";\n SdkErrorCodes[SdkErrorCodes[\"INVALID_PARAMS\"] = 10001] = \"INVALID_PARAMS\";\n SdkErrorCodes[SdkErrorCodes[\"INVALID_CACHE\"] = 10002] = \"INVALID_CACHE\";\n SdkErrorCodes[SdkErrorCodes[\"INVALID_ADDRESS\"] = 10003] = \"INVALID_ADDRESS\";\n SdkErrorCodes[SdkErrorCodes[\"FETCH_FROM_CACHE_ERROR\"] = 10004] = \"FETCH_FROM_CACHE_ERROR\";\n SdkErrorCodes[SdkErrorCodes[\"INTERNAL_ERROR\"] = 11000] = \"INTERNAL_ERROR\";\n SdkErrorCodes[SdkErrorCodes[\"INVALID_EXCHANGE_ID\"] = 11001] = \"INVALID_EXCHANGE_ID\";\n SdkErrorCodes[SdkErrorCodes[\"INVALID_EXCHANGE_INSTANCE_ID\"] = 11002] = \"INVALID_EXCHANGE_INSTANCE_ID\";\n SdkErrorCodes[SdkErrorCodes[\"AUTHENTICATION_ERROR\"] = 12000] = \"AUTHENTICATION_ERROR\";\n SdkErrorCodes[SdkErrorCodes[\"INVALID_CREDENTIALS\"] = 12001] = \"INVALID_CREDENTIALS\";\n SdkErrorCodes[SdkErrorCodes[\"AUTHENTICATION_FLOW_NOT_SUPPORTED\"] = 12002] = \"AUTHENTICATION_FLOW_NOT_SUPPORTED\";\n SdkErrorCodes[SdkErrorCodes[\"OAUTH_ACCESS_REVOKED\"] = 12003] = \"OAUTH_ACCESS_REVOKED\";\n SdkErrorCodes[SdkErrorCodes[\"WITHDRAWAL_ERROR\"] = 13000] = \"WITHDRAWAL_ERROR\";\n SdkErrorCodes[SdkErrorCodes[\"READONLY_EXCHANGE_NOT_PROVIDED_ERROR\"] = 13001] = \"READONLY_EXCHANGE_NOT_PROVIDED_ERROR\";\n SdkErrorCodes[SdkErrorCodes[\"TOKEN_SYMBOL_NOT_FOUND\"] = 13002] = \"TOKEN_SYMBOL_NOT_FOUND\";\n SdkErrorCodes[SdkErrorCodes[\"WITHDRAWAL_NOT_FOUND\"] = 13003] = \"WITHDRAWAL_NOT_FOUND\";\n SdkErrorCodes[SdkErrorCodes[\"UNDER_WITHDRAW_MINIMUM\"] = 13004] = \"UNDER_WITHDRAW_MINIMUM\";\n SdkErrorCodes[SdkErrorCodes[\"OVER_WITHDRAW_MAXIMUM\"] = 13005] = \"OVER_WITHDRAW_MAXIMUM\";\n SdkErrorCodes[SdkErrorCodes[\"WHITELIST_CHECK_FAILED\"] = 13006] = \"WHITELIST_CHECK_FAILED\";\n SdkErrorCodes[SdkErrorCodes[\"WITHDRAWAL_FORBIDDEN\"] = 13007] = \"WITHDRAWAL_FORBIDDEN\";\n SdkErrorCodes[SdkErrorCodes[\"TRADE_ERROR\"] = 14000] = \"TRADE_ERROR\";\n SdkErrorCodes[SdkErrorCodes[\"MARKET_ERROR\"] = 14001] = \"MARKET_ERROR\";\n SdkErrorCodes[SdkErrorCodes[\"MARKET_NOT_FOUND\"] = 14002] = \"MARKET_NOT_FOUND\";\n SdkErrorCodes[SdkErrorCodes[\"ORDER_NOT_FOUND\"] = 14003] = \"ORDER_NOT_FOUND\";\n SdkErrorCodes[SdkErrorCodes[\"MARKET_NOT_LOADED\"] = 14004] = \"MARKET_NOT_LOADED\";\n SdkErrorCodes[SdkErrorCodes[\"MARKET_TYPE_NOT_SUPPORTED\"] = 14005] = \"MARKET_TYPE_NOT_SUPPORTED\";\n SdkErrorCodes[SdkErrorCodes[\"INVALID_OHLCV_FORMAT\"] = 14006] = \"INVALID_OHLCV_FORMAT\";\n SdkErrorCodes[SdkErrorCodes[\"CANNOT_PROVIDE_OHLCV\"] = 14007] = \"CANNOT_PROVIDE_OHLCV\";\n SdkErrorCodes[SdkErrorCodes[\"PORTFOLIO_ERROR\"] = 15000] = \"PORTFOLIO_ERROR\";\n SdkErrorCodes[SdkErrorCodes[\"NOT_ENOUGH_BALANCE\"] = 15001] = \"NOT_ENOUGH_BALANCE\";\n SdkErrorCodes[SdkErrorCodes[\"DEPOSIT_ERROR\"] = 16000] = \"DEPOSIT_ERROR\";\n SdkErrorCodes[SdkErrorCodes[\"GET_DEPOSIT_ADDRESS\"] = 16001] = \"GET_DEPOSIT_ADDRESS\";\n SdkErrorCodes[SdkErrorCodes[\"CREATE_DEPOSIT_ADDRESS\"] = 16002] = \"CREATE_DEPOSIT_ADDRESS\";\n SdkErrorCodes[SdkErrorCodes[\"DEPOSIT_NOT_FOUND\"] = 16003] = \"DEPOSIT_NOT_FOUND\";\n SdkErrorCodes[SdkErrorCodes[\"NETWORK_ERROR\"] = 17000] = \"NETWORK_ERROR\";\n SdkErrorCodes[SdkErrorCodes[\"NETWORK_NOT_FOUND\"] = 17001] = \"NETWORK_NOT_FOUND\";\n SdkErrorCodes[SdkErrorCodes[\"NETWORK_NOT_FOUND_FOR_TOKEN_SYMBOL\"] = 17002] = \"NETWORK_NOT_FOUND_FOR_TOKEN_SYMBOL\";\n SdkErrorCodes[SdkErrorCodes[\"API_ERROR\"] = 18000] = \"API_ERROR\";\n SdkErrorCodes[SdkErrorCodes[\"INVALID_API_REQUEST\"] = 18001] = \"INVALID_API_REQUEST\";\n SdkErrorCodes[SdkErrorCodes[\"INTERNAL_API_EXCEPTION\"] = 18002] = \"INTERNAL_API_EXCEPTION\";\n SdkErrorCodes[SdkErrorCodes[\"EXCHANGE_ERROR\"] = 19000] = \"EXCHANGE_ERROR\";\n SdkErrorCodes[SdkErrorCodes[\"EXCHANGE_SERVER_DOWN\"] = 19001] = \"EXCHANGE_SERVER_DOWN\";\n SdkErrorCodes[SdkErrorCodes[\"EXCHANGE_UNDER_MAINTENANCE\"] = 19002] = \"EXCHANGE_UNDER_MAINTENANCE\";\n SdkErrorCodes[SdkErrorCodes[\"EXCHANGE_REQUEST_EXPIRED\"] = 19003] = \"EXCHANGE_REQUEST_EXPIRED\";\n SdkErrorCodes[SdkErrorCodes[\"EXCHANGE_INVALID_PERMISSION\"] = 19004] = \"EXCHANGE_INVALID_PERMISSION\";\n SdkErrorCodes[SdkErrorCodes[\"EXCHANGE_TRANSFER_NOT_ALLOWED\"] = 19005] = \"EXCHANGE_TRANSFER_NOT_ALLOWED\";\n SdkErrorCodes[SdkErrorCodes[\"EXCHANGE_TRANSFER_ERROR\"] = 19006] = \"EXCHANGE_TRANSFER_ERROR\";\n SdkErrorCodes[SdkErrorCodes[\"EXCHANGE_DDOS_PROTECTION\"] = 19007] = \"EXCHANGE_DDOS_PROTECTION\";\n SdkErrorCodes[SdkErrorCodes[\"EXCHANGE_RATE_LIMIT_EXCEEDED\"] = 19008] = \"EXCHANGE_RATE_LIMIT_EXCEEDED\";\n SdkErrorCodes[SdkErrorCodes[\"EXCHANGE_INTERNAL_ERROR\"] = 19009] = \"EXCHANGE_INTERNAL_ERROR\";\n SdkErrorCodes[SdkErrorCodes[\"EXCHANGE_UNKNOWN_ASSET\"] = 19010] = \"EXCHANGE_UNKNOWN_ASSET\";\n SdkErrorCodes[SdkErrorCodes[\"EXCHANGE_OPERATION_FAILED\"] = 19011] = \"EXCHANGE_OPERATION_FAILED\";\n SdkErrorCodes[SdkErrorCodes[\"EXCHANGE_ACCOUNT_SUSPENDED\"] = 19012] = \"EXCHANGE_ACCOUNT_SUSPENDED\";\n SdkErrorCodes[SdkErrorCodes[\"EXCHANGE_NOT_ALLOWED_METHOD\"] = 19013] = \"EXCHANGE_NOT_ALLOWED_METHOD\";\n SdkErrorCodes[SdkErrorCodes[\"EXCHANGE_NOT_AVAILABLE\"] = 19014] = \"EXCHANGE_NOT_AVAILABLE\";\n SdkErrorCodes[SdkErrorCodes[\"EXCHANGE_INVALID_NONCE\"] = 19015] = \"EXCHANGE_INVALID_NONCE\";\n SdkErrorCodes[SdkErrorCodes[\"EXCHANGE_UNAVAILABLE_IN_COUNTRY\"] = 19016] = \"EXCHANGE_UNAVAILABLE_IN_COUNTRY\";\n SdkErrorCodes[SdkErrorCodes[\"EXCHANGE_WALLET_TYPE_NOT_SUPPORTED\"] = 19017] = \"EXCHANGE_WALLET_TYPE_NOT_SUPPORTED\";\n SdkErrorCodes[SdkErrorCodes[\"SUB_ACCOUNT_ERROR\"] = 20000] = \"SUB_ACCOUNT_ERROR\";\n SdkErrorCodes[SdkErrorCodes[\"SUB_ACCOUNT_NOT_FOUND_ERROR\"] = 20001] = \"SUB_ACCOUNT_NOT_FOUND_ERROR\";\n})(SdkErrorCodes || (SdkErrorCodes = {}));\n/**\n * @description It aggregates all the error messages that can be thrown by the SDK.\n * You should separate each error type by a blank line.\n */\nexport const SdkErrorMessages = {\n DEFAULT_ERROR: \"Default error\",\n INVALID_PARAMS: (description) => `Invalid params: ${description}`,\n INVALID_CACHE: (key) => `Invalid cache state for key: ${key}`,\n INVALID_ADDRESS: \"Invalid address\",\n FETCH_FROM_CACHE_ERROR: (message) => `An error occured while fetching from the cache: ${message}`,\n INTERNAL_ERROR: \"Internal error\",\n INVALID_EXCHANGE_INSTANCE_ID: (exchangeInstanceId) => `Invalid exchange instance id: ${exchangeInstanceId}`,\n INVALID_EXCHANGE_ID: (exchangeId) => `Invalid exchange id: ${exchangeId}`,\n AUTHENTICATION_ERROR: \"Authentication error\",\n INVALID_CREDENTIALS: \"Invalid credentials provided\",\n AUTHENTICATION_FLOW_NOT_SUPPORTED: \"Authentication flow not supported\",\n OAUTH_ACCESS_REVOKED: \"OAuth access revoked\",\n WITHDRAWAL_ERROR: \"Withdrawal error\",\n READONLY_EXCHANGE_NOT_PROVIDED_ERROR: \"Readonly exchange account not provided\",\n TOKEN_SYMBOL_NOT_FOUND: (tokenSymbol) => `Token symbol not found: ${tokenSymbol}`,\n WITHDRAWAL_NOT_FOUND: \"Withdrawal not found\",\n UNDER_WITHDRAW_MINIMUM: \"Under withdrawal minimum\",\n OVER_WITHDRAW_MAXIMUM: \"Over withdrawal maximum\",\n WHITELIST_CHECK_FAILED: \"The receipt address has not been whitelisted\",\n WITHDRAWAL_FORBIDDEN: \"Withdrawal forbidden\",\n TRADE_ERROR: \"Trade error\",\n MARKET_ERROR: \"Market error\",\n MARKET_NOT_FOUND: (market) => `Market not found: ${market}`,\n ORDER_NOT_FOUND: \"Order not found\",\n MARKET_NOT_LOADED: `Market not loaded`,\n MARKET_TYPE_NOT_SUPPORTED: (marketType) => `Market type not supported: ${marketType}`,\n ORDER_UNDER_MINIMUM: 'Order quantity below minimum limit. Please use getMinAmounts() to get the minimum quantity for the order.',\n INVALID_OHLCV_FORMAT: (message) => `Invalid OHLCV format: ${message}`,\n CANNOT_PROVIDE_OHLCV: `Cannot provide OHLCV data`,\n PORTFOLIO_ERROR: \"Portfolio error\",\n NOT_ENOUGH_BALANCE: \"Not enough balance\",\n DEPOSIT_ERROR: \"Deposit error\",\n DEPOSIT_NOT_FOUND: \"Deposit not found\",\n GET_DEPOSIT_ADDRESS: (tokenSymbol, network) => `An error occured while fetching the deposit address for token symbol ${tokenSymbol}${network ? \" on network \" + network : \"\"}`,\n CREATE_DEPOSIT_ADDRESS: (tokenSymbol, network) => `An error occured while creating the deposit address for token symbol ${tokenSymbol}${network ? \" on network \" + network : \"\"}`,\n NETWORK_ERROR: \"Network error\",\n NETWORK_NOT_FOUND: (network) => `Network not found: ${network}`,\n NETWORK_NOT_FOUND_FOR_TOKEN_SYMBOL: (tokenSymbol) => `Network not found for token symbol: ${tokenSymbol}`,\n API_ERROR: \"API error\",\n INVALID_API_REQUEST: (errorMessage) => `Invalid request: ${errorMessage}`,\n EXCHANGE_ERROR: \"Exchange error\",\n EXCHANGE_SERVER_DOWN: \"Exchange server down\",\n EXCHANGE_UNDER_MAINTENANCE: \"Exchange under maintenance\",\n EXCHANGE_REQUEST_EXPIRED: \"Exchange request expired\",\n EXCHANGE_INVALID_PERMISSION: \"Missing API permissions, please reimport your API key with the valid permissions\",\n EXCHANGE_TRANSFER_NOT_ALLOWED: `Transfer not allowed`,\n EXCHANGE_TRANSFER_ERROR: `Transfer error`,\n EXCHANGE_DDOS_PROTECTION: \"DDoS protection error\",\n EXCHANGE_RATE_LIMIT_EXCEEDED: \"Rate limit exceeded\",\n EXCHANGE_INTERNAL_ERROR: \"Internal exchange error\",\n EXCHANGE_UNKNOWN_ASSET: (asset) => `Unknown asset ${asset}`,\n EXCHANGE_OPERATION_FAILED: \"Operation failed\",\n EXCHANGE_ACCOUNT_SUSPENDED: \"Account suspended\",\n EXCHANGE_NOT_ALLOWED_METHOD: (methodName) => `Method not allowed: ${methodName}`,\n EXCHANGE_NOT_AVAILABLE: \"Exchange not available\",\n EXCHANGE_INVALID_NONCE: \"Invalid nonce\",\n EXCHANGE_UNAVAILABLE_IN_COUNTRY: \"Exchange unavailable in the country\",\n EXCHANGE_WALLET_TYPE_NOT_SUPPORTED: (walletType) => `Wallet type ${walletType} not supported or not available for transfers`,\n SUB_ACCOUNT_ERROR: \"Sub account error\",\n SUB_ACCOUNT_NOT_FOUND_ERROR: (uid) => `Sub account not found for uid: ${uid}`,\n};\n/**\n * @description It aggregates all the documentation of the SDK errors.\n * It should be used in the sdk documentation website.\n * The first element in the array is the error class that is thrown and the second element is the error description.\n *\n * [Error Class, Error Description, ParentErrorClass?]\n */\nexport const SdkErrorDocumentation = {\n \"Cede SDK Errors\": {\n [SdkErrorCodes.DEFAULT_ERROR]: [\"DefaultError\", \"Default SDK error\"],\n [SdkErrorCodes.INVALID_PARAMS]: [\"InvalidParamsError\", \"Invalid parameters provided to a SDK method\", \"DefaultError\"],\n [SdkErrorCodes.INVALID_CACHE]: [\"InvalidCacheError\", \"Thrown when the cache can't be persisted\", \"DefaultError\"],\n [SdkErrorCodes.INVALID_ADDRESS]: [\"InvalidAddressError\", \"The provided address is invalid\", \"DefaultError\"],\n [SdkErrorCodes.FETCH_FROM_CACHE_ERROR]: [\"FetchFromCacheError\", \"An error occured while fetching from the cache\", \"DefaultError\"],\n },\n \"Internal Errors\": {\n [SdkErrorCodes.INTERNAL_ERROR]: [\"InternalError\", \"Default error for internal SDK errors\"],\n [SdkErrorCodes.INVALID_EXCHANGE_INSTANCE_ID]: [\n \"InvalidExchangeInstanceIdError\",\n \"An invalid exchange instance id is provided\",\n \"InternalError\"\n ],\n [SdkErrorCodes.INVALID_EXCHANGE_ID]: [\"InvalidExchangeIdError\", \"An invalid exchange id is provided\", \"InternalError\"],\n },\n \"Authentication Errors\": {\n [SdkErrorCodes.AUTHENTICATION_ERROR]: [\"AuthenticationError\", \"Default error for authentication errors\"],\n [SdkErrorCodes.INVALID_CREDENTIALS]: [\"InvalidCredentialsError\", \"Invalid credentials provided\", \"AuthenticationError\"],\n [SdkErrorCodes.AUTHENTICATION_FLOW_NOT_SUPPORTED]: [\n \"AuthenticationFlowNotSupportedError\",\n \"Authentication flow not supported\",\n \"AuthenticationError\",\n ],\n [SdkErrorCodes.OAUTH_ACCESS_REVOKED]: [\n \"OAuthAccessRevokedError\",\n \"Can't perform the operation since the OAuth access are revoked\",\n \"AuthenticationError\",\n ],\n },\n \"Withdrawal Errors\": {\n [SdkErrorCodes.WITHDRAWAL_ERROR]: [\"WithdrawalError\", \"Default error for withdrawal errors\"],\n [SdkErrorCodes.READONLY_EXCHANGE_NOT_PROVIDED_ERROR]: [\n \"ReadonlyExchangeNotProvidedError\",\n \"Readonly account not provided. It needs to be provided to perform some operations\",\n \"WithdrawalError\",\n ],\n [SdkErrorCodes.TOKEN_SYMBOL_NOT_FOUND]: [\n \"TokenSymbolNotFoundError\",\n \"The withdrawal can't be executed since the token symbol isn't found\",\n \"WithdrawalError\",\n ],\n [SdkErrorCodes.WITHDRAWAL_NOT_FOUND]: [\"WithdrawalNotFoundError\", \"The withdrawal isn't found\", 'WithdrawalError'],\n [SdkErrorCodes.UNDER_WITHDRAW_MINIMUM]: [\n \"UnderWithdrawMinimumError\",\n \"The withdrawal amount is under the minimum amount allowed by the exchange\",\n \"WithdrawalError\"\n ],\n [SdkErrorCodes.OVER_WITHDRAW_MAXIMUM]: [\n \"OverWithdrawMaximumError\",\n \"The withdrawal amount is over the maximum amount allowed by the exchange\",\n \"WithdrawalError\"\n ],\n [SdkErrorCodes.WHITELIST_CHECK_FAILED]: [\n \"WhitelistCheckFailedError\",\n \"The provided address isn't whitelisted for the withdrawal\",\n \"WithdrawalError\"\n ],\n },\n \"Trade Errors\": {\n [SdkErrorCodes.TRADE_ERROR]: [\"TradeError\", \"Default error for trade errors\"],\n [SdkErrorCodes.MARKET_NOT_FOUND]: [\"MarketNotFoundError\", \"The given pair symbol was not found\", \"TradeError\"],\n [SdkErrorCodes.ORDER_NOT_FOUND]: [\"OrderNotFoundError\", \"The order isn't found\", \"TradeError\"],\n [SdkErrorCodes.CANNOT_PROVIDE_OHLCV]: [\"CannotProvideOHLCVError\", \"Cannot provide OHLCV data\", \"TradeError\"],\n [SdkErrorCodes.INVALID_OHLCV_FORMAT]: [\"InvalidOHLCVFormatError\", \"The OHLCV format is invalid\", \"TradeError\"],\n [SdkErrorCodes.MARKET_ERROR]: [\"MarketError\", \"Default error for market errors\", \"TradeError\"],\n [SdkErrorCodes.MARKET_TYPE_NOT_SUPPORTED]: [\"MarketTypeNotSupportedError\", \"The market type isn't supported\", \"MarketError\"],\n [SdkErrorCodes.MARKET_NOT_LOADED]: [\"MarketNotLoadedError\", \"The market isn't loaded\", \"MarketError\"],\n },\n \"Portfolio Errors\": {\n [SdkErrorCodes.PORTFOLIO_ERROR]: [\"PortfolioError\", \"Default error for portfolio errors\"],\n [SdkErrorCodes.NOT_ENOUGH_BALANCE]: [\n \"InsufficientBalanceError\",\n \"The user doesn't have enough balance to perform the operation\",\n \"PortfolioError\"\n ],\n },\n \"Deposit Errors\": {\n [SdkErrorCodes.DEPOSIT_ERROR]: [\"DepositError\", \"Default error for deposit errors\"],\n [SdkErrorCodes.GET_DEPOSIT_ADDRESS]: [\"GetDepositAddressError\", \"Can't get the deposit address\", \"DepositError\"],\n [SdkErrorCodes.CREATE_DEPOSIT_ADDRESS]: [\"CreateDepositAddressError\", \"Can't create the deposit address\", \"DepositError\"],\n },\n \"Network Errors\": {\n [SdkErrorCodes.NETWORK_ERROR]: [\"NetworkError\", \"Default error for network errors\"],\n [SdkErrorCodes.NETWORK_NOT_FOUND]: [\"NetworkNotFoundError\", \"The network isn't found\", \"NetworkError\"],\n },\n \"API Errors\": {\n [SdkErrorCodes.API_ERROR]: [\"APIError\", \"Default error for API errors\"],\n [SdkErrorCodes.INVALID_API_REQUEST]: [\"InvalidApiRequestError\", \"The API request is invalid\", \"APIError\"],\n },\n \"Exchange Errors\": {\n [SdkErrorCodes.EXCHANGE_ERROR]: [\"ExchangeError\", \"Default error for exchange errors\"],\n [SdkErrorCodes.EXCHANGE_SERVER_DOWN]: [\"ExchangeServerError\", \"The exchange server is down\", \"ExchangeError\"],\n [SdkErrorCodes.EXCHANGE_UNDER_MAINTENANCE]: [\n \"ExchangeUnderMaintenanceError\",\n \"The exchange API is under maintenance\",\n \"ExchangeError\"\n ],\n [SdkErrorCodes.EXCHANGE_REQUEST_EXPIRED]: [\"ExchangeRequestExpiredError\", \"The exchange request is expired\", \"ExchangeError\"],\n [SdkErrorCodes.EXCHANGE_INVALID_PERMISSION]: [\n \"ExchangeInvalidPermissionsError\",\n \"The permissions are invalid to perform the operation\",\n \"ExchangeError\"\n ],\n [SdkErrorCodes.EXCHANGE_TRANSFER_NOT_ALLOWED]: [\"ExchangeTransferNotAllowedError\", \"Transfer is not allowed\", \"ExchangeError\"],\n [SdkErrorCodes.EXCHANGE_TRANSFER_ERROR]: [\"ExchangeTransferError\", \"Transfer error\", \"ExchangeError\"],\n [SdkErrorCodes.EXCHANGE_DDOS_PROTECTION]: [\"ExchangeDDosProtectionError\", \"DDoS protection error\", \"ExchangeError\"],\n [SdkErrorCodes.EXCHANGE_RATE_LIMIT_EXCEEDED]: [\"ExchangeRateLimitExceededError\", \"Rate limit exceeded\", \"ExchangeError\"],\n [SdkErrorCodes.EXCHANGE_OPERATION_FAILED]: [\"ExchangeOperationFailedError\", \"Operation failed\", \"ExchangeError\"],\n [SdkErrorCodes.EXCHANGE_UNKNOWN_ASSET]: [\"ExchangeUnknownAssetError\", \"Unknown asset\", \"ExchangeError\"],\n [SdkErrorCodes.EXCHANGE_ACCOUNT_SUSPENDED]: [\"ExchangeAccountSuspendedError\", \"Account suspended\", \"ExchangeError\"],\n [SdkErrorCodes.EXCHANGE_NOT_ALLOWED_METHOD]: [\n \"ExchangeNotAllowedMethodError\",\n \"Method isn't allowed to be called for an exchange\",\n \"ExchangeError\"\n ],\n [SdkErrorCodes.EXCHANGE_NOT_AVAILABLE]: [\"ExchangeNotAvailableError\", \"Exchange is not available\", \"ExchangeError\"],\n [SdkErrorCodes.EXCHANGE_INVALID_NONCE]: [\"ExchangeInvalidNonceError\", \"The nonce is invalid\", \"ExchangeError\"],\n [SdkErrorCodes.EXCHANGE_UNAVAILABLE_IN_COUNTRY]: [\"ExchangeUnavailableInCountryError\", \"Exchange is unavailable in the country\", \"ExchangeError\"],\n [SdkErrorCodes.EXCHANGE_WALLET_TYPE_NOT_SUPPORTED]: [\"ExchangeWalletTypeNotSupportedError\", \"Wallet type not supported or not available for transfers\", \"ExchangeError\"],\n },\n};\n","// ----------------------------------------------------------------------------\n\n// PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:\n// https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code\n// EDIT THE CORRESPONDENT .ts FILE INSTEAD\n\nimport { SdkErrorCodes, SdkErrorMessages } from \"./errorsMetadata.js\";\n/**\n * @description Base error for the SDK\n */\nexport class CedeSDKError extends Error {\n constructor(code, message) {\n super(message);\n this.code = code;\n this.message = message;\n this.isBaseError = true;\n this.metadata = {};\n this.notReportable = false;\n this.sentryName = undefined;\n this.name = \"CedeSDKError\";\n }\n addOriginalError(originalErrorMessage) {\n this.originalErrorMessage = originalErrorMessage;\n return this;\n }\n reportSentry() {\n const metadata = this.metadata;\n const sentry = this.sentry;\n // Clean metadata/sentry\n this.metadata = {};\n delete this.sentry;\n if (this.notReportable || !sentry) {\n return;\n }\n const clone = structuredClone(this);\n clone.name = this.sentryName || this.name;\n sentry.captureException(clone, {\n captureContext: {\n extra: {\n ...metadata,\n code: this.code,\n exchangeId: this.exchangeId\n },\n },\n });\n }\n setSentryName(name) {\n this.sentryName = name;\n }\n setMetadata(metadata) {\n this.metadata = metadata;\n }\n addMetadata(key, value) {\n this.metadata[key] = value;\n return this;\n }\n overwriteMessage(message) {\n this.message = message;\n return this;\n }\n addMessage(message) {\n this.message = `${this.message}. ${message}`;\n return this;\n }\n exchange(exchangeId) {\n this.exchangeId = exchangeId;\n return this;\n }\n apply({ shouldPrependExchangeId = false } = {}) {\n if (shouldPrependExchangeId && this.exchangeId) {\n this.message = `${this.exchangeId}: ${this.message}`;\n }\n this.reportSentry();\n return this;\n }\n}\n/**\n * @description Default error for the SDK\n */\nexport class DefaultError extends CedeSDKError {\n constructor(code = SdkErrorCodes.DEFAULT_ERROR, message = SdkErrorMessages.DEFAULT_ERROR) {\n super(code, message);\n this.name = \"DefaultError\";\n }\n}\n/**\n * @description Thrown when the the provided method params are invalid\n */\nexport class InvalidParamsError extends DefaultError {\n constructor(description) {\n super(SdkErrorCodes.INVALID_PARAMS, SdkErrorMessages.INVALID_PARAMS(description));\n this.name = \"InvalidParamsError\";\n }\n}\n/**\n * @description Thrown when the cache can't be persisted\n */\nexport class InvalidCacheError extends DefaultError {\n constructor(key) {\n super(SdkErrorCodes.INVALID_CACHE, SdkErrorMessages.INVALID_CACHE(key));\n this.name = \"InvalidCacheError\";\n }\n}\n/**\n * @description Thrown when we try to use the external cache and it's not set\n */\nexport class FetchFromCacheError extends DefaultError {\n constructor(message) {\n super(SdkErrorCodes.FETCH_FROM_CACHE_ERROR, SdkErrorMessages.FETCH_FROM_CACHE_ERROR(message));\n this.name = \"FetchFromCacheError\";\n }\n}\n/**\n * @description Thrown when the address is invalid\n */\nexport class InvalidAddressError extends DefaultError {\n constructor() {\n super(SdkErrorCodes.INVALID_ADDRESS, SdkErrorMessages.INVALID_ADDRESS);\n this.name = \"InvalidAddressError\";\n }\n}\n","// ----------------------------------------------------------------------------\n\n// PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:\n// https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code\n// EDIT THE CORRESPONDENT .ts FILE INSTEAD\n\nimport { SdkErrorCodes, SdkErrorMessages } from \"./errorsMetadata.js\";\nimport { CedeSDKError } from \"./default.js\";\n/**\n * @description Default error for exchange\n */\nexport class ExchangeError extends CedeSDKError {\n constructor(code = SdkErrorCodes.EXCHANGE_ERROR, message = SdkErrorMessages.EXCHANGE_ERROR) {\n super(code, message);\n this.name = \"ExchangeError\";\n }\n}\n/**\n * @description Thrown when the exchange server status is offline\n */\nexport class ExchangeServerDownError extends ExchangeError {\n constructor() {\n super(SdkErrorCodes.EXCHANGE_SERVER_DOWN, SdkErrorMessages.EXCHANGE_SERVER_DOWN);\n this.name = \"ExchangeServerDownError\";\n }\n}\n/**\n * @description Thrown when the exchange server status is under maintenance\n */\nexport class ExchangeUnderMaintenanceError extends ExchangeError {\n constructor() {\n super(SdkErrorCodes.EXCHANGE_UNDER_MAINTENANCE, SdkErrorMessages.EXCHANGE_UNDER_MAINTENANCE);\n this.name = \"ExchangeUnderMaintenanceError\";\n }\n}\n/**\n * @description Thrown when the request has been expired by the throttling mechanism\n */\nexport class ExchangeRequestExpiredError extends ExchangeError {\n constructor() {\n super(SdkErrorCodes.EXCHANGE_REQUEST_EXPIRED, SdkErrorMessages.EXCHANGE_REQUEST_EXPIRED);\n this.name = \"ExchangeRequestExpiredError\";\n }\n}\n/**\n * @description Thrown when the exchange api can't perform the request due to missing / invalid permissions\n */\nexport class ExchangeInvalidPermissionsError extends ExchangeError {\n constructor() {\n super(SdkErrorCodes.EXCHANGE_INVALID_PERMISSION, SdkErrorMessages.EXCHANGE_INVALID_PERMISSION);\n this.name = \"ExchangeInvalidPermissionsError\";\n }\n}\n// TODO: Replace it by ExchangeFeatureNotAllowedError\nexport class ExchangeTransferNotAllowedError extends ExchangeError {\n constructor() {\n super(SdkErrorCodes.EXCHANGE_TRANSFER_NOT_ALLOWED, SdkErrorMessages.EXCHANGE_TRANSFER_NOT_ALLOWED);\n this.name = \"ExchangeTransferNotAllowedError\";\n }\n}\nexport class ExchangeTransferError extends ExchangeError {\n constructor() {\n super(SdkErrorCodes.EXCHANGE_TRANSFER_ERROR, SdkErrorMessages.EXCHANGE_TRANSFER_ERROR);\n this.name = \"ExchangeTransferError\";\n }\n}\nexport class ExchangeDDosProtectionError extends ExchangeError {\n constructor() {\n super(SdkErrorCodes.EXCHANGE_DDOS_PROTECTION, SdkErrorMessages.EXCHANGE_DDOS_PROTECTION);\n this.name = \"ExchangeDDosProtectionError\";\n }\n}\nexport class ExchangeRateLimitExceededError extends ExchangeError {\n constructor() {\n super(SdkErrorCodes.EXCHANGE_RATE_LIMIT_EXCEEDED, SdkErrorMessages.EXCHANGE_RATE_LIMIT_EXCEEDED);\n this.name = \"ExchangeRateLimitExceededError\";\n }\n}\nexport class ExchangeOperationFailedError extends ExchangeError {\n constructor() {\n super(SdkErrorCodes.EXCHANGE_OPERATION_FAILED, SdkErrorMessages.EXCHANGE_OPERATION_FAILED);\n this.name = \"ExchangeOperationFailedError\";\n }\n}\nexport class ExchangeUnknownAssetError extends ExchangeError {\n constructor(asset) {\n super(SdkErrorCodes.EXCHANGE_UNKNOWN_ASSET, SdkErrorMessages.EXCHANGE_UNKNOWN_ASSET(asset));\n this.name = \"ExchangeUnknownAssetError\";\n }\n}\nexport class ExchangeAccountSuspendedError extends ExchangeError {\n constructor() {\n super(SdkErrorCodes.EXCHANGE_ACCOUNT_SUSPENDED, SdkErrorMessages.EXCHANGE_ACCOUNT_SUSPENDED);\n this.name = \"ExchangeAccountSuspendedError\";\n }\n}\n/**\n * @description Thrown when the method used is not allowed by the exchange\n */\nexport class ExchangeNotAllowedMethodError extends ExchangeError {\n constructor(methodName) {\n super(SdkErrorCodes.EXCHANGE_NOT_ALLOWED_METHOD, SdkErrorMessages.EXCHANGE_NOT_ALLOWED_METHOD(methodName));\n this.name = \"ExchangeNotAllowedMethodError\";\n }\n}\nexport class ExchangeNotAvailableError extends ExchangeError {\n constructor() {\n super(SdkErrorCodes.EXCHANGE_NOT_AVAILABLE, SdkErrorMessages.EXCHANGE_NOT_AVAILABLE);\n this.name = \"ExchangeNotAvailableError\";\n }\n}\nexport class ExchangeInvalidNonceError extends ExchangeError {\n constructor() {\n super(SdkErrorCodes.EXCHANGE_INVALID_NONCE, SdkErrorMessages.EXCHANGE_INVALID_NONCE);\n this.name = \"ExchangeInvalidNonceError\";\n }\n}\nexport class ExchangeUnavailableInCountry extends ExchangeError {\n constructor() {\n super(SdkErrorCodes.EXCHANGE_UNAVAILABLE_IN_COUNTRY, SdkErrorMessages.EXCHANGE_UNAVAILABLE_IN_COUNTRY);\n this.name = \"ExchangeUnavailableInCountry\";\n }\n}\nexport class ExchangeWalletTypeNotSupportedError extends ExchangeError {\n constructor(walletType) {\n super(SdkErrorCodes.EXCHANGE_WALLET_TYPE_NOT_SUPPORTED, SdkErrorMessages.EXCHANGE_WALLET_TYPE_NOT_SUPPORTED(walletType));\n this.name = \"ExchangeWalletTypeNotSupportedError\";\n }\n}\n","// ----------------------------------------------------------------------------\n\n// PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:\n// https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code\n// EDIT THE CORRESPONDENT .ts FILE INSTEAD\n\nexport var CustomThrottlePriority;\n(function (CustomThrottlePriority) {\n CustomThrottlePriority[CustomThrottlePriority[\"HIGH\"] = 1] = \"HIGH\";\n CustomThrottlePriority[CustomThrottlePriority[\"MEDIUM\"] = 2] = \"MEDIUM\";\n CustomThrottlePriority[CustomThrottlePriority[\"LOW\"] = 3] = \"LOW\";\n})(CustomThrottlePriority || (CustomThrottlePriority = {}));\n","// ----------------------------------------------------------------------------\n\n// PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:\n// https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code\n// EDIT THE CORRESPONDENT .ts FILE INSTEAD\n\n//@ts-nocheck\n/* ------------------------------------------------------------------------ */\nimport { ExchangeRequestExpiredError } from '../../sdk/exchange.js';\nimport { CustomThrottlePriority } from '../types.js';\nimport { now, sleep } from './time.js';\n/* ------------------------------------------------------------------------ */\nclass Throttler {\n constructor(config) {\n this.config = {\n refillRate: 1.0,\n delay: 0.001,\n capacity: 1.0,\n maxCapacity: 100000,\n tokens: 0,\n cost: 1.0,\n priorities: {},\n expireIntervals: {\n 'myTrades': 1000 * 50, // 50 seconds\n },\n };\n Object.assign(this.config, config);\n this.priorityQueue = {}; // Set priority here\n this.running = false;\n this.isActive = true;\n }\n /**\n * Returns the most important queue (lower number => hight priority), if there are no priorities, returns the normal queue\n */\n getMostImportantQueue() {\n const priorityIndices = Object.keys(this.priorityQueue);\n const highestPriorityIndex = Math.min(...priorityIndices);\n const highestPriorityQueue = this.priorityQueue[highestPriorityIndex];\n return {\n highestPriorityQueue,\n highestPriorityIndex,\n };\n }\n stop() {\n this.isActive = false;\n }\n async loop() {\n let lastTimestamp = now();\n while (this.running) {\n const { highestPriorityQueue, highestPriorityIndex } = this.getMostImportantQueue();\n // It shouldn't ever be undefined\n if (highestPriorityQueue === undefined) {\n this.running = false;\n continue;\n }\n const { resolver, cost, rejecter, timestamp, expireInterval } = highestPriorityQueue[0];\n if (this.config['tokens'] >= 0 || !this.isActive) {\n // check if the request is expired\n if (expireInterval !== undefined && timestamp + expireInterval < now() || !this.isActive) {\n rejecter(new ExchangeRequestExpiredError());\n }\n else {\n this.config['tokens'] -= cost;\n resolver();\n }\n highestPriorityQueue.shift();\n // contextswitch\n await Promise.resolve();\n if (highestPriorityQueue.length === 0) {\n delete this.priorityQueue[highestPriorityIndex];\n }\n if (Object.keys(this.priorityQueue).length === 0) {\n this.running = false;\n }\n }\n else {\n await sleep(this.config['delay'] * 1000);\n const current = now();\n const elapsed = current - lastTimestamp;\n lastTimestamp = current;\n const tokens = this.config['tokens'] + this.config['refillRate'] * elapsed;\n this.config['tokens'] = Math.min(tokens, this.config['capacity']);\n }\n }\n }\n customThrottle(cost = undefined, path = undefined, customExpireInterval = undefined, customPriority = undefined) {\n let resolver;\n let rejecter;\n const promise = new Promise((resolve, reject) => {\n resolver = resolve;\n rejecter = reject;\n });\n const capacity = Object.keys(this.priorityQueue).reduce((acc, cur) => acc + this.priorityQueue[cur].length, 0);\n // TODO manage capacity for both queues\n if (capacity > this.config['maxCapacity']) {\n throw new Error('throttle queue is over maxCapacity (' + this.config['maxCapacity'].toString() + ')');\n }\n cost = (cost === undefined) ? this.config['cost'] : cost;\n let priority;\n if (customPriority !== undefined && customPriority in CustomThrottlePriority) {\n priority = customPriority;\n }\n else if (path !== undefined && this.config['priorities'][path] !== undefined) {\n priority = this.config['priorities'][path];\n }\n else {\n priority = CustomThrottlePriority.MEDIUM;\n }\n let expireInterval;\n if (customExpireInterval !== undefined) {\n expireInterval = customExpireInterval;\n }\n else if (path !== undefined) {\n expireInterval = this.config['expireIntervals'][path];\n }\n if (this.priorityQueue[priority] === undefined) {\n this.priorityQueue[priority] = [];\n }\n this.priorityQueue[priority].push({\n resolver,\n cost,\n rejecter,\n 'timestamp': now(),\n expireInterval,\n });\n for (let i = 0; i < this.priorityQueue.length; i++) {\n const q = this.priorityQueue[i];\n }\n if (!this.running) {\n this.running = true;\n this.loop();\n }\n return promise;\n }\n}\nexport { Throttler };\n// ----------------------------------------\n","// ----------------------------------------------------------------------------\n\n// PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:\n// https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code\n// EDIT THE CORRESPONDENT .ts FILE INSTEAD\n\nimport { ROUND_UP, ROUND_DOWN } from './number.js';\nimport { asFloat } from './type.js';\nimport { InvalidParamsError } from '../../sdk/default.js';\n//-------------------------------------------------------------------------\n// converts timeframe to seconds\nconst parseTimeframe = (timeframe) => {\n const amount = asFloat(timeframe.slice(0, -1));\n const unit = timeframe.slice(-1);\n let scale = undefined;\n if (unit === 'y') {\n scale = 60 * 60 * 24 * 365;\n }\n else if (unit === 'M') {\n scale = 60 * 60 * 24 * 30;\n }\n else if (unit === 'w') {\n scale = 60 * 60 * 24 * 7;\n }\n else if (unit === 'd') {\n scale = 60 * 60 * 24;\n }\n else if (unit === 'h') {\n scale = 60 * 60;\n }\n else if (unit === 'm') {\n scale = 60;\n }\n else if (unit === 's') {\n scale = 1;\n }\n else {\n throw new InvalidParamsError('timeframe unit ' + unit + ' is not supported');\n }\n return amount * scale;\n};\nconst roundTimeframe = (timeframe, timestamp, direction = ROUND_DOWN) => {\n const ms = parseTimeframe(timeframe) * 1000;\n // Get offset based on timeframe in milliseconds\n const offset = timestamp % ms;\n return timestamp - offset + ((direction === ROUND_UP) ? ms : 0);\n};\nconst extractParams = (string) => {\n /**\n * @ignore\n * @method\n * @param string usually a url path\n * @returns {[string]} all substrings surrounded by {} from parameter string\n */\n const re = /{([\\w-]+)}/g;\n const matches = [];\n let match = re.exec(string);\n while (match) {\n matches.push(match[1]);\n match = re.exec(string);\n }\n return matches;\n};\nconst implodeParams = (string, params) => {\n if (!Array.isArray(params)) {\n const keys = Object.keys(params);\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n if (!Array.isArray(params[key])) {\n string = string.replace('{' + key + '}', params[key]);\n }\n }\n }\n return string;\n};\nfunction vwap(baseVolume, quoteVolume) {\n return ((baseVolume !== undefined) && (quoteVolume !== undefined) && (baseVolume > 0)) ? (quoteVolume / baseVolume) : undefined;\n}\n/* ------------------------------------------------------------------------ */\nfunction aggregate(bidasks) {\n const result = {};\n for (let i = 0; i < bidasks.length; i++) {\n const [price, volume] = bidasks[i];\n if (volume > 0) {\n result[price] = (result[price] || 0) + volume;\n }\n }\n return Object.keys(result).map((price) => [parseFloat(price), parseFloat(result[price])]);\n}\nexport { aggregate, parseTimeframe, roundTimeframe, implodeParams, extractParams, vwap, };\n/* ------------------------------------------------------------------------ */\n","// ----------------------------------------------------------------------------\n\n// PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:\n// https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code\n// EDIT THE CORRESPONDENT .ts FILE INSTEAD\n\nconst zero = BigInt(0);\nconst minusOne = BigInt(-1);\nconst base = BigInt(10);\nclass Precise {\n constructor(number, decimals = undefined) {\n this.base = undefined;\n if (decimals === undefined) {\n let modifier = 0;\n number = number.toLowerCase();\n if (number.indexOf('e') > -1) {\n [number, modifier] = number.split('e');\n modifier = parseInt(modifier.toString());\n }\n const decimalIndex = number.indexOf('.');\n this.decimals = (decimalIndex > -1) ? number.length - decimalIndex - 1 : 0;\n const integerString = number.replace('.', '');\n this.integer = BigInt(integerString);\n this.decimals = this.decimals - modifier;\n }\n else {\n this.integer = number;\n this.decimals = decimals;\n }\n }\n mul(other) {\n // other must be another instance of Precise\n const integerResult = this.integer * other.integer;\n return new Precise(integerResult, this.decimals + other.decimals);\n }\n div(other, precision = 18) {\n const distance = precision - this.decimals + other.decimals;\n let numerator;\n if (distance === 0) {\n numerator = this.integer;\n }\n else if (distance < 0) {\n const exponent = base ** BigInt(-distance);\n numerator = this.integer / exponent;\n }\n else {\n const exponent = base ** BigInt(distance);\n numerator = this.integer * exponent;\n }\n const result = numerator / other.integer;\n return new Precise(result, precision);\n }\n add(other) {\n if (this.decimals === other.decimals) {\n const integerResult = this.integer + other.integer;\n return new Precise(integerResult, this.decimals);\n }\n else {\n const [smaller, bigger] = (this.decimals > other.decimals) ? [other, this] : [this, other];\n const exponent = bigger.decimals - smaller.decimals;\n const normalised = smaller.integer * (base ** BigInt(exponent));\n const result = normalised + bigger.integer;\n return new Precise(result, bigger.decimals);\n }\n }\n mod(other) {\n const rationizerNumerator = Math.max(-this.decimals + other.decimals, 0);\n const numerator = this.integer * (base ** BigInt(rationizerNumerator));\n const rationizerDenominator = Math.max(-other.decimals + this.decimals, 0);\n const denominator = other.integer * (base ** BigInt(rationizerDenominator));\n const result = numerator % denominator;\n return new Precise(result, rationizerDenominator + other.decimals);\n }\n sub(other) {\n const negative = new Precise(-other.integer, other.decimals);\n return this.add(negative);\n }\n abs() {\n return new Precise(this.integer < 0 ? this.integer * minusOne : this.integer, this.decimals);\n }\n neg() {\n return new Precise(-this.integer, this.decimals);\n }\n min(other) {\n return this.lt(other) ? this : other;\n }\n max(other) {\n return this.gt(other) ? this : other;\n }\n gt(other) {\n const sum = this.sub(other);\n return sum.integer > 0;\n }\n ge(other) {\n const sum = this.sub(other);\n return sum.integer >= 0;\n }\n lt(other) {\n return other.gt(this);\n }\n le(other) {\n return other.ge(this);\n }\n reduce() {\n const string = this.integer.toString();\n const start = string.length - 1;\n if (start === 0) {\n if (string === '0') {\n this.decimals = 0;\n }\n return this;\n }\n let i;\n for (i = start; i >= 0; i--) {\n if (string.charAt(i) !== '0') {\n break;\n }\n }\n const difference = start - i;\n if (difference === 0) {\n return this;\n }\n this.decimals -= difference;\n this.integer = BigInt(string.slice(0, i + 1));\n }\n equals(other) {\n this.reduce();\n other.reduce();\n return (this.decimals === other.decimals) && (this.integer === other.integer);\n }\n toString() {\n this.reduce();\n let sign;\n let abs;\n if (this.integer < 0) {\n sign = '-';\n abs = -this.integer;\n }\n else {\n sign = '';\n abs = this.integer;\n }\n const integerArray = Array.from(abs.toString(Number(base)).padStart(this.decimals, '0'));\n const index = integerArray.length - this.decimals;\n let item;\n if (index === 0) {\n // if we are adding to the front\n item = '0.';\n }\n else if (this.decimals < 0) {\n item = '0'.repeat(-this.decimals);\n }\n else if (this.decimals === 0) {\n item = '';\n }\n else {\n item = '.';\n }\n integerArray.splice(index, 0, item);\n return sign + integerArray.join('');\n }\n static stringMul(string1, string2) {\n if ((string1 === undefined) || (string2 === undefined)) {\n return undefined;\n }\n return (new Precise(string1)).mul(new Precise(string2)).toString();\n }\n static stringDiv(string1, string2, precision = 18) {\n if ((string1 === undefined) || (string2 === undefined)) {\n return undefined;\n }\n const string2Precise = new Precise(string2);\n if (string2Precise.integer === zero) {\n return undefined;\n }\n return (new Precise(string1)).div(string2Precise, precision).toString();\n }\n static stringAdd(string1, string2) {\n if ((string1 === undefined) && (string2 === undefined)) {\n return undefined;\n }\n if (string1 === undefined) {\n return string2;\n }\n else if (string2 === undefined) {\n return string1;\n }\n return (new Precise(string1)).add(new Precise(string2)).toString();\n }\n static stringSub(string1, string2) {\n if ((string1 === undefined) || (string2 === undefined)) {\n return undefined;\n }\n return (new Precise(string1)).sub(new Precise(string2)).toString();\n }\n static stringAbs(string) {\n if (string === undefined) {\n return undefined;\n }\n return (new Precise(string)).abs().toString();\n }\n static stringNeg(string) {\n if (string === undefined) {\n return undefined;\n }\n return (new Precise(string)).neg().toString();\n }\n static stringMod(string1, string2) {\n if ((string1 === undefined) || (string2 === undefined)) {\n return undefined;\n }\n return (new Precise(string1)).mod(new Precise(string2)).toString();\n }\n static stringEquals(string1, string2) {\n if ((string1 === undefined) || (string2 === undefined)) {\n return undefined;\n }\n return (new Precise(string1)).equals(new Precise(string2));\n }\n static stringEq(string1, string2) {\n if ((string1 === undefined) || (string2 === undefined)) {\n return undefined;\n }\n return (new Precise(string1)).equals(new Precise(string2));\n }\n static stringMin(string1, string2) {\n if ((string1 === undefined) || (string2 === undefined)) {\n return undefined;\n }\n return (new Precise(string1)).min(new Precise(string2)).toString();\n }\n static stringMax(string1, string2) {\n if ((string1 === undefined) || (string2 === undefined)) {\n return undefined;\n }\n return (new Precise(string1)).max(new Precise(string2)).toString();\n }\n static stringGt(string1, string2) {\n if ((string1 === undefined) || (string2 === undefined)) {\n return undefined;\n }\n return (new Precise(string1)).gt(new Precise(string2));\n }\n static stringGe(string1, string2) {\n if ((string1 === undefined) || (string2 === undefined)) {\n return undefined;\n }\n return (new Precise(string1)).ge(new Precise(string2));\n }\n static stringLt(string1, string2) {\n if ((string1 === undefined) || (string2 === undefined)) {\n return undefined;\n }\n return (new Precise(string1)).lt(new Precise(string2));\n }\n static stringLe(string1, string2) {\n if ((string1 === undefined) || (string2 === undefined)) {\n return undefined;\n }\n return (new Precise(string1)).le(new Precise(string2));\n }\n}\nexport default Precise;\nexport { Precise };\n","// ----------------------------------------------------------------------------\n\n// PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:\n// https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code\n// EDIT THE CORRESPONDENT .ts FILE INSTEAD\n\n// @ts-nocheck\nexport function Future() {\n let resolve = undefined, reject = undefined;\n const p = new Promise((resolve_, reject_) => {\n resolve = resolve_;\n reject = reject_;\n });\n p.resolve = function _resolve() {\n // eslint-disable-next-line prefer-rest-params\n setTimeout(() => {\n resolve.apply(this, arguments);\n });\n };\n p.reject = function _reject() {\n // eslint-disable-next-line prefer-rest-params\n setTimeout(() => {\n reject.apply(this, arguments);\n });\n };\n return p;\n}\nfunction wrapFuture(aggregatePromise) {\n const p = Future();\n // wrap the promises as a future\n aggregatePromise.then(p.resolve, p.reject);\n return p;\n}\nFuture.race = (futures) => wrapFuture(Promise.race(futures));\n","// ----------------------------------------------------------------------------\n\n// PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:\n// https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code\n// EDIT THE CORRESPONDENT .ts FILE INSTEAD\n\nimport { SdkErrorCodes, SdkErrorMessages } from \"./errorsMetadata.js\";\nimport { CedeSDKError } from \"./default.js\";\n/**\n * @description Thrown for internal errors\n */\nexport class InternalError extends CedeSDKError {\n constructor(code = SdkErrorCodes.INTERNAL_ERROR, message = SdkErrorMessages.INTERNAL_ERROR) {\n super(code, message);\n this.name = \"InternalError\";\n }\n}\n/**\n * @description Thrown when the exchange instance id is invalid and therefore the exchange instance is not found\n */\nexport class InvalidExchangeInstanceIdError extends InternalError {\n constructor(exchangeInstanceId) {\n super(SdkErrorCodes.INVALID_EXCHANGE_INSTANCE_ID, SdkErrorMessages.INVALID_EXCHANGE_INSTANCE_ID(exchangeInstanceId));\n this.name = \"InvalidExchangeInstanceIdError\";\n this.notReportable = true;\n }\n}\n/**\n * @description Thrown when the exchange id is invalid and therefore the exchange is not found\n */\nexport class InvalidExchangeIdError extends InternalError {\n constructor(exchangeId) {\n super(SdkErrorCodes.INVALID_EXCHANGE_ID, SdkErrorMessages.INVALID_EXCHANGE_ID(exchangeId));\n this.name = \"InvalidExchangeIdError\";\n }\n}\n","// ----------------------------------------------------------------------------\n\n// PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:\n// https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code\n// EDIT THE CORRESPONDENT .ts FILE INSTEAD\n\nimport { SdkErrorCodes, SdkErrorMessages } from \"./errorsMetadata.js\";\nimport { CedeSDKError } from \"./default.js\";\n/**\n * @description Default error for authentication\n */\nexport class AuthenticationError extends CedeSDKError {\n constructor(code = SdkErrorCodes.AUTHENTICATION_ERROR, message = SdkErrorMessages.AUTHENTICATION_ERROR) {\n super(code, message);\n this.name = \"AuthenticationError\";\n }\n}\n/**\n * @description Thrown when the credentials are invalid\n */\nexport class InvalidCredentialsError extends AuthenticationError {\n constructor() {\n super(SdkErrorCodes.INVALID_CREDENTIALS, SdkErrorMessages.INVALID_CREDENTIALS);\n this.name = \"InvalidCredentialsError\";\n this.notReportable = true;\n }\n}\n/**\n * @description Thrown when the authentication flow is not supported\n */\nexport class AuthenticationFlowNotSupportedError extends AuthenticationError {\n constructor() {\n super(SdkErrorCodes.AUTHENTICATION_FLOW_NOT_SUPPORTED, SdkErrorMessages.AUTHENTICATION_FLOW_NOT_SUPPORTED);\n this.name = \"AuthenticationFlowNotSupportedError\";\n }\n}\n/**\n * @descrion Thrown when the oauth credentials are revoked\n */\nexport class OAuthAccessRevokedError extends AuthenticationError {\n constructor() {\n super(SdkErrorCodes.OAUTH_ACCESS_REVOKED, SdkErrorMessages.OAUTH_ACCESS_REVOKED);\n this.name = \"OAuthAccessRevokedError\";\n this.notReportable = true;\n }\n}\n","// ----------------------------------------------------------------------------\n\n// PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:\n// https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code\n// EDIT THE CORRESPONDENT .ts FILE INSTEAD\n\nimport { SdkErrorCodes, SdkErrorMessages } from \"./errorsMetadata.js\";\nimport { CedeSDKError } from \"./default.js\";\n/**\n * @description Default error for withdrawal\n */\nexport class WithdrawalError extends CedeSDKError {\n constructor(code = SdkErrorCodes.WITHDRAWAL_ERROR, message = SdkErrorMessages.WITHDRAWAL_ERROR) {\n super(code, message);\n this.name = \"WithdrawalError\";\n }\n}\n/**\n * @description Thrown when readonly binance exchange instance id is not provided\n */\nexport class ReadonlyExchangeNotProvidedError extends WithdrawalError {\n constructor() {\n super(SdkErrorCodes.READONLY_EXCHANGE_NOT_PROVIDED_ERROR, SdkErrorMessages.READONLY_EXCHANGE_NOT_PROVIDED_ERROR);\n this.name = \"ReadonlyExchangeNotProvidedError\";\n this.notReportable = true;\n }\n}\n/**\n * @description Thrown when the token symbol isn't found\n */\nexport class TokenSymbolNotFoundError extends WithdrawalError {\n constructor(tokenSymbol) {\n super(SdkErrorCodes.TOKEN_SYMBOL_NOT_FOUND, SdkErrorMessages.TOKEN_SYMBOL_NOT_FOUND(tokenSymbol));\n this.name = \"TokenSymbolNotFoundError\";\n }\n}\n/**\n * @description Thrown when the withdrawal is not found\n */\nexport class WithdrawalNotFoundError extends WithdrawalError {\n constructor() {\n super(SdkErrorCodes.WITHDRAWAL_NOT_FOUND, SdkErrorMessages.WITHDRAWAL_NOT_FOUND);\n this.name = \"WithdrawalNotFoundError\";\n }\n}\n/**\n * @description Thrown when the withdrawal amount is under the minimum allowed to withdraw\n */\nexport class UnderWithdrawMinimumError extends WithdrawalError {\n constructor() {\n super(SdkErrorCodes.UNDER_WITHDRAW_MINIMUM, SdkErrorMessages.UNDER_WITHDRAW_MINIMUM);\n this.name = \"UnderWithdrawMinimumError\";\n }\n}\n/**\n * @description Thrown when the withdrawal amount is over the maximum allowed to withdraw\n */\nexport class OverWithdrawMaximumError extends WithdrawalError {\n constructor() {\n super(SdkErrorCodes.OVER_WITHDRAW_MAXIMUM, SdkErrorMessages.OVER_WITHDRAW_MAXIMUM);\n this.name = \"OverWithdrawMaximumError\";\n }\n}\n/**\n * @description Thrown when the provided address is not whitelisted\n */\nexport class WhitelistCheckFailedError extends WithdrawalError {\n constructor() {\n super(SdkErrorCodes.WHITELIST_CHECK_FAILED, SdkErrorMessages.WHITELIST_CHECK_FAILED);\n this.name = \"WhitelistCheckFailedError\";\n this.notReportable = true;\n }\n}\nexport class WithdrawalForbiddenError extends WithdrawalError {\n constructor() {\n super(SdkErrorCodes.WITHDRAWAL_FORBIDDEN, SdkErrorMessages.WITHDRAWAL_FORBIDDEN);\n this.name = \"WithdrawalForbiddenError\";\n }\n}\n","// ----------------------------------------------------------------------------\n\n// PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:\n// https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code\n// EDIT THE CORRESPONDENT .ts FILE INSTEAD\n\nimport { SdkErrorCodes, SdkErrorMessages } from \"./errorsMetadata.js\";\nimport { CedeSDKError } from \"./default.js\";\n/**\n * @description Thrown when there is a network error\n */\nexport class NetworkError extends CedeSDKError {\n constructor(code = SdkErrorCodes.NETWORK_ERROR, message = SdkErrorMessages.NETWORK_ERROR) {\n super(code, message);\n this.name = \"NetworkError\";\n }\n}\n/**\n * @description Thrown when the network is not found\n */\nexport class NetworkNotFoundError extends NetworkError {\n constructor(network) {\n super(SdkErrorCodes.NETWORK_NOT_FOUND, SdkErrorMessages.NETWORK_NOT_FOUND(network));\n this.name = \"NetworkNotFoundError\";\n }\n}\n/**\n * @description Thrown when the network is not found for the token symbol\n */\nexport class NetworkNotFoundForTokenSymbol extends NetworkError {\n constructor(symbol) {\n super(SdkErrorCodes.NETWORK_NOT_FOUND_FOR_TOKEN_SYMBOL, SdkErrorMessages.NETWORK_NOT_FOUND_FOR_TOKEN_SYMBOL(symbol));\n this.name = \"NetworkNotFoundForTokenSymbol\";\n }\n}\n","// ----------------------------------------------------------------------------\n\n// PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:\n// https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code\n// EDIT THE CORRESPONDENT .ts FILE INSTEAD\n\nimport { CedeSDKError } from \"./default.js\";\nimport { SdkErrorCodes, SdkErrorMessages } from \"./errorsMetadata.js\";\n/**\n * @description Default error for deposit\n */\nexport class DepositError extends CedeSDKError {\n constructor(code = SdkErrorCodes.DEPOSIT_ERROR, message = SdkErrorMessages.DEPOSIT_ERROR) {\n super(code, message);\n this.name = \"DepositError\";\n }\n}\n/**\n * @description Thrown when the deposit address is not found from the exchange api\n */\nexport class GetDepositAddressError extends DepositError {\n constructor(tokenSymbol, network) {\n super(SdkErrorCodes.GET_DEPOSIT_ADDRESS, SdkErrorMessages.GET_DEPOSIT_ADDRESS(tokenSymbol, network));\n this.name = \"GetDepositAddressError\";\n }\n}\nexport class CreateDepositAddressError extends DepositError {\n constructor(tokenSymbol, network) {\n super(SdkErrorCodes.CREATE_DEPOSIT_ADDRESS, SdkErrorMessages.CREATE_DEPOSIT_ADDRESS(tokenSymbol, network));\n this.name = \"CreateDepositAddressError\";\n }\n}\n/**\n * @description Thrown when the deposit tx is not found\n */\nexport class DepositNotFoundError extends DepositError {\n constructor() {\n super(SdkErrorCodes.DEPOSIT_NOT_FOUND, SdkErrorMessages.DEPOSIT_NOT_FOUND);\n this.name = \"DepositNotFoundError\";\n }\n}\n","// ----------------------------------------------------------------------------\n\n// PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:\n// https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code\n// EDIT THE CORRESPONDENT .ts FILE INSTEAD\n\nimport { SdkErrorCodes, SdkErrorMessages } from \"./errorsMetadata.js\";\nimport { CedeSDKError } from \"./default.js\";\n/**\n * @description Default error coming from the cede server API\n */\nexport class ApiError extends CedeSDKError {\n constructor(code = SdkErrorCodes.API_ERROR, message = SdkErrorMessages.API_ERROR) {\n super(code, message);\n this.name = \"ApiError\";\n }\n}\n/**\n * @description Thrown when the API request failed\n */\nexport class InvalidApiRequestError extends ApiError {\n constructor(errorMessage) {\n super(SdkErrorCodes.INVALID_API_REQUEST, SdkErrorMessages.INVALID_API_REQUEST(errorMessage));\n this.name = \"InvalidApiRequestError\";\n }\n}\n/**\n * @description Thrown when the API request failed due to an internal error\n */\nexport class InternalApiExceptionError extends ApiError {\n constructor(errorMessage) {\n super(SdkErrorCodes.INTERNAL_API_EXCEPTION, errorMessage);\n this.name = \"InternalApiExceptionError\";\n }\n}\n","// ----------------------------------------------------------------------------\n\n// PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:\n// https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code\n// EDIT THE CORRESPONDENT .ts FILE INSTEAD\n\nimport { SdkErrorCodes, SdkErrorMessages } from \"./errorsMetadata.js\";\nimport { CedeSDKError } from \"./default.js\";\n/**\n * @description Default error for portfolio\n */\nexport class PortfolioError extends CedeSDKError {\n constructor(code = SdkErrorCodes.PORTFOLIO_ERROR, message = SdkErrorMessages.PORTFOLIO_ERROR) {\n super(code, message);\n this.name = \"PortfolioError\";\n }\n}\n/**\n * @description Thrown when there isn't enough balance to perform the operation\n */\nexport class InsufficientBalanceError extends PortfolioError {\n constructor() {\n super(SdkErrorCodes.NOT_ENOUGH_BALANCE, SdkErrorMessages.NOT_ENOUGH_BALANCE);\n this.name = \"InsufficientBalanceError\";\n }\n}\n","// ----------------------------------------------------------------------------\n\n// PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:\n// https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code\n// EDIT THE CORRESPONDENT .ts FILE INSTEAD\n\nimport { SdkErrorCodes, SdkErrorMessages } from \"./errorsMetadata.js\";\nimport { CedeSDKError } from \"./default.js\";\n/**\n * @description Default error for trade\n */\nexport class TradeError extends CedeSDKError {\n constructor(code = SdkErrorCodes.TRADE_ERROR, message = SdkErrorMessages.TRADE_ERROR) {\n super(code, message);\n }\n}\n/**\n * @description Thrown when the order is not found\n */\nexport class OrderNotFoundError extends TradeError {\n constructor() {\n super(SdkErrorCodes.ORDER_NOT_FOUND, SdkErrorMessages.ORDER_NOT_FOUND);\n }\n}\n/**\n * @description Thrown when the market is not found (based on pair symbol)\n */\nexport class MarketNotFoundError extends TradeError {\n constructor(market) {\n super(SdkErrorCodes.MARKET_NOT_FOUND, SdkErrorMessages.MARKET_NOT_FOUND(market));\n this.name = \"MarketNotFoundError\";\n }\n}\nexport class InvalidOHLCVFormatError extends TradeError {\n constructor(message) {\n super(SdkErrorCodes.INVALID_OHLCV_FORMAT, SdkErrorMessages.INVALID_OHLCV_FORMAT(message));\n this.name = \"InvalidOHLCVFormatError\";\n }\n}\nexport class CannotProvideOHLCVError extends TradeError {\n constructor() {\n super(SdkErrorCodes.CANNOT_PROVIDE_OHLCV, SdkErrorMessages.CANNOT_PROVIDE_OHLCV);\n this.name = \"CannotProvideOHLCVError\";\n }\n}\nexport class MarketError extends TradeError {\n constructor(code = SdkErrorCodes.MARKET_ERROR, message = SdkErrorMessages.MARKET_ERROR) {\n super(code, message);\n this.name = \"MarketError\";\n }\n}\nexport class MarketNotLoadedError extends MarketError {\n constructor() {\n super(SdkErrorCodes.MARKET_NOT_LOADED, SdkErrorMessages.MARKET_NOT_LOADED);\n this.name = \"MarketNotLoadedError\";\n }\n}\nexport class MarketTypeNotSupportedError extends MarketError {\n constructor(marketType) {\n super(SdkErrorCodes.MARKET_TYPE_NOT_SUPPORTED, SdkErrorMessages.MARKET_TYPE_NOT_SUPPORTED(marketType));\n this.name = \"MarketTypeNotSupportedError\";\n }\n}\n","// ----------------------------------------------------------------------------\n\n// PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:\n// https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code\n// EDIT THE CORRESPONDENT .ts FILE INSTEAD\n\n// prng4.js - uses Arcfour as a PRNG\nexport class Arcfour {\n constructor() {\n this.i = 0;\n this.j = 0;\n this.S = [];\n }\n // Arcfour.prototype.init = ARC4init;\n // Initialize arcfour context from key, an array of ints, each from [0..255]\n init(key) {\n let i;\n let j;\n let t;\n for (i = 0; i < 256; ++i) {\n this.S[i] = i;\n }\n j = 0;\n for (i = 0; i < 256; ++i) {\n j = (j + this.S[i] + key[i % key.length]) & 255;\n t = this.S[i];\n this.S[i] = this.S[j];\n this.S[j] = t;\n }\n this.i = 0;\n this.j = 0;\n }\n // Arcfour.prototype.next = ARC4next;\n next() {\n let t;\n this.i = (this.i + 1) & 255;\n this.j = (this.j + this.S[this.i]) & 255;\n t = this.S[this.i];\n this.S[this.i] = this.S[this.j];\n this.S[this.j] = t;\n return this.S[(t + this.S[this.i]) & 255];\n }\n}\n// Plug in your RNG constructor here\nexport function prng_newstate() {\n return new Arcfour();\n}\n// Pool size must be a multiple of 4 and greater than 32.\n// An array of bytes the size of the pool will be passed to init()\nexport let rng_psize = 256;\n","// ----------------------------------------------------------------------------\n\n// PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:\n// https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code\n// EDIT THE CORRESPONDENT .ts FILE INSTEAD\n\n// Random number generator - requires a PRNG backend, e.g. prng4.js\nimport { prng_newstate, rng_psize } from \"./prng4.js\";\nlet rng_state;\nlet rng_pool = null;\nlet rng_pptr;\n// Initialize the pool with junk if needed.\nif (rng_pool == null) {\n rng_pool = [];\n rng_pptr = 0;\n let t;\n if (typeof window !== 'undefined' && window.crypto && window.crypto.getRandomValues) {\n // Extract entropy (2048 bits) from RNG if available\n const z = new Uint32Array(256);\n window.crypto.getRandomValues(z);\n for (t = 0; t < z.length; ++t) {\n rng_pool[rng_pptr++] = z[t] & 255;\n }\n }\n // Use mouse events for entropy, if we do not have enough entropy by the time\n // we need it, entropy will be generated by Math.random.\n var count = 0;\n const onMouseMoveListener = function (ev) {\n count = count || 0;\n if (count >= 256 || rng_pptr >= rng_psize) {\n if (window.removeEventListener) {\n window.removeEventListener(\"mousemove\", onMouseMoveListener, false);\n }\n else if (window.detachEvent) {\n window.detachEvent(\"onmousemove\", onMouseMoveListener);\n }\n return;\n }\n try {\n const mouseCoordinates = ev.x + ev.y;\n rng_pool[rng_pptr++] = mouseCoordinates & 255;\n count += 1;\n }\n catch (e) {\n // Sometimes Firefox will deny permission to access event properties for some reason. Ignore.\n }\n };\n if (typeof window !== 'undefined') {\n if (window.addEventListener) {\n window.addEventListener(\"mousemove\", onMouseMoveListener, false);\n }\n else if (window.attachEvent) {\n window.attachEvent(\"onmousemove\", onMouseMoveListener);\n }\n }\n}\nfunction rng_get_byte() {\n if (rng_state == null) {\n rng_state = prng_newstate();\n // At this point, we may not have collected enough entropy. If not, fall back to Math.random\n while (rng_pptr < rng_psize) {\n const random = Math.floor(65536 * Math.random());\n rng_pool[rng_pptr++] = random & 255;\n }\n rng_state.init(rng_pool);\n for (rng_pptr = 0; rng_pptr < rng_pool.length; ++rng_pptr) {\n rng_pool[rng_pptr] = 0;\n }\n rng_pptr = 0;\n }\n // TODO: allow reseeding after first request\n return rng_state.next();\n}\nexport class SecureRandom {\n nextBytes(ba) {\n for (let i = 0; i < ba.length; ++i) {\n ba[i] = rng_get_byte();\n }\n }\n}\n","// ----------------------------------------------------------------------------\n\n// PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:\n// https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code\n// EDIT THE CORRESPONDENT .ts FILE INSTEAD\n\nexport const accountCacheIdentifier = (exchangeId, exchangeInstanceId) => `account-${exchangeId}`;\nexport const marketsByIdCacheIdentifier = (exchangeId) => `marketsById-${exchangeId}`;\nexport const marketsCacheIdentifier = (exchangeId) => `markets-${exchangeId}`;\nexport const symbolsCacheIdentifier = (exchangeId) => `symbols-${exchangeId}`;\nexport const idsCacheIdentifier = (exchangeId) => `ids-${exchangeId}`;\nexport const currenciesCacheIdentifier = (exchange) => `currencies-${exchange.id}${[\"binance\", \"bybit\", \"mexc\", \"okx\"].includes(exchange.id) ? `-${exchange.exchangeInstanceId}` : \"\"}`;\nexport const currenciesByIdCacheIdentifier = (exchange) => `currenciesById-${exchange.id}${[\"binance\", \"bybit\", \"mexc\", \"okx\"].includes(exchange.id) ? `-${exchange.exchangeInstanceId}` : \"\"}`;\nexport const networkIdsByCurrencyAndNetworkCodesCacheIdentifier = (exchangeId) => `networkIdsByCurrencyAndNetworkCodes-${exchangeId}`;\nexport const currencyIdsByCodeAndNetworkCodeCacheIdentifier = (exchangeId) => `currencyIdsByCodeAndNetworkCode-${exchangeId}`;\nexport const chainIdbyEcidsCacheIdentifier = (exchangeId) => `chainIdbyEcids-${exchangeId}`;\nexport const ecidByChainIdsCacheIdentifier = (exchangeId) => `ecidByChainIds-${exchangeId}`;\nexport const currenciesForWithdrawalCacheIdentifier = (exchangeId) => `currenciesForWithdrawal-${exchangeId}`;\nexport const accountsCacheIdentifier = (exchangeId, exchangeInstanceId) => `accounts-${exchangeId}-${exchangeInstanceId}`;\nexport const timeDifferenceCacheIdentifier = (exchangeId) => `timeDifference-${exchangeId}`;\nexport const PUBLIC_DATA_CACHE_TTL = 1000 * 60 * 60 * 24; // 1 day\nexport const PRIVATE_DATA_CACHE_TTL = 1000 * 60 * 30; // 30 minutes\nexport const ACCOUNTS_DATA_CACHE_TTL = 1000 * 60 * 5; // 5 minutes\nexport const currenciesCacheTTL = (exchange) => {\n if ([\"binance\", \"bybit\", \"mexc\", \"okx\"].includes(exchange.id)) {\n return PRIVATE_DATA_CACHE_TTL; // 30 minutes\n }\n if (exchange.id === \"htx\") {\n return 1000 * 60 * 30; // 30 minutes (because we need to have the network fees updated)\n }\n return PUBLIC_DATA_CACHE_TTL; // 1 day\n};\n","// ----------------------------------------------------------------------------\n\n// PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:\n// https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code\n// EDIT THE CORRESPONDENT .ts FILE INSTEAD\n\nimport { SHA2 } from './_sha2.js';\nimport { wrapConstructor } from './utils.js';\n// SHA1 was cryptographically broken.\n// It is still widely used in legacy apps. Don't use it for a new protocol.\n// RFC 3174\nconst rotl = (word, shift) => (word << shift) | ((word >>> (32 - shift)) >>> 0);\n// Choice: a ? b : c\nconst Chi = (a, b, c) => (a & b) ^ (~a & c);\n// Majority function, true if any two inpust is true\nconst Maj = (a, b, c) => (a & b) ^ (a & c) ^ (b & c);\n// Initial state\nconst IV = new Uint32Array([0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0]);\n// Temporary buffer, not used to store anything between runs\n// Named this way because it matches specification.\nconst SHA1_W = new Uint32Array(80);\nclass SHA1 extends SHA2 {\n constructor() {\n super(64, 20, 8, false);\n this.A = IV[0] | 0;\n this.B = IV[1] | 0;\n this.C = IV[2] | 0;\n this.D = IV[3] | 0;\n this.E = IV[4] | 0;\n }\n get() {\n const { A, B, C, D, E } = this;\n return [A, B, C, D, E];\n }\n set(A, B, C, D, E) {\n this.A = A | 0;\n this.B = B | 0;\n this.C = C | 0;\n this.D = D | 0;\n this.E = E | 0;\n }\n process(view, offset) {\n for (let i = 0; i < 16; i++, offset += 4)\n SHA1_W[i] = view.getUint32(offset, false);\n for (let i = 16; i < 80; i++)\n SHA1_W[i] = rotl(SHA1_W[i - 3] ^ SHA1_W[i - 8] ^ SHA1_W[i - 14] ^ SHA1_W[i - 16], 1);\n // Compression function main loop, 80 rounds\n let { A, B, C, D, E } = this;\n for (let i = 0; i < 80; i++) {\n let F, K;\n if (i < 20) {\n F = Chi(B, C, D);\n K = 0x5a827999;\n }\n else if (i < 40) {\n F = B ^ C ^ D;\n K = 0x6ed9eba1;\n }\n else if (i < 60) {\n F = Maj(B, C, D);\n K = 0x8f1bbcdc;\n }\n else {\n F = B ^ C ^ D;\n K = 0xca62c1d6;\n }\n const T = (rotl(A, 5) + F + E + K + SHA1_W[i]) | 0;\n E = D;\n D = C;\n C = rotl(B, 30);\n B = A;\n A = T;\n }\n // Add the compressed chunk to the current hash value\n A = (A + this.A) | 0;\n B = (B + this.B) | 0;\n C = (C + this.C) | 0;\n D = (D + this.D) | 0;\n E = (E + this.E) | 0;\n this.set(A, B, C, D, E);\n }\n roundClean() {\n SHA1_W.fill(0);\n }\n destroy() {\n this.set(0, 0, 0, 0, 0);\n this.buffer.fill(0);\n }\n}\nexport const sha1 = wrapConstructor(() => new SHA1());\n","// ----------------------------------------------------------------------------\n\n// PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:\n// https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code\n// EDIT THE CORRESPONDENT .ts FILE INSTEAD\n\nimport { base16, base32 } from '../../static_dependencies/scure-base/index.js';\nimport { sha1 } from '../../static_dependencies/noble-hashes/sha1.js';\nimport { hmac } from './crypto.js';\nfunction totp(secret) {\n const dec2hex = (s) => ((s < 15.5 ? '0' : '') + Math.round(s).toString(16));\n const hex2dec = (s) => parseInt(s, 16);\n const leftpad = (s, p) => (p + s).slice(-p.length); // both s and p are short strings\n secret = secret.replace(' ', ''); // support 2fa-secrets with spaces like \"4TDV WOGO\" → \"4TDVWOGO\"\n const epoch = Math.round(new Date().getTime() / 1000.0);\n const time = leftpad(dec2hex(Math.floor(epoch / 30)), '0000000000000000');\n const hmacRes = hmac(base16.decode(time), base32.decode(secret), sha1, 'hex');\n const offset = hex2dec(hmacRes.substring(hmacRes.length - 1));\n // eslint-disable-next-line\n let otp = (hex2dec(hmacRes.substr(offset * 2, 8)) & hex2dec('7fffffff')) + '';\n return otp.substring(otp.length - 6, otp.length);\n}\n;\nexport { totp };\nexport default totp;\n","// ----------------------------------------------------------------------------\n\n// PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:\n// https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code\n// EDIT THE CORRESPONDENT .ts FILE INSTEAD\n\n// ----------------------------------------------------------------------------\n/* eslint-disable */\nimport * as functions from './functions.js';\nconst { isNode, deepExtend, extend, clone, flatten, unique, indexBy, sortBy, sortBy2, safeFloat2, groupBy, aggregate, uuid, unCamelCase, precisionFromString, Throttler, capitalize, now, decimalToPrecision, safeValue, safeValue2, safeString, safeString2, seconds, milliseconds, binaryToBase16, numberToBE, base16ToBinary, iso8601, omit, isJsonEncodedObject, safeInteger, sum, omitZero, implodeParams, extractParams, json, merge, binaryConcat, hash, ecdsa, arrayConcat, encode, urlencode, hmac, numberToString, parseTimeframe, safeInteger2, safeStringLower, parse8601, yyyymmdd, safeStringUpper, safeTimestamp, binaryConcatArray, uuidv1, numberToLE, ymdhms, stringToBase64, decode, uuid22, safeIntegerProduct2, safeIntegerProduct, safeStringLower2, yymmdd, base58ToBinary, binaryToBase58, safeTimestamp2, rawencode, keysort, inArray, isEmpty, ordered, filterBy, uuid16, safeFloat, base64ToBinary, safeStringUpper2, urlencodeWithArrayRepeat, microseconds, binaryToBase64, strip, toArray, safeFloatN, safeIntegerN, safeIntegerProductN, safeTimestampN, safeValueN, safeStringN, safeStringLowerN, safeStringUpperN, urlencodeNested, parseDate, ymd, base64ToString, crc32, TRUNCATE, ROUND, DECIMAL_PLACES, NO_PADDING, TICK_SIZE, SIGNIFICANT_DIGITS } = functions;\nimport { keys as keysFunc, values as valuesFunc, vwap as vwapFunc } from './functions.js';\n// import exceptions from \"./errors.js\"\nimport { Precise } from './Precise.js';\n//-----------------------------------------------------------------------------\nimport { Future } from './ws/Future.js';\n// ----------------------------------------------------------------------------\n//\nimport { axolotl } from './functions/crypto.js';\n// ----------------------------------------------------------------------------\n// move this elsewhere\nimport { AuthenticationError, ExchangeDDosProtectionError, ExchangeError, ExchangeNotAllowedMethodError, ExchangeNotAvailableError, ExchangeRateLimitExceededError, ExchangeRequestExpiredError, ExchangeUnknownAssetError, FetchFromCacheError, GetDepositAddressError, InternalError, InvalidAddressError, InvalidCredentialsError, InvalidParamsError, MarketError, MarketNotFoundError, MarketNotLoadedError, NetworkNotFoundError, NetworkNotFoundForTokenSymbol } from '../sdk/errors.js';\nimport { SecureRandom } from '../static_dependencies/jsencrypt/lib/jsbn/rng.js';\nimport { ACCOUNTS_DATA_CACHE_TTL, accountsCacheIdentifier, currenciesByIdCacheIdentifier, currenciesCacheIdentifier, currenciesCacheTTL, idsCacheIdentifier, marketsByIdCacheIdentifier, marketsCacheIdentifier, PUBLIC_DATA_CACHE_TTL, symbolsCacheIdentifier, timeDifferenceCacheIdentifier } from './cache.js';\nimport totp from './functions/totp.js';\n// ----------------------------------------------------------------------------\n/**\n * @class Exchange\n */\nexport default class Exchange {\n constructor(userConfig = {}) {\n this.throttleProp = undefined;\n this.api = undefined;\n this.userAgent = undefined;\n this.user_agent = undefined;\n //\n this.userAgents = {\n 'chrome': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36',\n 'chrome39': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36',\n 'chrome100': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.75 Safari/537.36',\n };\n this.headers = {};\n this.forcedProxy = '';\n this.origin = '*'; // CORS origin\n //\n this.agent = undefined; // maintained for backwards compatibility\n this.termId = undefined; // only for OKX\n this.nodeHttpModuleLoaded = false;\n this.httpAgent = undefined;\n this.httpsAgent = undefined;\n this.minFundingAddressLength = 1; // used in checkAddress\n this.quoteJsonNumbers = true; // treat numbers in json as quoted precise strings\n this.number = Number; // or String (a pointer to a function)\n this.handleContentTypeApplicationZip = false;\n this.fetchPrivateMethodsFromCache = false;\n // whether fees should be summed by currency code\n this.reduceFees = true;\n this.validateServerSsl = true;\n this.validateClientSsl = false;\n this.timeout = 10000; // milliseconds\n this.verbose = false;\n this.twofa = undefined; // two-factor authentication (2FA)\n this.balance = {};\n this.orderbooks = {};\n this.tickers = {};\n this.bidsasks = {};\n this.orders = undefined;\n this.triggerOrders = undefined;\n this.transactions = {};\n this.requiresWeb3 = false;\n this.requiresEddsa = false;\n this.enableLastJsonResponse = true;\n this.enableLastHttpResponse = true;\n this.enableLastResponseHeaders = true;\n this.last_http_response = undefined;\n this.last_json_response = undefined;\n this.last_response_headers = undefined;\n this.last_request_headers = undefined;\n this.last_request_body = undefined;\n this.last_request_url = undefined;\n this.last_request_path = undefined;\n this.id = undefined;\n this.markets = undefined;\n this.status = undefined;\n this.rateLimit = undefined; // milliseconds\n this.tokenBucket = undefined;\n this.throttler = undefined;\n this.enableRateLimit = undefined;\n this.httpExceptions = undefined;\n this.markets_by_id = undefined;\n this.symbols = undefined;\n this.ids = undefined;\n this.currencies = undefined;\n this.tokensMapping = undefined; // TokenMappingItem[]\n this.tokensMetadata = undefined; // TokensMetadata\n this.baseCurrencies = undefined;\n this.quoteCurrencies = undefined;\n this.currencies_by_id = undefined;\n this.codes = undefined;\n this.reloadingMarkets = undefined;\n this.marketsLoading = undefined;\n this.accounts = undefined;\n this.accountsById = undefined;\n this.hostname = undefined;\n this.precisionMode = undefined;\n this.paddingMode = undefined;\n this.exceptions = {};\n this.timeframes = {};\n this.version = undefined;\n this.marketsByAltname = undefined;\n this.name = undefined;\n this.targetAccount = undefined;\n this.stablePairs = {};\n // WS/PRO options\n this.clients = {};\n this.newUpdates = true;\n this.streaming = {};\n this.alias = false;\n this.externalSigner = undefined; // external signer to keep private keys outside of the SDK\n this.deepExtend = deepExtend;\n this.isNode = isNode;\n this.keys = keysFunc;\n this.values = valuesFunc;\n this.extend = extend;\n this.clone = clone;\n this.flatten = flatten;\n this.unique = unique;\n this.indexBy = indexBy;\n this.sortBy = sortBy;\n this.sortBy2 = sortBy2;\n this.groupBy = groupBy;\n this.aggregate = aggregate;\n this.uuid = uuid;\n this.unCamelCase = unCamelCase;\n this.precisionFromString = precisionFromString;\n this.capitalize = capitalize;\n this.now = now;\n this.decimalToPrecision = decimalToPrecision;\n this.safeValue = safeValue;\n this.safeValue2 = safeValue2;\n this.safeString = safeString;\n this.safeString2 = safeString2;\n this.safeFloat = safeFloat;\n this.safeFloat2 = safeFloat2;\n this.seconds = seconds;\n this.milliseconds = milliseconds;\n this.binaryToBase16 = binaryToBase16;\n this.numberToBE = numberToBE;\n this.base16ToBinary = base16ToBinary;\n this.iso8601 = iso8601;\n this.omit = omit;\n this.isJsonEncodedObject = isJsonEncodedObject;\n this.safeInteger = safeInteger;\n this.sum = sum;\n this.omitZero = omitZero;\n this.implodeParams = implodeParams;\n this.extractParams = extractParams;\n this.json = json;\n this.vwap = vwapFunc;\n this.merge = merge;\n this.binaryConcat = binaryConcat;\n this.hash = hash;\n this.arrayConcat = arrayConcat;\n this.encode = encode;\n this.urlencode = urlencode;\n this.hmac = hmac;\n this.numberToString = numberToString;\n this.parseTimeframe = parseTimeframe;\n this.safeInteger2 = safeInteger2;\n this.safeStringLower = safeStringLower;\n this.parse8601 = parse8601;\n this.yyyymmdd = yyyymmdd;\n this.safeStringUpper = safeStringUpper;\n this.safeTimestamp = safeTimestamp;\n this.binaryConcatArray = binaryConcatArray;\n this.uuidv1 = uuidv1;\n this.numberToLE = numberToLE;\n this.ymdhms = ymdhms;\n this.yymmdd = yymmdd;\n this.stringToBase64 = stringToBase64;\n this.decode = decode;\n this.uuid22 = uuid22;\n this.safeIntegerProduct2 = safeIntegerProduct2;\n this.safeIntegerProduct = safeIntegerProduct;\n this.binaryToBase58 = binaryToBase58;\n this.base58ToBinary = base58ToBinary;\n this.base64ToBinary = base64ToBinary;\n this.safeTimestamp2 = safeTimestamp2;\n this.rawencode = rawencode;\n this.keysort = keysort;\n this.inArray = inArray;\n this.safeStringLower2 = safeStringLower2;\n this.safeStringUpper2 = safeStringUpper2;\n this.isEmpty = isEmpty;\n this.ordered = ordered;\n this.filterBy = filterBy;\n this.uuid16 = uuid16;\n this.urlencodeWithArrayRepeat = urlencodeWithArrayRepeat;\n this.microseconds = microseconds;\n this.binaryToBase64 = binaryToBase64;\n this.strip = strip;\n this.toArray = toArray;\n this.safeFloatN = safeFloatN;\n this.safeIntegerN = safeIntegerN;\n this.safeIntegerProductN = safeIntegerProductN;\n this.safeTimestampN = safeTimestampN;\n this.safeValueN = safeValueN;\n this.safeStringN = safeStringN;\n this.safeStringLowerN = safeStringLowerN;\n this.safeStringUpperN = safeStringUpperN;\n this.urlencodeNested = urlencodeNested;\n this.parseDate = parseDate;\n this.ymd = ymd;\n this.base64ToString = base64ToString;\n this.crc32 = crc32;\n this.cache = undefined;\n this.exchangeInstanceId = undefined;\n this.mutex = undefined;\n this.httpProxyAgentModule = undefined;\n this.httpsProxyAgentModule = undefined;\n this.socksProxyAgentModule = undefined;\n this.socksProxyAgentModuleChecked = false;\n this.proxyDictionaries = {};\n this.proxyModulesLoaded = false;\n Object.assign(this, functions);\n //\n // if (isNode) {\n // this.nodeVersion = process.version.match (/\\d+\\.\\d+\\.\\d+/)[0]\n // this.userAgent = {\n // 'User-Agent': 'ccxt/' + (Exchange as any).ccxtVersion +\n // ' (+https://github.com/ccxt/ccxt)' +\n // ' Node.js/' + this.nodeVersion + ' (JavaScript)'\n // }\n // }\n //\n this.options = this.getDefaultOptions(); // exchange-specific options, if any\n // fetch implementation options (JS only)\n // http properties\n this.headers = {};\n // prepended to URL, like https://proxy.com/https://exchange.com/api...\n this.forcedProxy = '';\n this.origin = '*'; // CORS origin\n // underlying properties\n this.minFundingAddressLength = 1; // used in checkAddress\n this.quoteJsonNumbers = true; // treat numbers in json as quoted precise strings\n this.number = Number; // or String (a pointer to a function)\n this.handleContentTypeApplicationZip = false;\n // whether fees should be summed by currency code\n this.reduceFees = true;\n // do not delete this line, it is needed for users to be able to define their own fetchImplementation\n this.fetchImplementation = undefined;\n this.validateServerSsl = true;\n this.validateClientSsl = false;\n // default property values\n this.timeout = 10000; // milliseconds\n this.verbose = false;\n this.twofa = undefined; // two-factor authentication (2FA)\n // default credentials\n this.apiKey = undefined;\n this.secret = undefined;\n this.uid = undefined;\n this.login = undefined;\n this.password = undefined;\n this.privateKey = undefined; // a \"0x\"-prefixed hexstring private key for a wallet\n this.walletAddress = undefined; // a wallet address \"0x\"-prefixed hexstring\n this.token = undefined; // reserved for HTTP auth in some cases\n // placeholders for cached data\n this.balance = {};\n this.orderbooks = {};\n this.tickers = {};\n this.orders = undefined;\n this.trades = {};\n this.transactions = {};\n this.ohlcvs = {};\n this.myTrades = undefined;\n this.positions = undefined;\n // web3 and cryptography flags\n this.requiresWeb3 = false;\n this.requiresEddsa = false;\n // response handling flags and properties\n this.lastRestRequestTimestamp = 0;\n this.enableLastJsonResponse = true;\n this.enableLastHttpResponse = true;\n this.enableLastResponseHeaders = true;\n this.last_http_response = undefined;\n this.last_json_response = undefined;\n this.last_response_headers = undefined;\n this.last_request_headers = undefined;\n this.last_request_body = undefined;\n this.last_request_url = undefined;\n this.last_request_path = undefined;\n // camelCase and snake_notation support\n const unCamelCaseProperties = (obj = this) => {\n if (obj !== null) {\n const ownPropertyNames = Object.getOwnPropertyNames(obj);\n for (let i = 0; i < ownPropertyNames.length; i++) {\n const k = ownPropertyNames[i];\n this[unCamelCase(k)] = this[k];\n }\n unCamelCaseProperties(Object.getPrototypeOf(obj));\n }\n };\n unCamelCaseProperties();\n // merge constructor overrides to this instance\n const configEntries = Object.entries(this.describe()).concat(Object.entries(userConfig));\n for (let i = 0; i < configEntries.length; i++) {\n const [property, value] = configEntries[i];\n if (value && Object.getPrototypeOf(value) === Object.prototype) {\n this[property] = this.deepExtend(this[property], value);\n }\n else {\n this[property] = value;\n }\n }\n // http client options\n const agentOptions = {\n 'keepAlive': true,\n };\n // ssl options\n if (!this.validateServerSsl) {\n agentOptions['rejectUnauthorized'] = false;\n }\n // generate old metainfo interface\n const hasKeys = Object.keys(this.has);\n for (let i = 0; i < hasKeys.length; i++) {\n const k = hasKeys[i];\n this['has' + this.capitalize(k)] = !!this.has[k]; // converts 'emulated' to true\n }\n // generate implicit api\n if (this.api) {\n this.defineRestApi(this.api, 'request');\n }\n // init the request rate limiter\n this.initRestRateLimiter();\n this.newUpdates = (this.options.newUpdates !== undefined) ? this.options.newUpdates : true;\n this.afterConstruct();\n }\n describe() {\n return {\n 'id': undefined,\n 'name': undefined,\n 'countries': undefined,\n 'enableRateLimit': true,\n 'rateLimit': 2000,\n 'certified': false,\n 'pro': false,\n 'alias': false,\n 'has': {\n 'publicAPI': true,\n 'privateAPI': true,\n 'CORS': undefined,\n 'spot': undefined,\n 'margin': undefined,\n 'swap': undefined,\n 'future': undefined,\n 'option': undefined,\n 'cancelAllOrders': undefined,\n 'cancelOrder': true,\n 'cancelOrders': undefined,\n 'createDepositAddress': undefined,\n 'createLimitOrder': true,\n 'createMarketOrder': true,\n 'createOrder': true,\n 'createMarketBuyOrderWithCost': undefined,\n 'createMarketOrderWithCost': undefined,\n 'createMarketSellOrderWithCost': undefined,\n 'createOrders': undefined,\n 'createOrderWithTakeProfitAndStopLoss': undefined,\n 'createTakeProfitOrder': undefined,\n 'createTrailingAmountOrder': undefined,\n 'createTrailingPercentOrder': undefined,\n 'createTriggerOrder': undefined,\n 'editOrder': 'emulated',\n 'fetchAccounts': undefined,\n 'fetchBalance': true,\n 'fetchCanceledOrders': undefined,\n 'fetchCanceledAndClosedOrders': undefined,\n 'fetchClosedOrder': undefined,\n 'fetchClosedOrders': undefined,\n 'fetchCurrencies': 'emulated',\n 'fetchDeposit': undefined,\n 'fetchDepositAddress': undefined,\n 'fetchDepositAddresses': undefined,\n 'fetchDepositAddressesByNetwork': undefined,\n 'fetchDeposits': undefined,\n 'fetchDepositsWithdrawals': undefined,\n 'fetchTransactionFee': undefined,\n 'fetchTransactionFees': undefined,\n 'fetchL2OrderBook': true,\n 'fetchLedger': undefined,\n 'fetchLedgerEntry': undefined,\n 'fetchMarkets': true,\n 'fetchMyTrades': undefined,\n 'fetchOHLCV': undefined,\n 'fetchOpenOrder': undefined,\n 'fetchOpenOrders': undefined,\n 'fetchOrder': undefined,\n 'fetchOrderBook': true,\n 'fetchOrderBooks': undefined,\n 'fetchOrders': undefined,\n 'fetchOrderTrades': undefined,\n 'fetchPermissions': undefined,\n 'fetchPosition': undefined,\n 'fetchPositions': undefined,\n 'fetchPositionsForSymbol': undefined,\n 'fetchPositionsRisk': undefined,\n 'fetchStatus': undefined,\n 'fetchTicker': true,\n 'fetchTickers': undefined,\n 'fetchTime': undefined,\n 'fetchTrades': true,\n 'fetchTradingFee': undefined,\n 'fetchTradingFees': undefined,\n 'fetchTradingLimits': undefined,\n 'fetchTransactions': undefined,\n 'fetchTransfers': undefined,\n 'fetchWithdrawAddresses': undefined,\n 'fetchWithdrawal': undefined,\n 'fetchWithdrawals': undefined,\n 'transfer': undefined,\n 'withdraw': undefined,\n },\n 'urls': {\n 'logo': undefined,\n 'api': undefined,\n 'www': undefined,\n 'doc': undefined,\n 'fees': undefined,\n },\n 'api': undefined,\n 'requiredCredentials': {\n 'apiKey': true,\n 'secret': true,\n 'uid': false,\n 'login': false,\n 'password': false,\n 'twofa': false,\n 'privateKey': false,\n 'walletAddress': false,\n 'token': false, // reserved for HTTP auth in some cases\n },\n 'markets': undefined,\n 'currencies': {},\n 'timeframes': undefined,\n 'fees': {\n 'trading': {\n 'tierBased': undefined,\n 'percentage': undefined,\n 'taker': undefined,\n 'maker': undefined,\n },\n 'funding': {\n 'tierBased': undefined,\n 'percentage': undefined,\n 'withdraw': {},\n 'deposit': {},\n },\n },\n 'status': {\n 'status': 'ok',\n 'updated': undefined,\n 'eta': undefined,\n 'url': undefined,\n },\n 'exceptions': undefined,\n 'httpExceptions': {\n '422': ExchangeError,\n '418': ExchangeDDosProtectionError,\n '429': ExchangeRateLimitExceededError,\n '404': ExchangeNotAvailableError,\n '409': ExchangeNotAvailableError,\n '410': ExchangeNotAvailableError,\n '451': ExchangeNotAvailableError,\n '500': ExchangeNotAvailableError,\n '501': ExchangeNotAvailableError,\n '502': ExchangeNotAvailableError,\n '520': ExchangeNotAvailableError,\n '521': ExchangeNotAvailableError,\n '522': ExchangeNotAvailableError,\n '525': ExchangeNotAvailableError,\n '526': ExchangeNotAvailableError,\n '400': ExchangeNotAvailableError,\n '403': ExchangeNotAvailableError,\n '405': ExchangeNotAvailableError,\n '503': ExchangeNotAvailableError,\n '530': ExchangeNotAvailableError,\n '408': ExchangeRequestExpiredError,\n '504': ExchangeRequestExpiredError,\n '401': AuthenticationError,\n '407': AuthenticationError,\n '511': AuthenticationError,\n },\n 'precisionMode': DECIMAL_PLACES,\n 'paddingMode': NO_PADDING,\n 'limits': {\n 'leverage': { 'min': undefined, 'max': undefined },\n 'amount': { 'min': undefined, 'max': undefined },\n 'price': { 'min': undefined, 'max': undefined },\n 'cost': { 'min': undefined, 'max': undefined },\n },\n }; // return\n } // describe ()\n encodeURIComponent(...args) {\n // @ts-expect-error\n return encodeURIComponent(...args);\n }\n checkAddress(address) {\n if (address === undefined) {\n throw new InvalidAddressError().addMessage(\"Address is undefined\").exchange(this.id);\n }\n // check the address is not the same letter like 'aaaaa' nor too short nor has a space\n if ((this.unique(address).length === 1) || address.length < this.minFundingAddressLength || address.includes(' ')) {\n throw new InvalidAddressError().addMessage('Address is invalid or has less than ' + this.minFundingAddressLength.toString() + ' characters: \"' + this.json(address) + '\"')\n .exchange(this.id);\n }\n return address;\n }\n initRestRateLimiter() {\n if (this.rateLimit === undefined) {\n throw new InternalError().addMessage('rateLimit property is not configured').exchange(this.id);\n }\n this.tokenBucket = this.extend({\n delay: 0.001,\n capacity: 1,\n cost: 1,\n maxCapacity: 10000,\n refillRate: (this.rateLimit > 0) ? 1 / this.rateLimit : Number.MAX_VALUE,\n }, this.tokenBucket);\n this.throttler = this.throttlerFactory({\n 'tokenBucket': this.tokenBucket,\n 'id': this.id,\n });\n }\n throttlerFactory(opts) {\n const tokenBucket = this.safeValue(opts, 'tokenBucket');\n return new Throttler(tokenBucket);\n }\n throttle(cost = undefined, path = undefined, customExpireInterval = undefined, customPriority = undefined) {\n return this.throttler.customThrottle(cost, path, customExpireInterval, customPriority);\n }\n defineRestApiEndpoint(methodName, uppercaseMethod, lowercaseMethod, camelcaseMethod, path, paths, config = {}) {\n const splitPath = path.split(/[^a-zA-Z0-9]/);\n const camelcaseSuffix = splitPath.map(this.capitalize).join('');\n const underscoreSuffix = splitPath.map((x) => x.trim().toLowerCase()).filter((x) => x.length > 0).join('_');\n const camelcasePrefix = [paths[0]].concat(paths.slice(1).map(this.capitalize)).join('');\n const underscorePrefix = [paths[0]].concat(paths.slice(1).map((x) => x.trim()).filter((x) => x.length > 0)).join('_');\n const camelcase = camelcasePrefix + camelcaseMethod + this.capitalize(camelcaseSuffix);\n const underscore = underscorePrefix + '_' + lowercaseMethod + '_' + underscoreSuffix;\n const typeArgument = (paths.length > 1) ? paths : paths[0];\n // handle call costs here\n const partial = async (params = {}, context = {}) => this[methodName](path, typeArgument, uppercaseMethod, params, undefined, undefined, config, context);\n // const partial = async (params) => this[methodName] (path, typeArgument, uppercaseMethod, params || {})\n this[camelcase] = partial;\n this[underscore] = partial;\n }\n defineRestApi(api, methodName, paths = []) {\n const keys = Object.keys(api);\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n const value = api[key];\n const uppercaseMethod = key.toUpperCase();\n const lowercaseMethod = key.toLowerCase();\n const camelcaseMethod = this.capitalize(lowercaseMethod);\n if (Array.isArray(value)) {\n for (let k = 0; k < value.length; k++) {\n const path = value[k].trim();\n this.defineRestApiEndpoint(methodName, uppercaseMethod, lowercaseMethod, camelcaseMethod, path, paths);\n }\n // the options HTTP method conflicts with the 'options' API url path\n // } else if (key.match (/^(?:get|post|put|delete|options|head|patch)$/i)) {\n }\n else if (key.match(/^(?:get|post|put|delete|head|patch)$/i)) {\n const endpoints = Object.keys(value);\n for (let j = 0; j < endpoints.length; j++) {\n const endpoint = endpoints[j];\n const path = endpoint.trim();\n const config = value[endpoint];\n if (typeof config === 'object') {\n this.defineRestApiEndpoint(methodName, uppercaseMethod, lowercaseMethod, camelcaseMethod, path, paths, config);\n }\n else if (typeof config === 'number') {\n this.defineRestApiEndpoint(methodName, uppercaseMethod, lowercaseMethod, camelcaseMethod, path, paths, { cost: config });\n }\n else {\n throw new InternalError()\n .addMessage('defineRestApi : API format is not supported, API leafs must strings, objects or numbers')\n .exchange(this.id);\n }\n }\n }\n else {\n this.defineRestApi(value, methodName, paths.concat([key]));\n }\n }\n }\n log(...args) {\n console.log(...args);\n }\n async loadProxyModules() {\n if (this.proxyModulesLoaded) {\n return;\n }\n this.proxyModulesLoaded = true;\n // we have to handle it with below nested way, because of dynamic\n // import issues (https://github.com/ccxt/ccxt/pull/20687)\n try {\n // todo: possible sync alternatives: https://stackoverflow.com/questions/51069002/convert-import-to-synchronous\n this.httpProxyAgentModule = await import(/* webpackIgnore: true */ '../static_dependencies/proxies/http-proxy-agent/index.js');\n this.httpsProxyAgentModule = await import(/* webpackIgnore: true */ '../static_dependencies/proxies/https-proxy-agent/index.js');\n }\n catch (e) {\n // if several users are using those frameworks which cause exceptions,\n // let them to be able to load modules still, by installing them\n try {\n // @ts-ignore\n this.httpProxyAgentModule = await import(/* webpackIgnore: true */ 'http-proxy-agent');\n // @ts-ignore\n this.httpProxyAgentModule = await import(/* webpackIgnore: true */ 'https-proxy-agent');\n }\n catch (e) { }\n }\n if (this.socksProxyAgentModuleChecked === false) {\n this.socksProxyAgentModuleChecked = true;\n try {\n // @ts-ignore\n this.socksProxyAgentModule = await import(/* webpackIgnore: true */ 'socks-proxy-agent');\n }\n catch (e) { }\n }\n }\n setProxyAgents(httpProxy, httpsProxy, socksProxy) {\n let chosenAgent = undefined;\n if (httpProxy) {\n if (this.httpProxyAgentModule === undefined) {\n throw new InternalError()\n .addMessage('You need to load JS proxy modules with `.loadProxyModules()` method at first to use proxies')\n .exchange(this.id);\n }\n if (!(httpProxy in this.proxyDictionaries)) {\n this.proxyDictionaries[httpProxy] = new this.httpProxyAgentModule.HttpProxyAgent(httpProxy);\n }\n chosenAgent = this.proxyDictionaries[httpProxy];\n }\n else if (httpsProxy) {\n if (this.httpsProxyAgentModule === undefined) {\n throw new InternalError()\n .addMessage('You need to load JS proxy modules with `.loadProxyModules()` method at first to use proxies')\n .exchange(this.id);\n }\n if (!(httpsProxy in this.proxyDictionaries)) {\n this.proxyDictionaries[httpsProxy] = new this.httpsProxyAgentModule.HttpsProxyAgent(httpsProxy);\n }\n chosenAgent = this.proxyDictionaries[httpsProxy];\n chosenAgent.keepAlive = true;\n }\n else if (socksProxy) {\n if (this.socksProxyAgentModule === undefined) {\n throw new InternalError()\n .addMessage('To use SOCKS proxy with ccxt, at first you need install module \"npm i socks-proxy-agent\" and then initialize proxies with `.loadProxyModules()` method')\n .exchange(this.id);\n }\n if (!(socksProxy in this.proxyDictionaries)) {\n this.proxyDictionaries[socksProxy] = new this.socksProxyAgentModule.SocksProxyAgent(socksProxy);\n }\n chosenAgent = this.proxyDictionaries[socksProxy];\n }\n return chosenAgent;\n }\n async loadHttpProxyAgent() {\n // for `http://` protocol proxy-urls, we need to load `http` module only on first call\n if (!this.httpAgent) {\n const httpModule = await import(/* webpackIgnore: true */ 'node:http');\n this.httpAgent = new httpModule.Agent();\n }\n return this.httpAgent;\n }\n getHttpAgentIfNeeded(url) {\n if (isNode) {\n // only for non-ssl proxy\n if (url.substring(0, 5) === 'ws://') {\n if (this.httpAgent === undefined) {\n throw new InternalError()\n .addMessage('To use proxy with non-ssl ws:// urls, at first run `await exchange.loadHttpProxyAgent()` method')\n .exchange(this.id);\n }\n return this.httpAgent;\n }\n }\n return undefined;\n }\n async fetch(url, method = 'GET', headers = undefined, body = undefined) {\n // load node-http(s) modules only on first call\n if (isNode) {\n if (!this.nodeHttpModuleLoaded) {\n this.nodeHttpModuleLoaded = true;\n const httpsModule = await import(/* webpackIgnore: true */ 'node:https');\n this.httpsAgent = new httpsModule.Agent({ keepAlive: true });\n }\n }\n // ##### PROXY & HEADERS #####\n headers = this.extend(this.headers, headers);\n // proxy-url\n const proxyUrl = this.checkProxyUrlSettings(url, method, headers, body);\n let httpProxyAgent = false;\n if (proxyUrl !== undefined) {\n // part only for node-js\n if (isNode) {\n // in node we need to set header to *\n headers = this.extend({ 'Origin': this.origin }, headers);\n // only for http proxy\n if (proxyUrl.substring(0, 5) === 'http:') {\n await this.loadHttpProxyAgent();\n httpProxyAgent = this.httpAgent;\n }\n }\n url = proxyUrl + url;\n }\n // proxy agents\n const [httpProxy, httpsProxy, socksProxy] = this.checkProxySettings(url, method, headers, body);\n this.checkConflictingProxies(httpProxy || httpsProxy || socksProxy, proxyUrl);\n // if (!this.proxyModulesLoaded) {\n // await this.loadProxyModules (); // this is needed in JS, independently whether proxy properties were set or not, we have to load them because of necessity in WS, which would happen beyond 'fetch' method (WS/etc)\n // }\n const chosenAgent = this.setProxyAgents(httpProxy, httpsProxy, socksProxy);\n // user-agent\n const userAgent = (this.userAgent !== undefined) ? this.userAgent : this.user_agent;\n if (userAgent && isNode) {\n if (typeof userAgent === 'string') {\n headers = this.extend({ 'User-Agent': userAgent }, headers);\n }\n else if ((typeof userAgent === 'object') && ('User-Agent' in userAgent)) {\n headers = this.extend(userAgent, headers);\n }\n }\n // set final headers\n headers = this.setHeaders(headers);\n // log\n if (this.verbose) {\n this.log(\"fetch Request:\\n\", this.id, method, url, \"\\nRequestHeaders:\\n\", headers, \"\\nRequestBody:\\n\", body, \"\\n\");\n }\n // end of proxies & headers\n if (this.fetchImplementation === undefined) {\n if (isNode) {\n if (this.agent === undefined) {\n this.agent = this.httpsAgent;\n }\n try {\n const module = await import(/* webpackIgnore: true */ '../static_dependencies/node-fetch/index.js');\n this.AbortError = module.AbortError;\n this.fetchImplementation = module.default;\n this.FetchError = module.FetchError;\n }\n catch (e) {\n // some users having issues with dynamic imports (https://github.com/ccxt/ccxt/pull/20687)\n // so let them to fallback to node's native fetch\n if (typeof fetch === 'function') {\n this.fetchImplementation = fetch;\n // as it's browser-compatible implementation ( https://nodejs.org/dist/latest-v20.x/docs/api/globals.html#fetch )\n // it throws same error types\n this.AbortError = DOMException;\n this.FetchError = TypeError;\n }\n else {\n throw new InternalError().addMessage('Seems, \"fetch\" function is not available in your node-js version, please use latest node-js version');\n }\n }\n }\n else {\n this.fetchImplementation = self.fetch;\n this.AbortError = DOMException;\n this.FetchError = TypeError;\n }\n }\n // fetchImplementation cannot be called on this. in browsers:\n // TypeError Failed to execute 'fetch' on 'Window': Illegal invocation\n const fetchImplementation = this.fetchImplementation;\n const params = { method, headers, body, timeout: this.timeout };\n if (this.agent) {\n params['agent'] = this.agent;\n }\n // override agent, if needed\n if (httpProxyAgent) {\n // if proxyUrl is being used, then specifically in nodejs, we need http module, not https\n params['agent'] = httpProxyAgent;\n }\n else if (chosenAgent) {\n // if http(s)Proxy is being used\n params['agent'] = chosenAgent;\n }\n const controller = new AbortController();\n params['signal'] = controller.signal;\n const timeout = setTimeout(() => {\n controller.abort();\n }, this.timeout);\n try {\n const response = await fetchImplementation(url, params);\n clearTimeout(timeout);\n return this.handleRestResponse(response, url, method, headers, body);\n }\n catch (e) {\n if (e instanceof this.AbortError) {\n throw new ExchangeRequestExpiredError()\n .addMessage(method + ' ' + url + ' request timed out (' + this.timeout + ' ms)')\n .exchange(this.id);\n }\n else if (e instanceof this.FetchError) {\n throw new InternalError()\n .addMessage(method + ' ' + url + ' fetch failed')\n .exchange(this.id);\n }\n throw e;\n }\n }\n async fetchFromCache(requestCallId = undefined) {\n throw new FetchFromCacheError(\"Not implemented\").exchange(this.id);\n }\n parseJson(jsonString) {\n try {\n if (this.isJsonEncodedObject(jsonString)) {\n return JSON.parse(this.onJsonResponse(jsonString));\n }\n }\n catch (e) {\n // SyntaxError\n return undefined;\n }\n }\n getResponseHeaders(response) {\n const result = {};\n response.headers.forEach((value, key) => {\n key = key.split('-').map((word) => this.capitalize(word)).join('-');\n result[key] = value;\n });\n return result;\n }\n handleRestResponse(response, url, method = 'GET', requestHeaders = undefined, requestBody = undefined) {\n const responseHeaders = this.getResponseHeaders(response);\n if (this.handleContentTypeApplicationZip && (responseHeaders['Content-Type'] === 'application/zip')) {\n const responseBuffer = response.buffer();\n if (this.enableLastResponseHeaders) {\n this.last_response_headers = responseHeaders;\n }\n if (this.enableLastHttpResponse) {\n this.last_http_response = responseBuffer;\n }\n if (this.verbose) {\n this.log(\"handleRestResponse:\\n\", this.id, method, url, response.status, response.statusText, \"\\nResponseHeaders:\\n\", responseHeaders, \"ZIP redacted\", \"\\n\");\n }\n // no error handler needed, because it would not be a zip response in case of an error\n return responseBuffer;\n }\n return response.text().then((responseBody) => {\n const bodyText = this.onRestResponse(response.status, response.statusText, url, method, responseHeaders, responseBody, requestHeaders, requestBody);\n const json = this.parseJson(bodyText);\n if (this.enableLastResponseHeaders) {\n this.last_response_headers = responseHeaders;\n }\n if (this.enableLastHttpResponse) {\n this.last_http_response = responseBody;\n }\n if (this.enableLastJsonResponse) {\n this.last_json_response = json;\n }\n if (this.verbose) {\n this.log(\"handleRestResponse:\\n\", this.id, method, url, response.status, response.statusText, \"\\nResponseHeaders:\\n\", responseHeaders, \"\\nResponseBody:\\n\", responseBody, \"\\n\");\n }\n const skipFurtherErrorHandling = this.handleErrors(response.status, response.statusText, url, method, responseHeaders, responseBody, json, requestHeaders, requestBody);\n if (!skipFurtherErrorHandling) {\n this.handleHttpStatusCode(response.status, response.statusText, url, method, responseBody);\n }\n return json || responseBody;\n });\n }\n onRestResponse(statusCode, statusText, url, method, responseHeaders, responseBody, requestHeaders, requestBody) {\n return responseBody.trim();\n }\n onJsonResponse(responseBody) {\n return this.quoteJsonNumbers ? responseBody.replace(/\":([+.0-9eE-]+)([,}])/g, '\":\"$1\"$2') : responseBody;\n }\n async loadMarketsHelper(reload = false, params = {}) {\n // Wait for pending requests to be finished\n await this.mutex.waitForUnlockAll([\n marketsCacheIdentifier(this.id),\n currenciesCacheIdentifier(this),\n currenciesByIdCacheIdentifier(this),\n marketsByIdCacheIdentifier(this.id),\n symbolsCacheIdentifier(this.id),\n idsCacheIdentifier(this.id)\n ]);\n // Bind the cached data to the instance\n this.markets = (await this.cache.get(marketsCacheIdentifier(this.id), { clone: false }))?.data;\n this.currencies = (await this.cache.get(currenciesCacheIdentifier(this), { clone: false }))?.data;\n this.currencies_by_id = (await this.cache.get(currenciesByIdCacheIdentifier(this), { clone: false }))?.data;\n this.markets_by_id = (await this.cache.get(marketsByIdCacheIdentifier(this.id), { clone: false }))?.data;\n this.symbols = (await this.cache.get(symbolsCacheIdentifier(this.id), { clone: false }))?.data;\n this.ids = (await this.cache.get(idsCacheIdentifier(this.id), { clone: false }))?.data;\n const needFetchCurrencies = (!this.currencies || !this.currencies_by_id || reload) && this.has['fetchCurrencies'] === true;\n const needFetchMarkets = (!this.markets || !this.markets_by_id || !this.symbols || !this.ids || reload);\n // Collect mutex keys\n const currenciesKeys = [\n currenciesCacheIdentifier(this),\n currenciesByIdCacheIdentifier(this)\n ];\n const marketsKeys = [\n marketsCacheIdentifier(this.id),\n marketsByIdCacheIdentifier(this.id),\n symbolsCacheIdentifier(this.id),\n idsCacheIdentifier(this.id)\n ];\n const mutexKeys = [];\n if (needFetchCurrencies) {\n mutexKeys.push(...currenciesKeys);\n }\n if (needFetchMarkets) {\n mutexKeys.push(...marketsKeys);\n }\n if (this.mutex.isLockedMany(mutexKeys)) {\n return this.loadMarketsHelper(reload, params);\n }\n // Acquire all mutex locks\n await this.mutex.acquireAll(mutexKeys);\n try {\n const promises = [];\n if (needFetchCurrencies) {\n const fetchCurrenciesPromise = (async () => {\n this.currencies = await this.fetchCurrencies();\n this.currencies_by_id = this.indexBy(this.currencies, 'id');\n await Promise.all([\n this.cache.set({\n key: currenciesCacheIdentifier(this),\n data: this.currencies,\n ttl: currenciesCacheTTL(this),\n clone: false,\n }),\n this.cache.set({\n key: currenciesByIdCacheIdentifier(this),\n data: this.currencies_by_id,\n ttl: currenciesCacheTTL(this),\n clone: false,\n }),\n ]);\n })();\n promises.push(fetchCurrenciesPromise);\n }\n if (needFetchMarkets) {\n const fetchMarketsPromise = (async () => {\n const markets = this.markets || await this.fetchMarkets(params);\n this.markets = markets;\n })();\n promises.push(fetchMarketsPromise);\n }\n await Promise.all(promises);\n // Ensure currencies are available\n if (!this.currencies) {\n if (this.has['fetchCurrencies'] === true) {\n // This should not happen as currencies should have been fetched\n throw new Error('Currencies should have been fetched but are not available.');\n }\n else {\n this.currencies = {};\n this.currencies_by_id = {};\n }\n }\n if (this.markets) {\n await this.setMarkets(this.markets, this.currencies);\n }\n }\n finally {\n await this.mutex.releaseAll(mutexKeys);\n }\n return this.markets;\n }\n async loadMarkets(reload = false, params = {}) {\n // this method is async, it returns a promise\n if ((reload && !this.reloadingMarkets) || !this.marketsLoading) {\n this.reloadingMarkets = true;\n this.marketsLoading = this.loadMarketsHelper(reload, params).then((resolved) => {\n this.reloadingMarkets = false;\n return resolved;\n }, (error) => {\n this.reloadingMarkets = false;\n throw error;\n });\n }\n return this.marketsLoading;\n }\n async fetchCurrencies(params = {}) {\n // markets are returned as a list\n // currencies are returned as a dict\n // this is for historical reasons\n // and may be changed for consistency later\n return new Promise((resolve, reject) => resolve(this.currencies));\n }\n async fetchMarkets(params = {}) {\n // markets are returned as a list\n // currencies are returned as a dict\n // this is for historical reasons\n // and may be changed for consistency later\n return new Promise((resolve, reject) => resolve(Object.values(this.markets)));\n }\n parseNumber(value, d = undefined) {\n if (value === undefined) {\n return d;\n }\n else {\n try {\n return this.number(value);\n }\n catch (e) {\n return d;\n }\n }\n }\n handleHttpStatusCode(code, reason, url, method, body) {\n const codeAsString = code.toString();\n if (codeAsString in this.httpExceptions) {\n const ErrorClass = this.httpExceptions[codeAsString];\n throw new ErrorClass(method + ' ' + url + ' ' + codeAsString + ' ' + reason + ' ' + body).exchange(this.id);\n }\n }\n remove0xPrefix(hexData) {\n if (hexData.slice(0, 2) === '0x') {\n return hexData.slice(2);\n }\n else {\n return hexData;\n }\n }\n spawn(method, ...args) {\n const future = Future();\n // using setTimeout 0 to force the execution to run after the future is returned\n setTimeout(() => {\n method.apply(this, args).then(future.resolve).catch(future.reject);\n }, 0);\n return future;\n }\n delay(timeout, method, ...args) {\n setTimeout(() => {\n this.spawn(method, ...args);\n }, timeout);\n }\n convertToBigInt(value) {\n return BigInt(value); // used on XT\n }\n stringToCharsArray(value) {\n return value.split('');\n }\n valueIsDefined(value) {\n return value !== undefined && value !== null;\n }\n arraySlice(array, first, second = undefined) {\n if (second === undefined) {\n return array.slice(first);\n }\n return array.slice(first, second);\n }\n randomBytes(length) {\n const rng = new SecureRandom();\n const x = [];\n x.length = length;\n rng.nextBytes(x);\n return Buffer.from(x).toString('hex');\n }\n getProperty(obj, property, defaultValue = undefined) {\n return (property in obj ? obj[property] : defaultValue);\n }\n setProperty(obj, property, defaultValue = undefined) {\n obj[property] = defaultValue;\n }\n axolotl(payload, hexKey, ed25519) {\n return axolotl(payload, hexKey, ed25519);\n }\n fixStringifiedJsonMembers(content) {\n // used for instance in bingx\n // when stringified json has members with their values also stringified, like:\n // '{\"code\":0, \"data\":{\"order\":{\"orderId\":1742968678528512345,\"symbol\":\"BTC-USDT\", \"takeProfit\":\"{\\\"type\\\":\\\"TAKE_PROFIT\\\",\\\"stopPrice\\\":43320.1}\",\"reduceOnly\":false}}}'\n // we can fix with below manipulations\n // @ts-ignore\n let modifiedContent = content.replaceAll('\\\\', '');\n modifiedContent = modifiedContent.replaceAll('\"{', '{');\n modifiedContent = modifiedContent.replaceAll('}\"', '}');\n return modifiedContent;\n }\n /* eslint-enable */\n // ------------------------------------------------------------------------\n // ########################################################################\n // ########################################################################\n // ########################################################################\n // ########################################################################\n // ######## ######## ########\n // ######## ######## ########\n // ######## ######## ########\n // ######## ######## ########\n // ######## ######################## ########################\n // ######## ######################## ########################\n // ######## ######################## ########################\n // ######## ######################## ########################\n // ######## ######## ########\n // ######## ######## ########\n // ######## ######## ########\n // ######## ######## ########\n // ########################################################################\n // ########################################################################\n // ########################################################################\n // ########################################################################\n // ######## ######## ######## ########\n // ######## ######## ######## ########\n // ######## ######## ######## ########\n // ######## ######## ######## ########\n // ################ ######################## ################\n // ################ ######################## ################\n // ################ ######################## ################\n // ################ ######################## ################\n // ######## ######## ################ ################\n // ######## ######## ################ ################\n // ######## ######## ################ ################\n // ######## ######## ################ ################\n // ########################################################################\n // ########################################################################\n // ########################################################################\n // ########################################################################\n safeBoolN(dictionaryOrList, keys, defaultValue = undefined) {\n /**\n * @ignore\n * @method\n * @description safely extract boolean value from dictionary or list\n * @returns {bool | undefined}\n */\n const value = this.safeValueN(dictionaryOrList, keys, defaultValue);\n if (typeof value === 'boolean') {\n return value;\n }\n return defaultValue;\n }\n safeBool2(dictionary, key1, key2, defaultValue = undefined) {\n /**\n * @ignore\n * @method\n * @description safely extract boolean value from dictionary or list\n * @returns {bool | undefined}\n */\n return this.safeBoolN(dictionary, [key1, key2], defaultValue);\n }\n safeBool(dictionary, key, defaultValue = undefined) {\n /**\n * @ignore\n * @method\n * @description safely extract boolean value from dictionary or list\n * @returns {bool | undefined}\n */\n return this.safeBoolN(dictionary, [key], defaultValue);\n }\n safeDictN(dictionaryOrList, keys, defaultValue = undefined) {\n /**\n * @ignore\n * @method\n * @description safely extract a dictionary from dictionary or list\n * @returns {object | undefined}\n */\n const value = this.safeValueN(dictionaryOrList, keys, defaultValue);\n if (value === undefined) {\n return defaultValue;\n }\n if (typeof value === 'object') {\n return value;\n }\n return defaultValue;\n }\n safeDict(dictionary, key, defaultValue = undefined) {\n /**\n * @ignore\n * @method\n * @description safely extract a dictionary from dictionary or list\n * @returns {object | undefined}\n */\n return this.safeDictN(dictionary, [key], defaultValue);\n }\n safeDict2(dictionary, key1, key2, defaultValue = undefined) {\n /**\n * @ignore\n * @method\n * @description safely extract a dictionary from dictionary or list\n * @returns {object | undefined}\n */\n return this.safeDictN(dictionary, [key1, key2], defaultValue);\n }\n safeListN(dictionaryOrList, keys, defaultValue = undefined) {\n /**\n * @ignore\n * @method\n * @description safely extract an Array from dictionary or list\n * @returns {Array | undefined}\n */\n const value = this.safeValueN(dictionaryOrList, keys, defaultValue);\n if (value === undefined) {\n return defaultValue;\n }\n if (Array.isArray(value)) {\n return value;\n }\n return defaultValue;\n }\n safeList2(dictionaryOrList, key1, key2, defaultValue = undefined) {\n /**\n * @ignore\n * @method\n * @description safely extract an Array from dictionary or list\n * @returns {Array | undefined}\n */\n return this.safeListN(dictionaryOrList, [key1, key2], defaultValue);\n }\n safeList(dictionaryOrList, key, defaultValue = undefined) {\n /**\n * @ignore\n * @method\n * @description safely extract an Array from dictionary or list\n * @returns {Array | undefined}\n */\n return this.safeListN(dictionaryOrList, [key], defaultValue);\n }\n handleDeltas(orderbook, deltas) {\n for (let i = 0; i < deltas.length; i++) {\n this.handleDelta(orderbook, deltas[i]);\n }\n }\n handleDelta(bookside, delta) {\n throw new ExchangeNotAllowedMethodError('handleDelta').exchange(this.id);\n }\n getCacheIndex(orderbook, deltas) {\n // return the first index of the cache that can be applied to the orderbook or -1 if not possible\n return -1;\n }\n findTimeframe(timeframe, timeframes = undefined) {\n if (timeframes === undefined) {\n timeframes = this.timeframes;\n }\n const keys = Object.keys(timeframes);\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n if (timeframes[key] === timeframe) {\n return key;\n }\n }\n return undefined;\n }\n checkProxyUrlSettings(url = undefined, method = undefined, headers = undefined, body = undefined) {\n const usedProxies = [];\n let proxyUrl = undefined;\n if (this.proxyUrl !== undefined) {\n usedProxies.push('proxyUrl');\n proxyUrl = this.proxyUrl;\n }\n if (this.proxy_url !== undefined) {\n usedProxies.push('proxy_url');\n proxyUrl = this.proxy_url;\n }\n if (this.proxyUrlCallback !== undefined) {\n usedProxies.push('proxyUrlCallback');\n proxyUrl = this.proxyUrlCallback(url, method, headers, body);\n }\n if (this.proxy_url_callback !== undefined) {\n usedProxies.push('proxy_url_callback');\n proxyUrl = this.proxy_url_callback(url, method, headers, body);\n }\n // backwards-compatibility\n if (this.proxy !== undefined) {\n usedProxies.push('proxy');\n if (typeof this.proxy === 'function') {\n proxyUrl = this.proxy(url, method, headers, body);\n }\n else {\n proxyUrl = this.proxy;\n }\n }\n const length = usedProxies.length;\n if (length > 1) {\n const joinedProxyNames = usedProxies.join(',');\n throw new InternalError()\n .addMessage('You have multiple conflicting proxy settings (' + joinedProxyNames + '), please use only one from : proxyUrl, proxy_url, proxyUrlCallback, proxy_url_callback')\n .exchange(this.id);\n }\n return proxyUrl;\n }\n checkProxySettings(url = undefined, method = undefined, headers = undefined, body = undefined) {\n const usedProxies = [];\n let httpProxy = undefined;\n let httpsProxy = undefined;\n let socksProxy = undefined;\n // httpProxy\n if (this.valueIsDefined(this.httpProxy)) {\n usedProxies.push('httpProxy');\n httpProxy = this.httpProxy;\n }\n if (this.valueIsDefined(this.http_proxy)) {\n usedProxies.push('http_proxy');\n httpProxy = this.http_proxy;\n }\n if (this.httpProxyCallback !== undefined) {\n usedProxies.push('httpProxyCallback');\n httpProxy = this.httpProxyCallback(url, method, headers, body);\n }\n if (this.http_proxy_callback !== undefined) {\n usedProxies.push('http_proxy_callback');\n httpProxy = this.http_proxy_callback(url, method, headers, body);\n }\n // httpsProxy\n if (this.valueIsDefined(this.httpsProxy)) {\n usedProxies.push('httpsProxy');\n httpsProxy = this.httpsProxy;\n }\n if (this.valueIsDefined(this.https_proxy)) {\n usedProxies.push('https_proxy');\n httpsProxy = this.https_proxy;\n }\n if (this.httpsProxyCallback !== undefined) {\n usedProxies.push('httpsProxyCallback');\n httpsProxy = this.httpsProxyCallback(url, method, headers, body);\n }\n if (this.https_proxy_callback !== undefined) {\n usedProxies.push('https_proxy_callback');\n httpsProxy = this.https_proxy_callback(url, method, headers, body);\n }\n // socksProxy\n if (this.valueIsDefined(this.socksProxy)) {\n usedProxies.push('socksProxy');\n socksProxy = this.socksProxy;\n }\n if (this.valueIsDefined(this.socks_proxy)) {\n usedProxies.push('socks_proxy');\n socksProxy = this.socks_proxy;\n }\n if (this.socksProxyCallback !== undefined) {\n usedProxies.push('socksProxyCallback');\n socksProxy = this.socksProxyCallback(url, method, headers, body);\n }\n if (this.socks_proxy_callback !== undefined) {\n usedProxies.push('socks_proxy_callback');\n socksProxy = this.socks_proxy_callback(url, method, headers, body);\n }\n // check\n const length = usedProxies.length;\n if (length > 1) {\n const joinedProxyNames = usedProxies.join(',');\n throw new InternalError()\n .addMessage('You have multiple conflicting proxy settings (' + joinedProxyNames + '), please use only one from: httpProxy, httpsProxy, httpProxyCallback, httpsProxyCallback, socksProxy, socksProxyCallback')\n .exchange(this.id);\n }\n return [httpProxy, httpsProxy, socksProxy];\n }\n checkConflictingProxies(proxyAgentSet, proxyUrlSet) {\n if (proxyAgentSet && proxyUrlSet) {\n throw new InternalError()\n .addMessage('You have multiple conflicting proxy settings, please use only one from : proxyUrl, httpProxy, httpsProxy, socksProxy')\n .exchange(this.id);\n }\n }\n filterByLimit(array, limit = undefined, key = 'timestamp', fromStart = false) {\n if (this.valueIsDefined(limit)) {\n const arrayLength = array.length;\n if (arrayLength > 0) {\n let ascending = true;\n if ((key in array[0])) {\n const first = array[0][key];\n const last = array[arrayLength - 1][key];\n if (first !== undefined && last !== undefined) {\n ascending = first <= last; // true if array is sorted in ascending order based on 'timestamp'\n }\n }\n if (fromStart) {\n if (limit > arrayLength) {\n limit = arrayLength;\n }\n array = ascending ? this.arraySlice(array, 0, limit) : this.arraySlice(array, -limit);\n }\n else {\n array = ascending ? this.arraySlice(array, -limit) : this.arraySlice(array, 0, limit);\n }\n }\n }\n return array;\n }\n filterBySinceLimit(array, since = undefined, limit = undefined, key = 'timestamp', tail = false) {\n const sinceIsDefined = this.valueIsDefined(since);\n const parsedArray = this.toArray(array);\n let result = parsedArray;\n if (sinceIsDefined) {\n result = [];\n for (let i = 0; i < parsedArray.length; i++) {\n const entry = parsedArray[i];\n const value = this.safeValue(entry, key);\n if (value && (value >= since)) {\n result.push(entry);\n }\n }\n }\n if (tail && limit !== undefined) {\n return this.arraySlice(result, -limit);\n }\n // if the user provided a 'since' argument\n // we want to limit the result starting from the 'since'\n const shouldFilterFromStart = !tail && sinceIsDefined;\n return this.filterByLimit(result, limit, key, shouldFilterFromStart);\n }\n filterByValueSinceLimit(array, field, value = undefined, since = undefined, limit = undefined, key = 'timestamp', tail = false) {\n const valueIsDefined = this.valueIsDefined(value);\n const sinceIsDefined = this.valueIsDefined(since);\n const parsedArray = this.toArray(array);\n let result = parsedArray;\n // single-pass filter for both symbol and since\n if (valueIsDefined || sinceIsDefined) {\n result = [];\n for (let i = 0; i < parsedArray.length; i++) {\n const entry = parsedArray[i];\n const entryFiledEqualValue = entry[field] === value;\n const firstCondition = valueIsDefined ? entryFiledEqualValue : true;\n const entryKeyValue = this.safeValue(entry, key);\n const entryKeyGESince = (entryKeyValue) && since && (entryKeyValue >= since);\n const secondCondition = sinceIsDefined ? entryKeyGESince : true;\n if (firstCondition && secondCondition) {\n result.push(entry);\n }\n }\n }\n if (tail && limit !== undefined) {\n return this.arraySlice(result, -limit);\n }\n return this.filterByLimit(result, limit, key, sinceIsDefined);\n }\n setSandboxMode(enabled) {\n if (enabled) {\n if ('test' in this.urls) {\n if (typeof this.urls['api'] === 'string') {\n this.urls['apiBackup'] = this.urls['api'];\n this.urls['api'] = this.urls['test'];\n }\n else {\n this.urls['apiBackup'] = this.clone(this.urls['api']);\n this.urls['api'] = this.clone(this.urls['test']);\n }\n }\n else {\n throw new ExchangeError().addMessage('does not have a sandbox URL').exchange(this.id);\n }\n }\n else if ('apiBackup' in this.urls) {\n if (typeof this.urls['api'] === 'string') {\n this.urls['api'] = this.urls['apiBackup'];\n }\n else {\n this.urls['api'] = this.clone(this.urls['apiBackup']);\n }\n const newUrls = this.omit(this.urls, 'apiBackup');\n this.urls = newUrls;\n }\n }\n async sign(path, api = 'public', method = 'GET', params = {}, headers = undefined, body = undefined) {\n return {};\n }\n async fetchAccounts(params = {}) {\n throw new ExchangeNotAllowedMethodError('fetchAccounts').exchange(this.id);\n }\n async fetchTrades(symbol, since = undefined, limit = undefined, params = {}) {\n throw new ExchangeNotAllowedMethodError('fetchTrades').exchange(this.id);\n }\n async fetchDepositAddresses(codes = undefined, params = {}) {\n throw new ExchangeNotAllowedMethodError('fetchDepositAddresses').exchange(this.id);\n }\n async fetchOrderBook(symbol, limit = undefined, params = {}) {\n throw new ExchangeNotAllowedMethodError('fetchOrderBook').exchange(this.id);\n }\n async fetchRestOrderBookSafe(symbol, limit = undefined, params = {}) {\n const fetchSnapshotMaxRetries = this.handleOption('watchOrderBook', 'maxRetries', 3);\n for (let i = 0; i < fetchSnapshotMaxRetries; i++) {\n try {\n const orderBook = await this.fetchOrderBook(symbol, limit, params);\n return orderBook;\n }\n catch (e) {\n if ((i + 1) === fetchSnapshotMaxRetries) {\n throw e;\n }\n }\n }\n return undefined;\n }\n async fetchTime(params = {}) {\n throw new ExchangeNotAllowedMethodError('fetchTime').exchange(this.id);\n }\n async fetchTradingLimits(symbols = undefined, params = {}) {\n throw new ExchangeNotAllowedMethodError('fetchTradingLimits').exchange(this.id);\n }\n parseMarket(market) {\n throw new ExchangeNotAllowedMethodError('parseMarket').exchange(this.id);\n }\n parseMarkets(markets) {\n const result = [];\n for (let i = 0; i < markets.length; i++) {\n result.push(this.parseMarket(markets[i]));\n }\n return result;\n }\n parseTicker(ticker, market = undefined) {\n throw new ExchangeNotAllowedMethodError('parseTicker').exchange(this.id);\n }\n parseDepositAddress(depositAddress, currency = undefined) {\n throw new ExchangeNotAllowedMethodError('parseDepositAddress').exchange(this.id);\n }\n parseTrade(trade, market = undefined) {\n throw new ExchangeNotAllowedMethodError('parseTrade').exchange(this.id);\n }\n parseTransaction(transaction, currency = undefined) {\n throw new ExchangeNotAllowedMethodError('parseTransaction').exchange(this.id);\n }\n parseTransfer(transfer, currency = undefined) {\n throw new ExchangeNotAllowedMethodError('parseTransfer').exchange(this.id);\n }\n parseAccount(account) {\n throw new ExchangeNotAllowedMethodError('parseAccount()').exchange(this.id);\n }\n parseLedgerEntry(item, currency = undefined) {\n throw new ExchangeNotAllowedMethodError('parseLedgerEntry').exchange(this.id);\n }\n parseOrder(order, market = undefined) {\n throw new ExchangeNotAllowedMethodError('parseOrder').exchange(this.id);\n }\n parsePosition(position, market = undefined) {\n throw new ExchangeNotAllowedMethodError('parsePosition').exchange(this.id);\n }\n async transfer(code, amount, fromAccount, toAccount, params = {}) {\n throw new ExchangeNotAllowedMethodError('transfer').exchange(this.id);\n }\n async withdraw(code, amount, address, tag = undefined, params = {}) {\n throw new ExchangeNotAllowedMethodError('withdraw').exchange(this.id);\n }\n async createDepositAddress(code, params = {}) {\n throw new ExchangeNotAllowedMethodError('createDepositAddress').exchange(this.id);\n }\n async fetchDepositAddressesByNetwork(code, params = {}) {\n throw new ExchangeNotAllowedMethodError('fetchDepositAddressesByNetwork').exchange(this.id);\n }\n parseToInt(number) {\n // Solve Common parseInt misuse ex: parseInt ((since / 1000).toString ())\n // using a number as parameter which is not valid in ts\n const stringifiedNumber = number.toString();\n const convertedNumber = parseFloat(stringifiedNumber);\n return parseInt(convertedNumber);\n }\n parseToNumeric(number) {\n const stringVersion = this.numberToString(number); // this will convert 1.0 and 1 to \"1\" and 1.1 to \"1.1\"\n // keep this in mind:\n // in JS: 1 == 1.0 is true; 1 === 1.0 is true\n // in Python: 1 == 1.0 is true\n // in PHP 1 == 1.0 is true, but 1 === 1.0 is false\n if (stringVersion.indexOf('.') >= 0) {\n return parseFloat(stringVersion);\n }\n return parseInt(stringVersion);\n }\n isRoundNumber(value) {\n // this method is similar to isInteger, but this is more loyal and does not check for types.\n // i.e. isRoundNumber(1.000) returns true, while isInteger(1.000) returns false\n const res = this.parseToNumeric((value % 1));\n return res === 0;\n }\n afterConstruct() {\n this.createNetworksByIdObject();\n }\n createNetworksByIdObject() {\n // automatically generate network-id-to-code mappings\n const networkIdsToCodesGenerated = this.invertFlatStringDictionary(this.safeValue(this.options, 'networks', {})); // invert defined networks dictionary\n this.options['networksById'] = this.extend(networkIdsToCodesGenerated, this.safeValue(this.options, 'networksById', {})); // support manually overriden \"networksById\" dictionary too\n }\n getDefaultOptions() {\n return {\n 'networkCodeReplacements': {\n 'ETH': { 'ERC20': 'ETH' },\n 'TRX': { 'TRC20': 'TRX' },\n 'CRO': { 'CRC20': 'CRONOS' },\n },\n };\n }\n safeLedgerEntry(entry, currency = undefined) {\n currency = this.safeCurrency(undefined, currency);\n let direction = this.safeString(entry, 'direction');\n let before = this.safeString(entry, 'before');\n let after = this.safeString(entry, 'after');\n const amount = this.safeString(entry, 'amount');\n if (amount !== undefined) {\n if (before === undefined && after !== undefined) {\n before = Precise.stringSub(after, amount);\n }\n else if (before !== undefined && after === undefined) {\n after = Precise.stringAdd(before, amount);\n }\n }\n if (before !== undefined && after !== undefined) {\n if (direction === undefined) {\n if (Precise.stringGt(before, after)) {\n direction = 'out';\n }\n if (Precise.stringGt(after, before)) {\n direction = 'in';\n }\n }\n }\n const fee = this.safeValue(entry, 'fee');\n if (fee !== undefined) {\n fee['cost'] = this.safeNumber(fee, 'cost');\n }\n const timestamp = this.safeInteger(entry, 'timestamp');\n const info = this.safeDict(entry, 'info', {});\n return {\n 'id': this.safeString(entry, 'id'),\n 'timestamp': timestamp,\n 'datetime': this.iso8601(timestamp),\n 'direction': direction,\n 'account': this.safeString(entry, 'account'),\n 'referenceId': this.safeString(entry, 'referenceId'),\n 'referenceAccount': this.safeString(entry, 'referenceAccount'),\n 'type': this.safeString(entry, 'type'),\n 'currency': currency['code'],\n 'amount': this.parseNumber(amount),\n 'before': this.parseNumber(before),\n 'after': this.parseNumber(after),\n 'status': this.safeString(entry, 'status'),\n 'fee': fee,\n 'info': info,\n };\n }\n safeCurrencyStructure(currency) {\n return this.extend({\n 'info': undefined,\n 'id': undefined,\n 'numericId': undefined,\n 'code': undefined,\n 'precision': undefined,\n 'type': undefined,\n 'name': undefined,\n 'active': undefined,\n 'deposit': undefined,\n 'withdraw': undefined,\n 'fee': undefined,\n 'fees': {},\n 'networks': {},\n 'limits': {\n 'deposit': {\n 'min': undefined,\n 'max': undefined,\n },\n 'withdraw': {\n 'min': undefined,\n 'max': undefined,\n },\n },\n }, currency);\n }\n safeMarketStructure(market = undefined) {\n const cleanStructure = {\n 'id': undefined,\n 'lowercaseId': undefined,\n 'symbol': undefined,\n 'base': undefined,\n 'quote': undefined,\n 'settle': undefined,\n 'baseId': undefined,\n 'quoteId': undefined,\n 'settleId': undefined,\n 'type': undefined,\n 'spot': undefined,\n 'margin': undefined,\n 'swap': undefined,\n 'future': undefined,\n 'option': undefined,\n 'index': undefined,\n 'active': undefined,\n 'contract': undefined,\n 'linear': undefined,\n 'inverse': undefined,\n 'subType': undefined,\n 'taker': undefined,\n 'maker': undefined,\n 'contractSize': undefined,\n 'expiry': undefined,\n 'expiryDatetime': undefined,\n 'strike': undefined,\n 'optionType': undefined,\n 'precision': {\n 'amount': undefined,\n 'price': undefined,\n 'cost': undefined,\n 'base': undefined,\n 'quote': undefined,\n },\n 'limits': {\n 'leverage': {\n 'min': undefined,\n 'max': undefined,\n },\n 'amount': {\n 'min': undefined,\n 'max': undefined,\n },\n 'price': {\n 'min': undefined,\n 'max': undefined,\n },\n 'cost': {\n 'min': undefined,\n 'max': undefined,\n },\n },\n 'created': undefined,\n 'info': undefined,\n };\n if (market !== undefined) {\n const result = this.extend(cleanStructure, market);\n // set undefined swap/future/etc\n if (result['spot']) {\n if (result['contract'] === undefined) {\n result['contract'] = false;\n }\n if (result['swap'] === undefined) {\n result['swap'] = false;\n }\n if (result['future'] === undefined) {\n result['future'] = false;\n }\n if (result['option'] === undefined) {\n result['option'] = false;\n }\n if (result['index'] === undefined) {\n result['index'] = false;\n }\n }\n return result;\n }\n return cleanStructure;\n }\n async setMarkets(markets, currencies = undefined) {\n const values = [];\n this.markets_by_id = {};\n // handle marketId conflicts\n // we insert spot markets first\n const marketValues = this.sortBy(this.toArray(markets), 'spot', true, true);\n for (let i = 0; i < marketValues.length; i++) {\n const value = marketValues[i];\n if (value['id'] in this.markets_by_id) {\n this.markets_by_id[value['id']].push(value);\n }\n else {\n this.markets_by_id[value['id']] = [value];\n }\n const market = this.deepExtend(this.safeMarketStructure(), {\n 'precision': this.precision,\n 'limits': this.limits,\n }, this.fees['trading'], value);\n if (market['linear']) {\n market['subType'] = 'linear';\n }\n else if (market['inverse']) {\n market['subType'] = 'inverse';\n }\n else {\n market['subType'] = undefined;\n }\n values.push(market);\n }\n this.markets = this.indexBy(values, 'symbol');\n const marketsSortedBySymbol = this.keysort(this.markets);\n const marketsSortedById = this.keysort(this.markets_by_id);\n this.symbols = Object.keys(marketsSortedBySymbol);\n this.ids = Object.keys(marketsSortedById);\n if (currencies !== undefined) {\n // currencies is always undefined when called in constructor but not when called from loadMarkets\n this.currencies = this.deepExtend(this.currencies, currencies);\n }\n else {\n let baseCurrencies = [];\n let quoteCurrencies = [];\n for (let i = 0; i < values.length; i++) {\n const market = values[i];\n const defaultCurrencyPrecision = (this.precisionMode === DECIMAL_PLACES) ? 8 : this.parseNumber('1e-8');\n const marketPrecision = this.safeDict(market, 'precision', {});\n if ('base' in market) {\n const currency = this.safeCurrencyStructure({\n 'id': this.safeString2(market, 'baseId', 'base'),\n 'numericId': this.safeInteger(market, 'baseNumericId'),\n 'code': this.safeString(market, 'base'),\n 'precision': this.safeValue2(marketPrecision, 'base', 'amount', defaultCurrencyPrecision),\n });\n baseCurrencies.push(currency);\n }\n if ('quote' in market) {\n const currency = this.safeCurrencyStructure({\n 'id': this.safeString2(market, 'quoteId', 'quote'),\n 'numericId': this.safeInteger(market, 'quoteNumericId'),\n 'code': this.safeString(market, 'quote'),\n 'precision': this.safeValue2(marketPrecision, 'quote', 'price', defaultCurrencyPrecision),\n });\n quoteCurrencies.push(currency);\n }\n }\n baseCurrencies = this.sortBy(baseCurrencies, 'code', false, '');\n quoteCurrencies = this.sortBy(quoteCurrencies, 'code', false, '');\n this.baseCurrencies = this.indexBy(baseCurrencies, 'code');\n this.quoteCurrencies = this.indexBy(quoteCurrencies, 'code');\n const allCurrencies = this.arrayConcat(baseCurrencies, quoteCurrencies);\n const groupedCurrencies = this.groupBy(allCurrencies, 'code');\n const codes = Object.keys(groupedCurrencies);\n const resultingCurrencies = [];\n for (let i = 0; i < codes.length; i++) {\n const code = codes[i];\n const groupedCurrenciesCode = this.safeList(groupedCurrencies, code, []);\n let highestPrecisionCurrency = this.safeValue(groupedCurrenciesCode, 0);\n for (let j = 1; j < groupedCurrenciesCode.length; j++) {\n const currentCurrency = groupedCurrenciesCode[j];\n if (this.precisionMode === TICK_SIZE) {\n highestPrecisionCurrency = (currentCurrency['precision'] < highestPrecisionCurrency['precision']) ? currentCurrency : highestPrecisionCurrency;\n }\n else {\n highestPrecisionCurrency = (currentCurrency['precision'] > highestPrecisionCurrency['precision']) ? currentCurrency : highestPrecisionCurrency;\n }\n }\n resultingCurrencies.push(highestPrecisionCurrency);\n }\n const sortedCurrencies = this.sortBy(resultingCurrencies, 'code');\n this.currencies = this.deepExtend(this.currencies, this.indexBy(sortedCurrencies, 'code'));\n }\n this.currencies_by_id = this.indexBy(this.currencies, 'id');\n const currenciesSortedByCode = this.keysort(this.currencies);\n this.codes = Object.keys(currenciesSortedByCode);\n // Persist the data in the sdk cache\n await Promise.all([\n this.cache.set({\n 'key': marketsByIdCacheIdentifier(this.id),\n 'data': this.markets_by_id,\n 'ttl': PUBLIC_DATA_CACHE_TTL,\n 'clone': false,\n }),\n this.cache.set({\n 'key': marketsCacheIdentifier(this.id),\n 'data': this.markets,\n 'ttl': PUBLIC_DATA_CACHE_TTL,\n 'clone': false,\n }),\n this.cache.set({\n 'key': currenciesCacheIdentifier(this),\n 'data': this.currencies,\n 'ttl': currenciesCacheTTL(this),\n 'clone': false,\n }),\n this.cache.set({\n 'key': currenciesByIdCacheIdentifier(this),\n 'data': this.currencies_by_id,\n 'ttl': currenciesCacheTTL(this),\n 'clone': false,\n }),\n this.cache.set({\n 'key': symbolsCacheIdentifier(this.id),\n 'data': this.symbols,\n 'ttl': PUBLIC_DATA_CACHE_TTL,\n 'clone': false,\n }),\n this.cache.set({\n 'key': idsCacheIdentifier(this.id),\n 'data': this.ids,\n 'ttl': PUBLIC_DATA_CACHE_TTL,\n 'clone': false,\n }),\n ]);\n return this.markets;\n }\n safeBalance(balance) {\n const balances = this.omit(balance, ['info', 'timestamp', 'datetime', 'free', 'used', 'total']);\n const codes = Object.keys(balances);\n const filteredBalances = {\n 'info': balance?.['info'],\n 'timestamp': balance?.['timestamp'],\n 'datetime': balance?.['datetime'],\n 'free': {},\n 'used': {},\n 'total': {},\n 'dept': {},\n };\n for (let i = 0; i < codes.length; i++) {\n const code = codes[i];\n let total = this.safeString(balance[code], 'total');\n let free = this.safeString(balance[code], 'free');\n let used = this.safeString(balance[code], 'used');\n const debt = this.safeString(balance[code], 'debt');\n if ((total === undefined) && (free !== undefined) && (used !== undefined)) {\n total = Precise.stringAdd(free, used);\n }\n if ((free === undefined) && (total !== undefined) && (used !== undefined)) {\n free = Precise.stringSub(total, used);\n }\n if ((used === undefined) && (total !== undefined) && (free !== undefined)) {\n used = Precise.stringSub(total, free);\n }\n const parsedFree = this.parseNumber(free);\n const parsedUsed = this.parseNumber(used);\n const parsedTotal = this.parseNumber(total);\n if (parsedTotal === undefined || parsedFree === undefined || parsedUsed === undefined || parsedTotal === 0) {\n continue;\n }\n filteredBalances[code] = {\n 'free': parsedFree,\n 'used': parsedUsed,\n 'total': parsedTotal,\n };\n filteredBalances['free'][code] = parsedFree;\n filteredBalances['used'][code] = parsedUsed;\n filteredBalances['total'][code] = parsedTotal;\n if (debt !== undefined) {\n const parsedDebt = this.parseNumber(debt);\n filteredBalances[code]['debt'] = parsedDebt;\n filteredBalances['dept'][code] = parsedDebt;\n }\n }\n const debtBalanceArray = Object.keys(filteredBalances['dept']);\n const length = debtBalanceArray.length;\n if (length === 0) {\n delete filteredBalances['dept'];\n }\n return filteredBalances;\n }\n safeOrder(order, market = undefined) {\n // parses numbers as strings\n // * it is important pass the trades as unparsed rawTrades\n let amount = this.omitZero(this.safeString(order, 'amount'));\n let remaining = this.safeString(order, 'remaining');\n let filled = this.safeString(order, 'filled');\n let cost = this.safeString(order, 'cost');\n let average = this.omitZero(this.safeString(order, 'average'));\n let price = this.omitZero(this.safeString(order, 'price'));\n let lastTradeTimeTimestamp = this.safeInteger(order, 'lastTradeTimestamp');\n let symbol = this.safeString(order, 'symbol');\n let side = this.safeString(order, 'side');\n const status = this.safeString(order, 'status');\n const parseFilled = (filled === undefined);\n const parseCost = (cost === undefined);\n const parseLastTradeTimeTimestamp = (lastTradeTimeTimestamp === undefined);\n const fee = this.safeValue(order, 'fee');\n const parseFee = (fee === undefined);\n const parseFees = this.safeValue(order, 'fees') === undefined;\n const parseSymbol = symbol === undefined;\n const parseSide = side === undefined;\n const shouldParseFees = parseFee || parseFees;\n const fees = this.safeList(order, 'fees', []);\n let trades = [];\n if (parseFilled || parseCost || shouldParseFees) {\n const rawTrades = this.safeValue(order, 'trades', trades);\n const oldNumber = this.number;\n // we parse trades as strings here!\n this.number = String;\n const firstTrade = this.safeValue(rawTrades, 0);\n // parse trades if they haven't already been parsed\n const tradesAreParsed = ((firstTrade !== undefined) && ('info' in firstTrade) && ('id' in firstTrade));\n if (!tradesAreParsed) {\n trades = this.parseTrades(rawTrades, market);\n }\n else {\n trades = rawTrades;\n }\n this.number = oldNumber;\n let tradesLength = 0;\n const isArray = Array.isArray(trades);\n if (isArray) {\n tradesLength = trades.length;\n }\n if (isArray && (tradesLength > 0)) {\n // move properties that are defined in trades up into the order\n if (order['symbol'] === undefined) {\n order['symbol'] = trades[0]['symbol'];\n }\n if (order['side'] === undefined) {\n order['side'] = trades[0]['side'];\n }\n if (order['type'] === undefined) {\n order['type'] = trades[0]['type'];\n }\n if (order['id'] === undefined) {\n order['id'] = trades[0]['order'];\n }\n if (parseFilled) {\n filled = '0';\n }\n if (parseCost) {\n cost = '0';\n }\n for (let i = 0; i < trades.length; i++) {\n const trade = trades[i];\n const tradeAmount = this.safeString(trade, 'amount');\n if (parseFilled && (tradeAmount !== undefined)) {\n filled = Precise.stringAdd(filled, tradeAmount);\n }\n const tradeCost = this.safeString(trade, 'cost');\n if (parseCost && (tradeCost !== undefined)) {\n cost = Precise.stringAdd(cost, tradeCost);\n }\n if (parseSymbol) {\n symbol = this.safeString(trade, 'symbol');\n }\n if (parseSide) {\n side = this.safeString(trade, 'side');\n }\n const tradeTimestamp = this.safeValue(trade, 'timestamp');\n if (parseLastTradeTimeTimestamp && (tradeTimestamp !== undefined)) {\n if (lastTradeTimeTimestamp === undefined) {\n lastTradeTimeTimestamp = tradeTimestamp;\n }\n else {\n lastTradeTimeTimestamp = Math.max(lastTradeTimeTimestamp, tradeTimestamp);\n }\n }\n if (shouldParseFees) {\n const tradeFees = this.safeValue(trade, 'fees');\n if (tradeFees !== undefined) {\n for (let j = 0; j < tradeFees.length; j++) {\n const tradeFee = tradeFees[j];\n fees.push(this.extend({}, tradeFee));\n }\n }\n else {\n const tradeFee = this.safeValue(trade, 'fee');\n if (tradeFee !== undefined) {\n fees.push(this.extend({}, tradeFee));\n }\n }\n }\n }\n }\n }\n if (shouldParseFees) {\n const reducedFees = this.reduceFees ? this.reduceFeesByCurrency(fees) : fees;\n const reducedLength = reducedFees.length;\n for (let i = 0; i < reducedLength; i++) {\n reducedFees[i]['cost'] = this.safeNumber(reducedFees[i], 'cost');\n if ('rate' in reducedFees[i]) {\n reducedFees[i]['rate'] = this.safeNumber(reducedFees[i], 'rate');\n }\n }\n if (!parseFee && (reducedLength === 0)) {\n // copy fee to avoid modification by reference\n const feeCopy = this.deepExtend(fee);\n feeCopy['cost'] = this.safeNumber(feeCopy, 'cost');\n if ('rate' in feeCopy) {\n feeCopy['rate'] = this.safeNumber(feeCopy, 'rate');\n }\n reducedFees.push(feeCopy);\n }\n order['fees'] = reducedFees;\n if (parseFee && (reducedLength === 1)) {\n order['fee'] = reducedFees[0];\n }\n }\n if (amount === undefined) {\n // ensure amount = filled + remaining\n if (filled !== undefined && remaining !== undefined) {\n amount = Precise.stringAdd(filled, remaining);\n }\n else if (status === 'closed') {\n amount = filled;\n }\n }\n if (filled === undefined) {\n if (amount !== undefined && remaining !== undefined) {\n filled = Precise.stringSub(amount, remaining);\n }\n else if (status === 'closed' && amount !== undefined) {\n filled = amount;\n }\n }\n if (remaining === undefined) {\n if (amount !== undefined && filled !== undefined) {\n remaining = Precise.stringSub(amount, filled);\n }\n else if (status === 'closed') {\n remaining = '0';\n }\n }\n // ensure that the average field is calculated correctly\n const inverse = this.safeBool(market, 'inverse', false);\n const contractSize = this.numberToString(this.safeValue(market, 'contractSize', 1));\n // inverse\n // price = filled * contract size / cost\n //\n // linear\n // price = cost / (filled * contract size)\n if (average === undefined) {\n if ((filled !== undefined) && (cost !== undefined) && Precise.stringGt(filled, '0')) {\n const filledTimesContractSize = Precise.stringMul(filled, contractSize);\n if (inverse) {\n average = Precise.stringDiv(filledTimesContractSize, cost);\n }\n else {\n average = Precise.stringDiv(cost, filledTimesContractSize);\n }\n }\n }\n // similarly\n // inverse\n // cost = filled * contract size / price\n //\n // linear\n // cost = filled * contract size * price\n const costPriceExists = (average !== undefined) || (price !== undefined);\n if (parseCost && (filled !== undefined) && costPriceExists) {\n let multiplyPrice = undefined;\n if (average === undefined) {\n multiplyPrice = price;\n }\n else {\n multiplyPrice = average;\n }\n // contract trading\n const filledTimesContractSize = Precise.stringMul(filled, contractSize);\n if (inverse) {\n cost = Precise.stringDiv(filledTimesContractSize, multiplyPrice);\n }\n else {\n cost = Precise.stringMul(filledTimesContractSize, multiplyPrice);\n }\n }\n // support for market orders\n const orderType = this.safeValue(order, 'type');\n const emptyPrice = (price === undefined) || Precise.stringEquals(price, '0');\n if (emptyPrice && (orderType === 'market')) {\n price = average;\n }\n // we have trades with string values at this point so we will mutate them\n for (let i = 0; i < trades.length; i++) {\n const entry = trades[i];\n entry['amount'] = this.safeNumber(entry, 'amount');\n entry['price'] = this.safeNumber(entry, 'price');\n entry['cost'] = this.safeNumber(entry, 'cost');\n const tradeFee = this.safeDict(entry, 'fee', {});\n tradeFee['cost'] = this.safeNumber(tradeFee, 'cost');\n if ('rate' in tradeFee) {\n tradeFee['rate'] = this.safeNumber(tradeFee, 'rate');\n }\n const entryFees = this.safeList(entry, 'fees', []);\n for (let j = 0; j < entryFees.length; j++) {\n entryFees[j]['cost'] = this.safeNumber(entryFees[j], 'cost');\n }\n entry['fees'] = entryFees;\n entry['fee'] = tradeFee;\n }\n let timeInForce = this.safeString(order, 'timeInForce');\n let postOnly = this.safeValue(order, 'postOnly');\n // timeInForceHandling\n if (timeInForce === undefined) {\n if (this.safeString(order, 'type') === 'market') {\n timeInForce = 'IOC';\n }\n // allow postOnly override\n if (postOnly) {\n timeInForce = 'PO';\n }\n }\n else if (postOnly === undefined) {\n // timeInForce is not undefined here\n postOnly = timeInForce === 'PO';\n }\n const timestamp = this.safeInteger(order, 'timestamp');\n const lastUpdateTimestamp = this.safeInteger(order, 'lastUpdateTimestamp');\n let datetime = this.safeString(order, 'datetime');\n if (datetime === undefined) {\n datetime = this.iso8601(timestamp);\n }\n const triggerPrice = this.parseNumber(this.safeString2(order, 'triggerPrice', 'stopPrice'));\n const takeProfitPrice = this.parseNumber(this.safeString(order, 'takeProfitPrice'));\n const stopLossPrice = this.parseNumber(this.safeString(order, 'stopLossPrice'));\n return this.extend(order, {\n 'id': this.safeString(order, 'id'),\n 'clientOrderId': this.safeString(order, 'clientOrderId'),\n 'timestamp': timestamp,\n 'datetime': datetime,\n 'symbol': symbol,\n 'type': this.safeString(order, 'type'),\n 'side': side,\n 'lastTradeTimestamp': lastTradeTimeTimestamp,\n 'lastUpdateTimestamp': lastUpdateTimestamp,\n 'price': this.parseNumber(price),\n 'amount': this.parseNumber(amount),\n 'cost': this.parseNumber(cost),\n 'average': this.parseNumber(average),\n 'filled': this.parseNumber(filled),\n 'remaining': this.parseNumber(remaining),\n 'timeInForce': timeInForce,\n 'postOnly': postOnly,\n 'trades': trades,\n 'reduceOnly': this.safeValue(order, 'reduceOnly'),\n 'stopPrice': triggerPrice,\n 'triggerPrice': triggerPrice,\n 'takeProfitPrice': takeProfitPrice,\n 'stopLossPrice': stopLossPrice,\n 'status': status,\n 'fee': this.safeValue(order, 'fee'),\n });\n }\n parseOrders(orders, market = undefined, since = undefined, limit = undefined, params = {}) {\n //\n // the value of orders is either a dict or a list\n //\n // dict\n //\n // {\n // 'id1': { ... },\n // 'id2': { ... },\n // 'id3': { ... },\n // ...\n // }\n //\n // list\n //\n // [\n // { 'id': 'id1', ... },\n // { 'id': 'id2', ... },\n // { 'id': 'id3', ... },\n // ...\n // ]\n //\n let results = [];\n if (Array.isArray(orders)) {\n for (let i = 0; i < orders.length; i++) {\n const order = this.extend(this.parseOrder(orders[i], market), params);\n results.push(order);\n }\n }\n else {\n const ids = Object.keys(orders);\n for (let i = 0; i < ids.length; i++) {\n const id = ids[i];\n const order = this.extend(this.parseOrder(this.extend({ 'id': id }, orders[id]), market), params);\n results.push(order);\n }\n }\n results = this.sortBy(results, 'timestamp');\n const symbol = (market !== undefined) ? market['symbol'] : undefined;\n return this.filterBySymbolSinceLimit(results, symbol, since, limit);\n }\n calculateFee(symbol, type, side, amount, price, takerOrMaker = 'taker', params = {}) {\n if (type === 'market' && takerOrMaker === 'maker') {\n throw new InvalidParamsError('calculateFee() - you have provided incompatible arguments - \"market\" type order can not be \"maker\". Change either the \"type\" or the \"takerOrMaker\" argument to calculate the fee.')\n .exchange(this.id);\n }\n const market = this.markets[symbol];\n const feeSide = this.safeString(market, 'feeSide', 'quote');\n let useQuote = undefined;\n if (feeSide === 'get') {\n // the fee is always in the currency you get\n useQuote = side === 'sell';\n }\n else if (feeSide === 'give') {\n // the fee is always in the currency you give\n useQuote = side === 'buy';\n }\n else {\n // the fee is always in feeSide currency\n useQuote = feeSide === 'quote';\n }\n let cost = this.numberToString(amount);\n let key = undefined;\n if (useQuote) {\n const priceString = this.numberToString(price);\n cost = Precise.stringMul(cost, priceString);\n key = 'quote';\n }\n else {\n key = 'base';\n }\n // for derivatives, the fee is in 'settle' currency\n if (!market['spot']) {\n key = 'settle';\n }\n // even if `takerOrMaker` argument was set to 'maker', for 'market' orders we should forcefully override it to 'taker'\n if (type === 'market') {\n takerOrMaker = 'taker';\n }\n const rate = this.safeString(market, takerOrMaker);\n cost = Precise.stringMul(cost, rate);\n return {\n 'type': takerOrMaker,\n 'currency': market[key],\n 'rate': this.parseNumber(rate),\n 'cost': this.parseNumber(cost),\n };\n }\n safeLiquidation(liquidation, market = undefined) {\n const contracts = this.safeString(liquidation, 'contracts');\n const contractSize = this.safeString(market, 'contractSize');\n const price = this.safeString(liquidation, 'price');\n let baseValue = this.safeString(liquidation, 'baseValue');\n let quoteValue = this.safeString(liquidation, 'quoteValue');\n if ((baseValue === undefined) && (contracts !== undefined) && (contractSize !== undefined) && (price !== undefined)) {\n baseValue = Precise.stringMul(contracts, contractSize);\n }\n if ((quoteValue === undefined) && (baseValue !== undefined) && (price !== undefined)) {\n quoteValue = Precise.stringMul(baseValue, price);\n }\n liquidation['contracts'] = this.parseNumber(contracts);\n liquidation['contractSize'] = this.parseNumber(contractSize);\n liquidation['price'] = this.parseNumber(price);\n liquidation['baseValue'] = this.parseNumber(baseValue);\n liquidation['quoteValue'] = this.parseNumber(quoteValue);\n return liquidation;\n }\n safeTrade(trade, market = undefined) {\n const amount = this.safeString(trade, 'amount');\n const price = this.safeString(trade, 'price');\n let cost = this.safeString(trade, 'cost');\n if (cost === undefined) {\n // contract trading\n const contractSize = this.safeString(market, 'contractSize');\n let multiplyPrice = price;\n if (contractSize !== undefined) {\n const inverse = this.safeBool(market, 'inverse', false);\n if (inverse) {\n multiplyPrice = Precise.stringDiv('1', price);\n }\n multiplyPrice = Precise.stringMul(multiplyPrice, contractSize);\n }\n cost = Precise.stringMul(multiplyPrice, amount);\n }\n const parseFee = this.safeValue(trade, 'fee') === undefined;\n const parseFees = this.safeValue(trade, 'fees') === undefined;\n const shouldParseFees = parseFee || parseFees;\n const fees = [];\n const fee = this.safeValue(trade, 'fee');\n if (shouldParseFees) {\n const reducedFees = this.reduceFees ? this.reduceFeesByCurrency(fees) : fees;\n const reducedLength = reducedFees.length;\n for (let i = 0; i < reducedLength; i++) {\n reducedFees[i]['cost'] = this.safeNumber(reducedFees[i], 'cost');\n if ('rate' in reducedFees[i]) {\n reducedFees[i]['rate'] = this.safeNumber(reducedFees[i], 'rate');\n }\n }\n if (!parseFee && (reducedLength === 0)) {\n // copy fee to avoid modification by reference\n const feeCopy = this.deepExtend(fee);\n feeCopy['cost'] = this.safeNumber(feeCopy, 'cost');\n if ('rate' in feeCopy) {\n feeCopy['rate'] = this.safeNumber(feeCopy, 'rate');\n }\n reducedFees.push(feeCopy);\n }\n if (parseFees) {\n trade['fees'] = reducedFees;\n }\n if (parseFee && (reducedLength === 1)) {\n trade['fee'] = reducedFees[0];\n }\n const tradeFee = this.safeValue(trade, 'fee');\n if (tradeFee !== undefined) {\n tradeFee['cost'] = this.safeNumber(tradeFee, 'cost');\n if ('rate' in tradeFee) {\n tradeFee['rate'] = this.safeNumber(tradeFee, 'rate');\n }\n trade['fee'] = tradeFee;\n }\n }\n trade['amount'] = this.parseNumber(amount);\n trade['price'] = this.parseNumber(price);\n trade['cost'] = this.parseNumber(cost);\n return trade;\n }\n invertFlatStringDictionary(dict) {\n const reversed = {};\n const keys = Object.keys(dict);\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n const value = dict[key];\n if (typeof value === 'string') {\n reversed[value] = key;\n }\n }\n return reversed;\n }\n reduceFeesByCurrency(fees) {\n //\n // this function takes a list of fee structures having the following format\n //\n // string = true\n //\n // [\n // { 'currency': 'BTC', 'cost': '0.1' },\n // { 'currency': 'BTC', 'cost': '0.2' },\n // { 'currency': 'BTC', 'cost': '0.2', 'rate': '0.00123' },\n // { 'currency': 'BTC', 'cost': '0.4', 'rate': '0.00123' },\n // { 'currency': 'BTC', 'cost': '0.5', 'rate': '0.00456' },\n // { 'currency': 'USDT', 'cost': '12.3456' },\n // ]\n //\n // string = false\n //\n // [\n // { 'currency': 'BTC', 'cost': 0.1 },\n // { 'currency': 'BTC', 'cost': 0.2 },\n // { 'currency': 'BTC', 'cost': 0.2, 'rate': 0.00123 },\n // { 'currency': 'BTC', 'cost': 0.4, 'rate': 0.00123 },\n // { 'currency': 'BTC', 'cost': 0.5, 'rate': 0.00456 },\n // { 'currency': 'USDT', 'cost': 12.3456 },\n // ]\n //\n // and returns a reduced fee list, where fees are summed per currency and rate (if any)\n //\n // string = true\n //\n // [\n // { 'currency': 'BTC', 'cost': '0.4' },\n // { 'currency': 'BTC', 'cost': '0.6', 'rate': '0.00123' },\n // { 'currency': 'BTC', 'cost': '0.5', 'rate': '0.00456' },\n // { 'currency': 'USDT', 'cost': '12.3456' },\n // ]\n //\n // string = false\n //\n // [\n // { 'currency': 'BTC', 'cost': 0.3 },\n // { 'currency': 'BTC', 'cost': 0.6, 'rate': 0.00123 },\n // { 'currency': 'BTC', 'cost': 0.5, 'rate': 0.00456 },\n // { 'currency': 'USDT', 'cost': 12.3456 },\n // ]\n //\n const reduced = {};\n for (let i = 0; i < fees.length; i++) {\n const fee = fees[i];\n const feeCurrencyCode = this.safeString(fee, 'currency');\n if (feeCurrencyCode !== undefined) {\n const rate = this.safeString(fee, 'rate');\n const cost = this.safeValue(fee, 'cost');\n if (Precise.stringEq(cost, '0')) {\n // omit zero cost fees\n continue;\n }\n if (!(feeCurrencyCode in reduced)) {\n reduced[feeCurrencyCode] = {};\n }\n const rateKey = (rate === undefined) ? '' : rate;\n if (rateKey in reduced[feeCurrencyCode]) {\n reduced[feeCurrencyCode][rateKey]['cost'] = Precise.stringAdd(reduced[feeCurrencyCode][rateKey]['cost'], cost);\n }\n else {\n reduced[feeCurrencyCode][rateKey] = {\n 'currency': feeCurrencyCode,\n 'cost': cost,\n };\n if (rate !== undefined) {\n reduced[feeCurrencyCode][rateKey]['rate'] = rate;\n }\n }\n }\n }\n let result = [];\n const feeValues = Object.values(reduced);\n for (let i = 0; i < feeValues.length; i++) {\n const reducedFeeValues = Object.values(feeValues[i]);\n result = this.arrayConcat(result, reducedFeeValues);\n }\n return result;\n }\n safeTicker(ticker, market = undefined) {\n let open = this.omitZero(this.safeString(ticker, 'open'));\n let close = this.omitZero(this.safeString(ticker, 'close'));\n let last = this.omitZero(this.safeString(ticker, 'last'));\n let change = this.omitZero(this.safeString(ticker, 'change'));\n let percentage = this.omitZero(this.safeString(ticker, 'percentage'));\n let average = this.omitZero(this.safeString(ticker, 'average'));\n let vwap = this.omitZero(this.safeString(ticker, 'vwap'));\n const baseVolume = this.safeString(ticker, 'baseVolume');\n const quoteVolume = this.safeString(ticker, 'quoteVolume');\n if (vwap === undefined) {\n vwap = Precise.stringDiv(this.omitZero(quoteVolume), baseVolume);\n }\n if ((last !== undefined) && (close === undefined)) {\n close = last;\n }\n else if ((last === undefined) && (close !== undefined)) {\n last = close;\n }\n if ((last !== undefined) && (open !== undefined)) {\n if (change === undefined) {\n change = Precise.stringSub(last, open);\n }\n if (average === undefined) {\n average = Precise.stringDiv(Precise.stringAdd(last, open), '2');\n }\n }\n if ((percentage === undefined) && (change !== undefined) && (open !== undefined) && Precise.stringGt(open, '0')) {\n percentage = Precise.stringMul(Precise.stringDiv(change, open), '100');\n }\n if ((change === undefined) && (percentage !== undefined) && (open !== undefined)) {\n change = Precise.stringDiv(Precise.stringMul(percentage, open), '100');\n }\n if ((open === undefined) && (last !== undefined) && (change !== undefined)) {\n open = Precise.stringSub(last, change);\n }\n // timestamp and symbol operations don't belong in safeTicker\n // they should be done in the derived classes\n return this.extend(ticker, {\n 'bid': this.parseNumber(this.omitZero(this.safeNumber(ticker, 'bid'))),\n 'bidVolume': this.safeNumber(ticker, 'bidVolume'),\n 'ask': this.parseNumber(this.omitZero(this.safeNumber(ticker, 'ask'))),\n 'askVolume': this.safeNumber(ticker, 'askVolume'),\n 'high': this.parseNumber(this.omitZero(this.safeString(ticker, 'high'))),\n 'low': this.parseNumber(this.omitZero(this.safeNumber(ticker, 'low'))),\n 'open': this.parseNumber(this.omitZero(this.parseNumber(open))),\n 'close': this.parseNumber(this.omitZero(this.parseNumber(close))),\n 'last': this.parseNumber(this.omitZero(this.parseNumber(last))),\n 'change': this.parseNumber(change),\n 'percentage': this.parseNumber(percentage),\n 'average': this.parseNumber(average),\n 'vwap': this.parseNumber(vwap),\n 'baseVolume': this.parseNumber(baseVolume),\n 'quoteVolume': this.parseNumber(quoteVolume),\n 'previousClose': this.safeNumber(ticker, 'previousClose'),\n });\n }\n async fetchOHLCV(symbol, timeframe = '1m', since = undefined, limit = undefined, params = {}) {\n let message = '';\n if (this.has['fetchTrades']) {\n message = '. If you want to build OHLCV candles from trade executions data, visit https://github.com/ccxt/ccxt/tree/master/examples/ and see \"build-ohlcv-bars\" file';\n }\n throw new ExchangeNotAllowedMethodError('fetchOHLCV').addMessage(message).exchange(this.id);\n }\n convertTradingViewToOHLCV(ohlcvs, timestamp = 't', open = 'o', high = 'h', low = 'l', close = 'c', volume = 'v', ms = false) {\n const result = [];\n const timestamps = this.safeList(ohlcvs, timestamp, []);\n const opens = this.safeList(ohlcvs, open, []);\n const highs = this.safeList(ohlcvs, high, []);\n const lows = this.safeList(ohlcvs, low, []);\n const closes = this.safeList(ohlcvs, close, []);\n const volumes = this.safeList(ohlcvs, volume, []);\n for (let i = 0; i < timestamps.length; i++) {\n result.push([\n ms ? this.safeInteger(timestamps, i) : this.safeTimestamp(timestamps, i),\n this.safeValue(opens, i),\n this.safeValue(highs, i),\n this.safeValue(lows, i),\n this.safeValue(closes, i),\n this.safeValue(volumes, i),\n ]);\n }\n return result;\n }\n convertOHLCVToTradingView(ohlcvs, timestamp = 't', open = 'o', high = 'h', low = 'l', close = 'c', volume = 'v', ms = false) {\n const result = {};\n result[timestamp] = [];\n result[open] = [];\n result[high] = [];\n result[low] = [];\n result[close] = [];\n result[volume] = [];\n for (let i = 0; i < ohlcvs.length; i++) {\n const ts = ms ? ohlcvs[i][0] : this.parseToInt(ohlcvs[i][0] / 1000);\n result[timestamp].push(ts);\n result[open].push(ohlcvs[i][1]);\n result[high].push(ohlcvs[i][2]);\n result[low].push(ohlcvs[i][3]);\n result[close].push(ohlcvs[i][4]);\n result[volume].push(ohlcvs[i][5]);\n }\n return result;\n }\n async fetchWebEndpoint(method, endpointMethod, returnAsJson, startRegex = undefined, endRegex = undefined) {\n let errorMessage = '';\n const options = this.safeValue(this.options, method, {});\n const muteOnFailure = this.safeBool(options, 'webApiMuteFailure', true);\n try {\n // if it was not explicitly disabled, then don't fetch\n if (this.safeBool(options, 'webApiEnable', true) !== true) {\n return undefined;\n }\n const maxRetries = this.safeValue(options, 'webApiRetries', 10);\n let response = undefined;\n let retry = 0;\n while (retry < maxRetries) {\n try {\n response = await this[endpointMethod]({});\n break;\n }\n catch (e) {\n retry = retry + 1;\n if (retry === maxRetries) {\n throw e;\n }\n }\n }\n let content = response;\n if (startRegex !== undefined) {\n const splitted_by_start = content.split(startRegex);\n content = splitted_by_start[1]; // we need second part after start\n }\n if (endRegex !== undefined) {\n const splitted_by_end = content.split(endRegex);\n content = splitted_by_end[0]; // we need first part after start\n }\n if (returnAsJson && (typeof content === 'string')) {\n const jsoned = this.parseJson(content.trim()); // content should be trimmed before json parsing\n if (jsoned) {\n return jsoned; // if parsing was not successfull, exception should be thrown\n }\n else {\n throw new InternalError()\n .addMessage('could not parse the response into json')\n .exchange(this.id);\n }\n }\n else {\n return content;\n }\n }\n catch (e) {\n errorMessage = this.id + ' ' + method + '() failed to fetch correct data from website. Probably webpage markup has been changed, breaking the page custom parser.';\n }\n if (muteOnFailure) {\n return undefined;\n }\n else {\n throw new InternalError().addMessage(errorMessage).exchange(this.id);\n }\n }\n marketIds(symbols) {\n if (symbols === undefined) {\n return symbols;\n }\n const result = [];\n for (let i = 0; i < symbols.length; i++) {\n result.push(this.marketId(symbols[i]));\n }\n return result;\n }\n marketSymbols(symbols, type = undefined, allowEmpty = true, sameTypeOnly = false, sameSubTypeOnly = false) {\n if (symbols === undefined) {\n if (!allowEmpty) {\n throw new InvalidParamsError('Empty list of symbols is not supported').exchange(this.id);\n }\n return symbols;\n }\n const symbolsLength = symbols.length;\n if (symbolsLength === 0) {\n if (!allowEmpty) {\n throw new InvalidParamsError('Empty list of symbols is not supported').exchange(this.id);\n }\n return symbols;\n }\n const result = [];\n let marketType = undefined;\n let isLinearSubType = undefined;\n for (let i = 0; i < symbols.length; i++) {\n const market = this.market(symbols[i]);\n if (sameTypeOnly && (marketType !== undefined)) {\n if (market['type'] !== marketType) {\n throw new MarketError()\n .addMessage('Symbols must be of the same type, either ' + marketType + ' or ' + market['type'] + '.')\n .exchange(this.id);\n }\n }\n if (sameSubTypeOnly && (isLinearSubType !== undefined)) {\n if (market['linear'] !== isLinearSubType) {\n throw new MarketError()\n .addMessage('Symbols must be of the same subType, either linear or inverse.')\n .exchange(this.id);\n }\n }\n if (type !== undefined && market['type'] !== type) {\n throw new MarketError()\n .addMessage('Symbols must be of the same type ' + type + '. If the type is incorrect you can change it in options or the params of the request')\n .exchange(this.id);\n }\n marketType = market['type'];\n if (!market['spot']) {\n isLinearSubType = market['linear'];\n }\n const symbol = this.safeString(market, 'symbol', symbols[i]);\n result.push(symbol);\n }\n return result;\n }\n marketCodes(codes) {\n if (codes === undefined) {\n return codes;\n }\n const result = [];\n for (let i = 0; i < codes.length; i++) {\n result.push(this.getCodeFromCurrencyId(codes[i]));\n }\n return result;\n }\n parseBidsAsks(bidasks, priceKey = 0, amountKey = 1, countOrIdKey = 2) {\n bidasks = this.toArray(bidasks);\n const result = [];\n for (let i = 0; i < bidasks.length; i++) {\n result.push(this.parseBidAsk(bidasks[i], priceKey, amountKey, countOrIdKey));\n }\n return result;\n }\n async fetchL2OrderBook(symbol, limit = undefined, params = {}) {\n const orderbook = await this.fetchOrderBook(symbol, limit, params);\n return this.extend(orderbook, {\n 'asks': this.sortBy(this.aggregate(orderbook['asks']), 0),\n 'bids': this.sortBy(this.aggregate(orderbook['bids']), 0, true),\n });\n }\n filterBySymbol(objects, symbol = undefined) {\n if (symbol === undefined) {\n return objects;\n }\n const result = [];\n for (let i = 0; i < objects.length; i++) {\n const objectSymbol = this.safeString(objects[i], 'symbol');\n if (objectSymbol === symbol) {\n result.push(objects[i]);\n }\n }\n return result;\n }\n parseOHLCV(ohlcv, market = undefined) {\n if (Array.isArray(ohlcv)) {\n return [\n this.safeInteger(ohlcv, 0),\n this.safeNumber(ohlcv, 1),\n this.safeNumber(ohlcv, 2),\n this.safeNumber(ohlcv, 3),\n this.safeNumber(ohlcv, 4),\n this.safeNumber(ohlcv, 5), // volume\n ];\n }\n return ohlcv;\n }\n networkCodeToId(networkCode, currencyCode = undefined) {\n /**\n * @ignore\n * @method\n * @name exchange#networkCodeToId\n * @description tries to convert the provided networkCode (which is expected to be an unified network code) to a network id. In order to achieve this, derived class needs to have 'options->networks' defined.\n * @param {string} networkCode unified network code\n * @param {string} currencyCode unified currency code, but this argument is not required by default, unless there is an exchange (like huobi) that needs an override of the method to be able to pass currencyCode argument additionally\n * @returns {string|undefined} exchange-specific network id\n */\n if (networkCode === undefined) {\n return undefined;\n }\n const networkIdsByCodes = this.safeValue(this.options, 'networks', {});\n let networkId = this.safeString(networkIdsByCodes, networkCode);\n // for example, if 'ETH' is passed for networkCode, but 'ETH' key not defined in `options->networks` object\n if (networkId === undefined) {\n if (currencyCode === undefined) {\n // if currencyCode was not provided, then we just set passed value to networkId\n networkId = networkCode;\n }\n else {\n // if currencyCode was provided, then we try to find if that currencyCode has a replacement (i.e. ERC20 for ETH)\n const networkCodeReplacements = this.safeValue(this.options, 'networkCodeReplacements', {});\n if (currencyCode in networkCodeReplacements) {\n // if there is a replacement for the passed networkCode, then we use it to find network-id in `options->networks` object\n const replacementObject = networkCodeReplacements[currencyCode];\n const keys = Object.keys(replacementObject);\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n const value = replacementObject[key];\n // if value matches to provided unified networkCode, then we use it's key to find network-id in `options->networks` object\n if (value === networkCode) {\n networkId = key;\n break;\n }\n }\n }\n // if it wasn't found, we just set the provided value to network-id\n if (networkId === undefined) {\n networkId = networkCode;\n }\n }\n }\n return networkId;\n }\n networkIdToCode(networkId, currencyCode = undefined) {\n /**\n * @ignore\n * @method\n * @name exchange#networkIdToCode\n * @description tries to convert the provided exchange-specific networkId to an unified network Code. In order to achieve this, derived class needs to have \"options['networksById']\" defined.\n * @param {string} networkId exchange specific network id/title, like: TRON, Trc-20, usdt-erc20, etc\n * @param {string|undefined} currencyCode unified currency code, but this argument is not required by default, unless there is an exchange (like huobi) that needs an override of the method to be able to pass currencyCode argument additionally\n * @returns {string|undefined} unified network code\n */\n if (networkId === undefined) {\n return undefined;\n }\n const networkCodesByIds = this.safeDict(this.options, 'networksById', {});\n let networkCode = this.safeString(networkCodesByIds, networkId, networkId);\n // replace mainnet network-codes (i.e. ERC20->ETH)\n if (currencyCode !== undefined) {\n const networkCodeReplacements = this.safeValue(this.options, 'networkCodeReplacements', {});\n if (currencyCode in networkCodeReplacements) {\n const replacementObject = this.safeValue(networkCodeReplacements, currencyCode, {});\n networkCode = this.safeString(replacementObject, networkCode, networkCode);\n }\n }\n return networkCode;\n }\n handleNetworkCodeAndParams(params) {\n const networkCodeInParams = this.safeString2(params, 'networkCode', 'network');\n if (networkCodeInParams !== undefined) {\n params = this.omit(params, ['networkCode', 'network']);\n }\n // if it was not defined by user, we should not set it from 'defaultNetworks', because handleNetworkCodeAndParams is for only request-side and thus we do not fill it with anything. We can only use 'defaultNetworks' after parsing response-side\n return [networkCodeInParams, params];\n }\n handleEcidAndParams(params) {\n const ecidInParams = this.safeString2(params, 'ecid', 'network');\n if (ecidInParams !== undefined) {\n params = this.omit(params, ['ecid', 'network']);\n }\n return [ecidInParams, params];\n }\n defaultNetworkCode(currencyCode) {\n let defaultNetworkCode = undefined;\n const defaultNetworks = this.safeDict(this.options, 'defaultNetworks', {});\n if (currencyCode in defaultNetworks) {\n // if currency had set its network in \"defaultNetworks\", use it\n defaultNetworkCode = defaultNetworks[currencyCode];\n }\n else {\n // otherwise, try to use the global-scope 'defaultNetwork' value (even if that network is not supported by currency, it doesn't make any problem, this will be just used \"at first\" if currency supports this network at all)\n const defaultNetwork = this.safeDict(this.options, 'defaultNetwork');\n if (defaultNetwork !== undefined) {\n defaultNetworkCode = defaultNetwork;\n }\n }\n return defaultNetworkCode;\n }\n selectNetworkCodeFromUnifiedNetworks(currencyCode, networkCode, indexedNetworkEntries) {\n return this.selectNetworkKeyFromNetworks(currencyCode, networkCode, indexedNetworkEntries, true);\n }\n selectNetworkIdFromRawNetworks(currencyCode, networkCode, indexedNetworkEntries) {\n return this.selectNetworkKeyFromNetworks(currencyCode, networkCode, indexedNetworkEntries, false);\n }\n selectNetworkKeyFromNetworks(currencyCode, networkCode, indexedNetworkEntries, isIndexedByUnifiedNetworkCode = false) {\n // this method is used against raw & unparse network entries, which are just indexed by network id\n let chosenNetworkId = undefined;\n const availableNetworkIds = Object.keys(indexedNetworkEntries);\n const responseNetworksLength = availableNetworkIds.length;\n if (networkCode !== undefined) {\n if (responseNetworksLength === 0) {\n throw new NetworkNotFoundError(networkCode)\n .addMessage('Network did not return any result for ' + currencyCode)\n .exchange(this.id);\n }\n else {\n // if networkCode was provided by user, we should check it after response, as the referenced exchange doesn't support network-code during request\n const networkId = isIndexedByUnifiedNetworkCode ? networkCode : this.networkCodeToId(networkCode, currencyCode);\n if (networkId in indexedNetworkEntries) {\n chosenNetworkId = networkId;\n }\n else {\n throw new NetworkNotFoundError(networkId)\n .addMessage('Network was not found for ' + currencyCode + ', use one of ' + availableNetworkIds.join(', '))\n .exchange(this.id);\n }\n }\n }\n else {\n if (responseNetworksLength === 0) {\n throw new NetworkNotFoundForTokenSymbol(currencyCode).exchange(this.id);\n }\n else {\n // if networkCode was not provided by user, then we try to use the default network (if it was defined in \"defaultNetworks\"), otherwise, we just return the first network entry\n const defaultNetworkCode = this.defaultNetworkCode(currencyCode);\n const defaultNetworkId = isIndexedByUnifiedNetworkCode ? defaultNetworkCode : this.networkCodeToId(defaultNetworkCode, currencyCode);\n chosenNetworkId = (defaultNetworkId in indexedNetworkEntries) ? defaultNetworkId : availableNetworkIds[0];\n }\n }\n return chosenNetworkId;\n }\n safeNumber2(dictionary, key1, key2, d = undefined) {\n const value = this.safeString2(dictionary, key1, key2);\n return this.parseNumber(value, d);\n }\n parseOrderBook(orderbook, symbol, timestamp = undefined, bidsKey = 'bids', asksKey = 'asks', priceKey = 0, amountKey = 1, countOrIdKey = 2) {\n const bids = this.parseBidsAsks(this.safeValue(orderbook, bidsKey, []), priceKey, amountKey, countOrIdKey);\n const asks = this.parseBidsAsks(this.safeValue(orderbook, asksKey, []), priceKey, amountKey, countOrIdKey);\n return {\n 'symbol': symbol,\n 'bids': this.sortBy(bids, 0, true),\n 'asks': this.sortBy(asks, 0),\n 'timestamp': timestamp,\n 'datetime': this.iso8601(timestamp),\n 'nonce': undefined,\n };\n }\n parseOHLCVs(ohlcvs, market = undefined, timeframe = '1m', since = undefined, limit = undefined) {\n const results = [];\n for (let i = 0; i < ohlcvs.length; i++) {\n results.push(this.parseOHLCV(ohlcvs[i], market));\n }\n const sorted = this.sortBy(results, 0);\n return this.filterBySinceLimit(sorted, since, limit, 0);\n }\n async loadTradingLimits(symbols = undefined, reload = false, params = {}) {\n if (this.has['fetchTradingLimits']) {\n if (reload || !('limitsLoaded' in this.options)) {\n const response = await this.fetchTradingLimits(symbols);\n for (let i = 0; i < symbols.length; i++) {\n const symbol = symbols[i];\n this.markets[symbol] = this.deepExtend(this.markets[symbol], response[symbol]);\n }\n this.options['limitsLoaded'] = this.milliseconds();\n }\n }\n return this.markets;\n }\n safePosition(position) {\n // simplified version of: /pull/12765/\n const unrealizedPnlString = this.safeString(position, 'unrealisedPnl');\n const initialMarginString = this.safeString(position, 'initialMargin');\n //\n // PERCENTAGE\n //\n const percentage = this.safeValue(position, 'percentage');\n if ((percentage === undefined) && (unrealizedPnlString !== undefined) && (initialMarginString !== undefined)) {\n // as it was done in all implementations ( aax, btcex, bybit, deribit, ftx, gate, kucoinfutures, phemex )\n const percentageString = Precise.stringMul(Precise.stringDiv(unrealizedPnlString, initialMarginString, 4), '100');\n position['percentage'] = this.parseNumber(percentageString);\n }\n // if contractSize is undefined get from market\n let contractSize = this.safeNumber(position, 'contractSize');\n const symbol = this.safeString(position, 'symbol');\n let market = undefined;\n if (symbol !== undefined) {\n market = this.safeValue(this.markets, symbol);\n }\n if (contractSize === undefined && market !== undefined) {\n contractSize = this.safeNumber(market, 'contractSize');\n position['contractSize'] = contractSize;\n }\n return position;\n }\n parsePositions(positions, symbols = undefined, params = {}) {\n symbols = this.marketSymbols(symbols);\n positions = this.toArray(positions);\n const result = [];\n for (let i = 0; i < positions.length; i++) {\n const position = this.extend(this.parsePosition(positions[i], undefined), params);\n result.push(position);\n }\n return this.filterByArrayPositions(result, 'symbol', symbols, false);\n }\n parseAccounts(accounts, params = {}) {\n accounts = this.toArray(accounts);\n const result = [];\n for (let i = 0; i < accounts.length; i++) {\n const account = this.extend(this.parseAccount(accounts[i]), params);\n result.push(account);\n }\n return result;\n }\n parseTrades(trades, market = undefined, since = undefined, limit = undefined, params = {}) {\n trades = this.toArray(trades);\n let result = [];\n for (let i = 0; i < trades.length; i++) {\n const trade = this.extend(this.parseTrade(trades[i], market), params);\n result.push(trade);\n }\n result = this.sortBy2(result, 'timestamp', 'id');\n const symbol = (market !== undefined) ? market['symbol'] : undefined;\n return this.filterBySymbolSinceLimit(result, symbol, since, limit);\n }\n parseTransactions(transactions, currency = undefined, since = undefined, limit = undefined, params = {}) {\n transactions = this.toArray(transactions);\n let result = [];\n for (let i = 0; i < transactions.length; i++) {\n const transaction = this.extend(this.parseTransaction(transactions[i], currency), params);\n result.push(transaction);\n }\n result = this.sortBy(result, 'timestamp');\n const code = (currency !== undefined) ? currency['code'] : undefined;\n return this.filterByCurrencySinceLimit(result, code, since, limit);\n }\n parseTransfers(transfers, currency = undefined, since = undefined, limit = undefined, params = {}) {\n transfers = this.toArray(transfers);\n let result = [];\n for (let i = 0; i < transfers.length; i++) {\n const transfer = this.extend(this.parseTransfer(transfers[i], currency), params);\n result.push(transfer);\n }\n result = this.sortBy(result, 'timestamp');\n const code = (currency !== undefined) ? currency['code'] : undefined;\n return this.filterByCurrencySinceLimit(result, code, since, limit);\n }\n parseLedger(data, currency = undefined, since = undefined, limit = undefined, params = {}) {\n let result = [];\n const arrayData = this.toArray(data);\n for (let i = 0; i < arrayData.length; i++) {\n const itemOrItems = this.parseLedgerEntry(arrayData[i], currency);\n if (Array.isArray(itemOrItems)) {\n for (let j = 0; j < itemOrItems.length; j++) {\n result.push(this.extend(itemOrItems[j], params));\n }\n }\n else {\n result.push(this.extend(itemOrItems, params));\n }\n }\n result = this.sortBy(result, 'timestamp');\n const code = (currency !== undefined) ? currency['code'] : undefined;\n return this.filterByCurrencySinceLimit(result, code, since, limit);\n }\n nonce() {\n return this.seconds();\n }\n setHeaders(headers) {\n return headers;\n }\n marketId(symbol) {\n const market = this.market(symbol);\n if (market !== undefined) {\n return market['id'];\n }\n return symbol;\n }\n symbol(symbol) {\n const market = this.market(symbol);\n return this.safeString(market, 'symbol', symbol);\n }\n handleParamString(params, paramName, defaultValue = undefined) {\n const value = this.safeString(params, paramName, defaultValue);\n if (value !== undefined) {\n params = this.omit(params, paramName);\n }\n return [value, params];\n }\n resolvePath(path, params) {\n return [\n this.implodeParams(path, params),\n this.omit(params, this.extractParams(path)),\n ];\n }\n getListFromObjectValues(objects, key) {\n const newArray = this.toArray(objects);\n const results = [];\n for (let i = 0; i < newArray.length; i++) {\n results.push(newArray[i][key]);\n }\n return results;\n }\n getSymbolsForMarketType(marketType = undefined, subType = undefined, symbolWithActiveStatus = true, symbolWithUnknownStatus = true) {\n let filteredMarkets = this.markets;\n if (marketType !== undefined) {\n filteredMarkets = this.filterBy(filteredMarkets, 'type', marketType);\n }\n if (subType !== undefined) {\n this.checkRequiredArgument('getSymbolsForMarketType', subType, 'subType', ['linear', 'inverse', 'quanto']);\n filteredMarkets = this.filterBy(filteredMarkets, 'subType', subType);\n }\n const activeStatuses = [];\n if (symbolWithActiveStatus) {\n activeStatuses.push(true);\n }\n if (symbolWithUnknownStatus) {\n activeStatuses.push(undefined);\n }\n filteredMarkets = this.filterByArray(filteredMarkets, 'active', activeStatuses, false);\n return this.getListFromObjectValues(filteredMarkets, 'symbol');\n }\n filterByArray(objects, key, values = undefined, indexed = true) {\n objects = this.toArray(objects);\n // return all of them if no values were passed\n if (values === undefined || !values) {\n return indexed ? this.indexBy(objects, key) : objects;\n }\n const results = [];\n for (let i = 0; i < objects.length; i++) {\n if (this.inArray(objects[i][key], values)) {\n results.push(objects[i]);\n }\n }\n return indexed ? this.indexBy(results, key) : results;\n }\n isUsingForcedProxy(params = undefined, api = undefined) {\n return false;\n }\n async fetch2(path, api = 'public', method = 'GET', params = {}, headers = undefined, body = undefined, config = {}) {\n let methodCallId = undefined;\n if ('methodCallId' in params) {\n methodCallId = params['methodCallId'];\n params = this.omit(params, 'methodCallId');\n }\n if (this.enableRateLimit) {\n let customExpireInterval = undefined;\n let customPriority = undefined;\n if ('customExpireInterval' in params) {\n customExpireInterval = params['customExpireInterval'];\n params = this.omit(params, 'customExpireInterval');\n }\n if ('customPriority' in params) {\n customPriority = params['customPriority'];\n params = this.omit(params, 'customPriority');\n }\n const cost = this.calculateRateLimiterCost(api, method, path, params, config);\n await this.throttle(cost, path, customExpireInterval, customPriority);\n }\n this.lastRestRequestTimestamp = this.milliseconds();\n const isUsingForcedProxy = this.isUsingForcedProxy(params, api);\n const forcedProxy = isUsingForcedProxy && this.forcedProxy ? this.forcedProxy : '';\n const requestCallId = methodCallId ? await this.generateMethodCallId(methodCallId, path, api, method, params) : undefined;\n const customExtraHeaders = params['customExtraHeaders'];\n if (customExtraHeaders) {\n params = this.omit(params, 'customExtraHeaders');\n }\n if (this.fetchPrivateMethodsFromCache && isUsingForcedProxy) {\n const response = await this.fetchFromCache(requestCallId);\n return this.handleRestResponse(response, '', method, headers, body);\n }\n else {\n const request = await this.sign(path, api, method, params, headers, body);\n if (requestCallId) {\n if (!request['headers']) {\n request['headers'] = {};\n }\n request['headers']['x-request-call-id'] = requestCallId;\n }\n if (customExtraHeaders) {\n request['headers'] = this.extend(request['headers'], customExtraHeaders);\n }\n this.last_request_headers = request['headers'];\n this.last_request_body = request['body'];\n this.last_request_url = request['url'];\n // [PROXY TRADE TEST] uncomment to test proxy\n // if (forcedProxy !== '') {\n // this.agent = this.httpAgent;\n // const response = await this.fetch ('http://localhost:8080/' + forcedProxy + request['url'], request['method'], request['headers'], request['body']);\n // this.agent = this.httpsAgent;\n // return response;\n // } else {\n // const response = await this.fetch (forcedProxy + request['url'], request['method'], request['headers'], request['body']);\n // return response;\n // }\n return await this.fetch(forcedProxy + request['url'], request['method'], request['headers'], request['body']);\n }\n }\n async generateMethodCallId(methodCallId, path, api, method, params) {\n const stringifiedParams = JSON.stringify(params);\n return [\n methodCallId,\n method,\n api,\n path,\n stringifiedParams,\n ].join(':');\n }\n async request(path, api = 'public', method = 'GET', params = {}, headers = undefined, body = undefined, config = {}) {\n return await this.fetch2(path, api, method, params, headers, body, config);\n }\n async loadAccounts(reload = false, params = {}) {\n if (reload) {\n this.accounts = await this.fetchAccounts(params);\n }\n else {\n await this.mutex.waitForUnlock(accountsCacheIdentifier(this.id, this.exchangeInstanceId));\n this.accounts = (await this.cache.get(accountsCacheIdentifier(this.id, this.exchangeInstanceId), { 'clone': false }))?.data;\n if (this.accounts) {\n return this.accounts;\n }\n else {\n try {\n if (this.mutex.isLocked(accountsCacheIdentifier(this.id, this.exchangeInstanceId))) {\n return this.loadAccounts(undefined, params);\n }\n await this.mutex.acquire(accountsCacheIdentifier(this.id, this.exchangeInstanceId));\n this.accounts = await this.fetchAccounts(params);\n await this.cache.set({\n 'key': accountsCacheIdentifier(this.id, this.exchangeInstanceId),\n 'data': this.accounts,\n 'ttl': ACCOUNTS_DATA_CACHE_TTL,\n 'clone': false,\n });\n }\n finally {\n this.mutex.release(accountsCacheIdentifier(this.id, this.exchangeInstanceId));\n }\n }\n }\n this.accountsById = this.indexBy(this.accounts, 'id');\n return this.accounts;\n }\n buildOHLCVC(trades, timeframe = '1m', since = 0, limit = 2147483647) {\n // given a sorted arrays of trades (recent last) and a timeframe builds an array of OHLCV candles\n // note, default limit value (2147483647) is max int32 value\n const ms = this.parseTimeframe(timeframe) * 1000;\n const ohlcvs = [];\n const i_timestamp = 0;\n // const open = 1;\n const i_high = 2;\n const i_low = 3;\n const i_close = 4;\n const i_volume = 5;\n const i_count = 6;\n const tradesLength = trades.length;\n const oldest = Math.min(tradesLength, limit);\n for (let i = 0; i < oldest; i++) {\n const trade = trades[i];\n const ts = trade['timestamp'];\n if (ts < since) {\n continue;\n }\n const openingTime = Math.floor(ts / ms) * ms; // shift to the edge of m/h/d (but not M)\n if (openingTime < since) { // we don't need bars, that have opening time earlier than requested\n continue;\n }\n const ohlcv_length = ohlcvs.length;\n const candle = ohlcv_length - 1;\n if ((candle === -1) || (openingTime >= this.sum(ohlcvs[candle][i_timestamp], ms))) {\n // moved to a new timeframe -> create a new candle from opening trade\n ohlcvs.push([\n openingTime,\n trade['price'],\n trade['price'],\n trade['price'],\n trade['price'],\n trade['amount'],\n 1, // count\n ]);\n }\n else {\n // still processing the same timeframe -> update opening trade\n ohlcvs[candle][i_high] = Math.max(ohlcvs[candle][i_high], trade['price']);\n ohlcvs[candle][i_low] = Math.min(ohlcvs[candle][i_low], trade['price']);\n ohlcvs[candle][i_close] = trade['price'];\n ohlcvs[candle][i_volume] = this.sum(ohlcvs[candle][i_volume], trade['amount']);\n ohlcvs[candle][i_count] = this.sum(ohlcvs[candle][i_count], 1);\n }\n }\n return ohlcvs;\n }\n parseTradingViewOHLCV(ohlcvs, market = undefined, timeframe = '1m', since = undefined, limit = undefined) {\n const result = this.convertTradingViewToOHLCV(ohlcvs);\n return this.parseOHLCVs(result, market, timeframe, since, limit);\n }\n async editLimitBuyOrder(id, symbol, amount, price = undefined, params = {}) {\n return await this.editLimitOrder(id, symbol, 'buy', amount, price, params);\n }\n async editLimitSellOrder(id, symbol, amount, price = undefined, params = {}) {\n return await this.editLimitOrder(id, symbol, 'sell', amount, price, params);\n }\n async editLimitOrder(id, symbol, side, amount, price = undefined, params = {}) {\n return await this.editOrder(id, symbol, 'limit', side, amount, price, params);\n }\n async editOrder(id, symbol, type, side, amount = undefined, price = undefined, params = {}) {\n await this.cancelOrder(id, symbol);\n return await this.createOrder(symbol, type, side, amount, price, params);\n }\n async fetchPermissions(params = {}) {\n throw new ExchangeNotAllowedMethodError('fetchPermissions').exchange(this.id);\n }\n async fetchPosition(symbol, params = {}) {\n throw new ExchangeNotAllowedMethodError('fetchPosition').exchange(this.id);\n }\n async getSubAccounts() {\n throw new ExchangeNotAllowedMethodError('getSubAccounts').exchange(this.id);\n }\n async fetchSubAccountBalances(uid, params = {}) {\n throw new ExchangeNotAllowedMethodError('fetchSubAccountBalances').exchange(this.id);\n }\n async subAccountTransfer(code, amount, fromAccountType, toAccountType, fromUid, toUid, params = {}) {\n throw new ExchangeNotAllowedMethodError('subAccountTransfer').exchange(this.id);\n }\n async fetchPositionsForSymbol(symbol, params = {}) {\n /**\n * @method\n * @name exchange#fetchPositionsForSymbol\n * @description fetches all open positions for specific symbol, unlike fetchPositions (which is designed to work with multiple symbols) so this method might be preffered for one-market position, because of less rate-limit consumption and speed\n * @param {string} symbol unified market symbol\n * @param {object} params extra parameters specific to the endpoint\n * @returns {object[]} a list of [position structure]{@link https://docs.ccxt.com/#/?id=position-structure} with maximum 3 items - possible one position for \"one-way\" mode, and possible two positions (long & short) for \"two-way\" (a.k.a. hedge) mode\n */\n throw new ExchangeNotAllowedMethodError('fetchPositionsForSymbol() is not supported yet').exchange(this.id);\n }\n async fetchPositions(symbols = undefined, params = {}) {\n throw new ExchangeNotAllowedMethodError('fetchPositions').exchange(this.id);\n }\n async fetchPositionsRisk(symbols = undefined, params = {}) {\n throw new ExchangeNotAllowedMethodError('fetchPositionsRisk').exchange(this.id);\n }\n async fetchLedger(code = undefined, since = undefined, limit = undefined, params = {}) {\n throw new ExchangeNotAllowedMethodError('fetchLedger').exchange(this.id);\n }\n async fetchLedgerEntry(id, code = undefined, params = {}) {\n throw new ExchangeNotAllowedMethodError('fetchLedgerEntry').exchange(this.id);\n }\n parseBidAsk(bidask, priceKey = 0, amountKey = 1, countOrIdKey = 2) {\n const price = this.safeNumber(bidask, priceKey);\n const amount = this.safeNumber(bidask, amountKey);\n const countOrId = this.safeInteger(bidask, countOrIdKey);\n const bidAsk = [price, amount];\n if (countOrId !== undefined) {\n bidAsk.push(countOrId);\n }\n return bidAsk;\n }\n safeCurrency(currencyId, currency = undefined) {\n if ((currencyId === undefined) && (currency !== undefined)) {\n return currency;\n }\n if ((this.currencies_by_id !== undefined) && (currencyId in this.currencies_by_id) && (this.currencies_by_id[currencyId] !== undefined)) {\n return this.currencies_by_id[currencyId];\n }\n let code = currencyId;\n if (currencyId !== undefined) {\n code = this.getCodeFromCurrencyId(currencyId.toUpperCase());\n }\n return {\n 'id': currencyId,\n 'code': code,\n 'precision': undefined,\n };\n }\n safeMarket(marketId, market = undefined, delimiter = undefined, marketType = undefined) {\n const result = this.safeMarketStructure({\n 'symbol': marketId,\n 'marketId': marketId,\n });\n if (marketId !== undefined) {\n if ((this.markets_by_id !== undefined) && (marketId in this.markets_by_id)) {\n const markets = this.markets_by_id[marketId];\n const numMarkets = markets.length;\n if (numMarkets === 1) {\n return markets[0];\n }\n else {\n if (marketType === undefined) {\n if (market === undefined) {\n throw new InternalError().addMessage('safeMarket() requires a fourth argument for ' + marketId + ' to disambiguate between different markets with the same market id')\n .exchange(this.id);\n }\n else {\n marketType = market['type'];\n }\n }\n for (let i = 0; i < markets.length; i++) {\n const currentMarket = markets[i];\n if (currentMarket[marketType]) {\n return currentMarket;\n }\n }\n }\n }\n else if (delimiter !== undefined && delimiter !== '') {\n const parts = marketId.split(delimiter);\n const partsLength = parts.length;\n if (partsLength === 2) {\n result['baseId'] = this.safeString(parts, 0);\n result['quoteId'] = this.safeString(parts, 1);\n result['base'] = this.safeCurrencyCode(result['baseId']);\n result['quote'] = this.safeCurrencyCode(result['quoteId']);\n result['symbol'] = result['base'] + '/' + result['quote'];\n return result;\n }\n else {\n return result;\n }\n }\n }\n if (market !== undefined) {\n return market;\n }\n return result;\n }\n checkRequiredCredentials(error = true) {\n const keys = Object.keys(this.requiredCredentials);\n if (this.token)\n return true;\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n if (this.requiredCredentials[key] && !this[key]) {\n if (key === 'secret' && this.externalSigner)\n continue;\n if (error) {\n throw new InvalidCredentialsError()\n .addMessage('It requires \"' + key + '\" credential')\n .exchange(this.id);\n }\n else {\n return false;\n }\n }\n }\n return true;\n }\n oath() {\n if (this.twofa !== undefined) {\n return totp(this.twofa);\n }\n else {\n throw new InternalError()\n .addMessage('exchange.twofa has not been set for 2FA Two-Factor Authentication')\n .exchange(this.id);\n }\n }\n async fetchBalance(params = {}) {\n throw new ExchangeNotAllowedMethodError('fetchBalance').exchange(this.id);\n }\n parseBalance(response) {\n throw new ExchangeNotAllowedMethodError('parseBalance').exchange(this.id);\n }\n async fetchPartialBalance(part, params = {}) {\n const balance = await this.fetchBalance(params);\n return balance[part];\n }\n async fetchFreeBalance(params = {}) {\n return await this.fetchPartialBalance('free', params);\n }\n async fetchUsedBalance(params = {}) {\n return await this.fetchPartialBalance('used', params);\n }\n async fetchTotalBalance(params = {}) {\n return await this.fetchPartialBalance('total', params);\n }\n async fetchStatus(params = {}) {\n throw new ExchangeNotAllowedMethodError('fetchStatus').exchange(this.id);\n }\n async fetchFundingFee(code, params = {}) {\n const warnOnFetchFundingFee = this.safeBool(this.options, 'warnOnFetchFundingFee', true);\n if (warnOnFetchFundingFee) {\n throw new ExchangeNotAllowedMethodError('fetchFundingFee').addMessage('This method is deprecated').exchange(this.id);\n }\n return await this.fetchTransactionFee(code, params);\n }\n async fetchFundingFees(codes = undefined, params = {}) {\n const warnOnFetchFundingFees = this.safeBool(this.options, 'warnOnFetchFundingFees', true);\n if (warnOnFetchFundingFees) {\n throw new ExchangeNotAllowedMethodError('fetchFundingFees').addMessage('This method is deprecated').exchange(this.id);\n }\n return await this.fetchTransactionFees(codes, params);\n }\n async fetchTransactionFee(code, params = {}) {\n if (!this.has['fetchTransactionFees']) {\n throw new ExchangeNotAllowedMethodError('fetchTransactionFee').exchange(this.id);\n }\n return await this.fetchTransactionFees([code], params);\n }\n async fetchTransactionFees(codes = undefined, params = {}) {\n throw new ExchangeNotAllowedMethodError('fetchTransactionFees').exchange(this.id);\n }\n async fetchDepositWithdrawFees(codes = undefined, params = {}) {\n throw new ExchangeNotAllowedMethodError('fetchDepositWithdrawFees').exchange(this.id);\n }\n async fetchDepositWithdrawFee(code, params = {}) {\n if (!this.has['fetchDepositWithdrawFees']) {\n throw new ExchangeNotAllowedMethodError('fetchDepositWithdrawFee').exchange(this.id);\n }\n const fees = await this.fetchDepositWithdrawFees([code], params);\n return this.safeValue(fees, code);\n }\n getSupportedMapping(key, mapping = {}) {\n if (key in mapping) {\n return mapping[key];\n }\n else {\n throw new InternalError().addMessage(key + ' does not have a value in mapping').exchange(this.id);\n }\n }\n handleOptionAndParams(params, methodName, optionName, defaultValue = undefined) {\n // This method can be used to obtain method specific properties, i.e: this.handleOptionAndParams (params, 'fetchPosition', 'marginMode', 'isolated')\n const defaultOptionName = 'default' + this.capitalize(optionName); // we also need to check the 'defaultXyzWhatever'\n // check if params contain the key\n let value = this.safeValue2(params, optionName, defaultOptionName);\n if (value !== undefined) {\n params = this.omit(params, [optionName, defaultOptionName]);\n }\n else {\n // check if exchange has properties for this method\n const exchangeWideMethodOptions = this.safeValue(this.options, methodName);\n if (exchangeWideMethodOptions !== undefined) {\n // check if the option is defined inside this method's props\n value = this.safeValue2(exchangeWideMethodOptions, optionName, defaultOptionName);\n }\n if (value === undefined) {\n // if it's still undefined, check if global exchange-wide option exists\n value = this.safeValue2(this.options, optionName, defaultOptionName);\n }\n // if it's still undefined, use the default value\n value = (value !== undefined) ? value : defaultValue;\n }\n return [value, params];\n }\n handleOptionAndParams2(params, methodName, methodName2, optionName, defaultValue = undefined) {\n // This method can be used to obtain method specific properties, i.e: this.handleOptionAndParams (params, 'fetchPosition', 'marginMode', 'isolated')\n const defaultOptionName = 'default' + this.capitalize(optionName); // we also need to check the 'defaultXyzWhatever'\n // check if params contain the key\n let value = this.safeValue2(params, optionName, defaultOptionName);\n if (value !== undefined) {\n params = this.omit(params, [optionName, defaultOptionName]);\n }\n else {\n // check if exchange has properties for this method\n const exchangeWideMethodOptions = this.safeValue2(this.options, methodName, methodName2);\n if (exchangeWideMethodOptions !== undefined) {\n // check if the option is defined inside this method's props\n value = this.safeValue2(exchangeWideMethodOptions, optionName, defaultOptionName);\n }\n if (value === undefined) {\n // if it's still undefined, check if global exchange-wide option exists\n value = this.safeValue2(this.options, optionName, defaultOptionName);\n }\n // if it's still undefined, use the default value\n value = (value !== undefined) ? value : defaultValue;\n }\n return [value, params];\n }\n handleOption(methodName, optionName, defaultValue = undefined) {\n // eslint-disable-next-line no-unused-vars\n const [result, empty] = this.handleOptionAndParams({}, methodName, optionName, defaultValue);\n return result;\n }\n handleMarketTypeAndParams(methodName, market = undefined, params = {}) {\n const defaultType = this.safeString2(this.options, 'defaultType', 'type', 'spot');\n const methodOptions = this.safeDict(this.options, methodName);\n let methodType = defaultType;\n if (methodOptions !== undefined) {\n if (typeof methodOptions === 'string') {\n methodType = methodOptions;\n }\n else {\n methodType = this.safeString2(methodOptions, 'defaultType', 'type', methodType);\n }\n }\n const marketType = (market === undefined) ? methodType : market['type'];\n const type = this.safeString2(params, 'defaultType', 'type', marketType);\n params = this.omit(params, ['defaultType', 'type']);\n return [type, params];\n }\n handleSubTypeAndParams(methodName, market = undefined, params = {}, defaultValue = undefined) {\n let subType = undefined;\n // if set in params, it takes precedence\n const subTypeInParams = this.safeString2(params, 'subType', 'defaultSubType');\n // avoid omitting if it's not present\n if (subTypeInParams !== undefined) {\n subType = subTypeInParams;\n params = this.omit(params, ['subType', 'defaultSubType']);\n }\n else {\n // at first, check from market object\n if (market !== undefined) {\n if (market['linear']) {\n subType = 'linear';\n }\n else if (market['inverse']) {\n subType = 'inverse';\n }\n }\n // if it was not defined in market object\n if (subType === undefined) {\n const values = this.handleOptionAndParams({}, methodName, 'subType', defaultValue); // no need to re-test params here\n subType = values[0];\n }\n }\n return [subType, params];\n }\n handleMarginModeAndParams(methodName, params = {}, defaultValue = undefined) {\n /**\n * @ignore\n * @method\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {Array} the marginMode in lowercase as specified by params[\"marginMode\"], params[\"defaultMarginMode\"] this.options[\"marginMode\"] or this.options[\"defaultMarginMode\"]\n */\n return this.handleOptionAndParams(params, methodName, 'marginMode', defaultValue);\n }\n throwExactlyMatchedException(exact, string, message) {\n if (string === undefined) {\n return;\n }\n if (string in exact) {\n const error = new exact[string]();\n if (error instanceof InvalidParamsError) {\n error.overwriteMessage(this.replaceErrorMessage(message)).addOriginalError(message);\n }\n throw error.addOriginalError(message || string).exchange(this.id);\n }\n }\n throwBroadlyMatchedException(broad, string, message) {\n const broadKey = this.findBroadlyMatchedKey(broad, string);\n if (broadKey !== undefined) {\n const error = new broad[broadKey]();\n if (error instanceof InvalidParamsError) {\n error.overwriteMessage(this.replaceErrorMessage(message));\n }\n throw error.addOriginalError(message || string).exchange(this.id);\n }\n }\n replaceErrorMessage(message) {\n if (!this.exceptions['messages'])\n return message;\n const newMessageKey = this.findBroadlyMatchedKey(this.exceptions['messages'], message);\n if (newMessageKey)\n return this.exceptions['messages'][newMessageKey];\n return message;\n }\n findBroadlyMatchedKey(broad, string) {\n if (!string)\n return undefined;\n // If a message contains dynamic data, they need to be replaced with a placeholder\n const separatorPlaceholder = '%%';\n const keys = Object.keys(broad);\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n // We need to check if the key is a part of the message without dynamic data\n if (key.includes(separatorPlaceholder)) {\n const subKeys = key.split(separatorPlaceholder);\n if (subKeys.every((subKey) => string.includes(subKey))) {\n return key;\n }\n }\n if (string.indexOf(key) >= 0) {\n return key;\n }\n }\n return undefined;\n }\n handleErrors(statusCode, statusText, url, method, responseHeaders, responseBody, response, requestHeaders, requestBody) {\n // it is a stub method that must be overrided in the derived exchange classes\n // throw new NotSupported (this.id + ' handleErrors() not implemented yet');\n return undefined;\n }\n calculateRateLimiterCost(api, method, path, params, config = {}) {\n return this.safeValue(config, 'cost', 1);\n }\n async fetchTicker(symbol, params = {}) {\n if (this.has['fetchTickers']) {\n await this.loadMarkets();\n const market = this.market(symbol);\n symbol = market['symbol'];\n const tickers = await this.fetchTickers([symbol], params);\n const ticker = this.safeDict(tickers, symbol);\n if (ticker === undefined) {\n throw new MarketError()\n .addMessage('fetchTickers() could not find a ticker for ' + symbol)\n .exchange(this.id);\n }\n else {\n return ticker;\n }\n }\n else {\n throw new ExchangeNotAllowedMethodError('fetchTicker').exchange(this.id);\n }\n }\n async fetchTickers(symbols = undefined, params = {}) {\n throw new ExchangeNotAllowedMethodError('fetchTickers').exchange(this.id);\n }\n async fetchOrderBooks(symbols = undefined, limit = undefined, params = {}) {\n throw new ExchangeNotAllowedMethodError('fetchOrderBooks').exchange(this.id);\n }\n async fetchOrder(id, symbol = undefined, params = {}) {\n throw new ExchangeNotAllowedMethodError('fetchOrder').exchange(this.id);\n }\n async fetchOrderStatus(id, symbol = undefined, params = {}) {\n // TODO: TypeScript: change method signature by replacing\n // Promise<string> with Promise<Order['status']>.\n const order = await this.fetchOrder(id, symbol, params);\n return order['status'];\n }\n async fetchUnifiedOrder(order, params = {}) {\n return await this.fetchOrder(this.safeString(order, 'id'), this.safeString(order, 'symbol'), params);\n }\n async createOrder(symbol, type, side, amount, price = undefined, params = {}) {\n throw new ExchangeNotAllowedMethodError('createOrder').exchange(this.id);\n }\n async createTrailingAmountOrder(symbol, type, side, amount, price = undefined, trailingAmount = undefined, trailingTriggerPrice = undefined, params = {}) {\n /**\n * @method\n * @name createTrailingAmountOrder\n * @description create a trailing order by providing the symbol, type, side, amount, price and trailingAmount\n * @param {string} symbol unified symbol of the market to create an order in\n * @param {string} type 'market' or 'limit'\n * @param {string} side 'buy' or 'sell'\n * @param {float} amount how much you want to trade in units of the base currency, or number of contracts\n * @param {float} [price] the price for the order to be filled at, in units of the quote currency, ignored in market orders\n * @param {float} trailingAmount the quote amount to trail away from the current market price\n * @param {float} [trailingTriggerPrice] the price to activate a trailing order, default uses the price argument\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n if (trailingAmount === undefined) {\n throw new InvalidParamsError('createTrailingAmountOrder() requires a trailingAmount argument')\n .exchange(this.id);\n }\n params['trailingAmount'] = trailingAmount;\n if (trailingTriggerPrice !== undefined) {\n params['trailingTriggerPrice'] = trailingTriggerPrice;\n }\n if (this.has['createTrailingAmountOrder']) {\n return await this.createOrder(symbol, type, side, amount, price, params);\n }\n throw new ExchangeNotAllowedMethodError('createTrailingAmountOrder').exchange(this.id);\n }\n async createTrailingPercentOrder(symbol, type, side, amount, price = undefined, trailingPercent = undefined, trailingTriggerPrice = undefined, params = {}) {\n /**\n * @method\n * @name createTrailingPercentOrder\n * @description create a trailing order by providing the symbol, type, side, amount, price and trailingPercent\n * @param {string} symbol unified symbol of the market to create an order in\n * @param {string} type 'market' or 'limit'\n * @param {string} side 'buy' or 'sell'\n * @param {float} amount how much you want to trade in units of the base currency, or number of contracts\n * @param {float} [price] the price for the order to be filled at, in units of the quote currency, ignored in market orders\n * @param {float} trailingPercent the percent to trail away from the current market price\n * @param {float} [trailingTriggerPrice] the price to activate a trailing order, default uses the price argument\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n if (trailingPercent === undefined) {\n throw new InvalidParamsError('createTrailingPercentOrder() requires a trailingPercent argument')\n .exchange(this.id);\n }\n params['trailingPercent'] = trailingPercent;\n if (trailingTriggerPrice !== undefined) {\n params['trailingTriggerPrice'] = trailingTriggerPrice;\n }\n if (this.has['createTrailingPercentOrder']) {\n return await this.createOrder(symbol, type, side, amount, price, params);\n }\n throw new ExchangeNotAllowedMethodError('createTrailingPercentOrder').exchange(this.id);\n }\n async createMarketOrderWithCost(symbol, side, cost, params = {}) {\n /**\n * @method\n * @name createMarketOrderWithCost\n * @description create a market order by providing the symbol, side and cost\n * @param {string} symbol unified symbol of the market to create an order in\n * @param {string} side 'buy' or 'sell'\n * @param {float} cost how much you want to trade in units of the quote currency\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n if (this.has['createMarketOrderWithCost'] || (this.has['createMarketBuyOrderWithCost'] && this.has['createMarketSellOrderWithCost'])) {\n return await this.createOrder(symbol, 'market', side, cost, 1, params);\n }\n throw new ExchangeNotAllowedMethodError('createMarketOrderWithCost').exchange(this.id);\n }\n async createMarketBuyOrderWithCost(symbol, cost, params = {}) {\n /**\n * @method\n * @name createMarketBuyOrderWithCost\n * @description create a market buy order by providing the symbol and cost\n * @param {string} symbol unified symbol of the market to create an order in\n * @param {float} cost how much you want to trade in units of the quote currency\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n if (this.options['createMarketBuyOrderRequiresPrice'] || this.has['createMarketBuyOrderWithCost']) {\n return await this.createOrder(symbol, 'market', 'buy', cost, 1, params);\n }\n throw new ExchangeNotAllowedMethodError('createMarketBuyOrderWithCost').exchange(this.id);\n }\n async createMarketSellOrderWithCost(symbol, cost, params = {}) {\n /**\n * @method\n * @name createMarketSellOrderWithCost\n * @description create a market sell order by providing the symbol and cost\n * @param {string} symbol unified symbol of the market to create an order in\n * @param {float} cost how much you want to trade in units of the quote currency\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n if (this.options['createMarketSellOrderRequiresPrice'] || this.has['createMarketSellOrderWithCost']) {\n return await this.createOrder(symbol, 'market', 'sell', cost, 1, params);\n }\n throw new ExchangeNotAllowedMethodError('createMarketSellOrderWithCost').exchange(this.id);\n }\n async createTriggerOrder(symbol, type, side, amount, price = undefined, triggerPrice = undefined, params = {}) {\n /**\n * @method\n * @name createTriggerOrder\n * @description create a trigger stop order (type 1)\n * @param {string} symbol unified symbol of the market to create an order in\n * @param {string} type 'market' or 'limit'\n * @param {string} side 'buy' or 'sell'\n * @param {float} amount how much you want to trade in units of the base currency or the number of contracts\n * @param {float} [price] the price to fulfill the order, in units of the quote currency, ignored in market orders\n * @param {float} triggerPrice the price to trigger the stop order, in units of the quote currency\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n if (triggerPrice === undefined) {\n throw new InvalidParamsError('createTriggerOrder() requires a triggerPrice argument').exchange(this.id);\n }\n params['triggerPrice'] = triggerPrice;\n if (this.has['createTriggerOrder']) {\n return await this.createOrder(symbol, type, side, amount, price, params);\n }\n throw new ExchangeNotAllowedMethodError('createTriggerOrder').exchange(this.id);\n }\n async createStopLossOrder(symbol, type, side, amount, price = undefined, stopLossPrice = undefined, params = {}) {\n /**\n * @method\n * @name createStopLossOrder\n * @description create a trigger stop loss order (type 2)\n * @param {string} symbol unified symbol of the market to create an order in\n * @param {string} type 'market' or 'limit'\n * @param {string} side 'buy' or 'sell'\n * @param {float} amount how much you want to trade in units of the base currency or the number of contracts\n * @param {float} [price] the price to fulfill the order, in units of the quote currency, ignored in market orders\n * @param {float} stopLossPrice the price to trigger the stop loss order, in units of the quote currency\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n if (stopLossPrice === undefined) {\n throw new InvalidParamsError('createStopLossOrder() requires a stopLossPrice argument').exchange(this.id);\n }\n params['stopLossPrice'] = stopLossPrice;\n if (this.has['createStopLossOrder']) {\n return await this.createOrder(symbol, type, side, amount, price, params);\n }\n throw new ExchangeNotAllowedMethodError('createStopLossOrder').exchange(this.id);\n }\n async createTakeProfitOrder(symbol, type, side, amount, price = undefined, takeProfitPrice = undefined, params = {}) {\n /**\n * @method\n * @name createTakeProfitOrder\n * @description create a trigger take profit order (type 2)\n * @param {string} symbol unified symbol of the market to create an order in\n * @param {string} type 'market' or 'limit'\n * @param {string} side 'buy' or 'sell'\n * @param {float} amount how much you want to trade in units of the base currency or the number of contracts\n * @param {float} [price] the price to fulfill the order, in units of the quote currency, ignored in market orders\n * @param {float} takeProfitPrice the price to trigger the take profit order, in units of the quote currency\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n if (takeProfitPrice === undefined) {\n throw new InvalidParamsError('createTakeProfitOrder() requires a takeProfitPrice argument').exchange(this.id);\n }\n params['takeProfitPrice'] = takeProfitPrice;\n if (this.has['createTakeProfitOrder']) {\n return await this.createOrder(symbol, type, side, amount, price, params);\n }\n throw new ExchangeNotAllowedMethodError('createTakeProfitOrder').exchange(this.id);\n }\n async createOrderWithTakeProfitAndStopLoss(symbol, type, side, amount, price = undefined, takeProfit = undefined, stopLoss = undefined, params = {}) {\n /**\n * @method\n * @name createOrderWithTakeProfitAndStopLoss\n * @description create an order with a stop loss or take profit attached (type 3)\n * @param {string} symbol unified symbol of the market to create an order in\n * @param {string} type 'market' or 'limit'\n * @param {string} side 'buy' or 'sell'\n * @param {float} amount how much you want to trade in units of the base currency or the number of contracts\n * @param {float} [price] the price to fulfill the order, in units of the quote currency, ignored in market orders\n * @param {float} [takeProfit] the take profit price, in units of the quote currency\n * @param {float} [stopLoss] the stop loss price, in units of the quote currency\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {string} [params.takeProfitType] *not available on all exchanges* 'limit' or 'market'\n * @param {string} [params.stopLossType] *not available on all exchanges* 'limit' or 'market'\n * @param {string} [params.takeProfitPriceType] *not available on all exchanges* 'last', 'mark' or 'index'\n * @param {string} [params.stopLossPriceType] *not available on all exchanges* 'last', 'mark' or 'index'\n * @param {float} [params.takeProfitLimitPrice] *not available on all exchanges* limit price for a limit take profit order\n * @param {float} [params.stopLossLimitPrice] *not available on all exchanges* stop loss for a limit stop loss order\n * @param {float} [params.takeProfitAmount] *not available on all exchanges* the amount for a take profit\n * @param {float} [params.stopLossAmount] *not available on all exchanges* the amount for a stop loss\n * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n if ((takeProfit === undefined) && (stopLoss === undefined)) {\n throw new InvalidParamsError('createOrderWithTakeProfitAndStopLoss() requires either a takeProfit or stopLoss argument')\n .exchange(this.id);\n }\n if (takeProfit !== undefined) {\n params['takeProfit'] = {\n 'triggerPrice': takeProfit,\n };\n }\n if (stopLoss !== undefined) {\n params['stopLoss'] = {\n 'triggerPrice': stopLoss,\n };\n }\n const takeProfitType = this.safeString(params, 'takeProfitType');\n const takeProfitPriceType = this.safeString(params, 'takeProfitPriceType');\n const takeProfitLimitPrice = this.safeString(params, 'takeProfitLimitPrice');\n const takeProfitAmount = this.safeString(params, 'takeProfitAmount');\n const stopLossType = this.safeString(params, 'stopLossType');\n const stopLossPriceType = this.safeString(params, 'stopLossPriceType');\n const stopLossLimitPrice = this.safeString(params, 'stopLossLimitPrice');\n const stopLossAmount = this.safeString(params, 'stopLossAmount');\n if (takeProfitType !== undefined) {\n params['takeProfit']['type'] = takeProfitType;\n }\n if (takeProfitPriceType !== undefined) {\n params['takeProfit']['priceType'] = takeProfitPriceType;\n }\n if (takeProfitLimitPrice !== undefined) {\n params['takeProfit']['price'] = this.parseToNumeric(takeProfitLimitPrice);\n }\n if (takeProfitAmount !== undefined) {\n params['takeProfit']['amount'] = this.parseToNumeric(takeProfitAmount);\n }\n if (stopLossType !== undefined) {\n params['stopLoss']['type'] = stopLossType;\n }\n if (stopLossPriceType !== undefined) {\n params['stopLoss']['priceType'] = stopLossPriceType;\n }\n if (stopLossLimitPrice !== undefined) {\n params['stopLoss']['price'] = this.parseToNumeric(stopLossLimitPrice);\n }\n if (stopLossAmount !== undefined) {\n params['stopLoss']['amount'] = this.parseToNumeric(stopLossAmount);\n }\n params = this.omit(params, ['takeProfitType', 'takeProfitPriceType', 'takeProfitLimitPrice', 'takeProfitAmount', 'stopLossType', 'stopLossPriceType', 'stopLossLimitPrice', 'stopLossAmount']);\n if (this.has['createOrderWithTakeProfitAndStopLoss']) {\n return await this.createOrder(symbol, type, side, amount, price, params);\n }\n throw new ExchangeNotAllowedMethodError('createOrderWithTakeProfitAndStopLoss').exchange(this.id);\n }\n async createOrders(orders, params = {}) {\n throw new ExchangeNotAllowedMethodError('createOrders').exchange(this.id);\n }\n async cancelOrder(id, symbol = undefined, params = {}) {\n throw new ExchangeNotAllowedMethodError('cancelOrder').exchange(this.id);\n }\n async cancelAllOrders(symbol = undefined, params = {}) {\n throw new ExchangeNotAllowedMethodError('cancelAllOrders').exchange(this.id);\n }\n async cancelUnifiedOrder(order, params = {}) {\n return this.cancelOrder(this.safeString(order, 'id'), this.safeString(order, 'symbol'), params);\n }\n async fetchOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {\n if (this.has['fetchOpenOrders'] && this.has['fetchClosedOrders']) {\n throw new ExchangeNotAllowedMethodError('fetchOrders')\n .addMessage('Consider using fetchOpenOrders() and fetchClosedOrders() instead')\n .exchange(this.id);\n }\n throw new ExchangeNotAllowedMethodError('fetchOrders').exchange(this.id);\n }\n async fetchOrderTrades(id, symbol = undefined, since = undefined, limit = undefined, params = {}) {\n throw new ExchangeNotAllowedMethodError('fetchOrderTrades').exchange(this.id);\n }\n async fetchOpenOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {\n if (this.has['fetchOrders']) {\n const orders = await this.fetchOrders(symbol, since, limit, params);\n return this.filterBy(orders, 'status', 'open');\n }\n throw new ExchangeNotAllowedMethodError('fetchOpenOrders').exchange(this.id);\n }\n async fetchClosedOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {\n if (this.has['fetchOrders']) {\n const orders = await this.fetchOrders(symbol, since, limit, params);\n return this.filterBy(orders, 'status', 'closed');\n }\n throw new ExchangeNotAllowedMethodError('fetchClosedOrders').exchange(this.id);\n }\n async fetchCanceledAndClosedOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {\n throw new ExchangeNotAllowedMethodError('fetchCanceledAndClosedOrders').exchange(this.id);\n }\n async fetchMyTrades(symbol = undefined, since = undefined, limit = undefined, params = {}) {\n throw new ExchangeNotAllowedMethodError('fetchMyTrades').exchange(this.id);\n }\n async fetchDepositsWithdrawals(code = undefined, since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name exchange#fetchDepositsWithdrawals\n * @description fetch history of deposits and withdrawals\n * @param {string} [code] unified currency code for the currency of the deposit/withdrawals, default is undefined\n * @param {int} [since] timestamp in ms of the earliest deposit/withdrawal, default is undefined\n * @param {int} [limit] max number of deposit/withdrawals to return, default is undefined\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} a list of [transaction structures]{@link https://docs.ccxt.com/#/?id=transaction-structure}\n */\n throw new ExchangeNotAllowedMethodError('fetchDepositsWithdrawals').exchange(this.id);\n }\n async fetchDeposits(symbol = undefined, since = undefined, limit = undefined, params = {}) {\n throw new ExchangeNotAllowedMethodError('fetchDeposits').exchange(this.id);\n }\n async fetchWithdrawals(symbol = undefined, since = undefined, limit = undefined, params = {}) {\n throw new ExchangeNotAllowedMethodError('fetchWithdrawals').exchange(this.id);\n }\n parseLastPrice(price, market = undefined) {\n throw new ExchangeNotAllowedMethodError('parseLastPrice').exchange(this.id);\n }\n async fetchDepositAddress(code, params = {}) {\n if (this.has['fetchDepositAddresses']) {\n const depositAddresses = await this.fetchDepositAddresses([code], params);\n const depositAddress = this.safeValue(depositAddresses, code);\n if (depositAddress === undefined) {\n throw new GetDepositAddressError(code)\n .addMessage('Make sure you have created a corresponding deposit address in your wallet on the exchange website')\n .exchange(this.id);\n }\n else {\n return depositAddress;\n }\n }\n else {\n throw new ExchangeNotAllowedMethodError('fetchDepositAddress').exchange(this.id);\n }\n }\n account() {\n return {\n 'free': undefined,\n 'used': undefined,\n 'total': undefined,\n };\n }\n getCodeFromCurrencyId(currencyId) {\n if (!this.tokensMapping || !Array.isArray(this.tokensMapping))\n return currencyId;\n const standardisedTokenSymbol = this.tokensMapping.find((tokenMappingItem) => tokenMappingItem.currencyId === currencyId);\n return standardisedTokenSymbol?.code || currencyId;\n }\n currency(code) {\n if (this.currencies === undefined) {\n throw new InternalError().addMessage('Currencies not loaded').exchange(this.id);\n }\n if (typeof code === 'string') {\n if (code in this.currencies) {\n return this.currencies[code];\n }\n else if (code in this.currencies_by_id) {\n return this.currencies_by_id[code];\n }\n }\n throw new ExchangeUnknownAssetError(code).exchange(this.id);\n }\n market(symbol) {\n if (this.markets === undefined) {\n throw new MarketNotLoadedError().exchange(this.id);\n }\n if (symbol in this.markets) {\n return this.markets[symbol];\n }\n else if (symbol in this.markets_by_id) {\n const markets = this.markets_by_id[symbol];\n const defaultType = this.safeString2(this.options, 'defaultType', 'defaultSubType', 'spot');\n for (let i = 0; i < markets.length; i++) {\n const market = markets[i];\n if (market[defaultType]) {\n return market;\n }\n }\n return markets[0];\n }\n else if ((symbol.endsWith('-C')) || (symbol.endsWith('-P')) || (symbol.startsWith('C-')) || (symbol.startsWith('P-'))) {\n return this.createExpiredOptionMarket(symbol);\n }\n throw new MarketNotFoundError(symbol).exchange(this.id);\n }\n createExpiredOptionMarket(symbol) {\n throw new ExchangeNotAllowedMethodError('createExpiredOptionMarket').exchange(this.id);\n }\n handleWithdrawTagAndParams(tag, params) {\n if ((tag !== undefined) && (typeof tag === 'object')) {\n params = this.extend(tag, params);\n tag = undefined;\n }\n if (tag === undefined) {\n tag = this.safeString(params, 'tag');\n if (tag !== undefined) {\n params = this.omit(params, 'tag');\n }\n }\n return [tag, params];\n }\n async createLimitOrder(symbol, side, amount, price, params = {}) {\n return await this.createOrder(symbol, 'limit', side, amount, price, params);\n }\n async createMarketOrder(symbol, side, amount, price = undefined, params = {}) {\n return await this.createOrder(symbol, 'market', side, amount, price, params);\n }\n async createLimitBuyOrder(symbol, amount, price, params = {}) {\n return await this.createOrder(symbol, 'limit', 'buy', amount, price, params);\n }\n async createLimitSellOrder(symbol, amount, price, params = {}) {\n return await this.createOrder(symbol, 'limit', 'sell', amount, price, params);\n }\n async createMarketBuyOrder(symbol, amount, params = {}) {\n return await this.createOrder(symbol, 'market', 'buy', amount, undefined, params);\n }\n async createMarketSellOrder(symbol, amount, params = {}) {\n return await this.createOrder(symbol, 'market', 'sell', amount, undefined, params);\n }\n costToPrecision(symbol, cost) {\n const market = this.market(symbol);\n return this.decimalToPrecision(cost, TRUNCATE, market['precision']['price'], this.precisionMode, this.paddingMode);\n }\n priceToPrecision(symbol, price) {\n const market = this.market(symbol);\n const result = this.decimalToPrecision(price, ROUND, market['precision']['price'], this.precisionMode, this.paddingMode);\n if (result === '0') {\n throw new InvalidParamsError('Price of ' + market['symbol'] + ' must be greater than minimum price precision of ' + this.numberToString(market['precision']['price']))\n .exchange(this.id);\n }\n return result;\n }\n amountToPrecision(symbol, amount) {\n const market = this.market(symbol);\n const result = this.decimalToPrecision(amount, TRUNCATE, market['precision']['amount'], this.precisionMode, this.paddingMode);\n if (result === '0') {\n throw new InvalidParamsError('Amount of ' + market['symbol'] + ' must be greater than minimum amount precision of ' + this.numberToString(market['precision']['amount']))\n .exchange(this.id);\n }\n return result;\n }\n feeToPrecision(symbol, fee) {\n const market = this.market(symbol);\n return this.decimalToPrecision(fee, ROUND, market['precision']['price'], this.precisionMode, this.paddingMode);\n }\n currencyToPrecision(code, fee, networkCode = undefined, disableThreshold = false) {\n const currency = this.currencies[code];\n let precision = this.safeValue(currency, 'precision');\n if (networkCode !== undefined) {\n const networks = this.safeDict(currency, 'networks', {});\n const networkItem = this.safeDict(networks, networkCode, {});\n precision = this.safeValue(networkItem, 'precision', precision);\n }\n if (precision === undefined) {\n return this.forceString(fee);\n }\n else {\n const result = this.decimalToPrecision(fee, TRUNCATE, precision, this.precisionMode, this.paddingMode, disableThreshold);\n return result;\n }\n }\n forceString(value) {\n if (typeof value !== 'string') {\n return this.numberToString(value);\n }\n return value;\n }\n isTickPrecision() {\n return this.precisionMode === TICK_SIZE;\n }\n isDecimalPrecision() {\n return this.precisionMode === DECIMAL_PLACES;\n }\n isSignificantPrecision() {\n return this.precisionMode === SIGNIFICANT_DIGITS;\n }\n safeNumber(obj, key, defaultNumber = undefined) {\n const value = this.safeString(obj, key);\n return this.parseNumber(value, defaultNumber);\n }\n safeNumberN(obj, arr, defaultNumber = undefined) {\n const value = this.safeStringN(obj, arr);\n return this.parseNumber(value, defaultNumber);\n }\n parsePrecision(precision) {\n /**\n * @ignore\n * @method\n * @param {string} precision The number of digits to the right of the decimal\n * @returns {string} a string number equal to 1e-precision\n */\n if (precision === undefined) {\n return undefined;\n }\n const precisionNumber = parseInt(precision);\n if (precisionNumber === 0) {\n return '1';\n }\n let parsedPrecision = '0.';\n for (let i = 0; i < precisionNumber - 1; i++) {\n parsedPrecision = parsedPrecision + '0';\n }\n return parsedPrecision + '1';\n }\n async loadTimeDifference(params = {}) {\n const timeDifference = (await this.cache.get(timeDifferenceCacheIdentifier(this.id), { 'local': true }))?.data;\n if (timeDifference !== undefined) {\n this.options['timeDifference'] = timeDifference;\n return timeDifference;\n }\n const serverTime = await this.fetchTime(params);\n const after = this.milliseconds();\n this.options['timeDifference'] = after - serverTime;\n this.cache.set({\n 'key': timeDifferenceCacheIdentifier(this.id),\n 'data': this.options['timeDifference'],\n 'ttl': Infinity,\n 'local': true,\n });\n return this.options['timeDifference'];\n }\n implodeHostname(url) {\n return this.implodeParams(url, { 'hostname': this.hostname });\n }\n safeCurrencyCode(currencyId, currency = undefined) {\n currency = this.safeCurrency(currencyId, currency);\n return currency['code'];\n }\n filterBySymbolSinceLimit(array, symbol = undefined, since = undefined, limit = undefined, tail = false) {\n return this.filterByValueSinceLimit(array, 'symbol', symbol, since, limit, 'timestamp', tail);\n }\n filterByCurrencySinceLimit(array, code = undefined, since = undefined, limit = undefined, tail = false) {\n return this.filterByValueSinceLimit(array, 'currency', code, since, limit, 'timestamp', tail);\n }\n filterBySymbolsSinceLimit(array, symbols = undefined, since = undefined, limit = undefined, tail = false) {\n const result = this.filterByArray(array, 'symbol', symbols, false);\n return this.filterBySinceLimit(result, since, limit, 'timestamp', tail);\n }\n parseTickers(tickers, symbols = undefined, params = {}) {\n //\n // the value of tickers is either a dict or a list\n //\n // dict\n //\n // {\n // 'marketId1': { ... },\n // 'marketId2': { ... },\n // 'marketId3': { ... },\n // ...\n // }\n //\n // list\n //\n // [\n // { 'market': 'marketId1', ... },\n // { 'market': 'marketId2', ... },\n // { 'market': 'marketId3', ... },\n // ...\n // ]\n //\n const results = [];\n if (Array.isArray(tickers)) {\n for (let i = 0; i < tickers.length; i++) {\n const ticker = this.extend(this.parseTicker(tickers[i]), params);\n results.push(ticker);\n }\n }\n else {\n const marketIds = Object.keys(tickers);\n for (let i = 0; i < marketIds.length; i++) {\n const marketId = marketIds[i];\n const market = this.safeMarket(marketId);\n const ticker = this.extend(this.parseTicker(tickers[marketId], market), params);\n results.push(ticker);\n }\n }\n symbols = this.marketSymbols(symbols);\n return this.filterByArray(results, 'symbol', symbols);\n }\n parseDepositAddresses(addresses, codes = undefined, indexed = true, params = {}) {\n let result = [];\n for (let i = 0; i < addresses.length; i++) {\n const address = this.extend(this.parseDepositAddress(addresses[i]), params);\n result.push(address);\n }\n if (codes !== undefined) {\n result = this.filterByArray(result, 'currency', codes, false);\n }\n if (indexed) {\n return this.indexBy(result, 'currency');\n }\n return result;\n }\n safeSymbol(marketId, market = undefined, delimiter = undefined, marketType = undefined) {\n market = this.safeMarket(marketId, market, delimiter, marketType);\n return market['symbol'];\n }\n isTriggerOrder(params) {\n const isTrigger = this.safeBool2(params, 'trigger', 'stop');\n if (isTrigger) {\n params = this.omit(params, ['trigger', 'stop']);\n }\n return [isTrigger, params];\n }\n isPostOnly(isMarketOrder, exchangeSpecificParam, params = {}) {\n /**\n * @ignore\n * @method\n * @param {string} type Order type\n * @param {boolean} exchangeSpecificParam exchange specific postOnly\n * @param {object} [params] exchange specific params\n * @returns {boolean} true if a post only order, false otherwise\n */\n const timeInForce = this.safeStringUpper(params, 'timeInForce');\n let postOnly = this.safeBool2(params, 'postOnly', 'post_only', false);\n // we assume timeInForce is uppercase from safeStringUpper (params, 'timeInForce')\n const ioc = timeInForce === 'IOC';\n const fok = timeInForce === 'FOK';\n const timeInForcePostOnly = timeInForce === 'PO';\n postOnly = postOnly || timeInForcePostOnly || exchangeSpecificParam;\n if (postOnly) {\n if (ioc || fok) {\n throw new InvalidParamsError('postOnly orders cannot have timeInForce equal to ' + timeInForce)\n .exchange(this.id);\n }\n else if (isMarketOrder) {\n throw new InvalidParamsError('market orders cannot be postOnly')\n .exchange(this.id);\n }\n else {\n return true;\n }\n }\n else {\n return false;\n }\n }\n handlePostOnly(isMarketOrder, exchangeSpecificPostOnlyOption, params = {}) {\n /**\n * @ignore\n * @method\n * @param {string} type Order type\n * @param {boolean} exchangeSpecificBoolean exchange specific postOnly\n * @param {object} [params] exchange specific params\n * @returns {Array}\n */\n const timeInForce = this.safeStringUpper(params, 'timeInForce');\n let postOnly = this.safeBool(params, 'postOnly', false);\n const ioc = timeInForce === 'IOC';\n const fok = timeInForce === 'FOK';\n const po = timeInForce === 'PO';\n postOnly = postOnly || po || exchangeSpecificPostOnlyOption;\n if (postOnly) {\n if (ioc || fok) {\n throw new InvalidParamsError('postOnly orders cannot have timeInForce equal to ' + timeInForce)\n .exchange(this.id);\n }\n else if (isMarketOrder) {\n throw new InvalidParamsError('market orders cannot be postOnly').exchange(this.id);\n }\n else {\n if (po) {\n params = this.omit(params, 'timeInForce');\n }\n params = this.omit(params, 'postOnly');\n return [true, params];\n }\n }\n return [false, params];\n }\n async fetchTradingFees(params = {}) {\n throw new ExchangeNotAllowedMethodError('fetchTradingFees').exchange(this.id);\n }\n async fetchTradingFee(symbol, params = {}) {\n if (!this.has['fetchTradingFees']) {\n throw new ExchangeNotAllowedMethodError('fetchTradingFee').exchange(this.id);\n }\n return await this.fetchTradingFees(params);\n }\n handleTimeInForce(params = {}) {\n /**\n * @ignore\n * @method\n * Must add timeInForce to this.options to use this method\n * @returns {string} returns the exchange specific value for timeInForce\n */\n const timeInForce = this.safeStringUpper(params, 'timeInForce'); // supported values GTC, IOC, PO\n if (timeInForce !== undefined) {\n const exchangeValue = this.safeString(this.options['timeInForce'], timeInForce);\n if (exchangeValue === undefined) {\n throw new InvalidParamsError('It does not support timeInForce \"' + timeInForce + '\"')\n .exchange(this.id);\n }\n return exchangeValue;\n }\n return undefined;\n }\n convertTypeToAccount(account) {\n /**\n * @ignore\n * @method\n * Must add accountsByType to this.options to use this method\n * @param {string} account key for account name in this.options['accountsByType']\n * @returns the exchange specific account name or the isolated margin id for transfers\n */\n const accountsByType = this.safeDict(this.options, 'accountsByType', {});\n const lowercaseAccount = account.toLowerCase();\n if (lowercaseAccount in accountsByType) {\n return accountsByType[lowercaseAccount];\n }\n else if ((account in this.markets) || (account in this.markets_by_id)) {\n const market = this.market(account);\n return market['id'];\n }\n else {\n return account;\n }\n }\n checkRequiredArgument(methodName, argument, argumentName, options = []) {\n /**\n * @ignore\n * @method\n * @param {string} methodName the name of the method that the argument is being checked for\n * @param {string} argument the argument's actual value provided\n * @param {string} argumentName the name of the argument being checked (for logging purposes)\n * @param {string[]} options a list of options that the argument can be\n * @returns {undefined}\n */\n const optionsLength = options.length;\n if ((argument === undefined) || ((optionsLength > 0) && (!(this.inArray(argument, options))))) {\n const messageOptions = options.join(', ');\n let message = this.id + ' ' + methodName + '() requires a ' + argumentName + ' argument';\n if (messageOptions !== '') {\n message += ', one of ' + '(' + messageOptions + ')';\n }\n throw new InvalidParamsError(message).exchange(this.id);\n }\n }\n parseDepositWithdrawFees(response, codes = undefined, currencyIdKey = undefined) {\n /**\n * @ignore\n * @method\n * @param {object[]|object} response unparsed response from the exchange\n * @param {string[]|undefined} codes the unified currency codes to fetch transactions fees for, returns all currencies when undefined\n * @param {str} currencyIdKey *should only be undefined when response is a dictionary* the object key that corresponds to the currency id\n * @returns {object} objects with withdraw and deposit fees, indexed by currency codes\n */\n const depositWithdrawFees = {};\n codes = this.marketCodes(codes);\n const isArray = Array.isArray(response);\n let responseKeys = response;\n if (!isArray) {\n responseKeys = Object.keys(response);\n }\n for (let i = 0; i < responseKeys.length; i++) {\n const entry = responseKeys[i];\n const dictionary = isArray ? entry : response[entry];\n const currencyId = isArray ? this.safeString(dictionary, currencyIdKey) : entry;\n const currency = this.safeValue(this.currencies_by_id, currencyId);\n const code = this.safeString(currency, 'code', currencyId);\n if ((codes === undefined) || (this.inArray(code, codes))) {\n depositWithdrawFees[code] = this.parseDepositWithdrawFee(dictionary, currency);\n }\n }\n return depositWithdrawFees;\n }\n parseDepositWithdrawFee(fee, currency = undefined) {\n throw new ExchangeNotAllowedMethodError('parseDepositWithdrawFee').exchange(this.id);\n }\n depositWithdrawFee(info) {\n return {\n 'info': info,\n 'withdraw': {\n 'fee': undefined,\n 'percentage': undefined,\n },\n 'deposit': {\n 'fee': undefined,\n 'percentage': undefined,\n },\n 'networks': {},\n };\n }\n assignDefaultDepositWithdrawFees(fee, currency = undefined) {\n /**\n * @ignore\n * @method\n * @description Takes a depositWithdrawFee structure and assigns the default values for withdraw and deposit\n * @param {object} fee A deposit withdraw fee structure\n * @param {object} currency A currency structure, the response from this.currency ()\n * @returns {object} A deposit withdraw fee structure\n */\n const networkKeys = Object.keys(fee['networks']);\n const numNetworks = networkKeys.length;\n if (numNetworks === 1) {\n fee['withdraw'] = fee['networks'][networkKeys[0]]['withdraw'];\n fee['deposit'] = fee['networks'][networkKeys[0]]['deposit'];\n return fee;\n }\n const currencyCode = this.safeString(currency, 'code');\n for (let i = 0; i < numNetworks; i++) {\n const network = networkKeys[i];\n if (network === currencyCode) {\n fee['withdraw'] = fee['networks'][networkKeys[i]]['withdraw'];\n fee['deposit'] = fee['networks'][networkKeys[i]]['deposit'];\n }\n }\n return fee;\n }\n getMarketFromSymbols(symbols = undefined) {\n if (symbols === undefined) {\n return undefined;\n }\n const firstMarket = this.safeString(symbols, 0);\n const market = this.market(firstMarket);\n return market;\n }\n async fetchTransactions(code = undefined, since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name exchange#fetchTransactions\n * @deprecated\n * @description *DEPRECATED* use fetchDepositsWithdrawals instead\n * @param {string} code unified currency code for the currency of the deposit/withdrawals, default is undefined\n * @param {int} [since] timestamp in ms of the earliest deposit/withdrawal, default is undefined\n * @param {int} [limit] max number of deposit/withdrawals to return, default is undefined\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} a list of [transaction structures]{@link https://docs.ccxt.com/#/?id=transaction-structure}\n */\n if (this.has['fetchDepositsWithdrawals']) {\n return await this.fetchDepositsWithdrawals(code, since, limit, params);\n }\n else {\n throw new ExchangeNotAllowedMethodError('fetchTransactions').exchange(this.id);\n }\n }\n filterByArrayPositions(objects, key, values = undefined, indexed = true) {\n /**\n * @ignore\n * @method\n * @description Typed wrapper for filterByArray that returns a list of positions\n */\n return this.filterByArray(objects, key, values, indexed);\n }\n filterByArrayTickers(objects, key, values = undefined, indexed = true) {\n /**\n * @ignore\n * @method\n * @description Typed wrapper for filterByArray that returns a dictionary of tickers\n */\n return this.filterByArray(objects, key, values, indexed);\n }\n handleMaxEntriesPerRequestAndParams(method, maxEntriesPerRequest = undefined, params = {}) {\n let newMaxEntriesPerRequest = undefined;\n [newMaxEntriesPerRequest, params] = this.handleOptionAndParams(params, method, 'maxEntriesPerRequest');\n if ((newMaxEntriesPerRequest !== undefined) && (newMaxEntriesPerRequest !== maxEntriesPerRequest)) {\n maxEntriesPerRequest = newMaxEntriesPerRequest;\n }\n if (maxEntriesPerRequest === undefined) {\n maxEntriesPerRequest = 1000; // default to 1000\n }\n return [maxEntriesPerRequest, params];\n }\n async fetchPaginatedCallDynamic(method, symbol = undefined, since = undefined, limit = undefined, params = {}, maxEntriesPerRequest = undefined) {\n let maxCalls = undefined;\n [maxCalls, params] = this.handleOptionAndParams(params, method, 'paginationCalls', 10);\n let maxRetries = undefined;\n [maxRetries, params] = this.handleOptionAndParams(params, method, 'maxRetries', 3);\n let paginationDirection = undefined;\n [paginationDirection, params] = this.handleOptionAndParams(params, method, 'paginationDirection', 'backward');\n let paginationTimestamp = undefined;\n let calls = 0;\n let result = [];\n let errors = 0;\n const until = this.safeInteger2(params, 'untill', 'till'); // do not omit it from params here\n [maxEntriesPerRequest, params] = this.handleMaxEntriesPerRequestAndParams(method, maxEntriesPerRequest, params);\n if ((paginationDirection === 'forward')) {\n if (since === undefined) {\n throw new InvalidParamsError('Pagination requires a since argument when paginationDirection set to forward').exchange(this.id);\n }\n paginationTimestamp = since;\n }\n while ((calls < maxCalls)) {\n calls += 1;\n try {\n if (paginationDirection === 'backward') {\n // do it backwards, starting from the last\n // UNTIL filtering is required in order to work\n if (paginationTimestamp !== undefined) {\n params['until'] = paginationTimestamp - 1;\n }\n const response = await this[method](symbol, undefined, maxEntriesPerRequest, params);\n const responseLength = response.length;\n if (this.verbose) {\n const backwardMessage = 'Dynamic pagination call ' + calls + ' method ' + method + ' response length ' + responseLength + ' timestamp ' + paginationTimestamp;\n this.log(backwardMessage);\n }\n if (responseLength === 0) {\n break;\n }\n errors = 0;\n result = this.arrayConcat(result, response);\n const firstElement = this.safeValue(response, 0);\n paginationTimestamp = this.safeInteger2(firstElement, 'timestamp', 0);\n if ((since !== undefined) && (paginationTimestamp <= since)) {\n break;\n }\n }\n else {\n // do it forwards, starting from the since\n const response = await this[method](symbol, paginationTimestamp, maxEntriesPerRequest, params);\n const responseLength = response.length;\n if (this.verbose) {\n const forwardMessage = 'Dynamic pagination call ' + calls + ' method ' + method + ' response length ' + responseLength + ' timestamp ' + paginationTimestamp;\n this.log(forwardMessage);\n }\n if (responseLength === 0) {\n break;\n }\n errors = 0;\n result = this.arrayConcat(result, response);\n const last = this.safeValue(response, responseLength - 1);\n paginationTimestamp = this.safeInteger(last, 'timestamp') - 1;\n if ((until !== undefined) && (paginationTimestamp >= until)) {\n break;\n }\n }\n }\n catch (e) {\n errors += 1;\n if (errors > maxRetries) {\n throw e;\n }\n }\n }\n const uniqueResults = this.removeRepeatedElementsFromArray(result);\n const key = (method === 'fetchOHLCV') ? 0 : 'timestamp';\n return this.filterBySinceLimit(uniqueResults, since, limit, key);\n }\n async safeDeterministicCall(method, symbol = undefined, since = undefined, limit = undefined, timeframe = undefined, params = {}) {\n let maxRetries = undefined;\n [maxRetries, params] = this.handleOptionAndParams(params, method, 'maxRetries', 3);\n let errors = 0;\n try {\n if (timeframe) {\n return await this[method](symbol, timeframe, since, limit, params);\n }\n else {\n return await this[method](symbol, since, limit, params);\n }\n }\n catch (e) {\n if (e instanceof ExchangeRateLimitExceededError) {\n throw e; // if we are rate limited, we should not retry and fail fast\n }\n errors += 1;\n if (errors > maxRetries) {\n throw e;\n }\n }\n return undefined;\n }\n async fetchPaginatedCallDeterministic(method, symbol = undefined, since = undefined, limit = undefined, timeframe = undefined, params = {}, maxEntriesPerRequest = undefined) {\n let maxCalls = undefined;\n [maxCalls, params] = this.handleOptionAndParams(params, method, 'paginationCalls', 10);\n [maxEntriesPerRequest, params] = this.handleMaxEntriesPerRequestAndParams(method, maxEntriesPerRequest, params);\n const current = this.milliseconds();\n const tasks = [];\n const time = this.parseTimeframe(timeframe) * 1000;\n const step = time * maxEntriesPerRequest;\n let currentSince = current - (maxCalls * step) - 1;\n if (since !== undefined) {\n currentSince = Math.max(currentSince, since);\n }\n const until = this.safeInteger2(params, 'until', 'till'); // do not omit it here\n if (until !== undefined) {\n const requiredCalls = Math.ceil((until - since) / step);\n if (requiredCalls > maxCalls) {\n throw new InvalidParamsError('The number of required calls is greater than the max number of calls allowed, either increase the paginationCalls or decrease the since-until gap. Current paginationCalls limit is ' + maxCalls.toString() + ' required calls is ' + requiredCalls.toString())\n .exchange(this.id);\n }\n }\n for (let i = 0; i < maxCalls; i++) {\n if ((until !== undefined) && (currentSince >= until)) {\n break;\n }\n tasks.push(this.safeDeterministicCall(method, symbol, currentSince, maxEntriesPerRequest, timeframe, params));\n currentSince = this.sum(currentSince, step) - 1;\n }\n const results = await Promise.all(tasks);\n let result = [];\n for (let i = 0; i < results.length; i++) {\n result = this.arrayConcat(result, results[i]);\n }\n const uniqueResults = this.removeRepeatedElementsFromArray(result);\n const key = (method === 'fetchOHLCV') ? 0 : 'timestamp';\n return this.filterBySinceLimit(uniqueResults, since, limit, key);\n }\n async fetchPaginatedCallCursor(method, symbol = undefined, since = undefined, limit = undefined, params = {}, cursorReceived = undefined, cursorSent = undefined, cursorIncrement = undefined, maxEntriesPerRequest = undefined) {\n let maxCalls = undefined;\n [maxCalls, params] = this.handleOptionAndParams(params, method, 'paginationCalls', 10);\n let maxRetries = undefined;\n [maxRetries, params] = this.handleOptionAndParams(params, method, 'maxRetries', 3);\n [maxEntriesPerRequest, params] = this.handleMaxEntriesPerRequestAndParams(method, maxEntriesPerRequest, params);\n let cursorValue = undefined;\n let i = 0;\n let errors = 0;\n let result = [];\n while (i < maxCalls) {\n try {\n if (cursorValue !== undefined) {\n if (cursorIncrement !== undefined) {\n cursorValue = this.parseToInt(cursorValue) + cursorIncrement;\n }\n params[cursorSent] = cursorValue;\n }\n let response = undefined;\n if (method === 'fetchAccounts') {\n response = await this[method](params);\n }\n else {\n response = await this[method](symbol, since, maxEntriesPerRequest, params);\n }\n errors = 0;\n const responseLength = response.length;\n if (this.verbose) {\n const iteration = (i + 1).toString();\n const cursorMessage = 'Cursor pagination call ' + iteration + ' method ' + method + ' response length ' + responseLength.toString() + ' cursor ' + cursorValue;\n this.log(cursorMessage);\n }\n if (responseLength === 0) {\n break;\n }\n result = this.arrayConcat(result, response);\n const last = this.safeValue(response, responseLength - 1);\n cursorValue = this.safeValue(last['info'], cursorReceived);\n if (cursorValue === undefined) {\n break;\n }\n const lastTimestamp = this.safeInteger(last, 'timestamp');\n if (lastTimestamp !== undefined && lastTimestamp < since) {\n break;\n }\n }\n catch (e) {\n errors += 1;\n if (errors > maxRetries) {\n throw e;\n }\n }\n i += 1;\n }\n const sorted = this.sortCursorPaginatedResult(result);\n const key = (method === 'fetchOHLCV') ? 0 : 'timestamp';\n return this.filterBySinceLimit(sorted, since, limit, key);\n }\n async fetchPaginatedCallIncremental(method, symbol = undefined, since = undefined, limit = undefined, params = {}, pageKey = undefined, maxEntriesPerRequest = undefined) {\n let maxCalls = undefined;\n [maxCalls, params] = this.handleOptionAndParams(params, method, 'paginationCalls', 10);\n let maxRetries = undefined;\n [maxRetries, params] = this.handleOptionAndParams(params, method, 'maxRetries', 3);\n [maxEntriesPerRequest, params] = this.handleMaxEntriesPerRequestAndParams(method, maxEntriesPerRequest, params);\n let i = 0;\n let errors = 0;\n let result = [];\n while (i < maxCalls) {\n try {\n params[pageKey] = i + 1;\n const response = await this[method](symbol, since, maxEntriesPerRequest, params);\n errors = 0;\n const responseLength = response.length;\n if (this.verbose) {\n const iteration = (i + 1).toString();\n const incrementalMessage = 'Incremental pagination call ' + iteration + ' method ' + method + ' response length ' + responseLength.toString();\n this.log(incrementalMessage);\n }\n if (responseLength === 0) {\n break;\n }\n result = this.arrayConcat(result, response);\n }\n catch (e) {\n errors += 1;\n if (errors > maxRetries) {\n throw e;\n }\n }\n i += 1;\n }\n const sorted = this.sortCursorPaginatedResult(result);\n const key = (method === 'fetchOHLCV') ? 0 : 'timestamp';\n return this.filterBySinceLimit(sorted, since, limit, key);\n }\n sortCursorPaginatedResult(result) {\n const first = this.safeValue(result, 0);\n if (first !== undefined) {\n if ('timestamp' in first) {\n return this.sortBy(result, 'timestamp', true);\n }\n if ('id' in first) {\n return this.sortBy(result, 'id', true);\n }\n }\n return result;\n }\n removeRepeatedElementsFromArray(input) {\n const uniqueResult = {};\n for (let i = 0; i < input.length; i++) {\n const entry = input[i];\n const id = this.safeString(entry, 'id');\n if (id !== undefined) {\n if (this.safeString(uniqueResult, id) === undefined) {\n uniqueResult[id] = entry;\n }\n }\n else {\n const timestamp = this.safeInteger2(entry, 'timestamp', 0);\n if (timestamp !== undefined) {\n if (this.safeString(uniqueResult, timestamp) === undefined) {\n uniqueResult[timestamp] = entry;\n }\n }\n }\n }\n const values = Object.values(uniqueResult);\n const valuesLength = values.length;\n if (valuesLength > 0) {\n return values;\n }\n return input;\n }\n handleUntilOption(key, request, params, multiplier = 1) {\n const until = this.safeInteger2(params, 'until', 'till');\n if (until !== undefined) {\n request[key] = this.parseToInt(until * multiplier);\n params = this.omit(params, ['until', 'till']);\n }\n return [request, params];\n }\n}\nexport { Exchange, };\n","// ----------------------------------------------------------------------------\n\n// PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:\n// https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code\n// EDIT THE CORRESPONDENT .ts FILE INSTEAD\n\n// -------------------------------------------------------------------------------\nimport { Exchange as _Exchange } from '../base/Exchange.js';\nclass Exchange extends _Exchange {\n}\nexport default Exchange;\n","// ----------------------------------------------------------------------------\n\n// PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:\n// https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code\n// EDIT THE CORRESPONDENT .ts FILE INSTEAD\n\nimport { base16, base64 } from \"../../../scure-base/index.js\";\nexport function hex2b64(h) {\n return base64.encode(base16.decode(h));\n}\n// convert a base64 string to hex\nexport function b64tohex(s) {\n return base16.encode(base64.decode(s));\n}\n// convert a base64 string to a byte/number array\nexport function b64toBA(s) {\n // piggyback on b64tohex for now, optimize later\n const h = b64tohex(s);\n let i;\n const a = [];\n for (i = 0; 2 * i < h.length; ++i) {\n a[i] = parseInt(h.substring(2 * i, 2 * i + 2), 16);\n }\n return a;\n}\n","// ----------------------------------------------------------------------------\n\n// PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:\n// https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code\n// EDIT THE CORRESPONDENT .ts FILE INSTEAD\n\n// Hex JavaScript decoder\n// Copyright (c) 2008-2013 Lapo Luchini <lapo@lapo.it>\n// Permission to use, copy, modify, and/or distribute this software for any\n// purpose with or without fee is hereby granted, provided that the above\n// copyright notice and this permission notice appear in all copies.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\n// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\n// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\n// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\n// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\n// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF\n// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n/*jshint browser: true, strict: true, immed: true, latedef: true, undef: true, regexdash: false */\nlet decoder;\nexport const Hex = {\n decode(a) {\n let i;\n if (decoder === undefined) {\n let hex = \"0123456789ABCDEF\";\n const ignore = \" \\f\\n\\r\\t\\u00A0\\u2028\\u2029\";\n decoder = {};\n for (i = 0; i < 16; ++i) {\n decoder[hex.charAt(i)] = i;\n }\n hex = hex.toLowerCase();\n for (i = 10; i < 16; ++i) {\n decoder[hex.charAt(i)] = i;\n }\n for (i = 0; i < ignore.length; ++i) {\n decoder[ignore.charAt(i)] = -1;\n }\n }\n const out = [];\n let bits = 0;\n let char_count = 0;\n for (i = 0; i < a.length; ++i) {\n let c = a.charAt(i);\n if (c == \"=\") {\n break;\n }\n c = decoder[c];\n if (c == -1) {\n continue;\n }\n if (c === undefined) {\n throw new Error(\"Illegal character at offset \" + i);\n }\n bits |= c;\n if (++char_count >= 2) {\n out[out.length] = bits;\n bits = 0;\n char_count = 0;\n }\n else {\n bits <<= 4;\n }\n }\n if (char_count) {\n throw new Error(\"Hex encoding incomplete: 4 bits missing\");\n }\n return out;\n }\n};\n","// ----------------------------------------------------------------------------\n\n// PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:\n// https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code\n// EDIT THE CORRESPONDENT .ts FILE INSTEAD\n\nconst BI_RM = \"0123456789abcdefghijklmnopqrstuvwxyz\";\nexport function int2char(n) {\n return BI_RM.charAt(n);\n}\n//#region BIT_OPERATIONS\n// (public) this & a\nexport function op_and(x, y) {\n return x & y;\n}\n// (public) this | a\nexport function op_or(x, y) {\n return x | y;\n}\n// (public) this ^ a\nexport function op_xor(x, y) {\n return x ^ y;\n}\n// (public) this & ~a\nexport function op_andnot(x, y) {\n return x & ~y;\n}\n// return index of lowest 1-bit in x, x < 2^31\nexport function lbit(x) {\n if (x == 0) {\n return -1;\n }\n let r = 0;\n if ((x & 0xffff) == 0) {\n x >>= 16;\n r += 16;\n }\n if ((x & 0xff) == 0) {\n x >>= 8;\n r += 8;\n }\n if ((x & 0xf) == 0) {\n x >>= 4;\n r += 4;\n }\n if ((x & 3) == 0) {\n x >>= 2;\n r += 2;\n }\n if ((x & 1) == 0) {\n ++r;\n }\n return r;\n}\n// return number of 1 bits in x\nexport function cbit(x) {\n let r = 0;\n while (x != 0) {\n x &= x - 1;\n ++r;\n }\n return r;\n}\n//#endregion BIT_OPERATIONS\n","// ----------------------------------------------------------------------------\n\n// PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:\n// https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code\n// EDIT THE CORRESPONDENT .ts FILE INSTEAD\n\n// Copyright (c) 2005 Tom Wu\n// All Rights Reserved.\n// See \"LICENSE\" for details.\n// Basic JavaScript BN library - subset useful for RSA encryption.\nimport { cbit, int2char, lbit, op_and, op_andnot, op_or, op_xor } from \"./util.js\";\n// Bits per digit\nlet dbits;\n// JavaScript engine analysis\nconst canary = 0xdeadbeefcafe;\nconst j_lm = ((canary & 0xffffff) == 0xefcafe);\n//#region\nconst lowprimes = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607, 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701, 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811, 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911, 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997];\nconst lplim = (1 << 26) / lowprimes[lowprimes.length - 1];\n//#endregion\n// (public) Constructor\n/**\n * @type Class\n */\nexport class BigInteger {\n constructor(a, b, c) {\n if (a != null) {\n if (\"number\" == typeof a) {\n this.fromNumber(a, b, c);\n }\n else if (b == null && \"string\" != typeof a) {\n this.fromString(a, 256);\n }\n else {\n this.fromString(a, b);\n }\n }\n }\n //#region PUBLIC\n // BigInteger.prototype.toString = bnToString;\n // (public) return string representation in given radix\n toString(b) {\n if (this.s < 0) {\n return \"-\" + this.negate().toString(b);\n }\n let k;\n if (b == 16) {\n k = 4;\n }\n else if (b == 8) {\n k = 3;\n }\n else if (b == 2) {\n k = 1;\n }\n else if (b == 32) {\n k = 5;\n }\n else if (b == 4) {\n k = 2;\n }\n else {\n return this.toRadix(b);\n }\n const km = (1 << k) - 1;\n let d;\n let m = false;\n let r = \"\";\n let i = this.t;\n let p = this.DB - (i * this.DB) % k;\n if (i-- > 0) {\n if (p < this.DB && (d = this[i] >> p) > 0) {\n m = true;\n r = int2char(d);\n }\n while (i >= 0) {\n if (p < k) {\n d = (this[i] & ((1 << p) - 1)) << (k - p);\n d |= this[--i] >> (p += this.DB - k);\n }\n else {\n d = (this[i] >> (p -= k)) & km;\n if (p <= 0) {\n p += this.DB;\n --i;\n }\n }\n if (d > 0) {\n m = true;\n }\n if (m) {\n r += int2char(d);\n }\n }\n }\n return m ? r : \"0\";\n }\n // BigInteger.prototype.negate = bnNegate;\n // (public) -this\n negate() {\n const r = nbi();\n BigInteger.ZERO.subTo(this, r);\n return r;\n }\n // BigInteger.prototype.abs = bnAbs;\n // (public) |this|\n abs() {\n return (this.s < 0) ? this.negate() : this;\n }\n // BigInteger.prototype.compareTo = bnCompareTo;\n // (public) return + if this > a, - if this < a, 0 if equal\n compareTo(a) {\n let r = this.s - a.s;\n if (r != 0) {\n return r;\n }\n let i = this.t;\n r = i - a.t;\n if (r != 0) {\n return (this.s < 0) ? -r : r;\n }\n while (--i >= 0) {\n if ((r = this[i] - a[i]) != 0) {\n return r;\n }\n }\n return 0;\n }\n // BigInteger.prototype.bitLength = bnBitLength;\n // (public) return the number of bits in \"this\"\n bitLength() {\n if (this.t <= 0) {\n return 0;\n }\n return this.DB * (this.t - 1) + nbits(this[this.t - 1] ^ (this.s & this.DM));\n }\n // BigInteger.prototype.mod = bnMod;\n // (public) this mod a\n mod(a) {\n const r = nbi();\n this.abs().divRemTo(a, null, r);\n if (this.s < 0 && r.compareTo(BigInteger.ZERO) > 0) {\n a.subTo(r, r);\n }\n return r;\n }\n // BigInteger.prototype.modPowInt = bnModPowInt;\n // (public) this^e % m, 0 <= e < 2^32\n modPowInt(e, m) {\n let z;\n if (e < 256 || m.isEven()) {\n z = new Classic(m);\n }\n else {\n z = new Montgomery(m);\n }\n return this.exp(e, z);\n }\n // BigInteger.prototype.clone = bnClone;\n // (public)\n clone() {\n const r = nbi();\n this.copyTo(r);\n return r;\n }\n // BigInteger.prototype.intValue = bnIntValue;\n // (public) return value as integer\n intValue() {\n if (this.s < 0) {\n if (this.t == 1) {\n return this[0] - this.DV;\n }\n else if (this.t == 0) {\n return -1;\n }\n }\n else if (this.t == 1) {\n return this[0];\n }\n else if (this.t == 0) {\n return 0;\n }\n // assumes 16 < DB < 32\n return ((this[1] & ((1 << (32 - this.DB)) - 1)) << this.DB) | this[0];\n }\n // BigInteger.prototype.byteValue = bnByteValue;\n // (public) return value as byte\n byteValue() {\n return (this.t == 0) ? this.s : (this[0] << 24) >> 24;\n }\n // BigInteger.prototype.shortValue = bnShortValue;\n // (public) return value as short (assumes DB>=16)\n shortValue() {\n return (this.t == 0) ? this.s : (this[0] << 16) >> 16;\n }\n // BigInteger.prototype.signum = bnSigNum;\n // (public) 0 if this == 0, 1 if this > 0\n signum() {\n if (this.s < 0) {\n return -1;\n }\n else if (this.t <= 0 || (this.t == 1 && this[0] <= 0)) {\n return 0;\n }\n else {\n return 1;\n }\n }\n // BigInteger.prototype.toByteArray = bnToByteArray;\n // (public) convert to bigendian byte array\n toByteArray() {\n let i = this.t;\n const r = [];\n r[0] = this.s;\n let p = this.DB - (i * this.DB) % 8;\n let d;\n let k = 0;\n if (i-- > 0) {\n if (p < this.DB && (d = this[i] >> p) != (this.s & this.DM) >> p) {\n r[k++] = d | (this.s << (this.DB - p));\n }\n while (i >= 0) {\n if (p < 8) {\n d = (this[i] & ((1 << p) - 1)) << (8 - p);\n d |= this[--i] >> (p += this.DB - 8);\n }\n else {\n d = (this[i] >> (p -= 8)) & 0xff;\n if (p <= 0) {\n p += this.DB;\n --i;\n }\n }\n if ((d & 0x80) != 0) {\n d |= -256;\n }\n if (k == 0 && (this.s & 0x80) != (d & 0x80)) {\n ++k;\n }\n if (k > 0 || d != this.s) {\n r[k++] = d;\n }\n }\n }\n return r;\n }\n // BigInteger.prototype.equals = bnEquals;\n equals(a) {\n return (this.compareTo(a) == 0);\n }\n // BigInteger.prototype.min = bnMin;\n min(a) {\n return (this.compareTo(a) < 0) ? this : a;\n }\n // BigInteger.prototype.max = bnMax;\n max(a) {\n return (this.compareTo(a) > 0) ? this : a;\n }\n // BigInteger.prototype.and = bnAnd;\n and(a) {\n const r = nbi();\n this.bitwiseTo(a, op_and, r);\n return r;\n }\n // BigInteger.prototype.or = bnOr;\n or(a) {\n const r = nbi();\n this.bitwiseTo(a, op_or, r);\n return r;\n }\n // BigInteger.prototype.xor = bnXor;\n xor(a) {\n const r = nbi();\n this.bitwiseTo(a, op_xor, r);\n return r;\n }\n // BigInteger.prototype.andNot = bnAndNot;\n andNot(a) {\n const r = nbi();\n this.bitwiseTo(a, op_andnot, r);\n return r;\n }\n // BigInteger.prototype.not = bnNot;\n // (public) ~this\n not() {\n const r = nbi();\n for (let i = 0; i < this.t; ++i) {\n r[i] = this.DM & ~this[i];\n }\n r.t = this.t;\n r.s = ~this.s;\n return r;\n }\n // BigInteger.prototype.shiftLeft = bnShiftLeft;\n // (public) this << n\n shiftLeft(n) {\n const r = nbi();\n if (n < 0) {\n this.rShiftTo(-n, r);\n }\n else {\n this.lShiftTo(n, r);\n }\n return r;\n }\n // BigInteger.prototype.shiftRight = bnShiftRight;\n // (public) this >> n\n shiftRight(n) {\n const r = nbi();\n if (n < 0) {\n this.lShiftTo(-n, r);\n }\n else {\n this.rShiftTo(n, r);\n }\n return r;\n }\n // BigInteger.prototype.getLowestSetBit = bnGetLowestSetBit;\n // (public) returns index of lowest 1-bit (or -1 if none)\n getLowestSetBit() {\n for (let i = 0; i < this.t; ++i) {\n if (this[i] != 0) {\n return i * this.DB + lbit(this[i]);\n }\n }\n if (this.s < 0) {\n return this.t * this.DB;\n }\n return -1;\n }\n // BigInteger.prototype.bitCount = bnBitCount;\n // (public) return number of set bits\n bitCount() {\n let r = 0;\n const x = this.s & this.DM;\n for (let i = 0; i < this.t; ++i) {\n r += cbit(this[i] ^ x);\n }\n return r;\n }\n // BigInteger.prototype.testBit = bnTestBit;\n // (public) true iff nth bit is set\n testBit(n) {\n const j = Math.floor(n / this.DB);\n if (j >= this.t) {\n return (this.s != 0);\n }\n return ((this[j] & (1 << (n % this.DB))) != 0);\n }\n // BigInteger.prototype.setBit = bnSetBit;\n // (public) this | (1<<n)\n setBit(n) {\n return this.changeBit(n, op_or);\n }\n // BigInteger.prototype.clearBit = bnClearBit;\n // (public) this & ~(1<<n)\n clearBit(n) {\n return this.changeBit(n, op_andnot);\n }\n // BigInteger.prototype.flipBit = bnFlipBit;\n // (public) this ^ (1<<n)\n flipBit(n) {\n return this.changeBit(n, op_xor);\n }\n // BigInteger.prototype.add = bnAdd;\n // (public) this + a\n add(a) {\n const r = nbi();\n this.addTo(a, r);\n return r;\n }\n // BigInteger.prototype.subtract = bnSubtract;\n // (public) this - a\n subtract(a) {\n const r = nbi();\n this.subTo(a, r);\n return r;\n }\n // BigInteger.prototype.multiply = bnMultiply;\n // (public) this * a\n multiply(a) {\n const r = nbi();\n this.multiplyTo(a, r);\n return r;\n }\n // BigInteger.prototype.divide = bnDivide;\n // (public) this / a\n divide(a) {\n const r = nbi();\n this.divRemTo(a, r, null);\n return r;\n }\n // BigInteger.prototype.remainder = bnRemainder;\n // (public) this % a\n remainder(a) {\n const r = nbi();\n this.divRemTo(a, null, r);\n return r;\n }\n // BigInteger.prototype.divideAndRemainder = bnDivideAndRemainder;\n // (public) [this/a,this%a]\n divideAndRemainder(a) {\n const q = nbi();\n const r = nbi();\n this.divRemTo(a, q, r);\n return [q, r];\n }\n // BigInteger.prototype.modPow = bnModPow;\n // (public) this^e % m (HAC 14.85)\n modPow(e, m) {\n let i = e.bitLength();\n let k;\n let r = nbv(1);\n let z;\n if (i <= 0) {\n return r;\n }\n else if (i < 18) {\n k = 1;\n }\n else if (i < 48) {\n k = 3;\n }\n else if (i < 144) {\n k = 4;\n }\n else if (i < 768) {\n k = 5;\n }\n else {\n k = 6;\n }\n if (i < 8) {\n z = new Classic(m);\n }\n else if (m.isEven()) {\n z = new Barrett(m);\n }\n else {\n z = new Montgomery(m);\n }\n // precomputation\n const g = [];\n let n = 3;\n const k1 = k - 1;\n const km = (1 << k) - 1;\n g[1] = z.convert(this);\n if (k > 1) {\n const g2 = nbi();\n z.sqrTo(g[1], g2);\n while (n <= km) {\n g[n] = nbi();\n z.mulTo(g2, g[n - 2], g[n]);\n n += 2;\n }\n }\n let j = e.t - 1;\n let w;\n let is1 = true;\n let r2 = nbi();\n let t;\n i = nbits(e[j]) - 1;\n while (j >= 0) {\n if (i >= k1) {\n w = (e[j] >> (i - k1)) & km;\n }\n else {\n w = (e[j] & ((1 << (i + 1)) - 1)) << (k1 - i);\n if (j > 0) {\n w |= e[j - 1] >> (this.DB + i - k1);\n }\n }\n n = k;\n while ((w & 1) == 0) {\n w >>= 1;\n --n;\n }\n if ((i -= n) < 0) {\n i += this.DB;\n --j;\n }\n if (is1) { // ret == 1, don't bother squaring or multiplying it\n g[w].copyTo(r);\n is1 = false;\n }\n else {\n while (n > 1) {\n z.sqrTo(r, r2);\n z.sqrTo(r2, r);\n n -= 2;\n }\n if (n > 0) {\n z.sqrTo(r, r2);\n }\n else {\n t = r;\n r = r2;\n r2 = t;\n }\n z.mulTo(r2, g[w], r);\n }\n while (j >= 0 && (e[j] & (1 << i)) == 0) {\n z.sqrTo(r, r2);\n t = r;\n r = r2;\n r2 = t;\n if (--i < 0) {\n i = this.DB - 1;\n --j;\n }\n }\n }\n return z.revert(r);\n }\n // BigInteger.prototype.modInverse = bnModInverse;\n // (public) 1/this % m (HAC 14.61)\n modInverse(m) {\n const ac = m.isEven();\n if ((this.isEven() && ac) || m.signum() == 0) {\n return BigInteger.ZERO;\n }\n const u = m.clone();\n const v = this.clone();\n const a = nbv(1);\n const b = nbv(0);\n const c = nbv(0);\n const d = nbv(1);\n while (u.signum() != 0) {\n while (u.isEven()) {\n u.rShiftTo(1, u);\n if (ac) {\n if (!a.isEven() || !b.isEven()) {\n a.addTo(this, a);\n b.subTo(m, b);\n }\n a.rShiftTo(1, a);\n }\n else if (!b.isEven()) {\n b.subTo(m, b);\n }\n b.rShiftTo(1, b);\n }\n while (v.isEven()) {\n v.rShiftTo(1, v);\n if (ac) {\n if (!c.isEven() || !d.isEven()) {\n c.addTo(this, c);\n d.subTo(m, d);\n }\n c.rShiftTo(1, c);\n }\n else if (!d.isEven()) {\n d.subTo(m, d);\n }\n d.rShiftTo(1, d);\n }\n if (u.compareTo(v) >= 0) {\n u.subTo(v, u);\n if (ac) {\n a.subTo(c, a);\n }\n b.subTo(d, b);\n }\n else {\n v.subTo(u, v);\n if (ac) {\n c.subTo(a, c);\n }\n d.subTo(b, d);\n }\n }\n if (v.compareTo(BigInteger.ONE) != 0) {\n return BigInteger.ZERO;\n }\n if (d.compareTo(m) >= 0) {\n return d.subtract(m);\n }\n if (d.signum() < 0) {\n d.addTo(m, d);\n }\n else {\n return d;\n }\n if (d.signum() < 0) {\n return d.add(m);\n }\n else {\n return d;\n }\n }\n // BigInteger.prototype.pow = bnPow;\n // (public) this^e\n pow(e) {\n return this.exp(e, new NullExp());\n }\n // BigInteger.prototype.gcd = bnGCD;\n // (public) gcd(this,a) (HAC 14.54)\n gcd(a) {\n let x = (this.s < 0) ? this.negate() : this.clone();\n let y = (a.s < 0) ? a.negate() : a.clone();\n if (x.compareTo(y) < 0) {\n const t = x;\n x = y;\n y = t;\n }\n let i = x.getLowestSetBit();\n let g = y.getLowestSetBit();\n if (g < 0) {\n return x;\n }\n if (i < g) {\n g = i;\n }\n if (g > 0) {\n x.rShiftTo(g, x);\n y.rShiftTo(g, y);\n }\n while (x.signum() > 0) {\n if ((i = x.getLowestSetBit()) > 0) {\n x.rShiftTo(i, x);\n }\n if ((i = y.getLowestSetBit()) > 0) {\n y.rShiftTo(i, y);\n }\n if (x.compareTo(y) >= 0) {\n x.subTo(y, x);\n x.rShiftTo(1, x);\n }\n else {\n y.subTo(x, y);\n y.rShiftTo(1, y);\n }\n }\n if (g > 0) {\n y.lShiftTo(g, y);\n }\n return y;\n }\n // BigInteger.prototype.isProbablePrime = bnIsProbablePrime;\n // (public) test primality with certainty >= 1-.5^t\n isProbablePrime(t) {\n let i;\n const x = this.abs();\n if (x.t == 1 && x[0] <= lowprimes[lowprimes.length - 1]) {\n for (i = 0; i < lowprimes.length; ++i) {\n if (x[0] == lowprimes[i]) {\n return true;\n }\n }\n return false;\n }\n if (x.isEven()) {\n return false;\n }\n i = 1;\n while (i < lowprimes.length) {\n let m = lowprimes[i];\n let j = i + 1;\n while (j < lowprimes.length && m < lplim) {\n m *= lowprimes[j++];\n }\n m = x.modInt(m);\n while (i < j) {\n if (m % lowprimes[i++] == 0) {\n return false;\n }\n }\n }\n return x.millerRabin(t);\n }\n //#endregion PUBLIC\n //#region PROTECTED\n // BigInteger.prototype.copyTo = bnpCopyTo;\n // (protected) copy this to r\n copyTo(r) {\n for (let i = this.t - 1; i >= 0; --i) {\n r[i] = this[i];\n }\n r.t = this.t;\n r.s = this.s;\n }\n // BigInteger.prototype.fromInt = bnpFromInt;\n // (protected) set from integer value x, -DV <= x < DV\n fromInt(x) {\n this.t = 1;\n this.s = (x < 0) ? -1 : 0;\n if (x > 0) {\n this[0] = x;\n }\n else if (x < -1) {\n this[0] = x + this.DV;\n }\n else {\n this.t = 0;\n }\n }\n // BigInteger.prototype.fromString = bnpFromString;\n // (protected) set from string and radix\n fromString(s, b) {\n let k;\n if (b == 16) {\n k = 4;\n }\n else if (b == 8) {\n k = 3;\n }\n else if (b == 256) {\n k = 8;\n /* byte array */\n }\n else if (b == 2) {\n k = 1;\n }\n else if (b == 32) {\n k = 5;\n }\n else if (b == 4) {\n k = 2;\n }\n else {\n this.fromRadix(s, b);\n return;\n }\n this.t = 0;\n this.s = 0;\n let i = s.length;\n let mi = false;\n let sh = 0;\n while (--i >= 0) {\n const x = (k == 8) ? (+s[i]) & 0xff : intAt(s, i);\n if (x < 0) {\n if (s.charAt(i) == \"-\") {\n mi = true;\n }\n continue;\n }\n mi = false;\n if (sh == 0) {\n this[this.t++] = x;\n }\n else if (sh + k > this.DB) {\n this[this.t - 1] |= (x & ((1 << (this.DB - sh)) - 1)) << sh;\n this[this.t++] = (x >> (this.DB - sh));\n }\n else {\n this[this.t - 1] |= x << sh;\n }\n sh += k;\n if (sh >= this.DB) {\n sh -= this.DB;\n }\n }\n if (k == 8 && ((+s[0]) & 0x80) != 0) {\n this.s = -1;\n if (sh > 0) {\n this[this.t - 1] |= ((1 << (this.DB - sh)) - 1) << sh;\n }\n }\n this.clamp();\n if (mi) {\n BigInteger.ZERO.subTo(this, this);\n }\n }\n // BigInteger.prototype.clamp = bnpClamp;\n // (protected) clamp off excess high words\n clamp() {\n const c = this.s & this.DM;\n while (this.t > 0 && this[this.t - 1] == c) {\n --this.t;\n }\n }\n // BigInteger.prototype.dlShiftTo = bnpDLShiftTo;\n // (protected) r = this << n*DB\n dlShiftTo(n, r) {\n let i;\n for (i = this.t - 1; i >= 0; --i) {\n r[i + n] = this[i];\n }\n for (i = n - 1; i >= 0; --i) {\n r[i] = 0;\n }\n r.t = this.t + n;\n r.s = this.s;\n }\n // BigInteger.prototype.drShiftTo = bnpDRShiftTo;\n // (protected) r = this >> n*DB\n drShiftTo(n, r) {\n for (let i = n; i < this.t; ++i) {\n r[i - n] = this[i];\n }\n r.t = Math.max(this.t - n, 0);\n r.s = this.s;\n }\n // BigInteger.prototype.lShiftTo = bnpLShiftTo;\n // (protected) r = this << n\n lShiftTo(n, r) {\n const bs = n % this.DB;\n const cbs = this.DB - bs;\n const bm = (1 << cbs) - 1;\n const ds = Math.floor(n / this.DB);\n let c = (this.s << bs) & this.DM;\n for (let i = this.t - 1; i >= 0; --i) {\n r[i + ds + 1] = (this[i] >> cbs) | c;\n c = (this[i] & bm) << bs;\n }\n for (let i = ds - 1; i >= 0; --i) {\n r[i] = 0;\n }\n r[ds] = c;\n r.t = this.t + ds + 1;\n r.s = this.s;\n r.clamp();\n }\n // BigInteger.prototype.rShiftTo = bnpRShiftTo;\n // (protected) r = this >> n\n rShiftTo(n, r) {\n r.s = this.s;\n const ds = Math.floor(n / this.DB);\n if (ds >= this.t) {\n r.t = 0;\n return;\n }\n const bs = n % this.DB;\n const cbs = this.DB - bs;\n const bm = (1 << bs) - 1;\n r[0] = this[ds] >> bs;\n for (let i = ds + 1; i < this.t; ++i) {\n r[i - ds - 1] |= (this[i] & bm) << cbs;\n r[i - ds] = this[i] >> bs;\n }\n if (bs > 0) {\n r[this.t - ds - 1] |= (this.s & bm) << cbs;\n }\n r.t = this.t - ds;\n r.clamp();\n }\n // BigInteger.prototype.subTo = bnpSubTo;\n // (protected) r = this - a\n subTo(a, r) {\n let i = 0;\n let c = 0;\n const m = Math.min(a.t, this.t);\n while (i < m) {\n c += this[i] - a[i];\n r[i++] = c & this.DM;\n c >>= this.DB;\n }\n if (a.t < this.t) {\n c -= a.s;\n while (i < this.t) {\n c += this[i];\n r[i++] = c & this.DM;\n c >>= this.DB;\n }\n c += this.s;\n }\n else {\n c += this.s;\n while (i < a.t) {\n c -= a[i];\n r[i++] = c & this.DM;\n c >>= this.DB;\n }\n c -= a.s;\n }\n r.s = (c < 0) ? -1 : 0;\n if (c < -1) {\n r[i++] = this.DV + c;\n }\n else if (c > 0) {\n r[i++] = c;\n }\n r.t = i;\n r.clamp();\n }\n // BigInteger.prototype.multiplyTo = bnpMultiplyTo;\n // (protected) r = this * a, r != this,a (HAC 14.12)\n // \"this\" should be the larger one if appropriate.\n multiplyTo(a, r) {\n const x = this.abs();\n const y = a.abs();\n let i = x.t;\n r.t = i + y.t;\n while (--i >= 0) {\n r[i] = 0;\n }\n for (i = 0; i < y.t; ++i) {\n r[i + x.t] = x.am(0, y[i], r, i, 0, x.t);\n }\n r.s = 0;\n r.clamp();\n if (this.s != a.s) {\n BigInteger.ZERO.subTo(r, r);\n }\n }\n // BigInteger.prototype.squareTo = bnpSquareTo;\n // (protected) r = this^2, r != this (HAC 14.16)\n squareTo(r) {\n const x = this.abs();\n let i = r.t = 2 * x.t;\n while (--i >= 0) {\n r[i] = 0;\n }\n for (i = 0; i < x.t - 1; ++i) {\n const c = x.am(i, x[i], r, 2 * i, 0, 1);\n if ((r[i + x.t] += x.am(i + 1, 2 * x[i], r, 2 * i + 1, c, x.t - i - 1)) >= x.DV) {\n r[i + x.t] -= x.DV;\n r[i + x.t + 1] = 1;\n }\n }\n if (r.t > 0) {\n r[r.t - 1] += x.am(i, x[i], r, 2 * i, 0, 1);\n }\n r.s = 0;\n r.clamp();\n }\n // BigInteger.prototype.divRemTo = bnpDivRemTo;\n // (protected) divide this by m, quotient and remainder to q, r (HAC 14.20)\n // r != q, this != m. q or r may be null.\n divRemTo(m, q, r) {\n const pm = m.abs();\n if (pm.t <= 0) {\n return;\n }\n const pt = this.abs();\n if (pt.t < pm.t) {\n if (q != null) {\n q.fromInt(0);\n }\n if (r != null) {\n this.copyTo(r);\n }\n return;\n }\n if (r == null) {\n r = nbi();\n }\n const y = nbi();\n const ts = this.s;\n const ms = m.s;\n const nsh = this.DB - nbits(pm[pm.t - 1]); // normalize modulus\n if (nsh > 0) {\n pm.lShiftTo(nsh, y);\n pt.lShiftTo(nsh, r);\n }\n else {\n pm.copyTo(y);\n pt.copyTo(r);\n }\n const ys = y.t;\n const y0 = y[ys - 1];\n if (y0 == 0) {\n return;\n }\n const yt = y0 * (1 << this.F1) + ((ys > 1) ? y[ys - 2] >> this.F2 : 0);\n const d1 = this.FV / yt;\n const d2 = (1 << this.F1) / yt;\n const e = 1 << this.F2;\n let i = r.t;\n let j = i - ys;\n const t = (q == null) ? nbi() : q;\n y.dlShiftTo(j, t);\n if (r.compareTo(t) >= 0) {\n r[r.t++] = 1;\n r.subTo(t, r);\n }\n BigInteger.ONE.dlShiftTo(ys, t);\n t.subTo(y, y); // \"negative\" y so we can replace sub with am later\n while (y.t < ys) {\n y[y.t++] = 0;\n }\n while (--j >= 0) {\n // Estimate quotient digit\n let qd = (r[--i] == y0) ? this.DM : Math.floor(r[i] * d1 + (r[i - 1] + e) * d2);\n if ((r[i] += y.am(0, qd, r, j, 0, ys)) < qd) { // Try it out\n y.dlShiftTo(j, t);\n r.subTo(t, r);\n while (r[i] < --qd) {\n r.subTo(t, r);\n }\n }\n }\n if (q != null) {\n r.drShiftTo(ys, q);\n if (ts != ms) {\n BigInteger.ZERO.subTo(q, q);\n }\n }\n r.t = ys;\n r.clamp();\n if (nsh > 0) {\n r.rShiftTo(nsh, r);\n } // Denormalize remainder\n if (ts < 0) {\n BigInteger.ZERO.subTo(r, r);\n }\n }\n // BigInteger.prototype.invDigit = bnpInvDigit;\n // (protected) return \"-1/this % 2^DB\"; useful for Mont. reduction\n // justification:\n // xy == 1 (mod m)\n // xy = 1+km\n // xy(2-xy) = (1+km)(1-km)\n // x[y(2-xy)] = 1-k^2m^2\n // x[y(2-xy)] == 1 (mod m^2)\n // if y is 1/x mod m, then y(2-xy) is 1/x mod m^2\n // should reduce x and y(2-xy) by m^2 at each step to keep size bounded.\n // JS multiply \"overflows\" differently from C/C++, so care is needed here.\n invDigit() {\n if (this.t < 1) {\n return 0;\n }\n const x = this[0];\n if ((x & 1) == 0) {\n return 0;\n }\n let y = x & 3; // y == 1/x mod 2^2\n y = (y * (2 - (x & 0xf) * y)) & 0xf; // y == 1/x mod 2^4\n y = (y * (2 - (x & 0xff) * y)) & 0xff; // y == 1/x mod 2^8\n y = (y * (2 - (((x & 0xffff) * y) & 0xffff))) & 0xffff; // y == 1/x mod 2^16\n // last step - calculate inverse mod DV directly;\n // assumes 16 < DB <= 32 and assumes ability to handle 48-bit ints\n y = (y * (2 - x * y % this.DV)) % this.DV; // y == 1/x mod 2^dbits\n // we really want the negative inverse, and -DV < y < DV\n return (y > 0) ? this.DV - y : -y;\n }\n // BigInteger.prototype.isEven = bnpIsEven;\n // (protected) true iff this is even\n isEven() {\n return ((this.t > 0) ? (this[0] & 1) : this.s) == 0;\n }\n // BigInteger.prototype.exp = bnpExp;\n // (protected) this^e, e < 2^32, doing sqr and mul with \"r\" (HAC 14.79)\n exp(e, z) {\n if (e > 0xffffffff || e < 1) {\n return BigInteger.ONE;\n }\n let r = nbi();\n let r2 = nbi();\n const g = z.convert(this);\n let i = nbits(e) - 1;\n g.copyTo(r);\n while (--i >= 0) {\n z.sqrTo(r, r2);\n if ((e & (1 << i)) > 0) {\n z.mulTo(r2, g, r);\n }\n else {\n const t = r;\n r = r2;\n r2 = t;\n }\n }\n return z.revert(r);\n }\n // BigInteger.prototype.chunkSize = bnpChunkSize;\n // (protected) return x s.t. r^x < DV\n chunkSize(r) {\n return Math.floor(Math.LN2 * this.DB / Math.log(r));\n }\n // BigInteger.prototype.toRadix = bnpToRadix;\n // (protected) convert to radix string\n toRadix(b) {\n if (b == null) {\n b = 10;\n }\n if (this.signum() == 0 || b < 2 || b > 36) {\n return \"0\";\n }\n const cs = this.chunkSize(b);\n const a = Math.pow(b, cs);\n const d = nbv(a);\n const y = nbi();\n const z = nbi();\n let r = \"\";\n this.divRemTo(d, y, z);\n while (y.signum() > 0) {\n r = (a + z.intValue()).toString(b).substr(1) + r;\n y.divRemTo(d, y, z);\n }\n return z.intValue().toString(b) + r;\n }\n // BigInteger.prototype.fromRadix = bnpFromRadix;\n // (protected) convert from radix string\n fromRadix(s, b) {\n this.fromInt(0);\n if (b == null) {\n b = 10;\n }\n const cs = this.chunkSize(b);\n const d = Math.pow(b, cs);\n let mi = false;\n let j = 0;\n let w = 0;\n for (let i = 0; i < s.length; ++i) {\n const x = intAt(s, i);\n if (x < 0) {\n if (s.charAt(i) == \"-\" && this.signum() == 0) {\n mi = true;\n }\n continue;\n }\n w = b * w + x;\n if (++j >= cs) {\n this.dMultiply(d);\n this.dAddOffset(w, 0);\n j = 0;\n w = 0;\n }\n }\n if (j > 0) {\n this.dMultiply(Math.pow(b, j));\n this.dAddOffset(w, 0);\n }\n if (mi) {\n BigInteger.ZERO.subTo(this, this);\n }\n }\n // BigInteger.prototype.fromNumber = bnpFromNumber;\n // (protected) alternate constructor\n fromNumber(a, b, c) {\n if (\"number\" == typeof b) {\n // new BigInteger(int,int,RNG)\n if (a < 2) {\n this.fromInt(1);\n }\n else {\n this.fromNumber(a, c);\n if (!this.testBit(a - 1)) {\n // force MSB set\n this.bitwiseTo(BigInteger.ONE.shiftLeft(a - 1), op_or, this);\n }\n if (this.isEven()) {\n this.dAddOffset(1, 0);\n } // force odd\n while (!this.isProbablePrime(b)) {\n this.dAddOffset(2, 0);\n if (this.bitLength() > a) {\n this.subTo(BigInteger.ONE.shiftLeft(a - 1), this);\n }\n }\n }\n }\n else {\n // new BigInteger(int,RNG)\n const x = [];\n const t = a & 7;\n x.length = (a >> 3) + 1;\n b.nextBytes(x);\n if (t > 0) {\n x[0] &= ((1 << t) - 1);\n }\n else {\n x[0] = 0;\n }\n this.fromString(x, 256);\n }\n }\n // BigInteger.prototype.bitwiseTo = bnpBitwiseTo;\n // (protected) r = this op a (bitwise)\n bitwiseTo(a, op, r) {\n let i;\n let f;\n const m = Math.min(a.t, this.t);\n for (i = 0; i < m; ++i) {\n r[i] = op(this[i], a[i]);\n }\n if (a.t < this.t) {\n f = a.s & this.DM;\n for (i = m; i < this.t; ++i) {\n r[i] = op(this[i], f);\n }\n r.t = this.t;\n }\n else {\n f = this.s & this.DM;\n for (i = m; i < a.t; ++i) {\n r[i] = op(f, a[i]);\n }\n r.t = a.t;\n }\n r.s = op(this.s, a.s);\n r.clamp();\n }\n // BigInteger.prototype.changeBit = bnpChangeBit;\n // (protected) this op (1<<n)\n changeBit(n, op) {\n const r = BigInteger.ONE.shiftLeft(n);\n this.bitwiseTo(r, op, r);\n return r;\n }\n // BigInteger.prototype.addTo = bnpAddTo;\n // (protected) r = this + a\n addTo(a, r) {\n let i = 0;\n let c = 0;\n const m = Math.min(a.t, this.t);\n while (i < m) {\n c += this[i] + a[i];\n r[i++] = c & this.DM;\n c >>= this.DB;\n }\n if (a.t < this.t) {\n c += a.s;\n while (i < this.t) {\n c += this[i];\n r[i++] = c & this.DM;\n c >>= this.DB;\n }\n c += this.s;\n }\n else {\n c += this.s;\n while (i < a.t) {\n c += a[i];\n r[i++] = c & this.DM;\n c >>= this.DB;\n }\n c += a.s;\n }\n r.s = (c < 0) ? -1 : 0;\n if (c > 0) {\n r[i++] = c;\n }\n else if (c < -1) {\n r[i++] = this.DV + c;\n }\n r.t = i;\n r.clamp();\n }\n // BigInteger.prototype.dMultiply = bnpDMultiply;\n // (protected) this *= n, this >= 0, 1 < n < DV\n dMultiply(n) {\n this[this.t] = this.am(0, n - 1, this, 0, 0, this.t);\n ++this.t;\n this.clamp();\n }\n // BigInteger.prototype.dAddOffset = bnpDAddOffset;\n // (protected) this += n << w words, this >= 0\n dAddOffset(n, w) {\n if (n == 0) {\n return;\n }\n while (this.t <= w) {\n this[this.t++] = 0;\n }\n this[w] += n;\n while (this[w] >= this.DV) {\n this[w] -= this.DV;\n if (++w >= this.t) {\n this[this.t++] = 0;\n }\n ++this[w];\n }\n }\n // BigInteger.prototype.multiplyLowerTo = bnpMultiplyLowerTo;\n // (protected) r = lower n words of \"this * a\", a.t <= n\n // \"this\" should be the larger one if appropriate.\n multiplyLowerTo(a, n, r) {\n let i = Math.min(this.t + a.t, n);\n r.s = 0; // assumes a,this >= 0\n r.t = i;\n while (i > 0) {\n r[--i] = 0;\n }\n for (const j = r.t - this.t; i < j; ++i) {\n r[i + this.t] = this.am(0, a[i], r, i, 0, this.t);\n }\n for (const j = Math.min(a.t, n); i < j; ++i) {\n this.am(0, a[i], r, i, 0, n - i);\n }\n r.clamp();\n }\n // BigInteger.prototype.multiplyUpperTo = bnpMultiplyUpperTo;\n // (protected) r = \"this * a\" without lower n words, n > 0\n // \"this\" should be the larger one if appropriate.\n multiplyUpperTo(a, n, r) {\n --n;\n let i = r.t = this.t + a.t - n;\n r.s = 0; // assumes a,this >= 0\n while (--i >= 0) {\n r[i] = 0;\n }\n for (i = Math.max(n - this.t, 0); i < a.t; ++i) {\n r[this.t + i - n] = this.am(n - i, a[i], r, 0, 0, this.t + i - n);\n }\n r.clamp();\n r.drShiftTo(1, r);\n }\n // BigInteger.prototype.modInt = bnpModInt;\n // (protected) this % n, n < 2^26\n modInt(n) {\n if (n <= 0) {\n return 0;\n }\n const d = this.DV % n;\n let r = (this.s < 0) ? n - 1 : 0;\n if (this.t > 0) {\n if (d == 0) {\n r = this[0] % n;\n }\n else {\n for (let i = this.t - 1; i >= 0; --i) {\n r = (d * r + this[i]) % n;\n }\n }\n }\n return r;\n }\n // BigInteger.prototype.millerRabin = bnpMillerRabin;\n // (protected) true if probably prime (HAC 4.24, Miller-Rabin)\n millerRabin(t) {\n const n1 = this.subtract(BigInteger.ONE);\n const k = n1.getLowestSetBit();\n if (k <= 0) {\n return false;\n }\n const r = n1.shiftRight(k);\n t = (t + 1) >> 1;\n if (t > lowprimes.length) {\n t = lowprimes.length;\n }\n const a = nbi();\n for (let i = 0; i < t; ++i) {\n // Pick bases at random, instead of starting at 2\n a.fromInt(lowprimes[Math.floor(Math.random() * lowprimes.length)]);\n let y = a.modPow(r, this);\n if (y.compareTo(BigInteger.ONE) != 0 && y.compareTo(n1) != 0) {\n let j = 1;\n while (j++ < k && y.compareTo(n1) != 0) {\n y = y.modPowInt(2, this);\n if (y.compareTo(BigInteger.ONE) == 0) {\n return false;\n }\n }\n if (y.compareTo(n1) != 0) {\n return false;\n }\n }\n }\n return true;\n }\n // BigInteger.prototype.square = bnSquare;\n // (public) this^2\n square() {\n const r = nbi();\n this.squareTo(r);\n return r;\n }\n //#region ASYNC\n // Public API method\n gcda(a, callback) {\n let x = (this.s < 0) ? this.negate() : this.clone();\n let y = (a.s < 0) ? a.negate() : a.clone();\n if (x.compareTo(y) < 0) {\n const t = x;\n x = y;\n y = t;\n }\n let i = x.getLowestSetBit();\n let g = y.getLowestSetBit();\n if (g < 0) {\n callback(x);\n return;\n }\n if (i < g) {\n g = i;\n }\n if (g > 0) {\n x.rShiftTo(g, x);\n y.rShiftTo(g, y);\n }\n // Workhorse of the algorithm, gets called 200 - 800 times per 512 bit keygen.\n const gcda1 = function () {\n if ((i = x.getLowestSetBit()) > 0) {\n x.rShiftTo(i, x);\n }\n if ((i = y.getLowestSetBit()) > 0) {\n y.rShiftTo(i, y);\n }\n if (x.compareTo(y) >= 0) {\n x.subTo(y, x);\n x.rShiftTo(1, x);\n }\n else {\n y.subTo(x, y);\n y.rShiftTo(1, y);\n }\n if (!(x.signum() > 0)) {\n if (g > 0) {\n y.lShiftTo(g, y);\n }\n setTimeout(function () { callback(y); }, 0); // escape\n }\n else {\n setTimeout(gcda1, 0);\n }\n };\n setTimeout(gcda1, 10);\n }\n // (protected) alternate constructor\n fromNumberAsync(a, b, c, callback) {\n if (\"number\" == typeof b) {\n if (a < 2) {\n this.fromInt(1);\n }\n else {\n this.fromNumber(a, c);\n if (!this.testBit(a - 1)) {\n this.bitwiseTo(BigInteger.ONE.shiftLeft(a - 1), op_or, this);\n }\n if (this.isEven()) {\n this.dAddOffset(1, 0);\n }\n const bnp = this;\n const bnpfn1 = function () {\n bnp.dAddOffset(2, 0);\n if (bnp.bitLength() > a) {\n bnp.subTo(BigInteger.ONE.shiftLeft(a - 1), bnp);\n }\n if (bnp.isProbablePrime(b)) {\n setTimeout(function () { callback(); }, 0); // escape\n }\n else {\n setTimeout(bnpfn1, 0);\n }\n };\n setTimeout(bnpfn1, 0);\n }\n }\n else {\n const x = [];\n const t = a & 7;\n x.length = (a >> 3) + 1;\n b.nextBytes(x);\n if (t > 0) {\n x[0] &= ((1 << t) - 1);\n }\n else {\n x[0] = 0;\n }\n this.fromString(x, 256);\n }\n }\n}\n//#region REDUCERS\n//#region NullExp\nclass NullExp {\n constructor() {\n }\n // NullExp.prototype.convert = nNop;\n convert(x) {\n return x;\n }\n // NullExp.prototype.revert = nNop;\n revert(x) {\n return x;\n }\n // NullExp.prototype.mulTo = nMulTo;\n mulTo(x, y, r) {\n x.multiplyTo(y, r);\n }\n // NullExp.prototype.sqrTo = nSqrTo;\n sqrTo(x, r) {\n x.squareTo(r);\n }\n}\n// Modular reduction using \"classic\" algorithm\nclass Classic {\n constructor(m) {\n this.m = m;\n }\n // Classic.prototype.convert = cConvert;\n convert(x) {\n if (x.s < 0 || x.compareTo(this.m) >= 0) {\n return x.mod(this.m);\n }\n else {\n return x;\n }\n }\n // Classic.prototype.revert = cRevert;\n revert(x) {\n return x;\n }\n // Classic.prototype.reduce = cReduce;\n reduce(x) {\n x.divRemTo(this.m, null, x);\n }\n // Classic.prototype.mulTo = cMulTo;\n mulTo(x, y, r) {\n x.multiplyTo(y, r);\n this.reduce(r);\n }\n // Classic.prototype.sqrTo = cSqrTo;\n sqrTo(x, r) {\n x.squareTo(r);\n this.reduce(r);\n }\n}\n//#endregion\n//#region Montgomery\n// Montgomery reduction\nclass Montgomery {\n constructor(m) {\n this.m = m;\n this.mp = m.invDigit();\n this.mpl = this.mp & 0x7fff;\n this.mph = this.mp >> 15;\n this.um = (1 << (m.DB - 15)) - 1;\n this.mt2 = 2 * m.t;\n }\n // Montgomery.prototype.convert = montConvert;\n // xR mod m\n convert(x) {\n const r = nbi();\n x.abs().dlShiftTo(this.m.t, r);\n r.divRemTo(this.m, null, r);\n if (x.s < 0 && r.compareTo(BigInteger.ZERO) > 0) {\n this.m.subTo(r, r);\n }\n return r;\n }\n // Montgomery.prototype.revert = montRevert;\n // x/R mod m\n revert(x) {\n const r = nbi();\n x.copyTo(r);\n this.reduce(r);\n return r;\n }\n // Montgomery.prototype.reduce = montReduce;\n // x = x/R mod m (HAC 14.32)\n reduce(x) {\n while (x.t <= this.mt2) {\n // pad x so am has enough room later\n x[x.t++] = 0;\n }\n for (let i = 0; i < this.m.t; ++i) {\n // faster way of calculating u0 = x[i]*mp mod DV\n let j = x[i] & 0x7fff;\n const u0 = (j * this.mpl + (((j * this.mph + (x[i] >> 15) * this.mpl) & this.um) << 15)) & x.DM;\n // use am to combine the multiply-shift-add into one call\n j = i + this.m.t;\n x[j] += this.m.am(0, u0, x, i, 0, this.m.t);\n // propagate carry\n while (x[j] >= x.DV) {\n x[j] -= x.DV;\n x[++j]++;\n }\n }\n x.clamp();\n x.drShiftTo(this.m.t, x);\n if (x.compareTo(this.m) >= 0) {\n x.subTo(this.m, x);\n }\n }\n // Montgomery.prototype.mulTo = montMulTo;\n // r = \"xy/R mod m\"; x,y != r\n mulTo(x, y, r) {\n x.multiplyTo(y, r);\n this.reduce(r);\n }\n // Montgomery.prototype.sqrTo = montSqrTo;\n // r = \"x^2/R mod m\"; x != r\n sqrTo(x, r) {\n x.squareTo(r);\n this.reduce(r);\n }\n}\n//#endregion Montgomery\n//#region Barrett\n// Barrett modular reduction\nclass Barrett {\n constructor(m) {\n this.m = m;\n // setup Barrett\n this.r2 = nbi();\n this.q3 = nbi();\n BigInteger.ONE.dlShiftTo(2 * m.t, this.r2);\n this.mu = this.r2.divide(m);\n }\n // Barrett.prototype.convert = barrettConvert;\n convert(x) {\n if (x.s < 0 || x.t > 2 * this.m.t) {\n return x.mod(this.m);\n }\n else if (x.compareTo(this.m) < 0) {\n return x;\n }\n else {\n const r = nbi();\n x.copyTo(r);\n this.reduce(r);\n return r;\n }\n }\n // Barrett.prototype.revert = barrettRevert;\n revert(x) {\n return x;\n }\n // Barrett.prototype.reduce = barrettReduce;\n // x = x mod m (HAC 14.42)\n reduce(x) {\n x.drShiftTo(this.m.t - 1, this.r2);\n if (x.t > this.m.t + 1) {\n x.t = this.m.t + 1;\n x.clamp();\n }\n this.mu.multiplyUpperTo(this.r2, this.m.t + 1, this.q3);\n this.m.multiplyLowerTo(this.q3, this.m.t + 1, this.r2);\n while (x.compareTo(this.r2) < 0) {\n x.dAddOffset(1, this.m.t + 1);\n }\n x.subTo(this.r2, x);\n while (x.compareTo(this.m) >= 0) {\n x.subTo(this.m, x);\n }\n }\n // Barrett.prototype.mulTo = barrettMulTo;\n // r = x*y mod m; x,y != r\n mulTo(x, y, r) {\n x.multiplyTo(y, r);\n this.reduce(r);\n }\n // Barrett.prototype.sqrTo = barrettSqrTo;\n // r = x^2 mod m; x != r\n sqrTo(x, r) {\n x.squareTo(r);\n this.reduce(r);\n }\n}\n//#endregion\n//#endregion REDUCERS\n// return new, unset BigInteger\nexport function nbi() { return new BigInteger(null); }\nexport function parseBigInt(str, r) {\n return new BigInteger(str, r);\n}\n// am: Compute w_j += (x*this_i), propagate carries,\n// c is initial carry, returns final carry.\n// c < 3*dvalue, x < 2*dvalue, this_i < dvalue\n// We need to select the fastest one that works in this environment.\nconst inBrowser = typeof navigator !== \"undefined\";\nif (inBrowser && j_lm && (navigator.appName == \"Microsoft Internet Explorer\")) {\n // am2 avoids a big mult-and-extract completely.\n // Max digit bits should be <= 30 because we do bitwise ops\n // on values up to 2*hdvalue^2-hdvalue-1 (< 2^31)\n BigInteger.prototype.am = function am2(i, x, w, j, c, n) {\n const xl = x & 0x7fff;\n const xh = x >> 15;\n while (--n >= 0) {\n let l = this[i] & 0x7fff;\n const h = this[i++] >> 15;\n const m = xh * l + h * xl;\n l = xl * l + ((m & 0x7fff) << 15) + w[j] + (c & 0x3fffffff);\n c = (l >>> 30) + (m >>> 15) + xh * h + (c >>> 30);\n w[j++] = l & 0x3fffffff;\n }\n return c;\n };\n dbits = 30;\n}\nelse if (inBrowser && j_lm && (navigator.appName != \"Netscape\")) {\n // am1: use a single mult and divide to get the high bits,\n // max digit bits should be 26 because\n // max internal value = 2*dvalue^2-2*dvalue (< 2^53)\n BigInteger.prototype.am = function am1(i, x, w, j, c, n) {\n while (--n >= 0) {\n const v = x * this[i++] + w[j] + c;\n c = Math.floor(v / 0x4000000);\n w[j++] = v & 0x3ffffff;\n }\n return c;\n };\n dbits = 26;\n}\nelse { // Mozilla/Netscape seems to prefer am3\n // Alternately, set max digit bits to 28 since some\n // browsers slow down when dealing with 32-bit numbers.\n BigInteger.prototype.am = function am3(i, x, w, j, c, n) {\n const xl = x & 0x3fff;\n const xh = x >> 14;\n while (--n >= 0) {\n let l = this[i] & 0x3fff;\n const h = this[i++] >> 14;\n const m = xh * l + h * xl;\n l = xl * l + ((m & 0x3fff) << 14) + w[j] + c;\n c = (l >> 28) + (m >> 14) + xh * h;\n w[j++] = l & 0xfffffff;\n }\n return c;\n };\n dbits = 28;\n}\nBigInteger.prototype.DB = dbits;\nBigInteger.prototype.DM = ((1 << dbits) - 1);\nBigInteger.prototype.DV = (1 << dbits);\nconst BI_FP = 52;\nBigInteger.prototype.FV = Math.pow(2, BI_FP);\nBigInteger.prototype.F1 = BI_FP - dbits;\nBigInteger.prototype.F2 = 2 * dbits - BI_FP;\n// Digit conversions\nconst BI_RC = [];\nlet rr;\nlet vv;\nrr = \"0\".charCodeAt(0);\nfor (vv = 0; vv <= 9; ++vv) {\n BI_RC[rr++] = vv;\n}\nrr = \"a\".charCodeAt(0);\nfor (vv = 10; vv < 36; ++vv) {\n BI_RC[rr++] = vv;\n}\nrr = \"A\".charCodeAt(0);\nfor (vv = 10; vv < 36; ++vv) {\n BI_RC[rr++] = vv;\n}\nexport function intAt(s, i) {\n const c = BI_RC[s.charCodeAt(i)];\n return (c == null) ? -1 : c;\n}\n// return bigint initialized to value\nexport function nbv(i) {\n const r = nbi();\n r.fromInt(i);\n return r;\n}\n// returns bit length of the integer x\nexport function nbits(x) {\n let r = 1;\n let t;\n if ((t = x >>> 16) != 0) {\n x = t;\n r += 16;\n }\n if ((t = x >> 8) != 0) {\n x = t;\n r += 8;\n }\n if ((t = x >> 4) != 0) {\n x = t;\n r += 4;\n }\n if ((t = x >> 2) != 0) {\n x = t;\n r += 2;\n }\n if ((t = x >> 1) != 0) {\n x = t;\n r += 1;\n }\n return r;\n}\n// \"constants\"\nBigInteger.ZERO = nbv(0);\nBigInteger.ONE = nbv(1);\n","// ----------------------------------------------------------------------------\n\n// PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:\n// https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code\n// EDIT THE CORRESPONDENT .ts FILE INSTEAD\n\n// Depends on jsbn.js and rng.js\n// Version 1.1: support utf-8 encoding in pkcs1pad2\n// convert a (hex) string to a bignum object\nimport { BigInteger, nbi, parseBigInt } from \"./jsbn.js\";\nimport { SecureRandom } from \"./rng.js\";\n// function linebrk(s,n) {\n// var ret = \"\";\n// var i = 0;\n// while(i + n < s.length) {\n// ret += s.substring(i,i+n) + \"\\n\";\n// i += n;\n// }\n// return ret + s.substring(i,s.length);\n// }\n// function byte2Hex(b) {\n// if(b < 0x10)\n// return \"0\" + b.toString(16);\n// else\n// return b.toString(16);\n// }\nfunction pkcs1pad1(s, n) {\n if (n < s.length + 22) {\n console.error(\"Message too long for RSA\");\n return null;\n }\n const len = n - s.length - 6;\n let filler = \"\";\n for (let f = 0; f < len; f += 2) {\n filler += \"ff\";\n }\n const m = \"0001\" + filler + \"00\" + s;\n return parseBigInt(m, 16);\n}\n// PKCS#1 (type 2, random) pad input string s to n bytes, and return a bigint\nfunction pkcs1pad2(s, n) {\n if (n < s.length + 11) { // TODO: fix for utf-8\n console.error(\"Message too long for RSA\");\n return null;\n }\n const ba = [];\n let i = s.length - 1;\n while (i >= 0 && n > 0) {\n const c = s.charCodeAt(i--);\n if (c < 128) { // encode using utf-8\n ba[--n] = c;\n }\n else if ((c > 127) && (c < 2048)) {\n ba[--n] = (c & 63) | 128;\n ba[--n] = (c >> 6) | 192;\n }\n else {\n ba[--n] = (c & 63) | 128;\n ba[--n] = ((c >> 6) & 63) | 128;\n ba[--n] = (c >> 12) | 224;\n }\n }\n ba[--n] = 0;\n const rng = new SecureRandom();\n const x = [];\n while (n > 2) { // random non-zero pad\n x[0] = 0;\n while (x[0] == 0) {\n rng.nextBytes(x);\n }\n ba[--n] = x[0];\n }\n ba[--n] = 2;\n ba[--n] = 0;\n return new BigInteger(ba);\n}\n// \"empty\" RSA key constructor\nexport class RSAKey {\n constructor() {\n this.n = null;\n this.e = 0;\n this.d = null;\n this.p = null;\n this.q = null;\n this.dmp1 = null;\n this.dmq1 = null;\n this.coeff = null;\n }\n //#region PROTECTED\n // protected\n // RSAKey.prototype.doPublic = RSADoPublic;\n // Perform raw public operation on \"x\": return x^e (mod n)\n doPublic(x) {\n return x.modPowInt(this.e, this.n);\n }\n // RSAKey.prototype.doPrivate = RSADoPrivate;\n // Perform raw private operation on \"x\": return x^d (mod n)\n doPrivate(x) {\n if (this.p == null || this.q == null) {\n return x.modPow(this.d, this.n);\n }\n // TODO: re-calculate any missing CRT params\n let xp = x.mod(this.p).modPow(this.dmp1, this.p);\n const xq = x.mod(this.q).modPow(this.dmq1, this.q);\n while (xp.compareTo(xq) < 0) {\n xp = xp.add(this.p);\n }\n return xp.subtract(xq).multiply(this.coeff).mod(this.p).multiply(this.q).add(xq);\n }\n //#endregion PROTECTED\n //#region PUBLIC\n // RSAKey.prototype.setPublic = RSASetPublic;\n // Set the public key fields N and e from hex strings\n setPublic(N, E) {\n if (N != null && E != null && N.length > 0 && E.length > 0) {\n this.n = parseBigInt(N, 16);\n this.e = parseInt(E, 16);\n }\n else {\n console.error(\"Invalid RSA public key\");\n }\n }\n // RSAKey.prototype.encrypt = RSAEncrypt;\n // Return the PKCS#1 RSA encryption of \"text\" as an even-length hex string\n encrypt(text) {\n const maxLength = (this.n.bitLength() + 7) >> 3;\n const m = pkcs1pad2(text, maxLength);\n if (m == null) {\n return null;\n }\n const c = this.doPublic(m);\n if (c == null) {\n return null;\n }\n let h = c.toString(16);\n let length = h.length;\n // fix zero before result\n for (let i = 0; i < maxLength * 2 - length; i++) {\n h = \"0\" + h;\n }\n return h;\n }\n // RSAKey.prototype.setPrivate = RSASetPrivate;\n // Set the private key fields N, e, and d from hex strings\n setPrivate(N, E, D) {\n if (N != null && E != null && N.length > 0 && E.length > 0) {\n this.n = parseBigInt(N, 16);\n this.e = parseInt(E, 16);\n this.d = parseBigInt(D, 16);\n }\n else {\n console.error(\"Invalid RSA private key\");\n }\n }\n // RSAKey.prototype.setPrivateEx = RSASetPrivateEx;\n // Set the private key fields N, e, d and CRT params from hex strings\n setPrivateEx(N, E, D, P, Q, DP, DQ, C) {\n if (N != null && E != null && N.length > 0 && E.length > 0) {\n this.n = parseBigInt(N, 16);\n this.e = parseInt(E, 16);\n this.d = parseBigInt(D, 16);\n this.p = parseBigInt(P, 16);\n this.q = parseBigInt(Q, 16);\n this.dmp1 = parseBigInt(DP, 16);\n this.dmq1 = parseBigInt(DQ, 16);\n this.coeff = parseBigInt(C, 16);\n }\n else {\n console.error(\"Invalid RSA private key\");\n }\n }\n // RSAKey.prototype.generate = RSAGenerate;\n // Generate a new random private key B bits long, using public expt E\n generate(B, E) {\n const rng = new SecureRandom();\n const qs = B >> 1;\n this.e = parseInt(E, 16);\n const ee = new BigInteger(E, 16);\n for (;;) {\n for (;;) {\n this.p = new BigInteger(B - qs, 1, rng);\n if (this.p.subtract(BigInteger.ONE).gcd(ee).compareTo(BigInteger.ONE) == 0 && this.p.isProbablePrime(10)) {\n break;\n }\n }\n for (;;) {\n this.q = new BigInteger(qs, 1, rng);\n if (this.q.subtract(BigInteger.ONE).gcd(ee).compareTo(BigInteger.ONE) == 0 && this.q.isProbablePrime(10)) {\n break;\n }\n }\n if (this.p.compareTo(this.q) <= 0) {\n const t = this.p;\n this.p = this.q;\n this.q = t;\n }\n const p1 = this.p.subtract(BigInteger.ONE);\n const q1 = this.q.subtract(BigInteger.ONE);\n const phi = p1.multiply(q1);\n if (phi.gcd(ee).compareTo(BigInteger.ONE) == 0) {\n this.n = this.p.multiply(this.q);\n this.d = ee.modInverse(phi);\n this.dmp1 = this.d.mod(p1);\n this.dmq1 = this.d.mod(q1);\n this.coeff = this.q.modInverse(this.p);\n break;\n }\n }\n }\n // RSAKey.prototype.decrypt = RSADecrypt;\n // Return the PKCS#1 RSA decryption of \"ctext\".\n // \"ctext\" is an even-length hex string and the output is a plain string.\n decrypt(ctext) {\n const c = parseBigInt(ctext, 16);\n const m = this.doPrivate(c);\n if (m == null) {\n return null;\n }\n return pkcs1unpad2(m, (this.n.bitLength() + 7) >> 3);\n }\n // Generate a new random private key B bits long, using public expt E\n generateAsync(B, E, callback) {\n const rng = new SecureRandom();\n const qs = B >> 1;\n this.e = parseInt(E, 16);\n const ee = new BigInteger(E, 16);\n const rsa = this;\n // These functions have non-descript names because they were originally for(;;) loops.\n // I don't know about cryptography to give them better names than loop1-4.\n const loop1 = function () {\n const loop4 = function () {\n if (rsa.p.compareTo(rsa.q) <= 0) {\n const t = rsa.p;\n rsa.p = rsa.q;\n rsa.q = t;\n }\n const p1 = rsa.p.subtract(BigInteger.ONE);\n const q1 = rsa.q.subtract(BigInteger.ONE);\n const phi = p1.multiply(q1);\n if (phi.gcd(ee).compareTo(BigInteger.ONE) == 0) {\n rsa.n = rsa.p.multiply(rsa.q);\n rsa.d = ee.modInverse(phi);\n rsa.dmp1 = rsa.d.mod(p1);\n rsa.dmq1 = rsa.d.mod(q1);\n rsa.coeff = rsa.q.modInverse(rsa.p);\n setTimeout(function () { callback(); }, 0); // escape\n }\n else {\n setTimeout(loop1, 0);\n }\n };\n const loop3 = function () {\n rsa.q = nbi();\n rsa.q.fromNumberAsync(qs, 1, rng, function () {\n rsa.q.subtract(BigInteger.ONE).gcda(ee, function (r) {\n if (r.compareTo(BigInteger.ONE) == 0 && rsa.q.isProbablePrime(10)) {\n setTimeout(loop4, 0);\n }\n else {\n setTimeout(loop3, 0);\n }\n });\n });\n };\n const loop2 = function () {\n rsa.p = nbi();\n rsa.p.fromNumberAsync(B - qs, 1, rng, function () {\n rsa.p.subtract(BigInteger.ONE).gcda(ee, function (r) {\n if (r.compareTo(BigInteger.ONE) == 0 && rsa.p.isProbablePrime(10)) {\n setTimeout(loop3, 0);\n }\n else {\n setTimeout(loop2, 0);\n }\n });\n });\n };\n setTimeout(loop2, 0);\n };\n setTimeout(loop1, 0);\n }\n sign(text, digestMethod, digestName) {\n const header = getDigestHeader(digestName);\n const digest = header + digestMethod(text).toString();\n const m = pkcs1pad1(digest, this.n.bitLength() / 4);\n if (m == null) {\n return null;\n }\n const c = this.doPrivate(m);\n if (c == null) {\n return null;\n }\n const h = c.toString(16);\n if ((h.length & 1) == 0) {\n return h;\n }\n else {\n return \"0\" + h;\n }\n }\n verify(text, signature, digestMethod) {\n const c = parseBigInt(signature, 16);\n const m = this.doPublic(c);\n if (m == null) {\n return null;\n }\n const unpadded = m.toString(16).replace(/^1f+00/, \"\");\n const digest = removeDigestHeader(unpadded);\n return digest == digestMethod(text).toString();\n }\n}\n// Undo PKCS#1 (type 2, random) padding and, if valid, return the plaintext\nfunction pkcs1unpad2(d, n) {\n const b = d.toByteArray();\n let i = 0;\n while (i < b.length && b[i] == 0) {\n ++i;\n }\n if (b.length - i != n - 1 || b[i] != 2) {\n return null;\n }\n ++i;\n while (b[i] != 0) {\n if (++i >= b.length) {\n return null;\n }\n }\n let ret = \"\";\n while (++i < b.length) {\n const c = b[i] & 255;\n if (c < 128) { // utf-8 decode\n ret += String.fromCharCode(c);\n }\n else if ((c > 191) && (c < 224)) {\n ret += String.fromCharCode(((c & 31) << 6) | (b[i + 1] & 63));\n ++i;\n }\n else {\n ret += String.fromCharCode(((c & 15) << 12) | ((b[i + 1] & 63) << 6) | (b[i + 2] & 63));\n i += 2;\n }\n }\n return ret;\n}\n// https://tools.ietf.org/html/rfc3447#page-43\nconst DIGEST_HEADERS = {\n md2: \"3020300c06082a864886f70d020205000410\",\n md5: \"3020300c06082a864886f70d020505000410\",\n sha1: \"3021300906052b0e03021a05000414\",\n sha224: \"302d300d06096086480165030402040500041c\",\n sha256: \"3031300d060960864801650304020105000420\",\n sha384: \"3041300d060960864801650304020205000430\",\n sha512: \"3051300d060960864801650304020305000440\",\n ripemd160: \"3021300906052b2403020105000414\"\n};\nfunction getDigestHeader(name) {\n return DIGEST_HEADERS[name] || \"\";\n}\nfunction removeDigestHeader(str) {\n for (const name in DIGEST_HEADERS) {\n if (DIGEST_HEADERS.hasOwnProperty(name)) {\n const header = DIGEST_HEADERS[name];\n const len = header.length;\n if (str.substr(0, len) == header) {\n return str.substr(len);\n }\n }\n }\n return str;\n}\n// Return the PKCS#1 RSA encryption of \"text\" as a Base64-encoded string\n// function RSAEncryptB64(text) {\n// var h = this.encrypt(text);\n// if(h) return hex2b64(h); else return null;\n// }\n// public\n// RSAKey.prototype.encrypt_b64 = RSAEncryptB64;\n","// ----------------------------------------------------------------------------\n\n// PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:\n// https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code\n// EDIT THE CORRESPONDENT .ts FILE INSTEAD\n\n/*!\nCopyright (c) 2011, Yahoo! Inc. All rights reserved.\nCode licensed under the BSD License:\nhttp://developer.yahoo.com/yui/license.html\nversion: 2.9.0\n*/\nexport var YAHOO = {};\nYAHOO.lang = {\n /**\n * Utility to set up the prototype, constructor and superclass properties to\n * support an inheritance strategy that can chain constructors and methods.\n * Static members will not be inherited.\n *\n * @method extend\n * @static\n * @param {Function} subc the object to modify\n * @param {Function} superc the object to inherit\n * @param {Object} overrides additional properties/methods to add to the\n * subclass prototype. These will override the\n * matching items obtained from the superclass\n * if present.\n */\n extend: function (subc, superc, overrides) {\n if (!superc || !subc) {\n throw new Error(\"YAHOO.lang.extend failed, please check that \" +\n \"all dependencies are included.\");\n }\n var F = function () { };\n F.prototype = superc.prototype;\n subc.prototype = new F();\n subc.prototype.constructor = subc;\n subc.superclass = superc.prototype;\n if (superc.prototype.constructor == Object.prototype.constructor) {\n superc.prototype.constructor = superc;\n }\n if (overrides) {\n var i;\n for (i in overrides) {\n subc.prototype[i] = overrides[i];\n }\n /*\n * IE will not enumerate native functions in a derived object even if the\n * function was overridden. This is a workaround for specific functions\n * we care about on the Object prototype.\n * @property _IEEnumFix\n * @param {Function} r the object to receive the augmentation\n * @param {Function} s the object that supplies the properties to augment\n * @static\n * @private\n */\n var _IEEnumFix = function () { }, ADD = [\"toString\", \"valueOf\"];\n try {\n if (/MSIE/.test(navigator.userAgent)) {\n _IEEnumFix = function (r, s) {\n for (i = 0; i < ADD.length; i = i + 1) {\n var fname = ADD[i], f = s[fname];\n if (typeof f === 'function' && f != Object.prototype[fname]) {\n r[fname] = f;\n }\n }\n };\n }\n }\n catch (ex) { }\n ;\n _IEEnumFix(subc.prototype, overrides);\n }\n }\n};\n","// ----------------------------------------------------------------------------\n\n// PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:\n// https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code\n// EDIT THE CORRESPONDENT .ts FILE INSTEAD\n\n/* asn1-1.0.13.js (c) 2013-2017 Kenji Urushima | kjur.github.com/jsrsasign/license\n */\n/*\n * asn1.js - ASN.1 DER encoder classes\n *\n * Copyright (c) 2013-2017 Kenji Urushima (kenji.urushima@gmail.com)\n *\n * This software is licensed under the terms of the MIT License.\n * https://kjur.github.io/jsrsasign/license\n *\n * The above copyright and license notice shall be\n * included in all copies or substantial portions of the Software.\n */\nimport { BigInteger } from \"../jsbn/jsbn.js\";\nimport { YAHOO } from \"./yahoo.js\";\n/**\n * @fileOverview\n * @name asn1-1.0.js\n * @author Kenji Urushima kenji.urushima@gmail.com\n * @version asn1 1.0.13 (2017-Jun-02)\n * @since jsrsasign 2.1\n * @license <a href=\"https://kjur.github.io/jsrsasign/license/\">MIT License</a>\n */\n/**\n * kjur's class library name space\n * <p>\n * This name space provides following name spaces:\n * <ul>\n * <li>{@link KJUR.asn1} - ASN.1 primitive hexadecimal encoder</li>\n * <li>{@link KJUR.asn1.x509} - ASN.1 structure for X.509 certificate and CRL</li>\n * <li>{@link KJUR.crypto} - Java Cryptographic Extension(JCE) style MessageDigest/Signature\n * class and utilities</li>\n * </ul>\n * </p>\n * NOTE: Please ignore method summary and document of this namespace. This caused by a bug of jsdoc2.\n * @name KJUR\n * @namespace kjur's class library name space\n */\nexport var KJUR = {};\n/**\n * kjur's ASN.1 class library name space\n * <p>\n * This is ITU-T X.690 ASN.1 DER encoder class library and\n * class structure and methods is very similar to\n * org.bouncycastle.asn1 package of\n * well known BouncyCaslte Cryptography Library.\n * <h4>PROVIDING ASN.1 PRIMITIVES</h4>\n * Here are ASN.1 DER primitive classes.\n * <ul>\n * <li>0x01 {@link KJUR.asn1.DERBoolean}</li>\n * <li>0x02 {@link KJUR.asn1.DERInteger}</li>\n * <li>0x03 {@link KJUR.asn1.DERBitString}</li>\n * <li>0x04 {@link KJUR.asn1.DEROctetString}</li>\n * <li>0x05 {@link KJUR.asn1.DERNull}</li>\n * <li>0x06 {@link KJUR.asn1.DERObjectIdentifier}</li>\n * <li>0x0a {@link KJUR.asn1.DEREnumerated}</li>\n * <li>0x0c {@link KJUR.asn1.DERUTF8String}</li>\n * <li>0x12 {@link KJUR.asn1.DERNumericString}</li>\n * <li>0x13 {@link KJUR.asn1.DERPrintableString}</li>\n * <li>0x14 {@link KJUR.asn1.DERTeletexString}</li>\n * <li>0x16 {@link KJUR.asn1.DERIA5String}</li>\n * <li>0x17 {@link KJUR.asn1.DERUTCTime}</li>\n * <li>0x18 {@link KJUR.asn1.DERGeneralizedTime}</li>\n * <li>0x30 {@link KJUR.asn1.DERSequence}</li>\n * <li>0x31 {@link KJUR.asn1.DERSet}</li>\n * </ul>\n * <h4>OTHER ASN.1 CLASSES</h4>\n * <ul>\n * <li>{@link KJUR.asn1.ASN1Object}</li>\n * <li>{@link KJUR.asn1.DERAbstractString}</li>\n * <li>{@link KJUR.asn1.DERAbstractTime}</li>\n * <li>{@link KJUR.asn1.DERAbstractStructured}</li>\n * <li>{@link KJUR.asn1.DERTaggedObject}</li>\n * </ul>\n * <h4>SUB NAME SPACES</h4>\n * <ul>\n * <li>{@link KJUR.asn1.cades} - CAdES long term signature format</li>\n * <li>{@link KJUR.asn1.cms} - Cryptographic Message Syntax</li>\n * <li>{@link KJUR.asn1.csr} - Certificate Signing Request (CSR/PKCS#10)</li>\n * <li>{@link KJUR.asn1.tsp} - RFC 3161 Timestamping Protocol Format</li>\n * <li>{@link KJUR.asn1.x509} - RFC 5280 X.509 certificate and CRL</li>\n * </ul>\n * </p>\n * NOTE: Please ignore method summary and document of this namespace.\n * This caused by a bug of jsdoc2.\n * @name KJUR.asn1\n * @namespace\n */\nif (typeof KJUR.asn1 == \"undefined\" || !KJUR.asn1)\n KJUR.asn1 = {};\n/**\n * ASN1 utilities class\n * @type Class\n * @name KJUR.asn1.ASN1Util\n * @class ASN1 utilities class\n * @since asn1 1.0.2\n */\nKJUR.asn1.ASN1Util = new function () {\n this.integerToByteHex = function (i) {\n var h = i.toString(16);\n if ((h.length % 2) == 1)\n h = '0' + h;\n return h;\n };\n this.bigIntToMinTwosComplementsHex = function (bigIntegerValue) {\n var h = bigIntegerValue.toString(16);\n if (h.substr(0, 1) != '-') {\n if (h.length % 2 == 1) {\n h = '0' + h;\n }\n else {\n if (!h.match(/^[0-7]/)) {\n h = '00' + h;\n }\n }\n }\n else {\n var hPos = h.substr(1);\n var xorLen = hPos.length;\n if (xorLen % 2 == 1) {\n xorLen += 1;\n }\n else {\n if (!h.match(/^[0-7]/)) {\n xorLen += 2;\n }\n }\n var hMask = '';\n for (var i = 0; i < xorLen; i++) {\n hMask += 'f';\n }\n var biMask = new BigInteger(hMask, 16);\n var biNeg = biMask.xor(bigIntegerValue).add(BigInteger.ONE);\n h = biNeg.toString(16).replace(/^-/, '');\n }\n return h;\n };\n /**\n * get PEM string from hexadecimal data and header string\n * @name getPEMStringFromHex\n * @memberOf KJUR.asn1.ASN1Util\n * @function\n * @param {String} dataHex hexadecimal string of PEM body\n * @param {String} pemHeader PEM header string (ex. 'RSA PRIVATE KEY')\n * @return {String} PEM formatted string of input data\n * @description\n * This method converts a hexadecimal string to a PEM string with\n * a specified header. Its line break will be CRLF(\"\\r\\n\").\n * @example\n * var pem = KJUR.asn1.ASN1Util.getPEMStringFromHex('616161', 'RSA PRIVATE KEY');\n * // value of pem will be:\n * -----BEGIN PRIVATE KEY-----\n * YWFh\n * -----END PRIVATE KEY-----\n */\n this.getPEMStringFromHex = function (dataHex, pemHeader) {\n return hextopem(dataHex, pemHeader);\n };\n /**\n * generate ASN1Object specifed by JSON parameters\n * @name newObject\n * @memberOf KJUR.asn1.ASN1Util\n * @function\n * @param {Array} param JSON parameter to generate ASN1Object\n * @return {KJUR.asn1.ASN1Object} generated object\n * @since asn1 1.0.3\n * @description\n * generate any ASN1Object specified by JSON param\n * including ASN.1 primitive or structured.\n * Generally 'param' can be described as follows:\n * <blockquote>\n * {TYPE-OF-ASNOBJ: ASN1OBJ-PARAMETER}\n * </blockquote>\n * 'TYPE-OF-ASN1OBJ' can be one of following symbols:\n * <ul>\n * <li>'bool' - DERBoolean</li>\n * <li>'int' - DERInteger</li>\n * <li>'bitstr' - DERBitString</li>\n * <li>'octstr' - DEROctetString</li>\n * <li>'null' - DERNull</li>\n * <li>'oid' - DERObjectIdentifier</li>\n * <li>'enum' - DEREnumerated</li>\n * <li>'utf8str' - DERUTF8String</li>\n * <li>'numstr' - DERNumericString</li>\n * <li>'prnstr' - DERPrintableString</li>\n * <li>'telstr' - DERTeletexString</li>\n * <li>'ia5str' - DERIA5String</li>\n * <li>'utctime' - DERUTCTime</li>\n * <li>'gentime' - DERGeneralizedTime</li>\n * <li>'seq' - DERSequence</li>\n * <li>'set' - DERSet</li>\n * <li>'tag' - DERTaggedObject</li>\n * </ul>\n * @example\n * newObject({'prnstr': 'aaa'});\n * newObject({'seq': [{'int': 3}, {'prnstr': 'aaa'}]})\n * // ASN.1 Tagged Object\n * newObject({'tag': {'tag': 'a1',\n * 'explicit': true,\n * 'obj': {'seq': [{'int': 3}, {'prnstr': 'aaa'}]}}});\n * // more simple representation of ASN.1 Tagged Object\n * newObject({'tag': ['a1',\n * true,\n * {'seq': [\n * {'int': 3},\n * {'prnstr': 'aaa'}]}\n * ]});\n */\n this.newObject = function (param) {\n var _KJUR = KJUR, _KJUR_asn1 = _KJUR.asn1, _DERBoolean = _KJUR_asn1.DERBoolean, _DERInteger = _KJUR_asn1.DERInteger, _DERBitString = _KJUR_asn1.DERBitString, _DEROctetString = _KJUR_asn1.DEROctetString, _DERNull = _KJUR_asn1.DERNull, _DERObjectIdentifier = _KJUR_asn1.DERObjectIdentifier, _DEREnumerated = _KJUR_asn1.DEREnumerated, _DERUTF8String = _KJUR_asn1.DERUTF8String, _DERNumericString = _KJUR_asn1.DERNumericString, _DERPrintableString = _KJUR_asn1.DERPrintableString, _DERTeletexString = _KJUR_asn1.DERTeletexString, _DERIA5String = _KJUR_asn1.DERIA5String, _DERUTCTime = _KJUR_asn1.DERUTCTime, _DERGeneralizedTime = _KJUR_asn1.DERGeneralizedTime, _DERSequence = _KJUR_asn1.DERSequence, _DERSet = _KJUR_asn1.DERSet, _DERTaggedObject = _KJUR_asn1.DERTaggedObject, _newObject = _KJUR_asn1.ASN1Util.newObject;\n var keys = Object.keys(param);\n if (keys.length != 1)\n throw \"key of param shall be only one.\";\n var key = keys[0];\n if (\":bool:int:bitstr:octstr:null:oid:enum:utf8str:numstr:prnstr:telstr:ia5str:utctime:gentime:seq:set:tag:\".indexOf(\":\" + key + \":\") == -1)\n throw \"undefined key: \" + key;\n if (key == \"bool\")\n return new _DERBoolean(param[key]);\n if (key == \"int\")\n return new _DERInteger(param[key]);\n if (key == \"bitstr\")\n return new _DERBitString(param[key]);\n if (key == \"octstr\")\n return new _DEROctetString(param[key]);\n if (key == \"null\")\n return new _DERNull(param[key]);\n if (key == \"oid\")\n return new _DERObjectIdentifier(param[key]);\n if (key == \"enum\")\n return new _DEREnumerated(param[key]);\n if (key == \"utf8str\")\n return new _DERUTF8String(param[key]);\n if (key == \"numstr\")\n return new _DERNumericString(param[key]);\n if (key == \"prnstr\")\n return new _DERPrintableString(param[key]);\n if (key == \"telstr\")\n return new _DERTeletexString(param[key]);\n if (key == \"ia5str\")\n return new _DERIA5String(param[key]);\n if (key == \"utctime\")\n return new _DERUTCTime(param[key]);\n if (key == \"gentime\")\n return new _DERGeneralizedTime(param[key]);\n if (key == \"seq\") {\n var paramList = param[key];\n var a = [];\n for (var i = 0; i < paramList.length; i++) {\n var asn1Obj = _newObject(paramList[i]);\n a.push(asn1Obj);\n }\n return new _DERSequence({ 'array': a });\n }\n if (key == \"set\") {\n var paramList = param[key];\n var a = [];\n for (var i = 0; i < paramList.length; i++) {\n var asn1Obj = _newObject(paramList[i]);\n a.push(asn1Obj);\n }\n return new _DERSet({ 'array': a });\n }\n if (key == \"tag\") {\n var tagParam = param[key];\n if (Object.prototype.toString.call(tagParam) === '[object Array]' &&\n tagParam.length == 3) {\n var obj = _newObject(tagParam[2]);\n return new _DERTaggedObject({ tag: tagParam[0],\n explicit: tagParam[1],\n obj: obj });\n }\n else {\n var newParam = {};\n if (tagParam.explicit !== undefined)\n newParam.explicit = tagParam.explicit;\n if (tagParam.tag !== undefined)\n newParam.tag = tagParam.tag;\n if (tagParam.obj === undefined)\n throw \"obj shall be specified for 'tag'.\";\n newParam.obj = _newObject(tagParam.obj);\n return new _DERTaggedObject(newParam);\n }\n }\n };\n /**\n * get encoded hexadecimal string of ASN1Object specifed by JSON parameters\n * @name jsonToASN1HEX\n * @memberOf KJUR.asn1.ASN1Util\n * @function\n * @param {Array} param JSON parameter to generate ASN1Object\n * @return hexadecimal string of ASN1Object\n * @since asn1 1.0.4\n * @description\n * As for ASN.1 object representation of JSON object,\n * please see {@link newObject}.\n * @example\n * jsonToASN1HEX({'prnstr': 'aaa'});\n */\n this.jsonToASN1HEX = function (param) {\n var asn1Obj = this.newObject(param);\n return asn1Obj.getEncodedHex();\n };\n};\n/**\n * get dot noted oid number string from hexadecimal value of OID\n * @name oidHexToInt\n * @memberOf KJUR.asn1.ASN1Util\n * @function\n * @param {String} hex hexadecimal value of object identifier\n * @return {String} dot noted string of object identifier\n * @since jsrsasign 4.8.3 asn1 1.0.7\n * @description\n * This static method converts from hexadecimal string representation of\n * ASN.1 value of object identifier to oid number string.\n * @example\n * KJUR.asn1.ASN1Util.oidHexToInt('550406') → \"2.5.4.6\"\n */\nKJUR.asn1.ASN1Util.oidHexToInt = function (hex) {\n var s = \"\";\n var i01 = parseInt(hex.substr(0, 2), 16);\n var i0 = Math.floor(i01 / 40);\n var i1 = i01 % 40;\n var s = i0 + \".\" + i1;\n var binbuf = \"\";\n for (var i = 2; i < hex.length; i += 2) {\n var value = parseInt(hex.substr(i, 2), 16);\n var bin = (\"00000000\" + value.toString(2)).slice(-8);\n binbuf = binbuf + bin.substr(1, 7);\n if (bin.substr(0, 1) == \"0\") {\n var bi = new BigInteger(binbuf, 2);\n s = s + \".\" + bi.toString(10);\n binbuf = \"\";\n }\n }\n ;\n return s;\n};\n/**\n * get hexadecimal value of object identifier from dot noted oid value\n * @name oidIntToHex\n * @memberOf KJUR.asn1.ASN1Util\n * @function\n * @param {String} oidString dot noted string of object identifier\n * @return {String} hexadecimal value of object identifier\n * @since jsrsasign 4.8.3 asn1 1.0.7\n * @description\n * This static method converts from object identifier value string.\n * to hexadecimal string representation of it.\n * @example\n * KJUR.asn1.ASN1Util.oidIntToHex(\"2.5.4.6\") → \"550406\"\n */\nKJUR.asn1.ASN1Util.oidIntToHex = function (oidString) {\n var itox = function (i) {\n var h = i.toString(16);\n if (h.length == 1)\n h = '0' + h;\n return h;\n };\n var roidtox = function (roid) {\n var h = '';\n var bi = new BigInteger(roid, 10);\n var b = bi.toString(2);\n var padLen = 7 - b.length % 7;\n if (padLen == 7)\n padLen = 0;\n var bPad = '';\n for (var i = 0; i < padLen; i++)\n bPad += '0';\n b = bPad + b;\n for (var i = 0; i < b.length - 1; i += 7) {\n var b8 = b.substr(i, 7);\n if (i != b.length - 7)\n b8 = '1' + b8;\n h += itox(parseInt(b8, 2));\n }\n return h;\n };\n if (!oidString.match(/^[0-9.]+$/)) {\n throw \"malformed oid string: \" + oidString;\n }\n var h = '';\n var a = oidString.split('.');\n var i0 = parseInt(a[0]) * 40 + parseInt(a[1]);\n h += itox(i0);\n a.splice(0, 2);\n for (var i = 0; i < a.length; i++) {\n h += roidtox(a[i]);\n }\n return h;\n};\n// ********************************************************************\n// Abstract ASN.1 Classes\n// ********************************************************************\n// ********************************************************************\n/**\n * base class for ASN.1 DER encoder object\n * @name KJUR.asn1.ASN1Object\n * @class base class for ASN.1 DER encoder object\n * @property {Boolean} isModified flag whether internal data was changed\n * @property {String} hTLV hexadecimal string of ASN.1 TLV\n * @property {String} hT hexadecimal string of ASN.1 TLV tag(T)\n * @property {String} hL hexadecimal string of ASN.1 TLV length(L)\n * @property {String} hV hexadecimal string of ASN.1 TLV value(V)\n * @description\n */\nKJUR.asn1.ASN1Object = function () {\n var isModified = true;\n var hTLV = null;\n var hT = '00';\n var hL = '00';\n var hV = '';\n /**\n * get hexadecimal ASN.1 TLV length(L) bytes from TLV value(V)\n * @name getLengthHexFromValue\n * @memberOf KJUR.asn1.ASN1Object#\n * @function\n * @return {String} hexadecimal string of ASN.1 TLV length(L)\n */\n this.getLengthHexFromValue = function () {\n if (typeof this.hV == \"undefined\" || this.hV == null) {\n throw \"this.hV is null or undefined.\";\n }\n if (this.hV.length % 2 == 1) {\n throw \"value hex must be even length: n=\" + hV.length + \",v=\" + this.hV;\n }\n var n = this.hV.length / 2;\n var hN = n.toString(16);\n if (hN.length % 2 == 1) {\n hN = \"0\" + hN;\n }\n if (n < 128) {\n return hN;\n }\n else {\n var hNlen = hN.length / 2;\n if (hNlen > 15) {\n throw \"ASN.1 length too long to represent by 8x: n = \" + n.toString(16);\n }\n var head = 128 + hNlen;\n return head.toString(16) + hN;\n }\n };\n /**\n * get hexadecimal string of ASN.1 TLV bytes\n * @name getEncodedHex\n * @memberOf KJUR.asn1.ASN1Object#\n * @function\n * @return {String} hexadecimal string of ASN.1 TLV\n */\n this.getEncodedHex = function () {\n if (this.hTLV == null || this.isModified) {\n this.hV = this.getFreshValueHex();\n this.hL = this.getLengthHexFromValue();\n this.hTLV = this.hT + this.hL + this.hV;\n this.isModified = false;\n //alert(\"first time: \" + this.hTLV);\n }\n return this.hTLV;\n };\n /**\n * get hexadecimal string of ASN.1 TLV value(V) bytes\n * @name getValueHex\n * @memberOf KJUR.asn1.ASN1Object#\n * @function\n * @return {String} hexadecimal string of ASN.1 TLV value(V) bytes\n */\n this.getValueHex = function () {\n this.getEncodedHex();\n return this.hV;\n };\n this.getFreshValueHex = function () {\n return '';\n };\n};\n// == BEGIN DERAbstractString ================================================\n/**\n * base class for ASN.1 DER string classes\n * @name KJUR.asn1.DERAbstractString\n * @class base class for ASN.1 DER string classes\n * @param {Array} params associative array of parameters (ex. {'str': 'aaa'})\n * @property {String} s internal string of value\n * @extends KJUR.asn1.ASN1Object\n * @description\n * <br/>\n * As for argument 'params' for constructor, you can specify one of\n * following properties:\n * <ul>\n * <li>str - specify initial ASN.1 value(V) by a string</li>\n * <li>hex - specify initial ASN.1 value(V) by a hexadecimal string</li>\n * </ul>\n * NOTE: 'params' can be omitted.\n */\nKJUR.asn1.DERAbstractString = function (params) {\n KJUR.asn1.DERAbstractString.superclass.constructor.call(this);\n var s = null;\n var hV = null;\n /**\n * get string value of this string object\n * @name getString\n * @memberOf KJUR.asn1.DERAbstractString#\n * @function\n * @return {String} string value of this string object\n */\n this.getString = function () {\n return this.s;\n };\n /**\n * set value by a string\n * @name setString\n * @memberOf KJUR.asn1.DERAbstractString#\n * @function\n * @param {String} newS value by a string to set\n */\n this.setString = function (newS) {\n this.hTLV = null;\n this.isModified = true;\n this.s = newS;\n this.hV = stohex(this.s);\n };\n /**\n * set value by a hexadecimal string\n * @name setStringHex\n * @memberOf KJUR.asn1.DERAbstractString#\n * @function\n * @param {String} newHexString value by a hexadecimal string to set\n */\n this.setStringHex = function (newHexString) {\n this.hTLV = null;\n this.isModified = true;\n this.s = null;\n this.hV = newHexString;\n };\n this.getFreshValueHex = function () {\n return this.hV;\n };\n if (typeof params != \"undefined\") {\n if (typeof params == \"string\") {\n this.setString(params);\n }\n else if (typeof params['str'] != \"undefined\") {\n this.setString(params['str']);\n }\n else if (typeof params['hex'] != \"undefined\") {\n this.setStringHex(params['hex']);\n }\n }\n};\nYAHOO.lang.extend(KJUR.asn1.DERAbstractString, KJUR.asn1.ASN1Object);\n// == END DERAbstractString ================================================\n// == BEGIN DERAbstractTime ==================================================\n/**\n * base class for ASN.1 DER Generalized/UTCTime class\n * @name KJUR.asn1.DERAbstractTime\n * @class base class for ASN.1 DER Generalized/UTCTime class\n * @param {Array} params associative array of parameters (ex. {'str': '130430235959Z'})\n * @extends KJUR.asn1.ASN1Object\n * @description\n * @see KJUR.asn1.ASN1Object - superclass\n */\nKJUR.asn1.DERAbstractTime = function (params) {\n KJUR.asn1.DERAbstractTime.superclass.constructor.call(this);\n var s = null;\n var date = null;\n // --- PRIVATE METHODS --------------------\n this.localDateToUTC = function (d) {\n utc = d.getTime() + (d.getTimezoneOffset() * 60000);\n var utcDate = new Date(utc);\n return utcDate;\n };\n /*\n * format date string by Data object\n * @name formatDate\n * @memberOf KJUR.asn1.AbstractTime;\n * @param {Date} dateObject\n * @param {string} type 'utc' or 'gen'\n * @param {boolean} withMillis flag for with millisections or not\n * @description\n * 'withMillis' flag is supported from asn1 1.0.6.\n */\n this.formatDate = function (dateObject, type, withMillis) {\n var pad = this.zeroPadding;\n var d = this.localDateToUTC(dateObject);\n var year = String(d.getFullYear());\n if (type == 'utc')\n year = year.substr(2, 2);\n var month = pad(String(d.getMonth() + 1), 2);\n var day = pad(String(d.getDate()), 2);\n var hour = pad(String(d.getHours()), 2);\n var min = pad(String(d.getMinutes()), 2);\n var sec = pad(String(d.getSeconds()), 2);\n var s = year + month + day + hour + min + sec;\n if (withMillis === true) {\n var millis = d.getMilliseconds();\n if (millis != 0) {\n var sMillis = pad(String(millis), 3);\n sMillis = sMillis.replace(/[0]+$/, \"\");\n s = s + \".\" + sMillis;\n }\n }\n return s + \"Z\";\n };\n this.zeroPadding = function (s, len) {\n if (s.length >= len)\n return s;\n return new Array(len - s.length + 1).join('0') + s;\n };\n // --- PUBLIC METHODS --------------------\n /**\n * get string value of this string object\n * @name getString\n * @memberOf KJUR.asn1.DERAbstractTime#\n * @function\n * @return {String} string value of this time object\n */\n this.getString = function () {\n return this.s;\n };\n /**\n * set value by a string\n * @name setString\n * @memberOf KJUR.asn1.DERAbstractTime#\n * @function\n * @param {String} newS value by a string to set such like \"130430235959Z\"\n */\n this.setString = function (newS) {\n this.hTLV = null;\n this.isModified = true;\n this.s = newS;\n this.hV = stohex(newS);\n };\n /**\n * set value by a Date object\n * @name setByDateValue\n * @memberOf KJUR.asn1.DERAbstractTime#\n * @function\n * @param {Integer} year year of date (ex. 2013)\n * @param {Integer} month month of date between 1 and 12 (ex. 12)\n * @param {Integer} day day of month\n * @param {Integer} hour hours of date\n * @param {Integer} min minutes of date\n * @param {Integer} sec seconds of date\n */\n this.setByDateValue = function (year, month, day, hour, min, sec) {\n var dateObject = new Date(Date.UTC(year, month - 1, day, hour, min, sec, 0));\n this.setByDate(dateObject);\n };\n this.getFreshValueHex = function () {\n return this.hV;\n };\n};\nYAHOO.lang.extend(KJUR.asn1.DERAbstractTime, KJUR.asn1.ASN1Object);\n// == END DERAbstractTime ==================================================\n// == BEGIN DERAbstractStructured ============================================\n/**\n * base class for ASN.1 DER structured class\n * @name KJUR.asn1.DERAbstractStructured\n * @class base class for ASN.1 DER structured class\n * @property {Array} asn1Array internal array of ASN1Object\n * @extends KJUR.asn1.ASN1Object\n * @description\n * @see KJUR.asn1.ASN1Object - superclass\n */\nKJUR.asn1.DERAbstractStructured = function (params) {\n KJUR.asn1.DERAbstractString.superclass.constructor.call(this);\n var asn1Array = null;\n /**\n * set value by array of ASN1Object\n * @name setByASN1ObjectArray\n * @memberOf KJUR.asn1.DERAbstractStructured#\n * @function\n * @param {array} asn1ObjectArray array of ASN1Object to set\n */\n this.setByASN1ObjectArray = function (asn1ObjectArray) {\n this.hTLV = null;\n this.isModified = true;\n this.asn1Array = asn1ObjectArray;\n };\n /**\n * append an ASN1Object to internal array\n * @name appendASN1Object\n * @memberOf KJUR.asn1.DERAbstractStructured#\n * @function\n * @param {ASN1Object} asn1Object to add\n */\n this.appendASN1Object = function (asn1Object) {\n this.hTLV = null;\n this.isModified = true;\n this.asn1Array.push(asn1Object);\n };\n this.asn1Array = new Array();\n if (typeof params != \"undefined\") {\n if (typeof params['array'] != \"undefined\") {\n this.asn1Array = params['array'];\n }\n }\n};\nYAHOO.lang.extend(KJUR.asn1.DERAbstractStructured, KJUR.asn1.ASN1Object);\n// ********************************************************************\n// ASN.1 Object Classes\n// ********************************************************************\n// ********************************************************************\n/**\n * class for ASN.1 DER Boolean\n * @name KJUR.asn1.DERBoolean\n * @class class for ASN.1 DER Boolean\n * @extends KJUR.asn1.ASN1Object\n * @description\n * @see KJUR.asn1.ASN1Object - superclass\n */\nKJUR.asn1.DERBoolean = function () {\n KJUR.asn1.DERBoolean.superclass.constructor.call(this);\n this.hT = \"01\";\n this.hTLV = \"0101ff\";\n};\nYAHOO.lang.extend(KJUR.asn1.DERBoolean, KJUR.asn1.ASN1Object);\n// ********************************************************************\n/**\n * class for ASN.1 DER Integer\n * @name KJUR.asn1.DERInteger\n * @class class for ASN.1 DER Integer\n * @extends KJUR.asn1.ASN1Object\n * @description\n * <br/>\n * As for argument 'params' for constructor, you can specify one of\n * following properties:\n * <ul>\n * <li>int - specify initial ASN.1 value(V) by integer value</li>\n * <li>bigint - specify initial ASN.1 value(V) by BigInteger object</li>\n * <li>hex - specify initial ASN.1 value(V) by a hexadecimal string</li>\n * </ul>\n * NOTE: 'params' can be omitted.\n */\nKJUR.asn1.DERInteger = function (params) {\n KJUR.asn1.DERInteger.superclass.constructor.call(this);\n this.hT = \"02\";\n /**\n * set value by Tom Wu's BigInteger object\n * @name setByBigInteger\n * @memberOf KJUR.asn1.DERInteger#\n * @function\n * @param {BigInteger} bigIntegerValue to set\n */\n this.setByBigInteger = function (bigIntegerValue) {\n this.hTLV = null;\n this.isModified = true;\n this.hV = KJUR.asn1.ASN1Util.bigIntToMinTwosComplementsHex(bigIntegerValue);\n };\n /**\n * set value by integer value\n * @name setByInteger\n * @memberOf KJUR.asn1.DERInteger\n * @function\n * @param {Integer} integer value to set\n */\n this.setByInteger = function (intValue) {\n var bi = new BigInteger(String(intValue), 10);\n this.setByBigInteger(bi);\n };\n /**\n * set value by integer value\n * @name setValueHex\n * @memberOf KJUR.asn1.DERInteger#\n * @function\n * @param {String} hexadecimal string of integer value\n * @description\n * <br/>\n * NOTE: Value shall be represented by minimum octet length of\n * two's complement representation.\n * @example\n * new KJUR.asn1.DERInteger(123);\n * new KJUR.asn1.DERInteger({'int': 123});\n * new KJUR.asn1.DERInteger({'hex': '1fad'});\n */\n this.setValueHex = function (newHexString) {\n this.hV = newHexString;\n };\n this.getFreshValueHex = function () {\n return this.hV;\n };\n if (typeof params != \"undefined\") {\n if (typeof params['bigint'] != \"undefined\") {\n this.setByBigInteger(params['bigint']);\n }\n else if (typeof params['int'] != \"undefined\") {\n this.setByInteger(params['int']);\n }\n else if (typeof params == \"number\") {\n this.setByInteger(params);\n }\n else if (typeof params['hex'] != \"undefined\") {\n this.setValueHex(params['hex']);\n }\n }\n};\nYAHOO.lang.extend(KJUR.asn1.DERInteger, KJUR.asn1.ASN1Object);\n// ********************************************************************\n/**\n * class for ASN.1 DER encoded BitString primitive\n * @name KJUR.asn1.DERBitString\n * @class class for ASN.1 DER encoded BitString primitive\n * @extends KJUR.asn1.ASN1Object\n * @description\n * <br/>\n * As for argument 'params' for constructor, you can specify one of\n * following properties:\n * <ul>\n * <li>bin - specify binary string (ex. '10111')</li>\n * <li>array - specify array of boolean (ex. [true,false,true,true])</li>\n * <li>hex - specify hexadecimal string of ASN.1 value(V) including unused bits</li>\n * <li>obj - specify {@link KJUR.asn1.ASN1Util.newObject}\n * argument for \"BitString encapsulates\" structure.</li>\n * </ul>\n * NOTE1: 'params' can be omitted.<br/>\n * NOTE2: 'obj' parameter have been supported since\n * asn1 1.0.11, jsrsasign 6.1.1 (2016-Sep-25).<br/>\n * @example\n * // default constructor\n * o = new KJUR.asn1.DERBitString();\n * // initialize with binary string\n * o = new KJUR.asn1.DERBitString({bin: \"1011\"});\n * // initialize with boolean array\n * o = new KJUR.asn1.DERBitString({array: [true,false,true,true]});\n * // initialize with hexadecimal string (04 is unused bits)\n * o = new KJUR.asn1.DEROctetString({hex: \"04bac0\"});\n * // initialize with ASN1Util.newObject argument for encapsulated\n * o = new KJUR.asn1.DERBitString({obj: {seq: [{int: 3}, {prnstr: 'aaa'}]}});\n * // above generates a ASN.1 data like this:\n * // BIT STRING, encapsulates {\n * // SEQUENCE {\n * // INTEGER 3\n * // PrintableString 'aaa'\n * // }\n * // }\n */\nKJUR.asn1.DERBitString = function (params) {\n if (params !== undefined && typeof params.obj !== \"undefined\") {\n var o = KJUR.asn1.ASN1Util.newObject(params.obj);\n params.hex = \"00\" + o.getEncodedHex();\n }\n KJUR.asn1.DERBitString.superclass.constructor.call(this);\n this.hT = \"03\";\n /**\n * set ASN.1 value(V) by a hexadecimal string including unused bits\n * @name setHexValueIncludingUnusedBits\n * @memberOf KJUR.asn1.DERBitString#\n * @function\n * @param {String} newHexStringIncludingUnusedBits\n */\n this.setHexValueIncludingUnusedBits = function (newHexStringIncludingUnusedBits) {\n this.hTLV = null;\n this.isModified = true;\n this.hV = newHexStringIncludingUnusedBits;\n };\n /**\n * set ASN.1 value(V) by unused bit and hexadecimal string of value\n * @name setUnusedBitsAndHexValue\n * @memberOf KJUR.asn1.DERBitString#\n * @function\n * @param {Integer} unusedBits\n * @param {String} hValue\n */\n this.setUnusedBitsAndHexValue = function (unusedBits, hValue) {\n if (unusedBits < 0 || 7 < unusedBits) {\n throw \"unused bits shall be from 0 to 7: u = \" + unusedBits;\n }\n var hUnusedBits = \"0\" + unusedBits;\n this.hTLV = null;\n this.isModified = true;\n this.hV = hUnusedBits + hValue;\n };\n /**\n * set ASN.1 DER BitString by binary string<br/>\n * @name setByBinaryString\n * @memberOf KJUR.asn1.DERBitString#\n * @function\n * @param {String} binaryString binary value string (i.e. '10111')\n * @description\n * Its unused bits will be calculated automatically by length of\n * 'binaryValue'. <br/>\n * NOTE: Trailing zeros '0' will be ignored.\n * @example\n * o = new KJUR.asn1.DERBitString();\n * o.setByBooleanArray(\"01011\");\n */\n this.setByBinaryString = function (binaryString) {\n binaryString = binaryString.replace(/0+$/, '');\n var unusedBits = 8 - binaryString.length % 8;\n if (unusedBits == 8)\n unusedBits = 0;\n for (var i = 0; i <= unusedBits; i++) {\n binaryString += '0';\n }\n var h = '';\n for (var i = 0; i < binaryString.length - 1; i += 8) {\n var b = binaryString.substr(i, 8);\n var x = parseInt(b, 2).toString(16);\n if (x.length == 1)\n x = '0' + x;\n h += x;\n }\n this.hTLV = null;\n this.isModified = true;\n this.hV = '0' + unusedBits + h;\n };\n /**\n * set ASN.1 TLV value(V) by an array of boolean<br/>\n * @name setByBooleanArray\n * @memberOf KJUR.asn1.DERBitString#\n * @function\n * @param {array} booleanArray array of boolean (ex. [true, false, true])\n * @description\n * NOTE: Trailing falses will be ignored in the ASN.1 DER Object.\n * @example\n * o = new KJUR.asn1.DERBitString();\n * o.setByBooleanArray([false, true, false, true, true]);\n */\n this.setByBooleanArray = function (booleanArray) {\n var s = '';\n for (var i = 0; i < booleanArray.length; i++) {\n if (booleanArray[i] == true) {\n s += '1';\n }\n else {\n s += '0';\n }\n }\n this.setByBinaryString(s);\n };\n /**\n * generate an array of falses with specified length<br/>\n * @name newFalseArray\n * @memberOf KJUR.asn1.DERBitString\n * @function\n * @param {Integer} nLength length of array to generate\n * @return {array} array of boolean falses\n * @description\n * This static method may be useful to initialize boolean array.\n * @example\n * o = new KJUR.asn1.DERBitString();\n * o.newFalseArray(3) → [false, false, false]\n */\n this.newFalseArray = function (nLength) {\n var a = new Array(nLength);\n for (var i = 0; i < nLength; i++) {\n a[i] = false;\n }\n return a;\n };\n this.getFreshValueHex = function () {\n return this.hV;\n };\n if (typeof params != \"undefined\") {\n if (typeof params == \"string\" && params.toLowerCase().match(/^[0-9a-f]+$/)) {\n this.setHexValueIncludingUnusedBits(params);\n }\n else if (typeof params['hex'] != \"undefined\") {\n this.setHexValueIncludingUnusedBits(params['hex']);\n }\n else if (typeof params['bin'] != \"undefined\") {\n this.setByBinaryString(params['bin']);\n }\n else if (typeof params['array'] != \"undefined\") {\n this.setByBooleanArray(params['array']);\n }\n }\n};\nYAHOO.lang.extend(KJUR.asn1.DERBitString, KJUR.asn1.ASN1Object);\n// ********************************************************************\n/**\n * class for ASN.1 DER OctetString<br/>\n * @name KJUR.asn1.DEROctetString\n * @class class for ASN.1 DER OctetString\n * @param {Array} params associative array of parameters (ex. {'str': 'aaa'})\n * @extends KJUR.asn1.DERAbstractString\n * @description\n * This class provides ASN.1 OctetString simple type.<br/>\n * Supported \"params\" attributes are:\n * <ul>\n * <li>str - to set a string as a value</li>\n * <li>hex - to set a hexadecimal string as a value</li>\n * <li>obj - to set a encapsulated ASN.1 value by JSON object\n * which is defined in {@link KJUR.asn1.ASN1Util.newObject}</li>\n * </ul>\n * NOTE: A parameter 'obj' have been supported\n * for \"OCTET STRING, encapsulates\" structure.\n * since asn1 1.0.11, jsrsasign 6.1.1 (2016-Sep-25).\n * @see KJUR.asn1.DERAbstractString - superclass\n * @example\n * // default constructor\n * o = new KJUR.asn1.DEROctetString();\n * // initialize with string\n * o = new KJUR.asn1.DEROctetString({str: \"aaa\"});\n * // initialize with hexadecimal string\n * o = new KJUR.asn1.DEROctetString({hex: \"616161\"});\n * // initialize with ASN1Util.newObject argument\n * o = new KJUR.asn1.DEROctetString({obj: {seq: [{int: 3}, {prnstr: 'aaa'}]}});\n * // above generates a ASN.1 data like this:\n * // OCTET STRING, encapsulates {\n * // SEQUENCE {\n * // INTEGER 3\n * // PrintableString 'aaa'\n * // }\n * // }\n */\nKJUR.asn1.DEROctetString = function (params) {\n if (params !== undefined && typeof params.obj !== \"undefined\") {\n var o = KJUR.asn1.ASN1Util.newObject(params.obj);\n params.hex = o.getEncodedHex();\n }\n KJUR.asn1.DEROctetString.superclass.constructor.call(this, params);\n this.hT = \"04\";\n};\nYAHOO.lang.extend(KJUR.asn1.DEROctetString, KJUR.asn1.DERAbstractString);\n// ********************************************************************\n/**\n * class for ASN.1 DER Null\n * @name KJUR.asn1.DERNull\n * @class class for ASN.1 DER Null\n * @extends KJUR.asn1.ASN1Object\n * @description\n * @see KJUR.asn1.ASN1Object - superclass\n */\nKJUR.asn1.DERNull = function () {\n KJUR.asn1.DERNull.superclass.constructor.call(this);\n this.hT = \"05\";\n this.hTLV = \"0500\";\n};\nYAHOO.lang.extend(KJUR.asn1.DERNull, KJUR.asn1.ASN1Object);\n// ********************************************************************\n/**\n * class for ASN.1 DER ObjectIdentifier\n * @name KJUR.asn1.DERObjectIdentifier\n * @class class for ASN.1 DER ObjectIdentifier\n * @param {Array} params associative array of parameters (ex. {'oid': '2.5.4.5'})\n * @extends KJUR.asn1.ASN1Object\n * @description\n * <br/>\n * As for argument 'params' for constructor, you can specify one of\n * following properties:\n * <ul>\n * <li>oid - specify initial ASN.1 value(V) by a oid string (ex. 2.5.4.13)</li>\n * <li>hex - specify initial ASN.1 value(V) by a hexadecimal string</li>\n * </ul>\n * NOTE: 'params' can be omitted.\n */\nKJUR.asn1.DERObjectIdentifier = function (params) {\n var itox = function (i) {\n var h = i.toString(16);\n if (h.length == 1)\n h = '0' + h;\n return h;\n };\n var roidtox = function (roid) {\n var h = '';\n var bi = new BigInteger(roid, 10);\n var b = bi.toString(2);\n var padLen = 7 - b.length % 7;\n if (padLen == 7)\n padLen = 0;\n var bPad = '';\n for (var i = 0; i < padLen; i++)\n bPad += '0';\n b = bPad + b;\n for (var i = 0; i < b.length - 1; i += 7) {\n var b8 = b.substr(i, 7);\n if (i != b.length - 7)\n b8 = '1' + b8;\n h += itox(parseInt(b8, 2));\n }\n return h;\n };\n KJUR.asn1.DERObjectIdentifier.superclass.constructor.call(this);\n this.hT = \"06\";\n /**\n * set value by a hexadecimal string\n * @name setValueHex\n * @memberOf KJUR.asn1.DERObjectIdentifier#\n * @function\n * @param {String} newHexString hexadecimal value of OID bytes\n */\n this.setValueHex = function (newHexString) {\n this.hTLV = null;\n this.isModified = true;\n this.s = null;\n this.hV = newHexString;\n };\n /**\n * set value by a OID string<br/>\n * @name setValueOidString\n * @memberOf KJUR.asn1.DERObjectIdentifier#\n * @function\n * @param {String} oidString OID string (ex. 2.5.4.13)\n * @example\n * o = new KJUR.asn1.DERObjectIdentifier();\n * o.setValueOidString(\"2.5.4.13\");\n */\n this.setValueOidString = function (oidString) {\n if (!oidString.match(/^[0-9.]+$/)) {\n throw \"malformed oid string: \" + oidString;\n }\n var h = '';\n var a = oidString.split('.');\n var i0 = parseInt(a[0]) * 40 + parseInt(a[1]);\n h += itox(i0);\n a.splice(0, 2);\n for (var i = 0; i < a.length; i++) {\n h += roidtox(a[i]);\n }\n this.hTLV = null;\n this.isModified = true;\n this.s = null;\n this.hV = h;\n };\n /**\n * set value by a OID name\n * @name setValueName\n * @memberOf KJUR.asn1.DERObjectIdentifier#\n * @function\n * @param {String} oidName OID name (ex. 'serverAuth')\n * @since 1.0.1\n * @description\n * OID name shall be defined in 'KJUR.asn1.x509.OID.name2oidList'.\n * Otherwise raise error.\n * @example\n * o = new KJUR.asn1.DERObjectIdentifier();\n * o.setValueName(\"serverAuth\");\n */\n this.setValueName = function (oidName) {\n var oid = KJUR.asn1.x509.OID.name2oid(oidName);\n if (oid !== '') {\n this.setValueOidString(oid);\n }\n else {\n throw \"DERObjectIdentifier oidName undefined: \" + oidName;\n }\n };\n this.getFreshValueHex = function () {\n return this.hV;\n };\n if (params !== undefined) {\n if (typeof params === \"string\") {\n if (params.match(/^[0-2].[0-9.]+$/)) {\n this.setValueOidString(params);\n }\n else {\n this.setValueName(params);\n }\n }\n else if (params.oid !== undefined) {\n this.setValueOidString(params.oid);\n }\n else if (params.hex !== undefined) {\n this.setValueHex(params.hex);\n }\n else if (params.name !== undefined) {\n this.setValueName(params.name);\n }\n }\n};\nYAHOO.lang.extend(KJUR.asn1.DERObjectIdentifier, KJUR.asn1.ASN1Object);\n// ********************************************************************\n/**\n * class for ASN.1 DER Enumerated\n * @name KJUR.asn1.DEREnumerated\n * @class class for ASN.1 DER Enumerated\n * @extends KJUR.asn1.ASN1Object\n * @description\n * <br/>\n * As for argument 'params' for constructor, you can specify one of\n * following properties:\n * <ul>\n * <li>int - specify initial ASN.1 value(V) by integer value</li>\n * <li>hex - specify initial ASN.1 value(V) by a hexadecimal string</li>\n * </ul>\n * NOTE: 'params' can be omitted.\n * @example\n * new KJUR.asn1.DEREnumerated(123);\n * new KJUR.asn1.DEREnumerated({int: 123});\n * new KJUR.asn1.DEREnumerated({hex: '1fad'});\n */\nKJUR.asn1.DEREnumerated = function (params) {\n KJUR.asn1.DEREnumerated.superclass.constructor.call(this);\n this.hT = \"0a\";\n /**\n * set value by Tom Wu's BigInteger object\n * @name setByBigInteger\n * @memberOf KJUR.asn1.DEREnumerated#\n * @function\n * @param {BigInteger} bigIntegerValue to set\n */\n this.setByBigInteger = function (bigIntegerValue) {\n this.hTLV = null;\n this.isModified = true;\n this.hV = KJUR.asn1.ASN1Util.bigIntToMinTwosComplementsHex(bigIntegerValue);\n };\n /**\n * set value by integer value\n * @name setByInteger\n * @memberOf KJUR.asn1.DEREnumerated#\n * @function\n * @param {Integer} integer value to set\n */\n this.setByInteger = function (intValue) {\n var bi = new BigInteger(String(intValue), 10);\n this.setByBigInteger(bi);\n };\n /**\n * set value by integer value\n * @name setValueHex\n * @memberOf KJUR.asn1.DEREnumerated#\n * @function\n * @param {String} hexadecimal string of integer value\n * @description\n * <br/>\n * NOTE: Value shall be represented by minimum octet length of\n * two's complement representation.\n */\n this.setValueHex = function (newHexString) {\n this.hV = newHexString;\n };\n this.getFreshValueHex = function () {\n return this.hV;\n };\n if (typeof params != \"undefined\") {\n if (typeof params['int'] != \"undefined\") {\n this.setByInteger(params['int']);\n }\n else if (typeof params == \"number\") {\n this.setByInteger(params);\n }\n else if (typeof params['hex'] != \"undefined\") {\n this.setValueHex(params['hex']);\n }\n }\n};\nYAHOO.lang.extend(KJUR.asn1.DEREnumerated, KJUR.asn1.ASN1Object);\n// ********************************************************************\n/**\n * class for ASN.1 DER UTF8String\n * @name KJUR.asn1.DERUTF8String\n * @class class for ASN.1 DER UTF8String\n * @param {Array} params associative array of parameters (ex. {'str': 'aaa'})\n * @extends KJUR.asn1.DERAbstractString\n * @description\n * @see KJUR.asn1.DERAbstractString - superclass\n */\nKJUR.asn1.DERUTF8String = function (params) {\n KJUR.asn1.DERUTF8String.superclass.constructor.call(this, params);\n this.hT = \"0c\";\n};\nYAHOO.lang.extend(KJUR.asn1.DERUTF8String, KJUR.asn1.DERAbstractString);\n// ********************************************************************\n/**\n * class for ASN.1 DER NumericString\n * @name KJUR.asn1.DERNumericString\n * @class class for ASN.1 DER NumericString\n * @param {Array} params associative array of parameters (ex. {'str': 'aaa'})\n * @extends KJUR.asn1.DERAbstractString\n * @description\n * @see KJUR.asn1.DERAbstractString - superclass\n */\nKJUR.asn1.DERNumericString = function (params) {\n KJUR.asn1.DERNumericString.superclass.constructor.call(this, params);\n this.hT = \"12\";\n};\nYAHOO.lang.extend(KJUR.asn1.DERNumericString, KJUR.asn1.DERAbstractString);\n// ********************************************************************\n/**\n * class for ASN.1 DER PrintableString\n * @name KJUR.asn1.DERPrintableString\n * @class class for ASN.1 DER PrintableString\n * @param {Array} params associative array of parameters (ex. {'str': 'aaa'})\n * @extends KJUR.asn1.DERAbstractString\n * @description\n * @see KJUR.asn1.DERAbstractString - superclass\n */\nKJUR.asn1.DERPrintableString = function (params) {\n KJUR.asn1.DERPrintableString.superclass.constructor.call(this, params);\n this.hT = \"13\";\n};\nYAHOO.lang.extend(KJUR.asn1.DERPrintableString, KJUR.asn1.DERAbstractString);\n// ********************************************************************\n/**\n * class for ASN.1 DER TeletexString\n * @name KJUR.asn1.DERTeletexString\n * @class class for ASN.1 DER TeletexString\n * @param {Array} params associative array of parameters (ex. {'str': 'aaa'})\n * @extends KJUR.asn1.DERAbstractString\n * @description\n * @see KJUR.asn1.DERAbstractString - superclass\n */\nKJUR.asn1.DERTeletexString = function (params) {\n KJUR.asn1.DERTeletexString.superclass.constructor.call(this, params);\n this.hT = \"14\";\n};\nYAHOO.lang.extend(KJUR.asn1.DERTeletexString, KJUR.asn1.DERAbstractString);\n// ********************************************************************\n/**\n * class for ASN.1 DER IA5String\n * @name KJUR.asn1.DERIA5String\n * @class class for ASN.1 DER IA5String\n * @param {Array} params associative array of parameters (ex. {'str': 'aaa'})\n * @extends KJUR.asn1.DERAbstractString\n * @description\n * @see KJUR.asn1.DERAbstractString - superclass\n */\nKJUR.asn1.DERIA5String = function (params) {\n KJUR.asn1.DERIA5String.superclass.constructor.call(this, params);\n this.hT = \"16\";\n};\nYAHOO.lang.extend(KJUR.asn1.DERIA5String, KJUR.asn1.DERAbstractString);\n// ********************************************************************\n/**\n * class for ASN.1 DER UTCTime\n * @name KJUR.asn1.DERUTCTime\n * @class class for ASN.1 DER UTCTime\n * @param {Array} params associative array of parameters (ex. {'str': '130430235959Z'})\n * @extends KJUR.asn1.DERAbstractTime\n * @description\n * <br/>\n * As for argument 'params' for constructor, you can specify one of\n * following properties:\n * <ul>\n * <li>str - specify initial ASN.1 value(V) by a string (ex.'130430235959Z')</li>\n * <li>hex - specify initial ASN.1 value(V) by a hexadecimal string</li>\n * <li>date - specify Date object.</li>\n * </ul>\n * NOTE: 'params' can be omitted.\n * <h4>EXAMPLES</h4>\n * @example\n * d1 = new KJUR.asn1.DERUTCTime();\n * d1.setString('130430125959Z');\n *\n * d2 = new KJUR.asn1.DERUTCTime({'str': '130430125959Z'});\n * d3 = new KJUR.asn1.DERUTCTime({'date': new Date(Date.UTC(2015, 0, 31, 0, 0, 0, 0))});\n * d4 = new KJUR.asn1.DERUTCTime('130430125959Z');\n */\nKJUR.asn1.DERUTCTime = function (params) {\n KJUR.asn1.DERUTCTime.superclass.constructor.call(this, params);\n this.hT = \"17\";\n /**\n * set value by a Date object<br/>\n * @name setByDate\n * @memberOf KJUR.asn1.DERUTCTime#\n * @function\n * @param {Date} dateObject Date object to set ASN.1 value(V)\n * @example\n * o = new KJUR.asn1.DERUTCTime();\n * o.setByDate(new Date(\"2016/12/31\"));\n */\n this.setByDate = function (dateObject) {\n this.hTLV = null;\n this.isModified = true;\n this.date = dateObject;\n this.s = this.formatDate(this.date, 'utc');\n this.hV = stohex(this.s);\n };\n this.getFreshValueHex = function () {\n if (typeof this.date == \"undefined\" && typeof this.s == \"undefined\") {\n this.date = new Date();\n this.s = this.formatDate(this.date, 'utc');\n this.hV = stohex(this.s);\n }\n return this.hV;\n };\n if (params !== undefined) {\n if (params.str !== undefined) {\n this.setString(params.str);\n }\n else if (typeof params == \"string\" && params.match(/^[0-9]{12}Z$/)) {\n this.setString(params);\n }\n else if (params.hex !== undefined) {\n this.setStringHex(params.hex);\n }\n else if (params.date !== undefined) {\n this.setByDate(params.date);\n }\n }\n};\nYAHOO.lang.extend(KJUR.asn1.DERUTCTime, KJUR.asn1.DERAbstractTime);\n// ********************************************************************\n/**\n * class for ASN.1 DER GeneralizedTime\n * @name KJUR.asn1.DERGeneralizedTime\n * @class class for ASN.1 DER GeneralizedTime\n * @param {Array} params associative array of parameters (ex. {'str': '20130430235959Z'})\n * @property {Boolean} withMillis flag to show milliseconds or not\n * @extends KJUR.asn1.DERAbstractTime\n * @description\n * <br/>\n * As for argument 'params' for constructor, you can specify one of\n * following properties:\n * <ul>\n * <li>str - specify initial ASN.1 value(V) by a string (ex.'20130430235959Z')</li>\n * <li>hex - specify initial ASN.1 value(V) by a hexadecimal string</li>\n * <li>date - specify Date object.</li>\n * <li>millis - specify flag to show milliseconds (from 1.0.6)</li>\n * </ul>\n * NOTE1: 'params' can be omitted.\n * NOTE2: 'withMillis' property is supported from asn1 1.0.6.\n */\nKJUR.asn1.DERGeneralizedTime = function (params) {\n KJUR.asn1.DERGeneralizedTime.superclass.constructor.call(this, params);\n this.hT = \"18\";\n this.withMillis = false;\n /**\n * set value by a Date object\n * @name setByDate\n * @memberOf KJUR.asn1.DERGeneralizedTime#\n * @function\n * @param {Date} dateObject Date object to set ASN.1 value(V)\n * @example\n * When you specify UTC time, use 'Date.UTC' method like this:<br/>\n * o1 = new DERUTCTime();\n * o1.setByDate(date);\n *\n * date = new Date(Date.UTC(2015, 0, 31, 23, 59, 59, 0)); #2015JAN31 23:59:59\n */\n this.setByDate = function (dateObject) {\n this.hTLV = null;\n this.isModified = true;\n this.date = dateObject;\n this.s = this.formatDate(this.date, 'gen', this.withMillis);\n this.hV = stohex(this.s);\n };\n this.getFreshValueHex = function () {\n if (this.date === undefined && this.s === undefined) {\n this.date = new Date();\n this.s = this.formatDate(this.date, 'gen', this.withMillis);\n this.hV = stohex(this.s);\n }\n return this.hV;\n };\n if (params !== undefined) {\n if (params.str !== undefined) {\n this.setString(params.str);\n }\n else if (typeof params == \"string\" && params.match(/^[0-9]{14}Z$/)) {\n this.setString(params);\n }\n else if (params.hex !== undefined) {\n this.setStringHex(params.hex);\n }\n else if (params.date !== undefined) {\n this.setByDate(params.date);\n }\n if (params.millis === true) {\n this.withMillis = true;\n }\n }\n};\nYAHOO.lang.extend(KJUR.asn1.DERGeneralizedTime, KJUR.asn1.DERAbstractTime);\n// ********************************************************************\n/**\n * class for ASN.1 DER Sequence\n * @name KJUR.asn1.DERSequence\n * @class class for ASN.1 DER Sequence\n * @extends KJUR.asn1.DERAbstractStructured\n * @description\n * <br/>\n * As for argument 'params' for constructor, you can specify one of\n * following properties:\n * <ul>\n * <li>array - specify array of ASN1Object to set elements of content</li>\n * </ul>\n * NOTE: 'params' can be omitted.\n */\nKJUR.asn1.DERSequence = function (params) {\n KJUR.asn1.DERSequence.superclass.constructor.call(this, params);\n this.hT = \"30\";\n this.getFreshValueHex = function () {\n var h = '';\n for (var i = 0; i < this.asn1Array.length; i++) {\n var asn1Obj = this.asn1Array[i];\n h += asn1Obj.getEncodedHex();\n }\n this.hV = h;\n return this.hV;\n };\n};\nYAHOO.lang.extend(KJUR.asn1.DERSequence, KJUR.asn1.DERAbstractStructured);\n// ********************************************************************\n/**\n * class for ASN.1 DER Set\n * @name KJUR.asn1.DERSet\n * @class class for ASN.1 DER Set\n * @extends KJUR.asn1.DERAbstractStructured\n * @description\n * <br/>\n * As for argument 'params' for constructor, you can specify one of\n * following properties:\n * <ul>\n * <li>array - specify array of ASN1Object to set elements of content</li>\n * <li>sortflag - flag for sort (default: true). ASN.1 BER is not sorted in 'SET OF'.</li>\n * </ul>\n * NOTE1: 'params' can be omitted.<br/>\n * NOTE2: sortflag is supported since 1.0.5.\n */\nKJUR.asn1.DERSet = function (params) {\n KJUR.asn1.DERSet.superclass.constructor.call(this, params);\n this.hT = \"31\";\n this.sortFlag = true; // item shall be sorted only in ASN.1 DER\n this.getFreshValueHex = function () {\n var a = new Array();\n for (var i = 0; i < this.asn1Array.length; i++) {\n var asn1Obj = this.asn1Array[i];\n a.push(asn1Obj.getEncodedHex());\n }\n if (this.sortFlag == true)\n a.sort();\n this.hV = a.join('');\n return this.hV;\n };\n if (typeof params != \"undefined\") {\n if (typeof params.sortflag != \"undefined\" &&\n params.sortflag == false)\n this.sortFlag = false;\n }\n};\nYAHOO.lang.extend(KJUR.asn1.DERSet, KJUR.asn1.DERAbstractStructured);\n// ********************************************************************\n/**\n * class for ASN.1 DER TaggedObject\n * @name KJUR.asn1.DERTaggedObject\n * @class class for ASN.1 DER TaggedObject\n * @extends KJUR.asn1.ASN1Object\n * @description\n * <br/>\n * Parameter 'tagNoNex' is ASN.1 tag(T) value for this object.\n * For example, if you find '[1]' tag in a ASN.1 dump,\n * 'tagNoHex' will be 'a1'.\n * <br/>\n * As for optional argument 'params' for constructor, you can specify *ANY* of\n * following properties:\n * <ul>\n * <li>explicit - specify true if this is explicit tag otherwise false\n * (default is 'true').</li>\n * <li>tag - specify tag (default is 'a0' which means [0])</li>\n * <li>obj - specify ASN1Object which is tagged</li>\n * </ul>\n * @example\n * d1 = new KJUR.asn1.DERUTF8String({'str':'a'});\n * d2 = new KJUR.asn1.DERTaggedObject({'obj': d1});\n * hex = d2.getEncodedHex();\n */\nKJUR.asn1.DERTaggedObject = function (params) {\n KJUR.asn1.DERTaggedObject.superclass.constructor.call(this);\n this.hT = \"a0\";\n this.hV = '';\n this.isExplicit = true;\n this.asn1Object = null;\n /**\n * set value by an ASN1Object\n * @name setString\n * @memberOf KJUR.asn1.DERTaggedObject#\n * @function\n * @param {Boolean} isExplicitFlag flag for explicit/implicit tag\n * @param {Integer} tagNoHex hexadecimal string of ASN.1 tag\n * @param {ASN1Object} asn1Object ASN.1 to encapsulate\n */\n this.setASN1Object = function (isExplicitFlag, tagNoHex, asn1Object) {\n this.hT = tagNoHex;\n this.isExplicit = isExplicitFlag;\n this.asn1Object = asn1Object;\n if (this.isExplicit) {\n this.hV = this.asn1Object.getEncodedHex();\n this.hTLV = null;\n this.isModified = true;\n }\n else {\n this.hV = null;\n this.hTLV = asn1Object.getEncodedHex();\n this.hTLV = this.hTLV.replace(/^../, tagNoHex);\n this.isModified = false;\n }\n };\n this.getFreshValueHex = function () {\n return this.hV;\n };\n if (typeof params != \"undefined\") {\n if (typeof params['tag'] != \"undefined\") {\n this.hT = params['tag'];\n }\n if (typeof params['explicit'] != \"undefined\") {\n this.isExplicit = params['explicit'];\n }\n if (typeof params['obj'] != \"undefined\") {\n this.asn1Object = params['obj'];\n this.setASN1Object(this.isExplicit, this.hT, this.asn1Object);\n }\n }\n};\nYAHOO.lang.extend(KJUR.asn1.DERTaggedObject, KJUR.asn1.ASN1Object);\n","// ----------------------------------------------------------------------------\n\n// PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:\n// https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code\n// EDIT THE CORRESPONDENT .ts FILE INSTEAD\n\nimport { hex2b64 } from \"./lib/jsbn/base64.js\";\nimport { Hex } from \"./lib/asn1js/hex.js\";\nimport { Base64 } from \"./lib/asn1js/base64.js\";\nimport { ASN1 } from \"./lib/asn1js/asn1.js\";\nimport { RSAKey } from \"./lib/jsbn/rsa.js\";\nimport { parseBigInt } from \"./lib/jsbn/jsbn.js\";\nimport { KJUR } from \"./lib/jsrsasign/asn1-1.0.js\";\n/**\n * Create a new JSEncryptRSAKey that extends Tom Wu's RSA key object.\n * This object is just a decorator for parsing the key parameter\n * @param {string|Object} key - The key in string format, or an object containing\n * the parameters needed to build a RSAKey object.\n * @constructor\n */\nexport class JSEncryptRSAKey extends RSAKey {\n constructor(key) {\n super();\n // Call the super constructor.\n // RSAKey.call(this);\n // If a key key was provided.\n if (key) {\n // If this is a string...\n if (typeof key === \"string\") {\n this.parseKey(key);\n }\n else if (JSEncryptRSAKey.hasPrivateKeyProperty(key) ||\n JSEncryptRSAKey.hasPublicKeyProperty(key)) {\n // Set the values for the key.\n this.parsePropertiesFrom(key);\n }\n }\n }\n /**\n * Method to parse a pem encoded string containing both a public or private key.\n * The method will translate the pem encoded string in a der encoded string and\n * will parse private key and public key parameters. This method accepts public key\n * in the rsaencryption pkcs #1 format (oid: 1.2.840.113549.1.1.1).\n *\n * @todo Check how many rsa formats use the same format of pkcs #1.\n *\n * The format is defined as:\n * PublicKeyInfo ::= SEQUENCE {\n * algorithm AlgorithmIdentifier,\n * PublicKey BIT STRING\n * }\n * Where AlgorithmIdentifier is:\n * AlgorithmIdentifier ::= SEQUENCE {\n * algorithm OBJECT IDENTIFIER, the OID of the enc algorithm\n * parameters ANY DEFINED BY algorithm OPTIONAL (NULL for PKCS #1)\n * }\n * and PublicKey is a SEQUENCE encapsulated in a BIT STRING\n * RSAPublicKey ::= SEQUENCE {\n * modulus INTEGER, -- n\n * publicExponent INTEGER -- e\n * }\n * it's possible to examine the structure of the keys obtained from openssl using\n * an asn.1 dumper as the one used here to parse the components: http://lapo.it/asn1js/\n * @argument {string} pem the pem encoded string, can include the BEGIN/END header/footer\n * @private\n */\n parseKey(pem) {\n try {\n let modulus = 0;\n let public_exponent = 0;\n const reHex = /^\\s*(?:[0-9A-Fa-f][0-9A-Fa-f]\\s*)+$/;\n const der = reHex.test(pem) ? Hex.decode(pem) : Base64.unarmor(pem);\n let asn1 = ASN1.decode(der);\n // Fixes a bug with OpenSSL 1.0+ private keys\n if (asn1.sub.length === 3) {\n asn1 = asn1.sub[2].sub[0];\n }\n if (asn1.sub.length === 9) {\n // Parse the private key.\n modulus = asn1.sub[1].getHexStringValue(); // bigint\n this.n = parseBigInt(modulus, 16);\n public_exponent = asn1.sub[2].getHexStringValue(); // int\n this.e = parseInt(public_exponent, 16);\n const private_exponent = asn1.sub[3].getHexStringValue(); // bigint\n this.d = parseBigInt(private_exponent, 16);\n const prime1 = asn1.sub[4].getHexStringValue(); // bigint\n this.p = parseBigInt(prime1, 16);\n const prime2 = asn1.sub[5].getHexStringValue(); // bigint\n this.q = parseBigInt(prime2, 16);\n const exponent1 = asn1.sub[6].getHexStringValue(); // bigint\n this.dmp1 = parseBigInt(exponent1, 16);\n const exponent2 = asn1.sub[7].getHexStringValue(); // bigint\n this.dmq1 = parseBigInt(exponent2, 16);\n const coefficient = asn1.sub[8].getHexStringValue(); // bigint\n this.coeff = parseBigInt(coefficient, 16);\n }\n else if (asn1.sub.length === 2) {\n if (asn1.sub[0].sub) {\n // Parse ASN.1 SubjectPublicKeyInfo type as defined by X.509\n var bit_string = asn1.sub[1];\n var sequence = bit_string.sub[0];\n modulus = sequence.sub[0].getHexStringValue();\n this.n = parseBigInt(modulus, 16);\n public_exponent = sequence.sub[1].getHexStringValue();\n this.e = parseInt(public_exponent, 16);\n }\n else {\n // Parse ASN.1 RSAPublicKey type as defined by PKCS #1\n modulus = asn1.sub[0].getHexStringValue();\n this.n = parseBigInt(modulus, 16);\n public_exponent = asn1.sub[1].getHexStringValue();\n this.e = parseInt(public_exponent, 16);\n }\n }\n else {\n return false;\n }\n return true;\n }\n catch (ex) {\n return false;\n }\n }\n /**\n * Translate rsa parameters in a hex encoded string representing the rsa key.\n *\n * The translation follow the ASN.1 notation :\n * RSAPrivateKey ::= SEQUENCE {\n * version Version,\n * modulus INTEGER, -- n\n * publicExponent INTEGER, -- e\n * privateExponent INTEGER, -- d\n * prime1 INTEGER, -- p\n * prime2 INTEGER, -- q\n * exponent1 INTEGER, -- d mod (p1)\n * exponent2 INTEGER, -- d mod (q-1)\n * coefficient INTEGER, -- (inverse of q) mod p\n * }\n * @returns {string} DER Encoded String representing the rsa private key\n * @private\n */\n getPrivateBaseKey() {\n const options = {\n array: [\n new KJUR.asn1.DERInteger({ int: 0 }),\n new KJUR.asn1.DERInteger({ bigint: this.n }),\n new KJUR.asn1.DERInteger({ int: this.e }),\n new KJUR.asn1.DERInteger({ bigint: this.d }),\n new KJUR.asn1.DERInteger({ bigint: this.p }),\n new KJUR.asn1.DERInteger({ bigint: this.q }),\n new KJUR.asn1.DERInteger({ bigint: this.dmp1 }),\n new KJUR.asn1.DERInteger({ bigint: this.dmq1 }),\n new KJUR.asn1.DERInteger({ bigint: this.coeff }),\n ],\n };\n const seq = new KJUR.asn1.DERSequence(options);\n return seq.getEncodedHex();\n }\n /**\n * base64 (pem) encoded version of the DER encoded representation\n * @returns {string} pem encoded representation without header and footer\n * @public\n */\n getPrivateBaseKeyB64() {\n return hex2b64(this.getPrivateBaseKey());\n }\n /**\n * Translate rsa parameters in a hex encoded string representing the rsa public key.\n * The representation follow the ASN.1 notation :\n * PublicKeyInfo ::= SEQUENCE {\n * algorithm AlgorithmIdentifier,\n * PublicKey BIT STRING\n * }\n * Where AlgorithmIdentifier is:\n * AlgorithmIdentifier ::= SEQUENCE {\n * algorithm OBJECT IDENTIFIER, the OID of the enc algorithm\n * parameters ANY DEFINED BY algorithm OPTIONAL (NULL for PKCS #1)\n * }\n * and PublicKey is a SEQUENCE encapsulated in a BIT STRING\n * RSAPublicKey ::= SEQUENCE {\n * modulus INTEGER, -- n\n * publicExponent INTEGER -- e\n * }\n * @returns {string} DER Encoded String representing the rsa public key\n * @private\n */\n getPublicBaseKey() {\n const first_sequence = new KJUR.asn1.DERSequence({\n array: [\n new KJUR.asn1.DERObjectIdentifier({ oid: \"1.2.840.113549.1.1.1\" }),\n new KJUR.asn1.DERNull(),\n ],\n });\n const second_sequence = new KJUR.asn1.DERSequence({\n array: [\n new KJUR.asn1.DERInteger({ bigint: this.n }),\n new KJUR.asn1.DERInteger({ int: this.e }),\n ],\n });\n const bit_string = new KJUR.asn1.DERBitString({\n hex: \"00\" + second_sequence.getEncodedHex(),\n });\n const seq = new KJUR.asn1.DERSequence({\n array: [first_sequence, bit_string],\n });\n return seq.getEncodedHex();\n }\n /**\n * base64 (pem) encoded version of the DER encoded representation\n * @returns {string} pem encoded representation without header and footer\n * @public\n */\n getPublicBaseKeyB64() {\n return hex2b64(this.getPublicBaseKey());\n }\n /**\n * wrap the string in block of width chars. The default value for rsa keys is 64\n * characters.\n * @param {string} str the pem encoded string without header and footer\n * @param {Number} [width=64] - the length the string has to be wrapped at\n * @returns {string}\n * @private\n */\n static wordwrap(str, width) {\n width = width || 64;\n if (!str) {\n return str;\n }\n const regex = \"(.{1,\" + width + \"})( +|$\\n?)|(.{1,\" + width + \"})\";\n return str.match(RegExp(regex, \"g\")).join(\"\\n\");\n }\n /**\n * Retrieve the pem encoded private key\n * @returns {string} the pem encoded private key with header/footer\n * @public\n */\n getPrivateKey() {\n let key = \"-----BEGIN RSA PRIVATE KEY-----\\n\";\n key += JSEncryptRSAKey.wordwrap(this.getPrivateBaseKeyB64()) + \"\\n\";\n key += \"-----END RSA PRIVATE KEY-----\";\n return key;\n }\n /**\n * Retrieve the pem encoded public key\n * @returns {string} the pem encoded public key with header/footer\n * @public\n */\n getPublicKey() {\n let key = \"-----BEGIN PUBLIC KEY-----\\n\";\n key += JSEncryptRSAKey.wordwrap(this.getPublicBaseKeyB64()) + \"\\n\";\n key += \"-----END PUBLIC KEY-----\";\n return key;\n }\n /**\n * Check if the object contains the necessary parameters to populate the rsa modulus\n * and public exponent parameters.\n * @param {object} [obj={}] - An object that may contain the two public key\n * parameters\n * @returns {boolean} true if the object contains both the modulus and the public exponent\n * properties (n and e)\n * @todo check for types of n and e. N should be a parseable bigInt object, E should\n * be a parseable integer number\n * @private\n */\n static hasPublicKeyProperty(obj) {\n obj = obj || {};\n return obj.hasOwnProperty(\"n\") && obj.hasOwnProperty(\"e\");\n }\n /**\n * Check if the object contains ALL the parameters of an RSA key.\n * @param {object} [obj={}] - An object that may contain nine rsa key\n * parameters\n * @returns {boolean} true if the object contains all the parameters needed\n * @todo check for types of the parameters all the parameters but the public exponent\n * should be parseable bigint objects, the public exponent should be a parseable integer number\n * @private\n */\n static hasPrivateKeyProperty(obj) {\n obj = obj || {};\n return (obj.hasOwnProperty(\"n\") &&\n obj.hasOwnProperty(\"e\") &&\n obj.hasOwnProperty(\"d\") &&\n obj.hasOwnProperty(\"p\") &&\n obj.hasOwnProperty(\"q\") &&\n obj.hasOwnProperty(\"dmp1\") &&\n obj.hasOwnProperty(\"dmq1\") &&\n obj.hasOwnProperty(\"coeff\"));\n }\n /**\n * Parse the properties of obj in the current rsa object. Obj should AT LEAST\n * include the modulus and public exponent (n, e) parameters.\n * @param {object} obj - the object containing rsa parameters\n * @private\n */\n parsePropertiesFrom(obj) {\n this.n = obj.n;\n this.e = obj.e;\n if (obj.hasOwnProperty(\"d\")) {\n this.d = obj.d;\n this.p = obj.p;\n this.q = obj.q;\n this.dmp1 = obj.dmp1;\n this.dmq1 = obj.dmq1;\n this.coeff = obj.coeff;\n }\n }\n}\n","// ----------------------------------------------------------------------------\n\n// PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:\n// https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code\n// EDIT THE CORRESPONDENT .ts FILE INSTEAD\n\nimport { b64tohex, hex2b64 } from \"./lib/jsbn/base64.js\";\nimport { JSEncryptRSAKey } from \"./JSEncryptRSAKey.js\";\nconst version = typeof process !== 'undefined'\n ? process.env?.npm_package_version\n : undefined;\n/**\n *\n * @param {object} [options = {}] - An object to customize JSEncrypt behaviour\n * possible parameters are:\n * - default_key_size {number} default: 1024 the key size in bit\n * - default_public_exponent {string} default: '010001' the hexadecimal representation of the public exponent\n * - log {boolean} default: false whether log warn/error or not\n * @constructor\n */\nexport class JSEncrypt {\n constructor(options = {}) {\n options = options || {};\n this.default_key_size = options.default_key_size\n ? parseInt(options.default_key_size, 10)\n : 1024;\n this.default_public_exponent = options.default_public_exponent || \"010001\"; // 65537 default openssl public exponent for rsa key type\n this.log = options.log || false;\n // The private and public key.\n this.key = null;\n }\n /**\n * Method to set the rsa key parameter (one method is enough to set both the public\n * and the private key, since the private key contains the public key paramenters)\n * Log a warning if logs are enabled\n * @param {Object|string} key the pem encoded string or an object (with or without header/footer)\n * @public\n */\n setKey(key) {\n if (this.log && this.key) {\n console.warn(\"A key was already set, overriding existing.\");\n }\n this.key = new JSEncryptRSAKey(key);\n }\n /**\n * Proxy method for setKey, for api compatibility\n * @see setKey\n * @public\n */\n setPrivateKey(privkey) {\n // Create the key.\n this.setKey(privkey);\n }\n /**\n * Proxy method for setKey, for api compatibility\n * @see setKey\n * @public\n */\n setPublicKey(pubkey) {\n // Sets the public key.\n this.setKey(pubkey);\n }\n /**\n * Proxy method for RSAKey object's decrypt, decrypt the string using the private\n * components of the rsa key object. Note that if the object was not set will be created\n * on the fly (by the getKey method) using the parameters passed in the JSEncrypt constructor\n * @param {string} str base64 encoded crypted string to decrypt\n * @return {string} the decrypted string\n * @public\n */\n decrypt(str) {\n // Return the decrypted string.\n try {\n return this.getKey().decrypt(b64tohex(str));\n }\n catch (ex) {\n return false;\n }\n }\n /**\n * Proxy method for RSAKey object's encrypt, encrypt the string using the public\n * components of the rsa key object. Note that if the object was not set will be created\n * on the fly (by the getKey method) using the parameters passed in the JSEncrypt constructor\n * @param {string} str the string to encrypt\n * @return {string} the encrypted string encoded in base64\n * @public\n */\n encrypt(str) {\n // Return the encrypted string.\n try {\n return hex2b64(this.getKey().encrypt(str));\n }\n catch (ex) {\n return false;\n }\n }\n /**\n * Proxy method for RSAKey object's sign.\n * @param {string} str the string to sign\n * @param {function} digestMethod hash method\n * @param {string} digestName the name of the hash algorithm\n * @return {string} the signature encoded in base64\n * @public\n */\n sign(str, digestMethod, digestName) {\n // return the RSA signature of 'str' in 'hex' format.\n try {\n return hex2b64(this.getKey().sign(str, digestMethod, digestName));\n }\n catch (ex) {\n return false;\n }\n }\n /**\n * Proxy method for RSAKey object's verify.\n * @param {string} str the string to verify\n * @param {string} signature the signature encoded in base64 to compare the string to\n * @param {function} digestMethod hash method\n * @return {boolean} whether the data and signature match\n * @public\n */\n verify(str, signature, digestMethod) {\n // Return the decrypted 'digest' of the signature.\n try {\n return this.getKey().verify(str, b64tohex(signature), digestMethod);\n }\n catch (ex) {\n return false;\n }\n }\n /**\n * Getter for the current JSEncryptRSAKey object. If it doesn't exists a new object\n * will be created and returned\n * @param {callback} [cb] the callback to be called if we want the key to be generated\n * in an async fashion\n * @returns {JSEncryptRSAKey} the JSEncryptRSAKey object\n * @public\n */\n getKey(cb) {\n // Only create new if it does not exist.\n if (!this.key) {\n // Get a new private key.\n this.key = new JSEncryptRSAKey();\n if (cb && {}.toString.call(cb) === \"[object Function]\") {\n this.key.generateAsync(this.default_key_size, this.default_public_exponent, cb);\n return;\n }\n // Generate the key.\n this.key.generate(this.default_key_size, this.default_public_exponent);\n }\n return this.key;\n }\n /**\n * Returns the pem encoded representation of the private key\n * If the key doesn't exists a new key will be created\n * @returns {string} pem encoded representation of the private key WITH header and footer\n * @public\n */\n getPrivateKey() {\n // Return the private representation of this key.\n return this.getKey().getPrivateKey();\n }\n /**\n * Returns the pem encoded representation of the private key\n * If the key doesn't exists a new key will be created\n * @returns {string} pem encoded representation of the private key WITHOUT header and footer\n * @public\n */\n getPrivateKeyB64() {\n // Return the private representation of this key.\n return this.getKey().getPrivateBaseKeyB64();\n }\n /**\n * Returns the pem encoded representation of the public key\n * If the key doesn't exists a new key will be created\n * @returns {string} pem encoded representation of the public key WITH header and footer\n * @public\n */\n getPublicKey() {\n // Return the private representation of this key.\n return this.getKey().getPublicKey();\n }\n /**\n * Returns the pem encoded representation of the public key\n * If the key doesn't exists a new key will be created\n * @returns {string} pem encoded representation of the public key WITHOUT header and footer\n * @public\n */\n getPublicKeyB64() {\n // Return the private representation of this key.\n return this.getKey().getPublicBaseKeyB64();\n }\n}\nJSEncrypt.version = version;\n","// ----------------------------------------------------------------------------\n\n// PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:\n// https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code\n// EDIT THE CORRESPONDENT .ts FILE INSTEAD\n\nimport { JSEncrypt } from \"../../static_dependencies/jsencrypt/JSEncrypt.js\";\nimport { base16, utf8 } from '../../static_dependencies/scure-base/index.js';\nimport { urlencodeBase64, base16ToBinary, base64ToBinary } from './encode.js';\nimport { hmac } from './crypto.js';\nimport { P256 } from '../../static_dependencies/noble-curves/p256.js';\nimport { ecdsa } from '../../base/functions/crypto.js';\nfunction rsa(request, secret, hash) {\n const RSA = new JSEncrypt();\n const digester = (input) => base16.encode(hash(input));\n RSA.setPrivateKey(secret);\n const name = (hash.create()).constructor.name.toLowerCase();\n return RSA.sign(request, digester, name);\n}\nfunction jwt(request, secret, hash, isRSA = false, opts = {}) {\n let alg = (isRSA ? 'RS' : 'HS') + (hash.outputLen * 8);\n if (opts['alg']) {\n alg = opts['alg'].toUpperCase();\n }\n const header = Object.assign({ 'alg': alg, 'typ': 'JWT' }, opts);\n if (header['iat'] !== undefined) {\n request['iat'] = header['iat'];\n delete header['iat'];\n }\n const encodedHeader = urlencodeBase64(JSON.stringify(header));\n const encodedData = urlencodeBase64(JSON.stringify(request));\n const token = [encodedHeader, encodedData].join('.');\n const algoType = alg.slice(0, 2);\n let signature = undefined;\n if (algoType === 'HS') {\n signature = urlencodeBase64(hmac(token, secret, hash, 'binary'));\n }\n else if (isRSA || algoType === 'RS') {\n signature = urlencodeBase64(base64ToBinary(rsa(token, utf8.encode(secret), hash)));\n }\n else if (algoType === 'ES') {\n const signedHash = ecdsa(token, utf8.encode(secret), P256, hash);\n const r = signedHash.r.padStart(64, '0');\n const s = signedHash.s.padStart(64, '0');\n signature = urlencodeBase64(base16ToBinary(r + s));\n }\n return [token, signature].join('.');\n}\nexport { rsa, jwt };\n","// ----------------------------------------------------------------------------\n\n// PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:\n// https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code\n// EDIT THE CORRESPONDENT .ts FILE INSTEAD\n\nconst U32_MASK64 = BigInt(2 ** 32 - 1);\nconst _32n = BigInt(32);\n// We are not using BigUint64Array, because they are extremely slow as per 2022\nexport function fromBig(n, le = false) {\n if (le)\n return { h: Number(n & U32_MASK64), l: Number((n >> _32n) & U32_MASK64) };\n return { h: Number((n >> _32n) & U32_MASK64) | 0, l: Number(n & U32_MASK64) | 0 };\n}\nexport function split(lst, le = false) {\n let Ah = new Uint32Array(lst.length);\n let Al = new Uint32Array(lst.length);\n for (let i = 0; i < lst.length; i++) {\n const { h, l } = fromBig(lst[i], le);\n [Ah[i], Al[i]] = [h, l];\n }\n return [Ah, Al];\n}\nexport const toBig = (h, l) => (BigInt(h >>> 0) << _32n) | BigInt(l >>> 0);\n// for Shift in [0, 32)\nconst shrSH = (h, l, s) => h >>> s;\nconst shrSL = (h, l, s) => (h << (32 - s)) | (l >>> s);\n// Right rotate for Shift in [1, 32)\nconst rotrSH = (h, l, s) => (h >>> s) | (l << (32 - s));\nconst rotrSL = (h, l, s) => (h << (32 - s)) | (l >>> s);\n// Right rotate for Shift in (32, 64), NOTE: 32 is special case.\nconst rotrBH = (h, l, s) => (h << (64 - s)) | (l >>> (s - 32));\nconst rotrBL = (h, l, s) => (h >>> (s - 32)) | (l << (64 - s));\n// Right rotate for shift===32 (just swaps l&h)\nconst rotr32H = (h, l) => l;\nconst rotr32L = (h, l) => h;\n// Left rotate for Shift in [1, 32)\nconst rotlSH = (h, l, s) => (h << s) | (l >>> (32 - s));\nconst rotlSL = (h, l, s) => (l << s) | (h >>> (32 - s));\n// Left rotate for Shift in (32, 64), NOTE: 32 is special case.\nconst rotlBH = (h, l, s) => (l << (s - 32)) | (h >>> (64 - s));\nconst rotlBL = (h, l, s) => (h << (s - 32)) | (l >>> (64 - s));\n// JS uses 32-bit signed integers for bitwise operations which means we cannot\n// simple take carry out of low bit sum by shift, we need to use division.\n// Removing \"export\" has 5% perf penalty -_-\nexport function add(Ah, Al, Bh, Bl) {\n const l = (Al >>> 0) + (Bl >>> 0);\n return { h: (Ah + Bh + ((l / 2 ** 32) | 0)) | 0, l: l | 0 };\n}\n// Addition with more than 2 elements\nconst add3L = (Al, Bl, Cl) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0);\nconst add3H = (low, Ah, Bh, Ch) => (Ah + Bh + Ch + ((low / 2 ** 32) | 0)) | 0;\nconst add4L = (Al, Bl, Cl, Dl) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0);\nconst add4H = (low, Ah, Bh, Ch, Dh) => (Ah + Bh + Ch + Dh + ((low / 2 ** 32) | 0)) | 0;\nconst add5L = (Al, Bl, Cl, Dl, El) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0) + (El >>> 0);\nconst add5H = (low, Ah, Bh, Ch, Dh, Eh) => (Ah + Bh + Ch + Dh + Eh + ((low / 2 ** 32) | 0)) | 0;\n// prettier-ignore\nconst u64 = {\n fromBig, split, toBig,\n shrSH, shrSL,\n rotrSH, rotrSL, rotrBH, rotrBL,\n rotr32H, rotr32L,\n rotlSH, rotlSL, rotlBH, rotlBL,\n add, add3L, add3H, add4L, add4H, add5H, add5L,\n};\nexport default u64;\n","// ----------------------------------------------------------------------------\n\n// PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:\n// https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code\n// EDIT THE CORRESPONDENT .ts FILE INSTEAD\n\nimport { SHA2 } from './_sha2.js';\nimport u64 from './_u64.js';\nimport { wrapConstructor } from './utils.js';\n// Round contants (first 32 bits of the fractional parts of the cube roots of the first 80 primes 2..409):\n// prettier-ignore\nconst [SHA512_Kh, SHA512_Kl] = u64.split([\n '0x428a2f98d728ae22', '0x7137449123ef65cd', '0xb5c0fbcfec4d3b2f', '0xe9b5dba58189dbbc',\n '0x3956c25bf348b538', '0x59f111f1b605d019', '0x923f82a4af194f9b', '0xab1c5ed5da6d8118',\n '0xd807aa98a3030242', '0x12835b0145706fbe', '0x243185be4ee4b28c', '0x550c7dc3d5ffb4e2',\n '0x72be5d74f27b896f', '0x80deb1fe3b1696b1', '0x9bdc06a725c71235', '0xc19bf174cf692694',\n '0xe49b69c19ef14ad2', '0xefbe4786384f25e3', '0x0fc19dc68b8cd5b5', '0x240ca1cc77ac9c65',\n '0x2de92c6f592b0275', '0x4a7484aa6ea6e483', '0x5cb0a9dcbd41fbd4', '0x76f988da831153b5',\n '0x983e5152ee66dfab', '0xa831c66d2db43210', '0xb00327c898fb213f', '0xbf597fc7beef0ee4',\n '0xc6e00bf33da88fc2', '0xd5a79147930aa725', '0x06ca6351e003826f', '0x142929670a0e6e70',\n '0x27b70a8546d22ffc', '0x2e1b21385c26c926', '0x4d2c6dfc5ac42aed', '0x53380d139d95b3df',\n '0x650a73548baf63de', '0x766a0abb3c77b2a8', '0x81c2c92e47edaee6', '0x92722c851482353b',\n '0xa2bfe8a14cf10364', '0xa81a664bbc423001', '0xc24b8b70d0f89791', '0xc76c51a30654be30',\n '0xd192e819d6ef5218', '0xd69906245565a910', '0xf40e35855771202a', '0x106aa07032bbd1b8',\n '0x19a4c116b8d2d0c8', '0x1e376c085141ab53', '0x2748774cdf8eeb99', '0x34b0bcb5e19b48a8',\n '0x391c0cb3c5c95a63', '0x4ed8aa4ae3418acb', '0x5b9cca4f7763e373', '0x682e6ff3d6b2b8a3',\n '0x748f82ee5defb2fc', '0x78a5636f43172f60', '0x84c87814a1f0ab72', '0x8cc702081a6439ec',\n '0x90befffa23631e28', '0xa4506cebde82bde9', '0xbef9a3f7b2c67915', '0xc67178f2e372532b',\n '0xca273eceea26619c', '0xd186b8c721c0c207', '0xeada7dd6cde0eb1e', '0xf57d4f7fee6ed178',\n '0x06f067aa72176fba', '0x0a637dc5a2c898a6', '0x113f9804bef90dae', '0x1b710b35131c471b',\n '0x28db77f523047d84', '0x32caab7b40c72493', '0x3c9ebe0a15c9bebc', '0x431d67c49c100d4c',\n '0x4cc5d4becb3e42b6', '0x597f299cfc657e2a', '0x5fcb6fab3ad6faec', '0x6c44198c4a475817'\n].map(n => BigInt(n)));\n// Temporary buffer, not used to store anything between runs\nconst SHA512_W_H = new Uint32Array(80);\nconst SHA512_W_L = new Uint32Array(80);\nexport class SHA512 extends SHA2 {\n constructor() {\n super(128, 64, 16, false);\n // We cannot use array here since array allows indexing by variable which means optimizer/compiler cannot use registers.\n // Also looks cleaner and easier to verify with spec.\n // Initial state (first 32 bits of the fractional parts of the square roots of the first 8 primes 2..19):\n // h -- high 32 bits, l -- low 32 bits\n this.Ah = 0x6a09e667 | 0;\n this.Al = 0xf3bcc908 | 0;\n this.Bh = 0xbb67ae85 | 0;\n this.Bl = 0x84caa73b | 0;\n this.Ch = 0x3c6ef372 | 0;\n this.Cl = 0xfe94f82b | 0;\n this.Dh = 0xa54ff53a | 0;\n this.Dl = 0x5f1d36f1 | 0;\n this.Eh = 0x510e527f | 0;\n this.El = 0xade682d1 | 0;\n this.Fh = 0x9b05688c | 0;\n this.Fl = 0x2b3e6c1f | 0;\n this.Gh = 0x1f83d9ab | 0;\n this.Gl = 0xfb41bd6b | 0;\n this.Hh = 0x5be0cd19 | 0;\n this.Hl = 0x137e2179 | 0;\n }\n // prettier-ignore\n get() {\n const { Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl } = this;\n return [Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl];\n }\n // prettier-ignore\n set(Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl) {\n this.Ah = Ah | 0;\n this.Al = Al | 0;\n this.Bh = Bh | 0;\n this.Bl = Bl | 0;\n this.Ch = Ch | 0;\n this.Cl = Cl | 0;\n this.Dh = Dh | 0;\n this.Dl = Dl | 0;\n this.Eh = Eh | 0;\n this.El = El | 0;\n this.Fh = Fh | 0;\n this.Fl = Fl | 0;\n this.Gh = Gh | 0;\n this.Gl = Gl | 0;\n this.Hh = Hh | 0;\n this.Hl = Hl | 0;\n }\n process(view, offset) {\n // Extend the first 16 words into the remaining 64 words w[16..79] of the message schedule array\n for (let i = 0; i < 16; i++, offset += 4) {\n SHA512_W_H[i] = view.getUint32(offset);\n SHA512_W_L[i] = view.getUint32((offset += 4));\n }\n for (let i = 16; i < 80; i++) {\n // s0 := (w[i-15] rightrotate 1) xor (w[i-15] rightrotate 8) xor (w[i-15] rightshift 7)\n const W15h = SHA512_W_H[i - 15] | 0;\n const W15l = SHA512_W_L[i - 15] | 0;\n const s0h = u64.rotrSH(W15h, W15l, 1) ^ u64.rotrSH(W15h, W15l, 8) ^ u64.shrSH(W15h, W15l, 7);\n const s0l = u64.rotrSL(W15h, W15l, 1) ^ u64.rotrSL(W15h, W15l, 8) ^ u64.shrSL(W15h, W15l, 7);\n // s1 := (w[i-2] rightrotate 19) xor (w[i-2] rightrotate 61) xor (w[i-2] rightshift 6)\n const W2h = SHA512_W_H[i - 2] | 0;\n const W2l = SHA512_W_L[i - 2] | 0;\n const s1h = u64.rotrSH(W2h, W2l, 19) ^ u64.rotrBH(W2h, W2l, 61) ^ u64.shrSH(W2h, W2l, 6);\n const s1l = u64.rotrSL(W2h, W2l, 19) ^ u64.rotrBL(W2h, W2l, 61) ^ u64.shrSL(W2h, W2l, 6);\n // SHA256_W[i] = s0 + s1 + SHA256_W[i - 7] + SHA256_W[i - 16];\n const SUMl = u64.add4L(s0l, s1l, SHA512_W_L[i - 7], SHA512_W_L[i - 16]);\n const SUMh = u64.add4H(SUMl, s0h, s1h, SHA512_W_H[i - 7], SHA512_W_H[i - 16]);\n SHA512_W_H[i] = SUMh | 0;\n SHA512_W_L[i] = SUMl | 0;\n }\n let { Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl } = this;\n // Compression function main loop, 80 rounds\n for (let i = 0; i < 80; i++) {\n // S1 := (e rightrotate 14) xor (e rightrotate 18) xor (e rightrotate 41)\n const sigma1h = u64.rotrSH(Eh, El, 14) ^ u64.rotrSH(Eh, El, 18) ^ u64.rotrBH(Eh, El, 41);\n const sigma1l = u64.rotrSL(Eh, El, 14) ^ u64.rotrSL(Eh, El, 18) ^ u64.rotrBL(Eh, El, 41);\n //const T1 = (H + sigma1 + Chi(E, F, G) + SHA256_K[i] + SHA256_W[i]) | 0;\n const CHIh = (Eh & Fh) ^ (~Eh & Gh);\n const CHIl = (El & Fl) ^ (~El & Gl);\n // T1 = H + sigma1 + Chi(E, F, G) + SHA512_K[i] + SHA512_W[i]\n // prettier-ignore\n const T1ll = u64.add5L(Hl, sigma1l, CHIl, SHA512_Kl[i], SHA512_W_L[i]);\n const T1h = u64.add5H(T1ll, Hh, sigma1h, CHIh, SHA512_Kh[i], SHA512_W_H[i]);\n const T1l = T1ll | 0;\n // S0 := (a rightrotate 28) xor (a rightrotate 34) xor (a rightrotate 39)\n const sigma0h = u64.rotrSH(Ah, Al, 28) ^ u64.rotrBH(Ah, Al, 34) ^ u64.rotrBH(Ah, Al, 39);\n const sigma0l = u64.rotrSL(Ah, Al, 28) ^ u64.rotrBL(Ah, Al, 34) ^ u64.rotrBL(Ah, Al, 39);\n const MAJh = (Ah & Bh) ^ (Ah & Ch) ^ (Bh & Ch);\n const MAJl = (Al & Bl) ^ (Al & Cl) ^ (Bl & Cl);\n Hh = Gh | 0;\n Hl = Gl | 0;\n Gh = Fh | 0;\n Gl = Fl | 0;\n Fh = Eh | 0;\n Fl = El | 0;\n ({ h: Eh, l: El } = u64.add(Dh | 0, Dl | 0, T1h | 0, T1l | 0));\n Dh = Ch | 0;\n Dl = Cl | 0;\n Ch = Bh | 0;\n Cl = Bl | 0;\n Bh = Ah | 0;\n Bl = Al | 0;\n const All = u64.add3L(T1l, sigma0l, MAJl);\n Ah = u64.add3H(All, T1h, sigma0h, MAJh);\n Al = All | 0;\n }\n // Add the compressed chunk to the current hash value\n ({ h: Ah, l: Al } = u64.add(this.Ah | 0, this.Al | 0, Ah | 0, Al | 0));\n ({ h: Bh, l: Bl } = u64.add(this.Bh | 0, this.Bl | 0, Bh | 0, Bl | 0));\n ({ h: Ch, l: Cl } = u64.add(this.Ch | 0, this.Cl | 0, Ch | 0, Cl | 0));\n ({ h: Dh, l: Dl } = u64.add(this.Dh | 0, this.Dl | 0, Dh | 0, Dl | 0));\n ({ h: Eh, l: El } = u64.add(this.Eh | 0, this.El | 0, Eh | 0, El | 0));\n ({ h: Fh, l: Fl } = u64.add(this.Fh | 0, this.Fl | 0, Fh | 0, Fl | 0));\n ({ h: Gh, l: Gl } = u64.add(this.Gh | 0, this.Gl | 0, Gh | 0, Gl | 0));\n ({ h: Hh, l: Hl } = u64.add(this.Hh | 0, this.Hl | 0, Hh | 0, Hl | 0));\n this.set(Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl);\n }\n roundClean() {\n SHA512_W_H.fill(0);\n SHA512_W_L.fill(0);\n }\n destroy() {\n this.buffer.fill(0);\n this.set(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);\n }\n}\nclass SHA512_224 extends SHA512 {\n constructor() {\n super();\n // h -- high 32 bits, l -- low 32 bits\n this.Ah = 0x8c3d37c8 | 0;\n this.Al = 0x19544da2 | 0;\n this.Bh = 0x73e19966 | 0;\n this.Bl = 0x89dcd4d6 | 0;\n this.Ch = 0x1dfab7ae | 0;\n this.Cl = 0x32ff9c82 | 0;\n this.Dh = 0x679dd514 | 0;\n this.Dl = 0x582f9fcf | 0;\n this.Eh = 0x0f6d2b69 | 0;\n this.El = 0x7bd44da8 | 0;\n this.Fh = 0x77e36f73 | 0;\n this.Fl = 0x04c48942 | 0;\n this.Gh = 0x3f9d85a8 | 0;\n this.Gl = 0x6a1d36c8 | 0;\n this.Hh = 0x1112e6ad | 0;\n this.Hl = 0x91d692a1 | 0;\n this.outputLen = 28;\n }\n}\nclass SHA512_256 extends SHA512 {\n constructor() {\n super();\n // h -- high 32 bits, l -- low 32 bits\n this.Ah = 0x22312194 | 0;\n this.Al = 0xfc2bf72c | 0;\n this.Bh = 0x9f555fa3 | 0;\n this.Bl = 0xc84c64c2 | 0;\n this.Ch = 0x2393b86b | 0;\n this.Cl = 0x6f53b151 | 0;\n this.Dh = 0x96387719 | 0;\n this.Dl = 0x5940eabd | 0;\n this.Eh = 0x96283ee2 | 0;\n this.El = 0xa88effe3 | 0;\n this.Fh = 0xbe5e1e25 | 0;\n this.Fl = 0x53863992 | 0;\n this.Gh = 0x2b0199fc | 0;\n this.Gl = 0x2c85b8aa | 0;\n this.Hh = 0x0eb72ddc | 0;\n this.Hl = 0x81c52ca2 | 0;\n this.outputLen = 32;\n }\n}\nclass SHA384 extends SHA512 {\n constructor() {\n super();\n // h -- high 32 bits, l -- low 32 bits\n this.Ah = 0xcbbb9d5d | 0;\n this.Al = 0xc1059ed8 | 0;\n this.Bh = 0x629a292a | 0;\n this.Bl = 0x367cd507 | 0;\n this.Ch = 0x9159015a | 0;\n this.Cl = 0x3070dd17 | 0;\n this.Dh = 0x152fecd8 | 0;\n this.Dl = 0xf70e5939 | 0;\n this.Eh = 0x67332667 | 0;\n this.El = 0xffc00b31 | 0;\n this.Fh = 0x8eb44a87 | 0;\n this.Fl = 0x68581511 | 0;\n this.Gh = 0xdb0c2e0d | 0;\n this.Gl = 0x64f98fa7 | 0;\n this.Hh = 0x47b5481d | 0;\n this.Hl = 0xbefa4fa4 | 0;\n this.outputLen = 48;\n }\n}\nexport const sha512 = wrapConstructor(() => new SHA512());\nexport const sha512_224 = wrapConstructor(() => new SHA512_224());\nexport const sha512_256 = wrapConstructor(() => new SHA512_256());\nexport const sha384 = wrapConstructor(() => new SHA384());\n","// ----------------------------------------------------------------------------\n\n// PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:\n// https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code\n// EDIT THE CORRESPONDENT .ts FILE INSTEAD\n\n/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n// Twisted Edwards curve. The formula is: ax² + y² = 1 + dx²y²\nimport { mod } from './modular.js';\nimport * as ut from './utils.js';\nimport { ensureBytes } from './utils.js';\nimport { wNAF, validateBasic } from './curve.js';\n// Be friendly to bad ECMAScript parsers by not using bigint literals like 123n\nconst _0n = BigInt(0);\nconst _1n = BigInt(1);\nconst _2n = BigInt(2);\nconst _8n = BigInt(8);\nfunction validateOpts(curve) {\n const opts = validateBasic(curve);\n ut.validateObject(curve, {\n hash: 'function',\n a: 'bigint',\n d: 'bigint',\n randomBytes: 'function',\n }, {\n adjustScalarBytes: 'function',\n domain: 'function',\n uvRatio: 'function',\n mapToCurve: 'function',\n });\n // Set defaults\n return Object.freeze({ ...opts });\n}\n// It is not generic twisted curve for now, but ed25519/ed448 generic implementation\nexport function twistedEdwards(curveDef) {\n const CURVE = validateOpts(curveDef);\n const { Fp, n: CURVE_ORDER, preHash, hash: cHash, randomBytes, nByteLength, h: cofactor } = CURVE;\n const MASK = _2n ** BigInt(nByteLength * 8);\n const modP = Fp.create; // Function overrides\n // sqrt(u/v)\n const uvRatio = CURVE.uvRatio ||\n ((u, v) => {\n try {\n return { isValid: true, value: Fp.sqrt(u * Fp.inv(v)) };\n }\n catch (e) {\n return { isValid: false, value: _0n };\n }\n });\n const adjustScalarBytes = CURVE.adjustScalarBytes || ((bytes) => bytes); // NOOP\n const domain = CURVE.domain ||\n ((data, ctx, phflag) => {\n if (ctx.length || phflag)\n throw new Error('Contexts/pre-hash are not supported');\n return data;\n }); // NOOP\n const inBig = (n) => typeof n === 'bigint' && 0n < n; // n in [1..]\n const inRange = (n, max) => inBig(n) && inBig(max) && n < max; // n in [1..max-1]\n const in0MaskRange = (n) => n === _0n || inRange(n, MASK); // n in [0..MASK-1]\n function assertInRange(n, max) {\n // n in [1..max-1]\n if (inRange(n, max))\n return n;\n throw new Error(`Expected valid scalar < ${max}, got ${typeof n} ${n}`);\n }\n function assertGE0(n) {\n // n in [0..CURVE_ORDER-1]\n return n === _0n ? n : assertInRange(n, CURVE_ORDER); // GE = prime subgroup, not full group\n }\n const pointPrecomputes = new Map();\n function isPoint(other) {\n if (!(other instanceof Point))\n throw new Error('ExtendedPoint expected');\n }\n // Extended Point works in extended coordinates: (x, y, z, t) ∋ (x=x/z, y=y/z, t=xy).\n // https://en.wikipedia.org/wiki/Twisted_Edwards_curve#Extended_coordinates\n class Point {\n constructor(ex, ey, ez, et) {\n this.ex = ex;\n this.ey = ey;\n this.ez = ez;\n this.et = et;\n if (!in0MaskRange(ex))\n throw new Error('x required');\n if (!in0MaskRange(ey))\n throw new Error('y required');\n if (!in0MaskRange(ez))\n throw new Error('z required');\n if (!in0MaskRange(et))\n throw new Error('t required');\n }\n get x() {\n return this.toAffine().x;\n }\n get y() {\n return this.toAffine().y;\n }\n static fromAffine(p) {\n if (p instanceof Point)\n throw new Error('extended point not allowed');\n const { x, y } = p || {};\n if (!in0MaskRange(x) || !in0MaskRange(y))\n throw new Error('invalid affine point');\n return new Point(x, y, _1n, modP(x * y));\n }\n static normalizeZ(points) {\n const toInv = Fp.invertBatch(points.map((p) => p.ez));\n return points.map((p, i) => p.toAffine(toInv[i])).map(Point.fromAffine);\n }\n // \"Private method\", don't use it directly\n _setWindowSize(windowSize) {\n this._WINDOW_SIZE = windowSize;\n pointPrecomputes.delete(this);\n }\n // Not required for fromHex(), which always creates valid points.\n // Could be useful for fromAffine().\n assertValidity() {\n const { a, d } = CURVE;\n if (this.is0())\n throw new Error('bad point: ZERO'); // TODO: optimize, with vars below?\n // Equation in affine coordinates: ax² + y² = 1 + dx²y²\n // Equation in projective coordinates (X/Z, Y/Z, Z): (aX² + Y²)Z² = Z⁴ + dX²Y²\n const { ex: X, ey: Y, ez: Z, et: T } = this;\n const X2 = modP(X * X); // X²\n const Y2 = modP(Y * Y); // Y²\n const Z2 = modP(Z * Z); // Z²\n const Z4 = modP(Z2 * Z2); // Z⁴\n const aX2 = modP(X2 * a); // aX²\n const left = modP(Z2 * modP(aX2 + Y2)); // (aX² + Y²)Z²\n const right = modP(Z4 + modP(d * modP(X2 * Y2))); // Z⁴ + dX²Y²\n if (left !== right)\n throw new Error('bad point: equation left != right (1)');\n // In Extended coordinates we also have T, which is x*y=T/Z: check X*Y == Z*T\n const XY = modP(X * Y);\n const ZT = modP(Z * T);\n if (XY !== ZT)\n throw new Error('bad point: equation left != right (2)');\n }\n // Compare one point to another.\n equals(other) {\n isPoint(other);\n const { ex: X1, ey: Y1, ez: Z1 } = this;\n const { ex: X2, ey: Y2, ez: Z2 } = other;\n const X1Z2 = modP(X1 * Z2);\n const X2Z1 = modP(X2 * Z1);\n const Y1Z2 = modP(Y1 * Z2);\n const Y2Z1 = modP(Y2 * Z1);\n return X1Z2 === X2Z1 && Y1Z2 === Y2Z1;\n }\n is0() {\n return this.equals(Point.ZERO);\n }\n negate() {\n // Flips point sign to a negative one (-x, y in affine coords)\n return new Point(modP(-this.ex), this.ey, this.ez, modP(-this.et));\n }\n // Fast algo for doubling Extended Point.\n // https://hyperelliptic.org/EFD/g1p/auto-twisted-extended.html#doubling-dbl-2008-hwcd\n // Cost: 4M + 4S + 1*a + 6add + 1*2.\n double() {\n const { a } = CURVE;\n const { ex: X1, ey: Y1, ez: Z1 } = this;\n const A = modP(X1 * X1); // A = X12\n const B = modP(Y1 * Y1); // B = Y12\n const C = modP(_2n * modP(Z1 * Z1)); // C = 2*Z12\n const D = modP(a * A); // D = a*A\n const x1y1 = X1 + Y1;\n const E = modP(modP(x1y1 * x1y1) - A - B); // E = (X1+Y1)2-A-B\n const G = D + B; // G = D+B\n const F = G - C; // F = G-C\n const H = D - B; // H = D-B\n const X3 = modP(E * F); // X3 = E*F\n const Y3 = modP(G * H); // Y3 = G*H\n const T3 = modP(E * H); // T3 = E*H\n const Z3 = modP(F * G); // Z3 = F*G\n return new Point(X3, Y3, Z3, T3);\n }\n // Fast algo for adding 2 Extended Points.\n // https://hyperelliptic.org/EFD/g1p/auto-twisted-extended.html#addition-add-2008-hwcd\n // Cost: 9M + 1*a + 1*d + 7add.\n add(other) {\n isPoint(other);\n const { a, d } = CURVE;\n const { ex: X1, ey: Y1, ez: Z1, et: T1 } = this;\n const { ex: X2, ey: Y2, ez: Z2, et: T2 } = other;\n // Faster algo for adding 2 Extended Points when curve's a=-1.\n // http://hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html#addition-add-2008-hwcd-4\n // Cost: 8M + 8add + 2*2.\n // Note: It does not check whether the `other` point is valid.\n if (a === BigInt(-1)) {\n const A = modP((Y1 - X1) * (Y2 + X2));\n const B = modP((Y1 + X1) * (Y2 - X2));\n const F = modP(B - A);\n if (F === _0n)\n return this.double(); // Same point. Tests say it doesn't affect timing\n const C = modP(Z1 * _2n * T2);\n const D = modP(T1 * _2n * Z2);\n const E = D + C;\n const G = B + A;\n const H = D - C;\n const X3 = modP(E * F);\n const Y3 = modP(G * H);\n const T3 = modP(E * H);\n const Z3 = modP(F * G);\n return new Point(X3, Y3, Z3, T3);\n }\n const A = modP(X1 * X2); // A = X1*X2\n const B = modP(Y1 * Y2); // B = Y1*Y2\n const C = modP(T1 * d * T2); // C = T1*d*T2\n const D = modP(Z1 * Z2); // D = Z1*Z2\n const E = modP((X1 + Y1) * (X2 + Y2) - A - B); // E = (X1+Y1)*(X2+Y2)-A-B\n const F = D - C; // F = D-C\n const G = D + C; // G = D+C\n const H = modP(B - a * A); // H = B-a*A\n const X3 = modP(E * F); // X3 = E*F\n const Y3 = modP(G * H); // Y3 = G*H\n const T3 = modP(E * H); // T3 = E*H\n const Z3 = modP(F * G); // Z3 = F*G\n return new Point(X3, Y3, Z3, T3);\n }\n subtract(other) {\n return this.add(other.negate());\n }\n wNAF(n) {\n return wnaf.wNAFCached(this, pointPrecomputes, n, Point.normalizeZ);\n }\n // Constant-time multiplication.\n multiply(scalar) {\n const { p, f } = this.wNAF(assertInRange(scalar, CURVE_ORDER));\n return Point.normalizeZ([p, f])[0];\n }\n // Non-constant-time multiplication. Uses double-and-add algorithm.\n // It's faster, but should only be used when you don't care about\n // an exposed private key e.g. sig verification.\n multiplyUnsafe(scalar) {\n let n = assertGE0(scalar);\n if (n === _0n)\n return I;\n if (this.equals(I) || n === _1n)\n return this;\n if (this.equals(G))\n return this.wNAF(n).p;\n return wnaf.unsafeLadder(this, n);\n }\n // Checks if point is of small order.\n // If you add something to small order point, you will have \"dirty\"\n // point with torsion component.\n // Multiplies point by cofactor and checks if the result is 0.\n isSmallOrder() {\n return this.multiplyUnsafe(cofactor).is0();\n }\n // Multiplies point by curve order and checks if the result is 0.\n // Returns `false` is the point is dirty.\n isTorsionFree() {\n return wnaf.unsafeLadder(this, CURVE_ORDER).is0();\n }\n // Converts Extended point to default (x, y) coordinates.\n // Can accept precomputed Z^-1 - for example, from invertBatch.\n toAffine(iz) {\n const { ex: x, ey: y, ez: z } = this;\n const is0 = this.is0();\n if (iz == null)\n iz = is0 ? _8n : Fp.inv(z); // 8 was chosen arbitrarily\n const ax = modP(x * iz);\n const ay = modP(y * iz);\n const zz = modP(z * iz);\n if (is0)\n return { x: _0n, y: _1n };\n if (zz !== _1n)\n throw new Error('invZ was invalid');\n return { x: ax, y: ay };\n }\n clearCofactor() {\n const { h: cofactor } = CURVE;\n if (cofactor === _1n)\n return this;\n return this.multiplyUnsafe(cofactor);\n }\n // Converts hash string or Uint8Array to Point.\n // Uses algo from RFC8032 5.1.3.\n static fromHex(hex, strict = true) {\n const { d, a } = CURVE;\n const len = Fp.BYTES;\n hex = ensureBytes('pointHex', hex, len); // copy hex to a new array\n const normed = hex.slice(); // copy again, we'll manipulate it\n const lastByte = hex[len - 1]; // select last byte\n normed[len - 1] = lastByte & ~0x80; // clear last bit\n const y = ut.bytesToNumberLE(normed);\n if (y === _0n) {\n // y=0 is allowed\n }\n else {\n // RFC8032 prohibits >= p, but ZIP215 doesn't\n if (strict)\n assertInRange(y, Fp.ORDER); // strict=true [1..P-1] (2^255-19-1 for ed25519)\n else\n assertInRange(y, MASK); // strict=false [1..MASK-1] (2^256-1 for ed25519)\n }\n // Ed25519: x² = (y²-1)/(dy²+1) mod p. Ed448: x² = (y²-1)/(dy²-1) mod p. Generic case:\n // ax²+y²=1+dx²y² => y²-1=dx²y²-ax² => y²-1=x²(dy²-a) => x²=(y²-1)/(dy²-a)\n const y2 = modP(y * y); // denominator is always non-0 mod p.\n const u = modP(y2 - _1n); // u = y² - 1\n const v = modP(d * y2 - a); // v = d y² + 1.\n let { isValid, value: x } = uvRatio(u, v); // √(u/v)\n if (!isValid)\n throw new Error('Point.fromHex: invalid y coordinate');\n const isXOdd = (x & _1n) === _1n; // There are 2 square roots. Use x_0 bit to select proper\n const isLastByteOdd = (lastByte & 0x80) !== 0; // if x=0 and x_0 = 1, fail\n if (isLastByteOdd !== isXOdd)\n x = modP(-x); // if x_0 != x mod 2, set x = p-x\n return Point.fromAffine({ x, y });\n }\n static fromPrivateKey(privKey) {\n return getExtendedPublicKey(privKey).point;\n }\n toRawBytes() {\n const { x, y } = this.toAffine();\n const bytes = ut.numberToBytesLE(y, Fp.BYTES); // each y has 2 x values (x, -y)\n bytes[bytes.length - 1] |= x & _1n ? 0x80 : 0; // when compressing, it's enough to store y\n return bytes; // and use the last byte to encode sign of x\n }\n toHex() {\n return ut.bytesToHex(this.toRawBytes()); // Same as toRawBytes, but returns string.\n }\n }\n Point.BASE = new Point(CURVE.Gx, CURVE.Gy, _1n, modP(CURVE.Gx * CURVE.Gy));\n Point.ZERO = new Point(_0n, _1n, _1n, _0n); // 0, 1, 1, 0\n const { BASE: G, ZERO: I } = Point;\n const wnaf = wNAF(Point, nByteLength * 8);\n function modN(a) {\n return mod(a, CURVE_ORDER);\n }\n // Little-endian SHA512 with modulo n\n function modN_LE(hash) {\n return modN(ut.bytesToNumberLE(hash));\n }\n /** Convenience method that creates public key and other stuff. RFC8032 5.1.5 */\n function getExtendedPublicKey(key) {\n const len = nByteLength;\n key = ensureBytes('private key', key, len);\n // Hash private key with curve's hash function to produce uniformingly random input\n // Check byte lengths: ensure(64, h(ensure(32, key)))\n const hashed = ensureBytes('hashed private key', cHash(key), 2 * len);\n const head = adjustScalarBytes(hashed.slice(0, len)); // clear first half bits, produce FE\n const prefix = hashed.slice(len, 2 * len); // second half is called key prefix (5.1.6)\n const scalar = modN_LE(head); // The actual private scalar\n const point = G.multiply(scalar); // Point on Edwards curve aka public key\n const pointBytes = point.toRawBytes(); // Uint8Array representation\n return { head, prefix, scalar, point, pointBytes };\n }\n // Calculates EdDSA pub key. RFC8032 5.1.5. Privkey is hashed. Use first half with 3 bits cleared\n function getPublicKey(privKey) {\n return getExtendedPublicKey(privKey).pointBytes;\n }\n // int('LE', SHA512(dom2(F, C) || msgs)) mod N\n function hashDomainToScalar(context = new Uint8Array(), ...msgs) {\n const msg = ut.concatBytes(...msgs);\n return modN_LE(cHash(domain(msg, ensureBytes('context', context), !!preHash)));\n }\n /** Signs message with privateKey. RFC8032 5.1.6 */\n function sign(msg, privKey, context) {\n msg = ensureBytes('message', msg);\n if (preHash)\n msg = preHash(msg); // for ed25519ph etc.\n const { prefix, scalar, pointBytes } = getExtendedPublicKey(privKey);\n const r = hashDomainToScalar(context, prefix, msg); // r = dom2(F, C) || prefix || PH(M)\n const R = G.multiply(r).toRawBytes(); // R = rG\n const k = hashDomainToScalar(context, R, pointBytes, msg); // R || A || PH(M)\n const s = modN(r + k * scalar); // S = (r + k * s) mod L\n assertGE0(s); // 0 <= s < l\n const res = ut.concatBytes(R, ut.numberToBytesLE(s, Fp.BYTES));\n return ensureBytes('result', res, nByteLength * 2); // 64-byte signature\n }\n function signModified(msg, privKey, context) {\n msg = ensureBytes('message', msg);\n const privKeyBytes = ensureBytes('privKey', privKey);\n const privKeyNumber = ut.bytesToNumberLE(privKeyBytes);\n const publicKey = G.multiply(modN(privKeyNumber)).toRawBytes();\n const signBit = publicKey[31] & 0x80;\n const r = hashDomainToScalar(context, privKeyBytes, msg); // r = dom2(F, C) || prefix || PH(M)\n const R = G.multiply(r).toRawBytes(); // R = rG\n const k = hashDomainToScalar(context, R, publicKey, msg); // R || A || PH(M)\n const s = k * privKeyNumber; // S = (r + k * s) mod L\n const S = modN(r + s);\n assertGE0(S); // 0 <= s < l\n const Sencoded = ut.numberToBytesLE(S, Fp.BYTES);\n Sencoded[31] |= signBit;\n const res = ut.concatBytes(R, Sencoded);\n return ensureBytes('result', res, nByteLength * 2); // 64-byte signature\n }\n function verify(sig, msg, publicKey, context) {\n const len = Fp.BYTES; // Verifies EdDSA signature against message and public key. RFC8032 5.1.7.\n sig = ensureBytes('signature', sig, 2 * len); // An extended group equation is checked.\n msg = ensureBytes('message', msg); // ZIP215 compliant, which means not fully RFC8032 compliant.\n if (preHash)\n msg = preHash(msg); // for ed25519ph, etc\n const A = Point.fromHex(publicKey, false); // Check for s bounds, hex validity\n const R = Point.fromHex(sig.slice(0, len), false); // 0 <= R < 2^256: ZIP215 R can be >= P\n const s = ut.bytesToNumberLE(sig.slice(len, 2 * len)); // 0 <= s < l\n const SB = G.multiplyUnsafe(s);\n const k = hashDomainToScalar(context, R.toRawBytes(), A.toRawBytes(), msg);\n const RkA = R.add(A.multiplyUnsafe(k));\n // [8][S]B = [8]R + [8][k]A'\n return RkA.subtract(SB).clearCofactor().equals(Point.ZERO);\n }\n G._setWindowSize(8); // Enable precomputes. Slows down first publicKey computation by 20ms.\n const utils = {\n getExtendedPublicKey,\n // ed25519 private keys are uniform 32b. No need to check for modulo bias, like in secp256k1.\n randomPrivateKey: () => randomBytes(Fp.BYTES),\n /**\n * We're doing scalar multiplication (used in getPublicKey etc) with precomputed BASE_POINT\n * values. This slows down first getPublicKey() by milliseconds (see Speed section),\n * but allows to speed-up subsequent getPublicKey() calls up to 20x.\n * @param windowSize 2, 4, 8, 16\n */\n precompute(windowSize = 8, point = Point.BASE) {\n point._setWindowSize(windowSize);\n point.multiply(BigInt(3));\n return point;\n },\n };\n return {\n CURVE,\n getPublicKey,\n sign,\n signModified,\n verify,\n ExtendedPoint: Point,\n utils,\n };\n}\n","// ----------------------------------------------------------------------------\n\n// PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:\n// https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code\n// EDIT THE CORRESPONDENT .ts FILE INSTEAD\n\n/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nimport { mod, pow } from './modular.js';\nimport { bytesToNumberLE, ensureBytes, numberToBytesLE, validateObject } from './utils.js';\nconst _0n = BigInt(0);\nconst _1n = BigInt(1);\nfunction validateOpts(curve) {\n validateObject(curve, {\n a: 'bigint',\n }, {\n montgomeryBits: 'isSafeInteger',\n nByteLength: 'isSafeInteger',\n adjustScalarBytes: 'function',\n domain: 'function',\n powPminus2: 'function',\n Gu: 'bigint',\n });\n // Set defaults\n return Object.freeze({ ...curve });\n}\n// NOTE: not really montgomery curve, just bunch of very specific methods for X25519/X448 (RFC 7748, https://www.rfc-editor.org/rfc/rfc7748)\n// Uses only one coordinate instead of two\nexport function montgomery(curveDef) {\n const CURVE = validateOpts(curveDef);\n const { P } = CURVE;\n const modP = (n) => mod(n, P);\n const montgomeryBits = CURVE.montgomeryBits;\n const montgomeryBytes = Math.ceil(montgomeryBits / 8);\n const fieldLen = CURVE.nByteLength;\n const adjustScalarBytes = CURVE.adjustScalarBytes || ((bytes) => bytes);\n const powPminus2 = CURVE.powPminus2 || ((x) => pow(x, P - BigInt(2), P));\n // cswap from RFC7748. But it is not from RFC7748!\n /*\n cswap(swap, x_2, x_3):\n dummy = mask(swap) AND (x_2 XOR x_3)\n x_2 = x_2 XOR dummy\n x_3 = x_3 XOR dummy\n Return (x_2, x_3)\n Where mask(swap) is the all-1 or all-0 word of the same length as x_2\n and x_3, computed, e.g., as mask(swap) = 0 - swap.\n */\n function cswap(swap, x_2, x_3) {\n const dummy = modP(swap * (x_2 - x_3));\n x_2 = modP(x_2 - dummy);\n x_3 = modP(x_3 + dummy);\n return [x_2, x_3];\n }\n // Accepts 0 as well\n function assertFieldElement(n) {\n if (typeof n === 'bigint' && _0n <= n && n < P)\n return n;\n throw new Error('Expected valid scalar 0 < scalar < CURVE.P');\n }\n // x25519 from 4\n // The constant a24 is (486662 - 2) / 4 = 121665 for curve25519/X25519\n const a24 = (CURVE.a - BigInt(2)) / BigInt(4);\n /**\n *\n * @param pointU u coordinate (x) on Montgomery Curve 25519\n * @param scalar by which the point would be multiplied\n * @returns new Point on Montgomery curve\n */\n function montgomeryLadder(pointU, scalar) {\n const u = assertFieldElement(pointU);\n // Section 5: Implementations MUST accept non-canonical values and process them as\n // if they had been reduced modulo the field prime.\n const k = assertFieldElement(scalar);\n const x_1 = u;\n let x_2 = _1n;\n let z_2 = _0n;\n let x_3 = u;\n let z_3 = _1n;\n let swap = _0n;\n let sw;\n for (let t = BigInt(montgomeryBits - 1); t >= _0n; t--) {\n const k_t = (k >> t) & _1n;\n swap ^= k_t;\n sw = cswap(swap, x_2, x_3);\n x_2 = sw[0];\n x_3 = sw[1];\n sw = cswap(swap, z_2, z_3);\n z_2 = sw[0];\n z_3 = sw[1];\n swap = k_t;\n const A = x_2 + z_2;\n const AA = modP(A * A);\n const B = x_2 - z_2;\n const BB = modP(B * B);\n const E = AA - BB;\n const C = x_3 + z_3;\n const D = x_3 - z_3;\n const DA = modP(D * A);\n const CB = modP(C * B);\n const dacb = DA + CB;\n const da_cb = DA - CB;\n x_3 = modP(dacb * dacb);\n z_3 = modP(x_1 * modP(da_cb * da_cb));\n x_2 = modP(AA * BB);\n z_2 = modP(E * (AA + modP(a24 * E)));\n }\n // (x_2, x_3) = cswap(swap, x_2, x_3)\n sw = cswap(swap, x_2, x_3);\n x_2 = sw[0];\n x_3 = sw[1];\n // (z_2, z_3) = cswap(swap, z_2, z_3)\n sw = cswap(swap, z_2, z_3);\n z_2 = sw[0];\n z_3 = sw[1];\n // z_2^(p - 2)\n const z2 = powPminus2(z_2);\n // Return x_2 * (z_2^(p - 2))\n return modP(x_2 * z2);\n }\n function encodeUCoordinate(u) {\n return numberToBytesLE(modP(u), montgomeryBytes);\n }\n function decodeUCoordinate(uEnc) {\n // Section 5: When receiving such an array, implementations of X25519\n // MUST mask the most significant bit in the final byte.\n // This is very ugly way, but it works because fieldLen-1 is outside of bounds for X448, so this becomes NOOP\n // fieldLen - scalaryBytes = 1 for X448 and = 0 for X25519\n const u = ensureBytes('u coordinate', uEnc, montgomeryBytes);\n // u[fieldLen-1] crashes QuickJS (TypeError: out-of-bound numeric index)\n if (fieldLen === montgomeryBytes)\n u[fieldLen - 1] &= 127; // 0b0111_1111\n return bytesToNumberLE(u);\n }\n function decodeScalar(n) {\n const bytes = ensureBytes('scalar', n);\n if (bytes.length !== montgomeryBytes && bytes.length !== fieldLen)\n throw new Error(`Expected ${montgomeryBytes} or ${fieldLen} bytes, got ${bytes.length}`);\n return bytesToNumberLE(adjustScalarBytes(bytes));\n }\n function scalarMult(scalar, u) {\n const pointU = decodeUCoordinate(u);\n const _scalar = decodeScalar(scalar);\n const pu = montgomeryLadder(pointU, _scalar);\n // The result was not contributory\n // https://cr.yp.to/ecdh.html#validate\n if (pu === _0n)\n throw new Error('Invalid private or public key received');\n return encodeUCoordinate(pu);\n }\n // Computes public key from private. By doing scalar multiplication of base point.\n const GuBytes = encodeUCoordinate(CURVE.Gu);\n function scalarMultBase(scalar) {\n return scalarMult(scalar, GuBytes);\n }\n return {\n scalarMult,\n scalarMultBase,\n getSharedSecret: (privateKey, publicKey) => scalarMult(privateKey, publicKey),\n getPublicKey: (privateKey) => scalarMultBase(privateKey),\n utils: { randomPrivateKey: () => CURVE.randomBytes(CURVE.nByteLength) },\n GuBytes: GuBytes,\n };\n}\n","// ----------------------------------------------------------------------------\n\n// PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:\n// https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code\n// EDIT THE CORRESPONDENT .ts FILE INSTEAD\n\n/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nimport { sha512 } from '../noble-hashes/sha512.js';\nimport { concatBytes, randomBytes, utf8ToBytes } from '../noble-hashes/utils.js';\nimport { twistedEdwards } from './abstract/edwards.js';\nimport { montgomery } from './abstract/montgomery.js';\nimport { mod, pow2, isNegativeLE, Fp as Field, FpSqrtEven } from './abstract/modular.js';\nimport { equalBytes, bytesToHex, bytesToNumberLE, numberToBytesLE, ensureBytes, } from './abstract/utils.js';\nimport * as htf from './abstract/hash-to-curve.js';\n/**\n * ed25519 Twisted Edwards curve with following addons:\n * - X25519 ECDH\n * - Ristretto cofactor elimination\n * - Elligator hash-to-group / point indistinguishability\n */\nconst ED25519_P = BigInt('57896044618658097711785492504343953926634992332820282019728792003956564819949');\n// √(-1) aka √(a) aka 2^((p-1)/4)\nconst ED25519_SQRT_M1 = BigInt('19681161376707505956807079304988542015446066515923890162744021073123829784752');\n// prettier-ignore\nconst _0n = BigInt(0), _1n = BigInt(1), _2n = BigInt(2), _5n = BigInt(5);\n// prettier-ignore\nconst _10n = BigInt(10), _20n = BigInt(20), _40n = BigInt(40), _80n = BigInt(80);\nfunction ed25519_pow_2_252_3(x) {\n const P = ED25519_P;\n const x2 = (x * x) % P;\n const b2 = (x2 * x) % P; // x^3, 11\n const b4 = (pow2(b2, _2n, P) * b2) % P; // x^15, 1111\n const b5 = (pow2(b4, _1n, P) * x) % P; // x^31\n const b10 = (pow2(b5, _5n, P) * b5) % P;\n const b20 = (pow2(b10, _10n, P) * b10) % P;\n const b40 = (pow2(b20, _20n, P) * b20) % P;\n const b80 = (pow2(b40, _40n, P) * b40) % P;\n const b160 = (pow2(b80, _80n, P) * b80) % P;\n const b240 = (pow2(b160, _80n, P) * b80) % P;\n const b250 = (pow2(b240, _10n, P) * b10) % P;\n const pow_p_5_8 = (pow2(b250, _2n, P) * x) % P;\n // ^ To pow to (p+3)/8, multiply it by x.\n return { pow_p_5_8, b2 };\n}\nfunction adjustScalarBytes(bytes) {\n // Section 5: For X25519, in order to decode 32 random bytes as an integer scalar,\n // set the three least significant bits of the first byte\n bytes[0] &= 248; // 0b1111_1000\n // and the most significant bit of the last to zero,\n bytes[31] &= 127; // 0b0111_1111\n // set the second most significant bit of the last byte to 1\n bytes[31] |= 64; // 0b0100_0000\n return bytes;\n}\n// sqrt(u/v)\nfunction uvRatio(u, v) {\n const P = ED25519_P;\n const v3 = mod(v * v * v, P); // v³\n const v7 = mod(v3 * v3 * v, P); // v⁷\n // (p+3)/8 and (p-5)/8\n const pow = ed25519_pow_2_252_3(u * v7).pow_p_5_8;\n let x = mod(u * v3 * pow, P); // (uv³)(uv⁷)^(p-5)/8\n const vx2 = mod(v * x * x, P); // vx²\n const root1 = x; // First root candidate\n const root2 = mod(x * ED25519_SQRT_M1, P); // Second root candidate\n const useRoot1 = vx2 === u; // If vx² = u (mod p), x is a square root\n const useRoot2 = vx2 === mod(-u, P); // If vx² = -u, set x <-- x * 2^((p-1)/4)\n const noRoot = vx2 === mod(-u * ED25519_SQRT_M1, P); // There is no valid root, vx² = -u√(-1)\n if (useRoot1)\n x = root1;\n if (useRoot2 || noRoot)\n x = root2; // We return root2 anyway, for const-time\n if (isNegativeLE(x, P))\n x = mod(-x, P);\n return { isValid: useRoot1 || useRoot2, value: x };\n}\n// Just in case\nexport const ED25519_TORSION_SUBGROUP = [\n '0100000000000000000000000000000000000000000000000000000000000000',\n 'c7176a703d4dd84fba3c0b760d10670f2a2053fa2c39ccc64ec7fd7792ac037a',\n '0000000000000000000000000000000000000000000000000000000000000080',\n '26e8958fc2b227b045c3f489f2ef98f0d5dfac05d3c63339b13802886d53fc05',\n 'ecffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f',\n '26e8958fc2b227b045c3f489f2ef98f0d5dfac05d3c63339b13802886d53fc85',\n '0000000000000000000000000000000000000000000000000000000000000000',\n 'c7176a703d4dd84fba3c0b760d10670f2a2053fa2c39ccc64ec7fd7792ac03fa',\n];\nconst Fp = Field(ED25519_P, undefined, true);\nconst ED25519_DEF = {\n // Param: a\n a: BigInt(-1),\n // Equal to -121665/121666 over finite field.\n // Negative number is P - number, and division is invert(number, P)\n d: BigInt('37095705934669439343138083508754565189542113879843219016388785533085940283555'),\n // Finite field 𝔽p over which we'll do calculations; 2n ** 255n - 19n\n Fp,\n // Subgroup order: how many points ed25519 has\n // 2n ** 252n + 27742317777372353535851937790883648493n;\n n: BigInt('7237005577332262213973186563042994240857116359379907606001950938285454250989'),\n // Cofactor\n h: BigInt(8),\n // Base point (x, y) aka generator point\n Gx: BigInt('15112221349535400772501151409588531511454012693041857206046113283949847762202'),\n Gy: BigInt('46316835694926478169428394003475163141307993866256225615783033603165251855960'),\n hash: sha512,\n randomBytes,\n adjustScalarBytes,\n // dom2\n // Ratio of u to v. Allows us to combine inversion and square root. Uses algo from RFC8032 5.1.3.\n // Constant-time, u/√v\n uvRatio,\n};\nexport const ed25519 = twistedEdwards(ED25519_DEF);\nfunction ed25519_domain(data, ctx, phflag) {\n if (ctx.length > 255)\n throw new Error('Context is too big');\n return concatBytes(utf8ToBytes('SigEd25519 no Ed25519 collisions'), new Uint8Array([phflag ? 1 : 0, ctx.length]), ctx, data);\n}\nexport const ed25519ctx = twistedEdwards({ ...ED25519_DEF, domain: ed25519_domain });\nexport const ed25519ph = twistedEdwards({\n ...ED25519_DEF,\n domain: ed25519_domain,\n preHash: sha512,\n});\nexport const x25519 = montgomery({\n P: ED25519_P,\n a: BigInt(486662),\n montgomeryBits: 255,\n nByteLength: 32,\n Gu: BigInt(9),\n powPminus2: (x) => {\n const P = ED25519_P;\n // x^(p-2) aka x^(2^255-21)\n const { pow_p_5_8, b2 } = ed25519_pow_2_252_3(x);\n return mod(pow2(pow_p_5_8, BigInt(3), P) * b2, P);\n },\n adjustScalarBytes,\n randomBytes,\n});\n// Hash To Curve Elligator2 Map (NOTE: different from ristretto255 elligator)\n// NOTE: very important part is usage of FpSqrtEven for ELL2_C1_EDWARDS, since\n// SageMath returns different root first and everything falls apart\nconst ELL2_C1 = (Fp.ORDER + BigInt(3)) / BigInt(8); // 1. c1 = (q + 3) / 8 # Integer arithmetic\nconst ELL2_C2 = Fp.pow(_2n, ELL2_C1); // 2. c2 = 2^c1\nconst ELL2_C3 = Fp.sqrt(Fp.neg(Fp.ONE)); // 3. c3 = sqrt(-1)\nconst ELL2_C4 = (Fp.ORDER - BigInt(5)) / BigInt(8); // 4. c4 = (q - 5) / 8 # Integer arithmetic\nconst ELL2_J = BigInt(486662);\n// prettier-ignore\nfunction map_to_curve_elligator2_curve25519(u) {\n let tv1 = Fp.sqr(u); // 1. tv1 = u^2\n tv1 = Fp.mul(tv1, _2n); // 2. tv1 = 2 * tv1\n let xd = Fp.add(tv1, Fp.ONE); // 3. xd = tv1 + 1 # Nonzero: -1 is square (mod p), tv1 is not\n let x1n = Fp.neg(ELL2_J); // 4. x1n = -J # x1 = x1n / xd = -J / (1 + 2 * u^2)\n let tv2 = Fp.sqr(xd); // 5. tv2 = xd^2\n let gxd = Fp.mul(tv2, xd); // 6. gxd = tv2 * xd # gxd = xd^3\n let gx1 = Fp.mul(tv1, ELL2_J); // 7. gx1 = J * tv1 # x1n + J * xd\n gx1 = Fp.mul(gx1, x1n); // 8. gx1 = gx1 * x1n # x1n^2 + J * x1n * xd\n gx1 = Fp.add(gx1, tv2); // 9. gx1 = gx1 + tv2 # x1n^2 + J * x1n * xd + xd^2\n gx1 = Fp.mul(gx1, x1n); // 10. gx1 = gx1 * x1n # x1n^3 + J * x1n^2 * xd + x1n * xd^2\n let tv3 = Fp.sqr(gxd); // 11. tv3 = gxd^2\n tv2 = Fp.sqr(tv3); // 12. tv2 = tv3^2 # gxd^4\n tv3 = Fp.mul(tv3, gxd); // 13. tv3 = tv3 * gxd # gxd^3\n tv3 = Fp.mul(tv3, gx1); // 14. tv3 = tv3 * gx1 # gx1 * gxd^3\n tv2 = Fp.mul(tv2, tv3); // 15. tv2 = tv2 * tv3 # gx1 * gxd^7\n let y11 = Fp.pow(tv2, ELL2_C4); // 16. y11 = tv2^c4 # (gx1 * gxd^7)^((p - 5) / 8)\n y11 = Fp.mul(y11, tv3); // 17. y11 = y11 * tv3 # gx1*gxd^3*(gx1*gxd^7)^((p-5)/8)\n let y12 = Fp.mul(y11, ELL2_C3); // 18. y12 = y11 * c3\n tv2 = Fp.sqr(y11); // 19. tv2 = y11^2\n tv2 = Fp.mul(tv2, gxd); // 20. tv2 = tv2 * gxd\n let e1 = Fp.eql(tv2, gx1); // 21. e1 = tv2 == gx1\n let y1 = Fp.cmov(y12, y11, e1); // 22. y1 = CMOV(y12, y11, e1) # If g(x1) is square, this is its sqrt\n let x2n = Fp.mul(x1n, tv1); // 23. x2n = x1n * tv1 # x2 = x2n / xd = 2 * u^2 * x1n / xd\n let y21 = Fp.mul(y11, u); // 24. y21 = y11 * u\n y21 = Fp.mul(y21, ELL2_C2); // 25. y21 = y21 * c2\n let y22 = Fp.mul(y21, ELL2_C3); // 26. y22 = y21 * c3\n let gx2 = Fp.mul(gx1, tv1); // 27. gx2 = gx1 * tv1 # g(x2) = gx2 / gxd = 2 * u^2 * g(x1)\n tv2 = Fp.sqr(y21); // 28. tv2 = y21^2\n tv2 = Fp.mul(tv2, gxd); // 29. tv2 = tv2 * gxd\n let e2 = Fp.eql(tv2, gx2); // 30. e2 = tv2 == gx2\n let y2 = Fp.cmov(y22, y21, e2); // 31. y2 = CMOV(y22, y21, e2) # If g(x2) is square, this is its sqrt\n tv2 = Fp.sqr(y1); // 32. tv2 = y1^2\n tv2 = Fp.mul(tv2, gxd); // 33. tv2 = tv2 * gxd\n let e3 = Fp.eql(tv2, gx1); // 34. e3 = tv2 == gx1\n let xn = Fp.cmov(x2n, x1n, e3); // 35. xn = CMOV(x2n, x1n, e3) # If e3, x = x1, else x = x2\n let y = Fp.cmov(y2, y1, e3); // 36. y = CMOV(y2, y1, e3) # If e3, y = y1, else y = y2\n let e4 = Fp.isOdd(y); // 37. e4 = sgn0(y) == 1 # Fix sign of y\n y = Fp.cmov(y, Fp.neg(y), e3 !== e4); // 38. y = CMOV(y, -y, e3 XOR e4)\n return { xMn: xn, xMd: xd, yMn: y, yMd: 1n }; // 39. return (xn, xd, y, 1)\n}\nconst ELL2_C1_EDWARDS = FpSqrtEven(Fp, Fp.neg(BigInt(486664))); // sgn0(c1) MUST equal 0\nfunction map_to_curve_elligator2_edwards25519(u) {\n const { xMn, xMd, yMn, yMd } = map_to_curve_elligator2_curve25519(u); // 1. (xMn, xMd, yMn, yMd) = map_to_curve_elligator2_curve25519(u)\n let xn = Fp.mul(xMn, yMd); // 2. xn = xMn * yMd\n xn = Fp.mul(xn, ELL2_C1_EDWARDS); // 3. xn = xn * c1\n let xd = Fp.mul(xMd, yMn); // 4. xd = xMd * yMn # xn / xd = c1 * xM / yM\n let yn = Fp.sub(xMn, xMd); // 5. yn = xMn - xMd\n let yd = Fp.add(xMn, xMd); // 6. yd = xMn + xMd # (n / d - 1) / (n / d + 1) = (n - d) / (n + d)\n let tv1 = Fp.mul(xd, yd); // 7. tv1 = xd * yd\n let e = Fp.eql(tv1, Fp.ZERO); // 8. e = tv1 == 0\n xn = Fp.cmov(xn, Fp.ZERO, e); // 9. xn = CMOV(xn, 0, e)\n xd = Fp.cmov(xd, Fp.ONE, e); // 10. xd = CMOV(xd, 1, e)\n yn = Fp.cmov(yn, Fp.ONE, e); // 11. yn = CMOV(yn, 1, e)\n yd = Fp.cmov(yd, Fp.ONE, e); // 12. yd = CMOV(yd, 1, e)\n const inv = Fp.invertBatch([xd, yd]); // batch division\n return { x: Fp.mul(xn, inv[0]), y: Fp.mul(yn, inv[1]) }; // 13. return (xn, xd, yn, yd)\n}\nconst { hashToCurve, encodeToCurve } = htf.createHasher(ed25519.ExtendedPoint, (scalars) => map_to_curve_elligator2_edwards25519(scalars[0]), {\n DST: 'edwards25519_XMD:SHA-512_ELL2_RO_',\n encodeDST: 'edwards25519_XMD:SHA-512_ELL2_NU_',\n p: Fp.ORDER,\n m: 1,\n k: 128,\n expand: 'xmd',\n hash: sha512,\n});\nexport { hashToCurve, encodeToCurve };\nfunction assertRstPoint(other) {\n if (!(other instanceof RistrettoPoint))\n throw new Error('RistrettoPoint expected');\n}\n// √(-1) aka √(a) aka 2^((p-1)/4)\nconst SQRT_M1 = BigInt('19681161376707505956807079304988542015446066515923890162744021073123829784752');\n// √(ad - 1)\nconst SQRT_AD_MINUS_ONE = BigInt('25063068953384623474111414158702152701244531502492656460079210482610430750235');\n// 1 / √(a-d)\nconst INVSQRT_A_MINUS_D = BigInt('54469307008909316920995813868745141605393597292927456921205312896311721017578');\n// 1-d²\nconst ONE_MINUS_D_SQ = BigInt('1159843021668779879193775521855586647937357759715417654439879720876111806838');\n// (d-1)²\nconst D_MINUS_ONE_SQ = BigInt('40440834346308536858101042469323190826248399146238708352240133220865137265952');\n// Calculates 1/√(number)\nconst invertSqrt = (number) => uvRatio(_1n, number);\nconst MAX_255B = BigInt('0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff');\nconst bytes255ToNumberLE = (bytes) => ed25519.CURVE.Fp.create(bytesToNumberLE(bytes) & MAX_255B);\n// Computes Elligator map for Ristretto\n// https://ristretto.group/formulas/elligator.html\nfunction calcElligatorRistrettoMap(r0) {\n const { d } = ed25519.CURVE;\n const P = ed25519.CURVE.Fp.ORDER;\n const mod = ed25519.CURVE.Fp.create;\n const r = mod(SQRT_M1 * r0 * r0); // 1\n const Ns = mod((r + _1n) * ONE_MINUS_D_SQ); // 2\n let c = BigInt(-1); // 3\n const D = mod((c - d * r) * mod(r + d)); // 4\n let { isValid: Ns_D_is_sq, value: s } = uvRatio(Ns, D); // 5\n let s_ = mod(s * r0); // 6\n if (!isNegativeLE(s_, P))\n s_ = mod(-s_);\n if (!Ns_D_is_sq)\n s = s_; // 7\n if (!Ns_D_is_sq)\n c = r; // 8\n const Nt = mod(c * (r - _1n) * D_MINUS_ONE_SQ - D); // 9\n const s2 = s * s;\n const W0 = mod((s + s) * D); // 10\n const W1 = mod(Nt * SQRT_AD_MINUS_ONE); // 11\n const W2 = mod(_1n - s2); // 12\n const W3 = mod(_1n + s2); // 13\n return new ed25519.ExtendedPoint(mod(W0 * W3), mod(W2 * W1), mod(W1 * W3), mod(W0 * W2));\n}\n/**\n * Each ed25519/ExtendedPoint has 8 different equivalent points. This can be\n * a source of bugs for protocols like ring signatures. Ristretto was created to solve this.\n * Ristretto point operates in X:Y:Z:T extended coordinates like ExtendedPoint,\n * but it should work in its own namespace: do not combine those two.\n * https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-ristretto255-decaf448\n */\nexport class RistrettoPoint {\n // Private property to discourage combining ExtendedPoint + RistrettoPoint\n // Always use Ristretto encoding/decoding instead.\n constructor(ep) {\n this.ep = ep;\n }\n static fromAffine(ap) {\n return new RistrettoPoint(ed25519.ExtendedPoint.fromAffine(ap));\n }\n /**\n * Takes uniform output of 64-bit hash function like sha512 and converts it to `RistrettoPoint`.\n * The hash-to-group operation applies Elligator twice and adds the results.\n * **Note:** this is one-way map, there is no conversion from point to hash.\n * https://ristretto.group/formulas/elligator.html\n * @param hex 64-bit output of a hash function\n */\n static hashToCurve(hex) {\n hex = ensureBytes('ristrettoHash', hex, 64);\n const r1 = bytes255ToNumberLE(hex.slice(0, 32));\n const R1 = calcElligatorRistrettoMap(r1);\n const r2 = bytes255ToNumberLE(hex.slice(32, 64));\n const R2 = calcElligatorRistrettoMap(r2);\n return new RistrettoPoint(R1.add(R2));\n }\n /**\n * Converts ristretto-encoded string to ristretto point.\n * https://ristretto.group/formulas/decoding.html\n * @param hex Ristretto-encoded 32 bytes. Not every 32-byte string is valid ristretto encoding\n */\n static fromHex(hex) {\n hex = ensureBytes('ristrettoHex', hex, 32);\n const { a, d } = ed25519.CURVE;\n const P = ed25519.CURVE.Fp.ORDER;\n const mod = ed25519.CURVE.Fp.create;\n const emsg = 'RistrettoPoint.fromHex: the hex is not valid encoding of RistrettoPoint';\n const s = bytes255ToNumberLE(hex);\n // 1. Check that s_bytes is the canonical encoding of a field element, or else abort.\n // 3. Check that s is non-negative, or else abort\n if (!equalBytes(numberToBytesLE(s, 32), hex) || isNegativeLE(s, P))\n throw new Error(emsg);\n const s2 = mod(s * s);\n const u1 = mod(_1n + a * s2); // 4 (a is -1)\n const u2 = mod(_1n - a * s2); // 5\n const u1_2 = mod(u1 * u1);\n const u2_2 = mod(u2 * u2);\n const v = mod(a * d * u1_2 - u2_2); // 6\n const { isValid, value: I } = invertSqrt(mod(v * u2_2)); // 7\n const Dx = mod(I * u2); // 8\n const Dy = mod(I * Dx * v); // 9\n let x = mod((s + s) * Dx); // 10\n if (isNegativeLE(x, P))\n x = mod(-x); // 10\n const y = mod(u1 * Dy); // 11\n const t = mod(x * y); // 12\n if (!isValid || isNegativeLE(t, P) || y === _0n)\n throw new Error(emsg);\n return new RistrettoPoint(new ed25519.ExtendedPoint(x, y, _1n, t));\n }\n /**\n * Encodes ristretto point to Uint8Array.\n * https://ristretto.group/formulas/encoding.html\n */\n toRawBytes() {\n let { ex: x, ey: y, ez: z, et: t } = this.ep;\n const P = ed25519.CURVE.Fp.ORDER;\n const mod = ed25519.CURVE.Fp.create;\n const u1 = mod(mod(z + y) * mod(z - y)); // 1\n const u2 = mod(x * y); // 2\n // Square root always exists\n const u2sq = mod(u2 * u2);\n const { value: invsqrt } = invertSqrt(mod(u1 * u2sq)); // 3\n const D1 = mod(invsqrt * u1); // 4\n const D2 = mod(invsqrt * u2); // 5\n const zInv = mod(D1 * D2 * t); // 6\n let D; // 7\n if (isNegativeLE(t * zInv, P)) {\n let _x = mod(y * SQRT_M1);\n let _y = mod(x * SQRT_M1);\n x = _x;\n y = _y;\n D = mod(D1 * INVSQRT_A_MINUS_D);\n }\n else {\n D = D2; // 8\n }\n if (isNegativeLE(x * zInv, P))\n y = mod(-y); // 9\n let s = mod((z - y) * D); // 10 (check footer's note, no sqrt(-a))\n if (isNegativeLE(s, P))\n s = mod(-s);\n return numberToBytesLE(s, 32); // 11\n }\n toHex() {\n return bytesToHex(this.toRawBytes());\n }\n toString() {\n return this.toHex();\n }\n // Compare one point to another.\n equals(other) {\n assertRstPoint(other);\n const { ex: X1, ey: Y1 } = this.ep;\n const { ex: X2, ey: Y2 } = other.ep;\n const mod = ed25519.CURVE.Fp.create;\n // (x1 * y2 == y1 * x2) | (y1 * y2 == x1 * x2)\n const one = mod(X1 * Y2) === mod(Y1 * X2);\n const two = mod(Y1 * Y2) === mod(X1 * X2);\n return one || two;\n }\n add(other) {\n assertRstPoint(other);\n return new RistrettoPoint(this.ep.add(other.ep));\n }\n subtract(other) {\n assertRstPoint(other);\n return new RistrettoPoint(this.ep.subtract(other.ep));\n }\n multiply(scalar) {\n return new RistrettoPoint(this.ep.multiply(scalar));\n }\n multiplyUnsafe(scalar) {\n return new RistrettoPoint(this.ep.multiplyUnsafe(scalar));\n }\n}\nRistrettoPoint.BASE = new RistrettoPoint(ed25519.ExtendedPoint.BASE);\nRistrettoPoint.ZERO = new RistrettoPoint(ed25519.ExtendedPoint.ZERO);\n// https://datatracker.ietf.org/doc/draft-irtf-cfrg-hash-to-curve/14/\n// Appendix B. Hashing to ristretto255\nexport const hash_to_ristretto255 = (msg, options) => {\n const d = options.DST;\n const DST = typeof d === 'string' ? utf8ToBytes(d) : d;\n const uniform_bytes = htf.expand_message_xmd(msg, DST, 64, sha512);\n const P = RistrettoPoint.hashToCurve(uniform_bytes);\n return P;\n};\n","// ----------------------------------------------------------------------------\n\n// PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:\n// https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code\n// EDIT THE CORRESPONDENT .ts FILE INSTEAD\n\n// -------------------------------------------------------------------------------\nimport { Exchange as _Exchange } from '../base/Exchange.js';\nclass Exchange extends _Exchange {\n}\nexport default Exchange;\n","// ----------------------------------------------------------------------------\n\n// PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:\n// https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code\n// EDIT THE CORRESPONDENT .ts FILE INSTEAD\n\n// -------------------------------------------------------------------------------\nimport { Exchange as _Exchange } from '../base/Exchange.js';\nclass Exchange extends _Exchange {\n}\nexport default Exchange;\n","// ----------------------------------------------------------------------------\n\n// PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:\n// https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code\n// EDIT THE CORRESPONDENT .ts FILE INSTEAD\n\nimport { CedeSDKError } from \"./default.js\";\nimport { SdkErrorCodes, SdkErrorMessages } from \"./errorsMetadata.js\";\n/**\n * @description Default error for subAccount\n */\nexport class SubAccount extends CedeSDKError {\n constructor(code = SdkErrorCodes.SUB_ACCOUNT_ERROR, message = SdkErrorMessages.SUB_ACCOUNT_ERROR) {\n super(code, message);\n this.name = \"SubAccountError\";\n }\n}\n/**\n * @description Thrown when the sub account is not found for a given sub account uid\n */\nexport class SubAccountNotFoundError extends SubAccount {\n constructor(uid) {\n super(SdkErrorCodes.SUB_ACCOUNT_NOT_FOUND_ERROR, SdkErrorMessages.SUB_ACCOUNT_NOT_FOUND_ERROR(uid));\n this.name = \"SubAccountNotFoundError\";\n }\n}\n","// ----------------------------------------------------------------------------\n\n// PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:\n// https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code\n// EDIT THE CORRESPONDENT .ts FILE INSTEAD\n\n// -------------------------------------------------------------------------------\nimport { Exchange as _Exchange } from '../base/Exchange.js';\nclass Exchange extends _Exchange {\n}\nexport default Exchange;\n","// ----------------------------------------------------------------------------\n\n// PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:\n// https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code\n// EDIT THE CORRESPONDENT .ts FILE INSTEAD\n\nexport const STABLE_COINS = [\n 'USDT',\n 'USDC',\n 'DAI',\n 'USDE',\n 'FDUSD',\n 'USDB',\n 'BUSD',\n];\n","// ----------------------------------------------------------------------------\n\n// PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:\n// https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code\n// EDIT THE CORRESPONDENT .ts FILE INSTEAD\n\n// -------------------------------------------------------------------------------\nimport { Exchange as _Exchange } from '../base/Exchange.js';\nclass Exchange extends _Exchange {\n}\nexport default Exchange;\n","// ----------------------------------------------------------------------------\n\n// PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:\n// https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code\n// EDIT THE CORRESPONDENT .ts FILE INSTEAD\n\n// -------------------------------------------------------------------------------\nimport { Exchange as _Exchange } from '../base/Exchange.js';\nclass Exchange extends _Exchange {\n}\nexport default Exchange;\n","// ----------------------------------------------------------------------------\n\n// PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:\n// https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code\n// EDIT THE CORRESPONDENT .ts FILE INSTEAD\n\n// -------------------------------------------------------------------------------\nimport { Exchange as _Exchange } from '../base/Exchange.js';\nclass Exchange extends _Exchange {\n}\nexport default Exchange;\n","// ----------------------------------------------------------------------------\n\n// PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:\n// https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code\n// EDIT THE CORRESPONDENT .ts FILE INSTEAD\n\n// -------------------------------------------------------------------------------\nimport { Exchange as _Exchange } from '../base/Exchange.js';\nclass Exchange extends _Exchange {\n}\nexport default Exchange;\n","// ----------------------------------------------------------------------------\n\n// PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:\n// https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code\n// EDIT THE CORRESPONDENT .ts FILE INSTEAD\n\n// -------------------------------------------------------------------------------\nimport { Exchange as _Exchange } from '../base/Exchange.js';\nclass Exchange extends _Exchange {\n}\nexport default Exchange;\n","// ----------------------------------------------------------------------------\n\n// PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:\n// https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code\n// EDIT THE CORRESPONDENT .ts FILE INSTEAD\n\n// ---------------------------------------------------------------------------\nimport Exchange from './abstract/gate.js';\nimport { Precise } from './base/Precise.js';\nimport { TICK_SIZE } from './base/functions/number.js';\nimport { AuthenticationError, CannotProvideOHLCVError, ExchangeAccountSuspendedError, ExchangeError, ExchangeInvalidPermissionsError, ExchangeNotAvailableError, ExchangeRateLimitExceededError, GetDepositAddressError, InsufficientBalanceError, InternalError, InvalidCredentialsError, InvalidParamsError, MarketNotFoundError, MarketTypeNotSupportedError, OrderNotFoundError, PortfolioError, TradeError, UnderWithdrawMinimumError, WhitelistCheckFailedError } from './sdk/errors.js';\nimport { SdkErrorMessages } from './sdk/errorsMetadata.js';\nimport { sha512 } from './static_dependencies/noble-hashes/sha512.js';\n/**\n * @class gate\n * @augments Exchange\n */\nexport default class gate extends Exchange {\n describe() {\n return this.deepExtend(super.describe(), {\n 'id': 'gate',\n 'name': 'Gate.io',\n 'countries': ['KR'],\n 'rateLimit': 50,\n 'version': 'v4',\n 'certified': true,\n 'pro': true,\n 'urls': {\n 'logo': 'https://user-images.githubusercontent.com/1294454/31784029-0313c702-b509-11e7-9ccc-bc0da6a0e435.jpg',\n 'doc': 'https://www.gate.io/docs/developers/apiv4/en/',\n 'www': 'https://gate.io/',\n 'api': {\n 'public': {\n 'wallet': 'https://api.gateio.ws/api/v4',\n 'futures': 'https://api.gateio.ws/api/v4',\n 'margin': 'https://api.gateio.ws/api/v4',\n 'delivery': 'https://api.gateio.ws/api/v4',\n 'spot': 'https://api.gateio.ws/api/v4',\n 'options': 'https://api.gateio.ws/api/v4',\n 'sub_accounts': 'https://api.gateio.ws/api/v4',\n 'earn': 'https://api.gateio.ws/api/v4',\n },\n 'private': {\n 'withdrawals': 'https://api.gateio.ws/api/v4',\n 'wallet': 'https://api.gateio.ws/api/v4',\n 'futures': 'https://api.gateio.ws/api/v4',\n 'margin': 'https://api.gateio.ws/api/v4',\n 'delivery': 'https://api.gateio.ws/api/v4',\n 'spot': 'https://api.gateio.ws/api/v4',\n 'options': 'https://api.gateio.ws/api/v4',\n 'subAccounts': 'https://api.gateio.ws/api/v4',\n 'portfolio': 'https://api.gateio.ws/api/v4',\n 'rebate': 'https://api.gateio.ws/api/v4',\n 'earn': 'https://api.gateio.ws/api/v4',\n 'account': 'https://api.gateio.ws/api/v4',\n },\n },\n 'test': {\n 'public': {\n 'futures': 'https://fx-api-testnet.gateio.ws/api/v4',\n 'delivery': 'https://fx-api-testnet.gateio.ws/api/v4',\n 'options': 'https://fx-api-testnet.gateio.ws/api/v4',\n },\n 'private': {\n 'futures': 'https://fx-api-testnet.gateio.ws/api/v4',\n 'delivery': 'https://fx-api-testnet.gateio.ws/api/v4',\n 'options': 'https://fx-api-testnet.gateio.ws/api/v4',\n },\n },\n 'referral': {\n // https://www.gate.io/signup/2436035- I removed the code for now, because CWS is blocking until we explain our affiliate program to our users\n 'url': 'https://www.gate.io/signup',\n 'discount': 0.2,\n },\n },\n 'has': {\n 'CORS': undefined,\n 'spot': true,\n 'margin': true,\n 'swap': true,\n 'future': true,\n 'option': true,\n 'cancelAllOrders': true,\n 'cancelOrder': true,\n 'createMarketBuyOrderWithCost': true,\n 'createMarketOrder': true,\n 'createMarketOrderWithCost': false,\n 'createMarketSellOrderWithCost': false,\n 'createOrder': true,\n 'createOrders': true,\n 'createTakeProfitOrder': true,\n 'createTriggerOrder': true,\n 'editOrder': true,\n 'fetchBalance': true,\n 'fetchClosedOrders': true,\n 'fetchCurrencies': true,\n 'fetchDepositAddress': true,\n 'fetchDeposits': true,\n 'fetchDepositWithdrawFee': 'emulated',\n 'fetchDepositWithdrawFees': true,\n 'fetchLedger': true,\n 'fetchMarkets': true,\n 'fetchMyTrades': true,\n 'fetchNetworkDepositAddress': true,\n 'fetchOHLCV': true,\n 'fetchOpenOrders': true,\n 'fetchOrder': true,\n 'fetchOrderBook': true,\n 'fetchPosition': true,\n 'fetchPositions': true,\n 'fetchTicker': true,\n 'fetchTickers': true,\n 'fetchTime': true,\n 'fetchTrades': true,\n 'fetchTradingFee': true,\n 'fetchTradingFees': true,\n 'fetchTransactionFees': true,\n 'fetchWithdrawals': true,\n 'transfer': true,\n 'withdraw': true,\n },\n 'api': {\n 'public': {\n // All public endpoints 200r/10s per endpoint\n 'wallet': {\n 'get': {\n 'currency_chains': 1,\n },\n },\n 'spot': {\n 'get': {\n 'currencies': 1,\n 'currencies/{currency}': 1,\n 'currency_pairs': 1,\n 'currency_pairs/{currency_pair}': 1,\n 'tickers': 1,\n 'order_book': 1,\n 'trades': 1,\n 'candlesticks': 1,\n 'time': 1,\n },\n },\n 'margin': {\n 'get': {\n 'currency_pairs': 1,\n 'currency_pairs/{currency_pair}': 1,\n 'funding_book': 1,\n 'cross/currencies': 1,\n 'cross/currencies/{currency}': 1,\n 'uni/currency_pairs': 1,\n 'uni/currency_pairs/{currency_pair}': 1,\n },\n },\n 'flash_swap': {\n 'get': {\n 'currencies': 1,\n },\n },\n 'futures': {\n 'get': {\n '{settle}/contracts': 1,\n '{settle}/contracts/{contract}': 1,\n '{settle}/order_book': 1,\n '{settle}/trades': 1,\n '{settle}/candlesticks': 1,\n '{settle}/premium_index': 1,\n '{settle}/tickers': 1,\n '{settle}/funding_rate': 1,\n '{settle}/insurance': 1,\n '{settle}/contract_stats': 1,\n '{settle}/index_constituents/{index}': 1,\n '{settle}/liq_orders': 1,\n },\n },\n 'delivery': {\n 'get': {\n '{settle}/contracts': 1,\n '{settle}/contracts/{contract}': 1,\n '{settle}/order_book': 1,\n '{settle}/trades': 1,\n '{settle}/candlesticks': 1,\n '{settle}/tickers': 1,\n '{settle}/insurance': 1,\n },\n },\n 'options': {\n 'get': {\n 'underlyings': 1,\n 'expirations': 1,\n 'contracts': 1,\n 'contracts/{contract}': 1,\n 'settlements': 1,\n 'settlements/{contract}': 1,\n 'order_book': 1,\n 'tickers': 1,\n 'underlying/tickers/{underlying}': 1,\n 'candlesticks': 1,\n 'underlying/candlesticks': 1,\n 'trades': 1,\n },\n },\n 'earn': {\n 'get': {\n 'uni/currencies': 1,\n 'uni/currencies/{currency}': 1,\n },\n },\n },\n 'private': {\n // private endpoints default is 150r/10s per endpoint\n 'withdrawals': {\n 'post': {\n 'withdrawals': 20, // 1r/s cost = 20 / 1 = 20\n },\n 'delete': {\n 'withdrawals/{withdrawal_id}': 1,\n },\n },\n 'wallet': {\n 'get': {\n 'deposit_address': 1,\n 'withdrawals': 1,\n 'deposits': 1,\n 'sub_account_transfers': 1,\n 'withdraw_status': 1,\n 'sub_account_balances': 2.5,\n 'sub_account_margin_balances': 2.5,\n 'sub_account_futures_balances': 2.5,\n 'sub_account_cross_margin_balances': 2.5,\n 'saved_address': 1,\n 'fee': 1,\n 'total_balance': 2.5,\n },\n 'post': {\n 'transfers': 2.5,\n 'sub_account_transfers': 2.5,\n 'sub_account_to_sub_account': 2.5,\n },\n },\n 'subAccounts': {\n 'get': {\n 'sub_accounts': 2.5,\n 'sub_accounts/{user_id}': 2.5,\n 'sub_accounts/{user_id}/keys': 2.5,\n 'sub_accounts/{user_id}/keys/{key}': 2.5,\n },\n 'post': {\n 'sub_accounts': 2.5,\n 'sub_accounts/{user_id}/keys': 2.5,\n 'sub_accounts/{user_id}/lock': 2.5,\n 'sub_accounts/{user_id}/unlock': 2.5,\n },\n 'put': {\n 'sub_accounts/{user_id}/keys/{key}': 2.5,\n },\n 'delete': {\n 'sub_accounts/{user_id}/keys/{key}': 2.5,\n },\n },\n 'portfolio': {\n 'get': {\n 'accounts': 20 / 15,\n 'account_mode': 20 / 15,\n 'borrowable': 20 / 15,\n 'transferable': 20 / 15,\n 'loans': 20 / 15,\n 'loan_records': 20 / 15,\n 'interest_records': 20 / 15,\n },\n 'post': {\n 'account_mode': 20 / 15,\n 'loans': 200 / 15, // 15r/10s cost = 20 / 1.5 = 13.33\n },\n },\n 'spot': {\n // default is 200r/10s\n 'get': {\n 'fee': 1,\n 'batch_fee': 1,\n 'accounts': 1,\n 'account_book': 1,\n 'open_orders': 1,\n 'orders': 1,\n 'orders/{order_id}': 1,\n 'my_trades': 1,\n 'price_orders': 1,\n 'price_orders/{order_id}': 1,\n },\n 'post': {\n 'batch_orders': 0.4,\n 'cross_liquidate_orders': 1,\n 'orders': 0.4,\n 'cancel_batch_orders': 20 / 75,\n 'countdown_cancel_all': 20 / 75,\n 'amend_batch_orders': 0.4,\n 'price_orders': 0.4,\n },\n 'delete': {\n 'orders': 20 / 75,\n 'orders/{order_id}': 20 / 75,\n 'price_orders': 20 / 75,\n 'price_orders/{order_id}': 20 / 75,\n },\n 'patch': {\n 'orders/{order_id}': 0.4,\n },\n },\n 'margin': {\n 'get': {\n 'accounts': 20 / 15,\n 'account_book': 20 / 15,\n 'funding_accounts': 20 / 15,\n 'auto_repay': 20 / 15,\n 'transferable': 20 / 15,\n 'loans': 20 / 15,\n 'loans/{loan_id}': 20 / 15,\n 'loans/{loan_id}/repayment': 20 / 15,\n 'loan_records': 20 / 15,\n 'loan_records/{loan_record_id}': 20 / 15,\n 'borrowable': 20 / 15,\n 'cross/accounts': 20 / 15,\n 'cross/account_book': 20 / 15,\n 'cross/loans': 20 / 15,\n 'cross/loans/{loan_id}': 20 / 15,\n 'cross/repayments': 20 / 15,\n 'cross/interest_records': 20 / 15,\n 'cross/transferable': 20 / 15,\n 'cross/estimate_rate': 20 / 15,\n 'cross/borrowable': 20 / 15,\n 'uni/estimate_rate': 20 / 15,\n 'uni/loans': 20 / 15,\n 'uni/loan_records': 20 / 15,\n 'uni/interest_records': 20 / 15,\n 'uni/borrowable': 20 / 15,\n },\n 'post': {\n 'auto_repay': 20 / 15,\n 'loans': 20 / 15,\n 'merged_loans': 20 / 15,\n 'loans/{loan_id}/repayment': 20 / 15,\n 'cross/loans': 20 / 15,\n 'cross/repayments': 20 / 15,\n 'uni/loans': 20 / 15,\n },\n 'patch': {\n 'loans/{loan_id}': 20 / 15,\n 'loan_records/{loan_record_id}': 20 / 15,\n },\n 'delete': {\n 'loans/{loan_id}': 20 / 15,\n },\n },\n 'flash_swap': {\n 'get': {\n 'currencies': 1,\n 'currency_pairs': 1,\n 'orders': 1,\n 'orders/{order_id}': 1,\n },\n 'post': {\n 'orders': 1,\n 'orders/preview': 1,\n },\n },\n 'futures': {\n 'get': {\n '{settle}/accounts': 1,\n '{settle}/account_book': 1,\n '{settle}/positions': 1,\n '{settle}/positions/{contract}': 1,\n '{settle}/dual_comp/positions/{contract}': 1,\n '{settle}/orders': 1,\n '{settle}/orders_timerange': 1,\n '{settle}/orders/{order_id}': 1,\n '{settle}/my_trades': 1,\n '{settle}/my_trades_timerange': 1,\n '{settle}/position_close': 1,\n '{settle}/liquidates': 1,\n '{settle}/auto_deleverages': 1,\n '{settle}/fee': 1,\n '{settle}/risk_limit_tiers': 1,\n '{settle}/price_orders': 1,\n '{settle}/price_orders/{order_id}': 1,\n },\n 'post': {\n '{settle}/positions/{contract}/margin': 1,\n '{settle}/positions/{contract}/leverage': 1,\n '{settle}/positions/{contract}/risk_limit': 1,\n '{settle}/dual_mode': 1,\n '{settle}/dual_comp/positions/{contract}/margin': 1,\n '{settle}/dual_comp/positions/{contract}/leverage': 1,\n '{settle}/dual_comp/positions/{contract}/risk_limit': 1,\n '{settle}/orders': 0.4,\n '{settle}/batch_orders': 0.4,\n '{settle}/countdown_cancel_all': 0.4,\n '{settle}/batch_cancel_orders': 0.4,\n '{settle}/price_orders': 0.4,\n },\n 'put': {\n '{settle}/orders/{order_id}': 1,\n },\n 'delete': {\n '{settle}/orders': 20 / 75,\n '{settle}/orders/{order_id}': 20 / 75,\n '{settle}/price_orders': 20 / 75,\n '{settle}/price_orders/{order_id}': 20 / 75,\n },\n },\n 'delivery': {\n 'get': {\n '{settle}/accounts': 20 / 15,\n '{settle}/account_book': 20 / 15,\n '{settle}/positions': 20 / 15,\n '{settle}/positions/{contract}': 20 / 15,\n '{settle}/orders': 20 / 15,\n '{settle}/orders/{order_id}': 20 / 15,\n '{settle}/my_trades': 20 / 15,\n '{settle}/position_close': 20 / 15,\n '{settle}/liquidates': 20 / 15,\n '{settle}/settlements': 20 / 15,\n '{settle}/price_orders': 20 / 15,\n '{settle}/price_orders/{order_id}': 20 / 15,\n },\n 'post': {\n '{settle}/positions/{contract}/margin': 20 / 15,\n '{settle}/positions/{contract}/leverage': 20 / 15,\n '{settle}/positions/{contract}/risk_limit': 20 / 15,\n '{settle}/orders': 20 / 15,\n '{settle}/price_orders': 20 / 15,\n },\n 'delete': {\n '{settle}/orders': 20 / 15,\n '{settle}/orders/{order_id}': 20 / 15,\n '{settle}/price_orders': 20 / 15,\n '{settle}/price_orders/{order_id}': 20 / 15,\n },\n },\n 'options': {\n 'get': {\n 'my_settlements': 20 / 15,\n 'accounts': 20 / 15,\n 'account_book': 20 / 15,\n 'positions': 20 / 15,\n 'positions/{contract}': 20 / 15,\n 'position_close': 20 / 15,\n 'orders': 20 / 15,\n 'orders/{order_id}': 20 / 15,\n 'my_trades': 20 / 15,\n },\n 'post': {\n 'orders': 20 / 15,\n },\n 'delete': {\n 'orders': 20 / 15,\n 'orders/{order_id}': 20 / 15,\n },\n },\n 'earn': {\n 'get': {\n 'uni/currencies': 20 / 15,\n 'uni/currencies/{currency}': 20 / 15,\n 'uni/lends': 20 / 15,\n 'uni/lend_records': 20 / 15,\n 'uni/interests/{currency}': 20 / 15,\n 'uni/interest_records': 20 / 15,\n 'uni/interest_status/{currency}': 20 / 15,\n },\n 'post': {\n 'uni/lends': 20 / 15,\n },\n 'put': {\n 'uni/interest_reinvest': 20 / 15,\n },\n 'patch': {\n 'uni/lends': 20 / 15,\n },\n },\n 'loan': {\n 'get': {\n 'collateral/orders': 20 / 15,\n 'collateral/orders/{order_id}': 20 / 15,\n 'collateral/repay_records': 20 / 15,\n 'collateral/collaterals': 20 / 15,\n 'collateral/total_amount': 20 / 15,\n 'collateral/ltv': 20 / 15,\n 'collateral/currencies': 20 / 15,\n 'multi_collateral/orders': 20 / 15,\n 'multi_collateral/orders/{order_id}': 20 / 15,\n 'multi_collateral/repay': 20 / 15,\n 'multi_collateral/mortgage': 20 / 15,\n 'multi_collateral/currency_quota': 20 / 15,\n 'multi_collateral/currencies': 20 / 15,\n 'multi_collateral/ltv': 20 / 15,\n 'multi_collateral/fixed_rate': 20 / 15,\n },\n 'post': {\n 'collateral/orders': 20 / 15,\n 'collateral/repay': 20 / 15,\n 'collateral/collaterals': 20 / 15,\n 'multi_collateral/orders': 20 / 15,\n 'multi_collateral/repay': 20 / 15,\n 'multi_collateral/mortgage': 20 / 15,\n },\n },\n 'account': {\n 'get': {\n 'detail': 20 / 15,\n 'stp_groups': 20 / 15,\n 'stp_groups/{stp_id}/users': 20 / 15,\n },\n 'post': {\n 'stp_groups': 20 / 15,\n 'stp_groups/{stp_id}/users': 20 / 15,\n },\n 'delete': {\n 'stp_groups/{stp_id}/users': 20 / 15,\n },\n },\n 'rebate': {\n 'get': {\n 'agency/transaction_history': 20 / 15,\n 'agency/commission_history': 20 / 15,\n },\n },\n },\n },\n 'timeframes': {\n '10s': '10s',\n '1m': '1m',\n '5m': '5m',\n '15m': '15m',\n '30m': '30m',\n '1h': '1h',\n '2h': '2h',\n '4h': '4h',\n '8h': '8h',\n '1d': '1d',\n '7d': '7d',\n '1w': '7d',\n },\n 'requiredCredentials': {\n 'apiKey': true,\n 'secret': true,\n },\n 'headers': {\n 'X-Gate-Channel-Id': 'cede',\n },\n 'options': {\n 'sandboxMode': false,\n 'timeDifference': 0,\n 'createOrder': {\n 'expiration': 86400, // for conditional orders\n },\n 'networks': {\n 'CHZ': 'CHZ2',\n 'GATEIO': 'GTEVM',\n 'KSM': 'KSMSM',\n 'DOT': 'DOTSM',\n 'MANTA': 'MANTAETH',\n },\n 'networksById': {\n 'CHZ2': 'CHZ',\n 'DOTSM': 'DOT',\n 'GTEVM': 'GATEIO',\n 'KSMSM': 'KSM',\n 'MANTAETH': 'MANTA',\n },\n 'timeInForce': {\n 'GTC': 'gtc',\n 'IOC': 'ioc',\n 'PO': 'poc',\n 'POC': 'poc',\n 'FOK': 'fok',\n },\n 'accountsByType': {\n 'funding': 'spot',\n 'spot': 'spot',\n 'margin': 'margin',\n 'cross_margin': 'cross_margin',\n 'cross': 'cross_margin',\n 'isolated': 'margin',\n 'swap': 'futures',\n 'future': 'delivery',\n 'futures': 'futures',\n 'delivery': 'delivery',\n 'option': 'options',\n 'options': 'options',\n },\n 'defaultType': 'spot',\n 'swap': {\n 'fetchMarkets': {\n 'settlementCurrencies': ['usdt', 'btc'],\n },\n },\n 'future': {\n 'fetchMarkets': {\n 'settlementCurrencies': ['usdt'],\n },\n },\n },\n 'precisionMode': TICK_SIZE,\n 'fees': {\n 'trading': {\n 'tierBased': true,\n 'feeSide': 'get',\n 'percentage': true,\n 'maker': this.parseNumber('0.002'),\n 'taker': this.parseNumber('0.002'),\n 'tiers': {\n // volume is in BTC\n 'maker': [\n [this.parseNumber('0'), this.parseNumber('0.002')],\n [this.parseNumber('1.5'), this.parseNumber('0.00185')],\n [this.parseNumber('3'), this.parseNumber('0.00175')],\n [this.parseNumber('6'), this.parseNumber('0.00165')],\n [this.parseNumber('12.5'), this.parseNumber('0.00155')],\n [this.parseNumber('25'), this.parseNumber('0.00145')],\n [this.parseNumber('75'), this.parseNumber('0.00135')],\n [this.parseNumber('200'), this.parseNumber('0.00125')],\n [this.parseNumber('500'), this.parseNumber('0.00115')],\n [this.parseNumber('1250'), this.parseNumber('0.00105')],\n [this.parseNumber('2500'), this.parseNumber('0.00095')],\n [this.parseNumber('3000'), this.parseNumber('0.00085')],\n [this.parseNumber('6000'), this.parseNumber('0.00075')],\n [this.parseNumber('11000'), this.parseNumber('0.00065')],\n [this.parseNumber('20000'), this.parseNumber('0.00055')],\n [this.parseNumber('40000'), this.parseNumber('0.00055')],\n [this.parseNumber('75000'), this.parseNumber('0.00055')],\n ],\n 'taker': [\n [this.parseNumber('0'), this.parseNumber('0.002')],\n [this.parseNumber('1.5'), this.parseNumber('0.00195')],\n [this.parseNumber('3'), this.parseNumber('0.00185')],\n [this.parseNumber('6'), this.parseNumber('0.00175')],\n [this.parseNumber('12.5'), this.parseNumber('0.00165')],\n [this.parseNumber('25'), this.parseNumber('0.00155')],\n [this.parseNumber('75'), this.parseNumber('0.00145')],\n [this.parseNumber('200'), this.parseNumber('0.00135')],\n [this.parseNumber('500'), this.parseNumber('0.00125')],\n [this.parseNumber('1250'), this.parseNumber('0.00115')],\n [this.parseNumber('2500'), this.parseNumber('0.00105')],\n [this.parseNumber('3000'), this.parseNumber('0.00095')],\n [this.parseNumber('6000'), this.parseNumber('0.00085')],\n [this.parseNumber('11000'), this.parseNumber('0.00075')],\n [this.parseNumber('20000'), this.parseNumber('0.00065')],\n [this.parseNumber('40000'), this.parseNumber('0.00065')],\n [this.parseNumber('75000'), this.parseNumber('0.00065')],\n ],\n },\n },\n 'swap': {\n 'tierBased': true,\n 'feeSide': 'base',\n 'percentage': true,\n 'maker': this.parseNumber('0.0'),\n 'taker': this.parseNumber('0.0005'),\n 'tiers': {\n 'maker': [\n [this.parseNumber('0'), this.parseNumber('0.0000')],\n [this.parseNumber('1.5'), this.parseNumber('-0.00005')],\n [this.parseNumber('3'), this.parseNumber('-0.00005')],\n [this.parseNumber('6'), this.parseNumber('-0.00005')],\n [this.parseNumber('12.5'), this.parseNumber('-0.00005')],\n [this.parseNumber('25'), this.parseNumber('-0.00005')],\n [this.parseNumber('75'), this.parseNumber('-0.00005')],\n [this.parseNumber('200'), this.parseNumber('-0.00005')],\n [this.parseNumber('500'), this.parseNumber('-0.00005')],\n [this.parseNumber('1250'), this.parseNumber('-0.00005')],\n [this.parseNumber('2500'), this.parseNumber('-0.00005')],\n [this.parseNumber('3000'), this.parseNumber('-0.00008')],\n [this.parseNumber('6000'), this.parseNumber('-0.01000')],\n [this.parseNumber('11000'), this.parseNumber('-0.01002')],\n [this.parseNumber('20000'), this.parseNumber('-0.01005')],\n [this.parseNumber('40000'), this.parseNumber('-0.02000')],\n [this.parseNumber('75000'), this.parseNumber('-0.02005')],\n ],\n 'taker': [\n [this.parseNumber('0'), this.parseNumber('0.00050')],\n [this.parseNumber('1.5'), this.parseNumber('0.00048')],\n [this.parseNumber('3'), this.parseNumber('0.00046')],\n [this.parseNumber('6'), this.parseNumber('0.00044')],\n [this.parseNumber('12.5'), this.parseNumber('0.00042')],\n [this.parseNumber('25'), this.parseNumber('0.00040')],\n [this.parseNumber('75'), this.parseNumber('0.00038')],\n [this.parseNumber('200'), this.parseNumber('0.00036')],\n [this.parseNumber('500'), this.parseNumber('0.00034')],\n [this.parseNumber('1250'), this.parseNumber('0.00032')],\n [this.parseNumber('2500'), this.parseNumber('0.00030')],\n [this.parseNumber('3000'), this.parseNumber('0.00030')],\n [this.parseNumber('6000'), this.parseNumber('0.00030')],\n [this.parseNumber('11000'), this.parseNumber('0.00030')],\n [this.parseNumber('20000'), this.parseNumber('0.00030')],\n [this.parseNumber('40000'), this.parseNumber('0.00030')],\n [this.parseNumber('75000'), this.parseNumber('0.00030')],\n ],\n },\n },\n },\n // https://www.gate.io/docs/developers/apiv4/en/#label-list\n 'exceptions': {\n 'exact': {\n 'INVALID_PARAM_VALUE': InvalidParamsError,\n 'INVALID_PROTOCOL': InvalidParamsError,\n 'INVALID_ARGUMENT': InvalidParamsError,\n 'INVALID_REQUEST_BODY': InvalidParamsError,\n 'MISSING_REQUIRED_PARAM': InvalidParamsError,\n 'BAD_REQUEST': InvalidParamsError,\n 'INVALID_CONTENT_TYPE': InvalidParamsError,\n 'NOT_ACCEPTABLE': InvalidParamsError,\n 'METHOD_NOT_ALLOWED': InvalidParamsError,\n 'NOT_FOUND': ExchangeError,\n 'INVALID_CREDENTIALS': InvalidCredentialsError,\n 'INVALID_KEY': InvalidCredentialsError,\n 'IP_FORBIDDEN': AuthenticationError,\n 'READ_ONLY': ExchangeInvalidPermissionsError,\n 'INVALID_SIGNATURE': AuthenticationError,\n 'MISSING_REQUIRED_HEADER': AuthenticationError,\n 'REQUEST_EXPIRED': AuthenticationError,\n 'ACCOUNT_LOCKED': ExchangeAccountSuspendedError,\n 'FORBIDDEN': ExchangeInvalidPermissionsError,\n 'SUB_ACCOUNT_NOT_FOUND': ExchangeError,\n 'SUB_ACCOUNT_LOCKED': ExchangeAccountSuspendedError,\n 'MARGIN_BALANCE_EXCEPTION': ExchangeError,\n 'MARGIN_TRANSFER_FAILED': ExchangeError,\n 'TOO_MUCH_FUTURES_AVAILABLE': ExchangeError,\n 'FUTURES_BALANCE_NOT_ENOUGH': InsufficientBalanceError,\n 'ACCOUNT_EXCEPTION': ExchangeError,\n 'SUB_ACCOUNT_TRANSFER_FAILED': ExchangeError,\n 'ADDRESS_NOT_USED': ExchangeError,\n 'TOO_FAST': ExchangeRateLimitExceededError,\n 'WITHDRAWAL_OVER_LIMIT': ExchangeError,\n 'API_WITHDRAW_DISABLED': ExchangeNotAvailableError,\n 'INVALID_WITHDRAW_ID': ExchangeError,\n 'INVALID_WITHDRAW_CANCEL_STATUS': ExchangeError,\n 'INVALID_PRECISION': InvalidParamsError,\n 'INVALID_CURRENCY': InvalidParamsError,\n 'INVALID_CURRENCY_PAIR': MarketNotFoundError,\n 'POC_FILL_IMMEDIATELY': TradeError,\n 'ORDER_NOT_FOUND': OrderNotFoundError,\n 'CLIENT_ID_NOT_FOUND': OrderNotFoundError,\n 'ORDER_CLOSED': TradeError,\n 'ORDER_CANCELLED': TradeError,\n 'QUANTITY_NOT_ENOUGH': InvalidParamsError,\n 'BALANCE_NOT_ENOUGH': InsufficientBalanceError,\n 'MARGIN_NOT_SUPPORTED': TradeError,\n 'MARGIN_BALANCE_NOT_ENOUGH': InsufficientBalanceError,\n 'AMOUNT_TOO_LITTLE': InvalidParamsError,\n 'AMOUNT_TOO_MUCH': InvalidParamsError,\n 'REPEATED_CREATION': TradeError,\n 'LOAN_NOT_FOUND': OrderNotFoundError,\n 'LOAN_RECORD_NOT_FOUND': OrderNotFoundError,\n 'NO_MATCHED_LOAN': ExchangeError,\n 'NOT_MERGEABLE': ExchangeError,\n 'NO_CHANGE': ExchangeError,\n 'REPAY_TOO_MUCH': ExchangeError,\n 'TOO_MANY_CURRENCY_PAIRS': TradeError,\n 'TOO_MANY_ORDERS': TradeError,\n 'TOO_MANY_REQUESTS': ExchangeRateLimitExceededError,\n 'MIXED_ACCOUNT_TYPE': TradeError,\n 'AUTO_BORROW_TOO_MUCH': ExchangeError,\n 'TRADE_RESTRICTED': InsufficientBalanceError,\n 'USER_NOT_FOUND': AuthenticationError,\n 'CONTRACT_NO_COUNTER': ExchangeError,\n 'CONTRACT_NOT_FOUND': ExchangeError,\n 'RISK_LIMIT_EXCEEDED': ExchangeError,\n 'INSUFFICIENT_AVAILABLE': InsufficientBalanceError,\n 'LIQUIDATE_IMMEDIATELY': TradeError,\n 'LEVERAGE_TOO_HIGH': InvalidParamsError,\n 'LEVERAGE_TOO_LOW': InvalidParamsError,\n 'ORDER_NOT_OWNED': ExchangeError,\n 'ORDER_FINISHED': ExchangeError,\n 'POSITION_CROSS_MARGIN': ExchangeError,\n 'POSITION_IN_LIQUIDATION': ExchangeError,\n 'POSITION_IN_CLOSE': ExchangeError,\n 'POSITION_EMPTY': TradeError,\n 'REMOVE_TOO_MUCH': ExchangeError,\n 'RISK_LIMIT_NOT_MULTIPLE': ExchangeError,\n 'RISK_LIMIT_TOO_HIGH': ExchangeError,\n 'RISK_LIMIT_TOO_lOW': ExchangeError,\n 'PRICE_TOO_DEVIATED': TradeError,\n 'SIZE_TOO_LARGE': InvalidParamsError,\n 'SIZE_TOO_SMALL': InvalidParamsError,\n 'PRICE_OVER_LIQUIDATION': InvalidParamsError,\n 'PRICE_OVER_BANKRUPT': InvalidParamsError,\n 'ORDER_POC_IMMEDIATE': InvalidParamsError,\n 'INCREASE_POSITION': TradeError,\n 'CONTRACT_IN_DELISTING': ExchangeError,\n 'INTERNAL': ExchangeNotAvailableError,\n 'SERVER_ERROR': ExchangeNotAvailableError,\n 'TOO_BUSY': ExchangeNotAvailableError,\n 'CROSS_ACCOUNT_NOT_FOUND': ExchangeError,\n 'RISK_LIMIT_TOO_LOW': InvalidParamsError,\n 'AUTO_TRIGGER_PRICE_LESS_LAST': TradeError,\n 'AUTO_TRIGGER_PRICE_GREATE_LAST': TradeError,\n 'POSITION_HOLDING': InvalidParamsError,\n 'USER_LOAN_EXCEEDED': InvalidParamsError, // {\"label\":\"USER_LOAN_EXCEEDED\",\"message\":\"Max loan amount per user would be exceeded\"}\n },\n 'broad': {\n 'only used addresses or verified addresses are allowed for api withdrawal': WhitelistCheckFailedError,\n 'Error: Invalid amount or below minimum amount limit.': UnderWithdrawMinimumError,\n 'Candlestick too long ago. Maximum 10000 points ago are allowed': CannotProvideOHLCVError,\n },\n 'messages': {\n 'INVALID_PARAM_VALUE: Your order size %% is too small': SdkErrorMessages.ORDER_UNDER_MINIMUM,\n },\n },\n });\n }\n convertExpireDate(date) {\n // parse YYMMDD to timestamp\n const year = date.slice(0, 2);\n const month = date.slice(2, 4);\n const day = date.slice(4, 6);\n const reconstructedDate = '20' + year + '-' + month + '-' + day + 'T00:00:00Z';\n return reconstructedDate;\n }\n createExpiredOptionMarket(symbol) {\n // support expired option contracts\n const quote = 'USDT';\n const settle = quote;\n const optionParts = symbol.split('-');\n const symbolBase = symbol.split('/');\n const marketIdBase = symbol.split('_');\n let base = undefined;\n let expiry = this.safeString(optionParts, 1);\n if (symbol.indexOf('/') > -1) {\n base = this.safeString(symbolBase, 0);\n }\n else {\n base = this.safeString(marketIdBase, 0);\n expiry = expiry.slice(2, 8); // convert 20230728 to 230728\n }\n const strike = this.safeString(optionParts, 2);\n const optionType = this.safeString(optionParts, 3);\n const datetime = this.convertExpireDate(expiry);\n const timestamp = this.parse8601(datetime);\n return {\n 'id': base + '_' + quote + '-' + '20' + expiry + '-' + strike + '-' + optionType,\n 'symbol': base + '/' + quote + ':' + settle + '-' + expiry + '-' + strike + '-' + optionType,\n 'base': base,\n 'quote': quote,\n 'settle': settle,\n 'baseId': base,\n 'quoteId': quote,\n 'settleId': settle,\n 'active': false,\n 'type': 'option',\n 'linear': undefined,\n 'inverse': undefined,\n 'spot': false,\n 'swap': false,\n 'future': false,\n 'option': true,\n 'margin': false,\n 'contract': true,\n 'contractSize': this.parseNumber('1'),\n 'expiry': timestamp,\n 'expiryDatetime': datetime,\n 'optionType': (optionType === 'C') ? 'call' : 'put',\n 'strike': this.parseNumber(strike),\n 'precision': {\n 'amount': this.parseNumber('1'),\n 'price': undefined,\n },\n 'limits': {\n 'amount': {\n 'min': undefined,\n 'max': undefined,\n },\n 'price': {\n 'min': undefined,\n 'max': undefined,\n },\n 'cost': {\n 'min': undefined,\n 'max': undefined,\n },\n },\n 'info': undefined,\n };\n }\n safeMarket(marketId = undefined, market = undefined, delimiter = undefined, marketType = undefined) {\n const isOption = (marketId !== undefined) && ((marketId.indexOf('-C') > -1) || (marketId.indexOf('-P') > -1));\n if (isOption && !(marketId in this.markets_by_id)) {\n // handle expired option contracts\n return this.createExpiredOptionMarket(marketId);\n }\n return super.safeMarket(marketId, market, delimiter, marketType);\n }\n isUsingForcedProxy(params = {}, api = []) {\n const authentication = api[0]; // public, private\n if (authentication === 'private') {\n return true;\n }\n return false;\n }\n nonce() {\n const timeDifferenceMs = this.safeString(this.options, 'timeDifference');\n const timeDifferenceS = this.parseNumber(Precise.stringDiv(timeDifferenceMs, '1000'));\n return this.seconds() - timeDifferenceS;\n }\n async fetchStatus(params = {}) {\n /**\n * @method\n * @name gate#fetchStatus\n * @description the latest known information on the availability of the exchange API - gate does not have such an endpoint, so we fetch the server time to see if the exchange is able to respond\n * @see https://www.gate.io/docs/developers/apiv4/#get-server-current-time\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} a [status structure]{@link https://docs.ccxt.com/#/?id=exchange-status-structure}\n */\n const response = await this.publicSpotGetTime(params);\n // {\n // \"server_time\": 1597026383085\n // }\n const serverTime = this.safeInteger(response, 'server_time');\n const status = serverTime !== undefined ? 'ok' : 'maintenance';\n return {\n 'status': status,\n 'updated': serverTime,\n 'eta': undefined,\n 'url': undefined,\n 'info': response,\n };\n }\n async fetchTime(params) {\n const response = await this.publicSpotGetTime(params);\n return this.safeInteger(response, 'server_time');\n }\n async fetchMarkets(params = {}) {\n /**\n * @method\n * @name gate#fetchMarkets\n * @description retrieves data on all markets for gate\n * @see https://www.gate.io/docs/developers/apiv4/en/#list-all-currency-pairs-supported // spot\n * @see https://www.gate.io/docs/developers/apiv4/en/#list-all-supported-currency-pairs-supported-in-margin-trading // margin\n * @see https://www.gate.io/docs/developers/apiv4/en/#list-all-futures-contracts // swap\n * @see https://www.gate.io/docs/developers/apiv4/en/#list-all-futures-contracts-2 // future\n * @see https://www.gate.io/docs/developers/apiv4/en/#list-all-the-contracts-with-specified-underlying-and-expiration-time // option\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object[]} an array of objects representing market data\n */\n const sandboxMode = this.safeValue(this.options, 'sandboxMode', false);\n let rawPromises = [\n this.fetchContractMarkets(params),\n this.fetchOptionMarkets(params),\n ];\n if (!sandboxMode) {\n // gate does not have a sandbox for spot markets\n const mainnetOnly = [this.fetchSpotMarkets(params)];\n rawPromises = this.arrayConcat(rawPromises, mainnetOnly);\n }\n const promises = await Promise.all(rawPromises);\n const spotMarkets = this.safeValue(promises, 0, []);\n const contractMarkets = this.safeValue(promises, 1, []);\n const optionMarkets = this.safeValue(promises, 2, []);\n const markets = this.arrayConcat(spotMarkets, contractMarkets);\n return this.arrayConcat(markets, optionMarkets);\n }\n async fetchSpotMarkets(params = {}) {\n const marginResponse = await this.publicMarginGetCurrencyPairs(params);\n const spotMarketsResponse = await this.publicSpotGetCurrencyPairs(params);\n const marginMarkets = this.indexBy(marginResponse, 'id');\n //\n // Spot\n //\n // [\n // {\n // \"id\": \"QTUM_ETH\",\n // \"base\": \"QTUM\",\n // \"quote\": \"ETH\",\n // \"fee\": \"0.2\",\n // \"min_base_amount\": \"0.01\",\n // \"min_quote_amount\": \"0.001\",\n // \"amount_precision\": 3,\n // \"precision\": 6,\n // \"trade_status\": \"tradable\",\n // \"sell_start\": 0,\n // \"buy_start\": 0\n // }\n // ]\n //\n // Margin\n //\n // [\n // {\n // \"id\": \"ETH_USDT\",\n // \"base\": \"ETH\",\n // \"quote\": \"USDT\",\n // \"leverage\": 3,\n // \"min_base_amount\": \"0.01\",\n // \"min_quote_amount\": \"100\",\n // \"max_quote_amount\": \"1000000\"\n // }\n // ]\n //\n const result = [];\n for (let i = 0; i < spotMarketsResponse.length; i++) {\n const spotMarket = spotMarketsResponse[i];\n const id = this.safeString(spotMarket, 'id');\n const marginMarket = this.safeValue(marginMarkets, id);\n const market = this.deepExtend(marginMarket, spotMarket);\n const [baseId, quoteId] = id.split('_');\n const base = this.safeCurrencyCode(baseId);\n const quote = this.safeCurrencyCode(quoteId);\n const takerPercent = this.safeString(market, 'fee');\n const makerPercent = this.safeString(market, 'maker_fee_rate', takerPercent);\n const amountPrecision = this.parseNumber(this.parsePrecision(this.safeString(market, 'amount_precision')));\n const tradeStatus = this.safeString(market, 'trade_status');\n const leverage = this.safeNumber(market, 'leverage');\n const margin = leverage !== undefined;\n result.push({\n 'id': id,\n 'symbol': base + '/' + quote,\n 'base': base,\n 'quote': quote,\n 'settle': undefined,\n 'baseId': baseId,\n 'quoteId': quoteId,\n 'settleId': undefined,\n 'type': 'spot',\n 'spot': true,\n 'margin': margin,\n 'swap': false,\n 'future': false,\n 'option': false,\n 'active': (tradeStatus === 'tradable'),\n 'contract': false,\n 'linear': undefined,\n 'inverse': undefined,\n // Fee is in %, so divide by 100\n 'taker': this.parseNumber(Precise.stringDiv(takerPercent, '100')),\n 'maker': this.parseNumber(Precise.stringDiv(makerPercent, '100')),\n 'contractSize': undefined,\n 'expiry': undefined,\n 'expiryDatetime': undefined,\n 'strike': undefined,\n 'optionType': undefined,\n 'precision': {\n 'amount': amountPrecision,\n 'price': this.parseNumber(this.parsePrecision(this.safeString(market, 'precision'))),\n },\n 'limits': {\n 'leverage': {\n 'min': this.parseNumber('1'),\n 'max': this.safeNumber(market, 'leverage', 1),\n },\n 'amount': {\n 'min': this.safeNumber(spotMarket, 'min_base_amount', amountPrecision),\n 'max': undefined,\n },\n 'price': {\n 'min': undefined,\n 'max': undefined,\n },\n 'cost': {\n 'min': this.safeNumber(market, 'min_quote_amount'),\n 'max': margin ? this.safeNumber(market, 'max_quote_amount') : undefined,\n },\n },\n 'created': undefined,\n 'info': market,\n });\n }\n return result;\n }\n async fetchContractMarkets(params = {}) {\n const result = [];\n const swapSettlementCurrencies = this.getSettlementCurrencies('swap', 'fetchMarkets');\n const futureSettlementCurrencies = this.getSettlementCurrencies('future', 'fetchMarkets');\n for (let c = 0; c < swapSettlementCurrencies.length; c++) {\n const settleId = swapSettlementCurrencies[c];\n const request = {\n 'settle': settleId,\n };\n const response = await this.publicFuturesGetSettleContracts(this.extend(request, params));\n for (let i = 0; i < response.length; i++) {\n const parsedMarket = this.parseContractMarket(response[i], settleId);\n result.push(parsedMarket);\n }\n }\n for (let c = 0; c < futureSettlementCurrencies.length; c++) {\n const settleId = futureSettlementCurrencies[c];\n const request = {\n 'settle': settleId,\n };\n const response = await this.publicDeliveryGetSettleContracts(this.extend(request, params));\n for (let i = 0; i < response.length; i++) {\n const parsedMarket = this.parseContractMarket(response[i], settleId);\n result.push(parsedMarket);\n }\n }\n return result;\n }\n parseContractMarket(market, settleId) {\n //\n // Perpetual swap\n //\n // {\n // \"name\": \"BTC_USDT\",\n // \"type\": \"direct\",\n // \"quanto_multiplier\": \"0.0001\",\n // \"ref_discount_rate\": \"0\",\n // \"order_price_deviate\": \"0.5\",\n // \"maintenance_rate\": \"0.005\",\n // \"mark_type\": \"index\",\n // \"last_price\": \"38026\",\n // \"mark_price\": \"37985.6\",\n // \"index_price\": \"37954.92\",\n // \"funding_rate_indicative\": \"0.000219\",\n // \"mark_price_round\": \"0.01\",\n // \"funding_offset\": 0,\n // \"in_delisting\": false,\n // \"risk_limit_base\": \"1000000\",\n // \"interest_rate\": \"0.0003\",\n // \"order_price_round\": \"0.1\",\n // \"order_size_min\": 1,\n // \"ref_rebate_rate\": \"0.2\",\n // \"funding_interval\": 28800,\n // \"risk_limit_step\": \"1000000\",\n // \"leverage_min\": \"1\",\n // \"leverage_max\": \"100\",\n // \"risk_limit_max\": \"8000000\",\n // \"maker_fee_rate\": \"-0.00025\",\n // \"taker_fee_rate\": \"0.00075\",\n // \"funding_rate\": \"0.002053\",\n // \"order_size_max\": 1000000,\n // \"funding_next_apply\": 1610035200,\n // \"short_users\": 977,\n // \"config_change_time\": 1609899548,\n // \"trade_size\": 28530850594,\n // \"position_size\": 5223816,\n // \"long_users\": 455,\n // \"funding_impact_value\": \"60000\",\n // \"orders_limit\": 50,\n // \"trade_id\": 10851092,\n // \"orderbook_id\": 2129638396\n // }\n //\n // Delivery Futures\n //\n // {\n // \"name\": \"BTC_USDT_20200814\",\n // \"underlying\": \"BTC_USDT\",\n // \"cycle\": \"WEEKLY\",\n // \"type\": \"direct\",\n // \"quanto_multiplier\": \"0.0001\",\n // \"mark_type\": \"index\",\n // \"last_price\": \"9017\",\n // \"mark_price\": \"9019\",\n // \"index_price\": \"9005.3\",\n // \"basis_rate\": \"0.185095\",\n // \"basis_value\": \"13.7\",\n // \"basis_impact_value\": \"100000\",\n // \"settle_price\": \"0\",\n // \"settle_price_interval\": 60,\n // \"settle_price_duration\": 1800,\n // \"settle_fee_rate\": \"0.0015\",\n // \"expire_time\": 1593763200,\n // \"order_price_round\": \"0.1\",\n // \"mark_price_round\": \"0.1\",\n // \"leverage_min\": \"1\",\n // \"leverage_max\": \"100\",\n // \"maintenance_rate\": \"1000000\",\n // \"risk_limit_base\": \"140.726652109199\",\n // \"risk_limit_step\": \"1000000\",\n // \"risk_limit_max\": \"8000000\",\n // \"maker_fee_rate\": \"-0.00025\",\n // \"taker_fee_rate\": \"0.00075\",\n // \"ref_discount_rate\": \"0\",\n // \"ref_rebate_rate\": \"0.2\",\n // \"order_price_deviate\": \"0.5\",\n // \"order_size_min\": 1,\n // \"order_size_max\": 1000000,\n // \"orders_limit\": 50,\n // \"orderbook_id\": 63,\n // \"trade_id\": 26,\n // \"trade_size\": 435,\n // \"position_size\": 130,\n // \"config_change_time\": 1593158867,\n // \"in_delisting\": false\n // }\n //\n const id = this.safeString(market, 'name');\n const parts = id.split('_');\n const baseId = this.safeString(parts, 0);\n const quoteId = this.safeString(parts, 1);\n const date = this.safeString(parts, 2);\n const base = this.safeCurrencyCode(baseId);\n const quote = this.safeCurrencyCode(quoteId);\n const settle = this.safeCurrencyCode(settleId);\n const expiry = this.safeTimestamp(market, 'expire_time');\n let symbol = '';\n let marketType = 'swap';\n if (date !== undefined) {\n symbol = base + '/' + quote + ':' + settle + '-' + this.yymmdd(expiry, '');\n marketType = 'future';\n }\n else {\n symbol = base + '/' + quote + ':' + settle;\n }\n const priceDeviate = this.safeString(market, 'order_price_deviate');\n const markPrice = this.safeString(market, 'mark_price');\n const minMultiplier = Precise.stringSub('1', priceDeviate);\n const maxMultiplier = Precise.stringAdd('1', priceDeviate);\n const minPrice = Precise.stringMul(minMultiplier, markPrice);\n const maxPrice = Precise.stringMul(maxMultiplier, markPrice);\n const takerPercent = this.safeString(market, 'taker_fee_rate');\n const makerPercent = this.safeString(market, 'maker_fee_rate', takerPercent);\n const isLinear = quote === settle;\n return {\n 'id': id,\n 'symbol': symbol,\n 'base': base,\n 'quote': quote,\n 'settle': settle,\n 'baseId': baseId,\n 'quoteId': quoteId,\n 'settleId': settleId,\n 'type': marketType,\n 'spot': false,\n 'margin': false,\n 'swap': marketType === 'swap',\n 'future': marketType === 'future',\n 'option': marketType === 'option',\n 'active': true,\n 'contract': true,\n 'linear': isLinear,\n 'inverse': !isLinear,\n 'taker': this.parseNumber(Precise.stringDiv(takerPercent, '100')),\n 'maker': this.parseNumber(Precise.stringDiv(makerPercent, '100')),\n 'contractSize': this.safeNumber(market, 'quanto_multiplier'),\n 'expiry': expiry,\n 'expiryDatetime': this.iso8601(expiry),\n 'strike': undefined,\n 'optionType': undefined,\n 'precision': {\n 'amount': this.parseNumber('1'),\n 'price': this.safeNumber(market, 'order_price_round'),\n },\n 'limits': {\n 'leverage': {\n 'min': this.safeNumber(market, 'leverage_min'),\n 'max': this.safeNumber(market, 'leverage_max'),\n },\n 'amount': {\n 'min': this.safeNumber(market, 'order_size_min'),\n 'max': this.safeNumber(market, 'order_size_max'),\n },\n 'price': {\n 'min': this.parseNumber(minPrice),\n 'max': this.parseNumber(maxPrice),\n },\n 'cost': {\n 'min': undefined,\n 'max': undefined,\n },\n },\n 'created': undefined,\n 'info': market,\n };\n }\n async fetchOptionMarkets(params = {}) {\n const result = [];\n const underlyings = await this.fetchOptionUnderlyings();\n for (let i = 0; i < underlyings.length; i++) {\n const underlying = underlyings[i];\n const query = this.extend({}, params);\n query['underlying'] = underlying;\n const response = await this.publicOptionsGetContracts(query);\n //\n // [\n // {\n // \"orders_limit\": \"50\",\n // \"order_size_max\": \"100000\",\n // \"mark_price_round\": \"0.1\",\n // \"order_size_min\": \"1\",\n // \"position_limit\": \"1000000\",\n // \"orderbook_id\": \"575967\",\n // \"order_price_deviate\": \"0.9\",\n // \"is_call\": true, // true means Call false means Put\n // \"last_price\": \"93.9\",\n // \"bid1_size\": \"0\",\n // \"bid1_price\": \"0\",\n // \"taker_fee_rate\": \"0.0004\",\n // \"underlying\": \"BTC_USDT\",\n // \"create_time\": \"1646381188\",\n // \"price_limit_fee_rate\": \"0.1\",\n // \"maker_fee_rate\": \"0.0004\",\n // \"trade_id\": \"727\",\n // \"order_price_round\": \"0.1\",\n // \"settle_fee_rate\": \"0.0001\",\n // \"trade_size\": \"1982\",\n // \"ref_rebate_rate\": \"0\",\n // \"name\": \"BTC_USDT-20220311-44000-C\",\n // \"underlying_price\": \"39194.26\",\n // \"strike_price\": \"44000\",\n // \"multiplier\": \"0.0001\",\n // \"ask1_price\": \"0\",\n // \"ref_discount_rate\": \"0\",\n // \"expiration_time\": \"1646985600\",\n // \"mark_price\": \"12.15\",\n // \"position_size\": \"4\",\n // \"ask1_size\": \"0\",\n // \"tag\": \"WEEK\"\n // }\n // ]\n //\n for (let j = 0; j < response.length; j++) {\n const market = response[j];\n const id = this.safeString(market, 'name');\n const parts = underlying.split('_');\n const baseId = this.safeString(parts, 0);\n const quoteId = this.safeString(parts, 1);\n const base = this.safeCurrencyCode(baseId);\n const quote = this.safeCurrencyCode(quoteId);\n let symbol = base + '/' + quote;\n const expiry = this.safeTimestamp(market, 'expiration_time');\n const strike = this.safeString(market, 'strike_price');\n const isCall = this.safeValue(market, 'is_call');\n const optionLetter = isCall ? 'C' : 'P';\n const optionType = isCall ? 'call' : 'put';\n symbol = symbol + ':' + quote + '-' + this.yymmdd(expiry) + '-' + strike + '-' + optionLetter;\n const priceDeviate = this.safeString(market, 'order_price_deviate');\n const markPrice = this.safeString(market, 'mark_price');\n const minMultiplier = Precise.stringSub('1', priceDeviate);\n const maxMultiplier = Precise.stringAdd('1', priceDeviate);\n const minPrice = Precise.stringMul(minMultiplier, markPrice);\n const maxPrice = Precise.stringMul(maxMultiplier, markPrice);\n const takerPercent = this.safeString(market, 'taker_fee_rate');\n const makerPercent = this.safeString(market, 'maker_fee_rate', takerPercent);\n result.push({\n 'id': id,\n 'symbol': symbol,\n 'base': base,\n 'quote': quote,\n 'settle': quote,\n 'baseId': baseId,\n 'quoteId': quoteId,\n 'settleId': quoteId,\n 'type': 'option',\n 'spot': false,\n 'margin': false,\n 'swap': false,\n 'future': false,\n 'option': true,\n 'active': true,\n 'contract': true,\n 'linear': true,\n 'inverse': false,\n 'taker': this.parseNumber(Precise.stringDiv(takerPercent, '100')),\n 'maker': this.parseNumber(Precise.stringDiv(makerPercent, '100')),\n 'contractSize': this.parseNumber('1'),\n 'expiry': expiry,\n 'expiryDatetime': this.iso8601(expiry),\n 'strike': strike,\n 'optionType': optionType,\n 'precision': {\n 'amount': this.parseNumber('1'),\n 'price': this.safeNumber(market, 'order_price_round'),\n },\n 'limits': {\n 'leverage': {\n 'min': undefined,\n 'max': undefined,\n },\n 'amount': {\n 'min': this.safeNumber(market, 'order_size_min'),\n 'max': this.safeNumber(market, 'order_size_max'),\n },\n 'price': {\n 'min': this.parseNumber(minPrice),\n 'max': this.parseNumber(maxPrice),\n },\n 'cost': {\n 'min': undefined,\n 'max': undefined,\n },\n },\n 'created': this.safeTimestamp(market, 'create_time'),\n 'info': market,\n });\n }\n }\n return result;\n }\n async fetchOptionUnderlyings() {\n const underlyingsResponse = await this.publicOptionsGetUnderlyings();\n //\n // [\n // {\n // \"index_time\": \"1646915796\",\n // \"name\": \"BTC_USDT\",\n // \"index_price\": \"39142.73\"\n // }\n // ]\n //\n const underlyings = [];\n for (let i = 0; i < underlyingsResponse.length; i++) {\n const underlying = underlyingsResponse[i];\n const name = this.safeString(underlying, 'name');\n if (name !== undefined) {\n underlyings.push(name);\n }\n }\n return underlyings;\n }\n prepareRequest(market = undefined, type = undefined, params = {}) {\n /**\n * @ignore\n * @method\n * @name gate#prepareRequest\n * @description Fills request params contract, settle, currency_pair, market and account where applicable\n * @param {object} market CCXT market, required when type is undefined\n * @param {string} type 'spot', 'swap', or 'future', required when market is undefined\n * @param {object} [params] request parameters\n * @returns the api request object, and the new params object with non-needed parameters removed\n */\n // * Do not call for multi spot order methods like cancelAllOrders and fetchOpenOrders. Use multiOrderSpotPrepareRequest instead\n const request = {};\n if (market !== undefined) {\n if (market['contract']) {\n request['contract'] = market['id'];\n if (!market['option']) {\n request['settle'] = market['settleId'];\n }\n }\n else {\n request['currency_pair'] = market['id'];\n }\n }\n else {\n const swap = type === 'swap';\n const future = type === 'future';\n if (swap || future) {\n const defaultSettle = swap ? 'usdt' : 'btc';\n const settle = this.safeStringLower(params, 'settle', defaultSettle);\n params = this.omit(params, 'settle');\n request['settle'] = settle;\n }\n }\n return [request, params];\n }\n spotOrderPrepareRequest(market = undefined, stop = false, params = {}) {\n /**\n * @ignore\n * @method\n * @name gate#multiOrderSpotPrepareRequest\n * @description Fills request params currency_pair, market and account where applicable for spot order methods like fetchOpenOrders, cancelAllOrders\n * @param {object} market CCXT market\n * @param {bool} stop true if for a stop order\n * @param {object} [params] request parameters\n * @returns the api request object, and the new params object with non-needed parameters removed\n */\n const [marginMode, query] = this.getMarginMode(stop, params);\n const request = {};\n if (!stop) {\n if (market === undefined) {\n throw new InvalidParamsError('spotOrderPrepareRequest() requires a market argument for non-stop orders')\n .exchange(this.id);\n }\n request['account'] = marginMode;\n request['currency_pair'] = market['id']; // Should always be set for non-stop\n }\n return [request, query];\n }\n multiOrderSpotPrepareRequest(market = undefined, stop = false, params = {}) {\n /**\n * @ignore\n * @method\n * @name gate#multiOrderSpotPrepareRequest\n * @description Fills request params currency_pair, market and account where applicable for spot order methods like fetchOpenOrders, cancelAllOrders\n * @param {object} market CCXT market\n * @param {bool} stop true if for a stop order\n * @param {object} [params] request parameters\n * @returns the api request object, and the new params object with non-needed parameters removed\n */\n const [marginMode, query] = this.getMarginMode(stop, params);\n const request = {\n 'account': marginMode,\n };\n if (market !== undefined) {\n if (stop) {\n // gate spot and margin stop orders use the term market instead of currency_pair, and normal instead of spot. Neither parameter is used when fetching/cancelling a single order. They are used for creating a single stop order, but createOrder does not call this method\n request['market'] = market['id'];\n }\n else {\n request['currency_pair'] = market['id'];\n }\n }\n return [request, query];\n }\n getMarginMode(stop, params) {\n /**\n * @ignore\n * @method\n * @name gate#getMarginMode\n * @description Gets the margin type for this api call\n * @param {bool} stop True if for a stop order\n * @param {object} [params] Request params\n * @returns The marginMode and the updated request params with marginMode removed, marginMode value is the value that can be read by the \"account\" property specified in gates api docs\n */\n const defaultMarginMode = this.safeStringLower2(this.options, 'defaultMarginMode', 'marginMode', 'spot'); // 'margin' is isolated margin on gate's api\n let marginMode = this.safeStringLower2(params, 'marginMode', 'account', defaultMarginMode);\n params = this.omit(params, ['marginMode', 'account']);\n if (marginMode === 'cross') {\n marginMode = 'cross_margin';\n }\n else if (marginMode === 'isolated') {\n marginMode = 'margin';\n }\n else if (marginMode === '') {\n marginMode = 'spot';\n }\n if (stop) {\n if (marginMode === 'spot') {\n // gate spot stop orders use the term normal instead of spot\n marginMode = 'normal';\n }\n if (marginMode === 'cross_margin') {\n throw new ExchangeError()\n .addMessage('getMarginMode() does not support stop orders for cross margin')\n .exchange(this.id);\n }\n }\n return [marginMode, params];\n }\n getSettlementCurrencies(type, method) {\n const options = this.safeValue(this.options, type, {}); // [ 'BTC', 'USDT' ] unified codes\n const fetchMarketsContractOptions = this.safeValue(options, method, {});\n const defaultSettle = (type === 'swap') ? ['usdt'] : ['btc'];\n return this.safeValue(fetchMarketsContractOptions, 'settlementCurrencies', defaultSettle);\n }\n async fetchCurrencies(params = {}) {\n /**\n * @method\n * @name gate#fetchCurrencies\n * @description fetches all available currencies on an exchange\n * @see https://www.gate.io/docs/developers/apiv4/en/#list-all-currencies-details\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} an associative dictionary of currencies\n */\n // sandbox/testnet only supports future markets\n const apiBackup = this.safeValue(this.urls, 'apiBackup');\n if (apiBackup !== undefined) {\n return undefined;\n }\n const response = await this.publicSpotGetCurrencies(params);\n //\n // {\n // \"currency\": \"BCN\",\n // \"delisted\": false,\n // \"withdraw_disabled\": true,\n // \"withdraw_delayed\": false,\n // \"deposit_disabled\": true,\n // \"trade_disabled\": false\n // }\n //\n // {\n // \"currency\":\"USDT_ETH\",\n // \"delisted\":false,\n // \"withdraw_disabled\":false,\n // \"withdraw_delayed\":false,\n // \"deposit_disabled\":false,\n // \"trade_disabled\":false,\n // \"chain\":\"ETH\"\n // }\n //\n const result = {};\n for (let i = 0; i < response.length; i++) {\n const entry = response[i];\n const currencyId = this.safeString(entry, 'currency');\n const currencyIdLower = this.safeStringLower(entry, 'currency');\n const parts = currencyId.split('_');\n const currency = parts[0];\n const code = this.safeCurrencyCode(currency);\n const networkId = this.safeString(entry, 'chain');\n let networkCode = undefined;\n if (networkId !== undefined) {\n networkCode = this.networkIdToCode(networkId, code);\n }\n const delisted = this.safeValue(entry, 'delisted');\n const withdrawDisabled = this.safeBool(entry, 'withdraw_disabled', false);\n const depositDisabled = this.safeBool(entry, 'deposit_disabled', false);\n const tradeDisabled = this.safeBool(entry, 'trade_disabled', false);\n const isWithdrawalEnabled = !withdrawDisabled;\n const isDepositEnabled = !depositDisabled;\n const tradeEnabled = !tradeDisabled;\n const listed = !delisted;\n const active = listed && tradeEnabled && isWithdrawalEnabled && isDepositEnabled;\n if (this.safeValue(result, code) === undefined) {\n result[code] = {\n 'id': code.toLowerCase(),\n 'code': code,\n 'info': undefined,\n 'name': undefined,\n 'active': active,\n 'deposit': isDepositEnabled,\n 'withdraw': isWithdrawalEnabled,\n 'fee': undefined,\n 'fees': [],\n 'precision': currencyId === 'BTC' ? this.parseNumber('1e-6') : this.parseNumber('1e-4'),\n 'limits': this.limits,\n 'networks': {},\n };\n }\n let isTokenDepositable = this.safeValue(result[code], 'deposit');\n let isTokenWithdrawable = this.safeValue(result[code], 'withdraw');\n isTokenDepositable = isDepositEnabled || isTokenDepositable;\n isTokenWithdrawable = isWithdrawalEnabled || isTokenWithdrawable;\n const networks = this.safeValue(result[code], 'networks', {});\n if (networkCode !== undefined) {\n networks[networkCode] = {\n 'info': entry,\n 'id': networkId,\n 'network': networkCode,\n 'currencyId': currencyId,\n 'lowerCaseCurrencyId': currencyIdLower,\n 'deposit': isDepositEnabled,\n 'withdraw': isWithdrawalEnabled,\n 'active': active,\n 'fee': undefined,\n 'precision': currencyId === 'BTC' ? this.parseNumber('1e-6') : this.parseNumber('1e-4'),\n 'limits': {\n 'amount': {\n 'min': undefined,\n 'max': undefined,\n },\n 'withdraw': {\n 'min': undefined,\n 'max': undefined,\n },\n 'deposit': {\n 'min': undefined,\n 'max': undefined,\n },\n },\n };\n }\n result[code]['networks'] = networks;\n const info = this.safeValue(result[code], 'info', []);\n info.push(entry);\n result[code]['info'] = info;\n result[code]['active'] = isTokenDepositable && isTokenWithdrawable;\n result[code]['deposit'] = isTokenDepositable;\n result[code]['withdraw'] = isTokenWithdrawable;\n }\n return result;\n }\n async fetchNetworkDepositAddress(code, params = {}) {\n await this.loadMarkets();\n const currency = this.currency(code);\n const request = {\n 'currency': currency['id'],\n };\n const response = await this.privateWalletGetDepositAddress(this.extend(request, params));\n const addresses = this.safeValue(response, 'multichain_addresses');\n const currencyId = this.safeString(response, 'currency');\n code = this.safeCurrencyCode(currencyId);\n const result = {};\n for (let i = 0; i < addresses.length; i++) {\n const entry = addresses[i];\n //\n // {\n // \"chain\": \"ETH\",\n // \"address\": \"0x359a697945E79C7e17b634675BD73B33324E9408\",\n // \"payment_id\": \"\",\n // \"payment_name\": \"\",\n // \"obtain_failed\": \"0\"\n // }\n //\n const obtainFailed = this.safeInteger(entry, 'obtain_failed');\n if (obtainFailed) {\n continue;\n }\n const network = this.safeString(entry, 'chain');\n const address = this.safeString(entry, 'address');\n const tag = this.safeString(entry, 'payment_id');\n result[network] = {\n 'info': entry,\n 'code': code,\n 'currency': code,\n 'address': address,\n 'tag': tag,\n };\n }\n return result;\n }\n async fetchDepositAddress(code, params = {}) {\n /**\n * @method\n * @name gate#fetchDepositAddress\n * @description fetch the deposit address for a currency associated with this account\n * @see https://www.gate.io/docs/developers/apiv4/en/#generate-currency-deposit-address\n * @param {string} code unified currency code\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {string} [params.network] unified network code (not used directly by gate.io but used by ccxt to filter the response)\n * @returns {object} an [address structure]{@link https://docs.ccxt.com/#/?id=address-structure}\n */\n await this.loadMarkets();\n const currency = this.currency(code);\n const request = {\n 'currency': currency['id'],\n };\n const response = await this.privateWalletGetDepositAddress(this.extend(request, params));\n //\n // {\n // \"currency\": \"XRP\",\n // \"address\": \"rHcFoo6a9qT5NHiVn1THQRhsEGcxtYCV4d 391331007\",\n // \"multichain_addresses\": [\n // {\n // \"chain\": \"XRP\",\n // \"address\": \"rHcFoo6a9qT5NHiVn1THQRhsEGcxtYCV4d\",\n // \"payment_id\": \"391331007\",\n // \"payment_name\": \"Tag\",\n // \"obtain_failed\": 0\n // }\n // ]\n // }\n //\n const currencyId = this.safeString(response, 'currency');\n code = this.safeCurrencyCode(currencyId);\n let tag = undefined;\n let address = undefined;\n const network = this.safeString(params, 'network');\n if (network !== undefined) {\n const addresses = this.safeValue(response, 'multichain_addresses');\n for (let i = 0; i < addresses.length; i++) {\n const entry = addresses[i];\n const entryNetwork = this.safeString(entry, 'chain');\n if (network === entryNetwork) {\n const obtainFailed = this.safeInteger(entry, 'obtain_failed');\n if (obtainFailed) {\n break;\n }\n address = this.safeString(entry, 'address');\n tag = this.safeString(entry, 'payment_id');\n break;\n }\n }\n }\n else {\n const addressField = this.safeString(response, 'address');\n if (addressField !== undefined) {\n if (addressField.indexOf('New address is being generated for you, please wait') >= 0) {\n throw new GetDepositAddressError(code)\n .overwriteMessage('New address is being generated for you, please wait a few seconds and try again to get the address.')\n .exchange(this.id);\n }\n if (addressField.indexOf(' ') >= 0) {\n const splitted = addressField.split(' ');\n address = splitted[0];\n tag = splitted[1];\n }\n else {\n address = addressField;\n }\n }\n }\n this.checkAddress(address);\n return {\n 'info': response,\n 'code': code,\n 'currency': code,\n 'address': address,\n 'tag': tag,\n 'network': network,\n };\n }\n async fetchTradingFee(symbol, params = {}) {\n /**\n * @method\n * @name gate#fetchTradingFee\n * @description fetch the trading fees for a market\n * @see https://www.gate.io/docs/developers/apiv4/en/#retrieve-personal-trading-fee\n * @param {string} symbol unified market symbol\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} a [fee structure]{@link https://docs.ccxt.com/#/?id=fee-structure}\n */\n await this.loadMarkets();\n const market = this.market(symbol);\n const request = {\n 'currency_pair': market['id'],\n };\n const response = await this.privateWalletGetFee(this.extend(request, params));\n //\n // {\n // \"user_id\": 1486602,\n // \"taker_fee\": \"0.002\",\n // \"maker_fee\": \"0.002\",\n // \"gt_discount\": true,\n // \"gt_taker_fee\": \"0.0015\",\n // \"gt_maker_fee\": \"0.0015\",\n // \"loan_fee\": \"0.18\",\n // \"point_type\": \"0\",\n // \"futures_taker_fee\": \"0.0005\",\n // \"futures_maker_fee\": \"0\"\n // }\n //\n return this.parseTradingFee(response, market);\n }\n async fetchTradingFees(params = {}) {\n /**\n * @method\n * @name gate#fetchTradingFees\n * @description fetch the trading fees for multiple markets\n * @see https://www.gate.io/docs/developers/apiv4/en/#retrieve-personal-trading-fee\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} a dictionary of [fee structures]{@link https://docs.ccxt.com/#/?id=fee-structure} indexed by market symbols\n */\n await this.loadMarkets();\n const response = await this.privateWalletGetFee(params);\n //\n // {\n // \"user_id\": 1486602,\n // \"taker_fee\": \"0.002\",\n // \"maker_fee\": \"0.002\",\n // \"gt_discount\": true,\n // \"gt_taker_fee\": \"0.0015\",\n // \"gt_maker_fee\": \"0.0015\",\n // \"loan_fee\": \"0.18\",\n // \"point_type\": \"0\",\n // \"futures_taker_fee\": \"0.0005\",\n // \"futures_maker_fee\": \"0\"\n // }\n //\n return this.parseTradingFees(response);\n }\n parseTradingFees(response) {\n const result = {};\n for (let i = 0; i < this.symbols.length; i++) {\n const symbol = this.symbols[i];\n const market = this.market(symbol);\n result[symbol] = this.parseTradingFee(response, market);\n }\n return result;\n }\n parseTradingFee(info, market = undefined) {\n //\n // {\n // \"user_id\": 1486602,\n // \"taker_fee\": \"0.002\",\n // \"maker_fee\": \"0.002\",\n // \"gt_discount\": true,\n // \"gt_taker_fee\": \"0.0015\",\n // \"gt_maker_fee\": \"0.0015\",\n // \"loan_fee\": \"0.18\",\n // \"point_type\": \"0\",\n // \"futures_taker_fee\": \"0.0005\",\n // \"futures_maker_fee\": \"0\"\n // }\n //\n const gtDiscount = this.safeValue(info, 'gt_discount');\n const taker = gtDiscount ? 'gt_taker_fee' : 'taker_fee';\n const maker = gtDiscount ? 'gt_maker_fee' : 'maker_fee';\n const contract = this.safeValue(market, 'contract');\n const takerKey = contract ? 'futures_taker_fee' : taker;\n const makerKey = contract ? 'futures_maker_fee' : maker;\n return {\n 'info': info,\n 'symbol': this.safeString(market, 'symbol'),\n 'maker': this.safeNumber(info, makerKey),\n 'taker': this.safeNumber(info, takerKey),\n };\n }\n async fetchTransactionFees(codes = undefined, params = {}) {\n /**\n * @method\n * @name gate#fetchTransactionFees\n * @deprecated\n * @description please use fetchDepositWithdrawFees instead\n * @see https://www.gate.io/docs/developers/apiv4/en/#retrieve-withdrawal-status\n * @param {string[]|undefined} codes list of unified currency codes\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} a list of [fee structures]{@link https://docs.ccxt.com/#/?id=fee-structure}\n */\n await this.loadMarkets();\n const response = await this.privateWalletGetWithdrawStatus(params);\n //\n // {\n // \"currency\": \"MTN\",\n // \"name\": \"Medicalchain\",\n // \"name_cn\": \"Medicalchain\",\n // \"deposit\": \"0\",\n // \"withdraw_percent\": \"0%\",\n // \"withdraw_fix\": \"900\",\n // \"withdraw_day_limit\": \"500000\",\n // \"withdraw_day_limit_remain\": \"500000\",\n // \"withdraw_amount_mini\": \"900.1\",\n // \"withdraw_eachtime_limit\": \"90000000000\",\n // \"withdraw_fix_on_chains\": {\n // \"ETH\": \"900\"\n // }\n // }\n //\n const result = {};\n let withdrawFees = {};\n for (let i = 0; i < response.length; i++) {\n withdrawFees = {};\n const entry = response[i];\n const currencyId = this.safeString(entry, 'currency');\n const code = this.safeCurrencyCode(currencyId);\n if ((codes !== undefined) && !this.inArray(code, codes)) {\n continue;\n }\n const withdrawFixOnChains = this.safeValue(entry, 'withdraw_fix_on_chains');\n if (withdrawFixOnChains === undefined) {\n withdrawFees = this.safeNumber(entry, 'withdraw_fix');\n }\n else {\n const chainKeys = Object.keys(withdrawFixOnChains);\n for (let j = 0; j < chainKeys.length; j++) {\n const chainKey = chainKeys[j];\n withdrawFees[chainKey] = this.parseNumber(withdrawFixOnChains[chainKey]);\n }\n }\n result[code] = {\n 'withdraw': withdrawFees,\n 'deposit': undefined,\n 'info': entry,\n };\n }\n return result;\n }\n async fetchDepositWithdrawFees(codes = undefined, params = {}) {\n /**\n * @method\n * @name gate#fetchDepositWithdrawFees\n * @description fetch deposit and withdraw fees\n * @see https://www.gate.io/docs/developers/apiv4/en/#retrieve-withdrawal-status\n * @param {string[]|undefined} codes list of unified currency codes\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} a list of [fee structures]{@link https://docs.ccxt.com/#/?id=fee-structure}\n */\n await this.loadMarkets();\n const response = await this.privateWalletGetWithdrawStatus(params);\n //\n // [\n // {\n // \"currency\": \"MTN\",\n // \"name\": \"Medicalchain\",\n // \"name_cn\": \"Medicalchain\",\n // \"deposit\": \"0\",\n // \"withdraw_percent\": \"0%\",\n // \"withdraw_fix\": \"900\",\n // \"withdraw_day_limit\": \"500000\",\n // \"withdraw_day_limit_remain\": \"500000\",\n // \"withdraw_amount_mini\": \"900.1\",\n // \"withdraw_eachtime_limit\": \"90000000000\",\n // \"withdraw_fix_on_chains\": {\n // \"ETH\": \"900\"\n // }\n // }\n // ]\n //\n return this.parseDepositWithdrawFees(response, codes, 'currency');\n }\n parseDepositWithdrawFee(fee, currency = undefined) {\n //\n // {\n // \"currency\": \"MTN\",\n // \"name\": \"Medicalchain\",\n // \"name_cn\": \"Medicalchain\",\n // \"deposit\": \"0\",\n // \"withdraw_percent\": \"0%\",\n // \"withdraw_fix\": \"900\",\n // \"withdraw_day_limit\": \"500000\",\n // \"withdraw_day_limit_remain\": \"500000\",\n // \"withdraw_amount_mini\": \"900.1\",\n // \"withdraw_eachtime_limit\": \"90000000000\",\n // \"withdraw_fix_on_chains\": {\n // \"ETH\": \"900\"\n // }\n // }\n //\n const withdrawFixOnChains = this.safeValue(fee, 'withdraw_fix_on_chains');\n const result = {\n 'info': fee,\n 'withdraw': {\n 'fee': this.safeNumber(fee, 'withdraw_fix'),\n 'min': this.safeNumber(fee, 'withdraw_amount_mini'),\n 'percentage': false,\n },\n 'deposit': {\n 'fee': this.safeNumber(fee, 'deposit'),\n 'percentage': false,\n },\n 'networks': {},\n };\n if (withdrawFixOnChains !== undefined) {\n const chainKeys = Object.keys(withdrawFixOnChains);\n for (let i = 0; i < chainKeys.length; i++) {\n const chainKey = chainKeys[i];\n result['networks'][chainKey] = {\n 'withdraw': {\n 'fee': this.parseNumber(withdrawFixOnChains[chainKey]),\n 'percentage': false,\n 'min': this.safeNumber(fee, 'withdraw_amount_mini'),\n },\n 'deposit': {\n 'fee': undefined,\n 'percentage': undefined,\n },\n };\n }\n }\n return result;\n }\n async fetchOrderBook(symbol, limit = undefined, params = {}) {\n /**\n * @method\n * @name gate#fetchOrderBook\n * @description fetches information on open orders with bid (buy) and ask (sell) prices, volumes and other data\n * @see https://www.gate.io/docs/developers/apiv4/en/#retrieve-order-book\n * @see https://www.gate.io/docs/developers/apiv4/en/#futures-order-book\n * @see https://www.gate.io/docs/developers/apiv4/en/#futures-order-book-2\n * @see https://www.gate.io/docs/developers/apiv4/en/#options-order-book\n * @param {string} symbol unified symbol of the market to fetch the order book for\n * @param {int} [limit] the maximum amount of order book entries to return\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} A dictionary of [order book structures]{@link https://docs.ccxt.com/#/?id=order-book-structure} indexed by market symbols\n */\n await this.loadMarkets();\n const market = this.market(symbol);\n //\n // const request = {\n // 'currency_pair': market['id'],\n // 'interval': '0', // depth, 0 means no aggregation is applied, default to 0\n // 'limit': limit, // maximum number of order depth data in asks or bids\n // 'with_id': true, // return order book ID\n // };\n //\n const [request, query] = this.prepareRequest(market, market['type'], params);\n if (limit !== undefined) {\n request['limit'] = limit; // default 10, max 100\n }\n request['with_id'] = true;\n let response = undefined;\n if (market['spot'] || market['margin']) {\n response = await this.publicSpotGetOrderBook(this.extend(request, query));\n }\n else if (market['swap']) {\n response = await this.publicFuturesGetSettleOrderBook(this.extend(request, query));\n }\n else if (market['future']) {\n response = await this.publicDeliveryGetSettleOrderBook(this.extend(request, query));\n }\n else if (market['option']) {\n response = await this.publicOptionsGetOrderBook(this.extend(request, query));\n }\n else {\n throw new MarketTypeNotSupportedError(market['type'])\n .addMessage('fetchOrderBook() not support this market type')\n .exchange(this.id);\n }\n //\n // spot\n //\n // {\n // \"id\": 6358770031\n // \"current\": 1634345973275,\n // \"update\": 1634345973271,\n // \"asks\": [\n // [\"2.2241\",\"12449.827\"],\n // [\"2.2242\",\"200\"],\n // [\"2.2244\",\"826.931\"],\n // [\"2.2248\",\"3876.107\"],\n // [\"2.225\",\"2377.252\"],\n // [\"2.22509\",\"439.484\"],\n // [\"2.2251\",\"1489.313\"],\n // [\"2.2253\",\"714.582\"],\n // [\"2.2254\",\"1349.784\"],\n // [\"2.2256\",\"234.701\"]],\n // \"bids\": [\n // [\"2.2236\",\"32.465\"],\n // [\"2.2232\",\"243.983\"],\n // [\"2.2231\",\"32.207\"],\n // [\"2.223\",\"449.827\"],\n // [\"2.2228\",\"7.918\"],\n // [\"2.2227\",\"12703.482\"],\n // [\"2.2226\",\"143.033\"],\n // [\"2.2225\",\"143.027\"],\n // [\"2.2224\",\"1369.352\"],\n // [\"2.2223\",\"756.063\"]\n // ]\n // }\n //\n // swap, future and option\n //\n // {\n // \"id\": 6358770031\n // \"current\": 1634350208.745,\n // \"asks\": [\n // {\"s\": 24909, \"p\": \"61264.8\"},\n // {\"s\": 81, \"p\": \"61266.6\"},\n // {\"s\": 2000, \"p\": \"61267.6\"},\n // {\"s\": 490, \"p\": \"61270.2\"},\n // {\"s\": 12, \"p\": \"61270.4\"},\n // {\"s\": 11782, \"p\": \"61273.2\"},\n // {\"s\": 14666, \"p\": \"61273.3\"},\n // {\"s\": 22541, \"p\": \"61273.4\"},\n // {\"s\": 33, \"p\": \"61273.6\"},\n // {\"s\": 11980, \"p\": \"61274.5\"}\n // ],\n // \"bids\": [\n // {\"s\": 41844, \"p\": \"61264.7\"},\n // {\"s\": 13783, \"p\": \"61263.3\"},\n // {\"s\": 1143, \"p\": \"61259.8\"},\n // {\"s\": 81, \"p\": \"61258.7\"},\n // {\"s\": 2471, \"p\": \"61257.8\"},\n // {\"s\": 2471, \"p\": \"61257.7\"},\n // {\"s\": 2471, \"p\": \"61256.5\"},\n // {\"s\": 3, \"p\": \"61254.2\"},\n // {\"s\": 114, \"p\": \"61252.4\"},\n // {\"s\": 14372, \"p\": \"61248.6\"}\n // ],\n // \"update\": 1634350208.724\n // }\n //\n let timestamp = this.safeInteger(response, 'current');\n if (!market['spot']) {\n timestamp = timestamp * 1000;\n }\n const priceKey = market['spot'] ? 0 : 'p';\n const amountKey = market['spot'] ? 1 : 's';\n const nonce = this.safeInteger(response, 'id');\n const result = this.parseOrderBook(response, symbol, timestamp, 'bids', 'asks', priceKey, amountKey);\n result['nonce'] = nonce;\n return result;\n }\n async fetchTicker(symbol, params = {}) {\n /**\n * @method\n * @name gate#fetchTicker\n * @description fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market\n * @see https://www.gate.io/docs/developers/apiv4/en/#get-details-of-a-specifc-order\n * @see https://www.gate.io/docs/developers/apiv4/en/#list-futures-tickers\n * @see https://www.gate.io/docs/developers/apiv4/en/#list-futures-tickers-2\n * @see https://www.gate.io/docs/developers/apiv4/en/#list-tickers-of-options-contracts\n * @param {string} symbol unified symbol of the market to fetch the ticker for\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} a [ticker structure]{@link https://docs.ccxt.com/#/?id=ticker-structure}\n */\n await this.loadMarkets();\n const market = this.market(symbol);\n const [request, query] = this.prepareRequest(market, undefined, params);\n let response = undefined;\n if (market['spot'] || market['margin']) {\n response = await this.publicSpotGetTickers(this.extend(request, query));\n }\n else if (market['swap']) {\n response = await this.publicFuturesGetSettleTickers(this.extend(request, query));\n }\n else if (market['future']) {\n response = await this.publicDeliveryGetSettleTickers(this.extend(request, query));\n }\n else if (market['option']) {\n const marketId = market['id'];\n const optionParts = marketId.split('-');\n request['underlying'] = this.safeString(optionParts, 0);\n response = await this.publicOptionsGetTickers(this.extend(request, query));\n }\n else {\n throw new MarketTypeNotSupportedError(market['type']).exchange(this.id);\n }\n let ticker = undefined;\n if (market['option']) {\n for (let i = 0; i < response.length; i++) {\n const entry = response[i];\n if (entry['name'] === market['id']) {\n ticker = entry;\n break;\n }\n }\n }\n else {\n ticker = this.safeValue(response, 0);\n }\n return this.parseTicker(ticker, market);\n }\n parseTicker(ticker, market = undefined) {\n //\n // SPOT\n //\n // {\n // \"currency_pair\": \"KFC_USDT\",\n // \"last\": \"7.255\",\n // \"lowest_ask\": \"7.298\",\n // \"highest_bid\": \"7.218\",\n // \"change_percentage\": \"-1.18\",\n // \"base_volume\": \"1219.053687865\",\n // \"quote_volume\": \"8807.40299875455\",\n // \"high_24h\": \"7.262\",\n // \"low_24h\": \"7.095\"\n // }\n //\n // LINEAR/DELIVERY\n //\n // {\n // \"contract\": \"BTC_USDT\",\n // \"last\": \"6432\",\n // \"low_24h\": \"6278\",\n // \"high_24h\": \"6790\",\n // \"change_percentage\": \"4.43\",\n // \"total_size\": \"32323904\",\n // \"volume_24h\": \"184040233284\",\n // \"volume_24h_btc\": \"28613220\",\n // \"volume_24h_usd\": \"184040233284\",\n // \"volume_24h_base\": \"28613220\",\n // \"volume_24h_quote\": \"184040233284\",\n // \"volume_24h_settle\": \"28613220\",\n // \"mark_price\": \"6534\",\n // \"funding_rate\": \"0.0001\",\n // \"funding_rate_indicative\": \"0.0001\",\n // \"index_price\": \"6531\"\n // }\n //\n // bookTicker\n // {\n // \"t\": 1671363004228,\n // \"u\": 9793320464,\n // \"s\": \"BTC_USDT\",\n // \"b\": \"16716.8\", // best bid price\n // \"B\": \"0.0134\", // best bid size\n // \"a\": \"16716.9\", // best ask price\n // \"A\": \"0.0353\" // best ask size\n // }\n //\n // option\n //\n // {\n // \"vega\": \"0.00002\",\n // \"leverage\": \"12.277188268663\",\n // \"ask_iv\": \"0\",\n // \"delta\": \"-0.99999\",\n // \"last_price\": \"0\",\n // \"theta\": \"-0.00661\",\n // \"bid1_price\": \"1096\",\n // \"mark_iv\": \"0.7799\",\n // \"name\": \"BTC_USDT-20230608-28500-P\",\n // \"bid_iv\": \"0\",\n // \"ask1_price\": \"2935\",\n // \"mark_price\": \"2147.3\",\n // \"position_size\": 0,\n // \"bid1_size\": 12,\n // \"ask1_size\": -14,\n // \"gamma\": \"0\"\n // }\n //\n const marketId = this.safeStringN(ticker, ['currency_pair', 'contract', 'name']);\n const marketType = ('mark_price' in ticker) ? 'contract' : 'spot';\n const symbol = this.safeSymbol(marketId, market, '_', marketType);\n const last = this.safeString2(ticker, 'last', 'last_price');\n const ask = this.safeStringN(ticker, ['lowest_ask', 'a', 'ask1_price']);\n const bid = this.safeStringN(ticker, ['highest_bid', 'b', 'bid1_price']);\n const high = this.safeString(ticker, 'high_24h');\n const low = this.safeString(ticker, 'low_24h');\n const bidVolume = this.safeString2(ticker, 'B', 'bid1_size');\n const askVolume = this.safeString2(ticker, 'A', 'ask1_size');\n const timestamp = this.safeInteger(ticker, 't');\n let baseVolume = this.safeString2(ticker, 'base_volume', 'volume_24h_base');\n if (baseVolume === 'nan') {\n baseVolume = '0';\n }\n let quoteVolume = this.safeString2(ticker, 'quote_volume', 'volume_24h_quote');\n if (quoteVolume === 'nan') {\n quoteVolume = '0';\n }\n const percentage = this.safeString(ticker, 'change_percentage');\n return this.safeTicker({\n 'symbol': symbol,\n 'timestamp': timestamp,\n 'datetime': this.iso8601(timestamp),\n 'high': high,\n 'low': low,\n 'bid': bid,\n 'bidVolume': bidVolume,\n 'ask': ask,\n 'askVolume': askVolume,\n 'vwap': undefined,\n 'open': undefined,\n 'close': last,\n 'last': last,\n 'previousClose': undefined,\n 'change': undefined,\n 'percentage': percentage,\n 'average': undefined,\n 'baseVolume': baseVolume,\n 'quoteVolume': quoteVolume,\n 'info': ticker,\n }, market);\n }\n async fetchTickers(symbols = undefined, params = {}) {\n /**\n * @method\n * @name gate#fetchTickers\n * @description fetches price tickers for multiple markets, statistical information calculated over the past 24 hours for each market\n * @see https://www.gate.io/docs/developers/apiv4/en/#get-details-of-a-specifc-order\n * @see https://www.gate.io/docs/developers/apiv4/en/#list-futures-tickers\n * @see https://www.gate.io/docs/developers/apiv4/en/#list-futures-tickers-2\n * @see https://www.gate.io/docs/developers/apiv4/en/#list-tickers-of-options-contracts\n * @param {string[]|undefined} symbols unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} a dictionary of [ticker structures]{@link https://docs.ccxt.com/#/?id=ticker-structure}\n */\n await this.loadMarkets();\n symbols = this.marketSymbols(symbols);\n const first = this.safeString(symbols, 0);\n let market = undefined;\n if (first !== undefined) {\n market = this.market(first);\n }\n const [type, query] = this.handleMarketTypeAndParams('fetchTickers', market, params);\n const [request, requestParams] = this.prepareRequest(undefined, type, query);\n let response = undefined;\n request['timezone'] = 'utc0'; // default to utc\n if (type === 'spot' || type === 'margin') {\n response = await this.publicSpotGetTickers(this.extend(request, requestParams));\n }\n else if (type === 'swap') {\n response = await this.publicFuturesGetSettleTickers(this.extend(request, requestParams));\n }\n else if (type === 'future') {\n response = await this.publicDeliveryGetSettleTickers(this.extend(request, requestParams));\n }\n else if (type === 'option') {\n this.checkRequiredArgument('fetchTickers', symbols, 'symbols');\n const marketId = market['id'];\n const optionParts = marketId.split('-');\n request['underlying'] = this.safeString(optionParts, 0);\n response = await this.publicOptionsGetTickers(this.extend(request, requestParams));\n }\n else {\n throw new MarketTypeNotSupportedError(type)\n .addMessage('fetchTickers() not support this market type, provide symbols or set params[\"defaultType\"] to one from spot/margin/swap/future/options')\n .exchange(this.id);\n }\n return this.parseTickers(response, symbols);\n }\n parseBalanceHelper(entry) {\n const account = this.account();\n account['used'] = this.safeString2(entry, 'freeze', 'locked');\n account['free'] = this.safeString(entry, 'available');\n account['total'] = this.safeString(entry, 'total');\n if ('borrowed' in entry) {\n account['debt'] = this.safeString(entry, 'borrowed');\n }\n return account;\n }\n async fetchBalance(params = {}) {\n /**\n * @param {object} [params] exchange specific parameters\n * @param {string} [params.type] spot, margin, swap or future, if not provided this.options['defaultType'] is used\n * @param {string} [params.settle] 'btc' or 'usdt' - settle currency for perpetual swap and future - default=\"usdt\" for swap and \"btc\" for future\n * @param {string} [params.marginMode] 'cross' or 'isolated' - marginMode for margin trading if not provided this.options['defaultMarginMode'] is used\n * @param {string} [params.symbol] margin only - unified ccxt symbol\n */\n await this.loadMarkets();\n const symbol = this.safeString(params, 'symbol');\n params = this.omit(params, 'symbol');\n const [type, query] = this.handleMarketTypeAndParams('fetchBalance', undefined, params);\n const [request, requestParams] = this.prepareRequest(undefined, type, query);\n const [marginMode, requestQuery] = this.getMarginMode(false, requestParams);\n if (symbol !== undefined) {\n const market = this.market(symbol);\n request['currency_pair'] = market['id'];\n }\n let response = undefined;\n if (type === 'spot') {\n if (marginMode === 'spot') {\n response = await this.privateSpotGetAccounts(this.extend(request, requestQuery));\n }\n else if (marginMode === 'margin') {\n response = await this.privateMarginGetAccounts(this.extend(request, requestQuery));\n }\n else if (marginMode === 'cross_margin') {\n response = await this.privateMarginGetCrossAccounts(this.extend(request, requestQuery));\n }\n else {\n throw new PortfolioError()\n .addMessage('fetchBalance() not support this marginMode')\n .exchange(this.id);\n }\n }\n else if (type === 'funding') {\n response = await this.privateMarginGetFundingAccounts(this.extend(request, requestQuery));\n }\n else if (type === 'swap') {\n response = await this.privateFuturesGetSettleAccounts(this.extend(request, requestQuery));\n }\n else if (type === 'future') {\n response = await this.privateDeliveryGetSettleAccounts(this.extend(request, requestQuery));\n }\n else if (type === 'option') {\n response = await this.privateOptionsGetAccounts(this.extend(request, requestQuery));\n }\n else {\n throw new MarketTypeNotSupportedError(type).exchange(this.id);\n }\n const contract = ((type === 'swap') || (type === 'future') || (type === 'option'));\n if (contract) {\n response = [response];\n }\n //\n // Spot / margin funding\n //\n // [\n // {\n // \"currency\": \"DBC\",\n // \"available\": \"0\",\n // \"locked\": \"0\"\n // \"lent\": \"0\", // margin funding only\n // \"total_lent\": \"0\" // margin funding only\n // },\n // ...\n // ]\n //\n // Margin\n //\n // [\n // {\n // \"currency_pair\": \"DOGE_USDT\",\n // \"locked\": false,\n // \"risk\": \"9999.99\",\n // \"base\": {\n // \"currency\": \"DOGE\",\n // \"available\": \"0\",\n // \"locked\": \"0\",\n // \"borrowed\": \"0\",\n // \"interest\": \"0\"\n // },\n // \"quote\": {\n // \"currency\": \"USDT\",\n // \"available\": \"0.73402\",\n // \"locked\": \"0\",\n // \"borrowed\": \"0\",\n // \"interest\": \"0\"\n // }\n // },\n // ...\n // ]\n //\n // Cross margin\n //\n // {\n // \"user_id\": 10406147,\n // \"locked\": false,\n // \"balances\": {\n // \"USDT\": {\n // \"available\": \"1\",\n // \"freeze\": \"0\",\n // \"borrowed\": \"0\",\n // \"interest\": \"0\"\n // }\n // },\n // \"total\": \"1\",\n // \"borrowed\": \"0\",\n // \"interest\": \"0\",\n // \"risk\": \"9999.99\"\n // }\n //\n // Perpetual Swap\n //\n // {\n // \"order_margin\": \"0\",\n // \"point\": \"0\",\n // \"bonus\": \"0\",\n // \"history\": {\n // \"dnw\": \"2.1321\",\n // \"pnl\": \"11.5351\",\n // \"refr\": \"0\",\n // \"point_fee\": \"0\",\n // \"fund\": \"-0.32340576684\",\n // \"bonus_dnw\": \"0\",\n // \"point_refr\": \"0\",\n // \"bonus_offset\": \"0\",\n // \"fee\": \"-0.20132775\",\n // \"point_dnw\": \"0\",\n // },\n // \"unrealised_pnl\": \"13.315100000006\",\n // \"total\": \"12.51345151332\",\n // \"available\": \"0\",\n // \"in_dual_mode\": false,\n // \"currency\": \"USDT\",\n // \"position_margin\": \"12.51345151332\",\n // \"user\": \"6333333\",\n // }\n //\n // Delivery Future\n //\n // {\n // \"order_margin\": \"0\",\n // \"point\": \"0\",\n // \"history\": {\n // \"dnw\": \"1\",\n // \"pnl\": \"0\",\n // \"refr\": \"0\",\n // \"point_fee\": \"0\",\n // \"point_dnw\": \"0\",\n // \"settle\": \"0\",\n // \"settle_fee\": \"0\",\n // \"point_refr\": \"0\",\n // \"fee\": \"0\",\n // },\n // \"unrealised_pnl\": \"0\",\n // \"total\": \"1\",\n // \"available\": \"1\",\n // \"currency\": \"USDT\",\n // \"position_margin\": \"0\",\n // \"user\": \"6333333\",\n // }\n //\n // option\n //\n // {\n // \"order_margin\": \"0\",\n // \"bid_order_margin\": \"0\",\n // \"init_margin\": \"0\",\n // \"history\": {\n // \"dnw\": \"32\",\n // \"set\": \"0\",\n // \"point_fee\": \"0\",\n // \"point_dnw\": \"0\",\n // \"prem\": \"0\",\n // \"point_refr\": \"0\",\n // \"insur\": \"0\",\n // \"fee\": \"0\",\n // \"refr\": \"0\"\n // },\n // \"total\": \"32\",\n // \"available\": \"32\",\n // \"liq_triggered\": false,\n // \"maint_margin\": \"0\",\n // \"ask_order_margin\": \"0\",\n // \"point\": \"0\",\n // \"position_notional_limit\": \"2000000\",\n // \"unrealised_pnl\": \"0\",\n // \"equity\": \"32\",\n // \"user\": 5691076,\n // \"currency\": \"USDT\",\n // \"short_enabled\": false,\n // \"orders_limit\": 10\n // }\n //\n const result = {\n 'info': response,\n };\n const isolated = marginMode === 'margin';\n let data = response;\n if ('balances' in data) { // True for cross_margin\n const flatBalances = [];\n const balances = this.safeValue(data, 'balances', []);\n // inject currency and create an artificial balance object\n // so it can follow the existent flow\n const keys = Object.keys(balances);\n for (let i = 0; i < keys.length; i++) {\n const currencyId = keys[i];\n const content = balances[currencyId];\n content['currency'] = currencyId;\n flatBalances.push(content);\n }\n data = flatBalances;\n }\n for (let i = 0; i < data.length; i++) {\n const entry = data[i];\n if (isolated) {\n const marketId = this.safeString(entry, 'currency_pair');\n const symbolInner = this.safeSymbol(marketId, undefined, '_', 'margin');\n const base = this.safeValue(entry, 'base', {});\n const quote = this.safeValue(entry, 'quote', {});\n const baseCode = this.safeCurrencyCode(this.safeString(base, 'currency'));\n const quoteCode = this.safeCurrencyCode(this.safeString(quote, 'currency'));\n const subResult = {};\n subResult[baseCode] = this.parseBalanceHelper(base);\n subResult[quoteCode] = this.parseBalanceHelper(quote);\n result[symbolInner] = this.safeBalance(subResult);\n }\n else {\n const code = this.safeCurrencyCode(this.safeString(entry, 'currency'));\n result[code] = this.parseBalanceHelper(entry);\n }\n }\n const returnResult = isolated ? result : this.safeBalance(result);\n return returnResult;\n }\n async fetchOHLCV(symbol, timeframe = '1m', since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name gateio#fetchOHLCV\n * @description fetches historical candlestick data containing the open, high, low, and close price, and the volume of a market\n * @see https://www.gate.io/docs/developers/apiv4/en/#market-candlesticks // spot\n * @see https://www.gate.io/docs/developers/apiv4/en/#get-futures-candlesticks // swap\n * @see https://www.gate.io/docs/developers/apiv4/en/#market-candlesticks // future\n * @see https://www.gate.io/docs/developers/apiv4/en/#get-options-candlesticks // option\n * @param {string} symbol unified symbol of the market to fetch OHLCV data for\n * @param {string} timeframe the length of time each candle represents\n * @param {int} [since] timestamp in ms of the earliest candle to fetch\n * @param {int} [limit] the maximum amount of candles to fetch, limit is conflicted with since and params[\"until\"], If either since and params[\"until\"] is specified, request will be rejected\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {string} [params.price] \"mark\" or \"index\" for mark price and index price candles\n * @param {int} [params.until] timestamp in ms of the latest candle to fetch\n * @param {boolean} [params.paginate] default false, when true will automatically paginate by calling this endpoint multiple times. See in the docs all the [availble parameters](https://github.com/ccxt/ccxt/wiki/Manual#pagination-params)\n * @returns {int[][]} A list of candles ordered as timestamp, open, high, low, close, volume (units in quote currency)\n */\n await this.loadMarkets();\n const market = this.market(symbol);\n let paginate = false;\n [paginate, params] = this.handleOptionAndParams(params, 'fetchOHLCV', 'paginate');\n if (paginate) {\n return await this.fetchPaginatedCallDeterministic('fetchOHLCV', symbol, since, limit, timeframe, params, 1000);\n }\n if (market['option']) {\n return await this.fetchOptionOHLCV(symbol, timeframe, since, limit, params);\n }\n const price = this.safeString(params, 'price');\n let request = {};\n [request, params] = this.prepareRequest(market, undefined, params);\n request['interval'] = this.safeString(this.timeframes, timeframe, timeframe);\n let maxLimit = 1000;\n limit = (limit === undefined) ? maxLimit : Math.min(limit, maxLimit);\n let until = this.safeInteger(params, 'until');\n if (until !== undefined) {\n until = this.parseToInt(until / 1000);\n params = this.omit(params, 'until');\n }\n if (since !== undefined) {\n const duration = this.parseTimeframe(timeframe);\n request['from'] = this.parseToInt(since / 1000);\n const distance = (limit - 1) * duration;\n const toTimestamp = this.sum(request['from'], distance);\n const currentTimestamp = this.seconds();\n const to = Math.min(toTimestamp, currentTimestamp);\n if (until !== undefined) {\n request['to'] = Math.min(to, until);\n }\n else {\n request['to'] = to;\n }\n }\n else {\n if (until !== undefined) {\n request['to'] = until;\n }\n request['limit'] = limit;\n }\n let response = undefined;\n if (market['contract']) {\n maxLimit = 1999;\n const isMark = (price === 'mark');\n const isIndex = (price === 'index');\n if (isMark || isIndex) {\n request['contract'] = price + '_' + market['id'];\n params = this.omit(params, 'price');\n }\n if (market['future']) {\n response = await this.publicDeliveryGetSettleCandlesticks(this.extend(request, params));\n }\n else if (market['swap']) {\n response = await this.publicFuturesGetSettleCandlesticks(this.extend(request, params));\n }\n }\n else {\n response = await this.publicSpotGetCandlesticks(this.extend(request, params));\n }\n return this.parseOHLCVs(response, market, timeframe, since, limit);\n }\n async fetchOptionOHLCV(symbol, timeframe = '1m', since = undefined, limit = undefined, params = {}) {\n // separated option logic because the from, to and limit parameters weren't functioning\n await this.loadMarkets();\n const market = this.market(symbol);\n let request = {};\n [request, params] = this.prepareRequest(market, undefined, params);\n request['interval'] = this.safeString(this.timeframes, timeframe, timeframe);\n const response = await this.publicOptionsGetCandlesticks(this.extend(request, params));\n return this.parseOHLCVs(response, market, timeframe, since, limit);\n }\n parseOHLCV(ohlcv, market = undefined) {\n //\n // Spot market candles\n //\n // [\n // \"1660957920\", // timestamp\n // \"6227.070147198573\", // quote volume\n // \"0.0000133485\", // close\n // \"0.0000133615\", // high\n // \"0.0000133347\", // low\n // \"0.0000133468\", // open\n // \"466641934.99\" // base volume\n // ]\n //\n //\n // Swap, Future, Option, Mark and Index price candles\n //\n // {\n // \"t\":1632873600, // Unix timestamp in seconds\n // \"o\": \"41025\", // Open price\n // \"h\": \"41882.17\", // Highest price\n // \"c\": \"41776.92\", // Close price\n // \"l\": \"40783.94\" // Lowest price\n // }\n //\n if (Array.isArray(ohlcv)) {\n return [\n this.safeTimestamp(ohlcv, 0),\n this.safeNumber(ohlcv, 5),\n this.safeNumber(ohlcv, 3),\n this.safeNumber(ohlcv, 4),\n this.safeNumber(ohlcv, 2),\n this.safeNumber(ohlcv, 6), // trading volume\n ];\n }\n else {\n // Swap, Future, Option, Mark and Index price candles\n return [\n this.safeTimestamp(ohlcv, 't'),\n this.safeNumber(ohlcv, 'o'),\n this.safeNumber(ohlcv, 'h'),\n this.safeNumber(ohlcv, 'l'),\n this.safeNumber(ohlcv, 'c'),\n this.safeNumber(ohlcv, 'v'), // trading volume, undefined for mark or index price\n ];\n }\n }\n async fetchTrades(symbol, since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name gate#fetchTrades\n * @description get the list of most recent trades for a particular symbol\n * @see https://www.gate.io/docs/developers/apiv4/en/#retrieve-market-trades\n * @see https://www.gate.io/docs/developers/apiv4/en/#futures-trading-history\n * @see https://www.gate.io/docs/developers/apiv4/en/#futures-trading-history-2\n * @see https://www.gate.io/docs/developers/apiv4/en/#options-trade-history\n * @param {string} symbol unified symbol of the market to fetch trades for\n * @param {int} [since] timestamp in ms of the earliest trade to fetch\n * @param {int} [limit] the maximum amount of trades to fetch\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {int} [params.until] timestamp in ms of the latest trade to fetch\n * @param {boolean} [params.paginate] default false, when true will automatically paginate by calling this endpoint multiple times. See in the docs all the [availble parameters](https://github.com/ccxt/ccxt/wiki/Manual#pagination-params)\n * @returns {Trade[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=public-trades}\n */\n await this.loadMarkets();\n let paginate = false;\n [paginate, params] = this.handleOptionAndParams(params, 'fetchTrades', 'paginate');\n if (paginate) {\n return await this.fetchPaginatedCallDynamic('fetchTrades', symbol, since, limit, params);\n }\n const market = this.market(symbol);\n //\n // spot\n //\n // const request = {\n // 'currency_pair': market['id'],\n // 'limit': limit, // maximum number of records to be returned in a single list\n // 'last_id': 'id', // specify list staring point using the id of last record in previous list-query results\n // 'reverse': false, // true to retrieve records where id is smaller than the specified last_id, false to retrieve records where id is larger than the specified last_id\n // };\n //\n // swap, future\n //\n // const request = {\n // 'settle': market['settleId'],\n // 'contract': market['id'],\n // 'limit': limit, // maximum number of records to be returned in a single list\n // 'last_id': 'id', // specify list staring point using the id of last record in previous list-query results\n // 'from': since / 1000), // starting time in seconds, if not specified, to and limit will be used to limit response items\n // 'to': this.seconds (), // end time in seconds, default to current time\n // };\n //\n const [request, query] = this.prepareRequest(market, undefined, params);\n const until = this.safeInteger2(params, 'to', 'until');\n if (until !== undefined) {\n params = this.omit(params, ['until']);\n request['to'] = this.parseToInt(until / 1000);\n }\n if (limit !== undefined) {\n request['limit'] = Math.min(limit, 1000); // default 100, max 1000\n }\n if (since !== undefined && (market['contract'])) {\n request['from'] = this.parseToInt(since / 1000);\n }\n let response = undefined;\n if (market['type'] === 'spot' || market['type'] === 'margin') {\n response = await this.publicSpotGetTrades(this.extend(request, query));\n }\n else if (market['swap']) {\n response = await this.publicFuturesGetSettleTrades(this.extend(request, query));\n }\n else if (market['future']) {\n response = await this.publicDeliveryGetSettleTrades(this.extend(request, query));\n }\n else if (market['type'] === 'option') {\n response = await this.publicOptionsGetTrades(this.extend(request, query));\n }\n else {\n throw new MarketTypeNotSupportedError(market['type']).exchange(this.id);\n }\n //\n // spot\n //\n // [\n // {\n // \"id\": \"1852958144\",\n // \"create_time\": \"1634673259\",\n // \"create_time_ms\": \"1634673259378.105000\",\n // \"currency_pair\": \"ADA_USDT\",\n // \"side\": \"sell\",\n // \"amount\": \"307.078\",\n // \"price\": \"2.104\",\n // }\n // ]\n //\n // perpetual swap\n //\n // [\n // {\n // \"size\": \"2\",\n // \"id\": \"2522911\",\n // \"create_time_ms\": \"1634673380.182\",\n // \"create_time\": \"1634673380.182\",\n // \"contract\": \"ADA_USDT\",\n // \"price\": \"2.10486\",\n // }\n // ]\n //\n // option\n //\n // [\n // {\n // \"size\": -5,\n // \"id\": 25,\n // \"create_time\": 1682378573,\n // \"contract\": \"ETH_USDT-20230526-2000-P\",\n // \"price\": \"209.1\"\n // }\n // ]\n //\n return this.parseTrades(response, market, since, limit);\n }\n async fetchOrderTrades(id, symbol = undefined, since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name gate#fetchOrderTrades\n * @description fetch all the trades made from a single order\n * @see https://www.gate.io/docs/developers/apiv4/en/#list-personal-trading-history\n * @see https://www.gate.io/docs/developers/apiv4/en/#list-personal-trading-history-2\n * @see https://www.gate.io/docs/developers/apiv4/en/#list-personal-trading-history-3\n * @see https://www.gate.io/docs/developers/apiv4/en/#list-personal-trading-history-4\n * @param {string} id order id\n * @param {string} symbol unified market symbol\n * @param {int} [since] the earliest time in ms to fetch trades for\n * @param {int} [limit] the maximum number of trades to retrieve\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=trade-structure}\n */\n if (symbol === undefined) {\n throw new InvalidParamsError('fetchOrderTrades() requires a symbol argument')\n .exchange(this.id);\n }\n await this.loadMarkets();\n //\n // [\n // {\n // \"id\":\"3711449544\",\n // \"create_time\":\"1655486040\",\n // \"create_time_ms\":\"1655486040177.599900\",\n // \"currency_pair\":\"SHIB_USDT\",\n // \"side\":\"buy\",\n // \"role\":\"taker\",\n // \"amount\":\"1360039\",\n // \"price\":\"0.0000081084\",\n // \"order_id\":\"169717399644\",\n // \"fee\":\"2720.078\",\n // \"fee_currency\":\"SHIB\",\n // \"point_fee\":\"0\",\n // \"gt_fee\":\"0\"\n // }\n // ]\n //\n const response = await this.fetchMyTrades(symbol, since, limit, { 'order_id': id });\n return response;\n }\n async fetchMyTrades(symbol = undefined, since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name gate#fetchMyTrades\n * @description Fetch personal trading history\n * @see https://www.gate.io/docs/developers/apiv4/en/#list-personal-trading-history\n * @see https://www.gate.io/docs/developers/apiv4/en/#list-personal-trading-history-2\n * @see https://www.gate.io/docs/developers/apiv4/en/#list-personal-trading-history-3\n * @see https://www.gate.io/docs/developers/apiv4/en/#list-personal-trading-history-4\n * @param {string} symbol unified market symbol\n * @param {int} [since] the earliest time in ms to fetch trades for\n * @param {int} [limit] the maximum number of trades structures to retrieve\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {string} [params.marginMode] 'cross' or 'isolated' - marginMode for margin trading if not provided this.options['defaultMarginMode'] is used\n * @param {string} [params.type] 'spot', 'swap', or 'future', if not provided this.options['defaultMarginMode'] is used\n * @param {int} [params.until] The latest timestamp, in ms, that fetched trades were made\n * @param {int} [params.page] *spot only* Page number\n * @param {string} [params.order_id] *spot only* Filter trades with specified order ID. symbol is also required if this field is present\n * @param {string} [params.order] *contract only* Futures order ID, return related data only if specified\n * @param {int} [params.offset] *contract only* list offset, starting from 0\n * @param {string} [params.last_id] *contract only* specify list staring point using the id of last record in previous list-query results\n * @param {int} [params.count_total] *contract only* whether to return total number matched, default to 0(no return)\n * @param {boolean} [params.paginate] default false, when true will automatically paginate by calling this endpoint multiple times. See in the docs all the [availble parameters](https://github.com/ccxt/ccxt/wiki/Manual#pagination-params)\n * @returns {Trade[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=trade-structure}\n */\n await this.loadMarkets();\n let paginate = false;\n [paginate, params] = this.handleOptionAndParams(params, 'fetchMyTrades', 'paginate');\n if (paginate) {\n return await this.fetchPaginatedCallDynamic('fetchMyTrades', symbol, since, limit, params);\n }\n let type = undefined;\n let marginMode = undefined;\n let request = {};\n const market = (symbol !== undefined) ? this.market(symbol) : undefined;\n const until = this.safeInteger2(params, 'until', 'till');\n params = this.omit(params, ['until', 'till']);\n [type, params] = this.handleMarketTypeAndParams('fetchMyTrades', market, params);\n const contract = (type === 'swap') || (type === 'future') || (type === 'option');\n if (contract) {\n [request, params] = this.prepareRequest(market, type, params);\n if (type === 'option') {\n params = this.omit(params, 'order_id');\n }\n }\n else {\n if (market !== undefined) {\n request['currency_pair'] = market['id']; // Should always be set for non-stop\n }\n [marginMode, params] = this.getMarginMode(false, params);\n request['account'] = marginMode;\n }\n if (limit !== undefined) {\n request['limit'] = limit; // default 100, max 1000\n }\n if (since !== undefined) {\n request['from'] = this.parseToInt(since / 1000);\n }\n if (until !== undefined) {\n request['to'] = this.parseToInt(until / 1000);\n }\n let response = undefined;\n if (type === 'spot' || type === 'margin') {\n response = await this.privateSpotGetMyTrades(this.extend(request, params));\n }\n else if (type === 'swap') {\n response = await this.privateFuturesGetSettleMyTradesTimerange(this.extend(request, params));\n }\n else if (type === 'future') {\n response = await this.privateDeliveryGetSettleMyTrades(this.extend(request, params));\n }\n else if (type === 'option') {\n response = await this.privateOptionsGetMyTrades(this.extend(request, params));\n }\n else {\n throw new MarketTypeNotSupportedError(type).exchange(this.id);\n }\n //\n // spot\n //\n // [\n // {\n // \"id\": \"2876130500\",\n // \"create_time\": \"1645464610\",\n // \"create_time_ms\": \"1645464610777.399200\",\n // \"currency_pair\": \"DOGE_USDT\",\n // \"side\": \"sell\",\n // \"role\": \"taker\",\n // \"amount\": \"10.97\",\n // \"price\": \"0.137384\",\n // \"order_id\": \"125924049993\",\n // \"fee\": \"0.00301420496\",\n // \"fee_currency\": \"USDT\",\n // \"point_fee\": \"0\",\n // \"gt_fee\": \"0\"\n // }\n // ]\n //\n // perpetual swap\n //\n // [\n // {\n // \"size\": -5,\n // \"order_id\": \"130264979823\",\n // \"id\": 26884791,\n // \"role\": \"taker\",\n // \"create_time\": 1645465199.5472,\n // \"contract\": \"DOGE_USDT\",\n // \"price\": \"0.136888\"\n // }\n // ]\n //\n // future\n //\n // [\n // {\n // \"id\": 121234231,\n // \"create_time\": 1514764800.123,\n // \"contract\": \"BTC_USDT\",\n // \"order_id\": \"21893289839\",\n // \"size\": 100,\n // \"price\": \"100.123\",\n // \"role\": \"taker\"\n // }\n // ]\n //\n // option\n //\n // [\n // {\n // \"underlying_price\": \"26817.84\",\n // \"size\": -1,\n // \"contract\": \"BTC_USDT-20230602-26500-C\",\n // \"id\": 16,\n // \"role\": \"taker\",\n // \"create_time\": 1685594770,\n // \"order_id\": 2611026125,\n // \"price\": \"333\"\n // }\n // ]\n //\n return this.parseTrades(response, market, since, limit);\n }\n parseTrade(trade, market = undefined) {\n //\n // public\n //\n // {\n // \"id\": \"1334253759\",\n // \"create_time\": \"1626342738\",\n // \"create_time_ms\": \"1626342738331.497000\",\n // \"currency_pair\": \"BTC_USDT\",\n // \"side\": \"sell\",\n // \"amount\": \"0.0022\",\n // \"price\": \"32452.16\"\n // }\n //\n // public ws\n //\n // {\n // \"id\": 221994511,\n // \"time\": 1580311438.618647,\n // \"price\": \"9309\",\n // \"amount\": \"0.0019\",\n // \"type\": \"sell\"\n // }\n //\n // spot rest\n //\n // {\n // \"id\": \"2876130500\",\n // \"create_time\": \"1645464610\",\n // \"create_time_ms\": \"1645464610777.399200\",\n // \"currency_pair\": \"DOGE_USDT\",\n // \"side\": \"sell\",\n // \"role\": \"taker\",\n // \"amount\": \"10.97\",\n // \"price\": \"0.137384\",\n // \"order_id\": \"125924049993\",\n // \"fee\": \"0.00301420496\",\n // \"fee_currency\": \"USDT\",\n // \"point_fee\": \"1.1\",\n // \"gt_fee\":\"2.2\"\n // }\n //\n // perpetual swap rest\n //\n // {\n // \"size\": -5,\n // \"order_id\": \"130264979823\",\n // \"id\": 26884791,\n // \"role\": \"taker\",\n // \"create_time\": 1645465199.5472,\n // \"contract\": \"DOGE_USDT\",\n // \"price\": \"0.136888\"\n // }\n //\n // future rest\n //\n // {\n // \"id\": 121234231,\n // \"create_time\": 1514764800.123,\n // \"contract\": \"BTC_USDT\",\n // \"order_id\": \"21893289839\",\n // \"size\": 100,\n // \"price\": \"100.123\",\n // \"role\": \"taker\"\n // }\n //\n // fetchTrades: option\n //\n // {\n // \"size\": -5,\n // \"id\": 25,\n // \"create_time\": 1682378573,\n // \"contract\": \"ETH_USDT-20230526-2000-P\",\n // \"price\": \"209.1\"\n // }\n //\n // fetchMyTrades: option\n //\n // {\n // \"underlying_price\": \"26817.84\",\n // \"size\": -1,\n // \"contract\": \"BTC_USDT-20230602-26500-C\",\n // \"id\": 16,\n // \"role\": \"taker\",\n // \"create_time\": 1685594770,\n // \"order_id\": 2611026125,\n // \"price\": \"333\"\n // }\n //\n const id = this.safeString2(trade, 'id', 'trade_id');\n let timestamp = this.safeTimestamp2(trade, 'time', 'create_time');\n timestamp = this.safeInteger(trade, 'create_time_ms', timestamp);\n const marketId = this.safeString2(trade, 'currency_pair', 'contract');\n const marketType = ('contract' in trade) ? 'contract' : 'spot';\n market = this.safeMarket(marketId, market, '_', marketType);\n let amountString = this.safeString2(trade, 'amount', 'size');\n const priceString = this.safeString(trade, 'price');\n const contractSide = Precise.stringLt(amountString, '0') ? 'sell' : 'buy';\n amountString = Precise.stringAbs(amountString);\n const side = this.safeString2(trade, 'side', 'type', contractSide);\n const orderId = this.safeString(trade, 'order_id');\n const feeAmount = this.safeString(trade, 'fee');\n const gtFee = this.safeString(trade, 'gt_fee');\n const pointFee = this.safeString(trade, 'point_fee');\n const fees = [];\n if (feeAmount !== undefined) {\n const feeCurrencyId = this.safeString(trade, 'fee_currency');\n let feeCurrencyCode = this.safeCurrencyCode(feeCurrencyId);\n if (feeCurrencyCode === undefined) {\n feeCurrencyCode = this.safeString(market, 'settle');\n }\n fees.push({\n 'cost': feeAmount,\n 'currency': feeCurrencyCode,\n });\n }\n if (gtFee !== undefined) {\n fees.push({\n 'cost': gtFee,\n 'currency': 'GT',\n });\n }\n if (pointFee !== undefined) {\n fees.push({\n 'cost': pointFee,\n 'currency': 'GatePoint',\n });\n }\n const takerOrMaker = this.safeString(trade, 'role');\n return this.safeTrade({\n 'info': trade,\n 'id': id,\n 'timestamp': timestamp,\n 'datetime': this.iso8601(timestamp),\n 'symbol': market['symbol'],\n 'order': orderId,\n 'type': undefined,\n 'side': side,\n 'takerOrMaker': takerOrMaker,\n 'price': priceString,\n 'amount': amountString,\n 'cost': undefined,\n 'fee': fees.length ? fees[0] : undefined,\n 'fees': fees,\n }, market);\n }\n async fetchDeposits(code = undefined, since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name gate#fetchDeposits\n * @description fetch all deposits made to an account\n * @see https://www.gate.io/docs/developers/apiv4/en/#retrieve-deposit-records\n * @param {string} code unified currency code\n * @param {int} [since] the earliest time in ms to fetch deposits for\n * @param {int} [limit] the maximum number of deposits structures to retrieve\n * @param {int} [params.until] end time in ms\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {boolean} [params.paginate] default false, when true will automatically paginate by calling this endpoint multiple times. See in the docs all the [availble parameters](https://github.com/ccxt/ccxt/wiki/Manual#pagination-params)\n * @returns {object[]} a list of [transaction structures]{@link https://docs.ccxt.com/#/?id=transaction-structure}\n */\n await this.loadMarkets();\n let paginate = false;\n [paginate, params] = this.handleOptionAndParams(params, 'fetchDeposits', 'paginate');\n if (paginate) {\n return await this.fetchPaginatedCallDynamic('fetchDeposits', code, since, limit, params);\n }\n let request = {};\n let currency = undefined;\n if (code !== undefined) {\n currency = this.currency(code);\n request['currency'] = currency['id'];\n }\n if (limit !== undefined) {\n request['limit'] = limit;\n }\n if (since !== undefined) {\n const start = this.parseToInt(since / 1000);\n request['from'] = start;\n request['to'] = this.sum(start, 30 * 24 * 60 * 60);\n }\n [request, params] = this.handleUntilOption('to', request, params);\n const response = await this.privateWalletGetDeposits(this.extend(request, params));\n return this.parseTransactions(response, currency);\n }\n async fetchWithdrawals(code = undefined, since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name gate#fetchWithdrawals\n * @description fetch all withdrawals made from an account\n * @see https://www.gate.io/docs/developers/apiv4/en/#retrieve-withdrawal-records\n * @param {string} code unified currency code\n * @param {int} [since] the earliest time in ms to fetch withdrawals for\n * @param {int} [limit] the maximum number of withdrawals structures to retrieve\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {int} [params.until] end time in ms\n * @param {boolean} [params.paginate] default false, when true will automatically paginate by calling this endpoint multiple times. See in the docs all the [availble parameters](https://github.com/ccxt/ccxt/wiki/Manual#pagination-params)\n * @returns {object[]} a list of [transaction structures]{@link https://docs.ccxt.com/#/?id=transaction-structure}\n */\n await this.loadMarkets();\n let paginate = false;\n [paginate, params] = this.handleOptionAndParams(params, 'fetchWithdrawals', 'paginate');\n if (paginate) {\n return await this.fetchPaginatedCallDynamic('fetchWithdrawals', code, since, limit, params);\n }\n let request = {};\n let currency = undefined;\n if (code !== undefined) {\n currency = this.currency(code);\n request['currency'] = currency['id'];\n }\n if (limit !== undefined) {\n request['limit'] = limit;\n }\n if (since !== undefined) {\n const start = this.parseToInt(since / 1000);\n request['from'] = start;\n request['to'] = this.sum(start, 30 * 24 * 60 * 60);\n }\n [request, params] = this.handleUntilOption('to', request, params);\n const response = await this.privateWalletGetWithdrawals(this.extend(request, params));\n return this.parseTransactions(response, currency);\n }\n async withdraw(code, amount, address, tag = undefined, params = {}) {\n /**\n * @method\n * @name gate#withdraw\n * @description make a withdrawal\n * @see https://www.gate.io/docs/developers/apiv4/en/#withdraw\n * @param {string} code unified currency code\n * @param {float} amount the amount to withdraw\n * @param {string} address the address to withdraw to\n * @param {string} tag\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} a [transaction structure]{@link https://docs.ccxt.com/#/?id=transaction-structure}\n */\n [tag, params] = this.handleWithdrawTagAndParams(tag, params);\n this.checkAddress(address);\n await this.loadMarkets();\n const currency = this.currency(code);\n const request = {\n 'currency': currency['id'],\n 'address': address,\n };\n if (tag !== undefined) {\n request['memo'] = tag;\n }\n const networks = this.safeValue(this.options, 'networks', {});\n let network = this.safeStringUpper(params, 'network'); // this line allows the user to specify either ERC20 or ETH\n network = this.safeStringLower(networks, network, network); // handle ETH>ERC20 alias\n if (network !== undefined) {\n request['chain'] = network;\n params = this.omit(params, 'network');\n }\n else {\n request['chain'] = currency['id'];\n }\n const precisionAmount = this.currencyToPrecision(code, amount, network);\n request['amount'] = precisionAmount;\n const response = await this.privateWithdrawalsPostWithdrawals(this.extend(request, params));\n //\n // {\n // \"id\": \"w13389675\",\n // \"currency\": \"USDT\",\n // \"amount\": \"50\",\n // \"address\": \"TUu2rLFrmzUodiWfYki7QCNtv1akL682p1\",\n // \"memo\": null\n // }\n //\n return this.parseTransaction(response, currency);\n }\n parseTransactionStatus(status) {\n const statuses = {\n 'PEND': 'pending',\n 'REQUEST': 'pending',\n 'DMOVE': 'pending',\n 'MANUAL': 'pending',\n 'VERIFY': 'pending',\n 'PROCES': 'pending',\n 'EXTPEND': 'pending',\n 'SPLITPEND': 'pending',\n 'CANCEL': 'canceled',\n 'FAIL': 'failed',\n 'INVALID': 'failed',\n 'DONE': 'ok',\n 'BCODE': 'ok', // GateCode withdrawal\n };\n return this.safeString(statuses, status, status);\n }\n parseTransactionType(type) {\n const types = {\n 'd': 'deposit',\n 'w': 'withdrawal',\n };\n return this.safeString(types, type, type);\n }\n parseTransaction(transaction, currency = undefined) {\n //\n // deposits\n //\n // {\n // \"id\": \"d33361395\",\n // \"currency\": \"USDT_TRX\",\n // \"address\": \"TErdnxenuLtXfnMafLbfappYdHtnXQ5U4z\",\n // \"amount\": \"100\",\n // \"txid\": \"ae9374de34e558562fe18cbb1bf9ab4d9eb8aa7669d65541c9fa2a532c1474a0\",\n // \"timestamp\": \"1626345819\",\n // \"status\": \"DONE\",\n // \"memo\": \"\"\n // }\n //\n // withdraw\n //\n // {\n // \"id\": \"w13389675\",\n // \"currency\": \"USDT\",\n // \"amount\": \"50\",\n // \"address\": \"TUu2rLFrmzUodiWfYki7QCNtv1akL682p1\",\n // \"memo\": null\n // }\n //\n // {\n // \"currency\":\"usdt\",\n // \"address\":\"0x01b0A9b7b4CdE774AF0f3E47CB4f1c2CCdBa0806\",\n // \"amount\":\"1880\",\n // \"chain\":\"eth\"\n // }\n //\n const id = this.safeString(transaction, 'id');\n let type = undefined;\n let amountString = this.safeString(transaction, 'amount');\n if (id !== undefined) {\n if (id[0] === 'b') {\n // GateCode handling\n type = Precise.stringGt(amountString, '0') ? 'deposit' : 'withdrawal';\n amountString = Precise.stringAbs(amountString);\n }\n else {\n type = this.parseTransactionType(id[0]);\n }\n }\n const feeCostString = this.safeString(transaction, 'fee');\n if (type === 'withdrawal') {\n amountString = Precise.stringSub(amountString, feeCostString);\n }\n const networkId = this.safeStringUpper(transaction, 'chain');\n const currencyId = this.safeString(transaction, 'currency');\n const code = this.safeCurrencyCode(currencyId);\n const txid = this.safeString(transaction, 'txid');\n const rawStatus = this.safeString(transaction, 'status');\n const status = this.parseTransactionStatus(rawStatus);\n const address = this.safeString(transaction, 'address');\n const tag = this.safeString(transaction, 'memo');\n const timestamp = this.safeTimestamp(transaction, 'timestamp');\n return {\n 'info': transaction,\n 'id': id,\n 'txid': txid,\n 'currency': code,\n 'amount': this.parseNumber(amountString),\n 'network': this.networkIdToCode(networkId),\n 'address': address,\n 'addressTo': undefined,\n 'addressFrom': undefined,\n 'tag': tag,\n 'tagTo': undefined,\n 'tagFrom': undefined,\n 'status': status,\n 'type': type,\n 'timestamp': timestamp,\n 'datetime': this.iso8601(timestamp),\n 'updated': undefined,\n 'internal': undefined,\n 'comment': undefined,\n 'fee': {\n 'currency': code,\n 'cost': this.parseNumber(feeCostString),\n },\n };\n }\n async createOrder(symbol, type, side, amount, price = undefined, params = {}) {\n /**\n * @method\n * @name gate#createOrder\n * @description Create an order on the exchange\n * @see https://www.gate.io/docs/developers/apiv4/en/#create-an-order\n * @see https://www.gate.io/docs/developers/apiv4/en/#create-a-price-triggered-order\n * @see https://www.gate.io/docs/developers/apiv4/en/#create-a-futures-order\n * @see https://www.gate.io/docs/developers/apiv4/en/#create-a-price-triggered-order-2\n * @see https://www.gate.io/docs/developers/apiv4/en/#create-a-futures-order-2\n * @see https://www.gate.io/docs/developers/apiv4/en/#create-a-price-triggered-order-3\n * @see https://www.gate.io/docs/developers/apiv4/en/#create-an-options-order\n * @param {string} symbol Unified CCXT market symbol\n * @param {string} type 'limit' or 'market' *\"market\" is contract only*\n * @param {string} side 'buy' or 'sell'\n * @param {float} amount the amount of currency to trade\n * @param {float} [price] *ignored in \"market\" orders* the price at which the order is to be fullfilled at in units of the quote currency\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {float} [params.stopPrice] The price at which a trigger order is triggered at\n * @param {string} [params.timeInForce] \"GTC\", \"IOC\", or \"PO\"\n * @param {float} [params.stopLossPrice] The price at which a stop loss order is triggered at\n * @param {float} [params.takeProfitPrice] The price at which a take profit order is triggered at\n * @param {string} [params.marginMode] 'cross' or 'isolated' - marginMode for margin trading if not provided this.options['defaultMarginMode'] is used\n * @param {int} [params.iceberg] Amount to display for the iceberg order, Null or 0 for normal orders, Set to -1 to hide the order completely\n * @param {string} [params.text] User defined information\n * @param {string} [params.account] *spot and margin only* \"spot\", \"margin\" or \"cross_margin\"\n * @param {bool} [params.auto_borrow] *margin only* Used in margin or cross margin trading to allow automatic loan of insufficient amount if balance is not enough\n * @param {string} [params.settle] *contract only* Unified Currency Code for settle currency\n * @param {bool} [params.reduceOnly] *contract only* Indicates if this order is to reduce the size of a position\n * @param {bool} [params.close] *contract only* Set as true to close the position, with size set to 0\n * @param {bool} [params.auto_size] *contract only* Set side to close dual-mode position, close_long closes the long side, while close_short the short one, size also needs to be set to 0\n * @param {int} [params.price_type] *contract only* 0 latest deal price, 1 mark price, 2 index price\n * @param {float} [params.cost] *spot market buy only* the quote quantity that can be used as an alternative for the amount\n * @returns {object|undefined} [An order structure]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n await this.loadMarkets();\n const market = this.market(symbol);\n const trigger = this.safeValue(params, 'trigger');\n const triggerPrice = this.safeValue2(params, 'triggerPrice', 'stopPrice');\n const stopLossPrice = this.safeValue(params, 'stopLossPrice', triggerPrice);\n const takeProfitPrice = this.safeValue(params, 'takeProfitPrice');\n const isStopLossOrder = stopLossPrice !== undefined;\n const isTakeProfitOrder = takeProfitPrice !== undefined;\n const isStopOrder = isStopLossOrder || isTakeProfitOrder;\n const nonTriggerOrder = !isStopOrder && (trigger === undefined);\n const orderRequest = this.createOrderRequest(symbol, type, side, amount, price, params);\n let response = undefined;\n if (market['spot'] || market['margin']) {\n if (nonTriggerOrder) {\n response = await this.privateSpotPostOrders(orderRequest);\n }\n else {\n response = await this.privateSpotPostPriceOrders(orderRequest);\n }\n }\n else if (market['swap']) {\n if (nonTriggerOrder) {\n response = await this.privateFuturesPostSettleOrders(orderRequest);\n }\n else {\n response = await this.privateFuturesPostSettlePriceOrders(orderRequest);\n }\n }\n else if (market['future']) {\n if (nonTriggerOrder) {\n response = await this.privateDeliveryPostSettleOrders(orderRequest);\n }\n else {\n response = await this.privateDeliveryPostSettlePriceOrders(orderRequest);\n }\n }\n else {\n response = await this.privateOptionsPostOrders(orderRequest);\n }\n // const response = await this[method] (this.deepExtend (request, params));\n //\n // spot\n //\n // {\n // \"id\": \"95282841887\",\n // \"text\": \"apiv4\",\n // \"create_time\": \"1637383156\",\n // \"update_time\": \"1637383156\",\n // \"create_time_ms\": 1637383156017,\n // \"update_time_ms\": 1637383156017,\n // \"status\": \"open\",\n // \"currency_pair\": \"ETH_USDT\",\n // \"type\": \"limit\",\n // \"account\": \"spot\",\n // \"side\": \"buy\",\n // \"amount\": \"0.01\",\n // \"price\": \"3500\",\n // \"time_in_force\": \"gtc\",\n // \"iceberg\": \"0\",\n // \"left\": \"0.01\",\n // \"fill_price\": \"0\",\n // \"filled_total\": \"0\",\n // \"fee\": \"0\",\n // \"fee_currency\": \"ETH\",\n // \"point_fee\": \"0\",\n // \"gt_fee\": \"0\",\n // \"gt_discount\": false,\n // \"rebated_fee\": \"0\",\n // \"rebated_fee_currency\": \"USDT\"\n // }\n //\n // spot conditional\n //\n // {\"id\": 5891843}\n //\n // futures, perpetual swaps and options\n //\n // {\n // \"id\": 95938572327,\n // \"contract\": \"ETH_USDT\",\n // \"mkfr\": \"0\",\n // \"tkfr\": \"0.0005\",\n // \"tif\": \"gtc\",\n // \"is_reduce_only\": false,\n // \"create_time\": 1637384600.08,\n // \"price\": \"3000\",\n // \"size\": 1,\n // \"refr\": \"0\",\n // \"left\": 1,\n // \"text\": \"api\",\n // \"fill_price\": \"0\",\n // \"user\": 2436035,\n // \"status\": \"open\",\n // \"is_liq\": false,\n // \"refu\": 0,\n // \"is_close\": false,\n // \"iceberg\": 0\n // }\n //\n // futures and perpetual swaps conditionals\n //\n // {\"id\": 7615567}\n //\n return this.parseOrder(response, market);\n }\n async createOrders(orders, params = {}) {\n /**\n * @method\n * @name gate#createOrders\n * @description create a list of trade orders\n * @see https://www.gate.io/docs/developers/apiv4/en/#get-a-single-order-2\n * @see https://www.gate.io/docs/developers/apiv4/en/#create-a-batch-of-orders\n * @param {Array} orders list of orders to create, each object should contain the parameters required by createOrder, namely symbol, type, side, amount, price and params\n * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n await this.loadMarkets();\n const ordersRequests = [];\n const orderSymbols = [];\n for (let i = 0; i < orders.length; i++) {\n const rawOrder = orders[i];\n const marketId = this.safeString(rawOrder, 'symbol');\n orderSymbols.push(marketId);\n const type = this.safeString(rawOrder, 'type');\n const side = this.safeString(rawOrder, 'side');\n const amount = this.safeValue(rawOrder, 'amount');\n const price = this.safeValue(rawOrder, 'price');\n const orderParams = this.safeValue(rawOrder, 'params', {});\n const extendedParams = this.extend(orderParams, params); // the request does not accept extra params since it's a list, so we're extending each order with the common params\n const triggerValue = this.safeValueN(orderParams, ['triggerPrice', 'stopPrice', 'takeProfitPrice', 'stopLossPrice']);\n if (triggerValue !== undefined) {\n throw new InvalidParamsError('createOrders() does not support advanced order properties (stopPrice, takeProfitPrice, stopLossPrice)')\n .exchange(this.id);\n }\n extendedParams['textIsRequired'] = true; // Gate.io requires a text parameter for each order here\n const orderRequest = this.createOrderRequest(marketId, type, side, amount, price, extendedParams);\n ordersRequests.push(orderRequest);\n }\n const symbols = this.marketSymbols(orderSymbols, undefined, false, true, true);\n const market = this.market(symbols[0]);\n if (market['future'] || market['option']) {\n throw new MarketTypeNotSupportedError(market['type'])\n .overwriteMessage('createOrders() does not support futures or options markets')\n .exchange(this.id);\n }\n let response = undefined;\n if (market['spot']) {\n response = await this.privateSpotPostBatchOrders(ordersRequests);\n }\n else if (market['swap']) {\n response = await this.privateFuturesPostSettleBatchOrders(ordersRequests);\n }\n return this.parseOrders(response);\n }\n createOrderRequest(symbol, type, side, amount, price = undefined, params = {}) {\n const market = this.market(symbol);\n const contract = market['contract'];\n const trigger = this.safeValue(params, 'trigger');\n const triggerPrice = this.safeValue2(params, 'triggerPrice', 'stopPrice');\n const stopLossPrice = this.safeValue(params, 'stopLossPrice', triggerPrice);\n const takeProfitPrice = this.safeValue(params, 'takeProfitPrice');\n const isStopLossOrder = stopLossPrice !== undefined;\n const isTakeProfitOrder = takeProfitPrice !== undefined;\n const isStopOrder = isStopLossOrder || isTakeProfitOrder;\n if (isStopLossOrder && isTakeProfitOrder) {\n throw new InvalidParamsError('createOrder() stopLossPrice and takeProfitPrice cannot both be defined')\n .exchange(this.id);\n }\n const reduceOnly = this.safeValue(params, 'reduceOnly');\n const exchangeSpecificTimeInForce = this.safeStringLowerN(params, ['timeInForce', 'tif', 'time_in_force']);\n let postOnly = undefined;\n [postOnly, params] = this.handlePostOnly(type === 'market', exchangeSpecificTimeInForce === 'poc', params);\n let timeInForce = this.handleTimeInForce(params);\n if (postOnly) {\n timeInForce = 'poc';\n }\n // we only omit the unified params here\n // this is because the other params will get extended into the request\n params = this.omit(params, ['stopPrice', 'triggerPrice', 'stopLossPrice', 'takeProfitPrice', 'reduceOnly', 'timeInForce', 'postOnly']);\n const isLimitOrder = (type === 'limit');\n const isMarketOrder = (type === 'market');\n if (isLimitOrder && price === undefined) {\n throw new InvalidParamsError(' createOrder () requires a price argument for ' + type + ' orders')\n .exchange(this.id);\n }\n if (isMarketOrder) {\n if ((timeInForce === 'poc') || (timeInForce === 'gtc')) {\n throw new InvalidParamsError('createOrder () timeInForce for market order can only be \"FOK\" or \"IOC\"')\n .exchange(this.id);\n }\n else {\n if (timeInForce === undefined) {\n const defaultTif = this.safeString(this.options, 'defaultTimeInForce', 'IOC');\n const exchangeSpecificTif = this.safeString(this.options['timeInForce'], defaultTif, 'ioc');\n timeInForce = exchangeSpecificTif;\n }\n }\n if (contract) {\n price = 0;\n }\n }\n if (contract) {\n const isClose = this.safeValue(params, 'close');\n if (isClose) {\n amount = 0;\n }\n else {\n const amountToPrecision = this.amountToPrecision(symbol, amount);\n const signedAmount = (side === 'sell') ? Precise.stringNeg(amountToPrecision) : amountToPrecision;\n amount = parseInt(signedAmount);\n }\n }\n let request = undefined;\n const nonTriggerOrder = !isStopOrder && (trigger === undefined);\n if (nonTriggerOrder) {\n if (contract) {\n // contract order\n request = {\n 'contract': market['id'],\n 'size': amount, // int64, positive = bid, negative = ask\n // 'iceberg': 0, // int64, display size for iceberg order, 0 for non-iceberg, note that you will have to pay the taker fee for the hidden size\n // 'close': false, // true to close the position, with size set to 0\n // 'reduce_only': false, // St as true to be reduce-only order\n // 'tif': 'gtc', // gtc, ioc, poc PendingOrCancelled == postOnly order\n // 'text': clientOrderId, // 't-abcdef1234567890',\n // 'auto_size': '', // close_long, close_short, note size also needs to be set to 0\n };\n if (!market['option']) {\n request['settle'] = market['settleId']; // filled in prepareRequest above\n }\n if (isMarketOrder) {\n request['price'] = price; // set to 0 for market orders\n }\n else {\n request['price'] = this.priceToPrecision(symbol, price);\n }\n if (reduceOnly !== undefined) {\n request['reduce_only'] = reduceOnly;\n }\n if (timeInForce !== undefined) {\n request['tif'] = timeInForce;\n }\n }\n else {\n let marginMode = undefined;\n [marginMode, params] = this.getMarginMode(false, params);\n // spot order\n request = {\n // 'text': clientOrderId, // 't-abcdef1234567890',\n 'currency_pair': market['id'],\n 'type': type,\n 'account': marginMode,\n 'side': side,\n // 'time_in_force': 'gtc', // gtc, ioc, poc PendingOrCancelled == postOnly order\n // 'iceberg': 0, // amount to display for the iceberg order, null or 0 for normal orders, set to -1 to hide the order completely\n // 'auto_borrow': false, // used in margin or cross margin trading to allow automatic loan of insufficient amount if balance is not enough\n // 'auto_repay': false, // automatic repayment for automatic borrow loan generated by cross margin order, diabled by default\n };\n if (isMarketOrder && (side === 'buy')) {\n let quoteAmount = undefined;\n let createMarketBuyOrderRequiresPrice = true;\n [createMarketBuyOrderRequiresPrice, params] = this.handleOptionAndParams(params, 'createOrder', 'createMarketBuyOrderRequiresPrice', true);\n const cost = this.safeNumber(params, 'cost');\n params = this.omit(params, 'cost');\n if (cost !== undefined) {\n quoteAmount = this.costToPrecision(symbol, cost);\n }\n else if (createMarketBuyOrderRequiresPrice) {\n if (price === undefined) {\n throw new InvalidParamsError('createOrder() requires the price argument for market buy orders to calculate the total cost to spend (amount * price), alternatively set the createMarketBuyOrderRequiresPrice option or param to false and pass the cost to spend (quote quantity) in the amount argument')\n .exchange(this.id);\n }\n else {\n const amountString = this.numberToString(amount);\n const priceString = this.numberToString(price);\n const costRequest = Precise.stringMul(amountString, priceString);\n quoteAmount = this.costToPrecision(symbol, costRequest);\n }\n }\n else {\n quoteAmount = this.costToPrecision(symbol, amount);\n }\n request['amount'] = quoteAmount;\n }\n else {\n request['amount'] = this.amountToPrecision(symbol, amount);\n }\n if (isLimitOrder) {\n request['price'] = this.priceToPrecision(symbol, price);\n }\n if (timeInForce !== undefined) {\n request['time_in_force'] = timeInForce;\n }\n }\n let clientOrderId = this.safeString2(params, 'text', 'clientOrderId');\n const textIsRequired = this.safeBool(params, 'textIsRequired', false);\n if (clientOrderId !== undefined) {\n // user-defined, must follow the rules if not empty\n // prefixed with t-\n // no longer than 28 bytes without t- prefix\n // can only include 0-9, A-Z, a-z, underscores (_), hyphens (-) or dots (.)\n if (clientOrderId.length > 28) {\n throw new InvalidParamsError('createOrder () clientOrderId or text param must be up to 28 characters')\n .exchange(this.id);\n }\n params = this.omit(params, ['text', 'clientOrderId', 'textIsRequired']);\n if (clientOrderId[0] !== 't') {\n clientOrderId = 't-' + clientOrderId;\n }\n request['text'] = clientOrderId;\n }\n else {\n if (textIsRequired) {\n // batchOrders requires text in the request\n request['text'] = 't-' + this.uuid16();\n }\n }\n }\n else {\n if (market['option']) {\n throw new MarketTypeNotSupportedError('option').addMessage('createOrder() conditional option orders are not supported')\n .exchange(this.id);\n }\n if (contract) {\n // contract conditional order\n request = {\n 'initial': {\n 'contract': market['id'],\n 'size': amount,\n 'price': this.priceToPrecision(symbol, price), // set to 0 to use market price\n // 'close': false, // set to true if trying to close the position\n // 'tif': 'gtc', // gtc, ioc, if using market price, only ioc is supported\n // 'text': clientOrderId, // web, api, app\n // 'reduce_only': false,\n },\n 'settle': market['settleId'],\n };\n if (trigger === undefined) {\n let rule = undefined;\n let triggerOrderPrice = undefined;\n if (isStopLossOrder) {\n // we let trigger orders be aliases for stopLoss orders because\n // gateio doesn't accept conventional trigger orders for spot markets\n rule = (side === 'buy') ? 1 : 2;\n triggerOrderPrice = this.priceToPrecision(symbol, stopLossPrice);\n }\n else if (isTakeProfitOrder) {\n rule = (side === 'buy') ? 2 : 1;\n triggerOrderPrice = this.priceToPrecision(symbol, takeProfitPrice);\n }\n const priceType = this.safeInteger(params, 'price_type', 0);\n if (priceType < 0 || priceType > 2) {\n throw new InvalidParamsError(this.id + ' createOrder () price_type should be 0 latest deal price, 1 mark price, 2 index price')\n .exchange(this.id);\n }\n params = this.omit(params, ['price_type']);\n request['trigger'] = {\n // 'strategy_type': 0, // 0 = by price, 1 = by price gap, only 0 is supported currently\n 'price_type': priceType,\n 'price': this.priceToPrecision(symbol, triggerOrderPrice),\n 'rule': rule, // 1 means price_type >= price, 2 means price_type <= price\n // 'expiration': expiration, how many seconds to wait for the condition to be triggered before cancelling the order\n };\n }\n if (reduceOnly !== undefined) {\n request['initial']['reduce_only'] = reduceOnly;\n }\n if (timeInForce !== undefined) {\n request['initial']['tif'] = timeInForce;\n }\n }\n else {\n // spot conditional order\n const options = this.safeValue(this.options, 'createOrder', {});\n let marginMode = undefined;\n [marginMode, params] = this.getMarginMode(true, params);\n if (timeInForce === undefined) {\n timeInForce = 'gtc';\n }\n request = {\n 'put': {\n 'type': type,\n 'side': side,\n 'price': this.priceToPrecision(symbol, price),\n 'amount': this.amountToPrecision(symbol, amount),\n 'account': marginMode,\n 'time_in_force': timeInForce, // gtc, ioc (ioc is for taker only, so shouldnt't be in conditional order)\n },\n 'market': market['id'],\n };\n if (trigger === undefined) {\n const defaultExpiration = this.safeInteger(options, 'expiration');\n const expiration = this.safeInteger(params, 'expiration', defaultExpiration);\n let rule = undefined;\n let triggerOrderPrice = undefined;\n if (isStopLossOrder) {\n // we let trigger orders be aliases for stopLoss orders because\n // gateio doesn't accept conventional trigger orders for spot markets\n rule = (side === 'buy') ? '>=' : '<=';\n triggerOrderPrice = this.priceToPrecision(symbol, stopLossPrice);\n }\n else if (isTakeProfitOrder) {\n rule = (side === 'buy') ? '<=' : '>=';\n triggerOrderPrice = this.priceToPrecision(symbol, takeProfitPrice);\n }\n request['trigger'] = {\n 'price': this.priceToPrecision(symbol, triggerOrderPrice),\n 'rule': rule,\n 'expiration': expiration, // required, how long (in seconds) to wait for the condition to be triggered before cancelling the order\n };\n }\n }\n }\n return this.extend(request, params);\n }\n async createMarketBuyOrderWithCost(symbol, cost, params = {}) {\n /**\n * @method\n * @name gate#createMarketBuyOrderWithCost\n * @description create a market buy order by providing the symbol and cost\n * @see https://www.gate.io/docs/developers/apiv4/en/#create-an-order\n * @param {string} symbol unified symbol of the market to create an order in\n * @param {float} cost how much you want to trade in units of the quote currency\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n await this.loadMarkets();\n const market = this.market(symbol);\n if (!market['spot']) {\n throw new MarketTypeNotSupportedError(market['type'])\n .addMessage('createMarketBuyOrderWithCost() supports spot orders only')\n .exchange(this.id);\n }\n params['createMarketBuyOrderRequiresPrice'] = false;\n return await this.createOrder(symbol, 'market', 'buy', cost, undefined, params);\n }\n async editOrder(id, symbol, type, side, amount = undefined, price = undefined, params = {}) {\n /**\n * @method\n * @name gate#editOrder\n * @description edit a trade order, gate currently only supports the modification of the price or amount fields\n * @see https://www.gate.io/docs/developers/apiv4/en/#amend-an-order\n * @see https://www.gate.io/docs/developers/apiv4/en/#amend-an-order-2\n * @param {string} id order id\n * @param {string} symbol unified symbol of the market to create an order in\n * @param {string} type 'market' or 'limit'\n * @param {string} side 'buy' or 'sell'\n * @param {float} amount how much of the currency you want to trade in units of the base currency\n * @param {float} [price] the price at which the order is to be fullfilled, in units of the base currency, ignored in market orders\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n await this.loadMarkets();\n const market = this.market(symbol);\n const [marketType, query] = this.handleMarketTypeAndParams('editOrder', market, params);\n const account = this.convertTypeToAccount(marketType);\n const isLimitOrder = (type === 'limit');\n if (account === 'spot') {\n if (!isLimitOrder) {\n // exchange doesn't have market orders for spot\n throw new MarketTypeNotSupportedError(marketType).addMessage('editOrder() does not support ' + type + ' orders for ' + marketType + ' markets')\n .exchange(this.id);\n }\n }\n const request = {\n 'order_id': id,\n 'currency_pair': market['id'],\n 'account': account,\n };\n if (amount !== undefined) {\n request['amount'] = this.amountToPrecision(symbol, amount);\n }\n if (price !== undefined) {\n request['price'] = this.priceToPrecision(symbol, price);\n }\n let response = undefined;\n if (market['spot']) {\n response = await this.privateSpotPatchOrdersOrderId(this.extend(request, query));\n }\n else {\n request['settle'] = market['settleId'];\n response = await this.privateFuturesPutSettleOrdersOrderId(this.extend(request, query));\n }\n //\n // {\n // \"id\": \"243233276443\",\n // \"text\": \"apiv4\",\n // \"create_time\": \"1670908873\",\n // \"update_time\": \"1670914102\",\n // \"create_time_ms\": 1670908873077,\n // \"update_time_ms\": 1670914102241,\n // \"status\": \"open\",\n // \"currency_pair\": \"ADA_USDT\",\n // \"type\": \"limit\",\n // \"account\": \"spot\",\n // \"side\": \"sell\",\n // \"amount\": \"10\",\n // \"price\": \"0.6\",\n // \"time_in_force\": \"gtc\",\n // \"iceberg\": \"0\",\n // \"left\": \"10\",\n // \"fill_price\": \"0\",\n // \"filled_total\": \"0\",\n // \"fee\": \"0\",\n // \"fee_currency\": \"USDT\",\n // \"point_fee\": \"0\",\n // \"gt_fee\": \"0\",\n // \"gt_maker_fee\": \"0\",\n // \"gt_taker_fee\": \"0\",\n // \"gt_discount\": false,\n // \"rebated_fee\": \"0\",\n // \"rebated_fee_currency\": \"ADA\"\n // }\n //\n return this.parseOrder(response, market);\n }\n parseOrderStatus(status) {\n const statuses = {\n 'open': 'open',\n '_new': 'open',\n 'filled': 'closed',\n 'cancelled': 'canceled',\n 'liquidated': 'closed',\n 'ioc': 'canceled',\n 'failed': 'canceled',\n 'expired': 'canceled',\n 'finished': 'closed',\n 'succeeded': 'closed',\n };\n return this.safeString(statuses, status, status);\n }\n parseOrder(order, market = undefined) {\n //\n // SPOT\n // createOrder/cancelOrder/fetchOrder/editOrder\n //\n // {\n // \"id\": \"62364648575\",\n // \"text\": \"apiv4\",\n // \"create_time\": \"1626354834\",\n // \"update_time\": \"1626354834\",\n // \"create_time_ms\": \"1626354833544\",\n // \"update_time_ms\": \"1626354833544\",\n // \"status\": \"open\",\n // \"currency_pair\": \"BTC_USDT\",\n // \"type\": \"limit\",\n // \"account\": \"spot\",\n // \"side\": \"buy\",\n // \"amount\": \"0.0001\",\n // \"price\": \"30000\",\n // \"time_in_force\": \"gtc\",\n // \"iceberg\": \"0\",\n // \"left\": \"0.0001\",\n // \"fill_price\": \"0\",\n // \"filled_total\": \"0\",\n // \"fee\": \"0\",\n // \"fee_currency\": \"BTC\",\n // \"point_fee\": \"0\",\n // \"gt_fee\": \"0\",\n // \"gt_discount\": true,\n // \"rebated_fee\": \"0\",\n // \"rebated_fee_currency\": \"USDT\"\n // }\n //\n // SPOT TRIGGER ORDERS\n // createOrder\n //\n // {\n // \"id\": 12604556\n // }\n //\n // fetchOrder/cancelOrder\n //\n // {\n // \"market\": \"ADA_USDT\",\n // \"user\": 6392049,\n // \"trigger\": {\n // \"price\": \"1.08\", // stopPrice\n // \"rule\": \"\\u003e=\",\n // \"expiration\": 86400\n // },\n // \"put\": {\n // \"type\": \"limit\",\n // \"side\": \"buy\",\n // \"price\": \"1.08\", // order price\n // \"amount\": \"1.00000000000000000000\",\n // \"account\": \"normal\",\n // \"time_in_force\": \"gtc\"\n // },\n // \"id\": 71639298,\n // \"ctime\": 1643945985,\n // \"status\": \"open\"\n // }\n //\n // FUTURE, SWAP AND OPTION\n // createOrder/cancelOrder/fetchOrder\n //\n // {\n // \"id\": 123028481731,\n // \"contract\": \"ADA_USDT\",\n // \"mkfr\": \"-0.00005\",\n // \"tkfr\": \"0.00048\",\n // \"tif\": \"ioc\",\n // \"is_reduce_only\": false,\n // \"create_time\": 1643950262.68,\n // \"finish_time\": 1643950262.68,\n // \"price\": \"0\",\n // \"size\": 1,\n // \"refr\": \"0\",\n // \"left\":0,\n // \"text\": \"api\",\n // \"fill_price\": \"1.05273\",\n // \"user\":6329238,\n // \"finish_as\": \"filled\",\n // \"status\": \"finished\",\n // \"is_liq\": false,\n // \"refu\":0,\n // \"is_close\": false,\n // \"iceberg\": 0\n // }\n //\n // TRIGGER ORDERS (FUTURE AND SWAP)\n // createOrder\n //\n // {\n // \"id\": 12604556\n // }\n //\n // fetchOrder/cancelOrder\n //\n // {\n // \"user\": 6320300,\n // \"trigger\": {\n // \"strategy_type\": 0,\n // \"price_type\": 0,\n // \"price\": \"1.03\", // stopPrice\n // \"rule\": 2,\n // \"expiration\": 0\n // },\n // \"initial\": {\n // \"contract\": \"ADA_USDT\",\n // \"size\": -1,\n // \"price\": \"1.02\",\n // \"tif\": \"gtc\",\n // \"text\": \"\",\n // \"iceberg\": 0,\n // \"is_close\": false,\n // \"is_reduce_only\": false,\n // \"auto_size\": \"\"\n // },\n // \"id\": 126393906,\n // \"trade_id\": 0,\n // \"status\": \"open\",\n // \"reason\": \"\",\n // \"create_time\": 1643953482,\n // \"finish_time\": 1643953482,\n // \"is_stop_order\": false,\n // \"stop_trigger\": {\n // \"rule\": 0,\n // \"trigger_price\": \"\",\n // \"order_price\": \"\"\n // },\n // \"me_order_id\": 0,\n // \"order_type\": \"\"\n // }\n //\n // {\n // \"text\": \"t-d18baf9ac44d82e2\",\n // \"succeeded\": false,\n // \"label\": \"BALANCE_NOT_ENOUGH\",\n // \"message\": \"Not enough balance\"\n // }\n //\n const succeeded = this.safeBool(order, 'succeeded', true);\n if (!succeeded) {\n // cancelOrders response\n return this.safeOrder({\n 'clientOrderId': this.safeString(order, 'text'),\n 'info': order,\n 'status': 'rejected',\n });\n }\n const put = this.safeValue2(order, 'put', 'initial', {});\n const trigger = this.safeValue(order, 'trigger', {});\n let contract = this.safeString(put, 'contract');\n let type = this.safeString(put, 'type');\n let timeInForce = this.safeStringUpper2(put, 'time_in_force', 'tif');\n let amount = this.safeString2(put, 'amount', 'size');\n let side = this.safeString(put, 'side');\n let price = this.safeString(put, 'price');\n contract = this.safeString(order, 'contract', contract);\n type = this.safeString(order, 'type', type);\n timeInForce = this.safeStringUpper2(order, 'time_in_force', 'tif', timeInForce);\n if (timeInForce === 'POC') {\n timeInForce = 'PO';\n }\n const postOnly = (timeInForce === 'PO');\n amount = this.safeString2(order, 'amount', 'size', amount);\n side = this.safeString(order, 'side', side);\n price = this.safeString(order, 'price', price);\n let remainingString = this.safeString(order, 'left');\n let cost = this.safeString(order, 'filled_total');\n const triggerPrice = this.safeNumber(trigger, 'price');\n let average = this.safeNumber2(order, 'avg_deal_price', 'fill_price');\n if (triggerPrice) {\n remainingString = amount;\n cost = '0';\n }\n if (contract) {\n const isMarketOrder = Precise.stringEquals(price, '0') && (timeInForce === 'IOC');\n type = isMarketOrder ? 'market' : 'limit';\n side = Precise.stringGt(amount, '0') ? 'buy' : 'sell';\n }\n const rawStatus = this.safeStringN(order, ['finish_as', 'status', 'open']);\n let timestamp = this.safeInteger(order, 'create_time_ms');\n if (timestamp === undefined) {\n timestamp = this.safeTimestamp2(order, 'create_time', 'ctime');\n }\n let lastTradeTimestamp = this.safeInteger(order, 'update_time_ms');\n if (lastTradeTimestamp === undefined) {\n lastTradeTimestamp = this.safeTimestamp2(order, 'update_time', 'finish_time');\n }\n const marketType = ('currency_pair' in order) ? 'spot' : 'contract';\n const exchangeSymbol = this.safeString2(order, 'currency_pair', 'market', contract);\n const symbol = this.safeSymbol(exchangeSymbol, market, '_', marketType);\n // Everything below this(above return) is related to fees\n const fees = [];\n const gtFee = this.safeString(order, 'gt_fee');\n if (gtFee) {\n fees.push({\n 'currency': 'GT',\n 'cost': gtFee,\n });\n }\n const fee = this.safeString(order, 'fee');\n if (fee) {\n fees.push({\n 'currency': this.safeCurrencyCode(this.safeString(order, 'fee_currency')),\n 'cost': fee,\n });\n }\n const rebate = this.safeString(order, 'rebated_fee');\n if (rebate) {\n fees.push({\n 'currency': this.safeCurrencyCode(this.safeString(order, 'rebated_fee_currency')),\n 'cost': Precise.stringNeg(rebate),\n });\n }\n const numFeeCurrencies = fees.length;\n const multipleFeeCurrencies = numFeeCurrencies > 1;\n const status = this.parseOrderStatus(rawStatus);\n let remaining = Precise.stringAbs(remainingString);\n // handle spot market buy\n const account = this.safeString(order, 'account'); // using this instead of market type because of the conflicting ids\n if (account === 'spot') {\n const averageString = this.safeString(order, 'avg_deal_price');\n average = this.parseNumber(averageString);\n if ((type === 'market') && (side === 'buy')) {\n // filled_total represents the real traded quote token amount\n const filledTotal = this.safeString2(order, 'filled_total', 'amount');\n remaining = Precise.stringDiv(remainingString, averageString);\n price = undefined; // arrives as 0\n cost = filledTotal;\n amount = Precise.stringDiv(filledTotal, averageString);\n }\n }\n return this.safeOrder({\n 'id': this.safeString(order, 'id'),\n 'clientOrderId': this.safeString(order, 'text'),\n 'timestamp': timestamp,\n 'datetime': this.iso8601(timestamp),\n 'lastTradeTimestamp': lastTradeTimestamp,\n 'status': status,\n 'symbol': symbol,\n 'type': type,\n 'timeInForce': timeInForce,\n 'postOnly': postOnly,\n 'reduceOnly': this.safeValue(order, 'is_reduce_only'),\n 'side': side,\n 'price': price,\n 'stopPrice': triggerPrice,\n 'triggerPrice': triggerPrice,\n 'average': average,\n 'amount': Precise.stringAbs(amount),\n 'cost': Precise.stringAbs(cost),\n 'filled': undefined,\n 'remaining': remaining,\n 'fee': multipleFeeCurrencies ? undefined : this.safeValue(fees, 0),\n 'fees': multipleFeeCurrencies ? fees : [],\n 'trades': undefined,\n 'info': order,\n }, market);\n }\n async fetchOrder(id, symbol = undefined, params = {}) {\n /**\n * @method\n * @name gate#fetchOrder\n * @description Retrieves information on an order\n * @see https://www.gate.io/docs/developers/apiv4/en/#get-a-single-order\n * @see https://www.gate.io/docs/developers/apiv4/en/#get-a-single-order-2\n * @see https://www.gate.io/docs/developers/apiv4/en/#get-a-single-order-3\n * @see https://www.gate.io/docs/developers/apiv4/en/#get-a-single-order-4\n * @param {string} id Order id\n * @param {string} symbol Unified market symbol, *required for spot and margin*\n * @param {object} [params] Parameters specified by the exchange api\n * @param {bool} [params.stop] True if the order being fetched is a trigger order\n * @param {string} [params.marginMode] 'cross' or 'isolated' - marginMode for margin trading if not provided this.options['defaultMarginMode'] is used\n * @param {string} [params.type] 'spot', 'swap', or 'future', if not provided this.options['defaultMarginMode'] is used\n * @param {string} [params.settle] 'btc' or 'usdt' - settle currency for perpetual swap and future - market settle currency is used if symbol !== undefined, default=\"usdt\" for swap and \"btc\" for future\n * @returns An [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n await this.loadMarkets();\n const stop = this.safeValue2(params, 'is_stop_order', 'stop', false);\n params = this.omit(params, ['is_stop_order', 'stop']);\n let clientOrderId = this.safeString2(params, 'text', 'clientOrderId');\n let orderId = id;\n if (clientOrderId !== undefined) {\n params = this.omit(params, ['text', 'clientOrderId']);\n if (clientOrderId[0] !== 't') {\n clientOrderId = 't-' + clientOrderId;\n }\n orderId = clientOrderId;\n }\n const market = (symbol === undefined) ? undefined : this.market(symbol);\n const [type, query] = this.handleMarketTypeAndParams('fetchOrder', market, params);\n const contract = (type === 'swap') || (type === 'future') || (type === 'option');\n const [request, requestParams] = contract ? this.prepareRequest(market, type, query) : this.spotOrderPrepareRequest(market, stop, query);\n request['order_id'] = orderId;\n let response = undefined;\n if (type === 'spot' || type === 'margin') {\n if (stop) {\n response = await this.privateSpotGetPriceOrdersOrderId(this.extend(request, requestParams));\n }\n else {\n response = await this.privateSpotGetOrdersOrderId(this.extend(request, requestParams));\n }\n }\n else if (type === 'swap') {\n if (stop) {\n response = await this.privateFuturesGetSettlePriceOrdersOrderId(this.extend(request, requestParams));\n }\n else {\n response = await this.privateFuturesGetSettleOrdersOrderId(this.extend(request, requestParams));\n }\n }\n else if (type === 'future') {\n if (stop) {\n response = await this.privateDeliveryGetSettlePriceOrdersOrderId(this.extend(request, requestParams));\n }\n else {\n response = await this.privateDeliveryGetSettleOrdersOrderId(this.extend(request, requestParams));\n }\n }\n else if (type === 'option') {\n response = await this.privateOptionsGetOrdersOrderId(this.extend(request, requestParams));\n }\n else {\n throw new MarketTypeNotSupportedError(type).exchange(this.id);\n }\n return this.parseOrder(response, market);\n }\n async fetchOpenOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name gate#fetchOpenOrders\n * @description fetch all unfilled currently open orders\n * @see https://www.gate.io/docs/developers/apiv4/en/#list-all-open-orders\n * @param {string} symbol unified market symbol\n * @param {int} [since] the earliest time in ms to fetch open orders for\n * @param {int} [limit] the maximum number of open orders structures to retrieve\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {bool} [params.stop] true for fetching stop orders\n * @param {string} [params.type] spot, margin, swap or future, if not provided this.options['defaultType'] is used\n * @param {string} [params.marginMode] 'cross' or 'isolated' - marginMode for type='margin', if not provided this.options['defaultMarginMode'] is used\n * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n return await this.fetchOrdersByStatus('open', symbol, since, limit, params);\n }\n async fetchClosedOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name gate#fetchClosedOrders\n * @description fetches information on multiple closed orders made by the user\n * @see https://www.gate.io/docs/developers/apiv4/en/#list-orders\n * @see https://www.gate.io/docs/developers/apiv4/en/#retrieve-running-auto-order-list\n * @see https://www.gate.io/docs/developers/apiv4/en/#list-futures-orders\n * @see https://www.gate.io/docs/developers/apiv4/en/#list-all-auto-orders\n * @see https://www.gate.io/docs/developers/apiv4/en/#list-futures-orders-2\n * @see https://www.gate.io/docs/developers/apiv4/en/#list-all-auto-orders-2\n * @see https://www.gate.io/docs/developers/apiv4/en/#list-options-orders\n * @param {string} symbol unified market symbol of the market orders were made in\n * @param {int} [since] the earliest time in ms to fetch orders for\n * @param {int} [limit] the maximum number of order structures to retrieve\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {bool} [params.stop] true for fetching stop orders\n * @param {string} [params.type] spot, swap or future, if not provided this.options['defaultType'] is used\n * @param {string} [params.marginMode] 'cross' or 'isolated' - marginMode for margin trading if not provided this.options['defaultMarginMode'] is used\n * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n return await this.fetchOrdersByStatus('finished', symbol, since, limit, params);\n }\n async fetchOrdersByStatus(status, symbol = undefined, since = undefined, limit = undefined, params = {}) {\n await this.loadMarkets();\n let market = undefined;\n if (symbol !== undefined) {\n market = this.market(symbol);\n symbol = market['symbol'];\n }\n const stop = this.safeValue(params, 'stop');\n params = this.omit(params, 'stop');\n const [type, query] = this.handleMarketTypeAndParams('fetchOrdersByStatus', market, params);\n const spot = (type === 'spot') || (type === 'margin');\n const [request, requestParams] = spot ? this.multiOrderSpotPrepareRequest(market, stop, query) : this.prepareRequest(market, type, query);\n if (status === 'closed') {\n status = 'finished';\n }\n request['status'] = status;\n if (limit !== undefined) {\n request['limit'] = limit;\n }\n if (since !== undefined && spot) {\n request['from'] = this.parseToInt(since / 1000);\n }\n const openSpotOrders = spot && (status === 'open') && !stop;\n let response = undefined;\n if (type === 'spot' || type === 'margin') {\n if (openSpotOrders) {\n response = await this.privateSpotGetOpenOrders(this.extend(request, requestParams));\n }\n else if (stop) {\n response = await this.privateSpotGetPriceOrders(this.extend(request, requestParams));\n }\n else {\n response = await this.privateSpotGetOrders(this.extend(request, requestParams));\n }\n }\n else if (type === 'swap') {\n if (stop) {\n response = await this.privateFuturesGetSettlePriceOrders(this.extend(request, requestParams));\n }\n else {\n response = await this.privateFuturesGetSettleOrders(this.extend(request, requestParams));\n }\n }\n else if (type === 'future') {\n if (stop) {\n response = await this.privateDeliveryGetSettlePriceOrders(this.extend(request, requestParams));\n }\n else {\n response = await this.privateDeliveryGetSettleOrders(this.extend(request, requestParams));\n }\n }\n else if (type === 'option') {\n response = await this.privateOptionsGetOrders(this.extend(request, requestParams));\n }\n else {\n throw new MarketTypeNotSupportedError(type).exchange(this.id);\n }\n //\n // spot open orders\n //\n // [\n // {\n // \"currency_pair\": \"ADA_USDT\",\n // \"total\": 2,\n // \"orders\": [\n // {\n // \"id\": \"155498539874\",\n // \"text\": \"apiv4\",\n // \"create_time\": \"1652406843\",\n // \"update_time\": \"1652406843\",\n // \"create_time_ms\": 1652406843295,\n // \"update_time_ms\": 1652406843295,\n // \"status\": \"open\",\n // \"currency_pair\": \"ADA_USDT\",\n // \"type\": \"limit\",\n // \"account\": \"spot\",\n // \"side\": \"buy\",\n // \"amount\": \"3\",\n // \"price\": \"0.35\",\n // \"time_in_force\": \"gtc\",\n // \"iceberg\": \"0\",\n // \"left\": \"3\",\n // \"fill_price\": \"0\",\n // \"filled_total\": \"0\",\n // \"fee\": \"0\",\n // \"fee_currency\": \"ADA\",\n // \"point_fee\": \"0\",\n // \"gt_fee\": \"0\",\n // \"gt_discount\": false,\n // \"rebated_fee\": \"0\",\n // \"rebated_fee_currency\": \"USDT\"\n // },\n // ...\n // ]\n // },\n // ...\n // ]\n //\n // spot\n //\n // [\n // {\n // \"id\": \"8834234273\",\n // \"text\": \"3\",\n // \"create_time\": \"1635406193\",\n // \"update_time\": \"1635406193\",\n // \"create_time_ms\": 1635406193361,\n // \"update_time_ms\": 1635406193361,\n // \"status\": \"closed\",\n // \"currency_pair\": \"BTC_USDT\",\n // \"type\": \"limit\",\n // \"account\": \"spot\", // margin for margin orders\n // \"side\": \"sell\",\n // \"amount\": \"0.0002\",\n // \"price\": \"58904.01\",\n // \"time_in_force\": \"gtc\",\n // \"iceberg\": \"0\",\n // \"left\": \"0.0000\",\n // \"fill_price\": \"11.790516\",\n // \"filled_total\": \"11.790516\",\n // \"fee\": \"0.023581032\",\n // \"fee_currency\": \"USDT\",\n // \"point_fee\": \"0\",\n // \"gt_fee\": \"0\",\n // \"gt_discount\": false,\n // \"rebated_fee_currency\": \"BTC\"\n // }\n // ]\n //\n // spot stop\n //\n // [\n // {\n // \"market\": \"ADA_USDT\",\n // \"user\": 10406147,\n // \"trigger\": {\n // \"price\": \"0.65\",\n // \"rule\": \"\\u003c=\",\n // \"expiration\": 86400\n // },\n // \"put\": {\n // \"type\": \"limit\",\n // \"side\": \"sell\",\n // \"price\": \"0.65\",\n // \"amount\": \"2.00000000000000000000\",\n // \"account\": \"normal\", // margin for margin orders\n // \"time_in_force\": \"gtc\"\n // },\n // \"id\": 8449909,\n // \"ctime\": 1652188982,\n // \"status\": \"open\"\n // }\n // ]\n //\n // swap\n //\n // [\n // {\n // \"status\": \"finished\",\n // \"size\": -1,\n // \"left\": 0,\n // \"id\": 82750739203,\n // \"is_liq\": false,\n // \"is_close\": false,\n // \"contract\": \"BTC_USDT\",\n // \"text\": \"web\",\n // \"fill_price\": \"60721.3\",\n // \"finish_as\": \"filled\",\n // \"iceberg\": 0,\n // \"tif\": \"ioc\",\n // \"is_reduce_only\": true,\n // \"create_time\": 1635403475.412,\n // \"finish_time\": 1635403475.4127,\n // \"price\": \"0\"\n // }\n // ]\n //\n // option\n //\n // [\n // {\n // \"id\": 2593450699,\n // \"contract\": \"BTC_USDT-20230601-27500-C\",\n // \"mkfr\": \"0.0003\",\n // \"tkfr\": \"0.0003\",\n // \"tif\": \"gtc\",\n // \"is_reduce_only\": false,\n // \"create_time\": 1685503873,\n // \"price\": \"200\",\n // \"size\": 1,\n // \"refr\": \"0\",\n // \"left\": 1,\n // \"text\": \"api\",\n // \"fill_price\": \"0\",\n // \"user\": 5691076,\n // \"status\": \"open\",\n // \"is_liq\": false,\n // \"refu\": 0,\n // \"is_close\": false,\n // \"iceberg\": 0\n // }\n // ]\n //\n let result = response;\n if (openSpotOrders) {\n result = [];\n for (let i = 0; i < response.length; i++) {\n const ordersInner = this.safeValue(response[i], 'orders');\n result = this.arrayConcat(result, ordersInner);\n }\n }\n const orders = this.parseOrders(result, market, since, limit);\n return this.filterBySymbolSinceLimit(orders, symbol, since, limit);\n }\n async cancelOrder(id, symbol = undefined, params = {}) {\n /**\n * @method\n * @name gate#cancelOrder\n * @description Cancels an open order\n * @see https://www.gate.io/docs/developers/apiv4/en/#cancel-a-single-order\n * @see https://www.gate.io/docs/developers/apiv4/en/#cancel-a-single-order-2\n * @see https://www.gate.io/docs/developers/apiv4/en/#cancel-a-single-order-3\n * @see https://www.gate.io/docs/developers/apiv4/en/#cancel-a-single-order-4\n * @param {string} id Order id\n * @param {string} symbol Unified market symbol\n * @param {object} [params] Parameters specified by the exchange api\n * @param {bool} [params.stop] True if the order to be cancelled is a trigger order\n * @returns An [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n await this.loadMarkets();\n const market = (symbol === undefined) ? undefined : this.market(symbol);\n const stop = this.safeValue2(params, 'is_stop_order', 'stop', false);\n params = this.omit(params, ['is_stop_order', 'stop']);\n const [type, query] = this.handleMarketTypeAndParams('cancelOrder', market, params);\n const [request, requestParams] = (type === 'spot' || type === 'margin') ? this.spotOrderPrepareRequest(market, stop, query) : this.prepareRequest(market, type, query);\n request['order_id'] = id;\n let response = undefined;\n if (type === 'spot' || type === 'margin') {\n if (stop) {\n response = await this.privateSpotDeletePriceOrdersOrderId(this.extend(request, requestParams));\n }\n else {\n response = await this.privateSpotDeleteOrdersOrderId(this.extend(request, requestParams));\n }\n }\n else if (type === 'swap') {\n if (stop) {\n response = await this.privateFuturesDeleteSettlePriceOrdersOrderId(this.extend(request, requestParams));\n }\n else {\n response = await this.privateFuturesDeleteSettleOrdersOrderId(this.extend(request, requestParams));\n }\n }\n else if (type === 'future') {\n if (stop) {\n response = await this.privateDeliveryDeleteSettlePriceOrdersOrderId(this.extend(request, requestParams));\n }\n else {\n response = await this.privateDeliveryDeleteSettleOrdersOrderId(this.extend(request, requestParams));\n }\n }\n else if (type === 'option') {\n response = await this.privateOptionsDeleteOrdersOrderId(this.extend(request, requestParams));\n }\n else {\n throw new MarketTypeNotSupportedError(type).exchange(this.id);\n }\n //\n // spot\n //\n // {\n // \"id\": \"95282841887\",\n // \"text\": \"apiv4\",\n // \"create_time\": \"1637383156\",\n // \"update_time\": \"1637383235\",\n // \"create_time_ms\": 1637383156017,\n // \"update_time_ms\": 1637383235085,\n // \"status\": \"cancelled\",\n // \"currency_pair\": \"ETH_USDT\",\n // \"type\": \"limit\",\n // \"account\": \"spot\",\n // \"side\": \"buy\",\n // \"amount\": \"0.01\",\n // \"price\": \"3500\",\n // \"time_in_force\": \"gtc\",\n // \"iceberg\": \"0\",\n // \"left\": \"0.01\",\n // \"fill_price\": \"0\",\n // \"filled_total\": \"0\",\n // \"fee\": \"0\",\n // \"fee_currency\": \"ETH\",\n // \"point_fee\": \"0\",\n // \"gt_fee\": \"0\",\n // \"gt_discount\": false,\n // \"rebated_fee\": \"0\",\n // \"rebated_fee_currency\": \"USDT\"\n // }\n //\n // spot conditional\n //\n // {\n // \"market\": \"ETH_USDT\",\n // \"user\": 2436035,\n // \"trigger\": {\n // \"price\": \"3500\",\n // \"rule\": \"\\u003c=\",\n // \"expiration\": 86400\n // },\n // \"put\": {\n // \"type\": \"limit\",\n // \"side\": \"buy\",\n // \"price\": \"3500\",\n // \"amount\": \"0.01000000000000000000\",\n // \"account\": \"normal\",\n // \"time_in_force\": \"gtc\"\n // },\n // \"id\": 5891843,\n // \"ctime\": 1637382379,\n // \"ftime\": 1637382673,\n // \"status\": \"canceled\"\n // }\n //\n // swap, future and option\n //\n // {\n // \"id\": \"82241928192\",\n // \"contract\": \"BTC_USDT\",\n // \"mkfr\": \"0\",\n // \"tkfr\": \"0.0005\",\n // \"tif\": \"gtc\",\n // \"is_reduce_only\": false,\n // \"create_time\": \"1635196145.06\",\n // \"finish_time\": \"1635196233.396\",\n // \"price\": \"61000\",\n // \"size\": \"4\",\n // \"refr\": \"0\",\n // \"left\": \"4\",\n // \"text\": \"web\",\n // \"fill_price\": \"0\",\n // \"user\": \"6693577\",\n // \"finish_as\": \"cancelled\",\n // \"status\": \"finished\",\n // \"is_liq\": false,\n // \"refu\": \"0\",\n // \"is_close\": false,\n // \"iceberg\": \"0\",\n // }\n //\n return this.parseOrder(response, market);\n }\n async cancelAllOrders(symbol = undefined, params = {}) {\n /**\n * @method\n * @name gate#cancelAllOrders\n * @description cancel all open orders\n * @see https://www.gate.io/docs/developers/apiv4/en/#cancel-all-open-orders-in-specified-currency-pair\n * @see https://www.gate.io/docs/developers/apiv4/en/#cancel-all-open-orders-matched\n * @see https://www.gate.io/docs/developers/apiv4/en/#cancel-all-open-orders-matched-2\n * @see https://www.gate.io/docs/developers/apiv4/en/#cancel-all-open-orders-matched-3\n * @param {string} symbol unified market symbol, only orders in the market of this symbol are cancelled when symbol is not undefined\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n await this.loadMarkets();\n const market = (symbol === undefined) ? undefined : this.market(symbol);\n const stop = this.safeValue(params, 'stop');\n params = this.omit(params, 'stop');\n const [type, query] = this.handleMarketTypeAndParams('cancelAllOrders', market, params);\n const [request, requestParams] = (type === 'spot') ? this.multiOrderSpotPrepareRequest(market, stop, query) : this.prepareRequest(market, type, query);\n let response = undefined;\n if (type === 'spot' || type === 'margin') {\n if (stop) {\n response = await this.privateSpotDeletePriceOrders(this.extend(request, requestParams));\n }\n else {\n response = await this.privateSpotDeleteOrders(this.extend(request, requestParams));\n }\n }\n else if (type === 'swap') {\n if (stop) {\n response = await this.privateFuturesDeleteSettlePriceOrders(this.extend(request, requestParams));\n }\n else {\n response = await this.privateFuturesDeleteSettleOrders(this.extend(request, requestParams));\n }\n }\n else if (type === 'future') {\n if (stop) {\n response = await this.privateDeliveryDeleteSettlePriceOrders(this.extend(request, requestParams));\n }\n else {\n response = await this.privateDeliveryDeleteSettleOrders(this.extend(request, requestParams));\n }\n }\n else if (type === 'option') {\n response = await this.privateOptionsDeleteOrders(this.extend(request, requestParams));\n }\n else {\n throw new MarketTypeNotSupportedError(type).exchange(this.id);\n }\n //\n // [\n // {\n // \"id\": 139797004085,\n // \"contract\": \"ADA_USDT\",\n // \"mkfr\": \"0\",\n // \"tkfr\": \"0.0005\",\n // \"tif\": \"gtc\",\n // \"is_reduce_only\": false,\n // \"create_time\": 1647911169.343,\n // \"finish_time\": 1647911226.849,\n // \"price\": \"0.8\",\n // \"size\": 1,\n // \"refr\": \"0.3\",\n // \"left\": 1,\n // \"text\": \"api\",\n // \"fill_price\": \"0\",\n // \"user\": 6693577,\n // \"finish_as\": \"cancelled\",\n // \"status\": \"finished\",\n // \"is_liq\": false,\n // \"refu\": 2436035,\n // \"is_close\": false,\n // \"iceberg\": 0\n // }\n // ...\n // ]\n //\n return this.parseOrders(response, market);\n }\n // https://www.gate.io/docs/developers/apiv4/#retrieve-sub-account-balances\n async fetchSubAccountBalances(uid, params = {}) {\n await this.loadMarkets();\n const response = await this.privateWalletGetSubAccountBalances({\n 'sub_uid': uid,\n });\n // [\n // {\n // \"uid\": \"10003\",\n // \"available\": {\n // \"BTC\": \"0.1\",\n // \"GT\": \"2000\",\n // \"USDT\": \"10\"\n // }\n // }\n // ]\n const result = {};\n const subAccount = this.safeValue(response, 0);\n const available = this.safeValue(subAccount, 'available', {});\n const keys = Object.keys(available);\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n const code = this.safeCurrencyCode(key);\n result[code] = {\n 'free': this.safeString(available, key),\n 'used': '0',\n 'total': this.safeString(available, key),\n };\n }\n return { 'spot': result };\n }\n // https://www.gate.io/docs/developers/apiv4/#list-sub-accounts\n async getSubAccounts() {\n await this.loadMarkets();\n const response = await this.privateSubAccountsGetSubAccounts();\n // [\n // {\n // \"remark\": \"remark\",\n // \"login_name\": \"sub_account_for_trades\",\n // \"user_id\": 10001,\n // \"state\": 1,\n // \"create_time\": 168888888\n // }\n // ]\n return response.map((subAccount) => ({\n 'uid': subAccount.user_id,\n }));\n }\n // https://www.gate.io/docs/developers/apiv4/#sub-account-transfers-to-sub-account\n // https://www.gate.io/docs/developers/apiv4/#transfer-between-main-and-sub-accounts\n async subAccountTransfer(code, amount, fromAccountType, toAccountType, fromUid, toUid, params = {}) {\n await this.loadMarkets();\n const currency = this.currency(code);\n const fromAccountTypeExt = this.convertTypeToAccount(fromAccountType);\n const toAccountTypeExt = this.convertTypeToAccount(toAccountType);\n const requestedAmount = this.currencyToPrecision(code, amount);\n const direction = fromUid === 'master' ? 'to' : 'from';\n const request = {\n 'currency': currency['id'],\n 'amount': requestedAmount,\n 'fromAccountType': fromAccountTypeExt,\n 'toAccountType': toAccountTypeExt,\n 'direction': direction,\n };\n if (fromUid !== 'master') {\n request['sub_account'] = fromUid;\n request['sub_account_type'] = fromAccountTypeExt;\n }\n if (toUid !== 'master') {\n request['sub_account'] = toUid;\n request['sub_account_type'] = toAccountTypeExt;\n }\n if (!('clientOid' in params)) {\n request['clientOid'] = this.uuid();\n }\n const response = await this.privateWalletPostSubAccountTransfers(this.extend(request, params));\n //\n // {\n // \"tx_id\": 59636381286\n // }\n //\n const transaction = this.parseTransfer(response, currency);\n return this.extend(transaction, {\n 'amount': requestedAmount,\n 'fromAccount': fromUid,\n 'toAccount': toUid,\n });\n }\n async transfer(code, amount, fromAccount, toAccount, params = {}) {\n /**\n * @method\n * @name gate#transfer\n * @description transfer currency internally between wallets on the same account\n * @see https://www.gate.io/docs/developers/apiv4/en/#transfer-between-trading-accounts\n * @param {string} code unified currency code for currency being transferred\n * @param {float} amount the amount of currency to transfer\n * @param {string} fromAccount the account to transfer currency from\n * @param {string} toAccount the account to transfer currency to\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {string} [params.symbol] Unified market symbol *required for type == margin*\n * @returns A [transfer structure]{@link https://docs.ccxt.com/#/?id=transfer-structure}\n */\n await this.loadMarkets();\n const currency = this.currency(code);\n const fromId = this.convertTypeToAccount(fromAccount);\n const toId = this.convertTypeToAccount(toAccount);\n const truncated = this.currencyToPrecision(code, amount);\n const request = {\n 'currency': currency['id'],\n 'amount': truncated,\n };\n if (!(fromId in this.options['accountsByType'])) {\n request['from'] = 'margin';\n request['currency_pair'] = fromId;\n }\n else {\n request['from'] = fromId;\n }\n if (!(toId in this.options['accountsByType'])) {\n request['to'] = 'margin';\n request['currency_pair'] = toId;\n }\n else {\n request['to'] = toId;\n }\n if (fromId === 'margin' || toId === 'margin') {\n const symbol = this.safeString2(params, 'symbol', 'currency_pair');\n if (symbol === undefined) {\n throw new InvalidParamsError('transfer requires params[\"symbol\"] for isolated margin transfers')\n .exchange(this.id);\n }\n const market = this.market(symbol);\n request['currency_pair'] = market['id'];\n params = this.omit(params, 'symbol');\n }\n if ((toId === 'futures') || (toId === 'delivery') || (fromId === 'futures') || (fromId === 'delivery')) {\n request['settle'] = currency['id'];\n }\n const response = await this.privateWalletPostTransfers(this.extend(request, params));\n //\n // according to the docs (however actual response seems to be an empty string '')\n //\n // {\n // \"currency\": \"BTC\",\n // \"from\": \"spot\",\n // \"to\": \"margin\",\n // \"amount\": \"1\",\n // \"currency_pair\": \"BTC_USDT\"\n // }\n //\n return this.parseTransfer(response, currency);\n }\n parseTransfer(transfer, currency = undefined) {\n //\n // {\n // \"currency\": \"BTC\",\n // \"from\": \"spot\",\n // \"to\": \"margin\",\n // \"amount\": \"1\",\n // \"currency_pair\": \"BTC_USDT\"\n // }\n //\n return {\n 'id': this.safeString(transfer, 'tx_id'),\n 'timestamp': undefined,\n 'datetime': undefined,\n 'currency': this.safeCurrencyCode(undefined, currency),\n 'amount': undefined,\n 'fromAccount': undefined,\n 'toAccount': undefined,\n 'status': undefined,\n 'info': transfer,\n };\n }\n async fetchPosition(symbol, params = {}) {\n /**\n * @method\n * @name gate#fetchPosition\n * @description fetch data on an open contract position\n * @see https://www.gate.io/docs/developers/apiv4/en/#get-single-position\n * @see https://www.gate.io/docs/developers/apiv4/en/#get-single-position-2\n * @see https://www.gate.io/docs/developers/apiv4/en/#get-specified-contract-position\n * @param {string} symbol unified market symbol of the market the position is held in\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} a [position structure]{@link https://docs.ccxt.com/#/?id=position-structure}\n */\n await this.loadMarkets();\n const market = this.market(symbol);\n if (!market['contract']) {\n throw new MarketTypeNotSupportedError(market['type'])\n .addMessage('fetchPosition() supports contract markets only')\n .exchange(this.id);\n }\n let request = {};\n [request, params] = this.prepareRequest(market, market['type'], params);\n const extendedRequest = this.extend(request, params);\n let response = undefined;\n if (market['swap']) {\n response = await this.privateFuturesGetSettlePositionsContract(extendedRequest);\n }\n else if (market['future']) {\n response = await this.privateDeliveryGetSettlePositionsContract(extendedRequest);\n }\n else if (market['type'] === 'option') {\n response = await this.privateOptionsGetPositionsContract(extendedRequest);\n }\n //\n // swap and future\n //\n // {\n // \"value\": \"4.60516\",\n // \"leverage\": \"0\",\n // \"mode\": \"single\",\n // \"realised_point\": \"0\",\n // \"contract\": \"BTC_USDT\",\n // \"entry_price\": \"46030.3\",\n // \"mark_price\": \"46051.6\",\n // \"history_point\": \"0\",\n // \"realised_pnl\": \"-0.002301515\",\n // \"close_order\": null,\n // \"size\": 1,\n // \"cross_leverage_limit\": \"0\",\n // \"pending_orders\": 0,\n // \"adl_ranking\": 5,\n // \"maintenance_rate\": \"0.004\",\n // \"unrealised_pnl\": \"0.00213\",\n // \"user\": 5691076,\n // \"leverage_max\": \"125\",\n // \"history_pnl\": \"0\",\n // \"risk_limit\": \"1000000\",\n // \"margin\": \"8.997698485\",\n // \"last_close_pnl\": \"0\",\n // \"liq_price\": \"0\",\n // \"update_time\": 1705034246,\n // \"update_id\": 1,\n // \"initial_margin\": \"0\",\n // \"maintenance_margin\": \"0\",\n // \"open_time\": 1705034246,\n // \"trade_max_size\": \"0\"\n // }\n //\n // option\n //\n // {\n // \"close_order\": null,\n // \"size\": 1,\n // \"vega\": \"5.29756\",\n // \"theta\": \"-98.98917\",\n // \"gamma\": \"0.00056\",\n // \"delta\": \"0.68691\",\n // \"contract\": \"BTC_USDT-20230602-26500-C\",\n // \"entry_price\": \"529\",\n // \"unrealised_pnl\": \"-1.0131\",\n // \"user\": 5691076,\n // \"mark_price\": \"427.69\",\n // \"underlying_price\": \"26810.2\",\n // \"underlying\": \"BTC_USDT\",\n // \"realised_pnl\": \"-0.08042877\",\n // \"mark_iv\": \"0.4224\",\n // \"pending_orders\": 0\n // }\n //\n return this.parsePosition(response, market);\n }\n async fetchPositions(symbols = undefined, params = {}) {\n /**\n * @method\n * @name gate#fetchPositions\n * @description fetch all open positions\n * @see https://www.gate.io/docs/developers/apiv4/en/#list-all-positions-of-a-user\n * @see https://www.gate.io/docs/developers/apiv4/en/#list-all-positions-of-a-user-2\n * @see https://www.gate.io/docs/developers/apiv4/en/#list-user-s-positions-of-specified-underlying\n * @param {string[]|undefined} symbols Not used by gate, but parsed internally by CCXT\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {string} [params.settle] 'btc' or 'usdt' - settle currency for perpetual swap and future - default=\"usdt\" for swap and \"btc\" for future\n * @param {string} [params.type] swap, future or option, if not provided this.options['defaultType'] is used\n * @returns {object[]} a list of [position structure]{@link https://docs.ccxt.com/#/?id=position-structure}\n */\n await this.loadMarkets();\n let market = undefined;\n symbols = this.marketSymbols(symbols, undefined, true, true, true);\n if (symbols !== undefined) {\n const symbolsLength = symbols.length;\n if (symbolsLength > 0) {\n market = this.market(symbols[0]);\n }\n }\n let type = undefined;\n let request = {};\n [type, params] = this.handleMarketTypeAndParams('fetchPositions', market, params);\n if ((type === undefined) || (type === 'spot')) {\n type = 'swap'; // default to swap\n }\n if (type === 'option') {\n if (symbols !== undefined) {\n const marketId = market['id'];\n const optionParts = marketId.split('-');\n request['underlying'] = this.safeString(optionParts, 0);\n }\n }\n else {\n [request, params] = this.prepareRequest(undefined, type, params);\n }\n let response = undefined;\n if (type === 'swap') {\n response = await this.privateFuturesGetSettlePositions(this.extend(request, params));\n }\n else if (type === 'future') {\n response = await this.privateDeliveryGetSettlePositions(this.extend(request, params));\n }\n else if (type === 'option') {\n response = await this.privateOptionsGetPositions(this.extend(request, params));\n }\n //\n // swap and future\n //\n // [\n // {\n // \"value\": \"4.602828\",\n // \"leverage\": \"0\",\n // \"mode\": \"single\",\n // \"realised_point\": \"0\",\n // \"contract\": \"BTC_USDT\",\n // \"entry_price\": \"46030.3\",\n // \"mark_price\": \"46028.28\",\n // \"history_point\": \"0\",\n // \"realised_pnl\": \"-0.002301515\",\n // \"close_order\": null,\n // \"size\": 1,\n // \"cross_leverage_limit\": \"0\",\n // \"pending_orders\": 0,\n // \"adl_ranking\": 5,\n // \"maintenance_rate\": \"0.004\",\n // \"unrealised_pnl\": \"-0.000202\",\n // \"user\": 5691076,\n // \"leverage_max\": \"125\",\n // \"history_pnl\": \"0\",\n // \"risk_limit\": \"1000000\",\n // \"margin\": \"8.997698485\",\n // \"last_close_pnl\": \"0\",\n // \"liq_price\": \"0\",\n // \"update_time\": 1705034246,\n // \"update_id\": 1,\n // \"initial_margin\": \"0\",\n // \"maintenance_margin\": \"0\",\n // \"open_time\": 1705034246,\n // \"trade_max_size\": \"0\"\n // }\n // ]\n //\n // option\n //\n // [\n // {\n // \"close_order\": null,\n // \"size\": 0,\n // \"vega\": \"0.01907\",\n // \"theta\": \"-3.04888\",\n // \"gamma\": \"0.00001\",\n // \"delta\": \"0.0011\",\n // \"contract\": \"BTC_USDT-20230601-27500-C\",\n // \"entry_price\": \"0\",\n // \"unrealised_pnl\": \"0\",\n // \"user\": 5691076,\n // \"mark_price\": \"0.07\",\n // \"underlying_price\": \"26817.27\",\n // \"underlying\": \"BTC_USDT\",\n // \"realised_pnl\": \"0\",\n // \"mark_iv\": \"0.4339\",\n // \"pending_orders\": 0\n // }\n // ]\n //\n return this.parsePositions(response, symbols);\n }\n parseMarginLoan(info, currency = undefined) {\n //\n // Cross\n //\n // {\n // \"id\": \"17\",\n // \"create_time\": 1620381696159,\n // \"update_time\": 1620381696159,\n // \"currency\": \"EOS\",\n // \"amount\": \"110.553635\",\n // \"text\": \"web\",\n // \"status\": 2,\n // \"repaid\": \"110.506649705159\",\n // \"repaid_interest\": \"0.046985294841\",\n // \"unpaid_interest\": \"0.0000074393366667\"\n // }\n //\n // Isolated\n //\n // {\n // \"id\": \"34267567\",\n // \"create_time\": \"1656394778\",\n // \"expire_time\": \"1657258778\",\n // \"status\": \"loaned\",\n // \"side\": \"borrow\",\n // \"currency\": \"USDT\",\n // \"rate\": \"0.0002\",\n // \"amount\": \"100\",\n // \"days\": 10,\n // \"auto_renew\": false,\n // \"currency_pair\": \"LTC_USDT\",\n // \"left\": \"0\",\n // \"repaid\": \"0\",\n // \"paid_interest\": \"0\",\n // \"unpaid_interest\": \"0.003333333333\"\n // }\n //\n const marginMode = this.safeString2(this.options, 'defaultMarginMode', 'marginMode', 'cross');\n let timestamp = this.safeInteger(info, 'create_time');\n if (marginMode === 'isolated') {\n timestamp = this.safeTimestamp(info, 'create_time');\n }\n const currencyId = this.safeString(info, 'currency');\n const marketId = this.safeString(info, 'currency_pair');\n return {\n 'id': this.safeInteger(info, 'id'),\n 'currency': this.safeCurrencyCode(currencyId, currency),\n 'amount': this.safeNumber(info, 'amount'),\n 'symbol': this.safeSymbol(marketId, undefined, '_', 'margin'),\n 'timestamp': timestamp,\n 'datetime': this.iso8601(timestamp),\n 'info': info,\n };\n }\n async sign(path, api = [], method = 'GET', params = {}, headers = undefined, body = undefined) {\n const authentication = api[0]; // public, private\n const type = api[1]; // spot, margin, future, delivery\n let query = this.omit(params, this.extractParams(path));\n if (Array.isArray(params)) {\n // endpoints like createOrders use an array instead of an object\n // so we infer the settle from one of the elements\n // they have to be all the same so relying on the first one is fine\n const first = this.safeValue(params, 0, {});\n path = this.implodeParams(path, first);\n }\n else {\n path = this.implodeParams(path, params);\n }\n const endPart = (path === '') ? '' : ('/' + path);\n let entirePath = '/' + type + endPart;\n if ((type === 'subAccounts') || (type === 'withdrawals')) {\n entirePath = endPart;\n }\n let url = this.urls['api'][authentication][type];\n if (url === undefined) {\n throw new InternalError()\n .addMessage('It does not have a testnet for the ' + type + ' market type.')\n .exchange(this.id);\n }\n url += entirePath;\n if (authentication === 'public') {\n if (Object.keys(query).length) {\n url += '?' + this.urlencode(query);\n }\n }\n else {\n this.checkRequiredCredentials();\n let queryString = '';\n let requiresURLEncoding = false;\n if (((type === 'futures') || (type === 'delivery')) && method === 'POST') {\n const pathParts = path.split('/');\n const secondPart = this.safeString(pathParts, 1, '');\n requiresURLEncoding = (secondPart.indexOf('dual') >= 0) || (secondPart.indexOf('positions') >= 0);\n }\n if ((method === 'GET') || (method === 'DELETE') || requiresURLEncoding || (method === 'PATCH')) {\n if (Object.keys(query).length) {\n queryString = this.urlencode(query);\n url += '?' + queryString;\n }\n if (method === 'PATCH') {\n body = this.json(query);\n }\n }\n else {\n const urlQueryParams = this.safeValue(query, 'query', {});\n if (Object.keys(urlQueryParams).length) {\n queryString = this.urlencode(urlQueryParams);\n url += '?' + queryString;\n }\n query = this.omit(query, 'query');\n body = this.json(query);\n }\n const bodyPayload = (body === undefined) ? '' : body;\n const bodySignature = this.hash(this.encode(bodyPayload), sha512);\n const timestampString = this.nonce().toString();\n const signaturePath = '/api/' + this.version + entirePath;\n const payloadArray = [method.toUpperCase(), signaturePath, queryString, bodySignature, timestampString];\n // eslint-disable-next-line quotes\n const payload = payloadArray.join(\"\\n\");\n let signature = undefined;\n if (this.externalSigner) {\n signature = await this.externalSigner.sign({\n 'payload': this.encode(payload),\n 'publicApiKey': this.apiKey,\n 'exchangeId': this.id,\n });\n }\n else {\n signature = this.hmac(this.encode(payload), this.encode(this.secret), sha512);\n }\n headers = {\n 'KEY': this.apiKey,\n 'Timestamp': timestampString,\n 'SIGN': signature,\n 'Content-Type': 'application/json',\n };\n }\n return { 'url': url, 'method': method, 'body': body, 'headers': headers };\n }\n async fetchLedger(code = undefined, since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name gate#fetchLedger\n * @description fetch the history of changes, actions done by the user or operations that altered the balance of the user\n * @see https://www.gate.io/docs/developers/apiv4/en/#query-account-book\n * @see https://www.gate.io/docs/developers/apiv4/en/#list-margin-account-balance-change-history\n * @see https://www.gate.io/docs/developers/apiv4/en/#query-account-book-2\n * @see https://www.gate.io/docs/developers/apiv4/en/#query-account-book-3\n * @see https://www.gate.io/docs/developers/apiv4/en/#list-account-changing-history\n * @param {string} code unified currency code\n * @param {int} [since] timestamp in ms of the earliest ledger entry\n * @param {int} [limit] max number of ledger entries to return\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {int} [params.until] end time in ms\n * @param {boolean} [params.paginate] default false, when true will automatically paginate by calling this endpoint multiple times. See in the docs all the [availble parameters](https://github.com/ccxt/ccxt/wiki/Manual#pagination-params)\n * @returns {object} a [ledger structure]{@link https://docs.ccxt.com/#/?id=ledger-structure}\n */\n await this.loadMarkets();\n let paginate = false;\n [paginate, params] = this.handleOptionAndParams(params, 'fetchLedger', 'paginate');\n if (paginate) {\n return await this.fetchPaginatedCallDynamic('fetchLedger', code, since, limit, params);\n }\n let type = undefined;\n let currency = undefined;\n let response = undefined;\n let request = {};\n [type, params] = this.handleMarketTypeAndParams('fetchLedger', undefined, params);\n if ((type === 'spot') || (type === 'margin')) {\n if (code !== undefined) {\n currency = this.currency(code);\n request['currency'] = currency['id'];\n }\n }\n if ((type === 'swap') || (type === 'future')) {\n const defaultSettle = (type === 'swap') ? 'usdt' : 'btc';\n const settle = this.safeStringLower(params, 'settle', defaultSettle);\n params = this.omit(params, 'settle');\n request['settle'] = settle;\n }\n if (since !== undefined) {\n request['from'] = since;\n }\n if (limit !== undefined) {\n request['limit'] = limit;\n }\n [request, params] = this.handleUntilOption('to', request, params);\n if (type === 'spot') {\n response = await this.privateSpotGetAccountBook(this.extend(request, params));\n }\n else if (type === 'margin') {\n response = await this.privateMarginGetAccountBook(this.extend(request, params));\n }\n else if (type === 'swap') {\n response = await this.privateFuturesGetSettleAccountBook(this.extend(request, params));\n }\n else if (type === 'future') {\n response = await this.privateDeliveryGetSettleAccountBook(this.extend(request, params));\n }\n else if (type === 'option') {\n response = await this.privateOptionsGetAccountBook(this.extend(request, params));\n }\n //\n // spot\n //\n // [\n // {\n // \"id\": \"123456\",\n // \"time\": 1547633726123,\n // \"currency\": \"BTC\",\n // \"change\": \"1.03\",\n // \"balance\": \"4.59316525194\",\n // \"type\": \"margin_in\"\n // }\n // ]\n //\n // margin\n //\n // [\n // {\n // \"id\": \"123456\",\n // \"time\": \"1547633726\",\n // \"time_ms\": 1547633726123,\n // \"currency\": \"BTC\",\n // \"currency_pair\": \"BTC_USDT\",\n // \"change\": \"1.03\",\n // \"balance\": \"4.59316525194\"\n // }\n // ]\n //\n // swap and future\n //\n // [\n // {\n // \"time\": 1682294400.123456,\n // \"change\": \"0.000010152188\",\n // \"balance\": \"4.59316525194\",\n // \"text\": \"ETH_USD:6086261\",\n // \"type\": \"fee\"\n // }\n // ]\n //\n // option\n //\n // [\n // {\n // \"time\": 1685594770,\n // \"change\": \"3.33\",\n // \"balance\": \"29.87911771\",\n // \"text\": \"BTC_USDT-20230602-26500-C:2611026125\",\n // \"type\": \"prem\"\n // }\n // ]\n //\n return this.parseLedger(response, currency, since, limit);\n }\n parseLedgerEntry(item, currency = undefined) {\n //\n // spot\n //\n // {\n // \"id\": \"123456\",\n // \"time\": 1547633726123,\n // \"currency\": \"BTC\",\n // \"change\": \"1.03\",\n // \"balance\": \"4.59316525194\",\n // \"type\": \"margin_in\"\n // }\n //\n // margin\n //\n // {\n // \"id\": \"123456\",\n // \"time\": \"1547633726\",\n // \"time_ms\": 1547633726123,\n // \"currency\": \"BTC\",\n // \"currency_pair\": \"BTC_USDT\",\n // \"change\": \"1.03\",\n // \"balance\": \"4.59316525194\"\n // }\n //\n // swap and future\n //\n // {\n // \"time\": 1682294400.123456,\n // \"change\": \"0.000010152188\",\n // \"balance\": \"4.59316525194\",\n // \"text\": \"ETH_USD:6086261\",\n // \"type\": \"fee\"\n // }\n //\n // option\n //\n // {\n // \"time\": 1685594770,\n // \"change\": \"3.33\",\n // \"balance\": \"29.87911771\",\n // \"text\": \"BTC_USDT-20230602-26500-C:2611026125\",\n // \"type\": \"prem\"\n // }\n //\n let direction = undefined;\n let amount = this.safeString(item, 'change');\n if (Precise.stringLt(amount, '0')) {\n direction = 'out';\n amount = Precise.stringAbs(amount);\n }\n else {\n direction = 'in';\n }\n const currencyId = this.safeString(item, 'currency');\n const type = this.safeString(item, 'type');\n const rawTimestamp = this.safeString(item, 'time');\n let timestamp = undefined;\n if (rawTimestamp.length > 10) {\n timestamp = parseInt(rawTimestamp);\n }\n else {\n timestamp = parseInt(rawTimestamp) * 1000;\n }\n const balanceString = this.safeString(item, 'balance');\n const changeString = this.safeString(item, 'change');\n const before = this.parseNumber(Precise.stringSub(balanceString, changeString));\n return {\n 'id': this.safeString(item, 'id'),\n 'direction': direction,\n 'account': undefined,\n 'referenceAccount': undefined,\n 'referenceId': undefined,\n 'type': this.parseLedgerEntryType(type),\n 'currency': this.safeCurrencyCode(currencyId, currency),\n 'amount': this.parseNumber(amount),\n 'timestamp': timestamp,\n 'datetime': this.iso8601(timestamp),\n 'before': before,\n 'after': this.safeNumber(item, 'balance'),\n 'status': undefined,\n 'fee': undefined,\n 'info': item,\n };\n }\n parseLedgerEntryType(type) {\n const ledgerType = {\n 'deposit': 'deposit',\n 'withdraw': 'withdrawal',\n 'sub_account_transfer': 'transfer',\n 'margin_in': 'transfer',\n 'margin_out': 'transfer',\n 'margin_funding_in': 'transfer',\n 'margin_funding_out': 'transfer',\n 'cross_margin_in': 'transfer',\n 'cross_margin_out': 'transfer',\n 'copy_trading_in': 'transfer',\n 'copy_trading_out': 'transfer',\n 'quant_in': 'transfer',\n 'quant_out': 'transfer',\n 'futures_in': 'transfer',\n 'futures_out': 'transfer',\n 'delivery_in': 'transfer',\n 'delivery_out': 'transfer',\n 'new_order': 'trade',\n 'order_fill': 'trade',\n 'referral_fee': 'rebate',\n 'order_fee': 'fee',\n 'interest': 'interest',\n 'lend': 'loan',\n 'redeem': 'loan',\n 'profit': 'interest',\n 'flash_swap_buy': 'trade',\n 'flash_swap_sell': 'trade',\n 'unknown': 'unknown',\n 'set': 'settlement',\n 'prem': 'trade',\n 'point_refr': 'rebate',\n 'point_fee': 'fee',\n 'point_dnw': 'deposit/withdraw',\n 'fund': 'fee',\n 'refr': 'rebate',\n 'fee': 'fee',\n 'pnl': 'trade',\n 'dnw': 'deposit/withdraw',\n };\n return this.safeString(ledgerType, type, type);\n }\n handleErrors(code, reason, url, method, headers, body, response, requestHeaders, requestBody) {\n if (response === undefined) {\n return undefined;\n }\n //\n // {\"label\": \"ORDER_NOT_FOUND\", \"message\": \"Order not found\"}\n // {\"label\": \"INVALID_PARAM_VALUE\", \"message\": \"invalid argument: status\"}\n // {\"label\": \"INVALID_PARAM_VALUE\", \"message\": \"invalid argument: Trigger.rule\"}\n // {\"label\": \"INVALID_PARAM_VALUE\", \"message\": \"invalid argument: trigger.expiration invalid range\"}\n // {\"label\": \"INVALID_ARGUMENT\", \"detail\": \"invalid size\"}\n //\n const label = this.safeString(response, 'label');\n if (label !== undefined) {\n const message = this.safeString(response, 'message');\n const userMessage = label + ': ' + message;\n // INVALID_PARAM can be related to more specific errors based on the user message\n this.throwBroadlyMatchedException(this.exceptions['broad'], userMessage, userMessage);\n this.throwExactlyMatchedException(this.exceptions['exact'], label, userMessage);\n throw new ExchangeError().addMessage(userMessage).exchange(this.id);\n }\n return undefined;\n }\n}\n","// ----------------------------------------------------------------------------\n\n// PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:\n// https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code\n// EDIT THE CORRESPONDENT .ts FILE INSTEAD\n\n// -------------------------------------------------------------------------------\nimport { Exchange as _Exchange } from '../base/Exchange.js';\nclass Exchange extends _Exchange {\n}\nexport default Exchange;\n","// ----------------------------------------------------------------------------\n\n// PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:\n// https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code\n// EDIT THE CORRESPONDENT .ts FILE INSTEAD\n\n// -------------------------------------------------------------------------------\nimport { Exchange as _Exchange } from '../base/Exchange.js';\nclass Exchange extends _Exchange {\n}\nexport default Exchange;\n","// ----------------------------------------------------------------------------\n\n// PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:\n// https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code\n// EDIT THE CORRESPONDENT .ts FILE INSTEAD\n\n// -------------------------------------------------------------------------------\nimport { Exchange as _Exchange } from '../base/Exchange.js';\nclass Exchange extends _Exchange {\n}\nexport default Exchange;\n","// ----------------------------------------------------------------------------\n\n// PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:\n// https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code\n// EDIT THE CORRESPONDENT .ts FILE INSTEAD\n\n// -------------------------------------------------------------------------------\nimport { Exchange as _Exchange } from '../base/Exchange.js';\nclass Exchange extends _Exchange {\n}\nexport default Exchange;\n","// ----------------------------------------------------------------------------\n\n// PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:\n// https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code\n// EDIT THE CORRESPONDENT .ts FILE INSTEAD\n\n// -------------------------------------------------------------------------------\nimport { Exchange as _Exchange } from '../base/Exchange.js';\nclass Exchange extends _Exchange {\n}\nexport default Exchange;\n","// ----------------------------------------------------------------------------\n\n// PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:\n// https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code\n// EDIT THE CORRESPONDENT .ts FILE INSTEAD\n\n/*\n\nMIT License\n\nCopyright (c) 2017 Igor Kroitor\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\n*/\n//-----------------------------------------------------------------------------\n/* eslint-disable */\nimport { Exchange } from \"./src/base/Exchange.js\";\nimport { Precise } from \"./src/base/Precise.js\";\nimport * as functions from \"./src/base/functions.js\";\nimport { Throttler } from \"./src/base/functions/customThrottle.js\";\nimport { CustomThrottlePriority } from \"./src/base/types.js\";\nimport * as errors from \"./src/sdk/errors.js\";\n//-----------------------------------------------------------------------------\nimport binance from \"./src/binance.js\";\nimport bitfinex2 from \"./src/bitfinex2.js\";\nimport bitget from \"./src/bitget.js\";\nimport bitmart from \"./src/bitmart.js\";\nimport bitstamp from \"./src/bitstamp.js\";\nimport bybit from \"./src/bybit.js\";\nimport coinbase from \"./src/coinbase.js\";\nimport coinbaseexchange from \"./src/coinbaseexchange.js\";\nimport gate from \"./src/gate.js\";\nimport gateio from \"./src/gateio.js\";\nimport htx from \"./src/htx.js\";\nimport kraken from \"./src/kraken.js\";\nimport kucoin from \"./src/kucoin.js\";\nimport mexc from \"./src/mexc.js\";\nimport okx from \"./src/okx.js\";\n// this is updated by vss.js when building\nconst version = \"4.2.44\";\nExchange.ccxtVersion = version;\n//-----------------------------------------------------------------------------\nconst exchanges = {\n 'binance': binance,\n 'bitfinex2': bitfinex2,\n 'bitget': bitget,\n 'bitmart': bitmart,\n 'bitstamp': bitstamp,\n 'bybit': bybit,\n 'coinbase': coinbase,\n 'coinbaseexchange': coinbaseexchange,\n 'gate': gate,\n 'gateio': gateio,\n 'htx': htx,\n 'kraken': kraken,\n 'kucoin': kucoin,\n 'mexc': mexc,\n 'okx': okx,\n};\nconst ccxt = Object.assign({ errors, version, Exchange, Precise, exchanges: Object.keys(exchanges), ...errors }, exchanges, functions);\nexport { errors, version, Exchange, exchanges, Precise, functions, CustomThrottlePriority, Throttler, binance, bitfinex2, bitget, bitmart, bitstamp, bybit, coinbase, coinbaseexchange, gate, gateio, htx, kraken, kucoin, mexc, okx, };\nexport default ccxt;\n// Export all the SDK errors\nexport * from \"./src/sdk/errors.js\";\n// Export all the SDK errors data\nexport * from \"./src/sdk/errorsMetadata.js\";\n//-----------------------------------------------------------------------------\n","// ----------------------------------------------------------------------------\n\n// PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:\n// https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code\n// EDIT THE CORRESPONDENT .ts FILE INSTEAD\n\n// ---------------------------------------------------------------------------\nimport Exchange from './abstract/binance.js';\nimport { Precise } from './base/Precise.js';\nimport { eddsa } from './base/functions/crypto.js';\nimport { DECIMAL_PLACES, TRUNCATE } from './base/functions/number.js';\nimport { rsa } from './base/functions/rsa.js';\nimport { AuthenticationError, ExchangeAccountSuspendedError, ExchangeDDosProtectionError, ExchangeError, ExchangeInvalidNonceError, ExchangeInvalidPermissionsError, ExchangeNotAllowedMethodError, ExchangeOperationFailedError, ExchangeRateLimitExceededError, ExchangeTransferError, ExchangeTransferNotAllowedError, ExchangeUnavailableInCountry, ExchangeUnderMaintenanceError, ExchangeUnknownAssetError, GetDepositAddressError, InsufficientBalanceError, InternalError, InvalidAddressError, InvalidCredentialsError, InvalidParamsError, MarketError, MarketNotFoundError, MarketNotLoadedError, MarketTypeNotSupportedError, OrderNotFoundError, OverWithdrawMaximumError, TradeError, WhitelistCheckFailedError, WithdrawalError, WithdrawalForbiddenError, WithdrawalNotFoundError } from './sdk/errors.js';\nimport { SdkErrorMessages } from './sdk/errorsMetadata.js';\nimport { ed25519 } from './static_dependencies/noble-curves/ed25519.js';\nimport { sha256 } from './static_dependencies/noble-hashes/sha256.js';\n// ---------------------------------------------------------------------------\n/**\n * @class binance\n * @augments Exchange\n */\nexport default class binance extends Exchange {\n describe() {\n return this.deepExtend(super.describe(), {\n 'id': 'binance',\n 'name': 'Binance',\n 'countries': ['JP', 'MT'],\n 'rateLimit': 50,\n 'certified': true,\n 'pro': true,\n // new metainfo2 interface\n 'has': {\n 'CORS': undefined,\n 'spot': true,\n 'margin': true,\n 'swap': true,\n 'future': true,\n 'option': true,\n 'cancelAllOrders': true,\n 'cancelOrder': true,\n 'cancelOrders': true,\n 'createDepositAddress': false,\n 'createMarketBuyOrderWithCost': true,\n 'createMarketOrderWithCost': true,\n 'createMarketSellOrderWithCost': true,\n 'createOrder': true,\n 'createOrders': true,\n 'createTakeProfitOrder': true,\n 'createTrailingPercentOrder': true,\n 'createTriggerOrder': true,\n 'editOrder': true,\n 'fetchAccounts': undefined,\n 'fetchBalance': true,\n 'fetchCanceledOrders': 'emulated',\n 'fetchClosedOrder': false,\n 'fetchClosedOrders': 'emulated',\n 'fetchCurrencies': true,\n 'fetchDeposit': false,\n 'fetchDepositAddress': true,\n 'fetchDepositAddresses': false,\n 'fetchDepositAddressesByNetwork': false,\n 'fetchDeposits': true,\n 'fetchDepositsWithdrawals': false,\n 'fetchDepositWithdrawFee': 'emulated',\n 'fetchDepositWithdrawFees': true,\n 'fetchLedger': true,\n 'fetchMarkets': true,\n 'fetchMyTrades': true,\n 'fetchOHLCV': true,\n 'fetchOpenOrder': false,\n 'fetchOpenOrders': true,\n 'fetchOrder': true,\n 'fetchOrderBook': true,\n 'fetchOrderBooks': false,\n 'fetchOrders': true,\n 'fetchOrderTrades': true,\n 'fetchPosition': true,\n 'fetchPositions': true,\n 'fetchPositionsRisk': true,\n 'fetchStatus': true,\n 'fetchTicker': true,\n 'fetchTickers': true,\n 'fetchTime': true,\n 'fetchTrades': true,\n 'fetchTradingFee': true,\n 'fetchTradingFees': true,\n 'fetchTradingLimits': undefined,\n 'fetchTransactionFee': undefined,\n 'fetchTransactionFees': true,\n 'fetchTransactions': false,\n 'fetchTransfers': true,\n 'fetchWithdrawAddresses': false,\n 'fetchWithdrawal': false,\n 'fetchWithdrawals': true,\n 'fetchWithdrawalWhitelist': false,\n 'transfer': true,\n 'withdraw': true,\n },\n 'timeframes': {\n '1s': '1s',\n '1m': '1m',\n '3m': '3m',\n '5m': '5m',\n '15m': '15m',\n '30m': '30m',\n '1h': '1h',\n '2h': '2h',\n '4h': '4h',\n '6h': '6h',\n '8h': '8h',\n '12h': '12h',\n '1d': '1d',\n '3d': '3d',\n '1w': '1w',\n '1M': '1M',\n },\n 'urls': {\n 'logo': 'https://user-images.githubusercontent.com/1294454/29604020-d5483cdc-87ee-11e7-94c7-d1a8d9169293.jpg',\n 'test': {\n 'dapiPublic': 'https://testnet.binancefuture.com/dapi/v1',\n 'dapiPrivate': 'https://testnet.binancefuture.com/dapi/v1',\n 'dapiPrivateV2': 'https://testnet.binancefuture.com/dapi/v2',\n 'fapiPublic': 'https://testnet.binancefuture.com/fapi/v1',\n 'fapiPublicV2': 'https://testnet.binancefuture.com/fapi/v2',\n 'fapiPrivate': 'https://testnet.binancefuture.com/fapi/v1',\n 'fapiPrivateV2': 'https://testnet.binancefuture.com/fapi/v2',\n 'public': 'https://testnet.binance.vision/api/v3',\n 'private': 'https://testnet.binance.vision/api/v3',\n 'v1': 'https://testnet.binance.vision/api/v1',\n },\n 'api': {\n 'sapi': 'https://api.binance.com/sapi/v1',\n 'sapiV2': 'https://api.binance.com/sapi/v2',\n 'sapiV3': 'https://api.binance.com/sapi/v3',\n 'sapiV4': 'https://api.binance.com/sapi/v4',\n 'dapiPublic': 'https://dapi.binance.com/dapi/v1',\n 'dapiPrivate': 'https://dapi.binance.com/dapi/v1',\n 'eapiPublic': 'https://eapi.binance.com/eapi/v1',\n 'eapiPrivate': 'https://eapi.binance.com/eapi/v1',\n 'dapiPrivateV2': 'https://dapi.binance.com/dapi/v2',\n 'dapiData': 'https://dapi.binance.com/futures/data',\n 'fapiPublic': 'https://fapi.binance.com/fapi/v1',\n 'fapiPublicV2': 'https://fapi.binance.com/fapi/v2',\n 'fapiPrivate': 'https://fapi.binance.com/fapi/v1',\n 'fapiData': 'https://fapi.binance.com/futures/data',\n 'fapiPrivateV2': 'https://fapi.binance.com/fapi/v2',\n 'public': 'https://api.binance.com/api/v3',\n 'private': 'https://api.binance.com/api/v3',\n 'v1': 'https://api.binance.com/api/v1',\n 'papi': 'https://papi.binance.com/papi/v1',\n },\n 'www': 'https://www.binance.com',\n 'referral': {\n // https://accounts.binance.com/en/register?ref=D7YA7CLY - I removed the code for now, because CWS is blocking until we explain our affiliate program to our users\n 'url': 'https://accounts.binance.com/en/register',\n 'discount': 0.1,\n },\n 'doc': [\n 'https://binance-docs.github.io/apidocs/spot/en',\n ],\n 'api_management': 'https://www.binance.com/en/usercenter/settings/api-management',\n 'fees': 'https://www.binance.com/en/fee/schedule',\n },\n 'api': {\n // the API structure below will need 3-layer apidefs\n 'sapi': {\n // IP (sapi) request rate limit of 12 000 per minute\n // 1 IP (sapi) => cost = 0.1 => (1000 / (50 * 0.1)) * 60 = 12000\n // 10 IP (sapi) => cost = 1\n // UID (sapi) request rate limit of 180 000 per minute\n // 1 UID (sapi) => cost = 0.006667 => (1000 / (50 * 0.006667)) * 60 = 180000\n 'get': {\n 'system/status': 0.1,\n // these endpoints require this.apiKey\n 'accountSnapshot': 240,\n 'margin/asset': 1,\n 'margin/pair': 1,\n 'margin/allAssets': 0.1,\n 'margin/allPairs': 0.1,\n 'margin/priceIndex': 1,\n // these endpoints require this.apiKey + this.secret\n 'spot/delist-schedule': 10,\n 'asset/assetDividend': 1,\n 'asset/dribblet': 0.1,\n 'asset/transfer': 0.1,\n 'asset/assetDetail': 0.1,\n 'asset/tradeFee': 0.1,\n 'asset/ledger-transfer/cloud-mining/queryByPage': 4.0002,\n 'asset/convert-transfer/queryByPage': 0.033335,\n 'asset/wallet/balance': 6,\n 'asset/custody/transfer-history': 6,\n 'margin/borrow-repay': 1,\n 'margin/loan': 1,\n 'margin/repay': 1,\n 'margin/account': 1,\n 'margin/transfer': 0.1,\n 'margin/interestHistory': 0.1,\n 'margin/forceLiquidationRec': 0.1,\n 'margin/order': 1,\n 'margin/openOrders': 1,\n 'margin/allOrders': 20,\n 'margin/myTrades': 1,\n 'margin/maxBorrowable': 5,\n 'margin/maxTransferable': 5,\n 'margin/tradeCoeff': 1,\n 'margin/isolated/transfer': 0.1,\n 'margin/isolated/account': 1,\n 'margin/isolated/pair': 1,\n 'margin/isolated/allPairs': 1,\n 'margin/isolated/accountLimit': 0.1,\n 'margin/interestRateHistory': 0.1,\n 'margin/orderList': 1,\n 'margin/allOrderList': 20,\n 'margin/openOrderList': 1,\n 'margin/crossMarginData': { 'cost': 0.1, 'noCoin': 0.5 },\n 'margin/isolatedMarginData': { 'cost': 0.1, 'noCoin': 1 },\n 'margin/isolatedMarginTier': 0.1,\n 'margin/rateLimit/order': 2,\n 'margin/dribblet': 0.1,\n 'margin/dust': 20.001,\n 'margin/crossMarginCollateralRatio': 10,\n 'margin/exchange-small-liability': 0.6667,\n 'margin/exchange-small-liability-history': 0.6667,\n 'margin/next-hourly-interest-rate': 0.6667,\n 'margin/capital-flow': 10,\n 'margin/delist-schedule': 10,\n 'margin/available-inventory': 0.3334,\n 'margin/leverageBracket': 0.1,\n 'loan/vip/loanable/data': 40,\n 'loan/vip/collateral/data': 40,\n 'loan/vip/request/data': 2.6668,\n 'loan/vip/request/interestRate': 2.6668,\n 'loan/income': 40.002,\n 'loan/ongoing/orders': 40,\n 'loan/ltv/adjustment/history': 40,\n 'loan/borrow/history': 40,\n 'loan/repay/history': 40,\n 'loan/loanable/data': 40,\n 'loan/collateral/data': 40,\n 'loan/repay/collateral/rate': 600,\n 'loan/flexible/ongoing/orders': 30,\n 'loan/flexible/borrow/history': 40,\n 'loan/flexible/repay/history': 40,\n 'loan/flexible/ltv/adjustment/history': 40,\n 'loan/flexible/loanable/data': 40,\n 'loan/flexible/collateral/data': 40,\n 'loan/vip/ongoing/orders': 40,\n 'loan/vip/repay/history': 40,\n 'loan/vip/collateral/account': 600,\n 'fiat/orders': 600.03,\n 'fiat/payments': 0.1,\n 'futures/transfer': 1,\n 'futures/histDataLink': 0.1,\n 'rebate/taxQuery': 80.004,\n // https://binance-docs.github.io/apidocs/spot/en/#withdraw-sapi\n 'capital/config/getall': 1,\n 'capital/deposit/address': 1,\n 'capital/deposit/address/list': 1,\n 'capital/deposit/hisrec': 0.1,\n 'capital/deposit/subAddress': 0.1,\n 'capital/deposit/subHisrec': 0.1,\n 'capital/withdraw/history': 2,\n 'capital/withdraw/address/list': 1,\n 'capital/contract/convertible-coins': 4.0002,\n 'convert/tradeFlow': 20.001,\n 'convert/exchngeInfo': 50,\n 'convert/assetInfo': 10,\n 'convert/orderStatus': 0.6667,\n 'convert/limit/queryOpenOrders': 20.001,\n 'account/status': 0.1,\n 'account/apiTradingStatus': 0.1,\n 'account/apiRestrictions/ipRestriction': 0.1,\n 'bnbBurn': 0.1,\n 'sub-account/futures/account': 1,\n 'sub-account/futures/accountSummary': 0.1,\n 'sub-account/futures/positionRisk': 1,\n 'sub-account/futures/internalTransfer': 0.1,\n 'sub-account/list': 0.1,\n 'sub-account/margin/account': 1,\n 'sub-account/margin/accountSummary': 1,\n 'sub-account/spotSummary': 0.1,\n 'sub-account/status': 1,\n 'sub-account/sub/transfer/history': 0.1,\n 'sub-account/transfer/subUserHistory': 0.1,\n 'sub-account/universalTransfer': 0.1,\n 'sub-account/apiRestrictions/ipRestriction/thirdPartyList': 1,\n 'sub-account/transaction-statistics': 0.40002,\n 'sub-account/subAccountApi/ipRestriction': 20.001,\n 'managed-subaccount/asset': 0.1,\n 'managed-subaccount/accountSnapshot': 240,\n 'managed-subaccount/queryTransLogForInvestor': 0.1,\n 'managed-subaccount/queryTransLogForTradeParent': 0.40002,\n 'managed-subaccount/fetch-future-asset': 0.40002,\n 'managed-subaccount/marginAsset': 0.1,\n 'managed-subaccount/info': 0.40002,\n 'managed-subaccount/deposit/address': 0.006667,\n 'managed-subaccount/query-trans-log': 0.40002,\n // lending endpoints\n 'lending/project/list': 0.1,\n 'lending/project/position/list': 0.1,\n // eth-staking\n 'eth-staking/eth/history/stakingHistory': 15,\n 'eth-staking/eth/history/redemptionHistory': 15,\n 'eth-staking/eth/history/rewardsHistory': 15,\n 'eth-staking/eth/quota': 15,\n 'eth-staking/eth/history/rateHistory': 15,\n 'eth-staking/account': 15,\n 'eth-staking/wbeth/history/wrapHistory': 15,\n 'eth-staking/wbeth/history/unwrapHistory': 15,\n 'eth-staking/eth/history/wbethRewardsHistory': 15,\n // mining endpoints\n 'mining/pub/algoList': 0.1,\n 'mining/pub/coinList': 0.1,\n 'mining/worker/detail': 0.5,\n 'mining/worker/list': 0.5,\n 'mining/payment/list': 0.5,\n 'mining/statistics/user/status': 0.5,\n 'mining/statistics/user/list': 0.5,\n 'mining/payment/uid': 0.5,\n // liquid swap endpoints\n 'bswap/pools': 0.1,\n 'bswap/liquidity': { 'cost': 0.1, 'noPoolId': 1 },\n 'bswap/liquidityOps': 20.001,\n 'bswap/quote': 1.00005,\n 'bswap/swap': 20.001,\n 'bswap/poolConfigure': 1.00005,\n 'bswap/addLiquidityPreview': 1.00005,\n 'bswap/removeLiquidityPreview': 1.00005,\n 'bswap/unclaimedRewards': 6.667,\n 'bswap/claimedHistory': 6.667,\n // leveraged token endpoints\n 'blvt/tokenInfo': 0.1,\n 'blvt/subscribe/record': 0.1,\n 'blvt/redeem/record': 0.1,\n 'blvt/userLimit': 0.1,\n // broker api TODO (NOT IN DOCS)\n 'apiReferral/ifNewUser': 1,\n 'apiReferral/customization': 1,\n 'apiReferral/userCustomization': 1,\n 'apiReferral/rebate/recentRecord': 1,\n 'apiReferral/rebate/historicalRecord': 1,\n 'apiReferral/kickback/recentRecord': 1,\n 'apiReferral/kickback/historicalRecord': 1,\n // brokerage API TODO https://binance-docs.github.io/Brokerage-API/General/ does not state ratelimits\n 'broker/subAccountApi': 1,\n 'broker/subAccount': 1,\n 'broker/subAccountApi/commission/futures': 1,\n 'broker/subAccountApi/commission/coinFutures': 1,\n 'broker/info': 1,\n 'broker/transfer': 1,\n 'broker/transfer/futures': 1,\n 'broker/rebate/recentRecord': 1,\n 'broker/rebate/historicalRecord': 1,\n 'broker/subAccount/bnbBurn/status': 1,\n 'broker/subAccount/depositHist': 1,\n 'broker/subAccount/spotSummary': 1,\n 'broker/subAccount/marginSummary': 1,\n 'broker/subAccount/futuresSummary': 1,\n 'broker/rebate/futures/recentRecord': 1,\n 'broker/subAccountApi/ipRestriction': 1,\n 'broker/universalTransfer': 1,\n // v2 not supported yet\n // GET /sapi/v2/broker/subAccount/futuresSummary\n 'account/apiRestrictions': 0.1,\n // c2c / p2p\n 'c2c/orderMatch/listUserOrderHistory': 0.1,\n // nft endpoints\n 'nft/history/transactions': 20.001,\n 'nft/history/deposit': 20.001,\n 'nft/history/withdraw': 20.001,\n 'nft/user/getAsset': 20.001,\n 'pay/transactions': 20.001,\n 'giftcard/verify': 0.1,\n 'giftcard/cryptography/rsa-public-key': 0.1,\n 'giftcard/buyCode/token-limit': 0.1,\n 'algo/spot/openOrders': 0.1,\n 'algo/spot/historicalOrders': 0.1,\n 'algo/spot/subOrders': 0.1,\n 'algo/futures/openOrders': 0.1,\n 'algo/futures/historicalOrders': 0.1,\n 'algo/futures/subOrders': 0.1,\n 'portfolio/account': 0.1,\n 'portfolio/collateralRate': 5,\n 'portfolio/pmLoan': 3.3335,\n 'portfolio/interest-history': 0.6667,\n 'portfolio/asset-index-price': 0.1,\n 'portfolio/repay-futures-switch': 3,\n 'portfolio/margin-asset-leverage': 5,\n // staking\n 'staking/productList': 0.1,\n 'staking/position': 0.1,\n 'staking/stakingRecord': 0.1,\n 'staking/personalLeftQuota': 0.1,\n 'lending/auto-invest/target-asset/list': 0.1,\n 'lending/auto-invest/target-asset/roi/list': 0.1,\n 'lending/auto-invest/all/asset': 0.1,\n 'lending/auto-invest/source-asset/list': 0.1,\n 'lending/auto-invest/plan/list': 0.1,\n 'lending/auto-invest/plan/id': 0.1,\n 'lending/auto-invest/history/list': 0.1,\n 'lending/auto-invest/index/info': 0.1,\n 'lending/auto-invest/index/user-summary': 0.1,\n 'lending/auto-invest/one-off/status': 0.1,\n 'lending/auto-invest/redeem/history': 0.1,\n 'lending/auto-invest/rebalance/history': 0.1,\n // simple earn\n 'simple-earn/flexible/list': 15,\n 'simple-earn/locked/list': 15,\n 'simple-earn/flexible/personalLeftQuota': 15,\n 'simple-earn/locked/personalLeftQuota': 15,\n 'simple-earn/flexible/subscriptionPreview': 15,\n 'simple-earn/locked/subscriptionPreview': 15,\n 'simple-earn/flexible/history/rateHistory': 15,\n 'simple-earn/flexible/position': 15,\n 'simple-earn/locked/position': 15,\n 'simple-earn/account': 15,\n 'simple-earn/flexible/history/subscriptionRecord': 15,\n 'simple-earn/locked/history/subscriptionRecord': 15,\n 'simple-earn/flexible/history/redemptionRecord': 15,\n 'simple-earn/locked/history/redemptionRecord': 15,\n 'simple-earn/flexible/history/rewardsRecord': 15,\n 'simple-earn/locked/history/rewardsRecord': 15,\n 'simple-earn/flexible/history/collateralRecord': 0.1,\n },\n 'post': {\n 'asset/dust': 0.06667,\n 'asset/dust-btc': 0.1,\n 'asset/transfer': 6.0003,\n 'asset/get-funding-asset': 0.1,\n 'asset/convert-transfer': 0.033335,\n 'account/disableFastWithdrawSwitch': 0.1,\n 'account/enableFastWithdrawSwitch': 0.1,\n // 'account/apiRestrictions/ipRestriction': 1, discontinued\n // 'account/apiRestrictions/ipRestriction/ipList': 1, discontinued\n 'capital/withdraw/apply': 4.0002,\n 'capital/contract/convertible-coins': 4.0002,\n 'capital/deposit/credit-apply': 0.1,\n 'margin/borrow-repay': 20.001,\n 'margin/transfer': 4.0002,\n 'margin/loan': 20.001,\n 'margin/repay': 20.001,\n 'margin/order': 0.040002,\n 'margin/order/oco': 0.040002,\n 'margin/dust': 20.001,\n 'margin/exchange-small-liability': 20.001,\n // 'margin/isolated/create': 1, discontinued\n 'margin/isolated/transfer': 4.0002,\n 'margin/isolated/account': 2.0001,\n 'margin/max-leverage': 300,\n 'bnbBurn': 0.1,\n 'sub-account/virtualSubAccount': 0.1,\n 'sub-account/margin/transfer': 4.0002,\n 'sub-account/margin/enable': 0.1,\n 'sub-account/futures/enable': 0.1,\n 'sub-account/futures/transfer': 0.1,\n 'sub-account/futures/internalTransfer': 0.1,\n 'sub-account/transfer/subToSub': 0.1,\n 'sub-account/transfer/subToMaster': 0.1,\n 'sub-account/universalTransfer': 0.1,\n 'sub-account/options/enable': 0.1,\n 'managed-subaccount/deposit': 0.1,\n 'managed-subaccount/withdraw': 0.1,\n 'userDataStream': 0.1,\n 'userDataStream/isolated': 0.1,\n 'futures/transfer': 0.1,\n // lending\n 'lending/customizedFixed/purchase': 0.1,\n // liquid swap endpoints\n 'bswap/liquidityAdd': 60,\n 'bswap/liquidityRemove': 60,\n 'bswap/swap': 60,\n 'bswap/claimRewards': 6.667,\n // leveraged token endpoints\n 'blvt/subscribe': 0.1,\n 'blvt/redeem': 0.1,\n // brokerage API TODO: NO MENTION OF RATELIMITS IN BROKERAGE DOCS\n 'apiReferral/customization': 1,\n 'apiReferral/userCustomization': 1,\n 'apiReferral/rebate/historicalRecord': 1,\n 'apiReferral/kickback/historicalRecord': 1,\n 'broker/subAccount': 1,\n 'broker/subAccount/margin': 1,\n 'broker/subAccount/futures': 1,\n 'broker/subAccountApi': 1,\n 'broker/subAccountApi/permission': 1,\n 'broker/subAccountApi/commission': 1,\n 'broker/subAccountApi/commission/futures': 1,\n 'broker/subAccountApi/commission/coinFutures': 1,\n 'broker/transfer': 1,\n 'broker/transfer/futures': 1,\n 'broker/rebate/historicalRecord': 1,\n 'broker/subAccount/bnbBurn/spot': 1,\n 'broker/subAccount/bnbBurn/marginInterest': 1,\n 'broker/subAccount/blvt': 1,\n 'broker/subAccountApi/ipRestriction': 1,\n 'broker/subAccountApi/ipRestriction/ipList': 1,\n 'broker/universalTransfer': 1,\n 'broker/subAccountApi/permission/universalTransfer': 1,\n 'broker/subAccountApi/permission/vanillaOptions': 1,\n //\n 'giftcard/createCode': 0.1,\n 'giftcard/redeemCode': 0.1,\n 'giftcard/buyCode': 0.1,\n 'algo/spot/newOrderTwap': 20.001,\n 'algo/futures/newOrderVp': 20.001,\n 'algo/futures/newOrderTwap': 20.001,\n // staking\n 'staking/purchase': 0.1,\n 'staking/redeem': 0.1,\n 'staking/setAutoStaking': 0.1,\n // eth-staking\n 'eth-staking/eth/stake': 15,\n 'eth-staking/eth/redeem': 15,\n 'eth-staking/wbeth/wrap': 15,\n // mining endpoints\n 'mining/hash-transfer/config': 0.5,\n 'mining/hash-transfer/config/cancel': 0.5,\n 'portfolio/repay': 20.001,\n 'loan/vip/renew': 40.002,\n 'loan/vip/borrow': 40.002,\n 'loan/borrow': 40.002,\n 'loan/repay': 40.002,\n 'loan/adjust/ltv': 40.002,\n 'loan/customize/margin_call': 40.002,\n 'loan/flexible/borrow': 40.002,\n 'loan/flexible/repay': 40.002,\n 'loan/flexible/adjust/ltv': 40.002,\n 'loan/vip/repay': 40.002,\n 'convert/getQuote': 1.3334,\n 'convert/acceptQuote': 3.3335,\n 'convert/limit/placeOrder': 3.3335,\n 'convert/limit/cancelOrder': 1.3334,\n 'portfolio/auto-collection': 150,\n 'portfolio/asset-collection': 6,\n 'portfolio/bnb-transfer': 150,\n 'portfolio/repay-futures-switch': 150,\n 'portfolio/repay-futures-negative-balance': 150,\n 'lending/auto-invest/plan/add': 0.1,\n 'lending/auto-invest/plan/edit': 0.1,\n 'lending/auto-invest/plan/edit-status': 0.1,\n 'lending/auto-invest/one-off': 0.1,\n 'lending/auto-invest/redeem': 0.1,\n // simple earn\n 'simple-earn/flexible/subscribe': 0.1,\n 'simple-earn/locked/subscribe': 0.1,\n 'simple-earn/flexible/redeem': 0.1,\n 'simple-earn/locked/redeem': 0.1,\n 'simple-earn/flexible/setAutoSubscribe': 15,\n 'simple-earn/locked/setAutoSubscribe': 15,\n },\n 'put': {\n 'userDataStream': 0.1,\n 'userDataStream/isolated': 0.1,\n },\n 'delete': {\n // 'account/apiRestrictions/ipRestriction/ipList': 1, discontinued\n 'margin/openOrders': 0.1,\n 'margin/order': 0.006667,\n 'margin/orderList': 0.006667,\n 'margin/isolated/account': 2.0001,\n 'userDataStream': 0.1,\n 'userDataStream/isolated': 0.1,\n // brokerage API TODO NO MENTION OF RATELIMIT IN BROKERAGE DOCS\n 'broker/subAccountApi': 1,\n 'broker/subAccountApi/ipRestriction/ipList': 1,\n 'algo/spot/order': 0.1,\n 'algo/futures/order': 0.1,\n 'sub-account/subAccountApi/ipRestriction/ipList': 20.001, // Weight(UID): 3000 => cost = 0.006667 * 3000 = 20.001\n },\n },\n 'sapiV2': {\n 'get': {\n 'eth-staking/account': 15,\n 'sub-account/futures/account': 0.1,\n 'sub-account/futures/accountSummary': 1,\n 'sub-account/futures/positionRisk': 0.1,\n },\n 'post': {\n 'eth-staking/eth/stake': 15,\n 'sub-account/subAccountApi/ipRestriction': 20.001, // Weight(UID): 3000 => cost = 0.006667 * 3000 = 20.001\n },\n },\n 'sapiV3': {\n 'get': {\n 'sub-account/assets': 0.40002, // Weight(UID): 60 => cost = 0.006667 * 60 = 0.40002\n },\n 'post': {\n 'asset/getUserAsset': 0.5,\n },\n },\n 'sapiV4': {\n 'get': {\n 'sub-account/assets': 0.40002, // Weight(UID): 60 => cost = 0.006667 * 60 = 0.40002\n },\n },\n 'dapiPublic': {\n 'get': {\n 'ping': 1,\n 'time': 1,\n 'exchangeInfo': 1,\n 'depth': { 'cost': 2, 'byLimit': [[50, 2], [100, 5], [500, 10], [1000, 20]] },\n 'trades': 5,\n 'historicalTrades': 20,\n 'aggTrades': 20,\n 'premiumIndex': 10,\n 'fundingRate': 1,\n 'klines': { 'cost': 1, 'byLimit': [[99, 1], [499, 2], [1000, 5], [10000, 10]] },\n 'continuousKlines': { 'cost': 1, 'byLimit': [[99, 1], [499, 2], [1000, 5], [10000, 10]] },\n 'indexPriceKlines': { 'cost': 1, 'byLimit': [[99, 1], [499, 2], [1000, 5], [10000, 10]] },\n 'markPriceKlines': { 'cost': 1, 'byLimit': [[99, 1], [499, 2], [1000, 5], [10000, 10]] },\n 'premiumIndexKlines': { 'cost': 1, 'byLimit': [[99, 1], [499, 2], [1000, 5], [10000, 10]] },\n 'ticker/24hr': { 'cost': 1, 'noSymbol': 40 },\n 'ticker/price': { 'cost': 1, 'noSymbol': 2 },\n 'ticker/bookTicker': { 'cost': 2, 'noSymbol': 5 },\n 'constituents': 2,\n 'openInterest': 1,\n },\n },\n 'dapiData': {\n 'get': {\n 'delivery-price': 1,\n 'openInterestHist': 1,\n 'topLongShortAccountRatio': 1,\n 'topLongShortPositionRatio': 1,\n 'globalLongShortAccountRatio': 1,\n 'takerBuySellVol': 1,\n 'basis': 1,\n },\n },\n 'dapiPrivate': {\n 'get': {\n 'positionSide/dual': 30,\n 'orderAmendment': 1,\n 'order': 1,\n 'openOrder': 1,\n 'openOrders': { 'cost': 1, 'noSymbol': 5 },\n 'allOrders': { 'cost': 20, 'noSymbol': 40 },\n 'balance': 1,\n 'account': 5,\n 'positionMargin/history': 1,\n 'positionRisk': 1,\n 'userTrades': { 'cost': 20, 'noSymbol': 40 },\n 'income': 20,\n 'leverageBracket': 1,\n 'forceOrders': { 'cost': 20, 'noSymbol': 50 },\n 'adlQuantile': 5,\n 'commissionRate': 20,\n 'income/asyn': 5,\n 'income/asyn/id': 5,\n 'pmExchangeInfo': 0.5,\n 'pmAccountInfo': 0.5, // Weight(IP): 5 => cost = 0.1 * 5 = 0.5\n },\n 'post': {\n 'positionSide/dual': 1,\n 'order': 4,\n 'batchOrders': 5,\n 'countdownCancelAll': 10,\n 'leverage': 1,\n 'marginType': 1,\n 'positionMargin': 1,\n 'listenKey': 1,\n },\n 'put': {\n 'listenKey': 1,\n 'order': 1,\n 'batchOrders': 5,\n },\n 'delete': {\n 'order': 1,\n 'allOpenOrders': 1,\n 'batchOrders': 5,\n 'listenKey': 1,\n },\n },\n 'dapiPrivateV2': {\n 'get': {\n 'leverageBracket': 1,\n },\n },\n 'fapiPublic': {\n 'get': {\n 'ping': 1,\n 'time': 1,\n 'exchangeInfo': 1,\n 'depth': { 'cost': 2, 'byLimit': [[50, 2], [100, 5], [500, 10], [1000, 20]] },\n 'trades': 5,\n 'historicalTrades': 20,\n 'aggTrades': 20,\n 'klines': { 'cost': 1, 'byLimit': [[99, 1], [499, 2], [1000, 5], [10000, 10]] },\n 'continuousKlines': { 'cost': 1, 'byLimit': [[99, 1], [499, 2], [1000, 5], [10000, 10]] },\n 'markPriceKlines': { 'cost': 1, 'byLimit': [[99, 1], [499, 2], [1000, 5], [10000, 10]] },\n 'indexPriceKlines': { 'cost': 1, 'byLimit': [[99, 1], [499, 2], [1000, 5], [10000, 10]] },\n 'fundingRate': 1,\n 'fundingInfo': 1,\n 'premiumIndex': 1,\n 'ticker/24hr': { 'cost': 1, 'noSymbol': 40 },\n 'ticker/price': { 'cost': 1, 'noSymbol': 2 },\n 'ticker/bookTicker': { 'cost': 1, 'noSymbol': 2 },\n 'openInterest': 1,\n 'indexInfo': 1,\n 'assetIndex': { 'cost': 1, 'noSymbol': 10 },\n 'constituents': 2,\n 'apiTradingStatus': { 'cost': 1, 'noSymbol': 10 },\n 'lvtKlines': 1,\n },\n },\n 'fapiData': {\n 'get': {\n 'delivery-price': 1,\n 'openInterestHist': 1,\n 'topLongShortAccountRatio': 1,\n 'topLongShortPositionRatio': 1,\n 'globalLongShortAccountRatio': 1,\n 'takerlongshortRatio': 1,\n 'basis': 1,\n },\n },\n 'fapiPrivate': {\n 'get': {\n 'forceOrders': { 'cost': 20, 'noSymbol': 50 },\n 'allOrders': 5,\n 'openOrder': 1,\n 'openOrders': 1,\n 'order': 1,\n 'account': 5,\n 'balance': 5,\n 'leverageBracket': 1,\n 'positionMargin/history': 1,\n 'positionRisk': 5,\n 'positionSide/dual': 30,\n 'userTrades': 5,\n 'income': 30,\n 'commissionRate': 20,\n 'apiTradingStatus': 1,\n 'multiAssetsMargin': 30,\n // broker endpoints\n 'apiReferral/ifNewUser': 1,\n 'apiReferral/customization': 1,\n 'apiReferral/userCustomization': 1,\n 'apiReferral/traderNum': 1,\n 'apiReferral/overview': 1,\n 'apiReferral/tradeVol': 1,\n 'apiReferral/rebateVol': 1,\n 'apiReferral/traderSummary': 1,\n 'adlQuantile': 5,\n 'pmAccountInfo': 5,\n 'orderAmendment': 1,\n 'income/asyn': 1000,\n 'income/asyn/id': 10,\n 'order/asyn': 1000,\n 'order/asyn/id': 10,\n 'trade/asyn': 1000,\n 'trade/asyn/id': 10,\n },\n 'post': {\n 'batchOrders': 5,\n 'positionSide/dual': 1,\n 'positionMargin': 1,\n 'marginType': 1,\n 'order': 4,\n 'leverage': 1,\n 'listenKey': 1,\n 'countdownCancelAll': 10,\n 'multiAssetsMargin': 1,\n // broker endpoints\n 'apiReferral/customization': 1,\n 'apiReferral/userCustomization': 1,\n },\n 'put': {\n 'listenKey': 1,\n 'order': 1,\n 'batchOrders': 5,\n },\n 'delete': {\n 'batchOrders': 1,\n 'order': 1,\n 'allOpenOrders': 1,\n 'listenKey': 1,\n },\n },\n 'fapiPublicV2': {\n 'get': {\n 'ticker/price': 0,\n },\n },\n 'fapiPrivateV2': {\n 'get': {\n 'account': 1,\n 'balance': 1,\n 'positionRisk': 1,\n },\n },\n 'eapiPublic': {\n 'get': {\n 'ping': 1,\n 'time': 1,\n 'exchangeInfo': 1,\n 'index': 1,\n 'ticker': 5,\n 'mark': 5,\n 'depth': 1,\n 'klines': 1,\n 'trades': 5,\n 'historicalTrades': 20,\n 'exerciseHistory': 3,\n 'openInterest': 3,\n },\n },\n 'eapiPrivate': {\n 'get': {\n 'account': 3,\n 'position': 5,\n 'openOrders': { 'cost': 1, 'noSymbol': 40 },\n 'historyOrders': 3,\n 'userTrades': 5,\n 'exerciseRecord': 5,\n 'bill': 1,\n 'income/asyn': 5,\n 'income/asyn/id': 5,\n 'marginAccount': 3,\n 'mmp': 1,\n 'countdownCancelAll': 1,\n 'order': 1,\n },\n 'post': {\n 'order': 1,\n 'batchOrders': 5,\n 'listenKey': 1,\n 'mmpSet': 1,\n 'mmpReset': 1,\n 'countdownCancelAll': 1,\n 'countdownCancelAllHeartBeat': 10,\n },\n 'put': {\n 'listenKey': 1,\n },\n 'delete': {\n 'order': 1,\n 'batchOrders': 1,\n 'allOpenOrders': 1,\n 'allOpenOrdersByUnderlying': 1,\n 'listenKey': 1,\n },\n },\n 'public': {\n // IP (api) request rate limit of 6000 per minute\n // 1 IP (api) => cost = 0.2 => (1000 / (50 * 0.2)) * 60 = 6000\n 'get': {\n 'ping': 0.2,\n 'time': 0.2,\n 'depth': { 'cost': 1, 'byLimit': [[100, 1], [500, 5], [1000, 10], [5000, 50]] },\n 'trades': 5,\n 'aggTrades': 0.4,\n 'historicalTrades': 5,\n 'klines': 0.4,\n 'uiKlines': 0.4,\n 'ticker/24hr': { 'cost': 0.4, 'noSymbol': 16 },\n 'ticker': { 'cost': 0.4, 'noSymbol': 16 },\n 'ticker/tradingDay': 0.8,\n 'ticker/price': { 'cost': 0.4, 'noSymbol': 0.8 },\n 'ticker/bookTicker': { 'cost': 0.4, 'noSymbol': 0.8 },\n 'exchangeInfo': 4,\n 'avgPrice': 0.4,\n },\n 'put': {\n 'userDataStream': 0.4,\n },\n 'post': {\n 'userDataStream': 0.4,\n },\n 'delete': {\n 'userDataStream': 0.4,\n },\n },\n 'private': {\n 'get': {\n 'allOrderList': 4,\n 'openOrderList': 1.2,\n 'orderList': 0.8,\n 'order': 0.8,\n 'openOrders': { 'cost': 1.2, 'noSymbol': 16 },\n 'allOrders': 4,\n 'account': 4,\n 'myTrades': 4,\n 'rateLimit/order': 8,\n 'myPreventedMatches': 4,\n 'myAllocations': 4,\n 'account/commission': 4,\n },\n 'post': {\n 'order/oco': 0.2,\n 'sor/order': 0.2,\n 'sor/order/test': 0.2,\n 'order': 0.2,\n 'order/cancelReplace': 0.2,\n 'order/test': 0.2,\n },\n 'delete': {\n 'openOrders': 0.2,\n 'orderList': 0.2,\n 'order': 0.2,\n },\n },\n 'papi': {\n 'get': {\n 'ping': 1,\n 'um/order': 1,\n 'um/openOrder': 1,\n 'um/openOrders': 1,\n 'um/allOrders': 5,\n 'cm/order': 1,\n 'cm/openOrder': 1,\n 'cm/openOrders': 1,\n 'cm/allOrders': 20,\n 'um/conditional/openOrder': 1,\n 'um/conditional/openOrders': 40,\n 'um/conditional/orderHistory': 1,\n 'um/conditional/allOrders': 40,\n 'cm/conditional/openOrder': 1,\n 'cm/conditional/openOrders': 40,\n 'cm/conditional/orderHistory': 1,\n 'cm/conditional/allOrders': 40,\n 'margin/order': 5,\n 'margin/openOrders': 5,\n 'margin/allOrders': 100,\n 'margin/orderList': 5,\n 'margin/allOrderList': 100,\n 'margin/openOrderList': 5,\n 'margin/myTrades': 5,\n 'balance': 20,\n 'account': 20,\n 'margin/maxBorrowable': 5,\n 'margin/maxWithdraw': 5,\n 'um/positionRisk': 5,\n 'cm/positionRisk': 1,\n 'um/positionSide/dual': 30,\n 'cm/positionSide/dual': 30,\n 'um/userTrades': 5,\n 'cm/userTrades': 20,\n 'um/leverageBracket': 1,\n 'cm/leverageBracket': 1,\n 'margin/forceOrders': 1,\n 'um/forceOrders': 20,\n 'cm/forceOrders': 20,\n 'um/apiTradingStatus': 1,\n 'um/commissionRate': 20,\n 'cm/commissionRate': 20,\n 'margin/marginLoan': 10,\n 'margin/repayLoan': 10,\n 'margin/marginInterestHistory': 1,\n 'portfolio/interest-history': 50,\n 'um/income': 30,\n 'cm/income': 30,\n 'um/account': 5,\n 'cm/account': 5,\n 'repay-futures-switch': 3,\n 'um/adlQuantile': 5,\n 'cm/adlQuantile': 5,\n },\n 'post': {\n 'um/order': 1,\n 'um/conditional/order': 1,\n 'cm/order': 1,\n 'cm/conditional/order': 1,\n 'margin/order': 0.0133,\n 'marginLoan': 0.1333,\n 'repayLoan': 0.1333,\n 'margin/order/oco': 0.0400,\n 'um/leverage': 1,\n 'cm/leverage': 1,\n 'um/positionSide/dual': 1,\n 'cm/positionSide/dual': 1,\n 'auto-collection': 0.6667,\n 'bnb-transfer': 0.6667,\n 'repay-futures-switch': 150,\n 'repay-futures-negative-balance': 150,\n 'listenKey': 1,\n 'asset-collection': 3,\n },\n 'put': {\n 'listenKey': 1, // 1\n },\n 'delete': {\n 'um/order': 1,\n 'um/conditional/order': 1,\n 'um/allOpenOrders': 1,\n 'um/conditional/allOpenOrders': 1,\n 'cm/order': 1,\n 'cm/conditional/order': 1,\n 'cm/allOpenOrders': 1,\n 'cm/conditional/allOpenOrders': 1,\n 'margin/order': 1,\n 'margin/allOpenOrders': 5,\n 'margin/orderList': 2,\n 'listenKey': 1, // 1\n },\n },\n },\n 'fees': {\n 'trading': {\n 'feeSide': 'get',\n 'tierBased': false,\n 'percentage': true,\n 'taker': this.parseNumber('0.001'),\n 'maker': this.parseNumber('0.001'),\n },\n 'linear': {\n 'trading': {\n 'feeSide': 'quote',\n 'tierBased': true,\n 'percentage': true,\n 'taker': this.parseNumber('0.000400'),\n 'maker': this.parseNumber('0.000200'),\n 'tiers': {\n 'taker': [\n [this.parseNumber('0'), this.parseNumber('0.000400')],\n [this.parseNumber('250'), this.parseNumber('0.000400')],\n [this.parseNumber('2500'), this.parseNumber('0.000350')],\n [this.parseNumber('7500'), this.parseNumber('0.000320')],\n [this.parseNumber('22500'), this.parseNumber('0.000300')],\n [this.parseNumber('50000'), this.parseNumber('0.000270')],\n [this.parseNumber('100000'), this.parseNumber('0.000250')],\n [this.parseNumber('200000'), this.parseNumber('0.000220')],\n [this.parseNumber('400000'), this.parseNumber('0.000200')],\n [this.parseNumber('750000'), this.parseNumber('0.000170')],\n ],\n 'maker': [\n [this.parseNumber('0'), this.parseNumber('0.000200')],\n [this.parseNumber('250'), this.parseNumber('0.000160')],\n [this.parseNumber('2500'), this.parseNumber('0.000140')],\n [this.parseNumber('7500'), this.parseNumber('0.000120')],\n [this.parseNumber('22500'), this.parseNumber('0.000100')],\n [this.parseNumber('50000'), this.parseNumber('0.000080')],\n [this.parseNumber('100000'), this.parseNumber('0.000060')],\n [this.parseNumber('200000'), this.parseNumber('0.000040')],\n [this.parseNumber('400000'), this.parseNumber('0.000020')],\n [this.parseNumber('750000'), this.parseNumber('0')],\n ],\n },\n },\n },\n 'inverse': {\n 'trading': {\n 'feeSide': 'base',\n 'tierBased': true,\n 'percentage': true,\n 'taker': this.parseNumber('0.000500'),\n 'maker': this.parseNumber('0.000100'),\n 'tiers': {\n 'taker': [\n [this.parseNumber('0'), this.parseNumber('0.000500')],\n [this.parseNumber('250'), this.parseNumber('0.000450')],\n [this.parseNumber('2500'), this.parseNumber('0.000400')],\n [this.parseNumber('7500'), this.parseNumber('0.000300')],\n [this.parseNumber('22500'), this.parseNumber('0.000250')],\n [this.parseNumber('50000'), this.parseNumber('0.000240')],\n [this.parseNumber('100000'), this.parseNumber('0.000240')],\n [this.parseNumber('200000'), this.parseNumber('0.000240')],\n [this.parseNumber('400000'), this.parseNumber('0.000240')],\n [this.parseNumber('750000'), this.parseNumber('0.000240')],\n ],\n 'maker': [\n [this.parseNumber('0'), this.parseNumber('0.000100')],\n [this.parseNumber('250'), this.parseNumber('0.000080')],\n [this.parseNumber('2500'), this.parseNumber('0.000050')],\n [this.parseNumber('7500'), this.parseNumber('0.0000030')],\n [this.parseNumber('22500'), this.parseNumber('0')],\n [this.parseNumber('50000'), this.parseNumber('-0.000050')],\n [this.parseNumber('100000'), this.parseNumber('-0.000060')],\n [this.parseNumber('200000'), this.parseNumber('-0.000070')],\n [this.parseNumber('400000'), this.parseNumber('-0.000080')],\n [this.parseNumber('750000'), this.parseNumber('-0.000090')],\n ],\n },\n },\n },\n 'option': {},\n },\n 'precisionMode': DECIMAL_PLACES,\n // exchange-specific options\n 'options': {\n 'sandboxMode': false,\n 'fetchMarkets': [\n 'spot',\n 'linear',\n 'inverse', // allows CORS in browsers\n // 'option', // does not allow CORS, enable outside of the browser only\n ],\n 'fetchCurrencies': true,\n // 'fetchTradesMethod': 'publicGetAggTrades', // publicGetTrades, publicGetHistoricalTrades, eapiPublicGetTrades\n 'defaultTimeInForce': 'GTC',\n 'defaultType': 'spot',\n 'defaultSubType': undefined,\n 'warnOnFetchOpenOrdersWithoutSymbol': true,\n // not an error\n // https://github.com/ccxt/ccxt/issues/11268\n // https://github.com/ccxt/ccxt/pull/11624\n // POST https://fapi.binance.com/fapi/v1/marginType 400 Bad Request\n // binanceusdm\n 'throwMarginModeAlreadySet': false,\n 'fetchPositions': 'positionRisk',\n 'recvWindow': 10 * 1000,\n 'timeDifference': 0,\n 'adjustForTimeDifference': false,\n 'newOrderRespType': {\n 'market': 'FULL',\n 'limit': 'FULL', // we change it from 'ACK' by default to 'FULL' (returns immediately if limit is not hit)\n },\n 'quoteOrderQty': true,\n 'broker': {\n 'spot': 'x-R4BD3S82',\n 'margin': 'x-R4BD3S82',\n 'future': 'x-xcKtGhcu',\n 'delivery': 'x-xcKtGhcu',\n 'swap': 'x-xcKtGhcu',\n 'option': 'x-xcKtGhcu',\n },\n 'accountsByType': {\n 'main': 'MAIN',\n 'spot': 'MAIN',\n 'funding': 'FUNDING',\n 'margin': 'MARGIN',\n 'cross': 'MARGIN',\n 'future': 'UMFUTURE',\n 'delivery': 'CMFUTURE',\n 'linear': 'UMFUTURE',\n 'inverse': 'CMFUTURE',\n 'option': 'OPTION',\n },\n 'accountsById': {\n 'MAIN': 'spot',\n 'FUNDING': 'funding',\n 'MARGIN': 'margin',\n 'UMFUTURE': 'linear',\n 'CMFUTURE': 'inverse',\n 'OPTION': 'option',\n },\n 'networks': {\n 'ERC20': 'ETH',\n 'TRC20': 'TRX',\n 'BEP2': 'BNB',\n 'BEP20': 'BSC',\n 'OMNI': 'OMNI',\n 'EOS': 'EOS',\n 'SPL': 'SOL',\n },\n // keeping this object for backward-compatibility\n 'reverseNetworks': {\n 'tronscan.org': 'TRC20',\n 'etherscan.io': 'ERC20',\n 'bscscan.com': 'BSC',\n 'explorer.binance.org': 'BEP2',\n 'bithomp.com': 'XRP',\n 'bloks.io': 'EOS',\n 'stellar.expert': 'XLM',\n 'blockchair.com/bitcoin': 'BTC',\n 'blockchair.com/bitcoin-cash': 'BCH',\n 'blockchair.com/ecash': 'XEC',\n 'explorer.litecoin.net': 'LTC',\n 'explorer.avax.network': 'AVAX',\n 'solscan.io': 'SOL',\n 'polkadot.subscan.io': 'DOT',\n 'dashboard.internetcomputer.org': 'ICP',\n 'explorer.chiliz.com': 'CHZ',\n 'cardanoscan.io': 'ADA',\n 'mainnet.theoan.com': 'AION',\n 'algoexplorer.io': 'ALGO',\n 'explorer.ambrosus.com': 'AMB',\n 'viewblock.io/zilliqa': 'ZIL',\n 'viewblock.io/arweave': 'AR',\n 'explorer.ark.io': 'ARK',\n 'atomscan.com': 'ATOM',\n 'www.mintscan.io': 'CTK',\n 'explorer.bitcoindiamond.org': 'BCD',\n 'btgexplorer.com': 'BTG',\n 'bts.ai': 'BTS',\n 'explorer.celo.org': 'CELO',\n 'explorer.nervos.org': 'CKB',\n 'cerebro.cortexlabs.ai': 'CTXC',\n 'chainz.cryptoid.info': 'VIA',\n 'explorer.dcrdata.org': 'DCR',\n 'digiexplorer.info': 'DGB',\n 'dock.subscan.io': 'DOCK',\n 'dogechain.info': 'DOGE',\n 'explorer.elrond.com': 'EGLD',\n 'blockscout.com': 'ETC',\n 'explore-fetchhub.fetch.ai': 'FET',\n 'filfox.info': 'FIL',\n 'fio.bloks.io': 'FIO',\n 'explorer.firo.org': 'FIRO',\n 'neoscan.io': 'NEO',\n 'ftmscan.com': 'FTM',\n 'explorer.gochain.io': 'GO',\n 'block.gxb.io': 'GXS',\n 'hash-hash.info': 'HBAR',\n 'www.hiveblockexplorer.com': 'HIVE',\n 'explorer.helium.com': 'HNT',\n 'tracker.icon.foundation': 'ICX',\n 'www.iostabc.com': 'IOST',\n 'explorer.iota.org': 'IOTA',\n 'iotexscan.io': 'IOTX',\n 'irishub.iobscan.io': 'IRIS',\n 'kava.mintscan.io': 'KAVA',\n 'scope.klaytn.com': 'KLAY',\n 'kmdexplorer.io': 'KMD',\n 'kusama.subscan.io': 'KSM',\n 'explorer.lto.network': 'LTO',\n 'polygonscan.com': 'POLYGON',\n 'explorer.ont.io': 'ONT',\n 'minaexplorer.com': 'MINA',\n 'nanolooker.com': 'NANO',\n 'explorer.nebulas.io': 'NAS',\n 'explorer.nbs.plus': 'NBS',\n 'explorer.nebl.io': 'NEBL',\n 'nulscan.io': 'NULS',\n 'nxscan.com': 'NXS',\n 'explorer.harmony.one': 'ONE',\n 'explorer.poa.network': 'POA',\n 'qtum.info': 'QTUM',\n 'explorer.rsk.co': 'RSK',\n 'www.oasisscan.com': 'ROSE',\n 'ravencoin.network': 'RVN',\n 'sc.tokenview.com': 'SC',\n 'secretnodes.com': 'SCRT',\n 'explorer.skycoin.com': 'SKY',\n 'steemscan.com': 'STEEM',\n 'explorer.stacks.co': 'STX',\n 'www.thetascan.io': 'THETA',\n 'scan.tomochain.com': 'TOMO',\n 'explore.vechain.org': 'VET',\n 'explorer.vite.net': 'VITE',\n 'www.wanscan.org': 'WAN',\n 'wavesexplorer.com': 'WAVES',\n 'wax.eosx.io': 'WAXP',\n 'waltonchain.pro': 'WTC',\n 'chain.nem.ninja': 'XEM',\n 'verge-blockchain.info': 'XVG',\n 'explorer.yoyow.org': 'YOYOW',\n 'explorer.zcha.in': 'ZEC',\n 'explorer.zensystem.io': 'ZEN',\n },\n 'networksById': {\n 'tronscan.org': 'TRC20',\n 'etherscan.io': 'ERC20',\n 'bscscan.com': 'BSC',\n 'explorer.binance.org': 'BEP2',\n 'bithomp.com': 'XRP',\n 'bloks.io': 'EOS',\n 'stellar.expert': 'XLM',\n 'blockchair.com/bitcoin': 'BTC',\n 'blockchair.com/bitcoin-cash': 'BCH',\n 'blockchair.com/ecash': 'XEC',\n 'explorer.litecoin.net': 'LTC',\n 'explorer.avax.network': 'AVAX',\n 'solscan.io': 'SOL',\n 'polkadot.subscan.io': 'DOT',\n 'dashboard.internetcomputer.org': 'ICP',\n 'explorer.chiliz.com': 'CHZ',\n 'cardanoscan.io': 'ADA',\n 'mainnet.theoan.com': 'AION',\n 'algoexplorer.io': 'ALGO',\n 'explorer.ambrosus.com': 'AMB',\n 'viewblock.io/zilliqa': 'ZIL',\n 'viewblock.io/arweave': 'AR',\n 'explorer.ark.io': 'ARK',\n 'atomscan.com': 'ATOM',\n 'www.mintscan.io': 'CTK',\n 'explorer.bitcoindiamond.org': 'BCD',\n 'btgexplorer.com': 'BTG',\n 'bts.ai': 'BTS',\n 'explorer.celo.org': 'CELO',\n 'explorer.nervos.org': 'CKB',\n 'cerebro.cortexlabs.ai': 'CTXC',\n 'chainz.cryptoid.info': 'VIA',\n 'explorer.dcrdata.org': 'DCR',\n 'digiexplorer.info': 'DGB',\n 'dock.subscan.io': 'DOCK',\n 'dogechain.info': 'DOGE',\n 'explorer.elrond.com': 'EGLD',\n 'blockscout.com': 'ETC',\n 'explore-fetchhub.fetch.ai': 'FET',\n 'filfox.info': 'FIL',\n 'fio.bloks.io': 'FIO',\n 'explorer.firo.org': 'FIRO',\n 'neoscan.io': 'NEO',\n 'ftmscan.com': 'FTM',\n 'explorer.gochain.io': 'GO',\n 'block.gxb.io': 'GXS',\n 'hash-hash.info': 'HBAR',\n 'www.hiveblockexplorer.com': 'HIVE',\n 'explorer.helium.com': 'HNT',\n 'tracker.icon.foundation': 'ICX',\n 'www.iostabc.com': 'IOST',\n 'explorer.iota.org': 'IOTA',\n 'iotexscan.io': 'IOTX',\n 'irishub.iobscan.io': 'IRIS',\n 'kava.mintscan.io': 'KAVA',\n 'scope.klaytn.com': 'KLAY',\n 'kmdexplorer.io': 'KMD',\n 'kusama.subscan.io': 'KSM',\n 'explorer.lto.network': 'LTO',\n 'polygonscan.com': 'POLYGON',\n 'explorer.ont.io': 'ONT',\n 'minaexplorer.com': 'MINA',\n 'nanolooker.com': 'NANO',\n 'explorer.nebulas.io': 'NAS',\n 'explorer.nbs.plus': 'NBS',\n 'explorer.nebl.io': 'NEBL',\n 'nulscan.io': 'NULS',\n 'nxscan.com': 'NXS',\n 'explorer.harmony.one': 'ONE',\n 'explorer.poa.network': 'POA',\n 'qtum.info': 'QTUM',\n 'explorer.rsk.co': 'RSK',\n 'www.oasisscan.com': 'ROSE',\n 'ravencoin.network': 'RVN',\n 'sc.tokenview.com': 'SC',\n 'secretnodes.com': 'SCRT',\n 'explorer.skycoin.com': 'SKY',\n 'steemscan.com': 'STEEM',\n 'explorer.stacks.co': 'STX',\n 'www.thetascan.io': 'THETA',\n 'scan.tomochain.com': 'TOMO',\n 'explore.vechain.org': 'VET',\n 'explorer.vite.net': 'VITE',\n 'www.wanscan.org': 'WAN',\n 'wavesexplorer.com': 'WAVES',\n 'wax.eosx.io': 'WAXP',\n 'waltonchain.pro': 'WTC',\n 'chain.nem.ninja': 'XEM',\n 'verge-blockchain.info': 'XVG',\n 'explorer.yoyow.org': 'YOYOW',\n 'explorer.zcha.in': 'ZEC',\n 'explorer.zensystem.io': 'ZEN',\n },\n 'legalMoney': {\n 'MXN': true,\n 'UGX': true,\n 'SDG': true,\n 'XOF': true,\n 'SEK': true,\n 'GNF': true,\n 'QAR': true,\n 'LYD': true,\n 'KWD': true,\n 'ISK': true,\n 'PAB': true,\n 'CHF': true,\n 'HRK': true,\n 'VND': true,\n 'TJS': true,\n 'AED': true,\n 'DKK': true,\n 'BGN': true,\n 'BHD': true,\n 'KZT': true,\n 'AFN': true,\n 'EURPS': true,\n 'HUF': true,\n 'PEN': true,\n 'TMT': true,\n 'CLP': true,\n 'TND': true,\n 'DOP': true,\n 'MAD': true,\n 'PHP': true,\n 'COP': true,\n 'ETB': true,\n 'LAK': true,\n 'BND': true,\n 'MDL': true,\n 'AMD': true,\n 'TRY': true,\n 'EUR': true,\n 'RON': true,\n 'NGN': true,\n 'CRC': true,\n 'PKR': true,\n 'PLN': true,\n 'BRL': true,\n 'ZAR': true,\n 'TWD': true,\n 'UYU': true,\n 'OMR': true,\n 'KES': true,\n 'ARS': true,\n 'UZS': true,\n 'RUB': true,\n 'DZD': true,\n 'KGS': true,\n 'XAF': true,\n 'TZS': true,\n 'AUD': true,\n 'KHR': true,\n 'IDR': true,\n 'BWP': true,\n 'MMK': true,\n 'NOK': true,\n 'CZK': true,\n 'MNT': true,\n 'GBP': true,\n 'BYN': true,\n 'GEL': true,\n 'AZN': true,\n 'UAH': true,\n 'ILS': true,\n 'GHS': true,\n 'JOD': true,\n 'HKD': true,\n 'CAD': true,\n 'SAR': true,\n 'JPY': true,\n 'EGP': true,\n 'NZD': true,\n },\n 'legalMoneyCurrenciesById': {\n 'BUSD': 'USD',\n },\n },\n 'exceptions': {\n 'spot': {\n // https://binance-docs.github.io/apidocs/spot/en/#error-codes\n 'exact': {\n '-1000': ExchangeOperationFailedError,\n '-1001': ExchangeOperationFailedError,\n '-1002': ExchangeInvalidPermissionsError,\n '-1003': ExchangeRateLimitExceededError,\n '-1004': ExchangeOperationFailedError,\n '-1006': ExchangeOperationFailedError,\n '-1007': ExchangeOperationFailedError,\n '-1008': ExchangeOperationFailedError,\n '-1010': ExchangeOperationFailedError,\n '-1013': InvalidParamsError,\n '-1014': TradeError,\n '-1015': ExchangeRateLimitExceededError,\n '-1016': ExchangeError,\n '-1020': ExchangeNotAllowedMethodError,\n '-1021': ExchangeInvalidNonceError,\n '-1022': AuthenticationError,\n '-1099': AuthenticationError,\n '-1100': InvalidParamsError,\n '-1101': InvalidParamsError,\n '-1102': InvalidParamsError,\n '-1103': InvalidParamsError,\n '-1104': InvalidParamsError,\n '-1105': InvalidParamsError,\n '-1106': InvalidParamsError,\n '-1108': InvalidParamsError,\n '-1111': InvalidParamsError,\n '-1112': TradeError,\n '-1114': InvalidParamsError,\n '-1115': InvalidParamsError,\n '-1116': InvalidParamsError,\n '-1117': InvalidParamsError,\n '-1118': InvalidParamsError,\n '-1119': InvalidParamsError,\n '-1120': InvalidParamsError,\n '-1121': InvalidParamsError,\n '-1125': AuthenticationError,\n '-1127': InvalidParamsError,\n '-1128': InvalidParamsError,\n '-1130': InvalidParamsError,\n '-1131': InvalidParamsError,\n '-1134': InvalidParamsError,\n '-1135': InvalidParamsError,\n '-1145': InvalidParamsError,\n '-1151': InvalidParamsError,\n '-2008': InvalidCredentialsError,\n '-2010': TradeError,\n '-2011': OrderNotFoundError,\n '-2013': OrderNotFoundError,\n '-2014': AuthenticationError,\n '-2015': AuthenticationError,\n '-2016': TradeError,\n '-2021': TradeError,\n '-2022': TradeError,\n '-2026': TradeError,\n // 3xxx errors are available only for spot\n '-3000': InternalError,\n '-3001': AuthenticationError,\n '-3002': ExchangeUnknownAssetError,\n '-3003': InvalidParamsError,\n '-3004': TradeError,\n '-3005': InvalidParamsError,\n '-3006': InvalidParamsError,\n '-3007': ExchangeOperationFailedError,\n '-3008': InvalidParamsError,\n '-3009': ExchangeTransferNotAllowedError,\n '-3010': InvalidParamsError,\n '-3011': InvalidParamsError,\n '-3012': ExchangeOperationFailedError,\n '-3013': InvalidParamsError,\n '-3014': ExchangeAccountSuspendedError,\n '-3015': InvalidParamsError,\n '-3016': InvalidParamsError,\n '-3017': ExchangeTransferNotAllowedError,\n '-3018': ExchangeAccountSuspendedError,\n '-3019': ExchangeAccountSuspendedError,\n '-3020': InvalidParamsError,\n '-3021': TradeError,\n '-3022': ExchangeAccountSuspendedError,\n '-3023': ExchangeOperationFailedError,\n '-3024': ExchangeOperationFailedError,\n '-3025': InvalidParamsError,\n '-3026': InvalidParamsError,\n '-3027': MarketError,\n '-3028': MarketNotFoundError,\n '-3029': ExchangeOperationFailedError,\n '-3036': ExchangeAccountSuspendedError,\n '-3037': ExchangeOperationFailedError,\n '-3038': InvalidParamsError,\n '-3041': InsufficientBalanceError,\n '-3042': InvalidParamsError,\n '-3043': ExchangeInvalidPermissionsError,\n '-3044': ExchangeOperationFailedError,\n '-3045': ExchangeOperationFailedError,\n '-3999': ExchangeInvalidPermissionsError,\n '-4001': ExchangeError,\n '-4002': ExchangeError,\n '-4003': InvalidParamsError,\n '-4004': AuthenticationError,\n '-4005': ExchangeRateLimitExceededError,\n '-4006': ExchangeError,\n '-4007': InvalidAddressError,\n '-4008': InvalidAddressError,\n '-4009': ExchangeError,\n '-4010': ExchangeInvalidPermissionsError,\n '-4011': InvalidParamsError,\n '-4012': ExchangeInvalidPermissionsError,\n '-4013': AuthenticationError,\n '-4014': WithdrawalError,\n '-4015': ExchangeInvalidPermissionsError,\n '-4016': ExchangeInvalidPermissionsError,\n '-4017': ExchangeInvalidPermissionsError,\n '-4018': ExchangeUnknownAssetError,\n '-4019': WithdrawalForbiddenError,\n '-4021': InvalidParamsError,\n '-4022': InvalidParamsError,\n '-4023': OverWithdrawMaximumError,\n '-4024': InsufficientBalanceError,\n '-4025': InsufficientBalanceError,\n '-4026': InsufficientBalanceError,\n '-4027': ExchangeOperationFailedError,\n '-4028': InvalidParamsError,\n '-4029': WithdrawalNotFoundError,\n '-4030': ExchangeError,\n '-4031': ExchangeOperationFailedError,\n '-4032': WithdrawalError,\n '-4033': InvalidAddressError,\n '-4034': InvalidAddressError,\n '-4035': WhitelistCheckFailedError,\n '-4036': WithdrawalError,\n '-4037': ExchangeOperationFailedError,\n '-4038': ExchangeOperationFailedError,\n '-4039': ExchangeInvalidPermissionsError,\n '-4040': ExchangeOperationFailedError,\n '-4041': ExchangeOperationFailedError,\n '-4042': GetDepositAddressError,\n '-4043': ExchangeOperationFailedError,\n '-4044': ExchangeUnavailableInCountry,\n '-4045': ExchangeOperationFailedError,\n '-4046': AuthenticationError,\n '-4047': InvalidParamsError,\n '-4060': InsufficientBalanceError,\n '-5001': ExchangeError,\n '-5002': InsufficientBalanceError,\n '-5003': InsufficientBalanceError,\n '-5004': ExchangeOperationFailedError,\n '-5005': ExchangeOperationFailedError,\n '-5006': ExchangeOperationFailedError,\n '-5007': InvalidParamsError,\n '-5008': ExchangeOperationFailedError,\n '-5009': ExchangeUnknownAssetError,\n '-5010': ExchangeTransferError,\n '-5011': ExchangeError,\n '-5012': ExchangeTransferError,\n '-5013': InsufficientBalanceError,\n '-5021': ExchangeError,\n '-5022': ExchangeError,\n '-6001': ExchangeError,\n '-6003': ExchangeInvalidPermissionsError,\n '-6004': ExchangeError,\n '-6005': ExchangeError,\n '-6006': ExchangeError,\n '-6007': ExchangeOperationFailedError,\n '-6008': ExchangeOperationFailedError,\n '-6009': ExchangeRateLimitExceededError,\n '-6011': ExchangeOperationFailedError,\n '-6012': InsufficientBalanceError,\n '-6013': ExchangeError,\n '-6014': ExchangeOperationFailedError,\n '-6015': InvalidParamsError,\n '-6016': InvalidParamsError,\n '-6017': ExchangeInvalidPermissionsError,\n '-6018': InsufficientBalanceError,\n '-6019': ExchangeOperationFailedError,\n '-6020': ExchangeError,\n '-7001': InvalidParamsError,\n '-7002': InvalidParamsError,\n '-10001': ExchangeUnderMaintenanceError,\n '-10002': InvalidParamsError,\n '-10005': ExchangeError,\n '-10007': InvalidParamsError,\n '-10008': InvalidParamsError,\n '-10009': InvalidParamsError,\n '-10010': InvalidParamsError,\n '-10011': InsufficientBalanceError,\n '-10012': InvalidParamsError,\n '-10013': InsufficientBalanceError,\n '-10015': ExchangeOperationFailedError,\n '-10016': ExchangeOperationFailedError,\n '-10017': ExchangeOperationFailedError,\n '-10018': InvalidParamsError,\n '-10019': ExchangeError,\n '-10020': InvalidParamsError,\n '-10021': OrderNotFoundError,\n '-10022': InvalidParamsError,\n '-10023': ExchangeOperationFailedError,\n '-10024': ExchangeError,\n '-10025': ExchangeOperationFailedError,\n '-10026': InvalidParamsError,\n '-10028': InvalidParamsError,\n '-10029': ExchangeOperationFailedError,\n '-10030': ExchangeOperationFailedError,\n '-10031': ExchangeOperationFailedError,\n '-10032': ExchangeOperationFailedError,\n '-10034': ExchangeOperationFailedError,\n '-10039': InvalidParamsError,\n '-10040': InvalidParamsError,\n '-10041': ExchangeOperationFailedError,\n '-10042': ExchangeUnknownAssetError,\n '-10043': ExchangeOperationFailedError,\n '-10044': ExchangeOperationFailedError,\n '-10045': ExchangeOperationFailedError,\n '-10046': ExchangeOperationFailedError,\n '-10047': ExchangeInvalidPermissionsError,\n '-11008': InvalidParamsError,\n '-12014': ExchangeRateLimitExceededError,\n // BLVT\n '-13000': ExchangeOperationFailedError,\n '-13001': ExchangeOperationFailedError,\n '-13002': ExchangeOperationFailedError,\n '-13003': ExchangeInvalidPermissionsError,\n '-13004': ExchangeOperationFailedError,\n '-13005': ExchangeOperationFailedError,\n '-13006': InvalidParamsError,\n '-13007': ExchangeInvalidPermissionsError,\n // 18xxx - BINANCE CODE\n '-18002': ExchangeRateLimitExceededError,\n '-18003': ExchangeRateLimitExceededError,\n '-18004': ExchangeRateLimitExceededError,\n '-18005': ExchangeRateLimitExceededError,\n '-18006': InvalidParamsError,\n '-18007': InvalidParamsError,\n // spot & futures algo (TBD for OPTIONS & PORTFOLIO MARGIN)\n '-20121': InvalidParamsError,\n '-20124': TradeError,\n '-20130': InvalidParamsError,\n '-20132': TradeError,\n '-20194': InvalidParamsError,\n '-20195': InvalidParamsError,\n '-20196': InvalidParamsError,\n '-20198': TradeError,\n '-20204': InvalidParamsError,\n // 21xxx - PORTFOLIO MARGIN\n '-21001': InvalidParamsError,\n '-21002': ExchangeTransferNotAllowedError,\n '-21003': ExchangeUnknownAssetError,\n '-21004': ExchangeOperationFailedError,\n '-21005': InsufficientBalanceError,\n '-21006': ExchangeOperationFailedError,\n '-21007': ExchangeOperationFailedError,\n '-32603': ExchangeError,\n '400002': AuthenticationError,\n '100001003': AuthenticationError,\n '200003903': AuthenticationError, // undocumented, {\"code\":200003903,\"msg\":\"Your identity verification has been rejected. Please complete identity verification again.\"}\n },\n },\n 'linear': {\n // https://binance-docs.github.io/apidocs/futures/en/#error-codes\n 'exact': {\n '-1000': ExchangeError,\n '-1001': ExchangeError,\n '-1002': AuthenticationError,\n '-1003': ExchangeRateLimitExceededError,\n '-1004': ExchangeOperationFailedError,\n '-1005': ExchangeInvalidPermissionsError,\n '-1006': InternalError,\n '-1007': InternalError,\n '-1008': ExchangeOperationFailedError,\n '-1010': ExchangeOperationFailedError,\n '-1011': ExchangeInvalidPermissionsError,\n '-1013': InvalidParamsError,\n '-1014': TradeError,\n '-1015': ExchangeRateLimitExceededError,\n '-1016': ExchangeError,\n '-1020': ExchangeError,\n '-1021': ExchangeInvalidNonceError,\n '-1022': AuthenticationError,\n '-1023': InvalidParamsError,\n '-1099': AuthenticationError,\n '-1100': InvalidParamsError,\n '-1101': InvalidParamsError,\n '-1102': InvalidParamsError,\n '-1103': InvalidParamsError,\n '-1104': InvalidParamsError,\n '-1105': InvalidParamsError,\n '-1106': InvalidParamsError,\n '-1108': ExchangeUnknownAssetError,\n '-1109': ExchangeInvalidPermissionsError,\n '-1110': InvalidParamsError,\n '-1111': InvalidParamsError,\n '-1112': TradeError,\n '-1113': InvalidParamsError,\n '-1114': InvalidParamsError,\n '-1115': InvalidParamsError,\n '-1116': InvalidParamsError,\n '-1117': InvalidParamsError,\n '-1118': InvalidParamsError,\n '-1119': TradeError,\n '-1120': InvalidParamsError,\n '-1121': MarketNotFoundError,\n '-1122': ExchangeError,\n '-1125': AuthenticationError,\n '-1126': ExchangeUnknownAssetError,\n '-1127': InvalidParamsError,\n '-1128': InvalidParamsError,\n '-1130': InvalidParamsError,\n '-1136': InvalidParamsError,\n '-2010': TradeError,\n '-2011': OrderNotFoundError,\n '-2012': ExchangeOperationFailedError,\n '-2013': OrderNotFoundError,\n '-2014': AuthenticationError,\n '-2015': AuthenticationError,\n '-2016': TradeError,\n '-2017': ExchangeInvalidPermissionsError,\n '-2018': InsufficientBalanceError,\n '-2019': InsufficientBalanceError,\n '-2020': TradeError,\n '-2021': TradeError,\n '-2022': TradeError,\n '-2023': ExchangeOperationFailedError,\n '-2024': InsufficientBalanceError,\n '-2025': TradeError,\n '-2026': InvalidParamsError,\n '-2027': TradeError,\n '-2028': InsufficientBalanceError,\n '-4000': InvalidParamsError,\n '-4001': InvalidParamsError,\n '-4002': InvalidParamsError,\n '-4003': InvalidParamsError,\n '-4004': InvalidParamsError,\n '-4005': InvalidParamsError,\n '-4006': InvalidParamsError,\n '-4007': InvalidParamsError,\n '-4008': InvalidParamsError,\n '-4009': InvalidParamsError,\n '-4010': InvalidParamsError,\n '-4011': InvalidParamsError,\n '-4012': InvalidParamsError,\n '-4013': InvalidParamsError,\n '-4014': InvalidParamsError,\n '-4015': InvalidParamsError,\n '-4016': TradeError,\n '-4017': InvalidParamsError,\n '-4018': InvalidParamsError,\n '-4019': TradeError,\n '-4020': InvalidParamsError,\n '-4021': InvalidParamsError,\n '-4022': InvalidParamsError,\n '-4023': InvalidParamsError,\n '-4024': InvalidParamsError,\n '-4025': InvalidParamsError,\n '-4026': InvalidParamsError,\n '-4027': InvalidParamsError,\n '-4028': InvalidParamsError,\n '-4029': InvalidParamsError,\n '-4030': InvalidParamsError,\n '-4031': InvalidParamsError,\n '-4032': TradeError,\n '-4033': InvalidParamsError,\n '-4044': InvalidParamsError,\n '-4045': TradeError,\n '-4046': TradeError,\n '-4047': TradeError,\n '-4048': TradeError,\n '-4049': TradeError,\n '-4050': InsufficientBalanceError,\n '-4051': InsufficientBalanceError,\n '-4052': ExchangeOperationFailedError,\n '-4053': TradeError,\n '-4054': ExchangeOperationFailedError,\n '-4055': InvalidParamsError,\n '-4056': AuthenticationError,\n '-4057': AuthenticationError,\n '-4058': InvalidParamsError,\n '-4059': InvalidParamsError,\n '-4060': InvalidParamsError,\n '-4061': InvalidParamsError,\n '-4062': InvalidParamsError,\n '-4063': InvalidParamsError,\n '-4064': InvalidParamsError,\n '-4065': InvalidParamsError,\n '-4066': InvalidParamsError,\n '-4067': ExchangeOperationFailedError,\n '-4068': ExchangeOperationFailedError,\n '-4069': InvalidParamsError,\n '-4070': InvalidParamsError,\n '-4071': InvalidParamsError,\n '-4072': TradeError,\n '-4073': InvalidParamsError,\n '-4074': InvalidParamsError,\n '-4075': TradeError,\n '-4076': TradeError,\n '-4077': TradeError,\n '-4078': ExchangeOperationFailedError,\n '-4079': InvalidParamsError,\n '-4080': ExchangeInvalidPermissionsError,\n '-4081': TradeError,\n '-4082': TradeError,\n '-4083': TradeError,\n '-4084': ExchangeError,\n '-4085': InvalidParamsError,\n '-4086': TradeError,\n '-4087': ExchangeInvalidPermissionsError,\n '-4088': ExchangeInvalidPermissionsError,\n '-4104': ExchangeError,\n '-4114': ExchangeError,\n '-4115': ExchangeError,\n '-4118': ExchangeOperationFailedError,\n '-4131': ExchangeOperationFailedError,\n '-4135': InvalidParamsError,\n '-4137': InvalidParamsError,\n '-4138': InvalidParamsError,\n '-4139': InvalidParamsError,\n '-4140': InvalidParamsError,\n '-4141': ExchangeOperationFailedError,\n '-4142': TradeError,\n '-4144': MarketNotFoundError,\n '-4164': ExchangeOperationFailedError,\n '-4165': InvalidParamsError,\n '-4167': ExchangeOperationFailedError,\n '-4168': ExchangeOperationFailedError,\n '-4169': ExchangeOperationFailedError,\n '-4170': ExchangeOperationFailedError,\n '-4171': ExchangeOperationFailedError,\n '-4172 ': ExchangeOperationFailedError,\n '-4183': InvalidParamsError,\n '-4184': InvalidParamsError,\n '-4192': TradeError,\n '-4202': ExchangeInvalidPermissionsError,\n '-4203': ExchangeInvalidPermissionsError,\n '-4205': ExchangeInvalidPermissionsError,\n '-4206': ExchangeInvalidPermissionsError,\n '-4208': ExchangeOperationFailedError,\n '-4209': ExchangeOperationFailedError,\n '-4210': InvalidParamsError,\n '-4211': InvalidParamsError,\n '-4400': ExchangeInvalidPermissionsError,\n '-4401': ExchangeInvalidPermissionsError,\n '-4402': ExchangeInvalidPermissionsError,\n '-4403': ExchangeInvalidPermissionsError,\n '-5021': TradeError,\n '-5022': TradeError,\n '-5024': ExchangeOperationFailedError,\n '-5025': ExchangeOperationFailedError,\n '-5026': ExchangeOperationFailedError,\n '-5027': ExchangeOperationFailedError,\n '-5028': InvalidParamsError,\n '-5037': TradeError,\n '-5038': InvalidParamsError,\n '-5039': InvalidParamsError,\n '-5040': InvalidParamsError,\n '-5041': ExchangeOperationFailedError,\n //\n // spot & futures algo (TBD for OPTIONS & PORTFOLIO MARGIN)\n //\n '-20121': MarketNotFoundError,\n '-20124': InvalidParamsError,\n '-20130': InvalidParamsError,\n '-20132': TradeError,\n '-20194': InvalidParamsError,\n '-20195': InvalidParamsError,\n '-20196': InvalidParamsError,\n '-20198': ExchangeOperationFailedError,\n '-20204': InvalidParamsError, // The notional of USD is less or more than the limit.\n },\n },\n 'inverse': {\n // https://binance-docs.github.io/apidocs/delivery/en/#error-codes\n 'exact': {\n '-1000': InternalError,\n '-1001': InternalError,\n '-1002': AuthenticationError,\n '-1003': ExchangeRateLimitExceededError,\n '-1004': ExchangeOperationFailedError,\n '-1005': ExchangeInvalidPermissionsError,\n '-1006': InternalError,\n '-1007': InternalError,\n '-1010': ExchangeOperationFailedError,\n '-1011': ExchangeInvalidPermissionsError,\n '-1013': InvalidParamsError,\n '-1014': InvalidParamsError,\n '-1015': ExchangeRateLimitExceededError,\n '-1016': ExchangeError,\n '-1020': ExchangeError,\n '-1021': ExchangeInvalidNonceError,\n '-1022': AuthenticationError,\n '-1023': InvalidParamsError,\n '-1100': InvalidParamsError,\n '-1101': InvalidParamsError,\n '-1102': InvalidParamsError,\n '-1103': InvalidParamsError,\n '-1104': InvalidParamsError,\n '-1105': InvalidParamsError,\n '-1106': InvalidParamsError,\n '-1108': ExchangeUnknownAssetError,\n '-1109': AuthenticationError,\n '-1110': ExchangeUnknownAssetError,\n '-1111': InvalidParamsError,\n '-1112': ExchangeOperationFailedError,\n '-1113': InvalidParamsError,\n '-1114': InvalidParamsError,\n '-1115': InvalidParamsError,\n '-1116': InvalidParamsError,\n '-1117': InvalidParamsError,\n '-1118': InvalidParamsError,\n '-1119': InvalidParamsError,\n '-1120': InvalidParamsError,\n '-1121': MarketError,\n '-1125': AuthenticationError,\n '-1127': InvalidParamsError,\n '-1128': InvalidParamsError,\n '-1130': InvalidParamsError,\n '-1136': InvalidParamsError,\n '-2010': TradeError,\n '-2011': OrderNotFoundError,\n '-2013': OrderNotFoundError,\n '-2014': AuthenticationError,\n '-2015': AuthenticationError,\n '-2016': ExchangeOperationFailedError,\n '-2018': InsufficientBalanceError,\n '-2019': InsufficientBalanceError,\n '-2020': ExchangeOperationFailedError,\n '-2021': TradeError,\n '-2022': TradeError,\n '-2023': ExchangeOperationFailedError,\n '-2024': TradeError,\n '-2025': ExchangeOperationFailedError,\n '-2026': InvalidParamsError,\n '-2027': ExchangeOperationFailedError,\n '-2028': ExchangeOperationFailedError,\n '-4000': InvalidParamsError,\n '-4001': InvalidParamsError,\n '-4002': InvalidParamsError,\n '-4003': InvalidParamsError,\n '-4004': InvalidParamsError,\n '-4005': InvalidParamsError,\n '-4006': InvalidParamsError,\n '-4007': InvalidParamsError,\n '-4008': InvalidParamsError,\n '-4009': InvalidParamsError,\n '-4010': InvalidParamsError,\n '-4011': InvalidParamsError,\n '-4012': InvalidParamsError,\n '-4013': InvalidParamsError,\n '-4014': InvalidParamsError,\n '-4015': InvalidParamsError,\n '-4016': InvalidParamsError,\n '-4017': InvalidParamsError,\n '-4018': InvalidParamsError,\n '-4019': ExchangeOperationFailedError,\n '-4020': InvalidParamsError,\n '-4021': InvalidParamsError,\n '-4022': InvalidParamsError,\n '-4023': InvalidParamsError,\n '-4024': InvalidParamsError,\n '-4025': InvalidParamsError,\n '-4026': InvalidParamsError,\n '-4027': InvalidParamsError,\n '-4028': InvalidParamsError,\n '-4029': InvalidParamsError,\n '-4030': InvalidParamsError,\n '-4031': InvalidParamsError,\n '-4032': ExchangeOperationFailedError,\n '-4033': ExchangeError,\n '-4044': ExchangeError,\n '-4045': ExchangeOperationFailedError,\n '-4046': ExchangeError,\n '-4047': ExchangeOperationFailedError,\n '-4048': ExchangeOperationFailedError,\n '-4049': ExchangeOperationFailedError,\n '-4050': InsufficientBalanceError,\n '-4051': InsufficientBalanceError,\n '-4052': ExchangeOperationFailedError,\n '-4053': ExchangeOperationFailedError,\n '-4054': ExchangeOperationFailedError,\n '-4055': InvalidParamsError,\n '-4056': AuthenticationError,\n '-4057': AuthenticationError,\n '-4058': InvalidParamsError,\n '-4059': InvalidParamsError,\n '-4060': InvalidParamsError,\n '-4061': ExchangeOperationFailedError,\n '-4062': InvalidParamsError,\n //\n '-4067': ExchangeOperationFailedError,\n '-4068': ExchangeOperationFailedError,\n '-4082': ExchangeOperationFailedError,\n '-4083': ExchangeOperationFailedError,\n '-4084': ExchangeNotAllowedMethodError,\n '-4086': InvalidParamsError,\n '-4087': InvalidParamsError,\n '-4088': InvalidParamsError,\n '-4089': ExchangeInvalidPermissionsError,\n '-4090': ExchangeInvalidPermissionsError,\n '-4104': ExchangeError,\n '-4110': ExchangeError,\n '-4111': ExchangeError,\n '-4112': ExchangeOperationFailedError,\n '-4113': ExchangeOperationFailedError,\n '-4135': InvalidParamsError,\n '-4137': InvalidParamsError,\n '-4138': InvalidParamsError,\n '-4139': InvalidParamsError,\n '-4142': TradeError,\n '-4150': ExchangeOperationFailedError,\n '-4151': InvalidParamsError,\n '-4152': InvalidParamsError,\n '-4154': InvalidParamsError,\n '-4155': InvalidParamsError,\n '-4178': InvalidParamsError,\n '-4192': TradeError,\n '-4194': ExchangeInvalidPermissionsError,\n '-4195': ExchangeInvalidPermissionsError,\n '-4196': InvalidParamsError,\n '-4197': ExchangeOperationFailedError,\n '-4198': ExchangeOperationFailedError,\n '-4199': ExchangeError,\n '-4200': ExchangeInvalidPermissionsError,\n '-4201': ExchangeInvalidPermissionsError,\n '-4202': ExchangeOperationFailedError,\n '-4188': ExchangeError,\n //\n // spot & futures algo\n //\n '-20121': MarketNotFoundError,\n '-20124': InvalidParamsError,\n '-20130': InvalidParamsError,\n '-20132': TradeError,\n '-20194': InvalidParamsError,\n '-20195': InvalidParamsError,\n '-20196': InvalidParamsError,\n '-20198': ExchangeOperationFailedError,\n '-20204': InvalidParamsError, // The notional of USD is less or more than the limit.\n },\n },\n 'option': {\n // https://binance-docs.github.io/apidocs/voptions/en/#error-codes\n 'exact': {\n '-1000': InternalError,\n '-1001': InternalError,\n '-1002': AuthenticationError,\n '-1008': ExchangeRateLimitExceededError,\n '-1014': TradeError,\n '-1015': ExchangeRateLimitExceededError,\n '-1016': ExchangeError,\n '-1020': ExchangeError,\n '-1021': ExchangeInvalidNonceError,\n '-1022': AuthenticationError,\n '-1100': InvalidParamsError,\n '-1101': InvalidParamsError,\n '-1102': InvalidParamsError,\n '-1103': InvalidParamsError,\n '-1104': InvalidParamsError,\n '-1105': InvalidParamsError,\n '-1106': InvalidParamsError,\n '-1111': InvalidParamsError,\n '-1115': InvalidParamsError,\n '-1116': InvalidParamsError,\n '-1117': InvalidParamsError,\n '-1118': InvalidParamsError,\n '-1119': InvalidParamsError,\n '-1120': InvalidParamsError,\n '-1121': InvalidParamsError,\n '-1125': AuthenticationError,\n '-1127': InvalidParamsError,\n '-1128': MarketError,\n '-1129': MarketError,\n '-1130': InvalidParamsError,\n '-1131': ExchangeError,\n '-2010': TradeError,\n '-2013': OrderNotFoundError,\n '-2014': AuthenticationError,\n '-2015': AuthenticationError,\n '-2018': InsufficientBalanceError,\n '-2027': InsufficientBalanceError,\n '-3029': ExchangeTransferError,\n '-4001': InvalidParamsError,\n '-4002': InvalidParamsError,\n '-4003': InvalidParamsError,\n '-4004': InvalidParamsError,\n '-4005': InvalidParamsError,\n '-4013': InvalidParamsError,\n '-4029': InvalidParamsError,\n '-4030': InvalidParamsError,\n '-4055': InvalidParamsError, // AMOUNT_MUST_BE_POSITIVE\n },\n },\n 'portfolioMargin': {\n 'exact': {\n '-1000': ExchangeError,\n '-1001': ExchangeError,\n '-1002': AuthenticationError,\n '-1003': ExchangeRateLimitExceededError,\n '-1004': ExchangeOperationFailedError,\n '-1005': ExchangeInvalidPermissionsError,\n '-1006': InternalError,\n '-1007': InternalError,\n '-1010': ExchangeOperationFailedError,\n '-1011': ExchangeInvalidPermissionsError,\n '-1013': ExchangeOperationFailedError,\n '-1014': TradeError,\n '-1015': ExchangeRateLimitExceededError,\n '-1016': ExchangeError,\n '-1020': ExchangeError,\n '-1021': ExchangeInvalidNonceError,\n '-1022': AuthenticationError,\n '-1023': InvalidParamsError,\n '-1100': InvalidParamsError,\n '-1101': InvalidParamsError,\n '-1102': InvalidParamsError,\n '-1103': InvalidParamsError,\n '-1104': InvalidParamsError,\n '-1105': InvalidParamsError,\n '-1106': InvalidParamsError,\n '-1108': MarketError,\n '-1109': TradeError,\n '-1110': MarketError,\n '-1111': InvalidParamsError,\n '-1112': ExchangeOperationFailedError,\n '-1113': InvalidParamsError,\n '-1114': InvalidParamsError,\n '-1115': InvalidParamsError,\n '-1116': InvalidParamsError,\n '-1117': InvalidParamsError,\n '-1118': InvalidParamsError,\n '-1119': InvalidParamsError,\n '-1120': InvalidParamsError,\n '-1121': MarketNotFoundError,\n '-1125': AuthenticationError,\n '-1127': InvalidParamsError,\n '-1128': InvalidParamsError,\n '-1130': InvalidParamsError,\n '-1136': TradeError,\n '-2010': TradeError,\n '-2011': OrderNotFoundError,\n '-2013': OrderNotFoundError,\n '-2014': AuthenticationError,\n '-2015': AuthenticationError,\n '-2016': ExchangeOperationFailedError,\n '-2018': InsufficientBalanceError,\n '-2019': InsufficientBalanceError,\n '-2020': TradeError,\n '-2021': TradeError,\n '-2022': TradeError,\n '-2023': ExchangeOperationFailedError,\n '-2024': ExchangeOperationFailedError,\n '-2025': ExchangeOperationFailedError,\n '-2026': InvalidParamsError,\n '-2027': ExchangeOperationFailedError,\n '-2028': ExchangeOperationFailedError,\n '-4000': InvalidParamsError,\n '-4001': InvalidParamsError,\n '-4002': InvalidParamsError,\n '-4003': InvalidParamsError,\n '-4004': InvalidParamsError,\n '-4005': InvalidParamsError,\n '-4006': InvalidParamsError,\n '-4007': InvalidParamsError,\n '-4008': InvalidParamsError,\n '-4009': InvalidParamsError,\n '-4010': InvalidParamsError,\n '-4011': InvalidParamsError,\n '-4012': InvalidParamsError,\n '-4013': InvalidParamsError,\n '-4014': InvalidParamsError,\n '-4015': InvalidParamsError,\n '-4016': InvalidParamsError,\n '-4017': InvalidParamsError,\n '-4018': InvalidParamsError,\n '-4019': ExchangeOperationFailedError,\n '-4020': InvalidParamsError,\n '-4021': InvalidParamsError,\n '-4022': InvalidParamsError,\n '-4023': InvalidParamsError,\n '-4024': InvalidParamsError,\n '-4025': InvalidParamsError,\n '-4026': InvalidParamsError,\n '-4027': InvalidParamsError,\n '-4028': InvalidParamsError,\n '-4029': InvalidParamsError,\n '-4030': InvalidParamsError,\n '-4031': InvalidParamsError,\n '-4032': ExchangeOperationFailedError,\n '-4033': TradeError,\n '-4044': InvalidParamsError,\n '-4045': ExchangeOperationFailedError,\n '-4046': ExchangeOperationFailedError,\n '-4047': ExchangeOperationFailedError,\n '-4048': ExchangeOperationFailedError,\n '-4049': InvalidParamsError,\n '-4050': InsufficientBalanceError,\n '-4051': InsufficientBalanceError,\n '-4052': ExchangeOperationFailedError,\n '-4053': TradeError,\n '-4054': ExchangeOperationFailedError,\n '-4055': InvalidParamsError,\n '-4056': AuthenticationError,\n '-4057': AuthenticationError,\n '-4058': InvalidParamsError,\n '-4059': InvalidParamsError,\n '-4060': InvalidParamsError,\n '-4061': InvalidParamsError,\n '-4062': InvalidParamsError,\n '-4063': InvalidParamsError,\n '-4064': InvalidParamsError,\n '-4065': InvalidParamsError,\n '-4066': InvalidParamsError,\n '-4067': ExchangeOperationFailedError,\n '-4068': ExchangeOperationFailedError,\n '-4069': InvalidParamsError,\n '-4070': InvalidParamsError,\n '-4071': InvalidParamsError,\n '-4072': ExchangeOperationFailedError,\n '-4073': InvalidParamsError,\n '-4074': InvalidParamsError,\n '-4075': InvalidParamsError,\n '-4076': ExchangeOperationFailedError,\n '-4077': ExchangeOperationFailedError,\n '-4078': ExchangeOperationFailedError,\n '-4079': InvalidParamsError,\n '-4080': ExchangeInvalidPermissionsError,\n '-4081': TradeError,\n '-4082': TradeError,\n '-4083': ExchangeOperationFailedError,\n '-4084': TradeError,\n '-4085': InvalidParamsError,\n '-4086': InvalidParamsError,\n '-4087': ExchangeInvalidPermissionsError,\n '-4088': ExchangeInvalidPermissionsError,\n '-4104': InvalidParamsError,\n '-4114': InvalidParamsError,\n '-4115': TradeError,\n '-4118': ExchangeOperationFailedError,\n '-4131': ExchangeOperationFailedError,\n '-4135': InvalidParamsError,\n '-4137': InvalidParamsError,\n '-4138': InvalidParamsError,\n '-4139': InvalidParamsError,\n '-4140': InvalidParamsError,\n '-4141': InvalidParamsError,\n '-4142': TradeError,\n '-4144': MarketNotFoundError,\n '-4161': ExchangeOperationFailedError,\n '-4164': ExchangeOperationFailedError,\n '-4165': InvalidParamsError,\n '-4183': InvalidParamsError,\n '-4184': InvalidParamsError,\n '-5021': TradeError,\n '-5022': TradeError, // Due to the order could not be executed as maker, the Post Only order will be rejected.\n },\n },\n 'exact': {\n 'System is under maintenance.': ExchangeUnderMaintenanceError,\n 'System abnormality': InternalError,\n 'You are not authorized to execute this request.': ExchangeInvalidPermissionsError,\n 'API key does not exist': AuthenticationError,\n 'Order would trigger immediately.': TradeError,\n 'Stop price would trigger immediately.': TradeError,\n 'Order would immediately match and take.': TradeError,\n 'Account has insufficient balance for requested action.': InsufficientBalanceError,\n 'Rest API trading is not enabled.': ExchangeInvalidPermissionsError,\n 'This account may not place or cancel orders.': ExchangeInvalidPermissionsError,\n \"You don't have permission.\": ExchangeInvalidPermissionsError,\n 'Market is closed.': MarketError,\n 'Too many requests. Please try again later.': ExchangeRateLimitExceededError,\n 'This action is disabled on this account.': ExchangeAccountSuspendedError,\n 'Limit orders require GTC for this phase.': TradeError,\n 'This order type is not possible in this trading phase.': InvalidParamsError,\n 'This type of sub-account exceeds the maximum number limit': ExchangeOperationFailedError,\n 'This symbol is restricted for this account.': ExchangeInvalidPermissionsError,\n 'This symbol is not permitted for this account.': ExchangeInvalidPermissionsError, // {\"code\":-2010,\"msg\":\"This symbol is not permitted for this account.\"}\n },\n 'broad': {\n 'has no operation privilege': ExchangeInvalidPermissionsError,\n 'MAX_POSITION': TradeError, // {\"code\":-2010,\"msg\":\"Filter failure: MAX_POSITION\"}\n },\n 'messages': {\n 'Filter failure: NOTIONAL': SdkErrorMessages.ORDER_UNDER_MINIMUM,\n },\n },\n });\n }\n isUsingForcedProxy(params, api = undefined) {\n if (params && params.forceProxy) {\n delete params['forceProxy'];\n return true;\n }\n return false;\n }\n isInverse(type, subType = undefined) {\n if (subType === undefined) {\n return type === 'delivery';\n }\n else {\n return subType === 'inverse';\n }\n }\n isLinear(type, subType = undefined) {\n if (subType === undefined) {\n return (type === 'future') || (type === 'swap');\n }\n else {\n return subType === 'linear';\n }\n }\n convertExpireDate(date) {\n // parse YYMMDD to timestamp\n const year = date.slice(0, 2);\n const month = date.slice(2, 4);\n const day = date.slice(4, 6);\n const reconstructedDate = '20' + year + '-' + month + '-' + day + 'T00:00:00Z';\n return reconstructedDate;\n }\n createExpiredOptionMarket(symbol) {\n // support expired option contracts\n const settle = 'USDT';\n const optionParts = symbol.split('-');\n const symbolBase = symbol.split('/');\n let base = undefined;\n if (symbol.indexOf('/') > -1) {\n base = this.safeString(symbolBase, 0);\n }\n else {\n base = this.safeString(optionParts, 0);\n }\n const expiry = this.safeString(optionParts, 1);\n const strike = this.safeInteger(optionParts, 2);\n const strikeAsString = this.safeString(optionParts, 2);\n const optionType = this.safeString(optionParts, 3);\n const datetime = this.convertExpireDate(expiry);\n const timestamp = this.parse8601(datetime);\n return {\n 'id': base + '-' + expiry + '-' + strikeAsString + '-' + optionType,\n 'symbol': base + '/' + settle + ':' + settle + '-' + expiry + '-' + strikeAsString + '-' + optionType,\n 'base': base,\n 'quote': settle,\n 'baseId': base,\n 'quoteId': settle,\n 'active': undefined,\n 'type': 'option',\n 'linear': undefined,\n 'inverse': undefined,\n 'spot': false,\n 'swap': false,\n 'future': false,\n 'option': true,\n 'margin': false,\n 'contract': true,\n 'contractSize': undefined,\n 'expiry': timestamp,\n 'expiryDatetime': datetime,\n 'optionType': (optionType === 'C') ? 'call' : 'put',\n 'strike': strike,\n 'settle': settle,\n 'settleId': settle,\n 'precision': {\n 'amount': undefined,\n 'price': undefined,\n },\n 'limits': {\n 'amount': {\n 'min': undefined,\n 'max': undefined,\n },\n 'price': {\n 'min': undefined,\n 'max': undefined,\n },\n 'cost': {\n 'min': undefined,\n 'max': undefined,\n },\n },\n 'info': undefined,\n };\n }\n market(symbol) {\n if (this.markets === undefined) {\n throw new MarketNotLoadedError().exchange(this.id);\n }\n // defaultType has legacy support on binance\n let defaultType = this.safeString(this.options, 'defaultType');\n const defaultSubType = this.safeString(this.options, 'defaultSubType');\n const isLegacyLinear = defaultType === 'future';\n const isLegacyInverse = defaultType === 'delivery';\n const isLegacy = isLegacyLinear || isLegacyInverse;\n if (typeof symbol === 'string') {\n if (symbol in this.markets) {\n const market = this.markets[symbol];\n // begin diff\n if (isLegacy && market['spot']) {\n const settle = isLegacyLinear ? market['quote'] : market['base'];\n const futuresSymbol = symbol + ':' + settle;\n if (futuresSymbol in this.markets) {\n return this.markets[futuresSymbol];\n }\n }\n else {\n return market;\n }\n // end diff\n }\n else if (symbol in this.markets_by_id) {\n const markets = this.markets_by_id[symbol];\n // begin diff\n if (isLegacyLinear) {\n defaultType = 'linear';\n }\n else if (isLegacyInverse) {\n defaultType = 'inverse';\n }\n else if (defaultType === undefined) {\n defaultType = defaultSubType;\n }\n // end diff\n for (let i = 0; i < markets.length; i++) {\n const market = markets[i];\n if (market[defaultType]) {\n return market;\n }\n }\n return markets[0];\n }\n else if ((symbol.indexOf('/') > -1) && (symbol.indexOf(':') < 0)) {\n // support legacy symbols\n const [base, quote] = symbol.split('/');\n const settle = (quote === 'USD') ? base : quote;\n const futuresSymbol = symbol + ':' + settle;\n if (futuresSymbol in this.markets) {\n return this.markets[futuresSymbol];\n }\n }\n else if ((symbol.indexOf('-C') > -1) || (symbol.indexOf('-P') > -1)) { // both exchange-id and unified symbols are supported this way regardless of the defaultType\n return this.createExpiredOptionMarket(symbol);\n }\n }\n throw new MarketNotFoundError(symbol).exchange(this.id);\n }\n safeMarket(marketId = undefined, market = undefined, delimiter = undefined, marketType = undefined) {\n const isOption = (marketId !== undefined) && ((marketId.indexOf('-C') > -1) || (marketId.indexOf('-P') > -1));\n if (isOption && !(marketId in this.markets_by_id)) {\n // handle expired option contracts\n return this.createExpiredOptionMarket(marketId);\n }\n return super.safeMarket(marketId, market, delimiter, marketType);\n }\n costToPrecision(symbol, cost) {\n return this.decimalToPrecision(cost, TRUNCATE, this.markets[symbol]['precision']['quote'], this.precisionMode, this.paddingMode);\n }\n nonce() {\n return this.milliseconds() - this.options['timeDifference'];\n }\n async fetchTime(params = {}) {\n /**\n * @method\n * @name binance#fetchTime\n * @description fetches the current integer timestamp in milliseconds from the exchange server\n * @see https://binance-docs.github.io/apidocs/spot/en/#check-server-time // spot\n * @see https://binance-docs.github.io/apidocs/futures/en/#check-server-time // swap\n * @see https://binance-docs.github.io/apidocs/delivery/en/#check-server-time // future\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {int} the current integer timestamp in milliseconds from the exchange server\n */\n const defaultType = this.safeString2(this.options, 'fetchTime', 'defaultType', 'spot');\n const type = this.safeString(params, 'type', defaultType);\n const query = this.omit(params, 'type');\n let subType = undefined;\n [subType, params] = this.handleSubTypeAndParams('fetchTime', undefined, params);\n let response = undefined;\n if (this.isLinear(type, subType)) {\n response = await this.fapiPublicGetTime(query);\n }\n else if (this.isInverse(type, subType)) {\n response = await this.dapiPublicGetTime(query);\n }\n else {\n response = await this.publicGetTime(query);\n }\n return this.safeInteger(response, 'serverTime');\n }\n async fetchCurrencies(params = {}) {\n /**\n * @method\n * @name binance#fetchCurrencies\n * @description fetches all available currencies on an exchange\n * @see https://binance-docs.github.io/apidocs/spot/en/#all-coins-39-information-user_data\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} an associative dictionary of currencies\n */\n const fetchCurrenciesEnabled = this.safeValue(this.options, 'fetchCurrencies');\n if (!fetchCurrenciesEnabled) {\n return undefined;\n }\n // this endpoint requires authentication\n // while fetchCurrencies is a public API method by design\n // therefore we check the keys here\n // and fallback to generating the currencies from the markets\n if (!this.checkRequiredCredentials(false)) {\n return undefined;\n }\n // sandbox/testnet does not support sapi endpoints\n const apiBackup = this.safeValue(this.urls, 'apiBackup');\n if (apiBackup !== undefined) {\n return undefined;\n }\n const response = await this.sapiGetCapitalConfigGetall(params);\n const result = {};\n const legalMoney = this.safeValue(this.options, 'legalMoney', {});\n for (let i = 0; i < response.length; i++) {\n //\n // {\n // \"coin\": \"LINK\",\n // \"depositAllEnable\": true,\n // \"withdrawAllEnable\": true,\n // \"name\": \"ChainLink\",\n // \"free\": \"0\",\n // \"locked\": \"0\",\n // \"freeze\": \"0\",\n // \"withdrawing\": \"0\",\n // \"ipoing\": \"0\",\n // \"ipoable\": \"0\",\n // \"storage\": \"0\",\n // \"isLegalMoney\": false,\n // \"trading\": true,\n // \"networkList\": [\n // {\n // \"network\": \"BSC\",\n // \"coin\": \"LINK\",\n // \"withdrawIntegerMultiple\": \"0.00000001\",\n // \"isDefault\": false,\n // \"depositEnable\": true,\n // \"withdrawEnable\": true,\n // \"depositDesc\": \"\",\n // \"withdrawDesc\": \"\",\n // \"specialTips\": \"\",\n // \"specialWithdrawTips\": \"The network you have selected is BSC. Please ensure that the withdrawal address supports the Binance Smart Chain network. You will lose your assets if the chosen platform does not support retrievals.\",\n // \"name\": \"BNB Smart Chain (BEP20)\",\n // \"resetAddressStatus\": false,\n // \"addressRegex\": \"^(0x)[0-9A-Fa-f]{40}$\",\n // \"addressRule\": \"\",\n // \"memoRegex\": \"\",\n // \"withdrawFee\": \"0.012\",\n // \"withdrawMin\": \"0.024\",\n // \"withdrawMax\": \"9999999999.99999999\",\n // \"minConfirm\": \"15\",\n // \"unLockConfirm\": \"0\",\n // \"sameAddress\": false,\n // \"estimatedArrivalTime\": \"5\",\n // \"busy\": false,\n // \"country\": \"AE,BINANCE_BAHRAIN_BSC\"\n // },\n // {\n // \"network\": \"BNB\",\n // \"coin\": \"LINK\",\n // \"withdrawIntegerMultiple\": \"0.00000001\",\n // \"isDefault\": false,\n // \"depositEnable\": true,\n // \"withdrawEnable\": true,\n // \"depositDesc\": \"\",\n // \"withdrawDesc\": \"\",\n // \"specialTips\": \"Both a MEMO and an Address are required to successfully deposit your LINK BEP2 tokens to Binance.\",\n // \"specialWithdrawTips\": \"\",\n // \"name\": \"BNB Beacon Chain (BEP2)\",\n // \"resetAddressStatus\": false,\n // \"addressRegex\": \"^(bnb1)[0-9a-z]{38}$\",\n // \"addressRule\": \"\",\n // \"memoRegex\": \"^[0-9A-Za-z\\\\-_]{1,120}$\",\n // \"withdrawFee\": \"0.002\",\n // \"withdrawMin\": \"0.01\",\n // \"withdrawMax\": \"10000000000\",\n // \"minConfirm\": \"1\",\n // \"unLockConfirm\": \"0\",\n // \"sameAddress\": true,\n // \"estimatedArrivalTime\": \"5\",\n // \"busy\": false,\n // \"country\": \"AE,BINANCE_BAHRAIN_BSC\"\n // },\n // {\n // \"network\": \"ETH\",\n // \"coin\": \"LINK\",\n // \"withdrawIntegerMultiple\": \"0.00000001\",\n // \"isDefault\": true,\n // \"depositEnable\": true,\n // \"withdrawEnable\": true,\n // \"depositDesc\": \"\",\n // \"withdrawDesc\": \"\",\n // \"name\": \"Ethereum (ERC20)\",\n // \"resetAddressStatus\": false,\n // \"addressRegex\": \"^(0x)[0-9A-Fa-f]{40}$\",\n // \"addressRule\": \"\",\n // \"memoRegex\": \"\",\n // \"withdrawFee\": \"0.55\",\n // \"withdrawMin\": \"1.1\",\n // \"withdrawMax\": \"10000000000\",\n // \"minConfirm\": \"12\",\n // \"unLockConfirm\": \"0\",\n // \"sameAddress\": false,\n // \"estimatedArrivalTime\": \"5\",\n // \"busy\": false,\n // \"country\": \"AE,BINANCE_BAHRAIN_BSC\"\n // }\n // ]\n // }\n //\n const entry = response[i];\n const id = this.safeString(entry, 'coin');\n const name = this.safeString(entry, 'name');\n const code = this.safeCurrencyCode(id);\n if (!(code in legalMoney)) {\n let minPrecision = undefined;\n let isTokenWithdrawable = false;\n let isTokenDepositable = false;\n const networkList = this.safeValue(entry, 'networkList', []);\n const networksById = {};\n const fees = {};\n let fee = undefined;\n for (let j = 0; j < networkList.length; j++) {\n const networkItem = networkList[j];\n const networkCode = this.safeString(networkItem, 'network');\n const network = this.safeStringUpper(networkItem, 'network');\n const networks = this.safeDict(this.options, 'networks', {});\n const ecid = this.safeString(networks, network, network); // handle ERC20>ETH alias\n networkList[j]['network'] = ecid;\n const networkId = this.safeString(networkItem, 'name');\n // const name = this.safeString (networkItem, 'name');\n const withdrawFee = this.safeNumber(networkItem, 'withdrawFee');\n const isDepositEnabled = this.safeValue(networkItem, 'depositEnable');\n const isWithdrawalEnabled = this.safeValue(networkItem, 'withdrawEnable');\n isTokenDepositable = isDepositEnabled || isTokenDepositable;\n isTokenWithdrawable = isWithdrawalEnabled || isTokenWithdrawable;\n fees[networkCode] = withdrawFee;\n const isDefault = this.safeValue(networkItem, 'isDefault');\n if (isDefault || (fee === undefined)) {\n fee = withdrawFee;\n }\n const precisionTick = this.safeString(networkItem, 'withdrawIntegerMultiple');\n // avoid zero values, which are mostly from fiat or leveraged tokens : https://github.com/ccxt/ccxt/pull/14902#issuecomment-1271636731\n // so, when there is zero instead of i.e. 0.001, then we skip those cases, because we don't know the precision - it might be because of network is suspended or other reasons\n if (!Precise.stringEq(precisionTick, '0')) {\n minPrecision = (minPrecision === undefined) ? precisionTick : Precise.stringMin(minPrecision, precisionTick);\n }\n const minNetworkWithdrawString = this.safeValue(networkItem, 'withdrawMin');\n const maxNetworkWithdrawString = this.safeValue(networkItem, 'withdrawMax');\n const precision = this.precisionFromString(this.safeString(networkItem, 'withdrawIntegerMultiple'));\n networksById[ecid] = {\n 'info': networkList[j],\n 'id': networkId,\n 'name': networkId,\n 'network': networkCode,\n 'active': isDepositEnabled && isWithdrawalEnabled,\n 'deposit': isDepositEnabled,\n 'withdraw': isWithdrawalEnabled,\n 'fee': withdrawFee,\n 'precision': precision,\n 'limits': {\n 'withdraw': {\n 'min': this.parseNumber(minNetworkWithdrawString),\n 'max': this.parseNumber(maxNetworkWithdrawString),\n },\n 'deposit': {\n 'min': undefined,\n 'max': undefined,\n },\n },\n };\n }\n const trading = this.safeValue(entry, 'trading');\n const active = (isTokenWithdrawable && isTokenDepositable && trading);\n let maxDecimalPlaces = undefined;\n if (minPrecision !== undefined) {\n maxDecimalPlaces = parseInt(this.numberToString(this.precisionFromString(minPrecision)));\n }\n result[code] = {\n 'id': id,\n 'name': name,\n 'code': code,\n 'precision': maxDecimalPlaces,\n 'info': entry,\n 'active': active,\n 'deposit': isTokenDepositable,\n 'withdraw': isTokenWithdrawable,\n 'networks': networksById,\n 'fee': fee,\n 'fees': fees,\n 'limits': this.limits,\n };\n }\n }\n return result;\n }\n async fetchMarkets(params = {}) {\n /**\n * @method\n * @name binance#fetchMarkets\n * @description retrieves data on all markets for binance\n * @see https://binance-docs.github.io/apidocs/spot/en/#exchange-information // spot\n * @see https://binance-docs.github.io/apidocs/futures/en/#exchange-information // swap\n * @see https://binance-docs.github.io/apidocs/delivery/en/#exchange-information // future\n * @see https://binance-docs.github.io/apidocs/voptions/en/#exchange-information // option\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object[]} an array of objects representing market data\n */\n const promisesRaw = [];\n const rawFetchMarkets = this.safeList(this.options, 'fetchMarkets', ['spot', 'linear', 'inverse']);\n const sandboxMode = this.safeBool(this.options, 'sandboxMode', false);\n const fetchMarkets = [];\n for (let i = 0; i < rawFetchMarkets.length; i++) {\n const type = rawFetchMarkets[i];\n if (type === 'option' && sandboxMode) {\n continue;\n }\n fetchMarkets.push(type);\n }\n for (let i = 0; i < fetchMarkets.length; i++) {\n const marketType = fetchMarkets[i];\n if (marketType === 'spot') {\n promisesRaw.push(this.publicGetExchangeInfo(params));\n }\n else if (marketType === 'linear') {\n promisesRaw.push(this.fapiPublicGetExchangeInfo(params));\n }\n else if (marketType === 'inverse') {\n promisesRaw.push(this.dapiPublicGetExchangeInfo(params));\n }\n else if (marketType === 'option') {\n promisesRaw.push(this.eapiPublicGetExchangeInfo(params));\n }\n else {\n throw new MarketTypeNotSupportedError(marketType).exchange(this.id);\n }\n }\n const promises = await Promise.all(promisesRaw);\n const spotMarkets = this.safeValue(this.safeValue(promises, 0), 'symbols', []);\n const futureMarkets = this.safeValue(this.safeValue(promises, 1), 'symbols', []);\n const deliveryMarkets = this.safeValue(this.safeValue(promises, 2), 'symbols', []);\n const optionMarkets = this.safeValue(this.safeValue(promises, 3), 'optionSymbols', []);\n let markets = spotMarkets;\n markets = this.arrayConcat(markets, futureMarkets);\n markets = this.arrayConcat(markets, deliveryMarkets);\n markets = this.arrayConcat(markets, optionMarkets);\n //\n // spot / margin\n //\n // {\n // \"timezone\":\"UTC\",\n // \"serverTime\":1575416692969,\n // \"rateLimits\":[\n // {\"rateLimitType\":\"REQUEST_WEIGHT\",\"interval\":\"MINUTE\",\"intervalNum\":1,\"limit\":1200},\n // {\"rateLimitType\":\"ORDERS\",\"interval\":\"SECOND\",\"intervalNum\":10,\"limit\":100},\n // {\"rateLimitType\":\"ORDERS\",\"interval\":\"DAY\",\"intervalNum\":1,\"limit\":200000}\n // ],\n // \"exchangeFilters\":[],\n // \"symbols\":[\n // {\n // \"symbol\":\"ETHBTC\",\n // \"status\":\"TRADING\",\n // \"baseAsset\":\"ETH\",\n // \"baseAssetPrecision\":8,\n // \"quoteAsset\":\"BTC\",\n // \"quotePrecision\":8,\n // \"baseCommissionPrecision\":8,\n // \"quoteCommissionPrecision\":8,\n // \"orderTypes\":[\"LIMIT\",\"LIMIT_MAKER\",\"MARKET\",\"STOP_LOSS_LIMIT\",\"TAKE_PROFIT_LIMIT\"],\n // \"icebergAllowed\":true,\n // \"ocoAllowed\":true,\n // \"quoteOrderQtyMarketAllowed\":true,\n // \"allowTrailingStop\":false,\n // \"isSpotTradingAllowed\":true,\n // \"isMarginTradingAllowed\":true,\n // \"filters\":[\n // {\"filterType\":\"PRICE_FILTER\",\"minPrice\":\"0.00000100\",\"maxPrice\":\"100000.00000000\",\"tickSize\":\"0.00000100\"},\n // {\"filterType\":\"PERCENT_PRICE\",\"multiplierUp\":\"5\",\"multiplierDown\":\"0.2\",\"avgPriceMins\":5},\n // {\"filterType\":\"LOT_SIZE\",\"minQty\":\"0.00100000\",\"maxQty\":\"100000.00000000\",\"stepSize\":\"0.00100000\"},\n // {\"filterType\":\"MIN_NOTIONAL\",\"minNotional\":\"0.00010000\",\"applyToMarket\":true,\"avgPriceMins\":5},\n // {\"filterType\":\"ICEBERG_PARTS\",\"limit\":10},\n // {\"filterType\":\"MARKET_LOT_SIZE\",\"minQty\":\"0.00000000\",\"maxQty\":\"63100.00000000\",\"stepSize\":\"0.00000000\"},\n // {\"filterType\":\"MAX_NUM_ORDERS\",\"maxNumOrders\":200},\n // {\"filterType\":\"MAX_NUM_ALGO_ORDERS\",\"maxNumAlgoOrders\":5}\n // ],\n // \"permissions\":[\"SPOT\",\"MARGIN\"]}\n // },\n // ],\n // }\n //\n // futures/usdt-margined (fapi)\n //\n // {\n // \"timezone\":\"UTC\",\n // \"serverTime\":1575417244353,\n // \"rateLimits\":[\n // {\"rateLimitType\":\"REQUEST_WEIGHT\",\"interval\":\"MINUTE\",\"intervalNum\":1,\"limit\":1200},\n // {\"rateLimitType\":\"ORDERS\",\"interval\":\"MINUTE\",\"intervalNum\":1,\"limit\":1200}\n // ],\n // \"exchangeFilters\":[],\n // \"symbols\":[\n // {\n // \"symbol\":\"BTCUSDT\",\n // \"status\":\"TRADING\",\n // \"maintMarginPercent\":\"2.5000\",\n // \"requiredMarginPercent\":\"5.0000\",\n // \"baseAsset\":\"BTC\",\n // \"quoteAsset\":\"USDT\",\n // \"pricePrecision\":2,\n // \"quantityPrecision\":3,\n // \"baseAssetPrecision\":8,\n // \"quotePrecision\":8,\n // \"filters\":[\n // {\"minPrice\":\"0.01\",\"maxPrice\":\"100000\",\"filterType\":\"PRICE_FILTER\",\"tickSize\":\"0.01\"},\n // {\"stepSize\":\"0.001\",\"filterType\":\"LOT_SIZE\",\"maxQty\":\"1000\",\"minQty\":\"0.001\"},\n // {\"stepSize\":\"0.001\",\"filterType\":\"MARKET_LOT_SIZE\",\"maxQty\":\"1000\",\"minQty\":\"0.001\"},\n // {\"limit\":200,\"filterType\":\"MAX_NUM_ORDERS\"},\n // {\"multiplierDown\":\"0.8500\",\"multiplierUp\":\"1.1500\",\"multiplierDecimal\":\"4\",\"filterType\":\"PERCENT_PRICE\"}\n // ],\n // \"orderTypes\":[\"LIMIT\",\"MARKET\",\"STOP\"],\n // \"timeInForce\":[\"GTC\",\"IOC\",\"FOK\",\"GTX\"]\n // }\n // ]\n // }\n //\n // delivery/coin-margined (dapi)\n //\n // {\n // \"timezone\": \"UTC\",\n // \"serverTime\": 1597667052958,\n // \"rateLimits\": [\n // {\"rateLimitType\":\"REQUEST_WEIGHT\",\"interval\":\"MINUTE\",\"intervalNum\":1,\"limit\":6000},\n // {\"rateLimitType\":\"ORDERS\",\"interval\":\"MINUTE\",\"intervalNum\":1,\"limit\":6000}\n // ],\n // \"exchangeFilters\": [],\n // \"symbols\": [\n // {\n // \"symbol\": \"BTCUSD_200925\",\n // \"pair\": \"BTCUSD\",\n // \"contractType\": \"CURRENT_QUARTER\",\n // \"deliveryDate\": 1601020800000,\n // \"onboardDate\": 1590739200000,\n // \"contractStatus\": \"TRADING\",\n // \"contractSize\": 100,\n // \"marginAsset\": \"BTC\",\n // \"maintMarginPercent\": \"2.5000\",\n // \"requiredMarginPercent\": \"5.0000\",\n // \"baseAsset\": \"BTC\",\n // \"quoteAsset\": \"USD\",\n // \"pricePrecision\": 1,\n // \"quantityPrecision\": 0,\n // \"baseAssetPrecision\": 8,\n // \"quotePrecision\": 8,\n // \"equalQtyPrecision\": 4,\n // \"filters\": [\n // {\"minPrice\":\"0.1\",\"maxPrice\":\"100000\",\"filterType\":\"PRICE_FILTER\",\"tickSize\":\"0.1\"},\n // {\"stepSize\":\"1\",\"filterType\":\"LOT_SIZE\",\"maxQty\":\"100000\",\"minQty\":\"1\"},\n // {\"stepSize\":\"0\",\"filterType\":\"MARKET_LOT_SIZE\",\"maxQty\":\"100000\",\"minQty\":\"1\"},\n // {\"limit\":200,\"filterType\":\"MAX_NUM_ORDERS\"},\n // {\"multiplierDown\":\"0.9500\",\"multiplierUp\":\"1.0500\",\"multiplierDecimal\":\"4\",\"filterType\":\"PERCENT_PRICE\"}\n // ],\n // \"orderTypes\": [\"LIMIT\",\"MARKET\",\"STOP\",\"STOP_MARKET\",\"TAKE_PROFIT\",\"TAKE_PROFIT_MARKET\",\"TRAILING_STOP_MARKET\"],\n // \"timeInForce\": [\"GTC\",\"IOC\",\"FOK\",\"GTX\"]\n // },\n // {\n // \"symbol\": \"BTCUSD_PERP\",\n // \"pair\": \"BTCUSD\",\n // \"contractType\": \"PERPETUAL\",\n // \"deliveryDate\": 4133404800000,\n // \"onboardDate\": 1596006000000,\n // \"contractStatus\": \"TRADING\",\n // \"contractSize\": 100,\n // \"marginAsset\": \"BTC\",\n // \"maintMarginPercent\": \"2.5000\",\n // \"requiredMarginPercent\": \"5.0000\",\n // \"baseAsset\": \"BTC\",\n // \"quoteAsset\": \"USD\",\n // \"pricePrecision\": 1,\n // \"quantityPrecision\": 0,\n // \"baseAssetPrecision\": 8,\n // \"quotePrecision\": 8,\n // \"equalQtyPrecision\": 4,\n // \"filters\": [\n // {\"minPrice\":\"0.1\",\"maxPrice\":\"100000\",\"filterType\":\"PRICE_FILTER\",\"tickSize\":\"0.1\"},\n // {\"stepSize\":\"1\",\"filterType\":\"LOT_SIZE\",\"maxQty\":\"100000\",\"minQty\":\"1\"},\n // {\"stepSize\":\"1\",\"filterType\":\"MARKET_LOT_SIZE\",\"maxQty\":\"100000\",\"minQty\":\"1\"},\n // {\"limit\":200,\"filterType\":\"MAX_NUM_ORDERS\"},\n // {\"multiplierDown\":\"0.8500\",\"multiplierUp\":\"1.1500\",\"multiplierDecimal\":\"4\",\"filterType\":\"PERCENT_PRICE\"}\n // ],\n // \"orderTypes\": [\"LIMIT\",\"MARKET\",\"STOP\",\"STOP_MARKET\",\"TAKE_PROFIT\",\"TAKE_PROFIT_MARKET\",\"TRAILING_STOP_MARKET\"],\n // \"timeInForce\": [\"GTC\",\"IOC\",\"FOK\",\"GTX\"]\n // }\n // ]\n // }\n //\n // options (eapi)\n //\n // {\n // \"timezone\": \"UTC\",\n // \"serverTime\": 1675912490405,\n // \"optionContracts\": [\n // {\n // \"id\": 1,\n // \"baseAsset\": \"SOL\",\n // \"quoteAsset\": \"USDT\",\n // \"underlying\": \"SOLUSDT\",\n // \"settleAsset\": \"USDT\"\n // },\n // ...\n // ],\n // \"optionAssets\": [\n // {\"id\":1,\"name\":\"USDT\"}\n // ],\n // \"optionSymbols\": [\n // {\n // \"contractId\": 3,\n // \"expiryDate\": 1677225600000,\n // \"filters\": [\n // {\"filterType\":\"PRICE_FILTER\",\"minPrice\":\"724.6\",\"maxPrice\":\"919.2\",\"tickSize\":\"0.1\"},\n // {\"filterType\":\"LOT_SIZE\",\"minQty\":\"0.01\",\"maxQty\":\"1000\",\"stepSize\":\"0.01\"}\n // ],\n // \"id\": 2474,\n // \"symbol\": \"ETH-230224-800-C\",\n // \"side\": \"CALL\",\n // \"strikePrice\": \"800.00000000\",\n // \"underlying\": \"ETHUSDT\",\n // \"unit\": 1,\n // \"makerFeeRate\": \"0.00020000\",\n // \"takerFeeRate\": \"0.00020000\",\n // \"minQty\": \"0.01\",\n // \"maxQty\": \"1000\",\n // \"initialMargin\": \"0.15000000\",\n // \"maintenanceMargin\": \"0.07500000\",\n // \"minInitialMargin\": \"0.10000000\",\n // \"minMaintenanceMargin\": \"0.05000000\",\n // \"priceScale\": 1,\n // \"quantityScale\": 2,\n // \"quoteAsset\": \"USDT\"\n // },\n // ...\n // ],\n // \"rateLimits\": [\n // {\"rateLimitType\":\"REQUEST_WEIGHT\",\"interval\":\"MINUTE\",\"intervalNum\":1,\"limit\":400},\n // {\"rateLimitType\":\"ORDERS\",\"interval\":\"MINUTE\",\"intervalNum\":1,\"limit\":100},\n // {\"rateLimitType\":\"ORDERS\",\"interval\":\"SECOND\",\"intervalNum\":10,\"limit\":30}\n // ]\n // }\n //\n const result = [];\n for (let i = 0; i < markets.length; i++) {\n result.push(this.parseMarket(markets[i]));\n }\n return result;\n }\n parseMarket(market) {\n let swap = false;\n let future = false;\n let option = false;\n const underlying = this.safeString(market, 'underlying');\n const id = this.safeString(market, 'symbol');\n const optionParts = id.split('-');\n const optionBase = this.safeString(optionParts, 0);\n const lowercaseId = this.safeStringLower(market, 'symbol');\n const baseId = this.safeString(market, 'baseAsset', optionBase);\n const quoteId = this.safeString(market, 'quoteAsset');\n const base = this.safeCurrencyCode(baseId);\n const quote = this.safeCurrencyCode(quoteId);\n const contractType = this.safeString(market, 'contractType');\n let contract = ('contractType' in market);\n let expiry = this.safeInteger2(market, 'deliveryDate', 'expiryDate');\n let settleId = this.safeString(market, 'marginAsset');\n if ((contractType === 'PERPETUAL') || (expiry === 4133404800000)) { // some swap markets do not have contract type, eg: BTCST\n expiry = undefined;\n swap = true;\n }\n else if (underlying !== undefined) {\n contract = true;\n option = true;\n settleId = (settleId === undefined) ? 'USDT' : settleId;\n }\n else if (expiry !== undefined) {\n future = true;\n }\n const settle = this.safeCurrencyCode(settleId);\n const spot = !contract;\n const filters = this.safeList(market, 'filters', []);\n const filtersByType = this.indexBy(filters, 'filterType');\n const status = this.safeString2(market, 'status', 'contractStatus');\n let contractSize = undefined;\n let fees = this.fees;\n let linear = undefined;\n let inverse = undefined;\n const strike = this.safeInteger(market, 'strikePrice');\n let symbol = base + '/' + quote;\n if (contract) {\n if (swap) {\n symbol = symbol + ':' + settle;\n }\n else if (future) {\n symbol = symbol + ':' + settle + '-' + this.yymmdd(expiry);\n }\n else if (option) {\n symbol = symbol + ':' + settle + '-' + this.yymmdd(expiry) + '-' + this.numberToString(strike) + '-' + this.safeString(optionParts, 3);\n }\n contractSize = this.safeNumber2(market, 'contractSize', 'unit', this.parseNumber('1'));\n linear = settle === quote;\n inverse = settle === base;\n const feesType = linear ? 'linear' : 'inverse';\n fees = this.safeDict(this.fees, feesType, {});\n }\n let active = (status === 'TRADING');\n if (spot) {\n const permissionSets = this.safeList(market, 'permissionSets', []);\n for (let i = 0; i < permissionSets.length; i++) {\n const permissionsFromSets = this.safeList(permissionSets, i, []);\n for (let j = 0; j < permissionsFromSets.length; j++) {\n if (permissionsFromSets[j] === 'TRD_GRP_003') {\n active = false;\n break;\n }\n }\n }\n }\n const isMarginTradingAllowed = this.safeBool(market, 'isMarginTradingAllowed', false);\n let unifiedType = undefined;\n if (spot) {\n unifiedType = 'spot';\n }\n else if (swap) {\n unifiedType = 'swap';\n }\n else if (future) {\n unifiedType = 'future';\n }\n else if (option) {\n unifiedType = 'option';\n active = undefined;\n }\n const entry = {\n 'id': id,\n 'lowercaseId': lowercaseId,\n 'symbol': symbol,\n 'base': base,\n 'quote': quote,\n 'settle': settle,\n 'baseId': baseId,\n 'quoteId': quoteId,\n 'settleId': settleId,\n 'type': unifiedType,\n 'spot': spot,\n 'margin': spot && isMarginTradingAllowed,\n 'swap': swap,\n 'future': future,\n 'option': option,\n 'active': active,\n 'contract': contract,\n 'linear': linear,\n 'inverse': inverse,\n 'taker': fees['trading']['taker'],\n 'maker': fees['trading']['maker'],\n 'contractSize': contractSize,\n 'expiry': expiry,\n 'expiryDatetime': this.iso8601(expiry),\n 'strike': strike,\n 'optionType': this.safeStringLower(market, 'side'),\n 'precision': {\n 'amount': this.safeInteger2(market, 'quantityPrecision', 'quantityScale'),\n 'price': this.safeInteger2(market, 'pricePrecision', 'priceScale'),\n 'base': this.safeInteger(market, 'baseAssetPrecision'),\n 'quote': this.safeInteger(market, 'quotePrecision'),\n },\n 'limits': {\n 'leverage': {\n 'min': undefined,\n 'max': undefined,\n },\n 'amount': {\n 'min': this.safeNumber(market, 'minQty'),\n 'max': this.safeNumber(market, 'maxQty'),\n },\n 'price': {\n 'min': undefined,\n 'max': undefined,\n },\n 'cost': {\n 'min': undefined,\n 'max': undefined,\n },\n },\n 'info': market,\n 'created': this.safeInteger(market, 'onboardDate'), // present in inverse & linear apis\n };\n if ('PRICE_FILTER' in filtersByType) {\n const filter = this.safeDict(filtersByType, 'PRICE_FILTER', {});\n // PRICE_FILTER reports zero values for maxPrice\n // since they updated filter types in November 2018\n // https://github.com/ccxt/ccxt/issues/4286\n // therefore limits['price']['max'] doesn't have any meaningful value except undefined\n entry['limits']['price'] = {\n 'min': this.safeNumber(filter, 'minPrice'),\n 'max': this.safeNumber(filter, 'maxPrice'),\n };\n entry['precision']['price'] = this.precisionFromString(filter['tickSize']);\n }\n if ('LOT_SIZE' in filtersByType) {\n const filter = this.safeDict(filtersByType, 'LOT_SIZE', {});\n const stepSize = this.safeString(filter, 'stepSize');\n entry['precision']['amount'] = this.precisionFromString(stepSize);\n entry['limits']['amount'] = {\n 'min': this.safeNumber(filter, 'minQty'),\n 'max': this.safeNumber(filter, 'maxQty'),\n };\n }\n if ('MARKET_LOT_SIZE' in filtersByType) {\n const filter = this.safeDict(filtersByType, 'MARKET_LOT_SIZE', {});\n entry['limits']['market'] = {\n 'min': this.safeNumber(filter, 'minQty'),\n 'max': this.safeNumber(filter, 'maxQty'),\n };\n }\n if (('MIN_NOTIONAL' in filtersByType) || ('NOTIONAL' in filtersByType)) { // notional added in 12/04/23 to spot testnet\n const filter = this.safeDict2(filtersByType, 'MIN_NOTIONAL', 'NOTIONAL', {});\n entry['limits']['cost']['min'] = this.safeNumber2(filter, 'minNotional', 'notional');\n entry['limits']['cost']['max'] = this.safeNumber(filter, 'maxNotional');\n }\n return entry;\n }\n parseBalanceHelper(entry) {\n const account = this.account();\n account['used'] = this.safeString(entry, 'locked');\n account['free'] = this.safeString(entry, 'free');\n const interest = this.safeString(entry, 'interest');\n const debt = this.safeString(entry, 'borrowed');\n account['debt'] = Precise.stringAdd(debt, interest);\n return account;\n }\n parseBalanceCustom(response, type = undefined, marginMode = undefined) {\n const result = {\n 'info': response,\n };\n let timestamp = undefined;\n const isolated = marginMode === 'isolated';\n const cross = (type === 'margin') || (marginMode === 'cross');\n if (type === 'papi') {\n for (let i = 0; i < response.length; i++) {\n const entry = response[i];\n const account = this.account();\n const currencyId = this.safeString(entry, 'asset');\n const code = this.safeCurrencyCode(currencyId);\n const borrowed = this.safeString(entry, 'crossMarginBorrowed');\n const interest = this.safeString(entry, 'crossMarginInterest');\n account['free'] = this.safeString(entry, 'crossMarginFree');\n account['used'] = this.safeString(entry, 'crossMarginLocked');\n account['total'] = this.safeString(entry, 'crossMarginAsset');\n account['debt'] = Precise.stringAdd(borrowed, interest);\n result[code] = account;\n }\n }\n else if (!isolated && ((type === 'spot') || cross)) {\n timestamp = this.safeInteger(response, 'updateTime');\n const balances = this.safeList2(response, 'balances', 'userAssets', []);\n for (let i = 0; i < balances.length; i++) {\n const balance = balances[i];\n const currencyId = this.safeString(balance, 'asset');\n const code = this.safeCurrencyCode(currencyId);\n const account = this.account();\n account['free'] = this.safeString(balance, 'free');\n account['used'] = this.safeString(balance, 'locked');\n if (cross) {\n const debt = this.safeString(balance, 'borrowed');\n const interest = this.safeString(balance, 'interest');\n account['debt'] = Precise.stringAdd(debt, interest);\n }\n result[code] = account;\n }\n }\n else if (isolated) {\n const assets = this.safeList(response, 'assets');\n for (let i = 0; i < assets.length; i++) {\n const asset = assets[i];\n const marketId = this.safeString(asset, 'symbol');\n const symbol = this.safeSymbol(marketId, undefined, undefined, 'spot');\n const base = this.safeDict(asset, 'baseAsset', {});\n const quote = this.safeDict(asset, 'quoteAsset', {});\n const baseCode = this.safeCurrencyCode(this.safeString(base, 'asset'));\n const quoteCode = this.safeCurrencyCode(this.safeString(quote, 'asset'));\n const subResult = {};\n subResult[baseCode] = this.parseBalanceHelper(base);\n subResult[quoteCode] = this.parseBalanceHelper(quote);\n result[symbol] = this.safeBalance(subResult);\n }\n }\n else if (type === 'savings') {\n const [lockedPositions, flexiblePositions] = response;\n [...(lockedPositions || []), ...(flexiblePositions || [])].forEach((position) => {\n const currencyId = this.safeString(position, 'asset');\n const code = this.safeCurrencyCode(currencyId);\n // for the flexible positions, the amount is the \"totalAmount\" field\n const amount = this.safeString(position, 'amount') || this.safeString(position, 'totalAmount');\n const account = result[code] || this.account();\n account['total'] = (account['total'] || 0) + amount;\n account['used'] = (account['used'] || 0) + amount;\n result[code] = account;\n });\n }\n else if (type === 'funding') {\n for (let i = 0; i < response.length; i++) {\n const entry = response[i];\n const account = this.account();\n const currencyId = this.safeString(entry, 'asset');\n const code = this.safeCurrencyCode(currencyId);\n account['free'] = this.safeString(entry, 'free');\n const frozen = this.safeString(entry, 'freeze');\n const withdrawing = this.safeString(entry, 'withdrawing');\n const locked = this.safeString(entry, 'locked');\n account['used'] = Precise.stringAdd(frozen, Precise.stringAdd(locked, withdrawing));\n result[code] = account;\n }\n }\n else {\n let balances = response;\n if (!Array.isArray(response)) {\n balances = this.safeList(response, 'assets', []);\n }\n for (let i = 0; i < balances.length; i++) {\n const balance = balances[i];\n const currencyId = this.safeString(balance, 'asset');\n const code = this.safeCurrencyCode(currencyId);\n const account = this.account();\n account['free'] = this.safeString(balance, 'availableBalance');\n account['used'] = this.safeString(balance, 'initialMargin');\n account['total'] = this.safeString2(balance, 'marginBalance', 'balance');\n result[code] = account;\n }\n }\n result['timestamp'] = timestamp;\n result['datetime'] = this.iso8601(timestamp);\n return isolated ? result : this.safeBalance(result);\n }\n async fetchBalance(params = {}) {\n /**\n * @method\n * @name binance#fetchBalance\n * @description query for balance and get the amount of funds available for trading or funds locked in orders\n * @see https://binance-docs.github.io/apidocs/spot/en/#account-information-user_data // spot\n * @see https://binance-docs.github.io/apidocs/spot/en/#query-cross-margin-account-details-user_data // cross margin\n * @see https://binance-docs.github.io/apidocs/spot/en/#query-isolated-margin-account-info-user_data // isolated margin\n * @see https://binance-docs.github.io/apidocs/spot/en/#lending-account-user_data // lending\n * @see https://binance-docs.github.io/apidocs/spot/en/#funding-wallet-user_data // funding\n * @see https://binance-docs.github.io/apidocs/futures/en/#account-information-v2-user_data // swap\n * @see https://binance-docs.github.io/apidocs/delivery/en/#account-information-user_data // future\n * @see https://binance-docs.github.io/apidocs/voptions/en/#option-account-information-trade // option\n * @see https://binance-docs.github.io/apidocs/pm/en/#account-balance-user_data // portfolio margin\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {string} [params.type] 'future', 'delivery', 'savings', 'funding', or 'spot' or 'papi'\n * @param {string} [params.marginMode] 'cross' or 'isolated', for margin trading, uses this.options.defaultMarginMode if not passed, defaults to undefined/None/null\n * @param {string[]|undefined} [params.symbols] unified market symbols, only used in isolated margin mode\n * @param {boolean} [params.portfolioMargin] set to true if you would like to fetch the balance for a portfolio margin account\n * @returns {object} a [balance structure]{@link https://docs.ccxt.com/#/?id=balance-structure}\n */\n await this.loadMarkets();\n const defaultType = this.safeString2(this.options, 'fetchBalance', 'defaultType', 'spot');\n let type = this.safeString(params, 'type', defaultType);\n let subType = undefined;\n [subType, params] = this.handleSubTypeAndParams('fetchBalance', undefined, params);\n let isPortfolioMargin = undefined;\n [isPortfolioMargin, params] = this.handleOptionAndParams2(params, 'fetchBalance', 'papi', 'portfolioMargin', false);\n let marginMode = undefined;\n let query = undefined;\n [marginMode, query] = this.handleMarginModeAndParams('fetchBalance', params);\n query = this.omit(query, 'type');\n let response = undefined;\n const request = {};\n if (isPortfolioMargin || (type === 'papi')) {\n type = 'papi';\n response = await this.papiGetBalance(this.extend(request, query));\n }\n else if (this.isLinear(type, subType)) {\n type = 'linear';\n response = await this.fapiPrivateV2GetAccount(this.extend(request, query));\n }\n else if (this.isInverse(type, subType)) {\n type = 'inverse';\n response = await this.dapiPrivateGetAccount(this.extend(request, query));\n }\n else if (marginMode === 'isolated') {\n const paramSymbols = this.safeList(params, 'symbols');\n query = this.omit(query, 'symbols');\n if (paramSymbols !== undefined) {\n let symbols = '';\n if (Array.isArray(paramSymbols)) {\n symbols = this.marketId(paramSymbols[0]);\n for (let i = 1; i < paramSymbols.length; i++) {\n const symbol = paramSymbols[i];\n const id = this.marketId(symbol);\n symbols += ',' + id;\n }\n }\n else {\n symbols = paramSymbols;\n }\n request['symbols'] = symbols;\n }\n response = await this.sapiGetMarginIsolatedAccount(this.extend(request, query));\n }\n else if ((type === 'margin') || (marginMode === 'cross')) {\n response = await this.sapiGetMarginAccount(this.extend(request, query));\n }\n else if (type === 'savings') {\n request['size'] = 100;\n response = await Promise.all([\n this.fetchPaginatedPositionsByPage('sapiGetSimpleEarnLockedPosition', this.extend(request, query), request['size']),\n this.fetchPaginatedPositionsByPage('sapiGetSimpleEarnFlexiblePosition', this.extend(request, query), request['size']),\n ]);\n }\n else if (type === 'funding') {\n response = await this.sapiPostAssetGetFundingAsset(this.extend(request, query));\n }\n else {\n response = await this.privateGetAccount(this.extend(request, query));\n }\n //\n // spot\n //\n // {\n // \"makerCommission\": 10,\n // \"takerCommission\": 10,\n // \"buyerCommission\": 0,\n // \"sellerCommission\": 0,\n // \"canTrade\": true,\n // \"canWithdraw\": true,\n // \"canDeposit\": true,\n // \"updateTime\": 1575357359602,\n // \"accountType\": \"MARGIN\",\n // \"balances\": [\n // { asset: \"BTC\", free: \"0.00219821\", locked: \"0.00000000\" },\n // ]\n // }\n //\n // margin (cross)\n //\n // {\n // \"borrowEnabled\":true,\n // \"marginLevel\":\"999.00000000\",\n // \"totalAssetOfBtc\":\"0.00000000\",\n // \"totalLiabilityOfBtc\":\"0.00000000\",\n // \"totalNetAssetOfBtc\":\"0.00000000\",\n // \"tradeEnabled\":true,\n // \"transferEnabled\":true,\n // \"userAssets\":[\n // {\"asset\":\"MATIC\",\"borrowed\":\"0.00000000\",\"free\":\"0.00000000\",\"interest\":\"0.00000000\",\"locked\":\"0.00000000\",\"netAsset\":\"0.00000000\"},\n // {\"asset\":\"VET\",\"borrowed\":\"0.00000000\",\"free\":\"0.00000000\",\"interest\":\"0.00000000\",\"locked\":\"0.00000000\",\"netAsset\":\"0.00000000\"},\n // {\"asset\":\"USDT\",\"borrowed\":\"0.00000000\",\"free\":\"0.00000000\",\"interest\":\"0.00000000\",\"locked\":\"0.00000000\",\"netAsset\":\"0.00000000\"}\n // ],\n // }\n //\n // margin (isolated)\n //\n // {\n // \"info\": {\n // \"assets\": [\n // {\n // \"baseAsset\": {\n // \"asset\": \"1INCH\",\n // \"borrowEnabled\": true,\n // \"borrowed\": \"0\",\n // \"free\": \"0\",\n // \"interest\": \"0\",\n // \"locked\": \"0\",\n // \"netAsset\": \"0\",\n // \"netAssetOfBtc\": \"0\",\n // \"repayEnabled\": true,\n // \"totalAsset\": \"0\"\n // },\n // \"quoteAsset\": {\n // \"asset\": \"USDT\",\n // \"borrowEnabled\": true,\n // \"borrowed\": \"0\",\n // \"free\": \"11\",\n // \"interest\": \"0\",\n // \"locked\": \"0\",\n // \"netAsset\": \"11\",\n // \"netAssetOfBtc\": \"0.00054615\",\n // \"repayEnabled\": true,\n // \"totalAsset\": \"11\"\n // },\n // \"symbol\": \"1INCHUSDT\",\n // \"isolatedCreated\": true,\n // \"marginLevel\": \"999\",\n // \"marginLevelStatus\": \"EXCESSIVE\",\n // \"marginRatio\": \"5\",\n // \"indexPrice\": \"0.59184331\",\n // \"liquidatePrice\": \"0\",\n // \"liquidateRate\": \"0\",\n // \"tradeEnabled\": true,\n // \"enabled\": true\n // },\n // ]\n // }\n // }\n //\n // futures (fapi)\n //\n // fapiPrivateV2GetAccount\n //\n // {\n // \"feeTier\":0,\n // \"canTrade\":true,\n // \"canDeposit\":true,\n // \"canWithdraw\":true,\n // \"updateTime\":0,\n // \"totalInitialMargin\":\"0.00000000\",\n // \"totalMaintMargin\":\"0.00000000\",\n // \"totalWalletBalance\":\"0.00000000\",\n // \"totalUnrealizedProfit\":\"0.00000000\",\n // \"totalMarginBalance\":\"0.00000000\",\n // \"totalPositionInitialMargin\":\"0.00000000\",\n // \"totalOpenOrderInitialMargin\":\"0.00000000\",\n // \"totalCrossWalletBalance\":\"0.00000000\",\n // \"totalCrossUnPnl\":\"0.00000000\",\n // \"availableBalance\":\"0.00000000\",\n // \"maxWithdrawAmount\":\"0.00000000\",\n // \"assets\":[\n // {\n // \"asset\":\"BNB\",\n // \"walletBalance\":\"0.01000000\",\n // \"unrealizedProfit\":\"0.00000000\",\n // \"marginBalance\":\"0.01000000\",\n // \"maintMargin\":\"0.00000000\",\n // \"initialMargin\":\"0.00000000\",\n // \"positionInitialMargin\":\"0.00000000\",\n // \"openOrderInitialMargin\":\"0.00000000\",\n // \"maxWithdrawAmount\":\"0.01000000\",\n // \"crossWalletBalance\":\"0.01000000\",\n // \"crossUnPnl\":\"0.00000000\",\n // \"availableBalance\":\"0.01000000\"\n // }\n // ],\n // \"positions\":[\n // {\n // \"symbol\":\"BTCUSDT\",\n // \"initialMargin\":\"0\",\n // \"maintMargin\":\"0\",\n // \"unrealizedProfit\":\"0.00000000\",\n // \"positionInitialMargin\":\"0\",\n // \"openOrderInitialMargin\":\"0\",\n // \"leverage\":\"21\",\n // \"isolated\":false,\n // \"entryPrice\":\"0.00000\",\n // \"maxNotional\":\"5000000\",\n // \"positionSide\":\"BOTH\"\n // },\n // ]\n // }\n //\n // fapiPrivateV2GetBalance\n //\n // [\n // {\n // \"accountAlias\":\"FzFzXquXXqoC\",\n // \"asset\":\"BNB\",\n // \"balance\":\"0.01000000\",\n // \"crossWalletBalance\":\"0.01000000\",\n // \"crossUnPnl\":\"0.00000000\",\n // \"availableBalance\":\"0.01000000\",\n // \"maxWithdrawAmount\":\"0.01000000\"\n // }\n // ]\n //\n // savings\n //\n // [\n // { // Locked positions\n // \"rows\":[\n // {\n // \"positionId\": \"123123\",\n // \"projectId\": \"Axs*90\",\n // \"asset\": \"AXS\",\n // \"amount\": \"122.09202928\",\n // \"purchaseTime\": \"1646182276000\",\n // \"duration\": \"60\",\n // \"accrualDays\": \"4\",\n // \"rewardAsset\": \"AXS\",\n // \"APY\": \"0.23\",\n // \"isRenewable\": true,\n // \"isAutoRenew\": true,\n // \"redeemDate\": \"1732182276000\"\n // }\n // ],\n // \"total\": 1\n // },\n // { // Flexible positions\n // \"rows\":[\n // {\n // \"totalAmount\": \"75.46000000\",\n // \"tierAnnualPercentageRate\": {\n // \"0-5BTC\": 0.05,\n // \"5-10BTC\": 0.03\n // },\n // \"latestAnnualPercentageRate\": \"0.02599895\",\n // \"yesterdayAirdropPercentageRate\": \"0.02599895\",\n // \"asset\": \"USDT\",\n // \"airDropAsset\": \"BETH\",\n // \"canRedeem\": true,\n // \"collateralAmount\": \"232.23123213\",\n // \"productId\": \"USDT001\",\n // \"yesterdayRealTimeRewards\": \"0.10293829\",\n // \"cumulativeBonusRewards\": \"0.22759183\",\n // \"cumulativeRealTimeRewards\": \"0.22759183\",\n // \"cumulativeTotalRewards\": \"0.45459183\",\n // \"autoSubscribe\": true\n // }\n // ],\n // \"total\": 1\n // }\n // ]\n //\n // binance pay\n //\n // [\n // {\n // \"asset\": \"BUSD\",\n // \"free\": \"1129.83\",\n // \"locked\": \"0\",\n // \"freeze\": \"0\",\n // \"withdrawing\": \"0\"\n // }\n // ]\n //\n // portfolio margin\n //\n // [\n // {\n // \"asset\": \"USDT\",\n // \"totalWalletBalance\": \"66.9923261\",\n // \"crossMarginAsset\": \"35.9697141\",\n // \"crossMarginBorrowed\": \"0.0\",\n // \"crossMarginFree\": \"35.9697141\",\n // \"crossMarginInterest\": \"0.0\",\n // \"crossMarginLocked\": \"0.0\",\n // \"umWalletBalance\": \"31.022612\",\n // \"umUnrealizedPNL\": \"0.0\",\n // \"cmWalletBalance\": \"0.0\",\n // \"cmUnrealizedPNL\": \"0.0\",\n // \"updateTime\": 0,\n // \"negativeBalance\": \"0.0\"\n // },\n // ]\n //\n return this.parseBalanceCustom(response, type, marginMode);\n }\n async fetchPaginatedPositionsByPage(method, params, pageSize, maxPages = 10) {\n let result = [];\n let page = 1; // The default page is 1\n while (page <= maxPages) {\n const response = await this[method](this.extend(params, { 'current': page, 'size': pageSize }));\n const rows = this.safeValue(response, 'rows', []);\n const total = this.safeInteger(response, 'total');\n result = this.arrayConcat(result, rows);\n if (rows.length === 0 || total < pageSize) {\n break;\n }\n page++;\n }\n return result;\n }\n async fetchOrderBook(symbol, limit = undefined, params = {}) {\n /**\n * @method\n * @name binance#fetchOrderBook\n * @description fetches information on open orders with bid (buy) and ask (sell) prices, volumes and other data\n * @see https://binance-docs.github.io/apidocs/spot/en/#order-book // spot\n * @see https://binance-docs.github.io/apidocs/futures/en/#order-book // swap\n * @see https://binance-docs.github.io/apidocs/delivery/en/#order-book // future\n * @see https://binance-docs.github.io/apidocs/voptions/en/#order-book // option\n * @param {string} symbol unified symbol of the market to fetch the order book for\n * @param {int} [limit] the maximum amount of order book entries to return\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} A dictionary of [order book structures]{@link https://docs.ccxt.com/#/?id=order-book-structure} indexed by market symbols\n */\n await this.loadMarkets();\n const market = this.market(symbol);\n const request = {\n 'symbol': market['id'],\n };\n if (limit !== undefined) {\n request['limit'] = limit; // default 100, max 5000, see https://github.com/binance/binance-spot-api-docs/blob/master/rest-api.md#order-book\n }\n let response = undefined;\n if (market['option']) {\n response = await this.eapiPublicGetDepth(this.extend(request, params));\n }\n else if (market['linear']) {\n response = await this.fapiPublicGetDepth(this.extend(request, params));\n }\n else if (market['inverse']) {\n response = await this.dapiPublicGetDepth(this.extend(request, params));\n }\n else {\n response = await this.publicGetDepth(this.extend(request, params));\n }\n //\n // future\n //\n // {\n // \"lastUpdateId\":333598053905,\n // \"E\":1618631511986,\n // \"T\":1618631511964,\n // \"bids\":[\n // [\"2493.56\",\"20.189\"],\n // [\"2493.54\",\"1.000\"],\n // [\"2493.51\",\"0.005\"]\n // ],\n // \"asks\":[\n // [\"2493.57\",\"0.877\"],\n // [\"2493.62\",\"0.063\"],\n // [\"2493.71\",\"12.054\"],\n // ]\n // }\n //\n // options (eapi)\n //\n // {\n // \"bids\": [\n // [\"108.7\",\"16.08\"],\n // [\"106\",\"21.29\"],\n // [\"82.4\",\"0.02\"]\n // ],\n // \"asks\": [\n // [\"111.4\",\"19.52\"],\n // [\"119.9\",\"17.6\"],\n // [\"141.2\",\"31\"]\n // ],\n // \"T\": 1676771382078,\n // \"u\": 1015939\n // }\n //\n const timestamp = this.safeInteger(response, 'T');\n const orderbook = this.parseOrderBook(response, symbol, timestamp);\n orderbook['nonce'] = this.safeInteger2(response, 'lastUpdateId', 'u');\n return orderbook;\n }\n parseTicker(ticker, market = undefined) {\n //\n // {\n // \"symbol\": \"ETHBTC\",\n // \"priceChange\": \"0.00068700\",\n // \"priceChangePercent\": \"2.075\",\n // \"weightedAvgPrice\": \"0.03342681\",\n // \"prevClosePrice\": \"0.03310300\",\n // \"lastPrice\": \"0.03378900\",\n // \"lastQty\": \"0.07700000\",\n // \"bidPrice\": \"0.03378900\",\n // \"bidQty\": \"7.16800000\",\n // \"askPrice\": \"0.03379000\",\n // \"askQty\": \"24.00000000\",\n // \"openPrice\": \"0.03310200\",\n // \"highPrice\": \"0.03388900\",\n // \"lowPrice\": \"0.03306900\",\n // \"volume\": \"205478.41000000\",\n // \"quoteVolume\": \"6868.48826294\",\n // \"openTime\": 1601469986932,\n // \"closeTime\": 1601556386932,\n // \"firstId\": 196098772,\n // \"lastId\": 196186315,\n // \"count\": 87544\n // }\n //\n // coinm\n //\n // {\n // \"baseVolume\": \"214549.95171161\",\n // \"closeTime\": \"1621965286847\",\n // \"count\": \"1283779\",\n // \"firstId\": \"152560106\",\n // \"highPrice\": \"39938.3\",\n // \"lastId\": \"153843955\",\n // \"lastPrice\": \"37993.4\",\n // \"lastQty\": \"1\",\n // \"lowPrice\": \"36457.2\",\n // \"openPrice\": \"37783.4\",\n // \"openTime\": \"1621878840000\",\n // \"pair\": \"BTCUSD\",\n // \"priceChange\": \"210.0\",\n // \"priceChangePercent\": \"0.556\",\n // \"symbol\": \"BTCUSD_PERP\",\n // \"volume\": \"81990451\",\n // \"weightedAvgPrice\": \"38215.08713747\"\n // }\n //\n // eapi: fetchTicker, fetchTickers\n //\n // {\n // \"symbol\": \"ETH-230510-1825-C\",\n // \"priceChange\": \"-5.1\",\n // \"priceChangePercent\": \"-0.1854\",\n // \"lastPrice\": \"22.4\",\n // \"lastQty\": \"0\",\n // \"open\": \"27.5\",\n // \"high\": \"34.1\",\n // \"low\": \"22.4\",\n // \"volume\": \"6.83\",\n // \"amount\": \"201.44\",\n // \"bidPrice\": \"21.9\",\n // \"askPrice\": \"22.4\",\n // \"openTime\": 1683614771898,\n // \"closeTime\": 1683695017784,\n // \"firstTradeId\": 12,\n // \"tradeCount\": 22,\n // \"strikePrice\": \"1825\",\n // \"exercisePrice\": \"1845.95341176\"\n // }\n //\n // spot bidsAsks\n //\n // {\n // \"symbol\":\"ETHBTC\",\n // \"bidPrice\":\"0.07466800\",\n // \"bidQty\":\"5.31990000\",\n // \"askPrice\":\"0.07466900\",\n // \"askQty\":\"10.93540000\"\n // }\n //\n // usdm bidsAsks\n //\n // {\n // \"symbol\":\"BTCUSDT\",\n // \"bidPrice\":\"21321.90\",\n // \"bidQty\":\"33.592\",\n // \"askPrice\":\"21322.00\",\n // \"askQty\":\"1.427\",\n // \"time\":\"1673899207538\"\n // }\n //\n // coinm bidsAsks\n //\n // {\n // \"symbol\":\"BTCUSD_PERP\",\n // \"pair\":\"BTCUSD\",\n // \"bidPrice\":\"21301.2\",\n // \"bidQty\":\"188\",\n // \"askPrice\":\"21301.3\",\n // \"askQty\":\"10302\",\n // \"time\":\"1673899278514\"\n // }\n //\n const timestamp = this.safeInteger(ticker, 'closeTime');\n let marketType = undefined;\n if (('time' in ticker)) {\n marketType = 'contract';\n }\n if (marketType === undefined) {\n marketType = ('bidQty' in ticker) ? 'spot' : 'contract';\n }\n const marketId = this.safeString(ticker, 'symbol');\n const symbol = this.safeSymbol(marketId, market, undefined, marketType);\n const last = this.safeString(ticker, 'lastPrice');\n const isCoinm = ('baseVolume' in ticker);\n let baseVolume = undefined;\n let quoteVolume = undefined;\n if (isCoinm) {\n baseVolume = this.safeString(ticker, 'baseVolume');\n quoteVolume = this.safeString(ticker, 'volume');\n }\n else {\n baseVolume = this.safeString(ticker, 'volume');\n quoteVolume = this.safeString2(ticker, 'quoteVolume', 'amount');\n }\n return this.safeTicker({\n 'symbol': symbol,\n 'timestamp': timestamp,\n 'datetime': this.iso8601(timestamp),\n 'high': this.safeString2(ticker, 'highPrice', 'high'),\n 'low': this.safeString2(ticker, 'lowPrice', 'low'),\n 'bid': this.safeString(ticker, 'bidPrice'),\n 'bidVolume': this.safeString(ticker, 'bidQty'),\n 'ask': this.safeString(ticker, 'askPrice'),\n 'askVolume': this.safeString(ticker, 'askQty'),\n 'vwap': this.safeString(ticker, 'weightedAvgPrice'),\n 'open': this.safeString2(ticker, 'openPrice', 'open'),\n 'close': last,\n 'last': last,\n 'previousClose': this.safeString(ticker, 'prevClosePrice'),\n 'change': this.safeString(ticker, 'priceChange'),\n 'percentage': this.safeString(ticker, 'priceChangePercent'),\n 'average': undefined,\n 'baseVolume': baseVolume,\n 'quoteVolume': quoteVolume,\n 'info': ticker,\n }, market);\n }\n async fetchStatus(params = {}) {\n /**\n * @method\n * @name binance#fetchStatus\n * @description the latest known information on the availability of the exchange API\n * @see https://binance-docs.github.io/apidocs/spot/en/#system-status-system\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} a [status structure]{@link https://docs.ccxt.com/#/?id=exchange-status-structure}\n */\n const response = await this.sapiGetSystemStatus(params);\n //\n // {\n // \"status\": 0, // 0: normal,1:system maintenance\n // \"msg\": \"normal\" // \"normal\", \"system_maintenance\"\n // }\n //\n const statusRaw = this.safeString(response, 'status');\n return {\n 'status': this.safeString({ '0': 'ok', '1': 'maintenance' }, statusRaw, statusRaw),\n 'updated': undefined,\n 'eta': undefined,\n 'url': undefined,\n 'info': response,\n };\n }\n async fetchTicker(symbol, params = {}) {\n /**\n * @method\n * @name binance#fetchTicker\n * @description fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market\n * @see https://binance-docs.github.io/apidocs/spot/en/#24hr-ticker-price-change-statistics // spot\n * @see https://binance-docs.github.io/apidocs/spot/en/#rolling-window-price-change-statistics // spot\n * @see https://binance-docs.github.io/apidocs/futures/en/#24hr-ticker-price-change-statistics // swap\n * @see https://binance-docs.github.io/apidocs/delivery/en/#24hr-ticker-price-change-statistics // future\n * @see https://binance-docs.github.io/apidocs/voptions/en/#24hr-ticker-price-change-statistics // option\n * @param {string} symbol unified symbol of the market to fetch the ticker for\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {boolean} [params.rolling] (spot only) default false, if true, uses the rolling 24 hour ticker endpoint /api/v3/ticker\n * @returns {object} a [ticker structure]{@link https://docs.ccxt.com/#/?id=ticker-structure}\n */\n await this.loadMarkets();\n const market = this.market(symbol);\n const request = {\n 'symbol': market['id'],\n };\n let response = undefined;\n if (market['option']) {\n response = await this.eapiPublicGetTicker(this.extend(request, params));\n }\n else if (market['linear']) {\n response = await this.fapiPublicGetTicker24hr(this.extend(request, params));\n }\n else if (market['inverse']) {\n response = await this.dapiPublicGetTicker24hr(this.extend(request, params));\n }\n else {\n const rolling = this.safeBool(params, 'rolling', false);\n params = this.omit(params, 'rolling');\n if (rolling) {\n response = await this.publicGetTicker(this.extend(request, params));\n }\n else {\n response = await this.publicGetTicker24hr(this.extend(request, params));\n }\n }\n if (Array.isArray(response)) {\n const firstTicker = this.safeDict(response, 0, {});\n return this.parseTicker(firstTicker, market);\n }\n return this.parseTicker(response, market);\n }\n async fetchTickers(symbols = undefined, params = {}) {\n /**\n * @method\n * @name binance#fetchTickers\n * @description fetches price tickers for multiple markets, statistical information calculated over the past 24 hours for each market\n * @see https://binance-docs.github.io/apidocs/spot/en/#24hr-ticker-price-change-statistics // spot\n * @see https://binance-docs.github.io/apidocs/futures/en/#24hr-ticker-price-change-statistics // swap\n * @see https://binance-docs.github.io/apidocs/delivery/en/#24hr-ticker-price-change-statistics // future\n * @see https://binance-docs.github.io/apidocs/voptions/en/#24hr-ticker-price-change-statistics // option\n * @param {string[]} [symbols] unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} a dictionary of [ticker structures]{@link https://docs.ccxt.com/#/?id=ticker-structure}\n */\n await this.loadMarkets();\n let type = undefined;\n let market = undefined;\n symbols = this.marketSymbols(symbols, undefined, true, true, true);\n if (symbols !== undefined) {\n const first = this.safeString(symbols, 0);\n market = this.market(first);\n }\n [type, params] = this.handleMarketTypeAndParams('fetchTickers', market, params);\n let subType = undefined;\n [subType, params] = this.handleSubTypeAndParams('fetchTickers', market, params);\n let response = undefined;\n if (type === 'option') {\n response = await this.eapiPublicGetTicker(params);\n }\n else if (this.isLinear(type, subType)) {\n response = await this.fapiPublicGetTicker24hr(params);\n }\n else if (this.isInverse(type, subType)) {\n response = await this.dapiPublicGetTicker24hr(params);\n }\n else {\n const request = {};\n if (symbols !== undefined) {\n const marketIds = this.marketIds(symbols);\n request['symbols'] = this.json(marketIds);\n }\n response = await this.publicGetTicker24hr(this.extend(request, params));\n }\n return this.parseTickers(response, symbols);\n }\n parseOHLCV(ohlcv, market = undefined) {\n // when api method = publicGetKlines || fapiPublicGetKlines || dapiPublicGetKlines\n // [\n // 1591478520000, // open time\n // \"0.02501300\", // open\n // \"0.02501800\", // high\n // \"0.02500000\", // low\n // \"0.02500000\", // close\n // \"22.19000000\", // volume\n // 1591478579999, // close time\n // \"0.55490906\", // quote asset volume, base asset volume for dapi\n // 40, // number of trades\n // \"10.92900000\", // taker buy base asset volume\n // \"0.27336462\", // taker buy quote asset volume\n // \"0\" // ignore\n // ]\n //\n // when api method = fapiPublicGetMarkPriceKlines || fapiPublicGetIndexPriceKlines\n // [\n // [\n // 1591256460000, // Open time\n // \"9653.29201333\", // Open\n // \"9654.56401333\", // High\n // \"9653.07367333\", // Low\n // \"9653.07367333\", // Close (or latest price)\n // \"0\", // Ignore\n // 1591256519999, // Close time\n // \"0\", // Ignore\n // 60, // Number of bisic data\n // \"0\", // Ignore\n // \"0\", // Ignore\n // \"0\" // Ignore\n // ]\n // ]\n //\n // options\n //\n // {\n // \"open\": \"32.2\",\n // \"high\": \"32.2\",\n // \"low\": \"32.2\",\n // \"close\": \"32.2\",\n // \"volume\": \"0\",\n // \"interval\": \"5m\",\n // \"tradeCount\": 0,\n // \"takerVolume\": \"0\",\n // \"takerAmount\": \"0\",\n // \"amount\": \"0\",\n // \"openTime\": 1677096900000,\n // \"closeTime\": 1677097200000\n // }\n //\n const volumeIndex = (market['inverse']) ? 7 : 5;\n return [\n this.safeInteger2(ohlcv, 0, 'closeTime'),\n this.safeNumber2(ohlcv, 1, 'open'),\n this.safeNumber2(ohlcv, 2, 'high'),\n this.safeNumber2(ohlcv, 3, 'low'),\n this.safeNumber2(ohlcv, 4, 'close'),\n this.safeNumber2(ohlcv, volumeIndex, 'volume'),\n ];\n }\n async fetchOHLCV(symbol, timeframe = '1m', since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name binance#fetchOHLCV\n * @description fetches historical candlestick data containing the open, high, low, and close price, and the volume of a market\n * @see https://binance-docs.github.io/apidocs/spot/en/#kline-candlestick-data\n * @see https://binance-docs.github.io/apidocs/voptions/en/#kline-candlestick-data\n * @see https://binance-docs.github.io/apidocs/futures/en/#index-price-kline-candlestick-data\n * @see https://binance-docs.github.io/apidocs/futures/en/#mark-price-kline-candlestick-data\n * @see https://binance-docs.github.io/apidocs/futures/en/#kline-candlestick-data\n * @see https://binance-docs.github.io/apidocs/delivery/en/#index-price-kline-candlestick-data\n * @see https://binance-docs.github.io/apidocs/delivery/en/#mark-price-kline-candlestick-data\n * @see https://binance-docs.github.io/apidocs/delivery/en/#kline-candlestick-data\n * @param {string} symbol unified symbol of the market to fetch OHLCV data for\n * @param {string} timeframe the length of time each candle represents\n * @param {int} [since] timestamp in ms of the earliest candle to fetch\n * @param {int} [limit] the maximum amount of candles to fetch\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {string} [params.price] \"mark\" or \"index\" for mark price and index price candles\n * @param {int} [params.until] timestamp in ms of the latest candle to fetch\n * @param {boolean} [params.paginate] default false, when true will automatically paginate by calling this endpoint multiple times. See in the docs all the [availble parameters](https://github.com/ccxt/ccxt/wiki/Manual#pagination-params)\n * @returns {int[][]} A list of candles ordered as timestamp, open, high, low, close, volume\n */\n await this.loadMarkets();\n let paginate = false;\n [paginate, params] = this.handleOptionAndParams(params, 'fetchOHLCV', 'paginate', false);\n if (paginate) {\n return await this.fetchPaginatedCallDeterministic('fetchOHLCV', symbol, since, limit, timeframe, params, 1000);\n }\n const market = this.market(symbol);\n // binance docs say that the default limit 500, max 1500 for futures, max 1000 for spot markets\n // the reality is that the time range wider than 500 candles won't work right\n const defaultLimit = 500;\n const maxLimit = 1500;\n const price = this.safeString(params, 'price');\n const until = this.safeInteger(params, 'until');\n params = this.omit(params, ['price', 'until']);\n limit = (limit === undefined) ? defaultLimit : Math.min(limit, maxLimit);\n const request = {\n 'interval': this.safeString(this.timeframes, timeframe, timeframe),\n 'limit': limit,\n };\n if (price === 'index') {\n request['pair'] = market['id']; // Index price takes this argument instead of symbol\n }\n else {\n request['symbol'] = market['id'];\n }\n // const duration = this.parseTimeframe (timeframe);\n if (since !== undefined) {\n request['startTime'] = since;\n //\n // It didn't work before without the endTime\n // https://github.com/ccxt/ccxt/issues/8454\n //\n if (market['inverse']) {\n if (since > 0) {\n const duration = this.parseTimeframe(timeframe);\n const endTime = this.sum(since, limit * duration * 1000 - 1);\n const now = this.milliseconds();\n request['endTime'] = Math.min(now, endTime);\n }\n }\n }\n if (until !== undefined) {\n request['endTime'] = until;\n }\n let response = undefined;\n if (market['option']) {\n response = await this.eapiPublicGetKlines(this.extend(request, params));\n }\n else if (price === 'mark') {\n if (market['inverse']) {\n response = await this.dapiPublicGetMarkPriceKlines(this.extend(request, params));\n }\n else {\n response = await this.fapiPublicGetMarkPriceKlines(this.extend(request, params));\n }\n }\n else if (price === 'index') {\n if (market['inverse']) {\n response = await this.dapiPublicGetIndexPriceKlines(this.extend(request, params));\n }\n else {\n response = await this.fapiPublicGetIndexPriceKlines(this.extend(request, params));\n }\n }\n else if (market['linear']) {\n response = await this.fapiPublicGetKlines(this.extend(request, params));\n }\n else if (market['inverse']) {\n response = await this.dapiPublicGetKlines(this.extend(request, params));\n }\n else {\n response = await this.publicGetKlines(this.extend(request, params));\n }\n //\n // [\n // [1591478520000,\"0.02501300\",\"0.02501800\",\"0.02500000\",\"0.02500000\",\"22.19000000\",1591478579999,\"0.55490906\",40,\"10.92900000\",\"0.27336462\",\"0\"],\n // [1591478580000,\"0.02499600\",\"0.02500900\",\"0.02499400\",\"0.02500300\",\"21.34700000\",1591478639999,\"0.53370468\",24,\"7.53800000\",\"0.18850725\",\"0\"],\n // [1591478640000,\"0.02500800\",\"0.02501100\",\"0.02500300\",\"0.02500800\",\"154.14200000\",1591478699999,\"3.85405839\",97,\"5.32300000\",\"0.13312641\",\"0\"],\n // ]\n //\n // options (eapi)\n //\n // [\n // {\n // \"open\": \"32.2\",\n // \"high\": \"32.2\",\n // \"low\": \"32.2\",\n // \"close\": \"32.2\",\n // \"volume\": \"0\",\n // \"interval\": \"5m\",\n // \"tradeCount\": 0,\n // \"takerVolume\": \"0\",\n // \"takerAmount\": \"0\",\n // \"amount\": \"0\",\n // \"openTime\": 1677096900000,\n // \"closeTime\": 1677097200000\n // }\n // ]\n //\n return this.parseOHLCVs(response, market, timeframe, since, limit);\n }\n parseTrade(trade, market = undefined) {\n if ('isDustTrade' in trade) {\n return this.parseDustTrade(trade, market);\n }\n //\n // aggregate trades\n // https://github.com/binance-exchange/binance-official-api-docs/blob/master/rest-api.md#compressedaggregate-trades-list\n //\n // {\n // \"a\": 26129, // Aggregate tradeId\n // \"p\": \"0.01633102\", // Price\n // \"q\": \"4.70443515\", // Quantity\n // \"f\": 27781, // First tradeId\n // \"l\": 27781, // Last tradeId\n // \"T\": 1498793709153, // Timestamp\n // \"m\": true, // Was the buyer the maker?\n // \"M\": true // Was the trade the best price match?\n // }\n //\n // REST: aggregate trades for swap & future (both linear and inverse)\n //\n // {\n // \"a\": \"269772814\",\n // \"p\": \"25864.1\",\n // \"q\": \"3\",\n // \"f\": \"662149354\",\n // \"l\": \"662149355\",\n // \"T\": \"1694209776022\",\n // \"m\": false,\n // }\n //\n // recent public trades and old public trades\n // https://github.com/binance-exchange/binance-official-api-docs/blob/master/rest-api.md#recent-trades-list\n // https://github.com/binance-exchange/binance-official-api-docs/blob/master/rest-api.md#old-trade-lookup-market_data\n //\n // {\n // \"id\": 28457,\n // \"price\": \"4.00000100\",\n // \"qty\": \"12.00000000\",\n // \"time\": 1499865549590,\n // \"isBuyerMaker\": true,\n // \"isBestMatch\": true\n // }\n //\n // private trades\n // https://github.com/binance-exchange/binance-official-api-docs/blob/master/rest-api.md#account-trade-list-user_data\n //\n // {\n // \"symbol\": \"BNBBTC\",\n // \"id\": 28457,\n // \"orderId\": 100234,\n // \"price\": \"4.00000100\",\n // \"qty\": \"12.00000000\",\n // \"commission\": \"10.10000000\",\n // \"commissionAsset\": \"BNB\",\n // \"time\": 1499865549590,\n // \"isBuyer\": true,\n // \"isMaker\": false,\n // \"isBestMatch\": true\n // }\n //\n // futures trades\n // https://binance-docs.github.io/apidocs/futures/en/#account-trade-list-user_data\n //\n // {\n // \"accountId\": 20,\n // \"buyer\": False,\n // \"commission\": \"-0.07819010\",\n // \"commissionAsset\": \"USDT\",\n // \"counterPartyId\": 653,\n // \"id\": 698759,\n // \"maker\": False,\n // \"orderId\": 25851813,\n // \"price\": \"7819.01\",\n // \"qty\": \"0.002\",\n // \"quoteQty\": \"0.01563\",\n // \"realizedPnl\": \"-0.91539999\",\n // \"side\": \"SELL\",\n // \"symbol\": \"BTCUSDT\",\n // \"time\": 1569514978020\n // }\n // {\n // \"symbol\": \"BTCUSDT\",\n // \"id\": 477128891,\n // \"orderId\": 13809777875,\n // \"side\": \"SELL\",\n // \"price\": \"38479.55\",\n // \"qty\": \"0.001\",\n // \"realizedPnl\": \"-0.00009534\",\n // \"marginAsset\": \"USDT\",\n // \"quoteQty\": \"38.47955\",\n // \"commission\": \"-0.00076959\",\n // \"commissionAsset\": \"USDT\",\n // \"time\": 1612733566708,\n // \"positionSide\": \"BOTH\",\n // \"maker\": true,\n // \"buyer\": false\n // }\n //\n // { respType: FULL }\n //\n // {\n // \"price\": \"4000.00000000\",\n // \"qty\": \"1.00000000\",\n // \"commission\": \"4.00000000\",\n // \"commissionAsset\": \"USDT\",\n // \"tradeId\": \"1234\",\n // }\n //\n // options: fetchMyTrades\n //\n // {\n // \"id\": 1125899906844226012,\n // \"tradeId\": 73,\n // \"orderId\": 4638761100843040768,\n // \"symbol\": \"ETH-230211-1500-C\",\n // \"price\": \"18.70000000\",\n // \"quantity\": \"-0.57000000\",\n // \"fee\": \"0.17305890\",\n // \"realizedProfit\": \"-3.53400000\",\n // \"side\": \"SELL\",\n // \"type\": \"LIMIT\",\n // \"volatility\": \"0.30000000\",\n // \"liquidity\": \"MAKER\",\n // \"time\": 1676085216845,\n // \"priceScale\": 1,\n // \"quantityScale\": 2,\n // \"optionSide\": \"CALL\",\n // \"quoteAsset\": \"USDT\"\n // }\n //\n // options: fetchTrades\n //\n // {\n // \"id\": 1,\n // \"symbol\": \"ETH-230216-1500-C\",\n // \"price\": \"35.5\",\n // \"qty\": \"0.03\",\n // \"quoteQty\": \"1.065\",\n // \"side\": 1,\n // \"time\": 1676366446072\n // }\n //\n // fetchMyTrades: linear portfolio margin\n //\n // {\n // \"symbol\": \"BTCUSDT\",\n // \"id\": 4575108247,\n // \"orderId\": 261942655610,\n // \"side\": \"SELL\",\n // \"price\": \"47263.40\",\n // \"qty\": \"0.010\",\n // \"realizedPnl\": \"27.38400000\",\n // \"marginAsset\": \"USDT\",\n // \"quoteQty\": \"472.63\",\n // \"commission\": \"0.18905360\",\n // \"commissionAsset\": \"USDT\",\n // \"time\": 1707530039409,\n // \"buyer\": false,\n // \"maker\": false,\n // \"positionSide\": \"LONG\"\n // }\n //\n // fetchMyTrades: inverse portfolio margin\n //\n // {\n // \"symbol\": \"ETHUSD_PERP\",\n // \"id\": 701907838,\n // \"orderId\": 71548909034,\n // \"pair\": \"ETHUSD\",\n // \"side\": \"SELL\",\n // \"price\": \"2498.15\",\n // \"qty\": \"1\",\n // \"realizedPnl\": \"0.00012517\",\n // \"marginAsset\": \"ETH\",\n // \"baseQty\": \"0.00400296\",\n // \"commission\": \"0.00000160\",\n // \"commissionAsset\": \"ETH\",\n // \"time\": 1707530317519,\n // \"positionSide\": \"LONG\",\n // \"buyer\": false,\n // \"maker\": false\n // }\n //\n // fetchMyTrades: spot margin portfolio margin\n //\n // {\n // \"symbol\": \"ADAUSDT\",\n // \"id\": 470227543,\n // \"orderId\": 4421170947,\n // \"price\": \"0.53880000\",\n // \"qty\": \"10.00000000\",\n // \"quoteQty\": \"5.38800000\",\n // \"commission\": \"0.00538800\",\n // \"commissionAsset\": \"USDT\",\n // \"time\": 1707545780522,\n // \"isBuyer\": false,\n // \"isMaker\": false,\n // \"isBestMatch\": true\n // }\n //\n const timestamp = this.safeInteger2(trade, 'T', 'time');\n let amount = this.safeString2(trade, 'q', 'qty');\n amount = this.safeString(trade, 'quantity', amount);\n const marketId = this.safeString(trade, 'symbol');\n const isSpotTrade = ('isIsolated' in trade) || ('M' in trade) || ('orderListId' in trade) || ('isMaker' in trade);\n const marketType = isSpotTrade ? 'spot' : 'contract';\n market = this.safeMarket(marketId, market, undefined, marketType);\n const symbol = market['symbol'];\n let side = undefined;\n const buyerMaker = this.safeValue2(trade, 'm', 'isBuyerMaker');\n let takerOrMaker = undefined;\n if (buyerMaker !== undefined) {\n side = buyerMaker ? 'sell' : 'buy'; // this is reversed intentionally\n }\n else if ('side' in trade) {\n side = this.safeStringLower(trade, 'side');\n }\n else {\n if ('isBuyer' in trade) {\n side = trade['isBuyer'] ? 'buy' : 'sell'; // this is a true side\n }\n }\n let fee = undefined;\n if ('commission' in trade) {\n fee = {\n 'cost': this.safeString(trade, 'commission'),\n 'currency': this.safeCurrencyCode(this.safeString(trade, 'commissionAsset')),\n };\n }\n if ('isMaker' in trade) {\n takerOrMaker = trade['isMaker'] ? 'maker' : 'taker';\n }\n if ('maker' in trade) {\n takerOrMaker = trade['maker'] ? 'maker' : 'taker';\n }\n if (('optionSide' in trade) || market['option']) {\n const settle = this.safeCurrencyCode(this.safeString(trade, 'quoteAsset', 'USDT'));\n takerOrMaker = this.safeStringLower(trade, 'liquidity');\n if ('fee' in trade) {\n fee = {\n 'cost': this.safeString(trade, 'fee'),\n 'currency': settle,\n };\n }\n if ((side !== 'buy') && (side !== 'sell')) {\n side = (side === '1') ? 'buy' : 'sell';\n }\n if ('optionSide' in trade) {\n if (side !== 'buy') {\n amount = Precise.stringMul('-1', amount);\n }\n }\n }\n return this.safeTrade({\n 'info': trade,\n 'timestamp': timestamp,\n 'datetime': this.iso8601(timestamp),\n 'symbol': symbol,\n 'id': this.safeStringN(trade, ['t', 'a', 'tradeId', 'id']),\n 'order': this.safeString(trade, 'orderId'),\n 'type': this.safeStringLower(trade, 'type'),\n 'side': side,\n 'takerOrMaker': takerOrMaker,\n 'price': this.safeString2(trade, 'p', 'price'),\n 'amount': amount,\n 'cost': this.safeString2(trade, 'quoteQty', 'baseQty'),\n 'fee': fee,\n }, market);\n }\n parseDustTrade(trade, market = undefined) {\n //\n // {\n // \"fromAsset\": \"USDT\",\n // \"amount\": \"0.009669\",\n // \"transferedAmount\": \"0.00002992\",\n // \"serviceChargeAmount\": \"0.00000059\",\n // \"operateTime\": \"1628076010000\",\n // \"transId\": \"71416578712\",\n // \"isDustTrade\": true\n // }\n //\n const orderId = this.safeString(trade, 'transId');\n const timestamp = this.safeInteger(trade, 'operateTime');\n const currencyId = this.safeString(trade, 'fromAsset');\n const tradedCurrency = this.safeCurrencyCode(currencyId);\n const bnb = this.currency('BNB');\n const earnedCurrency = bnb['code'];\n const applicantSymbol = earnedCurrency + '/' + tradedCurrency;\n let tradedCurrencyIsQuote = false;\n if (applicantSymbol in this.markets) {\n tradedCurrencyIsQuote = true;\n }\n const feeCostString = this.safeString(trade, 'serviceChargeAmount');\n const fee = {\n 'currency': earnedCurrency,\n 'cost': this.parseNumber(feeCostString),\n };\n let symbol = undefined;\n let amountString = undefined;\n let costString = undefined;\n let side = undefined;\n if (tradedCurrencyIsQuote) {\n symbol = applicantSymbol;\n amountString = this.safeString(trade, 'transferedAmount');\n costString = this.safeString(trade, 'amount');\n side = 'buy';\n }\n else {\n symbol = tradedCurrency + '/' + earnedCurrency;\n amountString = this.safeString(trade, 'amount');\n costString = this.safeString(trade, 'transferedAmount');\n side = 'sell';\n }\n let priceString = undefined;\n if (costString !== undefined) {\n if (amountString) {\n priceString = Precise.stringDiv(costString, amountString);\n }\n }\n const id = undefined;\n const amount = this.parseNumber(amountString);\n const price = this.parseNumber(priceString);\n const cost = this.parseNumber(costString);\n const type = undefined;\n const takerOrMaker = undefined;\n return {\n 'id': id,\n 'timestamp': timestamp,\n 'datetime': this.iso8601(timestamp),\n 'symbol': symbol,\n 'order': orderId,\n 'type': type,\n 'takerOrMaker': takerOrMaker,\n 'side': side,\n 'amount': amount,\n 'price': price,\n 'cost': cost,\n 'fee': fee,\n 'info': trade,\n };\n }\n async fetchTrades(symbol, since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name binance#fetchTrades\n * @description get the list of most recent trades for a particular symbol\n * Default fetchTradesMethod\n * @see https://binance-docs.github.io/apidocs/spot/en/#compressed-aggregate-trades-list // publicGetAggTrades (spot)\n * @see https://binance-docs.github.io/apidocs/futures/en/#compressed-aggregate-trades-list // fapiPublicGetAggTrades (swap)\n * @see https://binance-docs.github.io/apidocs/delivery/en/#compressed-aggregate-trades-list // dapiPublicGetAggTrades (future)\n * @see https://binance-docs.github.io/apidocs/voptions/en/#recent-trades-list // eapiPublicGetTrades (option)\n * Other fetchTradesMethod\n * @see https://binance-docs.github.io/apidocs/spot/en/#recent-trades-list // publicGetTrades (spot)\n * @see https://binance-docs.github.io/apidocs/futures/en/#recent-trades-list // fapiPublicGetTrades (swap)\n * @see https://binance-docs.github.io/apidocs/delivery/en/#recent-trades-list // dapiPublicGetTrades (future)\n * @see https://binance-docs.github.io/apidocs/spot/en/#old-trade-lookup-market_data // publicGetHistoricalTrades (spot)\n * @see https://binance-docs.github.io/apidocs/future/en/#old-trade-lookup-market_data // fapiPublicGetHistoricalTrades (swap)\n * @see https://binance-docs.github.io/apidocs/delivery/en/#old-trade-lookup-market_data // dapiPublicGetHistoricalTrades (future)\n * @see https://binance-docs.github.io/apidocs/voptions/en/#old-trade-lookup-market_data // eapiPublicGetHistoricalTrades (option)\n * @param {string} symbol unified symbol of the market to fetch trades for\n * @param {int} [since] only used when fetchTradesMethod is 'publicGetAggTrades', 'fapiPublicGetAggTrades', or 'dapiPublicGetAggTrades'\n * @param {int} [limit] default 500, max 1000\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {int} [params.until] only used when fetchTradesMethod is 'publicGetAggTrades', 'fapiPublicGetAggTrades', or 'dapiPublicGetAggTrades'\n * @param {int} [params.fetchTradesMethod] 'publicGetAggTrades' (spot default), 'fapiPublicGetAggTrades' (swap default), 'dapiPublicGetAggTrades' (future default), 'eapiPublicGetTrades' (option default), 'publicGetTrades', 'fapiPublicGetTrades', 'dapiPublicGetTrades', 'publicGetHistoricalTrades', 'fapiPublicGetHistoricalTrades', 'dapiPublicGetHistoricalTrades', 'eapiPublicGetHistoricalTrades'\n * @param {boolean} [params.paginate] default false, when true will automatically paginate by calling this endpoint multiple times. See in the docs all the [availble parameters](https://github.com/ccxt/ccxt/wiki/Manual#pagination-params)\n *\n * EXCHANGE SPECIFIC PARAMETERS\n * @param {int} [params.fromId] trade id to fetch from, default gets most recent trades, not used when fetchTradesMethod is 'publicGetTrades', 'fapiPublicGetTrades', 'dapiPublicGetTrades', or 'eapiPublicGetTrades'\n * @returns {Trade[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=public-trades}\n */\n await this.loadMarkets();\n let paginate = false;\n [paginate, params] = this.handleOptionAndParams(params, 'fetchTrades', 'paginate');\n if (paginate) {\n return await this.fetchPaginatedCallDynamic('fetchTrades', symbol, since, limit, params);\n }\n const market = this.market(symbol);\n const request = {\n 'symbol': market['id'],\n // 'fromId': 123, // ID to get aggregate trades from INCLUSIVE.\n // 'startTime': 456, // Timestamp in ms to get aggregate trades from INCLUSIVE.\n // 'endTime': 789, // Timestamp in ms to get aggregate trades until INCLUSIVE.\n // 'limit': 500, // default = 500, maximum = 1000\n };\n if (!market['option']) {\n if (since !== undefined) {\n request['startTime'] = since;\n // https://github.com/ccxt/ccxt/issues/6400\n // https://github.com/binance-exchange/binance-official-api-docs/blob/master/rest-api.md#compressedaggregate-trades-list\n request['endTime'] = this.sum(since, 3600000);\n }\n const until = this.safeInteger(params, 'until');\n if (until !== undefined) {\n request['endTime'] = until;\n }\n }\n if (limit !== undefined) {\n const isFutureOrSwap = (market['swap'] || market['future']);\n request['limit'] = isFutureOrSwap ? Math.min(limit, 1000) : limit; // default = 500, maximum = 1000\n }\n let method = this.safeString(this.options, 'fetchTradesMethod');\n method = this.safeString2(params, 'fetchTradesMethod', 'method', method);\n params = this.omit(params, ['until', 'fetchTradesMethod']);\n let response = undefined;\n if (market['option'] || method === 'eapiPublicGetTrades') {\n response = await this.eapiPublicGetTrades(this.extend(request, params));\n }\n else if (market['linear'] || method === 'fapiPublicGetAggTrades') {\n response = await this.fapiPublicGetAggTrades(this.extend(request, params));\n }\n else if (market['inverse'] || method === 'dapiPublicGetAggTrades') {\n response = await this.dapiPublicGetAggTrades(this.extend(request, params));\n }\n else {\n response = await this.publicGetAggTrades(this.extend(request, params));\n }\n //\n // Caveats:\n // - default limit (500) applies only if no other parameters set, trades up\n // to the maximum limit may be returned to satisfy other parameters\n // - if both limit and time window is set and time window contains more\n // trades than the limit then the last trades from the window are returned\n // - \"tradeId\" accepted and returned by this method is \"aggregate\" trade id\n // which is different from actual trade id\n // - setting both fromId and time window results in error\n //\n // aggregate trades\n //\n // [\n // {\n // \"a\": 26129, // Aggregate tradeId\n // \"p\": \"0.01633102\", // Price\n // \"q\": \"4.70443515\", // Quantity\n // \"f\": 27781, // First tradeId\n // \"l\": 27781, // Last tradeId\n // \"T\": 1498793709153, // Timestamp\n // \"m\": true, // Was the buyer the maker?\n // \"M\": true // Was the trade the best price match?\n // }\n // ]\n //\n // inverse (swap & future)\n //\n // [\n // {\n // \"a\": \"269772814\",\n // \"p\": \"25864.1\",\n // \"q\": \"3\",\n // \"f\": \"662149354\",\n // \"l\": \"662149355\",\n // \"T\": \"1694209776022\",\n // \"m\": false,\n // },\n // ]\n //\n // recent public trades and historical public trades\n //\n // [\n // {\n // \"id\": 28457,\n // \"price\": \"4.00000100\",\n // \"qty\": \"12.00000000\",\n // \"time\": 1499865549590,\n // \"isBuyerMaker\": true,\n // \"isBestMatch\": true\n // }\n // ]\n //\n // options (eapi)\n //\n // [\n // {\n // \"id\": 1,\n // \"symbol\": \"ETH-230216-1500-C\",\n // \"price\": \"35.5\",\n // \"qty\": \"0.03\",\n // \"quoteQty\": \"1.065\",\n // \"side\": 1,\n // \"time\": 1676366446072\n // },\n // ]\n //\n return this.parseTrades(response, market, since, limit);\n }\n async editSpotOrder(id, symbol, type, side, amount, price = undefined, params = {}) {\n /**\n * @method\n * @name binance#editSpotOrder\n * @ignore\n * @description edit a trade order\n * @see https://binance-docs.github.io/apidocs/spot/en/#cancel-an-existing-order-and-send-a-new-order-trade\n * @param {string} id cancel order id\n * @param {string} symbol unified symbol of the market to create an order in\n * @param {string} type 'market' or 'limit' or 'STOP_LOSS' or 'STOP_LOSS_LIMIT' or 'TAKE_PROFIT' or 'TAKE_PROFIT_LIMIT' or 'STOP'\n * @param {string} side 'buy' or 'sell'\n * @param {float} amount how much of currency you want to trade in units of base currency\n * @param {float} [price] the price at which the order is to be fullfilled, in units of the base currency, ignored in market orders\n * @param {string} [params.marginMode] 'cross' or 'isolated', for spot margin trading\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n await this.loadMarkets();\n const market = this.market(symbol);\n if (!market['spot']) {\n throw new MarketTypeNotSupportedError(market['type']).exchange(this.id);\n }\n const payload = this.editSpotOrderRequest(id, symbol, type, side, amount, price, params);\n const response = await this.privatePostOrderCancelReplace(payload);\n //\n // spot\n //\n // {\n // \"cancelResult\": \"SUCCESS\",\n // \"newOrderResult\": \"SUCCESS\",\n // \"cancelResponse\": {\n // \"symbol\": \"BTCUSDT\",\n // \"origClientOrderId\": \"web_3f6286480b194b079870ac75fb6978b7\",\n // \"orderId\": 16383156620,\n // \"orderListId\": -1,\n // \"clientOrderId\": \"Azt6foVTTgHPNhqBf41TTt\",\n // \"price\": \"14000.00000000\",\n // \"origQty\": \"0.00110000\",\n // \"executedQty\": \"0.00000000\",\n // \"cummulativeQuoteQty\": \"0.00000000\",\n // \"status\": \"CANCELED\",\n // \"timeInForce\": \"GTC\",\n // \"type\": \"LIMIT\",\n // \"side\": \"BUY\"\n // },\n // \"newOrderResponse\": {\n // \"symbol\": \"BTCUSDT\",\n // \"orderId\": 16383176297,\n // \"orderListId\": -1,\n // \"clientOrderId\": \"x-R4BD3S8222ecb58eb9074fb1be018c\",\n // \"transactTime\": 1670891847932,\n // \"price\": \"13500.00000000\",\n // \"origQty\": \"0.00085000\",\n // \"executedQty\": \"0.00000000\",\n // \"cummulativeQuoteQty\": \"0.00000000\",\n // \"status\": \"NEW\",\n // \"timeInForce\": \"GTC\",\n // \"type\": \"LIMIT\",\n // \"side\": \"BUY\",\n // \"fills\": []\n // }\n // }\n //\n const data = this.safeValue(response, 'newOrderResponse');\n return this.parseOrder(data, market);\n }\n editSpotOrderRequest(id, symbol, type, side, amount, price = undefined, params = {}) {\n /**\n * @method\n * @ignore\n * @name binance#editSpotOrderRequest\n * @description helper function to build request for editSpotOrder\n * @param {string} id order id to be edited\n * @param {string} symbol unified symbol of the market to create an order in\n * @param {string} type 'market' or 'limit' or 'STOP_LOSS' or 'STOP_LOSS_LIMIT' or 'TAKE_PROFIT' or 'TAKE_PROFIT_LIMIT' or 'STOP'\n * @param {string} side 'buy' or 'sell'\n * @param {float} amount how much of currency you want to trade in units of base currency\n * @param {float} [price] the price at which the order is to be fullfilled, in units of the quote currency, ignored in market orders\n * @param {object} params extra parameters specific to the exchange API endpoint\n * @param {string} [params.marginMode] 'cross' or 'isolated', for spot margin trading\n * @returns {object} request to be sent to the exchange\n */\n const market = this.market(symbol);\n const clientOrderId = this.safeStringN(params, ['newClientOrderId', 'clientOrderId', 'origClientOrderId']);\n const request = {\n 'symbol': market['id'],\n 'side': side.toUpperCase(),\n };\n const initialUppercaseType = type.toUpperCase();\n let uppercaseType = initialUppercaseType;\n const postOnly = this.isPostOnly(initialUppercaseType === 'MARKET', initialUppercaseType === 'LIMIT_MAKER', params);\n if (postOnly) {\n uppercaseType = 'LIMIT_MAKER';\n }\n request['type'] = uppercaseType;\n const stopPrice = this.safeNumber2(params, 'stopPrice', 'triggerPrice');\n if (stopPrice !== undefined) {\n if (uppercaseType === 'MARKET') {\n uppercaseType = 'STOP_LOSS';\n }\n else if (uppercaseType === 'LIMIT') {\n uppercaseType = 'STOP_LOSS_LIMIT';\n }\n }\n const validOrderTypes = this.safeValue(market['info'], 'orderTypes');\n if (!this.inArray(uppercaseType, validOrderTypes)) {\n if (initialUppercaseType !== uppercaseType) {\n throw new InvalidParamsError('stopPrice parameter is not allowed for ' + symbol + ' ' + type + ' orders')\n .exchange(this.id);\n }\n else {\n throw new InvalidParamsError(type + ' is not a valid order type for the ' + symbol + ' market')\n .exchange(this.id);\n }\n }\n if (clientOrderId === undefined) {\n const broker = this.safeValue(this.options, 'broker');\n if (broker !== undefined) {\n const brokerId = this.safeString(broker, 'spot');\n if (brokerId !== undefined) {\n request['newClientOrderId'] = brokerId + this.uuid22();\n }\n }\n }\n else {\n request['newClientOrderId'] = clientOrderId;\n }\n request['newOrderRespType'] = this.safeValue(this.options['newOrderRespType'], type, 'RESULT'); // 'ACK' for order id, 'RESULT' for full order or 'FULL' for order with fills\n let timeInForceIsRequired = false;\n let priceIsRequired = false;\n let stopPriceIsRequired = false;\n let quantityIsRequired = false;\n if (uppercaseType === 'MARKET') {\n const quoteOrderQty = this.safeValue(this.options, 'quoteOrderQty', true);\n if (quoteOrderQty) {\n const quoteOrderQtyNew = this.safeValue2(params, 'quoteOrderQty', 'cost');\n const precision = market['precision']['price'];\n if (quoteOrderQtyNew !== undefined) {\n request['quoteOrderQty'] = this.decimalToPrecision(quoteOrderQtyNew, TRUNCATE, precision, this.precisionMode);\n }\n else if (price !== undefined) {\n const amountString = this.numberToString(amount);\n const priceString = this.numberToString(price);\n const quoteOrderQuantity = Precise.stringMul(amountString, priceString);\n request['quoteOrderQty'] = this.decimalToPrecision(quoteOrderQuantity, TRUNCATE, precision, this.precisionMode);\n }\n else {\n quantityIsRequired = true;\n }\n }\n else {\n quantityIsRequired = true;\n }\n }\n else if (uppercaseType === 'LIMIT') {\n priceIsRequired = true;\n timeInForceIsRequired = true;\n quantityIsRequired = true;\n }\n else if ((uppercaseType === 'STOP_LOSS') || (uppercaseType === 'TAKE_PROFIT')) {\n stopPriceIsRequired = true;\n quantityIsRequired = true;\n }\n else if ((uppercaseType === 'STOP_LOSS_LIMIT') || (uppercaseType === 'TAKE_PROFIT_LIMIT')) {\n quantityIsRequired = true;\n stopPriceIsRequired = true;\n priceIsRequired = true;\n timeInForceIsRequired = true;\n }\n else if (uppercaseType === 'LIMIT_MAKER') {\n priceIsRequired = true;\n quantityIsRequired = true;\n }\n if (quantityIsRequired) {\n request['quantity'] = this.amountToPrecision(symbol, amount);\n }\n if (priceIsRequired) {\n if (price === undefined) {\n throw new InvalidParamsError('It requires a price argument for a ' + type + ' order')\n .exchange(this.id);\n }\n request['price'] = this.priceToPrecision(symbol, price);\n }\n if (timeInForceIsRequired && (this.safeString(params, 'timeInForce') === undefined)) {\n request['timeInForce'] = this.options['defaultTimeInForce']; // 'GTC' = Good To Cancel (default), 'IOC' = Immediate Or Cancel\n }\n if (stopPriceIsRequired) {\n if (stopPrice === undefined) {\n throw new InvalidParamsError('It requires a stopPrice extra param for a ' + type + ' order')\n .exchange(this.id);\n }\n else {\n request['stopPrice'] = this.priceToPrecision(symbol, stopPrice);\n }\n }\n request['cancelReplaceMode'] = 'STOP_ON_FAILURE'; // If the cancel request fails, the new order placement will not be attempted.\n const cancelId = this.safeString2(params, 'cancelNewClientOrderId', 'cancelOrigClientOrderId');\n if (cancelId === undefined) {\n request['cancelOrderId'] = id; // user can provide either cancelOrderId, cancelOrigClientOrderId or cancelOrigClientOrderId\n }\n // remove timeInForce from params because PO is only used by this.isPostOnly and it's not a valid value for Binance\n if (this.safeString(params, 'timeInForce') === 'PO') {\n params = this.omit(params, ['timeInForce']);\n }\n params = this.omit(params, ['quoteOrderQty', 'cost', 'stopPrice', 'newClientOrderId', 'clientOrderId', 'postOnly']);\n return this.extend(request, params);\n }\n async editContractOrder(id, symbol, type, side, amount, price = undefined, params = {}) {\n /**\n * @method\n * @name binance#editContractOrder\n * @description edit a trade order\n * @see https://binance-docs.github.io/apidocs/futures/en/#modify-order-trade\n * @see https://binance-docs.github.io/apidocs/delivery/en/#modify-order-trade\n * @param {string} id cancel order id\n * @param {string} symbol unified symbol of the market to create an order in\n * @param {string} type 'market' or 'limit'\n * @param {string} side 'buy' or 'sell'\n * @param {float} amount how much of currency you want to trade in units of base currency\n * @param {float} [price] the price at which the order is to be fullfilled, in units of the base currency, ignored in market orders\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n await this.loadMarkets();\n const market = this.market(symbol);\n if (!market['contract']) {\n throw new MarketTypeNotSupportedError(market['type']).exchange(this.id);\n }\n const request = {\n 'symbol': market['id'],\n 'side': side.toUpperCase(),\n };\n const clientOrderId = this.safeStringN(params, ['newClientOrderId', 'clientOrderId', 'origClientOrderId']);\n request['orderId'] = id;\n request['quantity'] = this.amountToPrecision(symbol, amount);\n if (price !== undefined) {\n request['price'] = this.priceToPrecision(symbol, price);\n }\n if (clientOrderId !== undefined) {\n request['origClientOrderId'] = clientOrderId;\n }\n params = this.omit(params, ['clientOrderId', 'newClientOrderId']);\n let response = undefined;\n if (market['linear']) {\n response = await this.fapiPrivatePutOrder(this.extend(request, params));\n }\n else if (market['inverse']) {\n response = await this.dapiPrivatePutOrder(this.extend(request, params));\n }\n //\n // swap and future\n //\n // {\n // \"orderId\": 151007482392,\n // \"symbol\": \"BTCUSDT\",\n // \"status\": \"NEW\",\n // \"clientOrderId\": \"web_pCCGp9AIHjziKLlpGpXI\",\n // \"price\": \"25000\",\n // \"avgPrice\": \"0.00000\",\n // \"origQty\": \"0.001\",\n // \"executedQty\": \"0\",\n // \"cumQty\": \"0\",\n // \"cumQuote\": \"0\",\n // \"timeInForce\": \"GTC\",\n // \"type\": \"LIMIT\",\n // \"reduceOnly\": false,\n // \"closePosition\": false,\n // \"side\": \"BUY\",\n // \"positionSide\": \"BOTH\",\n // \"stopPrice\": \"0\",\n // \"workingType\": \"CONTRACT_PRICE\",\n // \"priceProtect\": false,\n // \"origType\": \"LIMIT\",\n // \"updateTime\": 1684300587845\n // }\n //\n return this.parseOrder(response, market);\n }\n async editOrder(id, symbol, type, side, amount = undefined, price = undefined, params = {}) {\n /**\n * @method\n * @name binance#editOrder\n * @description edit a trade order\n * @see https://binance-docs.github.io/apidocs/spot/en/#cancel-an-existing-order-and-send-a-new-order-trade\n * @see https://binance-docs.github.io/apidocs/futures/en/#modify-order-trade\n * @see https://binance-docs.github.io/apidocs/delivery/en/#modify-order-trade\n * @param {string} id cancel order id\n * @param {string} symbol unified symbol of the market to create an order in\n * @param {string} type 'market' or 'limit'\n * @param {string} side 'buy' or 'sell'\n * @param {float} amount how much of currency you want to trade in units of base currency\n * @param {float} [price] the price at which the order is to be fullfilled, in units of the base currency, ignored in market orders\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n await this.loadMarkets();\n const market = this.market(symbol);\n if (market['option']) {\n throw new MarketTypeNotSupportedError(market['type']).exchange(this.id);\n }\n if (market['spot']) {\n return await this.editSpotOrder(id, symbol, type, side, amount, price, params);\n }\n else {\n return await this.editContractOrder(id, symbol, type, side, amount, price, params);\n }\n }\n parseOrderStatus(status) {\n const statuses = {\n 'NEW': 'open',\n 'PARTIALLY_FILLED': 'open',\n 'ACCEPTED': 'open',\n 'FILLED': 'closed',\n 'CANCELED': 'canceled',\n 'CANCELLED': 'canceled',\n 'PENDING_CANCEL': 'canceling',\n 'REJECTED': 'rejected',\n 'EXPIRED': 'expired',\n 'EXPIRED_IN_MATCH': 'expired',\n };\n return this.safeString(statuses, status, status);\n }\n parseOrder(order, market = undefined) {\n //\n // spot\n //\n // {\n // \"symbol\": \"LTCBTC\",\n // \"orderId\": 1,\n // \"clientOrderId\": \"myOrder1\",\n // \"price\": \"0.1\",\n // \"origQty\": \"1.0\",\n // \"executedQty\": \"0.0\",\n // \"cummulativeQuoteQty\": \"0.0\",\n // \"status\": \"NEW\",\n // \"timeInForce\": \"GTC\",\n // \"type\": \"LIMIT\",\n // \"side\": \"BUY\",\n // \"stopPrice\": \"0.0\",\n // \"icebergQty\": \"0.0\",\n // \"time\": 1499827319559,\n // \"updateTime\": 1499827319559,\n // \"isWorking\": true\n // }\n //\n // spot: editOrder\n //\n // {\n // \"symbol\": \"BTCUSDT\",\n // \"orderId\": 16383176297,\n // \"orderListId\": -1,\n // \"clientOrderId\": \"x-R4BD3S8222ecb58eb9074fb1be018c\",\n // \"transactTime\": 1670891847932,\n // \"price\": \"13500.00000000\",\n // \"origQty\": \"0.00085000\",\n // \"executedQty\": \"0.00000000\",\n // \"cummulativeQuoteQty\": \"0.00000000\",\n // \"status\": \"NEW\",\n // \"timeInForce\": \"GTC\",\n // \"type\": \"LIMIT\",\n // \"side\": \"BUY\",\n // \"fills\": []\n // }\n //\n // swap and future: editOrder\n //\n // {\n // \"orderId\": 151007482392,\n // \"symbol\": \"BTCUSDT\",\n // \"status\": \"NEW\",\n // \"clientOrderId\": \"web_pCCGp9AIHjziKLlpGpXI\",\n // \"price\": \"25000\",\n // \"avgPrice\": \"0.00000\",\n // \"origQty\": \"0.001\",\n // \"executedQty\": \"0\",\n // \"cumQty\": \"0\",\n // \"cumQuote\": \"0\",\n // \"timeInForce\": \"GTC\",\n // \"type\": \"LIMIT\",\n // \"reduceOnly\": false,\n // \"closePosition\": false,\n // \"side\": \"BUY\",\n // \"positionSide\": \"BOTH\",\n // \"stopPrice\": \"0\",\n // \"workingType\": \"CONTRACT_PRICE\",\n // \"priceProtect\": false,\n // \"origType\": \"LIMIT\",\n // \"updateTime\": 1684300587845\n // }\n //\n // futures\n //\n // {\n // \"symbol\": \"BTCUSDT\",\n // \"orderId\": 1,\n // \"clientOrderId\": \"myOrder1\",\n // \"price\": \"0.1\",\n // \"origQty\": \"1.0\",\n // \"executedQty\": \"1.0\",\n // \"cumQuote\": \"10.0\",\n // \"status\": \"NEW\",\n // \"timeInForce\": \"GTC\",\n // \"type\": \"LIMIT\",\n // \"side\": \"BUY\",\n // \"stopPrice\": \"0.0\",\n // \"updateTime\": 1499827319559\n // }\n //\n // createOrder with { \"newOrderRespType\": \"FULL\" }\n //\n // {\n // \"symbol\": \"BTCUSDT\",\n // \"orderId\": 5403233939,\n // \"orderListId\": -1,\n // \"clientOrderId\": \"x-R4BD3S825e669e75b6c14f69a2c43e\",\n // \"transactTime\": 1617151923742,\n // \"price\": \"0.00000000\",\n // \"origQty\": \"0.00050000\",\n // \"executedQty\": \"0.00050000\",\n // \"cummulativeQuoteQty\": \"29.47081500\",\n // \"status\": \"FILLED\",\n // \"timeInForce\": \"GTC\",\n // \"type\": \"MARKET\",\n // \"side\": \"BUY\",\n // \"fills\": [\n // {\n // \"price\": \"58941.63000000\",\n // \"qty\": \"0.00050000\",\n // \"commission\": \"0.00007050\",\n // \"commissionAsset\": \"BNB\",\n // \"tradeId\": 737466631\n // }\n // ]\n // }\n //\n // delivery\n //\n // {\n // \"orderId\": \"18742727411\",\n // \"symbol\": \"ETHUSD_PERP\",\n // \"pair\": \"ETHUSD\",\n // \"status\": \"FILLED\",\n // \"clientOrderId\": \"x-xcKtGhcu3e2d1503fdd543b3b02419\",\n // \"price\": \"0\",\n // \"avgPrice\": \"4522.14\",\n // \"origQty\": \"1\",\n // \"executedQty\": \"1\",\n // \"cumBase\": \"0.00221134\",\n // \"timeInForce\": \"GTC\",\n // \"type\": \"MARKET\",\n // \"reduceOnly\": false,\n // \"closePosition\": false,\n // \"side\": \"SELL\",\n // \"positionSide\": \"BOTH\",\n // \"stopPrice\": \"0\",\n // \"workingType\": \"CONTRACT_PRICE\",\n // \"priceProtect\": false,\n // \"origType\": \"MARKET\",\n // \"time\": \"1636061952660\",\n // \"updateTime\": \"1636061952660\"\n // }\n //\n // option: createOrder, fetchOrder, fetchOpenOrders, fetchOrders\n //\n // {\n // \"orderId\": 4728833085436977152,\n // \"symbol\": \"ETH-230211-1500-C\",\n // \"price\": \"10.0\",\n // \"quantity\": \"1.00\",\n // \"executedQty\": \"0.00\",\n // \"fee\": \"0\",\n // \"side\": \"BUY\",\n // \"type\": \"LIMIT\",\n // \"timeInForce\": \"GTC\",\n // \"reduceOnly\": false,\n // \"postOnly\": false,\n // \"createTime\": 1676083034462,\n // \"updateTime\": 1676083034462,\n // \"status\": \"ACCEPTED\",\n // \"avgPrice\": \"0\",\n // \"source\": \"API\",\n // \"clientOrderId\": \"\",\n // \"priceScale\": 1,\n // \"quantityScale\": 2,\n // \"optionSide\": \"CALL\",\n // \"quoteAsset\": \"USDT\",\n // \"lastTrade\": {\"id\":\"69\",\"time\":\"1676084430567\",\"price\":\"24.9\",\"qty\":\"1.00\"},\n // \"mmp\": false\n // }\n //\n // cancelOrders/createOrders\n //\n // {\n // \"code\": -4005,\n // \"msg\": \"Quantity greater than max quantity.\"\n // }\n //\n // createOrder, fetchOpenOrders, fetchOrder, cancelOrder, fetchOrders: portfolio margin linear swap and future\n //\n // {\n // \"symbol\": \"BTCUSDT\",\n // \"side\": \"BUY\",\n // \"executedQty\": \"0.000\",\n // \"orderId\": 258649539704,\n // \"goodTillDate\": 0,\n // \"avgPrice\": \"0\",\n // \"origQty\": \"0.010\",\n // \"clientOrderId\": \"x-xcKtGhcu02573c6f15e544e990057b\",\n // \"positionSide\": \"BOTH\",\n // \"cumQty\": \"0.000\",\n // \"updateTime\": 1707110415436,\n // \"type\": \"LIMIT\",\n // \"reduceOnly\": false,\n // \"price\": \"35000.00\",\n // \"cumQuote\": \"0.00000\",\n // \"selfTradePreventionMode\": \"NONE\",\n // \"timeInForce\": \"GTC\",\n // \"status\": \"NEW\"\n // }\n //\n // createOrder, fetchOpenOrders, fetchOrder, cancelOrder, fetchOrders: portfolio margin inverse swap and future\n //\n // {\n // \"symbol\": \"ETHUSD_PERP\",\n // \"side\": \"BUY\",\n // \"cumBase\": \"0\",\n // \"executedQty\": \"0\",\n // \"orderId\": 71275227732,\n // \"avgPrice\": \"0.00\",\n // \"origQty\": \"1\",\n // \"clientOrderId\": \"x-xcKtGhcuca5af3acfb5044198c5398\",\n // \"positionSide\": \"BOTH\",\n // \"cumQty\": \"0\",\n // \"updateTime\": 1707110994334,\n // \"type\": \"LIMIT\",\n // \"pair\": \"ETHUSD\",\n // \"reduceOnly\": false,\n // \"price\": \"2000\",\n // \"timeInForce\": \"GTC\",\n // \"status\": \"NEW\"\n // }\n //\n // createOrder, fetchOpenOrders: portfolio margin linear swap and future conditional\n //\n // {\n // \"newClientStrategyId\": \"x-xcKtGhcu27f109953d6e4dc0974006\",\n // \"strategyId\": 3645916,\n // \"strategyStatus\": \"NEW\",\n // \"strategyType\": \"STOP\",\n // \"origQty\": \"0.010\",\n // \"price\": \"35000.00\",\n // \"reduceOnly\": false,\n // \"side\": \"BUY\",\n // \"positionSide\": \"BOTH\",\n // \"stopPrice\": \"45000.00\",\n // \"symbol\": \"BTCUSDT\",\n // \"timeInForce\": \"GTC\",\n // \"bookTime\": 1707112625879,\n // \"updateTime\": 1707112625879,\n // \"workingType\": \"CONTRACT_PRICE\",\n // \"priceProtect\": false,\n // \"goodTillDate\": 0,\n // \"selfTradePreventionMode\": \"NONE\"\n // }\n //\n // createOrder, fetchOpenOrders: portfolio margin inverse swap and future conditional\n //\n // {\n // \"newClientStrategyId\": \"x-xcKtGhcuc6b86f053bb34933850739\",\n // \"strategyId\": 1423462,\n // \"strategyStatus\": \"NEW\",\n // \"strategyType\": \"STOP\",\n // \"origQty\": \"1\",\n // \"price\": \"2000\",\n // \"reduceOnly\": false,\n // \"side\": \"BUY\",\n // \"positionSide\": \"BOTH\",\n // \"stopPrice\": \"3000\",\n // \"symbol\": \"ETHUSD_PERP\",\n // \"timeInForce\": \"GTC\",\n // \"bookTime\": 1707113098840,\n // \"updateTime\": 1707113098840,\n // \"workingType\": \"CONTRACT_PRICE\",\n // \"priceProtect\": false\n // }\n //\n // createOrder, cancelAllOrders, cancelOrder: portfolio margin spot margin\n //\n // {\n // \"clientOrderId\": \"x-R4BD3S82e9ef29d8346440f0b28b86\",\n // \"cummulativeQuoteQty\": \"0.00000000\",\n // \"executedQty\": \"0.00000000\",\n // \"fills\": [],\n // \"orderId\": 24684460474,\n // \"origQty\": \"0.00100000\",\n // \"price\": \"35000.00000000\",\n // \"selfTradePreventionMode\": \"EXPIRE_MAKER\",\n // \"side\": \"BUY\",\n // \"status\": \"NEW\",\n // \"symbol\": \"BTCUSDT\",\n // \"timeInForce\": \"GTC\",\n // \"transactTime\": 1707113538870,\n // \"type\": \"LIMIT\"\n // }\n //\n // fetchOpenOrders, fetchOrder, fetchOrders: portfolio margin spot margin\n //\n // {\n // \"symbol\": \"BTCUSDT\",\n // \"orderId\": 24700763749,\n // \"clientOrderId\": \"x-R4BD3S826f724c2a4af6425f98c7b6\",\n // \"price\": \"35000.00000000\",\n // \"origQty\": \"0.00100000\",\n // \"executedQty\": \"0.00000000\",\n // \"cummulativeQuoteQty\": \"0.00000000\",\n // \"status\": \"NEW\",\n // \"timeInForce\": \"GTC\",\n // \"type\": \"LIMIT\",\n // \"side\": \"BUY\",\n // \"stopPrice\": \"0.00000000\",\n // \"icebergQty\": \"0.00000000\",\n // \"time\": 1707199187679,\n // \"updateTime\": 1707199187679,\n // \"isWorking\": true,\n // \"accountId\": 200180970,\n // \"selfTradePreventionMode\": \"EXPIRE_MAKER\",\n // \"preventedMatchId\": null,\n // \"preventedQuantity\": null\n // }\n //\n // cancelOrder: portfolio margin linear and inverse swap conditional\n //\n // {\n // \"strategyId\": 3733211,\n // \"newClientStrategyId\": \"x-xcKtGhcuaf166172ed504cd1bc0396\",\n // \"strategyType\": \"STOP\",\n // \"strategyStatus\": \"CANCELED\",\n // \"origQty\": \"0.010\",\n // \"price\": \"35000.00\",\n // \"reduceOnly\": false,\n // \"side\": \"BUY\",\n // \"positionSide\": \"BOTH\",\n // \"stopPrice\": \"50000.00\", // ignored with trailing orders\n // \"symbol\": \"BTCUSDT\",\n // \"timeInForce\": \"GTC\",\n // \"activatePrice\": null, // only return with trailing orders\n // \"priceRate\": null, // only return with trailing orders\n // \"bookTime\": 1707270098774,\n // \"updateTime\": 1707270119261,\n // \"workingType\": \"CONTRACT_PRICE\",\n // \"priceProtect\": false,\n // \"goodTillDate\": 0,\n // \"selfTradePreventionMode\": \"NONE\"\n // }\n //\n // fetchOrders: portfolio margin linear and inverse swap conditional\n //\n // {\n // \"newClientStrategyId\": \"x-xcKtGhcuaf166172ed504cd1bc0396\",\n // \"strategyId\": 3733211,\n // \"strategyStatus\": \"CANCELLED\",\n // \"strategyType\": \"STOP\",\n // \"origQty\": \"0.010\",\n // \"price\": \"35000\",\n // \"orderId\": 0,\n // \"reduceOnly\": false,\n // \"side\": \"BUY\",\n // \"positionSide\": \"BOTH\",\n // \"stopPrice\": \"50000\",\n // \"symbol\": \"BTCUSDT\",\n // \"type\": \"LIMIT\",\n // \"bookTime\": 1707270098774,\n // \"updateTime\": 1707270119261,\n // \"timeInForce\": \"GTC\",\n // \"triggerTime\": 0,\n // \"workingType\": \"CONTRACT_PRICE\",\n // \"priceProtect\": false,\n // \"goodTillDate\": 0,\n // \"selfTradePreventionMode\": \"NONE\"\n // }\n //\n const code = this.safeString(order, 'code');\n if (code !== undefined) {\n // cancelOrders/createOrders might have a partial success\n return this.safeOrder({ 'info': order, 'status': 'rejected' }, market);\n }\n const status = this.parseOrderStatus(this.safeString2(order, 'status', 'strategyStatus'));\n const marketId = this.safeString(order, 'symbol');\n const isContract = ('positionSide' in order) || ('cumQuote' in order);\n const marketType = isContract ? 'contract' : 'spot';\n const symbol = this.safeSymbol(marketId, market, undefined, marketType);\n const filled = this.safeString(order, 'executedQty', '0');\n const timestamp = this.safeIntegerN(order, ['time', 'createTime', 'workingTime', 'transactTime', 'updateTime']); // order of the keys matters here\n let lastTradeTimestamp = undefined;\n if (('transactTime' in order) || ('updateTime' in order)) {\n const timestampValue = this.safeInteger2(order, 'updateTime', 'transactTime');\n if (status === 'open') {\n if (Precise.stringGt(filled, '0')) {\n lastTradeTimestamp = timestampValue;\n }\n }\n else if (status === 'closed') {\n lastTradeTimestamp = timestampValue;\n }\n }\n const lastUpdateTimestamp = this.safeInteger2(order, 'transactTime', 'updateTime');\n const average = this.safeString(order, 'avgPrice');\n const price = this.safeString(order, 'price');\n const amount = this.safeString2(order, 'origQty', 'quantity');\n // - Spot/Margin market: cummulativeQuoteQty\n // - Futures market: cumQuote.\n // Note this is not the actual cost, since Binance futures uses leverage to calculate margins.\n let cost = this.safeString2(order, 'cummulativeQuoteQty', 'cumQuote');\n cost = this.safeString(order, 'cumBase', cost);\n let type = this.safeStringLower(order, 'type');\n const side = this.safeStringLower(order, 'side');\n const fills = this.safeList(order, 'fills', []);\n let timeInForce = this.safeString(order, 'timeInForce');\n if (timeInForce === 'GTX') {\n // GTX means \"Good Till Crossing\" and is an equivalent way of saying Post Only\n timeInForce = 'PO';\n }\n const postOnly = (type === 'limit_maker') || (timeInForce === 'PO');\n if (type === 'limit_maker') {\n type = 'limit';\n }\n const stopPriceString = this.safeString(order, 'stopPrice');\n const stopPrice = this.parseNumber(this.omitZero(stopPriceString));\n const feeCost = this.safeNumber(order, 'fee');\n let fee = undefined;\n if (feeCost !== undefined) {\n fee = {\n 'currency': this.safeString(order, 'quoteAsset'),\n 'cost': feeCost,\n 'rate': undefined,\n };\n }\n return this.safeOrder({\n 'info': order,\n 'id': this.safeString2(order, 'strategyId', 'orderId'),\n 'clientOrderId': this.safeString2(order, 'clientOrderId', 'newClientStrategyId'),\n 'timestamp': timestamp,\n 'datetime': this.iso8601(timestamp),\n 'lastTradeTimestamp': lastTradeTimestamp,\n 'lastUpdateTimestamp': lastUpdateTimestamp,\n 'symbol': symbol,\n 'type': type,\n 'timeInForce': timeInForce,\n 'postOnly': postOnly,\n 'reduceOnly': this.safeBool(order, 'reduceOnly'),\n 'side': side,\n 'price': price,\n 'triggerPrice': stopPrice,\n 'amount': amount,\n 'cost': cost,\n 'average': average,\n 'filled': filled,\n 'remaining': undefined,\n 'status': status,\n 'fee': fee,\n 'trades': fills,\n }, market);\n }\n async createOrders(orders, params = {}) {\n /**\n * @method\n * @name binance#createOrders\n * @description *contract only* create a list of trade orders\n * @see https://binance-docs.github.io/apidocs/futures/en/#place-multiple-orders-trade\n * @param {Array} orders list of orders to create, each object should contain the parameters required by createOrder, namely symbol, type, side, amount, price and params\n * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n await this.loadMarkets();\n const ordersRequests = [];\n let orderSymbols = [];\n for (let i = 0; i < orders.length; i++) {\n const rawOrder = orders[i];\n const marketId = this.safeString(rawOrder, 'symbol');\n orderSymbols.push(marketId);\n const type = this.safeString(rawOrder, 'type');\n const side = this.safeString(rawOrder, 'side');\n const amount = this.safeValue(rawOrder, 'amount');\n const price = this.safeValue(rawOrder, 'price');\n const orderParams = this.safeDict(rawOrder, 'params', {});\n const orderRequest = this.createOrderRequest(marketId, type, side, amount, price, orderParams);\n ordersRequests.push(orderRequest);\n }\n orderSymbols = this.marketSymbols(orderSymbols, undefined, false, true, true);\n const market = this.market(orderSymbols[0]);\n if (market['spot']) {\n throw new MarketTypeNotSupportedError(market['type']).exchange(this.id);\n }\n let response = undefined;\n let request = {\n 'batchOrders': ordersRequests,\n };\n request = this.extend(request, params);\n if (market['linear']) {\n response = await this.fapiPrivatePostBatchOrders(request);\n }\n else if (market['option']) {\n response = await this.eapiPrivatePostBatchOrders(request);\n }\n else {\n response = await this.dapiPrivatePostBatchOrders(request);\n }\n //\n // [\n // {\n // \"code\": -4005,\n // \"msg\": \"Quantity greater than max quantity.\"\n // },\n // {\n // \"orderId\": 650640530,\n // \"symbol\": \"LTCUSDT\",\n // \"status\": \"NEW\",\n // \"clientOrderId\": \"x-xcKtGhcu32184eb13585491289bbaf\",\n // \"price\": \"54.00\",\n // \"avgPrice\": \"0.00\",\n // \"origQty\": \"0.100\",\n // \"executedQty\": \"0.000\",\n // \"cumQty\": \"0.000\",\n // \"cumQuote\": \"0.00000\",\n // \"timeInForce\": \"GTC\",\n // \"type\": \"LIMIT\",\n // \"reduceOnly\": false,\n // \"closePosition\": false,\n // \"side\": \"BUY\",\n // \"positionSide\": \"BOTH\",\n // \"stopPrice\": \"0.00\",\n // \"workingType\": \"CONTRACT_PRICE\",\n // \"priceProtect\": false,\n // \"origType\": \"LIMIT\",\n // \"priceMatch\": \"NONE\",\n // \"selfTradePreventionMode\": \"NONE\",\n // \"goodTillDate\": 0,\n // \"updateTime\": 1698073926929\n // }\n // ]\n //\n return this.parseOrders(response);\n }\n async createOrder(symbol, type, side, amount, price = undefined, params = {}) {\n /**\n * @method\n * @name binance#createOrder\n * @description create a trade order\n * @see https://binance-docs.github.io/apidocs/spot/en/#new-order-trade\n * @see https://binance-docs.github.io/apidocs/spot/en/#test-new-order-trade\n * @see https://binance-docs.github.io/apidocs/futures/en/#new-order-trade\n * @see https://binance-docs.github.io/apidocs/delivery/en/#new-order-trade\n * @see https://binance-docs.github.io/apidocs/voptions/en/#new-order-trade\n * @see https://binance-docs.github.io/apidocs/spot/en/#new-order-using-sor-trade\n * @see https://binance-docs.github.io/apidocs/spot/en/#test-new-order-using-sor-trade\n * @see https://binance-docs.github.io/apidocs/pm/en/#new-um-order-trade\n * @see https://binance-docs.github.io/apidocs/pm/en/#new-cm-order-trade\n * @see https://binance-docs.github.io/apidocs/pm/en/#new-margin-order-trade\n * @see https://binance-docs.github.io/apidocs/pm/en/#new-um-conditional-order-trade\n * @see https://binance-docs.github.io/apidocs/pm/en/#new-cm-conditional-order-trade\n * @param {string} symbol unified symbol of the market to create an order in\n * @param {string} type 'market' or 'limit' or 'STOP_LOSS' or 'STOP_LOSS_LIMIT' or 'TAKE_PROFIT' or 'TAKE_PROFIT_LIMIT' or 'STOP'\n * @param {string} side 'buy' or 'sell'\n * @param {float} amount how much of you want to trade in units of the base currency\n * @param {float} [price] the price that the order is to be fullfilled, in units of the quote currency, ignored in market orders\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {string} [params.reduceOnly] for swap and future reduceOnly is a string 'true' or 'false' that cant be sent with close position set to true or in hedge mode. For spot margin and option reduceOnly is a boolean.\n * @param {string} [params.marginMode] 'cross' or 'isolated', for spot margin trading\n * @param {boolean} [params.sor] *spot only* whether to use SOR (Smart Order Routing) or not, default is false\n * @param {boolean} [params.test] *spot only* whether to use the test endpoint or not, default is false\n * @param {float} [params.trailingPercent] the percent to trail away from the current market price\n * @param {float} [params.trailingTriggerPrice] the price to trigger a trailing order, default uses the price argument\n * @param {float} [params.triggerPrice] the price that a trigger order is triggered at\n * @param {float} [params.stopLossPrice] the price that a stop loss order is triggered at\n * @param {float} [params.takeProfitPrice] the price that a take profit order is triggered at\n * @param {boolean} [params.portfolioMargin] set to true if you would like to create an order in a portfolio margin account\n * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n await this.loadMarkets();\n const market = this.market(symbol);\n const marketType = this.safeString(params, 'type', market['type']);\n let marginMode = undefined;\n [marginMode, params] = this.handleMarginModeAndParams('createOrder', params);\n let isPortfolioMargin = undefined;\n [isPortfolioMargin, params] = this.handleOptionAndParams2(params, 'createOrder', 'papi', 'portfolioMargin', false);\n const triggerPrice = this.safeString2(params, 'triggerPrice', 'stopPrice');\n const stopLossPrice = this.safeString(params, 'stopLossPrice');\n const takeProfitPrice = this.safeString(params, 'takeProfitPrice');\n const trailingPercent = this.safeString2(params, 'trailingPercent', 'callbackRate');\n const isTrailingPercentOrder = trailingPercent !== undefined;\n const isStopLoss = stopLossPrice !== undefined;\n const isTakeProfit = takeProfitPrice !== undefined;\n const isConditional = (triggerPrice !== undefined) || isTrailingPercentOrder || isStopLoss || isTakeProfit;\n const sor = this.safeBool2(params, 'sor', 'SOR', false);\n const test = this.safeBool(params, 'test', false);\n params = this.omit(params, ['sor', 'SOR', 'test']);\n if (isPortfolioMargin) {\n params['portfolioMargin'] = isPortfolioMargin;\n }\n const request = this.createOrderRequest(symbol, type, side, amount, price, params);\n let response = undefined;\n if (market['option']) {\n response = await this.eapiPrivatePostOrder(request);\n }\n else if (sor) {\n if (test) {\n response = await this.privatePostSorOrderTest(request);\n }\n else {\n response = await this.privatePostSorOrder(request);\n }\n }\n else if (market['linear']) {\n if (isPortfolioMargin) {\n if (isConditional) {\n response = await this.papiPostUmConditionalOrder(request);\n }\n else {\n response = await this.papiPostUmOrder(request);\n }\n }\n else {\n response = await this.fapiPrivatePostOrder(request);\n }\n }\n else if (market['inverse']) {\n if (isPortfolioMargin) {\n if (isConditional) {\n response = await this.papiPostCmConditionalOrder(request);\n }\n else {\n response = await this.papiPostCmOrder(request);\n }\n }\n else {\n response = await this.dapiPrivatePostOrder(request);\n }\n }\n else if (marketType === 'margin' || marginMode !== undefined) {\n if (isPortfolioMargin) {\n response = await this.papiPostMarginOrder(request);\n }\n else {\n response = await this.sapiPostMarginOrder(request);\n }\n }\n else {\n if (test) {\n response = await this.privatePostOrderTest(request);\n }\n else {\n response = await this.privatePostOrder(request);\n }\n }\n return this.parseOrder(response, market);\n }\n createOrderRequest(symbol, type, side, amount, price = undefined, params = {}) {\n /**\n * @method\n * @ignore\n * @name binance#createOrderRequest\n * @description helper function to build the request\n * @param {string} symbol unified symbol of the market to create an order in\n * @param {string} type 'market' or 'limit'\n * @param {string} side 'buy' or 'sell'\n * @param {float} amount how much you want to trade in units of the base currency\n * @param {float} [price] the price that the order is to be fullfilled, in units of the quote currency, ignored in market orders\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} request to be sent to the exchange\n */\n const market = this.market(symbol);\n const marketType = this.safeString(params, 'type', market['type']);\n const clientOrderId = this.safeString2(params, 'newClientOrderId', 'clientOrderId');\n const initialUppercaseType = type.toUpperCase();\n const isMarketOrder = initialUppercaseType === 'MARKET';\n const isLimitOrder = initialUppercaseType === 'LIMIT';\n const request = {\n 'symbol': market['id'],\n 'side': side.toUpperCase(),\n };\n let isPortfolioMargin = undefined;\n [isPortfolioMargin, params] = this.handleOptionAndParams2(params, 'createOrder', 'papi', 'portfolioMargin', false);\n let marginMode = undefined;\n [marginMode, params] = this.handleMarginModeAndParams('createOrder', params);\n if ((marketType === 'margin') || (marginMode !== undefined) || market['option']) {\n // for swap and future reduceOnly is a string that cant be sent with close position set to true or in hedge mode\n const reduceOnly = this.safeBool(params, 'reduceOnly', false);\n params = this.omit(params, 'reduceOnly');\n if (market['option']) {\n request['reduceOnly'] = reduceOnly;\n }\n else {\n if (reduceOnly) {\n request['sideEffectType'] = 'AUTO_REPAY';\n }\n }\n }\n const triggerPrice = this.safeString2(params, 'triggerPrice', 'stopPrice');\n const stopLossPrice = this.safeString(params, 'stopLossPrice', triggerPrice); // fallback to stopLoss\n const takeProfitPrice = this.safeString(params, 'takeProfitPrice');\n const trailingDelta = this.safeString(params, 'trailingDelta');\n const trailingTriggerPrice = this.safeString2(params, 'trailingTriggerPrice', 'activationPrice', this.numberToString(price));\n const trailingPercent = this.safeString2(params, 'trailingPercent', 'callbackRate');\n const isTrailingPercentOrder = trailingPercent !== undefined;\n const isStopLoss = stopLossPrice !== undefined || trailingDelta !== undefined;\n const isTakeProfit = takeProfitPrice !== undefined;\n const isTriggerOrder = triggerPrice !== undefined;\n const isConditional = isTriggerOrder || isTrailingPercentOrder || isStopLoss || isTakeProfit;\n const isPortfolioMarginConditional = (isPortfolioMargin && isConditional);\n let uppercaseType = type.toUpperCase();\n let stopPrice = undefined;\n if (isTrailingPercentOrder) {\n uppercaseType = 'TRAILING_STOP_MARKET';\n request['callbackRate'] = trailingPercent;\n if (trailingTriggerPrice !== undefined) {\n request['activationPrice'] = this.priceToPrecision(symbol, trailingTriggerPrice);\n }\n }\n else if (isStopLoss) {\n stopPrice = stopLossPrice;\n if (isMarketOrder) {\n // spot STOP_LOSS market orders are not a valid order type\n uppercaseType = market['contract'] ? 'STOP_MARKET' : 'STOP_LOSS';\n }\n else if (isLimitOrder) {\n uppercaseType = market['contract'] ? 'STOP' : 'STOP_LOSS_LIMIT';\n }\n }\n else if (isTakeProfit) {\n stopPrice = takeProfitPrice;\n if (isMarketOrder) {\n // spot TAKE_PROFIT market orders are not a valid order type\n uppercaseType = market['contract'] ? 'TAKE_PROFIT_MARKET' : 'TAKE_PROFIT';\n }\n else if (isLimitOrder) {\n uppercaseType = market['contract'] ? 'TAKE_PROFIT' : 'TAKE_PROFIT_LIMIT';\n }\n }\n if ((marketType === 'spot') || (marketType === 'margin')) {\n request['newOrderRespType'] = this.safeString(this.options['newOrderRespType'], type, 'RESULT'); // 'ACK' for order id, 'RESULT' for full order or 'FULL' for order with fills\n }\n else {\n // swap, futures and options\n if (!isPortfolioMargin) {\n request['newOrderRespType'] = 'RESULT'; // \"ACK\", \"RESULT\", default \"ACK\"\n }\n }\n if (market['option']) {\n if (type === 'market') {\n throw new InvalidParamsError(type + ' is not a valid order type for the ' + symbol + ' market')\n .exchange(this.id);\n }\n }\n else {\n const validOrderTypes = this.safeList(market['info'], 'orderTypes');\n if (!this.inArray(uppercaseType, validOrderTypes)) {\n if (initialUppercaseType !== uppercaseType) {\n throw new InvalidParamsError('stopPrice parameter is not allowed for ' + symbol + ' ' + type + ' orders')\n .exchange(this.id);\n }\n else {\n throw new InvalidParamsError(type + ' is not a valid order type for the ' + symbol + ' market')\n .exchange(this.id);\n }\n }\n }\n const clientOrderIdRequest = isPortfolioMarginConditional ? 'newClientStrategyId' : 'newClientOrderId';\n if (clientOrderId === undefined) {\n const broker = this.safeDict(this.options, 'broker', {});\n const defaultId = (market['contract']) ? 'x-xcKtGhcu' : 'x-R4BD3S82';\n const brokerId = this.safeString(broker, marketType, defaultId);\n request[clientOrderIdRequest] = brokerId + this.uuid22();\n }\n else {\n request[clientOrderIdRequest] = clientOrderId;\n }\n let postOnly = undefined;\n if (!isPortfolioMargin) {\n postOnly = this.isPostOnly(isMarketOrder, initialUppercaseType === 'LIMIT_MAKER', params);\n if (market['spot'] || marketType === 'margin') {\n // only supported for spot/margin api (all margin markets are spot markets)\n if (postOnly) {\n uppercaseType = 'LIMIT_MAKER';\n }\n if (marginMode === 'isolated') {\n request['isIsolated'] = true;\n }\n }\n }\n const typeRequest = isPortfolioMarginConditional ? 'strategyType' : 'type';\n request[typeRequest] = uppercaseType;\n // additional required fields depending on the order type\n let timeInForceIsRequired = false;\n let priceIsRequired = false;\n let stopPriceIsRequired = false;\n let quantityIsRequired = false;\n //\n // spot/margin\n //\n // LIMIT timeInForce, quantity, price\n // MARKET quantity or quoteOrderQty\n // STOP_LOSS quantity, stopPrice\n // STOP_LOSS_LIMIT timeInForce, quantity, price, stopPrice\n // TAKE_PROFIT quantity, stopPrice\n // TAKE_PROFIT_LIMIT timeInForce, quantity, price, stopPrice\n // LIMIT_MAKER quantity, price\n //\n // futures\n //\n // LIMIT timeInForce, quantity, price\n // MARKET quantity\n // STOP/TAKE_PROFIT quantity, price, stopPrice\n // STOP_MARKET stopPrice\n // TAKE_PROFIT_MARKET stopPrice\n // TRAILING_STOP_MARKET callbackRate\n //\n if (uppercaseType === 'MARKET') {\n if (market['spot']) {\n const quoteOrderQty = this.safeBool(this.options, 'quoteOrderQty', true);\n if (quoteOrderQty) {\n const quoteOrderQtyNew = this.safeString2(params, 'quoteOrderQty', 'cost');\n if (quoteOrderQtyNew !== undefined) {\n // We shouldn't truncate as it will break the min amount logic\n request['quoteOrderQty'] = this.costToPrecision(symbol, quoteOrderQtyNew);\n }\n else if (price !== undefined) {\n const amountString = this.numberToString(amount);\n const priceString = this.numberToString(price);\n const quoteOrderQuantity = Precise.stringMul(amountString, priceString);\n // We shouldn't truncate as it will break the min amount logic\n request['quoteOrderQty'] = this.costToPrecision(symbol, quoteOrderQuantity);\n }\n else {\n quantityIsRequired = true;\n }\n }\n else {\n quantityIsRequired = true;\n }\n }\n else {\n quantityIsRequired = true;\n }\n }\n else if (uppercaseType === 'LIMIT') {\n priceIsRequired = true;\n timeInForceIsRequired = true;\n quantityIsRequired = true;\n }\n else if ((uppercaseType === 'STOP_LOSS') || (uppercaseType === 'TAKE_PROFIT')) {\n stopPriceIsRequired = true;\n quantityIsRequired = true;\n if (market['linear'] || market['inverse']) {\n priceIsRequired = true;\n }\n }\n else if ((uppercaseType === 'STOP_LOSS_LIMIT') || (uppercaseType === 'TAKE_PROFIT_LIMIT')) {\n quantityIsRequired = true;\n stopPriceIsRequired = true;\n priceIsRequired = true;\n timeInForceIsRequired = true;\n }\n else if (uppercaseType === 'LIMIT_MAKER') {\n priceIsRequired = true;\n quantityIsRequired = true;\n }\n else if (uppercaseType === 'STOP') {\n quantityIsRequired = true;\n stopPriceIsRequired = true;\n priceIsRequired = true;\n }\n else if ((uppercaseType === 'STOP_MARKET') || (uppercaseType === 'TAKE_PROFIT_MARKET')) {\n const closePosition = this.safeBool(params, 'closePosition');\n if (closePosition === undefined) {\n quantityIsRequired = true;\n }\n stopPriceIsRequired = true;\n }\n else if (uppercaseType === 'TRAILING_STOP_MARKET') {\n quantityIsRequired = true;\n if (trailingPercent === undefined) {\n throw new InvalidParamsError('It requires a trailingPercent param for a ' + type + ' order')\n .exchange(this.id);\n }\n }\n if (quantityIsRequired) {\n // portfolio margin has a different amount precision\n if (isPortfolioMargin) {\n request['quantity'] = this.parseToNumeric(amount);\n }\n else {\n request['quantity'] = this.amountToPrecision(symbol, amount);\n }\n }\n if (priceIsRequired) {\n if (price === undefined) {\n throw new InvalidParamsError('It requires a price argument for a ' + type + ' order')\n .exchange(this.id);\n }\n request['price'] = this.priceToPrecision(symbol, price);\n }\n if (stopPriceIsRequired) {\n if (market['contract']) {\n if (stopPrice === undefined) {\n throw new InvalidParamsError('It requires a stopPrice extra param for a ' + type + ' order')\n .exchange(this.id);\n }\n }\n else {\n // check for delta price as well\n if (trailingDelta === undefined && stopPrice === undefined) {\n throw new InvalidParamsError('It requires a stopPrice or trailingDelta param for a ' + type + ' order')\n .exchange(this.id);\n }\n }\n if (stopPrice !== undefined) {\n request['stopPrice'] = this.priceToPrecision(symbol, stopPrice);\n }\n }\n if (timeInForceIsRequired && (this.safeString(params, 'timeInForce') === undefined)) {\n request['timeInForce'] = this.options['defaultTimeInForce']; // 'GTC' = Good To Cancel (default), 'IOC' = Immediate Or Cancel\n }\n if (!isPortfolioMargin && market['contract'] && postOnly) {\n request['timeInForce'] = 'GTX';\n }\n // remove timeInForce from params because PO is only used by this.isPostOnly and it's not a valid value for Binance\n if (this.safeString(params, 'timeInForce') === 'PO') {\n params = this.omit(params, 'timeInForce');\n }\n const requestParams = this.omit(params, ['type', 'newClientOrderId', 'clientOrderId', 'postOnly', 'stopLossPrice', 'takeProfitPrice', 'stopPrice', 'triggerPrice', 'trailingTriggerPrice', 'trailingPercent', 'quoteOrderQty', 'cost', 'test']);\n return this.extend(request, requestParams);\n }\n async createMarketOrderWithCost(symbol, side, cost, params = {}) {\n /**\n * @method\n * @name binance#createMarketOrderWithCost\n * @description create a market order by providing the symbol, side and cost\n * @see https://binance-docs.github.io/apidocs/spot/en/#new-order-trade\n * @param {string} symbol unified symbol of the market to create an order in\n * @param {string} side 'buy' or 'sell'\n * @param {float} cost how much you want to trade in units of the quote currency\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n await this.loadMarkets();\n const market = this.market(symbol);\n if (!market['spot']) {\n throw new MarketTypeNotSupportedError(market['type'])\n .addMessage('It supports spot orders only')\n .exchange(this.id);\n }\n params['quoteOrderQty'] = cost;\n return await this.createOrder(symbol, 'market', side, cost, undefined, params);\n }\n async createMarketBuyOrderWithCost(symbol, cost, params = {}) {\n /**\n * @method\n * @name binance#createMarketBuyOrderWithCost\n * @description create a market buy order by providing the symbol and cost\n * @see https://binance-docs.github.io/apidocs/spot/en/#new-order-trade\n * @param {string} symbol unified symbol of the market to create an order in\n * @param {float} cost how much you want to trade in units of the quote currency\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n await this.loadMarkets();\n const market = this.market(symbol);\n if (!market['spot']) {\n throw new MarketTypeNotSupportedError(market['type'])\n .addMessage('It supports spot orders only')\n .exchange(this.id);\n }\n params['quoteOrderQty'] = cost;\n return await this.createOrder(symbol, 'market', 'buy', cost, undefined, params);\n }\n async createMarketSellOrderWithCost(symbol, cost, params = {}) {\n /**\n * @method\n * @name binance#createMarketSellOrderWithCost\n * @description create a market sell order by providing the symbol and cost\n * @see https://binance-docs.github.io/apidocs/spot/en/#new-order-trade\n * @param {string} symbol unified symbol of the market to create an order in\n * @param {float} cost how much you want to trade in units of the quote currency\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n await this.loadMarkets();\n const market = this.market(symbol);\n if (!market['spot']) {\n throw new MarketTypeNotSupportedError(market['type'])\n .addMessage('It supports spot orders only')\n .exchange(this.id);\n }\n params['quoteOrderQty'] = cost;\n return await this.createOrder(symbol, 'market', 'sell', cost, undefined, params);\n }\n async fetchOrder(id, symbol = undefined, params = {}) {\n /**\n * @method\n * @name binance#fetchOrder\n * @description fetches information on an order made by the user\n * @see https://binance-docs.github.io/apidocs/spot/en/#query-order-user_data\n * @see https://binance-docs.github.io/apidocs/futures/en/#query-order-user_data\n * @see https://binance-docs.github.io/apidocs/delivery/en/#query-order-user_data\n * @see https://binance-docs.github.io/apidocs/voptions/en/#query-single-order-trade\n * @see https://binance-docs.github.io/apidocs/spot/en/#query-margin-account-39-s-order-user_data\n * @see https://binance-docs.github.io/apidocs/pm/en/#query-um-order-user_data\n * @see https://binance-docs.github.io/apidocs/pm/en/#query-cm-order-user_data\n * @see https://binance-docs.github.io/apidocs/pm/en/#query-margin-account-order-user_data\n * @param {string} id the order id\n * @param {string} symbol unified symbol of the market the order was made in\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {string} [params.marginMode] 'cross' or 'isolated', for spot margin trading\n * @param {boolean} [params.portfolioMargin] set to true if you would like to fetch an order in a portfolio margin account\n * @returns {object} An [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n if (symbol === undefined) {\n throw new InvalidParamsError('fetchOrder() requires a symbol argument').exchange(this.id);\n }\n await this.loadMarkets();\n const market = this.market(symbol);\n const defaultType = this.safeString2(this.options, 'fetchOrder', 'defaultType', 'spot');\n const type = this.safeString(params, 'type', defaultType);\n let marginMode = undefined;\n [marginMode, params] = this.handleMarginModeAndParams('fetchOrder', params);\n let isPortfolioMargin = undefined;\n [isPortfolioMargin, params] = this.handleOptionAndParams2(params, 'fetchOrder', 'papi', 'portfolioMargin', false);\n const request = {\n 'symbol': market['id'],\n };\n const clientOrderId = this.safeString2(params, 'origClientOrderId', 'clientOrderId');\n if (clientOrderId !== undefined) {\n if (market['option']) {\n request['clientOrderId'] = clientOrderId;\n }\n else {\n request['origClientOrderId'] = clientOrderId;\n }\n }\n else {\n request['orderId'] = id;\n }\n params = this.omit(params, ['type', 'clientOrderId', 'origClientOrderId']);\n let response = undefined;\n if (market['option']) {\n response = await this.eapiPrivateGetOrder(this.extend(request, params));\n }\n else if (market['linear']) {\n if (isPortfolioMargin) {\n response = await this.papiGetUmOrder(this.extend(request, params));\n }\n else {\n response = await this.fapiPrivateGetOrder(this.extend(request, params));\n }\n }\n else if (market['inverse']) {\n if (isPortfolioMargin) {\n response = await this.papiGetCmOrder(this.extend(request, params));\n }\n else {\n response = await this.dapiPrivateGetOrder(this.extend(request, params));\n }\n }\n else if ((type === 'margin') || (marginMode !== undefined) || isPortfolioMargin) {\n if (isPortfolioMargin) {\n response = await this.papiGetMarginOrder(this.extend(request, params));\n }\n else {\n if (marginMode === 'isolated') {\n request['isIsolated'] = true;\n }\n response = await this.sapiGetMarginOrder(this.extend(request, params));\n }\n }\n else {\n response = await this.privateGetOrder(this.extend(request, params));\n }\n return this.parseOrder(response, market);\n }\n async fetchOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name binance#fetchOrders\n * @description fetches information on multiple orders made by the user\n * @see https://binance-docs.github.io/apidocs/spot/en/#all-orders-user_data\n * @see https://binance-docs.github.io/apidocs/futures/en/#all-orders-user_data\n * @see https://binance-docs.github.io/apidocs/delivery/en/#all-orders-user_data\n * @see https://binance-docs.github.io/apidocs/voptions/en/#query-option-order-history-trade\n * @see https://binance-docs.github.io/apidocs/spot/en/#query-margin-account-39-s-all-orders-user_data\n * @see https://binance-docs.github.io/apidocs/pm/en/#query-all-um-orders-user_data\n * @see https://binance-docs.github.io/apidocs/pm/en/#query-all-cm-orders-user_data\n * @see https://binance-docs.github.io/apidocs/pm/en/#query-all-um-conditional-orders-user_data\n * @see https://binance-docs.github.io/apidocs/pm/en/#query-all-cm-conditional-orders-user_data\n * @see https://binance-docs.github.io/apidocs/pm/en/#query-all-margin-account-orders-user_data\n * @param {string} symbol unified market symbol of the market orders were made in\n * @param {int} [since] the earliest time in ms to fetch orders for\n * @param {int} [limit] the maximum number of order structures to retrieve\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {string} [params.marginMode] 'cross' or 'isolated', for spot margin trading\n * @param {int} [params.until] the latest time in ms to fetch orders for\n * @param {boolean} [params.paginate] default false, when true will automatically paginate by calling this endpoint multiple times. See in the docs all the [available parameters](https://github.com/ccxt/ccxt/wiki/Manual#pagination-params)\n * @param {boolean} [params.portfolioMargin] set to true if you would like to fetch orders in a portfolio margin account\n * @param {boolean} [params.stop] set to true if you would like to fetch portfolio margin account stop or conditional orders\n * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n if (symbol === undefined) {\n throw new InvalidParamsError('fetchOrders() requires a symbol argument').exchange(this.id);\n }\n await this.loadMarkets();\n let paginate = false;\n [paginate, params] = this.handleOptionAndParams(params, 'fetchOrders', 'paginate');\n if (paginate) {\n return await this.fetchPaginatedCallDynamic('fetchOrders', symbol, since, limit, params);\n }\n const market = this.market(symbol);\n const defaultType = this.safeString2(this.options, 'fetchOrders', 'defaultType', market['type']);\n const type = this.safeString(params, 'type', defaultType);\n let marginMode = undefined;\n [marginMode, params] = this.handleMarginModeAndParams('fetchOrders', params);\n let isPortfolioMargin = undefined;\n [isPortfolioMargin, params] = this.handleOptionAndParams2(params, 'fetchOrders', 'papi', 'portfolioMargin', false);\n const isConditional = this.safeBool2(params, 'stop', 'conditional');\n params = this.omit(params, ['stop', 'conditional', 'type']);\n let request = {\n 'symbol': market['id'],\n };\n [request, params] = this.handleUntilOption('endTime', request, params);\n if (since !== undefined) {\n request['startTime'] = since;\n }\n if (limit !== undefined) {\n request['limit'] = limit;\n }\n let response = undefined;\n if (market['option']) {\n response = await this.eapiPrivateGetHistoryOrders(this.extend(request, params));\n }\n else if (market['linear']) {\n if (isPortfolioMargin) {\n if (isConditional) {\n response = await this.papiGetUmConditionalAllOrders(this.extend(request, params));\n }\n else {\n response = await this.papiGetUmAllOrders(this.extend(request, params));\n }\n }\n else {\n response = await this.fapiPrivateGetAllOrders(this.extend(request, params));\n }\n }\n else if (market['inverse']) {\n if (isPortfolioMargin) {\n if (isConditional) {\n response = await this.papiGetCmConditionalAllOrders(this.extend(request, params));\n }\n else {\n response = await this.papiGetCmAllOrders(this.extend(request, params));\n }\n }\n else {\n response = await this.dapiPrivateGetAllOrders(this.extend(request, params));\n }\n }\n else {\n if (isPortfolioMargin) {\n response = await this.papiGetMarginAllOrders(this.extend(request, params));\n }\n else if (type === 'margin' || marginMode !== undefined) {\n if (marginMode === 'isolated') {\n request['isIsolated'] = true;\n }\n response = await this.sapiGetMarginAllOrders(this.extend(request, params));\n }\n else {\n response = await this.privateGetAllOrders(this.extend(request, params));\n }\n }\n //\n // spot\n //\n // [\n // {\n // \"symbol\": \"LTCBTC\",\n // \"orderId\": 1,\n // \"clientOrderId\": \"myOrder1\",\n // \"price\": \"0.1\",\n // \"origQty\": \"1.0\",\n // \"executedQty\": \"0.0\",\n // \"cummulativeQuoteQty\": \"0.0\",\n // \"status\": \"NEW\",\n // \"timeInForce\": \"GTC\",\n // \"type\": \"LIMIT\",\n // \"side\": \"BUY\",\n // \"stopPrice\": \"0.0\",\n // \"icebergQty\": \"0.0\",\n // \"time\": 1499827319559,\n // \"updateTime\": 1499827319559,\n // \"isWorking\": true\n // }\n // ]\n //\n // futures\n //\n // [\n // {\n // \"symbol\": \"BTCUSDT\",\n // \"orderId\": 1,\n // \"clientOrderId\": \"myOrder1\",\n // \"price\": \"0.1\",\n // \"origQty\": \"1.0\",\n // \"executedQty\": \"1.0\",\n // \"cumQuote\": \"10.0\",\n // \"status\": \"NEW\",\n // \"timeInForce\": \"GTC\",\n // \"type\": \"LIMIT\",\n // \"side\": \"BUY\",\n // \"stopPrice\": \"0.0\",\n // \"updateTime\": 1499827319559\n // }\n // ]\n //\n // options\n //\n // [\n // {\n // \"orderId\": 4728833085436977152,\n // \"symbol\": \"ETH-230211-1500-C\",\n // \"price\": \"10.0\",\n // \"quantity\": \"1.00\",\n // \"executedQty\": \"0.00\",\n // \"fee\": \"0\",\n // \"side\": \"BUY\",\n // \"type\": \"LIMIT\",\n // \"timeInForce\": \"GTC\",\n // \"reduceOnly\": false,\n // \"postOnly\": false,\n // \"createTime\": 1676083034462,\n // \"updateTime\": 1676083034462,\n // \"status\": \"ACCEPTED\",\n // \"avgPrice\": \"0\",\n // \"source\": \"API\",\n // \"clientOrderId\": \"\",\n // \"priceScale\": 1,\n // \"quantityScale\": 2,\n // \"optionSide\": \"CALL\",\n // \"quoteAsset\": \"USDT\",\n // \"lastTrade\": {\"id\":\"69\",\"time\":\"1676084430567\",\"price\":\"24.9\",\"qty\":\"1.00\"},\n // \"mmp\": false\n // }\n // ]\n //\n // inverse portfolio margin\n //\n // [\n // {\n // \"orderId\": 71328442983,\n // \"symbol\": \"ETHUSD_PERP\",\n // \"pair\": \"ETHUSD\",\n // \"status\": \"CANCELED\",\n // \"clientOrderId\": \"x-xcKtGhcu4b3e3d8515dd4dc5ba9ccc\",\n // \"price\": \"2000\",\n // \"avgPrice\": \"0.00\",\n // \"origQty\": \"1\",\n // \"executedQty\": \"0\",\n // \"cumBase\": \"0\",\n // \"timeInForce\": \"GTC\",\n // \"type\": \"LIMIT\",\n // \"reduceOnly\": false,\n // \"side\": \"BUY\",\n // \"origType\": \"LIMIT\",\n // \"time\": 1707197843046,\n // \"updateTime\": 1707197941373,\n // \"positionSide\": \"BOTH\"\n // },\n // ]\n //\n // linear portfolio margin\n //\n // [\n // {\n // \"orderId\": 259235347005,\n // \"symbol\": \"BTCUSDT\",\n // \"status\": \"CANCELED\",\n // \"clientOrderId\": \"x-xcKtGhcu402881c9103f42bdb4183b\",\n // \"price\": \"35000\",\n // \"avgPrice\": \"0.00000\",\n // \"origQty\": \"0.010\",\n // \"executedQty\": \"0\",\n // \"cumQuote\": \"0\",\n // \"timeInForce\": \"GTC\",\n // \"type\": \"LIMIT\",\n // \"reduceOnly\": false,\n // \"side\": \"BUY\",\n // \"origType\": \"LIMIT\",\n // \"time\": 1707194702167,\n // \"updateTime\": 1707197804748,\n // \"positionSide\": \"BOTH\",\n // \"selfTradePreventionMode\": \"NONE\",\n // \"goodTillDate\": 0\n // },\n // ]\n //\n // conditional portfolio margin\n //\n // [\n // {\n // \"newClientStrategyId\": \"x-xcKtGhcuaf166172ed504cd1bc0396\",\n // \"strategyId\": 3733211,\n // \"strategyStatus\": \"CANCELLED\",\n // \"strategyType\": \"STOP\",\n // \"origQty\": \"0.010\",\n // \"price\": \"35000\",\n // \"orderId\": 0,\n // \"reduceOnly\": false,\n // \"side\": \"BUY\",\n // \"positionSide\": \"BOTH\",\n // \"stopPrice\": \"50000\",\n // \"symbol\": \"BTCUSDT\",\n // \"type\": \"LIMIT\",\n // \"bookTime\": 1707270098774,\n // \"updateTime\": 1707270119261,\n // \"timeInForce\": \"GTC\",\n // \"triggerTime\": 0,\n // \"workingType\": \"CONTRACT_PRICE\",\n // \"priceProtect\": false,\n // \"goodTillDate\": 0,\n // \"selfTradePreventionMode\": \"NONE\"\n // },\n // ]\n //\n // spot margin portfolio margin\n //\n // [\n // {\n // \"symbol\": \"BTCUSDT\",\n // \"orderId\": 24684460474,\n // \"clientOrderId\": \"x-R4BD3S82e9ef29d8346440f0b28b86\",\n // \"price\": \"35000.00000000\",\n // \"origQty\": \"0.00100000\",\n // \"executedQty\": \"0.00000000\",\n // \"cummulativeQuoteQty\": \"0.00000000\",\n // \"status\": \"CANCELED\",\n // \"timeInForce\": \"GTC\",\n // \"type\": \"LIMIT\",\n // \"side\": \"BUY\",\n // \"stopPrice\": \"0.00000000\",\n // \"icebergQty\": \"0.00000000\",\n // \"time\": 1707113538870,\n // \"updateTime\": 1707113797688,\n // \"isWorking\": true,\n // \"accountId\": 200180970,\n // \"selfTradePreventionMode\": \"EXPIRE_MAKER\",\n // \"preventedMatchId\": null,\n // \"preventedQuantity\": null\n // },\n // ]\n //\n return this.parseOrders(response, market, since, limit);\n }\n async fetchOpenOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name binance#fetchOpenOrders\n * @description fetch all unfilled currently open orders\n * @see https://binance-docs.github.io/apidocs/spot/en/#cancel-an-existing-order-and-send-a-new-order-trade\n * @see https://binance-docs.github.io/apidocs/futures/en/#current-all-open-orders-user_data\n * @see https://binance-docs.github.io/apidocs/delivery/en/#current-all-open-orders-user_data\n * @see https://binance-docs.github.io/apidocs/voptions/en/#query-current-open-option-orders-user_data\n * @see https://binance-docs.github.io/apidocs/spot/en/#current-open-orders-user_data\n * @see https://binance-docs.github.io/apidocs/futures/en/#current-all-open-orders-user_data\n * @see https://binance-docs.github.io/apidocs/delivery/en/#current-all-open-orders-user_data\n * @see https://binance-docs.github.io/apidocs/voptions/en/#query-current-open-option-orders-user_data\n * @see https://binance-docs.github.io/apidocs/spot/en/#query-margin-account-39-s-open-orders-user_data\n * @see https://binance-docs.github.io/apidocs/pm/en/#query-all-current-um-open-orders-user_data\n * @see https://binance-docs.github.io/apidocs/pm/en/#query-all-current-cm-open-orders-user_data\n * @see https://binance-docs.github.io/apidocs/pm/en/#query-all-current-um-open-conditional-orders-user_data\n * @see https://binance-docs.github.io/apidocs/pm/en/#query-all-current-cm-open-conditional-orders-user_data\n * @see https://binance-docs.github.io/apidocs/pm/en/#query-current-margin-open-order-user_data\n * @param {string} symbol unified market symbol\n * @param {int} [since] the earliest time in ms to fetch open orders for\n * @param {int} [limit] the maximum number of open orders structures to retrieve\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {string} [params.marginMode] 'cross' or 'isolated', for spot margin trading\n * @param {boolean} [params.portfolioMargin] set to true if you would like to fetch open orders in the portfolio margin account\n * @param {boolean} [params.stop] set to true if you would like to fetch portfolio margin account conditional orders\n * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n await this.loadMarkets();\n let market = undefined;\n let type = undefined;\n const request = {};\n let marginMode = undefined;\n [marginMode, params] = this.handleMarginModeAndParams('fetchOpenOrders', params);\n let isPortfolioMargin = undefined;\n [isPortfolioMargin, params] = this.handleOptionAndParams2(params, 'fetchOpenOrders', 'papi', 'portfolioMargin', false);\n const isConditional = this.safeBool2(params, 'stop', 'conditional');\n if (symbol !== undefined) {\n market = this.market(symbol);\n request['symbol'] = market['id'];\n const defaultType = this.safeString2(this.options, 'fetchOpenOrders', 'defaultType', 'spot');\n const marketType = ('type' in market) ? market['type'] : defaultType;\n type = this.safeString(params, 'type', marketType);\n }\n else if (this.options['warnOnFetchOpenOrdersWithoutSymbol']) {\n const symbols = this.symbols;\n const numSymbols = symbols.length;\n const fetchOpenOrdersRateLimit = this.parseToInt(numSymbols / 2);\n throw new ExchangeError()\n .overwriteMessage('fetchOpenOrders() WARNING: fetching open orders without specifying a symbol is rate-limited to one call per ' + fetchOpenOrdersRateLimit.toString() + ' seconds. Do not call this method frequently to avoid ban. Set ' + this.id + '.options[\"warnOnFetchOpenOrdersWithoutSymbol\"] = false to suppress this warning message.')\n .exchange(this.id);\n }\n else {\n const defaultType = this.safeString2(this.options, 'fetchOpenOrders', 'defaultType', 'spot');\n type = this.safeString(params, 'type', defaultType);\n }\n let subType = undefined;\n [subType, params] = this.handleSubTypeAndParams('fetchOpenOrders', market, params);\n params = this.omit(params, ['type', 'stop', 'conditional']);\n let response = undefined;\n if (type === 'option') {\n if (since !== undefined) {\n request['startTime'] = since;\n }\n if (limit !== undefined) {\n request['limit'] = limit;\n }\n response = await this.eapiPrivateGetOpenOrders(this.extend(request, params));\n }\n else if (this.isLinear(type, subType)) {\n if (isPortfolioMargin) {\n if (isConditional) {\n response = await this.papiGetUmConditionalOpenOrders(this.extend(request, params));\n }\n else {\n response = await this.papiGetUmOpenOrders(this.extend(request, params));\n }\n }\n else {\n response = await this.fapiPrivateGetOpenOrders(this.extend(request, params));\n }\n }\n else if (this.isInverse(type, subType)) {\n if (isPortfolioMargin) {\n if (isConditional) {\n response = await this.papiGetCmConditionalOpenOrders(this.extend(request, params));\n }\n else {\n response = await this.papiGetCmOpenOrders(this.extend(request, params));\n }\n }\n else {\n response = await this.dapiPrivateGetOpenOrders(this.extend(request, params));\n }\n }\n else if (type === 'margin' || marginMode !== undefined) {\n if (isPortfolioMargin) {\n response = await this.papiGetMarginOpenOrders(this.extend(request, params));\n }\n else {\n if (marginMode === 'isolated') {\n request['isIsolated'] = true;\n if (symbol === undefined) {\n throw new InvalidParamsError('fetchOpenOrders() requires a symbol argument for isolated markets')\n .exchange(this.id);\n }\n }\n response = await this.sapiGetMarginOpenOrders(this.extend(request, params));\n }\n }\n else {\n response = await this.privateGetOpenOrders(this.extend(request, params));\n }\n return this.parseOrders(response, market, since, limit);\n }\n async fetchClosedOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name binance#fetchClosedOrders\n * @description fetches information on multiple closed orders made by the user\n * @see https://binance-docs.github.io/apidocs/spot/en/#all-orders-user_data\n * @see https://binance-docs.github.io/apidocs/futures/en/#all-orders-user_data\n * @see https://binance-docs.github.io/apidocs/delivery/en/#all-orders-user_data\n * @see https://binance-docs.github.io/apidocs/voptions/en/#query-option-order-history-trade\n * @see https://binance-docs.github.io/apidocs/spot/en/#query-margin-account-39-s-all-orders-user_data\n * @see https://binance-docs.github.io/apidocs/pm/en/#query-all-um-orders-user_data\n * @see https://binance-docs.github.io/apidocs/pm/en/#query-all-cm-orders-user_data\n * @see https://binance-docs.github.io/apidocs/pm/en/#query-all-um-conditional-orders-user_data\n * @see https://binance-docs.github.io/apidocs/pm/en/#query-all-cm-conditional-orders-user_data\n * @see https://binance-docs.github.io/apidocs/pm/en/#query-all-margin-account-orders-user_data\n * @param {string} symbol unified market symbol of the market orders were made in\n * @param {int} [since] the earliest time in ms to fetch orders for\n * @param {int} [limit] the maximum number of order structures to retrieve\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {boolean} [params.paginate] default false, when true will automatically paginate by calling this endpoint multiple times. See in the docs all the [available parameters](https://github.com/ccxt/ccxt/wiki/Manual#pagination-params)\n * @param {boolean} [params.portfolioMargin] set to true if you would like to fetch orders in a portfolio margin account\n * @param {boolean} [params.stop] set to true if you would like to fetch portfolio margin account stop or conditional orders\n * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n if (symbol === undefined) {\n throw new InvalidParamsError('fetchClosedOrders() requires a symbol argument').exchange(this.id);\n }\n const orders = await this.fetchOrders(symbol, since, undefined, params);\n const filteredOrders = this.filterBy(orders, 'status', 'closed');\n return this.filterBySinceLimit(filteredOrders, since, limit);\n }\n async fetchCanceledOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name binance#fetchCanceledOrders\n * @description fetches information on multiple canceled orders made by the user\n * @see https://binance-docs.github.io/apidocs/spot/en/#all-orders-user_data\n * @see https://binance-docs.github.io/apidocs/spot/en/#query-margin-account-39-s-all-orders-user_data\n * @see https://binance-docs.github.io/apidocs/voptions/en/#query-option-order-history-trade\n * @see https://binance-docs.github.io/apidocs/pm/en/#query-all-um-orders-user_data\n * @see https://binance-docs.github.io/apidocs/pm/en/#query-all-cm-orders-user_data\n * @see https://binance-docs.github.io/apidocs/pm/en/#query-all-um-conditional-orders-user_data\n * @see https://binance-docs.github.io/apidocs/pm/en/#query-all-cm-conditional-orders-user_data\n * @see https://binance-docs.github.io/apidocs/pm/en/#query-all-margin-account-orders-user_data\n * @param {string} symbol unified market symbol of the market the orders were made in\n * @param {int} [since] the earliest time in ms to fetch orders for\n * @param {int} [limit] the maximum number of order structures to retrieve\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {boolean} [params.paginate] default false, when true will automatically paginate by calling this endpoint multiple times. See in the docs all the [available parameters](https://github.com/ccxt/ccxt/wiki/Manual#pagination-params)\n * @param {boolean} [params.portfolioMargin] set to true if you would like to fetch orders in a portfolio margin account\n * @param {boolean} [params.stop] set to true if you would like to fetch portfolio margin account stop or conditional orders\n * @returns {object[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n if (symbol === undefined) {\n throw new InvalidParamsError('fetchCanceledOrders() requires a symbol argument').exchange(this.id);\n }\n const orders = await this.fetchOrders(symbol, since, undefined, params);\n const filteredOrders = this.filterBy(orders, 'status', 'canceled');\n return this.filterBySinceLimit(filteredOrders, since, limit);\n }\n async cancelOrder(id, symbol = undefined, params = {}) {\n /**\n * @method\n * @name binance#cancelOrder\n * @description cancels an open order\n * @see https://binance-docs.github.io/apidocs/spot/en/#cancel-order-trade\n * @see https://binance-docs.github.io/apidocs/futures/en/#cancel-order-trade\n * @see https://binance-docs.github.io/apidocs/delivery/en/#cancel-order-trade\n * @see https://binance-docs.github.io/apidocs/voptions/en/#cancel-option-order-trade\n * @see https://binance-docs.github.io/apidocs/spot/en/#margin-account-cancel-order-trade\n * @see https://binance-docs.github.io/apidocs/pm/en/#cancel-um-order-trade\n * @see https://binance-docs.github.io/apidocs/pm/en/#cancel-cm-order-trade\n * @see https://binance-docs.github.io/apidocs/pm/en/#cancel-um-conditional-order-trade\n * @see https://binance-docs.github.io/apidocs/pm/en/#cancel-cm-conditional-order-trade\n * @see https://binance-docs.github.io/apidocs/pm/en/#cancel-margin-account-order-trade\n * @param {string} id order id\n * @param {string} symbol unified symbol of the market the order was made in\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {boolean} [params.portfolioMargin] set to true if you would like to cancel an order in a portfolio margin account\n * @param {boolean} [params.stop] set to true if you would like to cancel a portfolio margin account conditional order\n * @returns {object} An [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n if (symbol === undefined) {\n throw new InvalidParamsError('cancelOrder() requires a symbol argument').exchange(this.id);\n }\n await this.loadMarkets();\n const market = this.market(symbol);\n const defaultType = this.safeString2(this.options, 'cancelOrder', 'defaultType', 'spot');\n const type = this.safeString(params, 'type', defaultType);\n let marginMode = undefined;\n [marginMode, params] = this.handleMarginModeAndParams('cancelOrder', params);\n let isPortfolioMargin = undefined;\n [isPortfolioMargin, params] = this.handleOptionAndParams2(params, 'cancelOrder', 'papi', 'portfolioMargin', false);\n const isConditional = this.safeBool2(params, 'stop', 'conditional');\n const request = {\n 'symbol': market['id'],\n };\n const clientOrderId = this.safeStringN(params, ['origClientOrderId', 'clientOrderId', 'newClientStrategyId']);\n if (clientOrderId !== undefined) {\n if (market['option']) {\n request['clientOrderId'] = clientOrderId;\n }\n else {\n if (isPortfolioMargin && isConditional) {\n request['newClientStrategyId'] = clientOrderId;\n }\n else {\n request['origClientOrderId'] = clientOrderId;\n }\n }\n }\n else {\n if (isPortfolioMargin && isConditional) {\n request['strategyId'] = id;\n }\n else {\n request['orderId'] = id;\n }\n }\n params = this.omit(params, ['type', 'origClientOrderId', 'clientOrderId', 'newClientStrategyId', 'stop', 'conditional']);\n let response = undefined;\n if (market['option']) {\n response = await this.eapiPrivateDeleteOrder(this.extend(request, params));\n }\n else if (market['linear']) {\n if (isPortfolioMargin) {\n if (isConditional) {\n response = await this.papiDeleteUmConditionalOrder(this.extend(request, params));\n }\n else {\n response = await this.papiDeleteUmOrder(this.extend(request, params));\n }\n }\n else {\n response = await this.fapiPrivateDeleteOrder(this.extend(request, params));\n }\n }\n else if (market['inverse']) {\n if (isPortfolioMargin) {\n if (isConditional) {\n response = await this.papiDeleteCmConditionalOrder(this.extend(request, params));\n }\n else {\n response = await this.papiDeleteCmOrder(this.extend(request, params));\n }\n }\n else {\n response = await this.dapiPrivateDeleteOrder(this.extend(request, params));\n }\n }\n else if ((type === 'margin') || (marginMode !== undefined) || isPortfolioMargin) {\n if (isPortfolioMargin) {\n response = await this.papiDeleteMarginOrder(this.extend(request, params));\n }\n else {\n if (marginMode === 'isolated') {\n request['isIsolated'] = true;\n }\n response = await this.sapiDeleteMarginOrder(this.extend(request, params));\n }\n }\n else {\n response = await this.privateDeleteOrder(this.extend(request, params));\n }\n return this.parseOrder(response, market);\n }\n async cancelAllOrders(symbol = undefined, params = {}) {\n /**\n * @method\n * @name binance#cancelAllOrders\n * @description cancel all open orders in a market\n * @see https://binance-docs.github.io/apidocs/spot/en/#cancel-all-open-orders-on-a-symbol-trade\n * @see https://binance-docs.github.io/apidocs/futures/en/#cancel-all-open-orders-trade\n * @see https://binance-docs.github.io/apidocs/delivery/en/#cancel-all-open-orders-trade\n * @see https://binance-docs.github.io/apidocs/voptions/en/#cancel-all-option-orders-on-specific-symbol-trade\n * @see https://binance-docs.github.io/apidocs/spot/en/#margin-account-cancel-order-trade\n * @see https://binance-docs.github.io/apidocs/pm/en/#cancel-all-um-open-orders-trade\n * @see https://binance-docs.github.io/apidocs/pm/en/#cancel-all-cm-open-orders-trade\n * @see https://binance-docs.github.io/apidocs/pm/en/#cancel-all-um-open-conditional-orders-trade\n * @see https://binance-docs.github.io/apidocs/pm/en/#cancel-all-cm-open-conditional-orders-trade\n * @see https://binance-docs.github.io/apidocs/pm/en/#cancel-margin-account-all-open-orders-on-a-symbol-trade\n * @param {string} symbol unified market symbol of the market to cancel orders in\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {string} [params.marginMode] 'cross' or 'isolated', for spot margin trading\n * @param {boolean} [params.portfolioMargin] set to true if you would like to cancel orders in a portfolio margin account\n * @param {boolean} [params.stop] set to true if you would like to cancel portfolio margin account conditional orders\n * @returns {object[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n if (symbol === undefined) {\n throw new InvalidParamsError('cancelAllOrders() requires a symbol argument').exchange(this.id);\n }\n await this.loadMarkets();\n const market = this.market(symbol);\n const request = {\n 'symbol': market['id'],\n };\n let isPortfolioMargin = undefined;\n [isPortfolioMargin, params] = this.handleOptionAndParams2(params, 'cancelAllOrders', 'papi', 'portfolioMargin', false);\n const isConditional = this.safeBool2(params, 'stop', 'conditional');\n const type = this.safeString(params, 'type', market['type']);\n params = this.omit(params, ['type', 'stop', 'conditional']);\n let marginMode = undefined;\n [marginMode, params] = this.handleMarginModeAndParams('cancelAllOrders', params);\n let response = undefined;\n if (market['option']) {\n response = await this.eapiPrivateDeleteAllOpenOrders(this.extend(request, params));\n }\n else if (market['linear']) {\n if (isPortfolioMargin) {\n if (isConditional) {\n response = await this.papiDeleteUmConditionalAllOpenOrders(this.extend(request, params));\n }\n else {\n response = await this.papiDeleteUmAllOpenOrders(this.extend(request, params));\n }\n }\n else {\n response = await this.fapiPrivateDeleteAllOpenOrders(this.extend(request, params));\n }\n }\n else if (market['inverse']) {\n if (isPortfolioMargin) {\n if (isConditional) {\n response = await this.papiDeleteCmConditionalAllOpenOrders(this.extend(request, params));\n }\n else {\n response = await this.papiDeleteCmAllOpenOrders(this.extend(request, params));\n }\n }\n else {\n response = await this.dapiPrivateDeleteAllOpenOrders(this.extend(request, params));\n }\n }\n else if ((type === 'margin') || (marginMode !== undefined)) {\n if (isPortfolioMargin) {\n response = await this.papiDeleteMarginAllOpenOrders(this.extend(request, params));\n }\n else {\n if (marginMode === 'isolated') {\n request['isIsolated'] = true;\n }\n response = await this.sapiDeleteMarginOpenOrders(this.extend(request, params));\n }\n }\n else {\n response = await this.privateDeleteOpenOrders(this.extend(request, params));\n }\n if (Array.isArray(response)) {\n return this.parseOrders(response, market);\n }\n else {\n return response;\n }\n }\n async cancelOrders(ids, symbol = undefined, params = {}) {\n /**\n * @method\n * @name binance#cancelOrders\n * @description cancel multiple orders\n * @see https://binance-docs.github.io/apidocs/futures/en/#cancel-multiple-orders-trade\n * @see https://binance-docs.github.io/apidocs/delivery/en/#cancel-multiple-orders-trade\n * @param {string[]} ids order ids\n * @param {string} [symbol] unified market symbol\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n *\n * EXCHANGE SPECIFIC PARAMETERS\n * @param {string[]} [params.origClientOrderIdList] max length 10 e.g. [\"my_id_1\",\"my_id_2\"], encode the double quotes. No space after comma\n * @param {int[]} [params.recvWindow]\n * @returns {object} an list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n if (symbol === undefined) {\n throw new InvalidParamsError('cancelOrders() requires a symbol argument').exchange(this.id);\n }\n await this.loadMarkets();\n const market = this.market(symbol);\n if (!market['contract']) {\n throw new MarketTypeNotSupportedError(market['type'])\n .addMessage('cancelOrders is only supported for swap markets.')\n .exchange(this.id);\n }\n const request = {\n 'symbol': market['id'],\n 'orderidlist': ids,\n };\n let response = undefined;\n if (market['linear']) {\n response = await this.fapiPrivateDeleteBatchOrders(this.extend(request, params));\n }\n else if (market['inverse']) {\n response = await this.dapiPrivateDeleteBatchOrders(this.extend(request, params));\n }\n //\n // [\n // {\n // \"clientOrderId\": \"myOrder1\",\n // \"cumQty\": \"0\",\n // \"cumQuote\": \"0\",\n // \"executedQty\": \"0\",\n // \"orderId\": 283194212,\n // \"origQty\": \"11\",\n // \"origType\": \"TRAILING_STOP_MARKET\",\n // \"price\": \"0\",\n // \"reduceOnly\": false,\n // \"side\": \"BUY\",\n // \"positionSide\": \"SHORT\",\n // \"status\": \"CANCELED\",\n // \"stopPrice\": \"9300\", // please ignore when order type is TRAILING_STOP_MARKET\n // \"closePosition\": false, // if Close-All\n // \"symbol\": \"BTCUSDT\",\n // \"timeInForce\": \"GTC\",\n // \"type\": \"TRAILING_STOP_MARKET\",\n // \"activatePrice\": \"9020\", // activation price, only return with TRAILING_STOP_MARKET order\n // \"priceRate\": \"0.3\", // callback rate, only return with TRAILING_STOP_MARKET order\n // \"updateTime\": 1571110484038,\n // \"workingType\": \"CONTRACT_PRICE\",\n // \"priceProtect\": false, // if conditional order trigger is protected\n // \"priceMatch\": \"NONE\", // price match mode\n // \"selfTradePreventionMode\": \"NONE\", // self trading preventation mode\n // \"goodTillDate\": 0 // order pre-set auot cancel time for TIF GTD order\n // },\n // {\n // \"code\": -2011,\n // \"msg\": \"Unknown order sent.\"\n // }\n // ]\n //\n return this.parseOrders(response, market);\n }\n async fetchOrderTrades(id, symbol = undefined, since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name binance#fetchOrderTrades\n * @description fetch all the trades made from a single order\n * @see https://binance-docs.github.io/apidocs/spot/en/#account-trade-list-user_data\n * @see https://binance-docs.github.io/apidocs/futures/en/#account-trade-list-user_data\n * @see https://binance-docs.github.io/apidocs/delivery/en/#account-trade-list-user_data\n * @see https://binance-docs.github.io/apidocs/spot/en/#query-margin-account-39-s-trade-list-user_data\n * @param {string} id order id\n * @param {string} symbol unified market symbol\n * @param {int} [since] the earliest time in ms to fetch trades for\n * @param {int} [limit] the maximum number of trades to retrieve\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=trade-structure}\n */\n if (symbol === undefined) {\n throw new InvalidParamsError('fetchOrderTrades() requires a symbol argument').exchange(this.id);\n }\n await this.loadMarkets();\n const market = this.market(symbol);\n const type = this.safeString(params, 'type', market['type']);\n params = this.omit(params, 'type');\n if (type !== 'spot') {\n throw new MarketTypeNotSupportedError(type)\n .addMessage('It supports spot markets only')\n .exchange(this.id);\n }\n const request = {\n 'orderId': id,\n };\n return await this.fetchMyTrades(symbol, since, limit, this.extend(request, params));\n }\n async fetchMyTrades(symbol = undefined, since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name binance#fetchMyTrades\n * @description fetch all trades made by the user\n * @see https://binance-docs.github.io/apidocs/spot/en/#account-trade-list-user_data\n * @see https://binance-docs.github.io/apidocs/futures/en/#account-trade-list-user_data\n * @see https://binance-docs.github.io/apidocs/delivery/en/#account-trade-list-user_data\n * @see https://binance-docs.github.io/apidocs/spot/en/#query-margin-account-39-s-trade-list-user_data\n * @see https://binance-docs.github.io/apidocs/pm/en/#margin-account-trade-list-user_data\n * @see https://binance-docs.github.io/apidocs/pm/en/#um-account-trade-list-user_data\n * @see https://binance-docs.github.io/apidocs/pm/en/#cm-account-trade-list-user_data\n * @param {string} symbol unified market symbol\n * @param {int} [since] the earliest time in ms to fetch trades for\n * @param {int} [limit] the maximum number of trades structures to retrieve\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {boolean} [params.paginate] default false, when true will automatically paginate by calling this endpoint multiple times. See in the docs all the [available parameters](https://github.com/ccxt/ccxt/wiki/Manual#pagination-params)\n * @param {int} [params.until] the latest time in ms to fetch entries for\n * @param {boolean} [params.portfolioMargin] set to true if you would like to fetch trades for a portfolio margin account\n * @returns {Trade[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=trade-structure}\n */\n await this.loadMarkets();\n let paginate = false;\n [paginate, params] = this.handleOptionAndParams(params, 'fetchMyTrades', 'paginate');\n if (paginate) {\n return await this.fetchPaginatedCallDynamic('fetchMyTrades', symbol, since, limit, params);\n }\n const request = {};\n let market = undefined;\n let type = undefined;\n let marginMode = undefined;\n if (symbol !== undefined) {\n market = this.market(symbol);\n request['symbol'] = market['id'];\n }\n [type, params] = this.handleMarketTypeAndParams('fetchMyTrades', market, params);\n let endTime = this.safeInteger2(params, 'until', 'endTime');\n if (since !== undefined) {\n const startTime = since;\n request['startTime'] = startTime;\n // https://binance-docs.github.io/apidocs/futures/en/#account-trade-list-user_data\n // If startTime and endTime are both not sent, then the last 7 days' data will be returned.\n // The time between startTime and endTime cannot be longer than 7 days.\n // The parameter fromId cannot be sent with startTime or endTime.\n const currentTimestamp = this.milliseconds();\n const oneWeek = 7 * 24 * 60 * 60 * 1000;\n if ((currentTimestamp - startTime) >= oneWeek) {\n if ((endTime === undefined) && market['linear']) {\n endTime = this.sum(startTime, oneWeek);\n endTime = Math.min(endTime, currentTimestamp);\n }\n }\n }\n if (endTime !== undefined) {\n request['endTime'] = endTime;\n params = this.omit(params, ['endTime', 'until']);\n }\n if (limit !== undefined) {\n if ((type === 'option') || market['contract']) {\n limit = Math.min(limit, 1000); // above 1000, returns error\n }\n request['limit'] = limit;\n }\n let response = undefined;\n if (type === 'option') {\n response = await this.eapiPrivateGetUserTrades(this.extend(request, params));\n }\n else {\n if (symbol === undefined) {\n throw new InvalidParamsError('It requires a symbol argument').exchange(this.id);\n }\n [marginMode, params] = this.handleMarginModeAndParams('fetchMyTrades', params);\n let isPortfolioMargin = undefined;\n [isPortfolioMargin, params] = this.handleOptionAndParams2(params, 'fetchMyTrades', 'papi', 'portfolioMargin', false);\n if (type === 'spot' || type === 'margin') {\n if (isPortfolioMargin) {\n response = await this.papiGetMarginMyTrades(this.extend(request, params));\n }\n else if ((type === 'margin') || (marginMode !== undefined)) {\n if (marginMode === 'isolated') {\n request['isIsolated'] = true;\n }\n response = await this.sapiGetMarginMyTrades(this.extend(request, params));\n }\n else {\n response = await this.privateGetMyTrades(this.extend(request, params));\n }\n }\n else if (market['linear']) {\n if (isPortfolioMargin) {\n response = await this.papiGetUmUserTrades(this.extend(request, params));\n }\n else {\n response = await this.fapiPrivateGetUserTrades(this.extend(request, params));\n }\n }\n else if (market['inverse']) {\n if (isPortfolioMargin) {\n response = await this.papiGetCmUserTrades(this.extend(request, params));\n }\n else {\n response = await this.dapiPrivateGetUserTrades(this.extend(request, params));\n }\n }\n }\n //\n // spot trade\n //\n // [\n // {\n // \"symbol\": \"BNBBTC\",\n // \"id\": 28457,\n // \"orderId\": 100234,\n // \"price\": \"4.00000100\",\n // \"qty\": \"12.00000000\",\n // \"commission\": \"10.10000000\",\n // \"commissionAsset\": \"BNB\",\n // \"time\": 1499865549590,\n // \"isBuyer\": true,\n // \"isMaker\": false,\n // \"isBestMatch\": true,\n // }\n // ]\n //\n // futures trade\n //\n // [\n // {\n // \"accountId\": 20,\n // \"buyer\": False,\n // \"commission\": \"-0.07819010\",\n // \"commissionAsset\": \"USDT\",\n // \"counterPartyId\": 653,\n // \"id\": 698759,\n // \"maker\": False,\n // \"orderId\": 25851813,\n // \"price\": \"7819.01\",\n // \"qty\": \"0.002\",\n // \"quoteQty\": \"0.01563\",\n // \"realizedPnl\": \"-0.91539999\",\n // \"side\": \"SELL\",\n // \"symbol\": \"BTCUSDT\",\n // \"time\": 1569514978020\n // }\n // ]\n //\n // options (eapi)\n //\n // [\n // {\n // \"id\": 1125899906844226012,\n // \"tradeId\": 73,\n // \"orderId\": 4638761100843040768,\n // \"symbol\": \"ETH-230211-1500-C\",\n // \"price\": \"18.70000000\",\n // \"quantity\": \"-0.57000000\",\n // \"fee\": \"0.17305890\",\n // \"realizedProfit\": \"-3.53400000\",\n // \"side\": \"SELL\",\n // \"type\": \"LIMIT\",\n // \"volatility\": \"0.30000000\",\n // \"liquidity\": \"MAKER\",\n // \"time\": 1676085216845,\n // \"priceScale\": 1,\n // \"quantityScale\": 2,\n // \"optionSide\": \"CALL\",\n // \"quoteAsset\": \"USDT\"\n // }\n // ]\n //\n // linear portfolio margin\n //\n // [\n // {\n // \"symbol\": \"BTCUSDT\",\n // \"id\": 4575108247,\n // \"orderId\": 261942655610,\n // \"side\": \"SELL\",\n // \"price\": \"47263.40\",\n // \"qty\": \"0.010\",\n // \"realizedPnl\": \"27.38400000\",\n // \"marginAsset\": \"USDT\",\n // \"quoteQty\": \"472.63\",\n // \"commission\": \"0.18905360\",\n // \"commissionAsset\": \"USDT\",\n // \"time\": 1707530039409,\n // \"buyer\": false,\n // \"maker\": false,\n // \"positionSide\": \"LONG\"\n // }\n // ]\n //\n // inverse portfolio margin\n //\n // [\n // {\n // \"symbol\": \"ETHUSD_PERP\",\n // \"id\": 701907838,\n // \"orderId\": 71548909034,\n // \"pair\": \"ETHUSD\",\n // \"side\": \"SELL\",\n // \"price\": \"2498.15\",\n // \"qty\": \"1\",\n // \"realizedPnl\": \"0.00012517\",\n // \"marginAsset\": \"ETH\",\n // \"baseQty\": \"0.00400296\",\n // \"commission\": \"0.00000160\",\n // \"commissionAsset\": \"ETH\",\n // \"time\": 1707530317519,\n // \"positionSide\": \"LONG\",\n // \"buyer\": false,\n // \"maker\": false\n // }\n // ]\n //\n // spot margin portfolio margin\n //\n // [\n // {\n // \"symbol\": \"ADAUSDT\",\n // \"id\": 470227543,\n // \"orderId\": 4421170947,\n // \"price\": \"0.53880000\",\n // \"qty\": \"10.00000000\",\n // \"quoteQty\": \"5.38800000\",\n // \"commission\": \"0.00538800\",\n // \"commissionAsset\": \"USDT\",\n // \"time\": 1707545780522,\n // \"isBuyer\": false,\n // \"isMaker\": false,\n // \"isBestMatch\": true\n // }\n // ]\n //\n return this.parseTrades(response, market, since, limit);\n }\n async fetchDeposits(code = undefined, since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name binance#fetchDeposits\n * @see https://binance-docs.github.io/apidocs/spot/en/#get-fiat-deposit-withdraw-history-user_data\n * @description fetch all deposits made to an account\n * @see https://binance-docs.github.io/apidocs/spot/en/#get-fiat-deposit-withdraw-history-user_data\n * @see https://binance-docs.github.io/apidocs/spot/en/#deposit-history-supporting-network-user_data\n * @param {string} code unified currency code\n * @param {int} [since] the earliest time in ms to fetch deposits for\n * @param {int} [limit] the maximum number of deposits structures to retrieve\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {bool} [params.fiat] if true, only fiat deposits will be returned\n * @param {int} [params.until] the latest time in ms to fetch entries for\n * @param {boolean} [params.paginate] default false, when true will automatically paginate by calling this endpoint multiple times. See in the docs all the [availble parameters](https://github.com/ccxt/ccxt/wiki/Manual#pagination-params)\n * @returns {object[]} a list of [transaction structures]{@link https://docs.ccxt.com/#/?id=transaction-structure}\n */\n await this.loadMarkets();\n let paginate = false;\n [paginate, params] = this.handleOptionAndParams(params, 'fetchDeposits', 'paginate');\n if (paginate) {\n return await this.fetchPaginatedCallDynamic('fetchDeposits', code, since, limit, params);\n }\n let currency = undefined;\n let response = undefined;\n const request = {};\n const legalMoney = this.safeDict(this.options, 'legalMoney', {});\n const fiatOnly = this.safeBool(params, 'fiat', false);\n params = this.omit(params, 'fiatOnly');\n const until = this.safeInteger(params, 'until');\n params = this.omit(params, 'until');\n if (fiatOnly || (code in legalMoney)) {\n if (code !== undefined) {\n currency = this.currency(code);\n }\n request['transactionType'] = 0;\n if (since !== undefined) {\n request['beginTime'] = since;\n }\n if (until !== undefined) {\n request['endTime'] = until;\n }\n const raw = await this.sapiGetFiatOrders(this.extend(request, params));\n response = this.safeValue(raw, 'data');\n // {\n // \"code\": \"000000\",\n // \"message\": \"success\",\n // \"data\": [\n // {\n // \"orderNo\": \"25ced37075c1470ba8939d0df2316e23\",\n // \"fiatCurrency\": \"EUR\",\n // \"indicatedAmount\": \"15.00\",\n // \"amount\": \"15.00\",\n // \"totalFee\": \"0.00\",\n // \"method\": \"card\",\n // \"status\": \"Failed\",\n // \"createTime\": 1627501026000,\n // \"updateTime\": 1627501027000\n // }\n // ],\n // \"total\": 1,\n // \"success\": true\n // }\n }\n else {\n if (code !== undefined) {\n currency = this.currency(code);\n request['coin'] = currency['id'];\n }\n if (since !== undefined) {\n request['startTime'] = since;\n // max 3 months range https://github.com/ccxt/ccxt/issues/6495\n let endTime = this.sum(since, 7776000000);\n if (until !== undefined) {\n endTime = Math.min(endTime, until);\n }\n request['endTime'] = endTime;\n }\n if (limit !== undefined) {\n request['limit'] = limit;\n }\n response = await this.sapiGetCapitalDepositHisrec(this.extend(request, params));\n // [\n // {\n // \"amount\": \"0.01844487\",\n // \"coin\": \"BCH\",\n // \"network\": \"BCH\",\n // \"status\": 1,\n // \"address\": \"1NYxAJhW2281HK1KtJeaENBqHeygA88FzR\",\n // \"addressTag\": \"\",\n // \"txId\": \"bafc5902504d6504a00b7d0306a41154cbf1d1b767ab70f3bc226327362588af\",\n // \"insertTime\": 1610784980000,\n // \"transferType\": 0,\n // \"confirmTimes\": \"2/2\"\n // },\n // {\n // \"amount\": \"4500\",\n // \"coin\": \"USDT\",\n // \"network\": \"BSC\",\n // \"status\": 1,\n // \"address\": \"0xc9c923c87347ca0f3451d6d308ce84f691b9f501\",\n // \"addressTag\": \"\",\n // \"txId\": \"Internal transfer 51376627901\",\n // \"insertTime\": 1618394381000,\n // \"transferType\": 1,\n // \"confirmTimes\": \"1/15\"\n // }\n // ]\n }\n for (let i = 0; i < response.length; i++) {\n response[i]['type'] = 'deposit';\n }\n return this.parseTransactions(response, currency, since, limit);\n }\n async fetchWithdrawals(code = undefined, since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name binance#fetchWithdrawals\n * @see https://binance-docs.github.io/apidocs/spot/en/#get-fiat-deposit-withdraw-history-user_data\n * @see https://binance-docs.github.io/apidocs/spot/en/#withdraw-history-supporting-network-user_data\n * @description fetch all withdrawals made from an account\n * @see https://binance-docs.github.io/apidocs/spot/en/#get-fiat-deposit-withdraw-history-user_data\n * @see https://binance-docs.github.io/apidocs/spot/en/#withdraw-history-supporting-network-user_data\n * @param {string} code unified currency code\n * @param {int} [since] the earliest time in ms to fetch withdrawals for\n * @param {int} [limit] the maximum number of withdrawals structures to retrieve\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {bool} [params.fiat] if true, only fiat withdrawals will be returned\n * @param {int} [params.until] the latest time in ms to fetch withdrawals for\n * @param {boolean} [params.paginate] default false, when true will automatically paginate by calling this endpoint multiple times. See in the docs all the [availble parameters](https://github.com/ccxt/ccxt/wiki/Manual#pagination-params)\n * @returns {object[]} a list of [transaction structures]{@link https://docs.ccxt.com/#/?id=transaction-structure}\n */\n await this.loadMarkets();\n let paginate = false;\n [paginate, params] = this.handleOptionAndParams(params, 'fetchWithdrawals', 'paginate');\n if (paginate) {\n return await this.fetchPaginatedCallDynamic('fetchWithdrawals', code, since, limit, params);\n }\n const legalMoney = this.safeDict(this.options, 'legalMoney', {});\n const fiatOnly = this.safeBool(params, 'fiat', false);\n params = this.omit(params, 'fiatOnly');\n const request = {};\n const until = this.safeInteger(params, 'until');\n if (until !== undefined) {\n params = this.omit(params, 'until');\n request['endTime'] = until;\n }\n let response = undefined;\n let currency = undefined;\n if (fiatOnly || (code in legalMoney)) {\n if (code !== undefined) {\n currency = this.currency(code);\n }\n request['transactionType'] = 1;\n if (since !== undefined) {\n request['beginTime'] = since;\n }\n const raw = await this.sapiGetFiatOrders(this.extend(request, params));\n response = this.safeValue(raw, 'data');\n // {\n // \"code\": \"000000\",\n // \"message\": \"success\",\n // \"data\": [\n // {\n // \"orderNo\": \"CJW706452266115170304\",\n // \"fiatCurrency\": \"GBP\",\n // \"indicatedAmount\": \"10001.50\",\n // \"amount\": \"100.00\",\n // \"totalFee\": \"1.50\",\n // \"method\": \"bank transfer\",\n // \"status\": \"Successful\",\n // \"createTime\": 1620037745000,\n // \"updateTime\": 1620038480000\n // },\n // {\n // \"orderNo\": \"CJW706287492781891584\",\n // \"fiatCurrency\": \"GBP\",\n // \"indicatedAmount\": \"10001.50\",\n // \"amount\": \"100.00\",\n // \"totalFee\": \"1.50\",\n // \"method\": \"bank transfer\",\n // \"status\": \"Successful\",\n // \"createTime\": 1619998460000,\n // \"updateTime\": 1619998823000\n // }\n // ],\n // \"total\": 39,\n // \"success\": true\n // }\n }\n else {\n if (code !== undefined) {\n currency = this.currency(code);\n request['coin'] = currency['id'];\n }\n if (since !== undefined) {\n request['startTime'] = since;\n // max 3 months range https://github.com/ccxt/ccxt/issues/6495\n request['endTime'] = this.sum(since, 7776000000);\n }\n if (limit !== undefined) {\n request['limit'] = limit;\n }\n response = await this.sapiGetCapitalWithdrawHistory(this.extend(request, params));\n // [\n // {\n // \"id\": \"69e53ad305124b96b43668ceab158a18\",\n // \"amount\": \"28.75\",\n // \"transactionFee\": \"0.25\",\n // \"coin\": \"XRP\",\n // \"status\": 6,\n // \"address\": \"r3T75fuLjX51mmfb5Sk1kMNuhBgBPJsjza\",\n // \"addressTag\": \"101286922\",\n // \"txId\": \"19A5B24ED0B697E4F0E9CD09FCB007170A605BC93C9280B9E6379C5E6EF0F65A\",\n // \"applyTime\": \"2021-04-15 12:09:16\",\n // \"network\": \"XRP\",\n // \"transferType\": 0\n // },\n // {\n // \"id\": \"9a67628b16ba4988ae20d329333f16bc\",\n // \"amount\": \"20\",\n // \"transactionFee\": \"20\",\n // \"coin\": \"USDT\",\n // \"status\": 6,\n // \"address\": \"0x0AB991497116f7F5532a4c2f4f7B1784488628e1\",\n // \"txId\": \"0x77fbf2cf2c85b552f0fd31fd2e56dc95c08adae031d96f3717d8b17e1aea3e46\",\n // \"applyTime\": \"2021-04-15 12:06:53\",\n // \"network\": \"ETH\",\n // \"transferType\": 0\n // },\n // {\n // \"id\": \"a7cdc0afbfa44a48bd225c9ece958fe2\",\n // \"amount\": \"51\",\n // \"transactionFee\": \"1\",\n // \"coin\": \"USDT\",\n // \"status\": 6,\n // \"address\": \"TYDmtuWL8bsyjvcauUTerpfYyVhFtBjqyo\",\n // \"txId\": \"168a75112bce6ceb4823c66726ad47620ad332e69fe92d9cb8ceb76023f9a028\",\n // \"applyTime\": \"2021-04-13 12:46:59\",\n // \"network\": \"TRX\",\n // \"transferType\": 0\n // }\n // ]\n }\n for (let i = 0; i < response.length; i++) {\n response[i]['type'] = 'withdrawal';\n }\n return this.parseTransactions(response, currency, since, limit);\n }\n parseTransactionStatusByType(status, type = undefined) {\n const statusesByType = {\n 'deposit': {\n '0': 'pending',\n '1': 'ok',\n '6': 'ok',\n // Fiat\n // Processing, Failed, Successful, Finished, Refunding, Refunded, Refund Failed, Order Partial credit Stopped\n 'Processing': 'pending',\n 'Failed': 'failed',\n 'Successful': 'ok',\n 'Refunding': 'canceled',\n 'Refunded': 'canceled',\n 'Refund Failed': 'failed',\n },\n 'withdrawal': {\n '0': 'pending',\n '1': 'canceled',\n '2': 'pending',\n '3': 'failed',\n '4': 'pending',\n '5': 'failed',\n '6': 'ok',\n // Fiat\n // Processing, Failed, Successful, Finished, Refunding, Refunded, Refund Failed, Order Partial credit Stopped\n 'Processing': 'pending',\n 'Failed': 'failed',\n 'Successful': 'ok',\n 'Refunding': 'canceled',\n 'Refunded': 'canceled',\n 'Refund Failed': 'failed',\n },\n };\n const statuses = this.safeDict(statusesByType, type, {});\n return this.safeString(statuses, status, status);\n }\n parseTransaction(transaction, currency = undefined) {\n //\n // fetchDeposits\n //\n // {\n // \"amount\": \"4500\",\n // \"coin\": \"USDT\",\n // \"network\": \"BSC\",\n // \"status\": 1,\n // \"address\": \"0xc9c923c87347ca0f3451d6d308ce84f691b9f501\",\n // \"addressTag\": \"\",\n // \"txId\": \"Internal transfer 51376627901\",\n // \"insertTime\": 1618394381000,\n // \"transferType\": 1,\n // \"confirmTimes\": \"1/15\"\n // }\n //\n // fetchWithdrawals\n //\n // {\n // \"id\": \"69e53ad305124b96b43668ceab158a18\",\n // \"amount\": \"28.75\",\n // \"transactionFee\": \"0.25\",\n // \"coin\": \"XRP\",\n // \"status\": 6,\n // \"address\": \"r3T75fuLjX51mmfb5Sk1kMNuhBgBPJsjza\",\n // \"addressTag\": \"101286922\",\n // \"txId\": \"19A5B24ED0B697E4F0E9CD09FCB007170A605BC93C9280B9E6379C5E6EF0F65A\",\n // \"applyTime\": \"2021-04-15 12:09:16\",\n // \"network\": \"XRP\",\n // \"transferType\": 0\n // }\n //\n // fiat transaction\n // withdraw\n // {\n // \"orderNo\": \"CJW684897551397171200\",\n // \"fiatCurrency\": \"GBP\",\n // \"indicatedAmount\": \"29.99\",\n // \"amount\": \"28.49\",\n // \"totalFee\": \"1.50\",\n // \"method\": \"bank transfer\",\n // \"status\": \"Successful\",\n // \"createTime\": 1614898701000,\n // \"updateTime\": 1614898820000\n // }\n //\n // deposit\n // {\n // \"orderNo\": \"25ced37075c1470ba8939d0df2316e23\",\n // \"fiatCurrency\": \"EUR\",\n // \"transactionType\": 0,\n // \"indicatedAmount\": \"15.00\",\n // \"amount\": \"15.00\",\n // \"totalFee\": \"0.00\",\n // \"method\": \"card\",\n // \"status\": \"Failed\",\n // \"createTime\": \"1627501026000\",\n // \"updateTime\": \"1627501027000\"\n // }\n //\n // withdraw\n //\n // { id: \"9a67628b16ba4988ae20d329333f16bc\" }\n //\n const id = this.safeString2(transaction, 'id', 'orderNo');\n const address = this.safeString(transaction, 'address');\n let tag = this.safeString(transaction, 'addressTag'); // set but unused\n if (tag !== undefined) {\n if (tag.length < 1) {\n tag = undefined;\n }\n }\n let txid = this.safeString(transaction, 'txId');\n if ((txid !== undefined) && (txid.indexOf('Internal transfer ') >= 0)) {\n txid = txid.slice(18);\n }\n const currencyId = this.safeString2(transaction, 'coin', 'fiatCurrency');\n let code = this.safeCurrencyCode(currencyId, currency);\n let timestamp = undefined;\n timestamp = this.safeInteger2(transaction, 'insertTime', 'createTime');\n if (timestamp === undefined) {\n timestamp = this.parse8601(this.safeString(transaction, 'applyTime'));\n }\n const updated = this.safeInteger2(transaction, 'successTime', 'updateTime');\n let type = this.safeString(transaction, 'type');\n if (type === undefined) {\n const txType = this.safeString(transaction, 'transactionType');\n if (txType !== undefined) {\n type = (txType === '0') ? 'deposit' : 'withdrawal';\n }\n const legalMoneyCurrenciesById = this.safeValue(this.options, 'legalMoneyCurrenciesById');\n code = this.safeString(legalMoneyCurrenciesById, code, code);\n }\n const status = this.parseTransactionStatusByType(this.safeString(transaction, 'status'), type);\n const amount = this.safeNumber(transaction, 'amount');\n const feeCost = this.safeNumber2(transaction, 'transactionFee', 'totalFee');\n let fee = undefined;\n if (feeCost !== undefined) {\n fee = { 'currency': code, 'cost': feeCost };\n }\n const internalInteger = this.safeInteger(transaction, 'transferType');\n let internal = undefined;\n if (internalInteger !== undefined) {\n internal = internalInteger ? true : false;\n }\n const network = this.safeString(transaction, 'network');\n return {\n 'info': transaction,\n 'id': id,\n 'txid': txid,\n 'timestamp': timestamp,\n 'datetime': this.iso8601(timestamp),\n 'network': network,\n 'address': address,\n 'addressTo': address,\n 'addressFrom': undefined,\n 'tag': tag,\n 'tagTo': tag,\n 'tagFrom': undefined,\n 'type': type,\n 'amount': amount,\n 'currency': code,\n 'status': status,\n 'updated': updated,\n 'internal': internal,\n 'comment': undefined,\n 'fee': fee,\n };\n }\n parseTransferStatus(status) {\n const statuses = {\n 'CONFIRMED': 'ok',\n };\n return this.safeString(statuses, status, status);\n }\n parseTransfer(transfer, currency = undefined) {\n //\n // transfer\n //\n // {\n // \"tranId\":13526853623\n // }\n //\n // fetchTransfers\n //\n // {\n // \"timestamp\": 1614640878000,\n // \"asset\": \"USDT\",\n // \"amount\": \"25\",\n // \"type\": \"MAIN_UMFUTURE\",\n // \"status\": \"CONFIRMED\",\n // \"tranId\": 43000126248\n // }\n //\n const id = this.safeString(transfer, 'tranId');\n const currencyId = this.safeString(transfer, 'asset');\n const code = this.safeCurrencyCode(currencyId, currency);\n const amount = this.safeNumber(transfer, 'amount');\n const type = this.safeString(transfer, 'type');\n let fromAccount = undefined;\n let toAccount = undefined;\n const accountsById = this.safeDict(this.options, 'accountsById', {});\n if (type !== undefined) {\n const parts = type.split('_');\n fromAccount = this.safeValue(parts, 0);\n toAccount = this.safeValue(parts, 1);\n fromAccount = this.safeString(accountsById, fromAccount, fromAccount);\n toAccount = this.safeString(accountsById, toAccount, toAccount);\n }\n const timestamp = this.safeInteger(transfer, 'timestamp');\n const status = this.parseTransferStatus(this.safeString(transfer, 'status'));\n return {\n 'info': transfer,\n 'id': id,\n 'timestamp': timestamp,\n 'datetime': this.iso8601(timestamp),\n 'currency': code,\n 'amount': amount,\n 'fromAccount': fromAccount,\n 'toAccount': toAccount,\n 'status': status,\n };\n }\n // https://binance-docs.github.io/apidocs/spot/en/#get-summary-of-sub-account-39-s-futures-account-v2-for-master-account\n // https://binance-docs.github.io/apidocs/spot/en/#get-summary-of-sub-account-39-s-margin-account-for-master-account\n // https://binance-docs.github.io/apidocs/spot/en/#query-sub-account-spot-assets-summary-for-master-account\n // https://binance-docs.github.io/apidocs/spot/en/#query-managed-sub-account-margin-asset-details-for-investor-master-account-user_data\n async fetchSubAccountBalances(uid, params = {}) {\n await this.loadMarkets();\n const response = await this.sapiV4GetSubAccountAssets(this.extend({ 'email': uid }));\n // {\n // \"balances\":[\n // {\n // \"asset\":\"ADA\",\n // \"free\":\"10000\",\n // \"locked\":\"0\"\n // },\n // ]\n // }\n const spotBalances = {};\n const balances = this.safeValue(response, 'balances', []);\n for (let i = 0; i < balances.length; i++) {\n const balance = balances[i];\n const currencyId = this.safeString(balance, 'asset');\n const code = this.safeCurrencyCode(currencyId);\n const free = this.safeString(balance, 'free');\n const used = this.safeString(balance, 'locked');\n const total = this.sum(free, used);\n spotBalances[code] = {\n 'free': this.parseNumber(free),\n 'used': this.parseNumber(used),\n 'total': this.parseNumber(total),\n };\n }\n return {\n 'spot': spotBalances,\n };\n }\n async getSubAccounts() {\n await this.loadMarkets();\n const response = await this.sapiGetSubAccountList();\n // {\n // \"subAccounts\":[\n // {\n // \"email\":\"testsub@gmail.com\",\n // \"isFreeze\":false,\n // \"createTime\":1544433328000,\n // \"isManagedSubAccount\": false,\n // \"isAssetManagementSubAccount\": false\n // },\n // {\n // \"email\":\"virtual@oxebmvfonoemail.com\",\n // \"isFreeze\":false,\n // \"createTime\":1544433328000,\n // \"isManagedSubAccount\": false,\n // \"isAssetManagementSubAccount\": false\n // }\n // ]\n // }\n const subAccounts = this.safeValue(response, 'subAccounts', []);\n return subAccounts?.map((subAccount) => ({\n 'uid': this.safeString(subAccount, 'email'),\n }));\n }\n async subAccountTransfer(code, amount, fromAccountType, toAccountType, fromUid, toUid, params = {}) {\n await this.loadMarkets();\n const currency = this.currency(code);\n const request = {\n 'asset': currency['id'],\n 'amount': this.currencyToPrecision(code, amount),\n 'fromAccountType': fromAccountType,\n 'toAccountType': toAccountType,\n 'fromEmail': fromUid,\n 'toEmail': toUid,\n };\n const response = await this.sapiPostSubAccountUniversalTransfer(this.extend(request, params));\n //\n // {\n // \"tranId\":13526853623\n // }\n //\n return this.parseTransfer(response, currency);\n }\n async transfer(code, amount, fromAccount, toAccount, params = {}) {\n /**\n * @method\n * @name binance#transfer\n * @description transfer currency internally between wallets on the same account\n * @see https://binance-docs.github.io/apidocs/spot/en/#user-universal-transfer-user_data\n * @param {string} code unified currency code\n * @param {float} amount amount to transfer\n * @param {string} fromAccount account to transfer from\n * @param {string} toAccount account to transfer to\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {string} [params.type] exchange specific transfer type\n * @param {string} [params.symbol] the unified symbol, required for isolated margin transfers\n * @returns {object} a [transfer structure]{@link https://docs.ccxt.com/#/?id=transfer-structure}\n */\n await this.loadMarkets();\n const currency = this.currency(code);\n const request = {\n 'asset': currency['id'],\n 'amount': this.currencyToPrecision(code, amount),\n };\n request['type'] = this.safeString(params, 'type');\n params = this.omit(params, 'type');\n if (request['type'] === undefined) {\n const symbol = this.safeString(params, 'symbol');\n let market = undefined;\n if (symbol !== undefined) {\n market = this.market(symbol);\n params = this.omit(params, 'symbol');\n }\n let fromId = this.convertTypeToAccount(fromAccount).toUpperCase();\n let toId = this.convertTypeToAccount(toAccount).toUpperCase();\n let isolatedSymbol = undefined;\n if (market !== undefined) {\n isolatedSymbol = market['id'];\n }\n if (fromId === 'ISOLATED') {\n if (symbol === undefined) {\n throw new InvalidParamsError('It requires params[\"symbol\"] when fromAccount is ' + fromAccount)\n .exchange(this.id);\n }\n }\n if (toId === 'ISOLATED') {\n if (symbol === undefined) {\n throw new InvalidParamsError('It requires params[\"symbol\"] when toAccount is ' + toAccount).exchange(this.id);\n }\n }\n const accountsById = this.safeDict(this.options, 'accountsById', {});\n const fromIsolated = !(fromId in accountsById);\n const toIsolated = !(toId in accountsById);\n if (fromIsolated && (market === undefined)) {\n isolatedSymbol = fromId; // allow user provide symbol as the from/to account\n }\n if (toIsolated && (market === undefined)) {\n isolatedSymbol = toId;\n }\n if (fromIsolated || toIsolated) { // Isolated margin transfer\n const fromFuture = fromId === 'UMFUTURE' || fromId === 'CMFUTURE';\n const toFuture = toId === 'UMFUTURE' || toId === 'CMFUTURE';\n const fromSpot = fromId === 'MAIN';\n const toSpot = toId === 'MAIN';\n const funding = fromId === 'FUNDING' || toId === 'FUNDING';\n const option = fromId === 'OPTION' || toId === 'OPTION';\n const prohibitedWithIsolated = fromFuture || toFuture || funding || option;\n if ((fromIsolated || toIsolated) && prohibitedWithIsolated) {\n throw new ExchangeTransferNotAllowedError()\n .overwriteMessage(`Transfer not allowed between ${fromAccount} and ${toAccount}`)\n .exchange(this.id);\n }\n else if (toSpot && fromIsolated) {\n fromId = 'ISOLATED_MARGIN';\n request['fromSymbol'] = isolatedSymbol;\n }\n else if (fromSpot && toIsolated) {\n toId = 'ISOLATED_MARGIN';\n request['toSymbol'] = isolatedSymbol;\n }\n else {\n if (fromIsolated && toIsolated) {\n request['fromSymbol'] = fromId;\n request['toSymbol'] = toId;\n fromId = 'ISOLATEDMARGIN';\n toId = 'ISOLATEDMARGIN';\n }\n else {\n if (fromIsolated) {\n request['fromSymbol'] = isolatedSymbol;\n fromId = 'ISOLATEDMARGIN';\n }\n if (toIsolated) {\n request['toSymbol'] = isolatedSymbol;\n toId = 'ISOLATEDMARGIN';\n }\n }\n }\n request['type'] = fromId + '_' + toId;\n }\n else {\n request['type'] = fromId + '_' + toId;\n }\n }\n const response = await this.sapiPostAssetTransfer(this.extend(request, params));\n //\n // {\n // \"tranId\":13526853623\n // }\n //\n return this.parseTransfer(response, currency);\n }\n async fetchTransfers(code = undefined, since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name binance#fetchTransfers\n * @see https://binance-docs.github.io/apidocs/spot/en/#user-universal-transfer-user_data\n * @description fetch a history of internal transfers made on an account\n * @see https://binance-docs.github.io/apidocs/spot/en/#query-user-universal-transfer-history-user_data\n * @param {string} code unified currency code of the currency transferred\n * @param {int} [since] the earliest time in ms to fetch transfers for\n * @param {int} [limit] the maximum number of transfers structures to retrieve\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {int} [params.until] the latest time in ms to fetch transfers for\n * @param {boolean} [params.paginate] default false, when true will automatically paginate by calling this endpoint multiple times. See in the docs all the [availble parameters](https://github.com/ccxt/ccxt/wiki/Manual#pagination-params)\n * @returns {object[]} a list of [transfer structures]{@link https://docs.ccxt.com/#/?id=transfer-structure}\n */\n await this.loadMarkets();\n let paginate = false;\n [paginate, params] = this.handleOptionAndParams(params, 'fetchTransfers', 'paginate');\n if (paginate) {\n return await this.fetchPaginatedCallDynamic('fetchTransfers', code, since, limit, params);\n }\n let currency = undefined;\n if (code !== undefined) {\n currency = this.currency(code);\n }\n const defaultType = this.safeString2(this.options, 'fetchTransfers', 'defaultType', 'spot');\n const fromAccount = this.safeString(params, 'fromAccount', defaultType);\n const defaultTo = (fromAccount === 'future') ? 'spot' : 'future';\n const toAccount = this.safeString(params, 'toAccount', defaultTo);\n let type = this.safeString(params, 'type');\n const accountsByType = this.safeDict(this.options, 'accountsByType', {});\n const fromId = this.safeString(accountsByType, fromAccount);\n const toId = this.safeString(accountsByType, toAccount);\n if (type === undefined) {\n if (fromId === undefined) {\n const keys = Object.keys(accountsByType);\n throw new InvalidParamsError('fromAccount parameter must be one of ' + keys.join(', ')).exchange(this.id);\n }\n if (toId === undefined) {\n const keys = Object.keys(accountsByType);\n throw new InvalidParamsError('toAccount parameter must be one of ' + keys.join(', ')).exchange(this.id);\n }\n type = fromId + '_' + toId;\n }\n const request = {\n 'type': type,\n };\n if (since !== undefined) {\n request['startTime'] = since;\n }\n if (limit !== undefined) {\n request['size'] = limit;\n }\n const until = this.safeInteger(params, 'until');\n if (until !== undefined) {\n params = this.omit(params, 'until');\n request['endTime'] = until;\n }\n const response = await this.sapiGetAssetTransfer(this.extend(request, params));\n //\n // {\n // \"total\": 3,\n // \"rows\": [\n // {\n // \"timestamp\": 1614640878000,\n // \"asset\": \"USDT\",\n // \"amount\": \"25\",\n // \"type\": \"MAIN_UMFUTURE\",\n // \"status\": \"CONFIRMED\",\n // \"tranId\": 43000126248\n // },\n // ]\n // }\n //\n const rows = this.safeList(response, 'rows', []);\n return this.parseTransfers(rows, currency, since, limit);\n }\n async fetchDepositAddress(code, params = {}) {\n /**\n * @method\n * @name binance#fetchDepositAddress\n * @description fetch the deposit address for a currency associated with this account\n * @see https://binance-docs.github.io/apidocs/spot/en/#deposit-address-supporting-network-user_data\n * @param {string} code unified currency code\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} an [address structure]{@link https://docs.ccxt.com/#/?id=address-structure}\n */\n await this.loadMarkets();\n const currency = this.currency(code);\n const request = {\n 'coin': currency['id'],\n // 'network': 'ETH', // 'BSC', 'XMR', you can get network and isDefault in networkList in the response of sapiGetCapitalConfigDetail\n };\n const networks = this.safeDict(this.options, 'networks', {});\n let network = this.safeStringUpper(params, 'network'); // this line allows the user to specify either ERC20 or ETH\n network = this.safeString(networks, network, network); // handle ERC20>ETH alias\n if (network !== undefined) {\n request['network'] = network;\n params = this.omit(params, 'network');\n }\n // has support for the 'network' parameter\n // https://binance-docs.github.io/apidocs/spot/en/#deposit-address-supporting-network-user_data\n const response = await this.sapiGetCapitalDepositAddress(this.extend(request, params));\n //\n // {\n // \"currency\": \"XRP\",\n // \"address\": \"rEb8TK3gBgk5auZkwc6sHnwrGVJH8DuaLh\",\n // \"tag\": \"108618262\",\n // \"info\": {\n // \"coin\": \"XRP\",\n // \"address\": \"rEb8TK3gBgk5auZkwc6sHnwrGVJH8DuaLh\",\n // \"tag\": \"108618262\",\n // \"url\": \"https://bithomp.com/explorer/rEb8TK3gBgk5auZkwc6sHnwrGVJH8DuaLh\"\n // }\n // }\n //\n const address = this.safeString(response, 'address');\n const url = this.safeString(response, 'url');\n let impliedNetwork = undefined;\n if (url !== undefined) {\n const reverseNetworks = this.safeDict(this.options, 'reverseNetworks', {});\n const parts = url.split('/');\n let topLevel = this.safeString(parts, 2);\n if ((topLevel === 'blockchair.com') || (topLevel === 'viewblock.io')) {\n const subLevel = this.safeString(parts, 3);\n if (subLevel !== undefined) {\n topLevel = topLevel + '/' + subLevel;\n }\n }\n impliedNetwork = this.safeString(reverseNetworks, topLevel);\n const impliedNetworks = this.safeValue(this.options, 'impliedNetworks', {\n 'ETH': { 'ERC20': 'ETH' },\n 'TRX': { 'TRC20': 'TRX' },\n });\n if (code in impliedNetworks) {\n const conversion = this.safeDict(impliedNetworks, code, {});\n impliedNetwork = this.safeString(conversion, impliedNetwork, impliedNetwork);\n }\n }\n let tag = this.safeString(response, 'tag', '');\n if (tag.length === 0) {\n tag = undefined;\n }\n this.checkAddress(address);\n return {\n 'currency': code,\n 'address': address,\n 'tag': tag,\n 'info': response,\n 'network': impliedNetwork,\n };\n }\n async fetchTransactionFees(codes = undefined, params = {}) {\n /**\n * @method\n * @name binance#fetchTransactionFees\n * @deprecated\n * @description please use fetchDepositWithdrawFees instead\n * @see https://binance-docs.github.io/apidocs/spot/en/#all-coins-39-information-user_data\n * @param {string[]|undefined} codes not used by binance fetchTransactionFees ()\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object[]} a list of [fee structures]{@link https://docs.ccxt.com/#/?id=fee-structure}\n */\n await this.loadMarkets();\n const response = await this.sapiGetCapitalConfigGetall(params);\n //\n // [\n // {\n // \"coin\": \"BAT\",\n // \"depositAllEnable\": true,\n // \"withdrawAllEnable\": true,\n // \"name\": \"Basic Attention Token\",\n // \"free\": \"0\",\n // \"locked\": \"0\",\n // \"freeze\": \"0\",\n // \"withdrawing\": \"0\",\n // \"ipoing\": \"0\",\n // \"ipoable\": \"0\",\n // \"storage\": \"0\",\n // \"isLegalMoney\": false,\n // \"trading\": true,\n // \"networkList\": [\n // {\n // \"network\": \"BNB\",\n // \"coin\": \"BAT\",\n // \"withdrawIntegerMultiple\": \"0.00000001\",\n // \"isDefault\": false,\n // \"depositEnable\": true,\n // \"withdrawEnable\": true,\n // \"depositDesc\": '',\n // \"withdrawDesc\": '',\n // \"specialTips\": \"The name of this asset is Basic Attention Token (BAT). Both a MEMO and an Address are required to successfully deposit your BEP2 tokens to Binance.\",\n // \"name\": \"BEP2\",\n // \"resetAddressStatus\": false,\n // \"addressRegex\": \"^(bnb1)[0-9a-z]{38}$\",\n // \"memoRegex\": \"^[0-9A-Za-z\\\\-_]{1,120}$\",\n // \"withdrawFee\": \"0.27\",\n // \"withdrawMin\": \"0.54\",\n // \"withdrawMax\": \"10000000000\",\n // \"minConfirm\": \"1\",\n // \"unLockConfirm\": \"0\"\n // },\n // {\n // \"network\": \"BSC\",\n // \"coin\": \"BAT\",\n // \"withdrawIntegerMultiple\": \"0.00000001\",\n // \"isDefault\": false,\n // \"depositEnable\": true,\n // \"withdrawEnable\": true,\n // \"depositDesc\": '',\n // \"withdrawDesc\": '',\n // \"specialTips\": \"The name of this asset is Basic Attention Token. Please ensure you are depositing Basic Attention Token (BAT) tokens under the contract address ending in 9766e.\",\n // \"name\": \"BEP20 (BSC)\",\n // \"resetAddressStatus\": false,\n // \"addressRegex\": \"^(0x)[0-9A-Fa-f]{40}$\",\n // \"memoRegex\": '',\n // \"withdrawFee\": \"0.27\",\n // \"withdrawMin\": \"0.54\",\n // \"withdrawMax\": \"10000000000\",\n // \"minConfirm\": \"15\",\n // \"unLockConfirm\": \"0\"\n // },\n // {\n // \"network\": \"ETH\",\n // \"coin\": \"BAT\",\n // \"withdrawIntegerMultiple\": \"0.00000001\",\n // \"isDefault\": true,\n // \"depositEnable\": true,\n // \"withdrawEnable\": true,\n // \"depositDesc\": '',\n // \"withdrawDesc\": '',\n // \"specialTips\": \"The name of this asset is Basic Attention Token. Please ensure you are depositing Basic Attention Token (BAT) tokens under the contract address ending in 887ef.\",\n // \"name\": \"ERC20\",\n // \"resetAddressStatus\": false,\n // \"addressRegex\": \"^(0x)[0-9A-Fa-f]{40}$\",\n // \"memoRegex\": '',\n // \"withdrawFee\": \"27\",\n // \"withdrawMin\": \"54\",\n // \"withdrawMax\": \"10000000000\",\n // \"minConfirm\": \"12\",\n // \"unLockConfirm\": \"0\"\n // }\n // ]\n // }\n // ]\n //\n const withdrawFees = {};\n for (let i = 0; i < response.length; i++) {\n const entry = response[i];\n const currencyId = this.safeString(entry, 'coin');\n const code = this.safeCurrencyCode(currencyId);\n const networkList = this.safeList(entry, 'networkList', []);\n withdrawFees[code] = {};\n for (let j = 0; j < networkList.length; j++) {\n const networkEntry = networkList[j];\n const networkId = this.safeString(networkEntry, 'network');\n const networkCode = this.safeCurrencyCode(networkId);\n const fee = this.safeNumber(networkEntry, 'withdrawFee');\n withdrawFees[code][networkCode] = fee;\n }\n }\n return {\n 'withdraw': withdrawFees,\n 'deposit': {},\n 'info': response,\n };\n }\n async fetchDepositWithdrawFees(codes = undefined, params = {}) {\n /**\n * @method\n * @name binance#fetchDepositWithdrawFees\n * @description fetch deposit and withdraw fees\n * @see https://binance-docs.github.io/apidocs/spot/en/#all-coins-39-information-user_data\n * @param {string[]|undefined} codes not used by binance fetchDepositWithdrawFees ()\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object[]} a list of [fee structures]{@link https://docs.ccxt.com/#/?id=fee-structure}\n */\n await this.loadMarkets();\n const response = await this.sapiGetCapitalConfigGetall(params);\n //\n // [\n // {\n // \"coin\": \"BAT\",\n // \"depositAllEnable\": true,\n // \"withdrawAllEnable\": true,\n // \"name\": \"Basic Attention Token\",\n // \"free\": \"0\",\n // \"locked\": \"0\",\n // \"freeze\": \"0\",\n // \"withdrawing\": \"0\",\n // \"ipoing\": \"0\",\n // \"ipoable\": \"0\",\n // \"storage\": \"0\",\n // \"isLegalMoney\": false,\n // \"trading\": true,\n // \"networkList\": [\n // {\n // \"network\": \"BNB\",\n // \"coin\": \"BAT\",\n // \"withdrawIntegerMultiple\": \"0.00000001\",\n // \"isDefault\": false,\n // \"depositEnable\": true,\n // \"withdrawEnable\": true,\n // \"depositDesc\": '',\n // \"withdrawDesc\": '',\n // \"specialTips\": \"The name of this asset is Basic Attention Token (BAT). Both a MEMO and an Address are required to successfully deposit your BEP2 tokens to Binance.\",\n // \"name\": \"BEP2\",\n // \"resetAddressStatus\": false,\n // \"addressRegex\": \"^(bnb1)[0-9a-z]{38}$\",\n // \"memoRegex\": \"^[0-9A-Za-z\\\\-_]{1,120}$\",\n // \"withdrawFee\": \"0.27\",\n // \"withdrawMin\": \"0.54\",\n // \"withdrawMax\": \"10000000000\",\n // \"minConfirm\": \"1\",\n // \"unLockConfirm\": \"0\"\n // },\n // ...\n // ]\n // }\n // ]\n //\n return this.parseDepositWithdrawFees(response, codes, 'coin');\n }\n parseDepositWithdrawFee(fee, currency = undefined) {\n //\n // {\n // \"coin\": \"BAT\",\n // \"depositAllEnable\": true,\n // \"withdrawAllEnable\": true,\n // \"name\": \"Basic Attention Token\",\n // \"free\": \"0\",\n // \"locked\": \"0\",\n // \"freeze\": \"0\",\n // \"withdrawing\": \"0\",\n // \"ipoing\": \"0\",\n // \"ipoable\": \"0\",\n // \"storage\": \"0\",\n // \"isLegalMoney\": false,\n // \"trading\": true,\n // \"networkList\": [\n // {\n // \"network\": \"BNB\",\n // \"coin\": \"BAT\",\n // \"withdrawIntegerMultiple\": \"0.00000001\",\n // \"isDefault\": false,\n // \"depositEnable\": true,\n // \"withdrawEnable\": true,\n // \"depositDesc\": '',\n // \"withdrawDesc\": '',\n // \"specialTips\": \"The name of this asset is Basic Attention Token (BAT). Both a MEMO and an Address are required to successfully deposit your BEP2 tokens to Binance.\",\n // \"name\": \"BEP2\",\n // \"resetAddressStatus\": false,\n // \"addressRegex\": \"^(bnb1)[0-9a-z]{38}$\",\n // \"memoRegex\": \"^[0-9A-Za-z\\\\-_]{1,120}$\",\n // \"withdrawFee\": \"0.27\",\n // \"withdrawMin\": \"0.54\",\n // \"withdrawMax\": \"10000000000\",\n // \"minConfirm\": \"1\",\n // \"unLockConfirm\": \"0\"\n // },\n // ...\n // ]\n // }\n //\n const networkList = this.safeList(fee, 'networkList', []);\n const result = this.depositWithdrawFee(fee);\n for (let j = 0; j < networkList.length; j++) {\n const networkEntry = networkList[j];\n const networkId = this.safeString(networkEntry, 'network');\n const networkCode = this.networkIdToCode(networkId);\n const withdrawFee = this.safeNumber(networkEntry, 'withdrawFee');\n const isDefault = this.safeBool(networkEntry, 'isDefault');\n if (isDefault === true) {\n result['withdraw'] = {\n 'fee': withdrawFee,\n 'percentage': undefined,\n };\n }\n result['networks'][networkCode] = {\n 'withdraw': {\n 'fee': withdrawFee,\n 'percentage': undefined,\n },\n 'deposit': {\n 'fee': undefined,\n 'percentage': undefined,\n },\n };\n }\n return result;\n }\n async withdraw(code, amount, address, tag = undefined, params = {}) {\n /**\n * @method\n * @name binance#withdraw\n * @description make a withdrawal\n * @see https://binance-docs.github.io/apidocs/spot/en/#withdraw-user_data\n * @param {string} code unified currency code\n * @param {float} amount the amount to withdraw\n * @param {string} address the address to withdraw to\n * @param {string} tag\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} a [transaction structure]{@link https://docs.ccxt.com/#/?id=transaction-structure}\n */\n [tag, params] = this.handleWithdrawTagAndParams(tag, params);\n this.checkAddress(address);\n await this.loadMarkets();\n const currency = this.currency(code);\n const request = {\n 'forceProxy': true,\n 'coin': currency['id'],\n 'address': address,\n // https://binance-docs.github.io/apidocs/spot/en/#withdraw-sapi\n // issue sapiGetCapitalConfigGetall () to get networks for withdrawing USDT ERC20 vs USDT Omni\n // 'network': 'ETH', // 'BTC', 'TRX', etc, optional\n };\n if (tag !== undefined) {\n request['addressTag'] = tag;\n }\n const networks = this.safeDict(this.options, 'networks', {});\n let network = this.safeStringUpper(params, 'network'); // this line allows the user to specify either ERC20 or ETH\n const precisionAmount = this.currencyToPrecision(code, amount, network);\n request['amount'] = precisionAmount;\n network = this.safeString(networks, network, network); // handle ERC20>ETH alias\n if (network !== undefined) {\n request['network'] = network;\n params = this.omit(params, 'network');\n }\n const response = await this.sapiPostCapitalWithdrawApply(this.extend(request, params));\n // { id: '9a67628b16ba4988ae20d329333f16bc' }\n return this.parseTransaction(response, currency);\n }\n parseTradingFee(fee, market = undefined) {\n //\n // spot\n // [\n // {\n // \"symbol\": \"BTCUSDT\",\n // \"makerCommission\": \"0.001\",\n // \"takerCommission\": \"0.001\"\n // }\n // ]\n //\n // swap\n // {\n // \"symbol\": \"BTCUSD_PERP\",\n // \"makerCommissionRate\": \"0.00015\", // 0.015%\n // \"takerCommissionRate\": \"0.00040\" // 0.040%\n // }\n //\n const marketId = this.safeString(fee, 'symbol');\n const symbol = this.safeSymbol(marketId, market, undefined, 'spot');\n return {\n 'info': fee,\n 'symbol': symbol,\n 'maker': this.safeNumber2(fee, 'makerCommission', 'makerCommissionRate'),\n 'taker': this.safeNumber2(fee, 'takerCommission', 'takerCommissionRate'),\n };\n }\n async fetchTradingFee(symbol, params = {}) {\n /**\n * @method\n * @name binance#fetchTradingFee\n * @description fetch the trading fees for a market\n * @see https://binance-docs.github.io/apidocs/spot/en/#trade-fee-user_data\n * @see https://binance-docs.github.io/apidocs/futures/en/#user-commission-rate-user_data\n * @see https://binance-docs.github.io/apidocs/delivery/en/#user-commission-rate-user_data\n * @see https://binance-docs.github.io/apidocs/pm/en/#get-user-commission-rate-for-um-user_data\n * @see https://binance-docs.github.io/apidocs/pm/en/#get-user-commission-rate-for-cm-user_data\n * @param {string} symbol unified market symbol\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {boolean} [params.portfolioMargin] set to true if you would like to fetch trading fees in a portfolio margin account\n * @returns {object} a [fee structure]{@link https://docs.ccxt.com/#/?id=fee-structure}\n */\n await this.loadMarkets();\n const market = this.market(symbol);\n const type = market['type'];\n let subType = undefined;\n [subType, params] = this.handleSubTypeAndParams('fetchTradingFee', market, params);\n let isPortfolioMargin = undefined;\n [isPortfolioMargin, params] = this.handleOptionAndParams2(params, 'fetchTradingFee', 'papi', 'portfolioMargin', false);\n const isLinear = this.isLinear(type, subType);\n const isInverse = this.isInverse(type, subType);\n const request = {\n 'symbol': market['id'],\n };\n let response = undefined;\n if (isLinear) {\n if (isPortfolioMargin) {\n response = await this.papiGetUmCommissionRate(this.extend(request, params));\n }\n else {\n response = await this.fapiPrivateGetCommissionRate(this.extend(request, params));\n }\n }\n else if (isInverse) {\n if (isPortfolioMargin) {\n response = await this.papiGetCmCommissionRate(this.extend(request, params));\n }\n else {\n response = await this.dapiPrivateGetCommissionRate(this.extend(request, params));\n }\n }\n else {\n response = await this.sapiGetAssetTradeFee(this.extend(request, params));\n }\n //\n // spot\n //\n // [\n // {\n // \"symbol\": \"BTCUSDT\",\n // \"makerCommission\": \"0.001\",\n // \"takerCommission\": \"0.001\"\n // }\n // ]\n //\n // swap\n //\n // {\n // \"symbol\": \"BTCUSD_PERP\",\n // \"makerCommissionRate\": \"0.00015\", // 0.015%\n // \"takerCommissionRate\": \"0.00040\" // 0.040%\n // }\n //\n let data = response;\n if (Array.isArray(data)) {\n data = this.safeDict(data, 0, {});\n }\n return this.parseTradingFee(data, market);\n }\n async fetchTradingFees(params = {}) {\n /**\n * @method\n * @name binance#fetchTradingFees\n * @description fetch the trading fees for multiple markets\n * @see https://binance-docs.github.io/apidocs/spot/en/#trade-fee-user_data\n * @see https://binance-docs.github.io/apidocs/futures/en/#account-information-v2-user_data\n * @see https://binance-docs.github.io/apidocs/delivery/en/#account-information-user_data\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} a dictionary of [fee structures]{@link https://docs.ccxt.com/#/?id=fee-structure} indexed by market symbols\n */\n await this.loadMarkets();\n let type = undefined;\n [type, params] = this.handleMarketTypeAndParams('fetchTradingFees', undefined, params);\n let subType = undefined;\n [subType, params] = this.handleSubTypeAndParams('fetchTradingFees', undefined, params, 'linear');\n const isSpotOrMargin = (type === 'spot') || (type === 'margin');\n const isLinear = this.isLinear(type, subType);\n const isInverse = this.isInverse(type, subType);\n let response = undefined;\n if (isSpotOrMargin) {\n response = await this.sapiGetAssetTradeFee(params);\n }\n else if (isLinear) {\n response = await this.fapiPrivateV2GetAccount(params);\n }\n else if (isInverse) {\n response = await this.dapiPrivateGetAccount(params);\n }\n //\n // sapi / spot\n //\n // [\n // {\n // \"symbol\": \"ZRXBNB\",\n // \"makerCommission\": \"0.001\",\n // \"takerCommission\": \"0.001\"\n // },\n // {\n // \"symbol\": \"ZRXBTC\",\n // \"makerCommission\": \"0.001\",\n // \"takerCommission\": \"0.001\"\n // },\n // ]\n //\n // fapi / future / linear\n //\n // {\n // \"feeTier\": 0, // account commisssion tier\n // \"canTrade\": true, // if can trade\n // \"canDeposit\": true, // if can transfer in asset\n // \"canWithdraw\": true, // if can transfer out asset\n // \"updateTime\": 0,\n // \"totalInitialMargin\": \"0.00000000\", // total initial margin required with current mark price (useless with isolated positions), only for USDT asset\n // \"totalMaintMargin\": \"0.00000000\", // total maintenance margin required, only for USDT asset\n // \"totalWalletBalance\": \"23.72469206\", // total wallet balance, only for USDT asset\n // \"totalUnrealizedProfit\": \"0.00000000\", // total unrealized profit, only for USDT asset\n // \"totalMarginBalance\": \"23.72469206\", // total margin balance, only for USDT asset\n // \"totalPositionInitialMargin\": \"0.00000000\", // initial margin required for positions with current mark price, only for USDT asset\n // \"totalOpenOrderInitialMargin\": \"0.00000000\", // initial margin required for open orders with current mark price, only for USDT asset\n // \"totalCrossWalletBalance\": \"23.72469206\", // crossed wallet balance, only for USDT asset\n // \"totalCrossUnPnl\": \"0.00000000\", // unrealized profit of crossed positions, only for USDT asset\n // \"availableBalance\": \"23.72469206\", // available balance, only for USDT asset\n // \"maxWithdrawAmount\": \"23.72469206\" // maximum amount for transfer out, only for USDT asset\n // ...\n // }\n //\n // dapi / delivery / inverse\n //\n // {\n // \"canDeposit\": true,\n // \"canTrade\": true,\n // \"canWithdraw\": true,\n // \"feeTier\": 2,\n // \"updateTime\": 0\n // }\n //\n if (isSpotOrMargin) {\n //\n // [\n // {\n // \"symbol\": \"ZRXBNB\",\n // \"makerCommission\": \"0.001\",\n // \"takerCommission\": \"0.001\"\n // },\n // {\n // \"symbol\": \"ZRXBTC\",\n // \"makerCommission\": \"0.001\",\n // \"takerCommission\": \"0.001\"\n // },\n // ]\n //\n const result = {};\n for (let i = 0; i < response.length; i++) {\n const fee = this.parseTradingFee(response[i]);\n const symbol = fee['symbol'];\n result[symbol] = fee;\n }\n return result;\n }\n else if (isLinear) {\n //\n // {\n // \"feeTier\": 0, // account commisssion tier\n // \"canTrade\": true, // if can trade\n // \"canDeposit\": true, // if can transfer in asset\n // \"canWithdraw\": true, // if can transfer out asset\n // \"updateTime\": 0,\n // \"totalInitialMargin\": \"0.00000000\", // total initial margin required with current mark price (useless with isolated positions), only for USDT asset\n // \"totalMaintMargin\": \"0.00000000\", // total maintenance margin required, only for USDT asset\n // \"totalWalletBalance\": \"23.72469206\", // total wallet balance, only for USDT asset\n // \"totalUnrealizedProfit\": \"0.00000000\", // total unrealized profit, only for USDT asset\n // \"totalMarginBalance\": \"23.72469206\", // total margin balance, only for USDT asset\n // \"totalPositionInitialMargin\": \"0.00000000\", // initial margin required for positions with current mark price, only for USDT asset\n // \"totalOpenOrderInitialMargin\": \"0.00000000\", // initial margin required for open orders with current mark price, only for USDT asset\n // \"totalCrossWalletBalance\": \"23.72469206\", // crossed wallet balance, only for USDT asset\n // \"totalCrossUnPnl\": \"0.00000000\", // unrealized profit of crossed positions, only for USDT asset\n // \"availableBalance\": \"23.72469206\", // available balance, only for USDT asset\n // \"maxWithdrawAmount\": \"23.72469206\" // maximum amount for transfer out, only for USDT asset\n // ...\n // }\n //\n const symbols = Object.keys(this.markets);\n const result = {};\n const feeTier = this.safeInteger(response, 'feeTier');\n const feeTiers = this.fees['linear']['trading']['tiers'];\n const maker = feeTiers['maker'][feeTier][1];\n const taker = feeTiers['taker'][feeTier][1];\n for (let i = 0; i < symbols.length; i++) {\n const symbol = symbols[i];\n const market = this.markets[symbol];\n if (market['linear']) {\n result[symbol] = {\n 'info': {\n 'feeTier': feeTier,\n },\n 'symbol': symbol,\n 'maker': maker,\n 'taker': taker,\n };\n }\n }\n return result;\n }\n else if (isInverse) {\n //\n // {\n // \"canDeposit\": true,\n // \"canTrade\": true,\n // \"canWithdraw\": true,\n // \"feeTier\": 2,\n // \"updateTime\": 0\n // }\n //\n const symbols = Object.keys(this.markets);\n const result = {};\n const feeTier = this.safeInteger(response, 'feeTier');\n const feeTiers = this.fees['inverse']['trading']['tiers'];\n const maker = feeTiers['maker'][feeTier][1];\n const taker = feeTiers['taker'][feeTier][1];\n for (let i = 0; i < symbols.length; i++) {\n const symbol = symbols[i];\n const market = this.markets[symbol];\n if (market['inverse']) {\n result[symbol] = {\n 'info': {\n 'feeTier': feeTier,\n },\n 'symbol': symbol,\n 'maker': maker,\n 'taker': taker,\n };\n }\n }\n return result;\n }\n return undefined;\n }\n parseAccountPositions(account) {\n const positions = this.safeList(account, 'positions');\n const assets = this.safeList(account, 'assets', []);\n const balances = {};\n for (let i = 0; i < assets.length; i++) {\n const entry = assets[i];\n const currencyId = this.safeString(entry, 'asset');\n const code = this.safeCurrencyCode(currencyId);\n const crossWalletBalance = this.safeString(entry, 'crossWalletBalance');\n const crossUnPnl = this.safeString(entry, 'crossUnPnl');\n balances[code] = {\n 'crossMargin': Precise.stringAdd(crossWalletBalance, crossUnPnl),\n 'crossWalletBalance': crossWalletBalance,\n };\n }\n const result = [];\n for (let i = 0; i < positions.length; i++) {\n const position = positions[i];\n const marketId = this.safeString(position, 'symbol');\n const market = this.safeMarket(marketId, undefined, undefined, 'contract');\n const code = market['linear'] ? market['quote'] : market['base'];\n const maintenanceMargin = this.safeString(position, 'maintMargin');\n // check for maintenance margin so empty positions are not returned\n if ((maintenanceMargin !== '0') && (maintenanceMargin !== '0.00000000')) {\n // sometimes not all the codes are correctly returned...\n if (code in balances) {\n const parsed = this.parseAccountPosition(this.extend(position, {\n 'crossMargin': balances[code]['crossMargin'],\n 'crossWalletBalance': balances[code]['crossWalletBalance'],\n }), market);\n result.push(parsed);\n }\n }\n }\n return result;\n }\n parseAccountPosition(position, market = undefined) {\n //\n // usdm\n //\n // {\n // \"symbol\": \"BTCBUSD\",\n // \"initialMargin\": \"0\",\n // \"maintMargin\": \"0\",\n // \"unrealizedProfit\": \"0.00000000\",\n // \"positionInitialMargin\": \"0\",\n // \"openOrderInitialMargin\": \"0\",\n // \"leverage\": \"20\",\n // \"isolated\": false,\n // \"entryPrice\": \"0.0000\",\n // \"maxNotional\": \"100000\",\n // \"positionSide\": \"BOTH\",\n // \"positionAmt\": \"0.000\",\n // \"notional\": \"0\",\n // \"isolatedWallet\": \"0\",\n // \"updateTime\": \"0\",\n // \"crossMargin\": \"100.93634809\",\n // }\n //\n // coinm\n //\n // {\n // \"symbol\": \"BTCUSD_210625\",\n // \"initialMargin\": \"0.00024393\",\n // \"maintMargin\": \"0.00002439\",\n // \"unrealizedProfit\": \"-0.00000163\",\n // \"positionInitialMargin\": \"0.00024393\",\n // \"openOrderInitialMargin\": \"0\",\n // \"leverage\": \"10\",\n // \"isolated\": false,\n // \"positionSide\": \"BOTH\",\n // \"entryPrice\": \"41021.20000069\",\n // \"maxQty\": \"100\",\n // \"notionalValue\": \"0.00243939\",\n // \"isolatedWallet\": \"0\",\n // \"crossMargin\": \"0.314\"\n // \"crossWalletBalance\": \"34\",\n // }\n //\n // linear portfolio margin\n //\n // {\n // \"symbol\": \"CTSIUSDT\",\n // \"initialMargin\": \"0\",\n // \"maintMargin\": \"0\",\n // \"unrealizedProfit\": \"0.00000000\",\n // \"positionInitialMargin\": \"0\",\n // \"openOrderInitialMargin\": \"0\",\n // \"leverage\": \"20\",\n // \"entryPrice\": \"0.0\",\n // \"maxNotional\": \"25000\",\n // \"bidNotional\": \"0\",\n // \"askNotional\": \"0\",\n // \"positionSide\": \"SHORT\",\n // \"positionAmt\": \"0\",\n // \"updateTime\": 0,\n // \"notional\": \"0\",\n // \"breakEvenPrice\": \"0.0\"\n // }\n //\n // inverse portoflio margin\n //\n // {\n // \"symbol\": \"TRXUSD_PERP\",\n // \"initialMargin\": \"0\",\n // \"maintMargin\": \"0\",\n // \"unrealizedProfit\": \"0.00000000\",\n // \"positionInitialMargin\": \"0\",\n // \"openOrderInitialMargin\": \"0\",\n // \"leverage\": \"20\",\n // \"entryPrice\": \"0.00000000\",\n // \"positionSide\": \"SHORT\",\n // \"positionAmt\": \"0\",\n // \"maxQty\": \"5000000\",\n // \"updateTime\": 0,\n // \"notionalValue\": \"0\",\n // \"breakEvenPrice\": \"0.00000000\"\n // }\n //\n const marketId = this.safeString(position, 'symbol');\n market = this.safeMarket(marketId, market, undefined, 'contract');\n const symbol = this.safeString(market, 'symbol');\n const leverageString = this.safeString(position, 'leverage');\n const leverage = parseInt(leverageString);\n const initialMarginString = this.safeString(position, 'initialMargin');\n const initialMargin = this.parseNumber(initialMarginString);\n let initialMarginPercentageString = Precise.stringDiv('1', leverageString, 8);\n const rational = this.isRoundNumber(1000 % leverage);\n if (!rational) {\n initialMarginPercentageString = Precise.stringDiv(Precise.stringAdd(initialMarginPercentageString, '1e-8'), '1', 8);\n }\n // as oppose to notionalValue\n const usdm = ('notional' in position);\n const maintenanceMarginString = this.safeString(position, 'maintMargin');\n const maintenanceMargin = this.parseNumber(maintenanceMarginString);\n const entryPriceString = this.safeString(position, 'entryPrice');\n let entryPrice = this.parseNumber(entryPriceString);\n const notionalString = this.safeString2(position, 'notional', 'notionalValue');\n const notionalStringAbs = Precise.stringAbs(notionalString);\n const notional = this.parseNumber(notionalStringAbs);\n let contractsString = this.safeString(position, 'positionAmt');\n let contractsStringAbs = Precise.stringAbs(contractsString);\n if (contractsString === undefined) {\n const entryNotional = Precise.stringMul(Precise.stringMul(leverageString, initialMarginString), entryPriceString);\n const contractSizeNew = this.safeString(market, 'contractSize');\n contractsString = Precise.stringDiv(entryNotional, contractSizeNew);\n contractsStringAbs = Precise.stringDiv(Precise.stringAdd(contractsString, '0.5'), '1', 0);\n }\n const contracts = this.parseNumber(contractsStringAbs);\n const leverageBrackets = this.safeDict(this.options, 'leverageBrackets', {});\n const leverageBracket = this.safeList(leverageBrackets, symbol, []);\n let maintenanceMarginPercentageString = undefined;\n for (let i = 0; i < leverageBracket.length; i++) {\n const bracket = leverageBracket[i];\n if (Precise.stringLt(notionalStringAbs, bracket[0])) {\n break;\n }\n maintenanceMarginPercentageString = bracket[1];\n }\n const maintenanceMarginPercentage = this.parseNumber(maintenanceMarginPercentageString);\n const unrealizedPnlString = this.safeString(position, 'unrealizedProfit');\n const unrealizedPnl = this.parseNumber(unrealizedPnlString);\n let timestamp = this.safeInteger(position, 'updateTime');\n if (timestamp === 0) {\n timestamp = undefined;\n }\n const isolated = this.safeBool(position, 'isolated');\n let marginMode = undefined;\n let collateralString = undefined;\n let walletBalance = undefined;\n if (isolated) {\n marginMode = 'isolated';\n walletBalance = this.safeString(position, 'isolatedWallet');\n collateralString = Precise.stringAdd(walletBalance, unrealizedPnlString);\n }\n else {\n marginMode = 'cross';\n walletBalance = this.safeString(position, 'crossWalletBalance');\n collateralString = this.safeString(position, 'crossMargin');\n }\n const collateral = this.parseNumber(collateralString);\n let marginRatio = undefined;\n let side = undefined;\n let percentage = undefined;\n let liquidationPriceStringRaw = undefined;\n let liquidationPrice = undefined;\n const contractSize = this.safeValue(market, 'contractSize');\n const contractSizeString = this.numberToString(contractSize);\n if (Precise.stringEquals(notionalString, '0')) {\n entryPrice = undefined;\n }\n else {\n side = Precise.stringLt(notionalString, '0') ? 'short' : 'long';\n marginRatio = this.parseNumber(Precise.stringDiv(Precise.stringAdd(Precise.stringDiv(maintenanceMarginString, collateralString), '5e-5'), '1', 4));\n percentage = this.parseNumber(Precise.stringMul(Precise.stringDiv(unrealizedPnlString, initialMarginString, 4), '100'));\n if (usdm) {\n // calculate liquidation price\n //\n // liquidationPrice = (walletBalance / (contracts * (±1 + mmp))) + (±entryPrice / (±1 + mmp))\n //\n // mmp = maintenanceMarginPercentage\n // where ± is negative for long and positive for short\n // TODO: calculate liquidation price for coinm contracts\n let onePlusMaintenanceMarginPercentageString = undefined;\n let entryPriceSignString = entryPriceString;\n if (side === 'short') {\n onePlusMaintenanceMarginPercentageString = Precise.stringAdd('1', maintenanceMarginPercentageString);\n }\n else {\n onePlusMaintenanceMarginPercentageString = Precise.stringAdd('-1', maintenanceMarginPercentageString);\n entryPriceSignString = Precise.stringMul('-1', entryPriceSignString);\n }\n const leftSide = Precise.stringDiv(walletBalance, Precise.stringMul(contractsStringAbs, onePlusMaintenanceMarginPercentageString));\n const rightSide = Precise.stringDiv(entryPriceSignString, onePlusMaintenanceMarginPercentageString);\n liquidationPriceStringRaw = Precise.stringAdd(leftSide, rightSide);\n }\n else {\n // calculate liquidation price\n //\n // liquidationPrice = (contracts * contractSize(±1 - mmp)) / (±1/entryPrice * contracts * contractSize - walletBalance)\n //\n let onePlusMaintenanceMarginPercentageString = undefined;\n let entryPriceSignString = entryPriceString;\n if (side === 'short') {\n onePlusMaintenanceMarginPercentageString = Precise.stringSub('1', maintenanceMarginPercentageString);\n }\n else {\n onePlusMaintenanceMarginPercentageString = Precise.stringSub('-1', maintenanceMarginPercentageString);\n entryPriceSignString = Precise.stringMul('-1', entryPriceSignString);\n }\n const size = Precise.stringMul(contractsStringAbs, contractSizeString);\n const leftSide = Precise.stringMul(size, onePlusMaintenanceMarginPercentageString);\n const rightSide = Precise.stringSub(Precise.stringMul(Precise.stringDiv('1', entryPriceSignString), size), walletBalance);\n liquidationPriceStringRaw = Precise.stringDiv(leftSide, rightSide);\n }\n const pricePrecision = market['precision']['price'];\n const pricePrecisionPlusOne = pricePrecision + 1;\n const pricePrecisionPlusOneString = pricePrecisionPlusOne.toString();\n // round half up\n const rounder = new Precise('5e-' + pricePrecisionPlusOneString);\n const rounderString = rounder.toString();\n const liquidationPriceRoundedString = Precise.stringAdd(rounderString, liquidationPriceStringRaw);\n let truncatedLiquidationPrice = Precise.stringDiv(liquidationPriceRoundedString, '1', pricePrecision);\n if (truncatedLiquidationPrice[0] === '-') {\n // user cannot be liquidated\n // since he has more collateral than the size of the position\n truncatedLiquidationPrice = undefined;\n }\n liquidationPrice = this.parseNumber(truncatedLiquidationPrice);\n }\n const positionSide = this.safeString(position, 'positionSide');\n const hedged = positionSide !== 'BOTH';\n return {\n 'info': position,\n 'id': undefined,\n 'symbol': symbol,\n 'timestamp': timestamp,\n 'datetime': this.iso8601(timestamp),\n 'initialMargin': initialMargin,\n 'initialMarginPercentage': this.parseNumber(initialMarginPercentageString),\n 'maintenanceMargin': maintenanceMargin,\n 'maintenanceMarginPercentage': maintenanceMarginPercentage,\n 'entryPrice': entryPrice,\n 'notional': notional,\n 'leverage': this.parseNumber(leverageString),\n 'unrealizedPnl': unrealizedPnl,\n 'contracts': contracts,\n 'contractSize': contractSize,\n 'marginRatio': marginRatio,\n 'liquidationPrice': liquidationPrice,\n 'markPrice': undefined,\n 'collateral': collateral,\n 'marginMode': marginMode,\n 'side': side,\n 'hedged': hedged,\n 'percentage': percentage,\n };\n }\n parsePositionRisk(position, market = undefined) {\n //\n // usdm\n //\n // {\n // \"symbol\": \"BTCUSDT\",\n // \"positionAmt\": \"0.001\",\n // \"entryPrice\": \"43578.07000\",\n // \"markPrice\": \"43532.30000000\",\n // \"unRealizedProfit\": \"-0.04577000\",\n // \"liquidationPrice\": \"21841.24993976\",\n // \"leverage\": \"2\",\n // \"maxNotionalValue\": \"300000000\",\n // \"marginType\": \"isolated\",\n // \"isolatedMargin\": \"21.77841506\",\n // \"isAutoAddMargin\": \"false\",\n // \"positionSide\": \"BOTH\",\n // \"notional\": \"43.53230000\",\n // \"isolatedWallet\": \"21.82418506\",\n // \"updateTime\": \"1621358023886\"\n // }\n //\n // coinm\n //\n // {\n // \"symbol\": \"BTCUSD_PERP\",\n // \"positionAmt\": \"2\",\n // \"entryPrice\": \"37643.10000021\",\n // \"markPrice\": \"38103.05510455\",\n // \"unRealizedProfit\": \"0.00006413\",\n // \"liquidationPrice\": \"25119.97445760\",\n // \"leverage\": \"2\",\n // \"maxQty\": \"1500\",\n // \"marginType\": \"isolated\",\n // \"isolatedMargin\": \"0.00274471\",\n // \"isAutoAddMargin\": \"false\",\n // \"positionSide\": \"BOTH\",\n // \"notionalValue\": \"0.00524892\",\n // \"isolatedWallet\": \"0.00268058\"\n // }\n //\n // inverse portfolio margin\n //\n // {\n // \"symbol\": \"ETHUSD_PERP\",\n // \"positionAmt\": \"1\",\n // \"entryPrice\": \"2422.400000007\",\n // \"markPrice\": \"2424.51267823\",\n // \"unRealizedProfit\": \"0.0000036\",\n // \"liquidationPrice\": \"293.57678898\",\n // \"leverage\": \"100\",\n // \"positionSide\": \"LONG\",\n // \"updateTime\": 1707371941861,\n // \"maxQty\": \"15\",\n // \"notionalValue\": \"0.00412454\",\n // \"breakEvenPrice\": \"2423.368960034\"\n // }\n //\n // linear portfolio margin\n //\n // {\n // \"symbol\": \"BTCUSDT\",\n // \"positionAmt\": \"0.01\",\n // \"entryPrice\": \"44525.0\",\n // \"markPrice\": \"45464.1735922\",\n // \"unRealizedProfit\": \"9.39173592\",\n // \"liquidationPrice\": \"38007.16308568\",\n // \"leverage\": \"100\",\n // \"positionSide\": \"LONG\",\n // \"updateTime\": 1707371879042,\n // \"maxNotionalValue\": \"500000.0\",\n // \"notional\": \"454.64173592\",\n // \"breakEvenPrice\": \"44542.81\"\n // }\n //\n const marketId = this.safeString(position, 'symbol');\n market = this.safeMarket(marketId, market, undefined, 'contract');\n const symbol = this.safeString(market, 'symbol');\n const leverageBrackets = this.safeDict(this.options, 'leverageBrackets', {});\n const leverageBracket = this.safeList(leverageBrackets, symbol, []);\n const notionalString = this.safeString2(position, 'notional', 'notionalValue');\n const notionalStringAbs = Precise.stringAbs(notionalString);\n let maintenanceMarginPercentageString = undefined;\n for (let i = 0; i < leverageBracket.length; i++) {\n const bracket = leverageBracket[i];\n if (Precise.stringLt(notionalStringAbs, bracket[0])) {\n break;\n }\n maintenanceMarginPercentageString = bracket[1];\n }\n const notional = this.parseNumber(notionalStringAbs);\n const contractsAbs = Precise.stringAbs(this.safeString(position, 'positionAmt'));\n const contracts = this.parseNumber(contractsAbs);\n const unrealizedPnlString = this.safeString(position, 'unRealizedProfit');\n const unrealizedPnl = this.parseNumber(unrealizedPnlString);\n const leverageString = this.safeString(position, 'leverage');\n const leverage = parseInt(leverageString);\n const liquidationPriceString = this.omitZero(this.safeString(position, 'liquidationPrice'));\n const liquidationPrice = this.parseNumber(liquidationPriceString);\n let collateralString = undefined;\n const marginMode = this.safeString(position, 'marginType');\n let side = undefined;\n if (Precise.stringGt(notionalString, '0')) {\n side = 'long';\n }\n else if (Precise.stringLt(notionalString, '0')) {\n side = 'short';\n }\n const entryPriceString = this.safeString(position, 'entryPrice');\n const entryPrice = this.parseNumber(entryPriceString);\n const contractSize = this.safeValue(market, 'contractSize');\n const contractSizeString = this.numberToString(contractSize);\n // as oppose to notionalValue\n const linear = ('notional' in position);\n if (marginMode === 'cross') {\n // calculate collateral\n const precision = this.safeDict(market, 'precision', {});\n if (linear) {\n // walletBalance = (liquidationPrice * (±1 + mmp) ± entryPrice) * contracts\n let onePlusMaintenanceMarginPercentageString = undefined;\n let entryPriceSignString = entryPriceString;\n if (side === 'short') {\n onePlusMaintenanceMarginPercentageString = Precise.stringAdd('1', maintenanceMarginPercentageString);\n entryPriceSignString = Precise.stringMul('-1', entryPriceSignString);\n }\n else {\n onePlusMaintenanceMarginPercentageString = Precise.stringAdd('-1', maintenanceMarginPercentageString);\n }\n const inner = Precise.stringMul(liquidationPriceString, onePlusMaintenanceMarginPercentageString);\n const leftSide = Precise.stringAdd(inner, entryPriceSignString);\n const pricePrecision = this.safeInteger(precision, 'price');\n const quotePrecision = this.safeInteger(precision, 'quote', pricePrecision);\n if (quotePrecision !== undefined) {\n collateralString = Precise.stringDiv(Precise.stringMul(leftSide, contractsAbs), '1', quotePrecision);\n }\n }\n else {\n // walletBalance = (contracts * contractSize) * (±1/entryPrice - (±1 - mmp) / liquidationPrice)\n let onePlusMaintenanceMarginPercentageString = undefined;\n let entryPriceSignString = entryPriceString;\n if (side === 'short') {\n onePlusMaintenanceMarginPercentageString = Precise.stringSub('1', maintenanceMarginPercentageString);\n }\n else {\n onePlusMaintenanceMarginPercentageString = Precise.stringSub('-1', maintenanceMarginPercentageString);\n entryPriceSignString = Precise.stringMul('-1', entryPriceSignString);\n }\n const leftSide = Precise.stringMul(contractsAbs, contractSizeString);\n const rightSide = Precise.stringSub(Precise.stringDiv('1', entryPriceSignString), Precise.stringDiv(onePlusMaintenanceMarginPercentageString, liquidationPriceString));\n const basePrecision = this.safeInteger(precision, 'base');\n if (basePrecision !== undefined) {\n collateralString = Precise.stringDiv(Precise.stringMul(leftSide, rightSide), '1', basePrecision);\n }\n }\n }\n else {\n collateralString = this.safeString(position, 'isolatedMargin');\n }\n collateralString = (collateralString === undefined) ? '0' : collateralString;\n const collateral = this.parseNumber(collateralString);\n const markPrice = this.parseNumber(this.omitZero(this.safeString(position, 'markPrice')));\n let timestamp = this.safeInteger(position, 'updateTime');\n if (timestamp === 0) {\n timestamp = undefined;\n }\n const maintenanceMarginPercentage = this.parseNumber(maintenanceMarginPercentageString);\n const maintenanceMarginString = Precise.stringMul(maintenanceMarginPercentageString, notionalStringAbs);\n const maintenanceMargin = this.parseNumber(maintenanceMarginString);\n let initialMarginPercentageString = Precise.stringDiv('1', leverageString, 8);\n const rational = this.isRoundNumber(1000 % leverage);\n if (!rational) {\n initialMarginPercentageString = Precise.stringAdd(initialMarginPercentageString, '1e-8');\n }\n const initialMarginString = Precise.stringDiv(Precise.stringMul(notionalStringAbs, initialMarginPercentageString), '1', 8);\n const initialMargin = this.parseNumber(initialMarginString);\n let marginRatio = undefined;\n let percentage = undefined;\n if (!Precise.stringEquals(collateralString, '0')) {\n marginRatio = this.parseNumber(Precise.stringDiv(Precise.stringAdd(Precise.stringDiv(maintenanceMarginString, collateralString), '5e-5'), '1', 4));\n percentage = this.parseNumber(Precise.stringMul(Precise.stringDiv(unrealizedPnlString, initialMarginString, 4), '100'));\n }\n const positionSide = this.safeString(position, 'positionSide');\n const hedged = positionSide !== 'BOTH';\n return {\n 'info': position,\n 'id': undefined,\n 'symbol': symbol,\n 'contracts': contracts,\n 'contractSize': contractSize,\n 'unrealizedPnl': unrealizedPnl,\n 'leverage': this.parseNumber(leverageString),\n 'liquidationPrice': liquidationPrice,\n 'collateral': collateral,\n 'notional': notional,\n 'markPrice': markPrice,\n 'entryPrice': entryPrice,\n 'timestamp': timestamp,\n 'initialMargin': initialMargin,\n 'initialMarginPercentage': this.parseNumber(initialMarginPercentageString),\n 'maintenanceMargin': maintenanceMargin,\n 'maintenanceMarginPercentage': maintenanceMarginPercentage,\n 'marginRatio': marginRatio,\n 'datetime': this.iso8601(timestamp),\n 'marginMode': marginMode,\n 'marginType': marginMode,\n 'side': side,\n 'hedged': hedged,\n 'percentage': percentage,\n 'stopLossPrice': undefined,\n 'takeProfitPrice': undefined,\n };\n }\n async loadLeverageBrackets(reload = false, params = {}) {\n await this.loadMarkets();\n // by default cache the leverage bracket\n // it contains useful stuff like the maintenance margin and initial margin for positions\n const leverageBrackets = this.safeValue(this.options, 'leverageBrackets');\n if ((leverageBrackets === undefined) || (reload)) {\n const defaultType = this.safeString(this.options, 'defaultType', 'future');\n const type = this.safeString(params, 'type', defaultType);\n const query = this.omit(params, 'type');\n let subType = undefined;\n [subType, params] = this.handleSubTypeAndParams('loadLeverageBrackets', undefined, params, 'linear');\n let isPortfolioMargin = undefined;\n [isPortfolioMargin, params] = this.handleOptionAndParams2(params, 'loadLeverageBrackets', 'papi', 'portfolioMargin', false);\n let response = undefined;\n if (this.isLinear(type, subType)) {\n if (isPortfolioMargin) {\n response = await this.papiGetUmLeverageBracket(query);\n }\n else {\n response = await this.fapiPrivateGetLeverageBracket(query);\n }\n }\n else if (this.isInverse(type, subType)) {\n if (isPortfolioMargin) {\n response = await this.papiGetCmLeverageBracket(query);\n }\n else {\n response = await this.dapiPrivateV2GetLeverageBracket(query);\n }\n }\n else {\n throw new InvalidParamsError('loadLeverageBrackets() supports linear and inverse contracts only')\n .exchange(this.id);\n }\n this.options['leverageBrackets'] = {};\n for (let i = 0; i < response.length; i++) {\n const entry = response[i];\n const marketId = this.safeString(entry, 'symbol');\n const symbol = this.safeSymbol(marketId, undefined, undefined, 'contract');\n const brackets = this.safeList(entry, 'brackets', []);\n const result = [];\n for (let j = 0; j < brackets.length; j++) {\n const bracket = brackets[j];\n const floorValue = this.safeString2(bracket, 'notionalFloor', 'qtyFloor');\n const maintenanceMarginPercentage = this.safeString(bracket, 'maintMarginRatio');\n result.push([floorValue, maintenanceMarginPercentage]);\n }\n this.options['leverageBrackets'][symbol] = result;\n }\n }\n return this.options['leverageBrackets'];\n }\n async fetchPosition(symbol, params = {}) {\n /**\n * @method\n * @name binance#fetchPosition\n * @see https://binance-docs.github.io/apidocs/voptions/en/#option-position-information-user_data\n * @description fetch data on an open position\n * @param {string} symbol unified market symbol of the market the position is held in\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} a [position structure]{@link https://docs.ccxt.com/#/?id=position-structure}\n */\n await this.loadMarkets();\n const market = this.market(symbol);\n if (!market['option']) {\n throw new MarketTypeNotSupportedError(market['type'])\n .addMessage('It supports option markets only')\n .exchange(this.id);\n }\n const request = {\n 'symbol': market['id'],\n };\n const response = await this.eapiPrivateGetPosition(this.extend(request, params));\n //\n // [\n // {\n // \"entryPrice\": \"27.70000000\",\n // \"symbol\": \"ETH-230426-1850-C\",\n // \"side\": \"LONG\",\n // \"quantity\": \"0.50000000\",\n // \"reducibleQty\": \"0.50000000\",\n // \"markValue\": \"10.250000000\",\n // \"ror\": \"-0.2599\",\n // \"unrealizedPNL\": \"-3.600000000\",\n // \"markPrice\": \"20.5\",\n // \"strikePrice\": \"1850.00000000\",\n // \"positionCost\": \"13.85000000\",\n // \"expiryDate\": 1682496000000,\n // \"priceScale\": 1,\n // \"quantityScale\": 2,\n // \"optionSide\": \"CALL\",\n // \"quoteAsset\": \"USDT\",\n // \"time\": 1682492427106\n // }\n // ]\n //\n return this.parsePosition(response[0], market);\n }\n async fetchOptionPositions(symbols = undefined, params = {}) {\n /**\n * @method\n * @name binance#fetchOptionPositions\n * @see https://binance-docs.github.io/apidocs/voptions/en/#option-position-information-user_data\n * @description fetch data on open options positions\n * @param {string[]|undefined} symbols list of unified market symbols\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object[]} a list of [position structures]{@link https://docs.ccxt.com/#/?id=position-structure}\n */\n await this.loadMarkets();\n symbols = this.marketSymbols(symbols);\n const request = {};\n let market = undefined;\n if (symbols !== undefined) {\n let symbol = undefined;\n if (Array.isArray(symbols)) {\n const symbolsLength = symbols.length;\n if (symbolsLength > 1) {\n throw new InvalidParamsError('fetchPositions() symbols argument cannot contain more than 1 symbol')\n .exchange(this.id);\n }\n symbol = symbols[0];\n }\n else {\n symbol = symbols;\n }\n market = this.market(symbol);\n request['symbol'] = market['id'];\n }\n const response = await this.eapiPrivateGetPosition(this.extend(request, params));\n //\n // [\n // {\n // \"entryPrice\": \"27.70000000\",\n // \"symbol\": \"ETH-230426-1850-C\",\n // \"side\": \"LONG\",\n // \"quantity\": \"0.50000000\",\n // \"reducibleQty\": \"0.50000000\",\n // \"markValue\": \"10.250000000\",\n // \"ror\": \"-0.2599\",\n // \"unrealizedPNL\": \"-3.600000000\",\n // \"markPrice\": \"20.5\",\n // \"strikePrice\": \"1850.00000000\",\n // \"positionCost\": \"13.85000000\",\n // \"expiryDate\": 1682496000000,\n // \"priceScale\": 1,\n // \"quantityScale\": 2,\n // \"optionSide\": \"CALL\",\n // \"quoteAsset\": \"USDT\",\n // \"time\": 1682492427106\n // }\n // ]\n //\n const result = [];\n for (let i = 0; i < response.length; i++) {\n result.push(this.parsePosition(response[i], market));\n }\n return this.filterByArrayPositions(result, 'symbol', symbols, false);\n }\n parsePosition(position, market = undefined) {\n //\n // {\n // \"entryPrice\": \"27.70000000\",\n // \"symbol\": \"ETH-230426-1850-C\",\n // \"side\": \"LONG\",\n // \"quantity\": \"0.50000000\",\n // \"reducibleQty\": \"0.50000000\",\n // \"markValue\": \"10.250000000\",\n // \"ror\": \"-0.2599\",\n // \"unrealizedPNL\": \"-3.600000000\",\n // \"markPrice\": \"20.5\",\n // \"strikePrice\": \"1850.00000000\",\n // \"positionCost\": \"13.85000000\",\n // \"expiryDate\": 1682496000000,\n // \"priceScale\": 1,\n // \"quantityScale\": 2,\n // \"optionSide\": \"CALL\",\n // \"quoteAsset\": \"USDT\",\n // \"time\": 1682492427106\n // }\n //\n const marketId = this.safeString(position, 'symbol');\n market = this.safeMarket(marketId, market);\n const symbol = market['symbol'];\n const side = this.safeStringLower(position, 'side');\n let quantity = this.safeString(position, 'quantity');\n if (side !== 'long') {\n quantity = Precise.stringMul('-1', quantity);\n }\n const timestamp = this.safeInteger(position, 'time');\n return this.safePosition({\n 'info': position,\n 'id': undefined,\n 'symbol': symbol,\n 'entryPrice': this.safeNumber(position, 'entryPrice'),\n 'markPrice': this.safeNumber(position, 'markPrice'),\n 'notional': this.safeNumber(position, 'markValue'),\n 'collateral': this.safeNumber(position, 'positionCost'),\n 'unrealizedPnl': this.safeNumber(position, 'unrealizedPNL'),\n 'side': side,\n 'contracts': this.parseNumber(quantity),\n 'contractSize': undefined,\n 'timestamp': timestamp,\n 'datetime': this.iso8601(timestamp),\n 'hedged': undefined,\n 'maintenanceMargin': undefined,\n 'maintenanceMarginPercentage': undefined,\n 'initialMargin': undefined,\n 'initialMarginPercentage': undefined,\n 'leverage': undefined,\n 'liquidationPrice': undefined,\n 'marginRatio': undefined,\n 'marginMode': undefined,\n 'percentage': undefined,\n });\n }\n async fetchPositions(symbols = undefined, params = {}) {\n /**\n * @method\n * @name binance#fetchPositions\n * @see https://binance-docs.github.io/apidocs/futures/en/#position-information-v2-user_data\n * @see https://binance-docs.github.io/apidocs/delivery/en/#position-information-user_data\n * @see https://binance-docs.github.io/apidocs/futures/en/#account-information-v2-user_data\n * @see https://binance-docs.github.io/apidocs/delivery/en/#account-information-user_data\n * @see https://binance-docs.github.io/apidocs/voptions/en/#option-position-information-user_data\n * @description fetch all open positions\n * @param {string[]} [symbols] list of unified market symbols\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {string} [method] method name to call, \"positionRisk\", \"account\" or \"option\", default is \"positionRisk\"\n * @returns {object[]} a list of [position structure]{@link https://docs.ccxt.com/#/?id=position-structure}\n */\n const defaultValue = this.safeString(this.options, 'fetchPositions', 'positionRisk');\n let defaultMethod = undefined;\n [defaultMethod, params] = this.handleOptionAndParams(params, 'fetchPositions', 'method', defaultValue);\n if (defaultMethod === 'positionRisk') {\n return await this.fetchPositionsRisk(symbols, params);\n }\n else if (defaultMethod === 'account') {\n return await this.fetchAccountPositions(symbols, params);\n }\n else if (defaultMethod === 'option') {\n return await this.fetchOptionPositions(symbols, params);\n }\n else {\n throw new InvalidParamsError(defaultMethod + '\" is invalid, please choose between \"account\", \"positionRisk\" and \"option\"')\n .exchange(this.id);\n }\n }\n async fetchAccountPositions(symbols = undefined, params = {}) {\n /**\n * @method\n * @name binance#fetchAccountPositions\n * @ignore\n * @description fetch account positions\n * @see https://binance-docs.github.io/apidocs/futures/en/#account-information-v2-user_data\n * @see https://binance-docs.github.io/apidocs/delivery/en/#account-information-user_data\n * @see https://binance-docs.github.io/apidocs/pm/en/#get-um-account-detail-user_data\n * @see https://binance-docs.github.io/apidocs/pm/en/#get-cm-account-detail-user_data\n * @param {string[]|undefined} symbols list of unified market symbols\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {boolean} [params.portfolioMargin] set to true if you would like to fetch positions in a portfolio margin account\n * @returns {object} data on account positions\n */\n if (symbols !== undefined) {\n if (!Array.isArray(symbols)) {\n throw new InvalidParamsError('It requires an array argument for symbols').exchange(this.id);\n }\n }\n await this.loadMarkets();\n await this.loadLeverageBrackets(false, params);\n const defaultType = this.safeString(this.options, 'defaultType', 'future');\n const type = this.safeString(params, 'type', defaultType);\n params = this.omit(params, 'type');\n let subType = undefined;\n [subType, params] = this.handleSubTypeAndParams('fetchAccountPositions', undefined, params, 'linear');\n let isPortfolioMargin = undefined;\n [isPortfolioMargin, params] = this.handleOptionAndParams2(params, 'fetchAccountPositions', 'papi', 'portfolioMargin', false);\n let response = undefined;\n if (this.isLinear(type, subType)) {\n if (isPortfolioMargin) {\n response = await this.papiGetUmAccount(params);\n }\n else {\n response = await this.fapiPrivateV2GetAccount(params);\n }\n }\n else if (this.isInverse(type, subType)) {\n if (isPortfolioMargin) {\n response = await this.papiGetCmAccount(params);\n }\n else {\n response = await this.dapiPrivateGetAccount(params);\n }\n }\n else {\n throw new InvalidParamsError('fetchPositions() supports linear and inverse contracts only')\n .exchange(this.id);\n }\n const result = this.parseAccountPositions(response);\n symbols = this.marketSymbols(symbols);\n return this.filterByArrayPositions(result, 'symbol', symbols, false);\n }\n async fetchPositionsRisk(symbols = undefined, params = {}) {\n /**\n * @method\n * @name binance#fetchPositionsRisk\n * @ignore\n * @description fetch positions risk\n * @see https://binance-docs.github.io/apidocs/futures/en/#position-information-v2-user_data\n * @see https://binance-docs.github.io/apidocs/delivery/en/#position-information-user_data\n * @see https://binance-docs.github.io/apidocs/pm/en/#query-um-position-information-user_data\n * @see https://binance-docs.github.io/apidocs/pm/en/#query-cm-position-information-user_data\n * @param {string[]|undefined} symbols list of unified market symbols\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {boolean} [params.portfolioMargin] set to true if you would like to fetch positions for a portfolio margin account\n * @returns {object} data on the positions risk\n */\n if (symbols !== undefined) {\n if (!Array.isArray(symbols)) {\n throw new InvalidParamsError('fetchPositionsRisk() requires an array argument for symbols').exchange(this.id);\n }\n }\n await this.loadMarkets();\n await this.loadLeverageBrackets(false, params);\n const request = {};\n let defaultType = 'future';\n defaultType = this.safeString(this.options, 'defaultType', defaultType);\n const type = this.safeString(params, 'type', defaultType);\n let subType = undefined;\n [subType, params] = this.handleSubTypeAndParams('fetchPositionsRisk', undefined, params, 'linear');\n let isPortfolioMargin = undefined;\n [isPortfolioMargin, params] = this.handleOptionAndParams2(params, 'fetchPositionsRisk', 'papi', 'portfolioMargin', false);\n params = this.omit(params, 'type');\n let response = undefined;\n if (this.isLinear(type, subType)) {\n if (isPortfolioMargin) {\n response = await this.papiGetUmPositionRisk(this.extend(request, params));\n }\n else {\n response = await this.fapiPrivateV2GetPositionRisk(this.extend(request, params));\n }\n }\n else if (this.isInverse(type, subType)) {\n if (isPortfolioMargin) {\n response = await this.papiGetCmPositionRisk(this.extend(request, params));\n }\n else {\n response = await this.dapiPrivateGetPositionRisk(this.extend(request, params));\n }\n }\n else {\n throw new InvalidParamsError('fetchPositionsRisk() supports linear and inverse contracts only').exchange(this.id);\n }\n // ### Response examples ###\n //\n // For One-way position mode:\n //\n // [\n // {\n // \"entryPrice\": \"0.00000\",\n // \"marginType\": \"isolated\",\n // \"isAutoAddMargin\": \"false\",\n // \"isolatedMargin\": \"0.00000000\",\n // \"leverage\": \"10\",\n // \"liquidationPrice\": \"0\",\n // \"markPrice\": \"6679.50671178\",\n // \"maxNotionalValue\": \"20000000\",\n // \"positionAmt\": \"0.000\",\n // \"symbol\": \"BTCUSDT\",\n // \"unRealizedProfit\": \"0.00000000\",\n // \"positionSide\": \"BOTH\",\n // \"updateTime\": 0\n // }\n // ]\n //\n // For Hedge position mode:\n //\n // [\n // {\n // \"entryPrice\": \"6563.66500\",\n // \"marginType\": \"isolated\",\n // \"isAutoAddMargin\": \"false\",\n // \"isolatedMargin\": \"15517.54150468\",\n // \"leverage\": \"10\",\n // \"liquidationPrice\": \"5930.78\",\n // \"markPrice\": \"6679.50671178\",\n // \"maxNotionalValue\": \"20000000\",\n // \"positionAmt\": \"20.000\",\n // \"symbol\": \"BTCUSDT\",\n // \"unRealizedProfit\": \"2316.83423560\"\n // \"positionSide\": \"LONG\",\n // \"updateTime\": 1625474304765\n // },\n // {\n // \"entryPrice\": \"0.00000\",\n // \"marginType\": \"isolated\",\n // \"isAutoAddMargin\": \"false\",\n // \"isolatedMargin\": \"5413.95799991\",\n // \"leverage\": \"10\",\n // \"liquidationPrice\": \"7189.95\",\n // \"markPrice\": \"6679.50671178\",\n // \"maxNotionalValue\": \"20000000\",\n // \"positionAmt\": \"-10.000\",\n // \"symbol\": \"BTCUSDT\",\n // \"unRealizedProfit\": \"-1156.46711780\",\n // \"positionSide\": \"SHORT\",\n // \"updateTime\": 0\n // }\n // ]\n //\n // inverse portfolio margin:\n //\n // [\n // {\n // \"symbol\": \"ETHUSD_PERP\",\n // \"positionAmt\": \"1\",\n // \"entryPrice\": \"2422.400000007\",\n // \"markPrice\": \"2424.51267823\",\n // \"unRealizedProfit\": \"0.0000036\",\n // \"liquidationPrice\": \"293.57678898\",\n // \"leverage\": \"100\",\n // \"positionSide\": \"LONG\",\n // \"updateTime\": 1707371941861,\n // \"maxQty\": \"15\",\n // \"notionalValue\": \"0.00412454\",\n // \"breakEvenPrice\": \"2423.368960034\"\n // }\n // ]\n //\n // linear portfolio margin:\n //\n // [\n // {\n // \"symbol\": \"BTCUSDT\",\n // \"positionAmt\": \"0.01\",\n // \"entryPrice\": \"44525.0\",\n // \"markPrice\": \"45464.1735922\",\n // \"unRealizedProfit\": \"9.39173592\",\n // \"liquidationPrice\": \"38007.16308568\",\n // \"leverage\": \"100\",\n // \"positionSide\": \"LONG\",\n // \"updateTime\": 1707371879042,\n // \"maxNotionalValue\": \"500000.0\",\n // \"notional\": \"454.64173592\",\n // \"breakEvenPrice\": \"44542.81\"\n // }\n // ]\n //\n const result = [];\n for (let i = 0; i < response.length; i++) {\n const parsed = this.parsePositionRisk(response[i]);\n result.push(parsed);\n }\n symbols = this.marketSymbols(symbols);\n return this.filterByArrayPositions(result, 'symbol', symbols, false);\n }\n async fetchLedger(code = undefined, since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name binance#fetchLedger\n * @description fetch the history of changes, actions done by the user or operations that altered the balance of the user\n * @see https://binance-docs.github.io/apidocs/voptions/en/#account-funding-flow-user_data\n * @see https://binance-docs.github.io/apidocs/futures/en/#get-income-history-user_data\n * @see https://binance-docs.github.io/apidocs/delivery/en/#get-income-history-user_data\n * @see https://binance-docs.github.io/apidocs/pm/en/#get-um-income-history-user_data\n * @see https://binance-docs.github.io/apidocs/pm/en/#get-cm-income-history-user_data\n * @param {string} code unified currency code\n * @param {int} [since] timestamp in ms of the earliest ledger entry\n * @param {int} [limit] max number of ledger entrys to return\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {int} [params.until] timestamp in ms of the latest ledger entry\n * @param {boolean} [params.paginate] default false, when true will automatically paginate by calling this endpoint multiple times. See in the docs all the [available parameters](https://github.com/ccxt/ccxt/wiki/Manual#pagination-params)\n * @param {boolean} [params.portfolioMargin] set to true if you would like to fetch the ledger for a portfolio margin account\n * @returns {object} a [ledger structure]{@link https://docs.ccxt.com/#/?id=ledger-structure}\n */\n await this.loadMarkets();\n let paginate = false;\n [paginate, params] = this.handleOptionAndParams(params, 'fetchLedger', 'paginate');\n if (paginate) {\n return await this.fetchPaginatedCallDynamic('fetchLedger', code, since, limit, params);\n }\n let type = undefined;\n let subType = undefined;\n let currency = undefined;\n if (code !== undefined) {\n currency = this.currency(code);\n }\n const request = {};\n [type, params] = this.handleMarketTypeAndParams('fetchLedger', undefined, params);\n [subType, params] = this.handleSubTypeAndParams('fetchLedger', undefined, params);\n if (since !== undefined) {\n request['startTime'] = since;\n }\n if (limit !== undefined) {\n request['limit'] = limit;\n }\n const until = this.safeInteger(params, 'until');\n if (until !== undefined) {\n params = this.omit(params, 'until');\n request['endTime'] = until;\n }\n let isPortfolioMargin = undefined;\n [isPortfolioMargin, params] = this.handleOptionAndParams2(params, 'fetchLedger', 'papi', 'portfolioMargin', false);\n let response = undefined;\n if (type === 'option') {\n this.checkRequiredArgument('fetchLedger', code, 'code');\n request['currency'] = currency['id'];\n response = await this.eapiPrivateGetBill(this.extend(request, params));\n }\n else if (this.isLinear(type, subType)) {\n if (isPortfolioMargin) {\n response = await this.papiGetUmIncome(this.extend(request, params));\n }\n else {\n response = await this.fapiPrivateGetIncome(this.extend(request, params));\n }\n }\n else if (this.isInverse(type, subType)) {\n if (isPortfolioMargin) {\n response = await this.papiGetCmIncome(this.extend(request, params));\n }\n else {\n response = await this.dapiPrivateGetIncome(this.extend(request, params));\n }\n }\n else {\n throw new InvalidParamsError('fetchLedger() supports contract wallets only').exchange(this.id);\n }\n //\n // options (eapi)\n //\n // [\n // {\n // \"id\": \"1125899906845701870\",\n // \"asset\": \"USDT\",\n // \"amount\": \"-0.16518203\",\n // \"type\": \"FEE\",\n // \"createDate\": 1676621042489\n // }\n // ]\n //\n // futures (fapi, dapi, papi)\n //\n // [\n // {\n // \"symbol\": \"\",\n // \"incomeType\": \"TRANSFER\",\n // \"income\": \"10.00000000\",\n // \"asset\": \"USDT\",\n // \"time\": 1677645250000,\n // \"info\": \"TRANSFER\",\n // \"tranId\": 131001573082,\n // \"tradeId\": \"\"\n // }\n // ]\n //\n return this.parseLedger(response, currency, since, limit);\n }\n parseLedgerEntry(item, currency = undefined) {\n //\n // options (eapi)\n //\n // {\n // \"id\": \"1125899906845701870\",\n // \"asset\": \"USDT\",\n // \"amount\": \"-0.16518203\",\n // \"type\": \"FEE\",\n // \"createDate\": 1676621042489\n // }\n //\n // futures (fapi, dapi, papi)\n //\n // {\n // \"symbol\": \"\",\n // \"incomeType\": \"TRANSFER\",\n // \"income\": \"10.00000000\",\n // \"asset\": \"USDT\",\n // \"time\": 1677645250000,\n // \"info\": \"TRANSFER\",\n // \"tranId\": 131001573082,\n // \"tradeId\": \"\"\n // }\n //\n let amount = this.safeString2(item, 'amount', 'income');\n let direction = undefined;\n if (Precise.stringLe(amount, '0')) {\n direction = 'out';\n amount = Precise.stringMul('-1', amount);\n }\n else {\n direction = 'in';\n }\n const currencyId = this.safeString(item, 'asset');\n const timestamp = this.safeInteger2(item, 'createDate', 'time');\n const type = this.safeString2(item, 'type', 'incomeType');\n return {\n 'id': this.safeString2(item, 'id', 'tranId'),\n 'direction': direction,\n 'account': undefined,\n 'referenceAccount': undefined,\n 'referenceId': this.safeString(item, 'tradeId'),\n 'type': this.parseLedgerEntryType(type),\n 'currency': this.safeCurrencyCode(currencyId, currency),\n 'amount': this.parseNumber(amount),\n 'timestamp': timestamp,\n 'datetime': this.iso8601(timestamp),\n 'before': undefined,\n 'after': undefined,\n 'status': undefined,\n 'fee': undefined,\n 'info': item,\n };\n }\n parseLedgerEntryType(type) {\n const ledgerType = {\n 'FEE': 'fee',\n 'FUNDING_FEE': 'fee',\n 'OPTIONS_PREMIUM_FEE': 'fee',\n 'POSITION_LIMIT_INCREASE_FEE': 'fee',\n 'CONTRACT': 'trade',\n 'REALIZED_PNL': 'trade',\n 'TRANSFER': 'transfer',\n 'CROSS_COLLATERAL_TRANSFER': 'transfer',\n 'INTERNAL_TRANSFER': 'transfer',\n 'COIN_SWAP_DEPOSIT': 'deposit',\n 'COIN_SWAP_WITHDRAW': 'withdrawal',\n 'OPTIONS_SETTLE_PROFIT': 'settlement',\n 'DELIVERED_SETTELMENT': 'settlement',\n 'WELCOME_BONUS': 'cashback',\n 'CONTEST_REWARD': 'cashback',\n 'COMMISSION_REBATE': 'rebate',\n 'API_REBATE': 'rebate',\n 'REFERRAL_KICKBACK': 'referral',\n 'COMMISSION': 'commission',\n };\n return this.safeString(ledgerType, type, type);\n }\n async sign(path, api = 'public', method = 'GET', params = {}, headers = undefined, body = undefined) {\n const urls = this.urls;\n if (!(api in urls['api'])) {\n throw new ExchangeError()\n .overwriteMessage('It does not have a testnet/sandbox URL for ' + api + ' endpoints')\n .exchange(this.id);\n }\n let url = this.urls['api'][api];\n url += '/' + path;\n if (path === 'historicalTrades') {\n if (this.apiKey) {\n headers = {\n 'X-MBX-APIKEY': this.apiKey,\n };\n }\n else {\n throw new AuthenticationError()\n .addMessage('historicalTrades endpoint requires `apiKey` credential')\n .exchange(this.id);\n }\n }\n const userDataStream = (path === 'userDataStream') || (path === 'listenKey');\n if (userDataStream) {\n if (this.apiKey) {\n // v1 special case for userDataStream\n headers = {\n 'X-MBX-APIKEY': this.apiKey,\n 'Content-Type': 'application/x-www-form-urlencoded',\n };\n if (method !== 'GET') {\n body = this.urlencode(params);\n }\n }\n else {\n throw new AuthenticationError()\n .addMessage(this.id + ' userDataStream endpoint requires `apiKey` credential')\n .exchange(this.id);\n }\n }\n else if ((api === 'private') || (api === 'eapiPrivate') || (api === 'sapi' && path !== 'system/status') || (api === 'sapiV2') || (api === 'sapiV3') || (api === 'sapiV4') || (api === 'dapiPrivate') || (api === 'dapiPrivateV2') || (api === 'fapiPrivate') || (api === 'fapiPrivateV2') || (api === 'papi' && path !== 'ping')) {\n this.checkRequiredCredentials();\n if (method === 'POST' && ((path === 'order') || (path === 'sor/order'))) {\n // inject in implicit API calls\n const newClientOrderId = this.safeString(params, 'newClientOrderId');\n if (newClientOrderId === undefined) {\n const isSpotOrMargin = (api.indexOf('sapi') > -1 || api === 'private');\n const marketType = isSpotOrMargin ? 'spot' : 'future';\n const defaultId = (!isSpotOrMargin) ? 'x-xcKtGhcu' : 'x-R4BD3S82';\n const broker = this.safeDict(this.options, 'broker', {});\n const brokerId = this.safeString(broker, marketType, defaultId);\n params['newClientOrderId'] = brokerId + this.uuid22();\n }\n }\n let query = undefined;\n // handle batchOrders\n if ((path === 'batchOrders') && (method === 'POST')) {\n const batchOrders = this.safeValue(params, 'batchOrders');\n const queryBatch = (this.json(batchOrders));\n params['batchOrders'] = queryBatch;\n }\n const defaultRecvWindow = this.safeInteger(this.options, 'recvWindow');\n let extendedParams = this.extend({\n 'timestamp': this.nonce(),\n }, params);\n if (defaultRecvWindow !== undefined) {\n extendedParams['recvWindow'] = defaultRecvWindow;\n }\n const recvWindow = this.safeInteger(params, 'recvWindow');\n if (recvWindow !== undefined) {\n extendedParams['recvWindow'] = recvWindow;\n }\n if ((api === 'sapi') && (path === 'asset/dust')) {\n query = this.urlencodeWithArrayRepeat(extendedParams);\n }\n else if ((path === 'batchOrders') || (path.indexOf('sub-account') >= 0) || (path === 'capital/withdraw/apply') || (path.indexOf('staking') >= 0)) {\n if ((method === 'DELETE') && (path === 'batchOrders')) {\n const orderidlist = this.safeList(extendedParams, 'orderidlist', []);\n const origclientorderidlist = this.safeList(extendedParams, 'origclientorderidlist', []);\n extendedParams = this.omit(extendedParams, ['orderidlist', 'origclientorderidlist']);\n query = this.rawencode(extendedParams);\n const orderidlistLength = orderidlist.length;\n const origclientorderidlistLength = origclientorderidlist.length;\n if (orderidlistLength > 0) {\n query = query + '&' + 'orderidlist=[' + orderidlist.join(',') + ']';\n }\n if (origclientorderidlistLength > 0) {\n query = query + '&' + 'origclientorderidlist=[' + origclientorderidlist.join(',') + ']';\n }\n }\n else {\n query = this.rawencode(extendedParams);\n }\n }\n else {\n query = this.urlencode(extendedParams);\n }\n let signature = undefined;\n if (this.secret && this.secret.indexOf('PRIVATE KEY') > -1) {\n if (this.secret.length > 120) {\n signature = this.encodeURIComponent(rsa(query, this.secret, sha256));\n }\n else {\n signature = this.encodeURIComponent(eddsa(this.encode(query), this.secret, ed25519));\n }\n }\n else {\n if (this.externalSigner) {\n signature = await this.externalSigner.sign({\n 'payload': this.encode(query),\n 'publicApiKey': this.apiKey,\n 'exchangeId': this.id,\n });\n }\n else {\n signature = this.hmac(this.encode(query), this.encode(this.secret), sha256);\n }\n }\n query += '&' + 'signature=' + signature;\n headers = {\n 'X-MBX-APIKEY': this.apiKey,\n };\n if ((method === 'GET') || (method === 'DELETE')) {\n url += '?' + query;\n }\n else {\n body = query;\n headers['Content-Type'] = 'application/x-www-form-urlencoded';\n }\n }\n else {\n if (Object.keys(params).length) {\n url += '?' + this.urlencode(params);\n }\n }\n return { 'url': url, 'method': method, 'body': body, 'headers': headers };\n }\n getExceptionsByUrl(url, exactOrBroad) {\n let marketType = undefined;\n const hostname = (this.hostname !== undefined) ? this.hostname : 'binance.com';\n if (url.startsWith('https://api.' + hostname + '/')) {\n marketType = 'spot';\n }\n else if (url.startsWith('https://dapi.' + hostname + '/')) {\n marketType = 'inverse';\n }\n else if (url.startsWith('https://fapi.' + hostname + '/')) {\n marketType = 'linear';\n }\n else if (url.startsWith('https://eapi.' + hostname + '/')) {\n marketType = 'option';\n }\n else if (url.startsWith('https://papi.' + hostname + '/')) {\n marketType = 'portfoliomargin';\n }\n if (marketType !== undefined) {\n const exceptionsForMarketType = this.safeDict(this.exceptions, marketType, {});\n return this.safeDict(exceptionsForMarketType, exactOrBroad, {});\n }\n return {};\n }\n handleErrors(code, reason, url, method, headers, body, response, requestHeaders, requestBody) {\n if ((code === 418) || (code === 429)) {\n throw new ExchangeDDosProtectionError().addMessage(code.toString() + ':' + reason).exchange(this.id);\n }\n // error response in a form: { \"code\": -1013, \"msg\": \"Invalid quantity.\" }\n // following block cointains legacy checks against message patterns in \"msg\" property\n // will switch \"code\" checks eventually, when we know all of them\n const error = this.safeString(response, 'code');\n if (code >= 400) {\n if (body.indexOf('Price * QTY is zero or less') >= 0) {\n throw new InvalidParamsError(code.toString() + ': Order cost = amount * price is zero or less')\n .exchange(this.id);\n }\n if (body.indexOf('LOT_SIZE') >= 0) {\n throw new InvalidParamsError(code.toString() + ': Order amount should be evenly divisible by lot size')\n .exchange(this.id);\n }\n if (body.indexOf('PRICE_FILTER') >= 0) {\n throw new InvalidParamsError(code.toString() + ': Order price is invalid, i.e. exceeds allowed price precision, exceeds min price or max price limits or is invalid value in general, use this.priceToPrecision (symbol, amount) ')\n .exchange(this.id);\n }\n }\n if (response === undefined) {\n return undefined; // fallback to default error handler\n }\n // response in format {'msg': 'The coin does not exist.', 'success': true/false}\n const message = this.safeString(response, 'msg');\n const success = this.safeValue(response, 'success', true);\n if (!success) {\n const messageNew = this.safeString(response, 'msg');\n let parsedMessage = undefined;\n if (messageNew !== undefined) {\n try {\n parsedMessage = JSON.parse(messageNew);\n }\n catch (e) {\n // do nothing\n parsedMessage = undefined;\n }\n if (parsedMessage !== undefined) {\n response = parsedMessage;\n }\n }\n }\n if (message !== undefined) {\n const userMessage = (error ? error + ': ' : '') + message;\n this.throwExactlyMatchedException(this.getExceptionsByUrl(url, 'exact'), message, userMessage);\n this.throwExactlyMatchedException(this.exceptions['exact'], message, userMessage);\n this.throwBroadlyMatchedException(this.getExceptionsByUrl(url, 'broad'), message, userMessage);\n this.throwBroadlyMatchedException(this.exceptions['broad'], message, userMessage);\n }\n // checks against error codes\n if (error !== undefined) {\n const userMessage = error + ': ' + message;\n // https://github.com/ccxt/ccxt/issues/6501\n // https://github.com/ccxt/ccxt/issues/7742\n if ((error === '200') || Precise.stringEquals(error, '0')) {\n return undefined;\n }\n // despite that their message is very confusing, it is raised by Binance\n // on a temporary ban, the API key is valid, but disabled for a while\n if (message === 'No need to change margin type.') {\n // not an error\n // https://github.com/ccxt/ccxt/issues/11268\n // https://github.com/ccxt/ccxt/pull/11624\n // POST https://fapi.binance.com/fapi/v1/marginType 400 Bad Request\n // binanceusdm {\"code\":-4046,\"msg\":\"No need to change margin type.\"}\n throw new TradeError().addMessage(userMessage).exchange(this.id);\n }\n this.throwExactlyMatchedException(this.getExceptionsByUrl(url, 'exact'), error, userMessage);\n this.throwExactlyMatchedException(this.exceptions['exact'], error, userMessage);\n throw new ExchangeError().addMessage(userMessage).exchange(this.id);\n }\n // If we are here, error and eventually code are undefined\n if (!success) {\n throw new ExchangeError().addMessage(message).exchange(this.id);\n }\n if (Array.isArray(response)) {\n // cancelOrders returns an array like this: [{\"code\":-2011,\"msg\":\"Unknown order sent.\"}]\n const arrayLength = response.length;\n if (arrayLength === 1) { // when there's a single error we can throw, otherwise we have a partial success\n const element = response[0];\n const errorCode = this.safeString(element, 'code');\n const userMessage = this.safeString(element, 'msg');\n if (errorCode !== undefined) {\n this.throwExactlyMatchedException(this.getExceptionsByUrl(url, 'exact'), errorCode, errorCode + ': ' + userMessage);\n this.throwExactlyMatchedException(this.exceptions['exact'], errorCode, errorCode + ': ' + userMessage);\n }\n }\n }\n return undefined;\n }\n calculateRateLimiterCost(api, method, path, params, config = {}) {\n if (('noCoin' in config) && !('coin' in params)) {\n return config['noCoin'];\n }\n else if (('noSymbol' in config) && !('symbol' in params)) {\n return config['noSymbol'];\n }\n else if (('noPoolId' in config) && !('poolId' in params)) {\n return config['noPoolId'];\n }\n else if (('byLimit' in config) && ('limit' in params)) {\n const limit = params['limit'];\n const byLimit = config['byLimit'];\n for (let i = 0; i < byLimit.length; i++) {\n const entry = byLimit[i];\n if (limit <= entry[0]) {\n return entry[1];\n }\n }\n }\n return this.safeValue(config, 'cost', 1);\n }\n async request(path, api = 'public', method = 'GET', params = {}, headers = undefined, body = undefined, config = {}) {\n const response = await this.fetch2(path, api, method, params, headers, body, config);\n return response;\n }\n}\n","// ----------------------------------------------------------------------------\n\n// PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:\n// https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code\n// EDIT THE CORRESPONDENT .ts FILE INSTEAD\n\n// ---------------------------------------------------------------------------\nimport Exchange from './abstract/bitfinex2.js';\nimport { DECIMAL_PLACES, ROUND, SIGNIFICANT_DIGITS, TRUNCATE } from './base/functions/number.js';\nimport { Precise } from './base/Precise.js';\nimport { AuthenticationError, ExchangeError, ExchangeInvalidNonceError, ExchangeInvalidPermissionsError, ExchangeNotAvailableError, ExchangeRateLimitExceededError, ExchangeTransferError, ExchangeUnderMaintenanceError, InsufficientBalanceError, InvalidAddressError, InvalidCredentialsError, InvalidParamsError, NetworkNotFoundForTokenSymbol, OrderNotFoundError, TradeError, WithdrawalError } from './sdk/errors.js';\nimport { SdkErrorMessages } from './sdk/errorsMetadata.js';\nimport { sha384 } from './static_dependencies/noble-hashes/sha512.js';\n// ---------------------------------------------------------------------------\n/**\n * @class bitfinex2\n * @augments Exchange\n */\nexport default class bitfinex2 extends Exchange {\n describe() {\n return this.deepExtend(super.describe(), {\n 'id': 'bitfinex2',\n 'name': 'Bitfinex',\n 'countries': ['VG'],\n 'version': 'v2',\n 'certified': false,\n 'pro': true,\n // new metainfo interface\n 'has': {\n 'CORS': undefined,\n 'spot': true,\n 'margin': true,\n 'swap': true,\n 'future': undefined,\n 'option': undefined,\n 'cancelAllOrders': true,\n 'cancelOrder': true,\n 'cancelOrders': true,\n 'createDepositAddress': true,\n 'createLimitOrder': true,\n 'createMarketOrder': true,\n 'createOrder': true,\n 'createTrailingAmountOrder': true,\n 'createTrailingPercentOrder': false,\n 'createTriggerOrder': true,\n 'editOrder': true,\n 'fetchBalance': true,\n 'fetchClosedOrder': true,\n 'fetchClosedOrders': true,\n 'fetchCurrencies': true,\n 'fetchDepositAddress': true,\n 'fetchDepositsWithdrawals': true,\n 'fetchLedger': true,\n 'fetchMyTrades': true,\n 'fetchOHLCV': true,\n 'fetchOpenOrder': true,\n 'fetchOpenOrders': true,\n 'fetchOrder': true,\n 'fetchOrderTrades': true,\n 'fetchPosition': false,\n 'fetchPositions': true,\n 'fetchStatus': true,\n 'fetchTickers': true,\n 'fetchTime': false,\n 'fetchTradingFee': false,\n 'fetchTradingFees': true,\n 'fetchTransactionFees': undefined,\n 'fetchTransactions': 'emulated',\n 'withdraw': true,\n },\n 'timeframes': {\n '1m': '1m',\n '5m': '5m',\n '15m': '15m',\n '30m': '30m',\n '1h': '1h',\n '3h': '3h',\n '4h': '4h',\n '6h': '6h',\n '12h': '12h',\n '1d': '1D',\n '1w': '7D',\n '2w': '14D',\n '1M': '1M',\n },\n // cheapest endpoint is 240 requests per minute => ~ 4 requests per second => ( 1000ms / 4 ) = 250ms between requests on average\n 'rateLimit': 250,\n 'urls': {\n 'logo': 'https://user-images.githubusercontent.com/1294454/27766244-e328a50c-5ed2-11e7-947b-041416579bb3.jpg',\n 'api': {\n 'v1': 'https://api.bitfinex.com',\n 'public': 'https://api-pub.bitfinex.com',\n 'private': 'https://api.bitfinex.com',\n },\n 'www': 'https://www.bitfinex.com',\n 'doc': [\n 'https://docs.bitfinex.com/v2/docs/',\n 'https://github.com/bitfinexcom/bitfinex-api-node',\n ],\n 'fees': 'https://www.bitfinex.com/fees',\n },\n 'api': {\n 'public': {\n 'get': {\n 'conf/{config}': 2.7,\n 'conf/pub:{action}:{object}': 2.7,\n 'conf/pub:{action}:{object}:{detail}': 2.7,\n 'conf/pub:map:{object}': 2.7,\n 'conf/pub:map:{object}:{detail}': 2.7,\n 'conf/pub:map:currency:{detail}': 2.7,\n 'conf/pub:map:currency:sym': 2.7,\n 'conf/pub:map:currency:label': 2.7,\n 'conf/pub:map:currency:unit': 2.7,\n 'conf/pub:map:currency:undl': 2.7,\n 'conf/pub:map:currency:pool': 2.7,\n 'conf/pub:map:currency:explorer': 2.7,\n 'conf/pub:map:currency:tx:fee': 2.7,\n 'conf/pub:map:tx:method': 2.7,\n 'conf/pub:list:{object}': 2.7,\n 'conf/pub:list:{object}:{detail}': 2.7,\n 'conf/pub:list:currency': 2.7,\n 'conf/pub:list:pair:exchange': 2.7,\n 'conf/pub:list:pair:margin': 2.7,\n 'conf/pub:list:pair:futures': 2.7,\n 'conf/pub:list:competitions': 2.7,\n 'conf/pub:info:{object}': 2.7,\n 'conf/pub:info:{object}:{detail}': 2.7,\n 'conf/pub:info:pair': 2.7,\n 'conf/pub:info:pair:futures': 2.7,\n 'conf/pub:info:tx:status': 2.7,\n 'conf/pub:fees': 2.7,\n 'platform/status': 8,\n 'tickers': 2.7,\n 'ticker/{symbol}': 2.7,\n 'tickers/hist': 2.7,\n 'trades/{symbol}/hist': 2.7,\n 'book/{symbol}/{precision}': 1,\n 'book/{symbol}/P0': 1,\n 'book/{symbol}/P1': 1,\n 'book/{symbol}/P2': 1,\n 'book/{symbol}/P3': 1,\n 'book/{symbol}/R0': 1,\n 'stats1/{key}:{size}:{symbol}:{side}/{section}': 2.7,\n 'stats1/{key}:{size}:{symbol}:{side}/last': 2.7,\n 'stats1/{key}:{size}:{symbol}:{side}/hist': 2.7,\n 'stats1/{key}:{size}:{symbol}/{section}': 2.7,\n 'stats1/{key}:{size}:{symbol}/last': 2.7,\n 'stats1/{key}:{size}:{symbol}/hist': 2.7,\n 'stats1/{key}:{size}:{symbol}:long/last': 2.7,\n 'stats1/{key}:{size}:{symbol}:long/hist': 2.7,\n 'stats1/{key}:{size}:{symbol}:short/last': 2.7,\n 'stats1/{key}:{size}:{symbol}:short/hist': 2.7,\n 'candles/trade:{timeframe}:{symbol}:{period}/{section}': 2.7,\n 'candles/trade:{timeframe}:{symbol}/{section}': 2.7,\n 'candles/trade:{timeframe}:{symbol}/last': 2.7,\n 'candles/trade:{timeframe}:{symbol}/hist': 2.7,\n 'status/{type}': 2.7,\n 'status/deriv': 2.7,\n 'status/deriv/{symbol}/hist': 2.7,\n 'liquidations/hist': 80,\n 'rankings/{key}:{timeframe}:{symbol}/{section}': 2.7,\n 'rankings/{key}:{timeframe}:{symbol}/hist': 2.7,\n 'pulse/hist': 2.7,\n 'pulse/profile/{nickname}': 2.7,\n 'funding/stats/{symbol}/hist': 10, // ratelimit not in docs\n },\n 'post': {\n 'calc/trade/avg': 2.7,\n 'calc/fx': 2.7,\n },\n },\n 'private': {\n 'post': {\n // 'auth/r/orders/{symbol}/new', // outdated\n // 'auth/r/stats/perf:{timeframe}/hist', // outdated\n 'auth/r/wallets': 2.7,\n 'auth/r/wallets/hist': 2.7,\n 'auth/r/orders': 2.7,\n 'auth/r/orders/{symbol}': 2.7,\n 'auth/w/order/submit': 2.7,\n 'auth/w/order/update': 2.7,\n 'auth/w/order/cancel': 2.7,\n 'auth/w/order/multi': 2.7,\n 'auth/w/order/cancel/multi': 2.7,\n 'auth/r/orders/{symbol}/hist': 2.7,\n 'auth/r/orders/hist': 2.7,\n 'auth/r/order/{symbol}:{id}/trades': 2.7,\n 'auth/r/trades/{symbol}/hist': 2.7,\n 'auth/r/trades/hist': 2.7,\n 'auth/r/ledgers/{currency}/hist': 2.7,\n 'auth/r/ledgers/hist': 2.7,\n 'auth/r/info/margin/{key}': 2.7,\n 'auth/r/info/margin/base': 2.7,\n 'auth/r/info/margin/sym_all': 2.7,\n 'auth/r/positions': 2.7,\n 'auth/w/position/claim': 2.7,\n 'auth/w/position/increase:': 2.7,\n 'auth/r/position/increase/info': 2.7,\n 'auth/r/positions/hist': 2.7,\n 'auth/r/positions/audit': 2.7,\n 'auth/r/positions/snap': 2.7,\n 'auth/w/deriv/collateral/set': 2.7,\n 'auth/w/deriv/collateral/limits': 2.7,\n 'auth/r/funding/offers': 2.7,\n 'auth/r/funding/offers/{symbol}': 2.7,\n 'auth/w/funding/offer/submit': 2.7,\n 'auth/w/funding/offer/cancel': 2.7,\n 'auth/w/funding/offer/cancel/all': 2.7,\n 'auth/w/funding/close': 2.7,\n 'auth/w/funding/auto': 2.7,\n 'auth/w/funding/keep': 2.7,\n 'auth/r/funding/offers/{symbol}/hist': 2.7,\n 'auth/r/funding/offers/hist': 2.7,\n 'auth/r/funding/loans': 2.7,\n 'auth/r/funding/loans/hist': 2.7,\n 'auth/r/funding/loans/{symbol}': 2.7,\n 'auth/r/funding/loans/{symbol}/hist': 2.7,\n 'auth/r/funding/credits': 2.7,\n 'auth/r/funding/credits/hist': 2.7,\n 'auth/r/funding/credits/{symbol}': 2.7,\n 'auth/r/funding/credits/{symbol}/hist': 2.7,\n 'auth/r/funding/trades/{symbol}/hist': 2.7,\n 'auth/r/funding/trades/hist': 2.7,\n 'auth/r/info/funding/{key}': 2.7,\n 'auth/r/info/user': 2.7,\n 'auth/r/summary': 2.7,\n 'auth/r/logins/hist': 2.7,\n 'auth/r/permissions': 2.7,\n 'auth/w/token': 2.7,\n 'auth/r/audit/hist': 2.7,\n 'auth/w/transfer': 2.7,\n 'auth/w/deposit/address': 24,\n 'auth/w/deposit/invoice': 24,\n 'auth/w/withdraw': 24,\n 'auth/r/movements/{currency}/hist': 2.7,\n 'auth/r/movements/hist': 2.7,\n 'auth/r/alerts': 5.34,\n 'auth/w/alert/set': 2.7,\n 'auth/w/alert/price:{symbol}:{price}/del': 2.7,\n 'auth/w/alert/{type}:{symbol}:{price}/del': 2.7,\n 'auth/calc/order/avail': 2.7,\n 'auth/w/settings/set': 2.7,\n 'auth/r/settings': 2.7,\n 'auth/w/settings/del': 2.7,\n 'auth/r/pulse/hist': 2.7,\n 'auth/w/pulse/add': 16,\n 'auth/w/pulse/del': 2.7,\n },\n },\n },\n 'fees': {\n 'trading': {\n 'feeSide': 'get',\n 'percentage': true,\n 'tierBased': true,\n 'maker': this.parseNumber('0.001'),\n 'taker': this.parseNumber('0.002'),\n 'tiers': {\n 'taker': [\n [this.parseNumber('0'), this.parseNumber('0.002')],\n [this.parseNumber('500000'), this.parseNumber('0.002')],\n [this.parseNumber('1000000'), this.parseNumber('0.002')],\n [this.parseNumber('2500000'), this.parseNumber('0.002')],\n [this.parseNumber('5000000'), this.parseNumber('0.002')],\n [this.parseNumber('7500000'), this.parseNumber('0.002')],\n [this.parseNumber('10000000'), this.parseNumber('0.0018')],\n [this.parseNumber('15000000'), this.parseNumber('0.0016')],\n [this.parseNumber('20000000'), this.parseNumber('0.0014')],\n [this.parseNumber('25000000'), this.parseNumber('0.0012')],\n [this.parseNumber('30000000'), this.parseNumber('0.001')],\n ],\n 'maker': [\n [this.parseNumber('0'), this.parseNumber('0.001')],\n [this.parseNumber('500000'), this.parseNumber('0.0008')],\n [this.parseNumber('1000000'), this.parseNumber('0.0006')],\n [this.parseNumber('2500000'), this.parseNumber('0.0004')],\n [this.parseNumber('5000000'), this.parseNumber('0.0002')],\n [this.parseNumber('7500000'), this.parseNumber('0')],\n [this.parseNumber('10000000'), this.parseNumber('0')],\n [this.parseNumber('15000000'), this.parseNumber('0')],\n [this.parseNumber('20000000'), this.parseNumber('0')],\n [this.parseNumber('25000000'), this.parseNumber('0')],\n [this.parseNumber('30000000'), this.parseNumber('0')],\n ],\n },\n },\n 'funding': {\n 'withdraw': {},\n },\n },\n 'precisionMode': SIGNIFICANT_DIGITS,\n 'options': {\n 'precision': 'R0',\n // convert 'EXCHANGE MARKET' to lowercase 'market'\n // convert 'EXCHANGE LIMIT' to lowercase 'limit'\n // everything else remains uppercase\n 'exchangeTypes': {\n // 'MARKET': undefined,\n 'EXCHANGE MARKET': 'market',\n // 'LIMIT': undefined,\n 'EXCHANGE LIMIT': 'limit',\n // 'STOP': undefined,\n 'EXCHANGE STOP': 'market',\n // 'TRAILING STOP': undefined,\n // 'EXCHANGE TRAILING STOP': undefined,\n // 'FOK': undefined,\n 'EXCHANGE FOK': 'limit',\n // 'STOP LIMIT': undefined,\n 'EXCHANGE STOP LIMIT': 'limit',\n // 'IOC': undefined,\n 'EXCHANGE IOC': 'limit',\n },\n // convert 'market' to 'EXCHANGE MARKET'\n // convert 'limit' 'EXCHANGE LIMIT'\n // everything else remains as is\n 'orderTypes': {\n 'market': 'EXCHANGE MARKET',\n 'limit': 'EXCHANGE LIMIT',\n },\n 'fiat': {\n 'USD': 'USD',\n 'EUR': 'EUR',\n 'JPY': 'JPY',\n 'GBP': 'GBP',\n 'CHN': 'CHN',\n },\n // actually the correct names unlike the v1\n // we don't want to extend this with accountsByType in v1\n 'v2AccountsByType': {\n 'spot': 'exchange',\n 'exchange': 'exchange',\n 'funding': 'funding',\n 'margin': 'margin',\n 'derivatives': 'margin',\n 'future': 'margin',\n 'swap': 'margin',\n },\n 'withdraw': {\n 'includeFee': false,\n },\n },\n 'exceptions': {\n 'exact': {\n '11010': ExchangeRateLimitExceededError,\n '10001': ExchangeInvalidPermissionsError,\n '10020': ExchangeError,\n '10100': AuthenticationError,\n '10114': ExchangeInvalidNonceError,\n '20060': ExchangeUnderMaintenanceError,\n // {\"code\":503,\"error\":\"temporarily_unavailable\",\"error_description\":\"Sorry, the service is temporarily unavailable. See https://www.bitfinex.com/ for more info.\"}\n 'temporarily_unavailable': ExchangeNotAvailableError,\n },\n 'broad': {\n 'address': InvalidAddressError,\n 'available balance is only': InsufficientBalanceError,\n 'not enough exchange balance': InsufficientBalanceError,\n 'Order not found': OrderNotFoundError,\n 'symbol: invalid': ExchangeError,\n 'Invalid order: minimum size for': InvalidParamsError,\n 'Invalid order': TradeError,\n 'Momentary balance check': ExchangeTransferError,\n 'digest invalid': InvalidCredentialsError,\n },\n 'messages': {\n 'Invalid order: minimum size for': SdkErrorMessages.ORDER_UNDER_MINIMUM,\n },\n },\n });\n }\n isFiat(code) {\n return (code in this.options['fiat']);\n }\n getCurrencyId(code) {\n return 'f' + code;\n }\n getCurrencyName(code) {\n // temporary fix for transpiler recognition, even though this is in parent class\n if (code in this.options['currencyNames']) {\n return this.options['currencyNames'][code];\n }\n throw new WithdrawalError().addMessage(code + ' not supported for withdrawal').exchange(this.id);\n }\n amountToPrecision(symbol, amount) {\n // https://docs.bitfinex.com/docs/introduction#amount-precision\n // The amount field allows up to 8 decimals.\n // Anything exceeding this will be rounded to the 8th decimal.\n symbol = this.safeSymbol(symbol);\n return this.decimalToPrecision(amount, TRUNCATE, this.markets[symbol]['precision']['amount'], DECIMAL_PLACES);\n }\n priceToPrecision(symbol, price) {\n symbol = this.safeSymbol(symbol);\n price = this.decimalToPrecision(price, ROUND, this.markets[symbol]['precision']['price'], this.precisionMode);\n // https://docs.bitfinex.com/docs/introduction#price-precision\n // The precision level of all trading prices is based on significant figures.\n // All pairs on Bitfinex use up to 5 significant digits and up to 8 decimals (e.g. 1.2345, 123.45, 1234.5, 0.00012345).\n // Prices submit with a precision larger than 5 will be cut by the API.\n return this.decimalToPrecision(price, TRUNCATE, 8, DECIMAL_PLACES);\n }\n async fetchStatus(params = {}) {\n /**\n * @method\n * @name bitfinex2#fetchStatus\n * @description the latest known information on the availability of the exchange API\n * @see https://docs.bitfinex.com/reference/rest-public-platform-status\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} a [status structure]{@link https://docs.ccxt.com/#/?id=exchange-status-structure}\n */\n //\n // [1] // operative\n // [0] // maintenance\n //\n const response = await this.publicGetPlatformStatus(params);\n const statusRaw = this.safeString(response, 0);\n return {\n 'status': this.safeString({ '0': 'maintenance', '1': 'ok' }, statusRaw, statusRaw),\n 'updated': undefined,\n 'eta': undefined,\n 'url': undefined,\n 'info': response,\n };\n }\n async fetchMarkets(params = {}) {\n /**\n * @method\n * @name bitfinex2#fetchMarkets\n * @description retrieves data on all markets for bitfinex2\n * @see https://docs.bitfinex.com/reference/rest-public-conf\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object[]} an array of objects representing market data\n */\n let spotMarketsInfo = await this.publicGetConfPubInfoPair(params);\n let futuresMarketsInfo = await this.publicGetConfPubInfoPairFutures(params);\n spotMarketsInfo = this.safeValue(spotMarketsInfo, 0, []);\n futuresMarketsInfo = this.safeValue(futuresMarketsInfo, 0, []);\n const markets = this.arrayConcat(spotMarketsInfo, futuresMarketsInfo);\n let marginIds = await this.publicGetConfPubListPairMargin(params);\n marginIds = this.safeValue(marginIds, 0, []);\n //\n // [\n // \"1INCH:USD\",\n // [\n // null,\n // null,\n // null,\n // \"2.0\",\n // \"100000.0\",\n // null,\n // null,\n // null,\n // null,\n // null,\n // null,\n // null\n // ]\n // ]\n //\n const result = [];\n for (let i = 0; i < markets.length; i++) {\n const pair = markets[i];\n const id = this.safeStringUpper(pair, 0);\n const market = this.safeValue(pair, 1, {});\n let spot = true;\n if (id.indexOf('F0') >= 0) {\n spot = false;\n }\n const swap = !spot;\n let baseId = undefined;\n let quoteId = undefined;\n if (id.indexOf(':') >= 0) {\n const parts = id.split(':');\n baseId = parts[0];\n quoteId = parts[1];\n }\n else {\n baseId = id.slice(0, 3);\n quoteId = id.slice(3, 6);\n }\n let base = this.safeCurrencyCode(baseId);\n let quote = this.safeCurrencyCode(quoteId);\n const splitBase = base.split('F0');\n const splitQuote = quote.split('F0');\n base = this.safeString(splitBase, 0);\n quote = this.safeString(splitQuote, 0);\n let symbol = base + '/' + quote;\n baseId = this.getCurrencyId(baseId);\n quoteId = this.getCurrencyId(quoteId);\n let settle = undefined;\n let settleId = undefined;\n if (swap) {\n settle = quote;\n settleId = quote;\n symbol = symbol + ':' + settle;\n }\n const minOrderSizeString = this.safeString(market, 3);\n const maxOrderSizeString = this.safeString(market, 4);\n let margin = false;\n if (spot && this.inArray(id, marginIds)) {\n margin = true;\n }\n result.push({\n 'id': 't' + id,\n 'symbol': symbol,\n 'base': base,\n 'quote': quote,\n 'settle': settle,\n 'baseId': baseId,\n 'quoteId': quoteId,\n 'settleId': settleId,\n 'type': spot ? 'spot' : 'swap',\n 'spot': spot,\n 'margin': margin,\n 'swap': swap,\n 'future': false,\n 'option': false,\n 'active': true,\n 'contract': swap,\n 'linear': swap ? true : undefined,\n 'inverse': swap ? false : undefined,\n 'contractSize': swap ? this.parseNumber('1') : undefined,\n 'expiry': undefined,\n 'expiryDatetime': undefined,\n 'strike': undefined,\n 'optionType': undefined,\n 'precision': {\n 'amount': parseInt('8'),\n 'price': parseInt('5'),\n },\n 'limits': {\n 'leverage': {\n 'min': undefined,\n 'max': undefined,\n },\n 'amount': {\n 'min': this.parseNumber(minOrderSizeString),\n 'max': this.parseNumber(maxOrderSizeString),\n },\n 'price': {\n 'min': undefined,\n 'max': undefined,\n },\n 'cost': {\n 'min': undefined,\n 'max': undefined,\n },\n },\n 'created': undefined,\n 'info': market,\n });\n }\n return result;\n }\n async fetchCurrencies(params = {}) {\n /**\n * @method\n * @name bitfinex2#fetchCurrencies\n * @description fetches all available currencies on an exchange\n * @see https://docs.bitfinex.com/reference/rest-public-conf\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} an associative dictionary of currencies\n */\n const labels = [\n 'pub:list:currency',\n 'pub:map:currency:sym',\n 'pub:map:currency:label',\n 'pub:map:currency:unit',\n 'pub:map:currency:undl',\n 'pub:map:currency:pool',\n 'pub:map:currency:explorer',\n 'pub:map:currency:tx:fee',\n 'pub:map:tx:method',\n 'pub:info:tx:status', // provides withdrawal/deposit statuses 1 = active, 0 = disabled\n ];\n const config = labels.join(',');\n const request = {\n 'config': config,\n };\n const response = await this.publicGetConfConfig(this.extend(request, params));\n //\n // [\n //\n // a list of symbols\n // [\"AAA\",\"ABS\",\"ADA\"],\n //\n // // sym\n // // maps symbols to their API symbols, BAB > BCH\n // [\n // [ \"BAB\", \"BCH\" ],\n // [ \"CNHT\", \"CNHt\" ],\n // [ \"DSH\", \"DASH\" ],\n // [ \"IOT\", \"IOTA\" ],\n // [ \"LES\", \"LEO-EOS\" ],\n // [ \"LET\", \"LEO-ERC20\" ],\n // [ \"STJ\", \"STORJ\" ],\n // [ \"TSD\", \"TUSD\" ],\n // [ \"UDC\", \"USDC\" ],\n // [ \"USK\", \"USDK\" ],\n // [ \"UST\", \"USDt\" ],\n // [ \"USTF0\", \"USDt0\" ],\n // [ \"XCH\", \"XCHF\" ],\n // [ \"YYW\", \"YOYOW\" ],\n // // ...\n // ],\n // // label\n // // verbose friendly names, BNT > Bancor\n // [\n // [ \"BAB\", \"Bitcoin Cash\" ],\n // [ \"BCH\", \"Bitcoin Cash\" ],\n // [ \"LEO\", \"Unus Sed LEO\" ],\n // [ \"LES\", \"Unus Sed LEO (EOS)\" ],\n // [ \"LET\", \"Unus Sed LEO (ERC20)\" ],\n // // ...\n // ],\n // // unit\n // // maps symbols to unit of measure where applicable\n // [\n // [ \"IOT\", \"Mi|MegaIOTA\" ],\n // ],\n // // undl\n // // maps derivatives symbols to their underlying currency\n // [\n // [ \"USTF0\", \"UST\" ],\n // [ \"BTCF0\", \"BTC\" ],\n // [ \"ETHF0\", \"ETH\" ],\n // ],\n // // pool\n // // maps symbols to underlying network/protocol they operate on\n // [\n // [ 'SAN', 'ETH' ], [ 'OMG', 'ETH' ], [ 'AVT', 'ETH' ], [ \"EDO\", \"ETH\" ],\n // [ 'ESS', 'ETH' ], [ 'ATD', 'EOS' ], [ 'ADD', 'EOS' ], [ \"MTO\", \"EOS\" ],\n // [ 'PNK', 'ETH' ], [ 'BAB', 'BCH' ], [ 'WLO', 'XLM' ], [ \"VLD\", \"ETH\" ],\n // [ 'BTT', 'TRX' ], [ 'IMP', 'ETH' ], [ 'SCR', 'ETH' ], [ \"GNO\", \"ETH\" ],\n // // ...\n // ],\n // // explorer\n // // maps symbols to their recognised block explorer URLs\n // [\n // [\n // \"AIO\",\n // [\n // \"https://mainnet.aion.network\",\n // \"https://mainnet.aion.network/#/account/VAL\",\n // \"https://mainnet.aion.network/#/transaction/VAL\"\n // ]\n // ],\n // // ...\n // ],\n // // fee\n // // maps currencies to their withdrawal fees\n // [\n // [\"AAA\",[0,0]],\n // [\"ABS\",[0,131.3]],\n // [\"ADA\",[0,0.3]],\n // ],\n // ]\n //\n const indexed = {\n 'sym': this.indexBy(this.safeValue(response, 1, []), 0),\n 'label': this.indexBy(this.safeValue(response, 2, []), 0),\n 'unit': this.indexBy(this.safeValue(response, 3, []), 0),\n 'undl': this.indexBy(this.safeValue(response, 4, []), 0),\n 'pool': this.indexBy(this.safeValue(response, 5, []), 0),\n 'explorer': this.indexBy(this.safeValue(response, 6, []), 0),\n 'fees': this.indexBy(this.safeValue(response, 7, []), 0),\n 'networkStatus': this.indexBy(this.safeValue(response, 9, []), 0),\n };\n const ids = this.safeValue(response, 0, []);\n const result = {};\n for (let i = 0; i < ids.length; i++) {\n const id = ids[i];\n if (id.indexOf('F0') >= 0) {\n // we get a lot of F0 currencies, skip those\n continue;\n }\n const code = this.safeCurrencyCode(id);\n const label = this.safeValue(indexed['label'], id, []);\n const name = this.safeString(label, 1);\n const pool = this.safeValue(indexed['pool'], id, []);\n const rawType = this.safeString(pool, 1);\n const type = (rawType === undefined) ? 'other' : 'crypto';\n const feeValues = this.safeValue(indexed['fees'], id, []);\n const fees = this.safeValue(feeValues, 1, []);\n const fee = this.safeNumber(fees, 1);\n const undl = this.safeValue(indexed['undl'], id, []);\n const precision = '8'; // default precision, todo: fix \"magic constants\"\n const fid = 'f' + id;\n let isWithdrawEnabled = false;\n let isDepositEnabled = false;\n const networks = {};\n const currencyNetworks = this.safeValue(response, 8, []);\n const cleanId = id.replace('F0', '');\n for (let j = 0; j < currencyNetworks.length; j++) {\n const pair = currencyNetworks[j];\n const networkId = this.safeString(pair, 0);\n const currencyId = this.safeString(this.safeValue(pair, 1, []), 0);\n if (currencyId === cleanId) {\n const network = rawType ?? this.safeNetwork(networkId);\n const networkStatus = this.safeValue(indexed['networkStatus'], networkId, []);\n const depositEnable = this.safeInteger(networkStatus, 1, 0) === 1;\n const withdrawEnable = this.safeInteger(networkStatus, 2, 0) === 1;\n isDepositEnabled = depositEnable || isDepositEnabled;\n isWithdrawEnabled = withdrawEnable || isWithdrawEnabled;\n networks[network] = {\n 'info': networkId,\n 'id': networkId.toLowerCase(),\n 'network': network,\n 'active': depositEnable && withdrawEnable,\n 'deposit': depositEnable,\n 'withdraw': withdrawEnable,\n 'fee': undefined,\n 'precision': undefined,\n 'limits': {\n 'withdraw': {\n 'min': undefined,\n 'max': undefined,\n },\n },\n };\n }\n }\n result[code] = {\n 'id': fid,\n 'uppercaseId': id,\n 'code': code,\n 'info': [id, label, pool, feeValues, undl],\n 'type': type,\n 'name': name,\n 'active': isWithdrawEnabled && isDepositEnabled,\n 'deposit': isDepositEnabled,\n 'withdraw': isWithdrawEnabled,\n 'fee': fee,\n 'precision': parseInt(precision),\n 'limits': {\n 'amount': {\n 'min': this.parseNumber(this.parsePrecision(precision)),\n 'max': undefined,\n },\n 'withdraw': {\n 'min': fee,\n 'max': undefined,\n },\n },\n 'networks': {},\n };\n const keysNetworks = Object.keys(networks);\n const networksLength = keysNetworks.length;\n if (networksLength > 0) {\n result[code]['networks'] = networks;\n }\n }\n return result;\n }\n safeNetwork(networkId) {\n // mapping method to network\n const networksById = {\n 'BITCOIN': 'BTC',\n 'LITECOIN': 'LTC',\n 'ETHEREUM': 'ETH',\n 'ERC20': 'ETH',\n 'TETHERUSE': 'ETH',\n 'TETHERUSO': 'OMNI',\n 'TETHERUSL': 'LIQUID',\n 'TETHERUSX': 'TRX',\n 'TETHERUSS': 'EOS',\n 'TETHERUSDTAVAX': 'AVAX',\n 'TETHERUSDTSOL': 'SOL',\n 'TETHERUSDTALG': 'ALG',\n 'TETHERUSDTBCH': 'BCH',\n 'TETHERUSDTKSM': 'KSM',\n 'TETHERUSDTDVF': 'DVF',\n 'TETHERUSDTOMG': 'OMG',\n 'TETHERUSDTXTZ': 'XTZ',\n 'TETHERUSDTNEAR': 'NEAR',\n 'TETHERUSDTDOT': 'DOT',\n 'TETHERUSDTPLY': 'PLY',\n 'TETHERUSDTKAVA': 'KAVA',\n 'TETHERMXNTE': 'ETH',\n 'TETHERXAUTE': 'ETH',\n 'TETHEREUE': 'ETH',\n 'TETHERCNHTX': 'ETH',\n 'TETHERCNHTE': 'ETH',\n 'TETHERUSDTZK': 'ZK2',\n 'XAUT': 'ETH',\n 'CNHT': 'ETH',\n 'EUT': 'ETH',\n 'MXNT': 'ETH',\n 'NEOGAS': 'NEO',\n 'LES': 'EOS',\n 'LET': 'ETH',\n };\n return this.safeString(networksById, networkId, networkId);\n }\n async fetchBalance(params = {}) {\n /**\n * @method\n * @name bitfinex2#fetchBalance\n * @description query for balance and get the amount of funds available for trading or funds locked in orders\n * @see https://docs.bitfinex.com/reference/rest-auth-wallets\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} a [balance structure]{@link https://docs.ccxt.com/#/?id=balance-structure}\n */\n // this api call does not return the 'used' amount - use the v1 version instead (which also returns zero balances)\n // there is a difference between this and the v1 api, namely trading wallet is called margin in v2\n await this.loadMarkets();\n const accountsByType = this.safeValue(this.options, 'v2AccountsByType', {});\n const requestedType = this.safeString(params, 'type', 'exchange');\n const accountType = this.safeString(accountsByType, requestedType, requestedType);\n if (accountType === undefined) {\n const keys = Object.keys(accountsByType);\n throw new InvalidParamsError('fetchBalance() type parameter must be one of ' + keys.join(', '))\n .exchange(this.id);\n }\n const isDerivative = requestedType === 'derivatives';\n const query = this.omit(params, 'type');\n const response = await this.privatePostAuthRWallets(query);\n const result = { 'info': response };\n for (let i = 0; i < response.length; i++) {\n const balance = response[i];\n const account = this.account();\n const interest = this.safeString(balance, 3);\n if (interest !== '0') {\n account['debt'] = interest;\n }\n const type = this.safeString(balance, 0);\n const currencyId = this.safeStringLower(balance, 1, '');\n const start = currencyId.length - 2;\n const isDerivativeCode = ['f0', 'F0'].includes(currencyId.slice(start));\n // this will only filter the derivative codes if the requestedType is 'derivatives'\n const derivativeCondition = isDerivative ? isDerivativeCode : !isDerivativeCode;\n if ((accountType === type) && derivativeCondition) {\n const code = this.safeCurrencyCode(currencyId);\n account['total'] = this.safeString(balance, 2);\n account['free'] = this.safeString(balance, 4);\n result[code] = account;\n }\n }\n return this.safeBalance(result);\n }\n async transfer(code, amount, fromAccount, toAccount, params = {}) {\n /**\n * @method\n * @name bitfinex2#transfer\n * @description transfer currency internally between wallets on the same account\n * @see https://docs.bitfinex.com/reference/rest-auth-transfer\n * @param {string} code unified currency code\n * @param {float} amount amount to transfer\n * @param {string} fromAccount account to transfer from\n * @param {string} toAccount account to transfer to\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} a [transfer structure]{@link https://docs.ccxt.com/#/?id=transfer-structure}\n */\n // transferring between derivatives wallet and regular wallet is not documented in their API\n // however we support it in CCXT (from just looking at web inspector)\n await this.loadMarkets();\n const accountsByType = this.safeValue(this.options, 'v2AccountsByType', {});\n const fromId = this.safeString(accountsByType, fromAccount);\n if (fromId === undefined) {\n const keys = Object.keys(accountsByType);\n throw new InvalidParamsError('transfer() fromAccount must be one of ' + keys.join(', '))\n .exchange(this.id);\n }\n const toId = this.safeString(accountsByType, toAccount);\n if (toId === undefined) {\n const keys = Object.keys(accountsByType);\n throw new InvalidParamsError('transfer() toAccount must be one of ' + keys.join(', '))\n .exchange(this.id);\n }\n const currency = this.currency(code);\n const fromCurrencyId = this.convertDerivativesId(currency, fromAccount);\n const toCurrencyId = this.convertDerivativesId(currency, toAccount);\n const requestedAmount = this.currencyToPrecision(code, amount);\n // this request is slightly different from v1 fromAccount -> from\n const request = {\n 'amount': requestedAmount,\n 'currency': fromCurrencyId,\n 'currency_to': toCurrencyId,\n 'from': fromId,\n 'to': toId,\n };\n const response = await this.privatePostAuthWTransfer(this.extend(request, params));\n //\n // [\n // 1616451183763,\n // \"acc_tf\",\n // null,\n // null,\n // [\n // 1616451183763,\n // \"exchange\",\n // \"margin\",\n // null,\n // \"UST\",\n // \"UST\",\n // null,\n // 1\n // ],\n // null,\n // \"SUCCESS\",\n // \"1.0 Tether USDt transfered from Exchange to Margin\"\n // ]\n //\n const error = this.safeString(response, 0);\n if (error === 'error') {\n const message = this.safeString(response, 2, '');\n // same message as in v1\n this.throwExactlyMatchedException(this.exceptions['exact'], message, this.id + ' ' + message);\n throw new ExchangeTransferError().addMessage(message).exchange(this.id);\n }\n return this.parseTransfer(response, currency);\n }\n parseTransfer(transfer, currency = undefined) {\n //\n // transfer\n //\n // [\n // 1616451183763,\n // \"acc_tf\",\n // null,\n // null,\n // [\n // 1616451183763,\n // \"exchange\",\n // \"margin\",\n // null,\n // \"UST\",\n // \"UST\",\n // null,\n // 1\n // ],\n // null,\n // \"SUCCESS\",\n // \"1.0 Tether USDt transfered from Exchange to Margin\"\n // ]\n //\n const timestamp = this.safeInteger(transfer, 0);\n const info = this.safeValue(transfer, 4);\n const fromAccount = this.safeString(info, 1);\n const toAccount = this.safeString(info, 2);\n const currencyId = this.safeString(info, 5);\n const status = this.safeString(transfer, 6);\n return {\n 'id': undefined,\n 'timestamp': timestamp,\n 'datetime': this.iso8601(timestamp),\n 'status': this.parseTransferStatus(status),\n 'amount': this.safeNumber(info, 7),\n 'currency': this.safeCurrencyCode(currencyId, currency),\n 'fromAccount': fromAccount,\n 'toAccount': toAccount,\n 'info': transfer,\n };\n }\n parseTransferStatus(status) {\n const statuses = {\n 'SUCCESS': 'ok',\n 'ERROR': 'failed',\n 'FAILURE': 'failed',\n };\n return this.safeString(statuses, status, status);\n }\n convertDerivativesId(currency, type) {\n // there is a difference between this and the v1 api, namely trading wallet is called margin in v2\n // {\n // \"id\": \"fUSTF0\",\n // \"code\": \"USTF0\",\n // \"info\": [ 'USTF0', [], [], [], [ \"USTF0\", \"UST\" ] ],\n const info = this.safeValue(currency, 'info');\n const transferId = this.safeString(info, 0);\n const underlying = this.safeValue(info, 4, []);\n let currencyId = undefined;\n if (type === 'derivatives') {\n currencyId = this.safeString(underlying, 0, transferId);\n const start = currencyId.length - 2;\n const isDerivativeCode = currencyId.slice(start) === 'F0';\n if (!isDerivativeCode) {\n currencyId = currencyId + 'F0';\n }\n }\n else if (type !== 'margin') {\n currencyId = this.safeString(underlying, 1, transferId);\n }\n else {\n currencyId = transferId;\n }\n return currencyId;\n }\n async fetchOrderBook(symbol, limit = undefined, params = {}) {\n /**\n * @method\n * @name bitfinex2#fetchOrderBook\n * @description fetches information on open orders with bid (buy) and ask (sell) prices, volumes and other data\n * @see https://docs.bitfinex.com/reference/rest-public-book\n * @param {string} symbol unified symbol of the market to fetch the order book for\n * @param {int} [limit] the maximum amount of order book entries to return, bitfinex only allows 1, 25, or 100\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} A dictionary of [order book structures]{@link https://docs.ccxt.com/#/?id=order-book-structure} indexed by market symbols\n */\n await this.loadMarkets();\n const precision = this.safeValue(this.options, 'precision', 'R0');\n const market = this.market(symbol);\n const request = {\n 'symbol': market['id'],\n 'precision': precision,\n };\n if (limit !== undefined) {\n request['len'] = limit;\n }\n const fullRequest = this.extend(request, params);\n const orderbook = await this.publicGetBookSymbolPrecision(fullRequest);\n const timestamp = this.milliseconds();\n const result = {\n 'symbol': market['symbol'],\n 'bids': [],\n 'asks': [],\n 'timestamp': timestamp,\n 'datetime': this.iso8601(timestamp),\n 'nonce': undefined,\n };\n const priceIndex = (fullRequest['precision'] === 'R0') ? 1 : 0;\n for (let i = 0; i < orderbook.length; i++) {\n const order = orderbook[i];\n const price = this.safeNumber(order, priceIndex);\n const signedAmount = this.safeString(order, 2);\n const amount = Precise.stringAbs(signedAmount);\n const side = Precise.stringGt(signedAmount, '0') ? 'bids' : 'asks';\n result[side].push([price, this.parseNumber(amount)]);\n }\n result['bids'] = this.sortBy(result['bids'], 0, true);\n result['asks'] = this.sortBy(result['asks'], 0);\n return result;\n }\n parseTicker(ticker, market = undefined) {\n //\n // on trading pairs (ex. tBTCUSD)\n //\n // [\n // SYMBOL,\n // BID,\n // BID_SIZE,\n // ASK,\n // ASK_SIZE,\n // DAILY_CHANGE,\n // DAILY_CHANGE_RELATIVE,\n // LAST_PRICE,\n // VOLUME,\n // HIGH,\n // LOW\n // ]\n //\n // on funding currencies (ex. fUSD)\n //\n // [\n // SYMBOL,\n // FRR,\n // BID,\n // BID_PERIOD,\n // BID_SIZE,\n // ASK,\n // ASK_PERIOD,\n // ASK_SIZE,\n // DAILY_CHANGE,\n // DAILY_CHANGE_RELATIVE,\n // LAST_PRICE,\n // VOLUME,\n // HIGH,\n // LOW,\n // _PLACEHOLDER,\n // _PLACEHOLDER,\n // FRR_AMOUNT_AVAILABLE\n // ]\n //\n const symbol = this.safeSymbol(undefined, market);\n const length = ticker.length;\n const last = this.safeString(ticker, length - 4);\n const percentage = this.safeString(ticker, length - 5);\n return this.safeTicker({\n 'symbol': symbol,\n 'timestamp': undefined,\n 'datetime': undefined,\n 'high': this.safeString(ticker, length - 2),\n 'low': this.safeString(ticker, length - 1),\n 'bid': this.safeString(ticker, length - 10),\n 'bidVolume': this.safeString(ticker, length - 9),\n 'ask': this.safeString(ticker, length - 8),\n 'askVolume': this.safeString(ticker, length - 7),\n 'vwap': undefined,\n 'open': undefined,\n 'close': last,\n 'last': last,\n 'previousClose': undefined,\n 'change': this.safeString(ticker, length - 6),\n 'percentage': Precise.stringMul(percentage, '100'),\n 'average': undefined,\n 'baseVolume': this.safeString(ticker, length - 3),\n 'quoteVolume': undefined,\n 'info': ticker,\n }, market);\n }\n async fetchTickers(symbols = undefined, params = {}) {\n /**\n * @method\n * @name bitfinex2#fetchTickers\n * @description fetches price tickers for multiple markets, statistical information calculated over the past 24 hours for each market\n * @see https://docs.bitfinex.com/reference/rest-public-tickers\n * @param {string[]|undefined} symbols unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} a dictionary of [ticker structures]{@link https://docs.ccxt.com/#/?id=ticker-structure}\n */\n await this.loadMarkets();\n symbols = this.marketSymbols(symbols);\n const request = {};\n if (symbols !== undefined) {\n const ids = this.marketIds(symbols);\n request['symbols'] = ids.join(',');\n }\n else {\n request['symbols'] = 'ALL';\n }\n const tickers = await this.publicGetTickers(this.extend(request, params));\n //\n // [\n // // on trading pairs (ex. tBTCUSD)\n // [\n // SYMBOL,\n // BID,\n // BID_SIZE,\n // ASK,\n // ASK_SIZE,\n // DAILY_CHANGE,\n // DAILY_CHANGE_RELATIVE,\n // LAST_PRICE,\n // VOLUME,\n // HIGH,\n // LOW\n // ],\n // // on funding currencies (ex. fUSD)\n // [\n // SYMBOL,\n // FRR,\n // BID,\n // BID_PERIOD,\n // BID_SIZE,\n // ASK,\n // ASK_PERIOD,\n // ASK_SIZE,\n // DAILY_CHANGE,\n // DAILY_CHANGE_RELATIVE,\n // LAST_PRICE,\n // VOLUME,\n // HIGH,\n // LOW,\n // _PLACEHOLDER,\n // _PLACEHOLDER,\n // FRR_AMOUNT_AVAILABLE\n // ],\n // ...\n // ]\n //\n const result = {};\n for (let i = 0; i < tickers.length; i++) {\n const ticker = tickers[i];\n const marketId = this.safeString(ticker, 0);\n const market = this.safeMarket(marketId);\n const symbol = market['symbol'];\n result[symbol] = this.parseTicker(ticker, market);\n }\n return this.filterByArrayTickers(result, 'symbol', symbols);\n }\n async fetchTicker(symbol, params = {}) {\n /**\n * @method\n * @name bitfinex2#fetchTicker\n * @description fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market\n * @see https://docs.bitfinex.com/reference/rest-public-ticker\n * @param {string} symbol unified symbol of the market to fetch the ticker for\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} a [ticker structure]{@link https://docs.ccxt.com/#/?id=ticker-structure}\n */\n await this.loadMarkets();\n const market = this.market(symbol);\n const request = {\n 'symbol': market['id'],\n };\n const ticker = await this.publicGetTickerSymbol(this.extend(request, params));\n return this.parseTicker(ticker, market);\n }\n parseTrade(trade, market = undefined) {\n //\n // fetchTrades (public)\n //\n // [\n // ID,\n // MTS, // timestamp\n // AMOUNT,\n // PRICE\n // ]\n //\n // fetchMyTrades (private)\n //\n // [\n // ID,\n // PAIR,\n // MTS_CREATE,\n // ORDER_ID,\n // EXEC_AMOUNT,\n // EXEC_PRICE,\n // ORDER_TYPE,\n // ORDER_PRICE,\n // MAKER,\n // FEE,\n // FEE_CURRENCY,\n // ...\n // ]\n //\n const tradeLength = trade.length;\n const isPrivate = (tradeLength > 5);\n const id = this.safeString(trade, 0);\n const amountIndex = isPrivate ? 4 : 2;\n let side = undefined;\n let amountString = this.safeString(trade, amountIndex);\n const priceIndex = isPrivate ? 5 : 3;\n const priceString = this.safeString(trade, priceIndex);\n if (amountString[0] === '-') {\n side = 'sell';\n amountString = Precise.stringAbs(amountString);\n }\n else {\n side = 'buy';\n }\n let orderId = undefined;\n let takerOrMaker = undefined;\n let type = undefined;\n let fee = undefined;\n let symbol = this.safeSymbol(undefined, market);\n const timestampIndex = isPrivate ? 2 : 1;\n const timestamp = this.safeInteger(trade, timestampIndex);\n if (isPrivate) {\n const marketId = trade[1];\n symbol = this.safeSymbol(marketId);\n orderId = this.safeString(trade, 3);\n const maker = this.safeInteger(trade, 8);\n takerOrMaker = (maker === 1) ? 'maker' : 'taker';\n let feeCostString = this.safeString(trade, 9);\n feeCostString = Precise.stringNeg(feeCostString);\n const feeCurrencyId = this.safeString(trade, 10);\n const feeCurrency = this.safeCurrencyCode(feeCurrencyId);\n fee = {\n 'cost': feeCostString,\n 'currency': feeCurrency,\n };\n const orderType = trade[6];\n type = this.safeString(this.options['exchangeTypes'], orderType);\n }\n return this.safeTrade({\n 'id': id,\n 'timestamp': timestamp,\n 'datetime': this.iso8601(timestamp),\n 'symbol': symbol,\n 'order': orderId,\n 'side': side,\n 'type': type,\n 'takerOrMaker': takerOrMaker,\n 'price': priceString,\n 'amount': amountString,\n 'cost': undefined,\n 'fee': fee,\n 'info': trade,\n }, market);\n }\n async fetchTrades(symbol, since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name bitfinex2#fetchTrades\n * @description get the list of most recent trades for a particular symbol\n * @see https://docs.bitfinex.com/reference/rest-public-trades\n * @param {string} symbol unified symbol of the market to fetch trades for\n * @param {int} [since] timestamp in ms of the earliest trade to fetch\n * @param {int} [limit] the maximum amount of trades to fetch, default 120, max 10000\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {boolean} [params.paginate] default false, when true will automatically paginate by calling this endpoint multiple times. See in the docs all the [available parameters](https://github.com/ccxt/ccxt/wiki/Manual#pagination-params)\n * @param {int} [params.until] the latest time in ms to fetch entries for\n * @returns {Trade[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=public-trades}\n */\n await this.loadMarkets();\n let paginate = false;\n [paginate, params] = this.handleOptionAndParams(params, 'fetchTrades', 'paginate');\n if (paginate) {\n return await this.fetchPaginatedCallDynamic('fetchTrades', symbol, since, limit, params, 10000);\n }\n const market = this.market(symbol);\n let sort = '-1';\n let request = {\n 'symbol': market['id'],\n };\n if (since !== undefined) {\n request['start'] = since;\n sort = '1';\n }\n if (limit !== undefined) {\n request['limit'] = Math.min(limit, 10000); // default 120, max 10000\n }\n request['sort'] = sort;\n [request, params] = this.handleUntilOption('end', request, params);\n const response = await this.publicGetTradesSymbolHist(this.extend(request, params));\n //\n // [\n // [\n // ID,\n // MTS, // timestamp\n // AMOUNT,\n // PRICE\n // ]\n // ]\n //\n const trades = this.sortBy(response, 1);\n return this.parseTrades(trades, market, undefined, limit);\n }\n async fetchOHLCV(symbol, timeframe = '1m', since = undefined, limit = 100, params = {}) {\n /**\n * @method\n * @name bitfinex2#fetchOHLCV\n * @description fetches historical candlestick data containing the open, high, low, and close price, and the volume of a market\n * @see https://docs.bitfinex.com/reference/rest-public-candles\n * @param {string} symbol unified symbol of the market to fetch OHLCV data for\n * @param {string} timeframe the length of time each candle represents\n * @param {int} [since] timestamp in ms of the earliest candle to fetch\n * @param {int} [limit] the maximum amount of candles to fetch, default 100 max 10000\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {int[][]} A list of candles ordered as timestamp, open, high, low, close, volume\n * @param {int} [params.until] timestamp in ms of the latest candle to fetch\n * @param {boolean} [params.paginate] default false, when true will automatically paginate by calling this endpoint multiple times. See in the docs all the [available parameters](https://github.com/ccxt/ccxt/wiki/Manual#pagination-params)\n */\n await this.loadMarkets();\n let paginate = false;\n [paginate, params] = this.handleOptionAndParams(params, 'fetchOHLCV', 'paginate');\n if (paginate) {\n return await this.fetchPaginatedCallDeterministic('fetchOHLCV', symbol, since, limit, timeframe, params, 10000);\n }\n const market = this.market(symbol);\n if (limit === undefined) {\n limit = 10000;\n }\n let request = {\n 'symbol': market['id'],\n 'timeframe': this.safeString(this.timeframes, timeframe, timeframe),\n 'sort': 1,\n 'start': since,\n 'limit': limit,\n };\n [request, params] = this.handleUntilOption('end', request, params);\n const response = await this.publicGetCandlesTradeTimeframeSymbolHist(this.extend(request, params));\n //\n // [\n // [1591503840000,0.025069,0.025068,0.025069,0.025068,1.97828998],\n // [1591504500000,0.025065,0.025065,0.025065,0.025065,1.0164],\n // [1591504620000,0.025062,0.025062,0.025062,0.025062,0.5],\n // ]\n //\n return this.parseOHLCVs(response, market, timeframe, since, limit);\n }\n parseOHLCV(ohlcv, market = undefined) {\n //\n // [\n // 1457539800000,\n // 0.02594,\n // 0.02594,\n // 0.02594,\n // 0.02594,\n // 0.1\n // ]\n //\n return [\n this.safeInteger(ohlcv, 0),\n this.safeNumber(ohlcv, 1),\n this.safeNumber(ohlcv, 3),\n this.safeNumber(ohlcv, 4),\n this.safeNumber(ohlcv, 2),\n this.safeNumber(ohlcv, 5),\n ];\n }\n parseOrderStatus(status) {\n if (status === undefined) {\n return status;\n }\n const parts = status.split(' ');\n const state = this.safeString(parts, 0);\n const statuses = {\n 'ACTIVE': 'open',\n 'PARTIALLY': 'open',\n 'EXECUTED': 'closed',\n 'CANCELED': 'canceled',\n 'INSUFFICIENT': 'canceled',\n 'POSTONLY CANCELED': 'canceled',\n 'RSN_DUST': 'rejected',\n 'RSN_PAUSE': 'rejected',\n 'IOC CANCELED': 'canceled',\n 'FILLORKILL CANCELED': 'canceled',\n };\n return this.safeString(statuses, state, status);\n }\n parseOrderFlags(flags) {\n // flags can be added to each other...\n const flagValues = {\n '1024': ['reduceOnly'],\n '4096': ['postOnly'],\n '5120': ['reduceOnly', 'postOnly'],\n // '64': 'hidden', // The hidden order option ensures an order does not appear in the order book\n // '512': 'close', // Close position if position present.\n // '16384': 'OCO', // The one cancels other order option allows you to place a pair of orders stipulating that if one order is executed fully or partially, then the other is automatically canceled.\n // '524288': 'No Var Rates' // Excludes variable rate funding offers from matching against this order, if on margin\n };\n return this.safeValue(flagValues, flags, undefined);\n }\n parseTimeInForce(orderType) {\n const orderTypes = {\n 'EXCHANGE IOC': 'IOC',\n 'EXCHANGE FOK': 'FOK',\n 'IOC': 'IOC',\n 'FOK': 'FOK', // Margin\n };\n return this.safeString(orderTypes, orderType, 'GTC');\n }\n parseOrder(order, market = undefined) {\n const id = this.safeString(order, 0);\n const marketId = this.safeString(order, 3);\n const symbol = this.safeSymbol(marketId);\n // https://github.com/ccxt/ccxt/issues/6686\n // const timestamp = this.safeTimestamp (order, 5);\n const timestamp = this.safeInteger(order, 5);\n const remaining = Precise.stringAbs(this.safeString(order, 6));\n const signedAmount = this.safeString(order, 7);\n const amount = Precise.stringAbs(signedAmount);\n const side = Precise.stringLt(signedAmount, '0') ? 'sell' : 'buy';\n const orderType = this.safeString(order, 8);\n const type = this.safeString(this.safeValue(this.options, 'exchangeTypes'), orderType);\n const timeInForce = this.parseTimeInForce(orderType);\n const rawFlags = this.safeString(order, 12);\n const flags = this.parseOrderFlags(rawFlags);\n let postOnly = false;\n if (flags !== undefined) {\n for (let i = 0; i < flags.length; i++) {\n if (flags[i] === 'postOnly') {\n postOnly = true;\n }\n }\n }\n let price = this.safeString(order, 16);\n let stopPrice = undefined;\n if ((orderType === 'EXCHANGE STOP') || (orderType === 'EXCHANGE STOP LIMIT')) {\n price = undefined;\n stopPrice = this.safeString(order, 16);\n if (orderType === 'EXCHANGE STOP LIMIT') {\n price = this.safeString(order, 19);\n }\n }\n let status = undefined;\n const statusString = this.safeString(order, 13);\n if (statusString !== undefined) {\n const parts = statusString.split(' @ ');\n status = this.parseOrderStatus(this.safeString(parts, 0));\n }\n const average = this.safeString(order, 17);\n const clientOrderId = this.safeString(order, 2);\n return this.safeOrder({\n 'info': order,\n 'id': id,\n 'clientOrderId': clientOrderId,\n 'timestamp': timestamp,\n 'datetime': this.iso8601(timestamp),\n 'lastTradeTimestamp': undefined,\n 'symbol': symbol,\n 'type': type,\n 'timeInForce': timeInForce,\n 'postOnly': postOnly,\n 'side': side,\n 'price': price,\n 'stopPrice': stopPrice,\n 'triggerPrice': stopPrice,\n 'amount': amount,\n 'cost': undefined,\n 'average': average,\n 'filled': undefined,\n 'remaining': remaining,\n 'status': status,\n 'fee': undefined,\n 'trades': undefined,\n }, market);\n }\n async fetchOrder(id, symbol = undefined, params = {}) {\n /**\n * @method\n * @name bitfinex#fetchOrder\n * @description fetches information on an order made by the user\n * @param {string} symbol not used by bitfinex fetchOrder\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} An [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n await this.loadMarkets();\n const market = this.market(symbol);\n const request = {\n 'symbol': market['id'],\n };\n const response = await this.privatePostAuthROrdersSymbolHist(this.extend(request, params));\n for (let i = 0; i < response.length; i++) {\n const order = this.parseOrder(response[i]);\n if (order['id'] === id) {\n return order;\n }\n }\n }\n async createOrderRequest(symbol, type, side, amount, price = undefined, params = {}) {\n /**\n * @method\n * @ignore\n * @name bitfinex2#createOrderRequest\n * @description helper function to build an order request\n * @param {string} symbol unified symbol of the market to create an order in\n * @param {string} type 'market' or 'limit'\n * @param {string} side 'buy' or 'sell'\n * @param {float} amount how much you want to trade in units of the base currency\n * @param {float} [price] the price of the order, in units of the quote currency, ignored in market orders\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} request to be sent to the exchange\n */\n const market = this.market(symbol);\n let amountString = this.amountToPrecision(symbol, amount);\n amountString = (side === 'buy') ? amountString : Precise.stringNeg(amountString);\n const request = {\n 'symbol': market['id'],\n 'amount': amountString,\n };\n const stopPrice = this.safeString2(params, 'stopPrice', 'triggerPrice');\n const trailingAmount = this.safeString(params, 'trailingAmount');\n const timeInForce = this.safeString(params, 'timeInForce');\n const postOnlyParam = this.safeBool(params, 'postOnly', false);\n const reduceOnly = this.safeBool(params, 'reduceOnly', false);\n const clientOrderId = this.safeValue2(params, 'cid', 'clientOrderId');\n let orderType = type.toUpperCase();\n if (trailingAmount !== undefined) {\n orderType = 'TRAILING STOP';\n request['price_trailing'] = trailingAmount;\n }\n else if (stopPrice !== undefined) {\n // request['price'] is taken as stopPrice for stop orders\n request['price'] = this.priceToPrecision(symbol, stopPrice);\n if (type === 'limit') {\n orderType = 'STOP LIMIT';\n request['price_aux_limit'] = this.priceToPrecision(symbol, price);\n }\n else {\n orderType = 'STOP';\n }\n }\n const ioc = (timeInForce === 'IOC');\n const fok = (timeInForce === 'FOK');\n const postOnly = (postOnlyParam || (timeInForce === 'PO'));\n if ((ioc || fok) && (price === undefined)) {\n throw new InvalidParamsError('createOrder() requires a price argument with IOC and FOK orders')\n .exchange(this.id);\n }\n if ((ioc || fok) && (type === 'market')) {\n throw new InvalidParamsError('createOrder() does not allow market IOC and FOK orders')\n .exchange(this.id);\n }\n if ((type !== 'market') && (stopPrice === undefined)) {\n request['price'] = this.priceToPrecision(symbol, price);\n }\n if (ioc) {\n orderType = 'IOC';\n }\n else if (fok) {\n orderType = 'FOK';\n }\n let marginMode = undefined;\n [marginMode, params] = this.handleMarginModeAndParams('createOrder', params);\n if (market['spot'] && (marginMode === undefined)) {\n // The EXCHANGE prefix is only required for non margin spot markets\n orderType = 'EXCHANGE ' + orderType;\n }\n request['type'] = orderType;\n // flag values may be summed to combine flags\n let flags = 0;\n if (postOnly) {\n flags = this.sum(flags, 4096);\n }\n if (reduceOnly) {\n flags = this.sum(flags, 1024);\n }\n if (flags !== 0) {\n request['flags'] = flags;\n }\n if (clientOrderId !== undefined) {\n request['cid'] = clientOrderId;\n }\n params = this.omit(params, ['triggerPrice', 'stopPrice', 'timeInForce', 'postOnly', 'reduceOnly', 'trailingAmount', 'clientOrderId']);\n return this.extend(request, params);\n }\n async createOrder(symbol, type, side, amount, price = undefined, params = {}) {\n /**\n * @method\n * @name bitfinex2#createOrder\n * @description create an order on the exchange\n * @see https://docs.bitfinex.com/reference/rest-auth-submit-order\n * @param {string} symbol unified CCXT market symbol\n * @param {string} type 'limit' or 'market'\n * @param {string} side 'buy' or 'sell'\n * @param {float} amount the amount of currency to trade\n * @param {float} [price] price of the order\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {float} [params.stopPrice] the price that triggers a trigger order\n * @param {string} [params.timeInForce] \"GTC\", \"IOC\", \"FOK\", or \"PO\"\n * @param {boolean} [params.postOnly] set to true if you want to make a post only order\n * @param {boolean} [params.reduceOnly] indicates that the order is to reduce the size of a position\n * @param {int} [params.flags] additional order parameters: 4096 (Post Only), 1024 (Reduce Only), 16384 (OCO), 64 (Hidden), 512 (Close), 524288 (No Var Rates)\n * @param {int} [params.lev] leverage for a derivative order, supported by derivative symbol orders only. The value should be between 1 and 100 inclusive.\n * @param {string} [params.price_aux_limit] order price for stop limit orders\n * @param {string} [params.price_oco_stop] OCO stop price\n * @param {string} [params.trailingAmount] *swap only* the quote amount to trail away from the current market price\n * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n await this.loadMarkets();\n const market = this.market(symbol);\n const request = await this.createOrderRequest(symbol, type, side, amount, price, params);\n const response = await this.privatePostAuthWOrderSubmit(request);\n //\n // [\n // 1653325121, // Timestamp in milliseconds\n // \"on-req\", // Purpose of notification ('on-req', 'oc-req', \"uca\", 'fon-req', \"foc-req\")\n // null, // unique ID of the message\n // null,\n // [\n // [\n // 95412102131, // Order ID\n // null, // Group ID\n // 1653325121798, // Client Order ID\n // \"tDOGE:UST\", // Market ID\n // 1653325121798, // Millisecond timestamp of creation\n // 1653325121798, // Millisecond timestamp of update\n // -10, // Amount (Positive means buy, negative means sell)\n // -10, // Original amount\n // \"EXCHANGE LIMIT\", // Type of the order: LIMIT, EXCHANGE LIMIT, MARKET, EXCHANGE MARKET, STOP, EXCHANGE STOP, STOP LIMIT, EXCHANGE STOP LIMIT, TRAILING STOP, EXCHANGE TRAILING STOP, FOK, EXCHANGE FOK, IOC, EXCHANGE IOC.\n // null, // Previous order type (stop-limit orders are converted to limit orders so for them previous type is always STOP)\n // null, // Millisecond timestamp of Time-In-Force: automatic order cancellation\n // null, // _PLACEHOLDER\n // 4096, // Flags, see parseOrderFlags()\n // \"ACTIVE\", // Order Status, see parseOrderStatus()\n // null, // _PLACEHOLDER\n // null, // _PLACEHOLDER\n // 0.071, // Price (Stop Price for stop-limit orders, Limit Price for limit orders)\n // 0, // Average Price\n // 0, // Trailing Price\n // 0, // Auxiliary Limit price (for STOP LIMIT)\n // null, // _PLACEHOLDER\n // null, // _PLACEHOLDER\n // null, // _PLACEHOLDER\n // 0, // Hidden (0 if false, 1 if true)\n // 0, // Placed ID (If another order caused this order to be placed (OCO) this will be that other order's ID)\n // null, // _PLACEHOLDER\n // null, // _PLACEHOLDER\n // null, // _PLACEHOLDER\n // \"API>BFX\", // Routing, indicates origin of action: BFX, ETHFX, API>BFX, API>ETHFX\n // null, // _PLACEHOLDER\n // null, // _PLACEHOLDER\n // {\"$F7\":1} // additional meta information about the order ( $F7 = IS_POST_ONLY (0 if false, 1 if true), $F33 = Leverage (int))\n // ]\n // ],\n // null, // CODE (work in progress)\n // \"SUCCESS\", // Status of the request\n // \"Submitting 1 orders.\" // Message\n // ]\n //\n const status = this.safeString(response, 6);\n if (status !== 'SUCCESS') {\n const errorCode = response[5];\n const errorText = response[7];\n throw new TradeError()\n .addMessage(response[6] + ': ' + errorText + ' (#' + errorCode + ')')\n .exchange(this.id);\n }\n const orders = this.safeList(response, 4, []);\n const order = this.safeList(orders, 0);\n return this.parseOrder(order, market);\n }\n async createOrders(orders, params = {}) {\n /**\n * @method\n * @name bitfinex2#createOrders\n * @description create a list of trade orders\n * @see https://docs.bitfinex.com/reference/rest-auth-order-multi\n * @param {Array} orders list of orders to create, each object should contain the parameters required by createOrder, namely symbol, type, side, amount, price and params\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n await this.loadMarkets();\n const ordersRequests = [];\n for (let i = 0; i < orders.length; i++) {\n const rawOrder = orders[i];\n const symbol = this.safeString(rawOrder, 'symbol');\n const type = this.safeString(rawOrder, 'type');\n const side = this.safeString(rawOrder, 'side');\n const amount = this.safeNumber(rawOrder, 'amount');\n const price = this.safeNumber(rawOrder, 'price');\n const orderParams = this.safeDict(rawOrder, 'params', {});\n const orderRequest = this.createOrderRequest(symbol, type, side, amount, price, orderParams);\n ordersRequests.push(['on', orderRequest]);\n }\n const request = {\n 'ops': ordersRequests,\n };\n const response = await this.privatePostAuthWOrderMulti(request);\n //\n // [\n // 1706762515553,\n // \"ox_multi-req\",\n // null,\n // null,\n // [\n // [\n // 1706762515,\n // \"on-req\",\n // null,\n // null,\n // [\n // [139567428547,null,1706762515551,\"tBTCUST\",1706762515551,1706762515551,0.0001,0.0001,\"EXCHANGE LIMIT\",null,null,null,0,\"ACTIVE\",null,null,35000,0,0,0,null,null,null,0,0,null,null,null,\"API>BFX\",null,null,{}]\n // ],\n // null,\n // \"SUCCESS\",\n // \"Submitting 1 orders.\"\n // ],\n // ],\n // null,\n // \"SUCCESS\",\n // \"Submitting 2 order operations.\"\n // ]\n //\n const results = [];\n const data = this.safeList(response, 4, []);\n for (let i = 0; i < data.length; i++) {\n const entry = data[i];\n const individualOrder = entry[4];\n results.push(individualOrder[0]);\n }\n return this.parseOrders(results);\n }\n async cancelAllOrders(symbol = undefined, params = {}) {\n /**\n * @method\n * @name bitfinex2#cancelAllOrders\n * @description cancel all open orders\n * @see https://docs.bitfinex.com/reference/rest-auth-cancel-orders-multiple\n * @param {string} symbol unified market symbol, only orders in the market of this symbol are cancelled when symbol is not undefined\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n await this.loadMarkets();\n const request = {\n 'all': 1,\n };\n const response = await this.privatePostAuthWOrderCancelMulti(this.extend(request, params));\n const orders = this.safeValue(response, 4, []);\n return this.parseOrders(orders);\n }\n async cancelOrder(id, symbol = undefined, params = {}) {\n /**\n * @method\n * @name bitfinex2#cancelOrder\n * @description cancels an open order\n * @see https://docs.bitfinex.com/reference/rest-auth-cancel-order\n * @param {string} id order id\n * @param {string} symbol Not used by bitfinex2 cancelOrder ()\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} An [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n await this.loadMarkets();\n const cid = this.safeValue2(params, 'cid', 'clientOrderId'); // client order id\n let request = undefined;\n if (cid !== undefined) {\n const cidDate = this.safeValue(params, 'cidDate'); // client order id date\n if (cidDate === undefined) {\n throw new InvalidParamsError(\"canceling an order by clientOrderId ('cid') requires both 'cid' and 'cid_date' ('YYYY-MM-DD')\")\n .exchange(this.id);\n }\n request = {\n 'cid': cid,\n 'cid_date': cidDate,\n };\n params = this.omit(params, ['cid', 'clientOrderId']);\n }\n else {\n request = {\n 'id': parseInt(id),\n };\n }\n const response = await this.privatePostAuthWOrderCancel(this.extend(request, params));\n const order = this.safeValue(response, 4);\n return this.parseOrder(order);\n }\n async cancelOrders(ids, symbol = undefined, params = {}) {\n /**\n * @method\n * @name bitfinex2#cancelOrders\n * @description cancel multiple orders at the same time\n * @see https://docs.bitfinex.com/reference/rest-auth-cancel-orders-multiple\n * @param {string[]} ids order ids\n * @param {string} symbol unified market symbol, default is undefined\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} an array of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n await this.loadMarkets();\n for (let i = 0; i < ids.length; i++) {\n ids[i] = this.parseToNumeric(ids[i]);\n }\n const request = {\n 'id': ids,\n };\n let market = undefined;\n if (symbol !== undefined) {\n market = this.market(symbol);\n }\n const response = await this.privatePostAuthWOrderCancelMulti(this.extend(request, params));\n //\n // [\n // 1706740198811,\n // \"oc_multi-req\",\n // null,\n // null,\n // [\n // [\n // 139530205057,\n // null,\n // 1706740132275,\n // \"tBTCF0:USTF0\",\n // 1706740132276,\n // 1706740132276,\n // 0.0001,\n // 0.0001,\n // \"LIMIT\",\n // null,\n // null,\n // null,\n // 0,\n // \"ACTIVE\",\n // null,\n // null,\n // 39000,\n // 0,\n // 0,\n // 0,\n // null,\n // null,\n // null,\n // 0,\n // 0,\n // null,\n // null,\n // null,\n // \"API>BFX\",\n // null,\n // null,\n // {\n // \"lev\": 10,\n // \"$F33\": 10\n // }\n // ],\n // ],\n // null,\n // \"SUCCESS\",\n // \"Submitting 2 order cancellations.\"\n // ]\n //\n const orders = this.safeList(response, 4, []);\n return this.parseOrders(orders, market);\n }\n async fetchOpenOrder(id, symbol = undefined, params = {}) {\n /**\n * @method\n * @name bitfinex2#fetchOpenOrder\n * @description fetch an open order by it's id\n * @see https://docs.bitfinex.com/reference/rest-auth-retrieve-orders\n * @see https://docs.bitfinex.com/reference/rest-auth-retrieve-orders-by-symbol\n * @param {string} id order id\n * @param {string} symbol unified market symbol, default is undefined\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n const request = {\n 'id': [parseInt(id)],\n };\n const orders = await this.fetchOpenOrders(symbol, undefined, undefined, this.extend(request, params));\n const order = this.safeValue(orders, 0);\n if (order === undefined) {\n throw new OrderNotFoundError()\n .addMessage(this.id + ' order ' + id + ' not found')\n .exchange(this.id);\n }\n return order;\n }\n async fetchClosedOrder(id, symbol = undefined, params = {}) {\n /**\n * @method\n * @name bitfinex2#fetchClosedOrder\n * @description fetch an open order by it's id\n * @see https://docs.bitfinex.com/reference/rest-auth-retrieve-orders\n * @see https://docs.bitfinex.com/reference/rest-auth-retrieve-orders-by-symbol\n * @param {string} id order id\n * @param {string} symbol unified market symbol, default is undefined\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n const request = {\n 'id': [parseInt(id)],\n };\n const orders = await this.fetchClosedOrders(symbol, undefined, undefined, this.extend(request, params));\n const order = this.safeValue(orders, 0);\n if (order === undefined) {\n throw new OrderNotFoundError().addMessage('order ' + id + ' not found').exchange(this.id);\n }\n return order;\n }\n async fetchOpenOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name bitfinex2#fetchOpenOrders\n * @description fetch all unfilled currently open orders\n * @see https://docs.bitfinex.com/reference/rest-auth-retrieve-orders\n * @see https://docs.bitfinex.com/reference/rest-auth-retrieve-orders-by-symbol\n * @param {string} symbol unified market symbol\n * @param {int} [since] the earliest time in ms to fetch open orders for\n * @param {int} [limit] the maximum number of open orders structures to retrieve\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n await this.loadMarkets();\n const request = {};\n let market = undefined;\n let response = undefined;\n if (symbol === undefined) {\n response = await this.privatePostAuthROrders(this.extend(request, params));\n }\n else {\n market = this.market(symbol);\n request['symbol'] = market['id'];\n response = await this.privatePostAuthROrdersSymbol(this.extend(request, params));\n }\n //\n // [\n // [\n // 95408916206, // Order ID\n // null, // Group Order ID\n // 1653322349926, // Client Order ID\n // \"tDOGE:UST\", // Market ID\n // 1653322349926, // Created Timestamp in milliseconds\n // 1653322349927, // Updated Timestamp in milliseconds\n // -10, // Amount remaining (Positive means buy, negative means sell)\n // -10, // Original amount\n // \"EXCHANGE LIMIT\", // Order type\n // null, // Previous Order Type\n // null, // _PLACEHOLDER\n // null, // _PLACEHOLDER\n // 0, // Flags, see parseOrderFlags()\n // \"ACTIVE\", // Order Status, see parseOrderStatus()\n // null, // _PLACEHOLDER\n // null, // _PLACEHOLDER\n // 0.11, // Price\n // 0, // Average Price\n // 0, // Trailing Price\n // 0, // Auxiliary Limit price (for STOP LIMIT)\n // null, // _PLACEHOLDER\n // null, // _PLACEHOLDER\n // null, // _PLACEHOLDER\n // 0, // Hidden (0 if false, 1 if true)\n // 0, // Placed ID (If another order caused this order to be placed (OCO) this will be that other order's ID)\n // null, // _PLACEHOLDER\n // null, // _PLACEHOLDER\n // null, // _PLACEHOLDER\n // \"API>BFX\", // Routing, indicates origin of action: BFX, ETHFX, API>BFX, API>ETHFX\n // null, // _PLACEHOLDER\n // null, // _PLACEHOLDER\n // {\"$F7\":1} // additional meta information about the order ( $F7 = IS_POST_ONLY (0 if false, 1 if true), $F33 = Leverage (int))\n // ],\n // ]\n //\n return this.parseOrders(response, market, since, limit);\n }\n async fetchClosedOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name bitfinex2#fetchClosedOrders\n * @description fetches information on multiple closed orders made by the user\n * @see https://docs.bitfinex.com/reference/rest-auth-retrieve-orders\n * @see https://docs.bitfinex.com/reference/rest-auth-retrieve-orders-by-symbol\n * @param {string} symbol unified market symbol of the market orders were made in\n * @param {int} [since] the earliest time in ms to fetch orders for\n * @param {int} [limit] the maximum number of order structures to retrieve\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {int} [params.until] the latest time in ms to fetch entries for\n * @param {boolean} [params.paginate] default false, when true will automatically paginate by calling this endpoint multiple times. See in the docs all the [availble parameters](https://github.com/ccxt/ccxt/wiki/Manual#pagination-params)\n * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n // returns the most recent closed or canceled orders up to circa two weeks ago\n await this.loadMarkets();\n let paginate = false;\n [paginate, params] = this.handleOptionAndParams(params, 'fetchClosedOrders', 'paginate');\n if (paginate) {\n return await this.fetchPaginatedCallDynamic('fetchClosedOrders', symbol, since, limit, params);\n }\n let request = {};\n if (since !== undefined) {\n request['start'] = since;\n }\n if (limit !== undefined) {\n request['limit'] = limit; // default 25, max 2500\n }\n [request, params] = this.handleUntilOption('end', request, params);\n let market = undefined;\n let response = undefined;\n if (symbol === undefined) {\n response = await this.privatePostAuthROrdersHist(this.extend(request, params));\n }\n else {\n market = this.market(symbol);\n request['symbol'] = market['id'];\n response = await this.privatePostAuthROrdersSymbolHist(this.extend(request, params));\n }\n //\n // [\n // [\n // 95412102131, // Order ID\n // null, // Group Order ID\n // 1653325121798, // Client Order ID\n // \"tDOGE:UST\", // Market ID\n // 1653325122000, // Created Timestamp in milliseconds\n // 1653325122000, // Updated Timestamp in milliseconds\n // -10, // Amount remaining (Positive means buy, negative means sell)\n // -10, // Original amount\n // \"EXCHANGE LIMIT\", // Order type\n // null, // Previous Order Type\n // null, // Millisecond timestamp of Time-In-Force: automatic order cancellation\n // null, // _PLACEHOLDER\n // \"4096\", // Flags, see parseOrderFlags()\n // \"POSTONLY CANCELED\", // Order Status, see parseOrderStatus()\n // null, // _PLACEHOLDER\n // null, // _PLACEHOLDER\n // 0.071, // Price\n // 0, // Average Price\n // 0, // Trailing Price\n // 0, // Auxiliary Limit price (for STOP LIMIT)\n // null, // _PLACEHOLDER\n // null, // _PLACEHOLDER\n // null, // _PLACEHOLDER\n // 0, // Notify (0 if false, 1 if true)\n // 0, // Hidden (0 if false, 1 if true)\n // null, // Placed ID (If another order caused this order to be placed (OCO) this will be that other order's ID)\n // null, // _PLACEHOLDER\n // null, // _PLACEHOLDER\n // \"API>BFX\", // Routing, indicates origin of action: BFX, ETHFX, API>BFX, API>ETHFX\n // null, // _PLACEHOLDER\n // null, // _PLACEHOLDER\n // {\"_$F7\":1} // additional meta information about the order ( _$F7 = IS_POST_ONLY (0 if false, 1 if true), _$F33 = Leverage (int))\n // ]\n // ]\n //\n return this.parseOrders(response, market, since, limit);\n }\n async fetchOrderTrades(id, symbol = undefined, since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name bitfinex2#fetchOrderTrades\n * @description fetch all the trades made from a single order\n * @see https://docs.bitfinex.com/reference/rest-auth-order-trades\n * @param {string} id order id\n * @param {string} symbol unified market symbol\n * @param {int} [since] the earliest time in ms to fetch trades for\n * @param {int} [limit] the maximum number of trades to retrieve\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=trade-structure}\n */\n if (symbol === undefined) {\n throw new InvalidParamsError('fetchOrderTrades() requires a symbol argument')\n .exchange(this.id);\n }\n await this.loadMarkets();\n const market = this.market(symbol);\n const orderId = parseInt(id);\n const request = {\n 'id': orderId,\n 'symbol': market['id'],\n };\n // valid for trades upto 10 days old\n const response = await this.privatePostAuthROrderSymbolIdTrades(this.extend(request, params));\n return this.parseTrades(response, market, since, limit);\n }\n async fetchMyTrades(symbol = undefined, since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name bitfinex2#fetchMyTrades\n * @description fetch all trades made by the user\n * @see https://docs.bitfinex.com/reference/rest-auth-trades\n * @see https://docs.bitfinex.com/reference/rest-auth-trades-by-symbol\n * @param {string} symbol unified market symbol\n * @param {int} [since] the earliest time in ms to fetch trades for\n * @param {int} [limit] the maximum number of trades structures to retrieve\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {Trade[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=trade-structure}\n */\n await this.loadMarkets();\n let market = undefined;\n const request = {\n 'end': this.milliseconds(),\n };\n if (since !== undefined) {\n request['start'] = since;\n }\n if (limit !== undefined) {\n request['limit'] = limit; // default 25, max 1000\n }\n let response = undefined;\n if (symbol !== undefined) {\n market = this.market(symbol);\n request['symbol'] = market['id'];\n response = await this.privatePostAuthRTradesSymbolHist(this.extend(request, params));\n }\n else {\n response = await this.privatePostAuthRTradesHist(this.extend(request, params));\n }\n return this.parseTrades(response, market, since, limit);\n }\n async createDepositAddress(code, params = {}) {\n /**\n * @method\n * @name bitfinex2#createDepositAddress\n * @description create a currency deposit address\n * @see https://docs.bitfinex.com/reference/rest-auth-deposit-address\n * @param {string} code unified currency code of the currency for the deposit address\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} an [address structure]{@link https://docs.ccxt.com/#/?id=address-structure}\n */\n await this.loadMarkets();\n const request = {\n 'op_renew': 1,\n };\n return await this.fetchDepositAddress(code, this.extend(request, params));\n }\n async fetchDepositAddress(code, params = {}) {\n /**\n * @method\n * @name bitfinex2#fetchDepositAddress\n * @description fetch the deposit address for a currency associated with this account\n * @see https://docs.bitfinex.com/reference/rest-auth-deposit-address\n * @param {string} code unified currency code\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} an [address structure]{@link https://docs.ccxt.com/#/?id=address-structure}\n */\n await this.loadMarkets();\n const currency = this.currency(code);\n // if not provided explicitly we will try to match using the currency name\n const network = this.safeString(params, 'network', code);\n const currencyNetworks = this.safeValue(currency, 'networks', {});\n const currencyNetwork = this.safeValue(currencyNetworks, network);\n const networkId = this.safeString(currencyNetwork, 'id');\n if (networkId === undefined) {\n throw new NetworkNotFoundForTokenSymbol(code).addMessage(\"You can specify it by providing the 'network' value inside params\")\n .exchange(this.id);\n }\n const wallet = this.safeString(params, 'wallet', 'exchange'); // 'exchange', 'margin', 'funding' and also old labels 'exchange', 'trading', 'deposit', respectively\n params = this.omit(params, 'network', 'wallet');\n const request = {\n 'method': networkId,\n 'wallet': wallet,\n 'op_renew': 0, // a value of 1 will generate a new address\n };\n const response = await this.privatePostAuthWDepositAddress(this.extend(request, params));\n //\n // [\n // 1582269616687, // MTS Millisecond Time Stamp of the update\n // \"acc_dep\", // TYPE Purpose of notification \"acc_dep\" for account deposit\n // null, // MESSAGE_ID unique ID of the message\n // null, // not documented\n // [\n // null, // PLACEHOLDER\n // \"BITCOIN\", // METHOD Method of deposit\n // \"BTC\", // CURRENCY_CODE Currency code of new address\n // null, // PLACEHOLDER\n // \"1BC9PZqpUmjyEB54uggn8TFKj49zSDYzqG\", // ADDRESS\n // null, // POOL_ADDRESS\n // ],\n // null, // CODE null or integer work in progress\n // \"SUCCESS\", // STATUS Status of the notification, SUCCESS, ERROR, FAILURE\n // \"success\", // TEXT Text of the notification\n // ]\n //\n const result = this.safeValue(response, 4, []);\n const poolAddress = this.safeString(result, 5);\n const address = (poolAddress === undefined) ? this.safeString(result, 4) : poolAddress;\n const tag = (poolAddress === undefined) ? undefined : this.safeString(result, 4);\n this.checkAddress(address);\n return {\n 'currency': code,\n 'address': address,\n 'tag': tag,\n 'network': undefined,\n 'info': response,\n };\n }\n parseTransactionStatus(status) {\n const statuses = {\n 'SUCCESS': 'ok',\n 'COMPLETED': 'ok',\n 'ERROR': 'failed',\n 'FAILURE': 'failed',\n 'CANCELED': 'canceled',\n 'PENDING APPROVAL': 'pending',\n 'PENDING': 'pending',\n 'PENDING REVIEW': 'pending',\n 'PENDING CANCELLATION': 'pending',\n 'SENDING': 'pending',\n 'USER APPROVED': 'pending',\n };\n return this.safeString(statuses, status, status);\n }\n parseTransaction(transaction, currency = undefined) {\n //\n // withdraw\n //\n // [\n // 1582271520931, // MTS Millisecond Time Stamp of the update\n // \"acc_wd-req\", // TYPE Purpose of notification \"acc_wd-req\" account withdrawal request\n // null, // MESSAGE_ID unique ID of the message\n // null, // not documented\n // [\n // 0, // WITHDRAWAL_ID Unique Withdrawal ID\n // null, // PLACEHOLDER\n // \"bitcoin\", // METHOD Method of withdrawal\n // null, // PAYMENT_ID Payment ID if relevant\n // \"exchange\", // WALLET Sending wallet\n // 1, // AMOUNT Amount of Withdrawal less fee\n // null, // PLACEHOLDER\n // null, // PLACEHOLDER\n // 0.0004, // WITHDRAWAL_FEE Fee on withdrawal\n // ],\n // null, // CODE null or integer Work in progress\n // \"SUCCESS\", // STATUS Status of the notification, it may vary over time SUCCESS, ERROR, FAILURE\n // \"Invalid bitcoin address (abcdef)\", // TEXT Text of the notification\n // ]\n //\n // fetchDepositsWithdrawals\n //\n // [\n // 13293039, // ID\n // \"ETH\", // CURRENCY\n // \"ETHEREUM\", // CURRENCY_NAME\n // null,\n // null,\n // 1574175052000, // MTS_STARTED\n // 1574181326000, // MTS_UPDATED\n // null,\n // null,\n // \"CANCELED\", // STATUS\n // null,\n // null,\n // -0.24, // AMOUNT, negative for withdrawals\n // -0.00135, // FEES\n // null,\n // null,\n // \"0x38110e0Fc932CB2BE...........\", // DESTINATION_ADDRESS\n // null,\n // null,\n // null,\n // \"0x523ec8945500.....................................\", // TRANSACTION_ID\n // \"Purchase of 100 pizzas\", // WITHDRAW_TRANSACTION_NOTE, might also be: null\n // ]\n //\n const transactionLength = transaction.length;\n let timestamp = undefined;\n let updated = undefined;\n let code = undefined;\n let amount = undefined;\n let id = undefined;\n let status = undefined;\n let tag = undefined;\n let type = undefined;\n let feeCost = undefined;\n let txid = undefined;\n let addressTo = undefined;\n let network = undefined;\n let comment = undefined;\n if (transactionLength === 8) {\n const data = this.safeValue(transaction, 4, []);\n timestamp = this.safeInteger(transaction, 0);\n if (currency !== undefined) {\n code = currency['code'];\n }\n feeCost = this.safeString(data, 8);\n if (feeCost !== undefined) {\n feeCost = Precise.stringAbs(feeCost);\n }\n amount = this.safeNumber(data, 5);\n id = this.safeInteger(data, 0);\n status = 'ok';\n if (id === 0) {\n id = undefined;\n status = 'failed';\n }\n tag = this.safeString(data, 3);\n type = 'withdrawal';\n }\n else if (transactionLength === 22) {\n id = this.safeString(transaction, 0);\n const currencyId = this.safeString(transaction, 1);\n code = this.safeCurrencyCode(currencyId, currency);\n const networkId = this.safeString(transaction, 2);\n network = this.safeNetwork(networkId);\n timestamp = this.safeInteger(transaction, 5);\n updated = this.safeInteger(transaction, 6);\n status = this.parseTransactionStatus(this.safeString(transaction, 9));\n const signedAmount = this.safeString(transaction, 12);\n amount = Precise.stringAbs(signedAmount);\n if (signedAmount !== undefined) {\n if (Precise.stringLt(signedAmount, '0')) {\n type = 'withdrawal';\n }\n else {\n type = 'deposit';\n }\n }\n feeCost = this.safeString(transaction, 13);\n if (feeCost !== undefined) {\n feeCost = Precise.stringAbs(feeCost);\n }\n addressTo = this.safeString(transaction, 16);\n txid = this.safeString(transaction, 20);\n comment = this.safeString(transaction, 21);\n }\n return {\n 'info': transaction,\n 'id': id,\n 'txid': txid,\n 'type': type,\n 'currency': code,\n 'network': network,\n 'amount': this.parseNumber(amount),\n 'status': status,\n 'timestamp': timestamp,\n 'datetime': this.iso8601(timestamp),\n 'address': addressTo,\n 'addressFrom': undefined,\n 'addressTo': addressTo,\n 'tag': tag,\n 'tagFrom': undefined,\n 'tagTo': tag,\n 'updated': updated,\n 'comment': comment,\n 'internal': undefined,\n 'fee': {\n 'currency': code,\n 'cost': this.parseNumber(feeCost),\n 'rate': undefined,\n },\n };\n }\n async fetchTradingFees(params = {}) {\n /**\n * @method\n * @name bitfinex2#fetchTradingFees\n * @description fetch the trading fees for multiple markets\n * @see https://docs.bitfinex.com/reference/rest-auth-summary\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} a dictionary of [fee structures]{@link https://docs.ccxt.com/#/?id=fee-structure} indexed by market symbols\n */\n await this.loadMarkets();\n const response = await this.privatePostAuthRSummary(params);\n //\n // Response Spec:\n // [\n // PLACEHOLDER,\n // PLACEHOLDER,\n // PLACEHOLDER,\n // PLACEHOLDER,\n // [\n // [\n // MAKER_FEE,\n // MAKER_FEE,\n // MAKER_FEE,\n // PLACEHOLDER,\n // PLACEHOLDER,\n // DERIV_REBATE\n // ],\n // [\n // TAKER_FEE_TO_CRYPTO,\n // TAKER_FEE_TO_STABLE,\n // TAKER_FEE_TO_FIAT,\n // PLACEHOLDER,\n // PLACEHOLDER,\n // DERIV_TAKER_FEE\n // ]\n // ],\n // PLACEHOLDER,\n // PLACEHOLDER,\n // PLACEHOLDER,\n // PLACEHOLDER,\n // {\n // LEO_LEV,\n // LEO_AMOUNT_AVG\n // }\n // ]\n //\n // Example response:\n //\n // [\n // null,\n // null,\n // null,\n // null,\n // [\n // [ 0.001, 0.001, 0.001, null, null, 0.0002 ],\n // [ 0.002, 0.002, 0.002, null, null, 0.00065 ]\n // ],\n // [\n // [\n // {\n // \"curr\": \"Total (USD)\",\n // \"vol\": \"0\",\n // \"vol_safe\": \"0\",\n // \"vol_maker\": \"0\",\n // \"vol_BFX\": \"0\",\n // \"vol_BFX_safe\": \"0\",\n // \"vol_BFX_maker\": \"0\"\n // }\n // ],\n // {},\n // 0\n // ],\n // [ null, {}, 0 ],\n // null,\n // null,\n // { leo_lev: \"0\", leo_amount_avg: \"0\" }\n // ]\n //\n const result = {};\n const fiat = this.safeValue(this.options, 'fiat', {});\n const feeData = this.safeValue(response, 4, []);\n const makerData = this.safeValue(feeData, 0, []);\n const takerData = this.safeValue(feeData, 1, []);\n const makerFee = this.safeNumber(makerData, 0);\n const makerFeeFiat = this.safeNumber(makerData, 2);\n const makerFeeDeriv = this.safeNumber(makerData, 5);\n const takerFee = this.safeNumber(takerData, 0);\n const takerFeeFiat = this.safeNumber(takerData, 2);\n const takerFeeDeriv = this.safeNumber(takerData, 5);\n for (let i = 0; i < this.symbols.length; i++) {\n const symbol = this.symbols[i];\n const market = this.market(symbol);\n const fee = {\n 'info': response,\n 'symbol': symbol,\n 'percentage': true,\n 'tierBased': true,\n };\n if (market['quote'] in fiat) {\n fee['maker'] = makerFeeFiat;\n fee['taker'] = takerFeeFiat;\n }\n else if (market['contract']) {\n fee['maker'] = makerFeeDeriv;\n fee['taker'] = takerFeeDeriv;\n }\n else { // TODO check if stable coin\n fee['maker'] = makerFee;\n fee['taker'] = takerFee;\n }\n result[symbol] = fee;\n }\n return result;\n }\n async fetchDepositsWithdrawals(code = undefined, since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name bitfinex2#fetchDepositsWithdrawals\n * @description fetch history of deposits and withdrawals\n * @see https://docs.bitfinex.com/reference/movement-info\n * @see https://docs.bitfinex.com/reference/rest-auth-movements\n * @param {string} [code] unified currency code for the currency of the deposit/withdrawals, default is undefined\n * @param {int} [since] timestamp in ms of the earliest deposit/withdrawal, default is undefined\n * @param {int} [limit] max number of deposit/withdrawals to return, default is undefined\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} a list of [transaction structure]{@link https://docs.ccxt.com/#/?id=transaction-structure}\n */\n await this.loadMarkets();\n let currency = undefined;\n const request = {};\n if (since !== undefined) {\n request['start'] = since;\n }\n if (limit !== undefined) {\n request['limit'] = limit; // max 1000\n }\n let response = undefined;\n if (code !== undefined) {\n currency = this.currency(code);\n request['currency'] = currency['uppercaseId'];\n response = await this.privatePostAuthRMovementsCurrencyHist(this.extend(request, params));\n }\n else {\n response = await this.privatePostAuthRMovementsHist(this.extend(request, params));\n }\n //\n // [\n // [\n // 13293039, // ID\n // \"ETH\", // CURRENCY\n // \"ETHEREUM\", // CURRENCY_NAME\n // null,\n // null,\n // 1574175052000, // MTS_STARTED\n // 1574181326000, // MTS_UPDATED\n // null,\n // null,\n // \"CANCELED\", // STATUS\n // null,\n // null,\n // -0.24, // AMOUNT, negative for withdrawals\n // -0.00135, // FEES\n // null,\n // null,\n // \"0x38110e0Fc932CB2BE...........\", // DESTINATION_ADDRESS\n // null,\n // null,\n // null,\n // \"0x523ec8945500.....................................\", // TRANSACTION_ID\n // \"Purchase of 100 pizzas\", // WITHDRAW_TRANSACTION_NOTE, might also be: null\n // ]\n // ]\n //\n return this.parseTransactions(response, currency, since, limit);\n }\n async withdraw(code, amount, address, tag = undefined, params = {}) {\n /**\n * @method\n * @name bitfinex2#withdraw\n * @description make a withdrawal\n * @see https://docs.bitfinex.com/reference/rest-auth-withdraw\n * @param {string} code unified currency code\n * @param {float} amount the amount to withdraw\n * @param {string} address the address to withdraw to\n * @param {string} tag\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} a [transaction structure]{@link https://docs.ccxt.com/#/?id=transaction-structure}\n */\n this.checkAddress(address);\n await this.loadMarkets();\n const currency = this.currency(code);\n // if not provided explicitly we will try to match using the currency name\n const network = this.safeString(params, 'network', code);\n params = this.omit(params, 'network');\n const currencyNetworks = this.safeValue(currency, 'networks', {});\n const currencyNetwork = this.safeValue(currencyNetworks, network);\n const networkId = this.safeString(currencyNetwork, 'id');\n if (networkId === undefined) {\n throw new NetworkNotFoundForTokenSymbol(code)\n .addMessage('You can specify it by providing the \\'network\\' value inside params')\n .exchange(this.id);\n }\n const wallet = this.safeString(params, 'wallet', 'exchange'); // 'exchange', 'margin', 'funding' and also old labels 'exchange', 'trading', 'deposit', respectively\n params = this.omit(params, 'network', 'wallet');\n const precisionAmount = this.currencyToPrecision(code, amount, network);\n const request = {\n 'method': networkId,\n 'wallet': wallet,\n 'amount': this.numberToString(precisionAmount),\n 'address': address,\n };\n if (tag !== undefined) {\n request['payment_id'] = tag;\n }\n const withdrawOptions = this.safeValue(this.options, 'withdraw', {});\n const includeFee = this.safeBool(withdrawOptions, 'includeFee', false);\n if (includeFee) {\n request['fee_deduct'] = 1;\n }\n const response = await this.privatePostAuthWWithdraw(this.extend(request, params));\n //\n // [\n // 1582271520931, // MTS Millisecond Time Stamp of the update\n // \"acc_wd-req\", // TYPE Purpose of notification \"acc_wd-req\" account withdrawal request\n // null, // MESSAGE_ID unique ID of the message\n // null, // not documented\n // [\n // 0, // WITHDRAWAL_ID Unique Withdrawal ID\n // null, // PLACEHOLDER\n // \"bitcoin\", // METHOD Method of withdrawal\n // null, // PAYMENT_ID Payment ID if relevant\n // \"exchange\", // WALLET Sending wallet\n // 1, // AMOUNT Amount of Withdrawal less fee\n // null, // PLACEHOLDER\n // null, // PLACEHOLDER\n // 0.0004, // WITHDRAWAL_FEE Fee on withdrawal\n // ],\n // null, // CODE null or integer Work in progress\n // \"SUCCESS\", // STATUS Status of the notification, it may vary over time SUCCESS, ERROR, FAILURE\n // \"Invalid bitcoin address (abcdef)\", // TEXT Text of the notification\n // ]\n //\n // in case of failure:\n //\n // [\n // \"error\",\n // 10001,\n // \"Momentary balance check. Please wait few seconds and try the transfer again.\"\n // ]\n //\n const statusMessage = this.safeString(response, 0);\n const data = this.safeValue(response, 4, []);\n const txId = this.safeInteger(data, 0);\n if (statusMessage === 'error' || txId === 0) {\n // sometimes bitfinex returns a success data structure even if there's an error\n const message = this.safeString(response, 2, undefined) || this.safeString(response, 7, '');\n // same message as in v1\n this.throwExactlyMatchedException(this.exceptions['exact'], message, message);\n this.throwBroadlyMatchedException(this.exceptions['broad'], message, message);\n throw new WithdrawalError().addMessage(message).exchange(this.id); // unknown message\n }\n const text = this.safeString(response, 7);\n if (text !== 'success') {\n this.throwBroadlyMatchedException(this.exceptions['broad'], text, text);\n }\n const transaction = this.parseTransaction(response, currency);\n return this.extend(transaction, {\n 'address': address,\n });\n }\n async fetchPositions(symbols = undefined, params = {}) {\n /**\n * @method\n * @name bitfinex2#fetchPositions\n * @description fetch all open positions\n * @see https://docs.bitfinex.com/reference/rest-auth-positions\n * @param {string[]|undefined} symbols list of unified market symbols\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object[]} a list of [position structure]{@link https://docs.ccxt.com/#/?id=position-structure}\n */\n await this.loadMarkets();\n symbols = this.marketSymbols(symbols);\n const response = await this.privatePostAuthRPositions(params);\n //\n // [\n // [\n // \"tBTCUSD\", // SYMBOL\n // \"ACTIVE\", // STATUS\n // 0.0195, // AMOUNT\n // 8565.0267019, // BASE_PRICE\n // 0, // MARGIN_FUNDING\n // 0, // MARGIN_FUNDING_TYPE\n // -0.33455568705000516, // PL\n // -0.0003117550117425625, // PL_PERC\n // 7045.876419249083, // PRICE_LIQ\n // 3.0673001895895604, // LEVERAGE\n // null, // _PLACEHOLDER\n // 142355652, // POSITION_ID\n // 1574002216000, // MTS_CREATE\n // 1574002216000, // MTS_UPDATE\n // null, // _PLACEHOLDER\n // 0, // TYPE\n // null, // _PLACEHOLDER\n // 0, // COLLATERAL\n // 0, // COLLATERAL_MIN\n // // META\n // {\n // \"reason\":\"TRADE\",\n // \"order_id\":34271018124,\n // \"liq_stage\":null,\n // \"trade_price\":\"8565.0267019\",\n // \"trade_amount\":\"0.0195\",\n // \"order_id_oppo\":34277498022\n // }\n // ]\n // ]\n //\n return this.parsePositions(response, symbols);\n }\n parsePosition(position, market = undefined) {\n //\n // [\n // \"tBTCUSD\", // SYMBOL\n // \"ACTIVE\", // STATUS\n // 0.0195, // AMOUNT\n // 8565.0267019, // BASE_PRICE\n // 0, // MARGIN_FUNDING\n // 0, // MARGIN_FUNDING_TYPE\n // -0.33455568705000516, // PL\n // -0.0003117550117425625, // PL_PERC\n // 7045.876419249083, // PRICE_LIQ\n // 3.0673001895895604, // LEVERAGE\n // null, // _PLACEHOLDER\n // 142355652, // POSITION_ID\n // 1574002216000, // MTS_CREATE\n // 1574002216000, // MTS_UPDATE\n // null, // _PLACEHOLDER\n // 0, // TYPE\n // null, // _PLACEHOLDER\n // 0, // COLLATERAL\n // 0, // COLLATERAL_MIN\n // // META\n // {\n // \"reason\": \"TRADE\",\n // \"order_id\": 34271018124,\n // \"liq_stage\": null,\n // \"trade_price\": \"8565.0267019\",\n // \"trade_amount\": \"0.0195\",\n // \"order_id_oppo\": 34277498022\n // }\n // ]\n //\n const marketId = this.safeString(position, 0);\n const amount = this.safeString(position, 2);\n const timestamp = this.safeInteger(position, 12);\n const meta = this.safeString(position, 19);\n const tradePrice = this.safeString(meta, 'trade_price');\n const tradeAmount = this.safeString(meta, 'trade_amount');\n return this.safePosition({\n 'info': position,\n 'id': this.safeString(position, 11),\n 'symbol': this.safeSymbol(marketId, market),\n 'notional': this.parseNumber(amount),\n 'marginMode': 'isolated',\n 'liquidationPrice': this.safeNumber(position, 8),\n 'entryPrice': this.safeNumber(position, 3),\n 'unrealizedPnl': this.safeNumber(position, 6),\n 'percentage': this.safeNumber(position, 7),\n 'contracts': undefined,\n 'contractSize': undefined,\n 'markPrice': undefined,\n 'lastPrice': undefined,\n 'side': Precise.stringGt(amount, '0') ? 'long' : 'short',\n 'hedged': undefined,\n 'timestamp': timestamp,\n 'datetime': this.iso8601(timestamp),\n 'lastUpdateTimestamp': this.safeInteger(position, 13),\n 'maintenanceMargin': this.safeNumber(position, 18),\n 'maintenanceMarginPercentage': undefined,\n 'collateral': this.safeNumber(position, 17),\n 'initialMargin': this.parseNumber(Precise.stringMul(tradeAmount, tradePrice)),\n 'initialMarginPercentage': undefined,\n 'leverage': this.safeNumber(position, 9),\n 'marginRatio': undefined,\n 'stopLossPrice': undefined,\n 'takeProfitPrice': undefined,\n });\n }\n nonce() {\n return this.milliseconds();\n }\n async sign(path, api = 'public', method = 'GET', params = {}, headers = undefined, body = undefined) {\n let request = '/' + this.implodeParams(path, params);\n const query = this.omit(params, this.extractParams(path));\n if (api === 'v1') {\n request = api + request;\n }\n else {\n request = this.version + request;\n }\n let url = this.urls['api'][api] + '/' + request;\n if (api === 'public') {\n if (Object.keys(query).length) {\n url += '?' + this.urlencode(query);\n }\n }\n if (api === 'private') {\n this.checkRequiredCredentials();\n const nonce = this.nonce().toString();\n body = this.json(query);\n const auth = '/api/' + request + nonce + body;\n let signature = undefined;\n if (this.externalSigner) {\n signature = await this.externalSigner.sign({\n 'payload': this.encode(auth),\n 'publicApiKey': this.apiKey,\n 'exchangeId': 'bitfinex', // @todo replace by the id once migrated from ccxt to sdk exchange id\n });\n }\n else {\n signature = this.hmac(this.encode(auth), this.encode(this.secret), sha384);\n }\n headers = {\n 'bfx-nonce': nonce,\n 'bfx-apikey': this.apiKey,\n 'bfx-signature': signature,\n 'Content-Type': 'application/json',\n };\n }\n return { 'url': url, 'method': method, 'body': body, 'headers': headers };\n }\n handleErrors(statusCode, statusText, url, method, headers, body, response, requestHeaders, requestBody) {\n // [\"error\", 11010, \"ratelimit: error\"]\n if (response !== undefined) {\n if (!Array.isArray(response)) {\n const message = this.safeString2(response, 'message', 'error');\n const feedback = this.id + ' ' + body;\n this.throwExactlyMatchedException(this.exceptions['exact'], message, feedback);\n this.throwBroadlyMatchedException(this.exceptions['broad'], message, feedback);\n throw new ExchangeError().addMessage(body).exchange(this.id);\n }\n }\n else if (response === '') {\n throw new ExchangeError().addMessage('returned empty response').exchange(this.id);\n }\n if (statusCode === 429) {\n throw new ExchangeRateLimitExceededError().addMessage(body).exchange(this.id);\n }\n if (statusCode === 500) {\n // See https://docs.bitfinex.com/docs/abbreviations-glossary#section-errorinfo-codes\n const errorCode = this.safeString(response, 1, '');\n const errorText = this.safeString(response, 2, '');\n const feedback = this.id + ' ' + errorText;\n this.throwBroadlyMatchedException(this.exceptions['broad'], errorText, feedback);\n this.throwExactlyMatchedException(this.exceptions['exact'], errorCode, feedback);\n this.throwExactlyMatchedException(this.exceptions['exact'], errorText, feedback);\n throw new ExchangeError().addMessage(errorText + ' (#' + errorCode + ')').exchange(this.id);\n }\n return response;\n }\n parseLedgerEntryType(type) {\n if (type === undefined) {\n return undefined;\n }\n else if (type.indexOf('fee') >= 0 || type.indexOf('charged') >= 0) {\n return 'fee';\n }\n else if (type.indexOf('rebate') >= 0) {\n return 'rebate';\n }\n else if (type.indexOf('deposit') >= 0 || type.indexOf('withdrawal') >= 0) {\n return 'transaction';\n }\n else if (type.indexOf('transfer') >= 0) {\n return 'transfer';\n }\n else if (type.indexOf('payment') >= 0) {\n return 'payout';\n }\n else if (type.indexOf('exchange') >= 0 || type.indexOf('position') >= 0) {\n return 'trade';\n }\n else {\n return type;\n }\n }\n parseLedgerEntry(item, currency = undefined) {\n //\n // [\n // [\n // 2531822314, // ID: Ledger identifier\n // \"USD\", // CURRENCY: The symbol of the currency (ex. \"BTC\")\n // null, // PLACEHOLDER\n // 1573521810000, // MTS: Timestamp in milliseconds\n // null, // PLACEHOLDER\n // 0.01644445, // AMOUNT: Amount of funds moved\n // 0, // BALANCE: New balance\n // null, // PLACEHOLDER\n // \"Settlement @ 185.79 on wallet margin\" // DESCRIPTION: Description of ledger transaction\n // ]\n // ]\n //\n let type = undefined;\n const id = this.safeString(item, 0);\n const currencyId = this.safeString(item, 1);\n const code = this.safeCurrencyCode(currencyId, currency);\n const timestamp = this.safeInteger(item, 3);\n const amount = this.safeNumber(item, 5);\n const after = this.safeNumber(item, 6);\n const description = this.safeString(item, 8);\n if (description !== undefined) {\n const parts = description.split(' @ ');\n const first = this.safeStringLower(parts, 0);\n type = this.parseLedgerEntryType(first);\n }\n return {\n 'id': id,\n 'direction': undefined,\n 'account': undefined,\n 'referenceId': id,\n 'referenceAccount': undefined,\n 'type': type,\n 'currency': code,\n 'amount': amount,\n 'timestamp': timestamp,\n 'datetime': this.iso8601(timestamp),\n 'before': undefined,\n 'after': after,\n 'status': undefined,\n 'fee': undefined,\n 'info': item,\n };\n }\n async fetchLedger(code = undefined, since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name bitfinex2#fetchLedger\n * @description fetch the history of changes, actions done by the user or operations that altered balance of the user\n * @see https://docs.bitfinex.com/reference/rest-auth-ledgers\n * @param {string} code unified currency code, default is undefined\n * @param {int} [since] timestamp in ms of the earliest ledger entry, default is undefined\n * @param {int} [limit] max number of ledger entrys to return, default is undefined max is 2500\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {int} [params.until] timestamp in ms of the latest ledger entry\n * @param {boolean} [params.paginate] default false, when true will automatically paginate by calling this endpoint multiple times. See in the docs all the [available parameters](https://github.com/ccxt/ccxt/wiki/Manual#pagination-params)\n * @returns {object} a [ledger structure]{@link https://docs.ccxt.com/#/?id=ledger-structure}\n */\n await this.loadMarkets();\n let paginate = false;\n [paginate, params] = this.handleOptionAndParams(params, 'fetchLedger', 'paginate');\n if (paginate) {\n return await this.fetchPaginatedCallDynamic('fetchLedger', code, since, limit, params, 2500);\n }\n let currency = undefined;\n let request = {};\n if (since !== undefined) {\n request['start'] = since;\n }\n if (limit !== undefined) {\n request['limit'] = limit;\n }\n [request, params] = this.handleUntilOption('end', request, params);\n let response = undefined;\n if (code !== undefined) {\n currency = this.currency(code);\n request['currency'] = currency['uppercaseId'];\n response = await this.privatePostAuthRLedgersCurrencyHist(this.extend(request, params));\n }\n else {\n response = await this.privatePostAuthRLedgersHist(this.extend(request, params));\n }\n //\n // [\n // [\n // 2531822314, // ID: Ledger identifier\n // \"USD\", // CURRENCY: The symbol of the currency (ex. \"BTC\")\n // null, // PLACEHOLDER\n // 1573521810000, // MTS: Timestamp in milliseconds\n // null, // PLACEHOLDER\n // 0.01644445, // AMOUNT: Amount of funds moved\n // 0, // BALANCE: New balance\n // null, // PLACEHOLDER\n // \"Settlement @ 185.79 on wallet margin\" // DESCRIPTION: Description of ledger transaction\n // ]\n // ]\n //\n return this.parseLedger(response, currency, since, limit);\n }\n async editOrder(id, symbol, type, side, amount = undefined, price = undefined, params = {}) {\n /**\n * @method\n * @name bitfinex2#editOrder\n * @description edit a trade order\n * @see https://docs.bitfinex.com/reference/rest-auth-update-order\n * @param {string} id edit order id\n * @param {string} symbol unified symbol of the market to edit an order in\n * @param {string} type 'market' or 'limit'\n * @param {string} side 'buy' or 'sell'\n * @param {float} amount how much you want to trade in units of the base currency\n * @param {float} [price] the price that the order is to be fullfilled, in units of the quote currency, ignored in market orders\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {float} [params.stopPrice] the price that triggers a trigger order\n * @param {boolean} [params.postOnly] set to true if you want to make a post only order\n * @param {boolean} [params.reduceOnly] indicates that the order is to reduce the size of a position\n * @param {int} [params.flags] additional order parameters: 4096 (Post Only), 1024 (Reduce Only), 16384 (OCO), 64 (Hidden), 512 (Close), 524288 (No Var Rates)\n * @param {int} [params.leverage] leverage for a derivative order, supported by derivative symbol orders only, the value should be between 1 and 100 inclusive\n * @param {int} [params.clientOrderId] a unique client order id for the order\n * @param {float} [params.trailingAmount] *swap only* the quote amount to trail away from the current market price\n * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n await this.loadMarkets();\n const market = this.market(symbol);\n const request = {\n 'id': this.parseToNumeric(id),\n };\n if (amount !== undefined) {\n let amountString = this.amountToPrecision(symbol, amount);\n amountString = (side === 'buy') ? amountString : Precise.stringNeg(amountString);\n request['amount'] = amountString;\n }\n const stopPrice = this.safeString2(params, 'stopPrice', 'triggerPrice');\n const trailingAmount = this.safeString(params, 'trailingAmount');\n const timeInForce = this.safeString(params, 'timeInForce');\n const postOnlyParam = this.safeBool(params, 'postOnly', false);\n const reduceOnly = this.safeBool(params, 'reduceOnly', false);\n const clientOrderId = this.safeInteger2(params, 'cid', 'clientOrderId');\n if (trailingAmount !== undefined) {\n request['price_trailing'] = trailingAmount;\n }\n else if (stopPrice !== undefined) {\n // request['price'] is taken as stopPrice for stop orders\n request['price'] = this.priceToPrecision(symbol, stopPrice);\n if (type === 'limit') {\n request['price_aux_limit'] = this.priceToPrecision(symbol, price);\n }\n }\n const postOnly = (postOnlyParam || (timeInForce === 'PO'));\n if ((type !== 'market') && (stopPrice === undefined)) {\n request['price'] = this.priceToPrecision(symbol, price);\n }\n // flag values may be summed to combine flags\n let flags = 0;\n if (postOnly) {\n flags = this.sum(flags, 4096);\n }\n if (reduceOnly) {\n flags = this.sum(flags, 1024);\n }\n if (flags !== 0) {\n request['flags'] = flags;\n }\n if (clientOrderId !== undefined) {\n request['cid'] = clientOrderId;\n }\n const leverage = this.safeInteger2(params, 'leverage', 'lev');\n if (leverage !== undefined) {\n request['lev'] = leverage;\n }\n params = this.omit(params, ['triggerPrice', 'stopPrice', 'timeInForce', 'postOnly', 'reduceOnly', 'trailingAmount', 'clientOrderId', 'leverage']);\n const response = await this.privatePostAuthWOrderUpdate(this.extend(request, params));\n //\n // [\n // 1706845376402,\n // \"ou-req\",\n // null,\n // null,\n // [\n // 139658969116,\n // null,\n // 1706843908637,\n // \"tBTCUST\",\n // 1706843908637,\n // 1706843908638,\n // 0.0002,\n // 0.0002,\n // \"EXCHANGE LIMIT\",\n // null,\n // null,\n // null,\n // 0,\n // \"ACTIVE\",\n // null,\n // null,\n // 35000,\n // 0,\n // 0,\n // 0,\n // null,\n // null,\n // null,\n // 0,\n // 0,\n // null,\n // null,\n // null,\n // \"API>BFX\",\n // null,\n // null,\n // {}\n // ],\n // null,\n // \"SUCCESS\",\n // \"Submitting update to exchange limit buy order for 0.0002 BTC.\"\n // ]\n //\n const status = this.safeString(response, 6);\n if (status !== 'SUCCESS') {\n const errorCode = response[5];\n const errorText = response[7];\n throw new TradeError()\n .addMessage(response[6] + ': ' + errorText + ' (#' + errorCode + ')')\n .exchange(this.id);\n }\n const order = this.safeList(response, 4, []);\n return this.parseOrder(order, market);\n }\n}\n","// ----------------------------------------------------------------------------\n\n// PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:\n// https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code\n// EDIT THE CORRESPONDENT .ts FILE INSTEAD\n\n// ---------------------------------------------------------------------------\nimport Exchange from './abstract/bitget.js';\nimport { Precise } from './base/Precise.js';\nimport { networkIdsByCurrencyAndNetworkCodesCacheIdentifier } from './base/cache.js';\nimport { TICK_SIZE } from './base/functions/number.js';\nimport { AuthenticationError, ExchangeAccountSuspendedError, ExchangeDDosProtectionError, ExchangeError, ExchangeInvalidNonceError, ExchangeInvalidPermissionsError, ExchangeNotAllowedMethodError, ExchangeNotAvailableError, ExchangeRateLimitExceededError, ExchangeRequestExpiredError, ExchangeTransferError, ExchangeUnderMaintenanceError, ExchangeUnknownAssetError, InsufficientBalanceError, InternalError, InvalidAddressError, InvalidCredentialsError, InvalidParamsError, MarketError, MarketNotFoundError, MarketTypeNotSupportedError, OrderNotFoundError, OverWithdrawMaximumError, TradeError, UnderWithdrawMinimumError, WhitelistCheckFailedError, WithdrawalError } from './sdk/errors.js';\nimport { SdkErrorMessages } from './sdk/errorsMetadata.js';\nimport { SubAccountNotFoundError } from './sdk/subAccount.js';\nimport { sha256 } from './static_dependencies/noble-hashes/sha256.js';\n// ---------------------------------------------------------------------------\n/**\n * @class bitget\n * @augments Exchange\n */\nexport default class bitget extends Exchange {\n constructor() {\n super(...arguments);\n this.USDT_FUTURES = 'USDT-FUTURES';\n this.USDT_SETTLES = ['USDT'];\n this.USDC_FUTURES = 'USDC-FUTURES';\n this.USDC_SETTLES = ['USDC'];\n this.SUSDT_FUTURES = 'SUSDT-FUTURES';\n this.SUSDT_SETTLES = ['SUSDT'];\n this.SUSDC_FUTURES = 'SUSDC-FUTURES';\n this.SUSDC_SETTLES = ['SUSDC'];\n this.COIN_FUTURES = 'COIN-FUTURES';\n this.SCOIN_FUTURES = 'SCOIN-FUTURES';\n this.SCOIN_SETTLES = ['SETH', 'SBTC', 'SEOS'];\n }\n describe() {\n return this.deepExtend(super.describe(), {\n 'id': 'bitget',\n 'name': 'Bitget',\n 'countries': ['SG'],\n 'version': 'v2',\n 'rateLimit': 50,\n 'certified': true,\n 'pro': true,\n 'has': {\n 'CORS': undefined,\n 'spot': true,\n 'margin': true,\n 'swap': true,\n 'future': true,\n 'option': false,\n 'cancelAllOrders': true,\n 'cancelOrder': true,\n 'cancelOrders': true,\n 'createDepositAddress': false,\n 'createMarketBuyOrderWithCost': true,\n 'createMarketOrderWithCost': false,\n 'createMarketSellOrderWithCost': false,\n 'createOrder': true,\n 'createOrders': true,\n 'createOrderWithTakeProfitAndStopLoss': true,\n 'createTakeProfitOrder': true,\n 'createTrailingAmountOrder': false,\n 'createTrailingPercentOrder': true,\n 'createTriggerOrder': true,\n 'editOrder': true,\n 'fetchAccounts': false,\n 'fetchBalance': true,\n 'fetchCanceledAndClosedOrders': true,\n 'fetchCanceledOrders': true,\n 'fetchClosedOrders': true,\n 'fetchCurrencies': true,\n 'fetchDeposit': false,\n 'fetchDepositAddress': true,\n 'fetchDepositAddresses': false,\n 'fetchDeposits': true,\n 'fetchDepositsWithdrawals': false,\n 'fetchDepositWithdrawFee': 'emulated',\n 'fetchDepositWithdrawFees': true,\n 'fetchLedger': true,\n 'fetchMarkets': true,\n 'fetchMyTrades': true,\n 'fetchOHLCV': true,\n 'fetchOpenOrders': true,\n 'fetchOrder': true,\n 'fetchOrderBook': true,\n 'fetchOrderBooks': false,\n 'fetchOrders': false,\n 'fetchOrderTrades': false,\n 'fetchPosition': true,\n 'fetchPositions': true,\n 'fetchPositionsRisk': false,\n 'fetchStatus': false,\n 'fetchTicker': true,\n 'fetchTickers': true,\n 'fetchTime': true,\n 'fetchTrades': true,\n 'fetchTradingFee': true,\n 'fetchTradingFees': true,\n 'fetchTransactions': false,\n 'fetchTransfer': false,\n 'fetchTransfers': true,\n 'fetchWithdrawAddresses': false,\n 'fetchWithdrawal': false,\n 'fetchWithdrawals': true,\n 'transfer': true,\n 'withdraw': true,\n },\n 'timeframes': {\n '1m': '1m',\n '3m': '3m',\n '5m': '5m',\n '15m': '15m',\n '30m': '30m',\n '1h': '1h',\n '2h': '2h',\n '4h': '4h',\n '6h': '6h',\n '12h': '12h',\n '1d': '1d',\n '3d': '3d',\n '1w': '1w',\n '1M': '1m',\n },\n 'hostname': 'bitget.com',\n 'urls': {\n 'logo': 'https://user-images.githubusercontent.com/1294454/195989417-4253ddb0-afbe-4a1c-9dea-9dbcd121fa5d.jpg',\n 'api': {\n 'spot': 'https://api.{hostname}',\n 'mix': 'https://api.{hostname}',\n 'user': 'https://api.{hostname}',\n 'p2p': 'https://api.{hostname}',\n 'broker': 'https://api.{hostname}',\n 'margin': 'https://api.{hostname}',\n 'common': 'https://api.{hostname}',\n 'tax': 'https://api.{hostname}',\n 'convert': 'https://api.{hostname}',\n 'copy': 'https://api.{hostname}',\n 'earn': 'https://api.{hostname}',\n },\n 'www': 'https://www.bitget.com',\n 'doc': [\n 'https://www.bitget.com/api-doc/common/intro',\n 'https://www.bitget.com/api-doc/spot/intro',\n 'https://www.bitget.com/api-doc/contract/intro',\n 'https://www.bitget.com/api-doc/broker/intro',\n 'https://www.bitget.com/api-doc/margin/intro',\n 'https://www.bitget.com/api-doc/copytrading/intro',\n 'https://www.bitget.com/api-doc/earn/intro',\n 'https://bitgetlimited.github.io/apidoc/en/mix',\n 'https://bitgetlimited.github.io/apidoc/en/spot',\n 'https://bitgetlimited.github.io/apidoc/en/broker',\n 'https://bitgetlimited.github.io/apidoc/en/margin',\n ],\n 'fees': 'https://www.bitget.cc/zh-CN/rate?tab=1',\n // https://www.bitget.com/expressly?languageType=0&channelCode=ccxt&vipCode=tg9j - I removed the code for now, because CWS is blocking until we explain our affiliate program to our users\n 'referral': 'https://www.bitget.com',\n },\n 'api': {\n 'public': {\n 'common': {\n 'get': {\n 'v2/public/annoucements': 1,\n 'v2/public/time': 1,\n },\n },\n 'spot': {\n 'get': {\n 'spot/v1/notice/queryAllNotices': 1,\n 'spot/v1/public/time': 1,\n 'spot/v1/public/currencies': 6.6667,\n 'spot/v1/public/products': 1,\n 'spot/v1/public/product': 1,\n 'spot/v1/market/ticker': 1,\n 'spot/v1/market/tickers': 1,\n 'spot/v1/market/fills': 2,\n 'spot/v1/market/fills-history': 2,\n 'spot/v1/market/candles': 1,\n 'spot/v1/market/depth': 1,\n 'spot/v1/market/spot-vip-level': 2,\n 'spot/v1/market/merge-depth': 1,\n 'spot/v1/market/history-candles': 1,\n 'spot/v1/public/loan/coinInfos': 2,\n 'spot/v1/public/loan/hour-interest': 2,\n 'v2/spot/public/coins': 6.6667,\n 'v2/spot/public/symbols': 1,\n 'v2/spot/market/vip-fee-rate': 2,\n 'v2/spot/market/tickers': 1,\n 'v2/spot/market/merge-depth': 1,\n 'v2/spot/market/orderbook': 1,\n 'v2/spot/market/candles': 1,\n 'v2/spot/market/history-candles': 1,\n 'v2/spot/market/fills': 2,\n 'v2/spot/market/fills-history': 2,\n },\n },\n 'mix': {\n 'get': {\n 'mix/v1/market/contracts': 1,\n 'mix/v1/market/depth': 1,\n 'mix/v1/market/ticker': 1,\n 'mix/v1/market/tickers': 1,\n 'mix/v1/market/contract-vip-level': 2,\n 'mix/v1/market/fills': 1,\n 'mix/v1/market/fills-history': 2,\n 'mix/v1/market/candles': 1,\n 'mix/v1/market/index': 1,\n 'mix/v1/market/funding-time': 1,\n 'mix/v1/market/history-fundRate': 1,\n 'mix/v1/market/current-fundRate': 1,\n 'mix/v1/market/open-interest': 1,\n 'mix/v1/market/mark-price': 1,\n 'mix/v1/market/symbol-leverage': 1,\n 'mix/v1/market/queryPositionLever': 1,\n 'mix/v1/market/open-limit': 1,\n 'mix/v1/market/history-candles': 1,\n 'mix/v1/market/history-index-candles': 1,\n 'mix/v1/market/history-mark-candles': 1,\n 'mix/v1/market/merge-depth': 1,\n 'v2/mix/market/vip-fee-rate': 2,\n 'v2/mix/market/merge-depth': 1,\n 'v2/mix/market/ticker': 1,\n 'v2/mix/market/tickers': 1,\n 'v2/mix/market/fills': 1,\n 'v2/mix/market/fills-history': 2,\n 'v2/mix/market/candles': 1,\n 'v2/mix/market/history-candles': 1,\n 'v2/mix/market/history-index-candles': 1,\n 'v2/mix/market/history-mark-candles': 1,\n 'v2/mix/market/open-interest': 1,\n 'v2/mix/market/funding-time': 1,\n 'v2/mix/market/symbol-price': 1,\n 'v2/mix/market/history-fund-rate': 1,\n 'v2/mix/market/current-fund-rate': 1,\n 'v2/mix/market/contracts': 1,\n 'v2/mix/market/query-position-lever': 2,\n },\n },\n 'margin': {\n 'get': {\n 'margin/v1/cross/public/interestRateAndLimit': 2,\n 'margin/v1/isolated/public/interestRateAndLimit': 2,\n 'margin/v1/cross/public/tierData': 2,\n 'margin/v1/isolated/public/tierData': 2,\n 'margin/v1/public/currencies': 1,\n 'v2/margin/currencies': 2,\n },\n },\n 'earn': {\n 'get': {\n 'v2/earn/loan/public/coinInfos': 2,\n 'v2/earn/loan/public/hour-interest': 2,\n },\n },\n },\n 'private': {\n 'spot': {\n 'get': {\n 'spot/v1/wallet/deposit-address': 4,\n 'spot/v1/wallet/withdrawal-list': 1,\n 'spot/v1/wallet/deposit-list': 1,\n 'spot/v1/account/getInfo': 20,\n 'spot/v1/account/assets': 2,\n 'spot/v1/account/assets-lite': 2,\n 'spot/v1/account/transferRecords': 1,\n 'spot/v1/convert/currencies': 2,\n 'spot/v1/convert/convert-record': 2,\n 'spot/v1/loan/ongoing-orders': 2,\n 'spot/v1/loan/repay-history': 2,\n 'spot/v1/loan/revise-history': 2,\n 'spot/v1/loan/borrow-history': 2,\n 'spot/v1/loan/debts': 2,\n 'v2/spot/trade/orderInfo': 1,\n 'v2/spot/trade/unfilled-orders': 1,\n 'v2/spot/trade/history-orders': 1,\n 'v2/spot/trade/fills': 2,\n 'v2/spot/trade/current-plan-order': 1,\n 'v2/spot/trade/history-plan-order': 1,\n 'v2/spot/account/info': 20,\n 'v2/spot/account/assets': 2,\n 'v2/spot/account/subaccount-assets': 2,\n 'v2/spot/account/bills': 2,\n 'v2/spot/account/transferRecords': 1,\n 'v2/spot/wallet/deposit-address': 2,\n 'v2/spot/wallet/deposit-records': 2,\n 'v2/spot/wallet/withdrawal-records': 2,\n },\n 'post': {\n 'spot/v1/wallet/transfer': 4,\n 'spot/v1/wallet/transfer-v2': 4,\n 'spot/v1/wallet/subTransfer': 10,\n 'spot/v1/wallet/withdrawal': 4,\n 'spot/v1/wallet/withdrawal-v2': 4,\n 'spot/v1/wallet/withdrawal-inner': 4,\n 'spot/v1/wallet/withdrawal-inner-v2': 4,\n 'spot/v1/account/sub-account-spot-assets': 200,\n 'spot/v1/account/bills': 2,\n 'spot/v1/trade/orders': 2,\n 'spot/v1/trade/batch-orders': 4,\n 'spot/v1/trade/cancel-order': 2,\n 'spot/v1/trade/cancel-order-v2': 2,\n 'spot/v1/trade/cancel-symbol-order': 2,\n 'spot/v1/trade/cancel-batch-orders': 4,\n 'spot/v1/trade/cancel-batch-orders-v2': 4,\n 'spot/v1/trade/orderInfo': 1,\n 'spot/v1/trade/open-orders': 1,\n 'spot/v1/trade/history': 1,\n 'spot/v1/trade/fills': 1,\n 'spot/v1/plan/placePlan': 1,\n 'spot/v1/plan/modifyPlan': 1,\n 'spot/v1/plan/cancelPlan': 1,\n 'spot/v1/plan/currentPlan': 1,\n 'spot/v1/plan/historyPlan': 1,\n 'spot/v1/plan/batchCancelPlan': 2,\n 'spot/v1/convert/quoted-price': 4,\n 'spot/v1/convert/trade': 4,\n 'spot/v1/loan/borrow': 2,\n 'spot/v1/loan/repay': 2,\n 'spot/v1/loan/revise-pledge': 2,\n 'spot/v1/trace/order/orderCurrentList': 2,\n 'spot/v1/trace/order/orderHistoryList': 2,\n 'spot/v1/trace/order/closeTrackingOrder': 2,\n 'spot/v1/trace/order/updateTpsl': 2,\n 'spot/v1/trace/order/followerEndOrder': 2,\n 'spot/v1/trace/order/spotInfoList': 2,\n 'spot/v1/trace/config/getTraderSettings': 2,\n 'spot/v1/trace/config/getFollowerSettings': 2,\n 'spot/v1/trace/user/myTraders': 2,\n 'spot/v1/trace/config/setFollowerConfig': 2,\n 'spot/v1/trace/user/myFollowers': 2,\n 'spot/v1/trace/config/setProductCode': 2,\n 'spot/v1/trace/user/removeTrader': 2,\n 'spot/v1/trace/getRemovableFollower': 2,\n 'spot/v1/trace/user/removeFollower': 2,\n 'spot/v1/trace/profit/totalProfitInfo': 2,\n 'spot/v1/trace/profit/totalProfitList': 2,\n 'spot/v1/trace/profit/profitHisList': 2,\n 'spot/v1/trace/profit/profitHisDetailList': 2,\n 'spot/v1/trace/profit/waitProfitDetailList': 2,\n 'spot/v1/trace/user/getTraderInfo': 2,\n 'v2/spot/trade/place-order': 2,\n 'v2/spot/trade/cancel-order': 2,\n 'v2/spot/trade/batch-orders': 20,\n 'v2/spot/trade/batch-cancel-order': 2,\n 'v2/spot/trade/cancel-symbol-order': 4,\n 'v2/spot/trade/place-plan-order': 1,\n 'v2/spot/trade/modify-plan-order': 1,\n 'v2/spot/trade/cancel-plan-order': 1,\n 'v2/spot/trade/batch-cancel-plan-order': 2,\n 'v2/spot/wallet/transfer': 2,\n 'v2/spot/wallet/subaccount-transfer': 2,\n 'v2/spot/wallet/withdrawal': 2,\n },\n },\n 'mix': {\n 'get': {\n 'mix/v1/account/account': 2,\n 'mix/v1/account/accounts': 2,\n 'mix/v1/position/singlePosition': 2,\n 'mix/v1/position/singlePosition-v2': 2,\n 'mix/v1/position/allPosition': 4,\n 'mix/v1/position/allPosition-v2': 4,\n 'mix/v1/position/history-position': 1,\n 'mix/v1/account/accountBill': 2,\n 'mix/v1/account/accountBusinessBill': 4,\n 'mix/v1/order/current': 1,\n 'mix/v1/order/marginCoinCurrent': 1,\n 'mix/v1/order/history': 2,\n 'mix/v1/order/historyProductType': 4,\n 'mix/v1/order/detail': 2,\n 'mix/v1/order/fills': 2,\n 'mix/v1/order/allFills': 2,\n 'mix/v1/plan/currentPlan': 1,\n 'mix/v1/plan/historyPlan': 2,\n 'mix/v1/trace/currentTrack': 2,\n 'mix/v1/trace/followerOrder': 2,\n 'mix/v1/trace/followerHistoryOrders': 2,\n 'mix/v1/trace/historyTrack': 2,\n 'mix/v1/trace/summary': 1,\n 'mix/v1/trace/profitSettleTokenIdGroup': 1,\n 'mix/v1/trace/profitDateGroupList': 1,\n 'mix/v1/trade/profitDateList': 2,\n 'mix/v1/trace/waitProfitDateList': 1,\n 'mix/v1/trace/traderSymbols': 1,\n 'mix/v1/trace/traderList': 2,\n 'mix/v1/trace/traderDetail': 2,\n 'mix/v1/trace/queryTraceConfig': 2,\n 'v2/mix/account/account': 2,\n 'v2/mix/account/accounts': 2,\n 'v2/mix/account/sub-account-assets': 200,\n 'v2/mix/account/open-count': 2,\n 'v2/mix/account/bill': 2,\n 'v2/mix/market/query-position-lever': 2,\n 'v2/mix/position/single-position': 2,\n 'v2/mix/position/all-position': 4,\n 'v2/mix/position/history-position': 1,\n 'v2/mix/order/detail': 2,\n 'v2/mix/order/fills': 2,\n 'v2/mix/order/fill-history': 2,\n 'v2/mix/order/orders-pending': 2,\n 'v2/mix/order/orders-history': 2,\n 'v2/mix/order/orders-plan-pending': 2,\n 'v2/mix/order/orders-plan-history': 2,\n 'v2/account/funding-assets': 2,\n },\n 'post': {\n 'mix/v1/account/sub-account-contract-assets': 200,\n 'mix/v1/account/open-count': 1,\n 'mix/v1/account/setLeverage': 4,\n 'mix/v1/account/setMargin': 4,\n 'mix/v1/account/setMarginMode': 4,\n 'mix/v1/account/setPositionMode': 4,\n 'mix/v1/order/placeOrder': 2,\n 'mix/v1/order/batch-orders': 2,\n 'mix/v1/order/cancel-order': 2,\n 'mix/v1/order/cancel-batch-orders': 2,\n 'mix/v1/order/modifyOrder': 2,\n 'mix/v1/order/cancel-symbol-orders': 2,\n 'mix/v1/order/cancel-all-orders': 2,\n 'mix/v1/order/close-all-positions': 20,\n 'mix/v1/plan/placePlan': 2,\n 'mix/v1/plan/modifyPlan': 2,\n 'mix/v1/plan/modifyPlanPreset': 2,\n 'mix/v1/plan/placeTPSL': 2,\n 'mix/v1/plan/placeTrailStop': 2,\n 'mix/v1/plan/placePositionsTPSL': 2,\n 'mix/v1/plan/modifyTPSLPlan': 2,\n 'mix/v1/plan/cancelPlan': 2,\n 'mix/v1/plan/cancelSymbolPlan': 2,\n 'mix/v1/plan/cancelAllPlan': 2,\n 'mix/v1/trace/closeTrackOrder': 2,\n 'mix/v1/trace/modifyTPSL': 2,\n 'mix/v1/trace/closeTrackOrderBySymbol': 2,\n 'mix/v1/trace/setUpCopySymbols': 2,\n 'mix/v1/trace/followerSetBatchTraceConfig': 2,\n 'mix/v1/trace/followerCloseByTrackingNo': 2,\n 'mix/v1/trace/followerCloseByAll': 2,\n 'mix/v1/trace/followerSetTpsl': 2,\n 'mix/v1/trace/cancelCopyTrader': 4,\n 'mix/v1/trace/traderUpdateConfig': 2,\n 'mix/v1/trace/myTraderList': 2,\n 'mix/v1/trace/myFollowerList': 2,\n 'mix/v1/trace/removeFollower': 2,\n 'mix/v1/trace/public/getFollowerConfig': 2,\n 'mix/v1/trace/report/order/historyList': 2,\n 'mix/v1/trace/report/order/currentList': 2,\n 'mix/v1/trace/queryTraderTpslRatioConfig': 2,\n 'mix/v1/trace/traderUpdateTpslRatioConfig': 2,\n 'v2/mix/account/set-leverage': 4,\n 'v2/mix/account/set-margin': 4,\n 'v2/mix/account/set-margin-mode': 4,\n 'v2/mix/account/set-position-mode': 4,\n 'v2/mix/order/place-order': 20,\n 'v2/mix/order/click-backhand': 20,\n 'v2/mix/order/batch-place-order': 20,\n 'v2/mix/order/modify-order': 2,\n 'v2/mix/order/cancel-order': 2,\n 'v2/mix/order/batch-cancel-orders': 2,\n 'v2/mix/order/close-positions': 20,\n 'v2/mix/order/place-tpsl-order': 2,\n 'v2/mix/order/place-plan-order': 2,\n 'v2/mix/order/modify-tpsl-order': 2,\n 'v2/mix/order/modify-plan-order': 2,\n 'v2/mix/order/cancel-plan-order': 2,\n },\n },\n 'user': {\n 'get': {\n 'user/v1/fee/query': 2,\n 'user/v1/sub/virtual-list': 2,\n 'user/v1/sub/virtual-api-list': 2,\n 'user/v1/tax/spot-record': 1,\n 'user/v1/tax/future-record': 1,\n 'user/v1/tax/margin-record': 1,\n 'user/v1/tax/p2p-record': 1,\n 'v2/user/virtual-subaccount-list': 2,\n 'v2/user/virtual-subaccount-apikey-list': 2,\n },\n 'post': {\n 'user/v1/sub/virtual-create': 4,\n 'user/v1/sub/virtual-modify': 4,\n 'user/v1/sub/virtual-api-batch-create': 20,\n 'user/v1/sub/virtual-api-create': 4,\n 'user/v1/sub/virtual-api-modify': 4,\n 'v2/user/create-virtual-subaccount': 4,\n 'v2/user/modify-virtual-subaccount': 4,\n 'v2/user/batch-create-subaccount-and-apikey': 20,\n 'v2/user/create-virtual-subaccount-apikey': 4,\n 'v2/user/modify-virtual-subaccount-apikey': 4,\n },\n },\n 'p2p': {\n 'get': {\n 'p2p/v1/merchant/merchantList': 2,\n 'p2p/v1/merchant/merchantInfo': 2,\n 'p2p/v1/merchant/advList': 2,\n 'p2p/v1/merchant/orderList': 2,\n 'v2/p2p/merchantList': 2,\n 'v2/p2p/merchantInfo': 2,\n 'v2/p2p/orderList': 2,\n 'v2/p2p/advList': 2,\n },\n },\n 'broker': {\n 'get': {\n 'broker/v1/account/info': 2,\n 'broker/v1/account/sub-list': 20,\n 'broker/v1/account/sub-email': 20,\n 'broker/v1/account/sub-spot-assets': 2,\n 'broker/v1/account/sub-future-assets': 2,\n 'broker/v1/account/subaccount-transfer': 1,\n 'broker/v1/account/subaccount-deposit': 1,\n 'broker/v1/account/subaccount-withdrawal': 1,\n 'broker/v1/account/sub-api-list': 2,\n 'v2/broker/account/info': 2,\n 'v2/broker/account/subaccount-list': 20,\n 'v2/broker/account/subaccount-email': 2,\n 'v2/broker/account/subaccount-spot-assets': 2,\n 'v2/broker/account/subaccount-future-assets': 2,\n 'v2/broker/manage/subaccount-apikey-list': 2,\n },\n 'post': {\n 'broker/v1/account/sub-create': 20,\n 'broker/v1/account/sub-modify': 20,\n 'broker/v1/account/sub-modify-email': 20,\n 'broker/v1/account/sub-address': 2,\n 'broker/v1/account/sub-withdrawal': 2,\n 'broker/v1/account/sub-auto-transfer': 4,\n 'broker/v1/account/sub-api-create': 2,\n 'broker/v1/account/sub-api-modify': 2,\n 'v2/broker/account/modify-subaccount-email': 2,\n 'v2/broker/account/create-subaccount': 20,\n 'v2/broker/account/modify-subaccount': 20,\n 'v2/broker/account/subaccount-address': 2,\n 'v2/broker/account/subaccount-withdrawal': 2,\n 'v2/broker/account/set-subaccount-autotransfer': 2,\n 'v2/broker/manage/create-subaccount-apikey': 2,\n 'v2/broker/manage/modify-subaccount-apikey': 2,\n },\n },\n 'margin': {\n 'get': {\n 'margin/v1/cross/account/riskRate': 2,\n 'margin/v1/cross/account/maxTransferOutAmount': 2,\n 'margin/v1/isolated/account/maxTransferOutAmount': 2,\n 'margin/v1/isolated/order/openOrders': 2,\n 'margin/v1/isolated/order/history': 2,\n 'margin/v1/isolated/order/fills': 2,\n 'margin/v1/isolated/loan/list': 2,\n 'margin/v1/isolated/repay/list': 2,\n 'margin/v1/isolated/interest/list': 2,\n 'margin/v1/isolated/liquidation/list': 2,\n 'margin/v1/isolated/fin/list': 2,\n 'margin/v1/cross/order/openOrders': 2,\n 'margin/v1/cross/order/history': 2,\n 'margin/v1/cross/order/fills': 2,\n 'margin/v1/cross/loan/list': 2,\n 'margin/v1/cross/repay/list': 2,\n 'margin/v1/cross/interest/list': 2,\n 'margin/v1/cross/liquidation/list': 2,\n 'margin/v1/cross/fin/list': 2,\n 'margin/v1/cross/account/assets': 2,\n 'margin/v1/isolated/account/assets': 2,\n 'v2/margin/crossed/borrow-history': 2,\n 'v2/margin/crossed/repay-history': 2,\n 'v2/margin/crossed/interest-history': 2,\n 'v2/margin/crossed/liquidation-history': 2,\n 'v2/margin/crossed/financial-records': 2,\n 'v2/margin/crossed/account/assets': 2,\n 'v2/margin/crossed/account/risk-rate': 2,\n 'v2/margin/crossed/account/max-borrowable-amount': 2,\n 'v2/margin/crossed/account/max-transfer-out-amount': 2,\n 'v2/margin/crossed/interest-rate-and-limit': 2,\n 'v2/margin/crossed/tier-data': 2,\n 'v2/margin/crossed/open-orders': 2,\n 'v2/margin/crossed/history-orders': 2,\n 'v2/margin/crossed/fills': 2,\n 'v2/margin/isolated/borrow-history': 2,\n 'v2/margin/isolated/repay-history': 2,\n 'v2/margin/isolated/interest-history': 2,\n 'v2/margin/isolated/liquidation-history': 2,\n 'v2/margin/isolated/financial-records': 2,\n 'v2/margin/isolated/account/assets': 2,\n 'v2/margin/isolated/account/risk-rate': 2,\n 'v2/margin/isolated/account/max-borrowable-amount': 2,\n 'v2/margin/isolated/account/max-transfer-out-amount': 2,\n 'v2/margin/isolated/interest-rate-and-limit': 2,\n 'v2/margin/isolated/tier-data': 2,\n 'v2/margin/isolated/open-orders': 2,\n 'v2/margin/isolated/history-orders': 2,\n 'v2/margin/isolated/fills': 2,\n },\n 'post': {\n 'margin/v1/cross/account/borrow': 2,\n 'margin/v1/isolated/account/borrow': 2,\n 'margin/v1/cross/account/repay': 2,\n 'margin/v1/isolated/account/repay': 2,\n 'margin/v1/isolated/account/riskRate': 2,\n 'margin/v1/cross/account/maxBorrowableAmount': 2,\n 'margin/v1/isolated/account/maxBorrowableAmount': 2,\n 'margin/v1/isolated/account/flashRepay': 2,\n 'margin/v1/isolated/account/queryFlashRepayStatus': 2,\n 'margin/v1/cross/account/flashRepay': 2,\n 'margin/v1/cross/account/queryFlashRepayStatus': 2,\n 'margin/v1/isolated/order/placeOrder': 4,\n 'margin/v1/isolated/order/batchPlaceOrder': 4,\n 'margin/v1/isolated/order/cancelOrder': 2,\n 'margin/v1/isolated/order/batchCancelOrder': 2,\n 'margin/v1/cross/order/placeOrder': 2,\n 'margin/v1/cross/order/batchPlaceOrder': 2,\n 'margin/v1/cross/order/cancelOrder': 2,\n 'margin/v1/cross/order/batchCancelOrder': 2,\n 'v2/margin/crossed/account/borrow': 2,\n 'v2/margin/crossed/account/repay': 2,\n 'v2/margin/crossed/account/flash-repay': 2,\n 'v2/margin/crossed/account/query-flash-repay-status': 2,\n 'v2/margin/crossed/place-order': 2,\n 'v2/margin/crossed/batch-place-order': 2,\n 'v2/margin/crossed/cancel-order': 2,\n 'v2/margin/crossed/batch-cancel-order': 2,\n 'v2/margin/isolated/account/borrow': 2,\n 'v2/margin/isolated/account/repay': 2,\n 'v2/margin/isolated/account/flash-repay': 2,\n 'v2/margin/isolated/account/query-flash-repay-status': 2,\n 'v2/margin/isolated/place-order': 2,\n 'v2/margin/isolated/batch-place-order': 2,\n 'v2/margin/isolated/cancel-order': 2,\n 'v2/margin/isolated/batch-cancel-order': 2,\n },\n },\n 'copy': {\n 'get': {\n 'v2/copy/mix-trader/order-current-track': 2,\n 'v2/copy/mix-trader/order-history-track': 2,\n 'v2/copy/mix-trader/order-total-detail': 2,\n 'v2/copy/mix-trader/profit-history-summarys': 1,\n 'v2/copy/mix-trader/profit-history-details': 1,\n 'v2/copy/mix-trader/profit-details': 1,\n 'v2/copy/mix-trader/profits-group-coin-date': 1,\n 'v2/copy/mix-trader/config-query-symbols': 1,\n 'v2/copy/mix-trader/config-query-followers': 2,\n 'v2/copy/mix-follower/query-current-orders': 2,\n 'v2/copy/mix-follower/query-history-orders': 1,\n 'v2/copy/mix-follower/query-settings': 2,\n 'v2/copy/mix-follower/query-traders': 2,\n 'v2/copy/mix-follower/query-quantity-limit': 2,\n 'v2/copy/mix-broker/query-traders': 2,\n 'v2/copy/mix-broker/query-history-traces': 2,\n 'v2/copy/mix-broker/query-current-traces': 2,\n 'v2/copy/spot-trader/profit-summarys': 2,\n 'v2/copy/spot-trader/profit-history-details': 2,\n 'v2/copy/spot-trader/profit-details': 2,\n 'v2/copy/spot-trader/order-total-detail': 2,\n 'v2/copy/spot-trader/order-history-track': 2,\n 'v2/copy/spot-trader/order-current-track': 2,\n 'v2/copy/spot-trader/config-query-settings': 2,\n 'v2/copy/spot-trader/config-query-followers': 2,\n 'v2/copy/spot-follower/query-traders': 2,\n 'v2/copy/spot-follower/query-trader-symbols': 2,\n 'v2/copy/spot-follower/query-settings': 2,\n 'v2/copy/spot-follower/query-history-orders': 2,\n 'v2/copy/spot-follower/query-current-orders': 2,\n },\n 'post': {\n 'v2/copy/mix-trader/order-modify-tpsl': 2,\n 'v2/copy/mix-trader/order-close-positions': 2,\n 'v2/copy/mix-trader/config-setting-symbols': 2,\n 'v2/copy/mix-trader/config-setting-base': 2,\n 'v2/copy/mix-trader/config-remove-follower': 2,\n 'v2/copy/mix-follower/setting-tpsl': 1,\n 'v2/copy/mix-follower/settings': 2,\n 'v2/copy/mix-follower/close-positions': 2,\n 'v2/copy/mix-follower/cancel-trader': 4,\n 'v2/copy/spot-trader/order-modify-tpsl': 2,\n 'v2/copy/spot-trader/order-close-tracking': 2,\n 'v2/copy/spot-trader/config-setting-symbols': 2,\n 'v2/copy/spot-trader/config-remove-follower': 2,\n 'v2/copy/spot-follower/stop-order': 2,\n 'v2/copy/spot-follower/settings': 2,\n 'v2/copy/spot-follower/setting-tpsl': 2,\n 'v2/copy/spot-follower/order-close-tracking': 2,\n 'v2/copy/spot-follower/cancel-trader': 2,\n },\n },\n 'tax': {\n 'get': {\n 'v2/tax/spot-record': 20,\n 'v2/tax/future-record': 20,\n 'v2/tax/margin-record': 20,\n 'v2/tax/p2p-record': 20,\n },\n },\n 'convert': {\n 'get': {\n 'v2/convert/currencies': 2,\n 'v2/convert/quoted-price': 2,\n 'v2/convert/convert-record': 2,\n },\n 'post': {\n 'v2/convert/trade': 2,\n },\n },\n 'earn': {\n 'get': {\n 'v2/earn/savings/product': 2,\n 'v2/earn/savings/account': 2,\n 'v2/earn/savings/assets': 2,\n 'v2/earn/savings/records': 2,\n 'v2/earn/savings/subscribe-info': 2,\n 'v2/earn/savings/subscribe-result': 2,\n 'v2/earn/savings/redeem-result': 2,\n 'v2/earn/sharkfin/product': 2,\n 'v2/earn/sharkfin/account': 2,\n 'v2/earn/sharkfin/assets': 2,\n 'v2/earn/sharkfin/records': 2,\n 'v2/earn/sharkfin/subscribe-info': 2,\n 'v2/earn/sharkfin/subscribe-result': 4,\n 'v2/earn/loan/ongoing-orders': 2,\n 'v2/earn/loan/repay-history': 2,\n 'v2/earn/loan/revise-history': 2,\n 'v2/earn/loan/borrow-history': 2,\n 'v2/earn/loan/debts': 2,\n 'v2/earn/loan/reduces': 2,\n 'v2/earn/account/assets': 2,\n },\n 'post': {\n 'v2/earn/savings/subscribe': 2,\n 'v2/earn/savings/redeem': 2,\n 'v2/earn/sharkfin/subscribe': 2,\n 'v2/earn/loan/borrow': 2,\n 'v2/earn/loan/repay': 2,\n 'v2/earn/loan/revise-pledge': 2,\n },\n },\n 'common': {\n 'get': {\n 'v2/common/trade-rate': 2,\n },\n },\n },\n },\n 'fees': {\n 'spot': {\n 'taker': this.parseNumber('0.002'),\n 'maker': this.parseNumber('0.002'),\n },\n 'swap': {\n 'taker': this.parseNumber('0.0006'),\n 'maker': this.parseNumber('0.0004'),\n },\n },\n 'requiredCredentials': {\n 'apiKey': true,\n 'secret': true,\n 'password': true,\n },\n 'exceptions': {\n // http error codes\n // 400 Bad Request — Invalid request format\n // 401 Unauthorized — Invalid API Key\n // 403 Forbidden — You do not have access to the requested resource\n // 404 Not Found\n // 500 Internal Server Error — We had a problem with our server\n 'exact': {\n '1': InternalError,\n // undocumented\n 'failure to get a peer from the ring-balancer': ExchangeNotAvailableError,\n '4010': ExchangeInvalidPermissionsError,\n // common\n // '0': ExchangeError, // 200 successful,when the order placement / cancellation / operation is successful\n '4001': InternalError,\n '4002': InternalError,\n // --------------------------------------------------------\n '30001': AuthenticationError,\n '30002': AuthenticationError,\n '30003': AuthenticationError,\n '30004': AuthenticationError,\n '30005': ExchangeInvalidNonceError,\n '30006': AuthenticationError,\n '30007': InternalError,\n '30008': ExchangeRequestExpiredError,\n '30009': InternalError,\n '30010': AuthenticationError,\n '30011': ExchangeInvalidPermissionsError,\n '30012': AuthenticationError,\n '30013': AuthenticationError,\n '30014': ExchangeDDosProtectionError,\n '30015': AuthenticationError,\n '30016': ExchangeInvalidPermissionsError,\n '30017': AuthenticationError,\n '30018': AuthenticationError,\n '30019': ExchangeNotAvailableError,\n '30020': InternalError,\n '30021': InternalError,\n '30022': ExchangeInvalidPermissionsError,\n '30023': InvalidParamsError,\n '30024': InvalidParamsError,\n '30025': InvalidParamsError,\n '30026': ExchangeDDosProtectionError,\n '30027': AuthenticationError,\n '30028': ExchangeInvalidPermissionsError,\n '30029': ExchangeAccountSuspendedError,\n '30030': InternalError,\n '30031': ExchangeUnknownAssetError,\n '30032': MarketNotFoundError,\n '30033': InternalError,\n '30034': InternalError,\n '30035': InternalError,\n '30036': InternalError,\n '30037': ExchangeNotAvailableError,\n // '30038': AuthenticationError, // { \"code\": 30038, \"message\": \"user does not exist\" }\n '30038': ExchangeUnderMaintenanceError,\n // futures\n '32001': ExchangeAccountSuspendedError,\n '32002': ExchangeInvalidPermissionsError,\n '32003': TradeError,\n '32004': TradeError,\n '32005': InvalidParamsError,\n '32006': InvalidParamsError,\n '32007': InvalidParamsError,\n '32008': TradeError,\n '32009': TradeError,\n '32010': TradeError,\n '32011': TradeError,\n '32012': TradeError,\n '32013': TradeError,\n '32014': TradeError,\n '32015': TradeError,\n '32016': TradeError,\n '32017': TradeError,\n '32018': InvalidParamsError,\n '32019': InvalidParamsError,\n '32020': InvalidParamsError,\n '32021': TradeError,\n '32022': ExchangeNotAllowedMethodError,\n '32023': InternalError,\n '32024': TradeError,\n '32025': TradeError,\n '32026': ExchangeInvalidPermissionsError,\n '32027': TradeError,\n '32028': ExchangeAccountSuspendedError,\n '32029': TradeError,\n '32030': TradeError,\n '32031': InvalidParamsError,\n '32038': AuthenticationError,\n '32040': ExchangeError,\n '32044': TradeError,\n '32045': ExchangeError,\n '32046': TradeError,\n '32047': InternalError,\n '32048': TradeError,\n '32049': ExchangeError,\n '32050': TradeError,\n '32051': TradeError,\n '32052': ExchangeError,\n '32053': ExchangeError,\n '32057': ExchangeError,\n '32054': ExchangeError,\n '32055': TradeError,\n '32056': ExchangeError,\n '32058': ExchangeError,\n '32059': TradeError,\n '32060': InvalidParamsError,\n '32061': InvalidParamsError,\n '32062': InvalidParamsError,\n '32063': InvalidParamsError,\n '32064': ExchangeError,\n '32065': ExchangeError,\n '32066': ExchangeError,\n '32067': ExchangeError,\n '32068': ExchangeError,\n '32069': ExchangeError,\n '32070': ExchangeError,\n '32071': ExchangeError,\n '32072': ExchangeError,\n '32073': ExchangeError,\n '32074': ExchangeError,\n '32075': ExchangeError,\n '32076': ExchangeError,\n '32077': ExchangeError,\n '32078': ExchangeError,\n '32079': ExchangeError,\n '32080': ExchangeError,\n '32083': ExchangeError,\n // token and margin trading\n '33001': ExchangeInvalidPermissionsError,\n '33002': ExchangeAccountSuspendedError,\n '33003': InsufficientBalanceError,\n '33004': ExchangeError,\n '33005': ExchangeError,\n '33006': ExchangeError,\n '33007': ExchangeError,\n '33008': InsufficientBalanceError,\n '33009': ExchangeError,\n '33010': ExchangeError,\n '33011': ExchangeError,\n '33012': ExchangeError,\n '33013': TradeError,\n '33014': OrderNotFoundError,\n '33015': TradeError,\n '33016': ExchangeError,\n '33017': InsufficientBalanceError,\n '33018': ExchangeError,\n '33020': ExchangeError,\n '33021': TradeError,\n '33022': TradeError,\n '33023': ExchangeError,\n '33024': InvalidParamsError,\n '33025': InvalidParamsError,\n '33026': ExchangeError,\n '33027': TradeError,\n '33028': InvalidParamsError,\n '33029': InvalidParamsError,\n '33034': ExchangeError,\n '33035': ExchangeError,\n '33036': ExchangeError,\n '33037': ExchangeError,\n '33038': ExchangeError,\n '33039': ExchangeError,\n '33040': ExchangeError,\n '33041': ExchangeError,\n '33042': ExchangeError,\n '33043': ExchangeError,\n '33044': ExchangeError,\n '33045': ExchangeError,\n '33046': ExchangeError,\n '33047': ExchangeError,\n '33048': ExchangeError,\n '33049': ExchangeError,\n '33050': ExchangeError,\n '33051': ExchangeError,\n '33059': InvalidParamsError,\n '33060': InvalidParamsError,\n '33061': ExchangeError,\n '33062': ExchangeError,\n '33063': ExchangeError,\n '33064': ExchangeError,\n '33065': ExchangeError,\n // account\n '21009': ExchangeError,\n '34001': ExchangeInvalidPermissionsError,\n '34002': InvalidAddressError,\n '34003': WithdrawalError,\n '34004': WithdrawalError,\n '34005': WithdrawalError,\n '34006': UnderWithdrawMinimumError,\n '34007': OverWithdrawMaximumError,\n '34008': InsufficientBalanceError,\n '34009': WithdrawalError,\n '34010': ExchangeTransferError,\n '34011': ExchangeError,\n '34012': WithdrawalError,\n '34013': ExchangeTransferError,\n '34014': ExchangeTransferError,\n '34015': ExchangeError,\n '34016': ExchangeInvalidPermissionsError,\n '34017': ExchangeAccountSuspendedError,\n '34018': AuthenticationError,\n '34019': ExchangeInvalidPermissionsError,\n '34020': ExchangeInvalidPermissionsError,\n '34021': InvalidAddressError,\n '34022': ExchangeError,\n '34023': ExchangeInvalidPermissionsError,\n '34026': ExchangeError,\n '34036': ExchangeError,\n '34037': ExchangeError,\n '34038': ExchangeError,\n '34039': ExchangeError,\n // swap\n '35001': ExchangeError,\n '35002': ExchangeError,\n '35003': ExchangeError,\n '35004': ExchangeError,\n '35005': AuthenticationError,\n '35008': InvalidParamsError,\n '35010': InvalidParamsError,\n '35012': InvalidParamsError,\n '35014': InvalidParamsError,\n '35015': InvalidParamsError,\n '35017': ExchangeError,\n '35019': InvalidParamsError,\n '35020': InvalidParamsError,\n '35021': InvalidParamsError,\n '35022': ExchangeError,\n '35024': ExchangeError,\n '35025': InsufficientBalanceError,\n '35026': ExchangeError,\n '35029': OrderNotFoundError,\n '35030': InvalidParamsError,\n '35031': InvalidParamsError,\n '35032': ExchangeError,\n '35037': ExchangeError,\n '35039': ExchangeError,\n '35040': InvalidParamsError,\n '35044': ExchangeError,\n '35046': InsufficientBalanceError,\n '35047': InsufficientBalanceError,\n '35048': ExchangeError,\n '35049': InvalidParamsError,\n '35050': InvalidParamsError,\n '35052': InsufficientBalanceError,\n '35053': ExchangeError,\n '35055': InsufficientBalanceError,\n '35057': ExchangeError,\n '35058': ExchangeError,\n '35059': InvalidParamsError,\n '35060': InvalidParamsError,\n '35061': InvalidParamsError,\n '35062': InvalidParamsError,\n '35063': InvalidParamsError,\n '35064': InvalidParamsError,\n '35066': TradeError,\n '35067': TradeError,\n '35068': TradeError,\n '35069': TradeError,\n '35070': TradeError,\n '35071': InvalidParamsError,\n '35072': TradeError,\n '35073': TradeError,\n '35074': TradeError,\n '35075': TradeError,\n '35076': TradeError,\n '35077': TradeError,\n '35078': InvalidParamsError,\n '35079': TradeError,\n '35080': TradeError,\n '35081': TradeError,\n '35082': TradeError,\n '35083': TradeError,\n '35084': InvalidParamsError,\n '35085': InvalidParamsError,\n '35086': InvalidParamsError,\n '35087': InvalidParamsError,\n '35088': InvalidParamsError,\n '35089': InvalidParamsError,\n '35090': ExchangeError,\n '35091': ExchangeError,\n '35092': ExchangeError,\n '35093': ExchangeError,\n '35094': ExchangeError,\n '35095': ExchangeError,\n '35096': ExchangeError,\n '35097': ExchangeError,\n '35098': ExchangeError,\n '35099': ExchangeError,\n // option\n '36001': ExchangeError,\n '36002': ExchangeError,\n '36005': ExchangeError,\n '36101': AuthenticationError,\n '36102': ExchangeInvalidPermissionsError,\n '36103': ExchangeAccountSuspendedError,\n '36104': ExchangeInvalidPermissionsError,\n '36105': ExchangeInvalidPermissionsError,\n '36106': ExchangeAccountSuspendedError,\n '36107': ExchangeInvalidPermissionsError,\n '36108': InsufficientBalanceError,\n '36109': ExchangeInvalidPermissionsError,\n '36201': ExchangeInvalidPermissionsError,\n '36202': ExchangeInvalidPermissionsError,\n '36203': InvalidParamsError,\n '36204': ExchangeError,\n '36205': ExchangeError,\n '36206': InvalidParamsError,\n '36207': InvalidParamsError,\n '36208': InvalidParamsError,\n '36209': InvalidParamsError,\n '36210': InvalidParamsError,\n '36211': TradeError,\n '36212': TradeError,\n '36213': TradeError,\n '36214': ExchangeError,\n '36216': OrderNotFoundError,\n '36217': TradeError,\n '36218': TradeError,\n '36219': TradeError,\n '36220': TradeError,\n '36221': InvalidParamsError,\n '36222': InvalidParamsError,\n '36223': InvalidParamsError,\n '36224': InvalidParamsError,\n '36225': TradeError,\n '36226': TradeError,\n '36227': TradeError,\n '36228': TradeError,\n '36229': TradeError,\n '36230': TradeError,\n // --------------------------------------------------------\n // swap\n '400': ExchangeError,\n '401': AuthenticationError,\n '403': ExchangeInvalidPermissionsError,\n '404': InternalError,\n '405': InternalError,\n '415': InternalError,\n '429': ExchangeDDosProtectionError,\n '500': ExchangeNotAvailableError,\n '1001': ExchangeRateLimitExceededError,\n '1002': ExchangeError,\n '1003': ExchangeError,\n // '00000': ExchangeError, // success\n '40001': AuthenticationError,\n '40002': AuthenticationError,\n '40003': AuthenticationError,\n '40004': ExchangeInvalidNonceError,\n '40005': ExchangeInvalidNonceError,\n '40006': AuthenticationError,\n '40007': InternalError,\n '40008': ExchangeInvalidNonceError,\n '40009': AuthenticationError,\n '40010': AuthenticationError,\n '40011': AuthenticationError,\n '40012': AuthenticationError,\n '40013': ExchangeError,\n '40014': ExchangeInvalidPermissionsError,\n '40015': ExchangeError,\n '40016': ExchangeInvalidPermissionsError,\n '40017': ExchangeError,\n '40018': ExchangeInvalidPermissionsError,\n '40019': ExchangeError,\n '40031': ExchangeAccountSuspendedError,\n '40037': InvalidCredentialsError,\n '40102': ExchangeError,\n '40103': ExchangeError,\n '40104': ExchangeError,\n '40105': ExchangeError,\n '40106': ExchangeError,\n '40107': ExchangeError,\n '40108': InvalidParamsError,\n '40109': OrderNotFoundError,\n '40200': ExchangeUnderMaintenanceError,\n '40201': InvalidParamsError,\n '40202': ExchangeError,\n '40203': InvalidParamsError,\n '40204': InvalidParamsError,\n '40205': InvalidParamsError,\n '40206': InvalidParamsError,\n '40207': InvalidParamsError,\n '40208': InvalidParamsError,\n '40209': InvalidParamsError,\n '40300': ExchangeError,\n '40301': ExchangeInvalidPermissionsError,\n '40302': InvalidParamsError,\n '40303': ExchangeError,\n '40304': InvalidParamsError,\n '40305': InvalidParamsError,\n '40306': ExchangeError,\n '40308': ExchangeUnderMaintenanceError,\n '40309': ExchangeError,\n '40400': ExchangeError,\n '40401': ExchangeError,\n '40402': InvalidParamsError,\n '40403': InvalidParamsError,\n '40404': InvalidParamsError,\n '40405': InvalidParamsError,\n '40406': InvalidParamsError,\n '40407': ExchangeError,\n '40408': ExchangeError,\n '40409': ExchangeError,\n '40500': InvalidParamsError,\n '40501': ExchangeError,\n '40502': ExchangeError,\n '40503': ExchangeError,\n '40504': ExchangeError,\n '40505': ExchangeError,\n '40506': AuthenticationError,\n '40507': AuthenticationError,\n '40508': ExchangeError,\n '40509': ExchangeError,\n '40600': ExchangeError,\n '40601': ExchangeError,\n '40602': ExchangeError,\n '40603': ExchangeError,\n '40604': ExchangeNotAvailableError,\n '40605': ExchangeError,\n '40606': ExchangeError,\n '40607': ExchangeError,\n '40608': ExchangeError,\n '40609': ExchangeError,\n '40700': InvalidParamsError,\n '40701': ExchangeError,\n '40702': ExchangeError,\n '40703': ExchangeError,\n '40704': ExchangeError,\n '40705': InvalidParamsError,\n '40706': InvalidParamsError,\n '40707': InvalidParamsError,\n '40708': InvalidParamsError,\n '40709': ExchangeError,\n '40710': ExchangeError,\n '40711': InsufficientBalanceError,\n '40712': InsufficientBalanceError,\n '40713': ExchangeError,\n '40714': ExchangeError,\n '40768': OrderNotFoundError,\n '41114': ExchangeUnderMaintenanceError,\n '43011': InvalidParamsError,\n '43025': TradeError,\n '43115': ExchangeUnderMaintenanceError,\n '45110': InvalidParamsError,\n // spot\n 'invalid sign': AuthenticationError,\n 'invalid currency': InvalidParamsError,\n 'invalid symbol': InvalidParamsError,\n 'invalid period': InvalidParamsError,\n 'invalid user': ExchangeError,\n 'invalid amount': InvalidParamsError,\n 'invalid type': InvalidParamsError,\n 'invalid orderId': InvalidParamsError,\n 'invalid record': ExchangeError,\n 'invalid accountId': InvalidParamsError,\n 'invalid address': InvalidAddressError,\n 'accesskey not null': AuthenticationError,\n 'illegal accesskey': AuthenticationError,\n 'sign not null': AuthenticationError,\n 'req_time is too much difference from server time': ExchangeInvalidNonceError,\n 'permissions not right': ExchangeInvalidPermissionsError,\n 'illegal sign invalid': AuthenticationError,\n 'user locked': ExchangeAccountSuspendedError,\n 'Request Frequency Is Too High': ExchangeRateLimitExceededError,\n 'more than a daily rate of cash': ExchangeError,\n 'more than the maximum daily withdrawal amount': WithdrawalError,\n 'need to bind email or mobile': ExchangeError,\n 'user forbid': ExchangeInvalidPermissionsError,\n 'User Prohibited Cash Withdrawal': ExchangeInvalidPermissionsError,\n 'Cash Withdrawal Is Less Than The Minimum Value': UnderWithdrawMinimumError,\n 'Cash Withdrawal Is More Than The Maximum Value': OverWithdrawMaximumError,\n 'the account with in 24 hours ban coin': ExchangeInvalidPermissionsError,\n 'order cancel fail': TradeError,\n 'base symbol error': InvalidParamsError,\n 'base date error': ExchangeError,\n 'api signature not valid': AuthenticationError,\n 'gateway internal error': ExchangeError,\n 'audit failed': ExchangeError,\n 'order queryorder invalid': TradeError,\n 'market no need price': InvalidParamsError,\n 'limit need price': InvalidParamsError,\n 'userid not equal to account_id': ExchangeError,\n 'your balance is low': InsufficientBalanceError,\n 'address invalid cointype': ExchangeError,\n 'system exception': ExchangeError,\n '50003': ExchangeError,\n '50004': MarketError,\n '50006': ExchangeInvalidPermissionsError,\n '50007': ExchangeInvalidPermissionsError,\n '50008': ExchangeRequestExpiredError,\n '50009': ExchangeRateLimitExceededError,\n '50010': ExchangeError,\n '50014': InvalidParamsError,\n '50015': InvalidParamsError,\n '50016': InvalidParamsError,\n '50017': InvalidParamsError,\n '50018': InvalidParamsError,\n '50019': InvalidParamsError,\n '50020': InsufficientBalanceError,\n '50021': InvalidParamsError,\n '50026': InvalidParamsError,\n 'invalid order query time': ExchangeError,\n 'invalid start time': InvalidParamsError,\n 'invalid end time': InvalidParamsError,\n '20003': ExchangeError,\n '01001': ExchangeError,\n '43111': WhitelistCheckFailedError,\n '43114': UnderWithdrawMinimumError, // 43114: Withdrawal is less than the minimum withdrawal count less than min withdraw amount\n },\n 'broad': {\n 'invalid size, valid range': ExchangeError,\n },\n 'messages': {\n 'less than the minimum amount': SdkErrorMessages.ORDER_UNDER_MINIMUM,\n },\n },\n 'precisionMode': TICK_SIZE,\n 'options': {\n 'timeDifference': 0,\n 'timeframes': {\n 'spot': {\n '1m': '1min',\n '5m': '5min',\n '15m': '15min',\n '30m': '30min',\n '1h': '1h',\n '4h': '4h',\n '6h': '6Hutc',\n '12h': '12Hutc',\n '1d': '1Dutc',\n '3d': '3Dutc',\n '1w': '1Wutc',\n '1M': '1Mutc',\n },\n 'swap': {\n '1m': '1m',\n '3m': '3m',\n '5m': '5m',\n '15m': '15m',\n '30m': '30m',\n '1h': '1H',\n '2h': '2H',\n '4h': '4H',\n '6h': '6Hutc',\n '12h': '12Hutc',\n '1d': '1Dutc',\n '3d': '3Dutc',\n '1w': '1Wutc',\n '1M': '1Mutc',\n },\n },\n 'fetchMarkets': [\n 'spot',\n 'swap', // there is future markets but they use the same endpoints as swap\n ],\n 'defaultType': 'spot',\n 'defaultSubType': 'linear',\n 'createMarketBuyOrderRequiresPrice': true,\n 'broker': 'gdlc3',\n 'withdraw': {\n 'fillResponseFromRequest': true,\n },\n 'fetchOHLCV': {\n 'spot': {\n 'method': 'publicSpotGetV2SpotMarketCandles', // or publicSpotGetV2SpotMarketHistoryCandles\n },\n 'swap': {\n 'method': 'publicMixGetV2MixMarketCandles', // or publicMixGetV2MixMarketHistoryCandles or publicMixGetV2MixMarketHistoryIndexCandles or publicMixGetV2MixMarketHistoryMarkCandles\n },\n },\n 'fetchTrades': {\n 'spot': {\n 'method': 'publicSpotGetV2SpotMarketFillsHistory', // or publicSpotGetV2SpotMarketFills\n },\n 'swap': {\n 'method': 'publicMixGetV2MixMarketFillsHistory', // or publicMixGetV2MixMarketFills\n },\n },\n 'accountsByType': {\n 'spot': 'spot',\n 'cross': 'crossed_margin',\n 'isolated': 'isolated_margin',\n 'swap': 'usdt_futures',\n 'usdc_swap': 'usdc_futures',\n 'future': 'coin_futures',\n 'p2p': 'p2p',\n },\n 'accountsById': {\n 'spot': 'spot',\n 'crossed_margin': 'cross',\n 'isolated_margin': 'isolated',\n 'usdt_futures': 'swap',\n 'usdc_futures': 'usdc_swap',\n 'coin_futures': 'future',\n 'p2p': 'p2p',\n },\n 'sandboxMode': false,\n // network codes indexed by network IDs\n 'networksById': {\n 'TRC20': 'TRX',\n 'TRC10': 'TRX',\n 'ERC20': 'ETH',\n 'BRC20': 'BTC',\n 'BEP20': 'BSC',\n 'POLYGON': 'Polygon',\n },\n 'fetchPositions': {\n 'method': 'privateMixGetV2MixPositionAllPosition', // or privateMixGetV2MixPositionHistoryPosition\n },\n 'defaultTimeInForce': 'GTC', // 'GTC' = Good To Cancel (default), 'IOC' = Immediate Or Cancel\n },\n });\n }\n isUsingForcedProxy(params = {}, api = 'public') {\n if (api[0] === 'private') {\n return true;\n }\n return false;\n }\n nonce() {\n return this.milliseconds() - this.options['timeDifference'];\n }\n convertSymbolForSandbox(symbol) {\n if (symbol.startsWith('S')) {\n // handle using the exchange specified sandbox symbols\n return symbol;\n }\n let convertedSymbol = undefined;\n if (symbol.indexOf('/') > -1) {\n if (symbol.indexOf(':') === -1) {\n throw new MarketTypeNotSupportedError('unkwnown').overwriteMessage('Sandbox supports swap and future markets only').exchange(this.id);\n }\n const splitBase = symbol.split('/');\n const previousBase = this.safeString(splitBase, 0);\n const previousQuoteSettleExpiry = this.safeString(splitBase, 1);\n const splitQuote = previousQuoteSettleExpiry.split(':');\n const previousQuote = this.safeString(splitQuote, 0);\n const previousSettleExpiry = this.safeString(splitQuote, 1);\n const splitSettle = previousSettleExpiry.split('-');\n const previousSettle = this.safeString(splitSettle, 0);\n const expiry = this.safeString(splitSettle, 1);\n convertedSymbol = 'S' + previousBase + '/S' + previousQuote + ':S' + previousSettle;\n if (expiry !== undefined) {\n convertedSymbol = convertedSymbol + '-' + expiry;\n }\n }\n else {\n // handle using a market id instead of a unified symbol\n const base = symbol.slice(0, 3);\n const remaining = symbol.slice(3);\n convertedSymbol = 'S' + base + 'S' + remaining;\n }\n return convertedSymbol;\n }\n async fetchStatus(params = {}) {\n /**\n * @method\n * @name bitget#fetchStatus\n * @description the latest known information on the availability of the exchange API - bitget does not have such an endpoint, so we fetch the server time to see if the exchange is able to respond\n * @see https://www.bitget.com/api-doc/common/public/Get-Server-Time\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} a [status structure]{@link https://docs.ccxt.com/#/?id=exchange-status-structure}\n */\n const response = await this.publicCommonGetV2PublicTime(params);\n // {\n // \"code\": \"00000\",\n // \"msg\": \"success\",\n // \"requestTime\": 1688008631614,\n // \"data\": {\n // \"serverTime\": \"1688008631614\"\n // }\n // }\n const data = this.safeValue(response, 'data', {});\n const code = this.safeString(response, 'code');\n const status = (code === '00000') ? 'ok' : 'maintenance';\n const serverTime = this.safeInteger(data, 'serverTime');\n return {\n 'status': status,\n 'updated': serverTime,\n 'eta': undefined,\n 'url': undefined,\n 'info': response,\n };\n }\n handleProductTypeAndParams(market = undefined, params = {}) {\n let subType = undefined;\n [subType, params] = this.handleSubTypeAndParams('handleProductTypeAndParams', undefined, params);\n let defaultProductType = undefined;\n if ((subType !== undefined) && (market === undefined)) {\n // set default only if subType is defined and market is not defined, since there is also USDC productTypes which are also linear\n const sandboxMode = this.safeValue(this.options, 'sandboxMode', false);\n if (sandboxMode) {\n defaultProductType = (subType === 'linear') ? this.SUSDT_FUTURES : this.SCOIN_FUTURES;\n }\n else {\n defaultProductType = (subType === 'linear') ? this.USDT_FUTURES : this.COIN_FUTURES;\n }\n }\n let productType = this.safeString(params, 'productType', defaultProductType);\n if ((productType === undefined) && (market !== undefined)) {\n const settle = market['settle'];\n if (this.USDT_SETTLES.includes(settle)) {\n productType = this.USDT_FUTURES;\n }\n else if (this.USDC_SETTLES.includes(settle)) {\n productType = this.USDC_FUTURES;\n }\n else if (this.SUSDT_SETTLES.includes(settle)) {\n productType = this.SUSDT_FUTURES;\n }\n else if (this.SUSDC_SETTLES.includes(settle)) {\n productType = this.SUSDC_FUTURES;\n }\n else if (this.SCOIN_FUTURES.includes(settle)) {\n productType = this.SCOIN_FUTURES;\n }\n else {\n productType = this.COIN_FUTURES;\n }\n }\n if (productType === undefined) {\n throw new InvalidParamsError('Requires a productType param, one of \"USDT-FUTURES\", \"USDC-FUTURES\", \"COIN-FUTURES\", \"SUSDT-FUTURES\", \"SUSDC-FUTURES\" or \"SCOIN-FUTURES\"')\n .exchange(this.id);\n }\n params = this.omit(params, 'productType');\n return [productType, params];\n }\n async fetchTime(params = {}) {\n /**\n * @method\n * @name bitget#fetchTime\n * @description fetches the current integer timestamp in milliseconds from the exchange server\n * @see https://www.bitget.com/api-doc/common/public/Get-Server-Time\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {int} the current integer timestamp in milliseconds from the exchange server\n */\n const response = await this.publicCommonGetV2PublicTime(params);\n //\n // {\n // \"code\": \"00000\",\n // \"msg\": \"success\",\n // \"requestTime\": 1700111073740,\n // \"data\": {\n // \"serverTime\": \"1700111073740\"\n // }\n // }\n //\n const data = this.safeValue(response, 'data', {});\n return this.safeInteger(data, 'serverTime');\n }\n getFutureMarginCoin(productType) {\n if (productType === this.COIN_FUTURES) {\n const otherProductTypes = [...this.SCOIN_SETTLES, ...this.USDT_SETTLES, ...this.USDC_SETTLES, ...this.SUSDT_SETTLES, ...this.SUSDC_SETTLES];\n return [...new Set(Object.values(this.markets).map((market) => market['settle']).filter((settle) => settle !== undefined && !otherProductTypes.includes(settle)))];\n }\n else if (productType === this.SCOIN_FUTURES) {\n return this.SCOIN_SETTLES;\n }\n else if (productType === this.USDC_FUTURES) {\n return this.USDC_SETTLES;\n }\n else if (productType === this.USDT_FUTURES) {\n return this.USDT_SETTLES;\n }\n else if (productType === this.SUSDT_FUTURES) {\n return this.SUSDT_SETTLES;\n }\n else if (productType === this.SUSDC_FUTURES) {\n return this.SUSDC_SETTLES;\n }\n throw new InvalidParamsError('Invalid productType, one of \"USDT-FUTURES\", \"USDC-FUTURES\", \"COIN-FUTURES\", \"SUSDT-FUTURES\", \"SUSDC-FUTURES\" or \"SCOIN-FUTURES\"');\n }\n async fetchMarkets(params = {}) {\n /**\n * @method\n * @name bitget#fetchMarkets\n * @description retrieves data on all markets for bitget\n * @see https://www.bitget.com/api-doc/spot/market/Get-Symbols\n * @see https://www.bitget.com/api-doc/contract/market/Get-All-Symbols-Contracts\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object[]} an array of objects representing market data\n */\n const sandboxMode = this.safeValue(this.options, 'sandboxMode', false);\n let types = this.safeValue(this.options, 'fetchMarkets', ['spot', 'swap']);\n if (sandboxMode) {\n types = ['swap'];\n }\n let promises = [];\n for (let i = 0; i < types.length; i++) {\n const type = types[i];\n if (type === 'swap') {\n let subTypes = undefined;\n if (sandboxMode) {\n // the following are simulated trading markets [ 'SUSDT-FUTURES', 'SCOIN-FUTURES', 'SUSDC-FUTURES' ];\n subTypes = [this.SUSDT_FUTURES, this.SCOIN_FUTURES, this.SUSDC_FUTURES];\n }\n else {\n subTypes = [this.USDT_FUTURES, this.COIN_FUTURES, this.USDC_FUTURES];\n }\n for (let j = 0; j < subTypes.length; j++) {\n promises.push(this.fetchMarketsByType(type, this.extend(params, {\n 'productType': subTypes[j],\n })));\n }\n }\n else {\n promises.push(this.fetchMarketsByType(types[i], params));\n }\n }\n promises = await Promise.all(promises);\n let result = promises[0];\n for (let i = 1; i < promises.length; i++) {\n result = this.arrayConcat(result, promises[i]);\n }\n return result;\n }\n parseMarket(market) {\n //\n // spot\n //\n // {\n // \"symbol\": \"TRXUSDT\",\n // \"baseCoin\": \"TRX\",\n // \"quoteCoin\": \"USDT\",\n // \"minTradeAmount\": \"0\",\n // \"maxTradeAmount\": \"10000000000\",\n // \"takerFeeRate\": \"0.002\",\n // \"makerFeeRate\": \"0.002\",\n // \"pricePrecision\": \"6\",\n // \"quantityPrecision\": \"4\",\n // \"quotePrecision\": \"6\",\n // \"status\": \"online\",\n // \"minTradeUSDT\": \"5\",\n // \"buyLimitPriceRatio\": \"0.05\",\n // \"sellLimitPriceRatio\": \"0.05\"\n // }\n //\n // swap and future\n //\n // {\n // \"symbol\": \"BTCUSDT\",\n // \"baseCoin\": \"BTC\",\n // \"quoteCoin\": \"USDT\",\n // \"buyLimitPriceRatio\": \"0.01\",\n // \"sellLimitPriceRatio\": \"0.01\",\n // \"feeRateUpRatio\": \"0.005\",\n // \"makerFeeRate\": \"0.0002\",\n // \"takerFeeRate\": \"0.0006\",\n // \"openCostUpRatio\": \"0.01\",\n // \"supportMarginCoins\": [\"USDT\"],\n // \"minTradeNum\": \"0.001\",\n // \"priceEndStep\": \"1\",\n // \"volumePlace\": \"3\",\n // \"pricePlace\": \"1\",\n // \"sizeMultiplier\": \"0.001\",\n // \"symbolType\": \"perpetual\",\n // \"minTradeUSDT\": \"5\",\n // \"maxSymbolOrderNum\": \"200\",\n // \"maxProductOrderNum\": \"400\",\n // \"maxPositionNum\": \"150\",\n // \"symbolStatus\": \"normal\",\n // \"offTime\": \"-1\",\n // \"limitOpenTime\": \"-1\",\n // \"deliveryTime\": \"\",\n // \"deliveryStartTime\": \"\",\n // \"deliveryPeriod\": \"\",\n // \"launchTime\": \"\",\n // \"fundInterval\": \"8\",\n // \"minLever\": \"1\",\n // \"maxLever\": \"125\",\n // \"posLimit\": \"0.05\",\n // \"maintainTime\": \"\"\n // }\n //\n const marketId = this.safeString(market, 'symbol');\n const quoteId = this.safeString(market, 'quoteCoin');\n const baseId = this.safeString(market, 'baseCoin');\n const quote = this.safeCurrencyCode(quoteId);\n const base = this.safeCurrencyCode(baseId);\n const supportMarginCoins = this.safeValue(market, 'supportMarginCoins', []);\n let settleId = undefined;\n if (this.inArray(baseId, supportMarginCoins)) {\n settleId = baseId;\n }\n else if (this.inArray(quoteId, supportMarginCoins)) {\n settleId = quoteId;\n }\n else {\n settleId = this.safeString(supportMarginCoins, 0);\n }\n const settle = this.safeCurrencyCode(settleId);\n let symbol = base + '/' + quote;\n let type = undefined;\n let swap = false;\n let spot = false;\n let future = false;\n let contract = false;\n let pricePrecision = undefined;\n let amountPrecision = undefined;\n let linear = undefined;\n let inverse = undefined;\n let expiry = undefined;\n let expiryDatetime = undefined;\n const symbolType = this.safeString(market, 'symbolType');\n if (symbolType === undefined) {\n type = 'spot';\n spot = true;\n pricePrecision = this.parseNumber(this.parsePrecision(this.safeString(market, 'pricePrecision')));\n amountPrecision = this.parseNumber(this.parsePrecision(this.safeString(market, 'quantityPrecision')));\n }\n else {\n if (symbolType === 'perpetual') {\n type = 'swap';\n swap = true;\n symbol = symbol + ':' + settle;\n }\n else if (symbolType === 'delivery') {\n expiry = this.safeInteger(market, 'deliveryTime');\n expiryDatetime = this.iso8601(expiry);\n const expiryParts = expiryDatetime.split('-');\n const yearPart = this.safeString(expiryParts, 0);\n const dayPart = this.safeString(expiryParts, 2);\n const year = yearPart.slice(2, 4);\n const month = this.safeString(expiryParts, 1);\n const day = dayPart.slice(0, 2);\n const expiryString = year + month + day;\n type = 'future';\n future = true;\n symbol = symbol + ':' + settle + '-' + expiryString;\n }\n contract = true;\n inverse = (base === settle);\n linear = !inverse;\n const priceDecimals = this.safeInteger(market, 'pricePlace');\n const amountDecimals = this.safeInteger(market, 'volumePlace');\n const priceStep = this.safeString(market, 'priceEndStep');\n const amountStep = this.safeString(market, 'minTradeNum');\n const precisePrice = new Precise(priceStep);\n precisePrice.decimals = Math.max(precisePrice.decimals, priceDecimals);\n precisePrice.reduce();\n const priceString = precisePrice.toString();\n pricePrecision = this.parseNumber(priceString);\n const preciseAmount = new Precise(amountStep);\n preciseAmount.decimals = Math.max(preciseAmount.decimals, amountDecimals);\n preciseAmount.reduce();\n const amountString = preciseAmount.toString();\n amountPrecision = this.parseNumber(amountString);\n }\n const status = this.safeString2(market, 'status', 'symbolStatus');\n let active = undefined;\n if (status !== undefined) {\n active = ((status === 'online') || (status === 'normal'));\n }\n let minCost = undefined;\n if (quote === 'USDT') {\n minCost = this.safeNumber(market, 'minTradeUSDT');\n }\n const contractSize = contract ? 1 : undefined;\n return {\n 'id': marketId,\n 'symbol': symbol,\n 'base': base,\n 'quote': quote,\n 'settle': settle,\n 'baseId': baseId,\n 'quoteId': quoteId,\n 'settleId': settleId,\n 'type': type,\n 'spot': spot,\n 'margin': undefined,\n 'swap': swap,\n 'future': future,\n 'option': false,\n 'active': active,\n 'contract': contract,\n 'linear': linear,\n 'inverse': inverse,\n 'taker': this.safeNumber(market, 'takerFeeRate'),\n 'maker': this.safeNumber(market, 'makerFeeRate'),\n 'contractSize': contractSize,\n 'expiry': expiry,\n 'expiryDatetime': expiryDatetime,\n 'strike': undefined,\n 'optionType': undefined,\n 'precision': {\n 'amount': amountPrecision,\n 'price': pricePrecision,\n },\n 'limits': {\n 'leverage': {\n 'min': this.safeNumber(market, 'minLever'),\n 'max': this.safeNumber(market, 'maxLever'),\n },\n 'amount': {\n 'min': this.safeNumber2(market, 'minTradeNum', 'minTradeAmount'),\n 'max': this.safeNumber(market, 'maxTradeAmount'),\n },\n 'price': {\n 'min': undefined,\n 'max': undefined,\n },\n 'cost': {\n 'min': minCost,\n 'max': undefined,\n },\n },\n 'created': this.safeInteger(market, 'launchTime'),\n 'info': market,\n };\n }\n async fetchMarketsByType(type, params = {}) {\n let response = undefined;\n if (type === 'spot') {\n response = await this.publicSpotGetV2SpotPublicSymbols(params);\n }\n else if ((type === 'swap') || (type === 'future')) {\n response = await this.publicMixGetV2MixMarketContracts(params);\n }\n else {\n throw new MarketTypeNotSupportedError(type).exchange(this.id);\n }\n //\n // spot\n //\n // {\n // \"code\": \"00000\",\n // \"msg\": \"success\",\n // \"requestTime\": 1700102364653,\n // \"data\": [\n // {\n // \"symbol\": \"TRXUSDT\",\n // \"baseCoin\": \"TRX\",\n // \"quoteCoin\": \"USDT\",\n // \"minTradeAmount\": \"0\",\n // \"maxTradeAmount\": \"10000000000\",\n // \"takerFeeRate\": \"0.002\",\n // \"makerFeeRate\": \"0.002\",\n // \"pricePrecision\": \"6\",\n // \"quantityPrecision\": \"4\",\n // \"quotePrecision\": \"6\",\n // \"status\": \"online\",\n // \"minTradeUSDT\": \"5\",\n // \"buyLimitPriceRatio\": \"0.05\",\n // \"sellLimitPriceRatio\": \"0.05\"\n // },\n // ]\n // }\n //\n // swap and future\n //\n // {\n // \"code\": \"00000\",\n // \"msg\": \"success\",\n // \"requestTime\": 1700102364709,\n // \"data\": [\n // {\n // \"symbol\": \"BTCUSDT\",\n // \"baseCoin\": \"BTC\",\n // \"quoteCoin\": \"USDT\",\n // \"buyLimitPriceRatio\": \"0.01\",\n // \"sellLimitPriceRatio\": \"0.01\",\n // \"feeRateUpRatio\": \"0.005\",\n // \"makerFeeRate\": \"0.0002\",\n // \"takerFeeRate\": \"0.0006\",\n // \"openCostUpRatio\": \"0.01\",\n // \"supportMarginCoins\": [\"USDT\"],\n // \"minTradeNum\": \"0.001\",\n // \"priceEndStep\": \"1\",\n // \"volumePlace\": \"3\",\n // \"pricePlace\": \"1\",\n // \"sizeMultiplier\": \"0.001\",\n // \"symbolType\": \"perpetual\",\n // \"minTradeUSDT\": \"5\",\n // \"maxSymbolOrderNum\": \"200\",\n // \"maxProductOrderNum\": \"400\",\n // \"maxPositionNum\": \"150\",\n // \"symbolStatus\": \"normal\",\n // \"offTime\": \"-1\",\n // \"limitOpenTime\": \"-1\",\n // \"deliveryTime\": \"\",\n // \"deliveryStartTime\": \"\",\n // \"deliveryPeriod\": \"\",\n // \"launchTime\": \"\",\n // \"fundInterval\": \"8\",\n // \"minLever\": \"1\",\n // \"maxLever\": \"125\",\n // \"posLimit\": \"0.05\",\n // \"maintainTime\": \"\"\n // },\n // ]\n // }\n //\n const data = this.safeValue(response, 'data', []);\n return this.parseMarkets(data);\n }\n networkCodeToId(networkCode, currencyCode) {\n const networkIdsByCurrencyAndNetworkCodes = this.safeValue(this.options, 'networkIdsByCurrencyAndNetworkCodes', {});\n const networkIdsByCodes = this.safeValue(networkIdsByCurrencyAndNetworkCodes, currencyCode, {});\n return this.safeString(networkIdsByCodes, networkCode);\n }\n async fetchCurrencies(params = {}) {\n /**\n * @method\n * @name bitget#fetchCurrencies\n * @description fetches all available currencies on an exchange\n * @see https://www.bitget.com/api-doc/spot/market/Get-Coin-List\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} an associative dictionary of currencies\n */\n const response = await this.publicSpotGetV2SpotPublicCoins(params);\n //\n // {\n // \"code\": \"00000\",\n // \"data\": [\n // {\n // \"chains\": [\n // {\n // \"browserUrl\": \"https://blockchair.com/bitcoin/transaction/\",\n // \"chain\": \"BTC\",\n // \"depositConfirm\": \"1\",\n // \"extraWithdrawFee\": \"0\",\n // \"minDepositAmount\": \"0.0001\",\n // \"minWithdrawAmount\": \"0.005\",\n // \"needTag\": \"false\",\n // \"rechargeable\": \"true\",\n // \"withdrawConfirm\": \"1\",\n // \"withdrawFee\": \"0.0004\",\n // \"withdrawable\": \"true\"\n // },\n // ],\n // \"coin\": \"BTC\",\n // \"coinId\": \"1\",\n // \"transfer\": \"true\"\"\n // }\n // ],\n // \"msg\": \"success\",\n // \"requestTime\": \"1700120731773\"\n // }\n //\n const result = {};\n const data = this.safeValue(response, 'data', []);\n this.options['networkIdsByCurrencyAndNetworkCodes'] = {};\n for (let i = 0; i < data.length; i++) {\n const entry = data[i];\n const id = this.safeString(entry, 'coinId');\n const code = this.safeCurrencyCode(this.safeString(entry, 'coin'));\n this.options['networkIdsByCurrencyAndNetworkCodes'][code] = {};\n const chains = this.safeValue(entry, 'chains', []);\n const networks = {};\n let isTokenDepositable = false;\n let isTokenWithdrawable = false;\n let minWithdrawString = undefined;\n let minDepositString = undefined;\n let minWithdrawFeeString = undefined;\n for (let j = 0; j < chains.length; j++) {\n const chain = chains[j];\n const networkId = this.safeString(chain, 'chain');\n const networkCode = this.networkIdToCode(networkId, code);\n const withdrawEnabled = this.safeString(chain, 'withdrawable');\n const isWithdrawalEnabled = withdrawEnabled === 'true';\n const depositEnabled = this.safeString(chain, 'rechargeable');\n const isDepositEnabled = depositEnabled === 'true';\n isTokenDepositable = isDepositEnabled || isTokenDepositable;\n isTokenWithdrawable = isWithdrawalEnabled || isTokenWithdrawable;\n const networkWithdrawFeeString = this.safeString(chain, 'withdrawFee');\n if (networkWithdrawFeeString !== undefined) {\n minWithdrawFeeString = (minWithdrawFeeString === undefined) ? networkWithdrawFeeString : Precise.stringMin(networkWithdrawFeeString, minWithdrawFeeString);\n }\n const networkMinWithdrawString = this.safeString(chain, 'minWithdrawAmount');\n if (networkMinWithdrawString !== undefined) {\n minWithdrawString = (minWithdrawString === undefined) ? networkMinWithdrawString : Precise.stringMin(networkMinWithdrawString, minWithdrawString);\n }\n const networkMinDepositString = this.safeString(chain, 'minDepositAmount');\n if (networkMinDepositString !== undefined) {\n minDepositString = (minDepositString === undefined) ? networkMinDepositString : Precise.stringMin(networkMinDepositString, minDepositString);\n }\n this.options['networkIdsByCurrencyAndNetworkCodes'][code][networkCode] = networkId; // we assume all networkCodes are unique by currency (e.g. no ERC20 and ETH for the same currency)\n networks[networkCode] = {\n 'info': chain,\n 'id': networkId,\n 'network': networkCode,\n 'limits': {\n 'withdraw': {\n 'min': this.parseNumber(networkMinWithdrawString),\n 'max': undefined,\n },\n 'deposit': {\n 'min': this.parseNumber(networkMinDepositString),\n 'max': undefined,\n },\n },\n 'active': isWithdrawalEnabled && isDepositEnabled,\n 'withdraw': isWithdrawalEnabled,\n 'deposit': isDepositEnabled,\n 'fee': this.parseNumber(networkWithdrawFeeString),\n 'precision': this.safeNumber(chain, 'withdrawMinScale', 8),\n };\n }\n result[code] = {\n 'info': entry,\n 'id': id,\n 'code': code,\n 'networks': networks,\n 'type': undefined,\n 'name': undefined,\n 'active': isTokenDepositable && isTokenWithdrawable,\n 'deposit': isTokenDepositable,\n 'withdraw': isTokenWithdrawable,\n 'fee': this.parseNumber(minWithdrawFeeString),\n 'precision': undefined,\n 'limits': {\n 'amount': {\n 'min': undefined,\n 'max': undefined,\n },\n 'withdraw': {\n 'min': this.parseNumber(minWithdrawString),\n 'max': undefined,\n },\n 'deposit': {\n 'min': this.parseNumber(minDepositString),\n 'max': undefined,\n },\n },\n 'created': undefined,\n };\n }\n await this.cache.set({\n 'key': networkIdsByCurrencyAndNetworkCodesCacheIdentifier(this.id),\n 'data': this.options['networkIdsByCurrencyAndNetworkCodes'],\n 'clone': false,\n 'ttl': null,\n });\n return result;\n }\n async fetchDeposits(code = undefined, since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name bitget#fetchDeposits\n * @description fetch all deposits made to an account\n * @see https://www.bitget.com/api-doc/spot/account/Get-Deposit-Record\n * @param {string} code unified currency code\n * @param {int} [since] the earliest time in ms to fetch deposits for\n * @param {int} [limit] the maximum number of deposits structures to retrieve\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {int} [params.until] end time in milliseconds\n * @param {string} [params.idLessThan] return records with id less than the provided value\n * @param {boolean} [params.paginate] default false, when true will automatically paginate by calling this endpoint multiple times. See in the docs all the [available parameters](https://github.com/ccxt/ccxt/wiki/Manual#pagination-params)\n * @returns {object[]} a list of [transaction structures]{@link https://docs.ccxt.com/#/?id=transaction-structure}\n */\n await this.loadMarkets();\n let paginate = false;\n [paginate, params] = this.handleOptionAndParams(params, 'fetchDeposits', 'paginate');\n if (paginate) {\n return await this.fetchPaginatedCallCursor('fetchDeposits', undefined, since, limit, params, 'idLessThan', 'idLessThan', undefined, 100);\n }\n if (code === undefined) {\n throw new InvalidParamsError('fetchDeposits() requires a `code` argument')\n .exchange(this.id);\n }\n const currency = this.currency(code);\n if (since === undefined) {\n since = this.milliseconds() - 7776000000; // 90 days\n }\n let request = {\n 'coin': currency['code'],\n 'startTime': since,\n 'endTime': this.milliseconds(),\n };\n if (limit !== undefined) {\n request['limit'] = limit;\n }\n [request, params] = this.handleUntilOption('endTime', request, params);\n const response = await this.privateSpotGetV2SpotWalletDepositRecords(this.extend(request, params));\n //\n // {\n // \"code\": \"00000\",\n // \"msg\": \"success\",\n // \"requestTime\": 1700528340608,\n // \"data\": [\n // {\n // \"orderId\": \"1083832260799930368\",\n // \"tradeId\": \"35bf0e588a42b25c71a9d45abe7308cabdeec6b7b423910b9bd4743d3a9a9efa\",\n // \"coin\": \"BTC\",\n // \"type\": \"deposit\",\n // \"size\": \"0.00030000\",\n // \"status\": \"success\",\n // \"toAddress\": \"1BfZh7JESJGBUszCGeZnzxbVVvBycbJSbA\",\n // \"dest\": \"on_chain\",\n // \"chain\": \"BTC\",\n // \"fromAddress\": null,\n // \"cTime\": \"1694131668281\",\n // \"uTime\": \"1694131680247\"\n // }\n // ]\n // }\n //\n const rawTransactions = this.safeValue(response, 'data', []);\n return this.parseTransactions(rawTransactions, currency, since, limit);\n }\n async withdraw(code, amount, address, tag = undefined, params = {}) {\n /**\n * @method\n * @name bitget#withdraw\n * @description make a withdrawal\n * @see https://www.bitget.com/api-doc/spot/account/Wallet-Withdrawal\n * @param {string} code unified currency code\n * @param {float} amount the amount to withdraw\n * @param {string} address the address to withdraw to\n * @param {string} tag\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {string} [params.chain] the blockchain network the withdrawal is taking place on\n * @returns {object} a [transaction structure]{@link https://docs.ccxt.com/#/?id=transaction-structure}\n */\n this.checkAddress(address);\n const chain = this.safeString2(params, 'chain', 'network');\n params = this.omit(params, 'network');\n if (chain === undefined) {\n throw new InvalidParamsError('withdraw() requires a chain parameter or a network parameter')\n .exchange(this.id);\n }\n await this.loadMarkets();\n const currency = this.currency(code);\n const networkId = this.networkCodeToId(chain, code);\n const precisionAmount = this.currencyToPrecision(code, amount, chain);\n const request = {\n 'coin': currency['code'],\n 'address': address,\n 'chain': networkId,\n 'amount': precisionAmount,\n };\n if (tag !== undefined) {\n request['tag'] = tag;\n }\n const response = await this.privateSpotPostSpotV1WalletWithdrawalV2(this.extend(request, params));\n //\n // {\n // \"code\":\"00000\",\n // \"msg\":\"success\",\n // \"requestTime\":1696784219602,\n // \"data\": {\n // \"orderId\":\"1094957867615789056\",\n // \"clientOrderId\":\"64f1e4ce842041d296b4517df1b5c2d7\"\n // }\n // }\n //\n const data = this.safeValue(response, 'data');\n let id = undefined;\n if (typeof data === 'string') {\n id = data;\n }\n else if (data !== undefined) {\n id = this.safeString(data, 'orderId');\n }\n const result = {\n 'id': id,\n 'info': response,\n 'txid': undefined,\n 'timestamp': undefined,\n 'datetime': undefined,\n 'network': undefined,\n 'addressFrom': undefined,\n 'address': undefined,\n 'addressTo': undefined,\n 'amount': undefined,\n 'type': 'withdrawal',\n 'currency': undefined,\n 'status': undefined,\n 'updated': undefined,\n 'tagFrom': undefined,\n 'tag': undefined,\n 'tagTo': undefined,\n 'comment': undefined,\n 'fee': undefined,\n };\n const withdrawOptions = this.safeValue(this.options, 'withdraw', {});\n const fillResponseFromRequest = this.safeBool(withdrawOptions, 'fillResponseFromRequest', true);\n if (fillResponseFromRequest) {\n result['currency'] = code;\n result['timestamp'] = this.milliseconds();\n result['datetime'] = this.iso8601(this.milliseconds());\n result['amount'] = amount;\n result['tag'] = tag;\n result['address'] = address;\n result['addressTo'] = address;\n result['network'] = chain;\n }\n return result;\n }\n async fetchWithdrawals(code = undefined, since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name bitget#fetchWithdrawals\n * @description fetch all withdrawals made from an account\n * @see https://www.bitget.com/api-doc/spot/account/Get-Withdraw-Record\n * @param {string} code unified currency code\n * @param {int} [since] the earliest time in ms to fetch withdrawals for\n * @param {int} [limit] the maximum number of withdrawals structures to retrieve\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {int} [params.until] end time in milliseconds\n * @param {string} [params.idLessThan] return records with id less than the provided value\n * @param {boolean} [params.paginate] default false, when true will automatically paginate by calling this endpoint multiple times. See in the docs all the [available parameters](https://github.com/ccxt/ccxt/wiki/Manual#pagination-params)\n * @returns {object[]} a list of [transaction structures]{@link https://docs.ccxt.com/#/?id=transaction-structure}\n */\n await this.loadMarkets();\n let paginate = false;\n [paginate, params] = this.handleOptionAndParams(params, 'fetchWithdrawals', 'paginate');\n if (paginate) {\n return await this.fetchPaginatedCallCursor('fetchWithdrawals', undefined, since, limit, params, 'idLessThan', 'idLessThan', undefined, 100);\n }\n if (code === undefined) {\n throw new InvalidParamsError('fetchWithdrawals() requires a `code` argument')\n .exchange(this.id);\n }\n const currency = this.currency(code);\n if (since === undefined) {\n since = this.milliseconds() - 7776000000; // 90 days\n }\n let request = {\n 'coin': currency['code'],\n 'startTime': since,\n 'endTime': this.milliseconds(),\n };\n [request, params] = this.handleUntilOption('endTime', request, params);\n if (limit !== undefined) {\n request['limit'] = limit;\n }\n const response = await this.privateSpotGetV2SpotWalletWithdrawalRecords(this.extend(request, params));\n //\n // {\n // \"code\": \"00000\",\n // \"msg\": \"success\",\n // \"requestTime\": 1700528340608,\n // \"data\": [\n // {\n // \"orderId\": \"1083832260799930368\",\n // \"tradeId\": \"35bf0e588a42b25c71a9d45abe7308cabdeec6b7b423910b9bd4743d3a9a9efa\",\n // \"clientOid\": \"123\",\n // \"coin\": \"BTC\",\n // \"type\": \"withdraw\",\n // \"size\": \"0.00030000\",\n // \"fee\": \"-1.0000000\",\n // \"status\": \"success\",\n // \"toAddress\": \"1BfZh7JESJGBUszCGeZnzxbVVvBycbJSbA\",\n // \"dest\": \"on_chain\",\n // \"chain\": \"BTC\",\n // \"confirm\": \"100\",\n // \"fromAddress\": null,\n // \"cTime\": \"1694131668281\",\n // \"uTime\": \"1694131680247\"\n // }\n // ]\n // }\n //\n const rawTransactions = this.safeValue(response, 'data', []);\n return this.parseTransactions(rawTransactions, currency, since, limit);\n }\n parseTransaction(transaction, currency = undefined) {\n //\n // fetchDeposits\n //\n // {\n // \"orderId\": \"1083832260799930368\",\n // \"tradeId\": \"35bf0e588a42b25c71a9d45abe7308cabdeec6b7b423910b9bd4743d3a9a9efa\",\n // \"coin\": \"BTC\",\n // \"type\": \"deposit\",\n // \"size\": \"0.00030000\",\n // \"status\": \"success\",\n // \"toAddress\": \"1BfZh7JESJGBUszCGeZnzxbVVvBycbJSbA\",\n // \"dest\": \"on_chain\",\n // \"chain\": \"BTC\",\n // \"fromAddress\": null,\n // \"cTime\": \"1694131668281\",\n // \"uTime\": \"1694131680247\"\n // }\n //\n // fetchWithdrawals\n //\n // {\n // \"orderId\": \"1083832260799930368\",\n // \"tradeId\": \"35bf0e588a42b25c71a9d45abe7308cabdeec6b7b423910b9bd4743d3a9a9efa\",\n // \"clientOid\": \"123\",\n // \"coin\": \"BTC\",\n // \"type\": \"withdraw\",\n // \"size\": \"0.00030000\",\n // \"fee\": \"-1.0000000\",\n // \"status\": \"success\",\n // \"toAddress\": \"1BfZh7JESJGBUszCGeZnzxbVVvBycbJSbA\",\n // \"dest\": \"on_chain\",\n // \"chain\": \"BTC\",\n // \"confirm\": \"100\",\n // \"fromAddress\": null,\n // \"cTime\": \"1694131668281\",\n // \"uTime\": \"1694131680247\"\n // }\n //\n const currencyId = this.safeString(transaction, 'coin');\n const code = this.safeCurrencyCode(currencyId, currency);\n const timestamp = this.safeInteger(transaction, 'cTime');\n const networkId = this.safeString(transaction, 'chain');\n const status = this.safeString(transaction, 'status');\n const tag = this.safeString(transaction, 'tag');\n const feeCostString = this.safeString(transaction, 'fee');\n const feeCostAbsString = Precise.stringAbs(feeCostString);\n let fee = undefined;\n let amountString = this.safeString(transaction, 'size');\n if (feeCostAbsString !== undefined) {\n fee = { 'currency': code, 'cost': this.parseNumber(feeCostAbsString) };\n amountString = Precise.stringSub(amountString, feeCostAbsString);\n }\n return {\n 'id': this.safeString(transaction, 'orderId'),\n 'info': transaction,\n 'txid': this.safeString(transaction, 'tradeId'),\n 'timestamp': timestamp,\n 'datetime': this.iso8601(timestamp),\n 'network': this.networkIdToCode(networkId),\n 'addressFrom': this.safeString(transaction, 'fromAddress'),\n 'address': this.safeString(transaction, 'toAddress'),\n 'addressTo': this.safeString(transaction, 'toAddress'),\n 'amount': this.parseNumber(amountString),\n 'type': this.safeString(transaction, 'type'),\n 'currency': code,\n 'status': this.parseTransactionStatus(status),\n 'updated': this.safeInteger(transaction, 'uTime'),\n 'tagFrom': undefined,\n 'tag': tag,\n 'tagTo': tag,\n 'comment': undefined,\n 'internal': undefined,\n 'fee': fee,\n };\n }\n parseTransactionStatus(status) {\n const statuses = {\n 'success': 'ok',\n 'Pending': 'pending',\n 'pending_review': 'pending',\n 'pending_review_fail': 'failed',\n 'reject': 'failed',\n };\n return this.safeString(statuses, status, status);\n }\n async fetchDepositAddress(code, params = {}) {\n /**\n * @method\n * @name bitget#fetchDepositAddress\n * @description fetch the deposit address for a currency associated with this account\n * @see https://www.bitget.com/api-doc/spot/account/Get-Deposit-Address\n * @param {string} code unified currency code\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} an [address structure]{@link https://docs.ccxt.com/#/?id=address-structure}\n */\n await this.loadMarkets();\n const networkCode = this.safeString2(params, 'chain', 'network');\n params = this.omit(params, 'network');\n let networkId = undefined;\n if (networkCode !== undefined) {\n networkId = this.networkCodeToId(networkCode, code);\n }\n const currency = this.currency(code);\n const request = {\n 'coin': currency['code'],\n };\n if (networkId !== undefined) {\n request['chain'] = networkId;\n }\n const response = await this.privateSpotGetV2SpotWalletDepositAddress(this.extend(request, params));\n //\n // {\n // \"code\": \"00000\",\n // \"msg\": \"success\",\n // \"requestTime\": 1700532244807,\n // \"data\": {\n // \"coin\": \"BTC\",\n // \"address\": \"1BfZh7JESJGBUszCGeZnzxbVVvBycbJSbA\",\n // \"chain\": \"\",\n // \"tag\": null,\n // \"url\": \"https://blockchair.com/bitcoin/transaction/\"\n // }\n // }\n //\n const data = this.safeValue(response, 'data', {});\n return this.parseDepositAddress(data, currency);\n }\n parseDepositAddress(depositAddress, currency = undefined) {\n //\n // {\n // \"coin\": \"BTC\",\n // \"address\": \"1BfZh7JESJGBUszCGeZnzxbVVvBycbJSbA\",\n // \"chain\": \"\",\n // \"tag\": null,\n // \"url\": \"https://blockchair.com/bitcoin/transaction/\"\n // }\n //\n const currencyId = this.safeString(depositAddress, 'coin');\n const networkId = this.safeString(depositAddress, 'chain');\n const parsedCurrency = this.safeCurrencyCode(currencyId, currency);\n let network = undefined;\n if (networkId !== undefined) {\n network = this.networkIdToCode(networkId, parsedCurrency);\n }\n return {\n 'currency': parsedCurrency,\n 'address': this.safeString(depositAddress, 'address'),\n 'tag': this.safeString(depositAddress, 'tag'),\n 'network': network,\n 'info': depositAddress,\n };\n }\n async fetchOrderBook(symbol, limit = undefined, params = {}) {\n /**\n * @method\n * @name bitget#fetchOrderBook\n * @description fetches information on open orders with bid (buy) and ask (sell) prices, volumes and other data\n * @see https://www.bitget.com/api-doc/spot/market/Get-Orderbook\n * @see https://www.bitget.com/api-doc/contract/market/Get-Merge-Depth\n * @param {string} symbol unified symbol of the market to fetch the order book for\n * @param {int} [limit] the maximum amount of order book entries to return\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} A dictionary of [order book structures]{@link https://docs.ccxt.com/#/?id=order-book-structure} indexed by market symbols\n */\n await this.loadMarkets();\n const sandboxMode = this.safeValue(this.options, 'sandboxMode', false);\n let market = undefined;\n if (sandboxMode) {\n const sandboxSymbol = this.convertSymbolForSandbox(symbol);\n market = this.market(sandboxSymbol);\n }\n else {\n market = this.market(symbol);\n }\n const request = {\n 'symbol': market['id'],\n };\n if (limit !== undefined) {\n request['limit'] = limit;\n }\n let response = undefined;\n if (market['spot']) {\n response = await this.publicSpotGetV2SpotMarketOrderbook(this.extend(request, params));\n }\n else {\n let productType = undefined;\n [productType, params] = this.handleProductTypeAndParams(market, params);\n request['productType'] = productType;\n response = await this.publicMixGetV2MixMarketMergeDepth(this.extend(request, params));\n }\n //\n // {\n // \"code\": \"00000\",\n // \"msg\": \"success\",\n // \"requestTime\": 1645854610294,\n // \"data\": {\n // \"asks\": [ [ \"39102\", \"11.026\" ] ],\n // \"bids\": [ [ '39100.5', \"1.773\" ] ],\n // \"ts\": \"1645854610294\"\n // }\n // }\n //\n const data = this.safeValue(response, 'data', {});\n const timestamp = this.safeInteger(data, 'ts');\n return this.parseOrderBook(data, market['symbol'], timestamp);\n }\n parseTicker(ticker, market = undefined) {\n //\n // spot: fetchTicker, fetchTickers\n //\n // {\n // \"open\": \"37202.46\",\n // \"symbol\": \"BTCUSDT\",\n // \"high24h\": \"37744.75\",\n // \"low24h\": \"36666\",\n // \"lastPr\": \"37583.69\",\n // \"quoteVolume\": \"519127705.303\",\n // \"baseVolume\": \"13907.0386\",\n // \"usdtVolume\": \"519127705.302908\",\n // \"ts\": \"1700532903261\",\n // \"bidPr\": \"37583.68\",\n // \"askPr\": \"37583.69\",\n // \"bidSz\": \"0.0007\",\n // \"askSz\": \"0.0829\",\n // \"openUtc\": \"37449.4\",\n // \"changeUtc24h\": \"0.00359\",\n // \"change24h\": \"0.00321\"\n // }\n //\n // swap and future: fetchTicker\n //\n // {\n // \"symbol\": \"BTCUSDT\",\n // \"lastPr\": \"37577.2\",\n // \"askPr\": \"37577.3\",\n // \"bidPr\": \"37577.2\",\n // \"bidSz\": \"3.679\",\n // \"askSz\": \"0.02\",\n // \"high24h\": \"37765\",\n // \"low24h\": \"36628.9\",\n // \"ts\": \"1700533070359\",\n // \"change24h\": \"0.00288\",\n // \"baseVolume\": \"108606.181\",\n // \"quoteVolume\": \"4051316303.9608\",\n // \"usdtVolume\": \"4051316303.9608\",\n // \"openUtc\": \"37451.5\",\n // \"changeUtc24h\": \"0.00336\",\n // \"indexPrice\": \"37574.489253\",\n // \"fundingRate\": \"0.0001\",\n // \"holdingAmount\": \"53464.529\",\n // \"deliveryStartTime\": null,\n // \"deliveryTime\": null,\n // \"deliveryStatus\": \"\",\n // \"open24h\": \"37235.7\"\n // }\n //\n // swap and future: fetchTickers\n //\n // {\n // \"open\": \"14.9776\",\n // \"symbol\": \"LINKUSDT\",\n // \"high24h\": \"15.3942\",\n // \"low24h\": \"14.3457\",\n // \"lastPr\": \"14.3748\",\n // \"quoteVolume\": \"7008612.4299\",\n // \"baseVolume\": \"469908.8523\",\n // \"usdtVolume\": \"7008612.42986561\",\n // \"ts\": \"1700533772309\",\n // \"bidPr\": \"14.375\",\n // \"askPr\": \"14.3769\",\n // \"bidSz\": \"50.004\",\n // \"askSz\": \"0.7647\",\n // \"openUtc\": \"14.478\",\n // \"changeUtc24h\": \"-0.00713\",\n // \"change24h\": \"-0.04978\"\n // }\n //\n const marketId = this.safeString(ticker, 'symbol');\n const close = this.safeString(ticker, 'lastPr');\n const timestamp = this.safeInteger(ticker, 'ts');\n const change = this.safeString(ticker, 'change24h');\n const open24 = this.safeString(ticker, 'open24');\n const open = this.safeString(ticker, 'open');\n let symbol;\n let openValue;\n if (open === undefined) {\n symbol = this.safeSymbol(marketId, market, undefined, 'contract');\n openValue = open24;\n }\n else {\n symbol = this.safeSymbol(marketId, market, undefined, 'spot');\n openValue = open;\n }\n return this.safeTicker({\n 'symbol': symbol,\n 'timestamp': timestamp,\n 'datetime': this.iso8601(timestamp),\n 'high': this.safeString(ticker, 'high24h'),\n 'low': this.safeString(ticker, 'low24h'),\n 'bid': this.safeString(ticker, 'bidPr'),\n 'bidVolume': this.safeString(ticker, 'bidSz'),\n 'ask': this.safeString(ticker, 'askPr'),\n 'askVolume': this.safeString(ticker, 'askSz'),\n 'vwap': undefined,\n 'open': openValue,\n 'close': close,\n 'last': close,\n 'previousClose': undefined,\n 'change': change,\n 'percentage': Precise.stringMul(change, '100'),\n 'average': undefined,\n 'baseVolume': this.safeString(ticker, 'baseVolume'),\n 'quoteVolume': this.safeString(ticker, 'quoteVolume'),\n 'info': ticker,\n }, market);\n }\n async fetchTicker(symbol, params = {}) {\n /**\n * @method\n * @name bitget#fetchTicker\n * @description fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market\n * @see https://www.bitget.com/api-doc/spot/market/Get-Tickers\n * @see https://www.bitget.com/api-doc/contract/market/Get-Ticker\n * @param {string} symbol unified symbol of the market to fetch the ticker for\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} a [ticker structure]{@link https://docs.ccxt.com/#/?id=ticker-structure}\n */\n await this.loadMarkets();\n const sandboxMode = this.safeValue(this.options, 'sandboxMode', false);\n let market = undefined;\n if (sandboxMode) {\n const sandboxSymbol = this.convertSymbolForSandbox(symbol);\n market = this.market(sandboxSymbol);\n }\n else {\n market = this.market(symbol);\n }\n const request = {\n 'symbol': market['id'],\n };\n let response = undefined;\n if (market['spot']) {\n response = await this.publicSpotGetV2SpotMarketTickers(this.extend(request, params));\n }\n else {\n let productType = undefined;\n [productType, params] = this.handleProductTypeAndParams(market, params);\n request['productType'] = productType;\n response = await this.publicMixGetV2MixMarketTicker(this.extend(request, params));\n }\n //\n // spot\n //\n // {\n // \"code\": \"00000\",\n // \"msg\": \"success\",\n // \"requestTime\": 1700532903782,\n // \"data\": [\n // {\n // \"open\": \"37202.46\",\n // \"symbol\": \"BTCUSDT\",\n // \"high24h\": \"37744.75\",\n // \"low24h\": \"36666\",\n // \"lastPr\": \"37583.69\",\n // \"quoteVolume\": \"519127705.303\",\n // \"baseVolume\": \"13907.0386\",\n // \"usdtVolume\": \"519127705.302908\",\n // \"ts\": \"1700532903261\",\n // \"bidPr\": \"37583.68\",\n // \"askPr\": \"37583.69\",\n // \"bidSz\": \"0.0007\",\n // \"askSz\": \"0.0829\",\n // \"openUtc\": \"37449.4\",\n // \"changeUtc24h\": \"0.00359\",\n // \"change24h\": \"0.00321\"\n // }\n // ]\n // }\n //\n // swap and future\n //\n // {\n // \"code\": \"00000\",\n // \"msg\": \"success\",\n // \"requestTime\": 1700533070357,\n // \"data\": [\n // {\n // \"symbol\": \"BTCUSDT\",\n // \"lastPr\": \"37577.2\",\n // \"askPr\": \"37577.3\",\n // \"bidPr\": \"37577.2\",\n // \"bidSz\": \"3.679\",\n // \"askSz\": \"0.02\",\n // \"high24h\": \"37765\",\n // \"low24h\": \"36628.9\",\n // \"ts\": \"1700533070359\",\n // \"change24h\": \"0.00288\",\n // \"baseVolume\": \"108606.181\",\n // \"quoteVolume\": \"4051316303.9608\",\n // \"usdtVolume\": \"4051316303.9608\",\n // \"openUtc\": \"37451.5\",\n // \"changeUtc24h\": \"0.00336\",\n // \"indexPrice\": \"37574.489253\",\n // \"fundingRate\": \"0.0001\",\n // \"holdingAmount\": \"53464.529\",\n // \"deliveryStartTime\": null,\n // \"deliveryTime\": null,\n // \"deliveryStatus\": \"\",\n // \"open24h\": \"37235.7\"\n // }\n // ]\n // }\n //\n const data = this.safeValue(response, 'data', []);\n return this.parseTicker(data[0], market);\n }\n async fetchTickers(symbols = undefined, params = {}) {\n /**\n * @method\n * @name bitget#fetchTickers\n * @description fetches price tickers for multiple markets, statistical information calculated over the past 24 hours for each market\n * @see https://www.bitget.com/api-doc/spot/market/Get-Tickers\n * @see https://www.bitget.com/api-doc/contract/market/Get-All-Symbol-Ticker\n * @param {string[]|undefined} symbols unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {string} [params.productType] *contract only* 'USDT-FUTURES', 'USDC-FUTURES', 'COIN-FUTURES', 'SUSDT-FUTURES', 'SUSDC-FUTURES' or 'SCOIN-FUTURES'\n * @returns {object} a dictionary of [ticker structures]{@link https://docs.ccxt.com/#/?id=ticker-structure}\n */\n await this.loadMarkets();\n let market = undefined;\n if (symbols !== undefined) {\n const symbol = this.safeValue(symbols, 0);\n const sandboxMode = this.safeValue(this.options, 'sandboxMode', false);\n if (sandboxMode) {\n const sandboxSymbol = this.convertSymbolForSandbox(symbol);\n market = this.market(sandboxSymbol);\n }\n else {\n market = this.market(symbol);\n }\n }\n const request = {};\n let type = undefined;\n [type, params] = this.handleMarketTypeAndParams('fetchTickers', market, params);\n let response = undefined;\n if (type === 'spot') {\n response = await this.publicSpotGetV2SpotMarketTickers(this.extend(request, params));\n }\n else {\n let productType = undefined;\n [productType, params] = this.handleProductTypeAndParams(market, params);\n request['productType'] = productType;\n response = await this.publicMixGetV2MixMarketTickers(this.extend(request, params));\n }\n //\n // spot\n //\n // {\n // \"code\": \"00000\",\n // \"msg\": \"success\",\n // \"requestTime\": 1700532903782,\n // \"data\": [\n // {\n // \"open\": \"37202.46\",\n // \"symbol\": \"BTCUSDT\",\n // \"high24h\": \"37744.75\",\n // \"low24h\": \"36666\",\n // \"lastPr\": \"37583.69\",\n // \"quoteVolume\": \"519127705.303\",\n // \"baseVolume\": \"13907.0386\",\n // \"usdtVolume\": \"519127705.302908\",\n // \"ts\": \"1700532903261\",\n // \"bidPr\": \"37583.68\",\n // \"askPr\": \"37583.69\",\n // \"bidSz\": \"0.0007\",\n // \"askSz\": \"0.0829\",\n // \"openUtc\": \"37449.4\",\n // \"changeUtc24h\": \"0.00359\",\n // \"change24h\": \"0.00321\"\n // }\n // ]\n // }\n //\n // swap and future\n //\n // {\n // \"code\": \"00000\",\n // \"msg\": \"success\",\n // \"requestTime\": 1700533773477,\n // \"data\": [\n // {\n // \"open\": \"14.9776\",\n // \"symbol\": \"LINKUSDT\",\n // \"high24h\": \"15.3942\",\n // \"low24h\": \"14.3457\",\n // \"lastPr\": \"14.3748\",\n // \"quoteVolume\": \"7008612.4299\",\n // \"baseVolume\": \"469908.8523\",\n // \"usdtVolume\": \"7008612.42986561\",\n // \"ts\": \"1700533772309\",\n // \"bidPr\": \"14.375\",\n // \"askPr\": \"14.3769\",\n // \"bidSz\": \"50.004\",\n // \"askSz\": \"0.7647\",\n // \"openUtc\": \"14.478\",\n // \"changeUtc24h\": \"-0.00713\",\n // \"change24h\": \"-0.04978\"\n // },\n // ]\n // }\n //\n const data = this.safeValue(response, 'data', []);\n return this.parseTickers(data, symbols);\n }\n parseTrade(trade, market = undefined) {\n //\n // spot, swap and future: fetchTrades\n //\n // {\n // \"tradeId\": \"1075199767891652609\",\n // \"price\": \"29376.5\",\n // \"size\": \"6.035\",\n // \"side\": \"Buy\",\n // \"ts\": \"1692073521000\",\n // \"symbol\": \"BTCUSDT\"\n // }\n //\n // spot: fetchMyTrades\n //\n // {\n // \"userId\": \"7264631750\",\n // \"symbol\": \"BTCUSDT\",\n // \"orderId\": \"1098394344925597696\",\n // \"tradeId\": \"1098394344974925824\",\n // \"orderType\": \"market\",\n // \"side\": \"sell\",\n // \"priceAvg\": \"28467.68\",\n // \"size\": \"0.0002\",\n // \"amount\": \"5.693536\",\n // \"feeDetail\": {\n // \"deduction\": \"no\",\n // \"feeCoin\": \"USDT\",\n // \"totalDeductionFee\": \"\",\n // \"totalFee\": \"-0.005693536\"\n // },\n // \"tradeScope\": \"taker\",\n // \"cTime\": \"1697603539699\",\n // \"uTime\": \"1697603539754\"\n // }\n //\n // spot margin: fetchMyTrades\n //\n // {\n // \"orderId\": \"1099353730455318528\",\n // \"tradeId\": \"1099353730627092481\",\n // \"orderType\": \"market\",\n // \"side\": \"sell\",\n // \"priceAvg\": \"29543.7\",\n // \"size\": \"0.0001\",\n // \"amount\": \"2.95437\",\n // \"tradeScope\": \"taker\",\n // \"feeDetail\": {\n // \"deduction\": \"no\",\n // \"feeCoin\": \"USDT\",\n // \"totalDeductionFee\": \"0\",\n // \"totalFee\": \"-0.00295437\"\n // },\n // \"cTime\": \"1697832275063\",\n // \"uTime\": \"1697832275150\"\n // }\n //\n // swap and future: fetchMyTrades\n //\n // {\n // \"tradeId\": \"1111468664328269825\",\n // \"symbol\": \"BTCUSDT\",\n // \"orderId\": \"1111468664264753162\",\n // \"price\": \"37271.4\",\n // \"baseVolume\": \"0.001\",\n // \"feeDetail\": [\n // {\n // \"deduction\": \"no\",\n // \"feeCoin\": \"USDT\",\n // \"totalDeductionFee\": null,\n // \"totalFee\": \"-0.02236284\"\n // }\n // ],\n // \"side\": \"buy\",\n // \"quoteVolume\": \"37.2714\",\n // \"profit\": \"-0.0007\",\n // \"enterPointSource\": \"web\",\n // \"tradeSide\": \"close\",\n // \"posMode\": \"hedge_mode\",\n // \"tradeScope\": \"taker\",\n // \"cTime\": \"1700720700342\"\n // }\n //\n const marketId = this.safeString(trade, 'symbol');\n const symbol = this.safeSymbol(marketId, market);\n const timestamp = this.safeInteger2(trade, 'cTime', 'ts');\n let fee = undefined;\n const feeDetail = this.safeValue(trade, 'feeDetail');\n const posMode = this.safeString(trade, 'posMode');\n const feeStructure = (posMode !== undefined) ? feeDetail[0] : feeDetail;\n if (feeStructure !== undefined) {\n const currencyCode = this.safeCurrencyCode(this.safeString(feeStructure, 'feeCoin'));\n fee = {\n 'currency': currencyCode,\n 'cost': Precise.stringAbs(this.safeString(feeStructure, 'totalFee')),\n };\n }\n return this.safeTrade({\n 'info': trade,\n 'id': this.safeString(trade, 'tradeId'),\n 'order': this.safeString(trade, 'orderId'),\n 'symbol': symbol,\n 'side': this.safeStringLower(trade, 'side'),\n 'type': this.safeString(trade, 'orderType'),\n 'takerOrMaker': this.safeString(trade, 'tradeScope'),\n 'price': this.safeString2(trade, 'priceAvg', 'price'),\n 'amount': this.safeString2(trade, 'baseVolume', 'size'),\n 'cost': this.safeString2(trade, 'quoteVolume', 'amount'),\n 'timestamp': timestamp,\n 'datetime': this.iso8601(timestamp),\n 'fee': fee,\n }, market);\n }\n async fetchTrades(symbol, since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name bitget#fetchTrades\n * @description get the list of most recent trades for a particular symbol\n * @see https://www.bitget.com/api-doc/spot/market/Get-Recent-Trades\n * @see https://www.bitget.com/api-doc/spot/market/Get-Market-Trades\n * @see https://www.bitget.com/api-doc/contract/market/Get-Recent-Fills\n * @see https://www.bitget.com/api-doc/contract/market/Get-Fills-History\n * @param {string} symbol unified symbol of the market to fetch trades for\n * @param {int} [since] timestamp in ms of the earliest trade to fetch\n * @param {int} [limit] the maximum amount of trades to fetch\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {int} [params.until] *only applies to publicSpotGetV2SpotMarketFillsHistory and publicMixGetV2MixMarketFillsHistory* the latest time in ms to fetch trades for\n * @param {boolean} [params.paginate] *only applies to publicSpotGetV2SpotMarketFillsHistory and publicMixGetV2MixMarketFillsHistory* default false, when true will automatically paginate by calling this endpoint multiple times\n * @returns {Trade[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=public-trades}\n */\n await this.loadMarkets();\n let paginate = false;\n [paginate, params] = this.handleOptionAndParams(params, 'fetchTrades', 'paginate');\n if (paginate) {\n return await this.fetchPaginatedCallCursor('fetchTrades', symbol, since, limit, params, 'idLessThan', 'idLessThan');\n }\n const sandboxMode = this.safeValue(this.options, 'sandboxMode', false);\n let market = undefined;\n if (sandboxMode) {\n const sandboxSymbol = this.convertSymbolForSandbox(symbol);\n market = this.market(sandboxSymbol);\n }\n else {\n market = this.market(symbol);\n }\n let request = {\n 'symbol': market['id'],\n };\n if (limit !== undefined) {\n if (market['contract']) {\n request['limit'] = Math.min(limit, 1000);\n }\n else {\n request['limit'] = limit;\n }\n }\n const options = this.safeValue(this.options, 'fetchTrades', {});\n let response = undefined;\n if (market['spot']) {\n const spotOptions = this.safeValue(options, 'spot', {});\n const defaultSpotMethod = this.safeString(spotOptions, 'method', 'publicSpotGetV2SpotMarketFillsHistory');\n const spotMethod = this.safeString(params, 'method', defaultSpotMethod);\n params = this.omit(params, 'method');\n if (spotMethod === 'publicSpotGetV2SpotMarketFillsHistory') {\n [request, params] = this.handleUntilOption('endTime', request, params);\n if (since !== undefined) {\n request['startTime'] = since;\n }\n response = await this.publicSpotGetV2SpotMarketFillsHistory(this.extend(request, params));\n }\n else if (spotMethod === 'publicSpotGetV2SpotMarketFills') {\n response = await this.publicSpotGetV2SpotMarketFills(this.extend(request, params));\n }\n }\n else {\n const swapOptions = this.safeValue(options, 'swap', {});\n const defaultSwapMethod = this.safeString(swapOptions, 'method', 'publicMixGetV2MixMarketFillsHistory');\n const swapMethod = this.safeString(params, 'method', defaultSwapMethod);\n params = this.omit(params, 'method');\n let productType = undefined;\n [productType, params] = this.handleProductTypeAndParams(market, params);\n request['productType'] = productType;\n if (swapMethod === 'publicMixGetV2MixMarketFillsHistory') {\n [request, params] = this.handleUntilOption('endTime', request, params);\n if (since !== undefined) {\n request['startTime'] = since;\n }\n response = await this.publicMixGetV2MixMarketFillsHistory(this.extend(request, params));\n }\n else if (swapMethod === 'publicMixGetV2MixMarketFills') {\n response = await this.publicMixGetV2MixMarketFills(this.extend(request, params));\n }\n }\n //\n // spot\n //\n // {\n // \"code\": \"00000\",\n // \"msg\": \"success\",\n // \"requestTime\": 1692073693562,\n // \"data\": [\n // {\n // \"symbol\": \"BTCUSDT_SPBL\",\n // \"tradeId\": \"1075200479040323585\",\n // \"side\": \"Sell\",\n // \"price\": \"29381.54\",\n // \"size\": \"0.0056\",\n // \"ts\": \"1692073691000\"\n // },\n // ]\n // }\n //\n // swap\n //\n // {\n // \"code\": \"00000\",\n // \"msg\": \"success\",\n // \"requestTime\": 1692073522689,\n // \"data\": [\n // {\n // \"tradeId\": \"1075199767891652609\",\n // \"price\": \"29376.5\",\n // \"size\": \"6.035\",\n // \"side\": \"Buy\",\n // \"ts\": \"1692073521000\",\n // \"symbol\": \"BTCUSDT_UMCBL\"\n // },\n // ]\n // }\n //\n const data = this.safeValue(response, 'data', []);\n return this.parseTrades(data, market, since, limit);\n }\n async fetchTradingFee(symbol, params = {}) {\n /**\n * @method\n * @name bitget#fetchTradingFee\n * @description fetch the trading fees for a market\n * @see https://www.bitget.com/api-doc/common/public/Get-Trade-Rate\n * @param {string} symbol unified market symbol\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {string} [params.marginMode] 'isolated' or 'cross', for finding the fee rate of spot margin trading pairs\n * @returns {object} a [fee structure]{@link https://docs.ccxt.com/#/?id=fee-structure}\n */\n await this.loadMarkets();\n const market = this.market(symbol);\n const request = {\n 'symbol': market['id'],\n };\n let marginMode = undefined;\n [marginMode, params] = this.handleMarginModeAndParams('fetchTradingFee', params);\n if (market['spot']) {\n if (marginMode !== undefined) {\n request['businessType'] = 'margin';\n }\n else {\n request['businessType'] = 'spot';\n }\n }\n else {\n request['businessType'] = 'contract';\n }\n const response = await this.privateCommonGetV2CommonTradeRate(this.extend(request, params));\n //\n // {\n // \"code\": \"00000\",\n // \"msg\": \"success\",\n // \"requestTime\": 1700549524887,\n // \"data\": {\n // \"makerFeeRate\": \"0.001\",\n // \"takerFeeRate\": \"0.001\"\n // }\n // }\n //\n const data = this.safeValue(response, 'data', {});\n return this.parseTradingFee(data, market);\n }\n async fetchTradingFees(params = {}) {\n /**\n * @method\n * @name bitget#fetchTradingFees\n * @description fetch the trading fees for multiple markets\n * @see https://www.bitget.com/api-doc/spot/market/Get-Symbols\n * @see https://www.bitget.com/api-doc/contract/market/Get-All-Symbols-Contracts\n * @see https://www.bitget.com/api-doc/margin/common/support-currencies\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {string} [params.productType] *contract only* 'USDT-FUTURES', 'USDC-FUTURES', 'COIN-FUTURES', 'SUSDT-FUTURES', 'SUSDC-FUTURES' or 'SCOIN-FUTURES'\n * @param {boolean} [params.margin] set to true for spot margin\n * @returns {object} a dictionary of [fee structures]{@link https://docs.ccxt.com/#/?id=fee-structure} indexed by market symbols\n */\n await this.loadMarkets();\n let response = undefined;\n let marginMode = undefined;\n let marketType = undefined;\n [marginMode, params] = this.handleMarginModeAndParams('fetchTradingFees', params);\n [marketType, params] = this.handleMarketTypeAndParams('fetchTradingFees', undefined, params);\n if (marketType === 'spot') {\n const margin = this.safeBool(params, 'margin', false);\n params = this.omit(params, 'margin');\n if ((marginMode !== undefined) || margin) {\n response = await this.publicMarginGetV2MarginCurrencies(params);\n }\n else {\n response = await this.publicSpotGetV2SpotPublicSymbols(params);\n }\n }\n else if ((marketType === 'swap') || (marketType === 'future')) {\n let productType = undefined;\n [productType, params] = this.handleProductTypeAndParams(undefined, params);\n params['productType'] = productType;\n response = await this.publicMixGetV2MixMarketContracts(params);\n }\n else {\n throw new MarketTypeNotSupportedError(marketType).exchange(this.id);\n }\n //\n // spot and margin\n //\n // {\n // \"code\": \"00000\",\n // \"msg\": \"success\",\n // \"requestTime\": 1700102364653,\n // \"data\": [\n // {\n // \"symbol\": \"TRXUSDT\",\n // \"baseCoin\": \"TRX\",\n // \"quoteCoin\": \"USDT\",\n // \"minTradeAmount\": \"0\",\n // \"maxTradeAmount\": \"10000000000\",\n // \"takerFeeRate\": \"0.002\",\n // \"makerFeeRate\": \"0.002\",\n // \"pricePrecision\": \"6\",\n // \"quantityPrecision\": \"4\",\n // \"quotePrecision\": \"6\",\n // \"status\": \"online\",\n // \"minTradeUSDT\": \"5\",\n // \"buyLimitPriceRatio\": \"0.05\",\n // \"sellLimitPriceRatio\": \"0.05\"\n // },\n // ]\n // }\n //\n // swap and future\n //\n // {\n // \"code\": \"00000\",\n // \"msg\": \"success\",\n // \"requestTime\": 1700102364709,\n // \"data\": [\n // {\n // \"symbol\": \"BTCUSDT\",\n // \"baseCoin\": \"BTC\",\n // \"quoteCoin\": \"USDT\",\n // \"buyLimitPriceRatio\": \"0.01\",\n // \"sellLimitPriceRatio\": \"0.01\",\n // \"feeRateUpRatio\": \"0.005\",\n // \"makerFeeRate\": \"0.0002\",\n // \"takerFeeRate\": \"0.0006\",\n // \"openCostUpRatio\": \"0.01\",\n // \"supportMarginCoins\": [\"USDT\"],\n // \"minTradeNum\": \"0.001\",\n // \"priceEndStep\": \"1\",\n // \"volumePlace\": \"3\",\n // \"pricePlace\": \"1\",\n // \"sizeMultiplier\": \"0.001\",\n // \"symbolType\": \"perpetual\",\n // \"minTradeUSDT\": \"5\",\n // \"maxSymbolOrderNum\": \"200\",\n // \"maxProductOrderNum\": \"400\",\n // \"maxPositionNum\": \"150\",\n // \"symbolStatus\": \"normal\",\n // \"offTime\": \"-1\",\n // \"limitOpenTime\": \"-1\",\n // \"deliveryTime\": \"\",\n // \"deliveryStartTime\": \"\",\n // \"deliveryPeriod\": \"\",\n // \"launchTime\": \"\",\n // \"fundInterval\": \"8\",\n // \"minLever\": \"1\",\n // \"maxLever\": \"125\",\n // \"posLimit\": \"0.05\",\n // \"maintainTime\": \"\"\n // },\n // ]\n // }\n //\n const data = this.safeValue(response, 'data', []);\n const result = {};\n for (let i = 0; i < data.length; i++) {\n const entry = data[i];\n const marketId = this.safeString(entry, 'symbol');\n const symbol = this.safeSymbol(marketId, undefined, undefined, marketType);\n const market = this.market(symbol);\n const fee = this.parseTradingFee(entry, market);\n result[symbol] = fee;\n }\n return result;\n }\n parseTradingFee(data, market = undefined) {\n const marketId = this.safeString(data, 'symbol');\n return {\n 'info': data,\n 'symbol': this.safeSymbol(marketId, market),\n 'maker': this.safeNumber(data, 'makerFeeRate'),\n 'taker': this.safeNumber(data, 'takerFeeRate'),\n };\n }\n parseOHLCV(ohlcv, market = undefined) {\n //\n // [\n // \"1645911960000\",\n // \"39406\",\n // \"39407\",\n // \"39374.5\",\n // \"39379\",\n // \"35.526\",\n // \"1399132.341\"\n // ]\n //\n return [\n this.safeInteger(ohlcv, 0),\n this.safeNumber(ohlcv, 1),\n this.safeNumber(ohlcv, 2),\n this.safeNumber(ohlcv, 3),\n this.safeNumber(ohlcv, 4),\n this.safeNumber(ohlcv, 5),\n ];\n }\n async fetchOHLCV(symbol, timeframe = '1m', since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name bitget#fetchOHLCV\n * @description fetches historical candlestick data containing the open, high, low, and close price, and the volume of a market\n * @see https://www.bitget.com/api-doc/spot/market/Get-Candle-Data\n * @see https://www.bitget.com/api-doc/spot/market/Get-History-Candle-Data\n * @see https://www.bitget.com/api-doc/contract/market/Get-Candle-Data\n * @see https://www.bitget.com/api-doc/contract/market/Get-History-Candle-Data\n * @see https://www.bitget.com/api-doc/contract/market/Get-History-Index-Candle-Data\n * @see https://www.bitget.com/api-doc/contract/market/Get-History-Mark-Candle-Data\n * @param {string} symbol unified symbol of the market to fetch OHLCV data for\n * @param {string} timeframe the length of time each candle represents\n * @param {int} [since] timestamp in ms of the earliest candle to fetch\n * @param {int} [limit] the maximum amount of candles to fetch\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {int} [params.until] timestamp in ms of the latest candle to fetch\n * @param {boolean} [params.paginate] default false, when true will automatically paginate by calling this endpoint multiple times. See in the docs all the [available parameters](https://github.com/ccxt/ccxt/wiki/Manual#pagination-params)\n * @param {string} [params.price] *swap only* \"mark\" (to fetch mark price candles) or \"index\" (to fetch index price candles)\n * @returns {int[][]} A list of candles ordered as timestamp, open, high, low, close, volume\n */\n await this.loadMarkets();\n let paginate = false;\n [paginate, params] = this.handleOptionAndParams(params, 'fetchOHLCV', 'paginate');\n if (paginate) {\n return await this.fetchPaginatedCallDeterministic('fetchOHLCV', symbol, since, limit, timeframe, params, 1000);\n }\n const sandboxMode = this.safeValue(this.options, 'sandboxMode', false);\n let market = undefined;\n if (sandboxMode) {\n const sandboxSymbol = this.convertSymbolForSandbox(symbol);\n market = this.market(sandboxSymbol);\n }\n else {\n market = this.market(symbol);\n }\n const marketType = market['spot'] ? 'spot' : 'swap';\n const timeframes = this.options['timeframes'][marketType];\n const selectedTimeframe = this.safeString(timeframes, timeframe, timeframe);\n const request = {\n 'symbol': market['id'],\n 'granularity': selectedTimeframe,\n };\n const until = this.safeInteger2(params, 'until', 'till');\n params = this.omit(params, ['until', 'till']);\n if (limit !== undefined) {\n request['limit'] = limit;\n }\n if (since !== undefined) {\n request['startTime'] = since;\n }\n if (since !== undefined) {\n if (limit === undefined) {\n limit = 100; // exchange default\n }\n const duration = this.parseTimeframe(timeframe) * 1000;\n request['endTime'] = this.sum(since, duration * (limit + 1)) - 1; // limit + 1)) - 1 is needed for when since is not the exact timestamp of a candle\n }\n else if (until !== undefined) {\n request['endTime'] = until;\n }\n else {\n request['endTime'] = this.milliseconds();\n }\n let response = undefined;\n const thirtyOneDaysAgo = this.milliseconds() - 2678400000;\n if (market['spot']) {\n if ((since !== undefined) && (since < thirtyOneDaysAgo)) {\n response = await this.publicSpotGetV2SpotMarketHistoryCandles(this.extend(request, params));\n }\n else {\n response = await this.publicSpotGetV2SpotMarketCandles(this.extend(request, params));\n }\n }\n else {\n const priceType = this.safeString(params, 'price');\n params = this.omit(params, ['price']);\n let productType = undefined;\n [productType, params] = this.handleProductTypeAndParams(market, params);\n request['productType'] = productType;\n if (priceType === 'mark') {\n response = await this.publicMixGetV2MixMarketHistoryMarkCandles(this.extend(request, params));\n }\n else if (priceType === 'index') {\n response = await this.publicMixGetV2MixMarketHistoryIndexCandles(this.extend(request, params));\n }\n else if ((since !== undefined) && (since < thirtyOneDaysAgo)) {\n response = await this.publicMixGetV2MixMarketHistoryCandles(this.extend(request, params));\n }\n else {\n response = await this.publicMixGetV2MixMarketCandles(this.extend(request, params));\n }\n }\n if (response === '') {\n return []; // happens when a new token is listed\n }\n // [ [\"1645911960000\",\"39406\",\"39407\",\"39374.5\",\"39379\",\"35.526\",\"1399132.341\"] ]\n const data = this.safeList(response, 'data', response);\n return this.parseOHLCVs(data, market, timeframe, since, limit);\n }\n async fetchBalance(params = {}) {\n /**\n * @method\n * @name bitget#fetchBalance\n * @description query for balance and get the amount of funds available for trading or funds locked in orders\n * @see https://www.bitget.com/api-doc/spot/account/Get-Account-Assets\n * @see https://www.bitget.com/api-doc/contract/account/Get-Account-List\n * @see https://www.bitget.com/api-doc/margin/cross/account/Get-Cross-Assets\n * @see https://www.bitget.com/api-doc/margin/isolated/account/Get-Isolated-Assets\n * @see https://bitgetlimited.github.io/apidoc/en/margin/#get-cross-assets\n * @see https://bitgetlimited.github.io/apidoc/en/margin/#get-isolated-assets\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {string} [params.productType] *contract only* 'USDT-FUTURES', 'USDC-FUTURES', 'COIN-FUTURES', 'SUSDT-FUTURES', 'SUSDC-FUTURES' or 'SCOIN-FUTURES'\n * @returns {object} a [balance structure]{@link https://docs.ccxt.com/#/?id=balance-structure}\n */\n await this.loadMarkets();\n const request = {};\n let marketType = undefined;\n let marginMode = undefined;\n let response = undefined;\n [marketType, params] = this.handleMarketTypeAndParams('fetchBalance', undefined, params);\n [marginMode, params] = this.handleMarginModeAndParams('fetchBalance', params);\n if ((marketType === 'swap') || (marketType === 'future')) {\n let productType = undefined;\n [productType, params] = this.handleProductTypeAndParams(undefined, params);\n request['productType'] = productType;\n response = await this.privateMixGetV2MixAccountAccounts(this.extend(request, params));\n }\n else if (marketType === 'funding') {\n response = await this.privateMixGetV2AccountFundingAssets(this.extend(request, params));\n }\n else if (marginMode === 'isolated') {\n response = await this.privateMarginGetMarginV1IsolatedAccountAssets(this.extend(request, params));\n const resData = this.safeValue(response, 'data', []);\n return this.parseIsolatedMarginBalance(resData);\n }\n else if (marginMode === 'cross') {\n response = await this.privateMarginGetMarginV1CrossAccountAssets(this.extend(request, params));\n }\n else if (marketType === 'spot') {\n response = await this.privateSpotGetV2SpotAccountAssets(this.extend(request, params));\n }\n else if (marketType === 'earn') {\n response = await this.privateEarnGetV2EarnAccountAssets(this.extend(request, params));\n const resData = this.safeValue(response, 'data', []);\n return this.parseEarnBalance(resData);\n }\n else if (marketType === 'margin') {\n let method;\n if (marginMode === 'isolated') {\n method = 'privateMarginGetIsolatedAccountAssets';\n }\n else {\n method = 'privateMarginGetCrossedAccountAssets';\n }\n response = await this[method](this.extend(request, params));\n }\n else {\n throw new MarketTypeNotSupportedError(marketType)\n .addMessage('fetchBalance() does not support ' + marketType + ' accounts')\n .exchange(this.id);\n }\n // spot\n //\n // {\n // \"code\": \"00000\",\n // \"msg\": \"success\",\n // \"requestTime\": 1700623852854,\n // \"data\": [\n // {\n // \"coin\": \"USDT\",\n // \"available\": \"0.00000000\",\n // \"limitAvailable\": \"0\",\n // \"frozen\": \"0.00000000\",\n // \"locked\": \"0.00000000\",\n // \"uTime\": \"1699937566000\"\n // }\n // ]\n // }\n //\n // swap\n //\n // {\n // \"code\": \"00000\",\n // \"msg\": \"success\",\n // \"requestTime\": 1700625127294,\n // \"data\": [\n // {\n // \"marginCoin\": \"USDT\",\n // \"locked\": \"0\",\n // \"available\": \"0\",\n // \"crossedMaxAvailable\": \"0\",\n // \"isolatedMaxAvailable\": \"0\",\n // \"maxTransferOut\": \"0\",\n // \"accountEquity\": \"0\",\n // \"usdtEquity\": \"0.000000005166\",\n // \"btcEquity\": \"0\",\n // \"crossedRiskRate\": \"0\",\n // \"unrealizedPL\": \"0\",\n // \"coupon\": \"0\",\n // \"crossedUnrealizedPL\": null,\n // \"isolatedUnrealizedPL\": null\n // }\n // ]\n // }\n //\n // isolated margin\n //\n // {\n // \"code\": \"00000\",\n // \"msg\": \"success\",\n // \"requestTime\": 1697501436571,\n // \"data\": [\n // {\n // \"symbol\": \"BTCUSDT\",\n // \"coin\": \"BTC\",\n // \"totalAmount\": \"0.00021654\",\n // \"available\": \"0.00021654\",\n // \"transferable\": \"0.00021654\",\n // \"frozen\": \"0\",\n // \"borrow\": \"0\",\n // \"interest\": \"0\",\n // \"net\": \"0.00021654\",\n // \"ctime\": \"1697248128071\"\n // },\n // ]\n // }\n //\n // cross margin\n //\n // {\n // \"code\": \"00000\",\n // \"msg\": \"success\",\n // \"requestTime\": 1697515463804,\n // \"data\": [\n // {\n // \"coin\": \"BTC\",\n // \"totalAmount\": \"0.00024996\",\n // \"available\": \"0.00024996\",\n // \"transferable\": \"0.00004994\",\n // \"frozen\": \"0\",\n // \"borrow\": \"0.0001\",\n // \"interest\": \"0.00000001\",\n // \"net\": \"0.00014995\",\n // \"ctime\": \"1697251265504\"\n // },\n // ]\n // }\n //\n const data = this.safeValue(response, 'data', []);\n return this.parseBalance(data);\n }\n parseEarnBalance(data) {\n const result = {};\n data.forEach((entry) => {\n const currencyId = this.safeString(entry, 'coin');\n const code = this.safeCurrencyCode(currencyId);\n const balance = this.account();\n balance['free'] = '0';\n balance['total'] = this.safeString(entry, 'amount');\n balance['used'] = this.safeString(entry, 'amount');\n balance['locked'] = this.safeString(entry, 'amount');\n result[code] = balance;\n });\n return this.safeBalance(result);\n }\n /**\n *\n * @param data - response data\n * @returns\n * BTCUSDT: {\n * USDT: { free: 0.001, used: 0, total: 0.001, debt: 0 },\n * BTC: { free: 2.8e-7, used: 0, total: 2.8e-7, debt: 0 }\n * }\n */\n parseIsolatedMarginBalance(data) {\n const result = {};\n data.forEach((entry) => {\n const symbol = this.safeString(entry, 'symbol');\n const currencyId = this.safeString(entry, 'coin');\n const code = this.safeCurrencyCode(currencyId);\n if (!result[symbol]) {\n result[symbol] = {};\n }\n const balance = this.account();\n balance['free'] = this.safeString(entry, 'available');\n balance['total'] = this.safeString(entry, 'totalAmount');\n balance['used'] = this.safeString(entry, 'frozen');\n balance['debt'] = this.safeString(entry, 'borrow');\n result[symbol][code] = balance;\n });\n Object.keys(result).forEach((symbol) => {\n result[symbol] = this.safeBalance(result[symbol]);\n });\n return result;\n }\n parseBalance(balance) {\n const result = { 'info': balance };\n //\n // spot\n //\n // {\n // \"coin\": \"USDT\",\n // \"available\": \"0.00000000\",\n // \"limitAvailable\": \"0\",\n // \"frozen\": \"0.00000000\",\n // \"locked\": \"0.00000000\",\n // \"uTime\": \"1699937566000\"\n // }\n //\n // swap\n //\n // {\n // \"marginCoin\": \"USDT\",\n // \"locked\": \"0\",\n // \"available\": \"0\",\n // \"crossedMaxAvailable\": \"0\",\n // \"isolatedMaxAvailable\": \"0\",\n // \"maxTransferOut\": \"0\",\n // \"accountEquity\": \"0\",\n // \"usdtEquity\": \"0.000000005166\",\n // \"btcEquity\": \"0\",\n // \"crossedRiskRate\": \"0\",\n // \"unrealizedPL\": \"0\",\n // \"coupon\": \"0\",\n // \"crossedUnrealizedPL\": null,\n // \"isolatedUnrealizedPL\": null\n // }\n //\n // isolated margin\n //\n // {\n // \"symbol\": \"BTCUSDT\",\n // \"coin\": \"BTC\",\n // \"totalAmount\": \"0.00021654\",\n // \"available\": \"0.00021654\",\n // \"transferable\": \"0.00021654\",\n // \"frozen\": \"0\",\n // \"borrow\": \"0\",\n // \"interest\": \"0\",\n // \"net\": \"0.00021654\",\n // \"ctime\": \"1697248128071\"\n // }\n //\n // cross margin\n //\n // {\n // \"coin\": \"BTC\",\n // \"totalAmount\": \"0.00024995\",\n // \"available\": \"0.00024995\",\n // \"transferable\": \"0.00004993\",\n // \"frozen\": \"0\",\n // \"borrow\": \"0.0001\",\n // \"interest\": \"0.00000001\",\n // \"net\": \"0.00014994\",\n // \"ctime\": \"1697251265504\"\n // }\n //\n for (let i = 0; i < balance.length; i++) {\n const entry = balance[i];\n const account = this.account();\n const currencyId = this.safeString2(entry, 'marginCoin', 'coin');\n const code = this.safeCurrencyCode(currencyId);\n const borrow = this.safeString(entry, 'borrow');\n if (borrow !== undefined) {\n const interest = this.safeString(entry, 'interest');\n account['free'] = this.safeString(entry, 'transferable');\n account['total'] = this.safeString(entry, 'totalAmount');\n account['debt'] = Precise.stringAdd(borrow, interest);\n }\n else {\n // Use transferable instead of available for swap and margin https://github.com/ccxt/ccxt/pull/19127\n const spotAccountFree = this.safeString(entry, 'available');\n const contractAccountFree = this.safeString(entry, 'maxTransferOut');\n if (contractAccountFree !== undefined) {\n account['free'] = contractAccountFree;\n account['total'] = this.safeString(entry, 'accountEquity');\n }\n else {\n account['free'] = spotAccountFree;\n const frozen = this.safeString(entry, 'frozen');\n const locked = this.safeString(entry, 'locked');\n account['used'] = Precise.stringAdd(frozen, locked);\n }\n }\n result[code] = account;\n }\n return this.safeBalance(result);\n }\n parseOrderStatus(status) {\n const statuses = {\n 'new': 'open',\n 'init': 'open',\n 'not_trigger': 'open',\n 'partial_fill': 'open',\n 'partially_fill': 'open',\n 'triggered': 'closed',\n 'full_fill': 'closed',\n 'filled': 'closed',\n 'fail_trigger': 'rejected',\n 'cancel': 'canceled',\n 'cancelled': 'canceled',\n 'canceled': 'canceled',\n 'live': 'open',\n 'fail_execute': 'rejected',\n 'executed': 'closed',\n };\n return this.safeString(statuses, status, status);\n }\n parseOrder(order, market = undefined) {\n //\n // createOrder, editOrder, closePosition\n //\n // {\n // \"clientOid\": \"abe95dbe-6081-4a6f-a2d3-ae49601cd479\",\n // \"orderId\": null\n // }\n //\n // createOrders\n //\n // [\n // {\n // \"orderId\": \"1111397214281175046\",\n // \"clientOid\": \"766d3fc3-7321-4406-a689-15c9987a2e75\"\n // },\n // {\n // \"orderId\": \"\",\n // \"clientOid\": \"d1b75cb3-cc15-4ede-ad4c-3937396f75ab\",\n // \"errorMsg\": \"less than the minimum amount 5 USDT\",\n // \"errorCode\": \"45110\"\n // },\n // ]\n //\n // spot, swap, future and spot margin: cancelOrder, cancelOrders\n //\n // {\n // \"orderId\": \"1098758604547850241\",\n // \"clientOid\": \"1098758604585598977\"\n // }\n //\n // spot trigger: cancelOrder\n //\n // {\n // \"result\": \"success\"\n // }\n //\n // spot: fetchOrder\n //\n // {\n // \"userId\": \"7264631750\",\n // \"symbol\": \"BTCUSDT\",\n // \"orderId\": \"1111461743123927040\",\n // \"clientOid\": \"63f95110-93b5-4309-8f77-46339f1bcf3c\",\n // \"price\": \"25000.0000000000000000\",\n // \"size\": \"0.0002000000000000\",\n // \"orderType\": \"limit\",\n // \"side\": \"buy\",\n // \"status\": \"live\",\n // \"priceAvg\": \"0\",\n // \"baseVolume\": \"0.0000000000000000\",\n // \"quoteVolume\": \"0.0000000000000000\",\n // \"enterPointSource\": \"API\",\n // \"feeDetail\": \"\",\n // \"orderSource\": \"normal\",\n // \"cTime\": \"1700719050198\",\n // \"uTime\": \"1700719050198\"\n // }\n //\n // swap and future: fetchOrder\n //\n // {\n // \"symbol\": \"BTCUSDT\",\n // \"size\": \"0.001\",\n // \"orderId\": \"1111465253393825792\",\n // \"clientOid\": \"1111465253431574529\",\n // \"baseVolume\": \"0\",\n // \"fee\": \"0\",\n // \"price\": \"27000\",\n // \"priceAvg\": \"\",\n // \"state\": \"live\",\n // \"side\": \"buy\",\n // \"force\": \"gtc\",\n // \"totalProfits\": \"0\",\n // \"posSide\": \"long\",\n // \"marginCoin\": \"USDT\",\n // \"presetStopSurplusPrice\": \"\",\n // \"presetStopLossPrice\": \"\",\n // \"quoteVolume\": \"0\",\n // \"orderType\": \"limit\",\n // \"leverage\": \"20\",\n // \"marginMode\": \"crossed\",\n // \"reduceOnly\": \"NO\",\n // \"enterPointSource\": \"API\",\n // \"tradeSide\": \"open\",\n // \"posMode\": \"hedge_mode\",\n // \"orderSource\": \"normal\",\n // \"cTime\": \"1700719887120\",\n // \"uTime\": \"1700719887120\"\n // }\n //\n // spot: fetchOpenOrders\n //\n // {\n // \"userId\": \"7264631750\",\n // \"symbol\": \"BTCUSDT\",\n // \"orderId\": \"1111499608327360513\",\n // \"clientOid\": \"d0d4dad5-18d0-4869-a074-ec40bb47cba6\",\n // \"priceAvg\": \"25000.0000000000000000\",\n // \"size\": \"0.0002000000000000\",\n // \"orderType\": \"limit\",\n // \"side\": \"buy\",\n // \"status\": \"live\",\n // \"basePrice\": \"0\",\n // \"baseVolume\": \"0.0000000000000000\",\n // \"quoteVolume\": \"0.0000000000000000\",\n // \"enterPointSource\": \"WEB\",\n // \"orderSource\": \"normal\",\n // \"cTime\": \"1700728077966\",\n // \"uTime\": \"1700728077966\"\n // }\n //\n // spot stop: fetchOpenOrders, fetchCanceledAndClosedOrders\n //\n // {\n // \"orderId\": \"1111503385931620352\",\n // \"clientOid\": \"1111503385910648832\",\n // \"symbol\": \"BTCUSDT\",\n // \"size\": \"0.0002\",\n // \"planType\": \"AMOUNT\",\n // \"executePrice\": \"25000\",\n // \"triggerPrice\": \"26000\",\n // \"status\": \"live\",\n // \"orderType\": \"limit\",\n // \"side\": \"buy\",\n // \"triggerType\": \"fill_price\",\n // \"enterPointSource\": \"API\",\n // \"cTime\": \"1700728978617\",\n // \"uTime\": \"1700728978617\"\n // }\n //\n // spot margin: fetchOpenOrders, fetchCanceledAndClosedOrders\n //\n // {\n // \"symbol\": \"BTCUSDT\",\n // \"orderType\": \"limit\",\n // \"enterPointSource\": \"WEB\",\n // \"orderId\": \"1111506377509580801\",\n // \"clientOid\": \"2043a3b59a60445f9d9f7365bf3e960c\",\n // \"loanType\": \"autoLoanAndRepay\",\n // \"price\": \"25000\",\n // \"side\": \"buy\",\n // \"status\": \"live\",\n // \"baseSize\": \"0.0002\",\n // \"quoteSize\": \"5\",\n // \"priceAvg\": \"0\",\n // \"size\": \"0\",\n // \"amount\": \"0\",\n // \"force\": \"gtc\",\n // \"cTime\": \"1700729691866\",\n // \"uTime\": \"1700729691866\"\n // }\n //\n // swap: fetchOpenOrders, fetchCanceledAndClosedOrders\n //\n // {\n // \"symbol\": \"BTCUSDT\",\n // \"size\": \"0.002\",\n // \"orderId\": \"1111488897767604224\",\n // \"clientOid\": \"1111488897805352960\",\n // \"baseVolume\": \"0\",\n // \"fee\": \"0\",\n // \"price\": \"25000\",\n // \"priceAvg\": \"\",\n // \"status\": \"live\",\n // \"side\": \"buy\",\n // \"force\": \"gtc\",\n // \"totalProfits\": \"0\",\n // \"posSide\": \"long\",\n // \"marginCoin\": \"USDT\",\n // \"quoteVolume\": \"0\",\n // \"leverage\": \"20\",\n // \"marginMode\": \"crossed\",\n // \"enterPointSource\": \"web\",\n // \"tradeSide\": \"open\",\n // \"posMode\": \"hedge_mode\",\n // \"orderType\": \"limit\",\n // \"orderSource\": \"normal\",\n // \"presetStopSurplusPrice\": \"\",\n // \"presetStopLossPrice\": \"\",\n // \"reduceOnly\": \"NO\",\n // \"cTime\": \"1700725524378\",\n // \"uTime\": \"1700725524378\"\n // }\n //\n // swap stop: fetchOpenOrders\n //\n // {\n // \"planType\": \"normal_plan\",\n // \"symbol\": \"BTCUSDT\",\n // \"size\": \"0.001\",\n // \"orderId\": \"1111491399869075457\",\n // \"clientOid\": \"1111491399869075456\",\n // \"price\": \"27000\",\n // \"callbackRatio\": \"\",\n // \"triggerPrice\": \"24000\",\n // \"triggerType\": \"mark_price\",\n // \"planStatus\": \"live\",\n // \"side\": \"buy\",\n // \"posSide\": \"long\",\n // \"marginCoin\": \"USDT\",\n // \"marginMode\": \"crossed\",\n // \"enterPointSource\": \"API\",\n // \"tradeSide\": \"open\",\n // \"posMode\": \"hedge_mode\",\n // \"orderType\": \"limit\",\n // \"stopSurplusTriggerPrice\": \"\",\n // \"stopSurplusExecutePrice\": \"\",\n // \"stopSurplusTriggerType\": \"fill_price\",\n // \"stopLossTriggerPrice\": \"\",\n // \"stopLossExecutePrice\": \"\",\n // \"stopLossTriggerType\": \"fill_price\",\n // \"cTime\": \"1700726120917\",\n // \"uTime\": \"1700726120917\"\n // }\n //\n // spot: fetchCanceledAndClosedOrders\n //\n // {\n // \"userId\": \"7264631750\",\n // \"symbol\": \"BTCUSDT\",\n // \"orderId\": \"1111499608327360513\",\n // \"clientOid\": \"d0d4dad5-18d0-4869-a074-ec40bb47cba6\",\n // \"price\": \"25000.0000000000000000\",\n // \"size\": \"0.0002000000000000\",\n // \"orderType\": \"limit\",\n // \"side\": \"buy\",\n // \"status\": \"cancelled\",\n // \"priceAvg\": \"0\",\n // \"baseVolume\": \"0.0000000000000000\",\n // \"quoteVolume\": \"0.0000000000000000\",\n // \"enterPointSource\": \"WEB\",\n // \"feeDetail\": \"\",\n // \"orderSource\": \"normal\",\n // \"cTime\": \"1700728077966\",\n // \"uTime\": \"1700728911471\"\n // }\n //\n // swap stop: fetchCanceledAndClosedOrders\n //\n // {\n // \"planType\": \"normal_plan\",\n // \"symbol\": \"BTCUSDT\",\n // \"size\": \"0.001\",\n // \"orderId\": \"1111491399869075457\",\n // \"clientOid\": \"1111491399869075456\",\n // \"planStatus\": \"cancelled\",\n // \"price\": \"27000\",\n // \"feeDetail\": null,\n // \"baseVolume\": \"0\",\n // \"callbackRatio\": \"\",\n // \"triggerPrice\": \"24000\",\n // \"triggerType\": \"mark_price\",\n // \"side\": \"buy\",\n // \"posSide\": \"long\",\n // \"marginCoin\": \"USDT\",\n // \"marginMode\": \"crossed\",\n // \"enterPointSource\": \"API\",\n // \"tradeSide\": \"open\",\n // \"posMode\": \"hedge_mode\",\n // \"orderType\": \"limit\",\n // \"stopSurplusTriggerPrice\": \"\",\n // \"stopSurplusExecutePrice\": \"\",\n // \"stopSurplusTriggerType\": \"fill_price\",\n // \"stopLossTriggerPrice\": \"\",\n // \"stopLossExecutePrice\": \"\",\n // \"stopLossTriggerType\": \"fill_price\",\n // \"cTime\": \"1700726120917\",\n // \"uTime\": \"1700727879652\"\n // }\n //\n const errorMessage = this.safeString(order, 'errorMsg');\n if (errorMessage !== undefined) {\n return this.safeOrder({\n 'info': order,\n 'id': this.safeString(order, 'orderId'),\n 'clientOrderId': this.safeString2(order, 'clientOrderId', 'clientOid'),\n 'status': 'rejected',\n }, market);\n }\n const isContractOrder = ('posSide' in order);\n let marketType = isContractOrder ? 'contract' : 'spot';\n if (market !== undefined) {\n marketType = market['type'];\n }\n const marketId = this.safeString(order, 'symbol');\n market = this.safeMarket(marketId, market, undefined, marketType);\n const timestamp = this.safeInteger2(order, 'cTime', 'ctime');\n const updateTimestamp = this.safeInteger(order, 'uTime');\n const rawStatus = this.safeString2(order, 'status', 'state');\n let fee = undefined;\n const feeCostString = this.safeString(order, 'fee');\n if (feeCostString !== undefined) {\n // swap\n fee = {\n 'cost': this.parseNumber(Precise.stringAbs(feeCostString)),\n 'currency': market['settle'],\n };\n }\n const feeDetail = this.safeValue(order, 'feeDetail');\n if (feeDetail !== undefined) {\n const parsedFeeDetail = JSON.parse(feeDetail);\n const feeValues = Object.values(parsedFeeDetail);\n let feeObject = undefined;\n for (let i = 0; i < feeValues.length; i++) {\n const feeValue = feeValues[i];\n if (this.safeValue(feeValue, 'feeCoinCode') !== undefined) {\n feeObject = feeValue;\n break;\n }\n }\n fee = {\n 'cost': this.parseNumber(Precise.stringAbs(this.safeString(feeObject, 'totalFee'))),\n 'currency': this.safeCurrencyCode(this.safeString(feeObject, 'feeCoinCode')),\n };\n }\n let postOnly = undefined;\n let timeInForce = this.safeStringUpper(order, 'force');\n if (timeInForce === 'POST_ONLY') {\n postOnly = true;\n timeInForce = 'PO';\n }\n let reduceOnly = undefined;\n const reduceOnlyRaw = this.safeString(order, 'reduceOnly');\n if (reduceOnlyRaw !== undefined) {\n reduceOnly = (reduceOnlyRaw === 'NO') ? false : true;\n }\n let price = undefined;\n let average = undefined;\n const basePrice = this.safeString(order, 'basePrice');\n if (basePrice !== undefined) {\n // for spot fetchOpenOrders, the price is priceAvg and the filled price is basePrice\n price = this.safeString(order, 'priceAvg');\n average = this.safeString(order, 'basePrice');\n }\n else {\n price = this.safeString2(order, 'price', 'executePrice');\n average = this.safeString(order, 'priceAvg');\n }\n let size = undefined;\n let filled = undefined;\n const baseSize = this.safeString(order, 'baseSize');\n if (baseSize !== undefined) {\n // for spot margin fetchOpenOrders, the order size is baseSize and the filled amount is size\n size = baseSize;\n filled = this.safeString(order, 'size');\n }\n else {\n size = this.safeString(order, 'size');\n filled = this.safeString(order, 'baseVolume');\n }\n let side = this.safeString(order, 'side');\n const posMode = this.safeString(order, 'posMode');\n if (posMode === 'hedge_mode' && reduceOnly) {\n side = (side === 'buy') ? 'sell' : 'buy';\n // on bitget hedge mode if the position is long the side is always buy, and if the position is short the side is always sell\n // so the side of the reduceOnly order is inversed\n }\n return this.safeOrder({\n 'info': order,\n 'id': this.safeString2(order, 'orderId', 'data'),\n 'clientOrderId': this.safeString2(order, 'clientOrderId', 'clientOid'),\n 'timestamp': timestamp,\n 'datetime': this.iso8601(timestamp),\n 'lastTradeTimestamp': updateTimestamp,\n 'lastUpdateTimestamp': updateTimestamp,\n 'symbol': market['symbol'],\n 'type': this.safeString(order, 'orderType'),\n 'side': side,\n 'price': price,\n 'amount': size,\n 'cost': this.safeString2(order, 'quoteVolume', 'quoteSize'),\n 'average': average,\n 'filled': filled,\n 'remaining': undefined,\n 'timeInForce': timeInForce,\n 'postOnly': postOnly,\n 'reduceOnly': reduceOnly,\n 'stopPrice': this.safeNumber(order, 'triggerPrice'),\n 'triggerPrice': this.safeNumber(order, 'triggerPrice'),\n 'takeProfitPrice': this.safeNumber2(order, 'presetStopSurplusPrice', 'stopSurplusTriggerPrice'),\n 'stopLossPrice': this.safeNumber2(order, 'presetStopLossPrice', 'stopLossTriggerPrice'),\n 'status': this.parseOrderStatus(rawStatus),\n 'fee': fee,\n 'trades': undefined,\n }, market);\n }\n async createMarketBuyOrderWithCost(symbol, cost, params = {}) {\n /**\n * @method\n * @name bitget#createMarketBuyOrderWithCost\n * @description create a market buy order by providing the symbol and cost\n * @see https://www.bitget.com/api-doc/spot/trade/Place-Order\n * @see https://www.bitget.com/api-doc/margin/cross/trade/Cross-Place-Order\n * @see https://www.bitget.com/api-doc/margin/isolated/trade/Isolated-Place-Order\n * @param {string} symbol unified symbol of the market to create an order in\n * @param {float} cost how much you want to trade in units of the quote currency\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n await this.loadMarkets();\n const market = this.market(symbol);\n if (!market['spot']) {\n throw new MarketTypeNotSupportedError(market['type']).addMessage('It supports spot orders only').exchange(this.id);\n }\n params['createMarketBuyOrderRequiresPrice'] = false;\n return await this.createOrder(symbol, 'market', 'buy', cost, undefined, params);\n }\n async createOrder(symbol, type, side, amount, price = undefined, params = {}) {\n /**\n * @method\n * @name bitget#createOrder\n * @description create a trade order\n * @see https://www.bitget.com/api-doc/spot/trade/Place-Order\n * @see https://www.bitget.com/api-doc/spot/plan/Place-Plan-Order\n * @see https://www.bitget.com/api-doc/contract/trade/Place-Order\n * @see https://www.bitget.com/api-doc/contract/plan/Place-Tpsl-Order\n * @see https://www.bitget.com/api-doc/contract/plan/Place-Plan-Order\n * @see https://www.bitget.com/api-doc/margin/cross/trade/Cross-Place-Order\n * @see https://www.bitget.com/api-doc/margin/isolated/trade/Isolated-Place-Order\n * @param {string} symbol unified symbol of the market to create an order in\n * @param {string} type 'market' or 'limit'\n * @param {string} side 'buy' or 'sell' or 'open_long' or 'open_short' or 'close_long' or 'close_short'\n * @param {float} amount how much you want to trade in units of the base currency\n * @param {float} [price] the price at which the order is to be fullfilled, in units of the quote currency, ignored in market orders\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {float} [params.cost] *spot only* how much you want to trade in units of the quote currency, for market buy orders only\n * @param {float} [params.triggerPrice] *swap only* The price at which a trigger order is triggered at\n * @param {float} [params.stopLossPrice] *swap only* The price at which a stop loss order is triggered at\n * @param {float} [params.takeProfitPrice] *swap only* The price at which a take profit order is triggered at\n * @param {object} [params.takeProfit] *takeProfit object in params* containing the triggerPrice at which the attached take profit order will be triggered (perpetual swap markets only)\n * @param {float} [params.takeProfit.triggerPrice] *swap only* take profit trigger price\n * @param {object} [params.stopLoss] *stopLoss object in params* containing the triggerPrice at which the attached stop loss order will be triggered (perpetual swap markets only)\n * @param {float} [params.stopLoss.triggerPrice] *swap only* stop loss trigger price\n * @param {string} [params.timeInForce] \"GTC\", \"IOC\", \"FOK\", or \"PO\"\n * @param {string} [params.marginMode] 'isolated' or 'cross' for spot margin trading\n * @param {string} [params.loanType] *spot margin only* 'normal', 'autoLoan', 'autoRepay', or 'autoLoanAndRepay' default is 'normal'\n * @param {string} [params.holdSide] *contract stopLossPrice, takeProfitPrice only* Two-way position: ('long' or 'short'), one-way position: ('buy' or 'sell')\n * @param {float} [params.stopLoss.price] *swap only* the execution price for a stop loss attached to a trigger order\n * @param {float} [params.takeProfit.price] *swap only* the execution price for a take profit attached to a trigger order\n * @param {string} [params.stopLoss.type] *swap only* the type for a stop loss attached to a trigger order, 'fill_price', 'index_price' or 'mark_price', default is 'mark_price'\n * @param {string} [params.takeProfit.type] *swap only* the type for a take profit attached to a trigger order, 'fill_price', 'index_price' or 'mark_price', default is 'mark_price'\n * @param {string} [params.trailingPercent] *swap and future only* the percent to trail away from the current market price, rate can not be greater than 10\n * @param {string} [params.trailingTriggerPrice] *swap and future only* the price to trigger a trailing stop order, default uses the price argument\n * @param {string} [params.triggerType] *swap and future only* 'fill_price', 'mark_price' or 'index_price'\n * @param {boolean} [params.oneWayMode] *swap and future only* required to set this to true in one_way_mode and you can leave this as undefined in hedge_mode, can adjust the mode using the setPositionMode() method\n * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n await this.loadMarkets();\n const market = this.market(symbol);\n const marginParams = this.handleMarginModeAndParams('createOrder', params);\n const marginMode = marginParams[0];\n const triggerPrice = this.safeValue2(params, 'stopPrice', 'triggerPrice');\n const stopLossTriggerPrice = this.safeValue(params, 'stopLossPrice');\n const takeProfitTriggerPrice = this.safeValue(params, 'takeProfitPrice');\n const trailingPercent = this.safeString2(params, 'trailingPercent', 'callbackRatio');\n const isTrailingPercentOrder = trailingPercent !== undefined;\n const isTriggerOrder = triggerPrice !== undefined;\n const isStopLossTriggerOrder = stopLossTriggerPrice !== undefined;\n const isTakeProfitTriggerOrder = takeProfitTriggerPrice !== undefined;\n const isStopLossOrTakeProfitTrigger = isStopLossTriggerOrder || isTakeProfitTriggerOrder;\n const request = this.createOrderRequest(symbol, type, side, amount, price, params);\n let response = undefined;\n if (market['spot']) {\n if (isTriggerOrder) {\n response = await this.privateSpotPostV2SpotTradePlacePlanOrder(request);\n }\n else if (marginMode === 'isolated') {\n response = await this.privateMarginPostV2MarginIsolatedPlaceOrder(request);\n }\n else if (marginMode === 'cross') {\n response = await this.privateMarginPostV2MarginCrossedPlaceOrder(request);\n }\n else {\n response = await this.privateSpotPostV2SpotTradePlaceOrder(request);\n }\n }\n else {\n if (isTriggerOrder || isTrailingPercentOrder) {\n response = await this.privateMixPostV2MixOrderPlacePlanOrder(request);\n }\n else if (isStopLossOrTakeProfitTrigger) {\n response = await this.privateMixPostV2MixOrderPlaceTpslOrder(request);\n }\n else {\n response = await this.privateMixPostV2MixOrderPlaceOrder(request);\n }\n }\n //\n // {\n // \"code\": \"00000\",\n // \"msg\": \"success\",\n // \"requestTime\": 1645932209602,\n // \"data\": {\n // \"orderId\": \"881669078313766912\",\n // \"clientOid\": \"iauIBf#a45b595f96474d888d0ada\"\n // }\n // }\n //\n const data = this.safeValue(response, 'data', {});\n return this.parseOrder(data, market);\n }\n createOrderRequest(symbol, type, side, amount, price = undefined, params = {}) {\n const sandboxMode = this.safeValue(this.options, 'sandboxMode', false);\n let market = undefined;\n if (sandboxMode) {\n const sandboxSymbol = this.convertSymbolForSandbox(symbol);\n market = this.market(sandboxSymbol);\n }\n else {\n market = this.market(symbol);\n }\n let marketType = undefined;\n let marginMode = undefined;\n [marketType, params] = this.handleMarketTypeAndParams('createOrder', market, params);\n [marginMode, params] = this.handleMarginModeAndParams('createOrder', params);\n const request = {\n 'symbol': market['id'],\n 'orderType': type,\n };\n const isMarketOrder = type === 'market';\n const triggerPrice = this.safeValue2(params, 'stopPrice', 'triggerPrice');\n const stopLossTriggerPrice = this.safeValue(params, 'stopLossPrice');\n const takeProfitTriggerPrice = this.safeValue(params, 'takeProfitPrice');\n const stopLoss = this.safeValue(params, 'stopLoss');\n const takeProfit = this.safeValue(params, 'takeProfit');\n const isTriggerOrder = triggerPrice !== undefined;\n const isStopLossTriggerOrder = stopLossTriggerPrice !== undefined;\n const isTakeProfitTriggerOrder = takeProfitTriggerPrice !== undefined;\n const isStopLoss = stopLoss !== undefined;\n const isTakeProfit = takeProfit !== undefined;\n const isStopLossOrTakeProfitTrigger = isStopLossTriggerOrder || isTakeProfitTriggerOrder;\n const isStopLossOrTakeProfit = isStopLoss || isTakeProfit;\n const trailingTriggerPrice = this.safeString(params, 'trailingTriggerPrice', this.numberToString(price));\n const trailingPercent = this.safeString2(params, 'trailingPercent', 'callbackRatio');\n const isTrailingPercentOrder = trailingPercent !== undefined;\n if (this.sum(isTriggerOrder, isStopLossTriggerOrder, isTakeProfitTriggerOrder, isTrailingPercentOrder) > 1) {\n throw new InvalidParamsError('createOrder() params can only contain one of triggerPrice, stopLossPrice, takeProfitPrice, trailingPercent')\n .exchange(this.id);\n }\n if (type === 'limit') {\n request['price'] = this.priceToPrecision(symbol, price);\n }\n const triggerType = this.safeString(params, 'triggerType', 'mark_price');\n const reduceOnly = this.safeBool(params, 'reduceOnly', false);\n const clientOrderId = this.safeString2(params, 'clientOid', 'clientOrderId');\n const exchangeSpecificTifParam = this.safeString2(params, 'force', 'timeInForce');\n let postOnly = undefined;\n [postOnly, params] = this.handlePostOnly(isMarketOrder, exchangeSpecificTifParam === 'post_only', params);\n const defaultTimeInForce = this.safeStringUpper(this.options, 'defaultTimeInForce');\n const timeInForce = this.safeStringUpper(params, 'timeInForce', defaultTimeInForce);\n if (postOnly) {\n request['force'] = 'post_only';\n }\n else if (timeInForce === 'GTC') {\n request['force'] = 'GTC';\n }\n else if (timeInForce === 'FOK') {\n request['force'] = 'FOK';\n }\n else if (timeInForce === 'IOC') {\n request['force'] = 'IOC';\n }\n params = this.omit(params, ['stopPrice', 'triggerType', 'stopLossPrice', 'takeProfitPrice', 'stopLoss', 'takeProfit', 'postOnly', 'reduceOnly', 'clientOrderId', 'trailingPercent', 'trailingTriggerPrice']);\n if ((marketType === 'swap') || (marketType === 'future')) {\n request['marginCoin'] = market['settleId'];\n request['size'] = this.amountToPrecision(symbol, amount);\n let productType = undefined;\n [productType, params] = this.handleProductTypeAndParams(market, params);\n request['productType'] = productType;\n if (clientOrderId !== undefined) {\n request['clientOid'] = clientOrderId;\n }\n if (isTriggerOrder || isStopLossOrTakeProfitTrigger || isTrailingPercentOrder) {\n request['triggerType'] = triggerType;\n }\n if (isTrailingPercentOrder) {\n if (!isMarketOrder) {\n throw new MarketTypeNotSupportedError(type)\n .addMessage('createOrder() bitget trailing orders must be market orders')\n .exchange(this.id);\n }\n if (trailingTriggerPrice === undefined) {\n throw new InvalidParamsError('createOrder() bitget trailing orders must have a trailingTriggerPrice param')\n .exchange(this.id);\n }\n request['planType'] = 'track_plan';\n request['triggerPrice'] = this.priceToPrecision(symbol, trailingTriggerPrice);\n request['callbackRatio'] = trailingPercent;\n }\n else if (isTriggerOrder) {\n request['planType'] = 'normal_plan';\n request['triggerPrice'] = this.priceToPrecision(symbol, triggerPrice);\n if (price !== undefined) {\n request['executePrice'] = this.priceToPrecision(symbol, price);\n }\n if (isStopLoss) {\n const slTriggerPrice = this.safeNumber2(stopLoss, 'triggerPrice', 'stopPrice');\n request['stopLossTriggerPrice'] = this.priceToPrecision(symbol, slTriggerPrice);\n const slPrice = this.safeNumber(stopLoss, 'price');\n request['stopLossExecutePrice'] = this.priceToPrecision(symbol, slPrice);\n const slType = this.safeString(stopLoss, 'type', 'mark_price');\n request['stopLossTriggerType'] = slType;\n }\n if (isTakeProfit) {\n const tpTriggerPrice = this.safeNumber2(takeProfit, 'triggerPrice', 'stopPrice');\n request['stopSurplusTriggerPrice'] = this.priceToPrecision(symbol, tpTriggerPrice);\n const tpPrice = this.safeNumber(takeProfit, 'price');\n request['stopSurplusExecutePrice'] = this.priceToPrecision(symbol, tpPrice);\n const tpType = this.safeString(takeProfit, 'type', 'mark_price');\n request['stopSurplusTriggerType'] = tpType;\n }\n }\n else if (isStopLossOrTakeProfitTrigger) {\n if (!isMarketOrder) {\n throw new MarketTypeNotSupportedError(type)\n .addMessage('createOrder() bitget stopLoss or takeProfit orders must be market orders')\n .exchange(this.id);\n }\n request['holdSide'] = (side === 'buy') ? 'long' : 'short';\n if (isStopLossTriggerOrder) {\n request['triggerPrice'] = this.priceToPrecision(symbol, stopLossTriggerPrice);\n request['planType'] = 'pos_loss';\n }\n else if (isTakeProfitTriggerOrder) {\n request['triggerPrice'] = this.priceToPrecision(symbol, takeProfitTriggerPrice);\n request['planType'] = 'pos_profit';\n }\n }\n else {\n if (isStopLoss) {\n const slTriggerPrice = this.safeValue2(stopLoss, 'triggerPrice', 'stopPrice');\n request['presetStopLossPrice'] = this.priceToPrecision(symbol, slTriggerPrice);\n }\n if (isTakeProfit) {\n const tpTriggerPrice = this.safeValue2(takeProfit, 'triggerPrice', 'stopPrice');\n request['presetStopSurplusPrice'] = this.priceToPrecision(symbol, tpTriggerPrice);\n }\n }\n if (!isStopLossOrTakeProfitTrigger) {\n if (marginMode === undefined) {\n marginMode = 'cross';\n }\n const marginModeRequest = (marginMode === 'cross') ? 'crossed' : 'isolated';\n request['marginMode'] = marginModeRequest;\n const oneWayMode = this.safeBool(params, 'oneWayMode', false);\n params = this.omit(params, 'oneWayMode');\n let requestSide = side;\n if (reduceOnly) {\n if (oneWayMode) {\n request['reduceOnly'] = 'YES';\n }\n else {\n // on bitget hedge mode if the position is long the side is always buy, and if the position is short the side is always sell\n requestSide = (side === 'buy') ? 'sell' : 'buy';\n request['tradeSide'] = 'Close';\n }\n }\n else {\n if (!oneWayMode) {\n request['tradeSide'] = 'Open';\n }\n }\n request['side'] = requestSide;\n }\n }\n else if (marketType === 'spot') {\n if (isStopLossOrTakeProfitTrigger || isStopLossOrTakeProfit) {\n throw new TradeError()\n .addMessage('createOrder() does not support stop loss/take profit orders on spot markets, only swap markets')\n .exchange(this.id);\n }\n request['side'] = side;\n let quantity = undefined;\n let planType = undefined;\n let createMarketBuyOrderRequiresPrice = true;\n [createMarketBuyOrderRequiresPrice, params] = this.handleOptionAndParams(params, 'createOrder', 'createMarketBuyOrderRequiresPrice', true);\n if (isMarketOrder && (side === 'buy')) {\n planType = 'total';\n const cost = this.safeNumber(params, 'cost');\n params = this.omit(params, 'cost');\n if (cost !== undefined) {\n quantity = this.costToPrecision(symbol, cost);\n }\n else if (createMarketBuyOrderRequiresPrice) {\n if (price === undefined) {\n throw new InvalidParamsError('createOrder() requires the price argument for market buy orders to calculate the total cost to spend (amount * price), alternatively set the createMarketBuyOrderRequiresPrice option or param to false and pass the cost to spend in the amount argument')\n .exchange(this.id);\n }\n else {\n const amountString = this.numberToString(amount);\n const priceString = this.numberToString(price);\n const quoteAmount = Precise.stringMul(amountString, priceString);\n quantity = this.costToPrecision(symbol, quoteAmount);\n }\n }\n else {\n quantity = this.costToPrecision(symbol, amount);\n }\n }\n else {\n planType = 'amount';\n quantity = this.amountToPrecision(symbol, amount);\n }\n if (clientOrderId !== undefined) {\n request['clientOid'] = clientOrderId;\n }\n if (marginMode !== undefined) {\n request['loanType'] = 'normal';\n if (createMarketBuyOrderRequiresPrice && isMarketOrder && (side === 'buy')) {\n request['quoteSize'] = quantity;\n }\n else {\n request['baseSize'] = quantity;\n }\n }\n else {\n if (quantity !== undefined) {\n request['size'] = quantity;\n }\n if (triggerPrice !== undefined) {\n request['planType'] = planType;\n request['triggerType'] = triggerType;\n request['triggerPrice'] = this.priceToPrecision(symbol, triggerPrice);\n if (price !== undefined) {\n request['executePrice'] = this.priceToPrecision(symbol, price);\n }\n }\n }\n }\n else {\n throw new MarketTypeNotSupportedError(marketType).exchange(this.id);\n }\n return this.extend(request, params);\n }\n async createOrders(orders, params = {}) {\n /**\n * @method\n * @name bitget#createOrders\n * @description create a list of trade orders (all orders should be of the same symbol)\n * @see https://www.bitget.com/api-doc/spot/trade/Batch-Place-Orders\n * @see https://www.bitget.com/api-doc/contract/trade/Batch-Order\n * @see https://www.bitget.com/api-doc/margin/isolated/trade/Isolated-Batch-Order\n * @see https://www.bitget.com/api-doc/margin/cross/trade/Cross-Batch-Order\n * @param {Array} orders list of orders to create, each object should contain the parameters required by createOrder, namely symbol, type, side, amount, price and params\n * @param {object} [params] extra parameters specific to the api endpoint\n * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n await this.loadMarkets();\n const ordersRequests = [];\n let symbol = undefined;\n let marginMode = undefined;\n for (let i = 0; i < orders.length; i++) {\n const rawOrder = orders[i];\n const marketId = this.safeString(rawOrder, 'symbol');\n if (symbol === undefined) {\n symbol = marketId;\n }\n else {\n if (symbol !== marketId) {\n throw new InvalidParamsError('createOrders() requires all orders to have the same symbol')\n .exchange(this.id);\n }\n }\n const type = this.safeString(rawOrder, 'type');\n const side = this.safeString(rawOrder, 'side');\n const amount = this.safeValue(rawOrder, 'amount');\n const price = this.safeValue(rawOrder, 'price');\n const orderParams = this.safeValue(rawOrder, 'params', {});\n const marginResult = this.handleMarginModeAndParams('createOrders', orderParams);\n const currentMarginMode = marginResult[0];\n if (currentMarginMode !== undefined) {\n if (marginMode === undefined) {\n marginMode = currentMarginMode;\n }\n else {\n if (marginMode !== currentMarginMode) {\n throw new InvalidParamsError('createOrders() requires all orders to have the same margin mode (isolated or cross)')\n .exchange(this.id);\n }\n }\n }\n const orderRequest = this.createOrderRequest(marketId, type, side, amount, price, orderParams);\n ordersRequests.push(orderRequest);\n }\n const sandboxMode = this.safeValue(this.options, 'sandboxMode', false);\n let market = undefined;\n if (sandboxMode) {\n const sandboxSymbol = this.convertSymbolForSandbox(symbol);\n market = this.market(sandboxSymbol);\n }\n else {\n market = this.market(symbol);\n }\n const request = {\n 'symbol': market['id'],\n 'orderList': ordersRequests,\n };\n let response = undefined;\n if ((market['swap']) || (market['future'])) {\n if (marginMode === undefined) {\n marginMode = 'cross';\n }\n const marginModeRequest = (marginMode === 'cross') ? 'crossed' : 'isolated';\n request['marginMode'] = marginModeRequest;\n request['marginCoin'] = market['settleId'];\n let productType = undefined;\n [productType, params] = this.handleProductTypeAndParams(market, params);\n request['productType'] = productType;\n response = await this.privateMixPostV2MixOrderBatchPlaceOrder(request);\n }\n else if (marginMode === 'isolated') {\n response = await this.privateMarginPostV2MarginIsolatedBatchPlaceOrder(request);\n }\n else if (marginMode === 'cross') {\n response = await this.privateMarginPostV2MarginCrossedBatchPlaceOrder(request);\n }\n else {\n response = await this.privateSpotPostV2SpotTradeBatchOrders(request);\n }\n //\n // {\n // \"code\": \"00000\",\n // \"msg\": \"success\",\n // \"requestTime\": 1700703539416,\n // \"data\": {\n // \"successList\": [\n // {\n // \"orderId\": \"1111397214281175046\",\n // \"clientOid\": \"766d3fc3-7321-4406-a689-15c9987a2e75\"\n // },\n // ],\n // \"failureList\": [\n // {\n // \"orderId\": \"\",\n // \"clientOid\": \"d1b75cb3-cc15-4ede-ad4c-3937396f75ab\",\n // \"errorMsg\": \"less than the minimum amount 5 USDT\",\n // \"errorCode\": \"45110\"\n // },\n // ]\n // }\n // }\n //\n const data = this.safeValue(response, 'data', {});\n const failure = this.safeValue(data, 'failureList', []);\n const orderInfo = this.safeValue(data, 'successList', []);\n const both = this.arrayConcat(orderInfo, failure);\n return this.parseOrders(both, market);\n }\n async editOrder(id, symbol, type, side, amount = undefined, price = undefined, params = {}) {\n /**\n * @method\n * @name bitget#editOrder\n * @description edit a trade order\n * @see https://www.bitget.com/api-doc/spot/plan/Modify-Plan-Order\n * @see https://www.bitget.com/api-doc/contract/trade/Modify-Order\n * @see https://www.bitget.com/api-doc/contract/plan/Modify-Tpsl-Order\n * @see https://www.bitget.com/api-doc/contract/plan/Modify-Plan-Order\n * @param {string} id cancel order id\n * @param {string} symbol unified symbol of the market to create an order in\n * @param {string} type 'market' or 'limit'\n * @param {string} side 'buy' or 'sell'\n * @param {float} amount how much you want to trade in units of the base currency\n * @param {float} [price] the price at which the order is to be fullfilled, in units of the base currency, ignored in market orders\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {float} [params.triggerPrice] the price that a trigger order is triggered at\n * @param {float} [params.stopLossPrice] *swap only* The price at which a stop loss order is triggered at\n * @param {float} [params.takeProfitPrice] *swap only* The price at which a take profit order is triggered at\n * @param {object} [params.takeProfit] *takeProfit object in params* containing the triggerPrice at which the attached take profit order will be triggered (perpetual swap markets only)\n * @param {float} [params.takeProfit.triggerPrice] *swap only* take profit trigger price\n * @param {object} [params.stopLoss] *stopLoss object in params* containing the triggerPrice at which the attached stop loss order will be triggered (perpetual swap markets only)\n * @param {float} [params.stopLoss.triggerPrice] *swap only* stop loss trigger price\n * @param {float} [params.stopLoss.price] *swap only* the execution price for a stop loss attached to a trigger order\n * @param {float} [params.takeProfit.price] *swap only* the execution price for a take profit attached to a trigger order\n * @param {string} [params.stopLoss.type] *swap only* the type for a stop loss attached to a trigger order, 'fill_price', 'index_price' or 'mark_price', default is 'mark_price'\n * @param {string} [params.takeProfit.type] *swap only* the type for a take profit attached to a trigger order, 'fill_price', 'index_price' or 'mark_price', default is 'mark_price'\n * @param {string} [params.trailingPercent] *swap and future only* the percent to trail away from the current market price, rate can not be greater than 10\n * @param {string} [params.trailingTriggerPrice] *swap and future only* the price to trigger a trailing stop order, default uses the price argument\n * @param {string} [params.newTriggerType] *swap and future only* 'fill_price', 'mark_price' or 'index_price'\n * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n await this.loadMarkets();\n const sandboxMode = this.safeValue(this.options, 'sandboxMode', false);\n let market = undefined;\n if (sandboxMode) {\n const sandboxSymbol = this.convertSymbolForSandbox(symbol);\n market = this.market(sandboxSymbol);\n }\n else {\n market = this.market(symbol);\n }\n const request = {\n 'orderId': id,\n };\n const isMarketOrder = type === 'market';\n const triggerPrice = this.safeValue2(params, 'stopPrice', 'triggerPrice');\n const isTriggerOrder = triggerPrice !== undefined;\n const stopLossPrice = this.safeValue(params, 'stopLossPrice');\n const isStopLossOrder = stopLossPrice !== undefined;\n const takeProfitPrice = this.safeValue(params, 'takeProfitPrice');\n const isTakeProfitOrder = takeProfitPrice !== undefined;\n const stopLoss = this.safeValue(params, 'stopLoss');\n const takeProfit = this.safeValue(params, 'takeProfit');\n const isStopLoss = stopLoss !== undefined;\n const isTakeProfit = takeProfit !== undefined;\n const trailingTriggerPrice = this.safeString(params, 'trailingTriggerPrice', this.numberToString(price));\n const trailingPercent = this.safeString2(params, 'trailingPercent', 'newCallbackRatio');\n const isTrailingPercentOrder = trailingPercent !== undefined;\n if (this.sum(isTriggerOrder, isStopLossOrder, isTakeProfitOrder, isTrailingPercentOrder) > 1) {\n throw new InvalidParamsError('editOrder() params can only contain one of triggerPrice, stopLossPrice, takeProfitPrice, trailingPercent')\n .exchange(this.id);\n }\n const clientOrderId = this.safeString2(params, 'clientOid', 'clientOrderId');\n if (clientOrderId !== undefined) {\n request['clientOid'] = clientOrderId;\n }\n params = this.omit(params, ['stopPrice', 'triggerType', 'stopLossPrice', 'takeProfitPrice', 'stopLoss', 'takeProfit', 'clientOrderId', 'trailingTriggerPrice', 'trailingPercent']);\n let response = undefined;\n if (market['spot']) {\n const editMarketBuyOrderRequiresPrice = this.safeValue(this.options, 'editMarketBuyOrderRequiresPrice', true);\n if (editMarketBuyOrderRequiresPrice && isMarketOrder && (side === 'buy')) {\n if (price === undefined) {\n throw new InvalidParamsError('editOrder() requires price argument for market buy orders on spot markets to calculate the total amount to spend (amount * price), alternatively set the editMarketBuyOrderRequiresPrice option to false and pass in the cost to spend into the amount parameter')\n .exchange(this.id);\n }\n else {\n const amountString = this.numberToString(amount);\n const priceString = this.numberToString(price);\n const cost = this.parseNumber(Precise.stringMul(amountString, priceString));\n request['size'] = this.priceToPrecision(symbol, cost);\n }\n }\n else {\n request['size'] = this.amountToPrecision(symbol, amount);\n }\n request['orderType'] = type;\n request['triggerPrice'] = this.priceToPrecision(symbol, triggerPrice);\n request['executePrice'] = this.priceToPrecision(symbol, price);\n response = await this.privateSpotPostV2SpotTradeModifyPlanOrder(this.extend(request, params));\n }\n else {\n if ((!market['swap']) && (!market['future'])) {\n throw new MarketTypeNotSupportedError(market['type'])\n .addMessage('editOrder() does not support ' + market['type'] + ' orders')\n .exchange(this.id);\n }\n request['symbol'] = market['id'];\n let productType = undefined;\n [productType, params] = this.handleProductTypeAndParams(market, params);\n request['productType'] = productType;\n if (!isTakeProfitOrder && !isStopLossOrder) {\n request['newSize'] = this.amountToPrecision(symbol, amount);\n if ((price !== undefined) && !isTrailingPercentOrder) {\n request['newPrice'] = this.priceToPrecision(symbol, price);\n }\n }\n if (isTrailingPercentOrder) {\n if (!isMarketOrder) {\n throw new MarketTypeNotSupportedError(type)\n .addMessage('editOrder() bitget trailing orders must be market orders')\n .exchange(this.id);\n }\n if (trailingTriggerPrice !== undefined) {\n request['newTriggerPrice'] = this.priceToPrecision(symbol, trailingTriggerPrice);\n }\n request['newCallbackRatio'] = trailingPercent;\n response = await this.privateMixPostV2MixOrderModifyPlanOrder(this.extend(request, params));\n }\n else if (isTakeProfitOrder || isStopLossOrder) {\n request['marginCoin'] = market['settleId'];\n request['size'] = this.amountToPrecision(symbol, amount);\n request['executePrice'] = this.priceToPrecision(symbol, price);\n if (isStopLossOrder) {\n request['triggerPrice'] = this.priceToPrecision(symbol, stopLossPrice);\n }\n else if (isTakeProfitOrder) {\n request['triggerPrice'] = this.priceToPrecision(symbol, takeProfitPrice);\n }\n response = await this.privateMixPostV2MixOrderModifyTpslOrder(this.extend(request, params));\n }\n else if (isTriggerOrder) {\n request['newTriggerPrice'] = this.priceToPrecision(symbol, triggerPrice);\n if (isStopLoss) {\n const slTriggerPrice = this.safeNumber2(stopLoss, 'triggerPrice', 'stopPrice');\n request['newStopLossTriggerPrice'] = this.priceToPrecision(symbol, slTriggerPrice);\n const slPrice = this.safeNumber(stopLoss, 'price');\n request['newStopLossExecutePrice'] = this.priceToPrecision(symbol, slPrice);\n const slType = this.safeString(stopLoss, 'type', 'mark_price');\n request['newStopLossTriggerType'] = slType;\n }\n if (isTakeProfit) {\n const tpTriggerPrice = this.safeNumber2(takeProfit, 'triggerPrice', 'stopPrice');\n request['newSurplusTriggerPrice'] = this.priceToPrecision(symbol, tpTriggerPrice);\n const tpPrice = this.safeNumber(takeProfit, 'price');\n request['newStopSurplusExecutePrice'] = this.priceToPrecision(symbol, tpPrice);\n const tpType = this.safeString(takeProfit, 'type', 'mark_price');\n request['newStopSurplusTriggerType'] = tpType;\n }\n response = await this.privateMixPostV2MixOrderModifyPlanOrder(this.extend(request, params));\n }\n else {\n const defaultNewClientOrderId = this.uuid();\n const newClientOrderId = this.safeString2(params, 'newClientOid', 'newClientOrderId', defaultNewClientOrderId);\n params = this.omit(params, 'newClientOrderId');\n request['newClientOid'] = newClientOrderId;\n if (isStopLoss) {\n const slTriggerPrice = this.safeValue2(stopLoss, 'triggerPrice', 'stopPrice');\n request['newPresetStopLossPrice'] = this.priceToPrecision(symbol, slTriggerPrice);\n }\n if (isTakeProfit) {\n const tpTriggerPrice = this.safeValue2(takeProfit, 'triggerPrice', 'stopPrice');\n request['newPresetStopSurplusPrice'] = this.priceToPrecision(symbol, tpTriggerPrice);\n }\n response = await this.privateMixPostV2MixOrderModifyOrder(this.extend(request, params));\n }\n }\n //\n // {\n // \"code\": \"00000\",\n // \"msg\": \"success\",\n // \"requestTime\": 1700708275737,\n // \"data\": {\n // \"clientOid\": \"abe95dbe-6081-4a6f-a2d3-ae49601cd459\",\n // \"orderId\": null\n // }\n // }\n //\n const data = this.safeValue(response, 'data', {});\n return this.parseOrder(data, market);\n }\n async cancelOrder(id, symbol = undefined, params = {}) {\n /**\n * @method\n * @name bitget#cancelOrder\n * @description cancels an open order\n * @see https://www.bitget.com/api-doc/spot/trade/Cancel-Order\n * @see https://www.bitget.com/api-doc/spot/plan/Cancel-Plan-Order\n * @see https://www.bitget.com/api-doc/contract/trade/Cancel-Order\n * @see https://www.bitget.com/api-doc/contract/plan/Cancel-Plan-Order\n * @see https://www.bitget.com/api-doc/margin/cross/trade/Cross-Cancel-Order\n * @see https://www.bitget.com/api-doc/margin/isolated/trade/Isolated-Cancel-Order\n * @param {string} id order id\n * @param {string} symbol unified symbol of the market the order was made in\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {string} [params.marginMode] 'isolated' or 'cross' for spot margin trading\n * @param {boolean} [params.stop] set to true for canceling trigger orders\n * @param {string} [params.planType] *swap only* either profit_plan, loss_plan, normal_plan, pos_profit, pos_loss, moving_plan or track_plan\n * @param {boolean} [params.trailing] set to true if you want to cancel a trailing order\n * @returns {object} An [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n if (symbol === undefined) {\n throw new InvalidParamsError('cancelOrder() requires a symbol argument')\n .exchange(this.id);\n }\n await this.loadMarkets();\n const sandboxMode = this.safeValue(this.options, 'sandboxMode', false);\n let market = undefined;\n if (sandboxMode) {\n const sandboxSymbol = this.convertSymbolForSandbox(symbol);\n market = this.market(sandboxSymbol);\n }\n else {\n market = this.market(symbol);\n }\n let marginMode = undefined;\n let response = undefined;\n [marginMode, params] = this.handleMarginModeAndParams('cancelOrder', params);\n const request = {};\n const trailing = this.safeValue(params, 'trailing');\n const stop = this.safeValue2(params, 'stop', 'trigger');\n params = this.omit(params, ['stop', 'trigger', 'trailing']);\n if (!(market['spot'] && stop)) {\n request['symbol'] = market['id'];\n }\n if (!((market['swap'] || market['future']) && stop)) {\n request['orderId'] = id;\n }\n if ((market['swap']) || (market['future'])) {\n let productType = undefined;\n [productType, params] = this.handleProductTypeAndParams(market, params);\n request['productType'] = productType;\n if (stop || trailing) {\n const orderIdList = [];\n const orderId = {\n 'orderId': id,\n };\n orderIdList.push(orderId);\n request['orderIdList'] = orderIdList;\n }\n if (trailing) {\n const planType = this.safeString(params, 'planType', 'track_plan');\n request['planType'] = planType;\n response = await this.privateMixPostV2MixOrderCancelPlanOrder(this.extend(request, params));\n }\n else if (stop) {\n response = await this.privateMixPostV2MixOrderCancelPlanOrder(this.extend(request, params));\n }\n else {\n response = await this.privateMixPostV2MixOrderCancelOrder(this.extend(request, params));\n }\n }\n else if (market['spot']) {\n if (marginMode !== undefined) {\n if (marginMode === 'isolated') {\n response = await this.privateMarginPostV2MarginIsolatedCancelOrder(this.extend(request, params));\n }\n else if (marginMode === 'cross') {\n response = await this.privateMarginPostV2MarginCrossedCancelOrder(this.extend(request, params));\n }\n }\n else {\n if (stop) {\n response = await this.privateSpotPostV2SpotTradeCancelPlanOrder(this.extend(request, params));\n }\n else {\n response = await this.privateSpotPostV2SpotTradeCancelOrder(this.extend(request, params));\n }\n }\n }\n else {\n throw new MarketTypeNotSupportedError(market['type'])\n .addMessage('cancelOrder() does not support ' + market['type'] + ' orders')\n .exchange(this.id);\n }\n //\n // spot, swap, future and spot margin\n //\n // {\n // \"code\": \"00000\",\n // \"msg\": \"success\",\n // \"requestTime\": 1697690413177,\n // \"data\": {\n // \"orderId\": \"1098758604547850241\",\n // \"clientOid\": \"1098758604585598977\"\n // }\n // }\n //\n // swap trigger\n //\n // {\n // \"code\": \"00000\",\n // \"msg\": \"success\",\n // \"requestTime\": 1700711311791,\n // \"data\": {\n // \"successList\": [\n // {\n // \"clientOid\": \"1111428059067125760\",\n // \"orderId\": \"1111428059067125761\"\n // }\n // ],\n // \"failureList\": []\n // }\n // }\n //\n // spot trigger\n //\n // {\n // \"code\": \"00000\",\n // \"msg\": \"success\",\n // \"requestTime\": 1700711728063,\n // \"data\": {\n // \"result\": \"success\"\n // }\n // }\n //\n const data = this.safeValue(response, 'data', {});\n let order = undefined;\n if ((market['swap'] || market['future']) && stop) {\n const orderInfo = this.safeValue(data, 'successList', []);\n order = orderInfo[0];\n }\n else {\n order = data;\n }\n return this.parseOrder(order, market);\n }\n async cancelOrders(ids, symbol = undefined, params = {}) {\n /**\n * @method\n * @name bitget#cancelOrders\n * @description cancel multiple orders\n * @see https://www.bitget.com/api-doc/spot/trade/Batch-Cancel-Orders\n * @see https://www.bitget.com/api-doc/contract/trade/Batch-Cancel-Orders\n * @see https://www.bitget.com/api-doc/contract/plan/Cancel-Plan-Order\n * @see https://www.bitget.com/api-doc/margin/cross/trade/Cross-Batch-Cancel-Order\n * @see https://www.bitget.com/api-doc/margin/isolated/trade/Isolated-Batch-Cancel-Orders\n * @param {string[]} ids order ids\n * @param {string} symbol unified market symbol, default is undefined\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {string} [params.marginMode] 'isolated' or 'cross' for spot margin trading\n * @param {boolean} [params.stop] *contract only* set to true for canceling trigger orders\n * @returns {object} an array of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n if (symbol === undefined) {\n throw new InvalidParamsError('cancelOrders() requires a symbol argument')\n .exchange(this.id);\n }\n await this.loadMarkets();\n const sandboxMode = this.safeValue(this.options, 'sandboxMode', false);\n let market = undefined;\n if (sandboxMode) {\n const sandboxSymbol = this.convertSymbolForSandbox(symbol);\n market = this.market(sandboxSymbol);\n }\n else {\n market = this.market(symbol);\n }\n let marginMode = undefined;\n [marginMode, params] = this.handleMarginModeAndParams('cancelOrders', params);\n const stop = this.safeValue2(params, 'stop', 'trigger');\n params = this.omit(params, ['stop', 'trigger']);\n const orderIdList = [];\n for (let i = 0; i < ids.length; i++) {\n const individualId = ids[i];\n const orderId = {\n 'orderId': individualId,\n };\n orderIdList.push(orderId);\n }\n const request = {\n 'symbol': market['id'],\n };\n if (market['spot'] && (marginMode === undefined)) {\n request['orderList'] = orderIdList;\n }\n else {\n request['orderIdList'] = orderIdList;\n }\n let response = undefined;\n if (market['spot']) {\n if (marginMode !== undefined) {\n if (marginMode === 'cross') {\n response = await this.privateMarginPostV2MarginCrossedBatchCancelOrder(this.extend(request, params));\n }\n else {\n response = await this.privateMarginPostV2MarginIsolatedBatchCancelOrder(this.extend(request, params));\n }\n }\n else {\n response = await this.privateSpotPostV2SpotTradeBatchCancelOrder(this.extend(request, params));\n }\n }\n else {\n let productType = undefined;\n [productType, params] = this.handleProductTypeAndParams(market, params);\n request['productType'] = productType;\n if (stop) {\n response = await this.privateMixPostV2MixOrderCancelPlanOrder(this.extend(request, params));\n }\n else {\n response = await this.privateMixPostV2MixOrderBatchCancelOrders(this.extend(request, params));\n }\n }\n //\n // {\n // \"code\": \"00000\",\n // \"msg\": \"success\",\n // \"requestTime\": \"1680008815965\",\n // \"data\": {\n // \"successList\": [\n // {\n // \"orderId\": \"1024598257429823488\",\n // \"clientOid\": \"876493ce-c287-4bfc-9f4a-8b1905881313\"\n // },\n // ],\n // \"failureList\": []\n // }\n // }\n //\n const data = this.safeValue(response, 'data', {});\n const orders = this.safeValue(data, 'successList', []);\n return this.parseOrders(orders, market);\n }\n async cancelAllOrders(symbol = undefined, params = {}) {\n /**\n * @method\n * @name bitget#cancelAllOrders\n * @description cancel all open orders\n * @see https://www.bitget.com/api-doc/spot/trade/Cancel-Symbol-Orders\n * @see https://www.bitget.com/api-doc/contract/trade/Batch-Cancel-Orders\n * @see https://bitgetlimited.github.io/apidoc/en/margin/#isolated-batch-cancel-orders\n * @see https://bitgetlimited.github.io/apidoc/en/margin/#cross-batch-cancel-order\n * @param {string} symbol unified market symbol\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {string} [params.marginMode] 'isolated' or 'cross' for spot margin trading\n * @param {boolean} [params.stop] *contract only* set to true for canceling trigger orders\n * @returns {object[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n if (symbol === undefined) {\n throw new InvalidParamsError('cancelAllOrders() requires a symbol argument')\n .exchange(this.id);\n }\n await this.loadMarkets();\n const sandboxMode = this.safeValue(this.options, 'sandboxMode', false);\n let market = undefined;\n if (sandboxMode) {\n const sandboxSymbol = this.convertSymbolForSandbox(symbol);\n market = this.market(sandboxSymbol);\n }\n else {\n market = this.market(symbol);\n }\n let marginMode = undefined;\n [marginMode, params] = this.handleMarginModeAndParams('cancelAllOrders', params);\n const request = {\n 'symbol': market['id'],\n };\n const stop = this.safeValue2(params, 'stop', 'trigger');\n params = this.omit(params, ['stop', 'trigger']);\n let response = undefined;\n if (market['spot']) {\n if (marginMode !== undefined) {\n if (marginMode === 'cross') {\n response = await this.privateMarginPostMarginV1CrossOrderBatchCancelOrder(this.extend(request, params));\n }\n else {\n response = await this.privateMarginPostMarginV1IsolatedOrderBatchCancelOrder(this.extend(request, params));\n }\n }\n else {\n response = await this.privateSpotPostV2SpotTradeCancelSymbolOrder(this.extend(request, params));\n }\n }\n else {\n let productType = undefined;\n [productType, params] = this.handleProductTypeAndParams(market, params);\n request['productType'] = productType;\n if (stop) {\n response = await this.privateMixPostV2MixOrderCancelPlanOrder(this.extend(request, params));\n }\n else {\n response = await this.privateMixPostV2MixOrderBatchCancelOrders(this.extend(request, params));\n }\n }\n //\n // spot\n //\n // {\n // \"code\": \"00000\",\n // \"msg\": \"success\",\n // \"requestTime\": 1700716953996,\n // \"data\": {\n // \"symbol\": \"BTCUSDT\"\n // }\n // }\n //\n // swap\n //\n // {\n // \"code\": \"00000\",\n // \"msg\": \"success\",\n // \"requestTime\": \"1680008815965\",\n // \"data\": {\n // \"successList\": [\n // {\n // \"orderId\": \"1024598257429823488\",\n // \"clientOid\": \"876493ce-c287-4bfc-9f4a-8b1905881313\"\n // },\n // ],\n // \"failureList\": []\n // }\n // }\n //\n // spot margin\n //\n // {\n // \"code\": \"00000\",\n // \"msg\": \"success\",\n // \"requestTime\": 1700717155622,\n // \"data\": {\n // \"resultList\": [\n // {\n // \"orderId\": \"1111453253721796609\",\n // \"clientOid\": \"2ae7fc8a4ff949b6b60d770ca3950e2d\"\n // },\n // ],\n // \"failure\": []\n // }\n // }\n //\n return response;\n }\n async fetchOrder(id, symbol = undefined, params = {}) {\n /**\n * @method\n * @name bitget#fetchOrder\n * @description fetches information on an order made by the user\n * @see https://www.bitget.com/api-doc/spot/trade/Get-Order-Info\n * @see https://www.bitget.com/api-doc/contract/trade/Get-Order-Details\n * @param {string} symbol unified symbol of the market the order was made in\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} An [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n if (symbol === undefined) {\n throw new InvalidParamsError('fetchOrder() requires a symbol argument')\n .exchange(this.id);\n }\n await this.loadMarkets();\n const sandboxMode = this.safeValue(this.options, 'sandboxMode', false);\n let market = undefined;\n if (sandboxMode) {\n const sandboxSymbol = this.convertSymbolForSandbox(symbol);\n market = this.market(sandboxSymbol);\n }\n else {\n market = this.market(symbol);\n }\n const request = {\n 'orderId': id,\n };\n let response = undefined;\n if (market['spot']) {\n response = await this.privateSpotGetV2SpotTradeOrderInfo(this.extend(request, params));\n }\n else if (market['swap'] || market['future']) {\n request['symbol'] = market['id'];\n let productType = undefined;\n [productType, params] = this.handleProductTypeAndParams(market, params);\n request['productType'] = productType;\n response = await this.privateMixGetV2MixOrderDetail(this.extend(request, params));\n }\n else {\n throw new MarketTypeNotSupportedError(market['type'])\n .addMessage('fetchOrder() does not support ' + market['type'] + ' orders')\n .exchange(this.id);\n }\n //\n // spot\n //\n // {\n // \"code\": \"00000\",\n // \"msg\": \"success\",\n // \"requestTime\": 1700719076263,\n // \"data\": [\n // {\n // \"userId\": \"7264631750\",\n // \"symbol\": \"BTCUSDT\",\n // \"orderId\": \"1111461743123927040\",\n // \"clientOid\": \"63f95110-93b5-4309-8f77-46339f1bcf3c\",\n // \"price\": \"25000.0000000000000000\",\n // \"size\": \"0.0002000000000000\",\n // \"orderType\": \"limit\",\n // \"side\": \"buy\",\n // \"status\": \"live\",\n // \"priceAvg\": \"0\",\n // \"baseVolume\": \"0.0000000000000000\",\n // \"quoteVolume\": \"0.0000000000000000\",\n // \"enterPointSource\": \"API\",\n // \"feeDetail\": \"\",\n // \"orderSource\": \"normal\",\n // \"cTime\": \"1700719050198\",\n // \"uTime\": \"1700719050198\"\n // }\n // ]\n // }\n //\n // swap and future\n //\n // {\n // \"code\": \"00000\",\n // \"msg\": \"success\",\n // \"requestTime\": 1700719918781,\n // \"data\": {\n // \"symbol\": \"BTCUSDT\",\n // \"size\": \"0.001\",\n // \"orderId\": \"1111465253393825792\",\n // \"clientOid\": \"1111465253431574529\",\n // \"baseVolume\": \"0\",\n // \"fee\": \"0\",\n // \"price\": \"27000\",\n // \"priceAvg\": \"\",\n // \"state\": \"live\",\n // \"side\": \"buy\",\n // \"force\": \"gtc\",\n // \"totalProfits\": \"0\",\n // \"posSide\": \"long\",\n // \"marginCoin\": \"USDT\",\n // \"presetStopSurplusPrice\": \"\",\n // \"presetStopLossPrice\": \"\",\n // \"quoteVolume\": \"0\",\n // \"orderType\": \"limit\",\n // \"leverage\": \"20\",\n // \"marginMode\": \"crossed\",\n // \"reduceOnly\": \"NO\",\n // \"enterPointSource\": \"API\",\n // \"tradeSide\": \"open\",\n // \"posMode\": \"hedge_mode\",\n // \"orderSource\": \"normal\",\n // \"cTime\": \"1700719887120\",\n // \"uTime\": \"1700719887120\"\n // }\n // }\n //\n if (typeof response === 'string') {\n response = JSON.parse(response);\n }\n const data = this.safeValue(response, 'data');\n const first = this.safeValue(data, 0, data);\n return this.parseOrder(first, market);\n }\n async fetchOpenOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name bitget#fetchOpenOrders\n * @description fetch all unfilled currently open orders\n * @see https://www.bitget.com/api-doc/spot/trade/Get-Unfilled-Orders\n * @see https://www.bitget.com/api-doc/spot/plan/Get-Current-Plan-Order\n * @see https://www.bitget.com/api-doc/contract/trade/Get-Orders-Pending\n * @see https://www.bitget.com/api-doc/contract/plan/get-orders-plan-pending\n * @see https://www.bitget.com/api-doc/margin/cross/trade/Get-Cross-Open-Orders\n * @see https://www.bitget.com/api-doc/margin/isolated/trade/Isolated-Open-Orders\n * @param {string} symbol unified market symbol\n * @param {int} [since] the earliest time in ms to fetch open orders for\n * @param {int} [limit] the maximum number of open order structures to retrieve\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {int} [params.until] the latest time in ms to fetch orders for\n * @param {string} [params.planType] *contract stop only* 'normal_plan': average trigger order, 'track_plan': trailing stop order, default is 'normal_plan'\n * @param {boolean} [params.stop] set to true for fetching trigger orders\n * @param {boolean} [params.paginate] default false, when true will automatically paginate by calling this endpoint multiple times. See in the docs all the [available parameters](https://github.com/ccxt/ccxt/wiki/Manual#pagination-params)\n * @param {string} [params.isPlan] *swap only* 'plan' for stop orders and 'profit_loss' for tp/sl orders, default is 'plan'\n * @param {boolean} [params.trailing] set to true if you want to fetch trailing orders\n * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n await this.loadMarkets();\n const sandboxMode = this.safeValue(this.options, 'sandboxMode', false);\n let market = undefined;\n let type = undefined;\n let request = {};\n let marginMode = undefined;\n [marginMode, params] = this.handleMarginModeAndParams('fetchOpenOrders', params);\n if (symbol !== undefined) {\n if (sandboxMode) {\n const sandboxSymbol = this.convertSymbolForSandbox(symbol);\n market = this.market(sandboxSymbol);\n }\n else {\n market = this.market(symbol);\n }\n request['symbol'] = market['id'];\n const defaultType = this.safeString2(this.options, 'fetchOpenOrders', 'defaultType', 'spot');\n const marketType = ('type' in market) ? market['type'] : defaultType;\n type = this.safeString(params, 'type', marketType);\n }\n else {\n const defaultType = this.safeString2(this.options, 'fetchOpenOrders', 'defaultType', 'spot');\n type = this.safeString(params, 'type', defaultType);\n }\n let paginate = false;\n [paginate, params] = this.handleOptionAndParams(params, 'fetchOpenOrders', 'paginate');\n if (paginate) {\n let cursorReceived = undefined;\n if (type === 'spot') {\n if (marginMode !== undefined) {\n cursorReceived = 'minId';\n }\n }\n else {\n cursorReceived = 'endId';\n }\n return await this.fetchPaginatedCallCursor('fetchOpenOrders', symbol, since, limit, params, cursorReceived, 'idLessThan');\n }\n let response = undefined;\n const trailing = this.safeValue(params, 'trailing');\n const stop = this.safeValue2(params, 'stop', 'trigger');\n params = this.omit(params, ['stop', 'trigger', 'trailing']);\n [request, params] = this.handleUntilOption('endTime', request, params);\n if (since !== undefined) {\n request['startTime'] = since;\n }\n if (limit !== undefined) {\n request['limit'] = limit;\n }\n if ((type === 'swap') || (type === 'future') || (marginMode !== undefined)) {\n const clientOrderId = this.safeString2(params, 'clientOid', 'clientOrderId');\n params = this.omit(params, 'clientOrderId');\n if (clientOrderId !== undefined) {\n request['clientOid'] = clientOrderId;\n }\n }\n let query = undefined;\n query = this.omit(params, ['type']);\n if (type === 'spot') {\n if (marginMode !== undefined) {\n if (since === undefined) {\n since = this.milliseconds() - 7776000000;\n request['startTime'] = since;\n }\n if (marginMode === 'isolated') {\n response = await this.privateMarginGetV2MarginIsolatedOpenOrders(this.extend(request, query));\n }\n else if (marginMode === 'cross') {\n response = await this.privateMarginGetV2MarginCrossedOpenOrders(this.extend(request, query));\n }\n }\n else {\n if (stop) {\n response = await this.privateSpotGetV2SpotTradeCurrentPlanOrder(this.extend(request, query));\n }\n else {\n response = await this.privateSpotGetV2SpotTradeUnfilledOrders(this.extend(request, query));\n }\n }\n }\n else {\n let productType = undefined;\n [productType, query] = this.handleProductTypeAndParams(market, query);\n request['productType'] = productType;\n if (trailing) {\n const planType = this.safeString(params, 'planType', 'track_plan');\n request['planType'] = planType;\n response = await this.privateMixGetV2MixOrderOrdersPlanPending(this.extend(request, query));\n }\n else if (stop) {\n const planType = this.safeString(query, 'planType', 'normal_plan');\n request['planType'] = planType;\n response = await this.privateMixGetV2MixOrderOrdersPlanPending(this.extend(request, query));\n }\n else {\n response = await this.privateMixGetV2MixOrderOrdersPending(this.extend(request, query));\n }\n }\n //\n // spot\n //\n // {\n // \"code\": \"00000\",\n // \"msg\": \"success\",\n // \"requestTime\": 1700728123994,\n // \"data\": [\n // {\n // \"userId\": \"7264631750\",\n // \"symbol\": \"BTCUSDT\",\n // \"orderId\": \"1111499608327360513\",\n // \"clientOid\": \"d0d4dad5-18d0-4869-a074-ec40bb47cba6\",\n // \"priceAvg\": \"25000.0000000000000000\",\n // \"size\": \"0.0002000000000000\",\n // \"orderType\": \"limit\",\n // \"side\": \"buy\",\n // \"status\": \"live\",\n // \"basePrice\": \"0\",\n // \"baseVolume\": \"0.0000000000000000\",\n // \"quoteVolume\": \"0.0000000000000000\",\n // \"enterPointSource\": \"WEB\",\n // \"orderSource\": \"normal\",\n // \"cTime\": \"1700728077966\",\n // \"uTime\": \"1700728077966\"\n // }\n // ]\n // }\n //\n // spot stop\n //\n // {\n // \"code\": \"00000\",\n // \"msg\": \"success\",\n // \"requestTime\": 1700729361609,\n // \"data\": {\n // \"nextFlag\": false,\n // \"idLessThan\": \"1111503385931620352\",\n // \"orderList\": [\n // {\n // \"orderId\": \"1111503385931620352\",\n // \"clientOid\": \"1111503385910648832\",\n // \"symbol\": \"BTCUSDT\",\n // \"size\": \"0.0002\",\n // \"planType\": \"AMOUNT\",\n // \"executePrice\": \"25000\",\n // \"triggerPrice\": \"26000\",\n // \"status\": \"live\",\n // \"orderType\": \"limit\",\n // \"side\": \"buy\",\n // \"triggerType\": \"fill_price\",\n // \"enterPointSource\": \"API\",\n // \"cTime\": \"1700728978617\",\n // \"uTime\": \"1700728978617\"\n // }\n // ]\n // }\n // }\n //\n // spot margin\n //\n // {\n // \"code\": \"00000\",\n // \"msg\": \"success\",\n // \"requestTime\": 1700729887686,\n // \"data\": {\n // \"orderList\": [\n // {\n // \"symbol\": \"BTCUSDT\",\n // \"orderType\": \"limit\",\n // \"enterPointSource\": \"WEB\",\n // \"orderId\": \"1111506377509580801\",\n // \"clientOid\": \"2043a3b59a60445f9d9f7365bf3e960c\",\n // \"loanType\": \"autoLoanAndRepay\",\n // \"price\": \"25000\",\n // \"side\": \"buy\",\n // \"status\": \"live\",\n // \"baseSize\": \"0.0002\",\n // \"quoteSize\": \"5\",\n // \"priceAvg\": \"0\",\n // \"size\": \"0\",\n // \"amount\": \"0\",\n // \"force\": \"gtc\",\n // \"cTime\": \"1700729691866\",\n // \"uTime\": \"1700729691866\"\n // }\n // ],\n // \"maxId\": \"1111506377509580801\",\n // \"minId\": \"1111506377509580801\"\n // }\n // }\n //\n // swap and future\n //\n // {\n // \"code\": \"00000\",\n // \"msg\": \"success\",\n // \"requestTime\": 1700725609065,\n // \"data\": {\n // \"entrustedList\": [\n // {\n // \"symbol\": \"BTCUSDT\",\n // \"size\": \"0.002\",\n // \"orderId\": \"1111488897767604224\",\n // \"clientOid\": \"1111488897805352960\",\n // \"baseVolume\": \"0\",\n // \"fee\": \"0\",\n // \"price\": \"25000\",\n // \"priceAvg\": \"\",\n // \"status\": \"live\",\n // \"side\": \"buy\",\n // \"force\": \"gtc\",\n // \"totalProfits\": \"0\",\n // \"posSide\": \"long\",\n // \"marginCoin\": \"USDT\",\n // \"quoteVolume\": \"0\",\n // \"leverage\": \"20\",\n // \"marginMode\": \"crossed\",\n // \"enterPointSource\": \"web\",\n // \"tradeSide\": \"open\",\n // \"posMode\": \"hedge_mode\",\n // \"orderType\": \"limit\",\n // \"orderSource\": \"normal\",\n // \"presetStopSurplusPrice\": \"\",\n // \"presetStopLossPrice\": \"\",\n // \"reduceOnly\": \"NO\",\n // \"cTime\": \"1700725524378\",\n // \"uTime\": \"1700725524378\"\n // }\n // ],\n // \"endId\": \"1111488897767604224\"\n // }\n // }\n //\n // swap and future stop\n //\n // {\n // \"code\": \"00000\",\\\n // \"msg\": \"success\",\n // \"requestTime\": 1700726417495,\n // \"data\": {\n // \"entrustedList\": [\n // {\n // \"planType\": \"normal_plan\",\n // \"symbol\": \"BTCUSDT\",\n // \"size\": \"0.001\",\n // \"orderId\": \"1111491399869075457\",\n // \"clientOid\": \"1111491399869075456\",\n // \"price\": \"27000\",\n // \"callbackRatio\": \"\",\n // \"triggerPrice\": \"24000\",\n // \"triggerType\": \"mark_price\",\n // \"planStatus\": \"live\",\n // \"side\": \"buy\",\n // \"posSide\": \"long\",\n // \"marginCoin\": \"USDT\",\n // \"marginMode\": \"crossed\",\n // \"enterPointSource\": \"API\",\n // \"tradeSide\": \"open\",\n // \"posMode\": \"hedge_mode\",\n // \"orderType\": \"limit\",\n // \"stopSurplusTriggerPrice\": \"\",\n // \"stopSurplusExecutePrice\": \"\",\n // \"stopSurplusTriggerType\": \"fill_price\",\n // \"stopLossTriggerPrice\": \"\",\n // \"stopLossExecutePrice\": \"\",\n // \"stopLossTriggerType\": \"fill_price\",\n // \"cTime\": \"1700726120917\",\n // \"uTime\": \"1700726120917\"\n // }\n // ],\n // \"endId\": \"1111491399869075457\"\n // }\n // }\n //\n const data = this.safeValue(response, 'data');\n if (type === 'spot') {\n if ((marginMode !== undefined) || stop) {\n const resultList = this.safeValue(data, 'orderList', []);\n return this.parseOrders(resultList, market, since, limit);\n }\n }\n else {\n const result = this.safeValue(data, 'entrustedList', []);\n return this.parseOrders(result, market, since, limit);\n }\n return this.parseOrders(data, market, since, limit);\n }\n async fetchClosedOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name bitget#fetchClosedOrders\n * @description fetches information on multiple closed orders made by the user\n * @see https://www.bitget.com/api-doc/spot/trade/Get-History-Orders\n * @see https://www.bitget.com/api-doc/spot/plan/Get-History-Plan-Order\n * @see https://www.bitget.com/api-doc/contract/trade/Get-Orders-History\n * @see https://www.bitget.com/api-doc/contract/plan/orders-plan-history\n * @see https://www.bitget.com/api-doc/margin/cross/trade/Get-Cross-Order-History\n * @see https://www.bitget.com/api-doc/margin/isolated/trade/Get-Isolated-Order-History\n * @param {string} symbol unified market symbol of the closed orders\n * @param {int} [since] timestamp in ms of the earliest order\n * @param {int} [limit] the max number of closed orders to return\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {int} [params.until] the latest time in ms to fetch entries for\n * @param {boolean} [params.paginate] default false, when true will automatically paginate by calling this endpoint multiple times. See in the docs all the [available parameters](https://github.com/ccxt/ccxt/wiki/Manual#pagination-params)\n * @param {string} [params.isPlan] *swap only* 'plan' for stop orders and 'profit_loss' for tp/sl orders, default is 'plan'\n * @param {string} [params.productType] *contract only* 'USDT-FUTURES', 'USDC-FUTURES', 'COIN-FUTURES', 'SUSDT-FUTURES', 'SUSDC-FUTURES' or 'SCOIN-FUTURES'\n * @param {boolean} [params.trailing] set to true if you want to fetch trailing orders\n * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n await this.loadMarkets();\n const orders = await this.fetchCanceledAndClosedOrders(symbol, since, limit, params);\n return this.filterBy(orders, 'status', 'closed');\n }\n async fetchCanceledOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name bitget#fetchCanceledOrders\n * @description fetches information on multiple canceled orders made by the user\n * @see https://www.bitget.com/api-doc/spot/trade/Get-History-Orders\n * @see https://www.bitget.com/api-doc/spot/plan/Get-History-Plan-Order\n * @see https://www.bitget.com/api-doc/contract/trade/Get-Orders-History\n * @see https://www.bitget.com/api-doc/contract/plan/orders-plan-history\n * @see https://www.bitget.com/api-doc/margin/cross/trade/Get-Cross-Order-History\n * @see https://www.bitget.com/api-doc/margin/isolated/trade/Get-Isolated-Order-History\n * @param {string} symbol unified market symbol of the canceled orders\n * @param {int} [since] timestamp in ms of the earliest order\n * @param {int} [limit] the max number of canceled orders to return\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {int} [params.until] the latest time in ms to fetch entries for\n * @param {boolean} [params.paginate] default false, when true will automatically paginate by calling this endpoint multiple times. See in the docs all the [available parameters](https://github.com/ccxt/ccxt/wiki/Manual#pagination-params)\n * @param {string} [params.isPlan] *swap only* 'plan' for stop orders and 'profit_loss' for tp/sl orders, default is 'plan'\n * @param {string} [params.productType] *contract only* 'USDT-FUTURES', 'USDC-FUTURES', 'COIN-FUTURES', 'SUSDT-FUTURES', 'SUSDC-FUTURES' or 'SCOIN-FUTURES'\n * @param {boolean} [params.trailing] set to true if you want to fetch trailing orders\n * @returns {object} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n await this.loadMarkets();\n const orders = await this.fetchCanceledAndClosedOrders(symbol, since, limit, params);\n return this.filterBy(orders, 'status', 'canceled');\n }\n async fetchCanceledAndClosedOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name bitget#fetchCanceledAndClosedOrders\n * @see https://www.bitget.com/api-doc/spot/trade/Get-History-Orders\n * @see https://www.bitget.com/api-doc/spot/plan/Get-History-Plan-Order\n * @see https://www.bitget.com/api-doc/contract/trade/Get-Orders-History\n * @see https://www.bitget.com/api-doc/contract/plan/orders-plan-history\n * @see https://www.bitget.com/api-doc/margin/cross/trade/Get-Cross-Order-History\n * @see https://www.bitget.com/api-doc/margin/isolated/trade/Get-Isolated-Order-History\n * @description fetches information on multiple canceled and closed orders made by the user\n * @param {string} symbol unified market symbol of the market orders were made in\n * @param {int} [since] the earliest time in ms to fetch orders for\n * @param {int} [limit] the maximum number of order structures to retrieve\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n await this.loadMarkets();\n const sandboxMode = this.safeValue(this.options, 'sandboxMode', false);\n let market = undefined;\n if (sandboxMode) {\n if (symbol !== undefined) {\n const sandboxSymbol = this.convertSymbolForSandbox(symbol);\n symbol = sandboxSymbol;\n }\n }\n let request = {};\n if (symbol !== undefined) {\n market = this.market(symbol);\n request['symbol'] = market['id'];\n }\n let marketType = undefined;\n [marketType, params] = this.handleMarketTypeAndParams('fetchCanceledAndClosedOrders', market, params);\n let marginMode = undefined;\n [marginMode, params] = this.handleMarginModeAndParams('fetchCanceledAndClosedOrders', params);\n let paginate = false;\n [paginate, params] = this.handleOptionAndParams(params, 'fetchCanceledAndClosedOrders', 'paginate');\n if (paginate) {\n let cursorReceived = undefined;\n if (marketType === 'spot') {\n if (marginMode !== undefined) {\n cursorReceived = 'minId';\n }\n }\n else {\n cursorReceived = 'endId';\n }\n return await this.fetchPaginatedCallCursor('fetchCanceledAndClosedOrders', symbol, since, limit, params, cursorReceived, 'idLessThan');\n }\n let response = undefined;\n const trailing = this.safeValue(params, 'trailing');\n const stop = this.safeValue2(params, 'stop', 'trigger');\n params = this.omit(params, ['stop', 'trigger', 'trailing']);\n [request, params] = this.handleUntilOption('endTime', request, params);\n if (since !== undefined) {\n request['startTime'] = since;\n }\n if (limit !== undefined) {\n request['limit'] = limit;\n }\n if ((marketType === 'swap') || (marketType === 'future') || (marginMode !== undefined)) {\n const clientOrderId = this.safeString2(params, 'clientOid', 'clientOrderId');\n params = this.omit(params, 'clientOrderId');\n if (clientOrderId !== undefined) {\n request['clientOid'] = clientOrderId;\n }\n }\n const now = this.milliseconds();\n if (marketType === 'spot') {\n if (marginMode !== undefined) {\n if (since === undefined) {\n since = now - 7776000000;\n request['startTime'] = since;\n }\n if (marginMode === 'isolated') {\n response = await this.privateMarginGetV2MarginIsolatedHistoryOrders(this.extend(request, params));\n }\n else if (marginMode === 'cross') {\n response = await this.privateMarginGetV2MarginCrossedHistoryOrders(this.extend(request, params));\n }\n }\n else {\n if (stop) {\n if (symbol === undefined) {\n throw new InvalidParamsError('fetchCanceledAndClosedOrders() requires a symbol argument')\n .exchange(this.id);\n }\n const endTime = this.safeIntegerN(params, ['endTime', 'until', 'till']);\n params = this.omit(params, ['until', 'till']);\n if (since === undefined) {\n since = now - 7776000000;\n request['startTime'] = since;\n }\n if (endTime === undefined) {\n request['endTime'] = now;\n }\n response = await this.privateSpotGetV2SpotTradeHistoryPlanOrder(this.extend(request, params));\n }\n else {\n response = await this.privateSpotGetV2SpotTradeHistoryOrders(this.extend(request, params));\n }\n }\n }\n else {\n let productType = undefined;\n [productType, params] = this.handleProductTypeAndParams(market, params);\n request['productType'] = productType;\n if (trailing) {\n const planType = this.safeString(params, 'planType', 'track_plan');\n request['planType'] = planType;\n response = await this.privateMixGetV2MixOrderOrdersPlanHistory(this.extend(request, params));\n }\n else if (stop) {\n const planType = this.safeString(params, 'planType', 'normal_plan');\n request['planType'] = planType;\n response = await this.privateMixGetV2MixOrderOrdersPlanHistory(this.extend(request, params));\n }\n else {\n response = await this.privateMixGetV2MixOrderOrdersHistory(this.extend(request, params));\n }\n }\n //\n // spot\n //\n // {\n // \"code\": \"00000\",\n // \"msg\": \"success\",\n // \"requestTime\": 1700791085380,\n // \"data\": [\n // {\n // \"userId\": \"7264631750\",\n // \"symbol\": \"BTCUSDT\",\n // \"orderId\": \"1111499608327360513\",\n // \"clientOid\": \"d0d4dad5-18d0-4869-a074-ec40bb47cba6\",\n // \"price\": \"25000.0000000000000000\",\n // \"size\": \"0.0002000000000000\",\n // \"orderType\": \"limit\",\n // \"side\": \"buy\",\n // \"status\": \"cancelled\",\n // \"priceAvg\": \"0\",\n // \"baseVolume\": \"0.0000000000000000\",\n // \"quoteVolume\": \"0.0000000000000000\",\n // \"enterPointSource\": \"WEB\",\n // \"feeDetail\": \"\",\n // \"orderSource\": \"normal\",\n // \"cTime\": \"1700728077966\",\n // \"uTime\": \"1700728911471\"\n // },\n // ]\n // }\n //\n // spot stop\n //\n // {\n // \"code\": \"00000\",\n // \"msg\": \"success\",\n // \"requestTime\": 1700792099146,\n // \"data\": {\n // \"nextFlag\": false,\n // \"idLessThan\": \"1098757597417775104\",\n // \"orderList\": [\n // {\n // \"orderId\": \"1111503385931620352\",\n // \"clientOid\": \"1111503385910648832\",\n // \"symbol\": \"BTCUSDT\",\n // \"size\": \"0.0002\",\n // \"planType\": \"AMOUNT\",\n // \"executePrice\": \"25000\",\n // \"triggerPrice\": \"26000\",\n // \"status\": \"cancelled\",\n // \"orderType\": \"limit\",\n // \"side\": \"buy\",\n // \"triggerType\": \"fill_price\",\n // \"enterPointSource\": \"API\",\n // \"cTime\": \"1700728978617\",\n // \"uTime\": \"1700729666868\"\n // },\n // ]\n // }\n // }\n //\n // spot margin\n //\n // {\n // \"code\": \"00000\",\n // \"msg\": \"success\",\n // \"requestTime\": 1700792381435,\n // \"data\": {\n // \"orderList\": [\n // {\n // \"symbol\": \"BTCUSDT\",\n // \"orderType\": \"limit\",\n // \"enterPointSource\": \"WEB\",\n // \"orderId\": \"1111456274707001345\",\n // \"clientOid\": \"41e428dd305a4f668671b7f1ed00dc50\",\n // \"loanType\": \"autoLoanAndRepay\",\n // \"price\": \"27000\",\n // \"side\": \"buy\",\n // \"status\": \"cancelled\",\n // \"baseSize\": \"0.0002\",\n // \"quoteSize\": \"5.4\",\n // \"priceAvg\": \"0\",\n // \"size\": \"0\",\n // \"amount\": \"0\",\n // \"force\": \"gtc\",\n // \"cTime\": \"1700717746427\",\n // \"uTime\": \"1700717780636\"\n // },\n // ],\n // \"maxId\": \"1111456274707001345\",\n // \"minId\": \"1098396464990269440\"\n // }\n // }\n //\n // swap and future\n //\n // {\n // \"code\": \"00000\",\n // \"msg\": \"success\",\n // \"requestTime\": 1700792674673,\n // \"data\": {\n // \"entrustedList\": [\n // {\n // \"symbol\": \"BTCUSDT\",\n // \"size\": \"0.002\",\n // \"orderId\": \"1111498800817143808\",\n // \"clientOid\": \"1111498800850698240\",\n // \"baseVolume\": \"0\",\n // \"fee\": \"0\",\n // \"price\": \"25000\",\n // \"priceAvg\": \"\",\n // \"status\": \"canceled\",\n // \"side\": \"buy\",\n // \"force\": \"gtc\",\n // \"totalProfits\": \"0\",\n // \"posSide\": \"long\",\n // \"marginCoin\": \"USDT\",\n // \"quoteVolume\": \"0\",\n // \"leverage\": \"20\",\n // \"marginMode\": \"crossed\",\n // \"enterPointSource\": \"web\",\n // \"tradeSide\": \"open\",\n // \"posMode\": \"hedge_mode\",\n // \"orderType\": \"limit\",\n // \"orderSource\": \"normal\",\n // \"presetStopSurplusPrice\": \"\",\n // \"presetStopLossPrice\": \"\",\n // \"reduceOnly\": \"NO\",\n // \"cTime\": \"1700727885449\",\n // \"uTime\": \"1700727944563\"\n // },\n // ],\n // \"endId\": \"1098397008323575809\"\n // }\n // }\n //\n // swap and future stop\n //\n // {\n // \"code\": \"00000\",\n // \"msg\": \"success\",\n // \"requestTime\": 1700792938359,\n // \"data\": {\n // \"entrustedList\": [\n // {\n // \"planType\": \"normal_plan\",\n // \"symbol\": \"BTCUSDT\",\n // \"size\": \"0.001\",\n // \"orderId\": \"1111491399869075457\",\n // \"clientOid\": \"1111491399869075456\",\n // \"planStatus\": \"cancelled\",\n // \"price\": \"27000\",\n // \"feeDetail\": null,\n // \"baseVolume\": \"0\",\n // \"callbackRatio\": \"\",\n // \"triggerPrice\": \"24000\",\n // \"triggerType\": \"mark_price\",\n // \"side\": \"buy\",\n // \"posSide\": \"long\",\n // \"marginCoin\": \"USDT\",\n // \"marginMode\": \"crossed\",\n // \"enterPointSource\": \"API\",\n // \"tradeSide\": \"open\",\n // \"posMode\": \"hedge_mode\",\n // \"orderType\": \"limit\",\n // \"stopSurplusTriggerPrice\": \"\",\n // \"stopSurplusExecutePrice\": \"\",\n // \"stopSurplusTriggerType\": \"fill_price\",\n // \"stopLossTriggerPrice\": \"\",\n // \"stopLossExecutePrice\": \"\",\n // \"stopLossTriggerType\": \"fill_price\",\n // \"cTime\": \"1700726120917\",\n // \"uTime\": \"1700727879652\"\n // },\n // ],\n // \"endId\": \"1098760007867502593\"\n // }\n // }\n //\n const data = this.safeValue(response, 'data', {});\n if (marketType === 'spot') {\n if ((marginMode !== undefined) || stop) {\n return this.parseOrders(this.safeValue(data, 'orderList', []), market, since, limit);\n }\n }\n else {\n return this.parseOrders(this.safeValue(data, 'entrustedList', []), market, since, limit);\n }\n if (typeof response === 'string') {\n response = JSON.parse(response);\n }\n const orders = this.safeValue(response, 'data', []);\n return this.parseOrders(orders, market, since, limit);\n }\n async fetchLedger(code = undefined, since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name bitget#fetchLedger\n * @see https://www.bitget.com/api-doc/spot/account/Get-Account-Bills\n * @see https://www.bitget.com/api-doc/contract/account/Get-Account-Bill\n * @description fetch the history of changes, actions done by the user or operations that altered balance of the user\n * @param {string} code unified currency code, default is undefined\n * @param {int} [since] timestamp in ms of the earliest ledger entry, default is undefined\n * @param {int} [limit] max number of ledger entrys to return, default is undefined\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {int} [params.until] end time in ms\n * @param {string} [params.symbol] *contract only* unified market symbol\n * @param {string} [params.productType] *contract only* 'USDT-FUTURES', 'USDC-FUTURES', 'COIN-FUTURES', 'SUSDT-FUTURES', 'SUSDC-FUTURES' or 'SCOIN-FUTURES'\n * @param {boolean} [params.paginate] default false, when true will automatically paginate by calling this endpoint multiple times. See in the docs all the [available parameters](https://github.com/ccxt/ccxt/wiki/Manual#pagination-params)\n * @returns {object} a [ledger structure]{@link https://docs.ccxt.com/#/?id=ledger-structure}\n */\n await this.loadMarkets();\n const symbol = this.safeString(params, 'symbol');\n params = this.omit(params, 'symbol');\n let market = undefined;\n if (symbol !== undefined) {\n const sandboxMode = this.safeValue(this.options, 'sandboxMode', false);\n if (sandboxMode) {\n const sandboxSymbol = this.convertSymbolForSandbox(symbol);\n market = this.market(sandboxSymbol);\n }\n else {\n market = this.market(symbol);\n }\n }\n let marketType = undefined;\n [marketType, params] = this.handleMarketTypeAndParams('fetchLedger', market, params);\n let paginate = false;\n [paginate, params] = this.handleOptionAndParams(params, 'fetchLedger', 'paginate');\n if (paginate) {\n let cursorReceived = undefined;\n if (marketType !== 'spot') {\n cursorReceived = 'endId';\n }\n return await this.fetchPaginatedCallCursor('fetchLedger', symbol, since, limit, params, cursorReceived, 'idLessThan');\n }\n let currency = undefined;\n let request = {};\n if (code !== undefined) {\n currency = this.currency(code);\n request['coin'] = currency['code'];\n }\n [request, params] = this.handleUntilOption('endTime', request, params);\n if (since !== undefined) {\n request['startTime'] = since;\n }\n if (limit !== undefined) {\n request['limit'] = limit;\n }\n let response = undefined;\n if (marketType === 'spot') {\n response = await this.privateSpotGetV2SpotAccountBills(this.extend(request, params));\n }\n else {\n if (symbol !== undefined) {\n request['symbol'] = market['id'];\n }\n let productType = undefined;\n [productType, params] = this.handleProductTypeAndParams(market, params);\n request['productType'] = productType;\n response = await this.privateMixGetV2MixAccountBill(this.extend(request, params));\n }\n //\n // spot\n //\n // {\n // \"code\": \"00000\",\n // \"msg\": \"success\",\n // \"requestTime\": 1700795836415,\n // \"data\": [\n // {\n // \"billId\": \"1111506298997215233\",\n // \"coin\": \"USDT\",\n // \"groupType\": \"transfer\",\n // \"businessType\": \"transfer_out\",\n // \"size\": \"-11.64958799\",\n // \"balance\": \"0.00000000\",\n // \"fees\": \"0.00000000\",\n // \"cTime\": \"1700729673028\"\n // },\n // ]\n // }\n //\n // swap and future\n //\n // {\n // \"code\": \"00000\",\n // \"msg\": \"success\",\n // \"requestTime\": 1700795977890,\n // \"data\": {\n // \"bills\": [\n // {\n // \"billId\": \"1111499428100472833\",\n // \"symbol\": \"\",\n // \"amount\": \"-11.64958799\",\n // \"fee\": \"0\",\n // \"feeByCoupon\": \"\",\n // \"businessType\": \"trans_to_exchange\",\n // \"coin\": \"USDT\",\n // \"cTime\": \"1700728034996\"\n // },\n // ],\n // \"endId\": \"1098396773329305606\"\n // }\n // }\n //\n const data = this.safeValue(response, 'data');\n if ((marketType === 'swap') || (marketType === 'future')) {\n const bills = this.safeValue(data, 'bills', []);\n return this.parseLedger(bills, currency, since, limit);\n }\n return this.parseLedger(data, currency, since, limit);\n }\n parseLedgerEntry(item, currency = undefined) {\n //\n // spot\n //\n // {\n // \"billId\": \"1111506298997215233\",\n // \"coin\": \"USDT\",\n // \"groupType\": \"transfer\",\n // \"businessType\": \"transfer_out\",\n // \"size\": \"-11.64958799\",\n // \"balance\": \"0.00000000\",\n // \"fees\": \"0.00000000\",\n // \"cTime\": \"1700729673028\"\n // }\n //\n // swap and future\n //\n // {\n // \"billId\": \"1111499428100472833\",\n // \"symbol\": \"\",\n // \"amount\": \"-11.64958799\",\n // \"fee\": \"0\",\n // \"feeByCoupon\": \"\",\n // \"businessType\": \"trans_to_exchange\",\n // \"coin\": \"USDT\",\n // \"cTime\": \"1700728034996\"\n // }\n //\n const currencyId = this.safeString(item, 'coin');\n const code = this.safeCurrencyCode(currencyId, currency);\n const timestamp = this.safeInteger(item, 'cTime');\n const after = this.safeNumber(item, 'balance');\n const fee = this.safeNumber2(item, 'fees', 'fee');\n const amountRaw = this.safeString2(item, 'size', 'amount');\n const amount = this.parseNumber(Precise.stringAbs(amountRaw));\n let direction = 'in';\n if (amountRaw.indexOf('-') >= 0) {\n direction = 'out';\n }\n return {\n 'info': item,\n 'id': this.safeString(item, 'billId'),\n 'timestamp': timestamp,\n 'datetime': this.iso8601(timestamp),\n 'direction': direction,\n 'account': undefined,\n 'referenceId': undefined,\n 'referenceAccount': undefined,\n 'type': this.parseLedgerType(this.safeString(item, 'businessType')),\n 'currency': code,\n 'amount': amount,\n 'before': undefined,\n 'after': after,\n 'status': undefined,\n 'fee': fee,\n };\n }\n parseLedgerType(type) {\n const types = {\n 'trans_to_cross': 'transfer',\n 'trans_from_cross': 'transfer',\n 'trans_to_exchange': 'transfer',\n 'trans_from_exchange': 'transfer',\n 'trans_to_isolated': 'transfer',\n 'trans_from_isolated': 'transfer',\n 'trans_to_contract': 'transfer',\n 'trans_from_contract': 'transfer',\n 'trans_to_otc': 'transfer',\n 'trans_from_otc': 'transfer',\n 'open_long': 'trade',\n 'close_long': 'trade',\n 'open_short': 'trade',\n 'close_short': 'trade',\n 'force_close_long': 'trade',\n 'force_close_short': 'trade',\n 'burst_long_loss_query': 'trade',\n 'burst_short_loss_query': 'trade',\n 'force_buy': 'trade',\n 'force_sell': 'trade',\n 'burst_buy': 'trade',\n 'burst_sell': 'trade',\n 'delivery_long': 'settlement',\n 'delivery_short': 'settlement',\n 'contract_settle_fee': 'fee',\n 'append_margin': 'transaction',\n 'adjust_down_lever_append_margin': 'transaction',\n 'reduce_margin': 'transaction',\n 'auto_append_margin': 'transaction',\n 'cash_gift_issue': 'cashback',\n 'cash_gift_recycle': 'cashback',\n 'bonus_issue': 'rebate',\n 'bonus_recycle': 'rebate',\n 'bonus_expired': 'rebate',\n 'transfer_in': 'transfer',\n 'transfer_out': 'transfer',\n 'deposit': 'deposit',\n 'withdraw': 'withdrawal',\n 'buy': 'trade',\n 'sell': 'trade',\n };\n return this.safeString(types, type, type);\n }\n async fetchMyTrades(symbol = undefined, since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name bitget#fetchMyTrades\n * @description fetch all trades made by the user\n * @see https://www.bitget.com/api-doc/spot/trade/Get-Fills\n * @see https://www.bitget.com/api-doc/contract/trade/Get-Order-Fills\n * @see https://www.bitget.com/api-doc/margin/cross/trade/Get-Cross-Order-Fills\n * @see https://www.bitget.com/api-doc/margin/isolated/trade/Get-Isolated-Transaction-Details\n * @param {string} symbol unified market symbol\n * @param {int} [since] the earliest time in ms to fetch trades for\n * @param {int} [limit] the maximum number of trades structures to retrieve\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {int} [params.until] the latest time in ms to fetch trades for\n * @param {boolean} [params.paginate] default false, when true will automatically paginate by calling this endpoint multiple times. See in the docs all the [available parameters](https://github.com/ccxt/ccxt/wiki/Manual#pagination-params)\n * @returns {Trade[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=trade-structure}\n */\n if (symbol === undefined) {\n throw new InvalidParamsError('fetchMyTrades() requires a symbol argument').exchange(this.id);\n }\n await this.loadMarkets();\n const sandboxMode = this.safeValue(this.options, 'sandboxMode', false);\n let market = undefined;\n if (sandboxMode) {\n const sandboxSymbol = this.convertSymbolForSandbox(symbol);\n market = this.market(sandboxSymbol);\n }\n else {\n market = this.market(symbol);\n }\n let marginMode = undefined;\n [marginMode, params] = this.handleMarginModeAndParams('fetchMyTrades', params);\n let paginate = false;\n [paginate, params] = this.handleOptionAndParams(params, 'fetchMyTrades', 'paginate');\n if (paginate) {\n let cursorReceived = undefined;\n if (market['spot']) {\n if (marginMode !== undefined) {\n cursorReceived = 'minId';\n }\n }\n else {\n cursorReceived = 'endId';\n }\n return await this.fetchPaginatedCallCursor('fetchMyTrades', symbol, since, limit, params, cursorReceived, 'idLessThan');\n }\n let response = undefined;\n let request = {\n 'symbol': market['id'],\n };\n [request, params] = this.handleUntilOption('endTime', request, params);\n if (since !== undefined) {\n request['startTime'] = since;\n }\n if (limit !== undefined) {\n request['limit'] = limit;\n }\n if (market['spot']) {\n if (marginMode !== undefined) {\n if (since === undefined) {\n request['startTime'] = this.milliseconds() - 7776000000;\n }\n if (marginMode === 'isolated') {\n response = await this.privateMarginGetV2MarginIsolatedFills(this.extend(request, params));\n }\n else if (marginMode === 'cross') {\n response = await this.privateMarginGetV2MarginCrossedFills(this.extend(request, params));\n }\n }\n else {\n response = await this.privateSpotGetV2SpotTradeFills(this.extend(request, params));\n }\n }\n else {\n let productType = undefined;\n [productType, params] = this.handleProductTypeAndParams(market, params);\n request['productType'] = productType;\n response = await this.privateMixGetV2MixOrderFills(this.extend(request, params));\n }\n //\n // spot\n //\n // {\n // \"code\": \"00000\",\n // \"msg\": \"success\",\n // \"requestTime\": 1700802995406,\n // \"data\": [\n // {\n // \"userId\": \"7264631750\",\n // \"symbol\": \"BTCUSDT\",\n // \"orderId\": \"1098394344925597696\",\n // \"tradeId\": \"1098394344974925824\",\n // \"orderType\": \"market\",\n // \"side\": \"sell\",\n // \"priceAvg\": \"28467.68\",\n // \"size\": \"0.0002\",\n // \"amount\": \"5.693536\",\n // \"feeDetail\": {\n // \"deduction\": \"no\",\n // \"feeCoin\": \"USDT\",\n // \"totalDeductionFee\": \"\",\n // \"totalFee\": \"-0.005693536\"\n // },\n // \"tradeScope\": \"taker\",\n // \"cTime\": \"1697603539699\",\n // \"uTime\": \"1697603539754\"\n // }\n // ]\n // }\n //\n // spot margin\n //\n // {\n // \"code\": \"00000\",\n // \"msg\": \"success\",\n // \"requestTime\": 1700803176399,\n // \"data\": {\n // \"fills\": [\n // {\n // \"orderId\": \"1099353730455318528\",\n // \"tradeId\": \"1099353730627092481\",\n // \"orderType\": \"market\",\n // \"side\": \"sell\",\n // \"priceAvg\": \"29543.7\",\n // \"size\": \"0.0001\",\n // \"amount\": \"2.95437\",\n // \"tradeScope\": \"taker\",\n // \"feeDetail\": {\n // \"deduction\": \"no\",\n // \"feeCoin\": \"USDT\",\n // \"totalDeductionFee\": \"0\",\n // \"totalFee\": \"-0.00295437\"\n // },\n // \"cTime\": \"1697832275063\",\n // \"uTime\": \"1697832275150\"\n // },\n // ],\n // \"minId\": \"1099353591699161118\",\n // \"maxId\": \"1099353730627092481\"\n // }\n // }\n //\n // swap and future\n //\n // {\n // \"code\": \"00000\",\n // \"msg\": \"success\",\n // \"requestTime\": 1700803357487,\n // \"data\": {\n // \"fillList\": [\n // {\n // \"tradeId\": \"1111468664328269825\",\n // \"symbol\": \"BTCUSDT\",\n // \"orderId\": \"1111468664264753162\",\n // \"price\": \"37271.4\",\n // \"baseVolume\": \"0.001\",\n // \"feeDetail\": [\n // {\n // \"deduction\": \"no\",\n // \"feeCoin\": \"USDT\",\n // \"totalDeductionFee\": null,\n // \"totalFee\": \"-0.02236284\"\n // }\n // ],\n // \"side\": \"buy\",\n // \"quoteVolume\": \"37.2714\",\n // \"profit\": \"-0.0007\",\n // \"enterPointSource\": \"web\",\n // \"tradeSide\": \"close\",\n // \"posMode\": \"hedge_mode\",\n // \"tradeScope\": \"taker\",\n // \"cTime\": \"1700720700342\"\n // },\n // ],\n // \"endId\": \"1099351587643699201\"\n // }\n // }\n //\n const data = this.safeValue(response, 'data');\n if ((market['swap']) || (market['future'])) {\n const fillList = this.safeValue(data, 'fillList', []);\n return this.parseTrades(fillList, market, since, limit);\n }\n else if (marginMode !== undefined) {\n const fills = this.safeValue(data, 'fills', []);\n return this.parseTrades(fills, market, since, limit);\n }\n return this.parseTrades(data, market, since, limit);\n }\n async fetchPosition(symbol, params = {}) {\n /**\n * @method\n * @name bitget#fetchPosition\n * @description fetch data on a single open contract trade position\n * @see https://www.bitget.com/api-doc/contract/position/get-single-position\n * @param {string} symbol unified market symbol of the market the position is held in\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} a [position structure]{@link https://docs.ccxt.com/#/?id=position-structure}\n */\n await this.loadMarkets();\n const sandboxMode = this.safeValue(this.options, 'sandboxMode', false);\n let market = undefined;\n if (sandboxMode) {\n const sandboxSymbol = this.convertSymbolForSandbox(symbol);\n market = this.market(sandboxSymbol);\n }\n else {\n market = this.market(symbol);\n }\n let productType = undefined;\n [productType, params] = this.handleProductTypeAndParams(market, params);\n const request = {\n 'symbol': market['id'],\n 'marginCoin': market['settleId'],\n 'productType': productType,\n };\n const response = await this.privateMixGetV2MixPositionSinglePosition(this.extend(request, params));\n //\n // {\n // \"code\": \"00000\",\n // \"msg\": \"success\",\n // \"requestTime\": 1700807531673,\n // \"data\": [\n // {\n // \"marginCoin\": \"USDT\",\n // \"symbol\": \"BTCUSDT\",\n // \"holdSide\": \"long\",\n // \"openDelegateSize\": \"0\",\n // \"marginSize\": \"3.73555\",\n // \"available\": \"0.002\",\n // \"locked\": \"0\",\n // \"total\": \"0.002\",\n // \"leverage\": \"20\",\n // \"achievedProfits\": \"0\",\n // \"openPriceAvg\": \"37355.5\",\n // \"marginMode\": \"crossed\",\n // \"posMode\": \"hedge_mode\",\n // \"unrealizedPL\": \"0.007\",\n // \"liquidationPrice\": \"31724.970702417\",\n // \"keepMarginRate\": \"0.004\",\n // \"markPrice\": \"37359\",\n // \"marginRatio\": \"0.029599540355\",\n // \"cTime\": \"1700807507275\"\n // }\n // ]\n // }\n //\n const data = this.safeValue(response, 'data', []);\n const first = this.safeValue(data, 0, {});\n return this.parsePosition(first, market);\n }\n async fetchPositions(symbols = undefined, params = {}) {\n /**\n * @method\n * @name bitget#fetchPositions\n * @description fetch all open positions\n * @see https://www.bitget.com/api-doc/contract/position/get-all-position\n * @see https://www.bitget.com/api-doc/contract/position/Get-History-Position\n * @param {string[]|undefined} symbols list of unified market symbols\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {string} [params.marginCoin] the settle currency of the positions, needs to match the productType\n * @param {string} [params.productType] 'USDT-FUTURES', 'USDC-FUTURES', 'COIN-FUTURES', 'SUSDT-FUTURES', 'SUSDC-FUTURES' or 'SCOIN-FUTURES'\n * @param {boolean} [params.paginate] default false, when true will automatically paginate by calling this endpoint multiple times. See in the docs all the [available parameters](https://github.com/ccxt/ccxt/wiki/Manual#pagination-params)\n * @returns {object[]} a list of [position structure]{@link https://docs.ccxt.com/#/?id=position-structure}\n */\n await this.loadMarkets();\n let paginate = false;\n [paginate, params] = this.handleOptionAndParams(params, 'fetchPositions', 'paginate');\n if (paginate) {\n return await this.fetchPaginatedCallCursor('fetchPositions', undefined, undefined, undefined, params, 'endId', 'idLessThan');\n }\n const fetchPositionsOptions = this.safeValue(this.options, 'fetchPositions', {});\n const method = this.safeString(fetchPositionsOptions, 'method', 'privateMixGetV2MixPositionAllPosition');\n let market = undefined;\n if (symbols !== undefined) {\n const first = this.safeString(symbols, 0);\n const sandboxMode = this.safeValue(this.options, 'sandboxMode', false);\n if (sandboxMode) {\n const sandboxSymbol = this.convertSymbolForSandbox(first);\n market = this.market(sandboxSymbol);\n }\n else {\n market = this.market(first);\n }\n }\n let productType = undefined;\n [productType, params] = this.handleProductTypeAndParams(market, params);\n const request = {\n 'productType': productType,\n };\n let response = undefined;\n let isHistory = false;\n if (method === 'privateMixGetV2MixPositionAllPosition') {\n let marginCoin = this.safeString(params, 'marginCoin', 'USDT');\n if (symbols !== undefined) {\n marginCoin = market['settleId'];\n }\n else if (productType === this.USDT_FUTURES) {\n marginCoin = 'USDT';\n }\n else if (productType === this.USDC_FUTURES) {\n marginCoin = 'USDC';\n }\n else if (productType === this.SUSDT_FUTURES) {\n marginCoin = 'SUSDT';\n }\n else if (productType === this.SUSDC_FUTURES) {\n marginCoin = 'SUSDC';\n }\n else if ((productType === this.SCOIN_FUTURES) || (productType === this.COIN_FUTURES)) {\n if (marginCoin === undefined) {\n throw new InvalidParamsError('fetchPositions() requires a marginCoin parameter that matches the productType')\n .exchange(this.id);\n }\n }\n request['marginCoin'] = marginCoin;\n response = await this.privateMixGetV2MixPositionAllPosition(this.extend(request, params));\n }\n else {\n isHistory = true;\n if (market !== undefined) {\n request['symbol'] = market['id'];\n }\n response = await this.privateMixGetV2MixPositionHistoryPosition(this.extend(request, params));\n }\n //\n // privateMixGetV2MixPositionAllPosition\n //\n // {\n // \"code\": \"00000\",\n // \"msg\": \"success\",\n // \"requestTime\": 1700807810221,\n // \"data\": [\n // {\n // \"marginCoin\": \"USDT\",\n // \"symbol\": \"BTCUSDT\",\n // \"holdSide\": \"long\",\n // \"openDelegateSize\": \"0\",\n // \"marginSize\": \"3.73555\",\n // \"available\": \"0.002\",\n // \"locked\": \"0\",\n // \"total\": \"0.002\",\n // \"leverage\": \"20\",\n // \"achievedProfits\": \"0\",\n // \"openPriceAvg\": \"37355.5\",\n // \"marginMode\": \"crossed\",\n // \"posMode\": \"hedge_mode\",\n // \"unrealizedPL\": \"0.03\",\n // \"liquidationPrice\": \"31725.023602417\",\n // \"keepMarginRate\": \"0.004\",\n // \"markPrice\": \"37370.5\",\n // \"marginRatio\": \"0.029550120396\",\n // \"cTime\": \"1700807507275\"\n // }\n // ]\n // }\n //\n // privateMixGetV2MixPositionHistoryPosition\n //\n // {\n // \"code\": \"00000\",\n // \"msg\": \"success\",\n // \"requestTime\": 1700808051002,\n // \"data\": {\n // \"list\": [\n // {\n // \"symbol\": \"BTCUSDT\",\n // \"marginCoin\": \"USDT\",\n // \"holdSide\": \"long\",\n // \"openAvgPrice\": \"37272.1\",\n // \"closeAvgPrice\": \"37271.4\",\n // \"marginMode\": \"crossed\",\n // \"openTotalPos\": \"0.001\",\n // \"closeTotalPos\": \"0.001\",\n // \"pnl\": \"-0.0007\",\n // \"netProfit\": \"-0.0454261\",\n // \"totalFunding\": \"0\",\n // \"openFee\": \"-0.02236326\",\n // \"closeFee\": \"-0.02236284\",\n // \"utime\": \"1700720700400\",\n // \"ctime\": \"1700720651684\"\n // },\n // ],\n // \"endId\": \"1099351653866962944\"\n // }\n // }\n //\n let position = [];\n if (!isHistory) {\n position = this.safeValue(response, 'data', []);\n }\n else {\n const data = this.safeValue(response, 'data', {});\n position = this.safeValue(data, 'list', []);\n }\n const result = [];\n for (let i = 0; i < position.length; i++) {\n result.push(this.parsePosition(position[i], market));\n }\n symbols = this.marketSymbols(symbols);\n return this.filterByArrayPositions(result, 'symbol', symbols, false);\n }\n parsePosition(position, market = undefined) {\n //\n // fetchPosition\n //\n // {\n // \"marginCoin\": \"USDT\",\n // \"symbol\": \"BTCUSDT\",\n // \"holdSide\": \"long\",\n // \"openDelegateSize\": \"0\",\n // \"marginSize\": \"3.73555\",\n // \"available\": \"0.002\",\n // \"locked\": \"0\",\n // \"total\": \"0.002\",\n // \"leverage\": \"20\",\n // \"achievedProfits\": \"0\",\n // \"openPriceAvg\": \"37355.5\",\n // \"marginMode\": \"crossed\",\n // \"posMode\": \"hedge_mode\",\n // \"unrealizedPL\": \"0.007\",\n // \"liquidationPrice\": \"31724.970702417\",\n // \"keepMarginRate\": \"0.004\",\n // \"markPrice\": \"37359\",\n // \"marginRatio\": \"0.029599540355\",\n // \"cTime\": \"1700807507275\"\n // }\n //\n // fetchPositions: privateMixGetV2MixPositionAllPosition\n //\n // {\n // \"marginCoin\": \"USDT\",\n // \"symbol\": \"BTCUSDT\",\n // \"holdSide\": \"long\",\n // \"openDelegateSize\": \"0\",\n // \"marginSize\": \"3.73555\",\n // \"available\": \"0.002\",\n // \"locked\": \"0\",\n // \"total\": \"0.002\",\n // \"leverage\": \"20\",\n // \"achievedProfits\": \"0\",\n // \"openPriceAvg\": \"37355.5\",\n // \"marginMode\": \"crossed\",\n // \"posMode\": \"hedge_mode\",\n // \"unrealizedPL\": \"0.03\",\n // \"liquidationPrice\": \"31725.023602417\",\n // \"keepMarginRate\": \"0.004\",\n // \"markPrice\": \"37370.5\",\n // \"marginRatio\": \"0.029550120396\",\n // \"cTime\": \"1700807507275\"\n // }\n //\n // fetchPositions: privateMixGetV2MixPositionHistoryPosition\n //\n // {\n // \"symbol\": \"BTCUSDT\",\n // \"marginCoin\": \"USDT\",\n // \"holdSide\": \"long\",\n // \"openAvgPrice\": \"37272.1\",\n // \"closeAvgPrice\": \"37271.4\",\n // \"marginMode\": \"crossed\",\n // \"openTotalPos\": \"0.001\",\n // \"closeTotalPos\": \"0.001\",\n // \"pnl\": \"-0.0007\",\n // \"netProfit\": \"-0.0454261\",\n // \"totalFunding\": \"0\",\n // \"openFee\": \"-0.02236326\",\n // \"closeFee\": \"-0.02236284\",\n // \"utime\": \"1700720700400\",\n // \"ctime\": \"1700720651684\"\n // }\n //\n // closeAllPositions\n //\n // {\n // \"orderId\": \"1120923953904893955\",\n // \"clientOid\": \"1120923953904893956\"\n // }\n //\n const marketId = this.safeString(position, 'symbol');\n market = this.safeMarket(marketId, market, undefined, 'contract');\n const symbol = market['symbol'];\n const timestamp = this.safeInteger2(position, 'cTime', 'ctime');\n let marginMode = this.safeString(position, 'marginMode');\n let collateral = undefined;\n let initialMargin = undefined;\n const unrealizedPnl = this.safeString(position, 'unrealizedPL');\n const rawCollateral = this.safeString(position, 'marginSize');\n if (marginMode === 'isolated') {\n collateral = Precise.stringAdd(rawCollateral, unrealizedPnl);\n }\n else if (marginMode === 'crossed') {\n marginMode = 'cross';\n initialMargin = rawCollateral;\n }\n const holdMode = this.safeString(position, 'posMode');\n let hedged = undefined;\n if (holdMode === 'hedge_mode') {\n hedged = true;\n }\n else if (holdMode === 'one_way_mode') {\n hedged = false;\n }\n const side = this.safeString(position, 'holdSide');\n const leverage = this.safeString(position, 'leverage');\n const contractSizeNumber = this.safeValue(market, 'contractSize');\n const contractSize = this.numberToString(contractSizeNumber);\n const baseAmount = this.safeString(position, 'total');\n const entryPrice = this.safeString2(position, 'openPriceAvg', 'openAvgPrice');\n const maintenanceMarginPercentage = this.safeString(position, 'keepMarginRate');\n const openNotional = Precise.stringMul(entryPrice, baseAmount);\n if (initialMargin === undefined) {\n initialMargin = Precise.stringDiv(openNotional, leverage);\n }\n let contracts = this.parseNumber(Precise.stringDiv(baseAmount, contractSize));\n if (contracts === undefined) {\n contracts = this.safeNumber(position, 'closeTotalPos');\n }\n const markPrice = this.safeString(position, 'markPrice');\n const notional = Precise.stringMul(baseAmount, markPrice);\n const initialMarginPercentage = Precise.stringDiv(initialMargin, notional);\n let liquidationPrice = this.parseNumber(this.omitZero(this.safeString(position, 'liquidationPrice')));\n const calcTakerFeeRate = '0.0006';\n const calcTakerFeeMult = '0.9994';\n if ((liquidationPrice === undefined) && (marginMode === 'isolated') && Precise.stringGt(baseAmount, '0')) {\n let signedMargin = Precise.stringDiv(rawCollateral, baseAmount);\n let signedMmp = maintenanceMarginPercentage;\n if (side === 'short') {\n signedMargin = Precise.stringNeg(signedMargin);\n signedMmp = Precise.stringNeg(signedMmp);\n }\n let mmrMinusOne = Precise.stringSub('1', signedMmp);\n let numerator = Precise.stringSub(entryPrice, signedMargin);\n if (side === 'long') {\n mmrMinusOne = Precise.stringMul(mmrMinusOne, calcTakerFeeMult);\n }\n else {\n numerator = Precise.stringMul(numerator, calcTakerFeeMult);\n }\n liquidationPrice = this.parseNumber(Precise.stringDiv(numerator, mmrMinusOne));\n }\n const feeToClose = Precise.stringMul(notional, calcTakerFeeRate);\n const maintenanceMargin = Precise.stringAdd(Precise.stringMul(maintenanceMarginPercentage, notional), feeToClose);\n const percentage = Precise.stringMul(Precise.stringDiv(unrealizedPnl, initialMargin, 4), '100');\n return this.safePosition({\n 'info': position,\n 'id': this.safeString(position, 'orderId'),\n 'symbol': symbol,\n 'notional': this.parseNumber(notional),\n 'marginMode': marginMode,\n 'liquidationPrice': liquidationPrice,\n 'entryPrice': this.parseNumber(entryPrice),\n 'unrealizedPnl': this.parseNumber(unrealizedPnl),\n 'realizedPnl': this.safeNumber(position, 'pnl'),\n 'percentage': this.parseNumber(percentage),\n 'contracts': contracts,\n 'contractSize': contractSizeNumber,\n 'markPrice': this.parseNumber(markPrice),\n 'lastPrice': this.safeNumber(position, 'closeAvgPrice'),\n 'side': side,\n 'hedged': hedged,\n 'timestamp': timestamp,\n 'datetime': this.iso8601(timestamp),\n 'lastUpdateTimestamp': this.safeInteger(position, 'utime'),\n 'maintenanceMargin': this.parseNumber(maintenanceMargin),\n 'maintenanceMarginPercentage': this.parseNumber(maintenanceMarginPercentage),\n 'collateral': this.parseNumber(collateral),\n 'initialMargin': this.parseNumber(initialMargin),\n 'initialMarginPercentage': this.parseNumber(initialMarginPercentage),\n 'leverage': this.parseNumber(leverage),\n 'marginRatio': this.safeNumber(position, 'marginRatio'),\n 'stopLossPrice': undefined,\n 'takeProfitPrice': undefined,\n });\n }\n async fetchTransfers(code = undefined, since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name bitget#fetchTransfers\n * @description fetch a history of internal transfers made on an account\n * @see https://www.bitget.com/api-doc/spot/account/Get-Account-TransferRecords\n * @param {string} code unified currency code of the currency transferred\n * @param {int} [since] the earliest time in ms to fetch transfers for\n * @param {int} [limit] the maximum number of transfers structures to retrieve\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {int} [params.until] the latest time in ms to fetch entries for\n * @returns {object[]} a list of [transfer structures]{@link https://docs.ccxt.com/#/?id=transfer-structure}\n */\n if (code === undefined) {\n throw new InvalidParamsError('fetchTransfers() requires a code argument')\n .exchange(this.id);\n }\n await this.loadMarkets();\n let type = undefined;\n [type, params] = this.handleMarketTypeAndParams('fetchTransfers', undefined, params);\n const fromAccount = this.safeString(params, 'fromAccount', type);\n params = this.omit(params, 'fromAccount');\n const accountsByType = this.safeValue(this.options, 'accountsByType', {});\n type = this.safeString(accountsByType, fromAccount);\n const currency = this.currency(code);\n let request = {\n 'coin': currency['code'],\n 'fromType': type,\n };\n if (since !== undefined) {\n request['startTime'] = since;\n }\n if (limit !== undefined) {\n request['limit'] = limit;\n }\n [request, params] = this.handleUntilOption('endTime', request, params);\n const response = await this.privateSpotGetV2SpotAccountTransferRecords(this.extend(request, params));\n //\n // {\n // \"code\": \"00000\",\n // \"msg\": \"success\",\n // \"requestTime\": 1700873854651,\n // \"data\": [\n // {\n // \"coin\": \"USDT\",\n // \"status\": \"Successful\",\n // \"toType\": \"crossed_margin\",\n // \"toSymbol\": \"\",\n // \"fromType\": \"spot\",\n // \"fromSymbol\": \"\",\n // \"size\": \"11.64958799\",\n // \"ts\": \"1700729673028\",\n // \"clientOid\": \"1111506298504744960\",\n // \"transferId\": \"24930940\"\n // },\n // ]\n // }\n //\n const data = this.safeValue(response, 'data', []);\n return this.parseTransfers(data, currency, since, limit);\n }\n // https://www.bitget.com/api-doc/spot/account/Get-Subaccount-Assets\n async fetchSubAccountBalances(uid, params = {}) {\n await this.loadMarkets();\n const response = await this.privateSpotGetV2SpotAccountSubaccountAssets();\n // {\n // \"code\": \"00000\",\n // \"message\": \"success\",\n // \"requestTime\": 1695808949356,\n // \"data\": [\n // {\n // \"userId\": 1234567890,\n // \"assetsList\": [\n // {\n // \"coin\": \"BTC\",\n // \"available\": \"1.1\",\n // \"limitAvailable\": \"12.1\",\n // \"frozen\": \"0\",\n // \"locked\": \"1.1\",\n // \"uTime\": \"1337654897651\"\n // }\n // ]\n // },\n // {\n // \"userId\": 1234567890,\n // \"assetsList\": [\n // {\n // \"coin\": \"ETH\",\n // \"available\": \"12.1\",\n // \"limitAvailable\": \"12.1\",\n // \"frozen\": \"0\",\n // \"locked\": \"1.1\",\n // \"uTime\": \"1337654897651\"\n // }\n // ]\n // }\n // ]\n // }\n const data = this.safeValue(response, 'data', []);\n const subAccount = data.find((account) => account?.['userId'] === uid);\n if (subAccount === undefined) {\n throw new SubAccountNotFoundError(uid);\n }\n const assetsList = this.safeValue(subAccount, 'assetsList', []);\n return { 'spot': this.parseBalance(assetsList) };\n }\n // https://www.bitget.com/api-doc/spot/account/Get-Subaccount-Assets\n async getSubAccounts() {\n await this.loadMarkets();\n const response = await this.privateSpotGetV2SpotAccountSubaccountAssets();\n const data = this.safeValue(response, 'data', []);\n return data.map((account) => ({\n 'uid': this.safeString(account, 'userId'),\n }));\n }\n // https://www.bitget.com/api-doc/spot/account/Sub-Transfer\n async subAccountTransfer(code, amount, fromAccountType, toAccountType, fromUid, toUid, params = {}) {\n await this.loadMarkets();\n const currency = this.currency(code);\n const requestedAmount = this.currencyToPrecision(code, amount);\n const fromAccountTypeExt = this.convertTypeToAccount(fromAccountType);\n const toAccountTypeExt = this.convertTypeToAccount(toAccountType);\n const request = {\n 'coin': currency['code'],\n 'amount': requestedAmount,\n 'fromType': fromAccountTypeExt,\n 'toType': toAccountTypeExt,\n 'fromUserId': fromUid,\n 'toUserId': toUid,\n };\n if (!('clientOid' in params)) {\n request['clientOid'] = this.uuid();\n }\n const response = await this.privateSpotPostV2SpotWalletSubaccountTransfer(this.extend(request, params));\n //\n // {\n // \"code\": \"00000\",\n // \"msg\": \"success\",\n // \"requestTime\": 1683875302853,\n // \"data\": {\n // \"transferId\": \"123456\",\n // \"clientOid\": \"x123\"\n // }\n // }\n //\n const data = this.safeValue(response, 'data');\n return this.parseTransfer(data, currency);\n }\n async transfer(code, amount, fromAccount, toAccount, params = {}) {\n /**\n * @method\n * @name bitget#transfer\n * @description transfer currency internally between wallets on the same account\n * @see https://www.bitget.com/api-doc/spot/account/Wallet-Transfer\n * @param {string} code unified currency code\n * @param {float} amount amount to transfer\n * @param {string} fromAccount account to transfer from\n * @param {string} toAccount account to transfer to\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {string} [params.symbol] unified CCXT market symbol, required when transferring to or from an account type that is a leveraged position-by-position account\n * @param {string} [params.clientOid] custom id\n * @returns {object} a [transfer structure]{@link https://docs.ccxt.com/#/?id=transfer-structure}\n */\n await this.loadMarkets();\n const currency = this.currency(code);\n const accountsByType = this.safeValue(this.options, 'accountsByType', {});\n const fromType = this.safeString(accountsByType, fromAccount);\n const toType = this.safeString(accountsByType, toAccount);\n const precisionAmount = this.currencyToPrecision(code, amount);\n const request = {\n 'fromType': fromType,\n 'toType': toType,\n 'amount': precisionAmount,\n 'coin': currency['code'],\n };\n const symbol = this.safeString(params, 'symbol');\n params = this.omit(params, 'symbol');\n let market = undefined;\n if (symbol !== undefined) {\n market = this.market(symbol);\n request['symbol'] = market['id'];\n }\n const response = await this.privateSpotPostV2SpotWalletTransfer(this.extend(request, params));\n //\n // {\n // \"code\": \"00000\",\n // \"msg\": \"success\",\n // \"requestTime\": 1700874302021,\n // \"data\": {\n // \"transferId\": \"1112112916581847040\",\n // \"clientOrderId\": null\n // }\n // }\n //\n const data = this.safeValue(response, 'data', {});\n data['ts'] = this.safeInteger(response, 'requestTime');\n return this.parseTransfer(data, currency);\n }\n parseTransfer(transfer, currency = undefined) {\n //\n // transfer\n //\n // {\n // \"transferId\": \"1112112916581847040\",\n // \"clientOrderId\": null,\n // \"ts\": 1700874302021\n // }\n //\n // fetchTransfers\n //\n // {\n // \"coin\": \"USDT\",\n // \"status\": \"Successful\",\n // \"toType\": \"crossed_margin\",\n // \"toSymbol\": \"\",\n // \"fromType\": \"spot\",\n // \"fromSymbol\": \"\",\n // \"size\": \"11.64958799\",\n // \"ts\": \"1700729673028\",\n // \"clientOid\": \"1111506298504744960\",\n // \"transferId\": \"24930940\"\n // }\n //\n const timestamp = this.safeInteger(transfer, 'ts');\n const status = this.safeStringLower(transfer, 'status');\n const currencyId = this.safeString(transfer, 'coin');\n const fromAccountRaw = this.safeString(transfer, 'fromType');\n const accountsById = this.safeValue(this.options, 'accountsById', {});\n const fromAccount = this.safeString(accountsById, fromAccountRaw, fromAccountRaw);\n const toAccountRaw = this.safeString(transfer, 'toType');\n const toAccount = this.safeString(accountsById, toAccountRaw, toAccountRaw);\n return {\n 'info': transfer,\n 'id': this.safeString(transfer, 'transferId'),\n 'timestamp': timestamp,\n 'datetime': this.iso8601(timestamp),\n 'currency': this.safeCurrencyCode(currencyId, currency),\n 'amount': this.safeNumber(transfer, 'size'),\n 'fromAccount': fromAccount,\n 'toAccount': toAccount,\n 'status': this.parseTransferStatus(status),\n };\n }\n parseTransferStatus(status) {\n const statuses = {\n 'successful': 'ok',\n };\n return this.safeString(statuses, status, status);\n }\n parseDepositWithdrawFee(fee, currency = undefined) {\n //\n // {\n // \"chains\": [\n // {\n // \"browserUrl\": \"https://blockchair.com/bitcoin/transaction/\",\n // \"chain\": \"BTC\",\n // \"depositConfirm\": \"1\",\n // \"extraWithdrawFee\": \"0\",\n // \"minDepositAmount\": \"0.0001\",\n // \"minWithdrawAmount\": \"0.005\",\n // \"needTag\": \"false\",\n // \"rechargeable\": \"true\",\n // \"withdrawConfirm\": \"1\",\n // \"withdrawFee\": \"0.0004\",\n // \"withdrawable\": \"true\"\n // },\n // ],\n // \"coin\": \"BTC\",\n // \"coinId\": \"1\",\n // \"transfer\": \"true\"\"\n // }\n //\n const chains = this.safeValue(fee, 'chains', []);\n const chainsLength = chains.length;\n const result = {\n 'info': fee,\n 'withdraw': {\n 'fee': undefined,\n 'percentage': undefined,\n },\n 'deposit': {\n 'fee': undefined,\n 'percentage': undefined,\n },\n 'networks': {},\n };\n for (let i = 0; i < chainsLength; i++) {\n const chain = chains[i];\n const networkId = this.safeString(chain, 'chain');\n const currencyCode = this.safeString(currency, 'code');\n const networkCode = this.networkIdToCode(networkId, currencyCode);\n result['networks'][networkCode] = {\n 'deposit': { 'fee': undefined, 'percentage': undefined },\n 'withdraw': { 'fee': this.safeNumber(chain, 'withdrawFee'), 'percentage': false },\n };\n if (chainsLength === 1) {\n result['withdraw']['fee'] = this.safeNumber(chain, 'withdrawFee');\n result['withdraw']['percentage'] = false;\n }\n }\n return result;\n }\n async fetchDepositWithdrawFees(codes = undefined, params = {}) {\n /**\n * @method\n * @name bitget#fetchDepositWithdrawFees\n * @description fetch deposit and withdraw fees\n * @see https://www.bitget.com/api-doc/spot/market/Get-Coin-List\n * @param {string[]|undefined} codes list of unified currency codes\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} a list of [fee structures]{@link https://docs.ccxt.com/#/?id=fee-structure}\n */\n await this.loadMarkets();\n const response = await this.publicSpotGetV2SpotPublicCoins(params);\n //\n // {\n // \"code\": \"00000\",\n // \"data\": [\n // {\n // \"chains\": [\n // {\n // \"browserUrl\": \"https://blockchair.com/bitcoin/transaction/\",\n // \"chain\": \"BTC\",\n // \"depositConfirm\": \"1\",\n // \"extraWithdrawFee\": \"0\",\n // \"minDepositAmount\": \"0.0001\",\n // \"minWithdrawAmount\": \"0.005\",\n // \"needTag\": \"false\",\n // \"rechargeable\": \"true\",\n // \"withdrawConfirm\": \"1\",\n // \"withdrawFee\": \"0.0004\",\n // \"withdrawable\": \"true\"\n // },\n // ],\n // \"coin\": \"BTC\",\n // \"coinId\": \"1\",\n // \"transfer\": \"true\"\"\n // }\n // ],\n // \"msg\": \"success\",\n // \"requestTime\": \"1700120731773\"\n // }\n //\n const data = this.safeValue(response, 'data', []);\n return this.parseDepositWithdrawFees(data, codes, 'coin');\n }\n async loadMarketsHelper(reload = false, params = {}) {\n await super.loadMarketsHelper(reload, params);\n const cachedNetworkIdsByCurrencyAndNetworkCodes = await this.cache.get(networkIdsByCurrencyAndNetworkCodesCacheIdentifier(this.id), { 'clone': false });\n this.options['networkIdsByCurrencyAndNetworkCodes'] = cachedNetworkIdsByCurrencyAndNetworkCodes?.data;\n }\n handleErrors(code, reason, url, method, headers, body, response, requestHeaders, requestBody) {\n if (!response) {\n return undefined; // fallback to default error handler\n }\n //\n // spot\n //\n // {\"status\":\"fail\",\"err_code\":\"01001\",\"err_msg\":\"系统异常,请稍后重试\"}\n // {\"status\":\"error\",\"ts\":1595594160149,\"err_code\":\"invalid-parameter\",\"err_msg\":\"invalid size, valid range: [1,2000]\"}\n // {\"status\":\"error\",\"ts\":1595684716042,\"err_code\":\"invalid-parameter\",\"err_msg\":\"illegal sign invalid\"}\n // {\"status\":\"error\",\"ts\":1595700216275,\"err_code\":\"bad-request\",\"err_msg\":\"your balance is low!\"}\n // {\"status\":\"error\",\"ts\":1595700344504,\"err_code\":\"invalid-parameter\",\"err_msg\":\"invalid type\"}\n // {\"status\":\"error\",\"ts\":1595703343035,\"err_code\":\"bad-request\",\"err_msg\":\"order cancel fail\"}\n // {\"status\":\"error\",\"ts\":1595704360508,\"err_code\":\"invalid-parameter\",\"err_msg\":\"accesskey not null\"}\n // {\"status\":\"error\",\"ts\":1595704490084,\"err_code\":\"invalid-parameter\",\"err_msg\":\"permissions not right\"}\n // {\"status\":\"error\",\"ts\":1595711862763,\"err_code\":\"system exception\",\"err_msg\":\"system exception\"}\n // {\"status\":\"error\",\"ts\":1595730308979,\"err_code\":\"bad-request\",\"err_msg\":\"20003\"}\n //\n // swap\n //\n // {\"code\":\"40015\",\"msg\":\"\",\"requestTime\":1595698564931,\"data\":null}\n // {\"code\":\"40017\",\"msg\":\"Order id must not be blank\",\"requestTime\":1595702477835,\"data\":null}\n // {\"code\":\"40017\",\"msg\":\"Order Type must not be blank\",\"requestTime\":1595698516162,\"data\":null}\n // {\"code\":\"40301\",\"msg\":\"\",\"requestTime\":1595667662503,\"data\":null}\n // {\"code\":\"40017\",\"msg\":\"Contract code must not be blank\",\"requestTime\":1595703151651,\"data\":null}\n // {\"code\":\"40108\",\"msg\":\"\",\"requestTime\":1595885064600,\"data\":null}\n // {\"order_id\":\"513468410013679613\",\"client_oid\":null,\"symbol\":\"ethusd\",\"result\":false,\"err_code\":\"order_no_exist_error\",\"err_msg\":\"订单不存在!\"}\n //\n const message = this.safeString2(response, 'err_msg', 'msg');\n const errorCode = this.safeString2(response, 'code', 'err_code');\n const userMessage = errorCode + ': ' + message;\n const nonEmptyMessage = ((message !== undefined) && (message !== ''));\n if (nonEmptyMessage) {\n this.throwExactlyMatchedException(this.exceptions['exact'], message, userMessage);\n this.throwBroadlyMatchedException(this.exceptions['broad'], message, userMessage);\n }\n const nonZeroErrorCode = (errorCode !== undefined) && (errorCode !== '00000');\n if (nonZeroErrorCode) {\n this.throwExactlyMatchedException(this.exceptions['exact'], errorCode, userMessage);\n }\n if (nonZeroErrorCode || (nonEmptyMessage && errorCode !== '00000')) {\n throw new ExchangeError().addMessage(userMessage).exchange(this.id); // unknown message\n }\n return undefined;\n }\n async sign(path, api = [], method = 'GET', params = {}, headers = undefined, body = undefined) {\n const signed = api[0] === 'private';\n const endpoint = api[1];\n const pathPart = '/api';\n const request = '/' + this.implodeParams(path, params);\n const payload = pathPart + request;\n let url = this.implodeHostname(this.urls['api'][endpoint]) + payload;\n const query = this.omit(params, this.extractParams(path));\n if (!signed && (method === 'GET')) {\n const keys = Object.keys(query);\n const keysLength = keys.length;\n if (keysLength > 0) {\n url = url + '?' + this.urlencode(query);\n }\n }\n if (signed) {\n this.checkRequiredCredentials();\n const timestamp = this.nonce().toString();\n let auth = timestamp + method + payload;\n if (method === 'POST') {\n body = this.json(params);\n auth += body;\n }\n else {\n if (Object.keys(params).length) {\n let queryInner = '?' + this.urlencode(this.keysort(params));\n // check #21169 pr\n if (queryInner.indexOf('%24') > -1) {\n queryInner = queryInner.replace('%24', '$');\n }\n url += queryInner;\n auth += queryInner;\n }\n }\n let signature = undefined;\n if (this.externalSigner) {\n signature = await this.externalSigner.sign({\n 'payload': this.encode(auth),\n 'publicApiKey': this.apiKey,\n 'exchangeId': this.id,\n });\n }\n else {\n signature = this.hmac(this.encode(auth), this.encode(this.secret), sha256, 'base64');\n }\n const broker = this.safeString(this.options, 'broker');\n headers = {\n 'ACCESS-KEY': this.apiKey,\n 'ACCESS-SIGN': signature,\n 'ACCESS-TIMESTAMP': timestamp,\n 'ACCESS-PASSPHRASE': this.password,\n 'X-CHANNEL-API-CODE': broker,\n };\n if (method === 'POST') {\n headers['Content-Type'] = 'application/json';\n }\n }\n return { 'url': url, 'method': method, 'body': body, 'headers': headers };\n }\n}\n","// ----------------------------------------------------------------------------\n\n// PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:\n// https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code\n// EDIT THE CORRESPONDENT .ts FILE INSTEAD\n\n// ---------------------------------------------------------------------------\nimport Exchange from './abstract/bitmart.js';\nimport { Precise } from './base/Precise.js';\nimport { currencyIdsByCodeAndNetworkCodeCacheIdentifier } from './base/cache.js';\nimport { TICK_SIZE, TRUNCATE } from './base/functions/number.js';\nimport { STABLE_COINS } from './base/stable.js';\nimport { AuthenticationError, ExchangeAccountSuspendedError, ExchangeError, ExchangeInvalidNonceError, ExchangeInvalidPermissionsError, ExchangeNotAllowedMethodError, ExchangeNotAvailableError, ExchangeRateLimitExceededError, ExchangeTransferError, ExchangeTransferNotAllowedError, ExchangeUnderMaintenanceError, ExchangeUnknownAssetError, InsufficientBalanceError, InternalError, InvalidAddressError, InvalidParamsError, MarketTypeNotSupportedError, OrderNotFoundError, TradeError, WhitelistCheckFailedError, WithdrawalError } from './sdk/errors.js';\nimport { sha256 } from './static_dependencies/noble-hashes/sha256.js';\n// ---------------------------------------------------------------------------\n/**\n * @class bitmart\n * @augments Exchange\n */\nexport default class bitmart extends Exchange {\n describe() {\n return this.deepExtend(super.describe(), {\n 'id': 'bitmart',\n 'name': 'BitMart',\n 'countries': ['US', 'CN', 'HK', 'KR'],\n // 150 per 5 seconds = 30 per second\n // rateLimit = 1000ms / 30 ~= 33.334\n 'rateLimit': 33.34,\n 'version': 'v2',\n 'certified': true,\n 'pro': true,\n 'has': {\n 'CORS': undefined,\n 'spot': true,\n 'margin': true,\n 'swap': true,\n 'future': false,\n 'option': false,\n 'cancelAllOrders': true,\n 'cancelOrder': true,\n 'cancelOrders': false,\n 'createMarketBuyOrderWithCost': true,\n 'createMarketOrderWithCost': false,\n 'createMarketSellOrderWithCost': false,\n 'createOrder': true,\n 'createTrailingPercentOrder': true,\n 'fetchBalance': true,\n 'fetchCanceledOrders': true,\n 'fetchClosedOrders': true,\n 'fetchCurrencies': true,\n 'fetchDeposit': true,\n 'fetchDepositAddress': true,\n 'fetchDepositAddresses': false,\n 'fetchDepositAddressesByNetwork': false,\n 'fetchDeposits': true,\n 'fetchDepositWithdrawFee': true,\n 'fetchDepositWithdrawFees': false,\n 'fetchMarkets': true,\n 'fetchMyTrades': true,\n 'fetchOHLCV': true,\n 'fetchOpenOrders': true,\n 'fetchOrder': true,\n 'fetchOrderBook': true,\n 'fetchOrders': true,\n 'fetchOrderTrades': true,\n 'fetchPosition': true,\n 'fetchPositions': true,\n 'fetchStatus': true,\n 'fetchTicker': true,\n 'fetchTickers': true,\n 'fetchTime': true,\n 'fetchTrades': true,\n 'fetchTradingFee': true,\n 'fetchTradingFees': false,\n 'fetchTransactionFee': true,\n 'fetchTransactionFees': false,\n 'fetchTransfer': false,\n 'fetchTransfers': true,\n 'fetchWithdrawAddressesByNetwork': false,\n 'fetchWithdrawal': true,\n 'fetchWithdrawals': true,\n 'transfer': true,\n 'withdraw': true,\n },\n 'hostname': 'bitmart.com',\n 'urls': {\n 'logo': 'https://user-images.githubusercontent.com/1294454/129991357-8f47464b-d0f4-41d6-8a82-34122f0d1398.jpg',\n 'api': {\n 'rest': 'https://api-cloud.{hostname}',\n 'restV2': 'https://api-cloud-v2.{hostname}',\n },\n 'www': 'https://www.bitmart.com/',\n 'doc': 'https://developer-pro.bitmart.com/',\n 'referral': {\n // http://www.bitmart.com/?r=rQCFLh - I removed the code for now, because CWS is blocking until we explain our affiliate program to our users\n 'url': 'http://www.bitmart.com',\n 'discount': 0.3,\n },\n 'fees': 'https://www.bitmart.com/fee/en',\n },\n 'requiredCredentials': {\n 'apiKey': true,\n 'secret': true,\n 'uid': true,\n },\n 'api': {\n 'public': {\n 'get': {\n 'system/time': 3,\n 'system/service': 3,\n // spot markets\n 'spot/v1/currencies': 7.5,\n 'spot/v1/symbols': 7.5,\n 'spot/v1/symbols/details': 5,\n 'spot/quotation/v3/tickers': 6,\n 'spot/quotation/v3/ticker': 4,\n 'spot/quotation/v3/lite-klines': 5,\n 'spot/quotation/v3/klines': 7,\n 'spot/quotation/v3/books': 4,\n 'spot/quotation/v3/trades': 4,\n 'spot/v1/ticker': 5,\n 'spot/v2/ticker': 30,\n 'spot/v1/ticker_detail': 5,\n 'spot/v1/steps': 30,\n 'spot/v1/symbols/kline': 6,\n 'spot/v1/symbols/book': 5,\n 'spot/v1/symbols/trades': 5,\n // contract markets\n 'contract/v1/tickers': 15,\n 'contract/public/details': 5,\n 'contract/public/depth': 5,\n 'contract/public/open-interest': 30,\n 'contract/public/funding-rate': 30,\n 'contract/public/kline': 6,\n 'account/v1/currencies': 30,\n },\n },\n 'private': {\n 'get': {\n // sub-account\n 'account/sub-account/v1/transfer-list': 7.5,\n 'account/sub-account/v1/transfer-history': 7.5,\n 'account/sub-account/main/v1/wallet': 5,\n 'account/sub-account/main/v1/subaccount-list': 7.5,\n 'account/contract/sub-account/main/v1/wallet': 5,\n 'account/contract/sub-account/main/v1/transfer-list': 7.5,\n 'account/contract/sub-account/v1/transfer-history': 7.5,\n // account\n 'account/v1/wallet': 5,\n 'account/v1/currencies': 30,\n 'spot/v1/wallet': 5,\n 'account/v1/deposit/address': 30,\n 'account/v1/withdraw/charge': 32,\n 'account/v2/deposit-withdraw/history': 9,\n 'account/v1/deposit-withdraw/detail': 7.5,\n // order\n 'spot/v1/order_detail': 1,\n 'spot/v2/orders': 5,\n 'spot/v1/trades': 5,\n // newer order endpoint\n 'spot/v2/trades': 5,\n 'spot/v3/orders': 5,\n 'spot/v2/order_detail': 1,\n // margin\n 'spot/v1/margin/isolated/borrow_record': 1,\n 'spot/v1/margin/isolated/repay_record': 1,\n 'spot/v1/margin/isolated/pairs': 30,\n 'spot/v1/margin/isolated/account': 5,\n 'spot/v1/trade_fee': 30,\n 'spot/v1/user_fee': 30,\n // broker\n 'spot/v1/broker/rebate': 1,\n // contract\n 'contract/private/assets-detail': 5,\n 'contract/private/order': 1.2,\n 'contract/private/order-history': 10,\n 'contract/private/position': 10,\n 'contract/private/get-open-orders': 1.2,\n 'contract/private/current-plan-order': 1.2,\n 'contract/private/trades': 10,\n },\n 'post': {\n // sub-account endpoints\n 'account/sub-account/main/v1/sub-to-main': 30,\n 'account/sub-account/sub/v1/sub-to-main': 30,\n 'account/sub-account/main/v1/main-to-sub': 30,\n 'account/sub-account/sub/v1/sub-to-sub': 30,\n 'account/sub-account/main/v1/sub-to-sub': 30,\n 'account/contract/sub-account/main/v1/sub-to-main': 7.5,\n 'account/contract/sub-account/main/v1/main-to-sub': 7.5,\n 'account/contract/sub-account/sub/v1/sub-to-main': 7.5,\n // account\n 'account/v1/withdraw/apply': 7.5,\n // transaction and trading\n 'spot/v1/submit_order': 1,\n 'spot/v1/batch_orders': 1,\n 'spot/v2/cancel_order': 1,\n 'spot/v1/cancel_orders': 15,\n 'spot/v4/query/order': 1,\n 'spot/v4/query/client-order': 1,\n 'spot/v4/query/open-orders': 5,\n 'spot/v4/query/history-orders': 5,\n 'spot/v4/query/trades': 5,\n 'spot/v4/query/order-trades': 5,\n // newer endpoint\n 'spot/v3/cancel_order': 1,\n 'spot/v2/batch_orders': 1,\n 'spot/v2/submit_order': 1,\n // margin\n 'spot/v1/margin/submit_order': 1,\n 'spot/v1/margin/isolated/borrow': 30,\n 'spot/v1/margin/isolated/repay': 30,\n 'spot/v1/margin/isolated/transfer': 30,\n // contract\n 'account/v1/transfer-contract-list': 60,\n 'account/v1/transfer-contract': 60,\n 'contract/private/submit-order': 2.5,\n 'contract/private/cancel-order': 1.5,\n 'contract/private/cancel-orders': 30,\n 'contract/private/submit-plan-order': 2.5,\n 'contract/private/cancel-plan-order': 1.5,\n 'contract/private/submit-leverage': 2.5,\n },\n },\n },\n 'timeframes': {\n '1m': 1,\n '3m': 3,\n '5m': 5,\n '15m': 15,\n '30m': 30,\n '45m': 45,\n '1h': 60,\n '2h': 120,\n '3h': 180,\n '4h': 240,\n '1d': 1440,\n '1w': 10080,\n '1M': 43200,\n },\n 'fees': {\n 'trading': {\n 'tierBased': true,\n 'percentage': true,\n 'taker': this.parseNumber('0.0040'),\n 'maker': this.parseNumber('0.0035'),\n 'tiers': {\n 'taker': [\n [this.parseNumber('0'), this.parseNumber('0.0020')],\n [this.parseNumber('10'), this.parseNumber('0.18')],\n [this.parseNumber('50'), this.parseNumber('0.0016')],\n [this.parseNumber('250'), this.parseNumber('0.0014')],\n [this.parseNumber('1000'), this.parseNumber('0.0012')],\n [this.parseNumber('5000'), this.parseNumber('0.0010')],\n [this.parseNumber('25000'), this.parseNumber('0.0008')],\n [this.parseNumber('50000'), this.parseNumber('0.0006')],\n ],\n 'maker': [\n [this.parseNumber('0'), this.parseNumber('0.001')],\n [this.parseNumber('10'), this.parseNumber('0.0009')],\n [this.parseNumber('50'), this.parseNumber('0.0008')],\n [this.parseNumber('250'), this.parseNumber('0.0007')],\n [this.parseNumber('1000'), this.parseNumber('0.0006')],\n [this.parseNumber('5000'), this.parseNumber('0.0005')],\n [this.parseNumber('25000'), this.parseNumber('0.0004')],\n [this.parseNumber('50000'), this.parseNumber('0.0003')],\n ],\n },\n },\n },\n 'precisionMode': TICK_SIZE,\n 'exceptions': {\n 'exact': {\n // general errors\n '30000': ExchangeError,\n '30001': AuthenticationError,\n '30002': AuthenticationError,\n '30003': ExchangeAccountSuspendedError,\n '30004': AuthenticationError,\n '30005': AuthenticationError,\n '30006': AuthenticationError,\n '30007': AuthenticationError,\n '30008': AuthenticationError,\n '30010': ExchangeInvalidPermissionsError,\n '30011': AuthenticationError,\n '30012': AuthenticationError,\n '30013': ExchangeRateLimitExceededError,\n '30014': ExchangeNotAvailableError,\n '30016': ExchangeUnderMaintenanceError,\n '30017': ExchangeRateLimitExceededError,\n '30018': InvalidParamsError,\n '30019': ExchangeInvalidPermissionsError,\n // funding account & sub account errors\n '60000': InvalidParamsError,\n '60001': ExchangeError,\n '60002': ExchangeUnknownAssetError,\n '60003': ExchangeError,\n '60004': WithdrawalError,\n '60005': ExchangeError,\n '60006': ExchangeError,\n '60007': WhitelistCheckFailedError,\n '60008': InsufficientBalanceError,\n '60009': ExchangeError,\n '60010': ExchangeError,\n '60011': InvalidAddressError,\n '60012': ExchangeNotAllowedMethodError,\n '60020': ExchangeInvalidPermissionsError,\n '60021': ExchangeInvalidPermissionsError,\n '60022': ExchangeInvalidPermissionsError,\n '60026': ExchangeInvalidPermissionsError,\n '60027': ExchangeInvalidPermissionsError,\n '60028': ExchangeAccountSuspendedError,\n '60029': ExchangeAccountSuspendedError,\n '60030': ExchangeNotAllowedMethodError,\n '60031': ExchangeError,\n '60050': ExchangeError,\n '60051': ExchangeError,\n '61001': InsufficientBalanceError,\n '61003': ExchangeError,\n '61004': ExchangeError,\n '61005': ExchangeTransferError,\n '61006': ExchangeError,\n '61007': ExchangeInvalidPermissionsError,\n '61008': ExchangeTransferNotAllowedError,\n // spot public errors\n '70000': ExchangeError,\n '70001': InvalidParamsError,\n '70002': InvalidParamsError,\n '71001': InvalidParamsError,\n '71002': InvalidParamsError,\n '71003': InvalidParamsError,\n '71004': InvalidParamsError,\n '71005': InvalidParamsError,\n // spot & margin errors\n '50000': InvalidParamsError,\n '50001': InvalidParamsError,\n '50002': InvalidParamsError,\n '50003': InvalidParamsError,\n '50004': InvalidParamsError,\n '50005': OrderNotFoundError,\n '50006': InvalidParamsError,\n '50007': InvalidParamsError,\n '50008': InvalidParamsError,\n '50009': InvalidParamsError,\n '50010': InvalidParamsError,\n '50011': InvalidParamsError,\n '50012': InvalidParamsError,\n '50013': InvalidParamsError,\n '50014': InvalidParamsError,\n '50015': InvalidParamsError,\n '50016': InvalidParamsError,\n '50017': InvalidParamsError,\n '50018': InvalidParamsError,\n '50019': InvalidParamsError,\n '50020': InsufficientBalanceError,\n '50021': InvalidParamsError,\n '50022': ExchangeNotAvailableError,\n '50023': InvalidParamsError,\n '50024': InvalidParamsError,\n '50025': InvalidParamsError,\n '50026': InvalidParamsError,\n '50027': InvalidParamsError,\n '50028': InvalidParamsError,\n '50029': InvalidParamsError,\n '50030': OrderNotFoundError,\n '50031': OrderNotFoundError,\n '50032': OrderNotFoundError,\n '50033': InvalidParamsError,\n // below Error codes used interchangeably for both failed postOnly and IOC orders depending on market price and order side\n '50034': InvalidParamsError,\n '50035': InvalidParamsError,\n '50036': TradeError,\n '50037': InvalidParamsError,\n '50038': InvalidParamsError,\n '50039': InvalidParamsError,\n '50040': InvalidParamsError,\n '50041': InvalidParamsError,\n '50042': InvalidParamsError,\n '51000': ExchangeUnknownAssetError,\n '51001': ExchangeError,\n '51002': ExchangeError,\n '51003': ExchangeError,\n '51004': InsufficientBalanceError,\n '51005': InvalidParamsError,\n '51006': InvalidParamsError,\n '51007': InvalidParamsError,\n '51008': ExchangeError,\n '51009': InvalidParamsError,\n '51010': InvalidParamsError,\n '51011': InvalidParamsError,\n '51012': InvalidParamsError,\n '51013': InvalidParamsError,\n '51014': TradeError,\n '51015': InvalidParamsError,\n '52000': InvalidParamsError,\n '52001': InvalidParamsError,\n '52002': InvalidParamsError,\n '52003': InvalidParamsError,\n '52004': InvalidParamsError,\n '53000': ExchangeAccountSuspendedError,\n '53001': ExchangeAccountSuspendedError,\n '53002': ExchangeInvalidPermissionsError,\n '53003': ExchangeInvalidPermissionsError,\n '53005': ExchangeInvalidPermissionsError,\n '53006': ExchangeInvalidPermissionsError,\n '53007': ExchangeInvalidPermissionsError,\n '53008': ExchangeInvalidPermissionsError,\n '53009': ExchangeInvalidPermissionsError,\n '53010': ExchangeInvalidPermissionsError,\n '57001': ExchangeNotAllowedMethodError,\n '58001': ExchangeError,\n '59001': ExchangeError,\n '59002': InternalError,\n '59003': ExchangeError,\n '59004': ExchangeError,\n '59005': ExchangeInvalidPermissionsError,\n '59006': ExchangeTransferError,\n '59007': ExchangeError,\n '59008': TradeError,\n '59009': TradeError,\n '59010': InsufficientBalanceError,\n '59011': InternalError,\n // contract errors\n '40001': ExchangeError,\n '40002': ExchangeError,\n '40003': ExchangeError,\n '40004': ExchangeError,\n '40005': ExchangeError,\n '40006': ExchangeInvalidPermissionsError,\n '40007': InvalidParamsError,\n '40008': ExchangeInvalidNonceError,\n '40009': InvalidParamsError,\n '40010': InvalidParamsError,\n '40011': InvalidParamsError,\n '40012': InternalError,\n '40013': ExchangeError,\n '40014': ExchangeError,\n '40015': ExchangeError,\n '40016': TradeError,\n '40017': TradeError,\n '40018': TradeError,\n '40019': ExchangeError,\n '40020': TradeError,\n '40021': ExchangeError,\n '40022': ExchangeError,\n '40023': ExchangeError,\n '40024': ExchangeError,\n '40025': ExchangeError,\n '40026': ExchangeError,\n '40027': InsufficientBalanceError,\n '40028': ExchangeInvalidPermissionsError,\n '40029': InvalidParamsError,\n '40030': InvalidParamsError,\n '40031': InvalidParamsError,\n '40032': InvalidParamsError,\n '40033': InvalidParamsError,\n '40034': ExchangeError,\n '40035': OrderNotFoundError,\n '40036': InvalidParamsError,\n '40037': OrderNotFoundError,\n '40038': ExchangeError,\n '40039': ExchangeError,\n '40040': InvalidParamsError,\n '40041': InvalidParamsError,\n '40042': InvalidParamsError,\n '40043': InvalidParamsError,\n '40044': InvalidParamsError,\n '40045': InvalidParamsError,\n '40046': ExchangeInvalidPermissionsError,\n '40047': ExchangeInvalidPermissionsError,\n '40048': ExchangeError,\n '40049': ExchangeError,\n '40050': TradeError, // 403, Client OrderId duplicated with existing orders\n },\n 'broad': {},\n },\n 'options': {\n 'timeDifference': 0,\n 'defaultNetwork': 'ERC20',\n 'defaultNetworks': {\n 'USDT': 'ERC20',\n },\n 'networksById': {\n 'SOLANA': 'SOL',\n 'MATIC': 'POLYGON',\n 'Polygon': 'POLYGON',\n 'ARB': 'ARBI',\n 'Arbitrum': 'ARBI',\n 'klaytn': 'KLAY',\n 'Klaytn': 'KLAY',\n 'Vechain': 'VET',\n 'OP': 'OPTIMISM',\n 'Zksyncera_eth': 'ZKSYNCERA',\n 'OZO': 'OZONE',\n 'Hedera Mainnet': 'HBAR',\n 'ZEN-20': 'ZENIQ',\n 'Fantom': 'FANTOM',\n 'MultiversX': 'EGLD',\n 'ERC20': 'ETH',\n 'BEP2': 'BSC',\n 'BEP20': 'BSC',\n 'SPL': 'SOL',\n 'BRC20': 'BTC',\n 'ARC20': 'AVAX',\n 'ARBI': 'ARBI',\n 'BSC_BNB': 'BSC',\n },\n 'networks': {\n 'ERC20': 'ERC20',\n 'BTC': 'BTC',\n 'TRC20': 'TRC20',\n // todo: should be TRX after unification\n // 'TRC20': [ 'TRC20', 'trc20', 'TRON' ], // todo: after unification i.e. TRON is returned from fetchDepositAddress\n // 'ERC20': [ 'ERC20', 'ERC-20', 'ERC20 ' ], // todo: after unification\n 'OMNI': 'OMNI',\n 'XLM': 'XLM',\n 'EOS': 'EOS',\n 'NEO': 'NEO',\n 'BTM': 'BTM',\n 'BCH': 'BCH',\n 'LTC': 'LTC',\n 'BSV': 'BSV',\n 'XRP': 'XRP',\n // 'VECHAIN': [ 'VET', 'Vechain' ], // todo: after unification\n 'PLEX': 'PLEX',\n 'XCH': 'XCH',\n // 'AVALANCHE_C': [ 'AVAX', 'AVAX-C' ], // todo: after unification\n 'NEAR': 'NEAR',\n 'FIO': 'FIO',\n 'SCRT': 'SCRT',\n 'IOTX': 'IOTX',\n 'SOL': 'SPL',\n 'ALGO': 'ALGO',\n 'ATOM': 'ATOM',\n 'DOT': 'DOT',\n 'ADA': 'ADA',\n 'DOGE': 'DOGE',\n 'XYM': 'XYM',\n 'GLMR': 'GLMR',\n 'MOVR': 'MOVR',\n 'ZIL': 'ZIL',\n 'INJ': 'INJ',\n 'KSM': 'KSM',\n 'ZEC': 'ZEC',\n 'NAS': 'NAS',\n // 'POLYGON': [ 'MATIC', 'Polygon', 'POLYGON' ], // todo: after unification\n 'HRC20': 'HECO',\n 'XDC': 'XDC',\n 'ONE': 'ONE',\n 'LAT': 'LAT',\n 'CSPR': 'Casper',\n 'ICP': 'Computer',\n 'XTZ': 'XTZ',\n 'MINA': 'MINA',\n 'BEP20': 'BSC',\n // 'BEP20': [ 'BEP20', 'BSC_BNB', 'bep20' ], // todo: after unification\n 'THETA': 'THETA',\n 'AKT': 'AKT',\n 'AR': 'AR',\n 'CELO': 'CELO',\n 'FIL': 'FIL',\n 'NULS': 'NULS',\n 'ETC': 'ETC',\n 'DASH': 'DASH',\n 'DGB': 'DGB',\n 'BEP2': 'BEP2',\n 'GRIN': 'GRIN',\n 'WAVES': 'WAVES',\n 'ABBC': 'ABBC',\n 'ACA': 'ACA',\n 'QTUM': 'QTUM',\n 'PAC': 'PAC',\n // 'TERRACLASSIC': 'LUNC', // TBD\n // 'TERRA': 'Terra', // TBD\n // 'HEDERA': [ 'HBAR', 'Hedera', 'Hedera Mainnet' ], // todo: after unification\n 'TLOS': 'TLOS',\n 'KARDIA': 'KardiaChain',\n 'FUSE': 'FUSE',\n 'TRC10': 'TRC10',\n 'FIRO': 'FIRO',\n 'FTM': 'Fantom',\n // 'KLAYTN': [ 'klaytn', 'KLAY', 'Klaytn' ], // todo: after unification\n // 'ELROND': [ 'EGLD', 'Elrond eGold', 'MultiversX' ], // todo: after unification\n 'EVER': 'EVER',\n 'KAVA': 'KAVA',\n 'HYDRA': 'HYDRA',\n 'PLCU': 'PLCU',\n 'BRISE': 'BRISE',\n // 'CRC20': [ 'CRO', 'CRO_Chain' ], // todo: after unification\n // 'CONFLUX': [ 'CFX eSpace', 'CFX' ], // todo: after unification\n 'OPTIMISM': 'OPTIMISM',\n 'REEF': 'REEF',\n 'SYS': 'SYS',\n 'VITE': 'VITE',\n 'STX': 'STX',\n 'SXP': 'SXP',\n 'BITCI': 'BITCI',\n // 'ARBITRUM': [ 'ARBI', 'Arbitrum' ], // todo: after unification\n 'XRD': 'XRD',\n 'ASTR': 'ASTAR',\n 'ZEN': 'HORIZEN',\n 'LTO': 'LTO',\n 'ETHW': 'ETHW',\n 'ETHF': 'ETHF',\n 'IOST': 'IOST',\n // 'CHILIZ': [ 'CHZ', 'CHILIZ' ], // todo: after unification\n 'APT': 'APT',\n // 'FLOW': [ 'FLOW', 'Flow' ], // todo: after unification\n 'ONT': 'ONT',\n 'EVMOS': 'EVMOS',\n 'XMR': 'XMR',\n 'OASYS': 'OAS',\n 'OSMO': 'OSMO',\n 'OMAX': 'OMAX Chain',\n 'DESO': 'DESO',\n 'BFIC': 'BFIC',\n 'OHO': 'OHO',\n 'CS': 'CS',\n 'CHEQ': 'CHEQ',\n 'NODL': 'NODL',\n 'NEM': 'XEM',\n 'FRA': 'FRA',\n 'ERGO': 'ERG',\n // todo: below will be uncommented after unification\n // 'BITCOINHD': 'BHD',\n // 'CRUST': 'CRU',\n // 'MINTME': 'MINTME',\n // 'ZENITH': 'ZENITH',\n // 'ZENIQ': 'ZENIQ', // \"ZEN-20\" is different\n // 'BITCOINVAULT': 'BTCV',\n // 'MOBILECOIN': 'MBX',\n // 'PINETWORK': 'PI',\n // 'PI': 'PI',\n // 'REBUS': 'REBUS',\n // 'XODEX': 'XODEX',\n // 'ULTRONGLOW': 'UTG'\n // 'QIBLOCKCHAIN': 'QIE',\n // 'XIDEN': 'XDEN',\n // 'PHAETON': 'PHAE',\n // 'REDLIGHT': 'REDLC',\n // 'VERITISE': 'VTS',\n // 'VERIBLOCK': 'VBK',\n // 'RAMESTTA': 'RAMA',\n // 'BITICA': 'BDCC',\n // 'CROWNSOVEREIGN': 'CSOV',\n // 'DRAC': 'DRC20',\n // 'QCHAIN': 'QDT',\n // 'KINGARU': 'KRU',\n // 'PROOFOFMEMES': 'POM',\n // 'CUBE': 'CUBE',\n // 'CADUCEUS': 'CMP',\n // 'VEIL': 'VEIL',\n // 'ENERGYWEB': 'EWT',\n // 'CYPHERIUM': 'CPH',\n // 'LBRY': 'LBC',\n // 'ETHERCOIN': 'ETE',\n // undetermined chains:\n // LEX (for LexThum), TAYCAN (for TRICE), SFL (probably TAYCAN), OMNIA (for APEX), NAC (for NAC), KAG (Kinesis), CEM (crypto emergency), XVM (for Venidium), NEVM (for NEVM), IGT20 (for IGNITE), FILM (FILMCredits), CC (CloudCoin), MERGE (MERGE), LTNM (Bitcoin latinum), PLUGCN ( PlugChain), DINGO (dingo), LED (LEDGIS), AVAT (AVAT), VSOL (Vsolidus), EPIC (EPIC cash), NFC (netflowcoin), mrx (Metrix Coin), Idena (idena network), PKT (PKT Cash), BondDex (BondDex), XBN (XBN), KALAM (Kalamint), REV (RChain), KRC20 (MyDeFiPet), ARC20 (Hurricane Token), GMD (Coop network), BERS (Berith), ZEBI (Zebi), BRC (Baer Chain), DAPS (DAPS Coin), APL (Gold Secured Currency), NDAU (NDAU), WICC (WICC), UPG (Unipay God), TSL (TreasureSL), MXW (Maxonrow), CLC (Cifculation), SMH (SMH Coin), XIN (CPCoin), RDD (ReddCoin), OK (Okcash), KAR (KAR), CCX (ConcealNetwork),\n },\n 'defaultType': 'spot',\n 'fetchBalance': {\n 'type': 'spot', // 'spot', 'swap', 'account'\n },\n 'accountsByType': {\n 'spot': 'spot',\n 'swap': 'swap',\n },\n 'createMarketBuyOrderRequiresPrice': true,\n 'brokerId': 'CCXTxBitmart000',\n },\n });\n }\n isUsingForcedProxy(params = {}, api = 'public') {\n if (api === 'private')\n return true;\n return false;\n }\n async fetchTime(params = {}) {\n /**\n * @method\n * @name bitmart#fetchTime\n * @description fetches the current integer timestamp in milliseconds from the exchange server\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {int} the current integer timestamp in milliseconds from the exchange server\n */\n const response = await this.publicGetSystemTime(params);\n //\n // {\n // \"message\":\"OK\",\n // \"code\":1000,\n // \"trace\":\"c4e5e5b7-fe9f-4191-89f7-53f6c5bf9030\",\n // \"data\":{\n // \"server_time\":1599843709578\n // }\n // }\n //\n const data = this.safeValue(response, 'data', {});\n return this.safeInteger(data, 'server_time');\n }\n async fetchStatus(params = {}) {\n /**\n * @method\n * @name bitmart#fetchStatus\n * @description the latest known information on the availability of the exchange API\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} a [status structure]{@link https://docs.ccxt.com/#/?id=exchange-status-structure}\n */\n const options = this.safeValue(this.options, 'fetchStatus', {});\n const defaultType = this.safeString(this.options, 'defaultType');\n let type = this.safeString(options, 'type', defaultType);\n type = this.safeString(params, 'type', type);\n params = this.omit(params, 'type');\n const response = await this.publicGetSystemService(params);\n //\n // {\n // \"message\": \"OK\",\n // \"code\": 1000,\n // \"trace\": \"1d3f28b0-763e-4f78-90c4-5e3ad19dc595\",\n // \"data\": {\n // \"service\": [\n // {\n // \"title\": \"Spot API Stop\",\n // \"service_type\": \"spot\",\n // \"status\": 2,\n // \"start_time\": 1648639069125,\n // \"end_time\": 1648639069125\n // },\n // {\n // \"title\": \"Contract API Stop\",\n // \"service_type\": \"contract\",\n // \"status\": 2,\n // \"start_time\": 1648639069125,\n // \"end_time\": 1648639069125\n // }\n // ]\n // }\n // }\n //\n const data = this.safeValue(response, 'data', {});\n const services = this.safeValue(data, 'service', []);\n const servicesByType = this.indexBy(services, 'service_type');\n if (type === 'swap') {\n type = 'contract';\n }\n const service = this.safeValue(servicesByType, type);\n let status = undefined;\n let eta = undefined;\n if (service !== undefined) {\n const statusCode = this.safeInteger(service, 'status');\n if (statusCode === 2) {\n status = 'ok';\n }\n else {\n status = 'maintenance';\n eta = this.safeInteger(service, 'end_time');\n }\n }\n return {\n 'status': status,\n 'updated': undefined,\n 'eta': eta,\n 'url': undefined,\n 'info': response,\n };\n }\n async fetchSpotMarkets(params = {}) {\n const response = await this.publicGetSpotV1SymbolsDetails(params);\n //\n // {\n // \"message\":\"OK\",\n // \"code\":1000,\n // \"trace\":\"a67c9146-086d-4d3f-9897-5636a9bb26e1\",\n // \"data\":{\n // \"symbols\":[\n // {\n // \"symbol\": \"BTC_USDT\",\n // \"symbol_id\": 53,\n // \"base_currency\": \"BTC\",\n // \"quote_currency\": \"USDT\",\n // \"base_min_size\": \"0.000010000000000000000000000000\",\n // \"base_max_size\": \"100000000.000000000000000000000000000000\",\n // \"price_min_precision\": -1,\n // \"price_max_precision\": 2,\n // \"quote_increment\": \"0.00001\", // Api docs says \"The minimum order quantity is also the minimum order quantity increment\", however I think they mistakenly use the term 'order quantity'\n // \"expiration\": \"NA\",\n // \"min_buy_amount\": \"5.000000000000000000000000000000\",\n // \"min_sell_amount\": \"5.000000000000000000000000000000\",\n // \"trade_status\": \"trading\"\n // },\n // ]\n // }\n // }\n //\n const data = this.safeValue(response, 'data', {});\n const symbols = this.safeValue(data, 'symbols', []);\n const result = [];\n for (let i = 0; i < symbols.length; i++) {\n const market = symbols[i];\n const id = this.safeString(market, 'symbol');\n const numericId = this.safeInteger(market, 'symbol_id');\n const baseId = this.safeString(market, 'base_currency');\n const quoteId = this.safeString(market, 'quote_currency');\n const base = this.safeCurrencyCode(baseId);\n const quote = this.safeCurrencyCode(quoteId);\n const symbol = base + '/' + quote;\n const minBuyCost = this.safeString(market, 'min_buy_amount');\n const minSellCost = this.safeString(market, 'min_sell_amount');\n const minCost = Precise.stringMax(minBuyCost, minSellCost);\n const baseMinSize = this.safeNumber(market, 'base_min_size');\n result.push({\n 'id': id,\n 'numericId': numericId,\n 'symbol': symbol,\n 'base': base,\n 'quote': quote,\n 'settle': undefined,\n 'baseId': baseId,\n 'quoteId': quoteId,\n 'settleId': undefined,\n 'type': 'spot',\n 'spot': true,\n 'margin': false,\n 'swap': false,\n 'future': false,\n 'option': false,\n 'active': true,\n 'contract': false,\n 'linear': undefined,\n 'inverse': undefined,\n 'contractSize': undefined,\n 'expiry': undefined,\n 'expiryDatetime': undefined,\n 'strike': undefined,\n 'optionType': undefined,\n 'precision': {\n 'amount': baseMinSize,\n 'price': this.parseNumber(this.parsePrecision(this.safeString(market, 'price_max_precision'))),\n },\n 'limits': {\n 'leverage': {\n 'min': undefined,\n 'max': undefined,\n },\n 'amount': {\n 'min': baseMinSize,\n 'max': this.safeNumber(market, 'base_max_size'),\n },\n 'price': {\n 'min': undefined,\n 'max': undefined,\n },\n 'cost': {\n 'min': this.parseNumber(minCost),\n 'max': undefined,\n },\n },\n 'created': undefined,\n 'info': market,\n });\n }\n return result;\n }\n async fetchContractMarkets(params = {}) {\n const response = await this.publicGetContractPublicDetails(params);\n //\n // {\n // \"code\": 1000,\n // \"message\": \"Ok\",\n // \"trace\": \"9b92a999-9463-4c96-91a4-93ad1cad0d72\",\n // \"data\": {\n // \"symbols\": [{\n // \"symbol\": \"BTCUSDT\",\n // \"product_type\": 1,\n // \"open_timestamp\": 1594080000,\n // \"expire_timestamp\": 0,\n // \"settle_timestamp\": 0,\n // \"base_currency\": \"BTC\",\n // \"quote_currency\": \"USDT\",\n // \"last_price\": \"23920\",\n // \"volume_24h\": \"18969368\",\n // \"turnover_24h\": \"458933659.7858\",\n // \"index_price\": \"23945.25191635\",\n // \"index_name\": \"BTCUSDT\",\n // \"contract_size\": \"0.001\",\n // \"min_leverage\": \"1\",\n // \"max_leverage\": \"100\",\n // \"price_precision\": \"0.1\",\n // \"vol_precision\": \"1\",\n // \"max_volume\": \"500000\",\n // \"min_volume\": \"1\"\n // },\n // ...\n // ]\n // }\n // }\n //\n const data = this.safeValue(response, 'data', {});\n const symbols = this.safeValue(data, 'symbols', []);\n const result = [];\n for (let i = 0; i < symbols.length; i++) {\n const market = symbols[i];\n const id = this.safeString(market, 'symbol');\n const baseId = this.safeString(market, 'base_currency');\n const quoteId = this.safeString(market, 'quote_currency');\n const base = this.safeCurrencyCode(baseId);\n const quote = this.safeCurrencyCode(quoteId);\n const settleId = 'USDT'; // this is bitmart's ID for usdt\n const settle = this.safeCurrencyCode(settleId);\n const symbol = base + '/' + quote + ':' + settle;\n const productType = this.safeInteger(market, 'product_type');\n const isSwap = (productType === 1);\n const isFutures = (productType === 2);\n let expiry = this.safeInteger(market, 'expire_timestamp');\n if (!isFutures && (expiry === 0)) {\n expiry = undefined;\n }\n result.push({\n 'id': id,\n 'numericId': undefined,\n 'symbol': symbol,\n 'base': base,\n 'quote': quote,\n 'settle': settle,\n 'baseId': baseId,\n 'quoteId': quoteId,\n 'settleId': settleId,\n 'type': isSwap ? 'swap' : 'future',\n 'spot': false,\n 'margin': false,\n 'swap': isSwap,\n 'future': isFutures,\n 'option': false,\n 'active': true,\n 'contract': true,\n 'linear': true,\n 'inverse': false,\n 'contractSize': this.safeNumber(market, 'contract_size'),\n 'expiry': expiry,\n 'expiryDatetime': this.iso8601(expiry),\n 'strike': undefined,\n 'optionType': undefined,\n 'precision': {\n 'amount': this.safeNumber(market, 'vol_precision'),\n 'price': this.safeNumber(market, 'price_precision'),\n },\n 'limits': {\n 'leverage': {\n 'min': this.safeNumber(market, 'min_leverage'),\n 'max': this.safeNumber(market, 'max_leverage'),\n },\n 'amount': {\n 'min': this.safeNumber(market, 'min_volume'),\n 'max': this.safeNumber(market, 'max_volume'),\n },\n 'price': {\n 'min': undefined,\n 'max': undefined,\n },\n 'cost': {\n 'min': undefined,\n 'max': undefined,\n },\n },\n 'created': this.safeInteger(market, 'open_timestamp'),\n 'info': market,\n });\n }\n return result;\n }\n async fetchMarkets(params = {}) {\n /**\n * @method\n * @name bitmart#fetchMarkets\n * @description retrieves data on all markets for bitmart\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object[]} an array of objects representing market data\n */\n const spot = await this.fetchSpotMarkets(params);\n const contract = await this.fetchContractMarkets(params);\n return this.arrayConcat(spot, contract);\n }\n safeCurrencyCode(currencyId) {\n const networkRegex = /[-|_][A-Z0-9]+$/;\n return currencyId.replace(networkRegex, ''); // handle USDT-TRC20 or USDT_TRC20 > USDT alias\n }\n safeCurrencyByCode(code) {\n return this.safeValue(this.currencies, code); // in this class, we exceptionnaly use code as an ID\n }\n async fetchCurrencies(params = {}) {\n /**\n * @method\n * @name bitmart#fetchCurrencies\n * @description fetches all available currencies on an exchange\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} an associative dictionary of currencies\n */\n const response = await this.publicGetAccountV1Currencies(params);\n //\n // {\n // \"code\": 1000,\n // \"trace\":\"886fb6ae-456b-4654-b4e0-d681ac05cea1\",\n // \"message\": \"OK\",\n // \"data\": {\n // \"currencies\": [\n // {\n // \"currency\": \"USDT\",\n // \"name\": \"Tether USD\",\n // \"contract_address\": null,\n // \"network\": \"OMNI\",\n // \"withdraw_enabled\": false,\n // \"deposit_enabled\": false,\n // \"withdraw_minsize\": null,\n // \"withdraw_minfee\": null\n // },\n // {\n // \"currency\": \"USDT-TRC20\",\n // \"name\": \"USDT-TRC20\",\n // \"contract_address\": \"TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t\",\n // \"network\": \"TRC20\",\n // \"withdraw_enabled\": true,\n // \"deposit_enabled\": true,\n // \"withdraw_minsize\": \"10\",\n // \"withdraw_minfee\": \"1\"\n // },\n // {\n // \"currency\": \"USDT-ERC20\",\n // \"name\": \"USDT-ERC20\",\n // \"contract_address\": \"0xdac17f958d2ee523a2206206994597c13d831ec7\",\n // \"network\": \"ERC20\",\n // \"withdraw_enabled\": true,\n // \"deposit_enabled\": true,\n // \"withdraw_minsize\": \"26\",\n // \"withdraw_minfee\": \"13\"\n // },\n // {\n // \"currency\": \"USDT-BSC\",\n // \"name\": \"USDT-BSC\",\n // \"contract_address\": \"0x55d398326f99059fF775485246999027B3197955\",\n // \"network\": \"BEP20(BSC)\",\n // \"withdraw_enabled\": true,\n // \"deposit_enabled\": true,\n // \"withdraw_minsize\": \"2\",\n // \"withdraw_minfee\": \"1\"\n // }\n // ]\n // }\n // }\n //\n const data = this.safeValue(response, 'data', {});\n const currencies = this.safeValue(data, 'currencies', []);\n const result = {};\n this.options['currencyIdsByCodeAndNetwork'] = {};\n for (let i = 0; i < currencies.length; i++) {\n const currency = currencies[i];\n const currencyId = this.safeString(currency, 'currency');\n const networkId = this.safeString(currency, 'network');\n const networks = this.safeValue(this.options, 'networksById', {});\n const networkCode = this.safeString(networks, networkId, networkId); // manage duplicates (e.g. MATIC and Polygon)\n const code = this.safeCurrencyCode(currencyId);\n if (this.safeValue(this.options['currencyIdsByCodeAndNetwork'], code) === undefined) {\n this.options['currencyIdsByCodeAndNetwork'][code] = {};\n }\n this.options['currencyIdsByCodeAndNetwork'][code][networkCode] = this.safeString(currency, 'currency'); // add currencyId for specific network\n const isWithdrawalEnabled = this.safeValue(currency, 'withdraw_enabled');\n const isDepositEnabled = this.safeValue(currency, 'deposit_enabled');\n const fee = this.safeNumber(currency, 'withdraw_minfee');\n const minWithdrawAmount = this.safeNumber(currency, 'withdraw_minsize');\n const network = {\n 'id': currencyId,\n 'network': networkCode,\n 'deposit': isDepositEnabled,\n 'withdraw': isWithdrawalEnabled,\n 'fee': fee,\n 'limits': {\n 'amount': { 'min': undefined, 'max': undefined },\n 'withdraw': { 'min': minWithdrawAmount, 'max': undefined },\n },\n };\n if (result[code] === undefined) {\n result[code] = {\n 'id': code,\n 'code': code,\n 'active': isDepositEnabled && isWithdrawalEnabled,\n 'deposit': isDepositEnabled,\n 'withdraw': isWithdrawalEnabled,\n 'networks': [network],\n };\n }\n else {\n result[code].networks.push(network);\n result[code].active = result[code].active || isWithdrawalEnabled || isDepositEnabled;\n result[code].deposit = result[code].deposit || isDepositEnabled;\n result[code].withdraw = result[code].withdraw || isWithdrawalEnabled;\n // const currencyId = this.safeString (currency, 'currency'); // USDC or USDC-ERC20\n // const currencyCode = this.safeCurrencyCode (currencyId);\n // if (this.safeValue (this.options['currencyIdsByCodeAndNetwork'], currencyCode) === undefined) {\n // this.options['currencyIdsByCodeAndNetwork'][currencyCode] = {};\n // }\n // const networkId = this.safeString (currency, 'network');\n // this.options['currencyIdsByCodeAndNetwork'][currencyCode][networkId] = this.safeString (currency, 'currency'); // add currencyId for specific network\n // const isDepositEnabled = this.safeValue (currency, 'deposit_enabled');\n // const isWithdrawEnabled = this.safeValue (currency, 'withdraw_enabled');\n // const networkCode = networkId;\n // const network = {\n // 'id': networkId,\n // 'network': networkCode,\n // 'active': isDepositEnabled && isWithdrawEnabled,\n // 'deposit': isDepositEnabled,\n // 'withdraw': isWithdrawEnabled,\n // 'fee': this.safeNumber (currency, 'withdraw_minfee'), // may be undefined\n // 'precision': undefined,\n // 'limits': {\n // 'withdraw': {\n // 'min': this.safeNumber (currency, 'withdraw_minsize'), // may be undefined\n // 'max': undefined,\n // },\n // },\n // };\n // if (this.safeValue (result, currencyCode) === undefined) {\n // result[currencyCode] = {\n // 'id': currencyCode, // be careful, it's not the same as currencyId\n // 'code': currencyCode,\n // 'active': isDepositEnabled && isWithdrawEnabled,\n // 'deposit': isDepositEnabled,\n // 'withdraw': isWithdrawEnabled,\n // 'networks': [ network ],\n // };\n // } else {\n // const formattedCurrency = result[currencyCode]; // safeValue copies the object\n // formattedCurrency['active'] = formattedCurrency['active'] || (isDepositEnabled && isWithdrawEnabled);\n // formattedCurrency['deposit'] = formattedCurrency['deposit'] || isDepositEnabled;\n // formattedCurrency['withdraw'] = formattedCurrency['withdraw'] || isWithdrawEnabled;\n // formattedCurrency['networks'].push (network);\n }\n }\n await this.cache.set({\n 'data': this.options['currencyIdsByCodeAndNetwork'],\n 'key': currencyIdsByCodeAndNetworkCodeCacheIdentifier(this.id),\n 'clone': false,\n 'ttl': null,\n });\n this.currencies = this.deepExtend(this.currencies, result);\n return result;\n }\n async fetchTransactionFee(code, params = {}) {\n /**\n * @method\n * @name bitmart#fetchTransactionFee\n * @deprecated\n * @description please use fetchDepositWithdrawFee instead\n * @param {string} code unified currency code\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} a [fee structure]{@link https://docs.ccxt.com/#/?id=fee-structure}\n */\n await this.loadMarkets();\n const currency = this.currency(code);\n const request = {\n 'currency': currency['id'],\n };\n const response = await this.privateGetAccountV1WithdrawCharge(this.extend(request, params));\n //\n // {\n // \"message\": \"OK\",\n // \"code\": \"1000\",\n // \"trace\": \"3ecc0adf-91bd-4de7-aca1-886c1122f54f\",\n // \"data\": {\n // \"today_available_withdraw_BTC\": \"100.0000\",\n // \"min_withdraw\": \"0.005\",\n // \"withdraw_precision\": \"8\",\n // \"withdraw_fee\": \"0.000500000000000000000000000000\"\n // }\n // }\n //\n const data = response['data'];\n const withdrawFees = {};\n withdrawFees[code] = this.safeNumber(data, 'withdraw_fee');\n return {\n 'info': response,\n 'withdraw': withdrawFees,\n 'deposit': {},\n };\n }\n parseDepositWithdrawFee(fee, currency = undefined) {\n //\n // {\n // \"today_available_withdraw_BTC\": \"100.0000\",\n // \"min_withdraw\": \"0.005\",\n // \"withdraw_precision\": \"8\",\n // \"withdraw_fee\": \"0.000500000000000000000000000000\"\n // }\n //\n return {\n 'info': fee,\n 'withdraw': {\n 'fee': this.safeNumber(fee, 'withdraw_fee'),\n 'percentage': undefined,\n },\n 'deposit': {\n 'fee': undefined,\n 'percentage': undefined,\n },\n 'networks': {},\n };\n }\n async fetchDepositWithdrawFee(code, params = {}) {\n /**\n * @method\n * @name bitmart#fetchDepositWithdrawFee\n * @description fetch the fee for deposits and withdrawals\n * @param {string} code unified currency code\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} a [fee structure]{@link https://docs.ccxt.com/#/?id=fee-structure}\n */\n await this.loadMarkets();\n const currency = this.currency(code);\n const request = {\n 'currency': currency['id'],\n };\n const response = await this.privateGetAccountV1WithdrawCharge(this.extend(request, params));\n //\n // {\n // \"message\": \"OK\",\n // \"code\": \"1000\",\n // \"trace\": \"3ecc0adf-91bd-4de7-aca1-886c1122f54f\",\n // \"data\": {\n // \"today_available_withdraw_BTC\": \"100.0000\",\n // \"min_withdraw\": \"0.005\",\n // \"withdraw_precision\": \"8\",\n // \"withdraw_fee\": \"0.000500000000000000000000000000\"\n // }\n // }\n //\n const data = response['data'];\n return this.parseDepositWithdrawFee(data);\n }\n parseTicker(ticker, market = undefined) {\n //\n // spot\n //\n // {\n // \"symbol\": \"SOLAR_USDT\",\n // \"last_price\": \"0.020342\",\n // \"quote_volume_24h\": \"56817.811802\",\n // \"base_volume_24h\": \"2172060\",\n // \"high_24h\": \"0.256000\",\n // \"low_24h\": \"0.016980\",\n // \"open_24h\": \"0.022309\",\n // \"close_24h\": \"0.020342\",\n // \"best_ask\": \"0.020389\",\n // \"best_ask_size\": \"339.000000000000000000000000000000\",\n // \"best_bid\": \"0.020342\",\n // \"best_bid_size\": \"3369.000000000000000000000000000000\",\n // \"fluctuation\": \"-0.0882\",\n // \"url\": \"https://www.bitmart.com/trade?symbol=SOLAR_USDT\",\n // \"timestamp\": 1667403439367\n // }\n //\n // swap\n //\n // {\n // \"contract_symbol\":\"DOGEUSDT\",\n // \"last_price\":\"0.130340\",\n // \"index_price\":\"0.13048245\",\n // \"last_funding_rate\":\"0.00002287\",\n // \"price_change_percent_24h\":\"-2.074\",\n // \"volume_24h\":\"113705028.59482228\",\n // \"url\":\"https://futures.bitmart.com/en?symbol=DOGEUSDT\",\n // \"high_price\":\"0.134520\",\n // \"low_price\":\"0.128570\",\n // \"legal_coin_price\":\"0.1302699\"\n // }\n //\n const timestamp = this.safeInteger(ticker, 'timestamp');\n const marketId = this.safeString2(ticker, 'symbol', 'contract_symbol');\n market = this.safeMarket(marketId, market);\n const symbol = market['symbol'];\n const last = this.safeString2(ticker, 'close_24h', 'last_price');\n let percentage = this.safeString(ticker, 'price_change_percent_24h');\n if (percentage === undefined) {\n const percentageRaw = this.safeString(ticker, 'fluctuation');\n if ((percentageRaw !== undefined) && (percentageRaw !== '0')) { // a few tickers show strictly '0' in fluctuation field\n const direction = percentageRaw[0];\n percentage = direction + Precise.stringMul(percentageRaw.replace(direction, ''), '100');\n }\n else if (percentageRaw === '0') {\n percentage = '0';\n }\n }\n const baseVolume = this.safeString(ticker, 'base_volume_24h');\n let quoteVolume = this.safeString(ticker, 'quote_volume_24h');\n quoteVolume = this.safeString(ticker, 'volume_24h', quoteVolume);\n const average = this.safeString2(ticker, 'avg_price', 'index_price');\n const high = this.safeString2(ticker, 'high_24h', 'high_price');\n const low = this.safeString2(ticker, 'low_24h', 'low_price');\n return this.safeTicker({\n 'symbol': symbol,\n 'timestamp': timestamp,\n 'datetime': this.iso8601(timestamp),\n 'high': high,\n 'low': low,\n 'bid': this.safeString(ticker, 'best_bid'),\n 'bidVolume': this.safeString(ticker, 'best_bid_size'),\n 'ask': this.safeString(ticker, 'best_ask'),\n 'askVolume': this.safeString(ticker, 'best_ask_size'),\n 'vwap': undefined,\n 'open': this.safeString(ticker, 'open_24h'),\n 'close': last,\n 'last': last,\n 'previousClose': undefined,\n 'change': undefined,\n 'percentage': percentage,\n 'average': average,\n 'baseVolume': baseVolume,\n 'quoteVolume': quoteVolume,\n 'info': ticker,\n }, market);\n }\n parseTickerV3(ticker, market = undefined) {\n //\n // spot\n //\n // {\n // \"symbol\": \"VINA_USDT\",\n // \"last\": \"0.03410\",\n // \"v_24h\": \"0\",\n // \"qv_24h\": \"0.00000\",\n // \"open_24h\": \"0.03410\",\n // \"high_24h\": \"0.03410\",\n // \"low_24h\": \"0.03410\",\n // \"fluctuation\": \"0.00000\",\n // \"bid_px\": \"0.0341\",\n // \"bid_sz\": \"499\",\n // \"ask_px\": \"0.0343\",\n // \"ask_sz\": \"1752\",\n // \"ts\": \"1699993717363\"\n // }\n const timestamp = this.safeInteger(ticker, 'ts', this.milliseconds());\n const marketId = this.safeString(ticker, 'symbol');\n market = this.safeMarket(marketId, market);\n const symbol = market['symbol'];\n const last = this.safeString(ticker, 'last');\n let percentage = undefined;\n const percentageRaw = this.safeString(ticker, 'fluctuation');\n if ((percentageRaw !== undefined) && (percentageRaw !== '0')) { // a few tickers show strictly '0' in fluctuation field\n const direction = percentageRaw[0];\n percentage = direction + Precise.stringMul(percentageRaw.replace(direction, ''), '100');\n }\n else if (percentageRaw === '0') {\n percentage = '0';\n }\n return this.safeTicker({\n 'symbol': symbol,\n 'timestamp': timestamp,\n 'datetime': this.iso8601(timestamp),\n 'high': this.safeString(ticker, 'high_24h'),\n 'low': this.safeString(ticker, 'low_24h'),\n 'bid': this.safeString(ticker, 'bid_px'),\n 'bidVolume': this.safeString(ticker, 'bid_sz'),\n 'ask': this.safeString(ticker, 'ask_px'),\n 'askVolume': this.safeString(ticker, 'ask_sz'),\n 'vwap': undefined,\n 'open': this.safeString(ticker, 'open_24h'),\n 'close': last,\n 'last': last,\n 'previousClose': undefined,\n 'change': undefined,\n 'percentage': percentage,\n 'average': undefined,\n 'baseVolume': this.safeString(ticker, 'v_24h'),\n 'quoteVolume': this.safeString(ticker, 'qv_24h'),\n 'info': ticker,\n }, market);\n }\n async fetchTicker(symbol, params = {}) {\n /**\n * @method\n * @name bitmart#fetchTicker\n * @description fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market\n * @param {string} symbol unified symbol of the market to fetch the ticker for\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} a [ticker structure]{@link https://docs.ccxt.com/#/?id=ticker-structure}\n */\n await this.loadMarkets();\n const market = this.market(symbol);\n const request = {};\n let response = undefined;\n if (market['swap']) {\n request['contract_symbol'] = market['id'];\n response = await this.publicGetContractV1Tickers(this.extend(request, params));\n }\n else if (market['spot']) {\n request['symbol'] = market['id'];\n response = await this.publicGetSpotQuotationV3Ticker(this.extend(request, params));\n }\n else {\n throw new MarketTypeNotSupportedError(market['type']).addMessage('only spot and swap markets are accepted').exchange(this.id);\n }\n //\n // spot\n //\n // {\n // \"message\":\"OK\",\n // \"code\":1000,\n // \"trace\":\"6aa5b923-2f57-46e3-876d-feca190e0b82\",\n // \"data\":{\n // \"tickers\":[\n // {\n // \"symbol\":\"ETH_BTC\",\n // \"last_price\":\"0.036037\",\n // \"quote_volume_24h\":\"4380.6660000000\",\n // \"base_volume_24h\":\"159.3582006712\",\n // \"high_24h\":\"0.036972\",\n // \"low_24h\":\"0.035524\",\n // \"open_24h\":\"0.036561\",\n // \"close_24h\":\"0.036037\",\n // \"best_ask\":\"0.036077\",\n // \"best_ask_size\":\"9.9500\",\n // \"best_bid\":\"0.035983\",\n // \"best_bid_size\":\"4.2792\",\n // \"fluctuation\":\"-0.0143\",\n // \"url\":\"https://www.bitmart.com/trade?symbol=ETH_BTC\"\n // }\n // ]\n // }\n // }\n //\n // swap\n //\n // {\n // \"message\":\"OK\",\n // \"code\":1000,\n // \"trace\":\"4a0ebceb-d3f7-45a3-8feb-f61e230e24cd\",\n // \"data\":{\n // \"tickers\":[\n // {\n // \"contract_symbol\":\"DOGEUSDT\",\n // \"last_price\":\"0.130180\",\n // \"index_price\":\"0.13028635\",\n // \"last_funding_rate\":\"0.00002025\",\n // \"price_change_percent_24h\":\"-2.326\",\n // \"volume_24h\":\"116789313.01797258\",\n // \"url\":\"https://futures.bitmart.com/en?symbol=DOGEUSDT\",\n // \"high_price\":\"0.134520\",\n // \"low_price\":\"0.128570\",\n // \"legal_coin_price\":\"0.13017401\"\n // }\n // ]\n // }\n // }\n //\n const data = this.safeValue(response, 'data', {});\n // fails in naming for contract tickers 'contract_symbol'\n let tickersById = undefined;\n let parsedTicker = undefined;\n if (market['spot']) {\n parsedTicker = this.parseTickerV3(data, market);\n }\n else if (market['swap']) {\n const tickers = this.safeValue(data, 'tickers', []);\n tickersById = this.indexBy(tickers, 'contract_symbol');\n const ticker = this.safeValue(tickersById, market['id']);\n parsedTicker = this.parseTicker(ticker, market);\n }\n return parsedTicker;\n }\n async fetchTickers(symbols = undefined, params = {}) {\n /**\n * @method\n * @name bitmart#fetchTickers\n * @description fetches price tickers for multiple markets, statistical information calculated over the past 24 hours for each market\n * @see https://developer-pro.bitmart.com/en/spot/#get-ticker-of-all-pairs-v2\n * @param {string[]|undefined} symbols unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} a dictionary of [ticker structures]{@link https://docs.ccxt.com/#/?id=ticker-structure}\n */\n await this.loadMarkets();\n symbols = this.marketSymbols(symbols);\n let type = undefined;\n let market = undefined;\n if (symbols !== undefined) {\n const symbol = this.safeValue(symbols, 0);\n market = this.market(symbol);\n }\n [type, params] = this.handleMarketTypeAndParams('fetchTickers', market, params);\n let response = undefined;\n if (type === 'spot') {\n response = await this.publicGetSpotV2Ticker(params);\n }\n else if (type === 'swap') {\n response = await this.publicGetContractV1Tickers(params);\n }\n else {\n throw new MarketTypeNotSupportedError(type).addMessage('only spot and swap markets are accepted').exchange(this.id);\n }\n const data = this.safeValue(response, 'data', {});\n const tickers = this.safeValue(data, 'tickers', []);\n const result = {};\n for (let i = 0; i < tickers.length; i++) {\n const ticker = this.parseTicker(tickers[i]);\n const symbol = ticker['symbol'];\n result[symbol] = ticker;\n }\n return this.filterByArrayTickers(result, 'symbol', symbols);\n }\n async fetchOrderBook(symbol, limit = undefined, params = {}) {\n /**\n * @method\n * @name bitmart#fetchOrderBook\n * @description fetches information on open orders with bid (buy) and ask (sell) prices, volumes and other data\n * @see https://developer-pro.bitmart.com/en/spot/#get-depth-v3\n * @see https://developer-pro.bitmart.com/en/futures/#get-market-depth\n * @param {string} symbol unified symbol of the market to fetch the order book for\n * @param {int} [limit] the maximum amount of order book entries to return\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} A dictionary of [order book structures]{@link https://docs.ccxt.com/#/?id=order-book-structure} indexed by market symbols\n */\n await this.loadMarkets();\n const market = this.market(symbol);\n const request = {\n 'symbol': market['id'],\n };\n let response = undefined;\n if (market['spot']) {\n if (limit !== undefined) {\n request['limit'] = limit; // default 35, max 50\n }\n response = await this.publicGetSpotQuotationV3Books(this.extend(request, params));\n }\n else if (market['swap']) {\n response = await this.publicGetContractPublicDepth(this.extend(request, params));\n }\n else {\n throw new ExchangeError().addMessage('fetchOrderBook() does not support ' + market['type'] + ' markets, only spot and swap markets are accepted').exchange(this.id);\n }\n //\n // spot\n //\n // {\n // \"code\": 1000,\n // \"message\": \"success\",\n // \"data\": {\n // \"ts\": \"1695264191808\",\n // \"symbol\": \"BTC_USDT\",\n // \"asks\": [\n // [\"26942.57\",\"0.06492\"],\n // [\"26942.73\",\"0.05447\"],\n // [\"26943.00\",\"0.07154\"]\n // ],\n // \"bids\": [\n // [\"26942.45\",\"0.00074\"],\n // [\"26941.53\",\"0.00371\"],\n // [\"26940.94\",\"0.08992\"]\n // ]\n // },\n // \"trace\": \"430a7f69581d4258a8e4b424dfb10782.73.16952341919017619\"\n // }\n //\n // swap\n //\n // {\n // \"code\": 1000,\n // \"message\": \"Ok\",\n // \"data\": {\n // \"asks\": [\n // [\"26938.3\",\"3499\",\"3499\"],\n // [\"26938.5\",\"14702\",\"18201\"],\n // [\"26938.6\",\"20457\",\"38658\"]\n // ],\n // \"bids\": [\n // [\"26938.2\",\"20\",\"20\"],\n // [\"26937.9\",\"1913\",\"1933\"],\n // [\"26937.8\",\"2588\",\"4521\"]\n // ],\n // \"timestamp\": 1695264383999,\n // \"symbol\": \"BTCUSDT\"\n // },\n // \"trace\": \"4cad855074664097ac6ba5258c47305d.72.16952643834721135\"\n // }\n //\n const data = this.safeValue(response, 'data', {});\n const timestamp = this.safeInteger2(data, 'ts', 'timestamp');\n return this.parseOrderBook(data, market['symbol'], timestamp);\n }\n parseTrade(trade, market = undefined) {\n //\n // public fetchTrades spot ( amount = count * price )\n //\n // {\n // \"amount\": \"818.94\",\n // \"order_time\": \"1637601839035\", // ETH/USDT\n // \"price\": \"4221.99\",\n // \"count\": \"0.19397\",\n // \"type\": \"buy\"\n // }\n //\n // spot: fetchMyTrades\n //\n // {\n // \"tradeId\":\"182342999769370687\",\n // \"orderId\":\"183270218784142990\",\n // \"clientOrderId\":\"183270218784142990\",\n // \"symbol\":\"ADA_USDT\",\n // \"side\":\"buy\",\n // \"orderMode\":\"spot\",\n // \"type\":\"market\",\n // \"price\":\"0.245948\",\n // \"size\":\"20.71\",\n // \"notional\":\"5.09358308\",\n // \"fee\":\"0.00509358\",\n // \"feeCoinName\":\"USDT\",\n // \"tradeRole\":\"taker\",\n // \"createTime\":1695658457836,\n // }\n //\n // swap: fetchMyTrades\n //\n // {\n // \"order_id\": \"230930336848609\",\n // \"trade_id\": \"6212604014\",\n // \"symbol\": \"BTCUSDT\",\n // \"side\": 3,\n // \"price\": \"26910.4\",\n // \"vol\": \"1\",\n // \"exec_type\": \"Taker\",\n // \"profit\": false,\n // \"create_time\": 1695961596692,\n // \"realised_profit\": \"-0.0003\",\n // \"paid_fees\": \"0.01614624\"\n // }\n //\n // ws swap\n //\n // {\n // 'fee': '-0.000044502',\n // 'feeCcy': 'USDT',\n // 'fillPrice': '74.17',\n // 'fillQty': '1',\n // 'lastTradeID': 6802340762\n // }\n //\n const timestamp = this.safeIntegerN(trade, ['order_time', 'createTime', 'create_time']);\n const isPublicTrade = ('order_time' in trade);\n let amount = undefined;\n let cost = undefined;\n let type = undefined;\n let side = undefined;\n if (isPublicTrade) {\n amount = this.safeString(trade, 'count');\n cost = this.safeString(trade, 'amount');\n side = this.safeString(trade, 'type');\n }\n else {\n amount = this.safeStringN(trade, ['size', 'vol', 'fillQty']);\n cost = this.safeString(trade, 'notional');\n type = this.safeString(trade, 'type');\n side = this.parseOrderSide(this.safeString(trade, 'side'));\n }\n const marketId = this.safeString(trade, 'symbol');\n market = this.safeMarket(marketId, market);\n const feeCostString = this.safeString2(trade, 'fee', 'paid_fees');\n let fee = undefined;\n if (feeCostString !== undefined) {\n const feeCurrencyId = this.safeString(trade, 'feeCoinName');\n let feeCurrencyCode = this.safeCurrencyCode(feeCurrencyId);\n if (feeCurrencyCode === undefined) {\n feeCurrencyCode = (side === 'buy') ? market['base'] : market['quote'];\n }\n fee = {\n 'cost': feeCostString,\n 'currency': feeCurrencyCode,\n };\n }\n return this.safeTrade({\n 'info': trade,\n 'id': this.safeStringN(trade, ['tradeId', 'trade_id', 'lastTradeID']),\n 'order': this.safeString2(trade, 'orderId', 'order_id'),\n 'timestamp': timestamp,\n 'datetime': this.iso8601(timestamp),\n 'symbol': market['symbol'],\n 'type': type,\n 'side': side,\n 'price': this.safeString2(trade, 'price', 'fillPrice'),\n 'amount': amount,\n 'cost': cost,\n 'takerOrMaker': this.safeStringLower2(trade, 'tradeRole', 'exec_type'),\n 'fee': fee,\n }, market);\n }\n async fetchTrades(symbol, since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name bitmart#fetchTrades\n * @description get the list of most recent trades for a particular symbol\n * @param {string} symbol unified symbol of the market to fetch trades for\n * @param {int} [since] timestamp in ms of the earliest trade to fetch\n * @param {int} [limit] the maximum amount of trades to fetch\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {Trade[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=public-trades}\n */\n await this.loadMarkets();\n const market = this.market(symbol);\n if (!market['spot']) {\n throw new MarketTypeNotSupportedError(market['type']).addMessage('only spot orders are accepted').exchange(this.id);\n }\n const request = {\n 'symbol': market['id'],\n };\n const response = await this.publicGetSpotV1SymbolsTrades(this.extend(request, params));\n //\n // spot\n //\n // {\n // \"message\":\"OK\",\n // \"code\":1000,\n // \"trace\":\"222d74c0-8f6d-49d9-8e1b-98118c50eeba\",\n // \"data\":{\n // \"trades\":[\n // {\n // \"amount\":\"0.005703\",\n // \"order_time\":1599652045394,\n // \"price\":\"0.034029\",\n // \"count\":\"0.1676\",\n // \"type\":\"sell\"\n // },\n // ]\n // }\n // }\n //\n const data = this.safeValue(response, 'data', {});\n const trades = this.safeValue(data, 'trades', []);\n return this.parseTrades(trades, market, since, limit);\n }\n parseOHLCV(ohlcv, market = undefined) {\n //\n // spot\n // [\n // \"1699512060\", // timestamp\n // \"36746.49\", // open\n // \"36758.71\", // high\n // \"36736.13\", // low\n // \"36755.99\", // close\n // \"2.83965\", // base volume\n // \"104353.57\" // quote volume\n // ]\n //\n // swap\n // {\n // \"low_price\": \"20090.3\",\n // \"high_price\": \"20095.5\",\n // \"open_price\": \"20092.6\",\n // \"close_price\": \"20091.4\",\n // \"volume\": \"8748\",\n // \"timestamp\": 1665002281\n // }\n //\n // ws\n // [\n // 1631056350, // timestamp\n // \"46532.83\", // open\n // \"46555.71\", // high\n // \"46511.41\", // low\n // \"46555.71\", // close\n // \"0.25\", // volume\n // ]\n //\n // ws swap\n // {\n // \"symbol\":\"BTCUSDT\",\n // \"o\":\"146.24\",\n // \"h\":\"146.24\",\n // \"l\":\"146.24\",\n // \"c\":\"146.24\",\n // \"v\":\"146\"\n // }\n //\n if (Array.isArray(ohlcv)) {\n return [\n this.safeTimestamp(ohlcv, 0),\n this.safeNumber(ohlcv, 1),\n this.safeNumber(ohlcv, 2),\n this.safeNumber(ohlcv, 3),\n this.safeNumber(ohlcv, 4),\n this.safeNumber(ohlcv, 5),\n ];\n }\n else {\n return [\n this.safeTimestamp2(ohlcv, 'timestamp', 'ts'),\n this.safeNumber2(ohlcv, 'open_price', 'o'),\n this.safeNumber2(ohlcv, 'high_price', 'h'),\n this.safeNumber2(ohlcv, 'low_price', 'l'),\n this.safeNumber2(ohlcv, 'close_price', 'c'),\n this.safeNumber2(ohlcv, 'volume', 'v'),\n ];\n }\n }\n async fetchOHLCV(symbol, timeframe = '1m', since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name bitmart#fetchOHLCV\n * @description fetches historical candlestick data containing the open, high, low, and close price, and the volume of a market\n * @see https://developer-pro.bitmart.com/en/spot/#get-history-k-line-v3\n * @see https://developer-pro.bitmart.com/en/futures/#get-k-line\n * @param {string} symbol unified symbol of the market to fetch OHLCV data for\n * @param {string} timeframe the length of time each candle represents\n * @param {int} [since] timestamp in ms of the earliest candle to fetch\n * @param {int} [limit] the maximum amount of candles to fetch\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {int} [params.until] timestamp of the latest candle in ms\n * @param {boolean} [params.paginate] *spot only* default false, when true will automatically paginate by calling this endpoint multiple times. See in the docs all the [availble parameters](https://github.com/ccxt/ccxt/wiki/Manual#pagination-params)\n * @returns {int[][]} A list of candles ordered as timestamp, open, high, low, close, volume\n */\n await this.loadMarkets();\n let paginate = false;\n [paginate, params] = this.handleOptionAndParams(params, 'fetchOHLCV', 'paginate', false);\n if (paginate) {\n return await this.fetchPaginatedCallDeterministic('fetchOHLCV', symbol, since, limit, timeframe, params, 200);\n }\n const market = this.market(symbol);\n const duration = this.parseTimeframe(timeframe);\n const parsedTimeframe = this.safeInteger(this.timeframes, timeframe);\n let request = {\n 'symbol': market['id'],\n };\n if (parsedTimeframe !== undefined) {\n request['step'] = parsedTimeframe;\n }\n else {\n request['step'] = timeframe;\n }\n if (market['spot']) {\n [request, params] = this.handleUntilOption('before', request, params, 0.001);\n if (limit !== undefined) {\n request['limit'] = limit;\n }\n if (since !== undefined) {\n request['after'] = this.parseToInt((since / 1000)) - 1;\n }\n }\n else {\n const maxLimit = 1200;\n if (limit === undefined) {\n limit = maxLimit;\n }\n limit = Math.min(maxLimit, limit);\n const now = this.parseToInt(this.milliseconds() / 1000);\n if (since === undefined) {\n const start = now - limit * duration;\n request['start_time'] = start;\n request['end_time'] = now;\n }\n else {\n const start = this.parseToInt((since / 1000)) - 1;\n const end = this.sum(start, limit * duration);\n request['start_time'] = start;\n request['end_time'] = Math.min(end, now);\n }\n [request, params] = this.handleUntilOption('end_time', request, params, 0.001);\n }\n let response = undefined;\n if (market['swap']) {\n response = await this.publicGetContractPublicKline(this.extend(request, params));\n }\n else {\n response = await this.publicGetSpotQuotationV3Klines(this.extend(request, params));\n }\n //\n // spot\n //\n // {\n // \"code\": 1000,\n // \"message\": \"success\",\n // \"data\": [\n // [\"1699512060\",\"36746.49\",\"36758.71\",\"36736.13\",\"36755.99\",\"2.83965\",\"104353.57\"],\n // [\"1699512120\",\"36756.00\",\"36758.70\",\"36737.14\",\"36737.63\",\"1.96070\",\"72047.10\"],\n // [\"1699512180\",\"36737.63\",\"36740.45\",\"36737.62\",\"36740.44\",\"0.63194\",\"23217.62\"]\n // ],\n // \"trace\": \"6591fc7b508845359d5fa442e3b3a4fb.72.16995122398750695\"\n // }\n //\n // swap\n //\n // {\n // \"code\": 1000,\n // \"message\": \"Ok\",\n // \"data\": [\n // {\n // \"low_price\": \"20090.3\",\n // \"high_price\": \"20095.5\",\n // \"open_price\": \"20092.6\",\n // \"close_price\": \"20091.4\",\n // \"volume\": \"8748\",\n // \"timestamp\": 1665002281\n // },\n // ...\n // ],\n // \"trace\": \"96c989db-e0f5-46f5-bba6-60cfcbde699b\"\n // }\n //\n const ohlcv = this.safeValue(response, 'data', []);\n return this.parseOHLCVs(ohlcv, market, timeframe, since, limit);\n }\n async fetchMyTrades(symbol = undefined, since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name bitmart#fetchMyTrades\n * @see https://developer-pro.bitmart.com/en/spot/#account-trade-list-v4-signed\n * @see https://developer-pro.bitmart.com/en/futures/#get-order-trade-keyed\n * @description fetch all trades made by the user\n * @param {string} symbol unified market symbol\n * @param {int} [since] the earliest time in ms to fetch trades for\n * @param {int} [limit] the maximum number of trades structures to retrieve\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {int} [params.until] the latest time in ms to fetch trades for\n * @param {boolean} [params.marginMode] *spot* whether to fetch trades for margin orders or spot orders, defaults to spot orders (only isolated margin orders are supported)\n * @returns {Trade[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=trade-structure}\n */\n await this.loadMarkets();\n let market = undefined;\n const request = {};\n if (symbol !== undefined) {\n market = this.market(symbol);\n request['symbol'] = market['id'];\n }\n let type = undefined;\n let response = undefined;\n [type, params] = this.handleMarketTypeAndParams('fetchMyTrades', market, params);\n const until = this.safeIntegerN(params, ['until', 'endTime', 'end_time']);\n params = this.omit(params, ['until']);\n if (type === 'spot') {\n let marginMode = undefined;\n [marginMode, params] = this.handleMarginModeAndParams('fetchMyTrades', params);\n if (marginMode === 'isolated') {\n request['orderMode'] = 'iso_margin';\n }\n const options = this.safeValue(this.options, 'fetchMyTrades', {});\n const defaultLimit = this.safeInteger(options, 'limit', 200);\n if (limit === undefined) {\n limit = defaultLimit;\n }\n request['limit'] = limit;\n if (since !== undefined) {\n request['startTime'] = since;\n }\n if (until !== undefined) {\n request['endTime'] = until;\n }\n response = await this.privatePostSpotV4QueryTrades(this.extend(request, params));\n }\n else if (type === 'swap') {\n if (symbol === undefined) {\n throw new InvalidParamsError('fetchMyTrades() requires a symbol argument').exchange(this.id);\n }\n if (since !== undefined) {\n request['start_time'] = since;\n }\n if (until !== undefined) {\n request['end_time'] = until;\n }\n response = await this.privateGetContractPrivateTrades(this.extend(request, params));\n }\n else {\n throw new MarketTypeNotSupportedError(type).addMessage('only spot and swap orders are accepted').exchange(this.id);\n }\n //\n // spot\n //\n // {\n // \"code\":1000,\n // \"message\":\"success\",\n // \"data\":[\n // {\n // \"tradeId\":\"182342999769370687\",\n // \"orderId\":\"183270218784142990\",\n // \"clientOrderId\":\"183270218784142990\",\n // \"symbol\":\"ADA_USDT\",\n // \"side\":\"buy\",\n // \"orderMode\":\"spot\",\n // \"type\":\"market\",\n // \"price\":\"0.245948\",\n // \"size\":\"20.71\",\n // \"notional\":\"5.09358308\",\n // \"fee\":\"0.00509358\",\n // \"feeCoinName\":\"USDT\",\n // \"tradeRole\":\"taker\",\n // \"createTime\":1695658457836,\n // \"updateTime\":1695658457836\n // }\n // ],\n // \"trace\":\"fbaee9e0e2f5442fba5b3262fc86b0ac.65.16956593456523085\"\n // }\n //\n // swap\n //\n // {\n // \"code\": 1000,\n // \"message\": \"Ok\",\n // \"data\": [\n // {\n // \"order_id\": \"230930336848609\",\n // \"trade_id\": \"6212604014\",\n // \"symbol\": \"BTCUSDT\",\n // \"side\": 3,\n // \"price\": \"26910.4\",\n // \"vol\": \"1\",\n // \"exec_type\": \"Taker\",\n // \"profit\": false,\n // \"create_time\": 1695961596692,\n // \"realised_profit\": \"-0.0003\",\n // \"paid_fees\": \"0.01614624\"\n // },\n // ],\n // \"trace\": \"4cad855074634097ac6ba5257c47305d.62.16959616054873723\"\n // }\n //\n const data = this.safeValue(response, 'data', []);\n return this.parseTrades(data, market, since, limit);\n }\n async fetchOrderTrades(id, symbol = undefined, since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name bitmart#fetchOrderTrades\n * @see https://developer-pro.bitmart.com/en/spot/#order-trade-list-v4-signed\n * @description fetch all the trades made from a single order\n * @param {string} id order id\n * @param {string} symbol unified market symbol\n * @param {int} [since] the earliest time in ms to fetch trades for\n * @param {int} [limit] the maximum number of trades to retrieve\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=trade-structure}\n */\n await this.loadMarkets();\n const request = {\n 'orderId': id,\n };\n const response = await this.privatePostSpotV4QueryOrderTrades(this.extend(request, params));\n const data = this.safeValue(response, 'data', {});\n return this.parseTrades(data, undefined, since, limit);\n }\n customParseBalance(response, marketType) {\n const data = this.safeValue(response, 'data', {});\n let wallet = undefined;\n if (marketType === 'usd-m' || marketType === 'coin-m') {\n wallet = this.safeValue(response, 'data', []);\n }\n else if (marketType === 'margin') {\n wallet = this.safeValue(data, 'symbols', []);\n }\n else {\n wallet = this.safeValue(data, 'wallet', []);\n }\n const result = { 'info': response };\n if (marketType === 'margin') {\n for (let i = 0; i < wallet.length; i++) {\n const entry = wallet[i];\n const marketId = this.safeString(entry, 'symbol');\n const symbol = this.safeSymbol(marketId, undefined, '_');\n const base = this.safeValue(entry, 'base', {});\n const quote = this.safeValue(entry, 'quote', {});\n const baseCode = this.safeCurrencyCode(this.safeString(base, 'currency'));\n const quoteCode = this.safeCurrencyCode(this.safeString(quote, 'currency'));\n const subResult = {};\n subResult[baseCode] = this.parseBalanceHelper(base);\n subResult[quoteCode] = this.parseBalanceHelper(quote);\n result[symbol] = this.safeBalance(subResult);\n }\n return result;\n }\n else {\n for (let i = 0; i < wallet.length; i++) {\n const balance = wallet[i];\n let currencyId = this.safeString2(balance, 'id', 'currency');\n currencyId = this.safeString(balance, 'coin_code', currencyId);\n const code = this.safeCurrencyCode(currencyId);\n const account = this.account();\n account['free'] = this.safeString2(balance, 'available', 'available_balance');\n account['used'] = this.safeString2(balance, 'frozen', 'frozen_balance');\n result[code] = account;\n }\n return this.safeBalance(result);\n }\n }\n parseBalanceHelper(entry) {\n const account = this.account();\n account['used'] = this.safeString(entry, 'frozen');\n account['free'] = this.safeString(entry, 'available');\n account['total'] = this.safeString(entry, 'total_asset');\n const debt = this.safeString(entry, 'borrow_unpaid');\n const interest = this.safeString(entry, 'interest_unpaid');\n account['debt'] = Precise.stringAdd(debt, interest);\n return account;\n }\n async fetchBalance(params = {}) {\n /**\n * @method\n * @name bitmart#fetchBalance\n * @description query for balance and get the amount of funds available for trading or funds locked in orders\n * @see https://developer-pro.bitmart.com/en/spot/#get-spot-wallet-balance\n * @see https://developer-pro.bitmart.com/en/futures/#get-contract-assets-detail\n * @see https://developer-pro.bitmart.com/en/spot/#get-account-balance\n * @see https://developer-pro.bitmart.com/en/spot/#get-margin-account-details-isolated\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} a [balance structure]{@link https://docs.ccxt.com/#/?id=balance-structure}\n */\n await this.loadMarkets();\n let marketType = undefined;\n [marketType, params] = this.handleMarketTypeAndParams('fetchBalance', undefined, params);\n const marginMode = this.safeString(params, 'marginMode');\n const isMargin = this.safeBool(params, 'margin', false);\n params = this.omit(params, ['margin', 'marginMode']);\n if (marginMode !== undefined || isMargin) {\n marketType = 'margin';\n }\n let response = undefined;\n if (marketType === 'spot') {\n response = await this.privateGetSpotV1Wallet(params);\n }\n else if (marketType === 'usd-m' || marketType === 'coin-m') {\n response = await this.privateGetContractPrivateAssetsDetail(params);\n // we need to filter manually since the API does't do the distinction between usd-m and coin-m\n response['data'] = response['data'].filter((currency) => (marketType === 'usd-m' ? STABLE_COINS.includes(currency.currency) : !STABLE_COINS.includes(currency.currency)));\n }\n else if (marketType === 'account') {\n response = await this.privateGetAccountV1Wallet(params);\n }\n else if (marketType === 'margin') {\n response = await this.privateGetSpotV1MarginIsolatedAccount(params);\n }\n else {\n throw new MarketTypeNotSupportedError(marketType).addMessage('only spot, swap and account and margin markets are accepted').exchange(this.id);\n }\n //\n // spot\n //\n // {\n // \"message\":\"OK\",\n // \"code\":1000,\n // \"trace\":\"39069916-72f9-44c7-acde-2ad5afd21cad\",\n // \"data\":{\n // \"wallet\":[\n // {\"id\":\"BTC\",\"name\":\"Bitcoin\",\"available\":\"0.00000062\",\"frozen\":\"0.00000000\"},\n // {\"id\":\"ETH\",\"name\":\"Ethereum\",\"available\":\"0.00002277\",\"frozen\":\"0.00000000\"},\n // {\"id\":\"BMX\",\"name\":\"BitMart Token\",\"available\":\"0.00000000\",\"frozen\":\"0.00000000\"}\n // ]\n // }\n // }\n //\n // account\n //\n // {\n // \"message\":\"OK\",\n // \"code\":1000,\n // \"trace\":\"5c3b7fc7-93b2-49ef-bb59-7fdc56915b59\",\n // \"data\":{\n // \"wallet\":[\n // {\"currency\":\"BTC\",\"name\":\"Bitcoin\",\"available\":\"0.00000062\",\"frozen\":\"0.00000000\"},\n // {\"currency\":\"ETH\",\"name\":\"Ethereum\",\"available\":\"0.00002277\",\"frozen\":\"0.00000000\"}\n // ]\n // }\n // }\n //\n // swap\n //\n // {\n // \"code\": 1000,\n // \"message\": \"Ok\",\n // \"data\": [\n // {\n // \"currency\": \"USDT\",\n // \"available_balance\": \"0\",\n // \"frozen_balance\": \"0\",\n // \"unrealized\": \"0\",\n // \"equity\": \"0\",\n // \"position_deposit\": \"0\"\n // },\n // ...\n // ],\n // \"trace\": \"f9da3a39-cf45-42e7-914d-294f565dfc33\"\n // }\n //\n // margin\n //\n // {\n // \"message\": \"OK\",\n // \"code\": 1000,\n // \"trace\": \"61dd6ab265c04064b72d8bc9b205f741.71.16701055600915302\",\n // \"data\": {\n // \"symbols\": [\n // {\n // \"symbol\": \"BTC_USDT\",\n // \"risk_rate\": \"999.00\",\n // \"risk_level\": \"1\",\n // \"buy_enabled\": false,\n // \"sell_enabled\": false,\n // \"liquidate_price\": null,\n // \"liquidate_rate\": \"1.15\",\n // \"base\": {\n // \"currency\": \"BTC\",\n // \"borrow_enabled\": true,\n // \"borrowed\": \"0.00000000\",\n // \"available\": \"0.00000000\",\n // \"frozen\": \"0.00000000\",\n // \"net_asset\": \"0.00000000\",\n // \"net_assetBTC\": \"0.00000000\",\n // \"total_asset\": \"0.00000000\",\n // \"borrow_unpaid\": \"0.00000000\",\n // \"interest_unpaid\": \"0.00000000\"\n // },\n // \"quote\": {\n // \"currency\": \"USDT\",\n // \"borrow_enabled\": true,\n // \"borrowed\": \"0.00000000\",\n // \"available\": \"20.00000000\",\n // \"frozen\": \"0.00000000\",\n // \"net_asset\": \"20.00000000\",\n // \"net_assetBTC\": \"0.00118008\",\n // \"total_asset\": \"20.00000000\",\n // \"borrow_unpaid\": \"0.00000000\",\n // \"interest_unpaid\": \"0.00000000\"\n // }\n // }\n // ]\n // }\n // }\n //\n return this.customParseBalance(response, marketType);\n }\n parseTradingFee(fee, market = undefined) {\n //\n // {\n // \"symbol\": \"ETH_USDT\",\n // \"taker_fee_rate\": \"0.0025\",\n // \"maker_fee_rate\": \"0.0025\"\n // }\n //\n const marketId = this.safeString(fee, 'symbol');\n const symbol = this.safeSymbol(marketId);\n return {\n 'info': fee,\n 'symbol': symbol,\n 'maker': this.safeNumber(fee, 'maker_fee_rate'),\n 'taker': this.safeNumber(fee, 'taker_fee_rate'),\n };\n }\n async fetchTradingFee(symbol, params = {}) {\n /**\n * @method\n * @name bitmart#fetchTradingFee\n * @description fetch the trading fees for a market\n * @param {string} symbol unified market symbol\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} a [fee structure]{@link https://docs.ccxt.com/#/?id=fee-structure}\n */\n await this.loadMarkets();\n const market = this.market(symbol);\n if (!market['spot']) {\n throw new MarketTypeNotSupportedError(market['type']).addMessage('only spot orders are accepted').exchange(this.id);\n }\n const request = {\n 'symbol': market['id'],\n };\n const response = await this.privateGetSpotV1TradeFee(this.extend(request, params));\n //\n // {\n // \"message\": \"OK\",\n // \"code\": \"1000\",\n // \"trace\": \"5a6f1e40-37fe-4849-a494-03279fadcc62\",\n // \"data\": {\n // \"symbol\": \"ETH_USDT\",\n // \"taker_fee_rate\": \"0.0025\",\n // \"maker_fee_rate\": \"0.0025\"\n // }\n // }\n //\n const data = this.safeValue(response, 'data');\n return this.parseTradingFee(data);\n }\n parseOrder(order, market = undefined) {\n //\n // createOrder\n //\n // {\n // \"order_id\": 2707217580\n // }\n //\n // swap\n // \"data\": {\n // \"order_id\": 231116359426639,\n // \"price\": \"market price\"\n // },\n //\n // cancelOrder\n //\n // \"2707217580\" // order id\n //\n // spot fetchOrder, fetchOrdersByStatus, fetchOpenOrders, fetchClosedOrders\n //\n // {\n // \"order_id\":1736871726781,\n // \"symbol\":\"BTC_USDT\",\n // \"create_time\":1591096004000,\n // \"side\":\"sell\",\n // \"type\":\"market\", // limit, market, limit_maker, ioc\n // \"price\":\"0.00\",\n // \"price_avg\":\"0.00\",\n // \"size\":\"0.02000\",\n // \"notional\":\"0.00000000\",\n // \"filled_notional\":\"0.00000000\",\n // \"filled_size\":\"0.00000\",\n // \"status\":\"8\"\n // }\n //\n // spot v4\n // {\n // \"orderId\" : \"118100034543076010\",\n // \"clientOrderId\" : \"118100034543076010\",\n // \"symbol\" : \"BTC_USDT\",\n // \"side\" : \"buy\",\n // \"orderMode\" : \"spot\",\n // \"type\" : \"limit\",\n // \"state\" : \"filled\",\n // \"price\" : \"48800.00\",\n // \"priceAvg\" : \"39999.00\",\n // \"size\" : \"0.10000\",\n // \"filledSize\" : \"0.10000\",\n // \"notional\" : \"4880.00000000\",\n // \"filledNotional\" : \"3999.90000000\",\n // \"createTime\" : 1681701557927,\n // \"updateTime\" : 1681701559408\n // }\n //\n // swap: fetchOrder, fetchOpenOrders, fetchClosedOrders\n //\n // {\n // \"order_id\": \"230935812485489\",\n // \"client_order_id\": \"\",\n // \"price\": \"24000\",\n // \"size\": \"1\",\n // \"symbol\": \"BTCUSDT\",\n // \"state\": 2,\n // \"side\": 1,\n // \"type\": \"limit\",\n // \"leverage\": \"10\",\n // \"open_type\": \"isolated\",\n // \"deal_avg_price\": \"0\",\n // \"deal_size\": \"0\",\n // \"create_time\": 1695702258629,\n // \"update_time\": 1695702258642,\n // \"activation_price_type\": 0,\n // \"activation_price\": \"\",\n // \"callback_rate\": \"\"\n // }\n //\n let id = undefined;\n if (typeof order === 'string') {\n id = order;\n order = {};\n }\n id = this.safeString2(order, 'order_id', 'orderId', id);\n const timestamp = this.safeInteger2(order, 'create_time', 'createTime');\n const marketId = this.safeString(order, 'symbol');\n const symbol = this.safeSymbol(marketId, market);\n market = this.safeMarket(symbol, market);\n const orderType = this.safeString(market, 'type', 'spot');\n let type = this.safeString(order, 'type');\n let timeInForce = undefined;\n let postOnly = undefined;\n if (type === 'limit_maker') {\n type = 'limit';\n postOnly = true;\n timeInForce = 'PO';\n }\n if (type === 'ioc') {\n type = 'limit';\n timeInForce = 'IOC';\n }\n let priceString = this.safeString(order, 'price');\n if (priceString === 'market price') {\n priceString = undefined;\n }\n const amount = this.omitZero(this.safeString(order, 'size'));\n const filled = this.omitZero(this.safeString2(order, 'filled_size', 'filledSize'));\n const remaining = amount && filled && Precise.stringSub(amount, filled);\n return this.safeOrder({\n 'id': id,\n 'clientOrderId': this.safeString2(order, 'client_order_id', 'clientOrderId'),\n 'info': order,\n 'timestamp': timestamp,\n 'datetime': this.iso8601(timestamp),\n 'lastTradeTimestamp': this.safeInteger(order, 'update_time'),\n 'symbol': symbol,\n 'type': type,\n 'timeInForce': timeInForce,\n 'postOnly': postOnly,\n 'side': this.parseOrderSide(this.safeString(order, 'side')),\n 'price': this.omitZero(priceString),\n 'stopPrice': undefined,\n 'triggerPrice': undefined,\n 'amount': amount,\n 'cost': this.safeString2(order, 'filled_notional', 'filledNotional'),\n 'average': this.safeStringN(order, ['price_avg', 'priceAvg', 'deal_avg_price']),\n 'filled': filled,\n 'remaining': remaining,\n 'status': this.parseOrderStatusByType(orderType, this.safeString2(order, 'status', 'state')),\n 'fee': undefined,\n 'trades': undefined,\n }, market);\n }\n parseOrderSide(side) {\n const sides = {\n '1': 'buy',\n '2': 'buy',\n '3': 'sell',\n '4': 'sell',\n };\n return this.safeString(sides, side, side);\n }\n parseOrderStatusByType(type, status) {\n const statusesByType = {\n 'spot': {\n '1': 'rejected',\n '2': 'open',\n '3': 'rejected',\n '4': 'open',\n '5': 'open',\n '6': 'closed',\n '7': 'canceled',\n '8': 'canceled',\n 'new': 'open',\n 'partially_filled': 'open',\n 'filled': 'closed',\n 'partially_canceled': 'canceled',\n },\n 'swap': {\n '1': 'open',\n '2': 'open',\n '4': 'closed', // Completed\n },\n };\n const statuses = this.safeValue(statusesByType, type, {});\n return this.safeString(statuses, status, status);\n }\n async createMarketBuyOrderWithCost(symbol, cost, params = {}) {\n /**\n * @method\n * @name bitmart#createMarketBuyOrderWithCost\n * @description create a market buy order by providing the symbol and cost\n * @see https://developer-pro.bitmart.com/en/spot/#new-order-v2-signed\n * @param {string} symbol unified symbol of the market to create an order in\n * @param {float} cost how much you want to trade in units of the quote currency\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n await this.loadMarkets();\n const market = this.market(symbol);\n if (!market['spot']) {\n throw new ExchangeError().addMessage('createMarketBuyOrderWithCost() supports spot orders only').exchange(this.id);\n }\n params['createMarketBuyOrderRequiresPrice'] = false;\n return await this.createOrder(symbol, 'market', 'buy', cost, undefined, params);\n }\n async createOrder(symbol, type, side, amount, price = undefined, params = {}) {\n /**\n * @method\n * @name bitmart#createOrder\n * @description create a trade order\n * @see https://developer-pro.bitmart.com/en/spot/#new-order-v2-signed\n * @see https://developer-pro.bitmart.com/en/spot/#place-margin-order\n * @see https://developer-pro.bitmart.com/en/futures/#submit-order-signed\n * @see https://developer-pro.bitmart.com/en/futures/#submit-plan-order-signed\n * @param {string} symbol unified symbol of the market to create an order in\n * @param {string} type 'market', 'limit' or 'trailing' for swap markets only\n * @param {string} side 'buy' or 'sell'\n * @param {float} amount how much of currency you want to trade in units of base currency\n * @param {float} [price] the price at which the order is to be fullfilled, in units of the quote currency, ignored in market orders\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {string} [params.marginMode] 'cross' or 'isolated'\n * @param {string} [params.leverage] *swap only* leverage level\n * @param {string} [params.clientOrderId] client order id of the order\n * @param {boolean} [params.reduceOnly] *swap only* reduce only\n * @param {boolean} [params.postOnly] make sure the order is posted to the order book and not matched immediately\n * @param {string} [params.triggerPrice] *swap only* the price to trigger a stop order\n * @param {int} [params.price_type] *swap only* 1: last price, 2: fair price, default is 1\n * @param {int} [params.price_way] *swap only* 1: price way long, 2: price way short\n * @param {int} [params.activation_price_type] *swap trailing order only* 1: last price, 2: fair price, default is 1\n * @param {string} [params.trailingPercent] *swap only* the percent to trail away from the current market price, min 0.1 max 5\n * @param {string} [params.trailingTriggerPrice] *swap only* the price to trigger a trailing order, default uses the price argument\n * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n await this.loadMarkets();\n const market = this.market(symbol);\n const result = this.handleMarginModeAndParams('createOrder', params);\n const marginMode = this.safeString(result, 0);\n const triggerPrice = this.safeStringN(params, ['triggerPrice', 'stopPrice', 'trigger_price']);\n const isTriggerOrder = triggerPrice !== undefined;\n let response = undefined;\n if (market['spot']) {\n const spotRequest = this.createSpotOrderRequest(symbol, type, side, amount, price, params);\n if (marginMode === 'isolated') {\n response = await this.privatePostSpotV1MarginSubmitOrder(spotRequest);\n }\n else {\n response = await this.privatePostSpotV2SubmitOrder(spotRequest);\n }\n }\n else {\n const swapRequest = this.createSwapOrderRequest(symbol, type, side, amount, price, params);\n if (isTriggerOrder) {\n response = await this.privatePostContractPrivateSubmitPlanOrder(swapRequest);\n }\n else {\n response = await this.privatePostContractPrivateSubmitOrder(swapRequest);\n }\n }\n //\n // spot and margin\n //\n // {\n // \"code\": 1000,\n // \"trace\":\"886fb6ae-456b-4654-b4e0-d681ac05cea1\",\n // \"message\": \"OK\",\n // \"data\": {\n // \"order_id\": 2707217580\n // }\n // }\n //\n // swap\n // {\"code\":1000,\"message\":\"Ok\",\"data\":{\"order_id\":231116359426639,\"price\":\"market price\"},\"trace\":\"7f9c94e10f9d4513bc08a7bfc2a5559a.62.16996369620521911\"}\n //\n const data = this.safeValue(response, 'data', {});\n const order = this.parseOrder(data, market);\n order['type'] = type;\n order['side'] = side;\n order['amount'] = amount;\n order['price'] = price;\n return order;\n }\n createSwapOrderRequest(symbol, type, side, amount, price = undefined, params = {}) {\n /**\n * @method\n * @name bitmart#createSwapOrderRequest\n * @ignore\n * @description create a trade order\n * @see https://developer-pro.bitmart.com/en/futures/#submit-order-signed\n * @see https://developer-pro.bitmart.com/en/futures/#submit-plan-order-signed\n * @param {string} symbol unified symbol of the market to create an order in\n * @param {string} type 'market', 'limit' or 'trailing'\n * @param {string} side 'buy' or 'sell'\n * @param {float} amount how much of currency you want to trade in units of base currency\n * @param {float} [price] the price at which the order is to be fullfilled, in units of the quote currency, ignored in market orders\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {int} [params.leverage] leverage level\n * @param {boolean} [params.reduceOnly] *swap only* reduce only\n * @param {string} [params.marginMode] 'cross' or 'isolated', default is 'cross'\n * @param {string} [params.clientOrderId] client order id of the order\n * @param {string} [params.triggerPrice] *swap only* the price to trigger a stop order\n * @param {int} [params.price_type] *swap only* 1: last price, 2: fair price, default is 1\n * @param {int} [params.price_way] *swap only* 1: price way long, 2: price way short\n * @param {int} [params.activation_price_type] *swap trailing order only* 1: last price, 2: fair price, default is 1\n * @param {string} [params.trailingPercent] *swap only* the percent to trail away from the current market price, min 0.1 max 5\n * @param {string} [params.trailingTriggerPrice] *swap only* the price to trigger a trailing order, default uses the price argument\n * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n const market = this.market(symbol);\n const request = {\n 'symbol': market['id'],\n 'type': type,\n 'size': parseInt(this.amountToPrecision(symbol, amount)),\n };\n const timeInForce = this.safeString(params, 'timeInForce');\n const mode = this.safeInteger(params, 'mode'); // only for swap\n const isMarketOrder = type === 'market';\n let postOnly = undefined;\n const reduceOnly = this.safeValue(params, 'reduceOnly');\n const isExchangeSpecificPo = (mode === 4);\n [postOnly, params] = this.handlePostOnly(isMarketOrder, isExchangeSpecificPo, params);\n const ioc = ((timeInForce === 'IOC') || (mode === 3));\n const isLimitOrder = (type === 'limit') || postOnly || ioc;\n if (timeInForce === 'GTC') {\n request['mode'] = 1;\n }\n else if (timeInForce === 'FOK') {\n request['mode'] = 2;\n }\n else if (timeInForce === 'IOC') {\n request['mode'] = 3;\n }\n if (postOnly) {\n request['mode'] = 4;\n }\n const triggerPrice = this.safeStringN(params, ['triggerPrice', 'stopPrice', 'trigger_price']);\n const isTriggerOrder = triggerPrice !== undefined;\n const trailingTriggerPrice = this.safeString2(params, 'trailingTriggerPrice', 'activation_price', this.numberToString(price));\n const trailingPercent = this.safeString2(params, 'trailingPercent', 'callback_rate');\n const isTrailingPercentOrder = trailingPercent !== undefined;\n if (isLimitOrder) {\n request['price'] = this.priceToPrecision(symbol, price);\n }\n else if (type === 'trailing' || isTrailingPercentOrder) {\n request['callback_rate'] = trailingPercent;\n request['activation_price'] = this.priceToPrecision(symbol, trailingTriggerPrice);\n request['activation_price_type'] = this.safeInteger(params, 'activation_price_type', 1);\n }\n if (isTriggerOrder) {\n request['executive_price'] = this.priceToPrecision(symbol, price);\n request['trigger_price'] = this.priceToPrecision(symbol, triggerPrice);\n request['price_type'] = this.safeInteger(params, 'price_type', 1);\n if (side === 'buy') {\n if (reduceOnly) {\n request['price_way'] = 2;\n }\n else {\n request['price_way'] = 1;\n }\n }\n else if (side === 'sell') {\n if (reduceOnly) {\n request['price_way'] = 1;\n }\n else {\n request['price_way'] = 2;\n }\n }\n }\n if (side === 'buy') {\n if (reduceOnly) {\n request['side'] = 2; // buy close short\n }\n else {\n request['side'] = 1; // buy open long\n }\n }\n else if (side === 'sell') {\n if (reduceOnly) {\n request['side'] = 3; // sell close long\n }\n else {\n request['side'] = 4; // sell open short\n }\n }\n let marginMode = undefined;\n [marginMode, params] = this.handleMarginModeAndParams('createOrder', params, 'cross');\n request['open_type'] = marginMode;\n const clientOrderId = this.safeString(params, 'clientOrderId');\n if (clientOrderId !== undefined) {\n params = this.omit(params, 'clientOrderId');\n request['client_order_id'] = clientOrderId;\n }\n const leverage = this.safeInteger(params, 'leverage', 1);\n params = this.omit(params, ['timeInForce', 'postOnly', 'reduceOnly', 'leverage', 'trailingTriggerPrice', 'trailingPercent', 'triggerPrice', 'stopPrice']);\n request['leverage'] = this.numberToString(leverage);\n return this.extend(request, params);\n }\n createSpotOrderRequest(symbol, type, side, amount, price = undefined, params = {}) {\n /**\n * @method\n * @name bitmart#createSpotOrderRequest\n * @ignore\n * @description create a spot order request\n * @see https://developer-pro.bitmart.com/en/spot/#place-spot-order\n * @see https://developer-pro.bitmart.com/en/spot/#place-margin-order\n * @param {string} symbol unified symbol of the market to create an order in\n * @param {string} type 'market' or 'limit'\n * @param {string} side 'buy' or 'sell'\n * @param {float} amount how much of currency you want to trade in units of base currency\n * @param {float} [price] the price at which the order is to be fullfilled, in units of the quote currency, ignored in market orders\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {string} [params.marginMode] 'cross' or 'isolated'\n * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n const market = this.market(symbol);\n const request = {\n 'symbol': market['id'],\n 'side': side,\n 'type': type,\n };\n const timeInForce = this.safeString(params, 'timeInForce');\n if (timeInForce === 'FOK') {\n throw new InvalidParamsError('createOrder() only accepts timeInForce parameter values of IOC or PO').exchange(this.id);\n }\n const mode = this.safeInteger(params, 'mode'); // only for swap\n const isMarketOrder = type === 'market';\n let postOnly = undefined;\n const isExchangeSpecificPo = (type === 'limit_maker') || (mode === 4);\n [postOnly, params] = this.handlePostOnly(isMarketOrder, isExchangeSpecificPo, params);\n params = this.omit(params, ['timeInForce', 'postOnly']);\n const ioc = ((timeInForce === 'IOC') || (type === 'ioc'));\n const isLimitOrder = (type === 'limit') || postOnly || ioc;\n // method = 'privatePostSpotV2SubmitOrder';\n if (isLimitOrder) {\n request['size'] = this.amountToPrecision(symbol, amount);\n request['price'] = this.priceToPrecision(symbol, price);\n }\n else if (isMarketOrder) {\n // for market buy it requires the amount of quote currency to spend\n if (side === 'buy') {\n let notional = this.safeNumber2(params, 'cost', 'notional');\n params = this.omit(params, 'cost');\n let createMarketBuyOrderRequiresPrice = true;\n [createMarketBuyOrderRequiresPrice, params] = this.handleOptionAndParams(params, 'createOrder', 'createMarketBuyOrderRequiresPrice', true);\n if (createMarketBuyOrderRequiresPrice) {\n if ((price === undefined) && (notional === undefined)) {\n throw new InvalidParamsError('createOrder() requires the price argument for market buy orders to calculate the total cost to spend (amount * price), alternatively set the createMarketBuyOrderRequiresPrice option or param to false and pass the cost to spend in the amount argument or in the \"notional\" extra parameter (the exchange-specific behaviour)').exchange(this.id);\n }\n else {\n const amountString = this.numberToString(amount);\n const priceString = this.numberToString(price);\n notional = this.parseNumber(Precise.stringMul(amountString, priceString));\n }\n }\n else {\n notional = (notional === undefined) ? amount : notional;\n }\n request['notional'] = this.decimalToPrecision(notional, TRUNCATE, market['precision']['price'], this.precisionMode);\n }\n else if (side === 'sell') {\n request['size'] = this.amountToPrecision(symbol, amount);\n }\n }\n if (postOnly) {\n request['type'] = 'limit_maker';\n }\n if (ioc) {\n request['type'] = 'ioc';\n }\n return this.extend(request, params);\n }\n async cancelOrder(id, symbol = undefined, params = {}) {\n /**\n * @method\n * @name bitmart#cancelOrder\n * @description cancels an open order\n * @see https://developer-pro.bitmart.com/en/futures/#cancel-order-signed\n * @see https://developer-pro.bitmart.com/en/spot/#cancel-order-v3-signed\n * @see https://developer-pro.bitmart.com/en/futures/#cancel-plan-order-signed\n * @see https://developer-pro.bitmart.com/en/futures/#cancel-plan-order-signed\n * @param {string} id order id\n * @param {string} symbol unified symbol of the market the order was made in\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {string} [params.clientOrderId] *spot only* the client order id of the order to cancel\n * @param {boolean} [params.stop] *swap only* whether the order is a stop order\n * @returns {object} An [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n if (symbol === undefined) {\n throw new InvalidParamsError('cancelOrder() requires a symbol argument').exchange(this.id);\n }\n await this.loadMarkets();\n const market = this.market(symbol);\n const request = {\n 'symbol': market['id'],\n };\n const clientOrderId = this.safeString2(params, 'clientOrderId', 'client_order_id');\n if (clientOrderId !== undefined) {\n request['client_order_id'] = clientOrderId;\n }\n else {\n request['order_id'] = id.toString();\n }\n params = this.omit(params, ['clientOrderId']);\n let response = undefined;\n if (market['spot']) {\n response = await this.privatePostSpotV3CancelOrder(this.extend(request, params));\n }\n else {\n const stop = this.safeValue2(params, 'stop', 'trigger');\n params = this.omit(params, ['stop', 'trigger']);\n if (!stop) {\n response = await this.privatePostContractPrivateCancelOrder(this.extend(request, params));\n }\n else {\n response = await this.privatePostContractPrivateCancelPlanOrder(this.extend(request, params));\n }\n }\n // swap\n // {\"code\":1000,\"message\":\"Ok\",\"trace\":\"7f9c94e10f9d4513bc08a7bfc2a5559a.55.16959817848001851\"}\n //\n // spot\n //\n // {\n // \"code\": 1000,\n // \"trace\":\"886fb6ae-456b-4654-b4e0-d681ac05cea1\",\n // \"message\": \"OK\",\n // \"data\": {\n // \"result\": true\n // }\n // }\n //\n // spot alternative\n //\n // {\n // \"code\": 1000,\n // \"trace\":\"886fb6ae-456b-4654-b4e0-d681ac05cea1\",\n // \"message\": \"OK\",\n // \"data\": true\n // }\n //\n if (market['swap']) {\n return response;\n }\n const data = this.safeValue(response, 'data');\n if (data === true) {\n return this.parseOrder(id, market);\n }\n const succeeded = this.safeValue(data, 'succeed');\n if (succeeded !== undefined) {\n id = this.safeString(succeeded, 0);\n if (id === undefined) {\n throw new TradeError().addMessage('cancelOrder() failed to cancel ' + symbol + ' order id ' + id).exchange(this.id);\n }\n }\n else {\n const result = this.safeValue(data, 'result');\n if (!result) {\n throw new TradeError().addMessage('cancelOrder() ' + symbol + ' order id ' + id + ' is filled or canceled').exchange(this.id);\n }\n }\n const order = this.parseOrder(id, market);\n return this.extend(order, { 'id': id });\n }\n async cancelAllOrders(symbol = undefined, params = {}) {\n /**\n * @method\n * @name bitmart#cancelAllOrders\n * @description cancel all open orders in a market\n * @see https://developer-pro.bitmart.com/en/spot/#cancel-all-orders\n * @see https://developer-pro.bitmart.com/en/futures/#cancel-all-orders-signed\n * @param {string} symbol unified market symbol of the market to cancel orders in\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {string} [params.side] *spot only* 'buy' or 'sell'\n * @returns {object[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n await this.loadMarkets();\n const request = {};\n let market = undefined;\n if (symbol !== undefined) {\n market = this.market(symbol);\n request['symbol'] = market['id'];\n }\n let response = undefined;\n let type = undefined;\n [type, params] = this.handleMarketTypeAndParams('cancelAllOrders', market, params);\n if (type === 'spot') {\n response = await this.privatePostSpotV1CancelOrders(this.extend(request, params));\n }\n else if (type === 'swap') {\n if (symbol === undefined) {\n throw new InvalidParamsError('cancelAllOrders() requires a symbol argument').exchange(this.id);\n }\n response = await this.privatePostContractPrivateCancelOrders(this.extend(request, params));\n }\n //\n // spot\n //\n // {\n // \"code\": 1000,\n // \"trace\":\"886fb6ae-456b-4654-b4e0-d681ac05cea1\",\n // \"message\": \"OK\",\n // \"data\": {}\n // }\n //\n // swap\n //\n // {\n // \"code\": 1000,\n // \"message\": \"Ok\",\n // \"trace\": \"7f9c94e10f9d4513bc08a7bfc2a5559a.70.16954131323145323\"\n // }\n //\n return response;\n }\n async fetchOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {\n if (limit) {\n params['limit'] = limit;\n }\n if (since) {\n params['startTime'] = since;\n }\n if (symbol) {\n params['symbol'] = symbol;\n }\n const responseHistoryOrders = await this.privatePostSpotV4QueryHistoryOrders(params);\n const responseOpenOrders = await this.privatePostSpotV4QueryOpenOrders(params);\n // spot / margin\n // {\n // \"code\" : 1000,\n // \"message\" : \"success\",\n // \"data\" : [ {\n // \"orderId\" : \"118100034543076010\",\n // \"clientOrderId\" : \"118100034543076010\",\n // \"symbol\" : \"BTC_USDT\",\n // \"side\" : \"buy\",\n // \"orderMode\" : \"spot\",\n // \"type\" : \"limit\",\n // \"state\" : \"filled\",\n // \"price\" : \"48800.00\",\n // \"priceAvg\" : \"39999.00\",\n // \"size\" : \"0.10000\",\n // \"filledSize\" : \"0.10000\",\n // \"notional\" : \"4880.00000000\",\n // \"filledNotional\" : \"3999.90000000\",\n // \"createTime\" : 1681701557927,\n // \"updateTime\" : 1681701559408\n // } ],\n // \"trace\" : \"acc282ba9e434cc1a90bf6326de9e119.64.16818913787390001\"\n // }\n const historyOrders = this.safeValue(responseHistoryOrders, 'data', []);\n const openOrders = this.safeValue(responseOpenOrders, 'data', []);\n return this.parseOrders([...historyOrders, ...openOrders], undefined, since, limit);\n }\n async fetchOrdersByStatus(status, symbol = undefined, since = undefined, limit = undefined, params = {}) {\n if (symbol === undefined) {\n throw new InvalidParamsError('fetchOrdersByStatus() requires a symbol argument').exchange(this.id);\n }\n await this.loadMarkets();\n const market = this.market(symbol);\n if (!market['spot']) {\n throw new MarketTypeNotSupportedError(market['type']).addMessage('only spot orders are accepted').exchange(this.id);\n }\n const request = {\n 'symbol': market['id'],\n 'offset': 1,\n 'N': 100, // max limit is 100\n };\n if (status === 'open') {\n request['status'] = 9;\n }\n else if (status === 'closed') {\n request['status'] = 6;\n }\n else if (status === 'canceled') {\n request['status'] = 8;\n }\n else {\n request['status'] = status;\n }\n const response = await this.privateGetSpotV3Orders(this.extend(request, params));\n //\n // spot\n //\n // {\n // \"message\":\"OK\",\n // \"code\":1000,\n // \"trace\":\"70e7d427-7436-4fb8-8cdd-97e1f5eadbe9\",\n // \"data\":{\n // \"current_page\":1,\n // \"orders\":[\n // {\n // \"order_id\":2147601241,\n // \"symbol\":\"BTC_USDT\",\n // \"create_time\":1591099963000,\n // \"side\":\"sell\",\n // \"type\":\"limit\",\n // \"price\":\"9000.00\",\n // \"price_avg\":\"0.00\",\n // \"size\":\"1.00000\",\n // \"notional\":\"9000.00000000\",\n // \"filled_notional\":\"0.00000000\",\n // \"filled_size\":\"0.00000\",\n // \"status\":\"4\"\n // }\n // ]\n // }\n // }\n //\n const data = this.safeValue(response, 'data', {});\n const orders = this.safeValue(data, 'orders', []);\n return this.parseOrders(orders, market, since, limit);\n }\n async fetchOpenOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name bitmart#fetchOpenOrders\n * @see https://developer-pro.bitmart.com/en/spot/#current-open-orders-v4-signed\n * @see https://developer-pro.bitmart.com/en/futures/#get-all-open-orders-keyed\n * @see https://developer-pro.bitmart.com/en/futures/#get-all-current-plan-orders-keyed\n * @description fetch all unfilled currently open orders\n * @param {string} symbol unified market symbol\n * @param {int} [since] the earliest time in ms to fetch open orders for\n * @param {int} [limit] the maximum number of open order structures to retrieve\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {boolean} [params.marginMode] *spot* whether to fetch trades for margin orders or spot orders, defaults to spot orders (only isolated margin orders are supported)\n * @param {int} [params.until] *spot* the latest time in ms to fetch orders for\n * @param {string} [params.type] *swap* order type, 'limit' or 'market'\n * @param {string} [params.order_state] *swap* the order state, 'all' or 'partially_filled', default is 'all'\n * @param {string} [params.orderType] *swap only* 'limit', 'market', or 'trailing'\n * @param {boolean} [params.trailing] *swap only* set to true if you want to fetch trailing orders\n * @param {boolean} [params.trigger] *swap only* set to true if you want to fetch trigger orders\n * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n await this.loadMarkets();\n let market = undefined;\n const request = {};\n if (symbol !== undefined) {\n market = this.market(symbol);\n request['symbol'] = market['id'];\n }\n if (limit !== undefined) {\n request['limit'] = limit;\n }\n let type = undefined;\n let response = undefined;\n [type, params] = this.handleMarketTypeAndParams('fetchOpenOrders', market, params);\n if (type === 'spot') {\n let marginMode = undefined;\n [marginMode, params] = this.handleMarginModeAndParams('fetchOpenOrders', params);\n if (marginMode === 'isolated') {\n request['orderMode'] = 'iso_margin';\n }\n if (since !== undefined) {\n request['startTime'] = since;\n }\n const until = this.safeInteger2(params, 'until', 'endTime');\n if (until !== undefined) {\n params = this.omit(params, ['endTime']);\n request['endTime'] = until;\n }\n response = await this.privatePostSpotV4QueryOpenOrders(this.extend(request, params));\n }\n else if (type === 'swap') {\n const isStop = this.safeValue2(params, 'stop', 'trigger');\n params = this.omit(params, ['stop', 'trigger']);\n if (isStop) {\n response = await this.privateGetContractPrivateCurrentPlanOrder(this.extend(request, params));\n }\n else {\n const trailing = this.safeBool(params, 'trailing', false);\n let orderType = this.safeString(params, 'orderType');\n params = this.omit(params, ['orderType', 'trailing']);\n if (trailing) {\n orderType = 'trailing';\n }\n if (orderType !== undefined) {\n request['type'] = orderType;\n }\n response = await this.privateGetContractPrivateGetOpenOrders(this.extend(request, params));\n }\n }\n else {\n throw new MarketTypeNotSupportedError(type).addMessage('only spot and swap orders are accepted').exchange(this.id);\n }\n //\n // spot\n //\n // {\n // \"code\": 1000,\n // \"message\": \"success\",\n // \"data\": [\n // {\n // \"orderId\": \"183299373022163211\",\n // \"clientOrderId\": \"183299373022163211\",\n // \"symbol\": \"BTC_USDT\",\n // \"side\": \"buy\",\n // \"orderMode\": \"spot\",\n // \"type\": \"limit\",\n // \"state\": \"new\",\n // \"price\": \"25000.00\",\n // \"priceAvg\": \"0.00\",\n // \"size\": \"0.00020\",\n // \"filledSize\": \"0.00000\",\n // \"notional\": \"5.00000000\",\n // \"filledNotional\": \"0.00000000\",\n // \"createTime\": 1695703703338,\n // \"updateTime\": 1695703703359\n // }\n // ],\n // \"trace\": \"15f11d48e3234c81a2e786cr2e7a38e6.71.16957022303515933\"\n // }\n //\n // swap\n //\n // {\n // \"code\": 1000,\n // \"message\": \"Ok\",\n // \"data\": [\n // {\n // \"order_id\": \"230935812485489\",\n // \"client_order_id\": \"\",\n // \"price\": \"24000\",\n // \"size\": \"1\",\n // \"symbol\": \"BTCUSDT\",\n // \"state\": 2,\n // \"side\": 1,\n // \"type\": \"limit\",\n // \"leverage\": \"10\",\n // \"open_type\": \"isolated\",\n // \"deal_avg_price\": \"0\",\n // \"deal_size\": \"0\",\n // \"create_time\": 1695702258629,\n // \"update_time\": 1695702258642\n // }\n // ],\n // \"trace\": \"7f9d94g10f9d4513bc08a7rfc3a5559a.71.16957022303515933\"\n // }\n //\n const data = this.safeValue(response, 'data', []);\n return this.parseOrders(data, market, since, limit);\n }\n async fetchClosedOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name bitmart#fetchClosedOrders\n * @see https://developer-pro.bitmart.com/en/spot/#account-orders-v4-signed\n * @see https://developer-pro.bitmart.com/en/futures/#get-order-history-keyed\n * @description fetches information on multiple closed orders made by the user\n * @param {string} symbol unified market symbol of the market orders were made in\n * @param {int} [since] the earliest time in ms to fetch orders for\n * @param {int} [limit] the maximum number of order structures to retrieve\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {int} [params.until] timestamp in ms of the latest entry\n * @param {string} [params.marginMode] *spot only* 'cross' or 'isolated', for margin trading\n * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n await this.loadMarkets();\n let market = undefined;\n const request = {};\n if (symbol !== undefined) {\n market = this.market(symbol);\n request['symbol'] = market['id'];\n }\n let type = undefined;\n [type, params] = this.handleMarketTypeAndParams('fetchClosedOrders', market, params);\n if (type !== 'spot') {\n if (symbol === undefined) {\n throw new InvalidParamsError('fetchClosedOrders() requires a symbol argument').exchange(this.id);\n }\n }\n let marginMode = undefined;\n [marginMode, params] = this.handleMarginModeAndParams('fetchClosedOrders', params);\n if (marginMode === 'isolated') {\n request['orderMode'] = 'iso_margin';\n }\n const startTimeKey = (type === 'spot') ? 'startTime' : 'start_time';\n if (since !== undefined) {\n request[startTimeKey] = since;\n }\n const endTimeKey = (type === 'spot') ? 'endTime' : 'end_time';\n const until = this.safeInteger2(params, 'until', endTimeKey);\n if (until !== undefined) {\n params = this.omit(params, ['until']);\n request[endTimeKey] = until;\n }\n let response = undefined;\n if (type === 'spot') {\n response = await this.privatePostSpotV4QueryHistoryOrders(this.extend(request, params));\n }\n else {\n response = await this.privateGetContractPrivateOrderHistory(this.extend(request, params));\n }\n const data = this.safeValue(response, 'data', []);\n return this.parseOrders(data, market, since, limit);\n }\n async fetchCanceledOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name bitmart#fetchCanceledOrders\n * @description fetches information on multiple canceled orders made by the user\n * @param {string} symbol unified market symbol of the market orders were made in\n * @param {int} [since] timestamp in ms of the earliest order, default is undefined\n * @param {int} [limit] max number of orders to return, default is undefined\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n return await this.fetchOrdersByStatus('canceled', symbol, since, limit, params);\n }\n async fetchOrder(id, symbol = undefined, params = {}) {\n /**\n * @method\n * @name bitmart#fetchOrder\n * @description fetches information on an order made by the user\n * @see https://developer-pro.bitmart.com/en/spot/#query-order-by-id-v4-signed\n * @see https://developer-pro.bitmart.com/en/spot/#query-order-by-clientorderid-v4-signed\n * @see https://developer-pro.bitmart.com/en/futures/#get-order-detail-keyed\n * @param {string} id the id of the order\n * @param {string} symbol unified symbol of the market the order was made in\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {string} [params.clientOrderId] *spot* fetch the order by client order id instead of order id\n * @param {string} [params.orderType] *swap only* 'limit', 'market', 'liquidate', 'bankruptcy', 'adl' or 'trailing'\n * @param {boolean} [params.trailing] *swap only* set to true if you want to fetch a trailing order\n * @returns {object} An [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n await this.loadMarkets();\n const request = {};\n let type = undefined;\n let market = undefined;\n let response = undefined;\n if (symbol !== undefined) {\n market = this.market(symbol);\n }\n [type, params] = this.handleMarketTypeAndParams('fetchOrder', market, params);\n if (type === 'spot') {\n const clientOrderId = this.safeString(params, 'clientOrderId');\n if (!clientOrderId) {\n request['orderId'] = id;\n }\n if (clientOrderId !== undefined) {\n response = await this.privatePostSpotV4QueryClientOrder(this.extend(request, params));\n }\n else {\n response = await this.privatePostSpotV4QueryOrder(this.extend(request, params));\n }\n }\n else if (type === 'swap') {\n if (symbol === undefined) {\n throw new InvalidParamsError('fetchOrder() requires a symbol argument').exchange(this.id);\n }\n const trailing = this.safeBool(params, 'trailing', false);\n let orderType = this.safeString(params, 'orderType');\n params = this.omit(params, ['orderType', 'trailing']);\n if (trailing) {\n orderType = 'trailing';\n }\n if (orderType !== undefined) {\n request['type'] = orderType;\n }\n request['symbol'] = market['id'];\n request['order_id'] = id;\n response = await this.privateGetContractPrivateOrder(this.extend(request, params));\n }\n //\n // spot\n //\n // {\n // \"code\": 1000,\n // \"message\": \"success\",\n // \"data\": {\n // \"orderId\": \"183347420821295423\",\n // \"clientOrderId\": \"183347420821295423\",\n // \"symbol\": \"BTC_USDT\",\n // \"side\": \"buy\",\n // \"orderMode\": \"spot\",\n // \"type\": \"limit\",\n // \"state\": \"new\",\n // \"price\": \"24000.00\",\n // \"priceAvg\": \"0.00\",\n // \"size\": \"0.00022\",\n // \"filledSize\": \"0.00000\",\n // \"notional\": \"5.28000000\",\n // \"filledNotional\": \"0.00000000\",\n // \"createTime\": 1695783014734,\n // \"updateTime\": 1695783014762\n // },\n // \"trace\": \"ce3e6422c8b44d5fag855348a68693ed.63.14957831547451715\"\n // }\n //\n // swap\n //\n // {\n // \"code\": 1000,\n // \"message\": \"Ok\",\n // \"data\": {\n // \"order_id\": \"230927283405028\",\n // \"client_order_id\": \"\",\n // \"price\": \"23000\",\n // \"size\": \"1\",\n // \"symbol\": \"BTCUSDT\",\n // \"state\": 2,\n // \"side\": 1,\n // \"type\": \"limit\",\n // \"leverage\": \"10\",\n // \"open_type\": \"isolated\",\n // \"deal_avg_price\": \"0\",\n // \"deal_size\": \"0\",\n // \"create_time\": 1695783433600,\n // \"update_time\": 1695783433613\n // },\n // \"trace\": \"4cad855075664097af6ba5257c47605d.63.14957831547451715\"\n // }\n //\n const data = this.safeValue(response, 'data', {});\n return this.parseOrder(data, market);\n }\n async fetchDepositAddress(code, params = {}) {\n /**\n * @method\n * @name bitmart#fetchDepositAddress\n * @description fetch the deposit address for a currency associated with this account\n * @param {string} code unified currency code\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} an [address structure]{@link https://docs.ccxt.com/#/?id=address-structure}\n */\n await this.loadMarkets();\n const networkCode = this.safeString(params, 'network');\n const currencyId = this.safeValue(this.options['currencyIdsByCodeAndNetwork'][code], networkCode);\n if (currencyId === undefined) {\n throw new ExchangeError().addMessage('fetchDepositAddress() does not support ' + code + ' with network ' + networkCode + ', specify a supported network in params.network').exchange(this.id);\n }\n const request = {\n 'currency': currencyId,\n };\n const response = await this.privateGetAccountV1DepositAddress(this.extend(request, params));\n //\n // {\n // \"message\":\"OK\",\n // \"code\":1000,\n // \"trace\":\"0e6edd79-f77f-4251-abe5-83ba75d06c1a\",\n // \"data\":{\n // \"currency\":\"USDT-TRC20\",\n // \"chain\":\"USDT-TRC20\",\n // \"address\":\"TGR3ghy2b5VLbyAYrmiE15jasR6aPHTvC5\",\n // \"address_memo\":\"\"\n // }\n // }\n //\n const data = this.safeValue(response, 'data', {});\n const address = this.safeString(data, 'address');\n const tag = this.safeString(data, 'address_memo');\n const chain = this.safeString(data, 'chain');\n let network = undefined;\n if (chain !== undefined) {\n const parts = chain.split('-');\n const networkId = this.safeString(parts, 1);\n network = this.safeNetwork(networkId);\n }\n this.checkAddress(address);\n return {\n 'currency': code,\n 'address': address,\n 'tag': tag,\n 'network': network,\n 'info': response,\n };\n }\n safeNetwork(networkId) {\n // TODO: parse\n return networkId;\n }\n async withdraw(code, amount, address, tag = undefined, params = {}) {\n /**\n * @method\n * @name bitmart#withdraw\n * @description make a withdrawal\n * @param {string} code unified currency code\n * @param {float} amount the amount to withdraw\n * @param {string} address the address to withdraw to\n * @param {string} tag\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} a [transaction structure]{@link https://docs.ccxt.com/#/?id=transaction-structure}\n */\n [tag, params] = this.handleWithdrawTagAndParams(tag, params);\n this.checkAddress(address);\n await this.loadMarkets();\n const networkCode = this.safeString(params, 'network');\n const currencyId = this.safeValue(this.options['currencyIdsByCodeAndNetwork'][code], networkCode);\n if (currencyId === undefined) {\n throw new ExchangeError().addMessage('fetchDepositAddress() does not support ' + code + ' with network ' + networkCode + ', specify a supported network in params.network').exchange(this.id);\n }\n const precisionAmount = this.currencyToPrecision(code, amount, networkCode);\n const request = {\n 'currency': currencyId,\n 'amount': precisionAmount,\n 'destination': 'To Digital Address',\n 'address': address,\n };\n if (tag !== undefined) {\n request['address_memo'] = tag;\n }\n const response = await this.privatePostAccountV1WithdrawApply(this.extend(request, params));\n //\n // {\n // \"code\": 1000,\n // \"trace\":\"886fb6ae-456b-4654-b4e0-d681ac05cea1\",\n // \"message\": \"OK\",\n // \"data\": {\n // \"withdraw_id\": \"121212\"\n // }\n // }\n //\n const data = this.safeValue(response, 'data');\n const currency = this.safeCurrencyByCode(code);\n const transaction = this.parseTransaction(data, currency);\n return this.extend(transaction, {\n 'code': code,\n 'address': address,\n 'tag': tag,\n });\n }\n async fetchTransactionsByType(type, code = undefined, since = undefined, limit = undefined, params = {}) {\n await this.loadMarkets();\n if (limit === undefined) {\n limit = 50; // max 50\n }\n const request = {\n 'operation_type': type,\n 'offset': 1,\n 'N': limit,\n };\n if (code !== undefined) {\n const currencyId = code; // every token is present without the network part (for the default network, e.g. BTC)\n request['currency'] = currencyId;\n }\n const response = await this.privateGetAccountV2DepositWithdrawHistory(this.extend(request, params));\n //\n // {\n // \"message\":\"OK\",\n // \"code\":1000,\n // \"trace\":\"142bf92a-fc50-4689-92b6-590886f90b97\",\n // \"data\":{\n // \"records\":[\n // {\n // \"withdraw_id\":\"1679952\",\n // \"deposit_id\":\"\",\n // \"operation_type\":\"withdraw\",\n // \"currency\":\"BMX\",\n // \"apply_time\":1588867374000,\n // \"arrival_amount\":\"59.000000000000\",\n // \"fee\":\"1.000000000000\",\n // \"status\":0,\n // \"address\":\"0xe57b69a8776b37860407965B73cdFFBDFe668Bb5\",\n // \"address_memo\":\"\",\n // \"tx_id\":\"\"\n // },\n // ]\n // }\n // }\n //\n const data = this.safeValue(response, 'data', {});\n const records = this.safeValue(data, 'records', []);\n const currency = this.safeCurrencyByCode(code);\n return this.parseTransactions(records, currency, since, limit);\n }\n async fetchDeposit(id, code = undefined, params = {}) {\n /**\n * @method\n * @name bitmart#fetchDeposit\n * @description fetch information on a deposit\n * @param {string} id deposit id\n * @param {string} code not used by bitmart fetchDeposit ()\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} a [transaction structure]{@link https://docs.ccxt.com/#/?id=transaction-structure}\n */\n await this.loadMarkets();\n const request = {\n 'id': id,\n };\n const response = await this.privateGetAccountV1DepositWithdrawDetail(this.extend(request, params));\n //\n // {\n // \"message\":\"OK\",\n // \"code\":1000,\n // \"trace\":\"f7f74924-14da-42a6-b7f2-d3799dd9a612\",\n // \"data\":{\n // \"record\":{\n // \"withdraw_id\":\"\",\n // \"deposit_id\":\"1679952\",\n // \"operation_type\":\"deposit\",\n // \"currency\":\"BMX\",\n // \"apply_time\":1588867374000,\n // \"arrival_amount\":\"59.000000000000\",\n // \"fee\":\"1.000000000000\",\n // \"status\":0,\n // \"address\":\"0xe57b69a8776b37860407965B73cdFFBDFe668Bb5\",\n // \"address_memo\":\"\",\n // \"tx_id\":\"\"\n // }\n // }\n // }\n //\n const data = this.safeValue(response, 'data', {});\n const record = this.safeValue(data, 'record', {});\n return this.parseTransaction(record);\n }\n async fetchDeposits(code = undefined, since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name bitmart#fetchDeposits\n * @description fetch all deposits made to an account\n * @param {string} code unified currency code\n * @param {int} [since] the earliest time in ms to fetch deposits for\n * @param {int} [limit] the maximum number of deposits structures to retrieve\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object[]} a list of [transaction structures]{@link https://docs.ccxt.com/#/?id=transaction-structure}\n */\n return await this.fetchTransactionsByType('deposit', code, since, limit, params);\n }\n async fetchWithdrawal(id, code = undefined, params = {}) {\n /**\n * @method\n * @name bitmart#fetchWithdrawal\n * @description fetch data on a currency withdrawal via the withdrawal id\n * @param {string} id withdrawal id\n * @param {string} code not used by bitmart.fetchWithdrawal\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} a [transaction structure]{@link https://docs.ccxt.com/#/?id=transaction-structure}\n */\n await this.loadMarkets();\n const request = {\n 'id': id,\n };\n const response = await this.privateGetAccountV1DepositWithdrawDetail(this.extend(request, params));\n //\n // {\n // \"message\":\"OK\",\n // \"code\":1000,\n // \"trace\":\"f7f74924-14da-42a6-b7f2-d3799dd9a612\",\n // \"data\":{\n // \"record\":{\n // \"withdraw_id\":\"1679952\",\n // \"deposit_id\":\"\",\n // \"operation_type\":\"withdraw\",\n // \"currency\":\"BMX\",\n // \"apply_time\":1588867374000,\n // \"arrival_amount\":\"59.000000000000\",\n // \"fee\":\"1.000000000000\",\n // \"status\":0,\n // \"address\":\"0xe57b69a8776b37860407965B73cdFFBDFe668Bb5\",\n // \"address_memo\":\"\",\n // \"tx_id\":\"\"\n // }\n // }\n // }\n //\n const data = this.safeValue(response, 'data', {});\n const record = this.safeValue(data, 'record', {});\n return this.parseTransaction(record);\n }\n async fetchWithdrawals(code = undefined, since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name bitmart#fetchWithdrawals\n * @description fetch all withdrawals made from an account\n * @param {string} code unified currency code\n * @param {int} [since] the earliest time in ms to fetch withdrawals for\n * @param {int} [limit] the maximum number of withdrawals structures to retrieve\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object[]} a list of [transaction structures]{@link https://docs.ccxt.com/#/?id=transaction-structure}\n */\n return await this.fetchTransactionsByType('withdraw', code, since, limit, params);\n }\n parseTransactionStatus(status) {\n const statuses = {\n '0': 'pending',\n '1': 'pending',\n '2': 'pending',\n '3': 'ok',\n '4': 'canceled',\n '5': 'failed', // Fail\n };\n return this.safeString(statuses, status, status);\n }\n parseTransaction(transaction, currency = undefined) {\n //\n // withdraw\n //\n // {\n // \"withdraw_id\": \"121212\"\n // }\n //\n // fetchDeposits, fetchWithdrawals, fetchWithdrawal\n //\n // {\n // \"withdraw_id\":\"1679952\",\n // \"deposit_id\":\"\",\n // \"operation_type\":\"withdraw\",\n // \"currency\":\"BMX\",\n // \"apply_time\":1588867374000,\n // \"arrival_amount\":\"59.000000000000\",\n // \"fee\":\"1.000000000000\",\n // \"status\":0,\n // \"address\":\"0xe57b69a8776b37860407965B73cdFFBDFe668Bb5\",\n // \"address_memo\":\"\",\n // \"tx_id\":\"\"\n // }\n //\n let id = undefined;\n const withdrawId = this.safeString(transaction, 'withdraw_id');\n const depositId = this.safeString(transaction, 'deposit_id');\n let type = undefined;\n if ((withdrawId !== undefined) && (withdrawId !== '')) {\n type = 'withdraw';\n id = withdrawId;\n }\n else if ((depositId !== undefined) && (depositId !== '')) {\n type = 'deposit';\n id = depositId;\n }\n const amount = this.safeNumber(transaction, 'arrival_amount');\n const timestamp = this.safeInteger(transaction, 'apply_time');\n const currencyId = this.safeString(transaction, 'currency');\n let code = this.safeCurrencyCode(currencyId);\n const status = this.parseTransactionStatus(this.safeString(transaction, 'status'));\n const feeCost = this.safeNumber(transaction, 'fee');\n let fee = undefined;\n if (feeCost !== undefined) {\n fee = {\n 'cost': feeCost,\n 'currency': code,\n };\n }\n const txid = this.safeString(transaction, 'tx_id');\n const address = this.safeString(transaction, 'address');\n const tag = this.safeString(transaction, 'address_memo');\n let network = undefined;\n const NETWORK_SEPARATOR = '-';\n if (code.includes(NETWORK_SEPARATOR)) {\n const parts = code.split(NETWORK_SEPARATOR);\n network = this.safeNetwork(parts[1]);\n code = code.replace('-' + network.toUpperCase(), '');\n if (fee.currency.includes(NETWORK_SEPARATOR)) {\n fee.currency = fee.currency.split(NETWORK_SEPARATOR)[0];\n }\n }\n return {\n 'info': transaction,\n 'id': id,\n 'currency': code,\n 'amount': amount,\n 'network': network,\n 'address': address,\n 'addressFrom': undefined,\n 'addressTo': undefined,\n 'tag': tag,\n 'tagFrom': undefined,\n 'tagTo': undefined,\n 'status': status,\n 'type': type,\n 'updated': undefined,\n 'txid': txid,\n 'internal': undefined,\n 'comment': undefined,\n 'timestamp': (timestamp !== 0) ? timestamp : undefined,\n 'datetime': (timestamp !== 0) ? this.iso8601(timestamp) : undefined,\n 'fee': fee,\n };\n }\n async transfer(code, amount, fromAccount, toAccount, params = {}) {\n /**\n * @method\n * @name bitmart#transfer\n * @description transfer currency internally between wallets on the same account, currently only supports transfer between spot and margin\n * @see https://developer-pro.bitmart.com/en/spot/#margin-asset-transfer-signed\n * @see https://developer-pro.bitmart.com/en/futures/#transfer-signed\n * @param {string} code unified currency code\n * @param {float} amount amount to transfer\n * @param {string} fromAccount account to transfer from\n * @param {string} toAccount account to transfer to\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} a [transfer structure]{@link https://docs.ccxt.com/#/?id=transfer-structure}\n */\n await this.loadMarkets();\n const amountToPrecision = this.currencyToPrecision(code, amount);\n const currencyId = code; // every token is present without the network part (for the default network, e.g. BTC)\n const request = {\n 'amount': amountToPrecision,\n 'currency': currencyId,\n };\n const fromId = this.convertTypeToAccount(fromAccount);\n const toId = this.convertTypeToAccount(toAccount);\n if (fromAccount === 'spot') {\n if (toAccount === 'margin') {\n request['side'] = 'in';\n request['symbol'] = toId;\n }\n else if (toAccount === 'swap') {\n request['type'] = 'spot_to_contract';\n }\n }\n else if (toAccount === 'spot') {\n if (fromAccount === 'margin') {\n request['side'] = 'out';\n request['symbol'] = fromId;\n }\n else if (fromAccount === 'swap') {\n request['type'] = 'contract_to_spot';\n }\n }\n else {\n throw new InvalidParamsError('transfer() requires either fromAccount or toAccount to be spot').exchange(this.id);\n }\n let response = undefined;\n if ((fromAccount === 'margin') || (toAccount === 'margin')) {\n response = await this.privatePostSpotV1MarginIsolatedTransfer(this.extend(request, params));\n }\n else if ((fromAccount === 'swap') || (toAccount === 'swap')) {\n response = await this.privatePostAccountV1TransferContract(this.extend(request, params));\n }\n //\n // margin\n //\n // {\n // \"message\": \"OK\",\n // \"code\": 1000,\n // \"trace\": \"b26cecec-ef5a-47d9-9531-2bd3911d3d55\",\n // \"data\": {\n // \"transfer_id\": \"ca90d97a621e47d49774f19af6b029f5\"\n // }\n // }\n //\n // swap\n //\n // {\n // \"message\": \"OK\",\n // \"code\": 1000,\n // \"trace\": \"4cad858074667097ac6ba5257c57305d.68.16953302431189455\",\n // \"data\": {\n // \"currency\": \"USDT\",\n // \"amount\": \"5\"\n // }\n // }\n //\n const currency = this.safeCurrencyByCode(code);\n const data = this.safeValue(response, 'data', {});\n return this.extend(this.parseTransfer(data, currency), {\n 'amount': this.parseNumber(amountToPrecision),\n 'fromAccount': fromAccount,\n 'toAccount': toAccount,\n 'status': this.parseTransferStatus(this.safeString2(response, 'code', 'message')),\n });\n }\n parseTransferStatus(status) {\n const statuses = {\n '1000': 'ok',\n 'OK': 'ok',\n 'FINISHED': 'ok',\n };\n return this.safeString(statuses, status, status);\n }\n parseTransferToAccount(type) {\n const types = {\n 'contract_to_spot': 'spot',\n 'spot_to_contract': 'swap',\n };\n return this.safeString(types, type, type);\n }\n parseTransferFromAccount(type) {\n const types = {\n 'contract_to_spot': 'swap',\n 'spot_to_contract': 'spot',\n };\n return this.safeString(types, type, type);\n }\n parseTransfer(transfer, currency = undefined) {\n //\n // margin\n //\n // {\n // \"transfer_id\": \"ca90d97a621e47d49774f19af6b029f5\"\n // }\n //\n // swap\n //\n // {\n // \"currency\": \"USDT\",\n // \"amount\": \"5\"\n // }\n //\n // fetchTransfers\n //\n // {\n // \"transfer_id\": \"902463535961567232\",\n // \"currency\": \"USDT\",\n // \"amount\": \"5\",\n // \"type\": \"contract_to_spot\",\n // \"state\": \"FINISHED\",\n // \"timestamp\": 1695330539565\n // }\n //\n const currencyId = this.safeString(transfer, 'currency');\n const timestamp = this.safeInteger(transfer, 'timestamp');\n return {\n 'id': this.safeString(transfer, 'transfer_id'),\n 'timestamp': timestamp,\n 'datetime': this.iso8601(timestamp),\n 'currency': this.safeCurrencyCode(currencyId),\n 'amount': this.safeNumber(transfer, 'amount'),\n 'fromAccount': this.parseTransferFromAccount(this.safeString(transfer, 'type')),\n 'toAccount': this.parseTransferToAccount(this.safeString(transfer, 'type')),\n 'status': this.parseTransferStatus(this.safeString(transfer, 'state')),\n };\n }\n async fetchTransfers(code = undefined, since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name bitmart#fetchTransfers\n * @description fetch a history of internal transfers made on an account, only transfers between spot and swap are supported\n * @see https://developer-pro.bitmart.com/en/futures/#get-transfer-list-signed\n * @param {string} code unified currency code of the currency transferred\n * @param {int} [since] the earliest time in ms to fetch transfers for\n * @param {int} [limit] the maximum number of transfer structures to retrieve\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {int} [params.page] the required number of pages, default is 1, max is 1000\n * @param {int} [params.until] the latest time in ms to fetch transfers for\n * @returns {object[]} a list of [transfer structures]{@link https://docs.ccxt.com/#/?id=transfer-structure}\n */\n await this.loadMarkets();\n if (limit === undefined) {\n limit = 10;\n }\n const request = {\n 'page': this.safeInteger(params, 'page', 1),\n 'limit': limit, // default is 10, max is 100\n };\n let currency = undefined;\n if (code !== undefined) {\n currency = this.currency(code);\n request['currency'] = currency['id'];\n }\n if (since !== undefined) {\n request['time_start'] = since;\n }\n if (limit !== undefined) {\n request['limit'] = limit;\n }\n const until = this.safeInteger2(params, 'until', 'till'); // unified in milliseconds\n const endTime = this.safeInteger(params, 'time_end', until); // exchange-specific in milliseconds\n params = this.omit(params, ['till', 'until']);\n if (endTime !== undefined) {\n request['time_end'] = endTime;\n }\n const response = await this.privatePostAccountV1TransferContractList(this.extend(request, params));\n //\n // {\n // \"message\": \"OK\",\n // \"code\": 1000,\n // \"trace\": \"7f9d93e10f9g4513bc08a7btc2a5559a.69.16953325693032193\",\n // \"data\": {\n // \"records\": [\n // {\n // \"transfer_id\": \"902463535961567232\",\n // \"currency\": \"USDT\",\n // \"amount\": \"5\",\n // \"type\": \"contract_to_spot\",\n // \"state\": \"FINISHED\",\n // \"timestamp\": 1695330539565\n // },\n // ]\n // }\n // }\n //\n const data = this.safeValue(response, 'data', {});\n const records = this.safeValue(data, 'records', []);\n return this.parseTransfers(records, currency, since, limit);\n }\n async fetchPosition(symbol, params = {}) {\n /**\n * @method\n * @name bitmart#fetchPosition\n * @description fetch data on a single open contract trade position\n * @see https://developer-pro.bitmart.com/en/futures/#get-current-position-keyed\n * @param {string} symbol unified market symbol of the market the position is held in\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} a [position structure]{@link https://docs.ccxt.com/#/?id=position-structure}\n */\n await this.loadMarkets();\n const market = this.market(symbol);\n const request = {\n 'symbol': market['id'],\n };\n const response = await this.privateGetContractPrivatePosition(this.extend(request, params));\n //\n // {\n // \"code\": 1000,\n // \"message\": \"Ok\",\n // \"data\": [\n // {\n // \"symbol\": \"BTCUSDT\",\n // \"leverage\": \"10\",\n // \"timestamp\": 1696392515269,\n // \"current_fee\": \"0.0014250028\",\n // \"open_timestamp\": 1696392256998,\n // \"current_value\": \"27.4039\",\n // \"mark_price\": \"27.4039\",\n // \"position_value\": \"27.4079\",\n // \"position_cross\": \"3.75723474\",\n // \"maintenance_margin\": \"0.1370395\",\n // \"close_vol\": \"0\",\n // \"close_avg_price\": \"0\",\n // \"open_avg_price\": \"27407.9\",\n // \"entry_price\": \"27407.9\",\n // \"current_amount\": \"1\",\n // \"unrealized_value\": \"-0.004\",\n // \"realized_value\": \"-0.01644474\",\n // \"position_type\": 1\n // }\n // ],\n // \"trace\":\"4cad855074664097ac5ba5257c47305d.67.16963925142065945\"\n // }\n //\n const data = this.safeValue(response, 'data', []);\n const first = this.safeValue(data, 0, {});\n return this.parsePosition(first, market);\n }\n async fetchPositions(symbols = undefined, params = {}) {\n /**\n * @method\n * @name bitmart#fetchPositions\n * @description fetch all open contract positions\n * @see https://developer-pro.bitmart.com/en/futures/#get-current-position-keyed\n * @param {string[]|undefined} symbols list of unified market symbols\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object[]} a list of [position structures]{@link https://docs.ccxt.com/#/?id=position-structure}\n */\n await this.loadMarkets();\n let market = undefined;\n let symbolsLength = undefined;\n if (symbols !== undefined) {\n symbolsLength = symbols.length;\n const first = this.safeString(symbols, 0);\n market = this.market(first);\n }\n const request = {};\n if (symbolsLength === 1) {\n // only supports symbols as undefined or sending one symbol\n request['symbol'] = market['id'];\n }\n const response = await this.privateGetContractPrivatePosition(this.extend(request, params));\n //\n // {\n // \"code\": 1000,\n // \"message\": \"Ok\",\n // \"data\": [\n // {\n // \"symbol\": \"BTCUSDT\",\n // \"leverage\": \"10\",\n // \"timestamp\": 1696392515269,\n // \"current_fee\": \"0.0014250028\",\n // \"open_timestamp\": 1696392256998,\n // \"current_value\": \"27.4039\",\n // \"mark_price\": \"27.4039\",\n // \"position_value\": \"27.4079\",\n // \"position_cross\": \"3.75723474\",\n // \"maintenance_margin\": \"0.1370395\",\n // \"close_vol\": \"0\",\n // \"close_avg_price\": \"0\",\n // \"open_avg_price\": \"27407.9\",\n // \"entry_price\": \"27407.9\",\n // \"current_amount\": \"1\",\n // \"unrealized_value\": \"-0.004\",\n // \"realized_value\": \"-0.01644474\",\n // \"position_type\": 1\n // },\n // ],\n // \"trace\":\"4cad855074664097ac5ba5257c47305d.67.16963925142065945\"\n // }\n //\n const positions = this.safeValue(response, 'data', []);\n const result = [];\n for (let i = 0; i < positions.length; i++) {\n result.push(this.parsePosition(positions[i]));\n }\n symbols = this.marketSymbols(symbols);\n return this.filterByArrayPositions(result, 'symbol', symbols, false);\n }\n async loadMarketsHelper(reload, params) {\n await super.loadMarketsHelper(reload, params);\n const cachedCurrencyIdsByCodeAndNetwork = await this.cache.get(currencyIdsByCodeAndNetworkCodeCacheIdentifier(this.id), { 'clone': false });\n this.options['currencyIdsByCodeAndNetwork'] = cachedCurrencyIdsByCodeAndNetwork?.data;\n }\n parsePosition(position, market = undefined) {\n //\n // {\n // \"symbol\": \"BTCUSDT\",\n // \"leverage\": \"10\",\n // \"timestamp\": 1696392515269,\n // \"current_fee\": \"0.0014250028\",\n // \"open_timestamp\": 1696392256998,\n // \"current_value\": \"27.4039\",\n // \"mark_price\": \"27.4039\",\n // \"position_value\": \"27.4079\",\n // \"position_cross\": \"3.75723474\",\n // \"maintenance_margin\": \"0.1370395\",\n // \"close_vol\": \"0\",\n // \"close_avg_price\": \"0\",\n // \"open_avg_price\": \"27407.9\",\n // \"entry_price\": \"27407.9\",\n // \"current_amount\": \"1\",\n // \"unrealized_value\": \"-0.004\",\n // \"realized_value\": \"-0.01644474\",\n // \"position_type\": 1\n // }\n //\n const marketId = this.safeString(position, 'symbol');\n market = this.safeMarket(marketId, market);\n const symbol = market['symbol'];\n const timestamp = this.safeInteger(position, 'timestamp');\n const side = this.safeInteger(position, 'position_type');\n const maintenanceMargin = this.safeString(position, 'maintenance_margin');\n const notional = this.safeString(position, 'current_value');\n const collateral = this.safeString(position, 'position_cross');\n const maintenanceMarginPercentage = Precise.stringDiv(maintenanceMargin, notional);\n const marginRatio = Precise.stringDiv(maintenanceMargin, collateral);\n return this.safePosition({\n 'info': position,\n 'id': undefined,\n 'symbol': symbol,\n 'timestamp': timestamp,\n 'datetime': this.iso8601(timestamp),\n 'lastUpdateTimestamp': undefined,\n 'hedged': undefined,\n 'side': (side === 1) ? 'long' : 'short',\n 'contracts': this.safeNumber(position, 'current_amount'),\n 'contractSize': this.safeNumber(market, 'contractSize'),\n 'entryPrice': this.safeNumber(position, 'entry_price'),\n 'markPrice': this.safeNumber(position, 'mark_price'),\n 'lastPrice': undefined,\n 'notional': this.parseNumber(notional),\n 'leverage': this.safeNumber(position, 'leverage'),\n 'collateral': this.parseNumber(collateral),\n 'initialMargin': undefined,\n 'initialMarginPercentage': undefined,\n 'maintenanceMargin': this.parseNumber(maintenanceMargin),\n 'maintenanceMarginPercentage': this.parseNumber(maintenanceMarginPercentage),\n 'unrealizedPnl': this.safeNumber(position, 'unrealized_value'),\n 'realizedPnl': this.safeNumber(position, 'realized_value'),\n 'liquidationPrice': undefined,\n 'marginMode': undefined,\n 'percentage': undefined,\n 'marginRatio': this.parseNumber(marginRatio),\n 'stopLossPrice': undefined,\n 'takeProfitPrice': undefined,\n });\n }\n nonce() {\n return this.milliseconds() - this.options['timeDifference'];\n }\n async sign(path, api = 'public', method = 'GET', params = {}, headers = undefined, body = undefined) {\n const v2ContractBaseUrl = ['contract/private/assets-detail'];\n const baseUrl = this.implodeHostname(v2ContractBaseUrl.includes(path) ? this.urls['api']['restV2'] : this.urls['api']['rest']);\n let url = baseUrl + '/' + this.implodeParams(path, params);\n const query = this.omit(params, this.extractParams(path));\n let queryString = '';\n const getOrDelete = (method === 'GET') || (method === 'DELETE');\n if (getOrDelete) {\n if (Object.keys(query).length) {\n queryString = this.urlencode(query);\n url += '?' + queryString;\n }\n }\n if (api === 'private') {\n this.checkRequiredCredentials();\n const timestamp = this.nonce().toString();\n const brokerId = this.safeString(this.options, 'brokerId', 'CCXTxBitmart000');\n headers = {\n 'X-BM-KEY': this.apiKey,\n 'X-BM-TIMESTAMP': timestamp,\n 'X-BM-BROKER-ID': brokerId,\n 'Content-Type': 'application/json',\n };\n if (!getOrDelete) {\n body = this.json(query);\n queryString = body;\n }\n const auth = timestamp + '#' + this.uid + '#' + queryString;\n let signature = undefined;\n if (this.externalSigner) {\n signature = await this.externalSigner.sign({\n 'payload': this.encode(auth),\n 'publicApiKey': this.apiKey,\n 'exchangeId': this.id,\n });\n }\n else {\n signature = this.hmac(this.encode(auth), this.encode(this.secret), sha256);\n }\n headers['X-BM-SIGN'] = signature;\n }\n return { 'url': url, 'method': method, 'body': body, 'headers': headers };\n }\n handleErrors(code, reason, url, method, headers, body, response, requestHeaders, requestBody) {\n if (response === undefined) {\n return undefined;\n }\n //\n // spot\n //\n // {\"message\":\"Bad Request [to is empty]\",\"code\":50000,\"trace\":\"f9d46e1b-4edb-4d07-a06e-4895fb2fc8fc\",\"data\":{}}\n // {\"message\":\"Bad Request [from is empty]\",\"code\":50000,\"trace\":\"579986f7-c93a-4559-926b-06ba9fa79d76\",\"data\":{}}\n // {\"message\":\"Kline size over 500\",\"code\":50004,\"trace\":\"d625caa8-e8ca-4bd2-b77c-958776965819\",\"data\":{}}\n // {\"message\":\"Balance not enough\",\"code\":50020,\"trace\":\"7c709d6a-3292-462c-98c5-32362540aeef\",\"data\":{}}\n //\n // contract\n //\n // {\"errno\":\"OK\",\"message\":\"INVALID_PARAMETER\",\"code\":49998,\"trace\":\"eb5ebb54-23cd-4de2-9064-e090b6c3b2e3\",\"data\":null}\n //\n const message = this.safeStringLower(response, 'message');\n const isErrorMessage = (message !== undefined) && (message !== 'ok') && (message !== 'success');\n const errorCode = this.safeString(response, 'code');\n const isErrorCode = (errorCode !== undefined) && (errorCode !== '1000');\n if (isErrorCode || isErrorMessage) {\n const userMessage = errorCode + ': ' + message;\n this.throwExactlyMatchedException(this.exceptions['exact'], errorCode, userMessage);\n this.throwBroadlyMatchedException(this.exceptions['broad'], errorCode, userMessage);\n this.throwExactlyMatchedException(this.exceptions['exact'], message, userMessage);\n this.throwBroadlyMatchedException(this.exceptions['broad'], message, userMessage);\n throw new ExchangeError().addMessage(userMessage).exchange(this.id); // unknown message\n }\n return undefined;\n }\n}\n","// ----------------------------------------------------------------------------\n\n// PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:\n// https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code\n// EDIT THE CORRESPONDENT .ts FILE INSTEAD\n\n// ---------------------------------------------------------------------------\nimport Exchange from './abstract/bitstamp.js';\nimport { Precise } from './base/Precise.js';\nimport { TICK_SIZE } from './base/functions/number.js';\nimport { AuthenticationError, ExchangeError, ExchangeInvalidNonceError, ExchangeInvalidPermissionsError, ExchangeNotAvailableError, ExchangeUnderMaintenanceError, GetDepositAddressError, InsufficientBalanceError, InvalidAddressError, InvalidParamsError, OrderNotFoundError } from './sdk/errors.js';\nimport { sha256 } from './static_dependencies/noble-hashes/sha256.js';\n// ---------------------------------------------------------------------------\n/**\n * @class bitstamp\n * @augments Exchange\n */\nexport default class bitstamp extends Exchange {\n describe() {\n return this.deepExtend(super.describe(), {\n 'id': 'bitstamp',\n 'name': 'Bitstamp',\n 'countries': ['GB'],\n // 8000 requests per 10 minutes = 8000 / 600 = 13.33333333 requests per second => 1000ms / 13.33333333 = 75ms between requests on average\n 'rateLimit': 75,\n 'version': 'v2',\n 'userAgent': this.userAgents['chrome'],\n 'pro': true,\n 'has': {\n 'CORS': true,\n 'spot': true,\n 'margin': false,\n 'swap': false,\n 'future': false,\n 'option': false,\n 'cancelAllOrders': true,\n 'cancelOrder': true,\n 'createOrder': true,\n 'fetchBalance': true,\n 'fetchCurrencies': true,\n 'fetchDepositAddress': true,\n 'fetchDepositsWithdrawals': true,\n 'fetchDepositWithdrawFee': 'emulated',\n 'fetchDepositWithdrawFees': true,\n 'fetchLedger': true,\n 'fetchMarkets': true,\n 'fetchMyTrades': true,\n 'fetchOHLCV': true,\n 'fetchOpenOrders': true,\n 'fetchOrder': true,\n 'fetchOrderBook': true,\n 'fetchPosition': false,\n 'fetchPositions': false,\n 'fetchPositionsRisk': false,\n 'fetchTicker': true,\n 'fetchTickers': true,\n 'fetchTrades': true,\n 'fetchTradingFee': true,\n 'fetchTradingFees': true,\n 'fetchTransactionFees': true,\n 'fetchTransactions': 'emulated',\n 'fetchWithdrawals': true,\n 'withdraw': true,\n },\n 'urls': {\n 'logo': 'https://user-images.githubusercontent.com/1294454/27786377-8c8ab57e-5fe9-11e7-8ea4-2b05b6bcceec.jpg',\n 'api': {\n 'public': 'https://www.bitstamp.net/api',\n 'private': 'https://www.bitstamp.net/api',\n },\n 'www': 'https://www.bitstamp.net',\n 'doc': 'https://www.bitstamp.net/api',\n },\n 'timeframes': {\n '1m': '60',\n '3m': '180',\n '5m': '300',\n '15m': '900',\n '30m': '1800',\n '1h': '3600',\n '2h': '7200',\n '4h': '14400',\n '6h': '21600',\n '12h': '43200',\n '1d': '86400',\n '1w': '259200',\n },\n 'requiredCredentials': {\n 'apiKey': true,\n 'secret': true,\n },\n 'api': {\n 'public': {\n 'get': {\n 'ohlc/{pair}/': 1,\n 'order_book/{pair}/': 1,\n 'ticker/': 1,\n 'ticker_hour/{pair}/': 1,\n 'ticker/{pair}/': 1,\n 'transactions/{pair}/': 1,\n 'trading-pairs-info/': 1,\n 'currencies/': 1,\n 'eur_usd/': 1,\n 'travel_rule/vasps/': 1,\n },\n },\n 'private': {\n 'get': {\n 'travel_rule/contacts/': 1,\n 'contacts/{contact_uuid}/': 1,\n 'earn/subscriptions/': 1,\n 'earn/transactions/': 1,\n },\n 'post': {\n 'account_balances/': 1,\n 'account_balances/{currency}/': 1,\n 'balance/': 1,\n 'balance/{pair}/': 1,\n 'bch_withdrawal/': 1,\n 'bch_address/': 1,\n 'user_transactions/': 1,\n 'user_transactions/{pair}/': 1,\n 'crypto-transactions/': 1,\n 'open_orders/all/': 1,\n 'open_orders/{pair}/': 1,\n 'order_status/': 1,\n 'cancel_order/': 1,\n 'cancel_all_orders/': 1,\n 'cancel_all_orders/{pair}/': 1,\n 'buy/{pair}/': 1,\n 'buy/market/{pair}/': 1,\n 'buy/instant/{pair}/': 1,\n 'sell/{pair}/': 1,\n 'sell/market/{pair}/': 1,\n 'sell/instant/{pair}/': 1,\n 'transfer-to-main/': 1,\n 'transfer-from-main/': 1,\n 'my_trading_pairs/': 1,\n 'fees/trading/': 1,\n 'fees/trading/{pair}': 1,\n 'fees/withdrawal/': 1,\n 'fees/withdrawal/{currency}/': 1,\n 'withdrawal-requests/': 1,\n 'withdrawal/open/': 1,\n 'withdrawal/status/': 1,\n 'withdrawal/cancel/': 1,\n 'liquidation_address/new/': 1,\n 'liquidation_address/info/': 1,\n 'btc_unconfirmed/': 1,\n 'websockets_token/': 1,\n // individual coins\n 'btc_withdrawal/': 1,\n 'btc_address/': 1,\n 'ripple_withdrawal/': 1,\n 'ripple_address/': 1,\n 'ltc_withdrawal/': 1,\n 'ltc_address/': 1,\n 'eth_withdrawal/': 1,\n 'eth_address/': 1,\n 'xrp_withdrawal/': 1,\n 'xrp_address/': 1,\n 'xlm_withdrawal/': 1,\n 'xlm_address/': 1,\n 'pax_withdrawal/': 1,\n 'pax_address/': 1,\n 'link_withdrawal/': 1,\n 'link_address/': 1,\n 'usdc_withdrawal/': 1,\n 'usdc_address/': 1,\n 'omg_withdrawal/': 1,\n 'omg_address/': 1,\n 'dai_withdrawal/': 1,\n 'dai_address/': 1,\n 'knc_withdrawal/': 1,\n 'knc_address/': 1,\n 'mkr_withdrawal/': 1,\n 'mkr_address/': 1,\n 'zrx_withdrawal/': 1,\n 'zrx_address/': 1,\n 'gusd_withdrawal/': 1,\n 'gusd_address/': 1,\n 'aave_withdrawal/': 1,\n 'aave_address/': 1,\n 'bat_withdrawal/': 1,\n 'bat_address/': 1,\n 'uma_withdrawal/': 1,\n 'uma_address/': 1,\n 'snx_withdrawal/': 1,\n 'snx_address/': 1,\n 'uni_withdrawal/': 1,\n 'uni_address/': 1,\n 'yfi_withdrawal/': 1,\n 'yfi_address': 1,\n 'audio_withdrawal/': 1,\n 'audio_address/': 1,\n 'crv_withdrawal/': 1,\n 'crv_address/': 1,\n 'algo_withdrawal/': 1,\n 'algo_address/': 1,\n 'comp_withdrawal/': 1,\n 'comp_address/': 1,\n 'grt_withdrawal': 1,\n 'grt_address/': 1,\n 'usdt_withdrawal/': 1,\n 'usdt_address/': 1,\n 'eurt_withdrawal/': 1,\n 'eurt_address/': 1,\n 'matic_withdrawal/': 1,\n 'matic_address/': 1,\n 'sushi_withdrawal/': 1,\n 'sushi_address/': 1,\n 'chz_withdrawal/': 1,\n 'chz_address/': 1,\n 'enj_withdrawal/': 1,\n 'enj_address/': 1,\n 'alpha_withdrawal/': 1,\n 'alpha_address/': 1,\n 'ftt_withdrawal/': 1,\n 'ftt_address/': 1,\n 'storj_withdrawal/': 1,\n 'storj_address/': 1,\n 'axs_withdrawal/': 1,\n 'axs_address/': 1,\n 'sand_withdrawal/': 1,\n 'sand_address/': 1,\n 'hbar_withdrawal/': 1,\n 'hbar_address/': 1,\n 'rgt_withdrawal/': 1,\n 'rgt_address/': 1,\n 'fet_withdrawal/': 1,\n 'fet_address/': 1,\n 'skl_withdrawal/': 1,\n 'skl_address/': 1,\n 'cel_withdrawal/': 1,\n 'cel_address/': 1,\n 'sxp_withdrawal/': 1,\n 'sxp_address/': 1,\n 'ada_withdrawal/': 1,\n 'ada_address/': 1,\n 'slp_withdrawal/': 1,\n 'slp_address/': 1,\n 'ftm_withdrawal/': 1,\n 'ftm_address/': 1,\n 'perp_withdrawal/': 1,\n 'perp_address/': 1,\n 'dydx_withdrawal/': 1,\n 'dydx_address/': 1,\n 'gala_withdrawal/': 1,\n 'gala_address/': 1,\n 'shib_withdrawal/': 1,\n 'shib_address/': 1,\n 'amp_withdrawal/': 1,\n 'amp_address/': 1,\n 'sgb_withdrawal/': 1,\n 'sgb_address/': 1,\n 'avax_withdrawal/': 1,\n 'avax_address/': 1,\n 'wbtc_withdrawal/': 1,\n 'wbtc_address/': 1,\n 'ctsi_withdrawal/': 1,\n 'ctsi_address/': 1,\n 'cvx_withdrawal/': 1,\n 'cvx_address/': 1,\n 'imx_withdrawal/': 1,\n 'imx_address/': 1,\n 'nexo_withdrawal/': 1,\n 'nexo_address/': 1,\n 'ust_withdrawal/': 1,\n 'ust_address/': 1,\n 'ant_withdrawal/': 1,\n 'ant_address/': 1,\n 'gods_withdrawal/': 1,\n 'gods_address/': 1,\n 'rad_withdrawal/': 1,\n 'rad_address/': 1,\n 'band_withdrawal/': 1,\n 'band_address/': 1,\n 'inj_withdrawal/': 1,\n 'inj_address/': 1,\n 'rly_withdrawal/': 1,\n 'rly_address/': 1,\n 'rndr_withdrawal/': 1,\n 'rndr_address/': 1,\n 'vega_withdrawal/': 1,\n 'vega_address/': 1,\n '1inch_withdrawal/': 1,\n '1inch_address/': 1,\n 'ens_withdrawal/': 1,\n 'ens_address/': 1,\n 'mana_withdrawal/': 1,\n 'mana_address/': 1,\n 'lrc_withdrawal/': 1,\n 'lrc_address/': 1,\n 'ape_withdrawal/': 1,\n 'ape_address/': 1,\n 'mpl_withdrawal/': 1,\n 'mpl_address/': 1,\n 'euroc_withdrawal/': 1,\n 'euroc_address/': 1,\n 'sol_withdrawal/': 1,\n 'sol_address/': 1,\n 'dot_withdrawal/': 1,\n 'dot_address/': 1,\n 'near_withdrawal/': 1,\n 'near_address/': 1,\n 'doge_withdrawal/': 1,\n 'doge_address/': 1,\n 'flr_withdrawal/': 1,\n 'flr_address/': 1,\n 'dgld_withdrawal/': 1,\n 'dgld_address/': 1,\n 'ldo_withdrawal/': 1,\n 'ldo_address/': 1,\n 'travel_rule/contacts/': 1,\n 'earn/subscribe/': 1,\n 'earn/subscriptions/setting/': 1,\n 'earn/unsubscribe': 1,\n 'wecan_withdrawal/': 1,\n 'wecan_address/': 1,\n 'trac_withdrawal/': 1,\n 'trac_address/': 1,\n 'eurcv_withdrawal/': 1,\n 'eurcv_address/': 1,\n 'pyusd_withdrawal/': 1,\n 'pyusd_address/': 1,\n },\n },\n },\n 'fees': {\n 'trading': {\n 'tierBased': true,\n 'percentage': true,\n 'taker': this.parseNumber('0.005'),\n 'maker': this.parseNumber('0.005'),\n 'tiers': {\n 'taker': [\n [this.parseNumber('0'), this.parseNumber('0.005')],\n [this.parseNumber('20000'), this.parseNumber('0.0025')],\n [this.parseNumber('100000'), this.parseNumber('0.0024')],\n [this.parseNumber('200000'), this.parseNumber('0.0022')],\n [this.parseNumber('400000'), this.parseNumber('0.0020')],\n [this.parseNumber('600000'), this.parseNumber('0.0015')],\n [this.parseNumber('1000000'), this.parseNumber('0.0014')],\n [this.parseNumber('2000000'), this.parseNumber('0.0013')],\n [this.parseNumber('4000000'), this.parseNumber('0.0012')],\n [this.parseNumber('20000000'), this.parseNumber('0.0011')],\n [this.parseNumber('50000000'), this.parseNumber('0.0010')],\n [this.parseNumber('100000000'), this.parseNumber('0.0007')],\n [this.parseNumber('500000000'), this.parseNumber('0.0005')],\n [this.parseNumber('2000000000'), this.parseNumber('0.0003')],\n [this.parseNumber('6000000000'), this.parseNumber('0.0001')],\n [this.parseNumber('20000000000'), this.parseNumber('0.00005')],\n [this.parseNumber('20000000001'), this.parseNumber('0')],\n ],\n 'maker': [\n [this.parseNumber('0'), this.parseNumber('0.005')],\n [this.parseNumber('20000'), this.parseNumber('0.0025')],\n [this.parseNumber('100000'), this.parseNumber('0.0024')],\n [this.parseNumber('200000'), this.parseNumber('0.0022')],\n [this.parseNumber('400000'), this.parseNumber('0.0020')],\n [this.parseNumber('600000'), this.parseNumber('0.0015')],\n [this.parseNumber('1000000'), this.parseNumber('0.0014')],\n [this.parseNumber('2000000'), this.parseNumber('0.0013')],\n [this.parseNumber('4000000'), this.parseNumber('0.0012')],\n [this.parseNumber('20000000'), this.parseNumber('0.0011')],\n [this.parseNumber('50000000'), this.parseNumber('0.0010')],\n [this.parseNumber('100000000'), this.parseNumber('0.0007')],\n [this.parseNumber('500000000'), this.parseNumber('0.0005')],\n [this.parseNumber('2000000000'), this.parseNumber('0.0003')],\n [this.parseNumber('6000000000'), this.parseNumber('0.0001')],\n [this.parseNumber('20000000000'), this.parseNumber('0.00005')],\n [this.parseNumber('20000000001'), this.parseNumber('0')],\n ],\n },\n },\n 'funding': {\n 'tierBased': false,\n 'percentage': false,\n 'withdraw': {},\n 'deposit': {\n 'BTC': 0,\n 'BCH': 0,\n 'LTC': 0,\n 'ETH': 0,\n 'XRP': 0,\n 'XLM': 0,\n 'PAX': 0,\n 'USD': 7.5,\n 'EUR': 0,\n },\n },\n },\n 'precisionMode': TICK_SIZE,\n 'exceptions': {\n 'exact': {\n 'No permission found': ExchangeInvalidPermissionsError,\n 'API key not found': AuthenticationError,\n 'IP address not allowed': ExchangeInvalidPermissionsError,\n 'Invalid nonce': ExchangeInvalidNonceError,\n 'Invalid signature': AuthenticationError,\n 'Authentication failed': AuthenticationError,\n 'Missing key, signature and nonce parameters': AuthenticationError,\n 'Wrong API key format': AuthenticationError,\n 'Your account is frozen': ExchangeInvalidPermissionsError,\n 'Please update your profile with your FATCA information, before using API.': ExchangeInvalidPermissionsError,\n 'Order not found.': OrderNotFoundError,\n 'Price is more than 20% below market price.': InvalidParamsError,\n \"Bitstamp.net is under scheduled maintenance. We'll be back soon.\": ExchangeUnderMaintenanceError,\n 'Order could not be placed.': ExchangeNotAvailableError,\n 'Invalid offset.': InvalidParamsError,\n },\n 'broad': {\n 'Minimum order size is': InvalidParamsError,\n 'Check your account balance for details.': InsufficientBalanceError,\n 'Ensure this value has at least': InvalidAddressError,\n 'Ensure that there are no more than': InvalidParamsError, // {\"status\": \"error\", \"reason\": {\"amount\": [\"Ensure that there are no more than 0 decimal places.\"], \"__all__\": [\"\"]}}\n },\n },\n });\n }\n async fetchStatus(params = {}) {\n /**\n * @method\n * @name bitstamp#fetchStatus\n * @description the latest known information on the availability of the exchange API - bitstamp does not have such an endpoint, so we fetch the public EUR/USD conversion rate to see if the exchange is able to respond\n * @see https://www.bitstamp.net/api/#tag/Market-info/operation/GetEURUSDConversionRate\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} a [status structure]{@link https://docs.ccxt.com/#/?id=exchange-status-structure}\n */\n const response = await this.publicGetEurUsd(params);\n // {\n // \"buy\": \"16.52234567\",\n // \"sell\": \"0.06577932\"\n // }\n const buy = this.safeNumber(response, 'buy');\n const sell = this.safeNumber(response, 'sell');\n const status = buy !== undefined && sell !== undefined ? 'ok' : 'maintenance';\n return {\n 'status': status,\n 'updated': undefined,\n 'eta': undefined,\n 'url': undefined,\n 'info': response,\n };\n }\n async fetchMarkets(params = {}) {\n /**\n * @method\n * @name bitstamp#fetchMarkets\n * @description retrieves data on all markets for bitstamp\n * @see https://www.bitstamp.net/api/#tag/Market-info/operation/GetTradingPairsInfo\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object[]} an array of objects representing market data\n */\n const response = await this.fetchMarketsFromCache(params);\n //\n // [\n // {\n // \"trading\": \"Enabled\",\n // \"base_decimals\": 8,\n // \"url_symbol\": \"btcusd\",\n // \"name\": \"BTC/USD\",\n // \"instant_and_market_orders\": \"Enabled\",\n // \"minimum_order\": \"20.0 USD\",\n // \"counter_decimals\": 2,\n // \"description\": \"Bitcoin / U.S. dollar\"\n // }\n // ]\n //\n const result = [];\n for (let i = 0; i < response.length; i++) {\n const market = response[i];\n const name = this.safeString(market, 'name');\n let [base, quote] = name.split('/');\n const baseId = base.toLowerCase();\n const quoteId = quote.toLowerCase();\n base = this.safeCurrencyCode(base);\n quote = this.safeCurrencyCode(quote);\n const minimumOrder = this.safeString(market, 'minimum_order');\n const parts = minimumOrder.split(' ');\n const status = this.safeString(market, 'trading');\n result.push({\n 'id': this.safeString(market, 'url_symbol'),\n 'marketId': baseId + '_' + quoteId,\n 'symbol': base + '/' + quote,\n 'base': base,\n 'quote': quote,\n 'settle': undefined,\n 'baseId': baseId,\n 'quoteId': quoteId,\n 'settleId': undefined,\n 'type': 'spot',\n 'spot': true,\n 'margin': false,\n 'future': false,\n 'swap': false,\n 'option': false,\n 'active': (status === 'Enabled'),\n 'contract': false,\n 'linear': undefined,\n 'inverse': undefined,\n 'contractSize': undefined,\n 'expiry': undefined,\n 'expiryDatetime': undefined,\n 'strike': undefined,\n 'optionType': undefined,\n 'precision': {\n 'amount': this.parseNumber(this.parsePrecision(this.safeString(market, 'base_decimals'))),\n 'price': this.parseNumber(this.parsePrecision(this.safeString(market, 'counter_decimals'))),\n },\n 'limits': {\n 'leverage': {\n 'min': undefined,\n 'max': undefined,\n },\n 'amount': {\n 'min': undefined,\n 'max': undefined,\n },\n 'price': {\n 'min': undefined,\n 'max': undefined,\n },\n 'cost': {\n 'min': this.safeNumber(parts, 0),\n 'max': undefined,\n },\n },\n 'created': undefined,\n 'info': market,\n });\n }\n return result;\n }\n constructCurrencyObject(id, code, name, precision, minCost, originalPayload, isDepositEnabled, isWithdrawEnabled) {\n let currencyType = 'crypto';\n const description = this.describe();\n if (this.isFiat(code)) {\n currencyType = 'fiat';\n }\n const tickSize = this.parseNumber(this.parsePrecision(this.numberToString(precision)));\n return {\n 'id': id,\n 'code': code,\n 'info': originalPayload,\n 'type': currencyType,\n 'name': name,\n 'active': isDepositEnabled && isWithdrawEnabled,\n 'deposit': isDepositEnabled,\n 'withdraw': isWithdrawEnabled,\n 'fee': this.safeNumber(description['fees']['funding']['withdraw'], code),\n 'precision': tickSize,\n 'limits': {\n 'amount': {\n 'min': tickSize,\n 'max': undefined,\n },\n 'price': {\n 'min': tickSize,\n 'max': undefined,\n },\n 'cost': {\n 'min': minCost,\n 'max': undefined,\n },\n 'withdraw': {\n 'min': undefined,\n 'max': undefined,\n },\n },\n 'networks': {},\n };\n }\n async fetchMarketsFromCache(params = {}) {\n // this method is now redundant\n // currencies are now fetched before markets\n const options = this.safeValue(this.options, 'fetchMarkets', {});\n const timestamp = this.safeInteger(options, 'timestamp');\n const expires = this.safeInteger(options, 'expires', 1000);\n const now = this.milliseconds();\n if ((timestamp === undefined) || ((now - timestamp) > expires)) {\n const response = await this.publicGetTradingPairsInfo(params);\n this.options['fetchMarkets'] = this.extend(options, {\n 'response': response,\n 'timestamp': now,\n });\n }\n return this.safeValue(this.options['fetchMarkets'], 'response');\n }\n async fetchCurrencies(params = {}) {\n /**\n * @method\n * @name bitstamp#fetchCurrencies\n * @description fetches all available currencies on an exchange\n * @see https://www.bitstamp.net/api/#tag/Market-info/operation/GetTradingPairsInfo\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} an associative dictionary of currencies\n */\n const marketsPromise = this.fetchMarketsFromCache(params);\n const currenciesPromise = this.publicGetCurrencies();\n const response = await Promise.all([marketsPromise, currenciesPromise]);\n //\n // [\n // {\n // \"trading\": \"Enabled\",\n // \"base_decimals\": 8,\n // \"url_symbol\": \"btcusd\",\n // \"name\": \"BTC/USD\",\n // \"instant_and_market_orders\": \"Enabled\",\n // \"minimum_order\": \"20.0 USD\",\n // \"counter_decimals\": 2,\n // \"description\": \"Bitcoin / U.S. dollar\"\n // },\n // ]\n //\n const markets = response[0];\n const currencies = response[1];\n const indexedCurrencies = this.indexBy(currencies, 'currency');\n const result = {};\n for (let i = 0; i < markets.length; i++) {\n const market = markets[i];\n const name = this.safeString(market, 'name');\n let [base, quote] = name.split('/');\n const baseId = base.toLowerCase();\n const quoteId = quote.toLowerCase();\n base = this.safeCurrencyCode(base);\n quote = this.safeCurrencyCode(quote);\n const description = this.safeString(market, 'description');\n const [baseDescription, quoteDescription] = description.split(' / ');\n const minimumOrder = this.safeString(market, 'minimum_order');\n const parts = minimumOrder.split(' ');\n const cost = parts[0];\n if (!(base in result)) {\n const baseDecimals = this.safeInteger(market, 'base_decimals');\n const matchedCurrency = this.safeValue(indexedCurrencies, base, {});\n const isDepositEnabled = this.safeString(matchedCurrency, 'deposit') === 'Enabled';\n const isWithdrawEnabled = this.safeString(matchedCurrency, 'withdrawal') === 'Enabled';\n result[base] = this.constructCurrencyObject(baseId, base, baseDescription, baseDecimals, undefined, market, isDepositEnabled, isWithdrawEnabled);\n }\n if (!(quote in result)) {\n const counterDecimals = this.safeInteger(market, 'counter_decimals');\n const matchedCurrency = this.safeValue(indexedCurrencies, base, {});\n const isDepositEnabled = this.safeString(matchedCurrency, 'deposit') === 'Enabled';\n const isWithdrawEnabled = this.safeString(matchedCurrency, 'withdrawal') === 'Enabled';\n result[quote] = this.constructCurrencyObject(quoteId, quote, quoteDescription, counterDecimals, this.parseNumber(cost), market, isDepositEnabled, isWithdrawEnabled);\n }\n }\n return result;\n }\n async fetchOrderBook(symbol, limit = undefined, params = {}) {\n /**\n * @method\n * @name bitstamp#fetchOrderBook\n * @description fetches information on open orders with bid (buy) and ask (sell) prices, volumes and other data\n * @see https://www.bitstamp.net/api/#tag/Order-book/operation/GetOrderBook\n * @param {string} symbol unified symbol of the market to fetch the order book for\n * @param {int} [limit] the maximum amount of order book entries to return\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} A dictionary of [order book structures]{@link https://docs.ccxt.com/#/?id=order-book-structure} indexed by market symbols\n */\n await this.loadMarkets();\n const market = this.market(symbol);\n const request = {\n 'pair': market['id'],\n };\n const response = await this.publicGetOrderBookPair(this.extend(request, params));\n //\n // {\n // \"timestamp\": \"1583652948\",\n // \"microtimestamp\": \"1583652948955826\",\n // \"bids\": [\n // [ \"8750.00\", \"1.33685271\" ],\n // [ \"8749.39\", \"0.07700000\" ],\n // [ \"8746.98\", \"0.07400000\" ],\n // ]\n // \"asks\": [\n // [ \"8754.10\", \"1.51995636\" ],\n // [ \"8754.71\", \"1.40000000\" ],\n // [ \"8754.72\", \"2.50000000\" ],\n // ]\n // }\n //\n const microtimestamp = this.safeInteger(response, 'microtimestamp');\n const timestamp = this.parseToInt(microtimestamp / 1000);\n const orderbook = this.parseOrderBook(response, market['symbol'], timestamp);\n orderbook['nonce'] = microtimestamp;\n return orderbook;\n }\n parseTicker(ticker, market = undefined) {\n //\n // {\n // \"timestamp\": \"1686068944\",\n // \"high\": \"26252\",\n // \"last\": \"26216\",\n // \"bid\": \"26208\",\n // \"vwap\": \"25681\",\n // \"volume\": \"3563.13819902\",\n // \"low\": \"25350\",\n // \"ask\": \"26211\",\n // \"open\": \"25730\",\n // \"open_24\": \"25895\",\n // \"percent_change_24\": \"1.24\",\n // \"pair\": \"BTC/USD\"\n // }\n //\n const marketId = this.safeString(ticker, 'pair');\n const symbol = this.safeSymbol(marketId, market, undefined);\n const timestamp = this.safeTimestamp(ticker, 'timestamp');\n const vwap = this.safeString(ticker, 'vwap');\n const baseVolume = this.safeString(ticker, 'volume');\n const quoteVolume = Precise.stringMul(baseVolume, vwap);\n const last = this.safeString(ticker, 'last');\n return this.safeTicker({\n 'symbol': symbol,\n 'timestamp': timestamp,\n 'datetime': this.iso8601(timestamp),\n 'high': this.safeString(ticker, 'high'),\n 'low': this.safeString(ticker, 'low'),\n 'bid': this.safeString(ticker, 'bid'),\n 'bidVolume': undefined,\n 'ask': this.safeString(ticker, 'ask'),\n 'askVolume': undefined,\n 'vwap': vwap,\n 'open': this.safeString(ticker, 'open'),\n 'close': last,\n 'last': last,\n 'previousClose': undefined,\n 'change': undefined,\n 'percentage': undefined,\n 'average': undefined,\n 'baseVolume': baseVolume,\n 'quoteVolume': quoteVolume,\n 'info': ticker,\n }, market);\n }\n async fetchTicker(symbol, params = {}) {\n /**\n * @method\n * @name bitstamp#fetchTicker\n * @description fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market\n * @see https://www.bitstamp.net/api/#tag/Tickers/operation/GetMarketTicker\n * @param {string} symbol unified symbol of the market to fetch the ticker for\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} a [ticker structure]{@link https://docs.ccxt.com/#/?id=ticker-structure}\n */\n await this.loadMarkets();\n const market = this.market(symbol);\n const request = {\n 'pair': market['id'],\n };\n const ticker = await this.publicGetTickerPair(this.extend(request, params));\n //\n // {\n // \"timestamp\": \"1686068944\",\n // \"high\": \"26252\",\n // \"last\": \"26216\",\n // \"bid\": \"26208\",\n // \"vwap\": \"25681\",\n // \"volume\": \"3563.13819902\",\n // \"low\": \"25350\",\n // \"ask\": \"26211\",\n // \"open\": \"25730\",\n // \"open_24\": \"25895\",\n // \"percent_change_24\": \"1.24\"\n // }\n //\n return this.parseTicker(ticker, market);\n }\n async fetchTickers(symbols = undefined, params = {}) {\n /**\n * @method\n * @name bitstamp#fetchTickers\n * @description fetches price tickers for multiple markets, statistical information calculated over the past 24 hours for each market\n * @see https://www.bitstamp.net/api/#tag/Tickers/operation/GetCurrencyPairTickers\n * @param {string[]|undefined} symbols unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} a dictionary of [ticker structures]{@link https://docs.ccxt.com/#/?id=ticker-structure}\n */\n await this.loadMarkets();\n const response = await this.publicGetTicker(params);\n //\n // {\n // \"timestamp\": \"1686068944\",\n // \"high\": \"26252\",\n // \"last\": \"26216\",\n // \"bid\": \"26208\",\n // \"vwap\": \"25681\",\n // \"volume\": \"3563.13819902\",\n // \"low\": \"25350\",\n // \"ask\": \"26211\",\n // \"open\": \"25730\",\n // \"open_24\": \"25895\",\n // \"percent_change_24\": \"1.24\",\n // \"pair\": \"BTC/USD\"\n // }\n //\n return this.parseTickers(response, symbols);\n }\n getCurrencyIdFromTransaction(transaction) {\n //\n // {\n // \"fee\": \"0.00000000\",\n // \"btc_usd\": \"0.00\",\n // \"datetime\": XXX,\n // \"usd\": 0.0,\n // \"btc\": 0.0,\n // \"eth\": \"0.05000000\",\n // \"type\": \"0\",\n // \"id\": XXX,\n // \"eur\": 0.0\n // }\n //\n const currencyId = this.safeStringLower(transaction, 'currency');\n if (currencyId !== undefined) {\n return currencyId;\n }\n transaction = this.omit(transaction, [\n 'fee',\n 'price',\n 'datetime',\n 'type',\n 'status',\n 'id',\n ]);\n const ids = Object.keys(transaction);\n for (let i = 0; i < ids.length; i++) {\n const id = ids[i];\n if (id.indexOf('_') < 0) {\n const value = this.safeInteger(transaction, id);\n if ((value !== undefined) && (value !== 0)) {\n return id;\n }\n }\n }\n return undefined;\n }\n getMarketFromTrade(trade) {\n trade = this.omit(trade, [\n 'fee',\n 'price',\n 'datetime',\n 'tid',\n 'type',\n 'order_id',\n 'side',\n ]);\n const currencyIds = Object.keys(trade);\n const numCurrencyIds = currencyIds.length;\n if (numCurrencyIds > 2) {\n throw new ExchangeError()\n .addMessage('getMarketFromTrade() too many keys: ' + this.json(currencyIds) + ' in the trade: ' + this.json(trade))\n .exchange(this.id);\n }\n if (numCurrencyIds === 2) {\n let marketId = currencyIds[0] + currencyIds[1];\n if (marketId in this.markets_by_id) {\n return this.safeMarket(marketId);\n }\n marketId = currencyIds[1] + currencyIds[0];\n if (marketId in this.markets_by_id) {\n return this.safeMarket(marketId);\n }\n }\n return undefined;\n }\n parseTrade(trade, market = undefined) {\n //\n // fetchTrades (public)\n //\n // {\n // \"date\": \"1637845199\",\n // \"tid\": \"209895701\",\n // \"amount\": \"0.00500000\",\n // \"type\": \"0\", // Transaction type: 0 - buy; 1 - sell\n // \"price\": \"4451.25\"\n // }\n //\n // fetchMyTrades, trades returned within fetchOrder (private)\n //\n // {\n // \"fee\": \"0.11128\",\n // \"eth_usdt\": 4451.25,\n // \"datetime\": \"2021-11-25 12:59:59.322000\",\n // \"usdt\": \"-22.26\",\n // \"order_id\": 1429545880227846,\n // \"usd\": 0,\n // \"btc\": 0,\n // \"eth\": \"0.00500000\",\n // \"type\": \"2\", // Transaction type: 0 - deposit; 1 - withdrawal; 2 - market trade; 14 - sub account transfer; 25 - credited with staked assets; 26 - sent assets to staking; 27 - staking reward; 32 - referral reward; 35 - inter account transfer.\n // \"id\": 209895701,\n // \"eur\": 0\n // }\n //\n // from fetchOrder (private)\n //\n // {\n // \"fee\": \"0.11128\",\n // \"price\": \"4451.25000000\",\n // \"datetime\": \"2021-11-25 12:59:59.322000\",\n // \"usdt\": \"22.25625000\",\n // \"tid\": 209895701,\n // \"eth\": \"0.00500000\",\n // \"type\": 2 // Transaction type: 0 - deposit; 1 - withdrawal; 2 - market trade\n // }\n //\n const id = this.safeString2(trade, 'id', 'tid');\n let symbol = undefined;\n let side = undefined;\n let priceString = this.safeString(trade, 'price');\n let amountString = this.safeString(trade, 'amount');\n const orderId = this.safeString(trade, 'order_id');\n const type = undefined;\n let costString = this.safeString(trade, 'cost');\n let rawMarketId = undefined;\n if (market === undefined) {\n const keys = Object.keys(trade);\n for (let i = 0; i < keys.length; i++) {\n const currentKey = keys[i];\n if (currentKey !== 'order_id' && currentKey.indexOf('_') >= 0) {\n rawMarketId = currentKey;\n market = this.safeMarket(rawMarketId, market, '_');\n }\n }\n }\n // if the market is still not defined\n // try to deduce it from used keys\n if (market === undefined) {\n market = this.getMarketFromTrade(trade);\n }\n const feeCostString = this.safeString(trade, 'fee');\n const feeCurrency = market['quote'];\n const priceId = (rawMarketId !== undefined) ? rawMarketId : market['marketId'];\n priceString = this.safeString(trade, priceId, priceString);\n amountString = this.safeString(trade, market['baseId'], amountString);\n costString = this.safeString(trade, market['quoteId'], costString);\n symbol = market['symbol'];\n const datetimeString = this.safeString2(trade, 'date', 'datetime');\n let timestamp = undefined;\n if (datetimeString !== undefined) {\n if (datetimeString.indexOf(' ') >= 0) {\n // iso8601\n timestamp = this.parse8601(datetimeString);\n }\n else {\n // string unix epoch in seconds\n timestamp = parseInt(datetimeString);\n timestamp = timestamp * 1000;\n }\n }\n // if it is a private trade\n if ('id' in trade) {\n if (amountString !== undefined) {\n const isAmountNeg = Precise.stringLt(amountString, '0');\n if (isAmountNeg) {\n side = 'sell';\n amountString = Precise.stringNeg(amountString);\n }\n else {\n side = 'buy';\n }\n }\n }\n else {\n side = this.safeString(trade, 'type');\n if (side === '1') {\n side = 'sell';\n }\n else if (side === '0') {\n side = 'buy';\n }\n else {\n side = undefined;\n }\n }\n if (costString !== undefined) {\n costString = Precise.stringAbs(costString);\n }\n let fee = undefined;\n if (feeCostString !== undefined) {\n fee = {\n 'cost': feeCostString,\n 'currency': feeCurrency,\n };\n }\n return this.safeTrade({\n 'id': id,\n 'info': trade,\n 'timestamp': timestamp,\n 'datetime': this.iso8601(timestamp),\n 'symbol': symbol,\n 'order': orderId,\n 'type': type,\n 'side': side,\n 'takerOrMaker': undefined,\n 'price': priceString,\n 'amount': amountString,\n 'cost': costString,\n 'fee': fee,\n }, market);\n }\n async fetchTrades(symbol, since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name bitstamp#fetchTrades\n * @description get the list of most recent trades for a particular symbol\n * @see https://www.bitstamp.net/api/#tag/Transactions-public/operation/GetTransactions\n * @param {string} symbol unified symbol of the market to fetch trades for\n * @param {int} [since] timestamp in ms of the earliest trade to fetch\n * @param {int} [limit] the maximum amount of trades to fetch\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {Trade[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=public-trades}\n */\n await this.loadMarkets();\n const market = this.market(symbol);\n const request = {\n 'pair': market['id'],\n 'time': 'hour',\n };\n const response = await this.publicGetTransactionsPair(this.extend(request, params));\n //\n // [\n // {\n // \"date\": \"1551814435\",\n // \"tid\": \"83581898\",\n // \"price\": \"0.03532850\",\n // \"type\": \"1\",\n // \"amount\": \"0.85945907\"\n // },\n // {\n // \"date\": \"1551814434\",\n // \"tid\": \"83581896\",\n // \"price\": \"0.03532851\",\n // \"type\": \"1\",\n // \"amount\": \"11.34130961\"\n // },\n // ]\n //\n return this.parseTrades(response, market, since, limit);\n }\n parseOHLCV(ohlcv, market = undefined) {\n //\n // {\n // \"high\": \"9064.77\",\n // \"timestamp\": \"1593961440\",\n // \"volume\": \"18.49436608\",\n // \"low\": \"9040.87\",\n // \"close\": \"9064.77\",\n // \"open\": \"9040.87\"\n // }\n //\n return [\n this.safeTimestamp(ohlcv, 'timestamp'),\n this.safeNumber(ohlcv, 'open'),\n this.safeNumber(ohlcv, 'high'),\n this.safeNumber(ohlcv, 'low'),\n this.safeNumber(ohlcv, 'close'),\n this.safeNumber(ohlcv, 'volume'),\n ];\n }\n async fetchOHLCV(symbol, timeframe = '1m', since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name bitstamp#fetchOHLCV\n * @description fetches historical candlestick data containing the open, high, low, and close price, and the volume of a market\n * @see https://www.bitstamp.net/api/#tag/Market-info/operation/GetOHLCData\n * @param {string} symbol unified symbol of the market to fetch OHLCV data for\n * @param {string} timeframe the length of time each candle represents\n * @param {int} [since] timestamp in ms of the earliest candle to fetch\n * @param {int} [limit] the maximum amount of candles to fetch\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {int[][]} A list of candles ordered as timestamp, open, high, low, close, volume\n */\n await this.loadMarkets();\n const market = this.market(symbol);\n const request = {\n 'pair': market['id'],\n 'step': this.safeString(this.timeframes, timeframe, timeframe),\n };\n const duration = this.parseTimeframe(timeframe);\n if (limit === undefined) {\n if (since === undefined) {\n request['limit'] = 1000; // we need to specify an allowed amount of `limit` if no `since` is set and there is no default limit by exchange\n }\n else {\n limit = 1000;\n const start = this.parseToInt(since / 1000);\n request['start'] = start;\n request['end'] = this.sum(start, duration * (limit - 1));\n request['limit'] = limit;\n }\n }\n else {\n if (since !== undefined) {\n const start = this.parseToInt(since / 1000);\n request['start'] = start;\n request['end'] = this.sum(start, duration * (limit - 1));\n }\n request['limit'] = Math.min(limit, 1000); // min 1, max 1000\n }\n const response = await this.publicGetOhlcPair(this.extend(request, params));\n //\n // {\n // \"data\": {\n // \"pair\": \"BTC/USD\",\n // \"ohlc\": [\n // {\"high\": \"9064.77\", \"timestamp\": \"1593961440\", \"volume\": \"18.49436608\", \"low\": \"9040.87\", \"close\": \"9064.77\", \"open\": \"9040.87\"},\n // {\"high\": \"9071.59\", \"timestamp\": \"1593961500\", \"volume\": \"3.48631711\", \"low\": \"9058.76\", \"close\": \"9061.07\", \"open\": \"9064.66\"},\n // {\"high\": \"9067.33\", \"timestamp\": \"1593961560\", \"volume\": \"0.04142833\", \"low\": \"9061.94\", \"close\": \"9061.94\", \"open\": \"9067.33\"},\n // ],\n // }\n // }\n //\n const data = this.safeValue(response, 'data', {});\n const ohlc = this.safeValue(data, 'ohlc', []);\n return this.parseOHLCVs(ohlc, market, timeframe, since, limit);\n }\n parseBalance(response) {\n const result = {\n 'info': response,\n 'timestamp': undefined,\n 'datetime': undefined,\n };\n const codes = Object.keys(this.currencies);\n for (let i = 0; i < codes.length; i++) {\n const code = codes[i];\n const currency = this.currency(code);\n const currencyId = currency['id'];\n const account = this.account();\n account['free'] = this.safeString(response, currencyId + '_available');\n account['used'] = this.safeString(response, currencyId + '_reserved');\n account['total'] = this.safeString(response, currencyId + '_balance');\n result[code] = account;\n }\n return this.safeBalance(result);\n }\n parseEarnBalance(response) {\n const result = {};\n response.forEach((item) => {\n const currency = item.currency;\n const code = this.safeCurrencyCode(currency);\n const account = this.account();\n account['free'] = this.safeString(item, 'available_amount');\n account['used'] = this.safeString(item, 'amount');\n account['total'] = Precise.stringAdd(account['free'], account['used']);\n if (result[code]) {\n account['total'] = Precise.stringAdd(result[code]['total'], account['total']);\n account['used'] = Precise.stringAdd(result[code]['used'], account['used']);\n account['free'] = Precise.stringAdd(result[code]['free'], account['free']);\n }\n result[code] = account;\n });\n return this.safeBalance(result);\n }\n async fetchBalance(params = {}) {\n /**\n * @method\n * @name bitstamp#fetchBalance\n * @description query for balance and get the amount of funds available for trading or funds locked in orders\n * @see https://www.bitstamp.net/api/#tag/Account-balances/operation/GetAccountBalances\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} a [balance structure]{@link https://docs.ccxt.com/#/?id=balance-structure}\n */\n await this.loadMarkets();\n let response = undefined;\n const type = this.safeString(params, 'type');\n if (type === 'earn') {\n response = await this.privateGetEarnSubscriptions();\n return this.parseEarnBalance(response);\n }\n else {\n response = await this.privatePostBalance(params);\n }\n //\n // {\n // \"aave_available\": \"0.00000000\",\n // \"aave_balance\": \"0.00000000\",\n // \"aave_reserved\": \"0.00000000\",\n // \"aave_withdrawal_fee\": \"0.07000000\",\n // \"aavebtc_fee\": \"0.000\",\n // \"aaveeur_fee\": \"0.000\",\n // \"aaveusd_fee\": \"0.000\",\n // \"bat_available\": \"0.00000000\",\n // \"bat_balance\": \"0.00000000\",\n // \"bat_reserved\": \"0.00000000\",\n // \"bat_withdrawal_fee\": \"5.00000000\",\n // \"batbtc_fee\": \"0.000\",\n // \"bateur_fee\": \"0.000\",\n // \"batusd_fee\": \"0.000\",\n // }\n //\n return this.parseBalance(response);\n }\n async fetchTradingFee(symbol, params = {}) {\n /**\n * @method\n * @name bitstamp#fetchTradingFee\n * @description fetch the trading fees for a market\n * @see https://www.bitstamp.net/api/#tag/Fees/operation/GetAllTradingFees\n * @param {string} symbol unified market symbol\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} a [fee structure]{@link https://docs.ccxt.com/#/?id=fee-structure}\n */\n await this.loadMarkets();\n const market = this.market(symbol);\n const request = {\n 'pair': market['id'],\n };\n const response = await this.privatePostBalancePair(this.extend(request, params));\n return this.parseTradingFee(response, market);\n }\n parseTradingFee(fee, market = undefined) {\n market = this.safeMarket(undefined, market);\n const feeString = this.safeString(fee, market['id'] + '_fee');\n const dividedFeeString = Precise.stringDiv(feeString, '100');\n const tradeFee = this.parseNumber(dividedFeeString);\n return {\n 'info': fee,\n 'symbol': market['symbol'],\n 'maker': tradeFee,\n 'taker': tradeFee,\n };\n }\n parseTradingFees(fees) {\n const result = { 'info': fees };\n const symbols = this.symbols;\n for (let i = 0; i < symbols.length; i++) {\n const symbol = symbols[i];\n const market = this.market(symbol);\n const fee = this.parseTradingFee(fees, market);\n result[symbol] = fee;\n }\n return result;\n }\n async fetchTradingFees(params = {}) {\n /**\n * @method\n * @name bitstamp#fetchTradingFees\n * @description fetch the trading fees for multiple markets\n * @see https://www.bitstamp.net/api/#tag/Fees/operation/GetAllTradingFees\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} a dictionary of [fee structures]{@link https://docs.ccxt.com/#/?id=fee-structure} indexed by market symbols\n */\n await this.loadMarkets();\n const response = await this.privatePostBalance(params);\n return this.parseTradingFees(response);\n }\n async fetchTransactionFees(codes = undefined, params = {}) {\n /**\n * @method\n * @name bitstamp#fetchTransactionFees\n * @deprecated\n * @description please use fetchDepositWithdrawFees instead\n * @see https://www.bitstamp.net/api/#balance\n * @param {string[]|undefined} codes list of unified currency codes\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object[]} a list of [fee structures]{@link https://docs.ccxt.com/#/?id=fee-structure}\n */\n await this.loadMarkets();\n const balance = await this.privatePostBalance(params);\n return this.parseTransactionFees(balance);\n }\n parseTransactionFees(response, codes = undefined) {\n //\n // {\n // \"yfi_available\": \"0.00000000\",\n // \"yfi_balance\": \"0.00000000\",\n // \"yfi_reserved\": \"0.00000000\",\n // \"yfi_withdrawal_fee\": \"0.00070000\",\n // \"yfieur_fee\": \"0.000\",\n // \"yfiusd_fee\": \"0.000\",\n // \"zrx_available\": \"0.00000000\",\n // \"zrx_balance\": \"0.00000000\",\n // \"zrx_reserved\": \"0.00000000\",\n // \"zrx_withdrawal_fee\": \"12.00000000\",\n // \"zrxeur_fee\": \"0.000\",\n // \"zrxusd_fee\": \"0.000\",\n // ...\n // }\n //\n if (codes === undefined) {\n codes = Object.keys(this.currencies);\n }\n const result = {};\n let mainCurrencyId = undefined;\n const ids = Object.keys(response);\n for (let i = 0; i < ids.length; i++) {\n const id = ids[i];\n const currencyId = id.split('_')[0];\n const code = this.safeCurrencyCode(currencyId);\n if (codes !== undefined && !this.inArray(code, codes)) {\n continue;\n }\n if (id.indexOf('_available') >= 0) {\n mainCurrencyId = currencyId;\n result[code] = {\n 'deposit': undefined,\n 'withdraw': undefined,\n 'info': {},\n };\n }\n if (currencyId === mainCurrencyId) {\n result[code]['info'][id] = this.safeNumber(response, id);\n }\n if (id.indexOf('_withdrawal_fee') >= 0) {\n result[code]['withdraw'] = this.safeNumber(response, id);\n }\n }\n return result;\n }\n async fetchDepositWithdrawFees(codes = undefined, params = {}) {\n /**\n * @method\n * @name bitstamp#fetchDepositWithdrawFees\n * @description fetch deposit and withdraw fees\n * @see https://www.bitstamp.net/api/#tag/Fees/operation/GetAllWithdrawalFees\n * @param {string[]|undefined} codes list of unified currency codes\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object[]} a list of [fee structures]{@link https://docs.ccxt.com/#/?id=fee-structure}\n */\n await this.loadMarkets();\n const response = await this.privatePostBalance(params);\n //\n // {\n // \"yfi_available\": \"0.00000000\",\n // \"yfi_balance\": \"0.00000000\",\n // \"yfi_reserved\": \"0.00000000\",\n // \"yfi_withdrawal_fee\": \"0.00070000\",\n // \"yfieur_fee\": \"0.000\",\n // \"yfiusd_fee\": \"0.000\",\n // \"zrx_available\": \"0.00000000\",\n // \"zrx_balance\": \"0.00000000\",\n // \"zrx_reserved\": \"0.00000000\",\n // \"zrx_withdrawal_fee\": \"12.00000000\",\n // \"zrxeur_fee\": \"0.000\",\n // \"zrxusd_fee\": \"0.000\",\n // ...\n // }\n //\n return this.parseDepositWithdrawFees(response, codes);\n }\n parseDepositWithdrawFees(response, codes = undefined, currencyIdKey = undefined) {\n //\n // {\n // \"yfi_available\": \"0.00000000\",\n // \"yfi_balance\": \"0.00000000\",\n // \"yfi_reserved\": \"0.00000000\",\n // \"yfi_withdrawal_fee\": \"0.00070000\",\n // \"yfieur_fee\": \"0.000\",\n // \"yfiusd_fee\": \"0.000\",\n // \"zrx_available\": \"0.00000000\",\n // \"zrx_balance\": \"0.00000000\",\n // \"zrx_reserved\": \"0.00000000\",\n // \"zrx_withdrawal_fee\": \"12.00000000\",\n // \"zrxeur_fee\": \"0.000\",\n // \"zrxusd_fee\": \"0.000\",\n // ...\n // }\n //\n const result = {};\n const ids = Object.keys(response);\n for (let i = 0; i < ids.length; i++) {\n const id = ids[i];\n const currencyId = id.split('_')[0];\n const code = this.safeCurrencyCode(currencyId);\n const dictValue = this.safeNumber(response, id);\n if (codes !== undefined && !this.inArray(code, codes)) {\n continue;\n }\n if (id.indexOf('_available') >= 0) {\n result[code] = this.depositWithdrawFee({});\n }\n if (id.indexOf('_withdrawal_fee') >= 0) {\n result[code]['withdraw']['fee'] = dictValue;\n }\n const resultValue = this.safeValue(result, code);\n if (resultValue !== undefined) {\n result[code]['info'][id] = dictValue;\n }\n }\n return result;\n }\n async createOrder(symbol, type, side, amount, price = undefined, params = {}) {\n /**\n * @method\n * @name bitstamp#createOrder\n * @description create a trade order\n * @see https://www.bitstamp.net/api/#tag/Orders/operation/OpenInstantBuyOrder\n * @see https://www.bitstamp.net/api/#tag/Orders/operation/OpenMarketBuyOrder\n * @see https://www.bitstamp.net/api/#tag/Orders/operation/OpenLimitBuyOrder\n * @see https://www.bitstamp.net/api/#tag/Orders/operation/OpenInstantSellOrder\n * @see https://www.bitstamp.net/api/#tag/Orders/operation/OpenMarketSellOrder\n * @see https://www.bitstamp.net/api/#tag/Orders/operation/OpenLimitSellOrder\n * @param {string} symbol unified symbol of the market to create an order in\n * @param {string} type 'market' or 'limit'\n * @param {string} side 'buy' or 'sell'\n * @param {float} amount how much of currency you want to trade in units of base currency\n * @param {float} [price] the price at which the order is to be fullfilled, in units of the quote currency, ignored in market orders\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n await this.loadMarkets();\n const market = this.market(symbol);\n const request = {\n 'pair': market['id'],\n 'amount': this.amountToPrecision(symbol, amount),\n };\n const clientOrderId = this.safeString2(params, 'client_order_id', 'clientOrderId');\n if (clientOrderId !== undefined) {\n request['client_order_id'] = clientOrderId;\n params = this.omit(params, ['clientOrderId']);\n }\n let response = undefined;\n const capitalizedSide = this.capitalize(side);\n if (type === 'market') {\n if (capitalizedSide === 'Buy') {\n response = await this.privatePostBuyMarketPair(this.extend(request, params));\n }\n else {\n response = await this.privatePostSellMarketPair(this.extend(request, params));\n }\n }\n else if (type === 'instant') {\n if (capitalizedSide === 'Buy') {\n response = await this.privatePostBuyInstantPair(this.extend(request, params));\n }\n else {\n response = await this.privatePostSellInstantPair(this.extend(request, params));\n }\n }\n else {\n request['price'] = this.priceToPrecision(symbol, price);\n if (capitalizedSide === 'Buy') {\n response = await this.privatePostBuyPair(this.extend(request, params));\n }\n else {\n response = await this.privatePostSellPair(this.extend(request, params));\n }\n }\n const order = this.parseOrder(response, market);\n order['type'] = type;\n return order;\n }\n async cancelOrder(id, symbol = undefined, params = {}) {\n /**\n * @method\n * @name bitstamp#cancelOrder\n * @description cancels an open order\n * @see https://www.bitstamp.net/api/#tag/Orders/operation/CancelOrder\n * @param {string} id order id\n * @param {string} symbol unified symbol of the market the order was made in\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} An [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n await this.loadMarkets();\n const request = {\n 'id': id,\n };\n return await this.privatePostCancelOrder(this.extend(request, params));\n }\n async cancelAllOrders(symbol = undefined, params = {}) {\n /**\n * @method\n * @name bitstamp#cancelAllOrders\n * @description cancel all open orders\n * @see https://www.bitstamp.net/api/#tag/Orders/operation/CancelAllOrders\n * @see https://www.bitstamp.net/api/#tag/Orders/operation/CancelOrdersForMarket\n * @param {string} symbol unified market symbol, only orders in the market of this symbol are cancelled when symbol is not undefined\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n await this.loadMarkets();\n let market = undefined;\n const request = {};\n let response = undefined;\n if (symbol !== undefined) {\n market = this.market(symbol);\n request['pair'] = market['id'];\n response = await this.privatePostCancelAllOrdersPair(this.extend(request, params));\n }\n else {\n response = await this.privatePostCancelAllOrders(this.extend(request, params));\n }\n return response;\n }\n parseOrderStatus(status) {\n const statuses = {\n 'In Queue': 'open',\n 'Open': 'open',\n 'Finished': 'closed',\n 'Canceled': 'canceled',\n };\n return this.safeString(statuses, status, status);\n }\n async fetchOrderStatus(id, symbol = undefined, params = {}) {\n await this.loadMarkets();\n const clientOrderId = this.safeValue2(params, 'client_order_id', 'clientOrderId');\n const request = {};\n if (clientOrderId !== undefined) {\n request['client_order_id'] = clientOrderId;\n params = this.omit(params, ['client_order_id', 'clientOrderId']);\n }\n else {\n request['id'] = id;\n }\n const response = await this.privatePostOrderStatus(this.extend(request, params));\n return this.parseOrderStatus(this.safeString(response, 'status'));\n }\n async fetchOrder(id, symbol = undefined, params = {}) {\n /**\n * @method\n * @name bitstamp#fetchOrder\n * @description fetches information on an order made by the user\n * @see https://www.bitstamp.net/api/#tag/Orders/operation/GetOrderStatus\n * @param {string} symbol unified symbol of the market the order was made in\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} An [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n await this.loadMarkets();\n let market = undefined;\n if (symbol !== undefined) {\n market = this.market(symbol);\n }\n const clientOrderId = this.safeValue2(params, 'client_order_id', 'clientOrderId');\n const request = {};\n if (clientOrderId !== undefined) {\n request['client_order_id'] = clientOrderId;\n params = this.omit(params, ['client_order_id', 'clientOrderId']);\n }\n else {\n request['id'] = id;\n }\n const response = await this.privatePostOrderStatus(this.extend(request, params));\n //\n // {\n // \"status\": \"Finished\",\n // \"id\": 1429545880227846,\n // \"amount_remaining\": \"0.00000000\",\n // \"transactions\": [\n // {\n // \"fee\": \"0.11128\",\n // \"price\": \"4451.25000000\",\n // \"datetime\": \"2021-11-25 12:59:59.322000\",\n // \"usdt\": \"22.25625000\",\n // \"tid\": 209895701,\n // \"eth\": \"0.00500000\",\n // \"type\": 2\n // }\n // ]\n // }\n //\n return this.parseOrder(response, market);\n }\n async fetchMyTrades(symbol = undefined, since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name bitstamp#fetchMyTrades\n * @description fetch all trades made by the user\n * @see https://www.bitstamp.net/api/#tag/Transactions-private/operation/GetUserTransactions\n * @see https://www.bitstamp.net/api/#tag/Transactions-private/operation/GetUserTransactionsForMarket\n * @param {string} symbol unified market symbol\n * @param {int} [since] the earliest time in ms to fetch trades for\n * @param {int} [limit] the maximum number of trades structures to retrieve\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {Trade[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=trade-structure}\n */\n await this.loadMarkets();\n const request = {};\n let method = 'privatePostUserTransactions';\n let market = undefined;\n if (symbol !== undefined) {\n market = this.market(symbol);\n request['pair'] = market['id'];\n method += 'Pair';\n }\n if (limit !== undefined) {\n request['limit'] = limit;\n }\n const response = await this[method](this.extend(request, params));\n const result = this.filterBy(response, 'type', '2');\n return this.parseTrades(result, market, since, limit);\n }\n async fetchDepositsWithdrawals(code = undefined, since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name bitstamp#fetchDepositsWithdrawals\n * @description fetch history of deposits and withdrawals\n * @see https://www.bitstamp.net/api/#tag/Transactions-private/operation/GetUserTransactions\n * @param {string} [code] unified currency code for the currency of the deposit/withdrawals, default is undefined\n * @param {int} [since] timestamp in ms of the earliest deposit/withdrawal, default is undefined\n * @param {int} [limit] max number of deposit/withdrawals to return, default is undefined\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} a list of [transaction structure]{@link https://docs.ccxt.com/#/?id=transaction-structure}\n */\n await this.loadMarkets();\n const request = {};\n if (limit !== undefined) {\n request['limit'] = limit;\n }\n const response = await this.privatePostUserTransactions(this.extend(request, params));\n //\n // [\n // {\n // \"fee\": \"0.00000000\",\n // \"btc_usd\": \"0.00\",\n // \"id\": 1234567894,\n // \"usd\": 0,\n // \"btc\": 0,\n // \"datetime\": \"2018-09-08 09:00:31\",\n // \"type\": \"1\",\n // \"xrp\": \"-20.00000000\",\n // \"eur\": 0,\n // },\n // {\n // \"fee\": \"0.00000000\",\n // \"btc_usd\": \"0.00\",\n // \"id\": 1134567891,\n // \"usd\": 0,\n // \"btc\": 0,\n // \"datetime\": \"2018-09-07 18:47:52\",\n // \"type\": \"0\",\n // \"xrp\": \"20.00000000\",\n // \"eur\": 0,\n // },\n // ]\n //\n let currency = undefined;\n if (code !== undefined) {\n currency = this.currency(code);\n }\n const transactions = this.filterByArray(response, 'type', ['0', '1'], false);\n return this.parseTransactions(transactions, currency, since, limit);\n }\n async fetchWithdrawals(code = undefined, since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name bitstamp#fetchWithdrawals\n * @description fetch all withdrawals made from an account\n * @see https://www.bitstamp.net/api/#tag/Withdrawals/operation/GetWithdrawalRequests\n * @param {string} code unified currency code\n * @param {int} [since] the earliest time in ms to fetch withdrawals for\n * @param {int} [limit] the maximum number of withdrawals structures to retrieve\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object[]} a list of [transaction structures]{@link https://docs.ccxt.com/#/?id=transaction-structure}\n */\n await this.loadMarkets();\n const request = {};\n if (since !== undefined) {\n request['timedelta'] = this.milliseconds() - since;\n }\n else {\n request['timedelta'] = 50000000; // use max bitstamp approved value\n }\n const response = await this.privatePostWithdrawalRequests(this.extend(request, params));\n //\n // [\n // {\n // \"status\": 2,\n // \"datetime\": \"2018-10-17 10:58:13\",\n // \"currency\": \"BTC\",\n // \"amount\": \"0.29669259\",\n // \"address\": \"aaaaa\",\n // \"type\": 1,\n // \"id\": 111111,\n // \"transaction_id\": \"xxxx\",\n // },\n // {\n // \"status\": 2,\n // \"datetime\": \"2018-10-17 10:55:17\",\n // \"currency\": \"ETH\",\n // \"amount\": \"1.11010664\",\n // \"address\": \"aaaa\",\n // \"type\": 16,\n // \"id\": 222222,\n // \"transaction_id\": \"xxxxx\",\n // },\n // ]\n //\n return this.parseTransactions(response, undefined, since, limit);\n }\n parseTransaction(transaction, currency = undefined) {\n //\n // fetchDepositsWithdrawals\n //\n // {\n // \"fee\": \"0.00000000\",\n // \"btc_usd\": \"0.00\",\n // \"id\": 1234567894,\n // \"usd\": 0,\n // \"btc\": 0,\n // \"datetime\": \"2018-09-08 09:00:31\",\n // \"type\": \"1\",\n // \"xrp\": \"-20.00000000\",\n // \"eur\": 0,\n // }\n //\n // fetchWithdrawals\n //\n // {\n // \"status\": 2,\n // \"datetime\": \"2018-10-17 10:58:13\",\n // \"currency\": \"BTC\",\n // \"amount\": \"0.29669259\",\n // \"address\": \"aaaaa\",\n // \"type\": 1,\n // \"id\": 111111,\n // \"transaction_id\": \"xxxx\",\n // }\n //\n // {\n // \"id\": 3386432,\n // \"type\": 14,\n // \"amount\": \"863.21332500\",\n // \"status\": 2,\n // \"address\": \"rE1sdh25BJQ3qFwngiTBwaq3zPGGYcrjp1?dt=1455\",\n // \"currency\": \"XRP\",\n // \"datetime\": \"2018-01-05 15:27:55\",\n // \"transaction_id\": \"001743B03B0C79BA166A064AC0142917B050347B4CB23BA2AB4B91B3C5608F4C\"\n // }\n //\n const timestamp = this.parse8601(this.safeString(transaction, 'datetime'));\n const currencyId = this.getCurrencyIdFromTransaction(transaction);\n const code = this.safeCurrencyCode(currencyId, currency);\n const feeCost = this.safeString(transaction, 'fee');\n let feeCurrency = undefined;\n let amount = undefined;\n if ('amount' in transaction) {\n amount = this.safeString(transaction, 'amount');\n }\n else if (currency !== undefined) {\n amount = this.safeString(transaction, currency['id'], amount);\n feeCurrency = currency['code'];\n }\n else if ((code !== undefined) && (currencyId !== undefined)) {\n amount = this.safeString(transaction, currencyId, amount);\n feeCurrency = code;\n }\n if (amount !== undefined) {\n // withdrawals have a negative amount\n amount = Precise.stringAbs(amount);\n }\n let status = 'ok';\n if ('status' in transaction) {\n status = this.parseTransactionStatus(this.safeString(transaction, 'status'));\n }\n let type = undefined;\n if ('type' in transaction) {\n // from fetchDepositsWithdrawals\n const rawType = this.safeString(transaction, 'type');\n if (rawType === '0') {\n type = 'deposit';\n }\n else if (rawType === '1') {\n type = 'withdrawal';\n }\n }\n else {\n // from fetchWithdrawals\n type = 'withdrawal';\n }\n let tag = undefined;\n let address = this.safeString(transaction, 'address');\n if (address !== undefined) {\n // dt (destination tag) is embedded into the address field\n const addressParts = address.split('?dt=');\n const numParts = addressParts.length;\n if (numParts > 1) {\n address = addressParts[0];\n tag = addressParts[1];\n }\n }\n let fee = {\n 'currency': undefined,\n 'cost': undefined,\n 'rate': undefined,\n };\n if (feeCost !== undefined) {\n fee = {\n 'currency': feeCurrency,\n 'cost': feeCost,\n 'rate': undefined,\n };\n }\n return {\n 'info': transaction,\n 'id': this.safeString(transaction, 'id'),\n 'txid': this.safeString(transaction, 'transaction_id'),\n 'type': type,\n 'currency': code,\n 'network': undefined,\n 'amount': this.parseNumber(amount),\n 'status': status,\n 'timestamp': timestamp,\n 'datetime': this.iso8601(timestamp),\n 'address': address,\n 'addressFrom': undefined,\n 'addressTo': address,\n 'tag': tag,\n 'tagFrom': undefined,\n 'tagTo': tag,\n 'updated': undefined,\n 'comment': undefined,\n 'internal': undefined,\n 'fee': fee,\n };\n }\n parseTransactionStatus(status) {\n //\n // withdrawals:\n // 0 (open), 1 (in process), 2 (finished), 3 (canceled) or 4 (failed).\n //\n const statuses = {\n '0': 'pending',\n '1': 'pending',\n '2': 'ok',\n '3': 'canceled',\n '4': 'failed', // Failed\n };\n return this.safeString(statuses, status, status);\n }\n parseOrder(order, market = undefined) {\n //\n // from fetch order:\n // { status: \"Finished\",\n // \"id\": 731693945,\n // \"client_order_id\": '',\n // \"transactions\":\n // [ { fee: \"0.000019\",\n // \"price\": \"0.00015803\",\n // \"datetime\": \"2018-01-07 10:45:34.132551\",\n // \"btc\": \"0.0079015000000000\",\n // \"tid\": 42777395,\n // \"type\": 2,\n // \"xrp\": \"50.00000000\" } ] }\n //\n // partially filled order:\n // { \"id\": 468646390,\n // \"client_order_id\": \"\",\n // \"status\": \"Canceled\",\n // \"transactions\": [{\n // \"eth\": \"0.23000000\",\n // \"fee\": \"0.09\",\n // \"tid\": 25810126,\n // \"usd\": \"69.8947000000000000\",\n // \"type\": 2,\n // \"price\": \"303.89000000\",\n // \"datetime\": \"2017-11-11 07:22:20.710567\"\n // }]}\n //\n // from create order response:\n // {\n // \"price\": \"0.00008012\",\n // \"client_order_id\": '',\n // \"currency_pair\": \"XRP/BTC\",\n // \"datetime\": \"2019-01-31 21:23:36\",\n // \"amount\": \"15.00000000\",\n // \"type\": \"0\",\n // \"id\": \"2814205012\"\n // }\n //\n const id = this.safeString(order, 'id');\n const clientOrderId = this.safeString(order, 'client_order_id');\n let side = this.safeString(order, 'type');\n if (side !== undefined) {\n side = (side === '1') ? 'sell' : 'buy';\n }\n // there is no timestamp from fetchOrder\n const timestamp = this.parse8601(this.safeString(order, 'datetime'));\n const marketId = this.safeStringLower(order, 'currency_pair');\n const symbol = this.safeSymbol(marketId, market, '/');\n const status = this.parseOrderStatus(this.safeString(order, 'status'));\n const amount = this.safeString(order, 'amount');\n const transactions = this.safeValue(order, 'transactions', []);\n // The price is only defined for create order response\n let price = this.safeString(order, 'price');\n if (!price) {\n // calculate average price from all transactions (when fetch orders)\n price = String(transactions.reduce((total, transaction) => total + this.safeNumber(transaction, 'price', 0), 0) / transactions.length);\n }\n return this.safeOrder({\n 'id': id,\n 'clientOrderId': clientOrderId,\n 'datetime': this.iso8601(timestamp),\n 'timestamp': timestamp,\n 'lastTradeTimestamp': undefined,\n 'status': status,\n 'symbol': symbol,\n 'type': undefined,\n 'timeInForce': undefined,\n 'postOnly': undefined,\n 'side': side,\n 'price': price,\n 'stopPrice': undefined,\n 'triggerPrice': undefined,\n 'cost': undefined,\n 'amount': amount,\n 'filled': undefined,\n 'remaining': undefined,\n 'trades': transactions,\n 'fee': undefined,\n 'info': order,\n 'average': undefined,\n }, market);\n }\n parseLedgerEntryType(type) {\n const types = {\n '0': 'transaction',\n '1': 'transaction',\n '2': 'trade',\n '14': 'transfer',\n };\n return this.safeString(types, type, type);\n }\n parseLedgerEntry(item, currency = undefined) {\n //\n // [\n // {\n // \"fee\": \"0.00000000\",\n // \"btc_usd\": \"0.00\",\n // \"id\": 1234567894,\n // \"usd\": 0,\n // \"btc\": 0,\n // \"datetime\": \"2018-09-08 09:00:31\",\n // \"type\": \"1\",\n // \"xrp\": \"-20.00000000\",\n // \"eur\": 0,\n // },\n // {\n // \"fee\": \"0.00000000\",\n // \"btc_usd\": \"0.00\",\n // \"id\": 1134567891,\n // \"usd\": 0,\n // \"btc\": 0,\n // \"datetime\": \"2018-09-07 18:47:52\",\n // \"type\": \"0\",\n // \"xrp\": \"20.00000000\",\n // \"eur\": 0,\n // },\n // ]\n //\n const type = this.parseLedgerEntryType(this.safeString(item, 'type'));\n if (type === 'trade') {\n const parsedTrade = this.parseTrade(item);\n let market = undefined;\n const keys = Object.keys(item);\n for (let i = 0; i < keys.length; i++) {\n if (keys[i].indexOf('_') >= 0) {\n const marketId = keys[i].replace('_', '');\n market = this.safeMarket(marketId, market);\n }\n }\n // if the market is still not defined\n // try to deduce it from used keys\n if (market === undefined) {\n market = this.getMarketFromTrade(item);\n }\n const direction = (parsedTrade['side'] === 'buy') ? 'in' : 'out';\n return {\n 'id': parsedTrade['id'],\n 'info': item,\n 'timestamp': parsedTrade['timestamp'],\n 'datetime': parsedTrade['datetime'],\n 'direction': direction,\n 'account': undefined,\n 'referenceId': parsedTrade['order'],\n 'referenceAccount': undefined,\n 'type': type,\n 'currency': market['base'],\n 'amount': parsedTrade['amount'],\n 'before': undefined,\n 'after': undefined,\n 'status': 'ok',\n 'fee': parsedTrade['fee'],\n };\n }\n else {\n const parsedTransaction = this.parseTransaction(item, currency);\n let direction = undefined;\n if ('amount' in item) {\n const amount = this.safeString(item, 'amount');\n direction = Precise.stringGt(amount, '0') ? 'in' : 'out';\n }\n else if (('currency' in parsedTransaction) && parsedTransaction['currency'] !== undefined) {\n const currencyCode = this.safeString(parsedTransaction, 'currency');\n currency = this.currency(currencyCode);\n const amount = this.safeString(item, currency['id']);\n direction = Precise.stringGt(amount, '0') ? 'in' : 'out';\n }\n return {\n 'id': parsedTransaction['id'],\n 'info': item,\n 'timestamp': parsedTransaction['timestamp'],\n 'datetime': parsedTransaction['datetime'],\n 'direction': direction,\n 'account': undefined,\n 'referenceId': parsedTransaction['txid'],\n 'referenceAccount': undefined,\n 'type': type,\n 'currency': parsedTransaction['currency'],\n 'amount': parsedTransaction['amount'],\n 'before': undefined,\n 'after': undefined,\n 'status': parsedTransaction['status'],\n 'fee': parsedTransaction['fee'],\n };\n }\n }\n async fetchLedger(code = undefined, since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name bitstamp#fetchLedger\n * @description fetch the history of changes, actions done by the user or operations that altered balance of the user\n * @see https://www.bitstamp.net/api/#tag/Transactions-private/operation/GetUserTransactions\n * @param {string} code unified currency code, default is undefined\n * @param {int} [since] timestamp in ms of the earliest ledger entry, default is undefined\n * @param {int} [limit] max number of ledger entrys to return, default is undefined\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} a [ledger structure]{@link https://docs.ccxt.com/#/?id=ledger-structure}\n */\n await this.loadMarkets();\n const request = {};\n if (limit !== undefined) {\n request['limit'] = limit;\n }\n const response = await this.privatePostUserTransactions(this.extend(request, params));\n let currency = undefined;\n if (code !== undefined) {\n currency = this.currency(code);\n }\n return this.parseLedger(response, currency, since, limit);\n }\n async fetchOpenOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name bitstamp#fetchOpenOrders\n * @description fetch all unfilled currently open orders\n * @see https://www.bitstamp.net/api/#tag/Orders/operation/GetAllOpenOrders\n * @see https://www.bitstamp.net/api/#tag/Orders/operation/GetOpenOrdersForMarket\n * @param {string} symbol unified market symbol\n * @param {int} [since] the earliest time in ms to fetch open orders for\n * @param {int} [limit] the maximum number of open orders structures to retrieve\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n let market = undefined;\n await this.loadMarkets();\n if (symbol !== undefined) {\n market = this.market(symbol);\n }\n const response = await this.privatePostOpenOrdersAll(params);\n //\n // [\n // {\n // \"price\": \"0.00008012\",\n // \"currency_pair\": \"XRP/BTC\",\n // \"client_order_id\": '',\n // \"datetime\": \"2019-01-31 21:23:36\",\n // \"amount\": \"15.00000000\",\n // \"type\": \"0\",\n // \"id\": \"2814205012\",\n // }\n // ]\n //\n return this.parseOrders(response, market, since, limit, {\n 'status': 'open',\n 'type': 'limit',\n });\n }\n getCurrencyName(code) {\n /**\n * @ignore\n * @method\n * @param {string} code Unified currency code\n * @returns {string} lowercase version of code\n */\n return code.toLowerCase();\n }\n isFiat(code) {\n return code === 'USD' || code === 'EUR' || code === 'GBP';\n }\n async fetchDepositAddress(code, params = {}) {\n /**\n * @method\n * @name bitstamp#fetchDepositAddress\n * @description fetch the deposit address for a currency associated with this account\n * @see https://www.bitstamp.net/api/#tag/Deposits/operation/GetCryptoDepositAddress\n * @param {string} code unified currency code\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} an [address structure]{@link https://docs.ccxt.com/#/?id=address-structure}\n */\n if (this.isFiat(code)) {\n throw new GetDepositAddressError(code).addMessage(('Fiat fetchDepositAddress() for ' + code + ' is not supported!')).exchange(this.id);\n }\n const name = this.getCurrencyName(code);\n const method = 'privatePost' + this.capitalize(name) + 'Address';\n const response = await this[method](params);\n const address = this.safeString(response, 'address');\n const tag = this.safeString2(response, 'memo_id', 'destination_tag');\n this.checkAddress(address);\n return {\n 'currency': code,\n 'address': address,\n 'tag': tag,\n 'network': undefined,\n 'info': response,\n };\n }\n async withdraw(code, amount, address, tag = undefined, params = {}) {\n /**\n * @method\n * @name bitstamp#withdraw\n * @description make a withdrawal\n * @see https://www.bitstamp.net/api/#tag/Withdrawals/operation/RequestFiatWithdrawal\n * @see https://www.bitstamp.net/api/#tag/Withdrawals/operation/RequestCryptoWithdrawal\n * @param {string} code unified currency code\n * @param {float} amount the amount to withdraw\n * @param {string} address the address to withdraw to\n * @param {string} tag\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} a [transaction structure]{@link https://docs.ccxt.com/#/?id=transaction-structure}\n */\n // For fiat withdrawals please provide all required additional parameters in the 'params'\n // Check https://www.bitstamp.net/api/ under 'Open bank withdrawal' for list and description.\n [tag, params] = this.handleWithdrawTagAndParams(tag, params);\n await this.loadMarkets();\n this.checkAddress(address);\n const network = this.safeString(params, 'network');\n const precisionAmount = this.currencyToPrecision(code, amount, network);\n const request = {\n 'amount': precisionAmount,\n };\n let currency = undefined;\n let method = undefined;\n if (!this.isFiat(code)) {\n const name = this.getCurrencyName(code);\n method = 'privatePost' + this.capitalize(name) + 'Withdrawal';\n if (code === 'XRP') {\n if (tag !== undefined) {\n request['destination_tag'] = tag;\n }\n }\n else if (code === 'XLM' || code === 'HBAR') {\n if (tag !== undefined) {\n request['memo_id'] = tag;\n }\n }\n request['address'] = address;\n }\n else {\n method = 'privatePostWithdrawalOpen';\n currency = this.currency(code);\n request['iban'] = address;\n request['account_currency'] = currency['id'];\n }\n const response = await this[method](this.extend(request, params));\n return this.parseTransaction(response, currency);\n }\n nonce() {\n return this.milliseconds();\n }\n async sign(path, api = 'public', method = 'GET', params = {}, headers = undefined, body = undefined) {\n let url = this.urls['api'][api] + '/';\n url += this.version + '/';\n url += this.implodeParams(path, params);\n const query = this.omit(params, this.extractParams(path));\n if (api === 'public') {\n if (Object.keys(query).length) {\n url += '?' + this.urlencode(query);\n }\n }\n else {\n this.checkRequiredCredentials();\n const xAuth = 'BITSTAMP ' + this.apiKey;\n const xAuthNonce = this.uuid();\n const xAuthTimestamp = this.milliseconds().toString();\n const xAuthVersion = 'v2';\n let contentType = '';\n headers = {\n 'X-Auth': xAuth,\n 'X-Auth-Nonce': xAuthNonce,\n 'X-Auth-Timestamp': xAuthTimestamp,\n 'X-Auth-Version': xAuthVersion,\n };\n if (method === 'POST') {\n if (Object.keys(query).length) {\n body = this.urlencode(query);\n contentType = 'application/x-www-form-urlencoded';\n headers['Content-Type'] = contentType;\n }\n else {\n // sending an empty POST request will trigger\n // an API0020 error returned by the exchange\n // therefore for empty requests we send a dummy object\n // https://github.com/ccxt/ccxt/issues/6846\n body = this.urlencode({ 'foo': 'bar' });\n contentType = 'application/x-www-form-urlencoded';\n headers['Content-Type'] = contentType;\n }\n }\n const authBody = body ? body : '';\n const auth = xAuth + method + url.replace('https://', '') + contentType + xAuthNonce + xAuthTimestamp + xAuthVersion + authBody;\n let signature = undefined;\n if (this.externalSigner) {\n signature = await this.externalSigner.sign({\n 'payload': this.encode(auth),\n 'publicApiKey': this.apiKey,\n 'exchangeId': this.id,\n });\n }\n else {\n signature = this.hmac(this.encode(auth), this.encode(this.secret), sha256);\n }\n headers['X-Auth-Signature'] = signature;\n }\n return { 'url': url, 'method': method, 'body': body, 'headers': headers };\n }\n handleErrors(httpCode, reason, url, method, headers, body, response, requestHeaders, requestBody) {\n if (response === undefined) {\n return undefined;\n }\n //\n // {\"error\": \"No permission found\"} // fetchDepositAddress returns this on apiKeys that don't have the permission required\n // {\"status\": \"error\", \"reason\": {\"__all__\": [\"Minimum order size is 5.0 EUR.\"]}}\n // reuse of a nonce gives: { status: 'error', reason: 'Invalid nonce', code: 'API0004' }\n //\n const status = this.safeString(response, 'status');\n const error = this.safeValue(response, 'error');\n if ((status === 'error') || (error !== undefined)) {\n let errors = [];\n if (typeof error === 'string') {\n errors.push(error);\n }\n else if (error !== undefined) {\n const keys = Object.keys(error);\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n const value = this.safeValue(error, key);\n if (Array.isArray(value)) {\n errors = this.arrayConcat(errors, value);\n }\n else {\n errors.push(value);\n }\n }\n }\n const reasonInner = this.safeValue(response, 'reason', {});\n if (typeof reasonInner === 'string') {\n errors.push(reasonInner);\n }\n else {\n const all = this.safeValue(reasonInner, '__all__', []);\n for (let i = 0; i < all.length; i++) {\n errors.push(all[i]);\n }\n }\n const code = this.safeString(response, 'code');\n if (code === 'API0005') {\n throw new AuthenticationError()\n .addMessage(code + ': invalid signature, use the uid for the main account if you have subaccounts')\n .exchange(this.id);\n }\n for (let i = 0; i < errors.length; i++) {\n const message = errors[i];\n const userMessage = message;\n this.throwExactlyMatchedException(this.exceptions['exact'], message, userMessage);\n this.throwBroadlyMatchedException(this.exceptions['broad'], message, userMessage);\n }\n throw new ExchangeError().addMessage(error).exchange(this.id);\n }\n return undefined;\n }\n}\n","// ----------------------------------------------------------------------------\n\n// PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:\n// https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code\n// EDIT THE CORRESPONDENT .ts FILE INSTEAD\n\n// ---------------------------------------------------------------------------\nimport Exchange from './abstract/bybit.js';\nimport { TICK_SIZE } from './base/functions/number.js';\nimport { rsa } from './base/functions/rsa.js';\nimport { Precise } from './base/Precise.js';\nimport { AuthenticationError, ExchangeError, ExchangeInvalidNonceError, ExchangeInvalidPermissionsError, ExchangeNotAllowedMethodError, ExchangeRateLimitExceededError, ExchangeRequestExpiredError, ExchangeTransferNotAllowedError, ExchangeUnknownAssetError, InsufficientBalanceError, InternalError, InvalidAddressError, InvalidCredentialsError, InvalidParamsError, MarketNotFoundError, MarketTypeNotSupportedError, OrderNotFoundError, OverWithdrawMaximumError, TradeError, UnderWithdrawMinimumError, WhitelistCheckFailedError, WithdrawalError } from './sdk/errors.js';\nimport { SdkErrorMessages } from './sdk/errorsMetadata.js';\nimport { sha256 } from './static_dependencies/noble-hashes/sha256.js';\n// ---------------------------------------------------------------------------\n/**\n * @class bybit\n * @augments Exchange\n */\nexport default class bybit extends Exchange {\n describe() {\n return this.deepExtend(super.describe(), {\n 'id': 'bybit',\n 'name': 'Bybit',\n 'countries': ['VG'],\n 'version': 'v5',\n 'userAgent': undefined,\n 'rateLimit': 20,\n 'hostname': 'bybit.com',\n 'pro': true,\n 'certified': true,\n 'has': {\n 'CORS': true,\n 'spot': true,\n 'margin': true,\n 'swap': true,\n 'future': true,\n 'option': true,\n 'cancelAllOrders': true,\n 'cancelOrder': true,\n 'createMarketBuyOrderWithCost': true,\n 'createMarketSellOrderWithCost': true,\n 'createOrder': true,\n 'createOrders': true,\n 'createOrderWithTakeProfitAndStopLoss': true,\n 'createTakeProfitOrder': true,\n 'createTrailingAmountOrder': true,\n 'createTriggerOrder': true,\n 'editOrder': true,\n 'fetchBalance': true,\n 'fetchCanceledOrders': true,\n 'fetchClosedOrders': true,\n 'fetchCurrencies': true,\n 'fetchDeposit': false,\n 'fetchDepositAddress': true,\n 'fetchDepositAddresses': false,\n 'fetchDepositAddressesByNetwork': true,\n 'fetchDeposits': true,\n 'fetchDepositWithdrawFee': 'emulated',\n 'fetchDepositWithdrawFees': true,\n 'fetchLedger': true,\n 'fetchMarkets': true,\n 'fetchMyTrades': true,\n 'fetchOHLCV': true,\n 'fetchOpenOrders': true,\n 'fetchOrder': true,\n 'fetchOrderBook': true,\n 'fetchOrders': true,\n 'fetchOrderTrades': true,\n 'fetchPosition': true,\n 'fetchPositions': true,\n 'fetchTicker': true,\n 'fetchTickers': true,\n 'fetchTime': true,\n 'fetchTrades': true,\n 'fetchTradingFee': true,\n 'fetchTradingFees': true,\n 'fetchTransactions': false,\n 'fetchTransfers': true,\n 'fetchWithdrawals': true,\n 'transfer': true,\n 'withdraw': true,\n },\n 'timeframes': {\n '1m': '1',\n '3m': '3',\n '5m': '5',\n '15m': '15',\n '30m': '30',\n '1h': '60',\n '2h': '120',\n '4h': '240',\n '6h': '360',\n '12h': '720',\n '1d': 'D',\n '1w': 'W',\n '1M': 'M',\n },\n 'urls': {\n 'test': {\n 'spot': 'https://api-testnet.{hostname}',\n 'futures': 'https://api-testnet.{hostname}',\n 'v2': 'https://api-testnet.{hostname}',\n 'public': 'https://api-testnet.{hostname}',\n 'private': 'https://api-testnet.{hostname}',\n },\n 'logo': 'https://user-images.githubusercontent.com/51840849/76547799-daff5b80-649e-11ea-87fb-3be9bac08954.jpg',\n 'api': {\n 'spot': 'https://api.{hostname}',\n 'futures': 'https://api.{hostname}',\n 'v2': 'https://api.{hostname}',\n 'public': 'https://api.{hostname}',\n 'private': 'https://api.{hostname}',\n },\n 'www': 'https://www.bybit.com',\n 'doc': [\n 'https://bybit-exchange.github.io/docs/inverse/',\n 'https://bybit-exchange.github.io/docs/linear/',\n 'https://github.com/bybit-exchange',\n ],\n 'fees': 'https://help.bybit.com/hc/en-us/articles/360039261154',\n // https://www.bybit.com/register?affiliate_id=35953 - I removed the code for now, because CWS is blocking until we explain our affiliate program to our users\n 'referral': 'https://www.bybit.com/register',\n },\n 'api': {\n 'public': {\n 'get': {\n // spot\n 'spot/v3/public/symbols': 1,\n 'spot/v3/public/quote/depth': 1,\n 'spot/v3/public/quote/depth/merged': 1,\n 'spot/v3/public/quote/trades': 1,\n 'spot/v3/public/quote/kline': 1,\n 'spot/v3/public/quote/ticker/24hr': 1,\n 'spot/v3/public/quote/ticker/price': 1,\n 'spot/v3/public/quote/ticker/bookTicker': 1,\n 'spot/v3/public/server-time': 1,\n 'spot/v3/public/infos': 1,\n 'spot/v3/public/margin-product-infos': 1,\n 'spot/v3/public/margin-ensure-tokens': 1,\n // data\n 'v3/public/time': 1,\n 'contract/v3/public/copytrading/symbol/list': 1,\n // derivative\n 'derivatives/v3/public/order-book/L2': 1,\n 'derivatives/v3/public/kline': 1,\n 'derivatives/v3/public/tickers': 1,\n 'derivatives/v3/public/instruments-info': 1,\n 'derivatives/v3/public/mark-price-kline': 1,\n 'derivatives/v3/public/index-price-kline': 1,\n 'derivatives/v3/public/funding/history-funding-rate': 1,\n 'derivatives/v3/public/risk-limit/list': 1,\n 'derivatives/v3/public/delivery-price': 1,\n 'derivatives/v3/public/recent-trade': 1,\n 'derivatives/v3/public/open-interest': 1,\n 'derivatives/v3/public/insurance': 1,\n // v5\n 'v5/announcements/index': 5,\n // market\n 'v5/market/time': 5,\n 'v5/market/kline': 5,\n 'v5/market/mark-price-kline': 5,\n 'v5/market/index-price-kline': 5,\n 'v5/market/premium-index-price-kline': 5,\n 'v5/market/instruments-info': 5,\n 'v5/market/orderbook': 5,\n 'v5/market/tickers': 5,\n 'v5/market/funding/history': 5,\n 'v5/market/recent-trade': 5,\n 'v5/market/open-interest': 5,\n 'v5/market/historical-volatility': 5,\n 'v5/market/insurance': 5,\n 'v5/market/risk-limit': 5,\n 'v5/market/delivery-price': 5,\n 'v5/market/account-ratio': 5,\n // spot leverage token\n 'v5/spot-lever-token/info': 5,\n 'v5/spot-lever-token/reference': 5,\n // spot margin trade\n 'v5/spot-margin-trade/data': 5,\n 'v5/spot-cross-margin-trade/data': 5,\n 'v5/spot-cross-margin-trade/pledge-token': 5,\n 'v5/spot-cross-margin-trade/borrow-token': 5,\n // institutional lending\n 'v5/ins-loan/product-infos': 5,\n 'v5/ins-loan/ensure-tokens-convert': 5,\n },\n },\n 'private': {\n 'get': {\n // Legacy inverse swap\n 'v2/private/wallet/fund/records': 25,\n // spot\n 'spot/v3/private/order': 2.5,\n 'spot/v3/private/open-orders': 2.5,\n 'spot/v3/private/history-orders': 2.5,\n 'spot/v3/private/my-trades': 2.5,\n 'spot/v3/private/account': 2.5,\n 'spot/v3/private/reference': 2.5,\n 'spot/v3/private/record': 2.5,\n 'spot/v3/private/cross-margin-orders': 10,\n 'spot/v3/private/cross-margin-account': 10,\n 'spot/v3/private/cross-margin-loan-info': 10,\n 'spot/v3/private/cross-margin-repay-history': 10,\n 'spot/v3/private/margin-loan-infos': 10,\n 'spot/v3/private/margin-repaid-infos': 10,\n 'spot/v3/private/margin-ltv': 10,\n // account\n 'asset/v3/private/transfer/inter-transfer/list/query': 50,\n 'asset/v3/private/transfer/sub-member/list/query': 50,\n 'asset/v3/private/transfer/sub-member-transfer/list/query': 50,\n 'asset/v3/private/transfer/universal-transfer/list/query': 25,\n 'asset/v3/private/coin-info/query': 25,\n 'asset/v3/private/deposit/address/query': 10,\n 'contract/v3/private/copytrading/order/list': 30,\n 'contract/v3/private/copytrading/position/list': 40,\n 'contract/v3/private/copytrading/wallet/balance': 25,\n 'contract/v3/private/position/limit-info': 25,\n 'contract/v3/private/order/unfilled-orders': 1,\n 'contract/v3/private/order/list': 1,\n 'contract/v3/private/position/list': 1,\n 'contract/v3/private/execution/list': 1,\n 'contract/v3/private/position/closed-pnl': 1,\n 'contract/v3/private/account/wallet/balance': 1,\n 'contract/v3/private/account/fee-rate': 1,\n 'contract/v3/private/account/wallet/fund-records': 1,\n // derivative\n 'unified/v3/private/order/unfilled-orders': 1,\n 'unified/v3/private/order/list': 1,\n 'unified/v3/private/position/list': 1,\n 'unified/v3/private/execution/list': 1,\n 'unified/v3/private/delivery-record': 1,\n 'unified/v3/private/settlement-record': 1,\n 'unified/v3/private/account/wallet/balance': 1,\n 'unified/v3/private/account/transaction-log': 1,\n 'unified/v3/private/account/borrow-history': 1,\n 'unified/v3/private/account/borrow-rate': 1,\n 'unified/v3/private/account/info': 1,\n 'user/v3/private/frozen-sub-member': 10,\n 'user/v3/private/query-sub-members': 5,\n 'user/v3/private/query-api': 5,\n 'user/v3/private/get-member-type': 1,\n 'asset/v3/private/transfer/transfer-coin/list/query': 50,\n 'asset/v3/private/transfer/account-coin/balance/query': 50,\n 'asset/v3/private/transfer/account-coins/balance/query': 25,\n 'asset/v3/private/transfer/asset-info/query': 50,\n 'asset/v3/public/deposit/allowed-deposit-list/query': 0.17,\n 'asset/v3/private/deposit/record/query': 10,\n 'asset/v3/private/withdraw/record/query': 10,\n // v5\n // trade\n 'v5/order/realtime': 5,\n 'v5/order/history': 5,\n 'v5/order/spot-borrow-check': 1,\n // position\n 'v5/position/list': 5,\n 'v5/execution/list': 5,\n 'v5/position/closed-pnl': 5,\n 'v5/position/move-history': 5,\n // pre-upgrade\n 'v5/pre-upgrade/order/history': 5,\n 'v5/pre-upgrade/execution/list': 5,\n 'v5/pre-upgrade/position/closed-pnl': 5,\n 'v5/pre-upgrade/account/transaction-log': 5,\n 'v5/pre-upgrade/asset/delivery-record': 5,\n 'v5/pre-upgrade/asset/settlement-record': 5,\n // account\n 'v5/account/wallet-balance': 1,\n 'v5/account/borrow-history': 1,\n 'v5/account/collateral-info': 1,\n 'v5/asset/coin-greeks': 1,\n 'v5/account/fee-rate': 10,\n 'v5/account/info': 5,\n 'v5/account/transaction-log': 1,\n 'v5/account/smp-group': 1,\n 'v5/account/mmp-state': 5,\n // asset\n 'v5/asset/exchange/order-record': 5,\n 'v5/asset/delivery-record': 5,\n 'v5/asset/settlement-record': 5,\n 'v5/asset/transfer/query-asset-info': 50,\n 'v5/asset/transfer/query-account-coins-balance': 25,\n 'v5/asset/transfer/query-account-coin-balance': 50,\n 'v5/asset/transfer/query-transfer-coin-list': 50,\n 'v5/asset/transfer/query-inter-transfer-list': 50,\n 'v5/asset/transfer/query-sub-member-list': 50,\n 'v5/asset/transfer/query-universal-transfer-list': 25,\n 'v5/asset/deposit/query-allowed-list': 5,\n 'v5/asset/deposit/query-record': 10,\n 'v5/asset/deposit/query-sub-member-record': 10,\n 'v5/asset/deposit/query-internal-record': 5,\n 'v5/asset/deposit/query-address': 10,\n 'v5/asset/deposit/query-sub-member-address': 10,\n 'v5/asset/coin/query-info': 28,\n 'v5/asset/withdraw/query-record': 10,\n 'v5/asset/withdraw/withdrawable-amount': 5,\n // user\n 'v5/user/query-sub-members': 5,\n 'v5/user/query-api': 5,\n 'v5/user/sub-apikeys': 5,\n 'v5/user/get-member-type': 5,\n 'v5/user/aff-customer-info': 5,\n 'v5/user/del-submember': 5,\n // spot leverage token\n 'v5/spot-lever-token/order-record': 1,\n // spot margin trade\n 'v5/spot-margin-trade/state': 5,\n 'v5/spot-cross-margin-trade/loan-info': 1,\n 'v5/spot-cross-margin-trade/account': 1,\n 'v5/spot-cross-margin-trade/orders': 1,\n 'v5/spot-cross-margin-trade/repay-history': 1,\n // institutional lending\n 'v5/ins-loan/product-infos': 5,\n 'v5/ins-loan/ensure-tokens-convert': 5,\n 'v5/ins-loan/loan-order': 5,\n 'v5/ins-loan/repaid-history': 5,\n 'v5/ins-loan/ltv-convert': 5,\n // c2c lending\n 'v5/lending/info': 5,\n 'v5/lending/history-order': 5,\n 'v5/lending/account': 5,\n // broker\n 'v5/broker/earning-record': 5,\n 'v5/broker/earnings-info': 5,\n 'v5/broker/account-info': 5,\n },\n 'post': {\n // Legacy option USDC\n 'option/usdc/openapi/private/v1/place-order': 2.5,\n 'option/usdc/openapi/private/v1/replace-order': 2.5,\n 'option/usdc/openapi/private/v1/cancel-order': 2.5,\n 'option/usdc/openapi/private/v1/cancel-all': 2.5,\n 'option/usdc/openapi/private/v1/query-active-orders': 2.5,\n 'option/usdc/openapi/private/v1/query-order-history': 2.5,\n 'option/usdc/openapi/private/v1/execution-list': 2.5,\n 'option/usdc/openapi/private/v1/query-position': 2.5,\n // Legacy perpetual swap USDC\n 'perpetual/usdc/openapi/private/v1/place-order': 2.5,\n 'perpetual/usdc/openapi/private/v1/replace-order': 2.5,\n 'perpetual/usdc/openapi/private/v1/cancel-order': 2.5,\n 'perpetual/usdc/openapi/private/v1/cancel-all': 2.5,\n 'perpetual/usdc/openapi/private/v1/position/leverage/save': 2.5,\n // spot\n 'spot/v3/private/order': 2.5,\n 'spot/v3/private/cancel-order': 2.5,\n 'spot/v3/private/cancel-orders': 2.5,\n 'spot/v3/private/cancel-orders-by-ids': 2.5,\n 'spot/v3/private/purchase': 2.5,\n 'spot/v3/private/redeem': 2.5,\n 'spot/v3/private/cross-margin-loan': 10,\n 'spot/v3/private/cross-margin-repay': 10,\n // account\n 'asset/v3/private/transfer/inter-transfer': 150,\n 'asset/v3/private/withdraw/create': 300,\n 'asset/v3/private/withdraw/cancel': 50,\n 'asset/v3/private/transfer/sub-member-transfer': 150,\n 'asset/v3/private/transfer/transfer-sub-member-save': 150,\n 'asset/v3/private/transfer/universal-transfer': 10,\n 'user/v3/private/create-sub-member': 10,\n 'user/v3/private/create-sub-api': 10,\n 'user/v3/private/update-api': 10,\n 'user/v3/private/delete-api': 10,\n 'user/v3/private/update-sub-api': 10,\n 'user/v3/private/delete-sub-api': 10,\n // contract\n 'contract/v3/private/copytrading/order/create': 30,\n 'contract/v3/private/copytrading/order/cancel': 30,\n 'contract/v3/private/copytrading/order/close': 30,\n 'contract/v3/private/copytrading/position/close': 40,\n 'contract/v3/private/copytrading/position/set-leverage': 40,\n 'contract/v3/private/copytrading/wallet/transfer': 25,\n 'contract/v3/private/copytrading/order/trading-stop': 2.5,\n 'contract/v3/private/order/create': 1,\n 'contract/v3/private/order/cancel': 1,\n 'contract/v3/private/order/cancel-all': 1,\n 'contract/v3/private/order/replace': 1,\n 'contract/v3/private/position/set-auto-add-margin': 1,\n 'contract/v3/private/position/switch-isolated': 1,\n 'contract/v3/private/position/switch-mode': 1,\n 'contract/v3/private/position/switch-tpsl-mode': 1,\n 'contract/v3/private/position/set-leverage': 1,\n 'contract/v3/private/position/trading-stop': 1,\n 'contract/v3/private/position/set-risk-limit': 1,\n 'contract/v3/private/account/setMarginMode': 1,\n // derivative\n 'unified/v3/private/order/create': 30,\n 'unified/v3/private/order/replace': 30,\n 'unified/v3/private/order/cancel': 30,\n 'unified/v3/private/order/create-batch': 30,\n 'unified/v3/private/order/replace-batch': 30,\n 'unified/v3/private/order/cancel-batch': 30,\n 'unified/v3/private/order/cancel-all': 30,\n 'unified/v3/private/position/set-leverage': 2.5,\n 'unified/v3/private/position/tpsl/switch-mode': 2.5,\n 'unified/v3/private/position/set-risk-limit': 2.5,\n 'unified/v3/private/position/trading-stop': 2.5,\n 'unified/v3/private/account/upgrade-unified-account': 2.5,\n 'unified/v3/private/account/setMarginMode': 2.5,\n // tax\n 'fht/compliance/tax/v3/private/registertime': 50,\n 'fht/compliance/tax/v3/private/create': 50,\n 'fht/compliance/tax/v3/private/status': 50,\n 'fht/compliance/tax/v3/private/url': 50,\n // v5\n // trade\n 'v5/order/create': 2.5,\n 'v5/order/amend': 5,\n 'v5/order/cancel': 2.5,\n 'v5/order/cancel-all': 50,\n 'v5/order/create-batch': 5,\n 'v5/order/amend-batch': 5,\n 'v5/order/cancel-batch': 5,\n 'v5/order/disconnected-cancel-all': 5,\n // position\n 'v5/position/set-leverage': 5,\n 'v5/position/switch-isolated': 5,\n 'v5/position/set-tpsl-mode': 5,\n 'v5/position/switch-mode': 5,\n 'v5/position/set-risk-limit': 5,\n 'v5/position/trading-stop': 5,\n 'v5/position/set-auto-add-margin': 5,\n 'v5/position/add-margin': 5,\n 'v5/position/move-positions': 5,\n 'v5/position/confirm-pending-mmr': 5,\n // account\n 'v5/account/upgrade-to-uta': 5,\n 'v5/account/quick-repayment': 5,\n 'v5/account/set-margin-mode': 5,\n 'v5/account/set-hedging-mode': 5,\n 'v5/account/mmp-modify': 5,\n 'v5/account/mmp-reset': 5,\n // asset\n 'v5/asset/transfer/inter-transfer': 50,\n 'v5/asset/transfer/save-transfer-sub-member': 150,\n 'v5/asset/transfer/universal-transfer': 10,\n 'v5/asset/deposit/deposit-to-account': 5,\n 'v5/asset/withdraw/create': 50,\n 'v5/asset/withdraw/cancel': 50,\n // user\n 'v5/user/create-sub-member': 10,\n 'v5/user/create-sub-api': 10,\n 'v5/user/frozen-sub-member': 10,\n 'v5/user/update-api': 10,\n 'v5/user/update-sub-api': 10,\n 'v5/user/delete-api': 10,\n 'v5/user/delete-sub-api': 10,\n // spot leverage token\n 'v5/spot-lever-token/purchase': 2.5,\n 'v5/spot-lever-token/redeem': 2.5,\n // spot margin trade\n 'v5/spot-margin-trade/switch-mode': 5,\n 'v5/spot-margin-trade/set-leverage': 5,\n 'v5/spot-cross-margin-trade/loan': 2.5,\n 'v5/spot-cross-margin-trade/repay': 2.5,\n 'v5/spot-cross-margin-trade/switch': 2.5,\n // institutional lending\n 'v5/ins-loan/association-uid': 5,\n // c2c lending\n 'v5/lending/purchase': 5,\n 'v5/lending/redeem': 5,\n 'v5/lending/redeem-cancel': 5,\n 'v5/account/set-collateral-switch': 5,\n 'v5/account/set-collateral-switch-batch': 5,\n },\n },\n },\n 'httpExceptions': {\n '403': ExchangeRateLimitExceededError, // Forbidden -- You request too many times\n },\n 'exceptions': {\n // Uncodumented explanation of error strings:\n // - oc_diff: order cost needed to place this order\n // - new_oc: total order cost of open orders including the order you are trying to open\n // - ob: order balance - the total cost of current open orders\n // - ab: available balance\n 'exact': {\n '-10009': InvalidParamsError,\n '-1004': InvalidParamsError,\n '-1021': InvalidParamsError,\n '-1103': InvalidParamsError,\n '-1140': InvalidParamsError,\n '-1197': InvalidParamsError,\n '-2013': TradeError,\n '-2015': AuthenticationError,\n '-6017': InvalidParamsError,\n '-6025': InvalidParamsError,\n '-6029': InvalidParamsError,\n '5004': ExchangeError,\n '7001': InvalidParamsError,\n '10001': InvalidParamsError,\n '10002': ExchangeInvalidNonceError,\n '10003': InvalidCredentialsError,\n '10004': AuthenticationError,\n '10005': ExchangeInvalidPermissionsError,\n '10006': ExchangeRateLimitExceededError,\n '10007': AuthenticationError,\n '10008': AuthenticationError,\n '10009': AuthenticationError,\n '10010': ExchangeInvalidPermissionsError,\n '10014': ExchangeError,\n '10016': ExchangeError,\n '10017': ExchangeError,\n '10018': ExchangeRateLimitExceededError,\n '10020': ExchangeInvalidPermissionsError,\n '10024': ExchangeInvalidPermissionsError,\n '10027': ExchangeInvalidPermissionsError,\n '10028': ExchangeInvalidPermissionsError,\n '10029': ExchangeInvalidPermissionsError,\n '12137': InvalidParamsError,\n '12201': InvalidParamsError,\n '12141': InvalidParamsError,\n '100028': ExchangeInvalidPermissionsError,\n '110001': OrderNotFoundError,\n '110003': InvalidParamsError,\n '110004': InsufficientBalanceError,\n '110005': TradeError,\n '110006': InsufficientBalanceError,\n '110007': InsufficientBalanceError,\n '110008': TradeError,\n '110009': TradeError,\n '110010': TradeError,\n '110011': TradeError,\n '110012': InsufficientBalanceError,\n '110013': TradeError,\n '110014': InsufficientBalanceError,\n '110015': TradeError,\n '110016': TradeError,\n '110017': TradeError,\n '110018': ExchangeError,\n '110019': InvalidParamsError,\n '110020': TradeError,\n '110021': TradeError,\n '110022': TradeError,\n '110023': TradeError,\n '110024': TradeError,\n '110025': TradeError,\n '110026': ExchangeError,\n '110027': ExchangeError,\n '110028': TradeError,\n '110029': TradeError,\n '110030': TradeError,\n '110031': TradeError,\n '110032': TradeError,\n '110033': TradeError,\n '110034': TradeError,\n '110035': TradeError,\n '110036': TradeError,\n '110037': TradeError,\n '110038': TradeError,\n '110039': TradeError,\n '110040': TradeError,\n '110041': TradeError,\n '110042': TradeError,\n '110043': TradeError,\n '110044': InsufficientBalanceError,\n '110045': InsufficientBalanceError,\n '110046': ExchangeError,\n '110047': TradeError,\n '110048': TradeError,\n '110049': TradeError,\n '110050': TradeError,\n '110051': InsufficientBalanceError,\n '110052': InsufficientBalanceError,\n '110053': InsufficientBalanceError,\n '110054': TradeError,\n '110055': TradeError,\n '110056': TradeError,\n '110057': TradeError,\n '110058': TradeError,\n '110059': TradeError,\n '110060': ExchangeError,\n '110061': ExchangeError,\n '110062': ExchangeError,\n '110063': ExchangeError,\n '110064': TradeError,\n '110065': ExchangeInvalidPermissionsError,\n '110066': ExchangeError,\n '110067': ExchangeInvalidPermissionsError,\n '110068': ExchangeInvalidPermissionsError,\n '110069': ExchangeInvalidPermissionsError,\n '110070': TradeError,\n '110071': ExchangeError,\n '110072': TradeError,\n '110073': ExchangeError,\n '130006': TradeError,\n '130021': InsufficientBalanceError,\n '130074': TradeError,\n '131001': UnderWithdrawMinimumError,\n '131084': ExchangeError,\n '131200': ExchangeError,\n '131201': ExchangeError,\n '131202': InvalidParamsError,\n '131203': InvalidParamsError,\n '131204': InvalidParamsError,\n '131205': InvalidParamsError,\n '131206': ExchangeError,\n '131207': InvalidParamsError,\n '131208': ExchangeError,\n '131209': InvalidParamsError,\n '131210': InvalidParamsError,\n '131211': InvalidParamsError,\n '131212': InsufficientBalanceError,\n '131213': InvalidParamsError,\n '131214': InvalidParamsError,\n '131215': InvalidParamsError,\n '131216': ExchangeError,\n '131217': ExchangeError,\n '131231': ExchangeTransferNotAllowedError,\n '131232': ExchangeTransferNotAllowedError,\n '131002': InvalidParamsError,\n '131003': ExchangeError,\n '131004': AuthenticationError,\n '131085': InsufficientBalanceError,\n '131086': WithdrawalError,\n '131088': OverWithdrawMaximumError,\n '131089': WithdrawalError,\n '131090': ExchangeError,\n '131091': ExchangeError,\n '131092': ExchangeError,\n '131093': WhitelistCheckFailedError,\n '131094': ExchangeInvalidPermissionsError,\n '131095': WithdrawalError,\n '131096': WithdrawalError,\n '131097': ExchangeError,\n '131098': ExchangeError,\n '131099': ExchangeError,\n '140001': OrderNotFoundError,\n '140003': InvalidParamsError,\n '140004': InsufficientBalanceError,\n '140005': TradeError,\n '140006': InsufficientBalanceError,\n '140007': InsufficientBalanceError,\n '140008': TradeError,\n '140009': TradeError,\n '140010': TradeError,\n '140011': TradeError,\n '140012': InsufficientBalanceError,\n '140013': TradeError,\n '140014': InsufficientBalanceError,\n '140015': TradeError,\n '140016': TradeError,\n '140017': TradeError,\n '140018': ExchangeError,\n '140019': TradeError,\n '140020': TradeError,\n '140021': TradeError,\n '140022': TradeError,\n '140023': TradeError,\n '140024': TradeError,\n '140025': TradeError,\n '140026': TradeError,\n '140027': TradeError,\n '140028': TradeError,\n '140029': TradeError,\n '140030': TradeError,\n '140031': TradeError,\n '140032': TradeError,\n '140033': TradeError,\n '140034': TradeError,\n '140035': TradeError,\n '140036': TradeError,\n '140037': TradeError,\n '140038': TradeError,\n '140039': TradeError,\n '140040': TradeError,\n '140041': TradeError,\n '140042': TradeError,\n '140043': TradeError,\n '140044': InsufficientBalanceError,\n '140045': InsufficientBalanceError,\n '140046': TradeError,\n '140047': TradeError,\n '140048': TradeError,\n '140049': TradeError,\n '140050': InvalidParamsError,\n '140051': InsufficientBalanceError,\n '140052': InsufficientBalanceError,\n '140053': InsufficientBalanceError,\n '140054': TradeError,\n '140055': TradeError,\n '140056': TradeError,\n '140057': TradeError,\n '140058': TradeError,\n '140059': TradeError,\n '140060': ExchangeError,\n '140061': ExchangeError,\n '140062': ExchangeError,\n '140063': ExchangeError,\n '140064': TradeError,\n '140065': ExchangeInvalidPermissionsError,\n '140066': ExchangeError,\n '140067': ExchangeInvalidPermissionsError,\n '140068': ExchangeInvalidPermissionsError,\n '140069': ExchangeInvalidPermissionsError,\n '140070': TradeError,\n '170001': ExchangeError,\n '170007': ExchangeRequestExpiredError,\n '170005': TradeError,\n '170031': ExchangeError,\n '170032': ExchangeError,\n '170033': InsufficientBalanceError,\n '170034': InsufficientBalanceError,\n '170035': InternalError,\n '170036': ExchangeError,\n '170037': ExchangeError,\n '170105': InvalidParamsError,\n '170115': InvalidParamsError,\n '170116': InvalidParamsError,\n '170117': InvalidParamsError,\n '170121': InvalidParamsError,\n '170130': InvalidParamsError,\n '170131': InsufficientBalanceError,\n '170132': InvalidParamsError,\n '170133': InvalidParamsError,\n '170134': InvalidParamsError,\n '170135': InvalidParamsError,\n '170136': InvalidParamsError,\n '170137': InvalidParamsError,\n '170139': InvalidParamsError,\n '170140': InvalidParamsError,\n '170124': InvalidParamsError,\n '170141': TradeError,\n '170142': TradeError,\n '170143': TradeError,\n '170144': TradeError,\n '170145': TradeError,\n '170146': TradeError,\n '170147': TradeError,\n '170148': InvalidParamsError,\n '170149': ExchangeError,\n '170150': ExchangeError,\n '170151': TradeError,\n '170157': TradeError,\n '170159': TradeError,\n '170190': TradeError,\n '170191': TradeError,\n '170192': InvalidParamsError,\n '170193': InvalidParamsError,\n '170194': InvalidParamsError,\n '170195': TradeError,\n '170196': TradeError,\n '170197': InvalidParamsError,\n '170198': InvalidParamsError,\n '170199': InvalidParamsError,\n '170200': InvalidParamsError,\n '170221': ExchangeUnknownAssetError,\n '170222': ExchangeRateLimitExceededError,\n '170223': InsufficientBalanceError,\n '170224': ExchangeInvalidPermissionsError,\n '170226': InsufficientBalanceError,\n '170227': ExchangeError,\n '170228': TradeError,\n '170229': TradeError,\n '170234': ExchangeError,\n '170210': TradeError,\n '170213': OrderNotFoundError,\n '170217': TradeError,\n '170218': InvalidParamsError,\n '170010': InvalidParamsError,\n '170011': InvalidParamsError,\n '170019': InvalidParamsError,\n '170201': ExchangeInvalidPermissionsError,\n '170202': InvalidParamsError,\n '170203': InvalidParamsError,\n '170204': InvalidParamsError,\n '170206': InvalidParamsError,\n '175000': InvalidParamsError,\n '175001': TradeError,\n '175002': TradeError,\n '175003': InsufficientBalanceError,\n '175004': TradeError,\n '175005': TradeError,\n '175006': InsufficientBalanceError,\n '175007': OrderNotFoundError,\n '175008': TradeError,\n '175009': TradeError,\n '175010': ExchangeInvalidPermissionsError,\n '175012': TradeError,\n '175013': TradeError,\n '175014': TradeError,\n '175015': TradeError,\n '175016': InvalidParamsError,\n '175017': InvalidParamsError,\n '175027': ExchangeError,\n '176002': ExchangeError,\n '176004': ExchangeError,\n '176003': ExchangeError,\n '176006': ExchangeError,\n '176005': ExchangeError,\n '176008': ExchangeError,\n '176007': ExchangeError,\n '176010': ExchangeError,\n '176009': ExchangeError,\n '176012': MarketNotFoundError,\n '176011': ExchangeError,\n '176014': ExchangeError,\n '176013': ExchangeError,\n '176015': InsufficientBalanceError,\n '176016': ExchangeError,\n '176017': ExchangeError,\n '176018': ExchangeError,\n '176019': ExchangeError,\n '176020': ExchangeError,\n '176021': ExchangeError,\n '176022': ExchangeError,\n '176023': ExchangeError,\n '176024': ExchangeError,\n '176025': ExchangeError,\n '176026': ExchangeError,\n '176027': ExchangeError,\n '176028': ExchangeError,\n '176029': ExchangeError,\n '176030': ExchangeError,\n '176031': InvalidParamsError,\n '176034': ExchangeError,\n '176035': ExchangeInvalidPermissionsError,\n '176036': ExchangeInvalidPermissionsError,\n '176037': ExchangeInvalidPermissionsError,\n '176038': ExchangeError,\n '176039': ExchangeError,\n '176040': ExchangeError,\n '181000': ExchangeError,\n '181001': InvalidParamsError,\n '181002': InvalidParamsError,\n '181003': InvalidParamsError,\n '181004': InvalidParamsError,\n '182000': InvalidParamsError,\n '181017': InvalidParamsError,\n '20001': OrderNotFoundError,\n '20003': InvalidParamsError,\n '20004': InvalidParamsError,\n '20005': InvalidParamsError,\n '20006': InvalidParamsError,\n '20007': InvalidParamsError,\n '20008': InvalidParamsError,\n '20009': InvalidParamsError,\n '20010': InvalidParamsError,\n '20011': InvalidParamsError,\n '20012': InvalidParamsError,\n '20013': InvalidParamsError,\n '20014': InvalidParamsError,\n '20015': InvalidParamsError,\n '20016': InvalidParamsError,\n '20017': InvalidParamsError,\n '20018': InvalidParamsError,\n '20019': InvalidParamsError,\n '20020': InvalidParamsError,\n '20021': InvalidParamsError,\n '20022': InvalidParamsError,\n '20023': InvalidParamsError,\n '20031': InvalidParamsError,\n '20070': InvalidParamsError,\n '20071': InvalidParamsError,\n '20084': InvalidParamsError,\n '30001': InvalidParamsError,\n '30003': InvalidParamsError,\n '30004': InvalidParamsError,\n '30005': InvalidParamsError,\n '30007': InvalidParamsError,\n '30008': InvalidParamsError,\n '30009': ExchangeError,\n '30010': InsufficientBalanceError,\n '30011': ExchangeInvalidPermissionsError,\n '30012': ExchangeInvalidPermissionsError,\n '30013': ExchangeInvalidPermissionsError,\n '30014': InvalidParamsError,\n '30015': InvalidParamsError,\n '30016': ExchangeError,\n '30017': InvalidParamsError,\n '30018': InvalidParamsError,\n '30019': InvalidParamsError,\n '30020': TradeError,\n '30021': TradeError,\n '30022': InvalidParamsError,\n '30023': InvalidParamsError,\n '30024': TradeError,\n '30025': InvalidParamsError,\n '30026': InvalidParamsError,\n '30027': InvalidParamsError,\n '30028': InvalidParamsError,\n '30029': InvalidParamsError,\n '30030': InvalidParamsError,\n '30031': InsufficientBalanceError,\n '30032': TradeError,\n '30033': ExchangeRateLimitExceededError,\n '30034': OrderNotFoundError,\n '30035': ExchangeRateLimitExceededError,\n '30036': ExchangeError,\n '30037': TradeError,\n '30041': ExchangeError,\n '30042': InsufficientBalanceError,\n '30043': TradeError,\n '30044': TradeError,\n '30045': TradeError,\n '30049': InsufficientBalanceError,\n '30050': ExchangeError,\n '30051': ExchangeError,\n '30052': ExchangeError,\n '30054': ExchangeError,\n '30057': ExchangeError,\n '30063': ExchangeError,\n '30067': InsufficientBalanceError,\n '30068': ExchangeError,\n '30074': TradeError,\n '30075': TradeError,\n '30078': ExchangeError,\n // '30084': BadRequest, // Isolated not modified, see handleErrors below\n '33004': AuthenticationError,\n '34026': ExchangeError,\n '34036': ExchangeError,\n '35015': ExchangeError,\n '340099': ExchangeError,\n '3400045': ExchangeError,\n '3100116': InvalidParamsError,\n '3100198': InvalidParamsError,\n '3200300': InsufficientBalanceError, // {\"retCode\":3200300,\"retMsg\":\"Insufficient margin balance.\",\"result\":null,\"retExtMap\":{}}\n },\n 'broad': {\n 'Request timeout': ExchangeRequestExpiredError,\n 'unknown orderInfo': OrderNotFoundError,\n 'invalid api_key': AuthenticationError,\n // the below two issues are caused as described: issues/9149#issuecomment-1146559498, when response is such: {\"ret_code\":130021,\"ret_msg\":\"oc_diff[1707966351], new_oc[1707966351] with ob[....]+AB[....]\",\"ext_code\":\"\",\"ext_info\":\"\",\"result\":null,\"time_now\":\"1658395300.872766\",\"rate_limit_status\":99,\"rate_limit_reset_ms\":1658395300855,\"rate_limit\":100}\n 'oc_diff': InsufficientBalanceError,\n 'new_oc': InsufficientBalanceError,\n 'openapi sign params error!': AuthenticationError,\n 'withdraw address is invalid': InvalidAddressError,\n },\n 'messages': {\n 'Order value exceeded lower limit': SdkErrorMessages.ORDER_UNDER_MINIMUM,\n },\n },\n 'precisionMode': TICK_SIZE,\n 'options': {\n 'fetchMarkets': ['spot', 'linear', 'inverse', 'option'],\n 'enableUnifiedMargin': undefined,\n 'enableUnifiedAccount': undefined,\n 'createMarketBuyOrderRequiresPrice': true,\n 'createUnifiedMarginAccount': false,\n 'defaultType': 'swap',\n 'defaultSubType': 'linear',\n 'defaultSettle': 'USDT',\n 'code': 'BTC',\n 'recvWindow': 10 * 1000,\n 'timeDifference': 0,\n 'adjustForTimeDifference': false,\n 'loadAllOptions': false,\n 'loadExpiredOptions': false,\n 'brokerId': 'CEDE',\n 'accountsByType': {\n 'spot': 'SPOT',\n 'margin': 'SPOT',\n 'future': 'CONTRACT',\n 'swap': 'CONTRACT',\n 'option': 'OPTION',\n 'investment': 'INVESTMENT',\n 'unified': 'UNIFIED',\n 'funding': 'FUND',\n 'fund': 'FUND',\n 'contract': 'CONTRACT',\n },\n 'accountsById': {\n 'SPOT': 'spot',\n 'MARGIN': 'spot',\n 'CONTRACT': 'contract',\n 'OPTION': 'option',\n 'INVESTMENT': 'investment',\n 'UNIFIED': 'unified',\n 'FUND': 'fund',\n },\n 'networks': {\n 'ERC20': 'ETH',\n 'TRC20': 'TRX',\n 'BEP20': 'BSC',\n 'OMNI': 'OMNI',\n 'SPL': 'SOL',\n },\n 'networksById': {\n 'ETH': 'ERC20',\n 'TRX': 'TRC20',\n 'BSC': 'BEP20',\n 'OMNI': 'OMNI',\n 'SPL': 'SOL',\n },\n 'defaultNetwork': 'ERC20',\n 'defaultNetworks': {\n 'USDT': 'TRC20',\n },\n 'intervals': {\n '5m': '5min',\n '15m': '15min',\n '30m': '30min',\n '1h': '1h',\n '4h': '4h',\n '1d': '1d',\n },\n },\n 'fees': {\n 'trading': {\n 'feeSide': 'get',\n 'tierBased': true,\n 'percentage': true,\n 'taker': 0.00075,\n 'maker': 0.0001,\n },\n 'funding': {\n 'tierBased': false,\n 'percentage': false,\n 'withdraw': {},\n 'deposit': {},\n },\n },\n });\n }\n isUsingForcedProxy(params = {}, api = 'public') {\n if (api === 'private') {\n return true;\n }\n return false;\n }\n nonce() {\n return this.milliseconds() - this.options['timeDifference'];\n }\n addPaginationCursorToResult(response) {\n const result = this.safeValue(response, 'result', {});\n const data = this.safeValueN(result, ['list', 'rows', 'data', 'dataList'], []);\n const paginationCursor = this.safeString2(result, 'nextPageCursor', 'cursor');\n const dataLength = data.length;\n if ((paginationCursor !== undefined) && (dataLength > 0)) {\n const first = data[0];\n first['nextPageCursor'] = paginationCursor;\n data[0] = first;\n }\n return data;\n }\n async isUnifiedEnabled(params = {}) {\n // The API key of user id must own one of permissions will be allowed to call following API endpoints.\n // SUB UID: \"Account Transfer\"\n // MASTER UID: \"Account Transfer\", \"Subaccount Transfer\", \"Withdrawal\"\n const enableUnifiedMargin = this.safeValue(this.options, 'enableUnifiedMargin');\n const enableUnifiedAccount = this.safeValue(this.options, 'enableUnifiedAccount');\n const methodCallId = this.safeValue(params, 'methodCallId');\n if (enableUnifiedMargin === undefined || enableUnifiedAccount === undefined || methodCallId) {\n const response = await this.privateGetV5UserQueryApi(params);\n //\n // {\n // \"retCode\": 0,\n // \"retMsg\": \"\",\n // \"result\": {\n // \"id\": \"13770661\",\n // \"note\": \"XXXXXX\",\n // \"apiKey\": \"XXXXXX\",\n // \"readOnly\": 0,\n // \"secret\": \"\",\n // \"permissions\": {\n // \"ContractTrade\": [...],\n // \"Spot\": [...],\n // \"Wallet\": [...],\n // \"Options\": [...],\n // \"Derivatives\": [...],\n // \"CopyTrading\": [...],\n // \"BlockTrade\": [...],\n // \"Exchange\": [...],\n // \"NFT\": [...],\n // },\n // \"ips\": [...],\n // \"type\": 1,\n // \"deadlineDay\": 83,\n // \"expiredAt\": \"2023-05-15T03:21:05Z\",\n // \"createdAt\": \"2022-10-16T02:24:40Z\",\n // \"unified\": 0,\n // \"uta\": 0,\n // \"userID\": 24600000,\n // \"inviterID\": 0,\n // \"vipLevel\": \"No VIP\",\n // \"mktMakerLevel\": \"0\",\n // \"affiliateID\": 0,\n // \"rsaPublicKey\": \"\",\n // \"isMaster\": false\n // },\n // \"retExtInfo\": {},\n // \"time\": 1676891757649\n // }\n //\n const result = this.safeValue(response, 'result', {});\n this.options['enableUnifiedMargin'] = this.safeInteger(result, 'unified') === 1;\n this.options['enableUnifiedAccount'] = this.safeInteger(result, 'uta') === 1;\n }\n return [this.options['enableUnifiedMargin'], this.options['enableUnifiedAccount']];\n }\n convertExpireDate(date) {\n // parse YYMMDD to timestamp\n const year = date.slice(0, 2);\n const month = date.slice(2, 4);\n const day = date.slice(4, 6);\n const reconstructedDate = '20' + year + '-' + month + '-' + day + 'T00:00:00Z';\n return reconstructedDate;\n }\n convertExpireDateToMarketIdDate(date) {\n // parse 231229 to 29DEC23\n const year = date.slice(0, 2);\n const monthRaw = date.slice(2, 4);\n let month = undefined;\n const day = date.slice(4, 6);\n if (monthRaw === '01') {\n month = 'JAN';\n }\n else if (monthRaw === '02') {\n month = 'FEB';\n }\n else if (monthRaw === '03') {\n month = 'MAR';\n }\n else if (monthRaw === '04') {\n month = 'APR';\n }\n else if (monthRaw === '05') {\n month = 'MAY';\n }\n else if (monthRaw === '06') {\n month = 'JUN';\n }\n else if (monthRaw === '07') {\n month = 'JUL';\n }\n else if (monthRaw === '08') {\n month = 'AUG';\n }\n else if (monthRaw === '09') {\n month = 'SEP';\n }\n else if (monthRaw === '10') {\n month = 'OCT';\n }\n else if (monthRaw === '11') {\n month = 'NOV';\n }\n else if (monthRaw === '12') {\n month = 'DEC';\n }\n const reconstructedDate = day + month + year;\n return reconstructedDate;\n }\n convertMarketIdExpireDate(date) {\n // parse 22JAN23 to 230122\n const monthMappping = {\n 'JAN': '01',\n 'FEB': '02',\n 'MAR': '03',\n 'APR': '04',\n 'MAY': '05',\n 'JUN': '06',\n 'JUL': '07',\n 'AUG': '08',\n 'SEP': '09',\n 'OCT': '10',\n 'NOV': '11',\n 'DEC': '12',\n };\n const year = date.slice(0, 2);\n const monthName = date.slice(2, 5);\n const month = this.safeString(monthMappping, monthName);\n const day = date.slice(5, 7);\n const reconstructedDate = day + month + year;\n return reconstructedDate;\n }\n createExpiredOptionMarket(symbol) {\n // support expired option contracts\n const quote = 'USD';\n const settle = 'USDC';\n const optionParts = symbol.split('-');\n const symbolBase = symbol.split('/');\n let base = undefined;\n let expiry = undefined;\n if (symbol.indexOf('/') > -1) {\n base = this.safeString(symbolBase, 0);\n expiry = this.safeString(optionParts, 1);\n }\n else {\n base = this.safeString(optionParts, 0);\n expiry = this.convertMarketIdExpireDate(this.safeString(optionParts, 1));\n }\n const strike = this.safeString(optionParts, 2);\n const optionType = this.safeString(optionParts, 3);\n const datetime = this.convertExpireDate(expiry);\n const timestamp = this.parse8601(datetime);\n return {\n 'id': base + '-' + this.convertExpireDateToMarketIdDate(expiry) + '-' + strike + '-' + optionType,\n 'symbol': base + '/' + quote + ':' + settle + '-' + expiry + '-' + strike + '-' + optionType,\n 'base': base,\n 'quote': quote,\n 'settle': settle,\n 'baseId': base,\n 'quoteId': quote,\n 'settleId': settle,\n 'active': false,\n 'type': 'option',\n 'linear': undefined,\n 'inverse': undefined,\n 'spot': false,\n 'swap': false,\n 'future': false,\n 'option': true,\n 'margin': false,\n 'contract': true,\n 'contractSize': undefined,\n 'expiry': timestamp,\n 'expiryDatetime': datetime,\n 'optionType': (optionType === 'C') ? 'call' : 'put',\n 'strike': this.parseNumber(strike),\n 'precision': {\n 'amount': undefined,\n 'price': undefined,\n },\n 'limits': {\n 'amount': {\n 'min': undefined,\n 'max': undefined,\n },\n 'price': {\n 'min': undefined,\n 'max': undefined,\n },\n 'cost': {\n 'min': undefined,\n 'max': undefined,\n },\n },\n 'info': undefined,\n };\n }\n safeMarket(marketId = undefined, market = undefined, delimiter = undefined, marketType = undefined) {\n const isOption = (marketId !== undefined) && ((marketId.indexOf('-C') > -1) || (marketId.indexOf('-P') > -1));\n if (isOption && !(marketId in this.markets_by_id)) {\n // handle expired option contracts\n return this.createExpiredOptionMarket(marketId);\n }\n return super.safeMarket(marketId, market, delimiter, marketType);\n }\n getBybitType(method, market, params = {}) {\n let type = undefined;\n [type, params] = this.handleMarketTypeAndParams(method, market, params);\n let subType = undefined;\n [subType, params] = this.handleSubTypeAndParams(method, market, params);\n if (type === 'option' || type === 'spot') {\n return [type, params];\n }\n return [subType, params];\n }\n async fetchStatus(params = {}) {\n /**\n * @method\n * @name bybit#fetchStatus\n * @description the latest known information on the availability of the exchange API - bybit does not have such an endpoint, so we fetch the server time to see if the exchange is able to respond\n * @see https://bybit-exchange.github.io/docs/v5/market/time\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} a [status structure]{@link https://docs.ccxt.com/#/?id=exchange-status-structure}\n */\n const response = await this.publicGetV5MarketTime(params);\n //\n // {\n // \"retCode\": \"0\",\n // \"retMsg\": \"OK\",\n // \"result\": {\n // \"timeSecond\": \"1666879482\",\n // \"timeNano\": \"1666879482792685914\"\n // },\n // \"retExtInfo\": {},\n // \"time\": \"1666879482792\"\n // }\n //\n const code = this.safeString(response, 'retCode');\n const status = (code === '0') ? 'ok' : 'maintenance';\n const serverTime = this.safeInteger(response, 'time');\n return {\n 'status': status,\n 'updated': serverTime,\n 'eta': undefined,\n 'url': undefined,\n 'info': response,\n };\n }\n async fetchTime(params = {}) {\n /**\n * @method\n * @name bybit#fetchTime\n * @description fetches the current integer timestamp in milliseconds from the exchange server\n * @see https://bybit-exchange.github.io/docs/v5/market/time\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {int} the current integer timestamp in milliseconds from the exchange server\n */\n const response = await this.publicGetV5MarketTime(params);\n //\n // {\n // \"retCode\": \"0\",\n // \"retMsg\": \"OK\",\n // \"result\": {\n // \"timeSecond\": \"1666879482\",\n // \"timeNano\": \"1666879482792685914\"\n // },\n // \"retExtInfo\": {},\n // \"time\": \"1666879482792\"\n // }\n //\n return this.safeInteger(response, 'time');\n }\n async fetchCurrencies(params = {}) {\n /**\n * @method\n * @name bybit#fetchCurrencies\n * @description fetches all available currencies on an exchange\n * @see https://bybit-exchange.github.io/docs/v5/asset/coin-info\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} an associative dictionary of currencies\n */\n if (!this.checkRequiredCredentials(false)) {\n return undefined;\n }\n const response = await this.privateGetV5AssetCoinQueryInfo(params);\n //\n // {\n // \"retCode\": 0,\n // \"retMsg\": \"\",\n // \"result\": {\n // \"rows\": [\n // {\n // \"name\": \"BTC\",\n // \"coin\": \"BTC\",\n // \"remainAmount\": \"150\",\n // \"chains\": [\n // {\n // \"chainType\": \"BTC\",\n // \"confirmation\": \"10000\",\n // \"withdrawFee\": \"0.0005\",\n // \"depositMin\": \"0.0005\",\n // \"withdrawMin\": \"0.001\",\n // \"chain\": \"BTC\",\n // \"chainDeposit\": \"1\",\n // \"chainWithdraw\": \"1\",\n // \"minAccuracy\": \"8\"\n // }\n // ]\n // }\n // ]\n // },\n // \"retExtInfo\": {},\n // \"time\": 1672194582264\n // }\n //\n const data = this.safeValue(response, 'result', []);\n const rows = this.safeValue(data, 'rows', []);\n const result = {};\n for (let i = 0; i < rows.length; i++) {\n const currency = rows[i];\n const currencyId = this.safeString(currency, 'coin');\n const code = this.safeCurrencyCode(currencyId);\n const name = this.safeString(currency, 'name');\n const chains = this.safeValue(currency, 'chains', []);\n const networks = {};\n let minPrecision = undefined;\n let minWithdrawFeeString = undefined;\n let minWithdrawString = undefined;\n let minDepositString = undefined;\n let isTokenDepositable = false;\n let isTokenWithdrawable = false;\n for (let j = 0; j < chains.length; j++) {\n const chain = chains[j];\n const networkId = this.safeString(chain, 'chain');\n const networkCode = this.networkIdToCode(networkId);\n const precision = this.parseNumber(this.parsePrecision(this.safeString(chain, 'minAccuracy')));\n minPrecision = (minPrecision === undefined) ? precision : Math.min(minPrecision, precision);\n const isDepositEnabled = this.safeInteger(chain, 'chainDeposit') === 1;\n const isWithdrawalEnabled = this.safeInteger(chain, 'chainWithdraw') === 1;\n isTokenDepositable = isDepositEnabled || isTokenDepositable;\n isTokenWithdrawable = isWithdrawalEnabled || isTokenWithdrawable;\n const withdrawFeeString = this.safeString(chain, 'withdrawFee');\n if (withdrawFeeString !== undefined) {\n minWithdrawFeeString = (minWithdrawFeeString === undefined) ? withdrawFeeString : Precise.stringMin(withdrawFeeString, minWithdrawFeeString);\n }\n const minNetworkWithdrawString = this.safeString(chain, 'withdrawMin');\n if (minNetworkWithdrawString !== undefined) {\n minWithdrawString = (minWithdrawString === undefined) ? minNetworkWithdrawString : Precise.stringMin(minNetworkWithdrawString, minWithdrawString);\n }\n const minNetworkDepositString = this.safeString(chain, 'depositMin');\n if (minNetworkDepositString !== undefined) {\n minDepositString = (minDepositString === undefined) ? minNetworkDepositString : Precise.stringMin(minNetworkDepositString, minDepositString);\n }\n networks[networkCode] = {\n 'info': chain,\n 'id': networkId,\n 'network': networkCode,\n 'active': isDepositEnabled && isWithdrawalEnabled,\n 'deposit': isDepositEnabled,\n 'withdraw': isWithdrawalEnabled,\n 'fee': this.parseNumber(withdrawFeeString),\n 'precision': precision,\n 'limits': {\n 'withdraw': {\n 'min': this.parseNumber(minNetworkWithdrawString),\n 'max': undefined,\n },\n 'deposit': {\n 'min': this.parseNumber(minNetworkDepositString),\n 'max': undefined,\n },\n },\n };\n }\n result[code] = {\n 'info': currency,\n 'code': code,\n 'id': currencyId,\n 'name': name,\n 'active': isTokenDepositable && isTokenWithdrawable,\n 'deposit': isTokenDepositable,\n 'withdraw': isTokenWithdrawable,\n 'fee': this.parseNumber(minWithdrawFeeString),\n 'precision': minPrecision,\n 'limits': {\n 'amount': {\n 'min': undefined,\n 'max': undefined,\n },\n 'withdraw': {\n 'min': this.parseNumber(minWithdrawString),\n 'max': undefined,\n },\n 'deposit': {\n 'min': this.parseNumber(minDepositString),\n 'max': undefined,\n },\n },\n 'networks': networks,\n };\n }\n return result;\n }\n async fetchMarkets(params = {}) {\n /**\n * @method\n * @name bybit#fetchMarkets\n * @description retrieves data on all markets for bybit\n * @see https://bybit-exchange.github.io/docs/v5/market/instrument\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object[]} an array of objects representing market data\n */\n const promisesUnresolved = [];\n const fetchMarkets = this.safeValue(this.options, 'fetchMarkets', ['spot', 'linear', 'inverse']);\n for (let i = 0; i < fetchMarkets.length; i++) {\n const marketType = fetchMarkets[i];\n if (marketType === 'spot') {\n promisesUnresolved.push(this.fetchSpotMarkets(params));\n }\n else if (marketType === 'linear') {\n promisesUnresolved.push(this.fetchFutureMarkets({ 'category': 'linear' }));\n }\n else if (marketType === 'inverse') {\n promisesUnresolved.push(this.fetchFutureMarkets({ 'category': 'inverse' }));\n }\n else if (marketType === 'option') {\n promisesUnresolved.push(this.fetchOptionMarkets({ 'baseCoin': 'BTC' }));\n promisesUnresolved.push(this.fetchOptionMarkets({ 'baseCoin': 'ETH' }));\n promisesUnresolved.push(this.fetchOptionMarkets({ 'baseCoin': 'SOL' }));\n }\n else {\n throw new MarketTypeNotSupportedError(marketType).exchange(this.id);\n }\n }\n const promises = await Promise.all(promisesUnresolved);\n const spotMarkets = this.safeValue(promises, 0, []);\n const linearMarkets = this.safeValue(promises, 1, []);\n const inverseMarkets = this.safeValue(promises, 2, []);\n const btcOptionMarkets = this.safeValue(promises, 3, []);\n const ethOptionMarkets = this.safeValue(promises, 4, []);\n const solOptionMarkets = this.safeValue(promises, 5, []);\n const futureMarkets = this.arrayConcat(linearMarkets, inverseMarkets);\n let optionMarkets = this.arrayConcat(btcOptionMarkets, ethOptionMarkets);\n optionMarkets = this.arrayConcat(optionMarkets, solOptionMarkets);\n const derivativeMarkets = this.arrayConcat(futureMarkets, optionMarkets);\n return this.arrayConcat(spotMarkets, derivativeMarkets);\n }\n async fetchSpotMarkets(params) {\n const request = {\n 'category': 'spot',\n };\n const response = await this.publicGetV5MarketInstrumentsInfo(this.extend(request, params));\n //\n // {\n // \"retCode\": 0,\n // \"retMsg\": \"OK\",\n // \"result\": {\n // \"category\": \"spot\",\n // \"list\": [\n // {\n // \"symbol\": \"BTCUSDT\",\n // \"baseCoin\": \"BTC\",\n // \"quoteCoin\": \"USDT\",\n // \"innovation\": \"0\",\n // \"status\": \"Trading\",\n // \"lotSizeFilter\": {\n // \"basePrecision\": \"0.000001\",\n // \"quotePrecision\": \"0.00000001\",\n // \"minOrderQty\": \"0.00004\",\n // \"maxOrderQty\": \"63.01197227\",\n // \"minOrderAmt\": \"1\",\n // \"maxOrderAmt\": \"100000\"\n // },\n // \"priceFilter\": {\n // \"tickSize\": \"0.01\"\n // }\n // }\n // ]\n // },\n // \"retExtInfo\": {},\n // \"time\": 1672712468011\n // }\n //\n const responseResult = this.safeValue(response, 'result', {});\n const markets = this.safeValue(responseResult, 'list', []);\n const result = [];\n const takerFee = this.parseNumber('0.001');\n const makerFee = this.parseNumber('0.001');\n for (let i = 0; i < markets.length; i++) {\n const market = markets[i];\n const id = this.safeString(market, 'symbol');\n const baseId = this.safeString(market, 'baseCoin');\n const quoteId = this.safeString(market, 'quoteCoin');\n const base = this.safeCurrencyCode(baseId);\n const quote = this.safeCurrencyCode(quoteId);\n const symbol = base + '/' + quote;\n const status = this.safeString(market, 'status');\n const active = (status === 'Trading');\n const lotSizeFilter = this.safeValue(market, 'lotSizeFilter');\n const priceFilter = this.safeValue(market, 'priceFilter');\n const quotePrecision = this.safeNumber(lotSizeFilter, 'quotePrecision');\n result.push({\n 'id': id,\n 'symbol': symbol,\n 'base': base,\n 'quote': quote,\n 'settle': undefined,\n 'baseId': baseId,\n 'quoteId': quoteId,\n 'settleId': undefined,\n 'type': 'spot',\n 'spot': true,\n 'margin': undefined,\n 'swap': false,\n 'future': false,\n 'option': false,\n 'active': active,\n 'contract': false,\n 'linear': undefined,\n 'inverse': undefined,\n 'taker': takerFee,\n 'maker': makerFee,\n 'contractSize': undefined,\n 'expiry': undefined,\n 'expiryDatetime': undefined,\n 'strike': undefined,\n 'optionType': undefined,\n 'precision': {\n 'amount': this.safeNumber(lotSizeFilter, 'basePrecision'),\n 'price': this.safeNumber(priceFilter, 'tickSize', quotePrecision),\n },\n 'limits': {\n 'leverage': {\n 'min': this.parseNumber('1'),\n 'max': undefined,\n },\n 'amount': {\n 'min': this.safeNumber(lotSizeFilter, 'minOrderQty'),\n 'max': this.safeNumber(lotSizeFilter, 'maxOrderQty'),\n },\n 'price': {\n 'min': undefined,\n 'max': undefined,\n },\n 'cost': {\n 'min': this.safeNumber(lotSizeFilter, 'minOrderAmt'),\n 'max': this.safeNumber(lotSizeFilter, 'maxOrderAmt'),\n },\n },\n 'created': undefined,\n 'info': market,\n });\n }\n return result;\n }\n async fetchFutureMarkets(params) {\n params = this.extend(params);\n params['limit'] = 1000; // minimize number of requests\n const response = await this.publicGetV5MarketInstrumentsInfo(params);\n const data = this.safeValue(response, 'result', {});\n let markets = this.safeValue(data, 'list', []);\n let paginationCursor = this.safeString(data, 'nextPageCursor');\n if (paginationCursor !== undefined) {\n while (paginationCursor !== undefined) {\n params['cursor'] = paginationCursor;\n const responseInner = await this.publicGetV5MarketInstrumentsInfo(params);\n const dataNew = this.safeValue(responseInner, 'result', {});\n const rawMarkets = this.safeValue(dataNew, 'list', []);\n const rawMarketsLength = rawMarkets.length;\n if (rawMarketsLength === 0) {\n break;\n }\n markets = this.arrayConcat(rawMarkets, markets);\n paginationCursor = this.safeString(dataNew, 'nextPageCursor');\n }\n }\n //\n // {\n // \"retCode\": 0,\n // \"retMsg\": \"OK\",\n // \"result\": {\n // \"category\": \"linear\",\n // \"list\": [\n // {\n // \"symbol\": \"BTCUSDT\",\n // \"contractType\": \"LinearPerpetual\",\n // \"status\": \"Trading\",\n // \"baseCoin\": \"BTC\",\n // \"quoteCoin\": \"USDT\",\n // \"launchTime\": \"1585526400000\",\n // \"deliveryTime\": \"0\",\n // \"deliveryFeeRate\": \"\",\n // \"priceScale\": \"2\",\n // \"leverageFilter\": {\n // \"minLeverage\": \"1\",\n // \"maxLeverage\": \"100.00\",\n // \"leverageStep\": \"0.01\"\n // },\n // \"priceFilter\": {\n // \"minPrice\": \"0.50\",\n // \"maxPrice\": \"999999.00\",\n // \"tickSize\": \"0.50\"\n // },\n // \"lotSizeFilter\": {\n // \"maxOrderQty\": \"100.000\",\n // \"minOrderQty\": \"0.001\",\n // \"qtyStep\": \"0.001\",\n // \"postOnlyMaxOrderQty\": \"1000.000\"\n // },\n // \"unifiedMarginTrade\": true,\n // \"fundingInterval\": 480,\n // \"settleCoin\": \"USDT\"\n // }\n // ],\n // \"nextPageCursor\": \"\"\n // },\n // \"retExtInfo\": {},\n // \"time\": 1672712495660\n // }\n //\n const result = [];\n let category = this.safeString(data, 'category');\n for (let i = 0; i < markets.length; i++) {\n const market = markets[i];\n if (category === undefined) {\n category = this.safeString(market, 'category');\n }\n const linear = (category === 'linear');\n const inverse = (category === 'inverse');\n const contractType = this.safeString(market, 'contractType');\n const inverseFutures = (contractType === 'InverseFutures');\n const linearFutures = (contractType === 'LinearFutures');\n const linearPerpetual = (contractType === 'LinearPerpetual');\n const inversePerpetual = (contractType === 'InversePerpetual');\n const id = this.safeString(market, 'symbol');\n const baseId = this.safeString(market, 'baseCoin');\n const quoteId = this.safeString(market, 'quoteCoin');\n const defaultSettledId = linear ? quoteId : baseId;\n const settleId = this.safeString(market, 'settleCoin', defaultSettledId);\n const base = this.safeCurrencyCode(baseId);\n const quote = this.safeCurrencyCode(quoteId);\n let settle = undefined;\n if (linearPerpetual && (settleId === 'USD')) {\n settle = 'USDC';\n }\n else {\n settle = this.safeCurrencyCode(settleId);\n }\n let symbol = base + '/' + quote;\n const lotSizeFilter = this.safeValue(market, 'lotSizeFilter', {});\n const priceFilter = this.safeValue(market, 'priceFilter', {});\n const leverage = this.safeValue(market, 'leverageFilter', {});\n const status = this.safeString(market, 'status');\n const swap = linearPerpetual || inversePerpetual;\n const future = inverseFutures || linearFutures;\n let type = undefined;\n if (swap) {\n type = 'swap';\n }\n else if (future) {\n type = 'future';\n }\n let expiry = undefined;\n // some swaps have deliveryTime meaning delisting time\n if (!swap) {\n expiry = this.omitZero(this.safeString(market, 'deliveryTime'));\n if (expiry !== undefined) {\n expiry = parseInt(expiry);\n }\n }\n const expiryDatetime = this.iso8601(expiry);\n symbol = symbol + ':' + settle;\n if (expiry !== undefined) {\n symbol = symbol + '-' + this.yymmdd(expiry);\n }\n const contractSize = inverse ? this.safeNumber2(lotSizeFilter, 'minTradingQty', 'minOrderQty') : this.parseNumber('1');\n result.push({\n 'id': id,\n 'symbol': symbol,\n 'base': base,\n 'quote': quote,\n 'settle': settle,\n 'baseId': baseId,\n 'quoteId': quoteId,\n 'settleId': settleId,\n 'type': type,\n 'spot': false,\n 'margin': undefined,\n 'swap': swap,\n 'future': future,\n 'option': false,\n 'active': (status === 'Trading'),\n 'contract': true,\n 'linear': linear,\n 'inverse': inverse,\n 'taker': this.safeNumber(market, 'takerFee', this.parseNumber('0.0006')),\n 'maker': this.safeNumber(market, 'makerFee', this.parseNumber('0.0001')),\n 'contractSize': contractSize,\n 'expiry': expiry,\n 'expiryDatetime': expiryDatetime,\n 'strike': undefined,\n 'optionType': undefined,\n 'precision': {\n 'amount': this.safeNumber(lotSizeFilter, 'qtyStep'),\n 'price': this.safeNumber(priceFilter, 'tickSize'),\n },\n 'limits': {\n 'leverage': {\n 'min': this.safeNumber(leverage, 'minLeverage'),\n 'max': this.safeNumber(leverage, 'maxLeverage'),\n },\n 'amount': {\n 'min': this.safeNumber2(lotSizeFilter, 'minTradingQty', 'minOrderQty'),\n 'max': this.safeNumber2(lotSizeFilter, 'maxTradingQty', 'maxOrderQty'),\n },\n 'price': {\n 'min': this.safeNumber(priceFilter, 'minPrice'),\n 'max': this.safeNumber(priceFilter, 'maxPrice'),\n },\n 'cost': {\n 'min': undefined,\n 'max': undefined,\n },\n },\n 'created': this.safeInteger(market, 'launchTime'),\n 'info': market,\n });\n }\n return result;\n }\n async fetchOptionMarkets(params) {\n const request = {\n 'category': 'option',\n };\n const response = await this.publicGetV5MarketInstrumentsInfo(this.extend(request, params));\n const data = this.safeValue(response, 'result', {});\n let markets = this.safeValue(data, 'list', []);\n if (this.options['loadAllOptions']) {\n request['limit'] = 1000;\n let paginationCursor = this.safeString(data, 'nextPageCursor');\n if (paginationCursor !== undefined) {\n while (paginationCursor !== undefined) {\n request['cursor'] = paginationCursor;\n const responseInner = await this.publicGetV5MarketInstrumentsInfo(this.extend(request, params));\n const dataNew = this.safeValue(responseInner, 'result', {});\n const rawMarkets = this.safeValue(dataNew, 'list', []);\n const rawMarketsLength = rawMarkets.length;\n if (rawMarketsLength === 0) {\n break;\n }\n markets = this.arrayConcat(rawMarkets, markets);\n paginationCursor = this.safeString(dataNew, 'nextPageCursor');\n }\n }\n }\n //\n // {\n // \"retCode\": 0,\n // \"retMsg\": \"success\",\n // \"result\": {\n // \"category\": \"option\",\n // \"nextPageCursor\": \"0%2C2\",\n // \"list\": [\n // {\n // \"symbol\": \"BTC-29DEC23-80000-C\",\n // \"status\": \"Trading\",\n // \"baseCoin\": \"BTC\",\n // \"quoteCoin\": \"USD\",\n // \"settleCoin\": \"USDC\",\n // \"optionsType\": \"Call\",\n // \"launchTime\": \"1688630400000\",\n // \"deliveryTime\": \"1703836800000\",\n // \"deliveryFeeRate\": \"0.00015\",\n // \"priceFilter\": {\n // \"minPrice\": \"5\",\n // \"maxPrice\": \"10000000\",\n // \"tickSize\": \"5\"\n // },\n // \"lotSizeFilter\": {\n // \"maxOrderQty\": \"500\",\n // \"minOrderQty\": \"0.01\",\n // \"qtyStep\": \"0.01\"\n // }\n // },\n // ]\n // },\n // \"retExtInfo\": {},\n // \"time\": 1688873094448\n // }\n //\n const result = [];\n for (let i = 0; i < markets.length; i++) {\n const market = markets[i];\n const id = this.safeString(market, 'symbol');\n const baseId = this.safeString(market, 'baseCoin');\n const quoteId = this.safeString(market, 'quoteCoin');\n const settleId = this.safeString(market, 'settleCoin');\n const base = this.safeCurrencyCode(baseId);\n const quote = this.safeCurrencyCode(quoteId);\n const settle = this.safeCurrencyCode(settleId);\n const lotSizeFilter = this.safeValue(market, 'lotSizeFilter', {});\n const priceFilter = this.safeValue(market, 'priceFilter', {});\n const status = this.safeString(market, 'status');\n const expiry = this.safeInteger(market, 'deliveryTime');\n const splitId = id.split('-');\n const strike = this.safeString(splitId, 2);\n const optionLetter = this.safeString(splitId, 3);\n const isActive = (status === 'Trading');\n if (isActive || (this.options['loadAllOptions']) || (this.options['loadExpiredOptions'])) {\n result.push({\n 'id': id,\n 'symbol': base + '/' + quote + ':' + settle + '-' + this.yymmdd(expiry) + '-' + strike + '-' + optionLetter,\n 'base': base,\n 'quote': quote,\n 'settle': settle,\n 'baseId': baseId,\n 'quoteId': quoteId,\n 'settleId': settleId,\n 'type': 'option',\n 'spot': false,\n 'margin': false,\n 'swap': false,\n 'future': false,\n 'option': true,\n 'active': isActive,\n 'contract': true,\n 'linear': undefined,\n 'inverse': undefined,\n 'taker': this.safeNumber(market, 'takerFee', this.parseNumber('0.0006')),\n 'maker': this.safeNumber(market, 'makerFee', this.parseNumber('0.0001')),\n 'contractSize': this.safeNumber(lotSizeFilter, 'minOrderQty'),\n 'expiry': expiry,\n 'expiryDatetime': this.iso8601(expiry),\n 'strike': this.parseNumber(strike),\n 'optionType': this.safeStringLower(market, 'optionsType'),\n 'precision': {\n 'amount': this.safeNumber(lotSizeFilter, 'qtyStep'),\n 'price': this.safeNumber(priceFilter, 'tickSize'),\n },\n 'limits': {\n 'leverage': {\n 'min': undefined,\n 'max': undefined,\n },\n 'amount': {\n 'min': this.safeNumber(lotSizeFilter, 'minOrderQty'),\n 'max': this.safeNumber(lotSizeFilter, 'maxOrderQty'),\n },\n 'price': {\n 'min': this.safeNumber(priceFilter, 'minPrice'),\n 'max': this.safeNumber(priceFilter, 'maxPrice'),\n },\n 'cost': {\n 'min': undefined,\n 'max': undefined,\n },\n },\n 'created': this.safeInteger(market, 'launchTime'),\n 'info': market,\n });\n }\n }\n return result;\n }\n parseTicker(ticker, market = undefined) {\n //\n // spot\n //\n // {\n // \"symbol\": \"BTCUSDT\",\n // \"bid1Price\": \"20517.96\",\n // \"bid1Size\": \"2\",\n // \"ask1Price\": \"20527.77\",\n // \"ask1Size\": \"1.862172\",\n // \"lastPrice\": \"20533.13\",\n // \"prevPrice24h\": \"20393.48\",\n // \"price24hPcnt\": \"0.0068\",\n // \"highPrice24h\": \"21128.12\",\n // \"lowPrice24h\": \"20318.89\",\n // \"turnover24h\": \"243765620.65899866\",\n // \"volume24h\": \"11801.27771\",\n // \"usdIndexPrice\": \"20784.12009279\"\n // }\n //\n // linear/inverse\n //\n // {\n // \"symbol\": \"BTCUSD\",\n // \"lastPrice\": \"16597.00\",\n // \"indexPrice\": \"16598.54\",\n // \"markPrice\": \"16596.00\",\n // \"prevPrice24h\": \"16464.50\",\n // \"price24hPcnt\": \"0.008047\",\n // \"highPrice24h\": \"30912.50\",\n // \"lowPrice24h\": \"15700.00\",\n // \"prevPrice1h\": \"16595.50\",\n // \"openInterest\": \"373504107\",\n // \"openInterestValue\": \"22505.67\",\n // \"turnover24h\": \"2352.94950046\",\n // \"volume24h\": \"49337318\",\n // \"fundingRate\": \"-0.001034\",\n // \"nextFundingTime\": \"1672387200000\",\n // \"predictedDeliveryPrice\": \"\",\n // \"basisRate\": \"\",\n // \"deliveryFeeRate\": \"\",\n // \"deliveryTime\": \"0\",\n // \"ask1Size\": \"1\",\n // \"bid1Price\": \"16596.00\",\n // \"ask1Price\": \"16597.50\",\n // \"bid1Size\": \"1\"\n // }\n //\n // option\n //\n // {\n // \"symbol\": \"BTC-30DEC22-18000-C\",\n // \"bid1Price\": \"0\",\n // \"bid1Size\": \"0\",\n // \"bid1Iv\": \"0\",\n // \"ask1Price\": \"435\",\n // \"ask1Size\": \"0.66\",\n // \"ask1Iv\": \"5\",\n // \"lastPrice\": \"435\",\n // \"highPrice24h\": \"435\",\n // \"lowPrice24h\": \"165\",\n // \"markPrice\": \"0.00000009\",\n // \"indexPrice\": \"16600.55\",\n // \"markIv\": \"0.7567\",\n // \"underlyingPrice\": \"16590.42\",\n // \"openInterest\": \"6.3\",\n // \"turnover24h\": \"2482.73\",\n // \"volume24h\": \"0.15\",\n // \"totalVolume\": \"99\",\n // \"totalTurnover\": \"1967653\",\n // \"delta\": \"0.00000001\",\n // \"gamma\": \"0.00000001\",\n // \"vega\": \"0.00000004\",\n // \"theta\": \"-0.00000152\",\n // \"predictedDeliveryPrice\": \"0\",\n // \"change24h\": \"86\"\n // }\n //\n const isSpot = this.safeString(ticker, 'openInterestValue') === undefined;\n const timestamp = this.safeInteger(ticker, 'time');\n const marketId = this.safeString(ticker, 'symbol');\n const type = isSpot ? 'spot' : 'contract';\n market = this.safeMarket(marketId, market, undefined, type);\n const symbol = this.safeSymbol(marketId, market, undefined, type);\n const last = this.safeString(ticker, 'lastPrice');\n const open = this.safeString(ticker, 'prevPrice24h');\n let percentage = this.safeString(ticker, 'price24hPcnt');\n percentage = Precise.stringMul(percentage, '100');\n const quoteVolume = this.safeString(ticker, 'turnover24h');\n const baseVolume = this.safeString(ticker, 'volume24h');\n const bid = this.safeString(ticker, 'bid1Price');\n const ask = this.safeString(ticker, 'ask1Price');\n const high = this.safeString(ticker, 'highPrice24h');\n const low = this.safeString(ticker, 'lowPrice24h');\n return this.safeTicker({\n 'symbol': symbol,\n 'timestamp': timestamp,\n 'datetime': this.iso8601(timestamp),\n 'high': high,\n 'low': low,\n 'bid': bid,\n 'bidVolume': this.safeString2(ticker, 'bidSize', 'bid1Size'),\n 'ask': ask,\n 'askVolume': this.safeString2(ticker, 'askSize', 'ask1Size'),\n 'vwap': undefined,\n 'open': open,\n 'close': last,\n 'last': last,\n 'previousClose': undefined,\n 'change': undefined,\n 'percentage': percentage,\n 'average': undefined,\n 'baseVolume': baseVolume,\n 'quoteVolume': quoteVolume,\n 'info': ticker,\n }, market);\n }\n async fetchTicker(symbol, params = {}) {\n /**\n * @method\n * @name bybit#fetchTicker\n * @description fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market\n * @see https://bybit-exchange.github.io/docs/v5/market/tickers\n * @param {string} symbol unified symbol of the market to fetch the ticker for\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} a [ticker structure]{@link https://docs.ccxt.com/#/?id=ticker-structure}\n */\n if (symbol === undefined) {\n throw new InvalidParamsError('fetchTicker() requires a symbol argument').exchange(this.id);\n }\n await this.loadMarkets();\n const market = this.market(symbol);\n const request = {\n 'symbol': market['id'],\n // 'baseCoin': '', Base coin. For option only\n // 'expDate': '', Expiry date. e.g., 25DEC22. For option only\n };\n if (market['spot']) {\n request['category'] = 'spot';\n }\n else {\n if (market['option']) {\n request['category'] = 'option';\n }\n else if (market['linear']) {\n request['category'] = 'linear';\n }\n else if (market['inverse']) {\n request['category'] = 'inverse';\n }\n }\n const response = await this.publicGetV5MarketTickers(this.extend(request, params));\n //\n // {\n // \"retCode\": 0,\n // \"retMsg\": \"OK\",\n // \"result\": {\n // \"category\": \"inverse\",\n // \"list\": [\n // {\n // \"symbol\": \"BTCUSD\",\n // \"lastPrice\": \"16597.00\",\n // \"indexPrice\": \"16598.54\",\n // \"markPrice\": \"16596.00\",\n // \"prevPrice24h\": \"16464.50\",\n // \"price24hPcnt\": \"0.008047\",\n // \"highPrice24h\": \"30912.50\",\n // \"lowPrice24h\": \"15700.00\",\n // \"prevPrice1h\": \"16595.50\",\n // \"openInterest\": \"373504107\",\n // \"openInterestValue\": \"22505.67\",\n // \"turnover24h\": \"2352.94950046\",\n // \"volume24h\": \"49337318\",\n // \"fundingRate\": \"-0.001034\",\n // \"nextFundingTime\": \"1672387200000\",\n // \"predictedDeliveryPrice\": \"\",\n // \"basisRate\": \"\",\n // \"deliveryFeeRate\": \"\",\n // \"deliveryTime\": \"0\",\n // \"ask1Size\": \"1\",\n // \"bid1Price\": \"16596.00\",\n // \"ask1Price\": \"16597.50\",\n // \"bid1Size\": \"1\"\n // }\n // ]\n // },\n // \"retExtInfo\": {},\n // \"time\": 1672376496682\n // }\n //\n const result = this.safeValue(response, 'result', []);\n const tickers = this.safeValue(result, 'list', []);\n const rawTicker = this.safeValue(tickers, 0);\n return this.parseTicker(rawTicker, market);\n }\n async fetchTickers(symbols = undefined, params = {}) {\n /**\n * @method\n * @name bybit#fetchTickers\n * @description fetches price tickers for multiple markets, statistical information calculated over the past 24 hours for each market\n * @see https://bybit-exchange.github.io/docs/v5/market/tickers\n * @param {string[]} symbols unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} an array of [ticker structures]{@link https://docs.ccxt.com/#/?id=ticker-structure}\n */\n await this.loadMarkets();\n let market = undefined;\n let parsedSymbols = undefined;\n if (symbols !== undefined) {\n parsedSymbols = [];\n const marketTypeInfo = this.handleMarketTypeAndParams('fetchTickers', undefined, params);\n const defaultType = marketTypeInfo[0]; // don't omit here\n // we can't use marketSymbols here due to the conflicing ids between markets\n let currentType = undefined;\n for (let i = 0; i < symbols.length; i++) {\n const symbol = symbols[i];\n // using safeMarket here because if the user provides for instance BTCUSDT and \"type\": \"spot\" in params we should\n // infer the market type from the type provided and not from the conflicting id (BTCUSDT might be swap or spot)\n const isExchangeSpecificSymbol = (symbol.indexOf('/') === -1);\n if (isExchangeSpecificSymbol) {\n market = this.safeMarket(symbol, undefined, undefined, defaultType);\n }\n else {\n market = this.market(symbol);\n }\n if (currentType === undefined) {\n currentType = market['type'];\n }\n else if (market['type'] !== currentType) {\n throw new InvalidParamsError('fetchTickers can only accept a list of symbols of the same type').exchange(this.id);\n }\n parsedSymbols.push(market['symbol']);\n }\n }\n const request = {\n // 'symbol': market['id'],\n // 'baseCoin': '', // Base coin. For option only\n // 'expDate': '', // Expiry date. e.g., 25DEC22. For option only\n };\n let type = undefined;\n [type, params] = this.handleMarketTypeAndParams('fetchTickers', market, params);\n if (type === 'spot') {\n request['category'] = 'spot';\n }\n else if (type === 'swap' || type === 'future') {\n let subType = undefined;\n [subType, params] = this.handleSubTypeAndParams('fetchTickers', market, params, 'linear');\n request['category'] = subType;\n }\n else if (type === 'option') {\n request['category'] = 'option';\n }\n const response = await this.publicGetV5MarketTickers(this.extend(request, params));\n //\n // {\n // \"retCode\": 0,\n // \"retMsg\": \"OK\",\n // \"result\": {\n // \"category\": \"inverse\",\n // \"list\": [\n // {\n // \"symbol\": \"BTCUSD\",\n // \"lastPrice\": \"16597.00\",\n // \"indexPrice\": \"16598.54\",\n // \"markPrice\": \"16596.00\",\n // \"prevPrice24h\": \"16464.50\",\n // \"price24hPcnt\": \"0.008047\",\n // \"highPrice24h\": \"30912.50\",\n // \"lowPrice24h\": \"15700.00\",\n // \"prevPrice1h\": \"16595.50\",\n // \"openInterest\": \"373504107\",\n // \"openInterestValue\": \"22505.67\",\n // \"turnover24h\": \"2352.94950046\",\n // \"volume24h\": \"49337318\",\n // \"fundingRate\": \"-0.001034\",\n // \"nextFundingTime\": \"1672387200000\",\n // \"predictedDeliveryPrice\": \"\",\n // \"basisRate\": \"\",\n // \"deliveryFeeRate\": \"\",\n // \"deliveryTime\": \"0\",\n // \"ask1Size\": \"1\",\n // \"bid1Price\": \"16596.00\",\n // \"ask1Price\": \"16597.50\",\n // \"bid1Size\": \"1\"\n // }\n // ]\n // },\n // \"retExtInfo\": {},\n // \"time\": 1672376496682\n // }\n //\n const result = this.safeValue(response, 'result', {});\n const tickerList = this.safeValue(result, 'list', []);\n return this.parseTickers(tickerList, parsedSymbols);\n }\n parseOHLCV(ohlcv, market = undefined) {\n //\n // [\n // \"1621162800\",\n // \"49592.43\",\n // \"49644.91\",\n // \"49342.37\",\n // \"49349.42\",\n // \"1451.59\",\n // \"2.4343353100000003\"\n // ]\n //\n const volumeIndex = (market['inverse']) ? 6 : 5;\n return [\n this.safeInteger(ohlcv, 0),\n this.safeNumber(ohlcv, 1),\n this.safeNumber(ohlcv, 2),\n this.safeNumber(ohlcv, 3),\n this.safeNumber(ohlcv, 4),\n this.safeNumber(ohlcv, volumeIndex),\n ];\n }\n async fetchOHLCV(symbol, timeframe = '1m', since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name bybit#fetchOHLCV\n * @description fetches historical candlestick data containing the open, high, low, and close price, and the volume of a market\n * @see https://bybit-exchange.github.io/docs/v5/market/kline\n * @see https://bybit-exchange.github.io/docs/v5/market/mark-kline\n * @see https://bybit-exchange.github.io/docs/v5/market/index-kline\n * @see https://bybit-exchange.github.io/docs/v5/market/preimum-index-kline\n * @param {string} symbol unified symbol of the market to fetch OHLCV data for\n * @param {string} timeframe the length of time each candle represents\n * @param {int} [since] timestamp in ms of the earliest candle to fetch\n * @param {int} [limit] the maximum amount of candles to fetch\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {int} [params.until] the latest time in ms to fetch orders for\n * @param {boolean} [params.paginate] default false, when true will automatically paginate by calling this endpoint multiple times. See in the docs all the [availble parameters](https://github.com/ccxt/ccxt/wiki/Manual#pagination-params)\n * @returns {int[][]} A list of candles ordered as timestamp, open, high, low, close, volume\n */\n if (symbol === undefined) {\n throw new InvalidParamsError('fetchOHLCV() requires a symbol argument').exchange(this.id);\n }\n await this.loadMarkets();\n let paginate = false;\n [paginate, params] = this.handleOptionAndParams(params, 'fetchOHLCV', 'paginate');\n if (paginate) {\n return await this.fetchPaginatedCallDeterministic('fetchOHLCV', symbol, since, limit, timeframe, params, 1000);\n }\n const market = this.market(symbol);\n let request = {\n 'symbol': market['id'],\n };\n if (limit === undefined) {\n limit = 200; // default is 200 when requested with `since`\n }\n if (since !== undefined) {\n request['start'] = since;\n }\n if (limit !== undefined) {\n request['limit'] = limit; // max 1000, default 1000\n }\n [request, params] = this.handleUntilOption('end', request, params);\n request['interval'] = this.safeString(this.timeframes, timeframe, timeframe);\n let response = undefined;\n if (market['spot']) {\n request['category'] = 'spot';\n response = await this.publicGetV5MarketKline(this.extend(request, params));\n }\n else {\n const price = this.safeString(params, 'price');\n params = this.omit(params, 'price');\n if (market['linear']) {\n request['category'] = 'linear';\n }\n else if (market['inverse']) {\n request['category'] = 'inverse';\n }\n else {\n throw new MarketTypeNotSupportedError(market['type']).exchange(this.id);\n }\n if (price === 'mark') {\n response = await this.publicGetV5MarketMarkPriceKline(this.extend(request, params));\n }\n else if (price === 'index') {\n response = await this.publicGetV5MarketIndexPriceKline(this.extend(request, params));\n }\n else if (price === 'premiumIndex') {\n response = await this.publicGetV5MarketPremiumIndexPriceKline(this.extend(request, params));\n }\n else {\n response = await this.publicGetV5MarketKline(this.extend(request, params));\n }\n }\n //\n // {\n // \"retCode\": 0,\n // \"retMsg\": \"OK\",\n // \"result\": {\n // \"symbol\": \"BTCUSD\",\n // \"category\": \"inverse\",\n // \"list\": [\n // [\n // \"1670608800000\",\n // \"17071\",\n // \"17073\",\n // \"17027\",\n // \"17055.5\",\n // \"268611\",\n // \"15.74462667\"\n // ],\n // [\n // \"1670605200000\",\n // \"17071.5\",\n // \"17071.5\",\n // \"17061\",\n // \"17071\",\n // \"4177\",\n // \"0.24469757\"\n // ],\n // [\n // \"1670601600000\",\n // \"17086.5\",\n // \"17088\",\n // \"16978\",\n // \"17071.5\",\n // \"6356\",\n // \"0.37288112\"\n // ]\n // ]\n // },\n // \"retExtInfo\": {},\n // \"time\": 1672025956592\n // }\n //\n const result = this.safeValue(response, 'result', {});\n const ohlcvs = this.safeValue(result, 'list', []);\n return this.parseOHLCVs(ohlcvs, market, timeframe, since, limit);\n }\n parseTrade(trade, market = undefined) {\n //\n // public https://bybit-exchange.github.io/docs/v5/market/recent-trade\n //\n // {\n // \"execId\": \"666042b4-50c6-58f3-bd9c-89b2088663ff\",\n // \"symbol\": \"ETHUSD\",\n // \"price\": \"1162.95\",\n // \"size\": \"1\",\n // \"side\": \"Sell\",\n // \"time\": \"1669191277315\",\n // \"isBlockTrade\": false\n // }\n //\n // private trades classic spot https://bybit-exchange.github.io/docs/v5/position/execution\n //\n // {\n // \"symbol\": \"QNTUSDT\",\n // \"orderId\": \"1538686353240339712\",\n // \"orderLinkId\": \"\",\n // \"side\": \"Sell\",\n // \"orderPrice\": \"\",\n // \"orderQty\": \"\",\n // \"leavesQty\": \"\",\n // \"orderType\": \"Limit\",\n // \"stopOrderType\": \"\",\n // \"execFee\": \"0.040919\",\n // \"execId\": \"2210000000097330907\",\n // \"execPrice\": \"98.6\",\n // \"execQty\": \"0.415\",\n // \"execType\": \"\",\n // \"execValue\": \"\",\n // \"execTime\": \"1698161716634\",\n // \"isMaker\": true,\n // \"feeRate\": \"\",\n // \"tradeIv\": \"\",\n // \"markIv\": \"\",\n // \"markPrice\": \"\",\n // \"indexPrice\": \"\",\n // \"underlyingPrice\": \"\",\n // \"blockTradeId\": \"\"\n // }\n //\n // private trades unified https://bybit-exchange.github.io/docs/v5/position/execution\n //\n // {\n // \"symbol\": \"QNTUSDT\",\n // \"orderType\": \"Limit\",\n // \"underlyingPrice\": \"\",\n // \"orderLinkId\": \"1549452573428424449\",\n // \"orderId\": \"1549452573428424448\",\n // \"stopOrderType\": \"\",\n // \"execTime\": \"1699445151998\",\n // \"feeRate\": \"0.00025\",\n // \"tradeIv\": \"\",\n // \"blockTradeId\": \"\",\n // \"markPrice\": \"\",\n // \"execPrice\": \"102.8\",\n // \"markIv\": \"\",\n // \"orderQty\": \"3.652\",\n // \"orderPrice\": \"102.8\",\n // \"execValue\": \"1.028\",\n // \"closedSize\": \"\",\n // \"execType\": \"Trade\",\n // \"seq\": \"19157444346\",\n // \"side\": \"Buy\",\n // \"indexPrice\": \"\",\n // \"leavesQty\": \"3.642\",\n // \"isMaker\": true,\n // \"execFee\": \"0.0000025\",\n // \"execId\": \"2210000000101610464\",\n // \"execQty\": \"0.01\",\n // \"nextPageCursor\": \"267951%3A0%2C38567%3A0\"\n // },\n //\n // private USDC settled trades\n //\n // {\n // \"symbol\": \"ETHPERP\",\n // \"orderLinkId\": \"\",\n // \"side\": \"Buy\",\n // \"orderId\": \"aad0ee44-ce12-4112-aeee-b7829f6c3a26\",\n // \"execFee\": \"0.0210\",\n // \"feeRate\": \"0.000600\",\n // \"blockTradeId\": \"\",\n // \"tradeTime\": \"1669196417930\",\n // \"execPrice\": \"1162.15\",\n // \"lastLiquidityInd\": \"TAKER\",\n // \"execValue\": \"34.8645\",\n // \"execType\": \"Trade\",\n // \"execQty\": \"0.030\",\n // \"tradeId\": \"0e94eaf5-b08e-5505-b43f-7f1f30b1ca80\"\n // }\n //\n const id = this.safeStringN(trade, ['execId', 'id', 'tradeId']);\n const marketId = this.safeString(trade, 'symbol');\n let marketType = 'contract';\n if (market !== undefined) {\n marketType = market['type'];\n }\n const category = this.safeString(trade, 'category');\n if (category !== undefined) {\n if (category === 'spot') {\n marketType = 'spot';\n }\n }\n market = this.safeMarket(marketId, market, undefined, marketType);\n const symbol = market['symbol'];\n const amountString = this.safeStringN(trade, ['execQty', 'orderQty', 'size']);\n const priceString = this.safeStringN(trade, ['execPrice', 'orderPrice', 'price']);\n const costString = this.safeString(trade, 'execValue');\n const timestamp = this.safeIntegerN(trade, ['time', 'execTime', 'tradeTime']);\n let side = this.safeStringLower(trade, 'side');\n if (side === undefined) {\n const isBuyer = this.safeInteger(trade, 'isBuyer');\n if (isBuyer !== undefined) {\n side = isBuyer ? 'buy' : 'sell';\n }\n }\n const isMaker = this.safeValue(trade, 'isMaker');\n let takerOrMaker = undefined;\n if (isMaker !== undefined) {\n takerOrMaker = isMaker ? 'maker' : 'taker';\n }\n else {\n let lastLiquidityInd = this.safeString(trade, 'lastLiquidityInd');\n if (lastLiquidityInd === 'UNKNOWN') {\n lastLiquidityInd = undefined;\n }\n if (lastLiquidityInd !== undefined) {\n if ((lastLiquidityInd === 'TAKER') || (lastLiquidityInd === 'MAKER')) {\n takerOrMaker = lastLiquidityInd.toLowerCase();\n }\n else {\n takerOrMaker = (lastLiquidityInd === 'AddedLiquidity') ? 'maker' : 'taker';\n }\n }\n }\n let orderType = this.safeStringLower(trade, 'orderType');\n if (orderType === 'unknown') {\n orderType = undefined;\n }\n const feeCostString = this.safeString(trade, 'execFee');\n let fee = undefined;\n if (feeCostString !== undefined) {\n const feeRateString = this.safeString(trade, 'feeRate');\n let feeCurrencyCode = undefined;\n if (market['spot']) {\n if (Precise.stringGt(feeCostString, '0')) {\n if (side === 'buy') {\n feeCurrencyCode = market['base'];\n }\n else {\n feeCurrencyCode = market['quote'];\n }\n }\n else {\n if (side === 'buy') {\n feeCurrencyCode = market['quote'];\n }\n else {\n feeCurrencyCode = market['base'];\n }\n }\n }\n else {\n feeCurrencyCode = market['inverse'] ? market['base'] : market['settle'];\n }\n fee = {\n 'cost': feeCostString,\n 'currency': feeCurrencyCode,\n 'rate': feeRateString,\n };\n }\n return this.safeTrade({\n 'id': id,\n 'info': trade,\n 'timestamp': timestamp,\n 'datetime': this.iso8601(timestamp),\n 'symbol': symbol,\n 'order': this.safeString(trade, 'orderId'),\n 'type': orderType,\n 'side': side,\n 'takerOrMaker': takerOrMaker,\n 'price': priceString,\n 'amount': amountString,\n 'cost': costString,\n 'fee': fee,\n }, market);\n }\n async fetchTrades(symbol, since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name bybit#fetchTrades\n * @description get the list of most recent trades for a particular symbol\n * @see https://bybit-exchange.github.io/docs/v5/market/recent-trade\n * @param {string} symbol unified symbol of the market to fetch trades for\n * @param {int} [since] timestamp in ms of the earliest trade to fetch\n * @param {int} [limit] the maximum amount of trades to fetch\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {string} [params.type] market type, ['swap', 'option', 'spot']\n * @param {string} [params.subType] market subType, ['linear', 'inverse']\n * @returns {Trade[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=public-trades}\n */\n if (symbol === undefined) {\n throw new InvalidParamsError('fetchTrades() requires a symbol argument').exchange(this.id);\n }\n await this.loadMarkets();\n const market = this.market(symbol);\n const request = {\n 'symbol': market['id'],\n // 'baseCoin': '', // Base coin. For option only. If not passed, return BTC data by default\n // 'optionType': 'Call', // Option type. Call or Put. For option only\n };\n if (limit !== undefined) {\n // spot: [1,60], default: 60.\n // others: [1,1000], default: 500\n request['limit'] = limit;\n }\n let type = undefined;\n [type, params] = this.getBybitType('fetchTrades', market, params);\n request['category'] = type;\n const response = await this.publicGetV5MarketRecentTrade(this.extend(request, params));\n //\n // {\n // \"retCode\": 0,\n // \"retMsg\": \"OK\",\n // \"result\": {\n // \"category\": \"spot\",\n // \"list\": [\n // {\n // \"execId\": \"2100000000007764263\",\n // \"symbol\": \"BTCUSDT\",\n // \"price\": \"16618.49\",\n // \"size\": \"0.00012\",\n // \"side\": \"Buy\",\n // \"time\": \"1672052955758\",\n // \"isBlockTrade\": false\n // }\n // ]\n // },\n // \"retExtInfo\": {},\n // \"time\": 1672053054358\n // }\n //\n const result = this.safeValue(response, 'result', {});\n const trades = this.safeValue(result, 'list', []);\n return this.parseTrades(trades, market, since, limit);\n }\n async fetchOrderBook(symbol, limit = undefined, params = {}) {\n /**\n * @method\n * @name bybit#fetchOrderBook\n * @description fetches information on open orders with bid (buy) and ask (sell) prices, volumes and other data\n * @see https://bybit-exchange.github.io/docs/v5/market/orderbook\n * @param {string} symbol unified symbol of the market to fetch the order book for\n * @param {int} [limit] the maximum amount of order book entries to return (max 200 spot, 500 linear&inverse, 25 options)\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} A dictionary of [order book structures]{@link https://docs.ccxt.com/#/?id=order-book-structure} indexed by market symbols\n */\n if (symbol === undefined) {\n throw new InvalidParamsError('fetchOrderBook() requires a symbol argument').exchange(this.id);\n }\n await this.loadMarkets();\n const market = this.market(symbol);\n const request = {\n 'symbol': market['id'],\n };\n let defaultLimit = 25;\n if (market['spot']) {\n // limit: [1, 200]. Default: 1\n defaultLimit = 50;\n request['category'] = 'spot';\n }\n else {\n if (market['option']) {\n // limit: [1, 25]. Default: 1\n request['category'] = 'option';\n }\n else if (market['linear']) {\n // limit: [1, 500]. Default: 25\n request['category'] = 'linear';\n }\n else if (market['inverse']) {\n // limit: [1, 500]. Default: 25\n request['category'] = 'inverse';\n }\n }\n request['limit'] = (limit !== undefined) ? limit : defaultLimit;\n const response = await this.publicGetV5MarketOrderbook(this.extend(request, params));\n //\n // {\n // \"retCode\": 0,\n // \"retMsg\": \"OK\",\n // \"result\": {\n // \"s\": \"BTCUSDT\",\n // \"a\": [\n // [\n // \"16638.64\",\n // \"0.008479\"\n // ]\n // ],\n // \"b\": [\n // [\n // \"16638.27\",\n // \"0.305749\"\n // ]\n // ],\n // \"ts\": 1672765737733,\n // \"u\": 5277055\n // },\n // \"retExtInfo\": {},\n // \"time\": 1672765737734\n // }\n //\n const result = this.safeValue(response, 'result', []);\n const timestamp = this.safeInteger(result, 'ts');\n return this.parseOrderBook(result, symbol, timestamp, 'b', 'a');\n }\n parseBalance(response) {\n //\n // cross\n // {\n // \"retCode\": 0,\n // \"retMsg\": \"success\",\n // \"result\": {\n // \"acctBalanceSum\": \"0.122995614474732872\",\n // \"debtBalanceSum\": \"0.011734191124529754\",\n // \"loanAccountList\": [\n // {\n // \"free\": \"0.001143855\",\n // \"interest\": \"0\",\n // \"loan\": \"0\",\n // \"locked\": \"0\",\n // \"tokenId\": \"BTC\",\n // \"total\": \"0.001143855\"\n // },\n // {\n // \"free\": \"200.00005568\",\n // \"interest\": \"0.0008391\",\n // \"loan\": \"200\",\n // \"locked\": \"0\",\n // \"tokenId\": \"USDT\",\n // \"total\": \"200.00005568\"\n // },\n // ],\n // \"riskRate\": \"0.0954\",\n // \"status\": 1\n // },\n // \"retExtInfo\": {},\n // \"time\": 1669843584123\n // }\n //\n // funding\n // {\n // \"retCode\": 0,\n // \"retMsg\": \"success\",\n // \"result\": {\n // \"memberId\": \"533285\",\n // \"accountType\": \"FUND\",\n // \"balance\": [\n // {\n // \"coin\": \"USDT\",\n // \"transferBalance\": \"1010\",\n // \"walletBalance\": \"1010\",\n // \"bonus\": \"\"\n // },\n // {\n // \"coin\": \"USDC\",\n // \"transferBalance\": \"0\",\n // \"walletBalance\": \"0\",\n // \"bonus\": \"\"\n // }\n // ]\n // },\n // \"retExtInfo\": {},\n // \"time\": 1675865290069\n // }\n //\n // spot & swap\n // {\n // \"retCode\": 0,\n // \"retMsg\": \"OK\",\n // \"result\": {\n // \"list\": [\n // {\n // \"totalEquity\": \"18070.32797922\",\n // \"accountIMRate\": \"0.0101\",\n // \"totalMarginBalance\": \"18070.32797922\",\n // \"totalInitialMargin\": \"182.60183684\",\n // \"accountType\": \"UNIFIED\",\n // \"totalAvailableBalance\": \"17887.72614237\",\n // \"accountMMRate\": \"0\",\n // \"totalPerpUPL\": \"-0.11001349\",\n // \"totalWalletBalance\": \"18070.43799271\",\n // \"accountLTV\": \"0.017\",\n // \"totalMaintenanceMargin\": \"0.38106773\",\n // \"coin\": [\n // {\n // \"availableToBorrow\": \"2.5\",\n // \"bonus\": \"0\",\n // \"accruedInterest\": \"0\",\n // \"availableToWithdraw\": \"0.805994\",\n // \"totalOrderIM\": \"0\",\n // \"equity\": \"0.805994\",\n // \"totalPositionMM\": \"0\",\n // \"usdValue\": \"12920.95352538\",\n // \"unrealisedPnl\": \"0\",\n // \"borrowAmount\": \"0\",\n // \"totalPositionIM\": \"0\",\n // \"walletBalance\": \"0.805994\",\n // \"cumRealisedPnl\": \"0\",\n // \"coin\": \"BTC\"\n // }\n // ]\n // }\n // ]\n // },\n // \"retExtInfo\": {},\n // \"time\": 1672125441042\n // }\n //\n const timestamp = this.safeInteger(response, 'time');\n const result = {\n 'info': response,\n 'timestamp': timestamp,\n 'datetime': this.iso8601(timestamp),\n };\n const responseResult = this.safeValue(response, 'result', {});\n const currencyList = this.safeValueN(responseResult, ['loanAccountList', 'list', 'balance']);\n if (currencyList === undefined) {\n // usdc wallet\n const code = 'USDC';\n const account = this.account();\n account['free'] = this.safeString(responseResult, 'availableBalance');\n account['total'] = this.safeString(responseResult, 'walletBalance');\n result[code] = account;\n }\n else {\n for (let i = 0; i < currencyList.length; i++) {\n const entry = currencyList[i];\n const accountType = this.safeString(entry, 'accountType');\n if (accountType === 'UNIFIED' || accountType === 'CONTRACT' || accountType === 'SPOT') {\n const coins = this.safeValue(entry, 'coin');\n for (let j = 0; j < coins.length; j++) {\n const account = this.account();\n const coinEntry = coins[j];\n const loan = this.safeString(coinEntry, 'borrowAmount');\n const interest = this.safeString(coinEntry, 'accruedInterest');\n if ((loan !== undefined) && (interest !== undefined)) {\n account['debt'] = Precise.stringAdd(loan, interest);\n }\n account['total'] = this.safeString(coinEntry, 'walletBalance');\n account['free'] = this.safeString2(coinEntry, 'availableToWithdraw', 'free');\n // account['used'] = this.safeString (coinEntry, 'locked');\n const currencyId = this.safeString(coinEntry, 'coin');\n const code = this.safeCurrencyCode(currencyId);\n result[code] = account;\n }\n }\n else {\n const account = this.account();\n const loan = this.safeString(entry, 'loan');\n const interest = this.safeString(entry, 'interest');\n if ((loan !== undefined) && (interest !== undefined)) {\n account['debt'] = Precise.stringAdd(loan, interest);\n }\n account['total'] = this.safeString2(entry, 'total', 'walletBalance');\n account['free'] = this.safeStringN(entry, ['free', 'availableBalanceWithoutConvert', 'availableBalance', 'transferBalance']);\n account['used'] = this.safeString(entry, 'locked');\n const currencyId = this.safeStringN(entry, ['tokenId', 'coin', 'currencyCoin']);\n const code = this.safeCurrencyCode(currencyId);\n result[code] = account;\n }\n }\n }\n return this.safeBalance(result);\n }\n async fetchBalance(params = {}) {\n /**\n * @method\n * @name bybit#fetchBalance\n * @description query for balance and get the amount of funds available for trading or funds locked in orders\n * @see https://bybit-exchange.github.io/docs/v5/spot-margin-normal/account-info\n * @see https://bybit-exchange.github.io/docs/v5/asset/all-balance\n * @see https://bybit-exchange.github.io/docs/v5/account/wallet-balance\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {string} [params.type] wallet type, ['spot', 'swap', 'fund']\n * @param {string} [params.memberId] sub-account uid if fetching for sub-accounts\n * @returns {object} a [balance structure]{@link https://docs.ccxt.com/#/?id=balance-structure}\n */\n const methodCallId = params['methodCallId'];\n await this.loadMarkets(!!methodCallId, { methodCallId });\n const request = {};\n const [enableUnifiedMargin, enableUnifiedAccount] = await this.isUnifiedEnabled({ methodCallId });\n const isUnifiedAccount = (enableUnifiedMargin || enableUnifiedAccount);\n let type = undefined;\n [type, params] = this.handleMarketTypeAndParams('fetchBalance', undefined, params);\n const isSpot = (type === 'spot');\n const isSwap = (type === 'swap');\n if (isUnifiedAccount) {\n if (isSpot || isSwap) {\n type = 'unified';\n }\n }\n else {\n if (isSwap) {\n type = 'contract';\n }\n }\n const accountTypes = this.safeValue(this.options, 'accountsByType', {});\n const unifiedType = this.safeStringUpper(accountTypes, type, type);\n let marginMode = undefined;\n [marginMode, params] = this.handleMarginModeAndParams('fetchBalance', params);\n let response = undefined;\n const isSubAccount = this.safeString(params, 'memberId') !== undefined;\n if (isSpot && (marginMode !== undefined)) {\n response = await this.privateGetV5SpotCrossMarginTradeAccount(this.extend(request, params));\n }\n else if (unifiedType === 'FUND' || isSubAccount) {\n // use this endpoint only we have no other choice\n // because it requires transfer permission\n request['accountType'] = unifiedType;\n response = await this.privateGetV5AssetTransferQueryAccountCoinsBalance(this.extend(request, params));\n }\n else {\n request['accountType'] = unifiedType;\n response = await this.privateGetV5AccountWalletBalance(this.extend(request, params));\n }\n //\n // cross\n // {\n // \"retCode\": 0,\n // \"retMsg\": \"success\",\n // \"result\": {\n // \"acctBalanceSum\": \"0.122995614474732872\",\n // \"debtBalanceSum\": \"0.011734191124529754\",\n // \"loanAccountList\": [\n // {\n // \"free\": \"0.001143855\",\n // \"interest\": \"0\",\n // \"loan\": \"0\",\n // \"locked\": \"0\",\n // \"tokenId\": \"BTC\",\n // \"total\": \"0.001143855\"\n // },\n // {\n // \"free\": \"200.00005568\",\n // \"interest\": \"0.0008391\",\n // \"loan\": \"200\",\n // \"locked\": \"0\",\n // \"tokenId\": \"USDT\",\n // \"total\": \"200.00005568\"\n // },\n // ],\n // \"riskRate\": \"0.0954\",\n // \"status\": 1\n // },\n // \"retExtInfo\": {},\n // \"time\": 1669843584123\n // }\n //\n // funding\n // {\n // \"retCode\": 0,\n // \"retMsg\": \"success\",\n // \"result\": {\n // \"memberId\": \"533285\",\n // \"accountType\": \"FUND\",\n // \"balance\": [\n // {\n // \"coin\": \"USDT\",\n // \"transferBalance\": \"1010\",\n // \"walletBalance\": \"1010\",\n // \"bonus\": \"\"\n // },\n // {\n // \"coin\": \"USDC\",\n // \"transferBalance\": \"0\",\n // \"walletBalance\": \"0\",\n // \"bonus\": \"\"\n // }\n // ]\n // },\n // \"retExtInfo\": {},\n // \"time\": 1675865290069\n // }\n //\n // spot & swap\n // {\n // \"retCode\": 0,\n // \"retMsg\": \"OK\",\n // \"result\": {\n // \"list\": [\n // {\n // \"totalEquity\": \"18070.32797922\",\n // \"accountIMRate\": \"0.0101\",\n // \"totalMarginBalance\": \"18070.32797922\",\n // \"totalInitialMargin\": \"182.60183684\",\n // \"accountType\": \"UNIFIED\",\n // \"totalAvailableBalance\": \"17887.72614237\",\n // \"accountMMRate\": \"0\",\n // \"totalPerpUPL\": \"-0.11001349\",\n // \"totalWalletBalance\": \"18070.43799271\",\n // \"accountLTV\": \"0.017\",\n // \"totalMaintenanceMargin\": \"0.38106773\",\n // \"coin\": [\n // {\n // \"availableToBorrow\": \"2.5\",\n // \"bonus\": \"0\",\n // \"accruedInterest\": \"0\",\n // \"availableToWithdraw\": \"0.805994\",\n // \"totalOrderIM\": \"0\",\n // \"equity\": \"0.805994\",\n // \"totalPositionMM\": \"0\",\n // \"usdValue\": \"12920.95352538\",\n // \"unrealisedPnl\": \"0\",\n // \"borrowAmount\": \"0\",\n // \"totalPositionIM\": \"0\",\n // \"walletBalance\": \"0.805994\",\n // \"cumRealisedPnl\": \"0\",\n // \"coin\": \"BTC\"\n // }\n // ]\n // }\n // ]\n // },\n // \"retExtInfo\": {},\n // \"time\": 1672125441042\n // }\n //\n return this.parseBalance(response);\n }\n parseOrderStatus(status) {\n const statuses = {\n // v3 spot\n 'NEW': 'open',\n 'PARTIALLY_FILLED': 'open',\n 'FILLED': 'closed',\n 'CANCELED': 'canceled',\n 'PENDING_CANCEL': 'open',\n 'PENDING_NEW': 'open',\n 'REJECTED': 'rejected',\n 'PARTIALLY_FILLED_CANCELLED': 'closed',\n // v3 contract / unified margin / unified account\n 'Created': 'open',\n 'New': 'open',\n 'Rejected': 'rejected',\n 'PartiallyFilled': 'open',\n 'PartiallyFilledCanceled': 'closed',\n 'Filled': 'closed',\n 'PendingCancel': 'open',\n 'Cancelled': 'canceled',\n // below this line the status only pertains to conditional orders\n 'Untriggered': 'open',\n 'Deactivated': 'canceled',\n 'Triggered': 'open',\n 'Active': 'open',\n };\n return this.safeString(statuses, status, status);\n }\n parseTimeInForce(timeInForce) {\n const timeInForces = {\n 'GoodTillCancel': 'GTC',\n 'ImmediateOrCancel': 'IOC',\n 'FillOrKill': 'FOK',\n 'PostOnly': 'PO',\n };\n return this.safeString(timeInForces, timeInForce, timeInForce);\n }\n parseOrder(order, market = undefined) {\n //\n // v1 for usdc normal account\n // {\n // \"symbol\": \"BTCPERP\",\n // \"orderType\": \"Market\",\n // \"orderLinkId\": \"\",\n // \"orderId\": \"36190ad3-de08-4b83-9ad3-56942f684b79\",\n // \"cancelType\": \"UNKNOWN\",\n // \"stopOrderType\": \"UNKNOWN\",\n // \"orderStatus\": \"Filled\",\n // \"updateTimeStamp\": \"1692769133267\",\n // \"takeProfit\": \"0.0000\",\n // \"cumExecValue\": \"259.6830\",\n // \"createdAt\": \"1692769133261\",\n // \"blockTradeId\": \"\",\n // \"orderPnl\": \"\",\n // \"price\": \"24674.7\",\n // \"tpTriggerBy\": \"UNKNOWN\",\n // \"timeInForce\": \"ImmediateOrCancel\",\n // \"updatedAt\": \"1692769133267\",\n // \"basePrice\": \"0.0\",\n // \"realisedPnl\": \"0.0000\",\n // \"side\": \"Sell\",\n // \"triggerPrice\": \"0.0\",\n // \"cumExecFee\": \"0.1429\",\n // \"leavesQty\": \"0.000\",\n // \"cashFlow\": \"\",\n // \"slTriggerBy\": \"UNKNOWN\",\n // \"iv\": \"\",\n // \"closeOnTrigger\": \"UNKNOWN\",\n // \"cumExecQty\": \"0.010\",\n // \"reduceOnly\": 0,\n // \"qty\": \"0.010\",\n // \"stopLoss\": \"0.0000\",\n // \"triggerBy\": \"UNKNOWN\",\n // \"orderIM\": \"\"\n // }\n //\n // v5\n // {\n // \"orderId\": \"14bad3a1-6454-43d8-bcf2-5345896cf74d\",\n // \"orderLinkId\": \"YLxaWKMiHU\",\n // \"blockTradeId\": \"\",\n // \"symbol\": \"BTCUSDT\",\n // \"price\": \"26864.40\",\n // \"qty\": \"0.003\",\n // \"side\": \"Buy\",\n // \"isLeverage\": \"\",\n // \"positionIdx\": 1,\n // \"orderStatus\": \"Cancelled\",\n // \"cancelType\": \"UNKNOWN\",\n // \"rejectReason\": \"EC_PostOnlyWillTakeLiquidity\",\n // \"avgPrice\": \"0\",\n // \"leavesQty\": \"0.000\",\n // \"leavesValue\": \"0\",\n // \"cumExecQty\": \"0.000\",\n // \"cumExecValue\": \"0\",\n // \"cumExecFee\": \"0\",\n // \"timeInForce\": \"PostOnly\",\n // \"orderType\": \"Limit\",\n // \"stopOrderType\": \"UNKNOWN\",\n // \"orderIv\": \"\",\n // \"triggerPrice\": \"0.00\",\n // \"takeProfit\": \"0.00\",\n // \"stopLoss\": \"0.00\",\n // \"tpTriggerBy\": \"UNKNOWN\",\n // \"slTriggerBy\": \"UNKNOWN\",\n // \"triggerDirection\": 0,\n // \"triggerBy\": \"UNKNOWN\",\n // \"lastPriceOnCreated\": \"0.00\",\n // \"reduceOnly\": false,\n // \"closeOnTrigger\": false,\n // \"smpType\": \"None\",\n // \"smpGroup\": 0,\n // \"smpOrderId\": \"\",\n // \"tpslMode\": \"\",\n // \"tpLimitPrice\": \"\",\n // \"slLimitPrice\": \"\",\n // \"placeType\": \"\",\n // \"createdTime\": \"1684476068369\",\n // \"updatedTime\": \"1684476068372\"\n // }\n // createOrders failed order\n // {\n // \"category\": \"linear\",\n // \"symbol\": \"LTCUSDT\",\n // \"orderId\": '',\n // \"orderLinkId\": '',\n // \"createAt\": '',\n // \"code\": \"10001\",\n // \"msg\": \"The number of contracts exceeds maximum limit allowed: too large\"\n // }\n //\n const code = this.safeString(order, 'code');\n if (code !== undefined) {\n if (code !== '0') {\n const category = this.safeString(order, 'category');\n const inferedMarketType = (category === 'spot') ? 'spot' : 'contract';\n return this.safeOrder({\n 'info': order,\n 'status': 'rejected',\n 'id': this.safeString(order, 'orderId'),\n 'clientOrderId': this.safeString(order, 'orderLinkId'),\n 'symbol': this.safeSymbol(this.safeString(order, 'symbol'), undefined, undefined, inferedMarketType),\n });\n }\n }\n const marketId = this.safeString(order, 'symbol');\n const isContract = ('tpslMode' in order);\n let marketType = undefined;\n if (market !== undefined) {\n marketType = market['type'];\n }\n else {\n marketType = isContract ? 'contract' : 'spot';\n }\n market = this.safeMarket(marketId, market, undefined, marketType);\n const symbol = market['symbol'];\n const timestamp = this.safeInteger2(order, 'createdTime', 'createdAt');\n const id = this.safeString(order, 'orderId');\n const type = this.safeStringLower(order, 'orderType');\n const price = this.safeString(order, 'price');\n const cost = this.safeString(order, 'cumExecValue');\n const filled = this.safeString(order, 'cumExecQty');\n const remaining = this.safeString(order, 'leavesQty');\n const lastTradeTimestamp = this.safeInteger2(order, 'updatedTime', 'updatedAt');\n const rawStatus = this.safeString(order, 'orderStatus');\n const status = this.parseOrderStatus(rawStatus);\n const side = this.safeStringLower(order, 'side');\n let amount = this.safeString(order, 'qty');\n const avgPrice = this.omitZero(this.safeString(order, 'avgPrice'));\n if (side === 'buy') {\n amount = Precise.stringDiv(amount, avgPrice);\n }\n let fee = undefined;\n const feeCostString = this.safeString(order, 'cumExecFee');\n if (feeCostString !== undefined) {\n let feeCurrencyCode = undefined;\n if (market['spot']) {\n if (Precise.stringGt(feeCostString, '0')) {\n if (side === 'buy') {\n feeCurrencyCode = market['base'];\n }\n else {\n feeCurrencyCode = market['quote'];\n }\n }\n else {\n if (side === 'buy') {\n feeCurrencyCode = market['quote'];\n }\n else {\n feeCurrencyCode = market['base'];\n }\n }\n }\n else {\n feeCurrencyCode = market['inverse'] ? market['base'] : market['settle'];\n }\n fee = {\n 'cost': feeCostString,\n 'currency': feeCurrencyCode,\n };\n }\n let clientOrderId = this.safeString(order, 'orderLinkId');\n if ((clientOrderId !== undefined) && (clientOrderId.length < 1)) {\n clientOrderId = undefined;\n }\n const rawTimeInForce = this.safeString(order, 'timeInForce');\n const timeInForce = this.parseTimeInForce(rawTimeInForce);\n const stopPrice = this.omitZero(this.safeString(order, 'triggerPrice'));\n const reduceOnly = this.safeValue(order, 'reduceOnly');\n let takeProfitPrice = this.omitZero(this.safeString(order, 'takeProfit'));\n let stopLossPrice = this.omitZero(this.safeString(order, 'stopLoss'));\n const triggerDirection = this.safeString(order, 'triggerDirection');\n const isAscending = (triggerDirection === '1');\n const isStopOrderType2 = (stopPrice !== undefined) && reduceOnly;\n if ((stopLossPrice === undefined) && isStopOrderType2) {\n // check if order is stop order type 2 - stopLossPrice\n if (isAscending && (side === 'buy')) {\n // stopLoss order against short position\n stopLossPrice = stopPrice;\n }\n if (!isAscending && (side === 'sell')) {\n // stopLoss order against a long position\n stopLossPrice = stopPrice;\n }\n }\n if ((takeProfitPrice === undefined) && isStopOrderType2) {\n // check if order is stop order type 2 - takeProfitPrice\n if (isAscending && (side === 'sell')) {\n // takeprofit order against a long position\n takeProfitPrice = stopPrice;\n }\n if (!isAscending && (side === 'buy')) {\n // takeprofit order against a short position\n takeProfitPrice = stopPrice;\n }\n }\n return this.safeOrder({\n 'info': order,\n 'id': id,\n 'clientOrderId': clientOrderId,\n 'timestamp': timestamp,\n 'datetime': this.iso8601(timestamp),\n 'lastTradeTimestamp': lastTradeTimestamp,\n 'lastUpdateTimestamp': lastTradeTimestamp,\n 'symbol': symbol,\n 'type': type,\n 'timeInForce': timeInForce,\n 'postOnly': undefined,\n 'reduceOnly': this.safeValue(order, 'reduceOnly'),\n 'side': side,\n 'price': price,\n 'stopPrice': stopPrice,\n 'triggerPrice': stopPrice,\n 'takeProfitPrice': takeProfitPrice,\n 'stopLossPrice': stopLossPrice,\n 'amount': amount,\n 'cost': cost,\n 'average': avgPrice,\n 'filled': filled,\n 'remaining': remaining,\n 'status': status,\n 'fee': fee,\n 'trades': undefined,\n }, market);\n }\n async fetchOrder(id, symbol = undefined, params = {}) {\n /**\n * @method\n * @name bybit#fetchOrder\n * @description fetches information on an order made by the user\n * @see https://bybit-exchange.github.io/docs/v5/order/order-list\n * @param {string} symbol unified symbol of the market the order was made in\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} An [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n if (symbol === undefined) {\n throw new InvalidParamsError('fetchOrder() requires a symbol argument').exchange(this.id);\n }\n await this.loadMarkets();\n const request = {\n 'orderId': id,\n };\n const result = await this.fetchOrders(symbol, undefined, undefined, this.extend(request, params));\n const length = result.length;\n if (length === 0) {\n const openOrders = await this.fetchOpenOrders(symbol, undefined, undefined, params);\n const openOrder = openOrders.find((order) => order['id'] === id);\n if (openOrder !== undefined) {\n return openOrder;\n }\n const isTrigger = this.safeBoolN(params, ['trigger', 'stop'], false);\n const extra = isTrigger ? '' : 'If you are trying to fetch SL/TP conditional order, you might try setting params[\"trigger\"] = true';\n throw new OrderNotFoundError().addMessage('Order ' + id.toString() + ' was not found.' + extra);\n }\n if (length > 1) {\n throw new TradeError().addMessage(this.id + ' returned more than one order').exchange(this.id);\n }\n return this.safeValue(result, 0);\n }\n async createMarketBuyOrderWithCost(symbol, cost, params = {}) {\n /**\n * @method\n * @name bybit#createMarketBuyOrderWithCost\n * @see https://bybit-exchange.github.io/docs/v5/order/create-order\n * @description create a market buy order by providing the symbol and cost\n * @param {string} symbol unified symbol of the market to create an order in\n * @param {float} cost how much you want to trade in units of the quote currency\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n await this.loadMarkets();\n const market = this.market(symbol);\n if (!market['spot']) {\n throw new MarketTypeNotSupportedError(market['type']).addMessage('createMarketBuyOrderWithCost() supports spot orders only').exchange(this.id);\n }\n return await this.createOrder(symbol, 'market', 'buy', cost, 1, params);\n }\n async createMarketSellOrderWithCost(symbol, cost, params = {}) {\n /**\n * @method\n * @name bybit#createMarkeSellOrderWithCost\n * @see https://bybit-exchange.github.io/docs/v5/order/create-order\n * @description create a market sell order by providing the symbol and cost\n * @param {string} symbol unified symbol of the market to create an order in\n * @param {float} cost how much you want to trade in units of the quote currency\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n await this.loadMarkets();\n const types = await this.isUnifiedEnabled();\n const enableUnifiedAccount = types[1];\n if (!enableUnifiedAccount) {\n throw new TradeError().addMessage('createMarketSellOrderWithCost() supports UTA accounts only').exchange(this.id);\n }\n const market = this.market(symbol);\n if (!market['spot']) {\n throw new MarketTypeNotSupportedError(market['type']).addMessage('createMarketSellOrderWithCost() supports spot orders only').exchange(this.id);\n }\n return await this.createOrder(symbol, 'market', 'sell', cost, 1, params);\n }\n async createOrder(symbol, type, side, amount, price = undefined, params = {}) {\n /**\n * @method\n * @name bybit#createOrder\n * @description create a trade order\n * @see https://bybit-exchange.github.io/docs/v5/order/create-order\n * @see https://bybit-exchange.github.io/docs/v5/position/trading-stop\n * @param {string} symbol unified symbol of the market to create an order in\n * @param {string} type 'market' or 'limit'\n * @param {string} side 'buy' or 'sell'\n * @param {float} amount how much of currency you want to trade in units of base currency\n * @param {float} [price] the price at which the order is to be fullfilled, in units of the quote currency, ignored in market orders\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {string} [params.timeInForce] \"GTC\", \"IOC\", \"FOK\"\n * @param {bool} [params.postOnly] true or false whether the order is post-only\n * @param {bool} [params.reduceOnly] true or false whether the order is reduce-only\n * @param {string} [params.positionIdx] *contracts only* 0 for one-way mode, 1 buy side of hedged mode, 2 sell side of hedged mode\n * @param {boolean} [params.isLeverage] *unified spot only* false then spot trading true then margin trading\n * @param {string} [params.tpslMode] *contract only* 'full' or 'partial'\n * @param {string} [params.mmp] *option only* market maker protection\n * @param {string} [params.triggerDirection] *contract only* the direction for trigger orders, 'above' or 'below'\n * @param {float} [params.triggerPrice] The price at which a trigger order is triggered at\n * @param {float} [params.stopLossPrice] The price at which a stop loss order is triggered at\n * @param {float} [params.takeProfitPrice] The price at which a take profit order is triggered at\n * @param {object} [params.takeProfit] *takeProfit object in params* containing the triggerPrice at which the attached take profit order will be triggered\n * @param {float} [params.takeProfit.triggerPrice] take profit trigger price\n * @param {object} [params.stopLoss] *stopLoss object in params* containing the triggerPrice at which the attached stop loss order will be triggered\n * @param {float} [params.stopLoss.triggerPrice] stop loss trigger price\n * @param {string} [params.trailingAmount] the quote amount to trail away from the current market price\n * @param {string} [params.trailingTriggerPrice] the price to trigger a trailing order, default uses the price argument\n * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n await this.loadMarkets();\n const market = this.market(symbol);\n const [enableUnifiedMargin, enableUnifiedAccount] = await this.isUnifiedEnabled();\n const isUnifiedAccount = (enableUnifiedMargin || enableUnifiedAccount);\n const isUsdcSettled = market['settle'] === 'USDC';\n if (isUsdcSettled && !isUnifiedAccount) {\n return await this.createUsdcOrder(symbol, type, side, amount, price, params);\n }\n const trailingAmount = this.safeString2(params, 'trailingAmount', 'trailingStop');\n const isTrailingAmountOrder = trailingAmount !== undefined;\n const orderRequest = this.createOrderRequest(symbol, type, side, amount, price, params, enableUnifiedAccount);\n let response = undefined;\n if (isTrailingAmountOrder) {\n response = await this.privatePostV5PositionTradingStop(orderRequest);\n }\n else {\n response = await this.privatePostV5OrderCreate(orderRequest); // already extended inside createOrderRequest\n }\n //\n // {\n // \"retCode\": 0,\n // \"retMsg\": \"OK\",\n // \"result\": {\n // \"orderId\": \"1321003749386327552\",\n // \"orderLinkId\": \"spot-test-postonly\"\n // },\n // \"retExtInfo\": {},\n // \"time\": 1672211918471\n // }\n //\n const order = this.safeValue(response, 'result', {});\n return this.parseOrder(order, market);\n }\n createOrderRequest(symbol, type, side, amount, price = undefined, params = {}, isUTA = true) {\n const market = this.market(symbol);\n symbol = market['symbol'];\n const lowerCaseType = type.toLowerCase();\n if ((price === undefined) && (lowerCaseType === 'limit')) {\n throw new InvalidParamsError('createOrder requires a price argument for limit orders').exchange(this.id);\n }\n const request = {\n 'symbol': market['id'],\n 'side': this.capitalize(side),\n 'orderType': this.capitalize(lowerCaseType), // limit or market\n // 'timeInForce': 'GTC', // IOC, FOK, PostOnly\n // 'takeProfit': 123.45, // take profit price, only take effect upon opening the position\n // 'stopLoss': 123.45, // stop loss price, only take effect upon opening the position\n // 'reduceOnly': false, // reduce only, required for linear orders\n // when creating a closing order, bybit recommends a True value for\n // closeOnTrigger to avoid failing due to insufficient available margin\n // 'closeOnTrigger': false, required for linear orders\n // 'orderLinkId': 'string', // unique client order id, max 36 characters\n // 'triggerPrice': 123.46, // trigger price, required for conditional orders\n // 'triggerBy': 'MarkPrice', // IndexPrice, MarkPrice, LastPrice\n // 'tpTriggerby': 'MarkPrice', // IndexPrice, MarkPrice, LastPrice\n // 'slTriggerBy': 'MarkPrice', // IndexPrice, MarkPrice, LastPrice\n // 'mmp': false // market maker protection\n // 'positionIdx': 0, // Position mode. Unified account has one-way mode only (0)\n // 'triggerDirection': 1, // Conditional order param. Used to identify the expected direction of the conditional order. 1: triggered when market price rises to triggerPrice 2: triggered when market price falls to triggerPrice\n // Valid for spot only.\n // 'isLeverage': 0, // Whether to borrow. 0(default): false, 1: true\n // 'orderFilter': 'Order' // Order,tpslOrder. If not passed, Order by default\n // Valid for option only.\n // 'orderIv': '0', // Implied volatility; parameters are passed according to the real value; for example, for 10%, 0.1 is passed\n };\n if (market['spot']) {\n request['category'] = 'spot';\n }\n else if (market['linear']) {\n request['category'] = 'linear';\n }\n else if (market['inverse']) {\n request['category'] = 'inverse';\n }\n else if (market['option']) {\n request['category'] = 'option';\n }\n const cost = this.safeString(params, 'cost');\n params = this.omit(params, 'cost');\n if (market['spot'] && (lowerCaseType === 'market') && (side === 'sell') && isUTA) {\n request['marketUnit'] = 'baseCoin';\n request['qty'] = this.amountToPrecision(symbol, amount);\n }\n else if (market['spot'] && (lowerCaseType === 'market') && (side === 'buy')) {\n // classic accounts\n // for market buy it requires the amount of quote currency to spend\n let createMarketBuyOrderRequiresPrice = true;\n [createMarketBuyOrderRequiresPrice, params] = this.handleOptionAndParams(params, 'createOrder', 'createMarketBuyOrderRequiresPrice', true);\n if (createMarketBuyOrderRequiresPrice) {\n if ((price === undefined) && (cost === undefined)) {\n throw new InvalidParamsError('createOrder() requires the price argument for market buy orders to calculate the total cost to spend (amount * price), alternatively set the createMarketBuyOrderRequiresPrice option or param to false and pass the cost to spend in the amount argument')\n .exchange(this.id);\n }\n else {\n const amountString = this.numberToString(amount);\n const priceString = this.numberToString(price);\n const quoteAmount = Precise.stringMul(amountString, priceString);\n const costRequest = (cost !== undefined) ? cost : quoteAmount;\n request['qty'] = this.costToPrecision(symbol, costRequest);\n }\n }\n else {\n request['qty'] = this.costToPrecision(symbol, amount);\n }\n }\n else {\n request['qty'] = this.amountToPrecision(symbol, amount);\n }\n const isMarket = lowerCaseType === 'market';\n const isLimit = lowerCaseType === 'limit';\n if (isLimit) {\n request['price'] = this.priceToPrecision(symbol, price);\n }\n const timeInForce = this.safeStringLower(params, 'timeInForce'); // this is same as exchange specific param\n let postOnly = undefined;\n [postOnly, params] = this.handlePostOnly(isMarket, timeInForce === 'postonly', params);\n if (postOnly) {\n request['timeInForce'] = 'PostOnly';\n }\n else if (timeInForce === 'gtc') {\n request['timeInForce'] = 'GTC';\n }\n else if (timeInForce === 'fok') {\n request['timeInForce'] = 'FOK';\n }\n else if (timeInForce === 'ioc') {\n request['timeInForce'] = 'IOC';\n }\n let triggerPrice = this.safeValue2(params, 'triggerPrice', 'stopPrice');\n const stopLossTriggerPrice = this.safeValue(params, 'stopLossPrice');\n const takeProfitTriggerPrice = this.safeValue(params, 'takeProfitPrice');\n const stopLoss = this.safeValue(params, 'stopLoss');\n const takeProfit = this.safeValue(params, 'takeProfit');\n const trailingTriggerPrice = this.safeString2(params, 'trailingTriggerPrice', 'activePrice', this.numberToString(price));\n const trailingAmount = this.safeString2(params, 'trailingAmount', 'trailingStop');\n const isTrailingAmountOrder = trailingAmount !== undefined;\n const isStopLossTriggerOrder = stopLossTriggerPrice !== undefined;\n const isTakeProfitTriggerOrder = takeProfitTriggerPrice !== undefined;\n const isStopLoss = stopLoss !== undefined;\n const isTakeProfit = takeProfit !== undefined;\n const isBuy = side === 'buy';\n if (isTrailingAmountOrder) {\n if (trailingTriggerPrice !== undefined) {\n request['activePrice'] = this.priceToPrecision(symbol, trailingTriggerPrice);\n }\n request['trailingStop'] = trailingAmount;\n }\n else if (triggerPrice !== undefined) {\n const triggerDirection = this.safeString(params, 'triggerDirection');\n params = this.omit(params, ['triggerPrice', 'stopPrice', 'triggerDirection']);\n if (market['spot']) {\n if (triggerDirection !== undefined) {\n throw new InvalidParamsError('createOrder() : trigger order does not support triggerDirection for spot markets yet').exchange(this.id);\n }\n }\n else {\n if (triggerDirection === undefined) {\n throw new InvalidParamsError('stop/trigger orders require a triggerDirection parameter, either \"above\" or \"below\" to determine the direction of the trigger.').exchange(this.id);\n }\n const isAsending = ((triggerDirection === 'above') || (triggerDirection === '1'));\n request['triggerDirection'] = isAsending ? 1 : 2;\n }\n request['triggerPrice'] = this.priceToPrecision(symbol, triggerPrice);\n }\n else if (isStopLossTriggerOrder || isTakeProfitTriggerOrder) {\n if (isBuy) {\n request['triggerDirection'] = isStopLossTriggerOrder ? 1 : 2;\n }\n else {\n request['triggerDirection'] = isStopLossTriggerOrder ? 2 : 1;\n }\n triggerPrice = isStopLossTriggerOrder ? stopLossTriggerPrice : takeProfitTriggerPrice;\n request['triggerPrice'] = this.priceToPrecision(symbol, triggerPrice);\n request['reduceOnly'] = true;\n }\n if (isStopLoss || isTakeProfit) {\n if (isStopLoss) {\n const slTriggerPrice = this.safeValue2(stopLoss, 'triggerPrice', 'stopPrice', stopLoss);\n request['stopLoss'] = this.priceToPrecision(symbol, slTriggerPrice);\n const slLimitPrice = this.safeValue(stopLoss, 'price');\n if (slLimitPrice !== undefined) {\n request['tpslMode'] = 'Partial';\n request['slOrderType'] = 'Limit';\n request['slLimitPrice'] = this.priceToPrecision(symbol, slLimitPrice);\n }\n }\n if (isTakeProfit) {\n const tpTriggerPrice = this.safeValue2(takeProfit, 'triggerPrice', 'stopPrice', takeProfit);\n request['takeProfit'] = this.priceToPrecision(symbol, tpTriggerPrice);\n const tpLimitPrice = this.safeValue(takeProfit, 'price');\n if (tpLimitPrice !== undefined) {\n request['tpslMode'] = 'Partial';\n request['tpOrderType'] = 'Limit';\n request['tpLimitPrice'] = this.priceToPrecision(symbol, tpLimitPrice);\n }\n }\n }\n if (market['spot']) {\n // only works for spot market\n if (triggerPrice !== undefined) {\n request['orderFilter'] = 'StopOrder';\n }\n else if (stopLossTriggerPrice !== undefined || takeProfitTriggerPrice !== undefined || isStopLoss || isTakeProfit) {\n request['orderFilter'] = 'tpslOrder';\n }\n }\n const clientOrderId = this.safeString(params, 'clientOrderId');\n if (clientOrderId !== undefined) {\n request['orderLinkId'] = clientOrderId;\n }\n else if (market['option']) {\n // mandatory field for options\n request['orderLinkId'] = this.uuid16();\n }\n params = this.omit(params, ['stopPrice', 'timeInForce', 'stopLossPrice', 'takeProfitPrice', 'postOnly', 'clientOrderId', 'triggerPrice', 'stopLoss', 'takeProfit', 'trailingAmount', 'trailingTriggerPrice']);\n return this.extend(request, params);\n }\n async createOrders(orders, params = {}) {\n /**\n * @method\n * @name bybit#createOrders\n * @description create a list of trade orders\n * @see https://bybit-exchange.github.io/docs/v5/order/batch-place\n * @param {Array} orders list of orders to create, each object should contain the parameters required by createOrder, namely symbol, type, side, amount, price and params\n * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n await this.loadMarkets();\n const accounts = await this.isUnifiedEnabled();\n const isUta = accounts[1];\n const ordersRequests = [];\n const orderSymbols = [];\n for (let i = 0; i < orders.length; i++) {\n const rawOrder = orders[i];\n const marketId = this.safeString(rawOrder, 'symbol');\n orderSymbols.push(marketId);\n const type = this.safeString(rawOrder, 'type');\n const side = this.safeString(rawOrder, 'side');\n const amount = this.safeValue(rawOrder, 'amount');\n const price = this.safeValue(rawOrder, 'price');\n const orderParams = this.safeValue(rawOrder, 'params', {});\n const orderRequest = this.createOrderRequest(marketId, type, side, amount, price, orderParams, isUta);\n ordersRequests.push(orderRequest);\n }\n const symbols = this.marketSymbols(orderSymbols, undefined, false, true, true);\n const market = this.market(symbols[0]);\n let category = undefined;\n [category, params] = this.getBybitType('createOrders', market, params);\n if ((category === 'spot') || (category === 'inverse')) {\n throw new InvalidParamsError('createOrders does not allow spot or inverse orders').exchange(this.id);\n }\n const request = {\n 'category': category,\n 'request': ordersRequests,\n };\n const response = await this.privatePostV5OrderCreateBatch(this.extend(request, params));\n const result = this.safeValue(response, 'result', {});\n const data = this.safeValue(result, 'list', []);\n const retInfo = this.safeValue(response, 'retExtInfo', {});\n const codes = this.safeValue(retInfo, 'list', []);\n // extend the error with the unsuccessful orders\n for (let i = 0; i < codes.length; i++) {\n const code = codes[i];\n const retCode = this.safeInteger(code, 'code');\n if (retCode !== 0) {\n data[i] = this.extend(data[i], code);\n }\n }\n //\n // {\n // \"retCode\":0,\n // \"retMsg\":\"OK\",\n // \"result\":{\n // \"list\":[\n // {\n // \"category\":\"linear\",\n // \"symbol\":\"LTCUSDT\",\n // \"orderId\":\"\",\n // \"orderLinkId\":\"\",\n // \"createAt\":\"\"\n // },\n // {\n // \"category\":\"linear\",\n // \"symbol\":\"LTCUSDT\",\n // \"orderId\":\"3c9f65b6-01ad-4ac0-9741-df17e02a4223\",\n // \"orderLinkId\":\"\",\n // \"createAt\":\"1698075516029\"\n // }\n // ]\n // },\n // \"retExtInfo\":{\n // \"list\":[\n // {\n // \"code\":10001,\n // \"msg\":\"The number of contracts exceeds maximum limit allowed: too large\"\n // },\n // {\n // \"code\":0,\n // \"msg\":\"OK\"\n // }\n // ]\n // },\n // \"time\":1698075516029\n // }\n //\n return this.parseOrders(data);\n }\n async createUsdcOrder(symbol, type, side, amount, price = undefined, params = {}) {\n await this.loadMarkets();\n const market = this.market(symbol);\n if (type === 'market') {\n throw new TradeError().addMessage('createOrder does not allow market orders for ' + symbol + ' markets').exchange(this.id);\n }\n const lowerCaseType = type.toLowerCase();\n if ((price === undefined) && (lowerCaseType === 'limit')) {\n throw new InvalidParamsError('createOrder requires a price argument for limit orders').exchange(this.id);\n }\n const request = {\n 'symbol': market['id'],\n 'side': this.capitalize(side),\n 'orderType': this.capitalize(lowerCaseType),\n 'timeInForce': 'GoodTillCancel',\n 'orderQty': this.amountToPrecision(symbol, amount),\n // 'takeProfit': 123.45, // take profit price, only take effect upon opening the position\n // 'stopLoss': 123.45, // stop loss price, only take effect upon opening the position\n // 'reduceOnly': false, // reduce only, required for linear orders\n // when creating a closing order, bybit recommends a True value for\n // closeOnTrigger to avoid failing due to insufficient available margin\n // 'closeOnTrigger': false, required for linear orders\n // 'orderLinkId': 'string', // unique client order id, max 36 characters\n // 'triggerPrice': 123.45, // trigger price, required for conditional orders\n // 'trigger_by': 'MarkPrice', // IndexPrice, MarkPrice\n // 'tptriggerby': 'MarkPrice', // IndexPrice, MarkPrice\n // 'slTriggerBy': 'MarkPrice', // IndexPrice, MarkPrice\n // 'orderFilter': 'Order' or 'StopOrder'\n // 'mmp': false // market maker protection\n };\n const isMarket = lowerCaseType === 'market';\n const isLimit = lowerCaseType === 'limit';\n if (isLimit !== undefined) {\n request['orderPrice'] = this.priceToPrecision(symbol, price);\n }\n const exchangeSpecificParam = this.safeString(params, 'time_in_force');\n const timeInForce = this.safeStringLower(params, 'timeInForce');\n const postOnly = this.isPostOnly(isMarket, exchangeSpecificParam === 'PostOnly', params);\n if (postOnly) {\n request['time_in_force'] = 'PostOnly';\n }\n else if (timeInForce === 'gtc') {\n request['time_in_force'] = 'GoodTillCancel';\n }\n else if (timeInForce === 'fok') {\n request['time_in_force'] = 'FillOrKill';\n }\n else if (timeInForce === 'ioc') {\n request['time_in_force'] = 'ImmediateOrCancel';\n }\n if (market['swap']) {\n const triggerPrice = this.safeValue2(params, 'stopPrice', 'triggerPrice');\n const stopLossTriggerPrice = this.safeValue(params, 'stopLossPrice', triggerPrice);\n const takeProfitTriggerPrice = this.safeValue(params, 'takeProfitPrice');\n const stopLoss = this.safeValue(params, 'stopLoss');\n const takeProfit = this.safeValue(params, 'takeProfit');\n const isStopLossTriggerOrder = stopLossTriggerPrice !== undefined;\n const isTakeProfitTriggerOrder = takeProfitTriggerPrice !== undefined;\n const isStopLoss = stopLoss !== undefined;\n const isTakeProfit = takeProfit !== undefined;\n const isStopOrder = isStopLossTriggerOrder || isTakeProfitTriggerOrder;\n if (isStopOrder) {\n request['orderFilter'] = 'StopOrder';\n request['trigger_by'] = 'LastPrice';\n const stopPx = isStopLossTriggerOrder ? stopLossTriggerPrice : takeProfitTriggerPrice;\n const preciseStopPrice = this.priceToPrecision(symbol, stopPx);\n request['triggerPrice'] = preciseStopPrice;\n const delta = this.numberToString(market['precision']['price']);\n request['basePrice'] = isStopLossTriggerOrder ? Precise.stringSub(preciseStopPrice, delta) : Precise.stringAdd(preciseStopPrice, delta);\n }\n else if (isStopLoss || isTakeProfit) {\n if (isStopLoss) {\n const slTriggerPrice = this.safeValue2(stopLoss, 'triggerPrice', 'stopPrice', stopLoss);\n request['stopLoss'] = this.priceToPrecision(symbol, slTriggerPrice);\n }\n if (isTakeProfit) {\n const tpTriggerPrice = this.safeValue2(takeProfit, 'triggerPrice', 'stopPrice', takeProfit);\n request['takeProfit'] = this.priceToPrecision(symbol, tpTriggerPrice);\n }\n }\n else {\n request['orderFilter'] = 'Order';\n }\n }\n const clientOrderId = this.safeString(params, 'clientOrderId');\n if (clientOrderId !== undefined) {\n request['orderLinkId'] = clientOrderId;\n }\n else if (market['option']) {\n // mandatory field for options\n request['orderLinkId'] = this.uuid16();\n }\n params = this.omit(params, ['stopPrice', 'timeInForce', 'triggerPrice', 'stopLossPrice', 'takeProfitPrice', 'postOnly', 'clientOrderId']);\n let response = undefined;\n if (market['option']) {\n response = await this.privatePostOptionUsdcOpenapiPrivateV1PlaceOrder(this.extend(request, params));\n }\n else {\n response = await this.privatePostPerpetualUsdcOpenapiPrivateV1PlaceOrder(this.extend(request, params));\n }\n //\n // {\n // \"retCode\":0,\n // \"retMsg\":\"\",\n // \"result\":{\n // \"orderId\":\"34450a59-325e-4296-8af0-63c7c524ae33\",\n // \"orderLinkId\":\"\",\n // \"mmp\":false,\n // \"symbol\":\"BTCPERP\",\n // \"orderType\":\"Limit\",\n // \"side\":\"Buy\",\n // \"orderQty\":\"0.00100000\",\n // \"orderPrice\":\"20000.00\",\n // \"iv\":\"0\",\n // \"timeInForce\":\"GoodTillCancel\",\n // \"orderStatus\":\"Created\",\n // \"createdAt\":\"1652261746007873\",\n // \"basePrice\":\"0.00\",\n // \"triggerPrice\":\"0.00\",\n // \"takeProfit\":\"0.00\",\n // \"stopLoss\":\"0.00\",\n // \"slTriggerBy\":\"UNKNOWN\",\n // \"tpTriggerBy\":\"UNKNOWN\"\n // }\n //\n const order = this.safeValue(response, 'result', {});\n return this.parseOrder(order, market);\n }\n async editUsdcOrder(id, symbol, type, side, amount = undefined, price = undefined, params = {}) {\n await this.loadMarkets();\n const market = this.market(symbol);\n const request = {\n 'symbol': market['id'],\n 'orderId': id,\n };\n if (amount !== undefined) {\n request['orderQty'] = this.amountToPrecision(symbol, amount);\n }\n if (price !== undefined) {\n request['orderPrice'] = this.priceToPrecision(symbol, price);\n }\n let response = undefined;\n if (market['option']) {\n response = await this.privatePostOptionUsdcOpenapiPrivateV1ReplaceOrder(this.extend(request, params));\n }\n else {\n const isStop = this.safeValue2(params, 'stop', 'trigger', false);\n const triggerPrice = this.safeValue2(params, 'stopPrice', 'triggerPrice');\n const stopLossPrice = this.safeValue(params, 'stopLossPrice');\n const isStopLossOrder = stopLossPrice !== undefined;\n const takeProfitPrice = this.safeValue(params, 'takeProfitPrice');\n const isTakeProfitOrder = takeProfitPrice !== undefined;\n const isStopOrder = isStopLossOrder || isTakeProfitOrder || isStop;\n if (isStopOrder) {\n request['orderFilter'] = isStop ? 'StopOrder' : 'Order';\n if (triggerPrice !== undefined) {\n request['triggerPrice'] = this.priceToPrecision(symbol, triggerPrice);\n }\n if (stopLossPrice !== undefined) {\n request['stopLoss'] = this.priceToPrecision(symbol, stopLossPrice);\n }\n if (takeProfitPrice !== undefined) {\n request['takeProfit'] = this.priceToPrecision(symbol, takeProfitPrice);\n }\n }\n params = this.omit(params, ['stop', 'stopPrice', 'triggerPrice', 'stopLossPrice', 'takeProfitPrice']);\n response = await this.privatePostPerpetualUsdcOpenapiPrivateV1ReplaceOrder(this.extend(request, params));\n }\n //\n // {\n // \"retCode\": 0,\n // \"retMsg\": \"OK\",\n // \"result\": {\n // \"outRequestId\": \"\",\n // \"symbol\": \"BTC-13MAY22-40000-C\",\n // \"orderId\": \"8c65df91-91fc-461d-9b14-786379ef138c\",\n // \"orderLinkId\": \"AAAAA41133\"\n // },\n // \"retExtMap\": {}\n // }\n //\n const result = this.safeValue(response, 'result', {});\n return this.parseOrder(result, market);\n }\n async editOrder(id, symbol, type, side, amount = undefined, price = undefined, params = {}) {\n /**\n * @method\n * @name bybit#editOrder\n * @description edit a trade order\n * @see https://bybit-exchange.github.io/docs/v5/order/amend-order\n * @see https://bybit-exchange.github.io/docs/derivatives/unified/replace-order\n * @see https://bybit-exchange.github.io/docs/api-explorer/derivatives/trade/contract/replace-order\n * @param {string} id cancel order id\n * @param {string} symbol unified symbol of the market to create an order in\n * @param {string} type 'market' or 'limit'\n * @param {string} side 'buy' or 'sell'\n * @param {float} amount how much of currency you want to trade in units of base currency\n * @param {float} price the price at which the order is to be fullfilled, in units of the base currency, ignored in market orders\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {float} [params.triggerPrice] The price that a trigger order is triggered at\n * @param {float} [params.stopLossPrice] The price that a stop loss order is triggered at\n * @param {float} [params.takeProfitPrice] The price that a take profit order is triggered at\n * @param {object} [params.takeProfit] *takeProfit object in params* containing the triggerPrice that the attached take profit order will be triggered\n * @param {float} [params.takeProfit.triggerPrice] take profit trigger price\n * @param {object} [params.stopLoss] *stopLoss object in params* containing the triggerPrice that the attached stop loss order will be triggered\n * @param {float} [params.stopLoss.triggerPrice] stop loss trigger price\n * @param {string} [params.triggerBy] 'IndexPrice', 'MarkPrice' or 'LastPrice', default is 'LastPrice', required if no initial value for triggerPrice\n * @param {string} [params.slTriggerBy] 'IndexPrice', 'MarkPrice' or 'LastPrice', default is 'LastPrice', required if no initial value for stopLoss\n * @param {string} [params.tpTriggerby] 'IndexPrice', 'MarkPrice' or 'LastPrice', default is 'LastPrice', required if no initial value for takeProfit\n * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n if (symbol === undefined) {\n throw new InvalidParamsError('editOrder() requires a symbol argument').exchange(this.id);\n }\n await this.loadMarkets();\n const market = this.market(symbol);\n const [enableUnifiedMargin, enableUnifiedAccount] = await this.isUnifiedEnabled();\n const isUnifiedAccount = (enableUnifiedMargin || enableUnifiedAccount);\n const isUsdcSettled = market['settle'] === 'USDC';\n if (isUsdcSettled && !isUnifiedAccount) {\n return await this.editUsdcOrder(id, symbol, type, side, amount, price, params);\n }\n const request = {\n 'symbol': market['id'],\n 'orderId': id,\n // 'orderLinkId': 'string', // unique client order id, max 36 characters\n // 'takeProfit': 123.45, // take profit price, only take effect upon opening the position\n // 'stopLoss': 123.45, // stop loss price, only take effect upon opening the position\n // 'triggerPrice': 123.45, // trigger price, required for conditional orders\n // 'triggerBy': 'MarkPrice', // IndexPrice, MarkPrice, LastPrice\n // 'tpTriggerby': 'MarkPrice', // IndexPrice, MarkPrice, LastPrice\n // 'slTriggerBy': 'MarkPrice', // IndexPrice, MarkPrice, LastPrice\n // Valid for option only.\n // 'orderIv': '0', // Implied volatility; parameters are passed according to the real value; for example, for 10%, 0.1 is passed\n };\n if (market['spot']) {\n request['category'] = 'spot';\n }\n else if (market['linear']) {\n request['category'] = 'linear';\n }\n else if (market['inverse']) {\n request['category'] = 'inverse';\n }\n else if (market['option']) {\n request['category'] = 'option';\n }\n if (amount !== undefined) {\n request['qty'] = this.amountToPrecision(symbol, amount);\n }\n if (price !== undefined) {\n request['price'] = this.priceToPrecision(symbol, price);\n }\n if (amount !== undefined) {\n request['qty'] = this.amountToPrecision(symbol, amount);\n }\n let triggerPrice = this.safeString2(params, 'triggerPrice', 'stopPrice');\n const stopLossTriggerPrice = this.safeString(params, 'stopLossPrice');\n const takeProfitTriggerPrice = this.safeString(params, 'takeProfitPrice');\n const stopLoss = this.safeValue(params, 'stopLoss');\n const takeProfit = this.safeValue(params, 'takeProfit');\n const isStopLossTriggerOrder = stopLossTriggerPrice !== undefined;\n const isTakeProfitTriggerOrder = takeProfitTriggerPrice !== undefined;\n const isStopLoss = stopLoss !== undefined;\n const isTakeProfit = takeProfit !== undefined;\n if (isStopLossTriggerOrder || isTakeProfitTriggerOrder) {\n triggerPrice = isStopLossTriggerOrder ? stopLossTriggerPrice : takeProfitTriggerPrice;\n }\n if (triggerPrice !== undefined) {\n const triggerPriceRequest = (triggerPrice === '0') ? triggerPrice : this.priceToPrecision(symbol, triggerPrice);\n request['triggerPrice'] = triggerPriceRequest;\n const triggerBy = this.safeString(params, 'triggerBy', 'LastPrice');\n request['triggerBy'] = triggerBy;\n }\n if (isStopLoss || isTakeProfit) {\n if (isStopLoss) {\n const slTriggerPrice = this.safeString2(stopLoss, 'triggerPrice', 'stopPrice', stopLoss);\n const stopLossRequest = (slTriggerPrice === '0') ? slTriggerPrice : this.priceToPrecision(symbol, slTriggerPrice);\n request['stopLoss'] = stopLossRequest;\n const slTriggerBy = this.safeString(params, 'slTriggerBy', 'LastPrice');\n request['slTriggerBy'] = slTriggerBy;\n }\n if (isTakeProfit) {\n const tpTriggerPrice = this.safeString2(takeProfit, 'triggerPrice', 'stopPrice', takeProfit);\n const takeProfitRequest = (tpTriggerPrice === '0') ? tpTriggerPrice : this.priceToPrecision(symbol, tpTriggerPrice);\n request['takeProfit'] = takeProfitRequest;\n const tpTriggerBy = this.safeString(params, 'tpTriggerBy', 'LastPrice');\n request['tpTriggerBy'] = tpTriggerBy;\n }\n }\n const clientOrderId = this.safeString(params, 'clientOrderId');\n if (clientOrderId !== undefined) {\n request['orderLinkId'] = clientOrderId;\n }\n params = this.omit(params, ['stopPrice', 'stopLossPrice', 'takeProfitPrice', 'triggerPrice', 'clientOrderId', 'stopLoss', 'takeProfit']);\n const response = await this.privatePostV5OrderAmend(this.extend(request, params));\n //\n // {\n // \"retCode\": 0,\n // \"retMsg\": \"OK\",\n // \"result\": {\n // \"orderId\": \"c6f055d9-7f21-4079-913d-e6523a9cfffa\",\n // \"orderLinkId\": \"linear-004\"\n // },\n // \"retExtInfo\": {},\n // \"time\": 1672217093461\n // }\n //\n const result = this.safeValue(response, 'result', {});\n return this.safeOrder({\n 'info': response,\n 'id': this.safeString(result, 'orderId'),\n });\n }\n async cancelUsdcOrder(id, symbol = undefined, params = {}) {\n if (symbol === undefined) {\n throw new InvalidParamsError('cancelUsdcOrder() requires a symbol argument').exchange(this.id);\n }\n await this.loadMarkets();\n const market = this.market(symbol);\n const request = {\n 'symbol': market['id'],\n // 'orderLinkId': 'string', // one of order_id, stop_order_id or order_link_id is required\n // 'orderId': id,\n };\n const isStop = this.safeValue2(params, 'stop', 'trigger', false);\n params = this.omit(params, ['stop', 'trigger']);\n if (id !== undefined) { // The user can also use argument params[\"order_link_id\"]\n request['orderId'] = id;\n }\n let response = undefined;\n if (market['option']) {\n response = await this.privatePostOptionUsdcOpenapiPrivateV1CancelOrder(this.extend(request, params));\n }\n else {\n request['orderFilter'] = isStop ? 'StopOrder' : 'Order';\n response = await this.privatePostPerpetualUsdcOpenapiPrivateV1CancelOrder(this.extend(request, params));\n }\n //\n // {\n // \"retCode\": 0,\n // \"retMsg\": \"OK\",\n // \"result\": {\n // \"outRequestId\": \"\",\n // \"symbol\": \"BTC-13MAY22-40000-C\",\n // \"orderId\": \"8c65df91-91fc-461d-9b14-786379ef138c\",\n // \"orderLinkId\": \"\"\n // },\n // \"retExtMap\": {}\n // }\n //\n const result = this.safeValue(response, 'result', {});\n return this.parseOrder(result, market);\n }\n async cancelOrder(id, symbol = undefined, params = {}) {\n /**\n * @method\n * @name bybit#cancelOrder\n * @description cancels an open order\n * @see https://bybit-exchange.github.io/docs/v5/order/cancel-order\n * @param {string} id order id\n * @param {string} symbol unified symbol of the market the order was made in\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {boolean} [params.stop] *spot only* whether the order is a stop order\n * @param {string} [params.orderFilter] *spot only* 'Order' or 'StopOrder' or 'tpslOrder'\n * @returns {object} An [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n if (symbol === undefined) {\n throw new InvalidParamsError('cancelOrder() requires a symbol argument').exchange(this.id);\n }\n await this.loadMarkets();\n const market = this.market(symbol);\n const [enableUnifiedMargin, enableUnifiedAccount] = await this.isUnifiedEnabled();\n const isUnifiedAccount = (enableUnifiedMargin || enableUnifiedAccount);\n const isUsdcSettled = market['settle'] === 'USDC';\n if (isUsdcSettled && !isUnifiedAccount) {\n return await this.cancelUsdcOrder(id, symbol, params);\n }\n const request = {\n 'symbol': market['id'],\n // 'orderLinkId': 'string',\n // 'orderId': id,\n // conditional orders\n // 'orderFilter': '', // Valid for spot only. Order,tpslOrder. If not passed, Order by default\n };\n if (market['spot']) {\n // only works for spot market\n const isStop = this.safeValue2(params, 'stop', 'trigger', false);\n params = this.omit(params, ['stop', 'trigger']);\n request['orderFilter'] = isStop ? 'StopOrder' : 'Order';\n }\n if (id !== undefined) { // The user can also use argument params[\"orderLinkId\"]\n request['orderId'] = id;\n }\n if (market['spot']) {\n request['category'] = 'spot';\n }\n else if (market['linear']) {\n request['category'] = 'linear';\n }\n else if (market['inverse']) {\n request['category'] = 'inverse';\n }\n else if (market['option']) {\n request['category'] = 'option';\n }\n const response = await this.privatePostV5OrderCancel(this.extend(request, params));\n //\n // {\n // \"retCode\": 0,\n // \"retMsg\": \"OK\",\n // \"result\": {\n // \"orderId\": \"c6f055d9-7f21-4079-913d-e6523a9cfffa\",\n // \"orderLinkId\": \"linear-004\"\n // },\n // \"retExtInfo\": {},\n // \"time\": 1672217377164\n // }\n //\n const result = this.safeValue(response, 'result', {});\n return this.parseOrder(result, market);\n }\n async cancelAllUsdcOrders(symbol = undefined, params = {}) {\n if (symbol === undefined) {\n throw new InvalidParamsError('cancelAllUsdcOrders() requires a symbol argument').exchange(this.id);\n }\n await this.loadMarkets();\n const market = this.market(symbol);\n const request = {\n 'symbol': market['id'],\n };\n let response = undefined;\n if (market['option']) {\n response = await this.privatePostOptionUsdcOpenapiPrivateV1CancelAll(this.extend(request, params));\n }\n else {\n const isStop = this.safeValue2(params, 'stop', 'trigger', false);\n if (isStop) {\n request['orderFilter'] = 'StopOrder';\n }\n else {\n request['orderFilter'] = 'Order';\n }\n params = this.omit(params, ['stop', 'trigger']);\n response = await this.privatePostPerpetualUsdcOpenapiPrivateV1CancelAll(this.extend(request, params));\n }\n //\n // {\n // \"retCode\": 0,\n // \"retMsg\": \"OK\",\n // \"retExtMap\": {},\n // \"result\": [\n // {\n // \"outRequestId\": \"cancelAll-290119-1652176443114-0\",\n // \"symbol\": \"BTC-13MAY22-40000-C\",\n // \"orderId\": \"fa6cd740-56ed-477d-9385-90ccbfee49ca\",\n // \"orderLinkId\": \"\",\n // \"errorCode\": 0,\n // \"errorDesc\": \"\"\n // }\n // ]\n // }\n //\n const result = this.safeValue(response, 'result', []);\n if (!Array.isArray(result)) {\n return response;\n }\n return this.parseOrders(result, market);\n }\n async cancelAllOrders(symbol = undefined, params = {}) {\n /**\n * @method\n * @name bybit#cancelAllOrders\n * @description cancel all open orders\n * @see https://bybit-exchange.github.io/docs/v5/order/cancel-all\n * @param {string} symbol unified market symbol, only orders in the market of this symbol are cancelled when symbol is not undefined\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {boolean} [params.stop] true if stop order\n * @param {string} [params.type] market type, ['swap', 'option', 'spot']\n * @param {string} [params.subType] market subType, ['linear', 'inverse']\n * @param {string} [params.baseCoin] Base coin. Supports linear, inverse & option\n * @param {string} [params.settleCoin] Settle coin. Supports linear, inverse & option\n * @returns {object[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n await this.loadMarkets();\n const [enableUnifiedMargin, enableUnifiedAccount] = await this.isUnifiedEnabled();\n const isUnifiedAccount = (enableUnifiedMargin || enableUnifiedAccount);\n let market = undefined;\n const request = {};\n if (symbol !== undefined) {\n market = this.market(symbol);\n const isUsdcSettled = market['settle'] === 'USDC';\n if (isUsdcSettled && !isUnifiedAccount) {\n return await this.cancelAllUsdcOrders(symbol, params);\n }\n request['symbol'] = market['id'];\n }\n let type = undefined;\n [type, params] = this.getBybitType('cancelAllOrders', market, params);\n request['category'] = type;\n if ((type === 'option') && !isUnifiedAccount) {\n throw new MarketTypeNotSupportedError('type').addMessage('cancelAllOrders() Normal Account not support ' + type + ' market').exchange(this.id);\n }\n if ((type === 'linear') || (type === 'inverse')) {\n const baseCoin = this.safeString(params, 'baseCoin');\n if (symbol === undefined && baseCoin === undefined) {\n const defaultSettle = this.safeString(this.options, 'defaultSettle', 'USDT');\n request['settleCoin'] = this.safeString(params, 'settleCoin', defaultSettle);\n }\n }\n const isStop = this.safeValue2(params, 'stop', 'trigger', false);\n params = this.omit(params, ['stop', 'trigger']);\n if (isStop) {\n request['orderFilter'] = 'StopOrder';\n }\n const response = await this.privatePostV5OrderCancelAll(this.extend(request, params));\n //\n // linear / inverse / option\n // {\n // \"retCode\": 0,\n // \"retMsg\": \"OK\",\n // \"result\": {\n // \"list\": [\n // {\n // \"orderId\": \"f6a73e1f-39b5-4dee-af21-1460b2e3b27c\",\n // \"orderLinkId\": \"a001\"\n // }\n // ]\n // },\n // \"retExtInfo\": {},\n // \"time\": 1672219780463\n // }\n //\n // spot\n // {\n // \"retCode\": 0,\n // \"retMsg\": \"OK\",\n // \"result\": {\n // \"success\": \"1\"\n // },\n // \"retExtInfo\": {},\n // \"time\": 1676962409398\n // }\n //\n const result = this.safeValue(response, 'result', []);\n const orders = this.safeValue(result, 'list');\n if (!Array.isArray(orders)) {\n return response;\n }\n return this.parseOrders(orders, market);\n }\n async fetchUsdcOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {\n await this.loadMarkets();\n let market = undefined;\n const request = {\n // 'category': '', // Type. PERPETUAL, OPTION\n // 'symbol': '', // Contract name\n // 'baseCoin': '', // Base currency\n // 'orderId': '', // Order ID\n // 'orderLinkId': '', // Custom ID used for cross-platform strategy remarks; a max. of 32 characters\n // 'orderStatus': '', // Order status\n // 'orderFilter': '', // refer to Order Filter\n // 'direction': '', // prev: prev page, next: next page.\n // 'limit': 0, // Limit for data size per page, max size is 50. Default as showing 20 pieces of data per page\n // 'cursor': '', // API pass-through\n };\n if (symbol !== undefined) {\n market = this.market(symbol);\n request['symbol'] = market['id'];\n }\n let type = undefined;\n [type, params] = this.handleMarketTypeAndParams('fetchOrders', market, params);\n if (type === 'swap') {\n request['category'] = 'PERPETUAL';\n }\n else {\n request['category'] = 'OPTION';\n }\n const isStop = this.safeValue2(params, 'stop', 'trigger', false);\n params = this.omit(params, ['stop', 'trigger']);\n if (isStop) {\n request['orderFilter'] = 'StopOrder';\n }\n if (limit !== undefined) {\n request['limit'] = limit;\n }\n const response = await this.privatePostOptionUsdcOpenapiPrivateV1QueryOrderHistory(this.extend(request, params));\n //\n // {\n // \"result\": {\n // \"cursor\": \"640034d1-97ec-4382-9983-694898c03ba3%3A1640854950675%2C640034d1-97ec-4382-9983-694898c03ba3%3A1640854950675\",\n // \"resultTotalSize\": 1,\n // \"dataList\": [\n // {\n // \"symbol\": \"ETHPERP\",\n // \"orderType\": \"Limit\",\n // \"orderLinkId\": \"\",\n // \"orderId\": \"c04ad17d-ca85-45d1-859e-561e7236f6db\",\n // \"cancelType\": \"UNKNOWN\",\n // \"stopOrderType\": \"UNKNOWN\",\n // \"orderStatus\": \"Filled\",\n // \"updateTimeStamp\": \"1666178097006\",\n // \"takeProfit\": \"0.0000\",\n // \"cumExecValue\": \"12.9825\",\n // \"createdAt\": \"1666178096996\",\n // \"blockTradeId\": \"\",\n // \"orderPnl\": \"\",\n // \"price\": \"1300.0\",\n // \"tpTriggerBy\": \"UNKNOWN\",\n // \"timeInForce\": \"GoodTillCancel\",\n // \"updatedAt\": \"1666178097006\",\n // \"basePrice\": \"\",\n // \"realisedPnl\": \"0.0000\",\n // \"side\": \"Buy\",\n // \"triggerPrice\": \"0.0\",\n // \"cumExecFee\": \"0.0078\",\n // \"leavesQty\": \"0.000\",\n // \"cashFlow\": \"\",\n // \"slTriggerBy\": \"UNKNOWN\",\n // \"iv\": \"\",\n // \"closeOnTrigger\": \"UNKNOWN\",\n // \"cumExecQty\": \"0.010\",\n // \"reduceOnly\": 0,\n // \"qty\": \"0.010\",\n // \"stopLoss\": \"0.0000\",\n // \"triggerBy\": \"UNKNOWN\",\n // \"orderIM\": \"\"\n // }\n // ]\n // },\n // \"retCode\": 0,\n // \"retMsg\": \"Success.\"\n // }\n //\n const result = this.safeValue(response, 'result', {});\n const data = this.safeValue(result, 'dataList', []);\n return this.parseOrders(data, market, since, limit);\n }\n async fetchOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name bybit#fetchOrders\n * @description fetches information on multiple orders made by the user\n * @see https://bybit-exchange.github.io/docs/v5/order/order-list\n * @param {string} symbol unified market symbol of the market orders were made in\n * @param {int} [since] the earliest time in ms to fetch orders for\n * @param {int} [limit] the maximum number of order structures to retrieve\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {boolean} [params.stop] true if stop order\n * @param {string} [params.type] market type, ['swap', 'option', 'spot']\n * @param {string} [params.subType] market subType, ['linear', 'inverse']\n * @param {string} [params.orderFilter] 'Order' or 'StopOrder' or 'tpslOrder'\n * @param {int} [params.until] the latest time in ms to fetch entries for\n * @param {boolean} [params.paginate] default false, when true will automatically paginate by calling this endpoint multiple times. See in the docs all the [availble parameters](https://github.com/ccxt/ccxt/wiki/Manual#pagination-params)\n * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n await this.loadMarkets();\n let paginate = false;\n [paginate, params] = this.handleOptionAndParams(params, 'fetchOrders', 'paginate');\n if (paginate) {\n return await this.fetchPaginatedCallCursor('fetchOrders', symbol, since, limit, params, 'nextPageCursor', 'nextPageCursor', undefined, 50);\n }\n const [enableUnifiedMargin, enableUnifiedAccount] = await this.isUnifiedEnabled();\n const isUnifiedAccount = (enableUnifiedMargin || enableUnifiedAccount);\n const request = {};\n let market = undefined;\n let isUsdcSettled = false;\n if (symbol !== undefined) {\n market = this.market(symbol);\n isUsdcSettled = market['settle'] === 'USDC';\n request['symbol'] = market['id'];\n }\n let type = undefined;\n [type, params] = this.getBybitType('fetchOrders', market, params);\n if (((type === 'option') || isUsdcSettled) && !isUnifiedAccount) {\n return await this.fetchUsdcOrders(symbol, since, limit, params);\n }\n request['category'] = type;\n const isStop = this.safeBoolN(params, ['trigger', 'stop'], false);\n params = this.omit(params, ['trigger', 'stop']);\n if (isStop) {\n request['orderFilter'] = 'StopOrder';\n }\n if (limit !== undefined) {\n request['limit'] = limit;\n }\n if (since !== undefined) {\n request['startTime'] = since;\n }\n const until = this.safeInteger2(params, 'until', 'till'); // unified in milliseconds\n const endTime = this.safeInteger(params, 'endTime', until); // exchange-specific in milliseconds\n params = this.omit(params, ['endTime', 'till', 'until']);\n if (endTime !== undefined) {\n request['endTime'] = endTime;\n }\n const response = await this.privateGetV5OrderHistory(this.extend(request, params));\n //\n // {\n // \"retCode\": 0,\n // \"retMsg\": \"OK\",\n // \"result\": {\n // \"nextPageCursor\": \"03234de9-1332-41eb-b805-4a9f42c136a3%3A1672220109387%2C03234de9-1332-41eb-b805-4a9f42c136a3%3A1672220109387\",\n // \"category\": \"linear\",\n // \"list\": [\n // {\n // \"symbol\": \"BTCUSDT\",\n // \"orderType\": \"Limit\",\n // \"orderLinkId\": \"test-001\",\n // \"orderId\": \"03234de9-1332-41eb-b805-4a9f42c136a3\",\n // \"cancelType\": \"CancelByUser\",\n // \"avgPrice\": \"0\",\n // \"stopOrderType\": \"UNKNOWN\",\n // \"lastPriceOnCreated\": \"16656.5\",\n // \"orderStatus\": \"Cancelled\",\n // \"takeProfit\": \"\",\n // \"cumExecValue\": \"0\",\n // \"triggerDirection\": 0,\n // \"blockTradeId\": \"\",\n // \"rejectReason\": \"EC_PerCancelRequest\",\n // \"isLeverage\": \"\",\n // \"price\": \"18000\",\n // \"orderIv\": \"\",\n // \"createdTime\": \"1672220109387\",\n // \"tpTriggerBy\": \"UNKNOWN\",\n // \"positionIdx\": 0,\n // \"timeInForce\": \"GoodTillCancel\",\n // \"leavesValue\": \"0\",\n // \"updatedTime\": \"1672220114123\",\n // \"side\": \"Sell\",\n // \"triggerPrice\": \"\",\n // \"cumExecFee\": \"0\",\n // \"slTriggerBy\": \"UNKNOWN\",\n // \"leavesQty\": \"0\",\n // \"closeOnTrigger\": false,\n // \"cumExecQty\": \"0\",\n // \"reduceOnly\": false,\n // \"qty\": \"0.1\",\n // \"stopLoss\": \"\",\n // \"triggerBy\": \"UNKNOWN\"\n // }\n // ]\n // },\n // \"retExtInfo\": {},\n // \"time\": 1672221263862\n // }\n //\n const data = this.addPaginationCursorToResult(response);\n return this.parseOrders(data, market, since, limit);\n }\n async fetchClosedOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name bybit#fetchClosedOrders\n * @description fetches information on multiple closed orders made by the user\n * @see https://bybit-exchange.github.io/docs/v5/order/order-list\n * @param {string} symbol unified market symbol of the market orders were made in\n * @param {int} [since] the earliest time in ms to fetch orders for\n * @param {int} [limit] the maximum number of order structures to retrieve\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n await this.loadMarkets();\n const request = {\n 'orderStatus': 'Filled',\n };\n return await this.fetchOrders(symbol, since, limit, this.extend(request, params));\n }\n async fetchCanceledOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name bybit#fetchCanceledOrders\n * @description fetches information on multiple canceled orders made by the user\n * @see https://bybit-exchange.github.io/docs/v5/order/order-list\n * @param {string} symbol unified market symbol of the market orders were made in\n * @param {int} [since] timestamp in ms of the earliest order, default is undefined\n * @param {int} [limit] max number of orders to return, default is undefined\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {boolean} [params.stop] true if stop order\n * @param {string} [params.type] market type, ['swap', 'option', 'spot']\n * @param {string} [params.subType] market subType, ['linear', 'inverse']\n * @returns {object} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n await this.loadMarkets();\n const request = {\n 'orderStatus': 'Cancelled',\n };\n return await this.fetchOrders(symbol, since, limit, this.extend(request, params));\n }\n async fetchUsdcOpenOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {\n await this.loadMarkets();\n const request = {};\n let market = undefined;\n if (symbol !== undefined) {\n market = this.market(symbol);\n request['symbol'] = market['id'];\n }\n let type = undefined;\n [type, params] = this.handleMarketTypeAndParams('fetchUsdcOpenOrders', market, params);\n request['category'] = (type === 'swap') ? 'perpetual' : 'option';\n const response = await this.privatePostOptionUsdcOpenapiPrivateV1QueryActiveOrders(this.extend(request, params));\n const result = this.safeValue(response, 'result', {});\n const orders = this.safeValue(result, 'dataList', []);\n //\n // {\n // \"retCode\": 0,\n // \"retMsg\": \"OK\",\n // \"result\": {\n // \"resultTotalSize\": 1,\n // \"cursor\": \"id%3D1662019818569%23df31e03b-fc00-4b4c-bd1c-b97fd72b5c5c\",\n // \"dataList\": [\n // {\n // \"orderId\": \"df31e03b-fc00-4b4c-bd1c-b97fd72b5c5c\",\n // \"orderLinkId\": \"\",\n // \"symbol\": \"BTC-2SEP22-18000-C\",\n // \"orderStatus\": \"New\",\n // \"orderPrice\": \"500\",\n // \"side\": \"Buy\",\n // \"remainingQty\": \"0.1\",\n // \"orderType\": \"Limit\",\n // \"qty\": \"0.1\",\n // \"iv\": \"0.0000\",\n // \"cancelType\": \"\",\n // \"updateTimestamp\": \"1662019818579\"\n // }\n // ]\n // }\n // }\n //\n return this.parseOrders(orders, market, since, limit);\n }\n async fetchOpenOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name bybit#fetchOpenOrders\n * @description fetch all unfilled currently open orders\n * @see https://bybit-exchange.github.io/docs/v5/order/open-order\n * @param {string} symbol unified market symbol\n * @param {int} [since] the earliest time in ms to fetch open orders for\n * @param {int} [limit] the maximum number of open orders structures to retrieve\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {boolean} [params.stop] set to true for fetching open stop orders\n * @param {string} [params.type] market type, ['swap', 'option', 'spot']\n * @param {string} [params.subType] market subType, ['linear', 'inverse']\n * @param {string} [params.baseCoin] Base coin. Supports linear, inverse & option\n * @param {string} [params.settleCoin] Settle coin. Supports linear, inverse & option\n * @param {string} [params.orderFilter] 'Order' or 'StopOrder' or 'tpslOrder'\n * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n await this.loadMarkets();\n const [enableUnifiedMargin, enableUnifiedAccount] = await this.isUnifiedEnabled();\n const isUnifiedAccount = (enableUnifiedMargin || enableUnifiedAccount);\n const request = {};\n let market = undefined;\n let isUsdcSettled = false;\n if (symbol !== undefined) {\n market = this.market(symbol);\n isUsdcSettled = market['settle'] === 'USDC';\n request['symbol'] = market['id'];\n }\n let type = undefined;\n [type, params] = this.getBybitType('fetchOpenOrders', market, params);\n if (type === 'linear' || type === 'inverse') {\n const baseCoin = this.safeString(params, 'baseCoin');\n if (symbol === undefined && baseCoin === undefined) {\n const defaultSettle = this.safeString(this.options, 'defaultSettle', 'USDT');\n const settleCoin = this.safeString(params, 'settleCoin', defaultSettle);\n request['settleCoin'] = settleCoin;\n isUsdcSettled = (settleCoin === 'USDC');\n }\n }\n if (((type === 'option') || isUsdcSettled) && !isUnifiedAccount) {\n return await this.fetchUsdcOpenOrders(symbol, since, limit, params);\n }\n request['category'] = type;\n const isStop = this.safeValue2(params, 'stop', 'trigger', false);\n params = this.omit(params, ['stop', 'trigger']);\n if (isStop) {\n request['orderFilter'] = 'StopOrder';\n }\n if (limit !== undefined) {\n request['limit'] = limit;\n }\n const response = await this.privateGetV5OrderRealtime(this.extend(request, params));\n //\n // {\n // \"retCode\": 0,\n // \"retMsg\": \"OK\",\n // \"result\": {\n // \"nextPageCursor\": \"1321052653536515584%3A1672217748287%2C1321052653536515584%3A1672217748287\",\n // \"category\": \"spot\",\n // \"list\": [\n // {\n // \"symbol\": \"ETHUSDT\",\n // \"orderType\": \"Limit\",\n // \"orderLinkId\": \"1672217748277652\",\n // \"orderId\": \"1321052653536515584\",\n // \"cancelType\": \"UNKNOWN\",\n // \"avgPrice\": \"\",\n // \"stopOrderType\": \"tpslOrder\",\n // \"lastPriceOnCreated\": \"\",\n // \"orderStatus\": \"Cancelled\",\n // \"takeProfit\": \"\",\n // \"cumExecValue\": \"0\",\n // \"triggerDirection\": 0,\n // \"isLeverage\": \"0\",\n // \"rejectReason\": \"\",\n // \"price\": \"1000\",\n // \"orderIv\": \"\",\n // \"createdTime\": \"1672217748287\",\n // \"tpTriggerBy\": \"\",\n // \"positionIdx\": 0,\n // \"timeInForce\": \"GTC\",\n // \"leavesValue\": \"500\",\n // \"updatedTime\": \"1672217748287\",\n // \"side\": \"Buy\",\n // \"triggerPrice\": \"1500\",\n // \"cumExecFee\": \"0\",\n // \"leavesQty\": \"0\",\n // \"slTriggerBy\": \"\",\n // \"closeOnTrigger\": false,\n // \"cumExecQty\": \"0\",\n // \"reduceOnly\": false,\n // \"qty\": \"0.5\",\n // \"stopLoss\": \"\",\n // \"triggerBy\": \"1192.5\"\n // }\n // ]\n // },\n // \"retExtInfo\": {},\n // \"time\": 1672219526294\n // }\n //\n const data = this.addPaginationCursorToResult(response);\n return this.parseOrders(data, market, since, limit);\n }\n async fetchOrderTrades(id, symbol = undefined, since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name bybit#fetchOrderTrades\n * @description fetch all the trades made from a single order\n * @see https://bybit-exchange.github.io/docs/v5/position/execution\n * @param {string} id order id\n * @param {string} symbol unified market symbol\n * @param {int} [since] the earliest time in ms to fetch trades for\n * @param {int} [limit] the maximum number of trades to retrieve\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=trade-structure}\n */\n const request = {};\n const clientOrderId = this.safeString2(params, 'clientOrderId', 'orderLinkId');\n if (clientOrderId !== undefined) {\n request['orderLinkId'] = clientOrderId;\n }\n else {\n request['orderId'] = id;\n }\n params = this.omit(params, ['clientOrderId', 'orderLinkId']);\n return await this.fetchMyTrades(symbol, since, limit, this.extend(request, params));\n }\n async fetchMyUsdcTrades(symbol = undefined, since = undefined, limit = undefined, params = {}) {\n await this.loadMarkets();\n let market = undefined;\n const request = {};\n if (symbol !== undefined) {\n market = this.market(symbol);\n request['symbol'] = market['id'];\n request['category'] = market['option'] ? 'OPTION' : 'PERPETUAL';\n }\n else {\n request['category'] = 'PERPETUAL';\n }\n const response = await this.privatePostOptionUsdcOpenapiPrivateV1ExecutionList(this.extend(request, params));\n //\n // {\n // \"result\": {\n // \"cursor\": \"29%3A1%2C28%3A1\",\n // \"resultTotalSize\": 2,\n // \"dataList\": [\n // {\n // \"symbol\": \"ETHPERP\",\n // \"orderLinkId\": \"\",\n // \"side\": \"Sell\",\n // \"orderId\": \"d83f8b4d-2f60-4e04-a64a-a3f207989dc6\",\n // \"execFee\": \"0.0210\",\n // \"feeRate\": \"0.000600\",\n // \"blockTradeId\": \"\",\n // \"tradeTime\": \"1669196423581\",\n // \"execPrice\": \"1161.45\",\n // \"lastLiquidityInd\": \"TAKER\",\n // \"execValue\": \"34.8435\",\n // \"execType\": \"Trade\",\n // \"execQty\": \"0.030\",\n // \"tradeId\": \"d9aa8590-9e6a-575e-a1be-d6261e6ed2e5\"\n // }, ...\n // ]\n // },\n // \"retCode\": 0,\n // \"retMsg\": \"Success.\"\n // }\n //\n const result = this.safeValue(response, 'result', {});\n const dataList = this.safeValue(result, 'dataList', []);\n return this.parseTrades(dataList, market, since, limit);\n }\n async fetchMyTrades(symbol = undefined, since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name bybit#fetchMyTrades\n * @description fetch all trades made by the user\n * @see https://bybit-exchange.github.io/docs/api-explorer/v5/position/execution\n * @param {string} symbol unified market symbol\n * @param {int} [since] the earliest time in ms to fetch trades for\n * @param {int} [limit] the maximum number of trades structures to retrieve\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {string} [params.type] market type, ['swap', 'option', 'spot']\n * @param {string} [params.subType] market subType, ['linear', 'inverse']\n * @param {boolean} [params.paginate] default false, when true will automatically paginate by calling this endpoint multiple times. See in the docs all the [availble parameters](https://github.com/ccxt/ccxt/wiki/Manual#pagination-params)\n * @returns {Trade[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=trade-structure}\n */\n await this.loadMarkets();\n let paginate = false;\n [paginate, params] = this.handleOptionAndParams(params, 'fetchMyTrades', 'paginate');\n if (paginate) {\n return await this.fetchPaginatedCallCursor('fetchMyTrades', symbol, since, limit, params, 'nextPageCursor', 'nextPageCursor', undefined, 100);\n }\n const [enableUnifiedMargin, enableUnifiedAccount] = await this.isUnifiedEnabled();\n const isUnifiedAccount = (enableUnifiedMargin || enableUnifiedAccount);\n let request = {};\n let market = undefined;\n let isUsdcSettled = false;\n if (symbol !== undefined) {\n market = this.market(symbol);\n isUsdcSettled = market['settle'] === 'USDC';\n request['symbol'] = market['id'];\n }\n let type = undefined;\n [type, params] = this.getBybitType('fetchMyTrades', market, params);\n if (((type === 'option') || isUsdcSettled) && !isUnifiedAccount) {\n return await this.fetchMyUsdcTrades(symbol, since, limit, params);\n }\n request['category'] = type;\n if (limit !== undefined) {\n request['limit'] = limit;\n }\n if (since !== undefined) {\n request['startTime'] = since;\n }\n [request, params] = this.handleUntilOption('endTime', request, params);\n const response = await this.privateGetV5ExecutionList(this.extend(request, params));\n //\n // {\n // \"retCode\": 0,\n // \"retMsg\": \"OK\",\n // \"result\": {\n // \"nextPageCursor\": \"132766%3A2%2C132766%3A2\",\n // \"category\": \"linear\",\n // \"list\": [\n // {\n // \"symbol\": \"ETHPERP\",\n // \"orderType\": \"Market\",\n // \"underlyingPrice\": \"\",\n // \"orderLinkId\": \"\",\n // \"side\": \"Buy\",\n // \"indexPrice\": \"\",\n // \"orderId\": \"8c065341-7b52-4ca9-ac2c-37e31ac55c94\",\n // \"stopOrderType\": \"UNKNOWN\",\n // \"leavesQty\": \"0\",\n // \"execTime\": \"1672282722429\",\n // \"isMaker\": false,\n // \"execFee\": \"0.071409\",\n // \"feeRate\": \"0.0006\",\n // \"execId\": \"e0cbe81d-0f18-5866-9415-cf319b5dab3b\",\n // \"tradeIv\": \"\",\n // \"blockTradeId\": \"\",\n // \"markPrice\": \"1183.54\",\n // \"execPrice\": \"1190.15\",\n // \"markIv\": \"\",\n // \"orderQty\": \"0.1\",\n // \"orderPrice\": \"1236.9\",\n // \"execValue\": \"119.015\",\n // \"execType\": \"Trade\",\n // \"execQty\": \"0.1\"\n // }\n // ]\n // },\n // \"retExtInfo\": {},\n // \"time\": 1672283754510\n // }\n //\n const trades = this.addPaginationCursorToResult(response);\n return this.parseTrades(trades, market, since, limit);\n }\n parseDepositAddress(depositAddress, currency = undefined) {\n //\n // {\n // \"chainType\": \"ERC20\",\n // \"addressDeposit\": \"0xf56297c6717c1d1c42c30324468ed50a9b7402ee\",\n // \"tagDeposit\": '',\n // \"chain\": \"ETH\"\n // }\n //\n const address = this.safeString(depositAddress, 'addressDeposit');\n const tag = this.safeString(depositAddress, 'tagDeposit');\n const code = this.safeString(currency, 'code');\n const chain = this.safeString(depositAddress, 'chain');\n const network = this.networkIdToCode(chain);\n this.checkAddress(address);\n return {\n 'currency': code,\n 'address': address,\n 'tag': tag,\n 'network': network,\n 'info': depositAddress,\n };\n }\n async fetchDepositAddressesByNetwork(code, params = {}) {\n /**\n * @method\n * @name bybit#fetchDepositAddressesByNetwork\n * @description fetch a dictionary of addresses for a currency, indexed by network\n * @see https://bybit-exchange.github.io/docs/v5/asset/master-deposit-addr\n * @param {string} code unified currency code of the currency for the deposit address\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} a dictionary of [address structures]{@link https://docs.ccxt.com/#/?id=address-structure} indexed by the network\n */\n const methodCallId = params['methodCallId'];\n await this.loadMarkets(!!methodCallId, { methodCallId });\n let currency = this.currency(code);\n const request = {\n 'coin': currency['id'],\n };\n const response = await this.privateGetV5AssetDepositQueryAddress(this.extend(request, params));\n //\n // {\n // \"retCode\": 0,\n // \"retMsg\": \"success\",\n // \"result\": {\n // \"coin\": \"USDT\",\n // \"chains\": [\n // {\n // \"chainType\": \"ERC20\",\n // \"addressDeposit\": \"0xd9e1cd77afa0e50b452a62fbb68a3340602286c3\",\n // \"tagDeposit\": \"\",\n // \"chain\": \"ETH\"\n // }\n // ]\n // },\n // \"retExtInfo\": {},\n // \"time\": 1672192792860\n // }\n //\n const result = this.safeValue(response, 'result', []);\n const chains = this.safeValue(result, 'chains', []);\n const coin = this.safeString(result, 'coin');\n currency = this.currency(coin);\n const parsed = this.parseDepositAddresses(chains, [currency['code']], false, {\n 'currency': currency['id'],\n });\n return this.indexBy(parsed, 'network');\n }\n async fetchDepositAddress(code, params = {}) {\n /**\n * @method\n * @name bybit#fetchDepositAddress\n * @description fetch the deposit address for a currency associated with this account\n * @see https://bybit-exchange.github.io/docs/v5/asset/master-deposit-addr\n * @param {string} code unified currency code\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} an [address structure]{@link https://docs.ccxt.com/#/?id=address-structure}\n */\n const methodCallId = params['methodCallId'];\n await this.loadMarkets(!!methodCallId, { methodCallId });\n const [networkCode, query] = this.handleNetworkCodeAndParams(params);\n const networkId = this.networkCodeToId(networkCode);\n const currency = this.currency(code);\n const request = {\n 'coin': currency['id'],\n };\n if (networkId !== undefined) {\n request['chainType'] = networkId;\n }\n const response = await this.privateGetV5AssetDepositQueryAddress(this.extend(request, query));\n //\n // {\n // \"retCode\": 0,\n // \"retMsg\": \"success\",\n // \"result\": {\n // \"coin\": \"USDT\",\n // \"chains\": [\n // {\n // \"chainType\": \"ERC20\",\n // \"addressDeposit\": \"0xd9e1cd77afa0e50b452a62fbb68a3340602286c3\",\n // \"tagDeposit\": \"\",\n // \"chain\": \"ETH\"\n // }\n // ]\n // },\n // \"retExtInfo\": {},\n // \"time\": 1672192792860\n // }\n //\n const result = this.safeValue(response, 'result', {});\n const chains = this.safeValue(result, 'chains', []);\n const chainsIndexedById = this.indexBy(chains, 'chain');\n const selectedNetworkId = this.selectNetworkIdFromRawNetworks(code, networkCode, chainsIndexedById);\n const addressObject = this.safeValue(chainsIndexedById, selectedNetworkId, {});\n return this.parseDepositAddress(addressObject, currency);\n }\n async fetchDeposits(code = undefined, since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name bybit#fetchDeposits\n * @description fetch all deposits made to an account\n * @see https://bybit-exchange.github.io/docs/v5/asset/deposit-record\n * @param {string} code unified currency code\n * @param {int} [since] the earliest time in ms to fetch deposits for, default = 30 days before the current time\n * @param {int} [limit] the maximum number of deposits structures to retrieve, default = 50, max = 50\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {int} [params.until] the latest time in ms to fetch deposits for, default = 30 days after since\n * EXCHANGE SPECIFIC PARAMETERS\n * @param {boolean} [params.paginate] default false, when true will automatically paginate by calling this endpoint multiple times. See in the docs all the [availble parameters](https://github.com/ccxt/ccxt/wiki/Manual#pagination-params)\n * @param {string} [params.cursor] used for pagination\n * @returns {object[]} a list of [transaction structures]{@link https://docs.ccxt.com/#/?id=transaction-structure}\n */\n await this.loadMarkets();\n let paginate = false;\n [paginate, params] = this.handleOptionAndParams(params, 'fetchDeposits', 'paginate');\n if (paginate) {\n return await this.fetchPaginatedCallCursor('fetchDeposits', code, since, limit, params, 'nextPageCursor', 'nextPageCursor', undefined, 50);\n }\n let request = {\n // 'coin': currency['id'],\n // 'limit': 20, // max 50\n // 'cursor': '',\n };\n let currency = undefined;\n if (code !== undefined) {\n currency = this.currency(code);\n request['coin'] = currency['id'];\n }\n if (since !== undefined) {\n request['startTime'] = since;\n }\n if (limit !== undefined) {\n request['limit'] = limit;\n }\n [request, params] = this.handleUntilOption('endTime', request, params);\n const response = await this.privateGetV5AssetDepositQueryRecord(this.extend(request, params));\n //\n // {\n // \"retCode\": 0,\n // \"retMsg\": \"success\",\n // \"result\": {\n // \"rows\": [\n // {\n // \"coin\": \"USDT\",\n // \"chain\": \"ETH\",\n // \"amount\": \"10000\",\n // \"txID\": \"skip-notification-scene-test-amount-202212270944-533285-USDT\",\n // \"status\": 3,\n // \"toAddress\": \"test-amount-address\",\n // \"tag\": \"\",\n // \"depositFee\": \"\",\n // \"successAt\": \"1672134274000\",\n // \"confirmations\": \"10000\",\n // \"txIndex\": \"\",\n // \"blockHash\": \"\"\n // }\n // ],\n // \"nextPageCursor\": \"eyJtaW5JRCI6MTA0NjA0MywibWF4SUQiOjEwNDYwNDN9\"\n // },\n // \"retExtInfo\": {},\n // \"time\": 1672191992512\n // }\n //\n const data = this.addPaginationCursorToResult(response);\n return this.parseTransactions(data, currency, since, limit);\n }\n async fetchWithdrawals(code = undefined, since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name bybit#fetchWithdrawals\n * @description fetch all withdrawals made from an account\n * @see https://bybit-exchange.github.io/docs/v5/asset/withdraw-record\n * @param {string} code unified currency code\n * @param {int} [since] the earliest time in ms to fetch withdrawals for\n * @param {int} [limit] the maximum number of withdrawals structures to retrieve\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {int} [params.until] the latest time in ms to fetch entries for\n * @param {boolean} [params.paginate] default false, when true will automatically paginate by calling this endpoint multiple times. See in the docs all the [availble parameters](https://github.com/ccxt/ccxt/wiki/Manual#pagination-params)\n * @returns {object[]} a list of [transaction structures]{@link https://docs.ccxt.com/#/?id=transaction-structure}\n */\n await this.loadMarkets();\n let paginate = false;\n [paginate, params] = this.handleOptionAndParams(params, 'fetchWithdrawals', 'paginate');\n if (paginate) {\n return await this.fetchPaginatedCallCursor('fetchWithdrawals', code, since, limit, params, 'nextPageCursor', 'nextPageCursor', undefined, 50);\n }\n let request = {\n // 'coin': currency['id'],\n // 'limit': 20, // max 50\n // 'cusor': '',\n };\n let currency = undefined;\n if (code !== undefined) {\n currency = this.currency(code);\n request['coin'] = currency['id'];\n }\n if (since !== undefined) {\n request['startTime'] = since;\n }\n if (limit !== undefined) {\n request['limit'] = limit;\n }\n [request, params] = this.handleUntilOption('endTime', request, params);\n const response = await this.privateGetV5AssetWithdrawQueryRecord(this.extend(request, params));\n //\n // {\n // \"retCode\": 0,\n // \"retMsg\": \"success\",\n // \"result\": {\n // \"rows\": [\n // {\n // \"coin\": \"USDT\",\n // \"chain\": \"ETH\",\n // \"amount\": \"77\",\n // \"txID\": \"\",\n // \"status\": \"SecurityCheck\",\n // \"toAddress\": \"0x99ced129603abc771c0dabe935c326ff6c86645d\",\n // \"tag\": \"\",\n // \"withdrawFee\": \"10\",\n // \"createTime\": \"1670922217000\",\n // \"updateTime\": \"1670922217000\",\n // \"withdrawId\": \"9976\",\n // \"withdrawType\": 0\n // },\n // {\n // \"coin\": \"USDT\",\n // \"chain\": \"ETH\",\n // \"amount\": \"26\",\n // \"txID\": \"\",\n // \"status\": \"success\",\n // \"toAddress\": \"15638072681@163.com\",\n // \"tag\": \"\",\n // \"withdrawFee\": \"0\",\n // \"createTime\": \"1669711121000\",\n // \"updateTime\": \"1669711380000\",\n // \"withdrawId\": \"9801\",\n // \"withdrawType\": 1\n // }\n // ],\n // \"nextPageCursor\": \"eyJtaW5JRCI6OTgwMSwibWF4SUQiOjk5NzZ9\"\n // },\n // \"retExtInfo\": {},\n // \"time\": 1672194949928\n // }\n //\n const data = this.addPaginationCursorToResult(response);\n return this.parseTransactions(data, currency, since, limit);\n }\n parseTransactionStatus(status) {\n const statuses = {\n // v3 deposit status\n '0': 'unknown',\n '1': 'pending',\n '2': 'processing',\n '3': 'ok',\n '4': 'fail',\n // v3 withdrawal status\n 'SecurityCheck': 'pending',\n 'Pending': 'pending',\n 'success': 'ok',\n 'CancelByUser': 'canceled',\n 'Reject': 'rejected',\n 'Fail': 'failed',\n 'BlockchainConfirmed': 'ok',\n };\n return this.safeString(statuses, status, status);\n }\n parseTransaction(transaction, currency = undefined) {\n //\n // fetchWithdrawals\n //\n // {\n // \"coin\": \"USDT\",\n // \"chain\": \"TRX\",\n // \"amount\": \"12.34\",\n // \"txID\": \"de5ea0a2f2e59dc9a714837dd3ddc6d5e151b56ec5d786d351c4f52336f80d3c\",\n // \"status\": \"success\",\n // \"toAddress\": \"TQdmFKUoe1Lk2iwZuwRJEHJreTUBoN3BAw\",\n // \"tag\": \"\",\n // \"withdrawFee\": \"0.5\",\n // \"createTime\": \"1665144183000\",\n // \"updateTime\": \"1665144256000\",\n // \"withdrawId\": \"8839035\"\n // }\n //\n // fetchDeposits\n //\n // {\n // \"coin\": \"USDT\",\n // \"chain\": \"TRX\",\n // \"amount\": \"44\",\n // \"txID\": \"0b038ea12fa1575e2d66693db3c346b700d4b28347afc39f80321cf089acc960\",\n // \"status\": \"3\",\n // \"toAddress\": \"TC6NCAC5WSVCCiaD3kWZXyW91ZKKhLm53b\",\n // \"tag\": \"\",\n // \"depositFee\": \"\",\n // \"successAt\": \"1665142507000\",\n // \"confirmations\": \"100\",\n // \"txIndex\": \"0\",\n // \"blockHash\": \"0000000002ac3b1064aee94bca1bd0b58c4c09c65813b084b87a2063d961129e\"\n // }\n //\n // withdraw\n //\n // {\n // \"id\": \"9377266\"\n // }\n //\n const currencyId = this.safeString(transaction, 'coin');\n const code = this.safeCurrencyCode(currencyId, currency);\n const timestamp = this.safeInteger2(transaction, 'createTime', 'successAt');\n const updated = this.safeInteger(transaction, 'updateTime');\n const status = this.parseTransactionStatus(this.safeString(transaction, 'status'));\n const feeCost = this.safeNumber2(transaction, 'depositFee', 'withdrawFee');\n const type = ('depositFee' in transaction) ? 'deposit' : 'withdrawal';\n let fee = undefined;\n if (feeCost !== undefined) {\n fee = {\n 'cost': feeCost,\n 'currency': code,\n };\n }\n const toAddress = this.safeString(transaction, 'toAddress');\n return {\n 'info': transaction,\n 'id': this.safeString2(transaction, 'id', 'withdrawId'),\n 'txid': this.safeString(transaction, 'txID'),\n 'timestamp': timestamp,\n 'datetime': this.iso8601(timestamp),\n 'network': this.networkIdToCode(this.safeString(transaction, 'chain')),\n 'address': undefined,\n 'addressTo': toAddress,\n 'addressFrom': undefined,\n 'tag': this.safeString(transaction, 'tag'),\n 'tagTo': undefined,\n 'tagFrom': undefined,\n 'type': type,\n 'amount': this.safeNumber(transaction, 'amount'),\n 'currency': code,\n 'status': status,\n 'updated': updated,\n 'fee': fee,\n 'internal': undefined,\n 'comment': undefined,\n };\n }\n async fetchLedger(code = undefined, since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name bybit#fetchLedger\n * @description fetch the history of changes, actions done by the user or operations that altered balance of the user\n * @see https://bybit-exchange.github.io/docs/v5/account/transaction-log\n * @param {string} code unified currency code, default is undefined\n * @param {int} [since] timestamp in ms of the earliest ledger entry, default is undefined\n * @param {int} [limit] max number of ledger entrys to return, default is undefined\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} a [ledger structure]{@link https://docs.ccxt.com/#/?id=ledger-structure}\n */\n await this.loadMarkets();\n const request = {\n // 'coin': currency['id'],\n // 'currency': currency['id'], // alias\n // 'start_date': this.iso8601 (since),\n // 'end_date': this.iso8601 (till),\n // 'wallet_fund_type': 'Deposit', // Withdraw, RealisedPNL, Commission, Refund, Prize, ExchangeOrderWithdraw, ExchangeOrderDeposit\n // 'page': 1,\n // 'limit': 20, // max 50\n // v5 transaction log\n // 'accountType': '', Account Type. UNIFIED\n // 'category': '', Product type. spot,linear,option\n // 'currency': '', Currency\n // 'baseCoin': '', BaseCoin. e.g., BTC of BTCPERP\n // 'type': '', Types of transaction logs\n // 'startTime': 0, The start timestamp (ms)\n // 'endTime': 0, The end timestamp (ms)\n // 'limit': 0, Limit for data size per page. [1, 50]. Default: 20\n // 'cursor': '', Cursor. Used for pagination\n };\n const enableUnified = await this.isUnifiedEnabled();\n let currency = undefined;\n let currencyKey = 'coin';\n if (enableUnified[1]) {\n currencyKey = 'currency';\n if (since !== undefined) {\n request['startTime'] = since;\n }\n }\n else {\n if (since !== undefined) {\n request['start_date'] = this.yyyymmdd(since);\n }\n }\n if (code !== undefined) {\n currency = this.currency(code);\n request[currencyKey] = currency['id'];\n }\n if (limit !== undefined) {\n request['limit'] = limit;\n }\n let response = undefined;\n if (enableUnified[1]) {\n response = await this.privateGetV5AccountTransactionLog(this.extend(request, params));\n }\n else {\n response = await this.privateGetV2PrivateWalletFundRecords(this.extend(request, params));\n }\n //\n // {\n // \"ret_code\": 0,\n // \"ret_msg\": \"ok\",\n // \"ext_code\": \"\",\n // \"result\": {\n // \"data\": [\n // {\n // \"id\": 234467,\n // \"user_id\": 1,\n // \"coin\": \"BTC\",\n // \"wallet_id\": 27913,\n // \"type\": \"Realized P&L\",\n // \"amount\": \"-0.00000006\",\n // \"tx_id\": \"\",\n // \"address\": \"BTCUSD\",\n // \"wallet_balance\": \"0.03000330\",\n // \"exec_time\": \"2019-12-09T00:00:25.000Z\",\n // \"cross_seq\": 0\n // }\n // ]\n // },\n // \"ext_info\": null,\n // \"time_now\": \"1577481867.115552\",\n // \"rate_limit_status\": 119,\n // \"rate_limit_reset_ms\": 1577481867122,\n // \"rate_limit\": 120\n // }\n //\n // v5 transaction log\n //\n // {\n // \"retCode\": 0,\n // \"retMsg\": \"OK\",\n // \"result\": {\n // \"nextPageCursor\": \"21963%3A1%2C14954%3A1\",\n // \"list\": [\n // {\n // \"symbol\": \"XRPUSDT\",\n // \"side\": \"Buy\",\n // \"funding\": \"-0.003676\",\n // \"orderLinkId\": \"\",\n // \"orderId\": \"1672128000-8-592324-1-2\",\n // \"fee\": \"0.00000000\",\n // \"change\": \"-0.003676\",\n // \"cashFlow\": \"0\",\n // \"transactionTime\": \"1672128000000\",\n // \"type\": \"SETTLEMENT\",\n // \"feeRate\": \"0.0001\",\n // \"size\": \"100\",\n // \"qty\": \"100\",\n // \"cashBalance\": \"5086.55825002\",\n // \"currency\": \"USDT\",\n // \"category\": \"linear\",\n // \"tradePrice\": \"0.3676\",\n // \"tradeId\": \"534c0003-4bf7-486f-aa02-78cee36825e4\"\n // },\n // {\n // \"symbol\": \"XRPUSDT\",\n // \"side\": \"Buy\",\n // \"funding\": \"\",\n // \"orderLinkId\": \"linear-order\",\n // \"orderId\": \"592b7e41-78fd-42e2-9aa3-91e1835ef3e1\",\n // \"fee\": \"0.01908720\",\n // \"change\": \"-0.0190872\",\n // \"cashFlow\": \"0\",\n // \"transactionTime\": \"1672121182224\",\n // \"type\": \"TRADE\",\n // \"feeRate\": \"0.0006\",\n // \"size\": \"100\",\n // \"qty\": \"88\",\n // \"cashBalance\": \"5086.56192602\",\n // \"currency\": \"USDT\",\n // \"category\": \"linear\",\n // \"tradePrice\": \"0.3615\",\n // \"tradeId\": \"5184f079-88ec-54c7-8774-5173cafd2b4e\"\n // },\n // {\n // \"symbol\": \"XRPUSDT\",\n // \"side\": \"Buy\",\n // \"funding\": \"\",\n // \"orderLinkId\": \"linear-order\",\n // \"orderId\": \"592b7e41-78fd-42e2-9aa3-91e1835ef3e1\",\n // \"fee\": \"0.00260280\",\n // \"change\": \"-0.0026028\",\n // \"cashFlow\": \"0\",\n // \"transactionTime\": \"1672121182224\",\n // \"type\": \"TRADE\",\n // \"feeRate\": \"0.0006\",\n // \"size\": \"12\",\n // \"qty\": \"12\",\n // \"cashBalance\": \"5086.58101322\",\n // \"currency\": \"USDT\",\n // \"category\": \"linear\",\n // \"tradePrice\": \"0.3615\",\n // \"tradeId\": \"8569c10f-5061-5891-81c4-a54929847eb3\"\n // }\n // ]\n // },\n // \"retExtInfo\": {},\n // \"time\": 1672132481405\n // }\n //\n const data = this.addPaginationCursorToResult(response);\n return this.parseLedger(data, currency, since, limit);\n }\n parseLedgerEntry(item, currency = undefined) {\n //\n // {\n // \"id\": 234467,\n // \"user_id\": 1,\n // \"coin\": \"BTC\",\n // \"wallet_id\": 27913,\n // \"type\": \"Realized P&L\",\n // \"amount\": \"-0.00000006\",\n // \"tx_id\": \"\",\n // \"address\": \"BTCUSD\",\n // \"wallet_balance\": \"0.03000330\",\n // \"exec_time\": \"2019-12-09T00:00:25.000Z\",\n // \"cross_seq\": 0\n // }\n //\n // {\n // \"symbol\": \"XRPUSDT\",\n // \"side\": \"Buy\",\n // \"funding\": \"\",\n // \"orderLinkId\": \"linear-order\",\n // \"orderId\": \"592b7e41-78fd-42e2-9aa3-91e1835ef3e1\",\n // \"fee\": \"0.00260280\",\n // \"change\": \"-0.0026028\",\n // \"cashFlow\": \"0\",\n // \"transactionTime\": \"1672121182224\",\n // \"type\": \"TRADE\",\n // \"feeRate\": \"0.0006\",\n // \"size\": \"12\",\n // \"qty\": \"12\",\n // \"cashBalance\": \"5086.58101322\",\n // \"currency\": \"USDT\",\n // \"category\": \"linear\",\n // \"tradePrice\": \"0.3615\",\n // \"tradeId\": \"8569c10f-5061-5891-81c4-a54929847eb3\"\n // }\n //\n const currencyId = this.safeString2(item, 'coin', 'currency');\n const code = this.safeCurrencyCode(currencyId, currency);\n const amount = this.safeString2(item, 'amount', 'change');\n const after = this.safeString2(item, 'wallet_balance', 'cashBalance');\n const direction = Precise.stringLt(amount, '0') ? 'out' : 'in';\n let before = undefined;\n if (after !== undefined && amount !== undefined) {\n const difference = (direction === 'out') ? amount : Precise.stringNeg(amount);\n before = Precise.stringAdd(after, difference);\n }\n let timestamp = this.parse8601(this.safeString(item, 'exec_time'));\n if (timestamp === undefined) {\n timestamp = this.safeInteger(item, 'transactionTime');\n }\n const type = this.parseLedgerEntryType(this.safeString(item, 'type'));\n const id = this.safeString(item, 'id');\n const referenceId = this.safeString(item, 'tx_id');\n return {\n 'id': id,\n 'currency': code,\n 'account': this.safeString(item, 'wallet_id'),\n 'referenceAccount': undefined,\n 'referenceId': referenceId,\n 'status': undefined,\n 'amount': this.parseNumber(Precise.stringAbs(amount)),\n 'before': this.parseNumber(before),\n 'after': this.parseNumber(after),\n 'fee': this.parseNumber(this.safeString(item, 'fee')),\n 'direction': direction,\n 'timestamp': timestamp,\n 'datetime': this.iso8601(timestamp),\n 'type': type,\n 'info': item,\n };\n }\n parseLedgerEntryType(type) {\n const types = {\n 'Deposit': 'transaction',\n 'Withdraw': 'transaction',\n 'RealisedPNL': 'trade',\n 'Commission': 'fee',\n 'Refund': 'cashback',\n 'Prize': 'prize',\n 'ExchangeOrderWithdraw': 'transaction',\n 'ExchangeOrderDeposit': 'transaction',\n // v5\n 'TRANSFER_IN': 'transaction',\n 'TRANSFER_OUT': 'transaction',\n 'TRADE': 'trade',\n 'SETTLEMENT': 'trade',\n 'DELIVERY': 'trade',\n 'LIQUIDATION': 'trade',\n 'BONUS': 'Prize',\n 'FEE_REFUND': 'cashback',\n 'INTEREST': 'transaction',\n 'CURRENCY_BUY': 'trade',\n 'CURRENCY_SELL': 'trade',\n };\n return this.safeString(types, type, type);\n }\n async withdraw(code, amount, address, tag = undefined, params = {}) {\n /**\n * @method\n * @name bybit#withdraw\n * @description make a withdrawal\n * @see https://bybit-exchange.github.io/docs/v5/asset/withdraw\n * @param {string} code unified currency code\n * @param {float} amount the amount to withdraw\n * @param {string} address the address to withdraw to\n * @param {string} tag\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} a [transaction structure]{@link https://docs.ccxt.com/#/?id=transaction-structure}\n */\n [tag, params] = this.handleWithdrawTagAndParams(tag, params);\n await this.loadMarkets();\n this.checkAddress(address);\n const currency = this.currency(code);\n const request = {\n 'coin': currency['id'],\n 'address': address,\n 'timestamp': this.nonce(),\n 'feeType': 1, // bybit will deduce the fee from the amount\n };\n if (tag !== undefined) {\n request['tag'] = tag;\n }\n const [networkCode, query] = this.handleNetworkCodeAndParams(params);\n const networkId = this.networkCodeToId(networkCode);\n const precisionAmount = this.currencyToPrecision(code, amount, networkCode);\n request['amount'] = this.numberToString(precisionAmount);\n if (networkId !== undefined) {\n request['chain'] = networkId.toUpperCase();\n }\n const response = await this.privatePostV5AssetWithdrawCreate(this.extend(request, query));\n //\n // {\n // \"retCode\": \"0\",\n // \"retMsg\": \"success\",\n // \"result\": {\n // \"id\": \"9377266\"\n // },\n // \"retExtInfo\": {},\n // \"time\": \"1666892894902\"\n // }\n //\n const result = this.safeValue(response, 'result', {});\n return this.parseTransaction(result, currency);\n }\n async fetchPosition(symbol, params = {}) {\n /**\n * @method\n * @name bybit#fetchPosition\n * @description fetch data on a single open contract trade position\n * @see https://bybit-exchange.github.io/docs/v5/position\n * @param {string} symbol unified market symbol of the market the position is held in, default is undefined\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} a [position structure]{@link https://docs.ccxt.com/#/?id=position-structure}\n */\n if (symbol === undefined) {\n throw new InvalidParamsError('fetchPosition() requires a symbol argument').exchange(this.id);\n }\n await this.loadMarkets();\n const market = this.market(symbol);\n const request = {\n 'symbol': market['id'],\n };\n const [enableUnifiedMargin, enableUnifiedAccount] = await this.isUnifiedEnabled();\n const isUnifiedAccount = (enableUnifiedMargin || enableUnifiedAccount);\n const isUsdcSettled = market['settle'] === 'USDC';\n let response = undefined;\n let type = undefined;\n [type, params] = this.getBybitType('fetchPosition', market, params);\n if ((type === 'option' || isUsdcSettled) && !isUnifiedAccount) {\n request['category'] = (type === 'option') ? 'OPTION' : 'PERPETUAL';\n response = await this.privatePostOptionUsdcOpenapiPrivateV1QueryPosition(this.extend(request, params));\n }\n else {\n request['category'] = type;\n response = await this.privateGetV5PositionList(this.extend(request, params));\n }\n //\n // {\n // \"retCode\": 0,\n // \"retMsg\": \"OK\",\n // \"result\": {\n // \"nextPageCursor\": \"updateAt%3D1672279322668\",\n // \"category\": \"linear\",\n // \"list\": [\n // {\n // \"symbol\": \"XRPUSDT\",\n // \"leverage\": \"10\",\n // \"avgPrice\": \"0.3615\",\n // \"liqPrice\": \"0.0001\",\n // \"riskLimitValue\": \"200000\",\n // \"takeProfit\": \"\",\n // \"positionValue\": \"36.15\",\n // \"tpslMode\": \"Full\",\n // \"riskId\": 41,\n // \"trailingStop\": \"0\",\n // \"unrealisedPnl\": \"-1.83\",\n // \"markPrice\": \"0.3432\",\n // \"cumRealisedPnl\": \"0.48805876\",\n // \"positionMM\": \"0.381021\",\n // \"createdTime\": \"1672121182216\",\n // \"positionIdx\": 0,\n // \"positionIM\": \"3.634521\",\n // \"updatedTime\": \"1672279322668\",\n // \"side\": \"Buy\",\n // \"bustPrice\": \"\",\n // \"size\": \"100\",\n // \"positionStatus\": \"Normal\",\n // \"stopLoss\": \"\",\n // \"tradeMode\": 0\n // }\n // ]\n // },\n // \"retExtInfo\": {},\n // \"time\": 1672280219169\n // }\n //\n const result = this.safeDict(response, 'result', {});\n const positions = this.safeList2(result, 'list', 'dataList', []);\n const timestamp = this.safeInteger(response, 'time');\n const first = this.safeDict(positions, 0, {});\n const position = this.parsePosition(first, market);\n position['timestamp'] = timestamp;\n position['datetime'] = this.iso8601(timestamp);\n return position;\n }\n async fetchUsdcPositions(symbols = undefined, params = {}) {\n await this.loadMarkets();\n const request = {};\n let market = undefined;\n if (Array.isArray(symbols)) {\n const length = symbols.length;\n if (length !== 1) {\n throw new InvalidParamsError('fetchUsdcPositions() takes an array with exactly one symbol').exchange(this.id);\n }\n const symbol = this.safeString(symbols, 0);\n market = this.market(symbol);\n request['symbol'] = market['id'];\n }\n else if (symbols !== undefined) {\n market = this.market(symbols);\n request['symbol'] = market['id'];\n }\n let type = undefined;\n [type, params] = this.getBybitType('fetchUsdcPositions', market, params);\n request['category'] = (type === 'option') ? 'OPTION' : 'PERPETUAL';\n const response = await this.privatePostOptionUsdcOpenapiPrivateV1QueryPosition(this.extend(request, params));\n //\n // {\n // \"result\": {\n // \"cursor\": \"BTC-31DEC21-24000-P%3A1640834421431%2CBTC-31DEC21-24000-P%3A1640834421431\",\n // \"resultTotalSize\": 1,\n // \"dataList\": [\n // {\n // \"symbol\": \"BTC-31DEC21-24000-P\",\n // \"leverage\": \"\",\n // \"occClosingFee\": \"\",\n // \"liqPrice\": \"\",\n // \"positionValue\": \"\",\n // \"takeProfit\": \"\",\n // \"riskId\": \"\",\n // \"trailingStop\": \"\",\n // \"unrealisedPnl\": \"\",\n // \"createdAt\": \"1640834421431\",\n // \"markPrice\": \"0.00\",\n // \"cumRealisedPnl\": \"\",\n // \"positionMM\": \"359.5271\",\n // \"positionIM\": \"467.0633\",\n // \"updatedAt\": \"1640834421431\",\n // \"tpSLMode\": \"\",\n // \"side\": \"Sell\",\n // \"bustPrice\": \"\",\n // \"deleverageIndicator\": 0,\n // \"entryPrice\": \"1.4\",\n // \"size\": \"-0.100\",\n // \"sessionRPL\": \"\",\n // \"positionStatus\": \"\",\n // \"sessionUPL\": \"\",\n // \"stopLoss\": \"\",\n // \"orderMargin\": \"\",\n // \"sessionAvgPrice\": \"1.5\"\n // }\n // ]\n // },\n // \"retCode\": 0,\n // \"retMsg\": \"Success.\"\n // }\n //\n const result = this.safeValue(response, 'result', {});\n const positions = this.safeValue(result, 'dataList', []);\n const results = [];\n for (let i = 0; i < positions.length; i++) {\n let rawPosition = positions[i];\n if (('data' in rawPosition) && ('is_valid' in rawPosition)) {\n // futures only\n rawPosition = this.safeValue(rawPosition, 'data');\n }\n results.push(this.parsePosition(rawPosition, market));\n }\n return this.filterByArrayPositions(results, 'symbol', symbols, false);\n }\n async fetchPositions(symbols = undefined, params = {}) {\n /**\n * @method\n * @name bybit#fetchPositions\n * @description fetch all open positions\n * @see https://bybit-exchange.github.io/docs/v5/position\n * @param {string[]} symbols list of unified market symbols\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {string} [params.type] market type, ['swap', 'option', 'spot']\n * @param {string} [params.subType] market subType, ['linear', 'inverse']\n * @param {string} [params.baseCoin] Base coin. Supports linear, inverse & option\n * @param {string} [params.settleCoin] Settle coin. Supports linear, inverse & option\n * @returns {object[]} a list of [position structure]{@link https://docs.ccxt.com/#/?id=position-structure}\n */\n let symbol = undefined;\n if ((symbols !== undefined) && Array.isArray(symbols)) {\n const symbolsLength = symbols.length;\n if (symbolsLength > 1) {\n throw new InvalidParamsError('fetchPositions() does not accept an array with more than one symbol').exchange(this.id);\n }\n else if (symbolsLength === 1) {\n symbol = symbols[0];\n }\n symbols = this.marketSymbols(symbols);\n }\n else if (symbols !== undefined) {\n symbol = symbols;\n symbols = [this.symbol(symbol)];\n }\n await this.loadMarkets();\n const [enableUnifiedMargin, enableUnifiedAccount] = await this.isUnifiedEnabled();\n const isUnifiedAccount = (enableUnifiedMargin || enableUnifiedAccount);\n const request = {};\n let market = undefined;\n let isUsdcSettled = false;\n if (symbol !== undefined) {\n market = this.market(symbol);\n symbol = market['symbol'];\n request['symbol'] = market['id'];\n isUsdcSettled = market['settle'] === 'USDC';\n }\n let type = undefined;\n [type, params] = this.getBybitType('fetchPositions', market, params);\n if (type === 'linear' || type === 'inverse') {\n const baseCoin = this.safeString(params, 'baseCoin');\n if (type === 'linear') {\n if (symbol === undefined && baseCoin === undefined) {\n const defaultSettle = this.safeString(this.options, 'defaultSettle', 'USDT');\n const settleCoin = this.safeString(params, 'settleCoin', defaultSettle);\n request['settleCoin'] = settleCoin;\n isUsdcSettled = (settleCoin === 'USDC');\n }\n }\n else {\n // inverse\n if (symbol === undefined && baseCoin === undefined) {\n request['category'] = 'inverse';\n }\n }\n }\n if (((type === 'option') || isUsdcSettled) && !isUnifiedAccount) {\n return await this.fetchUsdcPositions(symbols, params);\n }\n params = this.omit(params, ['type']);\n request['category'] = type;\n const response = await this.privateGetV5PositionList(this.extend(request, params));\n //\n // {\n // \"retCode\": 0,\n // \"retMsg\": \"Success\",\n // \"result\": {\n // \"nextPageCursor\": \"0%3A1657711949945%2C0%3A1657711949945\",\n // \"category\": \"linear\",\n // \"list\": [\n // {\n // \"symbol\": \"ETHUSDT\",\n // \"leverage\": \"10\",\n // \"updatedTime\": 1657711949945,\n // \"side\": \"Buy\",\n // \"positionValue\": \"536.92500000\",\n // \"takeProfit\": \"\",\n // \"tpslMode\": \"Full\",\n // \"riskId\": 11,\n // \"trailingStop\": \"\",\n // \"entryPrice\": \"1073.85000000\",\n // \"unrealisedPnl\": \"\",\n // \"markPrice\": \"1080.65000000\",\n // \"size\": \"0.5000\",\n // \"positionStatus\": \"normal\",\n // \"stopLoss\": \"\",\n // \"cumRealisedPnl\": \"-0.32215500\",\n // \"positionMM\": \"2.97456450\",\n // \"createdTime\": 1657711949928,\n // \"positionIdx\": 0,\n // \"positionIM\": \"53.98243950\"\n // }\n // ]\n // },\n // \"time\": 1657713693182\n // }\n //\n const positions = this.addPaginationCursorToResult(response);\n const results = [];\n for (let i = 0; i < positions.length; i++) {\n let rawPosition = positions[i];\n if (('data' in rawPosition) && ('is_valid' in rawPosition)) {\n // futures only\n rawPosition = this.safeValue(rawPosition, 'data');\n }\n results.push(this.parsePosition(rawPosition));\n }\n return this.filterByArrayPositions(results, 'symbol', symbols, false);\n }\n parsePosition(position, market = undefined) {\n //\n // linear swap\n //\n // {\n // \"positionIdx\": 0,\n // \"riskId\": \"11\",\n // \"symbol\": \"ETHUSDT\",\n // \"side\": \"Buy\",\n // \"size\": \"0.10\",\n // \"positionValue\": \"119.845\",\n // \"entryPrice\": \"1198.45\",\n // \"tradeMode\": 1,\n // \"autoAddMargin\": 0,\n // \"leverage\": \"4.2\",\n // \"positionBalance\": \"28.58931118\",\n // \"liqPrice\": \"919.10\",\n // \"bustPrice\": \"913.15\",\n // \"takeProfit\": \"0.00\",\n // \"stopLoss\": \"0.00\",\n // \"trailingStop\": \"0.00\",\n // \"unrealisedPnl\": \"0.083\",\n // \"createdTime\": \"1669097244192\",\n // \"updatedTime\": \"1669413126190\",\n // \"tpSlMode\": \"Full\",\n // \"riskLimitValue\": \"900000\",\n // \"activePrice\": \"0.00\"\n // }\n //\n // usdc\n // {\n // \"symbol\":\"BTCPERP\",\n // \"leverage\":\"1.00\",\n // \"occClosingFee\":\"0.0000\",\n // \"liqPrice\":\"\",\n // \"positionValue\":\"30.8100\",\n // \"takeProfit\":\"0.0\",\n // \"riskId\":\"10001\",\n // \"trailingStop\":\"0.0000\",\n // \"unrealisedPnl\":\"0.0000\",\n // \"createdAt\":\"1652451795305\",\n // \"markPrice\":\"30809.41\",\n // \"cumRealisedPnl\":\"0.0000\",\n // \"positionMM\":\"0.1541\",\n // \"positionIM\":\"30.8100\",\n // \"updatedAt\":\"1652451795305\",\n // \"tpSLMode\":\"UNKNOWN\",\n // \"side\":\"Buy\",\n // \"bustPrice\":\"\",\n // \"deleverageIndicator\":\"0\",\n // \"entryPrice\":\"30810.0\",\n // \"size\":\"0.001\",\n // \"sessionRPL\":\"0.0000\",\n // \"positionStatus\":\"NORMAL\",\n // \"sessionUPL\":\"-0.0006\",\n // \"stopLoss\":\"0.0\",\n // \"orderMargin\":\"0.0000\",\n // \"sessionAvgPrice\":\"30810.0\"\n // }\n //\n // unified margin\n //\n // {\n // \"symbol\": \"ETHUSDT\",\n // \"leverage\": \"10\",\n // \"updatedTime\": 1657711949945,\n // \"side\": \"Buy\",\n // \"positionValue\": \"536.92500000\",\n // \"takeProfit\": \"\",\n // \"tpslMode\": \"Full\",\n // \"riskId\": 11,\n // \"trailingStop\": \"\",\n // \"entryPrice\": \"1073.85000000\",\n // \"unrealisedPnl\": \"\",\n // \"markPrice\": \"1080.65000000\",\n // \"size\": \"0.5000\",\n // \"positionStatus\": \"normal\",\n // \"stopLoss\": \"\",\n // \"cumRealisedPnl\": \"-0.32215500\",\n // \"positionMM\": \"2.97456450\",\n // \"createdTime\": 1657711949928,\n // \"positionIdx\": 0,\n // \"positionIM\": \"53.98243950\"\n // }\n //\n // unified account\n //\n // {\n // \"symbol\": \"XRPUSDT\",\n // \"leverage\": \"10\",\n // \"avgPrice\": \"0.3615\",\n // \"liqPrice\": \"0.0001\",\n // \"riskLimitValue\": \"200000\",\n // \"takeProfit\": \"\",\n // \"positionValue\": \"36.15\",\n // \"tpslMode\": \"Full\",\n // \"riskId\": 41,\n // \"trailingStop\": \"0\",\n // \"unrealisedPnl\": \"-1.83\",\n // \"markPrice\": \"0.3432\",\n // \"cumRealisedPnl\": \"0.48805876\",\n // \"positionMM\": \"0.381021\",\n // \"createdTime\": \"1672121182216\",\n // \"positionIdx\": 0,\n // \"positionIM\": \"3.634521\",\n // \"updatedTime\": \"1672279322668\",\n // \"side\": \"Buy\",\n // \"bustPrice\": \"\",\n // \"size\": \"100\",\n // \"positionStatus\": \"Normal\",\n // \"stopLoss\": \"\",\n // \"tradeMode\": 0\n // }\n //\n const contract = this.safeString(position, 'symbol');\n market = this.safeMarket(contract, market, undefined, 'contract');\n const size = Precise.stringAbs(this.safeString(position, 'size'));\n let side = this.safeString(position, 'side');\n if (side !== undefined) {\n if (side === 'Buy') {\n side = 'long';\n }\n else if (side === 'Sell') {\n side = 'short';\n }\n else {\n side = undefined;\n }\n }\n const notional = this.safeString(position, 'positionValue');\n const unrealisedPnl = this.omitZero(this.safeString(position, 'unrealisedPnl'));\n let initialMarginString = this.safeString(position, 'positionIM');\n let maintenanceMarginString = this.safeString(position, 'positionMM');\n let timestamp = this.parse8601(this.safeString(position, 'updated_at'));\n if (timestamp === undefined) {\n timestamp = this.safeIntegerN(position, ['updatedTime', 'updatedAt']);\n }\n let collateralString = this.safeString(position, 'positionBalance');\n const entryPrice = this.omitZero(this.safeString2(position, 'entryPrice', 'avgPrice'));\n const liquidationPrice = this.omitZero(this.safeString(position, 'liqPrice'));\n const leverage = this.safeString(position, 'leverage');\n if (liquidationPrice !== undefined) {\n if (market['settle'] === 'USDC') {\n // (Entry price - Liq price) * Contracts + Maintenance Margin + (unrealised pnl) = Collateral\n const difference = Precise.stringAbs(Precise.stringSub(entryPrice, liquidationPrice));\n collateralString = Precise.stringAdd(Precise.stringAdd(Precise.stringMul(difference, size), maintenanceMarginString), unrealisedPnl);\n }\n else {\n const bustPrice = this.safeString(position, 'bustPrice');\n if (market['linear']) {\n // derived from the following formulas\n // (Entry price - Bust price) * Contracts = Collateral\n // (Entry price - Liq price) * Contracts = Collateral - Maintenance Margin\n // Maintenance Margin = (Bust price - Liq price) x Contracts\n const maintenanceMarginPriceDifference = Precise.stringAbs(Precise.stringSub(liquidationPrice, bustPrice));\n maintenanceMarginString = Precise.stringMul(maintenanceMarginPriceDifference, size);\n // Initial Margin = Contracts x Entry Price / Leverage\n if (entryPrice !== undefined) {\n initialMarginString = Precise.stringDiv(Precise.stringMul(size, entryPrice), leverage);\n }\n }\n else {\n // Contracts * (1 / Entry price - 1 / Bust price) = Collateral\n // Contracts * (1 / Entry price - 1 / Liq price) = Collateral - Maintenance Margin\n // Maintenance Margin = Contracts * (1 / Liq price - 1 / Bust price)\n // Maintenance Margin = Contracts * (Bust price - Liq price) / (Liq price x Bust price)\n const difference = Precise.stringAbs(Precise.stringSub(bustPrice, liquidationPrice));\n const multiply = Precise.stringMul(bustPrice, liquidationPrice);\n maintenanceMarginString = Precise.stringDiv(Precise.stringMul(size, difference), multiply);\n // Initial Margin = Leverage x Contracts / EntryPrice\n if (entryPrice !== undefined) {\n initialMarginString = Precise.stringDiv(size, Precise.stringMul(entryPrice, leverage));\n }\n }\n }\n }\n const maintenanceMarginPercentage = Precise.stringDiv(maintenanceMarginString, notional);\n const marginRatio = Precise.stringDiv(maintenanceMarginString, collateralString, 4);\n return this.safePosition({\n 'info': position,\n 'id': undefined,\n 'symbol': market['symbol'],\n 'timestamp': timestamp,\n 'datetime': this.iso8601(timestamp),\n 'lastUpdateTimestamp': undefined,\n 'initialMargin': this.parseNumber(initialMarginString),\n 'initialMarginPercentage': this.parseNumber(Precise.stringDiv(initialMarginString, notional)),\n 'maintenanceMargin': this.parseNumber(maintenanceMarginString),\n 'maintenanceMarginPercentage': this.parseNumber(maintenanceMarginPercentage),\n 'entryPrice': this.parseNumber(entryPrice),\n 'notional': this.parseNumber(notional),\n 'leverage': this.parseNumber(leverage),\n 'unrealizedPnl': this.parseNumber(unrealisedPnl),\n 'contracts': this.parseNumber(size),\n 'contractSize': this.safeNumber(market, 'contractSize'),\n 'marginRatio': this.parseNumber(marginRatio),\n 'liquidationPrice': this.parseNumber(liquidationPrice),\n 'markPrice': this.safeNumber(position, 'markPrice'),\n 'lastPrice': undefined,\n 'collateral': this.parseNumber(collateralString),\n 'marginMode': undefined,\n 'side': side,\n 'percentage': undefined,\n 'stopLossPrice': this.safeNumber2(position, 'stop_loss', 'stopLoss'),\n 'takeProfitPrice': this.safeNumber2(position, 'take_profit', 'takeProfit'),\n });\n }\n // https://bybit-exchange.github.io/docs/v5/asset/balance/all-balance\n async fetchSubAccountBalances(uid, params = {}) {\n const balancesByAccount = {};\n const [enableUnifiedMargin, enableUnifiedAccount] = await this.isUnifiedEnabled();\n const isUnifiedAccount = (enableUnifiedMargin || enableUnifiedAccount);\n if (!isUnifiedAccount) {\n throw new Error(this.id + ' getSubAccountBalances() is only supported for unified accounts');\n }\n const accountTypeKeys = ['UNIFIED', 'FUND', 'CONTRACT'];\n const promises = accountTypeKeys.map((accountType) => this.fetchBalance({ 'type': accountType, 'memberId': uid })\n .then((response) => {\n const tokenSymbols = Object.keys(response);\n const balances = {};\n for (let j = 0; j < tokenSymbols.length; j++) {\n const tokenSymbol = tokenSymbols[j];\n balances[tokenSymbol] = response[tokenSymbol];\n }\n return { accountType, balances };\n })\n .catch((e) => ({ accountType, 'balances': null, 'error': e })));\n const results = await Promise.allSettled(promises);\n results.forEach((result) => {\n if (result.status === 'fulfilled' && result.value.balances) {\n const { accountType, balances } = result.value;\n if (!(accountType in balancesByAccount)) {\n balancesByAccount[accountType] = {};\n }\n Object.assign(balancesByAccount[accountType], balances);\n }\n });\n return balancesByAccount;\n }\n // https://bybit-exchange.github.io/docs/account-asset/sub-uid-list\n async getSubAccounts() {\n await this.loadMarkets();\n const response = await this.privateGetAssetV3PrivateTransferSubMemberListQuery();\n // {\n // \"retCode\": 0,\n // \"retMsg\": \"success\",\n // \"result\": {\n // \"subMemberIds\": [\n // \"111111\",\n // \"2222222\",\n // \"3333333\"\n // ],\n // \"transferableSubMemberIds\": [\n // \"111111\",\n // \"2222222\",\n // \"3333333\"\n // ]\n // },\n // \"retExtInfo\": {},\n // \"time\": 1670928352175\n // }\n const result = this.safeValue(response, 'result', {});\n const uids = this.safeValue(result, 'subMemberIds', []);\n return uids?.map((subAccount) => ({\n 'uid': subAccount,\n }));\n }\n async subAccountTransfer(code, amount, fromAccountType, toAccountType, fromUid, toUid, params = {}) {\n await this.loadMarkets();\n const transferId = this.safeString(params, 'transferId', this.uuid());\n const accountTypes = this.safeValue(this.options, 'accountsByType', {});\n let fromAccountTypeExternal = this.safeString(accountTypes, fromAccountType, fromAccountType);\n let toAccountTypeExternal = this.safeString(accountTypes, toAccountType, toAccountType);\n const [enableUnifiedMargin, enableUnifiedAccount] = await this.isUnifiedEnabled();\n const isUnifiedAccount = (enableUnifiedMargin || enableUnifiedAccount);\n // Bybit unified account doesn't have spot - instead it's called unified\n if (isUnifiedAccount) {\n if (fromAccountTypeExternal === 'SPOT')\n fromAccountTypeExternal = 'UNIFIED';\n if (toAccountTypeExternal === 'SPOT')\n toAccountTypeExternal = 'UNIFIED';\n }\n const currency = this.currency(code);\n const amountToPrecision = this.currencyToPrecision(code, amount);\n const request = {\n 'transferId': transferId,\n 'fromAccountType': fromAccountTypeExternal,\n 'toAccountType': toAccountTypeExternal,\n 'coin': currency['id'],\n 'amount': amountToPrecision,\n 'fromMemberId': fromUid,\n 'toMemberId': toUid,\n };\n const response = await this.privatePostV5AssetTransferUniversalTransfer(this.extend(request, params));\n //\n // {\n // \"retCode\": 0,\n // \"retMsg\": \"success\",\n // \"result\": {\n // \"transferId\": \"4244af44-f3b0-4cf6-a743-b56560e987bc\"\n // },\n // \"retExtInfo\": {},\n // \"time\": 1666875857205\n // }\n //\n const timestamp = this.safeInteger(response, 'time');\n const transfer = this.safeValue(response, 'result', {});\n const statusRaw = this.safeStringN(response, ['retCode', 'retMsg']);\n const status = this.parseTransferStatus(statusRaw);\n return this.extend(this.parseTransfer(transfer, currency), {\n 'timestamp': timestamp,\n 'datetime': this.iso8601(timestamp),\n 'amount': this.parseNumber(amountToPrecision),\n 'fromAccount': fromAccountType,\n 'toAccount': toAccountType,\n 'fromUid': fromUid,\n 'toUid': toUid,\n 'status': status,\n });\n }\n async transfer(code, amount, fromAccount, toAccount, params = {}) {\n /**\n * @method\n * @name bybit#transfer\n * @description transfer currency internally between wallets on the same account\n * @see https://bybit-exchange.github.io/docs/v5/asset/create-inter-transfer\n * @param {string} code unified currency code\n * @param {float} amount amount to transfer\n * @param {string} fromAccount account to transfer from\n * @param {string} toAccount account to transfer to\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {string} [params.transferId] UUID, which is unique across the platform\n * @returns {object} a [transfer structure]{@link https://docs.ccxt.com/#/?id=transfer-structure}\n */\n await this.loadMarkets();\n const transferId = this.safeString(params, 'transferId', this.uuid());\n const accountTypes = this.safeValue(this.options, 'accountsByType', {});\n let fromId = this.safeString(accountTypes, fromAccount, fromAccount);\n let toId = this.safeString(accountTypes, toAccount, toAccount);\n const [enableUnifiedMargin, enableUnifiedAccount] = await this.isUnifiedEnabled();\n const isUnifiedAccount = (enableUnifiedMargin || enableUnifiedAccount);\n // Bybit unified account doesn't have spot - instead it's called unified\n if (isUnifiedAccount) {\n if (fromId === 'SPOT')\n fromId = 'UNIFIED';\n if (toId === 'SPOT')\n toId = 'UNIFIED';\n }\n const currency = this.currency(code);\n const amountToPrecision = this.currencyToPrecision(code, amount);\n const request = {\n 'transferId': transferId,\n 'fromAccountType': fromId,\n 'toAccountType': toId,\n 'coin': currency['id'],\n 'amount': amountToPrecision,\n };\n const response = await this.privatePostV5AssetTransferInterTransfer(this.extend(request, params));\n //\n // {\n // \"retCode\": 0,\n // \"retMsg\": \"success\",\n // \"result\": {\n // \"transferId\": \"4244af44-f3b0-4cf6-a743-b56560e987bc\"\n // },\n // \"retExtInfo\": {},\n // \"time\": 1666875857205\n // }\n //\n const timestamp = this.safeInteger(response, 'time');\n const transfer = this.safeValue(response, 'result', {});\n const statusRaw = this.safeStringN(response, ['retCode', 'retMsg']);\n const status = this.parseTransferStatus(statusRaw);\n return this.extend(this.parseTransfer(transfer, currency), {\n 'timestamp': timestamp,\n 'datetime': this.iso8601(timestamp),\n 'amount': this.parseNumber(amountToPrecision),\n 'fromAccount': fromAccount,\n 'toAccount': toAccount,\n 'status': status,\n });\n }\n async fetchTransfers(code = undefined, since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name bybit#fetchTransfers\n * @description fetch a history of internal transfers made on an account\n * @see https://bybit-exchange.github.io/docs/v5/asset/inter-transfer-list\n * @param {string} code unified currency code of the currency transferred\n * @param {int} [since] the earliest time in ms to fetch transfers for\n * @param {int} [limit] the maximum number of transfer structures to retrieve\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {int} [params.until] the latest time in ms to fetch entries for\n * @param {boolean} [params.paginate] default false, when true will automatically paginate by calling this endpoint multiple times. See in the docs all the [availble parameters](https://github.com/ccxt/ccxt/wiki/Manual#pagination-params)\n * @returns {object[]} a list of [transfer structures]{@link https://docs.ccxt.com/#/?id=transfer-structure}\n */\n await this.loadMarkets();\n let paginate = false;\n [paginate, params] = this.handleOptionAndParams(params, 'fetchTransfers', 'paginate');\n if (paginate) {\n return await this.fetchPaginatedCallCursor('fetchTransfers', code, since, limit, params, 'nextPageCursor', 'nextPageCursor', undefined, 50);\n }\n let currency = undefined;\n let request = {};\n if (code !== undefined) {\n currency = this.safeCurrencyCode(code);\n request['coin'] = currency;\n }\n if (since !== undefined) {\n request['startTime'] = since;\n }\n if (limit !== undefined) {\n request['limit'] = limit;\n }\n [request, params] = this.handleUntilOption('endTime', request, params);\n const response = await this.privateGetV5AssetTransferQueryInterTransferList(this.extend(request, params));\n //\n // {\n // \"retCode\": 0,\n // \"retMsg\": \"success\",\n // \"result\": {\n // \"list\": [\n // {\n // \"transferId\": \"selfTransfer_a1091cc7-9364-4b74-8de1-18f02c6f2d5c\",\n // \"coin\": \"USDT\",\n // \"amount\": \"5000\",\n // \"fromAccountType\": \"SPOT\",\n // \"toAccountType\": \"UNIFIED\",\n // \"timestamp\": \"1667283263000\",\n // \"status\": \"SUCCESS\"\n // }\n // ],\n // \"nextPageCursor\": \"eyJtaW5JRCI6MTM1ODQ2OCwibWF4SUQiOjEzNTg0Njh9\"\n // },\n // \"retExtInfo\": {},\n // \"time\": 1670988271677\n // }\n //\n const data = this.addPaginationCursorToResult(response);\n return this.parseTransfers(data, currency, since, limit);\n }\n parseTransferStatus(status) {\n const statuses = {\n '0': 'ok',\n 'OK': 'ok',\n 'SUCCESS': 'ok',\n };\n return this.safeString(statuses, status, status);\n }\n parseTransfer(transfer, currency = undefined) {\n //\n // transfer\n //\n // {\n // \"transferId\": \"22c2bc11-ed5b-49a4-8647-c4e0f5f6f2b2\"\n // }\n //\n // fetchTransfers\n //\n // {\n // \"transferId\": \"e9c421c4-b010-4b16-abd6-106179f27702\",\n // \"coin\": \"USDT\",\n // \"amount\": \"8\",\n // \"fromAccountType\": \"FUND\",\n // \"toAccountType\": \"SPOT\",\n // \"timestamp\": \"1666879426000\",\n // \"status\": \"SUCCESS\"\n // }\n //\n const currencyId = this.safeString(transfer, 'coin');\n const timestamp = this.safeInteger(transfer, 'timestamp');\n const fromAccountId = this.safeString(transfer, 'fromAccountType');\n const toAccountId = this.safeString(transfer, 'toAccountType');\n const accountIds = this.safeValue(this.options, 'accountsById', {});\n const fromAccount = this.safeString(accountIds, fromAccountId, fromAccountId);\n const toAccount = this.safeString(accountIds, toAccountId, toAccountId);\n return {\n 'info': transfer,\n 'id': this.safeString(transfer, 'transferId'),\n 'timestamp': timestamp,\n 'datetime': this.iso8601(timestamp),\n 'currency': this.safeCurrencyCode(currencyId, currency),\n 'amount': this.safeNumber(transfer, 'amount'),\n 'fromAccount': fromAccount,\n 'toAccount': toAccount,\n 'status': this.parseTransferStatus(this.safeString(transfer, 'status')),\n };\n }\n parseTradingFee(fee, market = undefined) {\n //\n // {\n // \"symbol\": \"ETHUSDT\",\n // \"makerFeeRate\": 0.001,\n // \"takerFeeRate\": 0.001\n // }\n //\n const marketId = this.safeString(fee, 'symbol');\n const symbol = this.safeSymbol(marketId, undefined, undefined, 'contract');\n return {\n 'info': fee,\n 'symbol': symbol,\n 'maker': this.safeNumber(fee, 'makerFeeRate'),\n 'taker': this.safeNumber(fee, 'takerFeeRate'),\n };\n }\n async fetchTradingFee(symbol, params = {}) {\n /**\n * @method\n * @name bybit#fetchTradingFee\n * @description fetch the trading fees for a market\n * @see https://bybit-exchange.github.io/docs/v5/account/fee-rate\n * @param {string} symbol unified market symbol\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} a [fee structure]{@link https://docs.ccxt.com/#/?id=fee-structure}\n */\n await this.loadMarkets();\n const market = this.market(symbol);\n if (market['spot']) {\n throw new MarketTypeNotSupportedError('spot').exchange(this.id);\n }\n const request = {\n 'symbol': market['id'],\n };\n const response = await this.privateGetV5AccountFeeRate(this.extend(request, params));\n //\n // {\n // \"retCode\": 0,\n // \"retMsg\": \"OK\",\n // \"result\": {\n // \"list\": [\n // {\n // \"symbol\": \"ETHUSDT\",\n // \"takerFeeRate\": \"0.0006\",\n // \"makerFeeRate\": \"0.0001\"\n // }\n // ]\n // },\n // \"retExtInfo\": {},\n // \"time\": 1676360412576\n // }\n //\n const result = this.safeValue(response, 'result', {});\n const fees = this.safeValue(result, 'list', []);\n const first = this.safeValue(fees, 0, {});\n return this.parseTradingFee(first);\n }\n async fetchTradingFees(params = {}) {\n /**\n * @method\n * @name bybit#fetchTradingFees\n * @description fetch the trading fees for multiple markets\n * @see https://bybit-exchange.github.io/docs/v5/account/fee-rate\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {string} [params.type] market type, ['swap', 'option', 'spot']\n * @returns {object} a dictionary of [fee structures]{@link https://docs.ccxt.com/#/?id=fee-structure} indexed by market symbols\n */\n await this.loadMarkets();\n let type = undefined;\n [type, params] = this.handleOptionAndParams(params, 'fetchTradingFees', 'type', 'future');\n if (type === 'spot') {\n throw new ExchangeNotAllowedMethodError('fetchTradingFees')\n .addMessage('It is not supported for spot market')\n .exchange(this.id);\n }\n const response = await this.privateGetV5AccountFeeRate(params);\n //\n // {\n // \"retCode\": 0,\n // \"retMsg\": \"OK\",\n // \"result\": {\n // \"list\": [\n // {\n // \"symbol\": \"ETHUSDT\",\n // \"takerFeeRate\": \"0.0006\",\n // \"makerFeeRate\": \"0.0001\"\n // }\n // ]\n // },\n // \"retExtInfo\": {},\n // \"time\": 1676360412576\n // }\n //\n let fees = this.safeValue(response, 'result', {});\n fees = this.safeValue(fees, 'list', []);\n const result = {};\n for (let i = 0; i < fees.length; i++) {\n const fee = this.parseTradingFee(fees[i]);\n const symbol = fee['symbol'];\n result[symbol] = fee;\n }\n return result;\n }\n parseDepositWithdrawFee(fee, currency = undefined) {\n //\n // {\n // \"name\": \"BTC\",\n // \"coin\": \"BTC\",\n // \"remainAmount\": \"150\",\n // \"chains\": [\n // {\n // \"chainType\": \"BTC\",\n // \"confirmation\": \"10000\",\n // \"withdrawFee\": \"0.0005\",\n // \"depositMin\": \"0.0005\",\n // \"withdrawMin\": \"0.001\",\n // \"chain\": \"BTC\",\n // \"chainDeposit\": \"1\",\n // \"chainWithdraw\": \"1\",\n // \"minAccuracy\": \"8\"\n // }\n // ]\n // }\n //\n const chains = this.safeValue(fee, 'chains', []);\n const chainsLength = chains.length;\n const result = {\n 'info': fee,\n 'withdraw': {\n 'fee': undefined,\n 'percentage': undefined,\n },\n 'deposit': {\n 'fee': undefined,\n 'percentage': undefined,\n },\n 'networks': {},\n };\n if (chainsLength !== 0) {\n for (let i = 0; i < chainsLength; i++) {\n const chain = chains[i];\n const networkId = this.safeString(chain, 'chain');\n const currencyCode = this.safeString(currency, 'code');\n const networkCode = this.networkIdToCode(networkId, currencyCode);\n result['networks'][networkCode] = {\n 'deposit': { 'fee': undefined, 'percentage': undefined },\n 'withdraw': { 'fee': this.safeNumber(chain, 'withdrawFee'), 'percentage': false },\n };\n if (chainsLength === 1) {\n result['withdraw']['fee'] = this.safeNumber(chain, 'withdrawFee');\n result['withdraw']['percentage'] = false;\n }\n }\n }\n return result;\n }\n async fetchDepositWithdrawFees(codes = undefined, params = {}) {\n /**\n * @method\n * @name bybit#fetchDepositWithdrawFees\n * @description fetch deposit and withdraw fees\n * @see https://bybit-exchange.github.io/docs/v5/asset/coin-info\n * @param {string[]} codes list of unified currency codes\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} a list of [fee structures]{@link https://docs.ccxt.com/#/?id=fee-structure}\n */\n this.checkRequiredCredentials();\n await this.loadMarkets();\n const response = await this.privateGetV5AssetCoinQueryInfo(params);\n //\n // {\n // \"retCode\": 0,\n // \"retMsg\": \"\",\n // \"result\": {\n // \"rows\": [\n // {\n // \"name\": \"BTC\",\n // \"coin\": \"BTC\",\n // \"remainAmount\": \"150\",\n // \"chains\": [\n // {\n // \"chainType\": \"BTC\",\n // \"confirmation\": \"10000\",\n // \"withdrawFee\": \"0.0005\",\n // \"depositMin\": \"0.0005\",\n // \"withdrawMin\": \"0.001\",\n // \"chain\": \"BTC\",\n // \"chainDeposit\": \"1\",\n // \"chainWithdraw\": \"1\",\n // \"minAccuracy\": \"8\"\n // }\n // ]\n // }\n // ]\n // },\n // \"retExtInfo\": {},\n // \"time\": 1672194582264\n // }\n //\n const data = this.safeValue(response, 'result', {});\n const rows = this.safeValue(data, 'rows', []);\n return this.parseDepositWithdrawFees(rows, codes, 'coin');\n }\n async sign(path, api = 'public', method = 'GET', params = {}, headers = undefined, body = undefined) {\n let url = this.implodeHostname(this.urls['api'][api]) + '/' + path;\n if (api === 'public') {\n if (Object.keys(params).length) {\n url += '?' + this.rawencode(params);\n }\n }\n else if (api === 'private') {\n this.checkRequiredCredentials();\n const isOpenapi = url.indexOf('openapi') >= 0;\n const isV3UnifiedMargin = url.indexOf('unified/v3') >= 0;\n const isV3Contract = url.indexOf('contract/v3') >= 0;\n const isV5UnifiedAccount = url.indexOf('v5') >= 0;\n const timestamp = this.nonce().toString();\n if (isOpenapi) {\n if (Object.keys(params).length) {\n body = this.json(params);\n }\n else {\n // this fix for PHP is required otherwise it generates\n // '[]' on empty arrays even when forced to use objects\n body = '{}';\n }\n const payload = timestamp + this.apiKey + body;\n let signature = undefined;\n if (this.externalSigner) {\n signature = await this.externalSigner.sign({\n 'payload': this.encode(payload),\n 'publicApiKey': this.apiKey,\n 'exchangeId': this.id,\n 'opts': {\n 'digest': 'hex',\n },\n });\n }\n else {\n signature = this.hmac(this.encode(payload), this.encode(this.secret), sha256, 'hex');\n }\n headers = {\n 'Content-Type': 'application/json',\n 'X-BAPI-API-KEY': this.apiKey,\n 'X-BAPI-TIMESTAMP': timestamp,\n 'X-BAPI-SIGN': signature,\n };\n }\n else if (isV3UnifiedMargin || isV3Contract || isV5UnifiedAccount) {\n headers = {\n 'Content-Type': 'application/json',\n 'X-BAPI-API-KEY': this.apiKey,\n 'X-BAPI-TIMESTAMP': timestamp,\n 'X-BAPI-RECV-WINDOW': this.options['recvWindow'].toString(),\n };\n if (isV3UnifiedMargin || isV3Contract) {\n headers['X-BAPI-SIGN-TYPE'] = '2';\n }\n const query = this.extend({}, params);\n const queryEncoded = this.rawencode(query);\n const auth_base = timestamp.toString() + this.apiKey + this.options['recvWindow'].toString();\n let authFull = undefined;\n if (method === 'POST') {\n body = this.json(query);\n authFull = auth_base + body;\n }\n else {\n authFull = auth_base + queryEncoded;\n url += '?' + this.rawencode(query);\n }\n let signature = undefined;\n if (this.secret && this.secret.indexOf('PRIVATE KEY') > -1) {\n signature = rsa(authFull, this.secret, sha256);\n }\n else {\n if (this.externalSigner) {\n signature = await this.externalSigner.sign({\n 'payload': this.encode(authFull),\n 'publicApiKey': this.apiKey,\n 'exchangeId': this.id,\n });\n }\n else {\n signature = this.hmac(this.encode(authFull), this.encode(this.secret), sha256);\n }\n }\n headers['X-BAPI-SIGN'] = signature;\n }\n else {\n const query = this.extend(params, {\n 'api_key': this.apiKey,\n 'recv_window': this.options['recvWindow'],\n 'timestamp': timestamp,\n });\n const sortedQuery = this.keysort(query);\n const auth = this.rawencode(sortedQuery);\n let signature = undefined;\n if (this.secret && this.secret.indexOf('PRIVATE KEY') > -1) {\n signature = rsa(auth, this.secret, sha256);\n }\n else {\n if (this.externalSigner) {\n signature = await this.externalSigner.sign({\n 'payload': this.encode(auth),\n 'publicApiKey': this.apiKey,\n 'exchangeId': this.id,\n });\n }\n else {\n signature = this.hmac(this.encode(auth), this.encode(this.secret), sha256);\n }\n }\n if (method === 'POST') {\n const isSpot = url.indexOf('spot') >= 0;\n const extendedQuery = this.extend(query, {\n 'sign': signature,\n });\n if (isSpot) {\n body = this.urlencode(extendedQuery);\n headers = {\n 'Content-Type': 'application/x-www-form-urlencoded',\n };\n }\n else {\n body = this.json(extendedQuery);\n headers = {\n 'Content-Type': 'application/json',\n };\n }\n }\n else {\n url += '?' + this.rawencode(sortedQuery);\n url += '&sign=' + signature;\n }\n }\n }\n if (method === 'POST') {\n const brokerId = this.safeString(this.options, 'brokerId');\n if (brokerId !== undefined) {\n headers['Referer'] = brokerId;\n }\n }\n return { 'url': url, 'method': method, 'body': body, 'headers': headers };\n }\n handleErrors(httpCode, reason, url, method, headers, body, response, requestHeaders, requestBody) {\n if (!response) {\n return undefined; // fallback to default error handler\n }\n //\n // {\n // \"ret_code\": 10001,\n // \"ret_msg\": \"ReadMapCB: expect { or n, but found \\u0000, error \" +\n // \"found in #0 byte of ...||..., bigger context \" +\n // \"...||...\",\n // \"ext_code\": '',\n // \"ext_info\": '',\n // \"result\": null,\n // \"time_now\": \"1583934106.590436\"\n // }\n //\n // {\n // \"retCode\":10001,\n // \"retMsg\":\"symbol params err\",\n // \"result\":{\"symbol\":\"\",\"bid\":\"\",\"bidIv\":\"\",\"bidSize\":\"\",\"ask\":\"\",\"askIv\":\"\",\"askSize\":\"\",\"lastPrice\":\"\",\"openInterest\":\"\",\"indexPrice\":\"\",\"markPrice\":\"\",\"markPriceIv\":\"\",\"change24h\":\"\",\"high24h\":\"\",\"low24h\":\"\",\"volume24h\":\"\",\"turnover24h\":\"\",\"totalVolume\":\"\",\"totalTurnover\":\"\",\"fundingRate\":\"\",\"predictedFundingRate\":\"\",\"nextFundingTime\":\"\",\"countdownHour\":\"0\",\"predictedDeliveryPrice\":\"\",\"underlyingPrice\":\"\",\"delta\":\"\",\"gamma\":\"\",\"vega\":\"\",\"theta\":\"\"}\n // }\n //\n const errorCode = this.safeString2(response, 'ret_code', 'retCode');\n if (errorCode !== '0') {\n if (errorCode === '30084') {\n // not an error\n // https://github.com/ccxt/ccxt/issues/11268\n // https://github.com/ccxt/ccxt/pull/11624\n // POST https://api.bybit.com/v2/private/position/switch-isolated 200 OK\n // {\"ret_code\":30084,\"ret_msg\":\"Isolated not modified\",\"ext_code\":\"\",\"ext_info\":\"\",\"result\":null,\"time_now\":\"1642005219.937988\",\"rate_limit_status\":73,\"rate_limit_reset_ms\":1642005219894,\"rate_limit\":75}\n return undefined;\n }\n const message = this.safeString2(response, 'ret_msg', 'retMsg');\n let userMessage;\n if (errorCode === '10005' && url.indexOf('order') < 0) {\n userMessage = errorCode + ': Private api uses /user/v3/private/query-api to check if you have a unified account. The API key of user id must own one of permissions: \"Account Transfer\", \"Subaccount Transfer\", \"Withdrawal\" ';\n }\n else {\n userMessage = errorCode + ': ' + message;\n }\n this.throwBroadlyMatchedException(this.exceptions['broad'], body, userMessage);\n this.throwExactlyMatchedException(this.exceptions['exact'], errorCode, userMessage);\n throw new ExchangeError().addMessage(userMessage).exchange(this.id); // unknown message\n }\n return undefined;\n }\n}\n","// ----------------------------------------------------------------------------\n\n// PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:\n// https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code\n// EDIT THE CORRESPONDENT .ts FILE INSTEAD\n\n// ----------------------------------------------------------------------------\nimport Exchange from './abstract/coinbase.js';\nimport { Precise } from './base/Precise.js';\nimport { TICK_SIZE } from './base/functions/number.js';\nimport { jwt } from './base/functions/rsa.js';\nimport { AuthenticationError, CreateDepositAddressError, ExchangeError, ExchangeInvalidNonceError, ExchangeRateLimitExceededError, InsufficientBalanceError, InvalidParamsError, MarketTypeNotSupportedError, OrderNotFoundError, TokenSymbolNotFoundError, TradeError } from './sdk/errors.js';\nimport { sha256 } from './static_dependencies/noble-hashes/sha256.js';\n// ----------------------------------------------------------------------------\n/**\n * @class coinbase\n * @augments Exchange\n */\nexport default class coinbase extends Exchange {\n describe() {\n return this.deepExtend(super.describe(), {\n 'id': 'coinbase',\n 'name': 'Coinbase',\n 'countries': ['US'],\n 'pro': true,\n 'rateLimit': 400,\n 'version': 'v2',\n 'userAgent': this.userAgents['chrome'],\n 'headers': {\n 'CB-VERSION': '2018-05-30',\n },\n 'has': {\n 'CORS': true,\n 'spot': true,\n 'margin': false,\n 'swap': false,\n 'future': false,\n 'option': false,\n 'cancelOrder': true,\n 'cancelOrders': true,\n 'createDepositAddress': true,\n 'createLimitBuyOrder': true,\n 'createLimitSellOrder': true,\n 'createMarketBuyOrder': true,\n 'createMarketBuyOrderWithCost': true,\n 'createMarketOrderWithCost': false,\n 'createMarketSellOrder': true,\n 'createMarketSellOrderWithCost': false,\n 'createOrder': true,\n 'editOrder': true,\n 'fetchAccounts': true,\n 'fetchBalance': true,\n 'fetchCanceledOrders': true,\n 'fetchClosedOrders': true,\n 'fetchCurrencies': true,\n 'fetchDeposits': true,\n 'fetchL2OrderBook': false,\n 'fetchLedger': true,\n 'fetchMarkets': true,\n 'fetchMyBuys': true,\n 'fetchMySells': true,\n 'fetchMyTrades': true,\n 'fetchOHLCV': true,\n 'fetchOpenOrders': true,\n 'fetchOrder': true,\n 'fetchOrderBook': true,\n 'fetchOrders': true,\n 'fetchPosition': false,\n 'fetchPositions': false,\n 'fetchPositionsRisk': false,\n 'fetchTicker': true,\n 'fetchTickers': true,\n 'fetchTime': true,\n 'fetchTrades': true,\n 'fetchTradingFee': false,\n 'fetchTradingFees': false,\n 'fetchWithdrawals': true,\n 'withdraw': true,\n },\n 'urls': {\n 'logo': 'https://user-images.githubusercontent.com/1294454/40811661-b6eceae2-653a-11e8-829e-10bfadb078cf.jpg',\n 'api': {\n 'rest': 'https://api.coinbase.com',\n },\n 'www': 'https://www.coinbase.com',\n 'doc': [\n 'https://developers.coinbase.com/api/v2',\n 'https://docs.cloud.coinbase.com/advanced-trade-api/docs/welcome',\n ],\n 'fees': [\n 'https://support.coinbase.com/customer/portal/articles/2109597-buy-sell-bank-transfer-fees',\n 'https://www.coinbase.com/advanced-fees',\n ],\n // https://www.coinbase.com/join/58cbe25a355148797479dbd2 - I removed the code for now, because CWS is blocking until we explain our affiliate program to our users\n 'referral': 'https://www.coinbase.com',\n },\n 'requiredCredentials': {\n 'apiKey': true,\n 'secret': true,\n },\n 'api': {\n 'v2': {\n 'public': {\n 'get': [\n 'currencies',\n 'currencies/crypto',\n 'time',\n 'exchange-rates',\n 'users/{user_id}',\n 'prices/{symbol}/buy',\n 'prices/{symbol}/sell',\n 'prices/{symbol}/spot',\n ],\n },\n 'private': {\n 'get': [\n 'accounts',\n 'accounts/{account_id}',\n 'accounts/{account_id}/addresses',\n 'accounts/{account_id}/addresses/{address_id}',\n 'accounts/{account_id}/addresses/{address_id}/transactions',\n 'accounts/{account_id}/transactions',\n 'accounts/{account_id}/transactions/{transaction_id}',\n 'accounts/{account_id}/buys',\n 'accounts/{account_id}/buys/{buy_id}',\n 'accounts/{account_id}/sells',\n 'accounts/{account_id}/sells/{sell_id}',\n 'accounts/{account_id}/deposits',\n 'accounts/{account_id}/deposits/{deposit_id}',\n 'accounts/{account_id}/withdrawals',\n 'accounts/{account_id}/withdrawals/{withdrawal_id}',\n 'payment-methods',\n 'payment-methods/{payment_method_id}',\n 'user',\n 'user/auth',\n ],\n 'post': [\n 'accounts',\n 'accounts/{account_id}/primary',\n 'accounts/{account_id}/addresses',\n 'accounts/{account_id}/transactions',\n 'accounts/{account_id}/transactions/{transaction_id}/complete',\n 'accounts/{account_id}/transactions/{transaction_id}/resend',\n 'accounts/{account_id}/buys',\n 'accounts/{account_id}/buys/{buy_id}/commit',\n 'accounts/{account_id}/sells',\n 'accounts/{account_id}/sells/{sell_id}/commit',\n 'accounts/{account_id}/deposits',\n 'accounts/{account_id}/deposits/{deposit_id}/commit',\n 'accounts/{account_id}/withdrawals',\n 'accounts/{account_id}/withdrawals/{withdrawal_id}/commit',\n ],\n 'put': [\n 'accounts/{account_id}',\n 'user',\n ],\n 'delete': [\n 'accounts/{id}',\n 'accounts/{account_id}/transactions/{transaction_id}',\n ],\n },\n },\n 'v3': {\n 'public': {\n 'get': [\n 'brokerage/time',\n ],\n },\n 'private': {\n 'get': [\n 'brokerage/accounts',\n 'brokerage/accounts/{account_uuid}',\n 'brokerage/orders/historical/batch',\n 'brokerage/orders/historical/fills',\n 'brokerage/orders/historical/{order_id}',\n 'brokerage/products',\n 'brokerage/products/{product_id}',\n 'brokerage/products/{product_id}/candles',\n 'brokerage/products/{product_id}/ticker',\n 'brokerage/portfolios',\n 'brokerage/portfolios/{portfolio_uuid}',\n 'brokerage/transaction_summary',\n 'brokerage/product_book',\n 'brokerage/best_bid_ask',\n 'brokerage/convert/trade/{trade_id}',\n 'brokerage/cfm/balance_summary',\n 'brokerage/cfm/positions',\n 'brokerage/cfm/positions/{product_id}',\n 'brokerage/cfm/sweeps',\n 'brokerage/intx/portfolio/{portfolio_uuid}',\n 'brokerage/intx/positions/{portfolio_uuid}',\n 'brokerage/intx/positions/{portfolio_uuid}/{symbol}',\n ],\n 'post': [\n 'brokerage/orders',\n 'brokerage/orders/batch_cancel',\n 'brokerage/orders/edit',\n 'brokerage/orders/edit_preview',\n 'brokerage/orders/preview',\n 'brokerage/portfolios',\n 'brokerage/portfolios/move_funds',\n 'brokerage/convert/quote',\n 'brokerage/convert/trade/{trade_id}',\n 'brokerage/cfm/sweeps/schedule',\n 'brokerage/intx/allocate',\n ],\n 'put': [\n 'brokerage/portfolios/{portfolio_uuid}',\n ],\n 'delete': [\n 'brokerage/portfolios/{portfolio_uuid}',\n 'brokerage/cfm/sweeps',\n ],\n },\n },\n },\n 'fees': {\n 'trading': {\n 'taker': this.parseNumber('0.006'),\n 'maker': this.parseNumber('0.004'),\n 'tierBased': true,\n 'percentage': true,\n 'tiers': {\n 'taker': [\n [this.parseNumber('0'), this.parseNumber('0.006')],\n [this.parseNumber('10000'), this.parseNumber('0.004')],\n [this.parseNumber('50000'), this.parseNumber('0.0025')],\n [this.parseNumber('100000'), this.parseNumber('0.002')],\n [this.parseNumber('1000000'), this.parseNumber('0.0018')],\n [this.parseNumber('15000000'), this.parseNumber('0.0016')],\n [this.parseNumber('75000000'), this.parseNumber('0.0012')],\n [this.parseNumber('250000000'), this.parseNumber('0.0008')],\n [this.parseNumber('400000000'), this.parseNumber('0.0005')],\n ],\n 'maker': [\n [this.parseNumber('0'), this.parseNumber('0.004')],\n [this.parseNumber('10000'), this.parseNumber('0.0025')],\n [this.parseNumber('50000'), this.parseNumber('0.0015')],\n [this.parseNumber('100000'), this.parseNumber('0.001')],\n [this.parseNumber('1000000'), this.parseNumber('0.0008')],\n [this.parseNumber('15000000'), this.parseNumber('0.0006')],\n [this.parseNumber('75000000'), this.parseNumber('0.0003')],\n [this.parseNumber('250000000'), this.parseNumber('0.0')],\n [this.parseNumber('400000000'), this.parseNumber('0.0')],\n ],\n },\n },\n },\n 'precisionMode': TICK_SIZE,\n 'exceptions': {\n 'exact': {\n 'two_factor_required': AuthenticationError,\n 'param_required': InvalidParamsError,\n 'validation_error': ExchangeError,\n 'invalid_request': InvalidParamsError,\n 'personal_details_required': AuthenticationError,\n 'identity_verification_required': AuthenticationError,\n 'jumio_verification_required': AuthenticationError,\n 'jumio_face_match_verification_required': AuthenticationError,\n 'unverified_email': AuthenticationError,\n 'authentication_error': AuthenticationError,\n 'invalid_authentication_method': AuthenticationError,\n 'invalid_token': AuthenticationError,\n 'revoked_token': AuthenticationError,\n 'expired_token': AuthenticationError,\n 'invalid_scope': AuthenticationError,\n 'not_found': ExchangeError,\n 'rate_limit_exceeded': ExchangeRateLimitExceededError,\n 'internal_server_error': ExchangeError,\n 'UNSUPPORTED_ORDER_CONFIGURATION': TradeError,\n 'INSUFFICIENT_FUND': InsufficientBalanceError,\n },\n 'broad': {\n 'request timestamp expired': ExchangeInvalidNonceError,\n 'order with this orderID was not found': OrderNotFoundError, // {\"error\":\"unknown\",\"error_details\":\"order with this orderID was not found\",\"message\":\"order with this orderID was not found\"}\n },\n },\n 'timeframes': {\n '1m': 'ONE_MINUTE',\n '5m': 'FIVE_MINUTE',\n '15m': 'FIFTEEN_MINUTE',\n '30m': 'THIRTY_MINUTE',\n '1h': 'ONE_HOUR',\n '2h': 'TWO_HOUR',\n '6h': 'SIX_HOUR',\n '1d': 'ONE_DAY',\n },\n 'options': {\n 'stablePairs': ['BUSD-USD', 'CBETH-ETH', 'DAI-USD', 'GUSD-USD', 'GYEN-USD', 'PAX-USD', 'PAX-USDT', 'USDC-EUR', 'USDC-GBP', 'USDT-EUR', 'USDT-GBP', 'USDT-USD', 'USDT-USDC', 'WBTC-BTC'],\n 'fetchCurrencies': {\n 'expires': 5000,\n },\n 'accounts': [\n 'wallet',\n 'fiat',\n // 'vault',\n ],\n 'v3Accounts': [\n 'ACCOUNT_TYPE_CRYPTO',\n 'ACCOUNT_TYPE_FIAT',\n ],\n 'createMarketBuyOrderRequiresPrice': true,\n 'advanced': true,\n 'fetchMarkets': 'fetchMarketsV3',\n 'fetchTicker': 'fetchTickerV3',\n 'fetchTickers': 'fetchTickersV3',\n 'fetchAccounts': 'fetchAccountsV3',\n 'fetchBalance': 'v2PrivateGetAccounts',\n 'user_native_currency': 'USD', // needed to get fees for v3\n },\n });\n }\n async fetchStatus(params = {}) {\n /**\n * @method\n * @name coinbase#fetchStatus\n * @description the latest known information on the availability of the exchange API - coinbase does not have such an endpoint, so we fetch the server time to see if the exchange is able to respond\n * @see https://docs.cloud.coinbase.com/advanced-trade-api/reference/retailbrokerageapi_getservertime\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} a [status structure]{@link https://docs.ccxt.com/#/?id=exchange-status-structure}\n */\n const response = await this.v3PublicGetBrokerageTime(params);\n // {\n // \"iso\": \"2023-11-28T00:00:22Z\",\n // \"epochSeconds\": \"1701129622\",\n // \"epochMillis\": \"1701129622115\"\n // }\n const iso = this.safeString(response, 'iso');\n const serverTime = this.parse8601(iso);\n const status = serverTime !== undefined ? 'ok' : 'maintenance';\n return {\n 'status': status,\n 'updated': serverTime,\n 'eta': undefined,\n 'url': undefined,\n 'info': response,\n };\n }\n async fetchTime(params = {}) {\n /**\n * @method\n * @name coinbase#fetchTime\n * @description fetches the current integer timestamp in milliseconds from the exchange server\n * @see https://docs.cloud.coinbase.com/sign-in-with-coinbase/docs/api-time#http-request\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {int} the current integer timestamp in milliseconds from the exchange server\n */\n const response = await this.v2PublicGetTime(params);\n //\n // {\n // \"data\": {\n // \"epoch\": 1589295679,\n // \"iso\": \"2020-05-12T15:01:19Z\"\n // }\n // }\n //\n const data = this.safeValue(response, 'data', {});\n return this.safeTimestamp(data, 'epoch');\n }\n async fetchAccounts(params = {}) {\n /**\n * @method\n * @name coinbase#fetchAccounts\n * @description fetch all the accounts associated with a profile\n * @see https://docs.cloud.coinbase.com/advanced-trade-api/reference/retailbrokerageapi_getaccounts\n * @see https://docs.cloud.coinbase.com/sign-in-with-coinbase/docs/api-accounts#list-accounts\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {boolean} [params.paginate] default false, when true will automatically paginate by calling this endpoint multiple times. See in the docs all the [availble parameters](https://github.com/ccxt/ccxt/wiki/Manual#pagination-params)\n * @returns {object} a dictionary of [account structures]{@link https://docs.ccxt.com/#/?id=account-structure} indexed by the account type\n */\n const method = this.safeString(this.options, 'fetchAccounts', 'fetchAccountsV3');\n if (method === 'fetchAccountsV3') {\n return await this.fetchAccountsV3(params);\n }\n return await this.fetchAccountsV2(params);\n }\n async fetchAccountsV2(params = {}) {\n await this.loadMarkets();\n let paginate = false;\n [paginate, params] = this.handleOptionAndParams(params, 'fetchAccounts', 'paginate');\n if (paginate) {\n return await this.fetchPaginatedCallCursor('fetchAccounts', undefined, undefined, undefined, params, 'next_starting_after', 'starting_after', undefined, 100);\n }\n const request = {\n 'limit': 250,\n };\n const response = await this.v2PrivateGetAccounts(this.extend(request, params));\n //\n // {\n // \"pagination\": {\n // \"ending_before\": null,\n // \"starting_after\": null,\n // \"previous_ending_before\": null,\n // \"next_starting_after\": null,\n // \"limit\": 244,\n // \"order\": \"desc\",\n // \"previous_uri\": null,\n // \"next_uri\": null\n // },\n // \"data\": [\n // {\n // \"id\": \"XLM\",\n // \"name\": \"XLM Wallet\",\n // \"primary\": false,\n // \"type\": \"wallet\",\n // \"currency\": {\n // \"code\": \"XLM\",\n // \"name\": \"Stellar Lumens\",\n // \"color\": \"#000000\",\n // \"sort_index\": 127,\n // \"exponent\": 7,\n // \"type\": \"crypto\",\n // \"address_regex\": \"^G[A-Z2-7]{55}$\",\n // \"asset_id\": \"13b83335-5ede-595b-821e-5bcdfa80560f\",\n // \"destination_tag_name\": \"XLM Memo ID\",\n // \"destination_tag_regex\": \"^[ -~]{1,28}$\"\n // },\n // \"balance\": {\n // \"amount\": \"0.0000000\",\n // \"currency\": \"XLM\"\n // },\n // \"created_at\": null,\n // \"updated_at\": null,\n // \"resource\": \"account\",\n // \"resource_path\": \"/v2/accounts/XLM\",\n // \"allow_deposits\": true,\n // \"allow_withdrawals\": true\n // },\n // ]\n // }\n //\n const data = this.safeList(response, 'data', []);\n const pagination = this.safeDict(response, 'pagination', {});\n const cursor = this.safeString(pagination, 'next_starting_after');\n const accounts = this.safeList(response, 'data', []);\n const length = accounts.length;\n const lastIndex = length - 1;\n const last = this.safeValue(accounts, lastIndex);\n if ((cursor !== undefined) && (cursor !== '')) {\n last['next_starting_after'] = cursor;\n accounts[lastIndex] = last;\n }\n return this.parseAccounts(data, params);\n }\n async fetchAccountsV3(params = {}) {\n await this.loadMarkets();\n let hasNext = true;\n let cursor = null;\n let accounts = [];\n while (hasNext) {\n const parameters = {\n 'cursor': cursor,\n 'limit': 250,\n };\n const accountsResponse = await this.v3PrivateGetBrokerageAccounts(this.extend(parameters, params));\n //\n // {\n // \"accounts\": [\n // {\n // \"uuid\": \"11111111-1111-1111-1111-111111111111\",\n // \"name\": \"USDC Wallet\",\n // \"currency\": \"USDC\",\n // \"available_balance\": {\n // \"value\": \"0.0000000000000000\",\n // \"currency\": \"USDC\"\n // },\n // \"default\": true,\n // \"active\": true,\n // \"created_at\": \"2023-01-04T06:20:06.456Z\",\n // \"updated_at\": \"2023-01-04T06:20:07.181Z\",\n // \"deleted_at\": null,\n // \"type\": \"ACCOUNT_TYPE_CRYPTO\",\n // \"ready\": false,\n // \"hold\": {\n // \"value\": \"0.0000000000000000\",\n // \"currency\": \"USDC\"\n // }\n // },\n // ...\n // ],\n // \"has_next\": false,\n // \"cursor\": \"\",\n // \"size\": 9\n // }\n //\n hasNext = this.safeValue(accountsResponse, 'has_next');\n cursor = this.safeValue(accountsResponse, 'cursor');\n const result = this.safeValue(accountsResponse, 'accounts', []);\n accounts = accounts.concat(result);\n }\n return this.parseAccounts(accounts, params);\n }\n parseAccount(account) {\n //\n // fetchAccountsV2\n //\n // {\n // \"id\": \"XLM\",\n // \"name\": \"XLM Wallet\",\n // \"primary\": false,\n // \"type\": \"wallet\",\n // \"currency\": {\n // \"code\": \"XLM\",\n // \"name\": \"Stellar Lumens\",\n // \"color\": \"#000000\",\n // \"sort_index\": 127,\n // \"exponent\": 7,\n // \"type\": \"crypto\",\n // \"address_regex\": \"^G[A-Z2-7]{55}$\",\n // \"asset_id\": \"13b83335-5ede-595b-821e-5bcdfa80560f\",\n // \"destination_tag_name\": \"XLM Memo ID\",\n // \"destination_tag_regex\": \"^[ -~]{1,28}$\"\n // },\n // \"balance\": {\n // \"amount\": \"0.0000000\",\n // \"currency\": \"XLM\"\n // },\n // \"created_at\": null,\n // \"updated_at\": null,\n // \"resource\": \"account\",\n // \"resource_path\": \"/v2/accounts/XLM\",\n // \"allow_deposits\": true,\n // \"allow_withdrawals\": true\n // }\n //\n // fetchAccountsV3\n //\n // {\n // \"uuid\": \"11111111-1111-1111-1111-111111111111\",\n // \"name\": \"USDC Wallet\",\n // \"currency\": \"USDC\",\n // \"available_balance\": {\n // \"value\": \"0.0000000000000000\",\n // \"currency\": \"USDC\"\n // },\n // \"default\": true,\n // \"active\": true,\n // \"created_at\": \"2023-01-04T06:20:06.456Z\",\n // \"updated_at\": \"2023-01-04T06:20:07.181Z\",\n // \"deleted_at\": null,\n // \"type\": \"ACCOUNT_TYPE_CRYPTO\",\n // \"ready\": false,\n // \"hold\": {\n // \"value\": \"0.0000000000000000\",\n // \"currency\": \"USDC\"\n // }\n // }\n //\n const active = this.safeValue(account, 'active');\n const currencyIdV3 = this.safeString(account, 'currency');\n const currency = this.safeValue(account, 'currency', {});\n const currencyId = this.safeString(currency, 'code', currencyIdV3);\n const typeV3 = this.safeString(account, 'type'); // ACCOUNT_TYPE_FIAT or ACCOUNT_TYPE_CRYPTO\n const typeV2 = this.safeString(account, 'type');\n return {\n 'id': this.safeString2(account, 'id', 'uuid'),\n 'type': (active !== undefined) ? typeV3 : typeV2,\n 'code': this.safeCurrencyCode(currencyId),\n 'info': account,\n 'active': active,\n };\n }\n async createDepositAddress(code, params = {}) {\n /**\n * @method\n * @name coinbase#createDepositAddress\n * @description create a currency deposit address\n * @see https://docs.cloud.coinbase.com/sign-in-with-coinbase/docs/api-addresses#create-address\n * @param {string} code unified currency code of the currency for the deposit address\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} an [address structure]{@link https://docs.ccxt.com/#/?id=address-structure}\n */\n let accountId = this.safeString(params, 'account_id');\n params = this.omit(params, 'account_id');\n if (accountId === undefined) {\n await this.loadAccounts();\n for (let i = 0; i < this.accounts.length; i++) {\n const account = this.accounts[i];\n if (account['code'] === code && account['type'] === 'ACCOUNT_TYPE_CRYPTO') {\n accountId = account['id'];\n break;\n }\n }\n }\n if (accountId === undefined) {\n throw new CreateDepositAddressError(code)\n .addMessage('createDepositAddress() could not find the account with matching currency code, specify an `account_id` extra param')\n .exchange(this.id);\n }\n const request = {\n 'account_id': accountId,\n };\n const response = await this.v2PrivatePostAccountsAccountIdAddresses(this.extend(request, params));\n //\n // {\n // \"data\": {\n // \"id\": \"05b1ebbf-9438-5dd4-b297-2ddedc98d0e4\",\n // \"address\": \"coinbasebase\",\n // \"address_info\": {\n // \"address\": \"coinbasebase\",\n // \"destination_tag\": \"287594668\"\n // },\n // \"name\": null,\n // \"created_at\": \"2019-07-01T14:39:29Z\",\n // \"updated_at\": \"2019-07-01T14:39:29Z\",\n // \"network\": \"eosio\",\n // \"uri_scheme\": \"eosio\",\n // \"resource\": \"address\",\n // \"resource_path\": \"/v2/accounts/14cfc769-e852-52f3-b831-711c104d194c/addresses/05b1ebbf-9438-5dd4-b297-2ddedc98d0e4\",\n // \"warnings\": [\n // {\n // \"title\": \"Only send EOS (EOS) to this address\",\n // \"details\": \"Sending any other cryptocurrency will result in permanent loss.\",\n // \"image_url\": \"https://dynamic-assets.coinbase.com/deaca3d47b10ed4a91a872e9618706eec34081127762d88f2476ac8e99ada4b48525a9565cf2206d18c04053f278f693434af4d4629ca084a9d01b7a286a7e26/asset_icons/1f8489bb280fb0a0fd643c1161312ba49655040e9aaaced5f9ad3eeaf868eadc.png\"\n // },\n // {\n // \"title\": \"Both an address and EOS memo are required to receive EOS\",\n // \"details\": \"If you send funds without an EOS memo or with an incorrect EOS memo, your funds cannot be credited to your account.\",\n // \"image_url\": \"https://www.coinbase.com/assets/receive-warning-2f3269d83547a7748fb39d6e0c1c393aee26669bfea6b9f12718094a1abff155.png\"\n // }\n // ],\n // \"warning_title\": \"Only send EOS (EOS) to this address\",\n // \"warning_details\": \"Sending any other cryptocurrency will result in permanent loss.\",\n // \"destination_tag\": \"287594668\",\n // \"deposit_uri\": \"eosio:coinbasebase?dt=287594668\",\n // \"callback_url\": null\n // }\n // }\n //\n const data = this.safeValue(response, 'data', {});\n const tag = this.safeString(data, 'destination_tag');\n const address = this.safeString(data, 'address');\n const network = this.safeString(data, 'network');\n return {\n 'currency': code,\n 'tag': tag,\n 'address': address,\n 'network': network,\n 'info': response,\n };\n }\n async fetchMySells(symbol = undefined, since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name coinbase#fetchMySells\n * @ignore\n * @description fetch sells\n * @see https://docs.cloud.coinbase.com/sign-in-with-coinbase/docs/api-sells#list-sells\n * @param {string} symbol not used by coinbase fetchMySells ()\n * @param {int} [since] timestamp in ms of the earliest sell, default is undefined\n * @param {int} [limit] max number of sells to return, default is undefined\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} a [list of order structures]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n // v2 did't have an endpoint for all historical trades\n const request = this.prepareAccountRequest(limit, params);\n await this.loadMarkets();\n const query = this.omit(params, ['account_id', 'accountId']);\n const sells = await this.v2PrivateGetAccountsAccountIdSells(this.extend(request, query));\n return this.parseTrades(sells['data'], undefined, since, limit);\n }\n async fetchMyBuys(symbol = undefined, since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name coinbase#fetchMyBuys\n * @ignore\n * @description fetch buys\n * @see https://docs.cloud.coinbase.com/sign-in-with-coinbase/docs/api-buys#list-buys\n * @param {string} symbol not used by coinbase fetchMyBuys ()\n * @param {int} [since] timestamp in ms of the earliest buy, default is undefined\n * @param {int} [limit] max number of buys to return, default is undefined\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n // v2 did't have an endpoint for all historical trades\n const request = this.prepareAccountRequest(limit, params);\n await this.loadMarkets();\n const query = this.omit(params, ['account_id', 'accountId']);\n const buys = await this.v2PrivateGetAccountsAccountIdBuys(this.extend(request, query));\n return this.parseTrades(buys['data'], undefined, since, limit);\n }\n async fetchTransactionsWithMethod(method, code = undefined, since = undefined, limit = undefined, params = {}) {\n const request = await this.prepareAccountRequestWithCurrencyCode(code, limit, params);\n await this.loadMarkets();\n const query = this.omit(params, ['account_id', 'accountId']);\n const response = await this[method](this.extend(request, query));\n return this.parseTransactions(response['data'], undefined, since, limit);\n }\n async fetchWithdrawals(code = undefined, since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name coinbase#fetchWithdrawals\n * @description fetch all withdrawals made from an account\n * @see https://docs.cloud.coinbase.com/sign-in-with-coinbase/docs/api-withdrawals#list-withdrawals\n * @param {string} code unified currency code\n * @param {int} [since] the earliest time in ms to fetch withdrawals for\n * @param {int} [limit] the maximum number of withdrawals structures to retrieve\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object[]} a list of [transaction structures]{@link https://docs.ccxt.com/#/?id=transaction-structure}\n */\n // fiat only, for crypto transactions use fetchLedger\n return await this.fetchTransactionsWithMethod('v2PrivateGetAccountsAccountIdWithdrawals', code, since, limit, params);\n }\n async fetchDeposits(code = undefined, since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name coinbase#fetchDeposits\n * @description fetch all deposits made to an account\n * @see https://docs.cloud.coinbase.com/sign-in-with-coinbase/docs/api-deposits#list-deposits\n * @param {string} code unified currency code\n * @param {int} [since] the earliest time in ms to fetch deposits for\n * @param {int} [limit] the maximum number of deposits structures to retrieve\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object[]} a list of [transaction structures]{@link https://docs.ccxt.com/#/?id=transaction-structure}\n */\n // fiat only, for crypto transactions use fetchLedger\n return await this.fetchTransactionsWithMethod('v2PrivateGetAccountsAccountIdDeposits', code, since, limit, params);\n }\n parseTransactionStatus(status) {\n const statuses = {\n 'created': 'pending',\n 'completed': 'ok',\n 'canceled': 'canceled',\n };\n return this.safeString(statuses, status, status);\n }\n parseTransaction(transaction, currency = undefined) {\n //\n // fiat deposit\n //\n // {\n // \"id\": \"f34c19f3-b730-5e3d-9f72\",\n // \"status\": \"completed\",\n // \"payment_method\": {\n // \"id\": \"a022b31d-f9c7-5043-98f2\",\n // \"resource\": \"payment_method\",\n // \"resource_path\": \"/v2/payment-methods/a022b31d-f9c7-5043-98f2\"\n // },\n // \"transaction\": {\n // \"id\": \"04ed4113-3732-5b0c-af86-b1d2146977d0\",\n // \"resource\": \"transaction\",\n // \"resource_path\": \"/v2/accounts/91cd2d36-3a91-55b6-a5d4-0124cf105483/transactions/04ed4113-3732-5b0c-af86\"\n // },\n // \"user_reference\": \"2VTYTH\",\n // \"created_at\": \"2017-02-09T07:01:18Z\",\n // \"updated_at\": \"2017-02-09T07:01:26Z\",\n // \"resource\": \"deposit\",\n // \"resource_path\": \"/v2/accounts/91cd2d36-3a91-55b6-a5d4-0124cf105483/deposits/f34c19f3-b730-5e3d-9f72\",\n // \"committed\": true,\n // \"payout_at\": \"2017-02-12T07:01:17Z\",\n // \"instant\": false,\n // \"fee\": { \"amount\": \"0.00\", \"currency\": \"EUR\" },\n // \"amount\": { \"amount\": \"114.02\", \"currency\": \"EUR\" },\n // \"subtotal\": { \"amount\": \"114.02\", \"currency\": \"EUR\" },\n // \"hold_until\": null,\n // \"hold_days\": 0,\n // \"hold_business_days\": 0,\n // \"next_step\": null\n // }\n //\n // fiat_withdrawal\n //\n // {\n // \"id\": \"cfcc3b4a-eeb6-5e8c-8058\",\n // \"status\": \"completed\",\n // \"payment_method\": {\n // \"id\": \"8b94cfa4-f7fd-5a12-a76a\",\n // \"resource\": \"payment_method\",\n // \"resource_path\": \"/v2/payment-methods/8b94cfa4-f7fd-5a12-a76a\"\n // },\n // \"transaction\": {\n // \"id\": \"fcc2550b-5104-5f83-a444\",\n // \"resource\": \"transaction\",\n // \"resource_path\": \"/v2/accounts/91cd2d36-3a91-55b6-a5d4-0124cf105483/transactions/fcc2550b-5104-5f83-a444\"\n // },\n // \"user_reference\": \"MEUGK\",\n // \"created_at\": \"2018-07-26T08:55:12Z\",\n // \"updated_at\": \"2018-07-26T08:58:18Z\",\n // \"resource\": \"withdrawal\",\n // \"resource_path\": \"/v2/accounts/91cd2d36-3a91-55b6-a5d4-0124cf105483/withdrawals/cfcc3b4a-eeb6-5e8c-8058\",\n // \"committed\": true,\n // \"payout_at\": \"2018-07-31T08:55:12Z\",\n // \"instant\": false,\n // \"fee\": { \"amount\": \"0.15\", \"currency\": \"EUR\" },\n // \"amount\": { \"amount\": \"13130.69\", \"currency\": \"EUR\" },\n // \"subtotal\": { \"amount\": \"13130.84\", \"currency\": \"EUR\" },\n // \"idem\": \"e549dee5-63ed-4e79-8a96\",\n // \"next_step\": null\n // }\n //\n // withdraw\n //\n // {\n // \"id\": \"a1794ecf-5693-55fa-70cf-ef731748ed82\",\n // \"type\": \"send\",\n // \"status\": \"pending\",\n // \"amount\": {\n // \"amount\": \"-14.008308\",\n // \"currency\": \"USDC\"\n // },\n // \"native_amount\": {\n // \"amount\": \"-18.74\",\n // \"currency\": \"CAD\"\n // },\n // \"description\": null,\n // \"created_at\": \"2024-01-12T01:27:31Z\",\n // \"updated_at\": \"2024-01-12T01:27:31Z\",\n // \"resource\": \"transaction\",\n // \"resource_path\": \"/v2/accounts/a34bgfad-ed67-538b-bffc-730c98c10da0/transactions/a1794ecf-5693-55fa-70cf-ef731748ed82\",\n // \"instant_exchange\": false,\n // \"network\": {\n // \"status\": \"pending\",\n // \"status_description\": \"Pending (est. less than 10 minutes)\",\n // \"transaction_fee\": {\n // \"amount\": \"4.008308\",\n // \"currency\": \"USDC\"\n // },\n // \"transaction_amount\": {\n // \"amount\": \"10.000000\",\n // \"currency\": \"USDC\"\n // },\n // \"confirmations\": 0\n // },\n // \"to\": {\n // \"resource\": \"ethereum_address\",\n // \"address\": \"0x9...\",\n // \"currency\": \"USDC\",\n // \"address_info\": {\n // \"address\": \"0x9...\"\n // }\n // },\n // \"idem\": \"748d8591-dg9a-7831-a45b-crd61dg78762\",\n // \"details\": {\n // \"title\": \"Sent USDC\",\n // \"subtitle\": \"To USDC address on Ethereum network\",\n // \"header\": \"Sent 14.008308 USDC ($18.74)\",\n // \"health\": \"warning\"\n // },\n // \"hide_native_amount\": false\n // }\n //\n const transactionType = this.safeString(transaction, 'type');\n let amountAndCurrencyObject = undefined;\n let feeObject = undefined;\n if (transactionType === 'send') {\n const network = this.safeValue(transaction, 'network', {});\n amountAndCurrencyObject = this.safeValue(network, 'transaction_amount', {});\n feeObject = this.safeValue(network, 'transaction_fee', {});\n }\n else {\n amountAndCurrencyObject = this.safeValue(transaction, 'subtotal', {});\n feeObject = this.safeValue(transaction, 'fee', {});\n }\n let status = this.parseTransactionStatus(this.safeString(transaction, 'status'));\n if (status === undefined) {\n const committed = this.safeValue(transaction, 'committed');\n status = committed ? 'ok' : 'pending';\n }\n const id = this.safeString(transaction, 'id');\n const currencyId = this.safeString(amountAndCurrencyObject, 'currency');\n const feeCurrencyId = this.safeString(feeObject, 'currency');\n const datetime = this.safeValue(transaction, 'created_at');\n const toObject = this.safeValue(transaction, 'to', {});\n const toAddress = this.safeString(toObject, 'address');\n return {\n 'info': transaction,\n 'id': id,\n 'txid': id,\n 'timestamp': this.parse8601(datetime),\n 'datetime': datetime,\n 'network': undefined,\n 'address': toAddress,\n 'addressTo': toAddress,\n 'addressFrom': undefined,\n 'tag': undefined,\n 'tagTo': undefined,\n 'tagFrom': undefined,\n 'type': this.safeString(transaction, 'resource'),\n 'amount': this.safeNumber(amountAndCurrencyObject, 'amount'),\n 'currency': this.safeCurrencyCode(currencyId, currency),\n 'status': status,\n 'updated': this.parse8601(this.safeValue(transaction, 'updated_at')),\n 'fee': {\n 'cost': this.safeNumber(feeObject, 'amount'),\n 'currency': this.safeCurrencyCode(feeCurrencyId),\n },\n };\n }\n parseTrade(trade, market = undefined) {\n //\n // fetchMyBuys, fetchMySells\n //\n // {\n // \"id\": \"67e0eaec-07d7-54c4-a72c-2e92826897df\",\n // \"status\": \"completed\",\n // \"payment_method\": {\n // \"id\": \"83562370-3e5c-51db-87da-752af5ab9559\",\n // \"resource\": \"payment_method\",\n // \"resource_path\": \"/v2/payment-methods/83562370-3e5c-51db-87da-752af5ab9559\"\n // },\n // \"transaction\": {\n // \"id\": \"441b9494-b3f0-5b98-b9b0-4d82c21c252a\",\n // \"resource\": \"transaction\",\n // \"resource_path\": \"/v2/accounts/2bbf394c-193b-5b2a-9155-3b4732659ede/transactions/441b9494-b3f0-5b98-b9b0-4d82c21c252a\"\n // },\n // \"amount\": { \"amount\": \"1.00000000\", \"currency\": \"BTC\" },\n // \"total\": { \"amount\": \"10.25\", \"currency\": \"USD\" },\n // \"subtotal\": { \"amount\": \"10.10\", \"currency\": \"USD\" },\n // \"created_at\": \"2015-01-31T20:49:02Z\",\n // \"updated_at\": \"2015-02-11T16:54:02-08:00\",\n // \"resource\": \"buy\",\n // \"resource_path\": \"/v2/accounts/2bbf394c-193b-5b2a-9155-3b4732659ede/buys/67e0eaec-07d7-54c4-a72c-2e92826897df\",\n // \"committed\": true,\n // \"instant\": false,\n // \"fee\": { \"amount\": \"0.15\", \"currency\": \"USD\" },\n // \"payout_at\": \"2015-02-18T16:54:00-08:00\"\n // }\n //\n // fetchTrades\n //\n // {\n // \"trade_id\": \"10092327\",\n // \"product_id\": \"BTC-USDT\",\n // \"price\": \"17488.12\",\n // \"size\": \"0.0000623\",\n // \"time\": \"2023-01-11T00:52:37.557001Z\",\n // \"side\": \"BUY\",\n // \"bid\": \"\",\n // \"ask\": \"\"\n // }\n //\n // fetchMyTrades\n //\n // {\n // \"entry_id\": \"b88b82cc89e326a2778874795102cbafd08dd979a2a7a3c69603fc4c23c2e010\",\n // \"trade_id\": \"cdc39e45-bbd3-44ec-bf02-61742dfb16a1\",\n // \"order_id\": \"813a53c5-3e39-47bb-863d-2faf685d22d8\",\n // \"trade_time\": \"2023-01-18T01:37:38.091377090Z\",\n // \"trade_type\": \"FILL\",\n // \"price\": \"21220.64\",\n // \"size\": \"0.0046830664333996\",\n // \"commission\": \"0.0000280983986004\",\n // \"product_id\": \"BTC-USDT\",\n // \"sequence_timestamp\": \"2023-01-18T01:37:38.092520Z\",\n // \"liquidity_indicator\": \"UNKNOWN_LIQUIDITY_INDICATOR\",\n // \"size_in_quote\": true,\n // \"user_id\": \"1111111-1111-1111-1111-111111111111\",\n // \"side\": \"BUY\"\n // }\n //\n let symbol = undefined;\n const totalObject = this.safeValue(trade, 'total', {});\n const amountObject = this.safeValue(trade, 'amount', {});\n const subtotalObject = this.safeValue(trade, 'subtotal', {});\n const feeObject = this.safeValue(trade, 'fee', {});\n const marketId = this.safeString(trade, 'product_id');\n market = this.safeMarket(marketId, market, '-');\n if (market !== undefined) {\n symbol = market['symbol'];\n }\n else {\n const baseId = this.safeString(amountObject, 'currency');\n const quoteId = this.safeString(totalObject, 'currency');\n if ((baseId !== undefined) && (quoteId !== undefined)) {\n const base = this.safeCurrencyCode(baseId);\n const quote = this.safeCurrencyCode(quoteId);\n symbol = base + '/' + quote;\n }\n }\n const sizeInQuote = this.safeValue(trade, 'size_in_quote');\n const v3Price = this.safeString(trade, 'price');\n let v3Cost = undefined;\n let v3Amount = this.safeString(trade, 'size');\n if (sizeInQuote) {\n // calculate base size\n v3Cost = v3Amount;\n v3Amount = Precise.stringDiv(v3Amount, v3Price);\n }\n const v3FeeCost = this.safeString(trade, 'commission');\n const amountString = this.safeString(amountObject, 'amount', v3Amount);\n const costString = this.safeString(subtotalObject, 'amount', v3Cost);\n let priceString = undefined;\n let cost = undefined;\n let amount = undefined;\n if ((costString !== undefined) && (amountString !== undefined)) {\n priceString = Precise.stringDiv(costString, amountString);\n }\n else {\n priceString = v3Price;\n }\n if ((priceString !== undefined) && (amountString !== undefined)) {\n cost = Precise.stringMul(priceString, amountString);\n }\n else {\n cost = costString;\n }\n if ((costString !== undefined) && (amountString === undefined) && (priceString !== undefined)) {\n amount = Precise.stringDiv(costString, priceString);\n }\n else {\n amount = amountString;\n }\n let feeCurrencyId = this.safeString(feeObject, 'currency');\n const feeCost = this.safeNumber(feeObject, 'amount', this.parseNumber(v3FeeCost));\n if ((feeCurrencyId === undefined) && (market !== undefined) && (feeCost !== undefined)) {\n feeCurrencyId = market['quote'];\n }\n const datetime = this.safeStringN(trade, ['created_at', 'trade_time', 'time']);\n const side = this.safeStringLower2(trade, 'resource', 'side');\n const takerOrMaker = this.safeStringLower(trade, 'liquidity_indicator');\n return this.safeTrade({\n 'info': trade,\n 'id': this.safeString2(trade, 'id', 'trade_id'),\n 'order': this.safeString(trade, 'order_id'),\n 'timestamp': this.parse8601(datetime),\n 'datetime': datetime,\n 'symbol': symbol,\n 'type': undefined,\n 'side': (side === 'unknown_order_side') ? undefined : side,\n 'takerOrMaker': (takerOrMaker === 'unknown_liquidity_indicator') ? undefined : takerOrMaker,\n 'price': priceString,\n 'amount': amount,\n 'cost': cost,\n 'fee': {\n 'cost': feeCost,\n 'currency': this.safeCurrencyCode(feeCurrencyId),\n },\n });\n }\n async fetchMarkets(params = {}) {\n /**\n * @method\n * @name coinbase#fetchMarkets\n * @see https://docs.cloud.coinbase.com/advanced-trade-api/reference/retailbrokerageapi_getproducts\n * @see https://docs.cloud.coinbase.com/sign-in-with-coinbase/docs/api-currencies#get-fiat-currencies\n * @see https://docs.cloud.coinbase.com/sign-in-with-coinbase/docs/api-exchange-rates#get-exchange-rates\n * @description retrieves data on all markets for coinbase\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object[]} an array of objects representing market data\n */\n const method = this.safeString(this.options, 'fetchMarkets', 'fetchMarketsV3');\n return await this[method](params);\n }\n async fetchMarketsV2(params = {}) {\n const response = await this.fetchCurrenciesFromCache(params);\n const currencies = this.safeValue(response, 'currencies', {});\n const exchangeRates = this.safeValue(response, 'exchangeRates', {});\n const data = this.safeValue(currencies, 'data', []);\n const dataById = this.indexBy(data, 'id');\n const rates = this.safeValue(this.safeValue(exchangeRates, 'data', {}), 'rates', {});\n const baseIds = Object.keys(rates);\n const result = [];\n for (let i = 0; i < baseIds.length; i++) {\n const baseId = baseIds[i];\n const base = this.safeCurrencyCode(baseId);\n const type = (baseId in dataById) ? 'fiat' : 'crypto';\n // https://github.com/ccxt/ccxt/issues/6066\n if (type === 'crypto') {\n for (let j = 0; j < data.length; j++) {\n const quoteCurrency = data[j];\n const quoteId = this.safeString(quoteCurrency, 'id');\n const quote = this.safeCurrencyCode(quoteId);\n result.push({\n 'id': baseId + '-' + quoteId,\n 'symbol': base + '/' + quote,\n 'base': base,\n 'quote': quote,\n 'settle': undefined,\n 'baseId': baseId,\n 'quoteId': quoteId,\n 'settleId': undefined,\n 'type': 'spot',\n 'spot': true,\n 'margin': false,\n 'swap': false,\n 'future': false,\n 'option': false,\n 'active': undefined,\n 'contract': false,\n 'linear': undefined,\n 'inverse': undefined,\n 'contractSize': undefined,\n 'expiry': undefined,\n 'expiryDatetime': undefined,\n 'strike': undefined,\n 'optionType': undefined,\n 'precision': {\n 'amount': undefined,\n 'price': undefined,\n },\n 'limits': {\n 'leverage': {\n 'min': undefined,\n 'max': undefined,\n },\n 'amount': {\n 'min': undefined,\n 'max': undefined,\n },\n 'price': {\n 'min': undefined,\n 'max': undefined,\n },\n 'cost': {\n 'min': this.safeNumber(quoteCurrency, 'min_size'),\n 'max': undefined,\n },\n },\n 'info': quoteCurrency,\n });\n }\n }\n }\n return result;\n }\n async fetchMarketsV3(params = {}) {\n const response = await this.v3PrivateGetBrokerageProducts(params);\n //\n // [\n // {\n // \"product_id\": \"TONE-USD\",\n // \"price\": \"0.01523\",\n // \"price_percentage_change_24h\": \"1.94109772423025\",\n // \"volume_24h\": \"19773129\",\n // \"volume_percentage_change_24h\": \"437.0170530929949\",\n // \"base_increment\": \"1\",\n // \"quote_increment\": \"0.00001\",\n // \"quote_min_size\": \"1\",\n // \"quote_max_size\": \"10000000\",\n // \"base_min_size\": \"26.7187147229469674\",\n // \"base_max_size\": \"267187147.2294696735908216\",\n // \"base_name\": \"TE-FOOD\",\n // \"quote_name\": \"US Dollar\",\n // \"watched\": false,\n // \"is_disabled\": false,\n // \"new\": false,\n // \"status\": \"online\",\n // \"cancel_only\": false,\n // \"limit_only\": false,\n // \"post_only\": false,\n // \"trading_disabled\": false,\n // \"auction_mode\": false,\n // \"product_type\": \"SPOT\",\n // \"quote_currency_id\": \"USD\",\n // \"base_currency_id\": \"TONE\",\n // \"fcm_trading_session_details\": null,\n // \"mid_market_price\": \"\"\n // },\n // ...\n // ]\n //\n const fees = await this.v3PrivateGetBrokerageTransactionSummary(params);\n //\n // {\n // \"total_volume\": 0,\n // \"total_fees\": 0,\n // \"fee_tier\": {\n // \"pricing_tier\": \"\",\n // \"usd_from\": \"0\",\n // \"usd_to\": \"10000\",\n // \"taker_fee_rate\": \"0.006\",\n // \"maker_fee_rate\": \"0.004\"\n // },\n // \"margin_rate\": null,\n // \"goods_and_services_tax\": null,\n // \"advanced_trade_only_volume\": 0,\n // \"advanced_trade_only_fees\": 0,\n // \"coinbase_pro_volume\": 0,\n // \"coinbase_pro_fees\": 0\n // }\n //\n const feeTier = this.safeValue(fees, 'fee_tier', {});\n const data = this.safeValue(response, 'products', []);\n const result = [];\n for (let i = 0; i < data.length; i++) {\n const market = data[i];\n const id = this.safeString(market, 'product_id');\n const baseId = this.safeString(market, 'base_currency_id');\n const quoteId = this.safeString(market, 'quote_currency_id');\n const base = this.safeCurrencyCode(baseId);\n const quote = this.safeCurrencyCode(quoteId);\n const marketType = this.safeStringLower(market, 'product_type');\n const tradingDisabled = this.safeValue(market, 'trading_disabled');\n const stablePairs = this.safeValue(this.options, 'stablePairs', []);\n result.push({\n 'id': id,\n 'symbol': base + '/' + quote,\n 'base': base,\n 'quote': quote,\n 'settle': undefined,\n 'baseId': baseId,\n 'quoteId': quoteId,\n 'settleId': undefined,\n 'type': marketType,\n 'spot': (marketType === 'spot'),\n 'margin': undefined,\n 'swap': false,\n 'future': false,\n 'option': false,\n 'active': !tradingDisabled,\n 'contract': false,\n 'linear': undefined,\n 'inverse': undefined,\n 'taker': this.inArray(id, stablePairs) ? 0.00001 : this.safeNumber(feeTier, 'taker_fee_rate'),\n 'maker': this.inArray(id, stablePairs) ? 0.0 : this.safeNumber(feeTier, 'maker_fee_rate'),\n 'contractSize': undefined,\n 'expiry': undefined,\n 'expiryDatetime': undefined,\n 'strike': undefined,\n 'optionType': undefined,\n 'precision': {\n 'amount': this.safeNumber(market, 'base_increment'),\n 'price': this.safeNumber2(market, 'price_increment', 'quote_increment'),\n },\n 'limits': {\n 'leverage': {\n 'min': undefined,\n 'max': undefined,\n },\n 'amount': {\n 'min': this.safeNumber(market, 'base_min_size'),\n 'max': this.safeNumber(market, 'base_max_size'),\n },\n 'price': {\n 'min': undefined,\n 'max': undefined,\n },\n 'cost': {\n 'min': this.safeNumber(market, 'quote_min_size'),\n 'max': this.safeNumber(market, 'quote_max_size'),\n },\n },\n 'created': undefined,\n 'info': market,\n });\n }\n return result;\n }\n async fetchCurrenciesFromCache(params = {}) {\n const options = this.safeValue(this.options, 'fetchCurrencies', {});\n const timestamp = this.safeInteger(options, 'timestamp');\n const expires = this.safeInteger(options, 'expires', 1000);\n const now = this.milliseconds();\n if ((timestamp === undefined) || ((now - timestamp) > expires)) {\n const currenciesPromise = this.v2PublicGetCurrenciesCrypto(params);\n const fiatCurrenciesPromise = this.v2PublicGetCurrencies(params);\n const exchangeRatesPromise = this.v2PublicGetExchangeRates(params);\n const [currencies, fiatCurrencies, exchangeRates] = await Promise.all([currenciesPromise, fiatCurrenciesPromise, exchangeRatesPromise]);\n this.options['fetchCurrencies'] = this.extend(options, {\n 'currencies': currencies,\n 'exchangeRates': exchangeRates,\n 'fiatCurrencies': fiatCurrencies,\n 'timestamp': now,\n });\n }\n return this.safeValue(this.options, 'fetchCurrencies', {});\n }\n async fetchCurrencies(params = {}) {\n /**\n * @method\n * @name coinbase#fetchCurrencies\n * @description fetches all available currencies on an exchange\n * @see https://docs.cloud.coinbase.com/sign-in-with-coinbase/docs/api-currencies#get-fiat-currencies\n * @see https://docs.cloud.coinbase.com/sign-in-with-coinbase/docs/api-exchange-rates#get-exchange-rates\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} an associative dictionary of currencies\n */\n const response = await this.fetchCurrenciesFromCache(params);\n const currencies = this.safeValue(response, 'currencies', {});\n const fiatCurrencies = this.safeValue(response, 'fiatCurrencies', {});\n //\n // {\n // \"data\":[\n // {\"id\":\"AED\",\"name\":\"United Arab Emirates Dirham\",\"min_size\":\"0.01000000\"},\n // {\"id\":\"AFN\",\"name\":\"Afghan Afghani\",\"min_size\":\"0.01000000\"},\n // {\"id\":\"ALL\",\"name\":\"Albanian Lek\",\"min_size\":\"0.01000000\"},\n // {\"id\":\"AMD\",\"name\":\"Armenian Dram\",\"min_size\":\"0.01000000\"},\n // {\"id\":\"ANG\",\"name\":\"Netherlands Antillean Gulden\",\"min_size\":\"0.01000000\"},\n // ...\n // ],\n // }\n //\n const exchangeRates = this.safeValue(response, 'exchangeRates', {});\n //\n // {\n // \"data\":{\n // \"currency\":\"USD\",\n // \"rates\":{\n // \"AED\":\"3.67\",\n // \"AFN\":\"78.21\",\n // \"ALL\":\"110.42\",\n // \"AMD\":\"474.18\",\n // \"ANG\":\"1.75\",\n // ...\n // },\n // }\n // }\n //\n const data = this.safeValue(fiatCurrencies, 'data', []);\n const cryptoData = this.safeValue(currencies, 'data', []);\n const cryptoDataById = this.indexBy(cryptoData, 'code');\n const dataById = this.indexBy(data, 'id');\n const rates = this.safeValue(this.safeValue(exchangeRates, 'data', {}), 'rates', {});\n const keys = Object.keys(rates);\n const result = {};\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n const type = (key in dataById) ? 'fiat' : 'crypto';\n const currency = this.safeValue(cryptoDataById, key, {});\n const id = this.safeString(currency, 'code', key);\n const name = this.safeString(currency, 'name');\n const code = this.safeCurrencyCode(id);\n const exponent = this.safeString(currency, 'exponent', '2');\n const precision = Math.pow(10, -exponent).toString();\n result[code] = {\n 'id': id,\n 'code': code,\n 'info': currency,\n 'type': type,\n 'name': name,\n 'active': true,\n 'deposit': undefined,\n 'withdraw': undefined,\n 'fee': undefined,\n 'precision': precision,\n 'limits': {\n 'amount': {\n 'min': this.safeNumber(currency, 'min_size'),\n 'max': undefined,\n },\n 'withdraw': {\n 'min': undefined,\n 'max': undefined,\n },\n },\n };\n }\n return result;\n }\n async fetchTickers(symbols = undefined, params = {}) {\n /**\n * @method\n * @name coinbase#fetchTickers\n * @description fetches price tickers for multiple markets, statistical information calculated over the past 24 hours for each market\n * @see https://docs.cloud.coinbase.com/advanced-trade-api/reference/retailbrokerageapi_getproducts\n * @see https://docs.cloud.coinbase.com/sign-in-with-coinbase/docs/api-exchange-rates#get-exchange-rates\n * @param {string[]|undefined} symbols unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} a dictionary of [ticker structures]{@link https://docs.ccxt.com/#/?id=ticker-structure}\n */\n const method = this.safeString(this.options, 'fetchTickers', 'fetchTickersV3');\n if (method === 'fetchTickersV3') {\n return await this.fetchTickersV3(symbols, params);\n }\n return await this.fetchTickersV2(symbols, params);\n }\n async fetchTickersV2(symbols = undefined, params = {}) {\n await this.loadMarkets();\n symbols = this.marketSymbols(symbols);\n const request = {\n // 'currency': 'USD',\n };\n const response = await this.v2PublicGetExchangeRates(this.extend(request, params));\n //\n // {\n // \"data\":{\n // \"currency\":\"USD\",\n // \"rates\":{\n // \"AED\":\"3.6731\",\n // \"AFN\":\"103.163942\",\n // \"ALL\":\"106.973038\",\n // }\n // }\n // }\n //\n const data = this.safeValue(response, 'data', {});\n const rates = this.safeValue(data, 'rates', {});\n const quoteId = this.safeString(data, 'currency');\n const result = {};\n const baseIds = Object.keys(rates);\n const delimiter = '-';\n for (let i = 0; i < baseIds.length; i++) {\n const baseId = baseIds[i];\n const marketId = baseId + delimiter + quoteId;\n const market = this.safeMarket(marketId, undefined, delimiter);\n const symbol = market['symbol'];\n result[symbol] = this.parseTicker(rates[baseId], market);\n }\n return this.filterByArrayTickers(result, 'symbol', symbols);\n }\n async fetchTickersV3(symbols = undefined, params = {}) {\n await this.loadMarkets();\n symbols = this.marketSymbols(symbols);\n const request = {};\n if (symbols !== undefined) {\n request['product_ids'] = this.marketIds(symbols);\n }\n const response = await this.v3PrivateGetBrokerageProducts(this.extend(request, params));\n //\n // {\n // \"products\": [\n // {\n // \"product_id\": \"TONE-USD\",\n // \"price\": \"0.01523\",\n // \"price_percentage_change_24h\": \"1.94109772423025\",\n // \"volume_24h\": \"19773129\",\n // \"volume_percentage_change_24h\": \"437.0170530929949\",\n // \"base_increment\": \"1\",\n // \"quote_increment\": \"0.00001\",\n // \"quote_min_size\": \"1\",\n // \"quote_max_size\": \"10000000\",\n // \"base_min_size\": \"26.7187147229469674\",\n // \"base_max_size\": \"267187147.2294696735908216\",\n // \"base_name\": \"TE-FOOD\",\n // \"quote_name\": \"US Dollar\",\n // \"watched\": false,\n // \"is_disabled\": false,\n // \"new\": false,\n // \"status\": \"online\",\n // \"cancel_only\": false,\n // \"limit_only\": false,\n // \"post_only\": false,\n // \"trading_disabled\": false,\n // \"auction_mode\": false,\n // \"product_type\": \"SPOT\",\n // \"quote_currency_id\": \"USD\",\n // \"base_currency_id\": \"TONE\",\n // \"fcm_trading_session_details\": null,\n // \"mid_market_price\": \"\"\n // },\n // ...\n // ],\n // \"num_products\": 549\n // }\n //\n const data = this.safeValue(response, 'products', []);\n const result = {};\n for (let i = 0; i < data.length; i++) {\n const entry = data[i];\n const marketId = this.safeString(entry, 'product_id');\n const market = this.safeMarket(marketId, undefined, '-');\n const symbol = market['symbol'];\n result[symbol] = this.parseTicker(entry, market);\n }\n return this.filterByArrayTickers(result, 'symbol', symbols);\n }\n async fetchTicker(symbol, params = {}) {\n /**\n * @method\n * @name coinbase#fetchTicker\n * @description fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market\n * @see https://docs.cloud.coinbase.com/advanced-trade-api/reference/retailbrokerageapi_getmarkettrades\n * @see https://docs.cloud.coinbase.com/sign-in-with-coinbase/docs/api-prices#get-spot-price\n * @see https://docs.cloud.coinbase.com/sign-in-with-coinbase/docs/api-prices#get-buy-price\n * @see https://docs.cloud.coinbase.com/sign-in-with-coinbase/docs/api-prices#get-sell-price\n * @param {string} symbol unified symbol of the market to fetch the ticker for\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} a [ticker structure]{@link https://docs.ccxt.com/#/?id=ticker-structure}\n */\n const method = this.safeString(this.options, 'fetchTicker', 'fetchTickerV3');\n if (method === 'fetchTickerV3') {\n return await this.fetchTickerV3(symbol, params);\n }\n return await this.fetchTickerV2(symbol, params);\n }\n async fetchTickerV2(symbol, params = {}) {\n await this.loadMarkets();\n const market = this.market(symbol);\n const request = this.extend({\n 'symbol': market['id'],\n }, params);\n const spot = await this.v2PublicGetPricesSymbolSpot(request);\n //\n // {\"data\":{\"base\":\"BTC\",\"currency\":\"USD\",\"amount\":\"48691.23\"}}\n //\n const ask = await this.v2PublicGetPricesSymbolBuy(request);\n //\n // {\"data\":{\"base\":\"BTC\",\"currency\":\"USD\",\"amount\":\"48691.23\"}}\n //\n const bid = await this.v2PublicGetPricesSymbolSell(request);\n //\n // {\"data\":{\"base\":\"BTC\",\"currency\":\"USD\",\"amount\":\"48691.23\"}}\n //\n const spotData = this.safeValue(spot, 'data', {});\n const askData = this.safeValue(ask, 'data', {});\n const bidData = this.safeValue(bid, 'data', {});\n const bidAskLast = {\n 'bid': this.safeNumber(bidData, 'amount'),\n 'ask': this.safeNumber(askData, 'amount'),\n 'price': this.safeNumber(spotData, 'amount'),\n };\n return this.parseTicker(bidAskLast, market);\n }\n async fetchTickerV3(symbol, params = {}) {\n await this.loadMarkets();\n const market = this.market(symbol);\n const request = {\n 'product_id': market['id'],\n 'limit': 1,\n };\n const response = await this.v3PrivateGetBrokerageProductsProductIdTicker(this.extend(request, params));\n //\n // {\n // \"trades\": [\n // {\n // \"trade_id\": \"518078013\",\n // \"product_id\": \"BTC-USD\",\n // \"price\": \"28208.1\",\n // \"size\": \"0.00659179\",\n // \"time\": \"2023-04-04T23:05:34.492746Z\",\n // \"side\": \"BUY\",\n // \"bid\": \"\",\n // \"ask\": \"\"\n // }\n // ],\n // \"best_bid\": \"28208.61\",\n // \"best_ask\": \"28208.62\"\n // }\n //\n const data = this.safeValue(response, 'trades', []);\n const ticker = this.parseTicker(data[0], market);\n ticker['bid'] = this.safeNumber(response, 'best_bid');\n ticker['ask'] = this.safeNumber(response, 'best_ask');\n return ticker;\n }\n parseTicker(ticker, market = undefined) {\n //\n // fetchTickerV2\n //\n // {\n // \"bid\": 20713.37,\n // \"ask\": 20924.65,\n // \"price\": 20809.83\n // }\n //\n // fetchTickerV3\n //\n // {\n // \"trade_id\": \"10209805\",\n // \"product_id\": \"BTC-USDT\",\n // \"price\": \"19381.27\",\n // \"size\": \"0.1\",\n // \"time\": \"2023-01-13T20:35:41.865970Z\",\n // \"side\": \"BUY\",\n // \"bid\": \"\",\n // \"ask\": \"\"\n // }\n //\n // fetchTickersV2\n //\n // \"48691.23\"\n //\n // fetchTickersV3\n //\n // [\n // {\n // \"product_id\": \"TONE-USD\",\n // \"price\": \"0.01523\",\n // \"price_percentage_change_24h\": \"1.94109772423025\",\n // \"volume_24h\": \"19773129\",\n // \"volume_percentage_change_24h\": \"437.0170530929949\",\n // \"base_increment\": \"1\",\n // \"quote_increment\": \"0.00001\",\n // \"quote_min_size\": \"1\",\n // \"quote_max_size\": \"10000000\",\n // \"base_min_size\": \"26.7187147229469674\",\n // \"base_max_size\": \"267187147.2294696735908216\",\n // \"base_name\": \"TE-FOOD\",\n // \"quote_name\": \"US Dollar\",\n // \"watched\": false,\n // \"is_disabled\": false,\n // \"new\": false,\n // \"status\": \"online\",\n // \"cancel_only\": false,\n // \"limit_only\": false,\n // \"post_only\": false,\n // \"trading_disabled\": false,\n // \"auction_mode\": false,\n // \"product_type\": \"SPOT\",\n // \"quote_currency_id\": \"USD\",\n // \"base_currency_id\": \"TONE\",\n // \"fcm_trading_session_details\": null,\n // \"mid_market_price\": \"\"\n // },\n // ...\n // ]\n //\n // fetchBidsAsks\n //\n // {\n // \"product_id\": \"TRAC-EUR\",\n // \"bids\": [\n // {\n // \"price\": \"0.2384\",\n // \"size\": \"386.1\"\n // }\n // ],\n // \"asks\": [\n // {\n // \"price\": \"0.2406\",\n // \"size\": \"672\"\n // }\n // ],\n // \"time\": \"2023-06-30T07:15:24.656044Z\"\n // }\n //\n let bid = this.safeNumber(ticker, 'bid');\n let ask = this.safeNumber(ticker, 'ask');\n let bidVolume = undefined;\n let askVolume = undefined;\n if (('bids' in ticker)) {\n const bids = this.safeValue(ticker, 'bids', []);\n const asks = this.safeValue(ticker, 'asks', []);\n bid = this.safeNumber(bids[0], 'price');\n bidVolume = this.safeNumber(bids[0], 'size');\n ask = this.safeNumber(asks[0], 'price');\n askVolume = this.safeNumber(asks[0], 'size');\n }\n const marketId = this.safeString(ticker, 'product_id');\n const last = this.safeNumber(ticker, 'price');\n const datetime = this.safeString(ticker, 'time');\n return this.safeTicker({\n 'symbol': this.safeSymbol(marketId, market),\n 'timestamp': this.parse8601(datetime),\n 'datetime': datetime,\n 'bid': bid,\n 'ask': ask,\n 'last': last,\n 'high': undefined,\n 'low': undefined,\n 'bidVolume': bidVolume,\n 'askVolume': askVolume,\n 'vwap': undefined,\n 'open': undefined,\n 'close': last,\n 'previousClose': undefined,\n 'change': undefined,\n 'percentage': this.safeNumber(ticker, 'price_percentage_change_24h'),\n 'average': undefined,\n 'baseVolume': undefined,\n 'quoteVolume': undefined,\n 'info': ticker,\n }, market);\n }\n parseCustomBalance(response, params = {}) {\n const balances = response;\n const accounts = this.safeValue(params, 'type', this.options['accounts']);\n const v3Accounts = this.safeValue(params, 'type', this.options['v3Accounts']);\n const result = { 'info': response };\n for (let b = 0; b < balances.length; b++) {\n const balance = balances[b];\n const type = this.safeString(balance, 'type');\n if (this.inArray(type, accounts)) {\n const value = this.safeValue(balance, 'balance');\n if (value !== undefined) {\n const currencyId = this.safeString(value, 'currency');\n const code = this.safeCurrencyCode(currencyId);\n const total = this.safeString(value, 'amount');\n const free = total;\n let account = this.safeValue(result, code);\n if (account === undefined) {\n account = this.account();\n account['free'] = free;\n account['total'] = total;\n }\n else {\n account['free'] = Precise.stringAdd(account['free'], total);\n account['total'] = Precise.stringAdd(account['total'], total);\n }\n result[code] = account;\n }\n }\n else if (this.inArray(type, v3Accounts)) {\n const available = this.safeValue(balance, 'available_balance');\n const hold = this.safeValue(balance, 'hold');\n if (available !== undefined && hold !== undefined) {\n const currencyId = this.safeString(available, 'currency');\n const code = this.safeCurrencyCode(currencyId);\n const used = this.safeString(hold, 'value');\n const free = this.safeString(available, 'value');\n const total = Precise.stringAdd(used, free);\n let account = this.safeValue(result, code);\n if (account === undefined) {\n account = this.account();\n account['free'] = free;\n account['used'] = used;\n account['total'] = total;\n }\n else {\n account['free'] = Precise.stringAdd(account['free'], free);\n account['used'] = Precise.stringAdd(account['used'], used);\n account['total'] = Precise.stringAdd(account['total'], total);\n }\n result[code] = account;\n }\n }\n }\n return this.safeBalance(result);\n }\n async fetchBalance(params = {}) {\n /**\n * @method\n * @name coinbase#fetchBalance\n * @description query for balance and get the amount of funds available for trading or funds locked in orders\n * @see https://docs.cloud.coinbase.com/advanced-trade-api/reference/retailbrokerageapi_getaccounts\n * @see https://docs.cloud.coinbase.com/sign-in-with-coinbase/docs/api-accounts#list-accounts\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {boolean} [params.v3] default false, set true to use v3 api endpoint\n * @returns {object} a [balance structure]{@link https://docs.ccxt.com/#/?id=balance-structure}\n */\n await this.loadMarkets();\n let hasNext = true;\n let starting_after = null;\n let accounts = [];\n while (hasNext) {\n const request = {\n 'limit': 250,\n };\n if (starting_after) {\n request.starting_after = starting_after;\n }\n const accountsResponse = await this.v2PrivateGetAccounts(this.extend(request, params));\n //\n // {\n // \"pagination\":{\n // \"ending_before\":null,\n // \"starting_after\":null,\n // \"previous_ending_before\":null,\n // \"next_starting_after\":\"6b17acd6-2e68-5eb0-9f45-72d67cef578b\",\n // \"limit\":100,\n // \"order\":\"desc\",\n // \"previous_uri\":null,\n // \"next_uri\":\"/v2/accounts?limit=100\\u0026starting_after=6b17acd6-2e68-5eb0-9f45-72d67cef578b\"\n // },\n // \"data\":[\n // {\n // \"id\":\"94ad58bc-0f15-5309-b35a-a4c86d7bad60\",\n // \"name\":\"MINA Wallet\",\n // \"primary\":false,\n // \"type\":\"wallet\",\n // \"currency\":{\n // \"code\":\"MINA\",\n // \"name\":\"Mina\",\n // \"color\":\"#EA6B48\",\n // \"sort_index\":397,\n // \"exponent\":9,\n // \"type\":\"crypto\",\n // \"address_regex\":\"^(B62)[A-Za-z0-9]{52}$\",\n // \"asset_id\":\"a4ffc575-942c-5e26-b70c-cb3befdd4229\",\n // \"slug\":\"mina\"\n // },\n // \"balance\":{\"amount\":\"0.000000000\",\"currency\":\"MINA\"},\n // \"created_at\":\"2022-03-25T00:36:16Z\",\n // \"updated_at\":\"2022-03-25T00:36:16Z\",\n // \"resource\":\"account\",\n // \"resource_path\":\"/v2/accounts/94ad58bc-0f15-5309-b35a-a4c86d7bad60\",\n // \"allow_deposits\":true,\n // \"allow_withdrawals\":true\n // },\n // ]\n // }\n //\n hasNext = this.safeValue(accountsResponse.pagination, 'next_uri');\n starting_after = this.safeValue(accountsResponse.pagination, 'next_starting_after');\n const result = this.safeValue(accountsResponse, 'data', []);\n accounts = accounts.concat(result);\n }\n return this.parseCustomBalance(accounts, params);\n }\n async fetchLedger(code = undefined, since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name coinbase#fetchLedger\n * @description fetch the history of changes, actions done by the user or operations that altered balance of the user\n * @see https://docs.cloud.coinbase.com/sign-in-with-coinbase/docs/api-transactions#list-transactions\n * @param {string} code unified currency code, default is undefined\n * @param {int} [since] timestamp in ms of the earliest ledger entry, default is undefined\n * @param {int} [limit] max number of ledger entrys to return, default is undefined\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} a [ledger structure]{@link https://docs.ccxt.com/#/?id=ledger-structure}\n */\n await this.loadMarkets();\n let currency = undefined;\n if (code !== undefined) {\n currency = this.currency(code);\n }\n const request = await this.prepareAccountRequestWithCurrencyCode(code, limit, params);\n const query = this.omit(params, ['account_id', 'accountId']);\n // for pagination use parameter 'starting_after'\n // the value for the next page can be obtained from the result of the previous call in the 'pagination' field\n // eg: instance.last_json_response.pagination.next_starting_after\n const response = await this.v2PrivateGetAccountsAccountIdTransactions(this.extend(request, query));\n return this.parseLedger(response['data'], currency, since, limit);\n }\n parseLedgerEntryStatus(status) {\n const types = {\n 'completed': 'ok',\n };\n return this.safeString(types, status, status);\n }\n parseLedgerEntryType(type) {\n const types = {\n 'buy': 'trade',\n 'sell': 'trade',\n 'fiat_deposit': 'transaction',\n 'fiat_withdrawal': 'transaction',\n 'exchange_deposit': 'transaction',\n 'exchange_withdrawal': 'transaction',\n 'send': 'transaction',\n 'pro_deposit': 'transaction',\n 'pro_withdrawal': 'transaction', // crypto deposit (to coinbase from coinbasepro)\n };\n return this.safeString(types, type, type);\n }\n parseLedgerEntry(item, currency = undefined) {\n //\n // crypto deposit transaction\n //\n // {\n // \"id\": \"34e4816b-4c8c-5323-a01c-35a9fa26e490\",\n // \"type\": \"send\",\n // \"status\": \"completed\",\n // \"amount\": { amount: \"28.31976528\", currency: \"BCH\" },\n // \"native_amount\": { amount: \"2799.65\", currency: \"GBP\" },\n // \"description\": null,\n // \"created_at\": \"2019-02-28T12:35:20Z\",\n // \"updated_at\": \"2019-02-28T12:43:24Z\",\n // \"resource\": \"transaction\",\n // \"resource_path\": \"/v2/accounts/c01d7364-edd7-5f3a-bd1d-de53d4cbb25e/transactions/34e4816b-4c8c-5323-a01c-35a9fa26e490\",\n // \"instant_exchange\": false,\n // \"network\": {\n // \"status\": \"confirmed\",\n // \"hash\": \"56222d865dae83774fccb2efbd9829cf08c75c94ce135bfe4276f3fb46d49701\",\n // \"transaction_url\": \"https://bch.btc.com/56222d865dae83774fccb2efbd9829cf08c75c94ce135bfe4276f3fb46d49701\"\n // },\n // \"from\": { resource: \"bitcoin_cash_network\", currency: \"BCH\" },\n // \"details\": { title: 'Received Bitcoin Cash', subtitle: \"From Bitcoin Cash address\" }\n // }\n //\n // crypto withdrawal transaction\n //\n // {\n // \"id\": \"459aad99-2c41-5698-ac71-b6b81a05196c\",\n // \"type\": \"send\",\n // \"status\": \"completed\",\n // \"amount\": { amount: \"-0.36775642\", currency: \"BTC\" },\n // \"native_amount\": { amount: \"-1111.65\", currency: \"GBP\" },\n // \"description\": null,\n // \"created_at\": \"2019-03-20T08:37:07Z\",\n // \"updated_at\": \"2019-03-20T08:49:33Z\",\n // \"resource\": \"transaction\",\n // \"resource_path\": \"/v2/accounts/c6afbd34-4bd0-501e-8616-4862c193cd84/transactions/459aad99-2c41-5698-ac71-b6b81a05196c\",\n // \"instant_exchange\": false,\n // \"network\": {\n // \"status\": \"confirmed\",\n // \"hash\": \"2732bbcf35c69217c47b36dce64933d103895277fe25738ffb9284092701e05b\",\n // \"transaction_url\": \"https://blockchain.info/tx/2732bbcf35c69217c47b36dce64933d103895277fe25738ffb9284092701e05b\",\n // \"transaction_fee\": { amount: \"0.00000000\", currency: \"BTC\" },\n // \"transaction_amount\": { amount: \"0.36775642\", currency: \"BTC\" },\n // \"confirmations\": 15682,\n // \"network_name\": \"arbitrum\",\n // },\n // \"to\": {\n // \"resource\": \"bitcoin_address\",\n // \"address\": \"1AHnhqbvbYx3rnZx8uC7NbFZaTe4tafFHX\",\n // \"currency\": \"BTC\",\n // \"address_info\": { address: \"1AHnhqbvbYx3rnZx8uC7NbFZaTe4tafFHX\" }\n // },\n // \"idem\": \"da0a2f14-a2af-4c5a-a37e-d4484caf582bsend\",\n // \"application\": {\n // \"id\": \"5756ab6e-836b-553b-8950-5e389451225d\",\n // \"resource\": \"application\",\n // \"resource_path\": \"/v2/applications/5756ab6e-836b-553b-8950-5e389451225d\"\n // },\n // \"details\": { title: 'Sent Bitcoin', subtitle: \"To Bitcoin address\" }\n // }\n //\n // withdrawal transaction from coinbase to coinbasepro\n //\n // {\n // \"id\": \"5b1b9fb8-5007-5393-b923-02903b973fdc\",\n // \"type\": \"pro_deposit\",\n // \"status\": \"completed\",\n // \"amount\": { amount: \"-0.00001111\", currency: \"BCH\" },\n // \"native_amount\": { amount: \"0.00\", currency: \"GBP\" },\n // \"description\": null,\n // \"created_at\": \"2019-02-28T13:31:58Z\",\n // \"updated_at\": \"2019-02-28T13:31:58Z\",\n // \"resource\": \"transaction\",\n // \"resource_path\": \"/v2/accounts/c01d7364-edd7-5f3a-bd1d-de53d4cbb25e/transactions/5b1b9fb8-5007-5393-b923-02903b973fdc\",\n // \"instant_exchange\": false,\n // \"application\": {\n // \"id\": \"5756ab6e-836b-553b-8950-5e389451225d\",\n // \"resource\": \"application\",\n // \"resource_path\": \"/v2/applications/5756ab6e-836b-553b-8950-5e389451225d\"\n // },\n // \"details\": { title: 'Transferred Bitcoin Cash', subtitle: \"To Coinbase Pro\" }\n // }\n //\n // withdrawal transaction from coinbase to gdax\n //\n // {\n // \"id\": \"badb7313-a9d3-5c07-abd0-00f8b44199b1\",\n // \"type\": \"exchange_deposit\",\n // \"status\": \"completed\",\n // \"amount\": { amount: \"-0.43704149\", currency: \"BCH\" },\n // \"native_amount\": { amount: \"-51.90\", currency: \"GBP\" },\n // \"description\": null,\n // \"created_at\": \"2019-03-19T10:30:40Z\",\n // \"updated_at\": \"2019-03-19T10:30:40Z\",\n // \"resource\": \"transaction\",\n // \"resource_path\": \"/v2/accounts/c01d7364-edd7-5f3a-bd1d-de53d4cbb25e/transactions/badb7313-a9d3-5c07-abd0-00f8b44199b1\",\n // \"instant_exchange\": false,\n // \"details\": { title: 'Transferred Bitcoin Cash', subtitle: \"To GDAX\" }\n // }\n //\n // deposit transaction from gdax to coinbase\n //\n // {\n // \"id\": \"9c4b642c-8688-58bf-8962-13cef64097de\",\n // \"type\": \"exchange_withdrawal\",\n // \"status\": \"completed\",\n // \"amount\": { amount: \"0.57729420\", currency: \"BTC\" },\n // \"native_amount\": { amount: \"4418.72\", currency: \"GBP\" },\n // \"description\": null,\n // \"created_at\": \"2018-02-17T11:33:33Z\",\n // \"updated_at\": \"2018-02-17T11:33:33Z\",\n // \"resource\": \"transaction\",\n // \"resource_path\": \"/v2/accounts/c6afbd34-4bd0-501e-8616-4862c193cd84/transactions/9c4b642c-8688-58bf-8962-13cef64097de\",\n // \"instant_exchange\": false,\n // \"details\": { title: 'Transferred Bitcoin', subtitle: \"From GDAX\" }\n // }\n //\n // deposit transaction from coinbasepro to coinbase\n //\n // {\n // \"id\": \"8d6dd0b9-3416-568a-889d-8f112fae9e81\",\n // \"type\": \"pro_withdrawal\",\n // \"status\": \"completed\",\n // \"amount\": { amount: \"0.40555386\", currency: \"BTC\" },\n // \"native_amount\": { amount: \"1140.27\", currency: \"GBP\" },\n // \"description\": null,\n // \"created_at\": \"2019-03-04T19:41:58Z\",\n // \"updated_at\": \"2019-03-04T19:41:58Z\",\n // \"resource\": \"transaction\",\n // \"resource_path\": \"/v2/accounts/c6afbd34-4bd0-501e-8616-4862c193cd84/transactions/8d6dd0b9-3416-568a-889d-8f112fae9e81\",\n // \"instant_exchange\": false,\n // \"application\": {\n // \"id\": \"5756ab6e-836b-553b-8950-5e389451225d\",\n // \"resource\": \"application\",\n // \"resource_path\": \"/v2/applications/5756ab6e-836b-553b-8950-5e389451225d\"\n // },\n // \"details\": { title: 'Transferred Bitcoin', subtitle: \"From Coinbase Pro\" }\n // }\n //\n // sell trade\n //\n // {\n // \"id\": \"a9409207-df64-585b-97ab-a50780d2149e\",\n // \"type\": \"sell\",\n // \"status\": \"completed\",\n // \"amount\": { amount: \"-9.09922880\", currency: \"BTC\" },\n // \"native_amount\": { amount: \"-7285.73\", currency: \"GBP\" },\n // \"description\": null,\n // \"created_at\": \"2017-03-27T15:38:34Z\",\n // \"updated_at\": \"2017-03-27T15:38:34Z\",\n // \"resource\": \"transaction\",\n // \"resource_path\": \"/v2/accounts/c6afbd34-4bd0-501e-8616-4862c193cd84/transactions/a9409207-df64-585b-97ab-a50780d2149e\",\n // \"instant_exchange\": false,\n // \"sell\": {\n // \"id\": \"e3550b4d-8ae6-5de3-95fe-1fb01ba83051\",\n // \"resource\": \"sell\",\n // \"resource_path\": \"/v2/accounts/c6afbd34-4bd0-501e-8616-4862c193cd84/sells/e3550b4d-8ae6-5de3-95fe-1fb01ba83051\"\n // },\n // \"details\": {\n // \"title\": \"Sold Bitcoin\",\n // \"subtitle\": \"Using EUR Wallet\",\n // \"payment_method_name\": \"EUR Wallet\"\n // }\n // }\n //\n // buy trade\n //\n // {\n // \"id\": \"63eeed67-9396-5912-86e9-73c4f10fe147\",\n // \"type\": \"buy\",\n // \"status\": \"completed\",\n // \"amount\": { amount: \"2.39605772\", currency: \"ETH\" },\n // \"native_amount\": { amount: \"98.31\", currency: \"GBP\" },\n // \"description\": null,\n // \"created_at\": \"2017-03-27T09:07:56Z\",\n // \"updated_at\": \"2017-03-27T09:07:57Z\",\n // \"resource\": \"transaction\",\n // \"resource_path\": \"/v2/accounts/8902f85d-4a69-5d74-82fe-8e390201bda7/transactions/63eeed67-9396-5912-86e9-73c4f10fe147\",\n // \"instant_exchange\": false,\n // \"buy\": {\n // \"id\": \"20b25b36-76c6-5353-aa57-b06a29a39d82\",\n // \"resource\": \"buy\",\n // \"resource_path\": \"/v2/accounts/8902f85d-4a69-5d74-82fe-8e390201bda7/buys/20b25b36-76c6-5353-aa57-b06a29a39d82\"\n // },\n // \"details\": {\n // \"title\": \"Bought Ethereum\",\n // \"subtitle\": \"Using EUR Wallet\",\n // \"payment_method_name\": \"EUR Wallet\"\n // }\n // }\n //\n // fiat deposit transaction\n //\n // {\n // \"id\": \"04ed4113-3732-5b0c-af86-b1d2146977d0\",\n // \"type\": \"fiat_deposit\",\n // \"status\": \"completed\",\n // \"amount\": { amount: \"114.02\", currency: \"EUR\" },\n // \"native_amount\": { amount: \"97.23\", currency: \"GBP\" },\n // \"description\": null,\n // \"created_at\": \"2017-02-09T07:01:21Z\",\n // \"updated_at\": \"2017-02-09T07:01:22Z\",\n // \"resource\": \"transaction\",\n // \"resource_path\": \"/v2/accounts/91cd2d36-3a91-55b6-a5d4-0124cf105483/transactions/04ed4113-3732-5b0c-af86-b1d2146977d0\",\n // \"instant_exchange\": false,\n // \"fiat_deposit\": {\n // \"id\": \"f34c19f3-b730-5e3d-9f72-96520448677a\",\n // \"resource\": \"fiat_deposit\",\n // \"resource_path\": \"/v2/accounts/91cd2d36-3a91-55b6-a5d4-0124cf105483/deposits/f34c19f3-b730-5e3d-9f72-96520448677a\"\n // },\n // \"details\": {\n // \"title\": \"Deposited funds\",\n // \"subtitle\": \"From SEPA Transfer (GB47 BARC 20..., reference CBADVI)\",\n // \"payment_method_name\": \"SEPA Transfer (GB47 BARC 20..., reference CBADVI)\"\n // }\n // }\n //\n // fiat withdrawal transaction\n //\n // {\n // \"id\": \"957d98e2-f80e-5e2f-a28e-02945aa93079\",\n // \"type\": \"fiat_withdrawal\",\n // \"status\": \"completed\",\n // \"amount\": { amount: \"-11000.00\", currency: \"EUR\" },\n // \"native_amount\": { amount: \"-9698.22\", currency: \"GBP\" },\n // \"description\": null,\n // \"created_at\": \"2017-12-06T13:19:19Z\",\n // \"updated_at\": \"2017-12-06T13:19:19Z\",\n // \"resource\": \"transaction\",\n // \"resource_path\": \"/v2/accounts/91cd2d36-3a91-55b6-a5d4-0124cf105483/transactions/957d98e2-f80e-5e2f-a28e-02945aa93079\",\n // \"instant_exchange\": false,\n // \"fiat_withdrawal\": {\n // \"id\": \"f4bf1fd9-ab3b-5de7-906d-ed3e23f7a4e7\",\n // \"resource\": \"fiat_withdrawal\",\n // \"resource_path\": \"/v2/accounts/91cd2d36-3a91-55b6-a5d4-0124cf105483/withdrawals/f4bf1fd9-ab3b-5de7-906d-ed3e23f7a4e7\"\n // },\n // \"details\": {\n // \"title\": \"Withdrew funds\",\n // \"subtitle\": \"To HSBC BANK PLC (GB74 MIDL...)\",\n // \"payment_method_name\": \"HSBC BANK PLC (GB74 MIDL...)\"\n // }\n // }\n //\n const amountInfo = this.safeValue(item, 'amount', {});\n let amount = this.safeString(amountInfo, 'amount');\n let direction = undefined;\n if (Precise.stringLt(amount, '0')) {\n direction = 'out';\n amount = Precise.stringNeg(amount);\n }\n else {\n direction = 'in';\n }\n const currencyId = this.safeString(amountInfo, 'currency');\n const code = this.safeCurrencyCode(currencyId, currency);\n //\n // the address and txid do not belong to the unified ledger structure\n //\n // let address = undefined;\n // if (item['to']) {\n // address = this.safeString (item['to'], 'address');\n // }\n // let txid = undefined;\n //\n let fee = undefined;\n const networkInfo = this.safeValue(item, 'network', {});\n const txid = networkInfo['hash']; // txid does not belong to the unified ledger structure\n const networkId = this.safeString(networkInfo, 'network_name');\n const feeInfo = this.safeValue(networkInfo, 'transaction_fee');\n if (feeInfo !== undefined) {\n const feeCurrencyId = this.safeString(feeInfo, 'currency');\n const feeCurrencyCode = this.safeCurrencyCode(feeCurrencyId, currency);\n const feeAmount = this.safeNumber(feeInfo, 'amount');\n fee = {\n 'cost': feeAmount,\n 'currency': feeCurrencyCode,\n };\n }\n const timestamp = this.parse8601(this.safeValue(item, 'created_at'));\n const id = this.safeString(item, 'id');\n const type = this.parseLedgerEntryType(this.safeString(item, 'type'));\n const status = this.parseLedgerEntryStatus(this.safeString(item, 'status'));\n const path = this.safeString(item, 'resource_path');\n let accountId = undefined;\n if (path !== undefined) {\n const parts = path.split('/');\n const numParts = parts.length;\n if (numParts > 3) {\n accountId = parts[3];\n }\n }\n return {\n 'info': item,\n 'id': id,\n 'txid': txid,\n 'network': networkId,\n 'timestamp': timestamp,\n 'datetime': this.iso8601(timestamp),\n 'direction': direction,\n 'account': accountId,\n 'referenceId': undefined,\n 'referenceAccount': undefined,\n 'type': type,\n 'currency': code,\n 'amount': this.parseNumber(amount),\n 'before': undefined,\n 'after': undefined,\n 'status': status,\n 'fee': fee,\n };\n }\n async findAccountId(code) {\n await this.loadMarkets();\n await this.loadAccounts();\n for (let i = 0; i < this.accounts.length; i++) {\n const account = this.accounts[i];\n if (account['code'] === code) {\n return account['id'];\n }\n }\n return undefined;\n }\n prepareAccountRequest(limit = undefined, params = {}) {\n const accountId = this.safeString2(params, 'account_id', 'accountId');\n if (accountId === undefined) {\n throw new InvalidParamsError('prepareAccountRequest() method requires an account_id (or accountId) parameter')\n .exchange(this.id);\n }\n const request = {\n 'account_id': accountId,\n };\n if (limit !== undefined) {\n request['limit'] = limit;\n }\n return request;\n }\n async prepareAccountRequestWithCurrencyCode(code = undefined, limit = undefined, params = {}) {\n let accountId = this.safeString2(params, 'account_id', 'accountId');\n if (accountId === undefined) {\n if (code === undefined) {\n throw new InvalidParamsError('prepareAccountRequestWithCurrencyCode() method requires an account_id (or accountId) parameter OR a currency code argument')\n .exchange(this.id);\n }\n accountId = await this.findAccountId(code);\n if (accountId === undefined) {\n throw new ExchangeError()\n .addMessage('prepareAccountRequestWithCurrencyCode() could not find account id for ' + code)\n .exchange(this.id);\n }\n }\n const request = {\n 'account_id': accountId,\n };\n if (limit !== undefined) {\n request['limit'] = limit;\n }\n return request;\n }\n async createMarketBuyOrderWithCost(symbol, cost, params = {}) {\n /**\n * @method\n * @name coinbase#createMarketBuyOrderWithCost\n * @description create a market buy order by providing the symbol and cost\n * @see https://docs.cloud.coinbase.com/advanced-trade-api/reference/retailbrokerageapi_postorder\n * @param {string} symbol unified symbol of the market to create an order in\n * @param {float} cost how much you want to trade in units of the quote currency\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n await this.loadMarkets();\n const market = this.market(symbol);\n if (!market['spot']) {\n throw new MarketTypeNotSupportedError(market['type'])\n .addMessage('createMarketBuyOrderWithCost() supports spot orders only')\n .exchange(this.id);\n }\n params['createMarketBuyOrderRequiresPrice'] = false;\n return await this.createOrder(symbol, 'market', 'buy', cost, undefined, params);\n }\n async createOrder(symbol, type, side, amount, price = undefined, params = {}) {\n /**\n * @method\n * @name coinbase#createOrder\n * @description create a trade order\n * @see https://docs.cloud.coinbase.com/advanced-trade-api/reference/retailbrokerageapi_postorder\n * @param {string} symbol unified symbol of the market to create an order in\n * @param {string} type 'market' or 'limit'\n * @param {string} side 'buy' or 'sell'\n * @param {float} amount how much you want to trade in units of the base currency, quote currency for 'market' 'buy' orders\n * @param {float} [price] the price to fulfill the order, in units of the quote currency, ignored in market orders\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {float} [params.stopPrice] price to trigger stop orders\n * @param {float} [params.triggerPrice] price to trigger stop orders\n * @param {float} [params.stopLossPrice] price to trigger stop-loss orders\n * @param {float} [params.takeProfitPrice] price to trigger take-profit orders\n * @param {bool} [params.postOnly] true or false\n * @param {string} [params.timeInForce] 'GTC', 'IOC', 'GTD' or 'PO'\n * @param {string} [params.stop_direction] 'UNKNOWN_STOP_DIRECTION', 'STOP_DIRECTION_STOP_UP', 'STOP_DIRECTION_STOP_DOWN' the direction the stopPrice is triggered from\n * @param {string} [params.end_time] '2023-05-25T17:01:05.092Z' for 'GTD' orders\n * @param {float} [params.cost] *spot market buy only* the quote quantity that can be used as an alternative for the amount\n * @param {boolean} [params.preview] default to false, wether to use the test/preview endpoint or not\n * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n await this.loadMarkets();\n const market = this.market(symbol);\n let request = {\n 'client_order_id': this.uuid(),\n 'product_id': market['id'],\n 'side': side.toUpperCase(),\n };\n const stopPrice = this.safeNumberN(params, ['stopPrice', 'stop_price', 'triggerPrice']);\n const stopLossPrice = this.safeNumber(params, 'stopLossPrice');\n const takeProfitPrice = this.safeNumber(params, 'takeProfitPrice');\n const isStop = stopPrice !== undefined;\n const isStopLoss = stopLossPrice !== undefined;\n const isTakeProfit = takeProfitPrice !== undefined;\n const timeInForce = this.safeString(params, 'timeInForce');\n const postOnly = (timeInForce === 'PO') ? true : this.safeValue2(params, 'postOnly', 'post_only', false);\n const endTime = this.safeString(params, 'end_time');\n let stopDirection = this.safeString(params, 'stop_direction');\n if (type === 'limit') {\n if (isStop) {\n if (stopDirection === undefined) {\n stopDirection = (side === 'buy') ? 'STOP_DIRECTION_STOP_DOWN' : 'STOP_DIRECTION_STOP_UP';\n }\n if ((timeInForce === 'GTD') || (endTime !== undefined)) {\n if (endTime === undefined) {\n throw new InvalidParamsError('createOrder() requires an end_time parameter for a GTD order')\n .exchange(this.id);\n }\n request['order_configuration'] = {\n 'stop_limit_stop_limit_gtd': {\n 'base_size': this.amountToPrecision(symbol, amount),\n 'limit_price': this.priceToPrecision(symbol, price),\n 'stop_price': this.priceToPrecision(symbol, stopPrice),\n 'stop_direction': stopDirection,\n 'end_time': endTime,\n },\n };\n }\n else {\n request['order_configuration'] = {\n 'stop_limit_stop_limit_gtc': {\n 'base_size': this.amountToPrecision(symbol, amount),\n 'limit_price': this.priceToPrecision(symbol, price),\n 'stop_price': this.priceToPrecision(symbol, stopPrice),\n 'stop_direction': stopDirection,\n },\n };\n }\n }\n else if (isStopLoss || isTakeProfit) {\n let triggerPrice = undefined;\n if (isStopLoss) {\n if (stopDirection === undefined) {\n stopDirection = (side === 'buy') ? 'STOP_DIRECTION_STOP_UP' : 'STOP_DIRECTION_STOP_DOWN';\n }\n triggerPrice = this.priceToPrecision(symbol, stopLossPrice);\n }\n else {\n if (stopDirection === undefined) {\n stopDirection = (side === 'buy') ? 'STOP_DIRECTION_STOP_DOWN' : 'STOP_DIRECTION_STOP_UP';\n }\n triggerPrice = this.priceToPrecision(symbol, takeProfitPrice);\n }\n request['order_configuration'] = {\n 'stop_limit_stop_limit_gtc': {\n 'base_size': this.amountToPrecision(symbol, amount),\n 'limit_price': this.priceToPrecision(symbol, price),\n 'stop_price': triggerPrice,\n 'stop_direction': stopDirection,\n },\n };\n }\n else {\n if ((timeInForce === 'GTD') || (endTime !== undefined)) {\n if (endTime === undefined) {\n throw new InvalidParamsError('createOrder() requires an end_time parameter for a GTD order')\n .exchange(this.id);\n }\n request['order_configuration'] = {\n 'limit_limit_gtd': {\n 'base_size': this.amountToPrecision(symbol, amount),\n 'limit_price': this.priceToPrecision(symbol, price),\n 'end_time': endTime,\n 'post_only': postOnly,\n },\n };\n }\n else {\n request['order_configuration'] = {\n 'limit_limit_gtc': {\n 'base_size': this.amountToPrecision(symbol, amount),\n 'limit_price': this.priceToPrecision(symbol, price),\n 'post_only': postOnly,\n },\n };\n }\n }\n }\n else {\n if (isStop || isStopLoss || isTakeProfit) {\n throw new TradeError()\n .addMessage('createOrder() only stop limit orders are supported')\n .exchange(this.id);\n }\n if (side === 'buy') {\n let total = undefined;\n let createMarketBuyOrderRequiresPrice = true;\n [createMarketBuyOrderRequiresPrice, params] = this.handleOptionAndParams(params, 'createOrder', 'createMarketBuyOrderRequiresPrice', true);\n const cost = this.safeNumber(params, 'cost');\n params = this.omit(params, 'cost');\n if (cost !== undefined) {\n total = this.costToPrecision(symbol, cost);\n }\n else if (createMarketBuyOrderRequiresPrice) {\n if (price === undefined) {\n throw new InvalidParamsError('createOrder() requires a price argument for market buy orders on spot markets to calculate the total amount to spend (amount * price), alternatively set the createMarketBuyOrderRequiresPrice option or param to false and pass the cost to spend in the amount argument')\n .exchange(this.id);\n }\n else {\n const amountString = this.numberToString(amount);\n const priceString = this.numberToString(price);\n const costRequest = Precise.stringMul(amountString, priceString);\n total = this.costToPrecision(symbol, costRequest);\n }\n }\n else {\n total = this.costToPrecision(symbol, amount);\n }\n request['order_configuration'] = {\n 'market_market_ioc': {\n 'quote_size': total,\n },\n };\n }\n else {\n request['order_configuration'] = {\n 'market_market_ioc': {\n 'base_size': this.amountToPrecision(symbol, amount),\n },\n };\n }\n }\n params = this.omit(params, ['timeInForce', 'triggerPrice', 'stopLossPrice', 'takeProfitPrice', 'stopPrice', 'stop_price', 'stopDirection', 'stop_direction', 'clientOrderId', 'postOnly', 'post_only', 'end_time']);\n const preview = this.safeValue2(params, 'preview', 'test', false);\n let response = undefined;\n if (preview) {\n params = this.omit(params, ['preview', 'test']);\n request = this.omit(request, 'client_order_id');\n response = await this.v3PrivatePostBrokerageOrdersPreview(this.extend(request, params));\n }\n else {\n response = await this.v3PrivatePostBrokerageOrders(this.extend(request, params));\n }\n //\n // successful order\n //\n // {\n // \"success\": true,\n // \"failure_reason\": \"UNKNOWN_FAILURE_REASON\",\n // \"order_id\": \"52cfe5e2-0b29-4c19-a245-a6a773de5030\",\n // \"success_response\": {\n // \"order_id\": \"52cfe5e2-0b29-4c19-a245-a6a773de5030\",\n // \"product_id\": \"LTC-BTC\",\n // \"side\": \"SELL\",\n // \"client_order_id\": \"4d760580-6fca-4094-a70b-ebcca8626288\"\n // },\n // \"order_configuration\": null\n // }\n //\n // failed order\n //\n // {\n // \"success\": false,\n // \"failure_reason\": \"UNKNOWN_FAILURE_REASON\",\n // \"order_id\": \"\",\n // \"error_response\": {\n // \"error\": \"UNSUPPORTED_ORDER_CONFIGURATION\",\n // \"message\": \"source is not enabled for trading\",\n // \"error_details\": \"\",\n // \"new_order_failure_reason\": \"UNSUPPORTED_ORDER_CONFIGURATION\"\n // },\n // \"order_configuration\": {\n // \"limit_limit_gtc\": {\n // \"base_size\": \"100\",\n // \"limit_price\": \"40000\",\n // \"post_only\": false\n // }\n // }\n // }\n //\n const success = this.safeValue(response, 'success');\n if (success !== true) {\n const errorResponse = this.safeValue(response, 'error_response');\n const errorTitle = this.safeString(errorResponse, 'error');\n const errorMessage = this.safeString(errorResponse, 'message');\n if (errorResponse !== undefined) {\n this.throwExactlyMatchedException(this.exceptions['exact'], errorTitle, errorMessage);\n this.throwBroadlyMatchedException(this.exceptions['broad'], errorTitle, errorMessage);\n throw new TradeError().addMessage(errorMessage).exchange(this.id);\n }\n }\n const data = this.safeValue(response, 'success_response', {});\n return this.parseOrder(data, market);\n }\n parseOrder(order, market = undefined) {\n //\n // createOrder\n //\n // {\n // \"order_id\": \"52cfe5e2-0b29-4c19-a245-a6a773de5030\",\n // \"product_id\": \"LTC-BTC\",\n // \"side\": \"SELL\",\n // \"client_order_id\": \"4d760580-6fca-4094-a70b-ebcca8626288\"\n // }\n //\n // cancelOrder, cancelOrders\n //\n // {\n // \"success\": true,\n // \"failure_reason\": \"UNKNOWN_CANCEL_FAILURE_REASON\",\n // \"order_id\": \"bb8851a3-4fda-4a2c-aa06-9048db0e0f0d\"\n // }\n //\n // fetchOrder, fetchOrders, fetchOpenOrders, fetchClosedOrders, fetchCanceledOrders\n //\n // {\n // \"order_id\": \"9bc1eb3b-5b46-4b71-9628-ae2ed0cca75b\",\n // \"product_id\": \"LTC-BTC\",\n // \"user_id\": \"1111111-1111-1111-1111-111111111111\",\n // \"order_configuration\": {\n // \"limit_limit_gtc\": {\n // \"base_size\": \"0.2\",\n // \"limit_price\": \"0.006\",\n // \"post_only\": false\n // },\n // \"stop_limit_stop_limit_gtc\": {\n // \"base_size\": \"48.54\",\n // \"limit_price\": \"6.998\",\n // \"stop_price\": \"7.0687\",\n // \"stop_direction\": \"STOP_DIRECTION_STOP_DOWN\"\n // }\n // },\n // \"side\": \"SELL\",\n // \"client_order_id\": \"e5fe8482-05bb-428f-ad4d-dbc8ce39239c\",\n // \"status\": \"OPEN\",\n // \"time_in_force\": \"GOOD_UNTIL_CANCELLED\",\n // \"created_time\": \"2023-01-16T23:37:23.947030Z\",\n // \"completion_percentage\": \"0\",\n // \"filled_size\": \"0\",\n // \"average_filled_price\": \"0\",\n // \"fee\": \"\",\n // \"number_of_fills\": \"0\",\n // \"filled_value\": \"0\",\n // \"pending_cancel\": false,\n // \"size_in_quote\": false,\n // \"total_fees\": \"0\",\n // \"size_inclusive_of_fees\": false,\n // \"total_value_after_fees\": \"0\",\n // \"trigger_status\": \"INVALID_ORDER_TYPE\",\n // \"order_type\": \"LIMIT\",\n // \"reject_reason\": \"REJECT_REASON_UNSPECIFIED\",\n // \"settled\": false,\n // \"product_type\": \"SPOT\",\n // \"reject_message\": \"\",\n // \"cancel_message\": \"\"\n // }\n //\n const marketId = this.safeString(order, 'product_id');\n const symbol = this.safeSymbol(marketId, market, '-');\n if (symbol !== undefined) {\n market = this.market(symbol);\n }\n const orderConfiguration = this.safeValue(order, 'order_configuration', {});\n const limitGTC = this.safeValue(orderConfiguration, 'limit_limit_gtc');\n const limitGTD = this.safeValue(orderConfiguration, 'limit_limit_gtd');\n const stopLimitGTC = this.safeValue(orderConfiguration, 'stop_limit_stop_limit_gtc');\n const stopLimitGTD = this.safeValue(orderConfiguration, 'stop_limit_stop_limit_gtd');\n const marketIOC = this.safeValue(orderConfiguration, 'market_market_ioc');\n const isLimit = ((limitGTC !== undefined) || (limitGTD !== undefined));\n const isStop = ((stopLimitGTC !== undefined) || (stopLimitGTD !== undefined));\n let price = undefined;\n let amount = undefined;\n let postOnly = undefined;\n let triggerPrice = undefined;\n if (isLimit) {\n const target = (limitGTC !== undefined) ? limitGTC : limitGTD;\n price = this.safeString(target, 'limit_price');\n amount = this.safeString(target, 'base_size');\n postOnly = this.safeValue(target, 'post_only');\n }\n else if (isStop) {\n const stopTarget = (stopLimitGTC !== undefined) ? stopLimitGTC : stopLimitGTD;\n price = this.safeString(stopTarget, 'limit_price');\n amount = this.safeString(stopTarget, 'base_size');\n postOnly = this.safeValue(stopTarget, 'post_only');\n triggerPrice = this.safeString(stopTarget, 'stop_price');\n }\n else {\n amount = this.safeString(marketIOC, 'base_size');\n }\n const datetime = this.safeString(order, 'created_time');\n const totalFees = this.safeString(order, 'total_fees');\n let currencyFee = undefined;\n if ((totalFees !== undefined) && (market !== undefined)) {\n currencyFee = market['quote'];\n }\n return this.safeOrder({\n 'info': order,\n 'id': this.safeString(order, 'order_id'),\n 'clientOrderId': this.safeString(order, 'client_order_id'),\n 'timestamp': this.parse8601(datetime),\n 'datetime': datetime,\n 'lastTradeTimestamp': undefined,\n 'symbol': symbol,\n 'type': this.parseOrderType(this.safeString(order, 'order_type')),\n 'timeInForce': this.parseTimeInForce(this.safeString(order, 'time_in_force')),\n 'postOnly': postOnly,\n 'side': this.safeStringLower(order, 'side'),\n 'price': price,\n 'stopPrice': triggerPrice,\n 'triggerPrice': triggerPrice,\n 'amount': amount,\n 'filled': this.safeString(order, 'filled_size'),\n 'remaining': undefined,\n 'cost': undefined,\n 'average': this.safeString(order, 'average_filled_price'),\n 'status': this.parseOrderStatus(this.safeString(order, 'status')),\n 'fee': {\n 'cost': this.safeString(order, 'total_fees'),\n 'currency': currencyFee,\n },\n 'trades': undefined,\n }, market);\n }\n parseOrderStatus(status) {\n const statuses = {\n 'OPEN': 'open',\n 'FILLED': 'closed',\n 'CANCELLED': 'canceled',\n 'EXPIRED': 'canceled',\n 'FAILED': 'canceled',\n 'UNKNOWN_ORDER_STATUS': undefined,\n };\n return this.safeString(statuses, status, status);\n }\n parseOrderType(type) {\n if (type === 'UNKNOWN_ORDER_TYPE') {\n return undefined;\n }\n const types = {\n 'MARKET': 'market',\n 'LIMIT': 'limit',\n 'STOP': 'limit',\n 'STOP_LIMIT': 'limit',\n };\n return this.safeString(types, type, type);\n }\n parseTimeInForce(timeInForce) {\n const timeInForces = {\n 'GOOD_UNTIL_CANCELLED': 'GTC',\n 'GOOD_UNTIL_DATE_TIME': 'GTD',\n 'IMMEDIATE_OR_CANCEL': 'IOC',\n 'FILL_OR_KILL': 'FOK',\n 'UNKNOWN_TIME_IN_FORCE': undefined,\n };\n return this.safeString(timeInForces, timeInForce, timeInForce);\n }\n async cancelOrder(id, symbol = undefined, params = {}) {\n /**\n * @method\n * @name coinbase#cancelOrder\n * @description cancels an open order\n * @see https://docs.cloud.coinbase.com/advanced-trade-api/reference/retailbrokerageapi_cancelorders\n * @param {string} id order id\n * @param {string} symbol not used by coinbase cancelOrder()\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} An [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n await this.loadMarkets();\n const orders = await this.cancelOrders([id], symbol, params);\n return this.safeValue(orders, 0, {});\n }\n async cancelOrders(ids, symbol = undefined, params = {}) {\n /**\n * @method\n * @name coinbase#cancelOrders\n * @description cancel multiple orders\n * @see https://docs.cloud.coinbase.com/advanced-trade-api/reference/retailbrokerageapi_cancelorders\n * @param {string[]} ids order ids\n * @param {string} symbol not used by coinbase cancelOrders()\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n await this.loadMarkets();\n let market = undefined;\n if (symbol !== undefined) {\n market = this.market(symbol);\n }\n const request = {\n 'order_ids': ids,\n };\n const response = await this.v3PrivatePostBrokerageOrdersBatchCancel(this.extend(request, params));\n //\n // {\n // \"results\": [\n // {\n // \"success\": true,\n // \"failure_reason\": \"UNKNOWN_CANCEL_FAILURE_REASON\",\n // \"order_id\": \"bb8851a3-4fda-4a2c-aa06-9048db0e0f0d\"\n // }\n // ]\n // }\n //\n const orders = this.safeValue(response, 'results', []);\n for (let i = 0; i < orders.length; i++) {\n const success = this.safeValue(orders[i], 'success');\n if (success !== true) {\n throw new TradeError()\n .addMessage('cancelOrders() has failed, check your arguments and parameters')\n .exchange(this.id);\n }\n }\n return this.parseOrders(orders, market);\n }\n async editOrder(id, symbol, type, side, amount = undefined, price = undefined, params = {}) {\n /**\n * @method\n * @name coinbase#editOrder\n * @description edit a trade order\n * @see https://docs.cloud.coinbase.com/advanced-trade-api/reference/retailbrokerageapi_editorder\n * @param {string} id cancel order id\n * @param {string} symbol unified symbol of the market to create an order in\n * @param {string} type 'market' or 'limit'\n * @param {string} side 'buy' or 'sell'\n * @param {float} amount how much of currency you want to trade in units of base currency\n * @param {float} [price] the price at which the order is to be fullfilled, in units of the base currency, ignored in market orders\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {boolean} [params.preview] default to false, wether to use the test/preview endpoint or not\n * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n await this.loadMarkets();\n const market = this.market(symbol);\n const request = {\n 'order_id': id,\n };\n if (amount !== undefined) {\n request['size'] = this.amountToPrecision(symbol, amount);\n }\n if (price !== undefined) {\n request['price'] = this.priceToPrecision(symbol, price);\n }\n const preview = this.safeValue2(params, 'preview', 'test', false);\n let response = undefined;\n if (preview) {\n params = this.omit(params, ['preview', 'test']);\n response = await this.v3PrivatePostBrokerageOrdersEditPreview(this.extend(request, params));\n }\n else {\n response = await this.v3PrivatePostBrokerageOrdersEdit(this.extend(request, params));\n }\n //\n // {\n // \"success\": true,\n // \"errors\": {\n // \"edit_failure_reason\": \"UNKNOWN_EDIT_ORDER_FAILURE_REASON\",\n // \"preview_failure_reason\": \"UNKNOWN_PREVIEW_FAILURE_REASON\"\n // }\n // }\n //\n return this.parseOrder(response, market);\n }\n async fetchOrder(id, symbol = undefined, params = {}) {\n /**\n * @method\n * @name coinbase#fetchOrder\n * @description fetches information on an order made by the user\n * @see https://docs.cloud.coinbase.com/advanced-trade-api/reference/retailbrokerageapi_gethistoricalorder\n * @param {string} id the order id\n * @param {string} symbol unified market symbol that the order was made in\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} An [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n await this.loadMarkets();\n let market = undefined;\n if (symbol !== undefined) {\n market = this.market(symbol);\n }\n const request = {\n 'order_id': id,\n };\n const response = await this.v3PrivateGetBrokerageOrdersHistoricalOrderId(this.extend(request, params));\n //\n // {\n // \"order\": {\n // \"order_id\": \"9bc1eb3b-5b46-4b71-9628-ae2ed0cca75b\",\n // \"product_id\": \"LTC-BTC\",\n // \"user_id\": \"1111111-1111-1111-1111-111111111111\",\n // \"order_configuration\": {\n // \"limit_limit_gtc\": {\n // \"base_size\": \"0.2\",\n // \"limit_price\": \"0.006\",\n // \"post_only\": false\n // }\n // },\n // \"side\": \"SELL\",\n // \"client_order_id\": \"e5fe8482-05bb-428f-ad4d-dbc8ce39239c\",\n // \"status\": \"OPEN\",\n // \"time_in_force\": \"GOOD_UNTIL_CANCELLED\",\n // \"created_time\": \"2023-01-16T23:37:23.947030Z\",\n // \"completion_percentage\": \"0\",\n // \"filled_size\": \"0\",\n // \"average_filled_price\": \"0\",\n // \"fee\": \"\",\n // \"number_of_fills\": \"0\",\n // \"filled_value\": \"0\",\n // \"pending_cancel\": false,\n // \"size_in_quote\": false,\n // \"total_fees\": \"0\",\n // \"size_inclusive_of_fees\": false,\n // \"total_value_after_fees\": \"0\",\n // \"trigger_status\": \"INVALID_ORDER_TYPE\",\n // \"order_type\": \"LIMIT\",\n // \"reject_reason\": \"REJECT_REASON_UNSPECIFIED\",\n // \"settled\": false,\n // \"product_type\": \"SPOT\",\n // \"reject_message\": \"\",\n // \"cancel_message\": \"\"\n // }\n // }\n //\n const order = this.safeValue(response, 'order', {});\n return this.parseOrder(order, market);\n }\n async fetchOrders(symbol = undefined, since = undefined, limit = 100, params = {}) {\n /**\n * @method\n * @name coinbase#fetchOrders\n * @description fetches information on multiple orders made by the user\n * @see https://docs.cloud.coinbase.com/advanced-trade-api/reference/retailbrokerageapi_gethistoricalorders\n * @param {string} symbol unified market symbol that the orders were made in\n * @param {int} [since] the earliest time in ms to fetch orders\n * @param {int} [limit] the maximum number of order structures to retrieve\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {int} [params.until] the latest time in ms to fetch trades for\n * @param {boolean} [params.paginate] default false, when true will automatically paginate by calling this endpoint multiple times. See in the docs all the [availble parameters](https://github.com/ccxt/ccxt/wiki/Manual#pagination-params)\n * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n await this.loadMarkets();\n let paginate = false;\n [paginate, params] = this.handleOptionAndParams(params, 'fetchOrders', 'paginate');\n if (paginate) {\n return await this.fetchPaginatedCallCursor('fetchOrders', symbol, since, limit, params, 'cursor', 'cursor', undefined, 100);\n }\n let market = undefined;\n if (symbol !== undefined) {\n market = this.market(symbol);\n }\n const request = {};\n if (market !== undefined) {\n request['product_id'] = market['id'];\n }\n if (limit !== undefined) {\n request['limit'] = limit;\n }\n if (since !== undefined) {\n request['start_date'] = this.iso8601(since);\n }\n const until = this.safeValueN(params, ['until', 'till']);\n if (until !== undefined) {\n params = this.omit(params, ['until', 'till']);\n request['end_date'] = this.iso8601(until);\n }\n const response = await this.v3PrivateGetBrokerageOrdersHistoricalBatch(this.extend(request, params));\n //\n // {\n // \"orders\": [\n // {\n // \"order_id\": \"813a53c5-3e39-47bb-863d-2faf685d22d8\",\n // \"product_id\": \"BTC-USDT\",\n // \"user_id\": \"1111111-1111-1111-1111-111111111111\",\n // \"order_configuration\": {\n // \"market_market_ioc\": {\n // \"quote_size\": \"6.36\"\n // }\n // },\n // \"side\": \"BUY\",\n // \"client_order_id\": \"18eb9947-db49-4874-8e7b-39b8fe5f4317\",\n // \"status\": \"FILLED\",\n // \"time_in_force\": \"IMMEDIATE_OR_CANCEL\",\n // \"created_time\": \"2023-01-18T01:37:37.975552Z\",\n // \"completion_percentage\": \"100\",\n // \"filled_size\": \"0.000297920684505\",\n // \"average_filled_price\": \"21220.6399999973697697\",\n // \"fee\": \"\",\n // \"number_of_fills\": \"2\",\n // \"filled_value\": \"6.3220675944333996\",\n // \"pending_cancel\": false,\n // \"size_in_quote\": true,\n // \"total_fees\": \"0.0379324055666004\",\n // \"size_inclusive_of_fees\": true,\n // \"total_value_after_fees\": \"6.36\",\n // \"trigger_status\": \"INVALID_ORDER_TYPE\",\n // \"order_type\": \"MARKET\",\n // \"reject_reason\": \"REJECT_REASON_UNSPECIFIED\",\n // \"settled\": true,\n // \"product_type\": \"SPOT\",\n // \"reject_message\": \"\",\n // \"cancel_message\": \"Internal error\"\n // },\n // ],\n // \"sequence\": \"0\",\n // \"has_next\": false,\n // \"cursor\": \"\"\n // }\n //\n const orders = this.safeValue(response, 'orders', []);\n const first = this.safeValue(orders, 0);\n const cursor = this.safeString(response, 'cursor');\n if ((cursor !== undefined) && (cursor !== '')) {\n first['cursor'] = cursor;\n orders[0] = first;\n }\n return this.parseOrders(orders, market, since, limit);\n }\n async fetchOrdersByStatus(status, symbol = undefined, since = undefined, limit = undefined, params = {}) {\n await this.loadMarkets();\n let market = undefined;\n if (symbol !== undefined) {\n market = this.market(symbol);\n }\n const request = {\n 'order_status': status,\n };\n if (market !== undefined) {\n request['product_id'] = market['id'];\n }\n if (limit === undefined) {\n limit = 100;\n }\n request['limit'] = limit;\n if (since !== undefined) {\n request['start_date'] = this.iso8601(since);\n }\n const until = this.safeValueN(params, ['until', 'till']);\n if (until !== undefined) {\n params = this.omit(params, ['until', 'till']);\n request['end_date'] = this.iso8601(until);\n }\n const response = await this.v3PrivateGetBrokerageOrdersHistoricalBatch(this.extend(request, params));\n //\n // {\n // \"orders\": [\n // {\n // \"order_id\": \"813a53c5-3e39-47bb-863d-2faf685d22d8\",\n // \"product_id\": \"BTC-USDT\",\n // \"user_id\": \"1111111-1111-1111-1111-111111111111\",\n // \"order_configuration\": {\n // \"market_market_ioc\": {\n // \"quote_size\": \"6.36\"\n // }\n // },\n // \"side\": \"BUY\",\n // \"client_order_id\": \"18eb9947-db49-4874-8e7b-39b8fe5f4317\",\n // \"status\": \"FILLED\",\n // \"time_in_force\": \"IMMEDIATE_OR_CANCEL\",\n // \"created_time\": \"2023-01-18T01:37:37.975552Z\",\n // \"completion_percentage\": \"100\",\n // \"filled_size\": \"0.000297920684505\",\n // \"average_filled_price\": \"21220.6399999973697697\",\n // \"fee\": \"\",\n // \"number_of_fills\": \"2\",\n // \"filled_value\": \"6.3220675944333996\",\n // \"pending_cancel\": false,\n // \"size_in_quote\": true,\n // \"total_fees\": \"0.0379324055666004\",\n // \"size_inclusive_of_fees\": true,\n // \"total_value_after_fees\": \"6.36\",\n // \"trigger_status\": \"INVALID_ORDER_TYPE\",\n // \"order_type\": \"MARKET\",\n // \"reject_reason\": \"REJECT_REASON_UNSPECIFIED\",\n // \"settled\": true,\n // \"product_type\": \"SPOT\",\n // \"reject_message\": \"\",\n // \"cancel_message\": \"Internal error\"\n // },\n // ],\n // \"sequence\": \"0\",\n // \"has_next\": false,\n // \"cursor\": \"\"\n // }\n //\n const orders = this.safeValue(response, 'orders', []);\n const first = this.safeValue(orders, 0);\n const cursor = this.safeString(response, 'cursor');\n if ((cursor !== undefined) && (cursor !== '')) {\n first['cursor'] = cursor;\n orders[0] = first;\n }\n return this.parseOrders(orders, market, since, limit);\n }\n async fetchOpenOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name coinbase#fetchOpenOrders\n * @description fetches information on all currently open orders\n * @see https://docs.cloud.coinbase.com/advanced-trade-api/reference/retailbrokerageapi_gethistoricalorders\n * @param {string} symbol unified market symbol of the orders\n * @param {int} [since] timestamp in ms of the earliest order, default is undefined\n * @param {int} [limit] the maximum number of open order structures to retrieve\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {boolean} [params.paginate] default false, when true will automatically paginate by calling this endpoint multiple times. See in the docs all the [availble parameters](https://github.com/ccxt/ccxt/wiki/Manual#pagination-params)\n * @param {int} [params.until] the latest time in ms to fetch trades for\n * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n await this.loadMarkets();\n let paginate = false;\n [paginate, params] = this.handleOptionAndParams(params, 'fetchOpenOrders', 'paginate');\n if (paginate) {\n return await this.fetchPaginatedCallCursor('fetchOpenOrders', symbol, since, limit, params, 'cursor', 'cursor', undefined, 100);\n }\n return await this.fetchOrdersByStatus('OPEN', symbol, since, limit, params);\n }\n async fetchClosedOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name coinbase#fetchClosedOrders\n * @description fetches information on multiple closed orders made by the user\n * @see https://docs.cloud.coinbase.com/advanced-trade-api/reference/retailbrokerageapi_gethistoricalorders\n * @param {string} symbol unified market symbol of the orders\n * @param {int} [since] timestamp in ms of the earliest order, default is undefined\n * @param {int} [limit] the maximum number of closed order structures to retrieve\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {boolean} [params.paginate] default false, when true will automatically paginate by calling this endpoint multiple times. See in the docs all the [availble parameters](https://github.com/ccxt/ccxt/wiki/Manual#pagination-params)\n * @param {int} [params.until] the latest time in ms to fetch trades for\n * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n await this.loadMarkets();\n let paginate = false;\n [paginate, params] = this.handleOptionAndParams(params, 'fetchClosedOrders', 'paginate');\n if (paginate) {\n return await this.fetchPaginatedCallCursor('fetchClosedOrders', symbol, since, limit, params, 'cursor', 'cursor', undefined, 100);\n }\n return await this.fetchOrdersByStatus('FILLED', symbol, since, limit, params);\n }\n async fetchCanceledOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name coinbase#fetchCanceledOrders\n * @description fetches information on multiple canceled orders made by the user\n * @see https://docs.cloud.coinbase.com/advanced-trade-api/reference/retailbrokerageapi_gethistoricalorders\n * @param {string} symbol unified market symbol of the orders\n * @param {int} [since] timestamp in ms of the earliest order, default is undefined\n * @param {int} [limit] the maximum number of canceled order structures to retrieve\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n return await this.fetchOrdersByStatus('CANCELLED', symbol, since, limit, params);\n }\n async fetchOHLCV(symbol, timeframe = '1m', since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name coinbase#fetchOHLCV\n * @description fetches historical candlestick data containing the open, high, low, and close price, and the volume of a market\n * @see https://docs.cloud.coinbase.com/advanced-trade-api/reference/retailbrokerageapi_getcandles\n * @param {string} symbol unified symbol of the market to fetch OHLCV data for\n * @param {string} timeframe the length of time each candle represents\n * @param {int} [since] timestamp in ms of the earliest candle to fetch\n * @param {int} [limit] the maximum amount of candles to fetch, not used by coinbase\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {int} [params.until] the latest time in ms to fetch trades for\n * @param {boolean} [params.paginate] default false, when true will automatically paginate by calling this endpoint multiple times. See in the docs all the [availble parameters](https://github.com/ccxt/ccxt/wiki/Manual#pagination-params)\n * @returns {int[][]} A list of candles ordered as timestamp, open, high, low, close, volume\n */\n await this.loadMarkets();\n let paginate = false;\n [paginate, params] = this.handleOptionAndParams(params, 'fetchOHLCV', 'paginate', false);\n if (paginate) {\n return await this.fetchPaginatedCallDeterministic('fetchOHLCV', symbol, since, limit, timeframe, params, 299);\n }\n const market = this.market(symbol);\n const request = {\n 'product_id': market['id'],\n 'granularity': this.safeString(this.timeframes, timeframe, timeframe),\n };\n const until = this.safeValueN(params, ['until', 'till', 'end']);\n params = this.omit(params, ['until', 'till']);\n const duration = this.parseTimeframe(timeframe);\n const candles300 = 300 * duration;\n let sinceString = undefined;\n if (since !== undefined) {\n sinceString = this.numberToString(this.parseToInt(since / 1000));\n }\n else {\n const now = this.seconds().toString();\n sinceString = Precise.stringSub(now, candles300.toString());\n }\n request['start'] = sinceString;\n let endString = this.numberToString(until);\n if (until === undefined) {\n // 300 candles max\n endString = Precise.stringAdd(sinceString, candles300.toString());\n }\n request['end'] = endString;\n const response = await this.v3PrivateGetBrokerageProductsProductIdCandles(this.extend(request, params));\n //\n // {\n // \"candles\": [\n // {\n // \"start\": \"1673391780\",\n // \"low\": \"17414.36\",\n // \"high\": \"17417.99\",\n // \"open\": \"17417.74\",\n // \"close\": \"17417.38\",\n // \"volume\": \"1.87780853\"\n // },\n // ]\n // }\n //\n const candles = this.safeValue(response, 'candles', []);\n return this.parseOHLCVs(candles, market, timeframe, since, limit);\n }\n parseOHLCV(ohlcv, market = undefined) {\n //\n // [\n // {\n // \"start\": \"1673391780\",\n // \"low\": \"17414.36\",\n // \"high\": \"17417.99\",\n // \"open\": \"17417.74\",\n // \"close\": \"17417.38\",\n // \"volume\": \"1.87780853\"\n // },\n // ]\n //\n return [\n this.safeTimestamp(ohlcv, 'start'),\n this.safeNumber(ohlcv, 'open'),\n this.safeNumber(ohlcv, 'high'),\n this.safeNumber(ohlcv, 'low'),\n this.safeNumber(ohlcv, 'close'),\n this.safeNumber(ohlcv, 'volume'),\n ];\n }\n async fetchTrades(symbol, since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name coinbase#fetchTrades\n * @description get the list of most recent trades for a particular symbol\n * @see https://docs.cloud.coinbase.com/advanced-trade-api/reference/retailbrokerageapi_getmarkettrades\n * @param {string} symbol unified market symbol of the trades\n * @param {int} [since] not used by coinbase fetchTrades\n * @param {int} [limit] the maximum number of trade structures to fetch\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {Trade[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=public-trades}\n */\n await this.loadMarkets();\n const market = this.market(symbol);\n const request = {\n 'product_id': market['id'],\n };\n if (limit !== undefined) {\n request['limit'] = limit;\n }\n const response = await this.v3PrivateGetBrokerageProductsProductIdTicker(this.extend(request, params));\n //\n // {\n // \"trades\": [\n // {\n // \"trade_id\": \"10092327\",\n // \"product_id\": \"BTC-USDT\",\n // \"price\": \"17488.12\",\n // \"size\": \"0.0000623\",\n // \"time\": \"2023-01-11T00:52:37.557001Z\",\n // \"side\": \"BUY\",\n // \"bid\": \"\",\n // \"ask\": \"\"\n // },\n // ]\n // }\n //\n const trades = this.safeValue(response, 'trades', []);\n return this.parseTrades(trades, market, since, limit);\n }\n async fetchMyTrades(symbol = undefined, since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name coinbase#fetchMyTrades\n * @description fetch all trades made by the user\n * @see https://docs.cloud.coinbase.com/advanced-trade-api/reference/retailbrokerageapi_getfills\n * @param {string} symbol unified market symbol of the trades\n * @param {int} [since] timestamp in ms of the earliest order, default is undefined\n * @param {int} [limit] the maximum number of trade structures to fetch\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {int} [params.until] the latest time in ms to fetch trades for\n * @param {boolean} [params.paginate] default false, when true will automatically paginate by calling this endpoint multiple times. See in the docs all the [availble parameters](https://github.com/ccxt/ccxt/wiki/Manual#pagination-params)\n * @returns {Trade[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=trade-structure}\n */\n await this.loadMarkets();\n let paginate = false;\n [paginate, params] = this.handleOptionAndParams(params, 'fetchMyTrades', 'paginate');\n if (paginate) {\n return await this.fetchPaginatedCallCursor('fetchMyTrades', symbol, since, limit, params, 'cursor', 'cursor', undefined, 100);\n }\n let market = undefined;\n if (symbol !== undefined) {\n market = this.market(symbol);\n }\n const request = {};\n if (market !== undefined) {\n request['product_id'] = market['id'];\n }\n if (limit !== undefined) {\n request['limit'] = limit;\n }\n if (since !== undefined) {\n request['start_sequence_timestamp'] = this.iso8601(since);\n }\n const until = this.safeValueN(params, ['until', 'till']);\n if (until !== undefined) {\n params = this.omit(params, ['until', 'till']);\n request['end_sequence_timestamp'] = this.iso8601(until);\n }\n const response = await this.v3PrivateGetBrokerageOrdersHistoricalFills(this.extend(request, params));\n //\n // {\n // \"fills\": [\n // {\n // \"entry_id\": \"b88b82cc89e326a2778874795102cbafd08dd979a2a7a3c69603fc4c23c2e010\",\n // \"trade_id\": \"cdc39e45-bbd3-44ec-bf02-61742dfb16a1\",\n // \"order_id\": \"813a53c5-3e39-47bb-863d-2faf685d22d8\",\n // \"trade_time\": \"2023-01-18T01:37:38.091377090Z\",\n // \"trade_type\": \"FILL\",\n // \"price\": \"21220.64\",\n // \"size\": \"0.0046830664333996\",\n // \"commission\": \"0.0000280983986004\",\n // \"product_id\": \"BTC-USDT\",\n // \"sequence_timestamp\": \"2023-01-18T01:37:38.092520Z\",\n // \"liquidity_indicator\": \"UNKNOWN_LIQUIDITY_INDICATOR\",\n // \"size_in_quote\": true,\n // \"user_id\": \"1111111-1111-1111-1111-111111111111\",\n // \"side\": \"BUY\"\n // },\n // ],\n // \"cursor\": \"\"\n // }\n //\n const trades = this.safeValue(response, 'fills', []);\n const first = this.safeValue(trades, 0);\n const cursor = this.safeString(response, 'cursor');\n if ((cursor !== undefined) && (cursor !== '')) {\n first['cursor'] = cursor;\n trades[0] = first;\n }\n return this.parseTrades(trades, market, since, limit);\n }\n async fetchOrderBook(symbol, limit = undefined, params = {}) {\n /**\n * @method\n * @name coinbase#fetchOrderBook\n * @description fetches information on open orders with bid (buy) and ask (sell) prices, volumes and other data\n * @see https://docs.cloud.coinbase.com/advanced-trade-api/reference/retailbrokerageapi_getproductbook\n * @param {string} symbol unified symbol of the market to fetch the order book for\n * @param {int} [limit] the maximum amount of order book entries to return\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} A dictionary of [order book structures]{@link https://docs.ccxt.com/#/?id=order-book-structure} indexed by market symbols\n */\n await this.loadMarkets();\n const market = this.market(symbol);\n const request = {\n 'product_id': market['id'],\n };\n if (limit !== undefined) {\n request['limit'] = limit;\n }\n const response = await this.v3PrivateGetBrokerageProductBook(this.extend(request, params));\n //\n // {\n // \"pricebook\": {\n // \"product_id\": \"BTC-USDT\",\n // \"bids\": [\n // {\n // \"price\": \"30757.85\",\n // \"size\": \"0.115\"\n // },\n // ],\n // \"asks\": [\n // {\n // \"price\": \"30759.07\",\n // \"size\": \"0.04877659\"\n // },\n // ],\n // \"time\": \"2023-06-30T04:02:40.533606Z\"\n // }\n // }\n //\n const data = this.safeValue(response, 'pricebook', {});\n const time = this.safeString(data, 'time');\n const timestamp = this.parse8601(time);\n return this.parseOrderBook(data, symbol, timestamp, 'bids', 'asks', 'price', 'size');\n }\n async withdraw(code, amount, address, tag = undefined, params = {}) {\n /**\n * @method\n * @name coinbase#withdraw\n * @description make a withdrawal\n * @see https://docs.cloud.coinbase.com/sign-in-with-coinbase/docs/api-transactions#send-money\n * @param {string} code unified currency code\n * @param {float} amount the amount to withdraw\n * @param {string} address the address to withdraw to\n * @param {string} [tag] an optional tag for the withdrawal\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} a [transaction structure]{@link https://docs.ccxt.com/#/?id=transaction-structure}\n */\n [tag, params] = this.handleWithdrawTagAndParams(tag, params);\n this.checkAddress(address);\n await this.loadMarkets();\n const currency = this.currency(code);\n let accountId = this.safeString2(params, 'account_id', 'accountId');\n params = this.omit(params, ['account_id', 'accountId']);\n if (accountId === undefined) {\n if (code === undefined) {\n throw new InvalidParamsError('withdraw() requires an account_id (or accountId) parameter OR a currency code argument')\n .exchange(this.id);\n }\n accountId = await this.findAccountId(code);\n if (accountId === undefined) {\n throw new TokenSymbolNotFoundError(code)\n .addMessage('It could not find account id for ' + code)\n .exchange(this.id);\n }\n }\n const network = this.safeString(params, 'network');\n const precisionAmount = this.currencyToPrecision(code, amount, network);\n const request = {\n 'account_id': accountId,\n 'type': 'send',\n 'to': address,\n 'amount': precisionAmount,\n 'currency': currency['id'],\n };\n if (tag !== undefined) {\n request['destination_tag'] = tag;\n }\n const response = await this.v2PrivatePostAccountsAccountIdTransactions(this.extend(request, params));\n //\n // {\n // \"data\": {\n // \"id\": \"a1794ecf-5693-55fa-70cf-ef731748ed82\",\n // \"type\": \"send\",\n // \"status\": \"pending\",\n // \"amount\": {\n // \"amount\": \"-14.008308\",\n // \"currency\": \"USDC\"\n // },\n // \"native_amount\": {\n // \"amount\": \"-18.74\",\n // \"currency\": \"CAD\"\n // },\n // \"description\": null,\n // \"created_at\": \"2024-01-12T01:27:31Z\",\n // \"updated_at\": \"2024-01-12T01:27:31Z\",\n // \"resource\": \"transaction\",\n // \"resource_path\": \"/v2/accounts/a34bgfad-ed67-538b-bffc-730c98c10da0/transactions/a1794ecf-5693-55fa-70cf-ef731748ed82\",\n // \"instant_exchange\": false,\n // \"network\": {\n // \"status\": \"pending\",\n // \"status_description\": \"Pending (est. less than 10 minutes)\",\n // \"transaction_fee\": {\n // \"amount\": \"4.008308\",\n // \"currency\": \"USDC\"\n // },\n // \"transaction_amount\": {\n // \"amount\": \"10.000000\",\n // \"currency\": \"USDC\"\n // },\n // \"confirmations\": 0\n // },\n // \"to\": {\n // \"resource\": \"ethereum_address\",\n // \"address\": \"0x9...\",\n // \"currency\": \"USDC\",\n // \"address_info\": {\n // \"address\": \"0x9...\"\n // }\n // },\n // \"idem\": \"748d8591-dg9a-7831-a45b-crd61dg78762\",\n // \"details\": {\n // \"title\": \"Sent USDC\",\n // \"subtitle\": \"To USDC address on Ethereum network\",\n // \"header\": \"Sent 14.008308 USDC ($18.74)\",\n // \"health\": \"warning\"\n // },\n // \"hide_native_amount\": false\n // }\n // }\n //\n const data = this.safeValue(response, 'data', {});\n return this.parseTransaction(data, currency);\n }\n async createAuthToken(seconds, method = undefined, url = undefined) {\n // it may not work for v2\n let uri = undefined;\n if (url !== undefined) {\n uri = method + ' ' + url.replace('https://', '');\n const quesPos = uri.indexOf('?');\n // Due to we use mb_strpos, quesPos could be false in php. In that case, the quesPos >= 0 is true\n // Also it's not possible that the question mark is first character, only check > 0 here.\n if (quesPos > 0) {\n uri = uri.slice(0, quesPos);\n }\n }\n const nonce = this.randomBytes(16);\n const request = {\n 'aud': ['retail_rest_api_proxy'],\n 'iss': 'coinbase-cloud',\n 'nbf': seconds,\n 'exp': seconds + 120,\n 'sub': this.apiKey,\n 'iat': seconds,\n };\n if (uri !== undefined) {\n request['uri'] = uri;\n }\n let token = undefined;\n if (this.externalSigner) {\n token = await this.externalSigner.sign({\n 'payload': request,\n 'publicApiKey': this.apiKey,\n 'exchangeId': this.id,\n 'opts': {\n 'nonce': nonce,\n 'type': 'jwt',\n },\n });\n }\n else {\n token = jwt(request, this.encode(this.secret), sha256, false, { 'kid': this.apiKey, 'nonce': nonce, 'alg': 'ES256' });\n }\n return token;\n }\n async sign(path, api = [], method = 'GET', params = {}, headers = undefined, body = undefined) {\n const version = api[0];\n const signed = api[1] === 'private';\n const isV3 = version === 'v3';\n const pathPart = (isV3) ? 'api/v3' : 'v2';\n let fullPath = '/' + pathPart + '/' + this.implodeParams(path, params);\n const query = this.omit(params, this.extractParams(path));\n const savedPath = fullPath;\n if (method === 'GET') {\n if (Object.keys(query).length) {\n fullPath += '?' + this.urlencodeWithArrayRepeat(query);\n }\n }\n const url = this.urls['api']['rest'] + fullPath;\n if (signed) {\n const authorization = this.safeString(this.headers, 'Authorization');\n let authorizationString = undefined;\n if (authorization !== undefined) {\n authorizationString = authorization;\n }\n else if (this.token) {\n authorizationString = 'Bearer ' + this.token;\n }\n else {\n this.checkRequiredCredentials();\n const seconds = this.seconds();\n let payload = '';\n if (method !== 'GET') {\n if (Object.keys(query).length) {\n body = this.json(query);\n payload = body;\n }\n }\n else {\n if (!isV3) {\n if (Object.keys(query).length) {\n payload += '?' + this.urlencode(query);\n }\n }\n }\n // v3: 'GET' doesn't need payload in the signature. inside url is enough\n // https://docs.cloud.coinbase.com/advanced-trade-api/docs/auth#example-request\n // v2: 'GET' require payload in the signature\n // https://docs.cloud.coinbase.com/sign-in-with-coinbase/docs/api-key-authentication\n const isCloudAPiKey = (this.apiKey.indexOf('organizations/') >= 0) || (this.secret?.startsWith('-----BEGIN') || (!this.secret && this.externalSigner)); // if using an external signer, we assume it's a cloud key\n if (isCloudAPiKey) {\n if (this.apiKey.startsWith('-----BEGIN')) {\n throw new AuthenticationError()\n .addMessage('apiKey should contain the name (eg: organizations/3b910e93....) and not the public key')\n .exchange(this.id);\n }\n // // it may not work for v2\n // let uri = method + ' ' + url.replace ('https://', '');\n // const quesPos = uri.indexOf ('?');\n // // Due to we use mb_strpos, quesPos could be false in php. In that case, the quesPos >= 0 is true\n // // Also it's not possible that the question mark is first character, only check > 0 here.\n // if (quesPos > 0) {\n // uri = uri.slice (0, quesPos);\n // }\n // const nonce = this.randomBytes (16);\n // const request = {\n // 'aud': [ 'retail_rest_api_proxy' ],\n // 'iss': 'coinbase-cloud',\n // 'nbf': seconds,\n // 'exp': seconds + 120,\n // 'sub': this.apiKey,\n // 'uri': uri,\n // 'iat': seconds,\n // };\n const token = await this.createAuthToken(seconds, method, url);\n // const token = jwt (request, this.encode (this.secret), sha256, false, { 'kid': this.apiKey, 'nonce': nonce, 'alg': 'ES256' });\n authorizationString = 'Bearer ' + token;\n }\n else {\n const timestampString = this.seconds().toString();\n const auth = timestampString + method + savedPath + payload;\n let signature = undefined;\n if (this.externalSigner) {\n signature = await this.externalSigner.sign({\n 'payload': this.encode(auth),\n 'publicApiKey': this.apiKey,\n 'exchangeId': this.id,\n });\n }\n else {\n signature = this.hmac(this.encode(auth), this.encode(this.secret), sha256);\n }\n headers = {\n 'CB-ACCESS-KEY': this.apiKey,\n 'CB-ACCESS-SIGN': signature,\n 'CB-ACCESS-TIMESTAMP': timestampString,\n 'Content-Type': 'application/json',\n };\n }\n }\n if (authorizationString !== undefined) {\n headers = {\n 'Authorization': authorizationString,\n 'Content-Type': 'application/json',\n };\n if (method !== 'GET') {\n if (Object.keys(query).length) {\n body = this.json(query);\n }\n }\n }\n }\n return { 'url': url, 'method': method, 'body': body, 'headers': headers };\n }\n handleErrors(code, reason, url, method, headers, body, response, requestHeaders, requestBody) {\n if (response === undefined) {\n return undefined; // fallback to default error handler\n }\n //\n // {\"error\": \"invalid_request\", \"error_description\": \"The request is missing a required parameter, includes an unsupported parameter value, or is otherwise malformed.\"}\n //\n // or\n //\n // {\n // \"errors\": [\n // {\n // \"id\": \"not_found\",\n // \"message\": \"Not found\"\n // }\n // ]\n // }\n //\n // or\n // {\n // \"error\": \"PERMISSION_DENIED\",\n // \"error_details\": \"Orderbook is in limit only mode\",\n // \"message\": \"Orderbook is in limit only mode\"\n // }\n let errorCode = this.safeString(response, 'error');\n if (errorCode !== undefined) {\n const userMessage = this.safeString2(response, 'error_description', 'message');\n const message = errorCode + ': ' + userMessage;\n this.throwExactlyMatchedException(this.exceptions['exact'], errorCode, message);\n this.throwBroadlyMatchedException(this.exceptions['broad'], userMessage, message);\n throw new ExchangeError().addMessage(message).exchange(this.id);\n }\n const errors = this.safeValue(response, 'errors');\n if (errors !== undefined) {\n if (Array.isArray(errors)) {\n const numErrors = errors.length;\n if (numErrors > 0) {\n errorCode = this.safeString(errors[0], 'id');\n if (errorCode !== undefined) {\n const userMessage = this.safeString(errors[0], 'message');\n const message = errorCode + ': ' + userMessage;\n this.throwExactlyMatchedException(this.exceptions['exact'], errorCode, message);\n this.throwBroadlyMatchedException(this.exceptions['broad'], userMessage, message);\n throw new ExchangeError().addMessage(message).exchange(this.id);\n }\n }\n }\n }\n const advancedTrade = this.options['advanced'];\n const data = this.safeValue(response, 'data');\n if ((data === undefined) && (!advancedTrade)) {\n throw new ExchangeError()\n .addMessage('Failed due to a malformed response ' + this.json(response))\n .exchange(this.id);\n }\n return undefined;\n }\n}\n","// ----------------------------------------------------------------------------\n\n// PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:\n// https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code\n// EDIT THE CORRESPONDENT .ts FILE INSTEAD\n\n// ----------------------------------------------------------------------------\nimport Exchange from './abstract/coinbaseexchange.js';\nimport { Precise } from './base/Precise.js';\nimport { TICK_SIZE } from './base/functions/number.js';\nimport { AuthenticationError, CreateDepositAddressError, ExchangeError, ExchangeInvalidPermissionsError, ExchangeRateLimitExceededError, InsufficientBalanceError, InvalidParamsError, MarketNotFoundError, OrderNotFoundError, TokenSymbolNotFoundError, TradeError } from './sdk/errors.js';\nimport { sha256 } from './static_dependencies/noble-hashes/sha256.js';\n// ----------------------------------------------------------------------------\n/**\n * @class coinbaseexchange\n * @augments Exchange\n */\nexport default class coinbaseexchange extends Exchange {\n describe() {\n return this.deepExtend(super.describe(), {\n 'id': 'coinbaseexchange',\n 'name': 'Coinbase Exchange',\n 'countries': ['US'],\n 'rateLimit': 100,\n 'userAgent': this.userAgents['chrome'],\n 'pro': true,\n 'has': {\n 'CORS': true,\n 'spot': true,\n 'margin': false,\n 'swap': false,\n 'future': false,\n 'option': false,\n 'cancelAllOrders': true,\n 'cancelOrder': true,\n 'createDepositAddress': true,\n 'createOrder': true,\n 'createStopLimitOrder': true,\n 'createStopMarketOrder': true,\n 'createStopOrder': true,\n 'fetchAccounts': true,\n 'fetchBalance': true,\n 'fetchClosedOrders': true,\n 'fetchCurrencies': true,\n 'fetchDepositAddress': false,\n 'fetchDeposits': true,\n 'fetchDepositsWithdrawals': true,\n 'fetchFundingRate': false,\n 'fetchLedger': true,\n 'fetchMarginMode': false,\n 'fetchMarkets': true,\n 'fetchMyTrades': true,\n 'fetchOHLCV': true,\n 'fetchOpenOrders': true,\n 'fetchOrder': true,\n 'fetchOrderBook': true,\n 'fetchOrders': true,\n 'fetchOrderTrades': true,\n 'fetchPosition': false,\n 'fetchPositionHistory': false,\n 'fetchPositionMode': false,\n 'fetchPositions': false,\n 'fetchPositionsForSymbol': false,\n 'fetchPositionsHistory': false,\n 'fetchPositionsRisk': false,\n 'fetchTicker': true,\n 'fetchTickers': true,\n 'fetchTime': true,\n 'fetchTrades': true,\n 'fetchTradingFee': false,\n 'fetchTradingFees': true,\n 'fetchTransactions': 'emulated',\n 'fetchWithdrawals': true,\n 'withdraw': true,\n },\n 'timeframes': {\n '1m': 60,\n '5m': 300,\n '15m': 900,\n '1h': 3600,\n '6h': 21600,\n '1d': 86400,\n },\n 'hostname': 'exchange.coinbase.com',\n 'urls': {\n 'test': {\n 'public': 'https://api-public.sandbox.exchange.coinbase.com',\n 'private': 'https://api-public.sandbox.exchange.coinbase.com',\n },\n 'logo': 'https://github.com/ccxt/ccxt/assets/43336371/34a65553-88aa-4a38-a714-064bd228b97e',\n 'api': {\n 'public': 'https://api.{hostname}',\n 'private': 'https://api.{hostname}',\n },\n 'www': 'https://coinbase.com/',\n 'doc': 'https://docs.cloud.coinbase.com/exchange/docs/',\n 'fees': [\n 'https://docs.pro.coinbase.com/#fees',\n 'https://support.pro.coinbase.com/customer/en/portal/articles/2945310-fees',\n ],\n },\n 'requiredCredentials': {\n 'apiKey': true,\n 'secret': true,\n 'password': true,\n },\n 'api': {\n 'public': {\n 'get': [\n 'currencies',\n 'products',\n 'products/{id}',\n 'products/{id}/book',\n 'products/{id}/candles',\n 'products/{id}/stats',\n 'products/{id}/ticker',\n 'products/{id}/trades',\n 'time',\n 'products/spark-lines', // experimental\n ],\n },\n 'private': {\n 'get': [\n 'address-book',\n 'accounts',\n 'accounts/{id}',\n 'accounts/{id}/holds',\n 'accounts/{id}/ledger',\n 'accounts/{id}/transfers',\n 'coinbase-accounts',\n 'fills',\n 'funding',\n 'fees',\n 'margin/profile_information',\n 'margin/buying_power',\n 'margin/withdrawal_power',\n 'margin/withdrawal_power_all',\n 'margin/exit_plan',\n 'margin/liquidation_history',\n 'margin/position_refresh_amounts',\n 'margin/status',\n 'oracle',\n 'orders',\n 'orders/{id}',\n 'orders/client:{client_oid}',\n 'otc/orders',\n 'payment-methods',\n 'position',\n 'profiles',\n 'profiles/{id}',\n 'reports/{report_id}',\n 'transfers',\n 'transfers/{transfer_id}',\n 'users/self/exchange-limits',\n 'users/self/hold-balances',\n 'users/self/trailing-volume',\n 'withdrawals/fee-estimate',\n 'conversions/{conversion_id}',\n 'conversions/fees',\n ],\n 'post': [\n 'conversions',\n 'deposits/coinbase-account',\n 'deposits/payment-method',\n 'coinbase-accounts/{id}/addresses',\n 'funding/repay',\n 'orders',\n 'position/close',\n 'profiles/margin-transfer',\n 'profiles/transfer',\n 'reports',\n 'withdrawals/coinbase',\n 'withdrawals/coinbase-account',\n 'withdrawals/crypto',\n 'withdrawals/payment-method',\n ],\n 'delete': [\n 'orders',\n 'orders/client:{client_oid}',\n 'orders/{id}',\n ],\n },\n },\n 'commonCurrencies': {\n 'CGLD': 'CELO',\n },\n 'precisionMode': TICK_SIZE,\n 'fees': {\n 'trading': {\n 'tierBased': true,\n 'percentage': true,\n 'maker': this.parseNumber('0.004'),\n 'taker': this.parseNumber('0.006'), // highest fee of all tiers\n },\n 'funding': {\n 'tierBased': false,\n 'percentage': false,\n 'withdraw': {\n 'BCH': 0,\n 'BTC': 0,\n 'LTC': 0,\n 'ETH': 0,\n 'EUR': 0.15,\n 'USD': 25,\n },\n 'deposit': {\n 'BCH': 0,\n 'BTC': 0,\n 'LTC': 0,\n 'ETH': 0,\n 'EUR': 0.15,\n 'USD': 10,\n },\n },\n },\n 'exceptions': {\n 'exact': {\n 'Insufficient funds': InsufficientBalanceError,\n 'NotFound': OrderNotFoundError,\n 'Invalid API Key': AuthenticationError,\n 'invalid signature': AuthenticationError,\n 'Invalid Passphrase': AuthenticationError,\n 'Invalid order id': InvalidParamsError,\n 'Private rate limit exceeded': ExchangeRateLimitExceededError,\n 'Trading pair not available': ExchangeInvalidPermissionsError,\n 'Product not found': MarketNotFoundError,\n },\n 'broad': {\n 'Order already done': OrderNotFoundError,\n 'order not found': OrderNotFoundError,\n 'price too small': InvalidParamsError,\n 'price too precise': InvalidParamsError,\n 'under maintenance': ExchangeError,\n 'size is too small': InvalidParamsError,\n 'Cancel only mode': ExchangeError, // https://github.com/ccxt/ccxt/issues/7690\n },\n },\n });\n }\n async fetchCurrencies(params = {}) {\n /**\n * @method\n * @name coinbaseexchange#fetchCurrencies\n * @description fetches all available currencies on an exchange\n * @see https://docs.cloud.coinbase.com/exchange/reference/exchangerestapi_getcurrencies\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} an associative dictionary of currencies\n */\n const response = await this.publicGetCurrencies(params);\n //\n // [\n // {\n // \"id\": \"XTZ\",\n // \"name\": \"Tezos\",\n // \"min_size\": \"0.000001\",\n // \"status\": \"online\",\n // \"message\": '',\n // \"max_precision\": \"0.000001\",\n // \"convertible_to\": [],\n // \"details\": {\n // \"type\": \"crypto\",\n // \"symbol\": \"Τ\",\n // \"network_confirmations\": 60,\n // \"sort_order\": 53,\n // \"crypto_address_link\": \"https://tzstats.com/{{address}}\",\n // \"crypto_transaction_link\": \"https://tzstats.com/{{txId}}\",\n // \"push_payment_methods\": [ \"crypto\" ],\n // \"group_types\": [],\n // \"display_name\": '',\n // \"processing_time_seconds\": 0,\n // \"min_withdrawal_amount\": 1\n // }\n // }\n // ]\n //\n const result = {};\n for (let i = 0; i < response.length; i++) {\n const currency = response[i];\n const id = this.safeString(currency, 'id');\n const name = this.safeString(currency, 'name');\n const code = this.safeCurrencyCode(id);\n const details = this.safeValue(currency, 'details', {});\n const status = this.safeString(currency, 'status');\n const active = (status === 'online');\n result[code] = {\n 'id': id,\n 'code': code,\n 'info': currency,\n 'type': this.safeString(details, 'type'),\n 'name': name,\n 'active': active,\n 'deposit': undefined,\n 'withdraw': undefined,\n 'fee': undefined,\n 'precision': this.safeNumber(currency, 'max_precision'),\n 'limits': {\n 'amount': {\n 'min': this.safeNumber(details, 'min_size'),\n 'max': undefined,\n },\n 'withdraw': {\n 'min': this.safeNumber(details, 'min_withdrawal_amount'),\n 'max': undefined,\n },\n },\n 'networks': {},\n };\n }\n return result;\n }\n async fetchMarkets(params = {}) {\n /**\n * @method\n * @name coinbaseexchange#fetchMarkets\n * @description retrieves data on all markets for coinbaseexchange\n * @see https://docs.cloud.coinbase.com/exchange/reference/exchangerestapi_getproducts\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object[]} an array of objects representing market data\n */\n const response = await this.publicGetProducts(params);\n //\n // [\n // {\n // \"id\": \"BTCAUCTION-USD\",\n // \"base_currency\": \"BTC\",\n // \"quote_currency\": \"USD\",\n // \"base_min_size\": \"0.000016\",\n // \"base_max_size\": \"1500\",\n // \"quote_increment\": \"0.01\",\n // \"base_increment\": \"0.00000001\",\n // \"display_name\": \"BTCAUCTION/USD\",\n // \"min_market_funds\": \"1\",\n // \"max_market_funds\": \"20000000\",\n // \"margin_enabled\": false,\n // \"fx_stablecoin\": false,\n // \"max_slippage_percentage\": \"0.02000000\",\n // \"post_only\": false,\n // \"limit_only\": false,\n // \"cancel_only\": true,\n // \"trading_disabled\": false,\n // \"status\": \"online\",\n // \"status_message\": '',\n // \"auction_mode\": false\n // },\n // {\n // \"id\": \"BTC-USD\",\n // \"base_currency\": \"BTC\",\n // \"quote_currency\": \"USD\",\n // \"base_min_size\": \"0.000016\",\n // \"base_max_size\": \"1500\",\n // \"quote_increment\": \"0.01\",\n // \"base_increment\": \"0.00000001\",\n // \"display_name\": \"BTC/USD\",\n // \"min_market_funds\": \"1\",\n // \"max_market_funds\": \"20000000\",\n // \"margin_enabled\": false,\n // \"fx_stablecoin\": false,\n // \"max_slippage_percentage\": \"0.02000000\",\n // \"post_only\": false,\n // \"limit_only\": false,\n // \"cancel_only\": false,\n // \"trading_disabled\": false,\n // \"status\": \"online\",\n // \"status_message\": '',\n // \"auction_mode\": false\n // }\n // ]\n //\n const result = [];\n for (let i = 0; i < response.length; i++) {\n const market = response[i];\n const id = this.safeString(market, 'id');\n const [baseId, quoteId] = id.split('-');\n // BTCAUCTION-USD vs BTC-USD conflict workaround, see the output sample above\n // const baseId = this.safeString (market, 'base_currency');\n // const quoteId = this.safeString (market, 'quote_currency');\n const base = this.safeCurrencyCode(baseId);\n const quote = this.safeCurrencyCode(quoteId);\n const status = this.safeString(market, 'status');\n result.push(this.extend(this.fees['trading'], {\n 'id': id,\n 'symbol': base + '/' + quote,\n 'base': base,\n 'quote': quote,\n 'settle': undefined,\n 'baseId': baseId,\n 'quoteId': quoteId,\n 'settleId': undefined,\n 'type': 'spot',\n 'spot': true,\n 'margin': this.safeValue(market, 'margin_enabled'),\n 'swap': false,\n 'future': false,\n 'option': false,\n 'active': (status === 'online'),\n 'contract': false,\n 'linear': undefined,\n 'inverse': undefined,\n 'contractSize': undefined,\n 'expiry': undefined,\n 'expiryDatetime': undefined,\n 'strike': undefined,\n 'optionType': undefined,\n 'precision': {\n 'amount': this.safeNumber(market, 'base_increment'),\n 'price': this.safeNumber(market, 'quote_increment'),\n },\n 'limits': {\n 'leverage': {\n 'min': undefined,\n 'max': undefined,\n },\n 'amount': {\n 'min': undefined,\n 'max': undefined,\n },\n 'price': {\n 'min': undefined,\n 'max': undefined,\n },\n 'cost': {\n 'min': this.safeNumber(market, 'min_market_funds'),\n 'max': undefined,\n },\n },\n 'created': undefined,\n 'info': market,\n }));\n }\n return result;\n }\n async fetchAccounts(params = {}) {\n /**\n * @method\n * @name coinbaseexchange#fetchAccounts\n * @description fetch all the accounts associated with a profile\n * @see https://docs.cloud.coinbase.com/exchange/reference/exchangerestapi_getaccounts\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} a dictionary of [account structures]{@link https://docs.ccxt.com/#/?id=account-structure} indexed by the account type\n */\n await this.loadMarkets();\n const response = await this.privateGetAccounts(params);\n //\n // [\n // {\n // \"id\": \"4aac9c60-cbda-4396-9da4-4aa71e95fba0\",\n // \"currency\": \"BTC\",\n // \"balance\": \"0.0000000000000000\",\n // \"available\": \"0\",\n // \"hold\": \"0.0000000000000000\",\n // \"profile_id\": \"b709263e-f42a-4c7d-949a-a95c83d065da\"\n // },\n // {\n // \"id\": \"f75fa69a-1ad1-4a80-bd61-ee7faa6135a3\",\n // \"currency\": \"USDC\",\n // \"balance\": \"0.0000000000000000\",\n // \"available\": \"0\",\n // \"hold\": \"0.0000000000000000\",\n // \"profile_id\": \"b709263e-f42a-4c7d-949a-a95c83d065da\"\n // },\n // ]\n //\n return this.parseAccounts(response, params);\n }\n parseAccount(account) {\n //\n // {\n // \"id\": \"4aac9c60-cbda-4396-9da4-4aa71e95fba0\",\n // \"currency\": \"BTC\",\n // \"balance\": \"0.0000000000000000\",\n // \"available\": \"0\",\n // \"hold\": \"0.0000000000000000\",\n // \"profile_id\": \"b709263e-f42a-4c7d-949a-a95c83d065da\"\n // }\n //\n const currencyId = this.safeString(account, 'currency');\n return {\n 'id': this.safeString(account, 'id'),\n 'type': undefined,\n 'code': this.safeCurrencyCode(currencyId),\n 'info': account,\n };\n }\n parseBalance(response) {\n const result = { 'info': response };\n for (let i = 0; i < response.length; i++) {\n const balance = response[i];\n const currencyId = this.safeString(balance, 'currency');\n const code = this.safeCurrencyCode(currencyId);\n const account = this.account();\n account['free'] = this.safeString(balance, 'available');\n account['used'] = this.safeString(balance, 'hold');\n account['total'] = this.safeString(balance, 'balance');\n result[code] = account;\n }\n return this.safeBalance(result);\n }\n async fetchBalance(params = {}) {\n /**\n * @method\n * @name coinbaseexchange#fetchBalance\n * @description query for balance and get the amount of funds available for trading or funds locked in orders\n * @see https://docs.cloud.coinbase.com/exchange/reference/exchangerestapi_getaccounts\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} a [balance structure]{@link https://docs.ccxt.com/#/?id=balance-structure}\n */\n await this.loadMarkets();\n const response = await this.privateGetAccounts(params);\n return this.parseBalance(response);\n }\n async fetchOrderBook(symbol, limit = undefined, params = {}) {\n /**\n * @method\n * @name coinbaseexchange#fetchOrderBook\n * @see https://docs.cloud.coinbase.com/exchange/reference/exchangerestapi_getproductbook\n * @description fetches information on open orders with bid (buy) and ask (sell) prices, volumes and other data\n * @param {string} symbol unified symbol of the market to fetch the order book for\n * @param {int} [limit] the maximum amount of order book entries to return\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} A dictionary of [order book structures]{@link https://docs.ccxt.com/#/?id=order-book-structure} indexed by market symbols\n */\n await this.loadMarkets();\n // level 1 - only the best bid and ask\n // level 2 - top 50 bids and asks (aggregated)\n // level 3 - full order book (non aggregated)\n const request = {\n 'id': this.marketId(symbol),\n 'level': 2, // 1 best bidask, 2 aggregated, 3 full\n };\n const response = await this.publicGetProductsIdBook(this.extend(request, params));\n //\n // {\n // \"sequence\":1924393896,\n // \"bids\":[\n // [\"0.01825\",\"24.34811287\",2],\n // [\"0.01824\",\"72.5463\",3],\n // [\"0.01823\",\"424.54298049\",6],\n // ],\n // \"asks\":[\n // [\"0.01826\",\"171.10414904\",4],\n // [\"0.01827\",\"22.60427028\",1],\n // [\"0.01828\",\"397.46018784\",7],\n // ]\n // }\n //\n const orderbook = this.parseOrderBook(response, symbol);\n orderbook['nonce'] = this.safeInteger(response, 'sequence');\n return orderbook;\n }\n parseTicker(ticker, market = undefined) {\n //\n // fetchTickers\n //\n // [\n // 1639472400, // timestamp\n // 4.26, // low\n // 4.38, // high\n // 4.35, // open\n // 4.27 // close\n // ]\n //\n // fetchTicker\n //\n // publicGetProductsIdTicker\n //\n // {\n // \"trade_id\":843439,\n // \"price\":\"0.997999\",\n // \"size\":\"80.29769\",\n // \"time\":\"2020-01-28T02:13:33.012523Z\",\n // \"bid\":\"0.997094\",\n // \"ask\":\"0.998\",\n // \"volume\":\"1903188.03750000\"\n // }\n //\n // publicGetProductsIdStats\n //\n // {\n // \"open\": \"34.19000000\",\n // \"high\": \"95.70000000\",\n // \"low\": \"7.06000000\",\n // \"volume\": \"2.41000000\"\n // }\n //\n let timestamp = undefined;\n let bid = undefined;\n let ask = undefined;\n let last = undefined;\n let high = undefined;\n let low = undefined;\n let open = undefined;\n let volume = undefined;\n const symbol = (market === undefined) ? undefined : market['symbol'];\n if (Array.isArray(ticker)) {\n last = this.safeString(ticker, 4);\n timestamp = this.milliseconds();\n }\n else {\n timestamp = this.parse8601(this.safeValue(ticker, 'time'));\n bid = this.safeString(ticker, 'bid');\n ask = this.safeString(ticker, 'ask');\n high = this.safeString(ticker, 'high');\n low = this.safeString(ticker, 'low');\n open = this.safeString(ticker, 'open');\n last = this.safeString2(ticker, 'price', 'last');\n volume = this.safeString(ticker, 'volume');\n }\n return this.safeTicker({\n 'symbol': symbol,\n 'timestamp': timestamp,\n 'datetime': this.iso8601(timestamp),\n 'high': high,\n 'low': low,\n 'bid': bid,\n 'bidVolume': undefined,\n 'ask': ask,\n 'askVolume': undefined,\n 'vwap': undefined,\n 'open': open,\n 'close': last,\n 'last': last,\n 'previousClose': undefined,\n 'change': undefined,\n 'percentage': undefined,\n 'average': undefined,\n 'baseVolume': volume,\n 'quoteVolume': undefined,\n 'info': ticker,\n }, market);\n }\n async fetchTickers(symbols = undefined, params = {}) {\n /**\n * @method\n * @name coinbaseexchange#fetchTickers\n * @description fetches price tickers for multiple markets, statistical information calculated over the past 24 hours for each market\n * @see https://docs.cloud.coinbase.com/exchange/reference/exchangerestapi_getproduct\n * @param {string[]|undefined} symbols unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} a dictionary of [ticker structures]{@link https://docs.ccxt.com/#/?id=ticker-structure}\n */\n await this.loadMarkets();\n symbols = this.marketSymbols(symbols);\n const request = {};\n const response = await this.publicGetProductsSparkLines(this.extend(request, params));\n //\n // {\n // YYY-USD: [\n // [\n // 1639472400, // timestamp\n // 4.26, // low\n // 4.38, // high\n // 4.35, // open\n // 4.27 // close\n // ],\n // [\n // 1639468800,\n // 4.31,\n // 4.45,\n // 4.35,\n // 4.35\n // ],\n // ]\n // }\n //\n const result = {};\n const marketIds = Object.keys(response);\n const delimiter = '-';\n for (let i = 0; i < marketIds.length; i++) {\n const marketId = marketIds[i];\n const entry = this.safeValue(response, marketId, []);\n const first = this.safeValue(entry, 0, []);\n const market = this.safeMarket(marketId, undefined, delimiter);\n const symbol = market['symbol'];\n result[symbol] = this.parseTicker(first, market);\n }\n return this.filterByArrayTickers(result, 'symbol', symbols);\n }\n async fetchTicker(symbol, params = {}) {\n /**\n * @method\n * @name coinbaseexchange#fetchTicker\n * @see https://docs.cloud.coinbase.com/exchange/reference/exchangerestapi_getproductticker\n * @description fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market\n * @param {string} symbol unified symbol of the market to fetch the ticker for\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} a [ticker structure]{@link https://docs.ccxt.com/#/?id=ticker-structure}\n */\n await this.loadMarkets();\n const market = this.market(symbol);\n const request = {\n 'id': market['id'],\n };\n // publicGetProductsIdTicker or publicGetProductsIdStats\n const method = this.safeString(this.options, 'fetchTickerMethod', 'publicGetProductsIdTicker');\n const response = await this[method](this.extend(request, params));\n //\n // publicGetProductsIdTicker\n //\n // {\n // \"trade_id\":843439,\n // \"price\":\"0.997999\",\n // \"size\":\"80.29769\",\n // \"time\":\"2020-01-28T02:13:33.012523Z\",\n // \"bid\":\"0.997094\",\n // \"ask\":\"0.998\",\n // \"volume\":\"1903188.03750000\"\n // }\n //\n // publicGetProductsIdStats\n //\n // {\n // \"open\": \"34.19000000\",\n // \"high\": \"95.70000000\",\n // \"low\": \"7.06000000\",\n // \"volume\": \"2.41000000\"\n // }\n //\n return this.parseTicker(response, market);\n }\n parseTrade(trade, market = undefined) {\n //\n // {\n // \"type\": \"match\",\n // \"trade_id\": 82047307,\n // \"maker_order_id\": \"0f358725-2134-435e-be11-753912a326e0\",\n // \"taker_order_id\": \"252b7002-87a3-425c-ac73-f5b9e23f3caf\",\n // \"order_id\": \"d50ec984-77a8-460a-b958-66f114b0de9b\",\n // \"side\": \"sell\",\n // \"size\": \"0.00513192\",\n // \"price\": \"9314.78\",\n // \"product_id\": \"BTC-USD\",\n // \"profile_id\": \"6244401d-c078-40d9-b305-7ad3551bc3b0\",\n // \"sequence\": 12038915443,\n // \"time\": \"2020-01-31T20:03:41.158814Z\"\n // \"created_at\": \"2014-11-07T22:19:28.578544Z\",\n // \"liquidity\": \"T\",\n // \"fee\": \"0.00025\",\n // \"settled\": true,\n // \"usd_volume\": \"0.0924556000000000\",\n // \"user_id\": \"595eb864313c2b02ddf2937d\"\n // }\n //\n const timestamp = this.parse8601(this.safeString2(trade, 'time', 'created_at'));\n const marketId = this.safeString(trade, 'product_id');\n market = this.safeMarket(marketId, market, '-');\n let feeRate = undefined;\n let takerOrMaker = undefined;\n let cost = undefined;\n const feeCurrencyId = this.safeStringLower(market, 'quoteId');\n if (feeCurrencyId !== undefined) {\n const costField = feeCurrencyId + '_value';\n cost = this.safeString(trade, costField);\n const liquidity = this.safeString(trade, 'liquidity');\n if (liquidity !== undefined) {\n takerOrMaker = (liquidity === 'T') ? 'taker' : 'maker';\n feeRate = this.safeString(market, takerOrMaker);\n }\n }\n const feeCost = this.safeString2(trade, 'fill_fees', 'fee');\n const fee = {\n 'cost': feeCost,\n 'currency': market['quote'],\n 'rate': feeRate,\n };\n const id = this.safeString(trade, 'trade_id');\n let side = (trade['side'] === 'buy') ? 'sell' : 'buy';\n const orderId = this.safeString(trade, 'order_id');\n // Coinbase Pro returns inverted side to fetchMyTrades vs fetchTrades\n const makerOrderId = this.safeString(trade, 'maker_order_id');\n const takerOrderId = this.safeString(trade, 'taker_order_id');\n if ((orderId !== undefined) || ((makerOrderId !== undefined) && (takerOrderId !== undefined))) {\n side = (trade['side'] === 'buy') ? 'buy' : 'sell';\n }\n const price = this.safeString(trade, 'price');\n const amount = this.safeString(trade, 'size');\n return this.safeTrade({\n 'id': id,\n 'order': orderId,\n 'info': trade,\n 'timestamp': timestamp,\n 'datetime': this.iso8601(timestamp),\n 'symbol': market['symbol'],\n 'type': undefined,\n 'takerOrMaker': takerOrMaker,\n 'side': side,\n 'price': price,\n 'amount': amount,\n 'fee': fee,\n 'cost': cost,\n }, market);\n }\n async fetchMyTrades(symbol = undefined, since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name coinbaseexchange#fetchMyTrades\n * @see https://docs.cloud.coinbase.com/exchange/reference/exchangerestapi_getfills\n * @description fetch all trades made by the user\n * @param {string} symbol unified market symbol\n * @param {int} [since] the earliest time in ms to fetch trades for\n * @param {int} [limit] the maximum number of trades structures to retrieve\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {int} [params.until] the latest time in ms to fetch trades for\n * @param {boolean} [params.paginate] default false, when true will automatically paginate by calling this endpoint multiple times. See in the docs all the [availble parameters](https://github.com/ccxt/ccxt/wiki/Manual#pagination-params)\n * @returns {Trade[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=trade-structure}\n */\n if (symbol === undefined) {\n throw new TradeError().addMessage('fetchMyTrades() requires a symbol argument').exchange(this.id);\n }\n let paginate = false;\n [paginate, params] = this.handleOptionAndParams(params, 'fetchMyTrades', 'paginate');\n if (paginate) {\n return await this.fetchPaginatedCallDynamic('fetchMyTrades', symbol, since, limit, params, 100);\n }\n await this.loadMarkets();\n const market = this.market(symbol);\n const request = {\n 'product_id': market['id'],\n };\n if (limit !== undefined) {\n request['limit'] = limit;\n }\n if (since !== undefined) {\n request['start_date'] = this.iso8601(since);\n }\n const until = this.safeValue2(params, 'until', 'end_date');\n if (until !== undefined) {\n params = this.omit(params, ['until']);\n request['end_date'] = this.iso8601(until);\n }\n const response = await this.privateGetFills(this.extend(request, params));\n return this.parseTrades(response, market, since, limit);\n }\n async fetchTrades(symbol, since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name coinbaseexchange#fetchTrades\n * @see https://docs.cloud.coinbase.com/exchange/reference/exchangerestapi_getproducttrades\n * @description get the list of most recent trades for a particular symbol\n * @param {string} symbol unified symbol of the market to fetch trades for\n * @param {int} [since] timestamp in ms of the earliest trade to fetch\n * @param {int} [limit] the maximum amount of trades to fetch\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {Trade[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=public-trades}\n */\n await this.loadMarkets();\n const market = this.market(symbol);\n const request = {\n 'id': market['id'], // fixes issue #2\n };\n if (limit !== undefined) {\n request['limit'] = limit; // default 100\n }\n const response = await this.publicGetProductsIdTrades(this.extend(request, params));\n //\n // [\n // {\n // \"trade_id\": \"15035219\",\n // \"side\": \"sell\",\n // \"size\": \"0.27426731\",\n // \"price\": \"25820.42000000\",\n // \"time\": \"2023-09-10T13:47:41.447577Z\"\n // },\n // ]\n //\n return this.parseTrades(response, market, since, limit);\n }\n async fetchTradingFees(params = {}) {\n /**\n * @method\n * @name coinbaseexchange#fetchTradingFees\n * @description fetch the trading fees for multiple markets\n * @see https://docs.cloud.coinbase.com/exchange/reference/exchangerestapi_getfees\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} a dictionary of [fee structures]{@link https://docs.ccxt.com/#/?id=fee-structure} indexed by market symbols\n */\n await this.loadMarkets();\n const response = await this.privateGetFees(params);\n //\n // {\n // \"maker_fee_rate\": \"0.0050\",\n // \"taker_fee_rate\": \"0.0050\",\n // \"usd_volume\": \"43806.92\"\n // }\n //\n const maker = this.safeNumber(response, 'maker_fee_rate');\n const taker = this.safeNumber(response, 'taker_fee_rate');\n const result = {};\n for (let i = 0; i < this.symbols.length; i++) {\n const symbol = this.symbols[i];\n result[symbol] = {\n 'info': response,\n 'symbol': symbol,\n 'maker': maker,\n 'taker': taker,\n 'percentage': true,\n 'tierBased': true,\n };\n }\n return result;\n }\n parseOHLCV(ohlcv, market = undefined) {\n //\n // [\n // 1591514160,\n // 0.02507,\n // 0.02507,\n // 0.02507,\n // 0.02507,\n // 0.02816506\n // ]\n //\n return [\n this.safeTimestamp(ohlcv, 0),\n this.safeNumber(ohlcv, 3),\n this.safeNumber(ohlcv, 2),\n this.safeNumber(ohlcv, 1),\n this.safeNumber(ohlcv, 4),\n this.safeNumber(ohlcv, 5),\n ];\n }\n async fetchOHLCV(symbol, timeframe = '1m', since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name coinbaseexchange#fetchOHLCV\n * @see https://docs.cloud.coinbase.com/exchange/reference/exchangerestapi_getproductcandles\n * @description fetches historical candlestick data containing the open, high, low, and close price, and the volume of a market\n * @param {string} symbol unified symbol of the market to fetch OHLCV data for\n * @param {string} timeframe the length of time each candle represents\n * @param {int} [since] timestamp in ms of the earliest candle to fetch\n * @param {int} [limit] the maximum amount of candles to fetch\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {int} [params.until] the latest time in ms to fetch trades for\n * @param {boolean} [params.paginate] default false, when true will automatically paginate by calling this endpoint multiple times. See in the docs all the [availble parameters](https://github.com/ccxt/ccxt/wiki/Manual#pagination-params)\n * @returns {int[][]} A list of candles ordered as timestamp, open, high, low, close, volume\n */\n await this.loadMarkets();\n let paginate = false;\n [paginate, params] = this.handleOptionAndParams(params, 'fetchOHLCV', 'paginate', false);\n if (paginate) {\n return await this.fetchPaginatedCallDeterministic('fetchOHLCV', symbol, since, limit, timeframe, params, 300);\n }\n const market = this.market(symbol);\n const parsedTimeframe = this.safeInteger(this.timeframes, timeframe);\n const request = {\n 'id': market['id'],\n };\n if (parsedTimeframe !== undefined) {\n request['granularity'] = parsedTimeframe;\n }\n else {\n request['granularity'] = timeframe;\n }\n const until = this.safeValue2(params, 'until', 'end');\n params = this.omit(params, ['until']);\n if (since !== undefined) {\n request['start'] = this.iso8601(since);\n if (limit === undefined) {\n // https://docs.pro.coinbase.com/#get-historic-rates\n limit = 300; // max = 300\n }\n else {\n limit = Math.min(300, limit);\n }\n if (until === undefined) {\n const parsedTimeframeMilliseconds = parsedTimeframe * 1000;\n if (this.isRoundNumber(since % parsedTimeframeMilliseconds)) {\n request['end'] = this.iso8601(this.sum((limit - 1) * parsedTimeframeMilliseconds, since));\n }\n else {\n request['end'] = this.iso8601(this.sum(limit * parsedTimeframeMilliseconds, since));\n }\n }\n else {\n request['end'] = this.iso8601(until);\n }\n }\n const response = await this.publicGetProductsIdCandles(this.extend(request, params));\n //\n // [\n // [1591514160,0.02507,0.02507,0.02507,0.02507,0.02816506],\n // [1591514100,0.02507,0.02507,0.02507,0.02507,1.63830323],\n // [1591514040,0.02505,0.02507,0.02505,0.02507,0.19918178]\n // ]\n //\n return this.parseOHLCVs(response, market, timeframe, since, limit);\n }\n async fetchTime(params = {}) {\n /**\n * @method\n * @name coinbaseexchange#fetchTime\n * @description fetches the current integer timestamp in milliseconds from the exchange server\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {int} the current integer timestamp in milliseconds from the exchange server\n */\n const response = await this.publicGetTime(params);\n //\n // {\n // \"iso\":\"2020-05-12T08:00:51.504Z\",\n // \"epoch\":1589270451.504\n // }\n //\n return this.safeTimestamp(response, 'epoch');\n }\n parseOrderStatus(status) {\n const statuses = {\n 'pending': 'open',\n 'active': 'open',\n 'open': 'open',\n 'done': 'closed',\n 'canceled': 'canceled',\n 'canceling': 'open',\n };\n return this.safeString(statuses, status, status);\n }\n parseOrder(order, market = undefined) {\n //\n // createOrder\n //\n // {\n // \"id\": \"d0c5340b-6d6c-49d9-b567-48c4bfca13d2\",\n // \"price\": \"0.10000000\",\n // \"size\": \"0.01000000\",\n // \"product_id\": \"BTC-USD\",\n // \"side\": \"buy\",\n // \"stp\": \"dc\",\n // \"type\": \"limit\",\n // \"time_in_force\": \"GTC\",\n // \"post_only\": false,\n // \"created_at\": \"2016-12-08T20:02:28.53864Z\",\n // \"fill_fees\": \"0.0000000000000000\",\n // \"filled_size\": \"0.00000000\",\n // \"executed_value\": \"0.0000000000000000\",\n // \"status\": \"pending\",\n // \"settled\": false\n // }\n //\n const timestamp = this.parse8601(this.safeString(order, 'created_at'));\n const marketId = this.safeString(order, 'product_id');\n market = this.safeMarket(marketId, market, '-');\n let status = this.parseOrderStatus(this.safeString(order, 'status'));\n const doneReason = this.safeString(order, 'done_reason');\n if ((status === 'closed') && (doneReason === 'canceled')) {\n status = 'canceled';\n }\n const price = this.safeString(order, 'price');\n const filled = this.safeString(order, 'filled_size');\n const amount = this.safeString(order, 'size', filled);\n const cost = this.safeString(order, 'executed_value');\n const feeCost = this.safeNumber(order, 'fill_fees');\n let fee = undefined;\n if (feeCost !== undefined) {\n fee = {\n 'cost': feeCost,\n 'currency': market['quote'],\n 'rate': undefined,\n };\n }\n const id = this.safeString(order, 'id');\n const type = this.safeString(order, 'type');\n const side = this.safeString(order, 'side');\n const timeInForce = this.safeString(order, 'time_in_force');\n const postOnly = this.safeValue(order, 'post_only');\n const stopPrice = this.safeNumber(order, 'stop_price');\n const clientOrderId = this.safeString(order, 'client_oid');\n return this.safeOrder({\n 'id': id,\n 'clientOrderId': clientOrderId,\n 'info': order,\n 'timestamp': timestamp,\n 'datetime': this.iso8601(timestamp),\n 'lastTradeTimestamp': undefined,\n 'status': status,\n 'symbol': market['symbol'],\n 'type': type,\n 'timeInForce': timeInForce,\n 'postOnly': postOnly,\n 'side': side,\n 'price': price,\n 'stopPrice': stopPrice,\n 'triggerPrice': stopPrice,\n 'cost': cost,\n 'amount': amount,\n 'filled': filled,\n 'remaining': undefined,\n 'fee': fee,\n 'average': undefined,\n 'trades': undefined,\n }, market);\n }\n async fetchOrder(id, symbol = undefined, params = {}) {\n /**\n * @method\n * @name coinbaseexchange#fetchOrder\n * @see https://docs.cloud.coinbase.com/exchange/reference/exchangerestapi_getorder\n * @description fetches information on an order made by the user\n * @param {string} id the order id\n * @param {string} symbol not used by coinbaseexchange fetchOrder\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} An [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n await this.loadMarkets();\n const request = {};\n const clientOrderId = this.safeString2(params, 'clientOrderId', 'client_oid');\n let method = undefined;\n if (clientOrderId === undefined) {\n method = 'privateGetOrdersId';\n request['id'] = id;\n }\n else {\n method = 'privateGetOrdersClientClientOid';\n request['client_oid'] = clientOrderId;\n params = this.omit(params, ['clientOrderId', 'client_oid']);\n }\n const response = await this[method](this.extend(request, params));\n return this.parseOrder(response);\n }\n async fetchOrderTrades(id, symbol = undefined, since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name coinbaseexchange#fetchOrderTrades\n * @description fetch all the trades made from a single order\n * @param {string} id order id\n * @param {string} symbol unified market symbol\n * @param {int} [since] the earliest time in ms to fetch trades for\n * @param {int} [limit] the maximum number of trades to retrieve\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=trade-structure}\n */\n await this.loadMarkets();\n let market = undefined;\n if (symbol !== undefined) {\n market = this.market(symbol);\n }\n const request = {\n 'order_id': id,\n };\n const response = await this.privateGetFills(this.extend(request, params));\n return this.parseTrades(response, market, since, limit);\n }\n async fetchOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name coinbaseexchange#fetchOrders\n * @see https://docs.cloud.coinbase.com/exchange/reference/exchangerestapi_getorders\n * @description fetches information on multiple orders made by the user\n * @param {string} symbol unified market symbol of the market orders were made in\n * @param {int} [since] the earliest time in ms to fetch orders for\n * @param {int} [limit] the maximum number of order structures to retrieve\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {int} [params.until] the latest time in ms to fetch open orders for\n * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n const request = {\n 'status': 'all',\n };\n return await this.fetchOpenOrders(symbol, since, limit, this.extend(request, params));\n }\n async fetchOpenOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name coinbaseexchange#fetchOpenOrders\n * @see https://docs.cloud.coinbase.com/exchange/reference/exchangerestapi_getorders\n * @description fetch all unfilled currently open orders\n * @param {string} symbol unified market symbol\n * @param {int} [since] the earliest time in ms to fetch open orders for\n * @param {int} [limit] the maximum number of open orders structures to retrieve\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {int} [params.until] the latest time in ms to fetch open orders for\n * @param {boolean} [params.paginate] default false, when true will automatically paginate by calling this endpoint multiple times. See in the docs all the [availble parameters](https://github.com/ccxt/ccxt/wiki/Manual#pagination-params)\n * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n await this.loadMarkets();\n let paginate = false;\n [paginate, params] = this.handleOptionAndParams(params, 'fetchOpenOrders', 'paginate');\n if (paginate) {\n return await this.fetchPaginatedCallDynamic('fetchOpenOrders', symbol, since, limit, params, 100);\n }\n const request = {};\n let market = undefined;\n if (symbol !== undefined) {\n market = this.market(symbol);\n request['product_id'] = market['id'];\n }\n if (limit !== undefined) {\n request['limit'] = limit; // default 100\n }\n if (since !== undefined) {\n request['start_date'] = this.iso8601(since);\n }\n const until = this.safeValue2(params, 'until', 'end_date');\n if (until !== undefined) {\n params = this.omit(params, ['until']);\n request['end_date'] = this.iso8601(until);\n }\n const response = await this.privateGetOrders(this.extend(request, params));\n return this.parseOrders(response, market, since, limit);\n }\n async fetchClosedOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name coinbaseexchange#fetchClosedOrders\n * @see https://docs.cloud.coinbase.com/exchange/reference/exchangerestapi_getorders\n * @description fetches information on multiple closed orders made by the user\n * @param {string} symbol unified market symbol of the market orders were made in\n * @param {int} [since] the earliest time in ms to fetch orders for\n * @param {int} [limit] the maximum number of order structures to retrieve\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {int} [params.until] the latest time in ms to fetch open orders for\n * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n const request = {\n 'status': 'done',\n };\n return await this.fetchOpenOrders(symbol, since, limit, this.extend(request, params));\n }\n async createOrder(symbol, type, side, amount, price = undefined, params = {}) {\n /**\n * @method\n * @name coinbaseexchange#createOrder\n * @see https://docs.cloud.coinbase.com/exchange/reference/exchangerestapi_postorders\n * @description create a trade order\n * @param {string} symbol unified symbol of the market to create an order in\n * @param {string} type 'market' or 'limit'\n * @param {string} side 'buy' or 'sell'\n * @param {float} amount how much of currency you want to trade in units of base currency\n * @param {float} [price] the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n await this.loadMarkets();\n const market = this.market(symbol);\n const request = {\n // common params --------------------------------------------------\n // 'client_oid': clientOrderId,\n 'type': type,\n 'side': side,\n 'product_id': market['id'],\n // 'size': this.amountToPrecision (symbol, amount),\n // 'stp': 'dc', // self-trade prevention, dc = decrease and cancel, co = cancel oldest, cn = cancel newest, cb = cancel both\n // 'stop': 'loss', // \"loss\" = stop loss below price, \"entry\" = take profit above price\n // 'stop_price': this.priceToPrecision (symbol, price),\n // limit order params ---------------------------------------------\n // 'price': this.priceToPrecision (symbol, price),\n // 'size': this.amountToPrecision (symbol, amount),\n // 'time_in_force': 'GTC', // GTC, GTT, IOC, or FOK\n // 'cancel_after' [optional]* min, hour, day, requires time_in_force to be GTT\n // 'post_only': false, // invalid when time_in_force is IOC or FOK\n // market order params --------------------------------------------\n // 'size': this.amountToPrecision (symbol, amount),\n // 'funds': this.costToPrecision (symbol, amount),\n };\n const clientOrderId = this.safeString2(params, 'clientOrderId', 'client_oid');\n if (clientOrderId !== undefined) {\n request['client_oid'] = clientOrderId;\n }\n const stopPrice = this.safeNumberN(params, ['stopPrice', 'stop_price', 'triggerPrice']);\n if (stopPrice !== undefined) {\n request['stop_price'] = this.priceToPrecision(symbol, stopPrice);\n }\n const timeInForce = this.safeString2(params, 'timeInForce', 'time_in_force');\n if (timeInForce !== undefined) {\n request['time_in_force'] = timeInForce;\n }\n const postOnly = this.safeValue2(params, 'postOnly', 'post_only', false);\n if (postOnly) {\n request['post_only'] = true;\n }\n params = this.omit(params, ['timeInForce', 'time_in_force', 'stopPrice', 'stop_price', 'clientOrderId', 'client_oid', 'postOnly', 'post_only', 'triggerPrice']);\n if (type === 'limit') {\n request['price'] = this.priceToPrecision(symbol, price);\n request['size'] = this.amountToPrecision(symbol, amount);\n }\n else if (type === 'market') {\n let cost = this.safeNumber2(params, 'cost', 'funds');\n if (cost === undefined) {\n if (price !== undefined) {\n cost = amount * price;\n }\n }\n else {\n params = this.omit(params, ['cost', 'funds']);\n }\n if (cost !== undefined) {\n request['funds'] = this.costToPrecision(symbol, cost);\n }\n else {\n request['size'] = this.amountToPrecision(symbol, amount);\n }\n }\n const response = await this.privatePostOrders(this.extend(request, params));\n //\n // {\n // \"id\": \"d0c5340b-6d6c-49d9-b567-48c4bfca13d2\",\n // \"price\": \"0.10000000\",\n // \"size\": \"0.01000000\",\n // \"product_id\": \"BTC-USD\",\n // \"side\": \"buy\",\n // \"stp\": \"dc\",\n // \"type\": \"limit\",\n // \"time_in_force\": \"GTC\",\n // \"post_only\": false,\n // \"created_at\": \"2016-12-08T20:02:28.53864Z\",\n // \"fill_fees\": \"0.0000000000000000\",\n // \"filled_size\": \"0.00000000\",\n // \"executed_value\": \"0.0000000000000000\",\n // \"status\": \"pending\",\n // \"settled\": false\n // }\n //\n return this.parseOrder(response, market);\n }\n async cancelOrder(id, symbol = undefined, params = {}) {\n /**\n * @method\n * @name coinbaseexchange#cancelOrder\n * @see https://docs.cloud.coinbase.com/exchange/reference/exchangerestapi_deleteorder\n * @description cancels an open order\n * @param {string} id order id\n * @param {string} symbol unified symbol of the market the order was made in\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} An [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n await this.loadMarkets();\n const request = {\n // 'product_id': market['id'], // the request will be more performant if you include it\n };\n const clientOrderId = this.safeString2(params, 'clientOrderId', 'client_oid');\n let method = undefined;\n if (clientOrderId === undefined) {\n method = 'privateDeleteOrdersId';\n request['id'] = id;\n }\n else {\n method = 'privateDeleteOrdersClientClientOid';\n request['client_oid'] = clientOrderId;\n params = this.omit(params, ['clientOrderId', 'client_oid']);\n }\n let market = undefined;\n if (symbol !== undefined) {\n market = this.market(symbol);\n request['product_id'] = market['symbol']; // the request will be more performant if you include it\n }\n return await this[method](this.extend(request, params));\n }\n async cancelAllOrders(symbol = undefined, params = {}) {\n /**\n * @method\n * @name coinbaseexchange#cancelAllOrders\n * @see https://docs.cloud.coinbase.com/exchange/reference/exchangerestapi_deleteorders\n * @description cancel all open orders\n * @param {string} symbol unified market symbol, only orders in the market of this symbol are cancelled when symbol is not undefined\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n await this.loadMarkets();\n const request = {};\n let market = undefined;\n if (symbol !== undefined) {\n market = this.market(symbol);\n request['product_id'] = market['symbol']; // the request will be more performant if you include it\n }\n return await this.privateDeleteOrders(this.extend(request, params));\n }\n async fetchPaymentMethods(params = {}) {\n return await this.privateGetPaymentMethods(params);\n }\n async withdraw(code, amount, address, tag = undefined, params = {}) {\n /**\n * @method\n * @name coinbaseexchange#withdraw\n * @description make a withdrawal\n * @see https://docs.cloud.coinbase.com/exchange/reference/exchangerestapi_postwithdrawpaymentmethod\n * @see https://docs.cloud.coinbase.com/exchange/reference/exchangerestapi_postwithdrawcoinbaseaccount\n * @param {string} code unified currency code\n * @param {float} amount the amount to withdraw\n * @param {string} address the address to withdraw to\n * @param {string} tag\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} a [transaction structure]{@link https://docs.ccxt.com/#/?id=transaction-structure}\n */\n [tag, params] = this.handleWithdrawTagAndParams(tag, params);\n this.checkAddress(address);\n await this.loadMarkets();\n const currency = this.currency(code);\n const request = {\n 'currency': currency['id'],\n 'amount': amount,\n };\n let method = 'privatePostWithdrawals';\n if ('payment_method_id' in params) {\n method += 'PaymentMethod';\n }\n else if ('coinbase_account_id' in params) {\n method += 'CoinbaseAccount';\n }\n else {\n method += 'Crypto';\n request['crypto_address'] = address;\n if (tag !== undefined) {\n request['destination_tag'] = tag;\n }\n }\n const response = await this[method](this.extend(request, params));\n if (!response) {\n throw new ExchangeError().addMessage(' withdraw() error: ' + this.json(response)).exchange(this.id);\n }\n return this.parseTransaction(response, currency);\n }\n parseLedgerEntryType(type) {\n const types = {\n 'transfer': 'transfer',\n 'match': 'trade',\n 'fee': 'fee',\n 'rebate': 'rebate',\n 'conversion': 'trade', // Funds converted between fiat currency and a stablecoin\n };\n return this.safeString(types, type, type);\n }\n parseLedgerEntry(item, currency = undefined) {\n // {\n // \"id\": \"12087495079\",\n // \"amount\": \"-0.0100000000000000\",\n // \"balance\": \"0.0645419900000000\",\n // \"created_at\": \"2021-10-28T17:14:32.593168Z\",\n // \"type\": \"transfer\",\n // \"details\": {\n // \"from\": \"2f74edf7-1440-4586-86dc-ae58c5693691\",\n // \"profile_transfer_id\": \"3ef093ad-2482-40d1-8ede-2f89cff5099e\",\n // \"to\": \"dda99503-4980-4b60-9549-0b770ee51336\"\n // }\n // },\n // {\n // \"id\": \"11740725774\",\n // \"amount\": \"-1.7565669701255000\",\n // \"balance\": \"0.0016490047745000\",\n // \"created_at\": \"2021-10-22T03:47:34.764122Z\",\n // \"type\": \"fee\",\n // \"details\": {\n // \"order_id\": \"ad06abf4-95ab-432a-a1d8-059ef572e296\",\n // \"product_id\": \"ETH-DAI\",\n // \"trade_id\": \"1740617\"\n // }\n // }\n const id = this.safeString(item, 'id');\n let amountString = this.safeString(item, 'amount');\n let direction = undefined;\n const afterString = this.safeString(item, 'balance');\n const beforeString = Precise.stringSub(afterString, amountString);\n if (Precise.stringLt(amountString, '0')) {\n direction = 'out';\n amountString = Precise.stringAbs(amountString);\n }\n else {\n direction = 'in';\n }\n const amount = this.parseNumber(amountString);\n const after = this.parseNumber(afterString);\n const before = this.parseNumber(beforeString);\n const timestamp = this.parse8601(this.safeValue(item, 'created_at'));\n const type = this.parseLedgerEntryType(this.safeString(item, 'type'));\n const code = this.safeCurrencyCode(undefined, currency);\n const details = this.safeValue(item, 'details', {});\n let account = undefined;\n let referenceAccount = undefined;\n let referenceId = undefined;\n if (type === 'transfer') {\n account = this.safeString(details, 'from');\n referenceAccount = this.safeString(details, 'to');\n referenceId = this.safeString(details, 'profile_transfer_id');\n }\n else {\n referenceId = this.safeString(details, 'order_id');\n }\n const status = 'ok';\n return this.safeLedgerEntry({\n 'info': item,\n 'id': id,\n 'timestamp': timestamp,\n 'datetime': this.iso8601(timestamp),\n 'direction': direction,\n 'account': account,\n 'referenceAccount': referenceAccount,\n 'referenceId': referenceId,\n 'type': type,\n 'currency': code,\n 'amount': amount,\n 'before': before,\n 'after': after,\n 'status': status,\n 'fee': undefined,\n }, currency);\n }\n async fetchLedger(code = undefined, since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name coinbaseexchange#fetchLedger\n * @description fetch the history of changes, actions done by the user or operations that altered the balance of the user\n * @see https://docs.cloud.coinbase.com/exchange/reference/exchangerestapi_getaccountledger\n * @param {string} code unified currency code, default is undefined\n * @param {int} [since] timestamp in ms of the earliest ledger entry, default is undefined\n * @param {int} [limit] max number of ledger entries to return, default is undefined\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {int} [params.until] the latest time in ms to fetch trades for\n * @returns {object} a [ledger structure]{@link https://docs.ccxt.com/#/?id=ledger-structure}\n */\n // https://docs.cloud.coinbase.com/exchange/reference/exchangerestapi_getaccountledger\n if (code === undefined) {\n throw new InvalidParamsError('withdraw() requires an account_id (or accountId) parameter OR a currency code argument')\n .exchange(this.id);\n }\n await this.loadMarkets();\n await this.loadAccounts();\n const currency = this.currency(code);\n const accountsByCurrencyCode = this.indexBy(this.accounts, 'code');\n const account = this.safeValue(accountsByCurrencyCode, code);\n if (account === undefined) {\n throw new TokenSymbolNotFoundError(code)\n .addMessage('It could not find account id for ' + code)\n .exchange(this.id);\n }\n const request = {\n 'id': account['id'],\n // 'start_date': this.iso8601 (since),\n // 'end_date': this.iso8601 (this.milliseconds ()),\n // 'before': 'cursor', // sets start cursor to before date\n // 'after': 'cursor', // sets end cursor to after date\n // 'limit': limit, // default 100\n // 'profile_id': 'string'\n };\n if (since !== undefined) {\n request['start_date'] = this.iso8601(since);\n }\n if (limit !== undefined) {\n request['limit'] = limit; // default 100\n }\n const until = this.safeValue2(params, 'until', 'end_date');\n if (until !== undefined) {\n params = this.omit(params, ['until']);\n request['end_date'] = this.iso8601(until);\n }\n const response = await this.privateGetAccountsIdLedger(this.extend(request, params));\n for (let i = 0; i < response.length; i++) {\n response[i]['currency'] = code;\n }\n return this.parseLedger(response, currency, since, limit);\n }\n async fetchDepositsWithdrawals(code = undefined, since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name coinbaseexchange#fetchDepositsWithdrawals\n * @description fetch history of deposits and withdrawals\n * @see https://docs.cloud.coinbase.com/exchange/reference/exchangerestapi_gettransfers\n * @see https://docs.cloud.coinbase.com/exchange/reference/exchangerestapi_getaccounttransfers\n * @param {string} [code] unified currency code for the currency of the deposit/withdrawals, default is undefined\n * @param {int} [since] timestamp in ms of the earliest deposit/withdrawal, default is undefined\n * @param {int} [limit] max number of deposit/withdrawals to return, default is undefined\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {string} [params.id] account id, when defined, the endpoint used is '/accounts/{account_id}/transfers/' instead of '/transfers/'\n * @returns {object} a list of [transaction structure]{@link https://docs.ccxt.com/#/?id=transaction-structure}\n */\n await this.loadMarkets();\n await this.loadAccounts();\n let currency = undefined;\n let id = this.safeString(params, 'id'); // account id\n if (id === undefined) {\n if (code !== undefined) {\n currency = this.currency(code);\n const accountsByCurrencyCode = this.indexBy(this.accounts, 'code');\n const account = this.safeValue(accountsByCurrencyCode, code);\n if (account === undefined) {\n throw new ExchangeError()\n .addMessage('fetchDepositsWithdrawals() could not find account id for ' + code)\n .exchange(this.id);\n }\n id = account['id'];\n }\n }\n const request = {};\n if (id !== undefined) {\n request['id'] = id;\n }\n if (limit !== undefined) {\n request['limit'] = limit;\n }\n let response = undefined;\n if (id === undefined) {\n response = await this.privateGetTransfers(this.extend(request, params));\n //\n // [\n // {\n // \"id\": \"bee6fd7c-afb2-4e47-8298-671d09997d16\",\n // \"type\": \"deposit\",\n // \"created_at\": \"2022-12-21 00:48:45.477503+00\",\n // \"completed_at\": null,\n // \"account_id\": \"sal3802-36bd-46be-a7b8-alsjf383sldak\",\n // \"user_id\": \"6382048209f92as392039dlks2\",\n // \"amount\": \"0.01000000\",\n // \"details\": {\n // \"network\": \"litecoin\",\n // \"crypto_address\": \"MKemtnCFUYKsNWaf5EMYMpwSszcXWFDtTY\",\n // \"coinbase_account_id\": \"fl2b6925-f6ba-403n-jj03-40fl435n430f\",\n // \"coinbase_transaction_id\": \"63a25bb13cb5cf0001d2cf17\", // withdrawals only\n // \"crypto_transaction_hash\": \"752f35570736341e2a253f7041a34cf1e196fc56128c900fd03d99da899d94c1\",\n // \"tx_service_transaction_id\": \"1873249104\",\n // \"coinbase_payment_method_id\": \"\"\n // },\n // \"canceled_at\": null,\n // \"processed_at\": null,\n // \"user_nonce\": null,\n // \"idem\": \"5e3201b0-e390-5k3k-a913-c32932049242\",\n // \"profile_id\": \"k3k302a8-c4dk-4f49-9d39-3203923wpk39\",\n // \"currency\": \"LTC\"\n // }\n // ]\n //\n for (let i = 0; i < response.length; i++) {\n const account_id = this.safeString(response[i], 'account_id');\n const account = this.safeValue(this.accountsById, account_id);\n const codeInner = this.safeString(account, 'code');\n response[i]['currency'] = codeInner;\n }\n }\n else {\n response = await this.privateGetAccountsIdTransfers(this.extend(request, params));\n //\n // [\n // {\n // \"id\": \"bee6fd7c-afb2-4e47-8298-671d09997d16\",\n // \"type\": \"deposit\",\n // \"created_at\": \"2022-12-21 00:48:45.477503+00\",\n // \"completed_at\": null,\n // \"amount\": \"0.01000000\",\n // \"details\": {\n // \"network\": \"litecoin\",\n // \"crypto_address\": \"MKemtnCFUYKsNWaf5EMYMpwSszcXWFDtTY\",\n // \"coinbase_account_id\": \"fl2b6925-f6ba-403n-jj03-40fl435n430f\",\n // \"coinbase_transaction_id\": \"63a25bb13cb5cf0001d2cf17\", // withdrawals only\n // \"crypto_transaction_hash\": \"752f35570736341e2a253f7041a34cf1e196fc56128c900fd03d99da899d94c1\",\n // \"tx_service_transaction_id\": \"1873249104\",\n // \"coinbase_payment_method_id\": \"\"\n // },\n // \"canceled_at\": null,\n // \"processed_at\": null,\n // \"user_nonce\": null,\n // \"idem\": \"5e3201b0-e390-5k3k-a913-c32932049242\",\n // \"profile_id\": \"k3k302a8-c4dk-4f49-9d39-3203923wpk39\",\n // \"currency\": \"LTC\"\n // }\n // ]\n //\n for (let i = 0; i < response.length; i++) {\n response[i]['currency'] = code;\n }\n }\n return this.parseTransactions(response, currency, since, limit);\n }\n async fetchDeposits(code = undefined, since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name coinbaseexchange#fetchDeposits\n * @description fetch all deposits made to an account\n * @see https://docs.cloud.coinbase.com/exchange/reference/exchangerestapi_gettransfers\n * @see https://docs.cloud.coinbase.com/exchange/reference/exchangerestapi_getaccounttransfers\n * @param {string} code unified currency code\n * @param {int} [since] the earliest time in ms to fetch deposits for\n * @param {int} [limit] the maximum number of deposits structures to retrieve\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object[]} a list of [transaction structures]{@link https://docs.ccxt.com/#/?id=transaction-structure}\n */\n return await this.fetchDepositsWithdrawals(code, since, limit, this.extend({ 'type': 'deposit' }, params));\n }\n async fetchWithdrawals(code = undefined, since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name coinbaseexchange#fetchWithdrawals\n * @description fetch all withdrawals made from an account\n * @see https://docs.cloud.coinbase.com/exchange/reference/exchangerestapi_gettransfers\n * @see https://docs.cloud.coinbase.com/exchange/reference/exchangerestapi_getaccounttransfers\n * @param {string} code unified currency code\n * @param {int} [since] the earliest time in ms to fetch withdrawals for\n * @param {int} [limit] the maximum number of withdrawals structures to retrieve\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object[]} a list of [transaction structures]{@link https://docs.ccxt.com/#/?id=transaction-structure}\n */\n return await this.fetchDepositsWithdrawals(code, since, limit, this.extend({ 'type': 'withdraw' }, params));\n }\n parseTransactionStatus(transaction) {\n const canceled = this.safeValue(transaction, 'canceled_at');\n if (canceled) {\n return 'canceled';\n }\n const processed = this.safeValue(transaction, 'processed_at');\n const completed = this.safeValue(transaction, 'completed_at');\n if (completed) {\n return 'ok';\n }\n else if (processed && !completed) {\n return 'failed';\n }\n else {\n return 'pending';\n }\n }\n parseTransaction(transaction, currency = undefined) {\n //\n // privateGetTransfers\n //\n // [\n // {\n // \"id\": \"bee6fd7c-afb2-4e47-8298-671d09997d16\",\n // \"type\": \"deposit\",\n // \"created_at\": \"2022-12-21 00:48:45.477503+00\",\n // \"completed_at\": null,\n // \"account_id\": \"sal3802-36bd-46be-a7b8-alsjf383sldak\", // only from privateGetTransfers\n // \"user_id\": \"6382048209f92as392039dlks2\", // only from privateGetTransfers\n // \"amount\": \"0.01000000\",\n // \"details\": {\n // \"network\": \"litecoin\",\n // \"crypto_address\": \"MKemtnCFUYKsNWaf5EMYMpwSszcXWFDtTY\",\n // \"coinbase_account_id\": \"fl2b6925-f6ba-403n-jj03-40fl435n430f\",\n // \"coinbase_transaction_id\": \"63a25bb13cb5cf0001d2cf17\", // withdrawals only\n // \"crypto_transaction_hash\": \"752f35570736341e2a253f7041a34cf1e196fc56128c900fd03d99da899d94c1\",\n // \"tx_service_transaction_id\": \"1873249104\",\n // \"coinbase_payment_method_id\": \"\"\n // },\n // \"canceled_at\": null,\n // \"processed_at\": null,\n // \"user_nonce\": null,\n // \"idem\": \"5e3201b0-e390-5k3k-a913-c32932049242\",\n // \"profile_id\": \"k3k302a8-c4dk-4f49-9d39-3203923wpk39\",\n // \"currency\": \"LTC\"\n // }\n // ]\n //\n const details = this.safeValue(transaction, 'details', {});\n const timestamp = this.parse8601(this.safeString(transaction, 'created_at'));\n const currencyId = this.safeString(transaction, 'currency');\n const code = this.safeCurrencyCode(currencyId, currency);\n let amount = this.safeNumber(transaction, 'amount');\n let type = this.safeString(transaction, 'type');\n let address = this.safeString(details, 'crypto_address');\n address = this.safeString(transaction, 'crypto_address', address);\n const fee = {\n 'currency': undefined,\n 'cost': undefined,\n 'rate': undefined,\n };\n if (type === 'withdraw') {\n type = 'withdrawal';\n address = this.safeString(details, 'sent_to_address', address);\n const feeCost = this.safeNumber(details, 'fee');\n if (feeCost !== undefined) {\n if (amount !== undefined) {\n amount -= feeCost;\n }\n fee['cost'] = feeCost;\n fee['currency'] = code;\n }\n }\n const networkId = this.safeString(details, 'network');\n return {\n 'info': transaction,\n 'id': this.safeString(transaction, 'id'),\n 'txid': this.safeString(details, 'crypto_transaction_hash'),\n 'type': type,\n 'currency': code,\n 'network': this.networkIdToCode(networkId),\n 'amount': amount,\n 'status': this.parseTransactionStatus(transaction),\n 'timestamp': timestamp,\n 'datetime': this.iso8601(timestamp),\n 'address': address,\n 'addressFrom': undefined,\n 'addressTo': this.safeString(details, 'crypto_address'),\n 'tag': this.safeString(details, 'destination_tag'),\n 'tagFrom': undefined,\n 'tagTo': undefined,\n 'updated': this.parse8601(this.safeString(transaction, 'processed_at')),\n 'comment': undefined,\n 'internal': false,\n 'fee': fee,\n };\n }\n async createDepositAddress(code, params = {}) {\n /**\n * @method\n * @name coinbaseexchange#createDepositAddress\n * @description create a currency deposit address\n * @see https://docs.cloud.coinbase.com/exchange/reference/exchangerestapi_postcoinbaseaccountaddresses\n * @param {string} code unified currency code of the currency for the deposit address\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} an [address structure]{@link https://docs.ccxt.com/#/?id=address-structure}\n */\n await this.loadMarkets();\n const currency = this.currency(code);\n let accounts = this.safeValue(this.options, 'coinbaseAccounts');\n if (accounts === undefined) {\n accounts = await this.privateGetCoinbaseAccounts();\n this.options['coinbaseAccounts'] = accounts; // cache it\n this.options['coinbaseAccountsByCurrencyId'] = this.indexBy(accounts, 'currency');\n }\n const currencyId = currency['id'];\n const account = this.safeValue(this.options['coinbaseAccountsByCurrencyId'], currencyId);\n if (account === undefined) {\n // eslint-disable-next-line quotes\n throw new CreateDepositAddressError(code)\n .addMessage('createDepositAddress() could not find the account with matching currency code, specify an `account_id` extra param')\n .exchange(this.id);\n }\n const request = {\n 'id': account['id'],\n };\n const response = await this.privatePostCoinbaseAccountsIdAddresses(this.extend(request, params));\n const address = this.safeString(response, 'address');\n const tag = this.safeString(response, 'destination_tag');\n return {\n 'currency': code,\n 'address': this.checkAddress(address),\n 'tag': tag,\n 'info': response,\n };\n }\n // https://docs.cdp.coinbase.com/exchange/reference/exchangerestapi_getprofiles\n async getSubAccounts() {\n await this.loadMarkets();\n const response = await this.privateGetProfiles();\n // [\n // {\n // id: '9b295a7b-04a0-43ee-b5b4-cdd170e11108',\n // user_id: '66d1b90266359ddfb3fc9348',\n // name: 'default',\n // active: true,\n // is_default: true,\n // created_at: '2024-09-24T08:23:05.136387Z'\n // },\n // {\n // id: 'c1a9a017-2258-4cfa-b2a0-26794afbdd95',\n // user_id: '66d1b90266359ddfb3fc9348',\n // name: 'Canberra Portfolio',\n // active: true,\n // is_default: false,\n // created_at: '2024-09-24T08:23:28.748302Z'\n // },\n // {\n // id: 'f0391951-0c0f-4a54-a731-4530db3ff93a',\n // user_id: '66d1b90266359ddfb3fc9348',\n // name: 'Pierre Portfolio',\n // active: true,\n // is_default: false,\n // created_at: '2024-09-24T08:23:38.545098Z'\n // }\n // ]\n return response?.map((subAccount) => ({\n 'uid': subAccount.id,\n }));\n }\n async sign(path, api = 'public', method = 'GET', params = {}, headers = undefined, body = undefined) {\n let request = '/' + this.implodeParams(path, params);\n const query = this.omit(params, this.extractParams(path));\n if (method === 'GET') {\n if (Object.keys(query).length) {\n request += '?' + this.urlencode(query);\n }\n }\n const url = this.implodeHostname(this.urls['api'][api]) + request;\n if (api === 'private') {\n this.checkRequiredCredentials();\n const nonce = this.nonce().toString();\n let payload = '';\n if (method !== 'GET') {\n if (Object.keys(query).length) {\n body = this.json(query);\n payload = body;\n }\n }\n const what = nonce + method + request + payload;\n let secret = undefined;\n try {\n secret = this.base64ToBinary(this.secret);\n }\n catch (e) {\n throw new AuthenticationError().addMessage(' sign() invalid base64 secret').exchange(this.id);\n }\n let signature = undefined;\n if (this.externalSigner) {\n signature = await this.externalSigner.sign({\n 'payload': this.encode(what),\n 'publicApiKey': this.apiKey,\n 'exchangeId': this.id,\n });\n }\n else {\n signature = this.hmac(this.encode(what), secret, sha256, 'base64');\n }\n headers = {\n 'CB-ACCESS-KEY': this.apiKey,\n 'CB-ACCESS-SIGN': signature,\n 'CB-ACCESS-TIMESTAMP': nonce,\n 'CB-ACCESS-PASSPHRASE': this.password,\n 'Content-Type': 'application/json',\n };\n }\n return { 'url': url, 'method': method, 'body': body, 'headers': headers };\n }\n handleErrors(code, reason, url, method, headers, body, response, requestHeaders, requestBody) {\n if ((code === 400) || (code === 404)) {\n if (body[0] === '{') {\n const message = this.safeString(response, 'message');\n const feedback = this.id + ' ' + message;\n this.throwExactlyMatchedException(this.exceptions['exact'], message, feedback);\n this.throwBroadlyMatchedException(this.exceptions['broad'], message, feedback);\n throw new ExchangeError().addMessage(message).exchange(this.id);\n }\n throw new ExchangeError().addMessage(body).exchange(this.id);\n }\n return undefined;\n }\n async request(path, api = 'public', method = 'GET', params = {}, headers = undefined, body = undefined, config = {}) {\n const response = await this.fetch2(path, api, method, params, headers, body, config);\n if (typeof response !== 'string') {\n if ('message' in response) {\n throw new ExchangeError().addMessage(this.json(response)).exchange(this.id);\n }\n }\n return response;\n }\n}\n","// ----------------------------------------------------------------------------\n\n// PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:\n// https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code\n// EDIT THE CORRESPONDENT .ts FILE INSTEAD\n\n// ---------------------------------------------------------------------------\nimport gate from './gate.js';\n// ---------------------------------------------------------------------------\nexport default class gateio extends gate {\n describe() {\n return this.deepExtend(super.describe(), {\n 'id': 'gateio',\n 'alias': true,\n });\n }\n}\n","// ----------------------------------------------------------------------------\n\n// PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:\n// https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code\n// EDIT THE CORRESPONDENT .ts FILE INSTEAD\n\n// ---------------------------------------------------------------------------\nimport Exchange from './abstract/htx.js';\nimport { Precise } from './base/Precise.js';\nimport { chainIdbyEcidsCacheIdentifier, ecidByChainIdsCacheIdentifier } from './base/cache.js';\nimport { TICK_SIZE, TRUNCATE } from './base/functions/number.js';\nimport { AuthenticationError, ExchangeError, ExchangeInvalidPermissionsError, ExchangeNotAvailableError, ExchangeRateLimitExceededError, ExchangeRequestExpiredError, ExchangeTransferError, ExchangeUnderMaintenanceError, InsufficientBalanceError, InvalidAddressError, InvalidCredentialsError, InvalidParamsError, MarketError, MarketNotFoundError, MarketNotLoadedError, MarketTypeNotSupportedError, OrderNotFoundError, TradeError, UnderWithdrawMinimumError, WithdrawalError } from './sdk/errors.js';\nimport { SdkErrorMessages } from './sdk/errorsMetadata.js';\nimport { sha256 } from './static_dependencies/noble-hashes/sha256.js';\n/* eslint-enable */\n// ---------------------------------------------------------------------------\n/**\n * @class htx\n * @augments Exchange\n */\nexport default class htx extends Exchange {\n describe() {\n return this.deepExtend(super.describe(), {\n 'id': 'htx',\n 'name': 'HTX',\n 'countries': ['CN'],\n 'rateLimit': 100,\n 'userAgent': this.userAgents['chrome100'],\n 'certified': true,\n 'version': 'v1',\n 'hostname': 'api.huobi.pro',\n 'pro': true,\n 'has': {\n 'CORS': undefined,\n 'spot': true,\n 'margin': true,\n 'swap': true,\n 'future': true,\n 'option': undefined,\n 'cancelAllOrders': true,\n 'cancelOrder': true,\n 'cancelOrders': true,\n 'createDepositAddress': undefined,\n 'createMarketBuyOrderWithCost': true,\n 'createMarketOrderWithCost': false,\n 'createMarketSellOrderWithCost': false,\n 'createOrder': true,\n 'createOrders': true,\n 'createTakeProfitOrder': true,\n 'createTrailingPercentOrder': true,\n 'createTriggerOrder': true,\n 'fetchAccounts': true,\n 'fetchBalance': true,\n 'fetchCanceledOrders': undefined,\n 'fetchClosedOrder': undefined,\n 'fetchClosedOrders': true,\n 'fetchCurrencies': true,\n 'fetchDeposit': undefined,\n 'fetchDepositAddress': true,\n 'fetchDepositAddresses': undefined,\n 'fetchDepositAddressesByNetwork': true,\n 'fetchDeposits': true,\n 'fetchDepositWithdrawFee': 'emulated',\n 'fetchDepositWithdrawFees': true,\n 'fetchLedger': true,\n 'fetchLedgerEntry': undefined,\n 'fetchMarkets': true,\n 'fetchMyTrades': true,\n 'fetchOHLCV': true,\n 'fetchOpenOrder': undefined,\n 'fetchOpenOrders': true,\n 'fetchOrder': true,\n 'fetchOrderBook': true,\n 'fetchOrderBooks': undefined,\n 'fetchOrders': true,\n 'fetchOrderTrades': true,\n 'fetchPosition': true,\n 'fetchPositions': true,\n 'fetchPositionsRisk': false,\n 'fetchStatus': true,\n 'fetchTicker': true,\n 'fetchTickers': true,\n 'fetchTime': true,\n 'fetchTrades': true,\n 'fetchTradingFee': true,\n 'fetchTradingFees': false,\n 'fetchTradingLimits': true,\n 'fetchTransactionFee': undefined,\n 'fetchTransactionFees': undefined,\n 'fetchTransactions': undefined,\n 'fetchTransfers': undefined,\n 'fetchWithdrawAddresses': true,\n 'fetchWithdrawal': undefined,\n 'fetchWithdrawals': true,\n 'fetchWithdrawalWhitelist': undefined,\n 'transfer': true,\n 'withdraw': true,\n },\n 'timeframes': {\n '1m': '1min',\n '5m': '5min',\n '15m': '15min',\n '30m': '30min',\n '1h': '60min',\n '4h': '4hour',\n '1d': '1day',\n '1w': '1week',\n '1M': '1mon',\n '1y': '1year',\n },\n 'urls': {\n // 'test': {\n // 'market': 'https://api.testnet.huobi.pro',\n // 'public': 'https://api.testnet.huobi.pro',\n // 'private': 'https://api.testnet.huobi.pro',\n // },\n 'logo': 'https://user-images.githubusercontent.com/1294454/76137448-22748a80-604e-11ea-8069-6e389271911d.jpg',\n 'hostnames': {\n 'contract': 'api.hbdm.com',\n 'spot': 'api.huobi.pro',\n 'status': {\n 'spot': 'status.huobigroup.com',\n 'future': {\n 'inverse': 'status-dm.huobigroup.com',\n 'linear': 'status-linear-swap.huobigroup.com', // USDT-Margined Contracts\n },\n 'swap': {\n 'inverse': 'status-swap.huobigroup.com',\n 'linear': 'status-linear-swap.huobigroup.com', // USDT-Margined Contracts\n },\n },\n // recommended for AWS\n // 'contract': 'api.hbdm.vn',\n // 'spot': 'api-aws.huobi.pro',\n },\n 'api': {\n 'status': 'https://{hostname}',\n 'contract': 'https://{hostname}',\n 'spot': 'https://{hostname}',\n 'public': 'https://{hostname}',\n 'private': 'https://{hostname}',\n 'v2Public': 'https://{hostname}',\n 'v2Private': 'https://{hostname}',\n },\n 'www': 'https://www.huobi.com',\n 'referral': {\n // https://www.huobi.com/en-us/v/register/double-invite/?inviter_id=11343840&invite_code=6rmm2223 - I removed the code for now, because CWS is blocking until we explain our affiliate program to our users\n 'url': 'https://www.huobi.com/en-us/v/register',\n 'discount': 0.15,\n },\n 'doc': [\n 'https://huobiapi.github.io/docs/spot/v1/en/',\n 'https://huobiapi.github.io/docs/dm/v1/en/',\n 'https://huobiapi.github.io/docs/coin_margined_swap/v1/en/',\n 'https://huobiapi.github.io/docs/usdt_swap/v1/en/',\n 'https://www.huobi.com/en-us/opend/newApiPages/',\n ],\n 'fees': 'https://www.huobi.com/about/fee/',\n },\n 'api': {\n // ------------------------------------------------------------\n // old api definitions\n 'v2Public': {\n 'get': {\n 'reference/currencies': 1,\n 'market-status': 1, // 获取当前市场状态\n },\n },\n 'v2Private': {\n 'get': {\n 'account/ledger': 1,\n 'account/withdraw/quota': 1,\n 'account/withdraw/address': 1,\n 'account/deposit/address': 1,\n 'account/repayment': 5,\n 'reference/transact-fee-rate': 1,\n 'account/asset-valuation': 0.2,\n 'point/account': 5,\n 'sub-user/user-list': 1,\n 'sub-user/user-state': 1,\n 'sub-user/account-list': 1,\n 'sub-user/deposit-address': 1,\n 'sub-user/query-deposit': 1,\n 'user/api-key': 1,\n 'user/uid': 1,\n 'algo-orders/opening': 1,\n 'algo-orders/history': 1,\n 'algo-orders/specific': 1,\n 'c2c/offers': 1,\n 'c2c/offer': 1,\n 'c2c/transactions': 1,\n 'c2c/repayment': 1,\n 'c2c/account': 1,\n 'etp/reference': 1,\n 'etp/transactions': 5,\n 'etp/transaction': 5,\n 'etp/rebalance': 1,\n 'etp/limit': 1, // 获取ETP持仓限额\n },\n 'post': {\n 'account/transfer': 1,\n 'account/repayment': 5,\n 'point/transfer': 5,\n 'sub-user/management': 1,\n 'sub-user/creation': 1,\n 'sub-user/tradable-market': 1,\n 'sub-user/transferability': 1,\n 'sub-user/api-key-generation': 1,\n 'sub-user/api-key-modification': 1,\n 'sub-user/api-key-deletion': 1,\n 'sub-user/deduct-mode': 1,\n 'algo-orders': 1,\n 'algo-orders/cancel-all-after': 1,\n 'algo-orders/cancellation': 1,\n 'c2c/offer': 1,\n 'c2c/cancellation': 1,\n 'c2c/cancel-all': 1,\n 'c2c/repayment': 1,\n 'c2c/transfer': 1,\n 'etp/creation': 5,\n 'etp/redemption': 5,\n 'etp/{transactId}/cancel': 10,\n 'etp/batch-cancel': 50, // 杠杆ETP批量撤单\n },\n },\n 'public': {\n 'get': {\n 'common/symbols': 1,\n 'common/currencys': 1,\n 'common/timestamp': 1,\n 'common/exchange': 1,\n 'settings/currencys': 1, // ?language=en-US\n },\n },\n 'private': {\n 'get': {\n 'account/accounts': 0.2,\n 'account/accounts/{id}/balance': 0.2,\n 'account/accounts/{sub-uid}': 1,\n 'account/history': 4,\n 'cross-margin/loan-info': 1,\n 'margin/loan-info': 1,\n 'fee/fee-rate/get': 1,\n 'order/openOrders': 0.4,\n 'order/orders': 0.4,\n 'order/orders/{id}': 0.4,\n 'order/orders/{id}/matchresults': 0.4,\n 'order/orders/getClientOrder': 0.4,\n 'order/history': 1,\n 'order/matchresults': 1,\n // 'dw/withdraw-virtual/addresses', // 查询虚拟币提现地址(Deprecated)\n 'query/deposit-withdraw': 1,\n // 'margin/loan-info', // duplicate\n 'margin/loan-orders': 0.2,\n 'margin/accounts/balance': 0.2,\n 'cross-margin/loan-orders': 1,\n 'cross-margin/accounts/balance': 1,\n 'points/actions': 1,\n 'points/orders': 1,\n 'subuser/aggregate-balance': 10,\n 'stable-coin/exchange_rate': 1,\n 'stable-coin/quote': 1,\n },\n 'post': {\n 'account/transfer': 1,\n 'futures/transfer': 1,\n 'order/batch-orders': 0.4,\n 'order/orders/place': 0.2,\n 'order/orders/submitCancelClientOrder': 0.2,\n 'order/orders/batchCancelOpenOrders': 0.4,\n // 'order/orders', // 创建一个新的订单请求 (仅创建订单,不执行下单)\n // 'order/orders/{id}/place', // 执行一个订单 (仅执行已创建的订单)\n 'order/orders/{id}/submitcancel': 0.2,\n 'order/orders/batchcancel': 0.4,\n // 'dw/balance/transfer', // 资产划转\n 'dw/withdraw/api/create': 1,\n // 'dw/withdraw-virtual/create', // 申请提现虚拟币\n // 'dw/withdraw-virtual/{id}/place', // 确认申请虚拟币提现(Deprecated)\n 'dw/withdraw-virtual/{id}/cancel': 1,\n 'dw/transfer-in/margin': 10,\n 'dw/transfer-out/margin': 10,\n 'margin/orders': 10,\n 'margin/orders/{id}/repay': 10,\n 'cross-margin/transfer-in': 1,\n 'cross-margin/transfer-out': 1,\n 'cross-margin/orders': 1,\n 'cross-margin/orders/{id}/repay': 1,\n 'stable-coin/exchange': 1,\n 'subuser/transfer': 10,\n },\n },\n // ------------------------------------------------------------\n // new api definitions\n // 'https://status.huobigroup.com/api/v2/summary.json': 1,\n // 'https://status-dm.huobigroup.com/api/v2/summary.json': 1,\n // 'https://status-swap.huobigroup.com/api/v2/summary.json': 1,\n // 'https://status-linear-swap.huobigroup.com/api/v2/summary.json': 1,\n 'status': {\n 'public': {\n 'spot': {\n 'get': {\n 'api/v2/summary.json': 1,\n },\n },\n 'future': {\n 'inverse': {\n 'get': {\n 'api/v2/summary.json': 1,\n },\n },\n 'linear': {\n 'get': {\n 'api/v2/summary.json': 1,\n },\n },\n },\n 'swap': {\n 'inverse': {\n 'get': {\n 'api/v2/summary.json': 1,\n },\n },\n 'linear': {\n 'get': {\n 'api/v2/summary.json': 1,\n },\n },\n },\n },\n },\n 'spot': {\n 'public': {\n 'get': {\n 'v2/market-status': 1,\n 'v1/common/symbols': 1,\n 'v1/common/currencys': 1,\n 'v2/settings/common/currencies': 1,\n 'v2/reference/currencies': 1,\n 'v1/common/timestamp': 1,\n 'v1/common/exchange': 1,\n 'v1/settings/common/chains': 1,\n 'v1/settings/common/currencys': 1,\n 'v1/settings/common/symbols': 1,\n 'v2/settings/common/symbols': 1,\n 'v1/settings/common/market-symbols': 1,\n // Market Data\n 'market/history/candles': 1,\n 'market/history/kline': 1,\n 'market/detail/merged': 1,\n 'market/tickers': 1,\n 'market/detail': 1,\n 'market/depth': 1,\n 'market/trade': 1,\n 'market/history/trade': 1,\n 'market/etp': 1,\n // ETP\n 'v2/etp/reference': 1,\n 'v2/etp/rebalance': 1,\n },\n },\n 'private': {\n 'get': {\n // Account\n 'v1/account/accounts': 0.2,\n 'v1/account/accounts/{account-id}/balance': 0.2,\n 'v2/account/valuation': 1,\n 'v2/account/asset-valuation': 0.2,\n 'v1/account/history': 4,\n 'v2/account/ledger': 1,\n 'v2/point/account': 5,\n // Wallet (Deposit and Withdraw)\n 'v2/account/deposit/address': 1,\n 'v2/account/withdraw/quota': 1,\n 'v2/account/withdraw/address': 1,\n 'v2/reference/currencies': 1,\n 'v1/query/deposit-withdraw': 1,\n 'v1/query/withdraw/client-order-id': 1,\n // Sub user management\n 'v2/user/api-key': 1,\n 'v2/user/uid': 1,\n 'v2/sub-user/user-list': 1,\n 'v2/sub-user/user-state': 1,\n 'v2/sub-user/account-list': 1,\n 'v2/sub-user/deposit-address': 1,\n 'v2/sub-user/query-deposit': 1,\n 'v1/subuser/aggregate-balance': 10,\n 'v1/account/accounts/{sub-uid}': 1,\n // Trading\n 'v1/order/openOrders': 0.4,\n 'v1/order/orders/{order-id}': 0.4,\n 'v1/order/orders/getClientOrder': 0.4,\n 'v1/order/orders/{order-id}/matchresult': 0.4,\n 'v1/order/orders/{order-id}/matchresults': 0.4,\n 'v1/order/orders': 0.4,\n 'v1/order/history': 1,\n 'v1/order/matchresults': 1,\n 'v2/reference/transact-fee-rate': 1,\n // Conditional Order\n 'v2/algo-orders/opening': 1,\n 'v2/algo-orders/history': 1,\n 'v2/algo-orders/specific': 1,\n // Margin Loan (Cross/Isolated)\n 'v1/margin/loan-info': 1,\n 'v1/margin/loan-orders': 0.2,\n 'v1/margin/accounts/balance': 0.2,\n 'v1/cross-margin/loan-info': 1,\n 'v1/cross-margin/loan-orders': 1,\n 'v1/cross-margin/accounts/balance': 1,\n 'v2/account/repayment': 5,\n // Stable Coin Exchange\n 'v1/stable-coin/quote': 1,\n 'v1/stable_coin/exchange_rate': 1,\n // ETP\n 'v2/etp/transactions': 5,\n 'v2/etp/transaction': 5,\n 'v2/etp/limit': 1,\n },\n 'post': {\n // Account\n 'v1/account/transfer': 1,\n 'v1/futures/transfer': 1,\n 'v2/point/transfer': 5,\n 'v2/account/transfer': 1,\n // Wallet (Deposit and Withdraw)\n 'v1/dw/withdraw/api/create': 1,\n 'v1/dw/withdraw-virtual/{withdraw-id}/cancel': 1,\n // Sub user management\n 'v2/sub-user/deduct-mode': 1,\n 'v2/sub-user/creation': 1,\n 'v2/sub-user/management': 1,\n 'v2/sub-user/tradable-market': 1,\n 'v2/sub-user/transferability': 1,\n 'v2/sub-user/api-key-generation': 1,\n 'v2/sub-user/api-key-modification': 1,\n 'v2/sub-user/api-key-deletion': 1,\n 'v1/subuser/transfer': 10,\n // Trading\n 'v1/order/orders/place': 0.2,\n 'v1/order/batch-orders': 0.4,\n 'v1/order/auto/place': 0.2,\n 'v1/order/orders/{order-id}/submitcancel': 0.2,\n 'v1/order/orders/submitCancelClientOrder': 0.2,\n 'v1/order/orders/batchCancelOpenOrders': 0.4,\n 'v1/order/orders/batchcancel': 0.4,\n 'v2/algo-orders/cancel-all-after': 1,\n // Conditional Order\n 'v2/algo-orders': 1,\n 'v2/algo-orders/cancellation': 1,\n // Margin Loan (Cross/Isolated)\n 'v2/account/repayment': 5,\n 'v1/dw/transfer-in/margin': 10,\n 'v1/dw/transfer-out/margin': 10,\n 'v1/margin/orders': 10,\n 'v1/margin/orders/{order-id}/repay': 10,\n 'v1/cross-margin/transfer-in': 1,\n 'v1/cross-margin/transfer-out': 1,\n 'v1/cross-margin/orders': 1,\n 'v1/cross-margin/orders/{order-id}/repay': 1,\n // Stable Coin Exchange\n 'v1/stable-coin/exchange': 1,\n // ETP\n 'v2/etp/creation': 5,\n 'v2/etp/redemption': 5,\n 'v2/etp/{transactId}/cancel': 10,\n 'v2/etp/batch-cancel': 50,\n },\n },\n },\n 'contract': {\n 'public': {\n 'get': {\n 'api/v1/timestamp': 1,\n 'heartbeat/': 1,\n // Future Market Data interface\n 'api/v1/contract_contract_info': 1,\n 'api/v1/contract_index': 1,\n 'api/v1/contract_query_elements': 1,\n 'api/v1/contract_price_limit': 1,\n 'api/v1/contract_open_interest': 1,\n 'api/v1/contract_delivery_price': 1,\n 'market/depth': 1,\n 'market/bbo': 1,\n 'market/history/kline': 1,\n 'index/market/history/mark_price_kline': 1,\n 'market/detail/merged': 1,\n 'market/detail/batch_merged': 1,\n 'v2/market/detail/batch_merged': 1,\n 'market/trade': 1,\n 'market/history/trade': 1,\n 'api/v1/contract_risk_info': 1,\n 'api/v1/contract_insurance_fund': 1,\n 'api/v1/contract_adjustfactor': 1,\n 'api/v1/contract_his_open_interest': 1,\n 'api/v1/contract_ladder_margin': 1,\n 'api/v1/contract_api_state': 1,\n 'api/v1/contract_elite_account_ratio': 1,\n 'api/v1/contract_elite_position_ratio': 1,\n 'api/v1/contract_liquidation_orders': 1,\n 'api/v1/contract_settlement_records': 1,\n 'index/market/history/index': 1,\n 'index/market/history/basis': 1,\n 'api/v1/contract_estimated_settlement_price': 1,\n 'api/v3/contract_liquidation_orders': 1,\n // Swap Market Data interface\n 'swap-api/v1/swap_contract_info': 1,\n 'swap-api/v1/swap_index': 1,\n 'swap-api/v1/swap_query_elements': 1,\n 'swap-api/v1/swap_price_limit': 1,\n 'swap-api/v1/swap_open_interest': 1,\n 'swap-ex/market/depth': 1,\n 'swap-ex/market/bbo': 1,\n 'swap-ex/market/history/kline': 1,\n 'index/market/history/swap_mark_price_kline': 1,\n 'swap-ex/market/detail/merged': 1,\n 'v2/swap-ex/market/detail/batch_merged': 1,\n 'index/market/history/swap_premium_index_kline': 1,\n 'swap-ex/market/detail/batch_merged': 1,\n 'swap-ex/market/trade': 1,\n 'swap-ex/market/history/trade': 1,\n 'swap-api/v1/swap_risk_info': 1,\n 'swap-api/v1/swap_insurance_fund': 1,\n 'swap-api/v1/swap_adjustfactor': 1,\n 'swap-api/v1/swap_his_open_interest': 1,\n 'swap-api/v1/swap_ladder_margin': 1,\n 'swap-api/v1/swap_api_state': 1,\n 'swap-api/v1/swap_elite_account_ratio': 1,\n 'swap-api/v1/swap_elite_position_ratio': 1,\n 'swap-api/v1/swap_estimated_settlement_price': 1,\n 'swap-api/v1/swap_liquidation_orders': 1,\n 'swap-api/v1/swap_settlement_records': 1,\n 'swap-api/v1/swap_funding_rate': 1,\n 'swap-api/v1/swap_batch_funding_rate': 1,\n 'swap-api/v1/swap_historical_funding_rate': 1,\n 'swap-api/v3/swap_liquidation_orders': 1,\n 'index/market/history/swap_estimated_rate_kline': 1,\n 'index/market/history/swap_basis': 1,\n // Swap Market Data interface\n 'linear-swap-api/v1/swap_contract_info': 1,\n 'linear-swap-api/v1/swap_index': 1,\n 'linear-swap-api/v1/swap_query_elements': 1,\n 'linear-swap-api/v1/swap_price_limit': 1,\n 'linear-swap-api/v1/swap_open_interest': 1,\n 'linear-swap-ex/market/depth': 1,\n 'linear-swap-ex/market/bbo': 1,\n 'linear-swap-ex/market/history/kline': 1,\n 'index/market/history/linear_swap_mark_price_kline': 1,\n 'linear-swap-ex/market/detail/merged': 1,\n 'linear-swap-ex/market/detail/batch_merged': 1,\n 'v2/linear-swap-ex/market/detail/batch_merged': 1,\n 'linear-swap-ex/market/trade': 1,\n 'linear-swap-ex/market/history/trade': 1,\n 'linear-swap-api/v1/swap_risk_info': 1,\n 'swap-api/v1/linear-swap-api/v1/swap_insurance_fund': 1,\n 'linear-swap-api/v1/swap_adjustfactor': 1,\n 'linear-swap-api/v1/swap_cross_adjustfactor': 1,\n 'linear-swap-api/v1/swap_his_open_interest': 1,\n 'linear-swap-api/v1/swap_ladder_margin': 1,\n 'linear-swap-api/v1/swap_cross_ladder_margin': 1,\n 'linear-swap-api/v1/swap_api_state': 1,\n 'linear-swap-api/v1/swap_cross_transfer_state': 1,\n 'linear-swap-api/v1/swap_cross_trade_state': 1,\n 'linear-swap-api/v1/swap_elite_account_ratio': 1,\n 'linear-swap-api/v1/swap_elite_position_ratio': 1,\n 'linear-swap-api/v1/swap_liquidation_orders': 1,\n 'linear-swap-api/v1/swap_settlement_records': 1,\n 'linear-swap-api/v1/swap_funding_rate': 1,\n 'linear-swap-api/v1/swap_batch_funding_rate': 1,\n 'linear-swap-api/v1/swap_historical_funding_rate': 1,\n 'linear-swap-api/v3/swap_liquidation_orders': 1,\n 'index/market/history/linear_swap_premium_index_kline': 1,\n 'index/market/history/linear_swap_estimated_rate_kline': 1,\n 'index/market/history/linear_swap_basis': 1,\n 'linear-swap-api/v1/swap_estimated_settlement_price': 1,\n },\n },\n 'private': {\n 'get': {\n // Future Account Interface\n 'api/v1/contract_sub_auth_list': 1,\n 'api/v1/contract_api_trading_status': 1,\n // Swap Account Interface\n 'swap-api/v1/swap_sub_auth_list': 1,\n 'swap-api/v1/swap_api_trading_status': 1,\n // Swap Account Interface\n 'linear-swap-api/v1/swap_sub_auth_list': 1,\n 'linear-swap-api/v1/swap_api_trading_status': 1,\n 'linear-swap-api/v1/swap_cross_position_side': 1,\n 'linear-swap-api/v1/swap_position_side': 1,\n 'linear-swap-api/v3/unified_account_info': 1,\n 'linear-swap-api/v3/fix_position_margin_change_record': 1,\n 'linear-swap-api/v3/swap_unified_account_type': 1,\n 'linear-swap-api/v3/linear_swap_overview_account_info': 1,\n },\n 'post': {\n // Future Account Interface\n 'api/v1/contract_balance_valuation': 1,\n 'api/v1/contract_account_info': 1,\n 'api/v1/contract_position_info': 1,\n 'api/v1/contract_sub_auth': 1,\n 'api/v1/contract_sub_account_list': 1,\n 'api/v1/contract_sub_account_info_list': 1,\n 'api/v1/contract_sub_account_info': 1,\n 'api/v1/contract_sub_position_info': 1,\n 'api/v1/contract_financial_record': 1,\n 'api/v1/contract_financial_record_exact': 1,\n 'api/v1/contract_user_settlement_records': 1,\n 'api/v1/contract_order_limit': 1,\n 'api/v1/contract_fee': 1,\n 'api/v1/contract_transfer_limit': 1,\n 'api/v1/contract_position_limit': 1,\n 'api/v1/contract_account_position_info': 1,\n 'api/v1/contract_master_sub_transfer': 1,\n 'api/v1/contract_master_sub_transfer_record': 1,\n 'api/v1/contract_available_level_rate': 1,\n 'api/v3/contract_financial_record': 1,\n 'api/v3/contract_financial_record_exact': 1,\n // Future Trade Interface\n 'api/v1/contract-cancel-after': 1,\n 'api/v1/contract_order': 1,\n 'api/v1/contract_batchorder': 1,\n 'api/v1/contract_cancel': 1,\n 'api/v1/contract_cancelall': 1,\n 'api/v1/contract_switch_lever_rate': 1,\n 'api/v1/lightning_close_position': 1,\n 'api/v1/contract_order_info': 1,\n 'api/v1/contract_order_detail': 1,\n 'api/v1/contract_openorders': 1,\n 'api/v1/contract_hisorders': 1,\n 'api/v1/contract_hisorders_exact': 1,\n 'api/v1/contract_matchresults': 1,\n 'api/v1/contract_matchresults_exact': 1,\n 'api/v3/contract_hisorders': 1,\n 'api/v3/contract_hisorders_exact': 1,\n 'api/v3/contract_matchresults': 1,\n 'api/v3/contract_matchresults_exact': 1,\n // Contract Strategy Order Interface\n 'api/v1/contract_trigger_order': 1,\n 'api/v1/contract_trigger_cancel': 1,\n 'api/v1/contract_trigger_cancelall': 1,\n 'api/v1/contract_trigger_openorders': 1,\n 'api/v1/contract_trigger_hisorders': 1,\n 'api/v1/contract_tpsl_order': 1,\n 'api/v1/contract_tpsl_cancel': 1,\n 'api/v1/contract_tpsl_cancelall': 1,\n 'api/v1/contract_tpsl_openorders': 1,\n 'api/v1/contract_tpsl_hisorders': 1,\n 'api/v1/contract_relation_tpsl_order': 1,\n 'api/v1/contract_track_order': 1,\n 'api/v1/contract_track_cancel': 1,\n 'api/v1/contract_track_cancelall': 1,\n 'api/v1/contract_track_openorders': 1,\n 'api/v1/contract_track_hisorders': 1,\n // Swap Account Interface\n 'swap-api/v1/swap_balance_valuation': 1,\n 'swap-api/v1/swap_account_info': 1,\n 'swap-api/v1/swap_position_info': 1,\n 'swap-api/v1/swap_account_position_info': 1,\n 'swap-api/v1/swap_sub_auth': 1,\n 'swap-api/v1/swap_sub_account_list': 1,\n 'swap-api/v1/swap_sub_account_info_list': 1,\n 'swap-api/v1/swap_sub_account_info': 1,\n 'swap-api/v1/swap_sub_position_info': 1,\n 'swap-api/v1/swap_financial_record': 1,\n 'swap-api/v1/swap_financial_record_exact': 1,\n 'swap-api/v1/swap_user_settlement_records': 1,\n 'swap-api/v1/swap_available_level_rate': 1,\n 'swap-api/v1/swap_order_limit': 1,\n 'swap-api/v1/swap_fee': 1,\n 'swap-api/v1/swap_transfer_limit': 1,\n 'swap-api/v1/swap_position_limit': 1,\n 'swap-api/v1/swap_master_sub_transfer': 1,\n 'swap-api/v1/swap_master_sub_transfer_record': 1,\n 'swap-api/v3/swap_financial_record': 1,\n 'swap-api/v3/swap_financial_record_exact': 1,\n // Swap Trade Interface\n 'swap-api/v1/swap-cancel-after': 1,\n 'swap-api/v1/swap_order': 1,\n 'swap-api/v1/swap_batchorder': 1,\n 'swap-api/v1/swap_cancel': 1,\n 'swap-api/v1/swap_cancelall': 1,\n 'swap-api/v1/swap_lightning_close_position': 1,\n 'swap-api/v1/swap_switch_lever_rate': 1,\n 'swap-api/v1/swap_order_info': 1,\n 'swap-api/v1/swap_order_detail': 1,\n 'swap-api/v1/swap_openorders': 1,\n 'swap-api/v1/swap_hisorders': 1,\n 'swap-api/v1/swap_hisorders_exact': 1,\n 'swap-api/v1/swap_matchresults': 1,\n 'swap-api/v1/swap_matchresults_exact': 1,\n 'swap-api/v3/swap_matchresults': 1,\n 'swap-api/v3/swap_matchresults_exact': 1,\n 'swap-api/v3/swap_hisorders': 1,\n 'swap-api/v3/swap_hisorders_exact': 1,\n // Swap Strategy Order Interface\n 'swap-api/v1/swap_trigger_order': 1,\n 'swap-api/v1/swap_trigger_cancel': 1,\n 'swap-api/v1/swap_trigger_cancelall': 1,\n 'swap-api/v1/swap_trigger_openorders': 1,\n 'swap-api/v1/swap_trigger_hisorders': 1,\n 'swap-api/v1/swap_tpsl_order': 1,\n 'swap-api/v1/swap_tpsl_cancel': 1,\n 'swap-api/v1/swap_tpsl_cancelall': 1,\n 'swap-api/v1/swap_tpsl_openorders': 1,\n 'swap-api/v1/swap_tpsl_hisorders': 1,\n 'swap-api/v1/swap_relation_tpsl_order': 1,\n 'swap-api/v1/swap_track_order': 1,\n 'swap-api/v1/swap_track_cancel': 1,\n 'swap-api/v1/swap_track_cancelall': 1,\n 'swap-api/v1/swap_track_openorders': 1,\n 'swap-api/v1/swap_track_hisorders': 1,\n // Swap Account Interface\n 'linear-swap-api/v1/swap_lever_position_limit': 1,\n 'linear-swap-api/v1/swap_cross_lever_position_limit': 1,\n 'linear-swap-api/v1/swap_balance_valuation': 1,\n 'linear-swap-api/v1/swap_account_info': 1,\n 'linear-swap-api/v1/swap_cross_account_info': 1,\n 'linear-swap-api/v1/swap_position_info': 1,\n 'linear-swap-api/v1/swap_cross_position_info': 1,\n 'linear-swap-api/v1/swap_account_position_info': 1,\n 'linear-swap-api/v1/swap_cross_account_position_info': 1,\n 'linear-swap-api/v1/swap_sub_auth': 1,\n 'linear-swap-api/v1/swap_sub_account_list': 1,\n 'linear-swap-api/v1/swap_cross_sub_account_list': 1,\n 'linear-swap-api/v1/swap_sub_account_info_list': 1,\n 'linear-swap-api/v1/swap_cross_sub_account_info_list': 1,\n 'linear-swap-api/v1/swap_sub_account_info': 1,\n 'linear-swap-api/v1/swap_cross_sub_account_info': 1,\n 'linear-swap-api/v1/swap_sub_position_info': 1,\n 'linear-swap-api/v1/swap_cross_sub_position_info': 1,\n 'linear-swap-api/v1/swap_financial_record': 1,\n 'linear-swap-api/v1/swap_financial_record_exact': 1,\n 'linear-swap-api/v1/swap_user_settlement_records': 1,\n 'linear-swap-api/v1/swap_cross_user_settlement_records': 1,\n 'linear-swap-api/v1/swap_available_level_rate': 1,\n 'linear-swap-api/v1/swap_cross_available_level_rate': 1,\n 'linear-swap-api/v1/swap_order_limit': 1,\n 'linear-swap-api/v1/swap_fee': 1,\n 'linear-swap-api/v1/swap_transfer_limit': 1,\n 'linear-swap-api/v1/swap_cross_transfer_limit': 1,\n 'linear-swap-api/v1/swap_position_limit': 1,\n 'linear-swap-api/v1/swap_cross_position_limit': 1,\n 'linear-swap-api/v1/swap_master_sub_transfer': 1,\n 'linear-swap-api/v1/swap_master_sub_transfer_record': 1,\n 'linear-swap-api/v1/swap_transfer_inner': 1,\n 'linear-swap-api/v3/swap_financial_record': 1,\n 'linear-swap-api/v3/swap_financial_record_exact': 1,\n // Swap Trade Interface\n 'linear-swap-api/v1/swap_order': 1,\n 'linear-swap-api/v1/swap_cross_order': 1,\n 'linear-swap-api/v1/swap_batchorder': 1,\n 'linear-swap-api/v1/swap_cross_batchorder': 1,\n 'linear-swap-api/v1/swap_cancel': 1,\n 'linear-swap-api/v1/swap_cross_cancel': 1,\n 'linear-swap-api/v1/swap_cancelall': 1,\n 'linear-swap-api/v1/swap_cross_cancelall': 1,\n 'linear-swap-api/v1/swap_switch_lever_rate': 1,\n 'linear-swap-api/v1/swap_cross_switch_lever_rate': 1,\n 'linear-swap-api/v1/swap_lightning_close_position': 1,\n 'linear-swap-api/v1/swap_cross_lightning_close_position': 1,\n 'linear-swap-api/v1/swap_order_info': 1,\n 'linear-swap-api/v1/swap_cross_order_info': 1,\n 'linear-swap-api/v1/swap_order_detail': 1,\n 'linear-swap-api/v1/swap_cross_order_detail': 1,\n 'linear-swap-api/v1/swap_openorders': 1,\n 'linear-swap-api/v1/swap_cross_openorders': 1,\n 'linear-swap-api/v1/swap_hisorders': 1,\n 'linear-swap-api/v1/swap_cross_hisorders': 1,\n 'linear-swap-api/v1/swap_hisorders_exact': 1,\n 'linear-swap-api/v1/swap_cross_hisorders_exact': 1,\n 'linear-swap-api/v1/swap_matchresults': 1,\n 'linear-swap-api/v1/swap_cross_matchresults': 1,\n 'linear-swap-api/v1/swap_matchresults_exact': 1,\n 'linear-swap-api/v1/swap_cross_matchresults_exact': 1,\n 'linear-swap-api/v1/linear-cancel-after': 1,\n 'linear-swap-api/v1/swap_switch_position_mode': 1,\n 'linear-swap-api/v1/swap_cross_switch_position_mode': 1,\n 'linear-swap-api/v3/swap_matchresults': 1,\n 'linear-swap-api/v3/swap_cross_matchresults': 1,\n 'linear-swap-api/v3/swap_matchresults_exact': 1,\n 'linear-swap-api/v3/swap_cross_matchresults_exact': 1,\n 'linear-swap-api/v3/swap_hisorders': 1,\n 'linear-swap-api/v3/swap_cross_hisorders': 1,\n 'linear-swap-api/v3/swap_hisorders_exact': 1,\n 'linear-swap-api/v3/swap_cross_hisorders_exact': 1,\n 'linear-swap-api/v3/fix_position_margin_change': 1,\n 'linear-swap-api/v3/swap_switch_account_type': 1,\n 'linear-swap-api/v3/linear_swap_fee_switch': 1,\n // Swap Strategy Order Interface\n 'linear-swap-api/v1/swap_trigger_order': 1,\n 'linear-swap-api/v1/swap_cross_trigger_order': 1,\n 'linear-swap-api/v1/swap_trigger_cancel': 1,\n 'linear-swap-api/v1/swap_cross_trigger_cancel': 1,\n 'linear-swap-api/v1/swap_trigger_cancelall': 1,\n 'linear-swap-api/v1/swap_cross_trigger_cancelall': 1,\n 'linear-swap-api/v1/swap_trigger_openorders': 1,\n 'linear-swap-api/v1/swap_cross_trigger_openorders': 1,\n 'linear-swap-api/v1/swap_trigger_hisorders': 1,\n 'linear-swap-api/v1/swap_cross_trigger_hisorders': 1,\n 'linear-swap-api/v1/swap_tpsl_order': 1,\n 'linear-swap-api/v1/swap_cross_tpsl_order': 1,\n 'linear-swap-api/v1/swap_tpsl_cancel': 1,\n 'linear-swap-api/v1/swap_cross_tpsl_cancel': 1,\n 'linear-swap-api/v1/swap_tpsl_cancelall': 1,\n 'linear-swap-api/v1/swap_cross_tpsl_cancelall': 1,\n 'linear-swap-api/v1/swap_tpsl_openorders': 1,\n 'linear-swap-api/v1/swap_cross_tpsl_openorders': 1,\n 'linear-swap-api/v1/swap_tpsl_hisorders': 1,\n 'linear-swap-api/v1/swap_cross_tpsl_hisorders': 1,\n 'linear-swap-api/v1/swap_relation_tpsl_order': 1,\n 'linear-swap-api/v1/swap_cross_relation_tpsl_order': 1,\n 'linear-swap-api/v1/swap_track_order': 1,\n 'linear-swap-api/v1/swap_cross_track_order': 1,\n 'linear-swap-api/v1/swap_track_cancel': 1,\n 'linear-swap-api/v1/swap_cross_track_cancel': 1,\n 'linear-swap-api/v1/swap_track_cancelall': 1,\n 'linear-swap-api/v1/swap_cross_track_cancelall': 1,\n 'linear-swap-api/v1/swap_track_openorders': 1,\n 'linear-swap-api/v1/swap_cross_track_openorders': 1,\n 'linear-swap-api/v1/swap_track_hisorders': 1,\n 'linear-swap-api/v1/swap_cross_track_hisorders': 1,\n },\n },\n },\n },\n 'fees': {\n 'trading': {\n 'feeSide': 'get',\n 'tierBased': false,\n 'percentage': true,\n 'maker': this.parseNumber('0.002'),\n 'taker': this.parseNumber('0.002'),\n },\n },\n 'exceptions': {\n 'broad': {\n 'contract is restricted of closing positions on API. Please contact customer service': ExchangeUnderMaintenanceError,\n 'maintain': ExchangeUnderMaintenanceError,\n 'API key has no permission': ExchangeInvalidPermissionsError, // {\"status\":\"error\",\"err-code\":\"api-signature-not-valid\",\"err-msg\":\"Signature not valid: API key has no permission [API Key没有权限]\",\"data\":null}\n },\n 'exact': {\n // err-code\n '403': InvalidCredentialsError,\n '1010': ExchangeError,\n '1003': AuthenticationError,\n '1013': TradeError,\n '1017': OrderNotFoundError,\n '1034': InvalidParamsError,\n '1036': InvalidParamsError,\n '1039': InvalidParamsError,\n '1041': InvalidParamsError,\n '1047': InsufficientBalanceError,\n '1048': InsufficientBalanceError,\n '1051': TradeError,\n '1066': InvalidParamsError,\n '1067': InvalidParamsError,\n '1094': InvalidParamsError,\n '1220': ExchangeInvalidPermissionsError,\n '1303': ExchangeTransferError,\n '1461': TradeError,\n '4007': ExchangeError,\n 'bad-request': ExchangeError,\n 'validation-format-error': InvalidParamsError,\n 'validation-constraints-required': InvalidParamsError,\n 'base-date-limit-error': InvalidParamsError,\n 'api-not-support-temp-addr': InvalidAddressError,\n 'timeout': ExchangeRequestExpiredError,\n 'gateway-internal-error': ExchangeNotAvailableError,\n 'account-frozen-balance-insufficient-error': InsufficientBalanceError,\n 'invalid-amount': InvalidParamsError,\n 'order-limitorder-amount-min-error': InvalidParamsError,\n 'order-limitorder-amount-max-error': InvalidParamsError,\n 'order-marketorder-amount-min-error': InvalidParamsError,\n 'order-limitorder-price-min-error': InvalidParamsError,\n 'order-limitorder-price-max-error': InvalidParamsError,\n 'order-stop-order-hit-trigger': TradeError,\n 'order-value-min-error': InvalidParamsError,\n 'order-invalid-price': InvalidParamsError,\n 'order-holding-limit-failed': TradeError,\n 'order-orderprice-precision-error': InvalidParamsError,\n 'order-etp-nav-price-max-error': InvalidParamsError,\n 'order-orderstate-error': OrderNotFoundError,\n 'order-queryorder-invalid': OrderNotFoundError,\n 'order-update-error': ExchangeNotAvailableError,\n 'api-signature-check-failed': AuthenticationError,\n 'api-signature-not-valid': InvalidCredentialsError,\n 'base-record-invalid': OrderNotFoundError,\n 'base-symbol-trade-disabled': TradeError,\n 'base-symbol-error': TradeError,\n 'system-maintenance': ExchangeUnderMaintenanceError,\n 'base-request-exceed-frequency-limit': ExchangeRateLimitExceededError,\n // err-msg\n 'invalid symbol': InvalidParamsError,\n 'symbol trade not open now': MarketNotFoundError,\n 'require-symbol': InvalidParamsError,\n 'invalid-address': InvalidAddressError,\n 'base-currency-chain-error': ExchangeError,\n 'dw-insufficient-balance': InsufficientBalanceError,\n 'base-withdraw-fee-error': WithdrawalError,\n 'dw-withdraw-min-limit': UnderWithdrawMinimumError,\n 'request limit': ExchangeRateLimitExceededError, // {\"ts\":1687004814731,\"status\":\"error\",\"err-code\":\"invalid-parameter\",\"err-msg\":\"request limit\"}\n },\n 'messages': {\n 'market order trading volume can not be less than': SdkErrorMessages.ORDER_UNDER_MINIMUM,\n 'Order total cannot be lower than': SdkErrorMessages.ORDER_UNDER_MINIMUM,\n },\n },\n 'precisionMode': TICK_SIZE,\n 'options': {\n 'timeDifference': 0,\n 'fetchMarkets': {\n 'types': {\n 'spot': true,\n 'future': {\n 'linear': true,\n 'inverse': true,\n },\n 'swap': {\n 'linear': true,\n 'inverse': true,\n },\n },\n },\n 'withdraw': {\n 'includeFee': false,\n },\n 'defaultType': 'spot',\n 'defaultSubType': 'linear',\n 'defaultNetwork': 'ERC20',\n 'defaultNetworks': {\n 'ETH': 'ERC20',\n 'BTC': 'BTC',\n 'USDT': 'TRC20',\n },\n 'networks': {\n // by displaynames\n 'TRC20': 'TRX',\n 'BTC': 'BTC',\n 'ERC20': 'ETH',\n 'SOL': 'SOLANA',\n 'HRC20': 'HECO',\n 'BEP20': 'BSC',\n 'XMR': 'XMR',\n 'LTC': 'LTC',\n 'XRP': 'XRP',\n 'XLM': 'XLM',\n 'CRONOS': 'CRO',\n 'CRO': 'CRO',\n 'GLMR': 'GLMR',\n 'POLYGON': 'MATIC',\n 'MATIC': 'MATIC',\n 'BTT': 'BTT',\n 'CUBE': 'CUBE',\n 'IOST': 'IOST',\n 'NEO': 'NEO',\n 'KLAY': 'KLAY',\n 'EOS': 'EOS',\n 'THETA': 'THETA',\n 'NAS': 'NAS',\n 'NULS': 'NULS',\n 'QTUM': 'QTUM',\n 'FTM': 'FTM',\n 'CELO': 'CELO',\n 'DOGE': 'DOGE',\n 'DOGECHAIN': 'DOGECHAIN',\n 'NEAR': 'NEAR',\n 'STEP': 'STEP',\n 'BITCI': 'BITCI',\n 'CARDANO': 'ADA',\n 'ADA': 'ADA',\n 'ETC': 'ETC',\n 'LUK': 'LUK',\n 'MINEPLEX': 'MINEPLEX',\n 'DASH': 'DASH',\n 'ZEC': 'ZEC',\n 'IOTA': 'IOTA',\n 'NEON3': 'NEON3',\n 'XEM': 'XEM',\n 'HC': 'HC',\n 'LSK': 'LSK',\n 'DCR': 'DCR',\n 'BTG': 'BTG',\n 'STEEM': 'STEEM',\n 'BTS': 'BTS',\n 'ICX': 'ICX',\n 'WAVES': 'WAVES',\n 'CMT': 'CMT',\n 'BTM': 'BTM',\n 'VET': 'VET',\n 'XZC': 'XZC',\n 'ACT': 'ACT',\n 'SMT': 'SMT',\n 'BCD': 'BCD',\n 'WAX': 'WAX1',\n 'WICC': 'WICC',\n 'ELF': 'ELF',\n 'ZIL': 'ZIL',\n 'ELA': 'ELA',\n 'BCX': 'BCX',\n 'SBTC': 'SBTC',\n 'BIFI': 'BIFI',\n 'CTXC': 'CTXC',\n 'WAN': 'WAN',\n 'POLYX': 'POLYX',\n 'PAI': 'PAI',\n 'WTC': 'WTC',\n 'DGB': 'DGB',\n 'XVG': 'XVG',\n 'AAC': 'AAC',\n 'AE': 'AE',\n 'SEELE': 'SEELE',\n 'BCV': 'BCV',\n 'GRS': 'GRS',\n 'ARDR': 'ARDR',\n 'NANO': 'NANO',\n 'ZEN': 'ZEN',\n 'RBTC': 'RBTC',\n 'BSV': 'BSV',\n 'GAS': 'GAS',\n 'XTZ': 'XTZ',\n 'LAMB': 'LAMB',\n 'CVNT1': 'CVNT1',\n 'DOCK': 'DOCK',\n 'SC': 'SC',\n 'KMD': 'KMD',\n 'ETN': 'ETN',\n 'TOP': 'TOP',\n 'IRIS': 'IRIS',\n 'UGAS': 'UGAS',\n 'TT': 'TT',\n 'NEWTON': 'NEWTON',\n 'VSYS': 'VSYS',\n 'FSN': 'FSN',\n 'BHD': 'BHD',\n 'ONE': 'ONE',\n 'EM': 'EM',\n 'CKB': 'CKB',\n 'EOSS': 'EOSS',\n 'HIVE': 'HIVE',\n 'RVN': 'RVN',\n 'DOT': 'DOT',\n 'KSM': 'KSM',\n 'BAND': 'BAND',\n 'OEP4': 'OEP4',\n 'NBS': 'NBS',\n 'FIS': 'FIS',\n 'AR': 'AR',\n 'HBAR': 'HBAR',\n 'FIL': 'FIL',\n 'MASS': 'MASS',\n 'KAVA': 'KAVA',\n 'XYM': 'XYM',\n 'ENJ': 'ENJ',\n 'CRUST': 'CRUST',\n 'ICP': 'ICP',\n 'CSPR': 'CSPR',\n 'FLOW': 'FLOW',\n 'IOTX': 'IOTX',\n 'LAT': 'LAT',\n 'APT': 'APT',\n 'XCH': 'XCH',\n 'MINA': 'MINA',\n 'XEC': 'ECASH',\n 'XPRT': 'XPRT',\n 'CCA': 'ACA',\n 'AOTI': 'COTI',\n 'AKT': 'AKT',\n 'ARS': 'ARS',\n 'ASTR': 'ASTR',\n 'AZERO': 'AZERO',\n 'BLD': 'BLD',\n 'BRISE': 'BRISE',\n 'CORE': 'CORE',\n 'DESO': 'DESO',\n 'DFI': 'DFI',\n 'EGLD': 'EGLD',\n 'ERG': 'ERG',\n 'ETHF': 'ETHFAIR',\n 'ETHW': 'ETHW',\n 'EVMOS': 'EVMOS',\n 'FIO': 'FIO',\n 'FLR': 'FLR',\n 'FINSCHIA': 'FINSCHIA',\n 'KMA': 'KMA',\n 'KYVE': 'KYVE',\n 'MEV': 'MEV',\n 'MOVR': 'MOVR',\n 'NODL': 'NODL',\n 'OAS': 'OAS',\n 'OSMO': 'OSMO',\n 'PAYCOIN': 'PAYCOIN',\n 'POKT': 'POKT',\n 'PYG': 'PYG',\n 'REI': 'REI',\n 'SCRT': 'SCRT',\n 'SDN': 'SDN',\n 'SEI': 'SEI',\n 'SGB': 'SGB',\n 'SUI': 'SUI',\n 'SXP': 'SOLAR',\n 'SYS': 'SYS',\n 'TENET': 'TENET',\n 'TON': 'TON',\n 'UNQ': 'UNQ',\n 'UYU': 'UYU',\n 'WEMIX': 'WEMIX',\n 'XDC': 'XDC',\n 'XPLA': 'XPLA',\n // todo: below\n // 'LUNC': 'LUNC',\n // 'TERRA': 'TERRA', // tbd\n // 'LUNA': 'LUNA', tbd\n // 'FCT2': 'FCT2',\n // FIL-0X ?\n // 'COSMOS': 'ATOM1',\n // 'ATOM': 'ATOM1',\n // 'CRO': 'CRO',\n // 'OP': [ 'OPTIMISM', 'OPTIMISMETH' ]\n // 'ARB': ['ARB', 'ARBITRUMETH']\n // 'CHZ': [ 'CHZ', 'CZH' ],\n // todo: AVAXCCHAIN CCHAIN AVAX\n // 'ALGO': ['ALGO', 'ALGOUSDT']\n // 'ONT': [ 'ONT', 'ONTOLOGY' ],\n // 'BCC': 'BCC', BCH's somewhat chain\n // 'DBC1': 'DBC1',\n },\n // https://github.com/ccxt/ccxt/issues/5376\n 'fetchOrdersByStatesMethod': 'spot_private_get_v1_order_orders',\n 'createMarketBuyOrderRequiresPrice': true,\n 'language': 'en-US',\n 'broker': {\n 'id': 'AA03022abc',\n },\n 'accountsByType': {\n 'spot': 'pro',\n 'funding': 'pro',\n 'future': 'futures',\n },\n 'accountsById': {\n 'spot': 'spot',\n 'margin': 'margin',\n 'otc': 'otc',\n 'point': 'point',\n 'super-margin': 'super-margin',\n 'investment': 'investment',\n 'borrow': 'borrow',\n 'grid-trading': 'grid-trading',\n 'deposit-earning': 'deposit-earning',\n 'otc-options': 'otc-options',\n },\n 'typesByAccount': {\n 'pro': 'spot',\n 'futures': 'future',\n },\n 'spot': {\n 'stopOrderTypes': {\n 'stop-limit': true,\n 'buy-stop-limit': true,\n 'sell-stop-limit': true,\n 'stop-limit-fok': true,\n 'buy-stop-limit-fok': true,\n 'sell-stop-limit-fok': true,\n },\n 'limitOrderTypes': {\n 'limit': true,\n 'buy-limit': true,\n 'sell-limit': true,\n 'ioc': true,\n 'buy-ioc': true,\n 'sell-ioc': true,\n 'limit-maker': true,\n 'buy-limit-maker': true,\n 'sell-limit-maker': true,\n 'stop-limit': true,\n 'buy-stop-limit': true,\n 'sell-stop-limit': true,\n 'limit-fok': true,\n 'buy-limit-fok': true,\n 'sell-limit-fok': true,\n 'stop-limit-fok': true,\n 'buy-stop-limit-fok': true,\n 'sell-stop-limit-fok': true,\n },\n },\n },\n });\n }\n isUsingForcedProxy(params = {}, api = []) {\n const authentication = Array.isArray(api) ? api[1] : api; // public, private\n if (authentication === 'private' || authentication === 'v2Private') {\n return true;\n }\n return false;\n }\n nonce() {\n return this.milliseconds() - this.options['timeDifference'];\n }\n async fetchStatus(params = {}) {\n await this.loadMarkets();\n let marketType = undefined;\n [marketType, params] = this.handleMarketTypeAndParams('fetchMyTrades', undefined, params);\n let response = undefined;\n if (marketType !== 'spot') {\n const subType = this.safeString(params, 'subType', this.options['defaultSubType']);\n if (marketType === 'swap') {\n if (subType === 'linear') {\n response = await this.statusPublicSwapLinearGetApiV2SummaryJson();\n }\n else if (subType === 'inverse') {\n response = await this.statusPublicSwapInverseGetApiV2SummaryJson();\n }\n }\n else if (marketType === 'future') {\n if (subType === 'linear') {\n response = await this.statusPublicFutureLinearGetApiV2SummaryJson();\n }\n else if (subType === 'inverse') {\n response = await this.statusPublicFutureInverseGetApiV2SummaryJson();\n }\n }\n else if (marketType === 'contract') {\n response = await this.contractPublicGetHeartbeat();\n }\n }\n else {\n response = await this.statusPublicSpotGetApiV2SummaryJson();\n }\n //\n // statusPublicSpotGetApiV2SummaryJson, statusPublicSwapInverseGetApiV2SummaryJson, statusPublicFutureLinearGetApiV2SummaryJson, statusPublicFutureInverseGetApiV2SummaryJson\n //\n // {\n // \"page\": {\n // \"id\":\"mn7l2lw8pz4p\",\n // \"name\":\"Huobi Futures-USDT-margined Swaps\",\n // \"url\":\"https://status-linear-swap.huobigroup.com\",\n // \"time_zone\":\"Asia/Singapore\",\n // \"updated_at\":\"2022-04-29T12:47:21.319+08:00\"},\n // \"components\": [\n // {\n // \"id\":\"lrv093qk3yp5\",\n // \"name\":\"market data\",\n // \"status\":\"operational\",\n // \"created_at\":\"2020-10-29T14:08:59.427+08:00\",\n // \"updated_at\":\"2020-10-29T14:08:59.427+08:00\",\n // \"position\":1,\"description\":null,\n // \"showcase\":false,\n // \"start_date\":null,\n // \"group_id\":null,\n // \"page_id\":\"mn7l2lw8pz4p\",\n // \"group\":true,\n // \"only_show_if_degraded\":false,\n // \"components\": [\n // \"82k5jxg7ltxd\" // list of related components\n // ]\n // },\n // ],\n // \"incidents\": [ // empty array if there are no issues\n // {\n // \"id\": \"rclfxz2g21ly\", // incident id\n // \"name\": \"Market data is delayed\", // incident name\n // \"status\": \"investigating\", // incident status\n // \"created_at\": \"2020-02-11T03:15:01.913Z\", // incident create time\n // \"updated_at\": \"2020-02-11T03:15:02.003Z\", // incident update time\n // \"monitoring_at\": null,\n // \"resolved_at\": null,\n // \"impact\": \"minor\", // incident impact\n // \"shortlink\": \"http://stspg.io/pkvbwp8jppf9\",\n // \"started_at\": \"2020-02-11T03:15:01.906Z\",\n // \"page_id\": \"p0qjfl24znv5\",\n // \"incident_updates\": [\n // {\n // \"id\": \"dwfsk5ttyvtb\",\n // \"status\": \"investigating\",\n // \"body\": \"Market data is delayed\",\n // \"incident_id\": \"rclfxz2g21ly\",\n // \"created_at\": \"2020-02-11T03:15:02.000Z\",\n // \"updated_at\": \"2020-02-11T03:15:02.000Z\",\n // \"display_at\": \"2020-02-11T03:15:02.000Z\",\n // \"affected_components\": [\n // {\n // \"code\": \"nctwm9tghxh6\",\n // \"name\": \"Market data\",\n // \"old_status\": \"operational\",\n // \"new_status\": \"degraded_performance\"\n // }\n // ],\n // \"deliver_notifications\": true,\n // \"custom_tweet\": null,\n // \"tweet_id\": null\n // }\n // ],\n // \"components\": [\n // {\n // \"id\": \"nctwm9tghxh6\",\n // \"name\": \"Market data\",\n // \"status\": \"degraded_performance\",\n // \"created_at\": \"2020-01-13T09:34:48.284Z\",\n // \"updated_at\": \"2020-02-11T03:15:01.951Z\",\n // \"position\": 8,\n // \"description\": null,\n // \"showcase\": false,\n // \"group_id\": null,\n // \"page_id\": \"p0qjfl24znv5\",\n // \"group\": false,\n // \"only_show_if_degraded\": false\n // }\n // ]\n // }, ...\n // ],\n // \"scheduled_maintenances\":[ // empty array if there are no scheduled maintenances\n // {\n // \"id\": \"k7g299zl765l\", // incident id\n // \"name\": \"Schedule maintenance\", // incident name\n // \"status\": \"scheduled\", // incident status\n // \"created_at\": \"2020-02-11T03:16:31.481Z\", // incident create time\n // \"updated_at\": \"2020-02-11T03:16:31.530Z\", // incident update time\n // \"monitoring_at\": null,\n // \"resolved_at\": null,\n // \"impact\": \"maintenance\", // incident impact\n // \"shortlink\": \"http://stspg.io/md4t4ym7nytd\",\n // \"started_at\": \"2020-02-11T03:16:31.474Z\",\n // \"page_id\": \"p0qjfl24znv5\",\n // \"incident_updates\": [\n // {\n // \"id\": \"8whgr3rlbld8\",\n // \"status\": \"scheduled\",\n // \"body\": \"We will be undergoing scheduled maintenance during this time.\",\n // \"incident_id\": \"k7g299zl765l\",\n // \"created_at\": \"2020-02-11T03:16:31.527Z\",\n // \"updated_at\": \"2020-02-11T03:16:31.527Z\",\n // \"display_at\": \"2020-02-11T03:16:31.527Z\",\n // \"affected_components\": [\n // {\n // \"code\": \"h028tnzw1n5l\",\n // \"name\": \"Deposit And Withdraw - Deposit\",\n // \"old_status\": \"operational\",\n // \"new_status\": \"operational\"\n // }\n // ],\n // \"deliver_notifications\": true,\n // \"custom_tweet\": null,\n // \"tweet_id\": null\n // }\n // ],\n // \"components\": [\n // {\n // \"id\": \"h028tnzw1n5l\",\n // \"name\": \"Deposit\",\n // \"status\": \"operational\",\n // \"created_at\": \"2019-12-05T02:07:12.372Z\",\n // \"updated_at\": \"2020-02-10T12:34:52.970Z\",\n // \"position\": 1,\n // \"description\": null,\n // \"showcase\": false,\n // \"group_id\": \"gtd0nyr3pf0k\",\n // \"page_id\": \"p0qjfl24znv5\",\n // \"group\": false,\n // \"only_show_if_degraded\": false\n // }\n // ],\n // \"scheduled_for\": \"2020-02-15T00:00:00.000Z\", // scheduled maintenance start time\n // \"scheduled_until\": \"2020-02-15T01:00:00.000Z\" // scheduled maintenance end time\n // }\n // ],\n // \"status\": {\n // \"indicator\":\"none\", // none, minor, major, critical, maintenance\n // \"description\":\"all systems operational\" // All Systems Operational, Minor Service Outage, Partial System Outage, Partially Degraded Service, Service Under Maintenance\n // }\n // }\n //\n //\n // contractPublicGetHeartbeat\n //\n // {\n // \"status\": \"ok\", // 'ok', 'error'\n // \"data\": {\n // \"heartbeat\": 1, // future 1: available, 0: maintenance with service suspended\n // \"estimated_recovery_time\": null, // estimated recovery time in milliseconds\n // \"swap_heartbeat\": 1,\n // \"swap_estimated_recovery_time\": null,\n // \"option_heartbeat\": 1,\n // \"option_estimated_recovery_time\": null,\n // \"linear_swap_heartbeat\": 1,\n // \"linear_swap_estimated_recovery_time\": null\n // },\n // \"ts\": 1557714418033\n // }\n //\n let status = undefined;\n let updated = undefined;\n let url = undefined;\n if (marketType === 'contract') {\n const statusRaw = this.safeString(response, 'status');\n status = (statusRaw === 'ok') ? 'ok' : 'maintenance'; // 'ok', 'error'\n updated = this.safeString(response, 'ts');\n }\n else {\n const statusData = this.safeValue(response, 'status', {});\n const statusRaw = this.safeString(statusData, 'indicator');\n status = (statusRaw === 'none') ? 'ok' : 'maintenance'; // none, minor, major, critical, maintenance\n const pageData = this.safeValue(response, 'page', {});\n const datetime = this.safeString(pageData, 'updated_at');\n updated = this.parse8601(datetime);\n url = this.safeString(pageData, 'url');\n }\n return {\n 'status': status,\n 'updated': updated,\n 'eta': undefined,\n 'url': url,\n 'info': response,\n };\n }\n async fetchTime(params = {}) {\n /**\n * @method\n * @name huobi#fetchTime\n * @description fetches the current integer timestamp in milliseconds from the exchange server\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {int} the current integer timestamp in milliseconds from the exchange server\n */\n const options = this.safeValue(this.options, 'fetchTime', {});\n const defaultType = this.safeString(this.options, 'defaultType', 'spot');\n let type = this.safeString(options, 'type', defaultType);\n type = this.safeString(params, 'type', type);\n let response = undefined;\n if ((type === 'future') || (type === 'swap')) {\n response = await this.contractPublicGetApiV1Timestamp(params);\n }\n else {\n response = await this.spotPublicGetV1CommonTimestamp(params);\n }\n //\n // spot\n //\n // {\"status\":\"ok\",\"data\":1637504261099}\n //\n // future, swap\n //\n // {\"status\":\"ok\",\"ts\":1637504164707}\n //\n return this.safeInteger2(response, 'data', 'ts');\n }\n parseTradingFee(fee, market = undefined) {\n //\n // {\n // \"symbol\":\"btcusdt\",\n // \"actualMakerRate\":\"0.002\",\n // \"actualTakerRate\":\"0.002\",\n // \"takerFeeRate\":\"0.002\",\n // \"makerFeeRate\":\"0.002\"\n // }\n //\n const marketId = this.safeString(fee, 'symbol');\n return {\n 'info': fee,\n 'symbol': this.safeSymbol(marketId, market),\n 'maker': this.safeNumber(fee, 'actualMakerRate'),\n 'taker': this.safeNumber(fee, 'actualTakerRate'),\n };\n }\n async fetchTradingFee(symbol, params = {}) {\n /**\n * @method\n * @name huobi#fetchTradingFee\n * @description fetch the trading fees for a market\n * @param {string} symbol unified market symbol\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} a [fee structure]{@link https://docs.ccxt.com/#/?id=fee-structure}\n */\n await this.loadMarkets();\n const market = this.market(symbol);\n const request = {\n 'symbols': market['id'], // trading symbols comma-separated\n };\n const response = await this.spotPrivateGetV2ReferenceTransactFeeRate(this.extend(request, params));\n //\n // {\n // \"code\":200,\n // \"data\":[\n // {\n // \"symbol\":\"btcusdt\",\n // \"actualMakerRate\":\"0.002\",\n // \"actualTakerRate\":\"0.002\",\n // \"takerFeeRate\":\"0.002\",\n // \"makerFeeRate\":\"0.002\"\n // }\n // ],\n // \"success\":true\n // }\n //\n const data = this.safeValue(response, 'data', []);\n const first = this.safeValue(data, 0, {});\n return this.parseTradingFee(first, market);\n }\n async fetchTradingLimits(symbols = undefined, params = {}) {\n // this method should not be called directly, use loadTradingLimits () instead\n // by default it will try load withdrawal fees of all currencies (with separate requests)\n // however if you define symbols = [ 'ETH/BTC', 'LTC/BTC' ] in args it will only load those\n await this.loadMarkets();\n if (symbols === undefined) {\n symbols = this.symbols;\n }\n const result = {};\n for (let i = 0; i < symbols.length; i++) {\n const symbol = symbols[i];\n result[symbol] = await this.fetchTradingLimitsById(this.marketId(symbol), params);\n }\n return result;\n }\n async fetchTradingLimitsById(id, params = {}) {\n const request = {\n 'symbol': id,\n };\n const response = await this.spotPublicGetV1CommonExchange(this.extend(request, params));\n //\n // { status: \"ok\",\n // \"data\": { symbol: \"aidocbtc\",\n // \"buy-limit-must-less-than\": 1.1,\n // \"sell-limit-must-greater-than\": 0.9,\n // \"limit-order-must-greater-than\": 1,\n // \"limit-order-must-less-than\": 5000000,\n // \"market-buy-order-must-greater-than\": 0.0001,\n // \"market-buy-order-must-less-than\": 100,\n // \"market-sell-order-must-greater-than\": 1,\n // \"market-sell-order-must-less-than\": 500000,\n // \"circuit-break-when-greater-than\": 10000,\n // \"circuit-break-when-less-than\": 10,\n // \"market-sell-order-rate-must-less-than\": 0.1,\n // \"market-buy-order-rate-must-less-than\": 0.1 } }\n //\n return this.parseTradingLimits(this.safeValue(response, 'data', {}));\n }\n parseTradingLimits(limits, symbol = undefined, params = {}) {\n //\n // { \"symbol\": \"aidocbtc\",\n // \"buy-limit-must-less-than\": 1.1,\n // \"sell-limit-must-greater-than\": 0.9,\n // \"limit-order-must-greater-than\": 1,\n // \"limit-order-must-less-than\": 5000000,\n // \"market-buy-order-must-greater-than\": 0.0001,\n // \"market-buy-order-must-less-than\": 100,\n // \"market-sell-order-must-greater-than\": 1,\n // \"market-sell-order-must-less-than\": 500000,\n // \"circuit-break-when-greater-than\": 10000,\n // \"circuit-break-when-less-than\": 10,\n // \"market-sell-order-rate-must-less-than\": 0.1,\n // \"market-buy-order-rate-must-less-than\": 0.1 }\n //\n return {\n 'info': limits,\n 'limits': {\n 'amount': {\n 'min': this.safeNumber(limits, 'limit-order-must-greater-than'),\n 'max': this.safeNumber(limits, 'limit-order-must-less-than'),\n },\n },\n };\n }\n costToPrecision(symbol, cost) {\n return this.decimalToPrecision(cost, TRUNCATE, this.markets[symbol]['precision']['cost'], this.precisionMode);\n }\n async fetchMarkets(params = {}) {\n /**\n * @method\n * @name huobi#fetchMarkets\n * @description retrieves data on all markets for huobi\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object[]} an array of objects representing market data\n */\n const options = this.safeValue(this.options, 'fetchMarkets', {});\n const types = this.safeValue(options, 'types', {});\n let allMarkets = [];\n let promises = [];\n const keys = Object.keys(types);\n for (let i = 0; i < keys.length; i++) {\n const type = keys[i];\n const value = this.safeValue(types, type);\n if (value === true) {\n promises.push(this.fetchMarketsByTypeAndSubType(type, undefined, params));\n }\n else if (value) {\n const subKeys = Object.keys(value);\n for (let j = 0; j < subKeys.length; j++) {\n const subType = subKeys[j];\n const subValue = this.safeValue(value, subType);\n if (subValue) {\n promises.push(this.fetchMarketsByTypeAndSubType(type, subType, params));\n }\n }\n }\n }\n promises = await Promise.all(promises);\n for (let i = 0; i < promises.length; i++) {\n allMarkets = this.arrayConcat(allMarkets, promises[i]);\n }\n return allMarkets;\n }\n async fetchMarketsByTypeAndSubType(type, subType, params = {}) {\n const query = this.omit(params, ['type', 'subType']);\n const spot = (type === 'spot');\n const contract = (type !== 'spot');\n const future = (type === 'future');\n const swap = (type === 'swap');\n let linear = undefined;\n let inverse = undefined;\n const request = {};\n let response = undefined;\n if (contract) {\n linear = (subType === 'linear');\n inverse = (subType === 'inverse');\n if (linear) {\n if (future) {\n request['business_type'] = 'futures';\n }\n response = await this.contractPublicGetLinearSwapApiV1SwapContractInfo(this.extend(request, query));\n }\n else if (inverse) {\n if (future) {\n response = await this.contractPublicGetApiV1ContractContractInfo(this.extend(request, query));\n }\n else if (swap) {\n response = await this.contractPublicGetSwapApiV1SwapContractInfo(this.extend(request, query));\n }\n }\n }\n else {\n response = await this.spotPublicGetV1CommonSymbols(this.extend(request, query));\n }\n //\n // spot\n //\n // {\n // \"status\":\"ok\",\n // \"data\":[\n // {\n // \"base-currency\":\"xrp3s\",\n // \"quote-currency\":\"usdt\",\n // \"price-precision\":4,\n // \"amount-precision\":4,\n // \"symbol-partition\":\"innovation\",\n // \"symbol\":\"xrp3susdt\",\n // \"state\":\"online\",\n // \"value-precision\":8,\n // \"min-order-amt\":0.01,\n // \"max-order-amt\":1616.4353,\n // \"min-order-value\":5,\n // \"limit-order-min-order-amt\":0.01,\n // \"limit-order-max-order-amt\":1616.4353,\n // \"limit-order-max-buy-amt\":1616.4353,\n // \"limit-order-max-sell-amt\":1616.4353,\n // \"sell-market-min-order-amt\":0.01,\n // \"sell-market-max-order-amt\":1616.4353,\n // \"buy-market-max-order-value\":2500,\n // \"max-order-value\":2500,\n // \"underlying\":\"xrpusdt\",\n // \"mgmt-fee-rate\":0.035000000000000000,\n // \"charge-time\":\"23:55:00\",\n // \"rebal-time\":\"00:00:00\",\n // \"rebal-threshold\":-5,\n // \"init-nav\":10.000000000000000000,\n // \"api-trading\":\"enabled\",\n // \"tags\":\"etp,nav,holdinglimit\"\n // },\n // ]\n // }\n //\n // inverse future\n //\n // {\n // \"status\":\"ok\",\n // \"data\":[\n // {\n // \"symbol\":\"BTC\",\n // \"contract_code\":\"BTC211126\",\n // \"contract_type\":\"this_week\",\n // \"contract_size\":100.000000000000000000,\n // \"price_tick\":0.010000000000000000,\n // \"delivery_date\":\"20211126\",\n // \"delivery_time\":\"1637913600000\",\n // \"create_date\":\"20211112\",\n // \"contract_status\":1,\n // \"settlement_time\":\"1637481600000\"\n // },\n // ],\n // \"ts\":1637474595140\n // }\n //\n // linear futures\n //\n // {\n // \"status\":\"ok\",\n // \"data\":[\n // {\n // \"symbol\":\"BTC\",\n // \"contract_code\":\"BTC-USDT-211231\",\n // \"contract_size\":0.001000000000000000,\n // \"price_tick\":0.100000000000000000,\n // \"delivery_date\":\"20211231\",\n // \"delivery_time\":\"1640937600000\",\n // \"create_date\":\"20211228\",\n // \"contract_status\":1,\n // \"settlement_date\":\"1640764800000\",\n // \"support_margin_mode\":\"cross\",\n // \"business_type\":\"futures\",\n // \"pair\":\"BTC-USDT\",\n // \"contract_type\":\"this_week\" // next_week, quarter\n // },\n // ],\n // \"ts\":1640736207263\n // }\n //\n // swaps\n //\n // {\n // \"status\":\"ok\",\n // \"data\":[\n // {\n // \"symbol\":\"BTC\",\n // \"contract_code\":\"BTC-USDT\",\n // \"contract_size\":0.001000000000000000,\n // \"price_tick\":0.100000000000000000,\n // \"delivery_time\":\"\",\n // \"create_date\":\"20201021\",\n // \"contract_status\":1,\n // \"settlement_date\":\"1637481600000\",\n // \"support_margin_mode\":\"all\", // isolated\n // },\n // ],\n // \"ts\":1637474774467\n // }\n //\n const markets = this.safeValue(response, 'data', []);\n const numMarkets = markets.length;\n if (numMarkets < 1) {\n throw new MarketError()\n .addMessage('fetchMarkets() returned an empty response: ' + this.json(markets))\n .exchange(this.id);\n }\n const result = [];\n for (let i = 0; i < markets.length; i++) {\n const market = markets[i];\n let baseId = undefined;\n let quoteId = undefined;\n let settleId = undefined;\n let id = undefined;\n let lowercaseId = undefined;\n if (contract) {\n id = this.safeString(market, 'contract_code');\n lowercaseId = id.toLowerCase();\n if (swap) {\n const parts = id.split('-');\n baseId = this.safeStringLower(market, 'symbol');\n quoteId = this.safeStringLower(parts, 1);\n settleId = inverse ? baseId : quoteId;\n }\n else if (future) {\n baseId = this.safeStringLower(market, 'symbol');\n if (inverse) {\n quoteId = 'USD';\n settleId = baseId;\n }\n else {\n const pair = this.safeString(market, 'pair');\n const parts = pair.split('-');\n quoteId = this.safeStringLower(parts, 1);\n settleId = quoteId;\n }\n }\n }\n else {\n baseId = this.safeString(market, 'base-currency');\n quoteId = this.safeString(market, 'quote-currency');\n id = baseId + quoteId;\n lowercaseId = id.toLowerCase();\n }\n const base = this.safeCurrencyCode(baseId);\n const quote = this.safeCurrencyCode(quoteId);\n const settle = this.safeCurrencyCode(settleId);\n let symbol = base + '/' + quote;\n let expiry = undefined;\n if (contract) {\n if (inverse) {\n symbol += ':' + base;\n }\n else if (linear) {\n symbol += ':' + quote;\n }\n if (future) {\n expiry = this.safeInteger(market, 'delivery_time');\n symbol += '-' + this.yymmdd(expiry);\n }\n }\n const contractSize = this.safeNumber(market, 'contract_size');\n let minCost = this.safeNumber(market, 'min-order-value');\n const maxAmount = this.safeNumber(market, 'max-order-amt');\n let minAmount = this.safeNumber(market, 'min-order-amt');\n if (contract) {\n if (linear) {\n minAmount = contractSize;\n }\n else if (inverse) {\n minCost = contractSize;\n }\n }\n let pricePrecision = undefined;\n let amountPrecision = undefined;\n let costPrecision = undefined;\n let maker = undefined;\n let taker = undefined;\n let active = undefined;\n if (spot) {\n pricePrecision = this.parseNumber(this.parsePrecision(this.safeString(market, 'price-precision')));\n amountPrecision = this.parseNumber(this.parsePrecision(this.safeString(market, 'amount-precision')));\n costPrecision = this.parseNumber(this.parsePrecision(this.safeString(market, 'value-precision')));\n maker = this.parseNumber('0.002');\n taker = this.parseNumber('0.002');\n const state = this.safeString(market, 'state');\n active = (state === 'online');\n }\n else {\n pricePrecision = this.safeNumber(market, 'price_tick');\n amountPrecision = this.parseNumber('1'); // other markets have step size of 1 contract\n maker = this.parseNumber('0.0002');\n taker = this.parseNumber('0.0005');\n const contractStatus = this.safeInteger(market, 'contract_status');\n active = (contractStatus === 1);\n }\n const leverageRatio = this.safeString(market, 'leverage-ratio', '1');\n const superLeverageRatio = this.safeString(market, 'super-margin-leverage-ratio', '1');\n const hasLeverage = Precise.stringGt(leverageRatio, '1') || Precise.stringGt(superLeverageRatio, '1');\n // 0 Delisting\n // 1 Listing\n // 2 Pending Listing\n // 3 Suspension\n // 4 Suspending of Listing\n // 5 In Settlement\n // 6 Delivering\n // 7 Settlement Completed\n // 8 Delivered\n // 9 Suspending of Trade\n let created = undefined;\n let createdDate = this.safeString(market, 'create_date'); // i.e 20230101\n if (createdDate !== undefined) {\n const createdArray = this.stringToCharsArray(createdDate);\n createdDate = createdArray[0] + createdArray[1] + createdArray[2] + createdArray[3] + '-' + createdArray[4] + createdArray[5] + '-' + createdArray[6] + createdArray[7] + ' 00:00:00';\n created = this.parse8601(createdDate);\n }\n result.push({\n 'id': id,\n 'lowercaseId': lowercaseId,\n 'symbol': symbol,\n 'base': base,\n 'quote': quote,\n 'settle': settle,\n 'baseId': baseId,\n 'quoteId': quoteId,\n 'settleId': settleId,\n 'type': type,\n 'spot': spot,\n 'margin': (spot && hasLeverage),\n 'swap': swap,\n 'future': future,\n 'option': false,\n 'active': active,\n 'contract': contract,\n 'linear': linear,\n 'inverse': inverse,\n 'taker': taker,\n 'maker': maker,\n 'contractSize': contractSize,\n 'expiry': expiry,\n 'expiryDatetime': this.iso8601(expiry),\n 'strike': undefined,\n 'optionType': undefined,\n 'precision': {\n 'amount': amountPrecision,\n 'price': pricePrecision,\n 'cost': costPrecision,\n },\n 'limits': {\n 'leverage': {\n 'min': this.parseNumber('1'),\n 'max': this.parseNumber(leverageRatio),\n 'superMax': this.parseNumber(superLeverageRatio),\n },\n 'amount': {\n 'min': minAmount,\n 'max': maxAmount,\n },\n 'price': {\n 'min': undefined,\n 'max': undefined,\n },\n 'cost': {\n 'min': minCost,\n 'max': undefined,\n },\n },\n 'created': created,\n 'info': market,\n });\n }\n return result;\n }\n parseTicker(ticker, market = undefined) {\n //\n // fetchTicker\n //\n // {\n // \"amount\": 26228.672978342216,\n // \"open\": 9078.95,\n // \"close\": 9146.86,\n // \"high\": 9155.41,\n // \"id\": 209988544334,\n // \"count\": 265846,\n // \"low\": 8988.0,\n // \"version\": 209988544334,\n // \"ask\": [ 9146.87, 0.156134 ],\n // \"vol\": 2.3822168242201668E8,\n // \"bid\": [ 9146.86, 0.080758 ],\n // }\n //\n // fetchTickers\n //\n // {\n // \"symbol\": \"bhdht\",\n // \"open\": 2.3938,\n // \"high\": 2.4151,\n // \"low\": 2.3323,\n // \"close\": 2.3909,\n // \"amount\": 628.992,\n // \"vol\": 1493.71841095,\n // \"count\": 2088,\n // \"bid\": 2.3643,\n // \"bidSize\": 0.7136,\n // \"ask\": 2.4061,\n // \"askSize\": 0.4156\n // }\n //\n // watchTikcer - bbo\n // {\n // \"seqId\": 161499562790,\n // \"ask\": 16829.51,\n // \"askSize\": 0.707776,\n // \"bid\": 16829.5,\n // \"bidSize\": 1.685945,\n // \"quoteTime\": 1671941599612,\n // \"symbol\": \"btcusdt\"\n // }\n //\n const marketId = this.safeString2(ticker, 'symbol', 'contract_code');\n const symbol = this.safeSymbol(marketId, market);\n const timestamp = this.safeInteger2(ticker, 'ts', 'quoteTime');\n let bid = undefined;\n let bidVolume = undefined;\n let ask = undefined;\n let askVolume = undefined;\n if ('bid' in ticker) {\n if (Array.isArray(ticker['bid'])) {\n bid = this.safeString(ticker['bid'], 0);\n bidVolume = this.safeString(ticker['bid'], 1);\n }\n else {\n bid = this.safeString(ticker, 'bid');\n bidVolume = this.safeString(ticker, 'bidSize');\n }\n }\n if ('ask' in ticker) {\n if (Array.isArray(ticker['ask'])) {\n ask = this.safeString(ticker['ask'], 0);\n askVolume = this.safeString(ticker['ask'], 1);\n }\n else {\n ask = this.safeString(ticker, 'ask');\n askVolume = this.safeString(ticker, 'askSize');\n }\n }\n const open = this.safeString(ticker, 'open');\n const close = this.safeString(ticker, 'close');\n const baseVolume = this.safeString(ticker, 'amount');\n const quoteVolume = this.safeString(ticker, 'vol');\n return this.safeTicker({\n 'symbol': symbol,\n 'timestamp': timestamp,\n 'datetime': this.iso8601(timestamp),\n 'high': this.safeString(ticker, 'high'),\n 'low': this.safeString(ticker, 'low'),\n 'bid': bid,\n 'bidVolume': bidVolume,\n 'ask': ask,\n 'askVolume': askVolume,\n 'vwap': undefined,\n 'open': open,\n 'close': close,\n 'last': close,\n 'previousClose': undefined,\n 'change': undefined,\n 'percentage': undefined,\n 'average': undefined,\n 'baseVolume': baseVolume,\n 'quoteVolume': quoteVolume,\n 'info': ticker,\n }, market);\n }\n async fetchTicker(symbol, params = {}) {\n /**\n * @method\n * @name huobi#fetchTicker\n * @description fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market\n * @param {string} symbol unified symbol of the market to fetch the ticker for\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} a [ticker structure]{@link https://docs.ccxt.com/#/?id=ticker-structure}\n */\n await this.loadMarkets();\n const market = this.market(symbol);\n const request = {};\n let response = undefined;\n if (market['linear']) {\n request['contract_code'] = market['id'];\n response = await this.contractPublicGetLinearSwapExMarketDetailMerged(this.extend(request, params));\n }\n else if (market['inverse']) {\n if (market['future']) {\n request['symbol'] = market['id'];\n response = await this.contractPublicGetMarketDetailMerged(this.extend(request, params));\n }\n else if (market['swap']) {\n request['contract_code'] = market['id'];\n response = await this.contractPublicGetSwapExMarketDetailMerged(this.extend(request, params));\n }\n }\n else {\n request['symbol'] = market['id'];\n response = await this.spotPublicGetMarketDetailMerged(this.extend(request, params));\n }\n //\n // spot\n //\n // {\n // \"status\": \"ok\",\n // \"ch\": \"market.btcusdt.detail.merged\",\n // \"ts\": 1583494336669,\n // \"tick\": {\n // \"amount\": 26228.672978342216,\n // \"open\": 9078.95,\n // \"close\": 9146.86,\n // \"high\": 9155.41,\n // \"id\": 209988544334,\n // \"count\": 265846,\n // \"low\": 8988.0,\n // \"version\": 209988544334,\n // \"ask\": [ 9146.87, 0.156134 ],\n // \"vol\": 2.3822168242201668E8,\n // \"bid\": [ 9146.86, 0.080758 ],\n // }\n // }\n //\n // future, swap\n //\n // {\n // \"ch\":\"market.BTC211126.detail.merged\",\n // \"status\":\"ok\",\n // \"tick\":{\n // \"amount\":\"669.3385682049668320322569544150680718474\",\n // \"ask\":[59117.44,48],\n // \"bid\":[59082,48],\n // \"close\":\"59087.97\",\n // \"count\":5947,\n // \"high\":\"59892.62\",\n // \"id\":1637502670,\n // \"low\":\"57402.87\",\n // \"open\":\"57638\",\n // \"ts\":1637502670059,\n // \"vol\":\"394598\"\n // },\n // \"ts\":1637502670059\n // }\n //\n const tick = this.safeValue(response, 'tick', {});\n const ticker = this.parseTicker(tick, market);\n const timestamp = this.safeInteger(response, 'ts');\n ticker['timestamp'] = timestamp;\n ticker['datetime'] = this.iso8601(timestamp);\n return ticker;\n }\n async fetchTickers(symbols = undefined, params = {}) {\n /**\n * @method\n * @name huobi#fetchTickers\n * @description fetches price tickers for multiple markets, statistical information calculated over the past 24 hours for each market\n * @see https://huobiapi.github.io/docs/spot/v1/en/#get-latest-tickers-for-all-pairs\n * @see https://huobiapi.github.io/docs/usdt_swap/v1/en/#general-get-a-batch-of-market-data-overview\n * @see https://huobiapi.github.io/docs/dm/v1/en/#get-a-batch-of-market-data-overview\n * @see https://huobiapi.github.io/docs/coin_margined_swap/v1/en/#get-a-batch-of-market-data-overview-v2\n * @param {string[]|undefined} symbols unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} a dictionary of [ticker structures]{@link https://docs.ccxt.com/#/?id=ticker-structure}\n */\n await this.loadMarkets();\n symbols = this.marketSymbols(symbols);\n const first = this.safeString(symbols, 0);\n let market = undefined;\n if (first !== undefined) {\n market = this.market(first);\n }\n let type = undefined;\n let subType = undefined;\n [type, params] = this.handleMarketTypeAndParams('fetchTickers', market, params);\n [subType, params] = this.handleSubTypeAndParams('fetchTickers', market, params);\n const request = {};\n const future = (type === 'future');\n const swap = (type === 'swap');\n const linear = (subType === 'linear');\n const inverse = (subType === 'inverse');\n params = this.omit(params, ['type', 'subType']);\n let response = undefined;\n if (future || swap) {\n if (linear) {\n if (future) {\n request['business_type'] = 'futures';\n }\n response = await this.contractPublicGetLinearSwapExMarketDetailBatchMerged(this.extend(request, params));\n }\n else if (inverse) {\n if (future) {\n response = await this.contractPublicGetMarketDetailBatchMerged(this.extend(request, params));\n }\n else if (swap) {\n response = await this.contractPublicGetSwapExMarketDetailBatchMerged(this.extend(request, params));\n }\n }\n }\n else {\n response = await this.spotPublicGetMarketTickers(this.extend(request, params));\n }\n //\n // spot\n //\n // {\n // \"data\":[\n // {\n // \"symbol\":\"hbcbtc\",\n // \"open\":5.313E-5,\n // \"high\":5.34E-5,\n // \"low\":5.112E-5,\n // \"close\":5.175E-5,\n // \"amount\":1183.87,\n // \"vol\":0.0618599229,\n // \"count\":205,\n // \"bid\":5.126E-5,\n // \"bidSize\":5.25,\n // \"ask\":5.214E-5,\n // \"askSize\":150.0\n // },\n // ],\n // \"status\":\"ok\",\n // \"ts\":1639547261293\n // }\n //\n // inverse swaps, linear swaps, inverse futures\n //\n // {\n // \"status\":\"ok\",\n // \"ticks\":[\n // {\n // \"id\":1637504679,\n // \"ts\":1637504679372,\n // \"ask\":[0.10644,100],\n // \"bid\":[0.10624,26],\n // \"symbol\":\"TRX_CW\",\n // \"open\":\"0.10233\",\n // \"close\":\"0.10644\",\n // \"low\":\"0.1017\",\n // \"high\":\"0.10725\",\n // \"amount\":\"2340267.415144052378486261756692535687481566\",\n // \"count\":882,\n // \"vol\":\"24706\"\n // }\n // ],\n // \"ts\":1637504679376\n // }\n //\n // linear futures\n //\n // {\n // \"status\":\"ok\",\n // \"ticks\":[\n // {\n // \"id\":1640745627,\n // \"ts\":1640745627957,\n // \"ask\":[48079.1,20],\n // \"bid\":[47713.8,125],\n // \"business_type\":\"futures\",\n // \"contract_code\":\"BTC-USDT-CW\",\n // \"open\":\"49011.8\",\n // \"close\":\"47934\",\n // \"low\":\"47292.3\",\n // \"high\":\"49011.8\",\n // \"amount\":\"17.398\",\n // \"count\":1515,\n // \"vol\":\"17398\",\n // \"trade_turnover\":\"840726.5048\"\n // }\n // ],\n // \"ts\":1640745627988\n // }\n //\n const tickers = this.safeValue2(response, 'data', 'ticks', []);\n const timestamp = this.safeInteger(response, 'ts');\n const result = {};\n for (let i = 0; i < tickers.length; i++) {\n const ticker = this.parseTicker(tickers[i]);\n // the market ids for linear futures are non-standard and differ from all the other endpoints\n // we are doing a linear-matching here\n if (future && linear) {\n for (let j = 0; j < this.symbols.length; j++) {\n const symbolInner = this.symbols[j];\n const marketInner = this.market(symbolInner);\n const contractType = this.safeString(marketInner['info'], 'contract_type');\n if ((contractType === 'this_week') && (ticker['symbol'] === (marketInner['baseId'] + '-' + marketInner['quoteId'] + '-CW'))) {\n ticker['symbol'] = marketInner['symbol'];\n break;\n }\n else if ((contractType === 'next_week') && (ticker['symbol'] === (marketInner['baseId'] + '-' + marketInner['quoteId'] + '-NW'))) {\n ticker['symbol'] = marketInner['symbol'];\n break;\n }\n else if ((contractType === 'this_quarter') && (ticker['symbol'] === (marketInner['baseId'] + '-' + marketInner['quoteId'] + '-CQ'))) {\n ticker['symbol'] = marketInner['symbol'];\n break;\n }\n else if ((contractType === 'next_quarter') && (ticker['symbol'] === (marketInner['baseId'] + '-' + marketInner['quoteId'] + '-NQ'))) {\n ticker['symbol'] = marketInner['symbol'];\n break;\n }\n }\n }\n const symbol = ticker['symbol'];\n ticker['timestamp'] = timestamp;\n ticker['datetime'] = this.iso8601(timestamp);\n result[symbol] = ticker;\n }\n return this.filterByArrayTickers(result, 'symbol', symbols);\n }\n async fetchOrderBook(symbol, limit = undefined, params = {}) {\n /**\n * @method\n * @name huobi#fetchOrderBook\n * @description fetches information on open orders with bid (buy) and ask (sell) prices, volumes and other data\n * @param {string} symbol unified symbol of the market to fetch the order book for\n * @param {int} [limit] the maximum amount of order book entries to return\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} A dictionary of [order book structures]{@link https://docs.ccxt.com/#/?id=order-book-structure} indexed by market symbols\n */\n await this.loadMarkets();\n const market = this.market(symbol);\n const request = {\n //\n // from the API docs\n //\n // to get depth data within step 150, use step0, step1, step2, step3, step4, step5, step14, step15(merged depth data 0-5,14-15, when step is 0,depth data will not be merged\n // to get depth data within step 20, use step6, step7, step8, step9, step10, step11, step12, step13(merged depth data 7-13), when step is 6, depth data will not be merged\n //\n 'type': 'step0',\n // 'symbol': market['id'], // spot, future\n // 'contract_code': market['id'], // swap\n };\n let response = undefined;\n if (market['linear']) {\n request['contract_code'] = market['id'];\n response = await this.contractPublicGetLinearSwapExMarketDepth(this.extend(request, params));\n }\n else if (market['inverse']) {\n if (market['future']) {\n request['symbol'] = market['id'];\n response = await this.contractPublicGetMarketDepth(this.extend(request, params));\n }\n else if (market['swap']) {\n request['contract_code'] = market['id'];\n response = await this.contractPublicGetSwapExMarketDepth(this.extend(request, params));\n }\n }\n else {\n if (limit !== undefined) {\n // Valid depths are 5, 10, 20 or empty https://huobiapi.github.io/docs/spot/v1/en/#get-market-depth\n if ((limit !== 5) && (limit !== 10) && (limit !== 20) && (limit !== 150)) {\n throw new InvalidParamsError('fetchOrderBook() limit argument must be undefined, 5, 10, 20, or 150, default is 150')\n .exchange(this.id);\n }\n // only set the depth if it is not 150\n // 150 is the implicit default on the exchange side for step0 and no orderbook aggregation\n // it is not accepted by the exchange if you set it explicitly\n if (limit !== 150) {\n request['depth'] = limit;\n }\n }\n request['symbol'] = market['id'];\n response = await this.spotPublicGetMarketDepth(this.extend(request, params));\n }\n //\n // spot, future, swap\n //\n // {\n // \"status\": \"ok\",\n // \"ch\": \"market.btcusdt.depth.step0\",\n // \"ts\": 1583474832790,\n // \"tick\": {\n // \"bids\": [\n // [ 9100.290000000000000000, 0.200000000000000000 ],\n // [ 9099.820000000000000000, 0.200000000000000000 ],\n // [ 9099.610000000000000000, 0.205000000000000000 ],\n // ],\n // \"asks\": [\n // [ 9100.640000000000000000, 0.005904000000000000 ],\n // [ 9101.010000000000000000, 0.287311000000000000 ],\n // [ 9101.030000000000000000, 0.012121000000000000 ],\n // ],\n // \"ch\":\"market.BTC-USD.depth.step0\",\n // \"ts\":1583474832008,\n // \"id\":1637554816,\n // \"mrid\":121654491624,\n // \"version\":104999698781\n // }\n // }\n //\n if ('tick' in response) {\n if (!response['tick']) {\n throw new TradeError()\n .addMessage('fetchOrderBook() returned empty response: ' + this.json(response))\n .exchange(this.id);\n }\n const tick = this.safeValue(response, 'tick');\n const timestamp = this.safeInteger(tick, 'ts', this.safeInteger(response, 'ts'));\n const result = this.parseOrderBook(tick, symbol, timestamp);\n result['nonce'] = this.safeInteger(tick, 'version');\n return result;\n }\n throw new ExchangeError()\n .addMessage('fetchOrderBook() returned unrecognized response: ' + this.json(response))\n .exchange(this.id);\n }\n parseTrade(trade, market = undefined) {\n //\n // spot fetchTrades (public)\n //\n // {\n // \"amount\": 0.010411000000000000,\n // \"trade-id\": 102090736910,\n // \"ts\": 1583497692182,\n // \"id\": 10500517034273194594947,\n // \"price\": 9096.050000000000000000,\n // \"direction\": \"sell\"\n // }\n //\n // spot fetchMyTrades (private)\n //\n // {\n // \"symbol\": \"swftcbtc\",\n // \"fee-currency\": \"swftc\",\n // \"filled-fees\": \"0\",\n // \"source\": \"spot-api\",\n // \"id\": 83789509854000,\n // \"type\": \"buy-limit\",\n // \"order-id\": 83711103204909,\n // 'filled-points': \"0.005826843283532154\",\n // \"fee-deduct-currency\": \"ht\",\n // 'filled-amount': \"45941.53\",\n // \"price\": \"0.0000001401\",\n // \"created-at\": 1597933260729,\n // \"match-id\": 100087455560,\n // \"role\": \"maker\",\n // \"trade-id\": 100050305348\n // }\n //\n // linear swap isolated margin fetchOrder details\n //\n // {\n // \"trade_id\": 131560927,\n // \"trade_price\": 13059.800000000000000000,\n // \"trade_volume\": 1.000000000000000000,\n // \"trade_turnover\": 13.059800000000000000,\n // \"trade_fee\": -0.005223920000000000,\n // \"created_at\": 1603703614715,\n // \"role\": \"taker\",\n // \"fee_asset\": \"USDT\",\n // \"profit\": 0,\n // \"real_profit\": 0,\n // \"id\": \"131560927-770334322963152896-1\"\n // }\n //\n // inverse swap cross margin fetchMyTrades\n //\n // {\n // \"contract_type\":\"swap\",\n // \"pair\":\"O3-USDT\",\n // \"business_type\":\"swap\",\n // \"query_id\":652123190,\n // \"match_id\":28306009409,\n // \"order_id\":941137865226903553,\n // \"symbol\":\"O3\",\n // \"contract_code\":\"O3-USDT\",\n // \"direction\":\"sell\",\n // \"offset\":\"open\",\n // \"trade_volume\":100.000000000000000000,\n // \"trade_price\":0.398500000000000000,\n // \"trade_turnover\":39.850000000000000000,\n // \"trade_fee\":-0.007970000000000000,\n // \"offset_profitloss\":0E-18,\n // \"create_date\":1644426352999,\n // \"role\":\"Maker\",\n // \"order_source\":\"api\",\n // \"order_id_str\":\"941137865226903553\",\n // \"id\":\"28306009409-941137865226903553-1\",\n // \"fee_asset\":\"USDT\",\n // \"margin_mode\":\"cross\",\n // \"margin_account\":\"USDT\",\n // \"real_profit\":0E-18,\n // \"trade_partition\":\"USDT\"\n // }\n //\n const marketId = this.safeString2(trade, 'contract_code', 'symbol');\n market = this.safeMarket(marketId, market);\n const symbol = market['symbol'];\n let timestamp = this.safeInteger2(trade, 'ts', 'created-at');\n timestamp = this.safeInteger2(trade, 'created_at', 'create_date', timestamp);\n const order = this.safeString2(trade, 'order-id', 'order_id');\n let side = this.safeString(trade, 'direction');\n let type = this.safeString(trade, 'type');\n if (type !== undefined) {\n const typeParts = type.split('-');\n side = typeParts[0];\n type = typeParts[1];\n }\n const takerOrMaker = this.safeStringLower(trade, 'role');\n const priceString = this.safeString2(trade, 'price', 'trade_price');\n let amountString = this.safeString2(trade, 'filled-amount', 'amount');\n amountString = this.safeString(trade, 'trade_volume', amountString);\n const costString = this.safeString(trade, 'trade_turnover');\n let fee = undefined;\n let feeCost = this.safeString2(trade, 'filled-fees', 'trade_fee');\n const feeCurrencyId = this.safeString2(trade, 'fee-currency', 'fee_asset');\n let feeCurrency = this.safeCurrencyCode(feeCurrencyId);\n const filledPoints = this.safeString(trade, 'filled-points');\n if (filledPoints !== undefined) {\n if ((feeCost === undefined) || Precise.stringEquals(feeCost, '0')) {\n const feeDeductCurrency = this.safeString(trade, 'fee-deduct-currency');\n if (feeDeductCurrency !== undefined) {\n feeCost = filledPoints;\n feeCurrency = this.safeCurrencyCode(feeDeductCurrency);\n }\n }\n }\n if (feeCost !== undefined) {\n fee = {\n 'cost': feeCost,\n 'currency': feeCurrency,\n };\n }\n const id = this.safeStringN(trade, ['trade_id', 'trade-id', 'id']);\n return this.safeTrade({\n 'id': id,\n 'info': trade,\n 'order': order,\n 'timestamp': timestamp,\n 'datetime': this.iso8601(timestamp),\n 'symbol': symbol,\n 'type': type,\n 'side': side,\n 'takerOrMaker': takerOrMaker,\n 'price': priceString,\n 'amount': amountString,\n 'cost': costString,\n 'fee': fee,\n }, market);\n }\n async fetchOrderTrades(id, symbol = undefined, since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name huobi#fetchOrderTrades\n * @description fetch all the trades made from a single order\n * @param {string} id order id\n * @param {string} symbol unified market symbol\n * @param {int} [since] the earliest time in ms to fetch trades for\n * @param {int} [limit] the maximum number of trades to retrieve\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=trade-structure}\n */\n let market = undefined;\n if (symbol !== undefined) {\n market = this.market(symbol);\n }\n let marketType = undefined;\n [marketType, params] = this.handleMarketTypeAndParams('fetchOrderTrades', market, params);\n if (marketType !== 'spot') {\n throw new MarketTypeNotSupportedError(marketType)\n .addMessage('fetchOrderTrades() is only supported for spot markets')\n .exchange(this.id);\n }\n return await this.fetchSpotOrderTrades(id, symbol, since, limit, params);\n }\n async fetchSpotOrderTrades(id, symbol = undefined, since = undefined, limit = undefined, params = {}) {\n await this.loadMarkets();\n const request = {\n 'order-id': id,\n };\n const response = await this.spotPrivateGetV1OrderOrdersOrderIdMatchresults(this.extend(request, params));\n return this.parseTrades(response['data'], undefined, since, limit);\n }\n async fetchMyTrades(symbol = undefined, since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name huobi#fetchMyTrades\n * @see https://huobiapi.github.io/docs/usdt_swap/v1/en/#isolated-get-history-match-results-via-multiple-fields-new\n * @see https://huobiapi.github.io/docs/usdt_swap/v1/en/#cross-get-history-match-results-via-multiple-fields-new\n * @see https://huobiapi.github.io/docs/spot/v1/en/#search-match-results\n * @description fetch all trades made by the user\n * @param {string} symbol unified market symbol\n * @param {int} [since] the earliest time in ms to fetch trades for\n * @param {int} [limit] the maximum number of trades structures to retrieve\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {int} [params.until] the latest time in ms to fetch trades for\n * @param {boolean} [params.paginate] default false, when true will automatically paginate by calling this endpoint multiple times. See in the docs all the [availble parameters](https://github.com/ccxt/ccxt/wiki/Manual#pagination-params)\n * @returns {Trade[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=trade-structure}\n */\n await this.loadMarkets();\n let paginate = false;\n [paginate, params] = this.handleOptionAndParams(params, 'fetchMyTrades', 'paginate');\n if (paginate) {\n return await this.fetchPaginatedCallDynamic('fetchMyTrades', symbol, since, limit, params);\n }\n let market = undefined;\n if (symbol !== undefined) {\n market = this.market(symbol);\n }\n let marketType = undefined;\n [marketType, params] = this.handleMarketTypeAndParams('fetchMyTrades', market, params);\n let request = {\n // spot -----------------------------------------------------------\n // 'symbol': market['id'],\n // 'types': 'buy-market,sell-market,buy-limit,sell-limit,buy-ioc,sell-ioc,buy-limit-maker,sell-limit-maker,buy-stop-limit,sell-stop-limit',\n // 'start-time': since, // max 48 hours within 120 days\n // 'end-time': this.milliseconds (), // max 48 hours within 120 days\n // 'from': 'id', // tring false N/A Search internal id to begin with if search next page, then this should be the last id (not trade-id) of last page; if search previous page, then this should be the first id (not trade-id) of last page\n // 'direct': 'next', // next, prev\n // 'size': limit, // default 100, max 500 The number of orders to return [1-500]\n // contracts ------------------------------------------------------\n // 'symbol': market['settleId'], // required\n // 'trade_type': 0, // required, 0 all, 1 open long, 2 open short, 3 close short, 4 close long, 5 liquidate long positions, 6 liquidate short positions\n // 'contract_code': market['id'],\n // 'start_time': since, // max 48 hours within 120 days\n // 'end_time': this.milliseconds (), // max 48 hours within 120 days\n // 'from_id': 'id', // tring false N/A Search internal id to begin with if search next page, then this should be the last id (not trade-id) of last page; if search previous page, then this should be the first id (not trade-id) of last page\n // 'direct': 'prev', // next, prev\n // 'size': limit, // default 20, max 50\n };\n let response = undefined;\n if (marketType === 'spot') {\n if (symbol !== undefined) {\n market = this.market(symbol);\n request['symbol'] = market['id'];\n }\n if (limit !== undefined) {\n request['size'] = limit; // default 100, max 500\n }\n if (since !== undefined) {\n request['start-time'] = since; // a date within 120 days from today\n // request['end-time'] = this.sum (since, 172800000); // 48 hours window\n }\n [request, params] = this.handleUntilOption('end-time', request, params);\n response = await this.spotPrivateGetV1OrderMatchresults(this.extend(request, params));\n }\n else {\n if (symbol === undefined) {\n throw new InvalidParamsError('fetchMyTrades() requires a symbol argument')\n .exchange(this.id);\n }\n request['contract'] = market['id'];\n request['trade_type'] = 0; // 0 all, 1 open long, 2 open short, 3 close short, 4 close long, 5 liquidate long positions, 6 liquidate short positions\n if (since !== undefined) {\n request['start_time'] = since; // a date within 120 days from today\n // request['end_time'] = this.sum (request['start_time'], 172800000); // 48 hours window\n }\n [request, params] = this.handleUntilOption('end_time', request, params);\n if (limit !== undefined) {\n request['page_size'] = limit; // default 100, max 500\n }\n if (market['linear']) {\n let marginMode = undefined;\n [marginMode, params] = this.handleMarginModeAndParams('fetchMyTrades', params);\n marginMode = (marginMode === undefined) ? 'cross' : marginMode;\n if (marginMode === 'isolated') {\n response = await this.contractPrivatePostLinearSwapApiV3SwapMatchresultsExact(this.extend(request, params));\n }\n else if (marginMode === 'cross') {\n response = await this.contractPrivatePostLinearSwapApiV3SwapCrossMatchresultsExact(this.extend(request, params));\n }\n }\n else if (market['inverse']) {\n if (marketType === 'future') {\n request['symbol'] = market['settleId'];\n response = await this.contractPrivatePostApiV3ContractMatchresultsExact(this.extend(request, params));\n }\n else if (marketType === 'swap') {\n response = await this.contractPrivatePostSwapApiV3SwapMatchresultsExact(this.extend(request, params));\n }\n else {\n throw new MarketTypeNotSupportedError(marketType)\n .exchange(this.id);\n }\n }\n }\n //\n // spot\n //\n // {\n // \"status\": \"ok\",\n // \"data\": [\n // {\n // \"symbol\": \"polyusdt\",\n // \"fee-currency\": \"poly\",\n // \"source\": \"spot-web\",\n // \"price\": \"0.338\",\n // \"created-at\": 1629443051839,\n // \"role\": \"taker\",\n // \"order-id\": 345487249132375,\n // \"match-id\": 5014,\n // \"trade-id\": 1085,\n // \"filled-amount\": \"147.928994082840236\",\n // \"filled-fees\": \"0\",\n // \"filled-points\": \"0.1\",\n // \"fee-deduct-currency\": \"hbpoint\",\n // \"fee-deduct-state\": \"done\",\n // \"id\": 313288753120940,\n // \"type\": \"buy-market\"\n // }\n // ]\n // }\n //\n // contracts\n //\n // {\n // \"status\": \"ok\",\n // \"data\": {\n // \"trades\": [\n // {\n // \"query_id\": 2424420723,\n // \"match_id\": 113891764710,\n // \"order_id\": 773135295142658048,\n // \"symbol\": \"ADA\",\n // \"contract_type\": \"quarter\", // swap\n // \"business_type\": \"futures\", // swap\n // \"contract_code\": \"ADA201225\",\n // \"direction\": \"buy\",\n // \"offset\": \"open\",\n // \"trade_volume\": 1,\n // \"trade_price\": 0.092,\n // \"trade_turnover\": 10,\n // \"trade_fee\": -0.021739130434782608,\n // \"offset_profitloss\": 0,\n // \"create_date\": 1604371703183,\n // \"role\": \"Maker\",\n // \"order_source\": \"web\",\n // \"order_id_str\": \"773135295142658048\",\n // \"fee_asset\": \"ADA\",\n // \"margin_mode\": \"isolated\", // cross\n // \"margin_account\": \"BTC-USDT\",\n // \"real_profit\": 0,\n // \"id\": \"113891764710-773135295142658048-1\",\n // \"trade_partition\":\"USDT\",\n // }\n // ],\n // \"remain_size\": 15,\n // \"next_id\": 2424413094\n // },\n // \"ts\": 1604372202243\n // }\n //\n let trades = this.safeValue(response, 'data');\n if (!Array.isArray(trades)) {\n trades = this.safeValue(trades, 'trades');\n }\n return this.parseTrades(trades, market, since, limit);\n }\n async fetchTrades(symbol, since = undefined, limit = 1000, params = {}) {\n /**\n * @method\n * @name huobi#fetchTrades\n * @see https://huobiapi.github.io/docs/spot/v1/en/#get-the-most-recent-trades\n * @see https://huobiapi.github.io/docs/dm/v1/en/#query-a-batch-of-trade-records-of-a-contract\n * @see https://huobiapi.github.io/docs/coin_margined_swap/v1/en/#query-a-batch-of-trade-records-of-a-contract\n * @see https://huobiapi.github.io/docs/usdt_swap/v1/en/#general-query-a-batch-of-trade-records-of-a-contract\n * @description get the list of most recent trades for a particular symbol\n * @param {string} symbol unified symbol of the market to fetch trades for\n * @param {int} [since] timestamp in ms of the earliest trade to fetch\n * @param {int} [limit] the maximum amount of trades to fetch\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {Trade[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=public-trades}\n */\n await this.loadMarkets();\n const market = this.market(symbol);\n const request = {\n // 'symbol': market['id'], // spot, future\n // 'contract_code': market['id'], // swap\n };\n if (limit !== undefined) {\n request['size'] = Math.min(limit, 2000); // max 2000\n }\n let response = undefined;\n if (market['future']) {\n if (market['inverse']) {\n request['symbol'] = market['id'];\n response = await this.contractPublicGetMarketHistoryTrade(this.extend(request, params));\n }\n else if (market['linear']) {\n request['contract_code'] = market['id'];\n response = await this.contractPublicGetLinearSwapExMarketHistoryTrade(this.extend(request, params));\n }\n }\n else if (market['swap']) {\n request['contract_code'] = market['id'];\n if (market['inverse']) {\n response = await this.contractPublicGetSwapExMarketHistoryTrade(this.extend(request, params));\n }\n else if (market['linear']) {\n response = await this.contractPublicGetLinearSwapExMarketHistoryTrade(this.extend(request, params));\n }\n }\n else {\n request['symbol'] = market['id'];\n response = await this.spotPublicGetMarketHistoryTrade(this.extend(request, params));\n }\n //\n // {\n // \"status\": \"ok\",\n // \"ch\": \"market.btcusdt.trade.detail\",\n // \"ts\": 1583497692365,\n // \"data\": [\n // {\n // \"id\": 105005170342,\n // \"ts\": 1583497692182,\n // \"data\": [\n // {\n // \"amount\": 0.010411000000000000,\n // \"trade-id\": 102090736910,\n // \"ts\": 1583497692182,\n // \"id\": 10500517034273194594947,\n // \"price\": 9096.050000000000000000,\n // \"direction\": \"sell\"\n // }\n // ]\n // },\n // // ...\n // ]\n // }\n //\n const data = this.safeValue(response, 'data', []);\n let result = [];\n for (let i = 0; i < data.length; i++) {\n const trades = this.safeValue(data[i], 'data', []);\n for (let j = 0; j < trades.length; j++) {\n const trade = this.parseTrade(trades[j], market);\n result.push(trade);\n }\n }\n result = this.sortBy(result, 'timestamp');\n return this.filterBySymbolSinceLimit(result, market['symbol'], since, limit);\n }\n parseOHLCV(ohlcv, market = undefined) {\n //\n // {\n // \"amount\":1.2082,\n // \"open\":0.025096,\n // \"close\":0.025095,\n // \"high\":0.025096,\n // \"id\":1591515300,\n // \"count\":6,\n // \"low\":0.025095,\n // \"vol\":0.0303205097\n // }\n //\n return [\n this.safeTimestamp(ohlcv, 'id'),\n this.safeNumber(ohlcv, 'open'),\n this.safeNumber(ohlcv, 'high'),\n this.safeNumber(ohlcv, 'low'),\n this.safeNumber(ohlcv, 'close'),\n this.safeNumber(ohlcv, 'amount'),\n ];\n }\n async fetchOHLCV(symbol, timeframe = '1m', since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name huobi#fetchOHLCV\n * @description fetches historical candlestick data containing the open, high, low, and close price, and the volume of a market\n * @see https://huobiapi.github.io/docs/spot/v1/en/#get-klines-candles\n * @see https://huobiapi.github.io/docs/dm/v1/en/#get-kline-data\n * @see https://huobiapi.github.io/docs/coin_margined_swap/v1/en/#get-kline-data\n * @see https://huobiapi.github.io/docs/usdt_swap/v1/en/#general-get-kline-data\n * @param {string} symbol unified symbol of the market to fetch OHLCV data for\n * @param {string} timeframe the length of time each candle represents\n * @param {int} [since] timestamp in ms of the earliest candle to fetch\n * @param {int} [limit] the maximum amount of candles to fetch\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {boolean} [params.paginate] default false, when true will automatically paginate by calling this endpoint multiple times. See in the docs all the [availble parameters](https://github.com/ccxt/ccxt/wiki/Manual#pagination-params)\n * @returns {int[][]} A list of candles ordered as timestamp, open, high, low, close, volume\n */\n await this.loadMarkets();\n let paginate = false;\n [paginate, params] = this.handleOptionAndParams(params, 'fetchOHLCV', 'paginate');\n if (paginate) {\n return await this.fetchPaginatedCallDeterministic('fetchOHLCV', symbol, since, limit, timeframe, params, 1000);\n }\n const market = this.market(symbol);\n const request = {\n 'period': this.safeString(this.timeframes, timeframe, timeframe),\n // 'symbol': market['id'], // spot, future\n // 'contract_code': market['id'], // swap\n // 'size': 1000, // max 1000 for spot, 2000 for contracts\n // 'from': parseInt ((since / 1000).toString ()), spot only\n // 'to': this.seconds (), spot only\n };\n const price = this.safeString(params, 'price');\n params = this.omit(params, 'price');\n if (market['contract']) {\n if (limit !== undefined) {\n request['size'] = limit; // when using limit from and to are ignored\n // https://huobiapi.github.io/docs/usdt_swap/v1/en/#general-get-kline-data\n }\n else {\n limit = 2000; // only used for from/to calculation\n }\n if (price === undefined) {\n const duration = this.parseTimeframe(timeframe);\n if (since === undefined) {\n const now = this.seconds();\n request['from'] = now - duration * (limit - 1);\n request['to'] = now;\n }\n else {\n const start = this.parseToInt(since / 1000);\n request['from'] = start;\n request['to'] = this.sum(start, duration * (limit - 1));\n }\n }\n }\n let response = undefined;\n if (market['future']) {\n if (market['inverse']) {\n request['symbol'] = market['id'];\n if (price === 'mark') {\n response = await this.contractPublicGetIndexMarketHistoryMarkPriceKline(this.extend(request, params));\n }\n else if (price === 'index') {\n response = await this.contractPublicGetIndexMarketHistoryIndex(this.extend(request, params));\n }\n else if (price === 'premiumIndex') {\n throw new ExchangeError()\n .addMessage(market['type'] + ' has no api endpoint for ' + price + ' kline data')\n .exchange(this.id);\n }\n else {\n response = await this.contractPublicGetMarketHistoryKline(this.extend(request, params));\n }\n }\n else if (market['linear']) {\n request['contract_code'] = market['id'];\n if (price === 'mark') {\n response = await this.contractPublicGetIndexMarketHistoryLinearSwapMarkPriceKline(this.extend(request, params));\n }\n else if (price === 'index') {\n throw new ExchangeError()\n .addMessage(market['type'] + ' has no api endpoint for ' + price + ' kline data')\n .exchange(this.id);\n }\n else if (price === 'premiumIndex') {\n response = await this.contractPublicGetIndexMarketHistoryLinearSwapPremiumIndexKline(this.extend(request, params));\n }\n else {\n response = await this.contractPublicGetLinearSwapExMarketHistoryKline(this.extend(request, params));\n }\n }\n }\n else if (market['swap']) {\n request['contract_code'] = market['id'];\n if (market['inverse']) {\n if (price === 'mark') {\n response = await this.contractPublicGetIndexMarketHistorySwapMarkPriceKline(this.extend(request, params));\n }\n else if (price === 'index') {\n throw new ExchangeError()\n .addMessage(market['type'] + ' has no api endpoint for ' + price + ' kline data')\n .exchange(this.id);\n }\n else if (price === 'premiumIndex') {\n response = await this.contractPublicGetIndexMarketHistorySwapPremiumIndexKline(this.extend(request, params));\n }\n else {\n response = await this.contractPublicGetSwapExMarketHistoryKline(this.extend(request, params));\n }\n }\n else if (market['linear']) {\n if (price === 'mark') {\n response = await this.contractPublicGetIndexMarketHistoryLinearSwapMarkPriceKline(this.extend(request, params));\n }\n else if (price === 'index') {\n throw new ExchangeError()\n .addMessage(market['type'] + ' has no api endpoint for ' + price + ' kline data')\n .exchange(this.id);\n }\n else if (price === 'premiumIndex') {\n response = await this.contractPublicGetIndexMarketHistoryLinearSwapPremiumIndexKline(this.extend(request, params));\n }\n else {\n response = await this.contractPublicGetLinearSwapExMarketHistoryKline(this.extend(request, params));\n }\n }\n }\n else {\n if (since !== undefined) {\n request['from'] = this.parseToInt(since / 1000);\n }\n if (limit !== undefined) {\n request['size'] = limit; // max 2000\n }\n request['symbol'] = market['id'];\n if (timeframe === '1M' || timeframe === '1y') {\n // for some reason 1M and 1Y does not work with the regular endpoint\n // https://github.com/ccxt/ccxt/issues/18006\n response = await this.spotPublicGetMarketHistoryKline(this.extend(request, params));\n }\n else {\n response = await this.spotPublicGetMarketHistoryCandles(this.extend(request, params));\n }\n }\n //\n // {\n // \"status\":\"ok\",\n // \"ch\":\"market.ethbtc.kline.1min\",\n // \"ts\":1591515374371,\n // \"data\":[\n // {\"amount\":0.0,\"open\":0.025095,\"close\":0.025095,\"high\":0.025095,\"id\":1591515360,\"count\":0,\"low\":0.025095,\"vol\":0.0},\n // {\"amount\":1.2082,\"open\":0.025096,\"close\":0.025095,\"high\":0.025096,\"id\":1591515300,\"count\":6,\"low\":0.025095,\"vol\":0.0303205097},\n // {\"amount\":0.0648,\"open\":0.025096,\"close\":0.025096,\"high\":0.025096,\"id\":1591515240,\"count\":2,\"low\":0.025096,\"vol\":0.0016262208},\n // ]\n // }\n //\n const data = this.safeValue(response, 'data', []);\n return this.parseOHLCVs(data, market, timeframe, since, limit);\n }\n async fetchAccounts(params = {}) {\n /**\n * @method\n * @name huobi#fetchAccounts\n * @description fetch all the accounts associated with a profile\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} a dictionary of [account structures]{@link https://docs.ccxt.com/#/?id=account-structure} indexed by the account type\n */\n await this.loadMarkets();\n const response = await this.spotPrivateGetV1AccountAccounts(params);\n //\n // {\n // \"status\":\"ok\",\n // \"data\":[\n // {\"id\":5202591,\"type\":\"point\",\"subtype\":\"\",\"state\":\"working\"},\n // {\"id\":1528640,\"type\":\"spot\",\"subtype\":\"\",\"state\":\"working\"},\n // ]\n // }\n //\n const data = this.safeValue(response, 'data');\n return this.parseAccounts(data);\n }\n parseAccount(account) {\n //\n // {\n // \"id\": 5202591,\n // \"type\": \"point\", // spot, margin, otc, point, super-margin, investment, borrow, grid-trading, deposit-earning, otc-options\n // \"subtype\": \"\", // The corresponding trading symbol (currency pair) the isolated margin is based on, e.g. btcusdt\n // \"state\": \"working\" // working, lock\n // }\n //\n const typeId = this.safeString(account, 'type');\n const accountsById = this.safeValue(this.options, 'accountsById', {});\n const type = this.safeValue(accountsById, typeId, typeId);\n return {\n 'info': account,\n 'id': this.safeString(account, 'id'),\n 'type': type,\n 'code': undefined,\n };\n }\n async fetchAccountIdByType(type, marginMode = undefined, symbol = undefined, params = {}) {\n const accounts = await this.loadAccounts();\n const accountId = this.safeValue2(params, 'accountId', 'account-id');\n if (accountId !== undefined) {\n return accountId;\n }\n if (type === 'spot') {\n if (marginMode === 'cross') {\n type = 'super-margin';\n }\n else if (marginMode === 'isolated') {\n type = 'margin';\n }\n }\n const marketId = (symbol === undefined) ? undefined : this.marketId(symbol);\n for (let i = 0; i < accounts.length; i++) {\n const account = accounts[i];\n const info = this.safeValue(account, 'info');\n const subtype = this.safeString(info, 'subtype', undefined);\n const typeFromAccount = this.safeString(account, 'type');\n if (type === 'margin') {\n if (subtype === marketId) {\n return this.safeString(account, 'id');\n }\n }\n else if (type === typeFromAccount) {\n return this.safeString(account, 'id');\n }\n }\n const defaultAccount = this.safeValue(accounts, 0, {});\n return this.safeString(defaultAccount, 'id');\n }\n async generateMethodsMapping(currencies) {\n const flatCurrencies = currencies.data.map((e) => e.currency);\n const mappedMethods = {};\n // @ts-ignore\n this.cedeMapping.forEach((mn) => {\n const flattenEcid = mn.ecid.toLowerCase();\n mappedMethods[flattenEcid] = flattenEcid;\n flatCurrencies.forEach((currency) => {\n // erc20 => erc20usdt\n const methodWithCurency = flattenEcid + currency.toLowerCase();\n // erc20 => usdterc20\n const methodInversedWithCurrency = currency.toLowerCase() + flattenEcid;\n mappedMethods[methodWithCurency] = flattenEcid;\n mappedMethods[methodInversedWithCurrency] = flattenEcid;\n });\n });\n return mappedMethods;\n }\n safeNetwork(networkId) {\n const networksById = {\n 'hbtc': 'erc20',\n 'ht2': 'erc20',\n 'hbch': 'erc20',\n 'eth': 'erc20',\n 'ETH': 'erc20',\n 'rain': 'erc20',\n 'xfi': 'erc20',\n 'arbieth': 'arb',\n 'gas1': 'neo1',\n 'avax': 'arc20',\n 'atm': 'chz20',\n 'babydoge': 'bep20',\n 'bscface1': 'bep20',\n 'mbl': 'ont',\n 'wld': 'opt',\n 'aury': 'sol',\n 'bonk': 'sol',\n 'wlkn': 'sol',\n 'dio': 'sol',\n 'elu': 'sol',\n 'gari': 'sol',\n 'gmt': 'sol',\n 'hbb': 'sol',\n 'sao': 'sol',\n 'like': 'sol',\n 'mlpx': 'sol',\n 'zbc': 'sol',\n 'sns': 'sol',\n 'dav': 'arb',\n 'ARBITRUM': 'arb',\n 'ARBITRUMONE': 'arb',\n 'SOLANA': 'sol',\n 'C-CHAIN': 'cchain',\n 'BTT': 'btt2',\n 'gns': 'arb',\n 'ipv': 'klay',\n 'joy': 'klay',\n 'mbx': 'klay',\n 'npt': 'klay',\n 'we': 'klay',\n 'well': 'glmr',\n 'wmt': 'ada',\n 'roco': 'cchain',\n 'fio': 'cchain',\n 'hec': 'cchain',\n 'gmx': 'cchain',\n 'xeta': 'cchain',\n 'kube': 'ADA',\n 'nt': 'erc20',\n 'solo': 'xrp',\n 'tao': 'near',\n 'uft': 'erc20',\n };\n return this.safeString(networksById, networkId, networkId);\n }\n async fetchCurrencies(params = {}) {\n /**\n * @method\n * @name huobi#fetchCurrencies\n * @description fetches all available currencies on an exchange\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} an associative dictionary of currencies\n */\n const response = await this.spotPublicGetV2ReferenceCurrencies(params);\n //\n // {\n // \"code\": 200,\n // \"data\": [\n // {\n // \"currency\": \"sxp\",\n // \"assetType\": \"1\",\n // \"chains\": [\n // {\n // \"chain\": \"sxp\",\n // \"displayName\": \"ERC20\",\n // \"baseChain\": \"ETH\",\n // \"baseChainProtocol\": \"ERC20\",\n // \"isDynamic\": true,\n // \"numOfConfirmations\": \"12\",\n // \"numOfFastConfirmations\": \"12\",\n // \"depositStatus\": \"allowed\",\n // \"minDepositAmt\": \"0.23\",\n // \"withdrawStatus\": \"allowed\",\n // \"minWithdrawAmt\": \"0.23\",\n // \"withdrawPrecision\": \"8\",\n // \"maxWithdrawAmt\": \"227000.000000000000000000\",\n // \"withdrawQuotaPerDay\": \"227000.000000000000000000\",\n // \"withdrawQuotaPerYear\": null,\n // \"withdrawQuotaTotal\": null,\n // \"withdrawFeeType\": \"fixed\",\n // \"transactFeeWithdraw\": \"11.1653\",\n // \"addrWithTag\": false,\n // \"addrDepositTag\": false\n // }\n // ],\n // \"instStatus\": \"normal\"\n // }\n // ]\n // }\n // }\n //\n const methodsMapping = await this.generateMethodsMapping(response);\n const data = this.safeValue(response, 'data', []);\n const result = {};\n this.options['networkNamesByChainIds'] = {};\n this.options['ecidByChainIds'] = {};\n this.options['chainIdbyEcids'] = {};\n for (let i = 0; i < data.length; i++) {\n const entry = data[i];\n const currencyId = this.safeString(entry, 'currency');\n const code = this.safeCurrencyCode(currencyId);\n this.options['chainIdbyEcids'][code] = {};\n const chains = this.safeValue(entry, 'chains', []);\n const networks = {};\n const instStatus = this.safeString(entry, 'instStatus');\n const currencyActive = instStatus === 'normal';\n let minPrecision = undefined;\n let minWithdraw = undefined;\n let maxWithdraw = undefined;\n let deposit = false;\n let withdraw = false;\n for (let j = 0; j < chains.length; j++) {\n const chainEntry = chains[j];\n const uniqueChainId = this.safeString(chainEntry, 'chain'); // i.e. usdterc20, trc20usdt ...\n const title = this.safeString2(chainEntry, 'baseChain', 'displayName'); // baseChain and baseChainProtocol are together existent or inexistent in entries, but baseChain is preferred. when they are both inexistent, then we use generic displayName\n minWithdraw = this.safeNumber(chainEntry, 'minWithdrawAmt');\n maxWithdraw = this.safeNumber(chainEntry, 'maxWithdrawAmt');\n const withdrawStatus = this.safeString(chainEntry, 'withdrawStatus');\n const depositStatus = this.safeString(chainEntry, 'depositStatus');\n const withdrawEnabled = (withdrawStatus === 'allowed');\n const depositEnabled = (depositStatus === 'allowed');\n withdraw = (withdrawEnabled) ? withdrawEnabled : withdraw;\n deposit = (depositEnabled) ? depositEnabled : deposit;\n const active = withdrawEnabled && depositEnabled;\n const precision = this.parsePrecision(this.safeString(chainEntry, 'withdrawPrecision'));\n if (precision !== undefined) {\n minPrecision = (minPrecision === undefined) ? precision : Precise.stringMin(precision, minPrecision);\n }\n const fee = this.safeNumber(chainEntry, 'transactFeeWithdraw');\n const safeCode = this.safeNetwork(title);\n const safeNetwork = this.safeNetwork(uniqueChainId);\n const ecid = methodsMapping[safeCode.toLowerCase()] || methodsMapping[safeNetwork.toLowerCase()];\n this.options['ecidByChainIds'][uniqueChainId] = ecid;\n this.options['chainIdbyEcids'][code][ecid] = uniqueChainId;\n networks[safeCode] = {\n 'info': chainEntry,\n 'id': uniqueChainId,\n 'network': ecid,\n 'limits': {\n 'deposit': {\n 'min': undefined,\n 'max': undefined,\n },\n 'withdraw': {\n 'min': minWithdraw,\n 'max': maxWithdraw,\n },\n },\n 'active': active,\n 'deposit': depositEnabled,\n 'withdraw': withdrawEnabled,\n 'fee': fee,\n 'precision': this.parseNumber(precision),\n };\n }\n result[code] = {\n 'info': entry,\n 'code': code,\n 'id': currencyId,\n 'active': currencyActive,\n 'deposit': deposit,\n 'withdraw': withdraw,\n 'fee': undefined,\n 'name': undefined,\n 'limits': {\n 'amount': {\n 'min': undefined,\n 'max': undefined,\n },\n 'withdraw': {\n 'min': minWithdraw,\n 'max': maxWithdraw,\n },\n 'deposit': {\n 'min': undefined,\n 'max': undefined,\n },\n },\n 'precision': this.parseNumber(minPrecision),\n 'networks': networks,\n };\n }\n await Promise.all([\n this.cache.set({\n 'key': ecidByChainIdsCacheIdentifier(this.id),\n 'data': this.options['ecidByChainIds'],\n 'clone': false,\n 'ttl': null,\n }),\n this.cache.set({\n 'key': chainIdbyEcidsCacheIdentifier(this.id),\n 'data': this.options['chainIdbyEcids'],\n 'clone': false,\n 'ttl': null,\n }),\n ]);\n return result;\n }\n networkIdToEcid(chainId) {\n // here network-id is provided as a pair of currency & chain (i.e. trc20usdt)\n const keys = Object.keys(this.options['ecidByChainIds']);\n const keysLength = keys.length;\n if (keysLength === 0) {\n throw new MarketNotLoadedError()\n .addMessage('networkIdToEcid() - markets need to be loaded at first')\n .exchange(this.id);\n }\n return this.safeValue(this.options['ecidByChainIds'], chainId, chainId);\n }\n ecidToNetworkId(ecid, currencyCode = undefined) {\n const keys = Object.keys(this.options['chainIdbyEcids']);\n const keysLength = keys.length;\n if (keysLength === 0) {\n throw new MarketNotLoadedError()\n .addMessage('ecidToNetworkId() - markets need to be loaded at first')\n .exchange(this.id);\n }\n const uniqueNetworkIds = this.safeValue(this.options['chainIdbyEcids'], currencyCode, {});\n return this.safeValue(uniqueNetworkIds, ecid, ecid);\n }\n async fetchBalance(params = {}) {\n /**\n * @method\n * @name huobi#fetchBalance\n * @see https://huobiapi.github.io/docs/spot/v1/en/#get-account-balance-of-a-specific-account\n * @see https://www.htx.com/en-us/opend/newApiPages/?id=7ec4b429-7773-11ed-9966-0242ac110003\n * @see https://www.htx.com/en-us/opend/newApiPages/?id=10000074-77b7-11ed-9966-0242ac110003\n * @see https://huobiapi.github.io/docs/dm/v1/en/#query-asset-valuation\n * @see https://huobiapi.github.io/docs/coin_margined_swap/v1/en/#query-user-s-account-information\n * @see https://huobiapi.github.io/docs/usdt_swap/v1/en/#isolated-query-user-s-account-information\n * @see https://huobiapi.github.io/docs/usdt_swap/v1/en/#cross-query-user-39-s-account-information\n * @description query for balance and get the amount of funds available for trading or funds locked in orders\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {bool} [params.unified] provide this parameter if you have a recent account with unified cross+isolated margin account\n * @returns {object} a [balance structure]{@link https://docs.ccxt.com/#/?id=balance-structure}\n */\n await this.loadMarkets();\n let type = undefined;\n [type, params] = this.handleMarketTypeAndParams('fetchBalance', undefined, params);\n const options = this.safeValue(this.options, 'fetchBalance', {});\n const isUnifiedAccount = this.safeValue2(params, 'isUnifiedAccount', 'unified', false);\n params = this.omit(params, ['isUnifiedAccount', 'unified']);\n const request = {};\n const spot = (type === 'spot');\n const future = (type === 'future');\n const defaultSubType = this.safeString2(this.options, 'defaultSubType', 'subType', 'linear');\n let subType = this.safeString2(options, 'defaultSubType', 'subType', defaultSubType);\n subType = this.safeString2(params, 'defaultSubType', 'subType', subType);\n const inverse = (subType === 'inverse');\n const linear = (subType === 'linear');\n let marginMode = undefined;\n [marginMode, params] = this.handleMarginModeAndParams('fetchBalance', params);\n params = this.omit(params, ['defaultSubType', 'subType']);\n const isolated = (marginMode === 'isolated');\n const cross = (marginMode === 'cross');\n const margin = (type === 'margin') || (spot && (cross || isolated));\n let response = undefined;\n if (spot || margin) {\n if (margin) {\n if (isolated) {\n response = await this.spotPrivateGetV1MarginAccountsBalance(this.extend(request, params));\n }\n else {\n response = await this.spotPrivateGetV1CrossMarginAccountsBalance(this.extend(request, params));\n }\n }\n else {\n const methodCallId = this.safeString(params, 'methodCallId');\n await this.loadAccounts(!!methodCallId, { 'methodCallId': methodCallId });\n const accountId = await this.fetchAccountIdByType(type, undefined, undefined, params);\n request['account-id'] = accountId;\n response = await this.spotPrivateGetV1AccountAccountsAccountIdBalance(this.extend(request, params));\n }\n }\n else if (isUnifiedAccount) {\n response = await this.contractPrivateGetLinearSwapApiV3UnifiedAccountInfo(this.extend(request, params));\n }\n else if (linear) {\n if (isolated) {\n response = await this.contractPrivatePostLinearSwapApiV1SwapAccountInfo(this.extend(request, params));\n }\n else {\n response = await this.contractPrivatePostLinearSwapApiV1SwapCrossAccountInfo(this.extend(request, params));\n }\n }\n else if (inverse) {\n if (future) {\n response = await this.contractPrivatePostApiV1ContractAccountInfo(this.extend(request, params));\n }\n else {\n response = await this.contractPrivatePostSwapApiV1SwapAccountInfo(this.extend(request, params));\n }\n }\n //\n // spot\n //\n // {\n // \"status\": \"ok\",\n // \"data\": {\n // \"id\": 1528640,\n // \"type\": \"spot\",\n // \"state\": \"working\",\n // \"list\": [\n // { \"currency\": \"lun\", \"type\": \"trade\", \"balance\": \"0\", \"seq-num\": \"0\" },\n // { \"currency\": \"lun\", \"type\": \"frozen\", \"balance\": \"0\", \"seq-num\": \"0\" },\n // { \"currency\": \"ht\", \"type\": \"frozen\", \"balance\": \"0\", \"seq-num\": \"145\" },\n // ]\n // },\n // \"ts\":1637644827566\n // }\n //\n // cross margin\n //\n // {\n // \"status\": \"ok\",\n // \"data\": {\n // \"id\": 51015302,\n // \"type\": \"cross-margin\",\n // \"state\": \"working\",\n // \"risk-rate\": \"2\",\n // \"acct-balance-sum\": \"100\",\n // \"debt-balance-sum\": \"0\",\n // \"list\": [\n // { \"currency\": \"usdt\", \"type\": \"trade\", \"balance\": \"100\" },\n // { \"currency\": \"usdt\", \"type\": \"frozen\", \"balance\": \"0\" },\n // { \"currency\": \"usdt\", \"type\": \"loan-available\", \"balance\": \"200\" },\n // { \"currency\": \"usdt\", \"type\": \"transfer-out-available\", \"balance\": \"-1\" },\n // { \"currency\": \"ht\", \"type\": \"loan-available\", \"balance\": \"36.60724091\" },\n // { \"currency\": \"ht\", \"type\": \"transfer-out-available\", \"balance\": \"-1\" },\n // { \"currency\": \"btc\", \"type\": \"trade\", \"balance\": \"1168.533000000000000000\" },\n // { \"currency\": \"btc\", \"type\": \"frozen\", \"balance\": \"0.000000000000000000\" },\n // { \"currency\": \"btc\", \"type\": \"loan\", \"balance\": \"-2.433000000000000000\" },\n // { \"currency\": \"btc\", \"type\": \"interest\", \"balance\": \"-0.000533000000000000\" },\n // { \"currency\": \"btc\", \"type\": \"transfer-out-available\", \"balance\": \"1163.872174670000000000\" },\n // { \"currency\": \"btc\", \"type\": \"loan-available\", \"balance\": \"8161.876538350676000000\" }\n // ]\n // },\n // \"code\": 200\n // }\n //\n // isolated margin\n //\n // {\n // \"data\": [\n // {\n // \"id\": 18264,\n // \"type\": \"margin\",\n // \"state\": \"working\",\n // \"symbol\": \"btcusdt\",\n // \"fl-price\": \"0\",\n // \"fl-type\": \"safe\",\n // \"risk-rate\": \"475.952571086994250554\",\n // \"list\": [\n // { \"currency\": \"btc\",\"type\": \"trade\",\"balance\": \"1168.533000000000000000\" },\n // { \"currency\": \"btc\",\"type\": \"frozen\",\"balance\": \"0.000000000000000000\" },\n // { \"currency\": \"btc\",\"type\": \"loan\",\"balance\": \"-2.433000000000000000\" },\n // { \"currency\": \"btc\",\"type\": \"interest\",\"balance\": \"-0.000533000000000000\" },\n // { \"currency\": \"btc\",\"type\": \"transfer-out-available\", \"balance\": \"1163.872174670000000000\" },\n // { \"currency\": \"btc\",\"type\": \"loan-available\", \"balance\": \"8161.876538350676000000\" }\n // ]\n // }\n // ]\n // }\n //\n // future, swap isolated\n //\n // {\n // \"status\": \"ok\",\n // \"data\": [\n // {\n // \"symbol\": \"BTC\",\n // \"margin_balance\": 0,\n // \"margin_position\": 0E-18,\n // \"margin_frozen\": 0,\n // \"margin_available\": 0E-18,\n // \"profit_real\": 0,\n // \"profit_unreal\": 0,\n // \"risk_rate\": null,\n // \"withdraw_available\": 0,\n // \"liquidation_price\": null,\n // \"lever_rate\": 5,\n // \"adjust_factor\": 0.025000000000000000,\n // \"margin_static\": 0,\n // \"is_debit\": 0, // future only\n // \"contract_code\": \"BTC-USD\", // swap only\n // \"margin_asset\": \"USDT\", // linear only\n // \"margin_mode\": \"isolated\", // linear only\n // \"margin_account\": \"BTC-USDT\" // linear only\n // \"transfer_profit_ratio\": null // inverse only\n // },\n // ],\n // \"ts\": 1637644827566\n // }\n //\n // linear cross futures and linear cross swap\n //\n // {\n // \"status\": \"ok\",\n // \"data\": [\n // {\n // \"futures_contract_detail\": [\n // {\n // \"symbol\": \"ETH\",\n // \"contract_code\": \"ETH-USDT-220325\",\n // \"margin_position\": 0,\n // \"margin_frozen\": 0,\n // \"margin_available\": 200.000000000000000000,\n // \"profit_unreal\": 0E-18,\n // \"liquidation_price\": null,\n // \"lever_rate\": 5,\n // \"adjust_factor\": 0.060000000000000000,\n // \"contract_type\": \"quarter\",\n // \"pair\": \"ETH-USDT\",\n // \"business_type\": \"futures\"\n // },\n // ],\n // \"margin_mode\": \"cross\",\n // \"margin_account\": \"USDT\",\n // \"margin_asset\": \"USDT\",\n // \"margin_balance\": 49.874186030200000000,\n // \"money_in\": 50,\n // \"money_out\": 0,\n // \"margin_static\": 49.872786030200000000,\n // \"margin_position\": 6.180000000000000000,\n // \"margin_frozen\": 6.000000000000000000,\n // \"profit_unreal\": 0.001400000000000000,\n // \"withdraw_available\": 37.6927860302,\n // \"risk_rate\": 271.984050521072796934,\n // \"new_risk_rate\": 0.001858676950514399,\n // \"contract_detail\": [\n // {\n // \"symbol\": \"MANA\",\n // \"contract_code\": \"MANA-USDT\",\n // \"margin_position\": 0,\n // \"margin_frozen\": 0,\n // \"margin_available\": 200.000000000000000000,\n // \"profit_unreal\": 0E-18,\n // \"liquidation_price\": null,\n // \"lever_rate\": 5,\n // \"adjust_factor\": 0.100000000000000000,\n // \"contract_type\": \"swap\",\n // \"pair\": \"MANA-USDT\",\n // \"business_type\": \"swap\"\n // },\n // ]\n // }\n // ],\n // \"ts\": 1640915104870\n // }\n //\n // TODO add balance parsing for linear swap\n //\n let result = { 'info': response };\n const data = this.safeValue(response, 'data');\n if (spot || margin) {\n if (isolated) {\n for (let i = 0; i < data.length; i++) {\n const entry = data[i];\n const symbol = this.safeSymbol(this.safeString(entry, 'symbol'));\n const balances = this.safeValue(entry, 'list');\n const subResult = {};\n for (let j = 0; j < balances.length; j++) {\n const balance = balances[j];\n const currencyId = this.safeString(balance, 'currency');\n const code = this.safeCurrencyCode(currencyId);\n subResult[code] = this.parseMarginBalanceHelper(balance, code, subResult);\n }\n result[symbol] = this.safeBalance(subResult);\n }\n }\n else {\n const balances = this.safeValue(data, 'list', []);\n for (let i = 0; i < balances.length; i++) {\n const balance = balances[i];\n const currencyId = this.safeString(balance, 'currency');\n const code = this.safeCurrencyCode(currencyId);\n result[code] = this.parseMarginBalanceHelper(balance, code, result);\n }\n result = this.safeBalance(result);\n }\n }\n else if (isUnifiedAccount) {\n for (let i = 0; i < data.length; i++) {\n const entry = data[i];\n const marginAsset = this.safeString(entry, 'margin_asset');\n const currencyCode = this.safeCurrencyCode(marginAsset);\n if (isolated) {\n const isolated_swap = this.safeValue(entry, 'isolated_swap', {});\n for (let j = 0; j < isolated_swap.length; j++) {\n const balance = isolated_swap[j];\n const marketId = this.safeString(balance, 'contract_code');\n const subBalance = {\n 'code': currencyCode,\n 'free': this.safeNumber(balance, 'margin_available'),\n };\n const symbol = this.safeSymbol(marketId);\n result[symbol] = subBalance;\n result = this.safeBalance(result);\n }\n }\n else {\n const account = this.account();\n account['free'] = this.safeString(entry, 'margin_static');\n account['used'] = this.safeString(entry, 'margin_frozen');\n result[currencyCode] = account;\n result = this.safeBalance(result);\n }\n }\n }\n else if (linear) {\n if (isolated) {\n for (let i = 0; i < data.length; i++) {\n const balance = data[i];\n const marketId = this.safeString2(balance, 'contract_code', 'margin_account');\n const market = this.safeMarket(marketId);\n const currencyId = this.safeString(balance, 'margin_asset');\n const currency = this.safeCurrency(currencyId);\n const code = this.safeString(market, 'settle', currency['code']);\n // the exchange outputs positions for delisted markets\n // https://www.huobi.com/support/en-us/detail/74882968522337\n // we skip it if the market was delisted\n if (code !== undefined) {\n const account = this.account();\n account['free'] = this.safeString(balance, 'margin_balance');\n account['used'] = this.safeString(balance, 'margin_frozen');\n const accountsByCode = {};\n accountsByCode[code] = account;\n const symbol = market['symbol'];\n result[symbol] = this.safeBalance(accountsByCode);\n }\n }\n }\n else {\n for (let i = 0; i < data.length; i++) {\n const balance = data[i];\n const account = this.account();\n account['free'] = this.safeString(balance, 'withdraw_available');\n account['total'] = this.safeString(balance, 'margin_balance');\n const currencyId = this.safeString2(balance, 'margin_asset', 'symbol');\n const code = this.safeCurrencyCode(currencyId);\n result[code] = account;\n }\n result = this.safeBalance(result);\n }\n }\n else if (inverse) {\n for (let i = 0; i < data.length; i++) {\n const balance = data[i];\n const currencyId = this.safeString(balance, 'symbol');\n const code = this.safeCurrencyCode(currencyId);\n const account = this.account();\n account['free'] = this.safeString(balance, 'margin_available');\n account['used'] = this.safeString(balance, 'margin_frozen');\n result[code] = account;\n }\n result = this.safeBalance(result);\n }\n return result;\n }\n async fetchOrder(id, symbol = undefined, params = {}) {\n /**\n * @method\n * @name huobi#fetchOrder\n * @description fetches information on an order made by the user\n * @param {string} symbol unified symbol of the market the order was made in\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} An [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n await this.loadMarkets();\n let market = undefined;\n if (symbol !== undefined) {\n market = this.market(symbol);\n }\n let marketType = undefined;\n [marketType, params] = this.handleMarketTypeAndParams('fetchOrder', market, params);\n const request = {\n // spot -----------------------------------------------------------\n // 'order-id': 'id',\n // 'symbol': market['id'],\n // 'client-order-id': clientOrderId,\n // 'clientOrderId': clientOrderId,\n // contracts ------------------------------------------------------\n // 'order_id': id,\n // 'client_order_id': clientOrderId,\n // 'contract_code': market['id'],\n // 'pair': 'BTC-USDT',\n // 'contract_type': 'this_week', // swap, this_week, next_week, quarter, next_ quarter\n };\n let response = undefined;\n if (marketType === 'spot') {\n const clientOrderId = this.safeString(params, 'clientOrderId');\n if (clientOrderId !== undefined) {\n // will be filled below in extend ()\n // they expect clientOrderId instead of client-order-id\n // request['clientOrderId'] = clientOrderId;\n response = await this.spotPrivateGetV1OrderOrdersGetClientOrder(this.extend(request, params));\n }\n else {\n request['order-id'] = id;\n response = await this.spotPrivateGetV1OrderOrdersOrderId(this.extend(request, params));\n }\n }\n else {\n if (symbol === undefined) {\n throw new InvalidParamsError('fetchOrder() requires a symbol argument')\n .exchange(this.id);\n }\n const clientOrderId = this.safeString2(params, 'client_order_id', 'clientOrderId');\n if (clientOrderId === undefined) {\n request['order_id'] = id;\n }\n else {\n request['client_order_id'] = clientOrderId;\n params = this.omit(params, ['client_order_id', 'clientOrderId']);\n }\n request['contract_code'] = market['id'];\n if (market['linear']) {\n let marginMode = undefined;\n [marginMode, params] = this.handleMarginModeAndParams('fetchOrder', params);\n marginMode = (marginMode === undefined) ? 'cross' : marginMode;\n if (marginMode === 'isolated') {\n response = await this.contractPrivatePostLinearSwapApiV1SwapOrderInfo(this.extend(request, params));\n }\n else if (marginMode === 'cross') {\n response = await this.contractPrivatePostLinearSwapApiV1SwapCrossOrderInfo(this.extend(request, params));\n }\n }\n else if (market['inverse']) {\n if (marketType === 'future') {\n request['symbol'] = market['settleId'];\n response = await this.contractPrivatePostApiV1ContractOrderInfo(this.extend(request, params));\n }\n else if (marketType === 'swap') {\n response = await this.contractPrivatePostSwapApiV1SwapOrderInfo(this.extend(request, params));\n }\n else {\n throw new MarketTypeNotSupportedError(marketType).exchange(this.id);\n }\n }\n }\n //\n // spot\n //\n // {\n // \"status\":\"ok\",\n // \"data\":{\n // \"id\":438398393065481,\n // \"symbol\":\"ethusdt\",\n // \"account-id\":1528640,\n // \"client-order-id\":\"AA03022abc2163433e-006b-480e-9ad1-d4781478c5e7\",\n // \"amount\":\"0.100000000000000000\",\n // \"price\":\"3000.000000000000000000\",\n // \"created-at\":1640549994642,\n // \"type\":\"buy-limit\",\n // \"field-amount\":\"0.0\",\n // \"field-cash-amount\":\"0.0\",\n // \"field-fees\":\"0.0\",\n // \"finished-at\":0,\n // \"source\":\"spot-api\",\n // \"state\":\"submitted\",\n // \"canceled-at\":0\n // }\n // }\n //\n // linear swap cross margin\n //\n // {\n // \"status\":\"ok\",\n // \"data\":[\n // {\n // \"business_type\":\"swap\",\n // \"contract_type\":\"swap\",\n // \"pair\":\"BTC-USDT\",\n // \"symbol\":\"BTC\",\n // \"contract_code\":\"BTC-USDT\",\n // \"volume\":1,\n // \"price\":3000,\n // \"order_price_type\":\"limit\",\n // \"order_type\":1,\n // \"direction\":\"buy\",\n // \"offset\":\"open\",\n // \"lever_rate\":1,\n // \"order_id\":924912513206878210,\n // \"client_order_id\":null,\n // \"created_at\":1640557927189,\n // \"trade_volume\":0,\n // \"trade_turnover\":0,\n // \"fee\":0,\n // \"trade_avg_price\":null,\n // \"margin_frozen\":3.000000000000000000,\n // \"profit\":0,\n // \"status\":3,\n // \"order_source\":\"api\",\n // \"order_id_str\":\"924912513206878210\",\n // \"fee_asset\":\"USDT\",\n // \"liquidation_type\":\"0\",\n // \"canceled_at\":0,\n // \"margin_asset\":\"USDT\",\n // \"margin_account\":\"USDT\",\n // \"margin_mode\":\"cross\",\n // \"is_tpsl\":0,\n // \"real_profit\":0\n // }\n // ],\n // \"ts\":1640557982556\n // }\n //\n // linear swap isolated margin detail\n //\n // {\n // \"status\": \"ok\",\n // \"data\": {\n // \"symbol\": \"BTC\",\n // \"contract_code\": \"BTC-USDT\",\n // \"instrument_price\": 0,\n // \"final_interest\": 0,\n // \"adjust_value\": 0,\n // \"lever_rate\": 10,\n // \"direction\": \"sell\",\n // \"offset\": \"open\",\n // \"volume\": 1.000000000000000000,\n // \"price\": 13059.800000000000000000,\n // \"created_at\": 1603703614712,\n // \"canceled_at\": 0,\n // \"order_source\": \"api\",\n // \"order_price_type\": \"opponent\",\n // \"margin_frozen\": 0,\n // \"profit\": 0,\n // \"trades\": [\n // {\n // \"trade_id\": 131560927,\n // \"trade_price\": 13059.800000000000000000,\n // \"trade_volume\": 1.000000000000000000,\n // \"trade_turnover\": 13.059800000000000000,\n // \"trade_fee\": -0.005223920000000000,\n // \"created_at\": 1603703614715,\n // \"role\": \"taker\",\n // \"fee_asset\": \"USDT\",\n // \"profit\": 0,\n // \"real_profit\": 0,\n // \"id\": \"131560927-770334322963152896-1\"\n // }\n // ],\n // \"total_page\": 1,\n // \"current_page\": 1,\n // \"total_size\": 1,\n // \"liquidation_type\": \"0\",\n // \"fee_asset\": \"USDT\",\n // \"fee\": -0.005223920000000000,\n // \"order_id\": 770334322963152896,\n // \"order_id_str\": \"770334322963152896\",\n // \"client_order_id\": 57012021045,\n // \"order_type\": \"1\",\n // \"status\": 6,\n // \"trade_avg_price\": 13059.800000000000000000,\n // \"trade_turnover\": 13.059800000000000000,\n // \"trade_volume\": 1.000000000000000000,\n // \"margin_asset\": \"USDT\",\n // \"margin_mode\": \"isolated\",\n // \"margin_account\": \"BTC-USDT\",\n // \"real_profit\": 0,\n // \"is_tpsl\": 0\n // },\n // \"ts\": 1603703678477\n // }\n let order = this.safeValue(response, 'data');\n if (Array.isArray(order)) {\n order = this.safeValue(order, 0);\n }\n return this.parseOrder(order);\n }\n parseMarginBalanceHelper(balance, code, result) {\n let account = undefined;\n if (code in result) {\n account = result[code];\n }\n else {\n account = this.account();\n }\n if (balance['type'] === 'trade') {\n account['free'] = this.safeString(balance, 'balance');\n }\n if (balance['type'] === 'frozen') {\n account['used'] = this.safeString(balance, 'balance');\n }\n return account;\n }\n async fetchSpotOrdersByStates(states, symbol = undefined, since = undefined, limit = undefined, params = {}) {\n const method = this.safeString(this.options, 'fetchOrdersByStatesMethod', 'spot_private_get_v1_order_orders'); // spot_private_get_v1_order_history\n if (method === 'spot_private_get_v1_order_orders') {\n if (symbol === undefined) {\n throw new InvalidParamsError('fetchOrders() requires a symbol argument')\n .exchange(this.id);\n }\n }\n await this.loadMarkets();\n let market = undefined;\n let request = {\n // spot_private_get_v1_order_orders GET /v1/order/orders ----------\n // 'symbol': market['id'], // required\n // 'types': 'buy-market,sell-market,buy-limit,sell-limit,buy-ioc,sell-ioc,buy-stop-limit,sell-stop-limit,buy-limit-fok,sell-limit-fok,buy-stop-limit-fok,sell-stop-limit-fok',\n // 'start-time': since, // max window of 48h within a range of 180 days, within past 2 hours for cancelled orders\n // 'end-time': this.milliseconds (),\n 'states': states, // filled, partial-canceled, canceled\n // 'from': order['id'],\n // 'direct': 'next', // next, prev, used with from\n // 'size': 100, // max 100\n // spot_private_get_v1_order_history GET /v1/order/history --------\n // 'symbol': market['id'], // optional\n // 'start-time': since, // max window of 48h within a range of 180 days, within past 2 hours for cancelled orders\n // 'end-time': this.milliseconds (),\n // 'direct': 'next', // next, prev, used with from\n // 'size': 100, // max 100\n };\n if (symbol !== undefined) {\n market = this.market(symbol);\n request['symbol'] = market['id'];\n }\n if (since !== undefined) {\n request['start-time'] = since; // a window of 48 hours within 180 days\n request['end-time'] = this.sum(since, 48 * 60 * 60 * 1000);\n }\n [request, params] = this.handleUntilOption('end-time', request, params);\n if (limit !== undefined) {\n request['size'] = limit;\n }\n let response = undefined;\n if (method === 'spot_private_get_v1_order_orders') {\n response = await this.spotPrivateGetV1OrderOrders(this.extend(request, params));\n }\n else {\n response = await this.spotPrivateGetV1OrderHistory(this.extend(request, params));\n }\n //\n // spot_private_get_v1_order_orders GET /v1/order/orders\n //\n // {\n // \"status\": \"ok\",\n // \"data\": [\n // {\n // \"id\": 13997833014,\n // \"symbol\": \"ethbtc\",\n // \"account-id\": 3398321,\n // \"client-order-id\": \"23456\",\n // \"amount\": \"0.045000000000000000\",\n // \"price\": \"0.034014000000000000\",\n // \"created-at\": 1545836976871,\n // \"type\": \"sell-limit\",\n // \"field-amount\": \"0.045000000000000000\",\n // \"field-cash-amount\": \"0.001530630000000000\",\n // \"field-fees\": \"0.000003061260000000\",\n // \"finished-at\": 1545837948214,\n // \"source\": \"spot-api\",\n // \"state\": \"filled\",\n // \"canceled-at\": 0\n // }\n // ]\n // }\n //\n const data = this.safeValue(response, 'data', []);\n return this.parseOrders(data, market, since, limit);\n }\n async fetchSpotOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {\n return await this.fetchSpotOrdersByStates('pre-submitted,submitted,partial-filled,filled,partial-canceled,canceled', symbol, since, limit, params);\n }\n async fetchClosedSpotOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {\n return await this.fetchSpotOrdersByStates('filled,partial-canceled,canceled', symbol, since, limit, params);\n }\n async fetchContractOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {\n if (symbol === undefined) {\n throw new InvalidParamsError('fetchContractOrders() requires a symbol argument')\n .exchange(this.id);\n }\n await this.loadMarkets();\n const market = this.market(symbol);\n let request = {\n // POST /api/v1/contract_hisorders inverse futures ----------------\n // 'symbol': market['settleId'], // BTC, ETH, ...\n // 'order_type': '1', // 1 limit,3 opponent,4 lightning, 5 trigger order, 6 pst_only, 7 optimal_5, 8 optimal_10, 9 optimal_20, 10 fok, 11 ioc\n // POST /swap-api/v3/swap_hisorders inverse swap ------------------\n // POST /linear-swap-api/v3/swap_hisorders linear isolated --------\n // POST /linear-swap-api/v3/swap_cross_hisorders linear cross -----\n 'trade_type': 0,\n 'status': '0', // support multiple query seperated by ',',such as '3,4,5', 0: all. 3. Have sumbmitted the orders; 4. Orders partially matched; 5. Orders cancelled with partially matched; 6. Orders fully matched; 7. Orders cancelled;\n };\n let response = undefined;\n const stop = this.safeValue(params, 'stop');\n const stopLossTakeProfit = this.safeValue(params, 'stopLossTakeProfit');\n const trailing = this.safeBool(params, 'trailing', false);\n params = this.omit(params, ['stop', 'stopLossTakeProfit', 'trailing']);\n if (stop || stopLossTakeProfit || trailing) {\n if (limit !== undefined) {\n request['page_size'] = limit;\n }\n request['contract_code'] = market['id'];\n request['create_date'] = 90;\n }\n else {\n if (since !== undefined) {\n request['start_time'] = since; // max 90 days back\n // request['end_time'] = since + 172800000; // 48 hours window\n }\n request['contract'] = market['id'];\n request['type'] = 1; // 1:All Orders,2:Order in Finished Status\n }\n [request, params] = this.handleUntilOption('end_time', request, params);\n if (market['linear']) {\n let marginMode = undefined;\n [marginMode, params] = this.handleMarginModeAndParams('fetchContractOrders', params);\n marginMode = (marginMode === undefined) ? 'cross' : marginMode;\n if (marginMode === 'isolated') {\n if (stop) {\n response = await this.contractPrivatePostLinearSwapApiV1SwapTriggerHisorders(this.extend(request, params));\n }\n else if (stopLossTakeProfit) {\n response = await this.contractPrivatePostLinearSwapApiV1SwapTpslHisorders(this.extend(request, params));\n }\n else if (trailing) {\n response = await this.contractPrivatePostLinearSwapApiV1SwapTrackHisorders(this.extend(request, params));\n }\n else {\n response = await this.contractPrivatePostLinearSwapApiV3SwapHisorders(this.extend(request, params));\n }\n }\n else if (marginMode === 'cross') {\n if (stop) {\n response = await this.contractPrivatePostLinearSwapApiV1SwapCrossTriggerHisorders(this.extend(request, params));\n }\n else if (stopLossTakeProfit) {\n response = await this.contractPrivatePostLinearSwapApiV1SwapCrossTpslHisorders(this.extend(request, params));\n }\n else if (trailing) {\n response = await this.contractPrivatePostLinearSwapApiV1SwapCrossTrackHisorders(this.extend(request, params));\n }\n else {\n response = await this.contractPrivatePostLinearSwapApiV3SwapCrossHisorders(this.extend(request, params));\n }\n }\n }\n else if (market['inverse']) {\n if (market['swap']) {\n if (stop) {\n response = await this.contractPrivatePostSwapApiV1SwapTriggerHisorders(this.extend(request, params));\n }\n else if (stopLossTakeProfit) {\n response = await this.contractPrivatePostSwapApiV1SwapTpslHisorders(this.extend(request, params));\n }\n else if (trailing) {\n response = await this.contractPrivatePostSwapApiV1SwapTrackHisorders(this.extend(request, params));\n }\n else {\n response = await this.contractPrivatePostSwapApiV3SwapHisorders(this.extend(request, params));\n }\n }\n else if (market['future']) {\n request['symbol'] = market['settleId'];\n if (stop) {\n response = await this.contractPrivatePostApiV1ContractTriggerHisorders(this.extend(request, params));\n }\n else if (stopLossTakeProfit) {\n response = await this.contractPrivatePostApiV1ContractTpslHisorders(this.extend(request, params));\n }\n else if (trailing) {\n response = await this.contractPrivatePostApiV1ContractTrackHisorders(this.extend(request, params));\n }\n else {\n response = await this.contractPrivatePostApiV3ContractHisorders(this.extend(request, params));\n }\n }\n }\n //\n // future and swap\n //\n // {\n // \"code\": 200,\n // \"msg\": \"ok\",\n // \"data\": [\n // {\n // \"direction\": \"buy\",\n // \"offset\": \"open\",\n // \"volume\": 1.000000000000000000,\n // \"price\": 25000.000000000000000000,\n // \"profit\": 0E-18,\n // \"pair\": \"BTC-USDT\",\n // \"query_id\": 47403349100,\n // \"order_id\": 1103683465337593856,\n // \"contract_code\": \"BTC-USDT-230505\",\n // \"symbol\": \"BTC\",\n // \"lever_rate\": 5,\n // \"create_date\": 1683180243577,\n // \"order_source\": \"web\",\n // \"canceled_source\": \"web\",\n // \"order_price_type\": 1,\n // \"order_type\": 1,\n // \"margin_frozen\": 0E-18,\n // \"trade_volume\": 0E-18,\n // \"trade_turnover\": 0E-18,\n // \"fee\": 0E-18,\n // \"trade_avg_price\": 0,\n // \"status\": 7,\n // \"order_id_str\": \"1103683465337593856\",\n // \"fee_asset\": \"USDT\",\n // \"fee_amount\": 0,\n // \"fee_quote_amount\": 0,\n // \"liquidation_type\": \"0\",\n // \"margin_asset\": \"USDT\",\n // \"margin_mode\": \"cross\",\n // \"margin_account\": \"USDT\",\n // \"update_time\": 1683180352034,\n // \"is_tpsl\": 0,\n // \"real_profit\": 0,\n // \"trade_partition\": \"USDT\",\n // \"reduce_only\": 0,\n // \"contract_type\": \"this_week\",\n // \"business_type\": \"futures\"\n // }\n // ],\n // \"ts\": 1683239909141\n // }\n //\n // trigger\n //\n // {\n // \"status\": \"ok\",\n // \"data\": {\n // \"orders\": [\n // {\n // \"contract_type\": \"swap\",\n // \"business_type\": \"swap\",\n // \"pair\": \"BTC-USDT\",\n // \"symbol\": \"BTC\",\n // \"contract_code\": \"BTC-USDT\",\n // \"trigger_type\": \"le\",\n // \"volume\": 1.000000000000000000,\n // \"order_type\": 1,\n // \"direction\": \"buy\",\n // \"offset\": \"open\",\n // \"lever_rate\": 1,\n // \"order_id\": 1103670703588327424,\n // \"order_id_str\": \"1103670703588327424\",\n // \"relation_order_id\": \"-1\",\n // \"order_price_type\": \"limit\",\n // \"status\": 6,\n // \"order_source\": \"web\",\n // \"trigger_price\": 25000.000000000000000000,\n // \"triggered_price\": null,\n // \"order_price\": 24000.000000000000000000,\n // \"created_at\": 1683177200945,\n // \"triggered_at\": null,\n // \"order_insert_at\": 0,\n // \"canceled_at\": 1683179075234,\n // \"fail_code\": null,\n // \"fail_reason\": null,\n // \"margin_mode\": \"cross\",\n // \"margin_account\": \"USDT\",\n // \"update_time\": 1683179075958,\n // \"trade_partition\": \"USDT\",\n // \"reduce_only\": 0\n // },\n // ],\n // \"total_page\": 1,\n // \"current_page\": 1,\n // \"total_size\": 2\n // },\n // \"ts\": 1683239702792\n // }\n //\n // stop-loss and take-profit\n //\n // {\n // \"status\": \"ok\",\n // \"data\": {\n // \"orders\": [\n // {\n // \"contract_type\": \"swap\",\n // \"business_type\": \"swap\",\n // \"pair\": \"BTC-USDT\",\n // \"symbol\": \"BTC\",\n // \"contract_code\": \"BTC-USDT\",\n // \"margin_mode\": \"cross\",\n // \"margin_account\": \"USDT\",\n // \"volume\": 1.000000000000000000,\n // \"order_type\": 1,\n // \"tpsl_order_type\": \"sl\",\n // \"direction\": \"sell\",\n // \"order_id\": 1103680386844839936,\n // \"order_id_str\": \"1103680386844839936\",\n // \"order_source\": \"web\",\n // \"trigger_type\": \"le\",\n // \"trigger_price\": 25000.000000000000000000,\n // \"created_at\": 1683179509613,\n // \"order_price_type\": \"market\",\n // \"status\": 11,\n // \"source_order_id\": null,\n // \"relation_tpsl_order_id\": \"-1\",\n // \"canceled_at\": 0,\n // \"fail_code\": null,\n // \"fail_reason\": null,\n // \"triggered_price\": null,\n // \"relation_order_id\": \"-1\",\n // \"update_time\": 1683179968231,\n // \"order_price\": 0E-18,\n // \"trade_partition\": \"USDT\"\n // },\n // ],\n // \"total_page\": 1,\n // \"current_page\": 1,\n // \"total_size\": 2\n // },\n // \"ts\": 1683229230233\n // }\n //\n let orders = this.safeValue(response, 'data');\n if (!Array.isArray(orders)) {\n orders = this.safeValue(orders, 'orders', []);\n }\n return this.parseOrders(orders, market, since, limit);\n }\n async fetchClosedContractOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {\n const request = {\n 'status': '5,6,7', // comma separated, 0 all, 3 submitted orders, 4 partially matched, 5 partially cancelled, 6 fully matched and closed, 7 canceled\n };\n return await this.fetchContractOrders(symbol, since, limit, this.extend(request, params));\n }\n async fetchOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name huobi#fetchOrders\n * @see https://huobiapi.github.io/docs/spot/v1/en/#search-past-orders\n * @see https://huobiapi.github.io/docs/spot/v1/en/#search-historical-orders-within-48-hours\n * @see https://huobiapi.github.io/docs/usdt_swap/v1/en/#isolated-get-history-orders-new\n * @see https://huobiapi.github.io/docs/usdt_swap/v1/en/#cross-get-history-orders-new\n * @see https://huobiapi.github.io/docs/coin_margined_swap/v1/en/#get-history-orders-new\n * @see https://huobiapi.github.io/docs/coin_margined_swap/v1/en/#query-history-orders-via-multiple-fields-new\n * @description fetches information on multiple orders made by the user\n * @param {string} symbol unified market symbol of the market orders were made in\n * @param {int} [since] the earliest time in ms to fetch orders for\n * @param {int} [limit] the maximum number of order structures to retrieve\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {bool} [params.stop] *contract only* if the orders are stop trigger orders or not\n * @param {bool} [params.stopLossTakeProfit] *contract only* if the orders are stop-loss or take-profit orders\n * @param {int} [params.until] the latest time in ms to fetch entries for\n * @param {boolean} [params.trailing] *contract only* set to true if you want to fetch trailing stop orders\n * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n await this.loadMarkets();\n let market = undefined;\n if (symbol !== undefined) {\n market = this.market(symbol);\n }\n let marketType = undefined;\n [marketType, params] = this.handleMarketTypeAndParams('fetchOrders', market, params);\n const contract = (marketType === 'swap') || (marketType === 'future');\n if (contract && (symbol === undefined)) {\n throw new InvalidParamsError(' fetchOrders() requires a symbol argument for ' + marketType + ' orders')\n .exchange(this.id);\n }\n if (contract) {\n return await this.fetchContractOrders(symbol, since, limit, params);\n }\n else {\n return await this.fetchSpotOrders(symbol, since, limit, params);\n }\n }\n async fetchClosedOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name huobi#fetchClosedOrders\n * @see https://huobiapi.github.io/docs/spot/v1/en/#search-past-orders\n * @see https://huobiapi.github.io/docs/spot/v1/en/#search-historical-orders-within-48-hours\n * @see https://huobiapi.github.io/docs/usdt_swap/v1/en/#isolated-get-history-orders-new\n * @see https://huobiapi.github.io/docs/usdt_swap/v1/en/#cross-get-history-orders-new\n * @see https://huobiapi.github.io/docs/coin_margined_swap/v1/en/#get-history-orders-new\n * @see https://huobiapi.github.io/docs/coin_margined_swap/v1/en/#query-history-orders-via-multiple-fields-new\n * @description fetches information on multiple closed orders made by the user\n * @param {string} symbol unified market symbol of the market orders were made in\n * @param {int} [since] the earliest time in ms to fetch orders for\n * @param {int} [limit] the maximum number of order structures to retrieve\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {int} [params.until] the latest time in ms to fetch entries for\n * @param {boolean} [params.paginate] default false, when true will automatically paginate by calling this endpoint multiple times. See in the docs all the [availble parameters](https://github.com/ccxt/ccxt/wiki/Manual#pagination-params)\n * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n await this.loadMarkets();\n let paginate = false;\n [paginate, params] = this.handleOptionAndParams(params, 'fetchClosedOrders', 'paginate');\n if (paginate) {\n return await this.fetchPaginatedCallDynamic('fetchClosedOrders', symbol, since, limit, params, 100);\n }\n let market = undefined;\n if (symbol !== undefined) {\n market = this.market(symbol);\n }\n let marketType = undefined;\n [marketType, params] = this.handleMarketTypeAndParams('fetchClosedOrders', market, params);\n if (marketType === 'spot') {\n return await this.fetchClosedSpotOrders(symbol, since, limit, params);\n }\n else {\n return await this.fetchClosedContractOrders(symbol, since, limit, params);\n }\n }\n async fetchOpenOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name huobi#fetchOpenOrders\n * @see https://huobiapi.github.io/docs/spot/v1/en/#get-all-open-orders\n * @see https://huobiapi.github.io/docs/usdt_swap/v1/en/#isolated-current-unfilled-order-acquisition\n * @see https://huobiapi.github.io/docs/usdt_swap/v1/en/#cross-current-unfilled-order-acquisition\n * @description fetch all unfilled currently open orders\n * @param {string} symbol unified market symbol\n * @param {int} [since] the earliest time in ms to fetch open orders for\n * @param {int} [limit] the maximum number of open order structures to retrieve\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {bool} [params.stop] *contract only* if the orders are stop trigger orders or not\n * @param {bool} [params.stopLossTakeProfit] *contract only* if the orders are stop-loss or take-profit orders\n * @param {boolean} [params.trailing] *contract only* set to true if you want to fetch trailing stop orders\n * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n await this.loadMarkets();\n let market = undefined;\n if (symbol !== undefined) {\n market = this.market(symbol);\n }\n const request = {};\n let marketType = undefined;\n [marketType, params] = this.handleMarketTypeAndParams('fetchOpenOrders', market, params);\n let response = undefined;\n if (marketType === 'spot') {\n if (symbol !== undefined) {\n request['symbol'] = market['id'];\n }\n // todo replace with fetchAccountIdByType\n let accountId = this.safeString(params, 'account-id');\n if (accountId === undefined) {\n // pick the first account\n await this.loadAccounts();\n for (let i = 0; i < this.accounts.length; i++) {\n const account = this.accounts[i];\n if (account['type'] === 'spot') {\n accountId = this.safeString(account, 'id');\n if (accountId !== undefined) {\n break;\n }\n }\n }\n }\n request['account-id'] = accountId;\n if (limit !== undefined) {\n request['size'] = limit;\n }\n params = this.omit(params, 'account-id');\n response = await this.spotPrivateGetV1OrderOpenOrders(this.extend(request, params));\n }\n else {\n if (symbol === undefined) {\n throw new InvalidParamsError('fetchOpenOrders() requires a symbol argument')\n .exchange(this.id);\n }\n if (limit !== undefined) {\n request['page_size'] = limit;\n }\n request['contract_code'] = market['id'];\n const stop = this.safeValue(params, 'stop');\n const stopLossTakeProfit = this.safeValue(params, 'stopLossTakeProfit');\n const trailing = this.safeBool(params, 'trailing', false);\n params = this.omit(params, ['stop', 'stopLossTakeProfit', 'trailing']);\n if (market['linear']) {\n let marginMode = undefined;\n [marginMode, params] = this.handleMarginModeAndParams('fetchOpenOrders', params);\n marginMode = (marginMode === undefined) ? 'cross' : marginMode;\n if (marginMode === 'isolated') {\n if (stop) {\n response = await this.contractPrivatePostLinearSwapApiV1SwapTriggerOpenorders(this.extend(request, params));\n }\n else if (stopLossTakeProfit) {\n response = await this.contractPrivatePostLinearSwapApiV1SwapTpslOpenorders(this.extend(request, params));\n }\n else if (trailing) {\n response = await this.contractPrivatePostLinearSwapApiV1SwapTrackOpenorders(this.extend(request, params));\n }\n else {\n response = await this.contractPrivatePostLinearSwapApiV1SwapOpenorders(this.extend(request, params));\n }\n }\n else if (marginMode === 'cross') {\n if (stop) {\n response = await this.contractPrivatePostLinearSwapApiV1SwapCrossTriggerOpenorders(this.extend(request, params));\n }\n else if (stopLossTakeProfit) {\n response = await this.contractPrivatePostLinearSwapApiV1SwapCrossTpslOpenorders(this.extend(request, params));\n }\n else if (trailing) {\n response = await this.contractPrivatePostLinearSwapApiV1SwapCrossTrackOpenorders(this.extend(request, params));\n }\n else {\n response = await this.contractPrivatePostLinearSwapApiV1SwapCrossOpenorders(this.extend(request, params));\n }\n }\n }\n else if (market['inverse']) {\n if (market['swap']) {\n if (stop) {\n response = await this.contractPrivatePostSwapApiV1SwapTriggerOpenorders(this.extend(request, params));\n }\n else if (stopLossTakeProfit) {\n response = await this.contractPrivatePostSwapApiV1SwapTpslOpenorders(this.extend(request, params));\n }\n else if (trailing) {\n response = await this.contractPrivatePostSwapApiV1SwapTrackOpenorders(this.extend(request, params));\n }\n else {\n response = await this.contractPrivatePostSwapApiV1SwapOpenorders(this.extend(request, params));\n }\n }\n else if (market['future']) {\n request['symbol'] = market['settleId'];\n if (stop) {\n response = await this.contractPrivatePostApiV1ContractTriggerOpenorders(this.extend(request, params));\n }\n else if (stopLossTakeProfit) {\n response = await this.contractPrivatePostApiV1ContractTpslOpenorders(this.extend(request, params));\n }\n else if (trailing) {\n response = await this.contractPrivatePostApiV1ContractTrackOpenorders(this.extend(request, params));\n }\n else {\n response = await this.contractPrivatePostApiV1ContractOpenorders(this.extend(request, params));\n }\n }\n }\n }\n //\n // spot\n //\n // {\n // \"status\":\"ok\",\n // \"data\":[\n // {\n // \"symbol\":\"ethusdt\",\n // \"source\":\"api\",\n // \"amount\":\"0.010000000000000000\",\n // \"account-id\":1528640,\n // \"created-at\":1561597491963,\n // \"price\":\"400.000000000000000000\",\n // \"filled-amount\":\"0.0\",\n // \"filled-cash-amount\":\"0.0\",\n // \"filled-fees\":\"0.0\",\n // \"id\":38477101630,\n // \"state\":\"submitted\",\n // \"type\":\"sell-limit\"\n // }\n // ]\n // }\n //\n // futures\n //\n // {\n // \"status\": \"ok\",\n // \"data\": {\n // \"orders\": [\n // {\n // \"symbol\": \"ADA\",\n // \"contract_code\": \"ADA201225\",\n // \"contract_type\": \"quarter\",\n // \"volume\": 1,\n // \"price\": 0.0925,\n // \"order_price_type\": \"post_only\",\n // \"order_type\": 1,\n // \"direction\": \"buy\",\n // \"offset\": \"close\",\n // \"lever_rate\": 20,\n // \"order_id\": 773131315209248768,\n // \"client_order_id\": null,\n // \"created_at\": 1604370469629,\n // \"trade_volume\": 0,\n // \"trade_turnover\": 0,\n // \"fee\": 0,\n // \"trade_avg_price\": null,\n // \"margin_frozen\": 0,\n // \"profit\": 0,\n // \"status\": 3,\n // \"order_source\": \"web\",\n // \"order_id_str\": \"773131315209248768\",\n // \"fee_asset\": \"ADA\",\n // \"liquidation_type\": null,\n // \"canceled_at\": null,\n // \"is_tpsl\": 0,\n // \"update_time\": 1606975980467,\n // \"real_profit\": 0\n // }\n // ],\n // \"total_page\": 1,\n // \"current_page\": 1,\n // \"total_size\": 1\n // },\n // \"ts\": 1604370488518\n // }\n //\n // trigger\n //\n // {\n // \"status\": \"ok\",\n // \"data\": {\n // \"orders\": [\n // {\n // \"contract_type\": \"swap\",\n // \"business_type\": \"swap\",\n // \"pair\": \"BTC-USDT\",\n // \"symbol\": \"BTC\",\n // \"contract_code\": \"BTC-USDT\",\n // \"trigger_type\": \"le\",\n // \"volume\": 1.000000000000000000,\n // \"order_type\": 1,\n // \"direction\": \"buy\",\n // \"offset\": \"open\",\n // \"lever_rate\": 1,\n // \"order_id\": 1103670703588327424,\n // \"order_id_str\": \"1103670703588327424\",\n // \"order_source\": \"web\",\n // \"trigger_price\": 25000.000000000000000000,\n // \"order_price\": 24000.000000000000000000,\n // \"created_at\": 1683177200945,\n // \"order_price_type\": \"limit\",\n // \"status\": 2,\n // \"margin_mode\": \"cross\",\n // \"margin_account\": \"USDT\",\n // \"trade_partition\": \"USDT\",\n // \"reduce_only\": 0\n // }\n // ],\n // \"total_page\": 1,\n // \"current_page\": 1,\n // \"total_size\": 1\n // },\n // \"ts\": 1683177805320\n // }\n //\n // stop-loss and take-profit\n //\n // {\n // \"status\": \"ok\",\n // \"data\": {\n // \"orders\": [\n // {\n // \"contract_type\": \"swap\",\n // \"business_type\": \"swap\",\n // \"pair\": \"BTC-USDT\",\n // \"symbol\": \"BTC\",\n // \"contract_code\": \"BTC-USDT\",\n // \"margin_mode\": \"cross\",\n // \"margin_account\": \"USDT\",\n // \"volume\": 1.000000000000000000,\n // \"order_type\": 1,\n // \"direction\": \"sell\",\n // \"order_id\": 1103680386844839936,\n // \"order_id_str\": \"1103680386844839936\",\n // \"order_source\": \"web\",\n // \"trigger_type\": \"le\",\n // \"trigger_price\": 25000.000000000000000000,\n // \"order_price\": 0E-18,\n // \"created_at\": 1683179509613,\n // \"order_price_type\": \"market\",\n // \"status\": 2,\n // \"tpsl_order_type\": \"sl\",\n // \"source_order_id\": null,\n // \"relation_tpsl_order_id\": \"-1\",\n // \"trade_partition\": \"USDT\"\n // }\n // ],\n // \"total_page\": 1,\n // \"current_page\": 1,\n // \"total_size\": 1\n // },\n // \"ts\": 1683179527011\n // }\n //\n // trailing\n //\n // {\n // \"status\": \"ok\",\n // \"data\": {\n // \"orders\": [\n // {\n // \"contract_type\": \"swap\",\n // \"business_type\": \"swap\",\n // \"pair\": \"BTC-USDT\",\n // \"symbol\": \"BTC\",\n // \"contract_code\": \"BTC-USDT\",\n // \"volume\": 1.000000000000000000,\n // \"order_type\": 1,\n // \"direction\": \"sell\",\n // \"offset\": \"close\",\n // \"lever_rate\": 1,\n // \"order_id\": 1192021437253877761,\n // \"order_id_str\": \"1192021437253877761\",\n // \"order_source\": \"api\",\n // \"created_at\": 1704241657328,\n // \"order_price_type\": \"formula_price\",\n // \"status\": 2,\n // \"callback_rate\": 0.050000000000000000,\n // \"active_price\": 50000.000000000000000000,\n // \"is_active\": 0,\n // \"margin_mode\": \"cross\",\n // \"margin_account\": \"USDT\",\n // \"trade_partition\": \"USDT\",\n // \"reduce_only\": 1\n // },\n // ],\n // \"total_page\": 1,\n // \"current_page\": 1,\n // \"total_size\": 2\n // },\n // \"ts\": 1704242440106\n // }\n //\n let orders = this.safeValue(response, 'data');\n if (!Array.isArray(orders)) {\n orders = this.safeValue(orders, 'orders', []);\n }\n return this.parseOrders(orders, market, since, limit);\n }\n parseOrderStatus(status) {\n const statuses = {\n // spot\n 'partial-filled': 'open',\n 'partial-canceled': 'canceled',\n 'filled': 'closed',\n 'canceled': 'canceled',\n 'submitted': 'open',\n 'created': 'open',\n // contract\n '1': 'open',\n '2': 'open',\n '3': 'open',\n '4': 'open',\n '5': 'canceled',\n '6': 'closed',\n '7': 'canceled',\n '11': 'canceling',\n };\n return this.safeString(statuses, status, status);\n }\n parseOrder(order, market = undefined) {\n //\n // spot\n //\n // {\n // \"id\": 13997833014,\n // \"symbol\": \"ethbtc\",\n // \"account-id\": 3398321,\n // \"amount\": \"0.045000000000000000\",\n // \"price\": \"0.034014000000000000\",\n // \"created-at\": 1545836976871,\n // \"type\": \"sell-limit\",\n // \"field-amount\": \"0.045000000000000000\", // they have fixed it for filled-amount\n // \"field-cash-amount\": \"0.001530630000000000\", // they have fixed it for filled-cash-amount\n // \"field-fees\": \"0.000003061260000000\", // they have fixed it for filled-fees\n // \"finished-at\": 1545837948214,\n // \"source\": \"spot-api\",\n // \"state\": \"filled\",\n // \"canceled-at\": 0\n // }\n //\n // {\n // \"id\": 20395337822,\n // \"symbol\": \"ethbtc\",\n // \"account-id\": 5685075,\n // \"amount\": \"0.001000000000000000\",\n // \"price\": \"0.0\",\n // \"created-at\": 1545831584023,\n // \"type\": \"buy-market\",\n // \"field-amount\": \"0.029100000000000000\", // they have fixed it for filled-amount\n // \"field-cash-amount\": \"0.000999788700000000\", // they have fixed it for filled-cash-amount\n // \"field-fees\": \"0.000058200000000000\", // they have fixed it for filled-fees\n // \"finished-at\": 1545831584181,\n // \"source\": \"spot-api\",\n // \"state\": \"filled\",\n // \"canceled-at\": 0\n // }\n //\n // linear swap cross margin createOrder\n //\n // {\n // \"order_id\":924660854912552960,\n // \"order_id_str\":\"924660854912552960\"\n // }\n //\n // contracts fetchOrder\n //\n // {\n // \"business_type\":\"swap\",\n // \"contract_type\":\"swap\",\n // \"pair\":\"BTC-USDT\",\n // \"symbol\":\"BTC\",\n // \"contract_code\":\"BTC-USDT\",\n // \"volume\":1,\n // \"price\":3000,\n // \"order_price_type\":\"limit\",\n // \"order_type\":1,\n // \"direction\":\"buy\",\n // \"offset\":\"open\",\n // \"lever_rate\":1,\n // \"order_id\":924912513206878210,\n // \"client_order_id\":null,\n // \"created_at\":1640557927189,\n // \"trade_volume\":0,\n // \"trade_turnover\":0,\n // \"fee\":0,\n // \"trade_avg_price\":null,\n // \"margin_frozen\":3.000000000000000000,\n // \"profit\":0,\n // \"status\":3,\n // \"order_source\":\"api\",\n // \"order_id_str\":\"924912513206878210\",\n // \"fee_asset\":\"USDT\",\n // \"liquidation_type\":\"0\",\n // \"canceled_at\":0,\n // \"margin_asset\":\"USDT\",\n // \"margin_account\":\"USDT\",\n // \"margin_mode\":\"cross\",\n // \"is_tpsl\":0,\n // \"real_profit\":0\n // }\n //\n // contracts fetchOrder detailed\n //\n // {\n // \"symbol\": \"BTC\",\n // \"contract_code\": \"BTC-USDT\",\n // \"instrument_price\": 0,\n // \"final_interest\": 0,\n // \"adjust_value\": 0,\n // \"lever_rate\": 10,\n // \"direction\": \"sell\",\n // \"offset\": \"open\",\n // \"volume\": 1.000000000000000000,\n // \"price\": 13059.800000000000000000,\n // \"created_at\": 1603703614712,\n // \"canceled_at\": 0,\n // \"order_source\": \"api\",\n // \"order_price_type\": \"opponent\",\n // \"margin_frozen\": 0,\n // \"profit\": 0,\n // \"trades\": [\n // {\n // \"trade_id\": 131560927,\n // \"trade_price\": 13059.800000000000000000,\n // \"trade_volume\": 1.000000000000000000,\n // \"trade_turnover\": 13.059800000000000000,\n // \"trade_fee\": -0.005223920000000000,\n // \"created_at\": 1603703614715,\n // \"role\": \"taker\",\n // \"fee_asset\": \"USDT\",\n // \"profit\": 0,\n // \"real_profit\": 0,\n // \"id\": \"131560927-770334322963152896-1\"\n // }\n // ],\n // \"total_page\": 1,\n // \"current_page\": 1,\n // \"total_size\": 1,\n // \"liquidation_type\": \"0\",\n // \"fee_asset\": \"USDT\",\n // \"fee\": -0.005223920000000000,\n // \"order_id\": 770334322963152896,\n // \"order_id_str\": \"770334322963152896\",\n // \"client_order_id\": 57012021045,\n // \"order_type\": \"1\",\n // \"status\": 6,\n // \"trade_avg_price\": 13059.800000000000000000,\n // \"trade_turnover\": 13.059800000000000000,\n // \"trade_volume\": 1.000000000000000000,\n // \"margin_asset\": \"USDT\",\n // \"margin_mode\": \"isolated\",\n // \"margin_account\": \"BTC-USDT\",\n // \"real_profit\": 0,\n // \"is_tpsl\": 0\n // }\n //\n // future and swap: fetchOrders\n //\n // {\n // \"order_id\": 773131315209248768,\n // \"contract_code\": \"ADA201225\",\n // \"symbol\": \"ADA\",\n // \"lever_rate\": 20,\n // \"direction\": \"buy\",\n // \"offset\": \"close\",\n // \"volume\": 1,\n // \"price\": 0.0925,\n // \"create_date\": 1604370469629,\n // \"update_time\": 1603704221118,\n // \"order_source\": \"web\",\n // \"order_price_type\": 6,\n // \"order_type\": 1,\n // \"margin_frozen\": 0,\n // \"profit\": 0,\n // \"contract_type\": \"quarter\",\n // \"trade_volume\": 0,\n // \"trade_turnover\": 0,\n // \"fee\": 0,\n // \"trade_avg_price\": 0,\n // \"status\": 3,\n // \"order_id_str\": \"773131315209248768\",\n // \"fee_asset\": \"ADA\",\n // \"liquidation_type\": \"0\",\n // \"is_tpsl\": 0,\n // \"real_profit\": 0\n // \"margin_asset\": \"USDT\",\n // \"margin_mode\": \"cross\",\n // \"margin_account\": \"USDT\",\n // \"trade_partition\": \"USDT\", // only in isolated & cross of linear\n // \"reduce_only\": \"1\", // only in isolated & cross of linear\n // \"contract_type\": \"quarter\", // only in cross-margin (inverse & linear)\n // \"pair\": \"BTC-USDT\", // only in cross-margin (inverse & linear)\n // \"business_type\": \"futures\" // only in cross-margin (inverse & linear)\n // }\n //\n // trigger: fetchOpenOrders\n //\n // {\n // \"contract_type\": \"swap\",\n // \"business_type\": \"swap\",\n // \"pair\": \"BTC-USDT\",\n // \"symbol\": \"BTC\",\n // \"contract_code\": \"BTC-USDT\",\n // \"trigger_type\": \"le\",\n // \"volume\": 1.000000000000000000,\n // \"order_type\": 1,\n // \"direction\": \"buy\",\n // \"offset\": \"open\",\n // \"lever_rate\": 1,\n // \"order_id\": 1103670703588327424,\n // \"order_id_str\": \"1103670703588327424\",\n // \"order_source\": \"web\",\n // \"trigger_price\": 25000.000000000000000000,\n // \"order_price\": 24000.000000000000000000,\n // \"created_at\": 1683177200945,\n // \"order_price_type\": \"limit\",\n // \"status\": 2,\n // \"margin_mode\": \"cross\",\n // \"margin_account\": \"USDT\",\n // \"trade_partition\": \"USDT\",\n // \"reduce_only\": 0\n // }\n //\n // stop-loss and take-profit: fetchOpenOrders\n //\n // {\n // \"contract_type\": \"swap\",\n // \"business_type\": \"swap\",\n // \"pair\": \"BTC-USDT\",\n // \"symbol\": \"BTC\",\n // \"contract_code\": \"BTC-USDT\",\n // \"margin_mode\": \"cross\",\n // \"margin_account\": \"USDT\",\n // \"volume\": 1.000000000000000000,\n // \"order_type\": 1,\n // \"direction\": \"sell\",\n // \"order_id\": 1103680386844839936,\n // \"order_id_str\": \"1103680386844839936\",\n // \"order_source\": \"web\",\n // \"trigger_type\": \"le\",\n // \"trigger_price\": 25000.000000000000000000,\n // \"order_price\": 0E-18,\n // \"created_at\": 1683179509613,\n // \"order_price_type\": \"market\",\n // \"status\": 2,\n // \"tpsl_order_type\": \"sl\",\n // \"source_order_id\": null,\n // \"relation_tpsl_order_id\": \"-1\",\n // \"trade_partition\": \"USDT\"\n // }\n //\n // trailing: fetchOpenOrders\n //\n // {\n // \"contract_type\": \"swap\",\n // \"business_type\": \"swap\",\n // \"pair\": \"BTC-USDT\",\n // \"symbol\": \"BTC\",\n // \"contract_code\": \"BTC-USDT\",\n // \"volume\": 1.000000000000000000,\n // \"order_type\": 1,\n // \"direction\": \"sell\",\n // \"offset\": \"close\",\n // \"lever_rate\": 1,\n // \"order_id\": 1192021437253877761,\n // \"order_id_str\": \"1192021437253877761\",\n // \"order_source\": \"api\",\n // \"created_at\": 1704241657328,\n // \"order_price_type\": \"formula_price\",\n // \"status\": 2,\n // \"callback_rate\": 0.050000000000000000,\n // \"active_price\": 50000.000000000000000000,\n // \"is_active\": 0,\n // \"margin_mode\": \"cross\",\n // \"margin_account\": \"USDT\",\n // \"trade_partition\": \"USDT\",\n // \"reduce_only\": 1\n // }\n //\n // trigger: fetchOrders\n //\n // {\n // \"contract_type\": \"swap\",\n // \"business_type\": \"swap\",\n // \"pair\": \"BTC-USDT\",\n // \"symbol\": \"BTC\",\n // \"contract_code\": \"BTC-USDT\",\n // \"trigger_type\": \"le\",\n // \"volume\": 1.000000000000000000,\n // \"order_type\": 1,\n // \"direction\": \"buy\",\n // \"offset\": \"open\",\n // \"lever_rate\": 1,\n // \"order_id\": 1103670703588327424,\n // \"order_id_str\": \"1103670703588327424\",\n // \"relation_order_id\": \"-1\",\n // \"order_price_type\": \"limit\",\n // \"status\": 6,\n // \"order_source\": \"web\",\n // \"trigger_price\": 25000.000000000000000000,\n // \"triggered_price\": null,\n // \"order_price\": 24000.000000000000000000,\n // \"created_at\": 1683177200945,\n // \"triggered_at\": null,\n // \"order_insert_at\": 0,\n // \"canceled_at\": 1683179075234,\n // \"fail_code\": null,\n // \"fail_reason\": null,\n // \"margin_mode\": \"cross\",\n // \"margin_account\": \"USDT\",\n // \"update_time\": 1683179075958,\n // \"trade_partition\": \"USDT\",\n // \"reduce_only\": 0\n // }\n //\n // stop-loss and take-profit: fetchOrders\n //\n // {\n // \"contract_type\": \"swap\",\n // \"business_type\": \"swap\",\n // \"pair\": \"BTC-USDT\",\n // \"symbol\": \"BTC\",\n // \"contract_code\": \"BTC-USDT\",\n // \"margin_mode\": \"cross\",\n // \"margin_account\": \"USDT\",\n // \"volume\": 1.000000000000000000,\n // \"order_type\": 1,\n // \"tpsl_order_type\": \"sl\",\n // \"direction\": \"sell\",\n // \"order_id\": 1103680386844839936,\n // \"order_id_str\": \"1103680386844839936\",\n // \"order_source\": \"web\",\n // \"trigger_type\": \"le\",\n // \"trigger_price\": 25000.000000000000000000,\n // \"created_at\": 1683179509613,\n // \"order_price_type\": \"market\",\n // \"status\": 11,\n // \"source_order_id\": null,\n // \"relation_tpsl_order_id\": \"-1\",\n // \"canceled_at\": 0,\n // \"fail_code\": null,\n // \"fail_reason\": null,\n // \"triggered_price\": null,\n // \"relation_order_id\": \"-1\",\n // \"update_time\": 1683179968231,\n // \"order_price\": 0E-18,\n // \"trade_partition\": \"USDT\"\n // }\n //\n // spot: createOrders\n //\n // [\n // {\n // \"order-id\": 936847569789079,\n // \"client-order-id\": \"AA03022abc3a55e82c-0087-4fc2-beac-112fdebb1ee9\"\n // },\n // {\n // \"client-order-id\": \"AA03022abcdb3baefb-3cfa-4891-8009-082b3d46ca82\",\n // \"err-code\": \"account-frozen-balance-insufficient-error\",\n // \"err-msg\": \"trade account balance is not enough, left: `89`\"\n // }\n // ]\n //\n // swap and future: createOrders\n //\n // [\n // {\n // \"index\": 2,\n // \"err_code\": 1047,\n // \"err_msg\": \"Insufficient margin available.\"\n // },\n // {\n // \"order_id\": 1172923090632953857,\n // \"index\": 1,\n // \"order_id_str\": \"1172923090632953857\"\n // }\n // ]\n //\n const rejectedCreateOrders = this.safeString2(order, 'err_code', 'err-code');\n let status = this.parseOrderStatus(this.safeString2(order, 'state', 'status'));\n if (rejectedCreateOrders !== undefined) {\n status = 'rejected';\n }\n const id = this.safeStringN(order, ['id', 'order_id_str', 'order-id']);\n let side = this.safeString(order, 'direction');\n let type = this.safeString(order, 'order_price_type');\n if ('type' in order) {\n const orderType = order['type'].split('-');\n side = orderType[0];\n type = orderType[1];\n }\n const marketId = this.safeString2(order, 'contract_code', 'symbol');\n market = this.safeMarket(marketId, market);\n const timestamp = this.safeIntegerN(order, ['created_at', 'created-at', 'create_date']);\n const clientOrderId = this.safeString2(order, 'client_order_id', 'client-or' + 'der-id'); // transpiler regex trick for php issue\n let cost = undefined;\n let amount = undefined;\n if ((type !== undefined) && (type.indexOf('market') >= 0)) {\n // for market orders amount is in quote currency, meaning it is the cost\n if (side === 'sell') {\n cost = this.safeString(order, 'field-cash-amount');\n }\n else {\n cost = this.safeString(order, 'amount');\n }\n }\n else {\n amount = this.safeString2(order, 'volume', 'amount');\n cost = this.safeStringN(order, ['filled-cash-amount', 'field-cash-amount', 'trade_turnover']); // same typo\n }\n const filled = this.safeStringN(order, ['filled-amount', 'field-amount', 'trade_volume']); // typo in their API, filled amount\n const price = this.safeString2(order, 'price', 'order_price');\n let feeCost = this.safeString2(order, 'filled-fees', 'field-fees'); // typo in their API, filled feeSide\n feeCost = this.safeString(order, 'fee', feeCost);\n let fee = undefined;\n if (feeCost !== undefined) {\n let feeCurrency = undefined;\n const feeCurrencyId = this.safeString(order, 'fee_asset');\n if (feeCurrencyId !== undefined) {\n feeCurrency = this.safeCurrencyCode(feeCurrencyId);\n }\n else {\n feeCurrency = (side === 'sell') ? market['quote'] : market['base'];\n }\n fee = {\n 'cost': feeCost,\n 'currency': feeCurrency,\n };\n }\n const stopPrice = this.safeString2(order, 'stop-price', 'trigger_price');\n const average = this.safeString(order, 'trade_avg_price');\n const trades = this.safeValue(order, 'trades');\n const reduceOnlyInteger = this.safeInteger(order, 'reduce_only');\n let reduceOnly = undefined;\n if (reduceOnlyInteger !== undefined) {\n reduceOnly = (reduceOnlyInteger === 0) ? false : true;\n }\n return this.safeOrder({\n 'info': order,\n 'id': id,\n 'clientOrderId': clientOrderId,\n 'timestamp': timestamp,\n 'datetime': this.iso8601(timestamp),\n 'lastTradeTimestamp': undefined,\n 'symbol': market['symbol'],\n 'type': type,\n 'timeInForce': undefined,\n 'postOnly': undefined,\n 'side': side,\n 'price': price,\n 'stopPrice': stopPrice,\n 'triggerPrice': stopPrice,\n 'average': average,\n 'cost': cost,\n 'amount': amount,\n 'filled': filled,\n 'remaining': undefined,\n 'status': status,\n 'reduceOnly': reduceOnly,\n 'fee': fee,\n 'trades': trades,\n }, market);\n }\n async createMarketBuyOrderWithCost(symbol, cost, params = {}) {\n /**\n * @method\n * @name htx#createMarketBuyOrderWithCost\n * @description create a market buy order by providing the symbol and cost\n * @see https://www.htx.com/en-us/opend/newApiPages/?id=7ec4ee16-7773-11ed-9966-0242ac110003\n * @param {string} symbol unified symbol of the market to create an order in\n * @param {float} cost how much you want to trade in units of the quote currency\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n await this.loadMarkets();\n const market = this.market(symbol);\n if (!market['spot']) {\n throw new MarketTypeNotSupportedError(market['type'])\n .addMessage('It supports spot orders only')\n .exchange(this.id);\n }\n params['createMarketBuyOrderRequiresPrice'] = false;\n return await this.createOrder(symbol, 'market', 'buy', cost, undefined, params);\n }\n async createTrailingPercentOrder(symbol, type, side, amount, price = undefined, trailingPercent = undefined, trailingTriggerPrice = undefined, params = {}) {\n /**\n * @method\n * @name htx#createTrailingPercentOrder\n * @description create a trailing order by providing the symbol, type, side, amount, price and trailingPercent\n * @param {string} symbol unified symbol of the market to create an order in\n * @param {string} type 'market' or 'limit'\n * @param {string} side 'buy' or 'sell'\n * @param {float} amount how much you want to trade in units of the base currency, or number of contracts\n * @param {float} [price] the price for the order to be filled at, in units of the quote currency, ignored in market orders\n * @param {float} trailingPercent the percent to trail away from the current market price\n * @param {float} trailingTriggerPrice the price to activate a trailing order, default uses the price argument\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n if (trailingPercent === undefined) {\n throw new InvalidParamsError('createTrailingPercentOrder() requires a trailingPercent argument')\n .exchange(this.id);\n }\n if (trailingTriggerPrice === undefined) {\n throw new InvalidParamsError('createTrailingPercentOrder() requires a trailingTriggerPrice argument')\n .exchange(this.id);\n }\n params['trailingPercent'] = trailingPercent;\n params['trailingTriggerPrice'] = trailingTriggerPrice;\n return await this.createOrder(symbol, type, side, amount, price, params);\n }\n async createSpotOrderRequest(symbol, type, side, amount, price = undefined, params = {}) {\n /**\n * @method\n * @ignore\n * @name htx#createSpotOrderRequest\n * @description helper function to build request\n * @param {string} symbol unified symbol of the market to create an order in\n * @param {string} type 'market' or 'limit'\n * @param {string} side 'buy' or 'sell'\n * @param {float} amount how much you want to trade in units of the base currency\n * @param {float} [price] the price at which the order is to be fullfilled, in units of the quote currency, ignored in market orders\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {string} [params.timeInForce] supports 'IOC' and 'FOK'\n * @param {float} [params.cost] the quote quantity that can be used as an alternative for the amount for market buy orders\n * @returns {object} request to be sent to the exchange\n */\n await this.loadMarkets();\n await this.loadAccounts();\n const market = this.market(symbol);\n let marginMode = undefined;\n [marginMode, params] = this.handleMarginModeAndParams('createOrder', params);\n const accountId = await this.fetchAccountIdByType(market['type'], marginMode, symbol);\n const request = {\n // spot -----------------------------------------------------------\n 'account-id': accountId,\n 'symbol': market['id'],\n // 'type': side + '-' + type, // buy-market, sell-market, buy-limit, sell-limit, buy-ioc, sell-ioc, buy-limit-maker, sell-limit-maker, buy-stop-limit, sell-stop-limit, buy-limit-fok, sell-limit-fok, buy-stop-limit-fok, sell-stop-limit-fok\n // 'amount': this.amountToPrecision (symbol, amount), // for buy market orders it's the order cost\n // 'price': this.priceToPrecision (symbol, price),\n // 'source': 'spot-api', // optional, spot-api, margin-api = isolated margin, super-margin-api = cross margin, c2c-margin-api\n // 'client-order-id': clientOrderId, // optional, max 64 chars, must be unique within 8 hours\n // 'stop-price': this.priceToPrecision (symbol, stopPrice), // trigger price for stop limit orders\n // 'operator': 'gte', // gte, lte, trigger price condition\n };\n let orderType = type.replace('buy-', '');\n orderType = orderType.replace('sell-', '');\n const options = this.safeValue(this.options, market['type'], {});\n const stopPrice = this.safeString2(params, 'stopPrice', 'stop-price');\n if (stopPrice === undefined) {\n const stopOrderTypes = this.safeValue(options, 'stopOrderTypes', {});\n if (orderType in stopOrderTypes) {\n throw new InvalidParamsError('createOrder() requires a stopPrice or a stop-price parameter for a stop order')\n .exchange(this.id);\n }\n }\n else {\n const defaultOperator = (side === 'sell') ? 'lte' : 'gte';\n const stopOperator = this.safeString(params, 'operator', defaultOperator);\n request['stop-price'] = this.priceToPrecision(symbol, stopPrice);\n request['operator'] = stopOperator;\n if ((orderType === 'limit') || (orderType === 'limit-fok')) {\n orderType = 'stop-' + orderType;\n }\n else if ((orderType !== 'stop-limit') && (orderType !== 'stop-limit-fok')) {\n throw new MarketTypeNotSupportedError(type).addMessage('createOrder() does not support ' + type + ' orders')\n .exchange(this.id);\n }\n }\n let postOnly = undefined;\n [postOnly, params] = this.handlePostOnly(orderType === 'market', orderType === 'limit-maker', params);\n if (postOnly) {\n orderType = 'limit-maker';\n }\n const timeInForce = this.safeString(params, 'timeInForce', 'GTC');\n if (timeInForce === 'FOK') {\n orderType = orderType + '-fok';\n }\n else if (timeInForce === 'IOC') {\n orderType = 'ioc';\n }\n request['type'] = side + '-' + orderType;\n const clientOrderId = this.safeString2(params, 'clientOrderId', 'client-order-id'); // must be 64 chars max and unique within 24 hours\n if (clientOrderId === undefined) {\n const broker = this.safeValue(this.options, 'broker', {});\n const brokerId = this.safeString(broker, 'id');\n request['client-order-id'] = brokerId + this.uuid();\n }\n else {\n request['client-order-id'] = clientOrderId;\n }\n if (marginMode === 'cross') {\n request['source'] = 'super-margin-api';\n }\n else if (marginMode === 'isolated') {\n request['source'] = 'margin-api';\n }\n else if (marginMode === 'c2c') {\n request['source'] = 'c2c-margin-api';\n }\n if ((orderType === 'market') && (side === 'buy')) {\n let quoteAmount = undefined;\n let createMarketBuyOrderRequiresPrice = true;\n [createMarketBuyOrderRequiresPrice, params] = this.handleOptionAndParams(params, 'createOrder', 'createMarketBuyOrderRequiresPrice', true);\n const cost = this.safeNumber(params, 'cost');\n params = this.omit(params, 'cost');\n if (cost !== undefined) {\n quoteAmount = this.amountToPrecision(symbol, cost);\n }\n else if (createMarketBuyOrderRequiresPrice) {\n if (price === undefined) {\n throw new InvalidParamsError('createOrder() requires the price argument for market buy orders to calculate the total cost to spend (amount * price), alternatively set the createMarketBuyOrderRequiresPrice option or param to false and pass the cost to spend in the amount argument')\n .exchange(this.id);\n }\n else {\n const amountString = this.numberToString(amount);\n const priceString = this.numberToString(price);\n quoteAmount = this.costToPrecision(symbol, Precise.stringMul(amountString, priceString));\n }\n }\n else {\n quoteAmount = this.amountToPrecision(symbol, amount);\n }\n request['amount'] = quoteAmount;\n }\n else {\n request['amount'] = this.amountToPrecision(symbol, amount);\n }\n const limitOrderTypes = this.safeValue(options, 'limitOrderTypes', {});\n if (orderType in limitOrderTypes) {\n request['price'] = this.priceToPrecision(symbol, price);\n }\n params = this.omit(params, ['stopPrice', 'stop-price', 'clientOrderId', 'client-order-id', 'operator', 'timeInForce']);\n return this.extend(request, params);\n }\n createContractOrderRequest(symbol, type, side, amount, price = undefined, params = {}) {\n /**\n * @method\n * @ignore\n * @name htx#createContractOrderRequest\n * @description helper function to build request\n * @param {string} symbol unified symbol of the market to create an order in\n * @param {string} type 'market' or 'limit'\n * @param {string} side 'buy' or 'sell'\n * @param {float} amount how much you want to trade in units of the base currency\n * @param {float} [price] the price at which the order is to be fullfilled, in units of the quote currency, ignored in market orders\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {string} [params.timeInForce] supports 'IOC' and 'FOK'\n * @param {float} [params.trailingPercent] *contract only* the percent to trail away from the current market price\n * @param {float} [params.trailingTriggerPrice] *contract only* the price to trigger a trailing order, default uses the price argument\n * @returns {object} request to be sent to the exchange\n */\n const market = this.market(symbol);\n const request = {\n 'contract_code': market['id'],\n 'volume': this.amountToPrecision(symbol, amount),\n 'direction': side,\n };\n let postOnly = undefined;\n [postOnly, params] = this.handlePostOnly(type === 'market', type === 'post_only', params);\n if (postOnly) {\n type = 'post_only';\n }\n const timeInForce = this.safeString(params, 'timeInForce', 'GTC');\n if (timeInForce === 'FOK') {\n type = 'fok';\n }\n else if (timeInForce === 'IOC') {\n type = 'ioc';\n }\n const triggerPrice = this.safeNumber2(params, 'stopPrice', 'trigger_price');\n const stopLossTriggerPrice = this.safeNumber2(params, 'stopLossPrice', 'sl_trigger_price');\n const takeProfitTriggerPrice = this.safeNumber2(params, 'takeProfitPrice', 'tp_trigger_price');\n const trailingPercent = this.safeString2(params, 'trailingPercent', 'callback_rate');\n const trailingTriggerPrice = this.safeNumber(params, 'trailingTriggerPrice', price);\n const isTrailingPercentOrder = trailingPercent !== undefined;\n const isStop = triggerPrice !== undefined;\n const isStopLossTriggerOrder = stopLossTriggerPrice !== undefined;\n const isTakeProfitTriggerOrder = takeProfitTriggerPrice !== undefined;\n if (isStop) {\n const triggerType = this.safeString2(params, 'triggerType', 'trigger_type', 'le');\n request['trigger_type'] = triggerType;\n request['trigger_price'] = this.priceToPrecision(symbol, triggerPrice);\n if (price !== undefined) {\n request['order_price'] = this.priceToPrecision(symbol, price);\n }\n }\n else if (isStopLossTriggerOrder || isTakeProfitTriggerOrder) {\n if (isStopLossTriggerOrder) {\n request['sl_order_price_type'] = type;\n request['sl_trigger_price'] = this.priceToPrecision(symbol, stopLossTriggerPrice);\n if (price !== undefined) {\n request['sl_order_price'] = this.priceToPrecision(symbol, price);\n }\n }\n else {\n request['tp_order_price_type'] = type;\n request['tp_trigger_price'] = this.priceToPrecision(symbol, takeProfitTriggerPrice);\n if (price !== undefined) {\n request['tp_order_price'] = this.priceToPrecision(symbol, price);\n }\n }\n }\n else if (isTrailingPercentOrder) {\n const trailingPercentString = Precise.stringDiv(trailingPercent, '100');\n request['callback_rate'] = this.parseToNumeric(trailingPercentString);\n request['active_price'] = trailingTriggerPrice;\n request['order_price_type'] = this.safeString(params, 'order_price_type', 'formula_price');\n }\n else {\n const clientOrderId = this.safeInteger2(params, 'client_order_id', 'clientOrderId');\n if (clientOrderId !== undefined) {\n request['client_order_id'] = clientOrderId;\n params = this.omit(params, ['clientOrderId']);\n }\n if (type === 'limit' || type === 'ioc' || type === 'fok' || type === 'post_only') {\n request['price'] = this.priceToPrecision(symbol, price);\n }\n }\n if (!isStopLossTriggerOrder && !isTakeProfitTriggerOrder) {\n const reduceOnly = this.safeValue2(params, 'reduceOnly', 'reduce_only', false);\n if (reduceOnly) {\n request['reduce_only'] = 1;\n }\n request['lever_rate'] = this.safeIntegerN(params, ['leverRate', 'lever_rate', 'leverage'], 1);\n if (!isTrailingPercentOrder) {\n request['order_price_type'] = type;\n }\n }\n const broker = this.safeValue(this.options, 'broker', {});\n const brokerId = this.safeString(broker, 'id');\n request['channel_code'] = brokerId;\n params = this.omit(params, ['reduceOnly', 'stopPrice', 'stopLossPrice', 'takeProfitPrice', 'triggerType', 'leverRate', 'timeInForce', 'leverage', 'trailingPercent', 'trailingTriggerPrice']);\n return this.extend(request, params);\n }\n async createOrder(symbol, type, side, amount, price = undefined, params = {}) {\n /**\n * @method\n * @name huobi#createOrder\n * @description create a trade order\n * @see https://huobiapi.github.io/docs/spot/v1/en/#place-a-new-order // spot, margin\n * @see https://huobiapi.github.io/docs/coin_margined_swap/v1/en/#place-an-order // coin-m swap\n * @see https://huobiapi.github.io/docs/coin_margined_swap/v1/en/#place-trigger-order // coin-m swap trigger\n * @see https://huobiapi.github.io/docs/usdt_swap/v1/en/#cross-place-an-order // usdt-m swap cross\n * @see https://huobiapi.github.io/docs/usdt_swap/v1/en/#cross-place-trigger-order // usdt-m swap cross trigger\n * @see https://huobiapi.github.io/docs/usdt_swap/v1/en/#isolated-place-an-order // usdt-m swap isolated\n * @see https://huobiapi.github.io/docs/usdt_swap/v1/en/#isolated-place-trigger-order // usdt-m swap isolated trigger\n * @see https://huobiapi.github.io/docs/dm/v1/en/#place-an-order // coin-m futures\n * @see https://huobiapi.github.io/docs/dm/v1/en/#place-trigger-order // coin-m futures contract trigger\n * @param {string} symbol unified symbol of the market to create an order in\n * @param {string} type 'market' or 'limit'\n * @param {string} side 'buy' or 'sell'\n * @param {float} amount how much you want to trade in units of the base currency\n * @param {float} [price] the price at which the order is to be fullfilled, in units of the quote currency, ignored in market orders\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {float} [params.stopPrice] the price a trigger order is triggered at\n * @param {string} [params.triggerType] *contract trigger orders only* ge: greater than or equal to, le: less than or equal to\n * @param {float} [params.stopLossPrice] *contract only* the price a stop-loss order is triggered at\n * @param {float} [params.takeProfitPrice] *contract only* the price a take-profit order is triggered at\n * @param {string} [params.operator] *spot and margin only* gte or lte, trigger price condition\n * @param {string} [params.offset] *contract only* 'open', 'close', or 'both', required in hedge mode\n * @param {bool} [params.postOnly] *contract only* true or false\n * @param {int} [params.leverRate] *contract only* required for all contract orders except tpsl, leverage greater than 20x requires prior approval of high-leverage agreement\n * @param {string} [params.timeInForce] supports 'IOC' and 'FOK'\n * @param {float} [params.cost] *spot market buy only* the quote quantity that can be used as an alternative for the amount\n * @param {float} [params.trailingPercent] *contract only* the percent to trail away from the current market price\n * @param {float} [params.trailingTriggerPrice] *contract only* the price to trigger a trailing order, default uses the price argument\n * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n await this.loadMarkets();\n const market = this.market(symbol);\n const triggerPrice = this.safeNumber2(params, 'stopPrice', 'trigger_price');\n const stopLossTriggerPrice = this.safeNumber2(params, 'stopLossPrice', 'sl_trigger_price');\n const takeProfitTriggerPrice = this.safeNumber2(params, 'takeProfitPrice', 'tp_trigger_price');\n const trailingPercent = this.safeNumber(params, 'trailingPercent');\n const isTrailingPercentOrder = trailingPercent !== undefined;\n const isStop = triggerPrice !== undefined;\n const isStopLossTriggerOrder = stopLossTriggerPrice !== undefined;\n const isTakeProfitTriggerOrder = takeProfitTriggerPrice !== undefined;\n let response = undefined;\n if (market['spot']) {\n if (isTrailingPercentOrder) {\n throw new TradeError().addMessage('createOrder() does not support trailing orders for spot markets')\n .exchange(this.id);\n }\n const spotRequest = await this.createSpotOrderRequest(symbol, type, side, amount, price, params);\n response = await this.spotPrivatePostV1OrderOrdersPlace(spotRequest);\n }\n else {\n let contractRequest = this.createContractOrderRequest(symbol, type, side, amount, price, params);\n if (market['linear']) {\n let marginMode = undefined;\n [marginMode, contractRequest] = this.handleMarginModeAndParams('createOrder', contractRequest);\n marginMode = (marginMode === undefined) ? 'cross' : marginMode;\n if (marginMode === 'isolated') {\n if (isStop) {\n response = await this.contractPrivatePostLinearSwapApiV1SwapTriggerOrder(contractRequest);\n }\n else if (isStopLossTriggerOrder || isTakeProfitTriggerOrder) {\n response = await this.contractPrivatePostLinearSwapApiV1SwapTpslOrder(contractRequest);\n }\n else if (isTrailingPercentOrder) {\n response = await this.contractPrivatePostLinearSwapApiV1SwapTrackOrder(contractRequest);\n }\n else {\n response = await this.contractPrivatePostLinearSwapApiV1SwapOrder(contractRequest);\n }\n }\n else if (marginMode === 'cross') {\n if (isStop) {\n response = await this.contractPrivatePostLinearSwapApiV1SwapCrossTriggerOrder(contractRequest);\n }\n else if (isStopLossTriggerOrder || isTakeProfitTriggerOrder) {\n response = await this.contractPrivatePostLinearSwapApiV1SwapCrossTpslOrder(contractRequest);\n }\n else if (isTrailingPercentOrder) {\n response = await this.contractPrivatePostLinearSwapApiV1SwapCrossTrackOrder(contractRequest);\n }\n else {\n response = await this.contractPrivatePostLinearSwapApiV1SwapCrossOrder(contractRequest);\n }\n }\n }\n else if (market['inverse']) {\n if (market['swap']) {\n if (isStop) {\n response = await this.contractPrivatePostSwapApiV1SwapTriggerOrder(contractRequest);\n }\n else if (isStopLossTriggerOrder || isTakeProfitTriggerOrder) {\n response = await this.contractPrivatePostSwapApiV1SwapTpslOrder(contractRequest);\n }\n else if (isTrailingPercentOrder) {\n response = await this.contractPrivatePostSwapApiV1SwapTrackOrder(contractRequest);\n }\n else {\n response = await this.contractPrivatePostSwapApiV1SwapOrder(contractRequest);\n }\n }\n else if (market['future']) {\n if (isStop) {\n response = await this.contractPrivatePostApiV1ContractTriggerOrder(contractRequest);\n }\n else if (isStopLossTriggerOrder || isTakeProfitTriggerOrder) {\n response = await this.contractPrivatePostApiV1ContractTpslOrder(contractRequest);\n }\n else if (isTrailingPercentOrder) {\n response = await this.contractPrivatePostApiV1ContractTrackOrder(contractRequest);\n }\n else {\n response = await this.contractPrivatePostApiV1ContractOrder(contractRequest);\n }\n }\n }\n }\n //\n // spot\n //\n // {\"status\":\"ok\",\"data\":\"438398393065481\"}\n //\n // swap and future\n //\n // {\n // \"status\": \"ok\",\n // \"data\": {\n // \"order_id\": 924660854912552960,\n // \"order_id_str\": \"924660854912552960\"\n // },\n // \"ts\": 1640497927185\n // }\n //\n // stop-loss and take-profit\n //\n // {\n // \"status\": \"ok\",\n // \"data\": {\n // \"tp_order\": {\n // \"order_id\": 1101494204040163328,\n // \"order_id_str\": \"1101494204040163328\"\n // },\n // \"sl_order\": null\n // },\n // \"ts\": :1682658283024\n // }\n //\n let data = undefined;\n let result = undefined;\n if (market['spot']) {\n return this.safeOrder({\n 'info': response,\n 'id': this.safeString(response, 'data'),\n 'timestamp': undefined,\n 'datetime': undefined,\n 'lastTradeTimestamp': undefined,\n 'status': undefined,\n 'symbol': undefined,\n 'type': type,\n 'side': side,\n 'price': price,\n 'amount': amount,\n 'filled': undefined,\n 'remaining': undefined,\n 'cost': undefined,\n 'trades': undefined,\n 'fee': undefined,\n 'clientOrderId': undefined,\n 'average': undefined,\n }, market);\n }\n else if (isStopLossTriggerOrder) {\n data = this.safeValue(response, 'data', {});\n result = this.safeValue(data, 'sl_order', {});\n }\n else if (isTakeProfitTriggerOrder) {\n data = this.safeValue(response, 'data', {});\n result = this.safeValue(data, 'tp_order', {});\n }\n else {\n result = this.safeValue(response, 'data', {});\n }\n return this.parseOrder(result, market);\n }\n async createOrders(orders, params = {}) {\n /**\n * @method\n * @name htx#createOrders\n * @description create a list of trade orders\n * @see https://huobiapi.github.io/docs/spot/v1/en/#place-a-batch-of-orders\n * @see https://huobiapi.github.io/docs/dm/v1/en/#place-a-batch-of-orders\n * @see https://huobiapi.github.io/docs/coin_margined_swap/v1/en/#place-a-batch-of-orders\n * @see https://huobiapi.github.io/docs/usdt_swap/v1/en/#isolated-place-a-batch-of-orders\n * @see https://huobiapi.github.io/docs/usdt_swap/v1/en/#cross-place-a-batch-of-orders\n * @param {Array} orders list of orders to create, each object should contain the parameters required by createOrder, namely symbol, type, side, amount, price and params\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n await this.loadMarkets();\n const ordersRequests = [];\n let symbol = undefined;\n let market = undefined;\n let marginMode = undefined;\n for (let i = 0; i < orders.length; i++) {\n const rawOrder = orders[i];\n const marketId = this.safeString(rawOrder, 'symbol');\n if (symbol === undefined) {\n symbol = marketId;\n }\n else {\n if (symbol !== marketId) {\n throw new InvalidParamsError('createOrders() requires all orders to have the same symbol')\n .exchange(this.id);\n }\n }\n const type = this.safeString(rawOrder, 'type');\n const side = this.safeString(rawOrder, 'side');\n const amount = this.safeValue(rawOrder, 'amount');\n const price = this.safeValue(rawOrder, 'price');\n const orderParams = this.safeValue(rawOrder, 'params', {});\n const marginResult = this.handleMarginModeAndParams('createOrders', orderParams);\n const currentMarginMode = marginResult[0];\n if (currentMarginMode !== undefined) {\n if (marginMode === undefined) {\n marginMode = currentMarginMode;\n }\n else {\n if (marginMode !== currentMarginMode) {\n throw new InvalidParamsError('createOrders() requires all orders to have the same margin mode (isolated or cross)')\n .exchange(this.id);\n }\n }\n }\n market = this.market(symbol);\n let orderRequest = undefined;\n if (market['spot']) {\n orderRequest = await this.createSpotOrderRequest(marketId, type, side, amount, price, orderParams);\n }\n else {\n orderRequest = this.createContractOrderRequest(marketId, type, side, amount, price, orderParams);\n }\n orderRequest = this.omit(orderRequest, 'marginMode');\n ordersRequests.push(orderRequest);\n }\n const request = {};\n let response = undefined;\n if (market['spot']) {\n response = await this.privatePostOrderBatchOrders(ordersRequests);\n }\n else {\n request['orders_data'] = ordersRequests;\n if (market['linear']) {\n marginMode = (marginMode === undefined) ? 'cross' : marginMode;\n if (marginMode === 'isolated') {\n response = await this.contractPrivatePostLinearSwapApiV1SwapBatchorder(request);\n }\n else if (marginMode === 'cross') {\n response = await this.contractPrivatePostLinearSwapApiV1SwapCrossBatchorder(request);\n }\n }\n else if (market['inverse']) {\n if (market['swap']) {\n response = await this.contractPrivatePostSwapApiV1SwapBatchorder(request);\n }\n else if (market['future']) {\n response = await this.contractPrivatePostApiV1ContractBatchorder(request);\n }\n }\n }\n //\n // spot\n //\n // {\n // \"status\": \"ok\",\n // \"data\": [\n // {\n // \"order-id\": 936847569789079,\n // \"client-order-id\": \"AA03022abc3a55e82c-0087-4fc2-beac-112fdebb1ee9\"\n // },\n // {\n // \"client-order-id\": \"AA03022abcdb3baefb-3cfa-4891-8009-082b3d46ca82\",\n // \"err-code\": \"account-frozen-balance-insufficient-error\",\n // \"err-msg\": \"trade account balance is not enough, left: `89`\"\n // }\n // ]\n // }\n //\n // swap and future\n //\n // {\n // \"status\": \"ok\",\n // \"data\": {\n // \"errors\": [\n // {\n // \"index\": 2,\n // \"err_code\": 1047,\n // \"err_msg\": \"Insufficient margin available.\"\n // }\n // ],\n // \"success\": [\n // {\n // \"order_id\": 1172923090632953857,\n // \"index\": 1,\n // \"order_id_str\": \"1172923090632953857\"\n // }\n // ]\n // },\n // \"ts\": 1699688256671\n // }\n //\n let result = undefined;\n if (market['spot']) {\n result = this.safeValue(response, 'data', []);\n }\n else {\n const data = this.safeValue(response, 'data', {});\n const success = this.safeValue(data, 'success', []);\n const errors = this.safeValue(data, 'errors', []);\n result = this.arrayConcat(success, errors);\n }\n return this.parseOrders(result, market);\n }\n async cancelOrder(id, symbol = undefined, params = {}) {\n /**\n * @method\n * @name huobi#cancelOrder\n * @description cancels an open order\n * @param {string} id order id\n * @param {string} symbol unified symbol of the market the order was made in\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {boolean} [params.stop] *contract only* if the order is a stop trigger order or not\n * @param {boolean} [params.stopLossTakeProfit] *contract only* if the order is a stop-loss or take-profit order\n * @param {boolean} [params.trailing] *contract only* set to true if you want to cancel a trailing order\n * @returns {object} An [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n await this.loadMarkets();\n let market = undefined;\n if (symbol !== undefined) {\n market = this.market(symbol);\n }\n let marketType = undefined;\n [marketType, params] = this.handleMarketTypeAndParams('cancelOrder', market, params);\n const request = {\n // spot -----------------------------------------------------------\n // 'order-id': 'id',\n // 'symbol': market['id'],\n // 'client-order-id': clientOrderId,\n // contracts ------------------------------------------------------\n // 'order_id': id,\n // 'client_order_id': clientOrderId,\n // 'contract_code': market['id'],\n // 'pair': 'BTC-USDT',\n // 'contract_type': 'this_week', // swap, this_week, next_week, quarter, next_ quarter\n };\n let response = undefined;\n if (marketType === 'spot') {\n const clientOrderId = this.safeString2(params, 'client-order-id', 'clientOrderId');\n if (clientOrderId === undefined) {\n request['order-id'] = id;\n response = await this.spotPrivatePostV1OrderOrdersOrderIdSubmitcancel(this.extend(request, params));\n }\n else {\n request['client-order-id'] = clientOrderId;\n params = this.omit(params, ['client-order-id', 'clientOrderId']);\n response = await this.spotPrivatePostV1OrderOrdersSubmitCancelClientOrder(this.extend(request, params));\n }\n }\n else {\n if (symbol === undefined) {\n throw new InvalidParamsError('cancelOrder() requires a symbol argument')\n .exchange(this.id);\n }\n const clientOrderId = this.safeString2(params, 'client_order_id', 'clientOrderId');\n if (clientOrderId === undefined) {\n request['order_id'] = id;\n }\n else {\n request['client_order_id'] = clientOrderId;\n params = this.omit(params, ['client_order_id', 'clientOrderId']);\n }\n if (market['future']) {\n request['symbol'] = market['settleId'];\n }\n else {\n request['contract_code'] = market['id'];\n }\n const stop = this.safeValue(params, 'stop');\n const stopLossTakeProfit = this.safeValue(params, 'stopLossTakeProfit');\n const trailing = this.safeBool(params, 'trailing', false);\n params = this.omit(params, ['stop', 'stopLossTakeProfit', 'trailing']);\n if (market['linear']) {\n let marginMode = undefined;\n [marginMode, params] = this.handleMarginModeAndParams('cancelOrder', params);\n marginMode = (marginMode === undefined) ? 'cross' : marginMode;\n if (marginMode === 'isolated') {\n if (stop) {\n response = await this.contractPrivatePostLinearSwapApiV1SwapTriggerCancel(this.extend(request, params));\n }\n else if (stopLossTakeProfit) {\n response = await this.contractPrivatePostLinearSwapApiV1SwapTpslCancel(this.extend(request, params));\n }\n else if (trailing) {\n response = await this.contractPrivatePostLinearSwapApiV1SwapTrackCancel(this.extend(request, params));\n }\n else {\n response = await this.contractPrivatePostLinearSwapApiV1SwapCancel(this.extend(request, params));\n }\n }\n else if (marginMode === 'cross') {\n if (stop) {\n response = await this.contractPrivatePostLinearSwapApiV1SwapCrossTriggerCancel(this.extend(request, params));\n }\n else if (stopLossTakeProfit) {\n response = await this.contractPrivatePostLinearSwapApiV1SwapCrossTpslCancel(this.extend(request, params));\n }\n else if (trailing) {\n response = await this.contractPrivatePostLinearSwapApiV1SwapCrossTrackCancel(this.extend(request, params));\n }\n else {\n response = await this.contractPrivatePostLinearSwapApiV1SwapCrossCancel(this.extend(request, params));\n }\n }\n }\n else if (market['inverse']) {\n if (market['swap']) {\n if (stop) {\n response = await this.contractPrivatePostSwapApiV1SwapTriggerCancel(this.extend(request, params));\n }\n else if (stopLossTakeProfit) {\n response = await this.contractPrivatePostSwapApiV1SwapTpslCancel(this.extend(request, params));\n }\n else if (trailing) {\n response = await this.contractPrivatePostSwapApiV1SwapTrackCancel(this.extend(request, params));\n }\n else {\n response = await this.contractPrivatePostSwapApiV1SwapCancel(this.extend(request, params));\n }\n }\n else if (market['future']) {\n if (stop) {\n response = await this.contractPrivatePostApiV1ContractTriggerCancel(this.extend(request, params));\n }\n else if (stopLossTakeProfit) {\n response = await this.contractPrivatePostApiV1ContractTpslCancel(this.extend(request, params));\n }\n else if (trailing) {\n response = await this.contractPrivatePostApiV1ContractTrackCancel(this.extend(request, params));\n }\n else {\n response = await this.contractPrivatePostApiV1ContractCancel(this.extend(request, params));\n }\n }\n }\n else {\n throw new MarketTypeNotSupportedError(marketType).exchange(this.id);\n }\n }\n //\n // spot\n //\n // {\n // \"status\": \"ok\",\n // \"data\": \"10138899000\",\n // }\n //\n // future and swap\n //\n // {\n // \"status\": \"ok\",\n // \"data\": {\n // \"errors\": [],\n // \"successes\": \"924660854912552960\"\n // },\n // \"ts\": 1640504486089\n // }\n //\n return this.extend(this.parseOrder(response, market), {\n 'id': id,\n 'status': 'canceled',\n });\n }\n async cancelOrders(ids, symbol = undefined, params = {}) {\n /**\n * @method\n * @name huobi#cancelOrders\n * @description cancel multiple orders\n * @param {string[]} ids order ids\n * @param {string} symbol unified market symbol, default is undefined\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {bool} [params.stop] *contract only* if the orders are stop trigger orders or not\n * @param {bool} [params.stopLossTakeProfit] *contract only* if the orders are stop-loss or take-profit orders\n * @returns {object} an list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n await this.loadMarkets();\n let market = undefined;\n if (symbol !== undefined) {\n market = this.market(symbol);\n }\n let marketType = undefined;\n [marketType, params] = this.handleMarketTypeAndParams('cancelOrders', market, params);\n const request = {\n // spot -----------------------------------------------------------\n // 'order-ids': ids.join (','), // max 50\n // 'client-order-ids': ids.join (','), // max 50\n // contracts ------------------------------------------------------\n // 'order_id': id, // comma separated, max 10\n // 'client_order_id': clientOrderId, // comma separated, max 10\n // 'contract_code': market['id'],\n // 'symbol': market['settleId'],\n };\n let response = undefined;\n if (marketType === 'spot') {\n let clientOrderIds = this.safeValue2(params, 'client-order-id', 'clientOrderId');\n clientOrderIds = this.safeValue2(params, 'client-order-ids', 'clientOrderIds', clientOrderIds);\n if (clientOrderIds === undefined) {\n if (typeof clientOrderIds === 'string') {\n request['order-ids'] = [ids];\n }\n else {\n request['order-ids'] = ids;\n }\n }\n else {\n if (typeof clientOrderIds === 'string') {\n request['client-order-ids'] = [clientOrderIds];\n }\n else {\n request['client-order-ids'] = clientOrderIds;\n }\n params = this.omit(params, ['client-order-id', 'client-order-ids', 'clientOrderId', 'clientOrderIds']);\n }\n response = await this.spotPrivatePostV1OrderOrdersBatchcancel(this.extend(request, params));\n }\n else {\n if (symbol === undefined) {\n throw new InvalidParamsError('cancelOrders() requires a symbol argument')\n .exchange(this.id);\n }\n let clientOrderIds = this.safeString2(params, 'client_order_id', 'clientOrderId');\n clientOrderIds = this.safeString2(params, 'client_order_ids', 'clientOrderIds', clientOrderIds);\n if (clientOrderIds === undefined) {\n request['order_id'] = ids.join(',');\n }\n else {\n request['client_order_id'] = clientOrderIds;\n params = this.omit(params, ['client_order_id', 'client_order_ids', 'clientOrderId', 'clientOrderIds']);\n }\n if (market['future']) {\n request['symbol'] = market['settleId'];\n }\n else {\n request['contract_code'] = market['id'];\n }\n const stop = this.safeValue(params, 'stop');\n const stopLossTakeProfit = this.safeValue(params, 'stopLossTakeProfit');\n params = this.omit(params, ['stop', 'stopLossTakeProfit']);\n if (market['linear']) {\n let marginMode = undefined;\n [marginMode, params] = this.handleMarginModeAndParams('cancelOrders', params);\n marginMode = (marginMode === undefined) ? 'cross' : marginMode;\n if (marginMode === 'isolated') {\n if (stop) {\n response = await this.contractPrivatePostLinearSwapApiV1SwapTriggerCancel(this.extend(request, params));\n }\n else if (stopLossTakeProfit) {\n response = await this.contractPrivatePostLinearSwapApiV1SwapTpslCancel(this.extend(request, params));\n }\n else {\n response = await this.contractPrivatePostLinearSwapApiV1SwapCancel(this.extend(request, params));\n }\n }\n else if (marginMode === 'cross') {\n if (stop) {\n response = await this.contractPrivatePostLinearSwapApiV1SwapCrossTriggerCancel(this.extend(request, params));\n }\n else if (stopLossTakeProfit) {\n response = await this.contractPrivatePostLinearSwapApiV1SwapCrossTpslCancel(this.extend(request, params));\n }\n else {\n response = await this.contractPrivatePostLinearSwapApiV1SwapCrossCancel(this.extend(request, params));\n }\n }\n }\n else if (market['inverse']) {\n if (market['swap']) {\n if (stop) {\n response = await this.contractPrivatePostSwapApiV1SwapTriggerCancel(this.extend(request, params));\n }\n else if (stopLossTakeProfit) {\n response = await this.contractPrivatePostSwapApiV1SwapTpslCancel(this.extend(request, params));\n }\n else {\n response = await this.contractPrivatePostSwapApiV1SwapCancel(this.extend(request, params));\n }\n }\n else if (market['future']) {\n if (stop) {\n response = await this.contractPrivatePostApiV1ContractTriggerCancel(this.extend(request, params));\n }\n else if (stopLossTakeProfit) {\n response = await this.contractPrivatePostApiV1ContractTpslCancel(this.extend(request, params));\n }\n else {\n response = await this.contractPrivatePostApiV1ContractCancel(this.extend(request, params));\n }\n }\n }\n else {\n throw new MarketTypeNotSupportedError(marketType).exchange(this.id);\n }\n }\n //\n // spot\n //\n // {\n // \"status\": \"ok\",\n // \"data\": {\n // \"success\": [\n // \"5983466\"\n // ],\n // \"failed\": [\n // {\n // \"err-msg\": \"Incorrect order state\",\n // \"order-state\": 7,\n // \"order-id\": \"\",\n // \"err-code\": \"order-orderstate-error\",\n // \"client-order-id\": \"first\"\n // },\n // {\n // \"err-msg\": \"Incorrect order state\",\n // \"order-state\": 7,\n // \"order-id\": \"\",\n // \"err-code\": \"order-orderstate-error\",\n // \"client-order-id\": \"second\"\n // },\n // {\n // \"err-msg\": \"The record is not found.\",\n // \"order-id\": \"\",\n // \"err-code\": \"base-not-found\",\n // \"client-order-id\": \"third\"\n // }\n // ]\n // }\n // }\n //\n // future and swap\n //\n // {\n // \"status\": \"ok\",\n // \"data\": {\n // \"errors\": [\n // {\n // \"order_id\": \"769206471845261312\",\n // \"err_code\": 1061,\n // \"err_msg\": \"This order doesnt exist.\"\n // }\n // ],\n // \"successes\": \"773120304138219520\"\n // },\n // \"ts\": 1604367997451\n // }\n //\n return response;\n }\n async cancelAllOrders(symbol = undefined, params = {}) {\n /**\n * @method\n * @name huobi#cancelAllOrders\n * @description cancel all open orders\n * @param {string} symbol unified market symbol, only orders in the market of this symbol are cancelled when symbol is not undefined\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {boolean} [params.stop] *contract only* if the orders are stop trigger orders or not\n * @param {boolean} [params.stopLossTakeProfit] *contract only* if the orders are stop-loss or take-profit orders\n * @param {boolean} [params.trailing] *contract only* set to true if you want to cancel all trailing orders\n * @returns {object[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n await this.loadMarkets();\n let market = undefined;\n if (symbol !== undefined) {\n market = this.market(symbol);\n }\n let marketType = undefined;\n [marketType, params] = this.handleMarketTypeAndParams('cancelAllOrders', market, params);\n const request = {\n // spot -----------------------------------------------------------\n // 'account-id': account['id'],\n // 'symbol': market['id'], // a list of comma-separated symbols, all symbols by default\n // 'types' 'string', buy-market, sell-market, buy-limit, sell-limit, buy-ioc, sell-ioc, buy-stop-limit, sell-stop-limit, buy-limit-fok, sell-limit-fok, buy-stop-limit-fok, sell-stop-limit-fok\n // 'side': 'buy', // or 'sell'\n // 'size': 100, // the number of orders to cancel 1-100\n // contract -------------------------------------------------------\n // 'symbol': market['settleId'], // required\n // 'contract_code': market['id'],\n // 'contract_type': 'this_week', // swap, this_week, next_week, quarter, next_ quarter\n // 'direction': 'buy': // buy, sell\n // 'offset': 'open', // open, close\n };\n let response = undefined;\n if (marketType === 'spot') {\n if (symbol !== undefined) {\n request['symbol'] = market['id'];\n }\n response = await this.spotPrivatePostV1OrderOrdersBatchCancelOpenOrders(this.extend(request, params));\n }\n else {\n if (symbol === undefined) {\n throw new InvalidParamsError('cancelAllOrders() requires a symbol argument').exchange(this.id);\n }\n if (market['future']) {\n request['symbol'] = market['settleId'];\n }\n request['contract_code'] = market['id'];\n const stop = this.safeValue(params, 'stop');\n const stopLossTakeProfit = this.safeValue(params, 'stopLossTakeProfit');\n const trailing = this.safeBool(params, 'trailing', false);\n params = this.omit(params, ['stop', 'stopLossTakeProfit', 'trailing']);\n if (market['linear']) {\n let marginMode = undefined;\n [marginMode, params] = this.handleMarginModeAndParams('cancelAllOrders', params);\n marginMode = (marginMode === undefined) ? 'cross' : marginMode;\n if (marginMode === 'isolated') {\n if (stop) {\n response = await this.contractPrivatePostLinearSwapApiV1SwapTriggerCancelall(this.extend(request, params));\n }\n else if (stopLossTakeProfit) {\n response = await this.contractPrivatePostLinearSwapApiV1SwapTpslCancelall(this.extend(request, params));\n }\n else if (trailing) {\n response = await this.contractPrivatePostLinearSwapApiV1SwapTrackCancelall(this.extend(request, params));\n }\n else {\n response = await this.contractPrivatePostLinearSwapApiV1SwapCancelall(this.extend(request, params));\n }\n }\n else if (marginMode === 'cross') {\n if (stop) {\n response = await this.contractPrivatePostLinearSwapApiV1SwapCrossTriggerCancelall(this.extend(request, params));\n }\n else if (stopLossTakeProfit) {\n response = await this.contractPrivatePostLinearSwapApiV1SwapCrossTpslCancelall(this.extend(request, params));\n }\n else if (trailing) {\n response = await this.contractPrivatePostLinearSwapApiV1SwapCrossTrackCancelall(this.extend(request, params));\n }\n else {\n response = await this.contractPrivatePostLinearSwapApiV1SwapCrossCancelall(this.extend(request, params));\n }\n }\n }\n else if (market['inverse']) {\n if (market['swap']) {\n if (stop) {\n response = await this.contractPrivatePostSwapApiV1SwapTriggerCancelall(this.extend(request, params));\n }\n else if (stopLossTakeProfit) {\n response = await this.contractPrivatePostSwapApiV1SwapTpslCancelall(this.extend(request, params));\n }\n else if (trailing) {\n response = await this.contractPrivatePostSwapApiV1SwapTrackCancelall(this.extend(request, params));\n }\n else {\n response = await this.contractPrivatePostSwapApiV1SwapCancelall(this.extend(request, params));\n }\n }\n else if (market['future']) {\n if (stop) {\n response = await this.contractPrivatePostApiV1ContractTriggerCancelall(this.extend(request, params));\n }\n else if (stopLossTakeProfit) {\n response = await this.contractPrivatePostApiV1ContractTpslCancelall(this.extend(request, params));\n }\n else if (trailing) {\n response = await this.contractPrivatePostApiV1ContractTrackCancelall(this.extend(request, params));\n }\n else {\n response = await this.contractPrivatePostApiV1ContractCancelall(this.extend(request, params));\n }\n }\n }\n else {\n throw new MarketTypeNotSupportedError(marketType).exchange(this.id);\n }\n }\n //\n // spot\n //\n // {\n // \"code\": 200,\n // \"data\": {\n // \"success-count\": 2,\n // \"failed-count\": 0,\n // \"next-id\": 5454600\n // }\n // }\n //\n // future and swap\n //\n // {\n // \"status\": \"ok\",\n // \"data\": {\n // \"errors\": [],\n // \"successes\": \"1104754904426696704\"\n // },\n // \"ts\": \"1683435723755\"\n // }\n //\n return response;\n }\n parseDepositAddress(depositAddress, currency = undefined) {\n //\n // {\n // \"currency\": \"usdt\",\n // \"address\": \"0xf7292eb9ba7bc50358e27f0e025a4d225a64127b\",\n // \"addressTag\": \"\",\n // \"chain\": \"usdterc20\", // trc20usdt, hrc20usdt, usdt, algousdt\n // }\n //\n const address = this.safeString(depositAddress, 'address');\n const tag = this.safeString(depositAddress, 'addressTag');\n const currencyId = this.safeString(depositAddress, 'currency');\n currency = this.safeCurrency(currencyId, currency);\n const code = this.safeCurrencyCode(currencyId, currency);\n const note = this.safeString(depositAddress, 'note');\n const networkId = this.safeString(depositAddress, 'chain');\n this.checkAddress(address);\n return {\n 'currency': code,\n 'address': address,\n 'tag': tag,\n 'network': this.networkIdToEcid(networkId),\n 'note': note,\n 'info': depositAddress,\n };\n }\n async fetchDepositAddressesByNetwork(code, params = {}) {\n /**\n * @method\n * @name huobi#fetchDepositAddressesByNetwork\n * @description fetch a dictionary of addresses for a currency, indexed by network\n * @param {string} code unified currency code of the currency for the deposit address\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} a dictionary of [address structures]{@link https://docs.ccxt.com/#/?id=address-structure} indexed by the network\n */\n await this.loadMarkets();\n const currency = this.currency(code);\n const request = {\n 'currency': currency['id'],\n };\n const response = await this.spotPrivateGetV2AccountDepositAddress(this.extend(request, params));\n //\n // {\n // \"code\": 200,\n // \"data\": [\n // {\n // \"currency\": \"eth\",\n // \"address\": \"0xf7292eb9ba7bc50358e27f0e025a4d225a64127b\",\n // \"addressTag\": \"\",\n // \"chain\": \"eth\"\n // }\n // ]\n // }\n //\n const data = this.safeValue(response, 'data', []);\n const parsed = this.parseDepositAddresses(data, [currency['code']], false);\n return this.indexBy(parsed, 'network');\n }\n async fetchDepositAddress(code, params = {}) {\n /**\n * @method\n * @name huobi#fetchDepositAddress\n * @description fetch the deposit address for a currency associated with this account\n * @param {string} code unified currency code\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} an [address structure]{@link https://docs.ccxt.com/#/?id=address-structure}\n */\n await this.loadMarkets();\n const [ecid, paramsOmited] = this.handleEcidAndParams(params);\n const indexedAddresses = await this.fetchDepositAddressesByNetwork(code, paramsOmited);\n return indexedAddresses[ecid];\n }\n async fetchWithdrawAddresses(code, note = undefined, networkCode = undefined, params = {}) {\n await this.loadMarkets();\n const currency = this.currency(code);\n const request = {\n 'currency': currency['id'],\n };\n const response = await this.spotPrivateGetV2AccountWithdrawAddress(this.extend(request, params));\n //\n // {\n // \"code\": 200,\n // \"data\": [\n // {\n // \"currency\": \"eth\",\n // \"chain\": \"eth\"\n // \"note\": \"Binance - TRC20\",\n // \"addressTag\": \"\",\n // \"address\": \"0xf7292eb9ba7bc50358e27f0e025a4d225a64127b\",\n // }\n // ]\n // }\n //\n const data = this.safeValue(response, 'data', []);\n const allAddresses = this.parseDepositAddresses(data, [currency['code']], false); // cjg: to do remove this weird object or array ambiguity\n const addresses = [];\n for (let i = 0; i < allAddresses.length; i++) {\n const address = allAddresses[i];\n const noteMatch = (note === undefined) || (address['note'] === note);\n const networkMatch = (networkCode === undefined) || (address['network'] === networkCode);\n if (noteMatch && networkMatch) {\n addresses.push(address);\n }\n }\n return addresses;\n }\n async fetchDeposits(code = undefined, since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name huobi#fetchDeposits\n * @description fetch all deposits made to an account\n * @param {string} code unified currency code\n * @param {int} [since] the earliest time in ms to fetch deposits for\n * @param {int} [limit] the maximum number of deposits structures to retrieve\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object[]} a list of [transaction structures]{@link https://docs.ccxt.com/#/?id=transaction-structure}\n */\n if (limit === undefined || limit > 100) {\n limit = 100;\n }\n await this.loadMarkets();\n let currency = undefined;\n if (code !== undefined) {\n currency = this.currency(code);\n }\n const request = {\n 'type': 'deposit',\n 'direct': 'next',\n 'from': 0, // From 'id' ... if you want to get results after a particular transaction id, pass the id in params.from\n };\n if (currency !== undefined) {\n request['currency'] = currency['id'];\n }\n if (limit !== undefined) {\n request['size'] = limit; // max 100\n }\n const response = await this.spotPrivateGetV1QueryDepositWithdraw(this.extend(request, params));\n //\n // {\n // \"status\": \"ok\",\n // \"data\": [\n // {\n // \"id\": \"75115912\",\n // \"type\": \"deposit\",\n // \"sub-type\": \"NORMAL\",\n // \"request-id\": \"trc20usdt-a2e229a44ef2a948c874366230bb56aa73631cc0a03d177bd8b4c9d38262d7ff-200\",\n // \"currency\": \"usdt\",\n // \"chain\": \"trc20usdt\",\n // \"tx-hash\": \"a2e229a44ef2a948c874366230bb56aa73631cc0a03d177bd8b4c9d38262d7ff\",\n // \"amount\": \"12.000000000000000000\",\n // \"from-addr-tag\": \"\",\n // \"address-id\": \"0\",\n // \"address\": \"TRFTd1FxepQE6CnpwzUEMEbFaLm5bJK67s\",\n // \"address-tag\": \"\",\n // \"fee\": \"0\",\n // \"state\": \"safe\",\n // \"wallet-confirm\": \"2\",\n // \"created-at\": \"1621843808662\",\n // \"updated-at\": \"1621843857137\"\n // },\n // ]\n // }\n //\n return this.parseTransactions(response['data'], currency, since, limit);\n }\n async fetchWithdrawals(code = undefined, since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name huobi#fetchWithdrawals\n * @description fetch all withdrawals made from an account\n * @param {string} code unified currency code\n * @param {int} [since] the earliest time in ms to fetch withdrawals for\n * @param {int} [limit] the maximum number of withdrawals structures to retrieve\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object[]} a list of [transaction structures]{@link https://docs.ccxt.com/#/?id=transaction-structure}\n */\n if (limit === undefined || limit > 100) {\n limit = 100;\n }\n await this.loadMarkets();\n let currency = undefined;\n if (code !== undefined) {\n currency = this.currency(code);\n }\n const request = {\n 'type': 'withdraw',\n 'direct': 'next',\n 'from': 0, // From 'id' ... if you want to get results after a particular transaction id, pass the id in params.from\n };\n if (currency !== undefined) {\n request['currency'] = currency['id'];\n }\n if (limit !== undefined) {\n request['size'] = limit; // max 100\n }\n const response = await this.spotPrivateGetV1QueryDepositWithdraw(this.extend(request, params));\n //\n // {\n // \"status\": \"ok\",\n // \"data\": [\n // {\n // \"id\": \"61335312\",\n // \"type\": \"withdraw\",\n // \"sub-type\": \"NORMAL\",\n // \"currency\": \"usdt\",\n // \"chain\": \"trc20usdt\",\n // \"tx-hash\": \"30a3111f2fead74fae45c6218ca3150fc33cab2aa59cfe41526b96aae79ce4ec\",\n // \"amount\": \"12.000000000000000000\",\n // \"from-addr-tag\": \"\",\n // \"address-id\": \"27321591\",\n // \"address\": \"TRf5JacJQRsF4Nm2zu11W6maDGeiEWQu9e\",\n // \"address-tag\": \"\",\n // \"fee\": \"1.000000000000000000\",\n // \"state\": \"confirmed\",\n // \"created-at\": \"1621852316553\",\n // \"updated-at\": \"1621852467041\"\n // },\n // ]\n // }\n //\n return this.parseTransactions(response['data'], currency, since, limit);\n }\n parseTransaction(transaction, currency = undefined) {\n //\n // fetchDeposits\n //\n // {\n // \"id\": \"75115912\",\n // \"type\": \"deposit\",\n // \"sub-type\": \"NORMAL\",\n // \"request-id\": \"trc20usdt-a2e229a44ef2a948c874366230bb56aa73631cc0a03d177bd8b4c9d38262d7ff-200\",\n // \"currency\": \"usdt\",\n // \"chain\": \"trc20usdt\",\n // \"tx-hash\": \"a2e229a44ef2a948c874366230bb56aa73631cc0a03d177bd8b4c9d38262d7ff\",\n // \"amount\": \"2849.000000000000000000\",\n // \"from-addr-tag\": \"\",\n // \"address-id\": \"0\",\n // \"address\": \"TRFTd1FxepQE6CnpwzUEMEbFaLm5bJK67s\",\n // \"address-tag\": \"\",\n // \"fee\": \"0\",\n // \"state\": \"safe\",\n // \"wallet-confirm\": \"2\",\n // \"created-at\": \"1621843808662\",\n // \"updated-at\": \"1621843857137\"\n // },\n //\n // fetchWithdrawals\n //\n // {\n // \"id\": \"61335312\",\n // \"type\": \"withdraw\",\n // \"sub-type\": \"NORMAL\",\n // \"currency\": \"usdt\",\n // \"chain\": \"trc20usdt\",\n // \"tx-hash\": \"30a3111f2fead74fae45c6218ca3150fc33cab2aa59cfe41526b96aae79ce4ec\",\n // \"amount\": \"12.000000000000000000\",\n // \"from-addr-tag\": \"\",\n // \"address-id\": \"27321591\",\n // \"address\": \"TRf5JacJQRsF4Nm2zu11W6maDGeiEWQu9e\",\n // \"address-tag\": \"\",\n // \"fee\": \"1.000000000000000000\",\n // \"state\": \"confirmed\",\n // \"created-at\": \"1621852316553\",\n // \"updated-at\": \"1621852467041\"\n // }\n //\n // withdraw\n //\n // {\n // \"status\": \"ok\",\n // \"data\": \"99562054\"\n // }\n //\n const timestamp = this.safeInteger(transaction, 'created-at');\n const code = this.safeCurrencyCode(this.safeString(transaction, 'currency'));\n let type = this.safeString(transaction, 'type');\n if (type === 'withdraw') {\n type = 'withdrawal';\n }\n let feeCost = this.safeString(transaction, 'fee');\n if (feeCost !== undefined) {\n feeCost = Precise.stringAbs(feeCost);\n }\n const networkId = this.safeString(transaction, 'chain');\n let txHash = this.safeString(transaction, 'tx-hash');\n if (networkId === 'ETH' && txHash.indexOf('0x') < 0) {\n txHash = '0x' + txHash;\n }\n const subType = this.safeString(transaction, 'sub-type');\n const internal = subType === 'FAST';\n return {\n 'info': transaction,\n 'id': this.safeString2(transaction, 'id', 'data'),\n 'txid': txHash,\n 'timestamp': timestamp,\n 'datetime': this.iso8601(timestamp),\n 'network': this.networkIdToEcid(networkId),\n 'address': this.safeString(transaction, 'address'),\n 'addressTo': undefined,\n 'addressFrom': undefined,\n 'tag': this.safeString(transaction, 'address-tag'),\n 'tagTo': undefined,\n 'tagFrom': undefined,\n 'type': type,\n 'amount': this.safeNumber(transaction, 'amount'),\n 'currency': code,\n 'status': this.parseTransactionStatus(this.safeString(transaction, 'state')),\n 'updated': this.safeInteger(transaction, 'updated-at'),\n 'comment': undefined,\n 'internal': internal,\n 'fee': {\n 'currency': code,\n 'cost': this.parseNumber(feeCost),\n 'rate': undefined,\n },\n };\n }\n parseTransactionStatus(status) {\n const statuses = {\n // deposit statuses\n 'unknown': 'failed',\n 'confirming': 'pending',\n 'confirmed': 'ok',\n 'safe': 'ok',\n 'orphan': 'failed',\n // withdrawal statuses\n 'submitted': 'pending',\n 'canceled': 'canceled',\n 'reexamine': 'pending',\n 'reject': 'failed',\n 'pass': 'pending',\n 'wallet-reject': 'failed',\n // 'confirmed': 'ok', // present in deposit statuses\n 'confirm-error': 'failed',\n 'repealed': 'failed',\n 'wallet-transfer': 'pending',\n 'pre-transfer': 'pending',\n };\n return this.safeString(statuses, status, status);\n }\n async withdraw(code, amount, address, tag = undefined, params = {}) {\n /**\n * @method\n * @name huobi#withdraw\n * @description make a withdrawal\n * @param {string} code unified currency code\n * @param {float} amount the amount to withdraw\n * @param {string} address the address to withdraw to\n * @param {string} tag\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} a [transaction structure]{@link https://docs.ccxt.com/#/?id=transaction-structure}\n */\n [tag, params] = this.handleWithdrawTagAndParams(tag, params);\n await this.loadMarkets();\n this.checkAddress(address);\n const currency = this.currency(code);\n const request = {\n 'address': address,\n 'currency': currency['id'].toLowerCase(),\n };\n if (tag !== undefined) {\n request['addr-tag'] = tag; // only for XRP?\n }\n let ecid = undefined;\n [ecid, params] = this.handleEcidAndParams(params);\n if (ecid !== undefined) {\n request['chain'] = this.ecidToNetworkId(ecid, code);\n }\n amount = this.currencyToPrecision(code, amount, ecid);\n const withdrawOptions = this.safeValue(this.options, 'withdraw', {});\n if (this.safeBool(withdrawOptions, 'includeFee', false)) {\n let fee = this.safeNumber(params, 'fee');\n if (fee === undefined) {\n const currencies = await this.fetchCurrencies();\n this.currencies = this.deepExtend(this.currencies, currencies);\n const targetNetwork = this.safeValue(currency['networks'], ecid, {});\n fee = this.safeNumber(targetNetwork, 'fee');\n if (fee === undefined) {\n throw new WithdrawalError()\n .addMessage('withdraw() function can not find withdraw fee for chosen network. You need to re-load markets with \"exchange.loadMarkets(true)\", or provide the \"fee\" parameter')\n .exchange(this.id);\n }\n }\n // fee needs to be deducted from whole amount\n const feeString = this.currencyToPrecision(code, fee, ecid);\n params = this.omit(params, 'fee');\n const amountString = this.numberToString(amount);\n const amountSubtractedString = Precise.stringSub(amountString, feeString);\n const amountSubtracted = parseFloat(amountSubtractedString);\n request['fee'] = parseFloat(feeString);\n amount = parseFloat(this.currencyToPrecision(code, amountSubtracted, ecid));\n }\n request['amount'] = amount;\n const response = await this.spotPrivatePostV1DwWithdrawApiCreate(this.extend(request, params));\n //\n // {\n // \"status\": \"ok\",\n // \"data\": \"99562054\"\n // }\n //\n return this.parseTransaction(response, currency);\n }\n parseTransfer(transfer, currency = undefined) {\n //\n // transfer\n //\n // {\n // \"data\": 12345,\n // \"status\": \"ok\"\n // }\n //\n const id = this.safeString(transfer, 'data');\n const code = this.safeCurrencyCode(undefined, currency);\n return {\n 'info': transfer,\n 'id': id,\n 'timestamp': undefined,\n 'datetime': undefined,\n 'currency': code,\n 'amount': undefined,\n 'fromAccount': undefined,\n 'toAccount': undefined,\n 'status': undefined,\n };\n }\n // https://www.htx.com/en-us/opend/newApiPages/?id=7ec4b62b-7773-11ed-9966-0242ac110003\n async fetchSubAccountBalances(uid, params = {}) {\n await this.loadMarkets();\n const response = await this.privateGetAccountAccountsSubUid({\n 'sub-uid': uid,\n });\n // {\n // \"status\": \"ok\",\n // \"data\": [\n // {\n // \"id\": 13704588,\n // \"type\": \"spot\",\n // \"state\": \"working\",\n // \"list\": [\n // {\n // \"currency\": \"usdt\",\n // \"type\": \"trade\",\n // \"balance\": \"8.0855916572\",\n // \"debt\": \"invalid\",\n // \"available\": \"invalid\"\n // }\n // ],\n // \"symbol\": \"\"\n // },\n // {\n // \"id\": 24994285,\n // \"type\": \"point\",\n // \"state\": \"working\",\n // \"list\": [\n // {\n // \"currency\": \"hbpoint\",\n // \"type\": \"trade\",\n // \"balance\": \"10\"\n // }\n // ],\n // \"symbol\": \"\"\n // }\n // ]\n // }\n const data = this.safeValue(response, 'data');\n const result = {};\n for (let i = 0; i < data.length; i++) {\n const account = data[i];\n const accountList = this.safeValue(account, 'list', []);\n for (let j = 0; j < accountList.length; j++) {\n const balance = accountList[j];\n const currencyId = this.safeString(balance, 'currency');\n const code = this.safeCurrencyCode(currencyId);\n const typeId = this.safeString(account, 'type');\n const accountsById = this.safeValue(this.options, 'accountsById', {});\n const type = this.safeValue(accountsById, typeId, typeId);\n if (!(type in result)) {\n result[type] = {};\n }\n result[type][code] = {\n 'free': this.safeString(balance, 'available'),\n 'used': this.safeString(balance, 'debt'),\n 'total': this.safeString(balance, 'balance'),\n };\n }\n }\n return result;\n }\n // https://www.htx.com/en-us/opend/newApiPages/?id=7ec52a87-7773-11ed-9966-0242ac110003\n async getSubAccounts() {\n await this.loadMarkets();\n const response = await this.v2PrivateGetSubUserUserList();\n // {\n // \"code\": 200,\n // \"data\": [\n // {\n // \"uid\": 63628520,\n // \"userState\": \"normal\",\n // \"subUserName\": \"\",\n // \"note\": \"\"\n // },\n // {\n // \"uid\": 132208121,\n // \"userState\": \"normal\",\n // \"subUserName\": \"\",\n // \"note\": \"\"\n // }\n // ]\n // }\n const data = this.safeValue(response, 'data');\n return data.map((subAccount) => ({\n 'uid': subAccount.uid,\n }));\n }\n async subAccountTransfer(code, amount, fromUid, toUid, params = {}) {\n await this.loadMarkets();\n const currency = this.currency(code);\n const direction = fromUid === 'master' ? 'master-transfer-out' : 'master-transfer-in';\n const subUserId = fromUid === 'master' ? toUid : fromUid;\n const request = {\n 'currency': currency['id'],\n 'amount': parseFloat(this.currencyToPrecision(code, amount)),\n 'type': direction,\n 'sub-uid': subUserId,\n };\n const response = await this.privatePostSubuserTransfer(this.extend(request, params));\n //\n // {\n // \"data\": 123456,\n // \"status\": \"ok\"\n // }\n //\n const transferId = this.safeValue(response, 'data');\n return {\n 'transferId': transferId,\n };\n }\n async transfer(code, amount, fromAccount, toAccount, params = {}) {\n /**\n * @method\n * @name huobi#transfer\n * @description transfer currency internally between wallets on the same account\n * @see https://huobiapi.github.io/docs/dm/v1/en/#transfer-margin-between-spot-account-and-future-account\n * @see https://huobiapi.github.io/docs/spot/v1/en/#transfer-fund-between-spot-account-and-future-contract-account\n * @see https://huobiapi.github.io/docs/usdt_swap/v1/en/#general-transfer-margin-between-spot-account-and-usdt-margined-contracts-account\n * @see https://huobiapi.github.io/docs/spot/v1/en/#transfer-asset-from-spot-trading-account-to-cross-margin-account-cross\n * @see https://huobiapi.github.io/docs/spot/v1/en/#transfer-asset-from-spot-trading-account-to-isolated-margin-account-isolated\n * @see https://huobiapi.github.io/docs/spot/v1/en/#transfer-asset-from-cross-margin-account-to-spot-trading-account-cross\n * @see https://huobiapi.github.io/docs/spot/v1/en/#transfer-asset-from-isolated-margin-account-to-spot-trading-account-isolated\n * @param {string} code unified currency code\n * @param {float} amount amount to transfer\n * @param {string} fromAccount account to transfer from 'spot', 'future', 'swap'\n * @param {string} toAccount account to transfer to 'spot', 'future', 'swap'\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {string} [params.symbol] used for isolated margin transfer\n * @param {string} [params.subType] 'linear' or 'inverse', only used when transfering to/from swap accounts\n * @returns {object} a [transfer structure]{@link https://docs.ccxt.com/#/?id=transfer-structure}\n */\n await this.loadMarkets();\n const currency = this.currency(code);\n const request = {\n 'currency': currency['id'],\n 'amount': parseFloat(this.currencyToPrecision(code, amount)),\n };\n let subType = undefined;\n [subType, params] = this.handleSubTypeAndParams('transfer', undefined, params);\n let fromAccountId = this.convertTypeToAccount(fromAccount);\n let toAccountId = this.convertTypeToAccount(toAccount);\n const toCross = toAccountId === 'cross';\n const fromCross = fromAccountId === 'cross';\n const toIsolated = this.inArray(toAccountId, this.ids);\n const fromIsolated = this.inArray(fromAccountId, this.ids);\n const fromSpot = fromAccountId === 'pro';\n const toSpot = toAccountId === 'pro';\n if (fromSpot && toSpot) {\n throw new ExchangeTransferError()\n .addMessage('Cannot make a transfer between ' + fromAccount + ' and ' + toAccount)\n .exchange(this.id);\n }\n const fromOrToFuturesAccount = (fromAccountId === 'futures') || (toAccountId === 'futures');\n let response = undefined;\n if (fromOrToFuturesAccount) {\n let type = fromAccountId + '-to-' + toAccountId;\n type = this.safeString(params, 'type', type);\n request['type'] = type;\n response = await this.spotPrivatePostV1FuturesTransfer(this.extend(request, params));\n }\n else if (fromSpot && toCross) {\n response = await this.privatePostCrossMarginTransferIn(this.extend(request, params));\n }\n else if (fromCross && toSpot) {\n response = await this.privatePostCrossMarginTransferOut(this.extend(request, params));\n }\n else if (fromSpot && toIsolated) {\n request['symbol'] = toAccountId;\n response = await this.privatePostDwTransferInMargin(this.extend(request, params));\n }\n else if (fromIsolated && toSpot) {\n request['symbol'] = fromAccountId;\n response = await this.privatePostDwTransferOutMargin(this.extend(request, params));\n }\n else {\n if (subType === 'linear') {\n if ((fromAccountId === 'swap') || (fromAccount === 'linear-swap')) {\n fromAccountId = 'linear-swap';\n }\n else {\n toAccountId = 'linear-swap';\n }\n // check if cross-margin or isolated\n let symbol = this.safeString(params, 'symbol');\n params = this.omit(params, 'symbol');\n if (symbol !== undefined) {\n symbol = this.marketId(symbol);\n request['margin-account'] = symbol;\n }\n else {\n request['margin-account'] = 'USDT'; // cross-margin\n }\n }\n request['from'] = fromSpot ? 'spot' : fromAccountId;\n request['to'] = toSpot ? 'spot' : toAccountId;\n response = await this.v2PrivatePostAccountTransfer(this.extend(request, params));\n }\n //\n // {\n // \"code\": \"200\",\n // \"data\": \"660150061\",\n // \"message\": \"Succeed\",\n // \"success\": true,\n // \"print-log\": true\n // }\n //\n return this.parseTransfer(response, currency);\n }\n async sign(path, api = 'public', method = 'GET', params = {}, headers = undefined, body = undefined) {\n let url = '/';\n const query = this.omit(params, this.extractParams(path));\n if (typeof api === 'string') {\n // signing implementation for the old endpoints\n if ((api === 'public') || (api === 'private')) {\n url += this.version;\n }\n else if ((api === 'v2Public') || (api === 'v2Private')) {\n url += 'v2';\n }\n url += '/' + this.implodeParams(path, params);\n if (api === 'private' || api === 'v2Private') {\n this.checkRequiredCredentials();\n const timestamp = this.ymdhms(this.nonce(), 'T');\n let request = {\n 'SignatureMethod': 'HmacSHA256',\n 'SignatureVersion': '2',\n 'AccessKeyId': this.apiKey,\n 'Timestamp': timestamp,\n };\n if (method !== 'POST') {\n request = this.extend(request, query);\n }\n const sortedRequest = this.keysort(request);\n let auth = this.urlencode(sortedRequest);\n // unfortunately, PHP demands double quotes for the escaped newline symbol\n const payload = [method, this.hostname, url, auth].join(\"\\n\"); // eslint-disable-line quotes\n let signature = undefined;\n if (this.externalSigner) {\n signature = await this.externalSigner.sign({\n 'payload': this.encode(payload),\n 'publicApiKey': this.apiKey,\n 'exchangeId': 'huobi', // @todo replace by the id once migrated from ccxt to sdk exchange id\n });\n }\n else {\n signature = this.hmac(this.encode(payload), this.encode(this.secret), sha256, 'base64');\n }\n auth += '&' + this.urlencode({ 'Signature': signature });\n url += '?' + auth;\n if (method === 'POST') {\n body = this.json(query);\n headers = {\n 'Content-Type': 'application/json',\n };\n }\n else {\n headers = {\n 'Content-Type': 'application/x-www-form-urlencoded',\n };\n }\n }\n else {\n if (Object.keys(query).length) {\n url += '?' + this.urlencode(query);\n }\n }\n url = this.implodeParams(this.urls['api'][api], {\n 'hostname': this.hostname,\n }) + url;\n }\n else {\n // signing implementation for the new endpoints\n // const [ type, access ] = api;\n const type = this.safeString(api, 0);\n const access = this.safeString(api, 1);\n const levelOneNestedPath = this.safeString(api, 2);\n const levelTwoNestedPath = this.safeString(api, 3);\n let hostname = undefined;\n let hostnames = this.safeValue(this.urls['hostnames'], type);\n if (typeof hostnames !== 'string') {\n hostnames = this.safeValue(hostnames, levelOneNestedPath);\n if ((typeof hostnames !== 'string') && (levelTwoNestedPath !== undefined)) {\n hostnames = this.safeValue(hostnames, levelTwoNestedPath);\n }\n }\n hostname = hostnames;\n url += this.implodeParams(path, params);\n if (access === 'public') {\n if (Object.keys(query).length) {\n url += '?' + this.urlencode(query);\n }\n }\n else if (access === 'private') {\n this.checkRequiredCredentials();\n if (method === 'POST') {\n const options = this.safeValue(this.options, 'broker', {});\n const id = this.safeString(options, 'id', 'AA03022abc');\n if (path.indexOf('cancel') === -1 && path.endsWith('order')) {\n // swap order placement\n const channelCode = this.safeString(params, 'channel_code');\n if (channelCode === undefined) {\n params['channel_code'] = id;\n }\n }\n else if (path.endsWith('orders/place')) {\n // spot order placement\n const clientOrderId = this.safeString(params, 'client-order-id');\n if (clientOrderId === undefined) {\n params['client-order-id'] = id + this.uuid();\n }\n }\n }\n const timestamp = this.ymdhms(this.nonce(), 'T');\n let request = {\n 'SignatureMethod': 'HmacSHA256',\n 'SignatureVersion': '2',\n 'AccessKeyId': this.apiKey,\n 'Timestamp': timestamp,\n };\n if (method !== 'POST') {\n request = this.extend(request, query);\n }\n request = this.keysort(request);\n let auth = this.urlencode(request);\n // unfortunately, PHP demands double quotes for the escaped newline symbol\n const payload = [method, hostname, url, auth].join(\"\\n\"); // eslint-disable-line quotes\n let signature = undefined;\n if (this.externalSigner) {\n signature = await this.externalSigner.sign({\n 'payload': this.encode(payload),\n 'publicApiKey': this.apiKey,\n 'exchangeId': 'huobi', // @todo replace by the id once migrated from ccxt to sdk exchange id\n });\n }\n else {\n signature = this.hmac(this.encode(payload), this.encode(this.secret), sha256, 'base64');\n }\n auth += '&' + this.urlencode({ 'Signature': signature });\n url += '?' + auth;\n if (method === 'POST') {\n body = this.json(query);\n if (body.length === 2) {\n body = '{}';\n }\n headers = {\n 'Content-Type': 'application/json',\n };\n }\n else {\n headers = {\n 'Content-Type': 'application/x-www-form-urlencoded',\n };\n }\n }\n url = this.implodeParams(this.urls['api'][type], {\n 'hostname': hostname,\n }) + url;\n }\n return { 'url': url, 'method': method, 'body': body, 'headers': headers };\n }\n handleErrors(httpCode, reason, url, method, headers, body, response, requestHeaders, requestBody) {\n if (response === undefined) {\n return undefined; // fallback to default error handler\n }\n if ('status' in response) {\n //\n // {\"status\":\"error\",\"err-code\":\"order-limitorder-amount-min-error\",\"err-msg\":\"limit order amount error, min: `0.001`\",\"data\":null}\n //\n const status = this.safeString(response, 'status');\n if (status === 'error') {\n const code = this.safeString2(response, 'err-code', 'err_code');\n const message = this.safeString2(response, 'err-msg', 'err_msg');\n const userMessage = code + ': ' + message;\n this.throwBroadlyMatchedException(this.exceptions['broad'], body, userMessage);\n this.throwExactlyMatchedException(this.exceptions['exact'], code, userMessage);\n this.throwExactlyMatchedException(this.exceptions['exact'], message, userMessage);\n throw new ExchangeError().addMessage(userMessage).exchange(this.id);\n }\n }\n if ('code' in response) {\n // {code: '1003', message: 'invalid signature'}\n const code = this.safeString(response, 'code');\n const message = this.safeString(response, 'message');\n const userMessage = code + ': ' + message;\n this.throwExactlyMatchedException(this.exceptions['exact'], code, userMessage);\n }\n return undefined;\n }\n parsePosition(position, market = undefined) {\n //\n // {\n // \"symbol\": \"BTC\",\n // \"contract_code\": \"BTC-USDT\",\n // \"volume\": \"1.000000000000000000\",\n // \"available\": \"1.000000000000000000\",\n // \"frozen\": \"0E-18\",\n // \"cost_open\": \"47162.000000000000000000\",\n // \"cost_hold\": \"47151.300000000000000000\",\n // \"profit_unreal\": \"0.007300000000000000\",\n // \"profit_rate\": \"-0.000144183876850008\",\n // \"lever_rate\": \"2\",\n // \"position_margin\": \"23.579300000000000000\",\n // \"direction\": \"buy\",\n // \"profit\": \"-0.003400000000000000\",\n // \"last_price\": \"47158.6\",\n // \"margin_asset\": \"USDT\",\n // \"margin_mode\": \"isolated\",\n // \"margin_account\": \"BTC-USDT\",\n // \"margin_balance\": \"24.973020070000000000\",\n // \"margin_position\": \"23.579300000000000000\",\n // \"margin_frozen\": \"0\",\n // \"margin_available\": \"1.393720070000000000\",\n // \"profit_real\": \"0E-18\",\n // \"risk_rate\": \"1.044107779705080303\",\n // \"withdraw_available\": \"1.386420070000000000000000000000000000\",\n // \"liquidation_price\": \"22353.229148614609571788\",\n // \"adjust_factor\": \"0.015000000000000000\",\n // \"margin_static\": \"24.965720070000000000\"\n // }\n //\n market = this.safeMarket(this.safeString(position, 'contract_code'));\n const symbol = market['symbol'];\n const contracts = this.safeString(position, 'volume');\n const contractSize = this.safeValue(market, 'contractSize');\n const contractSizeString = this.numberToString(contractSize);\n const entryPrice = this.safeNumber(position, 'cost_open');\n const initialMargin = this.safeString(position, 'position_margin');\n const rawSide = this.safeString(position, 'direction');\n const side = (rawSide === 'buy') ? 'long' : 'short';\n const unrealizedPnl = this.safeNumber(position, 'profit_unreal');\n let marginMode = this.safeString(position, 'margin_mode');\n const leverage = this.safeString(position, 'lever_rate');\n const percentage = Precise.stringMul(this.safeString(position, 'profit_rate'), '100');\n const lastPrice = this.safeString(position, 'last_price');\n const faceValue = Precise.stringMul(contracts, contractSizeString);\n let notional = undefined;\n if (market['linear']) {\n notional = Precise.stringMul(faceValue, lastPrice);\n }\n else {\n notional = Precise.stringDiv(faceValue, lastPrice);\n marginMode = 'cross';\n }\n const intialMarginPercentage = Precise.stringDiv(initialMargin, notional);\n const collateral = this.safeString(position, 'margin_balance');\n const liquidationPrice = this.safeNumber(position, 'liquidation_price');\n const adjustmentFactor = this.safeString(position, 'adjust_factor');\n const maintenanceMarginPercentage = Precise.stringDiv(adjustmentFactor, leverage);\n const maintenanceMargin = Precise.stringMul(maintenanceMarginPercentage, notional);\n const marginRatio = Precise.stringDiv(maintenanceMargin, collateral);\n return this.safePosition({\n 'info': position,\n 'id': undefined,\n 'symbol': symbol,\n 'contracts': this.parseNumber(contracts),\n 'contractSize': contractSize,\n 'entryPrice': entryPrice,\n 'collateral': this.parseNumber(collateral),\n 'side': side,\n 'unrealizedPnl': unrealizedPnl,\n 'leverage': this.parseNumber(leverage),\n 'percentage': this.parseNumber(percentage),\n 'marginMode': marginMode,\n 'notional': this.parseNumber(notional),\n 'markPrice': undefined,\n 'lastPrice': undefined,\n 'liquidationPrice': liquidationPrice,\n 'initialMargin': this.parseNumber(initialMargin),\n 'initialMarginPercentage': this.parseNumber(intialMarginPercentage),\n 'maintenanceMargin': this.parseNumber(maintenanceMargin),\n 'maintenanceMarginPercentage': this.parseNumber(maintenanceMarginPercentage),\n 'marginRatio': this.parseNumber(marginRatio),\n 'timestamp': undefined,\n 'datetime': undefined,\n 'hedged': undefined,\n 'lastUpdateTimestamp': undefined,\n 'stopLossPrice': undefined,\n 'takeProfitPrice': undefined,\n });\n }\n async fetchPositions(symbols = undefined, params = {}) {\n /**\n * @method\n * @name huobi#fetchPositions\n * @description fetch all open positions\n * @param {string[]|undefined} symbols list of unified market symbols\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object[]} a list of [position structure]{@link https://docs.ccxt.com/#/?id=position-structure}\n */\n await this.loadMarkets();\n symbols = this.marketSymbols(symbols);\n let market = undefined;\n if (symbols !== undefined) {\n const first = this.safeString(symbols, 0);\n market = this.market(first);\n }\n let marginMode = undefined;\n [marginMode, params] = this.handleMarginModeAndParams('fetchPositions', params, 'cross');\n let subType = undefined;\n [subType, params] = this.handleSubTypeAndParams('fetchPositions', market, params, 'linear');\n let marketType = undefined;\n [marketType, params] = this.handleMarketTypeAndParams('fetchPositions', market, params);\n if (marketType === 'spot') {\n marketType = 'future';\n }\n let response = undefined;\n if (subType === 'linear') {\n if (marginMode === 'isolated') {\n response = await this.contractPrivatePostLinearSwapApiV1SwapPositionInfo(params);\n }\n else if (marginMode === 'cross') {\n response = await this.contractPrivatePostLinearSwapApiV1SwapCrossPositionInfo(params);\n }\n else {\n throw new MarketTypeNotSupportedError(marginMode).exchange(this.id);\n }\n //\n // {\n // \"status\": \"ok\",\n // \"data\": [\n // {\n // \"symbol\": \"BTC\",\n // \"contract_code\": \"BTC-USDT\",\n // \"volume\": \"1.000000000000000000\",\n // \"available\": \"1.000000000000000000\",\n // \"frozen\": \"0E-18\",\n // \"cost_open\": \"47162.000000000000000000\",\n // \"cost_hold\": \"47162.000000000000000000\",\n // \"profit_unreal\": \"0.047300000000000000\",\n // \"profit_rate\": \"0.002005852169119206\",\n // \"lever_rate\": \"2\",\n // \"position_margin\": \"23.604650000000000000\",\n // \"direction\": \"buy\",\n // \"profit\": \"0.047300000000000000\",\n // \"last_price\": \"47209.3\",\n // \"margin_asset\": \"USDT\",\n // \"margin_mode\": \"isolated\",\n // \"margin_account\": \"BTC-USDT\"\n // }\n // ],\n // \"ts\": \"1641108676768\"\n // }\n //\n }\n else {\n if (marketType === 'future') {\n response = await this.contractPrivatePostApiV1ContractPositionInfo(params);\n }\n else if (marketType === 'swap') {\n response = await this.contractPrivatePostSwapApiV1SwapPositionInfo(params);\n }\n else {\n throw new MarketTypeNotSupportedError(marketType).exchange(this.id);\n }\n //\n // future\n // {\n // \"status\": \"ok\",\n // \"data\": [\n // {\n // \"symbol\": \"BTC\",\n // \"contract_code\": \"BTC220624\",\n // \"contract_type\": \"next_quarter\",\n // \"volume\": \"1.000000000000000000\",\n // \"available\": \"1.000000000000000000\",\n // \"frozen\": \"0E-18\",\n // \"cost_open\": \"49018.880000000009853343\",\n // \"cost_hold\": \"49018.880000000009853343\",\n // \"profit_unreal\": \"-8.62360608500000000000000000000000000000000000000E-7\",\n // \"profit_rate\": \"-0.000845439023678622\",\n // \"lever_rate\": \"2\",\n // \"position_margin\": \"0.001019583964880634\",\n // \"direction\": \"sell\",\n // \"profit\": \"-8.62360608500000000000000000000000000000000000000E-7\",\n // \"last_price\": \"49039.61\"\n // }\n // ],\n // \"ts\": \"1641109895199\"\n // }\n //\n // swap\n // {\n // \"status\": \"ok\",\n // \"data\": [\n // {\n // \"symbol\": \"BTC\",\n // \"contract_code\": \"BTC-USD\",\n // \"volume\": \"1.000000000000000000\",\n // \"available\": \"1.000000000000000000\",\n // \"frozen\": \"0E-18\",\n // \"cost_open\": \"47150.000000000012353300\",\n // \"cost_hold\": \"47150.000000000012353300\",\n // \"profit_unreal\": \"0E-54\",\n // \"profit_rate\": \"-7.86E-16\",\n // \"lever_rate\": \"3\",\n // \"position_margin\": \"0.000706963591375044\",\n // \"direction\": \"buy\",\n // \"profit\": \"0E-54\",\n // \"last_price\": \"47150\"\n // }\n // ],\n // \"ts\": \"1641109636572\"\n // }\n //\n }\n const data = this.safeValue(response, 'data', []);\n const timestamp = this.safeInteger(response, 'ts');\n const result = [];\n for (let i = 0; i < data.length; i++) {\n const position = data[i];\n const parsed = this.parsePosition(position);\n result.push(this.extend(parsed, {\n 'timestamp': timestamp,\n 'datetime': this.iso8601(timestamp),\n }));\n }\n return this.filterByArrayPositions(result, 'symbol', symbols, false);\n }\n async fetchPosition(symbol, params = {}) {\n /**\n * @method\n * @name huobi#fetchPosition\n * @description fetch data on a single open contract trade position\n * @param {string} symbol unified market symbol of the market the position is held in, default is undefined\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} a [position structure]{@link https://docs.ccxt.com/#/?id=position-structure}\n */\n await this.loadMarkets();\n const market = this.market(symbol);\n let marginMode = undefined;\n [marginMode, params] = this.handleMarginModeAndParams('fetchPosition', params);\n marginMode = (marginMode === undefined) ? 'cross' : marginMode;\n const [marketType, query] = this.handleMarketTypeAndParams('fetchPosition', market, params);\n const request = {};\n if (market['future'] && market['inverse']) {\n request['symbol'] = market['settleId'];\n }\n else {\n if (marginMode === 'cross') {\n request['margin_account'] = 'USDT'; // only allowed value\n }\n request['contract_code'] = market['id'];\n }\n let response = undefined;\n if (market['linear']) {\n if (marginMode === 'isolated') {\n response = await this.contractPrivatePostLinearSwapApiV1SwapAccountPositionInfo(this.extend(request, query));\n }\n else if (marginMode === 'cross') {\n response = await this.contractPrivatePostLinearSwapApiV1SwapCrossAccountPositionInfo(this.extend(request, query));\n }\n else {\n throw new MarketTypeNotSupportedError(marginMode).exchange(this.id);\n }\n //\n // isolated\n //\n // {\n // \"status\": \"ok\",\n // \"data\": [\n // {\n // \"positions\": [],\n // \"symbol\": \"BTC\",\n // \"margin_balance\": 1.949728350000000000,\n // \"margin_position\": 0,\n // \"margin_frozen\": 0E-18,\n // \"margin_available\": 1.949728350000000000,\n // \"profit_real\": -0.050271650000000000,\n // \"profit_unreal\": 0,\n // \"risk_rate\": null,\n // \"withdraw_available\": 1.949728350000000000,\n // \"liquidation_price\": null,\n // \"lever_rate\": 20,\n // \"adjust_factor\": 0.150000000000000000,\n // \"margin_static\": 1.949728350000000000,\n // \"contract_code\": \"BTC-USDT\",\n // \"margin_asset\": \"USDT\",\n // \"margin_mode\": \"isolated\",\n // \"margin_account\": \"BTC-USDT\",\n // \"trade_partition\": \"USDT\",\n // \"position_mode\": \"dual_side\"\n // },\n // ... opposite side position can be present here too (if hedge)\n // ],\n // \"ts\": 1653605008286\n // }\n //\n // cross\n //\n // {\n // \"status\": \"ok\",\n // \"data\": {\n // \"positions\": [\n // {\n // \"symbol\": \"BTC\",\n // \"contract_code\": \"BTC-USDT\",\n // \"volume\": \"1.000000000000000000\",\n // \"available\": \"1.000000000000000000\",\n // \"frozen\": \"0E-18\",\n // \"cost_open\": \"29530.000000000000000000\",\n // \"cost_hold\": \"29530.000000000000000000\",\n // \"profit_unreal\": \"-0.010000000000000000\",\n // \"profit_rate\": \"-0.016931933626820200\",\n // \"lever_rate\": \"50\",\n // \"position_margin\": \"0.590400000000000000\",\n // \"direction\": \"buy\",\n // \"profit\": \"-0.010000000000000000\",\n // \"last_price\": \"29520\",\n // \"margin_asset\": \"USDT\",\n // \"margin_mode\": \"cross\",\n // \"margin_account\": \"USDT\",\n // \"contract_type\": \"swap\",\n // \"pair\": \"BTC-USDT\",\n // \"business_type\": \"swap\",\n // \"trade_partition\": \"USDT\",\n // \"position_mode\": \"dual_side\"\n // },\n // ... opposite side position can be present here too (if hedge)\n // ],\n // \"futures_contract_detail\": [\n // {\n // \"symbol\": \"BTC\",\n // \"contract_code\": \"BTC-USDT-220624\",\n // \"margin_position\": \"0\",\n // \"margin_frozen\": \"0E-18\",\n // \"margin_available\": \"1.497799766913531118\",\n // \"profit_unreal\": \"0\",\n // \"liquidation_price\": null,\n // \"lever_rate\": \"30\",\n // \"adjust_factor\": \"0.250000000000000000\",\n // \"contract_type\": \"quarter\",\n // \"pair\": \"BTC-USDT\",\n // \"business_type\": \"futures\",\n // \"trade_partition\": \"USDT\"\n // },\n // ... other items listed with different expiration (contract_code)\n // ],\n // \"margin_mode\": \"cross\",\n // \"margin_account\": \"USDT\",\n // \"margin_asset\": \"USDT\",\n // \"margin_balance\": \"2.088199766913531118\",\n // \"margin_static\": \"2.098199766913531118\",\n // \"margin_position\": \"0.590400000000000000\",\n // \"margin_frozen\": \"0E-18\",\n // \"profit_real\": \"-0.016972710000000000\",\n // \"profit_unreal\": \"-0.010000000000000000\",\n // \"withdraw_available\": \"1.497799766913531118\",\n // \"risk_rate\": \"9.105496355562965147\",\n // \"contract_detail\": [\n // {\n // \"symbol\": \"BTC\",\n // \"contract_code\": \"BTC-USDT\",\n // \"margin_position\": \"0.590400000000000000\",\n // \"margin_frozen\": \"0E-18\",\n // \"margin_available\": \"1.497799766913531118\",\n // \"profit_unreal\": \"-0.010000000000000000\",\n // \"liquidation_price\": \"27625.176468365024050352\",\n // \"lever_rate\": \"50\",\n // \"adjust_factor\": \"0.350000000000000000\",\n // \"contract_type\": \"swap\",\n // \"pair\": \"BTC-USDT\",\n // \"business_type\": \"swap\",\n // \"trade_partition\": \"USDT\"\n // },\n // ... all symbols listed\n // ],\n // \"position_mode\": \"dual_side\"\n // },\n // \"ts\": \"1653604697466\"\n // }\n //\n }\n else {\n if (marketType === 'future') {\n response = await this.contractPrivatePostApiV1ContractAccountPositionInfo(this.extend(request, query));\n }\n else if (marketType === 'swap') {\n response = await this.contractPrivatePostSwapApiV1SwapAccountPositionInfo(this.extend(request, query));\n }\n else {\n throw new MarketTypeNotSupportedError(marketType).exchange(this.id);\n }\n //\n // future, swap\n //\n // {\n // \"status\": \"ok\",\n // \"data\": [\n // {\n // \"symbol\": \"XRP\",\n // \"contract_code\": \"XRP-USD\", // only present in swap\n // \"margin_balance\": 12.186361450698276582,\n // \"margin_position\": 5.036261079774375503,\n // \"margin_frozen\": 0E-18,\n // \"margin_available\": 7.150100370923901079,\n // \"profit_real\": -0.012672343876723438,\n // \"profit_unreal\": 0.163382354575000020,\n // \"risk_rate\": 2.344723929650649798,\n // \"withdraw_available\": 6.986718016348901059,\n // \"liquidation_price\": 0.271625200493799547,\n // \"lever_rate\": 5,\n // \"adjust_factor\": 0.075000000000000000,\n // \"margin_static\": 12.022979096123276562,\n // \"positions\": [\n // {\n // \"symbol\": \"XRP\",\n // \"contract_code\": \"XRP-USD\",\n // // \"contract_type\": \"this_week\", // only present in future\n // \"volume\": 1.0,\n // \"available\": 1.0,\n // \"frozen\": 0E-18,\n // \"cost_open\": 0.394560000000000000,\n // \"cost_hold\": 0.394560000000000000,\n // \"profit_unreal\": 0.163382354575000020,\n // \"profit_rate\": 0.032232070910556005,\n // \"lever_rate\": 5,\n // \"position_margin\": 5.036261079774375503,\n // \"direction\": \"buy\",\n // \"profit\": 0.163382354575000020,\n // \"last_price\": 0.39712\n // },\n // ... opposite side position can be present here too (if hedge)\n // ]\n // }\n // ],\n // \"ts\": 1653600470199\n // }\n //\n // cross usdt swap\n //\n // {\n // \"status\":\"ok\",\n // \"data\":{\n // \"positions\":[],\n // \"futures_contract_detail\":[]\n // \"margin_mode\":\"cross\",\n // \"margin_account\":\"USDT\",\n // \"margin_asset\":\"USDT\",\n // \"margin_balance\":\"1.000000000000000000\",\n // \"margin_static\":\"1.000000000000000000\",\n // \"margin_position\":\"0\",\n // \"margin_frozen\":\"1.000000000000000000\",\n // \"profit_real\":\"0E-18\",\n // \"profit_unreal\":\"0\",\n // \"withdraw_available\":\"0\",\n // \"risk_rate\":\"15.666666666666666666\",\n // \"contract_detail\":[]\n // },\n // \"ts\":\"1645521118946\"\n // }\n //\n }\n const data = this.safeValue(response, 'data');\n let account = undefined;\n if (marginMode === 'cross') {\n account = data;\n }\n else {\n account = this.safeValue(data, 0);\n }\n const omitted = this.omit(account, ['positions']);\n const positions = this.safeValue(account, 'positions');\n let position = undefined;\n if (market['future'] && market['inverse']) {\n for (let i = 0; i < positions.length; i++) {\n const entry = positions[i];\n if (entry['contract_code'] === market['id']) {\n position = entry;\n break;\n }\n }\n }\n else {\n position = this.safeValue(positions, 0);\n }\n const timestamp = this.safeInteger(response, 'ts');\n const parsed = this.parsePosition(this.extend(position, omitted));\n parsed['timestamp'] = timestamp;\n parsed['datetime'] = this.iso8601(timestamp);\n return parsed;\n }\n parseLedgerEntryType(type) {\n const types = {\n 'trade': 'trade',\n 'etf': 'trade',\n 'transact-fee': 'fee',\n 'fee-deduction': 'fee',\n 'transfer': 'transfer',\n 'credit': 'credit',\n 'liquidation': 'trade',\n 'interest': 'credit',\n 'deposit': 'deposit',\n 'withdraw': 'withdrawal',\n 'withdraw-fee': 'fee',\n 'exchange': 'exchange',\n 'other-types': 'transfer',\n 'rebate': 'rebate',\n };\n return this.safeString(types, type, type);\n }\n parseLedgerEntry(item, currency = undefined) {\n //\n // {\n // \"accountId\": 10000001,\n // \"currency\": \"usdt\",\n // \"transactAmt\": 10.000000000000000000,\n // \"transactType\": \"transfer\",\n // \"transferType\": \"margin-transfer-out\",\n // \"transactId\": 0,\n // \"transactTime\": 1629882331066,\n // \"transferer\": 28483123,\n // \"transferee\": 13496526\n // }\n //\n const id = this.safeString(item, 'transactId');\n const currencyId = this.safeString(item, 'currency');\n const code = this.safeCurrencyCode(currencyId, currency);\n const amount = this.safeNumber(item, 'transactAmt');\n const transferType = this.safeString(item, 'transferType');\n const type = this.parseLedgerEntryType(transferType);\n const direction = this.safeString(item, 'direction');\n const timestamp = this.safeInteger(item, 'transactTime');\n const datetime = this.iso8601(timestamp);\n const account = this.safeString(item, 'accountId');\n return {\n 'id': id,\n 'direction': direction,\n 'account': account,\n 'referenceId': id,\n 'referenceAccount': account,\n 'type': type,\n 'currency': code,\n 'amount': amount,\n 'timestamp': timestamp,\n 'datetime': datetime,\n 'before': undefined,\n 'after': undefined,\n 'status': undefined,\n 'fee': undefined,\n 'info': item,\n };\n }\n async fetchLedger(code = undefined, since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name huobi#fetchLedger\n * @see https://huobiapi.github.io/docs/spot/v1/en/#get-account-history\n * @description fetch the history of changes, actions done by the user or operations that altered balance of the user\n * @param {string} code unified currency code, default is undefined\n * @param {int} [since] timestamp in ms of the earliest ledger entry, default is undefined\n * @param {int} [limit] max number of ledger entrys to return, default is undefined\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {int} [params.until] the latest time in ms to fetch entries for\n * @param {boolean} [params.paginate] default false, when true will automatically paginate by calling this endpoint multiple times. See in the docs all the [availble parameters](https://github.com/ccxt/ccxt/wiki/Manual#pagination-params)\n * @returns {object} a [ledger structure]{@link https://docs.ccxt.com/#/?id=ledger-structure}\n */\n await this.loadMarkets();\n let paginate = false;\n [paginate, params] = this.handleOptionAndParams(params, 'fetchLedger', 'paginate');\n if (paginate) {\n return await this.fetchPaginatedCallDynamic('fetchLedger', code, since, limit, params, 500);\n }\n const accountId = await this.fetchAccountIdByType('spot', undefined, undefined, params);\n let request = {\n 'accountId': accountId,\n // 'currency': code,\n // 'transactTypes': 'all', // default all\n // 'startTime': 1546272000000,\n // 'endTime': 1546272000000,\n // 'sort': asc, // asc, desc\n // 'limit': 100, // range 1-500\n // 'fromId': 323 // first record ID in this query for pagination\n };\n let currency = undefined;\n if (code !== undefined) {\n currency = this.currency(code);\n request['currency'] = currency['id'];\n }\n if (since !== undefined) {\n request['startTime'] = since;\n }\n if (limit !== undefined) {\n request['limit'] = limit; // max 500\n }\n [request, params] = this.handleUntilOption('endTime', request, params);\n const response = await this.spotPrivateGetV2AccountLedger(this.extend(request, params));\n //\n // {\n // \"code\": 200,\n // \"message\": \"success\",\n // \"data\": [\n // {\n // \"accountId\": 10000001,\n // \"currency\": \"usdt\",\n // \"transactAmt\": 10.000000000000000000,\n // \"transactType\": \"transfer\",\n // \"transferType\": \"margin-transfer-out\",\n // \"transactId\": 0,\n // \"transactTime\": 1629882331066,\n // \"transferer\": 28483123,\n // \"transferee\": 13496526\n // },\n // {\n // \"accountId\": 10000001,\n // \"currency\": \"usdt\",\n // \"transactAmt\": -10.000000000000000000,\n // \"transactType\": \"transfer\",\n // \"transferType\": \"margin-transfer-in\",\n // \"transactId\": 0,\n // \"transactTime\": 1629882096562,\n // \"transferer\": 13496526,\n // \"transferee\": 28483123\n // }\n // ],\n // \"nextId\": 1624316679,\n // \"ok\": true\n // }\n //\n const data = this.safeValue(response, 'data', []);\n return this.parseLedger(data, currency, since, limit);\n }\n async fetchDepositWithdrawFees(codes = undefined, params = {}) {\n /**\n * @method\n * @name huobi#fetchDepositWithdrawFees\n * @description fetch deposit and withdraw fees\n * @see https://huobiapi.github.io/docs/spot/v1/en/#get-all-supported-currencies-v2\n * @param {string[]|undefined} codes list of unified currency codes\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object[]} a list of [fees structures]{@link https://docs.ccxt.com/#/?id=fee-structure}\n */\n await this.loadMarkets();\n const response = await this.spotPublicGetV2ReferenceCurrencies(params);\n //\n // {\n // \"code\": 200,\n // \"data\": [\n // {\n // \"currency\": \"sxp\",\n // \"assetType\": \"1\",\n // \"chains\": [\n // {\n // \"chain\": \"sxp\",\n // \"displayName\": \"ERC20\",\n // \"baseChain\": \"ETH\",\n // \"baseChainProtocol\": \"ERC20\",\n // \"isDynamic\": true,\n // \"numOfConfirmations\": \"12\",\n // \"numOfFastConfirmations\": \"12\",\n // \"depositStatus\": \"allowed\",\n // \"minDepositAmt\": \"0.23\",\n // \"withdrawStatus\": \"allowed\",\n // \"minWithdrawAmt\": \"0.23\",\n // \"withdrawPrecision\": \"8\",\n // \"maxWithdrawAmt\": \"227000.000000000000000000\",\n // \"withdrawQuotaPerDay\": \"227000.000000000000000000\",\n // \"withdrawQuotaPerYear\": null,\n // \"withdrawQuotaTotal\": null,\n // \"withdrawFeeType\": \"fixed\",\n // \"transactFeeWithdraw\": \"11.1653\",\n // \"addrWithTag\": false,\n // \"addrDepositTag\": false\n // }\n // ],\n // \"instStatus\": \"normal\"\n // }\n // ]\n // }\n //\n const data = this.safeValue(response, 'data');\n return this.parseDepositWithdrawFees(data, codes, 'currency');\n }\n parseDepositWithdrawFee(fee, currency = undefined) {\n //\n // {\n // \"currency\": \"sxp\",\n // \"assetType\": \"1\",\n // \"chains\": [\n // {\n // \"chain\": \"sxp\",\n // \"displayName\": \"ERC20\",\n // \"baseChain\": \"ETH\",\n // \"baseChainProtocol\": \"ERC20\",\n // \"isDynamic\": true,\n // \"numOfConfirmations\": \"12\",\n // \"numOfFastConfirmations\": \"12\",\n // \"depositStatus\": \"allowed\",\n // \"minDepositAmt\": \"0.23\",\n // \"withdrawStatus\": \"allowed\",\n // \"minWithdrawAmt\": \"0.23\",\n // \"withdrawPrecision\": \"8\",\n // \"maxWithdrawAmt\": \"227000.000000000000000000\",\n // \"withdrawQuotaPerDay\": \"227000.000000000000000000\",\n // \"withdrawQuotaPerYear\": null,\n // \"withdrawQuotaTotal\": null,\n // \"withdrawFeeType\": \"fixed\",\n // \"transactFeeWithdraw\": \"11.1653\",\n // \"addrWithTag\": false,\n // \"addrDepositTag\": false\n // }\n // ],\n // \"instStatus\": \"normal\"\n // }\n //\n const chains = this.safeValue(fee, 'chains', []);\n let result = this.depositWithdrawFee(fee);\n for (let j = 0; j < chains.length; j++) {\n const chainEntry = chains[j];\n const networkId = this.safeString(chainEntry, 'chain');\n const withdrawFeeType = this.safeString(chainEntry, 'withdrawFeeType');\n const ecid = this.networkIdToEcid(networkId);\n let withdrawFee = undefined;\n let withdrawResult = undefined;\n if (withdrawFeeType === 'fixed') {\n withdrawFee = this.safeNumber(chainEntry, 'transactFeeWithdraw');\n withdrawResult = {\n 'fee': withdrawFee,\n 'percentage': false,\n };\n }\n else {\n withdrawFee = this.safeNumber(chainEntry, 'transactFeeRateWithdraw');\n withdrawResult = {\n 'fee': withdrawFee,\n 'percentage': true,\n };\n }\n result['networks'][ecid] = {\n 'withdraw': withdrawResult,\n 'deposit': {\n 'fee': undefined,\n 'percentage': undefined,\n },\n };\n result = this.assignDefaultDepositWithdrawFees(result, currency);\n }\n return result;\n }\n async loadMarketsHelper(reload, params) {\n await super.loadMarketsHelper(reload, params);\n this.options['ecidByChainIds'] = (await this.cache.get(ecidByChainIdsCacheIdentifier(this.id), { 'clone': false }))?.data;\n this.options['chainIdbyEcids'] = (await this.cache.get(chainIdbyEcidsCacheIdentifier(this.id), { 'clone': false }))?.data;\n }\n}\n","// ----------------------------------------------------------------------------\n\n// PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:\n// https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code\n// EDIT THE CORRESPONDENT .ts FILE INSTEAD\n\n// ---------------------------------------------------------------------------\nimport Exchange from './abstract/kraken.js';\nimport { Precise } from './base/Precise.js';\nimport { TICK_SIZE, TRUNCATE } from './base/functions/number.js';\nimport { AuthenticationError, ExchangeAccountSuspendedError, ExchangeDDosProtectionError, ExchangeError, ExchangeInvalidNonceError, ExchangeInvalidPermissionsError, ExchangeNotAvailableError, ExchangeTransferError, ExchangeUnderMaintenanceError, ExchangeUnknownAssetError, GetDepositAddressError, InsufficientBalanceError, InvalidAddressError, InvalidParamsError, MarketNotFoundError, MarketNotLoadedError, MarketTypeNotSupportedError, OrderNotFoundError, TradeError, UnderWithdrawMinimumError } from './sdk/errors.js';\nimport { SdkErrorMessages } from './sdk/errorsMetadata.js';\nimport { sha256 } from './static_dependencies/noble-hashes/sha256.js';\nimport { sha512 } from './static_dependencies/noble-hashes/sha512.js';\n// ---------------------------------------------------------------------------\n/**\n * @class kraken\n * @augments Exchange\n * @description Set rateLimit to 1000 if fully verified\n */\nexport default class kraken extends Exchange {\n describe() {\n return this.deepExtend(super.describe(), {\n 'id': 'kraken',\n 'name': 'Kraken',\n 'countries': ['US'],\n 'version': '0',\n 'rateLimit': 3000,\n 'certified': false,\n 'pro': true,\n 'has': {\n 'CORS': undefined,\n 'spot': true,\n 'margin': true,\n 'swap': false,\n 'future': false,\n 'option': false,\n 'cancelAllOrders': true,\n 'cancelOrder': true,\n 'cancelOrders': true,\n 'createDepositAddress': true,\n 'createOrder': true,\n 'createTrailingAmountOrder': true,\n 'editOrder': true,\n 'fetchBalance': true,\n 'fetchClosedOrders': true,\n 'fetchCurrencies': true,\n 'fetchDepositAddress': true,\n 'fetchDeposits': true,\n 'fetchLedger': true,\n 'fetchLedgerEntry': true,\n 'fetchMarkets': true,\n 'fetchMyTrades': true,\n 'fetchOHLCV': true,\n 'fetchOpenOrders': true,\n 'fetchOrder': true,\n 'fetchOrderBook': true,\n 'fetchOrderTrades': 'emulated',\n 'fetchPositions': true,\n 'fetchTicker': true,\n 'fetchTickers': true,\n 'fetchTime': true,\n 'fetchTrades': true,\n 'fetchTradingFee': true,\n 'fetchTradingFees': false,\n 'fetchWithdrawals': true,\n 'transfer': true,\n 'withdraw': true,\n },\n 'timeframes': {\n '1m': 1,\n '5m': 5,\n '15m': 15,\n '30m': 30,\n '1h': 60,\n '4h': 240,\n '1d': 1440,\n '1w': 10080,\n '2w': 21600,\n },\n 'urls': {\n 'logo': 'https://user-images.githubusercontent.com/51840849/76173629-fc67fb00-61b1-11ea-84fe-f2de582f58a3.jpg',\n 'api': {\n 'public': 'https://api.kraken.com',\n 'private': 'https://api.kraken.com',\n 'zendesk': 'https://kraken.zendesk.com/api/v2/help_center/en-us/articles', // use the public zendesk api to receive article bodies and bypass new anti-spam protections\n },\n 'www': 'https://www.kraken.com',\n 'doc': 'https://docs.kraken.com/rest/',\n 'fees': 'https://www.kraken.com/en-us/features/fee-schedule',\n },\n 'fees': {\n 'trading': {\n 'tierBased': true,\n 'percentage': true,\n 'taker': this.parseNumber('0.0026'),\n 'maker': this.parseNumber('0.0016'),\n 'tiers': {\n 'taker': [\n [this.parseNumber('0'), this.parseNumber('0.0026')],\n [this.parseNumber('50000'), this.parseNumber('0.0024')],\n [this.parseNumber('100000'), this.parseNumber('0.0022')],\n [this.parseNumber('250000'), this.parseNumber('0.0020')],\n [this.parseNumber('500000'), this.parseNumber('0.0018')],\n [this.parseNumber('1000000'), this.parseNumber('0.0016')],\n [this.parseNumber('2500000'), this.parseNumber('0.0014')],\n [this.parseNumber('5000000'), this.parseNumber('0.0012')],\n [this.parseNumber('10000000'), this.parseNumber('0.0001')],\n ],\n 'maker': [\n [this.parseNumber('0'), this.parseNumber('0.0016')],\n [this.parseNumber('50000'), this.parseNumber('0.0014')],\n [this.parseNumber('100000'), this.parseNumber('0.0012')],\n [this.parseNumber('250000'), this.parseNumber('0.0010')],\n [this.parseNumber('500000'), this.parseNumber('0.0008')],\n [this.parseNumber('1000000'), this.parseNumber('0.0006')],\n [this.parseNumber('2500000'), this.parseNumber('0.0004')],\n [this.parseNumber('5000000'), this.parseNumber('0.0002')],\n [this.parseNumber('10000000'), this.parseNumber('0.0')],\n ],\n },\n },\n },\n 'handleContentTypeApplicationZip': true,\n 'api': {\n 'zendesk': {\n 'get': [\n // we should really refrain from putting fixed fee numbers and stop hardcoding\n // we will be using their web APIs to scrape all numbers from these articles\n '360000292886',\n '201893608', // -What-are-the-withdrawal-fees-\n ],\n },\n 'public': {\n 'get': {\n // public endpoint rate-limits are described in article: https://support.kraken.com/hc/en-us/articles/206548367-What-are-the-API-rate-limits-#1\n 'Assets': 1,\n 'AssetPairs': 1,\n 'Depth': 1,\n 'OHLC': 1,\n 'Spread': 1,\n 'SystemStatus': 1,\n 'Ticker': 1,\n 'Time': 1,\n 'Trades': 1,\n },\n },\n 'private': {\n 'post': {\n 'AddOrder': 0,\n 'AddOrderBatch': 0,\n 'AddExport': 1,\n 'Balance': 1,\n 'CancelAll': 1,\n 'CancelAllOrdersAfter': 1,\n 'CancelOrder': 0,\n 'CancelOrderBatch': 0,\n 'ClosedOrders': 1,\n 'DepositAddresses': 1,\n 'DepositMethods': 1,\n 'DepositStatus': 1,\n 'EditOrder': 0,\n 'ExportStatus': 1,\n 'GetWebSocketsToken': 1,\n 'Ledgers': 2,\n 'OpenOrders': 1,\n 'OpenPositions': 1,\n 'QueryLedgers': 1,\n 'QueryOrders': 1,\n 'QueryTrades': 1,\n 'RetrieveExport': 1,\n 'RemoveExport': 1,\n 'BalanceEx': 1,\n 'TradeBalance': 1,\n 'TradesHistory': 2,\n 'TradeVolume': 1,\n 'Withdraw': 1,\n 'WithdrawCancel': 1,\n 'WithdrawInfo': 1,\n 'WithdrawMethods': 1,\n 'WithdrawAddresses': 1,\n 'WithdrawStatus': 1,\n 'WalletTransfer': 1,\n // sub accounts\n 'CreateSubaccount': 1,\n 'AccountTransfer': 1,\n // earn\n 'Earn/Allocate': 1,\n 'Earn/Deallocate': 1,\n 'Earn/AllocateStatus': 1,\n 'Earn/DeallocateStatus': 1,\n 'Earn/Strategies': 1,\n 'Earn/Allocations': 1,\n },\n },\n },\n 'options': {\n 'marketsByAltname': {},\n 'timeDifference': 0,\n 'delistedMarketsById': {},\n // cannot withdraw/deposit these\n 'inactiveCurrencies': ['CAD', 'USD', 'JPY', 'GBP'],\n 'networks': {\n 'ETH': 'ERC20',\n 'TRX': 'TRC20',\n },\n // used for deposit methods since they are different from withdrawal methods sometimes\n 'hardCodedMethodsToEcid': {\n 'Ethereum (ERC20)': 'Ethereum',\n '1INCH - Ethereum (Unified)': 'Ethereum',\n 'AAVE - Ethereum (Unified)': 'Ethereum',\n 'ACH - Ethereum (Unified)': 'Ethereum',\n 'ADX - Ethereum (Unified)': 'Ethereum',\n 'AGLD - Ethereum (Unified)': 'Ethereum',\n 'ALCX - Ethereum (Unified)': 'Ethereum',\n 'ALICE - Ethereum (Unified)': 'Ethereum',\n 'ALPHA - Ethereum (Unified)': 'Ethereum',\n 'ANKR - Ethereum (Unified)': 'Ethereum',\n 'Link - Ethereum (Unified)': 'Ethereum',\n 'Marinade SOL (mSOL)': 'Solana',\n 'ETHW - Ethereum PoW (Unified)': 'Ethereum PoW',\n 'REPv2 - Ethereum (Unified)': 'Ethereum',\n 'TRC20 (USDC)': 'Tron',\n 'USDC.e - Polygon (Unified)': 'Polygon (USDC.e)',\n 'USDC - Optimism (Unified)': 'Optimism',\n 'USDC - Arbitrum One (Unified)': 'Arbitrum One',\n 'USDC - Polygon (Unified)': 'Polygon',\n 'USDC.e - Arbitrum One (Unified)': 'Arbitrum One (USDC.e)',\n 'USDC.e - Optimism (Unified)': 'Optimism (USDC.e)',\n },\n 'withdrawalNetworks': [],\n 'currenciesNetworks': {},\n },\n 'precisionMode': TICK_SIZE,\n 'exceptions': {\n 'exact': {\n 'EQuery:Invalid asset pair': MarketNotFoundError,\n 'EAPI:Invalid key': AuthenticationError,\n 'EFunding:Unknown withdraw key': InvalidAddressError,\n 'EFunding:Invalid amount': InsufficientBalanceError,\n 'EFunding:Fee amount is greater than asset amount': UnderWithdrawMinimumError,\n 'EService:Unavailable': ExchangeNotAvailableError,\n 'EDatabase:Internal error': ExchangeNotAvailableError,\n 'EService:Busy': ExchangeNotAvailableError,\n 'EQuery:Unknown asset': ExchangeUnknownAssetError,\n 'EAPI:Rate limit exceeded': ExchangeDDosProtectionError,\n 'EOrder:Rate limit exceeded': ExchangeDDosProtectionError,\n 'EGeneral:Internal error': ExchangeNotAvailableError,\n 'EGeneral:Temporary lockout': ExchangeDDosProtectionError,\n 'EGeneral:Permission denied': ExchangeInvalidPermissionsError,\n 'EOrder:Unknown order': TradeError,\n 'EOrder:Order minimum not met': InvalidParamsError,\n 'EGeneral:Invalid arguments': InvalidParamsError,\n 'ESession:Invalid session': AuthenticationError,\n 'EAPI:Invalid nonce': ExchangeInvalidNonceError,\n 'EFunding:No funding method': ExchangeError,\n 'EFunding:Unknown asset': ExchangeUnknownAssetError,\n 'EService:Market in post_only mode': ExchangeUnderMaintenanceError,\n 'EGeneral:Too many requests': ExchangeDDosProtectionError,\n 'ETrade:User Locked': ExchangeAccountSuspendedError, // {\"error\":[\"ETrade:User Locked\"]}\n },\n 'broad': {\n 'Invalid order': InvalidParamsError,\n 'Invalid nonce': ExchangeInvalidNonceError,\n 'Insufficient funds': InsufficientBalanceError,\n 'Cancel pending': ExchangeError,\n 'Invalid arguments:volume': InvalidParamsError,\n 'Rate limit exceeded': ExchangeDDosProtectionError,\n },\n 'messages': {\n 'EGeneral:Invalid arguments:volume': SdkErrorMessages.ORDER_UNDER_MINIMUM,\n },\n },\n });\n }\n feeToPrecision(symbol, fee) {\n return this.decimalToPrecision(fee, TRUNCATE, this.markets[symbol]['precision']['amount'], this.precisionMode);\n }\n async fetchMarkets(params = {}) {\n /**\n * @method\n * @name kraken#fetchMarkets\n * @description retrieves data on all markets for kraken\n * @see https://docs.kraken.com/rest/#tag/Market-Data/operation/getTradableAssetPairs\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object[]} an array of objects representing market data\n */\n const response = await this.publicGetAssetPairs(params);\n //\n // {\n // \"error\": [],\n // \"result\": {\n // \"ADAETH\": {\n // \"altname\": \"ADAETH\",\n // \"wsname\": \"ADA\\/ETH\",\n // \"aclass_base\": \"currency\",\n // \"base\": \"ADA\",\n // \"aclass_quote\": \"currency\",\n // \"quote\": \"XETH\",\n // \"lot\": \"unit\",\n // \"pair_decimals\": 7,\n // \"lot_decimals\": 8,\n // \"lot_multiplier\": 1,\n // \"leverage_buy\": [],\n // \"leverage_sell\": [],\n // \"fees\": [\n // [0, 0.26],\n // [50000, 0.24],\n // [100000, 0.22],\n // [250000, 0.2],\n // [500000, 0.18],\n // [1000000, 0.16],\n // [2500000, 0.14],\n // [5000000, 0.12],\n // [10000000, 0.1]\n // ],\n // \"fees_maker\": [\n // [0, 0.16],\n // [50000, 0.14],\n // [100000, 0.12],\n // [250000, 0.1],\n // [500000, 0.08],\n // [1000000, 0.06],\n // [2500000, 0.04],\n // [5000000, 0.02],\n // [10000000, 0]\n // ],\n // \"fee_volume_currency\": \"ZUSD\",\n // \"margin_call\": 80,\n // \"margin_stop\": 40,\n // \"ordermin\": \"1\"\n // },\n // }\n // }\n //\n const markets = this.safeValue(response, 'result', {});\n const keys = Object.keys(markets);\n let result = [];\n for (let i = 0; i < keys.length; i++) {\n const id = keys[i];\n const market = markets[id];\n const baseId = this.safeString(market, 'base');\n const quoteId = this.safeString(market, 'quote');\n const base = this.safeCurrencyCode(baseId);\n const quote = this.safeCurrencyCode(quoteId);\n const darkpool = id.indexOf('.d') >= 0;\n const altname = this.safeString(market, 'altname');\n const makerFees = this.safeValue(market, 'fees_maker', []);\n const firstMakerFee = this.safeValue(makerFees, 0, []);\n const firstMakerFeeRate = this.safeString(firstMakerFee, 1);\n let maker = undefined;\n if (firstMakerFeeRate !== undefined) {\n maker = this.parseNumber(Precise.stringDiv(firstMakerFeeRate, '100'));\n }\n const takerFees = this.safeValue(market, 'fees', []);\n const firstTakerFee = this.safeValue(takerFees, 0, []);\n const firstTakerFeeRate = this.safeString(firstTakerFee, 1);\n let taker = undefined;\n if (firstTakerFeeRate !== undefined) {\n taker = this.parseNumber(Precise.stringDiv(firstTakerFeeRate, '100'));\n }\n const leverageBuy = this.safeValue(market, 'leverage_buy', []);\n const leverageBuyLength = leverageBuy.length;\n const precisionPrice = this.parseNumber(this.parsePrecision(this.safeString(market, 'pair_decimals')));\n result.push({\n 'id': id,\n 'wsId': this.safeString(market, 'wsname'),\n 'symbol': darkpool ? altname : (base + '/' + quote),\n 'base': base,\n 'quote': quote,\n 'settle': undefined,\n 'baseId': baseId,\n 'quoteId': quoteId,\n 'settleId': undefined,\n 'darkpool': darkpool,\n 'altname': market['altname'],\n 'type': 'spot',\n 'spot': true,\n 'margin': (leverageBuyLength > 0),\n 'swap': false,\n 'future': false,\n 'option': false,\n 'active': true,\n 'contract': false,\n 'linear': undefined,\n 'inverse': undefined,\n 'taker': taker,\n 'maker': maker,\n 'contractSize': undefined,\n 'expiry': undefined,\n 'expiryDatetime': undefined,\n 'strike': undefined,\n 'optionType': undefined,\n 'precision': {\n 'amount': this.parseNumber(this.parsePrecision(this.safeString(market, 'lot_decimals'))),\n 'price': precisionPrice,\n },\n 'limits': {\n 'leverage': {\n 'min': this.parseNumber('1'),\n 'max': this.safeNumber(leverageBuy, leverageBuyLength - 1, 1),\n },\n 'amount': {\n 'min': this.safeNumber(market, 'ordermin'),\n 'max': undefined,\n },\n 'price': {\n 'min': precisionPrice,\n 'max': undefined,\n },\n 'cost': {\n 'min': this.safeNumber(market, 'costmin'),\n 'max': undefined,\n },\n },\n 'created': undefined,\n 'info': market,\n });\n }\n result = this.appendInactiveMarkets(result);\n this.options['marketsByAltname'] = this.indexBy(result, 'altname');\n return result;\n }\n safeCurrency(currencyId, currency = undefined) {\n if (currencyId !== undefined) {\n if (currencyId.length > 3) {\n if ((currencyId.indexOf('X') === 0) || (currencyId.indexOf('Z') === 0)) {\n if (currencyId.indexOf('.') > 0) {\n return super.safeCurrency(currencyId, currency);\n }\n else {\n currencyId = currencyId.slice(1);\n }\n }\n }\n }\n return super.safeCurrency(currencyId, currency);\n }\n appendInactiveMarkets(result) {\n // result should be an array to append to\n const precision = {\n 'amount': this.parseNumber('1e-8'),\n 'price': this.parseNumber('1e-8'),\n };\n const costLimits = { 'min': undefined, 'max': undefined };\n const priceLimits = { 'min': precision['price'], 'max': undefined };\n const amountLimits = { 'min': precision['amount'], 'max': undefined };\n const limits = { 'amount': amountLimits, 'price': priceLimits, 'cost': costLimits };\n const defaults = {\n 'darkpool': false,\n 'info': undefined,\n 'maker': undefined,\n 'taker': undefined,\n 'active': false,\n 'precision': precision,\n 'limits': limits,\n };\n const markets = [\n // { 'id': 'XXLMZEUR', 'symbol': 'XLM/EUR', 'base': 'XLM', 'quote': 'EUR', 'altname': 'XLMEUR' },\n ];\n for (let i = 0; i < markets.length; i++) {\n result.push(this.extend(defaults, markets[i]));\n }\n return result;\n }\n async fetchStatus(params = {}) {\n /**\n * @method\n * @name kraken#fetchStatus\n * @description the latest known information on the availability of the exchange API\n * @see https://docs.kraken.com/rest/#tag/Spot-Market-Data/operation/getSystemStatus\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} a [status structure]{@link https://docs.ccxt.com/#/?id=exchange-status-structure}\n */\n const response = await this.publicGetSystemStatus(params);\n // {\n // \"error\": [],\n // \"result\": {\n // \"status\": \"online\",\n // \"timestamp\": \"2023-07-06T18:52:00Z\"\n // }\n // }\n const result = this.safeValue(response, 'result', {});\n const status = this.safeString(result, 'status');\n const parsedStatus = this.safeString({ 'online': 'ok', 'maintenance': 'maintenance', 'cancel_only': 'maintenance', 'post_only': 'maintenance' }, status, 'maintenance');\n const timestamp = this.parse8601(this.safeString(result, 'timestamp'));\n return {\n 'status': parsedStatus,\n 'updated': timestamp,\n 'eta': undefined,\n 'url': undefined,\n 'info': response,\n };\n }\n async fetchWithdrawalMethods() {\n let withdrawalNetworks = this.safeValue(this.options, 'withdrawalNetworks', []);\n if (withdrawalNetworks.length === 0 && this.checkRequiredCredentials(false)) {\n try {\n const withdrawNetworkResponse = await this.privatePostWithdrawMethods();\n // Withdrawal Methods\n // {\n // \"error\": [],\n // \"result\": [\n // {\n // \"asset\": \"XXBT\",\n // \"method\": \"Bitcoin\",\n // \"network\": \"Bitcoin\",\n // \"minimum\": \"0.0004\"\n // },\n // {\n // \"asset\": \"XXBT\",\n // \"method\": \"Bitcoin Lightning\",\n // \"network\": \"Lightning\",\n // \"minimum\": \"0.00001\"\n // }\n // ]\n // }\n this.handleErrors(null, null, null, null, null, {}, withdrawNetworkResponse, null, null);\n withdrawalNetworks = this.safeValue(withdrawNetworkResponse, 'result', []);\n this.options['withdrawalNetworks'] = withdrawalNetworks;\n }\n catch (e) {\n // The user does not have access to the endpoint, not a big deal we just return an empty array\n if (e instanceof ExchangeInvalidPermissionsError) {\n return [];\n }\n throw e;\n }\n }\n this.options['methodsByEcids'] = {};\n this.options['ecidsByMethods'] = {};\n const networksPerCurrency = {};\n for (let i = 0; i < withdrawalNetworks.length; i++) {\n const network = this.safeValue(withdrawalNetworks, i);\n const asset = this.safeString(network, 'asset');\n const code = this.safeCurrencyCode(asset);\n const networkInformation = {\n 'info': network,\n 'network': this.safeString(network, 'network'),\n 'withdraw': {\n 'min': this.parseNumber(this.safeString(network, 'minimum')),\n 'max': undefined,\n },\n 'withdraw_enabled': true,\n };\n this.options['methodsByEcids'][code] = this.safeValue(this.options['methodsByEcids'], code, {});\n this.options['ecidsByMethods'][code] = this.safeValue(this.options['ecidsByMethods'], code, {});\n const method = this.safeString(networkInformation['info'], 'method');\n this.options['methodsByEcids'][code][networkInformation['network']] = method;\n this.options['ecidsByMethods'][code][method] = networkInformation['network'];\n const currencyNetworks = this.safeValue(networksPerCurrency, code, []);\n currencyNetworks.push(networkInformation);\n networksPerCurrency[code] = currencyNetworks;\n }\n this.options['currenciesNetworks'] = networksPerCurrency;\n return withdrawalNetworks;\n }\n async fetchCurrencies(params = {}) {\n /**\n * @method\n * @name kraken#fetchCurrencies\n * @description fetches all available currencies on an exchange\n * @see https://docs.kraken.com/rest/#tag/Market-Data/operation/getAssetInfo\n * @see https://docs.kraken.com/rest/#tag/Funding/operation/getWithdrawalMethods\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} an associative dictionary of currencies\n */\n const assetsResponse = await this.publicGetAssets(params);\n await this.fetchWithdrawalMethods();\n // Assets\n // {\n // \"error\": [],\n // \"result\": {\n // \"ADA\": { \"aclass\": \"currency\", \"altname\": \"ADA\", \"decimals\": 8, \"display_decimals\": 6, \"collateral_value\": 1, \"status\": \"enabled\" },\n // \"BCH\": { \"aclass\": \"currency\", \"altname\": \"BCH\", \"decimals\": 10, \"display_decimals\": 5, \"collateral_value\": 1, \"status\": \"deposit_only\" },\n // ...\n // },\n // }\n const currencies = this.safeValue(assetsResponse, 'result', {});\n const ids = Object.keys(currencies);\n const result = {};\n for (let i = 0; i < ids.length; i++) {\n const id = ids[i];\n const currency = currencies[id];\n // todo: will need to rethink the fees\n // see: https://support.kraken.com/hc/en-us/articles/201893608-What-are-the-withdrawal-fees-\n // to add support for multiple withdrawal/deposit methods and\n // differentiated fees for each particular method\n const code = this.safeCurrencyCode(this.safeString(currency, 'altname'));\n const precision = this.parseNumber(this.parsePrecision(this.safeString(currency, 'decimals')));\n const status = this.safeString(currency, 'status');\n const isTokenDepositable = (status === 'enabled' || status === 'deposit_only');\n const isWithdrawalEnabled = (status === 'enabled' || status === 'withdrawal_only');\n // Load the networks if they exist\n const currenciesNetworks = this.safeValue(this.options, 'currenciesNetworks', {});\n const networkInformations = this.safeValue(currenciesNetworks, code, []);\n result[code] = {\n 'id': id,\n 'code': code,\n 'info': currency,\n 'name': code,\n 'active': isTokenDepositable && isWithdrawalEnabled,\n 'deposit': isTokenDepositable,\n 'withdraw': isWithdrawalEnabled,\n 'fee': undefined,\n 'precision': precision,\n 'limits': {\n 'amount': {\n 'min': precision,\n 'max': undefined,\n },\n 'withdraw': {\n 'min': undefined,\n 'max': undefined,\n },\n },\n 'networks': networkInformations,\n };\n }\n return result;\n }\n async fetchTradingFee(symbol, params = {}) {\n /**\n * @method\n * @name kraken#fetchTradingFee\n * @description fetch the trading fees for a market\n * @see https://docs.kraken.com/rest/#tag/Account-Data/operation/getTradeVolume\n * @param {string} symbol unified market symbol\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} a [fee structure]{@link https://docs.ccxt.com/#/?id=fee-structure}\n */\n await this.loadMarkets();\n const market = this.market(symbol);\n const request = {\n 'pair': market['id'],\n 'fee-info': true,\n };\n const response = await this.privatePostTradeVolume(this.extend(request, params));\n //\n // {\n // \"error\": [],\n // \"result\": {\n // \"currency\": 'ZUSD',\n // \"volume\": '0.0000',\n // \"fees\": {\n // \"XXBTZUSD\": {\n // \"fee\": '0.2600',\n // \"minfee\": '0.1000',\n // \"maxfee\": '0.2600',\n // \"nextfee\": '0.2400',\n // \"tiervolume\": '0.0000',\n // \"nextvolume\": '50000.0000'\n // }\n // },\n // \"fees_maker\": {\n // \"XXBTZUSD\": {\n // \"fee\": '0.1600',\n // \"minfee\": '0.0000',\n // \"maxfee\": '0.1600',\n // \"nextfee\": '0.1400',\n // \"tiervolume\": '0.0000',\n // \"nextvolume\": '50000.0000'\n // }\n // }\n // }\n // }\n //\n const result = this.safeValue(response, 'result', {});\n return this.parseTradingFee(result, market);\n }\n async getWhitelistedAddresses(params) {\n /**\n * @see https://docs.kraken.com/rest/#tag/Funding/operation/getWithdrawalAddresses\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n */\n await this.loadMarkets();\n const result = await this.privatePostWithdrawAddresses(params);\n // {\n // \"error\": [],\n // \"result\": [\n // {\n // \"address\": \"bc1qxdsh4sdd29h6ldehz0se5c61asq8cgwyjf2y3z\",\n // \"asset\": \"XBT\",\n // \"method\": \"Bitcoin\",\n // \"key\": \"btc-wallet-1\",\n // \"verified\": true\n // }\n // ]\n // }\n const whitelistedAddresses = [];\n const addresses = this.safeValue(result, 'result', []);\n addresses.forEach((address) => {\n const asset = this.safeString(address, 'asset');\n const method = this.safeString(address, 'method');\n const code = this.safeCurrencyCode(asset);\n const ecid = this.methodToEcid(method, code);\n whitelistedAddresses.push({\n 'address': this.safeString(address, 'address'),\n 'asset': code,\n 'method': method,\n 'key': this.safeString(address, 'key'),\n 'verified': this.safeValue(address, 'verified'),\n 'network': ecid,\n });\n });\n return whitelistedAddresses;\n }\n methodToEcid(method, currencyCode) {\n /**\n * @description converts a method to an ecid\n */\n const currencyCodes = Object.keys(this.options['ecidsByMethods']);\n const currencyCodesLength = currencyCodes.length;\n if (currencyCodesLength === 0) {\n throw new MarketNotLoadedError()\n .addMessage('methodToEcid() - markets need to be loaded at first')\n .exchange(this.id);\n }\n const methods = this.safeValue(this.options['ecidsByMethods'], currencyCode, {});\n let ecid = this.safeValue(methods, method);\n if (!ecid) {\n ecid = this.safeValue(this.options['hardCodedMethodsToEcid'], method);\n }\n if (!ecid) {\n const greedyMethod = method.replace(/\\s*\\((Unified|Hex)\\)/g, '').trim();\n ecid = this.safeValue(methods, greedyMethod);\n }\n if (!ecid) {\n const greedyMethod = method.replace(/\\s*\\((Unified|Hex)\\)/g, '').replace(`${currencyCode} -`, '').trim();\n ecid = this.safeValue(methods, greedyMethod);\n }\n if (!ecid) {\n // we take asset - network from withdrawal methods and try to match. If matches, we get the network field from withdrawal methods\n const withdrawalNetworks = this.options['withdrawalNetworks'];\n for (let i = 0; i < withdrawalNetworks.length; i++) {\n const withdrawalNetwork = this.safeValue(withdrawalNetworks, i);\n const asset = this.safeString(withdrawalNetwork, 'asset');\n const code = this.safeCurrencyCode(asset);\n const network = this.safeString(withdrawalNetwork, 'network');\n const greedyMethod = method.replace(/\\s*\\((Unified|Hex)\\)/g, '').trim();\n if (`${code} - ${network}` === greedyMethod) {\n ecid = network;\n break;\n }\n }\n }\n if (!ecid) {\n const greedyHardcodedMethod = method.replace(`${currencyCode} -`, '').trim();\n ecid = this.safeValue(this.options['hardCodedMethodsToEcid'], greedyHardcodedMethod);\n }\n return ecid;\n }\n parseTradingFee(response, market) {\n const makerFees = this.safeValue(response, 'fees_maker', {});\n const takerFees = this.safeValue(response, 'fees', {});\n const symbolMakerFee = this.safeValue(makerFees, market['id'], {});\n const symbolTakerFee = this.safeValue(takerFees, market['id'], {});\n return {\n 'info': response,\n 'symbol': market['symbol'],\n 'maker': this.safeNumber(symbolMakerFee, 'fee'),\n 'taker': this.safeNumber(symbolTakerFee, 'fee'),\n 'percentage': true,\n 'tierBased': true,\n };\n }\n parseBidAsk(bidask, priceKey = 0, amountKey = 1, countOrIdKey = 2) {\n const price = this.safeNumber(bidask, priceKey);\n const amount = this.safeNumber(bidask, amountKey);\n const timestamp = this.safeInteger(bidask, 2);\n return [price, amount, timestamp];\n }\n async fetchOrderBook(symbol, limit = undefined, params = {}) {\n /**\n * @method\n * @name kraken#fetchOrderBook\n * @description fetches information on open orders with bid (buy) and ask (sell) prices, volumes and other data\n * @see https://docs.kraken.com/rest/#tag/Market-Data/operation/getOrderBook\n * @param {string} symbol unified symbol of the market to fetch the order book for\n * @param {int} [limit] the maximum amount of order book entries to return\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} A dictionary of [order book structures]{@link https://docs.ccxt.com/#/?id=order-book-structure} indexed by market symbols\n */\n await this.loadMarkets();\n const market = this.market(symbol);\n if (market['darkpool']) {\n throw new MarketTypeNotSupportedError('darkpool').addMessage(' fetchOrderBook() does not provide an order book for darkpool symbol ' + symbol).exchange(this.id);\n }\n const request = {\n 'pair': market['id'],\n };\n if (limit !== undefined) {\n request['count'] = limit; // 100\n }\n const response = await this.publicGetDepth(this.extend(request, params));\n //\n // {\n // \"error\":[],\n // \"result\":{\n // \"XETHXXBT\":{\n // \"asks\":[\n // [\"0.023480\",\"4.000\",1586321307],\n // [\"0.023490\",\"50.095\",1586321306],\n // [\"0.023500\",\"28.535\",1586321302],\n // ],\n // \"bids\":[\n // [\"0.023470\",\"59.580\",1586321307],\n // [\"0.023460\",\"20.000\",1586321301],\n // [\"0.023440\",\"67.832\",1586321306],\n // ]\n // }\n // }\n // }\n //\n const result = this.safeValue(response, 'result', {});\n let orderbook = this.safeValue(result, market['id']);\n // sometimes kraken returns wsname instead of market id\n // https://github.com/ccxt/ccxt/issues/8662\n const marketInfo = this.safeValue(market, 'info', {});\n const wsName = this.safeValue(marketInfo, 'wsname');\n if (wsName !== undefined) {\n orderbook = this.safeValue(result, wsName, orderbook);\n }\n return this.parseOrderBook(orderbook, symbol);\n }\n parseTicker(ticker, market = undefined) {\n //\n // {\n // \"a\":[\"2432.77000\",\"1\",\"1.000\"],\n // \"b\":[\"2431.37000\",\"2\",\"2.000\"],\n // \"c\":[\"2430.58000\",\"0.04408910\"],\n // \"v\":[\"4147.94474901\",\"8896.96086304\"],\n // \"p\":[\"2456.22239\",\"2568.63032\"],\n // \"t\":[3907,10056],\n // \"l\":[\"2302.18000\",\"2302.18000\"],\n // \"h\":[\"2621.14000\",\"2860.01000\"],\n // \"o\":\"2571.56000\"\n // }\n //\n const symbol = this.safeSymbol(undefined, market);\n const v = this.safeValue(ticker, 'v', []);\n const baseVolume = this.safeString(v, 1);\n const p = this.safeValue(ticker, 'p', []);\n const vwap = this.safeString(p, 1);\n const quoteVolume = Precise.stringMul(baseVolume, vwap);\n const c = this.safeValue(ticker, 'c', []);\n const last = this.safeString(c, 0);\n const high = this.safeValue(ticker, 'h', []);\n const low = this.safeValue(ticker, 'l', []);\n const bid = this.safeValue(ticker, 'b', []);\n const ask = this.safeValue(ticker, 'a', []);\n return this.safeTicker({\n 'symbol': symbol,\n 'timestamp': undefined,\n 'datetime': undefined,\n 'high': this.safeString(high, 1),\n 'low': this.safeString(low, 1),\n 'bid': this.safeString(bid, 0),\n 'bidVolume': undefined,\n 'ask': this.safeString(ask, 0),\n 'askVolume': undefined,\n 'vwap': vwap,\n 'open': this.safeString(ticker, 'o'),\n 'close': last,\n 'last': last,\n 'previousClose': undefined,\n 'change': undefined,\n 'percentage': undefined,\n 'average': undefined,\n 'baseVolume': baseVolume,\n 'quoteVolume': quoteVolume,\n 'info': ticker,\n }, market);\n }\n async fetchTickers(symbols = undefined, params = {}) {\n /**\n * @method\n * @name kraken#fetchTickers\n * @description fetches price tickers for multiple markets, statistical information calculated over the past 24 hours for each market\n * @see https://docs.kraken.com/rest/#tag/Market-Data/operation/getTickerInformation\n * @param {string[]|undefined} symbols unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} a dictionary of [ticker structures]{@link https://docs.ccxt.com/#/?id=ticker-structure}\n */\n await this.loadMarkets();\n const request = {};\n if (symbols !== undefined) {\n symbols = this.marketSymbols(symbols);\n const marketIds = [];\n for (let i = 0; i < symbols.length; i++) {\n const symbol = symbols[i];\n const market = this.markets[symbol];\n if (market['active'] && !market['darkpool']) {\n marketIds.push(market['id']);\n }\n }\n request['pair'] = marketIds.join(',');\n }\n const response = await this.publicGetTicker(this.extend(request, params));\n const tickers = response['result'];\n const ids = Object.keys(tickers);\n const result = {};\n for (let i = 0; i < ids.length; i++) {\n const id = ids[i];\n const market = this.safeMarket(id);\n const symbol = market['symbol'];\n const ticker = tickers[id];\n result[symbol] = this.parseTicker(ticker, market);\n }\n return this.filterByArrayTickers(result, 'symbol', symbols);\n }\n async fetchTicker(symbol, params = {}) {\n /**\n * @method\n * @name kraken#fetchTicker\n * @description fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market\n * @see https://docs.kraken.com/rest/#tag/Market-Data/operation/getTickerInformation\n * @param {string} symbol unified symbol of the market to fetch the ticker for\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} a [ticker structure]{@link https://docs.ccxt.com/#/?id=ticker-structure}\n */\n await this.loadMarkets();\n const darkpool = symbol.indexOf('.d') >= 0;\n if (darkpool) {\n throw new TradeError()\n .addMessage('fetchTicker() does not provide a ticker for darkpool symbol ' + symbol)\n .exchange(this.id);\n }\n const market = this.market(symbol);\n const request = {\n 'pair': market['id'],\n };\n const response = await this.publicGetTicker(this.extend(request, params));\n const ticker = response['result'][market['id']];\n return this.parseTicker(ticker, market);\n }\n parseOHLCV(ohlcv, market = undefined) {\n //\n // [\n // 1591475640,\n // \"0.02500\",\n // \"0.02500\",\n // \"0.02500\",\n // \"0.02500\",\n // \"0.02500\",\n // \"9.12201000\",\n // 5\n // ]\n //\n return [\n this.safeTimestamp(ohlcv, 0),\n this.safeNumber(ohlcv, 1),\n this.safeNumber(ohlcv, 2),\n this.safeNumber(ohlcv, 3),\n this.safeNumber(ohlcv, 4),\n this.safeNumber(ohlcv, 6),\n ];\n }\n async fetchOHLCV(symbol, timeframe = '1m', since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name kraken#fetchOHLCV\n * @description fetches historical candlestick data containing the open, high, low, and close price, and the volume of a market\n * @see https://docs.kraken.com/rest/#tag/Market-Data/operation/getOHLCData\n * @param {string} symbol unified symbol of the market to fetch OHLCV data for\n * @param {string} timeframe the length of time each candle represents\n * @param {int} [since] timestamp in ms of the earliest candle to fetch\n * @param {int} [limit] the maximum amount of candles to fetch\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {boolean} [params.paginate] default false, when true will automatically paginate by calling this endpoint multiple times. See in the docs all the [availble parameters](https://github.com/ccxt/ccxt/wiki/Manual#pagination-params)\n * @returns {int[][]} A list of candles ordered as timestamp, open, high, low, close, volume\n */\n await this.loadMarkets();\n let paginate = false;\n [paginate, params] = this.handleOptionAndParams(params, 'fetchOHLCV', 'paginate');\n if (paginate) {\n return await this.fetchPaginatedCallDeterministic('fetchOHLCV', symbol, since, limit, timeframe, params, 720);\n }\n const market = this.market(symbol);\n const parsedTimeframe = this.safeInteger(this.timeframes, timeframe);\n const request = {\n 'pair': market['id'],\n };\n if (parsedTimeframe !== undefined) {\n request['interval'] = parsedTimeframe;\n }\n else {\n request['interval'] = timeframe;\n }\n if (since !== undefined) {\n // contrary to kraken's api documentation, the since parameter must be passed in nanoseconds\n // the adding of '000000' is copied from the fetchTrades function\n request['since'] = this.numberToString(since) + '000000'; // expected to be in nanoseconds\n }\n const response = await this.publicGetOHLC(this.extend(request, params));\n //\n // {\n // \"error\":[],\n // \"result\":{\n // \"XETHXXBT\":[\n // [1591475580,\"0.02499\",\"0.02499\",\"0.02499\",\"0.02499\",\"0.00000\",\"0.00000000\",0],\n // [1591475640,\"0.02500\",\"0.02500\",\"0.02500\",\"0.02500\",\"0.02500\",\"9.12201000\",5],\n // [1591475700,\"0.02499\",\"0.02499\",\"0.02499\",\"0.02499\",\"0.02499\",\"1.28681415\",2],\n // [1591475760,\"0.02499\",\"0.02499\",\"0.02499\",\"0.02499\",\"0.02499\",\"0.08800000\",1],\n // ],\n // \"last\":1591517580\n // }\n // }\n const result = this.safeValue(response, 'result', {});\n const ohlcvs = this.safeValue(result, market['id'], []);\n return this.parseOHLCVs(ohlcvs, market, timeframe, since, limit);\n }\n parseLedgerEntryType(type) {\n const types = {\n 'trade': 'trade',\n 'withdrawal': 'transaction',\n 'deposit': 'transaction',\n 'transfer': 'transfer',\n 'margin': 'margin',\n };\n return this.safeString(types, type, type);\n }\n parseLedgerEntry(item, currency = undefined) {\n //\n // {\n // 'LTFK7F-N2CUX-PNY4SX': {\n // \"refid\": \"TSJTGT-DT7WN-GPPQMJ\",\n // \"time\": 1520102320.555,\n // \"type\": \"trade\",\n // \"aclass\": \"currency\",\n // \"asset\": \"XETH\",\n // \"amount\": \"0.1087194600\",\n // \"fee\": \"0.0000000000\",\n // \"balance\": \"0.2855851000\"\n // },\n // ...\n // }\n //\n const id = this.safeString(item, 'id');\n let direction = undefined;\n const account = undefined;\n const referenceId = this.safeString(item, 'refid');\n const referenceAccount = undefined;\n const type = this.parseLedgerEntryType(this.safeString(item, 'type'));\n const code = this.safeCurrencyCode(this.safeString(item, 'asset'), currency);\n let amount = this.safeString(item, 'amount');\n if (Precise.stringLt(amount, '0')) {\n direction = 'out';\n amount = Precise.stringAbs(amount);\n }\n else {\n direction = 'in';\n }\n const timestamp = this.safeTimestamp(item, 'time');\n return {\n 'info': item,\n 'id': id,\n 'direction': direction,\n 'account': account,\n 'referenceId': referenceId,\n 'referenceAccount': referenceAccount,\n 'type': type,\n 'currency': code,\n 'amount': this.parseNumber(amount),\n 'before': undefined,\n 'after': this.safeNumber(item, 'balance'),\n 'status': 'ok',\n 'timestamp': timestamp,\n 'datetime': this.iso8601(timestamp),\n 'fee': {\n 'cost': this.safeNumber(item, 'fee'),\n 'currency': code,\n },\n };\n }\n async fetchLedger(code = undefined, since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name kraken#fetchLedger\n * @description fetch the history of changes, actions done by the user or operations that altered balance of the user\n * @see https://docs.kraken.com/rest/#tag/Account-Data/operation/getLedgers\n * @param {string} code unified currency code, default is undefined\n * @param {int} [since] timestamp in ms of the earliest ledger entry, default is undefined\n * @param {int} [limit] max number of ledger entrys to return, default is undefined\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {int} [params.until] timestamp in ms of the latest ledger entry\n * @returns {object} a [ledger structure]{@link https://docs.ccxt.com/#/?id=ledger-structure}\n */\n // https://www.kraken.com/features/api#get-ledgers-info\n await this.loadMarkets();\n let request = {};\n let currency = undefined;\n if (code !== undefined) {\n currency = this.currency(code);\n request['asset'] = currency['id'];\n }\n if (since !== undefined) {\n request['start'] = this.parseToInt(since / 1000);\n }\n [request, params] = this.handleUntilOption('end', request, params);\n const response = await this.privatePostLedgers(this.extend(request, params));\n // { error: [],\n // \"result\": { ledger: { 'LPUAIB-TS774-UKHP7X': { refid: \"A2B4HBV-L4MDIE-JU4N3N\",\n // \"time\": 1520103488.314,\n // \"type\": \"withdrawal\",\n // \"aclass\": \"currency\",\n // \"asset\": \"XETH\",\n // \"amount\": \"-0.2805800000\",\n // \"fee\": \"0.0050000000\",\n // \"balance\": \"0.0000051000\" },\n const result = this.safeValue(response, 'result', {});\n const ledger = this.safeValue(result, 'ledger', {});\n const keys = Object.keys(ledger);\n const items = [];\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n const value = ledger[key];\n value['id'] = key;\n items.push(value);\n }\n return this.parseLedger(items, currency, since, limit);\n }\n async fetchLedgerEntriesByIds(ids, code = undefined, params = {}) {\n // https://www.kraken.com/features/api#query-ledgers\n await this.loadMarkets();\n ids = ids.join(',');\n const request = this.extend({\n 'id': ids,\n }, params);\n const response = await this.privatePostQueryLedgers(request);\n // { error: [],\n // \"result\": { 'LPUAIB-TS774-UKHP7X': { refid: \"A2B4HBV-L4MDIE-JU4N3N\",\n // \"time\": 1520103488.314,\n // \"type\": \"withdrawal\",\n // \"aclass\": \"currency\",\n // \"asset\": \"XETH\",\n // \"amount\": \"-0.2805800000\",\n // \"fee\": \"0.0050000000\",\n // \"balance\": \"0.0000051000\" } } }\n const result = response['result'];\n const keys = Object.keys(result);\n const items = [];\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n const value = result[key];\n value['id'] = key;\n items.push(value);\n }\n return this.parseLedger(items);\n }\n async fetchLedgerEntry(id, code = undefined, params = {}) {\n const items = await this.fetchLedgerEntriesByIds([id], code, params);\n return items[0];\n }\n parseTrade(trade, market = undefined) {\n //\n // fetchTrades (public)\n //\n // [\n // \"0.032310\", // price\n // \"4.28169434\", // amount\n // 1541390792.763, // timestamp\n // \"s\", // sell or buy\n // \"l\", // limit or market\n // \"\"\n // ]\n //\n // fetchOrderTrades (private)\n //\n // {\n // \"id\": 'TIMIRG-WUNNE-RRJ6GT', // injected from outside\n // \"ordertxid\": 'OQRPN2-LRHFY-HIFA7D',\n // \"postxid\": 'TKH2SE-M7IF5-CFI7LT',\n // \"pair\": 'USDCUSDT',\n // \"time\": 1586340086.457,\n // \"type\": 'sell',\n // \"ordertype\": 'market',\n // \"price\": '0.99860000',\n // \"cost\": '22.16892001',\n // \"fee\": '0.04433784',\n // \"vol\": '22.20000000',\n // \"margin\": '0.00000000',\n // \"misc\": ''\n // }\n //\n let timestamp = undefined;\n let side = undefined;\n let type = undefined;\n let price = undefined;\n let amount = undefined;\n let id = undefined;\n let orderId = undefined;\n let fee = undefined;\n let symbol = undefined;\n if (Array.isArray(trade)) {\n timestamp = this.safeTimestamp(trade, 2);\n side = (trade[3] === 's') ? 'sell' : 'buy';\n type = (trade[4] === 'l') ? 'limit' : 'market';\n price = this.safeString(trade, 0);\n amount = this.safeString(trade, 1);\n const tradeLength = trade.length;\n if (tradeLength > 6) {\n id = this.safeString(trade, 6); // artificially added as per #1794\n }\n }\n else if (typeof trade === 'string') {\n id = trade;\n }\n else if ('ordertxid' in trade) {\n const marketId = this.safeString(trade, 'pair');\n const foundMarket = this.findMarketByAltnameOrId(marketId);\n if (foundMarket !== undefined) {\n market = foundMarket;\n }\n else if (marketId !== undefined) {\n // delisted market ids go here\n market = this.getDelistedMarketById(marketId);\n }\n orderId = this.safeString(trade, 'ordertxid');\n id = this.safeString2(trade, 'id', 'postxid');\n timestamp = this.safeTimestamp(trade, 'time');\n side = this.safeString(trade, 'type');\n type = this.safeString(trade, 'ordertype');\n price = this.safeString(trade, 'price');\n amount = this.safeString(trade, 'vol');\n if ('fee' in trade) {\n let currency = undefined;\n if (market !== undefined) {\n currency = market['quote'];\n }\n fee = {\n 'cost': this.safeString(trade, 'fee'),\n 'currency': currency,\n };\n }\n }\n if (market !== undefined) {\n symbol = market['symbol'];\n }\n const cost = this.safeString(trade, 'cost');\n return this.safeTrade({\n 'id': id,\n 'order': orderId,\n 'info': trade,\n 'timestamp': timestamp,\n 'datetime': this.iso8601(timestamp),\n 'symbol': symbol,\n 'type': type,\n 'side': side,\n 'takerOrMaker': undefined,\n 'price': price,\n 'amount': amount,\n 'cost': cost,\n 'fee': fee,\n }, market);\n }\n async fetchTrades(symbol, since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name kraken#fetchTrades\n * @description get the list of most recent trades for a particular symbol\n * @see https://docs.kraken.com/rest/#tag/Market-Data/operation/getRecentTrades\n * @param {string} symbol unified symbol of the market to fetch trades for\n * @param {int} [since] timestamp in ms of the earliest trade to fetch\n * @param {int} [limit] the maximum amount of trades to fetch\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {Trade[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=public-trades}\n */\n await this.loadMarkets();\n const market = this.market(symbol);\n const id = market['id'];\n const request = {\n 'pair': id,\n };\n // https://support.kraken.com/hc/en-us/articles/218198197-How-to-pull-all-trade-data-using-the-Kraken-REST-API\n // https://github.com/ccxt/ccxt/issues/5677\n if (since !== undefined) {\n // php does not format it properly\n // therefore we use string concatenation here\n request['since'] = since * 1e6;\n request['since'] = since.toString() + '000000'; // expected to be in nanoseconds\n }\n if (limit !== undefined) {\n request['count'] = limit;\n }\n const response = await this.publicGetTrades(this.extend(request, params));\n //\n // {\n // \"error\": [],\n // \"result\": {\n // \"XETHXXBT\": [\n // [\"0.032310\",\"4.28169434\",1541390792.763,\"s\",\"l\",\"\"]\n // ],\n // \"last\": \"1541439421200678657\"\n // }\n // }\n //\n const result = response['result'];\n const trades = result[id];\n // trades is a sorted array: last (most recent trade) goes last\n const length = trades.length;\n if (length <= 0) {\n return [];\n }\n const lastTrade = trades[length - 1];\n const lastTradeId = this.safeString(result, 'last');\n lastTrade.push(lastTradeId);\n return this.parseTrades(trades, market, since, limit);\n }\n parseBalanceCustom(response, type) {\n const result = {\n 'info': response,\n 'timestamp': undefined,\n 'datetime': undefined,\n };\n const balances = this.safeValue(response, 'result', {});\n if (type === 'earn') {\n const items = this.safeValue(balances, 'items', []);\n for (let i = 0; i < items.length; i++) {\n const item = items[i];\n const currencyCode = this.safeValue(item, 'native_asset');\n const amountAllocated = this.safeValue(item, 'amount_allocated');\n const totalRewarded = this.safeValue(item, 'total_rewarded');\n const totalAmountAllocated = this.safeValue(amountAllocated, 'total');\n const totalAllocatedAmount = this.safeNumber(totalAmountAllocated, 'native');\n const totalRewardedAmount = this.safeNumber(totalRewarded, 'native');\n const totalAmount = totalAllocatedAmount + totalRewardedAmount;\n const code = this.safeCurrencyCode(currencyCode);\n result[code] = {\n 'free': 0,\n 'used': totalAmount,\n 'total': totalAmount,\n };\n }\n }\n else {\n const currencyIds = Object.keys(balances);\n for (let i = 0; i < currencyIds.length; i++) {\n const currencyId = currencyIds[i];\n const code = this.safeCurrencyCode(currencyId);\n const balance = balances[currencyId];\n const totalBalance = this.safeNumber(balance, 'balance', 0);\n const credit = this.safeNumber(balance, 'credit', 0);\n const creditUsed = this.safeNumber(balance, 'credit_used', 0);\n const holdTrade = this.safeNumber(balance, 'hold_trade', 0);\n const debt = this.safeNumber(balance, 'debt', 0);\n const free = totalBalance + credit - creditUsed - holdTrade;\n const used = holdTrade + creditUsed;\n const total = free + used;\n result[code] = {\n 'free': free,\n 'used': used,\n 'total': total,\n 'debt': debt,\n };\n }\n }\n return this.safeBalance(result);\n }\n async fetchBalance(params = {}) {\n /**\n * @method\n * @name kraken#fetchBalance\n * @description query for balance and get the amount of funds available for trading or funds locked in orders (SPOT and MARGIN balances)\n * @see https://docs.kraken.com/rest/#tag/Account-Data/operation/getExtendedBalance\n * @see https://docs.kraken.com/rest/#tag/Earn/operation/listAllocations\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {string} [params.type] 'earn', or 'spot'\n * @returns {object} a [balance structure]{@link https://docs.ccxt.com/#/?id=balance-structure}\n */\n await this.loadMarkets();\n const type = this.safeString(params, 'type', 'spot');\n let response;\n if (type === 'earn') {\n // {\n // error: [],\n // result: {\n // converted_asset: \"USD\",\n // total_allocated: \"49.2398\",\n // total_rewarded: \"0.0675\",\n // next_cursor: \"2\",\n // items: [\n // {\n // strategy_id: \"ESDQCOL-WTZEU-NU55QF\",\n // native_asset: \"ETH\",\n // amount_allocated: {},\n // total_rewarded: {},\n // },\n // ],\n // },\n // };\n response = await this.privatePostEarnAllocations(params);\n }\n else {\n //\n // {\n // \"error\": [],\n // \"result\": {\n // \"ZUSD\": {\n // \"balance\": 25435.21,\n // \"hold_trade\": 8249.76\n // },\n // \"XXBT\": {\n // \"balance\": 1.2435,\n // \"hold_trade\": 0.8423\n // }\n // }\n // }\n //\n response = await this.privatePostBalanceEx(params);\n }\n return this.parseBalanceCustom(response, type);\n }\n async createOrder(symbol, type, side, amount, price = undefined, params = {}) {\n /**\n * @method\n * @name kraken#createOrder\n * @see https://docs.kraken.com/rest/#tag/Trading/operation/addOrder\n * @description create a trade order\n * @param {string} symbol unified symbol of the market to create an order in\n * @param {string} type 'market' or 'limit'\n * @param {string} side 'buy' or 'sell'\n * @param {float} amount how much of currency you want to trade in units of base currency\n * @param {float} [price] the price at which the order is to be fullfilled, in units of the quote currency, ignored in market orders\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {bool} [params.postOnly] if true, the order will only be posted to the order book and not executed immediately\n * @param {bool} [params.reduceOnly] *margin only* indicates if this order is to reduce the size of a position\n * @param {float} [params.stopLossPrice] *margin only* the price that a stop loss order is triggered at\n * @param {float} [params.takeProfitPrice] *margin only* the price that a take profit order is triggered at\n * @param {string} [params.trailingAmount] *margin only* the quote amount to trail away from the current market price\n * @param {string} [params.trailingLimitAmount] *margin only* the quote amount away from the trailingAmount\n * @param {string} [params.offset] *margin only* '+' or '-' whether you want the trailingLimitAmount value to be positive or negative, default is negative '-'\n * @param {string} [params.trigger] *margin only* the activation price type, 'last' or 'index', default is 'last'\n * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n await this.loadMarkets();\n const market = this.market(symbol);\n const request = {\n 'pair': market['id'],\n 'type': side,\n 'ordertype': type,\n 'volume': this.amountToPrecision(symbol, amount),\n };\n const orderRequest = this.orderRequest('createOrder()', symbol, type, request, price, params);\n const response = await this.privatePostAddOrder(this.extend(orderRequest[0], orderRequest[1]));\n //\n // {\n // \"error\": [],\n // \"result\": {\n // \"descr\": { order: 'buy 0.02100000 ETHUSDT @ limit 330.00' },\n // \"txid\": [ 'OEKVV2-IH52O-TPL6GZ' ]\n // }\n // }\n //\n const result = this.safeValue(response, 'result');\n return this.parseOrder(result);\n }\n findMarketByAltnameOrId(id) {\n const marketsByAltname = this.safeValue(this.options, 'marketsByAltname', {});\n if (id in marketsByAltname) {\n return marketsByAltname[id];\n }\n else {\n return this.safeMarket(id);\n }\n }\n getDelistedMarketById(id) {\n if (id === undefined) {\n return id;\n }\n let market = this.safeValue(this.options['delistedMarketsById'], id);\n if (market !== undefined) {\n return market;\n }\n const baseIdStart = 0;\n let baseIdEnd = 3;\n let quoteIdStart = 3;\n let quoteIdEnd = 6;\n if (id.length === 8) {\n baseIdEnd = 4;\n quoteIdStart = 4;\n quoteIdEnd = 8;\n }\n else if (id.length === 7) {\n baseIdEnd = 4;\n quoteIdStart = 4;\n quoteIdEnd = 7;\n }\n const baseId = id.slice(baseIdStart, baseIdEnd);\n const quoteId = id.slice(quoteIdStart, quoteIdEnd);\n const base = this.safeCurrencyCode(baseId);\n const quote = this.safeCurrencyCode(quoteId);\n const symbol = base + '/' + quote;\n market = {\n 'symbol': symbol,\n 'base': base,\n 'quote': quote,\n 'baseId': baseId,\n 'quoteId': quoteId,\n };\n this.options['delistedMarketsById'][id] = market;\n return market;\n }\n parseOrderStatus(status) {\n const statuses = {\n 'pending': 'open',\n 'open': 'open',\n 'closed': 'closed',\n 'canceled': 'canceled',\n 'expired': 'expired',\n };\n return this.safeString(statuses, status, status);\n }\n parseOrderType(status) {\n const statuses = {\n 'take-profit': 'market',\n 'stop-loss-limit': 'limit',\n 'stop-loss': 'market',\n 'take-profit-limit': 'limit',\n 'trailing-stop-limit': 'limit',\n };\n return this.safeString(statuses, status, status);\n }\n parseOrder(order, market = undefined) {\n //\n // createOrder for regular orders\n //\n // {\n // \"descr\": { order: 'buy 0.02100000 ETHUSDT @ limit 330.00' },\n // \"txid\": [ 'OEKVV2-IH52O-TPL6GZ' ]\n // }\n // {\n // \"txid\": [ \"TX_ID_HERE\" ],\n // \"descr\": { \"order\":\"buy 0.12345678 ETHEUR @ market\" },\n // }\n //\n //\n // createOrder for stop orders\n //\n // {\n // \"txid\":[\"OSILNC-VQI5Q-775ZDQ\"],\n // \"descr\":{\"order\":\"sell 167.28002676 ADAXBT @ stop loss 0.00003280 -> limit 0.00003212\"}\n // }\n //\n //\n // {\n // \"txid\":[\"OVHMJV-BZW2V-6NZFWF\"],\n // \"descr\":{\"order\":\"sell 0.00100000 ETHUSD @ stop loss 2677.00 -> limit 2577.00 with 5:1 leverage\"}\n // }\n //\n // editOrder\n //\n // {\n // \"status\": \"ok\",\n // \"txid\": \"OAW2BO-7RWEK-PZY5UO\",\n // \"originaltxid\": \"OXL6SS-UPNMC-26WBE7\",\n // \"volume\": \"0.00075000\",\n // \"price\": \"13500.0\",\n // \"orders_cancelled\": 1,\n // \"descr\": {\n // \"order\": \"buy 0.00075000 XBTUSDT @ limit 13500.0\"\n // }\n // }\n // ws - createOrder\n // {\n // \"descr\": 'sell 0.00010000 XBTUSDT @ market',\n // \"event\": 'addOrderStatus',\n // \"reqid\": 1,\n // \"status\": 'ok',\n // \"txid\": 'OAVXZH-XIE54-JCYYDG'\n // }\n // ws - editOrder\n // {\n // \"descr\": \"order edited price = 9000.00000000\",\n // \"event\": \"editOrderStatus\",\n // \"originaltxid\": \"O65KZW-J4AW3-VFS74A\",\n // \"reqid\": 3,\n // \"status\": \"ok\",\n // \"txid\": \"OTI672-HJFAO-XOIPPK\"\n // }\n //\n // {\n // \"error\": [],\n // \"result\": {\n // \"open\": {\n // \"OXVPSU-Q726F-L3SDEP\": {\n // \"refid\": null,\n // \"userref\": 0,\n // \"status\": \"open\",\n // \"opentm\": 1706893367.4656649,\n // \"starttm\": 0,\n // \"expiretm\": 0,\n // \"descr\": {\n // \"pair\": \"XRPEUR\",\n // \"type\": \"sell\",\n // \"ordertype\": \"trailing-stop\",\n // \"price\": \"+50.0000%\",\n // \"price2\": \"0\",\n // \"leverage\": \"none\",\n // \"order\": \"sell 10.00000000 XRPEUR @ trailing stop +50.0000%\",\n // \"close\": \"\"\n // },\n // \"vol\": \"10.00000000\",\n // \"vol_exec\": \"0.00000000\",\n // \"cost\": \"0.00000000\",\n // \"fee\": \"0.00000000\",\n // \"price\": \"0.00000000\",\n // \"stopprice\": \"0.23424000\",\n // \"limitprice\": \"0.46847000\",\n // \"misc\": \"\",\n // \"oflags\": \"fciq\",\n // \"trigger\": \"index\"\n // }\n // }\n // }\n //\n const description = this.safeValue(order, 'descr', {});\n const orderDescription = this.safeString(description, 'order', description);\n let side = undefined;\n let type = undefined;\n let marketId = undefined;\n let price = undefined;\n let amount = undefined;\n let stopPrice = undefined;\n if (orderDescription !== undefined) {\n const parts = orderDescription.split(' ');\n side = this.safeString(parts, 0);\n amount = this.safeString(parts, 1);\n marketId = this.safeString(parts, 2);\n type = this.safeString(parts, 4);\n if (type === 'stop') {\n stopPrice = this.safeString(parts, 6);\n price = this.safeString(parts, 9);\n }\n else if (type === 'limit') {\n price = this.safeString(parts, 5);\n }\n }\n side = this.safeString(description, 'type', side);\n type = this.safeString(description, 'ordertype', type);\n marketId = this.safeString(description, 'pair', marketId);\n const foundMarket = this.findMarketByAltnameOrId(marketId);\n let symbol = undefined;\n if (foundMarket !== undefined) {\n market = foundMarket;\n }\n else if (marketId !== undefined) {\n // delisted market ids go here\n market = this.getDelistedMarketById(marketId);\n }\n const timestamp = this.safeTimestamp(order, 'opentm');\n amount = this.safeString(order, 'vol', amount);\n const filled = this.safeString(order, 'vol_exec');\n let fee = undefined;\n // kraken truncates the cost in the api response so we will ignore it and calculate it from average & filled\n // const cost = this.safeString (order, 'cost');\n price = this.safeString(description, 'price', price);\n // when type = trailling stop returns price = '+50.0000%'\n if ((price !== undefined) && price.endsWith('%')) {\n price = undefined; // this is not the price we want\n }\n if ((price === undefined) || Precise.stringEquals(price, '0')) {\n price = this.safeString(description, 'price2');\n }\n if ((price === undefined) || Precise.stringEquals(price, '0')) {\n price = this.safeString(order, 'price', price);\n }\n const flags = this.safeString(order, 'oflags', '');\n const isPostOnly = flags.indexOf('post') > -1;\n const average = this.safeNumber(order, 'price');\n if (market !== undefined) {\n symbol = market['symbol'];\n if ('fee' in order) {\n const feeCost = this.safeString(order, 'fee');\n fee = {\n 'cost': feeCost,\n 'rate': undefined,\n };\n if (flags.indexOf('fciq') >= 0) {\n fee['currency'] = market['quote'];\n }\n else if (flags.indexOf('fcib') >= 0) {\n fee['currency'] = market['base'];\n }\n }\n }\n const status = this.parseOrderStatus(this.safeString(order, 'status'));\n let id = this.safeString2(order, 'id', 'txid');\n if ((id === undefined) || (id.slice(0, 1) === '[')) {\n const txid = this.safeValue(order, 'txid');\n id = this.safeString(txid, 0);\n }\n const clientOrderId = this.safeString(order, 'userref');\n const rawTrades = this.safeValue(order, 'trades', []);\n const trades = [];\n for (let i = 0; i < rawTrades.length; i++) {\n const rawTrade = rawTrades[i];\n if (typeof rawTrade === 'string') {\n trades.push(this.safeTrade({ 'id': rawTrade, 'orderId': id, 'symbol': symbol, 'info': {} }));\n }\n else {\n trades.push(rawTrade);\n }\n }\n stopPrice = this.omitZero(this.safeString(order, 'stopprice', stopPrice));\n let stopLossPrice = undefined;\n let takeProfitPrice = undefined;\n if (type.startsWith('take-profit')) {\n takeProfitPrice = this.safeString(description, 'price');\n price = this.omitZero(this.safeString(description, 'price2'));\n }\n else if (type.startsWith('stop-loss')) {\n stopLossPrice = this.safeString(description, 'price');\n price = this.omitZero(this.safeString(description, 'price2'));\n }\n return this.safeOrder({\n 'id': id,\n 'clientOrderId': clientOrderId,\n 'info': order,\n 'timestamp': timestamp,\n 'datetime': this.iso8601(timestamp),\n 'lastTradeTimestamp': undefined,\n 'status': status,\n 'symbol': symbol,\n 'type': this.parseOrderType(type),\n 'timeInForce': undefined,\n 'postOnly': isPostOnly,\n 'side': side,\n 'price': price,\n 'stopPrice': stopPrice,\n 'triggerPrice': stopPrice,\n 'takeProfitPrice': takeProfitPrice,\n 'stopLossPrice': stopLossPrice,\n 'cost': undefined,\n 'amount': amount,\n 'filled': filled,\n 'average': average,\n 'remaining': undefined,\n 'fee': fee,\n 'trades': trades,\n }, market);\n }\n orderRequest(method, symbol, type, request, price = undefined, params = {}) {\n const clientOrderId = this.safeString2(params, 'userref', 'clientOrderId');\n params = this.omit(params, ['userref', 'clientOrderId']);\n if (clientOrderId !== undefined) {\n request['userref'] = clientOrderId;\n }\n const stopLossTriggerPrice = this.safeString(params, 'stopLossPrice');\n const takeProfitTriggerPrice = this.safeString(params, 'takeProfitPrice');\n const isStopLossTriggerOrder = stopLossTriggerPrice !== undefined;\n const isTakeProfitTriggerOrder = takeProfitTriggerPrice !== undefined;\n const isStopLossOrTakeProfitTrigger = isStopLossTriggerOrder || isTakeProfitTriggerOrder;\n const trailingAmount = this.safeString(params, 'trailingAmount');\n const trailingLimitAmount = this.safeString(params, 'trailingLimitAmount');\n const isTrailingAmountOrder = trailingAmount !== undefined;\n const isLimitOrder = type.endsWith('limit'); // supporting limit, stop-loss-limit, take-profit-limit, etc\n if (isLimitOrder && !isTrailingAmountOrder) {\n request['price'] = this.priceToPrecision(symbol, price);\n }\n const reduceOnly = this.safeValue2(params, 'reduceOnly', 'reduce_only');\n if (isStopLossOrTakeProfitTrigger) {\n if (isStopLossTriggerOrder) {\n request['price'] = this.priceToPrecision(symbol, stopLossTriggerPrice);\n if (isLimitOrder) {\n request['ordertype'] = 'stop-loss-limit';\n }\n else {\n request['ordertype'] = 'stop-loss';\n }\n }\n else if (isTakeProfitTriggerOrder) {\n request['price'] = this.priceToPrecision(symbol, takeProfitTriggerPrice);\n if (isLimitOrder) {\n request['ordertype'] = 'take-profit-limit';\n }\n else {\n request['ordertype'] = 'take-profit';\n }\n }\n if (isLimitOrder) {\n request['price2'] = this.priceToPrecision(symbol, price);\n }\n }\n else if (isTrailingAmountOrder) {\n const trailingActivationPriceType = this.safeString(params, 'trigger', 'last');\n const trailingAmountString = '+' + trailingAmount;\n request['trigger'] = trailingActivationPriceType;\n if (isLimitOrder || (trailingLimitAmount !== undefined)) {\n const offset = this.safeString(params, 'offset', '-');\n const trailingLimitAmountString = offset + this.numberToString(trailingLimitAmount);\n request['price'] = trailingAmountString;\n request['price2'] = trailingLimitAmountString;\n request['ordertype'] = 'trailing-stop-limit';\n }\n else {\n request['price'] = trailingAmountString;\n request['ordertype'] = 'trailing-stop';\n }\n }\n if (reduceOnly) {\n request['reduce_only'] = 'true'; // not using boolean in this case, because the urlencodedNested transforms it into 'True' string\n }\n let close = this.safeValue(params, 'close');\n if (close !== undefined) {\n close = this.extend({}, close);\n const closePrice = this.safeValue(close, 'price');\n if (closePrice !== undefined) {\n close['price'] = this.priceToPrecision(symbol, closePrice);\n }\n const closePrice2 = this.safeValue(close, 'price2'); // stopPrice\n if (closePrice2 !== undefined) {\n close['price2'] = this.priceToPrecision(symbol, closePrice2);\n }\n request['close'] = close;\n }\n const timeInForce = this.safeString2(params, 'timeInForce', 'timeinforce');\n if (timeInForce !== undefined) {\n request['timeinforce'] = timeInForce;\n }\n const isMarket = (type === 'market');\n let postOnly = undefined;\n [postOnly, params] = this.handlePostOnly(isMarket, false, params);\n if (postOnly) {\n request['oflags'] = 'post';\n }\n params = this.omit(params, ['timeInForce', 'reduceOnly', 'stopLossPrice', 'takeProfitPrice', 'trailingAmount', 'trailingLimitAmount', 'offset']);\n return [request, params];\n }\n async editOrder(id, symbol, type, side, amount = undefined, price = undefined, params = {}) {\n /**\n * @method\n * @name kraken#editOrder\n * @description edit a trade order\n * @see https://docs.kraken.com/rest/#tag/Trading/operation/editOrder\n * @param {string} id order id\n * @param {string} symbol unified symbol of the market to create an order in\n * @param {string} type 'market' or 'limit'\n * @param {string} side 'buy' or 'sell'\n * @param {float} amount how much of the currency you want to trade in units of the base currency\n * @param {float} [price] the price at which the order is to be fullfilled, in units of the quote currency, ignored in market orders\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {float} [params.stopLossPrice] *margin only* the price that a stop loss order is triggered at\n * @param {float} [params.takeProfitPrice] *margin only* the price that a take profit order is triggered at\n * @param {string} [params.trailingAmount] *margin only* the quote price away from the current market price\n * @param {string} [params.trailingLimitAmount] *margin only* the quote amount away from the trailingAmount\n * @param {string} [params.offset] *margin only* '+' or '-' whether you want the trailingLimitAmount value to be positive or negative, default is negative '-'\n * @param {string} [params.trigger] *margin only* the activation price type, 'last' or 'index', default is 'last'\n * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n await this.loadMarkets();\n const market = this.market(symbol);\n if (!market['spot']) {\n throw new MarketTypeNotSupportedError(market['type'])\n .addMessage('Only spot orders are accepted')\n .exchange(this.id);\n }\n const request = {\n 'txid': id,\n 'pair': market['id'],\n };\n if (amount !== undefined) {\n request['volume'] = this.amountToPrecision(symbol, amount);\n }\n const orderRequest = this.orderRequest('editOrder()', symbol, type, request, price, params);\n const response = await this.privatePostEditOrder(this.extend(orderRequest[0], orderRequest[1]));\n //\n // {\n // \"error\": [],\n // \"result\": {\n // \"status\": \"ok\",\n // \"txid\": \"OAW2BO-7RWEK-PZY5UO\",\n // \"originaltxid\": \"OXL6SS-UPNMC-26WBE7\",\n // \"volume\": \"0.00075000\",\n // \"price\": \"13500.0\",\n // \"orders_cancelled\": 1,\n // \"descr\": {\n // \"order\": \"buy 0.00075000 XBTUSDT @ limit 13500.0\"\n // }\n // }\n // }\n //\n const data = this.safeValue(response, 'result', {});\n return this.parseOrder(data, market);\n }\n async fetchOrder(id, symbol = undefined, params = {}) {\n /**\n * @method\n * @name kraken#fetchOrder\n * @description fetches information on an order made by the user\n * @see https://docs.kraken.com/rest/#tag/Account-Data/operation/getOrdersInfo\n * @param {string} symbol not used by kraken fetchOrder\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} An [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n await this.loadMarkets();\n const clientOrderId = this.safeValue2(params, 'userref', 'clientOrderId');\n const request = {\n 'trades': true, // whether or not to include trades in output (optional, default false)\n // 'txid': id, // do not comma separate a list of ids - use fetchOrdersByIds instead\n // 'userref': 'optional', // restrict results to given user reference id (optional)\n };\n let query = params;\n if (clientOrderId !== undefined) {\n request['userref'] = clientOrderId;\n query = this.omit(params, ['userref', 'clientOrderId']);\n }\n else {\n request['txid'] = id;\n }\n const response = await this.privatePostQueryOrders(this.extend(request, query));\n //\n // {\n // \"error\":[],\n // \"result\":{\n // \"OTLAS3-RRHUF-NDWH5A\":{\n // \"refid\":null,\n // \"userref\":null,\n // \"status\":\"closed\",\n // \"reason\":null,\n // \"opentm\":1586822919.3342,\n // \"closetm\":1586822919.365,\n // \"starttm\":0,\n // \"expiretm\":0,\n // \"descr\":{\n // \"pair\":\"XBTUSDT\",\n // \"type\":\"sell\",\n // \"ordertype\":\"market\",\n // \"price\":\"0\",\n // \"price2\":\"0\",\n // \"leverage\":\"none\",\n // \"order\":\"sell 0.21804000 XBTUSDT @ market\",\n // \"close\":\"\"\n // },\n // \"vol\":\"0.21804000\",\n // \"vol_exec\":\"0.21804000\",\n // \"cost\":\"1493.9\",\n // \"fee\":\"3.8\",\n // \"price\":\"6851.5\",\n // \"stopprice\":\"0.00000\",\n // \"limitprice\":\"0.00000\",\n // \"misc\":\"\",\n // \"oflags\":\"fciq\",\n // \"trades\":[\"TT5UC3-GOIRW-6AZZ6R\"]\n // }\n // }\n // }\n //\n const result = this.safeValue(response, 'result', []);\n if (!(id in result)) {\n throw new OrderNotFoundError()\n .addMessage('fetchOrder() could not find order id ' + id)\n .exchange(this.id);\n }\n return this.parseOrder(this.extend({ 'id': id }, result[id]));\n }\n async fetchOrderTrades(id, symbol = undefined, since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name kraken#fetchOrderTrades\n * @description fetch all the trades made from a single order\n * @see https://docs.kraken.com/rest/#tag/Account-Data/operation/getTradesInfo\n * @param {string} id order id\n * @param {string} symbol unified market symbol\n * @param {int} [since] the earliest time in ms to fetch trades for\n * @param {int} [limit] the maximum number of trades to retrieve\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=trade-structure}\n */\n const orderTrades = this.safeValue(params, 'trades');\n const tradeIds = [];\n if (orderTrades === undefined) {\n throw new InvalidParamsError(\"fetchOrderTrades() requires a unified order structure in the params argument or a 'trades' param (an array of trade id strings)\")\n .exchange(this.id);\n }\n else {\n for (let i = 0; i < orderTrades.length; i++) {\n const orderTrade = orderTrades[i];\n if (typeof orderTrade === 'string') {\n tradeIds.push(orderTrade);\n }\n else {\n tradeIds.push(orderTrade['id']);\n }\n }\n }\n await this.loadMarkets();\n if (symbol !== undefined) {\n symbol = this.symbol(symbol);\n }\n const options = this.safeValue(this.options, 'fetchOrderTrades', {});\n const batchSize = this.safeInteger(options, 'batchSize', 20);\n const numTradeIds = tradeIds.length;\n let numBatches = this.parseToInt(numTradeIds / batchSize);\n numBatches = this.sum(numBatches, 1);\n let result = [];\n for (let j = 0; j < numBatches; j++) {\n const requestIds = [];\n for (let k = 0; k < batchSize; k++) {\n const index = this.sum(j * batchSize, k);\n if (index < numTradeIds) {\n requestIds.push(tradeIds[index]);\n }\n }\n const request = {\n 'txid': requestIds.join(','),\n };\n const response = await this.privatePostQueryTrades(request);\n //\n // {\n // \"error\": [],\n // \"result\": {\n // 'TIMIRG-WUNNE-RRJ6GT': {\n // \"ordertxid\": 'OQRPN2-LRHFY-HIFA7D',\n // \"postxid\": 'TKH2SE-M7IF5-CFI7LT',\n // \"pair\": 'USDCUSDT',\n // \"time\": 1586340086.457,\n // \"type\": 'sell',\n // \"ordertype\": 'market',\n // \"price\": '0.99860000',\n // \"cost\": '22.16892001',\n // \"fee\": '0.04433784',\n // \"vol\": '22.20000000',\n // \"margin\": '0.00000000',\n // \"misc\": ''\n // }\n // }\n // }\n //\n const rawTrades = this.safeValue(response, 'result');\n const ids = Object.keys(rawTrades);\n for (let i = 0; i < ids.length; i++) {\n rawTrades[ids[i]]['id'] = ids[i];\n }\n const trades = this.parseTrades(rawTrades, undefined, since, limit);\n const tradesFilteredBySymbol = this.filterBySymbol(trades, symbol);\n result = this.arrayConcat(result, tradesFilteredBySymbol);\n }\n return result;\n }\n async fetchOrdersByIds(ids, symbol = undefined, params = {}) {\n /**\n * @method\n * @name kraken#fetchOrdersByIds\n * @description fetch orders by the list of order id\n * @see https://docs.kraken.com/rest/#tag/Account-Data/operation/getClosedOrders\n * @param {string[]|undefined} ids list of order id\n * @param {object} [params] extra parameters specific to the kraken api endpoint\n * @returns {object[]} a list of [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n await this.loadMarkets();\n const response = await this.privatePostQueryOrders(this.extend({\n 'trades': true,\n 'txid': ids.join(','), // comma delimited list of transaction ids to query info about (20 maximum)\n }, params));\n const result = this.safeValue(response, 'result', {});\n const orders = [];\n const orderIds = Object.keys(result);\n for (let i = 0; i < orderIds.length; i++) {\n const id = orderIds[i];\n const item = result[id];\n const order = this.parseOrder(this.extend({ 'id': id }, item));\n orders.push(order);\n }\n return orders;\n }\n async fetchMyTrades(symbol = undefined, since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name kraken#fetchMyTrades\n * @description fetch all trades made by the user\n * @see https://docs.kraken.com/rest/#tag/Account-Data/operation/getTradeHistory\n * @param {string} symbol unified market symbol\n * @param {int} [since] the earliest time in ms to fetch trades for\n * @param {int} [limit] the maximum number of trades structures to retrieve\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {Trade[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=trade-structure}\n */\n await this.loadMarkets();\n const request = {\n // 'type': 'all', // any position, closed position, closing position, no position\n // 'trades': false, // whether or not to include trades related to position in output\n // 'start': 1234567890, // starting unix timestamp or trade tx id of results (exclusive)\n // 'end': 1234567890, // ending unix timestamp or trade tx id of results (inclusive)\n // 'ofs' = result offset\n };\n if (since !== undefined) {\n request['start'] = this.parseToInt(since / 1000);\n }\n const response = await this.privatePostTradesHistory(this.extend(request, params));\n //\n // {\n // \"error\": [],\n // \"result\": {\n // \"trades\": {\n // \"GJ3NYQ-XJRTF-THZABF\": {\n // \"ordertxid\": \"TKH2SE-ZIF5E-CFI7LT\",\n // \"postxid\": \"OEN3VX-M7IF5-JNBJAM\",\n // \"pair\": \"XICNXETH\",\n // \"time\": 1527213229.4491,\n // \"type\": \"sell\",\n // \"ordertype\": \"limit\",\n // \"price\": \"0.001612\",\n // \"cost\": \"0.025792\",\n // \"fee\": \"0.000026\",\n // \"vol\": \"16.00000000\",\n // \"margin\": \"0.000000\",\n // \"misc\": \"\"\n // },\n // ...\n // },\n // \"count\": 9760,\n // },\n // }\n //\n const trades = response['result']['trades'];\n const ids = Object.keys(trades);\n for (let i = 0; i < ids.length; i++) {\n trades[ids[i]]['id'] = ids[i];\n }\n let market = undefined;\n if (symbol !== undefined) {\n market = this.market(symbol);\n }\n return this.parseTrades(trades, market, since, limit);\n }\n async cancelOrder(id, symbol = undefined, params = {}) {\n /**\n * @method\n * @name kraken#cancelOrder\n * @description cancels an open order\n * @see https://docs.kraken.com/rest/#tag/Trading/operation/cancelOrder\n * @param {string} id order id\n * @param {string} symbol unified symbol of the market the order was made in\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} An [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n await this.loadMarkets();\n let response = undefined;\n const clientOrderId = this.safeValue2(params, 'userref', 'clientOrderId', id);\n const request = {\n 'txid': clientOrderId, // order id or userref\n };\n params = this.omit(params, ['userref', 'clientOrderId']);\n try {\n response = await this.privatePostCancelOrder(this.extend(request, params));\n }\n catch (e) {\n if (this.last_http_response) {\n if (this.last_http_response.indexOf('EOrder:Unknown order') >= 0) {\n throw new OrderNotFoundError().addMessage(this.last_http_response).exchange(this.id);\n }\n }\n throw e;\n }\n return response;\n }\n async cancelOrders(ids, symbol = undefined, params = {}) {\n /**\n * @method\n * @name kraken#cancelOrders\n * @description cancel multiple orders\n * @see https://docs.kraken.com/rest/#tag/Trading/operation/cancelOrderBatch\n * @param {string[]} ids open orders transaction ID (txid) or user reference (userref)\n * @param {string} symbol unified market symbol\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} an list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n const request = {\n 'orders': ids,\n };\n const response = await this.privatePostCancelOrderBatch(this.extend(request, params));\n //\n // {\n // \"error\": [],\n // \"result\": {\n // \"count\": 2\n // }\n // }\n //\n return response;\n }\n async cancelAllOrders(symbol = undefined, params = {}) {\n /**\n * @method\n * @name kraken#cancelAllOrders\n * @description cancel all open orders\n * @see https://docs.kraken.com/rest/#tag/Trading/operation/cancelAllOrders\n * @param {string} symbol unified market symbol, only orders in the market of this symbol are cancelled when symbol is not undefined\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n await this.loadMarkets();\n return await this.privatePostCancelAll(params);\n }\n async fetchOpenOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name kraken#fetchOpenOrders\n * @description fetch all unfilled currently open orders\n * @see https://docs.kraken.com/rest/#tag/Account-Data/operation/getOpenOrders\n * @param {string} symbol unified market symbol\n * @param {int} [since] the earliest time in ms to fetch open orders for\n * @param {int} [limit] the maximum number of open orders structures to retrieve\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n await this.loadMarkets();\n const request = {};\n if (since !== undefined) {\n request['start'] = this.parseToInt(since / 1000);\n }\n let query = params;\n const clientOrderId = this.safeValue2(params, 'userref', 'clientOrderId');\n if (clientOrderId !== undefined) {\n request['userref'] = clientOrderId;\n query = this.omit(params, ['userref', 'clientOrderId']);\n }\n const response = await this.privatePostOpenOrders(this.extend(request, query));\n let market = undefined;\n if (symbol !== undefined) {\n market = this.market(symbol);\n }\n const result = this.safeValue(response, 'result', {});\n const orders = this.safeValue(result, 'open', []);\n return this.parseOrders(orders, market, since, limit);\n }\n async fetchClosedOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name kraken#fetchClosedOrders\n * @description fetches information on multiple closed orders made by the user\n * @see https://docs.kraken.com/rest/#tag/Account-Data/operation/getClosedOrders\n * @param {string} symbol unified market symbol of the market orders were made in\n * @param {int} [since] the earliest time in ms to fetch orders for\n * @param {int} [limit] the maximum number of order structures to retrieve\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {int} [params.until] timestamp in ms of the latest entry\n * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n await this.loadMarkets();\n let request = {};\n if (since !== undefined) {\n request['start'] = this.parseToInt(since / 1000);\n }\n let query = params;\n const clientOrderId = this.safeValue2(params, 'userref', 'clientOrderId');\n if (clientOrderId !== undefined) {\n request['userref'] = clientOrderId;\n query = this.omit(params, ['userref', 'clientOrderId']);\n }\n [request, params] = this.handleUntilOption('end', request, params);\n const response = await this.privatePostClosedOrders(this.extend(request, query));\n //\n // {\n // \"error\":[],\n // \"result\":{\n // \"closed\":{\n // \"OETZYO-UL524-QJMXCT\":{\n // \"refid\":null,\n // \"userref\":null,\n // \"status\":\"canceled\",\n // \"reason\":\"User requested\",\n // \"opentm\":1601489313.3898,\n // \"closetm\":1601489346.5507,\n // \"starttm\":0,\n // \"expiretm\":0,\n // \"descr\":{\n // \"pair\":\"ETHUSDT\",\n // \"type\":\"buy\",\n // \"ordertype\":\"limit\",\n // \"price\":\"330.00\",\n // \"price2\":\"0\",\n // \"leverage\":\"none\",\n // \"order\":\"buy 0.02100000 ETHUSDT @ limit 330.00\",\n // \"close\":\"\"\n // },\n // \"vol\":\"0.02100000\",\n // \"vol_exec\":\"0.00000000\",\n // \"cost\":\"0.00000\",\n // \"fee\":\"0.00000\",\n // \"price\":\"0.00000\",\n // \"stopprice\":\"0.00000\",\n // \"limitprice\":\"0.00000\",\n // \"misc\":\"\",\n // \"oflags\":\"fciq\"\n // },\n // },\n // \"count\":16\n // }\n // }\n //\n let market = undefined;\n if (symbol !== undefined) {\n market = this.market(symbol);\n }\n const result = this.safeValue(response, 'result', {});\n const orders = this.safeValue(result, 'closed', []);\n return this.parseOrders(orders, market, since, limit);\n }\n parseTransactionStatus(status) {\n // IFEX transaction states\n const statuses = {\n 'Initial': 'pending',\n 'Pending': 'pending',\n 'Success': 'ok',\n 'Settled': 'pending',\n 'Failure': 'failed',\n 'Partial': 'ok',\n };\n return this.safeString(statuses, status, status);\n }\n parseTransaction(transaction, currency = undefined) {\n //\n // fetchDeposits\n //\n // {\n // \"method\": \"Ether (Hex)\",\n // \"aclass\": \"currency\",\n // \"asset\": \"XETH\",\n // \"refid\": \"Q2CANKL-LBFVEE-U4Y2WQ\",\n // \"txid\": \"0x57fd704dab1a73c20e24c8696099b695d596924b401b261513cfdab23…\",\n // \"info\": \"0x615f9ba7a9575b0ab4d571b2b36b1b324bd83290\",\n // \"amount\": \"7.9999257900\",\n // \"fee\": \"0.0000000000\",\n // \"time\": 1529223212,\n // \"status\": \"Success\"\n // }\n //\n // there can be an additional 'status-prop' field present\n // deposit pending review by exchange => 'on-hold'\n // the deposit is initiated by the exchange => 'return'\n //\n // {\n // \"type\": 'deposit',\n // \"method\": 'Fidor Bank AG (Wire Transfer)',\n // \"aclass\": 'currency',\n // \"asset\": 'ZEUR',\n // \"refid\": 'xxx-xxx-xxx',\n // \"txid\": '12341234',\n // \"info\": 'BANKCODEXXX',\n // \"amount\": '38769.08',\n // \"fee\": '0.0000',\n // \"time\": 1644306552,\n // \"status\": 'Success',\n // status-prop: 'on-hold'\n // }\n //\n //\n // fetchWithdrawals\n //\n // {\n // \"method\": \"Ether\",\n // \"aclass\": \"currency\",\n // \"asset\": \"XETH\",\n // \"refid\": \"A2BF34S-O7LBNQ-UE4Y4O\",\n // \"txid\": \"0x288b83c6b0904d8400ef44e1c9e2187b5c8f7ea3d838222d53f701a15b5c274d\",\n // \"info\": \"0x7cb275a5e07ba943fee972e165d80daa67cb2dd0\",\n // \"amount\": \"9.9950000000\",\n // \"fee\": \"0.0050000000\",\n // \"time\": 1530481750,\n // \"status\": \"Success\"\n // \"key\":\"Huobi wallet\",\n // \"network\":\"Tron\"\n // status-prop: 'on-hold' // this field might not be present in some cases\n // }\n //\n // withdraw\n //\n // {\n // \"refid\": \"AGBSO6T-UFMTTQ-I7KGS6\"\n // }\n //\n const id = this.safeString(transaction, 'refid');\n const txid = this.safeString(transaction, 'txid');\n const timestamp = this.safeTimestamp(transaction, 'time');\n const currencyId = this.safeString(transaction, 'asset');\n const code = this.safeCurrencyCode(currencyId, currency);\n const address = this.safeString(transaction, 'info');\n const amount = this.safeNumber(transaction, 'amount');\n let network = this.safeString(transaction, 'network');\n const method = this.safeString(transaction, 'method');\n if (method !== undefined) {\n network = this.methodToEcid(method, code);\n }\n let status = this.parseTransactionStatus(this.safeString(transaction, 'status'));\n const statusProp = this.safeString(transaction, 'status-prop');\n const isOnHoldDeposit = statusProp === 'on-hold';\n const isCancellationRequest = statusProp === 'cancel-pending';\n const isOnHoldWithdrawal = statusProp === 'onhold';\n if (isOnHoldDeposit || isCancellationRequest || isOnHoldWithdrawal) {\n status = 'pending';\n }\n const type = this.safeString(transaction, 'type'); // injected from the outside\n let feeCost = this.safeNumber(transaction, 'fee');\n if (feeCost === undefined) {\n if (type === 'deposit') {\n feeCost = 0;\n }\n }\n return {\n 'info': transaction,\n 'id': id,\n 'currency': code,\n 'amount': amount,\n 'network': network,\n 'address': address,\n 'addressTo': undefined,\n 'addressFrom': undefined,\n 'tag': undefined,\n 'tagTo': undefined,\n 'tagFrom': undefined,\n 'status': status,\n 'type': type,\n 'updated': undefined,\n 'txid': txid,\n 'timestamp': timestamp,\n 'datetime': this.iso8601(timestamp),\n 'comment': undefined,\n 'internal': undefined,\n 'fee': {\n 'currency': code,\n 'cost': feeCost,\n },\n };\n }\n parseTransactionsByType(type, transactions, code = undefined, since = undefined, limit = undefined) {\n const result = [];\n for (let i = 0; i < transactions.length; i++) {\n const transaction = this.parseTransaction(this.extend({\n 'type': type,\n }, transactions[i]));\n result.push(transaction);\n }\n return this.filterByCurrencySinceLimit(result, code, since, limit);\n }\n async fetchDeposits(code = undefined, since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name kraken#fetchDeposits\n * @description fetch all deposits made to an account\n * @see https://docs.kraken.com/rest/#tag/Funding/operation/getStatusRecentDeposits\n * @param {string} code unified currency code\n * @param {int} [since] the earliest time in ms to fetch deposits for\n * @param {int} [limit] the maximum number of deposits structures to retrieve\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object[]} a list of [transaction structures]{@link https://docs.ccxt.com/#/?id=transaction-structure}\n */\n // https://www.kraken.com/en-us/help/api#deposit-status\n if (code === undefined) {\n throw new InvalidParamsError('fetchDeposits() requires a currency code argument')\n .exchange(this.id);\n }\n await this.loadMarkets();\n const currency = this.currency(code);\n const request = {\n 'asset': currency['id'],\n };\n if (since !== undefined) {\n request['start'] = since;\n }\n const response = await this.privatePostDepositStatus(this.extend(request, params));\n //\n // { error: [],\n // \"result\": [ { \"method\": \"Ether (Hex)\",\n // \"aclass\": \"currency\",\n // \"asset\": \"XETH\",\n // \"refid\": \"Q2CANKL-LBFVEE-U4Y2WQ\",\n // \"txid\": \"0x57fd704dab1a73c20e24c8696099b695d596924b401b261513cfdab23…\",\n // \"info\": \"0x615f9ba7a9575b0ab4d571b2b36b1b324bd83290\",\n // \"amount\": \"7.9999257900\",\n // \"fee\": \"0.0000000000\",\n // \"time\": 1529223212,\n // \"status\": \"Success\" } ] }\n //\n return this.parseTransactionsByType('deposit', response['result'], code, since, limit);\n }\n async fetchTime(params = {}) {\n /**\n * @method\n * @name kraken#fetchTime\n * @description fetches the current integer timestamp in milliseconds from the exchange server\n * @see https://docs.kraken.com/rest/#tag/Market-Data/operation/getServerTime\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {int} the current integer timestamp in milliseconds from the exchange server\n */\n // https://www.kraken.com/en-us/features/api#get-server-time\n const response = await this.publicGetTime(params);\n //\n // {\n // \"error\": [],\n // \"result\": {\n // \"unixtime\": 1591502873,\n // \"rfc1123\": \"Sun, 7 Jun 20 04:07:53 +0000\"\n // }\n // }\n //\n const result = this.safeValue(response, 'result', {});\n return this.safeTimestamp(result, 'unixtime');\n }\n async fetchWithdrawals(code = undefined, since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name kraken#fetchWithdrawals\n * @description fetch all withdrawals made from an account\n * @see https://docs.kraken.com/rest/#tag/Funding/operation/getStatusRecentWithdrawals\n * @param {string} code unified currency code\n * @param {int} [since] the earliest time in ms to fetch withdrawals for\n * @param {int} [limit] the maximum number of withdrawals structures to retrieve\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {object} [params.end] End timestamp, withdrawals created strictly after will be not be included in the response\n * @param {boolean} [params.paginate] default false, when true will automatically paginate by calling this endpoint multiple times\n * @returns {object[]} a list of [transaction structures]{@link https://docs.ccxt.com/#/?id=transaction-structure}\n */\n await this.loadMarkets();\n let paginate = false;\n [paginate, params] = this.handleOptionAndParams(params, 'fetchWithdrawals', 'paginate');\n if (paginate) {\n params['cursor'] = true;\n return await this.fetchPaginatedCallCursor('fetchWithdrawals', code, since, limit, params, 'next_cursor', 'cursor');\n }\n const request = {};\n if (code !== undefined) {\n const currency = this.currency(code);\n request['asset'] = currency['id'];\n }\n if (since !== undefined) {\n request['since'] = since.toString();\n }\n const response = await this.privatePostWithdrawStatus(this.extend(request, params));\n //\n // with no pagination\n // { error: [],\n // \"result\": [ { \"method\": \"Ether\",\n // \"aclass\": \"currency\",\n // \"asset\": \"XETH\",\n // \"refid\": \"A2BF34S-O7LBNQ-UE4Y4O\",\n // \"txid\": \"0x298c83c7b0904d8400ef43e1c9e2287b518f7ea3d838822d53f704a1565c274d\",\n // \"info\": \"0x7cb275a5e07ba943fee972e165d80daa67cb2dd0\",\n // \"amount\": \"9.9950000000\",\n // \"fee\": \"0.0050000000\",\n // \"time\": 1530481750,\n // \"status\": \"Success\" } ] }\n // with pagination\n // {\n // \"error\":[],\n // \"result\":{\n // \"withdrawals\":[\n // {\n // \"method\":\"Tether USD (TRC20)\",\n // \"aclass\":\"currency\",\n // \"asset\":\"USDT\",\n // \"refid\":\"BSNFZU2-MEFN4G-J3NEZV\",\n // \"txid\":\"1c7a642fb7387bbc2c6a2c509fd1ae146937f4cf793b4079a4f0715e3a02615a\",\n // \"info\":\"TQmdxSuC16EhFg8FZWtYgrfFRosoRF7bCp\",\n // \"amount\":\"1996.50000000\",\n // \"fee\":\"2.50000000\",\n // \"time\":1669126657,\n // \"status\":\"Success\",\n // \"key\":\"poloniex\",\n // \"network\":\"Tron\"\n // },\n // ...\n // ],\n // \"next_cursor\":\"HgAAAAAAAABGVFRSd3k1LVF4Y0JQY05Gd0xRY0NxenFndHpybkwBAQH2AwEBAAAAAQAAAAAAAAABAAAAAAAZAAAAAAAAAA==\"\n // }\n // }\n //\n let rawWithdrawals = undefined;\n const result = this.safeValue(response, 'result');\n if (!Array.isArray(result)) {\n rawWithdrawals = this.addPaginationCursorToResult(result);\n }\n else {\n rawWithdrawals = result;\n }\n return this.parseTransactionsByType('withdrawal', rawWithdrawals, code, since, limit);\n }\n addPaginationCursorToResult(result) {\n const cursor = this.safeString(result, 'next_cursor');\n const data = this.safeValue(result, 'withdrawals');\n const dataLength = data.length;\n if (cursor !== undefined && dataLength > 0) {\n const last = data[dataLength - 1];\n last['next_cursor'] = cursor;\n data[dataLength - 1] = last;\n }\n return data;\n }\n async createDepositAddress(code, params = {}) {\n /**\n * @method\n * @name kraken#createDepositAddress\n * @description create a currency deposit address\n * @see https://docs.kraken.com/rest/#tag/Funding/operation/getDepositAddresses\n * @param {string} code unified currency code of the currency for the deposit address\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} an [address structure]{@link https://docs.ccxt.com/#/?id=address-structure}\n */\n const request = {\n 'new': 'true',\n };\n return await this.fetchDepositAddress(code, this.extend(request, params));\n }\n async fetchDepositMethods(code, params = {}) {\n /**\n * @method\n * @name kraken#fetchDepositMethods\n * @description fetch deposit methods for a currency associated with this account\n * @see https://docs.kraken.com/rest/#tag/Funding/operation/getDepositMethods\n * @param {string} code unified currency code\n * @param {object} [params] extra parameters specific to the kraken api endpoint\n * @returns {object} of deposit methods\n */\n await this.loadMarkets();\n const currency = this.currency(code);\n const request = {\n 'asset': currency['id'],\n };\n const response = await this.privatePostDepositMethods(this.extend(request, params));\n //\n // {\n // \"error\":[],\n // \"result\":[\n // {\"method\":\"Ether (Hex)\",\"limit\":false,\"gen-address\":true}\n // ]\n // }\n //\n // {\n // \"error\":[],\n // \"result\":[\n // {\"method\":\"Tether USD (ERC20)\",\"limit\":false,\"address-setup-fee\":\"0.00000000\",\"gen-address\":true},\n // {\"method\":\"Tether USD (TRC20)\",\"limit\":false,\"address-setup-fee\":\"0.00000000\",\"gen-address\":true}\n // ]\n // }\n //\n // {\n // \"error\":[],\n // \"result\":[\n // {\"method\":\"Bitcoin\",\"limit\":false,\"fee\":\"0.0000000000\",\"gen-address\":true}\n // ]\n // }\n //\n const result = this.safeValue(response, 'result', []);\n const depositMethods = [];\n for (let i = 0; i < result.length; i++) {\n const element = this.safeValue(result, i, {});\n const method = this.safeString(element, 'method');\n const fee = this.safeString2(element, 'address-setup-fee', 'fee');\n const limit = this.safeValue(element, 'limit');\n const network = this.methodToEcid(method, code);\n if (network === undefined) {\n this.options?.report?.('unmapped_network', {\n method,\n 'tokenSymbol': code,\n });\n }\n depositMethods.push({\n 'method': method,\n 'network': network,\n 'fee': fee,\n 'limit': limit,\n 'info': element,\n });\n }\n return depositMethods;\n }\n async fetchDepositAddress(code, params = {}) {\n /**\n * @method\n * @name kraken#fetchDepositAddress\n * @description fetch the deposit address for a currency associated with this account\n * @see https://docs.kraken.com/rest/#tag/Funding/operation/getDepositAddresses\n * @param {string} code unified currency code\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {object} [params.network] the network name for the deposit address (required)\n * @returns {object} an [address structure]{@link https://docs.ccxt.com/#/?id=address-structure}\n */\n await this.loadMarkets();\n const currency = this.currency(code);\n const network = this.safeValue(params, 'network');\n if (!network) {\n throw new InvalidParamsError('network parameter is required').exchange(this.id);\n }\n const depositMethods = await this.fetchDepositMethods(code);\n const targetedDepositMethods = depositMethods.filter((depoMethod) => this.safeString(depoMethod, 'network') === network);\n const targetedDepositMethod = this.safeValue(targetedDepositMethods, 0, undefined);\n if (!targetedDepositMethod) {\n throw new GetDepositAddressError(code, network).exchange(this.id);\n }\n const depositMethod = this.safeString(targetedDepositMethod, 'method');\n const request = {\n 'asset': currency['id'],\n 'method': depositMethod,\n };\n const response = await this.privatePostDepositAddresses(this.extend(request, params));\n //\n // {\n // \"error\":[],\n // \"result\":[\n // {\"address\":\"0x77b5051f97efa9cc52c9ad5b023a53fc15c200d3\",\"expiretm\":\"0\"}\n // ]\n // }\n //\n const result = this.safeValue(response, 'result', []);\n const firstResult = this.safeValue(result, 0, {});\n if (firstResult === undefined) {\n throw new GetDepositAddressError(code, network).exchange(this.id);\n }\n return this.parseDepositAddress(firstResult, currency);\n }\n parseDepositAddress(depositAddress, currency = undefined) {\n //\n // {\n // \"address\":\"0x77b5051f97efa9cc52c9ad5b023a53fc15c200d3\",\n // \"expiretm\":\"0\"\n // }\n //\n const address = this.safeString(depositAddress, 'address');\n const tag = this.safeString(depositAddress, 'tag');\n currency = this.safeCurrency(undefined, currency);\n const code = currency['code'];\n this.checkAddress(address);\n return {\n 'currency': code,\n 'address': address,\n 'tag': tag,\n 'network': undefined,\n 'info': depositAddress,\n };\n }\n async withdraw(code, amount, address, tag = undefined, params = {}) {\n /**\n * @method\n * @name kraken#withdraw\n * @description make a withdrawal\n * @see https://docs.kraken.com/rest/#tag/Funding/operation/withdrawFunds\n * @param {string} code unified currency code\n * @param {float} amount the amount to withdraw\n * @param {string} address the address to withdraw to\n * @param {string} tag\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} a [transaction structure]{@link https://docs.ccxt.com/#/?id=transaction-structure}\n */\n [tag, params] = this.handleWithdrawTagAndParams(tag, params);\n // address is optional\n if (address !== undefined) {\n this.checkAddress(address);\n }\n if ('key' in params) {\n await this.loadMarkets();\n const currency = this.currency(code);\n const amountPrecision = this.currencyToPrecision(code, amount);\n const request = {\n 'asset': currency['id'],\n 'amount': amountPrecision,\n };\n if (address) {\n request['address'] = address;\n }\n const response = await this.privatePostWithdraw(this.extend(request, params));\n //\n // {\n // \"error\": [],\n // \"result\": {\n // \"refid\": \"AGBSO6T-UFMTTQ-I7KGS6\"\n // }\n // }\n //\n const result = this.safeValue(response, 'result', {});\n return this.parseTransaction(result, currency);\n }\n throw new InvalidParamsError(\"withdraw() requires a 'key' parameter (withdrawal key name, as set up on your account)\").exchange(this.id);\n }\n async fetchPositions(symbols = undefined, params = {}) {\n /**\n * @method\n * @name kraken#fetchPositions\n * @description fetch all open positions\n * @see https://docs.kraken.com/rest/#tag/Account-Data/operation/getOpenPositions\n * @param {string[]|undefined} symbols not used by kraken fetchPositions ()\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object[]} a list of [position structure]{@link https://docs.ccxt.com/#/?id=position-structure}\n */\n await this.loadMarkets();\n const request = {\n // 'txid': 'comma delimited list of transaction ids to restrict output to',\n // 'docalcs': false, // whether or not to include profit/loss calculations\n // 'consolidation': 'market', // what to consolidate the positions data around, market will consolidate positions based on market pair\n };\n const response = await this.privatePostOpenPositions(this.extend(request, params));\n //\n // no consolidation\n //\n // {\n // \"error\": [],\n // \"result\": {\n // 'TGUFMY-FLESJ-VYIX3J': {\n // \"ordertxid\": \"O3LRNU-ZKDG5-XNCDFR\",\n // \"posstatus\": \"open\",\n // \"pair\": \"ETHUSDT\",\n // \"time\": 1611557231.4584,\n // \"type\": \"buy\",\n // \"ordertype\": \"market\",\n // \"cost\": \"28.49800\",\n // \"fee\": \"0.07979\",\n // \"vol\": \"0.02000000\",\n // \"vol_closed\": \"0.00000000\",\n // \"margin\": \"14.24900\",\n // \"terms\": \"0.0200% per 4 hours\",\n // \"rollovertm\": \"1611571631\",\n // \"misc\": \"\",\n // \"oflags\": \"\"\n // }\n // }\n // }\n //\n // consolidation by market\n //\n // {\n // \"error\": [],\n // \"result\": [\n // {\n // \"pair\": \"ETHUSDT\",\n // \"positions\": \"1\",\n // \"type\": \"buy\",\n // \"leverage\": \"2.00000\",\n // \"cost\": \"28.49800\",\n // \"fee\": \"0.07979\",\n // \"vol\": \"0.02000000\",\n // \"vol_closed\": \"0.00000000\",\n // \"margin\": \"14.24900\"\n // }\n // ]\n // }\n //\n const result = this.safeValue(response, 'result');\n // todo unify parsePosition/parsePositions\n return result;\n }\n parseAccount(account) {\n const accountByType = {\n 'spot': 'Spot Wallet',\n 'swap': 'Futures Wallet',\n 'future': 'Futures Wallet',\n };\n return this.safeString(accountByType, account, account);\n }\n async transfer(code, amount, fromAccount, toAccount, params = {}) {\n /**\n * @method\n * @name kraken#transfer\n * @see https://docs.kraken.com/rest/#tag/User-Funding/operation/walletTransfer\n * @description transfers currencies between sub-accounts (only spot->swap direction is supported)\n * @param {string} code Unified currency code\n * @param {float} amount Size of the transfer\n * @param {string} fromAccount 'spot' or 'Spot Wallet'\n * @param {string} toAccount 'swap' or 'Futures Wallet'\n * @param {object} [params] Exchange specific parameters\n * @returns a [transfer structure]{@link https://docs.ccxt.com/#/?id=transfer-structure}\n */\n await this.loadMarkets();\n const currency = this.currency(code);\n fromAccount = this.parseAccount(fromAccount);\n toAccount = this.parseAccount(toAccount);\n const request = {\n 'amount': this.currencyToPrecision(code, amount),\n 'from': fromAccount,\n 'to': toAccount,\n 'asset': currency['id'],\n };\n if (fromAccount !== 'Spot Wallet') {\n throw new ExchangeTransferError()\n .addMessage('Transfer cannot transfer from ' + fromAccount + ' to ' + toAccount + '. Use krakenfutures instead to transfer from the futures account.')\n .exchange(this.id);\n }\n const response = await this.privatePostWalletTransfer(this.extend(request, params));\n //\n // {\n // \"error\":[\n // ],\n // \"result\":{\n // \"refid\":\"BOIUSIF-M7DLMN-UXZ3P5\"\n // }\n // }\n //\n const transfer = this.parseTransfer(response, currency);\n return this.extend(transfer, {\n 'amount': amount,\n 'fromAccount': fromAccount,\n 'toAccount': toAccount,\n });\n }\n parseTransfer(transfer, currency = undefined) {\n //\n // transfer\n //\n // {\n // \"error\":[\n // ],\n // \"result\":{\n // \"refid\":\"BOIUSIF-M7DLMN-UXZ3P5\"\n // }\n // }\n //\n const result = this.safeValue(transfer, 'result', {});\n const refid = this.safeString(result, 'refid');\n return {\n 'info': transfer,\n 'id': refid,\n 'timestamp': undefined,\n 'datetime': undefined,\n 'currency': this.safeString(currency, 'code'),\n 'amount': undefined,\n 'fromAccount': undefined,\n 'toAccount': undefined,\n 'status': 'sucess',\n };\n }\n async sign(path, api = 'public', method = 'GET', params = {}, headers = undefined, body = undefined) {\n let url = '/' + this.version + '/' + api + '/' + path;\n if (api === 'public') {\n if (Object.keys(params).length) {\n // urlencodeNested is used to address https://github.com/ccxt/ccxt/issues/12872\n url += '?' + this.urlencodeNested(params);\n }\n }\n else if (api === 'private') {\n const isCancelOrderBatch = (path === 'CancelOrderBatch');\n this.checkRequiredCredentials();\n const nonce = this.nonce().toString();\n // urlencodeNested is used to address https://github.com/ccxt/ccxt/issues/12872\n if (isCancelOrderBatch) {\n body = this.json(this.extend({ 'nonce': nonce }, params));\n }\n else {\n body = this.urlencodeNested(this.extend({ 'nonce': nonce }, params));\n }\n const auth = this.encode(nonce + body);\n const hash = this.hash(auth, sha256, 'binary');\n const binary = this.encode(url);\n const binhash = this.binaryConcat(binary, hash);\n let signature = undefined;\n if (this.externalSigner) {\n signature = await this.externalSigner.sign({\n 'payload': binhash,\n 'publicApiKey': this.apiKey,\n 'exchangeId': this.id,\n });\n }\n else {\n const secret = this.base64ToBinary(this.secret);\n signature = this.hmac(binhash, secret, sha512, 'base64');\n }\n headers = {\n 'API-Key': this.apiKey,\n 'API-Sign': signature,\n // 'Content-Type': 'application/x-www-form-urlencoded',\n };\n if (isCancelOrderBatch) {\n headers['Content-Type'] = 'application/json';\n }\n else {\n headers['Content-Type'] = 'application/x-www-form-urlencoded';\n }\n }\n else {\n url = '/' + path;\n }\n url = this.urls['api'][api] + url;\n return { 'url': url, 'method': method, 'body': body, 'headers': headers };\n }\n nonce() {\n return this.milliseconds() - this.options['timeDifference'];\n }\n handleErrors(code, reason, url, method, headers, body, response, requestHeaders, requestBody) {\n // {\n // \"error\": [\n // \"EGeneral:Invalid arguments:ordertype\"\n // ]\n // }\n if (body) {\n if (code === 520) {\n throw new ExchangeNotAvailableError().addMessage(code.toString() + ': ' + reason).exchange(this.id);\n }\n const errors = this.safeValue(response, 'error', []);\n if (errors.length > 0) {\n for (let i = 0; i < errors.length; i++) {\n const error = errors[i];\n const errorMessage = error;\n this.throwExactlyMatchedException(this.exceptions['exact'], error, errorMessage);\n this.throwBroadlyMatchedException(this.exceptions['broad'], error, errorMessage);\n }\n throw new ExchangeError().addMessage(errors.join(', ')).exchange(this.id);\n }\n }\n return undefined;\n }\n}\n","// ----------------------------------------------------------------------------\n\n// PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:\n// https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code\n// EDIT THE CORRESPONDENT .ts FILE INSTEAD\n\n// ---------------------------------------------------------------------------\nimport Exchange from './abstract/kucoin.js';\nimport { Precise } from './base/Precise.js';\nimport { TICK_SIZE } from './base/functions/number.js';\nimport { AuthenticationError, CreateDepositAddressError, ExchangeAccountSuspendedError, ExchangeError, ExchangeInvalidNonceError, ExchangeInvalidPermissionsError, ExchangeNotAllowedMethodError, ExchangeNotAvailableError, ExchangeRateLimitExceededError, ExchangeTransferNotAllowedError, ExchangeUnavailableInCountry, GetDepositAddressError, InsufficientBalanceError, InternalError, InvalidCredentialsError, InvalidParamsError, MarketTypeNotSupportedError, OrderNotFoundError, TradeError, UnderWithdrawMinimumError, WhitelistCheckFailedError } from './sdk/errors.js';\nimport { SdkErrorMessages } from './sdk/errorsMetadata.js';\nimport { SubAccountNotFoundError } from './sdk/subAccount.js';\nimport { sha256 } from './static_dependencies/noble-hashes/sha256.js';\n// ---------------------------------------------------------------------------\n/**\n * @class kucoin\n * @augments Exchange\n */\nexport default class kucoin extends Exchange {\n describe() {\n return this.deepExtend(super.describe(), {\n 'id': 'kucoin',\n 'name': 'KuCoin',\n 'countries': ['SC'],\n 'rateLimit': 10,\n 'version': 'v2',\n 'certified': true,\n 'pro': true,\n 'comment': 'Platform 2.0',\n 'quoteJsonNumbers': false,\n 'has': {\n 'CORS': undefined,\n 'spot': true,\n 'margin': true,\n 'swap': false,\n 'future': false,\n 'option': false,\n 'cancelAllOrders': true,\n 'cancelOrder': true,\n 'createDepositAddress': true,\n 'createMarketBuyOrderWithCost': true,\n 'createMarketOrderWithCost': true,\n 'createMarketSellOrderWithCost': true,\n 'createOrder': true,\n 'createOrders': true,\n 'createTriggerOrder': true,\n 'editOrder': true,\n 'fetchAccounts': true,\n 'fetchBalance': true,\n 'fetchClosedOrders': true,\n 'fetchCurrencies': true,\n 'fetchDepositAddress': true,\n 'fetchDepositAddressesByNetwork': true,\n 'fetchDeposits': true,\n 'fetchDepositWithdrawFee': true,\n 'fetchDepositWithdrawFees': true,\n 'fetchLedger': true,\n 'fetchMarkets': true,\n 'fetchMyTrades': true,\n 'fetchOHLCV': true,\n 'fetchOpenOrders': true,\n 'fetchOrder': true,\n 'fetchOrderBook': true,\n 'fetchOrderBooks': false,\n 'fetchOrdersByStatus': true,\n 'fetchOrderTrades': true,\n 'fetchStatus': true,\n 'fetchTicker': true,\n 'fetchTickers': true,\n 'fetchTime': true,\n 'fetchTrades': true,\n 'fetchTradingFee': true,\n 'fetchTradingFees': false,\n 'fetchTransactionFee': true,\n 'fetchTransfers': false,\n 'fetchWithdrawals': true,\n 'transfer': true,\n 'withdraw': true,\n },\n 'urls': {\n 'logo': 'https://user-images.githubusercontent.com/51840849/87295558-132aaf80-c50e-11ea-9801-a2fb0c57c799.jpg',\n // https://www.kucoin.com/ucenter/signup?rcode=E5wkqe - I removed the code for now, because CWS is blocking until we explain our affiliate program to our users\n 'referral': 'https://www.kucoin.com/ucenter/signup',\n 'api': {\n 'public': 'https://api.kucoin.com',\n 'private': 'https://api.kucoin.com',\n 'futuresPrivate': 'https://api-futures.kucoin.com',\n 'futuresPublic': 'https://api-futures.kucoin.com',\n 'webExchange': 'https://kucoin.com/_api',\n },\n 'www': 'https://www.kucoin.com',\n 'doc': [\n 'https://docs.kucoin.com',\n ],\n },\n 'requiredCredentials': {\n 'apiKey': true,\n 'secret': true,\n 'password': true,\n },\n 'api': {\n // level VIP0\n // Spot => 3000/30s => 100/s\n // Weight = x => 100/(100/x) = x\n // Futures Management Public => 2000/30s => 200/3/s\n // Weight = x => 100/(200/3/x) = x*1.5\n 'public': {\n 'get': {\n // spot trading\n 'currencies': 4.5,\n 'currencies/{currency}': 4.5,\n 'symbols': 6,\n 'market/orderbook/level1': 3,\n 'market/allTickers': 22.5,\n 'market/stats': 22.5,\n 'markets': 4.5,\n 'market/orderbook/level{level}_{limit}': 6,\n 'market/orderbook/level2_20': 3,\n 'market/orderbook/level2_100': 6,\n 'market/histories': 4.5,\n 'market/candles': 4.5,\n 'prices': 4.5,\n 'timestamp': 4.5,\n 'status': 4.5,\n // margin trading\n 'mark-price/{symbol}/current': 3,\n 'margin/config': 25, // 25SW\n },\n 'post': {\n // ws\n 'bullet-public': 15, // 10PW\n },\n },\n 'private': {\n 'get': {\n // account\n 'user-info': 30,\n 'accounts': 7.5,\n 'accounts/{accountId}': 7.5,\n 'accounts/ledgers': 3,\n 'hf/accounts/ledgers': 2,\n 'hf/margin/account/ledgers': 2,\n 'transaction-history': 3,\n 'sub/user': 30,\n 'sub-accounts/{subUserId}': 22.5,\n 'sub-accounts': 30,\n 'sub/api-key': 30,\n // funding\n 'margin/account': 40,\n 'margin/accounts': 15,\n 'isolated/accounts': 15,\n 'deposit-addresses': 7.5,\n 'deposits': 7.5,\n 'hist-deposits': 7.5,\n 'withdrawals': 30,\n 'hist-withdrawals': 30,\n 'withdrawals/quotas': 30,\n 'accounts/transferable': 30,\n 'transfer-list': 30,\n 'base-fee': 3,\n 'trade-fees': 3,\n // spot trading\n 'market/orderbook/level{level}': 3,\n 'market/orderbook/level2': 3,\n 'market/orderbook/level3': 3,\n 'hf/orders/active': 2,\n 'hf/orders/active/symbols': 2,\n 'hf/orders/done': 2,\n 'hf/orders/{orderId}': 2,\n 'hf/orders/client-order/{clientOid}': 2,\n 'hf/orders/dead-cancel-all/query': 2,\n 'hf/fills': 2,\n 'orders': 2,\n 'limit/orders': 3,\n 'orders/{orderId}': 2,\n 'order/client-order/{clientOid}': 3,\n 'fills': 10,\n 'limit/fills': 20,\n 'stop-order': 8,\n 'stop-order/{orderId}': 3,\n 'stop-order/queryOrderByClientOid': 3,\n 'oco/order/{orderId}': 2,\n 'oco/order/details/{orderId}': 2,\n 'oco/client-order/{clientOid}': 2,\n 'oco/orders': 2,\n // margin trading\n 'hf/margin/orders/active': 4,\n 'hf/margin/orders/done': 10,\n 'hf/margin/orders/{orderId}': 4,\n 'hf/margin/orders/client-order/{clientOid}': 5,\n 'hf/margin/fills': 5,\n 'etf/info': 25,\n 'margin/currencies': 20,\n 'risk/limit/strategy': 20,\n 'isolated/symbols': 20,\n 'isolated/account/{symbol}': 50,\n 'margin/borrow': 15,\n 'margin/repay': 15,\n 'project/list': 10,\n 'project/marketInterestRate': 7.5,\n 'redeem/orders': 10,\n 'purchase/orders': 10,\n 'earn/hold-assets': 5, // 5SW\n },\n 'post': {\n // account\n 'sub/user/created': 22.5,\n 'sub/api-key': 30,\n 'sub/api-key/update': 45,\n // funding\n 'deposit-addresses': 30,\n 'withdrawals': 7.5,\n 'accounts/universal-transfer': 6,\n 'accounts/sub-transfer': 45,\n 'accounts/inner-transfer': 15,\n 'transfer-out': 30,\n 'transfer-in': 30,\n // spot trading\n 'hf/orders': 1,\n 'hf/orders/test': 1,\n 'hf/orders/sync': 1,\n 'hf/orders/multi': 1,\n 'hf/orders/multi/sync': 1,\n 'hf/orders/alter': 3,\n 'hf/orders/dead-cancel-all': 2,\n 'orders': 2,\n 'orders/test': 2,\n 'orders/multi': 3,\n 'stop-order': 2,\n 'oco/order': 2,\n // margin trading\n 'hf/margin/order': 5,\n 'hf/margin/order/test': 5,\n 'margin/order': 5,\n 'margin/order/test': 5,\n 'margin/borrow': 15,\n 'margin/repay': 10,\n 'purchase': 15,\n 'redeem': 15,\n 'lend/purchase/update': 10,\n // ws\n 'bullet-private': 10, // 10SW\n },\n 'delete': {\n // account\n 'sub/api-key': 45,\n // funding\n 'withdrawals/{withdrawalId}': 30,\n // spot trading\n 'hf/orders/{orderId}': 1,\n 'hf/orders/sync/{orderId}': 1,\n 'hf/orders/client-order/{clientOid}': 1,\n 'hf/orders/sync/client-order/{clientOid}': 1,\n 'hf/orders/cancel/{orderId}': 2,\n 'hf/orders': 2,\n 'hf/orders/cancelAll': 30,\n 'orders/{orderId}': 3,\n 'order/client-order/{clientOid}': 5,\n 'orders': 20,\n 'stop-order/{orderId}': 3,\n 'stop-order/cancelOrderByClientOid': 5,\n 'stop-order/cancel': 3,\n 'oco/order/{orderId}': 3,\n 'oco/client-order/{clientOid}': 3,\n 'oco/orders': 3,\n // margin trading\n 'hf/margin/orders/{orderId}': 5,\n 'hf/margin/orders/client-order/{clientOid}': 5,\n 'hf/margin/orders': 10, // 10SW\n },\n },\n 'futuresPublic': {\n 'get': {\n 'contracts/active': 4.5,\n 'contracts/{symbol}': 4.5,\n 'ticker': 3,\n 'level2/snapshot': 4.5,\n 'level2/depth20': 7.5,\n 'level2/depth100': 15,\n 'trade/history': 7.5,\n 'kline/query': 4.5,\n 'interest/query': 7.5,\n 'index/query': 3,\n 'mark-price/{symbol}/current': 4.5,\n 'premium/query': 4.5,\n 'trade-statistics': 4.5,\n 'funding-rate/{symbol}/current': 3,\n 'contract/funding-rates': 7.5,\n 'timestamp': 3,\n 'status': 6,\n // ?\n 'level2/message/query': 1.3953,\n },\n 'post': {\n // ws\n 'bullet-public': 15, // 10PW\n },\n },\n 'futuresPrivate': {\n 'get': {\n // account\n 'transaction-history': 3,\n // funding\n 'account-overview': 7.5,\n 'account-overview-all': 9,\n 'transfer-list': 30,\n // futures\n 'orders': 3,\n 'stopOrders': 9,\n 'recentDoneOrders': 7.5,\n 'orders/{orderId}': 7.5,\n 'orders/byClientOid': 7.5,\n 'fills': 7.5,\n 'recentFills': 4.5,\n 'openOrderStatistics': 15,\n 'position': 3,\n 'positions': 3,\n 'margin/maxWithdrawMargin': 15,\n 'contracts/risk-limit/{symbol}': 7.5,\n 'funding-history': 7.5, // 5FW\n },\n 'post': {\n // funding\n 'transfer-out': 30,\n 'transfer-in': 30,\n // futures\n 'orders': 3,\n 'orders/test': 3,\n 'orders/multi': 4.5,\n 'position/margin/auto-deposit-status': 6,\n 'margin/withdrawMargin': 15,\n 'position/margin/deposit-margin': 6,\n 'position/risk-limit-level/change': 6,\n // ws\n 'bullet-private': 15, // 10FW\n },\n 'delete': {\n 'orders/{orderId}': 1.5,\n 'orders/client-order/{clientOid}': 1.5,\n 'orders': 45,\n 'stopOrders': 22.5, // 15FW\n },\n },\n 'webExchange': {\n 'get': {\n 'currency/currency/chain-info': 1, // this is temporary from webApi\n },\n },\n },\n 'timeframes': {\n '1m': '1min',\n '3m': '3min',\n '5m': '5min',\n '15m': '15min',\n '30m': '30min',\n '1h': '1hour',\n '2h': '2hour',\n '4h': '4hour',\n '6h': '6hour',\n '8h': '8hour',\n '12h': '12hour',\n '1d': '1day',\n '1w': '1week',\n },\n 'precisionMode': TICK_SIZE,\n 'exceptions': {\n 'exact': {\n 'order not exist': OrderNotFoundError,\n 'order not exist.': OrderNotFoundError,\n 'order_not_exist': OrderNotFoundError,\n 'order_not_exist_or_not_allow_to_cancel': TradeError,\n 'Order size below the minimum requirement.': InvalidParamsError,\n 'Withdrawal amount is below the minimum requirement.': UnderWithdrawMinimumError,\n 'Unsuccessful! Exceeded the max. funds out-transfer limit': InsufficientBalanceError,\n '400': InternalError,\n '401': AuthenticationError,\n '403': ExchangeNotAllowedMethodError,\n '404': ExchangeNotAllowedMethodError,\n '405': ExchangeNotAllowedMethodError,\n '415': ExchangeNotAllowedMethodError,\n '429': ExchangeRateLimitExceededError,\n '500': ExchangeNotAvailableError,\n '503': ExchangeNotAvailableError,\n '101030': ExchangeInvalidPermissionsError,\n '103000': InvalidParamsError,\n '130101': InvalidParamsError,\n '130102': ExchangeError,\n '130103': OrderNotFoundError,\n '130104': ExchangeError,\n '130105': InsufficientBalanceError,\n '130106': ExchangeError,\n '130107': ExchangeError,\n '130108': OrderNotFoundError,\n '130201': ExchangeInvalidPermissionsError,\n '130202': ExchangeError,\n '130203': InsufficientBalanceError,\n '130204': ExchangeError,\n '200004': InsufficientBalanceError,\n '210014': InvalidParamsError,\n '210021': InsufficientBalanceError,\n '230003': InsufficientBalanceError,\n '260000': CreateDepositAddressError,\n '260100': InsufficientBalanceError,\n '260325': WhitelistCheckFailedError,\n '300000': TradeError,\n '400000': InvalidParamsError,\n '400001': AuthenticationError,\n '400002': ExchangeInvalidNonceError,\n '400003': InvalidCredentialsError,\n '400004': InvalidCredentialsError,\n '400005': AuthenticationError,\n '400006': AuthenticationError,\n '400007': ExchangeInvalidPermissionsError,\n '400008': ExchangeError,\n '400100': ExchangeError,\n '400200': ExchangeInvalidPermissionsError,\n '400350': TradeError,\n '400370': InvalidParamsError,\n '400400': InvalidParamsError,\n '400500': ExchangeUnavailableInCountry,\n '400600': InvalidParamsError,\n '400760': InvalidParamsError,\n '401000': InvalidParamsError,\n '411100': ExchangeAccountSuspendedError,\n '415000': InvalidParamsError,\n '400303': ExchangeInvalidPermissionsError,\n '500000': ExchangeNotAvailableError,\n '260220': GetDepositAddressError,\n '900014': InvalidParamsError, // {\"code\":\"900014\",\"msg\":\"Invalid chainId\"}\n },\n 'broad': {\n 'Exceeded the access frequency': ExchangeRateLimitExceededError,\n 'require more permission': ExchangeInvalidPermissionsError,\n },\n 'messages': {\n 'The quantity is below the minimum requirement': SdkErrorMessages.ORDER_UNDER_MINIMUM,\n },\n },\n 'fees': {\n 'trading': {\n 'tierBased': true,\n 'percentage': true,\n 'taker': this.parseNumber('0.001'),\n 'maker': this.parseNumber('0.001'),\n 'tiers': {\n 'taker': [\n [this.parseNumber('0'), this.parseNumber('0.001')],\n [this.parseNumber('50'), this.parseNumber('0.001')],\n [this.parseNumber('200'), this.parseNumber('0.0009')],\n [this.parseNumber('500'), this.parseNumber('0.0008')],\n [this.parseNumber('1000'), this.parseNumber('0.0007')],\n [this.parseNumber('2000'), this.parseNumber('0.0007')],\n [this.parseNumber('4000'), this.parseNumber('0.0006')],\n [this.parseNumber('8000'), this.parseNumber('0.0005')],\n [this.parseNumber('15000'), this.parseNumber('0.00045')],\n [this.parseNumber('25000'), this.parseNumber('0.0004')],\n [this.parseNumber('40000'), this.parseNumber('0.00035')],\n [this.parseNumber('60000'), this.parseNumber('0.0003')],\n [this.parseNumber('80000'), this.parseNumber('0.00025')],\n ],\n 'maker': [\n [this.parseNumber('0'), this.parseNumber('0.001')],\n [this.parseNumber('50'), this.parseNumber('0.0009')],\n [this.parseNumber('200'), this.parseNumber('0.0007')],\n [this.parseNumber('500'), this.parseNumber('0.0005')],\n [this.parseNumber('1000'), this.parseNumber('0.0003')],\n [this.parseNumber('2000'), this.parseNumber('0')],\n [this.parseNumber('4000'), this.parseNumber('0')],\n [this.parseNumber('8000'), this.parseNumber('0')],\n [this.parseNumber('15000'), this.parseNumber('-0.00005')],\n [this.parseNumber('25000'), this.parseNumber('-0.00005')],\n [this.parseNumber('40000'), this.parseNumber('-0.00005')],\n [this.parseNumber('60000'), this.parseNumber('-0.00005')],\n [this.parseNumber('80000'), this.parseNumber('-0.00005')],\n ],\n },\n },\n 'funding': {\n 'tierBased': false,\n 'percentage': false,\n 'withdraw': {},\n 'deposit': {},\n },\n },\n 'options': {\n 'version': 'v1',\n 'timeDifference': 0,\n 'symbolSeparator': '-',\n 'fetchMyTradesMethod': 'private_get_fills',\n 'fetchCurrencies': {\n 'webApiEnable': true,\n 'webApiRetries': 1,\n 'webApiMuteFailure': true,\n },\n 'fetchMarkets': {\n 'fetchTickersFees': true,\n },\n 'withdraw': {\n 'includeFee': false,\n },\n // endpoint versions\n 'versions': {\n 'public': {\n 'GET': {\n // spot trading\n 'currencies': 'v3',\n 'currencies/{currency}': 'v3',\n 'symbols': 'v2',\n },\n },\n 'private': {\n 'GET': {\n // account\n 'user-info': 'v2',\n 'hf/margin/account/ledgers': 'v3',\n 'sub/user': 'v2',\n 'sub-accounts': 'v2',\n // funding\n 'margin/accounts': 'v3',\n 'isolated/accounts': 'v3',\n // 'deposit-addresses': 'v2',\n 'deposit-addresses': 'v1',\n // spot trading\n 'market/orderbook/level2': 'v3',\n 'market/orderbook/level3': 'v3',\n 'market/orderbook/level{level}': 'v3',\n 'oco/order/{orderId}': 'v3',\n 'oco/order/details/{orderId}': 'v3',\n 'oco/client-order/{clientOid}': 'v3',\n 'oco/orders': 'v3',\n // margin trading\n 'hf/margin/orders/active': 'v3',\n 'hf/margin/orders/done': 'v3',\n 'hf/margin/orders/{orderId}': 'v3',\n 'hf/margin/orders/client-order/{clientOid}': 'v3',\n 'hf/margin/fills': 'v3',\n 'etf/info': 'v3',\n 'margin/currencies': 'v3',\n 'margin/borrow': 'v3',\n 'margin/repay': 'v3',\n 'project/list': 'v3',\n 'project/marketInterestRate': 'v3',\n 'redeem/orders': 'v3',\n 'purchase/orders': 'v3',\n },\n 'POST': {\n // account\n 'sub/user/created': 'v2',\n // funding\n 'accounts/universal-transfer': 'v3',\n 'accounts/sub-transfer': 'v2',\n 'accounts/inner-transfer': 'v2',\n 'transfer-out': 'v3',\n // spot trading\n 'oco/order': 'v3',\n // margin trading\n 'hf/margin/order': 'v3',\n 'hf/margin/order/test': 'v3',\n 'margin/borrow': 'v3',\n 'margin/repay': 'v3',\n 'purchase': 'v3',\n 'redeem': 'v3',\n 'lend/purchase/update': 'v3',\n },\n 'DELETE': {\n // account\n // funding\n // spot trading\n 'hf/margin/orders/{orderId}': 'v3',\n 'hf/margin/orders/client-order/{clientOid}': 'v3',\n 'hf/margin/orders': 'v3',\n 'oco/order/{orderId}': 'v3',\n 'oco/client-order/{clientOid}': 'v3',\n 'oco/orders': 'v3',\n // margin trading\n },\n },\n 'futuresPrivate': {\n 'POST': {\n 'transfer-out': 'v3',\n },\n },\n },\n 'partner': {\n // the support for spot and future exchanges as separate settings\n 'spot': {\n 'id': 'ccxt',\n 'key': '9e58cc35-5b5e-4133-92ec-166e3f077cb8',\n },\n 'future': {\n 'id': 'ccxtfutures',\n 'key': '1b327198-f30c-4f14-a0ac-918871282f15',\n },\n // exchange-wide settings are also supported\n // 'id': 'ccxt'\n // 'key': '9e58cc35-5b5e-4133-92ec-166e3f077cb8',\n },\n 'accountsByType': {\n 'spot': 'trade',\n 'margin': 'margin',\n 'cross': 'margin',\n 'isolated': 'isolated',\n 'main': 'main',\n 'funding': 'main',\n 'future': 'contract',\n 'swap': 'contract',\n 'mining': 'pool',\n 'hf': 'trade_hf',\n },\n 'marginModes': {\n 'cross': 'MARGIN_TRADE',\n 'isolated': 'MARGIN_ISOLATED_TRADE',\n 'spot': 'TRADE',\n },\n },\n });\n }\n nonce() {\n return this.milliseconds() - this.options['timeDifference'];\n }\n async fetchTime(params = {}) {\n /**\n * @method\n * @name kucoin#fetchTime\n * @description fetches the current integer timestamp in milliseconds from the exchange server\n * @see https://docs.kucoin.com/#server-time\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {int} the current integer timestamp in milliseconds from the exchange server\n */\n const response = await this.publicGetTimestamp(params);\n //\n // {\n // \"code\":\"200000\",\n // \"msg\":\"success\",\n // \"data\":1546837113087\n // }\n //\n return this.safeInteger(response, 'data');\n }\n isUsingForcedProxy(params = {}, api = 'public') {\n if (api === 'private' || api === 'futuresPrivate') {\n return true;\n }\n return false;\n }\n async fetchStatus(params = {}) {\n /**\n * @method\n * @name kucoin#fetchStatus\n * @description the latest known information on the availability of the exchange API\n * @see https://docs.kucoin.com/#service-status\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} a [status structure]{@link https://docs.ccxt.com/#/?id=exchange-status-structure}\n */\n const response = await this.publicGetStatus(params);\n //\n // {\n // \"code\":\"200000\",\n // \"data\":{\n // \"status\":\"open\", //open, close, cancelonly\n // \"msg\":\"upgrade match engine\" //remark for operation\n // }\n // }\n //\n const data = this.safeValue(response, 'data', {});\n const status = this.safeString(data, 'status');\n return {\n 'status': (status === 'open') ? 'ok' : 'maintenance',\n 'updated': undefined,\n 'eta': undefined,\n 'url': undefined,\n 'info': response,\n };\n }\n async fetchMarkets(params = {}) {\n /**\n * @method\n * @name kucoin#fetchMarkets\n * @description retrieves data on all markets for kucoin\n * @see https://docs.kucoin.com/#get-symbols-list-deprecated\n * @see https://docs.kucoin.com/#get-all-tickers\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object[]} an array of objects representing market data\n */\n const response = await this.publicGetSymbols(params);\n //\n // {\n // \"code\": \"200000\",\n // \"data\": [\n // {\n // \"symbol\": \"XLM-USDT\",\n // \"name\": \"XLM-USDT\",\n // \"baseCurrency\": \"XLM\",\n // \"quoteCurrency\": \"USDT\",\n // \"feeCurrency\": \"USDT\",\n // \"market\": \"USDS\",\n // \"baseMinSize\": \"0.1\",\n // \"quoteMinSize\": \"0.01\",\n // \"baseMaxSize\": \"10000000000\",\n // \"quoteMaxSize\": \"99999999\",\n // \"baseIncrement\": \"0.0001\",\n // \"quoteIncrement\": \"0.000001\",\n // \"priceIncrement\": \"0.000001\",\n // \"priceLimitRate\": \"0.1\",\n // \"isMarginEnabled\": true,\n // \"enableTrading\": true\n // },\n // ]\n // }\n //\n const data = this.safeValue(response, 'data');\n const options = this.safeValue(this.options, 'fetchMarkets', {});\n const fetchTickersFees = this.safeBool(options, 'fetchTickersFees', true);\n let tickersResponse = {};\n if (fetchTickersFees) {\n tickersResponse = await this.publicGetMarketAllTickers(params);\n }\n //\n // {\n // \"code\": \"200000\",\n // \"data\": {\n // \"time\":1602832092060,\n // \"ticker\":[\n // {\n // \"symbol\": \"BTC-USDT\", // symbol\n // \"symbolName\":\"BTC-USDT\", // Name of trading pairs, it would change after renaming\n // \"buy\": \"11328.9\", // bestAsk\n // \"sell\": \"11329\", // bestBid\n // \"changeRate\": \"-0.0055\", // 24h change rate\n // \"changePrice\": \"-63.6\", // 24h change price\n // \"high\": \"11610\", // 24h highest price\n // \"low\": \"11200\", // 24h lowest price\n // \"vol\": \"2282.70993217\", // 24h volume,the aggregated trading volume in BTC\n // \"volValue\": \"25984946.157790431\", // 24h total, the trading volume in quote currency of last 24 hours\n // \"last\": \"11328.9\", // last price\n // \"averagePrice\": \"11360.66065903\", // 24h average transaction price yesterday\n // \"takerFeeRate\": \"0.001\", // Basic Taker Fee\n // \"makerFeeRate\": \"0.001\", // Basic Maker Fee\n // \"takerCoefficient\": \"1\", // Taker Fee Coefficient\n // \"makerCoefficient\": \"1\" // Maker Fee Coefficient\n // }\n // ]\n // }\n // }\n //\n const tickersData = this.safeValue(tickersResponse, 'data', {});\n const tickers = this.safeValue(tickersData, 'ticker', []);\n const tickersByMarketId = this.indexBy(tickers, 'symbol');\n const result = [];\n for (let i = 0; i < data.length; i++) {\n const market = data[i];\n const id = this.safeString(market, 'symbol');\n const [baseId, quoteId] = id.split('-');\n const base = this.safeCurrencyCode(baseId);\n const quote = this.safeCurrencyCode(quoteId);\n // const quoteIncrement = this.safeNumber (market, 'quoteIncrement');\n const ticker = this.safeValue(tickersByMarketId, id, {});\n const makerFeeRate = this.safeString(ticker, 'makerFeeRate');\n const takerFeeRate = this.safeString(ticker, 'takerFeeRate');\n const makerCoefficient = this.safeString(ticker, 'makerCoefficient');\n const takerCoefficient = this.safeString(ticker, 'takerCoefficient');\n result.push({\n 'id': id,\n 'symbol': base + '/' + quote,\n 'base': base,\n 'quote': quote,\n 'settle': undefined,\n 'baseId': baseId,\n 'quoteId': quoteId,\n 'settleId': undefined,\n 'type': 'spot',\n 'spot': true,\n 'margin': this.safeValue(market, 'isMarginEnabled'),\n 'swap': false,\n 'future': false,\n 'option': false,\n 'active': this.safeValue(market, 'enableTrading'),\n 'contract': false,\n 'linear': undefined,\n 'inverse': undefined,\n 'taker': this.parseNumber(Precise.stringMul(takerFeeRate, takerCoefficient)),\n 'maker': this.parseNumber(Precise.stringMul(makerFeeRate, makerCoefficient)),\n 'contractSize': undefined,\n 'expiry': undefined,\n 'expiryDatetime': undefined,\n 'strike': undefined,\n 'optionType': undefined,\n 'precision': {\n 'amount': this.safeNumber(market, 'baseIncrement'),\n 'price': this.safeNumber(market, 'priceIncrement'),\n },\n 'limits': {\n 'leverage': {\n 'min': undefined,\n 'max': undefined,\n },\n 'amount': {\n 'min': this.safeNumber(market, 'baseMinSize'),\n 'max': this.safeNumber(market, 'baseMaxSize'),\n },\n 'price': {\n 'min': undefined,\n 'max': undefined,\n },\n 'cost': {\n 'min': this.safeNumber(market, 'quoteMinSize'),\n 'max': this.safeNumber(market, 'quoteMaxSize'),\n },\n },\n 'created': undefined,\n 'info': market,\n });\n }\n return result;\n }\n async fetchCurrencies(params = {}) {\n /**\n * @method\n * @name kucoin#fetchCurrencies\n * @description fetches all available currencies on an exchange\n * @see https://docs.kucoin.com/#get-currencies\n * @param {object} params extra parameters specific to the exchange API endpoint\n * @returns {object} an associative dictionary of currencies\n */\n const promises = [];\n promises.push(this.publicGetCurrencies(params));\n //\n // {\n // \"code\":\"200000\",\n // \"data\":[\n // {\n // \"currency\":\"CSP\",\n // \"name\":\"CSP\",\n // \"fullName\":\"Caspian\",\n // \"precision\":8,\n // \"confirms\":null,\n // \"contractAddress\":null,\n // \"isMarginEnabled\":false,\n // \"isDebitEnabled\":false,\n // \"chains\":[\n // {\n // \"chainName\":\"ERC20\",\n // \"chain\":\"eth\",\n // \"withdrawalMinSize\":\"2999\",\n // \"withdrawalMinFee\":\"2999\",\n // \"withdrawFeeRate\": \"0.001\",\n // \"withdrawMaxFee\": \"0.0005\",\n // \"isWithdrawEnabled\":false,\n // \"isDepositEnabled\":false,\n // \"confirms\":12,\n // \"preConfirms\":12,\n // \"contractAddress\":\"0xa6446d655a0c34bc4f05042ee88170d056cbaf45\",\n // \"depositFeeRate\": \"0.001\", // present for some currencies/networks\n // }\n // ]\n // },\n // }\n //\n promises.push(this.fetchWebEndpoint('fetchCurrencies', 'webExchangeGetCurrencyCurrencyChainInfo', true));\n //\n // {\n // \"success\": true,\n // \"code\": \"200\",\n // \"msg\": \"success\",\n // \"retry\": false,\n // \"data\": [\n // {\n // \"status\": \"enabled\",\n // \"currency\": \"BTC\",\n // \"isChainEnabled\": \"true\",\n // \"chain\": \"btc\",\n // \"chainName\": \"BTC\",\n // \"chainFullName\": \"Bitcoin\",\n // \"walletPrecision\": \"8\",\n // \"isDepositEnabled\": \"true\",\n // \"depositMinSize\": \"0.00005\",\n // \"confirmationCount\": \"2\",\n // \"isWithdrawEnabled\": \"true\",\n // \"withdrawMinSize\": \"0.001\",\n // \"withdrawMinFee\": \"0.0005\",\n // \"withdrawFeeRate\": \"0\",\n // \"depositDisabledTip\": \"Wallet Maintenance\",\n // \"preDepositTipEnabled\": \"true\",\n // \"preDepositTip\": \"Do not transfer from ETH network directly\",\n // \"withdrawDisabledTip\": \"\",\n // \"preWithdrawTipEnabled\": \"false\",\n // \"preWithdrawTip\": \"\",\n // \"orgAddress\": \"\",\n // \"userAddressName\": \"Memo\",\n // },\n // ]\n // }\n //\n const responses = await Promise.all(promises);\n const currenciesResponse = this.safeValue(responses, 0, {});\n const currenciesData = this.safeValue(currenciesResponse, 'data', []);\n const additionalResponse = this.safeValue(responses, 1, {});\n const additionalData = this.safeValue(additionalResponse, 'data', []);\n const additionalDataGrouped = this.groupBy(additionalData, 'currency');\n const result = {};\n for (let i = 0; i < currenciesData.length; i++) {\n const entry = currenciesData[i];\n const id = this.safeString(entry, 'currency');\n const name = this.safeString(entry, 'fullName');\n const code = this.safeCurrencyCode(id);\n let isTokenWithdrawable = false;\n let isTokenDepositable = false;\n const networks = {};\n const chains = this.safeValue(entry, 'chains', []);\n const extraChainsData = this.indexBy(this.safeValue(additionalDataGrouped, id, []), 'chain');\n const rawPrecision = this.safeString(entry, 'precision');\n const precision = this.parseNumber(this.parsePrecision(rawPrecision));\n const chainsLength = chains.length;\n if (!chainsLength) {\n // https://t.me/KuCoin_API/173118\n isTokenWithdrawable = false;\n isTokenDepositable = false;\n }\n for (let j = 0; j < chainsLength; j++) {\n const chain = chains[j];\n const chainId = this.safeString(chain, 'chainId');\n const networkCode = this.networkIdToCode(chainId);\n const isWithdrawalEnabled = this.safeBool(chain, 'isWithdrawEnabled', false);\n const isDepositEnabled = this.safeBool(chain, 'isDepositEnabled', false);\n isTokenDepositable = isDepositEnabled || isTokenDepositable;\n isTokenWithdrawable = isWithdrawalEnabled || isTokenWithdrawable;\n const chainExtraData = this.safeValue(extraChainsData, chainId, {});\n const withdrawalMinSize = this.safeNumber(chain, 'withdrawalMinSize', 0);\n networks[networkCode] = {\n 'info': {\n ...chain,\n chainExtraData,\n },\n 'id': chainId,\n 'name': this.safeString(chain, 'chainName'),\n 'code': networkCode,\n 'active': isWithdrawalEnabled && isDepositEnabled,\n 'fee': this.safeNumber(chain, 'withdrawalMinFee'),\n 'deposit': isDepositEnabled,\n 'withdraw': isWithdrawalEnabled,\n 'limits': {\n 'withdraw': {\n 'min': withdrawalMinSize,\n 'max': undefined,\n },\n 'deposit': {\n 'min': this.safeNumber(chainExtraData, 'depositMinSize'),\n 'max': undefined,\n },\n },\n };\n }\n // kucoin has determined 'fiat' currencies with below logic\n const isFiat = (rawPrecision === '2') && (chainsLength === 0);\n result[code] = {\n 'id': id,\n 'name': name,\n 'code': code,\n 'type': isFiat ? 'fiat' : 'crypto',\n 'precision': precision,\n 'info': entry,\n 'active': (isTokenDepositable || isTokenWithdrawable),\n 'deposit': isTokenDepositable,\n 'withdraw': isTokenWithdrawable,\n 'fee': undefined,\n 'limits': this.limits,\n 'networks': networks,\n };\n }\n return result;\n }\n async fetchAccounts(params = {}) {\n /**\n * @method\n * @name kucoin#fetchAccounts\n * @description fetch all the accounts associated with a profile\n * @see https://docs.kucoin.com/#list-accounts\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} a dictionary of [account structures]{@link https://docs.ccxt.com/#/?id=account-structure} indexed by the account type\n */\n const response = await this.privateGetAccounts(params);\n //\n // {\n // \"code\": \"200000\",\n // \"data\": [\n // {\n // \"balance\": \"0.00009788\",\n // \"available\": \"0.00009788\",\n // \"holds\": \"0\",\n // \"currency\": \"BTC\",\n // \"id\": \"5c6a4fd399a1d81c4f9cc4d0\",\n // \"type\": \"trade\"\n // },\n // {\n // \"balance\": \"0.00000001\",\n // \"available\": \"0.00000001\",\n // \"holds\": \"0\",\n // \"currency\": \"ETH\",\n // \"id\": \"5c6a49ec99a1d819392e8e9f\",\n // \"type\": \"trade\"\n // }\n // ]\n // }\n //\n const data = this.safeValue(response, 'data', []);\n const result = [];\n for (let i = 0; i < data.length; i++) {\n const account = data[i];\n const accountId = this.safeString(account, 'id');\n const currencyId = this.safeString(account, 'currency');\n const code = this.safeCurrencyCode(currencyId);\n const type = this.safeString(account, 'type'); // main or trade\n result.push({\n 'id': accountId,\n 'type': type,\n 'currency': code,\n 'code': code,\n 'info': account,\n });\n }\n return result;\n }\n async fetchTransactionFee(code, params = {}) {\n /**\n * @method\n * @name kucoin#fetchTransactionFee\n * @description *DEPRECATED* please use fetchDepositWithdrawFee instead\n * @see https://docs.kucoin.com/#get-withdrawal-quotas\n * @param {string} code unified currency code\n * @param {object} params extra parameters specific to the exchange API endpoint\n * @returns {object} a [fee structure]{@link https://docs.ccxt.com/#/?id=fee-structure}\n */\n await this.loadMarkets();\n const currency = this.currency(code);\n const request = {\n 'currency': currency['id'],\n };\n let networkCode = undefined;\n [networkCode, params] = this.handleNetworkCodeAndParams(params);\n if (networkCode !== undefined) {\n request['chain'] = this.networkCodeToId(networkCode).toLowerCase();\n }\n const response = await this.privateGetWithdrawalsQuotas(this.extend(request, params));\n const data = this.safeValue(response, 'data');\n const withdrawFees = {};\n withdrawFees[code] = this.safeNumber(data, 'withdrawMinFee');\n return {\n 'info': response,\n 'withdraw': withdrawFees,\n 'deposit': {},\n };\n }\n async fetchDepositWithdrawFee(code, params = {}) {\n /**\n * @method\n * @name kucoin#fetchDepositWithdrawFee\n * @description fetch the fee for deposits and withdrawals\n * @see https://docs.kucoin.com/#get-withdrawal-quotas\n * @param {string} code unified currency code\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {string} [params.network] The chain of currency. This only apply for multi-chain currency, and there is no need for single chain currency; you can query the chain through the response of the GET /api/v2/currencies/{currency} interface\n * @returns {object} a [fee structure]{@link https://docs.ccxt.com/#/?id=fee-structure}\n */\n await this.loadMarkets();\n const currency = this.currency(code);\n const request = {\n 'currency': currency['id'],\n };\n let networkCode = undefined;\n [networkCode, params] = this.handleNetworkCodeAndParams(params);\n if (networkCode !== undefined) {\n request['chain'] = this.networkCodeToId(networkCode).toLowerCase();\n }\n const response = await this.privateGetWithdrawalsQuotas(this.extend(request, params));\n //\n // {\n // \"code\": \"200000\",\n // \"data\": {\n // \"currency\": \"USDT\",\n // \"limitBTCAmount\": \"1.00000000\",\n // \"usedBTCAmount\": \"0.00000000\",\n // \"remainAmount\": \"16548.072149\",\n // \"availableAmount\": \"0\",\n // \"withdrawMinFee\": \"25\",\n // \"innerWithdrawMinFee\": \"0\",\n // \"withdrawMinSize\": \"50\",\n // \"isWithdrawEnabled\": true,\n // \"precision\": 6,\n // \"chain\": \"ERC20\"\n // }\n // }\n //\n const data = this.safeValue(response, 'data');\n return this.parseDepositWithdrawFee(data, currency);\n }\n parseDepositWithdrawFee(fee, currency = undefined) {\n //\n // {\n // \"currency\": \"USDT\",\n // \"limitBTCAmount\": \"1.00000000\",\n // \"usedBTCAmount\": \"0.00000000\",\n // \"remainAmount\": \"16548.072149\",\n // \"availableAmount\": \"0\",\n // \"withdrawMinFee\": \"25\",\n // \"innerWithdrawMinFee\": \"0\",\n // \"withdrawMinSize\": \"50\",\n // \"isWithdrawEnabled\": true,\n // \"precision\": 6,\n // \"chain\": \"ERC20\"\n // }\n //\n const result = {\n 'info': fee,\n 'withdraw': {\n 'fee': undefined,\n 'percentage': undefined,\n },\n 'deposit': {\n 'fee': undefined,\n 'percentage': undefined,\n },\n 'networks': {},\n };\n const isWithdrawEnabled = this.safeValue(fee, 'isWithdrawEnabled');\n if (isWithdrawEnabled) {\n result['withdraw']['fee'] = this.safeNumber2(fee, 'withdrawalMinFee', 'withdrawMinFee');\n result['withdraw']['percentage'] = false;\n const networkId = this.safeString(fee, 'chain');\n if (networkId) {\n const networkCode = this.networkIdToCode(networkId, this.safeString(currency, 'code'));\n result['networks'][networkCode] = {\n 'withdraw': result['withdraw'],\n 'deposit': {\n 'fee': undefined,\n 'percentage': undefined,\n },\n };\n }\n }\n return result;\n }\n parseTicker(ticker, market = undefined) {\n //\n // {\n // \"symbol\": \"BTC-USDT\", // symbol\n // \"symbolName\":\"BTC-USDT\", // Name of trading pairs, it would change after renaming\n // \"buy\": \"11328.9\", // bestAsk\n // \"sell\": \"11329\", // bestBid\n // \"changeRate\": \"-0.0055\", // 24h change rate\n // \"changePrice\": \"-63.6\", // 24h change price\n // \"high\": \"11610\", // 24h highest price\n // \"low\": \"11200\", // 24h lowest price\n // \"vol\": \"2282.70993217\", // 24h volume,the aggregated trading volume in BTC\n // \"volValue\": \"25984946.157790431\", // 24h total, the trading volume in quote currency of last 24 hours\n // \"last\": \"11328.9\", // last price\n // \"averagePrice\": \"11360.66065903\", // 24h average transaction price yesterday\n // \"takerFeeRate\": \"0.001\", // Basic Taker Fee\n // \"makerFeeRate\": \"0.001\", // Basic Maker Fee\n // \"takerCoefficient\": \"1\", // Taker Fee Coefficient\n // \"makerCoefficient\": \"1\" // Maker Fee Coefficient\n // }\n //\n // {\n // \"trading\": true,\n // \"symbol\": \"KCS-BTC\",\n // \"buy\": 0.00011,\n // \"sell\": 0.00012,\n // \"sort\": 100,\n // \"volValue\": 3.13851792584, //total\n // \"baseCurrency\": \"KCS\",\n // \"market\": \"BTC\",\n // \"quoteCurrency\": \"BTC\",\n // \"symbolCode\": \"KCS-BTC\",\n // \"datetime\": 1548388122031,\n // \"high\": 0.00013,\n // \"vol\": 27514.34842,\n // \"low\": 0.0001,\n // \"changePrice\": -1.0e-5,\n // \"changeRate\": -0.0769,\n // \"lastTradedPrice\": 0.00012,\n // \"board\": 0,\n // \"mark\": 0\n // }\n //\n // market/ticker ws subscription\n //\n // {\n // \"bestAsk\": \"62258.9\",\n // \"bestAskSize\": \"0.38579986\",\n // \"bestBid\": \"62258.8\",\n // \"bestBidSize\": \"0.0078381\",\n // \"price\": \"62260.7\",\n // \"sequence\": \"1621383297064\",\n // \"size\": \"0.00002841\",\n // \"time\": 1634641777363\n // }\n //\n let percentage = this.safeString(ticker, 'changeRate');\n if (percentage !== undefined) {\n percentage = Precise.stringMul(percentage, '100');\n }\n let last = this.safeString2(ticker, 'last', 'lastTradedPrice');\n last = this.safeString(ticker, 'price', last);\n const marketId = this.safeString(ticker, 'symbol');\n market = this.safeMarket(marketId, market, '-');\n const symbol = market['symbol'];\n const baseVolume = this.safeString(ticker, 'vol');\n const quoteVolume = this.safeString(ticker, 'volValue');\n const timestamp = this.safeInteger2(ticker, 'time', 'datetime');\n return this.safeTicker({\n 'symbol': symbol,\n 'timestamp': timestamp,\n 'datetime': this.iso8601(timestamp),\n 'high': this.safeString(ticker, 'high'),\n 'low': this.safeString(ticker, 'low'),\n 'bid': this.safeString2(ticker, 'buy', 'bestBid'),\n 'bidVolume': this.safeString(ticker, 'bestBidSize'),\n 'ask': this.safeString2(ticker, 'sell', 'bestAsk'),\n 'askVolume': this.safeString(ticker, 'bestAskSize'),\n 'vwap': undefined,\n 'open': this.safeString(ticker, 'open'),\n 'close': last,\n 'last': last,\n 'previousClose': undefined,\n 'change': this.safeString(ticker, 'changePrice'),\n 'percentage': percentage,\n 'average': this.safeString(ticker, 'averagePrice'),\n 'baseVolume': baseVolume,\n 'quoteVolume': quoteVolume,\n 'info': ticker,\n }, market);\n }\n async fetchTickers(symbols = undefined, params = {}) {\n /**\n * @method\n * @name kucoin#fetchTickers\n * @description fetches price tickers for multiple markets, statistical information calculated over the past 24 hours for each market\n * @see https://docs.kucoin.com/#get-all-tickers\n * @param {string[]|undefined} symbols unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} a dictionary of [ticker structures]{@link https://docs.ccxt.com/#/?id=ticker-structure}\n */\n await this.loadMarkets();\n symbols = this.marketSymbols(symbols);\n const response = await this.publicGetMarketAllTickers(params);\n //\n // {\n // \"code\": \"200000\",\n // \"data\": {\n // \"time\":1602832092060,\n // \"ticker\":[\n // {\n // \"symbol\": \"BTC-USDT\", // symbol\n // \"symbolName\":\"BTC-USDT\", // Name of trading pairs, it would change after renaming\n // \"buy\": \"11328.9\", // bestAsk\n // \"sell\": \"11329\", // bestBid\n // \"changeRate\": \"-0.0055\", // 24h change rate\n // \"changePrice\": \"-63.6\", // 24h change price\n // \"high\": \"11610\", // 24h highest price\n // \"low\": \"11200\", // 24h lowest price\n // \"vol\": \"2282.70993217\", // 24h volume,the aggregated trading volume in BTC\n // \"volValue\": \"25984946.157790431\", // 24h total, the trading volume in quote currency of last 24 hours\n // \"last\": \"11328.9\", // last price\n // \"averagePrice\": \"11360.66065903\", // 24h average transaction price yesterday\n // \"takerFeeRate\": \"0.001\", // Basic Taker Fee\n // \"makerFeeRate\": \"0.001\", // Basic Maker Fee\n // \"takerCoefficient\": \"1\", // Taker Fee Coefficient\n // \"makerCoefficient\": \"1\" // Maker Fee Coefficient\n // }\n // ]\n // }\n // }\n //\n const data = this.safeValue(response, 'data', {});\n const tickers = this.safeValue(data, 'ticker', []);\n const time = this.safeInteger(data, 'time');\n const result = {};\n for (let i = 0; i < tickers.length; i++) {\n tickers[i]['time'] = time;\n const ticker = this.parseTicker(tickers[i]);\n const symbol = this.safeString(ticker, 'symbol');\n if (symbol !== undefined) {\n result[symbol] = ticker;\n }\n }\n return this.filterByArrayTickers(result, 'symbol', symbols);\n }\n async fetchTicker(symbol, params = {}) {\n /**\n * @method\n * @name kucoin#fetchTicker\n * @description fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market\n * @see https://docs.kucoin.com/#get-24hr-stats\n * @param {string} symbol unified symbol of the market to fetch the ticker for\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} a [ticker structure]{@link https://docs.ccxt.com/#/?id=ticker-structure}\n */\n await this.loadMarkets();\n const market = this.market(symbol);\n const request = {\n 'symbol': market['id'],\n };\n const response = await this.publicGetMarketStats(this.extend(request, params));\n //\n // {\n // \"code\": \"200000\",\n // \"data\": {\n // \"time\": 1602832092060, // time\n // \"symbol\": \"BTC-USDT\", // symbol\n // \"buy\": \"11328.9\", // bestAsk\n // \"sell\": \"11329\", // bestBid\n // \"changeRate\": \"-0.0055\", // 24h change rate\n // \"changePrice\": \"-63.6\", // 24h change price\n // \"high\": \"11610\", // 24h highest price\n // \"low\": \"11200\", // 24h lowest price\n // \"vol\": \"2282.70993217\", // 24h volume,the aggregated trading volume in BTC\n // \"volValue\": \"25984946.157790431\", // 24h total, the trading volume in quote currency of last 24 hours\n // \"last\": \"11328.9\", // last price\n // \"averagePrice\": \"11360.66065903\", // 24h average transaction price yesterday\n // \"takerFeeRate\": \"0.001\", // Basic Taker Fee\n // \"makerFeeRate\": \"0.001\", // Basic Maker Fee\n // \"takerCoefficient\": \"1\", // Taker Fee Coefficient\n // \"makerCoefficient\": \"1\" // Maker Fee Coefficient\n // }\n // }\n //\n return this.parseTicker(response['data'], market);\n }\n parseOHLCV(ohlcv, market = undefined) {\n //\n // [\n // \"1545904980\", // Start time of the candle cycle\n // \"0.058\", // opening price\n // \"0.049\", // closing price\n // \"0.058\", // highest price\n // \"0.049\", // lowest price\n // \"0.018\", // base volume\n // \"0.000945\", // quote volume\n // ]\n //\n return [\n this.safeTimestamp(ohlcv, 0),\n this.safeNumber(ohlcv, 1),\n this.safeNumber(ohlcv, 3),\n this.safeNumber(ohlcv, 4),\n this.safeNumber(ohlcv, 2),\n this.safeNumber(ohlcv, 5),\n ];\n }\n async fetchOHLCV(symbol, timeframe = '1m', since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name kucoin#fetchOHLCV\n * @description fetches historical candlestick data containing the open, high, low, and close price, and the volume of a market\n * @see https://docs.kucoin.com/#get-klines\n * @param {string} symbol unified symbol of the market to fetch OHLCV data for\n * @param {string} timeframe the length of time each candle represents\n * @param {int} [since] timestamp in ms of the earliest candle to fetch\n * @param {int} [limit] the maximum amount of candles to fetch\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {boolean} [params.paginate] default false, when true will automatically paginate by calling this endpoint multiple times. See in the docs all the [availble parameters](https://github.com/ccxt/ccxt/wiki/Manual#pagination-params)\n * @returns {int[][]} A list of candles ordered as timestamp, open, high, low, close, volume\n */\n await this.loadMarkets();\n let paginate = false;\n [paginate, params] = this.handleOptionAndParams(params, 'fetchOHLCV', 'paginate');\n if (paginate) {\n return await this.fetchPaginatedCallDeterministic('fetchOHLCV', symbol, since, limit, timeframe, params, 1500);\n }\n const market = this.market(symbol);\n const marketId = market['id'];\n const request = {\n 'symbol': marketId,\n 'type': this.safeString(this.timeframes, timeframe, timeframe),\n };\n const duration = this.parseTimeframe(timeframe) * 1000;\n let endAt = this.milliseconds(); // required param\n if (since !== undefined) {\n request['startAt'] = this.parseToInt(Math.floor(since / 1000));\n if (limit === undefined) {\n // https://docs.kucoin.com/#get-klines\n // https://docs.kucoin.com/#details\n // For each query, the system would return at most 1500 pieces of data.\n // To obtain more data, please page the data by time.\n limit = this.safeInteger(this.options, 'fetchOHLCVLimit', 1500);\n }\n endAt = this.sum(since, limit * duration);\n }\n else if (limit !== undefined) {\n since = endAt - limit * duration;\n request['startAt'] = this.parseToInt(Math.floor(since / 1000));\n }\n request['endAt'] = this.parseToInt(Math.floor(endAt / 1000));\n const response = await this.publicGetMarketCandles(this.extend(request, params));\n //\n // {\n // \"code\":\"200000\",\n // \"data\":[\n // [\"1591517700\",\"0.025078\",\"0.025069\",\"0.025084\",\"0.025064\",\"18.9883256\",\"0.4761861079404\"],\n // [\"1591516800\",\"0.025089\",\"0.025079\",\"0.025089\",\"0.02506\",\"99.4716622\",\"2.494143499081\"],\n // [\"1591515900\",\"0.025079\",\"0.02509\",\"0.025091\",\"0.025068\",\"59.83701271\",\"1.50060885172798\"],\n // ]\n // }\n //\n const data = this.safeValue(response, 'data', []);\n return this.parseOHLCVs(data, market, timeframe, since, limit);\n }\n async createDepositAddress(code, params = {}) {\n /**\n * @method\n * @name kucoin#createDepositAddress\n * @see https://docs.kucoin.com/#create-deposit-address\n * @description create a currency deposit address\n * @param {string} code unified currency code of the currency for the deposit address\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {string} [params.network] the blockchain network name\n * @returns {object} an [address structure]{@link https://docs.ccxt.com/#/?id=address-structure}\n */\n await this.loadMarkets();\n const currency = this.currency(code);\n const request = {\n 'currency': currency['id'],\n };\n let networkCode = undefined;\n [networkCode, params] = this.handleNetworkCodeAndParams(params);\n if (networkCode !== undefined) {\n request['chain'] = this.networkCodeToId(networkCode).toLowerCase();\n }\n const response = await this.privatePostDepositAddresses(this.extend(request, params));\n // {\"code\":\"260000\",\"msg\":\"Deposit address already exists.\"}\n // BCH {\"code\":\"200000\",\"data\":{\"address\":\"bitcoincash:qza3m4nj9rx7l9r0cdadfqxts6f92shvhvr5ls4q7z\",\"memo\":\"\"}}\n // BTC {\"code\":\"200000\",\"data\":{\"address\":\"36SjucKqQpQSvsak9A7h6qzFjrVXpRNZhE\",\"memo\":\"\"}}\n const data = this.safeValue(response, 'data', {});\n return this.parseDepositAddress(data, currency);\n }\n async fetchDepositAddress(code, params = {}) {\n /**\n * @method\n * @name kucoin#fetchDepositAddress\n * @description fetch the deposit address for a currency associated with this account\n * @see https://docs.kucoin.com/#get-deposit-addresses-v2\n * @param {string} code unified currency code\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {string} [params.network] the blockchain network name\n * @returns {object} an [address structure]{@link https://docs.ccxt.com/#/?id=address-structure}\n */\n await this.loadMarkets();\n const currency = this.currency(code);\n const request = {\n 'currency': currency['id'],\n // for USDT - OMNI, ERC20, TRC20, default is ERC20\n // for BTC - Native, Segwit, TRC20, the parameters are bech32, btc, trx, default is Native\n // 'chain': 'ERC20', // optional\n };\n let networkCode = undefined;\n [networkCode, params] = this.handleNetworkCodeAndParams(params);\n if (networkCode !== undefined) {\n request['chain'] = this.networkCodeToId(networkCode).toLowerCase();\n }\n const version = this.options['versions']['private']['GET']['deposit-addresses'];\n this.options['versions']['private']['GET']['deposit-addresses'] = 'v1';\n const response = await this.privateGetDepositAddresses(this.extend(request, params));\n // BCH {\"code\":\"200000\",\"data\":{\"address\":\"bitcoincash:qza3m4nj9rx7l9r0cdadfqxts6f92shvhvr5ls4q7z\",\"memo\":\"\"}}\n // BTC {\"code\":\"200000\",\"data\":{\"address\":\"36SjucKqQpQSvsak9A7h6qzFjrVXpRNZhE\",\"memo\":\"\"}}\n this.options['versions']['private']['GET']['deposit-addresses'] = version;\n const data = this.safeValue(response, 'data');\n if (data === undefined) {\n throw new GetDepositAddressError(code, networkCode)\n .addMessage('fetchDepositAddress() returned an empty response, you might try to run createDepositAddress() first and try again')\n .exchange(this.id);\n }\n return this.parseDepositAddress(data, currency);\n }\n parseDepositAddress(depositAddress, currency = undefined) {\n let address = this.safeString(depositAddress, 'address');\n // BCH/BSV is returned with a \"bitcoincash:\" prefix, which we cut off here and only keep the address\n if (address !== undefined) {\n address = address.replace('bitcoincash:', '');\n }\n let code = undefined;\n if (currency !== undefined) {\n code = currency['id'];\n if (code !== 'NIM') {\n // contains spaces\n this.checkAddress(address);\n }\n }\n return {\n 'info': depositAddress,\n 'currency': code,\n 'address': address,\n 'tag': this.safeString(depositAddress, 'memo'),\n // it's hard to retrieve the network here, the api returns the chain name, not the id\n };\n }\n async fetchDepositAddressesByNetwork(code, params = {}) {\n /**\n * @method\n * @name kucoin#fetchDepositAddressesByNetwork\n * @see https://docs.kucoin.com/#get-deposit-addresses-v2\n * @description fetch the deposit address for a currency associated with this account\n * @param {string} code unified currency code\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} an array of [address structures]{@link https://docs.ccxt.com/#/?id=address-structure}\n */\n await this.loadMarkets();\n const currency = this.currency(code);\n const request = {\n 'currency': currency['id'],\n };\n const version = this.options['versions']['private']['GET']['deposit-addresses'];\n this.options['versions']['private']['GET']['deposit-addresses'] = 'v2';\n const response = await this.privateGetDepositAddresses(this.extend(request, params));\n //\n // {\n // \"code\": \"200000\",\n // \"data\": [\n // {\n // \"address\": \"fr1qvus7d4d5fgxj5e7zvqe6yhxd7txm95h2and69r\",\n // \"memo\": \"\",\n // \"chain\": \"BTC-Segwit\",\n // \"contractAddress\": \"\"\n // },\n // {\"address\":\"37icNMEWbiF8ZkwUMxmfzMxi2A1MQ44bMn\",\"memo\":\"\",\"chain\":\"BTC\",\"contractAddress\":\"\"},\n // {\"address\":\"Deposit temporarily blocked\",\"memo\":\"\",\"chain\":\"TRC20\",\"contractAddress\":\"\"}\n // ]\n // }\n //\n this.options['versions']['private']['GET']['deposit-addresses'] = version;\n const chains = this.safeValue(response, 'data', []);\n const parsed = this.parseDepositAddresses(chains, [currency['code']], false, {\n 'currency': currency['id'],\n });\n return this.indexBy(parsed, 'network');\n }\n async fetchOrderBook(symbol, limit = undefined, params = {}) {\n /**\n * @method\n * @name kucoin#fetchOrderBook\n * @description fetches information on open orders with bid (buy) and ask (sell) prices, volumes and other data\n * @see https://www.kucoin.com/docs/rest/spot-trading/market-data/get-part-order-book-aggregated-\n * @see https://www.kucoin.com/docs/rest/spot-trading/market-data/get-full-order-book-aggregated-\n * @param {string} symbol unified symbol of the market to fetch the order book for\n * @param {int} [limit] the maximum amount of order book entries to return\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} A dictionary of [order book structures]{@link https://docs.ccxt.com/#/?id=order-book-structure} indexed by market symbols\n */\n await this.loadMarkets();\n const market = this.market(symbol);\n const level = this.safeInteger(params, 'level', 2);\n const request = { 'symbol': market['id'] };\n const isAuthenticated = this.checkRequiredCredentials(false);\n let response = undefined;\n if (!isAuthenticated || limit !== undefined) {\n if (level === 2) {\n request['level'] = level;\n if (limit !== undefined) {\n if ((limit === 20) || (limit === 100)) {\n request['limit'] = limit;\n }\n else {\n throw new InvalidParamsError('fetchOrderBook() limit argument must be 20 or 100')\n .exchange(this.id);\n }\n }\n request['limit'] = limit ? limit : 100;\n }\n response = await this.publicGetMarketOrderbookLevelLevelLimit(this.extend(request, params));\n }\n else {\n response = await this.privateGetMarketOrderbookLevel2(this.extend(request, params));\n }\n //\n // public (v1) market/orderbook/level2_20 and market/orderbook/level2_100\n //\n // {\n // \"sequence\": \"3262786978\",\n // \"time\": 1550653727731,\n // \"bids\": [\n // [\"6500.12\", \"0.45054140\"],\n // [\"6500.11\", \"0.45054140\"],\n // ],\n // \"asks\": [\n // [\"6500.16\", \"0.57753524\"],\n // [\"6500.15\", \"0.57753524\"],\n // ]\n // }\n //\n // private (v3) market/orderbook/level2\n //\n // {\n // \"sequence\": \"3262786978\",\n // \"time\": 1550653727731,\n // \"bids\": [\n // [\"6500.12\", \"0.45054140\"],\n // [\"6500.11\", \"0.45054140\"],\n // ],\n // \"asks\": [\n // [\"6500.16\", \"0.57753524\"],\n // [\"6500.15\", \"0.57753524\"],\n // ]\n // }\n //\n const data = this.safeValue(response, 'data', {});\n const timestamp = this.safeInteger(data, 'time');\n const orderbook = this.parseOrderBook(data, market['symbol'], timestamp, 'bids', 'asks', level - 2, level - 1);\n orderbook['nonce'] = this.safeInteger(data, 'sequence');\n return orderbook;\n }\n handleTriggerPrices(params) {\n const triggerPrice = this.safeValue2(params, 'triggerPrice', 'stopPrice');\n const stopLossPrice = this.safeValue(params, 'stopLossPrice');\n const takeProfitPrice = this.safeValue(params, 'takeProfitPrice');\n const isStopLoss = stopLossPrice !== undefined;\n const isTakeProfit = takeProfitPrice !== undefined;\n if ((isStopLoss && isTakeProfit) || (triggerPrice && stopLossPrice) || (triggerPrice && isTakeProfit)) {\n throw new InvalidParamsError('createOrder() - you should use either triggerPrice or stopLossPrice or takeProfitPrice')\n .exchange(this.id);\n }\n return [triggerPrice, stopLossPrice, takeProfitPrice];\n }\n async createOrder(symbol, type, side, amount, price = undefined, params = {}) {\n /**\n * @method\n * @name kucoin#createOrder\n * @description Create an order on the exchange\n * @see https://docs.kucoin.com/spot#place-a-new-order\n * @see https://docs.kucoin.com/spot#place-a-new-order-2\n * @see https://docs.kucoin.com/spot#place-a-margin-order\n * @see https://docs.kucoin.com/spot-hf/#place-hf-order\n * @see https://www.kucoin.com/docs/rest/spot-trading/orders/place-order-test\n * @see https://www.kucoin.com/docs/rest/margin-trading/orders/place-margin-order-test\n * @param {string} symbol Unified CCXT market symbol\n * @param {string} type 'limit' or 'market'\n * @param {string} side 'buy' or 'sell'\n * @param {float} amount the amount of currency to trade\n * @param {float} [price] *ignored in \"market\" orders* the price at which the order is to be fullfilled at in units of the quote currency\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {float} [params.triggerPrice] The price at which a trigger order is triggered at\n * @param {string} [params.marginMode] 'cross', // cross (cross mode) and isolated (isolated mode), set to cross by default, the isolated mode will be released soon, stay tuned\n * @param {string} [params.timeInForce] GTC, GTT, IOC, or FOK, default is GTC, limit orders only\n * @param {string} [params.postOnly] Post only flag, invalid when timeInForce is IOC or FOK\n *\n * EXCHANGE SPECIFIC PARAMETERS\n * @param {string} [params.clientOid] client order id, defaults to uuid if not passed\n * @param {string} [params.remark] remark for the order, length cannot exceed 100 utf8 characters\n * @param {string} [params.tradeType] 'TRADE', // TRADE, MARGIN_TRADE // not used with margin orders\n * limit orders ---------------------------------------------------\n * @param {float} [params.cancelAfter] long, // cancel after n seconds, requires timeInForce to be GTT\n * @param {bool} [params.hidden] false, // Order will not be displayed in the order book\n * @param {bool} [params.iceberg] false, // Only a portion of the order is displayed in the order book\n * @param {string} [params.visibleSize] this.amountToPrecision (symbol, visibleSize), // The maximum visible size of an iceberg order\n * market orders --------------------------------------------------\n * @param {string} [params.funds] // Amount of quote currency to use\n * stop orders ----------------------------------------------------\n * @param {string} [params.stop] Either loss or entry, the default is loss. Requires stopPrice to be defined\n * margin orders --------------------------------------------------\n * @param {float} [params.leverage] Leverage size of the order\n * @param {string} [params.stp] '', // self trade prevention, CN, CO, CB or DC\n * @param {bool} [params.autoBorrow] false, // The system will first borrow you funds at the optimal interest rate and then place an order for you\n * @param {bool} [params.hf] false, // true for hf order\n * @param {bool} [params.test] set to true to test an order, no order will be created but the request will be validated\n * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n await this.loadMarkets();\n const market = this.market(symbol);\n const testOrder = this.safeBool(params, 'test', false);\n params = this.omit(params, 'test');\n const isHf = this.safeBool(params, 'hf', false);\n const [triggerPrice, stopLossPrice, takeProfitPrice] = this.handleTriggerPrices(params);\n const tradeType = this.safeString(params, 'tradeType'); // keep it for backward compatibility\n const isTriggerOrder = (triggerPrice || stopLossPrice || takeProfitPrice);\n const marginResult = this.handleMarginModeAndParams('createOrder', params);\n const marginMode = this.safeString(marginResult, 0);\n const isMarginOrder = tradeType === 'MARGIN_TRADE' || marginMode !== undefined;\n // don't omit anything before calling createOrderRequest\n const orderRequest = this.createOrderRequest(symbol, type, side, amount, price, params);\n let response = undefined;\n if (testOrder) {\n if (isMarginOrder) {\n response = await this.privatePostMarginOrderTest(orderRequest);\n }\n else {\n response = await this.privatePostOrdersTest(orderRequest);\n }\n }\n else if (isHf) {\n response = await this.privatePostHfOrders(orderRequest);\n }\n else if (isTriggerOrder) {\n response = await this.privatePostStopOrder(orderRequest);\n }\n else if (isMarginOrder) {\n response = await this.privatePostMarginOrder(orderRequest);\n }\n else {\n response = await this.privatePostOrders(orderRequest);\n }\n //\n // {\n // \"code\": \"200000\",\n // \"data\": {\n // \"orderId\": \"5bd6e9286d99522a52e458de\"\n // }\n // }\n //\n const data = this.safeValue(response, 'data', {});\n return this.parseOrder(data, market);\n }\n async createMarketOrderWithCost(symbol, side, cost, params = {}) {\n /**\n * @method\n * @name kucoin#createMarketOrderWithCost\n * @description create a market order by providing the symbol, side and cost\n * @see https://www.kucoin.com/docs/rest/spot-trading/orders/place-order\n * @param {string} symbol unified symbol of the market to create an order in\n * @param {string} side 'buy' or 'sell'\n * @param {float} cost how much you want to trade in units of the quote currency\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n await this.loadMarkets();\n params['cost'] = cost;\n return await this.createOrder(symbol, 'market', side, cost, undefined, params);\n }\n async createMarketBuyOrderWithCost(symbol, cost, params = {}) {\n /**\n * @method\n * @name kucoin#createMarketBuyOrderWithCost\n * @description create a market buy order by providing the symbol and cost\n * @see https://www.kucoin.com/docs/rest/spot-trading/orders/place-order\n * @param {string} symbol unified symbol of the market to create an order in\n * @param {float} cost how much you want to trade in units of the quote currency\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n await this.loadMarkets();\n return await this.createMarketOrderWithCost(symbol, 'buy', cost, params);\n }\n async createMarketSellOrderWithCost(symbol, cost, params = {}) {\n /**\n * @method\n * @name kucoin#createMarketSellOrderWithCost\n * @description create a market sell order by providing the symbol and cost\n * @see https://www.kucoin.com/docs/rest/spot-trading/orders/place-order\n * @param {string} symbol unified symbol of the market to create an order in\n * @param {float} cost how much you want to trade in units of the quote currency\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n await this.loadMarkets();\n return await this.createMarketOrderWithCost(symbol, 'sell', cost, params);\n }\n async createOrders(orders, params = {}) {\n /**\n * @method\n * @name kucoin#createOrders\n * @description create a list of trade orders\n * @see https://www.kucoin.com/docs/rest/spot-trading/orders/place-multiple-orders\n * @see https://www.kucoin.com/docs/rest/spot-trading/spot-hf-trade-pro-account/place-multiple-hf-orders\n * @param {Array} orders list of orders to create, each object should contain the parameters required by createOrder, namely symbol, type, side, amount, price and params\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {bool} [params.hf] false, // true for hf orders\n * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n await this.loadMarkets();\n const ordersRequests = [];\n let symbol = undefined;\n for (let i = 0; i < orders.length; i++) {\n const rawOrder = orders[i];\n const marketId = this.safeString(rawOrder, 'symbol');\n if (symbol === undefined) {\n symbol = marketId;\n }\n else {\n if (symbol !== marketId) {\n throw new InvalidParamsError('createOrders() requires all orders to have the same symbol')\n .exchange(this.id);\n }\n }\n const type = this.safeString(rawOrder, 'type');\n if (type !== 'limit') {\n throw new MarketTypeNotSupportedError(type).addMessage('createOrders() only supports limit orders').exchange(this.id);\n }\n const side = this.safeString(rawOrder, 'side');\n const amount = this.safeValue(rawOrder, 'amount');\n const price = this.safeValue(rawOrder, 'price');\n const orderParams = this.safeValue(rawOrder, 'params', {});\n const orderRequest = this.createOrderRequest(marketId, type, side, amount, price, orderParams);\n ordersRequests.push(orderRequest);\n }\n const market = this.market(symbol);\n const request = {\n 'symbol': market['id'],\n 'orderList': ordersRequests,\n };\n const hf = this.safeBool(params, 'hf', false);\n params = this.omit(params, 'hf');\n let response = undefined;\n if (hf) {\n response = await this.privatePostHfOrdersMulti(this.extend(request, params));\n }\n else {\n response = await this.privatePostOrdersMulti(this.extend(request, params));\n }\n //\n // {\n // \"code\": \"200000\",\n // \"data\": {\n // \"data\": [\n // {\n // \"symbol\": \"LTC-USDT\",\n // \"type\": \"limit\",\n // \"side\": \"sell\",\n // \"price\": \"90\",\n // \"size\": \"0.1\",\n // \"funds\": null,\n // \"stp\": \"\",\n // \"stop\": \"\",\n // \"stopPrice\": null,\n // \"timeInForce\": \"GTC\",\n // \"cancelAfter\": 0,\n // \"postOnly\": false,\n // \"hidden\": false,\n // \"iceberge\": false,\n // \"iceberg\": false,\n // \"visibleSize\": null,\n // \"channel\": \"API\",\n // \"id\": \"6539148443fcf500079d15e5\",\n // \"status\": \"success\",\n // \"failMsg\": null,\n // \"clientOid\": \"5c4c5398-8ab2-4b4e-af8a-e2d90ad2488f\"\n // },\n // }\n //\n let data = this.safeValue(response, 'data', {});\n data = this.safeValue(data, 'data', []);\n return this.parseOrders(data);\n }\n createOrderRequest(symbol, type, side, amount, price = undefined, params = {}) {\n const market = this.market(symbol);\n // required param, cannot be used twice\n const clientOrderId = this.safeString2(params, 'clientOid', 'clientOrderId', this.uuid());\n params = this.omit(params, ['clientOid', 'clientOrderId']);\n const request = {\n 'clientOid': clientOrderId,\n 'side': side,\n 'symbol': market['id'],\n 'type': type, // limit or market\n };\n const quoteAmount = this.safeNumber2(params, 'cost', 'funds');\n let amountString = undefined;\n let costString = undefined;\n let marginMode = undefined;\n [marginMode, params] = this.handleMarginModeAndParams('createOrder', params);\n if (type === 'market') {\n if (quoteAmount !== undefined) {\n params = this.omit(params, ['cost', 'funds']);\n // kucoin uses base precision even for quote values\n costString = this.amountToPrecision(symbol, quoteAmount);\n request['funds'] = costString;\n }\n else {\n amountString = this.amountToPrecision(symbol, amount);\n request['size'] = this.amountToPrecision(symbol, amount);\n }\n }\n else {\n amountString = this.amountToPrecision(symbol, amount);\n request['size'] = amountString;\n request['price'] = this.priceToPrecision(symbol, price);\n }\n const tradeType = this.safeString(params, 'tradeType'); // keep it for backward compatibility\n const [triggerPrice, stopLossPrice, takeProfitPrice] = this.handleTriggerPrices(params);\n const isTriggerOrder = (triggerPrice || stopLossPrice || takeProfitPrice);\n const isMarginOrder = tradeType === 'MARGIN_TRADE' || marginMode !== undefined;\n params = this.omit(params, ['stopLossPrice', 'takeProfitPrice', 'triggerPrice', 'stopPrice']);\n if (isTriggerOrder) {\n if (triggerPrice) {\n request['stopPrice'] = this.priceToPrecision(symbol, triggerPrice);\n }\n else if (stopLossPrice || takeProfitPrice) {\n if (stopLossPrice) {\n request['stop'] = (side === 'buy') ? 'entry' : 'loss';\n request['stopPrice'] = this.priceToPrecision(symbol, stopLossPrice);\n }\n else {\n request['stop'] = (side === 'buy') ? 'loss' : 'entry';\n request['stopPrice'] = this.priceToPrecision(symbol, takeProfitPrice);\n }\n }\n if (marginMode === 'isolated') {\n throw new TradeError().addMessage('createOrder does not support isolated margin for stop orders')\n .exchange(this.id);\n }\n else if (marginMode === 'cross') {\n request['tradeType'] = this.options['marginModes'][marginMode];\n }\n }\n else if (isMarginOrder) {\n if (marginMode === 'isolated') {\n request['marginModel'] = 'isolated';\n }\n }\n let postOnly = undefined;\n [postOnly, params] = this.handlePostOnly(type === 'market', false, params);\n if (postOnly) {\n request['postOnly'] = true;\n }\n return this.extend(request, params);\n }\n async editOrder(id, symbol, type, side, amount = undefined, price = undefined, params = {}) {\n /**\n * @method\n * @name kucoin#editOrder\n * @description edit an order, kucoin currently only supports the modification of HF orders\n * @see https://docs.kucoin.com/spot-hf/#modify-order\n * @param {string} id order id\n * @param {string} symbol unified symbol of the market to create an order in\n * @param {string} type not used\n * @param {string} side not used\n * @param {float} amount how much of the currency you want to trade in units of the base currency\n * @param {float} [price] the price at which the order is to be fullfilled, in units of the base currency, ignored in market orders\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {string} [params.clientOrderId] client order id, defaults to id if not passed\n * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n await this.loadMarkets();\n const market = this.market(symbol);\n const request = {\n 'symbol': market['id'],\n };\n const clientOrderId = this.safeString2(params, 'clientOid', 'clientOrderId');\n if (clientOrderId !== undefined) {\n request['clientOid'] = clientOrderId;\n }\n else {\n request['orderId'] = id;\n }\n if (amount !== undefined) {\n request['newSize'] = this.amountToPrecision(symbol, amount);\n }\n if (price !== undefined) {\n request['newPrice'] = this.priceToPrecision(symbol, price);\n }\n const response = await this.privatePostHfOrdersAlter(this.extend(request, params));\n //\n // {\n // \"code\":\"200000\",\n // \"data\":{\n // \"newOrderId\":\"6478d7a6c883280001e92d8b\"\n // }\n // }\n //\n const data = this.safeValue(response, 'data', {});\n return this.parseOrder(data, market);\n }\n async cancelOrder(id, symbol = undefined, params = {}) {\n /**\n * @method\n * @name kucoin#cancelOrder\n * @description cancels an open order\n * @see https://docs.kucoin.com/spot#cancel-an-order\n * @see https://docs.kucoin.com/spot#cancel-an-order-2\n * @see https://docs.kucoin.com/spot#cancel-single-order-by-clientoid\n * @see https://docs.kucoin.com/spot#cancel-single-order-by-clientoid-2\n * @see https://docs.kucoin.com/spot-hf/#cancel-orders-by-orderid\n * @see https://docs.kucoin.com/spot-hf/#cancel-order-by-clientoid\n * @param {string} id order id\n * @param {string} symbol unified symbol of the market the order was made in\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {bool} [params.stop] True if cancelling a stop order\n * @param {bool} [params.hf] false, // true for hf order\n * @returns Response from the exchange\n */\n await this.loadMarkets();\n const request = {};\n const clientOrderId = this.safeString2(params, 'clientOid', 'clientOrderId');\n const stop = this.safeValue2(params, 'stop', 'trigger', false);\n const hf = this.safeBool(params, 'hf', false);\n if (hf) {\n if (symbol === undefined) {\n throw new InvalidParamsError('cancelOrder() requires a symbol parameter for hf orders')\n .exchange(this.id);\n }\n const market = this.market(symbol);\n request['symbol'] = market['id'];\n }\n let response = undefined;\n params = this.omit(params, ['clientOid', 'clientOrderId', 'stop', 'hf', 'trigger']);\n if (clientOrderId !== undefined) {\n request['clientOid'] = clientOrderId;\n if (stop) {\n response = await this.privateDeleteStopOrderCancelOrderByClientOid(this.extend(request, params));\n }\n else if (hf) {\n response = await this.privateDeleteHfOrdersClientOrderClientOid(this.extend(request, params));\n }\n else {\n response = await this.privateDeleteOrderClientOrderClientOid(this.extend(request, params));\n }\n }\n else {\n request['orderId'] = id;\n if (stop) {\n response = await this.privateDeleteStopOrderOrderId(this.extend(request, params));\n }\n else if (hf) {\n response = await this.privateDeleteHfOrdersOrderId(this.extend(request, params));\n }\n else {\n response = await this.privateDeleteOrdersOrderId(this.extend(request, params));\n }\n }\n return response;\n }\n async cancelAllOrders(symbol = undefined, params = {}) {\n /**\n * @method\n * @name kucoin#cancelAllOrders\n * @description cancel all open orders\n * @see https://docs.kucoin.com/spot#cancel-all-orders\n * @see https://docs.kucoin.com/spot#cancel-orders\n * @see https://docs.kucoin.com/spot-hf/#cancel-all-hf-orders-by-symbol\n * @param {string} symbol unified market symbol, only orders in the market of this symbol are cancelled when symbol is not undefined\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {bool} [params.stop] *invalid for isolated margin* true if cancelling all stop orders\n * @param {string} [params.marginMode] 'cross' or 'isolated'\n * @param {string} [params.orderIds] *stop orders only* Comma seperated order IDs\n * @param {bool} [params.stop] True if cancelling a stop order\n * @param {bool} [params.hf] false, // true for hf order\n * @returns Response from the exchange\n */\n await this.loadMarkets();\n const request = {};\n const stop = this.safeBool(params, 'stop', false);\n const hf = this.safeBool(params, 'hf', false);\n params = this.omit(params, ['stop', 'hf']);\n const [marginMode, query] = this.handleMarginModeAndParams('cancelAllOrders', params);\n if (symbol !== undefined) {\n request['symbol'] = this.marketId(symbol);\n }\n if (marginMode !== undefined) {\n request['tradeType'] = this.options['marginModes'][marginMode];\n if (marginMode === 'isolated' && stop) {\n throw new InvalidParamsError('cancelAllOrders does not support isolated margin for stop orders')\n .exchange(this.id);\n }\n }\n let response = undefined;\n if (stop) {\n response = await this.privateDeleteStopOrderCancel(this.extend(request, query));\n }\n else if (hf) {\n if (symbol === undefined) {\n response = await this.privateDeleteHfOrdersCancelAll(this.extend(request, query));\n }\n else {\n response = await this.privateDeleteHfOrders(this.extend(request, query));\n }\n }\n else {\n response = await this.privateDeleteOrders(this.extend(request, query));\n }\n return response;\n }\n async fetchOrdersByStatus(status, symbol = undefined, since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name kucoin#fetchOrdersByStatus\n * @description fetch a list of orders\n * @see https://docs.kucoin.com/spot#list-orders\n * @see https://docs.kucoin.com/spot#list-stop-orders\n * @see https://docs.kucoin.com/spot-hf/#obtain-list-of-active-hf-orders\n * @see https://docs.kucoin.com/spot-hf/#obtain-list-of-filled-hf-orders\n * @param {string} status *not used for stop orders* 'open' or 'closed'\n * @param {string} symbol unified market symbol\n * @param {int} [since] timestamp in ms of the earliest order\n * @param {int} [limit] max number of orders to return\n * @param {object} [params] exchange specific params\n * @param {int} [params.until] end time in ms\n * @param {bool} [params.stop] true if fetching stop orders\n * @param {string} [params.side] buy or sell\n * @param {string} [params.type] limit, market, limit_stop or market_stop\n * @param {string} [params.tradeType] TRADE for spot trading, MARGIN_TRADE for Margin Trading\n * @param {int} [params.currentPage] *stop orders only* current page\n * @param {string} [params.orderIds] *stop orders only* comma seperated order ID list\n * @param {bool} [params.stop] True if fetching a stop order\n * @param {bool} [params.hf] false, // true for hf order\n * @returns An [array of order structures]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n await this.loadMarkets();\n let lowercaseStatus = status.toLowerCase();\n const until = this.safeInteger2(params, 'until', 'till');\n const stop = this.safeBool(params, 'stop', false);\n const hf = this.safeBool(params, 'hf', false);\n params = this.omit(params, ['stop', 'hf', 'till', 'until']);\n const [marginMode, query] = this.handleMarginModeAndParams('fetchOrdersByStatus', params);\n if (lowercaseStatus === 'open') {\n lowercaseStatus = 'active';\n }\n else if (lowercaseStatus === 'closed') {\n lowercaseStatus = 'done';\n }\n const request = {\n 'status': lowercaseStatus,\n };\n let market = undefined;\n if (symbol !== undefined) {\n market = this.market(symbol);\n request['symbol'] = market['id'];\n }\n if (since !== undefined) {\n request['startAt'] = since;\n }\n if (limit !== undefined) {\n request['pageSize'] = limit;\n }\n if (until) {\n request['endAt'] = until;\n }\n request['tradeType'] = this.safeString(this.options['marginModes'], marginMode, 'TRADE');\n let response = undefined;\n if (stop) {\n response = await this.privateGetStopOrder(this.extend(request, query));\n }\n else if (hf) {\n if (lowercaseStatus === 'active') {\n response = await this.privateGetHfOrdersActive(this.extend(request, query));\n }\n else if (lowercaseStatus === 'done') {\n response = await this.privateGetHfOrdersDone(this.extend(request, query));\n }\n }\n else {\n response = await this.privateGetOrders(this.extend(request, query));\n }\n //\n // {\n // \"code\": \"200000\",\n // \"data\": {\n // \"currentPage\": 1,\n // \"pageSize\": 1,\n // \"totalNum\": 153408,\n // \"totalPage\": 153408,\n // \"items\": [\n // {\n // \"id\": \"5c35c02703aa673ceec2a168\", //orderid\n // \"symbol\": \"BTC-USDT\", //symbol\n // \"opType\": \"DEAL\", // operation type,deal is pending order,cancel is cancel order\n // \"type\": \"limit\", // order type,e.g. limit,markrt,stop_limit.\n // \"side\": \"buy\", // transaction direction,include buy and sell\n // \"price\": \"10\", // order price\n // \"size\": \"2\", // order quantity\n // \"funds\": \"0\", // order funds\n // \"dealFunds\": \"0.166\", // deal funds\n // \"dealSize\": \"2\", // deal quantity\n // \"fee\": \"0\", // fee\n // \"feeCurrency\": \"USDT\", // charge fee currency\n // \"stp\": \"\", // self trade prevention,include CN,CO,DC,CB\n // \"stop\": \"\", // stop type\n // \"stopTriggered\": false, // stop order is triggered\n // \"stopPrice\": \"0\", // stop price\n // \"timeInForce\": \"GTC\", // time InForce,include GTC,GTT,IOC,FOK\n // \"postOnly\": false, // postOnly\n // \"hidden\": false, // hidden order\n // \"iceberg\": false, // iceberg order\n // \"visibleSize\": \"0\", // display quantity for iceberg order\n // \"cancelAfter\": 0, // cancel orders time,requires timeInForce to be GTT\n // \"channel\": \"IOS\", // order source\n // \"clientOid\": \"\", // user-entered order unique mark\n // \"remark\": \"\", // remark\n // \"tags\": \"\", // tag order source\n // \"isActive\": false, // status before unfilled or uncancelled\n // \"cancelExist\": false, // order cancellation transaction record\n // \"createdAt\": 1547026471000 // time\n // },\n // ]\n // }\n // }\n const responseData = this.safeValue(response, 'data', {});\n const orders = this.safeValue(responseData, 'items', responseData);\n return this.parseOrders(orders, market, since, limit);\n }\n async fetchClosedOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name kucoin#fetchClosedOrders\n * @description fetches information on multiple closed orders made by the user\n * @see https://docs.kucoin.com/spot#list-orders\n * @see https://docs.kucoin.com/spot#list-stop-orders\n * @see https://docs.kucoin.com/spot-hf/#obtain-list-of-active-hf-orders\n * @see https://docs.kucoin.com/spot-hf/#obtain-list-of-filled-hf-orders\n * @param {string} symbol unified market symbol of the market orders were made in\n * @param {int} [since] the earliest time in ms to fetch orders for\n * @param {int} [limit] the maximum number of order structures to retrieve\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {int} [params.till] end time in ms\n * @param {string} [params.side] buy or sell\n * @param {string} [params.type] limit, market, limit_stop or market_stop\n * @param {string} [params.tradeType] TRADE for spot trading, MARGIN_TRADE for Margin Trading\n * @param {bool} [params.stop] True if fetching a stop order\n * @param {bool} [params.hf] false, // true for hf order\n * @param {boolean} [params.paginate] default false, when true will automatically paginate by calling this endpoint multiple times. See in the docs all the [availble parameters](https://github.com/ccxt/ccxt/wiki/Manual#pagination-params)\n * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n await this.loadMarkets();\n let paginate = false;\n [paginate, params] = this.handleOptionAndParams(params, 'fetchClosedOrders', 'paginate');\n if (paginate) {\n return await this.fetchPaginatedCallDynamic('fetchClosedOrders', symbol, since, limit, params);\n }\n return await this.fetchOrdersByStatus('done', symbol, since, limit, params);\n }\n async fetchOpenOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name kucoin#fetchOpenOrders\n * @description fetch all unfilled currently open orders\n * @see https://docs.kucoin.com/spot#list-orders\n * @see https://docs.kucoin.com/spot#list-stop-orders\n * @see https://docs.kucoin.com/spot-hf/#obtain-list-of-active-hf-orders\n * @see https://docs.kucoin.com/spot-hf/#obtain-list-of-filled-hf-orders\n * @param {string} symbol unified market symbol\n * @param {int} [since] the earliest time in ms to fetch open orders for\n * @param {int} [limit] the maximum number of open orders structures to retrieve\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {int} [params.till] end time in ms\n * @param {bool} [params.stop] true if fetching stop orders\n * @param {string} [params.side] buy or sell\n * @param {string} [params.type] limit, market, limit_stop or market_stop\n * @param {string} [params.tradeType] TRADE for spot trading, MARGIN_TRADE for Margin Trading\n * @param {int} [params.currentPage] *stop orders only* current page\n * @param {string} [params.orderIds] *stop orders only* comma seperated order ID list\n * @param {bool} [params.stop] True if fetching a stop order\n * @param {bool} [params.hf] false, // true for hf order\n * @param {boolean} [params.paginate] default false, when true will automatically paginate by calling this endpoint multiple times. See in the docs all the [availble parameters](https://github.com/ccxt/ccxt/wiki/Manual#pagination-params)\n * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n await this.loadMarkets();\n let paginate = false;\n [paginate, params] = this.handleOptionAndParams(params, 'fetchOpenOrders', 'paginate');\n if (paginate) {\n return await this.fetchPaginatedCallDynamic('fetchOpenOrders', symbol, since, limit, params);\n }\n return await this.fetchOrdersByStatus('active', symbol, since, limit, params);\n }\n async fetchOrder(id, symbol = undefined, params = {}) {\n /**\n * @method\n * @name kucoin#fetchOrder\n * @description fetch an order\n * @see https://docs.kucoin.com/spot#get-an-order\n * @see https://docs.kucoin.com/spot#get-single-active-order-by-clientoid\n * @see https://docs.kucoin.com/spot#get-single-order-info\n * @see https://docs.kucoin.com/spot#get-single-order-by-clientoid\n * @see https://docs.kucoin.com/spot-hf/#details-of-a-single-hf-order\n * @see https://docs.kucoin.com/spot-hf/#obtain-details-of-a-single-hf-order-using-clientoid\n * @param {string} id Order id\n * @param {string} symbol not sent to exchange except for stop orders with clientOid, but used internally by CCXT to filter\n * @param {object} [params] exchange specific parameters\n * @param {bool} [params.stop] true if fetching a stop order\n * @param {bool} [params.hf] false, // true for hf order\n * @param {bool} [params.clientOid] unique order id created by users to identify their orders\n * @returns An [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n await this.loadMarkets();\n const request = {};\n const clientOrderId = this.safeString2(params, 'clientOid', 'clientOrderId');\n const stop = this.safeBool(params, 'stop', false);\n const hf = this.safeBool(params, 'hf', false);\n let market = undefined;\n if (symbol !== undefined) {\n market = this.market(symbol);\n }\n if (hf) {\n if (symbol === undefined) {\n throw new InvalidParamsError('fetchOrder() requires a symbol parameter for hf orders')\n .exchange(this.id);\n }\n request['symbol'] = market['id'];\n }\n params = this.omit(params, ['stop', 'hf', 'clientOid', 'clientOrderId']);\n let response = undefined;\n if (clientOrderId !== undefined) {\n request['clientOid'] = clientOrderId;\n if (stop) {\n if (symbol !== undefined) {\n request['symbol'] = market['id'];\n }\n response = await this.privateGetStopOrderQueryOrderByClientOid(this.extend(request, params));\n }\n else if (hf) {\n response = await this.privateGetHfOrdersClientOrderClientOid(this.extend(request, params));\n }\n else {\n response = await this.privateGetOrderClientOrderClientOid(this.extend(request, params));\n }\n }\n else {\n // a special case for undefined ids\n // otherwise a wrong endpoint for all orders will be triggered\n // https://github.com/ccxt/ccxt/issues/7234\n if (id === undefined) {\n throw new InvalidParamsError('fetchOrder() requires an order id')\n .exchange(this.id);\n }\n request['orderId'] = id;\n if (stop) {\n response = await this.privateGetStopOrderOrderId(this.extend(request, params));\n }\n else if (hf) {\n response = await this.privateGetHfOrdersOrderId(this.extend(request, params));\n }\n else {\n response = await this.privateGetOrdersOrderId(this.extend(request, params));\n }\n }\n let responseData = this.safeValue(response, 'data', {});\n if (Array.isArray(responseData)) {\n responseData = this.safeValue(responseData, 0);\n }\n return this.parseOrder(responseData, market);\n }\n parseOrder(order, market = undefined) {\n //\n // createOrder\n //\n // {\n // \"orderId\": \"63c97e47d686c5000159a656\"\n // }\n //\n // cancelOrder\n //\n // {\n // \"cancelledOrderIds\": [ \"63c97e47d686c5000159a656\" ]\n // }\n //\n // fetchOpenOrders, fetchClosedOrders\n //\n // {\n // \"id\": \"63c97ce8d686c500015793bb\",\n // \"symbol\": \"USDC-USDT\",\n // \"opType\": \"DEAL\",\n // \"type\": \"limit\",\n // \"side\": \"sell\",\n // \"price\": \"1.05\",\n // \"size\": \"1\",\n // \"funds\": \"0\",\n // \"dealFunds\": \"0\",\n // \"dealSize\": \"0\",\n // \"fee\": \"0\",\n // \"feeCurrency\": \"USDT\",\n // \"stp\": \"\",\n // \"stop\": \"\",\n // \"stopTriggered\": false,\n // \"stopPrice\": \"0\",\n // \"timeInForce\": \"GTC\",\n // \"postOnly\": false,\n // \"hidden\": false,\n // \"iceberg\": false,\n // \"visibleSize\": \"0\",\n // \"cancelAfter\": 0,\n // \"channel\": \"API\",\n // \"clientOid\": \"d602d73f-5424-4751-bef0-8debce8f0a82\",\n // \"remark\": null,\n // \"tags\": \"partner:ccxt\",\n // \"isActive\": true,\n // \"cancelExist\": false,\n // \"createdAt\": 1674149096927,\n // \"tradeType\": \"TRADE\"\n // }\n //\n // stop orders (fetchOpenOrders, fetchClosedOrders)\n //\n // {\n // \"id\": \"vs9f6ou9e864rgq8000t4qnm\",\n // \"symbol\": \"USDC-USDT\",\n // \"userId\": \"613a896885d8660006151f01\",\n // \"status\": \"NEW\",\n // \"type\": \"market\",\n // \"side\": \"sell\",\n // \"price\": null,\n // \"size\": \"1.00000000000000000000\",\n // \"funds\": null,\n // \"stp\": null,\n // \"timeInForce\": \"GTC\",\n // \"cancelAfter\": -1,\n // \"postOnly\": false,\n // \"hidden\": false,\n // \"iceberg\": false,\n // \"visibleSize\": null,\n // \"channel\": \"API\",\n // \"clientOid\": \"5d3fd727-6456-438d-9550-40d9d85eee0b\",\n // \"remark\": null,\n // \"tags\": \"partner:ccxt\",\n // \"relatedNo\": null,\n // \"orderTime\": 1674146316994000028,\n // \"domainId\": \"kucoin\",\n // \"tradeSource\": \"USER\",\n // \"tradeType\": \"MARGIN_TRADE\",\n // \"feeCurrency\": \"USDT\",\n // \"takerFeeRate\": \"0.00100000000000000000\",\n // \"makerFeeRate\": \"0.00100000000000000000\",\n // \"createdAt\": 1674146316994,\n // \"stop\": \"loss\",\n // \"stopTriggerTime\": null,\n // \"stopPrice\": \"0.97000000000000000000\"\n // }\n // hf order\n // {\n // \"id\":\"6478cf1439bdfc0001528a1d\",\n // \"symbol\":\"LTC-USDT\",\n // \"opType\":\"DEAL\",\n // \"type\":\"limit\",\n // \"side\":\"buy\",\n // \"price\":\"50\",\n // \"size\":\"0.1\",\n // \"funds\":\"5\",\n // \"dealSize\":\"0\",\n // \"dealFunds\":\"0\",\n // \"fee\":\"0\",\n // \"feeCurrency\":\"USDT\",\n // \"stp\":null,\n // \"timeInForce\":\"GTC\",\n // \"postOnly\":false,\n // \"hidden\":false,\n // \"iceberg\":false,\n // \"visibleSize\":\"0\",\n // \"cancelAfter\":0,\n // \"channel\":\"API\",\n // \"clientOid\":\"d4d2016b-8e3a-445c-aa5d-dc6df5d1678d\",\n // \"remark\":null,\n // \"tags\":\"partner:ccxt\",\n // \"cancelExist\":false,\n // \"createdAt\":1685638932074,\n // \"lastUpdatedAt\":1685639013735,\n // \"tradeType\":\"TRADE\",\n // \"inOrderBook\":true,\n // \"cancelledSize\":\"0\",\n // \"cancelledFunds\":\"0\",\n // \"remainSize\":\"0.1\",\n // \"remainFunds\":\"5\",\n // \"active\":true\n // }\n //\n const marketId = this.safeString(order, 'symbol');\n const timestamp = this.safeInteger(order, 'createdAt');\n const feeCurrencyId = this.safeString(order, 'feeCurrency');\n const cancelExist = this.safeBool(order, 'cancelExist', false);\n const responseStop = this.safeString(order, 'stop');\n const stop = responseStop !== undefined;\n const stopTriggered = this.safeBool(order, 'stopTriggered', false);\n const isActive = this.safeValue2(order, 'isActive', 'active');\n const responseStatus = this.safeString(order, 'status');\n let status = undefined;\n if (isActive !== undefined) {\n if (isActive === true) {\n status = 'open';\n }\n else {\n status = 'closed';\n }\n }\n if (stop) {\n if (responseStatus === 'NEW') {\n status = 'open';\n }\n else if (!isActive && !stopTriggered) {\n status = 'cancelled';\n }\n }\n if (cancelExist) {\n status = 'canceled';\n }\n if (responseStatus === 'fail') {\n status = 'rejected';\n }\n const stopPrice = this.safeNumber(order, 'stopPrice');\n return this.safeOrder({\n 'info': order,\n 'id': this.safeStringN(order, ['id', 'orderId', 'newOrderId']),\n 'clientOrderId': this.safeString(order, 'clientOid'),\n 'symbol': this.safeSymbol(marketId, market, '-'),\n 'type': this.safeString(order, 'type'),\n 'timeInForce': this.safeString(order, 'timeInForce'),\n 'postOnly': this.safeValue(order, 'postOnly'),\n 'side': this.safeString(order, 'side'),\n 'amount': this.safeString(order, 'size'),\n 'price': this.safeString(order, 'price'),\n 'stopPrice': stopPrice,\n 'triggerPrice': stopPrice,\n 'cost': this.safeString(order, 'dealFunds'),\n 'filled': this.safeString(order, 'dealSize'),\n 'remaining': undefined,\n 'timestamp': timestamp,\n 'datetime': this.iso8601(timestamp),\n 'fee': {\n 'currency': this.safeCurrencyCode(feeCurrencyId),\n 'cost': this.safeNumber(order, 'fee'),\n },\n 'status': status,\n 'lastTradeTimestamp': undefined,\n 'average': undefined,\n 'trades': undefined,\n }, market);\n }\n async fetchOrderTrades(id, symbol = undefined, since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name kucoin#fetchOrderTrades\n * @description fetch all the trades made from a single order\n * @see https://docs.kucoin.com/#list-fills\n * @see https://docs.kucoin.com/spot-hf/#transaction-details\n * @param {string} id order id\n * @param {string} symbol unified market symbol\n * @param {int} [since] the earliest time in ms to fetch trades for\n * @param {int} [limit] the maximum number of trades to retrieve\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=trade-structure}\n */\n const request = {\n 'orderId': id,\n };\n return await this.fetchMyTrades(symbol, since, limit, this.extend(request, params));\n }\n async fetchMyTrades(symbol = undefined, since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name kucoin#fetchMyTrades\n * @see https://docs.kucoin.com/#list-fills\n * @see https://docs.kucoin.com/spot-hf/#transaction-details\n * @description fetch all trades made by the user\n * @param {string} symbol unified market symbol\n * @param {int} [since] the earliest time in ms to fetch trades for\n * @param {int} [limit] the maximum number of trades structures to retrieve\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {int} [params.until] the latest time in ms to fetch entries for\n * @param {bool} [params.hf] false, // true for hf order\n * @param {boolean} [params.paginate] default false, when true will automatically paginate by calling this endpoint multiple times. See in the docs all the [availble parameters](https://github.com/ccxt/ccxt/wiki/Manual#pagination-params)\n * @returns {Trade[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=trade-structure}\n */\n await this.loadMarkets();\n let paginate = false;\n [paginate, params] = this.handleOptionAndParams(params, 'fetchMyTrades', 'paginate');\n if (paginate) {\n return await this.fetchPaginatedCallDynamic('fetchMyTrades', symbol, since, limit, params);\n }\n let request = {};\n const hf = this.safeBool(params, 'hf', false);\n if (hf && symbol === undefined) {\n throw new InvalidParamsError('fetchMyTrades() requires a symbol parameter for hf orders')\n .exchange(this.id);\n }\n let market = undefined;\n if (symbol !== undefined) {\n market = this.market(symbol);\n request['symbol'] = market['id'];\n }\n if (limit !== undefined) {\n request['pageSize'] = limit;\n }\n const method = this.options['fetchMyTradesMethod'];\n let parseResponseData = false;\n let response = undefined;\n [request, params] = this.handleUntilOption('endAt', request, params);\n if (hf) {\n response = await this.privateGetHfFills(this.extend(request, params));\n }\n else if (method === 'private_get_fills') {\n // does not return trades earlier than 2019-02-18T00:00:00Z\n if (since !== undefined) {\n // only returns trades up to one week after the since param\n request['startAt'] = since;\n }\n response = await this.privateGetFills(this.extend(request, params));\n }\n else if (method === 'private_get_limit_fills') {\n // does not return trades earlier than 2019-02-18T00:00:00Z\n // takes no params\n // only returns first 1000 trades (not only \"in the last 24 hours\" as stated in the docs)\n parseResponseData = true;\n response = await this.privateGetLimitFills(this.extend(request, params));\n }\n else {\n throw new ExchangeNotAllowedMethodError('fetchMyTradesMethod() invalid method').exchange(this.id);\n }\n //\n // {\n // \"currentPage\": 1,\n // \"pageSize\": 50,\n // \"totalNum\": 1,\n // \"totalPage\": 1,\n // \"items\": [\n // {\n // \"symbol\":\"BTC-USDT\", // symbol\n // \"tradeId\":\"5c35c02709e4f67d5266954e\", // trade id\n // \"orderId\":\"5c35c02703aa673ceec2a168\", // order id\n // \"counterOrderId\":\"5c1ab46003aa676e487fa8e3\", // counter order id\n // \"side\":\"buy\", // transaction direction,include buy and sell\n // \"liquidity\":\"taker\", // include taker and maker\n // \"forceTaker\":true, // forced to become taker\n // \"price\":\"0.083\", // order price\n // \"size\":\"0.8424304\", // order quantity\n // \"funds\":\"0.0699217232\", // order funds\n // \"fee\":\"0\", // fee\n // \"feeRate\":\"0\", // fee rate\n // \"feeCurrency\":\"USDT\", // charge fee currency\n // \"stop\":\"\", // stop type\n // \"type\":\"limit\", // order type, e.g. limit, market, stop_limit.\n // \"createdAt\":1547026472000 // time\n // },\n // //------------------------------------------------------\n // // v1 (historical) trade response structure\n // {\n // \"symbol\": \"SNOV-ETH\",\n // \"dealPrice\": \"0.0000246\",\n // \"dealValue\": \"0.018942\",\n // \"amount\": \"770\",\n // \"fee\": \"0.00001137\",\n // \"side\": \"sell\",\n // \"createdAt\": 1540080199\n // \"id\":\"5c4d389e4c8c60413f78e2e5\",\n // }\n // ]\n // }\n //\n const data = this.safeValue(response, 'data', {});\n let trades = undefined;\n if (parseResponseData) {\n trades = data;\n }\n else {\n trades = this.safeValue(data, 'items', []);\n }\n return this.parseTrades(trades, market, since, limit);\n }\n async fetchTrades(symbol, since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name kucoin#fetchTrades\n * @description get the list of most recent trades for a particular symbol\n * @see https://docs.kucoin.com/#get-trade-histories\n * @param {string} symbol unified symbol of the market to fetch trades for\n * @param {int} [since] timestamp in ms of the earliest trade to fetch\n * @param {int} [limit] the maximum amount of trades to fetch\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {Trade[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=public-trades}\n */\n await this.loadMarkets();\n const market = this.market(symbol);\n const request = {\n 'symbol': market['id'],\n };\n // pagination is not supported on the exchange side anymore\n // if (since !== undefined) {\n // request['startAt'] = Math.floor (since / 1000);\n // }\n // if (limit !== undefined) {\n // request['pageSize'] = limit;\n // }\n const response = await this.publicGetMarketHistories(this.extend(request, params));\n //\n // {\n // \"code\": \"200000\",\n // \"data\": [\n // {\n // \"sequence\": \"1548764654235\",\n // \"side\": \"sell\",\n // \"size\":\"0.6841354\",\n // \"price\":\"0.03202\",\n // \"time\":1548848575203567174\n // }\n // ]\n // }\n //\n const trades = this.safeValue(response, 'data', []);\n return this.parseTrades(trades, market, since, limit);\n }\n parseTrade(trade, market = undefined) {\n //\n // fetchTrades (public)\n //\n // {\n // \"sequence\": \"1548764654235\",\n // \"side\": \"sell\",\n // \"size\":\"0.6841354\",\n // \"price\":\"0.03202\",\n // \"time\":1548848575203567174\n // }\n //\n // {\n // \"sequence\": \"1568787654360\",\n // \"symbol\": \"BTC-USDT\",\n // \"side\": \"buy\",\n // \"size\": \"0.00536577\",\n // \"price\": \"9345\",\n // \"takerOrderId\": \"5e356c4a9f1a790008f8d921\",\n // \"time\": \"1580559434436443257\",\n // \"type\": \"match\",\n // \"makerOrderId\": \"5e356bffedf0010008fa5d7f\",\n // \"tradeId\": \"5e356c4aeefabd62c62a1ece\"\n // }\n //\n // fetchMyTrades (private) v2\n //\n // {\n // \"symbol\":\"BTC-USDT\",\n // \"tradeId\":\"5c35c02709e4f67d5266954e\",\n // \"orderId\":\"5c35c02703aa673ceec2a168\",\n // \"counterOrderId\":\"5c1ab46003aa676e487fa8e3\",\n // \"side\":\"buy\",\n // \"liquidity\":\"taker\",\n // \"forceTaker\":true,\n // \"price\":\"0.083\",\n // \"size\":\"0.8424304\",\n // \"funds\":\"0.0699217232\",\n // \"fee\":\"0\",\n // \"feeRate\":\"0\",\n // \"feeCurrency\":\"USDT\",\n // \"stop\":\"\",\n // \"type\":\"limit\",\n // \"createdAt\":1547026472000\n // }\n //\n // fetchMyTrades v2 alternative format since 2019-05-21 https://github.com/ccxt/ccxt/pull/5162\n //\n // {\n // \"symbol\": \"OPEN-BTC\",\n // \"forceTaker\": false,\n // \"orderId\": \"5ce36420054b4663b1fff2c9\",\n // \"fee\": \"0\",\n // \"feeCurrency\": \"\",\n // \"type\": \"\",\n // \"feeRate\": \"0\",\n // \"createdAt\": 1558417615000,\n // \"size\": \"12.8206\",\n // \"stop\": \"\",\n // \"price\": \"0\",\n // \"funds\": \"0\",\n // \"tradeId\": \"5ce390cf6e0db23b861c6e80\"\n // }\n //\n // fetchMyTrades (private) v1 (historical)\n //\n // {\n // \"symbol\": \"SNOV-ETH\",\n // \"dealPrice\": \"0.0000246\",\n // \"dealValue\": \"0.018942\",\n // \"amount\": \"770\",\n // \"fee\": \"0.00001137\",\n // \"side\": \"sell\",\n // \"createdAt\": 1540080199\n // \"id\":\"5c4d389e4c8c60413f78e2e5\",\n // }\n //\n const marketId = this.safeString(trade, 'symbol');\n market = this.safeMarket(marketId, market, '-');\n const id = this.safeString2(trade, 'tradeId', 'id');\n const orderId = this.safeString(trade, 'orderId');\n const takerOrMaker = this.safeString(trade, 'liquidity');\n let timestamp = this.safeInteger(trade, 'time');\n if (timestamp !== undefined) {\n timestamp = this.parseToInt(timestamp / 1000000);\n }\n else {\n timestamp = this.safeInteger(trade, 'createdAt');\n // if it's a historical v1 trade, the exchange returns timestamp in seconds\n if (('dealValue' in trade) && (timestamp !== undefined)) {\n timestamp = timestamp * 1000;\n }\n }\n const priceString = this.safeString2(trade, 'price', 'dealPrice');\n const amountString = this.safeString2(trade, 'size', 'amount');\n const side = this.safeString(trade, 'side');\n let fee = undefined;\n const feeCostString = this.safeString(trade, 'fee');\n if (feeCostString !== undefined) {\n const feeCurrencyId = this.safeString(trade, 'feeCurrency');\n let feeCurrency = this.safeCurrencyCode(feeCurrencyId);\n if (feeCurrency === undefined) {\n feeCurrency = (side === 'sell') ? market['quote'] : market['base'];\n }\n fee = {\n 'cost': feeCostString,\n 'currency': feeCurrency,\n 'rate': this.safeString(trade, 'feeRate'),\n };\n }\n let type = this.safeString(trade, 'type');\n if (type === 'match') {\n type = undefined;\n }\n const costString = this.safeString2(trade, 'funds', 'dealValue');\n return this.safeTrade({\n 'info': trade,\n 'id': id,\n 'order': orderId,\n 'timestamp': timestamp,\n 'datetime': this.iso8601(timestamp),\n 'symbol': market['symbol'],\n 'type': type,\n 'takerOrMaker': takerOrMaker,\n 'side': side,\n 'price': priceString,\n 'amount': amountString,\n 'cost': costString,\n 'fee': fee,\n }, market);\n }\n async fetchTradingFee(symbol, params = {}) {\n /**\n * @method\n * @name kucoin#fetchTradingFee\n * @description fetch the trading fees for a market\n * @see https://docs.kucoin.com/#actual-fee-rate-of-the-trading-pair\n * @param {string} symbol unified market symbol\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} a [fee structure]{@link https://docs.ccxt.com/#/?id=fee-structure}\n */\n await this.loadMarkets();\n const market = this.market(symbol);\n const request = {\n 'symbols': market['id'],\n };\n const response = await this.privateGetTradeFees(this.extend(request, params));\n //\n // {\n // \"code\": \"200000\",\n // \"data\": [\n // {\n // \"symbol\": \"BTC-USDT\",\n // \"takerFeeRate\": \"0.001\",\n // \"makerFeeRate\": \"0.001\"\n // }\n // ]\n // }\n //\n const data = this.safeValue(response, 'data', []);\n const first = this.safeValue(data, 0);\n const marketId = this.safeString(first, 'symbol');\n return {\n 'info': response,\n 'symbol': this.safeSymbol(marketId, market),\n 'maker': this.safeNumber(first, 'makerFeeRate'),\n 'taker': this.safeNumber(first, 'takerFeeRate'),\n 'percentage': true,\n 'tierBased': true,\n };\n }\n async withdraw(code, amount, address, tag = undefined, params = {}) {\n /**\n * @method\n * @name kucoin#withdraw\n * @description make a withdrawal\n * @see https://docs.kucoin.com/#apply-withdraw-2\n * @param {string} code unified currency code\n * @param {float} amount the amount to withdraw\n * @param {string} address the address to withdraw to\n * @param {string} tag\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} a [transaction structure]{@link https://docs.ccxt.com/#/?id=transaction-structure}\n */\n [tag, params] = this.handleWithdrawTagAndParams(tag, params);\n await this.loadMarkets();\n this.checkAddress(address);\n const currency = this.currency(code);\n const network = this.safeString(params, 'network');\n const truncatedAmount = this.currencyToPrecision(code, amount, network);\n const request = {\n 'currency': currency['id'],\n 'address': address,\n 'amount': truncatedAmount,\n // 'memo': tag,\n // 'isInner': false, // internal transfer or external withdrawal\n // 'remark': 'optional',\n // 'chain': 'OMNI', // 'ERC20', 'TRC20', default is ERC20, This only apply for multi-chain currency, and there is no need for single chain currency.\n };\n if (tag !== undefined) {\n request['memo'] = tag;\n }\n let networkCode = undefined;\n [networkCode, params] = this.handleNetworkCodeAndParams(params);\n if (networkCode !== undefined) {\n request['chain'] = this.networkCodeToId(networkCode).toLowerCase();\n }\n let includeFee = undefined;\n [includeFee, params] = this.handleOptionAndParams(params, 'withdraw', 'includeFee', false);\n if (includeFee) {\n request['feeDeductType'] = 'INTERNAL';\n }\n const response = await this.privatePostWithdrawals(this.extend(request, params));\n //\n // https://github.com/ccxt/ccxt/issues/5558\n //\n // {\n // \"code\": 200000,\n // \"data\": {\n // \"withdrawalId\": \"5bffb63303aa675e8bbe18f9\"\n // }\n // }\n //\n const data = this.safeValue(response, 'data', {});\n return this.parseTransaction(data, currency);\n }\n parseTransactionStatus(status) {\n const statuses = {\n 'SUCCESS': 'ok',\n 'PROCESSING': 'pending',\n 'WALLET_PROCESSING': 'pending',\n 'FAILURE': 'failed',\n };\n return this.safeString(statuses, status, status);\n }\n parseTransaction(transaction, currency = undefined) {\n //\n // fetchDeposits\n //\n // {\n // \"address\": \"0x5f047b29041bcfdbf0e4478cdfa753a336ba6989\",\n // \"memo\": \"5c247c8a03aa677cea2a251d\",\n // \"amount\": 1,\n // \"fee\": 0.0001,\n // \"currency\": \"KCS\",\n // \"chain\": \"\",\n // \"isInner\": false,\n // \"walletTxId\": \"5bbb57386d99522d9f954c5a@test004\",\n // \"status\": \"SUCCESS\",\n // \"createdAt\": 1544178843000,\n // \"updatedAt\": 1544178891000\n // \"remark\":\"foobar\"\n // }\n //\n // fetchWithdrawals\n //\n // {\n // \"id\": \"5c2dc64e03aa675aa263f1ac\",\n // \"address\": \"0x5bedb060b8eb8d823e2414d82acce78d38be7fe9\",\n // \"memo\": \"\",\n // \"currency\": \"ETH\",\n // \"chain\": \"\",\n // \"amount\": 1.0000000,\n // \"fee\": 0.0100000,\n // \"walletTxId\": \"3e2414d82acce78d38be7fe9\",\n // \"isInner\": false,\n // \"status\": \"FAILURE\",\n // \"createdAt\": 1546503758000,\n // \"updatedAt\": 1546504603000\n // \"remark\":\"foobar\"\n // }\n //\n // withdraw\n //\n // {\n // \"withdrawalId\": \"5bffb63303aa675e8bbe18f9\"\n // }\n //\n const currencyId = this.safeString(transaction, 'currency');\n const code = this.safeCurrencyCode(currencyId, currency);\n let address = this.safeString(transaction, 'address');\n const amount = this.safeString(transaction, 'amount');\n let txid = this.safeString(transaction, 'walletTxId');\n if (txid !== undefined) {\n const txidParts = txid.split('@');\n const numTxidParts = txidParts.length;\n if (numTxidParts > 1) {\n if (address === undefined) {\n if (txidParts[1].length > 1) {\n address = txidParts[1];\n }\n }\n }\n txid = txidParts[0];\n }\n let type = (txid === undefined) ? 'withdrawal' : 'deposit';\n const rawStatus = this.safeString(transaction, 'status');\n let fee = undefined;\n const feeCost = this.safeString(transaction, 'fee');\n if (feeCost !== undefined) {\n let rate = undefined;\n if (amount !== undefined) {\n rate = Precise.stringDiv(feeCost, amount);\n }\n fee = {\n 'cost': this.parseNumber(feeCost),\n 'rate': this.parseNumber(rate),\n 'currency': code,\n };\n }\n let timestamp = this.safeInteger2(transaction, 'createdAt', 'createAt');\n let updated = this.safeInteger(transaction, 'updatedAt');\n const isV1 = !('createdAt' in transaction);\n // if it's a v1 structure\n if (isV1) {\n type = ('address' in transaction) ? 'withdrawal' : 'deposit';\n if (timestamp !== undefined) {\n timestamp = timestamp * 1000;\n }\n if (updated !== undefined) {\n updated = updated * 1000;\n }\n }\n const internal = this.safeValue(transaction, 'isInner');\n const tag = this.safeString(transaction, 'memo');\n return {\n 'info': transaction,\n 'id': this.safeString2(transaction, 'id', 'withdrawalId'),\n 'timestamp': timestamp,\n 'datetime': this.iso8601(timestamp),\n 'network': this.networkIdToCode(this.safeString(transaction, 'chain')),\n 'address': address,\n 'addressTo': address,\n 'addressFrom': undefined,\n 'tag': tag,\n 'tagTo': tag,\n 'tagFrom': undefined,\n 'currency': code,\n 'amount': this.parseNumber(amount),\n 'txid': txid,\n 'type': type,\n 'status': this.parseTransactionStatus(rawStatus),\n 'comment': this.safeString(transaction, 'remark'),\n 'internal': internal,\n 'fee': fee,\n 'updated': updated,\n };\n }\n async fetchDeposits(code = undefined, since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name kucoin#fetchDeposits\n * @description fetch all deposits made to an account\n * @see https://docs.kucoin.com/#get-deposit-list\n * @see https://docs.kucoin.com/#get-v1-historical-deposits-list\n * @param {string} code unified currency code\n * @param {int} [since] the earliest time in ms to fetch deposits for\n * @param {int} [limit] the maximum number of deposits structures to retrieve\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {int} [params.until] the latest time in ms to fetch entries for\n * @param {boolean} [params.paginate] default false, when true will automatically paginate by calling this endpoint multiple times. See in the docs all the [availble parameters](https://github.com/ccxt/ccxt/wiki/Manual#pagination-params)\n * @returns {object[]} a list of [transaction structures]{@link https://docs.ccxt.com/#/?id=transaction-structure}\n */\n await this.loadMarkets();\n let paginate = false;\n [paginate, params] = this.handleOptionAndParams(params, 'fetchDeposits', 'paginate');\n if (paginate) {\n return await this.fetchPaginatedCallDynamic('fetchDeposits', code, since, limit, params);\n }\n let request = {};\n let currency = undefined;\n if (code !== undefined) {\n currency = this.currency(code);\n request['currency'] = currency['id'];\n }\n if (limit !== undefined) {\n request['pageSize'] = limit;\n }\n [request, params] = this.handleUntilOption('endAt', request, params);\n let response = undefined;\n if (since !== undefined && since < 1550448000000) {\n // if since is earlier than 2019-02-18T00:00:00Z\n request['startAt'] = this.parseToInt(since / 1000);\n response = await this.privateGetHistDeposits(this.extend(request, params));\n }\n else {\n if (since !== undefined) {\n request['startAt'] = since;\n }\n response = await this.privateGetDeposits(this.extend(request, params));\n }\n //\n // {\n // \"code\": \"200000\",\n // \"data\": {\n // \"currentPage\": 1,\n // \"pageSize\": 5,\n // \"totalNum\": 2,\n // \"totalPage\": 1,\n // \"items\": [\n // //--------------------------------------------------\n // // version 2 deposit response structure\n // {\n // \"address\": \"0x5f047b29041bcfdbf0e4478cdfa753a336ba6989\",\n // \"memo\": \"5c247c8a03aa677cea2a251d\",\n // \"amount\": 1,\n // \"fee\": 0.0001,\n // \"currency\": \"KCS\",\n // \"isInner\": false,\n // \"walletTxId\": \"5bbb57386d99522d9f954c5a@test004\",\n // \"status\": \"SUCCESS\",\n // \"createdAt\": 1544178843000,\n // \"updatedAt\": 1544178891000\n // \"remark\":\"foobar\"\n // },\n // //--------------------------------------------------\n // // version 1 (historical) deposit response structure\n // {\n // \"currency\": \"BTC\",\n // \"createAt\": 1528536998,\n // \"amount\": \"0.03266638\",\n // \"walletTxId\": \"55c643bc2c68d6f17266383ac1be9e454038864b929ae7cee0bc408cc5c869e8@12ffGWmMMD1zA1WbFm7Ho3JZ1w6NYXjpFk@234\",\n // \"isInner\": false,\n // \"status\": \"SUCCESS\",\n // }\n // ]\n // }\n // }\n //\n const responseData = response['data']['items'];\n return this.parseTransactions(responseData, currency, since, limit, { 'type': 'deposit' });\n }\n async fetchWithdrawals(code = undefined, since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name kucoin#fetchWithdrawals\n * @description fetch all withdrawals made from an account\n * @see https://docs.kucoin.com/#get-withdrawals-list\n * @see https://docs.kucoin.com/#get-v1-historical-withdrawals-list\n * @param {string} code unified currency code\n * @param {int} [since] the earliest time in ms to fetch withdrawals for\n * @param {int} [limit] the maximum number of withdrawals structures to retrieve\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {int} [params.until] the latest time in ms to fetch entries for\n * @param {boolean} [params.paginate] default false, when true will automatically paginate by calling this endpoint multiple times. See in the docs all the [availble parameters](https://github.com/ccxt/ccxt/wiki/Manual#pagination-params)\n * @returns {object[]} a list of [transaction structures]{@link https://docs.ccxt.com/#/?id=transaction-structure}\n */\n await this.loadMarkets();\n let paginate = false;\n [paginate, params] = this.handleOptionAndParams(params, 'fetchWithdrawals', 'paginate');\n if (paginate) {\n return await this.fetchPaginatedCallDynamic('fetchWithdrawals', code, since, limit, params);\n }\n let request = {};\n let currency = undefined;\n if (code !== undefined) {\n currency = this.currency(code);\n request['currency'] = currency['id'];\n }\n if (limit !== undefined) {\n request['pageSize'] = limit;\n }\n [request, params] = this.handleUntilOption('endAt', request, params);\n let response = undefined;\n if (since !== undefined && since < 1550448000000) {\n // if since is earlier than 2019-02-18T00:00:00Z\n request['startAt'] = this.parseToInt(since / 1000);\n response = await this.privateGetHistWithdrawals(this.extend(request, params));\n }\n else {\n if (since !== undefined) {\n request['startAt'] = since;\n }\n response = await this.privateGetWithdrawals(this.extend(request, params));\n }\n //\n // {\n // \"code\": \"200000\",\n // \"data\": {\n // \"currentPage\": 1,\n // \"pageSize\": 5,\n // \"totalNum\": 2,\n // \"totalPage\": 1,\n // \"items\": [\n // //--------------------------------------------------\n // // version 2 withdrawal response structure\n // {\n // \"id\": \"5c2dc64e03aa675aa263f1ac\",\n // \"address\": \"0x5bedb060b8eb8d823e2414d82acce78d38be7fe9\",\n // \"memo\": \"\",\n // \"currency\": \"ETH\",\n // \"amount\": 1.0000000,\n // \"fee\": 0.0100000,\n // \"walletTxId\": \"3e2414d82acce78d38be7fe9\",\n // \"isInner\": false,\n // \"status\": \"FAILURE\",\n // \"createdAt\": 1546503758000,\n // \"updatedAt\": 1546504603000\n // },\n // //--------------------------------------------------\n // // version 1 (historical) withdrawal response structure\n // {\n // \"currency\": \"BTC\",\n // \"createAt\": 1526723468,\n // \"amount\": \"0.534\",\n // \"address\": \"33xW37ZSW4tQvg443Pc7NLCAs167Yc2XUV\",\n // \"walletTxId\": \"aeacea864c020acf58e51606169240e96774838dcd4f7ce48acf38e3651323f4\",\n // \"isInner\": false,\n // \"status\": \"SUCCESS\"\n // }\n // ]\n // }\n // }\n //\n const responseData = response['data']['items'];\n return this.parseTransactions(responseData, currency, since, limit, { 'type': 'withdrawal' });\n }\n parseBalanceHelper(entry) {\n const account = this.account();\n account['used'] = this.safeString(entry, 'holdBalance', this.safeString(entry, 'hold'));\n account['free'] = this.safeString(entry, 'availableBalance', this.safeString(entry, 'available'));\n account['total'] = this.safeString(entry, 'totalBalance', this.safeString(entry, 'total'));\n const debt = this.safeString(entry, 'liability');\n const interest = this.safeString(entry, 'interest');\n account['debt'] = Precise.stringAdd(debt, interest);\n return account;\n }\n async fetchBalance(params = {}) {\n /**\n * @method\n * @name kucoin#fetchBalance\n * @description query for balance and get the amount of funds available for trading or funds locked in orders\n * @see https://docs.kucoin.com/#list-accounts\n * @see https://www.kucoin.com/docs/rest/account/basic-info/get-account-list-spot-margin-trade_hf\n * @see https://docs.kucoin.com/#query-isolated-margin-account-info\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {object} [params.marginMode] 'cross' or 'isolated', margin type for fetching margin balance\n * @param {object} [params.type] extra parameters specific to the exchange API endpoint\n * @param {object} [params.future] true if fetching futures. Can't use future in type param since it's using another API url\n * @param {object} [params.hf] *default if false* if true, the result includes the balance of the high frequency account\n * @returns {object} a [balance structure]{@link https://docs.ccxt.com/#/?id=balance-structure}\n */\n await this.loadMarkets();\n const code = this.safeString(params, 'code');\n const future = this.safeString(params, 'future');\n let currency = undefined;\n if (code !== undefined) {\n currency = this.currency(code);\n }\n const defaultType = this.safeString2(this.options, 'fetchBalance', 'defaultType', 'spot');\n const requestedType = this.safeString(params, 'type', defaultType);\n const accountsByType = this.safeValue(this.options, 'accountsByType');\n let type = this.safeString(accountsByType, requestedType, requestedType);\n params = this.omit(params, 'type');\n const isHf = this.safeBool(params, 'hf', false);\n if (isHf) {\n type = 'trade_hf';\n }\n params = this.omit(params, 'hf');\n const [marginMode, query] = this.handleMarginModeAndParams('fetchBalance', params);\n let response = undefined;\n const request = {};\n const isolated = (marginMode === 'isolated') || (type === 'isolated');\n const cross = (marginMode === 'cross') || (type === 'cross');\n if (isolated) {\n if (currency !== undefined) {\n request['balanceCurrency'] = currency['id'];\n }\n response = await this.privateGetIsolatedAccounts(this.extend(request, query));\n }\n else if (cross) {\n response = await this.privateGetMarginAccount(this.extend(request, query));\n }\n else if (future) {\n const futureCurrencies = type === 'coin-m' ? ['BTC', 'ETH', 'DOT', 'XRP', 'SOL'] : ['USDT', 'USDC'];\n const futureResult = {\n 'info': undefined,\n 'timestamp': undefined,\n 'datetime': undefined,\n };\n await Promise.all(futureCurrencies.map(async (futureCurrency) => {\n const futureRequest = { 'currency': futureCurrency };\n const futureResponse = await this.futuresPrivateGetAccountOverview(this.extend(futureRequest, params));\n const account = this.account();\n const futureData = this.safeValue(futureResponse, 'data');\n const futureCode = this.safeCurrencyCode(futureCurrency);\n account['free'] = this.safeString(futureData, 'availableBalance');\n account['total'] = this.safeString(futureData, 'accountEquity');\n account['used'] = Precise.stringSub(account['total'], account['free']);\n futureResult[futureCode] = account;\n }));\n return this.safeBalance(futureResult);\n }\n else if (type === 'earn') {\n response = await this.paginate('privateGetEarnHoldAssets', this.extend(request, query), 'items');\n }\n else {\n if (currency !== undefined) {\n request['currency'] = currency['id'];\n }\n request['type'] = type;\n response = await this.privateGetAccounts(this.extend(request, query));\n }\n //\n // Spot and Cross\n //\n // {\n // \"code\": \"200000\",\n // \"data\": [\n // {\n // \"balance\": \"0.00009788\",\n // \"available\": \"0.00009788\",\n // \"holds\": \"0\",\n // \"currency\": \"BTC\",\n // \"id\": \"5c6a4fd399a1d81c4f9cc4d0\",\n // \"type\": \"trade\",\n // },\n // ]\n // }\n //\n // Isolated\n //\n // {\n // \"code\": \"200000\",\n // \"data\": {\n // \"totalConversionBalance\": \"0\",\n // \"liabilityConversionBalance\": \"0\",\n // \"assets\": [\n // {\n // \"symbol\": \"MANA-USDT\",\n // \"status\": \"CLEAR\",\n // \"debtRatio\": \"0\",\n // \"baseAsset\": {\n // \"currency\": \"MANA\",\n // \"totalBalance\": \"0\",\n // \"holdBalance\": \"0\",\n // \"availableBalance\": \"0\",\n // \"liability\": \"0\",\n // \"interest\": \"0\",\n // \"borrowableAmount\": \"0\"\n // },\n // \"quoteAsset\": {\n // \"currency\": \"USDT\",\n // \"totalBalance\": \"0\",\n // \"holdBalance\": \"0\",\n // \"availableBalance\": \"0\",\n // \"liability\": \"0\",\n // \"interest\": \"0\",\n // \"borrowableAmount\": \"0\"\n // }\n // },\n // ...\n // ]\n // }\n // }\n //\n const data = this.safeValue(response, 'data', []);\n const result = {\n 'info': response,\n 'timestamp': undefined,\n 'datetime': undefined,\n };\n if (isolated) {\n const assets = this.safeValue(data, 'assets', data);\n for (let i = 0; i < assets.length; i++) {\n const entry = assets[i];\n const marketId = this.safeString(entry, 'symbol');\n const symbol = this.safeSymbol(marketId, undefined, '_');\n const base = this.safeValue(entry, 'baseAsset', {});\n const quote = this.safeValue(entry, 'quoteAsset', {});\n const baseCode = this.safeCurrencyCode(this.safeString(base, 'currency'));\n const quoteCode = this.safeCurrencyCode(this.safeString(quote, 'currency'));\n const subResult = {};\n subResult[baseCode] = this.parseBalanceHelper(base);\n subResult[quoteCode] = this.parseBalanceHelper(quote);\n result[symbol] = this.safeBalance(subResult);\n }\n }\n else if (cross) {\n const accounts = this.safeValue(data, 'accounts', []);\n for (let i = 0; i < accounts.length; i++) {\n const balance = accounts[i];\n const currencyId = this.safeString(balance, 'currency');\n const codeInner = this.safeCurrencyCode(currencyId);\n result[codeInner] = this.parseBalanceHelper(balance);\n }\n }\n else if (type === 'earn') {\n response.forEach((asset) => {\n const currencyId = this.safeString(asset, 'currency');\n const codeInner = this.safeCurrencyCode(currencyId);\n const account = this.account();\n account['used'] = this.safeString(asset, 'holdAmount');\n account['total'] = this.safeString(asset, 'holdAmount');\n result[codeInner] = account;\n });\n }\n else {\n for (let i = 0; i < data.length; i++) {\n const balance = data[i];\n const balanceType = this.safeString(balance, 'type');\n if (balanceType === type) {\n const currencyId = this.safeString(balance, 'currency');\n const codeInner2 = this.safeCurrencyCode(currencyId);\n const account = this.account();\n account['total'] = this.safeString(balance, 'balance');\n account['free'] = this.safeString(balance, 'available');\n account['used'] = this.safeString(balance, 'holds');\n result[codeInner2] = account;\n }\n }\n }\n const returnType = isolated ? result : this.safeBalance(result);\n return returnType;\n }\n async paginate(method, request, propertyName, params = {}) {\n const response = await this[method](this.extend(request, params));\n const data = this.safeValue(response, 'data', {});\n const result = this.safeValue(data, propertyName, []);\n const totalPage = this.safeInteger(data, 'totalPage');\n const currentPage = this.safeInteger(data, 'currentPage');\n if (currentPage < totalPage) {\n const nextPageRequest = this.extend(request, { 'page': currentPage + 1 });\n const nextPage = await this.paginate(method, nextPageRequest, propertyName, params);\n return this.arrayConcat(result, nextPage);\n }\n return result;\n }\n parseSubAccountTypeBalances(accounts) {\n const result = {};\n for (let i = 0; i < accounts.length; i++) {\n const account = accounts[i];\n const currencyId = this.safeString(account, 'currency');\n const code = this.safeCurrencyCode(currencyId);\n result[code] = {\n 'free': this.safeString(account, 'available'),\n 'used': this.safeString(account, 'holds'),\n 'total': this.safeString(account, 'balance'),\n };\n }\n return result;\n }\n // https://www.kucoin.com/docs/rest/account/sub-account/get-all-sub-accounts-balance-v2-\n async fetchSubAccountBalances(uid, params = {}) {\n await this.loadMarkets();\n const balances = await this.paginate('privateGetSubAccounts', {}, 'items');\n // const balances = await this.privateGetSubAccounts ();\n // {\n // \"code\": \"200000\",\n // \"data\": {\n // \"currentPage\": 1,\n // \"pageSize\": 10,\n // \"totalNum\": 14,\n // \"totalPage\": 2,\n // \"items\": [\n // {\n // \"subUserId\": \"635002438793b80001dcc8b3\",\n // \"subName\": \"margin03\",\n // \"mainAccounts\": [\n // {\n // \"currency\": \"00\",\n // \"balance\": \"0\",\n // \"available\": \"0\",\n // \"holds\": \"0\",\n // \"baseCurrency\": \"BTC\",\n // \"baseCurrencyPrice\": \"125.63\",\n // \"baseAmount\": \"0\"\n // }\n // ],\n // \"tradeAccounts\": [],\n // \"marginAccounts\": [],\n // \"tradeHFAccounts\": []\n // }\n // ]\n // }\n // }\n const subUserBalanceData = balances.find((subUser) => subUser['subUserId'] === uid);\n if (subUserBalanceData === undefined) {\n throw new SubAccountNotFoundError(uid);\n }\n const mainAccounts = this.safeValue(subUserBalanceData, 'mainAccounts', []);\n const tradeAccounts = this.safeValue(subUserBalanceData, 'tradeAccounts', []);\n const marginAccounts = this.safeValue(subUserBalanceData, 'marginAccounts', []);\n const tradeHFAccounts = this.safeValue(subUserBalanceData, 'tradeHFAccounts', []);\n return {\n 'main': this.parseSubAccountTypeBalances(mainAccounts),\n 'trade': this.parseSubAccountTypeBalances(tradeAccounts),\n 'margin': this.parseSubAccountTypeBalances(marginAccounts),\n 'tradeHF': this.parseSubAccountTypeBalances(tradeHFAccounts),\n };\n }\n // https://www.kucoin.com/docs/rest/account/sub-account/get-all-sub-accounts-info-v2-\n async getSubAccounts() {\n await this.loadMarkets();\n const accounts = await this.paginate('privateGetSubUser', {}, 'items');\n // {\n // \"code\": \"200000\",\n // \"data\": {\n // \"currentPage\": 1,\n // \"pageSize\": 100,\n // \"totalNum\": 1,\n // \"totalPage\": 1,\n // \"items\": [\n // {\n // \"userId\": \"635002438793b80001dcc8b3\",\n // \"uid\": 62356,\n // \"subName\": \"margin01\",\n // \"status\": 2,\n // \"type\": 4,\n // \"access\": \"Margin\",\n // \"createdAt\": 1666187844000,\n // \"remarks\": null\n // }\n // ]\n // }\n // }\n return accounts?.map((subAccount) => ({\n 'uid': this.safeString(subAccount, 'userId'),\n }));\n }\n async subAccountTransfer(code, amount, fromAccountType, toAccountType, fromUid, toUid, params = {}) {\n await this.loadMarkets();\n const currency = this.currency(code);\n const requestedAmount = this.currencyToPrecision(code, amount);\n const direction = fromUid === 'master' ? 'OUT' : 'IN';\n const subUserId = fromUid === 'master' ? toUid : fromUid;\n const fromAccountTypeExt = this.convertTypeToAccount(fromAccountType);\n const toAccountTypeExt = this.convertTypeToAccount(toAccountType);\n const subAccountTypeExt = fromUid === 'master' ? toAccountTypeExt : fromAccountTypeExt;\n const accountTypeExt = fromUid === 'master' ? fromAccountTypeExt : toAccountTypeExt;\n if (accountTypeExt !== 'trade' || subAccountTypeExt !== 'trade') {\n throw new Error('subAccountTransfer() only supports transferring between TRADE accounts');\n }\n const request = {\n 'currency': currency['id'],\n 'amount': requestedAmount,\n 'direction': direction,\n 'subUserId': subUserId,\n 'subAccountTypeExt': subAccountTypeExt,\n 'accountTypeExt': accountTypeExt,\n };\n if (!('clientOid' in params)) {\n request['clientOid'] = this.uuid();\n }\n const response = await this.privatePostAccountsSubTransfer(this.extend(request, params));\n //\n // {\n // \"code\": \"200000\",\n // \"data\": {\n // \"orderId\": \"605a6211e657f00006ad0ad6\"\n // }\n // }\n //\n const data = this.safeValue(response, 'data');\n return this.parseTransfer(data, currency);\n }\n async transfer(code, amount, fromAccount, toAccount, params = {}) {\n /**\n * @method\n * @name kucoin#transfer\n * @description transfer currency internally between wallets on the same account\n * @see https://docs.kucoin.com/#inner-transfer\n * @see https://docs.kucoin.com/futures/#transfer-funds-to-kucoin-main-account-2\n * @see https://docs.kucoin.com/spot-hf/#internal-funds-transfers-in-high-frequency-trading-accounts\n * @param {string} code unified currency code\n * @param {float} amount amount to transfer\n * @param {string} fromAccount account to transfer from\n * @param {string} toAccount account to transfer to\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} a [transfer structure]{@link https://docs.ccxt.com/#/?id=transfer-structure}\n */\n await this.loadMarkets();\n const currency = this.currency(code);\n const requestedAmount = this.currencyToPrecision(code, amount);\n let fromId = this.convertTypeToAccount(fromAccount);\n let toId = this.convertTypeToAccount(toAccount);\n const fromIsolated = this.inArray(fromId, this.ids);\n const toIsolated = this.inArray(toId, this.ids);\n if (fromId === 'contract') {\n if (toId !== 'main') {\n throw new ExchangeTransferNotAllowedError()\n .addMessage('transfer() only supports transferring from futures account to main account')\n .exchange(this.id);\n }\n const request = {\n 'currency': currency['id'],\n 'amount': requestedAmount,\n };\n if (!('bizNo' in params)) {\n // it doesn't like more than 24 characters\n request['bizNo'] = this.uuid22();\n }\n const response = await this.futuresPrivatePostTransferOut(this.extend(request, params));\n //\n // {\n // \"code\": \"200000\",\n // \"data\": {\n // \"applyId\": \"605a87217dff1500063d485d\",\n // \"bizNo\": \"bcd6e5e1291f4905af84dc\",\n // \"payAccountType\": \"CONTRACT\",\n // \"payTag\": \"DEFAULT\",\n // \"remark\": '',\n // \"recAccountType\": \"MAIN\",\n // \"recTag\": \"DEFAULT\",\n // \"recRemark\": '',\n // \"recSystem\": \"KUCOIN\",\n // \"status\": \"PROCESSING\",\n // \"currency\": \"XBT\",\n // \"amount\": \"0.00001\",\n // \"fee\": \"0\",\n // \"sn\": \"573688685663948\",\n // \"reason\": '',\n // \"createdAt\": 1616545569000,\n // \"updatedAt\": 1616545569000\n // }\n // }\n //\n const data = this.safeValue(response, 'data');\n return this.parseTransfer(data, currency);\n }\n else {\n const request = {\n 'currency': currency['id'],\n 'amount': requestedAmount,\n };\n if (fromIsolated || toIsolated) {\n if (this.inArray(fromId, this.ids)) {\n request['fromTag'] = fromId;\n fromId = 'isolated';\n }\n if (this.inArray(toId, this.ids)) {\n request['toTag'] = toId;\n toId = 'isolated';\n }\n }\n request['from'] = fromId;\n request['to'] = toId;\n if (!('clientOid' in params)) {\n request['clientOid'] = this.uuid();\n }\n const response = await this.privatePostAccountsInnerTransfer(this.extend(request, params));\n //\n // {\n // \"code\": \"200000\",\n // \"data\": {\n // \"orderId\": \"605a6211e657f00006ad0ad6\"\n // }\n // }\n //\n const data = this.safeValue(response, 'data');\n return this.parseTransfer(data, currency);\n }\n }\n parseTransfer(transfer, currency = undefined) {\n //\n // transfer (spot)\n //\n // {\n // \"orderId\": \"605a6211e657f00006ad0ad6\"\n // }\n //\n // {\n // \"code\": \"200000\",\n // \"msg\": \"Failed to transfer out. The amount exceeds the upper limit\"\n // }\n //\n // transfer (futures)\n //\n // {\n // \"applyId\": \"605a87217dff1500063d485d\",\n // \"bizNo\": \"bcd6e5e1291f4905af84dc\",\n // \"payAccountType\": \"CONTRACT\",\n // \"payTag\": \"DEFAULT\",\n // \"remark\": '',\n // \"recAccountType\": \"MAIN\",\n // \"recTag\": \"DEFAULT\",\n // \"recRemark\": '',\n // \"recSystem\": \"KUCOIN\",\n // \"status\": \"PROCESSING\",\n // \"currency\": \"XBT\",\n // \"amount\": \"0.00001\",\n // \"fee\": \"0\",\n // \"sn\": \"573688685663948\",\n // \"reason\": '',\n // \"createdAt\": 1616545569000,\n // \"updatedAt\": 1616545569000\n // }\n //\n const timestamp = this.safeInteger(transfer, 'createdAt');\n const currencyId = this.safeString(transfer, 'currency');\n const rawStatus = this.safeString(transfer, 'status');\n const accountFromRaw = this.safeStringLower(transfer, 'payAccountType');\n const accountToRaw = this.safeStringLower(transfer, 'recAccountType');\n const accountsByType = this.safeValue(this.options, 'accountsByType');\n const accountFrom = this.safeString(accountsByType, accountFromRaw, accountFromRaw);\n const accountTo = this.safeString(accountsByType, accountToRaw, accountToRaw);\n return {\n 'id': this.safeString2(transfer, 'applyId', 'orderId'),\n 'currency': this.safeCurrencyCode(currencyId, currency),\n 'timestamp': timestamp,\n 'datetime': this.iso8601(timestamp),\n 'amount': this.safeNumber(transfer, 'amount'),\n 'fromAccount': accountFrom,\n 'toAccount': accountTo,\n 'status': this.parseTransferStatus(rawStatus),\n 'info': transfer,\n };\n }\n parseTransferStatus(status) {\n const statuses = {\n 'PROCESSING': 'pending',\n };\n return this.safeString(statuses, status, status);\n }\n parseLedgerEntryType(type) {\n const types = {\n 'Assets Transferred in After Upgrading': 'transfer',\n 'Deposit': 'transaction',\n 'Withdrawal': 'transaction',\n 'Transfer': 'transfer',\n 'Trade_Exchange': 'trade',\n // 'Vote for Coin': 'Vote for Coin', // Vote for Coin\n 'KuCoin Bonus': 'bonus',\n 'Referral Bonus': 'referral',\n 'Rewards': 'bonus',\n // 'Distribution': 'Distribution', // Distribution, such as get GAS by holding NEO\n 'Airdrop/Fork': 'airdrop',\n 'Other rewards': 'bonus',\n 'Fee Rebate': 'rebate',\n 'Buy Crypto': 'trade',\n 'Sell Crypto': 'sell',\n 'Public Offering Purchase': 'trade',\n // 'Send red envelope': 'Send red envelope', // Send red envelope\n // 'Open red envelope': 'Open red envelope', // Open red envelope\n // 'Staking': 'Staking', // Staking\n // 'LockDrop Vesting': 'LockDrop Vesting', // LockDrop Vesting\n // 'Staking Profits': 'Staking Profits', // Staking Profits\n // 'Redemption': 'Redemption', // Redemption\n 'Refunded Fees': 'fee',\n 'KCS Pay Fees': 'fee',\n 'Margin Trade': 'trade',\n 'Loans': 'Loans',\n // 'Borrowings': 'Borrowings', // Borrowings\n // 'Debt Repayment': 'Debt Repayment', // Debt Repayment\n // 'Loans Repaid': 'Loans Repaid', // Loans Repaid\n // 'Lendings': 'Lendings', // Lendings\n // 'Pool transactions': 'Pool transactions', // Pool-X transactions\n 'Instant Exchange': 'trade',\n 'Sub-account transfer': 'transfer',\n 'Liquidation Fees': 'fee', // Liquidation Fees\n // 'Soft Staking Profits': 'Soft Staking Profits', // Soft Staking Profits\n // 'Voting Earnings': 'Voting Earnings', // Voting Earnings on Pool-X\n // 'Redemption of Voting': 'Redemption of Voting', // Redemption of Voting on Pool-X\n // 'Voting': 'Voting', // Voting on Pool-X\n // 'Convert to KCS': 'Convert to KCS', // Convert to KCS\n };\n return this.safeString(types, type, type);\n }\n parseLedgerEntry(item, currency = undefined) {\n //\n // {\n // \"id\": \"611a1e7c6a053300067a88d9\", //unique key for each ledger entry\n // \"currency\": \"USDT\", //Currency\n // \"amount\": \"10.00059547\", //The total amount of assets (fees included) involved in assets changes such as transaction, withdrawal and bonus distribution.\n // \"fee\": \"0\", //Deposit or withdrawal fee\n // \"balance\": \"0\", //Total assets of a currency remaining funds after transaction\n // \"accountType\": \"MAIN\", //Account Type\n // \"bizType\": \"Loans Repaid\", //business type\n // \"direction\": \"in\", //side, in or out\n // \"createdAt\": 1629101692950, //Creation time\n // \"context\": \"{\\\"borrowerUserId\\\":\\\"601ad03e50dc810006d242ea\\\",\\\"loanRepayDetailNo\\\":\\\"611a1e7cc913d000066cf7ec\\\"}\" //Business core parameters\n // }\n //\n const id = this.safeString(item, 'id');\n const currencyId = this.safeString(item, 'currency');\n const code = this.safeCurrencyCode(currencyId, currency);\n const amount = this.safeNumber(item, 'amount');\n const balanceAfter = undefined;\n // const balanceAfter = this.safeNumber (item, 'balance'); only returns zero string\n const bizType = this.safeString(item, 'bizType');\n const type = this.parseLedgerEntryType(bizType);\n const direction = this.safeString(item, 'direction');\n const timestamp = this.safeInteger(item, 'createdAt');\n const datetime = this.iso8601(timestamp);\n const account = this.safeString(item, 'accountType'); // MAIN, TRADE, MARGIN, or CONTRACT\n const context = this.safeString(item, 'context'); // contains other information about the ledger entry\n //\n // withdrawal transaction\n //\n // \"{\\\"orderId\\\":\\\"617bb2d09e7b3b000196dac8\\\",\\\"txId\\\":\\\"0x79bb9855f86b351a45cab4dc69d78ca09586a94c45dde49475722b98f401b054\\\"}\"\n //\n // deposit to MAIN, trade via MAIN\n //\n // \"{\\\"orderId\\\":\\\"617ab9949e7b3b0001948081\\\",\\\"txId\\\":\\\"0x7a06b16bbd6b03dbc3d96df5683b15229fc35e7184fd7179a5f3a310bd67d1fa@default@0\\\"}\"\n //\n // sell trade\n //\n // \"{\\\"symbol\\\":\\\"ETH-USDT\\\",\\\"orderId\\\":\\\"617adcd1eb3fa20001dd29a1\\\",\\\"tradeId\\\":\\\"617adcd12e113d2b91222ff9\\\"}\"\n //\n let referenceId = undefined;\n if (context !== undefined && context !== '') {\n try {\n const parsed = JSON.parse(context);\n const orderId = this.safeString(parsed, 'orderId');\n const tradeId = this.safeString(parsed, 'tradeId');\n // transactions only have an orderId but for trades we wish to use tradeId\n if (tradeId !== undefined) {\n referenceId = tradeId;\n }\n else {\n referenceId = orderId;\n }\n }\n catch (exc) {\n referenceId = context;\n }\n }\n let fee = undefined;\n const feeCost = this.safeString(item, 'fee');\n let feeCurrency = undefined;\n if (feeCost !== '0') {\n feeCurrency = code;\n fee = { 'cost': this.parseNumber(feeCost), 'currency': feeCurrency };\n }\n return {\n 'id': id,\n 'direction': direction,\n 'account': account,\n 'referenceId': referenceId,\n 'referenceAccount': account,\n 'type': type,\n 'currency': code,\n 'amount': amount,\n 'timestamp': timestamp,\n 'datetime': datetime,\n 'before': undefined,\n 'after': balanceAfter,\n 'status': undefined,\n 'fee': fee,\n 'info': item,\n };\n }\n async fetchLedger(code = undefined, since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name kucoin#fetchLedger\n * @see https://docs.kucoin.com/#get-account-ledgers\n * @see https://www.kucoin.com/docs/rest/account/basic-info/get-account-ledgers-trade_hf\n * @see https://www.kucoin.com/docs/rest/account/basic-info/get-account-ledgers-margin_hf\n * @description fetch the history of changes, actions done by the user or operations that altered balance of the user\n * @param {string} code unified currency code, default is undefined\n * @param {int} [since] timestamp in ms of the earliest ledger entry, default is undefined\n * @param {int} [limit] max number of ledger entrys to return, default is undefined\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {boolean} [params.hf] default false, when true will fetch ledger entries for the high frequency trading account\n * @param {int} [params.until] the latest time in ms to fetch entries for\n * @param {boolean} [params.paginate] default false, when true will automatically paginate by calling this endpoint multiple times. See in the docs all the [availble parameters](https://github.com/ccxt/ccxt/wiki/Manual#pagination-params)\n * @returns {object} a [ledger structure]{@link https://docs.ccxt.com/#/?id=ledger-structure}\n */\n await this.loadMarkets();\n await this.loadAccounts();\n let paginate = false;\n [paginate, params] = this.handleOptionAndParams(params, 'fetchLedger', 'paginate');\n const isHf = this.safeValue(params, 'hf');\n params = this.omit(params, 'hf');\n if (paginate) {\n return await this.fetchPaginatedCallDynamic('fetchLedger', code, since, limit, params);\n }\n let request = {\n // 'currency': currency['id'], // can choose up to 10, if not provided returns for all currencies by default\n // 'direction': 'in', // 'out'\n // 'bizType': 'DEPOSIT', // DEPOSIT, WITHDRAW, TRANSFER, SUB_TRANSFER,TRADE_EXCHANGE, MARGIN_EXCHANGE, KUCOIN_BONUS (optional)\n // 'startAt': since,\n // 'endAt': exchange.milliseconds (),\n };\n if (since !== undefined) {\n request['startAt'] = since;\n }\n // atm only single currency retrieval is supported\n let currency = undefined;\n if (code !== undefined) {\n currency = this.currency(code);\n request['currency'] = currency['id'];\n }\n [request, params] = this.handleUntilOption('endAt', request, params);\n let marginMode = undefined;\n [marginMode, params] = this.handleMarginModeAndParams('fetchLedger', params);\n let response = undefined;\n if (isHf) {\n if (marginMode !== undefined) {\n response = await this.privateGetHfMarginAccountLedgers(this.extend(request, params));\n }\n else {\n response = await this.privateGetHfAccountsLedgers(this.extend(request, params));\n }\n }\n else {\n response = await this.privateGetAccountsLedgers(this.extend(request, params));\n }\n //\n // {\n // \"code\":\"200000\",\n // \"data\":{\n // \"currentPage\":1,\n // \"pageSize\":50,\n // \"totalNum\":1,\n // \"totalPage\":1,\n // \"items\":[\n // {\n // \"id\":\"617cc528729f5f0001c03ceb\",\n // \"currency\":\"GAS\",\n // \"amount\":\"0.00000339\",\n // \"fee\":\"0\",\n // \"balance\":\"0\",\n // \"accountType\":\"MAIN\",\n // \"bizType\":\"Distribution\",\n // \"direction\":\"in\",\n // \"createdAt\":1635566888183,\n // \"context\":\"{\\\"orderId\\\":\\\"617cc47a1c47ed0001ce3606\\\",\\\"description\\\":\\\"Holding NEO,distribute GAS(2021/10/30)\\\"}\"\n // }\n // {\n // \"id\": \"611a1e7c6a053300067a88d9\",//unique key\n // \"currency\": \"USDT\", //Currency\n // \"amount\": \"10.00059547\", //Change amount of the funds\n // \"fee\": \"0\", //Deposit or withdrawal fee\n // \"balance\": \"0\", //Total assets of a currency\n // \"accountType\": \"MAIN\", //Account Type\n // \"bizType\": \"Loans Repaid\", //business type\n // \"direction\": \"in\", //side, in or out\n // \"createdAt\": 1629101692950, //Creation time\n // \"context\": \"{\\\"borrowerUserId\\\":\\\"601ad03e50dc810006d242ea\\\",\\\"loanRepayDetailNo\\\":\\\"611a1e7cc913d000066cf7ec\\\"}\"\n // },\n // ]\n // }\n // }\n //\n const dataList = this.safeList(response, 'data');\n if (dataList !== undefined) {\n return this.parseLedger(dataList, currency, since, limit);\n }\n const data = this.safeDict(response, 'data');\n const items = this.safeList(data, 'items', []);\n return this.parseLedger(items, currency, since, limit);\n }\n calculateRateLimiterCost(api, method, path, params, config = {}) {\n const versions = this.safeValue(this.options, 'versions', {});\n const apiVersions = this.safeValue(versions, api, {});\n const methodVersions = this.safeValue(apiVersions, method, {});\n const defaultVersion = this.safeString(methodVersions, path, this.options['version']);\n const version = this.safeString(params, 'version', defaultVersion);\n if (version === 'v3' && ('v3' in config)) {\n return config['v3'];\n }\n else if (version === 'v2' && ('v2' in config)) {\n return config['v2'];\n }\n else if (version === 'v1' && ('v1' in config)) {\n return config['v1'];\n }\n return this.safeValue(config, 'cost', 1);\n }\n parseBorrowRateHistory(response, code, since, limit) {\n const result = [];\n for (let i = 0; i < response.length; i++) {\n const item = response[i];\n const borrowRate = this.parseBorrowRate(item);\n result.push(borrowRate);\n }\n const sorted = this.sortBy(result, 'timestamp');\n return this.filterByCurrencySinceLimit(sorted, code, since, limit);\n }\n parseBorrowRate(info, currency = undefined) {\n //\n // {\n // \"tradeId\": \"62db2dcaff219600012b56cd\",\n // \"currency\": \"USDT\",\n // \"size\": \"10\",\n // \"dailyIntRate\": \"0.00003\",\n // \"term\": 7,\n // \"timestamp\": 1658531274508488480\n // },\n //\n const timestampId = this.safeString(info, 'timestamp');\n const timestamp = Precise.stringMul(timestampId, '0.000001');\n const currencyId = this.safeString(info, 'currency');\n return {\n 'currency': this.safeCurrencyCode(currencyId, currency),\n 'rate': this.safeNumber(info, 'dailyIntRate'),\n 'period': 86400000,\n 'timestamp': timestamp,\n 'datetime': this.iso8601(timestamp),\n 'info': info,\n };\n }\n async fetchDepositWithdrawFees(codes = undefined, params = {}) {\n /**\n * @method\n * @name kucoin#fetchDepositWithdrawFees\n * @description fetch deposit and withdraw fees - *IMPORTANT* use fetchDepositWithdrawFee to get more in-depth info\n * @see https://docs.kucoin.com/#get-currencies\n * @param {string[]|undefined} codes list of unified currency codes\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} a list of [fee structures]{@link https://docs.ccxt.com/#/?id=fee-structure}\n */\n await this.loadMarkets();\n const response = await this.publicGetCurrencies(params);\n //\n // [\n // {\n // \"currency\": \"CSP\",\n // \"name\": \"CSP\",\n // \"fullName\": \"Caspian\",\n // \"precision\": 8,\n // \"confirms\": 12,\n // \"contractAddress\": \"0xa6446d655a0c34bc4f05042ee88170d056cbaf45\",\n // \"withdrawalMinSize\": \"2000\",\n // \"withdrawalMinFee\": \"1000\",\n // \"isWithdrawEnabled\": true,\n // \"isDepositEnabled\": true,\n // \"isMarginEnabled\": false,\n // \"isDebitEnabled\": false\n // },\n // ]\n //\n const data = this.safeValue(response, 'data', []);\n return this.parseDepositWithdrawFees(data, codes, 'currency');\n }\n async sign(path, api = 'public', method = 'GET', params = {}, headers = undefined, body = undefined) {\n //\n // the v2 URL is https://openapi-v2.kucoin.com/api/v1/endpoint\n // ↑ ↑\n // ↑ ↑\n //\n const versions = this.safeValue(this.options, 'versions', {});\n const apiVersions = this.safeValue(versions, api, {});\n const methodVersions = this.safeValue(apiVersions, method, {});\n const defaultVersion = this.safeString(methodVersions, path, this.options['version']);\n const version = this.safeString(params, 'version', defaultVersion);\n params = this.omit(params, 'version');\n let endpoint = '/api/' + version + '/' + this.implodeParams(path, params);\n if (api === 'webExchange') {\n endpoint = '/' + this.implodeParams(path, params);\n }\n const query = this.omit(params, this.extractParams(path));\n let endpart = '';\n headers = (headers !== undefined) ? headers : {};\n let url = this.urls['api'][api];\n if (!this.isEmpty(query)) {\n if ((method === 'GET') || (method === 'DELETE')) {\n endpoint += '?' + this.rawencode(query);\n }\n else {\n body = this.json(query);\n endpart = body;\n headers['Content-Type'] = 'application/json';\n }\n }\n url = url + endpoint;\n const isFuturePrivate = (api === 'futuresPrivate');\n const isPrivate = (api === 'private');\n if (isPrivate || isFuturePrivate) {\n this.checkRequiredCredentials();\n const timestamp = this.nonce().toString();\n headers = this.extend({\n 'KC-API-KEY-VERSION': '2',\n 'KC-API-KEY': this.apiKey,\n 'KC-API-TIMESTAMP': timestamp,\n }, headers);\n const apiKeyVersion = this.safeString(headers, 'KC-API-KEY-VERSION');\n if (apiKeyVersion === '2' || apiKeyVersion === '3') {\n let passphrase = undefined;\n if (this.externalSigner) {\n passphrase = await this.externalSigner.sign({\n 'payload': this.encode(this.password),\n 'publicApiKey': this.apiKey,\n 'exchangeId': this.id,\n });\n }\n else {\n passphrase = this.hmac(this.encode(this.password), this.encode(this.secret), sha256, 'base64');\n }\n headers['KC-API-PASSPHRASE'] = passphrase;\n }\n else {\n headers['KC-API-PASSPHRASE'] = this.password;\n }\n const payload = timestamp + method + endpoint + endpart;\n let signature = undefined;\n if (this.externalSigner) {\n signature = await this.externalSigner.sign({\n 'payload': this.encode(payload),\n 'publicApiKey': this.apiKey,\n 'exchangeId': this.id,\n });\n }\n else {\n signature = this.hmac(this.encode(payload), this.encode(this.secret), sha256, 'base64');\n }\n headers['KC-API-SIGN'] = signature;\n let partner = this.safeValue(this.options, 'partner', {});\n partner = isFuturePrivate ? this.safeValue(partner, 'future', partner) : this.safeValue(partner, 'spot', partner);\n const partnerId = this.safeString(partner, 'id');\n const partnerSecret = this.safeString2(partner, 'secret', 'key');\n if ((partnerId !== undefined) && (partnerSecret !== undefined)) {\n const partnerPayload = timestamp + partnerId + this.apiKey;\n const partnerSignature = this.hmac(this.encode(partnerPayload), this.encode(partnerSecret), sha256, 'base64');\n headers['KC-API-PARTNER-SIGN'] = partnerSignature;\n headers['KC-API-PARTNER'] = partnerId;\n }\n }\n return { 'url': url, 'method': method, 'body': body, 'headers': headers };\n }\n handleErrors(code, reason, url, method, headers, body, response, requestHeaders, requestBody) {\n if (!response) {\n this.throwBroadlyMatchedException(this.exceptions['broad'], body, body);\n return undefined;\n }\n //\n // bad\n // { \"code\": \"400100\", \"msg\": \"validation.createOrder.clientOidIsRequired\" }\n // good\n // { code: '200000', data: { ... }}\n //\n const errorCode = this.safeString(response, 'code');\n const message = this.safeString2(response, 'msg', 'data', '');\n const userMessage = errorCode + ': ' + message;\n this.throwExactlyMatchedException(this.exceptions['exact'], message, userMessage);\n this.throwExactlyMatchedException(this.exceptions['exact'], errorCode, userMessage);\n this.throwBroadlyMatchedException(this.exceptions['broad'], body, userMessage);\n if (errorCode !== '200000' && errorCode !== '200') {\n throw new ExchangeError().addMessage(userMessage).exchange(this.id);\n }\n return undefined;\n }\n}\n","// ----------------------------------------------------------------------------\n\n// PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:\n// https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code\n// EDIT THE CORRESPONDENT .ts FILE INSTEAD\n\n// ---------------------------------------------------------------------------\nimport Exchange from './abstract/mexc.js';\nimport { Precise } from './base/Precise.js';\nimport { TICK_SIZE } from './base/functions/number.js';\nimport { AuthenticationError, ExchangeAccountSuspendedError, ExchangeError, ExchangeInvalidNonceError, ExchangeInvalidPermissionsError, ExchangeNotAllowedMethodError, ExchangeRequestExpiredError, ExchangeTransferError, ExchangeTransferNotAllowedError, ExchangeUnderMaintenanceError, ExchangeUnknownAssetError, GetDepositAddressError, InsufficientBalanceError, InvalidParamsError, MarketNotFoundError, MarketTypeNotSupportedError, OrderNotFoundError, TradeError, WhitelistCheckFailedError, WithdrawalError } from './sdk/errors.js';\nimport { sha256 } from './static_dependencies/noble-hashes/sha256.js';\n// ---------------------------------------------------------------------------\n/**\n * @class mexc\n * @augments Exchange\n */\nexport default class mexc extends Exchange {\n describe() {\n return this.deepExtend(super.describe(), {\n 'id': 'mexc',\n 'name': 'MEXC Global',\n 'countries': ['SC'],\n 'rateLimit': 50,\n 'version': 'v3',\n 'certified': true,\n 'pro': true,\n 'has': {\n 'CORS': undefined,\n 'spot': true,\n 'margin': true,\n 'swap': true,\n 'future': false,\n 'option': false,\n 'cancelAllOrders': true,\n 'cancelOrder': true,\n 'cancelOrders': undefined,\n 'createDepositAddress': true,\n 'createMarketBuyOrderWithCost': true,\n 'createMarketOrderWithCost': false,\n 'createMarketSellOrderWithCost': false,\n 'createOrder': true,\n 'createOrders': true,\n 'deposit': undefined,\n 'editOrder': undefined,\n 'fetchAccounts': true,\n 'fetchBalance': true,\n 'fetchCanceledOrders': true,\n 'fetchClosedOrder': undefined,\n 'fetchClosedOrders': true,\n 'fetchCurrencies': true,\n 'fetchDeposit': undefined,\n 'fetchDepositAddress': true,\n 'fetchDepositAddresses': undefined,\n 'fetchDepositAddressesByNetwork': true,\n 'fetchDeposits': true,\n 'fetchDepositWithdrawFee': 'emulated',\n 'fetchDepositWithdrawFees': true,\n 'fetchL2OrderBook': true,\n 'fetchLedger': undefined,\n 'fetchLedgerEntry': undefined,\n 'fetchMarkets': true,\n 'fetchMyTrades': true,\n 'fetchOHLCV': true,\n 'fetchOpenOrder': undefined,\n 'fetchOpenOrders': true,\n 'fetchOrder': true,\n 'fetchOrderBook': true,\n 'fetchOrderBooks': undefined,\n 'fetchOrders': true,\n 'fetchOrderTrades': true,\n 'fetchPosition': true,\n 'fetchPositions': true,\n 'fetchPositionsRisk': undefined,\n 'fetchStatus': true,\n 'fetchTicker': true,\n 'fetchTickers': true,\n 'fetchTime': true,\n 'fetchTrades': true,\n 'fetchTradingFee': undefined,\n 'fetchTradingFees': true,\n 'fetchTradingLimits': undefined,\n 'fetchTransactionFee': 'emulated',\n 'fetchTransactionFees': true,\n 'fetchTransactions': undefined,\n 'fetchTransfer': true,\n 'fetchTransfers': true,\n 'fetchWithdrawal': undefined,\n 'fetchWithdrawals': true,\n 'transfer': undefined,\n 'withdraw': true,\n },\n 'urls': {\n 'logo': 'https://user-images.githubusercontent.com/1294454/137283979-8b2a818d-8633-461b-bfca-de89e8c446b2.jpg',\n 'api': {\n 'spot': {\n 'public': 'https://api.mexc.com',\n 'private': 'https://api.mexc.com',\n },\n 'spot2': {\n 'public': 'https://www.mexc.com/open/api/v2',\n 'private': 'https://www.mexc.com/open/api/v2',\n },\n 'contract': {\n 'public': 'https://contract.mexc.com/api/v1/contract',\n 'private': 'https://contract.mexc.com/api/v1/private',\n },\n 'broker': {\n 'private': 'https://api.mexc.com/api/v3/broker',\n },\n },\n 'www': 'https://www.mexc.com/',\n 'doc': [\n 'https://mexcdevelop.github.io/apidocs/',\n ],\n 'fees': [\n 'https://www.mexc.com/fee',\n ],\n // https://m.mexc.com/auth/signup?inviteCode=1FQ1G - I removed the code for now, because CWS is blocking until we explain our affiliate program to our users\n 'referral': 'https://m.mexc.com/auth/signup',\n },\n 'api': {\n 'spot': {\n 'public': {\n 'get': {\n 'ping': 1,\n 'time': 1,\n 'exchangeInfo': 10,\n 'depth': 1,\n 'trades': 5,\n 'historicalTrades': 1,\n 'aggTrades': 1,\n 'klines': 1,\n 'avgPrice': 1,\n 'ticker/24hr': 1,\n 'ticker/price': 1,\n 'ticker/bookTicker': 1,\n 'etf/info': 1,\n },\n },\n 'private': {\n 'get': {\n 'order': 2,\n 'openOrders': 3,\n 'allOrders': 10,\n 'account': 10,\n 'myTrades': 10,\n 'sub-account/list': 1,\n 'sub-account/apiKey': 1,\n 'sub-account/asset': 1,\n 'capital/config/getall': 10,\n 'capital/deposit/hisrec': 1,\n 'capital/withdraw/history': 1,\n 'capital/withdraw/address': 10,\n 'capital/deposit/address': 10,\n 'capital/transfer': 1,\n 'capital/transfer/tranId': 1,\n 'capital/transfer/internal': 1,\n 'capital/sub-account/universalTransfer': 1,\n 'capital/convert': 1,\n 'capital/convert/list': 1,\n 'margin/loan': 1,\n 'margin/allOrders': 1,\n 'margin/myTrades': 1,\n 'margin/openOrders': 1,\n 'margin/maxTransferable': 1,\n 'margin/priceIndex': 1,\n 'margin/order': 1,\n 'margin/isolated/account': 1,\n 'margin/maxBorrowable': 1,\n 'margin/repay': 1,\n 'margin/isolated/pair': 1,\n 'margin/forceLiquidationRec': 1,\n 'margin/isolatedMarginData': 1,\n 'margin/isolatedMarginTier': 1,\n 'rebate/taxQuery': 1,\n 'rebate/detail': 1,\n 'rebate/detail/kickback': 1,\n 'rebate/referCode': 1,\n 'rebate/affiliate/commission': 1,\n 'rebate/affiliate/withdraw': 1,\n 'rebate/affiliate/commission/detail': 1,\n 'mxDeduct/enable': 1,\n 'userDataStream': 1,\n },\n 'post': {\n 'order': 1,\n 'order/test': 1,\n 'sub-account/virtualSubAccount': 1,\n 'sub-account/apiKey': 1,\n 'sub-account/futures': 1,\n 'sub-account/margin': 1,\n 'batchOrders': 10,\n 'capital/withdraw/apply': 1,\n 'capital/transfer': 1,\n 'capital/transfer/internal': 1,\n 'capital/deposit/address': 1,\n 'capital/sub-account/universalTransfer': 1,\n 'capital/convert': 10,\n 'mxDeduct/enable': 1,\n 'userDataStream': 1,\n },\n 'put': {\n 'userDataStream': 1,\n },\n 'delete': {\n 'order': 1,\n 'openOrders': 1,\n 'sub-account/apiKey': 1,\n 'margin/order': 1,\n 'margin/openOrders': 1,\n 'userDataStream': 1,\n },\n },\n },\n 'contract': {\n 'public': {\n 'get': {\n 'ping': 2,\n 'detail': 100,\n 'support_currencies': 2,\n 'depth/{symbol}': 2,\n 'depth_commits/{symbol}/{limit}': 2,\n 'index_price/{symbol}': 2,\n 'fair_price/{symbol}': 2,\n 'funding_rate/{symbol}': 2,\n 'kline/{symbol}': 2,\n 'kline/index_price/{symbol}': 2,\n 'kline/fair_price/{symbol}': 2,\n 'deals/{symbol}': 2,\n 'ticker': 2,\n 'risk_reverse': 2,\n 'risk_reverse/history': 2,\n 'funding_rate/history': 2,\n },\n },\n 'private': {\n 'get': {\n 'account/assets': 2,\n 'account/asset/{currency}': 2,\n 'account/transfer_record': 2,\n 'position/list/history_positions': 2,\n 'position/open_positions': 2,\n 'position/funding_records': 2,\n 'position/position_mode': 2,\n 'order/list/open_orders/{symbol}': 2,\n 'order/list/history_orders': 2,\n 'order/external/{symbol}/{external_oid}': 2,\n 'order/get/{order_id}': 2,\n 'order/batch_query': 8,\n 'order/deal_details/{order_id}': 2,\n 'order/list/order_deals': 2,\n 'planorder/list/orders': 2,\n 'stoporder/list/orders': 2,\n 'stoporder/order_details/{stop_order_id}': 2,\n 'account/risk_limit': 2,\n 'account/tiered_fee_rate': 2,\n 'position/leverage': 2,\n },\n 'post': {\n 'position/change_margin': 2,\n 'position/change_leverage': 2,\n 'position/change_position_mode': 2,\n 'order/submit': 2,\n 'order/submit_batch': 40,\n 'order/cancel': 2,\n 'order/cancel_with_external': 2,\n 'order/cancel_all': 2,\n 'account/change_risk_level': 2,\n 'planorder/place': 2,\n 'planorder/cancel': 2,\n 'planorder/cancel_all': 2,\n 'stoporder/cancel': 2,\n 'stoporder/cancel_all': 2,\n 'stoporder/change_price': 2,\n 'stoporder/change_plan_price': 2,\n },\n },\n },\n 'spot2': {\n 'public': {\n 'get': {\n 'market/symbols': 1,\n 'market/coin/list': 2,\n 'common/timestamp': 1,\n 'common/ping': 2,\n 'market/ticker': 1,\n 'market/depth': 1,\n 'market/deals': 1,\n 'market/kline': 1,\n 'market/api_default_symbols': 2,\n },\n },\n 'private': {\n 'get': {\n 'account/info': 1,\n 'order/open_orders': 1,\n 'order/list': 1,\n 'order/query': 1,\n 'order/deals': 1,\n 'order/deal_detail': 1,\n 'asset/deposit/address/list': 2,\n 'asset/deposit/list': 2,\n 'asset/address/list': 2,\n 'asset/withdraw/list': 2,\n 'asset/internal/transfer/record': 10,\n 'account/balance': 10,\n 'asset/internal/transfer/info': 10,\n 'market/api_symbols': 2,\n },\n 'post': {\n 'order/place': 1,\n 'order/place_batch': 1,\n 'order/advanced/place_batch': 1,\n 'asset/withdraw': 2,\n 'asset/internal/transfer': 10,\n },\n 'delete': {\n 'order/cancel': 1,\n 'order/cancel_by_symbol': 1,\n 'asset/withdraw': 2,\n },\n },\n },\n 'broker': {\n 'private': {\n 'get': {\n 'sub-account/universalTransfer': 1,\n 'sub-account/list': 1,\n 'sub-account/apiKey': 1,\n 'capital/deposit/subAddress': 1,\n 'capital/deposit/subHisrec': 1,\n 'capital/deposit/subHisrec/getall': 1,\n },\n 'post': {\n 'sub-account/virtualSubAccount': 1,\n 'sub-account/apiKey': 1,\n 'capital/deposit/subAddress': 1,\n 'capital/withdraw/apply': 1,\n 'sub-account/universalTransfer': 1,\n 'sub-account/futures': 1,\n },\n 'delete': {\n 'sub-account/apiKey': 1,\n },\n },\n },\n },\n 'precisionMode': TICK_SIZE,\n 'timeframes': {\n '1m': '1m',\n '5m': '5m',\n '15m': '15m',\n '30m': '30m',\n '1h': '1h',\n '4h': '4h',\n '8h': '8h',\n '1d': '1d',\n '1w': '1w',\n '1M': '1M', // spot, swap\n },\n 'fees': {\n 'trading': {\n 'tierBased': false,\n 'percentage': true,\n 'maker': this.parseNumber('0.002'),\n 'taker': this.parseNumber('0.002'),\n },\n },\n 'options': {\n 'timeDifference': 0,\n 'createMarketBuyOrderRequiresPrice': true,\n 'unavailableContracts': {\n 'BTC/USDT:USDT': true,\n 'LTC/USDT:USDT': true,\n 'ETH/USDT:USDT': true,\n },\n 'fetchMarkets': {\n 'types': {\n 'spot': true,\n 'swap': {\n 'linear': true,\n 'inverse': false,\n },\n },\n },\n 'timeframes': {\n 'spot': {\n '1m': '1m',\n '5m': '5m',\n '15m': '15m',\n '30m': '30m',\n '1h': '60m',\n '4h': '4h',\n '1d': '1d',\n '1M': '1M',\n },\n 'swap': {\n '1m': 'Min1',\n '5m': 'Min5',\n '15m': 'Min15',\n '30m': 'Min30',\n '1h': 'Min60',\n '4h': 'Hour4',\n '8h': 'Hour8',\n '1d': 'Day1',\n '1w': 'Week1',\n '1M': 'Month1',\n },\n },\n 'defaultType': 'spot',\n 'defaultNetwork': 'ETH',\n 'defaultNetworks': {\n 'ETH': 'ETH',\n 'USDT': 'ERC20',\n 'USDC': 'ERC20',\n 'BTC': 'BTC',\n 'LTC': 'LTC',\n },\n 'networks': {\n 'ABBC': 'ABBC',\n 'ACA': 'ACALA',\n 'ADA': 'Cardano(ADA)',\n 'AE': 'AE',\n 'ALGO': 'Algorand(ALGO)',\n 'ALPH': 'Alephium(ALPH)',\n 'AME': 'AME',\n 'AOK': 'AOK',\n 'APT': 'APTOS(APT)',\n 'AR': 'AR',\n 'ARB': 'Arbitrum One(ARB)',\n 'ARBNOVA': 'ARBNOVA',\n 'ARBONE': 'ArbitrumOne(ARB)',\n 'ARK': 'ARK',\n 'ASTR': 'ASTAR',\n 'ATOM': 'Cosmos(ATOM)',\n 'AVAXC': 'Avalanche C Chain(AVAX CCHAIN)',\n 'AVAXX': 'Avalanche X Chain(AVAX XCHAIN)',\n 'AZERO': 'Aleph Zero(AZERO)',\n 'BCH': 'Bitcoin Cash(BCH)',\n 'BDX': 'BDX',\n 'BEAM': 'BEAM',\n 'BEP2': 'BNB Beacon Chain(BEP2)',\n 'BEP20': 'BNB Smart Chain(BEP20)',\n 'BITCI': 'BITCI',\n 'BNC': 'BNC',\n 'BNCDOT': 'BNCPOLKA',\n 'BOBA': 'BOBA',\n 'BSC': 'BEP20(BSC)',\n 'BSV': 'Bitcoin SV(BSV)',\n 'BTC': 'Bitcoin(BTC)',\n 'BTM': 'BTM2',\n 'CELO': 'CELO',\n 'CFX': 'CFX',\n 'CHZ': 'Chiliz Legacy Chain(CHZ)',\n 'CHZ2': 'Chiliz Chain(CHZ2)',\n 'CKB': 'CKB',\n 'CLORE': 'Clore.ai(CLORE)',\n 'CRC20': 'CRONOS',\n 'CSPR': 'CSPR',\n 'DASH': 'DASH',\n 'DC': 'Dogechain(DC)',\n 'DCR': 'DCR',\n 'DNX': 'Dynex(DNX)',\n 'DOGE': 'Dogecoin(DOGE)',\n 'DOT': 'Polkadot(DOT)',\n 'DYM': 'Dymension(DYM)',\n 'EDG': 'EDG',\n 'EGLD': 'EGLD',\n 'EOS': 'EOS',\n 'ERC20': 'Ethereum(ERC20)',\n 'ETC': 'Ethereum Classic(ETC)',\n 'ETHF': 'ETF',\n 'ETHW': 'ETHW',\n 'EVER': 'EVER',\n 'FET': 'FET',\n 'FIL': 'FIL',\n 'FIO': 'FIO',\n 'FLOW': 'FLOW',\n 'FSN': 'FSN',\n 'FTM': 'Fantom(FTM)',\n 'FUSE': 'FUSE',\n 'GLMR': 'GLMR',\n 'GRIN': 'GRIN',\n 'HBAR': 'Hedera(HBAR)',\n 'HIVE': 'HIVE',\n 'HRC20': 'HECO',\n 'HYDRA': 'HYDRA',\n 'ICP': 'Internet Computer(ICP)',\n 'INDEX': 'Index Chain',\n 'IOST': 'IOST',\n 'IOTA': 'IOTA',\n 'IOTX': 'IOTX',\n 'IRIS': 'IRIS',\n 'KAR': 'KAR',\n 'KAS': 'Kaspa(KAS)',\n 'KAVA': 'KAVA',\n 'KDA': 'KDA',\n 'KILT': 'KILT',\n 'KLAY': 'Klaytn(KLAY)',\n 'KMA': 'KMA',\n 'KSM': 'KSM',\n 'LAT': 'LAT',\n 'LAVA': 'Elysium(LAVA)',\n 'LTC': 'Litecoin(LTC)',\n 'LUNA': 'Terra(LUNA)',\n 'MASS': 'MASS',\n 'MATIC': 'Polygon(MATIC)',\n 'MCOIN': 'Mcoin Network',\n 'METIS': 'METIS',\n 'MINA': 'MINA',\n 'MNT': 'Mantle(MNT)',\n 'MOVR': 'MOVR',\n 'MTRG': 'Meter(MTRG)',\n 'NAS': 'NAS',\n 'NEAR': 'NEAR Protocol(NEAR)',\n 'NEBL': 'NEBL',\n 'NEM': 'NEM',\n 'NEO': 'NEO',\n 'NEO3': 'NEO3',\n 'NEOXA': 'Neoxa Network',\n 'NULS': 'NULS',\n 'OASIS': 'ROSE',\n 'OASYS': 'OASYS',\n 'OKC': 'OKT',\n 'OMN': 'Omega Network(OMN)',\n 'OMNI': 'OMNI',\n 'ONE': 'ONE',\n 'ONT': 'ONT',\n 'OPTIMISM': 'Optimism(OP)',\n 'OSMO': 'OSMO',\n 'PLCU': 'PLCU',\n 'POKT': 'POKT',\n 'QKC': 'QKC',\n 'QTUM': 'QTUM',\n 'RAP20': 'RAP20 (Rangers Mainnet)',\n 'REI': 'REI',\n 'RSK': 'RBTC',\n 'RVN': 'Ravencoin(RVN)',\n 'SATOX': 'Satoxcoin(SATOX)',\n 'SC': 'SC',\n 'SCRT': 'SCRT',\n 'SDN': 'SDN',\n 'SGB': 'SGB',\n 'SOL': 'Solana(SOL)',\n 'STAR': 'STAR',\n 'STARK': 'Starknet(STARK)',\n 'STEEM': 'STEEM',\n 'SYS': 'SYS',\n 'TAO': 'Bittensor(TAO)',\n 'TIA': 'Celestia(TIA)',\n 'TOMO': 'TOMO',\n 'TON': 'Toncoin(TON)',\n 'TRC10': 'TRC10',\n 'TRC20': 'Tron(TRC20)',\n 'UGAS': 'UGAS(Ultrain)',\n 'VET': 'VeChain(VET)',\n 'VEX': 'Vexanium(VEX)',\n 'VSYS': 'VSYS',\n 'WAVES': 'WAVES',\n 'WAX': 'WAX',\n 'WEMIX': 'WEMIX',\n 'XCH': 'Chia(XCH)',\n 'XDC': 'XDC',\n 'XEC': 'XEC',\n 'XLM': 'Stellar(XLM)',\n 'XMR': 'Monero(XMR)',\n 'XNA': 'Neurai(XNA)',\n 'XPR': 'XPR Network',\n 'XRD': 'XRD',\n 'XRP': 'Ripple(XRP)',\n 'XTZ': 'XTZ',\n 'XVG': 'XVG',\n 'XYM': 'XYM',\n 'ZEC': 'ZEC',\n 'ZEN': 'ZEN',\n 'ZIL': 'Zilliqa(ZIL)',\n 'ZTG': 'ZTG',\n // todo: uncomment below after concensus\n // 'ALAYA': 'ATP',\n // 'ANDUSCHAIN': 'DEB',\n // 'ASSETMANTLE': 'MNTL',\n // 'AXE': 'AXE',\n // 'BITCOINHD': 'BHD',\n // 'BITCOINVAULT': 'BTCV',\n // 'BITKUB': 'KUB',\n // 'BITSHARES_OLD': 'BTS',\n // 'BITSHARES': 'NBS',\n // 'BYTZ': 'BYTZ',\n // 'CANTO': 'CANTO', // CANTOEVM\n // 'CENNZ': 'CENNZ',\n // 'CHAINX': 'PCX',\n // 'CONCODRIUM': 'CCD',\n // 'CONTENTVALUENETWORK': 'CVNT',\n // 'CORTEX': 'CTXC',\n // 'CYPHERIUM': 'CPH',\n // 'DANGNN': 'DGC',\n // 'DARWINIASMARTCHAIN': 'Darwinia Smart Chain',\n // 'DHEALTH': 'DHP',\n // 'DOGECOIN': [ 'DOGE', 'DOGECHAIN' ], // todo after unification\n // 'DRAC': 'DRAC',\n // 'DRAKEN': 'DRK',\n // 'ECOCHAIN': 'ECOC',\n // 'ELECTRAPROTOCOL': 'XEP',\n // 'EMERALD': 'EMERALD', // sits on top of OASIS\n // 'EVMOS': 'EVMOS', // EVMOSETH is different\n // 'EXOSAMA': 'SAMA',\n // 'FIBOS': 'FO',\n // 'FILECASH': 'FIC',\n // 'FIRMACHAIN': 'FCT',\n // 'FIRO': 'XZC',\n // 'FNCY': 'FNCY',\n // 'FRUITS': 'FRTS',\n // 'GLEEC': 'GLEEC',\n // 'GXCHAIN': 'GXC',\n // 'HANDSHAKE': 'HNS',\n // 'HPB': 'HPB',\n // 'HSHARE': 'HC',\n // 'HUAHUA': 'HUAHUA',\n // 'HUPAYX': 'HPX',\n // 'INDEXCHAIN': 'IDX',\n // 'INTCHAIN': 'INT',\n // 'INTEGRITEE': 'TEER',\n // 'INTERLAY': 'INTR',\n // 'IOEX': 'IOEX',\n // 'JUNO': 'JUNO',\n // 'KASPA': 'KASPA',\n // 'KEKCHAIN': 'KEKCHAIN',\n // 'KINTSUGI': 'KINT',\n // 'KOINOS': 'KOINOS',\n // 'KONSTELLATION': 'DARC',\n // 'KUJIRA': 'KUJI',\n // 'KULUPU': 'KLP',\n // 'LBRY': 'LBC',\n // 'LEDGIS': 'LED',\n // 'LIGHTNINGBITCOIN': 'LBTC',\n // 'LINE': 'LINE',\n // 'MDNA': 'DNA',\n // 'MDUKEY': 'MDU',\n // 'METAMUI': 'MMUI',\n // 'METAVERSE_ETP': 'ETP',\n // 'METER': 'MTRG',\n // 'MEVERSE': 'MEVerse',\n // 'NEWTON': 'NEW',\n // 'NODLE': 'NODLE',\n // 'ORIGYN': 'OGY',\n // 'PAC': 'PAC',\n // 'PASTEL': 'PSL',\n // 'PHALA': 'Khala',\n // 'PLEX': 'PLEX',\n // 'PMG': 'PMG',\n // 'POINT': 'POINT', // POINTEVM is different\n // 'PROOFOFMEMES': 'POM',\n // 'PROXIMAX': 'XPX',\n // 'RCHAIN': 'REV',\n // 'REBUS': 'REBUS', // REBUSEVM is different\n // 'RIZON': 'ATOLO',\n // 'SENTINEL': 'DVPN',\n // 'SERO': 'SERO',\n // 'TECHPAY': 'TPC',\n // 'TELOSCOIN': 'TLOS', // todo\n // 'TERRA': 'LUNA2',\n // 'TERRACLASSIC': 'LUNC',\n // 'TLOS': 'TELOS', // todo\n // 'TOMAINFO': 'TON',\n // 'TONGTONG': 'TTC',\n // 'TURTLECOIN': 'TRTL',\n // 'ULORD': 'UT',\n // 'ULTRAIN': 'UGAS',\n // 'UMEE': 'UMEE',\n // 'VDIMENSION': 'VOLLAR',\n // 'VEXANIUM': 'VEX',\n // 'VNT': 'VNT',\n // 'WAYKICHAIN': 'WICC',\n // 'WHITECOIN': 'XWC',\n // 'WITNET': 'WIT',\n // 'XDAI': 'XDAI',\n // 'XX': 'XX',\n // 'YAS': 'YAS',\n // 'ZENITH': 'ZENITH',\n // 'ZKSYNC': 'ZKSYNC',\n // // 'BAJUN': '',\n // OKB <> OKT (for usdt it's exception) for OKC, PMEER, FLARE, STRD, ZEL, FUND, \"NONE\", CRING, FREETON, QTZ (probably unique network is meant), HT, BSC(RACAV1), BSC(RACAV2), AMBROSUS, BAJUN, NOM. their individual info is at https://www.mexc.com/api/platform/asset/spot/{COINNAME}\n },\n 'networksById': {\n 'Aleph Zero(AZERO)': 'AZERO',\n 'Alephium(ALPH)': 'ALPH',\n 'Algorand(ALGO)': 'ALGO',\n 'APTOS(APT)': 'APT',\n 'Arbitrum One(ARB)': 'ARB',\n 'Avalanche C Chain(AVAX CCHAIN)': 'AVAXC',\n 'Avalanche X Chain(AVAX XCHAIN)': 'AVAXX',\n 'BEP20(BSC)': 'BSC',\n 'Bitcoin Cash(BCH)': 'BCH',\n 'Bitcoin SV(BSV)': 'BSV',\n 'Bitcoin(BTC)': 'BTC',\n 'Bittensor(TAO)': 'TAO',\n 'BNB Beacon Chain(BEP2)': 'BEP2',\n 'BNB Smart Chain(BEP20-RACAV1)': 'BSC',\n 'BNB Smart Chain(BEP20-RACAV2)': 'BSC',\n 'BNB Smart Chain(BEP20)': 'BSC',\n 'Cardano(ADA)': 'ADA',\n 'Celestia(TIA)': 'TIA',\n 'Chia(XCH)': 'XCH',\n 'Chiliz Chain(CHZ2)': 'CHZ2',\n 'Chiliz Legacy Chain(CHZ)': 'CHZ',\n 'Clore.ai(CLORE)': 'CLORE',\n 'Cosmos(ATOM)': 'ATOM',\n 'Dogechain(DC)': 'DC',\n 'Dogecoin(DOGE)': 'DOGE',\n 'Dymension(DYM)': 'DYM',\n 'Dynex(DNX)': 'DNX',\n 'Elysium(LAVA)': 'LAVA',\n 'Ethereum Classic(ETC)': 'ETC',\n 'Ethereum(ERC20)': 'ERC20',\n 'Fantom(FTM)': 'FTM',\n 'Hedera(HBAR)': 'HBAR',\n 'Index Chain': 'INDEX',\n 'Internet Computer(ICP)': 'ICP',\n 'Kaspa(KAS)': 'KAS',\n 'Klaytn(KLAY)': 'KLAY',\n 'Litecoin(LTC)': 'LTC',\n 'Mantle(MNT)': 'MNT',\n 'Mcoin Network': 'MCOIN',\n 'Meter(MTRG)': 'MTRG',\n 'Monero(XMR)': 'XMR',\n 'NEAR Protocol(NEAR)': 'NEAR',\n 'Neoxa Network': 'NEOXA',\n 'Neurai(XNA)': 'XNA',\n 'Omega Network(OMN)': 'OMN',\n 'Optimism(OP)': 'OPTIMISM',\n 'Polkadot(DOT)': 'DOT',\n 'Polygon(MATIC)': 'MATIC',\n 'RAP20 (Rangers Mainnet)': 'RAP20',\n 'Ravencoin(RVN)': 'RVN',\n 'Ripple(XRP)': 'XRP',\n 'Satoxcoin(SATOX)': 'SATOX',\n 'Solana(SOL)': 'SOL',\n 'Starknet(STARK)': 'STARK',\n 'Stellar(XLM)': 'XLM',\n 'Terra(LUNA)': 'LUNA',\n 'Toncoin(TON)': 'TON',\n 'Tron(TRC20)': 'TRC20',\n 'UGAS(Ultrain)': 'UGAS',\n 'VeChain(VET)': 'VET',\n 'Vexanium(VEX)': 'VEX',\n 'XPR Network': 'XPR',\n 'Zilliqa(ZIL)': 'ZIL',\n // TODO: uncomment below after deciding unified name\n // 'PEPE COIN BSC':\n // 'SMART BLOCKCHAIN':\n // 'f(x)Core':\n // 'Syscoin Rollux':\n // 'Syscoin UTXO':\n // 'zkSync Era':\n // 'zkSync Lite':\n // 'Darwinia Smart Chain':\n // 'Arbitrum One(ARB-Bridged)':\n // 'Optimism(OP-Bridged)':\n // 'Polygon(MATIC-Bridged)':\n },\n 'recvWindow': 5 * 1000,\n 'maxTimeTillEnd': 90 * 86400 * 1000 - 1,\n 'broker': 'CEDE',\n 'accountsByType': {\n 'spot': 'SPOT',\n 'swap': 'FUTURES',\n 'margin': 'ISOLATED_MARGIN',\n },\n },\n 'exceptions': {\n 'exact': {\n // until mexc migrates fully to v3, it might be worth to note the version & market aside errors, not easily remove obsolete version's exceptions in future\n '-1128': ExchangeError,\n '-2011': ExchangeError,\n '-1121': InvalidParamsError,\n '10101': InsufficientBalanceError,\n '2009': TradeError,\n '2011': ExchangeError,\n '30004': InsufficientBalanceError,\n '33333': InvalidParamsError,\n '44444': ExchangeError,\n '1002': TradeError,\n '30019': ExchangeNotAllowedMethodError,\n '30005': TradeError,\n '2003': TradeError,\n '2005': InsufficientBalanceError,\n '400': InvalidParamsError,\n // '500': OnMaintenance, // {\"code\": 500,\"message\": \"Under maintenance, please try again later\",\"announcement\": \"https://www.mexc.com/support/articles/17827791510263\"}\n '600': ExchangeError,\n '70011': ExchangeInvalidPermissionsError,\n '88004': InsufficientBalanceError,\n '88009': ExchangeError,\n '88013': InvalidParamsError,\n '88015': InsufficientBalanceError,\n '700003': ExchangeInvalidNonceError,\n '26': ExchangeError,\n '602': AuthenticationError,\n '10001': AuthenticationError,\n '10007': InvalidParamsError,\n '10015': InvalidParamsError,\n '10072': AuthenticationError,\n '10073': ExchangeRequestExpiredError,\n '10095': InvalidParamsError,\n '10096': InvalidParamsError,\n '10097': InvalidParamsError,\n '10098': TradeError,\n '10099': ExchangeError,\n '10100': ExchangeUnknownAssetError,\n '10102': InvalidParamsError,\n '10103': ExchangeError,\n '10200': ExchangeTransferError,\n '10201': ExchangeTransferError,\n '10202': ExchangeTransferError,\n '10206': ExchangeTransferNotAllowedError,\n '10211': ExchangeTransferNotAllowedError,\n '10212': WithdrawalError,\n '10216': ExchangeError,\n '10219': ExchangeError,\n '10222': InvalidParamsError,\n '10232': ExchangeUnknownAssetError,\n '10259': ExchangeError,\n '10265': ExchangeError,\n '10268': InvalidParamsError,\n '20001': ExchangeError,\n '20002': ExchangeError,\n '22222': ExchangeError,\n '30000': ExchangeError,\n '30001': TradeError,\n '30002': InvalidParamsError,\n '30003': InvalidParamsError,\n '30010': InvalidParamsError,\n '30014': InvalidParamsError,\n '30016': TradeError,\n '30018': ExchangeAccountSuspendedError,\n '30020': AuthenticationError,\n '30021': InvalidParamsError,\n '30025': TradeError,\n '30026': OrderNotFoundError,\n '30027': TradeError,\n '30028': TradeError,\n '30029': TradeError,\n '30032': TradeError,\n '30041': TradeError,\n '60005': ExchangeError,\n '700001': AuthenticationError,\n '700002': AuthenticationError,\n '700004': InvalidParamsError,\n '700005': ExchangeInvalidNonceError,\n '700006': ExchangeInvalidPermissionsError,\n '700007': ExchangeInvalidPermissionsError,\n '700008': InvalidParamsError,\n '730001': MarketNotFoundError,\n '730002': InvalidParamsError,\n '730000': ExchangeError,\n '730003': ExchangeError,\n '730100': ExchangeError,\n '730600': ExchangeError,\n '730601': ExchangeError,\n '730602': ExchangeError,\n '730700': ExchangeError,\n '730701': ExchangeError,\n '730702': ExchangeError,\n '730703': ExchangeError,\n '730704': ExchangeError,\n '730705': ExchangeError,\n '730706': AuthenticationError,\n '730707': AuthenticationError,\n '730101': ExchangeError,\n '140001': ExchangeError,\n '140002': AuthenticationError,\n '152046': WhitelistCheckFailedError, // Unable to withdraw to this address. Please contact the relevant business party.\n },\n 'broad': {\n 'Order quantity error, please try to modify.': InvalidParamsError,\n 'Combination of optional parameters invalid': InvalidParamsError,\n 'api market order is disabled': ExchangeNotAllowedMethodError,\n 'Contract not allow place order!': TradeError,\n 'Oversold': TradeError,\n 'Insufficient position': InsufficientBalanceError,\n 'Insufficient balance!': InsufficientBalanceError,\n 'Bid price is great than max allow price': InvalidParamsError,\n 'Invalid symbol.': InvalidParamsError,\n 'Param error!': InvalidParamsError,\n 'maintenance': ExchangeUnderMaintenanceError, // {\"code\": 500,\"message\": \"Under maintenance, please try again later\",\"announcement\": \"https://www.mexc.com/support/articles/17827791510263\"}\n },\n },\n });\n }\n async fetchStatus(params = {}) {\n /**\n * @method\n * @name mexc#fetchStatus\n * @description the latest known information on the availability of the exchange API\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} a [status structure]{@link https://docs.ccxt.com/#/?id=exchange-status-structure}\n */\n const [marketType, query] = this.handleMarketTypeAndParams('fetchStatus', undefined, params);\n let response = undefined;\n let status = undefined;\n let updated = undefined;\n if (marketType === 'spot') {\n response = await this.spotPublicGetPing(query);\n //\n // {}\n //\n const keys = Object.keys(response);\n const length = keys.length;\n status = length ? this.json(response) : 'ok';\n }\n else if (marketType === 'swap') {\n response = await this.contractPublicGetPing(query);\n //\n // {\"success\":true,\"code\":\"0\",\"data\":\"1648124374985\"}\n //\n status = this.safeValue(response, 'success') ? 'ok' : this.json(response);\n updated = this.safeInteger(response, 'data');\n }\n return {\n 'status': status,\n 'updated': updated,\n 'url': undefined,\n 'eta': undefined,\n 'info': response,\n };\n }\n async fetchTime(params = {}) {\n /**\n * @method\n * @name mexc#fetchTime\n * @description fetches the current integer timestamp in milliseconds from the exchange server\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {int} the current integer timestamp in milliseconds from the exchange server\n */\n const [marketType, query] = this.handleMarketTypeAndParams('fetchTime', undefined, params);\n let response = undefined;\n if (marketType === 'spot') {\n response = await this.spotPublicGetTime(query);\n //\n // {\"serverTime\": \"1647519277579\"}\n //\n return this.safeInteger(response, 'serverTime');\n }\n else if (marketType === 'swap') {\n response = await this.contractPublicGetPing(query);\n //\n // {\"success\":true,\"code\":\"0\",\"data\":\"1648124374985\"}\n //\n return this.safeInteger(response, 'data');\n }\n return undefined;\n }\n nonce() {\n return this.milliseconds() - this.options['timeDifference'];\n }\n isUsingForcedProxy(params = {}, api = []) {\n const authentication = api[1];\n if (authentication === 'private') {\n return true;\n }\n return false;\n }\n async fetchCurrencies(params = {}) {\n /**\n * @method\n * @name mexc#fetchCurrencies\n * @description fetches all available currencies on an exchange\n * @see https://mexcdevelop.github.io/apidocs/spot_v3_en/#query-the-currency-information\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} an associative dictionary of currencies\n */\n // this endpoint requires authentication\n // while fetchCurrencies is a public API method by design\n // therefore we check the keys here\n // and fallback to generating the currencies from the markets\n if (!this.checkRequiredCredentials(false)) {\n return undefined;\n }\n const response = await this.spotPrivateGetCapitalConfigGetall(params);\n //\n // {\n // \"coin\": \"QANX\",\n // \"name\": \"QANplatform\",\n // \"networkList\": [\n // {\n // \"coin\": \"QANX\",\n // \"depositDesc\": null,\n // \"depositEnable\": true,\n // \"minConfirm\": \"0\",\n // \"name\": \"QANplatform\",\n // \"network\": \"BEP20(BSC)\",\n // \"withdrawEnable\": false,\n // \"withdrawFee\": \"42.000000000000000000\",\n // \"withdrawIntegerMultiple\": null,\n // \"withdrawMax\": \"24000000.000000000000000000\",\n // \"withdrawMin\": \"20.000000000000000000\",\n // \"sameAddress\": false,\n // \"contract\": \"0xAAA7A10a8ee237ea61E8AC46C50A8Db8bCC1baaa\"\n // },\n // {\n // \"coin\": \"QANX\",\n // \"depositDesc\": null,\n // \"depositEnable\": true,\n // \"minConfirm\": \"0\",\n // \"name\": \"QANplatform\",\n // \"network\": \"ERC20\",\n // \"withdrawEnable\": true,\n // \"withdrawFee\": \"2732.000000000000000000\",\n // \"withdrawIntegerMultiple\": null,\n // \"withdrawMax\": \"24000000.000000000000000000\",\n // \"withdrawMin\": \"240.000000000000000000\",\n // \"sameAddress\": false,\n // \"contract\": \"0xAAA7A10a8ee237ea61E8AC46C50A8Db8bCC1baaa\"\n // }\n // ]\n // }\n //\n const result = {};\n for (let i = 0; i < response.length; i++) {\n const currency = response[i];\n const id = this.safeString(currency, 'coin');\n const code = this.safeCurrencyCode(id);\n const name = this.safeString(currency, 'name');\n let currencyActive = false;\n let currencyFee = undefined;\n let currencyWithdrawMin = undefined;\n let currencyWithdrawMax = undefined;\n let depositEnabled = false;\n let withdrawEnabled = false;\n const networks = {};\n const chains = this.safeValue(currency, 'networkList', []);\n for (let j = 0; j < chains.length; j++) {\n const chain = chains[j];\n const network = this.safeString(chain, 'network');\n const isDepositEnabled = this.safeBool(chain, 'depositEnable', false);\n const isWithdrawEnabled = this.safeBool(chain, 'withdrawEnable', false);\n const active = (isDepositEnabled && isWithdrawEnabled);\n currencyActive = active || currencyActive;\n const withdrawMin = this.safeString(chain, 'withdrawMin');\n const withdrawMax = this.safeString(chain, 'withdrawMax');\n currencyWithdrawMin = (currencyWithdrawMin === undefined) ? withdrawMin : currencyWithdrawMin;\n currencyWithdrawMax = (currencyWithdrawMax === undefined) ? withdrawMax : currencyWithdrawMax;\n const fee = this.safeNumber(chain, 'withdrawFee');\n currencyFee = (currencyFee === undefined) ? fee : currencyFee;\n if (Precise.stringGt(currencyWithdrawMin, withdrawMin)) {\n currencyWithdrawMin = withdrawMin;\n }\n if (Precise.stringLt(currencyWithdrawMax, withdrawMax)) {\n currencyWithdrawMax = withdrawMax;\n }\n if (isDepositEnabled) {\n depositEnabled = true;\n }\n if (isWithdrawEnabled) {\n withdrawEnabled = true;\n }\n networks[network] = {\n 'info': chain,\n 'id': network,\n 'network': network,\n 'active': active,\n 'deposit': isDepositEnabled,\n 'withdraw': isWithdrawEnabled,\n 'fee': fee,\n 'precision': undefined,\n 'limits': {\n 'withdraw': {\n 'min': withdrawMin,\n 'max': withdrawMax,\n },\n },\n };\n }\n const networkKeys = Object.keys(networks);\n const networkKeysLength = networkKeys.length;\n if ((networkKeysLength === 1) || ('NONE' in networks)) {\n const defaultNetwork = this.safeValue2(networks, 'NONE', networkKeysLength - 1);\n if (defaultNetwork !== undefined) {\n currencyFee = defaultNetwork['fee'];\n }\n }\n result[code] = {\n 'info': currency,\n 'id': id,\n 'code': code,\n 'name': name,\n 'active': currencyActive,\n 'deposit': depositEnabled,\n 'withdraw': withdrawEnabled,\n 'fee': currencyFee,\n 'precision': undefined,\n 'limits': {\n 'amount': {\n 'min': undefined,\n 'max': undefined,\n },\n 'withdraw': {\n 'min': currencyWithdrawMin,\n 'max': currencyWithdrawMax,\n },\n },\n 'networks': networks,\n };\n }\n return result;\n }\n async fetchMarkets(params = {}) {\n /**\n * @method\n * @name mexc#fetchMarkets\n * @description retrieves data on all markets for mexc\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object[]} an array of objects representing market data\n */\n const spotMarket = await this.fetchSpotMarkets(params);\n const swapMarket = await this.fetchSwapMarkets(params);\n return this.arrayConcat(spotMarket, swapMarket);\n }\n async fetchSpotMarkets(params = {}) {\n const response = await this.spotPublicGetExchangeInfo(params);\n //\n // {\n // \"timezone\": \"CST\",\n // \"serverTime\": 1647521860402,\n // \"rateLimits\": [],\n // \"exchangeFilters\": [],\n // \"symbols\": [\n // {\n // \"symbol\": \"OGNUSDT\",\n // \"status\": \"ENABLED\",\n // \"baseAsset\": \"OGN\",\n // \"baseAssetPrecision\": \"2\",\n // \"quoteAsset\": \"USDT\",\n // \"quoteAssetPrecision\": \"4\",\n // \"orderTypes\": [\n // \"LIMIT\",\n // \"LIMIT_MAKER\"\n // ],\n // \"baseCommissionPrecision\": \"2\",\n // \"quoteCommissionPrecision\": \"4\",\n // \"quoteOrderQtyMarketAllowed\": false,\n // \"isSpotTradingAllowed\": true,\n // \"isMarginTradingAllowed\": true,\n // \"permissions\": [\n // \"SPOT\",\n // \"MARGIN\"\n // ],\n // \"filters\": [],\n // \"baseSizePrecision\": \"0.01\", // this turned out to be a minimum base amount for order\n // \"maxQuoteAmount\": \"5000000\",\n // \"makerCommission\": \"0.002\",\n // \"takerCommission\": \"0.002\"\n // \"quoteAmountPrecision\": \"5\", // this turned out to be a minimum cost amount for order\n // \"quotePrecision\": \"4\", // deprecated in favor of 'quoteAssetPrecision' ( https://dev.binance.vision/t/what-is-the-difference-between-quoteprecision-and-quoteassetprecision/4333 )\n // // note, \"icebergAllowed\" & \"ocoAllowed\" fields were recently removed\n // },\n // ]\n // }\n //\n // Notes:\n // - 'quoteAssetPrecision' & 'baseAssetPrecision' are not currency's real blockchain precision (to view currency's actual individual precision, refer to fetchCurrencies() method).\n //\n const data = this.safeValue(response, 'symbols', []);\n const result = [];\n for (let i = 0; i < data.length; i++) {\n const market = data[i];\n const id = this.safeString(market, 'symbol');\n const baseId = this.safeString(market, 'baseAsset');\n const quoteId = this.safeString(market, 'quoteAsset');\n const base = this.safeCurrencyCode(baseId);\n const quote = this.safeCurrencyCode(quoteId);\n const status = this.safeString(market, 'status');\n const isSpotTradingAllowed = this.safeValue(market, 'isSpotTradingAllowed');\n let active = false;\n if ((status === 'ENABLED' || status === '1') && (isSpotTradingAllowed)) {\n active = true;\n }\n const isMarginTradingAllowed = this.safeValue(market, 'isMarginTradingAllowed');\n const makerCommission = this.safeNumber(market, 'makerCommission');\n const takerCommission = this.safeNumber(market, 'takerCommission');\n const maxQuoteAmount = this.safeNumber(market, 'maxQuoteAmount');\n result.push({\n 'id': id,\n 'symbol': base + '/' + quote,\n 'base': base,\n 'quote': quote,\n 'settle': undefined,\n 'baseId': baseId,\n 'quoteId': quoteId,\n 'settleId': undefined,\n 'type': 'spot',\n 'spot': true,\n 'margin': isMarginTradingAllowed,\n 'swap': false,\n 'future': false,\n 'option': false,\n 'active': active,\n 'contract': false,\n 'linear': undefined,\n 'inverse': undefined,\n 'taker': takerCommission,\n 'maker': makerCommission,\n 'contractSize': undefined,\n 'expiry': undefined,\n 'expiryDatetime': undefined,\n 'strike': undefined,\n 'optionType': undefined,\n 'precision': {\n 'amount': this.parseNumber(this.parsePrecision(this.safeString(market, 'baseAssetPrecision'))),\n 'price': this.parseNumber(this.parsePrecision(this.safeString(market, 'quoteAssetPrecision'))),\n },\n 'limits': {\n 'leverage': {\n 'min': undefined,\n 'max': undefined,\n },\n 'amount': {\n 'min': this.safeNumber(market, 'baseSizePrecision'),\n 'max': undefined,\n },\n 'price': {\n 'min': undefined,\n 'max': undefined,\n },\n 'cost': {\n 'min': this.safeNumber(market, 'quoteAmountPrecision'),\n 'max': maxQuoteAmount,\n },\n },\n 'created': undefined,\n 'info': market,\n });\n }\n return result;\n }\n async fetchSwapMarkets(params = {}) {\n const response = await this.contractPublicGetDetail(params);\n //\n // {\n // \"success\":true,\n // \"code\":0,\n // \"data\":[\n // {\n // \"symbol\":\"BTC_USDT\",\n // \"displayName\":\"BTC_USDT永续\",\n // \"displayNameEn\":\"BTC_USDT SWAP\",\n // \"positionOpenType\":3,\n // \"baseCoin\":\"BTC\",\n // \"quoteCoin\":\"USDT\",\n // \"settleCoin\":\"USDT\",\n // \"contractSize\":0.0001,\n // \"minLeverage\":1,\n // \"maxLeverage\":125,\n // \"priceScale\":2, // seems useless atm, as it's just how UI shows the price, i.e. 29583.50 for BTC/USDT:USDT, while price ticksize is 0.5\n // \"volScale\":0, // probably: contract amount precision\n // \"amountScale\":4, // probably: quote currency precision\n // \"priceUnit\":0.5, // price tick size\n // \"volUnit\":1, // probably: contract tick size\n // \"minVol\":1,\n // \"maxVol\":1000000,\n // \"bidLimitPriceRate\":0.1,\n // \"askLimitPriceRate\":0.1,\n // \"takerFeeRate\":0.0006,\n // \"makerFeeRate\":0.0002,\n // \"maintenanceMarginRate\":0.004,\n // \"initialMarginRate\":0.008,\n // \"riskBaseVol\":10000,\n // \"riskIncrVol\":200000,\n // \"riskIncrMmr\":0.004,\n // \"riskIncrImr\":0.004,\n // \"riskLevelLimit\":5,\n // \"priceCoefficientVariation\":0.1,\n // \"indexOrigin\":[\"BINANCE\",\"GATEIO\",\"HUOBI\",\"MXC\"],\n // \"state\":0, // 0 enabled, 1 delivery, 2 completed, 3 offline, 4 pause\n // \"isNew\":false,\n // \"isHot\":true,\n // \"isHidden\":false\n // },\n // ]\n // }\n //\n const data = this.safeValue(response, 'data', []);\n const result = [];\n for (let i = 0; i < data.length; i++) {\n const market = data[i];\n const id = this.safeString(market, 'symbol');\n const baseId = this.safeString(market, 'baseCoin');\n const quoteId = this.safeString(market, 'quoteCoin');\n const settleId = this.safeString(market, 'settleCoin');\n const base = this.safeCurrencyCode(baseId);\n const quote = this.safeCurrencyCode(quoteId);\n const settle = this.safeCurrencyCode(settleId);\n const state = this.safeString(market, 'state');\n result.push({\n 'id': id,\n 'symbol': base + '/' + quote + ':' + settle,\n 'base': base,\n 'quote': quote,\n 'settle': settle,\n 'baseId': baseId,\n 'quoteId': quoteId,\n 'settleId': settleId,\n 'type': 'swap',\n 'spot': false,\n 'margin': false,\n 'swap': true,\n 'future': false,\n 'option': false,\n 'active': (state === '0'),\n 'contract': true,\n 'linear': true,\n 'inverse': false,\n 'taker': this.safeNumber(market, 'takerFeeRate'),\n 'maker': this.safeNumber(market, 'makerFeeRate'),\n 'contractSize': this.safeNumber(market, 'contractSize'),\n 'expiry': undefined,\n 'expiryDatetime': undefined,\n 'strike': undefined,\n 'optionType': undefined,\n 'precision': {\n 'amount': this.safeNumber(market, 'volUnit'),\n 'price': this.safeNumber(market, 'priceUnit'),\n },\n 'limits': {\n 'leverage': {\n 'min': this.safeNumber(market, 'minLeverage'),\n 'max': this.safeNumber(market, 'maxLeverage'),\n },\n 'amount': {\n 'min': this.safeNumber(market, 'minVol'),\n 'max': this.safeNumber(market, 'maxVol'),\n },\n 'price': {\n 'min': undefined,\n 'max': undefined,\n },\n 'cost': {\n 'min': undefined,\n 'max': undefined,\n },\n },\n 'created': undefined,\n 'info': market,\n });\n }\n return result;\n }\n async fetchOrderBook(symbol, limit = undefined, params = {}) {\n /**\n * @method\n * @name mexc#fetchOrderBook\n * @see https://mexcdevelop.github.io/apidocs/spot_v3_en/#order-book\n * @see https://mexcdevelop.github.io/apidocs/contract_v1_en/#get-the-contract-s-depth-information\n * @description fetches information on open orders with bid (buy) and ask (sell) prices, volumes and other data\n * @param {string} symbol unified symbol of the market to fetch the order book for\n * @param {int} [limit] the maximum amount of order book entries to return\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} A dictionary of [order book structures]{@link https://docs.ccxt.com/#/?id=order-book-structure} indexed by market symbols\n */\n await this.loadMarkets();\n const market = this.market(symbol);\n const request = {\n 'symbol': market['id'],\n };\n if (limit !== undefined) {\n request['limit'] = limit;\n }\n let orderbook = undefined;\n if (market['spot']) {\n const response = await this.spotPublicGetDepth(this.extend(request, params));\n //\n // {\n // \"lastUpdateId\": \"744267132\",\n // \"bids\": [\n // [\"40838.50\",\"0.387864\"],\n // [\"40837.95\",\"0.008400\"],\n // ],\n // \"asks\": [\n // [\"40838.61\",\"6.544908\"],\n // [\"40838.88\",\"0.498000\"],\n // ]\n // }\n //\n const spotTimestamp = this.safeInteger(response, 'timestamp');\n orderbook = this.parseOrderBook(response, symbol, spotTimestamp);\n orderbook['nonce'] = this.safeInteger(response, 'lastUpdateId');\n }\n else if (market['swap']) {\n const response = await this.contractPublicGetDepthSymbol(this.extend(request, params));\n //\n // {\n // \"success\":true,\n // \"code\":0,\n // \"data\":{\n // \"asks\":[\n // [3445.72,48379,1],\n // [3445.75,34994,1],\n // ],\n // \"bids\":[\n // [3445.55,44081,1],\n // [3445.51,24857,1],\n // ],\n // \"version\":2827730444,\n // \"timestamp\":1634117846232\n // }\n // }\n //\n const data = this.safeValue(response, 'data');\n const timestamp = this.safeInteger(data, 'timestamp');\n orderbook = this.parseOrderBook(data, symbol, timestamp);\n orderbook['nonce'] = this.safeInteger(data, 'version');\n }\n return orderbook;\n }\n parseBidAsk(bidask, priceKey = 0, amountKey = 1, countOrIdKey = 2) {\n const countKey = 2;\n const price = this.safeNumber(bidask, priceKey);\n const amount = this.safeNumber(bidask, amountKey);\n const count = this.safeNumber(bidask, countKey);\n if (count !== undefined) {\n return [price, amount, count];\n }\n return [price, amount];\n }\n async fetchTrades(symbol, since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name mexc#fetchTrades\n * @see https://mexcdevelop.github.io/apidocs/spot_v3_en/#recent-trades-list\n * @see https://mexcdevelop.github.io/apidocs/spot_v3_en/#compressed-aggregate-trades-list\n * @see https://mexcdevelop.github.io/apidocs/contract_v1_en/#get-contract-transaction-data\n * @description get the list of most recent trades for a particular symbol\n * @param {string} symbol unified symbol of the market to fetch trades for\n * @param {int} [since] timestamp in ms of the earliest trade to fetch\n * @param {int} [limit] the maximum amount of trades to fetch\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {int} [params.until] *spot only* *since must be defined* the latest time in ms to fetch entries for\n * @returns {Trade[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=public-trades}\n */\n await this.loadMarkets();\n const market = this.market(symbol);\n const request = {\n 'symbol': market['id'],\n };\n if (limit !== undefined) {\n request['limit'] = limit;\n }\n let trades = undefined;\n if (market['spot']) {\n const until = this.safeIntegerN(params, ['endTime', 'until', 'till']);\n if (since !== undefined) {\n request['startTime'] = since;\n if (until === undefined) {\n throw new InvalidParamsError('fetchTrades() requires an until parameter when since is provided')\n .exchange(this.id);\n }\n }\n if (until !== undefined) {\n if (since === undefined) {\n throw new InvalidParamsError('fetchTrades() requires a since parameter when until is provided')\n .exchange(this.id);\n }\n request['endTime'] = until;\n }\n let method = this.safeString(this.options, 'fetchTradesMethod', 'spotPublicGetAggTrades');\n method = this.safeString(params, 'method', method); // AggTrades, HistoricalTrades, Trades\n params = this.omit(params, ['method']);\n if (method === 'spotPublicGetAggTrades') {\n trades = await this.spotPublicGetAggTrades(this.extend(request, params));\n }\n else if (method === 'spotPublicGetHistoricalTrades') {\n trades = await this.spotPublicGetHistoricalTrades(this.extend(request, params));\n }\n else if (method === 'spotPublicGetTrades') {\n trades = await this.spotPublicGetTrades(this.extend(request, params));\n }\n else {\n throw new ExchangeNotAllowedMethodError(method)\n .addMessage('fetchTrades() not support this method')\n .exchange(this.id);\n }\n //\n // /trades, /historicalTrades\n //\n // [\n // {\n // \"id\": null,\n // \"price\": \"40798.94\",\n // \"qty\": \"0.000508\",\n // \"quoteQty\": \"20.72586152\",\n // \"time\": \"1647546934374\",\n // \"isBuyerMaker\": true,\n // \"isBestMatch\": true\n // },\n // ]\n //\n // /aggrTrades\n //\n // [\n // {\n // \"a\": null,\n // \"f\": null,\n // \"l\": null,\n // \"p\": \"40679\",\n // \"q\": \"0.001309\",\n // \"T\": 1647551328000,\n // \"m\": true,\n // \"M\": true\n // },\n // ]\n //\n }\n else if (market['swap']) {\n const response = await this.contractPublicGetDealsSymbol(this.extend(request, params));\n //\n // {\n // \"success\": true,\n // \"code\": 0,\n // \"data\": [\n // {\n // \"p\": 31199,\n // \"v\": 18,\n // \"T\": 1,\n // \"O\": 3,\n // \"M\": 2,\n // \"t\": 1609831235985\n // },\n // ]\n // }\n //\n trades = this.safeValue(response, 'data');\n }\n return this.parseTrades(trades, market, since, limit);\n }\n parseTrade(trade, market = undefined) {\n let id = undefined;\n let timestamp = undefined;\n let orderId = undefined;\n let symbol = undefined;\n let fee = undefined;\n const type = undefined;\n let side = undefined;\n let takerOrMaker = undefined;\n let priceString = undefined;\n let amountString = undefined;\n let costString = undefined;\n // if swap\n if ('v' in trade) {\n //\n // swap: fetchTrades\n //\n // {\n // \"p\": 31199,\n // \"v\": 18,\n // \"T\": 1,\n // \"O\": 3,\n // \"M\": 2,\n // \"t\": 1609831235985\n // }\n //\n timestamp = this.safeInteger(trade, 't');\n market = this.safeMarket(undefined, market);\n symbol = market['symbol'];\n priceString = this.safeString(trade, 'p');\n amountString = this.safeString(trade, 'v');\n side = this.parseOrderSide(this.safeString(trade, 'T'));\n takerOrMaker = 'taker';\n }\n else {\n //\n // spot: fetchTrades (for aggTrades)\n //\n // {\n // \"a\": null,\n // \"f\": null,\n // \"l\": null,\n // \"p\": \"40679\",\n // \"q\": \"0.001309\",\n // \"T\": 1647551328000,\n // \"m\": true,\n // \"M\": true\n // }\n //\n // spot: fetchMyTrades, fetchOrderTrades\n //\n // {\n // \"symbol\": \"BTCUSDT\",\n // \"id\": \"133948532984922113\",\n // \"orderId\": \"133948532531949568\",\n // \"orderListId\": \"-1\",\n // \"price\": \"41995.51\",\n // \"qty\": \"0.0002\",\n // \"quoteQty\": \"8.399102\",\n // \"commission\": \"0.016798204\",\n // \"commissionAsset\": \"USDT\",\n // \"time\": \"1647718055000\",\n // \"isBuyer\": true,\n // \"isMaker\": false,\n // \"isBestMatch\": true\n // }\n //\n // swap: fetchMyTrades, fetchOrderTrades\n //\n // {\n // \"id\": \"299444585\",\n // \"symbol\": \"STEPN_USDT\",\n // \"side\": \"1\",\n // \"vol\": \"1\",\n // \"price\": \"2.45455\",\n // \"feeCurrency\": \"USDT\",\n // \"fee\": \"0.00147273\",\n // \"timestamp\": \"1648924557000\",\n // \"profit\": \"0\",\n // \"category\": \"1\",\n // \"orderId\": \"265307163526610432\",\n // \"positionMode\": \"1\",\n // \"taker\": true\n // }\n //\n const marketId = this.safeString(trade, 'symbol');\n market = this.safeMarket(marketId, market);\n symbol = market['symbol'];\n id = this.safeString2(trade, 'id', 'a');\n priceString = this.safeString2(trade, 'price', 'p');\n orderId = this.safeString(trade, 'orderId');\n // if swap\n if ('positionMode' in trade) {\n timestamp = this.safeInteger(trade, 'timestamp');\n amountString = this.safeString(trade, 'vol');\n side = this.parseOrderSide(this.safeString(trade, 'side'));\n fee = {\n 'cost': this.safeString(trade, 'fee'),\n 'currency': this.safeCurrencyCode(this.safeString(trade, 'feeCurrency')),\n };\n takerOrMaker = this.safeValue(trade, 'taker') ? 'taker' : 'maker';\n }\n else {\n timestamp = this.safeInteger2(trade, 'time', 'T');\n amountString = this.safeString2(trade, 'qty', 'q');\n costString = this.safeString(trade, 'quoteQty');\n const isBuyer = this.safeValue(trade, 'isBuyer');\n const isMaker = this.safeValue(trade, 'isMaker');\n const buyerMaker = this.safeValue2(trade, 'isBuyerMaker', 'm');\n if (isMaker !== undefined) {\n takerOrMaker = isMaker ? 'maker' : 'taker';\n }\n if (isBuyer !== undefined) {\n side = isBuyer ? 'buy' : 'sell';\n }\n if (buyerMaker !== undefined) {\n side = buyerMaker ? 'sell' : 'buy';\n takerOrMaker = 'taker';\n }\n const feeAsset = this.safeString(trade, 'commissionAsset');\n if (feeAsset !== undefined) {\n fee = {\n 'cost': this.safeString(trade, 'commission'),\n 'currency': this.safeCurrencyCode(feeAsset),\n };\n }\n }\n }\n if (id === undefined) {\n id = this.syntheticTradeId(market, timestamp, side, amountString, priceString, type, takerOrMaker);\n }\n return this.safeTrade({\n 'id': id,\n 'order': orderId,\n 'timestamp': timestamp,\n 'datetime': this.iso8601(timestamp),\n 'symbol': symbol,\n 'type': type,\n 'side': side,\n 'takerOrMaker': takerOrMaker,\n 'price': priceString,\n 'amount': amountString,\n 'cost': costString,\n 'fee': fee,\n 'info': trade,\n }, market);\n }\n syntheticTradeId(market = undefined, timestamp = undefined, side = undefined, amount = undefined, price = undefined, orderType = undefined, takerOrMaker = undefined) {\n // TODO: can be unified method? this approach is being used by multiple exchanges (mexc, woo-coinsbit, dydx, ...)\n let id = '';\n if (timestamp !== undefined) {\n id = this.numberToString(timestamp) + '-' + this.safeString(market, 'id', '_');\n if (side !== undefined) {\n id += '-' + side;\n }\n if (amount !== undefined) {\n id += '-' + this.numberToString(amount);\n }\n if (price !== undefined) {\n id += '-' + this.numberToString(price);\n }\n if (takerOrMaker !== undefined) {\n id += '-' + takerOrMaker;\n }\n if (orderType !== undefined) {\n id += '-' + orderType;\n }\n }\n return id;\n }\n async fetchOHLCV(symbol, timeframe = '1m', since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name mexc#fetchOHLCV\n * @see https://mexcdevelop.github.io/apidocs/spot_v3_en/#kline-candlestick-data\n * @see https://mexcdevelop.github.io/apidocs/contract_v1_en/#k-line-data\n * @description fetches historical candlestick data containing the open, high, low, and close price, and the volume of a market\n * @param {string} symbol unified symbol of the market to fetch OHLCV data for\n * @param {string} timeframe the length of time each candle represents\n * @param {int} [since] timestamp in ms of the earliest candle to fetch\n * @param {int} [limit] the maximum amount of candles to fetch\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {int} [params.until] timestamp in ms of the latest candle to fetch\n * @param {boolean} [params.paginate] default false, when true will automatically paginate by calling this endpoint multiple times. See in the docs all the [availble parameters](https://github.com/ccxt/ccxt/wiki/Manual#pagination-params)\n * @returns {int[][]} A list of candles ordered as timestamp, open, high, low, close, volume\n */\n await this.loadMarkets();\n const market = this.market(symbol);\n const maxLimit = (market['spot']) ? 1000 : 2000;\n let paginate = false;\n [paginate, params] = this.handleOptionAndParams(params, 'fetchOHLCV', 'paginate', false);\n if (paginate) {\n return await this.fetchPaginatedCallDeterministic('fetchOHLCV', symbol, since, limit, timeframe, params, maxLimit);\n }\n const options = this.safeValue(this.options, 'timeframes', {});\n const timeframes = this.safeValue(options, market['type'], {});\n const timeframeValue = this.safeString(timeframes, timeframe);\n const duration = this.parseTimeframe(timeframe) * 1000;\n const request = {\n 'symbol': market['id'],\n 'interval': timeframeValue,\n };\n let candles = undefined;\n if (market['spot']) {\n const until = this.safeIntegerN(params, ['until', 'endTime', 'till']);\n if (since !== undefined) {\n request['startTime'] = since;\n if (until === undefined) {\n // we have to calculate it assuming we can get at most 2000 entries per request\n const end = this.sum(since, maxLimit * duration);\n const now = this.milliseconds();\n request['endTime'] = Math.min(end, now);\n }\n }\n if (limit !== undefined) {\n request['limit'] = limit;\n }\n if (until !== undefined) {\n params = this.omit(params, ['until', 'till']);\n request['endTime'] = until;\n }\n const response = await this.spotPublicGetKlines(this.extend(request, params));\n //\n // [\n // [\n // 1640804880000,\n // \"47482.36\",\n // \"47482.36\",\n // \"47416.57\",\n // \"47436.1\",\n // \"3.550717\",\n // 1640804940000,\n // \"168387.3\"\n // ],\n // ]\n //\n candles = response;\n }\n else if (market['swap']) {\n const until = this.safeIntegerProductN(params, ['until', 'endTime', 'till'], 0.001);\n if (since !== undefined) {\n request['start'] = this.parseToInt(since / 1000);\n }\n if (until !== undefined) {\n params = this.omit(params, ['until', 'till']);\n request['end'] = until;\n }\n const priceType = this.safeString(params, 'price', 'default');\n params = this.omit(params, 'price');\n let response = undefined;\n if (priceType === 'default') {\n response = await this.contractPublicGetKlineSymbol(this.extend(request, params));\n }\n else if (priceType === 'index') {\n response = await this.contractPublicGetKlineIndexPriceSymbol(this.extend(request, params));\n }\n else if (priceType === 'mark') {\n response = await this.contractPublicGetKlineFairPriceSymbol(this.extend(request, params));\n }\n else {\n throw new InvalidParamsError('fetchOHLCV() not support this price type, [default, index, mark]')\n .exchange(this.id);\n }\n //\n // {\n // \"success\":true,\n // \"code\":0,\n // \"data\":{\n // \"time\":[1634052300,1634052360,1634052420],\n // \"open\":[3492.2,3491.3,3495.65],\n // \"close\":[3491.3,3495.65,3495.2],\n // \"high\":[3495.85,3496.55,3499.4],\n // \"low\":[3491.15,3490.9,3494.2],\n // \"vol\":[1740.0,351.0,314.0],\n // \"amount\":[60793.623,12260.4885,10983.1375],\n // }\n // }\n //\n const data = this.safeValue(response, 'data');\n candles = this.convertTradingViewToOHLCV(data, 'time', 'open', 'high', 'low', 'close', 'vol');\n }\n return this.parseOHLCVs(candles, market, timeframe, since, limit);\n }\n parseOHLCV(ohlcv, market = undefined) {\n return [\n this.safeInteger(ohlcv, 0),\n this.safeNumber(ohlcv, 1),\n this.safeNumber(ohlcv, 2),\n this.safeNumber(ohlcv, 3),\n this.safeNumber(ohlcv, 4),\n this.safeNumber(ohlcv, 5),\n ];\n }\n async fetchTickers(symbols = undefined, params = {}) {\n /**\n * @method\n * @name mexc#fetchTickers\n * @description fetches price tickers for multiple markets, statistical information calculated over the past 24 hours for each market\n * @param {string[]|undefined} symbols unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} a dictionary of [ticker structures]{@link https://docs.ccxt.com/#/?id=ticker-structure}\n */\n await this.loadMarkets();\n const request = {};\n let market = undefined;\n let isSingularMarket = false;\n if (symbols !== undefined) {\n const length = symbols.length;\n isSingularMarket = length === 1;\n const firstSymbol = this.safeString(symbols, 0);\n market = this.market(firstSymbol);\n }\n const [marketType, query] = this.handleMarketTypeAndParams('fetchTickers', market, params);\n let tickers = undefined;\n if (isSingularMarket) {\n request['symbol'] = market['id'];\n }\n if (marketType === 'spot') {\n tickers = await this.spotPublicGetTicker24hr(this.extend(request, query));\n //\n // [\n // {\n // \"symbol\": \"BTCUSDT\",\n // \"priceChange\": \"184.34\",\n // \"priceChangePercent\": \"0.00400048\",\n // \"prevClosePrice\": \"46079.37\",\n // \"lastPrice\": \"46263.71\",\n // \"lastQty\": \"\",\n // \"bidPrice\": \"46260.38\",\n // \"bidQty\": \"\",\n // \"askPrice\": \"46260.41\",\n // \"askQty\": \"\",\n // \"openPrice\": \"46079.37\",\n // \"highPrice\": \"47550.01\",\n // \"lowPrice\": \"45555.5\",\n // \"volume\": \"1732.461487\",\n // \"quoteVolume\": null,\n // \"openTime\": 1641349500000,\n // \"closeTime\": 1641349582808,\n // \"count\": null\n // }\n // ]\n //\n }\n else if (marketType === 'swap') {\n const response = await this.contractPublicGetTicker(this.extend(request, query));\n //\n // {\n // \"success\":true,\n // \"code\":0,\n // \"data\":[\n // {\n // \"symbol\":\"ETH_USDT\",\n // \"lastPrice\":3581.3,\n // \"bid1\":3581.25,\n // \"ask1\":3581.5,\n // \"volume24\":4045530,\n // \"amount24\":141331823.5755,\n // \"holdVol\":5832946,\n // \"lower24Price\":3413.4,\n // \"high24Price\":3588.7,\n // \"riseFallRate\":0.0275,\n // \"riseFallValue\":95.95,\n // \"indexPrice\":3580.7852,\n // \"fairPrice\":3581.08,\n // \"fundingRate\":0.000063,\n // \"maxBidPrice\":3938.85,\n // \"minAskPrice\":3222.7,\n // \"timestamp\":1634162885016\n // },\n // ]\n // }\n //\n tickers = this.safeValue(response, 'data', []);\n }\n // when it's single symbol request, the returned structure is different (singular object) for both spot & swap, thus we need to wrap inside array\n if (isSingularMarket) {\n tickers = [tickers];\n }\n return this.parseTickers(tickers, symbols);\n }\n async fetchTicker(symbol, params = {}) {\n /**\n * @method\n * @name mexc#fetchTicker\n * @description fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market\n * @param {string} symbol unified symbol of the market to fetch the ticker for\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} a [ticker structure]{@link https://docs.ccxt.com/#/?id=ticker-structure}\n */\n await this.loadMarkets();\n const market = this.market(symbol);\n const [marketType, query] = this.handleMarketTypeAndParams('fetchTicker', market, params);\n let ticker = undefined;\n const request = {\n 'symbol': market['id'],\n };\n if (marketType === 'spot') {\n ticker = await this.spotPublicGetTicker24hr(this.extend(request, query));\n //\n // {\n // \"symbol\": \"BTCUSDT\",\n // \"priceChange\": \"184.34\",\n // \"priceChangePercent\": \"0.00400048\",\n // \"prevClosePrice\": \"46079.37\",\n // \"lastPrice\": \"46263.71\",\n // \"lastQty\": \"\",\n // \"bidPrice\": \"46260.38\",\n // \"bidQty\": \"\",\n // \"askPrice\": \"46260.41\",\n // \"askQty\": \"\",\n // \"openPrice\": \"46079.37\",\n // \"highPrice\": \"47550.01\",\n // \"lowPrice\": \"45555.5\",\n // \"volume\": \"1732.461487\",\n // \"quoteVolume\": null,\n // \"openTime\": 1641349500000,\n // \"closeTime\": 1641349582808,\n // \"count\": null\n // }\n //\n }\n else if (marketType === 'swap') {\n const response = await this.contractPublicGetTicker(this.extend(request, query));\n //\n // {\n // \"success\":true,\n // \"code\":0,\n // \"data\":{\n // \"symbol\":\"ETH_USDT\",\n // \"lastPrice\":3581.3,\n // \"bid1\":3581.25,\n // \"ask1\":3581.5,\n // \"volume24\":4045530,\n // \"amount24\":141331823.5755,\n // \"holdVol\":5832946,\n // \"lower24Price\":3413.4,\n // \"high24Price\":3588.7,\n // \"riseFallRate\":0.0275,\n // \"riseFallValue\":95.95,\n // \"indexPrice\":3580.7852,\n // \"fairPrice\":3581.08,\n // \"fundingRate\":0.000063,\n // \"maxBidPrice\":3938.85,\n // \"minAskPrice\":3222.7,\n // \"timestamp\":1634162885016\n // }\n // }\n //\n ticker = this.safeValue(response, 'data', {});\n }\n // when it's single symbol request, the returned structure is different (singular object) for both spot & swap, thus we need to wrap inside array\n return this.parseTicker(ticker, market);\n }\n parseTicker(ticker, market = undefined) {\n const marketId = this.safeString(ticker, 'symbol');\n market = this.safeMarket(marketId, market);\n let timestamp = undefined;\n let bid = undefined;\n let ask = undefined;\n let bidVolume = undefined;\n let askVolume = undefined;\n let baseVolume = undefined;\n let quoteVolume = undefined;\n let open = undefined;\n let high = undefined;\n let low = undefined;\n let changePcnt = undefined;\n let changeValue = undefined;\n let prevClose = undefined;\n const isSwap = this.safeValue(market, 'swap');\n // if swap\n if (isSwap || ('timestamp' in ticker)) {\n //\n // {\n // \"symbol\": \"ETH_USDT\",\n // \"lastPrice\": 3581.3,\n // \"bid1\": 3581.25,\n // \"ask1\": 3581.5,\n // \"volume24\": 4045530,\n // \"amount24\": 141331823.5755,\n // \"holdVol\": 5832946,\n // \"lower24Price\": 3413.4,\n // \"high24Price\": 3588.7,\n // \"riseFallRate\": 0.0275,\n // \"riseFallValue\": 95.95,\n // \"indexPrice\": 3580.7852,\n // \"fairPrice\": 3581.08,\n // \"fundingRate\": 0.000063,\n // \"maxBidPrice\": 3938.85,\n // \"minAskPrice\": 3222.7,\n // \"timestamp\": 1634162885016\n // }\n //\n timestamp = this.safeInteger(ticker, 'timestamp');\n bid = this.safeString(ticker, 'bid1');\n ask = this.safeString(ticker, 'ask1');\n baseVolume = this.safeString(ticker, 'volume24');\n quoteVolume = this.safeString(ticker, 'amount24');\n high = this.safeString(ticker, 'high24Price');\n low = this.safeString(ticker, 'lower24Price');\n changeValue = this.safeString(ticker, 'riseFallValue');\n changePcnt = this.safeString(ticker, 'riseFallRate');\n changePcnt = Precise.stringMul(changePcnt, '100');\n }\n else {\n //\n // {\n // \"symbol\": \"BTCUSDT\",\n // \"priceChange\": \"184.34\",\n // \"priceChangePercent\": \"0.00400048\",\n // \"prevClosePrice\": \"46079.37\",\n // \"lastPrice\": \"46263.71\",\n // \"lastQty\": \"\",\n // \"bidPrice\": \"46260.38\",\n // \"bidQty\": \"\",\n // \"askPrice\": \"46260.41\",\n // \"askQty\": \"\",\n // \"openPrice\": \"46079.37\",\n // \"highPrice\": \"47550.01\",\n // \"lowPrice\": \"45555.5\",\n // \"volume\": \"1732.461487\",\n // \"quoteVolume\": null,\n // \"openTime\": 1641349500000,\n // \"closeTime\": 1641349582808,\n // \"count\": null\n // }\n //\n timestamp = this.safeInteger(ticker, 'closeTime');\n bid = this.safeString(ticker, 'bidPrice');\n ask = this.safeString(ticker, 'askPrice');\n bidVolume = this.safeString(ticker, 'bidQty');\n askVolume = this.safeString(ticker, 'askQty');\n if (Precise.stringEq(bidVolume, '0')) {\n bidVolume = undefined;\n }\n if (Precise.stringEq(askVolume, '0')) {\n askVolume = undefined;\n }\n baseVolume = this.safeString(ticker, 'volume');\n quoteVolume = this.safeString(ticker, 'quoteVolume');\n open = this.safeString(ticker, 'openPrice');\n high = this.safeString(ticker, 'highPrice');\n low = this.safeString(ticker, 'lowPrice');\n prevClose = this.safeString(ticker, 'prevClosePrice');\n changeValue = this.safeString(ticker, 'priceChange');\n changePcnt = this.safeString(ticker, 'priceChangePercent');\n changePcnt = Precise.stringMul(changePcnt, '100');\n }\n return this.safeTicker({\n 'symbol': market['symbol'],\n 'timestamp': timestamp,\n 'datetime': this.iso8601(timestamp),\n 'open': open,\n 'high': high,\n 'low': low,\n 'close': this.safeString(ticker, 'lastPrice'),\n 'bid': bid,\n 'bidVolume': bidVolume,\n 'ask': ask,\n 'askVolume': askVolume,\n 'vwap': undefined,\n 'previousClose': prevClose,\n 'change': changeValue,\n 'percentage': changePcnt,\n 'average': undefined,\n 'baseVolume': baseVolume,\n 'quoteVolume': quoteVolume,\n 'info': ticker,\n }, market);\n }\n async createMarketBuyOrderWithCost(symbol, cost, params = {}) {\n /**\n * @method\n * @name mexc#createMarketBuyOrderWithCost\n * @description create a market buy order by providing the symbol and cost\n * @see https://mexcdevelop.github.io/apidocs/spot_v3_en/#new-order\n * @param {string} symbol unified symbol of the market to create an order in\n * @param {float} cost how much you want to trade in units of the quote currency\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n await this.loadMarkets();\n const market = this.market(symbol);\n if (!market['spot']) {\n throw new MarketTypeNotSupportedError(market['type']).exchange(this.id);\n }\n params['createMarketBuyOrderRequiresPrice'] = false;\n return await this.createOrder(symbol, 'market', 'buy', cost, undefined, params);\n }\n async createOrder(symbol, type, side, amount, price = undefined, params = {}) {\n /**\n * @method\n * @name mexc#createOrder\n * @description create a trade order\n * @see https://mexcdevelop.github.io/apidocs/spot_v3_en/#new-order\n * @see https://mexcdevelop.github.io/apidocs/contract_v1_en/#order-under-maintenance\n * @see https://mexcdevelop.github.io/apidocs/contract_v1_en/#trigger-order-under-maintenance\n * @param {string} symbol unified symbol of the market to create an order in\n * @param {string} type 'market' or 'limit'\n * @param {string} side 'buy' or 'sell'\n * @param {float} amount how much of currency you want to trade in units of base currency\n * @param {float} [price] the price at which the order is to be fullfilled, in units of the quote currency, ignored in market orders\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {string} [params.marginMode] only 'isolated' is supported for spot-margin trading\n * @param {float} [params.triggerPrice] The price at which a trigger order is triggered at\n * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n await this.loadMarkets();\n const market = this.market(symbol);\n const [marginMode, query] = this.handleMarginModeAndParams('createOrder', params);\n if (market['spot']) {\n return await this.createSpotOrder(market, type, side, amount, price, marginMode, query);\n }\n else {\n return await this.createSwapOrder(market, type, side, amount, price, marginMode, query);\n }\n }\n createSpotOrderRequest(market, type, side, amount, price = undefined, marginMode = undefined, params = {}) {\n const symbol = market['symbol'];\n const orderSide = side.toUpperCase();\n const request = {\n 'symbol': market['id'],\n 'side': orderSide,\n 'type': type.toUpperCase(),\n };\n if (orderSide === 'BUY' && type === 'market') {\n let createMarketBuyOrderRequiresPrice = true;\n [createMarketBuyOrderRequiresPrice, params] = this.handleOptionAndParams(params, 'createOrder', 'createMarketBuyOrderRequiresPrice', true);\n const cost = this.safeNumber2(params, 'cost', 'quoteOrderQty');\n params = this.omit(params, 'cost');\n if (cost !== undefined) {\n amount = cost;\n }\n else if (createMarketBuyOrderRequiresPrice) {\n if (price === undefined) {\n throw new InvalidParamsError('createOrder() requires the price argument for market buy orders to calculate the total cost to spend (amount * price), alternatively set the createMarketBuyOrderRequiresPrice option or param to false and pass the cost to spend in the amount argument')\n .exchange(this.id);\n }\n else {\n const amountString = this.numberToString(amount);\n const priceString = this.numberToString(price);\n const quoteAmount = Precise.stringMul(amountString, priceString);\n amount = quoteAmount;\n }\n }\n request['quoteOrderQty'] = this.costToPrecision(symbol, amount);\n }\n else {\n request['quantity'] = this.amountToPrecision(symbol, amount);\n }\n if (price !== undefined) {\n request['price'] = this.priceToPrecision(symbol, price);\n }\n const clientOrderId = this.safeString(params, 'clientOrderId');\n if (clientOrderId !== undefined) {\n request['newClientOrderId'] = clientOrderId;\n params = this.omit(params, ['type', 'clientOrderId']);\n }\n if (marginMode !== undefined) {\n if (marginMode !== 'isolated') {\n throw new TradeError().addMessage('createOrder() does not support marginMode ' + marginMode + ' for spot-margin trading')\n .exchange(this.id);\n }\n }\n let postOnly = undefined;\n [postOnly, params] = this.handlePostOnly(type === 'market', type === 'LIMIT_MAKER', params);\n if (postOnly) {\n request['type'] = 'LIMIT_MAKER';\n }\n return this.extend(request, params);\n }\n async createSpotOrder(market, type, side, amount, price = undefined, marginMode = undefined, params = {}) {\n await this.loadMarkets();\n const request = this.createSpotOrderRequest(market, type, side, amount, price, marginMode, params);\n const response = await this.spotPrivatePostOrder(this.extend(request, params));\n //\n // spot\n //\n // {\n // \"symbol\": \"BTCUSDT\",\n // \"orderId\": \"123738410679123456\",\n // \"orderListId\": -1\n // }\n //\n // margin\n //\n // {\n // \"symbol\": \"BTCUSDT\",\n // \"orderId\": \"762634301354414080\",\n // \"clientOrderId\": null,\n // \"isIsolated\": true,\n // \"transactTime\": 1661992652132\n // }\n //\n const order = this.parseOrder(response, market);\n order['side'] = side;\n order['type'] = type;\n order['price'] = price;\n order['amount'] = amount;\n return order;\n }\n async createSwapOrder(market, type, side, amount, price = undefined, marginMode = undefined, params = {}) {\n await this.loadMarkets();\n const symbol = market['symbol'];\n const unavailableContracts = this.safeValue(this.options, 'unavailableContracts', {});\n const isContractUnavaiable = this.safeBool(unavailableContracts, symbol, false);\n if (isContractUnavaiable) {\n throw new MarketNotFoundError(symbol).addMessage('createSwapOrder() does not support yet this symbol:' + symbol)\n .exchange(this.id);\n }\n let openType = undefined;\n if (marginMode !== undefined) {\n if (marginMode === 'cross') {\n openType = 2;\n }\n else if (marginMode === 'isolated') {\n openType = 1;\n }\n else {\n throw new InvalidParamsError('createSwapOrder() marginMode parameter should be either \"cross\" or \"isolated\"')\n .exchange(this.id);\n }\n }\n else {\n openType = this.safeInteger(params, 'openType', 2); // defaulting to cross margin\n }\n if ((type !== 'limit') && (type !== 'market') && (type !== 1) && (type !== 2) && (type !== 3) && (type !== 4) && (type !== 5) && (type !== 6)) {\n throw new InvalidParamsError('createSwapOrder() order type must either limit, market, or 1 for limit orders, 2 for post-only orders, 3 for IOC orders, 4 for FOK orders, 5 for market orders or 6 to convert market price to current price')\n .exchange(this.id);\n }\n let postOnly = undefined;\n [postOnly, params] = this.handlePostOnly(type === 'market', type === 2, params);\n if (postOnly) {\n type = 2;\n }\n else if (type === 'limit') {\n type = 1;\n }\n else if (type === 'market') {\n type = 6;\n }\n const request = {\n 'symbol': market['id'],\n // 'price': parseFloat (this.priceToPrecision (symbol, price)),\n 'vol': parseFloat(this.amountToPrecision(symbol, amount)),\n // 'leverage': int, // required for isolated margin\n // 'side': side, // 1 open long, 2 close short, 3 open short, 4 close long\n //\n // supported order types\n //\n // 1 limit\n // 2 post only maker (PO)\n // 3 transact or cancel instantly (IOC)\n // 4 transact completely or cancel completely (FOK)\n // 5 market orders\n // 6 convert market price to current price\n //\n 'type': type,\n 'openType': openType, // 1 isolated, 2 cross\n // 'positionId': 1394650, // long, filling in this parameter when closing a position is recommended\n // 'externalOid': clientOrderId,\n // 'triggerPrice': 10.0, // Required for trigger order\n // 'triggerType': 1, // Required for trigger order 1: more than or equal, 2: less than or equal\n // 'executeCycle': 1, // Required for trigger order 1: 24 hours,2: 7 days\n // 'trend': 1, // Required for trigger order 1: latest price, 2: fair price, 3: index price\n // 'orderType': 1, // Required for trigger order 1: limit order,2:Post Only Maker,3: close or cancel instantly ,4: close or cancel completely,5: Market order\n };\n if ((type !== 5) && (type !== 6) && (type !== 'market')) {\n request['price'] = parseFloat(this.priceToPrecision(symbol, price));\n }\n if (openType === 1) {\n const leverage = this.safeInteger(params, 'leverage');\n if (leverage === undefined) {\n throw new InvalidParamsError('createSwapOrder() requires a leverage parameter for isolated margin orders')\n .exchange(this.id);\n }\n }\n const reduceOnly = this.safeBool(params, 'reduceOnly', false);\n if (reduceOnly) {\n request['side'] = (side === 'buy') ? 2 : 4;\n }\n else {\n request['side'] = (side === 'buy') ? 1 : 3;\n }\n const clientOrderId = this.safeString2(params, 'clientOrderId', 'externalOid');\n if (clientOrderId !== undefined) {\n request['externalOid'] = clientOrderId;\n }\n const stopPrice = this.safeNumber2(params, 'triggerPrice', 'stopPrice');\n params = this.omit(params, ['clientOrderId', 'externalOid', 'postOnly', 'stopPrice', 'triggerPrice']);\n let response = undefined;\n if (stopPrice) {\n request['triggerPrice'] = this.priceToPrecision(symbol, stopPrice);\n request['triggerType'] = this.safeInteger(params, 'triggerType', 1);\n request['executeCycle'] = this.safeInteger(params, 'executeCycle', 1);\n request['trend'] = this.safeInteger(params, 'trend', 1);\n request['orderType'] = this.safeInteger(params, 'orderType', 1);\n response = await this.contractPrivatePostPlanorderPlace(this.extend(request, params));\n }\n else {\n response = await this.contractPrivatePostOrderSubmit(this.extend(request, params));\n }\n //\n // Swap\n // {\"code\":200,\"data\":\"2ff3163e8617443cb9c6fc19d42b1ca4\"}\n //\n // Trigger\n // {\"success\":true,\"code\":0,\"data\":259208506303929856}\n //\n const data = this.safeString(response, 'data');\n return this.parseOrder(data, market);\n }\n async createOrders(orders, params = {}) {\n /**\n * @method\n * @name mexc#createOrders\n * @description *spot only* *all orders must have the same symbol* create a list of trade orders\n * @see https://mexcdevelop.github.io/apidocs/spot_v3_en/#batch-orders\n * @param {Array} orders list of orders to create, each object should contain the parameters required by createOrder, namely symbol, type, side, amount, price and params\n * @param {object} [params] extra parameters specific to api endpoint\n * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n await this.loadMarkets();\n const ordersRequests = [];\n let symbol = undefined;\n for (let i = 0; i < orders.length; i++) {\n const rawOrder = orders[i];\n const marketId = this.safeString(rawOrder, 'symbol');\n const market = this.market(marketId);\n if (!market['spot']) {\n throw new MarketTypeNotSupportedError(market['type'])\n .addMessage('createOrders() is only supported for spot markets')\n .exchange(this.id);\n }\n if (symbol === undefined) {\n symbol = marketId;\n }\n else {\n if (symbol !== marketId) {\n throw new InvalidParamsError('createOrders() requires all orders to have the same symbol')\n .exchange(this.id);\n }\n }\n const type = this.safeString(rawOrder, 'type');\n const side = this.safeString(rawOrder, 'side');\n const amount = this.safeValue(rawOrder, 'amount');\n const price = this.safeValue(rawOrder, 'price');\n const orderParams = this.safeValue(rawOrder, 'params', {});\n let marginMode = undefined;\n [marginMode, params] = this.handleMarginModeAndParams('createOrder', params);\n const orderRequest = this.createSpotOrderRequest(market, type, side, amount, price, marginMode, orderParams);\n ordersRequests.push(orderRequest);\n }\n const request = {\n 'batchOrders': this.json(ordersRequests),\n };\n const response = await this.spotPrivatePostBatchOrders(request);\n //\n // [\n // {\n // \"symbol\": \"BTCUSDT\",\n // \"orderId\": \"1196315350023612316\",\n // \"newClientOrderId\": \"hio8279hbdsds\",\n // \"orderListId\": -1\n // },\n // {\n // \"newClientOrderId\": \"123456\",\n // \"msg\": \"The minimum transaction volume cannot be less than:0.5USDT\",\n // \"code\": 30002\n // },\n // {\n // \"symbol\": \"BTCUSDT\",\n // \"orderId\": \"1196315350023612318\",\n // \"orderListId\": -1\n // }\n // ]\n //\n return this.parseOrders(response);\n }\n async fetchOrder(id, symbol = undefined, params = {}) {\n /**\n * @method\n * @name mexc#fetchOrder\n * @description fetches information on an order made by the user\n * @param {string} symbol unified symbol of the market the order was made in\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {string} [params.marginMode] only 'isolated' is supported, for spot-margin trading\n * @returns {object} An [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n if (symbol === undefined) {\n throw new InvalidParamsError('fetchOrder() requires a symbol argument').exchange(this.id);\n }\n await this.loadMarkets();\n const market = this.market(symbol);\n const request = {\n 'symbol': market['id'],\n };\n let data = undefined;\n if (market['spot']) {\n const clientOrderId = this.safeString(params, 'clientOrderId');\n if (clientOrderId !== undefined) {\n params = this.omit(params, 'clientOrderId');\n request['origClientOrderId'] = clientOrderId;\n }\n else {\n request['orderId'] = id;\n }\n const [marginMode, query] = this.handleMarginModeAndParams('fetchOrder', params);\n if (marginMode !== undefined) {\n if (marginMode !== 'isolated') {\n throw new InvalidParamsError('fetchOrder() does not support marginMode ' + marginMode + ' for spot-margin trading')\n .exchange(this.id);\n }\n data = await this.spotPrivateGetMarginOrder(this.extend(request, query));\n }\n else {\n data = await this.spotPrivateGetOrder(this.extend(request, query));\n }\n //\n // spot\n //\n // {\n // \"symbol\": \"BTCUSDT\",\n // \"orderId\": \"133734823834147272\",\n // \"orderListId\": \"-1\",\n // \"clientOrderId\": null,\n // \"price\": \"30000\",\n // \"origQty\": \"0.0002\",\n // \"executedQty\": \"0\",\n // \"cummulativeQuoteQty\": \"0\",\n // \"status\": \"CANCELED\",\n // \"timeInForce\": null,\n // \"type\": \"LIMIT\",\n // \"side\": \"BUY\",\n // \"stopPrice\": null,\n // \"icebergQty\": null,\n // \"time\": \"1647667102000\",\n // \"updateTime\": \"1647708567000\",\n // \"isWorking\": true,\n // \"origQuoteOrderQty\": \"6\"\n // }\n //\n // margin\n //\n // {\n // \"symbol\": \"BTCUSDT\",\n // \"orderId\": \"763307297891028992\",\n // \"orderListId\": \"-1\",\n // \"clientOrderId\": null,\n // \"price\": \"18000\",\n // \"origQty\": \"0.0014\",\n // \"executedQty\": \"0\",\n // \"cummulativeQuoteQty\": \"0\",\n // \"status\": \"NEW\",\n // \"type\": \"LIMIT\",\n // \"side\": \"BUY\",\n // \"isIsolated\": true,\n // \"isWorking\": true,\n // \"time\": 1662153107000,\n // \"updateTime\": 1662153107000\n // }\n //\n }\n else if (market['swap']) {\n request['order_id'] = id;\n const response = await this.contractPrivateGetOrderGetOrderId(this.extend(request, params));\n //\n // {\n // \"success\": true,\n // \"code\": \"0\",\n // \"data\": {\n // \"orderId\": \"264995729269765120\",\n // \"symbol\": \"STEPN_USDT\",\n // \"positionId\": \"0\",\n // \"price\": \"2.2\",\n // \"vol\": \"15\",\n // \"leverage\": \"20\",\n // \"side\": \"1\",\n // \"category\": \"1\",\n // \"orderType\": \"1\",\n // \"dealAvgPrice\": \"0\",\n // \"dealVol\": \"0\",\n // \"orderMargin\": \"2.2528\",\n // \"takerFee\": \"0\",\n // \"makerFee\": \"0\",\n // \"profit\": \"0\",\n // \"feeCurrency\": \"USDT\",\n // \"openType\": \"1\",\n // \"state\": \"2\",\n // \"externalOid\": \"_m_0e9520c256744d64b942985189026d20\",\n // \"errorCode\": \"0\",\n // \"usedMargin\": \"0\",\n // \"createTime\": \"1648850305236\",\n // \"updateTime\": \"1648850305245\",\n // \"positionMode\": \"1\"\n // }\n // }\n //\n data = this.safeValue(response, 'data');\n }\n return this.parseOrder(data, market);\n }\n async fetchOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name mexc#fetchOrders\n * @description fetches information on multiple orders made by the user\n * @param {string} symbol unified market symbol of the market orders were made in\n * @param {int} [since] the earliest time in ms to fetch orders for\n * @param {int} [limit] the maximum number of order structures to retrieve\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {string} [params.marginMode] only 'isolated' is supported, for spot-margin trading\n * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n await this.loadMarkets();\n const request = {};\n let market = undefined;\n if (symbol !== undefined) {\n market = this.market(symbol);\n request['symbol'] = market['id'];\n }\n const [marketType, query] = this.handleMarketTypeAndParams('fetchOrders', market, params);\n if (marketType === 'spot') {\n if (symbol === undefined) {\n throw new InvalidParamsError('fetchOrders() requires a symbol argument for spot market')\n .exchange(this.id);\n }\n const [marginMode, queryInner] = this.handleMarginModeAndParams('fetchOrders', params);\n if (since !== undefined) {\n request['startTime'] = since;\n }\n if (limit !== undefined) {\n request['limit'] = limit;\n }\n let response = undefined;\n if (marginMode !== undefined) {\n if (marginMode !== 'isolated') {\n throw new InvalidParamsError(' fetchOrders() does not support marginMode ' + marginMode + ' for spot-margin trading')\n .exchange(this.id);\n }\n response = await this.spotPrivateGetMarginAllOrders(this.extend(request, queryInner));\n }\n else {\n response = await this.spotPrivateGetAllOrders(this.extend(request, queryInner));\n }\n //\n // spot\n //\n // [\n // {\n // \"symbol\": \"BTCUSDT\",\n // \"orderId\": \"133949373632483328\",\n // \"orderListId\": \"-1\",\n // \"clientOrderId\": null,\n // \"price\": \"45000\",\n // \"origQty\": \"0.0002\",\n // \"executedQty\": \"0\",\n // \"cummulativeQuoteQty\": \"0\",\n // \"status\": \"NEW\",\n // \"timeInForce\": null,\n // \"type\": \"LIMIT\",\n // \"side\": \"SELL\",\n // \"stopPrice\": null,\n // \"icebergQty\": null,\n // \"time\": \"1647718255000\",\n // \"updateTime\": \"1647718255000\",\n // \"isWorking\": true,\n // \"origQuoteOrderQty\": \"9\"\n // },\n // ]\n //\n // margin\n //\n // [\n // {\n // \"symbol\": \"BTCUSDT\",\n // \"orderId\": \"763307297891028992\",\n // \"orderListId\": \"-1\",\n // \"clientOrderId\": null,\n // \"price\": \"18000\",\n // \"origQty\": \"0.0014\",\n // \"executedQty\": \"0\",\n // \"cummulativeQuoteQty\": \"0\",\n // \"status\": \"NEW\",\n // \"type\": \"LIMIT\",\n // \"side\": \"BUY\",\n // \"isIsolated\": true,\n // \"isWorking\": true,\n // \"time\": 1662153107000,\n // \"updateTime\": 1662153107000\n // }\n // ]\n //\n return this.parseOrders(response, market, since, limit);\n }\n else {\n if (since !== undefined) {\n request['start_time'] = since;\n const end = this.safeInteger(params, 'end_time');\n if (end === undefined) {\n request['end_time'] = this.sum(since, this.options['maxTimeTillEnd']);\n }\n }\n if (limit !== undefined) {\n request['page_size'] = limit;\n }\n let method = this.safeString(this.options, 'fetchOrders', 'contractPrivateGetOrderListHistoryOrders');\n method = this.safeString(query, 'method', method);\n let ordersOfRegular = [];\n let ordersOfTrigger = [];\n if (method === 'contractPrivateGetOrderListHistoryOrders') {\n const response = await this.contractPrivateGetOrderListHistoryOrders(this.extend(request, query));\n //\n // {\n // \"success\": true,\n // \"code\": \"0\",\n // \"data\": [\n // {\n // \"orderId\": \"265230764677709315\",\n // \"symbol\": \"STEPN_USDT\",\n // \"positionId\": \"0\",\n // \"price\": \"2.1\",\n // \"vol\": \"102\",\n // \"leverage\": \"20\",\n // \"side\": \"1\",\n // \"category\": \"1\",\n // \"orderType\": \"1\",\n // \"dealAvgPrice\": \"0\",\n // \"dealVol\": \"0\",\n // \"orderMargin\": \"10.96704\",\n // \"takerFee\": \"0\",\n // \"makerFee\": \"0\",\n // \"profit\": \"0\",\n // \"feeCurrency\": \"USDT\",\n // \"openType\": \"1\",\n // \"state\": \"2\",\n // \"externalOid\": \"_m_7e42f8df6b324c869e4e200397e2b00f\",\n // \"errorCode\": \"0\",\n // \"usedMargin\": \"0\",\n // \"createTime\": \"1648906342000\",\n // \"updateTime\": \"1648906342000\",\n // \"positionMode\": \"1\"\n // },\n // ]\n // }\n //\n ordersOfRegular = this.safeValue(response, 'data');\n }\n else {\n // the Planorder endpoints work not only for stop-market orders, but also for stop-limit orders that were supposed to have a separate endpoint\n const response = await this.contractPrivateGetPlanorderListOrders(this.extend(request, query));\n //\n // {\n // \"success\": true,\n // \"code\": \"0\",\n // \"data\": [\n // {\n // \"symbol\": \"STEPN_USDT\",\n // \"leverage\": \"20\",\n // \"side\": \"1\",\n // \"vol\": \"13\",\n // \"openType\": \"1\",\n // \"state\": \"1\",\n // \"orderType\": \"1\",\n // \"errorCode\": \"0\",\n // \"createTime\": \"1648984276000\",\n // \"updateTime\": \"1648984276000\",\n // \"id\": \"265557643326564352\",\n // \"triggerType\": \"1\",\n // \"triggerPrice\": \"3\",\n // \"price\": \"2.9\", // not present in stop-market, but in stop-limit order\n // \"executeCycle\": \"87600\",\n // \"trend\": \"1\",\n // },\n // ]\n // }\n //\n ordersOfTrigger = this.safeValue(response, 'data');\n }\n const merged = this.arrayConcat(ordersOfTrigger, ordersOfRegular);\n return this.parseOrders(merged, market, since, limit, params);\n }\n }\n async fetchOrdersByIds(ids, symbol = undefined, params = {}) {\n await this.loadMarkets();\n const request = {};\n let market = undefined;\n if (symbol !== undefined) {\n market = this.market(symbol);\n request['symbol'] = market['id'];\n }\n const [marketType, query] = this.handleMarketTypeAndParams('fetchOrdersByIds', market, params);\n if (marketType === 'spot') {\n throw new MarketTypeNotSupportedError(marketType).exchange(this.id);\n }\n else {\n request['order_ids'] = ids.join(',');\n const response = await this.contractPrivateGetOrderBatchQuery(this.extend(request, query));\n //\n // {\n // \"success\": true,\n // \"code\": \"0\",\n // \"data\": [\n // {\n // \"orderId\": \"265230764677709315\",\n // \"symbol\": \"STEPN_USDT\",\n // \"positionId\": \"0\",\n // \"price\": \"2.1\",\n // \"vol\": \"102\",\n // \"leverage\": \"20\",\n // \"side\": \"1\",\n // \"category\": \"1\",\n // \"orderType\": \"1\",\n // \"dealAvgPrice\": \"0\",\n // \"dealVol\": \"0\",\n // \"orderMargin\": \"10.96704\",\n // \"takerFee\": \"0\",\n // \"makerFee\": \"0\",\n // \"profit\": \"0\",\n // \"feeCurrency\": \"USDT\",\n // \"openType\": \"1\",\n // \"state\": \"2\",\n // \"externalOid\": \"_m_7e42f8df6b324c869e4e200397e2b00f\",\n // \"errorCode\": \"0\",\n // \"usedMargin\": \"0\",\n // \"createTime\": \"1648906342000\",\n // \"updateTime\": \"1648906342000\",\n // \"positionMode\": \"1\"\n // }\n // ]\n // }\n //\n const data = this.safeValue(response, 'data');\n return this.parseOrders(data, market);\n }\n }\n async fetchOpenOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name mexc#fetchOpenOrders\n * @description fetch all unfilled currently open orders\n * @param {string} symbol unified market symbol\n * @param {int} [since] the earliest time in ms to fetch open orders for\n * @param {int} [limit] the maximum number of open orders structures to retrieve\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {string} [params.marginMode] only 'isolated' is supported, for spot-margin trading\n * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n await this.loadMarkets();\n const request = {};\n let market = undefined;\n let marketType = undefined;\n if (symbol !== undefined) {\n market = this.market(symbol);\n }\n [marketType, params] = this.handleMarketTypeAndParams('fetchOpenOrders', market, params);\n if (marketType === 'spot') {\n if (symbol === undefined) {\n throw new InvalidParamsError(' fetchOpenOrders() requires a symbol argument for spot market')\n .exchange(this.id);\n }\n request['symbol'] = market['id'];\n const [marginMode, query] = this.handleMarginModeAndParams('fetchOpenOrders', params);\n let response = undefined;\n if (marginMode !== undefined) {\n if (marginMode !== 'isolated') {\n throw new InvalidParamsError('fetchOpenOrders() does not support marginMode ' + marginMode + ' for spot-margin trading')\n .exchange(this.id);\n }\n response = await this.spotPrivateGetMarginOpenOrders(this.extend(request, query));\n }\n else {\n response = await this.spotPrivateGetOpenOrders(this.extend(request, query));\n }\n //\n // spot\n //\n // [\n // {\n // \"symbol\": \"BTCUSDT\",\n // \"orderId\": \"133949373632483328\",\n // \"orderListId\": \"-1\",\n // \"clientOrderId\": \"\",\n // \"price\": \"45000\",\n // \"origQty\": \"0.0002\",\n // \"executedQty\": \"0\",\n // \"cummulativeQuoteQty\": \"0\",\n // \"status\": \"NEW\",\n // \"timeInForce\": null,\n // \"type\": \"LIMIT\",\n // \"side\": \"SELL\",\n // \"stopPrice\": null,\n // \"icebergQty\": null,\n // \"time\": \"1647718255199\",\n // \"updateTime\": null,\n // \"isWorking\": true,\n // \"origQuoteOrderQty\": \"9\"\n // }\n // ]\n //\n // margin\n //\n // [\n // {\n // \"symbol\": \"BTCUSDT\",\n // \"orderId\": \"764547676405633024\",\n // \"orderListId\": \"-1\",\n // \"clientOrderId\": null,\n // \"price\": \"18000\",\n // \"origQty\": \"0.0013\",\n // \"executedQty\": \"0\",\n // \"cummulativeQuoteQty\": \"0\",\n // \"status\": \"NEW\",\n // \"type\": \"LIMIT\",\n // \"side\": \"BUY\",\n // \"isIsolated\": true,\n // \"isWorking\": true,\n // \"time\": 1662448836000,\n // \"updateTime\": 1662448836000\n // }\n // ]\n //\n return this.parseOrders(response, market, since, limit);\n }\n else {\n // TO_DO: another possible way is through: open_orders/{symbol}, but as they have same ratelimits, and less granularity, i think historical orders are more convenient, as it supports more params (however, theoretically, open-orders endpoint might be sligthly fast)\n return await this.fetchOrdersByState(2, symbol, since, limit, params);\n }\n }\n async fetchClosedOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name mexc#fetchClosedOrders\n * @description fetches information on multiple closed orders made by the user\n * @param {string} symbol unified market symbol of the market orders were made in\n * @param {int} [since] the earliest time in ms to fetch orders for\n * @param {int} [limit] the maximum number of order structures to retrieve\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n return await this.fetchOrdersByState(3, symbol, since, limit, params);\n }\n async fetchCanceledOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name mexc#fetchCanceledOrders\n * @description fetches information on multiple canceled orders made by the user\n * @param {string} symbol unified market symbol of the market orders were made in\n * @param {int} [since] timestamp in ms of the earliest order, default is undefined\n * @param {int} [limit] max number of orders to return, default is undefined\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n return await this.fetchOrdersByState(4, symbol, since, limit, params);\n }\n async fetchOrdersByState(state, symbol = undefined, since = undefined, limit = undefined, params = {}) {\n await this.loadMarkets();\n const request = {};\n let market = undefined;\n if (symbol !== undefined) {\n market = this.market(symbol);\n }\n const [marketType] = this.handleMarketTypeAndParams('fetchOrdersByState', market, params);\n if (marketType === 'spot') {\n throw new MarketTypeNotSupportedError(marketType).exchange(this.id);\n }\n else {\n request['states'] = state;\n return await this.fetchOrders(symbol, since, limit, this.extend(request, params));\n }\n }\n async cancelOrder(id, symbol = undefined, params = {}) {\n /**\n * @method\n * @name mexc#cancelOrder\n * @description cancels an open order\n * @param {string} id order id\n * @param {string} symbol unified symbol of the market the order was made in\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {string} [params.marginMode] only 'isolated' is supported for spot-margin trading\n * @returns {object} An [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n await this.loadMarkets();\n const request = {};\n let market = undefined;\n if (symbol !== undefined) {\n market = this.market(symbol);\n request['symbol'] = market['id'];\n }\n let marketType = undefined;\n [marketType, params] = this.handleMarketTypeAndParams('cancelOrder', market, params);\n const [marginMode, query] = this.handleMarginModeAndParams('cancelOrder', params);\n let data = undefined;\n if (marketType === 'spot') {\n if (symbol === undefined) {\n throw new InvalidParamsError('cancelOrder() requires a symbol argument').exchange(this.id);\n }\n const requestInner = {\n 'symbol': market['id'],\n };\n const clientOrderId = this.safeString(params, 'clientOrderId');\n if (clientOrderId !== undefined) {\n params = this.omit(query, 'clientOrderId');\n requestInner['origClientOrderId'] = clientOrderId;\n }\n else {\n requestInner['orderId'] = id;\n }\n if (marginMode !== undefined) {\n if (marginMode !== 'isolated') {\n throw new TradeError().addMessage('cancelOrder() does not support marginMode ' + marginMode + ' for spot-margin trading')\n .exchange(this.id);\n }\n data = await this.spotPrivateDeleteMarginOrder(this.extend(requestInner, query));\n }\n else {\n data = await this.spotPrivateDeleteOrder(this.extend(requestInner, query));\n }\n //\n // spot\n //\n // {\n // \"symbol\": \"BTCUSDT\",\n // \"orderId\": \"133734823834447872\",\n // \"price\": \"30000\",\n // \"origQty\": \"0.0002\",\n // \"type\": \"LIMIT\",\n // \"side\": \"BUY\"\n // }\n //\n // margin\n //\n // [\n // {\n // \"symbol\": \"BTCUSDT\",\n // \"orderId\": \"762640232574226432\",\n // \"orderListId\": \"-1\",\n // \"clientOrderId\": null,\n // \"price\": \"18000\",\n // \"origQty\": \"0.00147\",\n // \"executedQty\": \"0\",\n // \"cummulativeQuoteQty\": \"0\",\n // \"status\": \"NEW\",\n // \"type\": \"LIMIT\",\n // \"side\": \"BUY\",\n // \"isIsolated\": true,\n // \"isWorking\": true,\n // \"time\": 1661994066000,\n // \"updateTime\": 1661994066000\n // }\n // ]\n //\n }\n else {\n // TODO: PlanorderCancel endpoint has bug atm. waiting for fix.\n let method = this.safeString(this.options, 'cancelOrder', 'contractPrivatePostOrderCancel'); // contractPrivatePostOrderCancel, contractPrivatePostPlanorderCancel\n method = this.safeString(query, 'method', method);\n let response = undefined;\n if (method === 'contractPrivatePostOrderCancel') {\n response = await this.contractPrivatePostOrderCancel([id]); // the request cannot be changed or extended. This is the only way to send.\n }\n else if (method === 'contractPrivatePostPlanorderCancel') {\n response = await this.contractPrivatePostPlanorderCancel([id]); // the request cannot be changed or extended. This is the only way to send.\n }\n else {\n throw new ExchangeNotAllowedMethodError(method).exchange(this.id);\n }\n //\n // {\n // \"success\": true,\n // \"code\": \"0\",\n // \"data\": [\n // {\n // \"orderId\": \"264995729269765120\",\n // \"errorCode\": \"0\", // if already canceled: \"2041\"; if doesn't exist: \"2040\"\n // \"errorMsg\": \"success\", // if already canceled: \"order state cannot be cancelled\"; if doesn't exist: \"order not exist\"\n // }\n // ]\n // }\n //\n data = this.safeValue(response, 'data');\n const order = this.safeValue(data, 0);\n const errorMsg = this.safeValue(order, 'errorMsg', '');\n if (errorMsg !== 'success') {\n throw new TradeError().addMessage('cancelOrder() the order with id ' + id + ' cannot be cancelled: ' + errorMsg).exchange(this.id);\n }\n }\n return this.parseOrder(data, market);\n }\n async cancelOrders(ids, symbol = undefined, params = {}) {\n /**\n * @method\n * @name mexc#cancelOrders\n * @description cancel multiple orders\n * @param {string[]} ids order ids\n * @param {string} symbol unified market symbol, default is undefined\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} an list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n await this.loadMarkets();\n const market = (symbol !== undefined) ? this.market(symbol) : undefined;\n const [marketType] = this.handleMarketTypeAndParams('cancelOrders', market, params);\n if (marketType === 'spot') {\n throw new MarketTypeNotSupportedError(marketType)\n .addMessage('cancelOrders() is not supported for ' + marketType)\n .exchange(this.id);\n }\n else {\n const response = await this.contractPrivatePostOrderCancel(ids); // the request cannot be changed or extended. The only way to send.\n //\n // {\n // \"success\": true,\n // \"code\": \"0\",\n // \"data\": [\n // {\n // \"orderId\": \"264995729269765120\",\n // \"errorCode\": \"0\", // if already canceled: \"2041\"\n // \"errorMsg\": \"success\", // if already canceled: \"order state cannot be cancelled\"\n // },\n // ]\n // }\n //\n const data = this.safeValue(response, 'data');\n return this.parseOrders(data, market);\n }\n }\n async cancelAllOrders(symbol = undefined, params = {}) {\n /**\n * @method\n * @name mexc#cancelAllOrders\n * @description cancel all open orders\n * @param {string} symbol unified market symbol, only orders in the market of this symbol are cancelled when symbol is not undefined\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {string} [params.marginMode] only 'isolated' is supported for spot-margin trading\n * @returns {object[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n await this.loadMarkets();\n const market = (symbol !== undefined) ? this.market(symbol) : undefined;\n const request = {};\n let marketType = undefined;\n [marketType, params] = this.handleMarketTypeAndParams('cancelAllOrders', market, params);\n const [marginMode, query] = this.handleMarginModeAndParams('cancelAllOrders', params);\n if (marketType === 'spot') {\n if (symbol === undefined) {\n throw new InvalidParamsError('cancelAllOrders() requires a symbol argument on spot')\n .exchange(this.id);\n }\n request['symbol'] = market['id'];\n let response = undefined;\n if (marginMode !== undefined) {\n if (marginMode !== 'isolated') {\n throw new TradeError().addMessage(' cancelAllOrders() does not support marginMode ' + marginMode + ' for spot-margin trading')\n .exchange(this.id);\n }\n response = await this.spotPrivateDeleteMarginOpenOrders(this.extend(request, query));\n }\n else {\n response = await this.spotPrivateDeleteOpenOrders(this.extend(request, query));\n }\n //\n // spot\n //\n // [\n // {\n // \"symbol\": \"BTCUSDT\",\n // \"orderId\": \"133926492139692032\",\n // \"price\": \"30000\",\n // \"origQty\": \"0.0002\",\n // \"type\": \"LIMIT\",\n // \"side\": \"BUY\"\n // },\n // ]\n //\n // margin\n //\n // [\n // {\n // \"symbol\": \"BTCUSDT\",\n // \"orderId\": \"762640232574226432\",\n // \"orderListId\": \"-1\",\n // \"clientOrderId\": null,\n // \"price\": \"18000\",\n // \"origQty\": \"0.00147\",\n // \"executedQty\": \"0\",\n // \"cummulativeQuoteQty\": \"0\",\n // \"status\": \"NEW\",\n // \"type\": \"LIMIT\",\n // \"side\": \"BUY\",\n // \"isIsolated\": true,\n // \"isWorking\": true,\n // \"time\": 1661994066000,\n // \"updateTime\": 1661994066000\n // }\n // ]\n //\n return this.parseOrders(response, market);\n }\n else {\n if (symbol !== undefined) {\n request['symbol'] = market['id'];\n }\n // method can be either: contractPrivatePostOrderCancelAll or contractPrivatePostPlanorderCancelAll\n // the Planorder endpoints work not only for stop-market orders but also for stop-limit orders that are supposed to have separate endpoint\n let method = this.safeString(this.options, 'cancelAllOrders', 'contractPrivatePostOrderCancelAll');\n method = this.safeString(query, 'method', method);\n let response = undefined;\n if (method === 'contractPrivatePostOrderCancelAll') {\n response = await this.contractPrivatePostOrderCancelAll(this.extend(request, query));\n }\n else if (method === 'contractPrivatePostPlanorderCancelAll') {\n response = await this.contractPrivatePostPlanorderCancelAll(this.extend(request, query));\n }\n //\n // {\n // \"success\": true,\n // \"code\": \"0\"\n // }\n //\n const data = this.safeValue(response, 'data', []);\n return this.parseOrders(data, market);\n }\n }\n parseOrder(order, market = undefined) {\n //\n // spot: createOrder\n //\n // {\n // \"symbol\": \"BTCUSDT\",\n // \"orderId\": \"123738410679123456\",\n // \"orderListId\": -1\n // }\n //\n // margin: createOrder\n //\n // {\n // \"symbol\": \"BTCUSDT\",\n // \"orderId\": \"762634301354414080\",\n // \"clientOrderId\": null,\n // \"isIsolated\": true,\n // \"transactTime\": 1661992652132\n // }\n //\n // spot: cancelOrder, cancelAllOrders\n //\n // {\n // \"symbol\": \"BTCUSDT\",\n // \"orderId\": \"133926441921286144\",\n // \"price\": \"30000\",\n // \"origQty\": \"0.0002\",\n // \"type\": \"LIMIT\",\n // \"side\": \"BUY\"\n // }\n //\n // margin: cancelOrder, cancelAllOrders\n //\n // {\n // \"symbol\": \"BTCUSDT\",\n // \"orderId\": \"762640232574226432\",\n // \"orderListId\": \"-1\",\n // \"clientOrderId\": null,\n // \"price\": \"18000\",\n // \"origQty\": \"0.00147\",\n // \"executedQty\": \"0\",\n // \"cummulativeQuoteQty\": \"0\",\n // \"status\": \"NEW\",\n // \"type\": \"LIMIT\",\n // \"side\": \"BUY\",\n // \"isIsolated\": true,\n // \"isWorking\": true,\n // \"time\": 1661994066000,\n // \"updateTime\": 1661994066000\n // }\n //\n // spot: fetchOrder, fetchOpenOrders, fetchOrders\n //\n // {\n // \"symbol\": \"BTCUSDT\",\n // \"orderId\": \"133734823834147272\",\n // \"orderListId\": \"-1\",\n // \"clientOrderId\": null,\n // \"price\": \"30000\",\n // \"origQty\": \"0.0002\",\n // \"executedQty\": \"0\",\n // \"cummulativeQuoteQty\": \"0\",\n // \"status\": \"CANCELED\",\n // \"timeInForce\": null,\n // \"type\": \"LIMIT\",\n // \"side\": \"BUY\",\n // \"stopPrice\": null,\n // \"icebergQty\": null,\n // \"time\": \"1647667102000\",\n // \"updateTime\": \"1647708567000\",\n // \"isWorking\": true,\n // \"origQuoteOrderQty\": \"6\"\n // }\n //\n // margin: fetchOrder, fetchOrders\n //\n // {\n // \"symbol\": \"BTCUSDT\",\n // \"orderId\": \"763307297891028992\",\n // \"orderListId\": \"-1\",\n // \"clientOrderId\": null,\n // \"price\": \"18000\",\n // \"origQty\": \"0.0014\",\n // \"executedQty\": \"0\",\n // \"cummulativeQuoteQty\": \"0\",\n // \"status\": \"NEW\",\n // \"type\": \"LIMIT\",\n // \"side\": \"BUY\",\n // \"isIsolated\": true,\n // \"isWorking\": true,\n // \"time\": 1662153107000,\n // \"updateTime\": 1662153107000\n // }\n //\n // swap: createOrder\n //\n // 2ff3163e8617443cb9c6fc19d42b1ca4\n //\n // swap: fetchOrder, fetchOrders\n //\n // regular\n // {\n // \"orderId\": \"264995729269765120\",\n // \"symbol\": \"STEPN_USDT\",\n // \"positionId\": \"0\",\n // \"price\": \"2.2\",\n // \"vol\": \"15\",\n // \"leverage\": \"20\",\n // \"side\": \"1\", // TODO: not unified\n // \"category\": \"1\",\n // \"orderType\": \"1\", // TODO: not unified\n // \"dealAvgPrice\": \"0\",\n // \"dealVol\": \"0\",\n // \"orderMargin\": \"2.2528\",\n // \"takerFee\": \"0\",\n // \"makerFee\": \"0\",\n // \"profit\": \"0\",\n // \"feeCurrency\": \"USDT\",\n // \"openType\": \"1\",\n // \"state\": \"2\", // TODO\n // \"externalOid\": \"_m_0e9520c256744d64b942985189026d20\",\n // \"errorCode\": \"0\",\n // \"usedMargin\": \"0\",\n // \"createTime\": \"1648850305236\",\n // \"updateTime\": \"1648850305245\",\n // \"positionMode\": \"1\"\n // }\n //\n // stop\n // {\n // \"id\": \"265557643326564352\",\n // \"triggerType\": \"1\",\n // \"triggerPrice\": \"3\",\n // \"price\": \"2.9\", // not present in stop-market, but in stop-limit order\n // \"executeCycle\": \"87600\",\n // \"trend\": \"1\",\n // // below keys are same as in regular order structure\n // \"symbol\": \"STEPN_USDT\",\n // \"leverage\": \"20\",\n // \"side\": \"1\",\n // \"vol\": \"13\",\n // \"openType\": \"1\",\n // \"state\": \"1\",\n // \"orderType\": \"1\",\n // \"errorCode\": \"0\",\n // \"createTime\": \"1648984276000\",\n // \"updateTime\": \"1648984276000\",\n // }\n //\n // createOrders error\n //\n // {\n // \"newClientOrderId\": \"123456\",\n // \"msg\": \"The minimum transaction volume cannot be less than:0.5USDT\",\n // \"code\": 30002\n // }\n //\n const code = this.safeInteger(order, 'code');\n if (code !== undefined) {\n // error upon placing multiple orders\n return this.safeOrder({\n 'info': order,\n 'status': 'rejected',\n 'clientOrderId': this.safeString(order, 'newClientOrderId'),\n });\n }\n let id = undefined;\n if (typeof order === 'string') {\n id = order;\n }\n else {\n id = this.safeString2(order, 'orderId', 'id');\n }\n const marketId = this.safeString(order, 'symbol');\n market = this.safeMarket(marketId, market);\n const timestamp = this.safeIntegerN(order, ['time', 'createTime', 'transactTime']);\n let fee = undefined;\n const feeCurrency = this.safeString(order, 'feeCurrency');\n if (feeCurrency !== undefined) {\n const takerFee = this.safeString(order, 'takerFee');\n const makerFee = this.safeString(order, 'makerFee');\n const feeSum = Precise.stringAdd(takerFee, makerFee);\n fee = {\n 'currency': feeCurrency,\n 'cost': this.parseNumber(feeSum),\n };\n }\n return this.safeOrder({\n 'id': id,\n 'clientOrderId': this.safeString(order, 'clientOrderId'),\n 'timestamp': timestamp,\n 'datetime': this.iso8601(timestamp),\n 'lastTradeTimestamp': undefined,\n 'status': this.parseOrderStatus(this.safeString2(order, 'status', 'state')),\n 'symbol': market['symbol'],\n 'type': this.parseOrderType(this.safeString(order, 'type')),\n 'timeInForce': this.parseOrderTimeInForce(this.safeString(order, 'timeInForce')),\n 'side': this.parseOrderSide(this.safeString(order, 'side')),\n 'price': this.safeNumber(order, 'price'),\n 'stopPrice': this.safeNumber2(order, 'stopPrice', 'triggerPrice'),\n 'triggerPrice': this.safeNumber2(order, 'stopPrice', 'triggerPrice'),\n 'average': this.safeNumber(order, 'dealAvgPrice'),\n 'amount': this.safeNumber2(order, 'origQty', 'vol'),\n 'cost': this.safeNumber(order, 'cummulativeQuoteQty'),\n 'filled': this.safeNumber2(order, 'executedQty', 'dealVol'),\n 'remaining': undefined,\n 'fee': fee,\n 'trades': undefined,\n 'info': order,\n }, market);\n }\n parseOrderSide(status) {\n const statuses = {\n 'BUY': 'buy',\n 'SELL': 'sell',\n '1': 'buy',\n '2': 'sell',\n // contracts v1 : TODO\n };\n return this.safeString(statuses, status, status);\n }\n parseOrderType(status) {\n const statuses = {\n 'MARKET': 'market',\n 'LIMIT': 'limit',\n 'LIMIT_MAKER': 'limit',\n };\n return this.safeString(statuses, status, status);\n }\n parseOrderStatus(status) {\n const statuses = {\n 'NEW': 'open',\n 'FILLED': 'closed',\n 'CANCELED': 'canceled',\n 'PARTIALLY_FILLED': 'open',\n 'PARTIALLY_CANCELED': 'canceled',\n // contracts v1\n // '1': 'uninformed', // TODO: wt?\n '2': 'open',\n '3': 'closed',\n '4': 'canceled',\n // '5': 'invalid', // TODO: wt?\n };\n return this.safeString(statuses, status, status);\n }\n parseOrderTimeInForce(status) {\n const statuses = {\n 'GTC': 'GTC',\n 'FOK': 'FOK',\n 'IOC': 'IOC',\n };\n return this.safeString(statuses, status, status);\n }\n async fetchAccountHelper(type, params) {\n if (type === 'spot') {\n return await this.spotPrivateGetAccount(params);\n //\n // {\n // \"makerCommission\": \"20\",\n // \"takerCommission\": \"20\",\n // \"buyerCommission\": \"0\",\n // \"sellerCommission\": \"0\",\n // \"canTrade\": true,\n // \"canWithdraw\": true,\n // \"canDeposit\": true,\n // \"updateTime\": null,\n // \"accountType\": \"SPOT\",\n // \"balances\": [\n // {\n // \"asset\": \"BTC\",\n // \"free\": \"0.002\",\n // \"locked\": \"0\"\n // },\n // {\n // \"asset\": \"USDT\",\n // \"free\": \"88.120131350620957006\",\n // \"locked\": \"0\"\n // },\n // ],\n // \"permissions\": [\n // \"SPOT\"\n // ]\n // }\n //\n }\n else if (type === 'swap') {\n const response = await this.contractPrivateGetAccountAssets(params);\n //\n // {\n // \"success\":true,\n // \"code\":0,\n // \"data\":[\n // {\n // \"currency\":\"BSV\",\n // \"positionMargin\":0,\n // \"availableBalance\":0,\n // \"cashBalance\":0,\n // \"frozenBalance\":0,\n // \"equity\":0,\n // \"unrealized\":0,\n // \"bonus\":0\n // },\n // ]\n // }\n //\n return this.safeValue(response, 'data');\n }\n return undefined;\n }\n async fetchAccounts(params = {}) {\n /**\n * @method\n * @name mexc#fetchAccounts\n * @description fetch all the accounts associated with a profile\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} a dictionary of [account structures]{@link https://docs.ccxt.com/#/?id=account-structure} indexed by the account type\n */\n // TODO: is the below endpoints suitable for fetchAccounts?\n const [marketType, query] = this.handleMarketTypeAndParams('fetchAccounts', undefined, params);\n await this.loadMarkets();\n const response = await this.fetchAccountHelper(marketType, query);\n const data = this.safeValue(response, 'balances', []);\n const result = [];\n for (let i = 0; i < data.length; i++) {\n const account = data[i];\n const currencyId = this.safeString2(account, 'asset', 'currency');\n const code = this.safeCurrencyCode(currencyId);\n result.push({\n 'id': this.safeString(account, 'id'),\n 'type': this.safeString(account, 'type'),\n 'code': code,\n 'info': account,\n });\n }\n return result;\n }\n async fetchTradingFees(params = {}) {\n /**\n * @method\n * @name mexc#fetchTradingFees\n * @description fetch the trading fees for multiple markets\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} a dictionary of [fee structures]{@link https://docs.ccxt.com/#/?id=fee-structure} indexed by market symbols\n */\n await this.loadMarkets();\n const response = await this.fetchAccountHelper('spot', params);\n let makerFee = this.safeString(response, 'makerCommission');\n let takerFee = this.safeString(response, 'takerCommission');\n makerFee = Precise.stringDiv(makerFee, '1000');\n takerFee = Precise.stringDiv(takerFee, '1000');\n const result = {};\n for (let i = 0; i < this.symbols.length; i++) {\n const symbol = this.symbols[i];\n result[symbol] = {\n 'symbol': symbol,\n 'maker': this.parseNumber(makerFee),\n 'taker': this.parseNumber(takerFee),\n 'percentage': true,\n 'tierBased': false,\n 'info': response,\n };\n }\n return result;\n }\n customParseBalance(response, marketType) {\n //\n // spot\n //\n // {\n // \"asset\": \"USDT\",\n // \"free\": \"0.000000000674\",\n // \"locked\": \"0\"\n // }\n //\n // swap\n //\n // {\n // \"currency\": \"BSV\",\n // \"positionMargin\": 0,\n // \"availableBalance\": 0,\n // \"cashBalance\": 0,\n // \"frozenBalance\": 0,\n // \"equity\": 0,\n // \"unrealized\": 0,\n // \"bonus\": 0\n // }\n //\n // margin\n //\n // {\n // \"baseAsset\": {\n // \"asset\": \"BTC\",\n // \"borrowEnabled\": true,\n // \"borrowed\": \"0\",\n // \"free\": \"0\",\n // \"interest\": \"0\",\n // \"locked\": \"0\",\n // \"netAsset\": \"0\",\n // \"netAssetOfBtc\": \"0\",\n // \"repayEnabled\": true,\n // \"totalAsset\": \"0\"\n // }\n // \"quoteAsset\": {\n // \"asset\": \"USDT\",\n // \"borrowEnabled\": true,\n // \"borrowed\": \"0\",\n // \"free\": \"10\",\n // \"interest\": \"0\",\n // \"locked\": \"0\",\n // \"netAsset\": \"10\",\n // \"netAssetOfBtc\": \"0\",\n // \"repayEnabled\": true,\n // \"totalAsset\": \"10\"\n // }\n // \"symbol\": \"BTCUSDT\",\n // \"isolatedCreated\": true,\n // \"enabled\": true,\n // \"marginLevel\": \"999\",\n // \"marginRatio\": \"9\",\n // \"indexPrice\": \"16741.137068965517241379\",\n // \"liquidatePrice\": \"--\",\n // \"liquidateRate\": \"--\",\n // \"tradeEnabled\": true\n // }\n //\n let wallet = undefined;\n if (marketType === 'margin') {\n wallet = this.safeValue(response, 'assets', []);\n }\n else if (marketType === 'coin-m' || marketType === 'usd-m') {\n wallet = this.safeValue(response, 'data', []);\n }\n else {\n wallet = this.safeValue(response, 'balances', []);\n }\n const result = { 'info': response };\n if (marketType === 'margin') {\n for (let i = 0; i < wallet.length; i++) {\n const entry = wallet[i];\n const marketId = this.safeString(entry, 'symbol');\n const symbol = this.safeSymbol(marketId, undefined);\n const base = this.safeValue(entry, 'baseAsset', {});\n const quote = this.safeValue(entry, 'quoteAsset', {});\n const baseCode = this.safeCurrencyCode(this.safeString(base, 'asset'));\n const quoteCode = this.safeCurrencyCode(this.safeString(quote, 'asset'));\n const subResult = {};\n subResult[baseCode] = this.parseBalanceHelper(base);\n subResult[quoteCode] = this.parseBalanceHelper(quote);\n result[symbol] = this.safeBalance(subResult);\n }\n return result;\n }\n else if (marketType === 'coin-m' || marketType === 'usd-m') {\n for (let i = 0; i < wallet.length; i++) {\n const entry = wallet[i];\n const currencyId = this.safeString(entry, 'currency');\n const code = this.safeCurrencyCode(currencyId);\n // the API doesn't do the distinction between USD-M futures and Coin-M futures\n // so we have to filter to respect the marketType\n if ((marketType === 'coin-m' && code === 'USDT') || (marketType === 'usd-m' && code !== 'USDT'))\n continue;\n const account = this.account();\n account['free'] = this.safeString(entry, 'availableBalance');\n account['used'] = this.safeString(entry, 'frozenBalance');\n result[code] = account;\n }\n return this.safeBalance(result);\n }\n else {\n for (let i = 0; i < wallet.length; i++) {\n const entry = wallet[i];\n const currencyId = this.safeString(entry, 'asset');\n const code = this.safeCurrencyCode(currencyId);\n const account = this.account();\n account['free'] = this.safeString(entry, 'free');\n account['used'] = this.safeString(entry, 'locked');\n result[code] = account;\n }\n return this.safeBalance(result);\n }\n }\n parseBalanceHelper(entry) {\n const account = this.account();\n account['used'] = this.safeString(entry, 'locked');\n account['free'] = this.safeString(entry, 'free');\n account['total'] = this.safeString(entry, 'totalAsset');\n const debt = this.safeString(entry, 'borrowed');\n const interest = this.safeString(entry, 'interest');\n account['debt'] = Precise.stringAdd(debt, interest);\n return account;\n }\n async fetchBalance(params = {}) {\n /**\n * @method\n * @name mexc#fetchBalance\n * @description query for balance and get the amount of funds available for trading or funds locked in orders\n * @see https://mexcdevelop.github.io/apidocs/spot_v3_en/#account-information\n * @see https://mexcdevelop.github.io/apidocs/contract_v1_en/#get-all-informations-of-user-39-s-asset\n * @see https://mexcdevelop.github.io/apidocs/spot_v3_en/#isolated-account\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {string} [params.symbols] // required for margin, market id's separated by commas\n * @returns {object} a [balance structure]{@link https://docs.ccxt.com/#/?id=balance-structure}\n */\n await this.loadMarkets();\n let marketType = undefined;\n const request = {};\n [marketType, params] = this.handleMarketTypeAndParams('fetchBalance', undefined, params);\n const marginMode = this.safeString(params, 'marginMode');\n const isMargin = this.safeBool(params, 'margin', false);\n params = this.omit(params, ['margin', 'marginMode']);\n let response = undefined;\n if ((marginMode !== undefined) || (isMargin) || (marketType === 'margin')) {\n let parsedSymbols = undefined;\n const symbol = this.safeString(params, 'symbol');\n if (symbol === undefined) {\n const symbols = this.safeValue(params, 'symbols');\n if (symbols !== undefined) {\n parsedSymbols = this.marketIds(symbols).join(',');\n }\n }\n else {\n const market = this.market(symbol);\n parsedSymbols = market['id'];\n }\n this.checkRequiredArgument('fetchBalance', parsedSymbols, 'symbol or symbols');\n marketType = 'margin';\n request['symbols'] = parsedSymbols;\n params = this.omit(params, ['symbol', 'symbols']);\n response = await this.spotPrivateGetMarginIsolatedAccount(this.extend(request, params));\n }\n else if (marketType === 'spot') {\n response = await this.spotPrivateGetAccount(this.extend(request, params));\n }\n else if (marketType === 'coin-m' || marketType === 'usd-m') {\n response = await this.contractPrivateGetAccountAssets(this.extend(request, params));\n }\n else {\n throw new ExchangeNotAllowedMethodError('fetchBalance').exchange(this.id);\n }\n //\n // spot\n //\n // {\n // \"makerCommission\": 0,\n // \"takerCommission\": 20,\n // \"buyerCommission\": 0,\n // \"sellerCommission\": 0,\n // \"canTrade\": true,\n // \"canWithdraw\": true,\n // \"canDeposit\": true,\n // \"updateTime\": null,\n // \"accountType\": \"SPOT\",\n // \"balances\": [\n // {\n // \"asset\": \"USDT\",\n // \"free\": \"0.000000000674\",\n // \"locked\": \"0\"\n // },\n // ],\n // \"permissions\": [\"SPOT\"]\n // }\n //\n // swap\n //\n // {\n // \"success\": true,\n // \"code\": 0,\n // \"data\": [\n // {\n // \"currency\": \"BSV\",\n // \"positionMargin\": 0,\n // \"availableBalance\": 0,\n // \"cashBalance\": 0,\n // \"frozenBalance\": 0,\n // \"equity\": 0,\n // \"unrealized\": 0,\n // \"bonus\": 0\n // },\n // ]\n // }\n //\n // margin\n //\n // {\n // \"assets\": [\n // {\n // \"baseAsset\": {\n // \"asset\": \"BTC\",\n // \"borrowEnabled\": true,\n // \"borrowed\": \"0\",\n // \"free\": \"0\",\n // \"interest\": \"0\",\n // \"locked\": \"0\",\n // \"netAsset\": \"0\",\n // \"netAssetOfBtc\": \"0\",\n // \"repayEnabled\": true,\n // \"totalAsset\": \"0\"\n // },\n // \"quoteAsset\": {\n // \"asset\": \"USDT\",\n // \"borrowEnabled\": true,\n // \"borrowed\": \"0\",\n // \"free\": \"10\",\n // \"interest\": \"0\",\n // \"locked\": \"0\",\n // \"netAsset\": \"10\",\n // \"netAssetOfBtc\": \"0\",\n // \"repayEnabled\": true,\n // \"totalAsset\": \"10\"\n // },\n // \"symbol\": \"BTCUSDT\",\n // \"isolatedCreated\": true,\n // \"enabled\": true,\n // \"marginLevel\": \"999\",\n // \"marginRatio\": \"9\",\n // \"indexPrice\": \"16741.137068965517241379\",\n // \"liquidatePrice\": \"--\",\n // \"liquidateRate\": \"--\",\n // \"tradeEnabled\": true\n // }\n // ]\n // }\n //\n return this.customParseBalance(response, marketType);\n }\n async fetchMyTrades(symbol = undefined, since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name mexc#fetchMyTrades\n * @description fetch all trades made by the user\n * @param {string} symbol unified market symbol\n * @param {int} [since] the earliest time in ms to fetch trades for\n * @param {int} [limit] the maximum number of trades structures to retrieve\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {Trade[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=trade-structure}\n */\n if (symbol === undefined) {\n throw new InvalidParamsError('fetchMyTrades() requires a symbol argument').exchange(this.id);\n }\n await this.loadMarkets();\n const market = this.market(symbol);\n const [marketType, query] = this.handleMarketTypeAndParams('fetchMyTrades', market, params);\n const request = {\n 'symbol': market['id'],\n };\n let trades = undefined;\n if (marketType === 'spot') {\n if (since !== undefined) {\n request['start_time'] = since;\n }\n if (limit !== undefined) {\n request['limit'] = limit;\n }\n trades = await this.spotPrivateGetMyTrades(this.extend(request, query));\n //\n // spot\n //\n // [\n // {\n // \"symbol\": \"BTCUSDT\",\n // \"id\": \"133948532984922113\",\n // \"orderId\": \"133948532531949568\",\n // \"orderListId\": \"-1\",\n // \"price\": \"41995.51\",\n // \"qty\": \"0.0002\",\n // \"quoteQty\": \"8.399102\",\n // \"commission\": \"0.016798204\",\n // \"commissionAsset\": \"USDT\",\n // \"time\": \"1647718055000\",\n // \"isBuyer\": true,\n // \"isMaker\": false,\n // \"isBestMatch\": true\n // }\n // ]\n //\n }\n else {\n if (since !== undefined) {\n request['start_time'] = since;\n const end = this.safeInteger(params, 'end_time');\n if (end === undefined) {\n request['end_time'] = this.sum(since, this.options['maxTimeTillEnd']);\n }\n }\n if (limit !== undefined) {\n request['page_size'] = limit;\n }\n const response = await this.contractPrivateGetOrderListOrderDeals(this.extend(request, query));\n //\n // {\n // \"success\": true,\n // \"code\": \"0\",\n // \"data\": [\n // {\n // \"id\": \"299444585\",\n // \"symbol\": \"STEPN_USDT\",\n // \"side\": \"1\",\n // \"vol\": \"1\",\n // \"price\": \"2.45455\",\n // \"feeCurrency\": \"USDT\",\n // \"fee\": \"0.00147273\",\n // \"timestamp\": \"1648924557000\",\n // \"profit\": \"0\",\n // \"category\": \"1\",\n // \"orderId\": \"265307163526610432\",\n // \"positionMode\": \"1\",\n // \"taker\": true\n // }\n // ]\n // }\n //\n trades = this.safeValue(response, 'data');\n }\n return this.parseTrades(trades, market, since, limit);\n }\n async fetchOrderTrades(id, symbol = undefined, since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name mexc#fetchOrderTrades\n * @description fetch all the trades made from a single order\n * @param {string} id order id\n * @param {string} symbol unified market symbol\n * @param {int} [since] the earliest time in ms to fetch trades for\n * @param {int} [limit] the maximum number of trades to retrieve\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=trade-structure}\n */\n await this.loadMarkets();\n const request = {};\n let market = undefined;\n if (symbol !== undefined) {\n market = this.market(symbol);\n }\n const [marketType, query] = this.handleMarketTypeAndParams('fetchOrderTrades', market, params);\n let trades = undefined;\n if (marketType === 'spot') {\n if (symbol === undefined) {\n throw new InvalidParamsError('fetchOrderTrades() requires a symbol argument').exchange(this.id);\n }\n request['symbol'] = market['id'];\n request['orderId'] = id;\n trades = await this.spotPrivateGetMyTrades(this.extend(request, query));\n //\n // spot\n //\n // [\n // {\n // \"symbol\": \"BTCUSDT\",\n // \"id\": \"133948532984922113\",\n // \"orderId\": \"133948532531949568\",\n // \"orderListId\": \"-1\",\n // \"price\": \"41995.51\",\n // \"qty\": \"0.0002\",\n // \"quoteQty\": \"8.399102\",\n // \"commission\": \"0.016798204\",\n // \"commissionAsset\": \"USDT\",\n // \"time\": \"1647718055000\",\n // \"isBuyer\": true,\n // \"isMaker\": false,\n // \"isBestMatch\": true\n // }\n // ]\n //\n }\n else {\n request['order_id'] = id;\n const response = await this.contractPrivateGetOrderDealDetailsOrderId(this.extend(request, query));\n //\n // {\n // \"success\": true,\n // \"code\": \"0\",\n // \"data\": [\n // {\n // \"id\": \"299444585\",\n // \"symbol\": \"STEPN_USDT\",\n // \"side\": \"1\",\n // \"vol\": \"1\",\n // \"price\": \"2.45455\",\n // \"feeCurrency\": \"USDT\",\n // \"fee\": \"0.00147273\",\n // \"timestamp\": \"1648924557000\",\n // \"profit\": \"0\",\n // \"category\": \"1\",\n // \"orderId\": \"265307163526610432\",\n // \"positionMode\": \"1\",\n // \"taker\": true\n // }\n // ]\n // }\n //\n trades = this.safeValue(response, 'data');\n }\n return this.parseTrades(trades, market, since, limit, query);\n }\n parseDepositAddress(depositAddress, currency = undefined) {\n //\n // {\n // coin: \"USDT\",\n // network: \"BNB Smart Chain(BEP20)\",\n // address: \"0x0d48003e0c27c5de62b97c9b4cdb31fdd29da619\",\n // memo: null\n // }\n //\n const address = this.safeString(depositAddress, 'address');\n const currencyId = this.safeString(depositAddress, 'coin');\n const network = this.safeString(depositAddress, 'network');\n this.checkAddress(address);\n return {\n 'currency': this.safeCurrencyCode(currencyId, currency),\n 'address': address,\n 'tag': this.safeString(depositAddress, 'memo'),\n 'network': network,\n 'info': depositAddress,\n };\n }\n async fetchDepositAddressesByNetwork(code, params = {}) {\n /**\n * @method\n * @name mexc#fetchDepositAddressesByNetwork\n * @description fetch a dictionary of addresses for a currency, indexed by network\n * @see https://mexcdevelop.github.io/apidocs/spot_v3_en/#deposit-address-supporting-network\n * @param {string} code unified currency code of the currency for the deposit address\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} a dictionary of [address structures]{@link https://docs.ccxt.com/#/?id=address-structure} indexed by the network\n */\n await this.loadMarkets();\n const currency = this.currency(code);\n const request = {\n 'coin': currency['id'],\n };\n const network = this.safeString(params, 'network');\n if (network !== undefined) {\n request['network'] = network;\n }\n params = this.omit(params, 'network');\n const response = await this.spotPrivateGetCapitalDepositAddress(this.extend(request, params));\n //\n // [\n // {\n // coin: \"USDT\",\n // network: \"BNB Smart Chain(BEP20)\",\n // address: \"0x0d48003e0c27c5de62b97c9b4cdb31fdd29da619\",\n // memo: null\n // }\n // ...\n // ]\n //\n const addressStructures = this.parseDepositAddresses(response, undefined, false);\n return this.indexBy(addressStructures, 'network');\n }\n async createDepositAddress(code, params = {}) {\n /**\n * @method\n * @name mexc#createDepositAddress\n * @description create a currency deposit address\n * @see https://mexcdevelop.github.io/apidocs/spot_v3_en/#generate-deposit-address-supporting-network\n * @param {string} code unified currency code of the currency for the deposit address\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {string} [params.network] the blockchain network name\n * @returns {object} an [address structure]{@link https://docs.ccxt.com/#/?id=address-structure}\n */\n await this.loadMarkets();\n const currency = this.currency(code);\n const request = {\n 'coin': currency['id'],\n };\n const network = this.safeString(params, 'network');\n if (network === undefined) {\n throw new InvalidParamsError('createDepositAddress requires a `network` parameter').exchange(this.id);\n }\n if (network !== undefined) {\n request['network'] = network;\n }\n params = this.omit(params, 'network');\n const response = await this.spotPrivatePostCapitalDepositAddress(this.extend(request, params));\n // {\n // \"coin\": \"EOS\",\n // \"network\": \"EOS\",\n // \"address\": \"zzqqqqqqqqqq\",\n // \"memo\": \"MX10068\"\n // }\n return this.parseDepositAddress(response, currency);\n }\n async fetchDepositAddress(code, params = {}) {\n /**\n * @method\n * @name mexc#fetchDepositAddress\n * @description fetch the deposit address for a currency associated with this account\n * @see https://mexcdevelop.github.io/apidocs/spot_v3_en/#deposit-address-supporting-network\n * @param {string} code unified currency code\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {string} [params.network] the chain of currency, this only apply for multi-chain currency, and there is no need for single chain currency\n * @returns {object} an [address structure]{@link https://docs.ccxt.com/#/?id=address-structure}\n */\n const network = this.safeString(params, 'network');\n params = this.omit(params, ['network']);\n const addressStructures = await this.fetchDepositAddressesByNetwork(code, params);\n let result = undefined;\n if (network !== undefined) {\n result = this.safeDict(addressStructures, network);\n }\n else {\n const options = this.safeDict(this.options, 'defaultNetworks');\n const defaultNetworkForCurrency = this.safeString(options, code);\n if (defaultNetworkForCurrency !== undefined) {\n result = this.safeDict(addressStructures, defaultNetworkForCurrency);\n }\n else {\n const keys = Object.keys(addressStructures);\n const key = this.safeString(keys, 0);\n result = this.safeDict(addressStructures, key);\n }\n }\n if (result === undefined) {\n throw new GetDepositAddressError(code, network).addMessage('consider creating one using the MEXC platform').exchange(this.id);\n }\n return result;\n }\n async fetchDeposits(code = undefined, since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name mexc#fetchDeposits\n * @description fetch all deposits made to an account\n * @see https://mexcdevelop.github.io/apidocs/spot_v3_en/#deposit-history-supporting-network\n * @param {string} code unified currency code\n * @param {int} [since] the earliest time in ms to fetch deposits for\n * @param {int} [limit] the maximum number of deposits structures to retrieve\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object[]} a list of [transaction structures]{@link https://docs.ccxt.com/#/?id=transaction-structure}\n */\n await this.loadMarkets();\n const request = {\n // 'coin': currency['id'] + network example: USDT-TRX,\n // 'status': 'status',\n // 'startTime': since, // default 90 days\n // 'endTime': this.milliseconds (),\n // 'limit': limit, // default 1000, maximum 1000\n };\n let currency = undefined;\n if (code !== undefined) {\n currency = this.currency(code);\n request['coin'] = currency['id'];\n // currently mexc does not have network names unified so for certain things we might need TRX or TRC-20\n // due to that I'm applying the network parameter directly so the user can control it on its side\n const rawNetwork = this.safeString(params, 'network');\n if (rawNetwork !== undefined) {\n params = this.omit(params, 'network');\n request['coin'] += '-' + rawNetwork;\n }\n }\n if (since !== undefined) {\n request['startTime'] = since;\n }\n if (limit !== undefined) {\n if (limit > 1000) {\n throw new ExchangeError().addMessage('This exchange supports a maximum limit of 1000').exchange(this.id);\n }\n request['limit'] = limit;\n }\n const response = await this.spotPrivateGetCapitalDepositHisrec(this.extend(request, params));\n //\n // [\n // {\n // \"amount\": \"10\",\n // \"coin\": \"USDC-TRX\",\n // \"network\": \"TRX\",\n // \"status\": \"5\",\n // \"address\": \"TSMcEDDvkqY9dz8RkFnrS86U59GwEZjfvh\",\n // \"txId\": \"51a8f49e6f03f2c056e71fe3291aa65e1032880be855b65cecd0595a1b8af95b\",\n // \"insertTime\": \"1664805021000\",\n // \"unlockConfirm\": \"200\",\n // \"confirmTimes\": \"203\",\n // \"memo\": \"xxyy1122\"\n // }\n // ]\n //\n return this.parseTransactions(response, currency, since, limit);\n }\n async fetchWithdrawals(code = undefined, since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name mexc#fetchWithdrawals\n * @description fetch all withdrawals made from an account\n * @see https://mexcdevelop.github.io/apidocs/spot_v3_en/#withdraw-history-supporting-network\n * @param {string} code unified currency code\n * @param {int} [since] the earliest time in ms to fetch withdrawals for\n * @param {int} [limit] the maximum number of withdrawals structures to retrieve\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object[]} a list of [transaction structures]{@link https://docs.ccxt.com/#/?id=transaction-structure}\n */\n await this.loadMarkets();\n const request = {\n // 'coin': currency['id'],\n // 'status': 'status',\n // 'startTime': since, // default 90 days\n // 'endTime': this.milliseconds (),\n // 'limit': limit, // default 1000, maximum 1000\n };\n let currency = undefined;\n if (code !== undefined) {\n currency = this.currency(code);\n request['coin'] = currency['id'];\n }\n if (since !== undefined) {\n request['startTime'] = since;\n }\n if (limit !== undefined) {\n if (limit > 1000) {\n throw new ExchangeError().addMessage('This exchange supports a maximum limit of 1000').exchange(this.id);\n }\n request['limit'] = limit;\n }\n const response = await this.spotPrivateGetCapitalWithdrawHistory(this.extend(request, params));\n //\n // [\n // {\n // \"id\": \"adcd1c8322154de691b815eedcd10c42\",\n // \"txId\": \"0xc8c918cd69b2246db493ef6225a72ffdc664f15b08da3e25c6879b271d05e9d0\",\n // \"coin\": \"USDC-MATIC\",\n // \"network\": \"MATIC\",\n // \"address\": \"0xeE6C7a415995312ED52c53a0f8f03e165e0A5D62\",\n // \"amount\": \"2\",\n // \"transferType\": \"0\",\n // \"status\": \"7\",\n // \"transactionFee\": \"1\",\n // \"confirmNo\": null,\n // \"applyTime\": \"1664882739000\",\n // \"remark\": '',\n // \"memo\": null\n // }\n // ]\n //\n return this.parseTransactions(response, currency, since, limit);\n }\n parseTransaction(transaction, currency = undefined) {\n //\n // fetchDeposits\n //\n // {\n // \"amount\": \"10\",\n // \"coin\": \"USDC-TRX\",\n // \"network\": \"TRX\",\n // \"status\": \"5\",\n // \"address\": \"TSMcEDDvkqY9dz8RkFnrS86U59GwEZjfvh\",\n // \"txId\": \"51a8f49e6f03f2c056e71fe3291aa65e1032880be855b65cecd0595a1b8af95b\",\n // \"insertTime\": \"1664805021000\",\n // \"unlockConfirm\": \"200\",\n // \"confirmTimes\": \"203\",\n // \"memo\": \"xxyy1122\"\n // }\n //\n // fetchWithdrawals\n //\n // {\n // \"id\": \"adcd1c8322154de691b815eedcd10c42\",\n // \"txId\": \"0xc8c918cd69b2246db493ef6225a72ffdc664f15b08da3e25c6879b271d05e9d0\",\n // \"coin\": \"USDC-MATIC\",\n // \"network\": \"MATIC\",\n // \"address\": \"0xeE6C7a415995312ED52c53a0f8f03e165e0A5D62\",\n // \"amount\": \"2\",\n // \"transferType\": \"0\",\n // \"status\": \"7\",\n // \"transactionFee\": \"1\",\n // \"confirmNo\": null,\n // \"applyTime\": \"1664882739000\",\n // \"remark\": '',\n // \"memo\": null\n // }\n //\n // withdraw\n //\n // {\n // \"id\":\"25fb2831fb6d4fc7aa4094612a26c81d\"\n // }\n //\n const id = this.safeString(transaction, 'id');\n const type = (id === undefined) ? 'deposit' : 'withdrawal';\n const timestamp = this.safeInteger2(transaction, 'insertTime', 'applyTime');\n let currencyId = undefined;\n const currencyWithNetwork = this.safeString(transaction, 'coin');\n if (currencyWithNetwork !== undefined) {\n currencyId = currencyWithNetwork.split('-')[0];\n }\n const network = this.safeString(transaction, 'network');\n const code = this.safeCurrencyCode(currencyId, currency);\n const status = this.parseTransactionStatusByType(this.safeString(transaction, 'status'), type);\n let amountString = this.safeString(transaction, 'amount');\n const address = this.safeString(transaction, 'address');\n const txid = this.safeString(transaction, 'txId', '').split(':')[0]; // mexc adds ':' after the txhash for some reasons\n let fee = undefined;\n const feeCostString = this.safeString(transaction, 'transactionFee');\n if (feeCostString !== undefined) {\n fee = {\n 'cost': this.parseNumber(feeCostString),\n 'currency': code,\n };\n }\n if (type === 'withdrawal') {\n // mexc withdrawal amount includes the fee\n amountString = Precise.stringSub(amountString, feeCostString);\n }\n return {\n 'info': transaction,\n 'id': id,\n 'txid': txid,\n 'timestamp': timestamp,\n 'datetime': this.iso8601(timestamp),\n 'network': network,\n 'address': address,\n 'addressTo': address,\n 'addressFrom': undefined,\n 'tag': this.safeString(transaction, 'memo'),\n 'tagTo': undefined,\n 'tagFrom': undefined,\n 'type': type,\n 'amount': this.parseNumber(amountString),\n 'currency': code,\n 'status': status,\n 'updated': undefined,\n 'comment': undefined,\n 'internal': undefined,\n 'fee': fee,\n };\n }\n parseTransactionStatusByType(status, type = undefined) {\n const statusesByType = {\n 'deposit': {\n '1': 'failed',\n '2': 'pending',\n '3': 'pending',\n '4': 'pending',\n '5': 'ok',\n '6': 'pending',\n '7': 'failed', // REJECTED\n },\n 'withdrawal': {\n '1': 'pending',\n '2': 'pending',\n '3': 'pending',\n '4': 'pending',\n '5': 'pending',\n '6': 'pending',\n '7': 'ok',\n '8': 'failed',\n '9': 'canceled',\n '10': 'pending', // MANUAL\n },\n };\n const statuses = this.safeValue(statusesByType, type, {});\n return this.safeString(statuses, status, status);\n }\n async fetchPosition(symbol, params = {}) {\n /**\n * @method\n * @name mexc#fetchPosition\n * @description fetch data on a single open contract trade position\n * @param {string} symbol unified market symbol of the market the position is held in, default is undefined\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} a [position structure]{@link https://docs.ccxt.com/#/?id=position-structure}\n */\n await this.loadMarkets();\n const market = this.market(symbol);\n const request = {\n 'symbol': market['id'],\n };\n const response = await this.fetchPositions(undefined, this.extend(request, params));\n return this.safeValue(response, 0);\n }\n async fetchPositions(symbols = undefined, params = {}) {\n /**\n * @method\n * @name mexc#fetchPositions\n * @description fetch all open positions\n * @param {string[]|undefined} symbols list of unified market symbols\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object[]} a list of [position structure]{@link https://docs.ccxt.com/#/?id=position-structure}\n */\n await this.loadMarkets();\n const response = await this.contractPrivateGetPositionOpenPositions(params);\n //\n // {\n // \"success\": true,\n // \"code\": 0,\n // \"data\": [\n // {\n // \"positionId\": 1394650,\n // \"symbol\": \"ETH_USDT\",\n // \"positionType\": 1,\n // \"openType\": 1,\n // \"state\": 1,\n // \"holdVol\": 1,\n // \"frozenVol\": 0,\n // \"closeVol\": 0,\n // \"holdAvgPrice\": 1217.3,\n // \"openAvgPrice\": 1217.3,\n // \"closeAvgPrice\": 0,\n // \"liquidatePrice\": 1211.2,\n // \"oim\": 0.1290338,\n // \"im\": 0.1290338,\n // \"holdFee\": 0,\n // \"realised\": -0.0073,\n // \"leverage\": 100,\n // \"createTime\": 1609991676000,\n // \"updateTime\": 1609991676000,\n // \"autoAddIm\": false\n // }\n // ]\n // }\n //\n const data = this.safeValue(response, 'data', []);\n return this.parsePositions(data, symbols);\n }\n parsePosition(position, market = undefined) {\n //\n // {\n // \"positionId\": 1394650,\n // \"symbol\": \"ETH_USDT\",\n // \"positionType\": 1,\n // \"openType\": 1,\n // \"state\": 1,\n // \"holdVol\": 1,\n // \"frozenVol\": 0,\n // \"closeVol\": 0,\n // \"holdAvgPrice\": 1217.3,\n // \"openAvgPrice\": 1217.3,\n // \"closeAvgPrice\": 0,\n // \"liquidatePrice\": 1211.2,\n // \"oim\": 0.1290338,\n // \"im\": 0.1290338,\n // \"holdFee\": 0,\n // \"realised\": -0.0073,\n // \"leverage\": 100,\n // \"createTime\": 1609991676000,\n // \"updateTime\": 1609991676000,\n // \"autoAddIm\": false\n // }\n //\n market = this.safeMarket(this.safeString(position, 'symbol'), market);\n const symbol = market['symbol'];\n const contracts = this.safeString(position, 'holdVol');\n const entryPrice = this.safeNumber(position, 'openAvgPrice');\n const initialMargin = this.safeString(position, 'im');\n const rawSide = this.safeString(position, 'positionType');\n const side = (rawSide === '1') ? 'long' : 'short';\n const openType = this.safeString(position, 'margin_mode');\n const marginType = (openType === '1') ? 'isolated' : 'cross';\n const leverage = this.safeNumber(position, 'leverage');\n const liquidationPrice = this.safeNumber(position, 'liquidatePrice');\n const timestamp = this.safeInteger(position, 'updateTime');\n return this.safePosition({\n 'info': position,\n 'id': undefined,\n 'symbol': symbol,\n 'contracts': this.parseNumber(contracts),\n 'contractSize': undefined,\n 'entryPrice': entryPrice,\n 'collateral': undefined,\n 'side': side,\n 'unrealizedProfit': undefined,\n 'leverage': this.parseNumber(leverage),\n 'percentage': undefined,\n 'marginMode': marginType,\n 'notional': undefined,\n 'markPrice': undefined,\n 'lastPrice': undefined,\n 'liquidationPrice': liquidationPrice,\n 'initialMargin': this.parseNumber(initialMargin),\n 'initialMarginPercentage': undefined,\n 'maintenanceMargin': undefined,\n 'maintenanceMarginPercentage': undefined,\n 'marginRatio': undefined,\n 'timestamp': timestamp,\n 'datetime': this.iso8601(timestamp),\n 'hedged': undefined,\n 'stopLossPrice': undefined,\n 'takeProfitPrice': undefined,\n 'lastUpdateTimestamp': undefined,\n });\n }\n async fetchTransfer(id, since = undefined, limit = undefined, params = {}) {\n const [marketType, query] = this.handleMarketTypeAndParams('fetchTransfer', undefined, params);\n await this.loadMarkets();\n if (marketType === 'spot') {\n const request = {\n 'transact_id': id,\n };\n const response = await this.spot2PrivateGetAssetInternalTransferInfo(this.extend(request, query));\n //\n // {\n // \"code\": \"200\",\n // \"data\": {\n // \"currency\": \"USDT\",\n // \"amount\": \"1\",\n // \"transact_id\": \"954877a2ef54499db9b28a7cf9ebcf41\",\n // \"from\": \"MAIN\",\n // \"to\": \"CONTRACT\",\n // \"transact_state\": \"SUCCESS\"\n // }\n // }\n //\n const data = this.safeValue(response, 'data', {});\n return this.parseTransfer(data);\n }\n else if (marketType === 'swap') {\n throw new MarketTypeNotSupportedError(marketType).addMessage('fetchTransfer() is not supported for ' + marketType).exchange(this.id);\n }\n return undefined;\n }\n async fetchTransfers(code = undefined, since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name mexc#fetchTransfers\n * @description fetch a history of internal transfers made on an account\n * @param {string} code unified currency code of the currency transferred\n * @param {int} [since] the earliest time in ms to fetch transfers for\n * @param {int} [limit] the maximum number of transfers structures to retrieve\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object[]} a list of [transfer structures]{@link https://docs.ccxt.com/#/?id=transfer-structure}\n */\n const [marketType, query] = this.handleMarketTypeAndParams('fetchTransfers', undefined, params);\n await this.loadMarkets();\n const request = {};\n let currency = undefined;\n let resultList = undefined;\n if (code !== undefined) {\n currency = this.currency(code);\n request['currency'] = currency['id'];\n }\n if (marketType === 'spot') {\n if (since !== undefined) {\n request['start_time'] = since;\n }\n if (limit !== undefined) {\n if (limit > 50) {\n throw new ExchangeError().addMessage('This exchange supports a maximum limit of 50').exchange(this.id);\n }\n request['page-size'] = limit;\n }\n const response = await this.spot2PrivateGetAssetInternalTransferRecord(this.extend(request, query));\n //\n // {\n // \"code\": \"200\",\n // \"data\": {\n // \"total_page\": \"1\",\n // \"total_size\": \"5\",\n // \"result_list\": [{\n // \"currency\": \"USDT\",\n // \"amount\": \"1\",\n // \"transact_id\": \"954877a2ef54499db9b28a7cf9ebcf41\",\n // \"from\": \"MAIN\",\n // \"to\": \"CONTRACT\",\n // \"transact_state\": \"SUCCESS\"\n // },\n // ...\n // ]\n // }\n // }\n //\n const data = this.safeValue(response, 'data', {});\n resultList = this.safeValue(data, 'result_list', []);\n }\n else if (marketType === 'swap') {\n if (limit !== undefined) {\n request['page_size'] = limit;\n }\n const response = await this.contractPrivateGetAccountTransferRecord(this.extend(request, query));\n const data = this.safeValue(response, 'data');\n resultList = this.safeValue(data, 'resultList');\n //\n // {\n // \"success\": true,\n // \"code\": \"0\",\n // \"data\": {\n // \"pageSize\": \"20\",\n // \"totalCount\": \"10\",\n // \"totalPage\": \"1\",\n // \"currentPage\": \"1\",\n // \"resultList\": [\n // {\n // \"id\": \"2980812\",\n // \"txid\": \"fa8a1e7bf05940a3b7025856dc48d025\",\n // \"currency\": \"USDT\",\n // \"amount\": \"22.90213135\",\n // \"type\": \"IN\",\n // \"state\": \"SUCCESS\",\n // \"createTime\": \"1648849076000\",\n // \"updateTime\": \"1648849076000\"\n // },\n // ]\n // }\n // }\n //\n }\n return this.parseTransfers(resultList, currency, since, limit);\n }\n // https://mexcdevelop.github.io/apidocs/spot_v3_en/#query-sub-account-asset\n // currently only spot wallet is supported by the exchange\n async fetchSubAccountBalances(uid, params = {}) {\n await this.loadMarkets();\n const response = await this.spotPrivateGetSubAccountAsset(this.extend({ 'subAccount': uid, 'accountType': 'SPOT' }));\n // {\n // \"balances\": [\n // {\n // \"asset\": \"MX\",\n // \"free\": \"3\",\n // \"locked\": \"0\"\n // },\n // {\n // \"asset\": \"BTC\",\n // \"free\": \"0.0003\",\n // \"locked\": \"0\"\n // }\n // ]\n // }\n const balances = this.safeValue(response, 'balances', []);\n const result = {};\n for (let i = 0; i < balances.length; i++) {\n const balance = balances[i];\n const code = this.safeCurrencyCode(this.safeString(balance, 'asset'));\n result[code] = {\n 'free': this.safeNumber(balance, 'free'),\n 'used': this.safeNumber(balance, 'locked'),\n 'total': this.safeNumber(balance, 'free') + this.safeNumber(balance, 'locked'),\n };\n }\n return { 'spot': result };\n }\n // https://mexcdevelop.github.io/apidocs/spot_v3_en/#query-sub-account-list-for-master-account\n async getSubAccounts() {\n await this.loadMarkets();\n const response = await this.spotPrivateGetSubAccountList();\n // {\n // \"subAccounts\":[\n // {\n // \"subAccount\":\"mexc666\",\n // \"isFreeze\":false,\n // \"createTime\":1544433328000,\n // \"uid\": \"49910511\"\n // },\n // {\n // \"subAccount\":\"mexc888\",\n // \"isFreeze\":false,\n // \"createTime\":1544433328000,\n // \"uid\": \"91921059\"\n // }\n // ]\n // }\n const subAccounts = this.safeValue(response, 'subAccounts', {});\n return subAccounts.map((subAccount) => ({\n 'uid': subAccount.subAccount,\n }));\n }\n // https://mexcdevelop.github.io/apidocs/spot_v3_en/#universal-transfer-for-master-account\n async subAccountTransfer(code, amount, fromAccountType, toAccountType, fromUid, toUid, params = {}) {\n await this.loadMarkets();\n const currency = this.currency(code);\n const accountsByType = this.safeDict(this.options, 'accountsByType', {});\n const fromAccountTypeExt = this.safeString(accountsByType, fromAccountType);\n const toAccountTypeExt = this.safeString(accountsByType, toAccountType);\n const requestedAmount = this.currencyToPrecision(code, amount);\n const request = {\n 'asset': currency['id'],\n 'amount': requestedAmount,\n 'fromAccountType': fromAccountTypeExt,\n 'toAccountType': toAccountTypeExt,\n };\n if (fromUid !== 'master')\n request['fromAccount'] = fromUid;\n if (toUid !== 'master')\n request['toAccount'] = toUid;\n if (!('clientOid' in params)) {\n request['clientOid'] = this.uuid();\n }\n const response = await this.spotPrivatePostCapitalSubAccountUniversalTransfer(this.extend(request, params));\n //\n // {\n // \"tranId\": \"ebb06123e6a64f4ab234b396c548d57e\"\n // }\n //\n const transaction = this.parseTransfer(response, currency);\n return this.extend(transaction, {\n 'amount': requestedAmount,\n 'fromAccount': fromUid,\n 'toAccount': toUid,\n });\n }\n async transfer(code, amount, fromAccount, toAccount, params = {}) {\n /**\n * @method\n * @name mexc#transfer\n * @description transfer currency internally between wallets on the same account\n * @see https://mexcdevelop.github.io/apidocs/spot_v3_en/#user-universal-transfer\n * @param {string} code unified currency code\n * @param {float} amount amount to transfer\n * @param {string} fromAccount account to transfer from\n * @param {string} toAccount account to transfer to\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {string} [params.symbol] market symbol required for margin account transfers eg:BTCUSDT\n * @returns {object} a [transfer structure]{@link https://docs.ccxt.com/#/?id=transfer-structure}\n */\n await this.loadMarkets();\n const currency = this.currency(code);\n const accounts = {\n 'spot': 'SPOT',\n 'swap': 'FUTURES',\n 'margin': 'ISOLATED_MARGIN',\n };\n const fromId = this.safeString(accounts, fromAccount);\n const toId = this.safeString(accounts, toAccount);\n if (fromId === undefined) {\n const keys = Object.keys(accounts);\n throw new InvalidParamsError('fromAccount must be one of ' + keys.join(', ')).exchange(this.id);\n }\n if (toId === undefined) {\n const keys = Object.keys(accounts);\n throw new InvalidParamsError('toAccount must be one of ' + keys.join(', ')).exchange(this.id);\n }\n const request = {\n 'asset': currency['id'],\n 'amount': this.currencyToPrecision(code, amount),\n 'fromAccountType': fromId,\n 'toAccountType': toId,\n };\n if ((fromId === 'ISOLATED_MARGIN') || (toId === 'ISOLATED_MARGIN')) {\n const symbol = this.safeString(params, 'symbol');\n params = this.omit(params, 'symbol');\n if (symbol === undefined) {\n throw new InvalidParamsError('transfer() requires a symbol argument for isolated margin').exchange(this.id);\n }\n const market = this.market(symbol);\n request['symbol'] = market['id'];\n }\n const response = await this.spotPrivatePostCapitalTransfer(this.extend(request, params));\n //\n // {\n // \"tranId\": \"ebb06123e6a64f4ab234b396c548d57e\"\n // }\n //\n const transaction = this.parseTransfer(response, currency);\n return this.extend(transaction, {\n 'amount': this.amountToPrecision(code, amount),\n 'fromAccount': fromAccount,\n 'toAccount': toAccount,\n });\n }\n parseTransfer(transfer, currency = undefined) {\n //\n // spot: fetchTransfer\n //\n // {\n // \"currency\": \"USDT\",\n // \"amount\": \"1\",\n // \"transact_id\": \"b60c1df8e7b24b268858003f374ecb75\",\n // \"from\": \"MAIN\",\n // \"to\": \"CONTRACT\",\n // \"transact_state\": \"WAIT\"\n // }\n //\n // swap: fetchTransfer\n //\n // {\n // \"currency\": \"USDT\",\n // \"amount\": \"22.90213135\",\n // \"txid\": \"fa8a1e7bf05940a3b7025856dc48d025\",\n // \"id\": \"2980812\",\n // \"type\": \"IN\",\n // \"state\": \"SUCCESS\",\n // \"createTime\": \"1648849076000\",\n // \"updateTime\": \"1648849076000\"\n // }\n //\n // transfer\n //\n // {\n // \"tranId\": \"ebb06123e6a64f4ab234b396c548d57e\"\n // }\n //\n const currencyId = this.safeString(transfer, 'currency');\n const id = this.safeStringN(transfer, ['transact_id', 'txid', 'tranId']);\n const timestamp = this.safeInteger(transfer, 'createTime');\n const datetime = (timestamp !== undefined) ? this.iso8601(timestamp) : undefined;\n const direction = this.safeString(transfer, 'type');\n let accountFrom = undefined;\n let accountTo = undefined;\n if (direction !== undefined) {\n accountFrom = (direction === 'IN') ? 'MAIN' : 'CONTRACT';\n accountTo = (direction === 'IN') ? 'CONTRACT' : 'MAIN';\n }\n else {\n accountFrom = this.safeString(transfer, 'from');\n accountTo = this.safeString(transfer, 'to');\n }\n return {\n 'info': transfer,\n 'id': id,\n 'timestamp': timestamp,\n 'datetime': datetime,\n 'currency': this.safeCurrencyCode(currencyId, currency),\n 'amount': this.safeNumber(transfer, 'amount'),\n 'fromAccount': this.parseAccountId(accountFrom),\n 'toAccount': this.parseAccountId(accountTo),\n 'status': this.parseTransferStatus(this.safeString2(transfer, 'transact_state', 'state')),\n };\n }\n parseAccountId(status) {\n const statuses = {\n 'MAIN': 'spot',\n 'CONTRACT': 'swap',\n };\n return this.safeString(statuses, status, status);\n }\n parseTransferStatus(status) {\n const statuses = {\n 'SUCCESS': 'ok',\n 'FAILED': 'failed',\n 'WAIT': 'pending',\n };\n return this.safeString(statuses, status, status);\n }\n async withdraw(code, amount, address, tag = undefined, params = {}) {\n /**\n * @method\n * @name mexc#withdraw\n * @description make a withdrawal\n * @see https://mexcdevelop.github.io/apidocs/spot_v3_en/#withdraw\n * @param {string} code unified currency code\n * @param {float} amount the amount to withdraw\n * @param {string} address the address to withdraw to\n * @param {string} tag\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} a [transaction structure]{@link https://docs.ccxt.com/#/?id=transaction-structure}\n */\n [tag, params] = this.handleWithdrawTagAndParams(tag, params);\n const networks = this.safeValue(this.options, 'networks', {});\n let network = this.safeString2(params, 'network', 'chain'); // this line allows the user to specify either ERC20 or ETH\n network = this.safeString(networks, network, network); // handle ETH > ERC-20 alias\n this.checkAddress(address);\n await this.loadMarkets();\n const currency = this.currency(code);\n const precisionAmount = this.currencyToPrecision(code, amount, network);\n const request = {\n 'coin': currency['id'],\n 'address': address,\n 'amount': precisionAmount,\n };\n if (tag !== undefined) {\n request['memo'] = tag;\n }\n if (network !== undefined) {\n request['network'] = network;\n params = this.omit(params, ['network', 'chain']);\n }\n const response = await this.spotPrivatePostCapitalWithdrawApply(this.extend(request, params));\n //\n // {\n // \"id\":\"7213fea8e94b4a5593d507237e5a555b\"\n // }\n //\n return this.parseTransaction(response, currency);\n }\n async fetchTransactionFees(codes = undefined, params = {}) {\n /**\n * @method\n * @name mexc#fetchTransactionFees\n * @description fetch deposit and withdrawal fees\n * @see https://mexcdevelop.github.io/apidocs/spot_v3_en/#query-the-currency-information\n * @param {string[]|undefined} codes returns fees for all currencies if undefined\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object[]} a list of [fee structures]{@link https://docs.ccxt.com/#/?id=fee-structure}\n */\n await this.loadMarkets();\n const response = await this.spotPrivateGetCapitalConfigGetall(params);\n //\n // [\n // {\n // \"coin\": \"AGLD\",\n // \"name\": \"Adventure Gold\",\n // \"networkList\": [\n // {\n // \"coin\": \"AGLD\",\n // \"depositDesc\": null,\n // \"depositEnable\": true,\n // \"minConfirm\": \"0\",\n // \"name\": \"Adventure Gold\",\n // \"network\": \"ERC20\",\n // \"withdrawEnable\": true,\n // \"withdrawFee\": \"10.000000000000000000\",\n // \"withdrawIntegerMultiple\": null,\n // \"withdrawMax\": \"1200000.000000000000000000\",\n // \"withdrawMin\": \"20.000000000000000000\",\n // \"sameAddress\": false,\n // \"contract\": \"0x32353a6c91143bfd6c7d363b546e62a9a2489a20\",\n // \"withdrawTips\": null,\n // \"depositTips\": null\n // }\n // ...\n // ]\n // },\n // ...\n // ]\n //\n return this.parseTransactionFees(response, codes);\n }\n parseTransactionFees(response, codes = undefined) {\n const withdrawFees = {};\n for (let i = 0; i < response.length; i++) {\n const entry = response[i];\n const currencyId = this.safeString(entry, 'coin');\n const currency = this.safeCurrency(currencyId);\n const code = this.safeString(currency, 'code');\n if ((codes === undefined) || (this.inArray(code, codes))) {\n withdrawFees[code] = this.parseTransactionFee(entry, currency);\n }\n }\n return {\n 'withdraw': withdrawFees,\n 'deposit': {},\n 'info': response,\n };\n }\n parseTransactionFee(transaction, currency = undefined) {\n //\n // {\n // \"coin\": \"AGLD\",\n // \"name\": \"Adventure Gold\",\n // \"networkList\": [\n // {\n // \"coin\": \"AGLD\",\n // \"depositDesc\": null,\n // \"depositEnable\": true,\n // \"minConfirm\": \"0\",\n // \"name\": \"Adventure Gold\",\n // \"network\": \"ERC20\",\n // \"withdrawEnable\": true,\n // \"withdrawFee\": \"10.000000000000000000\",\n // \"withdrawIntegerMultiple\": null,\n // \"withdrawMax\": \"1200000.000000000000000000\",\n // \"withdrawMin\": \"20.000000000000000000\",\n // \"sameAddress\": false,\n // \"contract\": \"0x32353a6c91143bfd6c7d363b546e62a9a2489a20\",\n // \"withdrawTips\": null,\n // \"depositTips\": null\n // }\n // ...\n // ]\n // }\n //\n const networkList = this.safeValue(transaction, 'networkList', []);\n const result = {};\n for (let j = 0; j < networkList.length; j++) {\n const networkEntry = networkList[j];\n const network = this.safeString(networkEntry, 'network');\n const fee = this.safeNumber(networkEntry, 'withdrawFee');\n result[network] = fee;\n }\n return result;\n }\n async fetchDepositWithdrawFees(codes = undefined, params = {}) {\n /**\n * @method\n * @name mexc#fetchDepositWithdrawFees\n * @description fetch deposit and withdrawal fees\n * @see https://mexcdevelop.github.io/apidocs/spot_v3_en/#query-the-currency-information\n * @param {string[]|undefined} codes returns fees for all currencies if undefined\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object[]} a list of [fee structures]{@link https://docs.ccxt.com/#/?id=fee-structure}\n */\n await this.loadMarkets();\n const response = await this.spotPrivateGetCapitalConfigGetall(params);\n //\n // [\n // {\n // \"coin\": \"AGLD\",\n // \"name\": \"Adventure Gold\",\n // \"networkList\": [\n // {\n // \"coin\": \"AGLD\",\n // \"depositDesc\": null,\n // \"depositEnable\": true,\n // \"minConfirm\": \"0\",\n // \"name\": \"Adventure Gold\",\n // \"network\": \"ERC20\",\n // \"withdrawEnable\": true,\n // \"withdrawFee\": \"10.000000000000000000\",\n // \"withdrawIntegerMultiple\": null,\n // \"withdrawMax\": \"1200000.000000000000000000\",\n // \"withdrawMin\": \"20.000000000000000000\",\n // \"sameAddress\": false,\n // \"contract\": \"0x32353a6c91143bfd6c7d363b546e62a9a2489a20\",\n // \"withdrawTips\": null,\n // \"depositTips\": null\n // }\n // ...\n // ]\n // },\n // ...\n // ]\n //\n return this.parseDepositWithdrawFees(response, codes, 'coin');\n }\n parseDepositWithdrawFee(fee, currency = undefined) {\n //\n // {\n // \"coin\": \"AGLD\",\n // \"name\": \"Adventure Gold\",\n // \"networkList\": [\n // {\n // \"coin\": \"AGLD\",\n // \"depositDesc\": null,\n // \"depositEnable\": true,\n // \"minConfirm\": \"0\",\n // \"name\": \"Adventure Gold\",\n // \"network\": \"ERC20\",\n // \"withdrawEnable\": true,\n // \"withdrawFee\": \"10.000000000000000000\",\n // \"withdrawIntegerMultiple\": null,\n // \"withdrawMax\": \"1200000.000000000000000000\",\n // \"withdrawMin\": \"20.000000000000000000\",\n // \"sameAddress\": false,\n // \"contract\": \"0x32353a6c91143bfd6c7d363b546e62a9a2489a20\",\n // \"withdrawTips\": null,\n // \"depositTips\": null\n // }\n // ...\n // ]\n // }\n //\n const networkList = this.safeValue(fee, 'networkList', []);\n const result = this.depositWithdrawFee(fee);\n for (let j = 0; j < networkList.length; j++) {\n const networkEntry = networkList[j];\n const network = this.safeString(networkEntry, 'network');\n result['networks'][network] = {\n 'withdraw': {\n 'fee': this.safeNumber(networkEntry, 'withdrawFee'),\n 'percentage': undefined,\n },\n 'deposit': {\n 'fee': undefined,\n 'percentage': undefined,\n },\n };\n }\n return this.assignDefaultDepositWithdrawFees(result);\n }\n handleMarginModeAndParams(methodName, params = {}, defaultValue = undefined) {\n /**\n * @ignore\n * @method\n * @description marginMode specified by params[\"marginMode\"], this.options[\"marginMode\"], this.options[\"defaultMarginMode\"], params[\"margin\"] = true or this.options[\"defaultType\"] = 'margin'\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {bool} [params.margin] true for trading spot-margin\n * @returns {Array} the marginMode in lowercase\n */\n const defaultType = this.safeString(this.options, 'defaultType');\n const isMargin = this.safeBool(params, 'margin', false);\n let marginMode = undefined;\n [marginMode, params] = super.handleMarginModeAndParams(methodName, params, defaultValue);\n if ((defaultType === 'margin') || (isMargin === true)) {\n marginMode = 'isolated';\n }\n return [marginMode, params];\n }\n async sign(path, api = 'public', method = 'GET', params = {}, headers = undefined, body = undefined) {\n const section = this.safeString(api, 0);\n const access = this.safeString(api, 1);\n [path, params] = this.resolvePath(path, params);\n let url = undefined;\n if (section === 'spot' || section === 'broker') {\n if (section === 'broker') {\n url = this.urls['api'][section][access] + '/' + path;\n }\n else {\n url = this.urls['api'][section][access] + '/api/' + this.version + '/' + path;\n }\n let paramsEncoded = '';\n if (access === 'private') {\n params['timestamp'] = this.nonce();\n params['recvWindow'] = this.safeInteger(this.options, 'recvWindow', 5000);\n }\n if (Object.keys(params).length) {\n paramsEncoded = this.urlencode(params);\n url += '?' + paramsEncoded;\n }\n if (access === 'private') {\n this.checkRequiredCredentials();\n let signature = undefined;\n if (this.externalSigner) {\n signature = await this.externalSigner.sign({\n 'payload': this.encode(paramsEncoded),\n 'publicApiKey': this.apiKey,\n 'exchangeId': this.id,\n });\n }\n else {\n signature = this.hmac(this.encode(paramsEncoded), this.encode(this.secret), sha256);\n }\n url += '&' + 'signature=' + signature;\n headers = {\n 'X-MEXC-APIKEY': this.apiKey,\n 'source': this.safeString(this.options, 'broker', 'CEDE'),\n };\n }\n if (method === 'POST') {\n headers['Content-Type'] = 'application/json';\n }\n }\n else if (section === 'contract' || section === 'spot2') {\n url = this.urls['api'][section][access] + '/' + this.implodeParams(path, params);\n params = this.omit(params, this.extractParams(path));\n if (access === 'public') {\n if (Object.keys(params).length) {\n url += '?' + this.urlencode(params);\n }\n }\n else {\n this.checkRequiredCredentials();\n const timestamp = this.nonce().toString();\n let auth = '';\n headers = {\n 'ApiKey': this.apiKey,\n 'Request-Time': timestamp,\n 'Content-Type': 'application/json',\n 'source': this.safeString(this.options, 'broker', 'CEDE'),\n };\n if (method === 'POST') {\n auth = this.json(params);\n body = auth;\n }\n else {\n params = this.keysort(params);\n if (Object.keys(params).length) {\n auth += this.urlencode(params);\n url += '?' + auth;\n }\n }\n auth = this.apiKey + timestamp + auth;\n let signature = undefined;\n if (this.externalSigner) {\n signature = await this.externalSigner.sign({\n 'payload': this.encode(auth),\n 'publicApiKey': this.apiKey,\n 'exchangeId': this.id,\n });\n }\n else {\n signature = this.hmac(this.encode(auth), this.encode(this.secret), sha256);\n }\n headers['Signature'] = signature;\n }\n }\n return { 'url': url, 'method': method, 'body': body, 'headers': headers };\n }\n handleErrors(code, reason, url, method, headers, body, response, requestHeaders, requestBody) {\n if (response === undefined) {\n return undefined;\n }\n // spot\n // {\"code\":-1128,\"msg\":\"Combination of optional parameters invalid.\",\"_extend\":null}\n // {\"success\":false,\"code\":123456,\"message\":\"Order quantity error....\"}\n //\n // contract\n //\n // {\"code\":10232,\"msg\":\"The currency not exist\"}\n // {\"code\":10216,\"msg\":\"No available deposit address\"}\n // {\"success\":true, \"code\":0, \"data\":1634095541710}\n //\n const success = this.safeBool(response, 'success', false); // v1\n if (success === true) {\n return undefined;\n }\n const responseCode = this.safeString(response, 'code', undefined);\n if ((responseCode !== undefined) && (responseCode !== '200') && (responseCode !== '0')) {\n const feedback = this.id + ' ' + body;\n this.throwBroadlyMatchedException(this.exceptions['broad'], body, feedback);\n this.throwExactlyMatchedException(this.exceptions['exact'], responseCode, feedback);\n throw new ExchangeError().addMessage(feedback).exchange(this.id);\n }\n return undefined;\n }\n}\n","// ----------------------------------------------------------------------------\n\n// PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:\n// https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code\n// EDIT THE CORRESPONDENT .ts FILE INSTEAD\n\n// ---------------------------------------------------------------------------\nimport Exchange from './abstract/okx.js';\nimport { Precise } from './base/Precise.js';\nimport { TICK_SIZE } from './base/functions/number.js';\nimport { AuthenticationError, ExchangeAccountSuspendedError, ExchangeError, ExchangeInvalidNonceError, ExchangeInvalidPermissionsError, ExchangeNotAllowedMethodError, ExchangeNotAvailableError, ExchangeOperationFailedError, ExchangeRateLimitExceededError, ExchangeRequestExpiredError, ExchangeTransferError, ExchangeUnderMaintenanceError, ExchangeUnknownAssetError, GetDepositAddressError, InsufficientBalanceError, InternalError, InvalidAddressError, InvalidParamsError, MarketTypeNotSupportedError, OrderNotFoundError, OverWithdrawMaximumError, TradeError, UnderWithdrawMinimumError, WhitelistCheckFailedError, WithdrawalError, WithdrawalForbiddenError } from './sdk/errors.js';\nimport { SdkErrorMessages } from './sdk/errorsMetadata.js';\nimport { sha256 } from './static_dependencies/noble-hashes/sha256.js';\n// ---------------------------------------------------------------------------\n/**\n * @class okx\n * @augments Exchange\n */\nexport default class okx extends Exchange {\n describe() {\n return this.deepExtend(super.describe(), {\n 'id': 'okx',\n 'name': 'OKX',\n 'countries': ['CN', 'US'],\n 'version': 'v5',\n 'rateLimit': 100 * 1.03,\n 'pro': true,\n 'certified': true,\n 'termId': '',\n 'has': {\n 'CORS': undefined,\n 'spot': true,\n 'margin': true,\n 'swap': true,\n 'future': true,\n 'option': true,\n 'cancelAllOrders': false,\n 'cancelOrder': true,\n 'cancelOrders': true,\n 'createDepositAddress': false,\n 'createMarketBuyOrderWithCost': true,\n 'createMarketSellOrderWithCost': true,\n 'createOrder': true,\n 'createOrders': true,\n 'createOrderWithTakeProfitAndStopLoss': true,\n 'createTakeProfitOrder': true,\n 'createTrailingPercentOrder': true,\n 'createTriggerOrder': true,\n 'editOrder': true,\n 'fetchAccounts': true,\n 'fetchBalance': true,\n 'fetchCanceledOrders': true,\n 'fetchClosedOrder': undefined,\n 'fetchClosedOrders': true,\n 'fetchCurrencies': true,\n 'fetchDeposit': true,\n 'fetchDepositAddress': true,\n 'fetchDepositAddresses': false,\n 'fetchDepositAddressesByNetwork': true,\n 'fetchDeposits': true,\n 'fetchDepositsWithdrawals': false,\n 'fetchDepositWithdrawFee': 'emulated',\n 'fetchDepositWithdrawFees': true,\n 'fetchLedger': true,\n 'fetchLedgerEntry': undefined,\n 'fetchMarkets': true,\n 'fetchMyTrades': true,\n 'fetchOHLCV': true,\n 'fetchOpenOrder': undefined,\n 'fetchOpenOrders': true,\n 'fetchOrder': true,\n 'fetchOrderBook': true,\n 'fetchOrderBooks': false,\n 'fetchOrders': false,\n 'fetchOrderTrades': true,\n 'fetchPermissions': undefined,\n 'fetchPosition': true,\n 'fetchPositions': true,\n 'fetchPositionsForSymbol': true,\n 'fetchPositionsRisk': false,\n 'fetchStatus': true,\n 'fetchTicker': true,\n 'fetchTickers': true,\n 'fetchTime': true,\n 'fetchTrades': true,\n 'fetchTradingFee': true,\n 'fetchTradingFees': false,\n 'fetchTradingLimits': false,\n 'fetchTransactionFee': false,\n 'fetchTransactionFees': false,\n 'fetchTransactions': false,\n 'fetchTransfer': true,\n 'fetchTransfers': true,\n 'fetchWithdrawal': true,\n 'fetchWithdrawals': true,\n 'fetchWithdrawalWhitelist': false,\n 'transfer': true,\n 'withdraw': true,\n },\n 'timeframes': {\n '1m': '1m',\n '3m': '3m',\n '5m': '5m',\n '15m': '15m',\n '30m': '30m',\n '1h': '1H',\n '2h': '2H',\n '4h': '4H',\n '6h': '6H',\n '12h': '12H',\n '1d': '1D',\n '1w': '1W',\n '1M': '1M',\n '3M': '3M',\n },\n 'hostname': 'www.okx.com',\n 'urls': {\n 'logo': 'https://user-images.githubusercontent.com/1294454/152485636-38b19e4a-bece-4dec-979a-5982859ffc04.jpg',\n 'api': {\n 'rest': 'https://{hostname}',\n },\n 'www': 'https://www.okx.com',\n 'doc': 'https://www.okx.com/docs-v5/en/',\n 'fees': 'https://www.okx.com/pages/products/fees.html',\n 'referral': {\n // https://www.okx.com/join/CCXT2023 - I removed the code for now, because CWS is blocking until we explain our affiliate program to our users\n // old reflink 0% discount https://www.okx.com/join/1888677\n // new reflink 20% discount https://www.okx.com/join/CCXT2023\n 'url': 'https://www.okx.com/',\n 'discount': 0.2,\n },\n 'test': {\n 'rest': 'https://{hostname}',\n },\n },\n 'api': {\n 'public': {\n 'get': {\n 'market/books-full': 2,\n 'market/tickers': 1,\n 'market/ticker': 1,\n 'market/index-tickers': 1,\n 'market/books': 1 / 2,\n 'market/books-lite': 5 / 3,\n 'market/candles': 1 / 2,\n 'market/history-candles': 1,\n 'market/index-candles': 1,\n 'market/history-index-candles': 2,\n 'market/mark-price-candles': 1,\n 'market/history-mark-price-candles': 2,\n 'market/trades': 1 / 5,\n 'market/history-trades': 2,\n 'market/option/instrument-family-trades': 1,\n 'market/platform-24-volume': 10,\n 'market/open-oracle': 50,\n 'market/exchange-rate': 20,\n 'market/index-components': 1,\n 'public/economic-calendar': 50,\n 'market/block-tickers': 1,\n 'market/block-ticker': 1,\n 'public/block-trades': 1,\n 'public/instruments': 1,\n 'public/delivery-exercise-history': 1 / 2,\n 'public/open-interest': 1,\n 'public/funding-rate': 1,\n 'public/funding-rate-history': 1,\n 'public/price-limit': 1,\n 'public/opt-summary': 1,\n 'public/estimated-price': 2,\n 'public/discount-rate-interest-free-quota': 10,\n 'public/time': 2,\n 'public/mark-price': 2,\n 'public/position-tiers': 2,\n 'public/interest-rate-loan-quota': 10,\n 'public/vip-interest-rate-loan-quota': 10,\n 'public/underlying': 1,\n 'public/insurance-fund': 2,\n 'public/convert-contract-coin': 2,\n 'public/option-trades': 1,\n 'public/instrument-tick-bands': 4,\n 'rubik/stat/trading-data/support-coin': 4,\n 'rubik/stat/taker-volume': 4,\n 'rubik/stat/margin/loan-ratio': 4,\n // long/short\n 'rubik/stat/contracts/long-short-account-ratio': 4,\n 'rubik/stat/contracts/open-interest-volume': 4,\n 'rubik/stat/option/open-interest-volume': 4,\n // put/call\n 'rubik/stat/option/open-interest-volume-ratio': 4,\n 'rubik/stat/option/open-interest-volume-expiry': 4,\n 'rubik/stat/option/open-interest-volume-strike': 4,\n 'rubik/stat/option/taker-block-volume': 4,\n 'system/status': 50,\n // public api\n 'sprd/spreads': 1,\n 'sprd/books': 1 / 2,\n 'sprd/ticker': 1,\n 'sprd/public-trades': 1 / 5,\n 'tradingBot/grid/ai-param': 1,\n 'tradingBot/grid/min-investment': 1,\n 'tradingBot/public/rsi-back-testing': 1,\n 'asset/exchange-list': 5 / 3,\n 'finance/staking-defi/eth/apy-history': 5 / 3,\n 'finance/savings/lending-rate-summary': 5 / 3,\n 'finance/savings/lending-rate-history': 5 / 3,\n // public broker\n 'finance/sfp/dcd/products': 2 / 3,\n // copytrading\n 'copytrading/public-lead-traders': 4,\n 'copytrading/public-weekly-pnl': 4,\n 'copytrading/public-stats': 4,\n 'copytrading/public-preference-currency': 4,\n 'copytrading/public-current-subpositions': 4,\n 'copytrading/public-subpositions-history': 4,\n },\n },\n 'private': {\n 'get': {\n // rfq\n 'rfq/counterparties': 4,\n 'rfq/maker-instrument-settings': 4,\n 'rfq/mmp-config': 4,\n 'rfq/rfqs': 10,\n 'rfq/quotes': 10,\n 'rfq/trades': 4,\n 'rfq/public-trades': 4,\n // sprd\n 'sprd/order': 1 / 3,\n 'sprd/orders-pending': 1 / 3,\n 'sprd/orders-history': 1 / 2,\n 'sprd/orders-history-archive': 1 / 2,\n 'sprd/trades': 1 / 3,\n // trade\n 'trade/order': 1 / 3,\n 'trade/orders-pending': 1 / 3,\n 'trade/orders-history': 1 / 2,\n 'trade/orders-history-archive': 1,\n 'trade/fills': 1 / 3,\n 'trade/fills-history': 2.2,\n 'trade/fills-archive': 2,\n 'trade/order-algo': 1,\n 'trade/orders-algo-pending': 1,\n 'trade/orders-algo-history': 1,\n 'trade/easy-convert-currency-list': 20,\n 'trade/easy-convert-history': 20,\n 'trade/one-click-repay-currency-list': 20,\n 'trade/one-click-repay-history': 20,\n 'trade/account-rate-limit': 1,\n // asset\n 'asset/currencies': 5 / 3,\n 'asset/balances': 5 / 3,\n 'asset/non-tradable-assets': 5 / 3,\n 'asset/asset-valuation': 10,\n 'asset/transfer-state': 10,\n 'asset/bills': 5 / 3,\n 'asset/deposit-lightning': 5,\n 'asset/deposit-address': 5 / 3,\n 'asset/deposit-history': 5 / 3,\n 'asset/withdrawal-history': 5 / 3,\n 'asset/deposit-withdraw-status': 20,\n 'asset/convert/currencies': 5 / 3,\n 'asset/convert/currency-pair': 5 / 3,\n 'asset/convert/history': 5 / 3,\n 'asset/monthly-statement': 2,\n // account\n 'account/balance': 2,\n 'account/positions': 2,\n 'account/positions-history': 100,\n 'account/account-position-risk': 2,\n 'account/bills': 5 / 3,\n 'account/bills-archive': 5 / 3,\n 'account/config': 4,\n 'account/max-size': 1,\n 'account/max-avail-size': 1,\n 'account/leverage-info': 1,\n 'account/adjust-leverage-info': 4,\n 'account/max-loan': 1,\n 'account/trade-fee': 4,\n 'account/interest-accrued': 4,\n 'account/interest-rate': 4,\n 'account/max-withdrawal': 1,\n 'account/risk-state': 2,\n 'account/quick-margin-borrow-repay-history': 4,\n 'account/borrow-repay-history': 4,\n 'account/vip-interest-accrued': 4,\n 'account/vip-interest-deducted': 4,\n 'account/vip-loan-order-list': 4,\n 'account/vip-loan-order-detail': 4,\n 'account/interest-limits': 4,\n 'account/greeks': 2,\n 'account/position-tiers': 2,\n 'account/mmp-config': 4,\n // subaccount\n 'users/subaccount/list': 10,\n 'account/subaccount/balances': 10 / 3,\n 'asset/subaccount/balances': 10 / 3,\n 'account/subaccount/max-withdrawal': 1,\n 'asset/subaccount/bills': 5 / 3,\n 'asset/subaccount/managed-subaccount-bills': 5 / 3,\n 'users/entrust-subaccount-list': 10,\n 'account/subaccount/interest-limits': 4,\n // grid trading\n 'tradingBot/grid/orders-algo-pending': 1,\n 'tradingBot/grid/orders-algo-history': 1,\n 'tradingBot/grid/orders-algo-details': 1,\n 'tradingBot/grid/sub-orders': 1,\n 'tradingBot/grid/positions': 1,\n 'tradingBot/grid/ai-param': 1,\n 'tradingBot/signal/signals': 1,\n 'tradingBot/signal/orders-algo-details': 1,\n 'tradingBot/signal/orders-algo-history': 1,\n 'tradingBot/signal/positions': 1,\n 'tradingBot/signal/positions-history': 1,\n 'tradingBot/signal/sub-orders': 1,\n 'tradingBot/signal/event-history': 1,\n 'tradingBot/recurring/orders-algo-pending': 1,\n 'tradingBot/recurring/orders-algo-history': 1,\n 'tradingBot/recurring/orders-algo-details': 1,\n 'tradingBot/recurring/sub-orders': 1,\n // earn\n 'finance/savings/balance': 5 / 3,\n 'finance/savings/lending-history': 5 / 3,\n 'finance/staking-defi/offers': 10 / 3,\n 'finance/staking-defi/orders-active': 10 / 3,\n 'finance/staking-defi/orders-history': 10 / 3,\n // eth staking\n 'finance/staking-defi/eth/balance': 5 / 3,\n 'finance/staking-defi/eth/purchase-redeem-history': 5 / 3,\n // copytrading\n 'copytrading/current-subpositions': 1,\n 'copytrading/subpositions-history': 1,\n 'copytrading/instruments': 4,\n 'copytrading/profit-sharing-details': 4,\n 'copytrading/total-profit-sharing': 4,\n 'copytrading/unrealized-profit-sharing-details': 4,\n 'copytrading/copy-settings': 4,\n 'copytrading/batch-leverage-info': 4,\n 'copytrading/current-lead-traders': 4,\n 'copytrading/lead-traders-history': 4,\n // broker\n 'broker/nd/info': 10,\n 'broker/nd/subaccount-info': 10,\n 'broker/nd/subaccount/apikey': 10,\n 'asset/broker/nd/subaccount-deposit-address': 5 / 3,\n 'asset/broker/nd/subaccount-deposit-history': 4,\n 'asset/broker/nd/subaccount-withdrawal-history': 4,\n 'broker/nd/rebate-daily': 100,\n 'broker/nd/rebate-per-orders': 300,\n 'finance/sfp/dcd/order': 2,\n 'finance/sfp/dcd/orders': 2,\n 'broker/fd/rebate-per-orders': 300,\n 'broker/fd/if-rebate': 5,\n // affiliate\n 'affiliate/invitee/detail': 1,\n 'users/partner/if-rebate': 1,\n },\n 'post': {\n // rfq\n 'rfq/create-rfq': 4,\n 'rfq/cancel-rfq': 4,\n 'rfq/cancel-batch-rfqs': 10,\n 'rfq/cancel-all-rfqs': 10,\n 'rfq/execute-quote': 15,\n 'rfq/maker-instrument-settings': 4,\n 'rfq/mmp-reset': 4,\n 'rfq/mmp-config': 100,\n 'rfq/create-quote': 0.4,\n 'rfq/cancel-quote': 0.4,\n 'rfq/cancel-batch-quotes': 10,\n 'rfq/cancel-all-quotes': 10,\n // sprd\n 'sprd/order': 1,\n 'sprd/cancel-order': 1,\n 'sprd/mass-cancel': 1,\n 'sprd/amend-order': 1,\n // trade\n 'trade/order': 1 / 3,\n 'trade/batch-orders': 1 / 15,\n 'trade/cancel-order': 1 / 3,\n 'trade/cancel-batch-orders': 1 / 15,\n 'trade/amend-order': 1 / 3,\n 'trade/amend-batch-orders': 1 / 150,\n 'trade/close-position': 1,\n 'trade/fills-archive': 172800,\n 'trade/order-algo': 1,\n 'trade/cancel-algos': 1,\n 'trade/amend-algos': 1,\n 'trade/cancel-advance-algos': 1,\n 'trade/easy-convert': 20,\n 'trade/one-click-repay': 20,\n 'trade/mass-cancel': 4,\n 'trade/cancel-all-after': 10,\n // asset\n 'asset/transfer': 10,\n 'asset/withdrawal': 5 / 3,\n 'asset/withdrawal-lightning': 5,\n 'asset/cancel-withdrawal': 5 / 3,\n 'asset/convert-dust-assets': 10,\n 'asset/convert/estimate-quote': 1,\n 'asset/convert/trade': 1,\n 'asset/monthly-statement': 1,\n // account\n 'account/set-position-mode': 4,\n 'account/set-leverage': 1,\n 'account/position/margin-balance': 1,\n 'account/set-greeks': 4,\n 'account/set-isolated-mode': 4,\n 'account/quick-margin-borrow-repay': 4,\n 'account/borrow-repay': 5 / 3,\n 'account/simulated_margin': 10,\n 'account/set-riskOffset-type': 2,\n 'account/activate-option': 4,\n 'account/set-auto-loan': 4,\n 'account/set-account-level': 4,\n 'account/mmp-reset': 4,\n 'account/mmp-config': 100,\n // subaccount\n 'users/subaccount/modify-apikey': 10,\n 'asset/subaccount/transfer': 10,\n 'users/subaccount/set-transfer-out': 10,\n 'account/subaccount/set-loan-allocation': 4,\n // grid trading\n 'tradingBot/grid/order-algo': 1,\n 'tradingBot/grid/amend-order-algo': 1,\n 'tradingBot/grid/stop-order-algo': 1,\n 'tradingBot/grid/close-position': 1,\n 'tradingBot/grid/cancel-close-order': 1,\n 'tradingBot/grid/order-instant-trigger': 1,\n 'tradingBot/grid/withdraw-income': 1,\n 'tradingBot/grid/compute-margin-balance': 1,\n 'tradingBot/grid/margin-balance': 1,\n 'tradingBot/grid/min-investment': 1,\n 'tradingBot/signal/create-signal': 1,\n 'tradingBot/signal/order-algo': 1,\n 'tradingBot/signal/stop-order-algo': 1,\n 'tradingBot/signal/margin-balance': 1,\n 'tradingBot/signal/amendTPSL': 1,\n 'tradingBot/signal/set-instruments': 1,\n 'tradingBot/signal/close-position': 1,\n 'tradingBot/signal/sub-order': 1,\n 'tradingBot/signal/cancel-sub-order': 1,\n 'tradingBot/recurring/order-algo': 1,\n 'tradingBot/recurring/amend-order-algo': 1,\n 'tradingBot/recurring/stop-order-algo': 1,\n // earn\n 'finance/savings/purchase-redempt': 5 / 3,\n 'finance/savings/set-lending-rate': 5 / 3,\n 'finance/staking-defi/purchase': 3,\n 'finance/staking-defi/redeem': 3,\n 'finance/staking-defi/cancel': 3,\n // eth staking\n 'finance/staking-defi/eth/purchase': 5,\n 'finance/staking-defi/eth/redeem': 5,\n // copytrading\n 'copytrading/algo-order': 1,\n 'copytrading/close-subposition': 1,\n 'copytrading/set-instruments': 4,\n 'copytrading/first-copy-settings': 4,\n 'copytrading/amend-copy-settings': 4,\n 'copytrading/stop-copy-trading': 4,\n 'copytrading/batch-set-leverage': 4,\n // broker\n 'broker/nd/create-subaccount': 0.25,\n 'broker/nd/delete-subaccount': 1,\n 'broker/nd/subaccount/apikey': 0.25,\n 'broker/nd/subaccount/modify-apikey': 1,\n 'broker/nd/subaccount/delete-apikey': 1,\n 'broker/nd/set-subaccount-level': 4,\n 'broker/nd/set-subaccount-fee-rate': 4,\n 'broker/nd/set-subaccount-assets': 0.25,\n 'asset/broker/nd/subaccount-deposit-address': 1,\n 'asset/broker/nd/modify-subaccount-deposit-address': 5 / 3,\n 'broker/nd/rebate-per-orders': 36000,\n 'finance/sfp/dcd/quote': 10,\n 'finance/sfp/dcd/order': 10,\n 'broker/nd/report-subaccount-ip': 0.25,\n 'broker/fd/rebate-per-orders': 36000,\n },\n },\n },\n 'fees': {\n 'trading': {\n 'taker': this.parseNumber('0.0015'),\n 'maker': this.parseNumber('0.0010'),\n },\n 'spot': {\n 'taker': this.parseNumber('0.0015'),\n 'maker': this.parseNumber('0.0010'),\n },\n 'future': {\n 'taker': this.parseNumber('0.0005'),\n 'maker': this.parseNumber('0.0002'),\n },\n 'swap': {\n 'taker': this.parseNumber('0.00050'),\n 'maker': this.parseNumber('0.00020'),\n },\n },\n 'requiredCredentials': {\n 'apiKey': true,\n 'secret': true,\n 'password': true,\n },\n 'exceptions': {\n 'exact': {\n // Public error codes from 50000-53999\n // General Class\n '1': ExchangeOperationFailedError,\n '2': ExchangeOperationFailedError,\n '50000': InvalidParamsError,\n '50001': ExchangeUnderMaintenanceError,\n '50002': InvalidParamsError,\n '50004': ExchangeRequestExpiredError,\n '50005': ExchangeNotAvailableError,\n '50006': InvalidParamsError,\n '50007': ExchangeAccountSuspendedError,\n '50008': AuthenticationError,\n '50009': ExchangeAccountSuspendedError,\n '50010': InvalidParamsError,\n '50011': ExchangeRateLimitExceededError,\n '50012': ExchangeError,\n '50013': ExchangeNotAvailableError,\n '50014': InvalidParamsError,\n '50015': InvalidParamsError,\n '50016': InvalidParamsError,\n '50017': ExchangeError,\n '50018': ExchangeError,\n '50019': ExchangeError,\n '50020': ExchangeError,\n '50021': ExchangeError,\n '50022': ExchangeError,\n '50023': ExchangeError,\n '50024': InvalidParamsError,\n '50025': InvalidParamsError,\n '50026': ExchangeNotAvailableError,\n '50027': ExchangeInvalidPermissionsError,\n '50028': TradeError,\n '50044': TradeError,\n // API Class\n '50100': ExchangeNotAvailableError,\n '50101': AuthenticationError,\n '50102': ExchangeInvalidNonceError,\n '50103': AuthenticationError,\n '50104': AuthenticationError,\n '50105': AuthenticationError,\n '50106': AuthenticationError,\n '50107': AuthenticationError,\n '50108': InvalidParamsError,\n '50109': ExchangeError,\n '50110': ExchangeInvalidPermissionsError,\n '50111': AuthenticationError,\n '50112': AuthenticationError,\n '50113': AuthenticationError,\n '50114': AuthenticationError,\n '50115': ExchangeNotAllowedMethodError,\n '50120': ExchangeInvalidPermissionsError,\n // Trade Class\n '51000': InvalidParamsError,\n '51001': InvalidParamsError,\n '51002': InvalidParamsError,\n '51003': InvalidParamsError,\n '51004': InvalidParamsError,\n '51005': InvalidParamsError,\n '51006': InvalidParamsError,\n '51007': TradeError,\n '51008': InsufficientBalanceError,\n '51009': ExchangeAccountSuspendedError,\n '51010': ExchangeInvalidPermissionsError,\n '51011': TradeError,\n '51012': ExchangeUnknownAssetError,\n '51014': ExchangeError,\n '51015': ExchangeError,\n '51016': TradeError,\n '51017': InvalidParamsError,\n '51018': ExchangeError,\n '51019': ExchangeError,\n '51020': InvalidParamsError,\n '51021': ExchangeError,\n '51022': ExchangeError,\n '51023': TradeError,\n '51024': ExchangeAccountSuspendedError,\n '51025': TradeError,\n '51026': ExchangeError,\n '51027': ExchangeError,\n '51028': ExchangeError,\n '51029': ExchangeError,\n '51030': ExchangeError,\n '51031': InvalidParamsError,\n '51046': InvalidParamsError,\n '51047': InvalidParamsError,\n '51072': TradeError,\n '51073': TradeError,\n '51074': TradeError,\n '51100': InvalidParamsError,\n '51101': InvalidParamsError,\n '51102': InvalidParamsError,\n '51103': InvalidParamsError,\n '51104': InvalidParamsError,\n '51105': InvalidParamsError,\n '51106': InvalidParamsError,\n '51107': InvalidParamsError,\n '51108': TradeError,\n '51109': TradeError,\n '51110': TradeError,\n '51111': TradeError,\n '51112': TradeError,\n '51113': ExchangeRateLimitExceededError,\n '51115': TradeError,\n '51116': InvalidParamsError,\n '51117': TradeError,\n '51118': TradeError,\n '51119': InsufficientBalanceError,\n '51120': InvalidParamsError,\n '51121': InvalidParamsError,\n '51122': InvalidParamsError,\n '51124': TradeError,\n '51125': TradeError,\n '51126': TradeError,\n '51127': InsufficientBalanceError,\n '51128': TradeError,\n '51129': TradeError,\n '51130': TradeError,\n '51131': InsufficientBalanceError,\n '51132': InvalidParamsError,\n '51133': TradeError,\n '51134': TradeError,\n '51135': InvalidParamsError,\n '51136': InvalidParamsError,\n '51137': InvalidParamsError,\n '51138': InvalidParamsError,\n '51139': TradeError,\n '51156': TradeError,\n '51159': TradeError,\n '51162': TradeError,\n '51163': TradeError,\n '51166': TradeError,\n '51174': TradeError,\n '51185': InvalidParamsError,\n '51201': TradeError,\n '51202': InvalidParamsError,\n '51203': InvalidParamsError,\n '51204': InvalidParamsError,\n '51205': InvalidParamsError,\n '51250': InvalidParamsError,\n '51251': InvalidParamsError,\n '51252': InvalidParamsError,\n '51253': TradeError,\n '51254': TradeError,\n '51255': TradeError,\n '51256': TradeError,\n '51257': TradeError,\n '51258': TradeError,\n '51259': TradeError,\n '51260': TradeError,\n '51261': TradeError,\n '51262': TradeError,\n '51263': TradeError,\n '51264': TradeError,\n '51265': TradeError,\n '51267': TradeError,\n '51268': TradeError,\n '51269': TradeError,\n '51270': TradeError,\n '51271': TradeError,\n '51272': TradeError,\n '51273': TradeError,\n '51274': TradeError,\n '51275': TradeError,\n '51276': TradeError,\n '51277': TradeError,\n '51278': TradeError,\n '51279': TradeError,\n '51280': TradeError,\n '51321': TradeError,\n '51322': TradeError,\n '51323': TradeError,\n '51324': TradeError,\n '51325': TradeError,\n '51327': TradeError,\n '51328': TradeError,\n '51329': TradeError,\n '51330': TradeError,\n '51400': OrderNotFoundError,\n '51401': OrderNotFoundError,\n '51402': OrderNotFoundError,\n '51403': TradeError,\n '51404': TradeError,\n '51405': TradeError,\n '51406': TradeError,\n '51407': InvalidParamsError,\n '51408': TradeError,\n '51409': InvalidParamsError,\n '51410': TradeError,\n '51500': InvalidParamsError,\n '51501': TradeError,\n '51502': InsufficientBalanceError,\n '51503': TradeError,\n '51506': TradeError,\n '51508': TradeError,\n '51509': TradeError,\n '51510': TradeError,\n '51511': TradeError,\n '51600': InvalidParamsError,\n '51601': InvalidParamsError,\n '51602': InvalidParamsError,\n '51603': OrderNotFoundError,\n '51732': AuthenticationError,\n '51733': AuthenticationError,\n '51734': AuthenticationError,\n '51735': ExchangeError,\n '51736': InsufficientBalanceError,\n // Data class\n '52000': ExchangeError,\n // SPOT/MARGIN error codes 54000-54999\n '54000': ExchangeError,\n '54001': ExchangeError,\n // FUNDING error codes 58000-58999\n '58000': ExchangeError,\n '58001': AuthenticationError,\n '58002': ExchangeInvalidPermissionsError,\n '58003': ExchangeUnknownAssetError,\n '58004': ExchangeAccountSuspendedError,\n '58005': InvalidParamsError,\n '58006': ExchangeError,\n '58007': InternalError,\n '58100': ExchangeTransferError,\n '58101': ExchangeAccountSuspendedError,\n '58102': ExchangeRateLimitExceededError,\n '58103': ExchangeError,\n '58104': ExchangeError,\n '58105': ExchangeError,\n '58106': ExchangeError,\n '58107': ExchangeError,\n '58108': ExchangeError,\n '58109': ExchangeError,\n '58110': ExchangeTransferError,\n '58111': ExchangeTransferError,\n '58112': ExchangeTransferError,\n '58114': InvalidParamsError,\n '58115': ExchangeError,\n '58116': ExchangeTransferError,\n '58117': ExchangeError,\n '58125': ExchangeTransferError,\n '58126': ExchangeTransferError,\n '58127': ExchangeTransferError,\n '58128': ExchangeTransferError,\n '58200': WithdrawalForbiddenError,\n '58201': WithdrawalForbiddenError,\n '58202': WithdrawalError,\n '58203': InvalidAddressError,\n '58204': ExchangeAccountSuspendedError,\n '58205': OverWithdrawMaximumError,\n '58206': UnderWithdrawMinimumError,\n '58207': WhitelistCheckFailedError,\n '58208': WithdrawalError,\n '58209': WithdrawalError,\n '58210': WithdrawalError,\n '58211': WithdrawalError,\n '58212': WithdrawalError,\n '58213': AuthenticationError,\n '58221': InvalidAddressError,\n '58222': InvalidAddressError,\n '58224': WithdrawalError,\n '58227': WithdrawalError,\n '58228': WithdrawalError,\n '58229': InsufficientBalanceError,\n '58300': GetDepositAddressError,\n '58350': InsufficientBalanceError,\n // Account error codes 59000-59999\n '59000': ExchangeError,\n '59001': ExchangeError,\n '59100': TradeError,\n '59101': TradeError,\n '59102': TradeError,\n '59103': InsufficientBalanceError,\n '59104': TradeError,\n '59105': TradeError,\n '59106': TradeError,\n '59107': TradeError,\n '59108': InsufficientBalanceError,\n '59109': TradeError,\n '59128': TradeError,\n '59200': InsufficientBalanceError,\n '59201': InsufficientBalanceError,\n '59216': TradeError,\n '59260': ExchangeInvalidPermissionsError,\n '59262': ExchangeInvalidPermissionsError,\n '59300': ExchangeError,\n '59301': ExchangeError,\n '59313': ExchangeError,\n '59401': ExchangeError,\n '59500': ExchangeInvalidPermissionsError,\n '59501': AuthenticationError,\n '59502': ExchangeError,\n '59503': AuthenticationError,\n '59504': ExchangeNotAllowedMethodError,\n '59505': AuthenticationError,\n '59506': AuthenticationError,\n '59507': ExchangeTransferError,\n '59508': ExchangeAccountSuspendedError,\n '59642': ExchangeError,\n '59643': ExchangeError,\n // WebSocket error Codes from 60000-63999\n '60001': AuthenticationError,\n '60002': AuthenticationError,\n '60003': AuthenticationError,\n '60004': AuthenticationError,\n '60005': AuthenticationError,\n '60006': ExchangeInvalidNonceError,\n '60007': AuthenticationError,\n '60008': AuthenticationError,\n '60009': AuthenticationError,\n '60010': AuthenticationError,\n '60011': AuthenticationError,\n '60012': InvalidParamsError,\n '60013': InvalidParamsError,\n '60014': ExchangeRateLimitExceededError,\n '60015': ExchangeError,\n '60016': ExchangeNotAvailableError,\n '60017': InvalidParamsError,\n '60018': InvalidParamsError,\n '60019': InvalidParamsError,\n '63999': InternalError,\n '70010': InternalError,\n '70013': InvalidParamsError,\n '70016': InvalidParamsError, // Please specify your instrument settings for at least one instType.\n },\n 'broad': {\n 'Internal Server Error': ExchangeNotAvailableError,\n 'server error': ExchangeNotAvailableError, // {\"code\":500,\"data\":{},\"detailMsg\":\"\",\"error_code\":\"500\",\"error_message\":\"server error 1236805249\",\"msg\":\"server error 1236805249\"}\n },\n 'messages': {\n 'Order amount should be greater than the minimum available amount': SdkErrorMessages.ORDER_UNDER_MINIMUM,\n },\n },\n 'httpExceptions': {\n '429': ExchangeNotAvailableError, // https://github.com/ccxt/ccxt/issues/9612\n },\n 'precisionMode': TICK_SIZE,\n 'options': {\n 'sandboxMode': false,\n 'timeDifference': 0,\n 'defaultNetwork': 'ERC20',\n 'defaultNetworks': {\n 'ETH': 'ERC20',\n 'BTC': 'BTC',\n 'USDT': 'TRC20',\n },\n 'networks': {\n 'BTC': 'Bitcoin',\n 'BTCLN': 'Lightning',\n 'BEP20': 'BSC',\n 'ERC20': 'ERC20',\n 'TRC20': 'TRC20',\n 'CRC20': 'Crypto',\n // sorted\n 'ACA': 'Acala',\n 'ALGO': 'Algorand',\n 'BHP': 'BHP',\n 'APT': 'Aptos',\n 'ARBONE': 'Arbitrum One',\n 'AVAXC': 'Avalanche C',\n 'AVAXX': 'Avalanche X-Chain',\n 'ARK': 'ARK',\n 'AR': 'Arweave',\n 'ASTR': 'Astar',\n 'BCH': 'BitcoinCash',\n 'BSV': 'Bitcoin SV',\n 'BTM': 'Bytom',\n 'ADA': 'Cardano',\n 'CSPR': 'Casper',\n 'CELO': 'CELO',\n 'XCH': 'Chia',\n 'CHZ': 'Chiliz',\n 'ATOM': 'Cosmos',\n 'TRUE': 'TrueChain',\n 'DCR': 'Decred',\n 'DGB': 'Digibyte',\n 'DOGE': 'Dogecoin',\n 'XEC': 'XEC',\n 'EGLD': 'Elrond',\n 'EOS': 'EOS',\n 'ETC': 'Ethereum Classic',\n 'ETHW': 'EthereumPow',\n 'FTM': 'Fantom',\n 'FIL': 'Filecoin',\n 'FLOW': 'FLOW',\n 'FSN': 'Fusion',\n 'ONE': 'Harmony',\n 'HBAR': 'Hedera',\n 'HNT': 'Helium',\n 'ZEN': 'Horizen',\n 'ICX': 'ICON',\n 'ICP': 'Dfinity',\n 'IOST': 'IOST',\n 'IOTA': 'MIOTA',\n 'KDA': 'Kadena',\n 'KAR': 'KAR',\n 'KLAY': 'Klaytn',\n 'KSM': 'Kusama',\n 'LSK': 'Lisk',\n 'LTC': 'Litecoin',\n 'METIS': 'Metis',\n 'MINA': 'Mina',\n 'XMR': 'Monero',\n 'GLRM': 'Moonbeam',\n 'MOVR': 'Moonriver',\n 'NANO': 'Nano',\n 'NEAR': 'NEAR',\n 'NAS': 'Nebulas',\n 'NEM': 'New Economy Movement',\n 'NULS': 'NULS',\n 'OASYS': 'OASYS',\n 'OKC': 'OKC',\n 'ONT': 'Ontology',\n 'OPTIMISM': 'Optimism',\n 'LAT': 'PlatON',\n 'DOT': 'Polkadot',\n 'MATIC': 'Polygon',\n 'RVN': 'Ravencoin',\n 'XRP': 'Ripple',\n 'SC': 'Siacoin',\n 'SOL': 'Solana',\n 'STX': 'l-Stacks',\n 'XLM': 'Stellar Lumens',\n 'XTZ': 'Tezos',\n 'TON': 'TON',\n 'THETA': 'Theta',\n 'VSYS': 'VSYSTEMS',\n 'WAVES': 'WAVES',\n 'WAX': 'Wax',\n 'ZEC': 'Zcash',\n 'ZIL': 'Zilliqa',\n 'ZKSYNC': 'ZKSYNC',\n // 'NEON3': 'N3', // tbd\n // undetermined : \"CELO-TOKEN\", \"Digital Cash\", Khala\n // todo: uncomment below after consensus\n // 'AELF': 'AELF',\n // 'BITCOINDIAMOND': 'Bitcoin Diamond',\n // 'BITCOINGOLD': 'BitcoinGold',\n // 'YOYOW': 'YOYOW',\n // 'QTUM': 'Quantum',\n // 'INTCHAIN': 'INTCHAIN',\n // 'YOUCHAIN': 'YOUCHAIN',\n // 'RONIN': 'Ronin',\n // 'OEC': 'OEC',\n // 'WAYIKICHAIN': 'WGRT',\n // 'MDNA': 'DNA',\n // 'STEP': 'Step Network',\n // 'EMINER': 'Eminer',\n // 'CYBERMILES': 'CyberMiles',\n // 'HYPERCASH': 'HyperCash',\n // 'CONFLUX': 'Conflux',\n // 'CORTEX': 'Cortex',\n // 'TERRA': 'Terra',\n // 'TERRACLASSIC': 'Terra Classic',\n },\n 'fetchOHLCV': {\n // 'type': 'Candles', // Candles or HistoryCandles, IndexCandles, MarkPriceCandles\n 'timezone': 'UTC', // UTC, HK\n },\n 'fetchPositions': {\n 'method': 'privateGetAccountPositions', // privateGetAccountPositions or privateGetAccountPositionsHistory\n },\n 'createOrder': 'privatePostTradeBatchOrders',\n 'createMarketBuyOrderRequiresPrice': false,\n 'fetchMarkets': ['spot', 'future', 'swap', 'option'],\n 'defaultType': 'spot',\n // 'fetchBalance': {\n // 'type': 'spot', // 'funding', 'trading', 'spot'\n // },\n 'fetchLedger': {\n 'method': 'privateGetAccountBills', // privateGetAccountBills, privateGetAccountBillsArchive, privateGetAssetBills\n },\n // 6: Funding account, 18: Trading account\n 'fetchOrder': {\n 'method': 'privateGetTradeOrder', // privateGetTradeOrdersAlgoHistory\n },\n 'fetchOpenOrders': {\n 'method': 'privateGetTradeOrdersPending', // privateGetTradeOrdersAlgoPending\n },\n 'cancelOrders': {\n 'method': 'privatePostTradeCancelBatchOrders', // privatePostTradeCancelAlgos\n },\n 'fetchCanceledOrders': {\n 'method': 'privateGetTradeOrdersHistory', // privateGetTradeOrdersAlgoHistory\n },\n 'fetchClosedOrders': {\n 'method': 'privateGetTradeOrdersHistory', // privateGetTradeOrdersAlgoHistory\n },\n 'withdraw': {\n // a funding password credential is required by the exchange for the\n // withdraw call (not to be confused with the api password credential)\n 'password': undefined,\n 'pwd': undefined, // password or pwd both work\n },\n 'algoOrderTypes': {\n 'conditional': true,\n 'trigger': true,\n 'oco': true,\n 'move_order_stop': true,\n 'iceberg': true,\n 'twap': true,\n },\n 'accountsByType': {\n 'funding': '6',\n 'trading': '18',\n 'spot': '18',\n 'future': '18',\n 'futures': '18',\n 'margin': '18',\n 'swap': '18',\n 'option': '18',\n },\n 'accountsById': {\n '6': 'funding',\n '18': 'trading', // unified trading account\n },\n 'exchangeType': {\n 'spot': 'SPOT',\n 'margin': 'MARGIN',\n 'swap': 'SWAP',\n 'future': 'FUTURES',\n 'futures': 'FUTURES',\n 'option': 'OPTION',\n 'SPOT': 'SPOT',\n 'MARGIN': 'MARGIN',\n 'SWAP': 'SWAP',\n 'FUTURES': 'FUTURES',\n 'OPTION': 'OPTION',\n },\n 'brokerId': 'e847386590ce4dBC',\n },\n });\n }\n isUsingForcedProxy(params = {}, api = 'public') {\n if (api === 'private') {\n return true;\n }\n return false;\n }\n nonce() {\n return this.milliseconds() - this.options['timeDifference'];\n }\n handleMarketTypeAndParams(methodName, market = undefined, params = {}) {\n const instType = this.safeString(params, 'instType');\n params = this.omit(params, 'instType');\n const type = this.safeString(params, 'type');\n if ((type === undefined) && (instType !== undefined)) {\n params['type'] = instType;\n }\n return super.handleMarketTypeAndParams(methodName, market, params);\n }\n convertToInstrumentType(type) {\n const exchangeTypes = this.safeValue(this.options, 'exchangeType', {});\n return this.safeString(exchangeTypes, type, type);\n }\n convertExpireDate(date) {\n // parse YYMMDD to timestamp\n const year = date.slice(0, 2);\n const month = date.slice(2, 4);\n const day = date.slice(4, 6);\n const reconstructedDate = '20' + year + '-' + month + '-' + day + 'T00:00:00Z';\n return reconstructedDate;\n }\n createExpiredOptionMarket(symbol) {\n // support expired option contracts\n const quote = 'USD';\n const optionParts = symbol.split('-');\n const symbolBase = symbol.split('/');\n let base = undefined;\n if (symbol.indexOf('/') > -1) {\n base = this.safeString(symbolBase, 0);\n }\n else {\n base = this.safeString(optionParts, 0);\n }\n const settle = base;\n const expiry = this.safeString(optionParts, 2);\n const strike = this.safeString(optionParts, 3);\n const optionType = this.safeString(optionParts, 4);\n const datetime = this.convertExpireDate(expiry);\n const timestamp = this.parse8601(datetime);\n return {\n 'id': base + '-' + quote + '-' + expiry + '-' + strike + '-' + optionType,\n 'symbol': base + '/' + quote + ':' + settle + '-' + expiry + '-' + strike + '-' + optionType,\n 'base': base,\n 'quote': quote,\n 'settle': settle,\n 'baseId': base,\n 'quoteId': quote,\n 'settleId': settle,\n 'active': false,\n 'type': 'option',\n 'linear': undefined,\n 'inverse': undefined,\n 'spot': false,\n 'swap': false,\n 'future': false,\n 'option': true,\n 'margin': false,\n 'contract': true,\n 'contractSize': this.parseNumber('1'),\n 'expiry': timestamp,\n 'expiryDatetime': datetime,\n 'optionType': (optionType === 'C') ? 'call' : 'put',\n 'strike': this.parseNumber(strike),\n 'precision': {\n 'amount': undefined,\n 'price': undefined,\n },\n 'limits': {\n 'amount': {\n 'min': undefined,\n 'max': undefined,\n },\n 'price': {\n 'min': undefined,\n 'max': undefined,\n },\n 'cost': {\n 'min': undefined,\n 'max': undefined,\n },\n },\n 'info': undefined,\n };\n }\n safeMarket(marketId = undefined, market = undefined, delimiter = undefined, marketType = undefined) {\n const isOption = (marketId !== undefined) && ((marketId.indexOf('-C') > -1) || (marketId.indexOf('-P') > -1));\n if (isOption && !(marketId in this.markets_by_id)) {\n // handle expired option contracts\n return this.createExpiredOptionMarket(marketId);\n }\n return super.safeMarket(marketId, market, delimiter, marketType);\n }\n async fetchStatus(params = {}) {\n /**\n * @method\n * @name okx#fetchStatus\n * @description the latest known information on the availability of the exchange API\n * @see https://www.okx.com/docs-v5/en/#status-get-status\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} a [status structure]{@link https://docs.ccxt.com/#/?id=exchange-status-structure}\n */\n const response = await this.publicGetSystemStatus(params);\n //\n // Note, if there is no maintenance around, the 'data' array is empty\n //\n // {\n // \"code\": \"0\",\n // \"msg\": \"\",\n // \"data\": [\n // {\n // \"begin\": \"1621328400000\",\n // \"end\": \"1621329000000\",\n // \"href\": \"https://www.okx.com/support/hc/en-us/articles/360060882172\",\n // \"scheDesc\": \"\",\n // \"serviceType\": \"1\", // 0 WebSocket, 1 Spot/Margin, 2 Futures, 3 Perpetual, 4 Options, 5 Trading service\n // \"state\": \"scheduled\", // ongoing, completed, canceled\n // \"system\": \"classic\", // classic, unified\n // \"title\": \"Classic Spot System Upgrade\"\n // },\n // ]\n // }\n //\n const data = this.safeValue(response, 'data', []);\n const dataLength = data.length;\n const update = {\n 'updated': undefined,\n 'status': (dataLength === 0) ? 'ok' : 'maintenance',\n 'eta': undefined,\n 'url': undefined,\n 'info': response,\n };\n for (let i = 0; i < data.length; i++) {\n const event = data[i];\n const state = this.safeString(event, 'state');\n update['eta'] = this.safeInteger(event, 'end');\n update['url'] = this.safeString(event, 'href');\n if (state === 'ongoing') {\n update['status'] = 'maintenance';\n }\n else if (state === 'scheduled') {\n update['status'] = 'ok';\n }\n else if (state === 'completed') {\n update['status'] = 'ok';\n }\n else if (state === 'canceled') {\n update['status'] = 'ok';\n }\n }\n return update;\n }\n async fetchTime(params = {}) {\n /**\n * @method\n * @name okx#fetchTime\n * @description fetches the current integer timestamp in milliseconds from the exchange server\n * @see https://www.okx.com/docs-v5/en/#public-data-rest-api-get-system-time\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {int} the current integer timestamp in milliseconds from the exchange server\n */\n const response = await this.publicGetPublicTime(params);\n //\n // {\n // \"code\": \"0\",\n // \"data\": [\n // {\"ts\": \"1621247923668\"}\n // ],\n // \"msg\": \"\"\n // }\n //\n const data = this.safeValue(response, 'data', []);\n const first = this.safeValue(data, 0, {});\n return this.safeInteger(first, 'ts');\n }\n async fetchAccounts(params = {}) {\n /**\n * @method\n * @name okx#fetchAccounts\n * @description fetch all the accounts associated with a profile\n * @see https://www.okx.com/docs-v5/en/#trading-account-rest-api-get-account-configuration\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} a dictionary of [account structures]{@link https://docs.ccxt.com/#/?id=account-structure} indexed by the account type\n */\n const response = await this.privateGetAccountConfig(params);\n //\n // {\n // \"code\": \"0\",\n // \"data\": [\n // {\n // \"acctLv\": \"2\",\n // \"autoLoan\": false,\n // \"ctIsoMode\": \"automatic\",\n // \"greeksType\": \"PA\",\n // \"level\": \"Lv1\",\n // \"levelTmp\": \"\",\n // \"mgnIsoMode\": \"automatic\",\n // \"posMode\": \"long_short_mode\",\n // \"uid\": \"88018754289672195\"\n // }\n // ],\n // \"msg\": \"\"\n // }\n //\n const data = this.safeValue(response, 'data', []);\n const result = [];\n for (let i = 0; i < data.length; i++) {\n const account = data[i];\n const accountId = this.safeString(account, 'uid');\n const type = this.safeString(account, 'acctLv');\n result.push({\n 'id': accountId,\n 'type': type,\n 'currency': undefined,\n 'info': account,\n 'code': undefined,\n });\n }\n return result;\n }\n async fetchMarkets(params = {}) {\n /**\n * @method\n * @name okx#fetchMarkets\n * @description retrieves data on all markets for okx\n * @see https://www.okx.com/docs-v5/en/#rest-api-public-data-get-instruments\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object[]} an array of objects representing market data\n */\n const types = this.safeValue(this.options, 'fetchMarkets');\n let promises = [];\n let result = [];\n for (let i = 0; i < types.length; i++) {\n promises.push(this.fetchMarketsByType(types[i], params));\n }\n promises = await Promise.all(promises);\n for (let i = 0; i < promises.length; i++) {\n result = this.arrayConcat(result, promises[i]);\n }\n return result;\n }\n parseMarket(market) {\n //\n // {\n // \"alias\": \"\", // this_week, next_week, quarter, next_quarter\n // \"baseCcy\": \"BTC\",\n // \"category\": \"1\",\n // \"ctMult\": \"\",\n // \"ctType\": \"\", // inverse, linear\n // \"ctVal\": \"\",\n // \"ctValCcy\": \"\",\n // \"expTime\": \"\",\n // \"instId\": \"BTC-USDT\", // BTC-USD-210521, CSPR-USDT-SWAP, BTC-USD-210517-44000-C\n // \"instType\": \"SPOT\", // SPOT, FUTURES, SWAP, OPTION\n // \"lever\": \"10\",\n // \"listTime\": \"1548133413000\",\n // \"lotSz\": \"0.00000001\",\n // \"minSz\": \"0.00001\",\n // \"optType\": \"\",\n // \"quoteCcy\": \"USDT\",\n // \"settleCcy\": \"\",\n // \"state\": \"live\",\n // \"stk\": \"\",\n // \"tickSz\": \"0.1\",\n // \"uly\": \"\"\n // }\n //\n // {\n // \"alias\": \"\",\n // \"baseCcy\": \"\",\n // \"category\": \"1\",\n // \"ctMult\": \"0.1\",\n // \"ctType\": \"\",\n // \"ctVal\": \"1\",\n // \"ctValCcy\": \"BTC\",\n // \"expTime\": \"1648195200000\",\n // \"instId\": \"BTC-USD-220325-194000-P\",\n // \"instType\": \"OPTION\",\n // \"lever\": \"\",\n // \"listTime\": \"1631262612280\",\n // \"lotSz\": \"1\",\n // \"minSz\": \"1\",\n // \"optType\": \"P\",\n // \"quoteCcy\": \"\",\n // \"settleCcy\": \"BTC\",\n // \"state\": \"live\",\n // \"stk\": \"194000\",\n // \"tickSz\": \"0.0005\",\n // \"uly\": \"BTC-USD\"\n // }\n //\n const id = this.safeString(market, 'instId');\n let type = this.safeStringLower(market, 'instType');\n if (type === 'futures') {\n type = 'future';\n }\n const spot = (type === 'spot');\n const future = (type === 'future');\n const swap = (type === 'swap');\n const option = (type === 'option');\n const contract = swap || future || option;\n let baseId = this.safeString(market, 'baseCcy');\n let quoteId = this.safeString(market, 'quoteCcy');\n const settleId = this.safeString(market, 'settleCcy');\n const settle = this.safeCurrencyCode(settleId);\n const underlying = this.safeString(market, 'uly');\n if ((underlying !== undefined) && !spot) {\n const parts = underlying.split('-');\n baseId = this.safeString(parts, 0);\n quoteId = this.safeString(parts, 1);\n }\n const base = this.safeCurrencyCode(baseId);\n const quote = this.safeCurrencyCode(quoteId);\n let symbol = base + '/' + quote;\n let expiry = undefined;\n let strikePrice = undefined;\n let optionType = undefined;\n if (contract) {\n symbol = symbol + ':' + settle;\n expiry = this.safeInteger(market, 'expTime');\n if (future) {\n const ymd = this.yymmdd(expiry);\n symbol = symbol + '-' + ymd;\n }\n else if (option) {\n strikePrice = this.safeString(market, 'stk');\n optionType = this.safeString(market, 'optType');\n const ymd = this.yymmdd(expiry);\n symbol = symbol + '-' + ymd + '-' + strikePrice + '-' + optionType;\n optionType = (optionType === 'P') ? 'put' : 'call';\n }\n }\n const tickSize = this.safeString(market, 'tickSz');\n const fees = this.safeValue2(this.fees, type, 'trading', {});\n let maxLeverage = this.safeString(market, 'lever', '1');\n maxLeverage = Precise.stringMax(maxLeverage, '1');\n const maxSpotCost = this.safeNumber(market, 'maxMktSz');\n return this.extend(fees, {\n 'id': id,\n 'symbol': symbol,\n 'base': base,\n 'quote': quote,\n 'settle': settle,\n 'baseId': baseId,\n 'quoteId': quoteId,\n 'settleId': settleId,\n 'type': type,\n 'spot': spot,\n 'margin': spot && (Precise.stringGt(maxLeverage, '1')),\n 'swap': swap,\n 'future': future,\n 'option': option,\n 'active': true,\n 'contract': contract,\n 'linear': contract ? (quoteId === settleId) : undefined,\n 'inverse': contract ? (baseId === settleId) : undefined,\n 'contractSize': contract ? this.safeNumber(market, 'ctVal') : undefined,\n 'expiry': expiry,\n 'expiryDatetime': this.iso8601(expiry),\n 'strike': strikePrice,\n 'optionType': optionType,\n 'created': this.safeInteger(market, 'listTime'),\n 'precision': {\n 'amount': this.safeNumber(market, 'lotSz'),\n 'price': this.parseNumber(tickSize),\n },\n 'limits': {\n 'leverage': {\n 'min': this.parseNumber('1'),\n 'max': this.parseNumber(maxLeverage),\n },\n 'amount': {\n 'min': this.safeNumber(market, 'minSz'),\n 'max': undefined,\n },\n 'price': {\n 'min': undefined,\n 'max': undefined,\n },\n 'cost': {\n 'min': undefined,\n 'max': contract ? undefined : maxSpotCost,\n },\n },\n 'info': market,\n });\n }\n async fetchMarketsByType(type, params = {}) {\n const request = {\n 'instType': this.convertToInstrumentType(type),\n };\n if (type === 'option') {\n const optionsUnderlying = this.safeValue(this.options, 'defaultUnderlying', ['BTC-USD', 'ETH-USD']);\n const promises = [];\n for (let i = 0; i < optionsUnderlying.length; i++) {\n const underlying = optionsUnderlying[i];\n request['uly'] = underlying;\n promises.push(this.publicGetPublicInstruments(this.extend(request, params)));\n }\n const promisesResult = await Promise.all(promises);\n let markets = [];\n for (let i = 0; i < promisesResult.length; i++) {\n const res = this.safeValue(promisesResult, i, {});\n const options = this.safeValue(res, 'data', []);\n markets = this.arrayConcat(markets, options);\n }\n return this.parseMarkets(markets);\n }\n const response = await this.publicGetPublicInstruments(this.extend(request, params));\n //\n // spot, future, swap, option\n //\n // {\n // \"code\": \"0\",\n // \"data\": [\n // {\n // \"alias\": \"\", // this_week, next_week, quarter, next_quarter\n // \"baseCcy\": \"BTC\",\n // \"category\": \"1\",\n // \"ctMult\": \"\",\n // \"ctType\": \"\", // inverse, linear\n // \"ctVal\": \"\",\n // \"ctValCcy\": \"\",\n // \"expTime\": \"\",\n // \"instId\": \"BTC-USDT\", // BTC-USD-210521, CSPR-USDT-SWAP, BTC-USD-210517-44000-C\n // \"instType\": \"SPOT\", // SPOT, FUTURES, SWAP, OPTION\n // \"lever\": \"10\",\n // \"listTime\": \"1548133413000\",\n // \"lotSz\": \"0.00000001\",\n // \"minSz\": \"0.00001\",\n // \"optType\": \"\",\n // \"quoteCcy\": \"USDT\",\n // \"settleCcy\": \"\",\n // \"state\": \"live\",\n // \"stk\": \"\",\n // \"tickSz\": \"0.1\",\n // \"uly\": \"\"\n // }\n // ],\n // \"msg\": \"\"\n // }\n //\n const dataResponse = this.safeValue(response, 'data', []);\n return this.parseMarkets(dataResponse);\n }\n safeNetwork(networkId) {\n const networksById = {\n 'Bitcoin': 'BTC',\n 'Optimism (V2)': 'Optimism',\n 'Omni': 'OMNI',\n 'TRON': 'TRC20',\n };\n return this.safeString(networksById, networkId, networkId);\n }\n async fetchCurrencies(params = {}) {\n /**\n * @method\n * @name okx#fetchCurrencies\n * @description fetches all available currencies on an exchange\n * @see https://www.okx.com/docs-v5/en/#rest-api-funding-get-currencies\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} an associative dictionary of currencies\n */\n // this endpoint requires authentication\n // while fetchCurrencies is a public API method by design\n // therefore we check the keys here\n // and fallback to generating the currencies from the markets\n const isSandboxMode = this.safeValue(this.options, 'sandboxMode', false);\n if (!this.checkRequiredCredentials(false) || isSandboxMode) {\n return undefined;\n }\n //\n // has['fetchCurrencies'] is currently set to true, but an unauthorized request returns\n //\n // {\"msg\":\"Request header “OK_ACCESS_KEY“ can't be empty.\",\"code\":\"50103\"}\n //\n const response = await this.privateGetAssetCurrencies(params);\n //\n // {\n // \"code\": \"0\",\n // \"data\": [\n // {\n // \"canDep\": true,\n // \"canInternal\": false,\n // \"canWd\": true,\n // \"ccy\": \"USDT\",\n // \"chain\": \"USDT-TRC20\",\n // \"logoLink\": \"https://static.coinall.ltd/cdn/assets/imgs/221/5F74EB20302D7761.png\",\n // \"mainNet\": false,\n // \"maxFee\": \"1.6\",\n // \"maxWd\": \"8852150\",\n // \"minFee\": \"0.8\",\n // \"minWd\": \"2\",\n // \"name\": \"Tether\",\n // \"usedWdQuota\": \"0\",\n // \"wdQuota\": \"500\",\n // \"wdTickSz\": \"3\"\n // },\n // {\n // \"canDep\": true,\n // \"canInternal\": false,\n // \"canWd\": true,\n // \"ccy\": \"USDT\",\n // \"chain\": \"USDT-ERC20\",\n // \"logoLink\": \"https://static.coinall.ltd/cdn/assets/imgs/221/5F74EB20302D7761.png\",\n // \"mainNet\": false,\n // \"maxFee\": \"16\",\n // \"maxWd\": \"8852150\",\n // \"minFee\": \"8\",\n // \"minWd\": \"2\",\n // \"name\": \"Tether\",\n // \"usedWdQuota\": \"0\",\n // \"wdQuota\": \"500\",\n // \"wdTickSz\": \"3\"\n // },\n // ...\n // ],\n // \"msg\": \"\"\n // }\n //\n const data = this.safeValue(response, 'data', []);\n const result = {};\n const dataByCurrencyId = this.groupBy(data, 'ccy');\n const currencyIds = Object.keys(dataByCurrencyId);\n for (let i = 0; i < currencyIds.length; i++) {\n const currencyId = currencyIds[i];\n const currency = this.safeCurrency(currencyId);\n const code = currency['code'];\n const chains = dataByCurrencyId[currencyId];\n const networks = {};\n let currencyActive = false;\n let isTokenDepositable = false;\n let isTokenWithdrawable = false;\n let maxPrecision = undefined;\n for (let j = 0; j < chains.length; j++) {\n const chain = chains[j];\n const isDepositEnabled = this.safeValue(chain, 'canDep');\n const isWithdrawalEnabled = this.safeValue(chain, 'canWd');\n isTokenDepositable = isDepositEnabled || isTokenDepositable;\n isTokenWithdrawable = isWithdrawalEnabled || isTokenWithdrawable;\n const canInternal = this.safeValue(chain, 'canInternal');\n const active = (isDepositEnabled && isWithdrawalEnabled && canInternal) ? true : false;\n currencyActive = (active) ? active : currencyActive;\n const networkId = this.safeString(chain, 'chain');\n if ((networkId !== undefined) && (networkId.indexOf('-') >= 0)) {\n const parts = networkId.split('-');\n const chainPart = parts.slice(1).join('-');\n const networkCode = this.safeNetwork(chainPart);\n const precision = this.parsePrecision(this.safeString(chain, 'wdTickSz'));\n if (maxPrecision === undefined) {\n maxPrecision = precision;\n }\n else {\n maxPrecision = Precise.stringMin(maxPrecision, precision);\n }\n networks[networkCode] = {\n 'id': networkId,\n 'network': networkCode,\n 'active': active,\n 'deposit': isDepositEnabled,\n 'withdraw': isWithdrawalEnabled,\n 'fee': this.safeNumber(chain, 'minFee'),\n 'precision': this.parseNumber(precision),\n 'limits': {\n 'withdraw': {\n 'min': this.safeNumber(chain, 'minWd'),\n 'max': this.safeNumber(chain, 'maxWd'),\n },\n },\n 'info': chain,\n };\n }\n }\n const firstChain = this.safeValue(chains, 0);\n result[code] = {\n 'info': undefined,\n 'code': code,\n 'id': currencyId,\n 'name': this.safeString(firstChain, 'name'),\n 'active': currencyActive,\n 'deposit': isTokenDepositable,\n 'withdraw': isTokenWithdrawable,\n 'fee': undefined,\n 'precision': this.parseNumber(maxPrecision),\n 'limits': {\n 'amount': {\n 'min': undefined,\n 'max': undefined,\n },\n },\n 'networks': networks,\n };\n }\n return result;\n }\n async fetchOrderBook(symbol, limit = undefined, params = {}) {\n /**\n * @method\n * @name okx#fetchOrderBook\n * @description fetches information on open orders with bid (buy) and ask (sell) prices, volumes and other data\n * @see https://www.okx.com/docs-v5/en/#order-book-trading-market-data-get-order-book\n * @param {string} symbol unified symbol of the market to fetch the order book for\n * @param {int} [limit] the maximum amount of order book entries to return\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {string} [params.method] 'publicGetMarketBooksFull' or 'publicGetMarketBooks' default is 'publicGetMarketBooks'\n * @returns {object} A dictionary of [order book structures]{@link https://docs.ccxt.com/#/?id=order-book-structure} indexed by market symbols\n */\n await this.loadMarkets();\n const market = this.market(symbol);\n const request = {\n 'instId': market['id'],\n };\n let method = undefined;\n [method, params] = this.handleOptionAndParams(params, 'fetchOrderBook', 'method', 'publicGetMarketBooks');\n if (method === 'publicGetMarketBooksFull' && limit === undefined) {\n limit = 5000;\n }\n limit = (limit === undefined) ? 100 : limit;\n if (limit !== undefined) {\n request['sz'] = limit; // max 400\n }\n let response = undefined;\n if ((method === 'publicGetMarketBooksFull') || (limit > 400)) {\n response = await this.publicGetMarketBooksFull(this.extend(request, params));\n }\n else {\n response = await this.publicGetMarketBooks(this.extend(request, params));\n }\n //\n // {\n // \"code\": \"0\",\n // \"msg\": \"\",\n // \"data\": [\n // {\n // \"asks\": [\n // [\"0.07228\",\"4.211619\",\"0\",\"2\"], // price, amount, liquidated orders, total open orders\n // [\"0.0723\",\"299.880364\",\"0\",\"2\"],\n // [\"0.07231\",\"3.72832\",\"0\",\"1\"],\n // ],\n // \"bids\": [\n // [\"0.07221\",\"18.5\",\"0\",\"1\"],\n // [\"0.0722\",\"18.5\",\"0\",\"1\"],\n // [\"0.07219\",\"0.505407\",\"0\",\"1\"],\n // ],\n // \"ts\": \"1621438475342\"\n // }\n // ]\n // }\n //\n const data = this.safeValue(response, 'data', []);\n const first = this.safeValue(data, 0, {});\n const timestamp = this.safeInteger(first, 'ts');\n return this.parseOrderBook(first, symbol, timestamp);\n }\n parseTicker(ticker, market = undefined) {\n //\n // {\n // \"instType\": \"SPOT\",\n // \"instId\": \"ETH-BTC\",\n // \"last\": \"0.07319\",\n // \"lastSz\": \"0.044378\",\n // \"askPx\": \"0.07322\",\n // \"askSz\": \"4.2\",\n // \"bidPx\": \"0.0732\",\n // \"bidSz\": \"6.050058\",\n // \"open24h\": \"0.07801\",\n // \"high24h\": \"0.07975\",\n // \"low24h\": \"0.06019\",\n // \"volCcy24h\": \"11788.887619\",\n // \"vol24h\": \"167493.829229\",\n // \"ts\": \"1621440583784\",\n // \"sodUtc0\": \"0.07872\",\n // \"sodUtc8\": \"0.07345\"\n // }\n //\n const timestamp = this.safeInteger(ticker, 'ts');\n const marketId = this.safeString(ticker, 'instId');\n market = this.safeMarket(marketId, market, '-');\n const symbol = market['symbol'];\n const last = this.safeString(ticker, 'last');\n const open = this.safeString(ticker, 'open24h');\n const spot = this.safeBool(market, 'spot', false);\n const quoteVolume = spot ? this.safeString(ticker, 'volCcy24h') : undefined;\n const baseVolume = this.safeString(ticker, 'vol24h');\n const high = this.safeString(ticker, 'high24h');\n const low = this.safeString(ticker, 'low24h');\n return this.safeTicker({\n 'symbol': symbol,\n 'timestamp': timestamp,\n 'datetime': this.iso8601(timestamp),\n 'high': high,\n 'low': low,\n 'bid': this.safeString(ticker, 'bidPx'),\n 'bidVolume': this.safeString(ticker, 'bidSz'),\n 'ask': this.safeString(ticker, 'askPx'),\n 'askVolume': this.safeString(ticker, 'askSz'),\n 'vwap': undefined,\n 'open': open,\n 'close': last,\n 'last': last,\n 'previousClose': undefined,\n 'change': undefined,\n 'percentage': undefined,\n 'average': undefined,\n 'baseVolume': baseVolume,\n 'quoteVolume': quoteVolume,\n 'info': ticker,\n }, market);\n }\n async fetchTicker(symbol, params = {}) {\n /**\n * @method\n * @name okx#fetchTicker\n * @description fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market\n * @see https://www.okx.com/docs-v5/en/#order-book-trading-market-data-get-ticker\n * @param {string} symbol unified symbol of the market to fetch the ticker for\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} a [ticker structure]{@link https://docs.ccxt.com/#/?id=ticker-structure}\n */\n await this.loadMarkets();\n const market = this.market(symbol);\n const request = {\n 'instId': market['id'],\n };\n const response = await this.publicGetMarketTicker(this.extend(request, params));\n //\n // {\n // \"code\": \"0\",\n // \"msg\": \"\",\n // \"data\": [\n // {\n // \"instType\": \"SPOT\",\n // \"instId\": \"ETH-BTC\",\n // \"last\": \"0.07319\",\n // \"lastSz\": \"0.044378\",\n // \"askPx\": \"0.07322\",\n // \"askSz\": \"4.2\",\n // \"bidPx\": \"0.0732\",\n // \"bidSz\": \"6.050058\",\n // \"open24h\": \"0.07801\",\n // \"high24h\": \"0.07975\",\n // \"low24h\": \"0.06019\",\n // \"volCcy24h\": \"11788.887619\",\n // \"vol24h\": \"167493.829229\",\n // \"ts\": \"1621440583784\",\n // \"sodUtc0\": \"0.07872\",\n // \"sodUtc8\": \"0.07345\"\n // }\n // ]\n // }\n //\n const data = this.safeValue(response, 'data', []);\n const first = this.safeValue(data, 0, {});\n return this.parseTicker(first, market);\n }\n async fetchTickersByType(type, symbols = undefined, params = {}) {\n await this.loadMarkets();\n const request = {\n 'instType': this.convertToInstrumentType(type),\n };\n if (type === 'option') {\n const defaultUnderlying = this.safeValue(this.options, 'defaultUnderlying', 'BTC-USD');\n const currencyId = this.safeString2(params, 'uly', 'marketId', defaultUnderlying);\n if (currencyId === undefined) {\n throw new InvalidParamsError('fetchTickersByType() requires an underlying uly or marketId parameter for options markets').exchange(this.id);\n }\n else {\n request['uly'] = currencyId;\n }\n }\n const response = await this.publicGetMarketTickers(this.extend(request, params));\n //\n // {\n // \"code\": \"0\",\n // \"msg\": \"\",\n // \"data\": [\n // {\n // \"instType\": \"SPOT\",\n // \"instId\": \"BCD-BTC\",\n // \"last\": \"0.0000769\",\n // \"lastSz\": \"5.4788\",\n // \"askPx\": \"0.0000777\",\n // \"askSz\": \"3.2197\",\n // \"bidPx\": \"0.0000757\",\n // \"bidSz\": \"4.7509\",\n // \"open24h\": \"0.0000885\",\n // \"high24h\": \"0.0000917\",\n // \"low24h\": \"0.0000596\",\n // \"volCcy24h\": \"9.2877\",\n // \"vol24h\": \"124824.1985\",\n // \"ts\": \"1621441741434\",\n // \"sodUtc0\": \"0.0000905\",\n // \"sodUtc8\": \"0.0000729\"\n // },\n // ]\n // }\n //\n const tickers = this.safeValue(response, 'data', []);\n return this.parseTickers(tickers, symbols);\n }\n async fetchTickers(symbols = undefined, params = {}) {\n /**\n * @method\n * @name okx#fetchTickers\n * @description fetches price tickers for multiple markets, statistical information calculated over the past 24 hours for each market\n * @see https://www.okx.com/docs-v5/en/#order-book-trading-market-data-get-tickers\n * @param {string[]|undefined} symbols unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} a dictionary of [ticker structures]{@link https://docs.ccxt.com/#/?id=ticker-structure}\n */\n await this.loadMarkets();\n symbols = this.marketSymbols(symbols);\n const first = this.safeString(symbols, 0);\n let market = undefined;\n if (first !== undefined) {\n market = this.market(first);\n }\n const [type, query] = this.handleMarketTypeAndParams('fetchTickers', market, params);\n return await this.fetchTickersByType(type, symbols, query);\n }\n parseTrade(trade, market = undefined) {\n //\n // public fetchTrades\n //\n // {\n // \"instId\": \"ETH-BTC\",\n // \"side\": \"sell\",\n // \"sz\": \"0.119501\",\n // \"px\": \"0.07065\",\n // \"tradeId\": \"15826757\",\n // \"ts\": \"1621446178316\"\n // }\n //\n // option: fetchTrades\n //\n // {\n // \"fillVol\": \"0.46387625976562497\",\n // \"fwdPx\": \"26299.754935451125\",\n // \"indexPx\": \"26309.7\",\n // \"instFamily\": \"BTC-USD\",\n // \"instId\": \"BTC-USD-230526-26000-C\",\n // \"markPx\": \"0.042386283557554236\",\n // \"optType\": \"C\",\n // \"px\": \"0.0415\",\n // \"side\": \"sell\",\n // \"sz\": \"90\",\n // \"tradeId\": \"112\",\n // \"ts\": \"1683907480154\"\n // }\n //\n // private fetchMyTrades\n //\n // {\n // \"side\": \"buy\",\n // \"fillSz\": \"0.007533\",\n // \"fillPx\": \"2654.98\",\n // \"fee\": \"-0.000007533\",\n // \"ordId\": \"317321390244397056\",\n // \"instType\": \"SPOT\",\n // \"instId\": \"ETH-USDT\",\n // \"clOrdId\": \"\",\n // \"posSide\": \"net\",\n // \"billId\": \"317321390265368576\",\n // \"tag\": \"0\",\n // \"execType\": \"T\",\n // \"tradeId\": \"107601752\",\n // \"feeCcy\": \"ETH\",\n // \"ts\": \"1621927314985\"\n // }\n //\n const id = this.safeString(trade, 'tradeId');\n const marketId = this.safeString(trade, 'instId');\n market = this.safeMarket(marketId, market, '-');\n const symbol = market['symbol'];\n const timestamp = this.safeInteger(trade, 'ts');\n const price = this.safeString2(trade, 'fillPx', 'px');\n const amount = this.safeString2(trade, 'fillSz', 'sz');\n const side = this.safeString(trade, 'side');\n const orderId = this.safeString(trade, 'ordId');\n const feeCostString = this.safeString(trade, 'fee');\n let fee = undefined;\n if (feeCostString !== undefined) {\n const feeCostSigned = Precise.stringNeg(feeCostString);\n const feeCurrencyId = this.safeString(trade, 'feeCcy');\n const feeCurrencyCode = this.safeCurrencyCode(feeCurrencyId);\n fee = {\n 'cost': feeCostSigned,\n 'currency': feeCurrencyCode,\n };\n }\n let takerOrMaker = this.safeString(trade, 'execType');\n if (takerOrMaker === 'T') {\n takerOrMaker = 'taker';\n }\n else if (takerOrMaker === 'M') {\n takerOrMaker = 'maker';\n }\n return this.safeTrade({\n 'info': trade,\n 'timestamp': timestamp,\n 'datetime': this.iso8601(timestamp),\n 'symbol': symbol,\n 'id': id,\n 'order': orderId,\n 'type': undefined,\n 'takerOrMaker': takerOrMaker,\n 'side': side,\n 'price': price,\n 'amount': amount,\n 'cost': undefined,\n 'fee': fee,\n }, market);\n }\n async fetchTrades(symbol, since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name okx#fetchTrades\n * @description get the list of most recent trades for a particular symbol\n * @see https://www.okx.com/docs-v5/en/#rest-api-market-data-get-trades\n * @see https://www.okx.com/docs-v5/en/#rest-api-public-data-get-option-trades\n * @param {string} symbol unified symbol of the market to fetch trades for\n * @param {int} [since] timestamp in ms of the earliest trade to fetch\n * @param {int} [limit] the maximum amount of trades to fetch\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {boolean} [params.paginate] *only applies to publicGetMarketHistoryTrades* default false, when true will automatically paginate by calling this endpoint multiple times\n * @returns {Trade[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=public-trades}\n */\n await this.loadMarkets();\n let paginate = false;\n [paginate, params] = this.handleOptionAndParams(params, 'fetchTrades', 'paginate');\n if (paginate) {\n return await this.fetchPaginatedCallCursor('fetchTrades', symbol, since, limit, params, 'tradeId', 'after', undefined, 100);\n }\n const market = this.market(symbol);\n const request = {\n 'instId': market['id'],\n };\n let response = undefined;\n if (market['option']) {\n response = await this.publicGetPublicOptionTrades(this.extend(request, params));\n }\n else {\n if (limit !== undefined) {\n request['limit'] = limit; // default 100\n }\n let method = undefined;\n [method, params] = this.handleOptionAndParams(params, 'fetchTrades', 'method', 'publicGetMarketTrades');\n if (method === 'publicGetMarketTrades') {\n response = await this.publicGetMarketTrades(this.extend(request, params));\n }\n else if (method === 'publicGetMarketHistoryTrades') {\n response = await this.publicGetMarketHistoryTrades(this.extend(request, params));\n }\n }\n //\n // {\n // \"code\": \"0\",\n // \"msg\": \"\",\n // \"data\": [\n // {\"instId\":\"ETH-BTC\",\"side\":\"sell\",\"sz\":\"0.119501\",\"px\":\"0.07065\",\"tradeId\":\"15826757\",\"ts\":\"1621446178316\"},\n // {\"instId\":\"ETH-BTC\",\"side\":\"sell\",\"sz\":\"0.03\",\"px\":\"0.07068\",\"tradeId\":\"15826756\",\"ts\":\"1621446178066\"},\n // {\"instId\":\"ETH-BTC\",\"side\":\"buy\",\"sz\":\"0.507\",\"px\":\"0.07069\",\"tradeId\":\"15826755\",\"ts\":\"1621446175085\"},\n // ]\n // }\n //\n // option\n //\n // {\n // \"code\": \"0\",\n // \"data\": [\n // {\n // \"fillVol\": \"0.46387625976562497\",\n // \"fwdPx\": \"26299.754935451125\",\n // \"indexPx\": \"26309.7\",\n // \"instFamily\": \"BTC-USD\",\n // \"instId\": \"BTC-USD-230526-26000-C\",\n // \"markPx\": \"0.042386283557554236\",\n // \"optType\": \"C\",\n // \"px\": \"0.0415\",\n // \"side\": \"sell\",\n // \"sz\": \"90\",\n // \"tradeId\": \"112\",\n // \"ts\": \"1683907480154\"\n // },\n // ],\n // \"msg\": \"\"\n // }\n //\n const data = this.safeValue(response, 'data', []);\n return this.parseTrades(data, market, since, limit);\n }\n parseOHLCV(ohlcv, market = undefined) {\n //\n // [\n // \"1678928760000\", // timestamp\n // \"24341.4\", // open\n // \"24344\", // high\n // \"24313.2\", // low\n // \"24323\", // close\n // \"628\", // contract volume\n // \"2.5819\", // base volume\n // \"62800\", // quote volume\n // \"0\" // candlestick state\n // ]\n //\n const res = this.handleMarketTypeAndParams('fetchOHLCV', market, undefined);\n const type = res[0];\n const volumeIndex = (type === 'spot') ? 5 : 6;\n return [\n this.safeInteger(ohlcv, 0),\n this.safeNumber(ohlcv, 1),\n this.safeNumber(ohlcv, 2),\n this.safeNumber(ohlcv, 3),\n this.safeNumber(ohlcv, 4),\n this.safeNumber(ohlcv, volumeIndex),\n ];\n }\n async fetchOHLCV(symbol, timeframe = '1m', since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name okx#fetchOHLCV\n * @description fetches historical candlestick data containing the open, high, low, and close price, and the volume of a market\n * @see https://www.okx.com/docs-v5/en/#rest-api-market-data-get-candlesticks\n * @see https://www.okx.com/docs-v5/en/#rest-api-market-data-get-candlesticks-history\n * @see https://www.okx.com/docs-v5/en/#rest-api-market-data-get-mark-price-candlesticks\n * @see https://www.okx.com/docs-v5/en/#rest-api-market-data-get-mark-price-candlesticks-history\n * @see https://www.okx.com/docs-v5/en/#rest-api-market-data-get-index-candlesticks\n * @see https://www.okx.com/docs-v5/en/#rest-api-market-data-get-index-candlesticks-history\n * @param {string} symbol unified symbol of the market to fetch OHLCV data for\n * @param {string} timeframe the length of time each candle represents\n * @param {int} [since] timestamp in ms of the earliest candle to fetch\n * @param {int} [limit] the maximum amount of candles to fetch\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {string} [params.price] \"mark\" or \"index\" for mark price and index price candles\n * @param {int} [params.until] timestamp in ms of the latest candle to fetch\n * @param {boolean} [params.paginate] default false, when true will automatically paginate by calling this endpoint multiple times. See in the docs all the [availble parameters](https://github.com/ccxt/ccxt/wiki/Manual#pagination-params)\n * @returns {int[][]} A list of candles ordered as timestamp, open, high, low, close, volume\n */\n await this.loadMarkets();\n const market = this.market(symbol);\n let paginate = false;\n [paginate, params] = this.handleOptionAndParams(params, 'fetchOHLCV', 'paginate');\n if (paginate) {\n return await this.fetchPaginatedCallDeterministic('fetchOHLCV', symbol, since, limit, timeframe, params, 200);\n }\n const price = this.safeString(params, 'price');\n params = this.omit(params, 'price');\n const options = this.safeValue(this.options, 'fetchOHLCV', {});\n const timezone = this.safeString(options, 'timezone', 'UTC');\n if (limit === undefined) {\n limit = 100; // default 100, max 100\n }\n const duration = this.parseTimeframe(timeframe);\n let bar = this.safeString(this.timeframes, timeframe, timeframe);\n if ((timezone === 'UTC') && (duration >= 21600)) { // if utc and timeframe >= 6h\n bar += timezone.toLowerCase();\n }\n const request = {\n 'instId': market['id'],\n 'bar': bar,\n 'limit': limit,\n };\n let defaultType = 'Candles';\n if (since !== undefined) {\n const now = this.milliseconds();\n const durationInMilliseconds = duration * 1000;\n // switch to history candles if since is past the cutoff for current candles\n const historyBorder = now - ((1440 - 1) * durationInMilliseconds);\n if (since < historyBorder) {\n defaultType = 'HistoryCandles';\n }\n const startTime = Math.max(since - 1, 0);\n request['before'] = startTime;\n request['after'] = this.sum(since, durationInMilliseconds * limit);\n }\n const until = this.safeInteger(params, 'until');\n if (until !== undefined) {\n request['after'] = until;\n params = this.omit(params, 'until');\n }\n defaultType = this.safeString(options, 'type', defaultType); // Candles or HistoryCandles\n const type = this.safeString(params, 'type', defaultType);\n params = this.omit(params, 'type');\n const isHistoryCandles = (type === 'HistoryCandles');\n let response = undefined;\n if (price === 'mark') {\n if (isHistoryCandles) {\n response = await this.publicGetMarketHistoryMarkPriceCandles(this.extend(request, params));\n }\n else {\n response = await this.publicGetMarketMarkPriceCandles(this.extend(request, params));\n }\n }\n else if (price === 'index') {\n request['instId'] = market['info']['instFamily']; // okx index candles require instFamily instead of instId\n if (isHistoryCandles) {\n response = await this.publicGetMarketHistoryIndexCandles(this.extend(request, params));\n }\n else {\n response = await this.publicGetMarketIndexCandles(this.extend(request, params));\n }\n }\n else {\n if (isHistoryCandles) {\n response = await this.publicGetMarketHistoryCandles(this.extend(request, params));\n }\n else {\n response = await this.publicGetMarketCandles(this.extend(request, params));\n }\n }\n //\n // {\n // \"code\": \"0\",\n // \"msg\": \"\",\n // \"data\": [\n // [\"1678928760000\",\"24341.4\",\"24344\",\"24313.2\",\"24323\",\"628\",\"2.5819\",\"62800\",\"0\"],\n // [\"1678928700000\",\"24324.1\",\"24347.6\",\"24321.7\",\"24341.4\",\"2565\",\"10.5401\",\"256500\",\"1\"],\n // [\"1678928640000\",\"24300.2\",\"24324.1\",\"24288\",\"24324.1\",\"3304\",\"13.5937\",\"330400\",\"1\"],\n // ]\n // }\n //\n const data = this.safeValue(response, 'data', []);\n return this.parseOHLCVs(data, market, timeframe, since, limit);\n }\n parseBalanceByType(type, response) {\n if (type === 'funding') {\n return this.parseFundingBalance(response);\n }\n else if (type === 'savings') {\n return this.parseSavingsBalance(response);\n }\n else {\n return this.parseTradingBalance(response);\n }\n }\n parseSavingsBalance(response) {\n const result = { 'info': response };\n const data = this.safeValue(response, 'data', []);\n for (let i = 0; i < data.length; i++) {\n const balance = data[i];\n const currencyId = this.safeString(balance, 'ccy');\n const code = this.safeCurrencyCode(currencyId);\n const account = this.account();\n account['total'] = this.safeString(balance, 'amt');\n account['used'] = this.safeString(balance, 'loanAmt');\n account['free'] = Precise.stringSub(account['total'], account['used']);\n result[code] = account;\n }\n return this.safeBalance(result);\n }\n parseTradingBalance(response) {\n const result = { 'info': response };\n const data = this.safeValue(response, 'data', []);\n const first = this.safeValue(data, 0, {});\n const timestamp = this.safeInteger(first, 'uTime');\n const details = this.safeValue(first, 'details', []);\n for (let i = 0; i < details.length; i++) {\n const balance = details[i];\n const currencyId = this.safeString(balance, 'ccy');\n const code = this.safeCurrencyCode(currencyId);\n const account = this.account();\n // it may be incorrect to use total, free and used for swap accounts\n const eq = this.safeString(balance, 'eq');\n const availEq = this.safeString(balance, 'availEq');\n if ((eq === undefined) || (availEq === undefined)) {\n account['free'] = this.safeString(balance, 'availBal');\n account['used'] = this.safeString(balance, 'frozenBal');\n }\n else {\n account['total'] = eq;\n account['free'] = availEq;\n }\n result[code] = account;\n }\n result['timestamp'] = timestamp;\n result['datetime'] = this.iso8601(timestamp);\n return this.safeBalance(result);\n }\n parseFundingBalance(response) {\n const result = { 'info': response };\n const data = this.safeValue(response, 'data', []);\n for (let i = 0; i < data.length; i++) {\n const balance = data[i];\n const currencyId = this.safeString(balance, 'ccy');\n const code = this.safeCurrencyCode(currencyId);\n const account = this.account();\n // it may be incorrect to use total, free and used for swap accounts\n account['total'] = this.safeString(balance, 'bal');\n account['free'] = this.safeString(balance, 'availBal');\n account['used'] = this.safeString(balance, 'frozenBal');\n result[code] = account;\n }\n return this.safeBalance(result);\n }\n parseTradingFee(fee, market = undefined) {\n // https://www.okx.com/docs-v5/en/#rest-api-account-get-fee-rates\n //\n // {\n // \"category\": \"1\",\n // \"delivery\": \"\",\n // \"exercise\": \"\",\n // \"instType\": \"SPOT\",\n // \"level\": \"Lv1\",\n // \"maker\": \"-0.0008\",\n // \"taker\": \"-0.001\",\n // \"ts\": \"1639043138472\"\n // }\n //\n return {\n 'info': fee,\n 'symbol': this.safeSymbol(undefined, market),\n // OKX returns the fees as negative values opposed to other exchanges, so the sign needs to be flipped\n 'maker': this.parseNumber(Precise.stringNeg(this.safeString2(fee, 'maker', 'makerU'))),\n 'taker': this.parseNumber(Precise.stringNeg(this.safeString2(fee, 'taker', 'takerU'))),\n };\n }\n async fetchTradingFee(symbol, params = {}) {\n /**\n * @method\n * @name okx#fetchTradingFee\n * @description fetch the trading fees for a market\n * @see https://www.okx.com/docs-v5/en/#trading-account-rest-api-get-fee-rates\n * @param {string} symbol unified market symbol\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} a [fee structure]{@link https://docs.ccxt.com/#/?id=fee-structure}\n */\n await this.loadMarkets();\n const market = this.market(symbol);\n const request = {\n 'instType': this.convertToInstrumentType(market['type']), // SPOT, MARGIN, SWAP, FUTURES, OPTION\n // \"instId\": market[\"id\"], // only applicable to SPOT/MARGIN\n // \"uly\": market[\"id\"], // only applicable to FUTURES/SWAP/OPTION\n // \"category\": \"1\", // 1 = Class A, 2 = Class B, 3 = Class C, 4 = Class D\n };\n if (market['spot']) {\n request['instId'] = market['id'];\n }\n else if (market['swap'] || market['future'] || market['option']) {\n request['uly'] = market['baseId'] + '-' + market['quoteId'];\n }\n else {\n throw new MarketTypeNotSupportedError(market['type'])\n .addMessage('fetchTradingFee() supports spot, swap, future or option markets only')\n .exchange(this.id);\n }\n const response = await this.privateGetAccountTradeFee(this.extend(request, params));\n //\n // {\n // \"code\": \"0\",\n // \"data\": [\n // {\n // \"category\": \"1\",\n // \"delivery\": \"\",\n // \"exercise\": \"\",\n // \"instType\": \"SPOT\",\n // \"level\": \"Lv1\",\n // \"maker\": \"-0.0008\",\n // \"taker\": \"-0.001\",\n // \"ts\": \"1639043138472\"\n // }\n // ],\n // \"msg\": \"\"\n // }\n //\n const data = this.safeValue(response, 'data', []);\n const first = this.safeValue(data, 0, {});\n return this.parseTradingFee(first, market);\n }\n async fetchBalance(params = {}) {\n /**\n * @method\n * @name okx#fetchBalance\n * @description query for balance and get the amount of funds available for trading or funds locked in orders\n * @see https://www.okx.com/docs-v5/en/#funding-account-rest-api-get-balance\n * @see https://www.okx.com/docs-v5/en/#trading-account-rest-api-get-balance\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} a [balance structure]{@link https://docs.ccxt.com/#/?id=balance-structure}\n */\n await this.loadMarkets();\n const [marketType, query] = this.handleMarketTypeAndParams('fetchBalance', undefined, params);\n const request = {\n // 'ccy': 'BTC,ETH', // comma-separated list of currency ids\n };\n let response = undefined;\n if (marketType === 'funding') {\n response = await this.privateGetAssetBalances(this.extend(request, query));\n }\n else if (marketType === 'savings') {\n response = await this.privateGetFinanceSavingsBalance(this.extend(request, query));\n }\n else {\n response = await this.privateGetAccountBalance(this.extend(request, query));\n }\n //\n // {\n // \"code\": \"0\",\n // \"data\": [\n // {\n // \"adjEq\": \"\",\n // \"details\": [\n // {\n // \"availBal\": \"\",\n // \"availEq\": \"28.21006347\",\n // \"cashBal\": \"28.21006347\",\n // \"ccy\": \"USDT\",\n // \"crossLiab\": \"\",\n // \"disEq\": \"28.2687404020176\",\n // \"eq\":\"28 .21006347\",\n // \"eqUsd\": \"28.2687404020176\",\n // \"frozenBal\": \"0\",\n // \"interest\": \"\",\n // \"isoEq\": \"0\",\n // \"isoLiab\": \"\",\n // \"liab\": \"\",\n // \"maxLoan\": \"\",\n // \"mgnRatio\": \"\",\n // \"notionalLever\": \"0\",\n // \"ordFrozen\": \"0\",\n // \"twap\": \"0\",\n // \"uTime\": \"1621556539861\",\n // \"upl\": \"0\",\n // \"uplLiab\": \"\"\n // }\n // ],\n // \"imr\": \"\",\n // \"isoEq\": \"0\",\n // \"mgnRatio\": \"\",\n // \"mmr\": \"\",\n // \"notionalUsd\": \"\",\n // \"ordFroz\": \"\",\n // \"totalEq\": \"28.2687404020176\",\n // \"uTime\": \"1621556553510\"\n // }\n // ],\n // \"msg\": \"\"\n // }\n //\n // {\n // \"code\": \"0\",\n // \"data\": [\n // {\n // \"adjEq\": \"\",\n // \"details\": [\n // {\n // \"availBal\": \"0.049\",\n // \"availEq\": \"\",\n // \"cashBal\": \"0.049\",\n // \"ccy\": \"BTC\",\n // \"crossLiab\": \"\",\n // \"disEq\": \"1918.55678\",\n // \"eq\": \"0.049\",\n // \"eqUsd\": \"1918.55678\",\n // \"frozenBal\": \"0\",\n // \"interest\": \"\",\n // \"isoEq\": \"\",\n // \"isoLiab\": \"\",\n // \"liab\": \"\",\n // \"maxLoan\": \"\",\n // \"mgnRatio\": \"\",\n // \"notionalLever\": \"\",\n // \"ordFrozen\": \"0\",\n // \"twap\": \"0\",\n // \"uTime\": \"1621973128591\",\n // \"upl\": \"\",\n // \"uplLiab\": \"\"\n // }\n // ],\n // \"imr\": \"\",\n // \"isoEq\": \"\",\n // \"mgnRatio\": \"\",\n // \"mmr\": \"\",\n // \"notionalUsd\": \"\",\n // \"ordFroz\": \"\",\n // \"totalEq\": \"1918.55678\",\n // \"uTime\": \"1622045126908\"\n // }\n // ],\n // \"msg\": \"\"\n // }\n //\n // funding\n //\n // {\n // \"code\": \"0\",\n // \"data\": [\n // {\n // \"availBal\": \"0.00005426\",\n // \"bal\": 0.0000542600000000,\n // \"ccy\": \"BTC\",\n // \"frozenBal\": \"0\"\n // }\n // ],\n // \"msg\": \"\"\n // }\n //\n // Savings\n // {\n // \"code\": \"0\",\n // \"msg\":\"\",\n // \"data\": [\n // {\n // \"earnings\": \"0.0010737388791526\",\n // \"redemptAmt\": \"\",\n // \"rate\": \"0.0100000000000000\",\n // \"ccy\": \"USDT\",\n // \"amt\": \"11.0010737453457821\",\n // \"loanAmt\": \"11.0010630707982819\",\n // \"pendingAmt\": \"0.0000106745475002\"\n // }\n // ]\n // }\n return this.parseBalanceByType(marketType, response);\n }\n async createMarketBuyOrderWithCost(symbol, cost, params = {}) {\n /**\n * @method\n * @name okx#createMarketBuyOrderWithCost\n * @see https://www.okx.com/docs-v5/en/#order-book-trading-trade-post-place-order\n * @description create a market buy order by providing the symbol and cost\n * @param {string} symbol unified symbol of the market to create an order in\n * @param {float} cost how much you want to trade in units of the quote currency\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n await this.loadMarkets();\n const market = this.market(symbol);\n if (!market['spot']) {\n throw new MarketTypeNotSupportedError(market['type'])\n .addMessage('createMarketBuyOrderWithCost() supports spot markets only')\n .exchange(this.id);\n }\n params['createMarketBuyOrderRequiresPrice'] = false;\n params['tgtCcy'] = 'quote_ccy';\n return await this.createOrder(symbol, 'market', 'buy', cost, undefined, params);\n }\n async createMarketSellOrderWithCost(symbol, cost, params = {}) {\n /**\n * @method\n * @name okx#createMarketSellOrderWithCost\n * @see https://www.okx.com/docs-v5/en/#order-book-trading-trade-post-place-order\n * @description create a market buy order by providing the symbol and cost\n * @param {string} symbol unified symbol of the market to create an order in\n * @param {float} cost how much you want to trade in units of the quote currency\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n await this.loadMarkets();\n const market = this.market(symbol);\n if (!market['spot']) {\n throw new MarketTypeNotSupportedError(market['type'])\n .addMessage('createMarketSellOrderWithCost() supports spot markets only')\n .exchange(this.id);\n }\n params['createMarketBuyOrderRequiresPrice'] = false;\n params['tgtCcy'] = 'quote_ccy';\n return await this.createOrder(symbol, 'market', 'sell', cost, undefined, params);\n }\n createOrderRequest(symbol, type, side, amount, price = undefined, params = {}) {\n const market = this.market(symbol);\n const request = {\n 'instId': market['id'],\n // 'ccy': currency['id'], // only applicable to cross MARGIN orders in single-currency margin\n // 'clOrdId': clientOrderId, // up to 32 characters, must be unique\n // 'tag': tag, // up to 8 characters\n 'side': side,\n // 'posSide': 'long', // long, short, // required in the long/short mode, and can only be long or short (only for future or swap)\n 'ordType': type,\n // 'ordType': type, // privatePostTradeOrder: market, limit, post_only, fok, ioc, optimal_limit_ioc\n // 'ordType': type, // privatePostTradeOrderAlgo: conditional, oco, trigger, move_order_stop, iceberg, twap\n 'sz': this.amountToPrecision(symbol, amount),\n // 'px': this.priceToPrecision (symbol, price), // limit orders only\n // 'reduceOnly': false,\n //\n // 'triggerPx': 10, // stopPrice (trigger orders)\n // 'orderPx': 10, // Order price if -1, the order will be executed at the market price. (trigger orders)\n // 'triggerPxType': 'last', // Conditional default is last, mark or index (trigger orders)\n //\n // 'tpTriggerPx': 10, // takeProfitPrice (conditional orders)\n // 'tpTriggerPxType': 'last', // Conditional default is last, mark or index (conditional orders)\n // 'tpOrdPx': 10, // Order price for Take-Profit orders, if -1 will be executed at market price (conditional orders)\n //\n // 'slTriggerPx': 10, // stopLossPrice (conditional orders)\n // 'slTriggerPxType': 'last', // Conditional default is last, mark or index (conditional orders)\n // 'slOrdPx': 10, // Order price for Stop-Loss orders, if -1 will be executed at market price (conditional orders)\n };\n const spot = market['spot'];\n const contract = market['contract'];\n const triggerPrice = this.safeValueN(params, ['triggerPrice', 'stopPrice', 'triggerPx']);\n const timeInForce = this.safeString(params, 'timeInForce', 'GTC');\n const takeProfitPrice = this.safeValue2(params, 'takeProfitPrice', 'tpTriggerPx');\n const tpOrdPx = this.safeValue(params, 'tpOrdPx', price);\n const tpTriggerPxType = this.safeString(params, 'tpTriggerPxType', 'last');\n const stopLossPrice = this.safeValue2(params, 'stopLossPrice', 'slTriggerPx');\n const slOrdPx = this.safeValue(params, 'slOrdPx', price);\n const slTriggerPxType = this.safeString(params, 'slTriggerPxType', 'last');\n const clientOrderId = this.safeString2(params, 'clOrdId', 'clientOrderId');\n const stopLoss = this.safeValue(params, 'stopLoss');\n const stopLossDefined = (stopLoss !== undefined);\n const takeProfit = this.safeValue(params, 'takeProfit');\n const takeProfitDefined = (takeProfit !== undefined);\n const trailingPercent = this.safeString2(params, 'trailingPercent', 'callbackRatio');\n const isTrailingPercentOrder = trailingPercent !== undefined;\n const defaultMarginMode = this.safeString2(this.options, 'defaultMarginMode', 'marginMode', 'cross');\n let marginMode = this.safeString2(params, 'marginMode', 'tdMode'); // cross or isolated, tdMode not ommited so as to be extended into the request\n let margin = false;\n if ((marginMode !== undefined) && (marginMode !== 'cash')) {\n margin = true;\n }\n else {\n marginMode = defaultMarginMode;\n margin = this.safeBool(params, 'margin', false);\n }\n if (spot) {\n if (margin) {\n const defaultCurrency = (side === 'buy') ? market['quote'] : market['base'];\n const currency = this.safeString(params, 'ccy', defaultCurrency);\n request['ccy'] = this.safeCurrencyCode(currency);\n }\n const tradeMode = margin ? marginMode : 'cash';\n request['tdMode'] = tradeMode;\n }\n else if (contract) {\n if (market['swap'] || market['future']) {\n let positionSide = undefined;\n [positionSide, params] = this.handleOptionAndParams(params, 'createOrder', 'positionSide');\n if (positionSide !== undefined) {\n request['posSide'] = positionSide;\n }\n }\n request['tdMode'] = marginMode;\n }\n const isMarketOrder = type === 'market';\n let postOnly = false;\n [postOnly, params] = this.handlePostOnly(isMarketOrder, type === 'post_only', params);\n params = this.omit(params, ['currency', 'ccy', 'marginMode', 'timeInForce', 'stopPrice', 'triggerPrice', 'clientOrderId', 'stopLossPrice', 'takeProfitPrice', 'slOrdPx', 'tpOrdPx', 'margin', 'stopLoss', 'takeProfit', 'trailingPercent']);\n const ioc = (timeInForce === 'IOC') || (type === 'ioc');\n const fok = (timeInForce === 'FOK') || (type === 'fok');\n const trigger = (triggerPrice !== undefined) || (type === 'trigger');\n const conditional = (stopLossPrice !== undefined) || (takeProfitPrice !== undefined) || (type === 'conditional');\n const marketIOC = (isMarketOrder && ioc) || (type === 'optimal_limit_ioc');\n const defaultTgtCcy = this.safeString(this.options, 'tgtCcy', 'base_ccy');\n const tgtCcy = this.safeString(params, 'tgtCcy', defaultTgtCcy);\n if ((!contract) && (!margin)) {\n request['tgtCcy'] = tgtCcy;\n }\n if (isMarketOrder || marketIOC) {\n request['ordType'] = 'market';\n if (spot && (side === 'buy')) {\n // spot market buy: \"sz\" can refer either to base currency units or to quote currency units\n // see documentation: https://www.okx.com/docs-v5/en/#rest-api-trade-place-order\n if (tgtCcy === 'quote_ccy') {\n // quote_ccy: sz refers to units of quote currency\n let createMarketBuyOrderRequiresPrice = true;\n [createMarketBuyOrderRequiresPrice, params] = this.handleOptionAndParams(params, 'createOrder', 'createMarketBuyOrderRequiresPrice', true);\n let notional = this.safeNumber2(params, 'cost', 'sz');\n params = this.omit(params, ['cost', 'sz']);\n if (createMarketBuyOrderRequiresPrice) {\n if (price !== undefined) {\n if (notional === undefined) {\n const amountString = this.numberToString(amount);\n const priceString = this.numberToString(price);\n const quoteAmount = Precise.stringMul(amountString, priceString);\n notional = this.parseNumber(quoteAmount);\n }\n }\n else if (notional === undefined) {\n throw new InvalidParamsError(\"createOrder() requires the price argument with market buy orders to calculate total order cost (amount to spend), where cost = amount * price. Supply a price argument to createOrder() call if you want the cost to be calculated for you from price and amount, or, alternatively, add .options['createMarketBuyOrderRequiresPrice'] = false and supply the total cost value in the 'amount' argument or in the 'cost' unified extra parameter or in exchange-specific 'sz' extra parameter (the exchange-specific behaviour)\").exchange(this.id);\n }\n }\n else {\n notional = (notional === undefined) ? amount : notional;\n }\n request['sz'] = this.costToPrecision(symbol, notional);\n }\n }\n if (marketIOC && contract) {\n request['ordType'] = 'optimal_limit_ioc';\n }\n }\n else {\n if ((!trigger) && (!conditional)) {\n request['px'] = this.priceToPrecision(symbol, price);\n }\n }\n if (postOnly) {\n request['ordType'] = 'post_only';\n }\n else if (ioc && !marketIOC) {\n request['ordType'] = 'ioc';\n }\n else if (fok) {\n request['ordType'] = 'fok';\n }\n if (isTrailingPercentOrder) {\n const convertedTrailingPercent = Precise.stringDiv(trailingPercent, '100');\n request['callbackRatio'] = convertedTrailingPercent;\n request['ordType'] = 'move_order_stop';\n }\n else if (stopLossDefined || takeProfitDefined) {\n if (stopLossDefined) {\n const stopLossTriggerPrice = this.safeValueN(stopLoss, ['triggerPrice', 'stopPrice', 'slTriggerPx']);\n if (stopLossTriggerPrice === undefined) {\n throw new InvalidParamsError('createOrder() requires a trigger price in params[\"stopLoss\"][\"triggerPrice\"], or params[\"stopLoss\"][\"stopPrice\"], or params[\"stopLoss\"][\"slTriggerPx\"] for a stop loss order').exchange(this.id);\n }\n request['slTriggerPx'] = this.priceToPrecision(symbol, stopLossTriggerPrice);\n const stopLossLimitPrice = this.safeValueN(stopLoss, ['price', 'stopLossPrice', 'slOrdPx']);\n const stopLossOrderType = this.safeString(stopLoss, 'type');\n if (stopLossOrderType !== undefined) {\n const stopLossLimitOrderType = (stopLossOrderType === 'limit');\n const stopLossMarketOrderType = (stopLossOrderType === 'market');\n if ((!stopLossLimitOrderType) && (!stopLossMarketOrderType)) {\n throw new InvalidParamsError('createOrder() params[\"stopLoss\"][\"type\"] must be either \"limit\" or \"market\"').exchange(this.id);\n }\n else if (stopLossLimitOrderType) {\n if (stopLossLimitPrice === undefined) {\n throw new InvalidParamsError('createOrder() requires a limit price in params[\"stopLoss\"][\"price\"] or params[\"stopLoss\"][\"slOrdPx\"] for a stop loss limit order').exchange(this.id);\n }\n else {\n request['slOrdPx'] = this.priceToPrecision(symbol, stopLossLimitPrice);\n }\n }\n else if (stopLossOrderType === 'market') {\n request['slOrdPx'] = '-1';\n }\n }\n else if (stopLossLimitPrice !== undefined) {\n request['slOrdPx'] = this.priceToPrecision(symbol, stopLossLimitPrice); // limit sl order\n }\n else {\n request['slOrdPx'] = '-1'; // market sl order\n }\n const stopLossTriggerPriceType = this.safeString2(stopLoss, 'triggerPriceType', 'slTriggerPxType', 'last');\n if (stopLossTriggerPriceType !== undefined) {\n if ((stopLossTriggerPriceType !== 'last') && (stopLossTriggerPriceType !== 'index') && (stopLossTriggerPriceType !== 'mark')) {\n throw new InvalidParamsError('createOrder() stop loss trigger price type must be one of \"last\", \"index\" or \"mark\"').exchange(this.id);\n }\n request['slTriggerPxType'] = stopLossTriggerPriceType;\n }\n }\n if (takeProfitDefined) {\n const takeProfitTriggerPrice = this.safeValueN(takeProfit, ['triggerPrice', 'stopPrice', 'tpTriggerPx']);\n if (takeProfitTriggerPrice === undefined) {\n throw new InvalidParamsError('createOrder() requires a trigger price in params[\"takeProfit\"][\"triggerPrice\"], or params[\"takeProfit\"][\"stopPrice\"], or params[\"takeProfit\"][\"tpTriggerPx\"] for a take profit order').exchange(this.id);\n }\n request['tpTriggerPx'] = this.priceToPrecision(symbol, takeProfitTriggerPrice);\n const takeProfitLimitPrice = this.safeValueN(takeProfit, ['price', 'takeProfitPrice', 'tpOrdPx']);\n const takeProfitOrderType = this.safeString(takeProfit, 'type');\n if (takeProfitOrderType !== undefined) {\n const takeProfitLimitOrderType = (takeProfitOrderType === 'limit');\n const takeProfitMarketOrderType = (takeProfitOrderType === 'market');\n if ((!takeProfitLimitOrderType) && (!takeProfitMarketOrderType)) {\n throw new InvalidParamsError('createOrder() params[\"takeProfit\"][\"type\"] must be either \"limit\" or \"market\"').exchange(this.id);\n }\n else if (takeProfitLimitOrderType) {\n if (takeProfitLimitPrice === undefined) {\n throw new InvalidParamsError('createOrder() requires a limit price in params[\"takeProfit\"][\"price\"] or params[\"takeProfit\"][\"tpOrdPx\"] for a take profit limit order').exchange(this.id);\n }\n else {\n request['tpOrdPx'] = this.priceToPrecision(symbol, takeProfitLimitPrice);\n }\n }\n else if (takeProfitOrderType === 'market') {\n request['tpOrdPx'] = '-1';\n }\n }\n else if (takeProfitLimitPrice !== undefined) {\n request['tpOrdPx'] = this.priceToPrecision(symbol, takeProfitLimitPrice); // limit tp order\n }\n else {\n request['tpOrdPx'] = '-1'; // market tp order\n }\n const takeProfitTriggerPriceType = this.safeString2(takeProfit, 'triggerPriceType', 'tpTriggerPxType', 'last');\n if (takeProfitTriggerPriceType !== undefined) {\n if ((takeProfitTriggerPriceType !== 'last') && (takeProfitTriggerPriceType !== 'index') && (takeProfitTriggerPriceType !== 'mark')) {\n throw new InvalidParamsError('createOrder() take profit trigger price type must be one of \"last\", \"index\" or \"mark\"').exchange(this.id);\n }\n request['tpTriggerPxType'] = takeProfitTriggerPriceType;\n }\n }\n }\n else if (trigger) {\n request['ordType'] = 'trigger';\n request['triggerPx'] = this.priceToPrecision(symbol, triggerPrice);\n request['orderPx'] = isMarketOrder ? '-1' : this.priceToPrecision(symbol, price);\n }\n else if (conditional) {\n request['ordType'] = 'conditional';\n const twoWayCondition = ((takeProfitPrice !== undefined) && (stopLossPrice !== undefined));\n // if TP and SL are sent together\n // as ordType 'conditional' only stop-loss order will be applied\n if (twoWayCondition) {\n request['ordType'] = 'oco';\n }\n if (takeProfitPrice !== undefined) {\n request['tpTriggerPx'] = this.priceToPrecision(symbol, takeProfitPrice);\n request['tpOrdPx'] = (tpOrdPx === undefined) ? '-1' : this.priceToPrecision(symbol, tpOrdPx);\n request['tpTriggerPxType'] = tpTriggerPxType;\n }\n if (stopLossPrice !== undefined) {\n request['slTriggerPx'] = this.priceToPrecision(symbol, stopLossPrice);\n request['slOrdPx'] = (slOrdPx === undefined) ? '-1' : this.priceToPrecision(symbol, slOrdPx);\n request['slTriggerPxType'] = slTriggerPxType;\n }\n }\n if (clientOrderId === undefined) {\n const brokerId = this.safeString(this.options, 'brokerId');\n if (brokerId !== undefined) {\n request['clOrdId'] = brokerId + this.uuid16();\n request['tag'] = brokerId;\n }\n }\n else {\n request['clOrdId'] = clientOrderId;\n params = this.omit(params, ['clOrdId', 'clientOrderId']);\n }\n return this.extend(request, params);\n }\n async createOrder(symbol, type, side, amount, price = undefined, params = {}) {\n /**\n * @method\n * @name okx#createOrder\n * @description create a trade order\n * @see https://www.okx.com/docs-v5/en/#order-book-trading-trade-post-place-order\n * @see https://www.okx.com/docs-v5/en/#order-book-trading-trade-post-place-multiple-orders\n * @see https://www.okx.com/docs-v5/en/#order-book-trading-algo-trading-post-place-algo-order\n * @param {string} symbol unified symbol of the market to create an order in\n * @param {string} type 'market' or 'limit'\n * @param {string} side 'buy' or 'sell'\n * @param {float} amount how much of currency you want to trade in units of base currency\n * @param {float} [price] the price at which the order is to be fullfilled, in units of the quote currency, ignored in market orders\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {bool} [params.reduceOnly] a mark to reduce the position size for margin, swap and future orders\n * @param {bool} [params.postOnly] true to place a post only order\n * @param {object} [params.takeProfit] *takeProfit object in params* containing the triggerPrice at which the attached take profit order will be triggered (perpetual swap markets only)\n * @param {float} [params.takeProfit.triggerPrice] take profit trigger price\n * @param {float} [params.takeProfit.price] used for take profit limit orders, not used for take profit market price orders\n * @param {string} [params.takeProfit.type] 'market' or 'limit' used to specify the take profit price type\n * @param {object} [params.stopLoss] *stopLoss object in params* containing the triggerPrice at which the attached stop loss order will be triggered (perpetual swap markets only)\n * @param {float} [params.stopLoss.triggerPrice] stop loss trigger price\n * @param {float} [params.stopLoss.price] used for stop loss limit orders, not used for stop loss market price orders\n * @param {string} [params.stopLoss.type] 'market' or 'limit' used to specify the stop loss price type\n * @param {string} [params.positionSide] if position mode is one-way: set to 'net', if position mode is hedge-mode: set to 'long' or 'short'\n * @param {string} [params.trailingPercent] the percent to trail away from the current market price\n * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n await this.loadMarkets();\n const market = this.market(symbol);\n let request = this.createOrderRequest(symbol, type, side, amount, price, params);\n let method = this.safeString(this.options, 'createOrder', 'privatePostTradeBatchOrders');\n const requestOrdType = this.safeString(request, 'ordType');\n if ((requestOrdType === 'trigger') || (requestOrdType === 'conditional') || (requestOrdType === 'move_order_stop') || (type === 'move_order_stop') || (type === 'oco') || (type === 'iceberg') || (type === 'twap')) {\n method = 'privatePostTradeOrderAlgo';\n }\n if ((method !== 'privatePostTradeOrder') && (method !== 'privatePostTradeOrderAlgo') && (method !== 'privatePostTradeBatchOrders')) {\n throw new InternalError()\n .addMessage('createOrder() this.options[\"createOrder\"] must be either privatePostTradeBatchOrders or privatePostTradeOrder or privatePostTradeOrderAlgo')\n .exchange(this.id);\n }\n if (method === 'privatePostTradeBatchOrders') {\n // keep the request body the same\n // submit a single order in an array to the batch order endpoint\n // because it has a lower ratelimit\n request = [request];\n }\n let response = undefined;\n if (method === 'privatePostTradeOrder') {\n response = await this.privatePostTradeOrder(request);\n }\n else if (method === 'privatePostTradeOrderAlgo') {\n response = await this.privatePostTradeOrderAlgo(request);\n }\n else {\n response = await this.privatePostTradeBatchOrders(request);\n }\n const data = this.safeValue(response, 'data', []);\n const first = this.safeValue(data, 0);\n const order = this.parseOrder(first, market);\n order['type'] = type;\n order['side'] = side;\n return order;\n }\n async createOrders(orders, params = {}) {\n /**\n * @method\n * @name okx#createOrders\n * @description create a list of trade orders\n * @see https://www.okx.com/docs-v5/en/#order-book-trading-trade-post-place-multiple-orders\n * @param {Array} orders list of orders to create, each object should contain the parameters required by createOrder, namely symbol, type, side, amount, price and params\n * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n await this.loadMarkets();\n const ordersRequests = [];\n for (let i = 0; i < orders.length; i++) {\n const rawOrder = orders[i];\n const marketId = this.safeString(rawOrder, 'symbol');\n const type = this.safeString(rawOrder, 'type');\n const side = this.safeString(rawOrder, 'side');\n const amount = this.safeValue(rawOrder, 'amount');\n const price = this.safeValue(rawOrder, 'price');\n const orderParams = this.safeValue(rawOrder, 'params', {});\n const extendedParams = this.extend(orderParams, params); // the request does not accept extra params since it's a list, so we're extending each order with the common params\n const orderRequest = this.createOrderRequest(marketId, type, side, amount, price, extendedParams);\n ordersRequests.push(orderRequest);\n }\n const response = await this.privatePostTradeBatchOrders(ordersRequests);\n // {\n // \"code\": \"0\",\n // \"data\": [\n // {\n // \"clOrdId\": \"e847386590ce4dBCc7f2a1b4c4509f82\",\n // \"ordId\": \"636305438765568000\",\n // \"sCode\": \"0\",\n // \"sMsg\": \"Order placed\",\n // \"tag\": \"e847386590ce4dBC\"\n // },\n // {\n // \"clOrdId\": \"e847386590ce4dBC0b9993fe642d8f62\",\n // \"ordId\": \"636305438765568001\",\n // \"sCode\": \"0\",\n // \"sMsg\": \"Order placed\",\n // \"tag\": \"e847386590ce4dBC\"\n // }\n // ],\n // \"inTime\": \"1697979038584486\",\n // \"msg\": \"\",\n // \"outTime\": \"1697979038586493\"\n // }\n const data = this.safeValue(response, 'data', []);\n return this.parseOrders(data);\n }\n editOrderRequest(id, symbol, type, side, amount = undefined, price = undefined, params = {}) {\n const market = this.market(symbol);\n const request = {\n 'instId': market['id'],\n };\n let isAlgoOrder = undefined;\n if ((type === 'trigger') || (type === 'conditional') || (type === 'move_order_stop') || (type === 'oco') || (type === 'iceberg') || (type === 'twap')) {\n isAlgoOrder = true;\n }\n const clientOrderId = this.safeString2(params, 'clOrdId', 'clientOrderId');\n if (clientOrderId !== undefined) {\n if (isAlgoOrder) {\n request['algoClOrdId'] = clientOrderId;\n }\n else {\n request['clOrdId'] = clientOrderId;\n }\n }\n else {\n if (isAlgoOrder) {\n request['algoId'] = id;\n }\n else {\n request['ordId'] = id;\n }\n }\n let stopLossTriggerPrice = this.safeValue2(params, 'stopLossPrice', 'newSlTriggerPx');\n let stopLossPrice = this.safeValue(params, 'newSlOrdPx');\n const stopLossTriggerPriceType = this.safeString(params, 'newSlTriggerPxType', 'last');\n let takeProfitTriggerPrice = this.safeValue2(params, 'takeProfitPrice', 'newTpTriggerPx');\n let takeProfitPrice = this.safeValue(params, 'newTpOrdPx');\n const takeProfitTriggerPriceType = this.safeString(params, 'newTpTriggerPxType', 'last');\n const stopLoss = this.safeValue(params, 'stopLoss');\n const takeProfit = this.safeValue(params, 'takeProfit');\n const stopLossDefined = (stopLoss !== undefined);\n const takeProfitDefined = (takeProfit !== undefined);\n if (isAlgoOrder) {\n if ((stopLossTriggerPrice === undefined) && (takeProfitTriggerPrice === undefined)) {\n throw new InvalidParamsError('editOrder() requires a stopLossPrice or takeProfitPrice parameter for editing an algo order').exchange(this.id);\n }\n if (stopLossTriggerPrice !== undefined) {\n if (stopLossPrice === undefined) {\n throw new InvalidParamsError('editOrder() requires a newSlOrdPx parameter for editing an algo order').exchange(this.id);\n }\n request['newSlTriggerPx'] = this.priceToPrecision(symbol, stopLossTriggerPrice);\n request['newSlOrdPx'] = (type === 'market') ? '-1' : this.priceToPrecision(symbol, stopLossPrice);\n request['newSlTriggerPxType'] = stopLossTriggerPriceType;\n }\n if (takeProfitTriggerPrice !== undefined) {\n if (takeProfitPrice === undefined) {\n throw new InvalidParamsError('editOrder() requires a newTpOrdPx parameter for editing an algo order').exchange(this.id);\n }\n request['newTpTriggerPx'] = this.priceToPrecision(symbol, takeProfitTriggerPrice);\n request['newTpOrdPx'] = (type === 'market') ? '-1' : this.priceToPrecision(symbol, takeProfitPrice);\n request['newTpTriggerPxType'] = takeProfitTriggerPriceType;\n }\n }\n else {\n if (stopLossTriggerPrice !== undefined) {\n request['newSlTriggerPx'] = this.priceToPrecision(symbol, stopLossTriggerPrice);\n request['newSlOrdPx'] = (type === 'market') ? '-1' : this.priceToPrecision(symbol, stopLossPrice);\n request['newSlTriggerPxType'] = stopLossTriggerPriceType;\n }\n if (takeProfitTriggerPrice !== undefined) {\n request['newTpTriggerPx'] = this.priceToPrecision(symbol, takeProfitTriggerPrice);\n request['newTpOrdPx'] = (type === 'market') ? '-1' : this.priceToPrecision(symbol, takeProfitPrice);\n request['newTpTriggerPxType'] = takeProfitTriggerPriceType;\n }\n if (stopLossDefined) {\n stopLossTriggerPrice = this.safeValue(stopLoss, 'triggerPrice');\n stopLossPrice = this.safeValue(stopLoss, 'price');\n const stopLossType = this.safeString(stopLoss, 'type');\n request['newSlTriggerPx'] = this.priceToPrecision(symbol, stopLossTriggerPrice);\n request['newSlOrdPx'] = (stopLossType === 'market') ? '-1' : this.priceToPrecision(symbol, stopLossPrice);\n request['newSlTriggerPxType'] = stopLossTriggerPriceType;\n }\n if (takeProfitDefined) {\n takeProfitTriggerPrice = this.safeValue(takeProfit, 'triggerPrice');\n takeProfitPrice = this.safeValue(takeProfit, 'price');\n const takeProfitType = this.safeString(takeProfit, 'type');\n request['newTpTriggerPx'] = this.priceToPrecision(symbol, takeProfitTriggerPrice);\n request['newTpOrdPx'] = (takeProfitType === 'market') ? '-1' : this.priceToPrecision(symbol, takeProfitPrice);\n request['newTpTriggerPxType'] = takeProfitTriggerPriceType;\n }\n }\n if (amount !== undefined) {\n request['newSz'] = this.amountToPrecision(symbol, amount);\n }\n if (!isAlgoOrder) {\n if (price !== undefined) {\n request['newPx'] = this.priceToPrecision(symbol, price);\n }\n }\n params = this.omit(params, ['clOrdId', 'clientOrderId', 'takeProfitPrice', 'stopLossPrice', 'stopLoss', 'takeProfit']);\n return this.extend(request, params);\n }\n async editOrder(id, symbol, type, side, amount = undefined, price = undefined, params = {}) {\n /**\n * @method\n * @name okx#editOrder\n * @description edit a trade order\n * @see https://www.okx.com/docs-v5/en/#order-book-trading-trade-post-amend-order\n * @see https://www.okx.com/docs-v5/en/#order-book-trading-algo-trading-post-amend-algo-order\n * @param {string} id order id\n * @param {string} symbol unified symbol of the market to create an order in\n * @param {string} type 'market' or 'limit'\n * @param {string} side 'buy' or 'sell'\n * @param {float} amount how much of the currency you want to trade in units of the base currency\n * @param {float} [price] the price at which the order is to be fullfilled, in units of the quote currency, ignored in market orders\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {string} [params.clientOrderId] client order id, uses id if not passed\n * @param {float} [params.stopLossPrice] stop loss trigger price\n * @param {float} [params.newSlOrdPx] the stop loss order price, set to stopLossPrice if the type is market\n * @param {string} [params.newSlTriggerPxType] 'last', 'index' or 'mark' used to specify the stop loss trigger price type, default is 'last'\n * @param {float} [params.takeProfitPrice] take profit trigger price\n * @param {float} [params.newTpOrdPx] the take profit order price, set to takeProfitPrice if the type is market\n * @param {string} [params.newTpTriggerPxType] 'last', 'index' or 'mark' used to specify the take profit trigger price type, default is 'last'\n * @param {object} [params.stopLoss] *stopLoss object in params* containing the triggerPrice at which the attached stop loss order will be triggered\n * @param {float} [params.stopLoss.triggerPrice] stop loss trigger price\n * @param {float} [params.stopLoss.price] used for stop loss limit orders, not used for stop loss market price orders\n * @param {string} [params.stopLoss.type] 'market' or 'limit' used to specify the stop loss price type\n * @param {object} [params.takeProfit] *takeProfit object in params* containing the triggerPrice at which the attached take profit order will be triggered\n * @param {float} [params.takeProfit.triggerPrice] take profit trigger price\n * @param {float} [params.takeProfit.price] used for take profit limit orders, not used for take profit market price orders\n * @param {string} [params.takeProfit.type] 'market' or 'limit' used to specify the take profit price type\n * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n await this.loadMarkets();\n const market = this.market(symbol);\n const request = this.editOrderRequest(id, symbol, type, side, amount, price, params);\n let isAlgoOrder = undefined;\n if ((type === 'trigger') || (type === 'conditional') || (type === 'move_order_stop') || (type === 'oco') || (type === 'iceberg') || (type === 'twap')) {\n isAlgoOrder = true;\n }\n let response = undefined;\n if (isAlgoOrder) {\n response = await this.privatePostTradeAmendAlgos(this.extend(request, params));\n }\n else {\n response = await this.privatePostTradeAmendOrder(this.extend(request, params));\n }\n //\n // {\n // \"code\": \"0\",\n // \"data\": [\n // {\n // \"clOrdId\": \"e847386590ce4dBCc1a045253497a547\",\n // \"ordId\": \"559176536793178112\",\n // \"reqId\": \"\",\n // \"sCode\": \"0\",\n // \"sMsg\": \"\"\n // }\n // ],\n // \"msg\": \"\"\n // }\n //\n const data = this.safeValue(response, 'data', []);\n const first = this.safeValue(data, 0);\n const order = this.parseOrder(first, market);\n order['type'] = type;\n order['side'] = side;\n return order;\n }\n async cancelOrder(id, symbol = undefined, params = {}) {\n /**\n * @method\n * @name okx#cancelOrder\n * @description cancels an open order\n * @see https://www.okx.com/docs-v5/en/#order-book-trading-trade-post-cancel-order\n * @see https://www.okx.com/docs-v5/en/#order-book-trading-algo-trading-post-cancel-algo-order\n * @param {string} id order id\n * @param {string} symbol unified symbol of the market the order was made in\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {boolean} [params.trigger] true if trigger orders\n * @param {boolean} [params.trailing] set to true if you want to cancel a trailing order\n * @returns {object} An [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n if (symbol === undefined) {\n throw new InvalidParamsError('cancelOrder() requires a symbol argument').exchange(this.id);\n }\n const stop = this.safeValue2(params, 'stop', 'trigger');\n const trailing = this.safeBool(params, 'trailing', false);\n if (stop || trailing) {\n const orderInner = await this.cancelOrders([id], symbol, params);\n return this.safeValue(orderInner, 0);\n }\n await this.loadMarkets();\n const market = this.market(symbol);\n const request = {\n 'instId': market['id'],\n // 'ordId': id, // either ordId or clOrdId is required\n // 'clOrdId': clientOrderId,\n };\n const clientOrderId = this.safeString2(params, 'clOrdId', 'clientOrderId');\n if (clientOrderId !== undefined) {\n request['clOrdId'] = clientOrderId;\n }\n else {\n request['ordId'] = id;\n }\n const query = this.omit(params, ['clOrdId', 'clientOrderId']);\n const response = await this.privatePostTradeCancelOrder(this.extend(request, query));\n // {\"code\":\"0\",\"data\":[{\"clOrdId\":\"\",\"ordId\":\"317251910906576896\",\"sCode\":\"0\",\"sMsg\":\"\"}],\"msg\":\"\"}\n const data = this.safeValue(response, 'data', []);\n const order = this.safeValue(data, 0);\n return this.parseOrder(order, market);\n }\n parseIds(ids) {\n /**\n * @ignore\n * @method\n * @name okx#parseIds\n * @param {string[]|string} ids order ids\n * @returns {string[]} list of order ids\n */\n if ((ids !== undefined) && typeof ids === 'string') {\n return ids.split(',');\n }\n else {\n return ids;\n }\n }\n async cancelOrders(ids, symbol = undefined, params = {}) {\n /**\n * @method\n * @name okx#cancelOrders\n * @description cancel multiple orders\n * @see https://www.okx.com/docs-v5/en/#order-book-trading-trade-post-cancel-multiple-orders\n * @see https://www.okx.com/docs-v5/en/#order-book-trading-algo-trading-post-cancel-algo-order\n * @param {string[]} ids order ids\n * @param {string} symbol unified market symbol\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {boolean} [params.trigger] whether the order is a stop/trigger order\n * @param {boolean} [params.trailing] set to true if you want to cancel trailing orders\n * @returns {object} an list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n // TODO : the original endpoint signature differs, according to that you can skip individual symbol and assign ids in batch. At this moment, `params` is not being used too.\n if (symbol === undefined) {\n throw new InvalidParamsError('cancelOrders() requires a symbol argument').exchange(this.id);\n }\n await this.loadMarkets();\n const market = this.market(symbol);\n const request = [];\n const options = this.safeValue(this.options, 'cancelOrders', {});\n const defaultMethod = this.safeString(options, 'method', 'privatePostTradeCancelBatchOrders');\n let method = this.safeString(params, 'method', defaultMethod);\n const clientOrderIds = this.parseIds(this.safeValue2(params, 'clOrdId', 'clientOrderId'));\n const algoIds = this.parseIds(this.safeValue(params, 'algoId'));\n const stop = this.safeValue2(params, 'stop', 'trigger');\n const trailing = this.safeBool(params, 'trailing', false);\n if (stop || trailing) {\n method = 'privatePostTradeCancelAlgos';\n }\n if (clientOrderIds === undefined) {\n ids = this.parseIds(ids);\n if (algoIds !== undefined) {\n for (let i = 0; i < algoIds.length; i++) {\n request.push({\n 'algoId': algoIds[i],\n 'instId': market['id'],\n });\n }\n }\n for (let i = 0; i < ids.length; i++) {\n if (trailing || stop) {\n request.push({\n 'algoId': ids[i],\n 'instId': market['id'],\n });\n }\n else {\n request.push({\n 'ordId': ids[i],\n 'instId': market['id'],\n });\n }\n }\n }\n else {\n for (let i = 0; i < clientOrderIds.length; i++) {\n request.push({\n 'instId': market['id'],\n 'clOrdId': clientOrderIds[i],\n });\n }\n }\n let response = undefined;\n if (method === 'privatePostTradeCancelAlgos') {\n response = await this.privatePostTradeCancelAlgos(request); // * dont extend with params, otherwise ARRAY will be turned into OBJECT\n }\n else {\n response = await this.privatePostTradeCancelBatchOrders(request); // * dont extend with params, otherwise ARRAY will be turned into OBJECT\n }\n //\n // {\n // \"code\": \"0\",\n // \"data\": [\n // {\n // \"clOrdId\": \"e123456789ec4dBC1123456ba123b45e\",\n // \"ordId\": \"405071912345641543\",\n // \"sCode\": \"0\",\n // \"sMsg\": \"\"\n // },\n // ...\n // ],\n // \"msg\": \"\"\n // }\n //\n // Algo order\n //\n // {\n // \"code\": \"0\",\n // \"data\": [\n // {\n // \"algoId\": \"431375349042380800\",\n // \"sCode\": \"0\",\n // \"sMsg\": \"\"\n // }\n // ],\n // \"msg\": \"\"\n // }\n //\n const ordersData = this.safeValue(response, 'data', []);\n return this.parseOrders(ordersData, market, undefined, undefined, params);\n }\n parseOrderStatus(status) {\n const statuses = {\n 'canceled': 'canceled',\n 'order_failed': 'canceled',\n 'live': 'open',\n 'partially_filled': 'open',\n 'filled': 'closed',\n 'effective': 'closed',\n };\n return this.safeString(statuses, status, status);\n }\n parseOrder(order, market = undefined) {\n //\n // createOrder\n //\n // {\n // \"clOrdId\": \"oktswap6\",\n // \"ordId\": \"312269865356374016\",\n // \"tag\": \"\",\n // \"sCode\": \"0\",\n // \"sMsg\": \"\"\n // }\n //\n // editOrder\n //\n // {\n // \"clOrdId\": \"e847386590ce4dBCc1a045253497a547\",\n // \"ordId\": \"559176536793178112\",\n // \"reqId\": \"\",\n // \"sCode\": \"0\",\n // \"sMsg\": \"\"\n // }\n //\n // Spot and Swap fetchOrder, fetchOpenOrders\n //\n // {\n // \"accFillSz\": \"0\",\n // \"avgPx\": \"\",\n // \"cTime\": \"1621910749815\",\n // \"category\": \"normal\",\n // \"ccy\": \"\",\n // \"clOrdId\": \"\",\n // \"fee\": \"0\",\n // \"feeCcy\": \"ETH\",\n // \"fillPx\": \"\",\n // \"fillSz\": \"0\",\n // \"fillTime\": \"\",\n // \"instId\": \"ETH-USDT\",\n // \"instType\": \"SPOT\",\n // \"lever\": \"\",\n // \"ordId\": \"317251910906576896\",\n // \"ordType\": \"limit\",\n // \"pnl\": \"0\",\n // \"posSide\": \"net\",\n // \"px\": \"2000\",\n // \"rebate\": \"0\",\n // \"rebateCcy\": \"USDT\",\n // \"side\": \"buy\",\n // \"slOrdPx\": \"\",\n // \"slTriggerPx\": \"\",\n // \"state\": \"live\",\n // \"sz\": \"0.001\",\n // \"tag\": \"\",\n // \"tdMode\": \"cash\",\n // \"tpOrdPx\": \"\",\n // \"tpTriggerPx\": \"\",\n // \"tradeId\": \"\",\n // \"uTime\": \"1621910749815\"\n // }\n //\n // Algo Order fetchOpenOrders, fetchCanceledOrders, fetchClosedOrders\n //\n // {\n // \"activePx\": \"\",\n // \"activePxType\": \"\",\n // \"actualPx\": \"\",\n // \"actualSide\": \"buy\",\n // \"actualSz\": \"0\",\n // \"algoId\": \"431375349042380800\",\n // \"cTime\": \"1649119897778\",\n // \"callbackRatio\": \"\",\n // \"callbackSpread\": \"\",\n // \"ccy\": \"\",\n // \"ctVal\": \"0.01\",\n // \"instId\": \"BTC-USDT-SWAP\",\n // \"instType\": \"SWAP\",\n // \"last\": \"46538.9\",\n // \"lever\": \"125\",\n // \"moveTriggerPx\": \"\",\n // \"notionalUsd\": \"467.059\",\n // \"ordId\": \"\",\n // \"ordPx\": \"50000\",\n // \"ordType\": \"trigger\",\n // \"posSide\": \"long\",\n // \"pxLimit\": \"\",\n // \"pxSpread\": \"\",\n // \"pxVar\": \"\",\n // \"side\": \"buy\",\n // \"slOrdPx\": \"\",\n // \"slTriggerPx\": \"\",\n // \"slTriggerPxType\": \"\",\n // \"state\": \"live\",\n // \"sz\": \"1\",\n // \"szLimit\": \"\",\n // \"tag\": \"\",\n // \"tdMode\": \"isolated\",\n // \"tgtCcy\": \"\",\n // \"timeInterval\": \"\",\n // \"tpOrdPx\": \"\",\n // \"tpTriggerPx\": \"\",\n // \"tpTriggerPxType\": \"\",\n // \"triggerPx\": \"50000\",\n // \"triggerPxType\": \"last\",\n // \"triggerTime\": \"\",\n // \"uly\": \"BTC-USDT\"\n // }\n //\n const scode = this.safeString(order, 'sCode');\n if ((scode !== undefined) && (scode !== '0')) {\n return this.safeOrder({\n 'id': this.safeString(order, 'ordId'),\n 'clientOrderId': this.safeString(order, 'clOrdId'),\n 'status': 'rejected',\n 'info': order,\n });\n }\n const id = this.safeString2(order, 'algoId', 'ordId');\n const timestamp = this.safeInteger(order, 'cTime');\n const lastUpdateTimestamp = this.safeInteger(order, 'uTime');\n const lastTradeTimestamp = this.safeInteger(order, 'fillTime');\n const side = this.safeString(order, 'side');\n let type = this.safeString(order, 'ordType');\n let postOnly = undefined;\n let timeInForce = undefined;\n if (type === 'post_only') {\n postOnly = true;\n type = 'limit';\n }\n else if (type === 'fok') {\n timeInForce = 'FOK';\n type = 'limit';\n }\n else if (type === 'ioc') {\n timeInForce = 'IOC';\n type = 'limit';\n }\n const marketId = this.safeString(order, 'instId');\n market = this.safeMarket(marketId, market);\n const symbol = this.safeSymbol(marketId, market, '-');\n const filled = this.safeString(order, 'accFillSz');\n const price = this.safeString2(order, 'px', 'ordPx');\n const average = this.safeString(order, 'avgPx');\n const status = this.parseOrderStatus(this.safeString(order, 'state'));\n const feeCostString = this.safeString(order, 'fee');\n let amount = undefined;\n let cost = undefined;\n // spot market buy: \"sz\" can refer either to base currency units or to quote currency units\n // see documentation: https://www.okx.com/docs-v5/en/#rest-api-trade-place-order\n const defaultTgtCcy = this.safeString(this.options, 'tgtCcy', 'base_ccy');\n const tgtCcy = this.safeString(order, 'tgtCcy', defaultTgtCcy);\n const instType = this.safeString(order, 'instType');\n if ((side === 'buy') && (type === 'market') && (instType === 'SPOT') && (tgtCcy === 'quote_ccy')) {\n // \"sz\" refers to the cost\n cost = this.safeString(order, 'sz');\n }\n else {\n // \"sz\" refers to the trade currency amount\n amount = this.safeString(order, 'sz');\n }\n let fee = undefined;\n if (feeCostString !== undefined) {\n const feeCostSigned = Precise.stringNeg(feeCostString);\n const feeCurrencyId = this.safeString(order, 'feeCcy');\n const feeCurrencyCode = this.safeCurrencyCode(feeCurrencyId);\n fee = {\n 'cost': this.parseNumber(feeCostSigned),\n 'currency': feeCurrencyCode,\n };\n }\n let clientOrderId = this.safeString(order, 'clOrdId');\n if ((clientOrderId !== undefined) && (clientOrderId.length < 1)) {\n clientOrderId = undefined; // fix empty clientOrderId string\n }\n const stopLossPrice = this.safeNumber2(order, 'slTriggerPx', 'slOrdPx');\n const takeProfitPrice = this.safeNumber2(order, 'tpTriggerPx', 'tpOrdPx');\n const stopPrice = this.safeNumberN(order, ['triggerPx', 'moveTriggerPx']);\n const reduceOnlyRaw = this.safeString(order, 'reduceOnly');\n let reduceOnly = false;\n if (reduceOnly !== undefined) {\n reduceOnly = (reduceOnlyRaw === 'true');\n }\n return this.safeOrder({\n 'info': order,\n 'id': id,\n 'clientOrderId': clientOrderId,\n 'timestamp': timestamp,\n 'datetime': this.iso8601(timestamp),\n 'lastTradeTimestamp': lastTradeTimestamp,\n 'lastUpdateTimestamp': lastUpdateTimestamp,\n 'symbol': symbol,\n 'type': type,\n 'timeInForce': timeInForce,\n 'postOnly': postOnly,\n 'side': side,\n 'price': price,\n 'stopLossPrice': stopLossPrice,\n 'takeProfitPrice': takeProfitPrice,\n 'stopPrice': stopPrice,\n 'triggerPrice': stopPrice,\n 'average': average,\n 'cost': cost,\n 'amount': amount,\n 'filled': filled,\n 'remaining': undefined,\n 'status': status,\n 'fee': fee,\n 'trades': undefined,\n 'reduceOnly': reduceOnly,\n }, market);\n }\n async fetchOrder(id, symbol = undefined, params = {}) {\n /**\n * @method\n * @name okx#fetchOrder\n * @description fetch an order by the id\n * @see https://www.okx.com/docs-v5/en/#order-book-trading-trade-get-order-details\n * @see https://www.okx.com/docs-v5/en/#order-book-trading-algo-trading-get-algo-order-details\n * @param {string} id the order id\n * @param {string} symbol unified market symbol\n * @param {object} [params] extra and exchange specific parameters\n * @param {boolean} [params.trigger] true if fetching trigger orders\n * @returns [an order structure]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n if (symbol === undefined) {\n throw new InvalidParamsError('fetchOrder() requires a symbol argument').exchange(this.id);\n }\n await this.loadMarkets();\n const market = this.market(symbol);\n const request = {\n 'instId': market['id'],\n // 'clOrdId': 'abcdef12345', // optional, [a-z0-9]{1,32}\n // 'ordId': id,\n // 'instType': // spot, swap, futures, margin\n };\n const clientOrderId = this.safeString2(params, 'clOrdId', 'clientOrderId');\n const options = this.safeValue(this.options, 'fetchOrder', {});\n const defaultMethod = this.safeString(options, 'method', 'privateGetTradeOrder');\n let method = this.safeString(params, 'method', defaultMethod);\n const stop = this.safeValue2(params, 'stop', 'trigger');\n if (stop) {\n method = 'privateGetTradeOrderAlgo';\n if (clientOrderId !== undefined) {\n request['algoClOrdId'] = clientOrderId;\n }\n else {\n request['algoId'] = id;\n }\n }\n else {\n if (clientOrderId !== undefined) {\n request['clOrdId'] = clientOrderId;\n }\n else {\n request['ordId'] = id;\n }\n }\n const query = this.omit(params, ['method', 'clOrdId', 'clientOrderId', 'stop', 'trigger']);\n let response = undefined;\n if (method === 'privateGetTradeOrderAlgo') {\n response = await this.privateGetTradeOrderAlgo(this.extend(request, query));\n }\n else {\n response = await this.privateGetTradeOrder(this.extend(request, query));\n }\n //\n // Spot and Swap\n //\n // {\n // \"code\": \"0\",\n // \"data\": [\n // {\n // \"accFillSz\": \"0\",\n // \"avgPx\": \"\",\n // \"cTime\": \"1621910749815\",\n // \"category\": \"normal\",\n // \"ccy\": \"\",\n // \"clOrdId\": \"\",\n // \"fee\": \"0\",\n // \"feeCcy\": \"ETH\",\n // \"fillPx\": \"\",\n // \"fillSz\": \"0\",\n // \"fillTime\": \"\",\n // \"instId\": \"ETH-USDT\",\n // \"instType\": \"SPOT\",\n // \"lever\": \"\",\n // \"ordId\": \"317251910906576896\",\n // \"ordType\": \"limit\",\n // \"pnl\": \"0\",\n // \"posSide\": \"net\",\n // \"px\":\"20 00\",\n // \"rebate\": \"0\",\n // \"rebateCcy\": \"USDT\",\n // \"side\": \"buy\",\n // \"slOrdPx\": \"\",\n // \"slTriggerPx\": \"\",\n // \"state\": \"live\",\n // \"sz\":\"0. 001\",\n // \"tag\": \"\",\n // \"tdMode\": \"cash\",\n // \"tpOrdPx\": \"\",\n // \"tpTriggerPx\": \"\",\n // \"tradeId\": \"\",\n // \"uTime\": \"1621910749815\"\n // }\n // ],\n // \"msg\": \"\"\n // }\n //\n // Algo order\n // {\n // \"code\":\"0\",\n // \"msg\":\"\",\n // \"data\":[\n // {\n // \"instType\":\"FUTURES\",\n // \"instId\":\"BTC-USD-200329\",\n // \"ordId\":\"123445\",\n // \"ccy\":\"BTC\",\n // \"clOrdId\":\"\",\n // \"algoId\":\"1234\",\n // \"sz\":\"999\",\n // \"closeFraction\":\"\",\n // \"ordType\":\"oco\",\n // \"side\":\"buy\",\n // \"posSide\":\"long\",\n // \"tdMode\":\"cross\",\n // \"tgtCcy\": \"\",\n // \"state\":\"effective\",\n // \"lever\":\"20\",\n // \"tpTriggerPx\":\"\",\n // \"tpTriggerPxType\":\"\",\n // \"tpOrdPx\":\"\",\n // \"slTriggerPx\":\"\",\n // \"slTriggerPxType\":\"\",\n // \"triggerPx\":\"99\",\n // \"triggerPxType\":\"last\",\n // \"ordPx\":\"12\",\n // \"actualSz\":\"\",\n // \"actualPx\":\"\",\n // \"actualSide\":\"\",\n // \"pxVar\":\"\",\n // \"pxSpread\":\"\",\n // \"pxLimit\":\"\",\n // \"szLimit\":\"\",\n // \"tag\": \"adadadadad\",\n // \"timeInterval\":\"\",\n // \"callbackRatio\":\"\",\n // \"callbackSpread\":\"\",\n // \"activePx\":\"\",\n // \"moveTriggerPx\":\"\",\n // \"reduceOnly\": \"false\",\n // \"triggerTime\":\"1597026383085\",\n // \"last\": \"16012\",\n // \"failCode\": \"\",\n // \"algoClOrdId\": \"\",\n // \"cTime\":\"1597026383000\"\n // }\n // ]\n // }\n //\n const data = this.safeValue(response, 'data', []);\n const order = this.safeValue(data, 0);\n return this.parseOrder(order, market);\n }\n async fetchOpenOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name okx#fetchOpenOrders\n * @description fetch all unfilled currently open orders\n * @see https://www.okx.com/docs-v5/en/#order-book-trading-trade-get-order-list\n * @see https://www.okx.com/docs-v5/en/#order-book-trading-algo-trading-get-algo-order-list\n * @param {string} symbol unified market symbol\n * @param {int} [since] the earliest time in ms to fetch open orders for\n * @param {int} [limit] the maximum number of open orders structures to retrieve\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {bool} [params.stop] True if fetching trigger or conditional orders\n * @param {string} [params.ordType] \"conditional\", \"oco\", \"trigger\", \"move_order_stop\", \"iceberg\", or \"twap\"\n * @param {string} [params.algoId] Algo ID \"'433845797218942976'\"\n * @param {boolean} [params.paginate] default false, when true will automatically paginate by calling this endpoint multiple times. See in the docs all the [availble parameters](https://github.com/ccxt/ccxt/wiki/Manual#pagination-params)\n * @param {boolean} [params.trailing] set to true if you want to fetch trailing orders\n * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n await this.loadMarkets();\n let paginate = false;\n [paginate, params] = this.handleOptionAndParams(params, 'fetchOpenOrders', 'paginate');\n if (paginate) {\n return await this.fetchPaginatedCallDynamic('fetchOpenOrders', symbol, since, limit, params);\n }\n const request = {\n // 'instType': 'SPOT', // SPOT, MARGIN, SWAP, FUTURES, OPTION\n // 'uly': currency['id'],\n // 'instId': market['id'],\n // 'ordType': 'limit', // market, limit, post_only, fok, ioc, comma-separated, stop orders: conditional, oco, trigger, move_order_stop, iceberg, or twap\n // 'state': 'live', // live, partially_filled\n // 'after': orderId,\n // 'before': orderId,\n // 'limit': limit, // default 100, max 100\n };\n let market = undefined;\n if (symbol !== undefined) {\n market = this.market(symbol);\n request['instId'] = market['id'];\n }\n if (limit !== undefined) {\n request['limit'] = limit; // default 100, max 100\n }\n const options = this.safeValue(this.options, 'fetchOpenOrders', {});\n const algoOrderTypes = this.safeValue(this.options, 'algoOrderTypes', {});\n const defaultMethod = this.safeString(options, 'method', 'privateGetTradeOrdersPending');\n let method = this.safeString(params, 'method', defaultMethod);\n const ordType = this.safeString(params, 'ordType');\n const stop = this.safeValue2(params, 'stop', 'trigger');\n const trailing = this.safeBool(params, 'trailing', false);\n if (trailing || stop || (ordType in algoOrderTypes)) {\n method = 'privateGetTradeOrdersAlgoPending';\n }\n if (trailing) {\n request['ordType'] = 'move_order_stop';\n }\n else if (stop && (ordType === undefined)) {\n request['ordType'] = 'trigger';\n }\n const query = this.omit(params, ['method', 'stop', 'trigger', 'trailing']);\n let response = undefined;\n if (method === 'privateGetTradeOrdersAlgoPending') {\n response = await this.privateGetTradeOrdersAlgoPending(this.extend(request, query));\n }\n else {\n response = await this.privateGetTradeOrdersPending(this.extend(request, query));\n }\n //\n // {\n // \"code\": \"0\",\n // \"data\": [\n // {\n // \"accFillSz\": \"0\",\n // \"avgPx\": \"\",\n // \"cTime\": \"1621910749815\",\n // \"category\": \"normal\",\n // \"ccy\": \"\",\n // \"clOrdId\": \"\",\n // \"fee\": \"0\",\n // \"feeCcy\": \"ETH\",\n // \"fillPx\": \"\",\n // \"fillSz\": \"0\",\n // \"fillTime\": \"\",\n // \"instId\": \"ETH-USDT\",\n // \"instType\": \"SPOT\",\n // \"lever\": \"\",\n // \"ordId\": \"317251910906576896\",\n // \"ordType\": \"limit\",\n // \"pnl\": \"0\",\n // \"posSide\": \"net\",\n // \"px\":\"20 00\",\n // \"rebate\": \"0\",\n // \"rebateCcy\": \"USDT\",\n // \"side\": \"buy\",\n // \"slOrdPx\": \"\",\n // \"slTriggerPx\": \"\",\n // \"state\": \"live\",\n // \"sz\":\"0. 001\",\n // \"tag\": \"\",\n // \"tdMode\": \"cash\",\n // \"tpOrdPx\": \"\",\n // \"tpTriggerPx\": \"\",\n // \"tradeId\": \"\",\n // \"uTime\": \"1621910749815\"\n // }\n // ],\n // \"msg\":\"\"\n // }\n //\n // Algo order\n //\n // {\n // \"code\": \"0\",\n // \"data\": [\n // {\n // \"activePx\": \"\",\n // \"activePxType\": \"\",\n // \"actualPx\": \"\",\n // \"actualSide\": \"buy\",\n // \"actualSz\": \"0\",\n // \"algoId\": \"431375349042380800\",\n // \"cTime\": \"1649119897778\",\n // \"callbackRatio\": \"\",\n // \"callbackSpread\": \"\",\n // \"ccy\": \"\",\n // \"ctVal\": \"0.01\",\n // \"instId\": \"BTC-USDT-SWAP\",\n // \"instType\": \"SWAP\",\n // \"last\": \"46538.9\",\n // \"lever\": \"125\",\n // \"moveTriggerPx\": \"\",\n // \"notionalUsd\": \"467.059\",\n // \"ordId\": \"\",\n // \"ordPx\": \"50000\",\n // \"ordType\": \"trigger\",\n // \"posSide\": \"long\",\n // \"pxLimit\": \"\",\n // \"pxSpread\": \"\",\n // \"pxVar\": \"\",\n // \"side\": \"buy\",\n // \"slOrdPx\": \"\",\n // \"slTriggerPx\": \"\",\n // \"slTriggerPxType\": \"\",\n // \"state\": \"live\",\n // \"sz\": \"1\",\n // \"szLimit\": \"\",\n // \"tag\": \"\",\n // \"tdMode\": \"isolated\",\n // \"tgtCcy\": \"\",\n // \"timeInterval\": \"\",\n // \"tpOrdPx\": \"\",\n // \"tpTriggerPx\": \"\",\n // \"tpTriggerPxType\": \"\",\n // \"triggerPx\": \"50000\",\n // \"triggerPxType\": \"last\",\n // \"triggerTime\": \"\",\n // \"uly\": \"BTC-USDT\"\n // }\n // ],\n // \"msg\": \"\"\n // }\n //\n const data = this.safeValue(response, 'data', []);\n return this.parseOrders(data, market, since, limit);\n }\n async fetchCanceledOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name okx#fetchCanceledOrders\n * @description fetches information on multiple canceled orders made by the user\n * @see https://www.okx.com/docs-v5/en/#order-book-trading-trade-get-order-history-last-7-days\n * @see https://www.okx.com/docs-v5/en/#order-book-trading-algo-trading-get-algo-order-history\n * @param {string} symbol unified market symbol of the market orders were made in\n * @param {int} [since] timestamp in ms of the earliest order, default is undefined\n * @param {int} [limit] max number of orders to return, default is undefined\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {bool} [params.stop] True if fetching trigger or conditional orders\n * @param {string} [params.ordType] \"conditional\", \"oco\", \"trigger\", \"move_order_stop\", \"iceberg\", or \"twap\"\n * @param {string} [params.algoId] Algo ID \"'433845797218942976'\"\n * @param {int} [params.until] timestamp in ms to fetch orders for\n * @param {boolean} [params.trailing] set to true if you want to fetch trailing orders\n * @returns {object} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n await this.loadMarkets();\n const request = {\n // 'instType': type.toUpperCase (), // SPOT, MARGIN, SWAP, FUTURES, OPTION\n // 'uly': currency['id'],\n // 'instId': market['id'],\n // 'ordType': 'limit', // market, limit, post_only, fok, ioc, comma-separated stop orders: conditional, oco, trigger, move_order_stop, iceberg, or twap\n // 'state': 'canceled', // filled, canceled\n // 'after': orderId,\n // 'before': orderId,\n // 'limit': limit, // default 100, max 100\n // 'algoId': \"'433845797218942976'\", // Algo order\n };\n let market = undefined;\n if (symbol !== undefined) {\n market = this.market(symbol);\n request['instId'] = market['id'];\n }\n let type = undefined;\n let query = undefined;\n [type, query] = this.handleMarketTypeAndParams('fetchCanceledOrders', market, params);\n request['instType'] = this.convertToInstrumentType(type);\n if (limit !== undefined) {\n request['limit'] = limit; // default 100, max 100\n }\n request['state'] = 'canceled';\n const options = this.safeValue(this.options, 'fetchCanceledOrders', {});\n const algoOrderTypes = this.safeValue(this.options, 'algoOrderTypes', {});\n const defaultMethod = this.safeString(options, 'method', 'privateGetTradeOrdersHistory');\n let method = this.safeString(params, 'method', defaultMethod);\n const ordType = this.safeString(params, 'ordType');\n const stop = this.safeValue2(params, 'stop', 'trigger');\n const trailing = this.safeBool(params, 'trailing', false);\n if (trailing) {\n method = 'privateGetTradeOrdersAlgoHistory';\n request['ordType'] = 'move_order_stop';\n }\n else if (stop || (ordType in algoOrderTypes)) {\n method = 'privateGetTradeOrdersAlgoHistory';\n const algoId = this.safeString(params, 'algoId');\n if (algoId !== undefined) {\n request['algoId'] = algoId;\n params = this.omit(params, 'algoId');\n }\n if (stop) {\n if (ordType === undefined) {\n throw new InvalidParamsError('fetchCanceledOrders() requires an \"ordType\" string parameter, \"conditional\", \"oco\", \"trigger\", \"move_order_stop\", \"iceberg\", or \"twap\"').exchange(this.id);\n }\n }\n }\n else {\n if (since !== undefined) {\n request['begin'] = since;\n }\n const until = this.safeInteger2(query, 'till', 'until');\n if (until !== undefined) {\n request['end'] = until;\n query = this.omit(query, ['until', 'till']);\n }\n }\n const send = this.omit(query, ['method', 'stop', 'trigger', 'trailing']);\n let response = undefined;\n if (method === 'privateGetTradeOrdersAlgoHistory') {\n response = await this.privateGetTradeOrdersAlgoHistory(this.extend(request, send));\n }\n else {\n response = await this.privateGetTradeOrdersHistory(this.extend(request, send));\n }\n //\n // {\n // \"code\": \"0\",\n // \"data\": [\n // {\n // \"accFillSz\": \"0\",\n // \"avgPx\": \"\",\n // \"cTime\": \"1644037822494\",\n // \"category\": \"normal\",\n // \"ccy\": \"\",\n // \"clOrdId\": \"\",\n // \"fee\": \"0\",\n // \"feeCcy\": \"BTC\",\n // \"fillPx\": \"\",\n // \"fillSz\": \"0\",\n // \"fillTime\": \"\",\n // \"instId\": \"BTC-USDT\",\n // \"instType\": \"SPOT\",\n // \"lever\": \"\",\n // \"ordId\": \"410059580352409602\",\n // \"ordType\": \"limit\",\n // \"pnl\": \"0\",\n // \"posSide\": \"net\",\n // \"px\": \"30000\",\n // \"rebate\": \"0\",\n // \"rebateCcy\": \"USDT\",\n // \"side\": \"buy\",\n // \"slOrdPx\": \"\",\n // \"slTriggerPx\": \"\",\n // \"slTriggerPxType\": \"\",\n // \"source\": \"\",\n // \"state\": \"canceled\",\n // \"sz\": \"0.0005452\",\n // \"tag\": \"\",\n // \"tdMode\": \"cash\",\n // \"tgtCcy\": \"\",\n // \"tpOrdPx\": \"\",\n // \"tpTriggerPx\": \"\",\n // \"tpTriggerPxType\": \"\",\n // \"tradeId\": \"\",\n // \"uTime\": \"1644038165667\"\n // }\n // ],\n // \"msg\": \"\"\n // }\n //\n // Algo order\n //\n // {\n // \"code\": \"0\",\n // \"data\": [\n // {\n // \"activePx\": \"\",\n // \"activePxType\": \"\",\n // \"actualPx\": \"\",\n // \"actualSide\": \"buy\",\n // \"actualSz\": \"0\",\n // \"algoId\": \"433845797218942976\",\n // \"cTime\": \"1649708898523\",\n // \"callbackRatio\": \"\",\n // \"callbackSpread\": \"\",\n // \"ccy\": \"\",\n // \"ctVal\": \"0.01\",\n // \"instId\": \"BTC-USDT-SWAP\",\n // \"instType\": \"SWAP\",\n // \"last\": \"39950.4\",\n // \"lever\": \"125\",\n // \"moveTriggerPx\": \"\",\n // \"notionalUsd\": \"1592.1760000000002\",\n // \"ordId\": \"\",\n // \"ordPx\": \"29000\",\n // \"ordType\": \"trigger\",\n // \"posSide\": \"long\",\n // \"pxLimit\": \"\",\n // \"pxSpread\": \"\",\n // \"pxVar\": \"\",\n // \"side\": \"buy\",\n // \"slOrdPx\": \"\",\n // \"slTriggerPx\": \"\",\n // \"slTriggerPxType\": \"\",\n // \"state\": \"canceled\",\n // \"sz\": \"4\",\n // \"szLimit\": \"\",\n // \"tag\": \"\",\n // \"tdMode\": \"isolated\",\n // \"tgtCcy\": \"\",\n // \"timeInterval\": \"\",\n // \"tpOrdPx\": \"\",\n // \"tpTriggerPx\": \"\",\n // \"tpTriggerPxType\": \"\",\n // \"triggerPx\": \"30000\",\n // \"triggerPxType\": \"last\",\n // \"triggerTime\": \"\",\n // \"uly\": \"BTC-USDT\"\n // },\n // ],\n // \"msg\": \"\"\n // }\n //\n const data = this.safeValue(response, 'data', []);\n return this.parseOrders(data, market, since, limit);\n }\n async fetchClosedOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name okx#fetchClosedOrders\n * @description fetches information on multiple closed orders made by the user\n * @see https://www.okx.com/docs-v5/en/#order-book-trading-trade-get-order-history-last-7-days\n * @see https://www.okx.com/docs-v5/en/#order-book-trading-algo-trading-get-algo-order-history\n * @see https://www.okx.com/docs-v5/en/#order-book-trading-trade-get-order-history-last-3-months\n * @param {string} symbol unified market symbol of the market orders were made in\n * @param {int} [since] the earliest time in ms to fetch orders for\n * @param {int} [limit] the maximum number of order structures to retrieve\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {bool} [params.trigger] True if fetching trigger or conditional orders\n * @param {string} [params.ordType] \"conditional\", \"oco\", \"trigger\", \"move_order_stop\", \"iceberg\", or \"twap\"\n * @param {string} [params.algoId] Algo ID \"'433845797218942976'\"\n * @param {int} [params.until] timestamp in ms to fetch orders for\n * @param {boolean} [params.paginate] default false, when true will automatically paginate by calling this endpoint multiple times. See in the docs all the [availble parameters](https://github.com/ccxt/ccxt/wiki/Manual#pagination-params)\n * @param {string} [params.method] method to be used, either 'privateGetTradeOrdersHistory', 'privateGetTradeOrdersHistoryArchive' or 'privateGetTradeOrdersAlgoHistory' default is 'privateGetTradeOrdersHistory'\n * @param {boolean} [params.trailing] set to true if you want to fetch trailing orders\n * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}\n */\n await this.loadMarkets();\n let paginate = false;\n [paginate, params] = this.handleOptionAndParams(params, 'fetchClosedOrders', 'paginate');\n if (paginate) {\n return await this.fetchPaginatedCallDynamic('fetchClosedOrders', symbol, since, limit, params);\n }\n const request = {\n // 'instType': type.toUpperCase (), // SPOT, MARGIN, SWAP, FUTURES, OPTION\n // 'uly': currency['id'],\n // 'instId': market['id'],\n // 'ordType': 'limit', // market, limit, post_only, fok, ioc, comma-separated stop orders: conditional, oco, trigger, move_order_stop, iceberg, or twap\n // 'state': 'filled', // filled, effective\n // 'after': orderId,\n // 'before': orderId,\n // 'limit': limit, // default 100, max 100\n // 'algoId': \"'433845797218942976'\", // Algo order\n };\n let market = undefined;\n if (symbol !== undefined) {\n market = this.market(symbol);\n request['instId'] = market['id'];\n }\n let type = undefined;\n let query = undefined;\n [type, query] = this.handleMarketTypeAndParams('fetchClosedOrders', market, params);\n request['instType'] = this.convertToInstrumentType(type);\n if (limit !== undefined) {\n request['limit'] = limit; // default 100, max 100\n }\n const options = this.safeDict(this.options, 'fetchClosedOrders', {});\n const algoOrderTypes = this.safeDict(this.options, 'algoOrderTypes', {});\n const defaultMethod = this.safeString(options, 'method', 'privateGetTradeOrdersHistory');\n let method = this.safeString(params, 'method', defaultMethod);\n const ordType = this.safeString(params, 'ordType');\n const stop = this.safeBool2(params, 'stop', 'trigger');\n const trailing = this.safeBool(params, 'trailing', false);\n if (trailing || stop || (ordType in algoOrderTypes)) {\n method = 'privateGetTradeOrdersAlgoHistory';\n request['state'] = 'effective';\n }\n if (trailing) {\n request['ordType'] = 'move_order_stop';\n }\n else if (stop) {\n if (ordType === undefined) {\n request['ordType'] = 'trigger';\n }\n }\n else {\n if (since !== undefined) {\n request['begin'] = since;\n }\n const until = this.safeInteger2(query, 'till', 'until');\n if (until !== undefined) {\n request['end'] = until;\n query = this.omit(query, ['until', 'till']);\n }\n request['state'] = 'filled';\n }\n const send = this.omit(query, ['method', 'stop', 'trigger', 'trailing']);\n let response = undefined;\n if (method === 'privateGetTradeOrdersAlgoHistory') {\n response = await this.privateGetTradeOrdersAlgoHistory(this.extend(request, send));\n }\n else if (method === 'privateGetTradeOrdersHistoryArchive') {\n response = await this.privateGetTradeOrdersHistoryArchive(this.extend(request, send));\n }\n else {\n response = await this.privateGetTradeOrdersHistory(this.extend(request, send));\n }\n //\n // {\n // \"code\": \"0\",\n // \"data\": [\n // {\n // \"accFillSz\": \"0\",\n // \"avgPx\": \"\",\n // \"cTime\": \"1621910749815\",\n // \"category\": \"normal\",\n // \"ccy\": \"\",\n // \"clOrdId\": \"\",\n // \"fee\": \"0\",\n // \"feeCcy\": \"ETH\",\n // \"fillPx\": \"\",\n // \"fillSz\": \"0\",\n // \"fillTime\": \"\",\n // \"instId\": \"ETH-USDT\",\n // \"instType\": \"SPOT\",\n // \"lever\": \"\",\n // \"ordId\": \"317251910906576896\",\n // \"ordType\": \"limit\",\n // \"pnl\": \"0\",\n // \"posSide\": \"net\",\n // \"px\": \"2000\",\n // \"rebate\": \"0\",\n // \"rebateCcy\": \"USDT\",\n // \"side\": \"buy\",\n // \"slOrdPx\": \"\",\n // \"slTriggerPx\": \"\",\n // \"state\": \"live\",\n // \"sz\": \"0.001\",\n // \"tag\": \"\",\n // \"tdMode\": \"cash\",\n // \"tpOrdPx\": \"\",\n // \"tpTriggerPx\": \"\",\n // \"tradeId\": \"\",\n // \"uTime\": \"1621910749815\"\n // }\n // ],\n // \"msg\": \"\"\n // }\n //\n // Algo order\n //\n // {\n // \"code\": \"0\",\n // \"data\": [\n // {\n // \"activePx\": \"\",\n // \"activePxType\": \"\",\n // \"actualPx\": \"\",\n // \"actualSide\": \"buy\",\n // \"actualSz\": \"0\",\n // \"algoId\": \"433845797218942976\",\n // \"cTime\": \"1649708898523\",\n // \"callbackRatio\": \"\",\n // \"callbackSpread\": \"\",\n // \"ccy\": \"\",\n // \"ctVal\": \"0.01\",\n // \"instId\": \"BTC-USDT-SWAP\",\n // \"instType\": \"SWAP\",\n // \"last\": \"39950.4\",\n // \"lever\": \"125\",\n // \"moveTriggerPx\": \"\",\n // \"notionalUsd\": \"1592.1760000000002\",\n // \"ordId\": \"\",\n // \"ordPx\": \"29000\",\n // \"ordType\": \"trigger\",\n // \"posSide\": \"long\",\n // \"pxLimit\": \"\",\n // \"pxSpread\": \"\",\n // \"pxVar\": \"\",\n // \"side\": \"buy\",\n // \"slOrdPx\": \"\",\n // \"slTriggerPx\": \"\",\n // \"slTriggerPxType\": \"\",\n // \"state\": \"effective\",\n // \"sz\": \"4\",\n // \"szLimit\": \"\",\n // \"tag\": \"\",\n // \"tdMode\": \"isolated\",\n // \"tgtCcy\": \"\",\n // \"timeInterval\": \"\",\n // \"tpOrdPx\": \"\",\n // \"tpTriggerPx\": \"\",\n // \"tpTriggerPxType\": \"\",\n // \"triggerPx\": \"30000\",\n // \"triggerPxType\": \"last\",\n // \"triggerTime\": \"\",\n // \"uly\": \"BTC-USDT\"\n // },\n // ],\n // \"msg\": \"\"\n // }\n //\n const data = this.safeValue(response, 'data', []);\n return this.parseOrders(data, market, since, limit);\n }\n async fetchMyTrades(symbol = undefined, since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name okx#fetchMyTrades\n * @description fetch all trades made by the user\n * @see https://www.okx.com/docs-v5/en/#order-book-trading-trade-get-transaction-details-last-3-months\n * @param {string} symbol unified market symbol\n * @param {int} [since] the earliest time in ms to fetch trades for\n * @param {int} [limit] the maximum number of trades structures to retrieve\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {int} [params.until] Timestamp in ms of the latest time to retrieve trades for\n * @param {boolean} [params.paginate] default false, when true will automatically paginate by calling this endpoint multiple times. See in the docs all the [availble parameters](https://github.com/ccxt/ccxt/wiki/Manual#pagination-params)\n * @returns {Trade[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=trade-structure}\n */\n await this.loadMarkets();\n let paginate = false;\n [paginate, params] = this.handleOptionAndParams(params, 'fetchMyTrades', 'paginate');\n if (paginate) {\n return await this.fetchPaginatedCallDynamic('fetchMyTrades', symbol, since, limit, params);\n }\n let request = {\n // 'instType': 'SPOT', // SPOT, MARGIN, SWAP, FUTURES, OPTION\n // 'uly': currency['id'],\n // 'instId': market['id'],\n // 'ordId': orderId,\n // 'after': billId,\n // 'before': billId,\n // 'limit': limit, // default 100, max 100\n };\n let market = undefined;\n if (symbol !== undefined) {\n market = this.market(symbol);\n request['instId'] = market['id'];\n }\n if (since !== undefined) {\n request['begin'] = since;\n }\n [request, params] = this.handleUntilOption('end', request, params);\n const [type, query] = this.handleMarketTypeAndParams('fetchMyTrades', market, params);\n request['instType'] = this.convertToInstrumentType(type);\n if ((limit !== undefined) && (since === undefined)) { // let limit = n, okx will return the n most recent results, instead of the n results after limit, so limit should only be sent when since is undefined\n request['limit'] = limit; // default 100, max 100\n }\n const response = await this.privateGetTradeFillsHistory(this.extend(request, query));\n //\n // {\n // \"code\": \"0\",\n // \"data\": [\n // {\n // \"side\": \"buy\",\n // \"fillSz\": \"0.007533\",\n // \"fillPx\": \"2654.98\",\n // \"fee\": \"-0.000007533\",\n // \"ordId\": \"317321390244397056\",\n // \"instType\": \"SPOT\",\n // \"instId\": \"ETH-USDT\",\n // \"clOrdId\": \"\",\n // \"posSide\": \"net\",\n // \"billId\": \"317321390265368576\",\n // \"tag\": \"0\",\n // \"execType\": \"T\",\n // \"tradeId\": \"107601752\",\n // \"feeCcy\": \"ETH\",\n // \"ts\": \"1621927314985\"\n // }\n // ],\n // \"msg\": \"\"\n // }\n //\n const data = this.safeValue(response, 'data', []);\n return this.parseTrades(data, market, since, limit, query);\n }\n async fetchOrderTrades(id, symbol = undefined, since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name okx#fetchOrderTrades\n * @description fetch all the trades made from a single order\n * @see https://www.okx.com/docs-v5/en/#order-book-trading-trade-get-transaction-details-last-3-months\n * @param {string} id order id\n * @param {string} symbol unified market symbol\n * @param {int} [since] the earliest time in ms to fetch trades for\n * @param {int} [limit] the maximum number of trades to retrieve\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=trade-structure}\n */\n const request = {\n // 'instrument_id': market['id'],\n 'ordId': id,\n // 'after': '1', // return the page after the specified page number\n // 'before': '1', // return the page before the specified page number\n // 'limit': limit, // optional, number of results per request, default = maximum = 100\n };\n return await this.fetchMyTrades(symbol, since, limit, this.extend(request, params));\n }\n async fetchLedger(code = undefined, since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name okx#fetchLedger\n * @description fetch the history of changes, actions done by the user or operations that altered balance of the user\n * @see https://www.okx.com/docs-v5/en/#rest-api-account-get-bills-details-last-7-days\n * @see https://www.okx.com/docs-v5/en/#rest-api-account-get-bills-details-last-3-months\n * @see https://www.okx.com/docs-v5/en/#rest-api-funding-asset-bills-details\n * @param {string} code unified currency code, default is undefined\n * @param {int} [since] timestamp in ms of the earliest ledger entry, default is undefined\n * @param {int} [limit] max number of ledger entrys to return, default is undefined\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {string} [params.marginMode] 'cross' or 'isolated'\n * @param {int} [params.until] the latest time in ms to fetch entries for\n * @param {boolean} [params.paginate] default false, when true will automatically paginate by calling this endpoint multiple times. See in the docs all the [availble parameters](https://github.com/ccxt/ccxt/wiki/Manual#pagination-params)\n * @returns {object} a [ledger structure]{@link https://docs.ccxt.com/#/?id=ledger-structure}\n */\n await this.loadMarkets();\n let paginate = false;\n [paginate, params] = this.handleOptionAndParams(params, 'fetchLedger', 'paginate');\n if (paginate) {\n return await this.fetchPaginatedCallDynamic('fetchLedger', code, since, limit, params);\n }\n const options = this.safeValue(this.options, 'fetchLedger', {});\n let method = this.safeString(options, 'method');\n method = this.safeString(params, 'method', method);\n params = this.omit(params, 'method');\n let request = {\n // 'instType': undefined, // 'SPOT', 'MARGIN', 'SWAP', 'FUTURES\", 'OPTION'\n // 'ccy': undefined, // currency['id'],\n // 'mgnMode': undefined, // 'isolated', 'cross'\n // 'ctType': undefined, // 'linear', 'inverse', only applicable to FUTURES/SWAP\n // 'type': varies depending the 'method' endpoint :\n // - https://www.okx.com/docs-v5/en/#rest-api-account-get-bills-details-last-7-days\n // - https://www.okx.com/docs-v5/en/#rest-api-funding-asset-bills-details\n // - https://www.okx.com/docs-v5/en/#rest-api-account-get-bills-details-last-3-months\n // 'after': 'id', // return records earlier than the requested bill id\n // 'before': 'id', // return records newer than the requested bill id\n // 'limit': 100, // default 100, max 100\n };\n let marginMode = undefined;\n [marginMode, params] = this.handleMarginModeAndParams('fetchLedger', params);\n if (marginMode === undefined) {\n marginMode = this.safeString(params, 'mgnMode');\n }\n if (method !== 'privateGetAssetBills') {\n if (marginMode !== undefined) {\n request['mgnMode'] = marginMode;\n }\n }\n const [type, query] = this.handleMarketTypeAndParams('fetchLedger', undefined, params);\n if (type !== undefined) {\n request['instType'] = this.convertToInstrumentType(type);\n }\n if (limit !== undefined) {\n request['limit'] = limit;\n }\n let currency = undefined;\n if (code !== undefined) {\n currency = this.currency(code);\n request['ccy'] = currency['id'];\n }\n [request, params] = this.handleUntilOption('end', request, params);\n let response = undefined;\n if (method === 'privateGetAccountBillsArchive') {\n response = await this.privateGetAccountBillsArchive(this.extend(request, query));\n }\n else if (method === 'privateGetAssetBills') {\n response = await this.privateGetAssetBills(this.extend(request, query));\n }\n else {\n response = await this.privateGetAccountBills(this.extend(request, query));\n }\n //\n // privateGetAccountBills, privateGetAccountBillsArchive\n //\n // {\n // \"code\": \"0\",\n // \"msg\": \"\",\n // \"data\": [\n // {\n // \"bal\": \"0.0000819307998198\",\n // \"balChg\": \"-664.2679586599999802\",\n // \"billId\": \"310394313544966151\",\n // \"ccy\": \"USDT\",\n // \"fee\": \"0\",\n // \"from\": \"\",\n // \"instId\": \"LTC-USDT\",\n // \"instType\": \"SPOT\",\n // \"mgnMode\": \"cross\",\n // \"notes\": \"\",\n // \"ordId\": \"310394313519800320\",\n // \"pnl\": \"0\",\n // \"posBal\": \"0\",\n // \"posBalChg\": \"0\",\n // \"subType\": \"2\",\n // \"sz\": \"664.26795866\",\n // \"to\": \"\",\n // \"ts\": \"1620275771196\",\n // \"type\": \"2\"\n // }\n // ]\n // }\n //\n // privateGetAssetBills\n //\n // {\n // \"code\": \"0\",\n // \"msg\": \"\",\n // \"data\": [\n // {\n // \"billId\": \"12344\",\n // \"ccy\": \"BTC\",\n // \"balChg\": \"2\",\n // \"bal\": \"12\",\n // \"type\": \"1\",\n // \"ts\": \"1597026383085\"\n // }\n // ]\n // }\n //\n const data = this.safeValue(response, 'data', []);\n return this.parseLedger(data, currency, since, limit);\n }\n parseLedgerEntryType(type) {\n const types = {\n '1': 'transfer',\n '2': 'trade',\n '3': 'trade',\n '4': 'rebate',\n '5': 'trade',\n '6': 'transfer',\n '7': 'trade',\n '8': 'fee',\n '9': 'trade',\n '10': 'trade',\n '11': 'trade', // system token conversion\n };\n return this.safeString(types, type, type);\n }\n parseLedgerEntry(item, currency = undefined) {\n //\n // privateGetAccountBills, privateGetAccountBillsArchive\n //\n // {\n // \"bal\": \"0.0000819307998198\",\n // \"balChg\": \"-664.2679586599999802\",\n // \"billId\": \"310394313544966151\",\n // \"ccy\": \"USDT\",\n // \"fee\": \"0\",\n // \"from\": \"\",\n // \"instId\": \"LTC-USDT\",\n // \"instType\": \"SPOT\",\n // \"mgnMode\": \"cross\",\n // \"notes\": \"\",\n // \"ordId\": \"310394313519800320\",\n // \"pnl\": \"0\",\n // \"posBal\": \"0\",\n // \"posBalChg\": \"0\",\n // \"subType\": \"2\",\n // \"sz\": \"664.26795866\",\n // \"to\": \"\",\n // \"ts\": \"1620275771196\",\n // \"type\": \"2\"\n // }\n //\n // privateGetAssetBills\n //\n // {\n // \"billId\": \"12344\",\n // \"ccy\": \"BTC\",\n // \"balChg\": \"2\",\n // \"bal\": \"12\",\n // \"type\": \"1\",\n // \"ts\": \"1597026383085\"\n // }\n //\n const id = this.safeString(item, 'billId');\n const account = undefined;\n const referenceId = this.safeString(item, 'ordId');\n const referenceAccount = undefined;\n const type = this.parseLedgerEntryType(this.safeString(item, 'type'));\n const code = this.safeCurrencyCode(this.safeString(item, 'ccy'), currency);\n const amountString = this.safeString(item, 'balChg');\n const amount = this.parseNumber(amountString);\n const timestamp = this.safeInteger(item, 'ts');\n const feeCostString = this.safeString(item, 'fee');\n let fee = undefined;\n if (feeCostString !== undefined) {\n fee = {\n 'cost': this.parseNumber(Precise.stringNeg(feeCostString)),\n 'currency': code,\n };\n }\n const before = undefined;\n const afterString = this.safeString(item, 'bal');\n const after = this.parseNumber(afterString);\n const status = 'ok';\n const marketId = this.safeString(item, 'instId');\n const symbol = this.safeSymbol(marketId, undefined, '-');\n return {\n 'id': id,\n 'info': item,\n 'timestamp': timestamp,\n 'datetime': this.iso8601(timestamp),\n 'account': account,\n 'referenceId': referenceId,\n 'referenceAccount': referenceAccount,\n 'type': type,\n 'currency': code,\n 'symbol': symbol,\n 'amount': amount,\n 'before': before,\n 'after': after,\n 'status': status,\n 'fee': fee,\n };\n }\n parseDepositAddress(depositAddress, currency = undefined) {\n //\n // {\n // \"addr\": \"okbtothemoon\",\n // \"memo\": \"971668\", // may be missing\n // \"tag\":\"52055\", // may be missing\n // \"pmtId\": \"\", // may be missing\n // \"ccy\": \"BTC\",\n // \"to\": \"6\", // 1 SPOT, 3 FUTURES, 6 FUNDING, 9 SWAP, 12 OPTION, 18 Unified account\n // \"selected\": true\n // }\n //\n // {\n // \"ccy\":\"usdt-erc20\",\n // \"to\":\"6\",\n // \"addr\":\"0x696abb81974a8793352cbd33aadcf78eda3cfdfa\",\n // \"selected\":true\n // }\n //\n // {\n // \"chain\": \"ETH-OKExChain\",\n // \"addrEx\": { \"comment\": \"6040348\" }, // some currencies like TON may have this field,\n // \"ctAddr\": \"72315c\",\n // \"ccy\": \"ETH\",\n // \"to\": \"6\",\n // \"addr\": \"0x1c9f2244d1ccaa060bd536827c18925db10db102\",\n // \"selected\": true\n // }\n //\n const address = this.safeString(depositAddress, 'addr');\n let tag = this.safeStringN(depositAddress, ['tag', 'pmtId', 'memo']);\n if (tag === undefined) {\n const addrEx = this.safeValue(depositAddress, 'addrEx', {});\n tag = this.safeString(addrEx, 'comment');\n }\n const currencyId = this.safeString(depositAddress, 'ccy');\n currency = this.safeCurrency(currencyId, currency);\n const code = currency['code'];\n const chain = this.safeString(depositAddress, 'chain');\n const networks = this.safeValue(currency, 'networks', {});\n const networksById = this.indexBy(networks, 'id');\n const networkData = this.safeValue(networksById, chain);\n const network = this.safeString(networkData, 'network');\n this.checkAddress(address);\n return {\n 'currency': code,\n 'address': address,\n 'tag': tag,\n 'network': network,\n 'info': depositAddress,\n };\n }\n async fetchDepositAddressesByNetwork(code, params = {}) {\n /**\n * @method\n * @name okx#fetchDepositAddressesByNetwork\n * @description fetch a dictionary of addresses for a currency, indexed by network\n * @see https://www.okx.com/docs-v5/en/#funding-account-rest-api-get-deposit-address\n * @param {string} code unified currency code of the currency for the deposit address\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} a dictionary of [address structures]{@link https://docs.ccxt.com/#/?id=address-structure} indexed by the network\n */\n await this.loadMarkets();\n const currency = this.currency(code);\n const request = {\n 'ccy': currency['id'],\n };\n const response = await this.privateGetAssetDepositAddress(this.extend(request, params));\n //\n // {\n // \"code\": \"0\",\n // \"msg\": \"\",\n // \"data\": [\n // {\n // \"addr\": \"okbtothemoon\",\n // \"memo\": \"971668\", // may be missing\n // \"tag\":\"52055\", // may be missing\n // \"pmtId\": \"\", // may be missing\n // \"ccy\": \"BTC\",\n // \"to\": \"6\", // 1 SPOT, 3 FUTURES, 6 FUNDING, 9 SWAP, 12 OPTION, 18 Unified account\n // \"selected\": true\n // },\n // // {\"ccy\":\"usdt-erc20\",\"to\":\"6\",\"addr\":\"0x696abb81974a8793352cbd33aadcf78eda3cfdfa\",\"selected\":true},\n // // {\"ccy\":\"usdt-trc20\",\"to\":\"6\",\"addr\":\"TRrd5SiSZrfQVRKm4e9SRSbn2LNTYqCjqx\",\"selected\":true},\n // // {\"ccy\":\"usdt_okexchain\",\"to\":\"6\",\"addr\":\"0x696abb81974a8793352cbd33aadcf78eda3cfdfa\",\"selected\":true},\n // // {\"ccy\":\"usdt_kip20\",\"to\":\"6\",\"addr\":\"0x696abb81974a8793352cbd33aadcf78eda3cfdfa\",\"selected\":true},\n // ]\n // }\n //\n const data = this.safeValue(response, 'data', []);\n const filtered = this.filterBy(data, 'selected', true);\n const parsed = this.parseDepositAddresses(filtered, [currency['code']], false);\n return this.indexBy(parsed, 'network');\n }\n async fetchDepositAddress(code, params = {}) {\n /**\n * @method\n * @name okx#fetchDepositAddress\n * @description fetch the deposit address for a currency associated with this account\n * @see https://www.okx.com/docs-v5/en/#funding-account-rest-api-get-deposit-address\n * @param {string} code unified currency code\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} an [address structure]{@link https://docs.ccxt.com/#/?id=address-structure}\n */\n const network = this.safeString(params, 'network');\n const networks = this.safeValue(this.options, 'networks', {});\n params = this.omit(params, 'network');\n const response = await this.fetchDepositAddressesByNetwork(code, params);\n let result = undefined;\n if (network === undefined) {\n result = this.safeValue(response, code);\n if (result === undefined) {\n const alias = this.safeString(networks, code, code);\n result = this.safeValue(response, alias);\n if (result === undefined) {\n const defaultNetwork = this.safeString(this.options, 'defaultNetwork', 'ERC20');\n result = this.safeValue(response, defaultNetwork);\n if (result === undefined) {\n const values = Object.values(response);\n result = this.safeValue(values, 0);\n if (result === undefined) {\n throw new GetDepositAddressError(code, network).exchange(this.id);\n }\n }\n }\n }\n return result;\n }\n result = this.safeValue(response, network);\n if (result === undefined) {\n throw new GetDepositAddressError(code, network).exchange(this.id);\n }\n return result;\n }\n async withdraw(code, amount, address, tag = undefined, params = {}) {\n /**\n * @method\n * @name okx#withdraw\n * @description make a withdrawal\n * @see https://www.okx.com/docs-v5/en/#funding-account-rest-api-withdrawal\n * @param {string} code unified currency code\n * @param {float} amount the amount to withdraw\n * @param {string} address the address to withdraw to\n * @param {string} tag\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} a [transaction structure]{@link https://docs.ccxt.com/#/?id=transaction-structure}\n */\n [tag, params] = this.handleWithdrawTagAndParams(tag, params);\n this.checkAddress(address);\n await this.loadMarkets();\n const currency = this.currency(code);\n if ((tag !== undefined) && (tag.length > 0)) {\n address = address + ':' + tag;\n }\n const request = {\n 'ccy': currency['id'],\n 'toAddr': address,\n 'dest': '4', // 2 = OKCoin International, 3 = OKX 4 = others\n };\n let network = this.safeString(params, 'network'); // this line allows the user to specify either ERC20 or ETH\n if (network !== undefined) {\n const networks = this.safeValue(this.options, 'networks', {});\n network = this.safeString(networks, network.toUpperCase(), network); // handle ETH>ERC20 alias\n request['chain'] = currency['id'] + '-' + network;\n params = this.omit(params, 'network');\n }\n const precisionAmount = this.currencyToPrecision(code, amount, network);\n request['amt'] = this.numberToString(precisionAmount);\n let fee = this.safeString(params, 'fee');\n if (fee === undefined) {\n const currencies = await this.fetchCurrencies();\n this.currencies = this.deepExtend(this.currencies, currencies);\n const targetNetwork = this.safeValue(currency['networks'], this.networkIdToCode(network), {});\n fee = this.safeString(targetNetwork, 'fee');\n if (fee === undefined) {\n throw new InvalidParamsError('withdraw() requires a \"fee\" string parameter, network transaction fee must be ≥ 0. Withdrawals to OKCoin or OKX are fee-free, please set \"0\". Withdrawing to external digital asset address requires network transaction fee.').exchange(this.id);\n }\n }\n request['fee'] = this.numberToString(fee); // withdrawals to OKCoin or OKX are fee-free, please set 0\n if ('password' in params) {\n request['pwd'] = params['password'];\n }\n else if ('pwd' in params) {\n request['pwd'] = params['pwd'];\n }\n else {\n const options = this.safeValue(this.options, 'withdraw', {});\n const password = this.safeString2(options, 'password', 'pwd');\n if (password !== undefined) {\n request['pwd'] = password;\n }\n }\n const query = this.omit(params, ['fee', 'password', 'pwd']);\n if (!('pwd' in request)) {\n throw new InvalidParamsError('withdraw() requires a password parameter or a pwd parameter, it must be the funding password, not the API passphrase')\n .exchange(this.id);\n }\n const response = await this.privatePostAssetWithdrawal(this.extend(request, query));\n //\n // {\n // \"code\": \"0\",\n // \"msg\": \"\",\n // \"data\": [\n // {\n // \"amt\": \"0.1\",\n // \"wdId\": \"67485\",\n // \"ccy\": \"BTC\"\n // }\n // ]\n // }\n //\n const data = this.safeValue(response, 'data', []);\n const transaction = this.safeValue(data, 0);\n return this.parseTransaction(transaction, currency);\n }\n async fetchDeposits(code = undefined, since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name okx#fetchDeposits\n * @description fetch all deposits made to an account\n * @see https://www.okx.com/docs-v5/en/#rest-api-funding-get-deposit-history\n * @param {string} code unified currency code\n * @param {int} [since] the earliest time in ms to fetch deposits for\n * @param {int} [limit] the maximum number of deposits structures to retrieve\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {int} [params.until] the latest time in ms to fetch entries for\n * @param {boolean} [params.paginate] default false, when true will automatically paginate by calling this endpoint multiple times. See in the docs all the [availble parameters](https://github.com/ccxt/ccxt/wiki/Manual#pagination-params)\n * @returns {object[]} a list of [transaction structures]{@link https://docs.ccxt.com/#/?id=transaction-structure}\n */\n await this.loadMarkets();\n let paginate = false;\n [paginate, params] = this.handleOptionAndParams(params, 'fetchDeposits', 'paginate');\n if (paginate) {\n return await this.fetchPaginatedCallDynamic('fetchDeposits', code, since, limit, params);\n }\n let request = {\n // 'ccy': currency['id'],\n // 'state': 2, // 0 waiting for confirmation, 1 deposit credited, 2 deposit successful\n // 'after': since,\n // 'before' this.milliseconds (),\n // 'limit': limit, // default 100, max 100\n };\n let currency = undefined;\n if (code !== undefined) {\n currency = this.currency(code);\n request['ccy'] = currency['id'];\n }\n if (since !== undefined) {\n request['before'] = Math.max(since - 1, 0);\n }\n if (limit !== undefined) {\n request['limit'] = limit; // default 100, max 100\n }\n [request, params] = this.handleUntilOption('after', request, params);\n const response = await this.privateGetAssetDepositHistory(this.extend(request, params));\n //\n // {\n // \"code\": \"0\",\n // \"msg\": \"\",\n // \"data\": [\n // {\n // \"amt\": \"0.01044408\",\n // \"txId\": \"1915737_3_0_0_asset\",\n // \"ccy\": \"BTC\",\n // \"from\": \"13801825426\",\n // \"to\": \"\",\n // \"ts\": \"1597026383085\",\n // \"state\": \"2\",\n // \"depId\": \"4703879\"\n // },\n // {\n // \"amt\": \"491.6784211\",\n // \"txId\": \"1744594_3_184_0_asset\",\n // \"ccy\": \"OKB\",\n // \"from\": \"\",\n // \"to\": \"\",\n // \"ts\": \"1597026383085\",\n // \"state\": \"2\",\n // \"depId\": \"4703809\"\n // },\n // {\n // \"amt\": \"223.18782496\",\n // \"txId\": \"6d892c669225b1092c780bf0da0c6f912fc7dc8f6b8cc53b003288624c\",\n // \"ccy\": \"USDT\",\n // \"from\": \"\",\n // \"to\": \"39kK4XvgEuM7rX9frgyHoZkWqx4iKu1spD\",\n // \"ts\": \"1597026383085\",\n // \"state\": \"2\",\n // \"depId\": \"4703779\"\n // }\n // ]\n // }\n //\n const data = this.safeValue(response, 'data', []);\n return this.parseTransactions(data, currency, since, limit, params);\n }\n async fetchDeposit(id, code = undefined, params = {}) {\n /**\n * @method\n * @name okx#fetchDeposit\n * @description fetch data on a currency deposit via the deposit id\n * @see https://www.okx.com/docs-v5/en/#rest-api-funding-get-deposit-history\n * @param {string} id deposit id\n * @param {string} code filter by currency code\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} a [transaction structure]{@link https://docs.ccxt.com/#/?id=transaction-structure}\n */\n await this.loadMarkets();\n const request = {\n 'depId': id,\n };\n let currency = undefined;\n if (code !== undefined) {\n currency = this.currency(code);\n request['ccy'] = currency['id'];\n }\n const response = await this.privateGetAssetDepositHistory(this.extend(request, params));\n const data = this.safeValue(response, 'data');\n const deposit = this.safeValue(data, 0, {});\n return this.parseTransaction(deposit, currency);\n }\n async fetchWithdrawals(code = undefined, since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name okx#fetchWithdrawals\n * @description fetch all withdrawals made from an account\n * @see https://www.okx.com/docs-v5/en/#rest-api-funding-get-withdrawal-history\n * @param {string} code unified currency code\n * @param {int} [since] the earliest time in ms to fetch withdrawals for\n * @param {int} [limit] the maximum number of withdrawals structures to retrieve\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {int} [params.until] the latest time in ms to fetch entries for\n * @param {boolean} [params.paginate] default false, when true will automatically paginate by calling this endpoint multiple times. See in the docs all the [availble parameters](https://github.com/ccxt/ccxt/wiki/Manual#pagination-params)\n * @returns {object[]} a list of [transaction structures]{@link https://docs.ccxt.com/#/?id=transaction-structure}\n */\n await this.loadMarkets();\n let paginate = false;\n [paginate, params] = this.handleOptionAndParams(params, 'fetchWithdrawals', 'paginate');\n if (paginate) {\n return await this.fetchPaginatedCallDynamic('fetchWithdrawals', code, since, limit, params);\n }\n let request = {\n // 'ccy': currency['id'],\n // 'state': 2, // -3: pending cancel, -2 canceled, -1 failed, 0, pending, 1 sending, 2 sent, 3 awaiting email verification, 4 awaiting manual verification, 5 awaiting identity verification\n // 'after': since,\n // 'before': this.milliseconds (),\n // 'limit': limit, // default 100, max 100\n };\n let currency = undefined;\n if (code !== undefined) {\n currency = this.currency(code);\n request['ccy'] = currency['id'];\n }\n if (since !== undefined) {\n request['before'] = Math.max(since - 1, 0);\n }\n if (limit !== undefined) {\n request['limit'] = limit; // default 100, max 100\n }\n [request, params] = this.handleUntilOption('after', request, params);\n const response = await this.privateGetAssetWithdrawalHistory(this.extend(request, params));\n //\n // {\n // \"code\": \"0\",\n // \"msg\": \"\",\n // \"data\": [\n // {\n // \"amt\": \"0.094\",\n // \"wdId\": \"4703879\",\n // \"fee\": \"0.01000000eth\",\n // \"txId\": \"0x62477bac6509a04512819bb1455e923a60dea5966c7caeaa0b24eb8fb0432b85\",\n // \"ccy\": \"ETH\",\n // \"from\": \"13426335357\",\n // \"to\": \"0xA41446125D0B5b6785f6898c9D67874D763A1519\",\n // \"ts\": \"1597026383085\",\n // \"state\": \"2\"\n // },\n // {\n // \"amt\": \"0.01\",\n // \"wdId\": \"4703879\",\n // \"fee\": \"0.00000000btc\",\n // \"txId\": \"\",\n // \"ccy\": \"BTC\",\n // \"from\": \"13426335357\",\n // \"to\": \"13426335357\",\n // \"ts\": \"1597026383085\",\n // \"state\": \"2\"\n // }\n // ]\n // }\n //\n const data = this.safeValue(response, 'data', []);\n return this.parseTransactions(data, currency, since, limit, params);\n }\n async fetchWithdrawal(id, code = undefined, params = {}) {\n /**\n * @method\n * @name okx#fetchWithdrawal\n * @description fetch data on a currency withdrawal via the withdrawal id\n * @see https://www.okx.com/docs-v5/en/#rest-api-funding-get-withdrawal-history\n * @param {string} id withdrawal id\n * @param {string} code unified currency code of the currency withdrawn, default is undefined\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} a [transaction structure]{@link https://docs.ccxt.com/#/?id=transaction-structure}\n */\n await this.loadMarkets();\n const request = {\n 'wdId': id,\n };\n let currency = undefined;\n if (code !== undefined) {\n currency = this.currency(code);\n request['ccy'] = currency['id'];\n }\n const response = await this.privateGetAssetWithdrawalHistory(this.extend(request, params));\n //\n // {\n // \"code\": \"0\",\n // \"data\": [\n // {\n // \"chain\": \"USDT-TRC20\",\n // \"clientId\": '',\n // \"fee\": \"0.8\",\n // \"ccy\": \"USDT\",\n // \"amt\": \"54.561\",\n // \"txId\": \"00cff6ec7fa7c7d7d184bd84e82b9ff36863f07c0421188607f87dfa94e06b70\",\n // \"from\": \"example@email.com\",\n // \"to\": \"TEY6qjnKDyyq5jDc3DJizWLCdUySrpQ4yp\",\n // \"state\": \"2\",\n // \"ts\": \"1641376485000\",\n // \"wdId\": \"25147041\"\n // }\n // ],\n // \"msg\": ''\n // }\n //\n const data = this.safeValue(response, 'data');\n const withdrawal = this.safeValue(data, 0, {});\n return this.parseTransaction(withdrawal);\n }\n parseTransactionStatus(status) {\n //\n // deposit statuses\n //\n // {\n // \"0\": \"waiting for confirmation\",\n // \"1\": \"deposit credited\",\n // \"2\": \"deposit successful\"\n // }\n //\n // withdrawal statuses\n //\n // {\n // '-3': \"pending cancel\",\n // \"-2\": \"canceled\",\n // \"-1\": \"failed\",\n // \"0\": \"pending\",\n // \"1\": \"sending\",\n // \"2\": \"sent\",\n // \"3\": \"awaiting email verification\",\n // \"4\": \"awaiting manual verification\",\n // \"5\": \"awaiting identity verification\"\n // }\n //\n const statuses = {\n '-3': 'pending',\n '-2': 'canceled',\n '-1': 'failed',\n '0': 'pending',\n '1': 'pending',\n '2': 'ok',\n '3': 'pending',\n '4': 'pending',\n '5': 'pending',\n };\n return this.safeString(statuses, status, status);\n }\n parseTransaction(transaction, currency = undefined) {\n //\n // withdraw\n //\n // {\n // \"amt\": \"0.1\",\n // \"wdId\": \"67485\",\n // \"ccy\": \"BTC\"\n // }\n //\n // fetchWithdrawals\n //\n // {\n // \"amt\": \"0.094\",\n // \"wdId\": \"4703879\",\n // \"fee\": \"0.01000000eth\",\n // \"txId\": \"0x62477bac6509a04512819bb1455e923a60dea5966c7caeaa0b24eb8fb0432b85\",\n // \"ccy\": \"ETH\",\n // \"from\": \"13426335357\",\n // \"to\": \"0xA41446125D0B5b6785f6898c9D67874D763A1519\",\n // \"tag\",\n // \"pmtId\",\n // \"memo\",\n // \"ts\": \"1597026383085\",\n // \"state\": \"2\"\n // }\n //\n // fetchDeposits\n //\n // {\n // \"amt\": \"0.01044408\",\n // \"txId\": \"1915737_3_0_0_asset\",\n // \"ccy\": \"BTC\",\n // \"from\": \"13801825426\",\n // \"to\": \"\",\n // \"ts\": \"1597026383085\",\n // \"state\": \"2\",\n // \"depId\": \"4703879\"\n // }\n //\n let type = undefined;\n let id = undefined;\n const withdrawalId = this.safeString(transaction, 'wdId');\n const addressFrom = this.safeString(transaction, 'from');\n const addressTo = this.safeString(transaction, 'to');\n const networkId = this.safeString(transaction, 'chain');\n const parts = networkId.split('-');\n const chainPart = parts.slice(1).join('-');\n const networkCode = this.safeNetwork(chainPart);\n const address = addressTo;\n let tagTo = this.safeString2(transaction, 'tag', 'memo');\n tagTo = this.safeString2(transaction, 'pmtId', tagTo);\n if (withdrawalId !== undefined) {\n type = 'withdrawal';\n id = withdrawalId;\n }\n else {\n // the payment_id will appear on new deposits but appears to be removed from the response after 2 months\n id = this.safeString(transaction, 'depId');\n type = 'deposit';\n }\n const currencyId = this.safeString(transaction, 'ccy');\n const code = this.safeCurrencyCode(currencyId);\n const amount = this.safeNumber(transaction, 'amt');\n const status = this.parseTransactionStatus(this.safeString(transaction, 'state'));\n const txid = this.safeString(transaction, 'txId');\n const timestamp = this.safeInteger(transaction, 'ts');\n let feeCost = undefined;\n if (type === 'deposit') {\n feeCost = 0;\n }\n else {\n feeCost = this.safeNumber(transaction, 'fee');\n }\n // todo parse tags\n return {\n 'info': transaction,\n 'id': id,\n 'currency': code,\n 'amount': amount,\n 'network': networkCode,\n 'addressFrom': addressFrom,\n 'addressTo': addressTo,\n 'address': address,\n 'tagFrom': undefined,\n 'tagTo': tagTo,\n 'tag': tagTo,\n 'status': status,\n 'type': type,\n 'updated': undefined,\n 'txid': txid,\n 'timestamp': timestamp,\n 'datetime': this.iso8601(timestamp),\n 'internal': undefined,\n 'comment': undefined,\n 'fee': {\n 'currency': code,\n 'cost': feeCost,\n },\n };\n }\n async fetchPosition(symbol, params = {}) {\n /**\n * @method\n * @name okx#fetchPosition\n * @description fetch data on a single open contract trade position\n * @see https://www.okx.com/docs-v5/en/#rest-api-account-get-positions\n * @param {string} symbol unified market symbol of the market the position is held in, default is undefined\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {string} [params.instType] MARGIN, SWAP, FUTURES, OPTION\n * @returns {object} a [position structure]{@link https://docs.ccxt.com/#/?id=position-structure}\n */\n await this.loadMarkets();\n const market = this.market(symbol);\n const [type, query] = this.handleMarketTypeAndParams('fetchPosition', market, params);\n const request = {\n // instType String No Instrument type, MARGIN, SWAP, FUTURES, OPTION\n 'instId': market['id'],\n // posId String No Single position ID or multiple position IDs (no more than 20) separated with comma\n };\n if (type !== undefined) {\n request['instType'] = this.convertToInstrumentType(type);\n }\n const response = await this.privateGetAccountPositions(this.extend(request, query));\n //\n // {\n // \"code\": \"0\",\n // \"msg\": \"\",\n // \"data\": [\n // {\n // \"adl\": \"1\",\n // \"availPos\": \"1\",\n // \"avgPx\": \"2566.31\",\n // \"cTime\": \"1619507758793\",\n // \"ccy\": \"ETH\",\n // \"deltaBS\": \"\",\n // \"deltaPA\": \"\",\n // \"gammaBS\": \"\",\n // \"gammaPA\": \"\",\n // \"imr\": \"\",\n // \"instId\": \"ETH-USD-210430\",\n // \"instType\": \"FUTURES\",\n // \"interest\": \"0\",\n // \"last\": \"2566.22\",\n // \"lever\": \"10\",\n // \"liab\": \"\",\n // \"liabCcy\": \"\",\n // \"liqPx\": \"2352.8496681818233\",\n // \"margin\": \"0.0003896645377994\",\n // \"mgnMode\": \"isolated\",\n // \"mgnRatio\": \"11.731726509588816\",\n // \"mmr\": \"0.0000311811092368\",\n // \"optVal\": \"\",\n // \"pTime\": \"1619507761462\",\n // \"pos\": \"1\",\n // \"posCcy\": \"\",\n // \"posId\": \"307173036051017730\",\n // \"posSide\": \"long\",\n // \"thetaBS\": \"\",\n // \"thetaPA\": \"\",\n // \"tradeId\": \"109844\",\n // \"uTime\": \"1619507761462\",\n // \"upl\": \"-0.0000009932766034\",\n // \"uplRatio\": \"-0.0025490556801078\",\n // \"vegaBS\": \"\",\n // \"vegaPA\": \"\"\n // }\n // ]\n // }\n //\n const data = this.safeValue(response, 'data', []);\n const position = this.safeValue(data, 0);\n if (position === undefined) {\n return undefined;\n }\n return this.parsePosition(position, market);\n }\n async fetchPositions(symbols = undefined, params = {}) {\n /**\n * @method\n * @name okx#fetchPositions\n * @see https://www.okx.com/docs-v5/en/#rest-api-account-get-positions\n * @description fetch all open positions\n * @param {string[]|undefined} symbols list of unified market symbols\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {string} [params.instType] MARGIN, SWAP, FUTURES, OPTION\n * @returns {object[]} a list of [position structure]{@link https://docs.ccxt.com/#/?id=position-structure}\n */\n await this.loadMarkets();\n const request = {\n // 'instType': 'MARGIN', // optional string, MARGIN, SWAP, FUTURES, OPTION\n // 'instId': market['id'], // optional string, e.g. 'BTC-USD-190927-5000-C'\n // 'posId': '307173036051017730', // optional string, Single or multiple position IDs (no more than 20) separated with commas\n };\n if (symbols !== undefined) {\n const marketIds = [];\n for (let i = 0; i < symbols.length; i++) {\n const entry = symbols[i];\n const market = this.market(entry);\n marketIds.push(market['id']);\n }\n const marketIdsLength = marketIds.length;\n if (marketIdsLength > 0) {\n request['instId'] = marketIds.join(',');\n }\n }\n const fetchPositionsOptions = this.safeValue(this.options, 'fetchPositions', {});\n const method = this.safeString(fetchPositionsOptions, 'method', 'privateGetAccountPositions');\n let response = undefined;\n if (method === 'privateGetAccountPositionsHistory') {\n response = await this.privateGetAccountPositionsHistory(this.extend(request, params));\n }\n else {\n response = await this.privateGetAccountPositions(this.extend(request, params));\n }\n //\n // {\n // \"code\": \"0\",\n // \"msg\": \"\",\n // \"data\": [\n // {\n // \"adl\": \"1\",\n // \"availPos\": \"1\",\n // \"avgPx\": \"2566.31\",\n // \"cTime\": \"1619507758793\",\n // \"ccy\": \"ETH\",\n // \"deltaBS\": \"\",\n // \"deltaPA\": \"\",\n // \"gammaBS\": \"\",\n // \"gammaPA\": \"\",\n // \"imr\": \"\",\n // \"instId\": \"ETH-USD-210430\",\n // \"instType\": \"FUTURES\",\n // \"interest\": \"0\",\n // \"last\": \"2566.22\",\n // \"lever\": \"10\",\n // \"liab\": \"\",\n // \"liabCcy\": \"\",\n // \"liqPx\": \"2352.8496681818233\",\n // \"margin\": \"0.0003896645377994\",\n // \"mgnMode\": \"isolated\",\n // \"mgnRatio\": \"11.731726509588816\",\n // \"mmr\": \"0.0000311811092368\",\n // \"optVal\": \"\",\n // \"pTime\": \"1619507761462\",\n // \"pos\": \"1\",\n // \"posCcy\": \"\",\n // \"posId\": \"307173036051017730\",\n // \"posSide\": \"long\",\n // \"thetaBS\": \"\",\n // \"thetaPA\": \"\",\n // \"tradeId\": \"109844\",\n // \"uTime\": \"1619507761462\",\n // \"upl\": \"-0.0000009932766034\",\n // \"uplRatio\": \"-0.0025490556801078\",\n // \"vegaBS\": \"\",\n // \"vegaPA\": \"\"\n // }\n // ]\n // }\n //\n const positions = this.safeValue(response, 'data', []);\n const result = [];\n for (let i = 0; i < positions.length; i++) {\n result.push(this.parsePosition(positions[i]));\n }\n return this.filterByArrayPositions(result, 'symbol', symbols, false);\n }\n async fetchPositionsForSymbol(symbol, params = {}) {\n /**\n * @method\n * @name okx#fetchPositions\n * @see https://www.okx.com/docs-v5/en/#rest-api-account-get-positions\n * @description fetch all open positions for specific symbol\n * @param {string} symbol unified market symbol\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @param {string} [params.instType] MARGIN (if needed)\n * @returns {object[]} a list of [position structure]{@link https://docs.ccxt.com/#/?id=position-structure}\n */\n return await this.fetchPositions([symbol], params);\n }\n parsePosition(position, market = undefined) {\n //\n // {\n // \"adl\": \"3\",\n // \"availPos\": \"1\",\n // \"avgPx\": \"34131.1\",\n // \"cTime\": \"1627227626502\",\n // \"ccy\": \"USDT\",\n // \"deltaBS\": \"\",\n // \"deltaPA\": \"\",\n // \"gammaBS\": \"\",\n // \"gammaPA\": \"\",\n // \"imr\": \"170.66093041794787\",\n // \"instId\": \"BTC-USDT-SWAP\",\n // \"instType\": \"SWAP\",\n // \"interest\": \"0\",\n // \"last\": \"34134.4\",\n // \"lever\": \"2\",\n // \"liab\": \"\",\n // \"liabCcy\": \"\",\n // \"liqPx\": \"12608.959083877446\",\n // \"markPx\": \"4786.459271773621\",\n // \"margin\": \"\",\n // \"mgnMode\": \"cross\",\n // \"mgnRatio\": \"140.49930117599155\",\n // \"mmr\": \"1.3652874433435829\",\n // \"notionalUsd\": \"341.5130010779638\",\n // \"optVal\": \"\",\n // \"pos\": \"1\",\n // \"posCcy\": \"\",\n // \"posId\": \"339552508062380036\",\n // \"posSide\": \"long\",\n // \"thetaBS\": \"\",\n // \"thetaPA\": \"\",\n // \"tradeId\": \"98617799\",\n // \"uTime\": \"1627227626502\",\n // \"upl\": \"0.0108608358957281\",\n // \"uplRatio\": \"0.0000636418743944\",\n // \"vegaBS\": \"\",\n // \"vegaPA\": \"\"\n // }\n //\n const marketId = this.safeString(position, 'instId');\n market = this.safeMarket(marketId, market);\n const symbol = market['symbol'];\n const pos = this.safeString(position, 'pos'); // 'pos' field: One way mode: 0 if position is not open, 1 if open | Two way (hedge) mode: -1 if short, 1 if long, 0 if position is not open\n const contractsAbs = Precise.stringAbs(pos);\n let side = this.safeString(position, 'posSide');\n const hedged = side !== 'net';\n const contracts = this.parseNumber(contractsAbs);\n if (market['margin']) {\n // margin position\n if (side === 'net') {\n const posCcy = this.safeString(position, 'posCcy');\n const parsedCurrency = this.safeCurrencyCode(posCcy);\n if (parsedCurrency !== undefined) {\n side = (market['base'] === parsedCurrency) ? 'long' : 'short';\n }\n }\n if (side === undefined) {\n side = this.safeString(position, 'direction');\n }\n }\n else {\n if (pos !== undefined) {\n if (side === 'net') {\n if (Precise.stringGt(pos, '0')) {\n side = 'long';\n }\n else if (Precise.stringLt(pos, '0')) {\n side = 'short';\n }\n else {\n side = undefined;\n }\n }\n }\n }\n const contractSize = this.safeNumber(market, 'contractSize');\n const contractSizeString = this.numberToString(contractSize);\n const markPriceString = this.safeString(position, 'markPx');\n let notionalString = this.safeString(position, 'notionalUsd');\n if (market['inverse']) {\n notionalString = Precise.stringDiv(Precise.stringMul(contractsAbs, contractSizeString), markPriceString);\n }\n const notional = this.parseNumber(notionalString);\n const marginMode = this.safeString(position, 'mgnMode');\n let initialMarginString = undefined;\n const entryPriceString = this.safeString(position, 'avgPx');\n const unrealizedPnlString = this.safeString(position, 'upl');\n const leverageString = this.safeString(position, 'lever');\n let initialMarginPercentage = undefined;\n let collateralString = undefined;\n if (marginMode === 'cross') {\n initialMarginString = this.safeString(position, 'imr');\n collateralString = Precise.stringAdd(initialMarginString, unrealizedPnlString);\n }\n else if (marginMode === 'isolated') {\n initialMarginPercentage = Precise.stringDiv('1', leverageString);\n collateralString = this.safeString(position, 'margin');\n }\n const maintenanceMarginString = this.safeString(position, 'mmr');\n const maintenanceMargin = this.parseNumber(maintenanceMarginString);\n const maintenanceMarginPercentageString = Precise.stringDiv(maintenanceMarginString, notionalString);\n if (initialMarginPercentage === undefined) {\n initialMarginPercentage = this.parseNumber(Precise.stringDiv(initialMarginString, notionalString, 4));\n }\n else if (initialMarginString === undefined) {\n initialMarginString = Precise.stringMul(initialMarginPercentage, notionalString);\n }\n const rounder = '0.00005'; // round to closest 0.01%\n const maintenanceMarginPercentage = this.parseNumber(Precise.stringDiv(Precise.stringAdd(maintenanceMarginPercentageString, rounder), '1', 4));\n const liquidationPrice = this.safeNumber(position, 'liqPx');\n const percentageString = this.safeString(position, 'uplRatio');\n const percentage = this.parseNumber(Precise.stringMul(percentageString, '100'));\n const timestamp = this.safeInteger(position, 'uTime');\n const marginRatio = this.parseNumber(Precise.stringDiv(maintenanceMarginString, collateralString, 4));\n return this.safePosition({\n 'info': position,\n 'id': undefined,\n 'symbol': symbol,\n 'notional': notional,\n 'marginMode': marginMode,\n 'liquidationPrice': liquidationPrice,\n 'entryPrice': this.parseNumber(entryPriceString),\n 'unrealizedPnl': this.parseNumber(unrealizedPnlString),\n 'percentage': percentage,\n 'contracts': contracts,\n 'contractSize': contractSize,\n 'markPrice': this.parseNumber(markPriceString),\n 'lastPrice': undefined,\n 'side': side,\n 'hedged': hedged,\n 'timestamp': timestamp,\n 'datetime': this.iso8601(timestamp),\n 'lastUpdateTimestamp': undefined,\n 'maintenanceMargin': maintenanceMargin,\n 'maintenanceMarginPercentage': maintenanceMarginPercentage,\n 'collateral': this.parseNumber(collateralString),\n 'initialMargin': this.parseNumber(initialMarginString),\n 'initialMarginPercentage': this.parseNumber(initialMarginPercentage),\n 'leverage': this.parseNumber(leverageString),\n 'marginRatio': marginRatio,\n 'stopLossPrice': undefined,\n 'takeProfitPrice': undefined,\n });\n }\n // https://www.okx.com/docs-v5/en/#sub-account-rest-api-get-sub-account-trading-balance\n // https://www.okx.com/docs-v5/en/#sub-account-rest-api-get-sub-account-funding-balance\n async fetchSubAccountBalances(uid, params = {}) {\n await this.loadMarkets();\n const tradingWalletBalancesRes = await this.privateGetAssetSubaccountBalances({\n 'subAcct': uid,\n }); // trading wallet\n // {\n // \"code\": \"0\",\n // \"data\": [\n // {\n // \"adjEq\": \"10679688.0460531643092577\",\n // \"borrowFroz\": \"\",\n // \"details\": [\n // {\n // \"availBal\": \"\",\n // \"availEq\": \"9930359.9998\",\n // \"cashBal\": \"9930359.9998\",\n // \"ccy\": \"USDT\",\n // \"crossLiab\": \"0\",\n // \"disEq\": \"9439737.0772999514\",\n // \"eq\": \"9930359.9998\",\n // \"eqUsd\": \"9933041.196999946\",\n // \"smtSyncEq\": \"0\",\n // \"fixedBal\": \"0\",\n // \"frozenBal\": \"0\",\n // \"imr\": \"\",\n // \"interest\": \"0\",\n // \"isoEq\": \"0\",\n // \"isoLiab\": \"0\",\n // \"liab\": \"0\",\n // \"maxLoan\": \"10000\",\n // \"mgnRatio\": \"\",\n // \"mmr\": \"\",\n // \"notionalLever\": \"\",\n // \"ordFrozen\": \"0\",\n // \"twap\": \"0\",\n // \"uTime\": \"1620722938250\",\n // \"upl\": \"0\",\n // \"uplLiab\": \"0\",\n // \"borrowFroz\": \"\",\n // \"spotIsoBal\": \"0\",\n // \"spotBal\": \"\",\n // \"openAvgPx\": \"\",\n // \"accAvgPx\": \"\",\n // \"spotUpl\": \"\",\n // \"spotUplRatio\": \"\",\n // \"totalPnl\": \"\",\n // \"totalPnlRatio\": \"\"\n // },\n // ],\n // \"imr\": \"3372.2942371050594217\",\n // \"isoEq\": \"0\",\n // \"mgnRatio\": \"70375.35408747017\",\n // \"mmr\": \"134.8917694842024\",\n // \"notionalUsd\": \"33722.9423710505978888\",\n // \"ordFroz\": \"0\",\n // \"totalEq\": \"11172992.1657531589092577\",\n // \"uTime\": \"1623392334718\",\n // \"upl\": \"-7.571730042000012\"\n // }\n // ],\n // \"msg\": \"\"\n // }\n const tradingBalances = this.parseFundingBalance(tradingWalletBalancesRes);\n const fundingWalletBalancesRes = await this.privateGetAccountSubaccountBalances({\n 'subAcct': uid,\n }); // funding wallet\n // {\n // \"code\": \"0\",\n // \"msg\": \"\",\n // \"data\": [{\n // \"availBal\": \"37.11827078\",\n // \"bal\": \"37.11827078\",\n // \"ccy\": \"ETH\",\n // \"frozenBal\": \"0\"\n // }\n // ]\n // }\n const fundingBalances = this.parseFundingBalance(fundingWalletBalancesRes);\n const combined = {\n 'trading': tradingBalances,\n 'funding': fundingBalances,\n };\n return combined;\n }\n // https://www.okx.com/docs-v5/en/#sub-account-rest-api-get-sub-account-list\n async getSubAccounts() {\n await this.loadMarkets();\n const response = await this.privateGetUsersSubaccountList();\n // {\n // \"code\":\"0\",\n // \"msg\":\"\",\n // \"data\":[\n // {\n // \"canTransOut\": false,\n // \"enable\": true,\n // \"frozenFunc\": [\n // ],\n // \"gAuth\": false,\n // \"label\": \"D456DDDLx\",\n // \"mobile\": \"\",\n // \"subAcct\": \"D456DDDL\",\n // \"ts\": \"1659334756000\",\n // \"type\": \"1\",\n // \"uid\": \"3400***********7413\"\n // }\n // ]\n // }\n const data = this.safeValue(response, 'data', []);\n return data.map((subAccount) => ({\n 'uid': subAccount.subAcct,\n }));\n }\n // https://www.okx.com/docs-v5/en/#funding-account-rest-api-funds-transfer\n async subAccountTransfer(code, amount, fromAccountType, toAccountType, fromUid, toUid, params = {}) {\n await this.loadMarkets();\n const currency = this.currency(code);\n const accountsByType = this.safeValue(this.options, 'accountsByType', {});\n const fromAccountTypeExt = this.safeString(accountsByType, fromAccountType, fromAccountType);\n const toAccountTypeExt = this.safeString(accountsByType, toAccountType, toAccountType);\n const request = {\n 'ccy': currency['id'],\n 'amt': this.currencyToPrecision(code, amount),\n 'type': '0',\n 'from': fromAccountTypeExt,\n 'to': toAccountTypeExt, // beneficiary account, 6: Funding account, 18: Trading account\n // 'subAcct': 'sub-account-name', // optional, only required when type is 1, 2 or 4\n // 'loanTrans': false, // Whether or not borrowed coins can be transferred out under Multi-currency margin and Portfolio margin. The default is false\n // 'clientId': 'client-supplied id', // A combination of case-sensitive alphanumerics, all numbers, or all letters of up to 32 characters\n // 'omitPosRisk': false, // Ignore position risk. Default is false. Applicable to Portfolio margin\n };\n if (fromUid === 'master') {\n request['type'] = '1';\n request['subAcct'] = toUid;\n }\n else if (toUid === 'master') {\n request['type'] = '2';\n request['subAcct'] = fromUid;\n }\n const response = await this.privatePostAssetTransfer(this.extend(request, params));\n //\n // {\n // \"code\": \"0\",\n // \"msg\": \"\",\n // \"data\": [\n // {\n // \"transId\": \"754147\",\n // \"ccy\": \"USDT\",\n // \"from\": \"6\",\n // \"amt\": \"0.1\",\n // \"to\": \"18\"\n // }\n // ]\n // }\n //\n const data = this.safeValue(response, 'data', []);\n const rawTransfer = this.safeValue(data, 0, {});\n return this.parseTransfer(rawTransfer, currency);\n }\n async transfer(code, amount, fromAccount, toAccount, params = {}) {\n /**\n * @method\n * @name okx#transfer\n * @description transfer currency internally between wallets on the same account\n * @see https://www.okx.com/docs-v5/en/#rest-api-funding-funds-transfer\n * @param {string} code unified currency code\n * @param {float} amount amount to transfer\n * @param {string} fromAccount account to transfer from\n * @param {string} toAccount account to transfer to\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object} a [transfer structure]{@link https://docs.ccxt.com/#/?id=transfer-structure}\n */\n await this.loadMarkets();\n const currency = this.currency(code);\n const accountsByType = this.safeValue(this.options, 'accountsByType', {});\n const fromId = this.safeString(accountsByType, fromAccount, fromAccount);\n const toId = this.safeString(accountsByType, toAccount, toAccount);\n const request = {\n 'ccy': currency['id'],\n 'amt': this.currencyToPrecision(code, amount),\n 'type': '0',\n 'from': fromId,\n 'to': toId, // beneficiary account, 6: Funding account, 18: Trading account\n // 'subAcct': 'sub-account-name', // optional, only required when type is 1, 2 or 4\n // 'loanTrans': false, // Whether or not borrowed coins can be transferred out under Multi-currency margin and Portfolio margin. The default is false\n // 'clientId': 'client-supplied id', // A combination of case-sensitive alphanumerics, all numbers, or all letters of up to 32 characters\n // 'omitPosRisk': false, // Ignore position risk. Default is false. Applicable to Portfolio margin\n };\n if (fromId === 'master') {\n request['type'] = '1';\n request['subAcct'] = toId;\n request['from'] = this.safeString(params, 'from', '6');\n request['to'] = this.safeString(params, 'to', '6');\n }\n else if (toId === 'master') {\n request['type'] = '2';\n request['subAcct'] = fromId;\n request['from'] = this.safeString(params, 'from', '6');\n request['to'] = this.safeString(params, 'to', '6');\n }\n const response = await this.privatePostAssetTransfer(this.extend(request, params));\n //\n // {\n // \"code\": \"0\",\n // \"msg\": \"\",\n // \"data\": [\n // {\n // \"transId\": \"754147\",\n // \"ccy\": \"USDT\",\n // \"from\": \"6\",\n // \"amt\": \"0.1\",\n // \"to\": \"18\"\n // }\n // ]\n // }\n //\n const data = this.safeValue(response, 'data', []);\n const rawTransfer = this.safeValue(data, 0, {});\n return this.parseTransfer(rawTransfer, currency);\n }\n parseTransfer(transfer, currency = undefined) {\n //\n // transfer\n //\n // {\n // \"transId\": \"754147\",\n // \"ccy\": \"USDT\",\n // \"from\": \"6\",\n // \"amt\": \"0.1\",\n // \"to\": \"18\"\n // }\n //\n // fetchTransfer\n //\n // {\n // \"amt\": \"5\",\n // \"ccy\": \"USDT\",\n // \"from\": \"18\",\n // \"instId\": \"\",\n // \"state\": \"success\",\n // \"subAcct\": \"\",\n // \"to\": \"6\",\n // \"toInstId\": \"\",\n // \"transId\": \"464424732\",\n // \"type\": \"0\"\n // }\n //\n // fetchTransfers\n //\n // {\n // \"bal\": \"70.6874353780312913\",\n // \"balChg\": \"-4.0000000000000000\", // negative means \"to funding\", positive meand \"from funding\"\n // \"billId\": \"588900695232225299\",\n // \"ccy\": \"USDT\",\n // \"execType\": \"\",\n // \"fee\": \"\",\n // \"from\": \"18\",\n // \"instId\": \"\",\n // \"instType\": \"\",\n // \"mgnMode\": \"\",\n // \"notes\": \"To Funding Account\",\n // \"ordId\": \"\",\n // \"pnl\": \"\",\n // \"posBal\": \"\",\n // \"posBalChg\": \"\",\n // \"price\": \"0\",\n // \"subType\": \"12\",\n // \"sz\": \"-4\",\n // \"to\": \"6\",\n // \"ts\": \"1686676866989\",\n // \"type\": \"1\"\n // }\n //\n const id = this.safeString2(transfer, 'transId', 'billId');\n const currencyId = this.safeString(transfer, 'ccy');\n const code = this.safeCurrencyCode(currencyId, currency);\n let amount = this.safeNumber(transfer, 'amt');\n const fromAccountId = this.safeString(transfer, 'from');\n const toAccountId = this.safeString(transfer, 'to');\n const accountsById = this.safeValue(this.options, 'accountsById', {});\n const timestamp = this.safeInteger(transfer, 'ts', this.milliseconds());\n const balanceChange = this.safeString(transfer, 'sz');\n if (balanceChange !== undefined) {\n amount = this.parseNumber(Precise.stringAbs(balanceChange));\n }\n return {\n 'info': transfer,\n 'id': id,\n 'timestamp': timestamp,\n 'datetime': this.iso8601(timestamp),\n 'currency': code,\n 'amount': amount,\n 'fromAccount': this.safeString(accountsById, fromAccountId),\n 'toAccount': this.safeString(accountsById, toAccountId),\n 'status': this.parseTransferStatus(this.safeString(transfer, 'state')),\n };\n }\n parseTransferStatus(status) {\n const statuses = {\n 'success': 'ok',\n };\n return this.safeString(statuses, status, status);\n }\n async fetchTransfer(id, code = undefined, params = {}) {\n await this.loadMarkets();\n const request = {\n 'transId': id,\n // 'type': 0, // default is 0 transfer within account, 1 master to sub, 2 sub to master\n };\n const response = await this.privateGetAssetTransferState(this.extend(request, params));\n //\n // {\n // \"code\": \"0\",\n // \"data\": [\n // {\n // \"amt\": \"5\",\n // \"ccy\": \"USDT\",\n // \"from\": \"18\",\n // \"instId\": \"\",\n // \"state\": \"success\",\n // \"subAcct\": \"\",\n // \"to\": \"6\",\n // \"toInstId\": \"\",\n // \"transId\": \"464424732\",\n // \"type\": \"0\"\n // }\n // ],\n // \"msg\": \"\"\n // }\n //\n const data = this.safeValue(response, 'data', []);\n const transfer = this.safeValue(data, 0);\n return this.parseTransfer(transfer);\n }\n async fetchTransfers(code = undefined, since = undefined, limit = undefined, params = {}) {\n /**\n * @method\n * @name okx#fetchTransfers\n * @description fetch a history of internal transfers made on an account\n * @see https://www.okx.com/docs-v5/en/#trading-account-rest-api-get-bills-details-last-3-months\n * @param {string} code unified currency code of the currency transferred\n * @param {int} [since] the earliest time in ms to fetch transfers for\n * @param {int} [limit] the maximum number of transfers structures to retrieve\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object[]} a list of [transfer structures]{@link https://docs.ccxt.com/#/?id=transfer-structure}\n */\n await this.loadMarkets();\n let currency = undefined;\n const request = {\n 'type': '1', // https://www.okx.com/docs-v5/en/#rest-api-account-get-bills-details-last-3-months\n };\n if (code !== undefined) {\n currency = this.currency(code);\n request['ccy'] = currency['id'];\n }\n if (since !== undefined) {\n request['begin'] = since;\n }\n if (limit !== undefined) {\n request['limit'] = limit;\n }\n const response = await this.privateGetAccountBillsArchive(this.extend(request, params));\n //\n // {\n // \"code\": \"0\",\n // \"data\": [\n // {\n // \"bal\": \"70.6874353780312913\",\n // \"balChg\": \"-4.0000000000000000\",\n // \"billId\": \"588900695232225299\",\n // \"ccy\": \"USDT\",\n // \"execType\": \"\",\n // \"fee\": \"\",\n // \"from\": \"18\",\n // \"instId\": \"\",\n // \"instType\": \"\",\n // \"mgnMode\": \"\",\n // \"notes\": \"To Funding Account\",\n // \"ordId\": \"\",\n // \"pnl\": \"\",\n // \"posBal\": \"\",\n // \"posBalChg\": \"\",\n // \"price\": \"0\",\n // \"subType\": \"12\",\n // \"sz\": \"-4\",\n // \"to\": \"6\",\n // \"ts\": \"1686676866989\",\n // \"type\": \"1\"\n // },\n // ...\n // ],\n // \"msg\": \"\"\n // }\n //\n const transfers = this.safeValue(response, 'data', []);\n return this.parseTransfers(transfers, currency, since, limit, params);\n }\n async sign(path, api = 'public', method = 'GET', params = {}, headers = undefined, body = undefined) {\n const isArray = Array.isArray(params);\n const request = '/api/' + this.version + '/' + this.implodeParams(path, params);\n const query = this.omit(params, this.extractParams(path));\n let url = this.implodeHostname(this.urls['api']['rest']) + request;\n // const type = this.getPathAuthenticationType (path);\n if (api === 'public') {\n if (Object.keys(query).length) {\n url += '?' + this.urlencode(query);\n }\n }\n else if (api === 'private') {\n this.checkRequiredCredentials();\n if (this.token) {\n headers = {\n 'Authorization': 'Bearer ' + this.token,\n 'Content-Type': 'application/json',\n 'TERMID': this.termId,\n };\n if (method !== 'GET') {\n if (Object.keys(query).length) {\n body = this.json(query);\n }\n }\n else {\n if (Object.keys(query).length) {\n url += '?' + this.urlencode(query);\n }\n }\n }\n else {\n // inject id in implicit api call\n if (method === 'POST' && (path === 'trade/batch-orders' || path === 'trade/order-algo' || path === 'trade/order')) {\n const brokerId = this.safeString(this.options, 'brokerId', 'e847386590ce4dBC');\n if (Array.isArray(params)) {\n for (let i = 0; i < params.length; i++) {\n const entry = params[i];\n const clientOrderId = this.safeString(entry, 'clOrdId');\n if (clientOrderId === undefined) {\n entry['clOrdId'] = brokerId + this.uuid16();\n entry['tag'] = brokerId;\n params[i] = entry;\n }\n }\n }\n else {\n const clientOrderId = this.safeString(params, 'clOrdId');\n if (clientOrderId === undefined) {\n params['clOrdId'] = brokerId + this.uuid16();\n params['tag'] = brokerId;\n }\n }\n }\n const timestamp = this.iso8601(this.nonce());\n headers = {\n 'OK-ACCESS-KEY': this.apiKey,\n 'OK-ACCESS-PASSPHRASE': this.password,\n 'OK-ACCESS-TIMESTAMP': timestamp,\n // 'OK-FROM': '',\n // 'OK-TO': '',\n // 'OK-LIMIT': '',\n };\n let auth = timestamp + method + request;\n if (method === 'GET') {\n if (Object.keys(query).length) {\n const urlencodedQuery = '?' + this.urlencode(query);\n url += urlencodedQuery;\n auth += urlencodedQuery;\n }\n }\n else {\n if (isArray || Object.keys(query).length) {\n body = this.json(query);\n auth += body;\n }\n headers['Content-Type'] = 'application/json';\n }\n let signature = undefined;\n if (this.externalSigner) {\n signature = await this.externalSigner.sign({\n 'payload': this.encode(auth),\n 'publicApiKey': this.apiKey,\n 'exchangeId': this.id,\n });\n }\n else {\n signature = this.hmac(this.encode(auth), this.encode(this.secret), sha256, 'base64');\n }\n headers['OK-ACCESS-SIGN'] = signature;\n }\n }\n return { 'url': url, 'method': method, 'body': body, 'headers': headers };\n }\n async fetchDepositWithdrawFees(codes = undefined, params = {}) {\n /**\n * @method\n * @name okx#fetchDepositWithdrawFees\n * @description fetch deposit and withdraw fees\n * @see https://www.okx.com/docs-v5/en/#rest-api-funding-get-currencies\n * @param {string[]|undefined} codes list of unified currency codes\n * @param {object} [params] extra parameters specific to the exchange API endpoint\n * @returns {object[]} a list of [fees structures]{@link https://docs.ccxt.com/#/?id=fee-structure}\n */\n await this.loadMarkets();\n const response = await this.privateGetAssetCurrencies(params);\n //\n // {\n // \"code\": \"0\",\n // \"data\": [\n // {\n // \"canDep\": true,\n // \"canInternal\": false,\n // \"canWd\": true,\n // \"ccy\": \"USDT\",\n // \"chain\": \"USDT-TRC20\",\n // \"logoLink\": \"https://static.coinall.ltd/cdn/assets/imgs/221/5F74EB20302D7761.png\",\n // \"mainNet\": false,\n // \"maxFee\": \"1.6\",\n // \"maxWd\": \"8852150\",\n // \"minFee\": \"0.8\",\n // \"minWd\": \"2\",\n // \"name\": \"Tether\",\n // \"usedWdQuota\": \"0\",\n // \"wdQuota\": \"500\",\n // \"wdTickSz\": \"3\"\n // },\n // {\n // \"canDep\": true,\n // \"canInternal\": false,\n // \"canWd\": true,\n // \"ccy\": \"USDT\",\n // \"chain\": \"USDT-ERC20\",\n // \"logoLink\": \"https://static.coinall.ltd/cdn/assets/imgs/221/5F74EB20302D7761.png\",\n // \"mainNet\": false,\n // \"maxFee\": \"16\",\n // \"maxWd\": \"8852150\",\n // \"minFee\": \"8\",\n // \"minWd\": \"2\",\n // \"name\": \"Tether\",\n // \"usedWdQuota\": \"0\",\n // \"wdQuota\": \"500\",\n // \"wdTickSz\": \"3\"\n // },\n // ...\n // ],\n // \"msg\": \"\"\n // }\n //\n const data = this.safeValue(response, 'data');\n return this.parseDepositWithdrawFees(data, codes);\n }\n parseDepositWithdrawFees(response, codes = undefined, currencyIdKey = undefined) {\n //\n // [\n // {\n // \"canDep\": true,\n // \"canInternal\": false,\n // \"canWd\": true,\n // \"ccy\": \"USDT\",\n // \"chain\": \"USDT-TRC20\",\n // \"logoLink\": \"https://static.coinall.ltd/cdn/assets/imgs/221/5F74EB20302D7761.png\",\n // \"mainNet\": false,\n // \"maxFee\": \"1.6\",\n // \"maxWd\": \"8852150\",\n // \"minFee\": \"0.8\",\n // \"minWd\": \"2\",\n // \"name\": \"Tether\",\n // \"usedWdQuota\": \"0\",\n // \"wdQuota\": \"500\",\n // \"wdTickSz\": \"3\"\n // }\n // ]\n //\n const depositWithdrawFees = {};\n codes = this.marketCodes(codes);\n for (let i = 0; i < response.length; i++) {\n const feeInfo = response[i];\n const currencyId = this.safeString(feeInfo, 'ccy');\n const code = this.safeCurrencyCode(currencyId);\n if ((codes === undefined) || (this.inArray(code, codes))) {\n const depositWithdrawFee = this.safeValue(depositWithdrawFees, code);\n if (depositWithdrawFee === undefined) {\n depositWithdrawFees[code] = this.depositWithdrawFee({});\n }\n depositWithdrawFees[code]['info'][currencyId] = feeInfo;\n const chain = this.safeString(feeInfo, 'chain');\n const chainSplit = chain.split('-');\n const networkId = this.safeValue(chainSplit, 1);\n const withdrawFee = this.safeNumber(feeInfo, 'minFee');\n const withdrawResult = {\n 'fee': withdrawFee,\n 'percentage': (withdrawFee !== undefined) ? false : undefined,\n };\n const depositResult = {\n 'fee': undefined,\n 'percentage': undefined,\n };\n const networkCode = this.networkIdToCode(networkId, code);\n depositWithdrawFees[code]['networks'][networkCode] = {\n 'withdraw': withdrawResult,\n 'deposit': depositResult,\n };\n }\n }\n const depositWithdrawCodes = Object.keys(depositWithdrawFees);\n for (let i = 0; i < depositWithdrawCodes.length; i++) {\n const code = depositWithdrawCodes[i];\n const currency = this.currency(code);\n depositWithdrawFees[code] = this.assignDefaultDepositWithdrawFees(depositWithdrawFees[code], currency);\n }\n return depositWithdrawFees;\n }\n handleErrors(httpCode, reason, url, method, headers, body, response, requestHeaders, requestBody) {\n if (!response) {\n return undefined; // fallback to default error handler\n }\n //\n // {\n // \"code\": \"1\",\n // \"data\": [\n // {\n // \"clOrdId\": \"\",\n // \"ordId\": \"\",\n // \"sCode\": \"51119\",\n // \"sMsg\": \"Order placement failed due to insufficient balance. \",\n // \"tag\": \"\"\n // }\n // ],\n // \"msg\": \"\"\n // },\n // {\n // \"code\": \"58001\",\n // \"data\": [],\n // \"msg\": \"Incorrect trade password\"\n // }\n //\n const code = this.safeString(response, 'code');\n if ((code !== '0') && (code !== '2')) { // 2 means that bulk operation partially succeeded\n const data = this.safeValue(response, 'data', []);\n let message;\n let userMessage;\n for (let i = 0; i < data.length; i++) {\n const error = data[i];\n const errorCode = this.safeString(error, 'sCode');\n message = this.safeString(error, 'sMsg');\n userMessage = errorCode + ': ' + message;\n this.throwExactlyMatchedException(this.exceptions['exact'], errorCode, userMessage);\n this.throwBroadlyMatchedException(this.exceptions['broad'], message, userMessage);\n }\n message = this.safeString(response, 'msg');\n userMessage = code + ': ' + message;\n this.throwExactlyMatchedException(this.exceptions['exact'], code, userMessage);\n throw new ExchangeError().addMessage(message).exchange(this.id); // unknown message\n }\n return undefined;\n }\n}\n","function _assertThisInitialized(e) {\n if (void 0 === e) throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n return e;\n}\nexport { _assertThisInitialized as default };","function _extends() {\n return _extends = Object.assign ? Object.assign.bind() : function (n) {\n for (var e = 1; e < arguments.length; e++) {\n var t = arguments[e];\n for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]);\n }\n return n;\n }, _extends.apply(null, arguments);\n}\nexport { _extends as default };","function _setPrototypeOf(t, e) {\n return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) {\n return t.__proto__ = e, t;\n }, _setPrototypeOf(t, e);\n}\nexport { _setPrototypeOf as default };","import setPrototypeOf from \"./setPrototypeOf.js\";\nfunction _inheritsLoose(t, o) {\n t.prototype = Object.create(o.prototype), t.prototype.constructor = t, setPrototypeOf(t, o);\n}\nexport { _inheritsLoose as default };","function _objectWithoutPropertiesLoose(r, e) {\n if (null == r) return {};\n var t = {};\n for (var n in r) if ({}.hasOwnProperty.call(r, n)) {\n if (e.includes(n)) continue;\n t[n] = r[n];\n }\n return t;\n}\nexport { _objectWithoutPropertiesLoose as default };","// src/focusManager.ts\nimport { Subscribable } from \"./subscribable.js\";\nimport { isServer } from \"./utils.js\";\nvar FocusManager = class extends Subscribable {\n #focused;\n #cleanup;\n #setup;\n constructor() {\n super();\n this.#setup = (onFocus) => {\n if (!isServer && window.addEventListener) {\n const listener = () => onFocus();\n window.addEventListener(\"visibilitychange\", listener, false);\n return () => {\n window.removeEventListener(\"visibilitychange\", listener);\n };\n }\n return;\n };\n }\n onSubscribe() {\n if (!this.#cleanup) {\n this.setEventListener(this.#setup);\n }\n }\n onUnsubscribe() {\n if (!this.hasListeners()) {\n this.#cleanup?.();\n this.#cleanup = void 0;\n }\n }\n setEventListener(setup) {\n this.#setup = setup;\n this.#cleanup?.();\n this.#cleanup = setup((focused) => {\n if (typeof focused === \"boolean\") {\n this.setFocused(focused);\n } else {\n this.onFocus();\n }\n });\n }\n setFocused(focused) {\n const changed = this.#focused !== focused;\n if (changed) {\n this.#focused = focused;\n this.onFocus();\n }\n }\n onFocus() {\n const isFocused = this.isFocused();\n this.listeners.forEach((listener) => {\n listener(isFocused);\n });\n }\n isFocused() {\n if (typeof this.#focused === \"boolean\") {\n return this.#focused;\n }\n return globalThis.document?.visibilityState !== \"hidden\";\n }\n};\nvar focusManager = new FocusManager();\nexport {\n FocusManager,\n focusManager\n};\n//# sourceMappingURL=focusManager.js.map","// src/mutation.ts\nimport { notifyManager } from \"./notifyManager.js\";\nimport { Removable } from \"./removable.js\";\nimport { createRetryer } from \"./retryer.js\";\nvar Mutation = class extends Removable {\n #observers;\n #mutationCache;\n #retryer;\n constructor(config) {\n super();\n this.mutationId = config.mutationId;\n this.#mutationCache = config.mutationCache;\n this.#observers = [];\n this.state = config.state || getDefaultState();\n this.setOptions(config.options);\n this.scheduleGc();\n }\n setOptions(options) {\n this.options = options;\n this.updateGcTime(this.options.gcTime);\n }\n get meta() {\n return this.options.meta;\n }\n addObserver(observer) {\n if (!this.#observers.includes(observer)) {\n this.#observers.push(observer);\n this.clearGcTimeout();\n this.#mutationCache.notify({\n type: \"observerAdded\",\n mutation: this,\n observer\n });\n }\n }\n removeObserver(observer) {\n this.#observers = this.#observers.filter((x) => x !== observer);\n this.scheduleGc();\n this.#mutationCache.notify({\n type: \"observerRemoved\",\n mutation: this,\n observer\n });\n }\n optionalRemove() {\n if (!this.#observers.length) {\n if (this.state.status === \"pending\") {\n this.scheduleGc();\n } else {\n this.#mutationCache.remove(this);\n }\n }\n }\n continue() {\n return this.#retryer?.continue() ?? // continuing a mutation assumes that variables are set, mutation must have been dehydrated before\n this.execute(this.state.variables);\n }\n async execute(variables) {\n this.#retryer = createRetryer({\n fn: () => {\n if (!this.options.mutationFn) {\n return Promise.reject(new Error(\"No mutationFn found\"));\n }\n return this.options.mutationFn(variables);\n },\n onFail: (failureCount, error) => {\n this.#dispatch({ type: \"failed\", failureCount, error });\n },\n onPause: () => {\n this.#dispatch({ type: \"pause\" });\n },\n onContinue: () => {\n this.#dispatch({ type: \"continue\" });\n },\n retry: this.options.retry ?? 0,\n retryDelay: this.options.retryDelay,\n networkMode: this.options.networkMode,\n canRun: () => this.#mutationCache.canRun(this)\n });\n const restored = this.state.status === \"pending\";\n const isPaused = !this.#retryer.canStart();\n try {\n if (!restored) {\n this.#dispatch({ type: \"pending\", variables, isPaused });\n await this.#mutationCache.config.onMutate?.(\n variables,\n this\n );\n const context = await this.options.onMutate?.(variables);\n if (context !== this.state.context) {\n this.#dispatch({\n type: \"pending\",\n context,\n variables,\n isPaused\n });\n }\n }\n const data = await this.#retryer.start();\n await this.#mutationCache.config.onSuccess?.(\n data,\n variables,\n this.state.context,\n this\n );\n await this.options.onSuccess?.(data, variables, this.state.context);\n await this.#mutationCache.config.onSettled?.(\n data,\n null,\n this.state.variables,\n this.state.context,\n this\n );\n await this.options.onSettled?.(data, null, variables, this.state.context);\n this.#dispatch({ type: \"success\", data });\n return data;\n } catch (error) {\n try {\n await this.#mutationCache.config.onError?.(\n error,\n variables,\n this.state.context,\n this\n );\n await this.options.onError?.(\n error,\n variables,\n this.state.context\n );\n await this.#mutationCache.config.onSettled?.(\n void 0,\n error,\n this.state.variables,\n this.state.context,\n this\n );\n await this.options.onSettled?.(\n void 0,\n error,\n variables,\n this.state.context\n );\n throw error;\n } finally {\n this.#dispatch({ type: \"error\", error });\n }\n } finally {\n this.#mutationCache.runNext(this);\n }\n }\n #dispatch(action) {\n const reducer = (state) => {\n switch (action.type) {\n case \"failed\":\n return {\n ...state,\n failureCount: action.failureCount,\n failureReason: action.error\n };\n case \"pause\":\n return {\n ...state,\n isPaused: true\n };\n case \"continue\":\n return {\n ...state,\n isPaused: false\n };\n case \"pending\":\n return {\n ...state,\n context: action.context,\n data: void 0,\n failureCount: 0,\n failureReason: null,\n error: null,\n isPaused: action.isPaused,\n status: \"pending\",\n variables: action.variables,\n submittedAt: Date.now()\n };\n case \"success\":\n return {\n ...state,\n data: action.data,\n failureCount: 0,\n failureReason: null,\n error: null,\n status: \"success\",\n isPaused: false\n };\n case \"error\":\n return {\n ...state,\n data: void 0,\n error: action.error,\n failureCount: state.failureCount + 1,\n failureReason: action.error,\n isPaused: false,\n status: \"error\"\n };\n }\n };\n this.state = reducer(this.state);\n notifyManager.batch(() => {\n this.#observers.forEach((observer) => {\n observer.onMutationUpdate(action);\n });\n this.#mutationCache.notify({\n mutation: this,\n type: \"updated\",\n action\n });\n });\n }\n};\nfunction getDefaultState() {\n return {\n context: void 0,\n data: void 0,\n error: null,\n failureCount: 0,\n failureReason: null,\n isPaused: false,\n status: \"idle\",\n variables: void 0,\n submittedAt: 0\n };\n}\nexport {\n Mutation,\n getDefaultState\n};\n//# sourceMappingURL=mutation.js.map","// src/notifyManager.ts\nfunction createNotifyManager() {\n let queue = [];\n let transactions = 0;\n let notifyFn = (callback) => {\n callback();\n };\n let batchNotifyFn = (callback) => {\n callback();\n };\n let scheduleFn = (cb) => setTimeout(cb, 0);\n const setScheduler = (fn) => {\n scheduleFn = fn;\n };\n const batch = (callback) => {\n let result;\n transactions++;\n try {\n result = callback();\n } finally {\n transactions--;\n if (!transactions) {\n flush();\n }\n }\n return result;\n };\n const schedule = (callback) => {\n if (transactions) {\n queue.push(callback);\n } else {\n scheduleFn(() => {\n notifyFn(callback);\n });\n }\n };\n const batchCalls = (callback) => {\n return (...args) => {\n schedule(() => {\n callback(...args);\n });\n };\n };\n const flush = () => {\n const originalQueue = queue;\n queue = [];\n if (originalQueue.length) {\n scheduleFn(() => {\n batchNotifyFn(() => {\n originalQueue.forEach((callback) => {\n notifyFn(callback);\n });\n });\n });\n }\n };\n const setNotifyFunction = (fn) => {\n notifyFn = fn;\n };\n const setBatchNotifyFunction = (fn) => {\n batchNotifyFn = fn;\n };\n return {\n batch,\n batchCalls,\n schedule,\n setNotifyFunction,\n setBatchNotifyFunction,\n setScheduler\n };\n}\nvar notifyManager = createNotifyManager();\nexport {\n createNotifyManager,\n notifyManager\n};\n//# sourceMappingURL=notifyManager.js.map","// src/onlineManager.ts\nimport { Subscribable } from \"./subscribable.js\";\nimport { isServer } from \"./utils.js\";\nvar OnlineManager = class extends Subscribable {\n #online = true;\n #cleanup;\n #setup;\n constructor() {\n super();\n this.#setup = (onOnline) => {\n if (!isServer && window.addEventListener) {\n const onlineListener = () => onOnline(true);\n const offlineListener = () => onOnline(false);\n window.addEventListener(\"online\", onlineListener, false);\n window.addEventListener(\"offline\", offlineListener, false);\n return () => {\n window.removeEventListener(\"online\", onlineListener);\n window.removeEventListener(\"offline\", offlineListener);\n };\n }\n return;\n };\n }\n onSubscribe() {\n if (!this.#cleanup) {\n this.setEventListener(this.#setup);\n }\n }\n onUnsubscribe() {\n if (!this.hasListeners()) {\n this.#cleanup?.();\n this.#cleanup = void 0;\n }\n }\n setEventListener(setup) {\n this.#setup = setup;\n this.#cleanup?.();\n this.#cleanup = setup(this.setOnline.bind(this));\n }\n setOnline(online) {\n const changed = this.#online !== online;\n if (changed) {\n this.#online = online;\n this.listeners.forEach((listener) => {\n listener(online);\n });\n }\n }\n isOnline() {\n return this.#online;\n }\n};\nvar onlineManager = new OnlineManager();\nexport {\n OnlineManager,\n onlineManager\n};\n//# sourceMappingURL=onlineManager.js.map","// src/query.ts\nimport {\n ensureQueryFn,\n noop,\n replaceData,\n resolveEnabled,\n timeUntilStale\n} from \"./utils.js\";\nimport { notifyManager } from \"./notifyManager.js\";\nimport { canFetch, createRetryer, isCancelledError } from \"./retryer.js\";\nimport { Removable } from \"./removable.js\";\nvar Query = class extends Removable {\n #initialState;\n #revertState;\n #cache;\n #retryer;\n #defaultOptions;\n #abortSignalConsumed;\n constructor(config) {\n super();\n this.#abortSignalConsumed = false;\n this.#defaultOptions = config.defaultOptions;\n this.setOptions(config.options);\n this.observers = [];\n this.#cache = config.cache;\n this.queryKey = config.queryKey;\n this.queryHash = config.queryHash;\n this.#initialState = getDefaultState(this.options);\n this.state = config.state ?? this.#initialState;\n this.scheduleGc();\n }\n get meta() {\n return this.options.meta;\n }\n get promise() {\n return this.#retryer?.promise;\n }\n setOptions(options) {\n this.options = { ...this.#defaultOptions, ...options };\n this.updateGcTime(this.options.gcTime);\n }\n optionalRemove() {\n if (!this.observers.length && this.state.fetchStatus === \"idle\") {\n this.#cache.remove(this);\n }\n }\n setData(newData, options) {\n const data = replaceData(this.state.data, newData, this.options);\n this.#dispatch({\n data,\n type: \"success\",\n dataUpdatedAt: options?.updatedAt,\n manual: options?.manual\n });\n return data;\n }\n setState(state, setStateOptions) {\n this.#dispatch({ type: \"setState\", state, setStateOptions });\n }\n cancel(options) {\n const promise = this.#retryer?.promise;\n this.#retryer?.cancel(options);\n return promise ? promise.then(noop).catch(noop) : Promise.resolve();\n }\n destroy() {\n super.destroy();\n this.cancel({ silent: true });\n }\n reset() {\n this.destroy();\n this.setState(this.#initialState);\n }\n isActive() {\n return this.observers.some(\n (observer) => resolveEnabled(observer.options.enabled, this) !== false\n );\n }\n isDisabled() {\n return this.getObserversCount() > 0 && !this.isActive();\n }\n isStale() {\n if (this.state.isInvalidated) {\n return true;\n }\n if (this.getObserversCount() > 0) {\n return this.observers.some(\n (observer) => observer.getCurrentResult().isStale\n );\n }\n return this.state.data === void 0;\n }\n isStaleByTime(staleTime = 0) {\n return this.state.isInvalidated || this.state.data === void 0 || !timeUntilStale(this.state.dataUpdatedAt, staleTime);\n }\n onFocus() {\n const observer = this.observers.find((x) => x.shouldFetchOnWindowFocus());\n observer?.refetch({ cancelRefetch: false });\n this.#retryer?.continue();\n }\n onOnline() {\n const observer = this.observers.find((x) => x.shouldFetchOnReconnect());\n observer?.refetch({ cancelRefetch: false });\n this.#retryer?.continue();\n }\n addObserver(observer) {\n if (!this.observers.includes(observer)) {\n this.observers.push(observer);\n this.clearGcTimeout();\n this.#cache.notify({ type: \"observerAdded\", query: this, observer });\n }\n }\n removeObserver(observer) {\n if (this.observers.includes(observer)) {\n this.observers = this.observers.filter((x) => x !== observer);\n if (!this.observers.length) {\n if (this.#retryer) {\n if (this.#abortSignalConsumed) {\n this.#retryer.cancel({ revert: true });\n } else {\n this.#retryer.cancelRetry();\n }\n }\n this.scheduleGc();\n }\n this.#cache.notify({ type: \"observerRemoved\", query: this, observer });\n }\n }\n getObserversCount() {\n return this.observers.length;\n }\n invalidate() {\n if (!this.state.isInvalidated) {\n this.#dispatch({ type: \"invalidate\" });\n }\n }\n fetch(options, fetchOptions) {\n if (this.state.fetchStatus !== \"idle\") {\n if (this.state.data !== void 0 && fetchOptions?.cancelRefetch) {\n this.cancel({ silent: true });\n } else if (this.#retryer) {\n this.#retryer.continueRetry();\n return this.#retryer.promise;\n }\n }\n if (options) {\n this.setOptions(options);\n }\n if (!this.options.queryFn) {\n const observer = this.observers.find((x) => x.options.queryFn);\n if (observer) {\n this.setOptions(observer.options);\n }\n }\n if (process.env.NODE_ENV !== \"production\") {\n if (!Array.isArray(this.options.queryKey)) {\n console.error(\n `As of v4, queryKey needs to be an Array. If you are using a string like 'repoData', please change it to an Array, e.g. ['repoData']`\n );\n }\n }\n const abortController = new AbortController();\n const addSignalProperty = (object) => {\n Object.defineProperty(object, \"signal\", {\n enumerable: true,\n get: () => {\n this.#abortSignalConsumed = true;\n return abortController.signal;\n }\n });\n };\n const fetchFn = () => {\n const queryFn = ensureQueryFn(this.options, fetchOptions);\n const queryFnContext = {\n queryKey: this.queryKey,\n meta: this.meta\n };\n addSignalProperty(queryFnContext);\n this.#abortSignalConsumed = false;\n if (this.options.persister) {\n return this.options.persister(\n queryFn,\n queryFnContext,\n this\n );\n }\n return queryFn(queryFnContext);\n };\n const context = {\n fetchOptions,\n options: this.options,\n queryKey: this.queryKey,\n state: this.state,\n fetchFn\n };\n addSignalProperty(context);\n this.options.behavior?.onFetch(\n context,\n this\n );\n this.#revertState = this.state;\n if (this.state.fetchStatus === \"idle\" || this.state.fetchMeta !== context.fetchOptions?.meta) {\n this.#dispatch({ type: \"fetch\", meta: context.fetchOptions?.meta });\n }\n const onError = (error) => {\n if (!(isCancelledError(error) && error.silent)) {\n this.#dispatch({\n type: \"error\",\n error\n });\n }\n if (!isCancelledError(error)) {\n this.#cache.config.onError?.(\n error,\n this\n );\n this.#cache.config.onSettled?.(\n this.state.data,\n error,\n this\n );\n }\n if (!this.isFetchingOptimistic) {\n this.scheduleGc();\n }\n this.isFetchingOptimistic = false;\n };\n this.#retryer = createRetryer({\n initialPromise: fetchOptions?.initialPromise,\n fn: context.fetchFn,\n abort: abortController.abort.bind(abortController),\n onSuccess: (data) => {\n if (data === void 0) {\n if (process.env.NODE_ENV !== \"production\") {\n console.error(\n `Query data cannot be undefined. Please make sure to return a value other than undefined from your query function. Affected query key: ${this.queryHash}`\n );\n }\n onError(new Error(`${this.queryHash} data is undefined`));\n return;\n }\n this.setData(data);\n this.#cache.config.onSuccess?.(data, this);\n this.#cache.config.onSettled?.(\n data,\n this.state.error,\n this\n );\n if (!this.isFetchingOptimistic) {\n this.scheduleGc();\n }\n this.isFetchingOptimistic = false;\n },\n onError,\n onFail: (failureCount, error) => {\n this.#dispatch({ type: \"failed\", failureCount, error });\n },\n onPause: () => {\n this.#dispatch({ type: \"pause\" });\n },\n onContinue: () => {\n this.#dispatch({ type: \"continue\" });\n },\n retry: context.options.retry,\n retryDelay: context.options.retryDelay,\n networkMode: context.options.networkMode,\n canRun: () => true\n });\n return this.#retryer.start();\n }\n #dispatch(action) {\n const reducer = (state) => {\n switch (action.type) {\n case \"failed\":\n return {\n ...state,\n fetchFailureCount: action.failureCount,\n fetchFailureReason: action.error\n };\n case \"pause\":\n return {\n ...state,\n fetchStatus: \"paused\"\n };\n case \"continue\":\n return {\n ...state,\n fetchStatus: \"fetching\"\n };\n case \"fetch\":\n return {\n ...state,\n ...fetchState(state.data, this.options),\n fetchMeta: action.meta ?? null\n };\n case \"success\":\n return {\n ...state,\n data: action.data,\n dataUpdateCount: state.dataUpdateCount + 1,\n dataUpdatedAt: action.dataUpdatedAt ?? Date.now(),\n error: null,\n isInvalidated: false,\n status: \"success\",\n ...!action.manual && {\n fetchStatus: \"idle\",\n fetchFailureCount: 0,\n fetchFailureReason: null\n }\n };\n case \"error\":\n const error = action.error;\n if (isCancelledError(error) && error.revert && this.#revertState) {\n return { ...this.#revertState, fetchStatus: \"idle\" };\n }\n return {\n ...state,\n error,\n errorUpdateCount: state.errorUpdateCount + 1,\n errorUpdatedAt: Date.now(),\n fetchFailureCount: state.fetchFailureCount + 1,\n fetchFailureReason: error,\n fetchStatus: \"idle\",\n status: \"error\"\n };\n case \"invalidate\":\n return {\n ...state,\n isInvalidated: true\n };\n case \"setState\":\n return {\n ...state,\n ...action.state\n };\n }\n };\n this.state = reducer(this.state);\n notifyManager.batch(() => {\n this.observers.forEach((observer) => {\n observer.onQueryUpdate();\n });\n this.#cache.notify({ query: this, type: \"updated\", action });\n });\n }\n};\nfunction fetchState(data, options) {\n return {\n fetchFailureCount: 0,\n fetchFailureReason: null,\n fetchStatus: canFetch(options.networkMode) ? \"fetching\" : \"paused\",\n ...data === void 0 && {\n error: null,\n status: \"pending\"\n }\n };\n}\nfunction getDefaultState(options) {\n const data = typeof options.initialData === \"function\" ? options.initialData() : options.initialData;\n const hasData = data !== void 0;\n const initialDataUpdatedAt = hasData ? typeof options.initialDataUpdatedAt === \"function\" ? options.initialDataUpdatedAt() : options.initialDataUpdatedAt : 0;\n return {\n data,\n dataUpdateCount: 0,\n dataUpdatedAt: hasData ? initialDataUpdatedAt ?? Date.now() : 0,\n error: null,\n errorUpdateCount: 0,\n errorUpdatedAt: 0,\n fetchFailureCount: 0,\n fetchFailureReason: null,\n fetchMeta: null,\n isInvalidated: false,\n status: hasData ? \"success\" : \"pending\",\n fetchStatus: \"idle\"\n };\n}\nexport {\n Query,\n fetchState\n};\n//# sourceMappingURL=query.js.map","// src/queryCache.ts\nimport { hashQueryKeyByOptions, matchQuery } from \"./utils.js\";\nimport { Query } from \"./query.js\";\nimport { notifyManager } from \"./notifyManager.js\";\nimport { Subscribable } from \"./subscribable.js\";\nvar QueryCache = class extends Subscribable {\n constructor(config = {}) {\n super();\n this.config = config;\n this.#queries = /* @__PURE__ */ new Map();\n }\n #queries;\n build(client, options, state) {\n const queryKey = options.queryKey;\n const queryHash = options.queryHash ?? hashQueryKeyByOptions(queryKey, options);\n let query = this.get(queryHash);\n if (!query) {\n query = new Query({\n cache: this,\n queryKey,\n queryHash,\n options: client.defaultQueryOptions(options),\n state,\n defaultOptions: client.getQueryDefaults(queryKey)\n });\n this.add(query);\n }\n return query;\n }\n add(query) {\n if (!this.#queries.has(query.queryHash)) {\n this.#queries.set(query.queryHash, query);\n this.notify({\n type: \"added\",\n query\n });\n }\n }\n remove(query) {\n const queryInMap = this.#queries.get(query.queryHash);\n if (queryInMap) {\n query.destroy();\n if (queryInMap === query) {\n this.#queries.delete(query.queryHash);\n }\n this.notify({ type: \"removed\", query });\n }\n }\n clear() {\n notifyManager.batch(() => {\n this.getAll().forEach((query) => {\n this.remove(query);\n });\n });\n }\n get(queryHash) {\n return this.#queries.get(queryHash);\n }\n getAll() {\n return [...this.#queries.values()];\n }\n find(filters) {\n const defaultedFilters = { exact: true, ...filters };\n return this.getAll().find(\n (query) => matchQuery(defaultedFilters, query)\n );\n }\n findAll(filters = {}) {\n const queries = this.getAll();\n return Object.keys(filters).length > 0 ? queries.filter((query) => matchQuery(filters, query)) : queries;\n }\n notify(event) {\n notifyManager.batch(() => {\n this.listeners.forEach((listener) => {\n listener(event);\n });\n });\n }\n onFocus() {\n notifyManager.batch(() => {\n this.getAll().forEach((query) => {\n query.onFocus();\n });\n });\n }\n onOnline() {\n notifyManager.batch(() => {\n this.getAll().forEach((query) => {\n query.onOnline();\n });\n });\n }\n};\nexport {\n QueryCache\n};\n//# sourceMappingURL=queryCache.js.map","// src/mutationCache.ts\nimport { notifyManager } from \"./notifyManager.js\";\nimport { Mutation } from \"./mutation.js\";\nimport { matchMutation, noop } from \"./utils.js\";\nimport { Subscribable } from \"./subscribable.js\";\nvar MutationCache = class extends Subscribable {\n constructor(config = {}) {\n super();\n this.config = config;\n this.#mutations = /* @__PURE__ */ new Map();\n this.#mutationId = Date.now();\n }\n #mutations;\n #mutationId;\n build(client, options, state) {\n const mutation = new Mutation({\n mutationCache: this,\n mutationId: ++this.#mutationId,\n options: client.defaultMutationOptions(options),\n state\n });\n this.add(mutation);\n return mutation;\n }\n add(mutation) {\n const scope = scopeFor(mutation);\n const mutations = this.#mutations.get(scope) ?? [];\n mutations.push(mutation);\n this.#mutations.set(scope, mutations);\n this.notify({ type: \"added\", mutation });\n }\n remove(mutation) {\n const scope = scopeFor(mutation);\n if (this.#mutations.has(scope)) {\n const mutations = this.#mutations.get(scope)?.filter((x) => x !== mutation);\n if (mutations) {\n if (mutations.length === 0) {\n this.#mutations.delete(scope);\n } else {\n this.#mutations.set(scope, mutations);\n }\n }\n }\n this.notify({ type: \"removed\", mutation });\n }\n canRun(mutation) {\n const firstPendingMutation = this.#mutations.get(scopeFor(mutation))?.find((m) => m.state.status === \"pending\");\n return !firstPendingMutation || firstPendingMutation === mutation;\n }\n runNext(mutation) {\n const foundMutation = this.#mutations.get(scopeFor(mutation))?.find((m) => m !== mutation && m.state.isPaused);\n return foundMutation?.continue() ?? Promise.resolve();\n }\n clear() {\n notifyManager.batch(() => {\n this.getAll().forEach((mutation) => {\n this.remove(mutation);\n });\n });\n }\n getAll() {\n return [...this.#mutations.values()].flat();\n }\n find(filters) {\n const defaultedFilters = { exact: true, ...filters };\n return this.getAll().find(\n (mutation) => matchMutation(defaultedFilters, mutation)\n );\n }\n findAll(filters = {}) {\n return this.getAll().filter((mutation) => matchMutation(filters, mutation));\n }\n notify(event) {\n notifyManager.batch(() => {\n this.listeners.forEach((listener) => {\n listener(event);\n });\n });\n }\n resumePausedMutations() {\n const pausedMutations = this.getAll().filter((x) => x.state.isPaused);\n return notifyManager.batch(\n () => Promise.all(\n pausedMutations.map((mutation) => mutation.continue().catch(noop))\n )\n );\n }\n};\nfunction scopeFor(mutation) {\n return mutation.options.scope?.id ?? String(mutation.mutationId);\n}\nexport {\n MutationCache\n};\n//# sourceMappingURL=mutationCache.js.map","// src/infiniteQueryBehavior.ts\nimport { addToEnd, addToStart, ensureQueryFn } from \"./utils.js\";\nfunction infiniteQueryBehavior(pages) {\n return {\n onFetch: (context, query) => {\n const fetchFn = async () => {\n const options = context.options;\n const direction = context.fetchOptions?.meta?.fetchMore?.direction;\n const oldPages = context.state.data?.pages || [];\n const oldPageParams = context.state.data?.pageParams || [];\n const empty = { pages: [], pageParams: [] };\n let cancelled = false;\n const addSignalProperty = (object) => {\n Object.defineProperty(object, \"signal\", {\n enumerable: true,\n get: () => {\n if (context.signal.aborted) {\n cancelled = true;\n } else {\n context.signal.addEventListener(\"abort\", () => {\n cancelled = true;\n });\n }\n return context.signal;\n }\n });\n };\n const queryFn = ensureQueryFn(context.options, context.fetchOptions);\n const fetchPage = async (data, param, previous) => {\n if (cancelled) {\n return Promise.reject();\n }\n if (param == null && data.pages.length) {\n return Promise.resolve(data);\n }\n const queryFnContext = {\n queryKey: context.queryKey,\n pageParam: param,\n direction: previous ? \"backward\" : \"forward\",\n meta: context.options.meta\n };\n addSignalProperty(queryFnContext);\n const page = await queryFn(\n queryFnContext\n );\n const { maxPages } = context.options;\n const addTo = previous ? addToStart : addToEnd;\n return {\n pages: addTo(data.pages, page, maxPages),\n pageParams: addTo(data.pageParams, param, maxPages)\n };\n };\n let result;\n if (direction && oldPages.length) {\n const previous = direction === \"backward\";\n const pageParamFn = previous ? getPreviousPageParam : getNextPageParam;\n const oldData = {\n pages: oldPages,\n pageParams: oldPageParams\n };\n const param = pageParamFn(options, oldData);\n result = await fetchPage(oldData, param, previous);\n } else {\n result = await fetchPage(\n empty,\n oldPageParams[0] ?? options.initialPageParam\n );\n const remainingPages = pages ?? oldPages.length;\n for (let i = 1; i < remainingPages; i++) {\n const param = getNextPageParam(options, result);\n if (param == null) {\n break;\n }\n result = await fetchPage(result, param);\n }\n }\n return result;\n };\n if (context.options.persister) {\n context.fetchFn = () => {\n return context.options.persister?.(\n fetchFn,\n {\n queryKey: context.queryKey,\n meta: context.options.meta,\n signal: context.signal\n },\n query\n );\n };\n } else {\n context.fetchFn = fetchFn;\n }\n }\n };\n}\nfunction getNextPageParam(options, { pages, pageParams }) {\n const lastIndex = pages.length - 1;\n return pages.length > 0 ? options.getNextPageParam(\n pages[lastIndex],\n pages,\n pageParams[lastIndex],\n pageParams\n ) : void 0;\n}\nfunction getPreviousPageParam(options, { pages, pageParams }) {\n return pages.length > 0 ? options.getPreviousPageParam?.(pages[0], pages, pageParams[0], pageParams) : void 0;\n}\nfunction hasNextPage(options, data) {\n if (!data)\n return false;\n return getNextPageParam(options, data) != null;\n}\nfunction hasPreviousPage(options, data) {\n if (!data || !options.getPreviousPageParam)\n return false;\n return getPreviousPageParam(options, data) != null;\n}\nexport {\n hasNextPage,\n hasPreviousPage,\n infiniteQueryBehavior\n};\n//# sourceMappingURL=infiniteQueryBehavior.js.map","// src/queryClient.ts\nimport {\n functionalUpdate,\n hashKey,\n hashQueryKeyByOptions,\n noop,\n partialMatchKey,\n resolveStaleTime,\n skipToken\n} from \"./utils.js\";\nimport { QueryCache } from \"./queryCache.js\";\nimport { MutationCache } from \"./mutationCache.js\";\nimport { focusManager } from \"./focusManager.js\";\nimport { onlineManager } from \"./onlineManager.js\";\nimport { notifyManager } from \"./notifyManager.js\";\nimport { infiniteQueryBehavior } from \"./infiniteQueryBehavior.js\";\nvar QueryClient = class {\n #queryCache;\n #mutationCache;\n #defaultOptions;\n #queryDefaults;\n #mutationDefaults;\n #mountCount;\n #unsubscribeFocus;\n #unsubscribeOnline;\n constructor(config = {}) {\n this.#queryCache = config.queryCache || new QueryCache();\n this.#mutationCache = config.mutationCache || new MutationCache();\n this.#defaultOptions = config.defaultOptions || {};\n this.#queryDefaults = /* @__PURE__ */ new Map();\n this.#mutationDefaults = /* @__PURE__ */ new Map();\n this.#mountCount = 0;\n }\n mount() {\n this.#mountCount++;\n if (this.#mountCount !== 1)\n return;\n this.#unsubscribeFocus = focusManager.subscribe(async (focused) => {\n if (focused) {\n await this.resumePausedMutations();\n this.#queryCache.onFocus();\n }\n });\n this.#unsubscribeOnline = onlineManager.subscribe(async (online) => {\n if (online) {\n await this.resumePausedMutations();\n this.#queryCache.onOnline();\n }\n });\n }\n unmount() {\n this.#mountCount--;\n if (this.#mountCount !== 0)\n return;\n this.#unsubscribeFocus?.();\n this.#unsubscribeFocus = void 0;\n this.#unsubscribeOnline?.();\n this.#unsubscribeOnline = void 0;\n }\n isFetching(filters) {\n return this.#queryCache.findAll({ ...filters, fetchStatus: \"fetching\" }).length;\n }\n isMutating(filters) {\n return this.#mutationCache.findAll({ ...filters, status: \"pending\" }).length;\n }\n getQueryData(queryKey) {\n const options = this.defaultQueryOptions({ queryKey });\n return this.#queryCache.get(options.queryHash)?.state.data;\n }\n ensureQueryData(options) {\n const cachedData = this.getQueryData(options.queryKey);\n if (cachedData === void 0)\n return this.fetchQuery(options);\n else {\n const defaultedOptions = this.defaultQueryOptions(options);\n const query = this.#queryCache.build(this, defaultedOptions);\n if (options.revalidateIfStale && query.isStaleByTime(resolveStaleTime(defaultedOptions.staleTime, query))) {\n void this.prefetchQuery(defaultedOptions);\n }\n return Promise.resolve(cachedData);\n }\n }\n getQueriesData(filters) {\n return this.#queryCache.findAll(filters).map(({ queryKey, state }) => {\n const data = state.data;\n return [queryKey, data];\n });\n }\n setQueryData(queryKey, updater, options) {\n const defaultedOptions = this.defaultQueryOptions({ queryKey });\n const query = this.#queryCache.get(\n defaultedOptions.queryHash\n );\n const prevData = query?.state.data;\n const data = functionalUpdate(updater, prevData);\n if (data === void 0) {\n return void 0;\n }\n return this.#queryCache.build(this, defaultedOptions).setData(data, { ...options, manual: true });\n }\n setQueriesData(filters, updater, options) {\n return notifyManager.batch(\n () => this.#queryCache.findAll(filters).map(({ queryKey }) => [\n queryKey,\n this.setQueryData(queryKey, updater, options)\n ])\n );\n }\n getQueryState(queryKey) {\n const options = this.defaultQueryOptions({ queryKey });\n return this.#queryCache.get(options.queryHash)?.state;\n }\n removeQueries(filters) {\n const queryCache = this.#queryCache;\n notifyManager.batch(() => {\n queryCache.findAll(filters).forEach((query) => {\n queryCache.remove(query);\n });\n });\n }\n resetQueries(filters, options) {\n const queryCache = this.#queryCache;\n const refetchFilters = {\n type: \"active\",\n ...filters\n };\n return notifyManager.batch(() => {\n queryCache.findAll(filters).forEach((query) => {\n query.reset();\n });\n return this.refetchQueries(refetchFilters, options);\n });\n }\n cancelQueries(filters = {}, cancelOptions = {}) {\n const defaultedCancelOptions = { revert: true, ...cancelOptions };\n const promises = notifyManager.batch(\n () => this.#queryCache.findAll(filters).map((query) => query.cancel(defaultedCancelOptions))\n );\n return Promise.all(promises).then(noop).catch(noop);\n }\n invalidateQueries(filters = {}, options = {}) {\n return notifyManager.batch(() => {\n this.#queryCache.findAll(filters).forEach((query) => {\n query.invalidate();\n });\n if (filters.refetchType === \"none\") {\n return Promise.resolve();\n }\n const refetchFilters = {\n ...filters,\n type: filters.refetchType ?? filters.type ?? \"active\"\n };\n return this.refetchQueries(refetchFilters, options);\n });\n }\n refetchQueries(filters = {}, options) {\n const fetchOptions = {\n ...options,\n cancelRefetch: options?.cancelRefetch ?? true\n };\n const promises = notifyManager.batch(\n () => this.#queryCache.findAll(filters).filter((query) => !query.isDisabled()).map((query) => {\n let promise = query.fetch(void 0, fetchOptions);\n if (!fetchOptions.throwOnError) {\n promise = promise.catch(noop);\n }\n return query.state.fetchStatus === \"paused\" ? Promise.resolve() : promise;\n })\n );\n return Promise.all(promises).then(noop);\n }\n fetchQuery(options) {\n const defaultedOptions = this.defaultQueryOptions(options);\n if (defaultedOptions.retry === void 0) {\n defaultedOptions.retry = false;\n }\n const query = this.#queryCache.build(this, defaultedOptions);\n return query.isStaleByTime(\n resolveStaleTime(defaultedOptions.staleTime, query)\n ) ? query.fetch(defaultedOptions) : Promise.resolve(query.state.data);\n }\n prefetchQuery(options) {\n return this.fetchQuery(options).then(noop).catch(noop);\n }\n fetchInfiniteQuery(options) {\n options.behavior = infiniteQueryBehavior(options.pages);\n return this.fetchQuery(options);\n }\n prefetchInfiniteQuery(options) {\n return this.fetchInfiniteQuery(options).then(noop).catch(noop);\n }\n resumePausedMutations() {\n if (onlineManager.isOnline()) {\n return this.#mutationCache.resumePausedMutations();\n }\n return Promise.resolve();\n }\n getQueryCache() {\n return this.#queryCache;\n }\n getMutationCache() {\n return this.#mutationCache;\n }\n getDefaultOptions() {\n return this.#defaultOptions;\n }\n setDefaultOptions(options) {\n this.#defaultOptions = options;\n }\n setQueryDefaults(queryKey, options) {\n this.#queryDefaults.set(hashKey(queryKey), {\n queryKey,\n defaultOptions: options\n });\n }\n getQueryDefaults(queryKey) {\n const defaults = [...this.#queryDefaults.values()];\n let result = {};\n defaults.forEach((queryDefault) => {\n if (partialMatchKey(queryKey, queryDefault.queryKey)) {\n result = { ...result, ...queryDefault.defaultOptions };\n }\n });\n return result;\n }\n setMutationDefaults(mutationKey, options) {\n this.#mutationDefaults.set(hashKey(mutationKey), {\n mutationKey,\n defaultOptions: options\n });\n }\n getMutationDefaults(mutationKey) {\n const defaults = [...this.#mutationDefaults.values()];\n let result = {};\n defaults.forEach((queryDefault) => {\n if (partialMatchKey(mutationKey, queryDefault.mutationKey)) {\n result = { ...result, ...queryDefault.defaultOptions };\n }\n });\n return result;\n }\n defaultQueryOptions(options) {\n if (options._defaulted) {\n return options;\n }\n const defaultedOptions = {\n ...this.#defaultOptions.queries,\n ...this.getQueryDefaults(options.queryKey),\n ...options,\n _defaulted: true\n };\n if (!defaultedOptions.queryHash) {\n defaultedOptions.queryHash = hashQueryKeyByOptions(\n defaultedOptions.queryKey,\n defaultedOptions\n );\n }\n if (defaultedOptions.refetchOnReconnect === void 0) {\n defaultedOptions.refetchOnReconnect = defaultedOptions.networkMode !== \"always\";\n }\n if (defaultedOptions.throwOnError === void 0) {\n defaultedOptions.throwOnError = !!defaultedOptions.suspense;\n }\n if (!defaultedOptions.networkMode && defaultedOptions.persister) {\n defaultedOptions.networkMode = \"offlineFirst\";\n }\n if (defaultedOptions.enabled !== true && defaultedOptions.queryFn === skipToken) {\n defaultedOptions.enabled = false;\n }\n return defaultedOptions;\n }\n defaultMutationOptions(options) {\n if (options?._defaulted) {\n return options;\n }\n return {\n ...this.#defaultOptions.mutations,\n ...options?.mutationKey && this.getMutationDefaults(options.mutationKey),\n ...options,\n _defaulted: true\n };\n }\n clear() {\n this.#queryCache.clear();\n this.#mutationCache.clear();\n }\n};\nexport {\n QueryClient\n};\n//# sourceMappingURL=queryClient.js.map","// src/queryObserver.ts\nimport {\n isServer,\n isValidTimeout,\n noop,\n replaceData,\n resolveEnabled,\n resolveStaleTime,\n shallowEqualObjects,\n timeUntilStale\n} from \"./utils.js\";\nimport { notifyManager } from \"./notifyManager.js\";\nimport { focusManager } from \"./focusManager.js\";\nimport { Subscribable } from \"./subscribable.js\";\nimport { fetchState } from \"./query.js\";\nvar QueryObserver = class extends Subscribable {\n constructor(client, options) {\n super();\n this.options = options;\n this.#client = client;\n this.#selectError = null;\n this.bindMethods();\n this.setOptions(options);\n }\n #client;\n #currentQuery = void 0;\n #currentQueryInitialState = void 0;\n #currentResult = void 0;\n #currentResultState;\n #currentResultOptions;\n #selectError;\n #selectFn;\n #selectResult;\n // This property keeps track of the last query with defined data.\n // It will be used to pass the previous data and query to the placeholder function between renders.\n #lastQueryWithDefinedData;\n #staleTimeoutId;\n #refetchIntervalId;\n #currentRefetchInterval;\n #trackedProps = /* @__PURE__ */ new Set();\n bindMethods() {\n this.refetch = this.refetch.bind(this);\n }\n onSubscribe() {\n if (this.listeners.size === 1) {\n this.#currentQuery.addObserver(this);\n if (shouldFetchOnMount(this.#currentQuery, this.options)) {\n this.#executeFetch();\n } else {\n this.updateResult();\n }\n this.#updateTimers();\n }\n }\n onUnsubscribe() {\n if (!this.hasListeners()) {\n this.destroy();\n }\n }\n shouldFetchOnReconnect() {\n return shouldFetchOn(\n this.#currentQuery,\n this.options,\n this.options.refetchOnReconnect\n );\n }\n shouldFetchOnWindowFocus() {\n return shouldFetchOn(\n this.#currentQuery,\n this.options,\n this.options.refetchOnWindowFocus\n );\n }\n destroy() {\n this.listeners = /* @__PURE__ */ new Set();\n this.#clearStaleTimeout();\n this.#clearRefetchInterval();\n this.#currentQuery.removeObserver(this);\n }\n setOptions(options, notifyOptions) {\n const prevOptions = this.options;\n const prevQuery = this.#currentQuery;\n this.options = this.#client.defaultQueryOptions(options);\n if (this.options.enabled !== void 0 && typeof this.options.enabled !== \"boolean\" && typeof this.options.enabled !== \"function\" && typeof resolveEnabled(this.options.enabled, this.#currentQuery) !== \"boolean\") {\n throw new Error(\n \"Expected enabled to be a boolean or a callback that returns a boolean\"\n );\n }\n this.#updateQuery();\n this.#currentQuery.setOptions(this.options);\n if (prevOptions._defaulted && !shallowEqualObjects(this.options, prevOptions)) {\n this.#client.getQueryCache().notify({\n type: \"observerOptionsUpdated\",\n query: this.#currentQuery,\n observer: this\n });\n }\n const mounted = this.hasListeners();\n if (mounted && shouldFetchOptionally(\n this.#currentQuery,\n prevQuery,\n this.options,\n prevOptions\n )) {\n this.#executeFetch();\n }\n this.updateResult(notifyOptions);\n if (mounted && (this.#currentQuery !== prevQuery || resolveEnabled(this.options.enabled, this.#currentQuery) !== resolveEnabled(prevOptions.enabled, this.#currentQuery) || resolveStaleTime(this.options.staleTime, this.#currentQuery) !== resolveStaleTime(prevOptions.staleTime, this.#currentQuery))) {\n this.#updateStaleTimeout();\n }\n const nextRefetchInterval = this.#computeRefetchInterval();\n if (mounted && (this.#currentQuery !== prevQuery || resolveEnabled(this.options.enabled, this.#currentQuery) !== resolveEnabled(prevOptions.enabled, this.#currentQuery) || nextRefetchInterval !== this.#currentRefetchInterval)) {\n this.#updateRefetchInterval(nextRefetchInterval);\n }\n }\n getOptimisticResult(options) {\n const query = this.#client.getQueryCache().build(this.#client, options);\n const result = this.createResult(query, options);\n if (shouldAssignObserverCurrentProperties(this, result)) {\n this.#currentResult = result;\n this.#currentResultOptions = this.options;\n this.#currentResultState = this.#currentQuery.state;\n }\n return result;\n }\n getCurrentResult() {\n return this.#currentResult;\n }\n trackResult(result, onPropTracked) {\n const trackedResult = {};\n Object.keys(result).forEach((key) => {\n Object.defineProperty(trackedResult, key, {\n configurable: false,\n enumerable: true,\n get: () => {\n this.trackProp(key);\n onPropTracked?.(key);\n return result[key];\n }\n });\n });\n return trackedResult;\n }\n trackProp(key) {\n this.#trackedProps.add(key);\n }\n getCurrentQuery() {\n return this.#currentQuery;\n }\n refetch({ ...options } = {}) {\n return this.fetch({\n ...options\n });\n }\n fetchOptimistic(options) {\n const defaultedOptions = this.#client.defaultQueryOptions(options);\n const query = this.#client.getQueryCache().build(this.#client, defaultedOptions);\n query.isFetchingOptimistic = true;\n return query.fetch().then(() => this.createResult(query, defaultedOptions));\n }\n fetch(fetchOptions) {\n return this.#executeFetch({\n ...fetchOptions,\n cancelRefetch: fetchOptions.cancelRefetch ?? true\n }).then(() => {\n this.updateResult();\n return this.#currentResult;\n });\n }\n #executeFetch(fetchOptions) {\n this.#updateQuery();\n let promise = this.#currentQuery.fetch(\n this.options,\n fetchOptions\n );\n if (!fetchOptions?.throwOnError) {\n promise = promise.catch(noop);\n }\n return promise;\n }\n #updateStaleTimeout() {\n this.#clearStaleTimeout();\n const staleTime = resolveStaleTime(\n this.options.staleTime,\n this.#currentQuery\n );\n if (isServer || this.#currentResult.isStale || !isValidTimeout(staleTime)) {\n return;\n }\n const time = timeUntilStale(this.#currentResult.dataUpdatedAt, staleTime);\n const timeout = time + 1;\n this.#staleTimeoutId = setTimeout(() => {\n if (!this.#currentResult.isStale) {\n this.updateResult();\n }\n }, timeout);\n }\n #computeRefetchInterval() {\n return (typeof this.options.refetchInterval === \"function\" ? this.options.refetchInterval(this.#currentQuery) : this.options.refetchInterval) ?? false;\n }\n #updateRefetchInterval(nextInterval) {\n this.#clearRefetchInterval();\n this.#currentRefetchInterval = nextInterval;\n if (isServer || resolveEnabled(this.options.enabled, this.#currentQuery) === false || !isValidTimeout(this.#currentRefetchInterval) || this.#currentRefetchInterval === 0) {\n return;\n }\n this.#refetchIntervalId = setInterval(() => {\n if (this.options.refetchIntervalInBackground || focusManager.isFocused()) {\n this.#executeFetch();\n }\n }, this.#currentRefetchInterval);\n }\n #updateTimers() {\n this.#updateStaleTimeout();\n this.#updateRefetchInterval(this.#computeRefetchInterval());\n }\n #clearStaleTimeout() {\n if (this.#staleTimeoutId) {\n clearTimeout(this.#staleTimeoutId);\n this.#staleTimeoutId = void 0;\n }\n }\n #clearRefetchInterval() {\n if (this.#refetchIntervalId) {\n clearInterval(this.#refetchIntervalId);\n this.#refetchIntervalId = void 0;\n }\n }\n createResult(query, options) {\n const prevQuery = this.#currentQuery;\n const prevOptions = this.options;\n const prevResult = this.#currentResult;\n const prevResultState = this.#currentResultState;\n const prevResultOptions = this.#currentResultOptions;\n const queryChange = query !== prevQuery;\n const queryInitialState = queryChange ? query.state : this.#currentQueryInitialState;\n const { state } = query;\n let newState = { ...state };\n let isPlaceholderData = false;\n let data;\n if (options._optimisticResults) {\n const mounted = this.hasListeners();\n const fetchOnMount = !mounted && shouldFetchOnMount(query, options);\n const fetchOptionally = mounted && shouldFetchOptionally(query, prevQuery, options, prevOptions);\n if (fetchOnMount || fetchOptionally) {\n newState = {\n ...newState,\n ...fetchState(state.data, query.options)\n };\n }\n if (options._optimisticResults === \"isRestoring\") {\n newState.fetchStatus = \"idle\";\n }\n }\n let { error, errorUpdatedAt, status } = newState;\n if (options.select && newState.data !== void 0) {\n if (prevResult && newState.data === prevResultState?.data && options.select === this.#selectFn) {\n data = this.#selectResult;\n } else {\n try {\n this.#selectFn = options.select;\n data = options.select(newState.data);\n data = replaceData(prevResult?.data, data, options);\n this.#selectResult = data;\n this.#selectError = null;\n } catch (selectError) {\n this.#selectError = selectError;\n }\n }\n } else {\n data = newState.data;\n }\n if (options.placeholderData !== void 0 && data === void 0 && status === \"pending\") {\n let placeholderData;\n if (prevResult?.isPlaceholderData && options.placeholderData === prevResultOptions?.placeholderData) {\n placeholderData = prevResult.data;\n } else {\n placeholderData = typeof options.placeholderData === \"function\" ? options.placeholderData(\n this.#lastQueryWithDefinedData?.state.data,\n this.#lastQueryWithDefinedData\n ) : options.placeholderData;\n if (options.select && placeholderData !== void 0) {\n try {\n placeholderData = options.select(placeholderData);\n this.#selectError = null;\n } catch (selectError) {\n this.#selectError = selectError;\n }\n }\n }\n if (placeholderData !== void 0) {\n status = \"success\";\n data = replaceData(\n prevResult?.data,\n placeholderData,\n options\n );\n isPlaceholderData = true;\n }\n }\n if (this.#selectError) {\n error = this.#selectError;\n data = this.#selectResult;\n errorUpdatedAt = Date.now();\n status = \"error\";\n }\n const isFetching = newState.fetchStatus === \"fetching\";\n const isPending = status === \"pending\";\n const isError = status === \"error\";\n const isLoading = isPending && isFetching;\n const hasData = data !== void 0;\n const result = {\n status,\n fetchStatus: newState.fetchStatus,\n isPending,\n isSuccess: status === \"success\",\n isError,\n isInitialLoading: isLoading,\n isLoading,\n data,\n dataUpdatedAt: newState.dataUpdatedAt,\n error,\n errorUpdatedAt,\n failureCount: newState.fetchFailureCount,\n failureReason: newState.fetchFailureReason,\n errorUpdateCount: newState.errorUpdateCount,\n isFetched: newState.dataUpdateCount > 0 || newState.errorUpdateCount > 0,\n isFetchedAfterMount: newState.dataUpdateCount > queryInitialState.dataUpdateCount || newState.errorUpdateCount > queryInitialState.errorUpdateCount,\n isFetching,\n isRefetching: isFetching && !isPending,\n isLoadingError: isError && !hasData,\n isPaused: newState.fetchStatus === \"paused\",\n isPlaceholderData,\n isRefetchError: isError && hasData,\n isStale: isStale(query, options),\n refetch: this.refetch\n };\n return result;\n }\n updateResult(notifyOptions) {\n const prevResult = this.#currentResult;\n const nextResult = this.createResult(this.#currentQuery, this.options);\n this.#currentResultState = this.#currentQuery.state;\n this.#currentResultOptions = this.options;\n if (this.#currentResultState.data !== void 0) {\n this.#lastQueryWithDefinedData = this.#currentQuery;\n }\n if (shallowEqualObjects(nextResult, prevResult)) {\n return;\n }\n this.#currentResult = nextResult;\n const defaultNotifyOptions = {};\n const shouldNotifyListeners = () => {\n if (!prevResult) {\n return true;\n }\n const { notifyOnChangeProps } = this.options;\n const notifyOnChangePropsValue = typeof notifyOnChangeProps === \"function\" ? notifyOnChangeProps() : notifyOnChangeProps;\n if (notifyOnChangePropsValue === \"all\" || !notifyOnChangePropsValue && !this.#trackedProps.size) {\n return true;\n }\n const includedProps = new Set(\n notifyOnChangePropsValue ?? this.#trackedProps\n );\n if (this.options.throwOnError) {\n includedProps.add(\"error\");\n }\n return Object.keys(this.#currentResult).some((key) => {\n const typedKey = key;\n const changed = this.#currentResult[typedKey] !== prevResult[typedKey];\n return changed && includedProps.has(typedKey);\n });\n };\n if (notifyOptions?.listeners !== false && shouldNotifyListeners()) {\n defaultNotifyOptions.listeners = true;\n }\n this.#notify({ ...defaultNotifyOptions, ...notifyOptions });\n }\n #updateQuery() {\n const query = this.#client.getQueryCache().build(this.#client, this.options);\n if (query === this.#currentQuery) {\n return;\n }\n const prevQuery = this.#currentQuery;\n this.#currentQuery = query;\n this.#currentQueryInitialState = query.state;\n if (this.hasListeners()) {\n prevQuery?.removeObserver(this);\n query.addObserver(this);\n }\n }\n onQueryUpdate() {\n this.updateResult();\n if (this.hasListeners()) {\n this.#updateTimers();\n }\n }\n #notify(notifyOptions) {\n notifyManager.batch(() => {\n if (notifyOptions.listeners) {\n this.listeners.forEach((listener) => {\n listener(this.#currentResult);\n });\n }\n this.#client.getQueryCache().notify({\n query: this.#currentQuery,\n type: \"observerResultsUpdated\"\n });\n });\n }\n};\nfunction shouldLoadOnMount(query, options) {\n return resolveEnabled(options.enabled, query) !== false && query.state.data === void 0 && !(query.state.status === \"error\" && options.retryOnMount === false);\n}\nfunction shouldFetchOnMount(query, options) {\n return shouldLoadOnMount(query, options) || query.state.data !== void 0 && shouldFetchOn(query, options, options.refetchOnMount);\n}\nfunction shouldFetchOn(query, options, field) {\n if (resolveEnabled(options.enabled, query) !== false) {\n const value = typeof field === \"function\" ? field(query) : field;\n return value === \"always\" || value !== false && isStale(query, options);\n }\n return false;\n}\nfunction shouldFetchOptionally(query, prevQuery, options, prevOptions) {\n return (query !== prevQuery || resolveEnabled(prevOptions.enabled, query) === false) && (!options.suspense || query.state.status !== \"error\") && isStale(query, options);\n}\nfunction isStale(query, options) {\n return resolveEnabled(options.enabled, query) !== false && query.isStaleByTime(resolveStaleTime(options.staleTime, query));\n}\nfunction shouldAssignObserverCurrentProperties(observer, optimisticResult) {\n if (!shallowEqualObjects(observer.getCurrentResult(), optimisticResult)) {\n return true;\n }\n return false;\n}\nexport {\n QueryObserver\n};\n//# sourceMappingURL=queryObserver.js.map","// src/removable.ts\nimport { isServer, isValidTimeout } from \"./utils.js\";\nvar Removable = class {\n #gcTimeout;\n destroy() {\n this.clearGcTimeout();\n }\n scheduleGc() {\n this.clearGcTimeout();\n if (isValidTimeout(this.gcTime)) {\n this.#gcTimeout = setTimeout(() => {\n this.optionalRemove();\n }, this.gcTime);\n }\n }\n updateGcTime(newGcTime) {\n this.gcTime = Math.max(\n this.gcTime || 0,\n newGcTime ?? (isServer ? Infinity : 5 * 60 * 1e3)\n );\n }\n clearGcTimeout() {\n if (this.#gcTimeout) {\n clearTimeout(this.#gcTimeout);\n this.#gcTimeout = void 0;\n }\n }\n};\nexport {\n Removable\n};\n//# sourceMappingURL=removable.js.map","// src/retryer.ts\nimport { focusManager } from \"./focusManager.js\";\nimport { onlineManager } from \"./onlineManager.js\";\nimport { isServer, sleep } from \"./utils.js\";\nfunction defaultRetryDelay(failureCount) {\n return Math.min(1e3 * 2 ** failureCount, 3e4);\n}\nfunction canFetch(networkMode) {\n return (networkMode ?? \"online\") === \"online\" ? onlineManager.isOnline() : true;\n}\nvar CancelledError = class extends Error {\n constructor(options) {\n super(\"CancelledError\");\n this.revert = options?.revert;\n this.silent = options?.silent;\n }\n};\nfunction isCancelledError(value) {\n return value instanceof CancelledError;\n}\nfunction createRetryer(config) {\n let isRetryCancelled = false;\n let failureCount = 0;\n let isResolved = false;\n let continueFn;\n let promiseResolve;\n let promiseReject;\n const promise = new Promise((outerResolve, outerReject) => {\n promiseResolve = outerResolve;\n promiseReject = outerReject;\n });\n const cancel = (cancelOptions) => {\n if (!isResolved) {\n reject(new CancelledError(cancelOptions));\n config.abort?.();\n }\n };\n const cancelRetry = () => {\n isRetryCancelled = true;\n };\n const continueRetry = () => {\n isRetryCancelled = false;\n };\n const canContinue = () => focusManager.isFocused() && (config.networkMode === \"always\" || onlineManager.isOnline()) && config.canRun();\n const canStart = () => canFetch(config.networkMode) && config.canRun();\n const resolve = (value) => {\n if (!isResolved) {\n isResolved = true;\n config.onSuccess?.(value);\n continueFn?.();\n promiseResolve(value);\n }\n };\n const reject = (value) => {\n if (!isResolved) {\n isResolved = true;\n config.onError?.(value);\n continueFn?.();\n promiseReject(value);\n }\n };\n const pause = () => {\n return new Promise((continueResolve) => {\n continueFn = (value) => {\n if (isResolved || canContinue()) {\n continueResolve(value);\n }\n };\n config.onPause?.();\n }).then(() => {\n continueFn = void 0;\n if (!isResolved) {\n config.onContinue?.();\n }\n });\n };\n const run = () => {\n if (isResolved) {\n return;\n }\n let promiseOrValue;\n const initialPromise = failureCount === 0 ? config.initialPromise : void 0;\n try {\n promiseOrValue = initialPromise ?? config.fn();\n } catch (error) {\n promiseOrValue = Promise.reject(error);\n }\n Promise.resolve(promiseOrValue).then(resolve).catch((error) => {\n if (isResolved) {\n return;\n }\n const retry = config.retry ?? (isServer ? 0 : 3);\n const retryDelay = config.retryDelay ?? defaultRetryDelay;\n const delay = typeof retryDelay === \"function\" ? retryDelay(failureCount, error) : retryDelay;\n const shouldRetry = retry === true || typeof retry === \"number\" && failureCount < retry || typeof retry === \"function\" && retry(failureCount, error);\n if (isRetryCancelled || !shouldRetry) {\n reject(error);\n return;\n }\n failureCount++;\n config.onFail?.(failureCount, error);\n sleep(delay).then(() => {\n return canContinue() ? void 0 : pause();\n }).then(() => {\n if (isRetryCancelled) {\n reject(error);\n } else {\n run();\n }\n });\n });\n };\n return {\n promise,\n cancel,\n continue: () => {\n continueFn?.();\n return promise;\n },\n cancelRetry,\n continueRetry,\n canStart,\n start: () => {\n if (canStart()) {\n run();\n } else {\n pause().then(run);\n }\n return promise;\n }\n };\n}\nexport {\n CancelledError,\n canFetch,\n createRetryer,\n isCancelledError\n};\n//# sourceMappingURL=retryer.js.map","// src/subscribable.ts\nvar Subscribable = class {\n constructor() {\n this.listeners = /* @__PURE__ */ new Set();\n this.subscribe = this.subscribe.bind(this);\n }\n subscribe(listener) {\n this.listeners.add(listener);\n this.onSubscribe();\n return () => {\n this.listeners.delete(listener);\n this.onUnsubscribe();\n };\n }\n hasListeners() {\n return this.listeners.size > 0;\n }\n onSubscribe() {\n }\n onUnsubscribe() {\n }\n};\nexport {\n Subscribable\n};\n//# sourceMappingURL=subscribable.js.map","// src/utils.ts\nvar isServer = typeof window === \"undefined\" || \"Deno\" in globalThis;\nfunction noop() {\n return void 0;\n}\nfunction functionalUpdate(updater, input) {\n return typeof updater === \"function\" ? updater(input) : updater;\n}\nfunction isValidTimeout(value) {\n return typeof value === \"number\" && value >= 0 && value !== Infinity;\n}\nfunction timeUntilStale(updatedAt, staleTime) {\n return Math.max(updatedAt + (staleTime || 0) - Date.now(), 0);\n}\nfunction resolveStaleTime(staleTime, query) {\n return typeof staleTime === \"function\" ? staleTime(query) : staleTime;\n}\nfunction resolveEnabled(enabled, query) {\n return typeof enabled === \"function\" ? enabled(query) : enabled;\n}\nfunction matchQuery(filters, query) {\n const {\n type = \"all\",\n exact,\n fetchStatus,\n predicate,\n queryKey,\n stale\n } = filters;\n if (queryKey) {\n if (exact) {\n if (query.queryHash !== hashQueryKeyByOptions(queryKey, query.options)) {\n return false;\n }\n } else if (!partialMatchKey(query.queryKey, queryKey)) {\n return false;\n }\n }\n if (type !== \"all\") {\n const isActive = query.isActive();\n if (type === \"active\" && !isActive) {\n return false;\n }\n if (type === \"inactive\" && isActive) {\n return false;\n }\n }\n if (typeof stale === \"boolean\" && query.isStale() !== stale) {\n return false;\n }\n if (fetchStatus && fetchStatus !== query.state.fetchStatus) {\n return false;\n }\n if (predicate && !predicate(query)) {\n return false;\n }\n return true;\n}\nfunction matchMutation(filters, mutation) {\n const { exact, status, predicate, mutationKey } = filters;\n if (mutationKey) {\n if (!mutation.options.mutationKey) {\n return false;\n }\n if (exact) {\n if (hashKey(mutation.options.mutationKey) !== hashKey(mutationKey)) {\n return false;\n }\n } else if (!partialMatchKey(mutation.options.mutationKey, mutationKey)) {\n return false;\n }\n }\n if (status && mutation.state.status !== status) {\n return false;\n }\n if (predicate && !predicate(mutation)) {\n return false;\n }\n return true;\n}\nfunction hashQueryKeyByOptions(queryKey, options) {\n const hashFn = options?.queryKeyHashFn || hashKey;\n return hashFn(queryKey);\n}\nfunction hashKey(queryKey) {\n return JSON.stringify(\n queryKey,\n (_, val) => isPlainObject(val) ? Object.keys(val).sort().reduce((result, key) => {\n result[key] = val[key];\n return result;\n }, {}) : val\n );\n}\nfunction partialMatchKey(a, b) {\n if (a === b) {\n return true;\n }\n if (typeof a !== typeof b) {\n return false;\n }\n if (a && b && typeof a === \"object\" && typeof b === \"object\") {\n return !Object.keys(b).some((key) => !partialMatchKey(a[key], b[key]));\n }\n return false;\n}\nfunction replaceEqualDeep(a, b) {\n if (a === b) {\n return a;\n }\n const array = isPlainArray(a) && isPlainArray(b);\n if (array || isPlainObject(a) && isPlainObject(b)) {\n const aItems = array ? a : Object.keys(a);\n const aSize = aItems.length;\n const bItems = array ? b : Object.keys(b);\n const bSize = bItems.length;\n const copy = array ? [] : {};\n let equalItems = 0;\n for (let i = 0; i < bSize; i++) {\n const key = array ? i : bItems[i];\n if ((!array && aItems.includes(key) || array) && a[key] === void 0 && b[key] === void 0) {\n copy[key] = void 0;\n equalItems++;\n } else {\n copy[key] = replaceEqualDeep(a[key], b[key]);\n if (copy[key] === a[key] && a[key] !== void 0) {\n equalItems++;\n }\n }\n }\n return aSize === bSize && equalItems === aSize ? a : copy;\n }\n return b;\n}\nfunction shallowEqualObjects(a, b) {\n if (!b || Object.keys(a).length !== Object.keys(b).length) {\n return false;\n }\n for (const key in a) {\n if (a[key] !== b[key]) {\n return false;\n }\n }\n return true;\n}\nfunction isPlainArray(value) {\n return Array.isArray(value) && value.length === Object.keys(value).length;\n}\nfunction isPlainObject(o) {\n if (!hasObjectPrototype(o)) {\n return false;\n }\n const ctor = o.constructor;\n if (ctor === void 0) {\n return true;\n }\n const prot = ctor.prototype;\n if (!hasObjectPrototype(prot)) {\n return false;\n }\n if (!prot.hasOwnProperty(\"isPrototypeOf\")) {\n return false;\n }\n if (Object.getPrototypeOf(o) !== Object.prototype) {\n return false;\n }\n return true;\n}\nfunction hasObjectPrototype(o) {\n return Object.prototype.toString.call(o) === \"[object Object]\";\n}\nfunction sleep(timeout) {\n return new Promise((resolve) => {\n setTimeout(resolve, timeout);\n });\n}\nfunction replaceData(prevData, data, options) {\n if (typeof options.structuralSharing === \"function\") {\n return options.structuralSharing(prevData, data);\n } else if (options.structuralSharing !== false) {\n return replaceEqualDeep(prevData, data);\n }\n return data;\n}\nfunction keepPreviousData(previousData) {\n return previousData;\n}\nfunction addToEnd(items, item, max = 0) {\n const newItems = [...items, item];\n return max && newItems.length > max ? newItems.slice(1) : newItems;\n}\nfunction addToStart(items, item, max = 0) {\n const newItems = [item, ...items];\n return max && newItems.length > max ? newItems.slice(0, -1) : newItems;\n}\nvar skipToken = Symbol();\nfunction ensureQueryFn(options, fetchOptions) {\n if (process.env.NODE_ENV !== \"production\") {\n if (options.queryFn === skipToken) {\n console.error(\n `Attempted to invoke queryFn when set to skipToken. This is likely a configuration error. Query hash: '${options.queryHash}'`\n );\n }\n }\n if (!options.queryFn && fetchOptions?.initialPromise) {\n return () => fetchOptions.initialPromise;\n }\n if (!options.queryFn || options.queryFn === skipToken) {\n return () => Promise.reject(new Error(`Missing queryFn: '${options.queryHash}'`));\n }\n return options.queryFn;\n}\nexport {\n addToEnd,\n addToStart,\n ensureQueryFn,\n functionalUpdate,\n hashKey,\n hashQueryKeyByOptions,\n isPlainArray,\n isPlainObject,\n isServer,\n isValidTimeout,\n keepPreviousData,\n matchMutation,\n matchQuery,\n noop,\n partialMatchKey,\n replaceData,\n replaceEqualDeep,\n resolveEnabled,\n resolveStaleTime,\n shallowEqualObjects,\n skipToken,\n sleep,\n timeUntilStale\n};\n//# sourceMappingURL=utils.js.map","\"use client\";\n\n// src/QueryClientProvider.tsx\nimport * as React from \"react\";\nimport { jsx } from \"react/jsx-runtime\";\nvar QueryClientContext = React.createContext(\n void 0\n);\nvar useQueryClient = (queryClient) => {\n const client = React.useContext(QueryClientContext);\n if (queryClient) {\n return queryClient;\n }\n if (!client) {\n throw new Error(\"No QueryClient set, use QueryClientProvider to set one\");\n }\n return client;\n};\nvar QueryClientProvider = ({\n client,\n children\n}) => {\n React.useEffect(() => {\n client.mount();\n return () => {\n client.unmount();\n };\n }, [client]);\n return /* @__PURE__ */ jsx(QueryClientContext.Provider, { value: client, children });\n};\nexport {\n QueryClientContext,\n QueryClientProvider,\n useQueryClient\n};\n//# sourceMappingURL=QueryClientProvider.js.map","\"use client\";\n\n// src/QueryErrorResetBoundary.tsx\nimport * as React from \"react\";\nimport { jsx } from \"react/jsx-runtime\";\nfunction createValue() {\n let isReset = false;\n return {\n clearReset: () => {\n isReset = false;\n },\n reset: () => {\n isReset = true;\n },\n isReset: () => {\n return isReset;\n }\n };\n}\nvar QueryErrorResetBoundaryContext = React.createContext(createValue());\nvar useQueryErrorResetBoundary = () => React.useContext(QueryErrorResetBoundaryContext);\nvar QueryErrorResetBoundary = ({\n children\n}) => {\n const [value] = React.useState(() => createValue());\n return /* @__PURE__ */ jsx(QueryErrorResetBoundaryContext.Provider, { value, children: typeof children === \"function\" ? children(value) : children });\n};\nexport {\n QueryErrorResetBoundary,\n useQueryErrorResetBoundary\n};\n//# sourceMappingURL=QueryErrorResetBoundary.js.map","\"use client\";\n\n// src/errorBoundaryUtils.ts\nimport * as React from \"react\";\nimport { shouldThrowError } from \"./utils.js\";\nvar ensurePreventErrorBoundaryRetry = (options, errorResetBoundary) => {\n if (options.suspense || options.throwOnError) {\n if (!errorResetBoundary.isReset()) {\n options.retryOnMount = false;\n }\n }\n};\nvar useClearResetErrorBoundary = (errorResetBoundary) => {\n React.useEffect(() => {\n errorResetBoundary.clearReset();\n }, [errorResetBoundary]);\n};\nvar getHasError = ({\n result,\n errorResetBoundary,\n throwOnError,\n query\n}) => {\n return result.isError && !errorResetBoundary.isReset() && !result.isFetching && query && shouldThrowError(throwOnError, [result.error, query]);\n};\nexport {\n ensurePreventErrorBoundaryRetry,\n getHasError,\n useClearResetErrorBoundary\n};\n//# sourceMappingURL=errorBoundaryUtils.js.map","\"use client\";\n\n// src/isRestoring.ts\nimport * as React from \"react\";\nvar IsRestoringContext = React.createContext(false);\nvar useIsRestoring = () => React.useContext(IsRestoringContext);\nvar IsRestoringProvider = IsRestoringContext.Provider;\nexport {\n IsRestoringProvider,\n useIsRestoring\n};\n//# sourceMappingURL=isRestoring.js.map","// src/suspense.ts\nvar defaultThrowOnError = (_error, query) => query.state.data === void 0;\nvar ensureSuspenseTimers = (defaultedOptions) => {\n if (defaultedOptions.suspense) {\n if (typeof defaultedOptions.staleTime !== \"number\") {\n defaultedOptions.staleTime = 1e3;\n }\n if (typeof defaultedOptions.gcTime === \"number\") {\n defaultedOptions.gcTime = Math.max(defaultedOptions.gcTime, 1e3);\n }\n }\n};\nvar willFetch = (result, isRestoring) => result.isLoading && result.isFetching && !isRestoring;\nvar shouldSuspend = (defaultedOptions, result) => defaultedOptions?.suspense && result.isPending;\nvar fetchOptimistic = (defaultedOptions, observer, errorResetBoundary) => observer.fetchOptimistic(defaultedOptions).catch(() => {\n errorResetBoundary.clearReset();\n});\nexport {\n defaultThrowOnError,\n ensureSuspenseTimers,\n fetchOptimistic,\n shouldSuspend,\n willFetch\n};\n//# sourceMappingURL=suspense.js.map","// src/mutationObserver.ts\nimport { getDefaultState } from \"./mutation.js\";\nimport { notifyManager } from \"./notifyManager.js\";\nimport { Subscribable } from \"./subscribable.js\";\nimport { hashKey, shallowEqualObjects } from \"./utils.js\";\nvar MutationObserver = class extends Subscribable {\n #client;\n #currentResult = void 0;\n #currentMutation;\n #mutateOptions;\n constructor(client, options) {\n super();\n this.#client = client;\n this.setOptions(options);\n this.bindMethods();\n this.#updateResult();\n }\n bindMethods() {\n this.mutate = this.mutate.bind(this);\n this.reset = this.reset.bind(this);\n }\n setOptions(options) {\n const prevOptions = this.options;\n this.options = this.#client.defaultMutationOptions(options);\n if (!shallowEqualObjects(this.options, prevOptions)) {\n this.#client.getMutationCache().notify({\n type: \"observerOptionsUpdated\",\n mutation: this.#currentMutation,\n observer: this\n });\n }\n if (prevOptions?.mutationKey && this.options.mutationKey && hashKey(prevOptions.mutationKey) !== hashKey(this.options.mutationKey)) {\n this.reset();\n } else if (this.#currentMutation?.state.status === \"pending\") {\n this.#currentMutation.setOptions(this.options);\n }\n }\n onUnsubscribe() {\n if (!this.hasListeners()) {\n this.#currentMutation?.removeObserver(this);\n }\n }\n onMutationUpdate(action) {\n this.#updateResult();\n this.#notify(action);\n }\n getCurrentResult() {\n return this.#currentResult;\n }\n reset() {\n this.#currentMutation?.removeObserver(this);\n this.#currentMutation = void 0;\n this.#updateResult();\n this.#notify();\n }\n mutate(variables, options) {\n this.#mutateOptions = options;\n this.#currentMutation?.removeObserver(this);\n this.#currentMutation = this.#client.getMutationCache().build(this.#client, this.options);\n this.#currentMutation.addObserver(this);\n return this.#currentMutation.execute(variables);\n }\n #updateResult() {\n const state = this.#currentMutation?.state ?? getDefaultState();\n this.#currentResult = {\n ...state,\n isPending: state.status === \"pending\",\n isSuccess: state.status === \"success\",\n isError: state.status === \"error\",\n isIdle: state.status === \"idle\",\n mutate: this.mutate,\n reset: this.reset\n };\n }\n #notify(action) {\n notifyManager.batch(() => {\n if (this.#mutateOptions && this.hasListeners()) {\n const variables = this.#currentResult.variables;\n const context = this.#currentResult.context;\n if (action?.type === \"success\") {\n this.#mutateOptions.onSuccess?.(action.data, variables, context);\n this.#mutateOptions.onSettled?.(action.data, null, variables, context);\n } else if (action?.type === \"error\") {\n this.#mutateOptions.onError?.(action.error, variables, context);\n this.#mutateOptions.onSettled?.(\n void 0,\n action.error,\n variables,\n context\n );\n }\n }\n this.listeners.forEach((listener) => {\n listener(this.#currentResult);\n });\n });\n }\n};\nexport {\n MutationObserver\n};\n//# sourceMappingURL=mutationObserver.js.map","\"use client\";\n\n// src/useMutation.ts\nimport * as React from \"react\";\nimport { MutationObserver, notifyManager } from \"@tanstack/query-core\";\nimport { useQueryClient } from \"./QueryClientProvider.js\";\nimport { noop, shouldThrowError } from \"./utils.js\";\nfunction useMutation(options, queryClient) {\n const client = useQueryClient(queryClient);\n const [observer] = React.useState(\n () => new MutationObserver(\n client,\n options\n )\n );\n React.useEffect(() => {\n observer.setOptions(options);\n }, [observer, options]);\n const result = React.useSyncExternalStore(\n React.useCallback(\n (onStoreChange) => observer.subscribe(notifyManager.batchCalls(onStoreChange)),\n [observer]\n ),\n () => observer.getCurrentResult(),\n () => observer.getCurrentResult()\n );\n const mutate = React.useCallback(\n (variables, mutateOptions) => {\n observer.mutate(variables, mutateOptions).catch(noop);\n },\n [observer]\n );\n if (result.error && shouldThrowError(observer.options.throwOnError, [result.error])) {\n throw result.error;\n }\n return { ...result, mutate, mutateAsync: result.mutate };\n}\nexport {\n useMutation\n};\n//# sourceMappingURL=useMutation.js.map","\"use client\";\n\n// src/useQuery.ts\nimport { QueryObserver } from \"@tanstack/query-core\";\nimport { useBaseQuery } from \"./useBaseQuery.js\";\nfunction useQuery(options, queryClient) {\n return useBaseQuery(options, QueryObserver, queryClient);\n}\nexport {\n useQuery\n};\n//# sourceMappingURL=useQuery.js.map","\"use client\";\n\n// src/useBaseQuery.ts\nimport * as React from \"react\";\nimport { notifyManager } from \"@tanstack/query-core\";\nimport { useQueryErrorResetBoundary } from \"./QueryErrorResetBoundary.js\";\nimport { useQueryClient } from \"./QueryClientProvider.js\";\nimport { useIsRestoring } from \"./isRestoring.js\";\nimport {\n ensurePreventErrorBoundaryRetry,\n getHasError,\n useClearResetErrorBoundary\n} from \"./errorBoundaryUtils.js\";\nimport {\n ensureSuspenseTimers,\n fetchOptimistic,\n shouldSuspend\n} from \"./suspense.js\";\nfunction useBaseQuery(options, Observer, queryClient) {\n if (process.env.NODE_ENV !== \"production\") {\n if (typeof options !== \"object\" || Array.isArray(options)) {\n throw new Error(\n 'Bad argument type. Starting with v5, only the \"Object\" form is allowed when calling query related functions. Please use the error stack to find the culprit call. More info here: https://tanstack.com/query/latest/docs/react/guides/migrating-to-v5#supports-a-single-signature-one-object'\n );\n }\n }\n const client = useQueryClient(queryClient);\n const isRestoring = useIsRestoring();\n const errorResetBoundary = useQueryErrorResetBoundary();\n const defaultedOptions = client.defaultQueryOptions(options);\n client.getDefaultOptions().queries?._experimental_beforeQuery?.(\n defaultedOptions\n );\n defaultedOptions._optimisticResults = isRestoring ? \"isRestoring\" : \"optimistic\";\n ensureSuspenseTimers(defaultedOptions);\n ensurePreventErrorBoundaryRetry(defaultedOptions, errorResetBoundary);\n useClearResetErrorBoundary(errorResetBoundary);\n const [observer] = React.useState(\n () => new Observer(\n client,\n defaultedOptions\n )\n );\n const result = observer.getOptimisticResult(defaultedOptions);\n React.useSyncExternalStore(\n React.useCallback(\n (onStoreChange) => {\n const unsubscribe = isRestoring ? () => void 0 : observer.subscribe(notifyManager.batchCalls(onStoreChange));\n observer.updateResult();\n return unsubscribe;\n },\n [observer, isRestoring]\n ),\n () => observer.getCurrentResult(),\n () => observer.getCurrentResult()\n );\n React.useEffect(() => {\n observer.setOptions(defaultedOptions, { listeners: false });\n }, [defaultedOptions, observer]);\n if (shouldSuspend(defaultedOptions, result)) {\n throw fetchOptimistic(defaultedOptions, observer, errorResetBoundary);\n }\n if (getHasError({\n result,\n errorResetBoundary,\n throwOnError: defaultedOptions.throwOnError,\n query: client.getQueryCache().get(defaultedOptions.queryHash)\n })) {\n throw result.error;\n }\n ;\n client.getDefaultOptions().queries?._experimental_afterQuery?.(\n defaultedOptions,\n result\n );\n return !defaultedOptions.notifyOnChangeProps ? observer.trackResult(result) : result;\n}\nexport {\n useBaseQuery\n};\n//# sourceMappingURL=useBaseQuery.js.map","// src/utils.ts\nfunction shouldThrowError(throwError, params) {\n if (typeof throwError === \"function\") {\n return throwError(...params);\n }\n return !!throwError;\n}\nfunction noop() {\n}\nexport {\n noop,\n shouldThrowError\n};\n//# sourceMappingURL=utils.js.map","const createStoreImpl = (createState) => {\n let state;\n const listeners = /* @__PURE__ */ new Set();\n const setState = (partial, replace) => {\n const nextState = typeof partial === \"function\" ? partial(state) : partial;\n if (!Object.is(nextState, state)) {\n const previousState = state;\n state = (replace != null ? replace : typeof nextState !== \"object\" || nextState === null) ? nextState : Object.assign({}, state, nextState);\n listeners.forEach((listener) => listener(state, previousState));\n }\n };\n const getState = () => state;\n const getInitialState = () => initialState;\n const subscribe = (listener) => {\n listeners.add(listener);\n return () => listeners.delete(listener);\n };\n const destroy = () => {\n if ((import.meta.env ? import.meta.env.MODE : void 0) !== \"production\") {\n console.warn(\n \"[DEPRECATED] The `destroy` method will be unsupported in a future version. Instead use unsubscribe function returned by subscribe. Everything will be garbage-collected if store is garbage-collected.\"\n );\n }\n listeners.clear();\n };\n const api = { setState, getState, getInitialState, subscribe, destroy };\n const initialState = state = createState(setState, getState, api);\n return api;\n};\nconst createStore = (createState) => createState ? createStoreImpl(createState) : createStoreImpl;\nvar vanilla = (createState) => {\n if ((import.meta.env ? import.meta.env.MODE : void 0) !== \"production\") {\n console.warn(\n \"[DEPRECATED] Default export is deprecated. Instead use import { createStore } from 'zustand/vanilla'.\"\n );\n }\n return createStore(createState);\n};\n\nexport { createStore, vanilla as default };\n","import { createStore } from 'zustand/vanilla';\nexport * from 'zustand/vanilla';\nimport ReactExports from 'react';\nimport useSyncExternalStoreExports from 'use-sync-external-store/shim/with-selector.js';\n\nconst { useDebugValue } = ReactExports;\nconst { useSyncExternalStoreWithSelector } = useSyncExternalStoreExports;\nlet didWarnAboutEqualityFn = false;\nconst identity = (arg) => arg;\nfunction useStore(api, selector = identity, equalityFn) {\n if ((import.meta.env ? import.meta.env.MODE : void 0) !== \"production\" && equalityFn && !didWarnAboutEqualityFn) {\n console.warn(\n \"[DEPRECATED] Use `createWithEqualityFn` instead of `create` or use `useStoreWithEqualityFn` instead of `useStore`. They can be imported from 'zustand/traditional'. https://github.com/pmndrs/zustand/discussions/1937\"\n );\n didWarnAboutEqualityFn = true;\n }\n const slice = useSyncExternalStoreWithSelector(\n api.subscribe,\n api.getState,\n api.getServerState || api.getInitialState,\n selector,\n equalityFn\n );\n useDebugValue(slice);\n return slice;\n}\nconst createImpl = (createState) => {\n if ((import.meta.env ? import.meta.env.MODE : void 0) !== \"production\" && typeof createState !== \"function\") {\n console.warn(\n \"[DEPRECATED] Passing a vanilla store will be unsupported in a future version. Instead use `import { useStore } from 'zustand'`.\"\n );\n }\n const api = typeof createState === \"function\" ? createStore(createState) : createState;\n const useBoundStore = (selector, equalityFn) => useStore(api, selector, equalityFn);\n Object.assign(useBoundStore, api);\n return useBoundStore;\n};\nconst create = (createState) => createState ? createImpl(createState) : createImpl;\nvar react = (createState) => {\n if ((import.meta.env ? import.meta.env.MODE : void 0) !== \"production\") {\n console.warn(\n \"[DEPRECATED] Default export is deprecated. Instead use `import { create } from 'zustand'`.\"\n );\n }\n return create(createState);\n};\n\nexport { create, react as default, useStore };\n","const reduxImpl = (reducer, initial) => (set, _get, api) => {\n api.dispatch = (action) => {\n set((state) => reducer(state, action), false, action);\n return action;\n };\n api.dispatchFromDevtools = true;\n return { dispatch: (...a) => api.dispatch(...a), ...initial };\n};\nconst redux = reduxImpl;\n\nconst trackedConnections = /* @__PURE__ */ new Map();\nconst getTrackedConnectionState = (name) => {\n const api = trackedConnections.get(name);\n if (!api) return {};\n return Object.fromEntries(\n Object.entries(api.stores).map(([key, api2]) => [key, api2.getState()])\n );\n};\nconst extractConnectionInformation = (store, extensionConnector, options) => {\n if (store === void 0) {\n return {\n type: \"untracked\",\n connection: extensionConnector.connect(options)\n };\n }\n const existingConnection = trackedConnections.get(options.name);\n if (existingConnection) {\n return { type: \"tracked\", store, ...existingConnection };\n }\n const newConnection = {\n connection: extensionConnector.connect(options),\n stores: {}\n };\n trackedConnections.set(options.name, newConnection);\n return { type: \"tracked\", store, ...newConnection };\n};\nconst devtoolsImpl = (fn, devtoolsOptions = {}) => (set, get, api) => {\n const { enabled, anonymousActionType, store, ...options } = devtoolsOptions;\n let extensionConnector;\n try {\n extensionConnector = (enabled != null ? enabled : (import.meta.env ? import.meta.env.MODE : void 0) !== \"production\") && window.__REDUX_DEVTOOLS_EXTENSION__;\n } catch (e) {\n }\n if (!extensionConnector) {\n if ((import.meta.env ? import.meta.env.MODE : void 0) !== \"production\" && enabled) {\n console.warn(\n \"[zustand devtools middleware] Please install/enable Redux devtools extension\"\n );\n }\n return fn(set, get, api);\n }\n const { connection, ...connectionInformation } = extractConnectionInformation(store, extensionConnector, options);\n let isRecording = true;\n api.setState = (state, replace, nameOrAction) => {\n const r = set(state, replace);\n if (!isRecording) return r;\n const action = nameOrAction === void 0 ? { type: anonymousActionType || \"anonymous\" } : typeof nameOrAction === \"string\" ? { type: nameOrAction } : nameOrAction;\n if (store === void 0) {\n connection == null ? void 0 : connection.send(action, get());\n return r;\n }\n connection == null ? void 0 : connection.send(\n {\n ...action,\n type: `${store}/${action.type}`\n },\n {\n ...getTrackedConnectionState(options.name),\n [store]: api.getState()\n }\n );\n return r;\n };\n const setStateFromDevtools = (...a) => {\n const originalIsRecording = isRecording;\n isRecording = false;\n set(...a);\n isRecording = originalIsRecording;\n };\n const initialState = fn(api.setState, get, api);\n if (connectionInformation.type === \"untracked\") {\n connection == null ? void 0 : connection.init(initialState);\n } else {\n connectionInformation.stores[connectionInformation.store] = api;\n connection == null ? void 0 : connection.init(\n Object.fromEntries(\n Object.entries(connectionInformation.stores).map(([key, store2]) => [\n key,\n key === connectionInformation.store ? initialState : store2.getState()\n ])\n )\n );\n }\n if (api.dispatchFromDevtools && typeof api.dispatch === \"function\") {\n let didWarnAboutReservedActionType = false;\n const originalDispatch = api.dispatch;\n api.dispatch = (...a) => {\n if ((import.meta.env ? import.meta.env.MODE : void 0) !== \"production\" && a[0].type === \"__setState\" && !didWarnAboutReservedActionType) {\n console.warn(\n '[zustand devtools middleware] \"__setState\" action type is reserved to set state from the devtools. Avoid using it.'\n );\n didWarnAboutReservedActionType = true;\n }\n originalDispatch(...a);\n };\n }\n connection.subscribe((message) => {\n var _a;\n switch (message.type) {\n case \"ACTION\":\n if (typeof message.payload !== \"string\") {\n console.error(\n \"[zustand devtools middleware] Unsupported action format\"\n );\n return;\n }\n return parseJsonThen(\n message.payload,\n (action) => {\n if (action.type === \"__setState\") {\n if (store === void 0) {\n setStateFromDevtools(action.state);\n return;\n }\n if (Object.keys(action.state).length !== 1) {\n console.error(\n `\n [zustand devtools middleware] Unsupported __setState action format. \n When using 'store' option in devtools(), the 'state' should have only one key, which is a value of 'store' that was passed in devtools(),\n and value of this only key should be a state object. Example: { \"type\": \"__setState\", \"state\": { \"abc123Store\": { \"foo\": \"bar\" } } }\n `\n );\n }\n const stateFromDevtools = action.state[store];\n if (stateFromDevtools === void 0 || stateFromDevtools === null) {\n return;\n }\n if (JSON.stringify(api.getState()) !== JSON.stringify(stateFromDevtools)) {\n setStateFromDevtools(stateFromDevtools);\n }\n return;\n }\n if (!api.dispatchFromDevtools) return;\n if (typeof api.dispatch !== \"function\") return;\n api.dispatch(action);\n }\n );\n case \"DISPATCH\":\n switch (message.payload.type) {\n case \"RESET\":\n setStateFromDevtools(initialState);\n if (store === void 0) {\n return connection == null ? void 0 : connection.init(api.getState());\n }\n return connection == null ? void 0 : connection.init(getTrackedConnectionState(options.name));\n case \"COMMIT\":\n if (store === void 0) {\n connection == null ? void 0 : connection.init(api.getState());\n return;\n }\n return connection == null ? void 0 : connection.init(getTrackedConnectionState(options.name));\n case \"ROLLBACK\":\n return parseJsonThen(message.state, (state) => {\n if (store === void 0) {\n setStateFromDevtools(state);\n connection == null ? void 0 : connection.init(api.getState());\n return;\n }\n setStateFromDevtools(state[store]);\n connection == null ? void 0 : connection.init(getTrackedConnectionState(options.name));\n });\n case \"JUMP_TO_STATE\":\n case \"JUMP_TO_ACTION\":\n return parseJsonThen(message.state, (state) => {\n if (store === void 0) {\n setStateFromDevtools(state);\n return;\n }\n if (JSON.stringify(api.getState()) !== JSON.stringify(state[store])) {\n setStateFromDevtools(state[store]);\n }\n });\n case \"IMPORT_STATE\": {\n const { nextLiftedState } = message.payload;\n const lastComputedState = (_a = nextLiftedState.computedStates.slice(-1)[0]) == null ? void 0 : _a.state;\n if (!lastComputedState) return;\n if (store === void 0) {\n setStateFromDevtools(lastComputedState);\n } else {\n setStateFromDevtools(lastComputedState[store]);\n }\n connection == null ? void 0 : connection.send(\n null,\n // FIXME no-any\n nextLiftedState\n );\n return;\n }\n case \"PAUSE_RECORDING\":\n return isRecording = !isRecording;\n }\n return;\n }\n });\n return initialState;\n};\nconst devtools = devtoolsImpl;\nconst parseJsonThen = (stringified, f) => {\n let parsed;\n try {\n parsed = JSON.parse(stringified);\n } catch (e) {\n console.error(\n \"[zustand devtools middleware] Could not parse the received json\",\n e\n );\n }\n if (parsed !== void 0) f(parsed);\n};\n\nconst subscribeWithSelectorImpl = (fn) => (set, get, api) => {\n const origSubscribe = api.subscribe;\n api.subscribe = (selector, optListener, options) => {\n let listener = selector;\n if (optListener) {\n const equalityFn = (options == null ? void 0 : options.equalityFn) || Object.is;\n let currentSlice = selector(api.getState());\n listener = (state) => {\n const nextSlice = selector(state);\n if (!equalityFn(currentSlice, nextSlice)) {\n const previousSlice = currentSlice;\n optListener(currentSlice = nextSlice, previousSlice);\n }\n };\n if (options == null ? void 0 : options.fireImmediately) {\n optListener(currentSlice, currentSlice);\n }\n }\n return origSubscribe(listener);\n };\n const initialState = fn(set, get, api);\n return initialState;\n};\nconst subscribeWithSelector = subscribeWithSelectorImpl;\n\nconst combine = (initialState, create) => (...a) => Object.assign({}, initialState, create(...a));\n\nfunction createJSONStorage(getStorage, options) {\n let storage;\n try {\n storage = getStorage();\n } catch (e) {\n return;\n }\n const persistStorage = {\n getItem: (name) => {\n var _a;\n const parse = (str2) => {\n if (str2 === null) {\n return null;\n }\n return JSON.parse(str2, options == null ? void 0 : options.reviver);\n };\n const str = (_a = storage.getItem(name)) != null ? _a : null;\n if (str instanceof Promise) {\n return str.then(parse);\n }\n return parse(str);\n },\n setItem: (name, newValue) => storage.setItem(\n name,\n JSON.stringify(newValue, options == null ? void 0 : options.replacer)\n ),\n removeItem: (name) => storage.removeItem(name)\n };\n return persistStorage;\n}\nconst toThenable = (fn) => (input) => {\n try {\n const result = fn(input);\n if (result instanceof Promise) {\n return result;\n }\n return {\n then(onFulfilled) {\n return toThenable(onFulfilled)(result);\n },\n catch(_onRejected) {\n return this;\n }\n };\n } catch (e) {\n return {\n then(_onFulfilled) {\n return this;\n },\n catch(onRejected) {\n return toThenable(onRejected)(e);\n }\n };\n }\n};\nconst oldImpl = (config, baseOptions) => (set, get, api) => {\n let options = {\n getStorage: () => localStorage,\n serialize: JSON.stringify,\n deserialize: JSON.parse,\n partialize: (state) => state,\n version: 0,\n merge: (persistedState, currentState) => ({\n ...currentState,\n ...persistedState\n }),\n ...baseOptions\n };\n let hasHydrated = false;\n const hydrationListeners = /* @__PURE__ */ new Set();\n const finishHydrationListeners = /* @__PURE__ */ new Set();\n let storage;\n try {\n storage = options.getStorage();\n } catch (e) {\n }\n if (!storage) {\n return config(\n (...args) => {\n console.warn(\n `[zustand persist middleware] Unable to update item '${options.name}', the given storage is currently unavailable.`\n );\n set(...args);\n },\n get,\n api\n );\n }\n const thenableSerialize = toThenable(options.serialize);\n const setItem = () => {\n const state = options.partialize({ ...get() });\n let errorInSync;\n const thenable = thenableSerialize({ state, version: options.version }).then(\n (serializedValue) => storage.setItem(options.name, serializedValue)\n ).catch((e) => {\n errorInSync = e;\n });\n if (errorInSync) {\n throw errorInSync;\n }\n return thenable;\n };\n const savedSetState = api.setState;\n api.setState = (state, replace) => {\n savedSetState(state, replace);\n void setItem();\n };\n const configResult = config(\n (...args) => {\n set(...args);\n void setItem();\n },\n get,\n api\n );\n let stateFromStorage;\n const hydrate = () => {\n var _a;\n if (!storage) return;\n hasHydrated = false;\n hydrationListeners.forEach((cb) => cb(get()));\n const postRehydrationCallback = ((_a = options.onRehydrateStorage) == null ? void 0 : _a.call(options, get())) || void 0;\n return toThenable(storage.getItem.bind(storage))(options.name).then((storageValue) => {\n if (storageValue) {\n return options.deserialize(storageValue);\n }\n }).then((deserializedStorageValue) => {\n if (deserializedStorageValue) {\n if (typeof deserializedStorageValue.version === \"number\" && deserializedStorageValue.version !== options.version) {\n if (options.migrate) {\n return options.migrate(\n deserializedStorageValue.state,\n deserializedStorageValue.version\n );\n }\n console.error(\n `State loaded from storage couldn't be migrated since no migrate function was provided`\n );\n } else {\n return deserializedStorageValue.state;\n }\n }\n }).then((migratedState) => {\n var _a2;\n stateFromStorage = options.merge(\n migratedState,\n (_a2 = get()) != null ? _a2 : configResult\n );\n set(stateFromStorage, true);\n return setItem();\n }).then(() => {\n postRehydrationCallback == null ? void 0 : postRehydrationCallback(stateFromStorage, void 0);\n hasHydrated = true;\n finishHydrationListeners.forEach((cb) => cb(stateFromStorage));\n }).catch((e) => {\n postRehydrationCallback == null ? void 0 : postRehydrationCallback(void 0, e);\n });\n };\n api.persist = {\n setOptions: (newOptions) => {\n options = {\n ...options,\n ...newOptions\n };\n if (newOptions.getStorage) {\n storage = newOptions.getStorage();\n }\n },\n clearStorage: () => {\n storage == null ? void 0 : storage.removeItem(options.name);\n },\n getOptions: () => options,\n rehydrate: () => hydrate(),\n hasHydrated: () => hasHydrated,\n onHydrate: (cb) => {\n hydrationListeners.add(cb);\n return () => {\n hydrationListeners.delete(cb);\n };\n },\n onFinishHydration: (cb) => {\n finishHydrationListeners.add(cb);\n return () => {\n finishHydrationListeners.delete(cb);\n };\n }\n };\n hydrate();\n return stateFromStorage || configResult;\n};\nconst newImpl = (config, baseOptions) => (set, get, api) => {\n let options = {\n storage: createJSONStorage(() => localStorage),\n partialize: (state) => state,\n version: 0,\n merge: (persistedState, currentState) => ({\n ...currentState,\n ...persistedState\n }),\n ...baseOptions\n };\n let hasHydrated = false;\n const hydrationListeners = /* @__PURE__ */ new Set();\n const finishHydrationListeners = /* @__PURE__ */ new Set();\n let storage = options.storage;\n if (!storage) {\n return config(\n (...args) => {\n console.warn(\n `[zustand persist middleware] Unable to update item '${options.name}', the given storage is currently unavailable.`\n );\n set(...args);\n },\n get,\n api\n );\n }\n const setItem = () => {\n const state = options.partialize({ ...get() });\n return storage.setItem(options.name, {\n state,\n version: options.version\n });\n };\n const savedSetState = api.setState;\n api.setState = (state, replace) => {\n savedSetState(state, replace);\n void setItem();\n };\n const configResult = config(\n (...args) => {\n set(...args);\n void setItem();\n },\n get,\n api\n );\n api.getInitialState = () => configResult;\n let stateFromStorage;\n const hydrate = () => {\n var _a, _b;\n if (!storage) return;\n hasHydrated = false;\n hydrationListeners.forEach((cb) => {\n var _a2;\n return cb((_a2 = get()) != null ? _a2 : configResult);\n });\n const postRehydrationCallback = ((_b = options.onRehydrateStorage) == null ? void 0 : _b.call(options, (_a = get()) != null ? _a : configResult)) || void 0;\n return toThenable(storage.getItem.bind(storage))(options.name).then((deserializedStorageValue) => {\n if (deserializedStorageValue) {\n if (typeof deserializedStorageValue.version === \"number\" && deserializedStorageValue.version !== options.version) {\n if (options.migrate) {\n return options.migrate(\n deserializedStorageValue.state,\n deserializedStorageValue.version\n );\n }\n console.error(\n `State loaded from storage couldn't be migrated since no migrate function was provided`\n );\n } else {\n return deserializedStorageValue.state;\n }\n }\n }).then((migratedState) => {\n var _a2;\n stateFromStorage = options.merge(\n migratedState,\n (_a2 = get()) != null ? _a2 : configResult\n );\n set(stateFromStorage, true);\n return setItem();\n }).then(() => {\n postRehydrationCallback == null ? void 0 : postRehydrationCallback(stateFromStorage, void 0);\n stateFromStorage = get();\n hasHydrated = true;\n finishHydrationListeners.forEach((cb) => cb(stateFromStorage));\n }).catch((e) => {\n postRehydrationCallback == null ? void 0 : postRehydrationCallback(void 0, e);\n });\n };\n api.persist = {\n setOptions: (newOptions) => {\n options = {\n ...options,\n ...newOptions\n };\n if (newOptions.storage) {\n storage = newOptions.storage;\n }\n },\n clearStorage: () => {\n storage == null ? void 0 : storage.removeItem(options.name);\n },\n getOptions: () => options,\n rehydrate: () => hydrate(),\n hasHydrated: () => hasHydrated,\n onHydrate: (cb) => {\n hydrationListeners.add(cb);\n return () => {\n hydrationListeners.delete(cb);\n };\n },\n onFinishHydration: (cb) => {\n finishHydrationListeners.add(cb);\n return () => {\n finishHydrationListeners.delete(cb);\n };\n }\n };\n if (!options.skipHydration) {\n hydrate();\n }\n return stateFromStorage || configResult;\n};\nconst persistImpl = (config, baseOptions) => {\n if (\"getStorage\" in baseOptions || \"serialize\" in baseOptions || \"deserialize\" in baseOptions) {\n if ((import.meta.env ? import.meta.env.MODE : void 0) !== \"production\") {\n console.warn(\n \"[DEPRECATED] `getStorage`, `serialize` and `deserialize` options are deprecated. Use `storage` option instead.\"\n );\n }\n return oldImpl(config, baseOptions);\n }\n return newImpl(config, baseOptions);\n};\nconst persist = persistImpl;\n\nexport { combine, createJSONStorage, devtools, persist, redux, subscribeWithSelector };\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","var getProto = Object.getPrototypeOf ? (obj) => (Object.getPrototypeOf(obj)) : (obj) => (obj.__proto__);\nvar leafPrototypes;\n// create a fake namespace object\n// mode & 1: value is a module id, require it\n// mode & 2: merge all properties of value into the ns\n// mode & 4: return value when already ns object\n// mode & 16: return value when it's Promise-like\n// mode & 8|1: behave like require\n__webpack_require__.t = function(value, mode) {\n\tif(mode & 1) value = this(value);\n\tif(mode & 8) return value;\n\tif(typeof value === 'object' && value) {\n\t\tif((mode & 4) && value.__esModule) return value;\n\t\tif((mode & 16) && typeof value.then === 'function') return value;\n\t}\n\tvar ns = Object.create(null);\n\t__webpack_require__.r(ns);\n\tvar def = {};\n\tleafPrototypes = leafPrototypes || [null, getProto({}), getProto([]), getProto(getProto)];\n\tfor(var current = mode & 2 && value; typeof current == 'object' && !~leafPrototypes.indexOf(current); current = getProto(current)) {\n\t\tObject.getOwnPropertyNames(current).forEach((key) => (def[key] = () => (value[key])));\n\t}\n\tdef['default'] = () => (value);\n\t__webpack_require__.d(ns, def);\n\treturn ns;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.p = \"./\";","__webpack_require__.nc = undefined;","\n import API from \"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../node_modules/css-loader/dist/cjs.js!./index.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../node_modules/css-loader/dist/cjs.js!./index.css\";\n export default content && content.locals ? content.locals : undefined;\n","import storeLogo from \"../assets/storeLogo.svg\";\nimport { Box, Typography } from \"@mui/material\";\n\nexport const Header = () => {\n return (\n <Box\n sx={{\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n justifyContent: \"center\",\n }}\n >\n <Typography\n sx={{\n fontSize: \"34px\",\n lineHeight: \"40px\",\n fontWeight: \"600\",\n marginTop: \"16px\",\n }}\n >\n Cede Ballpit dApp\n </Typography>\n <img src={storeLogo} alt=\"Cede Store Logo\" style={{ width: \"100%\", maxWidth: \"150px\", marginTop: \"16px\" }} />\n </Box>\n );\n};\n","import { Any } from \"@cede/types\";\n\n/**\n * @description Get a nested object field value\n */\nexport function getNestedObjectFieldValue(obj: Any, path: string) {\n const pathArray = path.split(\".\");\n return pathArray.reduce((obj, key) => (obj && obj[key] !== \"undefined\" ? obj[key] : undefined), obj);\n}\n\n/**\n * @description Update a nested object field value without mutating the original object\n */\nexport function updateNestedObjectFieldValue(\n obj: Any,\n path: string,\n value: Any,\n opts: { removeIfUndefined?: boolean } = {},\n) {\n const pathArray = path.split(\".\");\n const newObject = structuredClone(obj);\n let cursor = newObject;\n\n pathArray.forEach((key, index) => {\n if (index === pathArray.length - 1) {\n if (opts.removeIfUndefined && value === undefined) {\n delete cursor[key];\n return;\n }\n cursor[key] = value;\n return;\n }\n\n if (cursor[key] === undefined) {\n cursor[key] = {};\n }\n\n cursor = cursor[key];\n });\n\n return newObject;\n}\n\n/**\n * @description Construct a nested object from a flat object\n *\n * @paths - The paths to construct the nested object: it's a mapping of the flat object keys to the nested object paths\n * @data - The flat object\n *\n * @example\n * Given pathMapping { \"d\": \"a.b.c\": } and data { d : 5 }, it should construct { a: { b: { c: 5 } } }\n */\nexport function constructNestedObjectFromFlatObject(pathMapping: Record<string, string>, data: Record<string, Any>) {\n const keys = Object.keys(pathMapping);\n return keys.reduce((acc, key) => updateNestedObjectFieldValue(acc, pathMapping[key] || \"\", data[key]), {});\n}\n","import { UntrustedApiMethods } from \"@cede/types\";\n\nexport type StoreMethodParams = Record<string, string>;\n\nexport type StoreMethodMetaData = {\n methodName: UntrustedApiMethods;\n actionName: string;\n params?: StoreMethodParams;\n apiParamsMapping?: Record<string, string>; // To map the form values to the params expected by the api\n};\n\n/**\n * @description Special type markers\n */\nexport const OPTIONAL_MARKER = \"?\";\nexport const ARRAY_MARKER = \"[]\";\nexport const SELECT_MARKER = \"|\";\n\n/**\n * @description Define the separator used to join the array values when the array param is converted to a string\n */\nexport const ARRAY_SEPARATOR = \" \";\n\n/**\n * @description This constant contains the definition of all the forms in the ballpit app. A form corresponds to a method\n * in the Cede.store untrusted API. It is used to generate the forms.\n *\n * When you add a new method you need to define:\n *\n * - The method name (you need to use the same name as the method in the Cede.store untrusted API)\n * - The action name (the name that will be displayed in the UI)\n * - The params (optional)\n * Each param has a name and a type. The type is used to cast the value to the correct type.\n * The type can be: `string`, `number`, `boolean`.\n * You can add an optional marker `?` to make the param optional.\n * You can add an optional marker `[]` to make the param an array.\n * - The apiParamsMapping (optional): This is used to map the form values to the params expected by the api. Sometimes\n * the api expects an object with nested objects, so we need to map the form (which is a flat object) to the correct nested object(s).\n */\nexport const STORE_API_METHODS: Record<string, StoreMethodMetaData[]> = {\n CONNECTION_SUITE: [\n {\n methodName: \"connect\",\n actionName: \"Connect\",\n params: {\n onboard: \"boolean\",\n callbackUrl: \"string?\",\n },\n },\n {\n methodName: \"disconnect\",\n actionName: \"Disconnect\",\n },\n ],\n PUBLIC_READ_SUITE: [\n {\n methodName: \"getMarketPairs\",\n actionName: \"Market Pairs\",\n params: {\n accountId: \"string\",\n },\n },\n {\n methodName: \"getMarketRate\",\n actionName: \"Market Rate\",\n params: {\n accountId: \"string\",\n pairSymbol: \"string\",\n },\n },\n {\n methodName: \"getNetworks\",\n actionName: \"Get Networks\",\n params: {\n accountId: \"string\",\n tokenSymbol: \"string\",\n toDeposit: \"boolean\",\n toWithdraw: \"boolean\",\n },\n apiParamsMapping: {\n accountId: \"accountId\",\n tokenSymbol: \"tokenSymbol\",\n toDeposit: \"opts.toDeposit\",\n toWithdraw: \"opts.toWithdraw\",\n },\n },\n {\n methodName: \"depositableTokens\",\n actionName: \"Depositable Tokens\",\n params: {\n accountId: \"string\",\n },\n },\n {\n methodName: \"deposit\",\n actionName: \"Deposit\",\n params: {\n accountId: \"string\",\n tokenSymbol: \"string\",\n network: \"string?\",\n },\n },\n {\n methodName: \"retrieveOrder\",\n actionName: \"Retrieve Order\",\n params: {\n accountId: \"string\",\n orderId: \"string\",\n pairSymbol: \"string\",\n },\n },\n {\n methodName: \"openOrders\",\n actionName: \"Open Orders\",\n params: {\n accountId: \"string\",\n pairSymbol: \"string\",\n since: \"number?\",\n limit: \"number?\",\n },\n },\n {\n methodName: \"supportedExchanges\",\n actionName: \"Supported Exchanges\",\n },\n {\n methodName: \"getPrices\",\n actionName: \"Get Prices\",\n },\n {\n methodName: \"getWithdrawalById\",\n actionName: \"Get Withdrawal By Id\",\n params: {\n accountId: \"string\",\n withdrawalId: \"string\",\n tokenSymbol: \"string\",\n timestamp: \"number?\",\n },\n },\n {\n methodName: \"getTradePath\",\n actionName: \"Get trade path\",\n params: {\n accountId: \"string\",\n from: \"string\",\n to: \"string\",\n },\n },\n {\n methodName: \"getSupportedTokens\",\n actionName: \"Get supported tokens\",\n params: {\n accountId: \"string\",\n network: \"string\",\n },\n },\n ],\n PRIVATE_READ_SUITE: [\n {\n methodName: \"vaults\",\n actionName: \"Vaults\",\n },\n {\n methodName: \"activeVault\",\n actionName: \"Active Vault\",\n },\n {\n methodName: \"supportedExchanges\",\n actionName: \"Supported Exchanges\",\n },\n {\n methodName: \"transactions\",\n actionName: \"Transactions\",\n params: {\n vaultId: \"string\",\n accountIds: \"string[]?\",\n tokenSymbol: \"string?\",\n txType: \"string?\",\n startTime: \"number?\",\n pageCount: \"number?\",\n pageIndex: \"number?\",\n },\n },\n {\n methodName: \"balances\",\n actionName: \"Balances\",\n params: {\n vaultId: \"string\",\n accountIds: \"string[]?\",\n },\n },\n {\n methodName: \"nfts\",\n actionName: \"NFTs\",\n params: {\n accountId: \"string\",\n },\n },\n {\n methodName: \"getMinAmounts\",\n actionName: \"Get Min Order Amounts\",\n params: {\n accountId: \"string\",\n pairSymbol: \"string\",\n orderSide: \"string\",\n price: \"string\",\n },\n },\n {\n methodName: \"withdrawableTokens\",\n actionName: \"Withdrawable Tokens\",\n params: {\n accountId: \"string\",\n network: \"string?\",\n },\n },\n {\n methodName: \"getAddressBook\",\n actionName: \"Get Address Book\",\n },\n {\n methodName: \"getWhitelistedAddresses\",\n actionName: \"Get Whitelisted Addresses\",\n params: {\n accountId: \"string\",\n tokenSymbol: \"string?\",\n network: \"string?\",\n },\n },\n {\n methodName: \"verifyKYC\",\n actionName: \"Verify KYC\",\n params: {\n accountId: \"string\",\n callbackUrl: \"string\",\n tokenSymbol: \"string?\",\n network: \"string?\",\n },\n },\n ],\n WRITE_SUITE: [\n {\n methodName: \"prepareOrder\",\n actionName: \"Prepare Order\",\n params: {\n accountId: \"string\",\n pairSymbol: \"string\",\n orderSide: \"string\",\n orderType: \"string\",\n amount: \"string\",\n price: \"string\",\n },\n },\n {\n methodName: \"createOrder\",\n actionName: \"Create Order\",\n params: {\n accountId: \"string\",\n pairSymbol: \"string\",\n orderSide: \"string\",\n orderType: \"string\",\n amount: \"string\",\n price: \"string\",\n },\n },\n {\n methodName: \"addCex\",\n actionName: \"Add CEX\",\n params: {\n exchangeId: \"string\",\n readOnlyOnboarding: \"boolean?\",\n callbackUrl: \"string?\",\n },\n },\n {\n methodName: \"editOrder\",\n actionName: \"Edit Order\",\n params: {\n orderId: \"string\",\n accountId: \"string\",\n pairSymbol: \"string\",\n orderSide: \"string?\",\n orderType: \"string?\",\n amount: \"string?\",\n price: \"string?\",\n },\n },\n {\n methodName: \"cancelOrder\",\n actionName: \"Cancel Order\",\n params: {\n orderId: \"string\",\n accountId: \"string\",\n pairSymbol: \"string\",\n },\n },\n {\n methodName: \"prepareWithdrawal\",\n actionName: \"Prepare Withdrawal\",\n params: {\n accountId: \"string\",\n tokenSymbol: \"string\",\n amount: \"string\",\n network: \"string\",\n },\n },\n {\n methodName: \"withdrawToDefi\",\n actionName: \"Withdraw To Defi address\",\n params: {\n accountId: \"string\",\n tokenSymbol: \"string\",\n amount: \"string\",\n network: \"string\",\n address: \"string\",\n },\n },\n {\n methodName: \"getUserId\",\n actionName: \"Get the user id\",\n },\n {\n methodName: \"getEnvironment\",\n actionName: \"Get the environment\",\n },\n ],\n};\n","export type WidgetConfig = \"widgetConfig\" | \"universalWidgetConfig\";\nexport type WidgetConfigMetaData = {\n methodName: WidgetConfig;\n params?: Record<string, string>;\n apiParamsMapping?: Record<string, string>;\n};\n\nexport const WIDGET_CONFIGS: Record<string, WidgetConfigMetaData[]> = {\n WIDGETS: [\n {\n methodName: \"widgetConfig\" as const,\n params: {\n tokenSymbol: \"string\",\n address: \"string\",\n amount: \"string\",\n network: \"string\",\n lockNetwork: \"boolean\",\n themeMode: \"dark|light\",\n exchangeIds: \"string[]\",\n clientTxId: \"string\",\n callbackUrl: \"string\",\n isInternalTransfer: \"boolean\",\n },\n },\n {\n methodName: \"universalWidgetConfig\" as const,\n params: {\n tokenSymbol: \"string\",\n address: \"string\",\n amount: \"string\",\n network: \"string\",\n lockNetwork: \"boolean\",\n themeMode: \"dark|light\",\n exchangeIds: \"string[]\",\n clientTxId: \"string\",\n callbackUrl: \"string\",\n isInternalTransfer: \"boolean\",\n },\n },\n ] as const,\n};\n","import { Any } from \"@cede/types\";\nimport { constructNestedObjectFromFlatObject, getNestedObjectFieldValue } from \"@cede/utils\";\nimport {\n ARRAY_MARKER,\n ARRAY_SEPARATOR,\n OPTIONAL_MARKER,\n STORE_API_METHODS,\n StoreMethodMetaData,\n} from \"../../constants/methods\";\nimport { WIDGET_CONFIGS, WidgetConfigMetaData } from \"../../constants/widgetConfig\";\nimport { ParamsFormsState } from \"./useParamsForms\";\n\n/**\n * @description Get the default value for a param based on its type\n */\nfunction getDefaultValue(type: string): Any {\n const defaultValuesByTypes: Record<string, Any> = {\n string: \"\",\n number: 0,\n boolean: false,\n };\n\n if (type in defaultValuesByTypes) return defaultValuesByTypes[type];\n\n if (type.includes(ARRAY_MARKER) && !type.includes(OPTIONAL_MARKER)) return [];\n\n return undefined;\n}\n\n/**\n * @description Cast a value to the correct type\n *\n * All the optional param with empty value are casted to undefined\n */\nexport const castValue = (value: Any, type: string) => {\n let castedValue = value;\n\n // Cast empty string to undefined if the param is optional whatever the type\n if (type.includes(OPTIONAL_MARKER) && value === \"\") return undefined;\n\n // Cast empty array to undefined if the param is optional\n if (Array.isArray(value) && !value.length && type.includes(OPTIONAL_MARKER)) {\n return undefined;\n }\n\n // Cast the string value to array type\n if (type.includes(ARRAY_MARKER) && typeof value === \"string\") {\n const items: Any[] = value ? value.split(ARRAY_SEPARATOR) : [];\n castedValue = items.map((item) => castValue(item, type.replace(ARRAY_MARKER, \"\")));\n } else if (type.includes(\"number\")) {\n const valueAsNumber = Number(castedValue);\n\n if (isNaN(valueAsNumber)) throw new Error(`${value} is not a valid number`);\n\n castedValue = valueAsNumber;\n } else if (type.includes(\"boolean\")) {\n castedValue = typeof castedValue === \"boolean\" ? castedValue : castedValue === \"true\";\n } else if (type.includes(\"string\") && type.includes(OPTIONAL_MARKER) && value === \"\") {\n castedValue = undefined;\n }\n return castedValue;\n};\n\n/**\n * @description Cast params to the correct type and construct the object expected by the api\n */\nconst convertFormParamsToApiParams = (\n params: Record<string, Any>,\n method: StoreMethodMetaData | WidgetConfigMetaData,\n) => {\n const methodParams = method.params;\n if (!methodParams) return {};\n\n const castedParams = Object.keys(params).reduce((acc, key) => {\n const param = params[key];\n\n const type = methodParams[key];\n\n if (param === undefined || !type) return acc;\n\n acc[key] = param;\n\n return acc;\n }, {} as Record<string, Any>);\n\n if (!method.apiParamsMapping) return castedParams;\n\n const apiParamsMapping = method.apiParamsMapping;\n\n return constructNestedObjectFromFlatObject(apiParamsMapping, castedParams);\n};\n\n/**\n * @description Get the initial state for a param\n */\nfunction getInitialFormState(method: StoreMethodMetaData | WidgetConfigMetaData) {\n if (!method.params) return {};\n const paramState = Object.fromEntries(\n Object.keys(method.params).map((p) => {\n const type = method.params?.[p] || \"string\";\n return [p, getDefaultValue(type)];\n }),\n );\n\n if (!method.apiParamsMapping) return paramState;\n\n return convertFormParamsToApiParams(paramState, method);\n}\n\n/**\n * @description Get the initial state for all the forms\n */\nexport function getInitialFormStateForAllMethods() {\n return [...Object.values(STORE_API_METHODS), ...Object.values(WIDGET_CONFIGS)]\n .flat()\n .reduce<ParamsFormsState[\"forms\"]>(\n (acc, method) => ({ ...acc, [method.methodName]: getInitialFormState(method) }),\n {} as ParamsFormsState[\"forms\"],\n );\n}\n\n/**\n * @description Get the value of a param from the state object (Sometimes the param is nested in the state object)\n */\nexport function getFormValue(method: StoreMethodMetaData | WidgetConfigMetaData, paramName: string, form: Any) {\n const apiParamMapping = method.apiParamsMapping?.[paramName];\n if (!apiParamMapping) return form[paramName];\n return getNestedObjectFieldValue(form, apiParamMapping);\n}\n\n/**\n * @description Check if the value is valid based on the type\n */\nfunction validateType(type: string, value: Any): boolean {\n if (type.includes(OPTIONAL_MARKER) && !value) return true;\n\n if (type.includes(ARRAY_MARKER))\n return Array.isArray(value) && value.every((v) => validateType(type.replace(ARRAY_MARKER, \"\"), v));\n\n if (type.includes(\"number\")) return !isNaN(Number(value));\n\n if (type.includes(\"boolean\")) return typeof value === \"boolean\";\n\n if (type.includes(\"string\")) return typeof value === \"string\";\n\n return true;\n}\n\n/**\n * @description Check if the state is valid.\n * To be valid, the state must have all the required params for\n * each method and the value of each param must be of the correct type\n */\nexport function checkStateValidity(state: ParamsFormsState) {\n const methodDefinitions = [...Object.values(STORE_API_METHODS), ...Object.values(WIDGET_CONFIGS)].flat();\n\n return methodDefinitions.every((methodDefinition) => {\n const method = methodDefinition.methodName;\n const form = state.forms[method];\n\n if (!form) return false;\n const params = methodDefinition.params || {};\n\n if (!Object.keys(params).length) return true;\n\n return Object.entries(params).every(([param, type]) => {\n const value = getFormValue(methodDefinition, param, form);\n return validateType(type, value);\n });\n });\n}\n","import { Any, UntrustedApiMethods } from \"@cede/types\";\nimport { updateNestedObjectFieldValue } from \"@cede/utils\";\nimport { OPTIONAL_MARKER, SELECT_MARKER, StoreMethodMetaData } from \"../../constants/methods\";\nimport { WidgetConfig, WidgetConfigMetaData } from \"../../constants/widgetConfig\";\nimport { castValue, checkStateValidity, getInitialFormStateForAllMethods } from \"./utils\";\nimport { create } from \"zustand\";\nimport { persist } from \"zustand/middleware\";\n\ntype FormKey = UntrustedApiMethods | WidgetConfig;\n\nexport type ParamsFormsState = {\n persist: boolean;\n togglePersist: () => void;\n\n mode: \"user\" | \"json\";\n toggleMode: () => void;\n\n forms: Record<FormKey, Record<string, Any>>;\n setForm: (method: FormKey, params: Record<string, Any>) => void;\n setFormValue: (method: StoreMethodMetaData | WidgetConfigMetaData, key: string, value: Any) => void;\n resetForms: () => void;\n prefillValueForAllForms: (key: string, value: Any) => void;\n};\n\nexport const useParamsForms = create<ParamsFormsState>()(\n persist(\n (set) => ({\n persist: false,\n togglePersist: () => set((state) => ({ persist: !state.persist })),\n\n mode: \"json\",\n toggleMode: () => set((state) => ({ mode: state.mode === \"user\" ? \"json\" : \"user\" })),\n\n forms: getInitialFormStateForAllMethods(),\n setForm: (method, params) => set((state) => ({ forms: { ...state.forms, [method]: params } })),\n setFormValue: (method, key, value) =>\n set((state) => {\n try {\n const newForm = { ...state.forms };\n const type = method.params?.[key] || \"string\";\n const castedValue = castValue(value, type.includes(SELECT_MARKER) ? \"string\" : type);\n const apiParamMapping = method.apiParamsMapping?.[key];\n\n newForm[method.methodName] = updateNestedObjectFieldValue(\n newForm[method.methodName],\n apiParamMapping || key,\n castedValue,\n {\n removeIfUndefined: type.includes(OPTIONAL_MARKER), // remove the field if the value is undefined and the param is optional\n },\n );\n\n return { forms: newForm };\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error(error);\n return state;\n }\n }),\n resetForms: () =>\n set({\n forms: getInitialFormStateForAllMethods(),\n }),\n prefillValueForAllForms: (key, value) =>\n set((state) => {\n const newForms = { ...state.forms };\n const methods = Object.keys(newForms) as UntrustedApiMethods[];\n\n methods.forEach((methodName) => {\n if (!newForms[methodName]) return;\n\n if (newForms[methodName][key] === \"\") {\n newForms[methodName] = { ...newForms[methodName], [key]: value };\n }\n });\n\n return { forms: newForms };\n }),\n }),\n {\n name: \"paramsForms\",\n partialize: (state) =>\n state.persist\n ? { forms: state.forms, persist: state.persist, mode: state.mode }\n : { persist: state.persist, mode: state.mode },\n version: Math.random(),\n migrate: (oldState) => {\n const oldParamsFormState = oldState as ParamsFormsState;\n const isStateValid = checkStateValidity(oldParamsFormState);\n return {\n ...oldParamsFormState,\n persist: oldParamsFormState.persist || false,\n mode: oldParamsFormState.mode || \"json\",\n forms: isStateValid ? oldParamsFormState.forms : getInitialFormStateForAllMethods(),\n };\n },\n },\n ),\n);\n","// removes all fields of T except for those in K, provided the keys are in K\nexport function cherryPick<T, K extends keyof T>(obj: T, keys: K[]): Pick<T, K> {\n const ret = {} as Pick<T, K>;\n keys.forEach((key) => {\n ret[key] = obj[key];\n });\n return ret;\n}\n\nexport function cherryPickState<T>(keys: (keyof T)[]) {\n return (object: T) => {\n const result = {} as T;\n keys.forEach((key) => {\n result[key] = object[key];\n });\n return result;\n };\n}\n","import { PublicAccount, VaultItem } from \"@cede/types\";\nimport { CedeProvider } from \"@cedelabs/providers/src\";\nimport { create } from \"zustand\";\n\nexport type PublicAccountWithVaultId = PublicAccount & { vaultId: string };\n\ntype CedeStoreState = {\n vaults: VaultItem[];\n activeVault: VaultItem | null;\n accounts: PublicAccountWithVaultId[];\n setVaults: (vaults: VaultItem[]) => void;\n\n provider: CedeProvider | null;\n setProvider: (provider: CedeProvider) => void;\n};\n\n// TODO: unify in the useCedeStore hooks package\nexport const useCedeStore = create<CedeStoreState>((set) => ({\n vaults: [],\n activeVault: null,\n accounts: [],\n setVaults: (vaults: VaultItem[]) =>\n set({\n vaults,\n activeVault: vaults.find((vault) => vault.isActive) || null,\n accounts: vaults.flatMap((vault) => vault.accounts.map((acc) => ({ ...acc, vaultId: vault.id }))),\n }),\n\n provider: null,\n setProvider: (provider: CedeProvider) => set({ provider }),\n}));\n","import { generateUtilityClass, generateUtilityClasses } from '@mui/base';\nexport function getListItemIconUtilityClass(slot) {\n return generateUtilityClass('MuiListItemIcon', slot);\n}\nconst listItemIconClasses = generateUtilityClasses('MuiListItemIcon', ['root', 'alignItemsFlexStart']);\nexport default listItemIconClasses;","import { generateUtilityClass, generateUtilityClasses } from '@mui/base';\nexport function getListItemTextUtilityClass(slot) {\n return generateUtilityClass('MuiListItemText', slot);\n}\nconst listItemTextClasses = generateUtilityClasses('MuiListItemText', ['root', 'multiline', 'dense', 'inset', 'primary', 'secondary']);\nexport default listItemTextClasses;","import { generateUtilityClass, generateUtilityClasses } from '@mui/base';\nexport function getMenuItemUtilityClass(slot) {\n return generateUtilityClass('MuiMenuItem', slot);\n}\nconst menuItemClasses = generateUtilityClasses('MuiMenuItem', ['root', 'focusVisible', 'dense', 'disabled', 'divider', 'gutters', 'selected']);\nexport default menuItemClasses;","import _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nconst _excluded = [\"autoFocus\", \"component\", \"dense\", \"divider\", \"disableGutters\", \"focusVisibleClassName\", \"role\", \"tabIndex\"];\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport { unstable_composeClasses as composeClasses } from '@mui/base';\nimport { alpha } from '@mui/system';\nimport styled, { rootShouldForwardProp } from '../styles/styled';\nimport useThemeProps from '../styles/useThemeProps';\nimport ListContext from '../List/ListContext';\nimport ButtonBase from '../ButtonBase';\nimport useEnhancedEffect from '../utils/useEnhancedEffect';\nimport useForkRef from '../utils/useForkRef';\nimport { dividerClasses } from '../Divider';\nimport { listItemIconClasses } from '../ListItemIcon';\nimport { listItemTextClasses } from '../ListItemText';\nimport menuItemClasses, { getMenuItemUtilityClass } from './menuItemClasses';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport const overridesResolver = (props, styles) => {\n const {\n ownerState\n } = props;\n return [styles.root, ownerState.dense && styles.dense, ownerState.divider && styles.divider, !ownerState.disableGutters && styles.gutters];\n};\n\nconst useUtilityClasses = ownerState => {\n const {\n disabled,\n dense,\n divider,\n disableGutters,\n selected,\n classes\n } = ownerState;\n const slots = {\n root: ['root', dense && 'dense', disabled && 'disabled', !disableGutters && 'gutters', divider && 'divider', selected && 'selected']\n };\n const composedClasses = composeClasses(slots, getMenuItemUtilityClass, classes);\n return _extends({}, classes, composedClasses);\n};\n\nconst MenuItemRoot = styled(ButtonBase, {\n shouldForwardProp: prop => rootShouldForwardProp(prop) || prop === 'classes',\n name: 'MuiMenuItem',\n slot: 'Root',\n overridesResolver\n})(({\n theme,\n ownerState\n}) => _extends({}, theme.typography.body1, {\n display: 'flex',\n justifyContent: 'flex-start',\n alignItems: 'center',\n position: 'relative',\n textDecoration: 'none',\n minHeight: 48,\n paddingTop: 6,\n paddingBottom: 6,\n boxSizing: 'border-box',\n whiteSpace: 'nowrap'\n}, !ownerState.disableGutters && {\n paddingLeft: 16,\n paddingRight: 16\n}, ownerState.divider && {\n borderBottom: `1px solid ${(theme.vars || theme).palette.divider}`,\n backgroundClip: 'padding-box'\n}, {\n '&:hover': {\n textDecoration: 'none',\n backgroundColor: (theme.vars || theme).palette.action.hover,\n // Reset on touch devices, it doesn't add specificity\n '@media (hover: none)': {\n backgroundColor: 'transparent'\n }\n },\n [`&.${menuItemClasses.selected}`]: {\n backgroundColor: theme.vars ? `rgba(${theme.vars.palette.primary.mainChannel} / ${theme.vars.palette.action.selectedOpacity})` : alpha(theme.palette.primary.main, theme.palette.action.selectedOpacity),\n [`&.${menuItemClasses.focusVisible}`]: {\n backgroundColor: theme.vars ? `rgba(${theme.vars.palette.primary.mainChannel} / calc(${theme.vars.palette.action.selectedOpacity} + ${theme.vars.palette.action.focusOpacity}))` : alpha(theme.palette.primary.main, theme.palette.action.selectedOpacity + theme.palette.action.focusOpacity)\n }\n },\n [`&.${menuItemClasses.selected}:hover`]: {\n backgroundColor: theme.vars ? `rgba(${theme.vars.palette.primary.mainChannel} / calc(${theme.vars.palette.action.selectedOpacity} + ${theme.vars.palette.action.hoverOpacity}))` : alpha(theme.palette.primary.main, theme.palette.action.selectedOpacity + theme.palette.action.hoverOpacity),\n // Reset on touch devices, it doesn't add specificity\n '@media (hover: none)': {\n backgroundColor: theme.vars ? `rgba(${theme.vars.palette.primary.mainChannel} / ${theme.vars.palette.action.selectedOpacity})` : alpha(theme.palette.primary.main, theme.palette.action.selectedOpacity)\n }\n },\n [`&.${menuItemClasses.focusVisible}`]: {\n backgroundColor: (theme.vars || theme).palette.action.focus\n },\n [`&.${menuItemClasses.disabled}`]: {\n opacity: (theme.vars || theme).palette.action.disabledOpacity\n },\n [`& + .${dividerClasses.root}`]: {\n marginTop: theme.spacing(1),\n marginBottom: theme.spacing(1)\n },\n [`& + .${dividerClasses.inset}`]: {\n marginLeft: 52\n },\n [`& .${listItemTextClasses.root}`]: {\n marginTop: 0,\n marginBottom: 0\n },\n [`& .${listItemTextClasses.inset}`]: {\n paddingLeft: 36\n },\n [`& .${listItemIconClasses.root}`]: {\n minWidth: 36\n }\n}, !ownerState.dense && {\n [theme.breakpoints.up('sm')]: {\n minHeight: 'auto'\n }\n}, ownerState.dense && _extends({\n minHeight: 32,\n // https://material.io/components/menus#specs > Dense\n paddingTop: 4,\n paddingBottom: 4\n}, theme.typography.body2, {\n [`& .${listItemIconClasses.root} svg`]: {\n fontSize: '1.25rem'\n }\n})));\nconst MenuItem = /*#__PURE__*/React.forwardRef(function MenuItem(inProps, ref) {\n const props = useThemeProps({\n props: inProps,\n name: 'MuiMenuItem'\n });\n\n const {\n autoFocus = false,\n component = 'li',\n dense = false,\n divider = false,\n disableGutters = false,\n focusVisibleClassName,\n role = 'menuitem',\n tabIndex: tabIndexProp\n } = props,\n other = _objectWithoutPropertiesLoose(props, _excluded);\n\n const context = React.useContext(ListContext);\n const childContext = {\n dense: dense || context.dense || false,\n disableGutters\n };\n const menuItemRef = React.useRef(null);\n useEnhancedEffect(() => {\n if (autoFocus) {\n if (menuItemRef.current) {\n menuItemRef.current.focus();\n } else if (process.env.NODE_ENV !== 'production') {\n console.error('MUI: Unable to set focus to a MenuItem whose component has not been rendered.');\n }\n }\n }, [autoFocus]);\n\n const ownerState = _extends({}, props, {\n dense: childContext.dense,\n divider,\n disableGutters\n });\n\n const classes = useUtilityClasses(props);\n const handleRef = useForkRef(menuItemRef, ref);\n let tabIndex;\n\n if (!props.disabled) {\n tabIndex = tabIndexProp !== undefined ? tabIndexProp : -1;\n }\n\n return /*#__PURE__*/_jsx(ListContext.Provider, {\n value: childContext,\n children: /*#__PURE__*/_jsx(MenuItemRoot, _extends({\n ref: handleRef,\n role: role,\n tabIndex: tabIndex,\n component: component,\n focusVisibleClassName: clsx(classes.focusVisible, focusVisibleClassName)\n }, other, {\n ownerState: ownerState,\n classes: classes\n }))\n });\n});\nprocess.env.NODE_ENV !== \"production\" ? MenuItem.propTypes\n/* remove-proptypes */\n= {\n // ----------------------------- Warning --------------------------------\n // | These PropTypes are generated from the TypeScript type definitions |\n // | To update them edit the d.ts file and run \"yarn proptypes\" |\n // ----------------------------------------------------------------------\n\n /**\n * If `true`, the list item is focused during the first mount.\n * Focus will also be triggered if the value changes from false to true.\n * @default false\n */\n autoFocus: PropTypes.bool,\n\n /**\n * The content of the component.\n */\n children: PropTypes.node,\n\n /**\n * Override or extend the styles applied to the component.\n */\n classes: PropTypes.object,\n\n /**\n * The component used for the root node.\n * Either a string to use a HTML element or a component.\n */\n component: PropTypes.elementType,\n\n /**\n * If `true`, compact vertical padding designed for keyboard and mouse input is used.\n * The prop defaults to the value inherited from the parent Menu component.\n * @default false\n */\n dense: PropTypes.bool,\n\n /**\n * @ignore\n */\n disabled: PropTypes.bool,\n\n /**\n * If `true`, the left and right padding is removed.\n * @default false\n */\n disableGutters: PropTypes.bool,\n\n /**\n * If `true`, a 1px light border is added to the bottom of the menu item.\n * @default false\n */\n divider: PropTypes.bool,\n\n /**\n * This prop can help identify which element has keyboard focus.\n * The class name will be applied when the element gains the focus through keyboard interaction.\n * It's a polyfill for the [CSS :focus-visible selector](https://drafts.csswg.org/selectors-4/#the-focus-visible-pseudo).\n * The rationale for using this feature [is explained here](https://github.com/WICG/focus-visible/blob/HEAD/explainer.md).\n * A [polyfill can be used](https://github.com/WICG/focus-visible) to apply a `focus-visible` class to other components\n * if needed.\n */\n focusVisibleClassName: PropTypes.string,\n\n /**\n * @ignore\n */\n role: PropTypes\n /* @typescript-to-proptypes-ignore */\n .string,\n\n /**\n * @ignore\n */\n selected: PropTypes.bool,\n\n /**\n * The system prop that allows defining system overrides as well as additional CSS styles.\n */\n sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),\n\n /**\n * @default 0\n */\n tabIndex: PropTypes.number\n} : void 0;\nexport default MenuItem;","import { PublicAccount } from \"@cede/types\";\nimport {\n Box,\n Chip,\n FormControl,\n FormHelperText,\n InputLabel,\n MenuItem,\n OutlinedInput,\n Select,\n SelectChangeEvent,\n} from \"@mui/material\";\n\ntype AccountIdsFieldProps = {\n type: string;\n property: string;\n value: string[];\n onChange: (event: SelectChangeEvent<string[]>) => void;\n accounts: PublicAccount[];\n};\n\nexport const AccountIdsField = ({ type, property, value, onChange, accounts }: AccountIdsFieldProps) => {\n return (\n <FormControl sx={{ position: \"relative\" }}>\n <InputLabel>{property}</InputLabel>\n <Select\n multiple\n value={value || []}\n onChange={onChange}\n input={<OutlinedInput label={property} />}\n renderValue={(selected) => (\n <Box sx={{ display: \"flex\", flexWrap: \"wrap\", gap: 0.5 }}>\n {selected.map((value: string) => (\n <Chip key={value} label={value} />\n ))}\n </Box>\n )}\n >\n {accounts.map((account) => (\n <MenuItem key={account.id} value={account.id}>\n {account.accountName} - {account.id}\n </MenuItem>\n ))}\n </Select>\n <FormHelperText>{type}</FormHelperText>\n </FormControl>\n );\n};\n","import {\n FormControl,\n FormHelperText,\n InputLabel,\n MenuItem,\n OutlinedInput,\n Select,\n SelectChangeEvent,\n} from \"@mui/material\";\n\ntype AccountOrVaultIdFieldProps = {\n property: string;\n value: string;\n onChange: (event: SelectChangeEvent<string>) => void;\n vaults: { id: string; name: string }[];\n accounts: { id: string; accountName: string }[];\n};\n\nexport const AccountOrVaultIdField = ({ property, value, onChange, vaults, accounts }: AccountOrVaultIdFieldProps) => {\n return (\n <FormControl>\n <InputLabel>{property}</InputLabel>\n <Select value={value} onChange={onChange} label={property} input={<OutlinedInput label={property} />}>\n {property === \"vaultId\" &&\n vaults.map((vault) => (\n <MenuItem key={vault.id} value={vault.id}>\n {vault.name} - {vault.id}\n </MenuItem>\n ))}\n {property === \"accountId\" &&\n accounts.map((account) => (\n <MenuItem key={account.id} value={account.id}>\n {account.accountName} - {account.id}\n </MenuItem>\n ))}\n </Select>\n <FormHelperText>String</FormHelperText>\n </FormControl>\n );\n};\n","import { generateUtilityClass, generateUtilityClasses } from '@mui/base';\nexport function getFormGroupUtilityClass(slot) {\n return generateUtilityClass('MuiFormGroup', slot);\n}\nconst formGroupClasses = generateUtilityClasses('MuiFormGroup', ['root', 'row', 'error']);\nexport default formGroupClasses;","import _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nconst _excluded = [\"className\", \"row\"];\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport { unstable_composeClasses as composeClasses } from '@mui/base';\nimport styled from '../styles/styled';\nimport useThemeProps from '../styles/useThemeProps';\nimport { getFormGroupUtilityClass } from './formGroupClasses';\nimport useFormControl from '../FormControl/useFormControl';\nimport formControlState from '../FormControl/formControlState';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\n\nconst useUtilityClasses = ownerState => {\n const {\n classes,\n row,\n error\n } = ownerState;\n const slots = {\n root: ['root', row && 'row', error && 'error']\n };\n return composeClasses(slots, getFormGroupUtilityClass, classes);\n};\n\nconst FormGroupRoot = styled('div', {\n name: 'MuiFormGroup',\n slot: 'Root',\n overridesResolver: (props, styles) => {\n const {\n ownerState\n } = props;\n return [styles.root, ownerState.row && styles.row];\n }\n})(({\n ownerState\n}) => _extends({\n display: 'flex',\n flexDirection: 'column',\n flexWrap: 'wrap'\n}, ownerState.row && {\n flexDirection: 'row'\n}));\n/**\n * `FormGroup` wraps controls such as `Checkbox` and `Switch`.\n * It provides compact row layout.\n * For the `Radio`, you should be using the `RadioGroup` component instead of this one.\n */\n\nconst FormGroup = /*#__PURE__*/React.forwardRef(function FormGroup(inProps, ref) {\n const props = useThemeProps({\n props: inProps,\n name: 'MuiFormGroup'\n });\n\n const {\n className,\n row = false\n } = props,\n other = _objectWithoutPropertiesLoose(props, _excluded);\n\n const muiFormControl = useFormControl();\n const fcs = formControlState({\n props,\n muiFormControl,\n states: ['error']\n });\n\n const ownerState = _extends({}, props, {\n row,\n error: fcs.error\n });\n\n const classes = useUtilityClasses(ownerState);\n return /*#__PURE__*/_jsx(FormGroupRoot, _extends({\n className: clsx(classes.root, className),\n ownerState: ownerState,\n ref: ref\n }, other));\n});\nprocess.env.NODE_ENV !== \"production\" ? FormGroup.propTypes\n/* remove-proptypes */\n= {\n // ----------------------------- Warning --------------------------------\n // | These PropTypes are generated from the TypeScript type definitions |\n // | To update them edit the d.ts file and run \"yarn proptypes\" |\n // ----------------------------------------------------------------------\n\n /**\n * The content of the component.\n */\n children: PropTypes.node,\n\n /**\n * Override or extend the styles applied to the component.\n */\n classes: PropTypes.object,\n\n /**\n * @ignore\n */\n className: PropTypes.string,\n\n /**\n * Display group of elements in a compact row.\n * @default false\n */\n row: PropTypes.bool,\n\n /**\n * The system prop that allows defining system overrides as well as additional CSS styles.\n */\n sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])\n} : void 0;\nexport default FormGroup;","import { generateUtilityClass, generateUtilityClasses } from '@mui/base';\nexport function getSwitchBaseUtilityClass(slot) {\n return generateUtilityClass('PrivateSwitchBase', slot);\n}\nconst switchBaseClasses = generateUtilityClasses('PrivateSwitchBase', ['root', 'checked', 'disabled', 'input', 'edgeStart', 'edgeEnd']);\nexport default switchBaseClasses;","import _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nconst _excluded = [\"autoFocus\", \"checked\", \"checkedIcon\", \"className\", \"defaultChecked\", \"disabled\", \"disableFocusRipple\", \"edge\", \"icon\", \"id\", \"inputProps\", \"inputRef\", \"name\", \"onBlur\", \"onChange\", \"onFocus\", \"readOnly\", \"required\", \"tabIndex\", \"type\", \"value\"];\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport { refType } from '@mui/utils';\nimport { unstable_composeClasses as composeClasses } from '@mui/base';\nimport capitalize from '../utils/capitalize';\nimport styled from '../styles/styled';\nimport useControlled from '../utils/useControlled';\nimport useFormControl from '../FormControl/useFormControl';\nimport ButtonBase from '../ButtonBase';\nimport { getSwitchBaseUtilityClass } from './switchBaseClasses';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\n\nconst useUtilityClasses = ownerState => {\n const {\n classes,\n checked,\n disabled,\n edge\n } = ownerState;\n const slots = {\n root: ['root', checked && 'checked', disabled && 'disabled', edge && `edge${capitalize(edge)}`],\n input: ['input']\n };\n return composeClasses(slots, getSwitchBaseUtilityClass, classes);\n};\n\nconst SwitchBaseRoot = styled(ButtonBase)(({\n ownerState\n}) => _extends({\n padding: 9,\n borderRadius: '50%'\n}, ownerState.edge === 'start' && {\n marginLeft: ownerState.size === 'small' ? -3 : -12\n}, ownerState.edge === 'end' && {\n marginRight: ownerState.size === 'small' ? -3 : -12\n}));\nconst SwitchBaseInput = styled('input')({\n cursor: 'inherit',\n position: 'absolute',\n opacity: 0,\n width: '100%',\n height: '100%',\n top: 0,\n left: 0,\n margin: 0,\n padding: 0,\n zIndex: 1\n});\n/**\n * @ignore - internal component.\n */\n\nconst SwitchBase = /*#__PURE__*/React.forwardRef(function SwitchBase(props, ref) {\n const {\n autoFocus,\n checked: checkedProp,\n checkedIcon,\n className,\n defaultChecked,\n disabled: disabledProp,\n disableFocusRipple = false,\n edge = false,\n icon,\n id,\n inputProps,\n inputRef,\n name,\n onBlur,\n onChange,\n onFocus,\n readOnly,\n required,\n tabIndex,\n type,\n value\n } = props,\n other = _objectWithoutPropertiesLoose(props, _excluded);\n\n const [checked, setCheckedState] = useControlled({\n controlled: checkedProp,\n default: Boolean(defaultChecked),\n name: 'SwitchBase',\n state: 'checked'\n });\n const muiFormControl = useFormControl();\n\n const handleFocus = event => {\n if (onFocus) {\n onFocus(event);\n }\n\n if (muiFormControl && muiFormControl.onFocus) {\n muiFormControl.onFocus(event);\n }\n };\n\n const handleBlur = event => {\n if (onBlur) {\n onBlur(event);\n }\n\n if (muiFormControl && muiFormControl.onBlur) {\n muiFormControl.onBlur(event);\n }\n };\n\n const handleInputChange = event => {\n // Workaround for https://github.com/facebook/react/issues/9023\n if (event.nativeEvent.defaultPrevented) {\n return;\n }\n\n const newChecked = event.target.checked;\n setCheckedState(newChecked);\n\n if (onChange) {\n // TODO v6: remove the second argument.\n onChange(event, newChecked);\n }\n };\n\n let disabled = disabledProp;\n\n if (muiFormControl) {\n if (typeof disabled === 'undefined') {\n disabled = muiFormControl.disabled;\n }\n }\n\n const hasLabelFor = type === 'checkbox' || type === 'radio';\n\n const ownerState = _extends({}, props, {\n checked,\n disabled,\n disableFocusRipple,\n edge\n });\n\n const classes = useUtilityClasses(ownerState);\n return /*#__PURE__*/_jsxs(SwitchBaseRoot, _extends({\n component: \"span\",\n className: clsx(classes.root, className),\n centerRipple: true,\n focusRipple: !disableFocusRipple,\n disabled: disabled,\n tabIndex: null,\n role: undefined,\n onFocus: handleFocus,\n onBlur: handleBlur,\n ownerState: ownerState,\n ref: ref\n }, other, {\n children: [/*#__PURE__*/_jsx(SwitchBaseInput, _extends({\n autoFocus: autoFocus,\n checked: checkedProp,\n defaultChecked: defaultChecked,\n className: classes.input,\n disabled: disabled,\n id: hasLabelFor && id,\n name: name,\n onChange: handleInputChange,\n readOnly: readOnly,\n ref: inputRef,\n required: required,\n ownerState: ownerState,\n tabIndex: tabIndex,\n type: type\n }, type === 'checkbox' && value === undefined ? {} : {\n value\n }, inputProps)), checked ? checkedIcon : icon]\n }));\n}); // NB: If changed, please update Checkbox, Switch and Radio\n// so that the API documentation is updated.\n\nprocess.env.NODE_ENV !== \"production\" ? SwitchBase.propTypes = {\n /**\n * If `true`, the `input` element is focused during the first mount.\n */\n autoFocus: PropTypes.bool,\n\n /**\n * If `true`, the component is checked.\n */\n checked: PropTypes.bool,\n\n /**\n * The icon to display when the component is checked.\n */\n checkedIcon: PropTypes.node.isRequired,\n\n /**\n * Override or extend the styles applied to the component.\n * See [CSS API](#css) below for more details.\n */\n classes: PropTypes.object,\n\n /**\n * @ignore\n */\n className: PropTypes.string,\n\n /**\n * @ignore\n */\n defaultChecked: PropTypes.bool,\n\n /**\n * If `true`, the component is disabled.\n */\n disabled: PropTypes.bool,\n\n /**\n * If `true`, the keyboard focus ripple is disabled.\n * @default false\n */\n disableFocusRipple: PropTypes.bool,\n\n /**\n * If given, uses a negative margin to counteract the padding on one\n * side (this is often helpful for aligning the left or right\n * side of the icon with content above or below, without ruining the border\n * size and shape).\n * @default false\n */\n edge: PropTypes.oneOf(['end', 'start', false]),\n\n /**\n * The icon to display when the component is unchecked.\n */\n icon: PropTypes.node.isRequired,\n\n /**\n * The id of the `input` element.\n */\n id: PropTypes.string,\n\n /**\n * [Attributes](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#Attributes) applied to the `input` element.\n */\n inputProps: PropTypes.object,\n\n /**\n * Pass a ref to the `input` element.\n */\n inputRef: refType,\n\n /*\n * @ignore\n */\n name: PropTypes.string,\n\n /**\n * @ignore\n */\n onBlur: PropTypes.func,\n\n /**\n * Callback fired when the state is changed.\n *\n * @param {object} event The event source of the callback.\n * You can pull out the new checked state by accessing `event.target.checked` (boolean).\n */\n onChange: PropTypes.func,\n\n /**\n * @ignore\n */\n onFocus: PropTypes.func,\n\n /**\n * It prevents the user from changing the value of the field\n * (not from interacting with the field).\n */\n readOnly: PropTypes.bool,\n\n /**\n * If `true`, the `input` element is required.\n */\n required: PropTypes.bool,\n\n /**\n * The system prop that allows defining system overrides as well as additional CSS styles.\n */\n sx: PropTypes.object,\n\n /**\n * @ignore\n */\n tabIndex: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n\n /**\n * The input component prop `type`.\n */\n type: PropTypes.string.isRequired,\n\n /**\n * The value of the component.\n */\n value: PropTypes.any\n} : void 0;\nexport default SwitchBase;","import { generateUtilityClass, generateUtilityClasses } from '@mui/base';\nexport function getSwitchUtilityClass(slot) {\n return generateUtilityClass('MuiSwitch', slot);\n}\nconst switchClasses = generateUtilityClasses('MuiSwitch', ['root', 'edgeStart', 'edgeEnd', 'switchBase', 'colorPrimary', 'colorSecondary', 'sizeSmall', 'sizeMedium', 'checked', 'disabled', 'input', 'thumb', 'track']);\nexport default switchClasses;","import _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nconst _excluded = [\"className\", \"color\", \"edge\", \"size\", \"sx\"];\n// @inheritedComponent IconButton\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport { refType } from '@mui/utils';\nimport { unstable_composeClasses as composeClasses } from '@mui/base';\nimport { alpha, darken, lighten } from '@mui/system';\nimport capitalize from '../utils/capitalize';\nimport SwitchBase from '../internal/SwitchBase';\nimport useThemeProps from '../styles/useThemeProps';\nimport styled from '../styles/styled';\nimport switchClasses, { getSwitchUtilityClass } from './switchClasses';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\n\nconst useUtilityClasses = ownerState => {\n const {\n classes,\n edge,\n size,\n color,\n checked,\n disabled\n } = ownerState;\n const slots = {\n root: ['root', edge && `edge${capitalize(edge)}`, `size${capitalize(size)}`],\n switchBase: ['switchBase', `color${capitalize(color)}`, checked && 'checked', disabled && 'disabled'],\n thumb: ['thumb'],\n track: ['track'],\n input: ['input']\n };\n const composedClasses = composeClasses(slots, getSwitchUtilityClass, classes);\n return _extends({}, classes, composedClasses);\n};\n\nconst SwitchRoot = styled('span', {\n name: 'MuiSwitch',\n slot: 'Root',\n overridesResolver: (props, styles) => {\n const {\n ownerState\n } = props;\n return [styles.root, ownerState.edge && styles[`edge${capitalize(ownerState.edge)}`], styles[`size${capitalize(ownerState.size)}`]];\n }\n})(({\n ownerState\n}) => _extends({\n display: 'inline-flex',\n width: 34 + 12 * 2,\n height: 14 + 12 * 2,\n overflow: 'hidden',\n padding: 12,\n boxSizing: 'border-box',\n position: 'relative',\n flexShrink: 0,\n zIndex: 0,\n // Reset the stacking context.\n verticalAlign: 'middle',\n // For correct alignment with the text.\n '@media print': {\n colorAdjust: 'exact'\n }\n}, ownerState.edge === 'start' && {\n marginLeft: -8\n}, ownerState.edge === 'end' && {\n marginRight: -8\n}, ownerState.size === 'small' && {\n width: 40,\n height: 24,\n padding: 7,\n [`& .${switchClasses.thumb}`]: {\n width: 16,\n height: 16\n },\n [`& .${switchClasses.switchBase}`]: {\n padding: 4,\n [`&.${switchClasses.checked}`]: {\n transform: 'translateX(16px)'\n }\n }\n}));\nconst SwitchSwitchBase = styled(SwitchBase, {\n name: 'MuiSwitch',\n slot: 'SwitchBase',\n overridesResolver: (props, styles) => {\n const {\n ownerState\n } = props;\n return [styles.switchBase, {\n [`& .${switchClasses.input}`]: styles.input\n }, ownerState.color !== 'default' && styles[`color${capitalize(ownerState.color)}`]];\n }\n})(({\n theme\n}) => ({\n position: 'absolute',\n top: 0,\n left: 0,\n zIndex: 1,\n // Render above the focus ripple.\n color: theme.vars ? theme.vars.palette.Switch.defaultColor : `${theme.palette.mode === 'light' ? theme.palette.common.white : theme.palette.grey[300]}`,\n transition: theme.transitions.create(['left', 'transform'], {\n duration: theme.transitions.duration.shortest\n }),\n [`&.${switchClasses.checked}`]: {\n transform: 'translateX(20px)'\n },\n [`&.${switchClasses.disabled}`]: {\n color: theme.vars ? theme.vars.palette.Switch.defaultDisabledColor : `${theme.palette.mode === 'light' ? theme.palette.grey[100] : theme.palette.grey[600]}`\n },\n [`&.${switchClasses.checked} + .${switchClasses.track}`]: {\n opacity: 0.5\n },\n [`&.${switchClasses.disabled} + .${switchClasses.track}`]: {\n opacity: theme.vars ? theme.vars.opacity.switchTrackDisabled : `${theme.palette.mode === 'light' ? 0.12 : 0.2}`\n },\n [`& .${switchClasses.input}`]: {\n left: '-100%',\n width: '300%'\n }\n}), ({\n theme,\n ownerState\n}) => _extends({\n '&:hover': {\n backgroundColor: theme.vars ? `rgba(${theme.vars.palette.action.activeChannel} / ${theme.vars.palette.action.hoverOpacity})` : alpha(theme.palette.action.active, theme.palette.action.hoverOpacity),\n // Reset on touch devices, it doesn't add specificity\n '@media (hover: none)': {\n backgroundColor: 'transparent'\n }\n }\n}, ownerState.color !== 'default' && {\n [`&.${switchClasses.checked}`]: {\n color: (theme.vars || theme).palette[ownerState.color].main,\n '&:hover': {\n backgroundColor: theme.vars ? `rgba(${theme.vars.palette[ownerState.color].mainChannel} / ${theme.vars.palette.action.hoverOpacity})` : alpha(theme.palette[ownerState.color].main, theme.palette.action.hoverOpacity),\n '@media (hover: none)': {\n backgroundColor: 'transparent'\n }\n },\n [`&.${switchClasses.disabled}`]: {\n color: theme.vars ? theme.vars.palette.Switch[`${ownerState.color}DisabledColor`] : `${theme.palette.mode === 'light' ? lighten(theme.palette[ownerState.color].main, 0.62) : darken(theme.palette[ownerState.color].main, 0.55)}`\n }\n },\n [`&.${switchClasses.checked} + .${switchClasses.track}`]: {\n backgroundColor: (theme.vars || theme).palette[ownerState.color].main\n }\n}));\nconst SwitchTrack = styled('span', {\n name: 'MuiSwitch',\n slot: 'Track',\n overridesResolver: (props, styles) => styles.track\n})(({\n theme\n}) => ({\n height: '100%',\n width: '100%',\n borderRadius: 14 / 2,\n zIndex: -1,\n transition: theme.transitions.create(['opacity', 'background-color'], {\n duration: theme.transitions.duration.shortest\n }),\n backgroundColor: theme.vars ? theme.vars.palette.common.onBackground : `${theme.palette.mode === 'light' ? theme.palette.common.black : theme.palette.common.white}`,\n opacity: theme.vars ? theme.vars.opacity.switchTrack : `${theme.palette.mode === 'light' ? 0.38 : 0.3}`\n}));\nconst SwitchThumb = styled('span', {\n name: 'MuiSwitch',\n slot: 'Thumb',\n overridesResolver: (props, styles) => styles.thumb\n})(({\n theme\n}) => ({\n boxShadow: (theme.vars || theme).shadows[1],\n backgroundColor: 'currentColor',\n width: 20,\n height: 20,\n borderRadius: '50%'\n}));\nconst Switch = /*#__PURE__*/React.forwardRef(function Switch(inProps, ref) {\n const props = useThemeProps({\n props: inProps,\n name: 'MuiSwitch'\n });\n\n const {\n className,\n color = 'primary',\n edge = false,\n size = 'medium',\n sx\n } = props,\n other = _objectWithoutPropertiesLoose(props, _excluded);\n\n const ownerState = _extends({}, props, {\n color,\n edge,\n size\n });\n\n const classes = useUtilityClasses(ownerState);\n\n const icon = /*#__PURE__*/_jsx(SwitchThumb, {\n className: classes.thumb,\n ownerState: ownerState\n });\n\n return /*#__PURE__*/_jsxs(SwitchRoot, {\n className: clsx(classes.root, className),\n sx: sx,\n ownerState: ownerState,\n children: [/*#__PURE__*/_jsx(SwitchSwitchBase, _extends({\n type: \"checkbox\",\n icon: icon,\n checkedIcon: icon,\n ref: ref,\n ownerState: ownerState\n }, other, {\n classes: _extends({}, classes, {\n root: classes.switchBase\n })\n })), /*#__PURE__*/_jsx(SwitchTrack, {\n className: classes.track,\n ownerState: ownerState\n })]\n });\n});\nprocess.env.NODE_ENV !== \"production\" ? Switch.propTypes\n/* remove-proptypes */\n= {\n // ----------------------------- Warning --------------------------------\n // | These PropTypes are generated from the TypeScript type definitions |\n // | To update them edit the d.ts file and run \"yarn proptypes\" |\n // ----------------------------------------------------------------------\n\n /**\n * If `true`, the component is checked.\n */\n checked: PropTypes.bool,\n\n /**\n * The icon to display when the component is checked.\n */\n checkedIcon: PropTypes.node,\n\n /**\n * Override or extend the styles applied to the component.\n */\n classes: PropTypes.object,\n\n /**\n * @ignore\n */\n className: PropTypes.string,\n\n /**\n * The color of the component.\n * It supports both default and custom theme colors, which can be added as shown in the\n * [palette customization guide](https://mui.com/material-ui/customization/palette/#adding-new-colors).\n * @default 'primary'\n */\n color: PropTypes\n /* @typescript-to-proptypes-ignore */\n .oneOfType([PropTypes.oneOf(['default', 'primary', 'secondary', 'error', 'info', 'success', 'warning']), PropTypes.string]),\n\n /**\n * The default checked state. Use when the component is not controlled.\n */\n defaultChecked: PropTypes.bool,\n\n /**\n * If `true`, the component is disabled.\n */\n disabled: PropTypes.bool,\n\n /**\n * If `true`, the ripple effect is disabled.\n */\n disableRipple: PropTypes.bool,\n\n /**\n * If given, uses a negative margin to counteract the padding on one\n * side (this is often helpful for aligning the left or right\n * side of the icon with content above or below, without ruining the border\n * size and shape).\n * @default false\n */\n edge: PropTypes.oneOf(['end', 'start', false]),\n\n /**\n * The icon to display when the component is unchecked.\n */\n icon: PropTypes.node,\n\n /**\n * The id of the `input` element.\n */\n id: PropTypes.string,\n\n /**\n * [Attributes](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#Attributes) applied to the `input` element.\n */\n inputProps: PropTypes.object,\n\n /**\n * Pass a ref to the `input` element.\n */\n inputRef: refType,\n\n /**\n * Callback fired when the state is changed.\n *\n * @param {React.ChangeEvent<HTMLInputElement>} event The event source of the callback.\n * You can pull out the new value by accessing `event.target.value` (string).\n * You can pull out the new checked state by accessing `event.target.checked` (boolean).\n */\n onChange: PropTypes.func,\n\n /**\n * If `true`, the `input` element is required.\n */\n required: PropTypes.bool,\n\n /**\n * The size of the component.\n * `small` is equivalent to the dense switch styling.\n * @default 'medium'\n */\n size: PropTypes\n /* @typescript-to-proptypes-ignore */\n .oneOfType([PropTypes.oneOf(['medium', 'small']), PropTypes.string]),\n\n /**\n * The system prop that allows defining system overrides as well as additional CSS styles.\n */\n sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),\n\n /**\n * The value of the component. The DOM API casts this to a string.\n * The browser uses \"on\" as the default value.\n */\n value: PropTypes.any\n} : void 0;\nexport default Switch;","import { FormControl, FormGroup, FormLabel, Switch } from \"@mui/material\";\n\ntype BooleanFieldProps = {\n property: string;\n value: boolean | undefined;\n onToggle: VoidFunction;\n};\n\nexport const BooleanField = ({ property, value, onToggle }: BooleanFieldProps) => {\n return (\n <FormControl component=\"fieldset\">\n <FormLabel component=\"legend\">{property}</FormLabel>\n <FormGroup aria-label=\"position\" row>\n <Switch color=\"primary\" checked={value || false} onChange={onToggle} />\n </FormGroup>\n </FormControl>\n );\n};\n","import {\n FormControl,\n FormHelperText,\n InputLabel,\n MenuItem,\n OutlinedInput,\n Select,\n SelectChangeEvent,\n} from \"@mui/material\";\n\nexport type SelectFieldProps = {\n property: string;\n value: string;\n type: string;\n onChange: (event: SelectChangeEvent<string>) => void;\n items: string[];\n};\n\nexport const SelectField = ({ property, value, onChange, type, items }: SelectFieldProps) => {\n return (\n <FormControl sx={{ position: \"relative\" }}>\n <InputLabel>{property}</InputLabel>\n <Select value={value || \"\"} onChange={onChange} input={<OutlinedInput label={property} />}>\n {items.map((item) => (\n <MenuItem key={item} value={item}>\n {item}\n </MenuItem>\n ))}\n </Select>\n <FormHelperText>{type}</FormHelperText>\n </FormControl>\n );\n};\n","import { useMemo } from \"react\";\nimport { Any } from \"@cede/types\";\nimport { cherryPickState, makeFirstLettersCapital } from \"@cede/utils\";\nimport { ARRAY_SEPARATOR, OPTIONAL_MARKER, SELECT_MARKER, StoreMethodMetaData } from \"../../constants/methods\";\nimport { WidgetConfigMetaData } from \"../../constants/widgetConfig\";\nimport { useCedeStore } from \"../../hooks/useCedeStore\";\nimport { useParamsForms } from \"../../hooks/useParamsForms/useParamsForms\";\nimport { getFormValue } from \"../../hooks/useParamsForms/utils\";\nimport { AccountIdsField } from \"./fields/AccountIdsField\";\nimport { AccountOrVaultIdField } from \"./fields/AccountOrVaultIdField\";\nimport { BooleanField } from \"./fields/BooleanField\";\nimport { SelectField } from \"./fields/SelectField\";\nimport { TextField } from \"@mui/material\";\n\ntype UserFieldGroupProps = {\n method: StoreMethodMetaData | WidgetConfigMetaData;\n id: string;\n};\n\nfunction displayType(type: string) {\n let value = makeFirstLettersCapital(type);\n if (value.includes(OPTIONAL_MARKER)) {\n value = value.replace(OPTIONAL_MARKER, \" (optional)\");\n }\n return value;\n}\n/**\n * @description This function is used to get the value of a form field. If the value is an array, it will\n * be joined by a space.\n */\nfunction getSafeStringValue(method: StoreMethodMetaData | WidgetConfigMetaData, property: string, form: Any) {\n const value = getFormValue(method, property, form);\n if (value === null || value === undefined) return \"\";\n if (Array.isArray(value)) return value.join(ARRAY_SEPARATOR);\n return value;\n}\n\nexport const UserFieldGroup = ({ method }: UserFieldGroupProps) => {\n const { vaults, accounts } = useCedeStore(cherryPickState([\"vaults\", \"accounts\"]));\n const form = useParamsForms((state) => state.forms[method.methodName]);\n const setFormValue = useParamsForms((state) => state.setFormValue);\n\n const filteredAccounts = useMemo(() => {\n if (form?.vaultId) {\n return accounts.filter((account) => account.vaultId === form.vaultId);\n }\n return accounts;\n }, [form?.vaultId, accounts]);\n\n if (!method.params) return null;\n\n return (\n <>\n {Object.entries(method.params).map(([p, type]) => {\n if (type.includes(\"boolean\")) {\n return (\n <BooleanField\n key={p}\n property={p}\n value={getFormValue(method, p, form)}\n onToggle={() => setFormValue(method, p, !getFormValue(method, p, form))}\n />\n );\n }\n\n if (type.includes(SELECT_MARKER)) {\n return (\n <SelectField\n key={p}\n property={p}\n value={getFormValue(method, p, form)}\n items={type.split(SELECT_MARKER)}\n type=\"String\"\n onChange={(e) => setFormValue(method, p, e.target.value)}\n />\n );\n }\n\n if ([\"vaultId\", \"accountId\"].includes(p)) {\n return (\n <AccountOrVaultIdField\n key={p}\n accounts={filteredAccounts}\n vaults={vaults}\n property={p}\n value={getFormValue(method, p, form)}\n onChange={(e) => setFormValue(method, p, e.target.value)}\n />\n );\n }\n\n if (p === \"accountIds\") {\n return (\n <AccountIdsField\n key={p}\n property={p}\n accounts={filteredAccounts}\n onChange={(e) => setFormValue(method, p, e.target.value)}\n value={getFormValue(method, p, form)}\n type={displayType(type)}\n />\n );\n }\n\n return (\n <TextField\n key={p}\n label={p}\n value={getSafeStringValue(method, p, form) ?? \"\"}\n onChange={(e) => setFormValue(method, p, e.target.value)}\n helperText={displayType(type)}\n />\n );\n })}\n </>\n );\n};\n","export function safeJsonParse(json: string) {\n try {\n return JSON.parse(json);\n } catch (e) {\n return null;\n }\n}\n","import { useState, ChangeEventHandler, useEffect } from \"react\";\nimport { safeJsonParse } from \"@cede/utils\";\nimport { StoreMethodMetaData, WidgetConfigMetaData } from \"../../../constants/methods\";\nimport { useParamsForms } from \"../../../hooks/useParamsForms/useParamsForms\";\nimport { TextField } from \"@mui/material\";\n\ntype JsonFieldProps = {\n method: StoreMethodMetaData | WidgetConfigMetaData;\n};\n\nfunction countLines(str: string) {\n return str.split(/\\r\\n|\\r|\\n/).length;\n}\n\nexport const JsonField = ({ method }: JsonFieldProps) => {\n const { form, setForm } = useParamsForms((state) => ({\n form: state.forms[method.methodName],\n setForm: state.setForm,\n }));\n const [content, setContent] = useState<string>(\"\");\n\n const onChange: ChangeEventHandler<HTMLTextAreaElement> = (e) => {\n const updatedContent = e.target.value;\n setContent(updatedContent);\n\n const parsed = safeJsonParse(updatedContent);\n\n if (parsed) {\n setForm(method.methodName, parsed);\n }\n };\n\n useEffect(() => {\n setContent(JSON.stringify(form, null, 4));\n }, [form]);\n\n return (\n <TextField\n inputProps={{\n \"data-testid\": `json-field-${method.methodName}`,\n }}\n label=\"Parameters\"\n multiline\n rows={countLines(content)}\n value={content}\n onChange={onChange}\n />\n );\n};\n","import { TextField, useTheme } from \"@mui/material\";\n\nexport type ResultFieldState = \"neutral\" | \"error\" | \"success\";\n\ntype ResultFieldProps = {\n state: ResultFieldState;\n id: string;\n result: any;\n};\n\nexport const ResultField = ({ state, id, result }: ResultFieldProps) => {\n const theme = useTheme();\n return (\n <TextField\n data-testid={`result-${id}-textbox`}\n data-state={state}\n label=\"Result\"\n multiline\n rows={3}\n value={result === null ? \"\" : JSON.stringify(result, null, 2)}\n focused\n sx={{\n \"height\": \"100%\",\n \"& label.Mui-focused\": {\n color:\n state === \"error\"\n ? theme.palette.cedeErrorColor\n : state === \"success\"\n ? theme.palette.text.primary\n : theme.palette.primaryDarkBlue,\n },\n \"& .MuiOutlinedInput-root\": {\n \"height\": \"100%\",\n \"&.Mui-focused fieldset\": {\n borderColor:\n state === \"error\"\n ? theme.palette.cedeErrorColor\n : state === \"success\"\n ? theme.palette.text.primary\n : theme.palette.primaryDarkBlue,\n borderWidth: \"1px\",\n },\n },\n }}\n inputProps={{\n \"data-testid\": `result-${id}`,\n \"disabled\": true,\n \"style\": {\n height: \"100%\",\n color: state === \"error\" ? theme.palette.cedeErrorColor : theme.palette.text.primary,\n },\n }}\n />\n );\n};\n","import { useState } from \"react\";\nimport { Any } from \"@cede/types\";\nimport { StoreMethodMetaData } from \"../../constants/methods\";\nimport { useParamsForms } from \"../../hooks/useParamsForms/useParamsForms\";\nimport { UserFieldGroup } from \"./UserFieldsGroup\";\nimport { JsonField } from \"./fields/JsonField\";\nimport { ResultField, ResultFieldState } from \"./fields/ResultField\";\nimport { Button, Card, useTheme } from \"@mui/material\";\n\nexport type ActionCardProps = {\n req: (params?: any) => Promise<any>;\n id: string;\n method: StoreMethodMetaData;\n};\n\nexport const ActionCard = ({ req, id, method }: ActionCardProps) => {\n const theme = useTheme();\n const [result, setResult] = useState<Any>(null);\n const [state, setState] = useState<ResultFieldState>(\"neutral\");\n const mode = useParamsForms((state) => state.mode);\n const form = useParamsForms((state) => state.forms[method.methodName]);\n\n const onSubmit = async () => {\n try {\n setResult(await req(form));\n setState(\"success\");\n } catch (err) {\n setState(\"error\");\n setResult(JSON.parse(JSON.stringify(err, [\"message\", \"code\", \"description\", \"data\"])));\n }\n };\n\n return (\n <Card\n data-testid={`actionCard-${id}`}\n sx={{\n bgcolor: theme.palette.background.component,\n borderRadius: theme.custom.largeBoxRadius,\n padding: theme.custom.gutterMargin,\n display: \"flex\",\n flexDirection: \"column\",\n gap: theme.custom.gutterMargin,\n }}\n >\n <Button\n data-testid={`button-${id}`}\n variant=\"contained\"\n sx={{\n backgroundColor: theme.palette.primaryDarkBlue,\n color: theme.palette.text.primary,\n borderRadius: theme.custom.buttonDefaultRadius,\n padding: \"0 0.5rem\",\n height: \"36px\",\n textTransform: \"none\",\n }}\n onClick={onSubmit}\n >\n {method.actionName.toLocaleUpperCase()}\n </Button>\n {method.params && mode === \"user\" && <UserFieldGroup method={method} id={id} />}\n\n {method.params && mode === \"json\" && <JsonField method={method} />}\n <ResultField result={result} state={state} id={id} />\n </Card>\n );\n};\n","import * as React from 'react';\n/**\n * @ignore - internal component.\n */\n\nconst GridContext = /*#__PURE__*/React.createContext();\n\nif (process.env.NODE_ENV !== 'production') {\n GridContext.displayName = 'GridContext';\n}\n\nexport default GridContext;","import { generateUtilityClass, generateUtilityClasses } from '@mui/base';\nexport function getGridUtilityClass(slot) {\n return generateUtilityClass('MuiGrid', slot);\n}\nconst SPACINGS = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10];\nconst DIRECTIONS = ['column-reverse', 'column', 'row-reverse', 'row'];\nconst WRAPS = ['nowrap', 'wrap-reverse', 'wrap'];\nconst GRID_SIZES = ['auto', true, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12];\nconst gridClasses = generateUtilityClasses('MuiGrid', ['root', 'container', 'item', 'zeroMinWidth', // spacings\n...SPACINGS.map(spacing => `spacing-xs-${spacing}`), // direction values\n...DIRECTIONS.map(direction => `direction-xs-${direction}`), // wrap values\n...WRAPS.map(wrap => `wrap-xs-${wrap}`), // grid sizes for all breakpoints\n...GRID_SIZES.map(size => `grid-xs-${size}`), ...GRID_SIZES.map(size => `grid-sm-${size}`), ...GRID_SIZES.map(size => `grid-md-${size}`), ...GRID_SIZES.map(size => `grid-lg-${size}`), ...GRID_SIZES.map(size => `grid-xl-${size}`)]);\nexport default gridClasses;","import _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nconst _excluded = [\"className\", \"columns\", \"columnSpacing\", \"component\", \"container\", \"direction\", \"item\", \"rowSpacing\", \"spacing\", \"wrap\", \"zeroMinWidth\"];\n// A grid component using the following libs as inspiration.\n//\n// For the implementation:\n// - https://getbootstrap.com/docs/4.3/layout/grid/\n// - https://github.com/kristoferjoseph/flexboxgrid/blob/master/src/css/flexboxgrid.css\n// - https://github.com/roylee0704/react-flexbox-grid\n// - https://material.angularjs.org/latest/layout/introduction\n//\n// Follow this flexbox Guide to better understand the underlying model:\n// - https://css-tricks.com/snippets/css/a-guide-to-flexbox/\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport { unstable_extendSxProp as extendSxProp, handleBreakpoints, unstable_resolveBreakpointValues as resolveBreakpointValues } from '@mui/system';\nimport { unstable_composeClasses as composeClasses } from '@mui/base';\nimport requirePropFactory from '../utils/requirePropFactory';\nimport styled from '../styles/styled';\nimport useThemeProps from '../styles/useThemeProps';\nimport useTheme from '../styles/useTheme';\nimport GridContext from './GridContext';\nimport gridClasses, { getGridUtilityClass } from './gridClasses';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\n\nfunction getOffset(val) {\n const parse = parseFloat(val);\n return `${parse}${String(val).replace(String(parse), '') || 'px'}`;\n}\n\nexport function generateGrid({\n theme,\n ownerState\n}) {\n let size;\n return theme.breakpoints.keys.reduce((globalStyles, breakpoint) => {\n // Use side effect over immutability for better performance.\n let styles = {};\n\n if (ownerState[breakpoint]) {\n size = ownerState[breakpoint];\n }\n\n if (!size) {\n return globalStyles;\n }\n\n if (size === true) {\n // For the auto layouting\n styles = {\n flexBasis: 0,\n flexGrow: 1,\n maxWidth: '100%'\n };\n } else if (size === 'auto') {\n styles = {\n flexBasis: 'auto',\n flexGrow: 0,\n flexShrink: 0,\n maxWidth: 'none',\n width: 'auto'\n };\n } else {\n const columnsBreakpointValues = resolveBreakpointValues({\n values: ownerState.columns,\n breakpoints: theme.breakpoints.values\n });\n const columnValue = typeof columnsBreakpointValues === 'object' ? columnsBreakpointValues[breakpoint] : columnsBreakpointValues;\n\n if (columnValue === undefined || columnValue === null) {\n return globalStyles;\n } // Keep 7 significant numbers.\n\n\n const width = `${Math.round(size / columnValue * 10e7) / 10e5}%`;\n let more = {};\n\n if (ownerState.container && ownerState.item && ownerState.columnSpacing !== 0) {\n const themeSpacing = theme.spacing(ownerState.columnSpacing);\n\n if (themeSpacing !== '0px') {\n const fullWidth = `calc(${width} + ${getOffset(themeSpacing)})`;\n more = {\n flexBasis: fullWidth,\n maxWidth: fullWidth\n };\n }\n } // Close to the bootstrap implementation:\n // https://github.com/twbs/bootstrap/blob/8fccaa2439e97ec72a4b7dc42ccc1f649790adb0/scss/mixins/_grid.scss#L41\n\n\n styles = _extends({\n flexBasis: width,\n flexGrow: 0,\n maxWidth: width\n }, more);\n } // No need for a media query for the first size.\n\n\n if (theme.breakpoints.values[breakpoint] === 0) {\n Object.assign(globalStyles, styles);\n } else {\n globalStyles[theme.breakpoints.up(breakpoint)] = styles;\n }\n\n return globalStyles;\n }, {});\n}\nexport function generateDirection({\n theme,\n ownerState\n}) {\n const directionValues = resolveBreakpointValues({\n values: ownerState.direction,\n breakpoints: theme.breakpoints.values\n });\n return handleBreakpoints({\n theme\n }, directionValues, propValue => {\n const output = {\n flexDirection: propValue\n };\n\n if (propValue.indexOf('column') === 0) {\n output[`& > .${gridClasses.item}`] = {\n maxWidth: 'none'\n };\n }\n\n return output;\n });\n}\n/**\n * Extracts zero value breakpoint keys before a non-zero value breakpoint key.\n * @example { xs: 0, sm: 0, md: 2, lg: 0, xl: 0 } or [0, 0, 2, 0, 0]\n * @returns [xs, sm]\n */\n\nfunction extractZeroValueBreakpointKeys({\n breakpoints,\n values\n}) {\n let nonZeroKey = '';\n Object.keys(values).forEach(key => {\n if (nonZeroKey !== '') {\n return;\n }\n\n if (values[key] !== 0) {\n nonZeroKey = key;\n }\n });\n const sortedBreakpointKeysByValue = Object.keys(breakpoints).sort((a, b) => {\n return breakpoints[a] - breakpoints[b];\n });\n return sortedBreakpointKeysByValue.slice(0, sortedBreakpointKeysByValue.indexOf(nonZeroKey));\n}\n\nexport function generateRowGap({\n theme,\n ownerState\n}) {\n const {\n container,\n rowSpacing\n } = ownerState;\n let styles = {};\n\n if (container && rowSpacing !== 0) {\n const rowSpacingValues = resolveBreakpointValues({\n values: rowSpacing,\n breakpoints: theme.breakpoints.values\n });\n let zeroValueBreakpointKeys;\n\n if (typeof rowSpacingValues === 'object') {\n zeroValueBreakpointKeys = extractZeroValueBreakpointKeys({\n breakpoints: theme.breakpoints.values,\n values: rowSpacingValues\n });\n }\n\n styles = handleBreakpoints({\n theme\n }, rowSpacingValues, (propValue, breakpoint) => {\n var _zeroValueBreakpointK;\n\n const themeSpacing = theme.spacing(propValue);\n\n if (themeSpacing !== '0px') {\n return {\n marginTop: `-${getOffset(themeSpacing)}`,\n [`& > .${gridClasses.item}`]: {\n paddingTop: getOffset(themeSpacing)\n }\n };\n }\n\n if ((_zeroValueBreakpointK = zeroValueBreakpointKeys) != null && _zeroValueBreakpointK.includes(breakpoint)) {\n return {};\n }\n\n return {\n marginTop: 0,\n [`& > .${gridClasses.item}`]: {\n paddingTop: 0\n }\n };\n });\n }\n\n return styles;\n}\nexport function generateColumnGap({\n theme,\n ownerState\n}) {\n const {\n container,\n columnSpacing\n } = ownerState;\n let styles = {};\n\n if (container && columnSpacing !== 0) {\n const columnSpacingValues = resolveBreakpointValues({\n values: columnSpacing,\n breakpoints: theme.breakpoints.values\n });\n let zeroValueBreakpointKeys;\n\n if (typeof columnSpacingValues === 'object') {\n zeroValueBreakpointKeys = extractZeroValueBreakpointKeys({\n breakpoints: theme.breakpoints.values,\n values: columnSpacingValues\n });\n }\n\n styles = handleBreakpoints({\n theme\n }, columnSpacingValues, (propValue, breakpoint) => {\n var _zeroValueBreakpointK2;\n\n const themeSpacing = theme.spacing(propValue);\n\n if (themeSpacing !== '0px') {\n return {\n width: `calc(100% + ${getOffset(themeSpacing)})`,\n marginLeft: `-${getOffset(themeSpacing)}`,\n [`& > .${gridClasses.item}`]: {\n paddingLeft: getOffset(themeSpacing)\n }\n };\n }\n\n if ((_zeroValueBreakpointK2 = zeroValueBreakpointKeys) != null && _zeroValueBreakpointK2.includes(breakpoint)) {\n return {};\n }\n\n return {\n width: '100%',\n marginLeft: 0,\n [`& > .${gridClasses.item}`]: {\n paddingLeft: 0\n }\n };\n });\n }\n\n return styles;\n}\nexport function resolveSpacingStyles(spacing, breakpoints, styles = {}) {\n // undefined/null or `spacing` <= 0\n if (!spacing || spacing <= 0) {\n return [];\n } // in case of string/number `spacing`\n\n\n if (typeof spacing === 'string' && !Number.isNaN(Number(spacing)) || typeof spacing === 'number') {\n return [styles[`spacing-xs-${String(spacing)}`]];\n } // in case of object `spacing`\n\n\n const spacingStyles = [];\n breakpoints.forEach(breakpoint => {\n const value = spacing[breakpoint];\n\n if (Number(value) > 0) {\n spacingStyles.push(styles[`spacing-${breakpoint}-${String(value)}`]);\n }\n });\n return spacingStyles;\n} // Default CSS values\n// flex: '0 1 auto',\n// flexDirection: 'row',\n// alignItems: 'flex-start',\n// flexWrap: 'nowrap',\n// justifyContent: 'flex-start',\n\nconst GridRoot = styled('div', {\n name: 'MuiGrid',\n slot: 'Root',\n overridesResolver: (props, styles) => {\n const {\n ownerState\n } = props;\n const {\n container,\n direction,\n item,\n spacing,\n wrap,\n zeroMinWidth,\n breakpoints\n } = ownerState;\n let spacingStyles = []; // in case of grid item\n\n if (container) {\n spacingStyles = resolveSpacingStyles(spacing, breakpoints, styles);\n }\n\n const breakpointsStyles = [];\n breakpoints.forEach(breakpoint => {\n const value = ownerState[breakpoint];\n\n if (value) {\n breakpointsStyles.push(styles[`grid-${breakpoint}-${String(value)}`]);\n }\n });\n return [styles.root, container && styles.container, item && styles.item, zeroMinWidth && styles.zeroMinWidth, ...spacingStyles, direction !== 'row' && styles[`direction-xs-${String(direction)}`], wrap !== 'wrap' && styles[`wrap-xs-${String(wrap)}`], ...breakpointsStyles];\n }\n})(({\n ownerState\n}) => _extends({\n boxSizing: 'border-box'\n}, ownerState.container && {\n display: 'flex',\n flexWrap: 'wrap',\n width: '100%'\n}, ownerState.item && {\n margin: 0 // For instance, it's useful when used with a `figure` element.\n\n}, ownerState.zeroMinWidth && {\n minWidth: 0\n}, ownerState.wrap !== 'wrap' && {\n flexWrap: ownerState.wrap\n}), generateDirection, generateRowGap, generateColumnGap, generateGrid);\nexport function resolveSpacingClasses(spacing, breakpoints) {\n // undefined/null or `spacing` <= 0\n if (!spacing || spacing <= 0) {\n return [];\n } // in case of string/number `spacing`\n\n\n if (typeof spacing === 'string' && !Number.isNaN(Number(spacing)) || typeof spacing === 'number') {\n return [`spacing-xs-${String(spacing)}`];\n } // in case of object `spacing`\n\n\n const classes = [];\n breakpoints.forEach(breakpoint => {\n const value = spacing[breakpoint];\n\n if (Number(value) > 0) {\n const className = `spacing-${breakpoint}-${String(value)}`;\n classes.push(className);\n }\n });\n return classes;\n}\n\nconst useUtilityClasses = ownerState => {\n const {\n classes,\n container,\n direction,\n item,\n spacing,\n wrap,\n zeroMinWidth,\n breakpoints\n } = ownerState;\n let spacingClasses = []; // in case of grid item\n\n if (container) {\n spacingClasses = resolveSpacingClasses(spacing, breakpoints);\n }\n\n const breakpointsClasses = [];\n breakpoints.forEach(breakpoint => {\n const value = ownerState[breakpoint];\n\n if (value) {\n breakpointsClasses.push(`grid-${breakpoint}-${String(value)}`);\n }\n });\n const slots = {\n root: ['root', container && 'container', item && 'item', zeroMinWidth && 'zeroMinWidth', ...spacingClasses, direction !== 'row' && `direction-xs-${String(direction)}`, wrap !== 'wrap' && `wrap-xs-${String(wrap)}`, ...breakpointsClasses]\n };\n return composeClasses(slots, getGridUtilityClass, classes);\n};\n\nconst Grid = /*#__PURE__*/React.forwardRef(function Grid(inProps, ref) {\n const themeProps = useThemeProps({\n props: inProps,\n name: 'MuiGrid'\n });\n const {\n breakpoints\n } = useTheme();\n const props = extendSxProp(themeProps);\n\n const {\n className,\n columns: columnsProp,\n columnSpacing: columnSpacingProp,\n component = 'div',\n container = false,\n direction = 'row',\n item = false,\n rowSpacing: rowSpacingProp,\n spacing = 0,\n wrap = 'wrap',\n zeroMinWidth = false\n } = props,\n other = _objectWithoutPropertiesLoose(props, _excluded);\n\n const rowSpacing = rowSpacingProp || spacing;\n const columnSpacing = columnSpacingProp || spacing;\n const columnsContext = React.useContext(GridContext); // columns set with default breakpoint unit of 12\n\n const columns = container ? columnsProp || 12 : columnsContext;\n const breakpointsValues = {};\n\n const otherFiltered = _extends({}, other);\n\n breakpoints.keys.forEach(breakpoint => {\n if (other[breakpoint] != null) {\n breakpointsValues[breakpoint] = other[breakpoint];\n delete otherFiltered[breakpoint];\n }\n });\n\n const ownerState = _extends({}, props, {\n columns,\n container,\n direction,\n item,\n rowSpacing,\n columnSpacing,\n wrap,\n zeroMinWidth,\n spacing\n }, breakpointsValues, {\n breakpoints: breakpoints.keys\n });\n\n const classes = useUtilityClasses(ownerState);\n return /*#__PURE__*/_jsx(GridContext.Provider, {\n value: columns,\n children: /*#__PURE__*/_jsx(GridRoot, _extends({\n ownerState: ownerState,\n className: clsx(classes.root, className),\n as: component,\n ref: ref\n }, otherFiltered))\n });\n});\nprocess.env.NODE_ENV !== \"production\" ? Grid.propTypes\n/* remove-proptypes */\n= {\n // ----------------------------- Warning --------------------------------\n // | These PropTypes are generated from the TypeScript type definitions |\n // | To update them edit the d.ts file and run \"yarn proptypes\" |\n // ----------------------------------------------------------------------\n\n /**\n * The content of the component.\n */\n children: PropTypes.node,\n\n /**\n * Override or extend the styles applied to the component.\n */\n classes: PropTypes.object,\n\n /**\n * @ignore\n */\n className: PropTypes.string,\n\n /**\n * The number of columns.\n * @default 12\n */\n columns: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), PropTypes.number, PropTypes.object]),\n\n /**\n * Defines the horizontal space between the type `item` components.\n * It overrides the value of the `spacing` prop.\n */\n columnSpacing: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.string])), PropTypes.number, PropTypes.object, PropTypes.string]),\n\n /**\n * The component used for the root node.\n * Either a string to use a HTML element or a component.\n */\n component: PropTypes.elementType,\n\n /**\n * If `true`, the component will have the flex *container* behavior.\n * You should be wrapping *items* with a *container*.\n * @default false\n */\n container: PropTypes.bool,\n\n /**\n * Defines the `flex-direction` style property.\n * It is applied for all screen sizes.\n * @default 'row'\n */\n direction: PropTypes.oneOfType([PropTypes.oneOf(['column-reverse', 'column', 'row-reverse', 'row']), PropTypes.arrayOf(PropTypes.oneOf(['column-reverse', 'column', 'row-reverse', 'row'])), PropTypes.object]),\n\n /**\n * If `true`, the component will have the flex *item* behavior.\n * You should be wrapping *items* with a *container*.\n * @default false\n */\n item: PropTypes.bool,\n\n /**\n * If a number, it sets the number of columns the grid item uses.\n * It can't be greater than the total number of columns of the container (12 by default).\n * If 'auto', the grid item's width matches its content.\n * If false, the prop is ignored.\n * If true, the grid item's width grows to use the space available in the grid container.\n * The value is applied for the `lg` breakpoint and wider screens if not overridden.\n * @default false\n */\n lg: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.number, PropTypes.bool]),\n\n /**\n * If a number, it sets the number of columns the grid item uses.\n * It can't be greater than the total number of columns of the container (12 by default).\n * If 'auto', the grid item's width matches its content.\n * If false, the prop is ignored.\n * If true, the grid item's width grows to use the space available in the grid container.\n * The value is applied for the `md` breakpoint and wider screens if not overridden.\n * @default false\n */\n md: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.number, PropTypes.bool]),\n\n /**\n * Defines the vertical space between the type `item` components.\n * It overrides the value of the `spacing` prop.\n */\n rowSpacing: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.string])), PropTypes.number, PropTypes.object, PropTypes.string]),\n\n /**\n * If a number, it sets the number of columns the grid item uses.\n * It can't be greater than the total number of columns of the container (12 by default).\n * If 'auto', the grid item's width matches its content.\n * If false, the prop is ignored.\n * If true, the grid item's width grows to use the space available in the grid container.\n * The value is applied for the `sm` breakpoint and wider screens if not overridden.\n * @default false\n */\n sm: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.number, PropTypes.bool]),\n\n /**\n * Defines the space between the type `item` components.\n * It can only be used on a type `container` component.\n * @default 0\n */\n spacing: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.string])), PropTypes.number, PropTypes.object, PropTypes.string]),\n\n /**\n * The system prop that allows defining system overrides as well as additional CSS styles.\n */\n sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),\n\n /**\n * Defines the `flex-wrap` style property.\n * It's applied for all screen sizes.\n * @default 'wrap'\n */\n wrap: PropTypes.oneOf(['nowrap', 'wrap-reverse', 'wrap']),\n\n /**\n * If a number, it sets the number of columns the grid item uses.\n * It can't be greater than the total number of columns of the container (12 by default).\n * If 'auto', the grid item's width matches its content.\n * If false, the prop is ignored.\n * If true, the grid item's width grows to use the space available in the grid container.\n * The value is applied for the `xl` breakpoint and wider screens if not overridden.\n * @default false\n */\n xl: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.number, PropTypes.bool]),\n\n /**\n * If a number, it sets the number of columns the grid item uses.\n * It can't be greater than the total number of columns of the container (12 by default).\n * If 'auto', the grid item's width matches its content.\n * If false, the prop is ignored.\n * If true, the grid item's width grows to use the space available in the grid container.\n * The value is applied for all the screen sizes with the lowest priority.\n * @default false\n */\n xs: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.number, PropTypes.bool]),\n\n /**\n * If `true`, it sets `min-width: 0` on the item.\n * Refer to the limitations section of the documentation to better understand the use case.\n * @default false\n */\n zeroMinWidth: PropTypes.bool\n} : void 0;\n\nif (process.env.NODE_ENV !== 'production') {\n const requireProp = requirePropFactory('Grid', Grid); // eslint-disable-next-line no-useless-concat\n\n Grid['propTypes' + ''] = _extends({}, Grid.propTypes, {\n direction: requireProp('container'),\n lg: requireProp('item'),\n md: requireProp('item'),\n sm: requireProp('item'),\n spacing: requireProp('container'),\n wrap: requireProp('container'),\n xs: requireProp('item'),\n zeroMinWidth: requireProp('item')\n });\n}\n\nexport default Grid;","import { cherryPickState } from \"@cede/utils\";\nimport { useCedeStore } from \"../hooks/useCedeStore\";\nimport CancelIcon from \"@mui/icons-material/Cancel\";\nimport CheckCircleIcon from \"@mui/icons-material/CheckCircle\";\nimport { useTheme, Card, Typography, Grid } from \"@mui/material\";\n\nexport const CheckConnection = () => {\n const theme = useTheme();\n const { vaults, provider } = useCedeStore(cherryPickState([\"vaults\", \"provider\"]));\n\n return (\n <Card\n id={`checkConnection`}\n sx={{\n bgcolor: theme.palette.background.component,\n borderRadius: theme.custom.largeBoxRadius,\n padding: theme.custom.gutterMargin,\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n justifyContent: \"center\",\n gap: theme.custom.gutterMargin,\n }}\n >\n <Grid container spacing={2} alignItems={\"center\"}>\n <Grid item xs={4} sx={{ display: \"flex\", justifyContent: \"center\" }}>\n {provider ? (\n <CheckCircleIcon id={\"provider-available\"} sx={{ color: theme.palette.text.primary }} />\n ) : (\n <CancelIcon sx={{ color: theme.palette.cedeErrorColor }} />\n )}\n </Grid>\n <Grid item xs={8}>\n {provider ? (\n <Typography sx={{ color: theme.palette.text.primary }}> Provider available</Typography>\n ) : (\n <Typography sx={{ color: theme.palette.cedeErrorColor }}> Provider not available</Typography>\n )}\n </Grid>\n\n <Grid item xs={4} sx={{ display: \"flex\", justifyContent: \"center\" }}>\n {vaults.length ? (\n <CheckCircleIcon id={\"extension-connected\"} sx={{ color: theme.palette.text.primary }} />\n ) : (\n <CancelIcon sx={{ color: theme.palette.text.disabled }} />\n )}\n </Grid>\n <Grid item xs={8}>\n {vaults.length ? (\n <Typography sx={{ color: theme.palette.text.primary }}> Extension connected</Typography>\n ) : (\n <Typography sx={{ color: theme.palette.text.disabled }}> Extension not connected</Typography>\n )}\n </Grid>\n </Grid>\n </Card>\n );\n};\n","import _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nconst _excluded = [\"component\", \"direction\", \"spacing\", \"divider\", \"children\"];\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport { createUnarySpacing, getValue, handleBreakpoints, mergeBreakpointsInOrder, unstable_extendSxProp as extendSxProp, unstable_resolveBreakpointValues as resolveBreakpointValues } from '@mui/system';\nimport { deepmerge } from '@mui/utils';\nimport styled from '../styles/styled';\nimport useThemeProps from '../styles/useThemeProps';\n/**\n * Return an array with the separator React element interspersed between\n * each React node of the input children.\n *\n * > joinChildren([1,2,3], 0)\n * [1,0,2,0,3]\n */\n\nimport { jsx as _jsx } from \"react/jsx-runtime\";\n\nfunction joinChildren(children, separator) {\n const childrenArray = React.Children.toArray(children).filter(Boolean);\n return childrenArray.reduce((output, child, index) => {\n output.push(child);\n\n if (index < childrenArray.length - 1) {\n output.push( /*#__PURE__*/React.cloneElement(separator, {\n key: `separator-${index}`\n }));\n }\n\n return output;\n }, []);\n}\n\nconst getSideFromDirection = direction => {\n return {\n row: 'Left',\n 'row-reverse': 'Right',\n column: 'Top',\n 'column-reverse': 'Bottom'\n }[direction];\n};\n\nexport const style = ({\n ownerState,\n theme\n}) => {\n let styles = _extends({\n display: 'flex',\n flexDirection: 'column'\n }, handleBreakpoints({\n theme\n }, resolveBreakpointValues({\n values: ownerState.direction,\n breakpoints: theme.breakpoints.values\n }), propValue => ({\n flexDirection: propValue\n })));\n\n if (ownerState.spacing) {\n const transformer = createUnarySpacing(theme);\n const base = Object.keys(theme.breakpoints.values).reduce((acc, breakpoint) => {\n if (typeof ownerState.spacing === 'object' && ownerState.spacing[breakpoint] != null || typeof ownerState.direction === 'object' && ownerState.direction[breakpoint] != null) {\n acc[breakpoint] = true;\n }\n\n return acc;\n }, {});\n const directionValues = resolveBreakpointValues({\n values: ownerState.direction,\n base\n });\n const spacingValues = resolveBreakpointValues({\n values: ownerState.spacing,\n base\n });\n\n if (typeof directionValues === 'object') {\n Object.keys(directionValues).forEach((breakpoint, index, breakpoints) => {\n const directionValue = directionValues[breakpoint];\n\n if (!directionValue) {\n const previousDirectionValue = index > 0 ? directionValues[breakpoints[index - 1]] : 'column';\n directionValues[breakpoint] = previousDirectionValue;\n }\n });\n }\n\n const styleFromPropValue = (propValue, breakpoint) => {\n return {\n '& > :not(style) + :not(style)': {\n margin: 0,\n [`margin${getSideFromDirection(breakpoint ? directionValues[breakpoint] : ownerState.direction)}`]: getValue(transformer, propValue)\n }\n };\n };\n\n styles = deepmerge(styles, handleBreakpoints({\n theme\n }, spacingValues, styleFromPropValue));\n }\n\n styles = mergeBreakpointsInOrder(theme.breakpoints, styles);\n return styles;\n};\nconst StackRoot = styled('div', {\n name: 'MuiStack',\n slot: 'Root',\n overridesResolver: (props, styles) => {\n return [styles.root];\n }\n})(style);\nconst Stack = /*#__PURE__*/React.forwardRef(function Stack(inProps, ref) {\n const themeProps = useThemeProps({\n props: inProps,\n name: 'MuiStack'\n });\n const props = extendSxProp(themeProps);\n\n const {\n component = 'div',\n direction = 'column',\n spacing = 0,\n divider,\n children\n } = props,\n other = _objectWithoutPropertiesLoose(props, _excluded);\n\n const ownerState = {\n direction,\n spacing\n };\n return /*#__PURE__*/_jsx(StackRoot, _extends({\n as: component,\n ownerState: ownerState,\n ref: ref\n }, other, {\n children: divider ? joinChildren(children, divider) : children\n }));\n});\nprocess.env.NODE_ENV !== \"production\" ? Stack.propTypes\n/* remove-proptypes */\n= {\n // ----------------------------- Warning --------------------------------\n // | These PropTypes are generated from the TypeScript type definitions |\n // | To update them edit the d.ts file and run \"yarn proptypes\" |\n // ----------------------------------------------------------------------\n\n /**\n * The content of the component.\n */\n children: PropTypes.node,\n\n /**\n * The component used for the root node.\n * Either a string to use a HTML element or a component.\n */\n component: PropTypes.elementType,\n\n /**\n * Defines the `flex-direction` style property.\n * It is applied for all screen sizes.\n * @default 'column'\n */\n direction: PropTypes.oneOfType([PropTypes.oneOf(['column-reverse', 'column', 'row-reverse', 'row']), PropTypes.arrayOf(PropTypes.oneOf(['column-reverse', 'column', 'row-reverse', 'row'])), PropTypes.object]),\n\n /**\n * Add an element between each child.\n */\n divider: PropTypes.node,\n\n /**\n * Defines the space between immediate children.\n * @default 0\n */\n spacing: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.string])), PropTypes.number, PropTypes.object, PropTypes.string]),\n\n /**\n * The system prop, which allows defining system overrides as well as additional CSS styles.\n */\n sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])\n} : void 0;\nexport default Stack;","import { Button } from \"@cede/ds\";\nimport { useParamsForms } from \"../hooks/useParamsForms/useParamsForms\";\nimport { Box, useTheme, Typography, Switch, styled, Stack } from \"@mui/material\";\n\nconst AntSwitch = styled(Switch)(({ theme }) => ({\n \"width\": 28,\n \"height\": 16,\n \"padding\": 0,\n \"display\": \"flex\",\n \"&:active\": {\n \"& .MuiSwitch-thumb\": {\n width: 15,\n },\n \"& .MuiSwitch-switchBase.Mui-checked\": {\n transform: \"translateX(9px)\",\n },\n },\n \"& .MuiSwitch-switchBase\": {\n \"padding\": 2,\n \"&.Mui-checked\": {\n \"transform\": \"translateX(12px)\",\n \"color\": \"#fff\",\n \"& + .MuiSwitch-track\": {\n opacity: 1,\n backgroundColor: theme.palette.mode === \"dark\" ? \"#177ddc\" : \"#1890ff\",\n },\n },\n },\n \"& .MuiSwitch-thumb\": {\n boxShadow: \"0 2px 4px 0 rgb(0 35 11 / 20%)\",\n width: 12,\n height: 12,\n borderRadius: 6,\n transition: theme.transitions.create([\"width\"], {\n duration: 200,\n }),\n },\n \"& .MuiSwitch-track\": {\n borderRadius: 16 / 2,\n opacity: 1,\n backgroundColor: theme.palette.mode === \"dark\" ? \"rgba(255,255,255,.35)\" : \"rgba(0,0,0,.25)\",\n boxSizing: \"border-box\",\n },\n}));\nexport const Settings = () => {\n const theme = useTheme();\n const mode = useParamsForms((state) => state.mode);\n const toggleMode = useParamsForms((state) => state.toggleMode);\n const allowPersistence = useParamsForms((state) => state.persist);\n const togglePersistence = useParamsForms((state) => state.togglePersist);\n const resetForms = useParamsForms((state) => state.resetForms);\n\n return (\n <Box\n zIndex={theme.custom.zIndex.topLayer}\n position={\"fixed\"}\n right={\"1vw\"}\n top={\"1vw\"}\n display={\"flex\"}\n flexDirection={\"column\"}\n gap={theme.custom.gutterMargin}\n padding={theme.custom.gutterMargin}\n sx={{\n backgroundColor: theme.palette.background.darkPaper,\n }}\n >\n <Box display={\"flex\"} alignItems={\"center\"} gap={theme.custom.bigGutterMargin}>\n <Typography fontWeight={\"bold\"}>Mode</Typography>\n <Stack direction=\"row\" spacing={1} alignItems=\"center\">\n <Typography>User</Typography>\n <AntSwitch checked={mode === \"json\"} onChange={toggleMode} />\n <Typography>JSON</Typography>\n </Stack>\n </Box>\n <Box display={\"flex\"} alignItems={\"center\"} gap={theme.custom.bigGutterMargin}>\n <Typography fontWeight={\"bold\"}>Save data</Typography>\n <Stack direction=\"row\" spacing={1} alignItems=\"center\">\n <Typography>Off</Typography>\n <AntSwitch checked={allowPersistence} onChange={togglePersistence} />\n <Typography>On</Typography>\n </Stack>\n </Box>\n <Box display={\"flex\"} alignItems={\"center\"} justifyContent={\"flex-end\"} gap={theme.custom.bigGutterMargin}>\n <Button onClick={resetForms}>Reset forms</Button>\n </Box>\n </Box>\n );\n};\n","import { ReactElement, useState } from \"react\";\nimport { StoreMethodMetaData } from \"../constants/methods\";\nimport { useCedeStore } from \"../hooks/useCedeStore\";\nimport { ActionCard } from \"./form/ActionCard\";\nimport { displayInstallationModal } from \"@cedelabs/providers/src\";\n// import { CedeOnboardingModal } from \"@cedelabs/widgets/src\";\nimport { Box, useTheme, Typography } from \"@mui/material\";\n\nexport type SuiteSectionProps = {\n title: string;\n methods: StoreMethodMetaData[];\n startSlot?: ReactElement;\n};\n\nexport const SuiteSection = ({ title, methods, startSlot }: SuiteSectionProps) => {\n const theme = useTheme();\n const provider = useCedeStore((state) => state.provider);\n const [openModal, setOpenModal] = useState(false);\n return (\n <Box\n sx={{\n width: \"100%\",\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"flex-start\",\n justifyContent: \"center\",\n gap: theme.custom.smallGutterMargin,\n marginBottom: theme.custom.bigGutterMargin,\n }}\n >\n {/* <CedeOnboardingModal open={openModal} exit={() => setOpenModal(false)} /> */}\n <Typography\n sx={{\n fontSize: \"25px\",\n lineHeight: \"40px\",\n fontWeight: \"600\",\n }}\n >\n {title}\n </Typography>\n\n <Box\n sx={{\n width: \"100%\",\n display: \"grid\",\n gridTemplateColumns: `repeat(auto-fill, minmax(350px, 1fr))`,\n gap: theme.custom.bigGutterMargin,\n }}\n >\n {startSlot}\n {methods.map((method) => (\n <ActionCard\n key={method.methodName}\n id={method.methodName}\n method={method}\n req={async (params) => {\n if (provider) {\n return await provider.request({ method: method.methodName, params });\n } else {\n // setOpenModal(true);\n displayInstallationModal({\n readOnlyOnboarding: params?.readOnlyOnboarding,\n callbackUrl: params?.callbackUrl ?? \"https://send.cede.store\",\n });\n return \"Opening Cede installation modal...\";\n }\n }}\n />\n ))}\n </Box>\n </Box>\n );\n};\n","var Hf = Object.defineProperty;\nvar Wf = (d, e, t) => e in d ? Hf(d, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : d[e] = t;\nvar ft = (d, e, t) => (Wf(d, typeof e != \"symbol\" ? e + \"\" : e, t), t);\nvar Fs = /* @__PURE__ */ ((d) => (d.TRADE = \"trade\", d.READ = \"read\", d.WITHDRAW = \"withdraw\", d))(Fs || {});\nconst Yf = {\n // transport related errors\n rpc: {\n parse: {\n code: -32700,\n message: \"JSON parsing error\",\n description: \"{data.description}\",\n documentation: \"An error occurred on the server while parsing the JSON text\"\n },\n invalidRequest: {\n code: -32600,\n message: \"Invalid request object\",\n description: \"{data.description}\",\n documentation: \"The JSON sent is not a valid Request object\"\n },\n methodNotFound: {\n code: -32601,\n message: \"Method not found\",\n description: \"{data.description}\",\n documentation: \"The method does not exist / is not available\"\n },\n invalidParams: {\n code: -32602,\n message: \"Invalid method parameter(s)\",\n description: \"{data.description}\",\n documentation: \"Provided parameters do not match the method signature\"\n },\n internal: {\n code: -32603,\n message: \"Internal JSON-RPC error\",\n description: \"{data.description}\",\n documentation: \"Something went wrong in the communication engine of cede.store\"\n }\n },\n defaultError: {\n code: 1e3,\n message: \"cede.store default error\",\n description: \"{vault_and_account}: An error occurred\",\n documentation: \"Something went wrong in cede.store\"\n },\n // ccxt library specific errors\n ccxt: {\n baseError: {\n code: 3e3,\n message: \"CEX error\",\n description: \"{account}: {error.message}\",\n documentation: \"The exchange has a system abnormality. The original exchange error is provided.\"\n },\n requestExpired: {\n code: 3001,\n message: \"Request expired\",\n description: \"{account}: request expired. This happens when ccxt throttler drops pending requests\",\n documentation: \"The request has expired\"\n }\n // general: {\n // cexError: {\n // code: 3001,\n // message: \"CEX error\",\n // description: `${ErrorPlaceholder.ACCOUNT}: {error.message}`,\n // documentation: \"The exchange has a system abnormality. The original exchange error is provided.\",\n // },\n // cexApiAuthError: {\n // code: 3002,\n // message: \"CEX API authentication error\",\n // description: `${ErrorPlaceholder.ACCOUNT}: {error.message}`,\n // documentation: \"Invalid API key or permission denied\",\n // },\n // cexNotAvailable: {\n // code: 3003,\n // message: \"CEX is not available\",\n // description: `${ErrorPlaceholder.ACCOUNT}: {error.message}`,\n // documentation: \"Exchange is not available, please try again later\",\n // },\n // cexOnMaintenance: {\n // code: 3004,\n // message: \"CEX on maintenance\",\n // description: `${ErrorPlaceholder.ACCOUNT}: {error.message}`,\n // documentation: \"Exchange is on maintenance, please try again later\",\n // },\n // invalidNonce: {\n // code: 3005,\n // message: \"Invalid nonce\",\n // description: `${ErrorPlaceholder.ACCOUNT}: {error.message}`,\n // documentation:\n // \"The API keys seem to be used by another app. The user should create new API keys and use them only for cede.store.\",\n // },\n // notSupported: {\n // code: 3006,\n // message: \"Not supported\",\n // description: `${ErrorPlaceholder.ACCOUNT}: {error.message}`,\n // documentation: \"This error is raised if the endpoint is not offered/not supported by the exchange API\",\n // },\n // },\n // order: {\n // orderNotFound: {\n // code: 3100,\n // message: \"Could not find the order\",\n // description: `${ErrorPlaceholder.ACCOUNT}: {error.message}`,\n // documentation: \"Raised when you are trying to fetch or cancel a non-existent order\",\n // },\n // orderImmediatelyFillable: {\n // code: 3101,\n // message: \"The order is immediately fillable\",\n // description: `${ErrorPlaceholder.ACCOUNT}: {error.message}`,\n // documentation:\n // \"Raised when the order you're trying to place would immediately be triggered and filled, and not be placed on the order book\",\n // },\n // orderNotFillable: {\n // code: 3102,\n // message: \"The order is not fillable\",\n // description: `${ErrorPlaceholder.ACCOUNT}: {error.message}`,\n // documentation: \"Unable to fill this order\",\n // },\n // invalidOrder: {\n // code: 3103,\n // message: \"The order is invalid\",\n // description: `${ErrorPlaceholder.ACCOUNT}: {error.message}`,\n // documentation: \"Raised when the order you're trying to place is not valid\",\n // },\n // duplicateOrderId: {\n // code: 3104,\n // message: \"Two or more orders have identical ids\",\n // description: `${ErrorPlaceholder.ACCOUNT}: {error.message}`,\n // documentation: \"Raised when two or more orders have identical ids\",\n // },\n // },\n // request: {\n // badRequest: {\n // code: 3200,\n // message: \"Bad request\",\n // description: `${ErrorPlaceholder.ACCOUNT}: {error.message}`,\n // documentation: \"The request is malformed, the content of the request is not valid\",\n // },\n // requestTimeout: {\n // code: 3201,\n // message: \"Request timeout\",\n // description: `${ErrorPlaceholder.ACCOUNT}: {error.message}`,\n // documentation: \"The request timed out\",\n // },\n // badResponse: {\n // code: 3202,\n // message: \"Bad response\",\n // description: `${ErrorPlaceholder.ACCOUNT}: {error.message}`,\n // documentation: \"The response from the exchange is malformed\",\n // },\n // rateLimitExceeded: {\n // code: 3203,\n // message: \"Rate limit exceeded\",\n // description: `${ErrorPlaceholder.ACCOUNT}: {error.message}`,\n // documentation: \"The request rate limit has been exceeded\",\n // },\n // argumentsRequired: {\n // code: 3204,\n // message: \"Method requires some arguments\",\n // description: `${ErrorPlaceholder.ACCOUNT}: {error.message}`,\n // documentation: \"The method requires some arguments\",\n // },\n // nullResponse: {\n // code: 3205,\n // message: \"Null response\",\n // description: `${ErrorPlaceholder.ACCOUNT}: {error.message}`,\n // documentation: \"The response from the exchange is null\",\n // },\n // ddosProtection: {\n // code: 3206,\n // message: \"DDOS protection\",\n // description: `${ErrorPlaceholder.ACCOUNT}: {error.message}`,\n // documentation: \"The request has been rejected by the exchange due to DDOS protection\",\n // },\n // badSymbol: {\n // code: 3207,\n // message: \"Bad symbol\",\n // description: `${ErrorPlaceholder.ACCOUNT}: {error.message}`,\n // documentation: \"The symbol is not valid\",\n // },\n // },\n // account: {\n // accountSuspended: {\n // code: 3300,\n // message: \"Account suspended\",\n // description: `${ErrorPlaceholder.ACCOUNT}: {error.message}`,\n // documentation: \"The user account is suspended\",\n // },\n // permissionDenied: {\n // code: 3301,\n // message: \"Permission denied\",\n // description: `${ErrorPlaceholder.ACCOUNT}: {error.message}`,\n // documentation: \"The user doesn't have enough permission to perform the action\",\n // },\n // insufficientFunds: {\n // code: 3302,\n // message: \"Insufficient funds\",\n // description: `${ErrorPlaceholder.ACCOUNT}: {error.message}`,\n // documentation: \"The user doesn't have enough funds to perform the action\",\n // },\n // invalidAddress: {\n // code: 3303,\n // message: \"Invalid address\",\n // description: `${ErrorPlaceholder.ACCOUNT}: {error.message}`,\n // documentation: \"The address is not valid\",\n // },\n // addressPending: {\n // code: 3304,\n // message: \"Address pending\",\n // description: `${ErrorPlaceholder.ACCOUNT}: {error.message}`,\n // documentation: \"The address is pending\",\n // },\n // cancelPending: {\n // code: 3305,\n // message: \"Cancel pending\",\n // description: `${ErrorPlaceholder.ACCOUNT}: {error.message}`,\n // documentation: \"The cancel is pending\",\n // },\n // },\n },\n internal: {\n general: {\n badPassword: {\n code: 4e3,\n message: \"Bad password\",\n description: \"Bad password\",\n documentation: \"The password provided is incorrect\"\n }\n },\n misc: {\n jobs: {\n fetchTransactionHistoryError: {\n code: 4100,\n message: \"Transaction history cannot be fetched through the job\",\n description: \"An error happened while fetching the transaction history\",\n documentation: \"An error happened while fetching the transaction history\"\n },\n getLastTxUpdateError: {\n code: 4101,\n message: \"Last transaction update cannot be fetched through the job\",\n description: \"An error happened while getting the last transaction update\",\n documentation: \"An error happened while getting the last transaction update\"\n }\n },\n cancelTrackingError: {\n code: 4102,\n message: \"Tracking cannot be cancelled\",\n description: \"An error happened while cancelling the tracking\",\n documentation: \"An error happened while cancelling the tracking\"\n }\n },\n vault: {\n accountAlreadyExists: {\n code: 4200,\n message: \"Vault account already exists\",\n description: \"The exchange account has already been added to the vault\",\n documentation: \"The exchange account has already been added to the vault\"\n },\n nameExists: {\n code: 4201,\n message: \"Vault name already exists\",\n description: \"The vault {vault} already exists\",\n documentation: \"Raised when trying to create the vault with same name as the existent vault\"\n },\n nameCannotBeGenerated: {\n code: 4202,\n message: \"Vault name cannot be generated\",\n description: \"The vault name cannot be generated\",\n documentation: \"Raised when there is an error in the vault name generation\"\n },\n accountKeysInconsistent: {\n code: 4203,\n message: \"Account keys inconsistent. They may not relate to the same account\",\n description: \"The Api Keys are not related to the same CEX account\",\n documentation: \"Raised when the user is trying to a second pair of API keys for the 2 key CEX which are not related to the same account\"\n },\n cannotUnlockStorage: {\n code: 4204,\n message: \"The storage cannot be unlocked\",\n description: \"Cede Store cannot unlock the storage\",\n documentation: \"Raised when the storage cannot be unlocked\"\n },\n cannotPersisted: {\n code: 4205,\n message: \"Vaults cannot persisted\",\n description: \"The vaults cannot be persisted\",\n documentation: \"Raised when the vaults cannot be persisted\"\n },\n creationError: {\n code: 4206,\n message: \"Vault creation error\",\n description: \"{vault}: An error happened while creating the vault\",\n documentation: \"Raised when an error happened while creating the vault\"\n },\n deletionError: {\n code: 4207,\n message: \"Vault deletion error\",\n description: \"{vault}: An error happened while deleting the vault\",\n documentation: \"Raised when an error happened while deleting the vault\"\n },\n checkApiCredentialsError: {\n code: 4208,\n message: \"API check credentials failure\",\n description: \"{vault}: An error happened while checking the API credentials\",\n documentation: \"Raised when an error happened while checking the API credentials when adding a new CEX\"\n },\n updateApiCredentialsError: {\n code: 4209,\n message: \"API update credentials failure\",\n description: \"{vault_and_account}: An error happened while updating the API credentials\",\n documentation: \"Raised when an error happened while updating the API credentials when updating a CEX\"\n },\n updateCexSettingsError: {\n code: 4210,\n message: \"Vault CEX update settings error\",\n description: \"{vault_and_account}: An error happened while updating the CEX settings\",\n documentation: \"Raised when an error happened while updating the CEX settings when updating a CEX\"\n },\n accountCreationError: {\n code: 4211,\n message: \"Vault account creation error\",\n description: \"{vault}: An error happened while creating the account\",\n documentation: \"Raised when an error happened while creating the account\"\n },\n accountUpdateError: {\n code: 4212,\n message: \"Vault account update error\",\n description: \"{vault_and_account}: An error happened while updating the account\",\n documentation: \"Raised when an error happened while updating the account\"\n },\n globalUnlockError: {\n code: 4213,\n message: \"Vault cannot be unlocked\",\n description: \"An error happened while unlocking the vaults\",\n documentation: \"Raised when an error happened while unlocking globally the vaults\"\n },\n notWhitelisted: {\n code: 4214,\n message: \"IP not whitelisted for API keys\",\n description: \"IP addresses weren't whitelisted. Please, whitelist them first.\",\n documentation: \"Raised when cede.store proxy IP was not whitelisted on the CEX side\"\n },\n accountKeyAlreadyExists: {\n code: 4215,\n message: \"API key already exists\",\n description: \"The API Key already exists\",\n documentation: \"Raised when the user is trying to update a key using one that already exists in the vault for the same CEX\"\n },\n whitelistCheckFail: {\n code: 4216,\n message: \"Whitelist check failed\",\n description: \"Whitelist check failed. Please try again later.\",\n documentation: \"Raised when the whitelist check failed\"\n }\n }\n },\n // cede.store background errors\n cede: {\n general: {\n dispatcherDefaultError: {\n code: 5e3,\n message: \"Dispatcher default error\",\n description: \"An error occured while {data.humanizedAction}\",\n documentation: \"An error occured while executing the method.\"\n },\n approvalNotFound: {\n code: 5001,\n message: \"Approval not found\",\n description: \"The approval {data.approvalId} isn't found\",\n documentation: \"The approval isn't found. This can happen if the approval is not in pending approvals array\"\n },\n vaultNotAllowedToAccess: {\n code: 5002,\n message: \"Vault is not allowed to access\",\n description: \"You aren't allowed to access to this vault\",\n documentation: \"You aren't allowed to access to this vault\"\n },\n accountNotPermission: {\n code: 5003,\n message: \"Account does not have sufficient permissions to perform this action\",\n description: \"The account {account} doesn't have the permission to {data.permission} : {vault}\",\n documentation: \"The account doesn't have the permission to perform this action. If the account is read-only, you can't perform trades/withdrawals\"\n },\n notConnected: {\n code: 5005,\n message: \"Not connected\",\n description: \"Connect with cede.store to perfom this request\",\n documentation: \"Connect with cede.store to perfom this request\"\n },\n notInitialized: {\n code: 5006,\n message: \"Not initialized\",\n description: \"The user must set up at least one vault in the cede.store first\",\n documentation: \"Raised when cede.store has been downloaded but not initialized. The user must set up at least one vault in the cede.store first\"\n },\n notSupportedFeature: {\n code: 5008,\n message: \"This feature is not supported by the {account}\",\n description: \"This feature is not supported by the {account}\",\n documentation: \"Verify if the feature is supported by the CEX\"\n },\n userDeniedApproval: {\n code: 5009,\n message: \"User denied approval\",\n description: \"User denied approval\",\n documentation: \"User denied approval\"\n },\n accountInvalidSetOfPermissions: {\n code: 5010,\n message: \"Invalid set of permissions\",\n description: \"The account has an invalid set of permissions\",\n documentation: \"The account has an invalid set of permissions\"\n },\n methodNotAvailableForThisExchange: {\n code: 5011,\n message: \"Method not available\",\n description: \"This method is not available on this exchange\",\n documentation: \"The provider was requested to perform an action on an exchange that does not support the action\"\n },\n invalidPermissionsSetup: {\n code: 5012,\n message: \"Invalid key permissions\",\n description: \"Missing API permissions, please reimport your API key with the valid permissions\",\n documentation: \"API key permissions aren't valid, you should add missing permissions to the key and try again\"\n }\n },\n vault: {\n notFound: {\n code: 5100,\n message: \"Vault not found\",\n description: \"The vault was not found\",\n documentation: \"The vault was not found. Verify the vauld id\"\n },\n accountNotFound: {\n code: 5101,\n message: \"Vault account not found\",\n // TODO make sure the error handler puts accountId in the context\n description: \"{vault}: The account {account} was not found\",\n documentation: \"The account was not found. Verify the account name\"\n },\n fetchVaultsError: {\n code: 5102,\n message: \"Vaults cannot be retrieved\",\n description: \"An error happened while retrieveing the vaults\",\n documentation: \"Raised when the vaults cannot be retrieved from cede.store\"\n },\n generateAccountNameError: {\n code: 5103,\n message: \"An error occured while generating the account name\",\n description: \"An error occured while generating the account name\",\n documentation: \"The generate account name method shouldn't fail\"\n },\n validateAccountNameError: {\n code: 5104,\n message: \"An error occured while validating the account name\",\n description: \"An error occured while validating the account name\",\n documentation: \"The validate account name method shouldn't fail\"\n },\n updateAccountNameError: {\n code: 5105,\n message: \"An error occured while updating the account name\",\n description: \"An error occured while updating the account name\",\n documentation: \"Verify if the old account name is valid because we are using it to update the account\"\n },\n getAccountError: {\n code: 5106,\n message: \"An error occured while getting the account\",\n description: \"An error occured while getting the account\",\n documentation: \"Verify if the account id is valid\"\n },\n getAccountsError: {\n code: 5107,\n message: \"An error occured while getting the accounts\",\n description: \"An error occured while getting the accounts\",\n documentation: \"Verify if the vault id is valid\"\n },\n notOAuthAccount: {\n code: 5108,\n message: \"The account is not an OAuth account\",\n description: \"The account is not an OAuth account\",\n documentation: \"This error is raised when we try to perform an action on an OAuth account and the account is not using OAuth\"\n },\n accountAlreadyContainsApiKeys: {\n code: 5109,\n message: \"The account already contains these API keys\",\n description: \"The account already contains these API keys\",\n documentation: \"The account already contains the API keys added for different permissions. The CEX requires different keys for different permissions.\"\n }\n },\n exchange: {\n // public data, such as available tickers, tokens, etc.\n public: {\n fetchTickerFromTokenError: {\n code: 5201,\n message: \"Cannot fetch ticker from token\",\n description: \"{vault_and_account}: An error happened while fetching tickers\",\n documentation: \"Raised when the ticker for a given token symbol cannot be retrieved from the CEX\"\n },\n serverDown: {\n code: 5204,\n message: \"Exchange's server is down\",\n description: \"The exchange's server is down\",\n documentation: \"Raised when the exchange server status is offline.\"\n },\n underMaintenance: {\n code: 5205,\n message: \"Exchange is under maintenance\",\n description: \"The exchange is under maintenance\",\n documentation: \"Raised when the exchange server status is under maintenance.\"\n },\n supportedTokensError: {\n code: 5206,\n message: \"Supported tokens not found\",\n description: \"{account}: The supported tokens were not found\",\n documentation: \"Raised when getSupportedTokens returns an error.\"\n },\n unavailableInThisCountry: {\n code: 5207,\n message: \"The exchange is not available in this country\",\n description: \"{account}: The exchange is not available in this country\",\n documentation: \"Raised when the exchange is not available in this country\"\n }\n },\n // fungible and non-fungible balances (tokens, nfts, fiat)\n balances: {\n getBalancesError: {\n code: 5210,\n message: \"Cannot retrieve vault portfolio from CEX\",\n description: \"{vault_and_account}: An error happened while fetching the portfolio from the CEX\",\n documentation: \"Raised when the portfolio cannot be retrieved from the CEX\"\n },\n getNftFromCexError: {\n code: 5211,\n message: \"NFTs cannot be fetched from CEX\",\n description: \"{vault_and_account}: An error happened while fetching the NFTs\",\n documentation: \"Raised when the NFTs cannot be retrieved from the CEX\"\n }\n },\n transactions: {\n getVaultTransactionsError: {\n code: 5220,\n message: \"Cannot retrieve vault transactions\",\n description: \"{vault_and_account}: An error happened while fetching the vault transactions\",\n documentation: \"Raised when the transactions cannot be retrieved from the CEX\"\n }\n },\n deposit: {\n getDepositableTokensError: {\n code: 5230,\n message: \"Cannot get depositable tokens\",\n description: \"{vault_and_account}: An error happened while fetching the depositable tokens\",\n documentation: \"Raised when the depositable tokens cannot be retrieved from the CEX\"\n },\n getDepositAddressError: {\n code: 5231,\n message: \"Cannot get deposit address\",\n description: \"{vault_and_account}: An error happened while fetching the deposit address\",\n documentation: \"Raised when the deposit address cannot be retrieved from the CEX\"\n }\n },\n trade: {\n postOrderError: {\n code: 5240,\n message: \"Error encountered while posting order\",\n description: \"{vault_and_account}: An error occured with the market order\",\n documentation: \"Raised when the order cannot be posted to the CEX\"\n },\n fetchMarketPairsError: {\n code: 5241,\n message: \"Market pairs cannot be fetched\",\n description: \"{vault_and_account}: An error happened while fetching the market pairs\",\n documentation: \"Raised when the market pairs cannot be retrieved from the CEX\"\n },\n fetchAllTickersFromSymbolsError: {\n code: 5242,\n message: \"Tickers cannot be fetched from symbols\",\n description: \"{vault_and_account}: An error happened while fetching the tickers\",\n documentation: \"Raised when the tickers cannot be retrieved from the CEX\"\n },\n orderNotFound: {\n code: 5243,\n message: \"Order not found\",\n description: \"{vault_and_account}: The order {data.orderId} was not found\",\n documentation: \"Raised when the order cannot be found on the CEX\"\n },\n minAmountError: {\n code: 5244,\n message: \"Minimum amount error\",\n description: \"{vault_and_account}: The amount should be greater than {data.minAmount}\",\n documentation: \"Raised when the amount is too low to execute the trade\"\n },\n tickerNotFound: {\n code: 5245,\n message: \"Ticker not found\",\n description: \"{vault_and_account}: The ticker for {data.pairSymbol} was not found\",\n documentation: \"Raised when the ticker cannot be found on the CEX\"\n },\n invalidOrderRequest: {\n code: 5246,\n message: \"Invalid order request\",\n description: \"{vault_and_account}: The order request is invalid: {data.error}\",\n documentation: \"This error is triggered by invalid order requests. It could arise due to inappropriate data inputs, such as a price set to zero. To streamline error handling, we avoid generating overly specific errors for each scenario. This approach assumes that proper data validation is performed within the dApp, ensuring user inputs are correct.\"\n },\n fetchMarketPriceError: {\n code: 5247,\n message: \"Market rates cannot be fetched\",\n description: \"{vault_and_account}: An error happened while fetching market rates\",\n documentation: \"Raised when market rates cannot be retrieved from the CEX\"\n },\n getTradePathError: {\n code: 5248,\n message: \"Trade path cannot be fetched\",\n description: \"{vault_and_account}: An error happened while fetching trade path\",\n documentation: \"Raised when trade path cannot be retrieved from the CEX\"\n }\n },\n network: {\n networkNotFound: {\n code: 5250,\n message: \"Network not found\",\n description: \"The network {data.network} isn't found\",\n documentation: \"Raised when the network isn't found\"\n },\n networkNotProvided: {\n code: 5251,\n message: \"Network not provided\",\n description: \"The network is not provided\",\n documentation: \"Raised when the network is not provided, but required\"\n },\n networksNotStandardized: {\n code: 5252,\n message: \"Networks are not standardized\",\n description: \"The networks are not standardized\",\n documentation: \"Raised when the networks are not standardized\"\n }\n },\n withdrawal: {\n tokenToDefiAddressError: {\n code: 5260,\n message: \"Error encountered while withdrawing token to DeFi address\",\n description: \"{vault_and_account}: An error happened while withdrawing to a DeFi address\",\n documentation: \"Raised when the withdrawal cannot be posted to DeFi address\"\n },\n tokenToAnotherCexError: {\n code: 5261,\n message: \"Error encountered while withdrawing token to another CEX\",\n description: \"{vault_and_account}: An error happened while withdrawing to another CEX\",\n documentation: \"Raised when the withdrawal cannot be posted to the CEX\"\n },\n notFound: {\n code: 5262,\n message: \"Withdrawal not found\",\n description: \"The withdrawal with id {data.withdrawalId} isn't found\",\n documentation: \"Raised when the withdrawal isn't found\"\n },\n infoError: {\n code: 5263,\n message: \"Withdrawal info error\",\n description: \"{vault_and_account}: Withdrawal info not found\",\n documentation: \"Raised when the withdrawal info cannot be retrieved from the CEX\"\n },\n invalidAddress: {\n code: 5268,\n message: \"Invalid address\",\n description: \"{vault_and_account}: Invalid address\",\n documentation: \"Raised when the address is invalid\"\n }\n },\n coinbase: {\n accountNotFound: {\n code: 5270,\n message: \"Coinbase account not found\",\n description: \"{account}: The account for currency {data.currency} was not found\",\n documentation: \"Raised when the account for currency cannot be found on the CEX\"\n }\n },\n exchangeInstance: {\n notFound: {\n code: 5293,\n message: \"Exchange instance not found\",\n description: \"The exchange instance was not found\",\n documentation: \"Raised when the exchange instance was not found\"\n }\n },\n authentication: {\n oauthFlowInterruptedByTheUser: {\n code: 5301,\n message: \"Connection has been interrupted. Please try again.\",\n description: \"Connection has been interrupted. Please try again.\",\n documentation: \"Raised when the OAuth flow is interrupted by the user (e.g. user closes the authorization popup)\"\n }\n },\n nft: {\n notSupportedNfts: {\n code: 5400,\n message: \"NFTs are not supported\",\n description: \"{account}: NFTs aren't supported.\",\n documentation: \"NFTs aren't supported on the given exchange\"\n }\n }\n }\n },\n api: {\n invalidRequest: {\n code: 6e3,\n message: \"Error encountered when sending a request to the api\",\n description: \"Request failed\",\n documentation: \"Raised when an API request failed\"\n }\n }\n}, Gs = {\n LOCKED_FOR_INACTIVITY: \"Cede.store has been automatically locked due to a period of inactivity.\",\n MESSAGE_SENT_TO_CEDE_TEAM: \"Message sent to Cede Labs team\",\n FEEDBACK_ERROR: \"Error when sending feedback\",\n API_KEY: {\n ALREADY_EXISTS: \"API keys already exist.\",\n CREDENTIALS_INCORRECT: \"API credentials are incorrect\",\n SUCCESSFULLY: (d) => `API key successfully ${d}`,\n REMOVED: \"API key successfully removed\",\n VERIFYING_VALIDITY: \"Just verifying the validity of your keys…\"\n },\n VAULT: {\n CANT_DELETE_SINGLE: \"You can't delete your single vault.\",\n REQUIRE_NON_EMPTY: \"You must have at least one account in your vault to perform this action.\",\n CREATED_SUCCESSFULLY: \"Vault created successfully\",\n NOT_FOUND: \"Vault not found\"\n },\n TRANSACTION: {\n TOKEN_FROM_NOT_FOUND: \"Token from not found for this transaction\",\n ACCOUNT_NOT_FOUND: \"Account not found for this transaction\",\n ORDER_NOT_FOUND: \"Order not found for this transaction\"\n },\n ACCOUNT: {\n NOT_FOUND: \"Account not found\",\n NOT_FOUND_WITH_NAME: (d) => `Account ${d} not found`,\n RECONNECT: (d) => `Please, reconnect your ${d} account`,\n DELETED: (d) => `${d} has been deleted.`,\n RECONNECTION_REQUIRED: \"Reconnection required\"\n },\n MARKET_NOT_FOUND: (d) => `Market ${d} not found`,\n CANCELLATION_FAILED: \"The cancellation failed\",\n OAUTH: {\n FAILED: \"OAuth2 Connection failed, please try again.\",\n SUCCESSFULLY_SETUP: \"OAuth successfully setup\"\n },\n UNKNOWN_ERROR: \"Oups, something went wrong.\",\n PRICES: {\n CANT_FETCH: \"Sorry, we can't fetch the prices.\"\n },\n SEND: {\n YOUR_FUND_SAFE: \"Your funds are safe\",\n CONFIRM_EMAIL: (d) => `To process, please confirm the email from ${d} sent to your email address linked\n with your ${d} account.`\n },\n WIDGETS: {\n SEND: {\n LOGIN_LOADING_FIRST_LINE: \"Select the vault you want to connect to from cede.store extension.\",\n LOGIN_LOADING_SECOND_LINE: \"You will be transferring your assets from the CEX accounts connected in the vault.\",\n TRANSACTION_LOADING_FIRST_LINE: \"Confirm the transaction on the cede.store popup.\",\n TRANSACTION_LOADING_SECOND_LINE: \"Make sure all the parameters are correct before confirming.\",\n TRANSFER_CEX_ASSETS: \"Transfer your CEX assets to your blockchain address from any dApp\",\n CONNECT: \"Connect\",\n CONNECT_WALLET: \"Connect wallet\",\n CANT_FETCH_BUNDLE: \"Could not connect to Cede.store. Please make sure you have the latest version of the extension.\"\n },\n TRADE_SEND: {\n ACTIONS_LABEL: \"What actions you will validate:\",\n WITHDRAW_CURRENCY: (d, e, t) => `Withdraw ${d} to ${e} on ${t}`,\n RECEIVE_CURRENCY: (d) => `In the end, you will receive ${d} in your wallet`,\n MODAL_CONFIRM: \"Continue\",\n PERFORM_TRADE_PATH: (d, e) => `You will need to perform the following ${d} trade(s) in order to withdraw on the ${e} network.`,\n NO_TRADE_PATH: \"There is no trade path available for the destination currency. Please select another currency.\",\n CONFIRM_TX: (d) => `Confirm Transaction ${d}`,\n FINISH: \"Finish\",\n ERROR: \"Error, try again later\"\n },\n TRADE_SQUARE: {\n ACTIONS_LABEL: \"What actions you will validate:\",\n PERFORM_TRADE_PATH: (d, e) => `You will need to perform the following ${d} trade(s) in order to get ${e} token.`,\n INFO_DETAILS: (d, e, t) => [\n `${d} `,\n \"does not support \",\n `a ${e}/${t} pair. However, cede.store `,\n \"has found the best price route. \",\n \"You are going to \",\n `automatically perform a series of trades to receive ${t}`\n ],\n CLOSE: \"Close\"\n },\n TRADE: {\n CONNECT: \"Connect\",\n TRANSACTION_LOADING_FIRST_LINE: \"Confirm the transaction on the cede.store popup.\",\n TRANSACTION_LOADING_SECOND_LINE: \"Make sure all the parameters are correct before confirming.\",\n CANT_FETCH_BUNDLE: \"Could not connect to Cede.store. Please make sure you have the latest version of the extension.\",\n WELCOME_MESSAGE: \"Your non-custodial gateway to your CeFi liquidity from any dApp\"\n }\n },\n EXCHANGES_STATUSES: {\n SINGLE_DOWN: (d) => `${d} server is temporarily down, please try again later.`,\n TWO_DOWN: (d, e) => `${d} and ${e} servers are temporarily down, please try again later.`,\n THREE_DOWN: (d, e, t) => `${d}, ${e} and ${t} servers are temporarily down, please try again later.`,\n SINGLE_BACK_ONLINE: (d) => `${d} server is back available.`,\n TWO_BACK_ONLINE: (d, e) => `${d} and ${e} servers are back available.`,\n THREE_BACK_ONLINE: (d, e, t) => `${d}, ${e} and ${t} servers are back available.`,\n UNDER_MAINTENANCE: \"Under maintenance\",\n ADD_PERMISSION: \"Add permission +\",\n TEMPORARILY_UNAVAILABLE: \"Temporarily unavailable\",\n TEMPORARILY_UNAVAILABLE_IN_YOUR_COUNTRY: \"Temporarily unavailable in your country\"\n },\n STATE_MACHINE_ROUTER: {\n ERRORS: {\n MISSING_PARAMETERS: \"Missing parameters from the redirection.\",\n TWO_KEY_NOT_SUPPORTED: (d) => `The exchange ${d} doesn't support 2 key system.`\n }\n },\n READ_ONLY_ONBOARDING: {\n TITLE: \"Specific server-side onboarding\",\n PERMISSION_HINT: \"Trade and withdraw permissions are not available for this specific onboarding\"\n },\n AVAILABLE_SOON: \"Available soon\"\n};\nvar qe = typeof globalThis < \"u\" ? globalThis : typeof window < \"u\" ? window : typeof global < \"u\" ? global : typeof self < \"u\" ? self : {};\nfunction Kf(d) {\n return d && d.__esModule && Object.prototype.hasOwnProperty.call(d, \"default\") ? d.default : d;\n}\nvar Rr = {}, Ho;\nfunction nn() {\n return Ho || (Ho = 1, function(d) {\n Object.defineProperties(d, { __esModule: { value: !0 }, [Symbol.toStringTag]: { value: \"Module\" } });\n var e = {}, t = {};\n t.byteLength = u, t.toByteArray = h, t.fromByteArray = m;\n for (var i = [], s = [], n = typeof Uint8Array < \"u\" ? Uint8Array : Array, r = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\", a = 0, o = r.length; a < o; ++a)\n i[a] = r[a], s[r.charCodeAt(a)] = a;\n s[\"-\".charCodeAt(0)] = 62, s[\"_\".charCodeAt(0)] = 63;\n function c(S) {\n var b = S.length;\n if (b % 4 > 0)\n throw new Error(\"Invalid string. Length must be a multiple of 4\");\n var T = S.indexOf(\"=\");\n T === -1 && (T = b);\n var x = T === b ? 0 : 4 - T % 4;\n return [T, x];\n }\n function u(S) {\n var b = c(S), T = b[0], x = b[1];\n return (T + x) * 3 / 4 - x;\n }\n function f(S, b, T) {\n return (b + T) * 3 / 4 - T;\n }\n function h(S) {\n var b, T = c(S), x = T[0], v = T[1], _ = new n(f(S, x, v)), V = 0, j = v > 0 ? x - 4 : x, G;\n for (G = 0; G < j; G += 4)\n b = s[S.charCodeAt(G)] << 18 | s[S.charCodeAt(G + 1)] << 12 | s[S.charCodeAt(G + 2)] << 6 | s[S.charCodeAt(G + 3)], _[V++] = b >> 16 & 255, _[V++] = b >> 8 & 255, _[V++] = b & 255;\n return v === 2 && (b = s[S.charCodeAt(G)] << 2 | s[S.charCodeAt(G + 1)] >> 4, _[V++] = b & 255), v === 1 && (b = s[S.charCodeAt(G)] << 10 | s[S.charCodeAt(G + 1)] << 4 | s[S.charCodeAt(G + 2)] >> 2, _[V++] = b >> 8 & 255, _[V++] = b & 255), _;\n }\n function l(S) {\n return i[S >> 18 & 63] + i[S >> 12 & 63] + i[S >> 6 & 63] + i[S & 63];\n }\n function p(S, b, T) {\n for (var x, v = [], _ = b; _ < T; _ += 3)\n x = (S[_] << 16 & 16711680) + (S[_ + 1] << 8 & 65280) + (S[_ + 2] & 255), v.push(l(x));\n return v.join(\"\");\n }\n function m(S) {\n for (var b, T = S.length, x = T % 3, v = [], _ = 16383, V = 0, j = T - x; V < j; V += _)\n v.push(p(S, V, V + _ > j ? j : V + _));\n return x === 1 ? (b = S[T - 1], v.push(\n i[b >> 2] + i[b << 4 & 63] + \"==\"\n )) : x === 2 && (b = (S[T - 2] << 8) + S[T - 1], v.push(\n i[b >> 10] + i[b >> 4 & 63] + i[b << 2 & 63] + \"=\"\n )), v.join(\"\");\n }\n var y = {};\n /*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh <https://feross.org/opensource> */\n y.read = function(S, b, T, x, v) {\n var _, V, j = v * 8 - x - 1, G = (1 << j) - 1, W = G >> 1, B = -7, Q = T ? v - 1 : 0, se = T ? -1 : 1, $ = S[b + Q];\n for (Q += se, _ = $ & (1 << -B) - 1, $ >>= -B, B += j; B > 0; _ = _ * 256 + S[b + Q], Q += se, B -= 8)\n ;\n for (V = _ & (1 << -B) - 1, _ >>= -B, B += x; B > 0; V = V * 256 + S[b + Q], Q += se, B -= 8)\n ;\n if (_ === 0)\n _ = 1 - W;\n else {\n if (_ === G)\n return V ? NaN : ($ ? -1 : 1) * (1 / 0);\n V = V + Math.pow(2, x), _ = _ - W;\n }\n return ($ ? -1 : 1) * V * Math.pow(2, _ - x);\n }, y.write = function(S, b, T, x, v, _) {\n var V, j, G, W = _ * 8 - v - 1, B = (1 << W) - 1, Q = B >> 1, se = v === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0, $ = x ? 0 : _ - 1, te = x ? 1 : -1, E = b < 0 || b === 0 && 1 / b < 0 ? 1 : 0;\n for (b = Math.abs(b), isNaN(b) || b === 1 / 0 ? (j = isNaN(b) ? 1 : 0, V = B) : (V = Math.floor(Math.log(b) / Math.LN2), b * (G = Math.pow(2, -V)) < 1 && (V--, G *= 2), V + Q >= 1 ? b += se / G : b += se * Math.pow(2, 1 - Q), b * G >= 2 && (V++, G /= 2), V + Q >= B ? (j = 0, V = B) : V + Q >= 1 ? (j = (b * G - 1) * Math.pow(2, v), V = V + Q) : (j = b * Math.pow(2, Q - 1) * Math.pow(2, v), V = 0)); v >= 8; S[T + $] = j & 255, $ += te, j /= 256, v -= 8)\n ;\n for (V = V << v | j, W += v; W > 0; S[T + $] = V & 255, $ += te, V /= 256, W -= 8)\n ;\n S[T + $ - te] |= E * 128;\n };\n /*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh <https://feross.org>\n * @license MIT\n */\n (function(S) {\n const b = t, T = y, x = typeof Symbol == \"function\" && typeof Symbol.for == \"function\" ? Symbol.for(\"nodejs.util.inspect.custom\") : null;\n S.Buffer = B, S.SlowBuffer = U, S.INSPECT_MAX_BYTES = 50;\n const v = 2147483647;\n S.kMaxLength = v;\n const { Uint8Array: _, ArrayBuffer: V, SharedArrayBuffer: j } = globalThis;\n B.TYPED_ARRAY_SUPPORT = G(), !B.TYPED_ARRAY_SUPPORT && typeof console < \"u\" && typeof console.error == \"function\" && console.error(\n \"This browser lacks typed array (Uint8Array) support which is required by `buffer` v5.x. Use `buffer` v4.x if you require old browser support.\"\n );\n function G() {\n try {\n const D = new _(1), I = { foo: function() {\n return 42;\n } };\n return Object.setPrototypeOf(I, _.prototype), Object.setPrototypeOf(D, I), D.foo() === 42;\n } catch {\n return !1;\n }\n }\n Object.defineProperty(B.prototype, \"parent\", {\n enumerable: !0,\n get: function() {\n if (B.isBuffer(this))\n return this.buffer;\n }\n }), Object.defineProperty(B.prototype, \"offset\", {\n enumerable: !0,\n get: function() {\n if (B.isBuffer(this))\n return this.byteOffset;\n }\n });\n function W(D) {\n if (D > v)\n throw new RangeError('The value \"' + D + '\" is invalid for option \"size\"');\n const I = new _(D);\n return Object.setPrototypeOf(I, B.prototype), I;\n }\n function B(D, I, C) {\n if (typeof D == \"number\") {\n if (typeof I == \"string\")\n throw new TypeError(\n 'The \"string\" argument must be of type string. Received type number'\n );\n return te(D);\n }\n return Q(D, I, C);\n }\n B.poolSize = 8192;\n function Q(D, I, C) {\n if (typeof D == \"string\")\n return E(D, I);\n if (V.isView(D))\n return L(D);\n if (D == null)\n throw new TypeError(\n \"The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type \" + typeof D\n );\n if (Ft(D, V) || D && Ft(D.buffer, V) || typeof j < \"u\" && (Ft(D, j) || D && Ft(D.buffer, j)))\n return z(D, I, C);\n if (typeof D == \"number\")\n throw new TypeError(\n 'The \"value\" argument must not be of type number. Received type number'\n );\n const F = D.valueOf && D.valueOf();\n if (F != null && F !== D)\n return B.from(F, I, C);\n const X = K(D);\n if (X)\n return X;\n if (typeof Symbol < \"u\" && Symbol.toPrimitive != null && typeof D[Symbol.toPrimitive] == \"function\")\n return B.from(D[Symbol.toPrimitive](\"string\"), I, C);\n throw new TypeError(\n \"The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type \" + typeof D\n );\n }\n B.from = function(D, I, C) {\n return Q(D, I, C);\n }, Object.setPrototypeOf(B.prototype, _.prototype), Object.setPrototypeOf(B, _);\n function se(D) {\n if (typeof D != \"number\")\n throw new TypeError('\"size\" argument must be of type number');\n if (D < 0)\n throw new RangeError('The value \"' + D + '\" is invalid for option \"size\"');\n }\n function $(D, I, C) {\n return se(D), D <= 0 ? W(D) : I !== void 0 ? typeof C == \"string\" ? W(D).fill(I, C) : W(D).fill(I) : W(D);\n }\n B.alloc = function(D, I, C) {\n return $(D, I, C);\n };\n function te(D) {\n return se(D), W(D < 0 ? 0 : R(D) | 0);\n }\n B.allocUnsafe = function(D) {\n return te(D);\n }, B.allocUnsafeSlow = function(D) {\n return te(D);\n };\n function E(D, I) {\n if ((typeof I != \"string\" || I === \"\") && (I = \"utf8\"), !B.isEncoding(I))\n throw new TypeError(\"Unknown encoding: \" + I);\n const C = Y(D, I) | 0;\n let F = W(C);\n const X = F.write(D, I);\n return X !== C && (F = F.slice(0, X)), F;\n }\n function N(D) {\n const I = D.length < 0 ? 0 : R(D.length) | 0, C = W(I);\n for (let F = 0; F < I; F += 1)\n C[F] = D[F] & 255;\n return C;\n }\n function L(D) {\n if (Ft(D, _)) {\n const I = new _(D);\n return z(I.buffer, I.byteOffset, I.byteLength);\n }\n return N(D);\n }\n function z(D, I, C) {\n if (I < 0 || D.byteLength < I)\n throw new RangeError('\"offset\" is outside of buffer bounds');\n if (D.byteLength < I + (C || 0))\n throw new RangeError('\"length\" is outside of buffer bounds');\n let F;\n return I === void 0 && C === void 0 ? F = new _(D) : C === void 0 ? F = new _(D, I) : F = new _(D, I, C), Object.setPrototypeOf(F, B.prototype), F;\n }\n function K(D) {\n if (B.isBuffer(D)) {\n const I = R(D.length) | 0, C = W(I);\n return C.length === 0 || D.copy(C, 0, 0, I), C;\n }\n if (D.length !== void 0)\n return typeof D.length != \"number\" || Dr(D.length) ? W(0) : N(D);\n if (D.type === \"Buffer\" && Array.isArray(D.data))\n return N(D.data);\n }\n function R(D) {\n if (D >= v)\n throw new RangeError(\"Attempt to allocate Buffer larger than maximum size: 0x\" + v.toString(16) + \" bytes\");\n return D | 0;\n }\n function U(D) {\n return +D != D && (D = 0), B.alloc(+D);\n }\n B.isBuffer = function(I) {\n return I != null && I._isBuffer === !0 && I !== B.prototype;\n }, B.compare = function(I, C) {\n if (Ft(I, _) && (I = B.from(I, I.offset, I.byteLength)), Ft(C, _) && (C = B.from(C, C.offset, C.byteLength)), !B.isBuffer(I) || !B.isBuffer(C))\n throw new TypeError(\n 'The \"buf1\", \"buf2\" arguments must be one of type Buffer or Uint8Array'\n );\n if (I === C)\n return 0;\n let F = I.length, X = C.length;\n for (let ne = 0, de = Math.min(F, X); ne < de; ++ne)\n if (I[ne] !== C[ne]) {\n F = I[ne], X = C[ne];\n break;\n }\n return F < X ? -1 : X < F ? 1 : 0;\n }, B.isEncoding = function(I) {\n switch (String(I).toLowerCase()) {\n case \"hex\":\n case \"utf8\":\n case \"utf-8\":\n case \"ascii\":\n case \"latin1\":\n case \"binary\":\n case \"base64\":\n case \"ucs2\":\n case \"ucs-2\":\n case \"utf16le\":\n case \"utf-16le\":\n return !0;\n default:\n return !1;\n }\n }, B.concat = function(I, C) {\n if (!Array.isArray(I))\n throw new TypeError('\"list\" argument must be an Array of Buffers');\n if (I.length === 0)\n return B.alloc(0);\n let F;\n if (C === void 0)\n for (C = 0, F = 0; F < I.length; ++F)\n C += I[F].length;\n const X = B.allocUnsafe(C);\n let ne = 0;\n for (F = 0; F < I.length; ++F) {\n let de = I[F];\n if (Ft(de, _))\n ne + de.length > X.length ? (B.isBuffer(de) || (de = B.from(de)), de.copy(X, ne)) : _.prototype.set.call(\n X,\n de,\n ne\n );\n else if (B.isBuffer(de))\n de.copy(X, ne);\n else\n throw new TypeError('\"list\" argument must be an Array of Buffers');\n ne += de.length;\n }\n return X;\n };\n function Y(D, I) {\n if (B.isBuffer(D))\n return D.length;\n if (V.isView(D) || Ft(D, V))\n return D.byteLength;\n if (typeof D != \"string\")\n throw new TypeError(\n 'The \"string\" argument must be one of type string, Buffer, or ArrayBuffer. Received type ' + typeof D\n );\n const C = D.length, F = arguments.length > 2 && arguments[2] === !0;\n if (!F && C === 0)\n return 0;\n let X = !1;\n for (; ; )\n switch (I) {\n case \"ascii\":\n case \"latin1\":\n case \"binary\":\n return C;\n case \"utf8\":\n case \"utf-8\":\n return Lr(D).length;\n case \"ucs2\":\n case \"ucs-2\":\n case \"utf16le\":\n case \"utf-16le\":\n return C * 2;\n case \"hex\":\n return C >>> 1;\n case \"base64\":\n return zo(D).length;\n default:\n if (X)\n return F ? -1 : Lr(D).length;\n I = (\"\" + I).toLowerCase(), X = !0;\n }\n }\n B.byteLength = Y;\n function J(D, I, C) {\n let F = !1;\n if ((I === void 0 || I < 0) && (I = 0), I > this.length || ((C === void 0 || C > this.length) && (C = this.length), C <= 0) || (C >>>= 0, I >>>= 0, C <= I))\n return \"\";\n for (D || (D = \"utf8\"); ; )\n switch (D) {\n case \"hex\":\n return Tt(this, I, C);\n case \"utf8\":\n case \"utf-8\":\n return Pe(this, I, C);\n case \"ascii\":\n return mt(this, I, C);\n case \"latin1\":\n case \"binary\":\n return ue(this, I, C);\n case \"base64\":\n return Ie(this, I, C);\n case \"ucs2\":\n case \"ucs-2\":\n case \"utf16le\":\n case \"utf-16le\":\n return Ot(this, I, C);\n default:\n if (F)\n throw new TypeError(\"Unknown encoding: \" + D);\n D = (D + \"\").toLowerCase(), F = !0;\n }\n }\n B.prototype._isBuffer = !0;\n function ae(D, I, C) {\n const F = D[I];\n D[I] = D[C], D[C] = F;\n }\n B.prototype.swap16 = function() {\n const I = this.length;\n if (I % 2 !== 0)\n throw new RangeError(\"Buffer size must be a multiple of 16-bits\");\n for (let C = 0; C < I; C += 2)\n ae(this, C, C + 1);\n return this;\n }, B.prototype.swap32 = function() {\n const I = this.length;\n if (I % 4 !== 0)\n throw new RangeError(\"Buffer size must be a multiple of 32-bits\");\n for (let C = 0; C < I; C += 4)\n ae(this, C, C + 3), ae(this, C + 1, C + 2);\n return this;\n }, B.prototype.swap64 = function() {\n const I = this.length;\n if (I % 8 !== 0)\n throw new RangeError(\"Buffer size must be a multiple of 64-bits\");\n for (let C = 0; C < I; C += 8)\n ae(this, C, C + 7), ae(this, C + 1, C + 6), ae(this, C + 2, C + 5), ae(this, C + 3, C + 4);\n return this;\n }, B.prototype.toString = function() {\n const I = this.length;\n return I === 0 ? \"\" : arguments.length === 0 ? Pe(this, 0, I) : J.apply(this, arguments);\n }, B.prototype.toLocaleString = B.prototype.toString, B.prototype.equals = function(I) {\n if (!B.isBuffer(I))\n throw new TypeError(\"Argument must be a Buffer\");\n return this === I ? !0 : B.compare(this, I) === 0;\n }, B.prototype.inspect = function() {\n let I = \"\";\n const C = S.INSPECT_MAX_BYTES;\n return I = this.toString(\"hex\", 0, C).replace(/(.{2})/g, \"$1 \").trim(), this.length > C && (I += \" ... \"), \"<Buffer \" + I + \">\";\n }, x && (B.prototype[x] = B.prototype.inspect), B.prototype.compare = function(I, C, F, X, ne) {\n if (Ft(I, _) && (I = B.from(I, I.offset, I.byteLength)), !B.isBuffer(I))\n throw new TypeError(\n 'The \"target\" argument must be one of type Buffer or Uint8Array. Received type ' + typeof I\n );\n if (C === void 0 && (C = 0), F === void 0 && (F = I ? I.length : 0), X === void 0 && (X = 0), ne === void 0 && (ne = this.length), C < 0 || F > I.length || X < 0 || ne > this.length)\n throw new RangeError(\"out of range index\");\n if (X >= ne && C >= F)\n return 0;\n if (X >= ne)\n return -1;\n if (C >= F)\n return 1;\n if (C >>>= 0, F >>>= 0, X >>>= 0, ne >>>= 0, this === I)\n return 0;\n let de = ne - X, Me = F - C;\n const We = Math.min(de, Me), Ue = this.slice(X, ne), Ye = I.slice(C, F);\n for (let Ve = 0; Ve < We; ++Ve)\n if (Ue[Ve] !== Ye[Ve]) {\n de = Ue[Ve], Me = Ye[Ve];\n break;\n }\n return de < Me ? -1 : Me < de ? 1 : 0;\n };\n function A(D, I, C, F, X) {\n if (D.length === 0)\n return -1;\n if (typeof C == \"string\" ? (F = C, C = 0) : C > 2147483647 ? C = 2147483647 : C < -2147483648 && (C = -2147483648), C = +C, Dr(C) && (C = X ? 0 : D.length - 1), C < 0 && (C = D.length + C), C >= D.length) {\n if (X)\n return -1;\n C = D.length - 1;\n } else if (C < 0)\n if (X)\n C = 0;\n else\n return -1;\n if (typeof I == \"string\" && (I = B.from(I, F)), B.isBuffer(I))\n return I.length === 0 ? -1 : M(D, I, C, F, X);\n if (typeof I == \"number\")\n return I = I & 255, typeof _.prototype.indexOf == \"function\" ? X ? _.prototype.indexOf.call(D, I, C) : _.prototype.lastIndexOf.call(D, I, C) : M(D, [I], C, F, X);\n throw new TypeError(\"val must be string, number or Buffer\");\n }\n function M(D, I, C, F, X) {\n let ne = 1, de = D.length, Me = I.length;\n if (F !== void 0 && (F = String(F).toLowerCase(), F === \"ucs2\" || F === \"ucs-2\" || F === \"utf16le\" || F === \"utf-16le\")) {\n if (D.length < 2 || I.length < 2)\n return -1;\n ne = 2, de /= 2, Me /= 2, C /= 2;\n }\n function We(Ye, Ve) {\n return ne === 1 ? Ye[Ve] : Ye.readUInt16BE(Ve * ne);\n }\n let Ue;\n if (X) {\n let Ye = -1;\n for (Ue = C; Ue < de; Ue++)\n if (We(D, Ue) === We(I, Ye === -1 ? 0 : Ue - Ye)) {\n if (Ye === -1 && (Ye = Ue), Ue - Ye + 1 === Me)\n return Ye * ne;\n } else\n Ye !== -1 && (Ue -= Ue - Ye), Ye = -1;\n } else\n for (C + Me > de && (C = de - Me), Ue = C; Ue >= 0; Ue--) {\n let Ye = !0;\n for (let Ve = 0; Ve < Me; Ve++)\n if (We(D, Ue + Ve) !== We(I, Ve)) {\n Ye = !1;\n break;\n }\n if (Ye)\n return Ue;\n }\n return -1;\n }\n B.prototype.includes = function(I, C, F) {\n return this.indexOf(I, C, F) !== -1;\n }, B.prototype.indexOf = function(I, C, F) {\n return A(this, I, C, F, !0);\n }, B.prototype.lastIndexOf = function(I, C, F) {\n return A(this, I, C, F, !1);\n };\n function q(D, I, C, F) {\n C = Number(C) || 0;\n const X = D.length - C;\n F ? (F = Number(F), F > X && (F = X)) : F = X;\n const ne = I.length;\n F > ne / 2 && (F = ne / 2);\n let de;\n for (de = 0; de < F; ++de) {\n const Me = parseInt(I.substr(de * 2, 2), 16);\n if (Dr(Me))\n return de;\n D[C + de] = Me;\n }\n return de;\n }\n function H(D, I, C, F) {\n return gn(Lr(I, D.length - C), D, C, F);\n }\n function le(D, I, C, F) {\n return gn(Uf(I), D, C, F);\n }\n function oe(D, I, C, F) {\n return gn(zo(I), D, C, F);\n }\n function he(D, I, C, F) {\n return gn(qf(I, D.length - C), D, C, F);\n }\n B.prototype.write = function(I, C, F, X) {\n if (C === void 0)\n X = \"utf8\", F = this.length, C = 0;\n else if (F === void 0 && typeof C == \"string\")\n X = C, F = this.length, C = 0;\n else if (isFinite(C))\n C = C >>> 0, isFinite(F) ? (F = F >>> 0, X === void 0 && (X = \"utf8\")) : (X = F, F = void 0);\n else\n throw new Error(\n \"Buffer.write(string, encoding, offset[, length]) is no longer supported\"\n );\n const ne = this.length - C;\n if ((F === void 0 || F > ne) && (F = ne), I.length > 0 && (F < 0 || C < 0) || C > this.length)\n throw new RangeError(\"Attempt to write outside buffer bounds\");\n X || (X = \"utf8\");\n let de = !1;\n for (; ; )\n switch (X) {\n case \"hex\":\n return q(this, I, C, F);\n case \"utf8\":\n case \"utf-8\":\n return H(this, I, C, F);\n case \"ascii\":\n case \"latin1\":\n case \"binary\":\n return le(this, I, C, F);\n case \"base64\":\n return oe(this, I, C, F);\n case \"ucs2\":\n case \"ucs-2\":\n case \"utf16le\":\n case \"utf-16le\":\n return he(this, I, C, F);\n default:\n if (de)\n throw new TypeError(\"Unknown encoding: \" + X);\n X = (\"\" + X).toLowerCase(), de = !0;\n }\n }, B.prototype.toJSON = function() {\n return {\n type: \"Buffer\",\n data: Array.prototype.slice.call(this._arr || this, 0)\n };\n };\n function Ie(D, I, C) {\n return I === 0 && C === D.length ? b.fromByteArray(D) : b.fromByteArray(D.slice(I, C));\n }\n function Pe(D, I, C) {\n C = Math.min(D.length, C);\n const F = [];\n let X = I;\n for (; X < C; ) {\n const ne = D[X];\n let de = null, Me = ne > 239 ? 4 : ne > 223 ? 3 : ne > 191 ? 2 : 1;\n if (X + Me <= C) {\n let We, Ue, Ye, Ve;\n switch (Me) {\n case 1:\n ne < 128 && (de = ne);\n break;\n case 2:\n We = D[X + 1], (We & 192) === 128 && (Ve = (ne & 31) << 6 | We & 63, Ve > 127 && (de = Ve));\n break;\n case 3:\n We = D[X + 1], Ue = D[X + 2], (We & 192) === 128 && (Ue & 192) === 128 && (Ve = (ne & 15) << 12 | (We & 63) << 6 | Ue & 63, Ve > 2047 && (Ve < 55296 || Ve > 57343) && (de = Ve));\n break;\n case 4:\n We = D[X + 1], Ue = D[X + 2], Ye = D[X + 3], (We & 192) === 128 && (Ue & 192) === 128 && (Ye & 192) === 128 && (Ve = (ne & 15) << 18 | (We & 63) << 12 | (Ue & 63) << 6 | Ye & 63, Ve > 65535 && Ve < 1114112 && (de = Ve));\n }\n }\n de === null ? (de = 65533, Me = 1) : de > 65535 && (de -= 65536, F.push(de >>> 10 & 1023 | 55296), de = 56320 | de & 1023), F.push(de), X += Me;\n }\n return bt(F);\n }\n const He = 4096;\n function bt(D) {\n const I = D.length;\n if (I <= He)\n return String.fromCharCode.apply(String, D);\n let C = \"\", F = 0;\n for (; F < I; )\n C += String.fromCharCode.apply(\n String,\n D.slice(F, F += He)\n );\n return C;\n }\n function mt(D, I, C) {\n let F = \"\";\n C = Math.min(D.length, C);\n for (let X = I; X < C; ++X)\n F += String.fromCharCode(D[X] & 127);\n return F;\n }\n function ue(D, I, C) {\n let F = \"\";\n C = Math.min(D.length, C);\n for (let X = I; X < C; ++X)\n F += String.fromCharCode(D[X]);\n return F;\n }\n function Tt(D, I, C) {\n const F = D.length;\n (!I || I < 0) && (I = 0), (!C || C < 0 || C > F) && (C = F);\n let X = \"\";\n for (let ne = I; ne < C; ++ne)\n X += Gf[D[ne]];\n return X;\n }\n function Ot(D, I, C) {\n const F = D.slice(I, C);\n let X = \"\";\n for (let ne = 0; ne < F.length - 1; ne += 2)\n X += String.fromCharCode(F[ne] + F[ne + 1] * 256);\n return X;\n }\n B.prototype.slice = function(I, C) {\n const F = this.length;\n I = ~~I, C = C === void 0 ? F : ~~C, I < 0 ? (I += F, I < 0 && (I = 0)) : I > F && (I = F), C < 0 ? (C += F, C < 0 && (C = 0)) : C > F && (C = F), C < I && (C = I);\n const X = this.subarray(I, C);\n return Object.setPrototypeOf(X, B.prototype), X;\n };\n function Le(D, I, C) {\n if (D % 1 !== 0 || D < 0)\n throw new RangeError(\"offset is not uint\");\n if (D + I > C)\n throw new RangeError(\"Trying to access beyond buffer length\");\n }\n B.prototype.readUintLE = B.prototype.readUIntLE = function(I, C, F) {\n I = I >>> 0, C = C >>> 0, F || Le(I, C, this.length);\n let X = this[I], ne = 1, de = 0;\n for (; ++de < C && (ne *= 256); )\n X += this[I + de] * ne;\n return X;\n }, B.prototype.readUintBE = B.prototype.readUIntBE = function(I, C, F) {\n I = I >>> 0, C = C >>> 0, F || Le(I, C, this.length);\n let X = this[I + --C], ne = 1;\n for (; C > 0 && (ne *= 256); )\n X += this[I + --C] * ne;\n return X;\n }, B.prototype.readUint8 = B.prototype.readUInt8 = function(I, C) {\n return I = I >>> 0, C || Le(I, 1, this.length), this[I];\n }, B.prototype.readUint16LE = B.prototype.readUInt16LE = function(I, C) {\n return I = I >>> 0, C || Le(I, 2, this.length), this[I] | this[I + 1] << 8;\n }, B.prototype.readUint16BE = B.prototype.readUInt16BE = function(I, C) {\n return I = I >>> 0, C || Le(I, 2, this.length), this[I] << 8 | this[I + 1];\n }, B.prototype.readUint32LE = B.prototype.readUInt32LE = function(I, C) {\n return I = I >>> 0, C || Le(I, 4, this.length), (this[I] | this[I + 1] << 8 | this[I + 2] << 16) + this[I + 3] * 16777216;\n }, B.prototype.readUint32BE = B.prototype.readUInt32BE = function(I, C) {\n return I = I >>> 0, C || Le(I, 4, this.length), this[I] * 16777216 + (this[I + 1] << 16 | this[I + 2] << 8 | this[I + 3]);\n }, B.prototype.readBigUInt64LE = mi(function(I) {\n I = I >>> 0, Qi(I, \"offset\");\n const C = this[I], F = this[I + 7];\n (C === void 0 || F === void 0) && _s(I, this.length - 8);\n const X = C + this[++I] * 2 ** 8 + this[++I] * 2 ** 16 + this[++I] * 2 ** 24, ne = this[++I] + this[++I] * 2 ** 8 + this[++I] * 2 ** 16 + F * 2 ** 24;\n return BigInt(X) + (BigInt(ne) << BigInt(32));\n }), B.prototype.readBigUInt64BE = mi(function(I) {\n I = I >>> 0, Qi(I, \"offset\");\n const C = this[I], F = this[I + 7];\n (C === void 0 || F === void 0) && _s(I, this.length - 8);\n const X = C * 2 ** 24 + this[++I] * 2 ** 16 + this[++I] * 2 ** 8 + this[++I], ne = this[++I] * 2 ** 24 + this[++I] * 2 ** 16 + this[++I] * 2 ** 8 + F;\n return (BigInt(X) << BigInt(32)) + BigInt(ne);\n }), B.prototype.readIntLE = function(I, C, F) {\n I = I >>> 0, C = C >>> 0, F || Le(I, C, this.length);\n let X = this[I], ne = 1, de = 0;\n for (; ++de < C && (ne *= 256); )\n X += this[I + de] * ne;\n return ne *= 128, X >= ne && (X -= Math.pow(2, 8 * C)), X;\n }, B.prototype.readIntBE = function(I, C, F) {\n I = I >>> 0, C = C >>> 0, F || Le(I, C, this.length);\n let X = C, ne = 1, de = this[I + --X];\n for (; X > 0 && (ne *= 256); )\n de += this[I + --X] * ne;\n return ne *= 128, de >= ne && (de -= Math.pow(2, 8 * C)), de;\n }, B.prototype.readInt8 = function(I, C) {\n return I = I >>> 0, C || Le(I, 1, this.length), this[I] & 128 ? (255 - this[I] + 1) * -1 : this[I];\n }, B.prototype.readInt16LE = function(I, C) {\n I = I >>> 0, C || Le(I, 2, this.length);\n const F = this[I] | this[I + 1] << 8;\n return F & 32768 ? F | 4294901760 : F;\n }, B.prototype.readInt16BE = function(I, C) {\n I = I >>> 0, C || Le(I, 2, this.length);\n const F = this[I + 1] | this[I] << 8;\n return F & 32768 ? F | 4294901760 : F;\n }, B.prototype.readInt32LE = function(I, C) {\n return I = I >>> 0, C || Le(I, 4, this.length), this[I] | this[I + 1] << 8 | this[I + 2] << 16 | this[I + 3] << 24;\n }, B.prototype.readInt32BE = function(I, C) {\n return I = I >>> 0, C || Le(I, 4, this.length), this[I] << 24 | this[I + 1] << 16 | this[I + 2] << 8 | this[I + 3];\n }, B.prototype.readBigInt64LE = mi(function(I) {\n I = I >>> 0, Qi(I, \"offset\");\n const C = this[I], F = this[I + 7];\n (C === void 0 || F === void 0) && _s(I, this.length - 8);\n const X = this[I + 4] + this[I + 5] * 2 ** 8 + this[I + 6] * 2 ** 16 + (F << 24);\n return (BigInt(X) << BigInt(32)) + BigInt(C + this[++I] * 2 ** 8 + this[++I] * 2 ** 16 + this[++I] * 2 ** 24);\n }), B.prototype.readBigInt64BE = mi(function(I) {\n I = I >>> 0, Qi(I, \"offset\");\n const C = this[I], F = this[I + 7];\n (C === void 0 || F === void 0) && _s(I, this.length - 8);\n const X = (C << 24) + // Overflow\n this[++I] * 2 ** 16 + this[++I] * 2 ** 8 + this[++I];\n return (BigInt(X) << BigInt(32)) + BigInt(this[++I] * 2 ** 24 + this[++I] * 2 ** 16 + this[++I] * 2 ** 8 + F);\n }), B.prototype.readFloatLE = function(I, C) {\n return I = I >>> 0, C || Le(I, 4, this.length), T.read(this, I, !0, 23, 4);\n }, B.prototype.readFloatBE = function(I, C) {\n return I = I >>> 0, C || Le(I, 4, this.length), T.read(this, I, !1, 23, 4);\n }, B.prototype.readDoubleLE = function(I, C) {\n return I = I >>> 0, C || Le(I, 8, this.length), T.read(this, I, !0, 52, 8);\n }, B.prototype.readDoubleBE = function(I, C) {\n return I = I >>> 0, C || Le(I, 8, this.length), T.read(this, I, !1, 52, 8);\n };\n function De(D, I, C, F, X, ne) {\n if (!B.isBuffer(D))\n throw new TypeError('\"buffer\" argument must be a Buffer instance');\n if (I > X || I < ne)\n throw new RangeError('\"value\" argument is out of bounds');\n if (C + F > D.length)\n throw new RangeError(\"Index out of range\");\n }\n B.prototype.writeUintLE = B.prototype.writeUIntLE = function(I, C, F, X) {\n if (I = +I, C = C >>> 0, F = F >>> 0, !X) {\n const Me = Math.pow(2, 8 * F) - 1;\n De(this, I, C, F, Me, 0);\n }\n let ne = 1, de = 0;\n for (this[C] = I & 255; ++de < F && (ne *= 256); )\n this[C + de] = I / ne & 255;\n return C + F;\n }, B.prototype.writeUintBE = B.prototype.writeUIntBE = function(I, C, F, X) {\n if (I = +I, C = C >>> 0, F = F >>> 0, !X) {\n const Me = Math.pow(2, 8 * F) - 1;\n De(this, I, C, F, Me, 0);\n }\n let ne = F - 1, de = 1;\n for (this[C + ne] = I & 255; --ne >= 0 && (de *= 256); )\n this[C + ne] = I / de & 255;\n return C + F;\n }, B.prototype.writeUint8 = B.prototype.writeUInt8 = function(I, C, F) {\n return I = +I, C = C >>> 0, F || De(this, I, C, 1, 255, 0), this[C] = I & 255, C + 1;\n }, B.prototype.writeUint16LE = B.prototype.writeUInt16LE = function(I, C, F) {\n return I = +I, C = C >>> 0, F || De(this, I, C, 2, 65535, 0), this[C] = I & 255, this[C + 1] = I >>> 8, C + 2;\n }, B.prototype.writeUint16BE = B.prototype.writeUInt16BE = function(I, C, F) {\n return I = +I, C = C >>> 0, F || De(this, I, C, 2, 65535, 0), this[C] = I >>> 8, this[C + 1] = I & 255, C + 2;\n }, B.prototype.writeUint32LE = B.prototype.writeUInt32LE = function(I, C, F) {\n return I = +I, C = C >>> 0, F || De(this, I, C, 4, 4294967295, 0), this[C + 3] = I >>> 24, this[C + 2] = I >>> 16, this[C + 1] = I >>> 8, this[C] = I & 255, C + 4;\n }, B.prototype.writeUint32BE = B.prototype.writeUInt32BE = function(I, C, F) {\n return I = +I, C = C >>> 0, F || De(this, I, C, 4, 4294967295, 0), this[C] = I >>> 24, this[C + 1] = I >>> 16, this[C + 2] = I >>> 8, this[C + 3] = I & 255, C + 4;\n };\n function Je(D, I, C, F, X) {\n pn(I, F, X, D, C, 7);\n let ne = Number(I & BigInt(4294967295));\n D[C++] = ne, ne = ne >> 8, D[C++] = ne, ne = ne >> 8, D[C++] = ne, ne = ne >> 8, D[C++] = ne;\n let de = Number(I >> BigInt(32) & BigInt(4294967295));\n return D[C++] = de, de = de >> 8, D[C++] = de, de = de >> 8, D[C++] = de, de = de >> 8, D[C++] = de, C;\n }\n function nt(D, I, C, F, X) {\n pn(I, F, X, D, C, 7);\n let ne = Number(I & BigInt(4294967295));\n D[C + 7] = ne, ne = ne >> 8, D[C + 6] = ne, ne = ne >> 8, D[C + 5] = ne, ne = ne >> 8, D[C + 4] = ne;\n let de = Number(I >> BigInt(32) & BigInt(4294967295));\n return D[C + 3] = de, de = de >> 8, D[C + 2] = de, de = de >> 8, D[C + 1] = de, de = de >> 8, D[C] = de, C + 8;\n }\n B.prototype.writeBigUInt64LE = mi(function(I, C = 0) {\n return Je(this, I, C, BigInt(0), BigInt(\"0xffffffffffffffff\"));\n }), B.prototype.writeBigUInt64BE = mi(function(I, C = 0) {\n return nt(this, I, C, BigInt(0), BigInt(\"0xffffffffffffffff\"));\n }), B.prototype.writeIntLE = function(I, C, F, X) {\n if (I = +I, C = C >>> 0, !X) {\n const We = Math.pow(2, 8 * F - 1);\n De(this, I, C, F, We - 1, -We);\n }\n let ne = 0, de = 1, Me = 0;\n for (this[C] = I & 255; ++ne < F && (de *= 256); )\n I < 0 && Me === 0 && this[C + ne - 1] !== 0 && (Me = 1), this[C + ne] = (I / de >> 0) - Me & 255;\n return C + F;\n }, B.prototype.writeIntBE = function(I, C, F, X) {\n if (I = +I, C = C >>> 0, !X) {\n const We = Math.pow(2, 8 * F - 1);\n De(this, I, C, F, We - 1, -We);\n }\n let ne = F - 1, de = 1, Me = 0;\n for (this[C + ne] = I & 255; --ne >= 0 && (de *= 256); )\n I < 0 && Me === 0 && this[C + ne + 1] !== 0 && (Me = 1), this[C + ne] = (I / de >> 0) - Me & 255;\n return C + F;\n }, B.prototype.writeInt8 = function(I, C, F) {\n return I = +I, C = C >>> 0, F || De(this, I, C, 1, 127, -128), I < 0 && (I = 255 + I + 1), this[C] = I & 255, C + 1;\n }, B.prototype.writeInt16LE = function(I, C, F) {\n return I = +I, C = C >>> 0, F || De(this, I, C, 2, 32767, -32768), this[C] = I & 255, this[C + 1] = I >>> 8, C + 2;\n }, B.prototype.writeInt16BE = function(I, C, F) {\n return I = +I, C = C >>> 0, F || De(this, I, C, 2, 32767, -32768), this[C] = I >>> 8, this[C + 1] = I & 255, C + 2;\n }, B.prototype.writeInt32LE = function(I, C, F) {\n return I = +I, C = C >>> 0, F || De(this, I, C, 4, 2147483647, -2147483648), this[C] = I & 255, this[C + 1] = I >>> 8, this[C + 2] = I >>> 16, this[C + 3] = I >>> 24, C + 4;\n }, B.prototype.writeInt32BE = function(I, C, F) {\n return I = +I, C = C >>> 0, F || De(this, I, C, 4, 2147483647, -2147483648), I < 0 && (I = 4294967295 + I + 1), this[C] = I >>> 24, this[C + 1] = I >>> 16, this[C + 2] = I >>> 8, this[C + 3] = I & 255, C + 4;\n }, B.prototype.writeBigInt64LE = mi(function(I, C = 0) {\n return Je(this, I, C, -BigInt(\"0x8000000000000000\"), BigInt(\"0x7fffffffffffffff\"));\n }), B.prototype.writeBigInt64BE = mi(function(I, C = 0) {\n return nt(this, I, C, -BigInt(\"0x8000000000000000\"), BigInt(\"0x7fffffffffffffff\"));\n });\n function ks(D, I, C, F, X, ne) {\n if (C + F > D.length)\n throw new RangeError(\"Index out of range\");\n if (C < 0)\n throw new RangeError(\"Index out of range\");\n }\n function Es(D, I, C, F, X) {\n return I = +I, C = C >>> 0, X || ks(D, I, C, 4), T.write(D, I, C, F, 23, 4), C + 4;\n }\n B.prototype.writeFloatLE = function(I, C, F) {\n return Es(this, I, C, !0, F);\n }, B.prototype.writeFloatBE = function(I, C, F) {\n return Es(this, I, C, !1, F);\n };\n function Ns(D, I, C, F, X) {\n return I = +I, C = C >>> 0, X || ks(D, I, C, 8), T.write(D, I, C, F, 52, 8), C + 8;\n }\n B.prototype.writeDoubleLE = function(I, C, F) {\n return Ns(this, I, C, !0, F);\n }, B.prototype.writeDoubleBE = function(I, C, F) {\n return Ns(this, I, C, !1, F);\n }, B.prototype.copy = function(I, C, F, X) {\n if (!B.isBuffer(I))\n throw new TypeError(\"argument should be a Buffer\");\n if (F || (F = 0), !X && X !== 0 && (X = this.length), C >= I.length && (C = I.length), C || (C = 0), X > 0 && X < F && (X = F), X === F || I.length === 0 || this.length === 0)\n return 0;\n if (C < 0)\n throw new RangeError(\"targetStart out of bounds\");\n if (F < 0 || F >= this.length)\n throw new RangeError(\"Index out of range\");\n if (X < 0)\n throw new RangeError(\"sourceEnd out of bounds\");\n X > this.length && (X = this.length), I.length - C < X - F && (X = I.length - C + F);\n const ne = X - F;\n return this === I && typeof _.prototype.copyWithin == \"function\" ? this.copyWithin(C, F, X) : _.prototype.set.call(\n I,\n this.subarray(F, X),\n C\n ), ne;\n }, B.prototype.fill = function(I, C, F, X) {\n if (typeof I == \"string\") {\n if (typeof C == \"string\" ? (X = C, C = 0, F = this.length) : typeof F == \"string\" && (X = F, F = this.length), X !== void 0 && typeof X != \"string\")\n throw new TypeError(\"encoding must be a string\");\n if (typeof X == \"string\" && !B.isEncoding(X))\n throw new TypeError(\"Unknown encoding: \" + X);\n if (I.length === 1) {\n const de = I.charCodeAt(0);\n (X === \"utf8\" && de < 128 || X === \"latin1\") && (I = de);\n }\n } else\n typeof I == \"number\" ? I = I & 255 : typeof I == \"boolean\" && (I = Number(I));\n if (C < 0 || this.length < C || this.length < F)\n throw new RangeError(\"Out of range index\");\n if (F <= C)\n return this;\n C = C >>> 0, F = F === void 0 ? this.length : F >>> 0, I || (I = 0);\n let ne;\n if (typeof I == \"number\")\n for (ne = C; ne < F; ++ne)\n this[ne] = I;\n else {\n const de = B.isBuffer(I) ? I : B.from(I, X), Me = de.length;\n if (Me === 0)\n throw new TypeError('The value \"' + I + '\" is invalid for argument \"value\"');\n for (ne = 0; ne < F - C; ++ne)\n this[ne + C] = de[ne % Me];\n }\n return this;\n };\n const Qt = {};\n function Ps(D, I, C) {\n Qt[D] = class extends C {\n constructor() {\n super(), Object.defineProperty(this, \"message\", {\n value: I.apply(this, arguments),\n writable: !0,\n configurable: !0\n }), this.name = `${this.name} [${D}]`, this.stack, delete this.name;\n }\n get code() {\n return D;\n }\n set code(X) {\n Object.defineProperty(this, \"code\", {\n configurable: !0,\n enumerable: !0,\n value: X,\n writable: !0\n });\n }\n toString() {\n return `${this.name} [${D}]: ${this.message}`;\n }\n };\n }\n Ps(\n \"ERR_BUFFER_OUT_OF_BOUNDS\",\n function(D) {\n return D ? `${D} is outside of buffer bounds` : \"Attempt to access memory outside buffer bounds\";\n },\n RangeError\n ), Ps(\n \"ERR_INVALID_ARG_TYPE\",\n function(D, I) {\n return `The \"${D}\" argument must be of type number. Received type ${typeof I}`;\n },\n TypeError\n ), Ps(\n \"ERR_OUT_OF_RANGE\",\n function(D, I, C) {\n let F = `The value of \"${D}\" is out of range.`, X = C;\n return Number.isInteger(C) && Math.abs(C) > 2 ** 32 ? X = ln(String(C)) : typeof C == \"bigint\" && (X = String(C), (C > BigInt(2) ** BigInt(32) || C < -(BigInt(2) ** BigInt(32))) && (X = ln(X)), X += \"n\"), F += ` It must be ${I}. Received ${X}`, F;\n },\n RangeError\n );\n function ln(D) {\n let I = \"\", C = D.length;\n const F = D[0] === \"-\" ? 1 : 0;\n for (; C >= F + 4; C -= 3)\n I = `_${D.slice(C - 3, C)}${I}`;\n return `${D.slice(0, C)}${I}`;\n }\n function _r(D, I, C) {\n Qi(I, \"offset\"), (D[I] === void 0 || D[I + C] === void 0) && _s(I, D.length - (C + 1));\n }\n function pn(D, I, C, F, X, ne) {\n if (D > C || D < I) {\n const de = typeof I == \"bigint\" ? \"n\" : \"\";\n let Me;\n throw ne > 3 ? I === 0 || I === BigInt(0) ? Me = `>= 0${de} and < 2${de} ** ${(ne + 1) * 8}${de}` : Me = `>= -(2${de} ** ${(ne + 1) * 8 - 1}${de}) and < 2 ** ${(ne + 1) * 8 - 1}${de}` : Me = `>= ${I}${de} and <= ${C}${de}`, new Qt.ERR_OUT_OF_RANGE(\"value\", Me, D);\n }\n _r(F, X, ne);\n }\n function Qi(D, I) {\n if (typeof D != \"number\")\n throw new Qt.ERR_INVALID_ARG_TYPE(I, \"number\", D);\n }\n function _s(D, I, C) {\n throw Math.floor(D) !== D ? (Qi(D, C), new Qt.ERR_OUT_OF_RANGE(C || \"offset\", \"an integer\", D)) : I < 0 ? new Qt.ERR_BUFFER_OUT_OF_BOUNDS() : new Qt.ERR_OUT_OF_RANGE(\n C || \"offset\",\n `>= ${C ? 1 : 0} and <= ${I}`,\n D\n );\n }\n const jf = /[^+/0-9A-Za-z-_]/g;\n function Ff(D) {\n if (D = D.split(\"=\")[0], D = D.trim().replace(jf, \"\"), D.length < 2)\n return \"\";\n for (; D.length % 4 !== 0; )\n D = D + \"=\";\n return D;\n }\n function Lr(D, I) {\n I = I || 1 / 0;\n let C;\n const F = D.length;\n let X = null;\n const ne = [];\n for (let de = 0; de < F; ++de) {\n if (C = D.charCodeAt(de), C > 55295 && C < 57344) {\n if (!X) {\n if (C > 56319) {\n (I -= 3) > -1 && ne.push(239, 191, 189);\n continue;\n } else if (de + 1 === F) {\n (I -= 3) > -1 && ne.push(239, 191, 189);\n continue;\n }\n X = C;\n continue;\n }\n if (C < 56320) {\n (I -= 3) > -1 && ne.push(239, 191, 189), X = C;\n continue;\n }\n C = (X - 55296 << 10 | C - 56320) + 65536;\n } else\n X && (I -= 3) > -1 && ne.push(239, 191, 189);\n if (X = null, C < 128) {\n if ((I -= 1) < 0)\n break;\n ne.push(C);\n } else if (C < 2048) {\n if ((I -= 2) < 0)\n break;\n ne.push(\n C >> 6 | 192,\n C & 63 | 128\n );\n } else if (C < 65536) {\n if ((I -= 3) < 0)\n break;\n ne.push(\n C >> 12 | 224,\n C >> 6 & 63 | 128,\n C & 63 | 128\n );\n } else if (C < 1114112) {\n if ((I -= 4) < 0)\n break;\n ne.push(\n C >> 18 | 240,\n C >> 12 & 63 | 128,\n C >> 6 & 63 | 128,\n C & 63 | 128\n );\n } else\n throw new Error(\"Invalid code point\");\n }\n return ne;\n }\n function Uf(D) {\n const I = [];\n for (let C = 0; C < D.length; ++C)\n I.push(D.charCodeAt(C) & 255);\n return I;\n }\n function qf(D, I) {\n let C, F, X;\n const ne = [];\n for (let de = 0; de < D.length && !((I -= 2) < 0); ++de)\n C = D.charCodeAt(de), F = C >> 8, X = C % 256, ne.push(X), ne.push(F);\n return ne;\n }\n function zo(D) {\n return b.toByteArray(Ff(D));\n }\n function gn(D, I, C, F) {\n let X;\n for (X = 0; X < F && !(X + C >= I.length || X >= D.length); ++X)\n I[X + C] = D[X];\n return X;\n }\n function Ft(D, I) {\n return D instanceof I || D != null && D.constructor != null && D.constructor.name != null && D.constructor.name === I.name;\n }\n function Dr(D) {\n return D !== D;\n }\n const Gf = function() {\n const D = \"0123456789abcdef\", I = new Array(256);\n for (let C = 0; C < 16; ++C) {\n const F = C * 16;\n for (let X = 0; X < 16; ++X)\n I[F + X] = D[C] + D[X];\n }\n return I;\n }();\n function mi(D) {\n return typeof BigInt > \"u\" ? zf : D;\n }\n function zf() {\n throw new Error(\"BigInt not supported\");\n }\n })(e);\n const w = e.Buffer;\n d.Buffer = e.Buffer, d.default = w;\n }(Rr)), Rr;\n}\nvar Xf = nn();\nconst $f = /* @__PURE__ */ Kf(Xf);\nfunction Zf(d) {\n return d && d.__esModule && Object.prototype.hasOwnProperty.call(d, \"default\") ? d.default : d;\n}\nvar pc = { exports: {} }, Ze = pc.exports = {}, Gt, zt;\nfunction ma() {\n throw new Error(\"setTimeout has not been defined\");\n}\nfunction ya() {\n throw new Error(\"clearTimeout has not been defined\");\n}\n(function() {\n try {\n typeof setTimeout == \"function\" ? Gt = setTimeout : Gt = ma;\n } catch {\n Gt = ma;\n }\n try {\n typeof clearTimeout == \"function\" ? zt = clearTimeout : zt = ya;\n } catch {\n zt = ya;\n }\n})();\nfunction gc(d) {\n if (Gt === setTimeout)\n return setTimeout(d, 0);\n if ((Gt === ma || !Gt) && setTimeout)\n return Gt = setTimeout, setTimeout(d, 0);\n try {\n return Gt(d, 0);\n } catch {\n try {\n return Gt.call(null, d, 0);\n } catch {\n return Gt.call(this, d, 0);\n }\n }\n}\nfunction Qf(d) {\n if (zt === clearTimeout)\n return clearTimeout(d);\n if ((zt === ya || !zt) && clearTimeout)\n return zt = clearTimeout, clearTimeout(d);\n try {\n return zt(d);\n } catch {\n try {\n return zt.call(null, d);\n } catch {\n return zt.call(this, d);\n }\n }\n}\nvar ii = [], us = !1, Ui, _n = -1;\nfunction Jf() {\n !us || !Ui || (us = !1, Ui.length ? ii = Ui.concat(ii) : _n = -1, ii.length && mc());\n}\nfunction mc() {\n if (!us) {\n var d = gc(Jf);\n us = !0;\n for (var e = ii.length; e; ) {\n for (Ui = ii, ii = []; ++_n < e; )\n Ui && Ui[_n].run();\n _n = -1, e = ii.length;\n }\n Ui = null, us = !1, Qf(d);\n }\n}\nZe.nextTick = function(d) {\n var e = new Array(arguments.length - 1);\n if (arguments.length > 1)\n for (var t = 1; t < arguments.length; t++)\n e[t - 1] = arguments[t];\n ii.push(new yc(d, e)), ii.length === 1 && !us && gc(mc);\n};\nfunction yc(d, e) {\n this.fun = d, this.array = e;\n}\nyc.prototype.run = function() {\n this.fun.apply(null, this.array);\n};\nZe.title = \"browser\";\nZe.browser = !0;\nZe.env = {};\nZe.argv = [];\nZe.version = \"\";\nZe.versions = {};\nfunction ci() {\n}\nZe.on = ci;\nZe.addListener = ci;\nZe.once = ci;\nZe.off = ci;\nZe.removeListener = ci;\nZe.removeAllListeners = ci;\nZe.emit = ci;\nZe.prependListener = ci;\nZe.prependOnceListener = ci;\nZe.listeners = function(d) {\n return [];\n};\nZe.binding = function(d) {\n throw new Error(\"process.binding is not supported\");\n};\nZe.cwd = function() {\n return \"/\";\n};\nZe.chdir = function(d) {\n throw new Error(\"process.chdir is not supported\");\n};\nZe.umask = function() {\n return 0;\n};\nvar eh = pc.exports;\nconst Ce = /* @__PURE__ */ Zf(eh), wc = typeof window < \"u\", th = typeof Ce < \"u\" && typeof Ce.versions < \"u\" && typeof Ce.versions.electron < \"u\", bc = typeof WorkerGlobalScope < \"u\" && self instanceof WorkerGlobalScope, ih = typeof Ce < \"u\" && Ce.platform === \"win32\", sh = !(wc || bc), ut = Number.isFinite, nh = Number.isInteger, Os = Array.isArray, rn = (d) => d != null, Wa = (d) => typeof d == \"string\", rr = (d) => d !== null && typeof d == \"object\", rh = (d) => d instanceof RegExp, wa = (d) => rr(d) && Object.getPrototypeOf(d) === Object.prototype && !Os(d) && !rh(d), $t = (d) => rn(d) && d.toString || ut(d), Zt = (d, e) => rr(d) && d[e] !== \"\" && d[e] !== null ? d[e] : void 0, _i = (d, e, t) => rr(d) ? d[e] !== void 0 && d[e] !== \"\" && d[e] !== null ? d[e] : d[t] !== \"\" && d[t] !== null ? d[t] : void 0 : void 0, Li = (d, e) => d[e.find((t) => Zt(d, t) !== void 0)], ui = (d) => ut(d) || Wa(d) && d.length !== 0 ? parseFloat(d) : NaN, Ms = (d) => ut(d) || Wa(d) && d.length !== 0 ? Math.trunc(Number(d)) : NaN, ah = (d, e, t) => {\n const i = ui(Zt(d, e));\n return ut(i) ? i : t;\n}, oh = (d, e, t) => {\n const i = Ms(Zt(d, e));\n return ut(i) ? i : t;\n}, dh = (d, e, t, i) => {\n const s = ui(Zt(d, e));\n return ut(s) ? parseInt(s * t) : i;\n}, ch = (d, e, t) => {\n const i = ui(Zt(d, e));\n return ut(i) ? parseInt(i * 1e3) : t;\n}, uh = (d, e, t) => {\n const i = Zt(d, e);\n return rn(i) ? i : t;\n}, fh = (d, e, t) => {\n const i = Zt(d, e);\n return $t(i) ? String(i) : t;\n}, hh = (d, e, t) => {\n const i = Zt(d, e);\n return $t(i) ? String(i).toLowerCase() : t;\n}, lh = (d, e, t) => {\n const i = Zt(d, e);\n return $t(i) ? String(i).toUpperCase() : t;\n}, ph = (d, e, t, i) => {\n const s = ui(_i(d, e, t));\n return ut(s) ? s : i;\n}, gh = (d, e, t, i) => {\n const s = Ms(_i(d, e, t));\n return ut(s) ? s : i;\n}, mh = (d, e, t, i, s) => {\n const n = Ms(_i(d, e, t));\n return ut(n) ? parseInt(n * i) : s;\n}, yh = (d, e, t, i) => {\n const s = ui(_i(d, e, t));\n return ut(s) ? parseInt(s * 1e3) : i;\n}, wh = (d, e, t, i) => {\n const s = _i(d, e, t);\n return rn(s) ? s : i;\n}, bh = (d, e, t, i) => {\n const s = _i(d, e, t);\n return $t(s) ? String(s) : i;\n}, Sh = (d, e, t, i) => {\n const s = _i(d, e, t);\n return $t(s) ? String(s).toLowerCase() : i;\n}, Th = (d, e, t, i) => {\n const s = _i(d, e, t);\n return $t(s) ? String(s).toUpperCase() : i;\n}, Ah = (d, e, t) => {\n const i = ui(Li(d, e));\n return ut(i) ? i : t;\n}, Ih = (d, e, t) => {\n if (d === void 0)\n return t;\n const i = Ms(Li(d, e));\n return ut(i) ? i : t;\n}, Oh = (d, e, t, i) => {\n const s = Ms(Li(d, e));\n return ut(s) ? parseInt(s * t) : i;\n}, Mh = (d, e, t) => {\n const i = ui(Li(d, e));\n return ut(i) ? parseInt(i * 1e3) : t;\n}, Ch = (d, e, t) => {\n if (d === void 0)\n return t;\n const i = Li(d, e);\n return rn(i) ? i : t;\n}, xh = (d, e, t) => {\n if (d === void 0)\n return t;\n const i = Li(d, e);\n return $t(i) ? String(i) : t;\n}, vh = (d, e, t) => {\n if (d === void 0)\n return t;\n const i = Li(d, e);\n return $t(i) ? String(i).toLowerCase() : t;\n}, kh = (d, e, t) => {\n const i = Li(d, e);\n return $t(i) ? String(i).toUpperCase() : t;\n}, Ya = Object.keys, $i = (d) => Os(d) ? d : Object.values(d), Sc = (d) => new Set($i(d)), Tc = (...d) => Object.assign({}, ...d), Ac = (d) => Os(d) ? Array.from(d) : Tc(d), Eh = (d) => d, Nh = (d) => Array.from(Sc(d)), Ph = (d, e) => d.concat(e), _h = (d, e) => e.includes(d), Lh = (d) => Object.values(d), Dh = (d) => d ? (Array.isArray(d) ? d : Object.keys(d)).length < 1 : !0, Rh = (d, e = {}) => {\n for (const t of Ya(d).sort())\n e[t] = d[t];\n return e;\n}, Bh = (d, e, t = {}) => {\n for (const i of $i(d))\n if (e in i) {\n const s = i[e];\n t[s] = t[s] || [], t[s].push(i);\n }\n return t;\n}, Vh = (d, e, t = {}) => {\n for (const i of $i(d))\n e in i && (t[i[e]] = i);\n return t;\n}, jh = (d, e, t = void 0, i = []) => {\n for (const s of $i(d))\n s[e] === t && i.push(s);\n return i;\n}, Fh = (d, e, t = !1, i = 0, s = t ? -1 : 1) => d.sort((n, r) => {\n const a = e in n ? n[e] : i, o = e in r ? r[e] : i;\n return a < o ? -s : a > o ? s : 0;\n}), Uh = (d, e, t, i = !1, s = i ? -1 : 1) => d.sort((n, r) => n[e] < r[e] ? -s : n[e] > r[e] ? s : n[t] < r[t] ? -s : n[t] > r[t] ? s : 0), qh = function d(e, t = []) {\n for (const i of e)\n Os(i) ? d(i, t) : t.push(i);\n return t;\n}, Gh = (d, e) => $i(d).filter((t) => e in t).map((t) => t[e]), zh = (d, ...e) => {\n if (!Array.isArray(d)) {\n const t = Ac(d);\n for (const i of e)\n if (Os(i))\n for (const s of i)\n delete t[s];\n else\n delete t[i];\n return t;\n }\n return d;\n}, Hh = (...d) => {\n const e = d.filter(ut);\n return e.length > 0 ? e.reduce((t, i) => t + i, 0) : void 0;\n}, Wh = function d(...e) {\n let t;\n for (const i of e)\n if (wa(i)) {\n wa(t) || (t = {});\n for (const s in i)\n t[s] = d(t[s], i[s]);\n } else\n t = i;\n return t;\n}, Yh = (d, ...e) => {\n const t = {}, i = Object.assign({}, ...e), s = Object.keys(i);\n for (let n = 0; n < s.length; n++) {\n const r = s[n];\n d[r] === void 0 && (t[r] = i[r]);\n }\n return Object.assign({}, d, t);\n}, Kh = (d) => {\n const e = {\n fetchOHLCVWs: \"fetch_ohlcv_ws\"\n // ws = websocket\n };\n return e[d] ? e[d] : d.match(/[A-Z]/) ? d.replace(/[a-z0-9][A-Z]/g, (t) => t[0] + \"_\" + t[1]).replace(/[A-Z0-9][A-Z0-9][a-z][^$]/g, (t) => t[0] + \"_\" + t[1] + t[2] + t[3]).replace(/[a-z][0-9]$/g, (t) => t[0] + \"_\" + t[1]).toLowerCase() : d;\n}, Xh = (d) => d.length ? d.charAt(0).toUpperCase() + d.slice(1) : d, $h = (d) => d.replace(/^\\s+|\\s+$/g, \"\"), Ic = (d) => d ? (d ^ Math.random() * 16 >> d / 4).toString(16) : ([1e7] + -1e3 + -4e3 + -8e3 + -1e11).replace(/[018]/g, Ic), Oc = (d) => d ? (d ^ Math.random() * 16 >> d / 4).toString(16) : ([1e5] + 100 + 400 + 8e3).replace(/[018]/g, Oc), Mc = (d) => d ? (d ^ Math.random() * 16 >> d / 4).toString(16) : ([1e7] + 1e3 + 4e3 + 8e5).replace(/[018]/g, Mc), Et = 0, Dt = 1, ar = 2, Ka = 3, St = 2, or = 3, ct = 4, Ht = 5, Cc = 6, Zh = {\n ROUND: Dt,\n TRUNCATE: Et,\n ROUND_UP: ar,\n ROUND_DOWN: Ka,\n DECIMAL_PLACES: St,\n SIGNIFICANT_DIGITS: or,\n TICK_SIZE: ct,\n NO_PADDING: Ht,\n PAD_WITH_ZERO: Cc\n}, xc = 22, Qh = 2;\nfunction Xa(d) {\n if (d === void 0)\n return;\n if (typeof d != \"number\")\n return d.toString();\n const e = d.toString();\n if (Math.abs(d) < 1) {\n const t = e.split(\"e-\"), i = t[0].replace(\".\", \"\"), s = parseInt(t[1]), n = e[0] === \"-\";\n if (s)\n return d = (n ? \"-\" : \"\") + \"0.\" + new Array(s).join(\"0\") + i.substring(n), d;\n } else {\n const t = e.split(\"e\");\n if (t[1]) {\n let i = parseInt(t[1]);\n const s = t[0].split(\".\");\n let n = \"\";\n return s[1] && (i -= s[1].length, n = s[1]), s[0] + n + new Array(i + 1).join(\"0\");\n }\n }\n return e;\n}\nconst Wo = [], vc = (d, e = 0) => {\n if (d = Xa(d), e > 0) {\n const t = Wo[e] || (Wo[e] = new RegExp(\"([-]*\\\\d+\\\\.\\\\d{\" + e + \"})(\\\\d)\")), [, i] = d.toString().match(t) || [null, d];\n return i.toString();\n }\n return parseInt(d).toString();\n}, Jh = (d, e = 0) => parseFloat(vc(d, e));\nfunction qn(d) {\n if (d.indexOf(\"e\") > -1) {\n const t = d.replace(/\\de/, \"\");\n return parseInt(t) * -1;\n }\n const e = d.replace(/0+$/g, \"\").split(\".\");\n return e.length > 1 ? e[1].length : 0;\n}\nconst el = (d, e, t, i = St, s = Ht, n = !1) => {\n let r = t;\n if (typeof r == \"string\" && (r = parseFloat(r)), !n) {\n if (i === ct) {\n const a = Mi(r, Dt, xc, St, Ht);\n r = qn(a);\n }\n d = Mi(d, Dt, r + Qh, St, Ht);\n }\n return Mi(d, e, t, i, s);\n}, Mi = (d, e, t, i = St, s = Ht) => {\n if (i === ct && (typeof t == \"string\" && (t = parseFloat(t)), t <= 0))\n throw new Error(\"TICK_SIZE cant be used with negative or zero numPrecisionDigits\");\n if (t < 0) {\n const U = Math.pow(10, -t);\n if (e === Dt)\n return (U * Mi(d / U, e, 0, i, s)).toString();\n if (e === Et)\n return (d - d % U).toString();\n }\n if (i === ct) {\n const U = Mi(t, Dt, xc, St, Ht), Y = qn(U);\n let J = d % t;\n J = Number(Mi(J, Dt, 8, St, Ht));\n const ae = Mi(J / t, Dt, Math.max(Y, 8), St, Ht);\n return qn(ae) !== 0 && (e === Dt ? d > 0 ? J >= t / 2 ? d = d - J + t : d = d - J : J >= t / 2 ? d = Number(d) - J : d = Number(d) - J - t : e === Et && (d = d - J)), Mi(d, e, Y, St, s);\n }\n const n = Xa(d), r = n[0] === \"-\", a = r ? 1 : 0, o = n.length;\n for (var c = 0; c < o && n[c] !== \".\"; c++)\n ;\n const u = c < n.length, f = 45, h = 46, l = 48, p = l + 1, m = l + 5, y = l + 9, w = new Uint8Array(o - a + (u ? 0 : 1));\n w[0] = l;\n let S = w.length, b = -1, T = -1;\n for (var x = 1, v = a; v < o; v++, x++) {\n const U = n.charCodeAt(v);\n if (U === h)\n S = x--;\n else {\n if (U < l || U > y)\n throw new Error(`${n}: invalid number (contains an illegal character '${n[x - 1]}')`);\n w[x] = U, U !== l && b < 0 && (b = x);\n }\n }\n b < 0 && (b = 1);\n let _ = i === St ? S : b, V = _ + t;\n T = -1;\n let j = !0, G = r;\n for (let U = w.length - 1, Y = 0; U >= 0; U--) {\n let J = w[U];\n if (U !== 0) {\n if (J += Y, U >= _ + t) {\n const ae = e === Dt && J >= m && !(J === m && Y), A = e === ar && J >= p;\n J = ae || A ? y + 1 : l;\n }\n J > y ? (J = l, Y = 1) : Y = 0;\n } else\n Y && (J = p);\n w[U] = J, J !== l && (j = !1, b = U, T = T < 0 ? U + 1 : T);\n }\n i === or && (_ = b, V = _ + t), j && (G = !1);\n const W = b >= S || j ? S - 1 : b, B = T < S ? S : T, Q = G ? 1 : 0, se = Q + (S - W), $ = Math.max(B - S, 0), te = B - W, E = s === Ht ? te : V - W, N = Math.max(E - te, 0), L = se + 1 + $, z = L + N, K = $ + N === 0, R = new Uint8Array(se + (K ? 0 : 1) + $ + N);\n for (G && (R[0] = f), x = Q, v = W; x < se; x++, v++)\n R[x] = w[v];\n for (K || (R[se] = h), x = se + 1, v = S; x < L; x++, v++)\n R[x] = w[v];\n for (x = L; x < z; x++)\n R[x] = l;\n return String.fromCharCode(...R);\n};\nfunction tl(d) {\n if (!(d === void 0 || d === \"\") && parseFloat(d) !== 0)\n return d;\n}\n/*! scure-base - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nfunction Cs(d) {\n if (!Number.isSafeInteger(d))\n throw new Error(`Wrong integer: ${d}`);\n}\nfunction fi(...d) {\n const e = (s, n) => (r) => s(n(r)), t = Array.from(d).reverse().reduce((s, n) => s ? e(s, n.encode) : n.encode, void 0), i = d.reduce((s, n) => s ? e(s, n.decode) : n.decode, void 0);\n return { encode: t, decode: i };\n}\nfunction hi(d) {\n return {\n encode: (e) => {\n if (!Array.isArray(e) || e.length && typeof e[0] != \"number\")\n throw new Error(\"alphabet.encode input should be an array of numbers\");\n return e.map((t) => {\n if (Cs(t), t < 0 || t >= d.length)\n throw new Error(`Digit index outside alphabet: ${t} (alphabet: ${d.length})`);\n return d[t];\n });\n },\n decode: (e) => {\n if (!Array.isArray(e) || e.length && typeof e[0] != \"string\")\n throw new Error(\"alphabet.decode input should be array of strings\");\n return e.map((t) => {\n if (typeof t != \"string\")\n throw new Error(`alphabet.decode: not string element=${t}`);\n const i = d.indexOf(t);\n if (i === -1)\n throw new Error(`Unknown letter: \"${t}\". Allowed: ${d}`);\n return i;\n });\n }\n };\n}\nfunction li(d = \"\") {\n if (typeof d != \"string\")\n throw new Error(\"join separator should be string\");\n return {\n encode: (e) => {\n if (!Array.isArray(e) || e.length && typeof e[0] != \"string\")\n throw new Error(\"join.encode input should be array of strings\");\n for (let t of e)\n if (typeof t != \"string\")\n throw new Error(`join.encode: non-string input=${t}`);\n return e.join(d);\n },\n decode: (e) => {\n if (typeof e != \"string\")\n throw new Error(\"join.decode input should be string\");\n return e.split(d);\n }\n };\n}\nfunction dr(d, e = \"=\") {\n if (Cs(d), typeof e != \"string\")\n throw new Error(\"padding chr should be string\");\n return {\n encode(t) {\n if (!Array.isArray(t) || t.length && typeof t[0] != \"string\")\n throw new Error(\"padding.encode input should be array of strings\");\n for (let i of t)\n if (typeof i != \"string\")\n throw new Error(`padding.encode: non-string input=${i}`);\n for (; t.length * d % 8; )\n t.push(e);\n return t;\n },\n decode(t) {\n if (!Array.isArray(t) || t.length && typeof t[0] != \"string\")\n throw new Error(\"padding.encode input should be array of strings\");\n for (let s of t)\n if (typeof s != \"string\")\n throw new Error(`padding.decode: non-string input=${s}`);\n let i = t.length;\n if (i * d % 8)\n throw new Error(\"Invalid padding: string should have whole number of bytes\");\n for (; i > 0 && t[i - 1] === e; i--)\n if (!((i - 1) * d % 8))\n throw new Error(\"Invalid padding: string has too much padding\");\n return t.slice(0, i);\n }\n };\n}\nfunction kc(d) {\n if (typeof d != \"function\")\n throw new Error(\"normalize fn should be function\");\n return { encode: (e) => e, decode: (e) => d(e) };\n}\nfunction Yo(d, e, t) {\n if (e < 2)\n throw new Error(`convertRadix: wrong from=${e}, base cannot be less than 2`);\n if (t < 2)\n throw new Error(`convertRadix: wrong to=${t}, base cannot be less than 2`);\n if (!Array.isArray(d))\n throw new Error(\"convertRadix: data should be array\");\n if (!d.length)\n return [];\n let i = 0;\n const s = [], n = Array.from(d);\n for (n.forEach((r) => {\n if (Cs(r), r < 0 || r >= e)\n throw new Error(`Wrong integer: ${r}`);\n }); ; ) {\n let r = 0, a = !0;\n for (let o = i; o < n.length; o++) {\n const c = n[o], u = e * r + c;\n if (!Number.isSafeInteger(u) || e * r / e !== r || u - c !== e * r)\n throw new Error(\"convertRadix: carry overflow\");\n if (r = u % t, n[o] = Math.floor(u / t), !Number.isSafeInteger(n[o]) || n[o] * t + r !== u)\n throw new Error(\"convertRadix: carry overflow\");\n if (a)\n n[o] ? a = !1 : i = o;\n else\n continue;\n }\n if (s.push(r), a)\n break;\n }\n for (let r = 0; r < d.length - 1 && d[r] === 0; r++)\n s.push(0);\n return s.reverse();\n}\nconst Ec = (d, e) => e ? Ec(e, d % e) : d, Gn = (d, e) => d + (e - Ec(d, e));\nfunction ba(d, e, t, i) {\n if (!Array.isArray(d))\n throw new Error(\"convertRadix2: data should be array\");\n if (e <= 0 || e > 32)\n throw new Error(`convertRadix2: wrong from=${e}`);\n if (t <= 0 || t > 32)\n throw new Error(`convertRadix2: wrong to=${t}`);\n if (Gn(e, t) > 32)\n throw new Error(`convertRadix2: carry overflow from=${e} to=${t} carryBits=${Gn(e, t)}`);\n let s = 0, n = 0;\n const r = 2 ** t - 1, a = [];\n for (const o of d) {\n if (Cs(o), o >= 2 ** e)\n throw new Error(`convertRadix2: invalid data word=${o} from=${e}`);\n if (s = s << e | o, n + e > 32)\n throw new Error(`convertRadix2: carry overflow pos=${n} from=${e}`);\n for (n += e; n >= t; n -= t)\n a.push((s >> n - t & r) >>> 0);\n s &= 2 ** n - 1;\n }\n if (s = s << t - n & r, !i && n >= e)\n throw new Error(\"Excess padding\");\n if (!i && s)\n throw new Error(`Non-zero padding: ${s}`);\n return i && n > 0 && a.push(s >>> 0), a;\n}\nfunction il(d) {\n return Cs(d), {\n encode: (e) => {\n if (!(e instanceof Uint8Array))\n throw new Error(\"radix.encode input should be Uint8Array\");\n return Yo(Array.from(e), 2 ** 8, d);\n },\n decode: (e) => {\n if (!Array.isArray(e) || e.length && typeof e[0] != \"number\")\n throw new Error(\"radix.decode input should be array of strings\");\n return Uint8Array.from(Yo(e, d, 2 ** 8));\n }\n };\n}\nfunction Di(d, e = !1) {\n if (Cs(d), d <= 0 || d > 32)\n throw new Error(\"radix2: bits should be in (0..32]\");\n if (Gn(8, d) > 32 || Gn(d, 8) > 32)\n throw new Error(\"radix2: carry overflow\");\n return {\n encode: (t) => {\n if (!(t instanceof Uint8Array))\n throw new Error(\"radix2.encode input should be Uint8Array\");\n return ba(Array.from(t), 8, d, !e);\n },\n decode: (t) => {\n if (!Array.isArray(t) || t.length && typeof t[0] != \"number\")\n throw new Error(\"radix2.decode input should be array of strings\");\n return Uint8Array.from(ba(t, d, 8, e));\n }\n };\n}\nfunction Ko(d) {\n if (typeof d != \"function\")\n throw new Error(\"unsafeWrapper fn should be function\");\n return function(...e) {\n try {\n return d.apply(null, e);\n } catch {\n }\n };\n}\nconst Ri = fi(Di(4), hi(\"0123456789abcdef\"), li(\"\")), Nc = fi(Di(5), hi(\"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567\"), dr(5), li(\"\"));\nfi(Di(5), hi(\"0123456789ABCDEFGHIJKLMNOPQRSTUV\"), dr(5), li(\"\"));\nfi(Di(5), hi(\"0123456789ABCDEFGHJKMNPQRSTVWXYZ\"), li(\"\"), kc((d) => d.toUpperCase().replace(/O/g, \"0\").replace(/[IL]/g, \"1\")));\nconst pi = fi(Di(6), hi(\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\"), dr(6), li(\"\")), sl = fi(Di(6), hi(\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_\"), dr(6), li(\"\")), $a = (d) => fi(il(58), hi(d), li(\"\")), ms = $a(\"123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz\");\n$a(\"123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ\");\n$a(\"rpshnaf39wBUDNEGHJKLM4PQRST7VWXYZ2bcdeCg65jkm8oFqi1tuvAxyz\");\nconst Xo = [0, 2, 3, 5, 6, 7, 9, 10, 11], nl = {\n encode(d) {\n let e = \"\";\n for (let t = 0; t < d.length; t += 8) {\n const i = d.subarray(t, t + 8);\n e += ms.encode(i).padStart(Xo[i.length], \"1\");\n }\n return e;\n },\n decode(d) {\n let e = [];\n for (let t = 0; t < d.length; t += 11) {\n const i = d.slice(t, t + 11), s = Xo.indexOf(i.length), n = ms.decode(i);\n for (let r = 0; r < n.length - s; r++)\n if (n[r] !== 0)\n throw new Error(\"base58xmr: wrong padding\");\n e = e.concat(Array.from(n.slice(n.length - s)));\n }\n return Uint8Array.from(e);\n }\n}, Sa = fi(hi(\"qpzry9x8gf2tvdw0s3jn54khce6mua7l\"), li(\"\")), $o = [996825010, 642813549, 513874426, 1027748829, 705979059];\nfunction Ls(d) {\n const e = d >> 25;\n let t = (d & 33554431) << 5;\n for (let i = 0; i < $o.length; i++)\n (e >> i & 1) === 1 && (t ^= $o[i]);\n return t;\n}\nfunction Zo(d, e, t = 1) {\n const i = d.length;\n let s = 1;\n for (let n = 0; n < i; n++) {\n const r = d.charCodeAt(n);\n if (r < 33 || r > 126)\n throw new Error(`Invalid prefix (${d})`);\n s = Ls(s) ^ r >> 5;\n }\n s = Ls(s);\n for (let n = 0; n < i; n++)\n s = Ls(s) ^ d.charCodeAt(n) & 31;\n for (let n of e)\n s = Ls(s) ^ n;\n for (let n = 0; n < 6; n++)\n s = Ls(s);\n return s ^= t, Sa.encode(ba([s % 2 ** 30], 30, 5, !1));\n}\nfunction Pc(d) {\n const e = d === \"bech32\" ? 1 : 734539939, t = Di(5), i = t.decode, s = t.encode, n = Ko(i);\n function r(u, f, h = 90) {\n if (typeof u != \"string\")\n throw new Error(`bech32.encode prefix should be string, not ${typeof u}`);\n if (!Array.isArray(f) || f.length && typeof f[0] != \"number\")\n throw new Error(`bech32.encode words should be array of numbers, not ${typeof f}`);\n const l = u.length + 7 + f.length;\n if (h !== !1 && l > h)\n throw new TypeError(`Length ${l} exceeds limit ${h}`);\n return u = u.toLowerCase(), `${u}1${Sa.encode(f)}${Zo(u, f, e)}`;\n }\n function a(u, f = 90) {\n if (typeof u != \"string\")\n throw new Error(`bech32.decode input should be string, not ${typeof u}`);\n if (u.length < 8 || f !== !1 && u.length > f)\n throw new TypeError(`Wrong string length: ${u.length} (${u}). Expected (8..${f})`);\n const h = u.toLowerCase();\n if (u !== h && u !== u.toUpperCase())\n throw new Error(\"String must be lowercase or uppercase\");\n u = h;\n const l = u.lastIndexOf(\"1\");\n if (l === 0 || l === -1)\n throw new Error('Letter \"1\" must be present between prefix and data only');\n const p = u.slice(0, l), m = u.slice(l + 1);\n if (m.length < 6)\n throw new Error(\"Data must be at least 6 characters long\");\n const y = Sa.decode(m).slice(0, -6), w = Zo(p, y, e);\n if (!m.endsWith(w))\n throw new Error(`Invalid checksum in ${u}: expected \"${w}\"`);\n return { prefix: p, words: y };\n }\n const o = Ko(a);\n function c(u) {\n const { prefix: f, words: h } = a(u, !1);\n return { prefix: f, words: h, bytes: i(h) };\n }\n return { encode: r, decode: a, decodeToBytes: c, decodeUnsafe: o, fromWords: i, fromWordsUnsafe: n, toWords: s };\n}\nPc(\"bech32\");\nPc(\"bech32m\");\nconst ai = {\n encode: (d) => new TextDecoder().decode(d),\n decode: (d) => new TextEncoder().encode(d)\n}, rl = fi(Di(4), hi(\"0123456789abcdef\"), li(\"\"), kc((d) => {\n if (typeof d != \"string\" || d.length % 2)\n throw new TypeError(`hex.decode: expected string, got ${typeof d} with length ${d.length}`);\n return d.toLowerCase();\n})), al = {\n utf8: ai,\n hex: rl,\n base16: Ri,\n base32: Nc,\n base64: pi,\n base64url: sl,\n base58: ms,\n base58xmr: nl\n};\n`${Object.keys(al).join(\", \")}`;\n/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nconst ol = BigInt(0), Za = BigInt(1), dl = BigInt(2), cr = (d) => d instanceof Uint8Array, cl = Array.from({ length: 256 }, (d, e) => e.toString(16).padStart(2, \"0\"));\nfunction ki(d) {\n if (!cr(d))\n throw new Error(\"Uint8Array expected\");\n let e = \"\";\n for (let t = 0; t < d.length; t++)\n e += cl[d[t]];\n return e;\n}\nfunction _c(d) {\n const e = d.toString(16);\n return e.length & 1 ? `0${e}` : e;\n}\nfunction Qa(d) {\n if (typeof d != \"string\")\n throw new Error(\"hex string expected, got \" + typeof d);\n return BigInt(d === \"\" ? \"0\" : `0x${d}`);\n}\nfunction ys(d) {\n if (typeof d != \"string\")\n throw new Error(\"hex string expected, got \" + typeof d);\n if (d.length % 2)\n throw new Error(\"hex string is invalid: unpadded \" + d.length);\n const e = new Uint8Array(d.length / 2);\n for (let t = 0; t < e.length; t++) {\n const i = t * 2, s = d.slice(i, i + 2), n = Number.parseInt(s, 16);\n if (Number.isNaN(n) || n < 0)\n throw new Error(\"invalid byte sequence\");\n e[t] = n;\n }\n return e;\n}\nfunction wt(d) {\n return Qa(ki(d));\n}\nfunction Wt(d) {\n if (!cr(d))\n throw new Error(\"Uint8Array expected\");\n return Qa(ki(Uint8Array.from(d).reverse()));\n}\nconst ni = (d, e) => ys(d.toString(16).padStart(e * 2, \"0\")), Kt = (d, e) => ni(d, e).reverse(), ul = (d) => ys(_c(d));\nfunction Ne(d, e, t) {\n let i;\n if (typeof e == \"string\")\n try {\n i = ys(e);\n } catch (n) {\n throw new Error(`${d} must be valid hex string, got \"${e}\". Cause: ${n}`);\n }\n else if (cr(e))\n i = Uint8Array.from(e);\n else\n throw new Error(`${d} must be hex string or Uint8Array`);\n const s = i.length;\n if (typeof t == \"number\" && s !== t)\n throw new Error(`${d} expected ${t} bytes, got ${s}`);\n return i;\n}\nfunction ot(...d) {\n const e = new Uint8Array(d.reduce((i, s) => i + s.length, 0));\n let t = 0;\n return d.forEach((i) => {\n if (!cr(i))\n throw new Error(\"Uint8Array expected\");\n e.set(i, t), t += i.length;\n }), e;\n}\nfunction Lc(d, e) {\n if (d.length !== e.length)\n return !1;\n for (let t = 0; t < d.length; t++)\n if (d[t] !== e[t])\n return !1;\n return !0;\n}\nfunction ur(d) {\n if (typeof d != \"string\")\n throw new Error(`utf8ToBytes expected string, got ${typeof d}`);\n return new TextEncoder().encode(d);\n}\nfunction fl(d) {\n let e;\n for (e = 0; d > 0n; d >>= Za, e += 1)\n ;\n return e;\n}\nconst hl = (d, e) => d >> BigInt(e) & 1n, ll = (d, e, t) => d | (t ? Za : ol) << BigInt(e), Ja = (d) => (dl << BigInt(d - 1)) - Za, Br = (d) => new Uint8Array(d), Qo = (d) => Uint8Array.from(d);\nfunction Dc(d, e, t) {\n if (typeof d != \"number\" || d < 2)\n throw new Error(\"hashLen must be a number\");\n if (typeof e != \"number\" || e < 2)\n throw new Error(\"qByteLen must be a number\");\n if (typeof t != \"function\")\n throw new Error(\"hmacFn must be a function\");\n let i = Br(d), s = Br(d), n = 0;\n const r = () => {\n i.fill(1), s.fill(0), n = 0;\n }, a = (...f) => t(s, i, ...f), o = (f = Br()) => {\n s = a(Qo([0]), f), i = a(), f.length !== 0 && (s = a(Qo([1]), f), i = a());\n }, c = () => {\n if (n++ >= 1e3)\n throw new Error(\"drbg: tried 1000 values\");\n let f = 0;\n const h = [];\n for (; f < e; ) {\n i = a();\n const l = i.slice();\n h.push(l), f += i.length;\n }\n return ot(...h);\n };\n return (f, h) => {\n r(), o(f);\n let l;\n for (; !(l = h(c())); )\n o();\n return r(), l;\n };\n}\nconst pl = {\n bigint: (d) => typeof d == \"bigint\",\n function: (d) => typeof d == \"function\",\n boolean: (d) => typeof d == \"boolean\",\n string: (d) => typeof d == \"string\",\n isSafeInteger: (d) => Number.isSafeInteger(d),\n array: (d) => Array.isArray(d),\n field: (d, e) => e.Fp.isValid(d),\n hash: (d) => typeof d == \"function\" && Number.isSafeInteger(d.outputLen)\n};\nfunction Bi(d, e, t = {}) {\n const i = (s, n, r) => {\n const a = pl[n];\n if (typeof a != \"function\")\n throw new Error(`Invalid validator \"${n}\", expected function`);\n const o = d[s];\n if (!(r && o === void 0) && !a(o, d))\n throw new Error(`Invalid param ${String(s)}=${o} (${typeof o}), expected ${n}`);\n };\n for (const [s, n] of Object.entries(e))\n i(s, n, !1);\n for (const [s, n] of Object.entries(t))\n i(s, n, !0);\n return d;\n}\nconst gl = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({\n __proto__: null,\n bitGet: hl,\n bitLen: fl,\n bitMask: Ja,\n bitSet: ll,\n bytesToHex: ki,\n bytesToNumberBE: wt,\n bytesToNumberLE: Wt,\n concatBytes: ot,\n createHmacDrbg: Dc,\n ensureBytes: Ne,\n equalBytes: Lc,\n hexToBytes: ys,\n hexToNumber: Qa,\n numberToBytesBE: ni,\n numberToBytesLE: Kt,\n numberToHexUnpadded: _c,\n numberToVarBytesBE: ul,\n utf8ToBytes: ur,\n validateObject: Bi\n}, Symbol.toStringTag, { value: \"Module\" }));\nfunction ml(d, e) {\n if (e && e.multiple && !Array.isArray(d))\n throw new Error(\"Invalid argument type: Expected an Array to serialize multiple values.\");\n const t = 4294967296;\n let i, s, n = new Uint8Array(128), r = 0;\n if (e && e.multiple)\n for (let b = 0; b < d.length; b++)\n a(d[b]);\n else\n a(d);\n return n.subarray(0, r);\n function a(b, T) {\n switch (typeof b) {\n case \"undefined\":\n o();\n break;\n case \"boolean\":\n c(b);\n break;\n case \"number\":\n u(b);\n break;\n case \"string\":\n f(b);\n break;\n case \"object\":\n b === null ? o() : b instanceof Date ? m(b) : Array.isArray(b) ? h(b) : b instanceof Uint8Array || b instanceof Uint8ClampedArray ? l(b) : b instanceof Int8Array || b instanceof Int16Array || b instanceof Uint16Array || b instanceof Int32Array || b instanceof Uint32Array || b instanceof Float32Array || b instanceof Float64Array ? h(b) : p(b);\n break;\n default:\n if (!T && e && e.invalidTypeReplacement)\n typeof e.invalidTypeReplacement == \"function\" ? a(e.invalidTypeReplacement(b), !0) : a(e.invalidTypeReplacement, !0);\n else\n throw new Error(\"Invalid argument type: The type '\" + typeof b + \"' cannot be serialized.\");\n }\n }\n function o(b) {\n y(192);\n }\n function c(b) {\n y(b ? 195 : 194);\n }\n function u(b) {\n if (isFinite(b) && Math.floor(b) === b)\n if (b >= 0 && b <= 127)\n y(b);\n else if (b < 0 && b >= -32)\n y(b);\n else if (b > 0 && b <= 255)\n w([204, b]);\n else if (b >= -128 && b <= 127)\n w([208, b]);\n else if (b > 0 && b <= 65535)\n w([205, b >>> 8, b]);\n else if (b >= -32768 && b <= 32767)\n w([209, b >>> 8, b]);\n else if (b > 0 && b <= 4294967295)\n w([206, b >>> 24, b >>> 16, b >>> 8, b]);\n else if (b >= -2147483648 && b <= 2147483647)\n w([210, b >>> 24, b >>> 16, b >>> 8, b]);\n else if (b > 0 && b <= 18446744073709552e3) {\n let T = b / t, x = b % t;\n w([207, T >>> 24, T >>> 16, T >>> 8, T, x >>> 24, x >>> 16, x >>> 8, x]);\n } else\n b >= -9223372036854776e3 && b <= 9223372036854776e3 ? (y(211), S(b)) : b < 0 ? w([211, 128, 0, 0, 0, 0, 0, 0, 0]) : w([207, 255, 255, 255, 255, 255, 255, 255, 255]);\n else\n s || (i = new ArrayBuffer(8), s = new DataView(i)), s.setFloat64(0, b), y(203), w(new Uint8Array(i));\n }\n function f(b) {\n let T = yl(b), x = T.length;\n x <= 31 ? y(160 + x) : x <= 255 ? w([217, x]) : x <= 65535 ? w([218, x >>> 8, x]) : w([219, x >>> 24, x >>> 16, x >>> 8, x]), w(T);\n }\n function h(b) {\n let T = b.length;\n T <= 15 ? y(144 + T) : T <= 65535 ? w([220, T >>> 8, T]) : w([221, T >>> 24, T >>> 16, T >>> 8, T]);\n for (let x = 0; x < T; x++)\n a(b[x]);\n }\n function l(b) {\n let T = b.length;\n T <= 15 ? w([196, T]) : T <= 65535 ? w([197, T >>> 8, T]) : w([198, T >>> 24, T >>> 16, T >>> 8, T]), w(b);\n }\n function p(b) {\n let T = 0;\n for (let x in b)\n b[x] !== void 0 && T++;\n T <= 15 ? y(128 + T) : T <= 65535 ? w([222, T >>> 8, T]) : w([223, T >>> 24, T >>> 16, T >>> 8, T]);\n for (let x in b) {\n let v = b[x];\n v !== void 0 && (a(x), a(v));\n }\n }\n function m(b) {\n let T = b.getTime() / 1e3;\n if (b.getMilliseconds() === 0 && T >= 0 && T < 4294967296)\n w([214, 255, T >>> 24, T >>> 16, T >>> 8, T]);\n else if (T >= 0 && T < 17179869184) {\n let x = b.getMilliseconds() * 1e6;\n w([215, 255, x >>> 22, x >>> 14, x >>> 6, x << 2 >>> 0 | T / t, T >>> 24, T >>> 16, T >>> 8, T]);\n } else {\n let x = b.getMilliseconds() * 1e6;\n w([199, 12, 255, x >>> 24, x >>> 16, x >>> 8, x]), S(T);\n }\n }\n function y(b) {\n if (n.length < r + 1) {\n let T = n.length * 2;\n for (; T < r + 1; )\n T *= 2;\n let x = new Uint8Array(T);\n x.set(n), n = x;\n }\n n[r] = b, r++;\n }\n function w(b) {\n if (n.length < r + b.length) {\n let T = n.length * 2;\n for (; T < r + b.length; )\n T *= 2;\n let x = new Uint8Array(T);\n x.set(n), n = x;\n }\n n.set(b, r), r += b.length;\n }\n function S(b) {\n let T, x;\n b >= 0 ? (T = b / t, x = b % t) : (b++, T = Math.abs(b) / t, x = Math.abs(b) % t, T = ~T, x = ~x), w([T >>> 24, T >>> 16, T >>> 8, T, x >>> 24, x >>> 16, x >>> 8, x]);\n }\n}\nfunction yl(d) {\n let e = !0, t = d.length;\n for (let n = 0; n < t; n++)\n if (d.charCodeAt(n) > 127) {\n e = !1;\n break;\n }\n let i = 0, s = new Uint8Array(d.length * (e ? 1 : 4));\n for (let n = 0; n !== t; n++) {\n let r = d.charCodeAt(n);\n if (r < 128) {\n s[i++] = r;\n continue;\n }\n if (r < 2048)\n s[i++] = r >> 6 | 192;\n else {\n if (r > 55295 && r < 56320) {\n if (++n >= t)\n throw new Error(\"UTF-8 encode: incomplete surrogate pair\");\n let a = d.charCodeAt(n);\n if (a < 56320 || a > 57343)\n throw new Error(\"UTF-8 encode: second surrogate character 0x\" + a.toString(16) + \" at index \" + n + \" out of range\");\n r = 65536 + ((r & 1023) << 10) + (a & 1023), s[i++] = r >> 18 | 240, s[i++] = r >> 12 & 63 | 128;\n } else\n s[i++] = r >> 12 | 224;\n s[i++] = r >> 6 & 63 | 128;\n }\n s[i++] = r & 63 | 128;\n }\n return e ? s : s.subarray(0, i);\n}\nvar Vr = Object.prototype.hasOwnProperty, as = Array.isArray, Ut = function() {\n for (var d = [], e = 0; e < 256; ++e)\n d.push(\"%\" + ((e < 16 ? \"0\" : \"\") + e.toString(16)).toUpperCase());\n return d;\n}(), wl = function(e) {\n for (; e.length > 1; ) {\n var t = e.pop(), i = t.obj[t.prop];\n if (as(i)) {\n for (var s = [], n = 0; n < i.length; ++n)\n typeof i[n] < \"u\" && s.push(i[n]);\n t.obj[t.prop] = s;\n }\n }\n}, Rc = function(e, t) {\n for (var i = t && t.plainObjects ? /* @__PURE__ */ Object.create(null) : {}, s = 0; s < e.length; ++s)\n typeof e[s] < \"u\" && (i[s] = e[s]);\n return i;\n}, bl = function d(e, t, i) {\n if (!t)\n return e;\n if (typeof t != \"object\") {\n if (as(e))\n e.push(t);\n else if (e && typeof e == \"object\")\n (i && (i.plainObjects || i.allowPrototypes) || !Vr.call(Object.prototype, t)) && (e[t] = !0);\n else\n return [e, t];\n return e;\n }\n if (!e || typeof e != \"object\")\n return [e].concat(t);\n var s = e;\n return as(e) && !as(t) && (s = Rc(e, i)), as(e) && as(t) ? (t.forEach(function(n, r) {\n if (Vr.call(e, r)) {\n var a = e[r];\n a && typeof a == \"object\" && n && typeof n == \"object\" ? e[r] = d(a, n, i) : e.push(n);\n } else\n e[r] = n;\n }), e) : Object.keys(t).reduce(function(n, r) {\n var a = t[r];\n return Vr.call(n, r) ? n[r] = d(n[r], a, i) : n[r] = a, n;\n }, s);\n}, Sl = function(e, t) {\n return Object.keys(t).reduce(function(i, s) {\n return i[s] = t[s], i;\n }, e);\n}, Tl = function(d, e, t) {\n var i = d.replace(/\\+/g, \" \");\n if (t === \"iso-8859-1\")\n return i.replace(/%[0-9a-f]{2}/gi, unescape);\n try {\n return decodeURIComponent(i);\n } catch {\n return i;\n }\n}, Al = function(e, t, i) {\n if (e.length === 0)\n return e;\n var s = typeof e == \"string\" ? e : String(e);\n if (i === \"iso-8859-1\")\n return escape(s).replace(/%u[0-9a-f]{4}/gi, function(o) {\n return \"%26%23\" + parseInt(o.slice(2), 16) + \"%3B\";\n });\n for (var n = \"\", r = 0; r < s.length; ++r) {\n var a = s.charCodeAt(r);\n if (a === 45 || a === 46 || a === 95 || a === 126 || a >= 48 && a <= 57 || a >= 65 && a <= 90 || a >= 97 && a <= 122) {\n n += s.charAt(r);\n continue;\n }\n if (a < 128) {\n n = n + Ut[a];\n continue;\n }\n if (a < 2048) {\n n = n + (Ut[192 | a >> 6] + Ut[128 | a & 63]);\n continue;\n }\n if (a < 55296 || a >= 57344) {\n n = n + (Ut[224 | a >> 12] + Ut[128 | a >> 6 & 63] + Ut[128 | a & 63]);\n continue;\n }\n r += 1, a = 65536 + ((a & 1023) << 10 | s.charCodeAt(r) & 1023), n += Ut[240 | a >> 18] + Ut[128 | a >> 12 & 63] + Ut[128 | a >> 6 & 63] + Ut[128 | a & 63];\n }\n return n;\n}, Il = function(e) {\n for (var t = [{ obj: { o: e }, prop: \"o\" }], i = [], s = 0; s < t.length; ++s)\n for (var n = t[s], r = n.obj[n.prop], a = Object.keys(r), o = 0; o < a.length; ++o) {\n var c = a[o], u = r[c];\n typeof u == \"object\" && u !== null && i.indexOf(u) === -1 && (t.push({ obj: r, prop: c }), i.push(u));\n }\n return wl(t), e;\n}, Ol = function(e) {\n return Object.prototype.toString.call(e) === \"[object RegExp]\";\n}, Ml = function(e) {\n return !e || typeof e != \"object\" ? !1 : !!(e.constructor && e.constructor.isBuffer && e.constructor.isBuffer(e));\n}, Cl = function(e, t) {\n return [].concat(e, t);\n}, Bc = {\n arrayToObject: Rc,\n assign: Sl,\n combine: Cl,\n compact: Il,\n decode: Tl,\n encode: Al,\n isBuffer: Ml,\n isRegExp: Ol,\n merge: bl\n}, xl = String.prototype.replace, vl = /%20/g, Vc = {\n default: \"RFC3986\",\n formatters: {\n RFC1738: function(d) {\n return xl.call(d, vl, \"+\");\n },\n RFC3986: function(d) {\n return d;\n }\n },\n RFC1738: \"RFC1738\",\n RFC3986: \"RFC3986\"\n}, jc = Bc, zs = Vc, kl = Object.prototype.hasOwnProperty, Jo = {\n brackets: function(e) {\n return e + \"[]\";\n },\n comma: \"comma\",\n indices: function(e, t) {\n return e + \"[\" + t + \"]\";\n },\n repeat: function(e) {\n return e;\n }\n}, fs = Array.isArray, El = Array.prototype.push, Ta = function(d, e) {\n El.apply(d, fs(e) ? e : [e]);\n}, Nl = Date.prototype.toISOString, lt = {\n addQueryPrefix: !1,\n allowDots: !1,\n charset: \"utf-8\",\n charsetSentinel: !1,\n delimiter: \"&\",\n encode: !0,\n encoder: jc.encode,\n encodeValuesOnly: !1,\n formatter: zs.formatters[zs.default],\n // deprecated\n indices: !1,\n serializeDate: function(e) {\n return Nl.call(e);\n },\n skipNulls: !1,\n strictNullHandling: !1\n}, Pl = function d(e, t, i, s, n, r, a, o, c, u, f, h, l) {\n var p = e;\n if (typeof a == \"function\" ? p = a(t, p) : p instanceof Date ? p = u(p) : i === \"comma\" && fs(p) && (p = p.join(\",\")), p === null) {\n if (s)\n return r && !h ? r(t, lt.encoder, l) : t;\n p = \"\";\n }\n if (typeof p == \"string\" || typeof p == \"number\" || typeof p == \"boolean\" || jc.isBuffer(p)) {\n if (r) {\n var m = h ? t : r(t, lt.encoder, l);\n return [f(m) + \"=\" + f(r(p, lt.encoder, l))];\n }\n return [f(t) + \"=\" + f(String(p))];\n }\n var y = [];\n if (typeof p > \"u\")\n return y;\n var w;\n if (fs(a))\n w = a;\n else {\n var S = Object.keys(p);\n w = o ? S.sort(o) : S;\n }\n for (var b = 0; b < w.length; ++b) {\n var T = w[b];\n n && p[T] === null || (fs(p) ? Ta(y, d(p[T], typeof i == \"function\" ? i(t, T) : t, i, s, n, r, a, o, c, u, f, h, l)) : Ta(y, d(p[T], t + (c ? \".\" + T : \"[\" + T + \"]\"), i, s, n, r, a, o, c, u, f, h, l)));\n }\n return y;\n}, _l = function(e) {\n if (!e)\n return lt;\n if (e.encoder !== null && e.encoder !== void 0 && typeof e.encoder != \"function\")\n throw new TypeError(\"Encoder has to be a function.\");\n var t = e.charset || lt.charset;\n if (typeof e.charset < \"u\" && e.charset !== \"utf-8\" && e.charset !== \"iso-8859-1\")\n throw new TypeError(\"The charset option must be either utf-8, iso-8859-1, or undefined\");\n var i = zs.default;\n if (typeof e.format < \"u\") {\n if (!kl.call(zs.formatters, e.format))\n throw new TypeError(\"Unknown format option provided.\");\n i = e.format;\n }\n var s = zs.formatters[i], n = lt.filter;\n return (typeof e.filter == \"function\" || fs(e.filter)) && (n = e.filter), {\n addQueryPrefix: typeof e.addQueryPrefix == \"boolean\" ? e.addQueryPrefix : lt.addQueryPrefix,\n allowDots: typeof e.allowDots > \"u\" ? lt.allowDots : !!e.allowDots,\n charset: t,\n charsetSentinel: typeof e.charsetSentinel == \"boolean\" ? e.charsetSentinel : lt.charsetSentinel,\n delimiter: typeof e.delimiter > \"u\" ? lt.delimiter : e.delimiter,\n encode: typeof e.encode == \"boolean\" ? e.encode : lt.encode,\n encoder: typeof e.encoder == \"function\" ? e.encoder : lt.encoder,\n encodeValuesOnly: typeof e.encodeValuesOnly == \"boolean\" ? e.encodeValuesOnly : lt.encodeValuesOnly,\n filter: n,\n formatter: s,\n serializeDate: typeof e.serializeDate == \"function\" ? e.serializeDate : lt.serializeDate,\n skipNulls: typeof e.skipNulls == \"boolean\" ? e.skipNulls : lt.skipNulls,\n sort: typeof e.sort == \"function\" ? e.sort : null,\n strictNullHandling: typeof e.strictNullHandling == \"boolean\" ? e.strictNullHandling : lt.strictNullHandling\n };\n}, Ll = function(d, e) {\n var t = d, i = _l(e), s, n;\n typeof i.filter == \"function\" ? (n = i.filter, t = n(\"\", t)) : fs(i.filter) && (n = i.filter, s = n);\n var r = [];\n if (typeof t != \"object\" || t === null)\n return \"\";\n var a;\n e && e.arrayFormat in Jo ? a = e.arrayFormat : e && \"indices\" in e ? a = e.indices ? \"indices\" : \"repeat\" : a = \"indices\";\n var o = Jo[a];\n s || (s = Object.keys(t)), i.sort && s.sort(i.sort);\n for (var c = 0; c < s.length; ++c) {\n var u = s[c];\n i.skipNulls && t[u] === null || Ta(r, Pl(t[u], u, o, i.strictNullHandling, i.skipNulls, i.encode ? i.encoder : null, i.filter, i.sort, i.allowDots, i.serializeDate, i.formatter, i.encodeValuesOnly, i.charset));\n }\n var f = r.join(i.delimiter), h = i.addQueryPrefix === !0 ? \"?\" : \"\";\n return i.charsetSentinel && (i.charset === \"iso-8859-1\" ? h += \"utf8=%26%2310003%3B&\" : h += \"utf8=%E2%9C%93&\"), f.length > 0 ? h + f : \"\";\n}, Ws = Bc, Aa = Object.prototype.hasOwnProperty, rt = {\n allowDots: !1,\n allowPrototypes: !1,\n arrayLimit: 20,\n charset: \"utf-8\",\n charsetSentinel: !1,\n comma: !1,\n decoder: Ws.decode,\n delimiter: \"&\",\n depth: 5,\n ignoreQueryPrefix: !1,\n interpretNumericEntities: !1,\n parameterLimit: 1e3,\n parseArrays: !0,\n plainObjects: !1,\n strictNullHandling: !1\n}, Dl = function(d) {\n return d.replace(/&#(\\d+);/g, function(e, t) {\n return String.fromCharCode(parseInt(t, 10));\n });\n}, Rl = \"utf8=%26%2310003%3B\", Bl = \"utf8=%E2%9C%93\", Vl = function(e, t) {\n var i = {}, s = t.ignoreQueryPrefix ? e.replace(/^\\?/, \"\") : e, n = t.parameterLimit === 1 / 0 ? void 0 : t.parameterLimit, r = s.split(t.delimiter, n), a = -1, o, c = t.charset;\n if (t.charsetSentinel)\n for (o = 0; o < r.length; ++o)\n r[o].indexOf(\"utf8=\") === 0 && (r[o] === Bl ? c = \"utf-8\" : r[o] === Rl && (c = \"iso-8859-1\"), a = o, o = r.length);\n for (o = 0; o < r.length; ++o)\n if (o !== a) {\n var u = r[o], f = u.indexOf(\"]=\"), h = f === -1 ? u.indexOf(\"=\") : f + 1, l, p;\n h === -1 ? (l = t.decoder(u, rt.decoder, c), p = t.strictNullHandling ? null : \"\") : (l = t.decoder(u.slice(0, h), rt.decoder, c), p = t.decoder(u.slice(h + 1), rt.decoder, c)), p && t.interpretNumericEntities && c === \"iso-8859-1\" && (p = Dl(p)), p && t.comma && p.indexOf(\",\") > -1 && (p = p.split(\",\")), Aa.call(i, l) ? i[l] = Ws.combine(i[l], p) : i[l] = p;\n }\n return i;\n}, jl = function(d, e, t) {\n for (var i = e, s = d.length - 1; s >= 0; --s) {\n var n, r = d[s];\n if (r === \"[]\" && t.parseArrays)\n n = [].concat(i);\n else {\n n = t.plainObjects ? /* @__PURE__ */ Object.create(null) : {};\n var a = r.charAt(0) === \"[\" && r.charAt(r.length - 1) === \"]\" ? r.slice(1, -1) : r, o = parseInt(a, 10);\n !t.parseArrays && a === \"\" ? n = { 0: i } : !isNaN(o) && r !== a && String(o) === a && o >= 0 && t.parseArrays && o <= t.arrayLimit ? (n = [], n[o] = i) : n[a] = i;\n }\n i = n;\n }\n return i;\n}, Fl = function(e, t, i) {\n if (e) {\n var s = i.allowDots ? e.replace(/\\.([^.[]+)/g, \"[$1]\") : e, n = /(\\[[^[\\]]*])/, r = /(\\[[^[\\]]*])/g, a = n.exec(s), o = a ? s.slice(0, a.index) : s, c = [];\n if (o) {\n if (!i.plainObjects && Aa.call(Object.prototype, o) && !i.allowPrototypes)\n return;\n c.push(o);\n }\n for (var u = 0; (a = r.exec(s)) !== null && u < i.depth; ) {\n if (u += 1, !i.plainObjects && Aa.call(Object.prototype, a[1].slice(1, -1)) && !i.allowPrototypes)\n return;\n c.push(a[1]);\n }\n return a && c.push(\"[\" + s.slice(a.index) + \"]\"), jl(c, t, i);\n }\n}, Ul = function(e) {\n if (!e)\n return rt;\n if (e.decoder !== null && e.decoder !== void 0 && typeof e.decoder != \"function\")\n throw new TypeError(\"Decoder has to be a function.\");\n if (typeof e.charset < \"u\" && e.charset !== \"utf-8\" && e.charset !== \"iso-8859-1\")\n throw new Error(\"The charset option must be either utf-8, iso-8859-1, or undefined\");\n var t = typeof e.charset > \"u\" ? rt.charset : e.charset;\n return {\n allowDots: typeof e.allowDots > \"u\" ? rt.allowDots : !!e.allowDots,\n allowPrototypes: typeof e.allowPrototypes == \"boolean\" ? e.allowPrototypes : rt.allowPrototypes,\n arrayLimit: typeof e.arrayLimit == \"number\" ? e.arrayLimit : rt.arrayLimit,\n charset: t,\n charsetSentinel: typeof e.charsetSentinel == \"boolean\" ? e.charsetSentinel : rt.charsetSentinel,\n comma: typeof e.comma == \"boolean\" ? e.comma : rt.comma,\n decoder: typeof e.decoder == \"function\" ? e.decoder : rt.decoder,\n delimiter: typeof e.delimiter == \"string\" || Ws.isRegExp(e.delimiter) ? e.delimiter : rt.delimiter,\n depth: typeof e.depth == \"number\" ? e.depth : rt.depth,\n ignoreQueryPrefix: e.ignoreQueryPrefix === !0,\n interpretNumericEntities: typeof e.interpretNumericEntities == \"boolean\" ? e.interpretNumericEntities : rt.interpretNumericEntities,\n parameterLimit: typeof e.parameterLimit == \"number\" ? e.parameterLimit : rt.parameterLimit,\n parseArrays: e.parseArrays !== !1,\n plainObjects: typeof e.plainObjects == \"boolean\" ? e.plainObjects : rt.plainObjects,\n strictNullHandling: typeof e.strictNullHandling == \"boolean\" ? e.strictNullHandling : rt.strictNullHandling\n };\n}, ql = function(d, e) {\n var t = Ul(e);\n if (d === \"\" || d === null || typeof d > \"u\")\n return t.plainObjects ? /* @__PURE__ */ Object.create(null) : {};\n for (var i = typeof d == \"string\" ? Vl(d, t) : d, s = t.plainObjects ? /* @__PURE__ */ Object.create(null) : {}, n = Object.keys(i), r = 0; r < n.length; ++r) {\n var a = n[r], o = Fl(a, i[a], t);\n s = Ws.merge(s, o, t);\n }\n return Ws.compact(s);\n}, Gl = Ll, zl = ql, Hl = Vc, fr = {\n formats: Hl,\n parse: zl,\n stringify: Gl\n};\nconst Wl = (d, e = void 0) => JSON.stringify(d), Yl = (d) => typeof d == \"string\" && d.length >= 2 && (d[0] === \"{\" || d[0] === \"[\"), Kl = ai.encode, Xl = ai.decode, Fc = (d) => pi.encode(ai.decode(d)), $l = (d) => ai.encode(pi.decode(d)), Uc = pi.decode, qc = pi.encode, Gc = Ri.decode, Zl = Ri.encode, Ql = ms.decode, Jl = ms.encode, ep = ot, tp = (d) => ot(...d), ip = (d) => fr.stringify(d), sp = (d) => fr.stringify(d), np = (d) => fr.stringify(d, { arrayFormat: \"repeat\" }), rp = (d) => fr.stringify(d, { encode: !1 }), ap = ai.decode, op = ai.encode, os = (d) => (typeof d == \"string\" ? Fc(d) : qc(d)).replace(/[=]+$/, \"\").replace(/\\+/g, \"-\").replace(/\\//g, \"_\"), dp = (d, e) => Kt(BigInt(d), e), cp = (d, e) => ni(BigInt(d), e);\nfunction up(d) {\n return ml(d);\n}\nfunction Ia(d) {\n if (!Number.isSafeInteger(d) || d < 0)\n throw new Error(`Wrong positive integer: ${d}`);\n}\nfunction fp(d) {\n if (typeof d != \"boolean\")\n throw new Error(`Expected boolean, not ${d}`);\n}\nfunction zc(d, ...e) {\n if (!(d instanceof Uint8Array))\n throw new TypeError(\"Expected Uint8Array\");\n if (e.length > 0 && !e.includes(d.length))\n throw new TypeError(`Expected Uint8Array of length ${e}, not of length=${d.length}`);\n}\nfunction hp(d) {\n if (typeof d != \"function\" || typeof d.create != \"function\")\n throw new Error(\"Hash should be wrapped by utils.wrapConstructor\");\n Ia(d.outputLen), Ia(d.blockLen);\n}\nfunction lp(d, e = !0) {\n if (d.destroyed)\n throw new Error(\"Hash instance has been destroyed\");\n if (e && d.finished)\n throw new Error(\"Hash#digest() has already been called\");\n}\nfunction pp(d, e) {\n zc(d);\n const t = e.outputLen;\n if (d.length < t)\n throw new Error(`digestInto() expects output buffer of length at least ${t}`);\n}\nconst qi = {\n number: Ia,\n bool: fp,\n bytes: zc,\n hash: hp,\n exists: lp,\n output: pp\n}, jr = typeof globalThis == \"object\" && \"crypto\" in globalThis ? globalThis.crypto : void 0, Fr = (d) => new DataView(d.buffer, d.byteOffset, d.byteLength), qt = (d, e) => d << 32 - e | d >>> e, gp = new Uint8Array(new Uint32Array([287454020]).buffer)[0] === 68;\nif (!gp)\n throw new Error(\"Non little-endian hardware is not supported\");\nArray.from({ length: 256 }, (d, e) => e.toString(16).padStart(2, \"0\"));\nfunction Hc(d) {\n if (typeof d != \"string\")\n throw new TypeError(`utf8ToBytes expected string, got ${typeof d}`);\n return new TextEncoder().encode(d);\n}\nfunction eo(d) {\n if (typeof d == \"string\" && (d = Hc(d)), !(d instanceof Uint8Array))\n throw new TypeError(`Expected input type is Uint8Array (got ${typeof d})`);\n return d;\n}\nfunction Wc(...d) {\n if (!d.every((i) => i instanceof Uint8Array))\n throw new Error(\"Uint8Array list expected\");\n if (d.length === 1)\n return d[0];\n const e = d.reduce((i, s) => i + s.length, 0), t = new Uint8Array(e);\n for (let i = 0, s = 0; i < d.length; i++) {\n const n = d[i];\n t.set(n, s), s += n.length;\n }\n return t;\n}\nclass Yc {\n // Safe version that clones internal state\n clone() {\n return this._cloneInto();\n }\n}\nfunction Zi(d) {\n const e = (i) => d().update(eo(i)).digest(), t = d();\n return e.outputLen = t.outputLen, e.blockLen = t.blockLen, e.create = () => d(), e;\n}\nfunction hr(d = 32) {\n if (jr && typeof jr.getRandomValues == \"function\")\n return jr.getRandomValues(new Uint8Array(d));\n throw new Error(\"crypto.getRandomValues must be defined\");\n}\nclass Kc extends Yc {\n constructor(e, t) {\n super(), this.finished = !1, this.destroyed = !1, qi.hash(e);\n const i = eo(t);\n if (this.iHash = e.create(), typeof this.iHash.update != \"function\")\n throw new TypeError(\"Expected instance of class which extends utils.Hash\");\n this.blockLen = this.iHash.blockLen, this.outputLen = this.iHash.outputLen;\n const s = this.blockLen, n = new Uint8Array(s);\n n.set(i.length > s ? e.create().update(i).digest() : i);\n for (let r = 0; r < n.length; r++)\n n[r] ^= 54;\n this.iHash.update(n), this.oHash = e.create();\n for (let r = 0; r < n.length; r++)\n n[r] ^= 106;\n this.oHash.update(n), n.fill(0);\n }\n update(e) {\n return qi.exists(this), this.iHash.update(e), this;\n }\n digestInto(e) {\n qi.exists(this), qi.bytes(e, this.outputLen), this.finished = !0, this.iHash.digestInto(e), this.oHash.update(e), this.oHash.digestInto(e), this.destroy();\n }\n digest() {\n const e = new Uint8Array(this.oHash.outputLen);\n return this.digestInto(e), e;\n }\n _cloneInto(e) {\n e || (e = Object.create(Object.getPrototypeOf(this), {}));\n const { oHash: t, iHash: i, finished: s, destroyed: n, blockLen: r, outputLen: a } = this;\n return e = e, e.finished = s, e.destroyed = n, e.blockLen = r, e.outputLen = a, e.oHash = t._cloneInto(e.oHash), e.iHash = i._cloneInto(e.iHash), e;\n }\n destroy() {\n this.destroyed = !0, this.oHash.destroy(), this.iHash.destroy();\n }\n}\nconst to = (d, e, t) => new Kc(d, e).update(t).digest();\nto.create = (d, e) => new Kc(d, e);\nlet ji;\nconst Ys = {\n decode(d) {\n let e;\n if (ji === void 0) {\n const n = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\", r = `= \\f\n\\r\t \\u2028\\u2029`;\n for (ji = /* @__PURE__ */ Object.create(null), e = 0; e < 64; ++e)\n ji[n.charAt(e)] = e;\n for (ji[\"-\"] = 62, ji._ = 63, e = 0; e < r.length; ++e)\n ji[r.charAt(e)] = -1;\n }\n const t = [];\n let i = 0, s = 0;\n for (e = 0; e < d.length; ++e) {\n let n = d.charAt(e);\n if (n == \"=\")\n break;\n if (n = ji[n], n != -1) {\n if (n === void 0)\n throw new Error(\"Illegal character at offset \" + e);\n i |= n, ++s >= 4 ? (t[t.length] = i >> 16, t[t.length] = i >> 8 & 255, t[t.length] = i & 255, i = 0, s = 0) : i <<= 6;\n }\n }\n switch (s) {\n case 1:\n throw new Error(\"Base64 encoding incomplete: at least 2 bits missing\");\n case 2:\n t[t.length] = i >> 10;\n break;\n case 3:\n t[t.length] = i >> 16, t[t.length] = i >> 8 & 255;\n break;\n }\n return t;\n },\n re: /-----BEGIN [^-]+-----([A-Za-z0-9+\\/=\\s]+)-----END [^-]+-----|begin-base64[^\\n]+\\n([A-Za-z0-9+\\/=\\s]+)====/,\n unarmor(d) {\n const e = Ys.re.exec(d);\n if (e)\n if (e[1])\n d = e[1];\n else if (e[2])\n d = e[2];\n else\n throw new Error(\"RegExp out of sync\");\n return Ys.decode(d);\n }\n}, Ji = 1e13;\nclass Us {\n constructor(e) {\n this.buf = [+e || 0];\n }\n mulAdd(e, t) {\n const i = this.buf, s = i.length;\n let n, r;\n for (n = 0; n < s; ++n)\n r = i[n] * e + t, r < Ji ? t = 0 : (t = 0 | r / Ji, r -= t * Ji), i[n] = r;\n t > 0 && (i[n] = t);\n }\n sub(e) {\n const t = this.buf, i = t.length;\n let s, n;\n for (s = 0; s < i; ++s)\n n = t[s] - e, n < 0 ? (n += Ji, e = 1) : e = 0, t[s] = n;\n for (; t[t.length - 1] === 0; )\n t.pop();\n }\n toString(e) {\n if ((e || 10) != 10)\n throw new Error(\"only base 10 is supported\");\n const t = this.buf;\n let i = t[t.length - 1].toString();\n for (let s = t.length - 2; s >= 0; --s)\n i += (Ji + t[s]).toString().substring(1);\n return i;\n }\n valueOf() {\n const e = this.buf;\n let t = 0;\n for (let i = e.length - 1; i >= 0; --i)\n t = t * Ji + e[i];\n return t;\n }\n simplify() {\n const e = this.buf;\n return e.length == 1 ? e[0] : this;\n }\n}\nconst Xc = \"…\", mp = /^(\\d\\d)(0[1-9]|1[0-2])(0[1-9]|[12]\\d|3[01])([01]\\d|2[0-3])(?:([0-5]\\d)(?:([0-5]\\d)(?:[.,](\\d{1,3}))?)?)?(Z|[-+](?:[0]\\d|1[0-2])([0-5]\\d)?)?$/, yp = /^(\\d\\d\\d\\d)(0[1-9]|1[0-2])(0[1-9]|[12]\\d|3[01])([01]\\d|2[0-3])(?:([0-5]\\d)(?:([0-5]\\d)(?:[.,](\\d{1,3}))?)?)?(Z|[-+](?:[0]\\d|1[0-2])([0-5]\\d)?)?$/;\nfunction hs(d, e) {\n return d.length > e && (d = d.substring(0, e) + Xc), d;\n}\nclass Hs {\n constructor(e, t) {\n this.hexDigits = \"0123456789ABCDEF\", e instanceof Hs ? (this.enc = e.enc, this.pos = e.pos) : (this.enc = e, this.pos = t);\n }\n get(e) {\n if (e === void 0 && (e = this.pos++), e >= this.enc.length)\n throw new Error(`Requesting byte offset ${e} on a stream of length ${this.enc.length}`);\n return typeof this.enc == \"string\" ? this.enc.charCodeAt(e) : this.enc[e];\n }\n hexByte(e) {\n return this.hexDigits.charAt(e >> 4 & 15) + this.hexDigits.charAt(e & 15);\n }\n hexDump(e, t, i) {\n let s = \"\";\n for (let n = e; n < t; ++n)\n if (s += this.hexByte(this.get(n)), i !== !0)\n switch (n & 15) {\n case 7:\n s += \" \";\n break;\n case 15:\n s += `\n`;\n break;\n default:\n s += \" \";\n }\n return s;\n }\n isASCII(e, t) {\n for (let i = e; i < t; ++i) {\n const s = this.get(i);\n if (s < 32 || s > 176)\n return !1;\n }\n return !0;\n }\n parseStringISO(e, t) {\n let i = \"\";\n for (let s = e; s < t; ++s)\n i += String.fromCharCode(this.get(s));\n return i;\n }\n parseStringUTF(e, t) {\n let i = \"\";\n for (let s = e; s < t; ) {\n const n = this.get(s++);\n n < 128 ? i += String.fromCharCode(n) : n > 191 && n < 224 ? i += String.fromCharCode((n & 31) << 6 | this.get(s++) & 63) : i += String.fromCharCode((n & 15) << 12 | (this.get(s++) & 63) << 6 | this.get(s++) & 63);\n }\n return i;\n }\n parseStringBMP(e, t) {\n let i = \"\", s, n;\n for (let r = e; r < t; )\n s = this.get(r++), n = this.get(r++), i += String.fromCharCode(s << 8 | n);\n return i;\n }\n parseTime(e, t, i) {\n let s = this.parseStringISO(e, t);\n const n = (i ? mp : yp).exec(s);\n return n ? (i && (n[1] = +n[1], n[1] += +n[1] < 70 ? 2e3 : 1900), s = n[1] + \"-\" + n[2] + \"-\" + n[3] + \" \" + n[4], n[5] && (s += \":\" + n[5], n[6] && (s += \":\" + n[6], n[7] && (s += \".\" + n[7]))), n[8] && (s += \" UTC\", n[8] != \"Z\" && (s += n[8], n[9] && (s += \":\" + n[9]))), s) : \"Unrecognized time: \" + s;\n }\n parseInteger(e, t) {\n let i = this.get(e);\n const s = i > 127, n = s ? 255 : 0;\n let r, a = \"\";\n for (; i == n && ++e < t; )\n i = this.get(e);\n if (r = t - e, r === 0)\n return s ? -1 : 0;\n if (r > 4) {\n for (a = i, r <<= 3; !((+a ^ n) & 128); )\n a = +a << 1, --r;\n a = \"(\" + r + ` bit)\n`;\n }\n s && (i = i - 256);\n const o = new Us(i);\n for (let c = e + 1; c < t; ++c)\n o.mulAdd(256, this.get(c));\n return a + o.toString();\n }\n parseBitString(e, t, i) {\n const s = this.get(e), r = \"(\" + ((t - e - 1 << 3) - s) + ` bit)\n`;\n let a = \"\";\n for (let o = e + 1; o < t; ++o) {\n const c = this.get(o), u = o == t - 1 ? s : 0;\n for (let f = 7; f >= u; --f)\n a += c >> f & 1 ? \"1\" : \"0\";\n if (a.length > i)\n return r + hs(a, i);\n }\n return r + a;\n }\n parseOctetString(e, t, i) {\n if (this.isASCII(e, t))\n return hs(this.parseStringISO(e, t), i);\n const s = t - e;\n let n = \"(\" + s + ` byte)\n`;\n i /= 2, s > i && (t = e + i);\n for (let r = e; r < t; ++r)\n n += this.hexByte(this.get(r));\n return s > i && (n += Xc), n;\n }\n parseOID(e, t, i) {\n let s = \"\", n = new Us(), r = 0;\n for (let a = e; a < t; ++a) {\n const o = this.get(a);\n if (n.mulAdd(128, o & 127), r += 7, !(o & 128)) {\n if (s === \"\")\n if (n = n.simplify(), n instanceof Us)\n n.sub(80), s = \"2.\" + n.toString();\n else {\n const c = n < 80 ? n < 40 ? 0 : 1 : 2;\n s = c + \".\" + (n - c * 40);\n }\n else\n s += \".\" + n.toString();\n if (s.length > i)\n return hs(s, i);\n n = new Us(), r = 0;\n }\n }\n return r > 0 && (s += \".incomplete\"), s;\n }\n}\nclass Gi {\n constructor(e, t, i, s, n) {\n if (!(s instanceof ed))\n throw new Error(\"Invalid tag value.\");\n this.stream = e, this.header = t, this.length = i, this.tag = s, this.sub = n;\n }\n typeName() {\n switch (this.tag.tagClass) {\n case 0:\n switch (this.tag.tagNumber) {\n case 0:\n return \"EOC\";\n case 1:\n return \"BOOLEAN\";\n case 2:\n return \"INTEGER\";\n case 3:\n return \"BIT_STRING\";\n case 4:\n return \"OCTET_STRING\";\n case 5:\n return \"NULL\";\n case 6:\n return \"OBJECT_IDENTIFIER\";\n case 7:\n return \"ObjectDescriptor\";\n case 8:\n return \"EXTERNAL\";\n case 9:\n return \"REAL\";\n case 10:\n return \"ENUMERATED\";\n case 11:\n return \"EMBEDDED_PDV\";\n case 12:\n return \"UTF8String\";\n case 16:\n return \"SEQUENCE\";\n case 17:\n return \"SET\";\n case 18:\n return \"NumericString\";\n case 19:\n return \"PrintableString\";\n case 20:\n return \"TeletexString\";\n case 21:\n return \"VideotexString\";\n case 22:\n return \"IA5String\";\n case 23:\n return \"UTCTime\";\n case 24:\n return \"GeneralizedTime\";\n case 25:\n return \"GraphicString\";\n case 26:\n return \"VisibleString\";\n case 27:\n return \"GeneralString\";\n case 28:\n return \"UniversalString\";\n case 30:\n return \"BMPString\";\n }\n return \"Universal_\" + this.tag.tagNumber.toString();\n case 1:\n return \"Application_\" + this.tag.tagNumber.toString();\n case 2:\n return \"[\" + this.tag.tagNumber.toString() + \"]\";\n case 3:\n return \"Private_\" + this.tag.tagNumber.toString();\n }\n }\n content(e) {\n if (this.tag === void 0)\n return null;\n e === void 0 && (e = 1 / 0);\n const t = this.posContent(), i = Math.abs(this.length);\n if (!this.tag.isUniversal())\n return this.sub !== null ? \"(\" + this.sub.length + \" elem)\" : this.stream.parseOctetString(t, t + i, e);\n switch (this.tag.tagNumber) {\n case 1:\n return this.stream.get(t) === 0 ? \"false\" : \"true\";\n case 2:\n return this.stream.parseInteger(t, t + i);\n case 3:\n return this.sub ? \"(\" + this.sub.length + \" elem)\" : this.stream.parseBitString(t, t + i, e);\n case 4:\n return this.sub ? \"(\" + this.sub.length + \" elem)\" : this.stream.parseOctetString(t, t + i, e);\n case 6:\n return this.stream.parseOID(t, t + i, e);\n case 16:\n case 17:\n return this.sub !== null ? \"(\" + this.sub.length + \" elem)\" : \"(no elem)\";\n case 12:\n return hs(this.stream.parseStringUTF(t, t + i), e);\n case 18:\n case 19:\n case 20:\n case 21:\n case 22:\n case 26:\n return hs(this.stream.parseStringISO(t, t + i), e);\n case 30:\n return hs(this.stream.parseStringBMP(t, t + i), e);\n case 23:\n case 24:\n return this.stream.parseTime(t, t + i, this.tag.tagNumber == 23);\n }\n return null;\n }\n toString() {\n return this.typeName() + \"@\" + this.stream.pos + \"[header:\" + this.header + \",length:\" + this.length + \",sub:\" + (this.sub === null ? \"null\" : this.sub.length) + \"]\";\n }\n toPrettyString(e) {\n e === void 0 && (e = \"\");\n let t = e + this.typeName() + \" @\" + this.stream.pos;\n if (this.length >= 0 && (t += \"+\"), t += this.length, this.tag.tagConstructed ? t += \" (constructed)\" : this.tag.isUniversal() && (this.tag.tagNumber == 3 || this.tag.tagNumber == 4) && this.sub !== null && (t += \" (encapsulates)\"), t += `\n`, this.sub !== null) {\n e += \" \";\n for (let i = 0, s = this.sub.length; i < s; ++i)\n t += this.sub[i].toPrettyString(e);\n }\n return t;\n }\n posStart() {\n return this.stream.pos;\n }\n posContent() {\n return this.stream.pos + this.header;\n }\n posEnd() {\n return this.stream.pos + this.header + Math.abs(this.length);\n }\n toHexString() {\n return this.stream.hexDump(this.posStart(), this.posEnd(), !0);\n }\n static decodeLength(e) {\n let t = e.get();\n const i = t & 127;\n if (i == t)\n return i;\n if (i > 6)\n throw new Error(\"Length over 48 bits not supported at position \" + (e.pos - 1));\n if (i === 0)\n return null;\n t = 0;\n for (let s = 0; s < i; ++s)\n t = t * 256 + e.get();\n return t;\n }\n /**\n * Retrieve the hexadecimal value (as a string) of the current ASN.1 element\n * @returns {string}\n * @public\n */\n getHexStringValue() {\n const e = this.toHexString(), t = this.header * 2, i = this.length * 2;\n return e.substr(t, i);\n }\n static decode(e) {\n let t;\n e instanceof Hs ? t = e : t = new Hs(e, 0);\n const i = new Hs(t), s = new ed(t);\n let n = Gi.decodeLength(t);\n const r = t.pos, a = r - i.pos;\n let o = null;\n const c = function() {\n const u = [];\n if (n !== null) {\n const f = r + n;\n for (; t.pos < f; )\n u[u.length] = Gi.decode(t);\n if (t.pos != f)\n throw new Error(\"Content size is not correct for container starting at offset \" + r);\n } else\n try {\n for (; ; ) {\n const f = Gi.decode(t);\n if (f.tag.isEOC())\n break;\n u[u.length] = f;\n }\n n = r - t.pos;\n } catch (f) {\n throw new Error(\"Exception while decoding undefined length content: \" + f);\n }\n return u;\n };\n if (s.tagConstructed)\n o = c();\n else if (s.isUniversal() && (s.tagNumber == 3 || s.tagNumber == 4))\n try {\n if (s.tagNumber == 3 && t.get() != 0)\n throw new Error(\"BIT STRINGs with unused bits cannot encapsulate.\");\n o = c();\n for (let u = 0; u < o.length; ++u)\n if (o[u].tag.isEOC())\n throw new Error(\"EOC is not supposed to be actual content.\");\n } catch {\n o = null;\n }\n if (o === null) {\n if (n === null)\n throw new Error(\"We can't skip over an invalid tag with undefined length at offset \" + r);\n t.pos = r + Math.abs(n);\n }\n return new Gi(i, a, n, s, o);\n }\n}\nclass ed {\n constructor(e) {\n let t = e.get();\n if (this.tagClass = t >> 6, this.tagConstructed = (t & 32) !== 0, this.tagNumber = t & 31, this.tagNumber == 31) {\n const i = new Us();\n do\n t = e.get(), i.mulAdd(128, t & 127);\n while (t & 128);\n this.tagNumber = i.simplify();\n }\n }\n isUniversal() {\n return this.tagClass === 0;\n }\n isEOC() {\n return this.tagClass === 0 && this.tagNumber === 0;\n }\n}\nfunction wp(d, e, t, i) {\n if (typeof d.setBigUint64 == \"function\")\n return d.setBigUint64(e, t, i);\n const s = BigInt(32), n = BigInt(4294967295), r = Number(t >> s & n), a = Number(t & n), o = i ? 4 : 0, c = i ? 0 : 4;\n d.setUint32(e + o, r, i), d.setUint32(e + c, a, i);\n}\nclass io extends Yc {\n constructor(e, t, i, s) {\n super(), this.blockLen = e, this.outputLen = t, this.padOffset = i, this.isLE = s, this.finished = !1, this.length = 0, this.pos = 0, this.destroyed = !1, this.buffer = new Uint8Array(e), this.view = Fr(this.buffer);\n }\n update(e) {\n qi.exists(this);\n const { view: t, buffer: i, blockLen: s } = this;\n e = eo(e);\n const n = e.length;\n for (let r = 0; r < n; ) {\n const a = Math.min(s - this.pos, n - r);\n if (a === s) {\n const o = Fr(e);\n for (; s <= n - r; r += s)\n this.process(o, r);\n continue;\n }\n i.set(e.subarray(r, r + a), this.pos), this.pos += a, r += a, this.pos === s && (this.process(t, 0), this.pos = 0);\n }\n return this.length += e.length, this.roundClean(), this;\n }\n digestInto(e) {\n qi.exists(this), qi.output(e, this), this.finished = !0;\n const { buffer: t, view: i, blockLen: s, isLE: n } = this;\n let { pos: r } = this;\n t[r++] = 128, this.buffer.subarray(r).fill(0), this.padOffset > s - r && (this.process(i, 0), r = 0);\n for (let f = r; f < s; f++)\n t[f] = 0;\n wp(i, s - 8, BigInt(this.length * 8), n), this.process(i, 0);\n const a = Fr(e), o = this.outputLen;\n if (o % 4)\n throw new Error(\"_sha2: outputLen should be aligned to 32bit\");\n const c = o / 4, u = this.get();\n if (c > u.length)\n throw new Error(\"_sha2: outputLen bigger than state\");\n for (let f = 0; f < c; f++)\n a.setUint32(4 * f, u[f], n);\n }\n digest() {\n const { buffer: e, outputLen: t } = this;\n this.digestInto(e);\n const i = e.slice(0, t);\n return this.destroy(), i;\n }\n _cloneInto(e) {\n e || (e = new this.constructor()), e.set(...this.get());\n const { blockLen: t, buffer: i, length: s, finished: n, destroyed: r, pos: a } = this;\n return e.length = s, e.pos = a, e.finished = n, e.destroyed = r, s % t && e.buffer.set(i), e;\n }\n}\nconst bp = (d, e, t) => d & e ^ ~d & t, Sp = (d, e, t) => d & e ^ d & t ^ e & t, Tp = new Uint32Array([\n 1116352408,\n 1899447441,\n 3049323471,\n 3921009573,\n 961987163,\n 1508970993,\n 2453635748,\n 2870763221,\n 3624381080,\n 310598401,\n 607225278,\n 1426881987,\n 1925078388,\n 2162078206,\n 2614888103,\n 3248222580,\n 3835390401,\n 4022224774,\n 264347078,\n 604807628,\n 770255983,\n 1249150122,\n 1555081692,\n 1996064986,\n 2554220882,\n 2821834349,\n 2952996808,\n 3210313671,\n 3336571891,\n 3584528711,\n 113926993,\n 338241895,\n 666307205,\n 773529912,\n 1294757372,\n 1396182291,\n 1695183700,\n 1986661051,\n 2177026350,\n 2456956037,\n 2730485921,\n 2820302411,\n 3259730800,\n 3345764771,\n 3516065817,\n 3600352804,\n 4094571909,\n 275423344,\n 430227734,\n 506948616,\n 659060556,\n 883997877,\n 958139571,\n 1322822218,\n 1537002063,\n 1747873779,\n 1955562222,\n 2024104815,\n 2227730452,\n 2361852424,\n 2428436474,\n 2756734187,\n 3204031479,\n 3329325298\n]), yi = new Uint32Array([\n 1779033703,\n 3144134277,\n 1013904242,\n 2773480762,\n 1359893119,\n 2600822924,\n 528734635,\n 1541459225\n]), wi = new Uint32Array(64);\nclass $c extends io {\n constructor() {\n super(64, 32, 8, !1), this.A = yi[0] | 0, this.B = yi[1] | 0, this.C = yi[2] | 0, this.D = yi[3] | 0, this.E = yi[4] | 0, this.F = yi[5] | 0, this.G = yi[6] | 0, this.H = yi[7] | 0;\n }\n get() {\n const { A: e, B: t, C: i, D: s, E: n, F: r, G: a, H: o } = this;\n return [e, t, i, s, n, r, a, o];\n }\n // prettier-ignore\n set(e, t, i, s, n, r, a, o) {\n this.A = e | 0, this.B = t | 0, this.C = i | 0, this.D = s | 0, this.E = n | 0, this.F = r | 0, this.G = a | 0, this.H = o | 0;\n }\n process(e, t) {\n for (let f = 0; f < 16; f++, t += 4)\n wi[f] = e.getUint32(t, !1);\n for (let f = 16; f < 64; f++) {\n const h = wi[f - 15], l = wi[f - 2], p = qt(h, 7) ^ qt(h, 18) ^ h >>> 3, m = qt(l, 17) ^ qt(l, 19) ^ l >>> 10;\n wi[f] = m + wi[f - 7] + p + wi[f - 16] | 0;\n }\n let { A: i, B: s, C: n, D: r, E: a, F: o, G: c, H: u } = this;\n for (let f = 0; f < 64; f++) {\n const h = qt(a, 6) ^ qt(a, 11) ^ qt(a, 25), l = u + h + bp(a, o, c) + Tp[f] + wi[f] | 0, m = (qt(i, 2) ^ qt(i, 13) ^ qt(i, 22)) + Sp(i, s, n) | 0;\n u = c, c = o, o = a, a = r + l | 0, r = n, n = s, s = i, i = l + m | 0;\n }\n i = i + this.A | 0, s = s + this.B | 0, n = n + this.C | 0, r = r + this.D | 0, a = a + this.E | 0, o = o + this.F | 0, c = c + this.G | 0, u = u + this.H | 0, this.set(i, s, n, r, a, o, c, u);\n }\n roundClean() {\n wi.fill(0);\n }\n destroy() {\n this.set(0, 0, 0, 0, 0, 0, 0, 0), this.buffer.fill(0);\n }\n}\nclass Ap extends $c {\n constructor() {\n super(), this.A = -1056596264, this.B = 914150663, this.C = 812702999, this.D = -150054599, this.E = -4191439, this.F = 1750603025, this.G = 1694076839, this.H = -1090891868, this.outputLen = 28;\n }\n}\nconst Re = Zi(() => new $c());\nZi(() => new Ap());\nconst st = BigInt(0), Xe = BigInt(1), Fi = BigInt(2), Ip = BigInt(3), Oa = BigInt(4), td = BigInt(5), id = BigInt(8);\nBigInt(9);\nBigInt(16);\nfunction _e(d, e) {\n const t = d % e;\n return t >= st ? t : e + t;\n}\nfunction Zc(d, e, t) {\n if (t <= st || e < st)\n throw new Error(\"Expected power/modulo > 0\");\n if (t === Xe)\n return st;\n let i = Xe;\n for (; e > st; )\n e & Xe && (i = i * d % t), d = d * d % t, e >>= Xe;\n return i;\n}\nfunction Ge(d, e, t) {\n let i = d;\n for (; e-- > st; )\n i *= i, i %= t;\n return i;\n}\nfunction Ma(d, e) {\n if (d === st || e <= st)\n throw new Error(`invert: expected positive integers, got n=${d} mod=${e}`);\n let t = _e(d, e), i = e, s = st, n = Xe;\n for (; t !== st; ) {\n const a = i / t, o = i % t, c = s - n * a;\n i = t, t = o, s = n, n = c;\n }\n if (i !== Xe)\n throw new Error(\"invert: does not exist\");\n return _e(s, e);\n}\nfunction Op(d) {\n const e = (d - Xe) / Fi;\n let t, i, s;\n for (t = d - Xe, i = 0; t % Fi === st; t /= Fi, i++)\n ;\n for (s = Fi; s < d && Zc(s, e, d) !== d - Xe; s++)\n ;\n if (i === 1) {\n const r = (d + Xe) / Oa;\n return function(o, c) {\n const u = o.pow(c, r);\n if (!o.eql(o.sqr(u), c))\n throw new Error(\"Cannot find square root\");\n return u;\n };\n }\n const n = (t + Xe) / Fi;\n return function(a, o) {\n if (a.pow(o, e) === a.neg(a.ONE))\n throw new Error(\"Cannot find square root\");\n let c = i, u = a.pow(a.mul(a.ONE, s), t), f = a.pow(o, n), h = a.pow(o, t);\n for (; !a.eql(h, a.ONE); ) {\n if (a.eql(h, a.ZERO))\n return a.ZERO;\n let l = 1;\n for (let m = a.sqr(h); l < c && !a.eql(m, a.ONE); l++)\n m = a.sqr(m);\n const p = a.pow(u, Xe << BigInt(c - l - 1));\n u = a.sqr(p), f = a.mul(f, p), h = a.mul(h, u), c = l;\n }\n return f;\n };\n}\nfunction Mp(d) {\n if (d % Oa === Ip) {\n const e = (d + Xe) / Oa;\n return function(i, s) {\n const n = i.pow(s, e);\n if (!i.eql(i.sqr(n), s))\n throw new Error(\"Cannot find square root\");\n return n;\n };\n }\n if (d % id === td) {\n const e = (d - td) / id;\n return function(i, s) {\n const n = i.mul(s, Fi), r = i.pow(n, e), a = i.mul(s, r), o = i.mul(i.mul(a, Fi), r), c = i.mul(a, i.sub(o, i.ONE));\n if (!i.eql(i.sqr(c), s))\n throw new Error(\"Cannot find square root\");\n return c;\n };\n }\n return Op(d);\n}\nconst Ai = (d, e) => (_e(d, e) & Xe) === Xe, Cp = [\n \"create\",\n \"isValid\",\n \"is0\",\n \"neg\",\n \"inv\",\n \"sqrt\",\n \"sqr\",\n \"eql\",\n \"add\",\n \"sub\",\n \"mul\",\n \"pow\",\n \"div\",\n \"addN\",\n \"subN\",\n \"mulN\",\n \"sqrN\"\n];\nfunction Qc(d) {\n const e = {\n ORDER: \"bigint\",\n MASK: \"bigint\",\n BYTES: \"isSafeInteger\",\n BITS: \"isSafeInteger\"\n }, t = Cp.reduce((i, s) => (i[s] = \"function\", i), e);\n return Bi(d, t);\n}\nfunction xp(d, e, t) {\n if (t < st)\n throw new Error(\"Expected power > 0\");\n if (t === st)\n return d.ONE;\n if (t === Xe)\n return e;\n let i = d.ONE, s = e;\n for (; t > st; )\n t & Xe && (i = d.mul(i, s)), s = d.sqr(s), t >>= 1n;\n return i;\n}\nfunction vp(d, e) {\n const t = new Array(e.length), i = e.reduce((n, r, a) => d.is0(r) ? n : (t[a] = n, d.mul(n, r)), d.ONE), s = d.inv(i);\n return e.reduceRight((n, r, a) => d.is0(r) ? n : (t[a] = d.mul(n, t[a]), d.mul(n, r)), s), t;\n}\nfunction so(d, e) {\n const t = e !== void 0 ? e : d.toString(2).length, i = Math.ceil(t / 8);\n return { nBitLength: t, nByteLength: i };\n}\nfunction no(d, e, t = !1, i = {}) {\n if (d <= st)\n throw new Error(`Expected Fp ORDER > 0, got ${d}`);\n const { nBitLength: s, nByteLength: n } = so(d, e);\n if (n > 2048)\n throw new Error(\"Field lengths over 2048 bytes are not supported\");\n const r = Mp(d), a = Object.freeze({\n ORDER: d,\n BITS: s,\n BYTES: n,\n MASK: Ja(s),\n ZERO: st,\n ONE: Xe,\n create: (o) => _e(o, d),\n isValid: (o) => {\n if (typeof o != \"bigint\")\n throw new Error(`Invalid field element: expected bigint, got ${typeof o}`);\n return st <= o && o < d;\n },\n is0: (o) => o === st,\n isOdd: (o) => (o & Xe) === Xe,\n neg: (o) => _e(-o, d),\n eql: (o, c) => o === c,\n sqr: (o) => _e(o * o, d),\n add: (o, c) => _e(o + c, d),\n sub: (o, c) => _e(o - c, d),\n mul: (o, c) => _e(o * c, d),\n pow: (o, c) => xp(a, o, c),\n div: (o, c) => _e(o * Ma(c, d), d),\n // Same as above, but doesn't normalize\n sqrN: (o) => o * o,\n addN: (o, c) => o + c,\n subN: (o, c) => o - c,\n mulN: (o, c) => o * c,\n inv: (o) => Ma(o, d),\n sqrt: i.sqrt || ((o) => r(a, o)),\n invertBatch: (o) => vp(a, o),\n // TODO: do we really need constant cmov?\n // We don't have const-time bigints anyway, so probably will be not very useful\n cmov: (o, c, u) => u ? c : o,\n toBytes: (o) => t ? Kt(o, n) : ni(o, n),\n fromBytes: (o) => {\n if (o.length !== n)\n throw new Error(`Fp.fromBytes: expected ${n}, got ${o.length}`);\n return t ? Wt(o) : wt(o);\n }\n });\n return Object.freeze(a);\n}\nfunction kp(d, e) {\n if (!d.isOdd)\n throw new Error(\"Field doesn't have isOdd\");\n const t = d.sqrt(e);\n return d.isOdd(t) ? d.neg(t) : t;\n}\nfunction Ep(d, e, t = !1) {\n d = Ne(\"privateHash\", d);\n const i = d.length, s = so(e).nByteLength + 8;\n if (s < 24 || i < s || i > 1024)\n throw new Error(`hashToPrivateScalar: expected ${s}-1024 bytes of input, got ${i}`);\n const n = t ? Wt(d) : wt(d);\n return _e(n, e - Xe) + Xe;\n}\nconst Np = BigInt(0), Ur = BigInt(1);\nfunction Jc(d, e) {\n const t = (s, n) => {\n const r = n.negate();\n return s ? r : n;\n }, i = (s) => {\n const n = Math.ceil(e / s) + 1, r = 2 ** (s - 1);\n return { windows: n, windowSize: r };\n };\n return {\n constTimeNegate: t,\n // non-const time multiplication ladder\n unsafeLadder(s, n) {\n let r = d.ZERO, a = s;\n for (; n > Np; )\n n & Ur && (r = r.add(a)), a = a.double(), n >>= Ur;\n return r;\n },\n /**\n * Creates a wNAF precomputation window. Used for caching.\n * Default window size is set by `utils.precompute()` and is equal to 8.\n * Number of precomputed points depends on the curve size:\n * 2^(𝑊−1) * (Math.ceil(𝑛 / 𝑊) + 1), where:\n * - 𝑊 is the window size\n * - 𝑛 is the bitlength of the curve order.\n * For a 256-bit curve and window size 8, the number of precomputed points is 128 * 33 = 4224.\n * @returns precomputed point tables flattened to a single array\n */\n precomputeWindow(s, n) {\n const { windows: r, windowSize: a } = i(n), o = [];\n let c = s, u = c;\n for (let f = 0; f < r; f++) {\n u = c, o.push(u);\n for (let h = 1; h < a; h++)\n u = u.add(c), o.push(u);\n c = u.double();\n }\n return o;\n },\n /**\n * Implements ec multiplication using precomputed tables and w-ary non-adjacent form.\n * @param W window size\n * @param precomputes precomputed tables\n * @param n scalar (we don't check here, but should be less than curve order)\n * @returns real and fake (for const-time) points\n */\n wNAF(s, n, r) {\n const { windows: a, windowSize: o } = i(s);\n let c = d.ZERO, u = d.BASE;\n const f = BigInt(2 ** s - 1), h = 2 ** s, l = BigInt(s);\n for (let p = 0; p < a; p++) {\n const m = p * o;\n let y = Number(r & f);\n r >>= l, y > o && (y -= h, r += Ur);\n const w = m, S = m + Math.abs(y) - 1, b = p % 2 !== 0, T = y < 0;\n y === 0 ? u = u.add(t(b, n[w])) : c = c.add(t(T, n[S]));\n }\n return { p: c, f: u };\n },\n wNAFCached(s, n, r, a) {\n const o = s._WINDOW_SIZE || 1;\n let c = n.get(s);\n return c || (c = this.precomputeWindow(s, o), o !== 1 && n.set(s, a(c))), this.wNAF(o, c, r);\n }\n };\n}\nfunction ro(d) {\n return Qc(d.Fp), Bi(d, {\n n: \"bigint\",\n h: \"bigint\",\n Gx: \"field\",\n Gy: \"field\"\n }, {\n nBitLength: \"isSafeInteger\",\n nByteLength: \"isSafeInteger\"\n }), Object.freeze({ ...so(d.n, d.nBitLength), ...d });\n}\nfunction Pp(d) {\n const e = ro(d);\n Bi(e, {\n a: \"field\",\n b: \"field\",\n fromBytes: \"function\",\n toBytes: \"function\"\n }, {\n allowedPrivateKeyLengths: \"array\",\n wrapPrivateKey: \"boolean\",\n isTorsionFree: \"function\",\n clearCofactor: \"function\",\n allowInfinityPoint: \"boolean\"\n });\n const { endo: t, Fp: i, a: s } = e;\n if (t) {\n if (!i.eql(s, i.ZERO))\n throw new Error(\"Endomorphism can only be defined for Koblitz curves that have a=0\");\n if (typeof t != \"object\" || typeof t.beta != \"bigint\" || typeof t.splitScalar != \"function\")\n throw new Error(\"Expected endomorphism with beta: bigint and splitScalar: function\");\n }\n return Object.freeze({ ...e });\n}\nconst { bytesToNumberBE: _p, hexToBytes: Lp } = gl, zi = {\n // asn.1 DER encoding utils\n Err: class extends Error {\n constructor(e = \"\") {\n super(e);\n }\n },\n _parseInt(d) {\n const { Err: e } = zi;\n if (d.length < 2 || d[0] !== 2)\n throw new e(\"Invalid signature integer tag\");\n const t = d[1], i = d.subarray(2, t + 2);\n if (!t || i.length !== t)\n throw new e(\"Invalid signature integer: wrong length\");\n if (i[0] === 0 && i[1] <= 127)\n throw new e(\"Invalid signature integer: trailing length\");\n return { d: _p(i), l: d.subarray(t + 2) };\n },\n toSig(d) {\n const { Err: e } = zi, t = typeof d == \"string\" ? Lp(d) : d;\n if (!(t instanceof Uint8Array))\n throw new Error(\"ui8a expected\");\n let i = t.length;\n if (i < 2 || t[0] != 48)\n throw new e(\"Invalid signature tag\");\n if (t[1] !== i - 2)\n throw new e(\"Invalid signature: incorrect length\");\n const { d: s, l: n } = zi._parseInt(t.subarray(2)), { d: r, l: a } = zi._parseInt(n);\n if (a.length)\n throw new e(\"Invalid signature: left bytes after parsing\");\n return { r: s, s: r };\n },\n hexFromSig(d) {\n const e = (c) => Number.parseInt(c[0], 16) >= 8 ? \"00\" + c : c, t = (c) => {\n const u = c.toString(16);\n return u.length & 1 ? `0${u}` : u;\n }, i = e(t(d.s)), s = e(t(d.r)), n = i.length / 2, r = s.length / 2, a = t(n), o = t(r);\n return `30${t(r + n + 4)}02${o}${s}02${a}${i}`;\n }\n}, ti = BigInt(0), vt = BigInt(1);\nfunction Dp(d) {\n const e = Pp(d), { Fp: t } = e;\n function i(h) {\n const { a: l, b: p } = e, m = t.sqr(h), y = t.mul(m, h);\n return t.add(t.add(y, t.mul(h, l)), p);\n }\n function s(h) {\n return typeof h == \"bigint\" && ti < h && h < e.n;\n }\n function n(h) {\n if (!s(h))\n throw new Error(\"Expected valid bigint: 0 < bigint < curve.n\");\n }\n function r(h) {\n const { allowedPrivateKeyLengths: l, nByteLength: p, wrapPrivateKey: m, n: y } = e;\n if (l && typeof h != \"bigint\") {\n if (h instanceof Uint8Array && (h = ki(h)), typeof h != \"string\" || !l.includes(h.length))\n throw new Error(\"Invalid key\");\n h = h.padStart(p * 2, \"0\");\n }\n let w;\n try {\n w = typeof h == \"bigint\" ? h : wt(Ne(\"private key\", h, p));\n } catch {\n throw new Error(`private key must be ${p} bytes, hex or bigint, not ${typeof h}`);\n }\n return m && (w = _e(w, y)), n(w), w;\n }\n const a = /* @__PURE__ */ new Map();\n function o(h) {\n if (!(h instanceof c))\n throw new Error(\"ProjectivePoint expected\");\n }\n class c {\n constructor(l, p, m) {\n if (this.px = l, this.py = p, this.pz = m, l == null || !t.isValid(l))\n throw new Error(\"x required\");\n if (p == null || !t.isValid(p))\n throw new Error(\"y required\");\n if (m == null || !t.isValid(m))\n throw new Error(\"z required\");\n }\n // Does not validate if the point is on-curve.\n // Use fromHex instead, or call assertValidity() later.\n static fromAffine(l) {\n const { x: p, y: m } = l || {};\n if (!l || !t.isValid(p) || !t.isValid(m))\n throw new Error(\"invalid affine point\");\n if (l instanceof c)\n throw new Error(\"projective point not allowed\");\n const y = (w) => t.eql(w, t.ZERO);\n return y(p) && y(m) ? c.ZERO : new c(p, m, t.ONE);\n }\n get x() {\n return this.toAffine().x;\n }\n get y() {\n return this.toAffine().y;\n }\n /**\n * Takes a bunch of Projective Points but executes only one\n * inversion on all of them. Inversion is very slow operation,\n * so this improves performance massively.\n * Optimization: converts a list of projective points to a list of identical points with Z=1.\n */\n static normalizeZ(l) {\n const p = t.invertBatch(l.map((m) => m.pz));\n return l.map((m, y) => m.toAffine(p[y])).map(c.fromAffine);\n }\n /**\n * Converts hash string or Uint8Array to Point.\n * @param hex short/long ECDSA hex\n */\n static fromHex(l) {\n const p = c.fromAffine(e.fromBytes(Ne(\"pointHex\", l)));\n return p.assertValidity(), p;\n }\n // Multiplies generator point by privateKey.\n static fromPrivateKey(l) {\n return c.BASE.multiply(r(l));\n }\n // \"Private method\", don't use it directly\n _setWindowSize(l) {\n this._WINDOW_SIZE = l, a.delete(this);\n }\n // A point on curve is valid if it conforms to equation.\n assertValidity() {\n if (this.is0()) {\n if (e.allowInfinityPoint)\n return;\n throw new Error(\"bad point: ZERO\");\n }\n const { x: l, y: p } = this.toAffine();\n if (!t.isValid(l) || !t.isValid(p))\n throw new Error(\"bad point: x or y not FE\");\n const m = t.sqr(p), y = i(l);\n if (!t.eql(m, y))\n throw new Error(\"bad point: equation left != right\");\n if (!this.isTorsionFree())\n throw new Error(\"bad point: not in prime-order subgroup\");\n }\n hasEvenY() {\n const { y: l } = this.toAffine();\n if (t.isOdd)\n return !t.isOdd(l);\n throw new Error(\"Field doesn't support isOdd\");\n }\n /**\n * Compare one point to another.\n */\n equals(l) {\n o(l);\n const { px: p, py: m, pz: y } = this, { px: w, py: S, pz: b } = l, T = t.eql(t.mul(p, b), t.mul(w, y)), x = t.eql(t.mul(m, b), t.mul(S, y));\n return T && x;\n }\n /**\n * Flips point to one corresponding to (x, -y) in Affine coordinates.\n */\n negate() {\n return new c(this.px, t.neg(this.py), this.pz);\n }\n // Renes-Costello-Batina exception-free doubling formula.\n // There is 30% faster Jacobian formula, but it is not complete.\n // https://eprint.iacr.org/2015/1060, algorithm 3\n // Cost: 8M + 3S + 3*a + 2*b3 + 15add.\n double() {\n const { a: l, b: p } = e, m = t.mul(p, 3n), { px: y, py: w, pz: S } = this;\n let b = t.ZERO, T = t.ZERO, x = t.ZERO, v = t.mul(y, y), _ = t.mul(w, w), V = t.mul(S, S), j = t.mul(y, w);\n return j = t.add(j, j), x = t.mul(y, S), x = t.add(x, x), b = t.mul(l, x), T = t.mul(m, V), T = t.add(b, T), b = t.sub(_, T), T = t.add(_, T), T = t.mul(b, T), b = t.mul(j, b), x = t.mul(m, x), V = t.mul(l, V), j = t.sub(v, V), j = t.mul(l, j), j = t.add(j, x), x = t.add(v, v), v = t.add(x, v), v = t.add(v, V), v = t.mul(v, j), T = t.add(T, v), V = t.mul(w, S), V = t.add(V, V), v = t.mul(V, j), b = t.sub(b, v), x = t.mul(V, _), x = t.add(x, x), x = t.add(x, x), new c(b, T, x);\n }\n // Renes-Costello-Batina exception-free addition formula.\n // There is 30% faster Jacobian formula, but it is not complete.\n // https://eprint.iacr.org/2015/1060, algorithm 1\n // Cost: 12M + 0S + 3*a + 3*b3 + 23add.\n add(l) {\n o(l);\n const { px: p, py: m, pz: y } = this, { px: w, py: S, pz: b } = l;\n let T = t.ZERO, x = t.ZERO, v = t.ZERO;\n const _ = e.a, V = t.mul(e.b, 3n);\n let j = t.mul(p, w), G = t.mul(m, S), W = t.mul(y, b), B = t.add(p, m), Q = t.add(w, S);\n B = t.mul(B, Q), Q = t.add(j, G), B = t.sub(B, Q), Q = t.add(p, y);\n let se = t.add(w, b);\n return Q = t.mul(Q, se), se = t.add(j, W), Q = t.sub(Q, se), se = t.add(m, y), T = t.add(S, b), se = t.mul(se, T), T = t.add(G, W), se = t.sub(se, T), v = t.mul(_, Q), T = t.mul(V, W), v = t.add(T, v), T = t.sub(G, v), v = t.add(G, v), x = t.mul(T, v), G = t.add(j, j), G = t.add(G, j), W = t.mul(_, W), Q = t.mul(V, Q), G = t.add(G, W), W = t.sub(j, W), W = t.mul(_, W), Q = t.add(Q, W), j = t.mul(G, Q), x = t.add(x, j), j = t.mul(se, Q), T = t.mul(B, T), T = t.sub(T, j), j = t.mul(B, G), v = t.mul(se, v), v = t.add(v, j), new c(T, x, v);\n }\n subtract(l) {\n return this.add(l.negate());\n }\n is0() {\n return this.equals(c.ZERO);\n }\n wNAF(l) {\n return f.wNAFCached(this, a, l, (p) => {\n const m = t.invertBatch(p.map((y) => y.pz));\n return p.map((y, w) => y.toAffine(m[w])).map(c.fromAffine);\n });\n }\n /**\n * Non-constant-time multiplication. Uses double-and-add algorithm.\n * It's faster, but should only be used when you don't care about\n * an exposed private key e.g. sig verification, which works over *public* keys.\n */\n multiplyUnsafe(l) {\n const p = c.ZERO;\n if (l === ti)\n return p;\n if (n(l), l === vt)\n return this;\n const { endo: m } = e;\n if (!m)\n return f.unsafeLadder(this, l);\n let { k1neg: y, k1: w, k2neg: S, k2: b } = m.splitScalar(l), T = p, x = p, v = this;\n for (; w > ti || b > ti; )\n w & vt && (T = T.add(v)), b & vt && (x = x.add(v)), v = v.double(), w >>= vt, b >>= vt;\n return y && (T = T.negate()), S && (x = x.negate()), x = new c(t.mul(x.px, m.beta), x.py, x.pz), T.add(x);\n }\n /**\n * Constant time multiplication.\n * Uses wNAF method. Windowed method may be 10% faster,\n * but takes 2x longer to generate and consumes 2x memory.\n * Uses precomputes when available.\n * Uses endomorphism for Koblitz curves.\n * @param scalar by which the point would be multiplied\n * @returns New point\n */\n multiply(l) {\n n(l);\n let p = l, m, y;\n const { endo: w } = e;\n if (w) {\n const { k1neg: S, k1: b, k2neg: T, k2: x } = w.splitScalar(p);\n let { p: v, f: _ } = this.wNAF(b), { p: V, f: j } = this.wNAF(x);\n v = f.constTimeNegate(S, v), V = f.constTimeNegate(T, V), V = new c(t.mul(V.px, w.beta), V.py, V.pz), m = v.add(V), y = _.add(j);\n } else {\n const { p: S, f: b } = this.wNAF(p);\n m = S, y = b;\n }\n return c.normalizeZ([m, y])[0];\n }\n /**\n * Efficiently calculate `aP + bQ`. Unsafe, can expose private key, if used incorrectly.\n * Not using Strauss-Shamir trick: precomputation tables are faster.\n * The trick could be useful if both P and Q are not G (not in our case).\n * @returns non-zero affine point\n */\n multiplyAndAddUnsafe(l, p, m) {\n const y = c.BASE, w = (b, T) => T === ti || T === vt || !b.equals(y) ? b.multiplyUnsafe(T) : b.multiply(T), S = w(this, p).add(w(l, m));\n return S.is0() ? void 0 : S;\n }\n // Converts Projective point to affine (x, y) coordinates.\n // Can accept precomputed Z^-1 - for example, from invertBatch.\n // (x, y, z) ∋ (x=x/z, y=y/z)\n toAffine(l) {\n const { px: p, py: m, pz: y } = this, w = this.is0();\n l == null && (l = w ? t.ONE : t.inv(y));\n const S = t.mul(p, l), b = t.mul(m, l), T = t.mul(y, l);\n if (w)\n return { x: t.ZERO, y: t.ZERO };\n if (!t.eql(T, t.ONE))\n throw new Error(\"invZ was invalid\");\n return { x: S, y: b };\n }\n isTorsionFree() {\n const { h: l, isTorsionFree: p } = e;\n if (l === vt)\n return !0;\n if (p)\n return p(c, this);\n throw new Error(\"isTorsionFree() has not been declared for the elliptic curve\");\n }\n clearCofactor() {\n const { h: l, clearCofactor: p } = e;\n return l === vt ? this : p ? p(c, this) : this.multiplyUnsafe(e.h);\n }\n toRawBytes(l = !0) {\n return this.assertValidity(), e.toBytes(c, this, l);\n }\n toHex(l = !0) {\n return ki(this.toRawBytes(l));\n }\n }\n c.BASE = new c(e.Gx, e.Gy, t.ONE), c.ZERO = new c(t.ZERO, t.ONE, t.ZERO);\n const u = e.nBitLength, f = Jc(c, e.endo ? Math.ceil(u / 2) : u);\n return {\n ProjectivePoint: c,\n normPrivateKeyToScalar: r,\n weierstrassEquation: i,\n isWithinCurveOrder: s\n };\n}\nfunction Rp(d) {\n const e = ro(d);\n return Bi(e, {\n hash: \"hash\",\n hmac: \"function\",\n randomBytes: \"function\"\n }, {\n bits2int: \"function\",\n bits2int_modN: \"function\",\n lowS: \"boolean\"\n }), Object.freeze({ lowS: !0, ...e });\n}\nfunction Bp(d) {\n const e = Rp(d), t = e.n, i = e.Fp, s = i.BYTES + 1, n = 2 * i.BYTES + 1;\n function r($) {\n return ti < $ && $ < i.ORDER;\n }\n function a($) {\n return _e($, t);\n }\n function o($) {\n return Ma($, t);\n }\n const { ProjectivePoint: c, normPrivateKeyToScalar: u, weierstrassEquation: f, isWithinCurveOrder: h } = Dp({\n ...e,\n toBytes($, te, E) {\n const N = te.toAffine(), L = i.toBytes(N.x), z = ot;\n return E ? z(Uint8Array.from([te.hasEvenY() ? 2 : 3]), L) : z(Uint8Array.from([4]), L, i.toBytes(N.y));\n },\n fromBytes($) {\n const te = $.length, E = $[0], N = $.subarray(1);\n if (te === s && (E === 2 || E === 3)) {\n const L = wt(N);\n if (!r(L))\n throw new Error(\"Point is not on curve\");\n const z = f(L);\n let K = i.sqrt(z);\n const R = (K & vt) === vt;\n return (E & 1) === 1 !== R && (K = i.neg(K)), { x: L, y: K };\n } else if (te === n && E === 4) {\n const L = i.fromBytes(N.subarray(0, i.BYTES)), z = i.fromBytes(N.subarray(i.BYTES, 2 * i.BYTES));\n return { x: L, y: z };\n } else\n throw new Error(`Point of length ${te} was invalid. Expected ${s} compressed bytes or ${n} uncompressed bytes`);\n }\n }), l = ($) => ki(ni($, e.nByteLength));\n function p($) {\n const te = t >> vt;\n return $ > te;\n }\n function m($) {\n return p($) ? a(-$) : $;\n }\n const y = ($, te, E) => wt($.slice(te, E));\n class w {\n constructor(te, E, N) {\n this.r = te, this.s = E, this.recovery = N, this.assertValidity();\n }\n // pair (bytes of r, bytes of s)\n static fromCompact(te) {\n const E = e.nByteLength;\n return te = Ne(\"compactSignature\", te, E * 2), new w(y(te, 0, E), y(te, E, 2 * E));\n }\n // DER encoded ECDSA signature\n // https://bitcoin.stackexchange.com/questions/57644/what-are-the-parts-of-a-bitcoin-transaction-input-script\n static fromDER(te) {\n const { r: E, s: N } = zi.toSig(Ne(\"DER\", te));\n return new w(E, N);\n }\n assertValidity() {\n if (!h(this.r))\n throw new Error(\"r must be 0 < r < CURVE.n\");\n if (!h(this.s))\n throw new Error(\"s must be 0 < s < CURVE.n\");\n }\n addRecoveryBit(te) {\n return new w(this.r, this.s, te);\n }\n recoverPublicKey(te) {\n const { r: E, s: N, recovery: L } = this, z = _(Ne(\"msgHash\", te));\n if (L == null || ![0, 1, 2, 3].includes(L))\n throw new Error(\"recovery id invalid\");\n const K = L === 2 || L === 3 ? E + e.n : E;\n if (K >= i.ORDER)\n throw new Error(\"recovery id 2 or 3 invalid\");\n const R = L & 1 ? \"03\" : \"02\", U = c.fromHex(R + l(K)), Y = o(K), J = a(-z * Y), ae = a(N * Y), A = c.BASE.multiplyAndAddUnsafe(U, J, ae);\n if (!A)\n throw new Error(\"point at infinify\");\n return A.assertValidity(), A;\n }\n // Signatures should be low-s, to prevent malleability.\n hasHighS() {\n return p(this.s);\n }\n normalizeS() {\n return this.hasHighS() ? new w(this.r, a(-this.s), this.recovery) : this;\n }\n // DER-encoded\n toDERRawBytes() {\n return ys(this.toDERHex());\n }\n toDERHex() {\n return zi.hexFromSig({ r: this.r, s: this.s });\n }\n // padded bytes of r, then padded bytes of s\n toCompactRawBytes() {\n return ys(this.toCompactHex());\n }\n toCompactHex() {\n return l(this.r) + l(this.s);\n }\n }\n const S = {\n isValidPrivateKey($) {\n try {\n return u($), !0;\n } catch {\n return !1;\n }\n },\n normPrivateKeyToScalar: u,\n /**\n * Produces cryptographically secure private key from random of size (nBitLength+64)\n * as per FIPS 186 B.4.1 with modulo bias being neglible.\n */\n randomPrivateKey: () => {\n const $ = e.randomBytes(i.BYTES + 8), te = Ep($, t);\n return ni(te, e.nByteLength);\n },\n /**\n * Creates precompute table for an arbitrary EC point. Makes point \"cached\".\n * Allows to massively speed-up `point.multiply(scalar)`.\n * @returns cached point\n * @example\n * const fast = utils.precompute(8, ProjectivePoint.fromHex(someonesPubKey));\n * fast.multiply(privKey); // much faster ECDH now\n */\n precompute($ = 8, te = c.BASE) {\n return te._setWindowSize($), te.multiply(BigInt(3)), te;\n }\n };\n function b($, te = !0) {\n return c.fromPrivateKey($).toRawBytes(te);\n }\n function T($) {\n const te = $ instanceof Uint8Array, E = typeof $ == \"string\", N = (te || E) && $.length;\n return te ? N === s || N === n : E ? N === 2 * s || N === 2 * n : $ instanceof c;\n }\n function x($, te, E = !0) {\n if (T($))\n throw new Error(\"first arg must be private key\");\n if (!T(te))\n throw new Error(\"second arg must be public key\");\n return c.fromHex(te).multiply(u($)).toRawBytes(E);\n }\n const v = e.bits2int || function($) {\n const te = wt($), E = $.length * 8 - e.nBitLength;\n return E > 0 ? te >> BigInt(E) : te;\n }, _ = e.bits2int_modN || function($) {\n return a(v($));\n }, V = Ja(e.nBitLength);\n function j($) {\n if (typeof $ != \"bigint\")\n throw new Error(\"bigint expected\");\n if (!(ti <= $ && $ < V))\n throw new Error(`bigint expected < 2^${e.nBitLength}`);\n return ni($, e.nByteLength);\n }\n function G($, te, E = W) {\n if ([\"recovered\", \"canonical\"].some((q) => q in E))\n throw new Error(\"sign() legacy options not supported\");\n const { hash: N, randomBytes: L } = e;\n let { lowS: z, prehash: K, extraEntropy: R } = E;\n z == null && (z = !0), $ = Ne(\"msgHash\", $), K && ($ = Ne(\"prehashed msgHash\", N($)));\n const U = _($), Y = u(te), J = [j(Y), j(U)];\n if (R != null) {\n const q = R === !0 ? L(i.BYTES) : R;\n J.push(Ne(\"extraEntropy\", q, i.BYTES));\n }\n const ae = ot(...J), A = U;\n function M(q) {\n const H = v(q);\n if (!h(H))\n return;\n const le = o(H), oe = c.BASE.multiply(H).toAffine(), he = a(oe.x);\n if (he === ti)\n return;\n const Ie = a(le * a(A + he * Y));\n if (Ie === ti)\n return;\n let Pe = (oe.x === he ? 0 : 2) | Number(oe.y & vt), He = Ie;\n return z && p(Ie) && (He = m(Ie), Pe ^= 1), new w(he, He, Pe);\n }\n return { seed: ae, k2sig: M };\n }\n const W = { lowS: e.lowS, prehash: !1 }, B = { lowS: e.lowS, prehash: !1 };\n function Q($, te, E = W) {\n const { seed: N, k2sig: L } = G($, te, E);\n return Dc(e.hash.outputLen, e.nByteLength, e.hmac)(N, L);\n }\n c.BASE._setWindowSize(8);\n function se($, te, E, N = B) {\n var oe;\n const L = $;\n if (te = Ne(\"msgHash\", te), E = Ne(\"publicKey\", E), \"strict\" in N)\n throw new Error(\"options.strict was renamed to lowS\");\n const { lowS: z, prehash: K } = N;\n let R, U;\n try {\n if (typeof L == \"string\" || L instanceof Uint8Array)\n try {\n R = w.fromDER(L);\n } catch (he) {\n if (!(he instanceof zi.Err))\n throw he;\n R = w.fromCompact(L);\n }\n else if (typeof L == \"object\" && typeof L.r == \"bigint\" && typeof L.s == \"bigint\") {\n const { r: he, s: Ie } = L;\n R = new w(he, Ie);\n } else\n throw new Error(\"PARSE\");\n U = c.fromHex(E);\n } catch (he) {\n if (he.message === \"PARSE\")\n throw new Error(\"signature must be Signature instance, Uint8Array or hex string\");\n return !1;\n }\n if (z && R.hasHighS())\n return !1;\n K && (te = e.hash(te));\n const { r: Y, s: J } = R, ae = _(te), A = o(J), M = a(ae * A), q = a(Y * A), H = (oe = c.BASE.multiplyAndAddUnsafe(U, M, q)) == null ? void 0 : oe.toAffine();\n return H ? a(H.x) === Y : !1;\n }\n return {\n CURVE: e,\n getPublicKey: b,\n getSharedSecret: x,\n sign: Q,\n verify: se,\n ProjectivePoint: c,\n Signature: w,\n utils: S\n };\n}\nfunction Vp(d, e) {\n const t = d.ORDER;\n let i = 0n;\n for (let h = t - 1n; h % 2n === 0n; h /= 2n)\n i += 1n;\n const s = i, n = (t - 1n) / 2n ** s, r = (n - 1n) / 2n, a = 2n ** s - 1n, o = 2n ** (s - 1n), c = d.pow(e, n), u = d.pow(e, (n + 1n) / 2n);\n let f = (h, l) => {\n let p = c, m = d.pow(l, a), y = d.sqr(m);\n y = d.mul(y, l);\n let w = d.mul(h, y);\n w = d.pow(w, r), w = d.mul(w, m), m = d.mul(w, l), y = d.mul(w, h);\n let S = d.mul(y, m);\n w = d.pow(S, o);\n let b = d.eql(w, d.ONE);\n m = d.mul(y, u), w = d.mul(S, p), y = d.cmov(m, y, b), S = d.cmov(w, S, b);\n for (let T = s; T > 1; T--) {\n let x = 2n ** (T - 2n), v = d.pow(S, x);\n const _ = d.eql(v, d.ONE);\n m = d.mul(y, p), p = d.mul(p, p), v = d.mul(S, p), y = d.cmov(m, y, _), S = d.cmov(v, S, _);\n }\n return { isValid: b, value: y };\n };\n if (d.ORDER % 4n === 3n) {\n const h = (d.ORDER - 3n) / 4n, l = d.sqrt(d.neg(e));\n f = (p, m) => {\n let y = d.sqr(m);\n const w = d.mul(p, m);\n y = d.mul(y, w);\n let S = d.pow(y, h);\n S = d.mul(S, w);\n const b = d.mul(S, l), T = d.mul(d.sqr(S), m), x = d.eql(T, p);\n let v = d.cmov(b, S, x);\n return { isValid: x, value: v };\n };\n }\n return f;\n}\nfunction eu(d, e) {\n if (Qc(d), !d.isValid(e.A) || !d.isValid(e.B) || !d.isValid(e.Z))\n throw new Error(\"mapToCurveSimpleSWU: invalid opts\");\n const t = Vp(d, e.Z);\n if (!d.isOdd)\n throw new Error(\"Fp.isOdd is not implemented!\");\n return (i) => {\n let s, n, r, a, o, c, u, f;\n s = d.sqr(i), s = d.mul(s, e.Z), n = d.sqr(s), n = d.add(n, s), r = d.add(n, d.ONE), r = d.mul(r, e.B), a = d.cmov(e.Z, d.neg(n), !d.eql(n, d.ZERO)), a = d.mul(a, e.A), n = d.sqr(r), c = d.sqr(a), o = d.mul(c, e.A), n = d.add(n, o), n = d.mul(n, r), c = d.mul(c, a), o = d.mul(c, e.B), n = d.add(n, o), u = d.mul(s, r);\n const { isValid: h, value: l } = t(n, c);\n f = d.mul(s, i), f = d.mul(f, l), u = d.cmov(u, r, h), f = d.cmov(f, l, h);\n const p = d.isOdd(i) === d.isOdd(f);\n return f = d.cmov(d.neg(f), f, p), u = d.div(u, a), { x: u, y: f };\n };\n}\nfunction jp(d) {\n if (d instanceof Uint8Array)\n return d;\n if (typeof d == \"string\")\n return ur(d);\n throw new Error(\"DST must be Uint8Array or string\");\n}\nconst Fp = wt;\nfunction Ii(d, e) {\n if (d < 0 || d >= 1 << 8 * e)\n throw new Error(`bad I2OSP call: value=${d} length=${e}`);\n const t = Array.from({ length: e }).fill(0);\n for (let i = e - 1; i >= 0; i--)\n t[i] = d & 255, d >>>= 8;\n return new Uint8Array(t);\n}\nfunction Up(d, e) {\n const t = new Uint8Array(d.length);\n for (let i = 0; i < d.length; i++)\n t[i] = d[i] ^ e[i];\n return t;\n}\nfunction Ks(d) {\n if (!(d instanceof Uint8Array))\n throw new Error(\"Uint8Array expected\");\n}\nfunction ao(d) {\n if (!Number.isSafeInteger(d))\n throw new Error(\"number expected\");\n}\nfunction qp(d, e, t, i) {\n Ks(d), Ks(e), ao(t), e.length > 255 && (e = i(ot(ur(\"H2C-OVERSIZE-DST-\"), e)));\n const { outputLen: s, blockLen: n } = i, r = Math.ceil(t / s);\n if (r > 255)\n throw new Error(\"Invalid xmd length\");\n const a = ot(e, Ii(e.length, 1)), o = Ii(0, n), c = Ii(t, 2), u = new Array(r), f = i(ot(o, d, c, Ii(0, 1), a));\n u[0] = i(ot(f, Ii(1, 1), a));\n for (let l = 1; l <= r; l++) {\n const p = [Up(f, u[l - 1]), Ii(l + 1, 1), a];\n u[l] = i(ot(...p));\n }\n return ot(...u).slice(0, t);\n}\nfunction Gp(d, e, t, i, s) {\n if (Ks(d), Ks(e), ao(t), e.length > 255) {\n const n = Math.ceil(2 * i / 8);\n e = s.create({ dkLen: n }).update(ur(\"H2C-OVERSIZE-DST-\")).update(e).digest();\n }\n if (t > 65535 || e.length > 255)\n throw new Error(\"expand_message_xof: invalid lenInBytes\");\n return s.create({ dkLen: t }).update(d).update(Ii(t, 2)).update(e).update(Ii(e.length, 1)).digest();\n}\nfunction sd(d, e, t) {\n Bi(t, {\n DST: \"string\",\n p: \"bigint\",\n m: \"isSafeInteger\",\n k: \"isSafeInteger\",\n hash: \"hash\"\n });\n const { p: i, k: s, m: n, hash: r, expand: a, DST: o } = t;\n Ks(d), ao(e);\n const c = jp(o), u = i.toString(2).length, f = Math.ceil((u + s) / 8), h = e * n * f;\n let l;\n if (a === \"xmd\")\n l = qp(d, c, h, r);\n else if (a === \"xof\")\n l = Gp(d, c, h, s, r);\n else if (a === void 0)\n l = d;\n else\n throw new Error('expand must be \"xmd\", \"xof\" or undefined');\n const p = new Array(e);\n for (let m = 0; m < e; m++) {\n const y = new Array(n);\n for (let w = 0; w < n; w++) {\n const S = f * (w + m * n), b = l.subarray(S, S + f);\n y[w] = _e(Fp(b), i);\n }\n p[m] = y;\n }\n return p;\n}\nfunction zp(d, e) {\n const t = e.map((i) => Array.from(i).reverse());\n return (i, s) => {\n const [n, r, a, o] = t.map((c) => c.reduce((u, f) => d.add(d.mul(u, i), f)));\n return i = d.div(n, r), s = d.mul(s, d.div(a, o)), { x: i, y: s };\n };\n}\nfunction oo(d, e, t) {\n if (typeof e != \"function\")\n throw new Error(\"mapToCurve() must be defined\");\n return {\n // Encodes byte string to elliptic curve\n // https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-hash-to-curve-16#section-3\n hashToCurve(i, s) {\n const n = sd(i, 2, { ...t, DST: t.DST, ...s }), r = d.fromAffine(e(n[0])), a = d.fromAffine(e(n[1])), o = r.add(a).clearCofactor();\n return o.assertValidity(), o;\n },\n // https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-hash-to-curve-16#section-3\n encodeToCurve(i, s) {\n const n = sd(i, 1, { ...t, DST: t.encodeDST, ...s }), r = d.fromAffine(e(n[0])).clearCofactor();\n return r.assertValidity(), r;\n }\n };\n}\nfunction Hp(d) {\n return {\n hash: d,\n hmac: (e, ...t) => to(d, e, Wc(...t)),\n randomBytes: hr\n };\n}\nfunction tu(d, e) {\n const t = (i) => Bp({ ...d, ...Hp(i) });\n return Object.freeze({ ...t(e), create: t });\n}\nconst lr = BigInt(\"0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f\"), zn = BigInt(\"0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141\"), iu = BigInt(1), Ca = BigInt(2), nd = (d, e) => (d + e / Ca) / e;\nfunction su(d) {\n const e = lr, t = BigInt(3), i = BigInt(6), s = BigInt(11), n = BigInt(22), r = BigInt(23), a = BigInt(44), o = BigInt(88), c = d * d * d % e, u = c * c * d % e, f = Ge(u, t, e) * u % e, h = Ge(f, t, e) * u % e, l = Ge(h, Ca, e) * c % e, p = Ge(l, s, e) * l % e, m = Ge(p, n, e) * p % e, y = Ge(m, a, e) * m % e, w = Ge(y, o, e) * y % e, S = Ge(w, a, e) * m % e, b = Ge(S, t, e) * u % e, T = Ge(b, r, e) * p % e, x = Ge(T, i, e) * c % e, v = Ge(x, Ca, e);\n if (!Ei.eql(Ei.sqr(v), d))\n throw new Error(\"Cannot find square root\");\n return v;\n}\nconst Ei = no(lr, void 0, void 0, { sqrt: su }), an = tu({\n a: BigInt(0),\n b: BigInt(7),\n Fp: Ei,\n n: zn,\n // Base point (x, y) aka generator point\n Gx: BigInt(\"55066263022277343669578718895168534326250603453777594175500187360389116729240\"),\n Gy: BigInt(\"32670510020758816978083085130507043184471273380659243275938904335757337482424\"),\n h: BigInt(1),\n lowS: !0,\n /**\n * secp256k1 belongs to Koblitz curves: it has efficiently computable endomorphism.\n * Endomorphism uses 2x less RAM, speeds up precomputation by 2x and ECDH / key recovery by 20%.\n * For precomputed wNAF it trades off 1/2 init time & 1/3 ram for 20% perf hit.\n * Explanation: https://gist.github.com/paulmillr/eb670806793e84df628a7c434a873066\n */\n endo: {\n beta: BigInt(\"0x7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee\"),\n splitScalar: (d) => {\n const e = zn, t = BigInt(\"0x3086d221a7d46bcde86c90e49284eb15\"), i = -iu * BigInt(\"0xe4437ed6010e88286f547fa90abfe4c3\"), s = BigInt(\"0x114ca50f7a8e2f3f657c1108d9d44cfd8\"), n = t, r = BigInt(\"0x100000000000000000000000000000000\"), a = nd(n * d, e), o = nd(-i * d, e);\n let c = _e(d - a * t - o * s, e), u = _e(-a * i - o * n, e);\n const f = c > r, h = u > r;\n if (f && (c = e - c), h && (u = e - u), c > r || u > r)\n throw new Error(\"splitScalar: Endomorphism failed, k=\" + d);\n return { k1neg: f, k1: c, k2neg: h, k2: u };\n }\n }\n}, Re), co = BigInt(0), nu = (d) => typeof d == \"bigint\" && co < d && d < lr, Wp = (d) => typeof d == \"bigint\" && co < d && d < zn, rd = {};\nfunction Hn(d, ...e) {\n let t = rd[d];\n if (t === void 0) {\n const i = Re(Uint8Array.from(d, (s) => s.charCodeAt(0)));\n t = ot(i, i), rd[d] = t;\n }\n return Re(ot(t, ...e));\n}\nconst uo = (d) => d.toRawBytes(!0).slice(1), xa = (d) => ni(d, 32), qr = (d) => _e(d, lr), Xs = (d) => _e(d, zn), fo = an.ProjectivePoint, Yp = (d, e, t) => fo.BASE.multiplyAndAddUnsafe(d, e, t);\nfunction va(d) {\n let e = an.utils.normPrivateKeyToScalar(d), t = fo.fromPrivateKey(e);\n return { scalar: t.hasEvenY() ? e : Xs(-e), bytes: uo(t) };\n}\nfunction ru(d) {\n if (!nu(d))\n throw new Error(\"bad x: need 0 < x < p\");\n const e = qr(d * d), t = qr(e * d + BigInt(7));\n let i = su(t);\n i % 2n !== 0n && (i = qr(-i));\n const s = new fo(d, i, iu);\n return s.assertValidity(), s;\n}\nfunction au(...d) {\n return Xs(wt(Hn(\"BIP0340/challenge\", ...d)));\n}\nfunction Kp(d) {\n return va(d).bytes;\n}\nfunction Xp(d, e, t = hr(32)) {\n const i = Ne(\"message\", d), { bytes: s, scalar: n } = va(e), r = Ne(\"auxRand\", t, 32), a = xa(n ^ wt(Hn(\"BIP0340/aux\", r))), o = Hn(\"BIP0340/nonce\", a, s, i), c = Xs(wt(o));\n if (c === co)\n throw new Error(\"sign failed: k is zero\");\n const { bytes: u, scalar: f } = va(c), h = au(u, s, i), l = new Uint8Array(64);\n if (l.set(u, 0), l.set(xa(Xs(f + h * n)), 32), !ou(l, i, s))\n throw new Error(\"sign: Invalid signature produced\");\n return l;\n}\nfunction ou(d, e, t) {\n const i = Ne(\"signature\", d, 64), s = Ne(\"message\", e), n = Ne(\"publicKey\", t, 32);\n try {\n const r = ru(wt(n)), a = wt(i.subarray(0, 32));\n if (!nu(a))\n return !1;\n const o = wt(i.subarray(32, 64));\n if (!Wp(o))\n return !1;\n const c = au(xa(a), uo(r), s), u = Yp(r, o, Xs(-c));\n return !(!u || !u.hasEvenY() || u.toAffine().x !== a);\n } catch {\n return !1;\n }\n}\nan.utils.randomPrivateKey;\nconst $p = zp(Ei, [\n // xNum\n [\n \"0x8e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38daaaaa8c7\",\n \"0x7d3d4c80bc321d5b9f315cea7fd44c5d595d2fc0bf63b92dfff1044f17c6581\",\n \"0x534c328d23f234e6e2a413deca25caece4506144037c40314ecbd0b53d9dd262\",\n \"0x8e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38daaaaa88c\"\n ],\n // xDen\n [\n \"0xd35771193d94918a9ca34ccbb7b640dd86cd409542f8487d9fe6b745781eb49b\",\n \"0xedadc6f64383dc1df7c4b2d51b54225406d36b641f5e41bbc52a56612a8c6d14\",\n \"0x0000000000000000000000000000000000000000000000000000000000000001\"\n // LAST 1\n ],\n // yNum\n [\n \"0x4bda12f684bda12f684bda12f684bda12f684bda12f684bda12f684b8e38e23c\",\n \"0xc75e0c32d5cb7c0fa9d0a54b12a0a6d5647ab046d686da6fdffc90fc201d71a3\",\n \"0x29a6194691f91a73715209ef6512e576722830a201be2018a765e85a9ecee931\",\n \"0x2f684bda12f684bda12f684bda12f684bda12f684bda12f684bda12f38e38d84\"\n ],\n // yDen\n [\n \"0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffff93b\",\n \"0x7a06534bb8bdb49fd5e9e6632722c2989467c1bfc8e8d978dfb425d2685c2573\",\n \"0x6484aa716545ca2cf3a70c3fa8fe337e0a3d21162f0d6299a7bf8192bfd2a76f\",\n \"0x0000000000000000000000000000000000000000000000000000000000000001\"\n // LAST 1\n ]\n].map((d) => d.map((e) => BigInt(e)))), Zp = eu(Ei, {\n A: BigInt(\"0x3f8731abdd661adca08a5558f0f5d272e953d363cb6f0e5d405447c01a444533\"),\n B: BigInt(\"1771\"),\n Z: Ei.create(BigInt(\"-11\"))\n});\noo(an.ProjectivePoint, (d) => {\n const { x: e, y: t } = Zp(Ei.create(d[0]));\n return $p(e, t);\n}, {\n DST: \"secp256k1_XMD:SHA-256_SSWU_RO_\",\n encodeDST: \"secp256k1_XMD:SHA-256_SSWU_NU_\",\n p: Ei.ORDER,\n m: 1,\n k: 128,\n expand: \"xmd\",\n hash: Re\n});\nconst $s = no(BigInt(\"0xffffffff00000001000000000000000000000000ffffffffffffffffffffffff\")), du = $s.create(BigInt(\"-3\")), cu = BigInt(\"0x5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b\"), Qp = eu($s, {\n A: du,\n B: cu,\n Z: $s.create(BigInt(\"-10\"))\n}), ho = tu({\n // Params: a, b\n a: du,\n b: cu,\n Fp: $s,\n // Curve order, total count of valid points in the field\n n: BigInt(\"0xffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551\"),\n // Base point (x, y) aka generator point\n Gx: BigInt(\"0x6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296\"),\n Gy: BigInt(\"0x4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5\"),\n h: BigInt(1),\n lowS: !1\n}, Re), Jp = ho;\noo(Jp.ProjectivePoint, (d) => Qp(d[0]), {\n DST: \"P256_XMD:SHA-256_SSWU_RO_\",\n encodeDST: \"P256_XMD:SHA-256_SSWU_NU_\",\n p: $s.ORDER,\n m: 1,\n k: 128,\n expand: \"xmd\",\n hash: Re\n});\nconst uu = {\n binary: (d) => d,\n hex: Ri.encode,\n base64: pi.encode\n}, ad = {\n \"1.3.132.0.10\": an,\n \"1.2.840.10045.3.1.7\": ho\n}, fu = (d, e, t = \"hex\") => {\n const i = e(d);\n return uu[t](i);\n}, lo = (d, e, t, i = \"hex\") => {\n const s = to(t, e, d);\n return uu[i](s);\n};\nfunction hu(d, e, t, i = null, s = !1) {\n if (i && (d = fu(d, i, \"hex\")), typeof e == \"string\" && e.length > 64)\n if (e.startsWith(\"-----BEGIN EC PRIVATE KEY-----\")) {\n const c = Ys.unarmor(e);\n let u = Gi.decode(c);\n if (u.sub.length === 4) {\n if (typeof u.sub[2].sub !== null && u.sub[2].sub.length > 0) {\n const f = u.sub[2].sub[0].content(void 0);\n if (ad[f] === void 0)\n throw new Error(\"Unsupported curve\");\n t = ad[f];\n }\n e = u.sub[1].getHexStringValue();\n } else\n throw new Error(\"Unsupported key format\");\n } else\n throw new Error(\"Unsupported key format\");\n let n = t.sign(d, e, {\n lowS: !0\n });\n const r = (BigInt(1) << BigInt(8) * BigInt(31)) - BigInt(1), a = t.CURVE.n / BigInt(2);\n let o = 0;\n for (; s && (n.r > a || n.r <= r || n.s <= r); )\n n = t.sign(d, e, {\n lowS: !0,\n extraEntropy: Kt(BigInt(o), 32)\n }), o += 1;\n return {\n r: n.r.toString(16),\n s: n.s.toString(16),\n v: n.recovery\n };\n}\nfunction lu(d, e, t) {\n const i = t.signModified(d, e);\n return ms.encode(i);\n}\nfunction pu(d, e, t) {\n let i;\n e.length === 32 ? i = e : typeof e == \"string\" && (i = new Uint8Array(Ys.unarmor(e).slice(16)));\n const s = t.sign(d, i);\n return pi.encode(s);\n}\nfunction Ln(d, e = !1) {\n const t = \"00000000 77073096 EE0E612C 990951BA 076DC419 706AF48F E963A535 9E6495A3 0EDB8832 79DCB8A4 E0D5E91E 97D2D988 09B64C2B 7EB17CBD E7B82D07 90BF1D91 1DB71064 6AB020F2 F3B97148 84BE41DE 1ADAD47D 6DDDE4EB F4D4B551 83D385C7 136C9856 646BA8C0 FD62F97A 8A65C9EC 14015C4F 63066CD9 FA0F3D63 8D080DF5 3B6E20C8 4C69105E D56041E4 A2677172 3C03E4D1 4B04D447 D20D85FD A50AB56B 35B5A8FA 42B2986C DBBBC9D6 ACBCF940 32D86CE3 45DF5C75 DCD60DCF ABD13D59 26D930AC 51DE003A C8D75180 BFD06116 21B4F4B5 56B3C423 CFBA9599 B8BDA50F 2802B89E 5F058808 C60CD9B2 B10BE924 2F6F7C87 58684C11 C1611DAB B6662D3D 76DC4190 01DB7106 98D220BC EFD5102A 71B18589 06B6B51F 9FBFE4A5 E8B8D433 7807C9A2 0F00F934 9609A88E E10E9818 7F6A0DBB 086D3D2D 91646C97 E6635C01 6B6B51F4 1C6C6162 856530D8 F262004E 6C0695ED 1B01A57B 8208F4C1 F50FC457 65B0D9C6 12B7E950 8BBEB8EA FCB9887C 62DD1DDF 15DA2D49 8CD37CF3 FBD44C65 4DB26158 3AB551CE A3BC0074 D4BB30E2 4ADFA541 3DD895D7 A4D1C46D D3D6F4FB 4369E96A 346ED9FC AD678846 DA60B8D0 44042D73 33031DE5 AA0A4C5F DD0D7CC9 5005713C 270241AA BE0B1010 C90C2086 5768B525 206F85B3 B966D409 CE61E49F 5EDEF90E 29D9C998 B0D09822 C7D7A8B4 59B33D17 2EB40D81 B7BD5C3B C0BA6CAD EDB88320 9ABFB3B6 03B6E20C 74B1D29A EAD54739 9DD277AF 04DB2615 73DC1683 E3630B12 94643B84 0D6D6A3E 7A6A5AA8 E40ECF0B 9309FF9D 0A00AE27 7D079EB1 F00F9344 8708A3D2 1E01F268 6906C2FE F762575D 806567CB 196C3671 6E6B06E7 FED41B76 89D32BE0 10DA7A5A 67DD4ACC F9B9DF6F 8EBEEFF9 17B7BE43 60B08ED5 D6D6A3E8 A1D1937E 38D8C2C4 4FDFF252 D1BB67F1 A6BC5767 3FB506DD 48B2364B D80D2BDA AF0A1B4C 36034AF6 41047A60 DF60EFC3 A867DF55 316E8EEF 4669BE79 CB61B38C BC66831A 256FD2A0 5268E236 CC0C7795 BB0B4703 220216B9 5505262F C5BA3BBE B2BD0B28 2BB45A92 5CB36A04 C2D7FFA7 B5D0CF31 2CD99E8B 5BDEAE1D 9B64C2B0 EC63F226 756AA39C 026D930A 9C0906A9 EB0E363F 72076785 05005713 95BF4A82 E2B87A14 7BB12BAE 0CB61B38 92D28E9B E5D5BE0D 7CDCEFB7 0BDBDF21 86D3D2D4 F1D4E242 68DDB3F8 1FDA836E 81BE16CD F6B9265B 6FB077E1 18B74777 88085AE6 FF0F6A70 66063BCA 11010B5C 8F659EFF F862AE69 616BFFD3 166CCF45 A00AE278 D70DD2EE 4E048354 3903B3C2 A7672661 D06016F7 4969474D 3E6E77DB AED16A4A D9D65ADC 40DF0B66 37D83BF0 A9BCAE53 DEBB9EC5 47B2CF7F 30B5FFE9 BDBDF21C CABAC28A 53B39330 24B4A3A6 BAD03605 CDD70693 54DE5729 23D967BF B3667A2E C4614AB8 5D681B02 2A6F2B94 B40BBE37 C30C8EA1 5A05DF1B 2D02EF8D\";\n Ln.table === void 0 && (Ln.table = t.split(\" \").map((n) => parseInt(n, 16)));\n let i = -1;\n for (let n = 0; n < d.length; n++)\n i = i >>> 8 ^ Ln.table[(i ^ d.charCodeAt(n)) & 255];\n const s = (i ^ -1) >>> 0;\n return e && s >= 2147483648 ? s - 4294967296 : s;\n}\nconst Yt = Date.now, gu = () => Yt() * 1e3, eg = Yt, tg = () => Math.floor(Yt() / 1e3), ig = () => {\n const i = (gu() * 10 + 122192928e9).toString(16), s = i.slice(7, 15) + i.slice(3, 7) + \"1\" + i.slice(0, 3), n = \"9696\", r = \"ff\".repeat(6);\n return s + n + r;\n}, sg = setTimeout, pr = (d, e, t = sg, i = Yt() + e) => {\n if (e >= 2147483647)\n throw new Error(\"setTimeout() function was called with unrealistic value of \" + e.toString());\n let s = () => {\n }, n = !0;\n const r = t(() => {\n n = !0;\n const a = i - Yt();\n a > 0 ? s = pr(d, a, t, i) : d();\n }, e);\n return function() {\n n && (n = !1, clearTimeout(r)), s();\n };\n};\nclass Zs extends Error {\n constructor() {\n const e = \"timed out\";\n super(e), this.constructor = Zs, this.__proto__ = Zs.prototype, this.message = e;\n }\n}\nconst ng = (d) => {\n let e;\n if (typeof d == \"number\" ? e = Math.floor(d) : e = parseInt(d, 10), !(Number.isNaN(e) || e < 0))\n try {\n return new Date(e).toISOString();\n } catch {\n return;\n }\n}, mu = (d) => {\n if (!(typeof d != \"string\" || !d) && !d.match(/^[0-9]+$/) && !(d.indexOf(\"-\") < 0 || d.indexOf(\":\") < 0))\n try {\n const e = Date.parse(d.indexOf(\"+\") >= 0 || d.slice(-1) === \"Z\" ? d : (d + \"Z\").replace(/\\s(\\d\\d):/, \"T$1:\"));\n return Number.isNaN(e) ? void 0 : e;\n } catch {\n return;\n }\n}, rg = (d) => {\n if (!(typeof d != \"string\" || !d)) {\n if (d.indexOf(\"GMT\") >= 0)\n try {\n return Date.parse(d);\n } catch {\n return;\n }\n return mu(d);\n }\n}, ag = (d = void 0) => new Date(d).toUTCString(), og = (d, e = \"-\") => {\n e = e || \"\";\n const t = new Date(d), i = t.getUTCFullYear().toString();\n let s = t.getUTCMonth() + 1, n = t.getUTCDate();\n return s = s < 10 ? \"0\" + s : s.toString(), n = n < 10 ? \"0\" + n : n.toString(), s + e + n + e + i;\n}, po = (d, e, t = !0) => {\n e = e || \"\";\n const i = new Date(d), s = i.getUTCFullYear(), r = (t ? s : s - 2e3).toString();\n let a = i.getUTCMonth() + 1, o = i.getUTCDate();\n return a = a < 10 ? \"0\" + a : a.toString(), o = o < 10 ? \"0\" + o : o.toString(), r + e + a + e + o;\n}, dg = (d, e = \"\") => po(d, e, !1), cg = (d, e = \"-\") => po(d, e, !0), ug = (d, e = \" \") => {\n const t = new Date(d), i = t.getUTCFullYear();\n let s = t.getUTCMonth() + 1, n = t.getUTCDate(), r = t.getUTCHours(), a = t.getUTCMinutes(), o = t.getUTCSeconds();\n return s = s < 10 ? \"0\" + s : s, n = n < 10 ? \"0\" + n : n, r = r < 10 ? \"0\" + r : r, a = a < 10 ? \"0\" + a : a, o = o < 10 ? \"0\" + o : o, i + \"-\" + s + \"-\" + n + e + r + \":\" + a + \":\" + o;\n}, yu = (d) => new Promise((e) => pr(e, d)), fg = async (d, e) => {\n let t = () => {\n };\n const i = new Promise((s) => t = pr(s, d));\n try {\n return await Promise.race([e, i.then(() => {\n throw new Zs();\n })]);\n } finally {\n t();\n }\n};\nvar ce;\n(function(d) {\n d[d.DEFAULT_ERROR = 1e4] = \"DEFAULT_ERROR\", d[d.INVALID_PARAMS = 10001] = \"INVALID_PARAMS\", d[d.INVALID_CACHE = 10002] = \"INVALID_CACHE\", d[d.INVALID_ADDRESS = 10003] = \"INVALID_ADDRESS\", d[d.FETCH_FROM_CACHE_ERROR = 10004] = \"FETCH_FROM_CACHE_ERROR\", d[d.INTERNAL_ERROR = 11e3] = \"INTERNAL_ERROR\", d[d.INVALID_EXCHANGE_ID = 11001] = \"INVALID_EXCHANGE_ID\", d[d.INVALID_EXCHANGE_INSTANCE_ID = 11002] = \"INVALID_EXCHANGE_INSTANCE_ID\", d[d.AUTHENTICATION_ERROR = 12e3] = \"AUTHENTICATION_ERROR\", d[d.INVALID_CREDENTIALS = 12001] = \"INVALID_CREDENTIALS\", d[d.AUTHENTICATION_FLOW_NOT_SUPPORTED = 12002] = \"AUTHENTICATION_FLOW_NOT_SUPPORTED\", d[d.OAUTH_ACCESS_REVOKED = 12003] = \"OAUTH_ACCESS_REVOKED\", d[d.WITHDRAWAL_ERROR = 13e3] = \"WITHDRAWAL_ERROR\", d[d.READONLY_EXCHANGE_NOT_PROVIDED_ERROR = 13001] = \"READONLY_EXCHANGE_NOT_PROVIDED_ERROR\", d[d.TOKEN_SYMBOL_NOT_FOUND = 13002] = \"TOKEN_SYMBOL_NOT_FOUND\", d[d.WITHDRAWAL_NOT_FOUND = 13003] = \"WITHDRAWAL_NOT_FOUND\", d[d.UNDER_WITHDRAW_MINIMUM = 13004] = \"UNDER_WITHDRAW_MINIMUM\", d[d.OVER_WITHDRAW_MAXIMUM = 13005] = \"OVER_WITHDRAW_MAXIMUM\", d[d.WHITELIST_CHECK_FAILED = 13006] = \"WHITELIST_CHECK_FAILED\", d[d.WITHDRAWAL_FORBIDDEN = 13007] = \"WITHDRAWAL_FORBIDDEN\", d[d.TRADE_ERROR = 14e3] = \"TRADE_ERROR\", d[d.MARKET_ERROR = 14001] = \"MARKET_ERROR\", d[d.MARKET_NOT_FOUND = 14002] = \"MARKET_NOT_FOUND\", d[d.ORDER_NOT_FOUND = 14003] = \"ORDER_NOT_FOUND\", d[d.MARKET_NOT_LOADED = 14004] = \"MARKET_NOT_LOADED\", d[d.MARKET_TYPE_NOT_SUPPORTED = 14005] = \"MARKET_TYPE_NOT_SUPPORTED\", d[d.INVALID_OHLCV_FORMAT = 14006] = \"INVALID_OHLCV_FORMAT\", d[d.CANNOT_PROVIDE_OHLCV = 14007] = \"CANNOT_PROVIDE_OHLCV\", d[d.PORTFOLIO_ERROR = 15e3] = \"PORTFOLIO_ERROR\", d[d.NOT_ENOUGH_BALANCE = 15001] = \"NOT_ENOUGH_BALANCE\", d[d.DEPOSIT_ERROR = 16e3] = \"DEPOSIT_ERROR\", d[d.GET_DEPOSIT_ADDRESS = 16001] = \"GET_DEPOSIT_ADDRESS\", d[d.CREATE_DEPOSIT_ADDRESS = 16002] = \"CREATE_DEPOSIT_ADDRESS\", d[d.DEPOSIT_NOT_FOUND = 16003] = \"DEPOSIT_NOT_FOUND\", d[d.NETWORK_ERROR = 17e3] = \"NETWORK_ERROR\", d[d.NETWORK_NOT_FOUND = 17001] = \"NETWORK_NOT_FOUND\", d[d.NETWORK_NOT_FOUND_FOR_TOKEN_SYMBOL = 17002] = \"NETWORK_NOT_FOUND_FOR_TOKEN_SYMBOL\", d[d.API_ERROR = 18e3] = \"API_ERROR\", d[d.INVALID_API_REQUEST = 18001] = \"INVALID_API_REQUEST\", d[d.INTERNAL_API_EXCEPTION = 18002] = \"INTERNAL_API_EXCEPTION\", d[d.EXCHANGE_ERROR = 19e3] = \"EXCHANGE_ERROR\", d[d.EXCHANGE_SERVER_DOWN = 19001] = \"EXCHANGE_SERVER_DOWN\", d[d.EXCHANGE_UNDER_MAINTENANCE = 19002] = \"EXCHANGE_UNDER_MAINTENANCE\", d[d.EXCHANGE_REQUEST_EXPIRED = 19003] = \"EXCHANGE_REQUEST_EXPIRED\", d[d.EXCHANGE_INVALID_PERMISSION = 19004] = \"EXCHANGE_INVALID_PERMISSION\", d[d.EXCHANGE_TRANSFER_NOT_ALLOWED = 19005] = \"EXCHANGE_TRANSFER_NOT_ALLOWED\", d[d.EXCHANGE_TRANSFER_ERROR = 19006] = \"EXCHANGE_TRANSFER_ERROR\", d[d.EXCHANGE_DDOS_PROTECTION = 19007] = \"EXCHANGE_DDOS_PROTECTION\", d[d.EXCHANGE_RATE_LIMIT_EXCEEDED = 19008] = \"EXCHANGE_RATE_LIMIT_EXCEEDED\", d[d.EXCHANGE_INTERNAL_ERROR = 19009] = \"EXCHANGE_INTERNAL_ERROR\", d[d.EXCHANGE_UNKNOWN_ASSET = 19010] = \"EXCHANGE_UNKNOWN_ASSET\", d[d.EXCHANGE_OPERATION_FAILED = 19011] = \"EXCHANGE_OPERATION_FAILED\", d[d.EXCHANGE_ACCOUNT_SUSPENDED = 19012] = \"EXCHANGE_ACCOUNT_SUSPENDED\", d[d.EXCHANGE_NOT_ALLOWED_METHOD = 19013] = \"EXCHANGE_NOT_ALLOWED_METHOD\", d[d.EXCHANGE_NOT_AVAILABLE = 19014] = \"EXCHANGE_NOT_AVAILABLE\", d[d.EXCHANGE_INVALID_NONCE = 19015] = \"EXCHANGE_INVALID_NONCE\", d[d.EXCHANGE_UNAVAILABLE_IN_COUNTRY = 19016] = \"EXCHANGE_UNAVAILABLE_IN_COUNTRY\", d[d.EXCHANGE_WALLET_TYPE_NOT_SUPPORTED = 19017] = \"EXCHANGE_WALLET_TYPE_NOT_SUPPORTED\", d[d.SUB_ACCOUNT_ERROR = 2e4] = \"SUB_ACCOUNT_ERROR\", d[d.SUB_ACCOUNT_NOT_FOUND_ERROR = 20001] = \"SUB_ACCOUNT_NOT_FOUND_ERROR\";\n})(ce || (ce = {}));\nconst ye = {\n DEFAULT_ERROR: \"Default error\",\n INVALID_PARAMS: (d) => `Invalid params: ${d}`,\n INVALID_CACHE: (d) => `Invalid cache state for key: ${d}`,\n INVALID_ADDRESS: \"Invalid address\",\n FETCH_FROM_CACHE_ERROR: (d) => `An error occured while fetching from the cache: ${d}`,\n INTERNAL_ERROR: \"Internal error\",\n INVALID_EXCHANGE_INSTANCE_ID: (d) => `Invalid exchange instance id: ${d}`,\n INVALID_EXCHANGE_ID: (d) => `Invalid exchange id: ${d}`,\n AUTHENTICATION_ERROR: \"Authentication error\",\n INVALID_CREDENTIALS: \"Invalid credentials provided\",\n AUTHENTICATION_FLOW_NOT_SUPPORTED: \"Authentication flow not supported\",\n OAUTH_ACCESS_REVOKED: \"OAuth access revoked\",\n WITHDRAWAL_ERROR: \"Withdrawal error\",\n READONLY_EXCHANGE_NOT_PROVIDED_ERROR: \"Readonly exchange account not provided\",\n TOKEN_SYMBOL_NOT_FOUND: (d) => `Token symbol not found: ${d}`,\n WITHDRAWAL_NOT_FOUND: \"Withdrawal not found\",\n UNDER_WITHDRAW_MINIMUM: \"Under withdrawal minimum\",\n OVER_WITHDRAW_MAXIMUM: \"Over withdrawal maximum\",\n WHITELIST_CHECK_FAILED: \"The receipt address has not been whitelisted\",\n WITHDRAWAL_FORBIDDEN: \"Withdrawal forbidden\",\n TRADE_ERROR: \"Trade error\",\n MARKET_ERROR: \"Market error\",\n MARKET_NOT_FOUND: (d) => `Market not found: ${d}`,\n ORDER_NOT_FOUND: \"Order not found\",\n MARKET_NOT_LOADED: \"Market not loaded\",\n MARKET_TYPE_NOT_SUPPORTED: (d) => `Market type not supported: ${d}`,\n ORDER_UNDER_MINIMUM: \"Order quantity below minimum limit. Please use getMinAmounts() to get the minimum quantity for the order.\",\n INVALID_OHLCV_FORMAT: (d) => `Invalid OHLCV format: ${d}`,\n CANNOT_PROVIDE_OHLCV: \"Cannot provide OHLCV data\",\n PORTFOLIO_ERROR: \"Portfolio error\",\n NOT_ENOUGH_BALANCE: \"Not enough balance\",\n DEPOSIT_ERROR: \"Deposit error\",\n DEPOSIT_NOT_FOUND: \"Deposit not found\",\n GET_DEPOSIT_ADDRESS: (d, e) => `An error occured while fetching the deposit address for token symbol ${d}${e ? \" on network \" + e : \"\"}`,\n CREATE_DEPOSIT_ADDRESS: (d, e) => `An error occured while creating the deposit address for token symbol ${d}${e ? \" on network \" + e : \"\"}`,\n NETWORK_ERROR: \"Network error\",\n NETWORK_NOT_FOUND: (d) => `Network not found: ${d}`,\n NETWORK_NOT_FOUND_FOR_TOKEN_SYMBOL: (d) => `Network not found for token symbol: ${d}`,\n API_ERROR: \"API error\",\n INVALID_API_REQUEST: (d) => `Invalid request: ${d}`,\n EXCHANGE_ERROR: \"Exchange error\",\n EXCHANGE_SERVER_DOWN: \"Exchange server down\",\n EXCHANGE_UNDER_MAINTENANCE: \"Exchange under maintenance\",\n EXCHANGE_REQUEST_EXPIRED: \"Exchange request expired\",\n EXCHANGE_INVALID_PERMISSION: \"Missing API permissions, please reimport your API key with the valid permissions\",\n EXCHANGE_TRANSFER_NOT_ALLOWED: \"Transfer not allowed\",\n EXCHANGE_TRANSFER_ERROR: \"Transfer error\",\n EXCHANGE_DDOS_PROTECTION: \"DDoS protection error\",\n EXCHANGE_RATE_LIMIT_EXCEEDED: \"Rate limit exceeded\",\n EXCHANGE_INTERNAL_ERROR: \"Internal exchange error\",\n EXCHANGE_UNKNOWN_ASSET: (d) => `Unknown asset ${d}`,\n EXCHANGE_OPERATION_FAILED: \"Operation failed\",\n EXCHANGE_ACCOUNT_SUSPENDED: \"Account suspended\",\n EXCHANGE_NOT_ALLOWED_METHOD: (d) => `Method not allowed: ${d}`,\n EXCHANGE_NOT_AVAILABLE: \"Exchange not available\",\n EXCHANGE_INVALID_NONCE: \"Invalid nonce\",\n EXCHANGE_UNAVAILABLE_IN_COUNTRY: \"Exchange unavailable in the country\",\n EXCHANGE_WALLET_TYPE_NOT_SUPPORTED: (d) => `Wallet type ${d} not supported or not available for transfers`,\n SUB_ACCOUNT_ERROR: \"Sub account error\",\n SUB_ACCOUNT_NOT_FOUND_ERROR: (d) => `Sub account not found for uid: ${d}`\n};\nce.DEFAULT_ERROR + \"\", ce.INVALID_PARAMS + \"\", ce.INVALID_CACHE + \"\", ce.INVALID_ADDRESS + \"\", ce.FETCH_FROM_CACHE_ERROR + \"\", ce.INTERNAL_ERROR + \"\", ce.INVALID_EXCHANGE_INSTANCE_ID + \"\", ce.INVALID_EXCHANGE_ID + \"\", ce.AUTHENTICATION_ERROR + \"\", ce.INVALID_CREDENTIALS + \"\", ce.AUTHENTICATION_FLOW_NOT_SUPPORTED + \"\", ce.OAUTH_ACCESS_REVOKED + \"\", ce.WITHDRAWAL_ERROR + \"\", ce.READONLY_EXCHANGE_NOT_PROVIDED_ERROR + \"\", ce.TOKEN_SYMBOL_NOT_FOUND + \"\", ce.WITHDRAWAL_NOT_FOUND + \"\", ce.UNDER_WITHDRAW_MINIMUM + \"\", ce.OVER_WITHDRAW_MAXIMUM + \"\", ce.WHITELIST_CHECK_FAILED + \"\", ce.TRADE_ERROR + \"\", ce.MARKET_NOT_FOUND + \"\", ce.ORDER_NOT_FOUND + \"\", ce.CANNOT_PROVIDE_OHLCV + \"\", ce.INVALID_OHLCV_FORMAT + \"\", ce.MARKET_ERROR + \"\", ce.MARKET_TYPE_NOT_SUPPORTED + \"\", ce.MARKET_NOT_LOADED + \"\", ce.PORTFOLIO_ERROR + \"\", ce.NOT_ENOUGH_BALANCE + \"\", ce.DEPOSIT_ERROR + \"\", ce.GET_DEPOSIT_ADDRESS + \"\", ce.CREATE_DEPOSIT_ADDRESS + \"\", ce.NETWORK_ERROR + \"\", ce.NETWORK_NOT_FOUND + \"\", ce.API_ERROR + \"\", ce.INVALID_API_REQUEST + \"\", ce.EXCHANGE_ERROR + \"\", ce.EXCHANGE_SERVER_DOWN + \"\", ce.EXCHANGE_UNDER_MAINTENANCE + \"\", ce.EXCHANGE_REQUEST_EXPIRED + \"\", ce.EXCHANGE_INVALID_PERMISSION + \"\", ce.EXCHANGE_TRANSFER_NOT_ALLOWED + \"\", ce.EXCHANGE_TRANSFER_ERROR + \"\", ce.EXCHANGE_DDOS_PROTECTION + \"\", ce.EXCHANGE_RATE_LIMIT_EXCEEDED + \"\", ce.EXCHANGE_OPERATION_FAILED + \"\", ce.EXCHANGE_UNKNOWN_ASSET + \"\", ce.EXCHANGE_ACCOUNT_SUSPENDED + \"\", ce.EXCHANGE_NOT_ALLOWED_METHOD + \"\", ce.EXCHANGE_NOT_AVAILABLE + \"\", ce.EXCHANGE_INVALID_NONCE + \"\", ce.EXCHANGE_UNAVAILABLE_IN_COUNTRY + \"\", ce.EXCHANGE_WALLET_TYPE_NOT_SUPPORTED + \"\";\nclass _t extends Error {\n constructor(e, t) {\n super(t), this.code = e, this.message = t, this.isBaseError = !0, this.metadata = {}, this.notReportable = !1, this.sentryName = void 0, this.name = \"CedeSDKError\";\n }\n addOriginalError(e) {\n return this.originalErrorMessage = e, this;\n }\n reportSentry() {\n const e = this.metadata, t = this.sentry;\n if (this.metadata = {}, delete this.sentry, this.notReportable || !t)\n return;\n const i = structuredClone(this);\n i.name = this.sentryName || this.name, t.captureException(i, {\n captureContext: {\n extra: {\n ...e,\n code: this.code,\n exchangeId: this.exchangeId\n }\n }\n });\n }\n setSentryName(e) {\n this.sentryName = e;\n }\n setMetadata(e) {\n this.metadata = e;\n }\n addMetadata(e, t) {\n return this.metadata[e] = t, this;\n }\n overwriteMessage(e) {\n return this.message = e, this;\n }\n addMessage(e) {\n return this.message = `${this.message}. ${e}`, this;\n }\n exchange(e) {\n return this.exchangeId = e, this;\n }\n apply({ shouldPrependExchangeId: e = !1 } = {}) {\n return e && this.exchangeId && (this.message = `${this.exchangeId}: ${this.message}`), this.reportSentry(), this;\n }\n}\nclass on extends _t {\n constructor(e = ce.DEFAULT_ERROR, t = ye.DEFAULT_ERROR) {\n super(e, t), this.name = \"DefaultError\";\n }\n}\nclass g extends on {\n constructor(e) {\n super(ce.INVALID_PARAMS, ye.INVALID_PARAMS(e)), this.name = \"InvalidParamsError\";\n }\n}\nclass hg extends on {\n constructor(e) {\n super(ce.INVALID_CACHE, ye.INVALID_CACHE(e)), this.name = \"InvalidCacheError\";\n }\n}\nclass wu extends on {\n constructor(e) {\n super(ce.FETCH_FROM_CACHE_ERROR, ye.FETCH_FROM_CACHE_ERROR(e)), this.name = \"FetchFromCacheError\";\n }\n}\nclass et extends on {\n constructor() {\n super(ce.INVALID_ADDRESS, ye.INVALID_ADDRESS), this.name = \"InvalidAddressError\";\n }\n}\nclass O extends _t {\n constructor(e = ce.EXCHANGE_ERROR, t = ye.EXCHANGE_ERROR) {\n super(e, t), this.name = \"ExchangeError\";\n }\n}\nclass lg extends O {\n constructor() {\n super(ce.EXCHANGE_SERVER_DOWN, ye.EXCHANGE_SERVER_DOWN), this.name = \"ExchangeServerDownError\";\n }\n}\nclass dt extends O {\n constructor() {\n super(ce.EXCHANGE_UNDER_MAINTENANCE, ye.EXCHANGE_UNDER_MAINTENANCE), this.name = \"ExchangeUnderMaintenanceError\";\n }\n}\nclass Nt extends O {\n constructor() {\n super(ce.EXCHANGE_REQUEST_EXPIRED, ye.EXCHANGE_REQUEST_EXPIRED), this.name = \"ExchangeRequestExpiredError\";\n }\n}\nclass ee extends O {\n constructor() {\n super(ce.EXCHANGE_INVALID_PERMISSION, ye.EXCHANGE_INVALID_PERMISSION), this.name = \"ExchangeInvalidPermissionsError\";\n }\n}\nclass Vt extends O {\n constructor() {\n super(ce.EXCHANGE_TRANSFER_NOT_ALLOWED, ye.EXCHANGE_TRANSFER_NOT_ALLOWED), this.name = \"ExchangeTransferNotAllowedError\";\n }\n}\nclass je extends O {\n constructor() {\n super(ce.EXCHANGE_TRANSFER_ERROR, ye.EXCHANGE_TRANSFER_ERROR), this.name = \"ExchangeTransferError\";\n }\n}\nclass Rt extends O {\n constructor() {\n super(ce.EXCHANGE_DDOS_PROTECTION, ye.EXCHANGE_DDOS_PROTECTION), this.name = \"ExchangeDDosProtectionError\";\n }\n}\nclass Ae extends O {\n constructor() {\n super(ce.EXCHANGE_RATE_LIMIT_EXCEEDED, ye.EXCHANGE_RATE_LIMIT_EXCEEDED), this.name = \"ExchangeRateLimitExceededError\";\n }\n}\nclass ie extends O {\n constructor() {\n super(ce.EXCHANGE_OPERATION_FAILED, ye.EXCHANGE_OPERATION_FAILED), this.name = \"ExchangeOperationFailedError\";\n }\n}\nclass $e extends O {\n constructor(e) {\n super(ce.EXCHANGE_UNKNOWN_ASSET, ye.EXCHANGE_UNKNOWN_ASSET(e)), this.name = \"ExchangeUnknownAssetError\";\n }\n}\nclass Ee extends O {\n constructor() {\n super(ce.EXCHANGE_ACCOUNT_SUSPENDED, ye.EXCHANGE_ACCOUNT_SUSPENDED), this.name = \"ExchangeAccountSuspendedError\";\n }\n}\nclass pe extends O {\n constructor(e) {\n super(ce.EXCHANGE_NOT_ALLOWED_METHOD, ye.EXCHANGE_NOT_ALLOWED_METHOD(e)), this.name = \"ExchangeNotAllowedMethodError\";\n }\n}\nclass Te extends O {\n constructor() {\n super(ce.EXCHANGE_NOT_AVAILABLE, ye.EXCHANGE_NOT_AVAILABLE), this.name = \"ExchangeNotAvailableError\";\n }\n}\nclass ze extends O {\n constructor() {\n super(ce.EXCHANGE_INVALID_NONCE, ye.EXCHANGE_INVALID_NONCE), this.name = \"ExchangeInvalidNonceError\";\n }\n}\nclass go extends O {\n constructor() {\n super(ce.EXCHANGE_UNAVAILABLE_IN_COUNTRY, ye.EXCHANGE_UNAVAILABLE_IN_COUNTRY), this.name = \"ExchangeUnavailableInCountry\";\n }\n}\nclass pg extends O {\n constructor(e) {\n super(ce.EXCHANGE_WALLET_TYPE_NOT_SUPPORTED, ye.EXCHANGE_WALLET_TYPE_NOT_SUPPORTED(e)), this.name = \"ExchangeWalletTypeNotSupportedError\";\n }\n}\nvar Wn;\n(function(d) {\n d[d.HIGH = 1] = \"HIGH\", d[d.MEDIUM = 2] = \"MEDIUM\", d[d.LOW = 3] = \"LOW\";\n})(Wn || (Wn = {}));\nlet gg = class {\n constructor(e) {\n this.config = {\n refillRate: 1,\n delay: 1e-3,\n capacity: 1,\n maxCapacity: 1e5,\n tokens: 0,\n cost: 1,\n priorities: {},\n expireIntervals: {\n myTrades: 1e3 * 50\n // 50 seconds\n }\n }, Object.assign(this.config, e), this.priorityQueue = {}, this.running = !1, this.isActive = !0;\n }\n /**\n * Returns the most important queue (lower number => hight priority), if there are no priorities, returns the normal queue\n */\n getMostImportantQueue() {\n const e = Object.keys(this.priorityQueue), t = Math.min(...e);\n return {\n highestPriorityQueue: this.priorityQueue[t],\n highestPriorityIndex: t\n };\n }\n stop() {\n this.isActive = !1;\n }\n async loop() {\n let e = Yt();\n for (; this.running; ) {\n const { highestPriorityQueue: t, highestPriorityIndex: i } = this.getMostImportantQueue();\n if (t === void 0) {\n this.running = !1;\n continue;\n }\n const { resolver: s, cost: n, rejecter: r, timestamp: a, expireInterval: o } = t[0];\n if (this.config.tokens >= 0 || !this.isActive)\n o !== void 0 && a + o < Yt() || !this.isActive ? r(new Nt()) : (this.config.tokens -= n, s()), t.shift(), await Promise.resolve(), t.length === 0 && delete this.priorityQueue[i], Object.keys(this.priorityQueue).length === 0 && (this.running = !1);\n else {\n await yu(this.config.delay * 1e3);\n const c = Yt(), u = c - e;\n e = c;\n const f = this.config.tokens + this.config.refillRate * u;\n this.config.tokens = Math.min(f, this.config.capacity);\n }\n }\n }\n customThrottle(e = void 0, t = void 0, i = void 0, s = void 0) {\n let n, r;\n const a = new Promise((f, h) => {\n n = f, r = h;\n });\n if (Object.keys(this.priorityQueue).reduce((f, h) => f + this.priorityQueue[h].length, 0) > this.config.maxCapacity)\n throw new Error(\"throttle queue is over maxCapacity (\" + this.config.maxCapacity.toString() + \")\");\n e = e === void 0 ? this.config.cost : e;\n let c;\n s !== void 0 && s in Wn ? c = s : t !== void 0 && this.config.priorities[t] !== void 0 ? c = this.config.priorities[t] : c = Wn.MEDIUM;\n let u;\n i !== void 0 ? u = i : t !== void 0 && (u = this.config.expireIntervals[t]), this.priorityQueue[c] === void 0 && (this.priorityQueue[c] = []), this.priorityQueue[c].push({\n resolver: n,\n cost: e,\n rejecter: r,\n timestamp: Yt(),\n expireInterval: u\n });\n for (let f = 0; f < this.priorityQueue.length; f++)\n this.priorityQueue[f];\n return this.running || (this.running = !0, this.loop()), a;\n }\n};\nconst bu = (d) => {\n const e = ui(d.slice(0, -1)), t = d.slice(-1);\n let i;\n if (t === \"y\")\n i = 60 * 60 * 24 * 365;\n else if (t === \"M\")\n i = 60 * 60 * 24 * 30;\n else if (t === \"w\")\n i = 60 * 60 * 24 * 7;\n else if (t === \"d\")\n i = 60 * 60 * 24;\n else if (t === \"h\")\n i = 60 * 60;\n else if (t === \"m\")\n i = 60;\n else if (t === \"s\")\n i = 1;\n else\n throw new g(\"timeframe unit \" + t + \" is not supported\");\n return e * i;\n}, mg = (d, e, t = Ka) => {\n const i = bu(d) * 1e3, s = e % i;\n return e - s + (t === ar ? i : 0);\n}, yg = (d) => {\n const e = /{([\\w-]+)}/g, t = [];\n let i = e.exec(d);\n for (; i; )\n t.push(i[1]), i = e.exec(d);\n return t;\n}, wg = (d, e) => {\n if (!Array.isArray(e)) {\n const t = Object.keys(e);\n for (let i = 0; i < t.length; i++) {\n const s = t[i];\n Array.isArray(e[s]) || (d = d.replace(\"{\" + s + \"}\", e[s]));\n }\n }\n return d;\n};\nfunction Su(d, e) {\n return d !== void 0 && e !== void 0 && d > 0 ? e / d : void 0;\n}\nfunction bg(d) {\n const e = {};\n for (let t = 0; t < d.length; t++) {\n const [i, s] = d[t];\n s > 0 && (e[i] = (e[i] || 0) + s);\n }\n return Object.keys(e).map((t) => [parseFloat(t), parseFloat(e[t])]);\n}\nconst mo = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({\n __proto__: null,\n DECIMAL_PLACES: St,\n NO_PADDING: Ht,\n PAD_WITH_ZERO: Cc,\n ROUND: Dt,\n ROUND_DOWN: Ka,\n ROUND_UP: ar,\n SIGNIFICANT_DIGITS: or,\n TICK_SIZE: ct,\n TRUNCATE: Et,\n Throttler: gg,\n TimedOut: Zs,\n aggregate: bg,\n arrayConcat: Ph,\n asFloat: ui,\n asInteger: Ms,\n axolotl: lu,\n base16ToBinary: Gc,\n base58ToBinary: Ql,\n base64ToBinary: Uc,\n base64ToString: $l,\n binaryConcat: ep,\n binaryConcatArray: tp,\n binaryToBase16: Zl,\n binaryToBase58: Jl,\n binaryToBase64: qc,\n binaryToString: Kl,\n capitalize: Xh,\n clone: Ac,\n crc32: Ln,\n decimalToPrecision: el,\n decode: op,\n deepExtend: Wh,\n ecdsa: hu,\n eddsa: pu,\n encode: ap,\n extend: Tc,\n extractParams: yg,\n filterBy: jh,\n flatten: qh,\n groupBy: Bh,\n hasProps: rn,\n hash: fu,\n hmac: lo,\n implodeParams: wg,\n inArray: _h,\n index: Sc,\n indexBy: Vh,\n isArray: Os,\n isBrowser: wc,\n isDictionary: wa,\n isElectron: th,\n isEmpty: Dh,\n isInteger: nh,\n isJsonEncodedObject: Yl,\n isNode: sh,\n isNumber: ut,\n isObject: rr,\n isString: Wa,\n isStringCoercible: $t,\n isWebWorker: bc,\n isWindows: ih,\n iso8601: ng,\n json: Wl,\n keys: Ya,\n keysort: Rh,\n mdy: og,\n merge: Yh,\n microseconds: gu,\n milliseconds: eg,\n now: Yt,\n numberToBE: cp,\n numberToLE: dp,\n numberToString: Xa,\n omit: zh,\n omitZero: tl,\n ordered: Eh,\n packb: up,\n parse8601: mu,\n parseDate: rg,\n parseTimeframe: bu,\n pluck: Gh,\n precisionConstants: Zh,\n precisionFromString: qn,\n prop: Zt,\n rawencode: rp,\n rfc2616: ag,\n roundTimeframe: mg,\n safeFloat: ah,\n safeFloat2: ph,\n safeFloatN: Ah,\n safeInteger: oh,\n safeInteger2: gh,\n safeIntegerN: Ih,\n safeIntegerProduct: dh,\n safeIntegerProduct2: mh,\n safeIntegerProductN: Oh,\n safeString: fh,\n safeString2: bh,\n safeStringLower: hh,\n safeStringLower2: Sh,\n safeStringLowerN: vh,\n safeStringN: xh,\n safeStringUpper: lh,\n safeStringUpper2: Th,\n safeStringUpperN: kh,\n safeTimestamp: ch,\n safeTimestamp2: yh,\n safeTimestampN: Mh,\n safeValue: uh,\n safeValue2: wh,\n safeValueN: Ch,\n seconds: tg,\n setTimeout_safe: pr,\n sha256: Re,\n sleep: yu,\n sortBy: Fh,\n sortBy2: Uh,\n stringToBase64: Fc,\n stringToBinary: Xl,\n strip: $h,\n sum: Hh,\n timeout: fg,\n toArray: Lh,\n truncate: Jh,\n truncate_to_string: vc,\n unCamelCase: Kh,\n unique: Nh,\n urlencode: ip,\n urlencodeBase64: os,\n urlencodeNested: sp,\n urlencodeWithArrayRepeat: np,\n uuid: Ic,\n uuid16: Oc,\n uuid22: Mc,\n uuidv1: ig,\n values: $i,\n vwap: Su,\n ymd: po,\n ymdhms: ug,\n yymmdd: dg,\n yyyymmdd: cg\n}, Symbol.toStringTag, { value: \"Module\" })), Sg = BigInt(0), Tg = BigInt(-1), es = BigInt(10);\nclass P {\n constructor(e, t = void 0) {\n if (this.base = void 0, t === void 0) {\n let i = 0;\n e = e.toLowerCase(), e.indexOf(\"e\") > -1 && ([e, i] = e.split(\"e\"), i = parseInt(i.toString()));\n const s = e.indexOf(\".\");\n this.decimals = s > -1 ? e.length - s - 1 : 0;\n const n = e.replace(\".\", \"\");\n this.integer = BigInt(n), this.decimals = this.decimals - i;\n } else\n this.integer = e, this.decimals = t;\n }\n mul(e) {\n const t = this.integer * e.integer;\n return new P(t, this.decimals + e.decimals);\n }\n div(e, t = 18) {\n const i = t - this.decimals + e.decimals;\n let s;\n if (i === 0)\n s = this.integer;\n else if (i < 0) {\n const r = es ** BigInt(-i);\n s = this.integer / r;\n } else {\n const r = es ** BigInt(i);\n s = this.integer * r;\n }\n const n = s / e.integer;\n return new P(n, t);\n }\n add(e) {\n if (this.decimals === e.decimals) {\n const t = this.integer + e.integer;\n return new P(t, this.decimals);\n } else {\n const [t, i] = this.decimals > e.decimals ? [e, this] : [this, e], s = i.decimals - t.decimals, r = t.integer * es ** BigInt(s) + i.integer;\n return new P(r, i.decimals);\n }\n }\n mod(e) {\n const t = Math.max(-this.decimals + e.decimals, 0), i = this.integer * es ** BigInt(t), s = Math.max(-e.decimals + this.decimals, 0), n = e.integer * es ** BigInt(s), r = i % n;\n return new P(r, s + e.decimals);\n }\n sub(e) {\n const t = new P(-e.integer, e.decimals);\n return this.add(t);\n }\n abs() {\n return new P(this.integer < 0 ? this.integer * Tg : this.integer, this.decimals);\n }\n neg() {\n return new P(-this.integer, this.decimals);\n }\n min(e) {\n return this.lt(e) ? this : e;\n }\n max(e) {\n return this.gt(e) ? this : e;\n }\n gt(e) {\n return this.sub(e).integer > 0;\n }\n ge(e) {\n return this.sub(e).integer >= 0;\n }\n lt(e) {\n return e.gt(this);\n }\n le(e) {\n return e.ge(this);\n }\n reduce() {\n const e = this.integer.toString(), t = e.length - 1;\n if (t === 0)\n return e === \"0\" && (this.decimals = 0), this;\n let i;\n for (i = t; i >= 0 && e.charAt(i) === \"0\"; i--)\n ;\n const s = t - i;\n if (s === 0)\n return this;\n this.decimals -= s, this.integer = BigInt(e.slice(0, i + 1));\n }\n equals(e) {\n return this.reduce(), e.reduce(), this.decimals === e.decimals && this.integer === e.integer;\n }\n toString() {\n this.reduce();\n let e, t;\n this.integer < 0 ? (e = \"-\", t = -this.integer) : (e = \"\", t = this.integer);\n const i = Array.from(t.toString(Number(es)).padStart(this.decimals, \"0\")), s = i.length - this.decimals;\n let n;\n return s === 0 ? n = \"0.\" : this.decimals < 0 ? n = \"0\".repeat(-this.decimals) : this.decimals === 0 ? n = \"\" : n = \".\", i.splice(s, 0, n), e + i.join(\"\");\n }\n static stringMul(e, t) {\n if (!(e === void 0 || t === void 0))\n return new P(e).mul(new P(t)).toString();\n }\n static stringDiv(e, t, i = 18) {\n if (e === void 0 || t === void 0)\n return;\n const s = new P(t);\n if (s.integer !== Sg)\n return new P(e).div(s, i).toString();\n }\n static stringAdd(e, t) {\n if (!(e === void 0 && t === void 0))\n return e === void 0 ? t : t === void 0 ? e : new P(e).add(new P(t)).toString();\n }\n static stringSub(e, t) {\n if (!(e === void 0 || t === void 0))\n return new P(e).sub(new P(t)).toString();\n }\n static stringAbs(e) {\n if (e !== void 0)\n return new P(e).abs().toString();\n }\n static stringNeg(e) {\n if (e !== void 0)\n return new P(e).neg().toString();\n }\n static stringMod(e, t) {\n if (!(e === void 0 || t === void 0))\n return new P(e).mod(new P(t)).toString();\n }\n static stringEquals(e, t) {\n if (!(e === void 0 || t === void 0))\n return new P(e).equals(new P(t));\n }\n static stringEq(e, t) {\n if (!(e === void 0 || t === void 0))\n return new P(e).equals(new P(t));\n }\n static stringMin(e, t) {\n if (!(e === void 0 || t === void 0))\n return new P(e).min(new P(t)).toString();\n }\n static stringMax(e, t) {\n if (!(e === void 0 || t === void 0))\n return new P(e).max(new P(t)).toString();\n }\n static stringGt(e, t) {\n if (!(e === void 0 || t === void 0))\n return new P(e).gt(new P(t));\n }\n static stringGe(e, t) {\n if (!(e === void 0 || t === void 0))\n return new P(e).ge(new P(t));\n }\n static stringLt(e, t) {\n if (!(e === void 0 || t === void 0))\n return new P(e).lt(new P(t));\n }\n static stringLe(e, t) {\n if (!(e === void 0 || t === void 0))\n return new P(e).le(new P(t));\n }\n}\nfunction yo() {\n let d, e;\n const t = new Promise((i, s) => {\n d = i, e = s;\n });\n return t.resolve = function() {\n setTimeout(() => {\n d.apply(this, arguments);\n });\n }, t.reject = function() {\n setTimeout(() => {\n e.apply(this, arguments);\n });\n }, t;\n}\nfunction Ag(d) {\n const e = yo();\n return d.then(e.resolve, e.reject), e;\n}\nyo.race = (d) => Ag(Promise.race(d));\nclass be extends _t {\n constructor(e = ce.INTERNAL_ERROR, t = ye.INTERNAL_ERROR) {\n super(e, t), this.name = \"InternalError\";\n }\n}\nclass Ig extends be {\n constructor(e) {\n super(ce.INVALID_EXCHANGE_INSTANCE_ID, ye.INVALID_EXCHANGE_INSTANCE_ID(e)), this.name = \"InvalidExchangeInstanceIdError\", this.notReportable = !0;\n }\n}\nclass Og extends be {\n constructor(e) {\n super(ce.INVALID_EXCHANGE_ID, ye.INVALID_EXCHANGE_ID(e)), this.name = \"InvalidExchangeIdError\";\n }\n}\nclass Z extends _t {\n constructor(e = ce.AUTHENTICATION_ERROR, t = ye.AUTHENTICATION_ERROR) {\n super(e, t), this.name = \"AuthenticationError\";\n }\n}\nclass Pt extends Z {\n constructor() {\n super(ce.INVALID_CREDENTIALS, ye.INVALID_CREDENTIALS), this.name = \"InvalidCredentialsError\", this.notReportable = !0;\n }\n}\nclass Mg extends Z {\n constructor() {\n super(ce.AUTHENTICATION_FLOW_NOT_SUPPORTED, ye.AUTHENTICATION_FLOW_NOT_SUPPORTED), this.name = \"AuthenticationFlowNotSupportedError\";\n }\n}\nclass Cg extends Z {\n constructor() {\n super(ce.OAUTH_ACCESS_REVOKED, ye.OAUTH_ACCESS_REVOKED), this.name = \"OAuthAccessRevokedError\", this.notReportable = !0;\n }\n}\nclass ke extends _t {\n constructor(e = ce.WITHDRAWAL_ERROR, t = ye.WITHDRAWAL_ERROR) {\n super(e, t), this.name = \"WithdrawalError\";\n }\n}\nclass xg extends ke {\n constructor() {\n super(ce.READONLY_EXCHANGE_NOT_PROVIDED_ERROR, ye.READONLY_EXCHANGE_NOT_PROVIDED_ERROR), this.name = \"ReadonlyExchangeNotProvidedError\", this.notReportable = !0;\n }\n}\nclass wo extends ke {\n constructor(e) {\n super(ce.TOKEN_SYMBOL_NOT_FOUND, ye.TOKEN_SYMBOL_NOT_FOUND(e)), this.name = \"TokenSymbolNotFoundError\";\n }\n}\nclass Tu extends ke {\n constructor() {\n super(ce.WITHDRAWAL_NOT_FOUND, ye.WITHDRAWAL_NOT_FOUND), this.name = \"WithdrawalNotFoundError\";\n }\n}\nclass Xt extends ke {\n constructor() {\n super(ce.UNDER_WITHDRAW_MINIMUM, ye.UNDER_WITHDRAW_MINIMUM), this.name = \"UnderWithdrawMinimumError\";\n }\n}\nclass ws extends ke {\n constructor() {\n super(ce.OVER_WITHDRAW_MAXIMUM, ye.OVER_WITHDRAW_MAXIMUM), this.name = \"OverWithdrawMaximumError\";\n }\n}\nclass gi extends ke {\n constructor() {\n super(ce.WHITELIST_CHECK_FAILED, ye.WHITELIST_CHECK_FAILED), this.name = \"WhitelistCheckFailedError\", this.notReportable = !0;\n }\n}\nclass Yn extends ke {\n constructor() {\n super(ce.WITHDRAWAL_FORBIDDEN, ye.WITHDRAWAL_FORBIDDEN), this.name = \"WithdrawalForbiddenError\";\n }\n}\nclass bo extends _t {\n constructor(e = ce.NETWORK_ERROR, t = ye.NETWORK_ERROR) {\n super(e, t), this.name = \"NetworkError\";\n }\n}\nclass ka extends bo {\n constructor(e) {\n super(ce.NETWORK_NOT_FOUND, ye.NETWORK_NOT_FOUND(e)), this.name = \"NetworkNotFoundError\";\n }\n}\nclass Kn extends bo {\n constructor(e) {\n super(ce.NETWORK_NOT_FOUND_FOR_TOKEN_SYMBOL, ye.NETWORK_NOT_FOUND_FOR_TOKEN_SYMBOL(e)), this.name = \"NetworkNotFoundForTokenSymbol\";\n }\n}\nclass gr extends _t {\n constructor(e = ce.DEPOSIT_ERROR, t = ye.DEPOSIT_ERROR) {\n super(e, t), this.name = \"DepositError\";\n }\n}\nclass It extends gr {\n constructor(e, t) {\n super(ce.GET_DEPOSIT_ADDRESS, ye.GET_DEPOSIT_ADDRESS(e, t)), this.name = \"GetDepositAddressError\";\n }\n}\nclass mr extends gr {\n constructor(e, t) {\n super(ce.CREATE_DEPOSIT_ADDRESS, ye.CREATE_DEPOSIT_ADDRESS(e, t)), this.name = \"CreateDepositAddressError\";\n }\n}\nclass vg extends gr {\n constructor() {\n super(ce.DEPOSIT_NOT_FOUND, ye.DEPOSIT_NOT_FOUND), this.name = \"DepositNotFoundError\";\n }\n}\nclass So extends _t {\n constructor(e = ce.API_ERROR, t = ye.API_ERROR) {\n super(e, t), this.name = \"ApiError\";\n }\n}\nclass kg extends So {\n constructor(e) {\n super(ce.INVALID_API_REQUEST, ye.INVALID_API_REQUEST(e)), this.name = \"InvalidApiRequestError\";\n }\n}\nclass Eg extends So {\n constructor(e) {\n super(ce.INTERNAL_API_EXCEPTION, e), this.name = \"InternalApiExceptionError\";\n }\n}\nclass To extends _t {\n constructor(e = ce.PORTFOLIO_ERROR, t = ye.PORTFOLIO_ERROR) {\n super(e, t), this.name = \"PortfolioError\";\n }\n}\nclass re extends To {\n constructor() {\n super(ce.NOT_ENOUGH_BALANCE, ye.NOT_ENOUGH_BALANCE), this.name = \"InsufficientBalanceError\";\n }\n}\nclass k extends _t {\n constructor(e = ce.TRADE_ERROR, t = ye.TRADE_ERROR) {\n super(e, t);\n }\n}\nclass Se extends k {\n constructor() {\n super(ce.ORDER_NOT_FOUND, ye.ORDER_NOT_FOUND);\n }\n}\nclass it extends k {\n constructor(e) {\n super(ce.MARKET_NOT_FOUND, ye.MARKET_NOT_FOUND(e)), this.name = \"MarketNotFoundError\";\n }\n}\nclass Ng extends k {\n constructor(e) {\n super(ce.INVALID_OHLCV_FORMAT, ye.INVALID_OHLCV_FORMAT(e)), this.name = \"InvalidOHLCVFormatError\";\n }\n}\nclass Au extends k {\n constructor() {\n super(ce.CANNOT_PROVIDE_OHLCV, ye.CANNOT_PROVIDE_OHLCV), this.name = \"CannotProvideOHLCVError\";\n }\n}\nclass pt extends k {\n constructor(e = ce.MARKET_ERROR, t = ye.MARKET_ERROR) {\n super(e, t), this.name = \"MarketError\";\n }\n}\nclass bs extends pt {\n constructor() {\n super(ce.MARKET_NOT_LOADED, ye.MARKET_NOT_LOADED), this.name = \"MarketNotLoadedError\";\n }\n}\nclass ge extends pt {\n constructor(e) {\n super(ce.MARKET_TYPE_NOT_SUPPORTED, ye.MARKET_TYPE_NOT_SUPPORTED(e)), this.name = \"MarketTypeNotSupportedError\";\n }\n}\nconst od = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({\n __proto__: null,\n ApiError: So,\n AuthenticationError: Z,\n AuthenticationFlowNotSupportedError: Mg,\n CannotProvideOHLCVError: Au,\n CedeSDKError: _t,\n CreateDepositAddressError: mr,\n DefaultError: on,\n DepositError: gr,\n DepositNotFoundError: vg,\n ExchangeAccountSuspendedError: Ee,\n ExchangeDDosProtectionError: Rt,\n ExchangeError: O,\n ExchangeInvalidNonceError: ze,\n ExchangeInvalidPermissionsError: ee,\n ExchangeNotAllowedMethodError: pe,\n ExchangeNotAvailableError: Te,\n ExchangeOperationFailedError: ie,\n ExchangeRateLimitExceededError: Ae,\n ExchangeRequestExpiredError: Nt,\n ExchangeServerDownError: lg,\n ExchangeTransferError: je,\n ExchangeTransferNotAllowedError: Vt,\n ExchangeUnavailableInCountry: go,\n ExchangeUnderMaintenanceError: dt,\n ExchangeUnknownAssetError: $e,\n ExchangeWalletTypeNotSupportedError: pg,\n FetchFromCacheError: wu,\n GetDepositAddressError: It,\n InsufficientBalanceError: re,\n InternalApiExceptionError: Eg,\n InternalError: be,\n InvalidAddressError: et,\n InvalidApiRequestError: kg,\n InvalidCacheError: hg,\n InvalidCredentialsError: Pt,\n InvalidExchangeIdError: Og,\n InvalidExchangeInstanceIdError: Ig,\n InvalidOHLCVFormatError: Ng,\n InvalidParamsError: g,\n MarketError: pt,\n MarketNotFoundError: it,\n MarketNotLoadedError: bs,\n MarketTypeNotSupportedError: ge,\n NetworkError: bo,\n NetworkNotFoundError: ka,\n NetworkNotFoundForTokenSymbol: Kn,\n OAuthAccessRevokedError: Cg,\n OrderNotFoundError: Se,\n OverWithdrawMaximumError: ws,\n PortfolioError: To,\n ReadonlyExchangeNotProvidedError: xg,\n TokenSymbolNotFoundError: wo,\n TradeError: k,\n UnderWithdrawMinimumError: Xt,\n WhitelistCheckFailedError: gi,\n WithdrawalError: ke,\n WithdrawalForbiddenError: Yn,\n WithdrawalNotFoundError: Tu\n}, Symbol.toStringTag, { value: \"Module\" }));\nclass Pg {\n constructor() {\n this.i = 0, this.j = 0, this.S = [];\n }\n // Arcfour.prototype.init = ARC4init;\n // Initialize arcfour context from key, an array of ints, each from [0..255]\n init(e) {\n let t, i, s;\n for (t = 0; t < 256; ++t)\n this.S[t] = t;\n for (i = 0, t = 0; t < 256; ++t)\n i = i + this.S[t] + e[t % e.length] & 255, s = this.S[t], this.S[t] = this.S[i], this.S[i] = s;\n this.i = 0, this.j = 0;\n }\n // Arcfour.prototype.next = ARC4next;\n next() {\n let e;\n return this.i = this.i + 1 & 255, this.j = this.j + this.S[this.i] & 255, e = this.S[this.i], this.S[this.i] = this.S[this.j], this.S[this.j] = e, this.S[e + this.S[this.i] & 255];\n }\n}\nfunction _g() {\n return new Pg();\n}\nlet Iu = 256, mn, Ci = null, Lt;\nif (Ci == null) {\n Ci = [], Lt = 0;\n let d;\n if (typeof window < \"u\" && window.crypto && window.crypto.getRandomValues) {\n const t = new Uint32Array(256);\n for (window.crypto.getRandomValues(t), d = 0; d < t.length; ++d)\n Ci[Lt++] = t[d] & 255;\n }\n var yn = 0;\n const e = function(t) {\n if (yn = yn || 0, yn >= 256 || Lt >= Iu) {\n window.removeEventListener ? window.removeEventListener(\"mousemove\", e, !1) : window.detachEvent && window.detachEvent(\"onmousemove\", e);\n return;\n }\n try {\n const i = t.x + t.y;\n Ci[Lt++] = i & 255, yn += 1;\n } catch {\n }\n };\n typeof window < \"u\" && (window.addEventListener ? window.addEventListener(\"mousemove\", e, !1) : window.attachEvent && window.attachEvent(\"onmousemove\", e));\n}\nfunction Lg() {\n if (mn == null) {\n for (mn = _g(); Lt < Iu; ) {\n const d = Math.floor(65536 * Math.random());\n Ci[Lt++] = d & 255;\n }\n for (mn.init(Ci), Lt = 0; Lt < Ci.length; ++Lt)\n Ci[Lt] = 0;\n Lt = 0;\n }\n return mn.next();\n}\nclass Xn {\n nextBytes(e) {\n for (let t = 0; t < e.length; ++t)\n e[t] = Lg();\n }\n}\nconst wn = (d) => `marketsById-${d}`, bn = (d) => `markets-${d}`, Sn = (d) => `symbols-${d}`, Tn = (d) => `ids-${d}`, Ds = (d) => `currencies-${d.id}${[\"binance\", \"bybit\", \"mexc\", \"okx\"].includes(d.id) ? `-${d.exchangeInstanceId}` : \"\"}`, Rs = (d) => `currenciesById-${d.id}${[\"binance\", \"bybit\", \"mexc\", \"okx\"].includes(d.id) ? `-${d.exchangeInstanceId}` : \"\"}`, dd = (d) => `networkIdsByCurrencyAndNetworkCodes-${d}`, cd = (d) => `currencyIdsByCodeAndNetworkCode-${d}`, ud = (d) => `chainIdbyEcids-${d}`, fd = (d) => `ecidByChainIds-${d}`, ts = (d, e) => `accounts-${d}-${e}`, hd = (d) => `timeDifference-${d}`, qs = 1e3 * 60 * 60 * 24, Dg = 1e3 * 60 * 30, Rg = 1e3 * 60 * 5, An = (d) => [\"binance\", \"bybit\", \"mexc\", \"okx\"].includes(d.id) ? Dg : d.id === \"htx\" ? 1e3 * 60 * 30 : qs, Gr = (d, e) => d << e | d >>> 32 - e >>> 0, Bg = (d, e, t) => d & e ^ ~d & t, Vg = (d, e, t) => d & e ^ d & t ^ e & t, Bs = new Uint32Array([1732584193, 4023233417, 2562383102, 271733878, 3285377520]), bi = new Uint32Array(80);\nclass jg extends io {\n constructor() {\n super(64, 20, 8, !1), this.A = Bs[0] | 0, this.B = Bs[1] | 0, this.C = Bs[2] | 0, this.D = Bs[3] | 0, this.E = Bs[4] | 0;\n }\n get() {\n const { A: e, B: t, C: i, D: s, E: n } = this;\n return [e, t, i, s, n];\n }\n set(e, t, i, s, n) {\n this.A = e | 0, this.B = t | 0, this.C = i | 0, this.D = s | 0, this.E = n | 0;\n }\n process(e, t) {\n for (let o = 0; o < 16; o++, t += 4)\n bi[o] = e.getUint32(t, !1);\n for (let o = 16; o < 80; o++)\n bi[o] = Gr(bi[o - 3] ^ bi[o - 8] ^ bi[o - 14] ^ bi[o - 16], 1);\n let { A: i, B: s, C: n, D: r, E: a } = this;\n for (let o = 0; o < 80; o++) {\n let c, u;\n o < 20 ? (c = Bg(s, n, r), u = 1518500249) : o < 40 ? (c = s ^ n ^ r, u = 1859775393) : o < 60 ? (c = Vg(s, n, r), u = 2400959708) : (c = s ^ n ^ r, u = 3395469782);\n const f = Gr(i, 5) + c + a + u + bi[o] | 0;\n a = r, r = n, n = Gr(s, 30), s = i, i = f;\n }\n i = i + this.A | 0, s = s + this.B | 0, n = n + this.C | 0, r = r + this.D | 0, a = a + this.E | 0, this.set(i, s, n, r, a);\n }\n roundClean() {\n bi.fill(0);\n }\n destroy() {\n this.set(0, 0, 0, 0, 0), this.buffer.fill(0);\n }\n}\nconst Fg = Zi(() => new jg());\nfunction Ug(d) {\n const e = (c) => (c < 15.5 ? \"0\" : \"\") + Math.round(c).toString(16), t = (c) => parseInt(c, 16), i = (c, u) => (u + c).slice(-u.length);\n d = d.replace(\" \", \"\");\n const s = Math.round((/* @__PURE__ */ new Date()).getTime() / 1e3), n = i(e(Math.floor(s / 30)), \"0000000000000000\"), r = lo(Ri.decode(n), Nc.decode(d), Fg, \"hex\"), a = t(r.substring(r.length - 1));\n let o = (t(r.substr(a * 2, 8)) & t(\"7fffffff\")) + \"\";\n return o.substring(o.length - 6, o.length);\n}\nconst { isNode: is, deepExtend: qg, extend: Gg, clone: zg, flatten: Hg, unique: Wg, indexBy: Yg, sortBy: Kg, sortBy2: Xg, safeFloat2: $g, groupBy: Zg, aggregate: Qg, uuid: Jg, unCamelCase: ld, precisionFromString: e0, Throttler: t0, capitalize: i0, now: s0, decimalToPrecision: n0, safeValue: r0, safeValue2: a0, safeString: o0, safeString2: d0, seconds: c0, milliseconds: u0, binaryToBase16: f0, numberToBE: h0, base16ToBinary: l0, iso8601: p0, omit: g0, isJsonEncodedObject: m0, safeInteger: y0, sum: w0, omitZero: b0, implodeParams: S0, extractParams: T0, json: A0, merge: I0, binaryConcat: O0, hash: M0, ecdsa: lT, arrayConcat: C0, encode: x0, urlencode: v0, hmac: k0, numberToString: E0, parseTimeframe: N0, safeInteger2: P0, safeStringLower: _0, parse8601: L0, yyyymmdd: D0, safeStringUpper: R0, safeTimestamp: B0, binaryConcatArray: V0, uuidv1: j0, numberToLE: F0, ymdhms: U0, stringToBase64: q0, decode: G0, uuid22: z0, safeIntegerProduct2: H0, safeIntegerProduct: W0, safeStringLower2: Y0, yymmdd: K0, base58ToBinary: X0, binaryToBase58: $0, safeTimestamp2: Z0, rawencode: Q0, keysort: J0, inArray: em, isEmpty: tm, ordered: im, filterBy: sm, uuid16: nm, safeFloat: rm, base64ToBinary: am, safeStringUpper2: om, urlencodeWithArrayRepeat: dm, microseconds: cm, binaryToBase64: um, strip: fm, toArray: hm, safeFloatN: lm, safeIntegerN: pm, safeIntegerProductN: gm, safeTimestampN: mm, safeValueN: ym, safeStringN: wm, safeStringLowerN: bm, safeStringUpperN: Sm, urlencodeNested: Tm, parseDate: Am, ymd: Im, base64ToString: Om, crc32: Mm, TRUNCATE: zr, ROUND: pd, DECIMAL_PLACES: Hr, NO_PADDING: Cm, TICK_SIZE: gd, SIGNIFICANT_DIGITS: xm } = mo;\nlet gt = class {\n constructor(e = {}) {\n this.throttleProp = void 0, this.api = void 0, this.userAgent = void 0, this.user_agent = void 0, this.userAgents = {\n chrome: \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36\",\n chrome39: \"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36\",\n chrome100: \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.75 Safari/537.36\"\n }, this.headers = {}, this.forcedProxy = \"\", this.origin = \"*\", this.agent = void 0, this.termId = void 0, this.nodeHttpModuleLoaded = !1, this.httpAgent = void 0, this.httpsAgent = void 0, this.minFundingAddressLength = 1, this.quoteJsonNumbers = !0, this.number = Number, this.handleContentTypeApplicationZip = !1, this.fetchPrivateMethodsFromCache = !1, this.reduceFees = !0, this.validateServerSsl = !0, this.validateClientSsl = !1, this.timeout = 1e4, this.verbose = !1, this.twofa = void 0, this.balance = {}, this.orderbooks = {}, this.tickers = {}, this.bidsasks = {}, this.orders = void 0, this.triggerOrders = void 0, this.transactions = {}, this.requiresWeb3 = !1, this.requiresEddsa = !1, this.enableLastJsonResponse = !0, this.enableLastHttpResponse = !0, this.enableLastResponseHeaders = !0, this.last_http_response = void 0, this.last_json_response = void 0, this.last_response_headers = void 0, this.last_request_headers = void 0, this.last_request_body = void 0, this.last_request_url = void 0, this.last_request_path = void 0, this.id = void 0, this.markets = void 0, this.status = void 0, this.rateLimit = void 0, this.tokenBucket = void 0, this.throttler = void 0, this.enableRateLimit = void 0, this.httpExceptions = void 0, this.markets_by_id = void 0, this.symbols = void 0, this.ids = void 0, this.currencies = void 0, this.tokensMapping = void 0, this.tokensMetadata = void 0, this.baseCurrencies = void 0, this.quoteCurrencies = void 0, this.currencies_by_id = void 0, this.codes = void 0, this.reloadingMarkets = void 0, this.marketsLoading = void 0, this.accounts = void 0, this.accountsById = void 0, this.hostname = void 0, this.precisionMode = void 0, this.paddingMode = void 0, this.exceptions = {}, this.timeframes = {}, this.version = void 0, this.marketsByAltname = void 0, this.name = void 0, this.targetAccount = void 0, this.stablePairs = {}, this.clients = {}, this.newUpdates = !0, this.streaming = {}, this.alias = !1, this.externalSigner = void 0, this.deepExtend = qg, this.isNode = is, this.keys = Ya, this.values = $i, this.extend = Gg, this.clone = zg, this.flatten = Hg, this.unique = Wg, this.indexBy = Yg, this.sortBy = Kg, this.sortBy2 = Xg, this.groupBy = Zg, this.aggregate = Qg, this.uuid = Jg, this.unCamelCase = ld, this.precisionFromString = e0, this.capitalize = i0, this.now = s0, this.decimalToPrecision = n0, this.safeValue = r0, this.safeValue2 = a0, this.safeString = o0, this.safeString2 = d0, this.safeFloat = rm, this.safeFloat2 = $g, this.seconds = c0, this.milliseconds = u0, this.binaryToBase16 = f0, this.numberToBE = h0, this.base16ToBinary = l0, this.iso8601 = p0, this.omit = g0, this.isJsonEncodedObject = m0, this.safeInteger = y0, this.sum = w0, this.omitZero = b0, this.implodeParams = S0, this.extractParams = T0, this.json = A0, this.vwap = Su, this.merge = I0, this.binaryConcat = O0, this.hash = M0, this.arrayConcat = C0, this.encode = x0, this.urlencode = v0, this.hmac = k0, this.numberToString = E0, this.parseTimeframe = N0, this.safeInteger2 = P0, this.safeStringLower = _0, this.parse8601 = L0, this.yyyymmdd = D0, this.safeStringUpper = R0, this.safeTimestamp = B0, this.binaryConcatArray = V0, this.uuidv1 = j0, this.numberToLE = F0, this.ymdhms = U0, this.yymmdd = K0, this.stringToBase64 = q0, this.decode = G0, this.uuid22 = z0, this.safeIntegerProduct2 = H0, this.safeIntegerProduct = W0, this.binaryToBase58 = $0, this.base58ToBinary = X0, this.base64ToBinary = am, this.safeTimestamp2 = Z0, this.rawencode = Q0, this.keysort = J0, this.inArray = em, this.safeStringLower2 = Y0, this.safeStringUpper2 = om, this.isEmpty = tm, this.ordered = im, this.filterBy = sm, this.uuid16 = nm, this.urlencodeWithArrayRepeat = dm, this.microseconds = cm, this.binaryToBase64 = um, this.strip = fm, this.toArray = hm, this.safeFloatN = lm, this.safeIntegerN = pm, this.safeIntegerProductN = gm, this.safeTimestampN = mm, this.safeValueN = ym, this.safeStringN = wm, this.safeStringLowerN = bm, this.safeStringUpperN = Sm, this.urlencodeNested = Tm, this.parseDate = Am, this.ymd = Im, this.base64ToString = Om, this.crc32 = Mm, this.cache = void 0, this.exchangeInstanceId = void 0, this.mutex = void 0, this.httpProxyAgentModule = void 0, this.httpsProxyAgentModule = void 0, this.socksProxyAgentModule = void 0, this.socksProxyAgentModuleChecked = !1, this.proxyDictionaries = {}, this.proxyModulesLoaded = !1, Object.assign(this, mo), this.options = this.getDefaultOptions(), this.headers = {}, this.forcedProxy = \"\", this.origin = \"*\", this.minFundingAddressLength = 1, this.quoteJsonNumbers = !0, this.number = Number, this.handleContentTypeApplicationZip = !1, this.reduceFees = !0, this.fetchImplementation = void 0, this.validateServerSsl = !0, this.validateClientSsl = !1, this.timeout = 1e4, this.verbose = !1, this.twofa = void 0, this.apiKey = void 0, this.secret = void 0, this.uid = void 0, this.login = void 0, this.password = void 0, this.privateKey = void 0, this.walletAddress = void 0, this.token = void 0, this.balance = {}, this.orderbooks = {}, this.tickers = {}, this.orders = void 0, this.trades = {}, this.transactions = {}, this.ohlcvs = {}, this.myTrades = void 0, this.positions = void 0, this.requiresWeb3 = !1, this.requiresEddsa = !1, this.lastRestRequestTimestamp = 0, this.enableLastJsonResponse = !0, this.enableLastHttpResponse = !0, this.enableLastResponseHeaders = !0, this.last_http_response = void 0, this.last_json_response = void 0, this.last_response_headers = void 0, this.last_request_headers = void 0, this.last_request_body = void 0, this.last_request_url = void 0, this.last_request_path = void 0;\n const t = (n = this) => {\n if (n !== null) {\n const r = Object.getOwnPropertyNames(n);\n for (let a = 0; a < r.length; a++) {\n const o = r[a];\n this[ld(o)] = this[o];\n }\n t(Object.getPrototypeOf(n));\n }\n };\n t();\n const i = Object.entries(this.describe()).concat(Object.entries(e));\n for (let n = 0; n < i.length; n++) {\n const [r, a] = i[n];\n a && Object.getPrototypeOf(a) === Object.prototype ? this[r] = this.deepExtend(this[r], a) : this[r] = a;\n }\n this.validateServerSsl;\n const s = Object.keys(this.has);\n for (let n = 0; n < s.length; n++) {\n const r = s[n];\n this[\"has\" + this.capitalize(r)] = !!this.has[r];\n }\n this.api && this.defineRestApi(this.api, \"request\"), this.initRestRateLimiter(), this.newUpdates = this.options.newUpdates !== void 0 ? this.options.newUpdates : !0, this.afterConstruct();\n }\n describe() {\n return {\n id: void 0,\n name: void 0,\n countries: void 0,\n enableRateLimit: !0,\n rateLimit: 2e3,\n certified: !1,\n pro: !1,\n alias: !1,\n has: {\n publicAPI: !0,\n privateAPI: !0,\n CORS: void 0,\n spot: void 0,\n margin: void 0,\n swap: void 0,\n future: void 0,\n option: void 0,\n cancelAllOrders: void 0,\n cancelOrder: !0,\n cancelOrders: void 0,\n createDepositAddress: void 0,\n createLimitOrder: !0,\n createMarketOrder: !0,\n createOrder: !0,\n createMarketBuyOrderWithCost: void 0,\n createMarketOrderWithCost: void 0,\n createMarketSellOrderWithCost: void 0,\n createOrders: void 0,\n createOrderWithTakeProfitAndStopLoss: void 0,\n createTakeProfitOrder: void 0,\n createTrailingAmountOrder: void 0,\n createTrailingPercentOrder: void 0,\n createTriggerOrder: void 0,\n editOrder: \"emulated\",\n fetchAccounts: void 0,\n fetchBalance: !0,\n fetchCanceledOrders: void 0,\n fetchCanceledAndClosedOrders: void 0,\n fetchClosedOrder: void 0,\n fetchClosedOrders: void 0,\n fetchCurrencies: \"emulated\",\n fetchDeposit: void 0,\n fetchDepositAddress: void 0,\n fetchDepositAddresses: void 0,\n fetchDepositAddressesByNetwork: void 0,\n fetchDeposits: void 0,\n fetchDepositsWithdrawals: void 0,\n fetchTransactionFee: void 0,\n fetchTransactionFees: void 0,\n fetchL2OrderBook: !0,\n fetchLedger: void 0,\n fetchLedgerEntry: void 0,\n fetchMarkets: !0,\n fetchMyTrades: void 0,\n fetchOHLCV: void 0,\n fetchOpenOrder: void 0,\n fetchOpenOrders: void 0,\n fetchOrder: void 0,\n fetchOrderBook: !0,\n fetchOrderBooks: void 0,\n fetchOrders: void 0,\n fetchOrderTrades: void 0,\n fetchPermissions: void 0,\n fetchPosition: void 0,\n fetchPositions: void 0,\n fetchPositionsForSymbol: void 0,\n fetchPositionsRisk: void 0,\n fetchStatus: void 0,\n fetchTicker: !0,\n fetchTickers: void 0,\n fetchTime: void 0,\n fetchTrades: !0,\n fetchTradingFee: void 0,\n fetchTradingFees: void 0,\n fetchTradingLimits: void 0,\n fetchTransactions: void 0,\n fetchTransfers: void 0,\n fetchWithdrawAddresses: void 0,\n fetchWithdrawal: void 0,\n fetchWithdrawals: void 0,\n transfer: void 0,\n withdraw: void 0\n },\n urls: {\n logo: void 0,\n api: void 0,\n www: void 0,\n doc: void 0,\n fees: void 0\n },\n api: void 0,\n requiredCredentials: {\n apiKey: !0,\n secret: !0,\n uid: !1,\n login: !1,\n password: !1,\n twofa: !1,\n privateKey: !1,\n walletAddress: !1,\n token: !1\n // reserved for HTTP auth in some cases\n },\n markets: void 0,\n currencies: {},\n timeframes: void 0,\n fees: {\n trading: {\n tierBased: void 0,\n percentage: void 0,\n taker: void 0,\n maker: void 0\n },\n funding: {\n tierBased: void 0,\n percentage: void 0,\n withdraw: {},\n deposit: {}\n }\n },\n status: {\n status: \"ok\",\n updated: void 0,\n eta: void 0,\n url: void 0\n },\n exceptions: void 0,\n httpExceptions: {\n 422: O,\n 418: Rt,\n 429: Ae,\n 404: Te,\n 409: Te,\n 410: Te,\n 451: Te,\n 500: Te,\n 501: Te,\n 502: Te,\n 520: Te,\n 521: Te,\n 522: Te,\n 525: Te,\n 526: Te,\n 400: Te,\n 403: Te,\n 405: Te,\n 503: Te,\n 530: Te,\n 408: Nt,\n 504: Nt,\n 401: Z,\n 407: Z,\n 511: Z\n },\n precisionMode: Hr,\n paddingMode: Cm,\n limits: {\n leverage: { min: void 0, max: void 0 },\n amount: { min: void 0, max: void 0 },\n price: { min: void 0, max: void 0 },\n cost: { min: void 0, max: void 0 }\n }\n };\n }\n // describe ()\n encodeURIComponent(...e) {\n return encodeURIComponent(...e);\n }\n checkAddress(e) {\n if (e === void 0)\n throw new et().addMessage(\"Address is undefined\").exchange(this.id);\n if (this.unique(e).length === 1 || e.length < this.minFundingAddressLength || e.includes(\" \"))\n throw new et().addMessage(\"Address is invalid or has less than \" + this.minFundingAddressLength.toString() + ' characters: \"' + this.json(e) + '\"').exchange(this.id);\n return e;\n }\n initRestRateLimiter() {\n if (this.rateLimit === void 0)\n throw new be().addMessage(\"rateLimit property is not configured\").exchange(this.id);\n this.tokenBucket = this.extend({\n delay: 1e-3,\n capacity: 1,\n cost: 1,\n maxCapacity: 1e4,\n refillRate: this.rateLimit > 0 ? 1 / this.rateLimit : Number.MAX_VALUE\n }, this.tokenBucket), this.throttler = this.throttlerFactory({\n tokenBucket: this.tokenBucket,\n id: this.id\n });\n }\n throttlerFactory(e) {\n const t = this.safeValue(e, \"tokenBucket\");\n return new t0(t);\n }\n throttle(e = void 0, t = void 0, i = void 0, s = void 0) {\n return this.throttler.customThrottle(e, t, i, s);\n }\n defineRestApiEndpoint(e, t, i, s, n, r, a = {}) {\n const o = n.split(/[^a-zA-Z0-9]/), c = o.map(this.capitalize).join(\"\"), u = o.map((w) => w.trim().toLowerCase()).filter((w) => w.length > 0).join(\"_\"), f = [r[0]].concat(r.slice(1).map(this.capitalize)).join(\"\"), h = [r[0]].concat(r.slice(1).map((w) => w.trim()).filter((w) => w.length > 0)).join(\"_\"), l = f + s + this.capitalize(c), p = h + \"_\" + i + \"_\" + u, m = r.length > 1 ? r : r[0], y = async (w = {}, S = {}) => this[e](n, m, t, w, void 0, void 0, a, S);\n this[l] = y, this[p] = y;\n }\n defineRestApi(e, t, i = []) {\n const s = Object.keys(e);\n for (let n = 0; n < s.length; n++) {\n const r = s[n], a = e[r], o = r.toUpperCase(), c = r.toLowerCase(), u = this.capitalize(c);\n if (Array.isArray(a))\n for (let f = 0; f < a.length; f++) {\n const h = a[f].trim();\n this.defineRestApiEndpoint(t, o, c, u, h, i);\n }\n else if (r.match(/^(?:get|post|put|delete|head|patch)$/i)) {\n const f = Object.keys(a);\n for (let h = 0; h < f.length; h++) {\n const l = f[h], p = l.trim(), m = a[l];\n if (typeof m == \"object\")\n this.defineRestApiEndpoint(t, o, c, u, p, i, m);\n else if (typeof m == \"number\")\n this.defineRestApiEndpoint(t, o, c, u, p, i, { cost: m });\n else\n throw new be().addMessage(\"defineRestApi : API format is not supported, API leafs must strings, objects or numbers\").exchange(this.id);\n }\n } else\n this.defineRestApi(a, t, i.concat([r]));\n }\n }\n log(...e) {\n console.log(...e);\n }\n async loadProxyModules() {\n if (!this.proxyModulesLoaded) {\n this.proxyModulesLoaded = !0;\n try {\n this.httpProxyAgentModule = await import(\n /* webpackIgnore: true */\n \"./index-d3db679c.mjs\"\n ), this.httpsProxyAgentModule = await import(\n /* webpackIgnore: true */\n \"./index-a7950765.mjs\"\n );\n } catch {\n try {\n this.httpProxyAgentModule = await import(\n /* webpackIgnore: true */\n \"./index-b1557b45.mjs\"\n ).then((t) => t.i), this.httpProxyAgentModule = await import(\n /* webpackIgnore: true */\n \"./index-b56bbf4e.mjs\"\n ).then((t) => t.i);\n } catch {\n }\n }\n if (this.socksProxyAgentModuleChecked === !1) {\n this.socksProxyAgentModuleChecked = !0;\n try {\n this.socksProxyAgentModule = await import(\n /* webpackIgnore: true */\n \"./index-f7a9a5f6.mjs\"\n ).then((e) => e.i);\n } catch {\n }\n }\n }\n }\n setProxyAgents(e, t, i) {\n let s;\n if (e) {\n if (this.httpProxyAgentModule === void 0)\n throw new be().addMessage(\"You need to load JS proxy modules with `.loadProxyModules()` method at first to use proxies\").exchange(this.id);\n e in this.proxyDictionaries || (this.proxyDictionaries[e] = new this.httpProxyAgentModule.HttpProxyAgent(e)), s = this.proxyDictionaries[e];\n } else if (t) {\n if (this.httpsProxyAgentModule === void 0)\n throw new be().addMessage(\"You need to load JS proxy modules with `.loadProxyModules()` method at first to use proxies\").exchange(this.id);\n t in this.proxyDictionaries || (this.proxyDictionaries[t] = new this.httpsProxyAgentModule.HttpsProxyAgent(t)), s = this.proxyDictionaries[t], s.keepAlive = !0;\n } else if (i) {\n if (this.socksProxyAgentModule === void 0)\n throw new be().addMessage('To use SOCKS proxy with ccxt, at first you need install module \"npm i socks-proxy-agent\" and then initialize proxies with `.loadProxyModules()` method').exchange(this.id);\n i in this.proxyDictionaries || (this.proxyDictionaries[i] = new this.socksProxyAgentModule.SocksProxyAgent(i)), s = this.proxyDictionaries[i];\n }\n return s;\n }\n async loadHttpProxyAgent() {\n if (!this.httpAgent) {\n const e = await import(\n /* webpackIgnore: true */\n \"./index-9da16b22.mjs\"\n ).then((t) => t.h);\n this.httpAgent = new e.Agent();\n }\n return this.httpAgent;\n }\n getHttpAgentIfNeeded(e) {\n if (is && e.substring(0, 5) === \"ws://\") {\n if (this.httpAgent === void 0)\n throw new be().addMessage(\"To use proxy with non-ssl ws:// urls, at first run `await exchange.loadHttpProxyAgent()` method\").exchange(this.id);\n return this.httpAgent;\n }\n }\n async fetch(e, t = \"GET\", i = void 0, s = void 0) {\n if (is && !this.nodeHttpModuleLoaded) {\n this.nodeHttpModuleLoaded = !0;\n const y = await import(\n /* webpackIgnore: true */\n \"./index-eb732fc3.mjs\"\n ).then((w) => w.h);\n this.httpsAgent = new y.Agent({ keepAlive: !0 });\n }\n i = this.extend(this.headers, i);\n const n = this.checkProxyUrlSettings(e, t, i, s);\n let r = !1;\n n !== void 0 && (is && (i = this.extend({ Origin: this.origin }, i), n.substring(0, 5) === \"http:\" && (await this.loadHttpProxyAgent(), r = this.httpAgent)), e = n + e);\n const [a, o, c] = this.checkProxySettings(e, t, i, s);\n this.checkConflictingProxies(a || o || c, n);\n const u = this.setProxyAgents(a, o, c), f = this.userAgent !== void 0 ? this.userAgent : this.user_agent;\n if (f && is && (typeof f == \"string\" ? i = this.extend({ \"User-Agent\": f }, i) : typeof f == \"object\" && \"User-Agent\" in f && (i = this.extend(f, i))), i = this.setHeaders(i), this.verbose && this.log(`fetch Request:\n`, this.id, t, e, `\nRequestHeaders:\n`, i, `\nRequestBody:\n`, s, `\n`), this.fetchImplementation === void 0)\n if (is) {\n this.agent === void 0 && (this.agent = this.httpsAgent);\n try {\n const y = await import(\n /* webpackIgnore: true */\n \"./index-5d944d4f.mjs\"\n );\n this.AbortError = y.AbortError, this.fetchImplementation = y.default, this.FetchError = y.FetchError;\n } catch {\n if (typeof fetch == \"function\")\n this.fetchImplementation = fetch, this.AbortError = DOMException, this.FetchError = TypeError;\n else\n throw new be().addMessage('Seems, \"fetch\" function is not available in your node-js version, please use latest node-js version');\n }\n } else\n this.fetchImplementation = self.fetch, this.AbortError = DOMException, this.FetchError = TypeError;\n const h = this.fetchImplementation, l = { method: t, headers: i, body: s, timeout: this.timeout };\n this.agent && (l.agent = this.agent), r ? l.agent = r : u && (l.agent = u);\n const p = new AbortController();\n l.signal = p.signal;\n const m = setTimeout(() => {\n p.abort();\n }, this.timeout);\n try {\n const y = await h(e, l);\n return clearTimeout(m), this.handleRestResponse(y, e, t, i, s);\n } catch (y) {\n throw y instanceof this.AbortError ? new Nt().addMessage(t + \" \" + e + \" request timed out (\" + this.timeout + \" ms)\").exchange(this.id) : y instanceof this.FetchError ? new be().addMessage(t + \" \" + e + \" fetch failed\").exchange(this.id) : y;\n }\n }\n async fetchFromCache(e = void 0) {\n throw new wu(\"Not implemented\").exchange(this.id);\n }\n parseJson(e) {\n try {\n if (this.isJsonEncodedObject(e))\n return JSON.parse(this.onJsonResponse(e));\n } catch {\n return;\n }\n }\n getResponseHeaders(e) {\n const t = {};\n return e.headers.forEach((i, s) => {\n s = s.split(\"-\").map((n) => this.capitalize(n)).join(\"-\"), t[s] = i;\n }), t;\n }\n handleRestResponse(e, t, i = \"GET\", s = void 0, n = void 0) {\n const r = this.getResponseHeaders(e);\n if (this.handleContentTypeApplicationZip && r[\"Content-Type\"] === \"application/zip\") {\n const a = e.buffer();\n return this.enableLastResponseHeaders && (this.last_response_headers = r), this.enableLastHttpResponse && (this.last_http_response = a), this.verbose && this.log(`handleRestResponse:\n`, this.id, i, t, e.status, e.statusText, `\nResponseHeaders:\n`, r, \"ZIP redacted\", `\n`), a;\n }\n return e.text().then((a) => {\n const o = this.onRestResponse(e.status, e.statusText, t, i, r, a, s, n), c = this.parseJson(o);\n return this.enableLastResponseHeaders && (this.last_response_headers = r), this.enableLastHttpResponse && (this.last_http_response = a), this.enableLastJsonResponse && (this.last_json_response = c), this.verbose && this.log(`handleRestResponse:\n`, this.id, i, t, e.status, e.statusText, `\nResponseHeaders:\n`, r, `\nResponseBody:\n`, a, `\n`), this.handleErrors(e.status, e.statusText, t, i, r, a, c, s, n) || this.handleHttpStatusCode(e.status, e.statusText, t, i, a), c || a;\n });\n }\n onRestResponse(e, t, i, s, n, r, a, o) {\n return r.trim();\n }\n onJsonResponse(e) {\n return this.quoteJsonNumbers ? e.replace(/\":([+.0-9eE-]+)([,}])/g, '\":\"$1\"$2') : e;\n }\n async loadMarketsHelper(e = !1, t = {}) {\n var o, c, u, f, h, l;\n await this.mutex.waitForUnlockAll([\n bn(this.id),\n Ds(this),\n Rs(this),\n wn(this.id),\n Sn(this.id),\n Tn(this.id)\n ]), this.markets = (o = await this.cache.get(bn(this.id), { clone: !1 })) == null ? void 0 : o.data, this.currencies = (c = await this.cache.get(Ds(this), { clone: !1 })) == null ? void 0 : c.data, this.currencies_by_id = (u = await this.cache.get(Rs(this), { clone: !1 })) == null ? void 0 : u.data, this.markets_by_id = (f = await this.cache.get(wn(this.id), { clone: !1 })) == null ? void 0 : f.data, this.symbols = (h = await this.cache.get(Sn(this.id), { clone: !1 })) == null ? void 0 : h.data, this.ids = (l = await this.cache.get(Tn(this.id), { clone: !1 })) == null ? void 0 : l.data;\n const i = (!this.currencies || !this.currencies_by_id || e) && this.has.fetchCurrencies === !0, s = !this.markets || !this.markets_by_id || !this.symbols || !this.ids || e, n = [\n Ds(this),\n Rs(this)\n ], r = [\n bn(this.id),\n wn(this.id),\n Sn(this.id),\n Tn(this.id)\n ], a = [];\n if (i && a.push(...n), s && a.push(...r), this.mutex.isLockedMany(a))\n return this.loadMarketsHelper(e, t);\n await this.mutex.acquireAll(a);\n try {\n const p = [];\n if (i) {\n const m = (async () => {\n this.currencies = await this.fetchCurrencies(), this.currencies_by_id = this.indexBy(this.currencies, \"id\"), await Promise.all([\n this.cache.set({\n key: Ds(this),\n data: this.currencies,\n ttl: An(this),\n clone: !1\n }),\n this.cache.set({\n key: Rs(this),\n data: this.currencies_by_id,\n ttl: An(this),\n clone: !1\n })\n ]);\n })();\n p.push(m);\n }\n if (s) {\n const m = (async () => {\n const y = this.markets || await this.fetchMarkets(t);\n this.markets = y;\n })();\n p.push(m);\n }\n if (await Promise.all(p), !this.currencies) {\n if (this.has.fetchCurrencies === !0)\n throw new Error(\"Currencies should have been fetched but are not available.\");\n this.currencies = {}, this.currencies_by_id = {};\n }\n this.markets && await this.setMarkets(this.markets, this.currencies);\n } finally {\n await this.mutex.releaseAll(a);\n }\n return this.markets;\n }\n async loadMarkets(e = !1, t = {}) {\n return (e && !this.reloadingMarkets || !this.marketsLoading) && (this.reloadingMarkets = !0, this.marketsLoading = this.loadMarketsHelper(e, t).then((i) => (this.reloadingMarkets = !1, i), (i) => {\n throw this.reloadingMarkets = !1, i;\n })), this.marketsLoading;\n }\n async fetchCurrencies(e = {}) {\n return new Promise((t, i) => t(this.currencies));\n }\n async fetchMarkets(e = {}) {\n return new Promise((t, i) => t(Object.values(this.markets)));\n }\n parseNumber(e, t = void 0) {\n if (e === void 0)\n return t;\n try {\n return this.number(e);\n } catch {\n return t;\n }\n }\n handleHttpStatusCode(e, t, i, s, n) {\n const r = e.toString();\n if (r in this.httpExceptions) {\n const a = this.httpExceptions[r];\n throw new a(s + \" \" + i + \" \" + r + \" \" + t + \" \" + n).exchange(this.id);\n }\n }\n remove0xPrefix(e) {\n return e.slice(0, 2) === \"0x\" ? e.slice(2) : e;\n }\n spawn(e, ...t) {\n const i = yo();\n return setTimeout(() => {\n e.apply(this, t).then(i.resolve).catch(i.reject);\n }, 0), i;\n }\n delay(e, t, ...i) {\n setTimeout(() => {\n this.spawn(t, ...i);\n }, e);\n }\n convertToBigInt(e) {\n return BigInt(e);\n }\n stringToCharsArray(e) {\n return e.split(\"\");\n }\n valueIsDefined(e) {\n return e != null;\n }\n arraySlice(e, t, i = void 0) {\n return i === void 0 ? e.slice(t) : e.slice(t, i);\n }\n randomBytes(e) {\n const t = new Xn(), i = [];\n return i.length = e, t.nextBytes(i), $f.from(i).toString(\"hex\");\n }\n getProperty(e, t, i = void 0) {\n return t in e ? e[t] : i;\n }\n setProperty(e, t, i = void 0) {\n e[t] = i;\n }\n axolotl(e, t, i) {\n return lu(e, t, i);\n }\n fixStringifiedJsonMembers(e) {\n let t = e.replaceAll(\"\\\\\", \"\");\n return t = t.replaceAll('\"{', \"{\"), t = t.replaceAll('}\"', \"}\"), t;\n }\n /* eslint-enable */\n // ------------------------------------------------------------------------\n // ########################################################################\n // ########################################################################\n // ########################################################################\n // ########################################################################\n // ######## ######## ########\n // ######## ######## ########\n // ######## ######## ########\n // ######## ######## ########\n // ######## ######################## ########################\n // ######## ######################## ########################\n // ######## ######################## ########################\n // ######## ######################## ########################\n // ######## ######## ########\n // ######## ######## ########\n // ######## ######## ########\n // ######## ######## ########\n // ########################################################################\n // ########################################################################\n // ########################################################################\n // ########################################################################\n // ######## ######## ######## ########\n // ######## ######## ######## ########\n // ######## ######## ######## ########\n // ######## ######## ######## ########\n // ################ ######################## ################\n // ################ ######################## ################\n // ################ ######################## ################\n // ################ ######################## ################\n // ######## ######## ################ ################\n // ######## ######## ################ ################\n // ######## ######## ################ ################\n // ######## ######## ################ ################\n // ########################################################################\n // ########################################################################\n // ########################################################################\n // ########################################################################\n safeBoolN(e, t, i = void 0) {\n const s = this.safeValueN(e, t, i);\n return typeof s == \"boolean\" ? s : i;\n }\n safeBool2(e, t, i, s = void 0) {\n return this.safeBoolN(e, [t, i], s);\n }\n safeBool(e, t, i = void 0) {\n return this.safeBoolN(e, [t], i);\n }\n safeDictN(e, t, i = void 0) {\n const s = this.safeValueN(e, t, i);\n return s === void 0 ? i : typeof s == \"object\" ? s : i;\n }\n safeDict(e, t, i = void 0) {\n return this.safeDictN(e, [t], i);\n }\n safeDict2(e, t, i, s = void 0) {\n return this.safeDictN(e, [t, i], s);\n }\n safeListN(e, t, i = void 0) {\n const s = this.safeValueN(e, t, i);\n return s === void 0 ? i : Array.isArray(s) ? s : i;\n }\n safeList2(e, t, i, s = void 0) {\n return this.safeListN(e, [t, i], s);\n }\n safeList(e, t, i = void 0) {\n return this.safeListN(e, [t], i);\n }\n handleDeltas(e, t) {\n for (let i = 0; i < t.length; i++)\n this.handleDelta(e, t[i]);\n }\n handleDelta(e, t) {\n throw new pe(\"handleDelta\").exchange(this.id);\n }\n getCacheIndex(e, t) {\n return -1;\n }\n findTimeframe(e, t = void 0) {\n t === void 0 && (t = this.timeframes);\n const i = Object.keys(t);\n for (let s = 0; s < i.length; s++) {\n const n = i[s];\n if (t[n] === e)\n return n;\n }\n }\n checkProxyUrlSettings(e = void 0, t = void 0, i = void 0, s = void 0) {\n const n = [];\n let r;\n if (this.proxyUrl !== void 0 && (n.push(\"proxyUrl\"), r = this.proxyUrl), this.proxy_url !== void 0 && (n.push(\"proxy_url\"), r = this.proxy_url), this.proxyUrlCallback !== void 0 && (n.push(\"proxyUrlCallback\"), r = this.proxyUrlCallback(e, t, i, s)), this.proxy_url_callback !== void 0 && (n.push(\"proxy_url_callback\"), r = this.proxy_url_callback(e, t, i, s)), this.proxy !== void 0 && (n.push(\"proxy\"), typeof this.proxy == \"function\" ? r = this.proxy(e, t, i, s) : r = this.proxy), n.length > 1) {\n const o = n.join(\",\");\n throw new be().addMessage(\"You have multiple conflicting proxy settings (\" + o + \"), please use only one from : proxyUrl, proxy_url, proxyUrlCallback, proxy_url_callback\").exchange(this.id);\n }\n return r;\n }\n checkProxySettings(e = void 0, t = void 0, i = void 0, s = void 0) {\n const n = [];\n let r, a, o;\n if (this.valueIsDefined(this.httpProxy) && (n.push(\"httpProxy\"), r = this.httpProxy), this.valueIsDefined(this.http_proxy) && (n.push(\"http_proxy\"), r = this.http_proxy), this.httpProxyCallback !== void 0 && (n.push(\"httpProxyCallback\"), r = this.httpProxyCallback(e, t, i, s)), this.http_proxy_callback !== void 0 && (n.push(\"http_proxy_callback\"), r = this.http_proxy_callback(e, t, i, s)), this.valueIsDefined(this.httpsProxy) && (n.push(\"httpsProxy\"), a = this.httpsProxy), this.valueIsDefined(this.https_proxy) && (n.push(\"https_proxy\"), a = this.https_proxy), this.httpsProxyCallback !== void 0 && (n.push(\"httpsProxyCallback\"), a = this.httpsProxyCallback(e, t, i, s)), this.https_proxy_callback !== void 0 && (n.push(\"https_proxy_callback\"), a = this.https_proxy_callback(e, t, i, s)), this.valueIsDefined(this.socksProxy) && (n.push(\"socksProxy\"), o = this.socksProxy), this.valueIsDefined(this.socks_proxy) && (n.push(\"socks_proxy\"), o = this.socks_proxy), this.socksProxyCallback !== void 0 && (n.push(\"socksProxyCallback\"), o = this.socksProxyCallback(e, t, i, s)), this.socks_proxy_callback !== void 0 && (n.push(\"socks_proxy_callback\"), o = this.socks_proxy_callback(e, t, i, s)), n.length > 1) {\n const u = n.join(\",\");\n throw new be().addMessage(\"You have multiple conflicting proxy settings (\" + u + \"), please use only one from: httpProxy, httpsProxy, httpProxyCallback, httpsProxyCallback, socksProxy, socksProxyCallback\").exchange(this.id);\n }\n return [r, a, o];\n }\n checkConflictingProxies(e, t) {\n if (e && t)\n throw new be().addMessage(\"You have multiple conflicting proxy settings, please use only one from : proxyUrl, httpProxy, httpsProxy, socksProxy\").exchange(this.id);\n }\n filterByLimit(e, t = void 0, i = \"timestamp\", s = !1) {\n if (this.valueIsDefined(t)) {\n const n = e.length;\n if (n > 0) {\n let r = !0;\n if (i in e[0]) {\n const a = e[0][i], o = e[n - 1][i];\n a !== void 0 && o !== void 0 && (r = a <= o);\n }\n s ? (t > n && (t = n), e = r ? this.arraySlice(e, 0, t) : this.arraySlice(e, -t)) : e = r ? this.arraySlice(e, -t) : this.arraySlice(e, 0, t);\n }\n }\n return e;\n }\n filterBySinceLimit(e, t = void 0, i = void 0, s = \"timestamp\", n = !1) {\n const r = this.valueIsDefined(t), a = this.toArray(e);\n let o = a;\n if (r) {\n o = [];\n for (let u = 0; u < a.length; u++) {\n const f = a[u], h = this.safeValue(f, s);\n h && h >= t && o.push(f);\n }\n }\n if (n && i !== void 0)\n return this.arraySlice(o, -i);\n const c = !n && r;\n return this.filterByLimit(o, i, s, c);\n }\n filterByValueSinceLimit(e, t, i = void 0, s = void 0, n = void 0, r = \"timestamp\", a = !1) {\n const o = this.valueIsDefined(i), c = this.valueIsDefined(s), u = this.toArray(e);\n let f = u;\n if (o || c) {\n f = [];\n for (let h = 0; h < u.length; h++) {\n const l = u[h], p = l[t] === i, m = o ? p : !0, y = this.safeValue(l, r), w = y && s && y >= s;\n m && (c ? w : !0) && f.push(l);\n }\n }\n return a && n !== void 0 ? this.arraySlice(f, -n) : this.filterByLimit(f, n, r, c);\n }\n setSandboxMode(e) {\n if (e)\n if (\"test\" in this.urls)\n typeof this.urls.api == \"string\" ? (this.urls.apiBackup = this.urls.api, this.urls.api = this.urls.test) : (this.urls.apiBackup = this.clone(this.urls.api), this.urls.api = this.clone(this.urls.test));\n else\n throw new O().addMessage(\"does not have a sandbox URL\").exchange(this.id);\n else if (\"apiBackup\" in this.urls) {\n typeof this.urls.api == \"string\" ? this.urls.api = this.urls.apiBackup : this.urls.api = this.clone(this.urls.apiBackup);\n const t = this.omit(this.urls, \"apiBackup\");\n this.urls = t;\n }\n }\n async sign(e, t = \"public\", i = \"GET\", s = {}, n = void 0, r = void 0) {\n return {};\n }\n async fetchAccounts(e = {}) {\n throw new pe(\"fetchAccounts\").exchange(this.id);\n }\n async fetchTrades(e, t = void 0, i = void 0, s = {}) {\n throw new pe(\"fetchTrades\").exchange(this.id);\n }\n async fetchDepositAddresses(e = void 0, t = {}) {\n throw new pe(\"fetchDepositAddresses\").exchange(this.id);\n }\n async fetchOrderBook(e, t = void 0, i = {}) {\n throw new pe(\"fetchOrderBook\").exchange(this.id);\n }\n async fetchRestOrderBookSafe(e, t = void 0, i = {}) {\n const s = this.handleOption(\"watchOrderBook\", \"maxRetries\", 3);\n for (let n = 0; n < s; n++)\n try {\n return await this.fetchOrderBook(e, t, i);\n } catch (r) {\n if (n + 1 === s)\n throw r;\n }\n }\n async fetchTime(e = {}) {\n throw new pe(\"fetchTime\").exchange(this.id);\n }\n async fetchTradingLimits(e = void 0, t = {}) {\n throw new pe(\"fetchTradingLimits\").exchange(this.id);\n }\n parseMarket(e) {\n throw new pe(\"parseMarket\").exchange(this.id);\n }\n parseMarkets(e) {\n const t = [];\n for (let i = 0; i < e.length; i++)\n t.push(this.parseMarket(e[i]));\n return t;\n }\n parseTicker(e, t = void 0) {\n throw new pe(\"parseTicker\").exchange(this.id);\n }\n parseDepositAddress(e, t = void 0) {\n throw new pe(\"parseDepositAddress\").exchange(this.id);\n }\n parseTrade(e, t = void 0) {\n throw new pe(\"parseTrade\").exchange(this.id);\n }\n parseTransaction(e, t = void 0) {\n throw new pe(\"parseTransaction\").exchange(this.id);\n }\n parseTransfer(e, t = void 0) {\n throw new pe(\"parseTransfer\").exchange(this.id);\n }\n parseAccount(e) {\n throw new pe(\"parseAccount()\").exchange(this.id);\n }\n parseLedgerEntry(e, t = void 0) {\n throw new pe(\"parseLedgerEntry\").exchange(this.id);\n }\n parseOrder(e, t = void 0) {\n throw new pe(\"parseOrder\").exchange(this.id);\n }\n parsePosition(e, t = void 0) {\n throw new pe(\"parsePosition\").exchange(this.id);\n }\n async transfer(e, t, i, s, n = {}) {\n throw new pe(\"transfer\").exchange(this.id);\n }\n async withdraw(e, t, i, s = void 0, n = {}) {\n throw new pe(\"withdraw\").exchange(this.id);\n }\n async createDepositAddress(e, t = {}) {\n throw new pe(\"createDepositAddress\").exchange(this.id);\n }\n async fetchDepositAddressesByNetwork(e, t = {}) {\n throw new pe(\"fetchDepositAddressesByNetwork\").exchange(this.id);\n }\n parseToInt(e) {\n const t = e.toString(), i = parseFloat(t);\n return parseInt(i);\n }\n parseToNumeric(e) {\n const t = this.numberToString(e);\n return t.indexOf(\".\") >= 0 ? parseFloat(t) : parseInt(t);\n }\n isRoundNumber(e) {\n return this.parseToNumeric(e % 1) === 0;\n }\n afterConstruct() {\n this.createNetworksByIdObject();\n }\n createNetworksByIdObject() {\n const e = this.invertFlatStringDictionary(this.safeValue(this.options, \"networks\", {}));\n this.options.networksById = this.extend(e, this.safeValue(this.options, \"networksById\", {}));\n }\n getDefaultOptions() {\n return {\n networkCodeReplacements: {\n ETH: { ERC20: \"ETH\" },\n TRX: { TRC20: \"TRX\" },\n CRO: { CRC20: \"CRONOS\" }\n }\n };\n }\n safeLedgerEntry(e, t = void 0) {\n t = this.safeCurrency(void 0, t);\n let i = this.safeString(e, \"direction\"), s = this.safeString(e, \"before\"), n = this.safeString(e, \"after\");\n const r = this.safeString(e, \"amount\");\n r !== void 0 && (s === void 0 && n !== void 0 ? s = P.stringSub(n, r) : s !== void 0 && n === void 0 && (n = P.stringAdd(s, r))), s !== void 0 && n !== void 0 && i === void 0 && (P.stringGt(s, n) && (i = \"out\"), P.stringGt(n, s) && (i = \"in\"));\n const a = this.safeValue(e, \"fee\");\n a !== void 0 && (a.cost = this.safeNumber(a, \"cost\"));\n const o = this.safeInteger(e, \"timestamp\"), c = this.safeDict(e, \"info\", {});\n return {\n id: this.safeString(e, \"id\"),\n timestamp: o,\n datetime: this.iso8601(o),\n direction: i,\n account: this.safeString(e, \"account\"),\n referenceId: this.safeString(e, \"referenceId\"),\n referenceAccount: this.safeString(e, \"referenceAccount\"),\n type: this.safeString(e, \"type\"),\n currency: t.code,\n amount: this.parseNumber(r),\n before: this.parseNumber(s),\n after: this.parseNumber(n),\n status: this.safeString(e, \"status\"),\n fee: a,\n info: c\n };\n }\n safeCurrencyStructure(e) {\n return this.extend({\n info: void 0,\n id: void 0,\n numericId: void 0,\n code: void 0,\n precision: void 0,\n type: void 0,\n name: void 0,\n active: void 0,\n deposit: void 0,\n withdraw: void 0,\n fee: void 0,\n fees: {},\n networks: {},\n limits: {\n deposit: {\n min: void 0,\n max: void 0\n },\n withdraw: {\n min: void 0,\n max: void 0\n }\n }\n }, e);\n }\n safeMarketStructure(e = void 0) {\n const t = {\n id: void 0,\n lowercaseId: void 0,\n symbol: void 0,\n base: void 0,\n quote: void 0,\n settle: void 0,\n baseId: void 0,\n quoteId: void 0,\n settleId: void 0,\n type: void 0,\n spot: void 0,\n margin: void 0,\n swap: void 0,\n future: void 0,\n option: void 0,\n index: void 0,\n active: void 0,\n contract: void 0,\n linear: void 0,\n inverse: void 0,\n subType: void 0,\n taker: void 0,\n maker: void 0,\n contractSize: void 0,\n expiry: void 0,\n expiryDatetime: void 0,\n strike: void 0,\n optionType: void 0,\n precision: {\n amount: void 0,\n price: void 0,\n cost: void 0,\n base: void 0,\n quote: void 0\n },\n limits: {\n leverage: {\n min: void 0,\n max: void 0\n },\n amount: {\n min: void 0,\n max: void 0\n },\n price: {\n min: void 0,\n max: void 0\n },\n cost: {\n min: void 0,\n max: void 0\n }\n },\n created: void 0,\n info: void 0\n };\n if (e !== void 0) {\n const i = this.extend(t, e);\n return i.spot && (i.contract === void 0 && (i.contract = !1), i.swap === void 0 && (i.swap = !1), i.future === void 0 && (i.future = !1), i.option === void 0 && (i.option = !1), i.index === void 0 && (i.index = !1)), i;\n }\n return t;\n }\n async setMarkets(e, t = void 0) {\n const i = [];\n this.markets_by_id = {};\n const s = this.sortBy(this.toArray(e), \"spot\", !0, !0);\n for (let o = 0; o < s.length; o++) {\n const c = s[o];\n c.id in this.markets_by_id ? this.markets_by_id[c.id].push(c) : this.markets_by_id[c.id] = [c];\n const u = this.deepExtend(this.safeMarketStructure(), {\n precision: this.precision,\n limits: this.limits\n }, this.fees.trading, c);\n u.linear ? u.subType = \"linear\" : u.inverse ? u.subType = \"inverse\" : u.subType = void 0, i.push(u);\n }\n this.markets = this.indexBy(i, \"symbol\");\n const n = this.keysort(this.markets), r = this.keysort(this.markets_by_id);\n if (this.symbols = Object.keys(n), this.ids = Object.keys(r), t !== void 0)\n this.currencies = this.deepExtend(this.currencies, t);\n else {\n let o = [], c = [];\n for (let m = 0; m < i.length; m++) {\n const y = i[m], w = this.precisionMode === Hr ? 8 : this.parseNumber(\"1e-8\"), S = this.safeDict(y, \"precision\", {});\n if (\"base\" in y) {\n const b = this.safeCurrencyStructure({\n id: this.safeString2(y, \"baseId\", \"base\"),\n numericId: this.safeInteger(y, \"baseNumericId\"),\n code: this.safeString(y, \"base\"),\n precision: this.safeValue2(S, \"base\", \"amount\", w)\n });\n o.push(b);\n }\n if (\"quote\" in y) {\n const b = this.safeCurrencyStructure({\n id: this.safeString2(y, \"quoteId\", \"quote\"),\n numericId: this.safeInteger(y, \"quoteNumericId\"),\n code: this.safeString(y, \"quote\"),\n precision: this.safeValue2(S, \"quote\", \"price\", w)\n });\n c.push(b);\n }\n }\n o = this.sortBy(o, \"code\", !1, \"\"), c = this.sortBy(c, \"code\", !1, \"\"), this.baseCurrencies = this.indexBy(o, \"code\"), this.quoteCurrencies = this.indexBy(c, \"code\");\n const u = this.arrayConcat(o, c), f = this.groupBy(u, \"code\"), h = Object.keys(f), l = [];\n for (let m = 0; m < h.length; m++) {\n const y = h[m], w = this.safeList(f, y, []);\n let S = this.safeValue(w, 0);\n for (let b = 1; b < w.length; b++) {\n const T = w[b];\n this.precisionMode === gd ? S = T.precision < S.precision ? T : S : S = T.precision > S.precision ? T : S;\n }\n l.push(S);\n }\n const p = this.sortBy(l, \"code\");\n this.currencies = this.deepExtend(this.currencies, this.indexBy(p, \"code\"));\n }\n this.currencies_by_id = this.indexBy(this.currencies, \"id\");\n const a = this.keysort(this.currencies);\n return this.codes = Object.keys(a), await Promise.all([\n this.cache.set({\n key: wn(this.id),\n data: this.markets_by_id,\n ttl: qs,\n clone: !1\n }),\n this.cache.set({\n key: bn(this.id),\n data: this.markets,\n ttl: qs,\n clone: !1\n }),\n this.cache.set({\n key: Ds(this),\n data: this.currencies,\n ttl: An(this),\n clone: !1\n }),\n this.cache.set({\n key: Rs(this),\n data: this.currencies_by_id,\n ttl: An(this),\n clone: !1\n }),\n this.cache.set({\n key: Sn(this.id),\n data: this.symbols,\n ttl: qs,\n clone: !1\n }),\n this.cache.set({\n key: Tn(this.id),\n data: this.ids,\n ttl: qs,\n clone: !1\n })\n ]), this.markets;\n }\n safeBalance(e) {\n const t = this.omit(e, [\"info\", \"timestamp\", \"datetime\", \"free\", \"used\", \"total\"]), i = Object.keys(t), s = {\n info: e == null ? void 0 : e.info,\n timestamp: e == null ? void 0 : e.timestamp,\n datetime: e == null ? void 0 : e.datetime,\n free: {},\n used: {},\n total: {},\n dept: {}\n };\n for (let a = 0; a < i.length; a++) {\n const o = i[a];\n let c = this.safeString(e[o], \"total\"), u = this.safeString(e[o], \"free\"), f = this.safeString(e[o], \"used\");\n const h = this.safeString(e[o], \"debt\");\n c === void 0 && u !== void 0 && f !== void 0 && (c = P.stringAdd(u, f)), u === void 0 && c !== void 0 && f !== void 0 && (u = P.stringSub(c, f)), f === void 0 && c !== void 0 && u !== void 0 && (f = P.stringSub(c, u));\n const l = this.parseNumber(u), p = this.parseNumber(f), m = this.parseNumber(c);\n if (!(m === void 0 || l === void 0 || p === void 0 || m === 0) && (s[o] = {\n free: l,\n used: p,\n total: m\n }, s.free[o] = l, s.used[o] = p, s.total[o] = m, h !== void 0)) {\n const y = this.parseNumber(h);\n s[o].debt = y, s.dept[o] = y;\n }\n }\n return Object.keys(s.dept).length === 0 && delete s.dept, s;\n }\n safeOrder(e, t = void 0) {\n let i = this.omitZero(this.safeString(e, \"amount\")), s = this.safeString(e, \"remaining\"), n = this.safeString(e, \"filled\"), r = this.safeString(e, \"cost\"), a = this.omitZero(this.safeString(e, \"average\")), o = this.omitZero(this.safeString(e, \"price\")), c = this.safeInteger(e, \"lastTradeTimestamp\"), u = this.safeString(e, \"symbol\"), f = this.safeString(e, \"side\");\n const h = this.safeString(e, \"status\"), l = n === void 0, p = r === void 0, m = c === void 0, y = this.safeValue(e, \"fee\"), w = y === void 0, S = this.safeValue(e, \"fees\") === void 0, b = u === void 0, T = f === void 0, x = w || S, v = this.safeList(e, \"fees\", []);\n let _ = [];\n if (l || p || x) {\n const K = this.safeValue(e, \"trades\", _), R = this.number;\n this.number = String;\n const U = this.safeValue(K, 0);\n U !== void 0 && \"info\" in U && \"id\" in U ? _ = K : _ = this.parseTrades(K, t), this.number = R;\n let J = 0;\n const ae = Array.isArray(_);\n if (ae && (J = _.length), ae && J > 0) {\n e.symbol === void 0 && (e.symbol = _[0].symbol), e.side === void 0 && (e.side = _[0].side), e.type === void 0 && (e.type = _[0].type), e.id === void 0 && (e.id = _[0].order), l && (n = \"0\"), p && (r = \"0\");\n for (let A = 0; A < _.length; A++) {\n const M = _[A], q = this.safeString(M, \"amount\");\n l && q !== void 0 && (n = P.stringAdd(n, q));\n const H = this.safeString(M, \"cost\");\n p && H !== void 0 && (r = P.stringAdd(r, H)), b && (u = this.safeString(M, \"symbol\")), T && (f = this.safeString(M, \"side\"));\n const le = this.safeValue(M, \"timestamp\");\n if (m && le !== void 0 && (c === void 0 ? c = le : c = Math.max(c, le)), x) {\n const oe = this.safeValue(M, \"fees\");\n if (oe !== void 0)\n for (let he = 0; he < oe.length; he++) {\n const Ie = oe[he];\n v.push(this.extend({}, Ie));\n }\n else {\n const he = this.safeValue(M, \"fee\");\n he !== void 0 && v.push(this.extend({}, he));\n }\n }\n }\n }\n }\n if (x) {\n const K = this.reduceFees ? this.reduceFeesByCurrency(v) : v, R = K.length;\n for (let U = 0; U < R; U++)\n K[U].cost = this.safeNumber(K[U], \"cost\"), \"rate\" in K[U] && (K[U].rate = this.safeNumber(K[U], \"rate\"));\n if (!w && R === 0) {\n const U = this.deepExtend(y);\n U.cost = this.safeNumber(U, \"cost\"), \"rate\" in U && (U.rate = this.safeNumber(U, \"rate\")), K.push(U);\n }\n e.fees = K, w && R === 1 && (e.fee = K[0]);\n }\n i === void 0 && (n !== void 0 && s !== void 0 ? i = P.stringAdd(n, s) : h === \"closed\" && (i = n)), n === void 0 && (i !== void 0 && s !== void 0 ? n = P.stringSub(i, s) : h === \"closed\" && i !== void 0 && (n = i)), s === void 0 && (i !== void 0 && n !== void 0 ? s = P.stringSub(i, n) : h === \"closed\" && (s = \"0\"));\n const V = this.safeBool(t, \"inverse\", !1), j = this.numberToString(this.safeValue(t, \"contractSize\", 1));\n if (a === void 0 && n !== void 0 && r !== void 0 && P.stringGt(n, \"0\")) {\n const K = P.stringMul(n, j);\n V ? a = P.stringDiv(K, r) : a = P.stringDiv(r, K);\n }\n if (p && n !== void 0 && (a !== void 0 || o !== void 0)) {\n let K;\n a === void 0 ? K = o : K = a;\n const R = P.stringMul(n, j);\n V ? r = P.stringDiv(R, K) : r = P.stringMul(R, K);\n }\n const W = this.safeValue(e, \"type\");\n (o === void 0 || P.stringEquals(o, \"0\")) && W === \"market\" && (o = a);\n for (let K = 0; K < _.length; K++) {\n const R = _[K];\n R.amount = this.safeNumber(R, \"amount\"), R.price = this.safeNumber(R, \"price\"), R.cost = this.safeNumber(R, \"cost\");\n const U = this.safeDict(R, \"fee\", {});\n U.cost = this.safeNumber(U, \"cost\"), \"rate\" in U && (U.rate = this.safeNumber(U, \"rate\"));\n const Y = this.safeList(R, \"fees\", []);\n for (let J = 0; J < Y.length; J++)\n Y[J].cost = this.safeNumber(Y[J], \"cost\");\n R.fees = Y, R.fee = U;\n }\n let Q = this.safeString(e, \"timeInForce\"), se = this.safeValue(e, \"postOnly\");\n Q === void 0 ? (this.safeString(e, \"type\") === \"market\" && (Q = \"IOC\"), se && (Q = \"PO\")) : se === void 0 && (se = Q === \"PO\");\n const $ = this.safeInteger(e, \"timestamp\"), te = this.safeInteger(e, \"lastUpdateTimestamp\");\n let E = this.safeString(e, \"datetime\");\n E === void 0 && (E = this.iso8601($));\n const N = this.parseNumber(this.safeString2(e, \"triggerPrice\", \"stopPrice\")), L = this.parseNumber(this.safeString(e, \"takeProfitPrice\")), z = this.parseNumber(this.safeString(e, \"stopLossPrice\"));\n return this.extend(e, {\n id: this.safeString(e, \"id\"),\n clientOrderId: this.safeString(e, \"clientOrderId\"),\n timestamp: $,\n datetime: E,\n symbol: u,\n type: this.safeString(e, \"type\"),\n side: f,\n lastTradeTimestamp: c,\n lastUpdateTimestamp: te,\n price: this.parseNumber(o),\n amount: this.parseNumber(i),\n cost: this.parseNumber(r),\n average: this.parseNumber(a),\n filled: this.parseNumber(n),\n remaining: this.parseNumber(s),\n timeInForce: Q,\n postOnly: se,\n trades: _,\n reduceOnly: this.safeValue(e, \"reduceOnly\"),\n stopPrice: N,\n triggerPrice: N,\n takeProfitPrice: L,\n stopLossPrice: z,\n status: h,\n fee: this.safeValue(e, \"fee\")\n });\n }\n parseOrders(e, t = void 0, i = void 0, s = void 0, n = {}) {\n let r = [];\n if (Array.isArray(e))\n for (let o = 0; o < e.length; o++) {\n const c = this.extend(this.parseOrder(e[o], t), n);\n r.push(c);\n }\n else {\n const o = Object.keys(e);\n for (let c = 0; c < o.length; c++) {\n const u = o[c], f = this.extend(this.parseOrder(this.extend({ id: u }, e[u]), t), n);\n r.push(f);\n }\n }\n r = this.sortBy(r, \"timestamp\");\n const a = t !== void 0 ? t.symbol : void 0;\n return this.filterBySymbolSinceLimit(r, a, i, s);\n }\n calculateFee(e, t, i, s, n, r = \"taker\", a = {}) {\n if (t === \"market\" && r === \"maker\")\n throw new g('calculateFee() - you have provided incompatible arguments - \"market\" type order can not be \"maker\". Change either the \"type\" or the \"takerOrMaker\" argument to calculate the fee.').exchange(this.id);\n const o = this.markets[e], c = this.safeString(o, \"feeSide\", \"quote\");\n let u;\n c === \"get\" ? u = i === \"sell\" : c === \"give\" ? u = i === \"buy\" : u = c === \"quote\";\n let f = this.numberToString(s), h;\n if (u) {\n const p = this.numberToString(n);\n f = P.stringMul(f, p), h = \"quote\";\n } else\n h = \"base\";\n o.spot || (h = \"settle\"), t === \"market\" && (r = \"taker\");\n const l = this.safeString(o, r);\n return f = P.stringMul(f, l), {\n type: r,\n currency: o[h],\n rate: this.parseNumber(l),\n cost: this.parseNumber(f)\n };\n }\n safeLiquidation(e, t = void 0) {\n const i = this.safeString(e, \"contracts\"), s = this.safeString(t, \"contractSize\"), n = this.safeString(e, \"price\");\n let r = this.safeString(e, \"baseValue\"), a = this.safeString(e, \"quoteValue\");\n return r === void 0 && i !== void 0 && s !== void 0 && n !== void 0 && (r = P.stringMul(i, s)), a === void 0 && r !== void 0 && n !== void 0 && (a = P.stringMul(r, n)), e.contracts = this.parseNumber(i), e.contractSize = this.parseNumber(s), e.price = this.parseNumber(n), e.baseValue = this.parseNumber(r), e.quoteValue = this.parseNumber(a), e;\n }\n safeTrade(e, t = void 0) {\n const i = this.safeString(e, \"amount\"), s = this.safeString(e, \"price\");\n let n = this.safeString(e, \"cost\");\n if (n === void 0) {\n const f = this.safeString(t, \"contractSize\");\n let h = s;\n f !== void 0 && (this.safeBool(t, \"inverse\", !1) && (h = P.stringDiv(\"1\", s)), h = P.stringMul(h, f)), n = P.stringMul(h, i);\n }\n const r = this.safeValue(e, \"fee\") === void 0, a = this.safeValue(e, \"fees\") === void 0, o = r || a, c = [], u = this.safeValue(e, \"fee\");\n if (o) {\n const f = this.reduceFees ? this.reduceFeesByCurrency(c) : c, h = f.length;\n for (let p = 0; p < h; p++)\n f[p].cost = this.safeNumber(f[p], \"cost\"), \"rate\" in f[p] && (f[p].rate = this.safeNumber(f[p], \"rate\"));\n if (!r && h === 0) {\n const p = this.deepExtend(u);\n p.cost = this.safeNumber(p, \"cost\"), \"rate\" in p && (p.rate = this.safeNumber(p, \"rate\")), f.push(p);\n }\n a && (e.fees = f), r && h === 1 && (e.fee = f[0]);\n const l = this.safeValue(e, \"fee\");\n l !== void 0 && (l.cost = this.safeNumber(l, \"cost\"), \"rate\" in l && (l.rate = this.safeNumber(l, \"rate\")), e.fee = l);\n }\n return e.amount = this.parseNumber(i), e.price = this.parseNumber(s), e.cost = this.parseNumber(n), e;\n }\n invertFlatStringDictionary(e) {\n const t = {}, i = Object.keys(e);\n for (let s = 0; s < i.length; s++) {\n const n = i[s], r = e[n];\n typeof r == \"string\" && (t[r] = n);\n }\n return t;\n }\n reduceFeesByCurrency(e) {\n const t = {};\n for (let n = 0; n < e.length; n++) {\n const r = e[n], a = this.safeString(r, \"currency\");\n if (a !== void 0) {\n const o = this.safeString(r, \"rate\"), c = this.safeValue(r, \"cost\");\n if (P.stringEq(c, \"0\"))\n continue;\n a in t || (t[a] = {});\n const u = o === void 0 ? \"\" : o;\n u in t[a] ? t[a][u].cost = P.stringAdd(t[a][u].cost, c) : (t[a][u] = {\n currency: a,\n cost: c\n }, o !== void 0 && (t[a][u].rate = o));\n }\n }\n let i = [];\n const s = Object.values(t);\n for (let n = 0; n < s.length; n++) {\n const r = Object.values(s[n]);\n i = this.arrayConcat(i, r);\n }\n return i;\n }\n safeTicker(e, t = void 0) {\n let i = this.omitZero(this.safeString(e, \"open\")), s = this.omitZero(this.safeString(e, \"close\")), n = this.omitZero(this.safeString(e, \"last\")), r = this.omitZero(this.safeString(e, \"change\")), a = this.omitZero(this.safeString(e, \"percentage\")), o = this.omitZero(this.safeString(e, \"average\")), c = this.omitZero(this.safeString(e, \"vwap\"));\n const u = this.safeString(e, \"baseVolume\"), f = this.safeString(e, \"quoteVolume\");\n return c === void 0 && (c = P.stringDiv(this.omitZero(f), u)), n !== void 0 && s === void 0 ? s = n : n === void 0 && s !== void 0 && (n = s), n !== void 0 && i !== void 0 && (r === void 0 && (r = P.stringSub(n, i)), o === void 0 && (o = P.stringDiv(P.stringAdd(n, i), \"2\"))), a === void 0 && r !== void 0 && i !== void 0 && P.stringGt(i, \"0\") && (a = P.stringMul(P.stringDiv(r, i), \"100\")), r === void 0 && a !== void 0 && i !== void 0 && (r = P.stringDiv(P.stringMul(a, i), \"100\")), i === void 0 && n !== void 0 && r !== void 0 && (i = P.stringSub(n, r)), this.extend(e, {\n bid: this.parseNumber(this.omitZero(this.safeNumber(e, \"bid\"))),\n bidVolume: this.safeNumber(e, \"bidVolume\"),\n ask: this.parseNumber(this.omitZero(this.safeNumber(e, \"ask\"))),\n askVolume: this.safeNumber(e, \"askVolume\"),\n high: this.parseNumber(this.omitZero(this.safeString(e, \"high\"))),\n low: this.parseNumber(this.omitZero(this.safeNumber(e, \"low\"))),\n open: this.parseNumber(this.omitZero(this.parseNumber(i))),\n close: this.parseNumber(this.omitZero(this.parseNumber(s))),\n last: this.parseNumber(this.omitZero(this.parseNumber(n))),\n change: this.parseNumber(r),\n percentage: this.parseNumber(a),\n average: this.parseNumber(o),\n vwap: this.parseNumber(c),\n baseVolume: this.parseNumber(u),\n quoteVolume: this.parseNumber(f),\n previousClose: this.safeNumber(e, \"previousClose\")\n });\n }\n async fetchOHLCV(e, t = \"1m\", i = void 0, s = void 0, n = {}) {\n let r = \"\";\n throw this.has.fetchTrades && (r = '. If you want to build OHLCV candles from trade executions data, visit https://github.com/ccxt/ccxt/tree/master/examples/ and see \"build-ohlcv-bars\" file'), new pe(\"fetchOHLCV\").addMessage(r).exchange(this.id);\n }\n convertTradingViewToOHLCV(e, t = \"t\", i = \"o\", s = \"h\", n = \"l\", r = \"c\", a = \"v\", o = !1) {\n const c = [], u = this.safeList(e, t, []), f = this.safeList(e, i, []), h = this.safeList(e, s, []), l = this.safeList(e, n, []), p = this.safeList(e, r, []), m = this.safeList(e, a, []);\n for (let y = 0; y < u.length; y++)\n c.push([\n o ? this.safeInteger(u, y) : this.safeTimestamp(u, y),\n this.safeValue(f, y),\n this.safeValue(h, y),\n this.safeValue(l, y),\n this.safeValue(p, y),\n this.safeValue(m, y)\n ]);\n return c;\n }\n convertOHLCVToTradingView(e, t = \"t\", i = \"o\", s = \"h\", n = \"l\", r = \"c\", a = \"v\", o = !1) {\n const c = {};\n c[t] = [], c[i] = [], c[s] = [], c[n] = [], c[r] = [], c[a] = [];\n for (let u = 0; u < e.length; u++) {\n const f = o ? e[u][0] : this.parseToInt(e[u][0] / 1e3);\n c[t].push(f), c[i].push(e[u][1]), c[s].push(e[u][2]), c[n].push(e[u][3]), c[r].push(e[u][4]), c[a].push(e[u][5]);\n }\n return c;\n }\n async fetchWebEndpoint(e, t, i, s = void 0, n = void 0) {\n let r = \"\";\n const a = this.safeValue(this.options, e, {}), o = this.safeBool(a, \"webApiMuteFailure\", !0);\n try {\n if (this.safeBool(a, \"webApiEnable\", !0) !== !0)\n return;\n const c = this.safeValue(a, \"webApiRetries\", 10);\n let u, f = 0;\n for (; f < c; )\n try {\n u = await this[t]({});\n break;\n } catch (l) {\n if (f = f + 1, f === c)\n throw l;\n }\n let h = u;\n if (s !== void 0 && (h = h.split(s)[1]), n !== void 0 && (h = h.split(n)[0]), i && typeof h == \"string\") {\n const l = this.parseJson(h.trim());\n if (l)\n return l;\n throw new be().addMessage(\"could not parse the response into json\").exchange(this.id);\n } else\n return h;\n } catch {\n r = this.id + \" \" + e + \"() failed to fetch correct data from website. Probably webpage markup has been changed, breaking the page custom parser.\";\n }\n if (!o)\n throw new be().addMessage(r).exchange(this.id);\n }\n marketIds(e) {\n if (e === void 0)\n return e;\n const t = [];\n for (let i = 0; i < e.length; i++)\n t.push(this.marketId(e[i]));\n return t;\n }\n marketSymbols(e, t = void 0, i = !0, s = !1, n = !1) {\n if (e === void 0) {\n if (!i)\n throw new g(\"Empty list of symbols is not supported\").exchange(this.id);\n return e;\n }\n if (e.length === 0) {\n if (!i)\n throw new g(\"Empty list of symbols is not supported\").exchange(this.id);\n return e;\n }\n const a = [];\n let o, c;\n for (let u = 0; u < e.length; u++) {\n const f = this.market(e[u]);\n if (s && o !== void 0 && f.type !== o)\n throw new pt().addMessage(\"Symbols must be of the same type, either \" + o + \" or \" + f.type + \".\").exchange(this.id);\n if (n && c !== void 0 && f.linear !== c)\n throw new pt().addMessage(\"Symbols must be of the same subType, either linear or inverse.\").exchange(this.id);\n if (t !== void 0 && f.type !== t)\n throw new pt().addMessage(\"Symbols must be of the same type \" + t + \". If the type is incorrect you can change it in options or the params of the request\").exchange(this.id);\n o = f.type, f.spot || (c = f.linear);\n const h = this.safeString(f, \"symbol\", e[u]);\n a.push(h);\n }\n return a;\n }\n marketCodes(e) {\n if (e === void 0)\n return e;\n const t = [];\n for (let i = 0; i < e.length; i++)\n t.push(this.getCodeFromCurrencyId(e[i]));\n return t;\n }\n parseBidsAsks(e, t = 0, i = 1, s = 2) {\n e = this.toArray(e);\n const n = [];\n for (let r = 0; r < e.length; r++)\n n.push(this.parseBidAsk(e[r], t, i, s));\n return n;\n }\n async fetchL2OrderBook(e, t = void 0, i = {}) {\n const s = await this.fetchOrderBook(e, t, i);\n return this.extend(s, {\n asks: this.sortBy(this.aggregate(s.asks), 0),\n bids: this.sortBy(this.aggregate(s.bids), 0, !0)\n });\n }\n filterBySymbol(e, t = void 0) {\n if (t === void 0)\n return e;\n const i = [];\n for (let s = 0; s < e.length; s++)\n this.safeString(e[s], \"symbol\") === t && i.push(e[s]);\n return i;\n }\n parseOHLCV(e, t = void 0) {\n return Array.isArray(e) ? [\n this.safeInteger(e, 0),\n this.safeNumber(e, 1),\n this.safeNumber(e, 2),\n this.safeNumber(e, 3),\n this.safeNumber(e, 4),\n this.safeNumber(e, 5)\n // volume\n ] : e;\n }\n networkCodeToId(e, t = void 0) {\n if (e === void 0)\n return;\n const i = this.safeValue(this.options, \"networks\", {});\n let s = this.safeString(i, e);\n if (s === void 0)\n if (t === void 0)\n s = e;\n else {\n const n = this.safeValue(this.options, \"networkCodeReplacements\", {});\n if (t in n) {\n const r = n[t], a = Object.keys(r);\n for (let o = 0; o < a.length; o++) {\n const c = a[o];\n if (r[c] === e) {\n s = c;\n break;\n }\n }\n }\n s === void 0 && (s = e);\n }\n return s;\n }\n networkIdToCode(e, t = void 0) {\n if (e === void 0)\n return;\n const i = this.safeDict(this.options, \"networksById\", {});\n let s = this.safeString(i, e, e);\n if (t !== void 0) {\n const n = this.safeValue(this.options, \"networkCodeReplacements\", {});\n if (t in n) {\n const r = this.safeValue(n, t, {});\n s = this.safeString(r, s, s);\n }\n }\n return s;\n }\n handleNetworkCodeAndParams(e) {\n const t = this.safeString2(e, \"networkCode\", \"network\");\n return t !== void 0 && (e = this.omit(e, [\"networkCode\", \"network\"])), [t, e];\n }\n handleEcidAndParams(e) {\n const t = this.safeString2(e, \"ecid\", \"network\");\n return t !== void 0 && (e = this.omit(e, [\"ecid\", \"network\"])), [t, e];\n }\n defaultNetworkCode(e) {\n let t;\n const i = this.safeDict(this.options, \"defaultNetworks\", {});\n if (e in i)\n t = i[e];\n else {\n const s = this.safeDict(this.options, \"defaultNetwork\");\n s !== void 0 && (t = s);\n }\n return t;\n }\n selectNetworkCodeFromUnifiedNetworks(e, t, i) {\n return this.selectNetworkKeyFromNetworks(e, t, i, !0);\n }\n selectNetworkIdFromRawNetworks(e, t, i) {\n return this.selectNetworkKeyFromNetworks(e, t, i, !1);\n }\n selectNetworkKeyFromNetworks(e, t, i, s = !1) {\n let n;\n const r = Object.keys(i), a = r.length;\n if (t !== void 0) {\n if (a === 0)\n throw new ka(t).addMessage(\"Network did not return any result for \" + e).exchange(this.id);\n {\n const o = s ? t : this.networkCodeToId(t, e);\n if (o in i)\n n = o;\n else\n throw new ka(o).addMessage(\"Network was not found for \" + e + \", use one of \" + r.join(\", \")).exchange(this.id);\n }\n } else {\n if (a === 0)\n throw new Kn(e).exchange(this.id);\n {\n const o = this.defaultNetworkCode(e), c = s ? o : this.networkCodeToId(o, e);\n n = c in i ? c : r[0];\n }\n }\n return n;\n }\n safeNumber2(e, t, i, s = void 0) {\n const n = this.safeString2(e, t, i);\n return this.parseNumber(n, s);\n }\n parseOrderBook(e, t, i = void 0, s = \"bids\", n = \"asks\", r = 0, a = 1, o = 2) {\n const c = this.parseBidsAsks(this.safeValue(e, s, []), r, a, o), u = this.parseBidsAsks(this.safeValue(e, n, []), r, a, o);\n return {\n symbol: t,\n bids: this.sortBy(c, 0, !0),\n asks: this.sortBy(u, 0),\n timestamp: i,\n datetime: this.iso8601(i),\n nonce: void 0\n };\n }\n parseOHLCVs(e, t = void 0, i = \"1m\", s = void 0, n = void 0) {\n const r = [];\n for (let o = 0; o < e.length; o++)\n r.push(this.parseOHLCV(e[o], t));\n const a = this.sortBy(r, 0);\n return this.filterBySinceLimit(a, s, n, 0);\n }\n async loadTradingLimits(e = void 0, t = !1, i = {}) {\n if (this.has.fetchTradingLimits && (t || !(\"limitsLoaded\" in this.options))) {\n const s = await this.fetchTradingLimits(e);\n for (let n = 0; n < e.length; n++) {\n const r = e[n];\n this.markets[r] = this.deepExtend(this.markets[r], s[r]);\n }\n this.options.limitsLoaded = this.milliseconds();\n }\n return this.markets;\n }\n safePosition(e) {\n const t = this.safeString(e, \"unrealisedPnl\"), i = this.safeString(e, \"initialMargin\");\n if (this.safeValue(e, \"percentage\") === void 0 && t !== void 0 && i !== void 0) {\n const o = P.stringMul(P.stringDiv(t, i, 4), \"100\");\n e.percentage = this.parseNumber(o);\n }\n let n = this.safeNumber(e, \"contractSize\");\n const r = this.safeString(e, \"symbol\");\n let a;\n return r !== void 0 && (a = this.safeValue(this.markets, r)), n === void 0 && a !== void 0 && (n = this.safeNumber(a, \"contractSize\"), e.contractSize = n), e;\n }\n parsePositions(e, t = void 0, i = {}) {\n t = this.marketSymbols(t), e = this.toArray(e);\n const s = [];\n for (let n = 0; n < e.length; n++) {\n const r = this.extend(this.parsePosition(e[n], void 0), i);\n s.push(r);\n }\n return this.filterByArrayPositions(s, \"symbol\", t, !1);\n }\n parseAccounts(e, t = {}) {\n e = this.toArray(e);\n const i = [];\n for (let s = 0; s < e.length; s++) {\n const n = this.extend(this.parseAccount(e[s]), t);\n i.push(n);\n }\n return i;\n }\n parseTrades(e, t = void 0, i = void 0, s = void 0, n = {}) {\n e = this.toArray(e);\n let r = [];\n for (let o = 0; o < e.length; o++) {\n const c = this.extend(this.parseTrade(e[o], t), n);\n r.push(c);\n }\n r = this.sortBy2(r, \"timestamp\", \"id\");\n const a = t !== void 0 ? t.symbol : void 0;\n return this.filterBySymbolSinceLimit(r, a, i, s);\n }\n parseTransactions(e, t = void 0, i = void 0, s = void 0, n = {}) {\n e = this.toArray(e);\n let r = [];\n for (let o = 0; o < e.length; o++) {\n const c = this.extend(this.parseTransaction(e[o], t), n);\n r.push(c);\n }\n r = this.sortBy(r, \"timestamp\");\n const a = t !== void 0 ? t.code : void 0;\n return this.filterByCurrencySinceLimit(r, a, i, s);\n }\n parseTransfers(e, t = void 0, i = void 0, s = void 0, n = {}) {\n e = this.toArray(e);\n let r = [];\n for (let o = 0; o < e.length; o++) {\n const c = this.extend(this.parseTransfer(e[o], t), n);\n r.push(c);\n }\n r = this.sortBy(r, \"timestamp\");\n const a = t !== void 0 ? t.code : void 0;\n return this.filterByCurrencySinceLimit(r, a, i, s);\n }\n parseLedger(e, t = void 0, i = void 0, s = void 0, n = {}) {\n let r = [];\n const a = this.toArray(e);\n for (let c = 0; c < a.length; c++) {\n const u = this.parseLedgerEntry(a[c], t);\n if (Array.isArray(u))\n for (let f = 0; f < u.length; f++)\n r.push(this.extend(u[f], n));\n else\n r.push(this.extend(u, n));\n }\n r = this.sortBy(r, \"timestamp\");\n const o = t !== void 0 ? t.code : void 0;\n return this.filterByCurrencySinceLimit(r, o, i, s);\n }\n nonce() {\n return this.seconds();\n }\n setHeaders(e) {\n return e;\n }\n marketId(e) {\n const t = this.market(e);\n return t !== void 0 ? t.id : e;\n }\n symbol(e) {\n const t = this.market(e);\n return this.safeString(t, \"symbol\", e);\n }\n handleParamString(e, t, i = void 0) {\n const s = this.safeString(e, t, i);\n return s !== void 0 && (e = this.omit(e, t)), [s, e];\n }\n resolvePath(e, t) {\n return [\n this.implodeParams(e, t),\n this.omit(t, this.extractParams(e))\n ];\n }\n getListFromObjectValues(e, t) {\n const i = this.toArray(e), s = [];\n for (let n = 0; n < i.length; n++)\n s.push(i[n][t]);\n return s;\n }\n getSymbolsForMarketType(e = void 0, t = void 0, i = !0, s = !0) {\n let n = this.markets;\n e !== void 0 && (n = this.filterBy(n, \"type\", e)), t !== void 0 && (this.checkRequiredArgument(\"getSymbolsForMarketType\", t, \"subType\", [\"linear\", \"inverse\", \"quanto\"]), n = this.filterBy(n, \"subType\", t));\n const r = [];\n return i && r.push(!0), s && r.push(void 0), n = this.filterByArray(n, \"active\", r, !1), this.getListFromObjectValues(n, \"symbol\");\n }\n filterByArray(e, t, i = void 0, s = !0) {\n if (e = this.toArray(e), i === void 0 || !i)\n return s ? this.indexBy(e, t) : e;\n const n = [];\n for (let r = 0; r < e.length; r++)\n this.inArray(e[r][t], i) && n.push(e[r]);\n return s ? this.indexBy(n, t) : n;\n }\n isUsingForcedProxy(e = void 0, t = void 0) {\n return !1;\n }\n async fetch2(e, t = \"public\", i = \"GET\", s = {}, n = void 0, r = void 0, a = {}) {\n let o;\n if (\"methodCallId\" in s && (o = s.methodCallId, s = this.omit(s, \"methodCallId\")), this.enableRateLimit) {\n let l, p;\n \"customExpireInterval\" in s && (l = s.customExpireInterval, s = this.omit(s, \"customExpireInterval\")), \"customPriority\" in s && (p = s.customPriority, s = this.omit(s, \"customPriority\"));\n const m = this.calculateRateLimiterCost(t, i, e, s, a);\n await this.throttle(m, e, l, p);\n }\n this.lastRestRequestTimestamp = this.milliseconds();\n const c = this.isUsingForcedProxy(s, t), u = c && this.forcedProxy ? this.forcedProxy : \"\", f = o ? await this.generateMethodCallId(o, e, t, i, s) : void 0, h = s.customExtraHeaders;\n if (h && (s = this.omit(s, \"customExtraHeaders\")), this.fetchPrivateMethodsFromCache && c) {\n const l = await this.fetchFromCache(f);\n return this.handleRestResponse(l, \"\", i, n, r);\n } else {\n const l = await this.sign(e, t, i, s, n, r);\n return f && (l.headers || (l.headers = {}), l.headers[\"x-request-call-id\"] = f), h && (l.headers = this.extend(l.headers, h)), this.last_request_headers = l.headers, this.last_request_body = l.body, this.last_request_url = l.url, await this.fetch(u + l.url, l.method, l.headers, l.body);\n }\n }\n async generateMethodCallId(e, t, i, s, n) {\n const r = JSON.stringify(n);\n return [\n e,\n s,\n i,\n t,\n r\n ].join(\":\");\n }\n async request(e, t = \"public\", i = \"GET\", s = {}, n = void 0, r = void 0, a = {}) {\n return await this.fetch2(e, t, i, s, n, r, a);\n }\n async loadAccounts(e = !1, t = {}) {\n var i;\n if (e)\n this.accounts = await this.fetchAccounts(t);\n else {\n if (await this.mutex.waitForUnlock(ts(this.id, this.exchangeInstanceId)), this.accounts = (i = await this.cache.get(ts(this.id, this.exchangeInstanceId), { clone: !1 })) == null ? void 0 : i.data, this.accounts)\n return this.accounts;\n try {\n if (this.mutex.isLocked(ts(this.id, this.exchangeInstanceId)))\n return this.loadAccounts(void 0, t);\n await this.mutex.acquire(ts(this.id, this.exchangeInstanceId)), this.accounts = await this.fetchAccounts(t), await this.cache.set({\n key: ts(this.id, this.exchangeInstanceId),\n data: this.accounts,\n ttl: Rg,\n clone: !1\n });\n } finally {\n this.mutex.release(ts(this.id, this.exchangeInstanceId));\n }\n }\n return this.accountsById = this.indexBy(this.accounts, \"id\"), this.accounts;\n }\n buildOHLCVC(e, t = \"1m\", i = 0, s = 2147483647) {\n const n = this.parseTimeframe(t) * 1e3, r = [], a = 0, o = 2, c = 3, u = 4, f = 5, h = 6, l = e.length, p = Math.min(l, s);\n for (let m = 0; m < p; m++) {\n const y = e[m], w = y.timestamp;\n if (w < i)\n continue;\n const S = Math.floor(w / n) * n;\n if (S < i)\n continue;\n const T = r.length - 1;\n T === -1 || S >= this.sum(r[T][a], n) ? r.push([\n S,\n y.price,\n y.price,\n y.price,\n y.price,\n y.amount,\n 1\n // count\n ]) : (r[T][o] = Math.max(r[T][o], y.price), r[T][c] = Math.min(r[T][c], y.price), r[T][u] = y.price, r[T][f] = this.sum(r[T][f], y.amount), r[T][h] = this.sum(r[T][h], 1));\n }\n return r;\n }\n parseTradingViewOHLCV(e, t = void 0, i = \"1m\", s = void 0, n = void 0) {\n const r = this.convertTradingViewToOHLCV(e);\n return this.parseOHLCVs(r, t, i, s, n);\n }\n async editLimitBuyOrder(e, t, i, s = void 0, n = {}) {\n return await this.editLimitOrder(e, t, \"buy\", i, s, n);\n }\n async editLimitSellOrder(e, t, i, s = void 0, n = {}) {\n return await this.editLimitOrder(e, t, \"sell\", i, s, n);\n }\n async editLimitOrder(e, t, i, s, n = void 0, r = {}) {\n return await this.editOrder(e, t, \"limit\", i, s, n, r);\n }\n async editOrder(e, t, i, s, n = void 0, r = void 0, a = {}) {\n return await this.cancelOrder(e, t), await this.createOrder(t, i, s, n, r, a);\n }\n async fetchPermissions(e = {}) {\n throw new pe(\"fetchPermissions\").exchange(this.id);\n }\n async fetchPosition(e, t = {}) {\n throw new pe(\"fetchPosition\").exchange(this.id);\n }\n async getSubAccounts() {\n throw new pe(\"getSubAccounts\").exchange(this.id);\n }\n async fetchSubAccountBalances(e, t = {}) {\n throw new pe(\"fetchSubAccountBalances\").exchange(this.id);\n }\n async subAccountTransfer(e, t, i, s, n, r, a = {}) {\n throw new pe(\"subAccountTransfer\").exchange(this.id);\n }\n async fetchPositionsForSymbol(e, t = {}) {\n throw new pe(\"fetchPositionsForSymbol() is not supported yet\").exchange(this.id);\n }\n async fetchPositions(e = void 0, t = {}) {\n throw new pe(\"fetchPositions\").exchange(this.id);\n }\n async fetchPositionsRisk(e = void 0, t = {}) {\n throw new pe(\"fetchPositionsRisk\").exchange(this.id);\n }\n async fetchLedger(e = void 0, t = void 0, i = void 0, s = {}) {\n throw new pe(\"fetchLedger\").exchange(this.id);\n }\n async fetchLedgerEntry(e, t = void 0, i = {}) {\n throw new pe(\"fetchLedgerEntry\").exchange(this.id);\n }\n parseBidAsk(e, t = 0, i = 1, s = 2) {\n const n = this.safeNumber(e, t), r = this.safeNumber(e, i), a = this.safeInteger(e, s), o = [n, r];\n return a !== void 0 && o.push(a), o;\n }\n safeCurrency(e, t = void 0) {\n if (e === void 0 && t !== void 0)\n return t;\n if (this.currencies_by_id !== void 0 && e in this.currencies_by_id && this.currencies_by_id[e] !== void 0)\n return this.currencies_by_id[e];\n let i = e;\n return e !== void 0 && (i = this.getCodeFromCurrencyId(e.toUpperCase())), {\n id: e,\n code: i,\n precision: void 0\n };\n }\n safeMarket(e, t = void 0, i = void 0, s = void 0) {\n const n = this.safeMarketStructure({\n symbol: e,\n marketId: e\n });\n if (e !== void 0) {\n if (this.markets_by_id !== void 0 && e in this.markets_by_id) {\n const r = this.markets_by_id[e];\n if (r.length === 1)\n return r[0];\n if (s === void 0) {\n if (t === void 0)\n throw new be().addMessage(\"safeMarket() requires a fourth argument for \" + e + \" to disambiguate between different markets with the same market id\").exchange(this.id);\n s = t.type;\n }\n for (let o = 0; o < r.length; o++) {\n const c = r[o];\n if (c[s])\n return c;\n }\n } else if (i !== void 0 && i !== \"\") {\n const r = e.split(i);\n return r.length === 2 && (n.baseId = this.safeString(r, 0), n.quoteId = this.safeString(r, 1), n.base = this.safeCurrencyCode(n.baseId), n.quote = this.safeCurrencyCode(n.quoteId), n.symbol = n.base + \"/\" + n.quote), n;\n }\n }\n return t !== void 0 ? t : n;\n }\n checkRequiredCredentials(e = !0) {\n const t = Object.keys(this.requiredCredentials);\n if (this.token)\n return !0;\n for (let i = 0; i < t.length; i++) {\n const s = t[i];\n if (this.requiredCredentials[s] && !this[s]) {\n if (s === \"secret\" && this.externalSigner)\n continue;\n if (e)\n throw new Pt().addMessage('It requires \"' + s + '\" credential').exchange(this.id);\n return !1;\n }\n }\n return !0;\n }\n oath() {\n if (this.twofa !== void 0)\n return Ug(this.twofa);\n throw new be().addMessage(\"exchange.twofa has not been set for 2FA Two-Factor Authentication\").exchange(this.id);\n }\n async fetchBalance(e = {}) {\n throw new pe(\"fetchBalance\").exchange(this.id);\n }\n parseBalance(e) {\n throw new pe(\"parseBalance\").exchange(this.id);\n }\n async fetchPartialBalance(e, t = {}) {\n return (await this.fetchBalance(t))[e];\n }\n async fetchFreeBalance(e = {}) {\n return await this.fetchPartialBalance(\"free\", e);\n }\n async fetchUsedBalance(e = {}) {\n return await this.fetchPartialBalance(\"used\", e);\n }\n async fetchTotalBalance(e = {}) {\n return await this.fetchPartialBalance(\"total\", e);\n }\n async fetchStatus(e = {}) {\n throw new pe(\"fetchStatus\").exchange(this.id);\n }\n async fetchFundingFee(e, t = {}) {\n if (this.safeBool(this.options, \"warnOnFetchFundingFee\", !0))\n throw new pe(\"fetchFundingFee\").addMessage(\"This method is deprecated\").exchange(this.id);\n return await this.fetchTransactionFee(e, t);\n }\n async fetchFundingFees(e = void 0, t = {}) {\n if (this.safeBool(this.options, \"warnOnFetchFundingFees\", !0))\n throw new pe(\"fetchFundingFees\").addMessage(\"This method is deprecated\").exchange(this.id);\n return await this.fetchTransactionFees(e, t);\n }\n async fetchTransactionFee(e, t = {}) {\n if (!this.has.fetchTransactionFees)\n throw new pe(\"fetchTransactionFee\").exchange(this.id);\n return await this.fetchTransactionFees([e], t);\n }\n async fetchTransactionFees(e = void 0, t = {}) {\n throw new pe(\"fetchTransactionFees\").exchange(this.id);\n }\n async fetchDepositWithdrawFees(e = void 0, t = {}) {\n throw new pe(\"fetchDepositWithdrawFees\").exchange(this.id);\n }\n async fetchDepositWithdrawFee(e, t = {}) {\n if (!this.has.fetchDepositWithdrawFees)\n throw new pe(\"fetchDepositWithdrawFee\").exchange(this.id);\n const i = await this.fetchDepositWithdrawFees([e], t);\n return this.safeValue(i, e);\n }\n getSupportedMapping(e, t = {}) {\n if (e in t)\n return t[e];\n throw new be().addMessage(e + \" does not have a value in mapping\").exchange(this.id);\n }\n handleOptionAndParams(e, t, i, s = void 0) {\n const n = \"default\" + this.capitalize(i);\n let r = this.safeValue2(e, i, n);\n if (r !== void 0)\n e = this.omit(e, [i, n]);\n else {\n const a = this.safeValue(this.options, t);\n a !== void 0 && (r = this.safeValue2(a, i, n)), r === void 0 && (r = this.safeValue2(this.options, i, n)), r = r !== void 0 ? r : s;\n }\n return [r, e];\n }\n handleOptionAndParams2(e, t, i, s, n = void 0) {\n const r = \"default\" + this.capitalize(s);\n let a = this.safeValue2(e, s, r);\n if (a !== void 0)\n e = this.omit(e, [s, r]);\n else {\n const o = this.safeValue2(this.options, t, i);\n o !== void 0 && (a = this.safeValue2(o, s, r)), a === void 0 && (a = this.safeValue2(this.options, s, r)), a = a !== void 0 ? a : n;\n }\n return [a, e];\n }\n handleOption(e, t, i = void 0) {\n const [s, n] = this.handleOptionAndParams({}, e, t, i);\n return s;\n }\n handleMarketTypeAndParams(e, t = void 0, i = {}) {\n const s = this.safeString2(this.options, \"defaultType\", \"type\", \"spot\"), n = this.safeDict(this.options, e);\n let r = s;\n n !== void 0 && (typeof n == \"string\" ? r = n : r = this.safeString2(n, \"defaultType\", \"type\", r));\n const a = t === void 0 ? r : t.type, o = this.safeString2(i, \"defaultType\", \"type\", a);\n return i = this.omit(i, [\"defaultType\", \"type\"]), [o, i];\n }\n handleSubTypeAndParams(e, t = void 0, i = {}, s = void 0) {\n let n;\n const r = this.safeString2(i, \"subType\", \"defaultSubType\");\n return r !== void 0 ? (n = r, i = this.omit(i, [\"subType\", \"defaultSubType\"])) : (t !== void 0 && (t.linear ? n = \"linear\" : t.inverse && (n = \"inverse\")), n === void 0 && (n = this.handleOptionAndParams({}, e, \"subType\", s)[0])), [n, i];\n }\n handleMarginModeAndParams(e, t = {}, i = void 0) {\n return this.handleOptionAndParams(t, e, \"marginMode\", i);\n }\n throwExactlyMatchedException(e, t, i) {\n if (t !== void 0 && t in e) {\n const s = new e[t]();\n throw s instanceof g && s.overwriteMessage(this.replaceErrorMessage(i)).addOriginalError(i), s.addOriginalError(i || t).exchange(this.id);\n }\n }\n throwBroadlyMatchedException(e, t, i) {\n const s = this.findBroadlyMatchedKey(e, t);\n if (s !== void 0) {\n const n = new e[s]();\n throw n instanceof g && n.overwriteMessage(this.replaceErrorMessage(i)), n.addOriginalError(i || t).exchange(this.id);\n }\n }\n replaceErrorMessage(e) {\n if (!this.exceptions.messages)\n return e;\n const t = this.findBroadlyMatchedKey(this.exceptions.messages, e);\n return t ? this.exceptions.messages[t] : e;\n }\n findBroadlyMatchedKey(e, t) {\n if (!t)\n return;\n const i = \"%%\", s = Object.keys(e);\n for (let n = 0; n < s.length; n++) {\n const r = s[n];\n if (r.includes(i) && r.split(i).every((o) => t.includes(o)) || t.indexOf(r) >= 0)\n return r;\n }\n }\n handleErrors(e, t, i, s, n, r, a, o, c) {\n }\n calculateRateLimiterCost(e, t, i, s, n = {}) {\n return this.safeValue(n, \"cost\", 1);\n }\n async fetchTicker(e, t = {}) {\n if (this.has.fetchTickers) {\n await this.loadMarkets(), e = this.market(e).symbol;\n const s = await this.fetchTickers([e], t), n = this.safeDict(s, e);\n if (n === void 0)\n throw new pt().addMessage(\"fetchTickers() could not find a ticker for \" + e).exchange(this.id);\n return n;\n } else\n throw new pe(\"fetchTicker\").exchange(this.id);\n }\n async fetchTickers(e = void 0, t = {}) {\n throw new pe(\"fetchTickers\").exchange(this.id);\n }\n async fetchOrderBooks(e = void 0, t = void 0, i = {}) {\n throw new pe(\"fetchOrderBooks\").exchange(this.id);\n }\n async fetchOrder(e, t = void 0, i = {}) {\n throw new pe(\"fetchOrder\").exchange(this.id);\n }\n async fetchOrderStatus(e, t = void 0, i = {}) {\n return (await this.fetchOrder(e, t, i)).status;\n }\n async fetchUnifiedOrder(e, t = {}) {\n return await this.fetchOrder(this.safeString(e, \"id\"), this.safeString(e, \"symbol\"), t);\n }\n async createOrder(e, t, i, s, n = void 0, r = {}) {\n throw new pe(\"createOrder\").exchange(this.id);\n }\n async createTrailingAmountOrder(e, t, i, s, n = void 0, r = void 0, a = void 0, o = {}) {\n if (r === void 0)\n throw new g(\"createTrailingAmountOrder() requires a trailingAmount argument\").exchange(this.id);\n if (o.trailingAmount = r, a !== void 0 && (o.trailingTriggerPrice = a), this.has.createTrailingAmountOrder)\n return await this.createOrder(e, t, i, s, n, o);\n throw new pe(\"createTrailingAmountOrder\").exchange(this.id);\n }\n async createTrailingPercentOrder(e, t, i, s, n = void 0, r = void 0, a = void 0, o = {}) {\n if (r === void 0)\n throw new g(\"createTrailingPercentOrder() requires a trailingPercent argument\").exchange(this.id);\n if (o.trailingPercent = r, a !== void 0 && (o.trailingTriggerPrice = a), this.has.createTrailingPercentOrder)\n return await this.createOrder(e, t, i, s, n, o);\n throw new pe(\"createTrailingPercentOrder\").exchange(this.id);\n }\n async createMarketOrderWithCost(e, t, i, s = {}) {\n if (this.has.createMarketOrderWithCost || this.has.createMarketBuyOrderWithCost && this.has.createMarketSellOrderWithCost)\n return await this.createOrder(e, \"market\", t, i, 1, s);\n throw new pe(\"createMarketOrderWithCost\").exchange(this.id);\n }\n async createMarketBuyOrderWithCost(e, t, i = {}) {\n if (this.options.createMarketBuyOrderRequiresPrice || this.has.createMarketBuyOrderWithCost)\n return await this.createOrder(e, \"market\", \"buy\", t, 1, i);\n throw new pe(\"createMarketBuyOrderWithCost\").exchange(this.id);\n }\n async createMarketSellOrderWithCost(e, t, i = {}) {\n if (this.options.createMarketSellOrderRequiresPrice || this.has.createMarketSellOrderWithCost)\n return await this.createOrder(e, \"market\", \"sell\", t, 1, i);\n throw new pe(\"createMarketSellOrderWithCost\").exchange(this.id);\n }\n async createTriggerOrder(e, t, i, s, n = void 0, r = void 0, a = {}) {\n if (r === void 0)\n throw new g(\"createTriggerOrder() requires a triggerPrice argument\").exchange(this.id);\n if (a.triggerPrice = r, this.has.createTriggerOrder)\n return await this.createOrder(e, t, i, s, n, a);\n throw new pe(\"createTriggerOrder\").exchange(this.id);\n }\n async createStopLossOrder(e, t, i, s, n = void 0, r = void 0, a = {}) {\n if (r === void 0)\n throw new g(\"createStopLossOrder() requires a stopLossPrice argument\").exchange(this.id);\n if (a.stopLossPrice = r, this.has.createStopLossOrder)\n return await this.createOrder(e, t, i, s, n, a);\n throw new pe(\"createStopLossOrder\").exchange(this.id);\n }\n async createTakeProfitOrder(e, t, i, s, n = void 0, r = void 0, a = {}) {\n if (r === void 0)\n throw new g(\"createTakeProfitOrder() requires a takeProfitPrice argument\").exchange(this.id);\n if (a.takeProfitPrice = r, this.has.createTakeProfitOrder)\n return await this.createOrder(e, t, i, s, n, a);\n throw new pe(\"createTakeProfitOrder\").exchange(this.id);\n }\n async createOrderWithTakeProfitAndStopLoss(e, t, i, s, n = void 0, r = void 0, a = void 0, o = {}) {\n if (r === void 0 && a === void 0)\n throw new g(\"createOrderWithTakeProfitAndStopLoss() requires either a takeProfit or stopLoss argument\").exchange(this.id);\n r !== void 0 && (o.takeProfit = {\n triggerPrice: r\n }), a !== void 0 && (o.stopLoss = {\n triggerPrice: a\n });\n const c = this.safeString(o, \"takeProfitType\"), u = this.safeString(o, \"takeProfitPriceType\"), f = this.safeString(o, \"takeProfitLimitPrice\"), h = this.safeString(o, \"takeProfitAmount\"), l = this.safeString(o, \"stopLossType\"), p = this.safeString(o, \"stopLossPriceType\"), m = this.safeString(o, \"stopLossLimitPrice\"), y = this.safeString(o, \"stopLossAmount\");\n if (c !== void 0 && (o.takeProfit.type = c), u !== void 0 && (o.takeProfit.priceType = u), f !== void 0 && (o.takeProfit.price = this.parseToNumeric(f)), h !== void 0 && (o.takeProfit.amount = this.parseToNumeric(h)), l !== void 0 && (o.stopLoss.type = l), p !== void 0 && (o.stopLoss.priceType = p), m !== void 0 && (o.stopLoss.price = this.parseToNumeric(m)), y !== void 0 && (o.stopLoss.amount = this.parseToNumeric(y)), o = this.omit(o, [\"takeProfitType\", \"takeProfitPriceType\", \"takeProfitLimitPrice\", \"takeProfitAmount\", \"stopLossType\", \"stopLossPriceType\", \"stopLossLimitPrice\", \"stopLossAmount\"]), this.has.createOrderWithTakeProfitAndStopLoss)\n return await this.createOrder(e, t, i, s, n, o);\n throw new pe(\"createOrderWithTakeProfitAndStopLoss\").exchange(this.id);\n }\n async createOrders(e, t = {}) {\n throw new pe(\"createOrders\").exchange(this.id);\n }\n async cancelOrder(e, t = void 0, i = {}) {\n throw new pe(\"cancelOrder\").exchange(this.id);\n }\n async cancelAllOrders(e = void 0, t = {}) {\n throw new pe(\"cancelAllOrders\").exchange(this.id);\n }\n async cancelUnifiedOrder(e, t = {}) {\n return this.cancelOrder(this.safeString(e, \"id\"), this.safeString(e, \"symbol\"), t);\n }\n async fetchOrders(e = void 0, t = void 0, i = void 0, s = {}) {\n throw this.has.fetchOpenOrders && this.has.fetchClosedOrders ? new pe(\"fetchOrders\").addMessage(\"Consider using fetchOpenOrders() and fetchClosedOrders() instead\").exchange(this.id) : new pe(\"fetchOrders\").exchange(this.id);\n }\n async fetchOrderTrades(e, t = void 0, i = void 0, s = void 0, n = {}) {\n throw new pe(\"fetchOrderTrades\").exchange(this.id);\n }\n async fetchOpenOrders(e = void 0, t = void 0, i = void 0, s = {}) {\n if (this.has.fetchOrders) {\n const n = await this.fetchOrders(e, t, i, s);\n return this.filterBy(n, \"status\", \"open\");\n }\n throw new pe(\"fetchOpenOrders\").exchange(this.id);\n }\n async fetchClosedOrders(e = void 0, t = void 0, i = void 0, s = {}) {\n if (this.has.fetchOrders) {\n const n = await this.fetchOrders(e, t, i, s);\n return this.filterBy(n, \"status\", \"closed\");\n }\n throw new pe(\"fetchClosedOrders\").exchange(this.id);\n }\n async fetchCanceledAndClosedOrders(e = void 0, t = void 0, i = void 0, s = {}) {\n throw new pe(\"fetchCanceledAndClosedOrders\").exchange(this.id);\n }\n async fetchMyTrades(e = void 0, t = void 0, i = void 0, s = {}) {\n throw new pe(\"fetchMyTrades\").exchange(this.id);\n }\n async fetchDepositsWithdrawals(e = void 0, t = void 0, i = void 0, s = {}) {\n throw new pe(\"fetchDepositsWithdrawals\").exchange(this.id);\n }\n async fetchDeposits(e = void 0, t = void 0, i = void 0, s = {}) {\n throw new pe(\"fetchDeposits\").exchange(this.id);\n }\n async fetchWithdrawals(e = void 0, t = void 0, i = void 0, s = {}) {\n throw new pe(\"fetchWithdrawals\").exchange(this.id);\n }\n parseLastPrice(e, t = void 0) {\n throw new pe(\"parseLastPrice\").exchange(this.id);\n }\n async fetchDepositAddress(e, t = {}) {\n if (this.has.fetchDepositAddresses) {\n const i = await this.fetchDepositAddresses([e], t), s = this.safeValue(i, e);\n if (s === void 0)\n throw new It(e).addMessage(\"Make sure you have created a corresponding deposit address in your wallet on the exchange website\").exchange(this.id);\n return s;\n } else\n throw new pe(\"fetchDepositAddress\").exchange(this.id);\n }\n account() {\n return {\n free: void 0,\n used: void 0,\n total: void 0\n };\n }\n getCodeFromCurrencyId(e) {\n if (!this.tokensMapping || !Array.isArray(this.tokensMapping))\n return e;\n const t = this.tokensMapping.find((i) => i.currencyId === e);\n return (t == null ? void 0 : t.code) || e;\n }\n currency(e) {\n if (this.currencies === void 0)\n throw new be().addMessage(\"Currencies not loaded\").exchange(this.id);\n if (typeof e == \"string\") {\n if (e in this.currencies)\n return this.currencies[e];\n if (e in this.currencies_by_id)\n return this.currencies_by_id[e];\n }\n throw new $e(e).exchange(this.id);\n }\n market(e) {\n if (this.markets === void 0)\n throw new bs().exchange(this.id);\n if (e in this.markets)\n return this.markets[e];\n if (e in this.markets_by_id) {\n const t = this.markets_by_id[e], i = this.safeString2(this.options, \"defaultType\", \"defaultSubType\", \"spot\");\n for (let s = 0; s < t.length; s++) {\n const n = t[s];\n if (n[i])\n return n;\n }\n return t[0];\n } else if (e.endsWith(\"-C\") || e.endsWith(\"-P\") || e.startsWith(\"C-\") || e.startsWith(\"P-\"))\n return this.createExpiredOptionMarket(e);\n throw new it(e).exchange(this.id);\n }\n createExpiredOptionMarket(e) {\n throw new pe(\"createExpiredOptionMarket\").exchange(this.id);\n }\n handleWithdrawTagAndParams(e, t) {\n return e !== void 0 && typeof e == \"object\" && (t = this.extend(e, t), e = void 0), e === void 0 && (e = this.safeString(t, \"tag\"), e !== void 0 && (t = this.omit(t, \"tag\"))), [e, t];\n }\n async createLimitOrder(e, t, i, s, n = {}) {\n return await this.createOrder(e, \"limit\", t, i, s, n);\n }\n async createMarketOrder(e, t, i, s = void 0, n = {}) {\n return await this.createOrder(e, \"market\", t, i, s, n);\n }\n async createLimitBuyOrder(e, t, i, s = {}) {\n return await this.createOrder(e, \"limit\", \"buy\", t, i, s);\n }\n async createLimitSellOrder(e, t, i, s = {}) {\n return await this.createOrder(e, \"limit\", \"sell\", t, i, s);\n }\n async createMarketBuyOrder(e, t, i = {}) {\n return await this.createOrder(e, \"market\", \"buy\", t, void 0, i);\n }\n async createMarketSellOrder(e, t, i = {}) {\n return await this.createOrder(e, \"market\", \"sell\", t, void 0, i);\n }\n costToPrecision(e, t) {\n const i = this.market(e);\n return this.decimalToPrecision(t, zr, i.precision.price, this.precisionMode, this.paddingMode);\n }\n priceToPrecision(e, t) {\n const i = this.market(e), s = this.decimalToPrecision(t, pd, i.precision.price, this.precisionMode, this.paddingMode);\n if (s === \"0\")\n throw new g(\"Price of \" + i.symbol + \" must be greater than minimum price precision of \" + this.numberToString(i.precision.price)).exchange(this.id);\n return s;\n }\n amountToPrecision(e, t) {\n const i = this.market(e), s = this.decimalToPrecision(t, zr, i.precision.amount, this.precisionMode, this.paddingMode);\n if (s === \"0\")\n throw new g(\"Amount of \" + i.symbol + \" must be greater than minimum amount precision of \" + this.numberToString(i.precision.amount)).exchange(this.id);\n return s;\n }\n feeToPrecision(e, t) {\n const i = this.market(e);\n return this.decimalToPrecision(t, pd, i.precision.price, this.precisionMode, this.paddingMode);\n }\n currencyToPrecision(e, t, i = void 0, s = !1) {\n const n = this.currencies[e];\n let r = this.safeValue(n, \"precision\");\n if (i !== void 0) {\n const a = this.safeDict(n, \"networks\", {}), o = this.safeDict(a, i, {});\n r = this.safeValue(o, \"precision\", r);\n }\n return r === void 0 ? this.forceString(t) : this.decimalToPrecision(t, zr, r, this.precisionMode, this.paddingMode, s);\n }\n forceString(e) {\n return typeof e != \"string\" ? this.numberToString(e) : e;\n }\n isTickPrecision() {\n return this.precisionMode === gd;\n }\n isDecimalPrecision() {\n return this.precisionMode === Hr;\n }\n isSignificantPrecision() {\n return this.precisionMode === xm;\n }\n safeNumber(e, t, i = void 0) {\n const s = this.safeString(e, t);\n return this.parseNumber(s, i);\n }\n safeNumberN(e, t, i = void 0) {\n const s = this.safeStringN(e, t);\n return this.parseNumber(s, i);\n }\n parsePrecision(e) {\n if (e === void 0)\n return;\n const t = parseInt(e);\n if (t === 0)\n return \"1\";\n let i = \"0.\";\n for (let s = 0; s < t - 1; s++)\n i = i + \"0\";\n return i + \"1\";\n }\n async loadTimeDifference(e = {}) {\n var n;\n const t = (n = await this.cache.get(hd(this.id), { local: !0 })) == null ? void 0 : n.data;\n if (t !== void 0)\n return this.options.timeDifference = t, t;\n const i = await this.fetchTime(e), s = this.milliseconds();\n return this.options.timeDifference = s - i, this.cache.set({\n key: hd(this.id),\n data: this.options.timeDifference,\n ttl: 1 / 0,\n local: !0\n }), this.options.timeDifference;\n }\n implodeHostname(e) {\n return this.implodeParams(e, { hostname: this.hostname });\n }\n safeCurrencyCode(e, t = void 0) {\n return t = this.safeCurrency(e, t), t.code;\n }\n filterBySymbolSinceLimit(e, t = void 0, i = void 0, s = void 0, n = !1) {\n return this.filterByValueSinceLimit(e, \"symbol\", t, i, s, \"timestamp\", n);\n }\n filterByCurrencySinceLimit(e, t = void 0, i = void 0, s = void 0, n = !1) {\n return this.filterByValueSinceLimit(e, \"currency\", t, i, s, \"timestamp\", n);\n }\n filterBySymbolsSinceLimit(e, t = void 0, i = void 0, s = void 0, n = !1) {\n const r = this.filterByArray(e, \"symbol\", t, !1);\n return this.filterBySinceLimit(r, i, s, \"timestamp\", n);\n }\n parseTickers(e, t = void 0, i = {}) {\n const s = [];\n if (Array.isArray(e))\n for (let n = 0; n < e.length; n++) {\n const r = this.extend(this.parseTicker(e[n]), i);\n s.push(r);\n }\n else {\n const n = Object.keys(e);\n for (let r = 0; r < n.length; r++) {\n const a = n[r], o = this.safeMarket(a), c = this.extend(this.parseTicker(e[a], o), i);\n s.push(c);\n }\n }\n return t = this.marketSymbols(t), this.filterByArray(s, \"symbol\", t);\n }\n parseDepositAddresses(e, t = void 0, i = !0, s = {}) {\n let n = [];\n for (let r = 0; r < e.length; r++) {\n const a = this.extend(this.parseDepositAddress(e[r]), s);\n n.push(a);\n }\n return t !== void 0 && (n = this.filterByArray(n, \"currency\", t, !1)), i ? this.indexBy(n, \"currency\") : n;\n }\n safeSymbol(e, t = void 0, i = void 0, s = void 0) {\n return t = this.safeMarket(e, t, i, s), t.symbol;\n }\n isTriggerOrder(e) {\n const t = this.safeBool2(e, \"trigger\", \"stop\");\n return t && (e = this.omit(e, [\"trigger\", \"stop\"])), [t, e];\n }\n isPostOnly(e, t, i = {}) {\n const s = this.safeStringUpper(i, \"timeInForce\");\n let n = this.safeBool2(i, \"postOnly\", \"post_only\", !1);\n const r = s === \"IOC\", a = s === \"FOK\";\n if (n = n || s === \"PO\" || t, n) {\n if (r || a)\n throw new g(\"postOnly orders cannot have timeInForce equal to \" + s).exchange(this.id);\n if (e)\n throw new g(\"market orders cannot be postOnly\").exchange(this.id);\n return !0;\n } else\n return !1;\n }\n handlePostOnly(e, t, i = {}) {\n const s = this.safeStringUpper(i, \"timeInForce\");\n let n = this.safeBool(i, \"postOnly\", !1);\n const r = s === \"IOC\", a = s === \"FOK\", o = s === \"PO\";\n if (n = n || o || t, n) {\n if (r || a)\n throw new g(\"postOnly orders cannot have timeInForce equal to \" + s).exchange(this.id);\n if (e)\n throw new g(\"market orders cannot be postOnly\").exchange(this.id);\n return o && (i = this.omit(i, \"timeInForce\")), i = this.omit(i, \"postOnly\"), [!0, i];\n }\n return [!1, i];\n }\n async fetchTradingFees(e = {}) {\n throw new pe(\"fetchTradingFees\").exchange(this.id);\n }\n async fetchTradingFee(e, t = {}) {\n if (!this.has.fetchTradingFees)\n throw new pe(\"fetchTradingFee\").exchange(this.id);\n return await this.fetchTradingFees(t);\n }\n handleTimeInForce(e = {}) {\n const t = this.safeStringUpper(e, \"timeInForce\");\n if (t !== void 0) {\n const i = this.safeString(this.options.timeInForce, t);\n if (i === void 0)\n throw new g('It does not support timeInForce \"' + t + '\"').exchange(this.id);\n return i;\n }\n }\n convertTypeToAccount(e) {\n const t = this.safeDict(this.options, \"accountsByType\", {}), i = e.toLowerCase();\n return i in t ? t[i] : e in this.markets || e in this.markets_by_id ? this.market(e).id : e;\n }\n checkRequiredArgument(e, t, i, s = []) {\n const n = s.length;\n if (t === void 0 || n > 0 && !this.inArray(t, s)) {\n const r = s.join(\", \");\n let a = this.id + \" \" + e + \"() requires a \" + i + \" argument\";\n throw r !== \"\" && (a += \", one of (\" + r + \")\"), new g(a).exchange(this.id);\n }\n }\n parseDepositWithdrawFees(e, t = void 0, i = void 0) {\n const s = {};\n t = this.marketCodes(t);\n const n = Array.isArray(e);\n let r = e;\n n || (r = Object.keys(e));\n for (let a = 0; a < r.length; a++) {\n const o = r[a], c = n ? o : e[o], u = n ? this.safeString(c, i) : o, f = this.safeValue(this.currencies_by_id, u), h = this.safeString(f, \"code\", u);\n (t === void 0 || this.inArray(h, t)) && (s[h] = this.parseDepositWithdrawFee(c, f));\n }\n return s;\n }\n parseDepositWithdrawFee(e, t = void 0) {\n throw new pe(\"parseDepositWithdrawFee\").exchange(this.id);\n }\n depositWithdrawFee(e) {\n return {\n info: e,\n withdraw: {\n fee: void 0,\n percentage: void 0\n },\n deposit: {\n fee: void 0,\n percentage: void 0\n },\n networks: {}\n };\n }\n assignDefaultDepositWithdrawFees(e, t = void 0) {\n const i = Object.keys(e.networks), s = i.length;\n if (s === 1)\n return e.withdraw = e.networks[i[0]].withdraw, e.deposit = e.networks[i[0]].deposit, e;\n const n = this.safeString(t, \"code\");\n for (let r = 0; r < s; r++)\n i[r] === n && (e.withdraw = e.networks[i[r]].withdraw, e.deposit = e.networks[i[r]].deposit);\n return e;\n }\n getMarketFromSymbols(e = void 0) {\n if (e === void 0)\n return;\n const t = this.safeString(e, 0);\n return this.market(t);\n }\n async fetchTransactions(e = void 0, t = void 0, i = void 0, s = {}) {\n if (this.has.fetchDepositsWithdrawals)\n return await this.fetchDepositsWithdrawals(e, t, i, s);\n throw new pe(\"fetchTransactions\").exchange(this.id);\n }\n filterByArrayPositions(e, t, i = void 0, s = !0) {\n return this.filterByArray(e, t, i, s);\n }\n filterByArrayTickers(e, t, i = void 0, s = !0) {\n return this.filterByArray(e, t, i, s);\n }\n handleMaxEntriesPerRequestAndParams(e, t = void 0, i = {}) {\n let s;\n return [s, i] = this.handleOptionAndParams(i, e, \"maxEntriesPerRequest\"), s !== void 0 && s !== t && (t = s), t === void 0 && (t = 1e3), [t, i];\n }\n async fetchPaginatedCallDynamic(e, t = void 0, i = void 0, s = void 0, n = {}, r = void 0) {\n let a;\n [a, n] = this.handleOptionAndParams(n, e, \"paginationCalls\", 10);\n let o;\n [o, n] = this.handleOptionAndParams(n, e, \"maxRetries\", 3);\n let c;\n [c, n] = this.handleOptionAndParams(n, e, \"paginationDirection\", \"backward\");\n let u, f = 0, h = [], l = 0;\n const p = this.safeInteger2(n, \"untill\", \"till\");\n if ([r, n] = this.handleMaxEntriesPerRequestAndParams(e, r, n), c === \"forward\") {\n if (i === void 0)\n throw new g(\"Pagination requires a since argument when paginationDirection set to forward\").exchange(this.id);\n u = i;\n }\n for (; f < a; ) {\n f += 1;\n try {\n if (c === \"backward\") {\n u !== void 0 && (n.until = u - 1);\n const w = await this[e](t, void 0, r, n), S = w.length;\n if (this.verbose) {\n const T = \"Dynamic pagination call \" + f + \" method \" + e + \" response length \" + S + \" timestamp \" + u;\n this.log(T);\n }\n if (S === 0)\n break;\n l = 0, h = this.arrayConcat(h, w);\n const b = this.safeValue(w, 0);\n if (u = this.safeInteger2(b, \"timestamp\", 0), i !== void 0 && u <= i)\n break;\n } else {\n const w = await this[e](t, u, r, n), S = w.length;\n if (this.verbose) {\n const T = \"Dynamic pagination call \" + f + \" method \" + e + \" response length \" + S + \" timestamp \" + u;\n this.log(T);\n }\n if (S === 0)\n break;\n l = 0, h = this.arrayConcat(h, w);\n const b = this.safeValue(w, S - 1);\n if (u = this.safeInteger(b, \"timestamp\") - 1, p !== void 0 && u >= p)\n break;\n }\n } catch (w) {\n if (l += 1, l > o)\n throw w;\n }\n }\n const m = this.removeRepeatedElementsFromArray(h), y = e === \"fetchOHLCV\" ? 0 : \"timestamp\";\n return this.filterBySinceLimit(m, i, s, y);\n }\n async safeDeterministicCall(e, t = void 0, i = void 0, s = void 0, n = void 0, r = {}) {\n let a;\n [a, r] = this.handleOptionAndParams(r, e, \"maxRetries\", 3);\n let o = 0;\n try {\n return n ? await this[e](t, n, i, s, r) : await this[e](t, i, s, r);\n } catch (c) {\n if (c instanceof Ae || (o += 1, o > a))\n throw c;\n }\n }\n async fetchPaginatedCallDeterministic(e, t = void 0, i = void 0, s = void 0, n = void 0, r = {}, a = void 0) {\n let o;\n [o, r] = this.handleOptionAndParams(r, e, \"paginationCalls\", 10), [a, r] = this.handleMaxEntriesPerRequestAndParams(e, a, r);\n const c = this.milliseconds(), u = [], h = this.parseTimeframe(n) * 1e3 * a;\n let l = c - o * h - 1;\n i !== void 0 && (l = Math.max(l, i));\n const p = this.safeInteger2(r, \"until\", \"till\");\n if (p !== void 0) {\n const b = Math.ceil((p - i) / h);\n if (b > o)\n throw new g(\"The number of required calls is greater than the max number of calls allowed, either increase the paginationCalls or decrease the since-until gap. Current paginationCalls limit is \" + o.toString() + \" required calls is \" + b.toString()).exchange(this.id);\n }\n for (let b = 0; b < o && !(p !== void 0 && l >= p); b++)\n u.push(this.safeDeterministicCall(e, t, l, a, n, r)), l = this.sum(l, h) - 1;\n const m = await Promise.all(u);\n let y = [];\n for (let b = 0; b < m.length; b++)\n y = this.arrayConcat(y, m[b]);\n const w = this.removeRepeatedElementsFromArray(y), S = e === \"fetchOHLCV\" ? 0 : \"timestamp\";\n return this.filterBySinceLimit(w, i, s, S);\n }\n async fetchPaginatedCallCursor(e, t = void 0, i = void 0, s = void 0, n = {}, r = void 0, a = void 0, o = void 0, c = void 0) {\n let u;\n [u, n] = this.handleOptionAndParams(n, e, \"paginationCalls\", 10);\n let f;\n [f, n] = this.handleOptionAndParams(n, e, \"maxRetries\", 3), [c, n] = this.handleMaxEntriesPerRequestAndParams(e, c, n);\n let h, l = 0, p = 0, m = [];\n for (; l < u; ) {\n try {\n h !== void 0 && (o !== void 0 && (h = this.parseToInt(h) + o), n[a] = h);\n let S;\n e === \"fetchAccounts\" ? S = await this[e](n) : S = await this[e](t, i, c, n), p = 0;\n const b = S.length;\n if (this.verbose) {\n const _ = \"Cursor pagination call \" + (l + 1).toString() + \" method \" + e + \" response length \" + b.toString() + \" cursor \" + h;\n this.log(_);\n }\n if (b === 0)\n break;\n m = this.arrayConcat(m, S);\n const T = this.safeValue(S, b - 1);\n if (h = this.safeValue(T.info, r), h === void 0)\n break;\n const x = this.safeInteger(T, \"timestamp\");\n if (x !== void 0 && x < i)\n break;\n } catch (S) {\n if (p += 1, p > f)\n throw S;\n }\n l += 1;\n }\n const y = this.sortCursorPaginatedResult(m), w = e === \"fetchOHLCV\" ? 0 : \"timestamp\";\n return this.filterBySinceLimit(y, i, s, w);\n }\n async fetchPaginatedCallIncremental(e, t = void 0, i = void 0, s = void 0, n = {}, r = void 0, a = void 0) {\n let o;\n [o, n] = this.handleOptionAndParams(n, e, \"paginationCalls\", 10);\n let c;\n [c, n] = this.handleOptionAndParams(n, e, \"maxRetries\", 3), [a, n] = this.handleMaxEntriesPerRequestAndParams(e, a, n);\n let u = 0, f = 0, h = [];\n for (; u < o; ) {\n try {\n n[r] = u + 1;\n const m = await this[e](t, i, a, n);\n f = 0;\n const y = m.length;\n if (this.verbose) {\n const S = \"Incremental pagination call \" + (u + 1).toString() + \" method \" + e + \" response length \" + y.toString();\n this.log(S);\n }\n if (y === 0)\n break;\n h = this.arrayConcat(h, m);\n } catch (m) {\n if (f += 1, f > c)\n throw m;\n }\n u += 1;\n }\n const l = this.sortCursorPaginatedResult(h), p = e === \"fetchOHLCV\" ? 0 : \"timestamp\";\n return this.filterBySinceLimit(l, i, s, p);\n }\n sortCursorPaginatedResult(e) {\n const t = this.safeValue(e, 0);\n if (t !== void 0) {\n if (\"timestamp\" in t)\n return this.sortBy(e, \"timestamp\", !0);\n if (\"id\" in t)\n return this.sortBy(e, \"id\", !0);\n }\n return e;\n }\n removeRepeatedElementsFromArray(e) {\n const t = {};\n for (let n = 0; n < e.length; n++) {\n const r = e[n], a = this.safeString(r, \"id\");\n if (a !== void 0)\n this.safeString(t, a) === void 0 && (t[a] = r);\n else {\n const o = this.safeInteger2(r, \"timestamp\", 0);\n o !== void 0 && this.safeString(t, o) === void 0 && (t[o] = r);\n }\n }\n const i = Object.values(t);\n return i.length > 0 ? i : e;\n }\n handleUntilOption(e, t, i, s = 1) {\n const n = this.safeInteger2(i, \"until\", \"till\");\n return n !== void 0 && (t[e] = this.parseToInt(n * s), i = this.omit(i, [\"until\", \"till\"])), [t, i];\n }\n}, vm = class extends gt {\n};\nfunction $n(d) {\n return pi.encode(Ri.decode(d));\n}\nfunction md(d) {\n return Ri.encode(pi.decode(d));\n}\nlet ss;\nconst km = {\n decode(d) {\n let e;\n if (ss === void 0) {\n let n = \"0123456789ABCDEF\";\n const r = ` \\f\n\\r\t \\u2028\\u2029`;\n for (ss = {}, e = 0; e < 16; ++e)\n ss[n.charAt(e)] = e;\n for (n = n.toLowerCase(), e = 10; e < 16; ++e)\n ss[n.charAt(e)] = e;\n for (e = 0; e < r.length; ++e)\n ss[r.charAt(e)] = -1;\n }\n const t = [];\n let i = 0, s = 0;\n for (e = 0; e < d.length; ++e) {\n let n = d.charAt(e);\n if (n == \"=\")\n break;\n if (n = ss[n], n != -1) {\n if (n === void 0)\n throw new Error(\"Illegal character at offset \" + e);\n i |= n, ++s >= 2 ? (t[t.length] = i, i = 0, s = 0) : i <<= 4;\n }\n }\n if (s)\n throw new Error(\"Hex encoding incomplete: 4 bits missing\");\n return t;\n }\n}, Em = \"0123456789abcdefghijklmnopqrstuvwxyz\";\nfunction yd(d) {\n return Em.charAt(d);\n}\nfunction Nm(d, e) {\n return d & e;\n}\nfunction In(d, e) {\n return d | e;\n}\nfunction wd(d, e) {\n return d ^ e;\n}\nfunction bd(d, e) {\n return d & ~e;\n}\nfunction Pm(d) {\n if (d == 0)\n return -1;\n let e = 0;\n return d & 65535 || (d >>= 16, e += 16), d & 255 || (d >>= 8, e += 8), d & 15 || (d >>= 4, e += 4), d & 3 || (d >>= 2, e += 2), d & 1 || ++e, e;\n}\nfunction _m(d) {\n let e = 0;\n for (; d != 0; )\n d &= d - 1, ++e;\n return e;\n}\nlet xi;\nconst Lm = 244837814094590, Sd = (Lm & 16777215) == 15715070, yt = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607, 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701, 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811, 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911, 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997], Dm = (1 << 26) / yt[yt.length - 1];\nclass we {\n constructor(e, t, i) {\n e != null && (typeof e == \"number\" ? this.fromNumber(e, t, i) : t == null && typeof e != \"string\" ? this.fromString(e, 256) : this.fromString(e, t));\n }\n //#region PUBLIC\n // BigInteger.prototype.toString = bnToString;\n // (public) return string representation in given radix\n toString(e) {\n if (this.s < 0)\n return \"-\" + this.negate().toString(e);\n let t;\n if (e == 16)\n t = 4;\n else if (e == 8)\n t = 3;\n else if (e == 2)\n t = 1;\n else if (e == 32)\n t = 5;\n else if (e == 4)\n t = 2;\n else\n return this.toRadix(e);\n const i = (1 << t) - 1;\n let s, n = !1, r = \"\", a = this.t, o = this.DB - a * this.DB % t;\n if (a-- > 0)\n for (o < this.DB && (s = this[a] >> o) > 0 && (n = !0, r = yd(s)); a >= 0; )\n o < t ? (s = (this[a] & (1 << o) - 1) << t - o, s |= this[--a] >> (o += this.DB - t)) : (s = this[a] >> (o -= t) & i, o <= 0 && (o += this.DB, --a)), s > 0 && (n = !0), n && (r += yd(s));\n return n ? r : \"0\";\n }\n // BigInteger.prototype.negate = bnNegate;\n // (public) -this\n negate() {\n const e = xe();\n return we.ZERO.subTo(this, e), e;\n }\n // BigInteger.prototype.abs = bnAbs;\n // (public) |this|\n abs() {\n return this.s < 0 ? this.negate() : this;\n }\n // BigInteger.prototype.compareTo = bnCompareTo;\n // (public) return + if this > a, - if this < a, 0 if equal\n compareTo(e) {\n let t = this.s - e.s;\n if (t != 0)\n return t;\n let i = this.t;\n if (t = i - e.t, t != 0)\n return this.s < 0 ? -t : t;\n for (; --i >= 0; )\n if ((t = this[i] - e[i]) != 0)\n return t;\n return 0;\n }\n // BigInteger.prototype.bitLength = bnBitLength;\n // (public) return the number of bits in \"this\"\n bitLength() {\n return this.t <= 0 ? 0 : this.DB * (this.t - 1) + On(this[this.t - 1] ^ this.s & this.DM);\n }\n // BigInteger.prototype.mod = bnMod;\n // (public) this mod a\n mod(e) {\n const t = xe();\n return this.abs().divRemTo(e, null, t), this.s < 0 && t.compareTo(we.ZERO) > 0 && e.subTo(t, t), t;\n }\n // BigInteger.prototype.modPowInt = bnModPowInt;\n // (public) this^e % m, 0 <= e < 2^32\n modPowInt(e, t) {\n let i;\n return e < 256 || t.isEven() ? i = new Td(t) : i = new Ad(t), this.exp(e, i);\n }\n // BigInteger.prototype.clone = bnClone;\n // (public)\n clone() {\n const e = xe();\n return this.copyTo(e), e;\n }\n // BigInteger.prototype.intValue = bnIntValue;\n // (public) return value as integer\n intValue() {\n if (this.s < 0) {\n if (this.t == 1)\n return this[0] - this.DV;\n if (this.t == 0)\n return -1;\n } else {\n if (this.t == 1)\n return this[0];\n if (this.t == 0)\n return 0;\n }\n return (this[1] & (1 << 32 - this.DB) - 1) << this.DB | this[0];\n }\n // BigInteger.prototype.byteValue = bnByteValue;\n // (public) return value as byte\n byteValue() {\n return this.t == 0 ? this.s : this[0] << 24 >> 24;\n }\n // BigInteger.prototype.shortValue = bnShortValue;\n // (public) return value as short (assumes DB>=16)\n shortValue() {\n return this.t == 0 ? this.s : this[0] << 16 >> 16;\n }\n // BigInteger.prototype.signum = bnSigNum;\n // (public) 0 if this == 0, 1 if this > 0\n signum() {\n return this.s < 0 ? -1 : this.t <= 0 || this.t == 1 && this[0] <= 0 ? 0 : 1;\n }\n // BigInteger.prototype.toByteArray = bnToByteArray;\n // (public) convert to bigendian byte array\n toByteArray() {\n let e = this.t;\n const t = [];\n t[0] = this.s;\n let i = this.DB - e * this.DB % 8, s, n = 0;\n if (e-- > 0)\n for (i < this.DB && (s = this[e] >> i) != (this.s & this.DM) >> i && (t[n++] = s | this.s << this.DB - i); e >= 0; )\n i < 8 ? (s = (this[e] & (1 << i) - 1) << 8 - i, s |= this[--e] >> (i += this.DB - 8)) : (s = this[e] >> (i -= 8) & 255, i <= 0 && (i += this.DB, --e)), s & 128 && (s |= -256), n == 0 && (this.s & 128) != (s & 128) && ++n, (n > 0 || s != this.s) && (t[n++] = s);\n return t;\n }\n // BigInteger.prototype.equals = bnEquals;\n equals(e) {\n return this.compareTo(e) == 0;\n }\n // BigInteger.prototype.min = bnMin;\n min(e) {\n return this.compareTo(e) < 0 ? this : e;\n }\n // BigInteger.prototype.max = bnMax;\n max(e) {\n return this.compareTo(e) > 0 ? this : e;\n }\n // BigInteger.prototype.and = bnAnd;\n and(e) {\n const t = xe();\n return this.bitwiseTo(e, Nm, t), t;\n }\n // BigInteger.prototype.or = bnOr;\n or(e) {\n const t = xe();\n return this.bitwiseTo(e, In, t), t;\n }\n // BigInteger.prototype.xor = bnXor;\n xor(e) {\n const t = xe();\n return this.bitwiseTo(e, wd, t), t;\n }\n // BigInteger.prototype.andNot = bnAndNot;\n andNot(e) {\n const t = xe();\n return this.bitwiseTo(e, bd, t), t;\n }\n // BigInteger.prototype.not = bnNot;\n // (public) ~this\n not() {\n const e = xe();\n for (let t = 0; t < this.t; ++t)\n e[t] = this.DM & ~this[t];\n return e.t = this.t, e.s = ~this.s, e;\n }\n // BigInteger.prototype.shiftLeft = bnShiftLeft;\n // (public) this << n\n shiftLeft(e) {\n const t = xe();\n return e < 0 ? this.rShiftTo(-e, t) : this.lShiftTo(e, t), t;\n }\n // BigInteger.prototype.shiftRight = bnShiftRight;\n // (public) this >> n\n shiftRight(e) {\n const t = xe();\n return e < 0 ? this.lShiftTo(-e, t) : this.rShiftTo(e, t), t;\n }\n // BigInteger.prototype.getLowestSetBit = bnGetLowestSetBit;\n // (public) returns index of lowest 1-bit (or -1 if none)\n getLowestSetBit() {\n for (let e = 0; e < this.t; ++e)\n if (this[e] != 0)\n return e * this.DB + Pm(this[e]);\n return this.s < 0 ? this.t * this.DB : -1;\n }\n // BigInteger.prototype.bitCount = bnBitCount;\n // (public) return number of set bits\n bitCount() {\n let e = 0;\n const t = this.s & this.DM;\n for (let i = 0; i < this.t; ++i)\n e += _m(this[i] ^ t);\n return e;\n }\n // BigInteger.prototype.testBit = bnTestBit;\n // (public) true iff nth bit is set\n testBit(e) {\n const t = Math.floor(e / this.DB);\n return t >= this.t ? this.s != 0 : (this[t] & 1 << e % this.DB) != 0;\n }\n // BigInteger.prototype.setBit = bnSetBit;\n // (public) this | (1<<n)\n setBit(e) {\n return this.changeBit(e, In);\n }\n // BigInteger.prototype.clearBit = bnClearBit;\n // (public) this & ~(1<<n)\n clearBit(e) {\n return this.changeBit(e, bd);\n }\n // BigInteger.prototype.flipBit = bnFlipBit;\n // (public) this ^ (1<<n)\n flipBit(e) {\n return this.changeBit(e, wd);\n }\n // BigInteger.prototype.add = bnAdd;\n // (public) this + a\n add(e) {\n const t = xe();\n return this.addTo(e, t), t;\n }\n // BigInteger.prototype.subtract = bnSubtract;\n // (public) this - a\n subtract(e) {\n const t = xe();\n return this.subTo(e, t), t;\n }\n // BigInteger.prototype.multiply = bnMultiply;\n // (public) this * a\n multiply(e) {\n const t = xe();\n return this.multiplyTo(e, t), t;\n }\n // BigInteger.prototype.divide = bnDivide;\n // (public) this / a\n divide(e) {\n const t = xe();\n return this.divRemTo(e, t, null), t;\n }\n // BigInteger.prototype.remainder = bnRemainder;\n // (public) this % a\n remainder(e) {\n const t = xe();\n return this.divRemTo(e, null, t), t;\n }\n // BigInteger.prototype.divideAndRemainder = bnDivideAndRemainder;\n // (public) [this/a,this%a]\n divideAndRemainder(e) {\n const t = xe(), i = xe();\n return this.divRemTo(e, t, i), [t, i];\n }\n // BigInteger.prototype.modPow = bnModPow;\n // (public) this^e % m (HAC 14.85)\n modPow(e, t) {\n let i = e.bitLength(), s, n = Oi(1), r;\n if (i <= 0)\n return n;\n i < 18 ? s = 1 : i < 48 ? s = 3 : i < 144 ? s = 4 : i < 768 ? s = 5 : s = 6, i < 8 ? r = new Td(t) : t.isEven() ? r = new Bm(t) : r = new Ad(t);\n const a = [];\n let o = 3;\n const c = s - 1, u = (1 << s) - 1;\n if (a[1] = r.convert(this), s > 1) {\n const y = xe();\n for (r.sqrTo(a[1], y); o <= u; )\n a[o] = xe(), r.mulTo(y, a[o - 2], a[o]), o += 2;\n }\n let f = e.t - 1, h, l = !0, p = xe(), m;\n for (i = On(e[f]) - 1; f >= 0; ) {\n for (i >= c ? h = e[f] >> i - c & u : (h = (e[f] & (1 << i + 1) - 1) << c - i, f > 0 && (h |= e[f - 1] >> this.DB + i - c)), o = s; !(h & 1); )\n h >>= 1, --o;\n if ((i -= o) < 0 && (i += this.DB, --f), l)\n a[h].copyTo(n), l = !1;\n else {\n for (; o > 1; )\n r.sqrTo(n, p), r.sqrTo(p, n), o -= 2;\n o > 0 ? r.sqrTo(n, p) : (m = n, n = p, p = m), r.mulTo(p, a[h], n);\n }\n for (; f >= 0 && !(e[f] & 1 << i); )\n r.sqrTo(n, p), m = n, n = p, p = m, --i < 0 && (i = this.DB - 1, --f);\n }\n return r.revert(n);\n }\n // BigInteger.prototype.modInverse = bnModInverse;\n // (public) 1/this % m (HAC 14.61)\n modInverse(e) {\n const t = e.isEven();\n if (this.isEven() && t || e.signum() == 0)\n return we.ZERO;\n const i = e.clone(), s = this.clone(), n = Oi(1), r = Oi(0), a = Oi(0), o = Oi(1);\n for (; i.signum() != 0; ) {\n for (; i.isEven(); )\n i.rShiftTo(1, i), t ? ((!n.isEven() || !r.isEven()) && (n.addTo(this, n), r.subTo(e, r)), n.rShiftTo(1, n)) : r.isEven() || r.subTo(e, r), r.rShiftTo(1, r);\n for (; s.isEven(); )\n s.rShiftTo(1, s), t ? ((!a.isEven() || !o.isEven()) && (a.addTo(this, a), o.subTo(e, o)), a.rShiftTo(1, a)) : o.isEven() || o.subTo(e, o), o.rShiftTo(1, o);\n i.compareTo(s) >= 0 ? (i.subTo(s, i), t && n.subTo(a, n), r.subTo(o, r)) : (s.subTo(i, s), t && a.subTo(n, a), o.subTo(r, o));\n }\n if (s.compareTo(we.ONE) != 0)\n return we.ZERO;\n if (o.compareTo(e) >= 0)\n return o.subtract(e);\n if (o.signum() < 0)\n o.addTo(e, o);\n else\n return o;\n return o.signum() < 0 ? o.add(e) : o;\n }\n // BigInteger.prototype.pow = bnPow;\n // (public) this^e\n pow(e) {\n return this.exp(e, new Rm());\n }\n // BigInteger.prototype.gcd = bnGCD;\n // (public) gcd(this,a) (HAC 14.54)\n gcd(e) {\n let t = this.s < 0 ? this.negate() : this.clone(), i = e.s < 0 ? e.negate() : e.clone();\n if (t.compareTo(i) < 0) {\n const r = t;\n t = i, i = r;\n }\n let s = t.getLowestSetBit(), n = i.getLowestSetBit();\n if (n < 0)\n return t;\n for (s < n && (n = s), n > 0 && (t.rShiftTo(n, t), i.rShiftTo(n, i)); t.signum() > 0; )\n (s = t.getLowestSetBit()) > 0 && t.rShiftTo(s, t), (s = i.getLowestSetBit()) > 0 && i.rShiftTo(s, i), t.compareTo(i) >= 0 ? (t.subTo(i, t), t.rShiftTo(1, t)) : (i.subTo(t, i), i.rShiftTo(1, i));\n return n > 0 && i.lShiftTo(n, i), i;\n }\n // BigInteger.prototype.isProbablePrime = bnIsProbablePrime;\n // (public) test primality with certainty >= 1-.5^t\n isProbablePrime(e) {\n let t;\n const i = this.abs();\n if (i.t == 1 && i[0] <= yt[yt.length - 1]) {\n for (t = 0; t < yt.length; ++t)\n if (i[0] == yt[t])\n return !0;\n return !1;\n }\n if (i.isEven())\n return !1;\n for (t = 1; t < yt.length; ) {\n let s = yt[t], n = t + 1;\n for (; n < yt.length && s < Dm; )\n s *= yt[n++];\n for (s = i.modInt(s); t < n; )\n if (s % yt[t++] == 0)\n return !1;\n }\n return i.millerRabin(e);\n }\n //#endregion PUBLIC\n //#region PROTECTED\n // BigInteger.prototype.copyTo = bnpCopyTo;\n // (protected) copy this to r\n copyTo(e) {\n for (let t = this.t - 1; t >= 0; --t)\n e[t] = this[t];\n e.t = this.t, e.s = this.s;\n }\n // BigInteger.prototype.fromInt = bnpFromInt;\n // (protected) set from integer value x, -DV <= x < DV\n fromInt(e) {\n this.t = 1, this.s = e < 0 ? -1 : 0, e > 0 ? this[0] = e : e < -1 ? this[0] = e + this.DV : this.t = 0;\n }\n // BigInteger.prototype.fromString = bnpFromString;\n // (protected) set from string and radix\n fromString(e, t) {\n let i;\n if (t == 16)\n i = 4;\n else if (t == 8)\n i = 3;\n else if (t == 256)\n i = 8;\n else if (t == 2)\n i = 1;\n else if (t == 32)\n i = 5;\n else if (t == 4)\n i = 2;\n else {\n this.fromRadix(e, t);\n return;\n }\n this.t = 0, this.s = 0;\n let s = e.length, n = !1, r = 0;\n for (; --s >= 0; ) {\n const a = i == 8 ? +e[s] & 255 : Od(e, s);\n if (a < 0) {\n e.charAt(s) == \"-\" && (n = !0);\n continue;\n }\n n = !1, r == 0 ? this[this.t++] = a : r + i > this.DB ? (this[this.t - 1] |= (a & (1 << this.DB - r) - 1) << r, this[this.t++] = a >> this.DB - r) : this[this.t - 1] |= a << r, r += i, r >= this.DB && (r -= this.DB);\n }\n i == 8 && +e[0] & 128 && (this.s = -1, r > 0 && (this[this.t - 1] |= (1 << this.DB - r) - 1 << r)), this.clamp(), n && we.ZERO.subTo(this, this);\n }\n // BigInteger.prototype.clamp = bnpClamp;\n // (protected) clamp off excess high words\n clamp() {\n const e = this.s & this.DM;\n for (; this.t > 0 && this[this.t - 1] == e; )\n --this.t;\n }\n // BigInteger.prototype.dlShiftTo = bnpDLShiftTo;\n // (protected) r = this << n*DB\n dlShiftTo(e, t) {\n let i;\n for (i = this.t - 1; i >= 0; --i)\n t[i + e] = this[i];\n for (i = e - 1; i >= 0; --i)\n t[i] = 0;\n t.t = this.t + e, t.s = this.s;\n }\n // BigInteger.prototype.drShiftTo = bnpDRShiftTo;\n // (protected) r = this >> n*DB\n drShiftTo(e, t) {\n for (let i = e; i < this.t; ++i)\n t[i - e] = this[i];\n t.t = Math.max(this.t - e, 0), t.s = this.s;\n }\n // BigInteger.prototype.lShiftTo = bnpLShiftTo;\n // (protected) r = this << n\n lShiftTo(e, t) {\n const i = e % this.DB, s = this.DB - i, n = (1 << s) - 1, r = Math.floor(e / this.DB);\n let a = this.s << i & this.DM;\n for (let o = this.t - 1; o >= 0; --o)\n t[o + r + 1] = this[o] >> s | a, a = (this[o] & n) << i;\n for (let o = r - 1; o >= 0; --o)\n t[o] = 0;\n t[r] = a, t.t = this.t + r + 1, t.s = this.s, t.clamp();\n }\n // BigInteger.prototype.rShiftTo = bnpRShiftTo;\n // (protected) r = this >> n\n rShiftTo(e, t) {\n t.s = this.s;\n const i = Math.floor(e / this.DB);\n if (i >= this.t) {\n t.t = 0;\n return;\n }\n const s = e % this.DB, n = this.DB - s, r = (1 << s) - 1;\n t[0] = this[i] >> s;\n for (let a = i + 1; a < this.t; ++a)\n t[a - i - 1] |= (this[a] & r) << n, t[a - i] = this[a] >> s;\n s > 0 && (t[this.t - i - 1] |= (this.s & r) << n), t.t = this.t - i, t.clamp();\n }\n // BigInteger.prototype.subTo = bnpSubTo;\n // (protected) r = this - a\n subTo(e, t) {\n let i = 0, s = 0;\n const n = Math.min(e.t, this.t);\n for (; i < n; )\n s += this[i] - e[i], t[i++] = s & this.DM, s >>= this.DB;\n if (e.t < this.t) {\n for (s -= e.s; i < this.t; )\n s += this[i], t[i++] = s & this.DM, s >>= this.DB;\n s += this.s;\n } else {\n for (s += this.s; i < e.t; )\n s -= e[i], t[i++] = s & this.DM, s >>= this.DB;\n s -= e.s;\n }\n t.s = s < 0 ? -1 : 0, s < -1 ? t[i++] = this.DV + s : s > 0 && (t[i++] = s), t.t = i, t.clamp();\n }\n // BigInteger.prototype.multiplyTo = bnpMultiplyTo;\n // (protected) r = this * a, r != this,a (HAC 14.12)\n // \"this\" should be the larger one if appropriate.\n multiplyTo(e, t) {\n const i = this.abs(), s = e.abs();\n let n = i.t;\n for (t.t = n + s.t; --n >= 0; )\n t[n] = 0;\n for (n = 0; n < s.t; ++n)\n t[n + i.t] = i.am(0, s[n], t, n, 0, i.t);\n t.s = 0, t.clamp(), this.s != e.s && we.ZERO.subTo(t, t);\n }\n // BigInteger.prototype.squareTo = bnpSquareTo;\n // (protected) r = this^2, r != this (HAC 14.16)\n squareTo(e) {\n const t = this.abs();\n let i = e.t = 2 * t.t;\n for (; --i >= 0; )\n e[i] = 0;\n for (i = 0; i < t.t - 1; ++i) {\n const s = t.am(i, t[i], e, 2 * i, 0, 1);\n (e[i + t.t] += t.am(i + 1, 2 * t[i], e, 2 * i + 1, s, t.t - i - 1)) >= t.DV && (e[i + t.t] -= t.DV, e[i + t.t + 1] = 1);\n }\n e.t > 0 && (e[e.t - 1] += t.am(i, t[i], e, 2 * i, 0, 1)), e.s = 0, e.clamp();\n }\n // BigInteger.prototype.divRemTo = bnpDivRemTo;\n // (protected) divide this by m, quotient and remainder to q, r (HAC 14.20)\n // r != q, this != m. q or r may be null.\n divRemTo(e, t, i) {\n const s = e.abs();\n if (s.t <= 0)\n return;\n const n = this.abs();\n if (n.t < s.t) {\n t != null && t.fromInt(0), i != null && this.copyTo(i);\n return;\n }\n i == null && (i = xe());\n const r = xe(), a = this.s, o = e.s, c = this.DB - On(s[s.t - 1]);\n c > 0 ? (s.lShiftTo(c, r), n.lShiftTo(c, i)) : (s.copyTo(r), n.copyTo(i));\n const u = r.t, f = r[u - 1];\n if (f == 0)\n return;\n const h = f * (1 << this.F1) + (u > 1 ? r[u - 2] >> this.F2 : 0), l = this.FV / h, p = (1 << this.F1) / h, m = 1 << this.F2;\n let y = i.t, w = y - u;\n const S = t ?? xe();\n for (r.dlShiftTo(w, S), i.compareTo(S) >= 0 && (i[i.t++] = 1, i.subTo(S, i)), we.ONE.dlShiftTo(u, S), S.subTo(r, r); r.t < u; )\n r[r.t++] = 0;\n for (; --w >= 0; ) {\n let b = i[--y] == f ? this.DM : Math.floor(i[y] * l + (i[y - 1] + m) * p);\n if ((i[y] += r.am(0, b, i, w, 0, u)) < b)\n for (r.dlShiftTo(w, S), i.subTo(S, i); i[y] < --b; )\n i.subTo(S, i);\n }\n t != null && (i.drShiftTo(u, t), a != o && we.ZERO.subTo(t, t)), i.t = u, i.clamp(), c > 0 && i.rShiftTo(c, i), a < 0 && we.ZERO.subTo(i, i);\n }\n // BigInteger.prototype.invDigit = bnpInvDigit;\n // (protected) return \"-1/this % 2^DB\"; useful for Mont. reduction\n // justification:\n // xy == 1 (mod m)\n // xy = 1+km\n // xy(2-xy) = (1+km)(1-km)\n // x[y(2-xy)] = 1-k^2m^2\n // x[y(2-xy)] == 1 (mod m^2)\n // if y is 1/x mod m, then y(2-xy) is 1/x mod m^2\n // should reduce x and y(2-xy) by m^2 at each step to keep size bounded.\n // JS multiply \"overflows\" differently from C/C++, so care is needed here.\n invDigit() {\n if (this.t < 1)\n return 0;\n const e = this[0];\n if (!(e & 1))\n return 0;\n let t = e & 3;\n return t = t * (2 - (e & 15) * t) & 15, t = t * (2 - (e & 255) * t) & 255, t = t * (2 - ((e & 65535) * t & 65535)) & 65535, t = t * (2 - e * t % this.DV) % this.DV, t > 0 ? this.DV - t : -t;\n }\n // BigInteger.prototype.isEven = bnpIsEven;\n // (protected) true iff this is even\n isEven() {\n return (this.t > 0 ? this[0] & 1 : this.s) == 0;\n }\n // BigInteger.prototype.exp = bnpExp;\n // (protected) this^e, e < 2^32, doing sqr and mul with \"r\" (HAC 14.79)\n exp(e, t) {\n if (e > 4294967295 || e < 1)\n return we.ONE;\n let i = xe(), s = xe();\n const n = t.convert(this);\n let r = On(e) - 1;\n for (n.copyTo(i); --r >= 0; )\n if (t.sqrTo(i, s), (e & 1 << r) > 0)\n t.mulTo(s, n, i);\n else {\n const a = i;\n i = s, s = a;\n }\n return t.revert(i);\n }\n // BigInteger.prototype.chunkSize = bnpChunkSize;\n // (protected) return x s.t. r^x < DV\n chunkSize(e) {\n return Math.floor(Math.LN2 * this.DB / Math.log(e));\n }\n // BigInteger.prototype.toRadix = bnpToRadix;\n // (protected) convert to radix string\n toRadix(e) {\n if (e == null && (e = 10), this.signum() == 0 || e < 2 || e > 36)\n return \"0\";\n const t = this.chunkSize(e), i = Math.pow(e, t), s = Oi(i), n = xe(), r = xe();\n let a = \"\";\n for (this.divRemTo(s, n, r); n.signum() > 0; )\n a = (i + r.intValue()).toString(e).substr(1) + a, n.divRemTo(s, n, r);\n return r.intValue().toString(e) + a;\n }\n // BigInteger.prototype.fromRadix = bnpFromRadix;\n // (protected) convert from radix string\n fromRadix(e, t) {\n this.fromInt(0), t == null && (t = 10);\n const i = this.chunkSize(t), s = Math.pow(t, i);\n let n = !1, r = 0, a = 0;\n for (let o = 0; o < e.length; ++o) {\n const c = Od(e, o);\n if (c < 0) {\n e.charAt(o) == \"-\" && this.signum() == 0 && (n = !0);\n continue;\n }\n a = t * a + c, ++r >= i && (this.dMultiply(s), this.dAddOffset(a, 0), r = 0, a = 0);\n }\n r > 0 && (this.dMultiply(Math.pow(t, r)), this.dAddOffset(a, 0)), n && we.ZERO.subTo(this, this);\n }\n // BigInteger.prototype.fromNumber = bnpFromNumber;\n // (protected) alternate constructor\n fromNumber(e, t, i) {\n if (typeof t == \"number\")\n if (e < 2)\n this.fromInt(1);\n else\n for (this.fromNumber(e, i), this.testBit(e - 1) || this.bitwiseTo(we.ONE.shiftLeft(e - 1), In, this), this.isEven() && this.dAddOffset(1, 0); !this.isProbablePrime(t); )\n this.dAddOffset(2, 0), this.bitLength() > e && this.subTo(we.ONE.shiftLeft(e - 1), this);\n else {\n const s = [], n = e & 7;\n s.length = (e >> 3) + 1, t.nextBytes(s), n > 0 ? s[0] &= (1 << n) - 1 : s[0] = 0, this.fromString(s, 256);\n }\n }\n // BigInteger.prototype.bitwiseTo = bnpBitwiseTo;\n // (protected) r = this op a (bitwise)\n bitwiseTo(e, t, i) {\n let s, n;\n const r = Math.min(e.t, this.t);\n for (s = 0; s < r; ++s)\n i[s] = t(this[s], e[s]);\n if (e.t < this.t) {\n for (n = e.s & this.DM, s = r; s < this.t; ++s)\n i[s] = t(this[s], n);\n i.t = this.t;\n } else {\n for (n = this.s & this.DM, s = r; s < e.t; ++s)\n i[s] = t(n, e[s]);\n i.t = e.t;\n }\n i.s = t(this.s, e.s), i.clamp();\n }\n // BigInteger.prototype.changeBit = bnpChangeBit;\n // (protected) this op (1<<n)\n changeBit(e, t) {\n const i = we.ONE.shiftLeft(e);\n return this.bitwiseTo(i, t, i), i;\n }\n // BigInteger.prototype.addTo = bnpAddTo;\n // (protected) r = this + a\n addTo(e, t) {\n let i = 0, s = 0;\n const n = Math.min(e.t, this.t);\n for (; i < n; )\n s += this[i] + e[i], t[i++] = s & this.DM, s >>= this.DB;\n if (e.t < this.t) {\n for (s += e.s; i < this.t; )\n s += this[i], t[i++] = s & this.DM, s >>= this.DB;\n s += this.s;\n } else {\n for (s += this.s; i < e.t; )\n s += e[i], t[i++] = s & this.DM, s >>= this.DB;\n s += e.s;\n }\n t.s = s < 0 ? -1 : 0, s > 0 ? t[i++] = s : s < -1 && (t[i++] = this.DV + s), t.t = i, t.clamp();\n }\n // BigInteger.prototype.dMultiply = bnpDMultiply;\n // (protected) this *= n, this >= 0, 1 < n < DV\n dMultiply(e) {\n this[this.t] = this.am(0, e - 1, this, 0, 0, this.t), ++this.t, this.clamp();\n }\n // BigInteger.prototype.dAddOffset = bnpDAddOffset;\n // (protected) this += n << w words, this >= 0\n dAddOffset(e, t) {\n if (e != 0) {\n for (; this.t <= t; )\n this[this.t++] = 0;\n for (this[t] += e; this[t] >= this.DV; )\n this[t] -= this.DV, ++t >= this.t && (this[this.t++] = 0), ++this[t];\n }\n }\n // BigInteger.prototype.multiplyLowerTo = bnpMultiplyLowerTo;\n // (protected) r = lower n words of \"this * a\", a.t <= n\n // \"this\" should be the larger one if appropriate.\n multiplyLowerTo(e, t, i) {\n let s = Math.min(this.t + e.t, t);\n for (i.s = 0, i.t = s; s > 0; )\n i[--s] = 0;\n for (const n = i.t - this.t; s < n; ++s)\n i[s + this.t] = this.am(0, e[s], i, s, 0, this.t);\n for (const n = Math.min(e.t, t); s < n; ++s)\n this.am(0, e[s], i, s, 0, t - s);\n i.clamp();\n }\n // BigInteger.prototype.multiplyUpperTo = bnpMultiplyUpperTo;\n // (protected) r = \"this * a\" without lower n words, n > 0\n // \"this\" should be the larger one if appropriate.\n multiplyUpperTo(e, t, i) {\n --t;\n let s = i.t = this.t + e.t - t;\n for (i.s = 0; --s >= 0; )\n i[s] = 0;\n for (s = Math.max(t - this.t, 0); s < e.t; ++s)\n i[this.t + s - t] = this.am(t - s, e[s], i, 0, 0, this.t + s - t);\n i.clamp(), i.drShiftTo(1, i);\n }\n // BigInteger.prototype.modInt = bnpModInt;\n // (protected) this % n, n < 2^26\n modInt(e) {\n if (e <= 0)\n return 0;\n const t = this.DV % e;\n let i = this.s < 0 ? e - 1 : 0;\n if (this.t > 0)\n if (t == 0)\n i = this[0] % e;\n else\n for (let s = this.t - 1; s >= 0; --s)\n i = (t * i + this[s]) % e;\n return i;\n }\n // BigInteger.prototype.millerRabin = bnpMillerRabin;\n // (protected) true if probably prime (HAC 4.24, Miller-Rabin)\n millerRabin(e) {\n const t = this.subtract(we.ONE), i = t.getLowestSetBit();\n if (i <= 0)\n return !1;\n const s = t.shiftRight(i);\n e = e + 1 >> 1, e > yt.length && (e = yt.length);\n const n = xe();\n for (let r = 0; r < e; ++r) {\n n.fromInt(yt[Math.floor(Math.random() * yt.length)]);\n let a = n.modPow(s, this);\n if (a.compareTo(we.ONE) != 0 && a.compareTo(t) != 0) {\n let o = 1;\n for (; o++ < i && a.compareTo(t) != 0; )\n if (a = a.modPowInt(2, this), a.compareTo(we.ONE) == 0)\n return !1;\n if (a.compareTo(t) != 0)\n return !1;\n }\n }\n return !0;\n }\n // BigInteger.prototype.square = bnSquare;\n // (public) this^2\n square() {\n const e = xe();\n return this.squareTo(e), e;\n }\n //#region ASYNC\n // Public API method\n gcda(e, t) {\n let i = this.s < 0 ? this.negate() : this.clone(), s = e.s < 0 ? e.negate() : e.clone();\n if (i.compareTo(s) < 0) {\n const o = i;\n i = s, s = o;\n }\n let n = i.getLowestSetBit(), r = s.getLowestSetBit();\n if (r < 0) {\n t(i);\n return;\n }\n n < r && (r = n), r > 0 && (i.rShiftTo(r, i), s.rShiftTo(r, s));\n const a = function() {\n (n = i.getLowestSetBit()) > 0 && i.rShiftTo(n, i), (n = s.getLowestSetBit()) > 0 && s.rShiftTo(n, s), i.compareTo(s) >= 0 ? (i.subTo(s, i), i.rShiftTo(1, i)) : (s.subTo(i, s), s.rShiftTo(1, s)), i.signum() > 0 ? setTimeout(a, 0) : (r > 0 && s.lShiftTo(r, s), setTimeout(function() {\n t(s);\n }, 0));\n };\n setTimeout(a, 10);\n }\n // (protected) alternate constructor\n fromNumberAsync(e, t, i, s) {\n if (typeof t == \"number\")\n if (e < 2)\n this.fromInt(1);\n else {\n this.fromNumber(e, i), this.testBit(e - 1) || this.bitwiseTo(we.ONE.shiftLeft(e - 1), In, this), this.isEven() && this.dAddOffset(1, 0);\n const n = this, r = function() {\n n.dAddOffset(2, 0), n.bitLength() > e && n.subTo(we.ONE.shiftLeft(e - 1), n), n.isProbablePrime(t) ? setTimeout(function() {\n s();\n }, 0) : setTimeout(r, 0);\n };\n setTimeout(r, 0);\n }\n else {\n const n = [], r = e & 7;\n n.length = (e >> 3) + 1, t.nextBytes(n), r > 0 ? n[0] &= (1 << r) - 1 : n[0] = 0, this.fromString(n, 256);\n }\n }\n}\nclass Rm {\n constructor() {\n }\n // NullExp.prototype.convert = nNop;\n convert(e) {\n return e;\n }\n // NullExp.prototype.revert = nNop;\n revert(e) {\n return e;\n }\n // NullExp.prototype.mulTo = nMulTo;\n mulTo(e, t, i) {\n e.multiplyTo(t, i);\n }\n // NullExp.prototype.sqrTo = nSqrTo;\n sqrTo(e, t) {\n e.squareTo(t);\n }\n}\nclass Td {\n constructor(e) {\n this.m = e;\n }\n // Classic.prototype.convert = cConvert;\n convert(e) {\n return e.s < 0 || e.compareTo(this.m) >= 0 ? e.mod(this.m) : e;\n }\n // Classic.prototype.revert = cRevert;\n revert(e) {\n return e;\n }\n // Classic.prototype.reduce = cReduce;\n reduce(e) {\n e.divRemTo(this.m, null, e);\n }\n // Classic.prototype.mulTo = cMulTo;\n mulTo(e, t, i) {\n e.multiplyTo(t, i), this.reduce(i);\n }\n // Classic.prototype.sqrTo = cSqrTo;\n sqrTo(e, t) {\n e.squareTo(t), this.reduce(t);\n }\n}\nclass Ad {\n constructor(e) {\n this.m = e, this.mp = e.invDigit(), this.mpl = this.mp & 32767, this.mph = this.mp >> 15, this.um = (1 << e.DB - 15) - 1, this.mt2 = 2 * e.t;\n }\n // Montgomery.prototype.convert = montConvert;\n // xR mod m\n convert(e) {\n const t = xe();\n return e.abs().dlShiftTo(this.m.t, t), t.divRemTo(this.m, null, t), e.s < 0 && t.compareTo(we.ZERO) > 0 && this.m.subTo(t, t), t;\n }\n // Montgomery.prototype.revert = montRevert;\n // x/R mod m\n revert(e) {\n const t = xe();\n return e.copyTo(t), this.reduce(t), t;\n }\n // Montgomery.prototype.reduce = montReduce;\n // x = x/R mod m (HAC 14.32)\n reduce(e) {\n for (; e.t <= this.mt2; )\n e[e.t++] = 0;\n for (let t = 0; t < this.m.t; ++t) {\n let i = e[t] & 32767;\n const s = i * this.mpl + ((i * this.mph + (e[t] >> 15) * this.mpl & this.um) << 15) & e.DM;\n for (i = t + this.m.t, e[i] += this.m.am(0, s, e, t, 0, this.m.t); e[i] >= e.DV; )\n e[i] -= e.DV, e[++i]++;\n }\n e.clamp(), e.drShiftTo(this.m.t, e), e.compareTo(this.m) >= 0 && e.subTo(this.m, e);\n }\n // Montgomery.prototype.mulTo = montMulTo;\n // r = \"xy/R mod m\"; x,y != r\n mulTo(e, t, i) {\n e.multiplyTo(t, i), this.reduce(i);\n }\n // Montgomery.prototype.sqrTo = montSqrTo;\n // r = \"x^2/R mod m\"; x != r\n sqrTo(e, t) {\n e.squareTo(t), this.reduce(t);\n }\n}\nclass Bm {\n constructor(e) {\n this.m = e, this.r2 = xe(), this.q3 = xe(), we.ONE.dlShiftTo(2 * e.t, this.r2), this.mu = this.r2.divide(e);\n }\n // Barrett.prototype.convert = barrettConvert;\n convert(e) {\n if (e.s < 0 || e.t > 2 * this.m.t)\n return e.mod(this.m);\n if (e.compareTo(this.m) < 0)\n return e;\n {\n const t = xe();\n return e.copyTo(t), this.reduce(t), t;\n }\n }\n // Barrett.prototype.revert = barrettRevert;\n revert(e) {\n return e;\n }\n // Barrett.prototype.reduce = barrettReduce;\n // x = x mod m (HAC 14.42)\n reduce(e) {\n for (e.drShiftTo(this.m.t - 1, this.r2), e.t > this.m.t + 1 && (e.t = this.m.t + 1, e.clamp()), this.mu.multiplyUpperTo(this.r2, this.m.t + 1, this.q3), this.m.multiplyLowerTo(this.q3, this.m.t + 1, this.r2); e.compareTo(this.r2) < 0; )\n e.dAddOffset(1, this.m.t + 1);\n for (e.subTo(this.r2, e); e.compareTo(this.m) >= 0; )\n e.subTo(this.m, e);\n }\n // Barrett.prototype.mulTo = barrettMulTo;\n // r = x*y mod m; x,y != r\n mulTo(e, t, i) {\n e.multiplyTo(t, i), this.reduce(i);\n }\n // Barrett.prototype.sqrTo = barrettSqrTo;\n // r = x^2 mod m; x != r\n sqrTo(e, t) {\n e.squareTo(t), this.reduce(t);\n }\n}\nfunction xe() {\n return new we(null);\n}\nfunction Ke(d, e) {\n return new we(d, e);\n}\nconst Id = typeof navigator < \"u\";\nId && Sd && navigator.appName == \"Microsoft Internet Explorer\" ? (we.prototype.am = function(e, t, i, s, n, r) {\n const a = t & 32767, o = t >> 15;\n for (; --r >= 0; ) {\n let c = this[e] & 32767;\n const u = this[e++] >> 15, f = o * c + u * a;\n c = a * c + ((f & 32767) << 15) + i[s] + (n & 1073741823), n = (c >>> 30) + (f >>> 15) + o * u + (n >>> 30), i[s++] = c & 1073741823;\n }\n return n;\n}, xi = 30) : Id && Sd && navigator.appName != \"Netscape\" ? (we.prototype.am = function(e, t, i, s, n, r) {\n for (; --r >= 0; ) {\n const a = t * this[e++] + i[s] + n;\n n = Math.floor(a / 67108864), i[s++] = a & 67108863;\n }\n return n;\n}, xi = 26) : (we.prototype.am = function(e, t, i, s, n, r) {\n const a = t & 16383, o = t >> 14;\n for (; --r >= 0; ) {\n let c = this[e] & 16383;\n const u = this[e++] >> 14, f = o * c + u * a;\n c = a * c + ((f & 16383) << 14) + i[s] + n, n = (c >> 28) + (f >> 14) + o * u, i[s++] = c & 268435455;\n }\n return n;\n}, xi = 28);\nwe.prototype.DB = xi;\nwe.prototype.DM = (1 << xi) - 1;\nwe.prototype.DV = 1 << xi;\nconst Ao = 52;\nwe.prototype.FV = Math.pow(2, Ao);\nwe.prototype.F1 = Ao - xi;\nwe.prototype.F2 = 2 * xi - Ao;\nconst yr = [];\nlet xs, kt;\nxs = \"0\".charCodeAt(0);\nfor (kt = 0; kt <= 9; ++kt)\n yr[xs++] = kt;\nxs = \"a\".charCodeAt(0);\nfor (kt = 10; kt < 36; ++kt)\n yr[xs++] = kt;\nxs = \"A\".charCodeAt(0);\nfor (kt = 10; kt < 36; ++kt)\n yr[xs++] = kt;\nfunction Od(d, e) {\n const t = yr[d.charCodeAt(e)];\n return t ?? -1;\n}\nfunction Oi(d) {\n const e = xe();\n return e.fromInt(d), e;\n}\nfunction On(d) {\n let e = 1, t;\n return (t = d >>> 16) != 0 && (d = t, e += 16), (t = d >> 8) != 0 && (d = t, e += 8), (t = d >> 4) != 0 && (d = t, e += 4), (t = d >> 2) != 0 && (d = t, e += 2), (t = d >> 1) != 0 && (d = t, e += 1), e;\n}\nwe.ZERO = Oi(0);\nwe.ONE = Oi(1);\nfunction Vm(d, e) {\n if (e < d.length + 22)\n return console.error(\"Message too long for RSA\"), null;\n const t = e - d.length - 6;\n let i = \"\";\n for (let n = 0; n < t; n += 2)\n i += \"ff\";\n const s = \"0001\" + i + \"00\" + d;\n return Ke(s, 16);\n}\nfunction jm(d, e) {\n if (e < d.length + 11)\n return console.error(\"Message too long for RSA\"), null;\n const t = [];\n let i = d.length - 1;\n for (; i >= 0 && e > 0; ) {\n const r = d.charCodeAt(i--);\n r < 128 ? t[--e] = r : r > 127 && r < 2048 ? (t[--e] = r & 63 | 128, t[--e] = r >> 6 | 192) : (t[--e] = r & 63 | 128, t[--e] = r >> 6 & 63 | 128, t[--e] = r >> 12 | 224);\n }\n t[--e] = 0;\n const s = new Xn(), n = [];\n for (; e > 2; ) {\n for (n[0] = 0; n[0] == 0; )\n s.nextBytes(n);\n t[--e] = n[0];\n }\n return t[--e] = 2, t[--e] = 0, new we(t);\n}\nclass Fm {\n constructor() {\n this.n = null, this.e = 0, this.d = null, this.p = null, this.q = null, this.dmp1 = null, this.dmq1 = null, this.coeff = null;\n }\n //#region PROTECTED\n // protected\n // RSAKey.prototype.doPublic = RSADoPublic;\n // Perform raw public operation on \"x\": return x^e (mod n)\n doPublic(e) {\n return e.modPowInt(this.e, this.n);\n }\n // RSAKey.prototype.doPrivate = RSADoPrivate;\n // Perform raw private operation on \"x\": return x^d (mod n)\n doPrivate(e) {\n if (this.p == null || this.q == null)\n return e.modPow(this.d, this.n);\n let t = e.mod(this.p).modPow(this.dmp1, this.p);\n const i = e.mod(this.q).modPow(this.dmq1, this.q);\n for (; t.compareTo(i) < 0; )\n t = t.add(this.p);\n return t.subtract(i).multiply(this.coeff).mod(this.p).multiply(this.q).add(i);\n }\n //#endregion PROTECTED\n //#region PUBLIC\n // RSAKey.prototype.setPublic = RSASetPublic;\n // Set the public key fields N and e from hex strings\n setPublic(e, t) {\n e != null && t != null && e.length > 0 && t.length > 0 ? (this.n = Ke(e, 16), this.e = parseInt(t, 16)) : console.error(\"Invalid RSA public key\");\n }\n // RSAKey.prototype.encrypt = RSAEncrypt;\n // Return the PKCS#1 RSA encryption of \"text\" as an even-length hex string\n encrypt(e) {\n const t = this.n.bitLength() + 7 >> 3, i = jm(e, t);\n if (i == null)\n return null;\n const s = this.doPublic(i);\n if (s == null)\n return null;\n let n = s.toString(16), r = n.length;\n for (let a = 0; a < t * 2 - r; a++)\n n = \"0\" + n;\n return n;\n }\n // RSAKey.prototype.setPrivate = RSASetPrivate;\n // Set the private key fields N, e, and d from hex strings\n setPrivate(e, t, i) {\n e != null && t != null && e.length > 0 && t.length > 0 ? (this.n = Ke(e, 16), this.e = parseInt(t, 16), this.d = Ke(i, 16)) : console.error(\"Invalid RSA private key\");\n }\n // RSAKey.prototype.setPrivateEx = RSASetPrivateEx;\n // Set the private key fields N, e, d and CRT params from hex strings\n setPrivateEx(e, t, i, s, n, r, a, o) {\n e != null && t != null && e.length > 0 && t.length > 0 ? (this.n = Ke(e, 16), this.e = parseInt(t, 16), this.d = Ke(i, 16), this.p = Ke(s, 16), this.q = Ke(n, 16), this.dmp1 = Ke(r, 16), this.dmq1 = Ke(a, 16), this.coeff = Ke(o, 16)) : console.error(\"Invalid RSA private key\");\n }\n // RSAKey.prototype.generate = RSAGenerate;\n // Generate a new random private key B bits long, using public expt E\n generate(e, t) {\n const i = new Xn(), s = e >> 1;\n this.e = parseInt(t, 16);\n const n = new we(t, 16);\n for (; ; ) {\n for (; this.p = new we(e - s, 1, i), !(this.p.subtract(we.ONE).gcd(n).compareTo(we.ONE) == 0 && this.p.isProbablePrime(10)); )\n ;\n for (; this.q = new we(s, 1, i), !(this.q.subtract(we.ONE).gcd(n).compareTo(we.ONE) == 0 && this.q.isProbablePrime(10)); )\n ;\n if (this.p.compareTo(this.q) <= 0) {\n const c = this.p;\n this.p = this.q, this.q = c;\n }\n const r = this.p.subtract(we.ONE), a = this.q.subtract(we.ONE), o = r.multiply(a);\n if (o.gcd(n).compareTo(we.ONE) == 0) {\n this.n = this.p.multiply(this.q), this.d = n.modInverse(o), this.dmp1 = this.d.mod(r), this.dmq1 = this.d.mod(a), this.coeff = this.q.modInverse(this.p);\n break;\n }\n }\n }\n // RSAKey.prototype.decrypt = RSADecrypt;\n // Return the PKCS#1 RSA decryption of \"ctext\".\n // \"ctext\" is an even-length hex string and the output is a plain string.\n decrypt(e) {\n const t = Ke(e, 16), i = this.doPrivate(t);\n return i == null ? null : Um(i, this.n.bitLength() + 7 >> 3);\n }\n // Generate a new random private key B bits long, using public expt E\n generateAsync(e, t, i) {\n const s = new Xn(), n = e >> 1;\n this.e = parseInt(t, 16);\n const r = new we(t, 16), a = this, o = function() {\n const c = function() {\n if (a.p.compareTo(a.q) <= 0) {\n const m = a.p;\n a.p = a.q, a.q = m;\n }\n const h = a.p.subtract(we.ONE), l = a.q.subtract(we.ONE), p = h.multiply(l);\n p.gcd(r).compareTo(we.ONE) == 0 ? (a.n = a.p.multiply(a.q), a.d = r.modInverse(p), a.dmp1 = a.d.mod(h), a.dmq1 = a.d.mod(l), a.coeff = a.q.modInverse(a.p), setTimeout(function() {\n i();\n }, 0)) : setTimeout(o, 0);\n }, u = function() {\n a.q = xe(), a.q.fromNumberAsync(n, 1, s, function() {\n a.q.subtract(we.ONE).gcda(r, function(h) {\n h.compareTo(we.ONE) == 0 && a.q.isProbablePrime(10) ? setTimeout(c, 0) : setTimeout(u, 0);\n });\n });\n }, f = function() {\n a.p = xe(), a.p.fromNumberAsync(e - n, 1, s, function() {\n a.p.subtract(we.ONE).gcda(r, function(h) {\n h.compareTo(we.ONE) == 0 && a.p.isProbablePrime(10) ? setTimeout(u, 0) : setTimeout(f, 0);\n });\n });\n };\n setTimeout(f, 0);\n };\n setTimeout(o, 0);\n }\n sign(e, t, i) {\n const n = qm(i) + t(e).toString(), r = Vm(n, this.n.bitLength() / 4);\n if (r == null)\n return null;\n const a = this.doPrivate(r);\n if (a == null)\n return null;\n const o = a.toString(16);\n return o.length & 1 ? \"0\" + o : o;\n }\n verify(e, t, i) {\n const s = Ke(t, 16), n = this.doPublic(s);\n if (n == null)\n return null;\n const r = n.toString(16).replace(/^1f+00/, \"\");\n return Gm(r) == i(e).toString();\n }\n}\nfunction Um(d, e) {\n const t = d.toByteArray();\n let i = 0;\n for (; i < t.length && t[i] == 0; )\n ++i;\n if (t.length - i != e - 1 || t[i] != 2)\n return null;\n for (++i; t[i] != 0; )\n if (++i >= t.length)\n return null;\n let s = \"\";\n for (; ++i < t.length; ) {\n const n = t[i] & 255;\n n < 128 ? s += String.fromCharCode(n) : n > 191 && n < 224 ? (s += String.fromCharCode((n & 31) << 6 | t[i + 1] & 63), ++i) : (s += String.fromCharCode((n & 15) << 12 | (t[i + 1] & 63) << 6 | t[i + 2] & 63), i += 2);\n }\n return s;\n}\nconst Dn = {\n md2: \"3020300c06082a864886f70d020205000410\",\n md5: \"3020300c06082a864886f70d020505000410\",\n sha1: \"3021300906052b0e03021a05000414\",\n sha224: \"302d300d06096086480165030402040500041c\",\n sha256: \"3031300d060960864801650304020105000420\",\n sha384: \"3041300d060960864801650304020205000430\",\n sha512: \"3051300d060960864801650304020305000440\",\n ripemd160: \"3021300906052b2403020105000414\"\n};\nfunction qm(d) {\n return Dn[d] || \"\";\n}\nfunction Gm(d) {\n for (const e in Dn)\n if (Dn.hasOwnProperty(e)) {\n const t = Dn[e], i = t.length;\n if (d.substr(0, i) == t)\n return d.substr(i);\n }\n return d;\n}\n/*!\nCopyright (c) 2011, Yahoo! Inc. All rights reserved.\nCode licensed under the BSD License:\nhttp://developer.yahoo.com/yui/license.html\nversion: 2.9.0\n*/\nvar Qe = {};\nQe.lang = {\n /**\n * Utility to set up the prototype, constructor and superclass properties to\n * support an inheritance strategy that can chain constructors and methods.\n * Static members will not be inherited.\n *\n * @method extend\n * @static\n * @param {Function} subc the object to modify\n * @param {Function} superc the object to inherit\n * @param {Object} overrides additional properties/methods to add to the\n * subclass prototype. These will override the\n * matching items obtained from the superclass\n * if present.\n */\n extend: function(d, e, t) {\n if (!e || !d)\n throw new Error(\"YAHOO.lang.extend failed, please check that all dependencies are included.\");\n var i = function() {\n };\n if (i.prototype = e.prototype, d.prototype = new i(), d.prototype.constructor = d, d.superclass = e.prototype, e.prototype.constructor == Object.prototype.constructor && (e.prototype.constructor = e), t) {\n var s;\n for (s in t)\n d.prototype[s] = t[s];\n var n = function() {\n }, r = [\"toString\", \"valueOf\"];\n try {\n /MSIE/.test(navigator.userAgent) && (n = function(a, o) {\n for (s = 0; s < r.length; s = s + 1) {\n var c = r[s], u = o[c];\n typeof u == \"function\" && u != Object.prototype[c] && (a[c] = u);\n }\n });\n } catch {\n }\n n(d.prototype, t);\n }\n }\n};\n/**\n * @fileOverview\n * @name asn1-1.0.js\n * @author Kenji Urushima kenji.urushima@gmail.com\n * @version asn1 1.0.13 (2017-Jun-02)\n * @since jsrsasign 2.1\n * @license <a href=\"https://kjur.github.io/jsrsasign/license/\">MIT License</a>\n */\nvar fe = {};\n(typeof fe.asn1 > \"u\" || !fe.asn1) && (fe.asn1 = {});\nfe.asn1.ASN1Util = new function() {\n this.integerToByteHex = function(d) {\n var e = d.toString(16);\n return e.length % 2 == 1 && (e = \"0\" + e), e;\n }, this.bigIntToMinTwosComplementsHex = function(d) {\n var e = d.toString(16);\n if (e.substr(0, 1) != \"-\")\n e.length % 2 == 1 ? e = \"0\" + e : e.match(/^[0-7]/) || (e = \"00\" + e);\n else {\n var t = e.substr(1), i = t.length;\n i % 2 == 1 ? i += 1 : e.match(/^[0-7]/) || (i += 2);\n for (var s = \"\", n = 0; n < i; n++)\n s += \"f\";\n var r = new we(s, 16), a = r.xor(d).add(we.ONE);\n e = a.toString(16).replace(/^-/, \"\");\n }\n return e;\n }, this.getPEMStringFromHex = function(d, e) {\n return hextopem(d, e);\n }, this.newObject = function(d) {\n var e = fe, t = e.asn1, i = t.DERBoolean, s = t.DERInteger, n = t.DERBitString, r = t.DEROctetString, a = t.DERNull, o = t.DERObjectIdentifier, c = t.DEREnumerated, u = t.DERUTF8String, f = t.DERNumericString, h = t.DERPrintableString, l = t.DERTeletexString, p = t.DERIA5String, m = t.DERUTCTime, y = t.DERGeneralizedTime, w = t.DERSequence, S = t.DERSet, b = t.DERTaggedObject, T = t.ASN1Util.newObject, x = Object.keys(d);\n if (x.length != 1)\n throw \"key of param shall be only one.\";\n var v = x[0];\n if (\":bool:int:bitstr:octstr:null:oid:enum:utf8str:numstr:prnstr:telstr:ia5str:utctime:gentime:seq:set:tag:\".indexOf(\":\" + v + \":\") == -1)\n throw \"undefined key: \" + v;\n if (v == \"bool\")\n return new i(d[v]);\n if (v == \"int\")\n return new s(d[v]);\n if (v == \"bitstr\")\n return new n(d[v]);\n if (v == \"octstr\")\n return new r(d[v]);\n if (v == \"null\")\n return new a(d[v]);\n if (v == \"oid\")\n return new o(d[v]);\n if (v == \"enum\")\n return new c(d[v]);\n if (v == \"utf8str\")\n return new u(d[v]);\n if (v == \"numstr\")\n return new f(d[v]);\n if (v == \"prnstr\")\n return new h(d[v]);\n if (v == \"telstr\")\n return new l(d[v]);\n if (v == \"ia5str\")\n return new p(d[v]);\n if (v == \"utctime\")\n return new m(d[v]);\n if (v == \"gentime\")\n return new y(d[v]);\n if (v == \"seq\") {\n for (var _ = d[v], V = [], j = 0; j < _.length; j++) {\n var G = T(_[j]);\n V.push(G);\n }\n return new w({ array: V });\n }\n if (v == \"set\") {\n for (var _ = d[v], V = [], j = 0; j < _.length; j++) {\n var G = T(_[j]);\n V.push(G);\n }\n return new S({ array: V });\n }\n if (v == \"tag\") {\n var W = d[v];\n if (Object.prototype.toString.call(W) === \"[object Array]\" && W.length == 3) {\n var B = T(W[2]);\n return new b({\n tag: W[0],\n explicit: W[1],\n obj: B\n });\n } else {\n var Q = {};\n if (W.explicit !== void 0 && (Q.explicit = W.explicit), W.tag !== void 0 && (Q.tag = W.tag), W.obj === void 0)\n throw \"obj shall be specified for 'tag'.\";\n return Q.obj = T(W.obj), new b(Q);\n }\n }\n }, this.jsonToASN1HEX = function(d) {\n var e = this.newObject(d);\n return e.getEncodedHex();\n };\n}();\nfe.asn1.ASN1Util.oidHexToInt = function(d) {\n for (var s = \"\", e = parseInt(d.substr(0, 2), 16), t = Math.floor(e / 40), i = e % 40, s = t + \".\" + i, n = \"\", r = 2; r < d.length; r += 2) {\n var a = parseInt(d.substr(r, 2), 16), o = (\"00000000\" + a.toString(2)).slice(-8);\n if (n = n + o.substr(1, 7), o.substr(0, 1) == \"0\") {\n var c = new we(n, 2);\n s = s + \".\" + c.toString(10), n = \"\";\n }\n }\n return s;\n};\nfe.asn1.ASN1Util.oidIntToHex = function(d) {\n var e = function(a) {\n var o = a.toString(16);\n return o.length == 1 && (o = \"0\" + o), o;\n }, t = function(a) {\n var o = \"\", c = new we(a, 10), u = c.toString(2), f = 7 - u.length % 7;\n f == 7 && (f = 0);\n for (var h = \"\", l = 0; l < f; l++)\n h += \"0\";\n u = h + u;\n for (var l = 0; l < u.length - 1; l += 7) {\n var p = u.substr(l, 7);\n l != u.length - 7 && (p = \"1\" + p), o += e(parseInt(p, 2));\n }\n return o;\n };\n if (!d.match(/^[0-9.]+$/))\n throw \"malformed oid string: \" + d;\n var i = \"\", s = d.split(\".\"), n = parseInt(s[0]) * 40 + parseInt(s[1]);\n i += e(n), s.splice(0, 2);\n for (var r = 0; r < s.length; r++)\n i += t(s[r]);\n return i;\n};\nfe.asn1.ASN1Object = function() {\n var d = \"\";\n this.getLengthHexFromValue = function() {\n if (typeof this.hV > \"u\" || this.hV == null)\n throw \"this.hV is null or undefined.\";\n if (this.hV.length % 2 == 1)\n throw \"value hex must be even length: n=\" + d.length + \",v=\" + this.hV;\n var e = this.hV.length / 2, t = e.toString(16);\n if (t.length % 2 == 1 && (t = \"0\" + t), e < 128)\n return t;\n var i = t.length / 2;\n if (i > 15)\n throw \"ASN.1 length too long to represent by 8x: n = \" + e.toString(16);\n var s = 128 + i;\n return s.toString(16) + t;\n }, this.getEncodedHex = function() {\n return (this.hTLV == null || this.isModified) && (this.hV = this.getFreshValueHex(), this.hL = this.getLengthHexFromValue(), this.hTLV = this.hT + this.hL + this.hV, this.isModified = !1), this.hTLV;\n }, this.getValueHex = function() {\n return this.getEncodedHex(), this.hV;\n }, this.getFreshValueHex = function() {\n return \"\";\n };\n};\nfe.asn1.DERAbstractString = function(d) {\n fe.asn1.DERAbstractString.superclass.constructor.call(this), this.getString = function() {\n return this.s;\n }, this.setString = function(e) {\n this.hTLV = null, this.isModified = !0, this.s = e, this.hV = stohex(this.s);\n }, this.setStringHex = function(e) {\n this.hTLV = null, this.isModified = !0, this.s = null, this.hV = e;\n }, this.getFreshValueHex = function() {\n return this.hV;\n }, typeof d < \"u\" && (typeof d == \"string\" ? this.setString(d) : typeof d.str < \"u\" ? this.setString(d.str) : typeof d.hex < \"u\" && this.setStringHex(d.hex));\n};\nQe.lang.extend(fe.asn1.DERAbstractString, fe.asn1.ASN1Object);\nfe.asn1.DERAbstractTime = function(d) {\n fe.asn1.DERAbstractTime.superclass.constructor.call(this), this.localDateToUTC = function(e) {\n utc = e.getTime() + e.getTimezoneOffset() * 6e4;\n var t = new Date(utc);\n return t;\n }, this.formatDate = function(e, t, i) {\n var s = this.zeroPadding, n = this.localDateToUTC(e), r = String(n.getFullYear());\n t == \"utc\" && (r = r.substr(2, 2));\n var a = s(String(n.getMonth() + 1), 2), o = s(String(n.getDate()), 2), c = s(String(n.getHours()), 2), u = s(String(n.getMinutes()), 2), f = s(String(n.getSeconds()), 2), h = r + a + o + c + u + f;\n if (i === !0) {\n var l = n.getMilliseconds();\n if (l != 0) {\n var p = s(String(l), 3);\n p = p.replace(/[0]+$/, \"\"), h = h + \".\" + p;\n }\n }\n return h + \"Z\";\n }, this.zeroPadding = function(e, t) {\n return e.length >= t ? e : new Array(t - e.length + 1).join(\"0\") + e;\n }, this.getString = function() {\n return this.s;\n }, this.setString = function(e) {\n this.hTLV = null, this.isModified = !0, this.s = e, this.hV = stohex(e);\n }, this.setByDateValue = function(e, t, i, s, n, r) {\n var a = new Date(Date.UTC(e, t - 1, i, s, n, r, 0));\n this.setByDate(a);\n }, this.getFreshValueHex = function() {\n return this.hV;\n };\n};\nQe.lang.extend(fe.asn1.DERAbstractTime, fe.asn1.ASN1Object);\nfe.asn1.DERAbstractStructured = function(d) {\n fe.asn1.DERAbstractString.superclass.constructor.call(this), this.setByASN1ObjectArray = function(e) {\n this.hTLV = null, this.isModified = !0, this.asn1Array = e;\n }, this.appendASN1Object = function(e) {\n this.hTLV = null, this.isModified = !0, this.asn1Array.push(e);\n }, this.asn1Array = new Array(), typeof d < \"u\" && typeof d.array < \"u\" && (this.asn1Array = d.array);\n};\nQe.lang.extend(fe.asn1.DERAbstractStructured, fe.asn1.ASN1Object);\nfe.asn1.DERBoolean = function() {\n fe.asn1.DERBoolean.superclass.constructor.call(this), this.hT = \"01\", this.hTLV = \"0101ff\";\n};\nQe.lang.extend(fe.asn1.DERBoolean, fe.asn1.ASN1Object);\nfe.asn1.DERInteger = function(d) {\n fe.asn1.DERInteger.superclass.constructor.call(this), this.hT = \"02\", this.setByBigInteger = function(e) {\n this.hTLV = null, this.isModified = !0, this.hV = fe.asn1.ASN1Util.bigIntToMinTwosComplementsHex(e);\n }, this.setByInteger = function(e) {\n var t = new we(String(e), 10);\n this.setByBigInteger(t);\n }, this.setValueHex = function(e) {\n this.hV = e;\n }, this.getFreshValueHex = function() {\n return this.hV;\n }, typeof d < \"u\" && (typeof d.bigint < \"u\" ? this.setByBigInteger(d.bigint) : typeof d.int < \"u\" ? this.setByInteger(d.int) : typeof d == \"number\" ? this.setByInteger(d) : typeof d.hex < \"u\" && this.setValueHex(d.hex));\n};\nQe.lang.extend(fe.asn1.DERInteger, fe.asn1.ASN1Object);\nfe.asn1.DERBitString = function(d) {\n if (d !== void 0 && typeof d.obj < \"u\") {\n var e = fe.asn1.ASN1Util.newObject(d.obj);\n d.hex = \"00\" + e.getEncodedHex();\n }\n fe.asn1.DERBitString.superclass.constructor.call(this), this.hT = \"03\", this.setHexValueIncludingUnusedBits = function(t) {\n this.hTLV = null, this.isModified = !0, this.hV = t;\n }, this.setUnusedBitsAndHexValue = function(t, i) {\n if (t < 0 || 7 < t)\n throw \"unused bits shall be from 0 to 7: u = \" + t;\n var s = \"0\" + t;\n this.hTLV = null, this.isModified = !0, this.hV = s + i;\n }, this.setByBinaryString = function(t) {\n t = t.replace(/0+$/, \"\");\n var i = 8 - t.length % 8;\n i == 8 && (i = 0);\n for (var s = 0; s <= i; s++)\n t += \"0\";\n for (var n = \"\", s = 0; s < t.length - 1; s += 8) {\n var r = t.substr(s, 8), a = parseInt(r, 2).toString(16);\n a.length == 1 && (a = \"0\" + a), n += a;\n }\n this.hTLV = null, this.isModified = !0, this.hV = \"0\" + i + n;\n }, this.setByBooleanArray = function(t) {\n for (var i = \"\", s = 0; s < t.length; s++)\n t[s] == !0 ? i += \"1\" : i += \"0\";\n this.setByBinaryString(i);\n }, this.newFalseArray = function(t) {\n for (var i = new Array(t), s = 0; s < t; s++)\n i[s] = !1;\n return i;\n }, this.getFreshValueHex = function() {\n return this.hV;\n }, typeof d < \"u\" && (typeof d == \"string\" && d.toLowerCase().match(/^[0-9a-f]+$/) ? this.setHexValueIncludingUnusedBits(d) : typeof d.hex < \"u\" ? this.setHexValueIncludingUnusedBits(d.hex) : typeof d.bin < \"u\" ? this.setByBinaryString(d.bin) : typeof d.array < \"u\" && this.setByBooleanArray(d.array));\n};\nQe.lang.extend(fe.asn1.DERBitString, fe.asn1.ASN1Object);\nfe.asn1.DEROctetString = function(d) {\n if (d !== void 0 && typeof d.obj < \"u\") {\n var e = fe.asn1.ASN1Util.newObject(d.obj);\n d.hex = e.getEncodedHex();\n }\n fe.asn1.DEROctetString.superclass.constructor.call(this, d), this.hT = \"04\";\n};\nQe.lang.extend(fe.asn1.DEROctetString, fe.asn1.DERAbstractString);\nfe.asn1.DERNull = function() {\n fe.asn1.DERNull.superclass.constructor.call(this), this.hT = \"05\", this.hTLV = \"0500\";\n};\nQe.lang.extend(fe.asn1.DERNull, fe.asn1.ASN1Object);\nfe.asn1.DERObjectIdentifier = function(d) {\n var e = function(i) {\n var s = i.toString(16);\n return s.length == 1 && (s = \"0\" + s), s;\n }, t = function(i) {\n var s = \"\", n = new we(i, 10), r = n.toString(2), a = 7 - r.length % 7;\n a == 7 && (a = 0);\n for (var o = \"\", c = 0; c < a; c++)\n o += \"0\";\n r = o + r;\n for (var c = 0; c < r.length - 1; c += 7) {\n var u = r.substr(c, 7);\n c != r.length - 7 && (u = \"1\" + u), s += e(parseInt(u, 2));\n }\n return s;\n };\n fe.asn1.DERObjectIdentifier.superclass.constructor.call(this), this.hT = \"06\", this.setValueHex = function(i) {\n this.hTLV = null, this.isModified = !0, this.s = null, this.hV = i;\n }, this.setValueOidString = function(i) {\n if (!i.match(/^[0-9.]+$/))\n throw \"malformed oid string: \" + i;\n var s = \"\", n = i.split(\".\"), r = parseInt(n[0]) * 40 + parseInt(n[1]);\n s += e(r), n.splice(0, 2);\n for (var a = 0; a < n.length; a++)\n s += t(n[a]);\n this.hTLV = null, this.isModified = !0, this.s = null, this.hV = s;\n }, this.setValueName = function(i) {\n var s = fe.asn1.x509.OID.name2oid(i);\n if (s !== \"\")\n this.setValueOidString(s);\n else\n throw \"DERObjectIdentifier oidName undefined: \" + i;\n }, this.getFreshValueHex = function() {\n return this.hV;\n }, d !== void 0 && (typeof d == \"string\" ? d.match(/^[0-2].[0-9.]+$/) ? this.setValueOidString(d) : this.setValueName(d) : d.oid !== void 0 ? this.setValueOidString(d.oid) : d.hex !== void 0 ? this.setValueHex(d.hex) : d.name !== void 0 && this.setValueName(d.name));\n};\nQe.lang.extend(fe.asn1.DERObjectIdentifier, fe.asn1.ASN1Object);\nfe.asn1.DEREnumerated = function(d) {\n fe.asn1.DEREnumerated.superclass.constructor.call(this), this.hT = \"0a\", this.setByBigInteger = function(e) {\n this.hTLV = null, this.isModified = !0, this.hV = fe.asn1.ASN1Util.bigIntToMinTwosComplementsHex(e);\n }, this.setByInteger = function(e) {\n var t = new we(String(e), 10);\n this.setByBigInteger(t);\n }, this.setValueHex = function(e) {\n this.hV = e;\n }, this.getFreshValueHex = function() {\n return this.hV;\n }, typeof d < \"u\" && (typeof d.int < \"u\" ? this.setByInteger(d.int) : typeof d == \"number\" ? this.setByInteger(d) : typeof d.hex < \"u\" && this.setValueHex(d.hex));\n};\nQe.lang.extend(fe.asn1.DEREnumerated, fe.asn1.ASN1Object);\nfe.asn1.DERUTF8String = function(d) {\n fe.asn1.DERUTF8String.superclass.constructor.call(this, d), this.hT = \"0c\";\n};\nQe.lang.extend(fe.asn1.DERUTF8String, fe.asn1.DERAbstractString);\nfe.asn1.DERNumericString = function(d) {\n fe.asn1.DERNumericString.superclass.constructor.call(this, d), this.hT = \"12\";\n};\nQe.lang.extend(fe.asn1.DERNumericString, fe.asn1.DERAbstractString);\nfe.asn1.DERPrintableString = function(d) {\n fe.asn1.DERPrintableString.superclass.constructor.call(this, d), this.hT = \"13\";\n};\nQe.lang.extend(fe.asn1.DERPrintableString, fe.asn1.DERAbstractString);\nfe.asn1.DERTeletexString = function(d) {\n fe.asn1.DERTeletexString.superclass.constructor.call(this, d), this.hT = \"14\";\n};\nQe.lang.extend(fe.asn1.DERTeletexString, fe.asn1.DERAbstractString);\nfe.asn1.DERIA5String = function(d) {\n fe.asn1.DERIA5String.superclass.constructor.call(this, d), this.hT = \"16\";\n};\nQe.lang.extend(fe.asn1.DERIA5String, fe.asn1.DERAbstractString);\nfe.asn1.DERUTCTime = function(d) {\n fe.asn1.DERUTCTime.superclass.constructor.call(this, d), this.hT = \"17\", this.setByDate = function(e) {\n this.hTLV = null, this.isModified = !0, this.date = e, this.s = this.formatDate(this.date, \"utc\"), this.hV = stohex(this.s);\n }, this.getFreshValueHex = function() {\n return typeof this.date > \"u\" && typeof this.s > \"u\" && (this.date = /* @__PURE__ */ new Date(), this.s = this.formatDate(this.date, \"utc\"), this.hV = stohex(this.s)), this.hV;\n }, d !== void 0 && (d.str !== void 0 ? this.setString(d.str) : typeof d == \"string\" && d.match(/^[0-9]{12}Z$/) ? this.setString(d) : d.hex !== void 0 ? this.setStringHex(d.hex) : d.date !== void 0 && this.setByDate(d.date));\n};\nQe.lang.extend(fe.asn1.DERUTCTime, fe.asn1.DERAbstractTime);\nfe.asn1.DERGeneralizedTime = function(d) {\n fe.asn1.DERGeneralizedTime.superclass.constructor.call(this, d), this.hT = \"18\", this.withMillis = !1, this.setByDate = function(e) {\n this.hTLV = null, this.isModified = !0, this.date = e, this.s = this.formatDate(this.date, \"gen\", this.withMillis), this.hV = stohex(this.s);\n }, this.getFreshValueHex = function() {\n return this.date === void 0 && this.s === void 0 && (this.date = /* @__PURE__ */ new Date(), this.s = this.formatDate(this.date, \"gen\", this.withMillis), this.hV = stohex(this.s)), this.hV;\n }, d !== void 0 && (d.str !== void 0 ? this.setString(d.str) : typeof d == \"string\" && d.match(/^[0-9]{14}Z$/) ? this.setString(d) : d.hex !== void 0 ? this.setStringHex(d.hex) : d.date !== void 0 && this.setByDate(d.date), d.millis === !0 && (this.withMillis = !0));\n};\nQe.lang.extend(fe.asn1.DERGeneralizedTime, fe.asn1.DERAbstractTime);\nfe.asn1.DERSequence = function(d) {\n fe.asn1.DERSequence.superclass.constructor.call(this, d), this.hT = \"30\", this.getFreshValueHex = function() {\n for (var e = \"\", t = 0; t < this.asn1Array.length; t++) {\n var i = this.asn1Array[t];\n e += i.getEncodedHex();\n }\n return this.hV = e, this.hV;\n };\n};\nQe.lang.extend(fe.asn1.DERSequence, fe.asn1.DERAbstractStructured);\nfe.asn1.DERSet = function(d) {\n fe.asn1.DERSet.superclass.constructor.call(this, d), this.hT = \"31\", this.sortFlag = !0, this.getFreshValueHex = function() {\n for (var e = new Array(), t = 0; t < this.asn1Array.length; t++) {\n var i = this.asn1Array[t];\n e.push(i.getEncodedHex());\n }\n return this.sortFlag == !0 && e.sort(), this.hV = e.join(\"\"), this.hV;\n }, typeof d < \"u\" && typeof d.sortflag < \"u\" && d.sortflag == !1 && (this.sortFlag = !1);\n};\nQe.lang.extend(fe.asn1.DERSet, fe.asn1.DERAbstractStructured);\nfe.asn1.DERTaggedObject = function(d) {\n fe.asn1.DERTaggedObject.superclass.constructor.call(this), this.hT = \"a0\", this.hV = \"\", this.isExplicit = !0, this.asn1Object = null, this.setASN1Object = function(e, t, i) {\n this.hT = t, this.isExplicit = e, this.asn1Object = i, this.isExplicit ? (this.hV = this.asn1Object.getEncodedHex(), this.hTLV = null, this.isModified = !0) : (this.hV = null, this.hTLV = i.getEncodedHex(), this.hTLV = this.hTLV.replace(/^../, t), this.isModified = !1);\n }, this.getFreshValueHex = function() {\n return this.hV;\n }, typeof d < \"u\" && (typeof d.tag < \"u\" && (this.hT = d.tag), typeof d.explicit < \"u\" && (this.isExplicit = d.explicit), typeof d.obj < \"u\" && (this.asn1Object = d.obj, this.setASN1Object(this.isExplicit, this.hT, this.asn1Object)));\n};\nQe.lang.extend(fe.asn1.DERTaggedObject, fe.asn1.ASN1Object);\nclass Hi extends Fm {\n constructor(e) {\n super(), e && (typeof e == \"string\" ? this.parseKey(e) : (Hi.hasPrivateKeyProperty(e) || Hi.hasPublicKeyProperty(e)) && this.parsePropertiesFrom(e));\n }\n /**\n * Method to parse a pem encoded string containing both a public or private key.\n * The method will translate the pem encoded string in a der encoded string and\n * will parse private key and public key parameters. This method accepts public key\n * in the rsaencryption pkcs #1 format (oid: 1.2.840.113549.1.1.1).\n *\n * @todo Check how many rsa formats use the same format of pkcs #1.\n *\n * The format is defined as:\n * PublicKeyInfo ::= SEQUENCE {\n * algorithm AlgorithmIdentifier,\n * PublicKey BIT STRING\n * }\n * Where AlgorithmIdentifier is:\n * AlgorithmIdentifier ::= SEQUENCE {\n * algorithm OBJECT IDENTIFIER, the OID of the enc algorithm\n * parameters ANY DEFINED BY algorithm OPTIONAL (NULL for PKCS #1)\n * }\n * and PublicKey is a SEQUENCE encapsulated in a BIT STRING\n * RSAPublicKey ::= SEQUENCE {\n * modulus INTEGER, -- n\n * publicExponent INTEGER -- e\n * }\n * it's possible to examine the structure of the keys obtained from openssl using\n * an asn.1 dumper as the one used here to parse the components: http://lapo.it/asn1js/\n * @argument {string} pem the pem encoded string, can include the BEGIN/END header/footer\n * @private\n */\n parseKey(e) {\n try {\n let s = 0, n = 0;\n const a = /^\\s*(?:[0-9A-Fa-f][0-9A-Fa-f]\\s*)+$/.test(e) ? km.decode(e) : Ys.unarmor(e);\n let o = Gi.decode(a);\n if (o.sub.length === 3 && (o = o.sub[2].sub[0]), o.sub.length === 9) {\n s = o.sub[1].getHexStringValue(), this.n = Ke(s, 16), n = o.sub[2].getHexStringValue(), this.e = parseInt(n, 16);\n const c = o.sub[3].getHexStringValue();\n this.d = Ke(c, 16);\n const u = o.sub[4].getHexStringValue();\n this.p = Ke(u, 16);\n const f = o.sub[5].getHexStringValue();\n this.q = Ke(f, 16);\n const h = o.sub[6].getHexStringValue();\n this.dmp1 = Ke(h, 16);\n const l = o.sub[7].getHexStringValue();\n this.dmq1 = Ke(l, 16);\n const p = o.sub[8].getHexStringValue();\n this.coeff = Ke(p, 16);\n } else if (o.sub.length === 2)\n if (o.sub[0].sub) {\n var t = o.sub[1], i = t.sub[0];\n s = i.sub[0].getHexStringValue(), this.n = Ke(s, 16), n = i.sub[1].getHexStringValue(), this.e = parseInt(n, 16);\n } else\n s = o.sub[0].getHexStringValue(), this.n = Ke(s, 16), n = o.sub[1].getHexStringValue(), this.e = parseInt(n, 16);\n else\n return !1;\n return !0;\n } catch {\n return !1;\n }\n }\n /**\n * Translate rsa parameters in a hex encoded string representing the rsa key.\n *\n * The translation follow the ASN.1 notation :\n * RSAPrivateKey ::= SEQUENCE {\n * version Version,\n * modulus INTEGER, -- n\n * publicExponent INTEGER, -- e\n * privateExponent INTEGER, -- d\n * prime1 INTEGER, -- p\n * prime2 INTEGER, -- q\n * exponent1 INTEGER, -- d mod (p1)\n * exponent2 INTEGER, -- d mod (q-1)\n * coefficient INTEGER, -- (inverse of q) mod p\n * }\n * @returns {string} DER Encoded String representing the rsa private key\n * @private\n */\n getPrivateBaseKey() {\n const e = {\n array: [\n new fe.asn1.DERInteger({ int: 0 }),\n new fe.asn1.DERInteger({ bigint: this.n }),\n new fe.asn1.DERInteger({ int: this.e }),\n new fe.asn1.DERInteger({ bigint: this.d }),\n new fe.asn1.DERInteger({ bigint: this.p }),\n new fe.asn1.DERInteger({ bigint: this.q }),\n new fe.asn1.DERInteger({ bigint: this.dmp1 }),\n new fe.asn1.DERInteger({ bigint: this.dmq1 }),\n new fe.asn1.DERInteger({ bigint: this.coeff })\n ]\n };\n return new fe.asn1.DERSequence(e).getEncodedHex();\n }\n /**\n * base64 (pem) encoded version of the DER encoded representation\n * @returns {string} pem encoded representation without header and footer\n * @public\n */\n getPrivateBaseKeyB64() {\n return $n(this.getPrivateBaseKey());\n }\n /**\n * Translate rsa parameters in a hex encoded string representing the rsa public key.\n * The representation follow the ASN.1 notation :\n * PublicKeyInfo ::= SEQUENCE {\n * algorithm AlgorithmIdentifier,\n * PublicKey BIT STRING\n * }\n * Where AlgorithmIdentifier is:\n * AlgorithmIdentifier ::= SEQUENCE {\n * algorithm OBJECT IDENTIFIER, the OID of the enc algorithm\n * parameters ANY DEFINED BY algorithm OPTIONAL (NULL for PKCS #1)\n * }\n * and PublicKey is a SEQUENCE encapsulated in a BIT STRING\n * RSAPublicKey ::= SEQUENCE {\n * modulus INTEGER, -- n\n * publicExponent INTEGER -- e\n * }\n * @returns {string} DER Encoded String representing the rsa public key\n * @private\n */\n getPublicBaseKey() {\n const e = new fe.asn1.DERSequence({\n array: [\n new fe.asn1.DERObjectIdentifier({ oid: \"1.2.840.113549.1.1.1\" }),\n new fe.asn1.DERNull()\n ]\n }), t = new fe.asn1.DERSequence({\n array: [\n new fe.asn1.DERInteger({ bigint: this.n }),\n new fe.asn1.DERInteger({ int: this.e })\n ]\n }), i = new fe.asn1.DERBitString({\n hex: \"00\" + t.getEncodedHex()\n });\n return new fe.asn1.DERSequence({\n array: [e, i]\n }).getEncodedHex();\n }\n /**\n * base64 (pem) encoded version of the DER encoded representation\n * @returns {string} pem encoded representation without header and footer\n * @public\n */\n getPublicBaseKeyB64() {\n return $n(this.getPublicBaseKey());\n }\n /**\n * wrap the string in block of width chars. The default value for rsa keys is 64\n * characters.\n * @param {string} str the pem encoded string without header and footer\n * @param {Number} [width=64] - the length the string has to be wrapped at\n * @returns {string}\n * @private\n */\n static wordwrap(e, t) {\n if (t = t || 64, !e)\n return e;\n const i = \"(.{1,\" + t + `})( +|$\n?)|(.{1,` + t + \"})\";\n return e.match(RegExp(i, \"g\")).join(`\n`);\n }\n /**\n * Retrieve the pem encoded private key\n * @returns {string} the pem encoded private key with header/footer\n * @public\n */\n getPrivateKey() {\n let e = `-----BEGIN RSA PRIVATE KEY-----\n`;\n return e += Hi.wordwrap(this.getPrivateBaseKeyB64()) + `\n`, e += \"-----END RSA PRIVATE KEY-----\", e;\n }\n /**\n * Retrieve the pem encoded public key\n * @returns {string} the pem encoded public key with header/footer\n * @public\n */\n getPublicKey() {\n let e = `-----BEGIN PUBLIC KEY-----\n`;\n return e += Hi.wordwrap(this.getPublicBaseKeyB64()) + `\n`, e += \"-----END PUBLIC KEY-----\", e;\n }\n /**\n * Check if the object contains the necessary parameters to populate the rsa modulus\n * and public exponent parameters.\n * @param {object} [obj={}] - An object that may contain the two public key\n * parameters\n * @returns {boolean} true if the object contains both the modulus and the public exponent\n * properties (n and e)\n * @todo check for types of n and e. N should be a parseable bigInt object, E should\n * be a parseable integer number\n * @private\n */\n static hasPublicKeyProperty(e) {\n return e = e || {}, e.hasOwnProperty(\"n\") && e.hasOwnProperty(\"e\");\n }\n /**\n * Check if the object contains ALL the parameters of an RSA key.\n * @param {object} [obj={}] - An object that may contain nine rsa key\n * parameters\n * @returns {boolean} true if the object contains all the parameters needed\n * @todo check for types of the parameters all the parameters but the public exponent\n * should be parseable bigint objects, the public exponent should be a parseable integer number\n * @private\n */\n static hasPrivateKeyProperty(e) {\n return e = e || {}, e.hasOwnProperty(\"n\") && e.hasOwnProperty(\"e\") && e.hasOwnProperty(\"d\") && e.hasOwnProperty(\"p\") && e.hasOwnProperty(\"q\") && e.hasOwnProperty(\"dmp1\") && e.hasOwnProperty(\"dmq1\") && e.hasOwnProperty(\"coeff\");\n }\n /**\n * Parse the properties of obj in the current rsa object. Obj should AT LEAST\n * include the modulus and public exponent (n, e) parameters.\n * @param {object} obj - the object containing rsa parameters\n * @private\n */\n parsePropertiesFrom(e) {\n this.n = e.n, this.e = e.e, e.hasOwnProperty(\"d\") && (this.d = e.d, this.p = e.p, this.q = e.q, this.dmp1 = e.dmp1, this.dmq1 = e.dmq1, this.coeff = e.coeff);\n }\n}\nvar lc;\nconst zm = typeof Ce < \"u\" ? (lc = Ce.env) == null ? void 0 : lc.npm_package_version : void 0;\nclass Ou {\n constructor(e = {}) {\n e = e || {}, this.default_key_size = e.default_key_size ? parseInt(e.default_key_size, 10) : 1024, this.default_public_exponent = e.default_public_exponent || \"010001\", this.log = e.log || !1, this.key = null;\n }\n /**\n * Method to set the rsa key parameter (one method is enough to set both the public\n * and the private key, since the private key contains the public key paramenters)\n * Log a warning if logs are enabled\n * @param {Object|string} key the pem encoded string or an object (with or without header/footer)\n * @public\n */\n setKey(e) {\n this.log && this.key && console.warn(\"A key was already set, overriding existing.\"), this.key = new Hi(e);\n }\n /**\n * Proxy method for setKey, for api compatibility\n * @see setKey\n * @public\n */\n setPrivateKey(e) {\n this.setKey(e);\n }\n /**\n * Proxy method for setKey, for api compatibility\n * @see setKey\n * @public\n */\n setPublicKey(e) {\n this.setKey(e);\n }\n /**\n * Proxy method for RSAKey object's decrypt, decrypt the string using the private\n * components of the rsa key object. Note that if the object was not set will be created\n * on the fly (by the getKey method) using the parameters passed in the JSEncrypt constructor\n * @param {string} str base64 encoded crypted string to decrypt\n * @return {string} the decrypted string\n * @public\n */\n decrypt(e) {\n try {\n return this.getKey().decrypt(md(e));\n } catch {\n return !1;\n }\n }\n /**\n * Proxy method for RSAKey object's encrypt, encrypt the string using the public\n * components of the rsa key object. Note that if the object was not set will be created\n * on the fly (by the getKey method) using the parameters passed in the JSEncrypt constructor\n * @param {string} str the string to encrypt\n * @return {string} the encrypted string encoded in base64\n * @public\n */\n encrypt(e) {\n try {\n return $n(this.getKey().encrypt(e));\n } catch {\n return !1;\n }\n }\n /**\n * Proxy method for RSAKey object's sign.\n * @param {string} str the string to sign\n * @param {function} digestMethod hash method\n * @param {string} digestName the name of the hash algorithm\n * @return {string} the signature encoded in base64\n * @public\n */\n sign(e, t, i) {\n try {\n return $n(this.getKey().sign(e, t, i));\n } catch {\n return !1;\n }\n }\n /**\n * Proxy method for RSAKey object's verify.\n * @param {string} str the string to verify\n * @param {string} signature the signature encoded in base64 to compare the string to\n * @param {function} digestMethod hash method\n * @return {boolean} whether the data and signature match\n * @public\n */\n verify(e, t, i) {\n try {\n return this.getKey().verify(e, md(t), i);\n } catch {\n return !1;\n }\n }\n /**\n * Getter for the current JSEncryptRSAKey object. If it doesn't exists a new object\n * will be created and returned\n * @param {callback} [cb] the callback to be called if we want the key to be generated\n * in an async fashion\n * @returns {JSEncryptRSAKey} the JSEncryptRSAKey object\n * @public\n */\n getKey(e) {\n if (!this.key) {\n if (this.key = new Hi(), e && {}.toString.call(e) === \"[object Function]\") {\n this.key.generateAsync(this.default_key_size, this.default_public_exponent, e);\n return;\n }\n this.key.generate(this.default_key_size, this.default_public_exponent);\n }\n return this.key;\n }\n /**\n * Returns the pem encoded representation of the private key\n * If the key doesn't exists a new key will be created\n * @returns {string} pem encoded representation of the private key WITH header and footer\n * @public\n */\n getPrivateKey() {\n return this.getKey().getPrivateKey();\n }\n /**\n * Returns the pem encoded representation of the private key\n * If the key doesn't exists a new key will be created\n * @returns {string} pem encoded representation of the private key WITHOUT header and footer\n * @public\n */\n getPrivateKeyB64() {\n return this.getKey().getPrivateBaseKeyB64();\n }\n /**\n * Returns the pem encoded representation of the public key\n * If the key doesn't exists a new key will be created\n * @returns {string} pem encoded representation of the public key WITH header and footer\n * @public\n */\n getPublicKey() {\n return this.getKey().getPublicKey();\n }\n /**\n * Returns the pem encoded representation of the public key\n * If the key doesn't exists a new key will be created\n * @returns {string} pem encoded representation of the public key WITHOUT header and footer\n * @public\n */\n getPublicKeyB64() {\n return this.getKey().getPublicBaseKeyB64();\n }\n}\nOu.version = zm;\nfunction Zn(d, e, t) {\n const i = new Ou(), s = (r) => Ri.encode(t(r));\n i.setPrivateKey(e);\n const n = t.create().constructor.name.toLowerCase();\n return i.sign(d, s, n);\n}\nfunction Hm(d, e, t, i = !1, s = {}) {\n let n = (i ? \"RS\" : \"HS\") + t.outputLen * 8;\n s.alg && (n = s.alg.toUpperCase());\n const r = Object.assign({ alg: n, typ: \"JWT\" }, s);\n r.iat !== void 0 && (d.iat = r.iat, delete r.iat);\n const a = os(JSON.stringify(r)), o = os(JSON.stringify(d)), c = [a, o].join(\".\"), u = n.slice(0, 2);\n let f;\n if (u === \"HS\")\n f = os(lo(c, e, t, \"binary\"));\n else if (i || u === \"RS\")\n f = os(Uc(Zn(c, ai.encode(e), t)));\n else if (u === \"ES\") {\n const h = hu(c, ai.encode(e), ho, t), l = h.r.padStart(64, \"0\"), p = h.s.padStart(64, \"0\");\n f = os(Gc(l + p));\n }\n return [c, f].join(\".\");\n}\nconst Mn = BigInt(2 ** 32 - 1), Ea = BigInt(32);\nfunction Mu(d, e = !1) {\n return e ? { h: Number(d & Mn), l: Number(d >> Ea & Mn) } : { h: Number(d >> Ea & Mn) | 0, l: Number(d & Mn) | 0 };\n}\nfunction Wm(d, e = !1) {\n let t = new Uint32Array(d.length), i = new Uint32Array(d.length);\n for (let s = 0; s < d.length; s++) {\n const { h: n, l: r } = Mu(d[s], e);\n [t[s], i[s]] = [n, r];\n }\n return [t, i];\n}\nconst Ym = (d, e) => BigInt(d >>> 0) << Ea | BigInt(e >>> 0), Km = (d, e, t) => d >>> t, Xm = (d, e, t) => d << 32 - t | e >>> t, $m = (d, e, t) => d >>> t | e << 32 - t, Zm = (d, e, t) => d << 32 - t | e >>> t, Qm = (d, e, t) => d << 64 - t | e >>> t - 32, Jm = (d, e, t) => d >>> t - 32 | e << 64 - t, ey = (d, e) => e, ty = (d, e) => d, iy = (d, e, t) => d << t | e >>> 32 - t, sy = (d, e, t) => e << t | d >>> 32 - t, ny = (d, e, t) => e << t - 32 | d >>> 64 - t, ry = (d, e, t) => d << t - 32 | e >>> 64 - t;\nfunction ay(d, e, t, i) {\n const s = (e >>> 0) + (i >>> 0);\n return { h: d + t + (s / 2 ** 32 | 0) | 0, l: s | 0 };\n}\nconst oy = (d, e, t) => (d >>> 0) + (e >>> 0) + (t >>> 0), dy = (d, e, t, i) => e + t + i + (d / 2 ** 32 | 0) | 0, cy = (d, e, t, i) => (d >>> 0) + (e >>> 0) + (t >>> 0) + (i >>> 0), uy = (d, e, t, i, s) => e + t + i + s + (d / 2 ** 32 | 0) | 0, fy = (d, e, t, i, s) => (d >>> 0) + (e >>> 0) + (t >>> 0) + (i >>> 0) + (s >>> 0), hy = (d, e, t, i, s, n) => e + t + i + s + n + (d / 2 ** 32 | 0) | 0, Oe = {\n fromBig: Mu,\n split: Wm,\n toBig: Ym,\n shrSH: Km,\n shrSL: Xm,\n rotrSH: $m,\n rotrSL: Zm,\n rotrBH: Qm,\n rotrBL: Jm,\n rotr32H: ey,\n rotr32L: ty,\n rotlSH: iy,\n rotlSL: sy,\n rotlBH: ny,\n rotlBL: ry,\n add: ay,\n add3L: oy,\n add3H: dy,\n add4L: cy,\n add4H: uy,\n add5H: hy,\n add5L: fy\n}, [ly, py] = Oe.split([\n \"0x428a2f98d728ae22\",\n \"0x7137449123ef65cd\",\n \"0xb5c0fbcfec4d3b2f\",\n \"0xe9b5dba58189dbbc\",\n \"0x3956c25bf348b538\",\n \"0x59f111f1b605d019\",\n \"0x923f82a4af194f9b\",\n \"0xab1c5ed5da6d8118\",\n \"0xd807aa98a3030242\",\n \"0x12835b0145706fbe\",\n \"0x243185be4ee4b28c\",\n \"0x550c7dc3d5ffb4e2\",\n \"0x72be5d74f27b896f\",\n \"0x80deb1fe3b1696b1\",\n \"0x9bdc06a725c71235\",\n \"0xc19bf174cf692694\",\n \"0xe49b69c19ef14ad2\",\n \"0xefbe4786384f25e3\",\n \"0x0fc19dc68b8cd5b5\",\n \"0x240ca1cc77ac9c65\",\n \"0x2de92c6f592b0275\",\n \"0x4a7484aa6ea6e483\",\n \"0x5cb0a9dcbd41fbd4\",\n \"0x76f988da831153b5\",\n \"0x983e5152ee66dfab\",\n \"0xa831c66d2db43210\",\n \"0xb00327c898fb213f\",\n \"0xbf597fc7beef0ee4\",\n \"0xc6e00bf33da88fc2\",\n \"0xd5a79147930aa725\",\n \"0x06ca6351e003826f\",\n \"0x142929670a0e6e70\",\n \"0x27b70a8546d22ffc\",\n \"0x2e1b21385c26c926\",\n \"0x4d2c6dfc5ac42aed\",\n \"0x53380d139d95b3df\",\n \"0x650a73548baf63de\",\n \"0x766a0abb3c77b2a8\",\n \"0x81c2c92e47edaee6\",\n \"0x92722c851482353b\",\n \"0xa2bfe8a14cf10364\",\n \"0xa81a664bbc423001\",\n \"0xc24b8b70d0f89791\",\n \"0xc76c51a30654be30\",\n \"0xd192e819d6ef5218\",\n \"0xd69906245565a910\",\n \"0xf40e35855771202a\",\n \"0x106aa07032bbd1b8\",\n \"0x19a4c116b8d2d0c8\",\n \"0x1e376c085141ab53\",\n \"0x2748774cdf8eeb99\",\n \"0x34b0bcb5e19b48a8\",\n \"0x391c0cb3c5c95a63\",\n \"0x4ed8aa4ae3418acb\",\n \"0x5b9cca4f7763e373\",\n \"0x682e6ff3d6b2b8a3\",\n \"0x748f82ee5defb2fc\",\n \"0x78a5636f43172f60\",\n \"0x84c87814a1f0ab72\",\n \"0x8cc702081a6439ec\",\n \"0x90befffa23631e28\",\n \"0xa4506cebde82bde9\",\n \"0xbef9a3f7b2c67915\",\n \"0xc67178f2e372532b\",\n \"0xca273eceea26619c\",\n \"0xd186b8c721c0c207\",\n \"0xeada7dd6cde0eb1e\",\n \"0xf57d4f7fee6ed178\",\n \"0x06f067aa72176fba\",\n \"0x0a637dc5a2c898a6\",\n \"0x113f9804bef90dae\",\n \"0x1b710b35131c471b\",\n \"0x28db77f523047d84\",\n \"0x32caab7b40c72493\",\n \"0x3c9ebe0a15c9bebc\",\n \"0x431d67c49c100d4c\",\n \"0x4cc5d4becb3e42b6\",\n \"0x597f299cfc657e2a\",\n \"0x5fcb6fab3ad6faec\",\n \"0x6c44198c4a475817\"\n].map((d) => BigInt(d))), Si = new Uint32Array(80), Ti = new Uint32Array(80);\nclass wr extends io {\n constructor() {\n super(128, 64, 16, !1), this.Ah = 1779033703, this.Al = -205731576, this.Bh = -1150833019, this.Bl = -2067093701, this.Ch = 1013904242, this.Cl = -23791573, this.Dh = -1521486534, this.Dl = 1595750129, this.Eh = 1359893119, this.El = -1377402159, this.Fh = -1694144372, this.Fl = 725511199, this.Gh = 528734635, this.Gl = -79577749, this.Hh = 1541459225, this.Hl = 327033209;\n }\n // prettier-ignore\n get() {\n const { Ah: e, Al: t, Bh: i, Bl: s, Ch: n, Cl: r, Dh: a, Dl: o, Eh: c, El: u, Fh: f, Fl: h, Gh: l, Gl: p, Hh: m, Hl: y } = this;\n return [e, t, i, s, n, r, a, o, c, u, f, h, l, p, m, y];\n }\n // prettier-ignore\n set(e, t, i, s, n, r, a, o, c, u, f, h, l, p, m, y) {\n this.Ah = e | 0, this.Al = t | 0, this.Bh = i | 0, this.Bl = s | 0, this.Ch = n | 0, this.Cl = r | 0, this.Dh = a | 0, this.Dl = o | 0, this.Eh = c | 0, this.El = u | 0, this.Fh = f | 0, this.Fl = h | 0, this.Gh = l | 0, this.Gl = p | 0, this.Hh = m | 0, this.Hl = y | 0;\n }\n process(e, t) {\n for (let b = 0; b < 16; b++, t += 4)\n Si[b] = e.getUint32(t), Ti[b] = e.getUint32(t += 4);\n for (let b = 16; b < 80; b++) {\n const T = Si[b - 15] | 0, x = Ti[b - 15] | 0, v = Oe.rotrSH(T, x, 1) ^ Oe.rotrSH(T, x, 8) ^ Oe.shrSH(T, x, 7), _ = Oe.rotrSL(T, x, 1) ^ Oe.rotrSL(T, x, 8) ^ Oe.shrSL(T, x, 7), V = Si[b - 2] | 0, j = Ti[b - 2] | 0, G = Oe.rotrSH(V, j, 19) ^ Oe.rotrBH(V, j, 61) ^ Oe.shrSH(V, j, 6), W = Oe.rotrSL(V, j, 19) ^ Oe.rotrBL(V, j, 61) ^ Oe.shrSL(V, j, 6), B = Oe.add4L(_, W, Ti[b - 7], Ti[b - 16]), Q = Oe.add4H(B, v, G, Si[b - 7], Si[b - 16]);\n Si[b] = Q | 0, Ti[b] = B | 0;\n }\n let { Ah: i, Al: s, Bh: n, Bl: r, Ch: a, Cl: o, Dh: c, Dl: u, Eh: f, El: h, Fh: l, Fl: p, Gh: m, Gl: y, Hh: w, Hl: S } = this;\n for (let b = 0; b < 80; b++) {\n const T = Oe.rotrSH(f, h, 14) ^ Oe.rotrSH(f, h, 18) ^ Oe.rotrBH(f, h, 41), x = Oe.rotrSL(f, h, 14) ^ Oe.rotrSL(f, h, 18) ^ Oe.rotrBL(f, h, 41), v = f & l ^ ~f & m, _ = h & p ^ ~h & y, V = Oe.add5L(S, x, _, py[b], Ti[b]), j = Oe.add5H(V, w, T, v, ly[b], Si[b]), G = V | 0, W = Oe.rotrSH(i, s, 28) ^ Oe.rotrBH(i, s, 34) ^ Oe.rotrBH(i, s, 39), B = Oe.rotrSL(i, s, 28) ^ Oe.rotrBL(i, s, 34) ^ Oe.rotrBL(i, s, 39), Q = i & n ^ i & a ^ n & a, se = s & r ^ s & o ^ r & o;\n w = m | 0, S = y | 0, m = l | 0, y = p | 0, l = f | 0, p = h | 0, { h: f, l: h } = Oe.add(c | 0, u | 0, j | 0, G | 0), c = a | 0, u = o | 0, a = n | 0, o = r | 0, n = i | 0, r = s | 0;\n const $ = Oe.add3L(G, B, se);\n i = Oe.add3H($, j, W, Q), s = $ | 0;\n }\n ({ h: i, l: s } = Oe.add(this.Ah | 0, this.Al | 0, i | 0, s | 0)), { h: n, l: r } = Oe.add(this.Bh | 0, this.Bl | 0, n | 0, r | 0), { h: a, l: o } = Oe.add(this.Ch | 0, this.Cl | 0, a | 0, o | 0), { h: c, l: u } = Oe.add(this.Dh | 0, this.Dl | 0, c | 0, u | 0), { h: f, l: h } = Oe.add(this.Eh | 0, this.El | 0, f | 0, h | 0), { h: l, l: p } = Oe.add(this.Fh | 0, this.Fl | 0, l | 0, p | 0), { h: m, l: y } = Oe.add(this.Gh | 0, this.Gl | 0, m | 0, y | 0), { h: w, l: S } = Oe.add(this.Hh | 0, this.Hl | 0, w | 0, S | 0), this.set(i, s, n, r, a, o, c, u, f, h, l, p, m, y, w, S);\n }\n roundClean() {\n Si.fill(0), Ti.fill(0);\n }\n destroy() {\n this.buffer.fill(0), this.set(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);\n }\n}\nclass gy extends wr {\n constructor() {\n super(), this.Ah = -1942145080, this.Al = 424955298, this.Bh = 1944164710, this.Bl = -1982016298, this.Ch = 502970286, this.Cl = 855612546, this.Dh = 1738396948, this.Dl = 1479516111, this.Eh = 258812777, this.El = 2077511080, this.Fh = 2011393907, this.Fl = 79989058, this.Gh = 1067287976, this.Gl = 1780299464, this.Hh = 286451373, this.Hl = -1848208735, this.outputLen = 28;\n }\n}\nclass my extends wr {\n constructor() {\n super(), this.Ah = 573645204, this.Al = -64227540, this.Bh = -1621794909, this.Bl = -934517566, this.Ch = 596883563, this.Cl = 1867755857, this.Dh = -1774684391, this.Dl = 1497426621, this.Eh = -1775747358, this.El = -1467023389, this.Fh = -1101128155, this.Fl = 1401305490, this.Gh = 721525244, this.Gl = 746961066, this.Hh = 246885852, this.Hl = -2117784414, this.outputLen = 32;\n }\n}\nclass yy extends wr {\n constructor() {\n super(), this.Ah = -876896931, this.Al = -1056596264, this.Bh = 1654270250, this.Bl = 914150663, this.Ch = -1856437926, this.Cl = 812702999, this.Dh = 355462360, this.Dl = -150054599, this.Eh = 1731405415, this.El = -4191439, this.Fh = -1900787065, this.Fl = 1750603025, this.Gh = -619958771, this.Gl = 1694076839, this.Hh = 1203062813, this.Hl = -1090891868, this.outputLen = 48;\n }\n}\nconst Ss = Zi(() => new wr());\nZi(() => new gy());\nZi(() => new my());\nconst wy = Zi(() => new yy()), Jt = BigInt(0), Mt = BigInt(1), Cn = BigInt(2), by = BigInt(8);\nfunction Sy(d) {\n const e = ro(d);\n return Bi(d, {\n hash: \"function\",\n a: \"bigint\",\n d: \"bigint\",\n randomBytes: \"function\"\n }, {\n adjustScalarBytes: \"function\",\n domain: \"function\",\n uvRatio: \"function\",\n mapToCurve: \"function\"\n }), Object.freeze({ ...e });\n}\nfunction Io(d) {\n const e = Sy(d), { Fp: t, n: i, preHash: s, hash: n, randomBytes: r, nByteLength: a, h: o } = e, c = Cn ** BigInt(a * 8), u = t.create, f = e.uvRatio || ((N, L) => {\n try {\n return { isValid: !0, value: t.sqrt(N * t.inv(L)) };\n } catch {\n return { isValid: !1, value: Jt };\n }\n }), h = e.adjustScalarBytes || ((N) => N), l = e.domain || ((N, L, z) => {\n if (L.length || z)\n throw new Error(\"Contexts/pre-hash are not supported\");\n return N;\n }), p = (N) => typeof N == \"bigint\" && 0n < N, m = (N, L) => p(N) && p(L) && N < L, y = (N) => N === Jt || m(N, c);\n function w(N, L) {\n if (m(N, L))\n return N;\n throw new Error(`Expected valid scalar < ${L}, got ${typeof N} ${N}`);\n }\n function S(N) {\n return N === Jt ? N : w(N, i);\n }\n const b = /* @__PURE__ */ new Map();\n function T(N) {\n if (!(N instanceof x))\n throw new Error(\"ExtendedPoint expected\");\n }\n class x {\n constructor(L, z, K, R) {\n if (this.ex = L, this.ey = z, this.ez = K, this.et = R, !y(L))\n throw new Error(\"x required\");\n if (!y(z))\n throw new Error(\"y required\");\n if (!y(K))\n throw new Error(\"z required\");\n if (!y(R))\n throw new Error(\"t required\");\n }\n get x() {\n return this.toAffine().x;\n }\n get y() {\n return this.toAffine().y;\n }\n static fromAffine(L) {\n if (L instanceof x)\n throw new Error(\"extended point not allowed\");\n const { x: z, y: K } = L || {};\n if (!y(z) || !y(K))\n throw new Error(\"invalid affine point\");\n return new x(z, K, Mt, u(z * K));\n }\n static normalizeZ(L) {\n const z = t.invertBatch(L.map((K) => K.ez));\n return L.map((K, R) => K.toAffine(z[R])).map(x.fromAffine);\n }\n // \"Private method\", don't use it directly\n _setWindowSize(L) {\n this._WINDOW_SIZE = L, b.delete(this);\n }\n // Not required for fromHex(), which always creates valid points.\n // Could be useful for fromAffine().\n assertValidity() {\n const { a: L, d: z } = e;\n if (this.is0())\n throw new Error(\"bad point: ZERO\");\n const { ex: K, ey: R, ez: U, et: Y } = this, J = u(K * K), ae = u(R * R), A = u(U * U), M = u(A * A), q = u(J * L), H = u(A * u(q + ae)), le = u(M + u(z * u(J * ae)));\n if (H !== le)\n throw new Error(\"bad point: equation left != right (1)\");\n const oe = u(K * R), he = u(U * Y);\n if (oe !== he)\n throw new Error(\"bad point: equation left != right (2)\");\n }\n // Compare one point to another.\n equals(L) {\n T(L);\n const { ex: z, ey: K, ez: R } = this, { ex: U, ey: Y, ez: J } = L, ae = u(z * J), A = u(U * R), M = u(K * J), q = u(Y * R);\n return ae === A && M === q;\n }\n is0() {\n return this.equals(x.ZERO);\n }\n negate() {\n return new x(u(-this.ex), this.ey, this.ez, u(-this.et));\n }\n // Fast algo for doubling Extended Point.\n // https://hyperelliptic.org/EFD/g1p/auto-twisted-extended.html#doubling-dbl-2008-hwcd\n // Cost: 4M + 4S + 1*a + 6add + 1*2.\n double() {\n const { a: L } = e, { ex: z, ey: K, ez: R } = this, U = u(z * z), Y = u(K * K), J = u(Cn * u(R * R)), ae = u(L * U), A = z + K, M = u(u(A * A) - U - Y), q = ae + Y, H = q - J, le = ae - Y, oe = u(M * H), he = u(q * le), Ie = u(M * le), Pe = u(H * q);\n return new x(oe, he, Pe, Ie);\n }\n // Fast algo for adding 2 Extended Points.\n // https://hyperelliptic.org/EFD/g1p/auto-twisted-extended.html#addition-add-2008-hwcd\n // Cost: 9M + 1*a + 1*d + 7add.\n add(L) {\n T(L);\n const { a: z, d: K } = e, { ex: R, ey: U, ez: Y, et: J } = this, { ex: ae, ey: A, ez: M, et: q } = L;\n if (z === BigInt(-1)) {\n const Le = u((U - R) * (A + ae)), De = u((U + R) * (A - ae)), Je = u(De - Le);\n if (Je === Jt)\n return this.double();\n const nt = u(Y * Cn * q), ks = u(J * Cn * M), Es = ks + nt, Ns = De + Le, Qt = ks - nt, Ps = u(Es * Je), ln = u(Ns * Qt), _r = u(Es * Qt), pn = u(Je * Ns);\n return new x(Ps, ln, pn, _r);\n }\n const H = u(R * ae), le = u(U * A), oe = u(J * K * q), he = u(Y * M), Ie = u((R + U) * (ae + A) - H - le), Pe = he - oe, He = he + oe, bt = u(le - z * H), mt = u(Ie * Pe), ue = u(He * bt), Tt = u(Ie * bt), Ot = u(Pe * He);\n return new x(mt, ue, Ot, Tt);\n }\n subtract(L) {\n return this.add(L.negate());\n }\n wNAF(L) {\n return V.wNAFCached(this, b, L, x.normalizeZ);\n }\n // Constant-time multiplication.\n multiply(L) {\n const { p: z, f: K } = this.wNAF(w(L, i));\n return x.normalizeZ([z, K])[0];\n }\n // Non-constant-time multiplication. Uses double-and-add algorithm.\n // It's faster, but should only be used when you don't care about\n // an exposed private key e.g. sig verification.\n multiplyUnsafe(L) {\n let z = S(L);\n return z === Jt ? _ : this.equals(_) || z === Mt ? this : this.equals(v) ? this.wNAF(z).p : V.unsafeLadder(this, z);\n }\n // Checks if point is of small order.\n // If you add something to small order point, you will have \"dirty\"\n // point with torsion component.\n // Multiplies point by cofactor and checks if the result is 0.\n isSmallOrder() {\n return this.multiplyUnsafe(o).is0();\n }\n // Multiplies point by curve order and checks if the result is 0.\n // Returns `false` is the point is dirty.\n isTorsionFree() {\n return V.unsafeLadder(this, i).is0();\n }\n // Converts Extended point to default (x, y) coordinates.\n // Can accept precomputed Z^-1 - for example, from invertBatch.\n toAffine(L) {\n const { ex: z, ey: K, ez: R } = this, U = this.is0();\n L == null && (L = U ? by : t.inv(R));\n const Y = u(z * L), J = u(K * L), ae = u(R * L);\n if (U)\n return { x: Jt, y: Mt };\n if (ae !== Mt)\n throw new Error(\"invZ was invalid\");\n return { x: Y, y: J };\n }\n clearCofactor() {\n const { h: L } = e;\n return L === Mt ? this : this.multiplyUnsafe(L);\n }\n // Converts hash string or Uint8Array to Point.\n // Uses algo from RFC8032 5.1.3.\n static fromHex(L, z = !0) {\n const { d: K, a: R } = e, U = t.BYTES;\n L = Ne(\"pointHex\", L, U);\n const Y = L.slice(), J = L[U - 1];\n Y[U - 1] = J & -129;\n const ae = Wt(Y);\n ae === Jt || (z ? w(ae, t.ORDER) : w(ae, c));\n const A = u(ae * ae), M = u(A - Mt), q = u(K * A - R);\n let { isValid: H, value: le } = f(M, q);\n if (!H)\n throw new Error(\"Point.fromHex: invalid y coordinate\");\n const oe = (le & Mt) === Mt;\n return (J & 128) !== 0 !== oe && (le = u(-le)), x.fromAffine({ x: le, y: ae });\n }\n static fromPrivateKey(L) {\n return W(L).point;\n }\n toRawBytes() {\n const { x: L, y: z } = this.toAffine(), K = Kt(z, t.BYTES);\n return K[K.length - 1] |= L & Mt ? 128 : 0, K;\n }\n toHex() {\n return ki(this.toRawBytes());\n }\n }\n x.BASE = new x(e.Gx, e.Gy, Mt, u(e.Gx * e.Gy)), x.ZERO = new x(Jt, Mt, Mt, Jt);\n const { BASE: v, ZERO: _ } = x, V = Jc(x, a * 8);\n function j(N) {\n return _e(N, i);\n }\n function G(N) {\n return j(Wt(N));\n }\n function W(N) {\n const L = a;\n N = Ne(\"private key\", N, L);\n const z = Ne(\"hashed private key\", n(N), 2 * L), K = h(z.slice(0, L)), R = z.slice(L, 2 * L), U = G(K), Y = v.multiply(U), J = Y.toRawBytes();\n return { head: K, prefix: R, scalar: U, point: Y, pointBytes: J };\n }\n function B(N) {\n return W(N).pointBytes;\n }\n function Q(N = new Uint8Array(), ...L) {\n const z = ot(...L);\n return G(n(l(z, Ne(\"context\", N), !!s)));\n }\n function se(N, L, z) {\n N = Ne(\"message\", N), s && (N = s(N));\n const { prefix: K, scalar: R, pointBytes: U } = W(L), Y = Q(z, K, N), J = v.multiply(Y).toRawBytes(), ae = Q(z, J, U, N), A = j(Y + ae * R);\n S(A);\n const M = ot(J, Kt(A, t.BYTES));\n return Ne(\"result\", M, a * 2);\n }\n function $(N, L, z) {\n N = Ne(\"message\", N);\n const K = Ne(\"privKey\", L), R = Wt(K), U = v.multiply(j(R)).toRawBytes(), Y = U[31] & 128, J = Q(z, K, N), ae = v.multiply(J).toRawBytes(), M = Q(z, ae, U, N) * R, q = j(J + M);\n S(q);\n const H = Kt(q, t.BYTES);\n H[31] |= Y;\n const le = ot(ae, H);\n return Ne(\"result\", le, a * 2);\n }\n function te(N, L, z, K) {\n const R = t.BYTES;\n N = Ne(\"signature\", N, 2 * R), L = Ne(\"message\", L), s && (L = s(L));\n const U = x.fromHex(z, !1), Y = x.fromHex(N.slice(0, R), !1), J = Wt(N.slice(R, 2 * R)), ae = v.multiplyUnsafe(J), A = Q(K, Y.toRawBytes(), U.toRawBytes(), L);\n return Y.add(U.multiplyUnsafe(A)).subtract(ae).clearCofactor().equals(x.ZERO);\n }\n return v._setWindowSize(8), {\n CURVE: e,\n getPublicKey: B,\n sign: se,\n signModified: $,\n verify: te,\n ExtendedPoint: x,\n utils: {\n getExtendedPublicKey: W,\n // ed25519 private keys are uniform 32b. No need to check for modulo bias, like in secp256k1.\n randomPrivateKey: () => r(t.BYTES),\n /**\n * We're doing scalar multiplication (used in getPublicKey etc) with precomputed BASE_POINT\n * values. This slows down first getPublicKey() by milliseconds (see Speed section),\n * but allows to speed-up subsequent getPublicKey() calls up to 20x.\n * @param windowSize 2, 4, 8, 16\n */\n precompute(N = 8, L = x.BASE) {\n return L._setWindowSize(N), L.multiply(BigInt(3)), L;\n }\n }\n };\n}\nconst Vs = BigInt(0), Wr = BigInt(1);\nfunction Ty(d) {\n return Bi(d, {\n a: \"bigint\"\n }, {\n montgomeryBits: \"isSafeInteger\",\n nByteLength: \"isSafeInteger\",\n adjustScalarBytes: \"function\",\n domain: \"function\",\n powPminus2: \"function\",\n Gu: \"bigint\"\n }), Object.freeze({ ...d });\n}\nfunction Ay(d) {\n const e = Ty(d), { P: t } = e, i = (b) => _e(b, t), s = e.montgomeryBits, n = Math.ceil(s / 8), r = e.nByteLength, a = e.adjustScalarBytes || ((b) => b), o = e.powPminus2 || ((b) => Zc(b, t - BigInt(2), t));\n function c(b, T, x) {\n const v = i(b * (T - x));\n return T = i(T - v), x = i(x + v), [T, x];\n }\n function u(b) {\n if (typeof b == \"bigint\" && Vs <= b && b < t)\n return b;\n throw new Error(\"Expected valid scalar 0 < scalar < CURVE.P\");\n }\n const f = (e.a - BigInt(2)) / BigInt(4);\n function h(b, T) {\n const x = u(b), v = u(T), _ = x;\n let V = Wr, j = Vs, G = x, W = Wr, B = Vs, Q;\n for (let $ = BigInt(s - 1); $ >= Vs; $--) {\n const te = v >> $ & Wr;\n B ^= te, Q = c(B, V, G), V = Q[0], G = Q[1], Q = c(B, j, W), j = Q[0], W = Q[1], B = te;\n const E = V + j, N = i(E * E), L = V - j, z = i(L * L), K = N - z, R = G + W, U = G - W, Y = i(U * E), J = i(R * L), ae = Y + J, A = Y - J;\n G = i(ae * ae), W = i(_ * i(A * A)), V = i(N * z), j = i(K * (N + i(f * K)));\n }\n Q = c(B, V, G), V = Q[0], G = Q[1], Q = c(B, j, W), j = Q[0], W = Q[1];\n const se = o(j);\n return i(V * se);\n }\n function l(b) {\n return Kt(i(b), n);\n }\n function p(b) {\n const T = Ne(\"u coordinate\", b, n);\n return r === n && (T[r - 1] &= 127), Wt(T);\n }\n function m(b) {\n const T = Ne(\"scalar\", b);\n if (T.length !== n && T.length !== r)\n throw new Error(`Expected ${n} or ${r} bytes, got ${T.length}`);\n return Wt(a(T));\n }\n function y(b, T) {\n const x = p(T), v = m(b), _ = h(x, v);\n if (_ === Vs)\n throw new Error(\"Invalid private or public key received\");\n return l(_);\n }\n const w = l(e.Gu);\n function S(b) {\n return y(b, w);\n }\n return {\n scalarMult: y,\n scalarMultBase: S,\n getSharedSecret: (b, T) => y(b, T),\n getPublicKey: (b) => S(b),\n utils: { randomPrivateKey: () => e.randomBytes(e.nByteLength) },\n GuBytes: w\n };\n}\nconst Qs = BigInt(\"57896044618658097711785492504343953926634992332820282019728792003956564819949\"), Md = BigInt(\"19681161376707505956807079304988542015446066515923890162744021073123829784752\"), Iy = BigInt(0), si = BigInt(1), Qn = BigInt(2), Oy = BigInt(5), Cd = BigInt(10), My = BigInt(20), Cy = BigInt(40), xd = BigInt(80);\nfunction Cu(d) {\n const e = Qs, i = d * d % e * d % e, s = Ge(i, Qn, e) * i % e, n = Ge(s, si, e) * d % e, r = Ge(n, Oy, e) * n % e, a = Ge(r, Cd, e) * r % e, o = Ge(a, My, e) * a % e, c = Ge(o, Cy, e) * o % e, u = Ge(c, xd, e) * c % e, f = Ge(u, xd, e) * c % e, h = Ge(f, Cd, e) * r % e;\n return { pow_p_5_8: Ge(h, Qn, e) * d % e, b2: i };\n}\nfunction xu(d) {\n return d[0] &= 248, d[31] &= 127, d[31] |= 64, d;\n}\nfunction Oo(d, e) {\n const t = Qs, i = _e(e * e * e, t), s = _e(i * i * e, t), n = Cu(d * s).pow_p_5_8;\n let r = _e(d * i * n, t);\n const a = _e(e * r * r, t), o = r, c = _e(r * Md, t), u = a === d, f = a === _e(-d, t), h = a === _e(-d * Md, t);\n return u && (r = o), (f || h) && (r = c), Ai(r, t) && (r = _e(-r, t)), { isValid: u || f, value: r };\n}\nconst me = no(Qs, void 0, !0), Mo = {\n // Param: a\n a: BigInt(-1),\n // Equal to -121665/121666 over finite field.\n // Negative number is P - number, and division is invert(number, P)\n d: BigInt(\"37095705934669439343138083508754565189542113879843219016388785533085940283555\"),\n // Finite field 𝔽p over which we'll do calculations; 2n ** 255n - 19n\n Fp: me,\n // Subgroup order: how many points ed25519 has\n // 2n ** 252n + 27742317777372353535851937790883648493n;\n n: BigInt(\"7237005577332262213973186563042994240857116359379907606001950938285454250989\"),\n // Cofactor\n h: BigInt(8),\n // Base point (x, y) aka generator point\n Gx: BigInt(\"15112221349535400772501151409588531511454012693041857206046113283949847762202\"),\n Gy: BigInt(\"46316835694926478169428394003475163141307993866256225615783033603165251855960\"),\n hash: Ss,\n randomBytes: hr,\n adjustScalarBytes: xu,\n // dom2\n // Ratio of u to v. Allows us to combine inversion and square root. Uses algo from RFC8032 5.1.3.\n // Constant-time, u/√v\n uvRatio: Oo\n}, at = Io(Mo);\nfunction vu(d, e, t) {\n if (e.length > 255)\n throw new Error(\"Context is too big\");\n return Wc(Hc(\"SigEd25519 no Ed25519 collisions\"), new Uint8Array([t ? 1 : 0, e.length]), e, d);\n}\nIo({ ...Mo, domain: vu });\nIo({\n ...Mo,\n domain: vu,\n preHash: Ss\n});\nAy({\n P: Qs,\n a: BigInt(486662),\n montgomeryBits: 255,\n nByteLength: 32,\n Gu: BigInt(9),\n powPminus2: (d) => {\n const e = Qs, { pow_p_5_8: t, b2: i } = Cu(d);\n return _e(Ge(t, BigInt(3), e) * i, e);\n },\n adjustScalarBytes: xu,\n randomBytes: hr\n});\nconst xy = (me.ORDER + BigInt(3)) / BigInt(8), vy = me.pow(Qn, xy), vd = me.sqrt(me.neg(me.ONE)), ky = (me.ORDER - BigInt(5)) / BigInt(8), kd = BigInt(486662);\nfunction Ey(d) {\n let e = me.sqr(d);\n e = me.mul(e, Qn);\n let t = me.add(e, me.ONE), i = me.neg(kd), s = me.sqr(t), n = me.mul(s, t), r = me.mul(e, kd);\n r = me.mul(r, i), r = me.add(r, s), r = me.mul(r, i);\n let a = me.sqr(n);\n s = me.sqr(a), a = me.mul(a, n), a = me.mul(a, r), s = me.mul(s, a);\n let o = me.pow(s, ky);\n o = me.mul(o, a);\n let c = me.mul(o, vd);\n s = me.sqr(o), s = me.mul(s, n);\n let u = me.eql(s, r), f = me.cmov(c, o, u), h = me.mul(i, e), l = me.mul(o, d);\n l = me.mul(l, vy);\n let p = me.mul(l, vd), m = me.mul(r, e);\n s = me.sqr(l), s = me.mul(s, n);\n let y = me.eql(s, m), w = me.cmov(p, l, y);\n s = me.sqr(f), s = me.mul(s, n);\n let S = me.eql(s, r), b = me.cmov(h, i, S), T = me.cmov(w, f, S), x = me.isOdd(T);\n return T = me.cmov(T, me.neg(T), S !== x), { xMn: b, xMd: t, yMn: T, yMd: 1n };\n}\nconst Ny = kp(me, me.neg(BigInt(486664)));\nfunction Py(d) {\n const { xMn: e, xMd: t, yMn: i, yMd: s } = Ey(d);\n let n = me.mul(e, s);\n n = me.mul(n, Ny);\n let r = me.mul(t, i), a = me.sub(e, t), o = me.add(e, t), c = me.mul(r, o), u = me.eql(c, me.ZERO);\n n = me.cmov(n, me.ZERO, u), r = me.cmov(r, me.ONE, u), a = me.cmov(a, me.ONE, u), o = me.cmov(o, me.ONE, u);\n const f = me.invertBatch([r, o]);\n return { x: me.mul(n, f[0]), y: me.mul(a, f[1]) };\n}\noo(at.ExtendedPoint, (d) => Py(d[0]), {\n DST: \"edwards25519_XMD:SHA-512_ELL2_RO_\",\n encodeDST: \"edwards25519_XMD:SHA-512_ELL2_NU_\",\n p: me.ORDER,\n m: 1,\n k: 128,\n expand: \"xmd\",\n hash: Ss\n});\nfunction Yr(d) {\n if (!(d instanceof At))\n throw new Error(\"RistrettoPoint expected\");\n}\nconst Na = BigInt(\"19681161376707505956807079304988542015446066515923890162744021073123829784752\"), _y = BigInt(\"25063068953384623474111414158702152701244531502492656460079210482610430750235\"), Ly = BigInt(\"54469307008909316920995813868745141605393597292927456921205312896311721017578\"), Dy = BigInt(\"1159843021668779879193775521855586647937357759715417654439879720876111806838\"), Ry = BigInt(\"40440834346308536858101042469323190826248399146238708352240133220865137265952\"), Ed = (d) => Oo(si, d), By = BigInt(\"0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\"), Kr = (d) => at.CURVE.Fp.create(Wt(d) & By);\nfunction Nd(d) {\n const { d: e } = at.CURVE, t = at.CURVE.Fp.ORDER, i = at.CURVE.Fp.create, s = i(Na * d * d), n = i((s + si) * Dy);\n let r = BigInt(-1);\n const a = i((r - e * s) * i(s + e));\n let { isValid: o, value: c } = Oo(n, a), u = i(c * d);\n Ai(u, t) || (u = i(-u)), o || (c = u), o || (r = s);\n const f = i(r * (s - si) * Ry - a), h = c * c, l = i((c + c) * a), p = i(f * _y), m = i(si - h), y = i(si + h);\n return new at.ExtendedPoint(i(l * y), i(m * p), i(p * y), i(l * m));\n}\nclass At {\n // Private property to discourage combining ExtendedPoint + RistrettoPoint\n // Always use Ristretto encoding/decoding instead.\n constructor(e) {\n this.ep = e;\n }\n static fromAffine(e) {\n return new At(at.ExtendedPoint.fromAffine(e));\n }\n /**\n * Takes uniform output of 64-bit hash function like sha512 and converts it to `RistrettoPoint`.\n * The hash-to-group operation applies Elligator twice and adds the results.\n * **Note:** this is one-way map, there is no conversion from point to hash.\n * https://ristretto.group/formulas/elligator.html\n * @param hex 64-bit output of a hash function\n */\n static hashToCurve(e) {\n e = Ne(\"ristrettoHash\", e, 64);\n const t = Kr(e.slice(0, 32)), i = Nd(t), s = Kr(e.slice(32, 64)), n = Nd(s);\n return new At(i.add(n));\n }\n /**\n * Converts ristretto-encoded string to ristretto point.\n * https://ristretto.group/formulas/decoding.html\n * @param hex Ristretto-encoded 32 bytes. Not every 32-byte string is valid ristretto encoding\n */\n static fromHex(e) {\n e = Ne(\"ristrettoHex\", e, 32);\n const { a: t, d: i } = at.CURVE, s = at.CURVE.Fp.ORDER, n = at.CURVE.Fp.create, r = \"RistrettoPoint.fromHex: the hex is not valid encoding of RistrettoPoint\", a = Kr(e);\n if (!Lc(Kt(a, 32), e) || Ai(a, s))\n throw new Error(r);\n const o = n(a * a), c = n(si + t * o), u = n(si - t * o), f = n(c * c), h = n(u * u), l = n(t * i * f - h), { isValid: p, value: m } = Ed(n(l * h)), y = n(m * u), w = n(m * y * l);\n let S = n((a + a) * y);\n Ai(S, s) && (S = n(-S));\n const b = n(c * w), T = n(S * b);\n if (!p || Ai(T, s) || b === Iy)\n throw new Error(r);\n return new At(new at.ExtendedPoint(S, b, si, T));\n }\n /**\n * Encodes ristretto point to Uint8Array.\n * https://ristretto.group/formulas/encoding.html\n */\n toRawBytes() {\n let { ex: e, ey: t, ez: i, et: s } = this.ep;\n const n = at.CURVE.Fp.ORDER, r = at.CURVE.Fp.create, a = r(r(i + t) * r(i - t)), o = r(e * t), c = r(o * o), { value: u } = Ed(r(a * c)), f = r(u * a), h = r(u * o), l = r(f * h * s);\n let p;\n if (Ai(s * l, n)) {\n let y = r(t * Na), w = r(e * Na);\n e = y, t = w, p = r(f * Ly);\n } else\n p = h;\n Ai(e * l, n) && (t = r(-t));\n let m = r((i - t) * p);\n return Ai(m, n) && (m = r(-m)), Kt(m, 32);\n }\n toHex() {\n return ki(this.toRawBytes());\n }\n toString() {\n return this.toHex();\n }\n // Compare one point to another.\n equals(e) {\n Yr(e);\n const { ex: t, ey: i } = this.ep, { ex: s, ey: n } = e.ep, r = at.CURVE.Fp.create, a = r(t * n) === r(i * s), o = r(i * n) === r(t * s);\n return a || o;\n }\n add(e) {\n return Yr(e), new At(this.ep.add(e.ep));\n }\n subtract(e) {\n return Yr(e), new At(this.ep.subtract(e.ep));\n }\n multiply(e) {\n return new At(this.ep.multiply(e));\n }\n multiplyUnsafe(e) {\n return new At(this.ep.multiplyUnsafe(e));\n }\n}\nAt.BASE = new At(at.ExtendedPoint.BASE);\nAt.ZERO = new At(at.ExtendedPoint.ZERO);\nclass Vy extends vm {\n describe() {\n return this.deepExtend(super.describe(), {\n id: \"binance\",\n name: \"Binance\",\n countries: [\"JP\", \"MT\"],\n rateLimit: 50,\n certified: !0,\n pro: !0,\n // new metainfo2 interface\n has: {\n CORS: void 0,\n spot: !0,\n margin: !0,\n swap: !0,\n future: !0,\n option: !0,\n cancelAllOrders: !0,\n cancelOrder: !0,\n cancelOrders: !0,\n createDepositAddress: !1,\n createMarketBuyOrderWithCost: !0,\n createMarketOrderWithCost: !0,\n createMarketSellOrderWithCost: !0,\n createOrder: !0,\n createOrders: !0,\n createTakeProfitOrder: !0,\n createTrailingPercentOrder: !0,\n createTriggerOrder: !0,\n editOrder: !0,\n fetchAccounts: void 0,\n fetchBalance: !0,\n fetchCanceledOrders: \"emulated\",\n fetchClosedOrder: !1,\n fetchClosedOrders: \"emulated\",\n fetchCurrencies: !0,\n fetchDeposit: !1,\n fetchDepositAddress: !0,\n fetchDepositAddresses: !1,\n fetchDepositAddressesByNetwork: !1,\n fetchDeposits: !0,\n fetchDepositsWithdrawals: !1,\n fetchDepositWithdrawFee: \"emulated\",\n fetchDepositWithdrawFees: !0,\n fetchLedger: !0,\n fetchMarkets: !0,\n fetchMyTrades: !0,\n fetchOHLCV: !0,\n fetchOpenOrder: !1,\n fetchOpenOrders: !0,\n fetchOrder: !0,\n fetchOrderBook: !0,\n fetchOrderBooks: !1,\n fetchOrders: !0,\n fetchOrderTrades: !0,\n fetchPosition: !0,\n fetchPositions: !0,\n fetchPositionsRisk: !0,\n fetchStatus: !0,\n fetchTicker: !0,\n fetchTickers: !0,\n fetchTime: !0,\n fetchTrades: !0,\n fetchTradingFee: !0,\n fetchTradingFees: !0,\n fetchTradingLimits: void 0,\n fetchTransactionFee: void 0,\n fetchTransactionFees: !0,\n fetchTransactions: !1,\n fetchTransfers: !0,\n fetchWithdrawAddresses: !1,\n fetchWithdrawal: !1,\n fetchWithdrawals: !0,\n fetchWithdrawalWhitelist: !1,\n transfer: !0,\n withdraw: !0\n },\n timeframes: {\n \"1s\": \"1s\",\n \"1m\": \"1m\",\n \"3m\": \"3m\",\n \"5m\": \"5m\",\n \"15m\": \"15m\",\n \"30m\": \"30m\",\n \"1h\": \"1h\",\n \"2h\": \"2h\",\n \"4h\": \"4h\",\n \"6h\": \"6h\",\n \"8h\": \"8h\",\n \"12h\": \"12h\",\n \"1d\": \"1d\",\n \"3d\": \"3d\",\n \"1w\": \"1w\",\n \"1M\": \"1M\"\n },\n urls: {\n logo: \"https://user-images.githubusercontent.com/1294454/29604020-d5483cdc-87ee-11e7-94c7-d1a8d9169293.jpg\",\n test: {\n dapiPublic: \"https://testnet.binancefuture.com/dapi/v1\",\n dapiPrivate: \"https://testnet.binancefuture.com/dapi/v1\",\n dapiPrivateV2: \"https://testnet.binancefuture.com/dapi/v2\",\n fapiPublic: \"https://testnet.binancefuture.com/fapi/v1\",\n fapiPublicV2: \"https://testnet.binancefuture.com/fapi/v2\",\n fapiPrivate: \"https://testnet.binancefuture.com/fapi/v1\",\n fapiPrivateV2: \"https://testnet.binancefuture.com/fapi/v2\",\n public: \"https://testnet.binance.vision/api/v3\",\n private: \"https://testnet.binance.vision/api/v3\",\n v1: \"https://testnet.binance.vision/api/v1\"\n },\n api: {\n sapi: \"https://api.binance.com/sapi/v1\",\n sapiV2: \"https://api.binance.com/sapi/v2\",\n sapiV3: \"https://api.binance.com/sapi/v3\",\n sapiV4: \"https://api.binance.com/sapi/v4\",\n dapiPublic: \"https://dapi.binance.com/dapi/v1\",\n dapiPrivate: \"https://dapi.binance.com/dapi/v1\",\n eapiPublic: \"https://eapi.binance.com/eapi/v1\",\n eapiPrivate: \"https://eapi.binance.com/eapi/v1\",\n dapiPrivateV2: \"https://dapi.binance.com/dapi/v2\",\n dapiData: \"https://dapi.binance.com/futures/data\",\n fapiPublic: \"https://fapi.binance.com/fapi/v1\",\n fapiPublicV2: \"https://fapi.binance.com/fapi/v2\",\n fapiPrivate: \"https://fapi.binance.com/fapi/v1\",\n fapiData: \"https://fapi.binance.com/futures/data\",\n fapiPrivateV2: \"https://fapi.binance.com/fapi/v2\",\n public: \"https://api.binance.com/api/v3\",\n private: \"https://api.binance.com/api/v3\",\n v1: \"https://api.binance.com/api/v1\",\n papi: \"https://papi.binance.com/papi/v1\"\n },\n www: \"https://www.binance.com\",\n referral: {\n // https://accounts.binance.com/en/register?ref=D7YA7CLY - I removed the code for now, because CWS is blocking until we explain our affiliate program to our users\n url: \"https://accounts.binance.com/en/register\",\n discount: 0.1\n },\n doc: [\n \"https://binance-docs.github.io/apidocs/spot/en\"\n ],\n api_management: \"https://www.binance.com/en/usercenter/settings/api-management\",\n fees: \"https://www.binance.com/en/fee/schedule\"\n },\n api: {\n // the API structure below will need 3-layer apidefs\n sapi: {\n // IP (sapi) request rate limit of 12 000 per minute\n // 1 IP (sapi) => cost = 0.1 => (1000 / (50 * 0.1)) * 60 = 12000\n // 10 IP (sapi) => cost = 1\n // UID (sapi) request rate limit of 180 000 per minute\n // 1 UID (sapi) => cost = 0.006667 => (1000 / (50 * 0.006667)) * 60 = 180000\n get: {\n \"system/status\": 0.1,\n // these endpoints require this.apiKey\n accountSnapshot: 240,\n \"margin/asset\": 1,\n \"margin/pair\": 1,\n \"margin/allAssets\": 0.1,\n \"margin/allPairs\": 0.1,\n \"margin/priceIndex\": 1,\n // these endpoints require this.apiKey + this.secret\n \"spot/delist-schedule\": 10,\n \"asset/assetDividend\": 1,\n \"asset/dribblet\": 0.1,\n \"asset/transfer\": 0.1,\n \"asset/assetDetail\": 0.1,\n \"asset/tradeFee\": 0.1,\n \"asset/ledger-transfer/cloud-mining/queryByPage\": 4.0002,\n \"asset/convert-transfer/queryByPage\": 0.033335,\n \"asset/wallet/balance\": 6,\n \"asset/custody/transfer-history\": 6,\n \"margin/borrow-repay\": 1,\n \"margin/loan\": 1,\n \"margin/repay\": 1,\n \"margin/account\": 1,\n \"margin/transfer\": 0.1,\n \"margin/interestHistory\": 0.1,\n \"margin/forceLiquidationRec\": 0.1,\n \"margin/order\": 1,\n \"margin/openOrders\": 1,\n \"margin/allOrders\": 20,\n \"margin/myTrades\": 1,\n \"margin/maxBorrowable\": 5,\n \"margin/maxTransferable\": 5,\n \"margin/tradeCoeff\": 1,\n \"margin/isolated/transfer\": 0.1,\n \"margin/isolated/account\": 1,\n \"margin/isolated/pair\": 1,\n \"margin/isolated/allPairs\": 1,\n \"margin/isolated/accountLimit\": 0.1,\n \"margin/interestRateHistory\": 0.1,\n \"margin/orderList\": 1,\n \"margin/allOrderList\": 20,\n \"margin/openOrderList\": 1,\n \"margin/crossMarginData\": { cost: 0.1, noCoin: 0.5 },\n \"margin/isolatedMarginData\": { cost: 0.1, noCoin: 1 },\n \"margin/isolatedMarginTier\": 0.1,\n \"margin/rateLimit/order\": 2,\n \"margin/dribblet\": 0.1,\n \"margin/dust\": 20.001,\n \"margin/crossMarginCollateralRatio\": 10,\n \"margin/exchange-small-liability\": 0.6667,\n \"margin/exchange-small-liability-history\": 0.6667,\n \"margin/next-hourly-interest-rate\": 0.6667,\n \"margin/capital-flow\": 10,\n \"margin/delist-schedule\": 10,\n \"margin/available-inventory\": 0.3334,\n \"margin/leverageBracket\": 0.1,\n \"loan/vip/loanable/data\": 40,\n \"loan/vip/collateral/data\": 40,\n \"loan/vip/request/data\": 2.6668,\n \"loan/vip/request/interestRate\": 2.6668,\n \"loan/income\": 40.002,\n \"loan/ongoing/orders\": 40,\n \"loan/ltv/adjustment/history\": 40,\n \"loan/borrow/history\": 40,\n \"loan/repay/history\": 40,\n \"loan/loanable/data\": 40,\n \"loan/collateral/data\": 40,\n \"loan/repay/collateral/rate\": 600,\n \"loan/flexible/ongoing/orders\": 30,\n \"loan/flexible/borrow/history\": 40,\n \"loan/flexible/repay/history\": 40,\n \"loan/flexible/ltv/adjustment/history\": 40,\n \"loan/flexible/loanable/data\": 40,\n \"loan/flexible/collateral/data\": 40,\n \"loan/vip/ongoing/orders\": 40,\n \"loan/vip/repay/history\": 40,\n \"loan/vip/collateral/account\": 600,\n \"fiat/orders\": 600.03,\n \"fiat/payments\": 0.1,\n \"futures/transfer\": 1,\n \"futures/histDataLink\": 0.1,\n \"rebate/taxQuery\": 80.004,\n // https://binance-docs.github.io/apidocs/spot/en/#withdraw-sapi\n \"capital/config/getall\": 1,\n \"capital/deposit/address\": 1,\n \"capital/deposit/address/list\": 1,\n \"capital/deposit/hisrec\": 0.1,\n \"capital/deposit/subAddress\": 0.1,\n \"capital/deposit/subHisrec\": 0.1,\n \"capital/withdraw/history\": 2,\n \"capital/withdraw/address/list\": 1,\n \"capital/contract/convertible-coins\": 4.0002,\n \"convert/tradeFlow\": 20.001,\n \"convert/exchngeInfo\": 50,\n \"convert/assetInfo\": 10,\n \"convert/orderStatus\": 0.6667,\n \"convert/limit/queryOpenOrders\": 20.001,\n \"account/status\": 0.1,\n \"account/apiTradingStatus\": 0.1,\n \"account/apiRestrictions/ipRestriction\": 0.1,\n bnbBurn: 0.1,\n \"sub-account/futures/account\": 1,\n \"sub-account/futures/accountSummary\": 0.1,\n \"sub-account/futures/positionRisk\": 1,\n \"sub-account/futures/internalTransfer\": 0.1,\n \"sub-account/list\": 0.1,\n \"sub-account/margin/account\": 1,\n \"sub-account/margin/accountSummary\": 1,\n \"sub-account/spotSummary\": 0.1,\n \"sub-account/status\": 1,\n \"sub-account/sub/transfer/history\": 0.1,\n \"sub-account/transfer/subUserHistory\": 0.1,\n \"sub-account/universalTransfer\": 0.1,\n \"sub-account/apiRestrictions/ipRestriction/thirdPartyList\": 1,\n \"sub-account/transaction-statistics\": 0.40002,\n \"sub-account/subAccountApi/ipRestriction\": 20.001,\n \"managed-subaccount/asset\": 0.1,\n \"managed-subaccount/accountSnapshot\": 240,\n \"managed-subaccount/queryTransLogForInvestor\": 0.1,\n \"managed-subaccount/queryTransLogForTradeParent\": 0.40002,\n \"managed-subaccount/fetch-future-asset\": 0.40002,\n \"managed-subaccount/marginAsset\": 0.1,\n \"managed-subaccount/info\": 0.40002,\n \"managed-subaccount/deposit/address\": 6667e-6,\n \"managed-subaccount/query-trans-log\": 0.40002,\n // lending endpoints\n \"lending/project/list\": 0.1,\n \"lending/project/position/list\": 0.1,\n // eth-staking\n \"eth-staking/eth/history/stakingHistory\": 15,\n \"eth-staking/eth/history/redemptionHistory\": 15,\n \"eth-staking/eth/history/rewardsHistory\": 15,\n \"eth-staking/eth/quota\": 15,\n \"eth-staking/eth/history/rateHistory\": 15,\n \"eth-staking/account\": 15,\n \"eth-staking/wbeth/history/wrapHistory\": 15,\n \"eth-staking/wbeth/history/unwrapHistory\": 15,\n \"eth-staking/eth/history/wbethRewardsHistory\": 15,\n // mining endpoints\n \"mining/pub/algoList\": 0.1,\n \"mining/pub/coinList\": 0.1,\n \"mining/worker/detail\": 0.5,\n \"mining/worker/list\": 0.5,\n \"mining/payment/list\": 0.5,\n \"mining/statistics/user/status\": 0.5,\n \"mining/statistics/user/list\": 0.5,\n \"mining/payment/uid\": 0.5,\n // liquid swap endpoints\n \"bswap/pools\": 0.1,\n \"bswap/liquidity\": { cost: 0.1, noPoolId: 1 },\n \"bswap/liquidityOps\": 20.001,\n \"bswap/quote\": 1.00005,\n \"bswap/swap\": 20.001,\n \"bswap/poolConfigure\": 1.00005,\n \"bswap/addLiquidityPreview\": 1.00005,\n \"bswap/removeLiquidityPreview\": 1.00005,\n \"bswap/unclaimedRewards\": 6.667,\n \"bswap/claimedHistory\": 6.667,\n // leveraged token endpoints\n \"blvt/tokenInfo\": 0.1,\n \"blvt/subscribe/record\": 0.1,\n \"blvt/redeem/record\": 0.1,\n \"blvt/userLimit\": 0.1,\n // broker api TODO (NOT IN DOCS)\n \"apiReferral/ifNewUser\": 1,\n \"apiReferral/customization\": 1,\n \"apiReferral/userCustomization\": 1,\n \"apiReferral/rebate/recentRecord\": 1,\n \"apiReferral/rebate/historicalRecord\": 1,\n \"apiReferral/kickback/recentRecord\": 1,\n \"apiReferral/kickback/historicalRecord\": 1,\n // brokerage API TODO https://binance-docs.github.io/Brokerage-API/General/ does not state ratelimits\n \"broker/subAccountApi\": 1,\n \"broker/subAccount\": 1,\n \"broker/subAccountApi/commission/futures\": 1,\n \"broker/subAccountApi/commission/coinFutures\": 1,\n \"broker/info\": 1,\n \"broker/transfer\": 1,\n \"broker/transfer/futures\": 1,\n \"broker/rebate/recentRecord\": 1,\n \"broker/rebate/historicalRecord\": 1,\n \"broker/subAccount/bnbBurn/status\": 1,\n \"broker/subAccount/depositHist\": 1,\n \"broker/subAccount/spotSummary\": 1,\n \"broker/subAccount/marginSummary\": 1,\n \"broker/subAccount/futuresSummary\": 1,\n \"broker/rebate/futures/recentRecord\": 1,\n \"broker/subAccountApi/ipRestriction\": 1,\n \"broker/universalTransfer\": 1,\n // v2 not supported yet\n // GET /sapi/v2/broker/subAccount/futuresSummary\n \"account/apiRestrictions\": 0.1,\n // c2c / p2p\n \"c2c/orderMatch/listUserOrderHistory\": 0.1,\n // nft endpoints\n \"nft/history/transactions\": 20.001,\n \"nft/history/deposit\": 20.001,\n \"nft/history/withdraw\": 20.001,\n \"nft/user/getAsset\": 20.001,\n \"pay/transactions\": 20.001,\n \"giftcard/verify\": 0.1,\n \"giftcard/cryptography/rsa-public-key\": 0.1,\n \"giftcard/buyCode/token-limit\": 0.1,\n \"algo/spot/openOrders\": 0.1,\n \"algo/spot/historicalOrders\": 0.1,\n \"algo/spot/subOrders\": 0.1,\n \"algo/futures/openOrders\": 0.1,\n \"algo/futures/historicalOrders\": 0.1,\n \"algo/futures/subOrders\": 0.1,\n \"portfolio/account\": 0.1,\n \"portfolio/collateralRate\": 5,\n \"portfolio/pmLoan\": 3.3335,\n \"portfolio/interest-history\": 0.6667,\n \"portfolio/asset-index-price\": 0.1,\n \"portfolio/repay-futures-switch\": 3,\n \"portfolio/margin-asset-leverage\": 5,\n // staking\n \"staking/productList\": 0.1,\n \"staking/position\": 0.1,\n \"staking/stakingRecord\": 0.1,\n \"staking/personalLeftQuota\": 0.1,\n \"lending/auto-invest/target-asset/list\": 0.1,\n \"lending/auto-invest/target-asset/roi/list\": 0.1,\n \"lending/auto-invest/all/asset\": 0.1,\n \"lending/auto-invest/source-asset/list\": 0.1,\n \"lending/auto-invest/plan/list\": 0.1,\n \"lending/auto-invest/plan/id\": 0.1,\n \"lending/auto-invest/history/list\": 0.1,\n \"lending/auto-invest/index/info\": 0.1,\n \"lending/auto-invest/index/user-summary\": 0.1,\n \"lending/auto-invest/one-off/status\": 0.1,\n \"lending/auto-invest/redeem/history\": 0.1,\n \"lending/auto-invest/rebalance/history\": 0.1,\n // simple earn\n \"simple-earn/flexible/list\": 15,\n \"simple-earn/locked/list\": 15,\n \"simple-earn/flexible/personalLeftQuota\": 15,\n \"simple-earn/locked/personalLeftQuota\": 15,\n \"simple-earn/flexible/subscriptionPreview\": 15,\n \"simple-earn/locked/subscriptionPreview\": 15,\n \"simple-earn/flexible/history/rateHistory\": 15,\n \"simple-earn/flexible/position\": 15,\n \"simple-earn/locked/position\": 15,\n \"simple-earn/account\": 15,\n \"simple-earn/flexible/history/subscriptionRecord\": 15,\n \"simple-earn/locked/history/subscriptionRecord\": 15,\n \"simple-earn/flexible/history/redemptionRecord\": 15,\n \"simple-earn/locked/history/redemptionRecord\": 15,\n \"simple-earn/flexible/history/rewardsRecord\": 15,\n \"simple-earn/locked/history/rewardsRecord\": 15,\n \"simple-earn/flexible/history/collateralRecord\": 0.1\n },\n post: {\n \"asset/dust\": 0.06667,\n \"asset/dust-btc\": 0.1,\n \"asset/transfer\": 6.0003,\n \"asset/get-funding-asset\": 0.1,\n \"asset/convert-transfer\": 0.033335,\n \"account/disableFastWithdrawSwitch\": 0.1,\n \"account/enableFastWithdrawSwitch\": 0.1,\n // 'account/apiRestrictions/ipRestriction': 1, discontinued\n // 'account/apiRestrictions/ipRestriction/ipList': 1, discontinued\n \"capital/withdraw/apply\": 4.0002,\n \"capital/contract/convertible-coins\": 4.0002,\n \"capital/deposit/credit-apply\": 0.1,\n \"margin/borrow-repay\": 20.001,\n \"margin/transfer\": 4.0002,\n \"margin/loan\": 20.001,\n \"margin/repay\": 20.001,\n \"margin/order\": 0.040002,\n \"margin/order/oco\": 0.040002,\n \"margin/dust\": 20.001,\n \"margin/exchange-small-liability\": 20.001,\n // 'margin/isolated/create': 1, discontinued\n \"margin/isolated/transfer\": 4.0002,\n \"margin/isolated/account\": 2.0001,\n \"margin/max-leverage\": 300,\n bnbBurn: 0.1,\n \"sub-account/virtualSubAccount\": 0.1,\n \"sub-account/margin/transfer\": 4.0002,\n \"sub-account/margin/enable\": 0.1,\n \"sub-account/futures/enable\": 0.1,\n \"sub-account/futures/transfer\": 0.1,\n \"sub-account/futures/internalTransfer\": 0.1,\n \"sub-account/transfer/subToSub\": 0.1,\n \"sub-account/transfer/subToMaster\": 0.1,\n \"sub-account/universalTransfer\": 0.1,\n \"sub-account/options/enable\": 0.1,\n \"managed-subaccount/deposit\": 0.1,\n \"managed-subaccount/withdraw\": 0.1,\n userDataStream: 0.1,\n \"userDataStream/isolated\": 0.1,\n \"futures/transfer\": 0.1,\n // lending\n \"lending/customizedFixed/purchase\": 0.1,\n // liquid swap endpoints\n \"bswap/liquidityAdd\": 60,\n \"bswap/liquidityRemove\": 60,\n \"bswap/swap\": 60,\n \"bswap/claimRewards\": 6.667,\n // leveraged token endpoints\n \"blvt/subscribe\": 0.1,\n \"blvt/redeem\": 0.1,\n // brokerage API TODO: NO MENTION OF RATELIMITS IN BROKERAGE DOCS\n \"apiReferral/customization\": 1,\n \"apiReferral/userCustomization\": 1,\n \"apiReferral/rebate/historicalRecord\": 1,\n \"apiReferral/kickback/historicalRecord\": 1,\n \"broker/subAccount\": 1,\n \"broker/subAccount/margin\": 1,\n \"broker/subAccount/futures\": 1,\n \"broker/subAccountApi\": 1,\n \"broker/subAccountApi/permission\": 1,\n \"broker/subAccountApi/commission\": 1,\n \"broker/subAccountApi/commission/futures\": 1,\n \"broker/subAccountApi/commission/coinFutures\": 1,\n \"broker/transfer\": 1,\n \"broker/transfer/futures\": 1,\n \"broker/rebate/historicalRecord\": 1,\n \"broker/subAccount/bnbBurn/spot\": 1,\n \"broker/subAccount/bnbBurn/marginInterest\": 1,\n \"broker/subAccount/blvt\": 1,\n \"broker/subAccountApi/ipRestriction\": 1,\n \"broker/subAccountApi/ipRestriction/ipList\": 1,\n \"broker/universalTransfer\": 1,\n \"broker/subAccountApi/permission/universalTransfer\": 1,\n \"broker/subAccountApi/permission/vanillaOptions\": 1,\n //\n \"giftcard/createCode\": 0.1,\n \"giftcard/redeemCode\": 0.1,\n \"giftcard/buyCode\": 0.1,\n \"algo/spot/newOrderTwap\": 20.001,\n \"algo/futures/newOrderVp\": 20.001,\n \"algo/futures/newOrderTwap\": 20.001,\n // staking\n \"staking/purchase\": 0.1,\n \"staking/redeem\": 0.1,\n \"staking/setAutoStaking\": 0.1,\n // eth-staking\n \"eth-staking/eth/stake\": 15,\n \"eth-staking/eth/redeem\": 15,\n \"eth-staking/wbeth/wrap\": 15,\n // mining endpoints\n \"mining/hash-transfer/config\": 0.5,\n \"mining/hash-transfer/config/cancel\": 0.5,\n \"portfolio/repay\": 20.001,\n \"loan/vip/renew\": 40.002,\n \"loan/vip/borrow\": 40.002,\n \"loan/borrow\": 40.002,\n \"loan/repay\": 40.002,\n \"loan/adjust/ltv\": 40.002,\n \"loan/customize/margin_call\": 40.002,\n \"loan/flexible/borrow\": 40.002,\n \"loan/flexible/repay\": 40.002,\n \"loan/flexible/adjust/ltv\": 40.002,\n \"loan/vip/repay\": 40.002,\n \"convert/getQuote\": 1.3334,\n \"convert/acceptQuote\": 3.3335,\n \"convert/limit/placeOrder\": 3.3335,\n \"convert/limit/cancelOrder\": 1.3334,\n \"portfolio/auto-collection\": 150,\n \"portfolio/asset-collection\": 6,\n \"portfolio/bnb-transfer\": 150,\n \"portfolio/repay-futures-switch\": 150,\n \"portfolio/repay-futures-negative-balance\": 150,\n \"lending/auto-invest/plan/add\": 0.1,\n \"lending/auto-invest/plan/edit\": 0.1,\n \"lending/auto-invest/plan/edit-status\": 0.1,\n \"lending/auto-invest/one-off\": 0.1,\n \"lending/auto-invest/redeem\": 0.1,\n // simple earn\n \"simple-earn/flexible/subscribe\": 0.1,\n \"simple-earn/locked/subscribe\": 0.1,\n \"simple-earn/flexible/redeem\": 0.1,\n \"simple-earn/locked/redeem\": 0.1,\n \"simple-earn/flexible/setAutoSubscribe\": 15,\n \"simple-earn/locked/setAutoSubscribe\": 15\n },\n put: {\n userDataStream: 0.1,\n \"userDataStream/isolated\": 0.1\n },\n delete: {\n // 'account/apiRestrictions/ipRestriction/ipList': 1, discontinued\n \"margin/openOrders\": 0.1,\n \"margin/order\": 6667e-6,\n \"margin/orderList\": 6667e-6,\n \"margin/isolated/account\": 2.0001,\n userDataStream: 0.1,\n \"userDataStream/isolated\": 0.1,\n // brokerage API TODO NO MENTION OF RATELIMIT IN BROKERAGE DOCS\n \"broker/subAccountApi\": 1,\n \"broker/subAccountApi/ipRestriction/ipList\": 1,\n \"algo/spot/order\": 0.1,\n \"algo/futures/order\": 0.1,\n \"sub-account/subAccountApi/ipRestriction/ipList\": 20.001\n // Weight(UID): 3000 => cost = 0.006667 * 3000 = 20.001\n }\n },\n sapiV2: {\n get: {\n \"eth-staking/account\": 15,\n \"sub-account/futures/account\": 0.1,\n \"sub-account/futures/accountSummary\": 1,\n \"sub-account/futures/positionRisk\": 0.1\n },\n post: {\n \"eth-staking/eth/stake\": 15,\n \"sub-account/subAccountApi/ipRestriction\": 20.001\n // Weight(UID): 3000 => cost = 0.006667 * 3000 = 20.001\n }\n },\n sapiV3: {\n get: {\n \"sub-account/assets\": 0.40002\n // Weight(UID): 60 => cost = 0.006667 * 60 = 0.40002\n },\n post: {\n \"asset/getUserAsset\": 0.5\n }\n },\n sapiV4: {\n get: {\n \"sub-account/assets\": 0.40002\n // Weight(UID): 60 => cost = 0.006667 * 60 = 0.40002\n }\n },\n dapiPublic: {\n get: {\n ping: 1,\n time: 1,\n exchangeInfo: 1,\n depth: { cost: 2, byLimit: [[50, 2], [100, 5], [500, 10], [1e3, 20]] },\n trades: 5,\n historicalTrades: 20,\n aggTrades: 20,\n premiumIndex: 10,\n fundingRate: 1,\n klines: { cost: 1, byLimit: [[99, 1], [499, 2], [1e3, 5], [1e4, 10]] },\n continuousKlines: { cost: 1, byLimit: [[99, 1], [499, 2], [1e3, 5], [1e4, 10]] },\n indexPriceKlines: { cost: 1, byLimit: [[99, 1], [499, 2], [1e3, 5], [1e4, 10]] },\n markPriceKlines: { cost: 1, byLimit: [[99, 1], [499, 2], [1e3, 5], [1e4, 10]] },\n premiumIndexKlines: { cost: 1, byLimit: [[99, 1], [499, 2], [1e3, 5], [1e4, 10]] },\n \"ticker/24hr\": { cost: 1, noSymbol: 40 },\n \"ticker/price\": { cost: 1, noSymbol: 2 },\n \"ticker/bookTicker\": { cost: 2, noSymbol: 5 },\n constituents: 2,\n openInterest: 1\n }\n },\n dapiData: {\n get: {\n \"delivery-price\": 1,\n openInterestHist: 1,\n topLongShortAccountRatio: 1,\n topLongShortPositionRatio: 1,\n globalLongShortAccountRatio: 1,\n takerBuySellVol: 1,\n basis: 1\n }\n },\n dapiPrivate: {\n get: {\n \"positionSide/dual\": 30,\n orderAmendment: 1,\n order: 1,\n openOrder: 1,\n openOrders: { cost: 1, noSymbol: 5 },\n allOrders: { cost: 20, noSymbol: 40 },\n balance: 1,\n account: 5,\n \"positionMargin/history\": 1,\n positionRisk: 1,\n userTrades: { cost: 20, noSymbol: 40 },\n income: 20,\n leverageBracket: 1,\n forceOrders: { cost: 20, noSymbol: 50 },\n adlQuantile: 5,\n commissionRate: 20,\n \"income/asyn\": 5,\n \"income/asyn/id\": 5,\n pmExchangeInfo: 0.5,\n pmAccountInfo: 0.5\n // Weight(IP): 5 => cost = 0.1 * 5 = 0.5\n },\n post: {\n \"positionSide/dual\": 1,\n order: 4,\n batchOrders: 5,\n countdownCancelAll: 10,\n leverage: 1,\n marginType: 1,\n positionMargin: 1,\n listenKey: 1\n },\n put: {\n listenKey: 1,\n order: 1,\n batchOrders: 5\n },\n delete: {\n order: 1,\n allOpenOrders: 1,\n batchOrders: 5,\n listenKey: 1\n }\n },\n dapiPrivateV2: {\n get: {\n leverageBracket: 1\n }\n },\n fapiPublic: {\n get: {\n ping: 1,\n time: 1,\n exchangeInfo: 1,\n depth: { cost: 2, byLimit: [[50, 2], [100, 5], [500, 10], [1e3, 20]] },\n trades: 5,\n historicalTrades: 20,\n aggTrades: 20,\n klines: { cost: 1, byLimit: [[99, 1], [499, 2], [1e3, 5], [1e4, 10]] },\n continuousKlines: { cost: 1, byLimit: [[99, 1], [499, 2], [1e3, 5], [1e4, 10]] },\n markPriceKlines: { cost: 1, byLimit: [[99, 1], [499, 2], [1e3, 5], [1e4, 10]] },\n indexPriceKlines: { cost: 1, byLimit: [[99, 1], [499, 2], [1e3, 5], [1e4, 10]] },\n fundingRate: 1,\n fundingInfo: 1,\n premiumIndex: 1,\n \"ticker/24hr\": { cost: 1, noSymbol: 40 },\n \"ticker/price\": { cost: 1, noSymbol: 2 },\n \"ticker/bookTicker\": { cost: 1, noSymbol: 2 },\n openInterest: 1,\n indexInfo: 1,\n assetIndex: { cost: 1, noSymbol: 10 },\n constituents: 2,\n apiTradingStatus: { cost: 1, noSymbol: 10 },\n lvtKlines: 1\n }\n },\n fapiData: {\n get: {\n \"delivery-price\": 1,\n openInterestHist: 1,\n topLongShortAccountRatio: 1,\n topLongShortPositionRatio: 1,\n globalLongShortAccountRatio: 1,\n takerlongshortRatio: 1,\n basis: 1\n }\n },\n fapiPrivate: {\n get: {\n forceOrders: { cost: 20, noSymbol: 50 },\n allOrders: 5,\n openOrder: 1,\n openOrders: 1,\n order: 1,\n account: 5,\n balance: 5,\n leverageBracket: 1,\n \"positionMargin/history\": 1,\n positionRisk: 5,\n \"positionSide/dual\": 30,\n userTrades: 5,\n income: 30,\n commissionRate: 20,\n apiTradingStatus: 1,\n multiAssetsMargin: 30,\n // broker endpoints\n \"apiReferral/ifNewUser\": 1,\n \"apiReferral/customization\": 1,\n \"apiReferral/userCustomization\": 1,\n \"apiReferral/traderNum\": 1,\n \"apiReferral/overview\": 1,\n \"apiReferral/tradeVol\": 1,\n \"apiReferral/rebateVol\": 1,\n \"apiReferral/traderSummary\": 1,\n adlQuantile: 5,\n pmAccountInfo: 5,\n orderAmendment: 1,\n \"income/asyn\": 1e3,\n \"income/asyn/id\": 10,\n \"order/asyn\": 1e3,\n \"order/asyn/id\": 10,\n \"trade/asyn\": 1e3,\n \"trade/asyn/id\": 10\n },\n post: {\n batchOrders: 5,\n \"positionSide/dual\": 1,\n positionMargin: 1,\n marginType: 1,\n order: 4,\n leverage: 1,\n listenKey: 1,\n countdownCancelAll: 10,\n multiAssetsMargin: 1,\n // broker endpoints\n \"apiReferral/customization\": 1,\n \"apiReferral/userCustomization\": 1\n },\n put: {\n listenKey: 1,\n order: 1,\n batchOrders: 5\n },\n delete: {\n batchOrders: 1,\n order: 1,\n allOpenOrders: 1,\n listenKey: 1\n }\n },\n fapiPublicV2: {\n get: {\n \"ticker/price\": 0\n }\n },\n fapiPrivateV2: {\n get: {\n account: 1,\n balance: 1,\n positionRisk: 1\n }\n },\n eapiPublic: {\n get: {\n ping: 1,\n time: 1,\n exchangeInfo: 1,\n index: 1,\n ticker: 5,\n mark: 5,\n depth: 1,\n klines: 1,\n trades: 5,\n historicalTrades: 20,\n exerciseHistory: 3,\n openInterest: 3\n }\n },\n eapiPrivate: {\n get: {\n account: 3,\n position: 5,\n openOrders: { cost: 1, noSymbol: 40 },\n historyOrders: 3,\n userTrades: 5,\n exerciseRecord: 5,\n bill: 1,\n \"income/asyn\": 5,\n \"income/asyn/id\": 5,\n marginAccount: 3,\n mmp: 1,\n countdownCancelAll: 1,\n order: 1\n },\n post: {\n order: 1,\n batchOrders: 5,\n listenKey: 1,\n mmpSet: 1,\n mmpReset: 1,\n countdownCancelAll: 1,\n countdownCancelAllHeartBeat: 10\n },\n put: {\n listenKey: 1\n },\n delete: {\n order: 1,\n batchOrders: 1,\n allOpenOrders: 1,\n allOpenOrdersByUnderlying: 1,\n listenKey: 1\n }\n },\n public: {\n // IP (api) request rate limit of 6000 per minute\n // 1 IP (api) => cost = 0.2 => (1000 / (50 * 0.2)) * 60 = 6000\n get: {\n ping: 0.2,\n time: 0.2,\n depth: { cost: 1, byLimit: [[100, 1], [500, 5], [1e3, 10], [5e3, 50]] },\n trades: 5,\n aggTrades: 0.4,\n historicalTrades: 5,\n klines: 0.4,\n uiKlines: 0.4,\n \"ticker/24hr\": { cost: 0.4, noSymbol: 16 },\n ticker: { cost: 0.4, noSymbol: 16 },\n \"ticker/tradingDay\": 0.8,\n \"ticker/price\": { cost: 0.4, noSymbol: 0.8 },\n \"ticker/bookTicker\": { cost: 0.4, noSymbol: 0.8 },\n exchangeInfo: 4,\n avgPrice: 0.4\n },\n put: {\n userDataStream: 0.4\n },\n post: {\n userDataStream: 0.4\n },\n delete: {\n userDataStream: 0.4\n }\n },\n private: {\n get: {\n allOrderList: 4,\n openOrderList: 1.2,\n orderList: 0.8,\n order: 0.8,\n openOrders: { cost: 1.2, noSymbol: 16 },\n allOrders: 4,\n account: 4,\n myTrades: 4,\n \"rateLimit/order\": 8,\n myPreventedMatches: 4,\n myAllocations: 4,\n \"account/commission\": 4\n },\n post: {\n \"order/oco\": 0.2,\n \"sor/order\": 0.2,\n \"sor/order/test\": 0.2,\n order: 0.2,\n \"order/cancelReplace\": 0.2,\n \"order/test\": 0.2\n },\n delete: {\n openOrders: 0.2,\n orderList: 0.2,\n order: 0.2\n }\n },\n papi: {\n get: {\n ping: 1,\n \"um/order\": 1,\n \"um/openOrder\": 1,\n \"um/openOrders\": 1,\n \"um/allOrders\": 5,\n \"cm/order\": 1,\n \"cm/openOrder\": 1,\n \"cm/openOrders\": 1,\n \"cm/allOrders\": 20,\n \"um/conditional/openOrder\": 1,\n \"um/conditional/openOrders\": 40,\n \"um/conditional/orderHistory\": 1,\n \"um/conditional/allOrders\": 40,\n \"cm/conditional/openOrder\": 1,\n \"cm/conditional/openOrders\": 40,\n \"cm/conditional/orderHistory\": 1,\n \"cm/conditional/allOrders\": 40,\n \"margin/order\": 5,\n \"margin/openOrders\": 5,\n \"margin/allOrders\": 100,\n \"margin/orderList\": 5,\n \"margin/allOrderList\": 100,\n \"margin/openOrderList\": 5,\n \"margin/myTrades\": 5,\n balance: 20,\n account: 20,\n \"margin/maxBorrowable\": 5,\n \"margin/maxWithdraw\": 5,\n \"um/positionRisk\": 5,\n \"cm/positionRisk\": 1,\n \"um/positionSide/dual\": 30,\n \"cm/positionSide/dual\": 30,\n \"um/userTrades\": 5,\n \"cm/userTrades\": 20,\n \"um/leverageBracket\": 1,\n \"cm/leverageBracket\": 1,\n \"margin/forceOrders\": 1,\n \"um/forceOrders\": 20,\n \"cm/forceOrders\": 20,\n \"um/apiTradingStatus\": 1,\n \"um/commissionRate\": 20,\n \"cm/commissionRate\": 20,\n \"margin/marginLoan\": 10,\n \"margin/repayLoan\": 10,\n \"margin/marginInterestHistory\": 1,\n \"portfolio/interest-history\": 50,\n \"um/income\": 30,\n \"cm/income\": 30,\n \"um/account\": 5,\n \"cm/account\": 5,\n \"repay-futures-switch\": 3,\n \"um/adlQuantile\": 5,\n \"cm/adlQuantile\": 5\n },\n post: {\n \"um/order\": 1,\n \"um/conditional/order\": 1,\n \"cm/order\": 1,\n \"cm/conditional/order\": 1,\n \"margin/order\": 0.0133,\n marginLoan: 0.1333,\n repayLoan: 0.1333,\n \"margin/order/oco\": 0.04,\n \"um/leverage\": 1,\n \"cm/leverage\": 1,\n \"um/positionSide/dual\": 1,\n \"cm/positionSide/dual\": 1,\n \"auto-collection\": 0.6667,\n \"bnb-transfer\": 0.6667,\n \"repay-futures-switch\": 150,\n \"repay-futures-negative-balance\": 150,\n listenKey: 1,\n \"asset-collection\": 3\n },\n put: {\n listenKey: 1\n // 1\n },\n delete: {\n \"um/order\": 1,\n \"um/conditional/order\": 1,\n \"um/allOpenOrders\": 1,\n \"um/conditional/allOpenOrders\": 1,\n \"cm/order\": 1,\n \"cm/conditional/order\": 1,\n \"cm/allOpenOrders\": 1,\n \"cm/conditional/allOpenOrders\": 1,\n \"margin/order\": 1,\n \"margin/allOpenOrders\": 5,\n \"margin/orderList\": 2,\n listenKey: 1\n // 1\n }\n }\n },\n fees: {\n trading: {\n feeSide: \"get\",\n tierBased: !1,\n percentage: !0,\n taker: this.parseNumber(\"0.001\"),\n maker: this.parseNumber(\"0.001\")\n },\n linear: {\n trading: {\n feeSide: \"quote\",\n tierBased: !0,\n percentage: !0,\n taker: this.parseNumber(\"0.000400\"),\n maker: this.parseNumber(\"0.000200\"),\n tiers: {\n taker: [\n [this.parseNumber(\"0\"), this.parseNumber(\"0.000400\")],\n [this.parseNumber(\"250\"), this.parseNumber(\"0.000400\")],\n [this.parseNumber(\"2500\"), this.parseNumber(\"0.000350\")],\n [this.parseNumber(\"7500\"), this.parseNumber(\"0.000320\")],\n [this.parseNumber(\"22500\"), this.parseNumber(\"0.000300\")],\n [this.parseNumber(\"50000\"), this.parseNumber(\"0.000270\")],\n [this.parseNumber(\"100000\"), this.parseNumber(\"0.000250\")],\n [this.parseNumber(\"200000\"), this.parseNumber(\"0.000220\")],\n [this.parseNumber(\"400000\"), this.parseNumber(\"0.000200\")],\n [this.parseNumber(\"750000\"), this.parseNumber(\"0.000170\")]\n ],\n maker: [\n [this.parseNumber(\"0\"), this.parseNumber(\"0.000200\")],\n [this.parseNumber(\"250\"), this.parseNumber(\"0.000160\")],\n [this.parseNumber(\"2500\"), this.parseNumber(\"0.000140\")],\n [this.parseNumber(\"7500\"), this.parseNumber(\"0.000120\")],\n [this.parseNumber(\"22500\"), this.parseNumber(\"0.000100\")],\n [this.parseNumber(\"50000\"), this.parseNumber(\"0.000080\")],\n [this.parseNumber(\"100000\"), this.parseNumber(\"0.000060\")],\n [this.parseNumber(\"200000\"), this.parseNumber(\"0.000040\")],\n [this.parseNumber(\"400000\"), this.parseNumber(\"0.000020\")],\n [this.parseNumber(\"750000\"), this.parseNumber(\"0\")]\n ]\n }\n }\n },\n inverse: {\n trading: {\n feeSide: \"base\",\n tierBased: !0,\n percentage: !0,\n taker: this.parseNumber(\"0.000500\"),\n maker: this.parseNumber(\"0.000100\"),\n tiers: {\n taker: [\n [this.parseNumber(\"0\"), this.parseNumber(\"0.000500\")],\n [this.parseNumber(\"250\"), this.parseNumber(\"0.000450\")],\n [this.parseNumber(\"2500\"), this.parseNumber(\"0.000400\")],\n [this.parseNumber(\"7500\"), this.parseNumber(\"0.000300\")],\n [this.parseNumber(\"22500\"), this.parseNumber(\"0.000250\")],\n [this.parseNumber(\"50000\"), this.parseNumber(\"0.000240\")],\n [this.parseNumber(\"100000\"), this.parseNumber(\"0.000240\")],\n [this.parseNumber(\"200000\"), this.parseNumber(\"0.000240\")],\n [this.parseNumber(\"400000\"), this.parseNumber(\"0.000240\")],\n [this.parseNumber(\"750000\"), this.parseNumber(\"0.000240\")]\n ],\n maker: [\n [this.parseNumber(\"0\"), this.parseNumber(\"0.000100\")],\n [this.parseNumber(\"250\"), this.parseNumber(\"0.000080\")],\n [this.parseNumber(\"2500\"), this.parseNumber(\"0.000050\")],\n [this.parseNumber(\"7500\"), this.parseNumber(\"0.0000030\")],\n [this.parseNumber(\"22500\"), this.parseNumber(\"0\")],\n [this.parseNumber(\"50000\"), this.parseNumber(\"-0.000050\")],\n [this.parseNumber(\"100000\"), this.parseNumber(\"-0.000060\")],\n [this.parseNumber(\"200000\"), this.parseNumber(\"-0.000070\")],\n [this.parseNumber(\"400000\"), this.parseNumber(\"-0.000080\")],\n [this.parseNumber(\"750000\"), this.parseNumber(\"-0.000090\")]\n ]\n }\n }\n },\n option: {}\n },\n precisionMode: St,\n // exchange-specific options\n options: {\n sandboxMode: !1,\n fetchMarkets: [\n \"spot\",\n \"linear\",\n \"inverse\"\n // allows CORS in browsers\n // 'option', // does not allow CORS, enable outside of the browser only\n ],\n fetchCurrencies: !0,\n // 'fetchTradesMethod': 'publicGetAggTrades', // publicGetTrades, publicGetHistoricalTrades, eapiPublicGetTrades\n defaultTimeInForce: \"GTC\",\n defaultType: \"spot\",\n defaultSubType: void 0,\n warnOnFetchOpenOrdersWithoutSymbol: !0,\n // not an error\n // https://github.com/ccxt/ccxt/issues/11268\n // https://github.com/ccxt/ccxt/pull/11624\n // POST https://fapi.binance.com/fapi/v1/marginType 400 Bad Request\n // binanceusdm\n throwMarginModeAlreadySet: !1,\n fetchPositions: \"positionRisk\",\n recvWindow: 10 * 1e3,\n timeDifference: 0,\n adjustForTimeDifference: !1,\n newOrderRespType: {\n market: \"FULL\",\n limit: \"FULL\"\n // we change it from 'ACK' by default to 'FULL' (returns immediately if limit is not hit)\n },\n quoteOrderQty: !0,\n broker: {\n spot: \"x-R4BD3S82\",\n margin: \"x-R4BD3S82\",\n future: \"x-xcKtGhcu\",\n delivery: \"x-xcKtGhcu\",\n swap: \"x-xcKtGhcu\",\n option: \"x-xcKtGhcu\"\n },\n accountsByType: {\n main: \"MAIN\",\n spot: \"MAIN\",\n funding: \"FUNDING\",\n margin: \"MARGIN\",\n cross: \"MARGIN\",\n future: \"UMFUTURE\",\n delivery: \"CMFUTURE\",\n linear: \"UMFUTURE\",\n inverse: \"CMFUTURE\",\n option: \"OPTION\"\n },\n accountsById: {\n MAIN: \"spot\",\n FUNDING: \"funding\",\n MARGIN: \"margin\",\n UMFUTURE: \"linear\",\n CMFUTURE: \"inverse\",\n OPTION: \"option\"\n },\n networks: {\n ERC20: \"ETH\",\n TRC20: \"TRX\",\n BEP2: \"BNB\",\n BEP20: \"BSC\",\n OMNI: \"OMNI\",\n EOS: \"EOS\",\n SPL: \"SOL\"\n },\n // keeping this object for backward-compatibility\n reverseNetworks: {\n \"tronscan.org\": \"TRC20\",\n \"etherscan.io\": \"ERC20\",\n \"bscscan.com\": \"BSC\",\n \"explorer.binance.org\": \"BEP2\",\n \"bithomp.com\": \"XRP\",\n \"bloks.io\": \"EOS\",\n \"stellar.expert\": \"XLM\",\n \"blockchair.com/bitcoin\": \"BTC\",\n \"blockchair.com/bitcoin-cash\": \"BCH\",\n \"blockchair.com/ecash\": \"XEC\",\n \"explorer.litecoin.net\": \"LTC\",\n \"explorer.avax.network\": \"AVAX\",\n \"solscan.io\": \"SOL\",\n \"polkadot.subscan.io\": \"DOT\",\n \"dashboard.internetcomputer.org\": \"ICP\",\n \"explorer.chiliz.com\": \"CHZ\",\n \"cardanoscan.io\": \"ADA\",\n \"mainnet.theoan.com\": \"AION\",\n \"algoexplorer.io\": \"ALGO\",\n \"explorer.ambrosus.com\": \"AMB\",\n \"viewblock.io/zilliqa\": \"ZIL\",\n \"viewblock.io/arweave\": \"AR\",\n \"explorer.ark.io\": \"ARK\",\n \"atomscan.com\": \"ATOM\",\n \"www.mintscan.io\": \"CTK\",\n \"explorer.bitcoindiamond.org\": \"BCD\",\n \"btgexplorer.com\": \"BTG\",\n \"bts.ai\": \"BTS\",\n \"explorer.celo.org\": \"CELO\",\n \"explorer.nervos.org\": \"CKB\",\n \"cerebro.cortexlabs.ai\": \"CTXC\",\n \"chainz.cryptoid.info\": \"VIA\",\n \"explorer.dcrdata.org\": \"DCR\",\n \"digiexplorer.info\": \"DGB\",\n \"dock.subscan.io\": \"DOCK\",\n \"dogechain.info\": \"DOGE\",\n \"explorer.elrond.com\": \"EGLD\",\n \"blockscout.com\": \"ETC\",\n \"explore-fetchhub.fetch.ai\": \"FET\",\n \"filfox.info\": \"FIL\",\n \"fio.bloks.io\": \"FIO\",\n \"explorer.firo.org\": \"FIRO\",\n \"neoscan.io\": \"NEO\",\n \"ftmscan.com\": \"FTM\",\n \"explorer.gochain.io\": \"GO\",\n \"block.gxb.io\": \"GXS\",\n \"hash-hash.info\": \"HBAR\",\n \"www.hiveblockexplorer.com\": \"HIVE\",\n \"explorer.helium.com\": \"HNT\",\n \"tracker.icon.foundation\": \"ICX\",\n \"www.iostabc.com\": \"IOST\",\n \"explorer.iota.org\": \"IOTA\",\n \"iotexscan.io\": \"IOTX\",\n \"irishub.iobscan.io\": \"IRIS\",\n \"kava.mintscan.io\": \"KAVA\",\n \"scope.klaytn.com\": \"KLAY\",\n \"kmdexplorer.io\": \"KMD\",\n \"kusama.subscan.io\": \"KSM\",\n \"explorer.lto.network\": \"LTO\",\n \"polygonscan.com\": \"POLYGON\",\n \"explorer.ont.io\": \"ONT\",\n \"minaexplorer.com\": \"MINA\",\n \"nanolooker.com\": \"NANO\",\n \"explorer.nebulas.io\": \"NAS\",\n \"explorer.nbs.plus\": \"NBS\",\n \"explorer.nebl.io\": \"NEBL\",\n \"nulscan.io\": \"NULS\",\n \"nxscan.com\": \"NXS\",\n \"explorer.harmony.one\": \"ONE\",\n \"explorer.poa.network\": \"POA\",\n \"qtum.info\": \"QTUM\",\n \"explorer.rsk.co\": \"RSK\",\n \"www.oasisscan.com\": \"ROSE\",\n \"ravencoin.network\": \"RVN\",\n \"sc.tokenview.com\": \"SC\",\n \"secretnodes.com\": \"SCRT\",\n \"explorer.skycoin.com\": \"SKY\",\n \"steemscan.com\": \"STEEM\",\n \"explorer.stacks.co\": \"STX\",\n \"www.thetascan.io\": \"THETA\",\n \"scan.tomochain.com\": \"TOMO\",\n \"explore.vechain.org\": \"VET\",\n \"explorer.vite.net\": \"VITE\",\n \"www.wanscan.org\": \"WAN\",\n \"wavesexplorer.com\": \"WAVES\",\n \"wax.eosx.io\": \"WAXP\",\n \"waltonchain.pro\": \"WTC\",\n \"chain.nem.ninja\": \"XEM\",\n \"verge-blockchain.info\": \"XVG\",\n \"explorer.yoyow.org\": \"YOYOW\",\n \"explorer.zcha.in\": \"ZEC\",\n \"explorer.zensystem.io\": \"ZEN\"\n },\n networksById: {\n \"tronscan.org\": \"TRC20\",\n \"etherscan.io\": \"ERC20\",\n \"bscscan.com\": \"BSC\",\n \"explorer.binance.org\": \"BEP2\",\n \"bithomp.com\": \"XRP\",\n \"bloks.io\": \"EOS\",\n \"stellar.expert\": \"XLM\",\n \"blockchair.com/bitcoin\": \"BTC\",\n \"blockchair.com/bitcoin-cash\": \"BCH\",\n \"blockchair.com/ecash\": \"XEC\",\n \"explorer.litecoin.net\": \"LTC\",\n \"explorer.avax.network\": \"AVAX\",\n \"solscan.io\": \"SOL\",\n \"polkadot.subscan.io\": \"DOT\",\n \"dashboard.internetcomputer.org\": \"ICP\",\n \"explorer.chiliz.com\": \"CHZ\",\n \"cardanoscan.io\": \"ADA\",\n \"mainnet.theoan.com\": \"AION\",\n \"algoexplorer.io\": \"ALGO\",\n \"explorer.ambrosus.com\": \"AMB\",\n \"viewblock.io/zilliqa\": \"ZIL\",\n \"viewblock.io/arweave\": \"AR\",\n \"explorer.ark.io\": \"ARK\",\n \"atomscan.com\": \"ATOM\",\n \"www.mintscan.io\": \"CTK\",\n \"explorer.bitcoindiamond.org\": \"BCD\",\n \"btgexplorer.com\": \"BTG\",\n \"bts.ai\": \"BTS\",\n \"explorer.celo.org\": \"CELO\",\n \"explorer.nervos.org\": \"CKB\",\n \"cerebro.cortexlabs.ai\": \"CTXC\",\n \"chainz.cryptoid.info\": \"VIA\",\n \"explorer.dcrdata.org\": \"DCR\",\n \"digiexplorer.info\": \"DGB\",\n \"dock.subscan.io\": \"DOCK\",\n \"dogechain.info\": \"DOGE\",\n \"explorer.elrond.com\": \"EGLD\",\n \"blockscout.com\": \"ETC\",\n \"explore-fetchhub.fetch.ai\": \"FET\",\n \"filfox.info\": \"FIL\",\n \"fio.bloks.io\": \"FIO\",\n \"explorer.firo.org\": \"FIRO\",\n \"neoscan.io\": \"NEO\",\n \"ftmscan.com\": \"FTM\",\n \"explorer.gochain.io\": \"GO\",\n \"block.gxb.io\": \"GXS\",\n \"hash-hash.info\": \"HBAR\",\n \"www.hiveblockexplorer.com\": \"HIVE\",\n \"explorer.helium.com\": \"HNT\",\n \"tracker.icon.foundation\": \"ICX\",\n \"www.iostabc.com\": \"IOST\",\n \"explorer.iota.org\": \"IOTA\",\n \"iotexscan.io\": \"IOTX\",\n \"irishub.iobscan.io\": \"IRIS\",\n \"kava.mintscan.io\": \"KAVA\",\n \"scope.klaytn.com\": \"KLAY\",\n \"kmdexplorer.io\": \"KMD\",\n \"kusama.subscan.io\": \"KSM\",\n \"explorer.lto.network\": \"LTO\",\n \"polygonscan.com\": \"POLYGON\",\n \"explorer.ont.io\": \"ONT\",\n \"minaexplorer.com\": \"MINA\",\n \"nanolooker.com\": \"NANO\",\n \"explorer.nebulas.io\": \"NAS\",\n \"explorer.nbs.plus\": \"NBS\",\n \"explorer.nebl.io\": \"NEBL\",\n \"nulscan.io\": \"NULS\",\n \"nxscan.com\": \"NXS\",\n \"explorer.harmony.one\": \"ONE\",\n \"explorer.poa.network\": \"POA\",\n \"qtum.info\": \"QTUM\",\n \"explorer.rsk.co\": \"RSK\",\n \"www.oasisscan.com\": \"ROSE\",\n \"ravencoin.network\": \"RVN\",\n \"sc.tokenview.com\": \"SC\",\n \"secretnodes.com\": \"SCRT\",\n \"explorer.skycoin.com\": \"SKY\",\n \"steemscan.com\": \"STEEM\",\n \"explorer.stacks.co\": \"STX\",\n \"www.thetascan.io\": \"THETA\",\n \"scan.tomochain.com\": \"TOMO\",\n \"explore.vechain.org\": \"VET\",\n \"explorer.vite.net\": \"VITE\",\n \"www.wanscan.org\": \"WAN\",\n \"wavesexplorer.com\": \"WAVES\",\n \"wax.eosx.io\": \"WAXP\",\n \"waltonchain.pro\": \"WTC\",\n \"chain.nem.ninja\": \"XEM\",\n \"verge-blockchain.info\": \"XVG\",\n \"explorer.yoyow.org\": \"YOYOW\",\n \"explorer.zcha.in\": \"ZEC\",\n \"explorer.zensystem.io\": \"ZEN\"\n },\n legalMoney: {\n MXN: !0,\n UGX: !0,\n SDG: !0,\n XOF: !0,\n SEK: !0,\n GNF: !0,\n QAR: !0,\n LYD: !0,\n KWD: !0,\n ISK: !0,\n PAB: !0,\n CHF: !0,\n HRK: !0,\n VND: !0,\n TJS: !0,\n AED: !0,\n DKK: !0,\n BGN: !0,\n BHD: !0,\n KZT: !0,\n AFN: !0,\n EURPS: !0,\n HUF: !0,\n PEN: !0,\n TMT: !0,\n CLP: !0,\n TND: !0,\n DOP: !0,\n MAD: !0,\n PHP: !0,\n COP: !0,\n ETB: !0,\n LAK: !0,\n BND: !0,\n MDL: !0,\n AMD: !0,\n TRY: !0,\n EUR: !0,\n RON: !0,\n NGN: !0,\n CRC: !0,\n PKR: !0,\n PLN: !0,\n BRL: !0,\n ZAR: !0,\n TWD: !0,\n UYU: !0,\n OMR: !0,\n KES: !0,\n ARS: !0,\n UZS: !0,\n RUB: !0,\n DZD: !0,\n KGS: !0,\n XAF: !0,\n TZS: !0,\n AUD: !0,\n KHR: !0,\n IDR: !0,\n BWP: !0,\n MMK: !0,\n NOK: !0,\n CZK: !0,\n MNT: !0,\n GBP: !0,\n BYN: !0,\n GEL: !0,\n AZN: !0,\n UAH: !0,\n ILS: !0,\n GHS: !0,\n JOD: !0,\n HKD: !0,\n CAD: !0,\n SAR: !0,\n JPY: !0,\n EGP: !0,\n NZD: !0\n },\n legalMoneyCurrenciesById: {\n BUSD: \"USD\"\n }\n },\n exceptions: {\n spot: {\n // https://binance-docs.github.io/apidocs/spot/en/#error-codes\n exact: {\n \"-1000\": ie,\n \"-1001\": ie,\n \"-1002\": ee,\n \"-1003\": Ae,\n \"-1004\": ie,\n \"-1006\": ie,\n \"-1007\": ie,\n \"-1008\": ie,\n \"-1010\": ie,\n \"-1013\": g,\n \"-1014\": k,\n \"-1015\": Ae,\n \"-1016\": O,\n \"-1020\": pe,\n \"-1021\": ze,\n \"-1022\": Z,\n \"-1099\": Z,\n \"-1100\": g,\n \"-1101\": g,\n \"-1102\": g,\n \"-1103\": g,\n \"-1104\": g,\n \"-1105\": g,\n \"-1106\": g,\n \"-1108\": g,\n \"-1111\": g,\n \"-1112\": k,\n \"-1114\": g,\n \"-1115\": g,\n \"-1116\": g,\n \"-1117\": g,\n \"-1118\": g,\n \"-1119\": g,\n \"-1120\": g,\n \"-1121\": g,\n \"-1125\": Z,\n \"-1127\": g,\n \"-1128\": g,\n \"-1130\": g,\n \"-1131\": g,\n \"-1134\": g,\n \"-1135\": g,\n \"-1145\": g,\n \"-1151\": g,\n \"-2008\": Pt,\n \"-2010\": k,\n \"-2011\": Se,\n \"-2013\": Se,\n \"-2014\": Z,\n \"-2015\": Z,\n \"-2016\": k,\n \"-2021\": k,\n \"-2022\": k,\n \"-2026\": k,\n // 3xxx errors are available only for spot\n \"-3000\": be,\n \"-3001\": Z,\n \"-3002\": $e,\n \"-3003\": g,\n \"-3004\": k,\n \"-3005\": g,\n \"-3006\": g,\n \"-3007\": ie,\n \"-3008\": g,\n \"-3009\": Vt,\n \"-3010\": g,\n \"-3011\": g,\n \"-3012\": ie,\n \"-3013\": g,\n \"-3014\": Ee,\n \"-3015\": g,\n \"-3016\": g,\n \"-3017\": Vt,\n \"-3018\": Ee,\n \"-3019\": Ee,\n \"-3020\": g,\n \"-3021\": k,\n \"-3022\": Ee,\n \"-3023\": ie,\n \"-3024\": ie,\n \"-3025\": g,\n \"-3026\": g,\n \"-3027\": pt,\n \"-3028\": it,\n \"-3029\": ie,\n \"-3036\": Ee,\n \"-3037\": ie,\n \"-3038\": g,\n \"-3041\": re,\n \"-3042\": g,\n \"-3043\": ee,\n \"-3044\": ie,\n \"-3045\": ie,\n \"-3999\": ee,\n \"-4001\": O,\n \"-4002\": O,\n \"-4003\": g,\n \"-4004\": Z,\n \"-4005\": Ae,\n \"-4006\": O,\n \"-4007\": et,\n \"-4008\": et,\n \"-4009\": O,\n \"-4010\": ee,\n \"-4011\": g,\n \"-4012\": ee,\n \"-4013\": Z,\n \"-4014\": ke,\n \"-4015\": ee,\n \"-4016\": ee,\n \"-4017\": ee,\n \"-4018\": $e,\n \"-4019\": Yn,\n \"-4021\": g,\n \"-4022\": g,\n \"-4023\": ws,\n \"-4024\": re,\n \"-4025\": re,\n \"-4026\": re,\n \"-4027\": ie,\n \"-4028\": g,\n \"-4029\": Tu,\n \"-4030\": O,\n \"-4031\": ie,\n \"-4032\": ke,\n \"-4033\": et,\n \"-4034\": et,\n \"-4035\": gi,\n \"-4036\": ke,\n \"-4037\": ie,\n \"-4038\": ie,\n \"-4039\": ee,\n \"-4040\": ie,\n \"-4041\": ie,\n \"-4042\": It,\n \"-4043\": ie,\n \"-4044\": go,\n \"-4045\": ie,\n \"-4046\": Z,\n \"-4047\": g,\n \"-4060\": re,\n \"-5001\": O,\n \"-5002\": re,\n \"-5003\": re,\n \"-5004\": ie,\n \"-5005\": ie,\n \"-5006\": ie,\n \"-5007\": g,\n \"-5008\": ie,\n \"-5009\": $e,\n \"-5010\": je,\n \"-5011\": O,\n \"-5012\": je,\n \"-5013\": re,\n \"-5021\": O,\n \"-5022\": O,\n \"-6001\": O,\n \"-6003\": ee,\n \"-6004\": O,\n \"-6005\": O,\n \"-6006\": O,\n \"-6007\": ie,\n \"-6008\": ie,\n \"-6009\": Ae,\n \"-6011\": ie,\n \"-6012\": re,\n \"-6013\": O,\n \"-6014\": ie,\n \"-6015\": g,\n \"-6016\": g,\n \"-6017\": ee,\n \"-6018\": re,\n \"-6019\": ie,\n \"-6020\": O,\n \"-7001\": g,\n \"-7002\": g,\n \"-10001\": dt,\n \"-10002\": g,\n \"-10005\": O,\n \"-10007\": g,\n \"-10008\": g,\n \"-10009\": g,\n \"-10010\": g,\n \"-10011\": re,\n \"-10012\": g,\n \"-10013\": re,\n \"-10015\": ie,\n \"-10016\": ie,\n \"-10017\": ie,\n \"-10018\": g,\n \"-10019\": O,\n \"-10020\": g,\n \"-10021\": Se,\n \"-10022\": g,\n \"-10023\": ie,\n \"-10024\": O,\n \"-10025\": ie,\n \"-10026\": g,\n \"-10028\": g,\n \"-10029\": ie,\n \"-10030\": ie,\n \"-10031\": ie,\n \"-10032\": ie,\n \"-10034\": ie,\n \"-10039\": g,\n \"-10040\": g,\n \"-10041\": ie,\n \"-10042\": $e,\n \"-10043\": ie,\n \"-10044\": ie,\n \"-10045\": ie,\n \"-10046\": ie,\n \"-10047\": ee,\n \"-11008\": g,\n \"-12014\": Ae,\n // BLVT\n \"-13000\": ie,\n \"-13001\": ie,\n \"-13002\": ie,\n \"-13003\": ee,\n \"-13004\": ie,\n \"-13005\": ie,\n \"-13006\": g,\n \"-13007\": ee,\n // 18xxx - BINANCE CODE\n \"-18002\": Ae,\n \"-18003\": Ae,\n \"-18004\": Ae,\n \"-18005\": Ae,\n \"-18006\": g,\n \"-18007\": g,\n // spot & futures algo (TBD for OPTIONS & PORTFOLIO MARGIN)\n \"-20121\": g,\n \"-20124\": k,\n \"-20130\": g,\n \"-20132\": k,\n \"-20194\": g,\n \"-20195\": g,\n \"-20196\": g,\n \"-20198\": k,\n \"-20204\": g,\n // 21xxx - PORTFOLIO MARGIN\n \"-21001\": g,\n \"-21002\": Vt,\n \"-21003\": $e,\n \"-21004\": ie,\n \"-21005\": re,\n \"-21006\": ie,\n \"-21007\": ie,\n \"-32603\": O,\n 400002: Z,\n 100001003: Z,\n 200003903: Z\n // undocumented, {\"code\":200003903,\"msg\":\"Your identity verification has been rejected. Please complete identity verification again.\"}\n }\n },\n linear: {\n // https://binance-docs.github.io/apidocs/futures/en/#error-codes\n exact: {\n \"-1000\": O,\n \"-1001\": O,\n \"-1002\": Z,\n \"-1003\": Ae,\n \"-1004\": ie,\n \"-1005\": ee,\n \"-1006\": be,\n \"-1007\": be,\n \"-1008\": ie,\n \"-1010\": ie,\n \"-1011\": ee,\n \"-1013\": g,\n \"-1014\": k,\n \"-1015\": Ae,\n \"-1016\": O,\n \"-1020\": O,\n \"-1021\": ze,\n \"-1022\": Z,\n \"-1023\": g,\n \"-1099\": Z,\n \"-1100\": g,\n \"-1101\": g,\n \"-1102\": g,\n \"-1103\": g,\n \"-1104\": g,\n \"-1105\": g,\n \"-1106\": g,\n \"-1108\": $e,\n \"-1109\": ee,\n \"-1110\": g,\n \"-1111\": g,\n \"-1112\": k,\n \"-1113\": g,\n \"-1114\": g,\n \"-1115\": g,\n \"-1116\": g,\n \"-1117\": g,\n \"-1118\": g,\n \"-1119\": k,\n \"-1120\": g,\n \"-1121\": it,\n \"-1122\": O,\n \"-1125\": Z,\n \"-1126\": $e,\n \"-1127\": g,\n \"-1128\": g,\n \"-1130\": g,\n \"-1136\": g,\n \"-2010\": k,\n \"-2011\": Se,\n \"-2012\": ie,\n \"-2013\": Se,\n \"-2014\": Z,\n \"-2015\": Z,\n \"-2016\": k,\n \"-2017\": ee,\n \"-2018\": re,\n \"-2019\": re,\n \"-2020\": k,\n \"-2021\": k,\n \"-2022\": k,\n \"-2023\": ie,\n \"-2024\": re,\n \"-2025\": k,\n \"-2026\": g,\n \"-2027\": k,\n \"-2028\": re,\n \"-4000\": g,\n \"-4001\": g,\n \"-4002\": g,\n \"-4003\": g,\n \"-4004\": g,\n \"-4005\": g,\n \"-4006\": g,\n \"-4007\": g,\n \"-4008\": g,\n \"-4009\": g,\n \"-4010\": g,\n \"-4011\": g,\n \"-4012\": g,\n \"-4013\": g,\n \"-4014\": g,\n \"-4015\": g,\n \"-4016\": k,\n \"-4017\": g,\n \"-4018\": g,\n \"-4019\": k,\n \"-4020\": g,\n \"-4021\": g,\n \"-4022\": g,\n \"-4023\": g,\n \"-4024\": g,\n \"-4025\": g,\n \"-4026\": g,\n \"-4027\": g,\n \"-4028\": g,\n \"-4029\": g,\n \"-4030\": g,\n \"-4031\": g,\n \"-4032\": k,\n \"-4033\": g,\n \"-4044\": g,\n \"-4045\": k,\n \"-4046\": k,\n \"-4047\": k,\n \"-4048\": k,\n \"-4049\": k,\n \"-4050\": re,\n \"-4051\": re,\n \"-4052\": ie,\n \"-4053\": k,\n \"-4054\": ie,\n \"-4055\": g,\n \"-4056\": Z,\n \"-4057\": Z,\n \"-4058\": g,\n \"-4059\": g,\n \"-4060\": g,\n \"-4061\": g,\n \"-4062\": g,\n \"-4063\": g,\n \"-4064\": g,\n \"-4065\": g,\n \"-4066\": g,\n \"-4067\": ie,\n \"-4068\": ie,\n \"-4069\": g,\n \"-4070\": g,\n \"-4071\": g,\n \"-4072\": k,\n \"-4073\": g,\n \"-4074\": g,\n \"-4075\": k,\n \"-4076\": k,\n \"-4077\": k,\n \"-4078\": ie,\n \"-4079\": g,\n \"-4080\": ee,\n \"-4081\": k,\n \"-4082\": k,\n \"-4083\": k,\n \"-4084\": O,\n \"-4085\": g,\n \"-4086\": k,\n \"-4087\": ee,\n \"-4088\": ee,\n \"-4104\": O,\n \"-4114\": O,\n \"-4115\": O,\n \"-4118\": ie,\n \"-4131\": ie,\n \"-4135\": g,\n \"-4137\": g,\n \"-4138\": g,\n \"-4139\": g,\n \"-4140\": g,\n \"-4141\": ie,\n \"-4142\": k,\n \"-4144\": it,\n \"-4164\": ie,\n \"-4165\": g,\n \"-4167\": ie,\n \"-4168\": ie,\n \"-4169\": ie,\n \"-4170\": ie,\n \"-4171\": ie,\n \"-4172 \": ie,\n \"-4183\": g,\n \"-4184\": g,\n \"-4192\": k,\n \"-4202\": ee,\n \"-4203\": ee,\n \"-4205\": ee,\n \"-4206\": ee,\n \"-4208\": ie,\n \"-4209\": ie,\n \"-4210\": g,\n \"-4211\": g,\n \"-4400\": ee,\n \"-4401\": ee,\n \"-4402\": ee,\n \"-4403\": ee,\n \"-5021\": k,\n \"-5022\": k,\n \"-5024\": ie,\n \"-5025\": ie,\n \"-5026\": ie,\n \"-5027\": ie,\n \"-5028\": g,\n \"-5037\": k,\n \"-5038\": g,\n \"-5039\": g,\n \"-5040\": g,\n \"-5041\": ie,\n //\n // spot & futures algo (TBD for OPTIONS & PORTFOLIO MARGIN)\n //\n \"-20121\": it,\n \"-20124\": g,\n \"-20130\": g,\n \"-20132\": k,\n \"-20194\": g,\n \"-20195\": g,\n \"-20196\": g,\n \"-20198\": ie,\n \"-20204\": g\n // The notional of USD is less or more than the limit.\n }\n },\n inverse: {\n // https://binance-docs.github.io/apidocs/delivery/en/#error-codes\n exact: {\n \"-1000\": be,\n \"-1001\": be,\n \"-1002\": Z,\n \"-1003\": Ae,\n \"-1004\": ie,\n \"-1005\": ee,\n \"-1006\": be,\n \"-1007\": be,\n \"-1010\": ie,\n \"-1011\": ee,\n \"-1013\": g,\n \"-1014\": g,\n \"-1015\": Ae,\n \"-1016\": O,\n \"-1020\": O,\n \"-1021\": ze,\n \"-1022\": Z,\n \"-1023\": g,\n \"-1100\": g,\n \"-1101\": g,\n \"-1102\": g,\n \"-1103\": g,\n \"-1104\": g,\n \"-1105\": g,\n \"-1106\": g,\n \"-1108\": $e,\n \"-1109\": Z,\n \"-1110\": $e,\n \"-1111\": g,\n \"-1112\": ie,\n \"-1113\": g,\n \"-1114\": g,\n \"-1115\": g,\n \"-1116\": g,\n \"-1117\": g,\n \"-1118\": g,\n \"-1119\": g,\n \"-1120\": g,\n \"-1121\": pt,\n \"-1125\": Z,\n \"-1127\": g,\n \"-1128\": g,\n \"-1130\": g,\n \"-1136\": g,\n \"-2010\": k,\n \"-2011\": Se,\n \"-2013\": Se,\n \"-2014\": Z,\n \"-2015\": Z,\n \"-2016\": ie,\n \"-2018\": re,\n \"-2019\": re,\n \"-2020\": ie,\n \"-2021\": k,\n \"-2022\": k,\n \"-2023\": ie,\n \"-2024\": k,\n \"-2025\": ie,\n \"-2026\": g,\n \"-2027\": ie,\n \"-2028\": ie,\n \"-4000\": g,\n \"-4001\": g,\n \"-4002\": g,\n \"-4003\": g,\n \"-4004\": g,\n \"-4005\": g,\n \"-4006\": g,\n \"-4007\": g,\n \"-4008\": g,\n \"-4009\": g,\n \"-4010\": g,\n \"-4011\": g,\n \"-4012\": g,\n \"-4013\": g,\n \"-4014\": g,\n \"-4015\": g,\n \"-4016\": g,\n \"-4017\": g,\n \"-4018\": g,\n \"-4019\": ie,\n \"-4020\": g,\n \"-4021\": g,\n \"-4022\": g,\n \"-4023\": g,\n \"-4024\": g,\n \"-4025\": g,\n \"-4026\": g,\n \"-4027\": g,\n \"-4028\": g,\n \"-4029\": g,\n \"-4030\": g,\n \"-4031\": g,\n \"-4032\": ie,\n \"-4033\": O,\n \"-4044\": O,\n \"-4045\": ie,\n \"-4046\": O,\n \"-4047\": ie,\n \"-4048\": ie,\n \"-4049\": ie,\n \"-4050\": re,\n \"-4051\": re,\n \"-4052\": ie,\n \"-4053\": ie,\n \"-4054\": ie,\n \"-4055\": g,\n \"-4056\": Z,\n \"-4057\": Z,\n \"-4058\": g,\n \"-4059\": g,\n \"-4060\": g,\n \"-4061\": ie,\n \"-4062\": g,\n //\n \"-4067\": ie,\n \"-4068\": ie,\n \"-4082\": ie,\n \"-4083\": ie,\n \"-4084\": pe,\n \"-4086\": g,\n \"-4087\": g,\n \"-4088\": g,\n \"-4089\": ee,\n \"-4090\": ee,\n \"-4104\": O,\n \"-4110\": O,\n \"-4111\": O,\n \"-4112\": ie,\n \"-4113\": ie,\n \"-4135\": g,\n \"-4137\": g,\n \"-4138\": g,\n \"-4139\": g,\n \"-4142\": k,\n \"-4150\": ie,\n \"-4151\": g,\n \"-4152\": g,\n \"-4154\": g,\n \"-4155\": g,\n \"-4178\": g,\n \"-4192\": k,\n \"-4194\": ee,\n \"-4195\": ee,\n \"-4196\": g,\n \"-4197\": ie,\n \"-4198\": ie,\n \"-4199\": O,\n \"-4200\": ee,\n \"-4201\": ee,\n \"-4202\": ie,\n \"-4188\": O,\n //\n // spot & futures algo\n //\n \"-20121\": it,\n \"-20124\": g,\n \"-20130\": g,\n \"-20132\": k,\n \"-20194\": g,\n \"-20195\": g,\n \"-20196\": g,\n \"-20198\": ie,\n \"-20204\": g\n // The notional of USD is less or more than the limit.\n }\n },\n option: {\n // https://binance-docs.github.io/apidocs/voptions/en/#error-codes\n exact: {\n \"-1000\": be,\n \"-1001\": be,\n \"-1002\": Z,\n \"-1008\": Ae,\n \"-1014\": k,\n \"-1015\": Ae,\n \"-1016\": O,\n \"-1020\": O,\n \"-1021\": ze,\n \"-1022\": Z,\n \"-1100\": g,\n \"-1101\": g,\n \"-1102\": g,\n \"-1103\": g,\n \"-1104\": g,\n \"-1105\": g,\n \"-1106\": g,\n \"-1111\": g,\n \"-1115\": g,\n \"-1116\": g,\n \"-1117\": g,\n \"-1118\": g,\n \"-1119\": g,\n \"-1120\": g,\n \"-1121\": g,\n \"-1125\": Z,\n \"-1127\": g,\n \"-1128\": pt,\n \"-1129\": pt,\n \"-1130\": g,\n \"-1131\": O,\n \"-2010\": k,\n \"-2013\": Se,\n \"-2014\": Z,\n \"-2015\": Z,\n \"-2018\": re,\n \"-2027\": re,\n \"-3029\": je,\n \"-4001\": g,\n \"-4002\": g,\n \"-4003\": g,\n \"-4004\": g,\n \"-4005\": g,\n \"-4013\": g,\n \"-4029\": g,\n \"-4030\": g,\n \"-4055\": g\n // AMOUNT_MUST_BE_POSITIVE\n }\n },\n portfolioMargin: {\n exact: {\n \"-1000\": O,\n \"-1001\": O,\n \"-1002\": Z,\n \"-1003\": Ae,\n \"-1004\": ie,\n \"-1005\": ee,\n \"-1006\": be,\n \"-1007\": be,\n \"-1010\": ie,\n \"-1011\": ee,\n \"-1013\": ie,\n \"-1014\": k,\n \"-1015\": Ae,\n \"-1016\": O,\n \"-1020\": O,\n \"-1021\": ze,\n \"-1022\": Z,\n \"-1023\": g,\n \"-1100\": g,\n \"-1101\": g,\n \"-1102\": g,\n \"-1103\": g,\n \"-1104\": g,\n \"-1105\": g,\n \"-1106\": g,\n \"-1108\": pt,\n \"-1109\": k,\n \"-1110\": pt,\n \"-1111\": g,\n \"-1112\": ie,\n \"-1113\": g,\n \"-1114\": g,\n \"-1115\": g,\n \"-1116\": g,\n \"-1117\": g,\n \"-1118\": g,\n \"-1119\": g,\n \"-1120\": g,\n \"-1121\": it,\n \"-1125\": Z,\n \"-1127\": g,\n \"-1128\": g,\n \"-1130\": g,\n \"-1136\": k,\n \"-2010\": k,\n \"-2011\": Se,\n \"-2013\": Se,\n \"-2014\": Z,\n \"-2015\": Z,\n \"-2016\": ie,\n \"-2018\": re,\n \"-2019\": re,\n \"-2020\": k,\n \"-2021\": k,\n \"-2022\": k,\n \"-2023\": ie,\n \"-2024\": ie,\n \"-2025\": ie,\n \"-2026\": g,\n \"-2027\": ie,\n \"-2028\": ie,\n \"-4000\": g,\n \"-4001\": g,\n \"-4002\": g,\n \"-4003\": g,\n \"-4004\": g,\n \"-4005\": g,\n \"-4006\": g,\n \"-4007\": g,\n \"-4008\": g,\n \"-4009\": g,\n \"-4010\": g,\n \"-4011\": g,\n \"-4012\": g,\n \"-4013\": g,\n \"-4014\": g,\n \"-4015\": g,\n \"-4016\": g,\n \"-4017\": g,\n \"-4018\": g,\n \"-4019\": ie,\n \"-4020\": g,\n \"-4021\": g,\n \"-4022\": g,\n \"-4023\": g,\n \"-4024\": g,\n \"-4025\": g,\n \"-4026\": g,\n \"-4027\": g,\n \"-4028\": g,\n \"-4029\": g,\n \"-4030\": g,\n \"-4031\": g,\n \"-4032\": ie,\n \"-4033\": k,\n \"-4044\": g,\n \"-4045\": ie,\n \"-4046\": ie,\n \"-4047\": ie,\n \"-4048\": ie,\n \"-4049\": g,\n \"-4050\": re,\n \"-4051\": re,\n \"-4052\": ie,\n \"-4053\": k,\n \"-4054\": ie,\n \"-4055\": g,\n \"-4056\": Z,\n \"-4057\": Z,\n \"-4058\": g,\n \"-4059\": g,\n \"-4060\": g,\n \"-4061\": g,\n \"-4062\": g,\n \"-4063\": g,\n \"-4064\": g,\n \"-4065\": g,\n \"-4066\": g,\n \"-4067\": ie,\n \"-4068\": ie,\n \"-4069\": g,\n \"-4070\": g,\n \"-4071\": g,\n \"-4072\": ie,\n \"-4073\": g,\n \"-4074\": g,\n \"-4075\": g,\n \"-4076\": ie,\n \"-4077\": ie,\n \"-4078\": ie,\n \"-4079\": g,\n \"-4080\": ee,\n \"-4081\": k,\n \"-4082\": k,\n \"-4083\": ie,\n \"-4084\": k,\n \"-4085\": g,\n \"-4086\": g,\n \"-4087\": ee,\n \"-4088\": ee,\n \"-4104\": g,\n \"-4114\": g,\n \"-4115\": k,\n \"-4118\": ie,\n \"-4131\": ie,\n \"-4135\": g,\n \"-4137\": g,\n \"-4138\": g,\n \"-4139\": g,\n \"-4140\": g,\n \"-4141\": g,\n \"-4142\": k,\n \"-4144\": it,\n \"-4161\": ie,\n \"-4164\": ie,\n \"-4165\": g,\n \"-4183\": g,\n \"-4184\": g,\n \"-5021\": k,\n \"-5022\": k\n // Due to the order could not be executed as maker, the Post Only order will be rejected.\n }\n },\n exact: {\n \"System is under maintenance.\": dt,\n \"System abnormality\": be,\n \"You are not authorized to execute this request.\": ee,\n \"API key does not exist\": Z,\n \"Order would trigger immediately.\": k,\n \"Stop price would trigger immediately.\": k,\n \"Order would immediately match and take.\": k,\n \"Account has insufficient balance for requested action.\": re,\n \"Rest API trading is not enabled.\": ee,\n \"This account may not place or cancel orders.\": ee,\n \"You don't have permission.\": ee,\n \"Market is closed.\": pt,\n \"Too many requests. Please try again later.\": Ae,\n \"This action is disabled on this account.\": Ee,\n \"Limit orders require GTC for this phase.\": k,\n \"This order type is not possible in this trading phase.\": g,\n \"This type of sub-account exceeds the maximum number limit\": ie,\n \"This symbol is restricted for this account.\": ee,\n \"This symbol is not permitted for this account.\": ee\n // {\"code\":-2010,\"msg\":\"This symbol is not permitted for this account.\"}\n },\n broad: {\n \"has no operation privilege\": ee,\n MAX_POSITION: k\n // {\"code\":-2010,\"msg\":\"Filter failure: MAX_POSITION\"}\n },\n messages: {\n \"Filter failure: NOTIONAL\": ye.ORDER_UNDER_MINIMUM\n }\n }\n });\n }\n isUsingForcedProxy(e, t = void 0) {\n return e && e.forceProxy ? (delete e.forceProxy, !0) : !1;\n }\n isInverse(e, t = void 0) {\n return t === void 0 ? e === \"delivery\" : t === \"inverse\";\n }\n isLinear(e, t = void 0) {\n return t === void 0 ? e === \"future\" || e === \"swap\" : t === \"linear\";\n }\n convertExpireDate(e) {\n const t = e.slice(0, 2), i = e.slice(2, 4), s = e.slice(4, 6);\n return \"20\" + t + \"-\" + i + \"-\" + s + \"T00:00:00Z\";\n }\n createExpiredOptionMarket(e) {\n const t = \"USDT\", i = e.split(\"-\"), s = e.split(\"/\");\n let n;\n e.indexOf(\"/\") > -1 ? n = this.safeString(s, 0) : n = this.safeString(i, 0);\n const r = this.safeString(i, 1), a = this.safeInteger(i, 2), o = this.safeString(i, 2), c = this.safeString(i, 3), u = this.convertExpireDate(r), f = this.parse8601(u);\n return {\n id: n + \"-\" + r + \"-\" + o + \"-\" + c,\n symbol: n + \"/\" + t + \":\" + t + \"-\" + r + \"-\" + o + \"-\" + c,\n base: n,\n quote: t,\n baseId: n,\n quoteId: t,\n active: void 0,\n type: \"option\",\n linear: void 0,\n inverse: void 0,\n spot: !1,\n swap: !1,\n future: !1,\n option: !0,\n margin: !1,\n contract: !0,\n contractSize: void 0,\n expiry: f,\n expiryDatetime: u,\n optionType: c === \"C\" ? \"call\" : \"put\",\n strike: a,\n settle: t,\n settleId: t,\n precision: {\n amount: void 0,\n price: void 0\n },\n limits: {\n amount: {\n min: void 0,\n max: void 0\n },\n price: {\n min: void 0,\n max: void 0\n },\n cost: {\n min: void 0,\n max: void 0\n }\n },\n info: void 0\n };\n }\n market(e) {\n if (this.markets === void 0)\n throw new bs().exchange(this.id);\n let t = this.safeString(this.options, \"defaultType\");\n const i = this.safeString(this.options, \"defaultSubType\"), s = t === \"future\", n = t === \"delivery\", r = s || n;\n if (typeof e == \"string\") {\n if (e in this.markets) {\n const a = this.markets[e];\n if (r && a.spot) {\n const o = s ? a.quote : a.base, c = e + \":\" + o;\n if (c in this.markets)\n return this.markets[c];\n } else\n return a;\n } else if (e in this.markets_by_id) {\n const a = this.markets_by_id[e];\n s ? t = \"linear\" : n ? t = \"inverse\" : t === void 0 && (t = i);\n for (let o = 0; o < a.length; o++) {\n const c = a[o];\n if (c[t])\n return c;\n }\n return a[0];\n } else if (e.indexOf(\"/\") > -1 && e.indexOf(\":\") < 0) {\n const [a, o] = e.split(\"/\"), c = o === \"USD\" ? a : o, u = e + \":\" + c;\n if (u in this.markets)\n return this.markets[u];\n } else if (e.indexOf(\"-C\") > -1 || e.indexOf(\"-P\") > -1)\n return this.createExpiredOptionMarket(e);\n }\n throw new it(e).exchange(this.id);\n }\n safeMarket(e = void 0, t = void 0, i = void 0, s = void 0) {\n return e !== void 0 && (e.indexOf(\"-C\") > -1 || e.indexOf(\"-P\") > -1) && !(e in this.markets_by_id) ? this.createExpiredOptionMarket(e) : super.safeMarket(e, t, i, s);\n }\n costToPrecision(e, t) {\n return this.decimalToPrecision(t, Et, this.markets[e].precision.quote, this.precisionMode, this.paddingMode);\n }\n nonce() {\n return this.milliseconds() - this.options.timeDifference;\n }\n async fetchTime(e = {}) {\n const t = this.safeString2(this.options, \"fetchTime\", \"defaultType\", \"spot\"), i = this.safeString(e, \"type\", t), s = this.omit(e, \"type\");\n let n;\n [n, e] = this.handleSubTypeAndParams(\"fetchTime\", void 0, e);\n let r;\n return this.isLinear(i, n) ? r = await this.fapiPublicGetTime(s) : this.isInverse(i, n) ? r = await this.dapiPublicGetTime(s) : r = await this.publicGetTime(s), this.safeInteger(r, \"serverTime\");\n }\n async fetchCurrencies(e = {}) {\n if (!this.safeValue(this.options, \"fetchCurrencies\") || !this.checkRequiredCredentials(!1) || this.safeValue(this.urls, \"apiBackup\") !== void 0)\n return;\n const s = await this.sapiGetCapitalConfigGetall(e), n = {}, r = this.safeValue(this.options, \"legalMoney\", {});\n for (let a = 0; a < s.length; a++) {\n const o = s[a], c = this.safeString(o, \"coin\"), u = this.safeString(o, \"name\"), f = this.safeCurrencyCode(c);\n if (!(f in r)) {\n let h, l = !1, p = !1;\n const m = this.safeValue(o, \"networkList\", []), y = {}, w = {};\n let S;\n for (let v = 0; v < m.length; v++) {\n const _ = m[v], V = this.safeString(_, \"network\"), j = this.safeStringUpper(_, \"network\"), G = this.safeDict(this.options, \"networks\", {}), W = this.safeString(G, j, j);\n m[v].network = W;\n const B = this.safeString(_, \"name\"), Q = this.safeNumber(_, \"withdrawFee\"), se = this.safeValue(_, \"depositEnable\"), $ = this.safeValue(_, \"withdrawEnable\");\n p = se || p, l = $ || l, w[V] = Q, (this.safeValue(_, \"isDefault\") || S === void 0) && (S = Q);\n const E = this.safeString(_, \"withdrawIntegerMultiple\");\n P.stringEq(E, \"0\") || (h = h === void 0 ? E : P.stringMin(h, E));\n const N = this.safeValue(_, \"withdrawMin\"), L = this.safeValue(_, \"withdrawMax\"), z = this.precisionFromString(this.safeString(_, \"withdrawIntegerMultiple\"));\n y[W] = {\n info: m[v],\n id: B,\n name: B,\n network: V,\n active: se && $,\n deposit: se,\n withdraw: $,\n fee: Q,\n precision: z,\n limits: {\n withdraw: {\n min: this.parseNumber(N),\n max: this.parseNumber(L)\n },\n deposit: {\n min: void 0,\n max: void 0\n }\n }\n };\n }\n const b = this.safeValue(o, \"trading\"), T = l && p && b;\n let x;\n h !== void 0 && (x = parseInt(this.numberToString(this.precisionFromString(h)))), n[f] = {\n id: c,\n name: u,\n code: f,\n precision: x,\n info: o,\n active: T,\n deposit: p,\n withdraw: l,\n networks: y,\n fee: S,\n fees: w,\n limits: this.limits\n };\n }\n }\n return n;\n }\n async fetchMarkets(e = {}) {\n const t = [], i = this.safeList(this.options, \"fetchMarkets\", [\"spot\", \"linear\", \"inverse\"]), s = this.safeBool(this.options, \"sandboxMode\", !1), n = [];\n for (let l = 0; l < i.length; l++) {\n const p = i[l];\n p === \"option\" && s || n.push(p);\n }\n for (let l = 0; l < n.length; l++) {\n const p = n[l];\n if (p === \"spot\")\n t.push(this.publicGetExchangeInfo(e));\n else if (p === \"linear\")\n t.push(this.fapiPublicGetExchangeInfo(e));\n else if (p === \"inverse\")\n t.push(this.dapiPublicGetExchangeInfo(e));\n else if (p === \"option\")\n t.push(this.eapiPublicGetExchangeInfo(e));\n else\n throw new ge(p).exchange(this.id);\n }\n const r = await Promise.all(t), a = this.safeValue(this.safeValue(r, 0), \"symbols\", []), o = this.safeValue(this.safeValue(r, 1), \"symbols\", []), c = this.safeValue(this.safeValue(r, 2), \"symbols\", []), u = this.safeValue(this.safeValue(r, 3), \"optionSymbols\", []);\n let f = a;\n f = this.arrayConcat(f, o), f = this.arrayConcat(f, c), f = this.arrayConcat(f, u);\n const h = [];\n for (let l = 0; l < f.length; l++)\n h.push(this.parseMarket(f[l]));\n return h;\n }\n parseMarket(e) {\n let t = !1, i = !1, s = !1;\n const n = this.safeString(e, \"underlying\"), r = this.safeString(e, \"symbol\"), a = r.split(\"-\"), o = this.safeString(a, 0), c = this.safeStringLower(e, \"symbol\"), u = this.safeString(e, \"baseAsset\", o), f = this.safeString(e, \"quoteAsset\"), h = this.safeCurrencyCode(u), l = this.safeCurrencyCode(f), p = this.safeString(e, \"contractType\");\n let m = \"contractType\" in e, y = this.safeInteger2(e, \"deliveryDate\", \"expiryDate\"), w = this.safeString(e, \"marginAsset\");\n p === \"PERPETUAL\" || y === 41334048e5 ? (y = void 0, t = !0) : n !== void 0 ? (m = !0, s = !0, w = w === void 0 ? \"USDT\" : w) : y !== void 0 && (i = !0);\n const S = this.safeCurrencyCode(w), b = !m, T = this.safeList(e, \"filters\", []), x = this.indexBy(T, \"filterType\"), v = this.safeString2(e, \"status\", \"contractStatus\");\n let _, V = this.fees, j, G;\n const W = this.safeInteger(e, \"strikePrice\");\n let B = h + \"/\" + l;\n if (m) {\n t ? B = B + \":\" + S : i ? B = B + \":\" + S + \"-\" + this.yymmdd(y) : s && (B = B + \":\" + S + \"-\" + this.yymmdd(y) + \"-\" + this.numberToString(W) + \"-\" + this.safeString(a, 3)), _ = this.safeNumber2(e, \"contractSize\", \"unit\", this.parseNumber(\"1\")), j = S === l, G = S === h;\n const E = j ? \"linear\" : \"inverse\";\n V = this.safeDict(this.fees, E, {});\n }\n let Q = v === \"TRADING\";\n if (b) {\n const E = this.safeList(e, \"permissionSets\", []);\n for (let N = 0; N < E.length; N++) {\n const L = this.safeList(E, N, []);\n for (let z = 0; z < L.length; z++)\n if (L[z] === \"TRD_GRP_003\") {\n Q = !1;\n break;\n }\n }\n }\n const se = this.safeBool(e, \"isMarginTradingAllowed\", !1);\n let $;\n b ? $ = \"spot\" : t ? $ = \"swap\" : i ? $ = \"future\" : s && ($ = \"option\", Q = void 0);\n const te = {\n id: r,\n lowercaseId: c,\n symbol: B,\n base: h,\n quote: l,\n settle: S,\n baseId: u,\n quoteId: f,\n settleId: w,\n type: $,\n spot: b,\n margin: b && se,\n swap: t,\n future: i,\n option: s,\n active: Q,\n contract: m,\n linear: j,\n inverse: G,\n taker: V.trading.taker,\n maker: V.trading.maker,\n contractSize: _,\n expiry: y,\n expiryDatetime: this.iso8601(y),\n strike: W,\n optionType: this.safeStringLower(e, \"side\"),\n precision: {\n amount: this.safeInteger2(e, \"quantityPrecision\", \"quantityScale\"),\n price: this.safeInteger2(e, \"pricePrecision\", \"priceScale\"),\n base: this.safeInteger(e, \"baseAssetPrecision\"),\n quote: this.safeInteger(e, \"quotePrecision\")\n },\n limits: {\n leverage: {\n min: void 0,\n max: void 0\n },\n amount: {\n min: this.safeNumber(e, \"minQty\"),\n max: this.safeNumber(e, \"maxQty\")\n },\n price: {\n min: void 0,\n max: void 0\n },\n cost: {\n min: void 0,\n max: void 0\n }\n },\n info: e,\n created: this.safeInteger(e, \"onboardDate\")\n // present in inverse & linear apis\n };\n if (\"PRICE_FILTER\" in x) {\n const E = this.safeDict(x, \"PRICE_FILTER\", {});\n te.limits.price = {\n min: this.safeNumber(E, \"minPrice\"),\n max: this.safeNumber(E, \"maxPrice\")\n }, te.precision.price = this.precisionFromString(E.tickSize);\n }\n if (\"LOT_SIZE\" in x) {\n const E = this.safeDict(x, \"LOT_SIZE\", {}), N = this.safeString(E, \"stepSize\");\n te.precision.amount = this.precisionFromString(N), te.limits.amount = {\n min: this.safeNumber(E, \"minQty\"),\n max: this.safeNumber(E, \"maxQty\")\n };\n }\n if (\"MARKET_LOT_SIZE\" in x) {\n const E = this.safeDict(x, \"MARKET_LOT_SIZE\", {});\n te.limits.market = {\n min: this.safeNumber(E, \"minQty\"),\n max: this.safeNumber(E, \"maxQty\")\n };\n }\n if (\"MIN_NOTIONAL\" in x || \"NOTIONAL\" in x) {\n const E = this.safeDict2(x, \"MIN_NOTIONAL\", \"NOTIONAL\", {});\n te.limits.cost.min = this.safeNumber2(E, \"minNotional\", \"notional\"), te.limits.cost.max = this.safeNumber(E, \"maxNotional\");\n }\n return te;\n }\n parseBalanceHelper(e) {\n const t = this.account();\n t.used = this.safeString(e, \"locked\"), t.free = this.safeString(e, \"free\");\n const i = this.safeString(e, \"interest\"), s = this.safeString(e, \"borrowed\");\n return t.debt = P.stringAdd(s, i), t;\n }\n parseBalanceCustom(e, t = void 0, i = void 0) {\n const s = {\n info: e\n };\n let n;\n const r = i === \"isolated\", a = t === \"margin\" || i === \"cross\";\n if (t === \"papi\")\n for (let o = 0; o < e.length; o++) {\n const c = e[o], u = this.account(), f = this.safeString(c, \"asset\"), h = this.safeCurrencyCode(f), l = this.safeString(c, \"crossMarginBorrowed\"), p = this.safeString(c, \"crossMarginInterest\");\n u.free = this.safeString(c, \"crossMarginFree\"), u.used = this.safeString(c, \"crossMarginLocked\"), u.total = this.safeString(c, \"crossMarginAsset\"), u.debt = P.stringAdd(l, p), s[h] = u;\n }\n else if (!r && (t === \"spot\" || a)) {\n n = this.safeInteger(e, \"updateTime\");\n const o = this.safeList2(e, \"balances\", \"userAssets\", []);\n for (let c = 0; c < o.length; c++) {\n const u = o[c], f = this.safeString(u, \"asset\"), h = this.safeCurrencyCode(f), l = this.account();\n if (l.free = this.safeString(u, \"free\"), l.used = this.safeString(u, \"locked\"), a) {\n const p = this.safeString(u, \"borrowed\"), m = this.safeString(u, \"interest\");\n l.debt = P.stringAdd(p, m);\n }\n s[h] = l;\n }\n } else if (r) {\n const o = this.safeList(e, \"assets\");\n for (let c = 0; c < o.length; c++) {\n const u = o[c], f = this.safeString(u, \"symbol\"), h = this.safeSymbol(f, void 0, void 0, \"spot\"), l = this.safeDict(u, \"baseAsset\", {}), p = this.safeDict(u, \"quoteAsset\", {}), m = this.safeCurrencyCode(this.safeString(l, \"asset\")), y = this.safeCurrencyCode(this.safeString(p, \"asset\")), w = {};\n w[m] = this.parseBalanceHelper(l), w[y] = this.parseBalanceHelper(p), s[h] = this.safeBalance(w);\n }\n } else if (t === \"savings\") {\n const [o, c] = e;\n [...o || [], ...c || []].forEach((u) => {\n const f = this.safeString(u, \"asset\"), h = this.safeCurrencyCode(f), l = this.safeString(u, \"amount\") || this.safeString(u, \"totalAmount\"), p = s[h] || this.account();\n p.total = (p.total || 0) + l, p.used = (p.used || 0) + l, s[h] = p;\n });\n } else if (t === \"funding\")\n for (let o = 0; o < e.length; o++) {\n const c = e[o], u = this.account(), f = this.safeString(c, \"asset\"), h = this.safeCurrencyCode(f);\n u.free = this.safeString(c, \"free\");\n const l = this.safeString(c, \"freeze\"), p = this.safeString(c, \"withdrawing\"), m = this.safeString(c, \"locked\");\n u.used = P.stringAdd(l, P.stringAdd(m, p)), s[h] = u;\n }\n else {\n let o = e;\n Array.isArray(e) || (o = this.safeList(e, \"assets\", []));\n for (let c = 0; c < o.length; c++) {\n const u = o[c], f = this.safeString(u, \"asset\"), h = this.safeCurrencyCode(f), l = this.account();\n l.free = this.safeString(u, \"availableBalance\"), l.used = this.safeString(u, \"initialMargin\"), l.total = this.safeString2(u, \"marginBalance\", \"balance\"), s[h] = l;\n }\n }\n return s.timestamp = n, s.datetime = this.iso8601(n), r ? s : this.safeBalance(s);\n }\n async fetchBalance(e = {}) {\n await this.loadMarkets();\n const t = this.safeString2(this.options, \"fetchBalance\", \"defaultType\", \"spot\");\n let i = this.safeString(e, \"type\", t), s;\n [s, e] = this.handleSubTypeAndParams(\"fetchBalance\", void 0, e);\n let n;\n [n, e] = this.handleOptionAndParams2(e, \"fetchBalance\", \"papi\", \"portfolioMargin\", !1);\n let r, a;\n [r, a] = this.handleMarginModeAndParams(\"fetchBalance\", e), a = this.omit(a, \"type\");\n let o;\n const c = {};\n if (n || i === \"papi\")\n i = \"papi\", o = await this.papiGetBalance(this.extend(c, a));\n else if (this.isLinear(i, s))\n i = \"linear\", o = await this.fapiPrivateV2GetAccount(this.extend(c, a));\n else if (this.isInverse(i, s))\n i = \"inverse\", o = await this.dapiPrivateGetAccount(this.extend(c, a));\n else if (r === \"isolated\") {\n const u = this.safeList(e, \"symbols\");\n if (a = this.omit(a, \"symbols\"), u !== void 0) {\n let f = \"\";\n if (Array.isArray(u)) {\n f = this.marketId(u[0]);\n for (let h = 1; h < u.length; h++) {\n const l = u[h], p = this.marketId(l);\n f += \",\" + p;\n }\n } else\n f = u;\n c.symbols = f;\n }\n o = await this.sapiGetMarginIsolatedAccount(this.extend(c, a));\n } else\n i === \"margin\" || r === \"cross\" ? o = await this.sapiGetMarginAccount(this.extend(c, a)) : i === \"savings\" ? (c.size = 100, o = await Promise.all([\n this.fetchPaginatedPositionsByPage(\"sapiGetSimpleEarnLockedPosition\", this.extend(c, a), c.size),\n this.fetchPaginatedPositionsByPage(\"sapiGetSimpleEarnFlexiblePosition\", this.extend(c, a), c.size)\n ])) : i === \"funding\" ? o = await this.sapiPostAssetGetFundingAsset(this.extend(c, a)) : o = await this.privateGetAccount(this.extend(c, a));\n return this.parseBalanceCustom(o, i, r);\n }\n async fetchPaginatedPositionsByPage(e, t, i, s = 10) {\n let n = [], r = 1;\n for (; r <= s; ) {\n const a = await this[e](this.extend(t, { current: r, size: i })), o = this.safeValue(a, \"rows\", []), c = this.safeInteger(a, \"total\");\n if (n = this.arrayConcat(n, o), o.length === 0 || c < i)\n break;\n r++;\n }\n return n;\n }\n async fetchOrderBook(e, t = void 0, i = {}) {\n await this.loadMarkets();\n const s = this.market(e), n = {\n symbol: s.id\n };\n t !== void 0 && (n.limit = t);\n let r;\n s.option ? r = await this.eapiPublicGetDepth(this.extend(n, i)) : s.linear ? r = await this.fapiPublicGetDepth(this.extend(n, i)) : s.inverse ? r = await this.dapiPublicGetDepth(this.extend(n, i)) : r = await this.publicGetDepth(this.extend(n, i));\n const a = this.safeInteger(r, \"T\"), o = this.parseOrderBook(r, e, a);\n return o.nonce = this.safeInteger2(r, \"lastUpdateId\", \"u\"), o;\n }\n parseTicker(e, t = void 0) {\n const i = this.safeInteger(e, \"closeTime\");\n let s;\n \"time\" in e && (s = \"contract\"), s === void 0 && (s = \"bidQty\" in e ? \"spot\" : \"contract\");\n const n = this.safeString(e, \"symbol\"), r = this.safeSymbol(n, t, void 0, s), a = this.safeString(e, \"lastPrice\"), o = \"baseVolume\" in e;\n let c, u;\n return o ? (c = this.safeString(e, \"baseVolume\"), u = this.safeString(e, \"volume\")) : (c = this.safeString(e, \"volume\"), u = this.safeString2(e, \"quoteVolume\", \"amount\")), this.safeTicker({\n symbol: r,\n timestamp: i,\n datetime: this.iso8601(i),\n high: this.safeString2(e, \"highPrice\", \"high\"),\n low: this.safeString2(e, \"lowPrice\", \"low\"),\n bid: this.safeString(e, \"bidPrice\"),\n bidVolume: this.safeString(e, \"bidQty\"),\n ask: this.safeString(e, \"askPrice\"),\n askVolume: this.safeString(e, \"askQty\"),\n vwap: this.safeString(e, \"weightedAvgPrice\"),\n open: this.safeString2(e, \"openPrice\", \"open\"),\n close: a,\n last: a,\n previousClose: this.safeString(e, \"prevClosePrice\"),\n change: this.safeString(e, \"priceChange\"),\n percentage: this.safeString(e, \"priceChangePercent\"),\n average: void 0,\n baseVolume: c,\n quoteVolume: u,\n info: e\n }, t);\n }\n async fetchStatus(e = {}) {\n const t = await this.sapiGetSystemStatus(e), i = this.safeString(t, \"status\");\n return {\n status: this.safeString({ 0: \"ok\", 1: \"maintenance\" }, i, i),\n updated: void 0,\n eta: void 0,\n url: void 0,\n info: t\n };\n }\n async fetchTicker(e, t = {}) {\n await this.loadMarkets();\n const i = this.market(e), s = {\n symbol: i.id\n };\n let n;\n if (i.option)\n n = await this.eapiPublicGetTicker(this.extend(s, t));\n else if (i.linear)\n n = await this.fapiPublicGetTicker24hr(this.extend(s, t));\n else if (i.inverse)\n n = await this.dapiPublicGetTicker24hr(this.extend(s, t));\n else {\n const r = this.safeBool(t, \"rolling\", !1);\n t = this.omit(t, \"rolling\"), r ? n = await this.publicGetTicker(this.extend(s, t)) : n = await this.publicGetTicker24hr(this.extend(s, t));\n }\n if (Array.isArray(n)) {\n const r = this.safeDict(n, 0, {});\n return this.parseTicker(r, i);\n }\n return this.parseTicker(n, i);\n }\n async fetchTickers(e = void 0, t = {}) {\n await this.loadMarkets();\n let i, s;\n if (e = this.marketSymbols(e, void 0, !0, !0, !0), e !== void 0) {\n const a = this.safeString(e, 0);\n s = this.market(a);\n }\n [i, t] = this.handleMarketTypeAndParams(\"fetchTickers\", s, t);\n let n;\n [n, t] = this.handleSubTypeAndParams(\"fetchTickers\", s, t);\n let r;\n if (i === \"option\")\n r = await this.eapiPublicGetTicker(t);\n else if (this.isLinear(i, n))\n r = await this.fapiPublicGetTicker24hr(t);\n else if (this.isInverse(i, n))\n r = await this.dapiPublicGetTicker24hr(t);\n else {\n const a = {};\n if (e !== void 0) {\n const o = this.marketIds(e);\n a.symbols = this.json(o);\n }\n r = await this.publicGetTicker24hr(this.extend(a, t));\n }\n return this.parseTickers(r, e);\n }\n parseOHLCV(e, t = void 0) {\n const i = t.inverse ? 7 : 5;\n return [\n this.safeInteger2(e, 0, \"closeTime\"),\n this.safeNumber2(e, 1, \"open\"),\n this.safeNumber2(e, 2, \"high\"),\n this.safeNumber2(e, 3, \"low\"),\n this.safeNumber2(e, 4, \"close\"),\n this.safeNumber2(e, i, \"volume\")\n ];\n }\n async fetchOHLCV(e, t = \"1m\", i = void 0, s = void 0, n = {}) {\n await this.loadMarkets();\n let r = !1;\n if ([r, n] = this.handleOptionAndParams(n, \"fetchOHLCV\", \"paginate\", !1), r)\n return await this.fetchPaginatedCallDeterministic(\"fetchOHLCV\", e, i, s, t, n, 1e3);\n const a = this.market(e), o = 500, c = 1500, u = this.safeString(n, \"price\"), f = this.safeInteger(n, \"until\");\n n = this.omit(n, [\"price\", \"until\"]), s = s === void 0 ? o : Math.min(s, c);\n const h = {\n interval: this.safeString(this.timeframes, t, t),\n limit: s\n };\n if (u === \"index\" ? h.pair = a.id : h.symbol = a.id, i !== void 0 && (h.startTime = i, a.inverse && i > 0)) {\n const p = this.parseTimeframe(t), m = this.sum(i, s * p * 1e3 - 1), y = this.milliseconds();\n h.endTime = Math.min(y, m);\n }\n f !== void 0 && (h.endTime = f);\n let l;\n return a.option ? l = await this.eapiPublicGetKlines(this.extend(h, n)) : u === \"mark\" ? a.inverse ? l = await this.dapiPublicGetMarkPriceKlines(this.extend(h, n)) : l = await this.fapiPublicGetMarkPriceKlines(this.extend(h, n)) : u === \"index\" ? a.inverse ? l = await this.dapiPublicGetIndexPriceKlines(this.extend(h, n)) : l = await this.fapiPublicGetIndexPriceKlines(this.extend(h, n)) : a.linear ? l = await this.fapiPublicGetKlines(this.extend(h, n)) : a.inverse ? l = await this.dapiPublicGetKlines(this.extend(h, n)) : l = await this.publicGetKlines(this.extend(h, n)), this.parseOHLCVs(l, a, t, i, s);\n }\n parseTrade(e, t = void 0) {\n if (\"isDustTrade\" in e)\n return this.parseDustTrade(e, t);\n const i = this.safeInteger2(e, \"T\", \"time\");\n let s = this.safeString2(e, \"q\", \"qty\");\n s = this.safeString(e, \"quantity\", s);\n const n = this.safeString(e, \"symbol\"), a = \"isIsolated\" in e || \"M\" in e || \"orderListId\" in e || \"isMaker\" in e ? \"spot\" : \"contract\";\n t = this.safeMarket(n, t, void 0, a);\n const o = t.symbol;\n let c;\n const u = this.safeValue2(e, \"m\", \"isBuyerMaker\");\n let f;\n u !== void 0 ? c = u ? \"sell\" : \"buy\" : \"side\" in e ? c = this.safeStringLower(e, \"side\") : \"isBuyer\" in e && (c = e.isBuyer ? \"buy\" : \"sell\");\n let h;\n if (\"commission\" in e && (h = {\n cost: this.safeString(e, \"commission\"),\n currency: this.safeCurrencyCode(this.safeString(e, \"commissionAsset\"))\n }), \"isMaker\" in e && (f = e.isMaker ? \"maker\" : \"taker\"), \"maker\" in e && (f = e.maker ? \"maker\" : \"taker\"), \"optionSide\" in e || t.option) {\n const l = this.safeCurrencyCode(this.safeString(e, \"quoteAsset\", \"USDT\"));\n f = this.safeStringLower(e, \"liquidity\"), \"fee\" in e && (h = {\n cost: this.safeString(e, \"fee\"),\n currency: l\n }), c !== \"buy\" && c !== \"sell\" && (c = c === \"1\" ? \"buy\" : \"sell\"), \"optionSide\" in e && c !== \"buy\" && (s = P.stringMul(\"-1\", s));\n }\n return this.safeTrade({\n info: e,\n timestamp: i,\n datetime: this.iso8601(i),\n symbol: o,\n id: this.safeStringN(e, [\"t\", \"a\", \"tradeId\", \"id\"]),\n order: this.safeString(e, \"orderId\"),\n type: this.safeStringLower(e, \"type\"),\n side: c,\n takerOrMaker: f,\n price: this.safeString2(e, \"p\", \"price\"),\n amount: s,\n cost: this.safeString2(e, \"quoteQty\", \"baseQty\"),\n fee: h\n }, t);\n }\n parseDustTrade(e, t = void 0) {\n const i = this.safeString(e, \"transId\"), s = this.safeInteger(e, \"operateTime\"), n = this.safeString(e, \"fromAsset\"), r = this.safeCurrencyCode(n), o = this.currency(\"BNB\").code, c = o + \"/\" + r;\n let u = !1;\n c in this.markets && (u = !0);\n const f = this.safeString(e, \"serviceChargeAmount\"), h = {\n currency: o,\n cost: this.parseNumber(f)\n };\n let l, p, m, y;\n u ? (l = c, p = this.safeString(e, \"transferedAmount\"), m = this.safeString(e, \"amount\"), y = \"buy\") : (l = r + \"/\" + o, p = this.safeString(e, \"amount\"), m = this.safeString(e, \"transferedAmount\"), y = \"sell\");\n let w;\n m !== void 0 && p && (w = P.stringDiv(m, p));\n const S = void 0, b = this.parseNumber(p), T = this.parseNumber(w), x = this.parseNumber(m), v = void 0, _ = void 0;\n return {\n id: S,\n timestamp: s,\n datetime: this.iso8601(s),\n symbol: l,\n order: i,\n type: v,\n takerOrMaker: _,\n side: y,\n amount: b,\n price: T,\n cost: x,\n fee: h,\n info: e\n };\n }\n async fetchTrades(e, t = void 0, i = void 0, s = {}) {\n await this.loadMarkets();\n let n = !1;\n if ([n, s] = this.handleOptionAndParams(s, \"fetchTrades\", \"paginate\"), n)\n return await this.fetchPaginatedCallDynamic(\"fetchTrades\", e, t, i, s);\n const r = this.market(e), a = {\n symbol: r.id\n // 'fromId': 123, // ID to get aggregate trades from INCLUSIVE.\n // 'startTime': 456, // Timestamp in ms to get aggregate trades from INCLUSIVE.\n // 'endTime': 789, // Timestamp in ms to get aggregate trades until INCLUSIVE.\n // 'limit': 500, // default = 500, maximum = 1000\n };\n if (!r.option) {\n t !== void 0 && (a.startTime = t, a.endTime = this.sum(t, 36e5));\n const u = this.safeInteger(s, \"until\");\n u !== void 0 && (a.endTime = u);\n }\n if (i !== void 0) {\n const u = r.swap || r.future;\n a.limit = u ? Math.min(i, 1e3) : i;\n }\n let o = this.safeString(this.options, \"fetchTradesMethod\");\n o = this.safeString2(s, \"fetchTradesMethod\", \"method\", o), s = this.omit(s, [\"until\", \"fetchTradesMethod\"]);\n let c;\n return r.option || o === \"eapiPublicGetTrades\" ? c = await this.eapiPublicGetTrades(this.extend(a, s)) : r.linear || o === \"fapiPublicGetAggTrades\" ? c = await this.fapiPublicGetAggTrades(this.extend(a, s)) : r.inverse || o === \"dapiPublicGetAggTrades\" ? c = await this.dapiPublicGetAggTrades(this.extend(a, s)) : c = await this.publicGetAggTrades(this.extend(a, s)), this.parseTrades(c, r, t, i);\n }\n async editSpotOrder(e, t, i, s, n, r = void 0, a = {}) {\n await this.loadMarkets();\n const o = this.market(t);\n if (!o.spot)\n throw new ge(o.type).exchange(this.id);\n const c = this.editSpotOrderRequest(e, t, i, s, n, r, a), u = await this.privatePostOrderCancelReplace(c), f = this.safeValue(u, \"newOrderResponse\");\n return this.parseOrder(f, o);\n }\n editSpotOrderRequest(e, t, i, s, n, r = void 0, a = {}) {\n const o = this.market(t), c = this.safeStringN(a, [\"newClientOrderId\", \"clientOrderId\", \"origClientOrderId\"]), u = {\n symbol: o.id,\n side: s.toUpperCase()\n }, f = i.toUpperCase();\n let h = f;\n this.isPostOnly(f === \"MARKET\", f === \"LIMIT_MAKER\", a) && (h = \"LIMIT_MAKER\"), u.type = h;\n const p = this.safeNumber2(a, \"stopPrice\", \"triggerPrice\");\n p !== void 0 && (h === \"MARKET\" ? h = \"STOP_LOSS\" : h === \"LIMIT\" && (h = \"STOP_LOSS_LIMIT\"));\n const m = this.safeValue(o.info, \"orderTypes\");\n if (!this.inArray(h, m))\n throw f !== h ? new g(\"stopPrice parameter is not allowed for \" + t + \" \" + i + \" orders\").exchange(this.id) : new g(i + \" is not a valid order type for the \" + t + \" market\").exchange(this.id);\n if (c === void 0) {\n const x = this.safeValue(this.options, \"broker\");\n if (x !== void 0) {\n const v = this.safeString(x, \"spot\");\n v !== void 0 && (u.newClientOrderId = v + this.uuid22());\n }\n } else\n u.newClientOrderId = c;\n u.newOrderRespType = this.safeValue(this.options.newOrderRespType, i, \"RESULT\");\n let y = !1, w = !1, S = !1, b = !1;\n if (h === \"MARKET\")\n if (this.safeValue(this.options, \"quoteOrderQty\", !0)) {\n const v = this.safeValue2(a, \"quoteOrderQty\", \"cost\"), _ = o.precision.price;\n if (v !== void 0)\n u.quoteOrderQty = this.decimalToPrecision(v, Et, _, this.precisionMode);\n else if (r !== void 0) {\n const V = this.numberToString(n), j = this.numberToString(r), G = P.stringMul(V, j);\n u.quoteOrderQty = this.decimalToPrecision(G, Et, _, this.precisionMode);\n } else\n b = !0;\n } else\n b = !0;\n else\n h === \"LIMIT\" ? (w = !0, y = !0, b = !0) : h === \"STOP_LOSS\" || h === \"TAKE_PROFIT\" ? (S = !0, b = !0) : h === \"STOP_LOSS_LIMIT\" || h === \"TAKE_PROFIT_LIMIT\" ? (b = !0, S = !0, w = !0, y = !0) : h === \"LIMIT_MAKER\" && (w = !0, b = !0);\n if (b && (u.quantity = this.amountToPrecision(t, n)), w) {\n if (r === void 0)\n throw new g(\"It requires a price argument for a \" + i + \" order\").exchange(this.id);\n u.price = this.priceToPrecision(t, r);\n }\n if (y && this.safeString(a, \"timeInForce\") === void 0 && (u.timeInForce = this.options.defaultTimeInForce), S) {\n if (p === void 0)\n throw new g(\"It requires a stopPrice extra param for a \" + i + \" order\").exchange(this.id);\n u.stopPrice = this.priceToPrecision(t, p);\n }\n return u.cancelReplaceMode = \"STOP_ON_FAILURE\", this.safeString2(a, \"cancelNewClientOrderId\", \"cancelOrigClientOrderId\") === void 0 && (u.cancelOrderId = e), this.safeString(a, \"timeInForce\") === \"PO\" && (a = this.omit(a, [\"timeInForce\"])), a = this.omit(a, [\"quoteOrderQty\", \"cost\", \"stopPrice\", \"newClientOrderId\", \"clientOrderId\", \"postOnly\"]), this.extend(u, a);\n }\n async editContractOrder(e, t, i, s, n, r = void 0, a = {}) {\n await this.loadMarkets();\n const o = this.market(t);\n if (!o.contract)\n throw new ge(o.type).exchange(this.id);\n const c = {\n symbol: o.id,\n side: s.toUpperCase()\n }, u = this.safeStringN(a, [\"newClientOrderId\", \"clientOrderId\", \"origClientOrderId\"]);\n c.orderId = e, c.quantity = this.amountToPrecision(t, n), r !== void 0 && (c.price = this.priceToPrecision(t, r)), u !== void 0 && (c.origClientOrderId = u), a = this.omit(a, [\"clientOrderId\", \"newClientOrderId\"]);\n let f;\n return o.linear ? f = await this.fapiPrivatePutOrder(this.extend(c, a)) : o.inverse && (f = await this.dapiPrivatePutOrder(this.extend(c, a))), this.parseOrder(f, o);\n }\n async editOrder(e, t, i, s, n = void 0, r = void 0, a = {}) {\n await this.loadMarkets();\n const o = this.market(t);\n if (o.option)\n throw new ge(o.type).exchange(this.id);\n return o.spot ? await this.editSpotOrder(e, t, i, s, n, r, a) : await this.editContractOrder(e, t, i, s, n, r, a);\n }\n parseOrderStatus(e) {\n const t = {\n NEW: \"open\",\n PARTIALLY_FILLED: \"open\",\n ACCEPTED: \"open\",\n FILLED: \"closed\",\n CANCELED: \"canceled\",\n CANCELLED: \"canceled\",\n PENDING_CANCEL: \"canceling\",\n REJECTED: \"rejected\",\n EXPIRED: \"expired\",\n EXPIRED_IN_MATCH: \"expired\"\n };\n return this.safeString(t, e, e);\n }\n parseOrder(e, t = void 0) {\n if (this.safeString(e, \"code\") !== void 0)\n return this.safeOrder({ info: e, status: \"rejected\" }, t);\n const s = this.parseOrderStatus(this.safeString2(e, \"status\", \"strategyStatus\")), n = this.safeString(e, \"symbol\"), a = \"positionSide\" in e || \"cumQuote\" in e ? \"contract\" : \"spot\", o = this.safeSymbol(n, t, void 0, a), c = this.safeString(e, \"executedQty\", \"0\"), u = this.safeIntegerN(e, [\"time\", \"createTime\", \"workingTime\", \"transactTime\", \"updateTime\"]);\n let f;\n if (\"transactTime\" in e || \"updateTime\" in e) {\n const G = this.safeInteger2(e, \"updateTime\", \"transactTime\");\n s === \"open\" ? P.stringGt(c, \"0\") && (f = G) : s === \"closed\" && (f = G);\n }\n const h = this.safeInteger2(e, \"transactTime\", \"updateTime\"), l = this.safeString(e, \"avgPrice\"), p = this.safeString(e, \"price\"), m = this.safeString2(e, \"origQty\", \"quantity\");\n let y = this.safeString2(e, \"cummulativeQuoteQty\", \"cumQuote\");\n y = this.safeString(e, \"cumBase\", y);\n let w = this.safeStringLower(e, \"type\");\n const S = this.safeStringLower(e, \"side\"), b = this.safeList(e, \"fills\", []);\n let T = this.safeString(e, \"timeInForce\");\n T === \"GTX\" && (T = \"PO\");\n const x = w === \"limit_maker\" || T === \"PO\";\n w === \"limit_maker\" && (w = \"limit\");\n const v = this.safeString(e, \"stopPrice\"), _ = this.parseNumber(this.omitZero(v)), V = this.safeNumber(e, \"fee\");\n let j;\n return V !== void 0 && (j = {\n currency: this.safeString(e, \"quoteAsset\"),\n cost: V,\n rate: void 0\n }), this.safeOrder({\n info: e,\n id: this.safeString2(e, \"strategyId\", \"orderId\"),\n clientOrderId: this.safeString2(e, \"clientOrderId\", \"newClientStrategyId\"),\n timestamp: u,\n datetime: this.iso8601(u),\n lastTradeTimestamp: f,\n lastUpdateTimestamp: h,\n symbol: o,\n type: w,\n timeInForce: T,\n postOnly: x,\n reduceOnly: this.safeBool(e, \"reduceOnly\"),\n side: S,\n price: p,\n triggerPrice: _,\n amount: m,\n cost: y,\n average: l,\n filled: c,\n remaining: void 0,\n status: s,\n fee: j,\n trades: b\n }, t);\n }\n async createOrders(e, t = {}) {\n await this.loadMarkets();\n const i = [];\n let s = [];\n for (let o = 0; o < e.length; o++) {\n const c = e[o], u = this.safeString(c, \"symbol\");\n s.push(u);\n const f = this.safeString(c, \"type\"), h = this.safeString(c, \"side\"), l = this.safeValue(c, \"amount\"), p = this.safeValue(c, \"price\"), m = this.safeDict(c, \"params\", {}), y = this.createOrderRequest(u, f, h, l, p, m);\n i.push(y);\n }\n s = this.marketSymbols(s, void 0, !1, !0, !0);\n const n = this.market(s[0]);\n if (n.spot)\n throw new ge(n.type).exchange(this.id);\n let r, a = {\n batchOrders: i\n };\n return a = this.extend(a, t), n.linear ? r = await this.fapiPrivatePostBatchOrders(a) : n.option ? r = await this.eapiPrivatePostBatchOrders(a) : r = await this.dapiPrivatePostBatchOrders(a), this.parseOrders(r);\n }\n async createOrder(e, t, i, s, n = void 0, r = {}) {\n await this.loadMarkets();\n const a = this.market(e), o = this.safeString(r, \"type\", a.type);\n let c;\n [c, r] = this.handleMarginModeAndParams(\"createOrder\", r);\n let u;\n [u, r] = this.handleOptionAndParams2(r, \"createOrder\", \"papi\", \"portfolioMargin\", !1);\n const f = this.safeString2(r, \"triggerPrice\", \"stopPrice\"), h = this.safeString(r, \"stopLossPrice\"), l = this.safeString(r, \"takeProfitPrice\"), m = this.safeString2(r, \"trailingPercent\", \"callbackRate\") !== void 0, S = f !== void 0 || m || h !== void 0 || l !== void 0, b = this.safeBool2(r, \"sor\", \"SOR\", !1), T = this.safeBool(r, \"test\", !1);\n r = this.omit(r, [\"sor\", \"SOR\", \"test\"]), u && (r.portfolioMargin = u);\n const x = this.createOrderRequest(e, t, i, s, n, r);\n let v;\n return a.option ? v = await this.eapiPrivatePostOrder(x) : b ? T ? v = await this.privatePostSorOrderTest(x) : v = await this.privatePostSorOrder(x) : a.linear ? u ? S ? v = await this.papiPostUmConditionalOrder(x) : v = await this.papiPostUmOrder(x) : v = await this.fapiPrivatePostOrder(x) : a.inverse ? u ? S ? v = await this.papiPostCmConditionalOrder(x) : v = await this.papiPostCmOrder(x) : v = await this.dapiPrivatePostOrder(x) : o === \"margin\" || c !== void 0 ? u ? v = await this.papiPostMarginOrder(x) : v = await this.sapiPostMarginOrder(x) : T ? v = await this.privatePostOrderTest(x) : v = await this.privatePostOrder(x), this.parseOrder(v, a);\n }\n createOrderRequest(e, t, i, s, n = void 0, r = {}) {\n const a = this.market(e), o = this.safeString(r, \"type\", a.type), c = this.safeString2(r, \"newClientOrderId\", \"clientOrderId\"), u = t.toUpperCase(), f = u === \"MARKET\", h = u === \"LIMIT\", l = {\n symbol: a.id,\n side: i.toUpperCase()\n };\n let p;\n [p, r] = this.handleOptionAndParams2(r, \"createOrder\", \"papi\", \"portfolioMargin\", !1);\n let m;\n if ([m, r] = this.handleMarginModeAndParams(\"createOrder\", r), o === \"margin\" || m !== void 0 || a.option) {\n const R = this.safeBool(r, \"reduceOnly\", !1);\n r = this.omit(r, \"reduceOnly\"), a.option ? l.reduceOnly = R : R && (l.sideEffectType = \"AUTO_REPAY\");\n }\n const y = this.safeString2(r, \"triggerPrice\", \"stopPrice\"), w = this.safeString(r, \"stopLossPrice\", y), S = this.safeString(r, \"takeProfitPrice\"), b = this.safeString(r, \"trailingDelta\"), T = this.safeString2(r, \"trailingTriggerPrice\", \"activationPrice\", this.numberToString(n)), x = this.safeString2(r, \"trailingPercent\", \"callbackRate\"), v = x !== void 0, _ = w !== void 0 || b !== void 0, V = S !== void 0, W = p && (y !== void 0 || v || _ || V);\n let B = t.toUpperCase(), Q;\n if (v ? (B = \"TRAILING_STOP_MARKET\", l.callbackRate = x, T !== void 0 && (l.activationPrice = this.priceToPrecision(e, T))) : _ ? (Q = w, f ? B = a.contract ? \"STOP_MARKET\" : \"STOP_LOSS\" : h && (B = a.contract ? \"STOP\" : \"STOP_LOSS_LIMIT\")) : V && (Q = S, f ? B = a.contract ? \"TAKE_PROFIT_MARKET\" : \"TAKE_PROFIT\" : h && (B = a.contract ? \"TAKE_PROFIT\" : \"TAKE_PROFIT_LIMIT\")), o === \"spot\" || o === \"margin\" ? l.newOrderRespType = this.safeString(this.options.newOrderRespType, t, \"RESULT\") : p || (l.newOrderRespType = \"RESULT\"), a.option) {\n if (t === \"market\")\n throw new g(t + \" is not a valid order type for the \" + e + \" market\").exchange(this.id);\n } else {\n const R = this.safeList(a.info, \"orderTypes\");\n if (!this.inArray(B, R))\n throw u !== B ? new g(\"stopPrice parameter is not allowed for \" + e + \" \" + t + \" orders\").exchange(this.id) : new g(t + \" is not a valid order type for the \" + e + \" market\").exchange(this.id);\n }\n const se = W ? \"newClientStrategyId\" : \"newClientOrderId\";\n if (c === void 0) {\n const R = this.safeDict(this.options, \"broker\", {}), U = a.contract ? \"x-xcKtGhcu\" : \"x-R4BD3S82\", Y = this.safeString(R, o, U);\n l[se] = Y + this.uuid22();\n } else\n l[se] = c;\n let $;\n p || ($ = this.isPostOnly(f, u === \"LIMIT_MAKER\", r), (a.spot || o === \"margin\") && ($ && (B = \"LIMIT_MAKER\"), m === \"isolated\" && (l.isIsolated = !0)));\n const te = W ? \"strategyType\" : \"type\";\n l[te] = B;\n let E = !1, N = !1, L = !1, z = !1;\n if (B === \"MARKET\")\n if (a.spot)\n if (this.safeBool(this.options, \"quoteOrderQty\", !0)) {\n const U = this.safeString2(r, \"quoteOrderQty\", \"cost\");\n if (U !== void 0)\n l.quoteOrderQty = this.costToPrecision(e, U);\n else if (n !== void 0) {\n const Y = this.numberToString(s), J = this.numberToString(n), ae = P.stringMul(Y, J);\n l.quoteOrderQty = this.costToPrecision(e, ae);\n } else\n z = !0;\n } else\n z = !0;\n else\n z = !0;\n else if (B === \"LIMIT\")\n N = !0, E = !0, z = !0;\n else if (B === \"STOP_LOSS\" || B === \"TAKE_PROFIT\")\n L = !0, z = !0, (a.linear || a.inverse) && (N = !0);\n else if (B === \"STOP_LOSS_LIMIT\" || B === \"TAKE_PROFIT_LIMIT\")\n z = !0, L = !0, N = !0, E = !0;\n else if (B === \"LIMIT_MAKER\")\n N = !0, z = !0;\n else if (B === \"STOP\")\n z = !0, L = !0, N = !0;\n else if (B === \"STOP_MARKET\" || B === \"TAKE_PROFIT_MARKET\")\n this.safeBool(r, \"closePosition\") === void 0 && (z = !0), L = !0;\n else if (B === \"TRAILING_STOP_MARKET\" && (z = !0, x === void 0))\n throw new g(\"It requires a trailingPercent param for a \" + t + \" order\").exchange(this.id);\n if (z && (p ? l.quantity = this.parseToNumeric(s) : l.quantity = this.amountToPrecision(e, s)), N) {\n if (n === void 0)\n throw new g(\"It requires a price argument for a \" + t + \" order\").exchange(this.id);\n l.price = this.priceToPrecision(e, n);\n }\n if (L) {\n if (a.contract) {\n if (Q === void 0)\n throw new g(\"It requires a stopPrice extra param for a \" + t + \" order\").exchange(this.id);\n } else if (b === void 0 && Q === void 0)\n throw new g(\"It requires a stopPrice or trailingDelta param for a \" + t + \" order\").exchange(this.id);\n Q !== void 0 && (l.stopPrice = this.priceToPrecision(e, Q));\n }\n E && this.safeString(r, \"timeInForce\") === void 0 && (l.timeInForce = this.options.defaultTimeInForce), !p && a.contract && $ && (l.timeInForce = \"GTX\"), this.safeString(r, \"timeInForce\") === \"PO\" && (r = this.omit(r, \"timeInForce\"));\n const K = this.omit(r, [\"type\", \"newClientOrderId\", \"clientOrderId\", \"postOnly\", \"stopLossPrice\", \"takeProfitPrice\", \"stopPrice\", \"triggerPrice\", \"trailingTriggerPrice\", \"trailingPercent\", \"quoteOrderQty\", \"cost\", \"test\"]);\n return this.extend(l, K);\n }\n async createMarketOrderWithCost(e, t, i, s = {}) {\n await this.loadMarkets();\n const n = this.market(e);\n if (!n.spot)\n throw new ge(n.type).addMessage(\"It supports spot orders only\").exchange(this.id);\n return s.quoteOrderQty = i, await this.createOrder(e, \"market\", t, i, void 0, s);\n }\n async createMarketBuyOrderWithCost(e, t, i = {}) {\n await this.loadMarkets();\n const s = this.market(e);\n if (!s.spot)\n throw new ge(s.type).addMessage(\"It supports spot orders only\").exchange(this.id);\n return i.quoteOrderQty = t, await this.createOrder(e, \"market\", \"buy\", t, void 0, i);\n }\n async createMarketSellOrderWithCost(e, t, i = {}) {\n await this.loadMarkets();\n const s = this.market(e);\n if (!s.spot)\n throw new ge(s.type).addMessage(\"It supports spot orders only\").exchange(this.id);\n return i.quoteOrderQty = t, await this.createOrder(e, \"market\", \"sell\", t, void 0, i);\n }\n async fetchOrder(e, t = void 0, i = {}) {\n if (t === void 0)\n throw new g(\"fetchOrder() requires a symbol argument\").exchange(this.id);\n await this.loadMarkets();\n const s = this.market(t), n = this.safeString2(this.options, \"fetchOrder\", \"defaultType\", \"spot\"), r = this.safeString(i, \"type\", n);\n let a;\n [a, i] = this.handleMarginModeAndParams(\"fetchOrder\", i);\n let o;\n [o, i] = this.handleOptionAndParams2(i, \"fetchOrder\", \"papi\", \"portfolioMargin\", !1);\n const c = {\n symbol: s.id\n }, u = this.safeString2(i, \"origClientOrderId\", \"clientOrderId\");\n u !== void 0 ? s.option ? c.clientOrderId = u : c.origClientOrderId = u : c.orderId = e, i = this.omit(i, [\"type\", \"clientOrderId\", \"origClientOrderId\"]);\n let f;\n return s.option ? f = await this.eapiPrivateGetOrder(this.extend(c, i)) : s.linear ? o ? f = await this.papiGetUmOrder(this.extend(c, i)) : f = await this.fapiPrivateGetOrder(this.extend(c, i)) : s.inverse ? o ? f = await this.papiGetCmOrder(this.extend(c, i)) : f = await this.dapiPrivateGetOrder(this.extend(c, i)) : r === \"margin\" || a !== void 0 || o ? o ? f = await this.papiGetMarginOrder(this.extend(c, i)) : (a === \"isolated\" && (c.isIsolated = !0), f = await this.sapiGetMarginOrder(this.extend(c, i))) : f = await this.privateGetOrder(this.extend(c, i)), this.parseOrder(f, s);\n }\n async fetchOrders(e = void 0, t = void 0, i = void 0, s = {}) {\n if (e === void 0)\n throw new g(\"fetchOrders() requires a symbol argument\").exchange(this.id);\n await this.loadMarkets();\n let n = !1;\n if ([n, s] = this.handleOptionAndParams(s, \"fetchOrders\", \"paginate\"), n)\n return await this.fetchPaginatedCallDynamic(\"fetchOrders\", e, t, i, s);\n const r = this.market(e), a = this.safeString2(this.options, \"fetchOrders\", \"defaultType\", r.type), o = this.safeString(s, \"type\", a);\n let c;\n [c, s] = this.handleMarginModeAndParams(\"fetchOrders\", s);\n let u;\n [u, s] = this.handleOptionAndParams2(s, \"fetchOrders\", \"papi\", \"portfolioMargin\", !1);\n const f = this.safeBool2(s, \"stop\", \"conditional\");\n s = this.omit(s, [\"stop\", \"conditional\", \"type\"]);\n let h = {\n symbol: r.id\n };\n [h, s] = this.handleUntilOption(\"endTime\", h, s), t !== void 0 && (h.startTime = t), i !== void 0 && (h.limit = i);\n let l;\n return r.option ? l = await this.eapiPrivateGetHistoryOrders(this.extend(h, s)) : r.linear ? u ? f ? l = await this.papiGetUmConditionalAllOrders(this.extend(h, s)) : l = await this.papiGetUmAllOrders(this.extend(h, s)) : l = await this.fapiPrivateGetAllOrders(this.extend(h, s)) : r.inverse ? u ? f ? l = await this.papiGetCmConditionalAllOrders(this.extend(h, s)) : l = await this.papiGetCmAllOrders(this.extend(h, s)) : l = await this.dapiPrivateGetAllOrders(this.extend(h, s)) : u ? l = await this.papiGetMarginAllOrders(this.extend(h, s)) : o === \"margin\" || c !== void 0 ? (c === \"isolated\" && (h.isIsolated = !0), l = await this.sapiGetMarginAllOrders(this.extend(h, s))) : l = await this.privateGetAllOrders(this.extend(h, s)), this.parseOrders(l, r, t, i);\n }\n async fetchOpenOrders(e = void 0, t = void 0, i = void 0, s = {}) {\n await this.loadMarkets();\n let n, r;\n const a = {};\n let o;\n [o, s] = this.handleMarginModeAndParams(\"fetchOpenOrders\", s);\n let c;\n [c, s] = this.handleOptionAndParams2(s, \"fetchOpenOrders\", \"papi\", \"portfolioMargin\", !1);\n const u = this.safeBool2(s, \"stop\", \"conditional\");\n if (e !== void 0) {\n n = this.market(e), a.symbol = n.id;\n const l = this.safeString2(this.options, \"fetchOpenOrders\", \"defaultType\", \"spot\"), p = \"type\" in n ? n.type : l;\n r = this.safeString(s, \"type\", p);\n } else if (this.options.warnOnFetchOpenOrdersWithoutSymbol) {\n const p = this.symbols.length, m = this.parseToInt(p / 2);\n throw new O().overwriteMessage(\"fetchOpenOrders() WARNING: fetching open orders without specifying a symbol is rate-limited to one call per \" + m.toString() + \" seconds. Do not call this method frequently to avoid ban. Set \" + this.id + '.options[\"warnOnFetchOpenOrdersWithoutSymbol\"] = false to suppress this warning message.').exchange(this.id);\n } else {\n const l = this.safeString2(this.options, \"fetchOpenOrders\", \"defaultType\", \"spot\");\n r = this.safeString(s, \"type\", l);\n }\n let f;\n [f, s] = this.handleSubTypeAndParams(\"fetchOpenOrders\", n, s), s = this.omit(s, [\"type\", \"stop\", \"conditional\"]);\n let h;\n if (r === \"option\")\n t !== void 0 && (a.startTime = t), i !== void 0 && (a.limit = i), h = await this.eapiPrivateGetOpenOrders(this.extend(a, s));\n else if (this.isLinear(r, f))\n c ? u ? h = await this.papiGetUmConditionalOpenOrders(this.extend(a, s)) : h = await this.papiGetUmOpenOrders(this.extend(a, s)) : h = await this.fapiPrivateGetOpenOrders(this.extend(a, s));\n else if (this.isInverse(r, f))\n c ? u ? h = await this.papiGetCmConditionalOpenOrders(this.extend(a, s)) : h = await this.papiGetCmOpenOrders(this.extend(a, s)) : h = await this.dapiPrivateGetOpenOrders(this.extend(a, s));\n else if (r === \"margin\" || o !== void 0)\n if (c)\n h = await this.papiGetMarginOpenOrders(this.extend(a, s));\n else {\n if (o === \"isolated\" && (a.isIsolated = !0, e === void 0))\n throw new g(\"fetchOpenOrders() requires a symbol argument for isolated markets\").exchange(this.id);\n h = await this.sapiGetMarginOpenOrders(this.extend(a, s));\n }\n else\n h = await this.privateGetOpenOrders(this.extend(a, s));\n return this.parseOrders(h, n, t, i);\n }\n async fetchClosedOrders(e = void 0, t = void 0, i = void 0, s = {}) {\n if (e === void 0)\n throw new g(\"fetchClosedOrders() requires a symbol argument\").exchange(this.id);\n const n = await this.fetchOrders(e, t, void 0, s), r = this.filterBy(n, \"status\", \"closed\");\n return this.filterBySinceLimit(r, t, i);\n }\n async fetchCanceledOrders(e = void 0, t = void 0, i = void 0, s = {}) {\n if (e === void 0)\n throw new g(\"fetchCanceledOrders() requires a symbol argument\").exchange(this.id);\n const n = await this.fetchOrders(e, t, void 0, s), r = this.filterBy(n, \"status\", \"canceled\");\n return this.filterBySinceLimit(r, t, i);\n }\n async cancelOrder(e, t = void 0, i = {}) {\n if (t === void 0)\n throw new g(\"cancelOrder() requires a symbol argument\").exchange(this.id);\n await this.loadMarkets();\n const s = this.market(t), n = this.safeString2(this.options, \"cancelOrder\", \"defaultType\", \"spot\"), r = this.safeString(i, \"type\", n);\n let a;\n [a, i] = this.handleMarginModeAndParams(\"cancelOrder\", i);\n let o;\n [o, i] = this.handleOptionAndParams2(i, \"cancelOrder\", \"papi\", \"portfolioMargin\", !1);\n const c = this.safeBool2(i, \"stop\", \"conditional\"), u = {\n symbol: s.id\n }, f = this.safeStringN(i, [\"origClientOrderId\", \"clientOrderId\", \"newClientStrategyId\"]);\n f !== void 0 ? s.option ? u.clientOrderId = f : o && c ? u.newClientStrategyId = f : u.origClientOrderId = f : o && c ? u.strategyId = e : u.orderId = e, i = this.omit(i, [\"type\", \"origClientOrderId\", \"clientOrderId\", \"newClientStrategyId\", \"stop\", \"conditional\"]);\n let h;\n return s.option ? h = await this.eapiPrivateDeleteOrder(this.extend(u, i)) : s.linear ? o ? c ? h = await this.papiDeleteUmConditionalOrder(this.extend(u, i)) : h = await this.papiDeleteUmOrder(this.extend(u, i)) : h = await this.fapiPrivateDeleteOrder(this.extend(u, i)) : s.inverse ? o ? c ? h = await this.papiDeleteCmConditionalOrder(this.extend(u, i)) : h = await this.papiDeleteCmOrder(this.extend(u, i)) : h = await this.dapiPrivateDeleteOrder(this.extend(u, i)) : r === \"margin\" || a !== void 0 || o ? o ? h = await this.papiDeleteMarginOrder(this.extend(u, i)) : (a === \"isolated\" && (u.isIsolated = !0), h = await this.sapiDeleteMarginOrder(this.extend(u, i))) : h = await this.privateDeleteOrder(this.extend(u, i)), this.parseOrder(h, s);\n }\n async cancelAllOrders(e = void 0, t = {}) {\n if (e === void 0)\n throw new g(\"cancelAllOrders() requires a symbol argument\").exchange(this.id);\n await this.loadMarkets();\n const i = this.market(e), s = {\n symbol: i.id\n };\n let n;\n [n, t] = this.handleOptionAndParams2(t, \"cancelAllOrders\", \"papi\", \"portfolioMargin\", !1);\n const r = this.safeBool2(t, \"stop\", \"conditional\"), a = this.safeString(t, \"type\", i.type);\n t = this.omit(t, [\"type\", \"stop\", \"conditional\"]);\n let o;\n [o, t] = this.handleMarginModeAndParams(\"cancelAllOrders\", t);\n let c;\n return i.option ? c = await this.eapiPrivateDeleteAllOpenOrders(this.extend(s, t)) : i.linear ? n ? r ? c = await this.papiDeleteUmConditionalAllOpenOrders(this.extend(s, t)) : c = await this.papiDeleteUmAllOpenOrders(this.extend(s, t)) : c = await this.fapiPrivateDeleteAllOpenOrders(this.extend(s, t)) : i.inverse ? n ? r ? c = await this.papiDeleteCmConditionalAllOpenOrders(this.extend(s, t)) : c = await this.papiDeleteCmAllOpenOrders(this.extend(s, t)) : c = await this.dapiPrivateDeleteAllOpenOrders(this.extend(s, t)) : a === \"margin\" || o !== void 0 ? n ? c = await this.papiDeleteMarginAllOpenOrders(this.extend(s, t)) : (o === \"isolated\" && (s.isIsolated = !0), c = await this.sapiDeleteMarginOpenOrders(this.extend(s, t))) : c = await this.privateDeleteOpenOrders(this.extend(s, t)), Array.isArray(c) ? this.parseOrders(c, i) : c;\n }\n async cancelOrders(e, t = void 0, i = {}) {\n if (t === void 0)\n throw new g(\"cancelOrders() requires a symbol argument\").exchange(this.id);\n await this.loadMarkets();\n const s = this.market(t);\n if (!s.contract)\n throw new ge(s.type).addMessage(\"cancelOrders is only supported for swap markets.\").exchange(this.id);\n const n = {\n symbol: s.id,\n orderidlist: e\n };\n let r;\n return s.linear ? r = await this.fapiPrivateDeleteBatchOrders(this.extend(n, i)) : s.inverse && (r = await this.dapiPrivateDeleteBatchOrders(this.extend(n, i))), this.parseOrders(r, s);\n }\n async fetchOrderTrades(e, t = void 0, i = void 0, s = void 0, n = {}) {\n if (t === void 0)\n throw new g(\"fetchOrderTrades() requires a symbol argument\").exchange(this.id);\n await this.loadMarkets();\n const r = this.market(t), a = this.safeString(n, \"type\", r.type);\n if (n = this.omit(n, \"type\"), a !== \"spot\")\n throw new ge(a).addMessage(\"It supports spot markets only\").exchange(this.id);\n const o = {\n orderId: e\n };\n return await this.fetchMyTrades(t, i, s, this.extend(o, n));\n }\n async fetchMyTrades(e = void 0, t = void 0, i = void 0, s = {}) {\n await this.loadMarkets();\n let n = !1;\n if ([n, s] = this.handleOptionAndParams(s, \"fetchMyTrades\", \"paginate\"), n)\n return await this.fetchPaginatedCallDynamic(\"fetchMyTrades\", e, t, i, s);\n const r = {};\n let a, o, c;\n e !== void 0 && (a = this.market(e), r.symbol = a.id), [o, s] = this.handleMarketTypeAndParams(\"fetchMyTrades\", a, s);\n let u = this.safeInteger2(s, \"until\", \"endTime\");\n if (t !== void 0) {\n const h = t;\n r.startTime = h;\n const l = this.milliseconds(), p = 7 * 24 * 60 * 60 * 1e3;\n l - h >= p && u === void 0 && a.linear && (u = this.sum(h, p), u = Math.min(u, l));\n }\n u !== void 0 && (r.endTime = u, s = this.omit(s, [\"endTime\", \"until\"])), i !== void 0 && ((o === \"option\" || a.contract) && (i = Math.min(i, 1e3)), r.limit = i);\n let f;\n if (o === \"option\")\n f = await this.eapiPrivateGetUserTrades(this.extend(r, s));\n else {\n if (e === void 0)\n throw new g(\"It requires a symbol argument\").exchange(this.id);\n [c, s] = this.handleMarginModeAndParams(\"fetchMyTrades\", s);\n let h;\n [h, s] = this.handleOptionAndParams2(s, \"fetchMyTrades\", \"papi\", \"portfolioMargin\", !1), o === \"spot\" || o === \"margin\" ? h ? f = await this.papiGetMarginMyTrades(this.extend(r, s)) : o === \"margin\" || c !== void 0 ? (c === \"isolated\" && (r.isIsolated = !0), f = await this.sapiGetMarginMyTrades(this.extend(r, s))) : f = await this.privateGetMyTrades(this.extend(r, s)) : a.linear ? h ? f = await this.papiGetUmUserTrades(this.extend(r, s)) : f = await this.fapiPrivateGetUserTrades(this.extend(r, s)) : a.inverse && (h ? f = await this.papiGetCmUserTrades(this.extend(r, s)) : f = await this.dapiPrivateGetUserTrades(this.extend(r, s)));\n }\n return this.parseTrades(f, a, t, i);\n }\n async fetchDeposits(e = void 0, t = void 0, i = void 0, s = {}) {\n await this.loadMarkets();\n let n = !1;\n if ([n, s] = this.handleOptionAndParams(s, \"fetchDeposits\", \"paginate\"), n)\n return await this.fetchPaginatedCallDynamic(\"fetchDeposits\", e, t, i, s);\n let r, a;\n const o = {}, c = this.safeDict(this.options, \"legalMoney\", {}), u = this.safeBool(s, \"fiat\", !1);\n s = this.omit(s, \"fiatOnly\");\n const f = this.safeInteger(s, \"until\");\n if (s = this.omit(s, \"until\"), u || e in c) {\n e !== void 0 && (r = this.currency(e)), o.transactionType = 0, t !== void 0 && (o.beginTime = t), f !== void 0 && (o.endTime = f);\n const h = await this.sapiGetFiatOrders(this.extend(o, s));\n a = this.safeValue(h, \"data\");\n } else {\n if (e !== void 0 && (r = this.currency(e), o.coin = r.id), t !== void 0) {\n o.startTime = t;\n let h = this.sum(t, 7776e6);\n f !== void 0 && (h = Math.min(h, f)), o.endTime = h;\n }\n i !== void 0 && (o.limit = i), a = await this.sapiGetCapitalDepositHisrec(this.extend(o, s));\n }\n for (let h = 0; h < a.length; h++)\n a[h].type = \"deposit\";\n return this.parseTransactions(a, r, t, i);\n }\n async fetchWithdrawals(e = void 0, t = void 0, i = void 0, s = {}) {\n await this.loadMarkets();\n let n = !1;\n if ([n, s] = this.handleOptionAndParams(s, \"fetchWithdrawals\", \"paginate\"), n)\n return await this.fetchPaginatedCallDynamic(\"fetchWithdrawals\", e, t, i, s);\n const r = this.safeDict(this.options, \"legalMoney\", {}), a = this.safeBool(s, \"fiat\", !1);\n s = this.omit(s, \"fiatOnly\");\n const o = {}, c = this.safeInteger(s, \"until\");\n c !== void 0 && (s = this.omit(s, \"until\"), o.endTime = c);\n let u, f;\n if (a || e in r) {\n e !== void 0 && (f = this.currency(e)), o.transactionType = 1, t !== void 0 && (o.beginTime = t);\n const h = await this.sapiGetFiatOrders(this.extend(o, s));\n u = this.safeValue(h, \"data\");\n } else\n e !== void 0 && (f = this.currency(e), o.coin = f.id), t !== void 0 && (o.startTime = t, o.endTime = this.sum(t, 7776e6)), i !== void 0 && (o.limit = i), u = await this.sapiGetCapitalWithdrawHistory(this.extend(o, s));\n for (let h = 0; h < u.length; h++)\n u[h].type = \"withdrawal\";\n return this.parseTransactions(u, f, t, i);\n }\n parseTransactionStatusByType(e, t = void 0) {\n const i = {\n deposit: {\n 0: \"pending\",\n 1: \"ok\",\n 6: \"ok\",\n // Fiat\n // Processing, Failed, Successful, Finished, Refunding, Refunded, Refund Failed, Order Partial credit Stopped\n Processing: \"pending\",\n Failed: \"failed\",\n Successful: \"ok\",\n Refunding: \"canceled\",\n Refunded: \"canceled\",\n \"Refund Failed\": \"failed\"\n },\n withdrawal: {\n 0: \"pending\",\n 1: \"canceled\",\n 2: \"pending\",\n 3: \"failed\",\n 4: \"pending\",\n 5: \"failed\",\n 6: \"ok\",\n // Fiat\n // Processing, Failed, Successful, Finished, Refunding, Refunded, Refund Failed, Order Partial credit Stopped\n Processing: \"pending\",\n Failed: \"failed\",\n Successful: \"ok\",\n Refunding: \"canceled\",\n Refunded: \"canceled\",\n \"Refund Failed\": \"failed\"\n }\n }, s = this.safeDict(i, t, {});\n return this.safeString(s, e, e);\n }\n parseTransaction(e, t = void 0) {\n const i = this.safeString2(e, \"id\", \"orderNo\"), s = this.safeString(e, \"address\");\n let n = this.safeString(e, \"addressTag\");\n n !== void 0 && n.length < 1 && (n = void 0);\n let r = this.safeString(e, \"txId\");\n r !== void 0 && r.indexOf(\"Internal transfer \") >= 0 && (r = r.slice(18));\n const a = this.safeString2(e, \"coin\", \"fiatCurrency\");\n let o = this.safeCurrencyCode(a, t), c;\n c = this.safeInteger2(e, \"insertTime\", \"createTime\"), c === void 0 && (c = this.parse8601(this.safeString(e, \"applyTime\")));\n const u = this.safeInteger2(e, \"successTime\", \"updateTime\");\n let f = this.safeString(e, \"type\");\n if (f === void 0) {\n const b = this.safeString(e, \"transactionType\");\n b !== void 0 && (f = b === \"0\" ? \"deposit\" : \"withdrawal\");\n const T = this.safeValue(this.options, \"legalMoneyCurrenciesById\");\n o = this.safeString(T, o, o);\n }\n const h = this.parseTransactionStatusByType(this.safeString(e, \"status\"), f), l = this.safeNumber(e, \"amount\"), p = this.safeNumber2(e, \"transactionFee\", \"totalFee\");\n let m;\n p !== void 0 && (m = { currency: o, cost: p });\n const y = this.safeInteger(e, \"transferType\");\n let w;\n y !== void 0 && (w = !!y);\n const S = this.safeString(e, \"network\");\n return {\n info: e,\n id: i,\n txid: r,\n timestamp: c,\n datetime: this.iso8601(c),\n network: S,\n address: s,\n addressTo: s,\n addressFrom: void 0,\n tag: n,\n tagTo: n,\n tagFrom: void 0,\n type: f,\n amount: l,\n currency: o,\n status: h,\n updated: u,\n internal: w,\n comment: void 0,\n fee: m\n };\n }\n parseTransferStatus(e) {\n const t = {\n CONFIRMED: \"ok\"\n };\n return this.safeString(t, e, e);\n }\n parseTransfer(e, t = void 0) {\n const i = this.safeString(e, \"tranId\"), s = this.safeString(e, \"asset\"), n = this.safeCurrencyCode(s, t), r = this.safeNumber(e, \"amount\"), a = this.safeString(e, \"type\");\n let o, c;\n const u = this.safeDict(this.options, \"accountsById\", {});\n if (a !== void 0) {\n const l = a.split(\"_\");\n o = this.safeValue(l, 0), c = this.safeValue(l, 1), o = this.safeString(u, o, o), c = this.safeString(u, c, c);\n }\n const f = this.safeInteger(e, \"timestamp\"), h = this.parseTransferStatus(this.safeString(e, \"status\"));\n return {\n info: e,\n id: i,\n timestamp: f,\n datetime: this.iso8601(f),\n currency: n,\n amount: r,\n fromAccount: o,\n toAccount: c,\n status: h\n };\n }\n // https://binance-docs.github.io/apidocs/spot/en/#get-summary-of-sub-account-39-s-futures-account-v2-for-master-account\n // https://binance-docs.github.io/apidocs/spot/en/#get-summary-of-sub-account-39-s-margin-account-for-master-account\n // https://binance-docs.github.io/apidocs/spot/en/#query-sub-account-spot-assets-summary-for-master-account\n // https://binance-docs.github.io/apidocs/spot/en/#query-managed-sub-account-margin-asset-details-for-investor-master-account-user_data\n async fetchSubAccountBalances(e, t = {}) {\n await this.loadMarkets();\n const i = await this.sapiV4GetSubAccountAssets(this.extend({ email: e })), s = {}, n = this.safeValue(i, \"balances\", []);\n for (let r = 0; r < n.length; r++) {\n const a = n[r], o = this.safeString(a, \"asset\"), c = this.safeCurrencyCode(o), u = this.safeString(a, \"free\"), f = this.safeString(a, \"locked\"), h = this.sum(u, f);\n s[c] = {\n free: this.parseNumber(u),\n used: this.parseNumber(f),\n total: this.parseNumber(h)\n };\n }\n return {\n spot: s\n };\n }\n async getSubAccounts() {\n await this.loadMarkets();\n const e = await this.sapiGetSubAccountList(), t = this.safeValue(e, \"subAccounts\", []);\n return t == null ? void 0 : t.map((i) => ({\n uid: this.safeString(i, \"email\")\n }));\n }\n async subAccountTransfer(e, t, i, s, n, r, a = {}) {\n await this.loadMarkets();\n const o = this.currency(e), c = {\n asset: o.id,\n amount: this.currencyToPrecision(e, t),\n fromAccountType: i,\n toAccountType: s,\n fromEmail: n,\n toEmail: r\n }, u = await this.sapiPostSubAccountUniversalTransfer(this.extend(c, a));\n return this.parseTransfer(u, o);\n }\n async transfer(e, t, i, s, n = {}) {\n await this.loadMarkets();\n const r = this.currency(e), a = {\n asset: r.id,\n amount: this.currencyToPrecision(e, t)\n };\n if (a.type = this.safeString(n, \"type\"), n = this.omit(n, \"type\"), a.type === void 0) {\n const c = this.safeString(n, \"symbol\");\n let u;\n c !== void 0 && (u = this.market(c), n = this.omit(n, \"symbol\"));\n let f = this.convertTypeToAccount(i).toUpperCase(), h = this.convertTypeToAccount(s).toUpperCase(), l;\n if (u !== void 0 && (l = u.id), f === \"ISOLATED\" && c === void 0)\n throw new g('It requires params[\"symbol\"] when fromAccount is ' + i).exchange(this.id);\n if (h === \"ISOLATED\" && c === void 0)\n throw new g('It requires params[\"symbol\"] when toAccount is ' + s).exchange(this.id);\n const p = this.safeDict(this.options, \"accountsById\", {}), m = !(f in p), y = !(h in p);\n if (m && u === void 0 && (l = f), y && u === void 0 && (l = h), m || y) {\n const w = f === \"UMFUTURE\" || f === \"CMFUTURE\", S = h === \"UMFUTURE\" || h === \"CMFUTURE\", b = f === \"MAIN\", T = h === \"MAIN\";\n if ((m || y) && (w || S || (f === \"FUNDING\" || h === \"FUNDING\") || (f === \"OPTION\" || h === \"OPTION\")))\n throw new Vt().overwriteMessage(`Transfer not allowed between ${i} and ${s}`).exchange(this.id);\n T && m ? (f = \"ISOLATED_MARGIN\", a.fromSymbol = l) : b && y ? (h = \"ISOLATED_MARGIN\", a.toSymbol = l) : m && y ? (a.fromSymbol = f, a.toSymbol = h, f = \"ISOLATEDMARGIN\", h = \"ISOLATEDMARGIN\") : (m && (a.fromSymbol = l, f = \"ISOLATEDMARGIN\"), y && (a.toSymbol = l, h = \"ISOLATEDMARGIN\")), a.type = f + \"_\" + h;\n } else\n a.type = f + \"_\" + h;\n }\n const o = await this.sapiPostAssetTransfer(this.extend(a, n));\n return this.parseTransfer(o, r);\n }\n async fetchTransfers(e = void 0, t = void 0, i = void 0, s = {}) {\n await this.loadMarkets();\n let n = !1;\n if ([n, s] = this.handleOptionAndParams(s, \"fetchTransfers\", \"paginate\"), n)\n return await this.fetchPaginatedCallDynamic(\"fetchTransfers\", e, t, i, s);\n let r;\n e !== void 0 && (r = this.currency(e));\n const a = this.safeString2(this.options, \"fetchTransfers\", \"defaultType\", \"spot\"), o = this.safeString(s, \"fromAccount\", a), c = o === \"future\" ? \"spot\" : \"future\", u = this.safeString(s, \"toAccount\", c);\n let f = this.safeString(s, \"type\");\n const h = this.safeDict(this.options, \"accountsByType\", {}), l = this.safeString(h, o), p = this.safeString(h, u);\n if (f === void 0) {\n if (l === void 0) {\n const b = Object.keys(h);\n throw new g(\"fromAccount parameter must be one of \" + b.join(\", \")).exchange(this.id);\n }\n if (p === void 0) {\n const b = Object.keys(h);\n throw new g(\"toAccount parameter must be one of \" + b.join(\", \")).exchange(this.id);\n }\n f = l + \"_\" + p;\n }\n const m = {\n type: f\n };\n t !== void 0 && (m.startTime = t), i !== void 0 && (m.size = i);\n const y = this.safeInteger(s, \"until\");\n y !== void 0 && (s = this.omit(s, \"until\"), m.endTime = y);\n const w = await this.sapiGetAssetTransfer(this.extend(m, s)), S = this.safeList(w, \"rows\", []);\n return this.parseTransfers(S, r, t, i);\n }\n async fetchDepositAddress(e, t = {}) {\n await this.loadMarkets();\n const s = {\n coin: this.currency(e).id\n // 'network': 'ETH', // 'BSC', 'XMR', you can get network and isDefault in networkList in the response of sapiGetCapitalConfigDetail\n }, n = this.safeDict(this.options, \"networks\", {});\n let r = this.safeStringUpper(t, \"network\");\n r = this.safeString(n, r, r), r !== void 0 && (s.network = r, t = this.omit(t, \"network\"));\n const a = await this.sapiGetCapitalDepositAddress(this.extend(s, t)), o = this.safeString(a, \"address\"), c = this.safeString(a, \"url\");\n let u;\n if (c !== void 0) {\n const h = this.safeDict(this.options, \"reverseNetworks\", {}), l = c.split(\"/\");\n let p = this.safeString(l, 2);\n if (p === \"blockchair.com\" || p === \"viewblock.io\") {\n const y = this.safeString(l, 3);\n y !== void 0 && (p = p + \"/\" + y);\n }\n u = this.safeString(h, p);\n const m = this.safeValue(this.options, \"impliedNetworks\", {\n ETH: { ERC20: \"ETH\" },\n TRX: { TRC20: \"TRX\" }\n });\n if (e in m) {\n const y = this.safeDict(m, e, {});\n u = this.safeString(y, u, u);\n }\n }\n let f = this.safeString(a, \"tag\", \"\");\n return f.length === 0 && (f = void 0), this.checkAddress(o), {\n currency: e,\n address: o,\n tag: f,\n info: a,\n network: u\n };\n }\n async fetchTransactionFees(e = void 0, t = {}) {\n await this.loadMarkets();\n const i = await this.sapiGetCapitalConfigGetall(t), s = {};\n for (let n = 0; n < i.length; n++) {\n const r = i[n], a = this.safeString(r, \"coin\"), o = this.safeCurrencyCode(a), c = this.safeList(r, \"networkList\", []);\n s[o] = {};\n for (let u = 0; u < c.length; u++) {\n const f = c[u], h = this.safeString(f, \"network\"), l = this.safeCurrencyCode(h), p = this.safeNumber(f, \"withdrawFee\");\n s[o][l] = p;\n }\n }\n return {\n withdraw: s,\n deposit: {},\n info: i\n };\n }\n async fetchDepositWithdrawFees(e = void 0, t = {}) {\n await this.loadMarkets();\n const i = await this.sapiGetCapitalConfigGetall(t);\n return this.parseDepositWithdrawFees(i, e, \"coin\");\n }\n parseDepositWithdrawFee(e, t = void 0) {\n const i = this.safeList(e, \"networkList\", []), s = this.depositWithdrawFee(e);\n for (let n = 0; n < i.length; n++) {\n const r = i[n], a = this.safeString(r, \"network\"), o = this.networkIdToCode(a), c = this.safeNumber(r, \"withdrawFee\");\n this.safeBool(r, \"isDefault\") === !0 && (s.withdraw = {\n fee: c,\n percentage: void 0\n }), s.networks[o] = {\n withdraw: {\n fee: c,\n percentage: void 0\n },\n deposit: {\n fee: void 0,\n percentage: void 0\n }\n };\n }\n return s;\n }\n async withdraw(e, t, i, s = void 0, n = {}) {\n [s, n] = this.handleWithdrawTagAndParams(s, n), this.checkAddress(i), await this.loadMarkets();\n const r = this.currency(e), a = {\n forceProxy: !0,\n coin: r.id,\n address: i\n // https://binance-docs.github.io/apidocs/spot/en/#withdraw-sapi\n // issue sapiGetCapitalConfigGetall () to get networks for withdrawing USDT ERC20 vs USDT Omni\n // 'network': 'ETH', // 'BTC', 'TRX', etc, optional\n };\n s !== void 0 && (a.addressTag = s);\n const o = this.safeDict(this.options, \"networks\", {});\n let c = this.safeStringUpper(n, \"network\");\n const u = this.currencyToPrecision(e, t, c);\n a.amount = u, c = this.safeString(o, c, c), c !== void 0 && (a.network = c, n = this.omit(n, \"network\"));\n const f = await this.sapiPostCapitalWithdrawApply(this.extend(a, n));\n return this.parseTransaction(f, r);\n }\n parseTradingFee(e, t = void 0) {\n const i = this.safeString(e, \"symbol\"), s = this.safeSymbol(i, t, void 0, \"spot\");\n return {\n info: e,\n symbol: s,\n maker: this.safeNumber2(e, \"makerCommission\", \"makerCommissionRate\"),\n taker: this.safeNumber2(e, \"takerCommission\", \"takerCommissionRate\")\n };\n }\n async fetchTradingFee(e, t = {}) {\n await this.loadMarkets();\n const i = this.market(e), s = i.type;\n let n;\n [n, t] = this.handleSubTypeAndParams(\"fetchTradingFee\", i, t);\n let r;\n [r, t] = this.handleOptionAndParams2(t, \"fetchTradingFee\", \"papi\", \"portfolioMargin\", !1);\n const a = this.isLinear(s, n), o = this.isInverse(s, n), c = {\n symbol: i.id\n };\n let u;\n a ? r ? u = await this.papiGetUmCommissionRate(this.extend(c, t)) : u = await this.fapiPrivateGetCommissionRate(this.extend(c, t)) : o ? r ? u = await this.papiGetCmCommissionRate(this.extend(c, t)) : u = await this.dapiPrivateGetCommissionRate(this.extend(c, t)) : u = await this.sapiGetAssetTradeFee(this.extend(c, t));\n let f = u;\n return Array.isArray(f) && (f = this.safeDict(f, 0, {})), this.parseTradingFee(f, i);\n }\n async fetchTradingFees(e = {}) {\n await this.loadMarkets();\n let t;\n [t, e] = this.handleMarketTypeAndParams(\"fetchTradingFees\", void 0, e);\n let i;\n [i, e] = this.handleSubTypeAndParams(\"fetchTradingFees\", void 0, e, \"linear\");\n const s = t === \"spot\" || t === \"margin\", n = this.isLinear(t, i), r = this.isInverse(t, i);\n let a;\n if (s ? a = await this.sapiGetAssetTradeFee(e) : n ? a = await this.fapiPrivateV2GetAccount(e) : r && (a = await this.dapiPrivateGetAccount(e)), s) {\n const o = {};\n for (let c = 0; c < a.length; c++) {\n const u = this.parseTradingFee(a[c]), f = u.symbol;\n o[f] = u;\n }\n return o;\n } else if (n) {\n const o = Object.keys(this.markets), c = {}, u = this.safeInteger(a, \"feeTier\"), f = this.fees.linear.trading.tiers, h = f.maker[u][1], l = f.taker[u][1];\n for (let p = 0; p < o.length; p++) {\n const m = o[p];\n this.markets[m].linear && (c[m] = {\n info: {\n feeTier: u\n },\n symbol: m,\n maker: h,\n taker: l\n });\n }\n return c;\n } else if (r) {\n const o = Object.keys(this.markets), c = {}, u = this.safeInteger(a, \"feeTier\"), f = this.fees.inverse.trading.tiers, h = f.maker[u][1], l = f.taker[u][1];\n for (let p = 0; p < o.length; p++) {\n const m = o[p];\n this.markets[m].inverse && (c[m] = {\n info: {\n feeTier: u\n },\n symbol: m,\n maker: h,\n taker: l\n });\n }\n return c;\n }\n }\n parseAccountPositions(e) {\n const t = this.safeList(e, \"positions\"), i = this.safeList(e, \"assets\", []), s = {};\n for (let r = 0; r < i.length; r++) {\n const a = i[r], o = this.safeString(a, \"asset\"), c = this.safeCurrencyCode(o), u = this.safeString(a, \"crossWalletBalance\"), f = this.safeString(a, \"crossUnPnl\");\n s[c] = {\n crossMargin: P.stringAdd(u, f),\n crossWalletBalance: u\n };\n }\n const n = [];\n for (let r = 0; r < t.length; r++) {\n const a = t[r], o = this.safeString(a, \"symbol\"), c = this.safeMarket(o, void 0, void 0, \"contract\"), u = c.linear ? c.quote : c.base, f = this.safeString(a, \"maintMargin\");\n if (f !== \"0\" && f !== \"0.00000000\" && u in s) {\n const h = this.parseAccountPosition(this.extend(a, {\n crossMargin: s[u].crossMargin,\n crossWalletBalance: s[u].crossWalletBalance\n }), c);\n n.push(h);\n }\n }\n return n;\n }\n parseAccountPosition(e, t = void 0) {\n const i = this.safeString(e, \"symbol\");\n t = this.safeMarket(i, t, void 0, \"contract\");\n const s = this.safeString(t, \"symbol\"), n = this.safeString(e, \"leverage\"), r = parseInt(n), a = this.safeString(e, \"initialMargin\"), o = this.parseNumber(a);\n let c = P.stringDiv(\"1\", n, 8);\n this.isRoundNumber(1e3 % r) || (c = P.stringDiv(P.stringAdd(c, \"1e-8\"), \"1\", 8));\n const f = \"notional\" in e, h = this.safeString(e, \"maintMargin\"), l = this.parseNumber(h), p = this.safeString(e, \"entryPrice\");\n let m = this.parseNumber(p);\n const y = this.safeString2(e, \"notional\", \"notionalValue\"), w = P.stringAbs(y), S = this.parseNumber(w);\n let b = this.safeString(e, \"positionAmt\"), T = P.stringAbs(b);\n if (b === void 0) {\n const A = P.stringMul(P.stringMul(n, a), p), M = this.safeString(t, \"contractSize\");\n b = P.stringDiv(A, M), T = P.stringDiv(P.stringAdd(b, \"0.5\"), \"1\", 0);\n }\n const x = this.parseNumber(T), v = this.safeDict(this.options, \"leverageBrackets\", {}), _ = this.safeList(v, s, []);\n let V;\n for (let A = 0; A < _.length; A++) {\n const M = _[A];\n if (P.stringLt(w, M[0]))\n break;\n V = M[1];\n }\n const j = this.parseNumber(V), G = this.safeString(e, \"unrealizedProfit\"), W = this.parseNumber(G);\n let B = this.safeInteger(e, \"updateTime\");\n B === 0 && (B = void 0);\n const Q = this.safeBool(e, \"isolated\");\n let se, $, te;\n Q ? (se = \"isolated\", te = this.safeString(e, \"isolatedWallet\"), $ = P.stringAdd(te, G)) : (se = \"cross\", te = this.safeString(e, \"crossWalletBalance\"), $ = this.safeString(e, \"crossMargin\"));\n const E = this.parseNumber($);\n let N, L, z, K, R;\n const U = this.safeValue(t, \"contractSize\"), Y = this.numberToString(U);\n if (P.stringEquals(y, \"0\"))\n m = void 0;\n else {\n if (L = P.stringLt(y, \"0\") ? \"short\" : \"long\", N = this.parseNumber(P.stringDiv(P.stringAdd(P.stringDiv(h, $), \"5e-5\"), \"1\", 4)), z = this.parseNumber(P.stringMul(P.stringDiv(G, a, 4), \"100\")), f) {\n let Ie, Pe = p;\n L === \"short\" ? Ie = P.stringAdd(\"1\", V) : (Ie = P.stringAdd(\"-1\", V), Pe = P.stringMul(\"-1\", Pe));\n const He = P.stringDiv(te, P.stringMul(T, Ie)), bt = P.stringDiv(Pe, Ie);\n K = P.stringAdd(He, bt);\n } else {\n let Ie, Pe = p;\n L === \"short\" ? Ie = P.stringSub(\"1\", V) : (Ie = P.stringSub(\"-1\", V), Pe = P.stringMul(\"-1\", Pe));\n const He = P.stringMul(T, Y), bt = P.stringMul(He, Ie), mt = P.stringSub(P.stringMul(P.stringDiv(\"1\", Pe), He), te);\n K = P.stringDiv(bt, mt);\n }\n const A = t.precision.price, q = (A + 1).toString(), le = new P(\"5e-\" + q).toString(), oe = P.stringAdd(le, K);\n let he = P.stringDiv(oe, \"1\", A);\n he[0] === \"-\" && (he = void 0), R = this.parseNumber(he);\n }\n const ae = this.safeString(e, \"positionSide\") !== \"BOTH\";\n return {\n info: e,\n id: void 0,\n symbol: s,\n timestamp: B,\n datetime: this.iso8601(B),\n initialMargin: o,\n initialMarginPercentage: this.parseNumber(c),\n maintenanceMargin: l,\n maintenanceMarginPercentage: j,\n entryPrice: m,\n notional: S,\n leverage: this.parseNumber(n),\n unrealizedPnl: W,\n contracts: x,\n contractSize: U,\n marginRatio: N,\n liquidationPrice: R,\n markPrice: void 0,\n collateral: E,\n marginMode: se,\n side: L,\n hedged: ae,\n percentage: z\n };\n }\n parsePositionRisk(e, t = void 0) {\n const i = this.safeString(e, \"symbol\");\n t = this.safeMarket(i, t, void 0, \"contract\");\n const s = this.safeString(t, \"symbol\"), n = this.safeDict(this.options, \"leverageBrackets\", {}), r = this.safeList(n, s, []), a = this.safeString2(e, \"notional\", \"notionalValue\"), o = P.stringAbs(a);\n let c;\n for (let J = 0; J < r.length; J++) {\n const ae = r[J];\n if (P.stringLt(o, ae[0]))\n break;\n c = ae[1];\n }\n const u = this.parseNumber(o), f = P.stringAbs(this.safeString(e, \"positionAmt\")), h = this.parseNumber(f), l = this.safeString(e, \"unRealizedProfit\"), p = this.parseNumber(l), m = this.safeString(e, \"leverage\"), y = parseInt(m), w = this.omitZero(this.safeString(e, \"liquidationPrice\")), S = this.parseNumber(w);\n let b;\n const T = this.safeString(e, \"marginType\");\n let x;\n P.stringGt(a, \"0\") ? x = \"long\" : P.stringLt(a, \"0\") && (x = \"short\");\n const v = this.safeString(e, \"entryPrice\"), _ = this.parseNumber(v), V = this.safeValue(t, \"contractSize\"), j = this.numberToString(V), G = \"notional\" in e;\n if (T === \"cross\") {\n const J = this.safeDict(t, \"precision\", {});\n if (G) {\n let ae, A = v;\n x === \"short\" ? (ae = P.stringAdd(\"1\", c), A = P.stringMul(\"-1\", A)) : ae = P.stringAdd(\"-1\", c);\n const M = P.stringMul(w, ae), q = P.stringAdd(M, A), H = this.safeInteger(J, \"price\"), le = this.safeInteger(J, \"quote\", H);\n le !== void 0 && (b = P.stringDiv(P.stringMul(q, f), \"1\", le));\n } else {\n let ae, A = v;\n x === \"short\" ? ae = P.stringSub(\"1\", c) : (ae = P.stringSub(\"-1\", c), A = P.stringMul(\"-1\", A));\n const M = P.stringMul(f, j), q = P.stringSub(P.stringDiv(\"1\", A), P.stringDiv(ae, w)), H = this.safeInteger(J, \"base\");\n H !== void 0 && (b = P.stringDiv(P.stringMul(M, q), \"1\", H));\n }\n } else\n b = this.safeString(e, \"isolatedMargin\");\n b = b === void 0 ? \"0\" : b;\n const W = this.parseNumber(b), B = this.parseNumber(this.omitZero(this.safeString(e, \"markPrice\")));\n let Q = this.safeInteger(e, \"updateTime\");\n Q === 0 && (Q = void 0);\n const se = this.parseNumber(c), $ = P.stringMul(c, o), te = this.parseNumber($);\n let E = P.stringDiv(\"1\", m, 8);\n this.isRoundNumber(1e3 % y) || (E = P.stringAdd(E, \"1e-8\"));\n const L = P.stringDiv(P.stringMul(o, E), \"1\", 8), z = this.parseNumber(L);\n let K, R;\n P.stringEquals(b, \"0\") || (K = this.parseNumber(P.stringDiv(P.stringAdd(P.stringDiv($, b), \"5e-5\"), \"1\", 4)), R = this.parseNumber(P.stringMul(P.stringDiv(l, L, 4), \"100\")));\n const Y = this.safeString(e, \"positionSide\") !== \"BOTH\";\n return {\n info: e,\n id: void 0,\n symbol: s,\n contracts: h,\n contractSize: V,\n unrealizedPnl: p,\n leverage: this.parseNumber(m),\n liquidationPrice: S,\n collateral: W,\n notional: u,\n markPrice: B,\n entryPrice: _,\n timestamp: Q,\n initialMargin: z,\n initialMarginPercentage: this.parseNumber(E),\n maintenanceMargin: te,\n maintenanceMarginPercentage: se,\n marginRatio: K,\n datetime: this.iso8601(Q),\n marginMode: T,\n marginType: T,\n side: x,\n hedged: Y,\n percentage: R,\n stopLossPrice: void 0,\n takeProfitPrice: void 0\n };\n }\n async loadLeverageBrackets(e = !1, t = {}) {\n if (await this.loadMarkets(), this.safeValue(this.options, \"leverageBrackets\") === void 0 || e) {\n const s = this.safeString(this.options, \"defaultType\", \"future\"), n = this.safeString(t, \"type\", s), r = this.omit(t, \"type\");\n let a;\n [a, t] = this.handleSubTypeAndParams(\"loadLeverageBrackets\", void 0, t, \"linear\");\n let o;\n [o, t] = this.handleOptionAndParams2(t, \"loadLeverageBrackets\", \"papi\", \"portfolioMargin\", !1);\n let c;\n if (this.isLinear(n, a))\n o ? c = await this.papiGetUmLeverageBracket(r) : c = await this.fapiPrivateGetLeverageBracket(r);\n else if (this.isInverse(n, a))\n o ? c = await this.papiGetCmLeverageBracket(r) : c = await this.dapiPrivateV2GetLeverageBracket(r);\n else\n throw new g(\"loadLeverageBrackets() supports linear and inverse contracts only\").exchange(this.id);\n this.options.leverageBrackets = {};\n for (let u = 0; u < c.length; u++) {\n const f = c[u], h = this.safeString(f, \"symbol\"), l = this.safeSymbol(h, void 0, void 0, \"contract\"), p = this.safeList(f, \"brackets\", []), m = [];\n for (let y = 0; y < p.length; y++) {\n const w = p[y], S = this.safeString2(w, \"notionalFloor\", \"qtyFloor\"), b = this.safeString(w, \"maintMarginRatio\");\n m.push([S, b]);\n }\n this.options.leverageBrackets[l] = m;\n }\n }\n return this.options.leverageBrackets;\n }\n async fetchPosition(e, t = {}) {\n await this.loadMarkets();\n const i = this.market(e);\n if (!i.option)\n throw new ge(i.type).addMessage(\"It supports option markets only\").exchange(this.id);\n const s = {\n symbol: i.id\n }, n = await this.eapiPrivateGetPosition(this.extend(s, t));\n return this.parsePosition(n[0], i);\n }\n async fetchOptionPositions(e = void 0, t = {}) {\n await this.loadMarkets(), e = this.marketSymbols(e);\n const i = {};\n let s;\n if (e !== void 0) {\n let a;\n if (Array.isArray(e)) {\n if (e.length > 1)\n throw new g(\"fetchPositions() symbols argument cannot contain more than 1 symbol\").exchange(this.id);\n a = e[0];\n } else\n a = e;\n s = this.market(a), i.symbol = s.id;\n }\n const n = await this.eapiPrivateGetPosition(this.extend(i, t)), r = [];\n for (let a = 0; a < n.length; a++)\n r.push(this.parsePosition(n[a], s));\n return this.filterByArrayPositions(r, \"symbol\", e, !1);\n }\n parsePosition(e, t = void 0) {\n const i = this.safeString(e, \"symbol\");\n t = this.safeMarket(i, t);\n const s = t.symbol, n = this.safeStringLower(e, \"side\");\n let r = this.safeString(e, \"quantity\");\n n !== \"long\" && (r = P.stringMul(\"-1\", r));\n const a = this.safeInteger(e, \"time\");\n return this.safePosition({\n info: e,\n id: void 0,\n symbol: s,\n entryPrice: this.safeNumber(e, \"entryPrice\"),\n markPrice: this.safeNumber(e, \"markPrice\"),\n notional: this.safeNumber(e, \"markValue\"),\n collateral: this.safeNumber(e, \"positionCost\"),\n unrealizedPnl: this.safeNumber(e, \"unrealizedPNL\"),\n side: n,\n contracts: this.parseNumber(r),\n contractSize: void 0,\n timestamp: a,\n datetime: this.iso8601(a),\n hedged: void 0,\n maintenanceMargin: void 0,\n maintenanceMarginPercentage: void 0,\n initialMargin: void 0,\n initialMarginPercentage: void 0,\n leverage: void 0,\n liquidationPrice: void 0,\n marginRatio: void 0,\n marginMode: void 0,\n percentage: void 0\n });\n }\n async fetchPositions(e = void 0, t = {}) {\n const i = this.safeString(this.options, \"fetchPositions\", \"positionRisk\");\n let s;\n if ([s, t] = this.handleOptionAndParams(t, \"fetchPositions\", \"method\", i), s === \"positionRisk\")\n return await this.fetchPositionsRisk(e, t);\n if (s === \"account\")\n return await this.fetchAccountPositions(e, t);\n if (s === \"option\")\n return await this.fetchOptionPositions(e, t);\n throw new g(s + '\" is invalid, please choose between \"account\", \"positionRisk\" and \"option\"').exchange(this.id);\n }\n async fetchAccountPositions(e = void 0, t = {}) {\n if (e !== void 0 && !Array.isArray(e))\n throw new g(\"It requires an array argument for symbols\").exchange(this.id);\n await this.loadMarkets(), await this.loadLeverageBrackets(!1, t);\n const i = this.safeString(this.options, \"defaultType\", \"future\"), s = this.safeString(t, \"type\", i);\n t = this.omit(t, \"type\");\n let n;\n [n, t] = this.handleSubTypeAndParams(\"fetchAccountPositions\", void 0, t, \"linear\");\n let r;\n [r, t] = this.handleOptionAndParams2(t, \"fetchAccountPositions\", \"papi\", \"portfolioMargin\", !1);\n let a;\n if (this.isLinear(s, n))\n r ? a = await this.papiGetUmAccount(t) : a = await this.fapiPrivateV2GetAccount(t);\n else if (this.isInverse(s, n))\n r ? a = await this.papiGetCmAccount(t) : a = await this.dapiPrivateGetAccount(t);\n else\n throw new g(\"fetchPositions() supports linear and inverse contracts only\").exchange(this.id);\n const o = this.parseAccountPositions(a);\n return e = this.marketSymbols(e), this.filterByArrayPositions(o, \"symbol\", e, !1);\n }\n async fetchPositionsRisk(e = void 0, t = {}) {\n if (e !== void 0 && !Array.isArray(e))\n throw new g(\"fetchPositionsRisk() requires an array argument for symbols\").exchange(this.id);\n await this.loadMarkets(), await this.loadLeverageBrackets(!1, t);\n const i = {};\n let s = \"future\";\n s = this.safeString(this.options, \"defaultType\", s);\n const n = this.safeString(t, \"type\", s);\n let r;\n [r, t] = this.handleSubTypeAndParams(\"fetchPositionsRisk\", void 0, t, \"linear\");\n let a;\n [a, t] = this.handleOptionAndParams2(t, \"fetchPositionsRisk\", \"papi\", \"portfolioMargin\", !1), t = this.omit(t, \"type\");\n let o;\n if (this.isLinear(n, r))\n a ? o = await this.papiGetUmPositionRisk(this.extend(i, t)) : o = await this.fapiPrivateV2GetPositionRisk(this.extend(i, t));\n else if (this.isInverse(n, r))\n a ? o = await this.papiGetCmPositionRisk(this.extend(i, t)) : o = await this.dapiPrivateGetPositionRisk(this.extend(i, t));\n else\n throw new g(\"fetchPositionsRisk() supports linear and inverse contracts only\").exchange(this.id);\n const c = [];\n for (let u = 0; u < o.length; u++) {\n const f = this.parsePositionRisk(o[u]);\n c.push(f);\n }\n return e = this.marketSymbols(e), this.filterByArrayPositions(c, \"symbol\", e, !1);\n }\n async fetchLedger(e = void 0, t = void 0, i = void 0, s = {}) {\n await this.loadMarkets();\n let n = !1;\n if ([n, s] = this.handleOptionAndParams(s, \"fetchLedger\", \"paginate\"), n)\n return await this.fetchPaginatedCallDynamic(\"fetchLedger\", e, t, i, s);\n let r, a, o;\n e !== void 0 && (o = this.currency(e));\n const c = {};\n [r, s] = this.handleMarketTypeAndParams(\"fetchLedger\", void 0, s), [a, s] = this.handleSubTypeAndParams(\"fetchLedger\", void 0, s), t !== void 0 && (c.startTime = t), i !== void 0 && (c.limit = i);\n const u = this.safeInteger(s, \"until\");\n u !== void 0 && (s = this.omit(s, \"until\"), c.endTime = u);\n let f;\n [f, s] = this.handleOptionAndParams2(s, \"fetchLedger\", \"papi\", \"portfolioMargin\", !1);\n let h;\n if (r === \"option\")\n this.checkRequiredArgument(\"fetchLedger\", e, \"code\"), c.currency = o.id, h = await this.eapiPrivateGetBill(this.extend(c, s));\n else if (this.isLinear(r, a))\n f ? h = await this.papiGetUmIncome(this.extend(c, s)) : h = await this.fapiPrivateGetIncome(this.extend(c, s));\n else if (this.isInverse(r, a))\n f ? h = await this.papiGetCmIncome(this.extend(c, s)) : h = await this.dapiPrivateGetIncome(this.extend(c, s));\n else\n throw new g(\"fetchLedger() supports contract wallets only\").exchange(this.id);\n return this.parseLedger(h, o, t, i);\n }\n parseLedgerEntry(e, t = void 0) {\n let i = this.safeString2(e, \"amount\", \"income\"), s;\n P.stringLe(i, \"0\") ? (s = \"out\", i = P.stringMul(\"-1\", i)) : s = \"in\";\n const n = this.safeString(e, \"asset\"), r = this.safeInteger2(e, \"createDate\", \"time\"), a = this.safeString2(e, \"type\", \"incomeType\");\n return {\n id: this.safeString2(e, \"id\", \"tranId\"),\n direction: s,\n account: void 0,\n referenceAccount: void 0,\n referenceId: this.safeString(e, \"tradeId\"),\n type: this.parseLedgerEntryType(a),\n currency: this.safeCurrencyCode(n, t),\n amount: this.parseNumber(i),\n timestamp: r,\n datetime: this.iso8601(r),\n before: void 0,\n after: void 0,\n status: void 0,\n fee: void 0,\n info: e\n };\n }\n parseLedgerEntryType(e) {\n const t = {\n FEE: \"fee\",\n FUNDING_FEE: \"fee\",\n OPTIONS_PREMIUM_FEE: \"fee\",\n POSITION_LIMIT_INCREASE_FEE: \"fee\",\n CONTRACT: \"trade\",\n REALIZED_PNL: \"trade\",\n TRANSFER: \"transfer\",\n CROSS_COLLATERAL_TRANSFER: \"transfer\",\n INTERNAL_TRANSFER: \"transfer\",\n COIN_SWAP_DEPOSIT: \"deposit\",\n COIN_SWAP_WITHDRAW: \"withdrawal\",\n OPTIONS_SETTLE_PROFIT: \"settlement\",\n DELIVERED_SETTELMENT: \"settlement\",\n WELCOME_BONUS: \"cashback\",\n CONTEST_REWARD: \"cashback\",\n COMMISSION_REBATE: \"rebate\",\n API_REBATE: \"rebate\",\n REFERRAL_KICKBACK: \"referral\",\n COMMISSION: \"commission\"\n };\n return this.safeString(t, e, e);\n }\n async sign(e, t = \"public\", i = \"GET\", s = {}, n = void 0, r = void 0) {\n const a = this.urls;\n if (!(t in a.api))\n throw new O().overwriteMessage(\"It does not have a testnet/sandbox URL for \" + t + \" endpoints\").exchange(this.id);\n let o = this.urls.api[t];\n if (o += \"/\" + e, e === \"historicalTrades\")\n if (this.apiKey)\n n = {\n \"X-MBX-APIKEY\": this.apiKey\n };\n else\n throw new Z().addMessage(\"historicalTrades endpoint requires `apiKey` credential\").exchange(this.id);\n if (e === \"userDataStream\" || e === \"listenKey\")\n if (this.apiKey)\n n = {\n \"X-MBX-APIKEY\": this.apiKey,\n \"Content-Type\": \"application/x-www-form-urlencoded\"\n }, i !== \"GET\" && (r = this.urlencode(s));\n else\n throw new Z().addMessage(this.id + \" userDataStream endpoint requires `apiKey` credential\").exchange(this.id);\n else if (t === \"private\" || t === \"eapiPrivate\" || t === \"sapi\" && e !== \"system/status\" || t === \"sapiV2\" || t === \"sapiV3\" || t === \"sapiV4\" || t === \"dapiPrivate\" || t === \"dapiPrivateV2\" || t === \"fapiPrivate\" || t === \"fapiPrivateV2\" || t === \"papi\" && e !== \"ping\") {\n if (this.checkRequiredCredentials(), i === \"POST\" && (e === \"order\" || e === \"sor/order\") && this.safeString(s, \"newClientOrderId\") === void 0) {\n const y = t.indexOf(\"sapi\") > -1 || t === \"private\", w = y ? \"spot\" : \"future\", S = y ? \"x-R4BD3S82\" : \"x-xcKtGhcu\", b = this.safeDict(this.options, \"broker\", {}), T = this.safeString(b, w, S);\n s.newClientOrderId = T + this.uuid22();\n }\n let u;\n if (e === \"batchOrders\" && i === \"POST\") {\n const m = this.safeValue(s, \"batchOrders\"), y = this.json(m);\n s.batchOrders = y;\n }\n const f = this.safeInteger(this.options, \"recvWindow\");\n let h = this.extend({\n timestamp: this.nonce()\n }, s);\n f !== void 0 && (h.recvWindow = f);\n const l = this.safeInteger(s, \"recvWindow\");\n if (l !== void 0 && (h.recvWindow = l), t === \"sapi\" && e === \"asset/dust\")\n u = this.urlencodeWithArrayRepeat(h);\n else if (e === \"batchOrders\" || e.indexOf(\"sub-account\") >= 0 || e === \"capital/withdraw/apply\" || e.indexOf(\"staking\") >= 0)\n if (i === \"DELETE\" && e === \"batchOrders\") {\n const m = this.safeList(h, \"orderidlist\", []), y = this.safeList(h, \"origclientorderidlist\", []);\n h = this.omit(h, [\"orderidlist\", \"origclientorderidlist\"]), u = this.rawencode(h);\n const w = m.length, S = y.length;\n w > 0 && (u = u + \"&orderidlist=[\" + m.join(\",\") + \"]\"), S > 0 && (u = u + \"&origclientorderidlist=[\" + y.join(\",\") + \"]\");\n } else\n u = this.rawencode(h);\n else\n u = this.urlencode(h);\n let p;\n this.secret && this.secret.indexOf(\"PRIVATE KEY\") > -1 ? this.secret.length > 120 ? p = this.encodeURIComponent(Zn(u, this.secret, Re)) : p = this.encodeURIComponent(pu(this.encode(u), this.secret, at)) : this.externalSigner ? p = await this.externalSigner.sign({\n payload: this.encode(u),\n publicApiKey: this.apiKey,\n exchangeId: this.id\n }) : p = this.hmac(this.encode(u), this.encode(this.secret), Re), u += \"&signature=\" + p, n = {\n \"X-MBX-APIKEY\": this.apiKey\n }, i === \"GET\" || i === \"DELETE\" ? o += \"?\" + u : (r = u, n[\"Content-Type\"] = \"application/x-www-form-urlencoded\");\n } else\n Object.keys(s).length && (o += \"?\" + this.urlencode(s));\n return { url: o, method: i, body: r, headers: n };\n }\n getExceptionsByUrl(e, t) {\n let i;\n const s = this.hostname !== void 0 ? this.hostname : \"binance.com\";\n if (e.startsWith(\"https://api.\" + s + \"/\") ? i = \"spot\" : e.startsWith(\"https://dapi.\" + s + \"/\") ? i = \"inverse\" : e.startsWith(\"https://fapi.\" + s + \"/\") ? i = \"linear\" : e.startsWith(\"https://eapi.\" + s + \"/\") ? i = \"option\" : e.startsWith(\"https://papi.\" + s + \"/\") && (i = \"portfoliomargin\"), i !== void 0) {\n const n = this.safeDict(this.exceptions, i, {});\n return this.safeDict(n, t, {});\n }\n return {};\n }\n handleErrors(e, t, i, s, n, r, a, o, c) {\n if (e === 418 || e === 429)\n throw new Rt().addMessage(e.toString() + \":\" + t).exchange(this.id);\n const u = this.safeString(a, \"code\");\n if (e >= 400) {\n if (r.indexOf(\"Price * QTY is zero or less\") >= 0)\n throw new g(e.toString() + \": Order cost = amount * price is zero or less\").exchange(this.id);\n if (r.indexOf(\"LOT_SIZE\") >= 0)\n throw new g(e.toString() + \": Order amount should be evenly divisible by lot size\").exchange(this.id);\n if (r.indexOf(\"PRICE_FILTER\") >= 0)\n throw new g(e.toString() + \": Order price is invalid, i.e. exceeds allowed price precision, exceeds min price or max price limits or is invalid value in general, use this.priceToPrecision (symbol, amount) \").exchange(this.id);\n }\n if (a === void 0)\n return;\n const f = this.safeString(a, \"msg\"), h = this.safeValue(a, \"success\", !0);\n if (!h) {\n const l = this.safeString(a, \"msg\");\n let p;\n if (l !== void 0) {\n try {\n p = JSON.parse(l);\n } catch {\n p = void 0;\n }\n p !== void 0 && (a = p);\n }\n }\n if (f !== void 0) {\n const l = (u ? u + \": \" : \"\") + f;\n this.throwExactlyMatchedException(this.getExceptionsByUrl(i, \"exact\"), f, l), this.throwExactlyMatchedException(this.exceptions.exact, f, l), this.throwBroadlyMatchedException(this.getExceptionsByUrl(i, \"broad\"), f, l), this.throwBroadlyMatchedException(this.exceptions.broad, f, l);\n }\n if (u !== void 0) {\n const l = u + \": \" + f;\n if (u === \"200\" || P.stringEquals(u, \"0\"))\n return;\n throw f === \"No need to change margin type.\" ? new k().addMessage(l).exchange(this.id) : (this.throwExactlyMatchedException(this.getExceptionsByUrl(i, \"exact\"), u, l), this.throwExactlyMatchedException(this.exceptions.exact, u, l), new O().addMessage(l).exchange(this.id));\n }\n if (!h)\n throw new O().addMessage(f).exchange(this.id);\n if (Array.isArray(a) && a.length === 1) {\n const p = a[0], m = this.safeString(p, \"code\"), y = this.safeString(p, \"msg\");\n m !== void 0 && (this.throwExactlyMatchedException(this.getExceptionsByUrl(i, \"exact\"), m, m + \": \" + y), this.throwExactlyMatchedException(this.exceptions.exact, m, m + \": \" + y));\n }\n }\n calculateRateLimiterCost(e, t, i, s, n = {}) {\n if (\"noCoin\" in n && !(\"coin\" in s))\n return n.noCoin;\n if (\"noSymbol\" in n && !(\"symbol\" in s))\n return n.noSymbol;\n if (\"noPoolId\" in n && !(\"poolId\" in s))\n return n.noPoolId;\n if (\"byLimit\" in n && \"limit\" in s) {\n const r = s.limit, a = n.byLimit;\n for (let o = 0; o < a.length; o++) {\n const c = a[o];\n if (r <= c[0])\n return c[1];\n }\n }\n return this.safeValue(n, \"cost\", 1);\n }\n async request(e, t = \"public\", i = \"GET\", s = {}, n = void 0, r = void 0, a = {}) {\n return await this.fetch2(e, t, i, s, n, r, a);\n }\n}\nlet jy = class extends gt {\n};\nclass Fy extends jy {\n describe() {\n return this.deepExtend(super.describe(), {\n id: \"bitfinex2\",\n name: \"Bitfinex\",\n countries: [\"VG\"],\n version: \"v2\",\n certified: !1,\n pro: !0,\n // new metainfo interface\n has: {\n CORS: void 0,\n spot: !0,\n margin: !0,\n swap: !0,\n future: void 0,\n option: void 0,\n cancelAllOrders: !0,\n cancelOrder: !0,\n cancelOrders: !0,\n createDepositAddress: !0,\n createLimitOrder: !0,\n createMarketOrder: !0,\n createOrder: !0,\n createTrailingAmountOrder: !0,\n createTrailingPercentOrder: !1,\n createTriggerOrder: !0,\n editOrder: !0,\n fetchBalance: !0,\n fetchClosedOrder: !0,\n fetchClosedOrders: !0,\n fetchCurrencies: !0,\n fetchDepositAddress: !0,\n fetchDepositsWithdrawals: !0,\n fetchLedger: !0,\n fetchMyTrades: !0,\n fetchOHLCV: !0,\n fetchOpenOrder: !0,\n fetchOpenOrders: !0,\n fetchOrder: !0,\n fetchOrderTrades: !0,\n fetchPosition: !1,\n fetchPositions: !0,\n fetchStatus: !0,\n fetchTickers: !0,\n fetchTime: !1,\n fetchTradingFee: !1,\n fetchTradingFees: !0,\n fetchTransactionFees: void 0,\n fetchTransactions: \"emulated\",\n withdraw: !0\n },\n timeframes: {\n \"1m\": \"1m\",\n \"5m\": \"5m\",\n \"15m\": \"15m\",\n \"30m\": \"30m\",\n \"1h\": \"1h\",\n \"3h\": \"3h\",\n \"4h\": \"4h\",\n \"6h\": \"6h\",\n \"12h\": \"12h\",\n \"1d\": \"1D\",\n \"1w\": \"7D\",\n \"2w\": \"14D\",\n \"1M\": \"1M\"\n },\n // cheapest endpoint is 240 requests per minute => ~ 4 requests per second => ( 1000ms / 4 ) = 250ms between requests on average\n rateLimit: 250,\n urls: {\n logo: \"https://user-images.githubusercontent.com/1294454/27766244-e328a50c-5ed2-11e7-947b-041416579bb3.jpg\",\n api: {\n v1: \"https://api.bitfinex.com\",\n public: \"https://api-pub.bitfinex.com\",\n private: \"https://api.bitfinex.com\"\n },\n www: \"https://www.bitfinex.com\",\n doc: [\n \"https://docs.bitfinex.com/v2/docs/\",\n \"https://github.com/bitfinexcom/bitfinex-api-node\"\n ],\n fees: \"https://www.bitfinex.com/fees\"\n },\n api: {\n public: {\n get: {\n \"conf/{config}\": 2.7,\n \"conf/pub:{action}:{object}\": 2.7,\n \"conf/pub:{action}:{object}:{detail}\": 2.7,\n \"conf/pub:map:{object}\": 2.7,\n \"conf/pub:map:{object}:{detail}\": 2.7,\n \"conf/pub:map:currency:{detail}\": 2.7,\n \"conf/pub:map:currency:sym\": 2.7,\n \"conf/pub:map:currency:label\": 2.7,\n \"conf/pub:map:currency:unit\": 2.7,\n \"conf/pub:map:currency:undl\": 2.7,\n \"conf/pub:map:currency:pool\": 2.7,\n \"conf/pub:map:currency:explorer\": 2.7,\n \"conf/pub:map:currency:tx:fee\": 2.7,\n \"conf/pub:map:tx:method\": 2.7,\n \"conf/pub:list:{object}\": 2.7,\n \"conf/pub:list:{object}:{detail}\": 2.7,\n \"conf/pub:list:currency\": 2.7,\n \"conf/pub:list:pair:exchange\": 2.7,\n \"conf/pub:list:pair:margin\": 2.7,\n \"conf/pub:list:pair:futures\": 2.7,\n \"conf/pub:list:competitions\": 2.7,\n \"conf/pub:info:{object}\": 2.7,\n \"conf/pub:info:{object}:{detail}\": 2.7,\n \"conf/pub:info:pair\": 2.7,\n \"conf/pub:info:pair:futures\": 2.7,\n \"conf/pub:info:tx:status\": 2.7,\n \"conf/pub:fees\": 2.7,\n \"platform/status\": 8,\n tickers: 2.7,\n \"ticker/{symbol}\": 2.7,\n \"tickers/hist\": 2.7,\n \"trades/{symbol}/hist\": 2.7,\n \"book/{symbol}/{precision}\": 1,\n \"book/{symbol}/P0\": 1,\n \"book/{symbol}/P1\": 1,\n \"book/{symbol}/P2\": 1,\n \"book/{symbol}/P3\": 1,\n \"book/{symbol}/R0\": 1,\n \"stats1/{key}:{size}:{symbol}:{side}/{section}\": 2.7,\n \"stats1/{key}:{size}:{symbol}:{side}/last\": 2.7,\n \"stats1/{key}:{size}:{symbol}:{side}/hist\": 2.7,\n \"stats1/{key}:{size}:{symbol}/{section}\": 2.7,\n \"stats1/{key}:{size}:{symbol}/last\": 2.7,\n \"stats1/{key}:{size}:{symbol}/hist\": 2.7,\n \"stats1/{key}:{size}:{symbol}:long/last\": 2.7,\n \"stats1/{key}:{size}:{symbol}:long/hist\": 2.7,\n \"stats1/{key}:{size}:{symbol}:short/last\": 2.7,\n \"stats1/{key}:{size}:{symbol}:short/hist\": 2.7,\n \"candles/trade:{timeframe}:{symbol}:{period}/{section}\": 2.7,\n \"candles/trade:{timeframe}:{symbol}/{section}\": 2.7,\n \"candles/trade:{timeframe}:{symbol}/last\": 2.7,\n \"candles/trade:{timeframe}:{symbol}/hist\": 2.7,\n \"status/{type}\": 2.7,\n \"status/deriv\": 2.7,\n \"status/deriv/{symbol}/hist\": 2.7,\n \"liquidations/hist\": 80,\n \"rankings/{key}:{timeframe}:{symbol}/{section}\": 2.7,\n \"rankings/{key}:{timeframe}:{symbol}/hist\": 2.7,\n \"pulse/hist\": 2.7,\n \"pulse/profile/{nickname}\": 2.7,\n \"funding/stats/{symbol}/hist\": 10\n // ratelimit not in docs\n },\n post: {\n \"calc/trade/avg\": 2.7,\n \"calc/fx\": 2.7\n }\n },\n private: {\n post: {\n // 'auth/r/orders/{symbol}/new', // outdated\n // 'auth/r/stats/perf:{timeframe}/hist', // outdated\n \"auth/r/wallets\": 2.7,\n \"auth/r/wallets/hist\": 2.7,\n \"auth/r/orders\": 2.7,\n \"auth/r/orders/{symbol}\": 2.7,\n \"auth/w/order/submit\": 2.7,\n \"auth/w/order/update\": 2.7,\n \"auth/w/order/cancel\": 2.7,\n \"auth/w/order/multi\": 2.7,\n \"auth/w/order/cancel/multi\": 2.7,\n \"auth/r/orders/{symbol}/hist\": 2.7,\n \"auth/r/orders/hist\": 2.7,\n \"auth/r/order/{symbol}:{id}/trades\": 2.7,\n \"auth/r/trades/{symbol}/hist\": 2.7,\n \"auth/r/trades/hist\": 2.7,\n \"auth/r/ledgers/{currency}/hist\": 2.7,\n \"auth/r/ledgers/hist\": 2.7,\n \"auth/r/info/margin/{key}\": 2.7,\n \"auth/r/info/margin/base\": 2.7,\n \"auth/r/info/margin/sym_all\": 2.7,\n \"auth/r/positions\": 2.7,\n \"auth/w/position/claim\": 2.7,\n \"auth/w/position/increase:\": 2.7,\n \"auth/r/position/increase/info\": 2.7,\n \"auth/r/positions/hist\": 2.7,\n \"auth/r/positions/audit\": 2.7,\n \"auth/r/positions/snap\": 2.7,\n \"auth/w/deriv/collateral/set\": 2.7,\n \"auth/w/deriv/collateral/limits\": 2.7,\n \"auth/r/funding/offers\": 2.7,\n \"auth/r/funding/offers/{symbol}\": 2.7,\n \"auth/w/funding/offer/submit\": 2.7,\n \"auth/w/funding/offer/cancel\": 2.7,\n \"auth/w/funding/offer/cancel/all\": 2.7,\n \"auth/w/funding/close\": 2.7,\n \"auth/w/funding/auto\": 2.7,\n \"auth/w/funding/keep\": 2.7,\n \"auth/r/funding/offers/{symbol}/hist\": 2.7,\n \"auth/r/funding/offers/hist\": 2.7,\n \"auth/r/funding/loans\": 2.7,\n \"auth/r/funding/loans/hist\": 2.7,\n \"auth/r/funding/loans/{symbol}\": 2.7,\n \"auth/r/funding/loans/{symbol}/hist\": 2.7,\n \"auth/r/funding/credits\": 2.7,\n \"auth/r/funding/credits/hist\": 2.7,\n \"auth/r/funding/credits/{symbol}\": 2.7,\n \"auth/r/funding/credits/{symbol}/hist\": 2.7,\n \"auth/r/funding/trades/{symbol}/hist\": 2.7,\n \"auth/r/funding/trades/hist\": 2.7,\n \"auth/r/info/funding/{key}\": 2.7,\n \"auth/r/info/user\": 2.7,\n \"auth/r/summary\": 2.7,\n \"auth/r/logins/hist\": 2.7,\n \"auth/r/permissions\": 2.7,\n \"auth/w/token\": 2.7,\n \"auth/r/audit/hist\": 2.7,\n \"auth/w/transfer\": 2.7,\n \"auth/w/deposit/address\": 24,\n \"auth/w/deposit/invoice\": 24,\n \"auth/w/withdraw\": 24,\n \"auth/r/movements/{currency}/hist\": 2.7,\n \"auth/r/movements/hist\": 2.7,\n \"auth/r/alerts\": 5.34,\n \"auth/w/alert/set\": 2.7,\n \"auth/w/alert/price:{symbol}:{price}/del\": 2.7,\n \"auth/w/alert/{type}:{symbol}:{price}/del\": 2.7,\n \"auth/calc/order/avail\": 2.7,\n \"auth/w/settings/set\": 2.7,\n \"auth/r/settings\": 2.7,\n \"auth/w/settings/del\": 2.7,\n \"auth/r/pulse/hist\": 2.7,\n \"auth/w/pulse/add\": 16,\n \"auth/w/pulse/del\": 2.7\n }\n }\n },\n fees: {\n trading: {\n feeSide: \"get\",\n percentage: !0,\n tierBased: !0,\n maker: this.parseNumber(\"0.001\"),\n taker: this.parseNumber(\"0.002\"),\n tiers: {\n taker: [\n [this.parseNumber(\"0\"), this.parseNumber(\"0.002\")],\n [this.parseNumber(\"500000\"), this.parseNumber(\"0.002\")],\n [this.parseNumber(\"1000000\"), this.parseNumber(\"0.002\")],\n [this.parseNumber(\"2500000\"), this.parseNumber(\"0.002\")],\n [this.parseNumber(\"5000000\"), this.parseNumber(\"0.002\")],\n [this.parseNumber(\"7500000\"), this.parseNumber(\"0.002\")],\n [this.parseNumber(\"10000000\"), this.parseNumber(\"0.0018\")],\n [this.parseNumber(\"15000000\"), this.parseNumber(\"0.0016\")],\n [this.parseNumber(\"20000000\"), this.parseNumber(\"0.0014\")],\n [this.parseNumber(\"25000000\"), this.parseNumber(\"0.0012\")],\n [this.parseNumber(\"30000000\"), this.parseNumber(\"0.001\")]\n ],\n maker: [\n [this.parseNumber(\"0\"), this.parseNumber(\"0.001\")],\n [this.parseNumber(\"500000\"), this.parseNumber(\"0.0008\")],\n [this.parseNumber(\"1000000\"), this.parseNumber(\"0.0006\")],\n [this.parseNumber(\"2500000\"), this.parseNumber(\"0.0004\")],\n [this.parseNumber(\"5000000\"), this.parseNumber(\"0.0002\")],\n [this.parseNumber(\"7500000\"), this.parseNumber(\"0\")],\n [this.parseNumber(\"10000000\"), this.parseNumber(\"0\")],\n [this.parseNumber(\"15000000\"), this.parseNumber(\"0\")],\n [this.parseNumber(\"20000000\"), this.parseNumber(\"0\")],\n [this.parseNumber(\"25000000\"), this.parseNumber(\"0\")],\n [this.parseNumber(\"30000000\"), this.parseNumber(\"0\")]\n ]\n }\n },\n funding: {\n withdraw: {}\n }\n },\n precisionMode: or,\n options: {\n precision: \"R0\",\n // convert 'EXCHANGE MARKET' to lowercase 'market'\n // convert 'EXCHANGE LIMIT' to lowercase 'limit'\n // everything else remains uppercase\n exchangeTypes: {\n // 'MARKET': undefined,\n \"EXCHANGE MARKET\": \"market\",\n // 'LIMIT': undefined,\n \"EXCHANGE LIMIT\": \"limit\",\n // 'STOP': undefined,\n \"EXCHANGE STOP\": \"market\",\n // 'TRAILING STOP': undefined,\n // 'EXCHANGE TRAILING STOP': undefined,\n // 'FOK': undefined,\n \"EXCHANGE FOK\": \"limit\",\n // 'STOP LIMIT': undefined,\n \"EXCHANGE STOP LIMIT\": \"limit\",\n // 'IOC': undefined,\n \"EXCHANGE IOC\": \"limit\"\n },\n // convert 'market' to 'EXCHANGE MARKET'\n // convert 'limit' 'EXCHANGE LIMIT'\n // everything else remains as is\n orderTypes: {\n market: \"EXCHANGE MARKET\",\n limit: \"EXCHANGE LIMIT\"\n },\n fiat: {\n USD: \"USD\",\n EUR: \"EUR\",\n JPY: \"JPY\",\n GBP: \"GBP\",\n CHN: \"CHN\"\n },\n // actually the correct names unlike the v1\n // we don't want to extend this with accountsByType in v1\n v2AccountsByType: {\n spot: \"exchange\",\n exchange: \"exchange\",\n funding: \"funding\",\n margin: \"margin\",\n derivatives: \"margin\",\n future: \"margin\",\n swap: \"margin\"\n },\n withdraw: {\n includeFee: !1\n }\n },\n exceptions: {\n exact: {\n 11010: Ae,\n 10001: ee,\n 10020: O,\n 10100: Z,\n 10114: ze,\n 20060: dt,\n // {\"code\":503,\"error\":\"temporarily_unavailable\",\"error_description\":\"Sorry, the service is temporarily unavailable. See https://www.bitfinex.com/ for more info.\"}\n temporarily_unavailable: Te\n },\n broad: {\n address: et,\n \"available balance is only\": re,\n \"not enough exchange balance\": re,\n \"Order not found\": Se,\n \"symbol: invalid\": O,\n \"Invalid order: minimum size for\": g,\n \"Invalid order\": k,\n \"Momentary balance check\": je,\n \"digest invalid\": Pt\n },\n messages: {\n \"Invalid order: minimum size for\": ye.ORDER_UNDER_MINIMUM\n }\n }\n });\n }\n isFiat(e) {\n return e in this.options.fiat;\n }\n getCurrencyId(e) {\n return \"f\" + e;\n }\n getCurrencyName(e) {\n if (e in this.options.currencyNames)\n return this.options.currencyNames[e];\n throw new ke().addMessage(e + \" not supported for withdrawal\").exchange(this.id);\n }\n amountToPrecision(e, t) {\n return e = this.safeSymbol(e), this.decimalToPrecision(t, Et, this.markets[e].precision.amount, St);\n }\n priceToPrecision(e, t) {\n return e = this.safeSymbol(e), t = this.decimalToPrecision(t, Dt, this.markets[e].precision.price, this.precisionMode), this.decimalToPrecision(t, Et, 8, St);\n }\n async fetchStatus(e = {}) {\n const t = await this.publicGetPlatformStatus(e), i = this.safeString(t, 0);\n return {\n status: this.safeString({ 0: \"maintenance\", 1: \"ok\" }, i, i),\n updated: void 0,\n eta: void 0,\n url: void 0,\n info: t\n };\n }\n async fetchMarkets(e = {}) {\n let t = await this.publicGetConfPubInfoPair(e), i = await this.publicGetConfPubInfoPairFutures(e);\n t = this.safeValue(t, 0, []), i = this.safeValue(i, 0, []);\n const s = this.arrayConcat(t, i);\n let n = await this.publicGetConfPubListPairMargin(e);\n n = this.safeValue(n, 0, []);\n const r = [];\n for (let a = 0; a < s.length; a++) {\n const o = s[a], c = this.safeStringUpper(o, 0), u = this.safeValue(o, 1, {});\n let f = !0;\n c.indexOf(\"F0\") >= 0 && (f = !1);\n const h = !f;\n let l, p;\n if (c.indexOf(\":\") >= 0) {\n const j = c.split(\":\");\n l = j[0], p = j[1];\n } else\n l = c.slice(0, 3), p = c.slice(3, 6);\n let m = this.safeCurrencyCode(l), y = this.safeCurrencyCode(p);\n const w = m.split(\"F0\"), S = y.split(\"F0\");\n m = this.safeString(w, 0), y = this.safeString(S, 0);\n let b = m + \"/\" + y;\n l = this.getCurrencyId(l), p = this.getCurrencyId(p);\n let T, x;\n h && (T = y, x = y, b = b + \":\" + T);\n const v = this.safeString(u, 3), _ = this.safeString(u, 4);\n let V = !1;\n f && this.inArray(c, n) && (V = !0), r.push({\n id: \"t\" + c,\n symbol: b,\n base: m,\n quote: y,\n settle: T,\n baseId: l,\n quoteId: p,\n settleId: x,\n type: f ? \"spot\" : \"swap\",\n spot: f,\n margin: V,\n swap: h,\n future: !1,\n option: !1,\n active: !0,\n contract: h,\n linear: h ? !0 : void 0,\n inverse: h ? !1 : void 0,\n contractSize: h ? this.parseNumber(\"1\") : void 0,\n expiry: void 0,\n expiryDatetime: void 0,\n strike: void 0,\n optionType: void 0,\n precision: {\n amount: parseInt(\"8\"),\n price: parseInt(\"5\")\n },\n limits: {\n leverage: {\n min: void 0,\n max: void 0\n },\n amount: {\n min: this.parseNumber(v),\n max: this.parseNumber(_)\n },\n price: {\n min: void 0,\n max: void 0\n },\n cost: {\n min: void 0,\n max: void 0\n }\n },\n created: void 0,\n info: u\n });\n }\n return r;\n }\n async fetchCurrencies(e = {}) {\n const s = {\n config: [\n \"pub:list:currency\",\n \"pub:map:currency:sym\",\n \"pub:map:currency:label\",\n \"pub:map:currency:unit\",\n \"pub:map:currency:undl\",\n \"pub:map:currency:pool\",\n \"pub:map:currency:explorer\",\n \"pub:map:currency:tx:fee\",\n \"pub:map:tx:method\",\n \"pub:info:tx:status\"\n // provides withdrawal/deposit statuses 1 = active, 0 = disabled\n ].join(\",\")\n }, n = await this.publicGetConfConfig(this.extend(s, e)), r = {\n sym: this.indexBy(this.safeValue(n, 1, []), 0),\n label: this.indexBy(this.safeValue(n, 2, []), 0),\n unit: this.indexBy(this.safeValue(n, 3, []), 0),\n undl: this.indexBy(this.safeValue(n, 4, []), 0),\n pool: this.indexBy(this.safeValue(n, 5, []), 0),\n explorer: this.indexBy(this.safeValue(n, 6, []), 0),\n fees: this.indexBy(this.safeValue(n, 7, []), 0),\n networkStatus: this.indexBy(this.safeValue(n, 9, []), 0)\n }, a = this.safeValue(n, 0, []), o = {};\n for (let c = 0; c < a.length; c++) {\n const u = a[c];\n if (u.indexOf(\"F0\") >= 0)\n continue;\n const f = this.safeCurrencyCode(u), h = this.safeValue(r.label, u, []), l = this.safeString(h, 1), p = this.safeValue(r.pool, u, []), m = this.safeString(p, 1), y = m === void 0 ? \"other\" : \"crypto\", w = this.safeValue(r.fees, u, []), S = this.safeValue(w, 1, []), b = this.safeNumber(S, 1), T = this.safeValue(r.undl, u, []), x = \"8\", v = \"f\" + u;\n let _ = !1, V = !1;\n const j = {}, G = this.safeValue(n, 8, []), W = u.replace(\"F0\", \"\");\n for (let se = 0; se < G.length; se++) {\n const $ = G[se], te = this.safeString($, 0);\n if (this.safeString(this.safeValue($, 1, []), 0) === W) {\n const N = m ?? this.safeNetwork(te), L = this.safeValue(r.networkStatus, te, []), z = this.safeInteger(L, 1, 0) === 1, K = this.safeInteger(L, 2, 0) === 1;\n V = z || V, _ = K || _, j[N] = {\n info: te,\n id: te.toLowerCase(),\n network: N,\n active: z && K,\n deposit: z,\n withdraw: K,\n fee: void 0,\n precision: void 0,\n limits: {\n withdraw: {\n min: void 0,\n max: void 0\n }\n }\n };\n }\n }\n o[f] = {\n id: v,\n uppercaseId: u,\n code: f,\n info: [u, h, p, w, T],\n type: y,\n name: l,\n active: _ && V,\n deposit: V,\n withdraw: _,\n fee: b,\n precision: parseInt(x),\n limits: {\n amount: {\n min: this.parseNumber(this.parsePrecision(x)),\n max: void 0\n },\n withdraw: {\n min: b,\n max: void 0\n }\n },\n networks: {}\n }, Object.keys(j).length > 0 && (o[f].networks = j);\n }\n return o;\n }\n safeNetwork(e) {\n const t = {\n BITCOIN: \"BTC\",\n LITECOIN: \"LTC\",\n ETHEREUM: \"ETH\",\n ERC20: \"ETH\",\n TETHERUSE: \"ETH\",\n TETHERUSO: \"OMNI\",\n TETHERUSL: \"LIQUID\",\n TETHERUSX: \"TRX\",\n TETHERUSS: \"EOS\",\n TETHERUSDTAVAX: \"AVAX\",\n TETHERUSDTSOL: \"SOL\",\n TETHERUSDTALG: \"ALG\",\n TETHERUSDTBCH: \"BCH\",\n TETHERUSDTKSM: \"KSM\",\n TETHERUSDTDVF: \"DVF\",\n TETHERUSDTOMG: \"OMG\",\n TETHERUSDTXTZ: \"XTZ\",\n TETHERUSDTNEAR: \"NEAR\",\n TETHERUSDTDOT: \"DOT\",\n TETHERUSDTPLY: \"PLY\",\n TETHERUSDTKAVA: \"KAVA\",\n TETHERMXNTE: \"ETH\",\n TETHERXAUTE: \"ETH\",\n TETHEREUE: \"ETH\",\n TETHERCNHTX: \"ETH\",\n TETHERCNHTE: \"ETH\",\n TETHERUSDTZK: \"ZK2\",\n XAUT: \"ETH\",\n CNHT: \"ETH\",\n EUT: \"ETH\",\n MXNT: \"ETH\",\n NEOGAS: \"NEO\",\n LES: \"EOS\",\n LET: \"ETH\"\n };\n return this.safeString(t, e, e);\n }\n async fetchBalance(e = {}) {\n await this.loadMarkets();\n const t = this.safeValue(this.options, \"v2AccountsByType\", {}), i = this.safeString(e, \"type\", \"exchange\"), s = this.safeString(t, i, i);\n if (s === void 0) {\n const c = Object.keys(t);\n throw new g(\"fetchBalance() type parameter must be one of \" + c.join(\", \")).exchange(this.id);\n }\n const n = i === \"derivatives\", r = this.omit(e, \"type\"), a = await this.privatePostAuthRWallets(r), o = { info: a };\n for (let c = 0; c < a.length; c++) {\n const u = a[c], f = this.account(), h = this.safeString(u, 3);\n h !== \"0\" && (f.debt = h);\n const l = this.safeString(u, 0), p = this.safeStringLower(u, 1, \"\"), m = p.length - 2, y = [\"f0\", \"F0\"].includes(p.slice(m));\n if (s === l && (n ? y : !y)) {\n const S = this.safeCurrencyCode(p);\n f.total = this.safeString(u, 2), f.free = this.safeString(u, 4), o[S] = f;\n }\n }\n return this.safeBalance(o);\n }\n async transfer(e, t, i, s, n = {}) {\n await this.loadMarkets();\n const r = this.safeValue(this.options, \"v2AccountsByType\", {}), a = this.safeString(r, i);\n if (a === void 0) {\n const y = Object.keys(r);\n throw new g(\"transfer() fromAccount must be one of \" + y.join(\", \")).exchange(this.id);\n }\n const o = this.safeString(r, s);\n if (o === void 0) {\n const y = Object.keys(r);\n throw new g(\"transfer() toAccount must be one of \" + y.join(\", \")).exchange(this.id);\n }\n const c = this.currency(e), u = this.convertDerivativesId(c, i), f = this.convertDerivativesId(c, s), l = {\n amount: this.currencyToPrecision(e, t),\n currency: u,\n currency_to: f,\n from: a,\n to: o\n }, p = await this.privatePostAuthWTransfer(this.extend(l, n));\n if (this.safeString(p, 0) === \"error\") {\n const y = this.safeString(p, 2, \"\");\n throw this.throwExactlyMatchedException(this.exceptions.exact, y, this.id + \" \" + y), new je().addMessage(y).exchange(this.id);\n }\n return this.parseTransfer(p, c);\n }\n parseTransfer(e, t = void 0) {\n const i = this.safeInteger(e, 0), s = this.safeValue(e, 4), n = this.safeString(s, 1), r = this.safeString(s, 2), a = this.safeString(s, 5), o = this.safeString(e, 6);\n return {\n id: void 0,\n timestamp: i,\n datetime: this.iso8601(i),\n status: this.parseTransferStatus(o),\n amount: this.safeNumber(s, 7),\n currency: this.safeCurrencyCode(a, t),\n fromAccount: n,\n toAccount: r,\n info: e\n };\n }\n parseTransferStatus(e) {\n const t = {\n SUCCESS: \"ok\",\n ERROR: \"failed\",\n FAILURE: \"failed\"\n };\n return this.safeString(t, e, e);\n }\n convertDerivativesId(e, t) {\n const i = this.safeValue(e, \"info\"), s = this.safeString(i, 0), n = this.safeValue(i, 4, []);\n let r;\n if (t === \"derivatives\") {\n r = this.safeString(n, 0, s);\n const a = r.length - 2;\n r.slice(a) === \"F0\" || (r = r + \"F0\");\n } else\n t !== \"margin\" ? r = this.safeString(n, 1, s) : r = s;\n return r;\n }\n async fetchOrderBook(e, t = void 0, i = {}) {\n await this.loadMarkets();\n const s = this.safeValue(this.options, \"precision\", \"R0\"), n = this.market(e), r = {\n symbol: n.id,\n precision: s\n };\n t !== void 0 && (r.len = t);\n const a = this.extend(r, i), o = await this.publicGetBookSymbolPrecision(a), c = this.milliseconds(), u = {\n symbol: n.symbol,\n bids: [],\n asks: [],\n timestamp: c,\n datetime: this.iso8601(c),\n nonce: void 0\n }, f = a.precision === \"R0\" ? 1 : 0;\n for (let h = 0; h < o.length; h++) {\n const l = o[h], p = this.safeNumber(l, f), m = this.safeString(l, 2), y = P.stringAbs(m), w = P.stringGt(m, \"0\") ? \"bids\" : \"asks\";\n u[w].push([p, this.parseNumber(y)]);\n }\n return u.bids = this.sortBy(u.bids, 0, !0), u.asks = this.sortBy(u.asks, 0), u;\n }\n parseTicker(e, t = void 0) {\n const i = this.safeSymbol(void 0, t), s = e.length, n = this.safeString(e, s - 4), r = this.safeString(e, s - 5);\n return this.safeTicker({\n symbol: i,\n timestamp: void 0,\n datetime: void 0,\n high: this.safeString(e, s - 2),\n low: this.safeString(e, s - 1),\n bid: this.safeString(e, s - 10),\n bidVolume: this.safeString(e, s - 9),\n ask: this.safeString(e, s - 8),\n askVolume: this.safeString(e, s - 7),\n vwap: void 0,\n open: void 0,\n close: n,\n last: n,\n previousClose: void 0,\n change: this.safeString(e, s - 6),\n percentage: P.stringMul(r, \"100\"),\n average: void 0,\n baseVolume: this.safeString(e, s - 3),\n quoteVolume: void 0,\n info: e\n }, t);\n }\n async fetchTickers(e = void 0, t = {}) {\n await this.loadMarkets(), e = this.marketSymbols(e);\n const i = {};\n if (e !== void 0) {\n const r = this.marketIds(e);\n i.symbols = r.join(\",\");\n } else\n i.symbols = \"ALL\";\n const s = await this.publicGetTickers(this.extend(i, t)), n = {};\n for (let r = 0; r < s.length; r++) {\n const a = s[r], o = this.safeString(a, 0), c = this.safeMarket(o), u = c.symbol;\n n[u] = this.parseTicker(a, c);\n }\n return this.filterByArrayTickers(n, \"symbol\", e);\n }\n async fetchTicker(e, t = {}) {\n await this.loadMarkets();\n const i = this.market(e), s = {\n symbol: i.id\n }, n = await this.publicGetTickerSymbol(this.extend(s, t));\n return this.parseTicker(n, i);\n }\n parseTrade(e, t = void 0) {\n const s = e.length > 5, n = this.safeString(e, 0), r = s ? 4 : 2;\n let a, o = this.safeString(e, r);\n const c = s ? 5 : 3, u = this.safeString(e, c);\n o[0] === \"-\" ? (a = \"sell\", o = P.stringAbs(o)) : a = \"buy\";\n let f, h, l, p, m = this.safeSymbol(void 0, t);\n const y = s ? 2 : 1, w = this.safeInteger(e, y);\n if (s) {\n const S = e[1];\n m = this.safeSymbol(S), f = this.safeString(e, 3), h = this.safeInteger(e, 8) === 1 ? \"maker\" : \"taker\";\n let T = this.safeString(e, 9);\n T = P.stringNeg(T);\n const x = this.safeString(e, 10), v = this.safeCurrencyCode(x);\n p = {\n cost: T,\n currency: v\n };\n const _ = e[6];\n l = this.safeString(this.options.exchangeTypes, _);\n }\n return this.safeTrade({\n id: n,\n timestamp: w,\n datetime: this.iso8601(w),\n symbol: m,\n order: f,\n side: a,\n type: l,\n takerOrMaker: h,\n price: u,\n amount: o,\n cost: void 0,\n fee: p,\n info: e\n }, t);\n }\n async fetchTrades(e, t = void 0, i = void 0, s = {}) {\n await this.loadMarkets();\n let n = !1;\n if ([n, s] = this.handleOptionAndParams(s, \"fetchTrades\", \"paginate\"), n)\n return await this.fetchPaginatedCallDynamic(\"fetchTrades\", e, t, i, s, 1e4);\n const r = this.market(e);\n let a = \"-1\", o = {\n symbol: r.id\n };\n t !== void 0 && (o.start = t, a = \"1\"), i !== void 0 && (o.limit = Math.min(i, 1e4)), o.sort = a, [o, s] = this.handleUntilOption(\"end\", o, s);\n const c = await this.publicGetTradesSymbolHist(this.extend(o, s)), u = this.sortBy(c, 1);\n return this.parseTrades(u, r, void 0, i);\n }\n async fetchOHLCV(e, t = \"1m\", i = void 0, s = 100, n = {}) {\n await this.loadMarkets();\n let r = !1;\n if ([r, n] = this.handleOptionAndParams(n, \"fetchOHLCV\", \"paginate\"), r)\n return await this.fetchPaginatedCallDeterministic(\"fetchOHLCV\", e, i, s, t, n, 1e4);\n const a = this.market(e);\n s === void 0 && (s = 1e4);\n let o = {\n symbol: a.id,\n timeframe: this.safeString(this.timeframes, t, t),\n sort: 1,\n start: i,\n limit: s\n };\n [o, n] = this.handleUntilOption(\"end\", o, n);\n const c = await this.publicGetCandlesTradeTimeframeSymbolHist(this.extend(o, n));\n return this.parseOHLCVs(c, a, t, i, s);\n }\n parseOHLCV(e, t = void 0) {\n return [\n this.safeInteger(e, 0),\n this.safeNumber(e, 1),\n this.safeNumber(e, 3),\n this.safeNumber(e, 4),\n this.safeNumber(e, 2),\n this.safeNumber(e, 5)\n ];\n }\n parseOrderStatus(e) {\n if (e === void 0)\n return e;\n const t = e.split(\" \"), i = this.safeString(t, 0), s = {\n ACTIVE: \"open\",\n PARTIALLY: \"open\",\n EXECUTED: \"closed\",\n CANCELED: \"canceled\",\n INSUFFICIENT: \"canceled\",\n \"POSTONLY CANCELED\": \"canceled\",\n RSN_DUST: \"rejected\",\n RSN_PAUSE: \"rejected\",\n \"IOC CANCELED\": \"canceled\",\n \"FILLORKILL CANCELED\": \"canceled\"\n };\n return this.safeString(s, i, e);\n }\n parseOrderFlags(e) {\n const t = {\n 1024: [\"reduceOnly\"],\n 4096: [\"postOnly\"],\n 5120: [\"reduceOnly\", \"postOnly\"]\n // '64': 'hidden', // The hidden order option ensures an order does not appear in the order book\n // '512': 'close', // Close position if position present.\n // '16384': 'OCO', // The one cancels other order option allows you to place a pair of orders stipulating that if one order is executed fully or partially, then the other is automatically canceled.\n // '524288': 'No Var Rates' // Excludes variable rate funding offers from matching against this order, if on margin\n };\n return this.safeValue(t, e, void 0);\n }\n parseTimeInForce(e) {\n const t = {\n \"EXCHANGE IOC\": \"IOC\",\n \"EXCHANGE FOK\": \"FOK\",\n IOC: \"IOC\",\n FOK: \"FOK\"\n // Margin\n };\n return this.safeString(t, e, \"GTC\");\n }\n parseOrder(e, t = void 0) {\n const i = this.safeString(e, 0), s = this.safeString(e, 3), n = this.safeSymbol(s), r = this.safeInteger(e, 5), a = P.stringAbs(this.safeString(e, 6)), o = this.safeString(e, 7), c = P.stringAbs(o), u = P.stringLt(o, \"0\") ? \"sell\" : \"buy\", f = this.safeString(e, 8), h = this.safeString(this.safeValue(this.options, \"exchangeTypes\"), f), l = this.parseTimeInForce(f), p = this.safeString(e, 12), m = this.parseOrderFlags(p);\n let y = !1;\n if (m !== void 0)\n for (let _ = 0; _ < m.length; _++)\n m[_] === \"postOnly\" && (y = !0);\n let w = this.safeString(e, 16), S;\n (f === \"EXCHANGE STOP\" || f === \"EXCHANGE STOP LIMIT\") && (w = void 0, S = this.safeString(e, 16), f === \"EXCHANGE STOP LIMIT\" && (w = this.safeString(e, 19)));\n let b;\n const T = this.safeString(e, 13);\n if (T !== void 0) {\n const _ = T.split(\" @ \");\n b = this.parseOrderStatus(this.safeString(_, 0));\n }\n const x = this.safeString(e, 17), v = this.safeString(e, 2);\n return this.safeOrder({\n info: e,\n id: i,\n clientOrderId: v,\n timestamp: r,\n datetime: this.iso8601(r),\n lastTradeTimestamp: void 0,\n symbol: n,\n type: h,\n timeInForce: l,\n postOnly: y,\n side: u,\n price: w,\n stopPrice: S,\n triggerPrice: S,\n amount: c,\n cost: void 0,\n average: x,\n filled: void 0,\n remaining: a,\n status: b,\n fee: void 0,\n trades: void 0\n }, t);\n }\n async fetchOrder(e, t = void 0, i = {}) {\n await this.loadMarkets();\n const n = {\n symbol: this.market(t).id\n }, r = await this.privatePostAuthROrdersSymbolHist(this.extend(n, i));\n for (let a = 0; a < r.length; a++) {\n const o = this.parseOrder(r[a]);\n if (o.id === e)\n return o;\n }\n }\n async createOrderRequest(e, t, i, s, n = void 0, r = {}) {\n const a = this.market(e);\n let o = this.amountToPrecision(e, s);\n o = i === \"buy\" ? o : P.stringNeg(o);\n const c = {\n symbol: a.id,\n amount: o\n }, u = this.safeString2(r, \"stopPrice\", \"triggerPrice\"), f = this.safeString(r, \"trailingAmount\"), h = this.safeString(r, \"timeInForce\"), l = this.safeBool(r, \"postOnly\", !1), p = this.safeBool(r, \"reduceOnly\", !1), m = this.safeValue2(r, \"cid\", \"clientOrderId\");\n let y = t.toUpperCase();\n f !== void 0 ? (y = \"TRAILING STOP\", c.price_trailing = f) : u !== void 0 && (c.price = this.priceToPrecision(e, u), t === \"limit\" ? (y = \"STOP LIMIT\", c.price_aux_limit = this.priceToPrecision(e, n)) : y = \"STOP\");\n const w = h === \"IOC\", S = h === \"FOK\", b = l || h === \"PO\";\n if ((w || S) && n === void 0)\n throw new g(\"createOrder() requires a price argument with IOC and FOK orders\").exchange(this.id);\n if ((w || S) && t === \"market\")\n throw new g(\"createOrder() does not allow market IOC and FOK orders\").exchange(this.id);\n t !== \"market\" && u === void 0 && (c.price = this.priceToPrecision(e, n)), w ? y = \"IOC\" : S && (y = \"FOK\");\n let T;\n [T, r] = this.handleMarginModeAndParams(\"createOrder\", r), a.spot && T === void 0 && (y = \"EXCHANGE \" + y), c.type = y;\n let x = 0;\n return b && (x = this.sum(x, 4096)), p && (x = this.sum(x, 1024)), x !== 0 && (c.flags = x), m !== void 0 && (c.cid = m), r = this.omit(r, [\"triggerPrice\", \"stopPrice\", \"timeInForce\", \"postOnly\", \"reduceOnly\", \"trailingAmount\", \"clientOrderId\"]), this.extend(c, r);\n }\n async createOrder(e, t, i, s, n = void 0, r = {}) {\n await this.loadMarkets();\n const a = this.market(e), o = await this.createOrderRequest(e, t, i, s, n, r), c = await this.privatePostAuthWOrderSubmit(o);\n if (this.safeString(c, 6) !== \"SUCCESS\") {\n const l = c[5], p = c[7];\n throw new k().addMessage(c[6] + \": \" + p + \" (#\" + l + \")\").exchange(this.id);\n }\n const f = this.safeList(c, 4, []), h = this.safeList(f, 0);\n return this.parseOrder(h, a);\n }\n async createOrders(e, t = {}) {\n await this.loadMarkets();\n const i = [];\n for (let o = 0; o < e.length; o++) {\n const c = e[o], u = this.safeString(c, \"symbol\"), f = this.safeString(c, \"type\"), h = this.safeString(c, \"side\"), l = this.safeNumber(c, \"amount\"), p = this.safeNumber(c, \"price\"), m = this.safeDict(c, \"params\", {}), y = this.createOrderRequest(u, f, h, l, p, m);\n i.push([\"on\", y]);\n }\n const s = {\n ops: i\n }, n = await this.privatePostAuthWOrderMulti(s), r = [], a = this.safeList(n, 4, []);\n for (let o = 0; o < a.length; o++) {\n const u = a[o][4];\n r.push(u[0]);\n }\n return this.parseOrders(r);\n }\n async cancelAllOrders(e = void 0, t = {}) {\n await this.loadMarkets();\n const i = {\n all: 1\n }, s = await this.privatePostAuthWOrderCancelMulti(this.extend(i, t)), n = this.safeValue(s, 4, []);\n return this.parseOrders(n);\n }\n async cancelOrder(e, t = void 0, i = {}) {\n await this.loadMarkets();\n const s = this.safeValue2(i, \"cid\", \"clientOrderId\");\n let n;\n if (s !== void 0) {\n const o = this.safeValue(i, \"cidDate\");\n if (o === void 0)\n throw new g(\"canceling an order by clientOrderId ('cid') requires both 'cid' and 'cid_date' ('YYYY-MM-DD')\").exchange(this.id);\n n = {\n cid: s,\n cid_date: o\n }, i = this.omit(i, [\"cid\", \"clientOrderId\"]);\n } else\n n = {\n id: parseInt(e)\n };\n const r = await this.privatePostAuthWOrderCancel(this.extend(n, i)), a = this.safeValue(r, 4);\n return this.parseOrder(a);\n }\n async cancelOrders(e, t = void 0, i = {}) {\n await this.loadMarkets();\n for (let o = 0; o < e.length; o++)\n e[o] = this.parseToNumeric(e[o]);\n const s = {\n id: e\n };\n let n;\n t !== void 0 && (n = this.market(t));\n const r = await this.privatePostAuthWOrderCancelMulti(this.extend(s, i)), a = this.safeList(r, 4, []);\n return this.parseOrders(a, n);\n }\n async fetchOpenOrder(e, t = void 0, i = {}) {\n const s = {\n id: [parseInt(e)]\n }, n = await this.fetchOpenOrders(t, void 0, void 0, this.extend(s, i)), r = this.safeValue(n, 0);\n if (r === void 0)\n throw new Se().addMessage(this.id + \" order \" + e + \" not found\").exchange(this.id);\n return r;\n }\n async fetchClosedOrder(e, t = void 0, i = {}) {\n const s = {\n id: [parseInt(e)]\n }, n = await this.fetchClosedOrders(t, void 0, void 0, this.extend(s, i)), r = this.safeValue(n, 0);\n if (r === void 0)\n throw new Se().addMessage(\"order \" + e + \" not found\").exchange(this.id);\n return r;\n }\n async fetchOpenOrders(e = void 0, t = void 0, i = void 0, s = {}) {\n await this.loadMarkets();\n const n = {};\n let r, a;\n return e === void 0 ? a = await this.privatePostAuthROrders(this.extend(n, s)) : (r = this.market(e), n.symbol = r.id, a = await this.privatePostAuthROrdersSymbol(this.extend(n, s))), this.parseOrders(a, r, t, i);\n }\n async fetchClosedOrders(e = void 0, t = void 0, i = void 0, s = {}) {\n await this.loadMarkets();\n let n = !1;\n if ([n, s] = this.handleOptionAndParams(s, \"fetchClosedOrders\", \"paginate\"), n)\n return await this.fetchPaginatedCallDynamic(\"fetchClosedOrders\", e, t, i, s);\n let r = {};\n t !== void 0 && (r.start = t), i !== void 0 && (r.limit = i), [r, s] = this.handleUntilOption(\"end\", r, s);\n let a, o;\n return e === void 0 ? o = await this.privatePostAuthROrdersHist(this.extend(r, s)) : (a = this.market(e), r.symbol = a.id, o = await this.privatePostAuthROrdersSymbolHist(this.extend(r, s))), this.parseOrders(o, a, t, i);\n }\n async fetchOrderTrades(e, t = void 0, i = void 0, s = void 0, n = {}) {\n if (t === void 0)\n throw new g(\"fetchOrderTrades() requires a symbol argument\").exchange(this.id);\n await this.loadMarkets();\n const r = this.market(t), o = {\n id: parseInt(e),\n symbol: r.id\n }, c = await this.privatePostAuthROrderSymbolIdTrades(this.extend(o, n));\n return this.parseTrades(c, r, i, s);\n }\n async fetchMyTrades(e = void 0, t = void 0, i = void 0, s = {}) {\n await this.loadMarkets();\n let n;\n const r = {\n end: this.milliseconds()\n };\n t !== void 0 && (r.start = t), i !== void 0 && (r.limit = i);\n let a;\n return e !== void 0 ? (n = this.market(e), r.symbol = n.id, a = await this.privatePostAuthRTradesSymbolHist(this.extend(r, s))) : a = await this.privatePostAuthRTradesHist(this.extend(r, s)), this.parseTrades(a, n, t, i);\n }\n async createDepositAddress(e, t = {}) {\n await this.loadMarkets();\n const i = {\n op_renew: 1\n };\n return await this.fetchDepositAddress(e, this.extend(i, t));\n }\n async fetchDepositAddress(e, t = {}) {\n await this.loadMarkets();\n const i = this.currency(e), s = this.safeString(t, \"network\", e), n = this.safeValue(i, \"networks\", {}), r = this.safeValue(n, s), a = this.safeString(r, \"id\");\n if (a === void 0)\n throw new Kn(e).addMessage(\"You can specify it by providing the 'network' value inside params\").exchange(this.id);\n const o = this.safeString(t, \"wallet\", \"exchange\");\n t = this.omit(t, \"network\", \"wallet\");\n const c = {\n method: a,\n wallet: o,\n op_renew: 0\n // a value of 1 will generate a new address\n }, u = await this.privatePostAuthWDepositAddress(this.extend(c, t)), f = this.safeValue(u, 4, []), h = this.safeString(f, 5), l = h === void 0 ? this.safeString(f, 4) : h, p = h === void 0 ? void 0 : this.safeString(f, 4);\n return this.checkAddress(l), {\n currency: e,\n address: l,\n tag: p,\n network: void 0,\n info: u\n };\n }\n parseTransactionStatus(e) {\n const t = {\n SUCCESS: \"ok\",\n COMPLETED: \"ok\",\n ERROR: \"failed\",\n FAILURE: \"failed\",\n CANCELED: \"canceled\",\n \"PENDING APPROVAL\": \"pending\",\n PENDING: \"pending\",\n \"PENDING REVIEW\": \"pending\",\n \"PENDING CANCELLATION\": \"pending\",\n SENDING: \"pending\",\n \"USER APPROVED\": \"pending\"\n };\n return this.safeString(t, e, e);\n }\n parseTransaction(e, t = void 0) {\n const i = e.length;\n let s, n, r, a, o, c, u, f, h, l, p, m, y;\n if (i === 8) {\n const w = this.safeValue(e, 4, []);\n s = this.safeInteger(e, 0), t !== void 0 && (r = t.code), h = this.safeString(w, 8), h !== void 0 && (h = P.stringAbs(h)), a = this.safeNumber(w, 5), o = this.safeInteger(w, 0), c = \"ok\", o === 0 && (o = void 0, c = \"failed\"), u = this.safeString(w, 3), f = \"withdrawal\";\n } else if (i === 22) {\n o = this.safeString(e, 0);\n const w = this.safeString(e, 1);\n r = this.safeCurrencyCode(w, t);\n const S = this.safeString(e, 2);\n m = this.safeNetwork(S), s = this.safeInteger(e, 5), n = this.safeInteger(e, 6), c = this.parseTransactionStatus(this.safeString(e, 9));\n const b = this.safeString(e, 12);\n a = P.stringAbs(b), b !== void 0 && (P.stringLt(b, \"0\") ? f = \"withdrawal\" : f = \"deposit\"), h = this.safeString(e, 13), h !== void 0 && (h = P.stringAbs(h)), p = this.safeString(e, 16), l = this.safeString(e, 20), y = this.safeString(e, 21);\n }\n return {\n info: e,\n id: o,\n txid: l,\n type: f,\n currency: r,\n network: m,\n amount: this.parseNumber(a),\n status: c,\n timestamp: s,\n datetime: this.iso8601(s),\n address: p,\n addressFrom: void 0,\n addressTo: p,\n tag: u,\n tagFrom: void 0,\n tagTo: u,\n updated: n,\n comment: y,\n internal: void 0,\n fee: {\n currency: r,\n cost: this.parseNumber(h),\n rate: void 0\n }\n };\n }\n async fetchTradingFees(e = {}) {\n await this.loadMarkets();\n const t = await this.privatePostAuthRSummary(e), i = {}, s = this.safeValue(this.options, \"fiat\", {}), n = this.safeValue(t, 4, []), r = this.safeValue(n, 0, []), a = this.safeValue(n, 1, []), o = this.safeNumber(r, 0), c = this.safeNumber(r, 2), u = this.safeNumber(r, 5), f = this.safeNumber(a, 0), h = this.safeNumber(a, 2), l = this.safeNumber(a, 5);\n for (let p = 0; p < this.symbols.length; p++) {\n const m = this.symbols[p], y = this.market(m), w = {\n info: t,\n symbol: m,\n percentage: !0,\n tierBased: !0\n };\n y.quote in s ? (w.maker = c, w.taker = h) : y.contract ? (w.maker = u, w.taker = l) : (w.maker = o, w.taker = f), i[m] = w;\n }\n return i;\n }\n async fetchDepositsWithdrawals(e = void 0, t = void 0, i = void 0, s = {}) {\n await this.loadMarkets();\n let n;\n const r = {};\n t !== void 0 && (r.start = t), i !== void 0 && (r.limit = i);\n let a;\n return e !== void 0 ? (n = this.currency(e), r.currency = n.uppercaseId, a = await this.privatePostAuthRMovementsCurrencyHist(this.extend(r, s))) : a = await this.privatePostAuthRMovementsHist(this.extend(r, s)), this.parseTransactions(a, n, t, i);\n }\n async withdraw(e, t, i, s = void 0, n = {}) {\n this.checkAddress(i), await this.loadMarkets();\n const r = this.currency(e), a = this.safeString(n, \"network\", e);\n n = this.omit(n, \"network\");\n const o = this.safeValue(r, \"networks\", {}), c = this.safeValue(o, a), u = this.safeString(c, \"id\");\n if (u === void 0)\n throw new Kn(e).addMessage(\"You can specify it by providing the 'network' value inside params\").exchange(this.id);\n const f = this.safeString(n, \"wallet\", \"exchange\");\n n = this.omit(n, \"network\", \"wallet\");\n const h = this.currencyToPrecision(e, t, a), l = {\n method: u,\n wallet: f,\n amount: this.numberToString(h),\n address: i\n };\n s !== void 0 && (l.payment_id = s);\n const p = this.safeValue(this.options, \"withdraw\", {});\n this.safeBool(p, \"includeFee\", !1) && (l.fee_deduct = 1);\n const y = await this.privatePostAuthWWithdraw(this.extend(l, n)), w = this.safeString(y, 0), S = this.safeValue(y, 4, []), b = this.safeInteger(S, 0);\n if (w === \"error\" || b === 0) {\n const v = this.safeString(y, 2, void 0) || this.safeString(y, 7, \"\");\n throw this.throwExactlyMatchedException(this.exceptions.exact, v, v), this.throwBroadlyMatchedException(this.exceptions.broad, v, v), new ke().addMessage(v).exchange(this.id);\n }\n const T = this.safeString(y, 7);\n T !== \"success\" && this.throwBroadlyMatchedException(this.exceptions.broad, T, T);\n const x = this.parseTransaction(y, r);\n return this.extend(x, {\n address: i\n });\n }\n async fetchPositions(e = void 0, t = {}) {\n await this.loadMarkets(), e = this.marketSymbols(e);\n const i = await this.privatePostAuthRPositions(t);\n return this.parsePositions(i, e);\n }\n parsePosition(e, t = void 0) {\n const i = this.safeString(e, 0), s = this.safeString(e, 2), n = this.safeInteger(e, 12), r = this.safeString(e, 19), a = this.safeString(r, \"trade_price\"), o = this.safeString(r, \"trade_amount\");\n return this.safePosition({\n info: e,\n id: this.safeString(e, 11),\n symbol: this.safeSymbol(i, t),\n notional: this.parseNumber(s),\n marginMode: \"isolated\",\n liquidationPrice: this.safeNumber(e, 8),\n entryPrice: this.safeNumber(e, 3),\n unrealizedPnl: this.safeNumber(e, 6),\n percentage: this.safeNumber(e, 7),\n contracts: void 0,\n contractSize: void 0,\n markPrice: void 0,\n lastPrice: void 0,\n side: P.stringGt(s, \"0\") ? \"long\" : \"short\",\n hedged: void 0,\n timestamp: n,\n datetime: this.iso8601(n),\n lastUpdateTimestamp: this.safeInteger(e, 13),\n maintenanceMargin: this.safeNumber(e, 18),\n maintenanceMarginPercentage: void 0,\n collateral: this.safeNumber(e, 17),\n initialMargin: this.parseNumber(P.stringMul(o, a)),\n initialMarginPercentage: void 0,\n leverage: this.safeNumber(e, 9),\n marginRatio: void 0,\n stopLossPrice: void 0,\n takeProfitPrice: void 0\n });\n }\n nonce() {\n return this.milliseconds();\n }\n async sign(e, t = \"public\", i = \"GET\", s = {}, n = void 0, r = void 0) {\n let a = \"/\" + this.implodeParams(e, s);\n const o = this.omit(s, this.extractParams(e));\n t === \"v1\" ? a = t + a : a = this.version + a;\n let c = this.urls.api[t] + \"/\" + a;\n if (t === \"public\" && Object.keys(o).length && (c += \"?\" + this.urlencode(o)), t === \"private\") {\n this.checkRequiredCredentials();\n const u = this.nonce().toString();\n r = this.json(o);\n const f = \"/api/\" + a + u + r;\n let h;\n this.externalSigner ? h = await this.externalSigner.sign({\n payload: this.encode(f),\n publicApiKey: this.apiKey,\n exchangeId: \"bitfinex\"\n // @todo replace by the id once migrated from ccxt to sdk exchange id\n }) : h = this.hmac(this.encode(f), this.encode(this.secret), wy), n = {\n \"bfx-nonce\": u,\n \"bfx-apikey\": this.apiKey,\n \"bfx-signature\": h,\n \"Content-Type\": \"application/json\"\n };\n }\n return { url: c, method: i, body: r, headers: n };\n }\n handleErrors(e, t, i, s, n, r, a, o, c) {\n if (a !== void 0) {\n if (!Array.isArray(a)) {\n const u = this.safeString2(a, \"message\", \"error\"), f = this.id + \" \" + r;\n throw this.throwExactlyMatchedException(this.exceptions.exact, u, f), this.throwBroadlyMatchedException(this.exceptions.broad, u, f), new O().addMessage(r).exchange(this.id);\n }\n } else if (a === \"\")\n throw new O().addMessage(\"returned empty response\").exchange(this.id);\n if (e === 429)\n throw new Ae().addMessage(r).exchange(this.id);\n if (e === 500) {\n const u = this.safeString(a, 1, \"\"), f = this.safeString(a, 2, \"\"), h = this.id + \" \" + f;\n throw this.throwBroadlyMatchedException(this.exceptions.broad, f, h), this.throwExactlyMatchedException(this.exceptions.exact, u, h), this.throwExactlyMatchedException(this.exceptions.exact, f, h), new O().addMessage(f + \" (#\" + u + \")\").exchange(this.id);\n }\n return a;\n }\n parseLedgerEntryType(e) {\n if (e !== void 0)\n return e.indexOf(\"fee\") >= 0 || e.indexOf(\"charged\") >= 0 ? \"fee\" : e.indexOf(\"rebate\") >= 0 ? \"rebate\" : e.indexOf(\"deposit\") >= 0 || e.indexOf(\"withdrawal\") >= 0 ? \"transaction\" : e.indexOf(\"transfer\") >= 0 ? \"transfer\" : e.indexOf(\"payment\") >= 0 ? \"payout\" : e.indexOf(\"exchange\") >= 0 || e.indexOf(\"position\") >= 0 ? \"trade\" : e;\n }\n parseLedgerEntry(e, t = void 0) {\n let i;\n const s = this.safeString(e, 0), n = this.safeString(e, 1), r = this.safeCurrencyCode(n, t), a = this.safeInteger(e, 3), o = this.safeNumber(e, 5), c = this.safeNumber(e, 6), u = this.safeString(e, 8);\n if (u !== void 0) {\n const f = u.split(\" @ \"), h = this.safeStringLower(f, 0);\n i = this.parseLedgerEntryType(h);\n }\n return {\n id: s,\n direction: void 0,\n account: void 0,\n referenceId: s,\n referenceAccount: void 0,\n type: i,\n currency: r,\n amount: o,\n timestamp: a,\n datetime: this.iso8601(a),\n before: void 0,\n after: c,\n status: void 0,\n fee: void 0,\n info: e\n };\n }\n async fetchLedger(e = void 0, t = void 0, i = void 0, s = {}) {\n await this.loadMarkets();\n let n = !1;\n if ([n, s] = this.handleOptionAndParams(s, \"fetchLedger\", \"paginate\"), n)\n return await this.fetchPaginatedCallDynamic(\"fetchLedger\", e, t, i, s, 2500);\n let r, a = {};\n t !== void 0 && (a.start = t), i !== void 0 && (a.limit = i), [a, s] = this.handleUntilOption(\"end\", a, s);\n let o;\n return e !== void 0 ? (r = this.currency(e), a.currency = r.uppercaseId, o = await this.privatePostAuthRLedgersCurrencyHist(this.extend(a, s))) : o = await this.privatePostAuthRLedgersHist(this.extend(a, s)), this.parseLedger(o, r, t, i);\n }\n async editOrder(e, t, i, s, n = void 0, r = void 0, a = {}) {\n await this.loadMarkets();\n const o = this.market(t), c = {\n id: this.parseToNumeric(e)\n };\n if (n !== void 0) {\n let v = this.amountToPrecision(t, n);\n v = s === \"buy\" ? v : P.stringNeg(v), c.amount = v;\n }\n const u = this.safeString2(a, \"stopPrice\", \"triggerPrice\"), f = this.safeString(a, \"trailingAmount\"), h = this.safeString(a, \"timeInForce\"), l = this.safeBool(a, \"postOnly\", !1), p = this.safeBool(a, \"reduceOnly\", !1), m = this.safeInteger2(a, \"cid\", \"clientOrderId\");\n f !== void 0 ? c.price_trailing = f : u !== void 0 && (c.price = this.priceToPrecision(t, u), i === \"limit\" && (c.price_aux_limit = this.priceToPrecision(t, r)));\n const y = l || h === \"PO\";\n i !== \"market\" && u === void 0 && (c.price = this.priceToPrecision(t, r));\n let w = 0;\n y && (w = this.sum(w, 4096)), p && (w = this.sum(w, 1024)), w !== 0 && (c.flags = w), m !== void 0 && (c.cid = m);\n const S = this.safeInteger2(a, \"leverage\", \"lev\");\n S !== void 0 && (c.lev = S), a = this.omit(a, [\"triggerPrice\", \"stopPrice\", \"timeInForce\", \"postOnly\", \"reduceOnly\", \"trailingAmount\", \"clientOrderId\", \"leverage\"]);\n const b = await this.privatePostAuthWOrderUpdate(this.extend(c, a));\n if (this.safeString(b, 6) !== \"SUCCESS\") {\n const v = b[5], _ = b[7];\n throw new k().addMessage(b[6] + \": \" + _ + \" (#\" + v + \")\").exchange(this.id);\n }\n const x = this.safeList(b, 4, []);\n return this.parseOrder(x, o);\n }\n}\nlet Uy = class extends gt {\n};\nclass qy extends _t {\n constructor(e = ce.SUB_ACCOUNT_ERROR, t = ye.SUB_ACCOUNT_ERROR) {\n super(e, t), this.name = \"SubAccountError\";\n }\n}\nclass ku extends qy {\n constructor(e) {\n super(ce.SUB_ACCOUNT_NOT_FOUND_ERROR, ye.SUB_ACCOUNT_NOT_FOUND_ERROR(e)), this.name = \"SubAccountNotFoundError\";\n }\n}\nclass Gy extends Uy {\n constructor() {\n super(...arguments), this.USDT_FUTURES = \"USDT-FUTURES\", this.USDT_SETTLES = [\"USDT\"], this.USDC_FUTURES = \"USDC-FUTURES\", this.USDC_SETTLES = [\"USDC\"], this.SUSDT_FUTURES = \"SUSDT-FUTURES\", this.SUSDT_SETTLES = [\"SUSDT\"], this.SUSDC_FUTURES = \"SUSDC-FUTURES\", this.SUSDC_SETTLES = [\"SUSDC\"], this.COIN_FUTURES = \"COIN-FUTURES\", this.SCOIN_FUTURES = \"SCOIN-FUTURES\", this.SCOIN_SETTLES = [\"SETH\", \"SBTC\", \"SEOS\"];\n }\n describe() {\n return this.deepExtend(super.describe(), {\n id: \"bitget\",\n name: \"Bitget\",\n countries: [\"SG\"],\n version: \"v2\",\n rateLimit: 50,\n certified: !0,\n pro: !0,\n has: {\n CORS: void 0,\n spot: !0,\n margin: !0,\n swap: !0,\n future: !0,\n option: !1,\n cancelAllOrders: !0,\n cancelOrder: !0,\n cancelOrders: !0,\n createDepositAddress: !1,\n createMarketBuyOrderWithCost: !0,\n createMarketOrderWithCost: !1,\n createMarketSellOrderWithCost: !1,\n createOrder: !0,\n createOrders: !0,\n createOrderWithTakeProfitAndStopLoss: !0,\n createTakeProfitOrder: !0,\n createTrailingAmountOrder: !1,\n createTrailingPercentOrder: !0,\n createTriggerOrder: !0,\n editOrder: !0,\n fetchAccounts: !1,\n fetchBalance: !0,\n fetchCanceledAndClosedOrders: !0,\n fetchCanceledOrders: !0,\n fetchClosedOrders: !0,\n fetchCurrencies: !0,\n fetchDeposit: !1,\n fetchDepositAddress: !0,\n fetchDepositAddresses: !1,\n fetchDeposits: !0,\n fetchDepositsWithdrawals: !1,\n fetchDepositWithdrawFee: \"emulated\",\n fetchDepositWithdrawFees: !0,\n fetchLedger: !0,\n fetchMarkets: !0,\n fetchMyTrades: !0,\n fetchOHLCV: !0,\n fetchOpenOrders: !0,\n fetchOrder: !0,\n fetchOrderBook: !0,\n fetchOrderBooks: !1,\n fetchOrders: !1,\n fetchOrderTrades: !1,\n fetchPosition: !0,\n fetchPositions: !0,\n fetchPositionsRisk: !1,\n fetchStatus: !1,\n fetchTicker: !0,\n fetchTickers: !0,\n fetchTime: !0,\n fetchTrades: !0,\n fetchTradingFee: !0,\n fetchTradingFees: !0,\n fetchTransactions: !1,\n fetchTransfer: !1,\n fetchTransfers: !0,\n fetchWithdrawAddresses: !1,\n fetchWithdrawal: !1,\n fetchWithdrawals: !0,\n transfer: !0,\n withdraw: !0\n },\n timeframes: {\n \"1m\": \"1m\",\n \"3m\": \"3m\",\n \"5m\": \"5m\",\n \"15m\": \"15m\",\n \"30m\": \"30m\",\n \"1h\": \"1h\",\n \"2h\": \"2h\",\n \"4h\": \"4h\",\n \"6h\": \"6h\",\n \"12h\": \"12h\",\n \"1d\": \"1d\",\n \"3d\": \"3d\",\n \"1w\": \"1w\",\n \"1M\": \"1m\"\n },\n hostname: \"bitget.com\",\n urls: {\n logo: \"https://user-images.githubusercontent.com/1294454/195989417-4253ddb0-afbe-4a1c-9dea-9dbcd121fa5d.jpg\",\n api: {\n spot: \"https://api.{hostname}\",\n mix: \"https://api.{hostname}\",\n user: \"https://api.{hostname}\",\n p2p: \"https://api.{hostname}\",\n broker: \"https://api.{hostname}\",\n margin: \"https://api.{hostname}\",\n common: \"https://api.{hostname}\",\n tax: \"https://api.{hostname}\",\n convert: \"https://api.{hostname}\",\n copy: \"https://api.{hostname}\",\n earn: \"https://api.{hostname}\"\n },\n www: \"https://www.bitget.com\",\n doc: [\n \"https://www.bitget.com/api-doc/common/intro\",\n \"https://www.bitget.com/api-doc/spot/intro\",\n \"https://www.bitget.com/api-doc/contract/intro\",\n \"https://www.bitget.com/api-doc/broker/intro\",\n \"https://www.bitget.com/api-doc/margin/intro\",\n \"https://www.bitget.com/api-doc/copytrading/intro\",\n \"https://www.bitget.com/api-doc/earn/intro\",\n \"https://bitgetlimited.github.io/apidoc/en/mix\",\n \"https://bitgetlimited.github.io/apidoc/en/spot\",\n \"https://bitgetlimited.github.io/apidoc/en/broker\",\n \"https://bitgetlimited.github.io/apidoc/en/margin\"\n ],\n fees: \"https://www.bitget.cc/zh-CN/rate?tab=1\",\n // https://www.bitget.com/expressly?languageType=0&channelCode=ccxt&vipCode=tg9j - I removed the code for now, because CWS is blocking until we explain our affiliate program to our users\n referral: \"https://www.bitget.com\"\n },\n api: {\n public: {\n common: {\n get: {\n \"v2/public/annoucements\": 1,\n \"v2/public/time\": 1\n }\n },\n spot: {\n get: {\n \"spot/v1/notice/queryAllNotices\": 1,\n \"spot/v1/public/time\": 1,\n \"spot/v1/public/currencies\": 6.6667,\n \"spot/v1/public/products\": 1,\n \"spot/v1/public/product\": 1,\n \"spot/v1/market/ticker\": 1,\n \"spot/v1/market/tickers\": 1,\n \"spot/v1/market/fills\": 2,\n \"spot/v1/market/fills-history\": 2,\n \"spot/v1/market/candles\": 1,\n \"spot/v1/market/depth\": 1,\n \"spot/v1/market/spot-vip-level\": 2,\n \"spot/v1/market/merge-depth\": 1,\n \"spot/v1/market/history-candles\": 1,\n \"spot/v1/public/loan/coinInfos\": 2,\n \"spot/v1/public/loan/hour-interest\": 2,\n \"v2/spot/public/coins\": 6.6667,\n \"v2/spot/public/symbols\": 1,\n \"v2/spot/market/vip-fee-rate\": 2,\n \"v2/spot/market/tickers\": 1,\n \"v2/spot/market/merge-depth\": 1,\n \"v2/spot/market/orderbook\": 1,\n \"v2/spot/market/candles\": 1,\n \"v2/spot/market/history-candles\": 1,\n \"v2/spot/market/fills\": 2,\n \"v2/spot/market/fills-history\": 2\n }\n },\n mix: {\n get: {\n \"mix/v1/market/contracts\": 1,\n \"mix/v1/market/depth\": 1,\n \"mix/v1/market/ticker\": 1,\n \"mix/v1/market/tickers\": 1,\n \"mix/v1/market/contract-vip-level\": 2,\n \"mix/v1/market/fills\": 1,\n \"mix/v1/market/fills-history\": 2,\n \"mix/v1/market/candles\": 1,\n \"mix/v1/market/index\": 1,\n \"mix/v1/market/funding-time\": 1,\n \"mix/v1/market/history-fundRate\": 1,\n \"mix/v1/market/current-fundRate\": 1,\n \"mix/v1/market/open-interest\": 1,\n \"mix/v1/market/mark-price\": 1,\n \"mix/v1/market/symbol-leverage\": 1,\n \"mix/v1/market/queryPositionLever\": 1,\n \"mix/v1/market/open-limit\": 1,\n \"mix/v1/market/history-candles\": 1,\n \"mix/v1/market/history-index-candles\": 1,\n \"mix/v1/market/history-mark-candles\": 1,\n \"mix/v1/market/merge-depth\": 1,\n \"v2/mix/market/vip-fee-rate\": 2,\n \"v2/mix/market/merge-depth\": 1,\n \"v2/mix/market/ticker\": 1,\n \"v2/mix/market/tickers\": 1,\n \"v2/mix/market/fills\": 1,\n \"v2/mix/market/fills-history\": 2,\n \"v2/mix/market/candles\": 1,\n \"v2/mix/market/history-candles\": 1,\n \"v2/mix/market/history-index-candles\": 1,\n \"v2/mix/market/history-mark-candles\": 1,\n \"v2/mix/market/open-interest\": 1,\n \"v2/mix/market/funding-time\": 1,\n \"v2/mix/market/symbol-price\": 1,\n \"v2/mix/market/history-fund-rate\": 1,\n \"v2/mix/market/current-fund-rate\": 1,\n \"v2/mix/market/contracts\": 1,\n \"v2/mix/market/query-position-lever\": 2\n }\n },\n margin: {\n get: {\n \"margin/v1/cross/public/interestRateAndLimit\": 2,\n \"margin/v1/isolated/public/interestRateAndLimit\": 2,\n \"margin/v1/cross/public/tierData\": 2,\n \"margin/v1/isolated/public/tierData\": 2,\n \"margin/v1/public/currencies\": 1,\n \"v2/margin/currencies\": 2\n }\n },\n earn: {\n get: {\n \"v2/earn/loan/public/coinInfos\": 2,\n \"v2/earn/loan/public/hour-interest\": 2\n }\n }\n },\n private: {\n spot: {\n get: {\n \"spot/v1/wallet/deposit-address\": 4,\n \"spot/v1/wallet/withdrawal-list\": 1,\n \"spot/v1/wallet/deposit-list\": 1,\n \"spot/v1/account/getInfo\": 20,\n \"spot/v1/account/assets\": 2,\n \"spot/v1/account/assets-lite\": 2,\n \"spot/v1/account/transferRecords\": 1,\n \"spot/v1/convert/currencies\": 2,\n \"spot/v1/convert/convert-record\": 2,\n \"spot/v1/loan/ongoing-orders\": 2,\n \"spot/v1/loan/repay-history\": 2,\n \"spot/v1/loan/revise-history\": 2,\n \"spot/v1/loan/borrow-history\": 2,\n \"spot/v1/loan/debts\": 2,\n \"v2/spot/trade/orderInfo\": 1,\n \"v2/spot/trade/unfilled-orders\": 1,\n \"v2/spot/trade/history-orders\": 1,\n \"v2/spot/trade/fills\": 2,\n \"v2/spot/trade/current-plan-order\": 1,\n \"v2/spot/trade/history-plan-order\": 1,\n \"v2/spot/account/info\": 20,\n \"v2/spot/account/assets\": 2,\n \"v2/spot/account/subaccount-assets\": 2,\n \"v2/spot/account/bills\": 2,\n \"v2/spot/account/transferRecords\": 1,\n \"v2/spot/wallet/deposit-address\": 2,\n \"v2/spot/wallet/deposit-records\": 2,\n \"v2/spot/wallet/withdrawal-records\": 2\n },\n post: {\n \"spot/v1/wallet/transfer\": 4,\n \"spot/v1/wallet/transfer-v2\": 4,\n \"spot/v1/wallet/subTransfer\": 10,\n \"spot/v1/wallet/withdrawal\": 4,\n \"spot/v1/wallet/withdrawal-v2\": 4,\n \"spot/v1/wallet/withdrawal-inner\": 4,\n \"spot/v1/wallet/withdrawal-inner-v2\": 4,\n \"spot/v1/account/sub-account-spot-assets\": 200,\n \"spot/v1/account/bills\": 2,\n \"spot/v1/trade/orders\": 2,\n \"spot/v1/trade/batch-orders\": 4,\n \"spot/v1/trade/cancel-order\": 2,\n \"spot/v1/trade/cancel-order-v2\": 2,\n \"spot/v1/trade/cancel-symbol-order\": 2,\n \"spot/v1/trade/cancel-batch-orders\": 4,\n \"spot/v1/trade/cancel-batch-orders-v2\": 4,\n \"spot/v1/trade/orderInfo\": 1,\n \"spot/v1/trade/open-orders\": 1,\n \"spot/v1/trade/history\": 1,\n \"spot/v1/trade/fills\": 1,\n \"spot/v1/plan/placePlan\": 1,\n \"spot/v1/plan/modifyPlan\": 1,\n \"spot/v1/plan/cancelPlan\": 1,\n \"spot/v1/plan/currentPlan\": 1,\n \"spot/v1/plan/historyPlan\": 1,\n \"spot/v1/plan/batchCancelPlan\": 2,\n \"spot/v1/convert/quoted-price\": 4,\n \"spot/v1/convert/trade\": 4,\n \"spot/v1/loan/borrow\": 2,\n \"spot/v1/loan/repay\": 2,\n \"spot/v1/loan/revise-pledge\": 2,\n \"spot/v1/trace/order/orderCurrentList\": 2,\n \"spot/v1/trace/order/orderHistoryList\": 2,\n \"spot/v1/trace/order/closeTrackingOrder\": 2,\n \"spot/v1/trace/order/updateTpsl\": 2,\n \"spot/v1/trace/order/followerEndOrder\": 2,\n \"spot/v1/trace/order/spotInfoList\": 2,\n \"spot/v1/trace/config/getTraderSettings\": 2,\n \"spot/v1/trace/config/getFollowerSettings\": 2,\n \"spot/v1/trace/user/myTraders\": 2,\n \"spot/v1/trace/config/setFollowerConfig\": 2,\n \"spot/v1/trace/user/myFollowers\": 2,\n \"spot/v1/trace/config/setProductCode\": 2,\n \"spot/v1/trace/user/removeTrader\": 2,\n \"spot/v1/trace/getRemovableFollower\": 2,\n \"spot/v1/trace/user/removeFollower\": 2,\n \"spot/v1/trace/profit/totalProfitInfo\": 2,\n \"spot/v1/trace/profit/totalProfitList\": 2,\n \"spot/v1/trace/profit/profitHisList\": 2,\n \"spot/v1/trace/profit/profitHisDetailList\": 2,\n \"spot/v1/trace/profit/waitProfitDetailList\": 2,\n \"spot/v1/trace/user/getTraderInfo\": 2,\n \"v2/spot/trade/place-order\": 2,\n \"v2/spot/trade/cancel-order\": 2,\n \"v2/spot/trade/batch-orders\": 20,\n \"v2/spot/trade/batch-cancel-order\": 2,\n \"v2/spot/trade/cancel-symbol-order\": 4,\n \"v2/spot/trade/place-plan-order\": 1,\n \"v2/spot/trade/modify-plan-order\": 1,\n \"v2/spot/trade/cancel-plan-order\": 1,\n \"v2/spot/trade/batch-cancel-plan-order\": 2,\n \"v2/spot/wallet/transfer\": 2,\n \"v2/spot/wallet/subaccount-transfer\": 2,\n \"v2/spot/wallet/withdrawal\": 2\n }\n },\n mix: {\n get: {\n \"mix/v1/account/account\": 2,\n \"mix/v1/account/accounts\": 2,\n \"mix/v1/position/singlePosition\": 2,\n \"mix/v1/position/singlePosition-v2\": 2,\n \"mix/v1/position/allPosition\": 4,\n \"mix/v1/position/allPosition-v2\": 4,\n \"mix/v1/position/history-position\": 1,\n \"mix/v1/account/accountBill\": 2,\n \"mix/v1/account/accountBusinessBill\": 4,\n \"mix/v1/order/current\": 1,\n \"mix/v1/order/marginCoinCurrent\": 1,\n \"mix/v1/order/history\": 2,\n \"mix/v1/order/historyProductType\": 4,\n \"mix/v1/order/detail\": 2,\n \"mix/v1/order/fills\": 2,\n \"mix/v1/order/allFills\": 2,\n \"mix/v1/plan/currentPlan\": 1,\n \"mix/v1/plan/historyPlan\": 2,\n \"mix/v1/trace/currentTrack\": 2,\n \"mix/v1/trace/followerOrder\": 2,\n \"mix/v1/trace/followerHistoryOrders\": 2,\n \"mix/v1/trace/historyTrack\": 2,\n \"mix/v1/trace/summary\": 1,\n \"mix/v1/trace/profitSettleTokenIdGroup\": 1,\n \"mix/v1/trace/profitDateGroupList\": 1,\n \"mix/v1/trade/profitDateList\": 2,\n \"mix/v1/trace/waitProfitDateList\": 1,\n \"mix/v1/trace/traderSymbols\": 1,\n \"mix/v1/trace/traderList\": 2,\n \"mix/v1/trace/traderDetail\": 2,\n \"mix/v1/trace/queryTraceConfig\": 2,\n \"v2/mix/account/account\": 2,\n \"v2/mix/account/accounts\": 2,\n \"v2/mix/account/sub-account-assets\": 200,\n \"v2/mix/account/open-count\": 2,\n \"v2/mix/account/bill\": 2,\n \"v2/mix/market/query-position-lever\": 2,\n \"v2/mix/position/single-position\": 2,\n \"v2/mix/position/all-position\": 4,\n \"v2/mix/position/history-position\": 1,\n \"v2/mix/order/detail\": 2,\n \"v2/mix/order/fills\": 2,\n \"v2/mix/order/fill-history\": 2,\n \"v2/mix/order/orders-pending\": 2,\n \"v2/mix/order/orders-history\": 2,\n \"v2/mix/order/orders-plan-pending\": 2,\n \"v2/mix/order/orders-plan-history\": 2,\n \"v2/account/funding-assets\": 2\n },\n post: {\n \"mix/v1/account/sub-account-contract-assets\": 200,\n \"mix/v1/account/open-count\": 1,\n \"mix/v1/account/setLeverage\": 4,\n \"mix/v1/account/setMargin\": 4,\n \"mix/v1/account/setMarginMode\": 4,\n \"mix/v1/account/setPositionMode\": 4,\n \"mix/v1/order/placeOrder\": 2,\n \"mix/v1/order/batch-orders\": 2,\n \"mix/v1/order/cancel-order\": 2,\n \"mix/v1/order/cancel-batch-orders\": 2,\n \"mix/v1/order/modifyOrder\": 2,\n \"mix/v1/order/cancel-symbol-orders\": 2,\n \"mix/v1/order/cancel-all-orders\": 2,\n \"mix/v1/order/close-all-positions\": 20,\n \"mix/v1/plan/placePlan\": 2,\n \"mix/v1/plan/modifyPlan\": 2,\n \"mix/v1/plan/modifyPlanPreset\": 2,\n \"mix/v1/plan/placeTPSL\": 2,\n \"mix/v1/plan/placeTrailStop\": 2,\n \"mix/v1/plan/placePositionsTPSL\": 2,\n \"mix/v1/plan/modifyTPSLPlan\": 2,\n \"mix/v1/plan/cancelPlan\": 2,\n \"mix/v1/plan/cancelSymbolPlan\": 2,\n \"mix/v1/plan/cancelAllPlan\": 2,\n \"mix/v1/trace/closeTrackOrder\": 2,\n \"mix/v1/trace/modifyTPSL\": 2,\n \"mix/v1/trace/closeTrackOrderBySymbol\": 2,\n \"mix/v1/trace/setUpCopySymbols\": 2,\n \"mix/v1/trace/followerSetBatchTraceConfig\": 2,\n \"mix/v1/trace/followerCloseByTrackingNo\": 2,\n \"mix/v1/trace/followerCloseByAll\": 2,\n \"mix/v1/trace/followerSetTpsl\": 2,\n \"mix/v1/trace/cancelCopyTrader\": 4,\n \"mix/v1/trace/traderUpdateConfig\": 2,\n \"mix/v1/trace/myTraderList\": 2,\n \"mix/v1/trace/myFollowerList\": 2,\n \"mix/v1/trace/removeFollower\": 2,\n \"mix/v1/trace/public/getFollowerConfig\": 2,\n \"mix/v1/trace/report/order/historyList\": 2,\n \"mix/v1/trace/report/order/currentList\": 2,\n \"mix/v1/trace/queryTraderTpslRatioConfig\": 2,\n \"mix/v1/trace/traderUpdateTpslRatioConfig\": 2,\n \"v2/mix/account/set-leverage\": 4,\n \"v2/mix/account/set-margin\": 4,\n \"v2/mix/account/set-margin-mode\": 4,\n \"v2/mix/account/set-position-mode\": 4,\n \"v2/mix/order/place-order\": 20,\n \"v2/mix/order/click-backhand\": 20,\n \"v2/mix/order/batch-place-order\": 20,\n \"v2/mix/order/modify-order\": 2,\n \"v2/mix/order/cancel-order\": 2,\n \"v2/mix/order/batch-cancel-orders\": 2,\n \"v2/mix/order/close-positions\": 20,\n \"v2/mix/order/place-tpsl-order\": 2,\n \"v2/mix/order/place-plan-order\": 2,\n \"v2/mix/order/modify-tpsl-order\": 2,\n \"v2/mix/order/modify-plan-order\": 2,\n \"v2/mix/order/cancel-plan-order\": 2\n }\n },\n user: {\n get: {\n \"user/v1/fee/query\": 2,\n \"user/v1/sub/virtual-list\": 2,\n \"user/v1/sub/virtual-api-list\": 2,\n \"user/v1/tax/spot-record\": 1,\n \"user/v1/tax/future-record\": 1,\n \"user/v1/tax/margin-record\": 1,\n \"user/v1/tax/p2p-record\": 1,\n \"v2/user/virtual-subaccount-list\": 2,\n \"v2/user/virtual-subaccount-apikey-list\": 2\n },\n post: {\n \"user/v1/sub/virtual-create\": 4,\n \"user/v1/sub/virtual-modify\": 4,\n \"user/v1/sub/virtual-api-batch-create\": 20,\n \"user/v1/sub/virtual-api-create\": 4,\n \"user/v1/sub/virtual-api-modify\": 4,\n \"v2/user/create-virtual-subaccount\": 4,\n \"v2/user/modify-virtual-subaccount\": 4,\n \"v2/user/batch-create-subaccount-and-apikey\": 20,\n \"v2/user/create-virtual-subaccount-apikey\": 4,\n \"v2/user/modify-virtual-subaccount-apikey\": 4\n }\n },\n p2p: {\n get: {\n \"p2p/v1/merchant/merchantList\": 2,\n \"p2p/v1/merchant/merchantInfo\": 2,\n \"p2p/v1/merchant/advList\": 2,\n \"p2p/v1/merchant/orderList\": 2,\n \"v2/p2p/merchantList\": 2,\n \"v2/p2p/merchantInfo\": 2,\n \"v2/p2p/orderList\": 2,\n \"v2/p2p/advList\": 2\n }\n },\n broker: {\n get: {\n \"broker/v1/account/info\": 2,\n \"broker/v1/account/sub-list\": 20,\n \"broker/v1/account/sub-email\": 20,\n \"broker/v1/account/sub-spot-assets\": 2,\n \"broker/v1/account/sub-future-assets\": 2,\n \"broker/v1/account/subaccount-transfer\": 1,\n \"broker/v1/account/subaccount-deposit\": 1,\n \"broker/v1/account/subaccount-withdrawal\": 1,\n \"broker/v1/account/sub-api-list\": 2,\n \"v2/broker/account/info\": 2,\n \"v2/broker/account/subaccount-list\": 20,\n \"v2/broker/account/subaccount-email\": 2,\n \"v2/broker/account/subaccount-spot-assets\": 2,\n \"v2/broker/account/subaccount-future-assets\": 2,\n \"v2/broker/manage/subaccount-apikey-list\": 2\n },\n post: {\n \"broker/v1/account/sub-create\": 20,\n \"broker/v1/account/sub-modify\": 20,\n \"broker/v1/account/sub-modify-email\": 20,\n \"broker/v1/account/sub-address\": 2,\n \"broker/v1/account/sub-withdrawal\": 2,\n \"broker/v1/account/sub-auto-transfer\": 4,\n \"broker/v1/account/sub-api-create\": 2,\n \"broker/v1/account/sub-api-modify\": 2,\n \"v2/broker/account/modify-subaccount-email\": 2,\n \"v2/broker/account/create-subaccount\": 20,\n \"v2/broker/account/modify-subaccount\": 20,\n \"v2/broker/account/subaccount-address\": 2,\n \"v2/broker/account/subaccount-withdrawal\": 2,\n \"v2/broker/account/set-subaccount-autotransfer\": 2,\n \"v2/broker/manage/create-subaccount-apikey\": 2,\n \"v2/broker/manage/modify-subaccount-apikey\": 2\n }\n },\n margin: {\n get: {\n \"margin/v1/cross/account/riskRate\": 2,\n \"margin/v1/cross/account/maxTransferOutAmount\": 2,\n \"margin/v1/isolated/account/maxTransferOutAmount\": 2,\n \"margin/v1/isolated/order/openOrders\": 2,\n \"margin/v1/isolated/order/history\": 2,\n \"margin/v1/isolated/order/fills\": 2,\n \"margin/v1/isolated/loan/list\": 2,\n \"margin/v1/isolated/repay/list\": 2,\n \"margin/v1/isolated/interest/list\": 2,\n \"margin/v1/isolated/liquidation/list\": 2,\n \"margin/v1/isolated/fin/list\": 2,\n \"margin/v1/cross/order/openOrders\": 2,\n \"margin/v1/cross/order/history\": 2,\n \"margin/v1/cross/order/fills\": 2,\n \"margin/v1/cross/loan/list\": 2,\n \"margin/v1/cross/repay/list\": 2,\n \"margin/v1/cross/interest/list\": 2,\n \"margin/v1/cross/liquidation/list\": 2,\n \"margin/v1/cross/fin/list\": 2,\n \"margin/v1/cross/account/assets\": 2,\n \"margin/v1/isolated/account/assets\": 2,\n \"v2/margin/crossed/borrow-history\": 2,\n \"v2/margin/crossed/repay-history\": 2,\n \"v2/margin/crossed/interest-history\": 2,\n \"v2/margin/crossed/liquidation-history\": 2,\n \"v2/margin/crossed/financial-records\": 2,\n \"v2/margin/crossed/account/assets\": 2,\n \"v2/margin/crossed/account/risk-rate\": 2,\n \"v2/margin/crossed/account/max-borrowable-amount\": 2,\n \"v2/margin/crossed/account/max-transfer-out-amount\": 2,\n \"v2/margin/crossed/interest-rate-and-limit\": 2,\n \"v2/margin/crossed/tier-data\": 2,\n \"v2/margin/crossed/open-orders\": 2,\n \"v2/margin/crossed/history-orders\": 2,\n \"v2/margin/crossed/fills\": 2,\n \"v2/margin/isolated/borrow-history\": 2,\n \"v2/margin/isolated/repay-history\": 2,\n \"v2/margin/isolated/interest-history\": 2,\n \"v2/margin/isolated/liquidation-history\": 2,\n \"v2/margin/isolated/financial-records\": 2,\n \"v2/margin/isolated/account/assets\": 2,\n \"v2/margin/isolated/account/risk-rate\": 2,\n \"v2/margin/isolated/account/max-borrowable-amount\": 2,\n \"v2/margin/isolated/account/max-transfer-out-amount\": 2,\n \"v2/margin/isolated/interest-rate-and-limit\": 2,\n \"v2/margin/isolated/tier-data\": 2,\n \"v2/margin/isolated/open-orders\": 2,\n \"v2/margin/isolated/history-orders\": 2,\n \"v2/margin/isolated/fills\": 2\n },\n post: {\n \"margin/v1/cross/account/borrow\": 2,\n \"margin/v1/isolated/account/borrow\": 2,\n \"margin/v1/cross/account/repay\": 2,\n \"margin/v1/isolated/account/repay\": 2,\n \"margin/v1/isolated/account/riskRate\": 2,\n \"margin/v1/cross/account/maxBorrowableAmount\": 2,\n \"margin/v1/isolated/account/maxBorrowableAmount\": 2,\n \"margin/v1/isolated/account/flashRepay\": 2,\n \"margin/v1/isolated/account/queryFlashRepayStatus\": 2,\n \"margin/v1/cross/account/flashRepay\": 2,\n \"margin/v1/cross/account/queryFlashRepayStatus\": 2,\n \"margin/v1/isolated/order/placeOrder\": 4,\n \"margin/v1/isolated/order/batchPlaceOrder\": 4,\n \"margin/v1/isolated/order/cancelOrder\": 2,\n \"margin/v1/isolated/order/batchCancelOrder\": 2,\n \"margin/v1/cross/order/placeOrder\": 2,\n \"margin/v1/cross/order/batchPlaceOrder\": 2,\n \"margin/v1/cross/order/cancelOrder\": 2,\n \"margin/v1/cross/order/batchCancelOrder\": 2,\n \"v2/margin/crossed/account/borrow\": 2,\n \"v2/margin/crossed/account/repay\": 2,\n \"v2/margin/crossed/account/flash-repay\": 2,\n \"v2/margin/crossed/account/query-flash-repay-status\": 2,\n \"v2/margin/crossed/place-order\": 2,\n \"v2/margin/crossed/batch-place-order\": 2,\n \"v2/margin/crossed/cancel-order\": 2,\n \"v2/margin/crossed/batch-cancel-order\": 2,\n \"v2/margin/isolated/account/borrow\": 2,\n \"v2/margin/isolated/account/repay\": 2,\n \"v2/margin/isolated/account/flash-repay\": 2,\n \"v2/margin/isolated/account/query-flash-repay-status\": 2,\n \"v2/margin/isolated/place-order\": 2,\n \"v2/margin/isolated/batch-place-order\": 2,\n \"v2/margin/isolated/cancel-order\": 2,\n \"v2/margin/isolated/batch-cancel-order\": 2\n }\n },\n copy: {\n get: {\n \"v2/copy/mix-trader/order-current-track\": 2,\n \"v2/copy/mix-trader/order-history-track\": 2,\n \"v2/copy/mix-trader/order-total-detail\": 2,\n \"v2/copy/mix-trader/profit-history-summarys\": 1,\n \"v2/copy/mix-trader/profit-history-details\": 1,\n \"v2/copy/mix-trader/profit-details\": 1,\n \"v2/copy/mix-trader/profits-group-coin-date\": 1,\n \"v2/copy/mix-trader/config-query-symbols\": 1,\n \"v2/copy/mix-trader/config-query-followers\": 2,\n \"v2/copy/mix-follower/query-current-orders\": 2,\n \"v2/copy/mix-follower/query-history-orders\": 1,\n \"v2/copy/mix-follower/query-settings\": 2,\n \"v2/copy/mix-follower/query-traders\": 2,\n \"v2/copy/mix-follower/query-quantity-limit\": 2,\n \"v2/copy/mix-broker/query-traders\": 2,\n \"v2/copy/mix-broker/query-history-traces\": 2,\n \"v2/copy/mix-broker/query-current-traces\": 2,\n \"v2/copy/spot-trader/profit-summarys\": 2,\n \"v2/copy/spot-trader/profit-history-details\": 2,\n \"v2/copy/spot-trader/profit-details\": 2,\n \"v2/copy/spot-trader/order-total-detail\": 2,\n \"v2/copy/spot-trader/order-history-track\": 2,\n \"v2/copy/spot-trader/order-current-track\": 2,\n \"v2/copy/spot-trader/config-query-settings\": 2,\n \"v2/copy/spot-trader/config-query-followers\": 2,\n \"v2/copy/spot-follower/query-traders\": 2,\n \"v2/copy/spot-follower/query-trader-symbols\": 2,\n \"v2/copy/spot-follower/query-settings\": 2,\n \"v2/copy/spot-follower/query-history-orders\": 2,\n \"v2/copy/spot-follower/query-current-orders\": 2\n },\n post: {\n \"v2/copy/mix-trader/order-modify-tpsl\": 2,\n \"v2/copy/mix-trader/order-close-positions\": 2,\n \"v2/copy/mix-trader/config-setting-symbols\": 2,\n \"v2/copy/mix-trader/config-setting-base\": 2,\n \"v2/copy/mix-trader/config-remove-follower\": 2,\n \"v2/copy/mix-follower/setting-tpsl\": 1,\n \"v2/copy/mix-follower/settings\": 2,\n \"v2/copy/mix-follower/close-positions\": 2,\n \"v2/copy/mix-follower/cancel-trader\": 4,\n \"v2/copy/spot-trader/order-modify-tpsl\": 2,\n \"v2/copy/spot-trader/order-close-tracking\": 2,\n \"v2/copy/spot-trader/config-setting-symbols\": 2,\n \"v2/copy/spot-trader/config-remove-follower\": 2,\n \"v2/copy/spot-follower/stop-order\": 2,\n \"v2/copy/spot-follower/settings\": 2,\n \"v2/copy/spot-follower/setting-tpsl\": 2,\n \"v2/copy/spot-follower/order-close-tracking\": 2,\n \"v2/copy/spot-follower/cancel-trader\": 2\n }\n },\n tax: {\n get: {\n \"v2/tax/spot-record\": 20,\n \"v2/tax/future-record\": 20,\n \"v2/tax/margin-record\": 20,\n \"v2/tax/p2p-record\": 20\n }\n },\n convert: {\n get: {\n \"v2/convert/currencies\": 2,\n \"v2/convert/quoted-price\": 2,\n \"v2/convert/convert-record\": 2\n },\n post: {\n \"v2/convert/trade\": 2\n }\n },\n earn: {\n get: {\n \"v2/earn/savings/product\": 2,\n \"v2/earn/savings/account\": 2,\n \"v2/earn/savings/assets\": 2,\n \"v2/earn/savings/records\": 2,\n \"v2/earn/savings/subscribe-info\": 2,\n \"v2/earn/savings/subscribe-result\": 2,\n \"v2/earn/savings/redeem-result\": 2,\n \"v2/earn/sharkfin/product\": 2,\n \"v2/earn/sharkfin/account\": 2,\n \"v2/earn/sharkfin/assets\": 2,\n \"v2/earn/sharkfin/records\": 2,\n \"v2/earn/sharkfin/subscribe-info\": 2,\n \"v2/earn/sharkfin/subscribe-result\": 4,\n \"v2/earn/loan/ongoing-orders\": 2,\n \"v2/earn/loan/repay-history\": 2,\n \"v2/earn/loan/revise-history\": 2,\n \"v2/earn/loan/borrow-history\": 2,\n \"v2/earn/loan/debts\": 2,\n \"v2/earn/loan/reduces\": 2,\n \"v2/earn/account/assets\": 2\n },\n post: {\n \"v2/earn/savings/subscribe\": 2,\n \"v2/earn/savings/redeem\": 2,\n \"v2/earn/sharkfin/subscribe\": 2,\n \"v2/earn/loan/borrow\": 2,\n \"v2/earn/loan/repay\": 2,\n \"v2/earn/loan/revise-pledge\": 2\n }\n },\n common: {\n get: {\n \"v2/common/trade-rate\": 2\n }\n }\n }\n },\n fees: {\n spot: {\n taker: this.parseNumber(\"0.002\"),\n maker: this.parseNumber(\"0.002\")\n },\n swap: {\n taker: this.parseNumber(\"0.0006\"),\n maker: this.parseNumber(\"0.0004\")\n }\n },\n requiredCredentials: {\n apiKey: !0,\n secret: !0,\n password: !0\n },\n exceptions: {\n // http error codes\n // 400 Bad Request — Invalid request format\n // 401 Unauthorized — Invalid API Key\n // 403 Forbidden — You do not have access to the requested resource\n // 404 Not Found\n // 500 Internal Server Error — We had a problem with our server\n exact: {\n 1: be,\n // undocumented\n \"failure to get a peer from the ring-balancer\": Te,\n 4010: ee,\n // common\n // '0': ExchangeError, // 200 successful,when the order placement / cancellation / operation is successful\n 4001: be,\n 4002: be,\n // --------------------------------------------------------\n 30001: Z,\n 30002: Z,\n 30003: Z,\n 30004: Z,\n 30005: ze,\n 30006: Z,\n 30007: be,\n 30008: Nt,\n 30009: be,\n 30010: Z,\n 30011: ee,\n 30012: Z,\n 30013: Z,\n 30014: Rt,\n 30015: Z,\n 30016: ee,\n 30017: Z,\n 30018: Z,\n 30019: Te,\n 30020: be,\n 30021: be,\n 30022: ee,\n 30023: g,\n 30024: g,\n 30025: g,\n 30026: Rt,\n 30027: Z,\n 30028: ee,\n 30029: Ee,\n 30030: be,\n 30031: $e,\n 30032: it,\n 30033: be,\n 30034: be,\n 30035: be,\n 30036: be,\n 30037: Te,\n // '30038': AuthenticationError, // { \"code\": 30038, \"message\": \"user does not exist\" }\n 30038: dt,\n // futures\n 32001: Ee,\n 32002: ee,\n 32003: k,\n 32004: k,\n 32005: g,\n 32006: g,\n 32007: g,\n 32008: k,\n 32009: k,\n 32010: k,\n 32011: k,\n 32012: k,\n 32013: k,\n 32014: k,\n 32015: k,\n 32016: k,\n 32017: k,\n 32018: g,\n 32019: g,\n 32020: g,\n 32021: k,\n 32022: pe,\n 32023: be,\n 32024: k,\n 32025: k,\n 32026: ee,\n 32027: k,\n 32028: Ee,\n 32029: k,\n 32030: k,\n 32031: g,\n 32038: Z,\n 32040: O,\n 32044: k,\n 32045: O,\n 32046: k,\n 32047: be,\n 32048: k,\n 32049: O,\n 32050: k,\n 32051: k,\n 32052: O,\n 32053: O,\n 32057: O,\n 32054: O,\n 32055: k,\n 32056: O,\n 32058: O,\n 32059: k,\n 32060: g,\n 32061: g,\n 32062: g,\n 32063: g,\n 32064: O,\n 32065: O,\n 32066: O,\n 32067: O,\n 32068: O,\n 32069: O,\n 32070: O,\n 32071: O,\n 32072: O,\n 32073: O,\n 32074: O,\n 32075: O,\n 32076: O,\n 32077: O,\n 32078: O,\n 32079: O,\n 32080: O,\n 32083: O,\n // token and margin trading\n 33001: ee,\n 33002: Ee,\n 33003: re,\n 33004: O,\n 33005: O,\n 33006: O,\n 33007: O,\n 33008: re,\n 33009: O,\n 33010: O,\n 33011: O,\n 33012: O,\n 33013: k,\n 33014: Se,\n 33015: k,\n 33016: O,\n 33017: re,\n 33018: O,\n 33020: O,\n 33021: k,\n 33022: k,\n 33023: O,\n 33024: g,\n 33025: g,\n 33026: O,\n 33027: k,\n 33028: g,\n 33029: g,\n 33034: O,\n 33035: O,\n 33036: O,\n 33037: O,\n 33038: O,\n 33039: O,\n 33040: O,\n 33041: O,\n 33042: O,\n 33043: O,\n 33044: O,\n 33045: O,\n 33046: O,\n 33047: O,\n 33048: O,\n 33049: O,\n 33050: O,\n 33051: O,\n 33059: g,\n 33060: g,\n 33061: O,\n 33062: O,\n 33063: O,\n 33064: O,\n 33065: O,\n // account\n 21009: O,\n 34001: ee,\n 34002: et,\n 34003: ke,\n 34004: ke,\n 34005: ke,\n 34006: Xt,\n 34007: ws,\n 34008: re,\n 34009: ke,\n 34010: je,\n 34011: O,\n 34012: ke,\n 34013: je,\n 34014: je,\n 34015: O,\n 34016: ee,\n 34017: Ee,\n 34018: Z,\n 34019: ee,\n 34020: ee,\n 34021: et,\n 34022: O,\n 34023: ee,\n 34026: O,\n 34036: O,\n 34037: O,\n 34038: O,\n 34039: O,\n // swap\n 35001: O,\n 35002: O,\n 35003: O,\n 35004: O,\n 35005: Z,\n 35008: g,\n 35010: g,\n 35012: g,\n 35014: g,\n 35015: g,\n 35017: O,\n 35019: g,\n 35020: g,\n 35021: g,\n 35022: O,\n 35024: O,\n 35025: re,\n 35026: O,\n 35029: Se,\n 35030: g,\n 35031: g,\n 35032: O,\n 35037: O,\n 35039: O,\n 35040: g,\n 35044: O,\n 35046: re,\n 35047: re,\n 35048: O,\n 35049: g,\n 35050: g,\n 35052: re,\n 35053: O,\n 35055: re,\n 35057: O,\n 35058: O,\n 35059: g,\n 35060: g,\n 35061: g,\n 35062: g,\n 35063: g,\n 35064: g,\n 35066: k,\n 35067: k,\n 35068: k,\n 35069: k,\n 35070: k,\n 35071: g,\n 35072: k,\n 35073: k,\n 35074: k,\n 35075: k,\n 35076: k,\n 35077: k,\n 35078: g,\n 35079: k,\n 35080: k,\n 35081: k,\n 35082: k,\n 35083: k,\n 35084: g,\n 35085: g,\n 35086: g,\n 35087: g,\n 35088: g,\n 35089: g,\n 35090: O,\n 35091: O,\n 35092: O,\n 35093: O,\n 35094: O,\n 35095: O,\n 35096: O,\n 35097: O,\n 35098: O,\n 35099: O,\n // option\n 36001: O,\n 36002: O,\n 36005: O,\n 36101: Z,\n 36102: ee,\n 36103: Ee,\n 36104: ee,\n 36105: ee,\n 36106: Ee,\n 36107: ee,\n 36108: re,\n 36109: ee,\n 36201: ee,\n 36202: ee,\n 36203: g,\n 36204: O,\n 36205: O,\n 36206: g,\n 36207: g,\n 36208: g,\n 36209: g,\n 36210: g,\n 36211: k,\n 36212: k,\n 36213: k,\n 36214: O,\n 36216: Se,\n 36217: k,\n 36218: k,\n 36219: k,\n 36220: k,\n 36221: g,\n 36222: g,\n 36223: g,\n 36224: g,\n 36225: k,\n 36226: k,\n 36227: k,\n 36228: k,\n 36229: k,\n 36230: k,\n // --------------------------------------------------------\n // swap\n 400: O,\n 401: Z,\n 403: ee,\n 404: be,\n 405: be,\n 415: be,\n 429: Rt,\n 500: Te,\n 1001: Ae,\n 1002: O,\n 1003: O,\n // '00000': ExchangeError, // success\n 40001: Z,\n 40002: Z,\n 40003: Z,\n 40004: ze,\n 40005: ze,\n 40006: Z,\n 40007: be,\n 40008: ze,\n 40009: Z,\n 40010: Z,\n 40011: Z,\n 40012: Z,\n 40013: O,\n 40014: ee,\n 40015: O,\n 40016: ee,\n 40017: O,\n 40018: ee,\n 40019: O,\n 40031: Ee,\n 40037: Pt,\n 40102: O,\n 40103: O,\n 40104: O,\n 40105: O,\n 40106: O,\n 40107: O,\n 40108: g,\n 40109: Se,\n 40200: dt,\n 40201: g,\n 40202: O,\n 40203: g,\n 40204: g,\n 40205: g,\n 40206: g,\n 40207: g,\n 40208: g,\n 40209: g,\n 40300: O,\n 40301: ee,\n 40302: g,\n 40303: O,\n 40304: g,\n 40305: g,\n 40306: O,\n 40308: dt,\n 40309: O,\n 40400: O,\n 40401: O,\n 40402: g,\n 40403: g,\n 40404: g,\n 40405: g,\n 40406: g,\n 40407: O,\n 40408: O,\n 40409: O,\n 40500: g,\n 40501: O,\n 40502: O,\n 40503: O,\n 40504: O,\n 40505: O,\n 40506: Z,\n 40507: Z,\n 40508: O,\n 40509: O,\n 40600: O,\n 40601: O,\n 40602: O,\n 40603: O,\n 40604: Te,\n 40605: O,\n 40606: O,\n 40607: O,\n 40608: O,\n 40609: O,\n 40700: g,\n 40701: O,\n 40702: O,\n 40703: O,\n 40704: O,\n 40705: g,\n 40706: g,\n 40707: g,\n 40708: g,\n 40709: O,\n 40710: O,\n 40711: re,\n 40712: re,\n 40713: O,\n 40714: O,\n 40768: Se,\n 41114: dt,\n 43011: g,\n 43025: k,\n 43115: dt,\n 45110: g,\n // spot\n \"invalid sign\": Z,\n \"invalid currency\": g,\n \"invalid symbol\": g,\n \"invalid period\": g,\n \"invalid user\": O,\n \"invalid amount\": g,\n \"invalid type\": g,\n \"invalid orderId\": g,\n \"invalid record\": O,\n \"invalid accountId\": g,\n \"invalid address\": et,\n \"accesskey not null\": Z,\n \"illegal accesskey\": Z,\n \"sign not null\": Z,\n \"req_time is too much difference from server time\": ze,\n \"permissions not right\": ee,\n \"illegal sign invalid\": Z,\n \"user locked\": Ee,\n \"Request Frequency Is Too High\": Ae,\n \"more than a daily rate of cash\": O,\n \"more than the maximum daily withdrawal amount\": ke,\n \"need to bind email or mobile\": O,\n \"user forbid\": ee,\n \"User Prohibited Cash Withdrawal\": ee,\n \"Cash Withdrawal Is Less Than The Minimum Value\": Xt,\n \"Cash Withdrawal Is More Than The Maximum Value\": ws,\n \"the account with in 24 hours ban coin\": ee,\n \"order cancel fail\": k,\n \"base symbol error\": g,\n \"base date error\": O,\n \"api signature not valid\": Z,\n \"gateway internal error\": O,\n \"audit failed\": O,\n \"order queryorder invalid\": k,\n \"market no need price\": g,\n \"limit need price\": g,\n \"userid not equal to account_id\": O,\n \"your balance is low\": re,\n \"address invalid cointype\": O,\n \"system exception\": O,\n 50003: O,\n 50004: pt,\n 50006: ee,\n 50007: ee,\n 50008: Nt,\n 50009: Ae,\n 50010: O,\n 50014: g,\n 50015: g,\n 50016: g,\n 50017: g,\n 50018: g,\n 50019: g,\n 50020: re,\n 50021: g,\n 50026: g,\n \"invalid order query time\": O,\n \"invalid start time\": g,\n \"invalid end time\": g,\n 20003: O,\n \"01001\": O,\n 43111: gi,\n 43114: Xt\n // 43114: Withdrawal is less than the minimum withdrawal count less than min withdraw amount\n },\n broad: {\n \"invalid size, valid range\": O\n },\n messages: {\n \"less than the minimum amount\": ye.ORDER_UNDER_MINIMUM\n }\n },\n precisionMode: ct,\n options: {\n timeDifference: 0,\n timeframes: {\n spot: {\n \"1m\": \"1min\",\n \"5m\": \"5min\",\n \"15m\": \"15min\",\n \"30m\": \"30min\",\n \"1h\": \"1h\",\n \"4h\": \"4h\",\n \"6h\": \"6Hutc\",\n \"12h\": \"12Hutc\",\n \"1d\": \"1Dutc\",\n \"3d\": \"3Dutc\",\n \"1w\": \"1Wutc\",\n \"1M\": \"1Mutc\"\n },\n swap: {\n \"1m\": \"1m\",\n \"3m\": \"3m\",\n \"5m\": \"5m\",\n \"15m\": \"15m\",\n \"30m\": \"30m\",\n \"1h\": \"1H\",\n \"2h\": \"2H\",\n \"4h\": \"4H\",\n \"6h\": \"6Hutc\",\n \"12h\": \"12Hutc\",\n \"1d\": \"1Dutc\",\n \"3d\": \"3Dutc\",\n \"1w\": \"1Wutc\",\n \"1M\": \"1Mutc\"\n }\n },\n fetchMarkets: [\n \"spot\",\n \"swap\"\n // there is future markets but they use the same endpoints as swap\n ],\n defaultType: \"spot\",\n defaultSubType: \"linear\",\n createMarketBuyOrderRequiresPrice: !0,\n broker: \"gdlc3\",\n withdraw: {\n fillResponseFromRequest: !0\n },\n fetchOHLCV: {\n spot: {\n method: \"publicSpotGetV2SpotMarketCandles\"\n // or publicSpotGetV2SpotMarketHistoryCandles\n },\n swap: {\n method: \"publicMixGetV2MixMarketCandles\"\n // or publicMixGetV2MixMarketHistoryCandles or publicMixGetV2MixMarketHistoryIndexCandles or publicMixGetV2MixMarketHistoryMarkCandles\n }\n },\n fetchTrades: {\n spot: {\n method: \"publicSpotGetV2SpotMarketFillsHistory\"\n // or publicSpotGetV2SpotMarketFills\n },\n swap: {\n method: \"publicMixGetV2MixMarketFillsHistory\"\n // or publicMixGetV2MixMarketFills\n }\n },\n accountsByType: {\n spot: \"spot\",\n cross: \"crossed_margin\",\n isolated: \"isolated_margin\",\n swap: \"usdt_futures\",\n usdc_swap: \"usdc_futures\",\n future: \"coin_futures\",\n p2p: \"p2p\"\n },\n accountsById: {\n spot: \"spot\",\n crossed_margin: \"cross\",\n isolated_margin: \"isolated\",\n usdt_futures: \"swap\",\n usdc_futures: \"usdc_swap\",\n coin_futures: \"future\",\n p2p: \"p2p\"\n },\n sandboxMode: !1,\n // network codes indexed by network IDs\n networksById: {\n TRC20: \"TRX\",\n TRC10: \"TRX\",\n ERC20: \"ETH\",\n BRC20: \"BTC\",\n BEP20: \"BSC\",\n POLYGON: \"Polygon\"\n },\n fetchPositions: {\n method: \"privateMixGetV2MixPositionAllPosition\"\n // or privateMixGetV2MixPositionHistoryPosition\n },\n defaultTimeInForce: \"GTC\"\n // 'GTC' = Good To Cancel (default), 'IOC' = Immediate Or Cancel\n }\n });\n }\n isUsingForcedProxy(e = {}, t = \"public\") {\n return t[0] === \"private\";\n }\n nonce() {\n return this.milliseconds() - this.options.timeDifference;\n }\n convertSymbolForSandbox(e) {\n if (e.startsWith(\"S\"))\n return e;\n let t;\n if (e.indexOf(\"/\") > -1) {\n if (e.indexOf(\":\") === -1)\n throw new ge(\"unkwnown\").overwriteMessage(\"Sandbox supports swap and future markets only\").exchange(this.id);\n const i = e.split(\"/\"), s = this.safeString(i, 0), r = this.safeString(i, 1).split(\":\"), a = this.safeString(r, 0), c = this.safeString(r, 1).split(\"-\"), u = this.safeString(c, 0), f = this.safeString(c, 1);\n t = \"S\" + s + \"/S\" + a + \":S\" + u, f !== void 0 && (t = t + \"-\" + f);\n } else {\n const i = e.slice(0, 3), s = e.slice(3);\n t = \"S\" + i + \"S\" + s;\n }\n return t;\n }\n async fetchStatus(e = {}) {\n const t = await this.publicCommonGetV2PublicTime(e), i = this.safeValue(t, \"data\", {}), n = this.safeString(t, \"code\") === \"00000\" ? \"ok\" : \"maintenance\", r = this.safeInteger(i, \"serverTime\");\n return {\n status: n,\n updated: r,\n eta: void 0,\n url: void 0,\n info: t\n };\n }\n handleProductTypeAndParams(e = void 0, t = {}) {\n let i;\n [i, t] = this.handleSubTypeAndParams(\"handleProductTypeAndParams\", void 0, t);\n let s;\n i !== void 0 && e === void 0 && (this.safeValue(this.options, \"sandboxMode\", !1) ? s = i === \"linear\" ? this.SUSDT_FUTURES : this.SCOIN_FUTURES : s = i === \"linear\" ? this.USDT_FUTURES : this.COIN_FUTURES);\n let n = this.safeString(t, \"productType\", s);\n if (n === void 0 && e !== void 0) {\n const r = e.settle;\n this.USDT_SETTLES.includes(r) ? n = this.USDT_FUTURES : this.USDC_SETTLES.includes(r) ? n = this.USDC_FUTURES : this.SUSDT_SETTLES.includes(r) ? n = this.SUSDT_FUTURES : this.SUSDC_SETTLES.includes(r) ? n = this.SUSDC_FUTURES : this.SCOIN_FUTURES.includes(r) ? n = this.SCOIN_FUTURES : n = this.COIN_FUTURES;\n }\n if (n === void 0)\n throw new g('Requires a productType param, one of \"USDT-FUTURES\", \"USDC-FUTURES\", \"COIN-FUTURES\", \"SUSDT-FUTURES\", \"SUSDC-FUTURES\" or \"SCOIN-FUTURES\"').exchange(this.id);\n return t = this.omit(t, \"productType\"), [n, t];\n }\n async fetchTime(e = {}) {\n const t = await this.publicCommonGetV2PublicTime(e), i = this.safeValue(t, \"data\", {});\n return this.safeInteger(i, \"serverTime\");\n }\n getFutureMarginCoin(e) {\n if (e === this.COIN_FUTURES) {\n const t = [...this.SCOIN_SETTLES, ...this.USDT_SETTLES, ...this.USDC_SETTLES, ...this.SUSDT_SETTLES, ...this.SUSDC_SETTLES];\n return [...new Set(Object.values(this.markets).map((i) => i.settle).filter((i) => i !== void 0 && !t.includes(i)))];\n } else {\n if (e === this.SCOIN_FUTURES)\n return this.SCOIN_SETTLES;\n if (e === this.USDC_FUTURES)\n return this.USDC_SETTLES;\n if (e === this.USDT_FUTURES)\n return this.USDT_SETTLES;\n if (e === this.SUSDT_FUTURES)\n return this.SUSDT_SETTLES;\n if (e === this.SUSDC_FUTURES)\n return this.SUSDC_SETTLES;\n }\n throw new g('Invalid productType, one of \"USDT-FUTURES\", \"USDC-FUTURES\", \"COIN-FUTURES\", \"SUSDT-FUTURES\", \"SUSDC-FUTURES\" or \"SCOIN-FUTURES\"');\n }\n async fetchMarkets(e = {}) {\n const t = this.safeValue(this.options, \"sandboxMode\", !1);\n let i = this.safeValue(this.options, \"fetchMarkets\", [\"spot\", \"swap\"]);\n t && (i = [\"swap\"]);\n let s = [];\n for (let r = 0; r < i.length; r++) {\n const a = i[r];\n if (a === \"swap\") {\n let o;\n t ? o = [this.SUSDT_FUTURES, this.SCOIN_FUTURES, this.SUSDC_FUTURES] : o = [this.USDT_FUTURES, this.COIN_FUTURES, this.USDC_FUTURES];\n for (let c = 0; c < o.length; c++)\n s.push(this.fetchMarketsByType(a, this.extend(e, {\n productType: o[c]\n })));\n } else\n s.push(this.fetchMarketsByType(i[r], e));\n }\n s = await Promise.all(s);\n let n = s[0];\n for (let r = 1; r < s.length; r++)\n n = this.arrayConcat(n, s[r]);\n return n;\n }\n parseMarket(e) {\n const t = this.safeString(e, \"symbol\"), i = this.safeString(e, \"quoteCoin\"), s = this.safeString(e, \"baseCoin\"), n = this.safeCurrencyCode(i), r = this.safeCurrencyCode(s), a = this.safeValue(e, \"supportMarginCoins\", []);\n let o;\n this.inArray(s, a) ? o = s : this.inArray(i, a) ? o = i : o = this.safeString(a, 0);\n const c = this.safeCurrencyCode(o);\n let u = r + \"/\" + n, f, h = !1, l = !1, p = !1, m = !1, y, w, S, b, T, x;\n const v = this.safeString(e, \"symbolType\");\n if (v === void 0)\n f = \"spot\", l = !0, y = this.parseNumber(this.parsePrecision(this.safeString(e, \"pricePrecision\"))), w = this.parseNumber(this.parsePrecision(this.safeString(e, \"quantityPrecision\")));\n else {\n if (v === \"perpetual\")\n f = \"swap\", h = !0, u = u + \":\" + c;\n else if (v === \"delivery\") {\n T = this.safeInteger(e, \"deliveryTime\"), x = this.iso8601(T);\n const L = x.split(\"-\"), z = this.safeString(L, 0), K = this.safeString(L, 2), R = z.slice(2, 4), U = this.safeString(L, 1), Y = K.slice(0, 2), J = R + U + Y;\n f = \"future\", p = !0, u = u + \":\" + c + \"-\" + J;\n }\n m = !0, b = r === c, S = !b;\n const W = this.safeInteger(e, \"pricePlace\"), B = this.safeInteger(e, \"volumePlace\"), Q = this.safeString(e, \"priceEndStep\"), se = this.safeString(e, \"minTradeNum\"), $ = new P(Q);\n $.decimals = Math.max($.decimals, W), $.reduce();\n const te = $.toString();\n y = this.parseNumber(te);\n const E = new P(se);\n E.decimals = Math.max(E.decimals, B), E.reduce();\n const N = E.toString();\n w = this.parseNumber(N);\n }\n const _ = this.safeString2(e, \"status\", \"symbolStatus\");\n let V;\n _ !== void 0 && (V = _ === \"online\" || _ === \"normal\");\n let j;\n n === \"USDT\" && (j = this.safeNumber(e, \"minTradeUSDT\"));\n const G = m ? 1 : void 0;\n return {\n id: t,\n symbol: u,\n base: r,\n quote: n,\n settle: c,\n baseId: s,\n quoteId: i,\n settleId: o,\n type: f,\n spot: l,\n margin: void 0,\n swap: h,\n future: p,\n option: !1,\n active: V,\n contract: m,\n linear: S,\n inverse: b,\n taker: this.safeNumber(e, \"takerFeeRate\"),\n maker: this.safeNumber(e, \"makerFeeRate\"),\n contractSize: G,\n expiry: T,\n expiryDatetime: x,\n strike: void 0,\n optionType: void 0,\n precision: {\n amount: w,\n price: y\n },\n limits: {\n leverage: {\n min: this.safeNumber(e, \"minLever\"),\n max: this.safeNumber(e, \"maxLever\")\n },\n amount: {\n min: this.safeNumber2(e, \"minTradeNum\", \"minTradeAmount\"),\n max: this.safeNumber(e, \"maxTradeAmount\")\n },\n price: {\n min: void 0,\n max: void 0\n },\n cost: {\n min: j,\n max: void 0\n }\n },\n created: this.safeInteger(e, \"launchTime\"),\n info: e\n };\n }\n async fetchMarketsByType(e, t = {}) {\n let i;\n if (e === \"spot\")\n i = await this.publicSpotGetV2SpotPublicSymbols(t);\n else if (e === \"swap\" || e === \"future\")\n i = await this.publicMixGetV2MixMarketContracts(t);\n else\n throw new ge(e).exchange(this.id);\n const s = this.safeValue(i, \"data\", []);\n return this.parseMarkets(s);\n }\n networkCodeToId(e, t) {\n const i = this.safeValue(this.options, \"networkIdsByCurrencyAndNetworkCodes\", {}), s = this.safeValue(i, t, {});\n return this.safeString(s, e);\n }\n async fetchCurrencies(e = {}) {\n const t = await this.publicSpotGetV2SpotPublicCoins(e), i = {}, s = this.safeValue(t, \"data\", []);\n this.options.networkIdsByCurrencyAndNetworkCodes = {};\n for (let n = 0; n < s.length; n++) {\n const r = s[n], a = this.safeString(r, \"coinId\"), o = this.safeCurrencyCode(this.safeString(r, \"coin\"));\n this.options.networkIdsByCurrencyAndNetworkCodes[o] = {};\n const c = this.safeValue(r, \"chains\", []), u = {};\n let f = !1, h = !1, l, p, m;\n for (let y = 0; y < c.length; y++) {\n const w = c[y], S = this.safeString(w, \"chain\"), b = this.networkIdToCode(S, o), x = this.safeString(w, \"withdrawable\") === \"true\", _ = this.safeString(w, \"rechargeable\") === \"true\";\n f = _ || f, h = x || h;\n const V = this.safeString(w, \"withdrawFee\");\n V !== void 0 && (m = m === void 0 ? V : P.stringMin(V, m));\n const j = this.safeString(w, \"minWithdrawAmount\");\n j !== void 0 && (l = l === void 0 ? j : P.stringMin(j, l));\n const G = this.safeString(w, \"minDepositAmount\");\n G !== void 0 && (p = p === void 0 ? G : P.stringMin(G, p)), this.options.networkIdsByCurrencyAndNetworkCodes[o][b] = S, u[b] = {\n info: w,\n id: S,\n network: b,\n limits: {\n withdraw: {\n min: this.parseNumber(j),\n max: void 0\n },\n deposit: {\n min: this.parseNumber(G),\n max: void 0\n }\n },\n active: x && _,\n withdraw: x,\n deposit: _,\n fee: this.parseNumber(V),\n precision: this.safeNumber(w, \"withdrawMinScale\", 8)\n };\n }\n i[o] = {\n info: r,\n id: a,\n code: o,\n networks: u,\n type: void 0,\n name: void 0,\n active: f && h,\n deposit: f,\n withdraw: h,\n fee: this.parseNumber(m),\n precision: void 0,\n limits: {\n amount: {\n min: void 0,\n max: void 0\n },\n withdraw: {\n min: this.parseNumber(l),\n max: void 0\n },\n deposit: {\n min: this.parseNumber(p),\n max: void 0\n }\n },\n created: void 0\n };\n }\n return await this.cache.set({\n key: dd(this.id),\n data: this.options.networkIdsByCurrencyAndNetworkCodes,\n clone: !1,\n ttl: null\n }), i;\n }\n async fetchDeposits(e = void 0, t = void 0, i = void 0, s = {}) {\n await this.loadMarkets();\n let n = !1;\n if ([n, s] = this.handleOptionAndParams(s, \"fetchDeposits\", \"paginate\"), n)\n return await this.fetchPaginatedCallCursor(\"fetchDeposits\", void 0, t, i, s, \"idLessThan\", \"idLessThan\", void 0, 100);\n if (e === void 0)\n throw new g(\"fetchDeposits() requires a `code` argument\").exchange(this.id);\n const r = this.currency(e);\n t === void 0 && (t = this.milliseconds() - 7776e6);\n let a = {\n coin: r.code,\n startTime: t,\n endTime: this.milliseconds()\n };\n i !== void 0 && (a.limit = i), [a, s] = this.handleUntilOption(\"endTime\", a, s);\n const o = await this.privateSpotGetV2SpotWalletDepositRecords(this.extend(a, s)), c = this.safeValue(o, \"data\", []);\n return this.parseTransactions(c, r, t, i);\n }\n async withdraw(e, t, i, s = void 0, n = {}) {\n this.checkAddress(i);\n const r = this.safeString2(n, \"chain\", \"network\");\n if (n = this.omit(n, \"network\"), r === void 0)\n throw new g(\"withdraw() requires a chain parameter or a network parameter\").exchange(this.id);\n await this.loadMarkets();\n const a = this.currency(e), o = this.networkCodeToId(r, e), c = this.currencyToPrecision(e, t, r), u = {\n coin: a.code,\n address: i,\n chain: o,\n amount: c\n };\n s !== void 0 && (u.tag = s);\n const f = await this.privateSpotPostSpotV1WalletWithdrawalV2(this.extend(u, n)), h = this.safeValue(f, \"data\");\n let l;\n typeof h == \"string\" ? l = h : h !== void 0 && (l = this.safeString(h, \"orderId\"));\n const p = {\n id: l,\n info: f,\n txid: void 0,\n timestamp: void 0,\n datetime: void 0,\n network: void 0,\n addressFrom: void 0,\n address: void 0,\n addressTo: void 0,\n amount: void 0,\n type: \"withdrawal\",\n currency: void 0,\n status: void 0,\n updated: void 0,\n tagFrom: void 0,\n tag: void 0,\n tagTo: void 0,\n comment: void 0,\n fee: void 0\n }, m = this.safeValue(this.options, \"withdraw\", {});\n return this.safeBool(m, \"fillResponseFromRequest\", !0) && (p.currency = e, p.timestamp = this.milliseconds(), p.datetime = this.iso8601(this.milliseconds()), p.amount = t, p.tag = s, p.address = i, p.addressTo = i, p.network = r), p;\n }\n async fetchWithdrawals(e = void 0, t = void 0, i = void 0, s = {}) {\n await this.loadMarkets();\n let n = !1;\n if ([n, s] = this.handleOptionAndParams(s, \"fetchWithdrawals\", \"paginate\"), n)\n return await this.fetchPaginatedCallCursor(\"fetchWithdrawals\", void 0, t, i, s, \"idLessThan\", \"idLessThan\", void 0, 100);\n if (e === void 0)\n throw new g(\"fetchWithdrawals() requires a `code` argument\").exchange(this.id);\n const r = this.currency(e);\n t === void 0 && (t = this.milliseconds() - 7776e6);\n let a = {\n coin: r.code,\n startTime: t,\n endTime: this.milliseconds()\n };\n [a, s] = this.handleUntilOption(\"endTime\", a, s), i !== void 0 && (a.limit = i);\n const o = await this.privateSpotGetV2SpotWalletWithdrawalRecords(this.extend(a, s)), c = this.safeValue(o, \"data\", []);\n return this.parseTransactions(c, r, t, i);\n }\n parseTransaction(e, t = void 0) {\n const i = this.safeString(e, \"coin\"), s = this.safeCurrencyCode(i, t), n = this.safeInteger(e, \"cTime\"), r = this.safeString(e, \"chain\"), a = this.safeString(e, \"status\"), o = this.safeString(e, \"tag\"), c = this.safeString(e, \"fee\"), u = P.stringAbs(c);\n let f, h = this.safeString(e, \"size\");\n return u !== void 0 && (f = { currency: s, cost: this.parseNumber(u) }, h = P.stringSub(h, u)), {\n id: this.safeString(e, \"orderId\"),\n info: e,\n txid: this.safeString(e, \"tradeId\"),\n timestamp: n,\n datetime: this.iso8601(n),\n network: this.networkIdToCode(r),\n addressFrom: this.safeString(e, \"fromAddress\"),\n address: this.safeString(e, \"toAddress\"),\n addressTo: this.safeString(e, \"toAddress\"),\n amount: this.parseNumber(h),\n type: this.safeString(e, \"type\"),\n currency: s,\n status: this.parseTransactionStatus(a),\n updated: this.safeInteger(e, \"uTime\"),\n tagFrom: void 0,\n tag: o,\n tagTo: o,\n comment: void 0,\n internal: void 0,\n fee: f\n };\n }\n parseTransactionStatus(e) {\n const t = {\n success: \"ok\",\n Pending: \"pending\",\n pending_review: \"pending\",\n pending_review_fail: \"failed\",\n reject: \"failed\"\n };\n return this.safeString(t, e, e);\n }\n async fetchDepositAddress(e, t = {}) {\n await this.loadMarkets();\n const i = this.safeString2(t, \"chain\", \"network\");\n t = this.omit(t, \"network\");\n let s;\n i !== void 0 && (s = this.networkCodeToId(i, e));\n const n = this.currency(e), r = {\n coin: n.code\n };\n s !== void 0 && (r.chain = s);\n const a = await this.privateSpotGetV2SpotWalletDepositAddress(this.extend(r, t)), o = this.safeValue(a, \"data\", {});\n return this.parseDepositAddress(o, n);\n }\n parseDepositAddress(e, t = void 0) {\n const i = this.safeString(e, \"coin\"), s = this.safeString(e, \"chain\"), n = this.safeCurrencyCode(i, t);\n let r;\n return s !== void 0 && (r = this.networkIdToCode(s, n)), {\n currency: n,\n address: this.safeString(e, \"address\"),\n tag: this.safeString(e, \"tag\"),\n network: r,\n info: e\n };\n }\n async fetchOrderBook(e, t = void 0, i = {}) {\n await this.loadMarkets();\n const s = this.safeValue(this.options, \"sandboxMode\", !1);\n let n;\n if (s) {\n const u = this.convertSymbolForSandbox(e);\n n = this.market(u);\n } else\n n = this.market(e);\n const r = {\n symbol: n.id\n };\n t !== void 0 && (r.limit = t);\n let a;\n if (n.spot)\n a = await this.publicSpotGetV2SpotMarketOrderbook(this.extend(r, i));\n else {\n let u;\n [u, i] = this.handleProductTypeAndParams(n, i), r.productType = u, a = await this.publicMixGetV2MixMarketMergeDepth(this.extend(r, i));\n }\n const o = this.safeValue(a, \"data\", {}), c = this.safeInteger(o, \"ts\");\n return this.parseOrderBook(o, n.symbol, c);\n }\n parseTicker(e, t = void 0) {\n const i = this.safeString(e, \"symbol\"), s = this.safeString(e, \"lastPr\"), n = this.safeInteger(e, \"ts\"), r = this.safeString(e, \"change24h\"), a = this.safeString(e, \"open24\"), o = this.safeString(e, \"open\");\n let c, u;\n return o === void 0 ? (c = this.safeSymbol(i, t, void 0, \"contract\"), u = a) : (c = this.safeSymbol(i, t, void 0, \"spot\"), u = o), this.safeTicker({\n symbol: c,\n timestamp: n,\n datetime: this.iso8601(n),\n high: this.safeString(e, \"high24h\"),\n low: this.safeString(e, \"low24h\"),\n bid: this.safeString(e, \"bidPr\"),\n bidVolume: this.safeString(e, \"bidSz\"),\n ask: this.safeString(e, \"askPr\"),\n askVolume: this.safeString(e, \"askSz\"),\n vwap: void 0,\n open: u,\n close: s,\n last: s,\n previousClose: void 0,\n change: r,\n percentage: P.stringMul(r, \"100\"),\n average: void 0,\n baseVolume: this.safeString(e, \"baseVolume\"),\n quoteVolume: this.safeString(e, \"quoteVolume\"),\n info: e\n }, t);\n }\n async fetchTicker(e, t = {}) {\n await this.loadMarkets();\n const i = this.safeValue(this.options, \"sandboxMode\", !1);\n let s;\n if (i) {\n const o = this.convertSymbolForSandbox(e);\n s = this.market(o);\n } else\n s = this.market(e);\n const n = {\n symbol: s.id\n };\n let r;\n if (s.spot)\n r = await this.publicSpotGetV2SpotMarketTickers(this.extend(n, t));\n else {\n let o;\n [o, t] = this.handleProductTypeAndParams(s, t), n.productType = o, r = await this.publicMixGetV2MixMarketTicker(this.extend(n, t));\n }\n const a = this.safeValue(r, \"data\", []);\n return this.parseTicker(a[0], s);\n }\n async fetchTickers(e = void 0, t = {}) {\n await this.loadMarkets();\n let i;\n if (e !== void 0) {\n const o = this.safeValue(e, 0);\n if (this.safeValue(this.options, \"sandboxMode\", !1)) {\n const u = this.convertSymbolForSandbox(o);\n i = this.market(u);\n } else\n i = this.market(o);\n }\n const s = {};\n let n;\n [n, t] = this.handleMarketTypeAndParams(\"fetchTickers\", i, t);\n let r;\n if (n === \"spot\")\n r = await this.publicSpotGetV2SpotMarketTickers(this.extend(s, t));\n else {\n let o;\n [o, t] = this.handleProductTypeAndParams(i, t), s.productType = o, r = await this.publicMixGetV2MixMarketTickers(this.extend(s, t));\n }\n const a = this.safeValue(r, \"data\", []);\n return this.parseTickers(a, e);\n }\n parseTrade(e, t = void 0) {\n const i = this.safeString(e, \"symbol\"), s = this.safeSymbol(i, t), n = this.safeInteger2(e, \"cTime\", \"ts\");\n let r;\n const a = this.safeValue(e, \"feeDetail\"), c = this.safeString(e, \"posMode\") !== void 0 ? a[0] : a;\n return c !== void 0 && (r = {\n currency: this.safeCurrencyCode(this.safeString(c, \"feeCoin\")),\n cost: P.stringAbs(this.safeString(c, \"totalFee\"))\n }), this.safeTrade({\n info: e,\n id: this.safeString(e, \"tradeId\"),\n order: this.safeString(e, \"orderId\"),\n symbol: s,\n side: this.safeStringLower(e, \"side\"),\n type: this.safeString(e, \"orderType\"),\n takerOrMaker: this.safeString(e, \"tradeScope\"),\n price: this.safeString2(e, \"priceAvg\", \"price\"),\n amount: this.safeString2(e, \"baseVolume\", \"size\"),\n cost: this.safeString2(e, \"quoteVolume\", \"amount\"),\n timestamp: n,\n datetime: this.iso8601(n),\n fee: r\n }, t);\n }\n async fetchTrades(e, t = void 0, i = void 0, s = {}) {\n await this.loadMarkets();\n let n = !1;\n if ([n, s] = this.handleOptionAndParams(s, \"fetchTrades\", \"paginate\"), n)\n return await this.fetchPaginatedCallCursor(\"fetchTrades\", e, t, i, s, \"idLessThan\", \"idLessThan\");\n const r = this.safeValue(this.options, \"sandboxMode\", !1);\n let a;\n if (r) {\n const h = this.convertSymbolForSandbox(e);\n a = this.market(h);\n } else\n a = this.market(e);\n let o = {\n symbol: a.id\n };\n i !== void 0 && (a.contract ? o.limit = Math.min(i, 1e3) : o.limit = i);\n const c = this.safeValue(this.options, \"fetchTrades\", {});\n let u;\n if (a.spot) {\n const h = this.safeValue(c, \"spot\", {}), l = this.safeString(h, \"method\", \"publicSpotGetV2SpotMarketFillsHistory\"), p = this.safeString(s, \"method\", l);\n s = this.omit(s, \"method\"), p === \"publicSpotGetV2SpotMarketFillsHistory\" ? ([o, s] = this.handleUntilOption(\"endTime\", o, s), t !== void 0 && (o.startTime = t), u = await this.publicSpotGetV2SpotMarketFillsHistory(this.extend(o, s))) : p === \"publicSpotGetV2SpotMarketFills\" && (u = await this.publicSpotGetV2SpotMarketFills(this.extend(o, s)));\n } else {\n const h = this.safeValue(c, \"swap\", {}), l = this.safeString(h, \"method\", \"publicMixGetV2MixMarketFillsHistory\"), p = this.safeString(s, \"method\", l);\n s = this.omit(s, \"method\");\n let m;\n [m, s] = this.handleProductTypeAndParams(a, s), o.productType = m, p === \"publicMixGetV2MixMarketFillsHistory\" ? ([o, s] = this.handleUntilOption(\"endTime\", o, s), t !== void 0 && (o.startTime = t), u = await this.publicMixGetV2MixMarketFillsHistory(this.extend(o, s))) : p === \"publicMixGetV2MixMarketFills\" && (u = await this.publicMixGetV2MixMarketFills(this.extend(o, s)));\n }\n const f = this.safeValue(u, \"data\", []);\n return this.parseTrades(f, a, t, i);\n }\n async fetchTradingFee(e, t = {}) {\n await this.loadMarkets();\n const i = this.market(e), s = {\n symbol: i.id\n };\n let n;\n [n, t] = this.handleMarginModeAndParams(\"fetchTradingFee\", t), i.spot ? n !== void 0 ? s.businessType = \"margin\" : s.businessType = \"spot\" : s.businessType = \"contract\";\n const r = await this.privateCommonGetV2CommonTradeRate(this.extend(s, t)), a = this.safeValue(r, \"data\", {});\n return this.parseTradingFee(a, i);\n }\n async fetchTradingFees(e = {}) {\n await this.loadMarkets();\n let t, i, s;\n if ([i, e] = this.handleMarginModeAndParams(\"fetchTradingFees\", e), [s, e] = this.handleMarketTypeAndParams(\"fetchTradingFees\", void 0, e), s === \"spot\") {\n const a = this.safeBool(e, \"margin\", !1);\n e = this.omit(e, \"margin\"), i !== void 0 || a ? t = await this.publicMarginGetV2MarginCurrencies(e) : t = await this.publicSpotGetV2SpotPublicSymbols(e);\n } else if (s === \"swap\" || s === \"future\") {\n let a;\n [a, e] = this.handleProductTypeAndParams(void 0, e), e.productType = a, t = await this.publicMixGetV2MixMarketContracts(e);\n } else\n throw new ge(s).exchange(this.id);\n const n = this.safeValue(t, \"data\", []), r = {};\n for (let a = 0; a < n.length; a++) {\n const o = n[a], c = this.safeString(o, \"symbol\"), u = this.safeSymbol(c, void 0, void 0, s), f = this.market(u), h = this.parseTradingFee(o, f);\n r[u] = h;\n }\n return r;\n }\n parseTradingFee(e, t = void 0) {\n const i = this.safeString(e, \"symbol\");\n return {\n info: e,\n symbol: this.safeSymbol(i, t),\n maker: this.safeNumber(e, \"makerFeeRate\"),\n taker: this.safeNumber(e, \"takerFeeRate\")\n };\n }\n parseOHLCV(e, t = void 0) {\n return [\n this.safeInteger(e, 0),\n this.safeNumber(e, 1),\n this.safeNumber(e, 2),\n this.safeNumber(e, 3),\n this.safeNumber(e, 4),\n this.safeNumber(e, 5)\n ];\n }\n async fetchOHLCV(e, t = \"1m\", i = void 0, s = void 0, n = {}) {\n await this.loadMarkets();\n let r = !1;\n if ([r, n] = this.handleOptionAndParams(n, \"fetchOHLCV\", \"paginate\"), r)\n return await this.fetchPaginatedCallDeterministic(\"fetchOHLCV\", e, i, s, t, n, 1e3);\n const a = this.safeValue(this.options, \"sandboxMode\", !1);\n let o;\n if (a) {\n const w = this.convertSymbolForSandbox(e);\n o = this.market(w);\n } else\n o = this.market(e);\n const c = o.spot ? \"spot\" : \"swap\", u = this.options.timeframes[c], f = this.safeString(u, t, t), h = {\n symbol: o.id,\n granularity: f\n }, l = this.safeInteger2(n, \"until\", \"till\");\n if (n = this.omit(n, [\"until\", \"till\"]), s !== void 0 && (h.limit = s), i !== void 0 && (h.startTime = i), i !== void 0) {\n s === void 0 && (s = 100);\n const w = this.parseTimeframe(t) * 1e3;\n h.endTime = this.sum(i, w * (s + 1)) - 1;\n } else\n l !== void 0 ? h.endTime = l : h.endTime = this.milliseconds();\n let p;\n const m = this.milliseconds() - 26784e5;\n if (o.spot)\n i !== void 0 && i < m ? p = await this.publicSpotGetV2SpotMarketHistoryCandles(this.extend(h, n)) : p = await this.publicSpotGetV2SpotMarketCandles(this.extend(h, n));\n else {\n const w = this.safeString(n, \"price\");\n n = this.omit(n, [\"price\"]);\n let S;\n [S, n] = this.handleProductTypeAndParams(o, n), h.productType = S, w === \"mark\" ? p = await this.publicMixGetV2MixMarketHistoryMarkCandles(this.extend(h, n)) : w === \"index\" ? p = await this.publicMixGetV2MixMarketHistoryIndexCandles(this.extend(h, n)) : i !== void 0 && i < m ? p = await this.publicMixGetV2MixMarketHistoryCandles(this.extend(h, n)) : p = await this.publicMixGetV2MixMarketCandles(this.extend(h, n));\n }\n if (p === \"\")\n return [];\n const y = this.safeList(p, \"data\", p);\n return this.parseOHLCVs(y, o, t, i, s);\n }\n async fetchBalance(e = {}) {\n await this.loadMarkets();\n const t = {};\n let i, s, n;\n if ([i, e] = this.handleMarketTypeAndParams(\"fetchBalance\", void 0, e), [s, e] = this.handleMarginModeAndParams(\"fetchBalance\", e), i === \"swap\" || i === \"future\") {\n let a;\n [a, e] = this.handleProductTypeAndParams(void 0, e), t.productType = a, n = await this.privateMixGetV2MixAccountAccounts(this.extend(t, e));\n } else if (i === \"funding\")\n n = await this.privateMixGetV2AccountFundingAssets(this.extend(t, e));\n else if (s === \"isolated\") {\n n = await this.privateMarginGetMarginV1IsolatedAccountAssets(this.extend(t, e));\n const a = this.safeValue(n, \"data\", []);\n return this.parseIsolatedMarginBalance(a);\n } else if (s === \"cross\")\n n = await this.privateMarginGetMarginV1CrossAccountAssets(this.extend(t, e));\n else if (i === \"spot\")\n n = await this.privateSpotGetV2SpotAccountAssets(this.extend(t, e));\n else if (i === \"earn\") {\n n = await this.privateEarnGetV2EarnAccountAssets(this.extend(t, e));\n const a = this.safeValue(n, \"data\", []);\n return this.parseEarnBalance(a);\n } else if (i === \"margin\") {\n let a;\n s === \"isolated\" ? a = \"privateMarginGetIsolatedAccountAssets\" : a = \"privateMarginGetCrossedAccountAssets\", n = await this[a](this.extend(t, e));\n } else\n throw new ge(i).addMessage(\"fetchBalance() does not support \" + i + \" accounts\").exchange(this.id);\n const r = this.safeValue(n, \"data\", []);\n return this.parseBalance(r);\n }\n parseEarnBalance(e) {\n const t = {};\n return e.forEach((i) => {\n const s = this.safeString(i, \"coin\"), n = this.safeCurrencyCode(s), r = this.account();\n r.free = \"0\", r.total = this.safeString(i, \"amount\"), r.used = this.safeString(i, \"amount\"), r.locked = this.safeString(i, \"amount\"), t[n] = r;\n }), this.safeBalance(t);\n }\n /**\n *\n * @param data - response data\n * @returns\n * BTCUSDT: {\n * USDT: { free: 0.001, used: 0, total: 0.001, debt: 0 },\n * BTC: { free: 2.8e-7, used: 0, total: 2.8e-7, debt: 0 }\n * }\n */\n parseIsolatedMarginBalance(e) {\n const t = {};\n return e.forEach((i) => {\n const s = this.safeString(i, \"symbol\"), n = this.safeString(i, \"coin\"), r = this.safeCurrencyCode(n);\n t[s] || (t[s] = {});\n const a = this.account();\n a.free = this.safeString(i, \"available\"), a.total = this.safeString(i, \"totalAmount\"), a.used = this.safeString(i, \"frozen\"), a.debt = this.safeString(i, \"borrow\"), t[s][r] = a;\n }), Object.keys(t).forEach((i) => {\n t[i] = this.safeBalance(t[i]);\n }), t;\n }\n parseBalance(e) {\n const t = { info: e };\n for (let i = 0; i < e.length; i++) {\n const s = e[i], n = this.account(), r = this.safeString2(s, \"marginCoin\", \"coin\"), a = this.safeCurrencyCode(r), o = this.safeString(s, \"borrow\");\n if (o !== void 0) {\n const c = this.safeString(s, \"interest\");\n n.free = this.safeString(s, \"transferable\"), n.total = this.safeString(s, \"totalAmount\"), n.debt = P.stringAdd(o, c);\n } else {\n const c = this.safeString(s, \"available\"), u = this.safeString(s, \"maxTransferOut\");\n if (u !== void 0)\n n.free = u, n.total = this.safeString(s, \"accountEquity\");\n else {\n n.free = c;\n const f = this.safeString(s, \"frozen\"), h = this.safeString(s, \"locked\");\n n.used = P.stringAdd(f, h);\n }\n }\n t[a] = n;\n }\n return this.safeBalance(t);\n }\n parseOrderStatus(e) {\n const t = {\n new: \"open\",\n init: \"open\",\n not_trigger: \"open\",\n partial_fill: \"open\",\n partially_fill: \"open\",\n triggered: \"closed\",\n full_fill: \"closed\",\n filled: \"closed\",\n fail_trigger: \"rejected\",\n cancel: \"canceled\",\n cancelled: \"canceled\",\n canceled: \"canceled\",\n live: \"open\",\n fail_execute: \"rejected\",\n executed: \"closed\"\n };\n return this.safeString(t, e, e);\n }\n parseOrder(e, t = void 0) {\n if (this.safeString(e, \"errorMsg\") !== void 0)\n return this.safeOrder({\n info: e,\n id: this.safeString(e, \"orderId\"),\n clientOrderId: this.safeString2(e, \"clientOrderId\", \"clientOid\"),\n status: \"rejected\"\n }, t);\n let n = \"posSide\" in e ? \"contract\" : \"spot\";\n t !== void 0 && (n = t.type);\n const r = this.safeString(e, \"symbol\");\n t = this.safeMarket(r, t, void 0, n);\n const a = this.safeInteger2(e, \"cTime\", \"ctime\"), o = this.safeInteger(e, \"uTime\"), c = this.safeString2(e, \"status\", \"state\");\n let u;\n const f = this.safeString(e, \"fee\");\n f !== void 0 && (u = {\n cost: this.parseNumber(P.stringAbs(f)),\n currency: t.settle\n });\n const h = this.safeValue(e, \"feeDetail\");\n if (h !== void 0) {\n const j = JSON.parse(h), G = Object.values(j);\n let W;\n for (let B = 0; B < G.length; B++) {\n const Q = G[B];\n if (this.safeValue(Q, \"feeCoinCode\") !== void 0) {\n W = Q;\n break;\n }\n }\n u = {\n cost: this.parseNumber(P.stringAbs(this.safeString(W, \"totalFee\"))),\n currency: this.safeCurrencyCode(this.safeString(W, \"feeCoinCode\"))\n };\n }\n let l, p = this.safeStringUpper(e, \"force\");\n p === \"POST_ONLY\" && (l = !0, p = \"PO\");\n let m;\n const y = this.safeString(e, \"reduceOnly\");\n y !== void 0 && (m = y !== \"NO\");\n let w, S;\n this.safeString(e, \"basePrice\") !== void 0 ? (w = this.safeString(e, \"priceAvg\"), S = this.safeString(e, \"basePrice\")) : (w = this.safeString2(e, \"price\", \"executePrice\"), S = this.safeString(e, \"priceAvg\"));\n let T, x;\n const v = this.safeString(e, \"baseSize\");\n v !== void 0 ? (T = v, x = this.safeString(e, \"size\")) : (T = this.safeString(e, \"size\"), x = this.safeString(e, \"baseVolume\"));\n let _ = this.safeString(e, \"side\");\n return this.safeString(e, \"posMode\") === \"hedge_mode\" && m && (_ = _ === \"buy\" ? \"sell\" : \"buy\"), this.safeOrder({\n info: e,\n id: this.safeString2(e, \"orderId\", \"data\"),\n clientOrderId: this.safeString2(e, \"clientOrderId\", \"clientOid\"),\n timestamp: a,\n datetime: this.iso8601(a),\n lastTradeTimestamp: o,\n lastUpdateTimestamp: o,\n symbol: t.symbol,\n type: this.safeString(e, \"orderType\"),\n side: _,\n price: w,\n amount: T,\n cost: this.safeString2(e, \"quoteVolume\", \"quoteSize\"),\n average: S,\n filled: x,\n remaining: void 0,\n timeInForce: p,\n postOnly: l,\n reduceOnly: m,\n stopPrice: this.safeNumber(e, \"triggerPrice\"),\n triggerPrice: this.safeNumber(e, \"triggerPrice\"),\n takeProfitPrice: this.safeNumber2(e, \"presetStopSurplusPrice\", \"stopSurplusTriggerPrice\"),\n stopLossPrice: this.safeNumber2(e, \"presetStopLossPrice\", \"stopLossTriggerPrice\"),\n status: this.parseOrderStatus(c),\n fee: u,\n trades: void 0\n }, t);\n }\n async createMarketBuyOrderWithCost(e, t, i = {}) {\n await this.loadMarkets();\n const s = this.market(e);\n if (!s.spot)\n throw new ge(s.type).addMessage(\"It supports spot orders only\").exchange(this.id);\n return i.createMarketBuyOrderRequiresPrice = !1, await this.createOrder(e, \"market\", \"buy\", t, void 0, i);\n }\n async createOrder(e, t, i, s, n = void 0, r = {}) {\n await this.loadMarkets();\n const a = this.market(e), c = this.handleMarginModeAndParams(\"createOrder\", r)[0], u = this.safeValue2(r, \"stopPrice\", \"triggerPrice\"), f = this.safeValue(r, \"stopLossPrice\"), h = this.safeValue(r, \"takeProfitPrice\"), p = this.safeString2(r, \"trailingPercent\", \"callbackRatio\") !== void 0, m = u !== void 0, S = f !== void 0 || h !== void 0, b = this.createOrderRequest(e, t, i, s, n, r);\n let T;\n a.spot ? m ? T = await this.privateSpotPostV2SpotTradePlacePlanOrder(b) : c === \"isolated\" ? T = await this.privateMarginPostV2MarginIsolatedPlaceOrder(b) : c === \"cross\" ? T = await this.privateMarginPostV2MarginCrossedPlaceOrder(b) : T = await this.privateSpotPostV2SpotTradePlaceOrder(b) : m || p ? T = await this.privateMixPostV2MixOrderPlacePlanOrder(b) : S ? T = await this.privateMixPostV2MixOrderPlaceTpslOrder(b) : T = await this.privateMixPostV2MixOrderPlaceOrder(b);\n const x = this.safeValue(T, \"data\", {});\n return this.parseOrder(x, a);\n }\n createOrderRequest(e, t, i, s, n = void 0, r = {}) {\n const a = this.safeValue(this.options, \"sandboxMode\", !1);\n let o;\n if (a) {\n const L = this.convertSymbolForSandbox(e);\n o = this.market(L);\n } else\n o = this.market(e);\n let c, u;\n [c, r] = this.handleMarketTypeAndParams(\"createOrder\", o, r), [u, r] = this.handleMarginModeAndParams(\"createOrder\", r);\n const f = {\n symbol: o.id,\n orderType: t\n }, h = t === \"market\", l = this.safeValue2(r, \"stopPrice\", \"triggerPrice\"), p = this.safeValue(r, \"stopLossPrice\"), m = this.safeValue(r, \"takeProfitPrice\"), y = this.safeValue(r, \"stopLoss\"), w = this.safeValue(r, \"takeProfit\"), S = l !== void 0, b = p !== void 0, T = m !== void 0, x = y !== void 0, v = w !== void 0, _ = b || T, V = x || v, j = this.safeString(r, \"trailingTriggerPrice\", this.numberToString(n)), G = this.safeString2(r, \"trailingPercent\", \"callbackRatio\"), W = G !== void 0;\n if (this.sum(S, b, T, W) > 1)\n throw new g(\"createOrder() params can only contain one of triggerPrice, stopLossPrice, takeProfitPrice, trailingPercent\").exchange(this.id);\n t === \"limit\" && (f.price = this.priceToPrecision(e, n));\n const B = this.safeString(r, \"triggerType\", \"mark_price\"), Q = this.safeBool(r, \"reduceOnly\", !1), se = this.safeString2(r, \"clientOid\", \"clientOrderId\"), $ = this.safeString2(r, \"force\", \"timeInForce\");\n let te;\n [te, r] = this.handlePostOnly(h, $ === \"post_only\", r);\n const E = this.safeStringUpper(this.options, \"defaultTimeInForce\"), N = this.safeStringUpper(r, \"timeInForce\", E);\n if (te ? f.force = \"post_only\" : N === \"GTC\" ? f.force = \"GTC\" : N === \"FOK\" ? f.force = \"FOK\" : N === \"IOC\" && (f.force = \"IOC\"), r = this.omit(r, [\"stopPrice\", \"triggerType\", \"stopLossPrice\", \"takeProfitPrice\", \"stopLoss\", \"takeProfit\", \"postOnly\", \"reduceOnly\", \"clientOrderId\", \"trailingPercent\", \"trailingTriggerPrice\"]), c === \"swap\" || c === \"future\") {\n f.marginCoin = o.settleId, f.size = this.amountToPrecision(e, s);\n let L;\n if ([L, r] = this.handleProductTypeAndParams(o, r), f.productType = L, se !== void 0 && (f.clientOid = se), (S || _ || W) && (f.triggerType = B), W) {\n if (!h)\n throw new ge(t).addMessage(\"createOrder() bitget trailing orders must be market orders\").exchange(this.id);\n if (j === void 0)\n throw new g(\"createOrder() bitget trailing orders must have a trailingTriggerPrice param\").exchange(this.id);\n f.planType = \"track_plan\", f.triggerPrice = this.priceToPrecision(e, j), f.callbackRatio = G;\n } else if (S) {\n if (f.planType = \"normal_plan\", f.triggerPrice = this.priceToPrecision(e, l), n !== void 0 && (f.executePrice = this.priceToPrecision(e, n)), x) {\n const z = this.safeNumber2(y, \"triggerPrice\", \"stopPrice\");\n f.stopLossTriggerPrice = this.priceToPrecision(e, z);\n const K = this.safeNumber(y, \"price\");\n f.stopLossExecutePrice = this.priceToPrecision(e, K);\n const R = this.safeString(y, \"type\", \"mark_price\");\n f.stopLossTriggerType = R;\n }\n if (v) {\n const z = this.safeNumber2(w, \"triggerPrice\", \"stopPrice\");\n f.stopSurplusTriggerPrice = this.priceToPrecision(e, z);\n const K = this.safeNumber(w, \"price\");\n f.stopSurplusExecutePrice = this.priceToPrecision(e, K);\n const R = this.safeString(w, \"type\", \"mark_price\");\n f.stopSurplusTriggerType = R;\n }\n } else if (_) {\n if (!h)\n throw new ge(t).addMessage(\"createOrder() bitget stopLoss or takeProfit orders must be market orders\").exchange(this.id);\n f.holdSide = i === \"buy\" ? \"long\" : \"short\", b ? (f.triggerPrice = this.priceToPrecision(e, p), f.planType = \"pos_loss\") : T && (f.triggerPrice = this.priceToPrecision(e, m), f.planType = \"pos_profit\");\n } else {\n if (x) {\n const z = this.safeValue2(y, \"triggerPrice\", \"stopPrice\");\n f.presetStopLossPrice = this.priceToPrecision(e, z);\n }\n if (v) {\n const z = this.safeValue2(w, \"triggerPrice\", \"stopPrice\");\n f.presetStopSurplusPrice = this.priceToPrecision(e, z);\n }\n }\n if (!_) {\n u === void 0 && (u = \"cross\");\n const z = u === \"cross\" ? \"crossed\" : \"isolated\";\n f.marginMode = z;\n const K = this.safeBool(r, \"oneWayMode\", !1);\n r = this.omit(r, \"oneWayMode\");\n let R = i;\n Q ? K ? f.reduceOnly = \"YES\" : (R = i === \"buy\" ? \"sell\" : \"buy\", f.tradeSide = \"Close\") : K || (f.tradeSide = \"Open\"), f.side = R;\n }\n } else if (c === \"spot\") {\n if (_ || V)\n throw new k().addMessage(\"createOrder() does not support stop loss/take profit orders on spot markets, only swap markets\").exchange(this.id);\n f.side = i;\n let L, z, K = !0;\n if ([K, r] = this.handleOptionAndParams(r, \"createOrder\", \"createMarketBuyOrderRequiresPrice\", !0), h && i === \"buy\") {\n z = \"total\";\n const R = this.safeNumber(r, \"cost\");\n if (r = this.omit(r, \"cost\"), R !== void 0)\n L = this.costToPrecision(e, R);\n else if (K) {\n if (n === void 0)\n throw new g(\"createOrder() requires the price argument for market buy orders to calculate the total cost to spend (amount * price), alternatively set the createMarketBuyOrderRequiresPrice option or param to false and pass the cost to spend in the amount argument\").exchange(this.id);\n {\n const U = this.numberToString(s), Y = this.numberToString(n), J = P.stringMul(U, Y);\n L = this.costToPrecision(e, J);\n }\n } else\n L = this.costToPrecision(e, s);\n } else\n z = \"amount\", L = this.amountToPrecision(e, s);\n se !== void 0 && (f.clientOid = se), u !== void 0 ? (f.loanType = \"normal\", K && h && i === \"buy\" ? f.quoteSize = L : f.baseSize = L) : (L !== void 0 && (f.size = L), l !== void 0 && (f.planType = z, f.triggerType = B, f.triggerPrice = this.priceToPrecision(e, l), n !== void 0 && (f.executePrice = this.priceToPrecision(e, n))));\n } else\n throw new ge(c).exchange(this.id);\n return this.extend(f, r);\n }\n async createOrders(e, t = {}) {\n await this.loadMarkets();\n const i = [];\n let s, n;\n for (let p = 0; p < e.length; p++) {\n const m = e[p], y = this.safeString(m, \"symbol\");\n if (s === void 0)\n s = y;\n else if (s !== y)\n throw new g(\"createOrders() requires all orders to have the same symbol\").exchange(this.id);\n const w = this.safeString(m, \"type\"), S = this.safeString(m, \"side\"), b = this.safeValue(m, \"amount\"), T = this.safeValue(m, \"price\"), x = this.safeValue(m, \"params\", {}), _ = this.handleMarginModeAndParams(\"createOrders\", x)[0];\n if (_ !== void 0) {\n if (n === void 0)\n n = _;\n else if (n !== _)\n throw new g(\"createOrders() requires all orders to have the same margin mode (isolated or cross)\").exchange(this.id);\n }\n const V = this.createOrderRequest(y, w, S, b, T, x);\n i.push(V);\n }\n const r = this.safeValue(this.options, \"sandboxMode\", !1);\n let a;\n if (r) {\n const p = this.convertSymbolForSandbox(s);\n a = this.market(p);\n } else\n a = this.market(s);\n const o = {\n symbol: a.id,\n orderList: i\n };\n let c;\n if (a.swap || a.future) {\n n === void 0 && (n = \"cross\");\n const p = n === \"cross\" ? \"crossed\" : \"isolated\";\n o.marginMode = p, o.marginCoin = a.settleId;\n let m;\n [m, t] = this.handleProductTypeAndParams(a, t), o.productType = m, c = await this.privateMixPostV2MixOrderBatchPlaceOrder(o);\n } else\n n === \"isolated\" ? c = await this.privateMarginPostV2MarginIsolatedBatchPlaceOrder(o) : n === \"cross\" ? c = await this.privateMarginPostV2MarginCrossedBatchPlaceOrder(o) : c = await this.privateSpotPostV2SpotTradeBatchOrders(o);\n const u = this.safeValue(c, \"data\", {}), f = this.safeValue(u, \"failureList\", []), h = this.safeValue(u, \"successList\", []), l = this.arrayConcat(h, f);\n return this.parseOrders(l, a);\n }\n async editOrder(e, t, i, s, n = void 0, r = void 0, a = {}) {\n await this.loadMarkets();\n const o = this.safeValue(this.options, \"sandboxMode\", !1);\n let c;\n if (o) {\n const B = this.convertSymbolForSandbox(t);\n c = this.market(B);\n } else\n c = this.market(t);\n const u = {\n orderId: e\n }, f = i === \"market\", h = this.safeValue2(a, \"stopPrice\", \"triggerPrice\"), l = h !== void 0, p = this.safeValue(a, \"stopLossPrice\"), m = p !== void 0, y = this.safeValue(a, \"takeProfitPrice\"), w = y !== void 0, S = this.safeValue(a, \"stopLoss\"), b = this.safeValue(a, \"takeProfit\"), T = S !== void 0, x = b !== void 0, v = this.safeString(a, \"trailingTriggerPrice\", this.numberToString(r)), _ = this.safeString2(a, \"trailingPercent\", \"newCallbackRatio\"), V = _ !== void 0;\n if (this.sum(l, m, w, V) > 1)\n throw new g(\"editOrder() params can only contain one of triggerPrice, stopLossPrice, takeProfitPrice, trailingPercent\").exchange(this.id);\n const j = this.safeString2(a, \"clientOid\", \"clientOrderId\");\n j !== void 0 && (u.clientOid = j), a = this.omit(a, [\"stopPrice\", \"triggerType\", \"stopLossPrice\", \"takeProfitPrice\", \"stopLoss\", \"takeProfit\", \"clientOrderId\", \"trailingTriggerPrice\", \"trailingPercent\"]);\n let G;\n if (c.spot) {\n if (this.safeValue(this.options, \"editMarketBuyOrderRequiresPrice\", !0) && f && s === \"buy\") {\n if (r === void 0)\n throw new g(\"editOrder() requires price argument for market buy orders on spot markets to calculate the total amount to spend (amount * price), alternatively set the editMarketBuyOrderRequiresPrice option to false and pass in the cost to spend into the amount parameter\").exchange(this.id);\n {\n const Q = this.numberToString(n), se = this.numberToString(r), $ = this.parseNumber(P.stringMul(Q, se));\n u.size = this.priceToPrecision(t, $);\n }\n } else\n u.size = this.amountToPrecision(t, n);\n u.orderType = i, u.triggerPrice = this.priceToPrecision(t, h), u.executePrice = this.priceToPrecision(t, r), G = await this.privateSpotPostV2SpotTradeModifyPlanOrder(this.extend(u, a));\n } else {\n if (!c.swap && !c.future)\n throw new ge(c.type).addMessage(\"editOrder() does not support \" + c.type + \" orders\").exchange(this.id);\n u.symbol = c.id;\n let B;\n if ([B, a] = this.handleProductTypeAndParams(c, a), u.productType = B, !w && !m && (u.newSize = this.amountToPrecision(t, n), r !== void 0 && !V && (u.newPrice = this.priceToPrecision(t, r))), V) {\n if (!f)\n throw new ge(i).addMessage(\"editOrder() bitget trailing orders must be market orders\").exchange(this.id);\n v !== void 0 && (u.newTriggerPrice = this.priceToPrecision(t, v)), u.newCallbackRatio = _, G = await this.privateMixPostV2MixOrderModifyPlanOrder(this.extend(u, a));\n } else if (w || m)\n u.marginCoin = c.settleId, u.size = this.amountToPrecision(t, n), u.executePrice = this.priceToPrecision(t, r), m ? u.triggerPrice = this.priceToPrecision(t, p) : w && (u.triggerPrice = this.priceToPrecision(t, y)), G = await this.privateMixPostV2MixOrderModifyTpslOrder(this.extend(u, a));\n else if (l) {\n if (u.newTriggerPrice = this.priceToPrecision(t, h), T) {\n const Q = this.safeNumber2(S, \"triggerPrice\", \"stopPrice\");\n u.newStopLossTriggerPrice = this.priceToPrecision(t, Q);\n const se = this.safeNumber(S, \"price\");\n u.newStopLossExecutePrice = this.priceToPrecision(t, se);\n const $ = this.safeString(S, \"type\", \"mark_price\");\n u.newStopLossTriggerType = $;\n }\n if (x) {\n const Q = this.safeNumber2(b, \"triggerPrice\", \"stopPrice\");\n u.newSurplusTriggerPrice = this.priceToPrecision(t, Q);\n const se = this.safeNumber(b, \"price\");\n u.newStopSurplusExecutePrice = this.priceToPrecision(t, se);\n const $ = this.safeString(b, \"type\", \"mark_price\");\n u.newStopSurplusTriggerType = $;\n }\n G = await this.privateMixPostV2MixOrderModifyPlanOrder(this.extend(u, a));\n } else {\n const Q = this.uuid(), se = this.safeString2(a, \"newClientOid\", \"newClientOrderId\", Q);\n if (a = this.omit(a, \"newClientOrderId\"), u.newClientOid = se, T) {\n const $ = this.safeValue2(S, \"triggerPrice\", \"stopPrice\");\n u.newPresetStopLossPrice = this.priceToPrecision(t, $);\n }\n if (x) {\n const $ = this.safeValue2(b, \"triggerPrice\", \"stopPrice\");\n u.newPresetStopSurplusPrice = this.priceToPrecision(t, $);\n }\n G = await this.privateMixPostV2MixOrderModifyOrder(this.extend(u, a));\n }\n }\n const W = this.safeValue(G, \"data\", {});\n return this.parseOrder(W, c);\n }\n async cancelOrder(e, t = void 0, i = {}) {\n if (t === void 0)\n throw new g(\"cancelOrder() requires a symbol argument\").exchange(this.id);\n await this.loadMarkets();\n const s = this.safeValue(this.options, \"sandboxMode\", !1);\n let n;\n if (s) {\n const l = this.convertSymbolForSandbox(t);\n n = this.market(l);\n } else\n n = this.market(t);\n let r, a;\n [r, i] = this.handleMarginModeAndParams(\"cancelOrder\", i);\n const o = {}, c = this.safeValue(i, \"trailing\"), u = this.safeValue2(i, \"stop\", \"trigger\");\n if (i = this.omit(i, [\"stop\", \"trigger\", \"trailing\"]), n.spot && u || (o.symbol = n.id), (n.swap || n.future) && u || (o.orderId = e), n.swap || n.future) {\n let l;\n if ([l, i] = this.handleProductTypeAndParams(n, i), o.productType = l, u || c) {\n const p = [], m = {\n orderId: e\n };\n p.push(m), o.orderIdList = p;\n }\n if (c) {\n const p = this.safeString(i, \"planType\", \"track_plan\");\n o.planType = p, a = await this.privateMixPostV2MixOrderCancelPlanOrder(this.extend(o, i));\n } else\n u ? a = await this.privateMixPostV2MixOrderCancelPlanOrder(this.extend(o, i)) : a = await this.privateMixPostV2MixOrderCancelOrder(this.extend(o, i));\n } else if (n.spot)\n r !== void 0 ? r === \"isolated\" ? a = await this.privateMarginPostV2MarginIsolatedCancelOrder(this.extend(o, i)) : r === \"cross\" && (a = await this.privateMarginPostV2MarginCrossedCancelOrder(this.extend(o, i))) : u ? a = await this.privateSpotPostV2SpotTradeCancelPlanOrder(this.extend(o, i)) : a = await this.privateSpotPostV2SpotTradeCancelOrder(this.extend(o, i));\n else\n throw new ge(n.type).addMessage(\"cancelOrder() does not support \" + n.type + \" orders\").exchange(this.id);\n const f = this.safeValue(a, \"data\", {});\n let h;\n return (n.swap || n.future) && u ? h = this.safeValue(f, \"successList\", [])[0] : h = f, this.parseOrder(h, n);\n }\n async cancelOrders(e, t = void 0, i = {}) {\n if (t === void 0)\n throw new g(\"cancelOrders() requires a symbol argument\").exchange(this.id);\n await this.loadMarkets();\n const s = this.safeValue(this.options, \"sandboxMode\", !1);\n let n;\n if (s) {\n const l = this.convertSymbolForSandbox(t);\n n = this.market(l);\n } else\n n = this.market(t);\n let r;\n [r, i] = this.handleMarginModeAndParams(\"cancelOrders\", i);\n const a = this.safeValue2(i, \"stop\", \"trigger\");\n i = this.omit(i, [\"stop\", \"trigger\"]);\n const o = [];\n for (let l = 0; l < e.length; l++) {\n const m = {\n orderId: e[l]\n };\n o.push(m);\n }\n const c = {\n symbol: n.id\n };\n n.spot && r === void 0 ? c.orderList = o : c.orderIdList = o;\n let u;\n if (n.spot)\n r !== void 0 ? r === \"cross\" ? u = await this.privateMarginPostV2MarginCrossedBatchCancelOrder(this.extend(c, i)) : u = await this.privateMarginPostV2MarginIsolatedBatchCancelOrder(this.extend(c, i)) : u = await this.privateSpotPostV2SpotTradeBatchCancelOrder(this.extend(c, i));\n else {\n let l;\n [l, i] = this.handleProductTypeAndParams(n, i), c.productType = l, a ? u = await this.privateMixPostV2MixOrderCancelPlanOrder(this.extend(c, i)) : u = await this.privateMixPostV2MixOrderBatchCancelOrders(this.extend(c, i));\n }\n const f = this.safeValue(u, \"data\", {}), h = this.safeValue(f, \"successList\", []);\n return this.parseOrders(h, n);\n }\n async cancelAllOrders(e = void 0, t = {}) {\n if (e === void 0)\n throw new g(\"cancelAllOrders() requires a symbol argument\").exchange(this.id);\n await this.loadMarkets();\n const i = this.safeValue(this.options, \"sandboxMode\", !1);\n let s;\n if (i) {\n const c = this.convertSymbolForSandbox(e);\n s = this.market(c);\n } else\n s = this.market(e);\n let n;\n [n, t] = this.handleMarginModeAndParams(\"cancelAllOrders\", t);\n const r = {\n symbol: s.id\n }, a = this.safeValue2(t, \"stop\", \"trigger\");\n t = this.omit(t, [\"stop\", \"trigger\"]);\n let o;\n if (s.spot)\n n !== void 0 ? n === \"cross\" ? o = await this.privateMarginPostMarginV1CrossOrderBatchCancelOrder(this.extend(r, t)) : o = await this.privateMarginPostMarginV1IsolatedOrderBatchCancelOrder(this.extend(r, t)) : o = await this.privateSpotPostV2SpotTradeCancelSymbolOrder(this.extend(r, t));\n else {\n let c;\n [c, t] = this.handleProductTypeAndParams(s, t), r.productType = c, a ? o = await this.privateMixPostV2MixOrderCancelPlanOrder(this.extend(r, t)) : o = await this.privateMixPostV2MixOrderBatchCancelOrders(this.extend(r, t));\n }\n return o;\n }\n async fetchOrder(e, t = void 0, i = {}) {\n if (t === void 0)\n throw new g(\"fetchOrder() requires a symbol argument\").exchange(this.id);\n await this.loadMarkets();\n const s = this.safeValue(this.options, \"sandboxMode\", !1);\n let n;\n if (s) {\n const u = this.convertSymbolForSandbox(t);\n n = this.market(u);\n } else\n n = this.market(t);\n const r = {\n orderId: e\n };\n let a;\n if (n.spot)\n a = await this.privateSpotGetV2SpotTradeOrderInfo(this.extend(r, i));\n else if (n.swap || n.future) {\n r.symbol = n.id;\n let u;\n [u, i] = this.handleProductTypeAndParams(n, i), r.productType = u, a = await this.privateMixGetV2MixOrderDetail(this.extend(r, i));\n } else\n throw new ge(n.type).addMessage(\"fetchOrder() does not support \" + n.type + \" orders\").exchange(this.id);\n typeof a == \"string\" && (a = JSON.parse(a));\n const o = this.safeValue(a, \"data\"), c = this.safeValue(o, 0, o);\n return this.parseOrder(c, n);\n }\n async fetchOpenOrders(e = void 0, t = void 0, i = void 0, s = {}) {\n await this.loadMarkets();\n const n = this.safeValue(this.options, \"sandboxMode\", !1);\n let r, a, o = {}, c;\n if ([c, s] = this.handleMarginModeAndParams(\"fetchOpenOrders\", s), e !== void 0) {\n if (n) {\n const S = this.convertSymbolForSandbox(e);\n r = this.market(S);\n } else\n r = this.market(e);\n o.symbol = r.id;\n const y = this.safeString2(this.options, \"fetchOpenOrders\", \"defaultType\", \"spot\"), w = \"type\" in r ? r.type : y;\n a = this.safeString(s, \"type\", w);\n } else {\n const y = this.safeString2(this.options, \"fetchOpenOrders\", \"defaultType\", \"spot\");\n a = this.safeString(s, \"type\", y);\n }\n let u = !1;\n if ([u, s] = this.handleOptionAndParams(s, \"fetchOpenOrders\", \"paginate\"), u) {\n let y;\n return a === \"spot\" ? c !== void 0 && (y = \"minId\") : y = \"endId\", await this.fetchPaginatedCallCursor(\"fetchOpenOrders\", e, t, i, s, y, \"idLessThan\");\n }\n let f;\n const h = this.safeValue(s, \"trailing\"), l = this.safeValue2(s, \"stop\", \"trigger\");\n if (s = this.omit(s, [\"stop\", \"trigger\", \"trailing\"]), [o, s] = this.handleUntilOption(\"endTime\", o, s), t !== void 0 && (o.startTime = t), i !== void 0 && (o.limit = i), a === \"swap\" || a === \"future\" || c !== void 0) {\n const y = this.safeString2(s, \"clientOid\", \"clientOrderId\");\n s = this.omit(s, \"clientOrderId\"), y !== void 0 && (o.clientOid = y);\n }\n let p;\n if (p = this.omit(s, [\"type\"]), a === \"spot\")\n c !== void 0 ? (t === void 0 && (t = this.milliseconds() - 7776e6, o.startTime = t), c === \"isolated\" ? f = await this.privateMarginGetV2MarginIsolatedOpenOrders(this.extend(o, p)) : c === \"cross\" && (f = await this.privateMarginGetV2MarginCrossedOpenOrders(this.extend(o, p)))) : l ? f = await this.privateSpotGetV2SpotTradeCurrentPlanOrder(this.extend(o, p)) : f = await this.privateSpotGetV2SpotTradeUnfilledOrders(this.extend(o, p));\n else {\n let y;\n if ([y, p] = this.handleProductTypeAndParams(r, p), o.productType = y, h) {\n const w = this.safeString(s, \"planType\", \"track_plan\");\n o.planType = w, f = await this.privateMixGetV2MixOrderOrdersPlanPending(this.extend(o, p));\n } else if (l) {\n const w = this.safeString(p, \"planType\", \"normal_plan\");\n o.planType = w, f = await this.privateMixGetV2MixOrderOrdersPlanPending(this.extend(o, p));\n } else\n f = await this.privateMixGetV2MixOrderOrdersPending(this.extend(o, p));\n }\n const m = this.safeValue(f, \"data\");\n if (a === \"spot\") {\n if (c !== void 0 || l) {\n const y = this.safeValue(m, \"orderList\", []);\n return this.parseOrders(y, r, t, i);\n }\n } else {\n const y = this.safeValue(m, \"entrustedList\", []);\n return this.parseOrders(y, r, t, i);\n }\n return this.parseOrders(m, r, t, i);\n }\n async fetchClosedOrders(e = void 0, t = void 0, i = void 0, s = {}) {\n await this.loadMarkets();\n const n = await this.fetchCanceledAndClosedOrders(e, t, i, s);\n return this.filterBy(n, \"status\", \"closed\");\n }\n async fetchCanceledOrders(e = void 0, t = void 0, i = void 0, s = {}) {\n await this.loadMarkets();\n const n = await this.fetchCanceledAndClosedOrders(e, t, i, s);\n return this.filterBy(n, \"status\", \"canceled\");\n }\n async fetchCanceledAndClosedOrders(e = void 0, t = void 0, i = void 0, s = {}) {\n await this.loadMarkets();\n const n = this.safeValue(this.options, \"sandboxMode\", !1);\n let r;\n n && e !== void 0 && (e = this.convertSymbolForSandbox(e));\n let a = {};\n e !== void 0 && (r = this.market(e), a.symbol = r.id);\n let o;\n [o, s] = this.handleMarketTypeAndParams(\"fetchCanceledAndClosedOrders\", r, s);\n let c;\n [c, s] = this.handleMarginModeAndParams(\"fetchCanceledAndClosedOrders\", s);\n let u = !1;\n if ([u, s] = this.handleOptionAndParams(s, \"fetchCanceledAndClosedOrders\", \"paginate\"), u) {\n let w;\n return o === \"spot\" ? c !== void 0 && (w = \"minId\") : w = \"endId\", await this.fetchPaginatedCallCursor(\"fetchCanceledAndClosedOrders\", e, t, i, s, w, \"idLessThan\");\n }\n let f;\n const h = this.safeValue(s, \"trailing\"), l = this.safeValue2(s, \"stop\", \"trigger\");\n if (s = this.omit(s, [\"stop\", \"trigger\", \"trailing\"]), [a, s] = this.handleUntilOption(\"endTime\", a, s), t !== void 0 && (a.startTime = t), i !== void 0 && (a.limit = i), o === \"swap\" || o === \"future\" || c !== void 0) {\n const w = this.safeString2(s, \"clientOid\", \"clientOrderId\");\n s = this.omit(s, \"clientOrderId\"), w !== void 0 && (a.clientOid = w);\n }\n const p = this.milliseconds();\n if (o === \"spot\")\n if (c !== void 0)\n t === void 0 && (t = p - 7776e6, a.startTime = t), c === \"isolated\" ? f = await this.privateMarginGetV2MarginIsolatedHistoryOrders(this.extend(a, s)) : c === \"cross\" && (f = await this.privateMarginGetV2MarginCrossedHistoryOrders(this.extend(a, s)));\n else if (l) {\n if (e === void 0)\n throw new g(\"fetchCanceledAndClosedOrders() requires a symbol argument\").exchange(this.id);\n const w = this.safeIntegerN(s, [\"endTime\", \"until\", \"till\"]);\n s = this.omit(s, [\"until\", \"till\"]), t === void 0 && (t = p - 7776e6, a.startTime = t), w === void 0 && (a.endTime = p), f = await this.privateSpotGetV2SpotTradeHistoryPlanOrder(this.extend(a, s));\n } else\n f = await this.privateSpotGetV2SpotTradeHistoryOrders(this.extend(a, s));\n else {\n let w;\n if ([w, s] = this.handleProductTypeAndParams(r, s), a.productType = w, h) {\n const S = this.safeString(s, \"planType\", \"track_plan\");\n a.planType = S, f = await this.privateMixGetV2MixOrderOrdersPlanHistory(this.extend(a, s));\n } else if (l) {\n const S = this.safeString(s, \"planType\", \"normal_plan\");\n a.planType = S, f = await this.privateMixGetV2MixOrderOrdersPlanHistory(this.extend(a, s));\n } else\n f = await this.privateMixGetV2MixOrderOrdersHistory(this.extend(a, s));\n }\n const m = this.safeValue(f, \"data\", {});\n if (o === \"spot\") {\n if (c !== void 0 || l)\n return this.parseOrders(this.safeValue(m, \"orderList\", []), r, t, i);\n } else\n return this.parseOrders(this.safeValue(m, \"entrustedList\", []), r, t, i);\n typeof f == \"string\" && (f = JSON.parse(f));\n const y = this.safeValue(f, \"data\", []);\n return this.parseOrders(y, r, t, i);\n }\n async fetchLedger(e = void 0, t = void 0, i = void 0, s = {}) {\n await this.loadMarkets();\n const n = this.safeString(s, \"symbol\");\n s = this.omit(s, \"symbol\");\n let r;\n if (n !== void 0)\n if (this.safeValue(this.options, \"sandboxMode\", !1)) {\n const p = this.convertSymbolForSandbox(n);\n r = this.market(p);\n } else\n r = this.market(n);\n let a;\n [a, s] = this.handleMarketTypeAndParams(\"fetchLedger\", r, s);\n let o = !1;\n if ([o, s] = this.handleOptionAndParams(s, \"fetchLedger\", \"paginate\"), o) {\n let l;\n return a !== \"spot\" && (l = \"endId\"), await this.fetchPaginatedCallCursor(\"fetchLedger\", n, t, i, s, l, \"idLessThan\");\n }\n let c, u = {};\n e !== void 0 && (c = this.currency(e), u.coin = c.code), [u, s] = this.handleUntilOption(\"endTime\", u, s), t !== void 0 && (u.startTime = t), i !== void 0 && (u.limit = i);\n let f;\n if (a === \"spot\")\n f = await this.privateSpotGetV2SpotAccountBills(this.extend(u, s));\n else {\n n !== void 0 && (u.symbol = r.id);\n let l;\n [l, s] = this.handleProductTypeAndParams(r, s), u.productType = l, f = await this.privateMixGetV2MixAccountBill(this.extend(u, s));\n }\n const h = this.safeValue(f, \"data\");\n if (a === \"swap\" || a === \"future\") {\n const l = this.safeValue(h, \"bills\", []);\n return this.parseLedger(l, c, t, i);\n }\n return this.parseLedger(h, c, t, i);\n }\n parseLedgerEntry(e, t = void 0) {\n const i = this.safeString(e, \"coin\"), s = this.safeCurrencyCode(i, t), n = this.safeInteger(e, \"cTime\"), r = this.safeNumber(e, \"balance\"), a = this.safeNumber2(e, \"fees\", \"fee\"), o = this.safeString2(e, \"size\", \"amount\"), c = this.parseNumber(P.stringAbs(o));\n let u = \"in\";\n return o.indexOf(\"-\") >= 0 && (u = \"out\"), {\n info: e,\n id: this.safeString(e, \"billId\"),\n timestamp: n,\n datetime: this.iso8601(n),\n direction: u,\n account: void 0,\n referenceId: void 0,\n referenceAccount: void 0,\n type: this.parseLedgerType(this.safeString(e, \"businessType\")),\n currency: s,\n amount: c,\n before: void 0,\n after: r,\n status: void 0,\n fee: a\n };\n }\n parseLedgerType(e) {\n const t = {\n trans_to_cross: \"transfer\",\n trans_from_cross: \"transfer\",\n trans_to_exchange: \"transfer\",\n trans_from_exchange: \"transfer\",\n trans_to_isolated: \"transfer\",\n trans_from_isolated: \"transfer\",\n trans_to_contract: \"transfer\",\n trans_from_contract: \"transfer\",\n trans_to_otc: \"transfer\",\n trans_from_otc: \"transfer\",\n open_long: \"trade\",\n close_long: \"trade\",\n open_short: \"trade\",\n close_short: \"trade\",\n force_close_long: \"trade\",\n force_close_short: \"trade\",\n burst_long_loss_query: \"trade\",\n burst_short_loss_query: \"trade\",\n force_buy: \"trade\",\n force_sell: \"trade\",\n burst_buy: \"trade\",\n burst_sell: \"trade\",\n delivery_long: \"settlement\",\n delivery_short: \"settlement\",\n contract_settle_fee: \"fee\",\n append_margin: \"transaction\",\n adjust_down_lever_append_margin: \"transaction\",\n reduce_margin: \"transaction\",\n auto_append_margin: \"transaction\",\n cash_gift_issue: \"cashback\",\n cash_gift_recycle: \"cashback\",\n bonus_issue: \"rebate\",\n bonus_recycle: \"rebate\",\n bonus_expired: \"rebate\",\n transfer_in: \"transfer\",\n transfer_out: \"transfer\",\n deposit: \"deposit\",\n withdraw: \"withdrawal\",\n buy: \"trade\",\n sell: \"trade\"\n };\n return this.safeString(t, e, e);\n }\n async fetchMyTrades(e = void 0, t = void 0, i = void 0, s = {}) {\n if (e === void 0)\n throw new g(\"fetchMyTrades() requires a symbol argument\").exchange(this.id);\n await this.loadMarkets();\n const n = this.safeValue(this.options, \"sandboxMode\", !1);\n let r;\n if (n) {\n const h = this.convertSymbolForSandbox(e);\n r = this.market(h);\n } else\n r = this.market(e);\n let a;\n [a, s] = this.handleMarginModeAndParams(\"fetchMyTrades\", s);\n let o = !1;\n if ([o, s] = this.handleOptionAndParams(s, \"fetchMyTrades\", \"paginate\"), o) {\n let h;\n return r.spot ? a !== void 0 && (h = \"minId\") : h = \"endId\", await this.fetchPaginatedCallCursor(\"fetchMyTrades\", e, t, i, s, h, \"idLessThan\");\n }\n let c, u = {\n symbol: r.id\n };\n if ([u, s] = this.handleUntilOption(\"endTime\", u, s), t !== void 0 && (u.startTime = t), i !== void 0 && (u.limit = i), r.spot)\n a !== void 0 ? (t === void 0 && (u.startTime = this.milliseconds() - 7776e6), a === \"isolated\" ? c = await this.privateMarginGetV2MarginIsolatedFills(this.extend(u, s)) : a === \"cross\" && (c = await this.privateMarginGetV2MarginCrossedFills(this.extend(u, s)))) : c = await this.privateSpotGetV2SpotTradeFills(this.extend(u, s));\n else {\n let h;\n [h, s] = this.handleProductTypeAndParams(r, s), u.productType = h, c = await this.privateMixGetV2MixOrderFills(this.extend(u, s));\n }\n const f = this.safeValue(c, \"data\");\n if (r.swap || r.future) {\n const h = this.safeValue(f, \"fillList\", []);\n return this.parseTrades(h, r, t, i);\n } else if (a !== void 0) {\n const h = this.safeValue(f, \"fills\", []);\n return this.parseTrades(h, r, t, i);\n }\n return this.parseTrades(f, r, t, i);\n }\n async fetchPosition(e, t = {}) {\n await this.loadMarkets();\n const i = this.safeValue(this.options, \"sandboxMode\", !1);\n let s;\n if (i) {\n const u = this.convertSymbolForSandbox(e);\n s = this.market(u);\n } else\n s = this.market(e);\n let n;\n [n, t] = this.handleProductTypeAndParams(s, t);\n const r = {\n symbol: s.id,\n marginCoin: s.settleId,\n productType: n\n }, a = await this.privateMixGetV2MixPositionSinglePosition(this.extend(r, t)), o = this.safeValue(a, \"data\", []), c = this.safeValue(o, 0, {});\n return this.parsePosition(c, s);\n }\n async fetchPositions(e = void 0, t = {}) {\n await this.loadMarkets();\n let i = !1;\n if ([i, t] = this.handleOptionAndParams(t, \"fetchPositions\", \"paginate\"), i)\n return await this.fetchPaginatedCallCursor(\"fetchPositions\", void 0, void 0, void 0, t, \"endId\", \"idLessThan\");\n const s = this.safeValue(this.options, \"fetchPositions\", {}), n = this.safeString(s, \"method\", \"privateMixGetV2MixPositionAllPosition\");\n let r;\n if (e !== void 0) {\n const l = this.safeString(e, 0);\n if (this.safeValue(this.options, \"sandboxMode\", !1)) {\n const m = this.convertSymbolForSandbox(l);\n r = this.market(m);\n } else\n r = this.market(l);\n }\n let a;\n [a, t] = this.handleProductTypeAndParams(r, t);\n const o = {\n productType: a\n };\n let c, u = !1;\n if (n === \"privateMixGetV2MixPositionAllPosition\") {\n let l = this.safeString(t, \"marginCoin\", \"USDT\");\n if (e !== void 0)\n l = r.settleId;\n else if (a === this.USDT_FUTURES)\n l = \"USDT\";\n else if (a === this.USDC_FUTURES)\n l = \"USDC\";\n else if (a === this.SUSDT_FUTURES)\n l = \"SUSDT\";\n else if (a === this.SUSDC_FUTURES)\n l = \"SUSDC\";\n else if ((a === this.SCOIN_FUTURES || a === this.COIN_FUTURES) && l === void 0)\n throw new g(\"fetchPositions() requires a marginCoin parameter that matches the productType\").exchange(this.id);\n o.marginCoin = l, c = await this.privateMixGetV2MixPositionAllPosition(this.extend(o, t));\n } else\n u = !0, r !== void 0 && (o.symbol = r.id), c = await this.privateMixGetV2MixPositionHistoryPosition(this.extend(o, t));\n let f = [];\n if (!u)\n f = this.safeValue(c, \"data\", []);\n else {\n const l = this.safeValue(c, \"data\", {});\n f = this.safeValue(l, \"list\", []);\n }\n const h = [];\n for (let l = 0; l < f.length; l++)\n h.push(this.parsePosition(f[l], r));\n return e = this.marketSymbols(e), this.filterByArrayPositions(h, \"symbol\", e, !1);\n }\n parsePosition(e, t = void 0) {\n const i = this.safeString(e, \"symbol\");\n t = this.safeMarket(i, t, void 0, \"contract\");\n const s = t.symbol, n = this.safeInteger2(e, \"cTime\", \"ctime\");\n let r = this.safeString(e, \"marginMode\"), a, o;\n const c = this.safeString(e, \"unrealizedPL\"), u = this.safeString(e, \"marginSize\");\n r === \"isolated\" ? a = P.stringAdd(u, c) : r === \"crossed\" && (r = \"cross\", o = u);\n const f = this.safeString(e, \"posMode\");\n let h;\n f === \"hedge_mode\" ? h = !0 : f === \"one_way_mode\" && (h = !1);\n const l = this.safeString(e, \"holdSide\"), p = this.safeString(e, \"leverage\"), m = this.safeValue(t, \"contractSize\"), y = this.numberToString(m), w = this.safeString(e, \"total\"), S = this.safeString2(e, \"openPriceAvg\", \"openAvgPrice\"), b = this.safeString(e, \"keepMarginRate\"), T = P.stringMul(S, w);\n o === void 0 && (o = P.stringDiv(T, p));\n let x = this.parseNumber(P.stringDiv(w, y));\n x === void 0 && (x = this.safeNumber(e, \"closeTotalPos\"));\n const v = this.safeString(e, \"markPrice\"), _ = P.stringMul(w, v), V = P.stringDiv(o, _);\n let j = this.parseNumber(this.omitZero(this.safeString(e, \"liquidationPrice\")));\n const G = \"0.0006\", W = \"0.9994\";\n if (j === void 0 && r === \"isolated\" && P.stringGt(w, \"0\")) {\n let $ = P.stringDiv(u, w), te = b;\n l === \"short\" && ($ = P.stringNeg($), te = P.stringNeg(te));\n let E = P.stringSub(\"1\", te), N = P.stringSub(S, $);\n l === \"long\" ? E = P.stringMul(E, W) : N = P.stringMul(N, W), j = this.parseNumber(P.stringDiv(N, E));\n }\n const B = P.stringMul(_, G), Q = P.stringAdd(P.stringMul(b, _), B), se = P.stringMul(P.stringDiv(c, o, 4), \"100\");\n return this.safePosition({\n info: e,\n id: this.safeString(e, \"orderId\"),\n symbol: s,\n notional: this.parseNumber(_),\n marginMode: r,\n liquidationPrice: j,\n entryPrice: this.parseNumber(S),\n unrealizedPnl: this.parseNumber(c),\n realizedPnl: this.safeNumber(e, \"pnl\"),\n percentage: this.parseNumber(se),\n contracts: x,\n contractSize: m,\n markPrice: this.parseNumber(v),\n lastPrice: this.safeNumber(e, \"closeAvgPrice\"),\n side: l,\n hedged: h,\n timestamp: n,\n datetime: this.iso8601(n),\n lastUpdateTimestamp: this.safeInteger(e, \"utime\"),\n maintenanceMargin: this.parseNumber(Q),\n maintenanceMarginPercentage: this.parseNumber(b),\n collateral: this.parseNumber(a),\n initialMargin: this.parseNumber(o),\n initialMarginPercentage: this.parseNumber(V),\n leverage: this.parseNumber(p),\n marginRatio: this.safeNumber(e, \"marginRatio\"),\n stopLossPrice: void 0,\n takeProfitPrice: void 0\n });\n }\n async fetchTransfers(e = void 0, t = void 0, i = void 0, s = {}) {\n if (e === void 0)\n throw new g(\"fetchTransfers() requires a code argument\").exchange(this.id);\n await this.loadMarkets();\n let n;\n [n, s] = this.handleMarketTypeAndParams(\"fetchTransfers\", void 0, s);\n const r = this.safeString(s, \"fromAccount\", n);\n s = this.omit(s, \"fromAccount\");\n const a = this.safeValue(this.options, \"accountsByType\", {});\n n = this.safeString(a, r);\n const o = this.currency(e);\n let c = {\n coin: o.code,\n fromType: n\n };\n t !== void 0 && (c.startTime = t), i !== void 0 && (c.limit = i), [c, s] = this.handleUntilOption(\"endTime\", c, s);\n const u = await this.privateSpotGetV2SpotAccountTransferRecords(this.extend(c, s)), f = this.safeValue(u, \"data\", []);\n return this.parseTransfers(f, o, t, i);\n }\n // https://www.bitget.com/api-doc/spot/account/Get-Subaccount-Assets\n async fetchSubAccountBalances(e, t = {}) {\n await this.loadMarkets();\n const i = await this.privateSpotGetV2SpotAccountSubaccountAssets(), n = this.safeValue(i, \"data\", []).find((a) => (a == null ? void 0 : a.userId) === e);\n if (n === void 0)\n throw new ku(e);\n const r = this.safeValue(n, \"assetsList\", []);\n return { spot: this.parseBalance(r) };\n }\n // https://www.bitget.com/api-doc/spot/account/Get-Subaccount-Assets\n async getSubAccounts() {\n await this.loadMarkets();\n const e = await this.privateSpotGetV2SpotAccountSubaccountAssets();\n return this.safeValue(e, \"data\", []).map((i) => ({\n uid: this.safeString(i, \"userId\")\n }));\n }\n // https://www.bitget.com/api-doc/spot/account/Sub-Transfer\n async subAccountTransfer(e, t, i, s, n, r, a = {}) {\n await this.loadMarkets();\n const o = this.currency(e), c = this.currencyToPrecision(e, t), u = this.convertTypeToAccount(i), f = this.convertTypeToAccount(s), h = {\n coin: o.code,\n amount: c,\n fromType: u,\n toType: f,\n fromUserId: n,\n toUserId: r\n };\n \"clientOid\" in a || (h.clientOid = this.uuid());\n const l = await this.privateSpotPostV2SpotWalletSubaccountTransfer(this.extend(h, a)), p = this.safeValue(l, \"data\");\n return this.parseTransfer(p, o);\n }\n async transfer(e, t, i, s, n = {}) {\n await this.loadMarkets();\n const r = this.currency(e), a = this.safeValue(this.options, \"accountsByType\", {}), o = this.safeString(a, i), c = this.safeString(a, s), u = this.currencyToPrecision(e, t), f = {\n fromType: o,\n toType: c,\n amount: u,\n coin: r.code\n }, h = this.safeString(n, \"symbol\");\n n = this.omit(n, \"symbol\");\n let l;\n h !== void 0 && (l = this.market(h), f.symbol = l.id);\n const p = await this.privateSpotPostV2SpotWalletTransfer(this.extend(f, n)), m = this.safeValue(p, \"data\", {});\n return m.ts = this.safeInteger(p, \"requestTime\"), this.parseTransfer(m, r);\n }\n parseTransfer(e, t = void 0) {\n const i = this.safeInteger(e, \"ts\"), s = this.safeStringLower(e, \"status\"), n = this.safeString(e, \"coin\"), r = this.safeString(e, \"fromType\"), a = this.safeValue(this.options, \"accountsById\", {}), o = this.safeString(a, r, r), c = this.safeString(e, \"toType\"), u = this.safeString(a, c, c);\n return {\n info: e,\n id: this.safeString(e, \"transferId\"),\n timestamp: i,\n datetime: this.iso8601(i),\n currency: this.safeCurrencyCode(n, t),\n amount: this.safeNumber(e, \"size\"),\n fromAccount: o,\n toAccount: u,\n status: this.parseTransferStatus(s)\n };\n }\n parseTransferStatus(e) {\n const t = {\n successful: \"ok\"\n };\n return this.safeString(t, e, e);\n }\n parseDepositWithdrawFee(e, t = void 0) {\n const i = this.safeValue(e, \"chains\", []), s = i.length, n = {\n info: e,\n withdraw: {\n fee: void 0,\n percentage: void 0\n },\n deposit: {\n fee: void 0,\n percentage: void 0\n },\n networks: {}\n };\n for (let r = 0; r < s; r++) {\n const a = i[r], o = this.safeString(a, \"chain\"), c = this.safeString(t, \"code\"), u = this.networkIdToCode(o, c);\n n.networks[u] = {\n deposit: { fee: void 0, percentage: void 0 },\n withdraw: { fee: this.safeNumber(a, \"withdrawFee\"), percentage: !1 }\n }, s === 1 && (n.withdraw.fee = this.safeNumber(a, \"withdrawFee\"), n.withdraw.percentage = !1);\n }\n return n;\n }\n async fetchDepositWithdrawFees(e = void 0, t = {}) {\n await this.loadMarkets();\n const i = await this.publicSpotGetV2SpotPublicCoins(t), s = this.safeValue(i, \"data\", []);\n return this.parseDepositWithdrawFees(s, e, \"coin\");\n }\n async loadMarketsHelper(e = !1, t = {}) {\n await super.loadMarketsHelper(e, t);\n const i = await this.cache.get(dd(this.id), { clone: !1 });\n this.options.networkIdsByCurrencyAndNetworkCodes = i == null ? void 0 : i.data;\n }\n handleErrors(e, t, i, s, n, r, a, o, c) {\n if (!a)\n return;\n const u = this.safeString2(a, \"err_msg\", \"msg\"), f = this.safeString2(a, \"code\", \"err_code\"), h = f + \": \" + u, l = u !== void 0 && u !== \"\";\n l && (this.throwExactlyMatchedException(this.exceptions.exact, u, h), this.throwBroadlyMatchedException(this.exceptions.broad, u, h));\n const p = f !== void 0 && f !== \"00000\";\n if (p && this.throwExactlyMatchedException(this.exceptions.exact, f, h), p || l && f !== \"00000\")\n throw new O().addMessage(h).exchange(this.id);\n }\n async sign(e, t = [], i = \"GET\", s = {}, n = void 0, r = void 0) {\n const a = t[0] === \"private\", o = t[1], c = \"/api\", u = \"/\" + this.implodeParams(e, s), f = c + u;\n let h = this.implodeHostname(this.urls.api[o]) + f;\n const l = this.omit(s, this.extractParams(e));\n if (!a && i === \"GET\" && Object.keys(l).length > 0 && (h = h + \"?\" + this.urlencode(l)), a) {\n this.checkRequiredCredentials();\n const p = this.nonce().toString();\n let m = p + i + f;\n if (i === \"POST\")\n r = this.json(s), m += r;\n else if (Object.keys(s).length) {\n let S = \"?\" + this.urlencode(this.keysort(s));\n S.indexOf(\"%24\") > -1 && (S = S.replace(\"%24\", \"$\")), h += S, m += S;\n }\n let y;\n this.externalSigner ? y = await this.externalSigner.sign({\n payload: this.encode(m),\n publicApiKey: this.apiKey,\n exchangeId: this.id\n }) : y = this.hmac(this.encode(m), this.encode(this.secret), Re, \"base64\");\n const w = this.safeString(this.options, \"broker\");\n n = {\n \"ACCESS-KEY\": this.apiKey,\n \"ACCESS-SIGN\": y,\n \"ACCESS-TIMESTAMP\": p,\n \"ACCESS-PASSPHRASE\": this.password,\n \"X-CHANNEL-API-CODE\": w\n }, i === \"POST\" && (n[\"Content-Type\"] = \"application/json\");\n }\n return { url: h, method: i, body: r, headers: n };\n }\n}\nlet zy = class extends gt {\n};\nconst Pd = [\n \"USDT\",\n \"USDC\",\n \"DAI\",\n \"USDE\",\n \"FDUSD\",\n \"USDB\",\n \"BUSD\"\n];\nclass Hy extends zy {\n describe() {\n return this.deepExtend(super.describe(), {\n id: \"bitmart\",\n name: \"BitMart\",\n countries: [\"US\", \"CN\", \"HK\", \"KR\"],\n // 150 per 5 seconds = 30 per second\n // rateLimit = 1000ms / 30 ~= 33.334\n rateLimit: 33.34,\n version: \"v2\",\n certified: !0,\n pro: !0,\n has: {\n CORS: void 0,\n spot: !0,\n margin: !0,\n swap: !0,\n future: !1,\n option: !1,\n cancelAllOrders: !0,\n cancelOrder: !0,\n cancelOrders: !1,\n createMarketBuyOrderWithCost: !0,\n createMarketOrderWithCost: !1,\n createMarketSellOrderWithCost: !1,\n createOrder: !0,\n createTrailingPercentOrder: !0,\n fetchBalance: !0,\n fetchCanceledOrders: !0,\n fetchClosedOrders: !0,\n fetchCurrencies: !0,\n fetchDeposit: !0,\n fetchDepositAddress: !0,\n fetchDepositAddresses: !1,\n fetchDepositAddressesByNetwork: !1,\n fetchDeposits: !0,\n fetchDepositWithdrawFee: !0,\n fetchDepositWithdrawFees: !1,\n fetchMarkets: !0,\n fetchMyTrades: !0,\n fetchOHLCV: !0,\n fetchOpenOrders: !0,\n fetchOrder: !0,\n fetchOrderBook: !0,\n fetchOrders: !0,\n fetchOrderTrades: !0,\n fetchPosition: !0,\n fetchPositions: !0,\n fetchStatus: !0,\n fetchTicker: !0,\n fetchTickers: !0,\n fetchTime: !0,\n fetchTrades: !0,\n fetchTradingFee: !0,\n fetchTradingFees: !1,\n fetchTransactionFee: !0,\n fetchTransactionFees: !1,\n fetchTransfer: !1,\n fetchTransfers: !0,\n fetchWithdrawAddressesByNetwork: !1,\n fetchWithdrawal: !0,\n fetchWithdrawals: !0,\n transfer: !0,\n withdraw: !0\n },\n hostname: \"bitmart.com\",\n urls: {\n logo: \"https://user-images.githubusercontent.com/1294454/129991357-8f47464b-d0f4-41d6-8a82-34122f0d1398.jpg\",\n api: {\n rest: \"https://api-cloud.{hostname}\",\n restV2: \"https://api-cloud-v2.{hostname}\"\n },\n www: \"https://www.bitmart.com/\",\n doc: \"https://developer-pro.bitmart.com/\",\n referral: {\n // http://www.bitmart.com/?r=rQCFLh - I removed the code for now, because CWS is blocking until we explain our affiliate program to our users\n url: \"http://www.bitmart.com\",\n discount: 0.3\n },\n fees: \"https://www.bitmart.com/fee/en\"\n },\n requiredCredentials: {\n apiKey: !0,\n secret: !0,\n uid: !0\n },\n api: {\n public: {\n get: {\n \"system/time\": 3,\n \"system/service\": 3,\n // spot markets\n \"spot/v1/currencies\": 7.5,\n \"spot/v1/symbols\": 7.5,\n \"spot/v1/symbols/details\": 5,\n \"spot/quotation/v3/tickers\": 6,\n \"spot/quotation/v3/ticker\": 4,\n \"spot/quotation/v3/lite-klines\": 5,\n \"spot/quotation/v3/klines\": 7,\n \"spot/quotation/v3/books\": 4,\n \"spot/quotation/v3/trades\": 4,\n \"spot/v1/ticker\": 5,\n \"spot/v2/ticker\": 30,\n \"spot/v1/ticker_detail\": 5,\n \"spot/v1/steps\": 30,\n \"spot/v1/symbols/kline\": 6,\n \"spot/v1/symbols/book\": 5,\n \"spot/v1/symbols/trades\": 5,\n // contract markets\n \"contract/v1/tickers\": 15,\n \"contract/public/details\": 5,\n \"contract/public/depth\": 5,\n \"contract/public/open-interest\": 30,\n \"contract/public/funding-rate\": 30,\n \"contract/public/kline\": 6,\n \"account/v1/currencies\": 30\n }\n },\n private: {\n get: {\n // sub-account\n \"account/sub-account/v1/transfer-list\": 7.5,\n \"account/sub-account/v1/transfer-history\": 7.5,\n \"account/sub-account/main/v1/wallet\": 5,\n \"account/sub-account/main/v1/subaccount-list\": 7.5,\n \"account/contract/sub-account/main/v1/wallet\": 5,\n \"account/contract/sub-account/main/v1/transfer-list\": 7.5,\n \"account/contract/sub-account/v1/transfer-history\": 7.5,\n // account\n \"account/v1/wallet\": 5,\n \"account/v1/currencies\": 30,\n \"spot/v1/wallet\": 5,\n \"account/v1/deposit/address\": 30,\n \"account/v1/withdraw/charge\": 32,\n \"account/v2/deposit-withdraw/history\": 9,\n \"account/v1/deposit-withdraw/detail\": 7.5,\n // order\n \"spot/v1/order_detail\": 1,\n \"spot/v2/orders\": 5,\n \"spot/v1/trades\": 5,\n // newer order endpoint\n \"spot/v2/trades\": 5,\n \"spot/v3/orders\": 5,\n \"spot/v2/order_detail\": 1,\n // margin\n \"spot/v1/margin/isolated/borrow_record\": 1,\n \"spot/v1/margin/isolated/repay_record\": 1,\n \"spot/v1/margin/isolated/pairs\": 30,\n \"spot/v1/margin/isolated/account\": 5,\n \"spot/v1/trade_fee\": 30,\n \"spot/v1/user_fee\": 30,\n // broker\n \"spot/v1/broker/rebate\": 1,\n // contract\n \"contract/private/assets-detail\": 5,\n \"contract/private/order\": 1.2,\n \"contract/private/order-history\": 10,\n \"contract/private/position\": 10,\n \"contract/private/get-open-orders\": 1.2,\n \"contract/private/current-plan-order\": 1.2,\n \"contract/private/trades\": 10\n },\n post: {\n // sub-account endpoints\n \"account/sub-account/main/v1/sub-to-main\": 30,\n \"account/sub-account/sub/v1/sub-to-main\": 30,\n \"account/sub-account/main/v1/main-to-sub\": 30,\n \"account/sub-account/sub/v1/sub-to-sub\": 30,\n \"account/sub-account/main/v1/sub-to-sub\": 30,\n \"account/contract/sub-account/main/v1/sub-to-main\": 7.5,\n \"account/contract/sub-account/main/v1/main-to-sub\": 7.5,\n \"account/contract/sub-account/sub/v1/sub-to-main\": 7.5,\n // account\n \"account/v1/withdraw/apply\": 7.5,\n // transaction and trading\n \"spot/v1/submit_order\": 1,\n \"spot/v1/batch_orders\": 1,\n \"spot/v2/cancel_order\": 1,\n \"spot/v1/cancel_orders\": 15,\n \"spot/v4/query/order\": 1,\n \"spot/v4/query/client-order\": 1,\n \"spot/v4/query/open-orders\": 5,\n \"spot/v4/query/history-orders\": 5,\n \"spot/v4/query/trades\": 5,\n \"spot/v4/query/order-trades\": 5,\n // newer endpoint\n \"spot/v3/cancel_order\": 1,\n \"spot/v2/batch_orders\": 1,\n \"spot/v2/submit_order\": 1,\n // margin\n \"spot/v1/margin/submit_order\": 1,\n \"spot/v1/margin/isolated/borrow\": 30,\n \"spot/v1/margin/isolated/repay\": 30,\n \"spot/v1/margin/isolated/transfer\": 30,\n // contract\n \"account/v1/transfer-contract-list\": 60,\n \"account/v1/transfer-contract\": 60,\n \"contract/private/submit-order\": 2.5,\n \"contract/private/cancel-order\": 1.5,\n \"contract/private/cancel-orders\": 30,\n \"contract/private/submit-plan-order\": 2.5,\n \"contract/private/cancel-plan-order\": 1.5,\n \"contract/private/submit-leverage\": 2.5\n }\n }\n },\n timeframes: {\n \"1m\": 1,\n \"3m\": 3,\n \"5m\": 5,\n \"15m\": 15,\n \"30m\": 30,\n \"45m\": 45,\n \"1h\": 60,\n \"2h\": 120,\n \"3h\": 180,\n \"4h\": 240,\n \"1d\": 1440,\n \"1w\": 10080,\n \"1M\": 43200\n },\n fees: {\n trading: {\n tierBased: !0,\n percentage: !0,\n taker: this.parseNumber(\"0.0040\"),\n maker: this.parseNumber(\"0.0035\"),\n tiers: {\n taker: [\n [this.parseNumber(\"0\"), this.parseNumber(\"0.0020\")],\n [this.parseNumber(\"10\"), this.parseNumber(\"0.18\")],\n [this.parseNumber(\"50\"), this.parseNumber(\"0.0016\")],\n [this.parseNumber(\"250\"), this.parseNumber(\"0.0014\")],\n [this.parseNumber(\"1000\"), this.parseNumber(\"0.0012\")],\n [this.parseNumber(\"5000\"), this.parseNumber(\"0.0010\")],\n [this.parseNumber(\"25000\"), this.parseNumber(\"0.0008\")],\n [this.parseNumber(\"50000\"), this.parseNumber(\"0.0006\")]\n ],\n maker: [\n [this.parseNumber(\"0\"), this.parseNumber(\"0.001\")],\n [this.parseNumber(\"10\"), this.parseNumber(\"0.0009\")],\n [this.parseNumber(\"50\"), this.parseNumber(\"0.0008\")],\n [this.parseNumber(\"250\"), this.parseNumber(\"0.0007\")],\n [this.parseNumber(\"1000\"), this.parseNumber(\"0.0006\")],\n [this.parseNumber(\"5000\"), this.parseNumber(\"0.0005\")],\n [this.parseNumber(\"25000\"), this.parseNumber(\"0.0004\")],\n [this.parseNumber(\"50000\"), this.parseNumber(\"0.0003\")]\n ]\n }\n }\n },\n precisionMode: ct,\n exceptions: {\n exact: {\n // general errors\n 3e4: O,\n 30001: Z,\n 30002: Z,\n 30003: Ee,\n 30004: Z,\n 30005: Z,\n 30006: Z,\n 30007: Z,\n 30008: Z,\n 30010: ee,\n 30011: Z,\n 30012: Z,\n 30013: Ae,\n 30014: Te,\n 30016: dt,\n 30017: Ae,\n 30018: g,\n 30019: ee,\n // funding account & sub account errors\n 6e4: g,\n 60001: O,\n 60002: $e,\n 60003: O,\n 60004: ke,\n 60005: O,\n 60006: O,\n 60007: gi,\n 60008: re,\n 60009: O,\n 60010: O,\n 60011: et,\n 60012: pe,\n 60020: ee,\n 60021: ee,\n 60022: ee,\n 60026: ee,\n 60027: ee,\n 60028: Ee,\n 60029: Ee,\n 60030: pe,\n 60031: O,\n 60050: O,\n 60051: O,\n 61001: re,\n 61003: O,\n 61004: O,\n 61005: je,\n 61006: O,\n 61007: ee,\n 61008: Vt,\n // spot public errors\n 7e4: O,\n 70001: g,\n 70002: g,\n 71001: g,\n 71002: g,\n 71003: g,\n 71004: g,\n 71005: g,\n // spot & margin errors\n 5e4: g,\n 50001: g,\n 50002: g,\n 50003: g,\n 50004: g,\n 50005: Se,\n 50006: g,\n 50007: g,\n 50008: g,\n 50009: g,\n 50010: g,\n 50011: g,\n 50012: g,\n 50013: g,\n 50014: g,\n 50015: g,\n 50016: g,\n 50017: g,\n 50018: g,\n 50019: g,\n 50020: re,\n 50021: g,\n 50022: Te,\n 50023: g,\n 50024: g,\n 50025: g,\n 50026: g,\n 50027: g,\n 50028: g,\n 50029: g,\n 50030: Se,\n 50031: Se,\n 50032: Se,\n 50033: g,\n // below Error codes used interchangeably for both failed postOnly and IOC orders depending on market price and order side\n 50034: g,\n 50035: g,\n 50036: k,\n 50037: g,\n 50038: g,\n 50039: g,\n 50040: g,\n 50041: g,\n 50042: g,\n 51e3: $e,\n 51001: O,\n 51002: O,\n 51003: O,\n 51004: re,\n 51005: g,\n 51006: g,\n 51007: g,\n 51008: O,\n 51009: g,\n 51010: g,\n 51011: g,\n 51012: g,\n 51013: g,\n 51014: k,\n 51015: g,\n 52e3: g,\n 52001: g,\n 52002: g,\n 52003: g,\n 52004: g,\n 53e3: Ee,\n 53001: Ee,\n 53002: ee,\n 53003: ee,\n 53005: ee,\n 53006: ee,\n 53007: ee,\n 53008: ee,\n 53009: ee,\n 53010: ee,\n 57001: pe,\n 58001: O,\n 59001: O,\n 59002: be,\n 59003: O,\n 59004: O,\n 59005: ee,\n 59006: je,\n 59007: O,\n 59008: k,\n 59009: k,\n 59010: re,\n 59011: be,\n // contract errors\n 40001: O,\n 40002: O,\n 40003: O,\n 40004: O,\n 40005: O,\n 40006: ee,\n 40007: g,\n 40008: ze,\n 40009: g,\n 40010: g,\n 40011: g,\n 40012: be,\n 40013: O,\n 40014: O,\n 40015: O,\n 40016: k,\n 40017: k,\n 40018: k,\n 40019: O,\n 40020: k,\n 40021: O,\n 40022: O,\n 40023: O,\n 40024: O,\n 40025: O,\n 40026: O,\n 40027: re,\n 40028: ee,\n 40029: g,\n 40030: g,\n 40031: g,\n 40032: g,\n 40033: g,\n 40034: O,\n 40035: Se,\n 40036: g,\n 40037: Se,\n 40038: O,\n 40039: O,\n 40040: g,\n 40041: g,\n 40042: g,\n 40043: g,\n 40044: g,\n 40045: g,\n 40046: ee,\n 40047: ee,\n 40048: O,\n 40049: O,\n 40050: k\n // 403, Client OrderId duplicated with existing orders\n },\n broad: {}\n },\n options: {\n timeDifference: 0,\n defaultNetwork: \"ERC20\",\n defaultNetworks: {\n USDT: \"ERC20\"\n },\n networksById: {\n SOLANA: \"SOL\",\n MATIC: \"POLYGON\",\n Polygon: \"POLYGON\",\n ARB: \"ARBI\",\n Arbitrum: \"ARBI\",\n klaytn: \"KLAY\",\n Klaytn: \"KLAY\",\n Vechain: \"VET\",\n OP: \"OPTIMISM\",\n Zksyncera_eth: \"ZKSYNCERA\",\n OZO: \"OZONE\",\n \"Hedera Mainnet\": \"HBAR\",\n \"ZEN-20\": \"ZENIQ\",\n Fantom: \"FANTOM\",\n MultiversX: \"EGLD\",\n ERC20: \"ETH\",\n BEP2: \"BSC\",\n BEP20: \"BSC\",\n SPL: \"SOL\",\n BRC20: \"BTC\",\n ARC20: \"AVAX\",\n ARBI: \"ARBI\",\n BSC_BNB: \"BSC\"\n },\n networks: {\n ERC20: \"ERC20\",\n BTC: \"BTC\",\n TRC20: \"TRC20\",\n // todo: should be TRX after unification\n // 'TRC20': [ 'TRC20', 'trc20', 'TRON' ], // todo: after unification i.e. TRON is returned from fetchDepositAddress\n // 'ERC20': [ 'ERC20', 'ERC-20', 'ERC20 ' ], // todo: after unification\n OMNI: \"OMNI\",\n XLM: \"XLM\",\n EOS: \"EOS\",\n NEO: \"NEO\",\n BTM: \"BTM\",\n BCH: \"BCH\",\n LTC: \"LTC\",\n BSV: \"BSV\",\n XRP: \"XRP\",\n // 'VECHAIN': [ 'VET', 'Vechain' ], // todo: after unification\n PLEX: \"PLEX\",\n XCH: \"XCH\",\n // 'AVALANCHE_C': [ 'AVAX', 'AVAX-C' ], // todo: after unification\n NEAR: \"NEAR\",\n FIO: \"FIO\",\n SCRT: \"SCRT\",\n IOTX: \"IOTX\",\n SOL: \"SPL\",\n ALGO: \"ALGO\",\n ATOM: \"ATOM\",\n DOT: \"DOT\",\n ADA: \"ADA\",\n DOGE: \"DOGE\",\n XYM: \"XYM\",\n GLMR: \"GLMR\",\n MOVR: \"MOVR\",\n ZIL: \"ZIL\",\n INJ: \"INJ\",\n KSM: \"KSM\",\n ZEC: \"ZEC\",\n NAS: \"NAS\",\n // 'POLYGON': [ 'MATIC', 'Polygon', 'POLYGON' ], // todo: after unification\n HRC20: \"HECO\",\n XDC: \"XDC\",\n ONE: \"ONE\",\n LAT: \"LAT\",\n CSPR: \"Casper\",\n ICP: \"Computer\",\n XTZ: \"XTZ\",\n MINA: \"MINA\",\n BEP20: \"BSC\",\n // 'BEP20': [ 'BEP20', 'BSC_BNB', 'bep20' ], // todo: after unification\n THETA: \"THETA\",\n AKT: \"AKT\",\n AR: \"AR\",\n CELO: \"CELO\",\n FIL: \"FIL\",\n NULS: \"NULS\",\n ETC: \"ETC\",\n DASH: \"DASH\",\n DGB: \"DGB\",\n BEP2: \"BEP2\",\n GRIN: \"GRIN\",\n WAVES: \"WAVES\",\n ABBC: \"ABBC\",\n ACA: \"ACA\",\n QTUM: \"QTUM\",\n PAC: \"PAC\",\n // 'TERRACLASSIC': 'LUNC', // TBD\n // 'TERRA': 'Terra', // TBD\n // 'HEDERA': [ 'HBAR', 'Hedera', 'Hedera Mainnet' ], // todo: after unification\n TLOS: \"TLOS\",\n KARDIA: \"KardiaChain\",\n FUSE: \"FUSE\",\n TRC10: \"TRC10\",\n FIRO: \"FIRO\",\n FTM: \"Fantom\",\n // 'KLAYTN': [ 'klaytn', 'KLAY', 'Klaytn' ], // todo: after unification\n // 'ELROND': [ 'EGLD', 'Elrond eGold', 'MultiversX' ], // todo: after unification\n EVER: \"EVER\",\n KAVA: \"KAVA\",\n HYDRA: \"HYDRA\",\n PLCU: \"PLCU\",\n BRISE: \"BRISE\",\n // 'CRC20': [ 'CRO', 'CRO_Chain' ], // todo: after unification\n // 'CONFLUX': [ 'CFX eSpace', 'CFX' ], // todo: after unification\n OPTIMISM: \"OPTIMISM\",\n REEF: \"REEF\",\n SYS: \"SYS\",\n VITE: \"VITE\",\n STX: \"STX\",\n SXP: \"SXP\",\n BITCI: \"BITCI\",\n // 'ARBITRUM': [ 'ARBI', 'Arbitrum' ], // todo: after unification\n XRD: \"XRD\",\n ASTR: \"ASTAR\",\n ZEN: \"HORIZEN\",\n LTO: \"LTO\",\n ETHW: \"ETHW\",\n ETHF: \"ETHF\",\n IOST: \"IOST\",\n // 'CHILIZ': [ 'CHZ', 'CHILIZ' ], // todo: after unification\n APT: \"APT\",\n // 'FLOW': [ 'FLOW', 'Flow' ], // todo: after unification\n ONT: \"ONT\",\n EVMOS: \"EVMOS\",\n XMR: \"XMR\",\n OASYS: \"OAS\",\n OSMO: \"OSMO\",\n OMAX: \"OMAX Chain\",\n DESO: \"DESO\",\n BFIC: \"BFIC\",\n OHO: \"OHO\",\n CS: \"CS\",\n CHEQ: \"CHEQ\",\n NODL: \"NODL\",\n NEM: \"XEM\",\n FRA: \"FRA\",\n ERGO: \"ERG\"\n // todo: below will be uncommented after unification\n // 'BITCOINHD': 'BHD',\n // 'CRUST': 'CRU',\n // 'MINTME': 'MINTME',\n // 'ZENITH': 'ZENITH',\n // 'ZENIQ': 'ZENIQ', // \"ZEN-20\" is different\n // 'BITCOINVAULT': 'BTCV',\n // 'MOBILECOIN': 'MBX',\n // 'PINETWORK': 'PI',\n // 'PI': 'PI',\n // 'REBUS': 'REBUS',\n // 'XODEX': 'XODEX',\n // 'ULTRONGLOW': 'UTG'\n // 'QIBLOCKCHAIN': 'QIE',\n // 'XIDEN': 'XDEN',\n // 'PHAETON': 'PHAE',\n // 'REDLIGHT': 'REDLC',\n // 'VERITISE': 'VTS',\n // 'VERIBLOCK': 'VBK',\n // 'RAMESTTA': 'RAMA',\n // 'BITICA': 'BDCC',\n // 'CROWNSOVEREIGN': 'CSOV',\n // 'DRAC': 'DRC20',\n // 'QCHAIN': 'QDT',\n // 'KINGARU': 'KRU',\n // 'PROOFOFMEMES': 'POM',\n // 'CUBE': 'CUBE',\n // 'CADUCEUS': 'CMP',\n // 'VEIL': 'VEIL',\n // 'ENERGYWEB': 'EWT',\n // 'CYPHERIUM': 'CPH',\n // 'LBRY': 'LBC',\n // 'ETHERCOIN': 'ETE',\n // undetermined chains:\n // LEX (for LexThum), TAYCAN (for TRICE), SFL (probably TAYCAN), OMNIA (for APEX), NAC (for NAC), KAG (Kinesis), CEM (crypto emergency), XVM (for Venidium), NEVM (for NEVM), IGT20 (for IGNITE), FILM (FILMCredits), CC (CloudCoin), MERGE (MERGE), LTNM (Bitcoin latinum), PLUGCN ( PlugChain), DINGO (dingo), LED (LEDGIS), AVAT (AVAT), VSOL (Vsolidus), EPIC (EPIC cash), NFC (netflowcoin), mrx (Metrix Coin), Idena (idena network), PKT (PKT Cash), BondDex (BondDex), XBN (XBN), KALAM (Kalamint), REV (RChain), KRC20 (MyDeFiPet), ARC20 (Hurricane Token), GMD (Coop network), BERS (Berith), ZEBI (Zebi), BRC (Baer Chain), DAPS (DAPS Coin), APL (Gold Secured Currency), NDAU (NDAU), WICC (WICC), UPG (Unipay God), TSL (TreasureSL), MXW (Maxonrow), CLC (Cifculation), SMH (SMH Coin), XIN (CPCoin), RDD (ReddCoin), OK (Okcash), KAR (KAR), CCX (ConcealNetwork),\n },\n defaultType: \"spot\",\n fetchBalance: {\n type: \"spot\"\n // 'spot', 'swap', 'account'\n },\n accountsByType: {\n spot: \"spot\",\n swap: \"swap\"\n },\n createMarketBuyOrderRequiresPrice: !0,\n brokerId: \"CCXTxBitmart000\"\n }\n });\n }\n isUsingForcedProxy(e = {}, t = \"public\") {\n return t === \"private\";\n }\n async fetchTime(e = {}) {\n const t = await this.publicGetSystemTime(e), i = this.safeValue(t, \"data\", {});\n return this.safeInteger(i, \"server_time\");\n }\n async fetchStatus(e = {}) {\n const t = this.safeValue(this.options, \"fetchStatus\", {}), i = this.safeString(this.options, \"defaultType\");\n let s = this.safeString(t, \"type\", i);\n s = this.safeString(e, \"type\", s), e = this.omit(e, \"type\");\n const n = await this.publicGetSystemService(e), r = this.safeValue(n, \"data\", {}), a = this.safeValue(r, \"service\", []), o = this.indexBy(a, \"service_type\");\n s === \"swap\" && (s = \"contract\");\n const c = this.safeValue(o, s);\n let u, f;\n return c !== void 0 && (this.safeInteger(c, \"status\") === 2 ? u = \"ok\" : (u = \"maintenance\", f = this.safeInteger(c, \"end_time\"))), {\n status: u,\n updated: void 0,\n eta: f,\n url: void 0,\n info: n\n };\n }\n async fetchSpotMarkets(e = {}) {\n const t = await this.publicGetSpotV1SymbolsDetails(e), i = this.safeValue(t, \"data\", {}), s = this.safeValue(i, \"symbols\", []), n = [];\n for (let r = 0; r < s.length; r++) {\n const a = s[r], o = this.safeString(a, \"symbol\"), c = this.safeInteger(a, \"symbol_id\"), u = this.safeString(a, \"base_currency\"), f = this.safeString(a, \"quote_currency\"), h = this.safeCurrencyCode(u), l = this.safeCurrencyCode(f), p = h + \"/\" + l, m = this.safeString(a, \"min_buy_amount\"), y = this.safeString(a, \"min_sell_amount\"), w = P.stringMax(m, y), S = this.safeNumber(a, \"base_min_size\");\n n.push({\n id: o,\n numericId: c,\n symbol: p,\n base: h,\n quote: l,\n settle: void 0,\n baseId: u,\n quoteId: f,\n settleId: void 0,\n type: \"spot\",\n spot: !0,\n margin: !1,\n swap: !1,\n future: !1,\n option: !1,\n active: !0,\n contract: !1,\n linear: void 0,\n inverse: void 0,\n contractSize: void 0,\n expiry: void 0,\n expiryDatetime: void 0,\n strike: void 0,\n optionType: void 0,\n precision: {\n amount: S,\n price: this.parseNumber(this.parsePrecision(this.safeString(a, \"price_max_precision\")))\n },\n limits: {\n leverage: {\n min: void 0,\n max: void 0\n },\n amount: {\n min: S,\n max: this.safeNumber(a, \"base_max_size\")\n },\n price: {\n min: void 0,\n max: void 0\n },\n cost: {\n min: this.parseNumber(w),\n max: void 0\n }\n },\n created: void 0,\n info: a\n });\n }\n return n;\n }\n async fetchContractMarkets(e = {}) {\n const t = await this.publicGetContractPublicDetails(e), i = this.safeValue(t, \"data\", {}), s = this.safeValue(i, \"symbols\", []), n = [];\n for (let r = 0; r < s.length; r++) {\n const a = s[r], o = this.safeString(a, \"symbol\"), c = this.safeString(a, \"base_currency\"), u = this.safeString(a, \"quote_currency\"), f = this.safeCurrencyCode(c), h = this.safeCurrencyCode(u), l = \"USDT\", p = this.safeCurrencyCode(l), m = f + \"/\" + h + \":\" + p, y = this.safeInteger(a, \"product_type\"), w = y === 1, S = y === 2;\n let b = this.safeInteger(a, \"expire_timestamp\");\n !S && b === 0 && (b = void 0), n.push({\n id: o,\n numericId: void 0,\n symbol: m,\n base: f,\n quote: h,\n settle: p,\n baseId: c,\n quoteId: u,\n settleId: l,\n type: w ? \"swap\" : \"future\",\n spot: !1,\n margin: !1,\n swap: w,\n future: S,\n option: !1,\n active: !0,\n contract: !0,\n linear: !0,\n inverse: !1,\n contractSize: this.safeNumber(a, \"contract_size\"),\n expiry: b,\n expiryDatetime: this.iso8601(b),\n strike: void 0,\n optionType: void 0,\n precision: {\n amount: this.safeNumber(a, \"vol_precision\"),\n price: this.safeNumber(a, \"price_precision\")\n },\n limits: {\n leverage: {\n min: this.safeNumber(a, \"min_leverage\"),\n max: this.safeNumber(a, \"max_leverage\")\n },\n amount: {\n min: this.safeNumber(a, \"min_volume\"),\n max: this.safeNumber(a, \"max_volume\")\n },\n price: {\n min: void 0,\n max: void 0\n },\n cost: {\n min: void 0,\n max: void 0\n }\n },\n created: this.safeInteger(a, \"open_timestamp\"),\n info: a\n });\n }\n return n;\n }\n async fetchMarkets(e = {}) {\n const t = await this.fetchSpotMarkets(e), i = await this.fetchContractMarkets(e);\n return this.arrayConcat(t, i);\n }\n safeCurrencyCode(e) {\n const t = /[-|_][A-Z0-9]+$/;\n return e.replace(t, \"\");\n }\n safeCurrencyByCode(e) {\n return this.safeValue(this.currencies, e);\n }\n async fetchCurrencies(e = {}) {\n const t = await this.publicGetAccountV1Currencies(e), i = this.safeValue(t, \"data\", {}), s = this.safeValue(i, \"currencies\", []), n = {};\n this.options.currencyIdsByCodeAndNetwork = {};\n for (let r = 0; r < s.length; r++) {\n const a = s[r], o = this.safeString(a, \"currency\"), c = this.safeString(a, \"network\"), u = this.safeValue(this.options, \"networksById\", {}), f = this.safeString(u, c, c), h = this.safeCurrencyCode(o);\n this.safeValue(this.options.currencyIdsByCodeAndNetwork, h) === void 0 && (this.options.currencyIdsByCodeAndNetwork[h] = {}), this.options.currencyIdsByCodeAndNetwork[h][f] = this.safeString(a, \"currency\");\n const l = this.safeValue(a, \"withdraw_enabled\"), p = this.safeValue(a, \"deposit_enabled\"), m = this.safeNumber(a, \"withdraw_minfee\"), y = this.safeNumber(a, \"withdraw_minsize\"), w = {\n id: o,\n network: f,\n deposit: p,\n withdraw: l,\n fee: m,\n limits: {\n amount: { min: void 0, max: void 0 },\n withdraw: { min: y, max: void 0 }\n }\n };\n n[h] === void 0 ? n[h] = {\n id: h,\n code: h,\n active: p && l,\n deposit: p,\n withdraw: l,\n networks: [w]\n } : (n[h].networks.push(w), n[h].active = n[h].active || l || p, n[h].deposit = n[h].deposit || p, n[h].withdraw = n[h].withdraw || l);\n }\n return await this.cache.set({\n data: this.options.currencyIdsByCodeAndNetwork,\n key: cd(this.id),\n clone: !1,\n ttl: null\n }), this.currencies = this.deepExtend(this.currencies, n), n;\n }\n async fetchTransactionFee(e, t = {}) {\n await this.loadMarkets();\n const s = {\n currency: this.currency(e).id\n }, n = await this.privateGetAccountV1WithdrawCharge(this.extend(s, t)), r = n.data, a = {};\n return a[e] = this.safeNumber(r, \"withdraw_fee\"), {\n info: n,\n withdraw: a,\n deposit: {}\n };\n }\n parseDepositWithdrawFee(e, t = void 0) {\n return {\n info: e,\n withdraw: {\n fee: this.safeNumber(e, \"withdraw_fee\"),\n percentage: void 0\n },\n deposit: {\n fee: void 0,\n percentage: void 0\n },\n networks: {}\n };\n }\n async fetchDepositWithdrawFee(e, t = {}) {\n await this.loadMarkets();\n const s = {\n currency: this.currency(e).id\n }, r = (await this.privateGetAccountV1WithdrawCharge(this.extend(s, t))).data;\n return this.parseDepositWithdrawFee(r);\n }\n parseTicker(e, t = void 0) {\n const i = this.safeInteger(e, \"timestamp\"), s = this.safeString2(e, \"symbol\", \"contract_symbol\");\n t = this.safeMarket(s, t);\n const n = t.symbol, r = this.safeString2(e, \"close_24h\", \"last_price\");\n let a = this.safeString(e, \"price_change_percent_24h\");\n if (a === void 0) {\n const l = this.safeString(e, \"fluctuation\");\n if (l !== void 0 && l !== \"0\") {\n const p = l[0];\n a = p + P.stringMul(l.replace(p, \"\"), \"100\");\n } else\n l === \"0\" && (a = \"0\");\n }\n const o = this.safeString(e, \"base_volume_24h\");\n let c = this.safeString(e, \"quote_volume_24h\");\n c = this.safeString(e, \"volume_24h\", c);\n const u = this.safeString2(e, \"avg_price\", \"index_price\"), f = this.safeString2(e, \"high_24h\", \"high_price\"), h = this.safeString2(e, \"low_24h\", \"low_price\");\n return this.safeTicker({\n symbol: n,\n timestamp: i,\n datetime: this.iso8601(i),\n high: f,\n low: h,\n bid: this.safeString(e, \"best_bid\"),\n bidVolume: this.safeString(e, \"best_bid_size\"),\n ask: this.safeString(e, \"best_ask\"),\n askVolume: this.safeString(e, \"best_ask_size\"),\n vwap: void 0,\n open: this.safeString(e, \"open_24h\"),\n close: r,\n last: r,\n previousClose: void 0,\n change: void 0,\n percentage: a,\n average: u,\n baseVolume: o,\n quoteVolume: c,\n info: e\n }, t);\n }\n parseTickerV3(e, t = void 0) {\n const i = this.safeInteger(e, \"ts\", this.milliseconds()), s = this.safeString(e, \"symbol\");\n t = this.safeMarket(s, t);\n const n = t.symbol, r = this.safeString(e, \"last\");\n let a;\n const o = this.safeString(e, \"fluctuation\");\n if (o !== void 0 && o !== \"0\") {\n const c = o[0];\n a = c + P.stringMul(o.replace(c, \"\"), \"100\");\n } else\n o === \"0\" && (a = \"0\");\n return this.safeTicker({\n symbol: n,\n timestamp: i,\n datetime: this.iso8601(i),\n high: this.safeString(e, \"high_24h\"),\n low: this.safeString(e, \"low_24h\"),\n bid: this.safeString(e, \"bid_px\"),\n bidVolume: this.safeString(e, \"bid_sz\"),\n ask: this.safeString(e, \"ask_px\"),\n askVolume: this.safeString(e, \"ask_sz\"),\n vwap: void 0,\n open: this.safeString(e, \"open_24h\"),\n close: r,\n last: r,\n previousClose: void 0,\n change: void 0,\n percentage: a,\n average: void 0,\n baseVolume: this.safeString(e, \"v_24h\"),\n quoteVolume: this.safeString(e, \"qv_24h\"),\n info: e\n }, t);\n }\n async fetchTicker(e, t = {}) {\n await this.loadMarkets();\n const i = this.market(e), s = {};\n let n;\n if (i.swap)\n s.contract_symbol = i.id, n = await this.publicGetContractV1Tickers(this.extend(s, t));\n else if (i.spot)\n s.symbol = i.id, n = await this.publicGetSpotQuotationV3Ticker(this.extend(s, t));\n else\n throw new ge(i.type).addMessage(\"only spot and swap markets are accepted\").exchange(this.id);\n const r = this.safeValue(n, \"data\", {});\n let a, o;\n if (i.spot)\n o = this.parseTickerV3(r, i);\n else if (i.swap) {\n const c = this.safeValue(r, \"tickers\", []);\n a = this.indexBy(c, \"contract_symbol\");\n const u = this.safeValue(a, i.id);\n o = this.parseTicker(u, i);\n }\n return o;\n }\n async fetchTickers(e = void 0, t = {}) {\n await this.loadMarkets(), e = this.marketSymbols(e);\n let i, s;\n if (e !== void 0) {\n const c = this.safeValue(e, 0);\n s = this.market(c);\n }\n [i, t] = this.handleMarketTypeAndParams(\"fetchTickers\", s, t);\n let n;\n if (i === \"spot\")\n n = await this.publicGetSpotV2Ticker(t);\n else if (i === \"swap\")\n n = await this.publicGetContractV1Tickers(t);\n else\n throw new ge(i).addMessage(\"only spot and swap markets are accepted\").exchange(this.id);\n const r = this.safeValue(n, \"data\", {}), a = this.safeValue(r, \"tickers\", []), o = {};\n for (let c = 0; c < a.length; c++) {\n const u = this.parseTicker(a[c]), f = u.symbol;\n o[f] = u;\n }\n return this.filterByArrayTickers(o, \"symbol\", e);\n }\n async fetchOrderBook(e, t = void 0, i = {}) {\n await this.loadMarkets();\n const s = this.market(e), n = {\n symbol: s.id\n };\n let r;\n if (s.spot)\n t !== void 0 && (n.limit = t), r = await this.publicGetSpotQuotationV3Books(this.extend(n, i));\n else if (s.swap)\n r = await this.publicGetContractPublicDepth(this.extend(n, i));\n else\n throw new O().addMessage(\"fetchOrderBook() does not support \" + s.type + \" markets, only spot and swap markets are accepted\").exchange(this.id);\n const a = this.safeValue(r, \"data\", {}), o = this.safeInteger2(a, \"ts\", \"timestamp\");\n return this.parseOrderBook(a, s.symbol, o);\n }\n parseTrade(e, t = void 0) {\n const i = this.safeIntegerN(e, [\"order_time\", \"createTime\", \"create_time\"]), s = \"order_time\" in e;\n let n, r, a, o;\n s ? (n = this.safeString(e, \"count\"), r = this.safeString(e, \"amount\"), o = this.safeString(e, \"type\")) : (n = this.safeStringN(e, [\"size\", \"vol\", \"fillQty\"]), r = this.safeString(e, \"notional\"), a = this.safeString(e, \"type\"), o = this.parseOrderSide(this.safeString(e, \"side\")));\n const c = this.safeString(e, \"symbol\");\n t = this.safeMarket(c, t);\n const u = this.safeString2(e, \"fee\", \"paid_fees\");\n let f;\n if (u !== void 0) {\n const h = this.safeString(e, \"feeCoinName\");\n let l = this.safeCurrencyCode(h);\n l === void 0 && (l = o === \"buy\" ? t.base : t.quote), f = {\n cost: u,\n currency: l\n };\n }\n return this.safeTrade({\n info: e,\n id: this.safeStringN(e, [\"tradeId\", \"trade_id\", \"lastTradeID\"]),\n order: this.safeString2(e, \"orderId\", \"order_id\"),\n timestamp: i,\n datetime: this.iso8601(i),\n symbol: t.symbol,\n type: a,\n side: o,\n price: this.safeString2(e, \"price\", \"fillPrice\"),\n amount: n,\n cost: r,\n takerOrMaker: this.safeStringLower2(e, \"tradeRole\", \"exec_type\"),\n fee: f\n }, t);\n }\n async fetchTrades(e, t = void 0, i = void 0, s = {}) {\n await this.loadMarkets();\n const n = this.market(e);\n if (!n.spot)\n throw new ge(n.type).addMessage(\"only spot orders are accepted\").exchange(this.id);\n const r = {\n symbol: n.id\n }, a = await this.publicGetSpotV1SymbolsTrades(this.extend(r, s)), o = this.safeValue(a, \"data\", {}), c = this.safeValue(o, \"trades\", []);\n return this.parseTrades(c, n, t, i);\n }\n parseOHLCV(e, t = void 0) {\n return Array.isArray(e) ? [\n this.safeTimestamp(e, 0),\n this.safeNumber(e, 1),\n this.safeNumber(e, 2),\n this.safeNumber(e, 3),\n this.safeNumber(e, 4),\n this.safeNumber(e, 5)\n ] : [\n this.safeTimestamp2(e, \"timestamp\", \"ts\"),\n this.safeNumber2(e, \"open_price\", \"o\"),\n this.safeNumber2(e, \"high_price\", \"h\"),\n this.safeNumber2(e, \"low_price\", \"l\"),\n this.safeNumber2(e, \"close_price\", \"c\"),\n this.safeNumber2(e, \"volume\", \"v\")\n ];\n }\n async fetchOHLCV(e, t = \"1m\", i = void 0, s = void 0, n = {}) {\n await this.loadMarkets();\n let r = !1;\n if ([r, n] = this.handleOptionAndParams(n, \"fetchOHLCV\", \"paginate\", !1), r)\n return await this.fetchPaginatedCallDeterministic(\"fetchOHLCV\", e, i, s, t, n, 200);\n const a = this.market(e), o = this.parseTimeframe(t), c = this.safeInteger(this.timeframes, t);\n let u = {\n symbol: a.id\n };\n if (c !== void 0 ? u.step = c : u.step = t, a.spot)\n [u, n] = this.handleUntilOption(\"before\", u, n, 1e-3), s !== void 0 && (u.limit = s), i !== void 0 && (u.after = this.parseToInt(i / 1e3) - 1);\n else {\n s === void 0 && (s = 1200), s = Math.min(1200, s);\n const p = this.parseToInt(this.milliseconds() / 1e3);\n if (i === void 0) {\n const m = p - s * o;\n u.start_time = m, u.end_time = p;\n } else {\n const m = this.parseToInt(i / 1e3) - 1, y = this.sum(m, s * o);\n u.start_time = m, u.end_time = Math.min(y, p);\n }\n [u, n] = this.handleUntilOption(\"end_time\", u, n, 1e-3);\n }\n let f;\n a.swap ? f = await this.publicGetContractPublicKline(this.extend(u, n)) : f = await this.publicGetSpotQuotationV3Klines(this.extend(u, n));\n const h = this.safeValue(f, \"data\", []);\n return this.parseOHLCVs(h, a, t, i, s);\n }\n async fetchMyTrades(e = void 0, t = void 0, i = void 0, s = {}) {\n await this.loadMarkets();\n let n;\n const r = {};\n e !== void 0 && (n = this.market(e), r.symbol = n.id);\n let a, o;\n [a, s] = this.handleMarketTypeAndParams(\"fetchMyTrades\", n, s);\n const c = this.safeIntegerN(s, [\"until\", \"endTime\", \"end_time\"]);\n if (s = this.omit(s, [\"until\"]), a === \"spot\") {\n let f;\n [f, s] = this.handleMarginModeAndParams(\"fetchMyTrades\", s), f === \"isolated\" && (r.orderMode = \"iso_margin\");\n const h = this.safeValue(this.options, \"fetchMyTrades\", {}), l = this.safeInteger(h, \"limit\", 200);\n i === void 0 && (i = l), r.limit = i, t !== void 0 && (r.startTime = t), c !== void 0 && (r.endTime = c), o = await this.privatePostSpotV4QueryTrades(this.extend(r, s));\n } else if (a === \"swap\") {\n if (e === void 0)\n throw new g(\"fetchMyTrades() requires a symbol argument\").exchange(this.id);\n t !== void 0 && (r.start_time = t), c !== void 0 && (r.end_time = c), o = await this.privateGetContractPrivateTrades(this.extend(r, s));\n } else\n throw new ge(a).addMessage(\"only spot and swap orders are accepted\").exchange(this.id);\n const u = this.safeValue(o, \"data\", []);\n return this.parseTrades(u, n, t, i);\n }\n async fetchOrderTrades(e, t = void 0, i = void 0, s = void 0, n = {}) {\n await this.loadMarkets();\n const r = {\n orderId: e\n }, a = await this.privatePostSpotV4QueryOrderTrades(this.extend(r, n)), o = this.safeValue(a, \"data\", {});\n return this.parseTrades(o, void 0, i, s);\n }\n customParseBalance(e, t) {\n const i = this.safeValue(e, \"data\", {});\n let s;\n t === \"usd-m\" || t === \"coin-m\" ? s = this.safeValue(e, \"data\", []) : t === \"margin\" ? s = this.safeValue(i, \"symbols\", []) : s = this.safeValue(i, \"wallet\", []);\n const n = { info: e };\n if (t === \"margin\") {\n for (let r = 0; r < s.length; r++) {\n const a = s[r], o = this.safeString(a, \"symbol\"), c = this.safeSymbol(o, void 0, \"_\"), u = this.safeValue(a, \"base\", {}), f = this.safeValue(a, \"quote\", {}), h = this.safeCurrencyCode(this.safeString(u, \"currency\")), l = this.safeCurrencyCode(this.safeString(f, \"currency\")), p = {};\n p[h] = this.parseBalanceHelper(u), p[l] = this.parseBalanceHelper(f), n[c] = this.safeBalance(p);\n }\n return n;\n } else {\n for (let r = 0; r < s.length; r++) {\n const a = s[r];\n let o = this.safeString2(a, \"id\", \"currency\");\n o = this.safeString(a, \"coin_code\", o);\n const c = this.safeCurrencyCode(o), u = this.account();\n u.free = this.safeString2(a, \"available\", \"available_balance\"), u.used = this.safeString2(a, \"frozen\", \"frozen_balance\"), n[c] = u;\n }\n return this.safeBalance(n);\n }\n }\n parseBalanceHelper(e) {\n const t = this.account();\n t.used = this.safeString(e, \"frozen\"), t.free = this.safeString(e, \"available\"), t.total = this.safeString(e, \"total_asset\");\n const i = this.safeString(e, \"borrow_unpaid\"), s = this.safeString(e, \"interest_unpaid\");\n return t.debt = P.stringAdd(i, s), t;\n }\n async fetchBalance(e = {}) {\n await this.loadMarkets();\n let t;\n [t, e] = this.handleMarketTypeAndParams(\"fetchBalance\", void 0, e);\n const i = this.safeString(e, \"marginMode\"), s = this.safeBool(e, \"margin\", !1);\n e = this.omit(e, [\"margin\", \"marginMode\"]), (i !== void 0 || s) && (t = \"margin\");\n let n;\n if (t === \"spot\")\n n = await this.privateGetSpotV1Wallet(e);\n else if (t === \"usd-m\" || t === \"coin-m\")\n n = await this.privateGetContractPrivateAssetsDetail(e), n.data = n.data.filter((r) => t === \"usd-m\" ? Pd.includes(r.currency) : !Pd.includes(r.currency));\n else if (t === \"account\")\n n = await this.privateGetAccountV1Wallet(e);\n else if (t === \"margin\")\n n = await this.privateGetSpotV1MarginIsolatedAccount(e);\n else\n throw new ge(t).addMessage(\"only spot, swap and account and margin markets are accepted\").exchange(this.id);\n return this.customParseBalance(n, t);\n }\n parseTradingFee(e, t = void 0) {\n const i = this.safeString(e, \"symbol\"), s = this.safeSymbol(i);\n return {\n info: e,\n symbol: s,\n maker: this.safeNumber(e, \"maker_fee_rate\"),\n taker: this.safeNumber(e, \"taker_fee_rate\")\n };\n }\n async fetchTradingFee(e, t = {}) {\n await this.loadMarkets();\n const i = this.market(e);\n if (!i.spot)\n throw new ge(i.type).addMessage(\"only spot orders are accepted\").exchange(this.id);\n const s = {\n symbol: i.id\n }, n = await this.privateGetSpotV1TradeFee(this.extend(s, t)), r = this.safeValue(n, \"data\");\n return this.parseTradingFee(r);\n }\n parseOrder(e, t = void 0) {\n let i;\n typeof e == \"string\" && (i = e, e = {}), i = this.safeString2(e, \"order_id\", \"orderId\", i);\n const s = this.safeInteger2(e, \"create_time\", \"createTime\"), n = this.safeString(e, \"symbol\"), r = this.safeSymbol(n, t);\n t = this.safeMarket(r, t);\n const a = this.safeString(t, \"type\", \"spot\");\n let o = this.safeString(e, \"type\"), c, u;\n o === \"limit_maker\" && (o = \"limit\", u = !0, c = \"PO\"), o === \"ioc\" && (o = \"limit\", c = \"IOC\");\n let f = this.safeString(e, \"price\");\n f === \"market price\" && (f = void 0);\n const h = this.omitZero(this.safeString(e, \"size\")), l = this.omitZero(this.safeString2(e, \"filled_size\", \"filledSize\")), p = h && l && P.stringSub(h, l);\n return this.safeOrder({\n id: i,\n clientOrderId: this.safeString2(e, \"client_order_id\", \"clientOrderId\"),\n info: e,\n timestamp: s,\n datetime: this.iso8601(s),\n lastTradeTimestamp: this.safeInteger(e, \"update_time\"),\n symbol: r,\n type: o,\n timeInForce: c,\n postOnly: u,\n side: this.parseOrderSide(this.safeString(e, \"side\")),\n price: this.omitZero(f),\n stopPrice: void 0,\n triggerPrice: void 0,\n amount: h,\n cost: this.safeString2(e, \"filled_notional\", \"filledNotional\"),\n average: this.safeStringN(e, [\"price_avg\", \"priceAvg\", \"deal_avg_price\"]),\n filled: l,\n remaining: p,\n status: this.parseOrderStatusByType(a, this.safeString2(e, \"status\", \"state\")),\n fee: void 0,\n trades: void 0\n }, t);\n }\n parseOrderSide(e) {\n const t = {\n 1: \"buy\",\n 2: \"buy\",\n 3: \"sell\",\n 4: \"sell\"\n };\n return this.safeString(t, e, e);\n }\n parseOrderStatusByType(e, t) {\n const i = {\n spot: {\n 1: \"rejected\",\n 2: \"open\",\n 3: \"rejected\",\n 4: \"open\",\n 5: \"open\",\n 6: \"closed\",\n 7: \"canceled\",\n 8: \"canceled\",\n new: \"open\",\n partially_filled: \"open\",\n filled: \"closed\",\n partially_canceled: \"canceled\"\n },\n swap: {\n 1: \"open\",\n 2: \"open\",\n 4: \"closed\"\n // Completed\n }\n }, s = this.safeValue(i, e, {});\n return this.safeString(s, t, t);\n }\n async createMarketBuyOrderWithCost(e, t, i = {}) {\n if (await this.loadMarkets(), !this.market(e).spot)\n throw new O().addMessage(\"createMarketBuyOrderWithCost() supports spot orders only\").exchange(this.id);\n return i.createMarketBuyOrderRequiresPrice = !1, await this.createOrder(e, \"market\", \"buy\", t, void 0, i);\n }\n async createOrder(e, t, i, s, n = void 0, r = {}) {\n await this.loadMarkets();\n const a = this.market(e), o = this.handleMarginModeAndParams(\"createOrder\", r), c = this.safeString(o, 0), f = this.safeStringN(r, [\"triggerPrice\", \"stopPrice\", \"trigger_price\"]) !== void 0;\n let h;\n if (a.spot) {\n const m = this.createSpotOrderRequest(e, t, i, s, n, r);\n c === \"isolated\" ? h = await this.privatePostSpotV1MarginSubmitOrder(m) : h = await this.privatePostSpotV2SubmitOrder(m);\n } else {\n const m = this.createSwapOrderRequest(e, t, i, s, n, r);\n f ? h = await this.privatePostContractPrivateSubmitPlanOrder(m) : h = await this.privatePostContractPrivateSubmitOrder(m);\n }\n const l = this.safeValue(h, \"data\", {}), p = this.parseOrder(l, a);\n return p.type = t, p.side = i, p.amount = s, p.price = n, p;\n }\n createSwapOrderRequest(e, t, i, s, n = void 0, r = {}) {\n const o = {\n symbol: this.market(e).id,\n type: t,\n size: parseInt(this.amountToPrecision(e, s))\n }, c = this.safeString(r, \"timeInForce\"), u = this.safeInteger(r, \"mode\"), f = t === \"market\";\n let h;\n const l = this.safeValue(r, \"reduceOnly\"), p = u === 4;\n [h, r] = this.handlePostOnly(f, p, r);\n const y = t === \"limit\" || h || (c === \"IOC\" || u === 3);\n c === \"GTC\" ? o.mode = 1 : c === \"FOK\" ? o.mode = 2 : c === \"IOC\" && (o.mode = 3), h && (o.mode = 4);\n const w = this.safeStringN(r, [\"triggerPrice\", \"stopPrice\", \"trigger_price\"]), S = w !== void 0, b = this.safeString2(r, \"trailingTriggerPrice\", \"activation_price\", this.numberToString(n)), T = this.safeString2(r, \"trailingPercent\", \"callback_rate\");\n y ? o.price = this.priceToPrecision(e, n) : (t === \"trailing\" || T !== void 0) && (o.callback_rate = T, o.activation_price = this.priceToPrecision(e, b), o.activation_price_type = this.safeInteger(r, \"activation_price_type\", 1)), S && (o.executive_price = this.priceToPrecision(e, n), o.trigger_price = this.priceToPrecision(e, w), o.price_type = this.safeInteger(r, \"price_type\", 1), i === \"buy\" ? l ? o.price_way = 2 : o.price_way = 1 : i === \"sell\" && (l ? o.price_way = 1 : o.price_way = 2)), i === \"buy\" ? l ? o.side = 2 : o.side = 1 : i === \"sell\" && (l ? o.side = 3 : o.side = 4);\n let v;\n [v, r] = this.handleMarginModeAndParams(\"createOrder\", r, \"cross\"), o.open_type = v;\n const _ = this.safeString(r, \"clientOrderId\");\n _ !== void 0 && (r = this.omit(r, \"clientOrderId\"), o.client_order_id = _);\n const V = this.safeInteger(r, \"leverage\", 1);\n return r = this.omit(r, [\"timeInForce\", \"postOnly\", \"reduceOnly\", \"leverage\", \"trailingTriggerPrice\", \"trailingPercent\", \"triggerPrice\", \"stopPrice\"]), o.leverage = this.numberToString(V), this.extend(o, r);\n }\n createSpotOrderRequest(e, t, i, s, n = void 0, r = {}) {\n const a = this.market(e), o = {\n symbol: a.id,\n side: i,\n type: t\n }, c = this.safeString(r, \"timeInForce\");\n if (c === \"FOK\")\n throw new g(\"createOrder() only accepts timeInForce parameter values of IOC or PO\").exchange(this.id);\n const u = this.safeInteger(r, \"mode\"), f = t === \"market\";\n let h;\n const l = t === \"limit_maker\" || u === 4;\n [h, r] = this.handlePostOnly(f, l, r), r = this.omit(r, [\"timeInForce\", \"postOnly\"]);\n const p = c === \"IOC\" || t === \"ioc\";\n if (t === \"limit\" || h || p)\n o.size = this.amountToPrecision(e, s), o.price = this.priceToPrecision(e, n);\n else if (f)\n if (i === \"buy\") {\n let y = this.safeNumber2(r, \"cost\", \"notional\");\n r = this.omit(r, \"cost\");\n let w = !0;\n if ([w, r] = this.handleOptionAndParams(r, \"createOrder\", \"createMarketBuyOrderRequiresPrice\", !0), w) {\n if (n === void 0 && y === void 0)\n throw new g('createOrder() requires the price argument for market buy orders to calculate the total cost to spend (amount * price), alternatively set the createMarketBuyOrderRequiresPrice option or param to false and pass the cost to spend in the amount argument or in the \"notional\" extra parameter (the exchange-specific behaviour)').exchange(this.id);\n {\n const S = this.numberToString(s), b = this.numberToString(n);\n y = this.parseNumber(P.stringMul(S, b));\n }\n } else\n y = y === void 0 ? s : y;\n o.notional = this.decimalToPrecision(y, Et, a.precision.price, this.precisionMode);\n } else\n i === \"sell\" && (o.size = this.amountToPrecision(e, s));\n return h && (o.type = \"limit_maker\"), p && (o.type = \"ioc\"), this.extend(o, r);\n }\n async cancelOrder(e, t = void 0, i = {}) {\n if (t === void 0)\n throw new g(\"cancelOrder() requires a symbol argument\").exchange(this.id);\n await this.loadMarkets();\n const s = this.market(t), n = {\n symbol: s.id\n }, r = this.safeString2(i, \"clientOrderId\", \"client_order_id\");\n r !== void 0 ? n.client_order_id = r : n.order_id = e.toString(), i = this.omit(i, [\"clientOrderId\"]);\n let a;\n if (s.spot)\n a = await this.privatePostSpotV3CancelOrder(this.extend(n, i));\n else {\n const f = this.safeValue2(i, \"stop\", \"trigger\");\n i = this.omit(i, [\"stop\", \"trigger\"]), f ? a = await this.privatePostContractPrivateCancelPlanOrder(this.extend(n, i)) : a = await this.privatePostContractPrivateCancelOrder(this.extend(n, i));\n }\n if (s.swap)\n return a;\n const o = this.safeValue(a, \"data\");\n if (o === !0)\n return this.parseOrder(e, s);\n const c = this.safeValue(o, \"succeed\");\n if (c !== void 0) {\n if (e = this.safeString(c, 0), e === void 0)\n throw new k().addMessage(\"cancelOrder() failed to cancel \" + t + \" order id \" + e).exchange(this.id);\n } else if (!this.safeValue(o, \"result\"))\n throw new k().addMessage(\"cancelOrder() \" + t + \" order id \" + e + \" is filled or canceled\").exchange(this.id);\n const u = this.parseOrder(e, s);\n return this.extend(u, { id: e });\n }\n async cancelAllOrders(e = void 0, t = {}) {\n await this.loadMarkets();\n const i = {};\n let s;\n e !== void 0 && (s = this.market(e), i.symbol = s.id);\n let n, r;\n if ([r, t] = this.handleMarketTypeAndParams(\"cancelAllOrders\", s, t), r === \"spot\")\n n = await this.privatePostSpotV1CancelOrders(this.extend(i, t));\n else if (r === \"swap\") {\n if (e === void 0)\n throw new g(\"cancelAllOrders() requires a symbol argument\").exchange(this.id);\n n = await this.privatePostContractPrivateCancelOrders(this.extend(i, t));\n }\n return n;\n }\n async fetchOrders(e = void 0, t = void 0, i = void 0, s = {}) {\n i && (s.limit = i), t && (s.startTime = t), e && (s.symbol = e);\n const n = await this.privatePostSpotV4QueryHistoryOrders(s), r = await this.privatePostSpotV4QueryOpenOrders(s), a = this.safeValue(n, \"data\", []), o = this.safeValue(r, \"data\", []);\n return this.parseOrders([...a, ...o], void 0, t, i);\n }\n async fetchOrdersByStatus(e, t = void 0, i = void 0, s = void 0, n = {}) {\n if (t === void 0)\n throw new g(\"fetchOrdersByStatus() requires a symbol argument\").exchange(this.id);\n await this.loadMarkets();\n const r = this.market(t);\n if (!r.spot)\n throw new ge(r.type).addMessage(\"only spot orders are accepted\").exchange(this.id);\n const a = {\n symbol: r.id,\n offset: 1,\n N: 100\n // max limit is 100\n };\n e === \"open\" ? a.status = 9 : e === \"closed\" ? a.status = 6 : e === \"canceled\" ? a.status = 8 : a.status = e;\n const o = await this.privateGetSpotV3Orders(this.extend(a, n)), c = this.safeValue(o, \"data\", {}), u = this.safeValue(c, \"orders\", []);\n return this.parseOrders(u, r, i, s);\n }\n async fetchOpenOrders(e = void 0, t = void 0, i = void 0, s = {}) {\n await this.loadMarkets();\n let n;\n const r = {};\n e !== void 0 && (n = this.market(e), r.symbol = n.id), i !== void 0 && (r.limit = i);\n let a, o;\n if ([a, s] = this.handleMarketTypeAndParams(\"fetchOpenOrders\", n, s), a === \"spot\") {\n let u;\n [u, s] = this.handleMarginModeAndParams(\"fetchOpenOrders\", s), u === \"isolated\" && (r.orderMode = \"iso_margin\"), t !== void 0 && (r.startTime = t);\n const f = this.safeInteger2(s, \"until\", \"endTime\");\n f !== void 0 && (s = this.omit(s, [\"endTime\"]), r.endTime = f), o = await this.privatePostSpotV4QueryOpenOrders(this.extend(r, s));\n } else if (a === \"swap\") {\n const u = this.safeValue2(s, \"stop\", \"trigger\");\n if (s = this.omit(s, [\"stop\", \"trigger\"]), u)\n o = await this.privateGetContractPrivateCurrentPlanOrder(this.extend(r, s));\n else {\n const f = this.safeBool(s, \"trailing\", !1);\n let h = this.safeString(s, \"orderType\");\n s = this.omit(s, [\"orderType\", \"trailing\"]), f && (h = \"trailing\"), h !== void 0 && (r.type = h), o = await this.privateGetContractPrivateGetOpenOrders(this.extend(r, s));\n }\n } else\n throw new ge(a).addMessage(\"only spot and swap orders are accepted\").exchange(this.id);\n const c = this.safeValue(o, \"data\", []);\n return this.parseOrders(c, n, t, i);\n }\n async fetchClosedOrders(e = void 0, t = void 0, i = void 0, s = {}) {\n await this.loadMarkets();\n let n;\n const r = {};\n e !== void 0 && (n = this.market(e), r.symbol = n.id);\n let a;\n if ([a, s] = this.handleMarketTypeAndParams(\"fetchClosedOrders\", n, s), a !== \"spot\" && e === void 0)\n throw new g(\"fetchClosedOrders() requires a symbol argument\").exchange(this.id);\n let o;\n [o, s] = this.handleMarginModeAndParams(\"fetchClosedOrders\", s), o === \"isolated\" && (r.orderMode = \"iso_margin\");\n const c = a === \"spot\" ? \"startTime\" : \"start_time\";\n t !== void 0 && (r[c] = t);\n const u = a === \"spot\" ? \"endTime\" : \"end_time\", f = this.safeInteger2(s, \"until\", u);\n f !== void 0 && (s = this.omit(s, [\"until\"]), r[u] = f);\n let h;\n a === \"spot\" ? h = await this.privatePostSpotV4QueryHistoryOrders(this.extend(r, s)) : h = await this.privateGetContractPrivateOrderHistory(this.extend(r, s));\n const l = this.safeValue(h, \"data\", []);\n return this.parseOrders(l, n, t, i);\n }\n async fetchCanceledOrders(e = void 0, t = void 0, i = void 0, s = {}) {\n return await this.fetchOrdersByStatus(\"canceled\", e, t, i, s);\n }\n async fetchOrder(e, t = void 0, i = {}) {\n await this.loadMarkets();\n const s = {};\n let n, r, a;\n if (t !== void 0 && (r = this.market(t)), [n, i] = this.handleMarketTypeAndParams(\"fetchOrder\", r, i), n === \"spot\") {\n const c = this.safeString(i, \"clientOrderId\");\n c || (s.orderId = e), c !== void 0 ? a = await this.privatePostSpotV4QueryClientOrder(this.extend(s, i)) : a = await this.privatePostSpotV4QueryOrder(this.extend(s, i));\n } else if (n === \"swap\") {\n if (t === void 0)\n throw new g(\"fetchOrder() requires a symbol argument\").exchange(this.id);\n const c = this.safeBool(i, \"trailing\", !1);\n let u = this.safeString(i, \"orderType\");\n i = this.omit(i, [\"orderType\", \"trailing\"]), c && (u = \"trailing\"), u !== void 0 && (s.type = u), s.symbol = r.id, s.order_id = e, a = await this.privateGetContractPrivateOrder(this.extend(s, i));\n }\n const o = this.safeValue(a, \"data\", {});\n return this.parseOrder(o, r);\n }\n async fetchDepositAddress(e, t = {}) {\n await this.loadMarkets();\n const i = this.safeString(t, \"network\"), s = this.safeValue(this.options.currencyIdsByCodeAndNetwork[e], i);\n if (s === void 0)\n throw new O().addMessage(\"fetchDepositAddress() does not support \" + e + \" with network \" + i + \", specify a supported network in params.network\").exchange(this.id);\n const n = {\n currency: s\n }, r = await this.privateGetAccountV1DepositAddress(this.extend(n, t)), a = this.safeValue(r, \"data\", {}), o = this.safeString(a, \"address\"), c = this.safeString(a, \"address_memo\"), u = this.safeString(a, \"chain\");\n let f;\n if (u !== void 0) {\n const h = u.split(\"-\"), l = this.safeString(h, 1);\n f = this.safeNetwork(l);\n }\n return this.checkAddress(o), {\n currency: e,\n address: o,\n tag: c,\n network: f,\n info: r\n };\n }\n safeNetwork(e) {\n return e;\n }\n async withdraw(e, t, i, s = void 0, n = {}) {\n [s, n] = this.handleWithdrawTagAndParams(s, n), this.checkAddress(i), await this.loadMarkets();\n const r = this.safeString(n, \"network\"), a = this.safeValue(this.options.currencyIdsByCodeAndNetwork[e], r);\n if (a === void 0)\n throw new O().addMessage(\"fetchDepositAddress() does not support \" + e + \" with network \" + r + \", specify a supported network in params.network\").exchange(this.id);\n const o = this.currencyToPrecision(e, t, r), c = {\n currency: a,\n amount: o,\n destination: \"To Digital Address\",\n address: i\n };\n s !== void 0 && (c.address_memo = s);\n const u = await this.privatePostAccountV1WithdrawApply(this.extend(c, n)), f = this.safeValue(u, \"data\"), h = this.safeCurrencyByCode(e), l = this.parseTransaction(f, h);\n return this.extend(l, {\n code: e,\n address: i,\n tag: s\n });\n }\n async fetchTransactionsByType(e, t = void 0, i = void 0, s = void 0, n = {}) {\n await this.loadMarkets(), s === void 0 && (s = 50);\n const r = {\n operation_type: e,\n offset: 1,\n N: s\n };\n if (t !== void 0) {\n const f = t;\n r.currency = f;\n }\n const a = await this.privateGetAccountV2DepositWithdrawHistory(this.extend(r, n)), o = this.safeValue(a, \"data\", {}), c = this.safeValue(o, \"records\", []), u = this.safeCurrencyByCode(t);\n return this.parseTransactions(c, u, i, s);\n }\n async fetchDeposit(e, t = void 0, i = {}) {\n await this.loadMarkets();\n const s = {\n id: e\n }, n = await this.privateGetAccountV1DepositWithdrawDetail(this.extend(s, i)), r = this.safeValue(n, \"data\", {}), a = this.safeValue(r, \"record\", {});\n return this.parseTransaction(a);\n }\n async fetchDeposits(e = void 0, t = void 0, i = void 0, s = {}) {\n return await this.fetchTransactionsByType(\"deposit\", e, t, i, s);\n }\n async fetchWithdrawal(e, t = void 0, i = {}) {\n await this.loadMarkets();\n const s = {\n id: e\n }, n = await this.privateGetAccountV1DepositWithdrawDetail(this.extend(s, i)), r = this.safeValue(n, \"data\", {}), a = this.safeValue(r, \"record\", {});\n return this.parseTransaction(a);\n }\n async fetchWithdrawals(e = void 0, t = void 0, i = void 0, s = {}) {\n return await this.fetchTransactionsByType(\"withdraw\", e, t, i, s);\n }\n parseTransactionStatus(e) {\n const t = {\n 0: \"pending\",\n 1: \"pending\",\n 2: \"pending\",\n 3: \"ok\",\n 4: \"canceled\",\n 5: \"failed\"\n // Fail\n };\n return this.safeString(t, e, e);\n }\n parseTransaction(e, t = void 0) {\n let i;\n const s = this.safeString(e, \"withdraw_id\"), n = this.safeString(e, \"deposit_id\");\n let r;\n s !== void 0 && s !== \"\" ? (r = \"withdraw\", i = s) : n !== void 0 && n !== \"\" && (r = \"deposit\", i = n);\n const a = this.safeNumber(e, \"arrival_amount\"), o = this.safeInteger(e, \"apply_time\"), c = this.safeString(e, \"currency\");\n let u = this.safeCurrencyCode(c);\n const f = this.parseTransactionStatus(this.safeString(e, \"status\")), h = this.safeNumber(e, \"fee\");\n let l;\n h !== void 0 && (l = {\n cost: h,\n currency: u\n });\n const p = this.safeString(e, \"tx_id\"), m = this.safeString(e, \"address\"), y = this.safeString(e, \"address_memo\");\n let w;\n const S = \"-\";\n if (u.includes(S)) {\n const b = u.split(S);\n w = this.safeNetwork(b[1]), u = u.replace(\"-\" + w.toUpperCase(), \"\"), l.currency.includes(S) && (l.currency = l.currency.split(S)[0]);\n }\n return {\n info: e,\n id: i,\n currency: u,\n amount: a,\n network: w,\n address: m,\n addressFrom: void 0,\n addressTo: void 0,\n tag: y,\n tagFrom: void 0,\n tagTo: void 0,\n status: f,\n type: r,\n updated: void 0,\n txid: p,\n internal: void 0,\n comment: void 0,\n timestamp: o !== 0 ? o : void 0,\n datetime: o !== 0 ? this.iso8601(o) : void 0,\n fee: l\n };\n }\n async transfer(e, t, i, s, n = {}) {\n await this.loadMarkets();\n const r = this.currencyToPrecision(e, t), o = {\n amount: r,\n currency: e\n }, c = this.convertTypeToAccount(i), u = this.convertTypeToAccount(s);\n if (i === \"spot\")\n s === \"margin\" ? (o.side = \"in\", o.symbol = u) : s === \"swap\" && (o.type = \"spot_to_contract\");\n else if (s === \"spot\")\n i === \"margin\" ? (o.side = \"out\", o.symbol = c) : i === \"swap\" && (o.type = \"contract_to_spot\");\n else\n throw new g(\"transfer() requires either fromAccount or toAccount to be spot\").exchange(this.id);\n let f;\n i === \"margin\" || s === \"margin\" ? f = await this.privatePostSpotV1MarginIsolatedTransfer(this.extend(o, n)) : (i === \"swap\" || s === \"swap\") && (f = await this.privatePostAccountV1TransferContract(this.extend(o, n)));\n const h = this.safeCurrencyByCode(e), l = this.safeValue(f, \"data\", {});\n return this.extend(this.parseTransfer(l, h), {\n amount: this.parseNumber(r),\n fromAccount: i,\n toAccount: s,\n status: this.parseTransferStatus(this.safeString2(f, \"code\", \"message\"))\n });\n }\n parseTransferStatus(e) {\n const t = {\n 1e3: \"ok\",\n OK: \"ok\",\n FINISHED: \"ok\"\n };\n return this.safeString(t, e, e);\n }\n parseTransferToAccount(e) {\n const t = {\n contract_to_spot: \"spot\",\n spot_to_contract: \"swap\"\n };\n return this.safeString(t, e, e);\n }\n parseTransferFromAccount(e) {\n const t = {\n contract_to_spot: \"swap\",\n spot_to_contract: \"spot\"\n };\n return this.safeString(t, e, e);\n }\n parseTransfer(e, t = void 0) {\n const i = this.safeString(e, \"currency\"), s = this.safeInteger(e, \"timestamp\");\n return {\n id: this.safeString(e, \"transfer_id\"),\n timestamp: s,\n datetime: this.iso8601(s),\n currency: this.safeCurrencyCode(i),\n amount: this.safeNumber(e, \"amount\"),\n fromAccount: this.parseTransferFromAccount(this.safeString(e, \"type\")),\n toAccount: this.parseTransferToAccount(this.safeString(e, \"type\")),\n status: this.parseTransferStatus(this.safeString(e, \"state\"))\n };\n }\n async fetchTransfers(e = void 0, t = void 0, i = void 0, s = {}) {\n await this.loadMarkets(), i === void 0 && (i = 10);\n const n = {\n page: this.safeInteger(s, \"page\", 1),\n limit: i\n // default is 10, max is 100\n };\n let r;\n e !== void 0 && (r = this.currency(e), n.currency = r.id), t !== void 0 && (n.time_start = t), i !== void 0 && (n.limit = i);\n const a = this.safeInteger2(s, \"until\", \"till\"), o = this.safeInteger(s, \"time_end\", a);\n s = this.omit(s, [\"till\", \"until\"]), o !== void 0 && (n.time_end = o);\n const c = await this.privatePostAccountV1TransferContractList(this.extend(n, s)), u = this.safeValue(c, \"data\", {}), f = this.safeValue(u, \"records\", []);\n return this.parseTransfers(f, r, t, i);\n }\n async fetchPosition(e, t = {}) {\n await this.loadMarkets();\n const i = this.market(e), s = {\n symbol: i.id\n }, n = await this.privateGetContractPrivatePosition(this.extend(s, t)), r = this.safeValue(n, \"data\", []), a = this.safeValue(r, 0, {});\n return this.parsePosition(a, i);\n }\n async fetchPositions(e = void 0, t = {}) {\n await this.loadMarkets();\n let i, s;\n if (e !== void 0) {\n s = e.length;\n const c = this.safeString(e, 0);\n i = this.market(c);\n }\n const n = {};\n s === 1 && (n.symbol = i.id);\n const r = await this.privateGetContractPrivatePosition(this.extend(n, t)), a = this.safeValue(r, \"data\", []), o = [];\n for (let c = 0; c < a.length; c++)\n o.push(this.parsePosition(a[c]));\n return e = this.marketSymbols(e), this.filterByArrayPositions(o, \"symbol\", e, !1);\n }\n async loadMarketsHelper(e, t) {\n await super.loadMarketsHelper(e, t);\n const i = await this.cache.get(cd(this.id), { clone: !1 });\n this.options.currencyIdsByCodeAndNetwork = i == null ? void 0 : i.data;\n }\n parsePosition(e, t = void 0) {\n const i = this.safeString(e, \"symbol\");\n t = this.safeMarket(i, t);\n const s = t.symbol, n = this.safeInteger(e, \"timestamp\"), r = this.safeInteger(e, \"position_type\"), a = this.safeString(e, \"maintenance_margin\"), o = this.safeString(e, \"current_value\"), c = this.safeString(e, \"position_cross\"), u = P.stringDiv(a, o), f = P.stringDiv(a, c);\n return this.safePosition({\n info: e,\n id: void 0,\n symbol: s,\n timestamp: n,\n datetime: this.iso8601(n),\n lastUpdateTimestamp: void 0,\n hedged: void 0,\n side: r === 1 ? \"long\" : \"short\",\n contracts: this.safeNumber(e, \"current_amount\"),\n contractSize: this.safeNumber(t, \"contractSize\"),\n entryPrice: this.safeNumber(e, \"entry_price\"),\n markPrice: this.safeNumber(e, \"mark_price\"),\n lastPrice: void 0,\n notional: this.parseNumber(o),\n leverage: this.safeNumber(e, \"leverage\"),\n collateral: this.parseNumber(c),\n initialMargin: void 0,\n initialMarginPercentage: void 0,\n maintenanceMargin: this.parseNumber(a),\n maintenanceMarginPercentage: this.parseNumber(u),\n unrealizedPnl: this.safeNumber(e, \"unrealized_value\"),\n realizedPnl: this.safeNumber(e, \"realized_value\"),\n liquidationPrice: void 0,\n marginMode: void 0,\n percentage: void 0,\n marginRatio: this.parseNumber(f),\n stopLossPrice: void 0,\n takeProfitPrice: void 0\n });\n }\n nonce() {\n return this.milliseconds() - this.options.timeDifference;\n }\n async sign(e, t = \"public\", i = \"GET\", s = {}, n = void 0, r = void 0) {\n const a = [\"contract/private/assets-detail\"];\n let c = this.implodeHostname(a.includes(e) ? this.urls.api.restV2 : this.urls.api.rest) + \"/\" + this.implodeParams(e, s);\n const u = this.omit(s, this.extractParams(e));\n let f = \"\";\n const h = i === \"GET\" || i === \"DELETE\";\n if (h && Object.keys(u).length && (f = this.urlencode(u), c += \"?\" + f), t === \"private\") {\n this.checkRequiredCredentials();\n const l = this.nonce().toString(), p = this.safeString(this.options, \"brokerId\", \"CCXTxBitmart000\");\n n = {\n \"X-BM-KEY\": this.apiKey,\n \"X-BM-TIMESTAMP\": l,\n \"X-BM-BROKER-ID\": p,\n \"Content-Type\": \"application/json\"\n }, h || (r = this.json(u), f = r);\n const m = l + \"#\" + this.uid + \"#\" + f;\n let y;\n this.externalSigner ? y = await this.externalSigner.sign({\n payload: this.encode(m),\n publicApiKey: this.apiKey,\n exchangeId: this.id\n }) : y = this.hmac(this.encode(m), this.encode(this.secret), Re), n[\"X-BM-SIGN\"] = y;\n }\n return { url: c, method: i, body: r, headers: n };\n }\n handleErrors(e, t, i, s, n, r, a, o, c) {\n if (a === void 0)\n return;\n const u = this.safeStringLower(a, \"message\"), f = u !== void 0 && u !== \"ok\" && u !== \"success\", h = this.safeString(a, \"code\");\n if (h !== void 0 && h !== \"1000\" || f) {\n const p = h + \": \" + u;\n throw this.throwExactlyMatchedException(this.exceptions.exact, h, p), this.throwBroadlyMatchedException(this.exceptions.broad, h, p), this.throwExactlyMatchedException(this.exceptions.exact, u, p), this.throwBroadlyMatchedException(this.exceptions.broad, u, p), new O().addMessage(p).exchange(this.id);\n }\n }\n}\nlet Wy = class extends gt {\n};\nclass Yy extends Wy {\n describe() {\n return this.deepExtend(super.describe(), {\n id: \"bitstamp\",\n name: \"Bitstamp\",\n countries: [\"GB\"],\n // 8000 requests per 10 minutes = 8000 / 600 = 13.33333333 requests per second => 1000ms / 13.33333333 = 75ms between requests on average\n rateLimit: 75,\n version: \"v2\",\n userAgent: this.userAgents.chrome,\n pro: !0,\n has: {\n CORS: !0,\n spot: !0,\n margin: !1,\n swap: !1,\n future: !1,\n option: !1,\n cancelAllOrders: !0,\n cancelOrder: !0,\n createOrder: !0,\n fetchBalance: !0,\n fetchCurrencies: !0,\n fetchDepositAddress: !0,\n fetchDepositsWithdrawals: !0,\n fetchDepositWithdrawFee: \"emulated\",\n fetchDepositWithdrawFees: !0,\n fetchLedger: !0,\n fetchMarkets: !0,\n fetchMyTrades: !0,\n fetchOHLCV: !0,\n fetchOpenOrders: !0,\n fetchOrder: !0,\n fetchOrderBook: !0,\n fetchPosition: !1,\n fetchPositions: !1,\n fetchPositionsRisk: !1,\n fetchTicker: !0,\n fetchTickers: !0,\n fetchTrades: !0,\n fetchTradingFee: !0,\n fetchTradingFees: !0,\n fetchTransactionFees: !0,\n fetchTransactions: \"emulated\",\n fetchWithdrawals: !0,\n withdraw: !0\n },\n urls: {\n logo: \"https://user-images.githubusercontent.com/1294454/27786377-8c8ab57e-5fe9-11e7-8ea4-2b05b6bcceec.jpg\",\n api: {\n public: \"https://www.bitstamp.net/api\",\n private: \"https://www.bitstamp.net/api\"\n },\n www: \"https://www.bitstamp.net\",\n doc: \"https://www.bitstamp.net/api\"\n },\n timeframes: {\n \"1m\": \"60\",\n \"3m\": \"180\",\n \"5m\": \"300\",\n \"15m\": \"900\",\n \"30m\": \"1800\",\n \"1h\": \"3600\",\n \"2h\": \"7200\",\n \"4h\": \"14400\",\n \"6h\": \"21600\",\n \"12h\": \"43200\",\n \"1d\": \"86400\",\n \"1w\": \"259200\"\n },\n requiredCredentials: {\n apiKey: !0,\n secret: !0\n },\n api: {\n public: {\n get: {\n \"ohlc/{pair}/\": 1,\n \"order_book/{pair}/\": 1,\n \"ticker/\": 1,\n \"ticker_hour/{pair}/\": 1,\n \"ticker/{pair}/\": 1,\n \"transactions/{pair}/\": 1,\n \"trading-pairs-info/\": 1,\n \"currencies/\": 1,\n \"eur_usd/\": 1,\n \"travel_rule/vasps/\": 1\n }\n },\n private: {\n get: {\n \"travel_rule/contacts/\": 1,\n \"contacts/{contact_uuid}/\": 1,\n \"earn/subscriptions/\": 1,\n \"earn/transactions/\": 1\n },\n post: {\n \"account_balances/\": 1,\n \"account_balances/{currency}/\": 1,\n \"balance/\": 1,\n \"balance/{pair}/\": 1,\n \"bch_withdrawal/\": 1,\n \"bch_address/\": 1,\n \"user_transactions/\": 1,\n \"user_transactions/{pair}/\": 1,\n \"crypto-transactions/\": 1,\n \"open_orders/all/\": 1,\n \"open_orders/{pair}/\": 1,\n \"order_status/\": 1,\n \"cancel_order/\": 1,\n \"cancel_all_orders/\": 1,\n \"cancel_all_orders/{pair}/\": 1,\n \"buy/{pair}/\": 1,\n \"buy/market/{pair}/\": 1,\n \"buy/instant/{pair}/\": 1,\n \"sell/{pair}/\": 1,\n \"sell/market/{pair}/\": 1,\n \"sell/instant/{pair}/\": 1,\n \"transfer-to-main/\": 1,\n \"transfer-from-main/\": 1,\n \"my_trading_pairs/\": 1,\n \"fees/trading/\": 1,\n \"fees/trading/{pair}\": 1,\n \"fees/withdrawal/\": 1,\n \"fees/withdrawal/{currency}/\": 1,\n \"withdrawal-requests/\": 1,\n \"withdrawal/open/\": 1,\n \"withdrawal/status/\": 1,\n \"withdrawal/cancel/\": 1,\n \"liquidation_address/new/\": 1,\n \"liquidation_address/info/\": 1,\n \"btc_unconfirmed/\": 1,\n \"websockets_token/\": 1,\n // individual coins\n \"btc_withdrawal/\": 1,\n \"btc_address/\": 1,\n \"ripple_withdrawal/\": 1,\n \"ripple_address/\": 1,\n \"ltc_withdrawal/\": 1,\n \"ltc_address/\": 1,\n \"eth_withdrawal/\": 1,\n \"eth_address/\": 1,\n \"xrp_withdrawal/\": 1,\n \"xrp_address/\": 1,\n \"xlm_withdrawal/\": 1,\n \"xlm_address/\": 1,\n \"pax_withdrawal/\": 1,\n \"pax_address/\": 1,\n \"link_withdrawal/\": 1,\n \"link_address/\": 1,\n \"usdc_withdrawal/\": 1,\n \"usdc_address/\": 1,\n \"omg_withdrawal/\": 1,\n \"omg_address/\": 1,\n \"dai_withdrawal/\": 1,\n \"dai_address/\": 1,\n \"knc_withdrawal/\": 1,\n \"knc_address/\": 1,\n \"mkr_withdrawal/\": 1,\n \"mkr_address/\": 1,\n \"zrx_withdrawal/\": 1,\n \"zrx_address/\": 1,\n \"gusd_withdrawal/\": 1,\n \"gusd_address/\": 1,\n \"aave_withdrawal/\": 1,\n \"aave_address/\": 1,\n \"bat_withdrawal/\": 1,\n \"bat_address/\": 1,\n \"uma_withdrawal/\": 1,\n \"uma_address/\": 1,\n \"snx_withdrawal/\": 1,\n \"snx_address/\": 1,\n \"uni_withdrawal/\": 1,\n \"uni_address/\": 1,\n \"yfi_withdrawal/\": 1,\n yfi_address: 1,\n \"audio_withdrawal/\": 1,\n \"audio_address/\": 1,\n \"crv_withdrawal/\": 1,\n \"crv_address/\": 1,\n \"algo_withdrawal/\": 1,\n \"algo_address/\": 1,\n \"comp_withdrawal/\": 1,\n \"comp_address/\": 1,\n grt_withdrawal: 1,\n \"grt_address/\": 1,\n \"usdt_withdrawal/\": 1,\n \"usdt_address/\": 1,\n \"eurt_withdrawal/\": 1,\n \"eurt_address/\": 1,\n \"matic_withdrawal/\": 1,\n \"matic_address/\": 1,\n \"sushi_withdrawal/\": 1,\n \"sushi_address/\": 1,\n \"chz_withdrawal/\": 1,\n \"chz_address/\": 1,\n \"enj_withdrawal/\": 1,\n \"enj_address/\": 1,\n \"alpha_withdrawal/\": 1,\n \"alpha_address/\": 1,\n \"ftt_withdrawal/\": 1,\n \"ftt_address/\": 1,\n \"storj_withdrawal/\": 1,\n \"storj_address/\": 1,\n \"axs_withdrawal/\": 1,\n \"axs_address/\": 1,\n \"sand_withdrawal/\": 1,\n \"sand_address/\": 1,\n \"hbar_withdrawal/\": 1,\n \"hbar_address/\": 1,\n \"rgt_withdrawal/\": 1,\n \"rgt_address/\": 1,\n \"fet_withdrawal/\": 1,\n \"fet_address/\": 1,\n \"skl_withdrawal/\": 1,\n \"skl_address/\": 1,\n \"cel_withdrawal/\": 1,\n \"cel_address/\": 1,\n \"sxp_withdrawal/\": 1,\n \"sxp_address/\": 1,\n \"ada_withdrawal/\": 1,\n \"ada_address/\": 1,\n \"slp_withdrawal/\": 1,\n \"slp_address/\": 1,\n \"ftm_withdrawal/\": 1,\n \"ftm_address/\": 1,\n \"perp_withdrawal/\": 1,\n \"perp_address/\": 1,\n \"dydx_withdrawal/\": 1,\n \"dydx_address/\": 1,\n \"gala_withdrawal/\": 1,\n \"gala_address/\": 1,\n \"shib_withdrawal/\": 1,\n \"shib_address/\": 1,\n \"amp_withdrawal/\": 1,\n \"amp_address/\": 1,\n \"sgb_withdrawal/\": 1,\n \"sgb_address/\": 1,\n \"avax_withdrawal/\": 1,\n \"avax_address/\": 1,\n \"wbtc_withdrawal/\": 1,\n \"wbtc_address/\": 1,\n \"ctsi_withdrawal/\": 1,\n \"ctsi_address/\": 1,\n \"cvx_withdrawal/\": 1,\n \"cvx_address/\": 1,\n \"imx_withdrawal/\": 1,\n \"imx_address/\": 1,\n \"nexo_withdrawal/\": 1,\n \"nexo_address/\": 1,\n \"ust_withdrawal/\": 1,\n \"ust_address/\": 1,\n \"ant_withdrawal/\": 1,\n \"ant_address/\": 1,\n \"gods_withdrawal/\": 1,\n \"gods_address/\": 1,\n \"rad_withdrawal/\": 1,\n \"rad_address/\": 1,\n \"band_withdrawal/\": 1,\n \"band_address/\": 1,\n \"inj_withdrawal/\": 1,\n \"inj_address/\": 1,\n \"rly_withdrawal/\": 1,\n \"rly_address/\": 1,\n \"rndr_withdrawal/\": 1,\n \"rndr_address/\": 1,\n \"vega_withdrawal/\": 1,\n \"vega_address/\": 1,\n \"1inch_withdrawal/\": 1,\n \"1inch_address/\": 1,\n \"ens_withdrawal/\": 1,\n \"ens_address/\": 1,\n \"mana_withdrawal/\": 1,\n \"mana_address/\": 1,\n \"lrc_withdrawal/\": 1,\n \"lrc_address/\": 1,\n \"ape_withdrawal/\": 1,\n \"ape_address/\": 1,\n \"mpl_withdrawal/\": 1,\n \"mpl_address/\": 1,\n \"euroc_withdrawal/\": 1,\n \"euroc_address/\": 1,\n \"sol_withdrawal/\": 1,\n \"sol_address/\": 1,\n \"dot_withdrawal/\": 1,\n \"dot_address/\": 1,\n \"near_withdrawal/\": 1,\n \"near_address/\": 1,\n \"doge_withdrawal/\": 1,\n \"doge_address/\": 1,\n \"flr_withdrawal/\": 1,\n \"flr_address/\": 1,\n \"dgld_withdrawal/\": 1,\n \"dgld_address/\": 1,\n \"ldo_withdrawal/\": 1,\n \"ldo_address/\": 1,\n \"travel_rule/contacts/\": 1,\n \"earn/subscribe/\": 1,\n \"earn/subscriptions/setting/\": 1,\n \"earn/unsubscribe\": 1,\n \"wecan_withdrawal/\": 1,\n \"wecan_address/\": 1,\n \"trac_withdrawal/\": 1,\n \"trac_address/\": 1,\n \"eurcv_withdrawal/\": 1,\n \"eurcv_address/\": 1,\n \"pyusd_withdrawal/\": 1,\n \"pyusd_address/\": 1\n }\n }\n },\n fees: {\n trading: {\n tierBased: !0,\n percentage: !0,\n taker: this.parseNumber(\"0.005\"),\n maker: this.parseNumber(\"0.005\"),\n tiers: {\n taker: [\n [this.parseNumber(\"0\"), this.parseNumber(\"0.005\")],\n [this.parseNumber(\"20000\"), this.parseNumber(\"0.0025\")],\n [this.parseNumber(\"100000\"), this.parseNumber(\"0.0024\")],\n [this.parseNumber(\"200000\"), this.parseNumber(\"0.0022\")],\n [this.parseNumber(\"400000\"), this.parseNumber(\"0.0020\")],\n [this.parseNumber(\"600000\"), this.parseNumber(\"0.0015\")],\n [this.parseNumber(\"1000000\"), this.parseNumber(\"0.0014\")],\n [this.parseNumber(\"2000000\"), this.parseNumber(\"0.0013\")],\n [this.parseNumber(\"4000000\"), this.parseNumber(\"0.0012\")],\n [this.parseNumber(\"20000000\"), this.parseNumber(\"0.0011\")],\n [this.parseNumber(\"50000000\"), this.parseNumber(\"0.0010\")],\n [this.parseNumber(\"100000000\"), this.parseNumber(\"0.0007\")],\n [this.parseNumber(\"500000000\"), this.parseNumber(\"0.0005\")],\n [this.parseNumber(\"2000000000\"), this.parseNumber(\"0.0003\")],\n [this.parseNumber(\"6000000000\"), this.parseNumber(\"0.0001\")],\n [this.parseNumber(\"20000000000\"), this.parseNumber(\"0.00005\")],\n [this.parseNumber(\"20000000001\"), this.parseNumber(\"0\")]\n ],\n maker: [\n [this.parseNumber(\"0\"), this.parseNumber(\"0.005\")],\n [this.parseNumber(\"20000\"), this.parseNumber(\"0.0025\")],\n [this.parseNumber(\"100000\"), this.parseNumber(\"0.0024\")],\n [this.parseNumber(\"200000\"), this.parseNumber(\"0.0022\")],\n [this.parseNumber(\"400000\"), this.parseNumber(\"0.0020\")],\n [this.parseNumber(\"600000\"), this.parseNumber(\"0.0015\")],\n [this.parseNumber(\"1000000\"), this.parseNumber(\"0.0014\")],\n [this.parseNumber(\"2000000\"), this.parseNumber(\"0.0013\")],\n [this.parseNumber(\"4000000\"), this.parseNumber(\"0.0012\")],\n [this.parseNumber(\"20000000\"), this.parseNumber(\"0.0011\")],\n [this.parseNumber(\"50000000\"), this.parseNumber(\"0.0010\")],\n [this.parseNumber(\"100000000\"), this.parseNumber(\"0.0007\")],\n [this.parseNumber(\"500000000\"), this.parseNumber(\"0.0005\")],\n [this.parseNumber(\"2000000000\"), this.parseNumber(\"0.0003\")],\n [this.parseNumber(\"6000000000\"), this.parseNumber(\"0.0001\")],\n [this.parseNumber(\"20000000000\"), this.parseNumber(\"0.00005\")],\n [this.parseNumber(\"20000000001\"), this.parseNumber(\"0\")]\n ]\n }\n },\n funding: {\n tierBased: !1,\n percentage: !1,\n withdraw: {},\n deposit: {\n BTC: 0,\n BCH: 0,\n LTC: 0,\n ETH: 0,\n XRP: 0,\n XLM: 0,\n PAX: 0,\n USD: 7.5,\n EUR: 0\n }\n }\n },\n precisionMode: ct,\n exceptions: {\n exact: {\n \"No permission found\": ee,\n \"API key not found\": Z,\n \"IP address not allowed\": ee,\n \"Invalid nonce\": ze,\n \"Invalid signature\": Z,\n \"Authentication failed\": Z,\n \"Missing key, signature and nonce parameters\": Z,\n \"Wrong API key format\": Z,\n \"Your account is frozen\": ee,\n \"Please update your profile with your FATCA information, before using API.\": ee,\n \"Order not found.\": Se,\n \"Price is more than 20% below market price.\": g,\n \"Bitstamp.net is under scheduled maintenance. We'll be back soon.\": dt,\n \"Order could not be placed.\": Te,\n \"Invalid offset.\": g\n },\n broad: {\n \"Minimum order size is\": g,\n \"Check your account balance for details.\": re,\n \"Ensure this value has at least\": et,\n \"Ensure that there are no more than\": g\n // {\"status\": \"error\", \"reason\": {\"amount\": [\"Ensure that there are no more than 0 decimal places.\"], \"__all__\": [\"\"]}}\n }\n }\n });\n }\n async fetchStatus(e = {}) {\n const t = await this.publicGetEurUsd(e), i = this.safeNumber(t, \"buy\"), s = this.safeNumber(t, \"sell\");\n return {\n status: i !== void 0 && s !== void 0 ? \"ok\" : \"maintenance\",\n updated: void 0,\n eta: void 0,\n url: void 0,\n info: t\n };\n }\n async fetchMarkets(e = {}) {\n const t = await this.fetchMarketsFromCache(e), i = [];\n for (let s = 0; s < t.length; s++) {\n const n = t[s], r = this.safeString(n, \"name\");\n let [a, o] = r.split(\"/\");\n const c = a.toLowerCase(), u = o.toLowerCase();\n a = this.safeCurrencyCode(a), o = this.safeCurrencyCode(o);\n const h = this.safeString(n, \"minimum_order\").split(\" \"), l = this.safeString(n, \"trading\");\n i.push({\n id: this.safeString(n, \"url_symbol\"),\n marketId: c + \"_\" + u,\n symbol: a + \"/\" + o,\n base: a,\n quote: o,\n settle: void 0,\n baseId: c,\n quoteId: u,\n settleId: void 0,\n type: \"spot\",\n spot: !0,\n margin: !1,\n future: !1,\n swap: !1,\n option: !1,\n active: l === \"Enabled\",\n contract: !1,\n linear: void 0,\n inverse: void 0,\n contractSize: void 0,\n expiry: void 0,\n expiryDatetime: void 0,\n strike: void 0,\n optionType: void 0,\n precision: {\n amount: this.parseNumber(this.parsePrecision(this.safeString(n, \"base_decimals\"))),\n price: this.parseNumber(this.parsePrecision(this.safeString(n, \"counter_decimals\")))\n },\n limits: {\n leverage: {\n min: void 0,\n max: void 0\n },\n amount: {\n min: void 0,\n max: void 0\n },\n price: {\n min: void 0,\n max: void 0\n },\n cost: {\n min: this.safeNumber(h, 0),\n max: void 0\n }\n },\n created: void 0,\n info: n\n });\n }\n return i;\n }\n constructCurrencyObject(e, t, i, s, n, r, a, o) {\n let c = \"crypto\";\n const u = this.describe();\n this.isFiat(t) && (c = \"fiat\");\n const f = this.parseNumber(this.parsePrecision(this.numberToString(s)));\n return {\n id: e,\n code: t,\n info: r,\n type: c,\n name: i,\n active: a && o,\n deposit: a,\n withdraw: o,\n fee: this.safeNumber(u.fees.funding.withdraw, t),\n precision: f,\n limits: {\n amount: {\n min: f,\n max: void 0\n },\n price: {\n min: f,\n max: void 0\n },\n cost: {\n min: n,\n max: void 0\n },\n withdraw: {\n min: void 0,\n max: void 0\n }\n },\n networks: {}\n };\n }\n async fetchMarketsFromCache(e = {}) {\n const t = this.safeValue(this.options, \"fetchMarkets\", {}), i = this.safeInteger(t, \"timestamp\"), s = this.safeInteger(t, \"expires\", 1e3), n = this.milliseconds();\n if (i === void 0 || n - i > s) {\n const r = await this.publicGetTradingPairsInfo(e);\n this.options.fetchMarkets = this.extend(t, {\n response: r,\n timestamp: n\n });\n }\n return this.safeValue(this.options.fetchMarkets, \"response\");\n }\n async fetchCurrencies(e = {}) {\n const t = this.fetchMarketsFromCache(e), i = this.publicGetCurrencies(), s = await Promise.all([t, i]), n = s[0], r = s[1], a = this.indexBy(r, \"currency\"), o = {};\n for (let c = 0; c < n.length; c++) {\n const u = n[c], f = this.safeString(u, \"name\");\n let [h, l] = f.split(\"/\");\n const p = h.toLowerCase(), m = l.toLowerCase();\n h = this.safeCurrencyCode(h), l = this.safeCurrencyCode(l);\n const y = this.safeString(u, \"description\"), [w, S] = y.split(\" / \"), x = this.safeString(u, \"minimum_order\").split(\" \")[0];\n if (!(h in o)) {\n const v = this.safeInteger(u, \"base_decimals\"), _ = this.safeValue(a, h, {}), V = this.safeString(_, \"deposit\") === \"Enabled\", j = this.safeString(_, \"withdrawal\") === \"Enabled\";\n o[h] = this.constructCurrencyObject(p, h, w, v, void 0, u, V, j);\n }\n if (!(l in o)) {\n const v = this.safeInteger(u, \"counter_decimals\"), _ = this.safeValue(a, h, {}), V = this.safeString(_, \"deposit\") === \"Enabled\", j = this.safeString(_, \"withdrawal\") === \"Enabled\";\n o[l] = this.constructCurrencyObject(m, l, S, v, this.parseNumber(x), u, V, j);\n }\n }\n return o;\n }\n async fetchOrderBook(e, t = void 0, i = {}) {\n await this.loadMarkets();\n const s = this.market(e), n = {\n pair: s.id\n }, r = await this.publicGetOrderBookPair(this.extend(n, i)), a = this.safeInteger(r, \"microtimestamp\"), o = this.parseToInt(a / 1e3), c = this.parseOrderBook(r, s.symbol, o);\n return c.nonce = a, c;\n }\n parseTicker(e, t = void 0) {\n const i = this.safeString(e, \"pair\"), s = this.safeSymbol(i, t, void 0), n = this.safeTimestamp(e, \"timestamp\"), r = this.safeString(e, \"vwap\"), a = this.safeString(e, \"volume\"), o = P.stringMul(a, r), c = this.safeString(e, \"last\");\n return this.safeTicker({\n symbol: s,\n timestamp: n,\n datetime: this.iso8601(n),\n high: this.safeString(e, \"high\"),\n low: this.safeString(e, \"low\"),\n bid: this.safeString(e, \"bid\"),\n bidVolume: void 0,\n ask: this.safeString(e, \"ask\"),\n askVolume: void 0,\n vwap: r,\n open: this.safeString(e, \"open\"),\n close: c,\n last: c,\n previousClose: void 0,\n change: void 0,\n percentage: void 0,\n average: void 0,\n baseVolume: a,\n quoteVolume: o,\n info: e\n }, t);\n }\n async fetchTicker(e, t = {}) {\n await this.loadMarkets();\n const i = this.market(e), s = {\n pair: i.id\n }, n = await this.publicGetTickerPair(this.extend(s, t));\n return this.parseTicker(n, i);\n }\n async fetchTickers(e = void 0, t = {}) {\n await this.loadMarkets();\n const i = await this.publicGetTicker(t);\n return this.parseTickers(i, e);\n }\n getCurrencyIdFromTransaction(e) {\n const t = this.safeStringLower(e, \"currency\");\n if (t !== void 0)\n return t;\n e = this.omit(e, [\n \"fee\",\n \"price\",\n \"datetime\",\n \"type\",\n \"status\",\n \"id\"\n ]);\n const i = Object.keys(e);\n for (let s = 0; s < i.length; s++) {\n const n = i[s];\n if (n.indexOf(\"_\") < 0) {\n const r = this.safeInteger(e, n);\n if (r !== void 0 && r !== 0)\n return n;\n }\n }\n }\n getMarketFromTrade(e) {\n e = this.omit(e, [\n \"fee\",\n \"price\",\n \"datetime\",\n \"tid\",\n \"type\",\n \"order_id\",\n \"side\"\n ]);\n const t = Object.keys(e), i = t.length;\n if (i > 2)\n throw new O().addMessage(\"getMarketFromTrade() too many keys: \" + this.json(t) + \" in the trade: \" + this.json(e)).exchange(this.id);\n if (i === 2) {\n let s = t[0] + t[1];\n if (s in this.markets_by_id)\n return this.safeMarket(s);\n if (s = t[1] + t[0], s in this.markets_by_id)\n return this.safeMarket(s);\n }\n }\n parseTrade(e, t = void 0) {\n const i = this.safeString2(e, \"id\", \"tid\");\n let s, n, r = this.safeString(e, \"price\"), a = this.safeString(e, \"amount\");\n const o = this.safeString(e, \"order_id\"), c = void 0;\n let u = this.safeString(e, \"cost\"), f;\n if (t === void 0) {\n const S = Object.keys(e);\n for (let b = 0; b < S.length; b++) {\n const T = S[b];\n T !== \"order_id\" && T.indexOf(\"_\") >= 0 && (f = T, t = this.safeMarket(f, t, \"_\"));\n }\n }\n t === void 0 && (t = this.getMarketFromTrade(e));\n const h = this.safeString(e, \"fee\"), l = t.quote, p = f !== void 0 ? f : t.marketId;\n r = this.safeString(e, p, r), a = this.safeString(e, t.baseId, a), u = this.safeString(e, t.quoteId, u), s = t.symbol;\n const m = this.safeString2(e, \"date\", \"datetime\");\n let y;\n m !== void 0 && (m.indexOf(\" \") >= 0 ? y = this.parse8601(m) : (y = parseInt(m), y = y * 1e3)), \"id\" in e ? a !== void 0 && (P.stringLt(a, \"0\") ? (n = \"sell\", a = P.stringNeg(a)) : n = \"buy\") : (n = this.safeString(e, \"type\"), n === \"1\" ? n = \"sell\" : n === \"0\" ? n = \"buy\" : n = void 0), u !== void 0 && (u = P.stringAbs(u));\n let w;\n return h !== void 0 && (w = {\n cost: h,\n currency: l\n }), this.safeTrade({\n id: i,\n info: e,\n timestamp: y,\n datetime: this.iso8601(y),\n symbol: s,\n order: o,\n type: c,\n side: n,\n takerOrMaker: void 0,\n price: r,\n amount: a,\n cost: u,\n fee: w\n }, t);\n }\n async fetchTrades(e, t = void 0, i = void 0, s = {}) {\n await this.loadMarkets();\n const n = this.market(e), r = {\n pair: n.id,\n time: \"hour\"\n }, a = await this.publicGetTransactionsPair(this.extend(r, s));\n return this.parseTrades(a, n, t, i);\n }\n parseOHLCV(e, t = void 0) {\n return [\n this.safeTimestamp(e, \"timestamp\"),\n this.safeNumber(e, \"open\"),\n this.safeNumber(e, \"high\"),\n this.safeNumber(e, \"low\"),\n this.safeNumber(e, \"close\"),\n this.safeNumber(e, \"volume\")\n ];\n }\n async fetchOHLCV(e, t = \"1m\", i = void 0, s = void 0, n = {}) {\n await this.loadMarkets();\n const r = this.market(e), a = {\n pair: r.id,\n step: this.safeString(this.timeframes, t, t)\n }, o = this.parseTimeframe(t);\n if (s === void 0)\n if (i === void 0)\n a.limit = 1e3;\n else {\n s = 1e3;\n const h = this.parseToInt(i / 1e3);\n a.start = h, a.end = this.sum(h, o * (s - 1)), a.limit = s;\n }\n else {\n if (i !== void 0) {\n const h = this.parseToInt(i / 1e3);\n a.start = h, a.end = this.sum(h, o * (s - 1));\n }\n a.limit = Math.min(s, 1e3);\n }\n const c = await this.publicGetOhlcPair(this.extend(a, n)), u = this.safeValue(c, \"data\", {}), f = this.safeValue(u, \"ohlc\", []);\n return this.parseOHLCVs(f, r, t, i, s);\n }\n parseBalance(e) {\n const t = {\n info: e,\n timestamp: void 0,\n datetime: void 0\n }, i = Object.keys(this.currencies);\n for (let s = 0; s < i.length; s++) {\n const n = i[s], a = this.currency(n).id, o = this.account();\n o.free = this.safeString(e, a + \"_available\"), o.used = this.safeString(e, a + \"_reserved\"), o.total = this.safeString(e, a + \"_balance\"), t[n] = o;\n }\n return this.safeBalance(t);\n }\n parseEarnBalance(e) {\n const t = {};\n return e.forEach((i) => {\n const s = i.currency, n = this.safeCurrencyCode(s), r = this.account();\n r.free = this.safeString(i, \"available_amount\"), r.used = this.safeString(i, \"amount\"), r.total = P.stringAdd(r.free, r.used), t[n] && (r.total = P.stringAdd(t[n].total, r.total), r.used = P.stringAdd(t[n].used, r.used), r.free = P.stringAdd(t[n].free, r.free)), t[n] = r;\n }), this.safeBalance(t);\n }\n async fetchBalance(e = {}) {\n await this.loadMarkets();\n let t;\n return this.safeString(e, \"type\") === \"earn\" ? (t = await this.privateGetEarnSubscriptions(), this.parseEarnBalance(t)) : (t = await this.privatePostBalance(e), this.parseBalance(t));\n }\n async fetchTradingFee(e, t = {}) {\n await this.loadMarkets();\n const i = this.market(e), s = {\n pair: i.id\n }, n = await this.privatePostBalancePair(this.extend(s, t));\n return this.parseTradingFee(n, i);\n }\n parseTradingFee(e, t = void 0) {\n t = this.safeMarket(void 0, t);\n const i = this.safeString(e, t.id + \"_fee\"), s = P.stringDiv(i, \"100\"), n = this.parseNumber(s);\n return {\n info: e,\n symbol: t.symbol,\n maker: n,\n taker: n\n };\n }\n parseTradingFees(e) {\n const t = { info: e }, i = this.symbols;\n for (let s = 0; s < i.length; s++) {\n const n = i[s], r = this.market(n), a = this.parseTradingFee(e, r);\n t[n] = a;\n }\n return t;\n }\n async fetchTradingFees(e = {}) {\n await this.loadMarkets();\n const t = await this.privatePostBalance(e);\n return this.parseTradingFees(t);\n }\n async fetchTransactionFees(e = void 0, t = {}) {\n await this.loadMarkets();\n const i = await this.privatePostBalance(t);\n return this.parseTransactionFees(i);\n }\n parseTransactionFees(e, t = void 0) {\n t === void 0 && (t = Object.keys(this.currencies));\n const i = {};\n let s;\n const n = Object.keys(e);\n for (let r = 0; r < n.length; r++) {\n const a = n[r], o = a.split(\"_\")[0], c = this.safeCurrencyCode(o);\n t !== void 0 && !this.inArray(c, t) || (a.indexOf(\"_available\") >= 0 && (s = o, i[c] = {\n deposit: void 0,\n withdraw: void 0,\n info: {}\n }), o === s && (i[c].info[a] = this.safeNumber(e, a)), a.indexOf(\"_withdrawal_fee\") >= 0 && (i[c].withdraw = this.safeNumber(e, a)));\n }\n return i;\n }\n async fetchDepositWithdrawFees(e = void 0, t = {}) {\n await this.loadMarkets();\n const i = await this.privatePostBalance(t);\n return this.parseDepositWithdrawFees(i, e);\n }\n parseDepositWithdrawFees(e, t = void 0, i = void 0) {\n const s = {}, n = Object.keys(e);\n for (let r = 0; r < n.length; r++) {\n const a = n[r], o = a.split(\"_\")[0], c = this.safeCurrencyCode(o), u = this.safeNumber(e, a);\n if (t !== void 0 && !this.inArray(c, t))\n continue;\n a.indexOf(\"_available\") >= 0 && (s[c] = this.depositWithdrawFee({})), a.indexOf(\"_withdrawal_fee\") >= 0 && (s[c].withdraw.fee = u), this.safeValue(s, c) !== void 0 && (s[c].info[a] = u);\n }\n return s;\n }\n async createOrder(e, t, i, s, n = void 0, r = {}) {\n await this.loadMarkets();\n const a = this.market(e), o = {\n pair: a.id,\n amount: this.amountToPrecision(e, s)\n }, c = this.safeString2(r, \"client_order_id\", \"clientOrderId\");\n c !== void 0 && (o.client_order_id = c, r = this.omit(r, [\"clientOrderId\"]));\n let u;\n const f = this.capitalize(i);\n t === \"market\" ? f === \"Buy\" ? u = await this.privatePostBuyMarketPair(this.extend(o, r)) : u = await this.privatePostSellMarketPair(this.extend(o, r)) : t === \"instant\" ? f === \"Buy\" ? u = await this.privatePostBuyInstantPair(this.extend(o, r)) : u = await this.privatePostSellInstantPair(this.extend(o, r)) : (o.price = this.priceToPrecision(e, n), f === \"Buy\" ? u = await this.privatePostBuyPair(this.extend(o, r)) : u = await this.privatePostSellPair(this.extend(o, r)));\n const h = this.parseOrder(u, a);\n return h.type = t, h;\n }\n async cancelOrder(e, t = void 0, i = {}) {\n await this.loadMarkets();\n const s = {\n id: e\n };\n return await this.privatePostCancelOrder(this.extend(s, i));\n }\n async cancelAllOrders(e = void 0, t = {}) {\n await this.loadMarkets();\n let i;\n const s = {};\n let n;\n return e !== void 0 ? (i = this.market(e), s.pair = i.id, n = await this.privatePostCancelAllOrdersPair(this.extend(s, t))) : n = await this.privatePostCancelAllOrders(this.extend(s, t)), n;\n }\n parseOrderStatus(e) {\n const t = {\n \"In Queue\": \"open\",\n Open: \"open\",\n Finished: \"closed\",\n Canceled: \"canceled\"\n };\n return this.safeString(t, e, e);\n }\n async fetchOrderStatus(e, t = void 0, i = {}) {\n await this.loadMarkets();\n const s = this.safeValue2(i, \"client_order_id\", \"clientOrderId\"), n = {};\n s !== void 0 ? (n.client_order_id = s, i = this.omit(i, [\"client_order_id\", \"clientOrderId\"])) : n.id = e;\n const r = await this.privatePostOrderStatus(this.extend(n, i));\n return this.parseOrderStatus(this.safeString(r, \"status\"));\n }\n async fetchOrder(e, t = void 0, i = {}) {\n await this.loadMarkets();\n let s;\n t !== void 0 && (s = this.market(t));\n const n = this.safeValue2(i, \"client_order_id\", \"clientOrderId\"), r = {};\n n !== void 0 ? (r.client_order_id = n, i = this.omit(i, [\"client_order_id\", \"clientOrderId\"])) : r.id = e;\n const a = await this.privatePostOrderStatus(this.extend(r, i));\n return this.parseOrder(a, s);\n }\n async fetchMyTrades(e = void 0, t = void 0, i = void 0, s = {}) {\n await this.loadMarkets();\n const n = {};\n let r = \"privatePostUserTransactions\", a;\n e !== void 0 && (a = this.market(e), n.pair = a.id, r += \"Pair\"), i !== void 0 && (n.limit = i);\n const o = await this[r](this.extend(n, s)), c = this.filterBy(o, \"type\", \"2\");\n return this.parseTrades(c, a, t, i);\n }\n async fetchDepositsWithdrawals(e = void 0, t = void 0, i = void 0, s = {}) {\n await this.loadMarkets();\n const n = {};\n i !== void 0 && (n.limit = i);\n const r = await this.privatePostUserTransactions(this.extend(n, s));\n let a;\n e !== void 0 && (a = this.currency(e));\n const o = this.filterByArray(r, \"type\", [\"0\", \"1\"], !1);\n return this.parseTransactions(o, a, t, i);\n }\n async fetchWithdrawals(e = void 0, t = void 0, i = void 0, s = {}) {\n await this.loadMarkets();\n const n = {};\n t !== void 0 ? n.timedelta = this.milliseconds() - t : n.timedelta = 5e7;\n const r = await this.privatePostWithdrawalRequests(this.extend(n, s));\n return this.parseTransactions(r, void 0, t, i);\n }\n parseTransaction(e, t = void 0) {\n const i = this.parse8601(this.safeString(e, \"datetime\")), s = this.getCurrencyIdFromTransaction(e), n = this.safeCurrencyCode(s, t), r = this.safeString(e, \"fee\");\n let a, o;\n \"amount\" in e ? o = this.safeString(e, \"amount\") : t !== void 0 ? (o = this.safeString(e, t.id, o), a = t.code) : n !== void 0 && s !== void 0 && (o = this.safeString(e, s, o), a = n), o !== void 0 && (o = P.stringAbs(o));\n let c = \"ok\";\n \"status\" in e && (c = this.parseTransactionStatus(this.safeString(e, \"status\")));\n let u;\n if (\"type\" in e) {\n const p = this.safeString(e, \"type\");\n p === \"0\" ? u = \"deposit\" : p === \"1\" && (u = \"withdrawal\");\n } else\n u = \"withdrawal\";\n let f, h = this.safeString(e, \"address\");\n if (h !== void 0) {\n const p = h.split(\"?dt=\");\n p.length > 1 && (h = p[0], f = p[1]);\n }\n let l = {\n currency: void 0,\n cost: void 0,\n rate: void 0\n };\n return r !== void 0 && (l = {\n currency: a,\n cost: r,\n rate: void 0\n }), {\n info: e,\n id: this.safeString(e, \"id\"),\n txid: this.safeString(e, \"transaction_id\"),\n type: u,\n currency: n,\n network: void 0,\n amount: this.parseNumber(o),\n status: c,\n timestamp: i,\n datetime: this.iso8601(i),\n address: h,\n addressFrom: void 0,\n addressTo: h,\n tag: f,\n tagFrom: void 0,\n tagTo: f,\n updated: void 0,\n comment: void 0,\n internal: void 0,\n fee: l\n };\n }\n parseTransactionStatus(e) {\n const t = {\n 0: \"pending\",\n 1: \"pending\",\n 2: \"ok\",\n 3: \"canceled\",\n 4: \"failed\"\n // Failed\n };\n return this.safeString(t, e, e);\n }\n parseOrder(e, t = void 0) {\n const i = this.safeString(e, \"id\"), s = this.safeString(e, \"client_order_id\");\n let n = this.safeString(e, \"type\");\n n !== void 0 && (n = n === \"1\" ? \"sell\" : \"buy\");\n const r = this.parse8601(this.safeString(e, \"datetime\")), a = this.safeStringLower(e, \"currency_pair\"), o = this.safeSymbol(a, t, \"/\"), c = this.parseOrderStatus(this.safeString(e, \"status\")), u = this.safeString(e, \"amount\"), f = this.safeValue(e, \"transactions\", []);\n let h = this.safeString(e, \"price\");\n return h || (h = String(f.reduce((l, p) => l + this.safeNumber(p, \"price\", 0), 0) / f.length)), this.safeOrder({\n id: i,\n clientOrderId: s,\n datetime: this.iso8601(r),\n timestamp: r,\n lastTradeTimestamp: void 0,\n status: c,\n symbol: o,\n type: void 0,\n timeInForce: void 0,\n postOnly: void 0,\n side: n,\n price: h,\n stopPrice: void 0,\n triggerPrice: void 0,\n cost: void 0,\n amount: u,\n filled: void 0,\n remaining: void 0,\n trades: f,\n fee: void 0,\n info: e,\n average: void 0\n }, t);\n }\n parseLedgerEntryType(e) {\n const t = {\n 0: \"transaction\",\n 1: \"transaction\",\n 2: \"trade\",\n 14: \"transfer\"\n };\n return this.safeString(t, e, e);\n }\n parseLedgerEntry(e, t = void 0) {\n const i = this.parseLedgerEntryType(this.safeString(e, \"type\"));\n if (i === \"trade\") {\n const s = this.parseTrade(e);\n let n;\n const r = Object.keys(e);\n for (let o = 0; o < r.length; o++)\n if (r[o].indexOf(\"_\") >= 0) {\n const c = r[o].replace(\"_\", \"\");\n n = this.safeMarket(c, n);\n }\n n === void 0 && (n = this.getMarketFromTrade(e));\n const a = s.side === \"buy\" ? \"in\" : \"out\";\n return {\n id: s.id,\n info: e,\n timestamp: s.timestamp,\n datetime: s.datetime,\n direction: a,\n account: void 0,\n referenceId: s.order,\n referenceAccount: void 0,\n type: i,\n currency: n.base,\n amount: s.amount,\n before: void 0,\n after: void 0,\n status: \"ok\",\n fee: s.fee\n };\n } else {\n const s = this.parseTransaction(e, t);\n let n;\n if (\"amount\" in e) {\n const r = this.safeString(e, \"amount\");\n n = P.stringGt(r, \"0\") ? \"in\" : \"out\";\n } else if (\"currency\" in s && s.currency !== void 0) {\n const r = this.safeString(s, \"currency\");\n t = this.currency(r);\n const a = this.safeString(e, t.id);\n n = P.stringGt(a, \"0\") ? \"in\" : \"out\";\n }\n return {\n id: s.id,\n info: e,\n timestamp: s.timestamp,\n datetime: s.datetime,\n direction: n,\n account: void 0,\n referenceId: s.txid,\n referenceAccount: void 0,\n type: i,\n currency: s.currency,\n amount: s.amount,\n before: void 0,\n after: void 0,\n status: s.status,\n fee: s.fee\n };\n }\n }\n async fetchLedger(e = void 0, t = void 0, i = void 0, s = {}) {\n await this.loadMarkets();\n const n = {};\n i !== void 0 && (n.limit = i);\n const r = await this.privatePostUserTransactions(this.extend(n, s));\n let a;\n return e !== void 0 && (a = this.currency(e)), this.parseLedger(r, a, t, i);\n }\n async fetchOpenOrders(e = void 0, t = void 0, i = void 0, s = {}) {\n let n;\n await this.loadMarkets(), e !== void 0 && (n = this.market(e));\n const r = await this.privatePostOpenOrdersAll(s);\n return this.parseOrders(r, n, t, i, {\n status: \"open\",\n type: \"limit\"\n });\n }\n getCurrencyName(e) {\n return e.toLowerCase();\n }\n isFiat(e) {\n return e === \"USD\" || e === \"EUR\" || e === \"GBP\";\n }\n async fetchDepositAddress(e, t = {}) {\n if (this.isFiat(e))\n throw new It(e).addMessage(\"Fiat fetchDepositAddress() for \" + e + \" is not supported!\").exchange(this.id);\n const i = this.getCurrencyName(e), s = \"privatePost\" + this.capitalize(i) + \"Address\", n = await this[s](t), r = this.safeString(n, \"address\"), a = this.safeString2(n, \"memo_id\", \"destination_tag\");\n return this.checkAddress(r), {\n currency: e,\n address: r,\n tag: a,\n network: void 0,\n info: n\n };\n }\n async withdraw(e, t, i, s = void 0, n = {}) {\n [s, n] = this.handleWithdrawTagAndParams(s, n), await this.loadMarkets(), this.checkAddress(i);\n const r = this.safeString(n, \"network\"), o = {\n amount: this.currencyToPrecision(e, t, r)\n };\n let c, u;\n if (this.isFiat(e))\n u = \"privatePostWithdrawalOpen\", c = this.currency(e), o.iban = i, o.account_currency = c.id;\n else {\n const h = this.getCurrencyName(e);\n u = \"privatePost\" + this.capitalize(h) + \"Withdrawal\", e === \"XRP\" ? s !== void 0 && (o.destination_tag = s) : (e === \"XLM\" || e === \"HBAR\") && s !== void 0 && (o.memo_id = s), o.address = i;\n }\n const f = await this[u](this.extend(o, n));\n return this.parseTransaction(f, c);\n }\n nonce() {\n return this.milliseconds();\n }\n async sign(e, t = \"public\", i = \"GET\", s = {}, n = void 0, r = void 0) {\n let a = this.urls.api[t] + \"/\";\n a += this.version + \"/\", a += this.implodeParams(e, s);\n const o = this.omit(s, this.extractParams(e));\n if (t === \"public\")\n Object.keys(o).length && (a += \"?\" + this.urlencode(o));\n else {\n this.checkRequiredCredentials();\n const c = \"BITSTAMP \" + this.apiKey, u = this.uuid(), f = this.milliseconds().toString(), h = \"v2\";\n let l = \"\";\n n = {\n \"X-Auth\": c,\n \"X-Auth-Nonce\": u,\n \"X-Auth-Timestamp\": f,\n \"X-Auth-Version\": h\n }, i === \"POST\" && (Object.keys(o).length ? (r = this.urlencode(o), l = \"application/x-www-form-urlencoded\", n[\"Content-Type\"] = l) : (r = this.urlencode({ foo: \"bar\" }), l = \"application/x-www-form-urlencoded\", n[\"Content-Type\"] = l));\n const p = r || \"\", m = c + i + a.replace(\"https://\", \"\") + l + u + f + h + p;\n let y;\n this.externalSigner ? y = await this.externalSigner.sign({\n payload: this.encode(m),\n publicApiKey: this.apiKey,\n exchangeId: this.id\n }) : y = this.hmac(this.encode(m), this.encode(this.secret), Re), n[\"X-Auth-Signature\"] = y;\n }\n return { url: a, method: i, body: r, headers: n };\n }\n handleErrors(e, t, i, s, n, r, a, o, c) {\n if (a === void 0)\n return;\n const u = this.safeString(a, \"status\"), f = this.safeValue(a, \"error\");\n if (u === \"error\" || f !== void 0) {\n let h = [];\n if (typeof f == \"string\")\n h.push(f);\n else if (f !== void 0) {\n const m = Object.keys(f);\n for (let y = 0; y < m.length; y++) {\n const w = m[y], S = this.safeValue(f, w);\n Array.isArray(S) ? h = this.arrayConcat(h, S) : h.push(S);\n }\n }\n const l = this.safeValue(a, \"reason\", {});\n if (typeof l == \"string\")\n h.push(l);\n else {\n const m = this.safeValue(l, \"__all__\", []);\n for (let y = 0; y < m.length; y++)\n h.push(m[y]);\n }\n const p = this.safeString(a, \"code\");\n if (p === \"API0005\")\n throw new Z().addMessage(p + \": invalid signature, use the uid for the main account if you have subaccounts\").exchange(this.id);\n for (let m = 0; m < h.length; m++) {\n const y = h[m], w = y;\n this.throwExactlyMatchedException(this.exceptions.exact, y, w), this.throwBroadlyMatchedException(this.exceptions.broad, y, w);\n }\n throw new O().addMessage(f).exchange(this.id);\n }\n }\n}\nlet Ky = class extends gt {\n};\nclass Xy extends Ky {\n describe() {\n return this.deepExtend(super.describe(), {\n id: \"bybit\",\n name: \"Bybit\",\n countries: [\"VG\"],\n version: \"v5\",\n userAgent: void 0,\n rateLimit: 20,\n hostname: \"bybit.com\",\n pro: !0,\n certified: !0,\n has: {\n CORS: !0,\n spot: !0,\n margin: !0,\n swap: !0,\n future: !0,\n option: !0,\n cancelAllOrders: !0,\n cancelOrder: !0,\n createMarketBuyOrderWithCost: !0,\n createMarketSellOrderWithCost: !0,\n createOrder: !0,\n createOrders: !0,\n createOrderWithTakeProfitAndStopLoss: !0,\n createTakeProfitOrder: !0,\n createTrailingAmountOrder: !0,\n createTriggerOrder: !0,\n editOrder: !0,\n fetchBalance: !0,\n fetchCanceledOrders: !0,\n fetchClosedOrders: !0,\n fetchCurrencies: !0,\n fetchDeposit: !1,\n fetchDepositAddress: !0,\n fetchDepositAddresses: !1,\n fetchDepositAddressesByNetwork: !0,\n fetchDeposits: !0,\n fetchDepositWithdrawFee: \"emulated\",\n fetchDepositWithdrawFees: !0,\n fetchLedger: !0,\n fetchMarkets: !0,\n fetchMyTrades: !0,\n fetchOHLCV: !0,\n fetchOpenOrders: !0,\n fetchOrder: !0,\n fetchOrderBook: !0,\n fetchOrders: !0,\n fetchOrderTrades: !0,\n fetchPosition: !0,\n fetchPositions: !0,\n fetchTicker: !0,\n fetchTickers: !0,\n fetchTime: !0,\n fetchTrades: !0,\n fetchTradingFee: !0,\n fetchTradingFees: !0,\n fetchTransactions: !1,\n fetchTransfers: !0,\n fetchWithdrawals: !0,\n transfer: !0,\n withdraw: !0\n },\n timeframes: {\n \"1m\": \"1\",\n \"3m\": \"3\",\n \"5m\": \"5\",\n \"15m\": \"15\",\n \"30m\": \"30\",\n \"1h\": \"60\",\n \"2h\": \"120\",\n \"4h\": \"240\",\n \"6h\": \"360\",\n \"12h\": \"720\",\n \"1d\": \"D\",\n \"1w\": \"W\",\n \"1M\": \"M\"\n },\n urls: {\n test: {\n spot: \"https://api-testnet.{hostname}\",\n futures: \"https://api-testnet.{hostname}\",\n v2: \"https://api-testnet.{hostname}\",\n public: \"https://api-testnet.{hostname}\",\n private: \"https://api-testnet.{hostname}\"\n },\n logo: \"https://user-images.githubusercontent.com/51840849/76547799-daff5b80-649e-11ea-87fb-3be9bac08954.jpg\",\n api: {\n spot: \"https://api.{hostname}\",\n futures: \"https://api.{hostname}\",\n v2: \"https://api.{hostname}\",\n public: \"https://api.{hostname}\",\n private: \"https://api.{hostname}\"\n },\n www: \"https://www.bybit.com\",\n doc: [\n \"https://bybit-exchange.github.io/docs/inverse/\",\n \"https://bybit-exchange.github.io/docs/linear/\",\n \"https://github.com/bybit-exchange\"\n ],\n fees: \"https://help.bybit.com/hc/en-us/articles/360039261154\",\n // https://www.bybit.com/register?affiliate_id=35953 - I removed the code for now, because CWS is blocking until we explain our affiliate program to our users\n referral: \"https://www.bybit.com/register\"\n },\n api: {\n public: {\n get: {\n // spot\n \"spot/v3/public/symbols\": 1,\n \"spot/v3/public/quote/depth\": 1,\n \"spot/v3/public/quote/depth/merged\": 1,\n \"spot/v3/public/quote/trades\": 1,\n \"spot/v3/public/quote/kline\": 1,\n \"spot/v3/public/quote/ticker/24hr\": 1,\n \"spot/v3/public/quote/ticker/price\": 1,\n \"spot/v3/public/quote/ticker/bookTicker\": 1,\n \"spot/v3/public/server-time\": 1,\n \"spot/v3/public/infos\": 1,\n \"spot/v3/public/margin-product-infos\": 1,\n \"spot/v3/public/margin-ensure-tokens\": 1,\n // data\n \"v3/public/time\": 1,\n \"contract/v3/public/copytrading/symbol/list\": 1,\n // derivative\n \"derivatives/v3/public/order-book/L2\": 1,\n \"derivatives/v3/public/kline\": 1,\n \"derivatives/v3/public/tickers\": 1,\n \"derivatives/v3/public/instruments-info\": 1,\n \"derivatives/v3/public/mark-price-kline\": 1,\n \"derivatives/v3/public/index-price-kline\": 1,\n \"derivatives/v3/public/funding/history-funding-rate\": 1,\n \"derivatives/v3/public/risk-limit/list\": 1,\n \"derivatives/v3/public/delivery-price\": 1,\n \"derivatives/v3/public/recent-trade\": 1,\n \"derivatives/v3/public/open-interest\": 1,\n \"derivatives/v3/public/insurance\": 1,\n // v5\n \"v5/announcements/index\": 5,\n // market\n \"v5/market/time\": 5,\n \"v5/market/kline\": 5,\n \"v5/market/mark-price-kline\": 5,\n \"v5/market/index-price-kline\": 5,\n \"v5/market/premium-index-price-kline\": 5,\n \"v5/market/instruments-info\": 5,\n \"v5/market/orderbook\": 5,\n \"v5/market/tickers\": 5,\n \"v5/market/funding/history\": 5,\n \"v5/market/recent-trade\": 5,\n \"v5/market/open-interest\": 5,\n \"v5/market/historical-volatility\": 5,\n \"v5/market/insurance\": 5,\n \"v5/market/risk-limit\": 5,\n \"v5/market/delivery-price\": 5,\n \"v5/market/account-ratio\": 5,\n // spot leverage token\n \"v5/spot-lever-token/info\": 5,\n \"v5/spot-lever-token/reference\": 5,\n // spot margin trade\n \"v5/spot-margin-trade/data\": 5,\n \"v5/spot-cross-margin-trade/data\": 5,\n \"v5/spot-cross-margin-trade/pledge-token\": 5,\n \"v5/spot-cross-margin-trade/borrow-token\": 5,\n // institutional lending\n \"v5/ins-loan/product-infos\": 5,\n \"v5/ins-loan/ensure-tokens-convert\": 5\n }\n },\n private: {\n get: {\n // Legacy inverse swap\n \"v2/private/wallet/fund/records\": 25,\n // spot\n \"spot/v3/private/order\": 2.5,\n \"spot/v3/private/open-orders\": 2.5,\n \"spot/v3/private/history-orders\": 2.5,\n \"spot/v3/private/my-trades\": 2.5,\n \"spot/v3/private/account\": 2.5,\n \"spot/v3/private/reference\": 2.5,\n \"spot/v3/private/record\": 2.5,\n \"spot/v3/private/cross-margin-orders\": 10,\n \"spot/v3/private/cross-margin-account\": 10,\n \"spot/v3/private/cross-margin-loan-info\": 10,\n \"spot/v3/private/cross-margin-repay-history\": 10,\n \"spot/v3/private/margin-loan-infos\": 10,\n \"spot/v3/private/margin-repaid-infos\": 10,\n \"spot/v3/private/margin-ltv\": 10,\n // account\n \"asset/v3/private/transfer/inter-transfer/list/query\": 50,\n \"asset/v3/private/transfer/sub-member/list/query\": 50,\n \"asset/v3/private/transfer/sub-member-transfer/list/query\": 50,\n \"asset/v3/private/transfer/universal-transfer/list/query\": 25,\n \"asset/v3/private/coin-info/query\": 25,\n \"asset/v3/private/deposit/address/query\": 10,\n \"contract/v3/private/copytrading/order/list\": 30,\n \"contract/v3/private/copytrading/position/list\": 40,\n \"contract/v3/private/copytrading/wallet/balance\": 25,\n \"contract/v3/private/position/limit-info\": 25,\n \"contract/v3/private/order/unfilled-orders\": 1,\n \"contract/v3/private/order/list\": 1,\n \"contract/v3/private/position/list\": 1,\n \"contract/v3/private/execution/list\": 1,\n \"contract/v3/private/position/closed-pnl\": 1,\n \"contract/v3/private/account/wallet/balance\": 1,\n \"contract/v3/private/account/fee-rate\": 1,\n \"contract/v3/private/account/wallet/fund-records\": 1,\n // derivative\n \"unified/v3/private/order/unfilled-orders\": 1,\n \"unified/v3/private/order/list\": 1,\n \"unified/v3/private/position/list\": 1,\n \"unified/v3/private/execution/list\": 1,\n \"unified/v3/private/delivery-record\": 1,\n \"unified/v3/private/settlement-record\": 1,\n \"unified/v3/private/account/wallet/balance\": 1,\n \"unified/v3/private/account/transaction-log\": 1,\n \"unified/v3/private/account/borrow-history\": 1,\n \"unified/v3/private/account/borrow-rate\": 1,\n \"unified/v3/private/account/info\": 1,\n \"user/v3/private/frozen-sub-member\": 10,\n \"user/v3/private/query-sub-members\": 5,\n \"user/v3/private/query-api\": 5,\n \"user/v3/private/get-member-type\": 1,\n \"asset/v3/private/transfer/transfer-coin/list/query\": 50,\n \"asset/v3/private/transfer/account-coin/balance/query\": 50,\n \"asset/v3/private/transfer/account-coins/balance/query\": 25,\n \"asset/v3/private/transfer/asset-info/query\": 50,\n \"asset/v3/public/deposit/allowed-deposit-list/query\": 0.17,\n \"asset/v3/private/deposit/record/query\": 10,\n \"asset/v3/private/withdraw/record/query\": 10,\n // v5\n // trade\n \"v5/order/realtime\": 5,\n \"v5/order/history\": 5,\n \"v5/order/spot-borrow-check\": 1,\n // position\n \"v5/position/list\": 5,\n \"v5/execution/list\": 5,\n \"v5/position/closed-pnl\": 5,\n \"v5/position/move-history\": 5,\n // pre-upgrade\n \"v5/pre-upgrade/order/history\": 5,\n \"v5/pre-upgrade/execution/list\": 5,\n \"v5/pre-upgrade/position/closed-pnl\": 5,\n \"v5/pre-upgrade/account/transaction-log\": 5,\n \"v5/pre-upgrade/asset/delivery-record\": 5,\n \"v5/pre-upgrade/asset/settlement-record\": 5,\n // account\n \"v5/account/wallet-balance\": 1,\n \"v5/account/borrow-history\": 1,\n \"v5/account/collateral-info\": 1,\n \"v5/asset/coin-greeks\": 1,\n \"v5/account/fee-rate\": 10,\n \"v5/account/info\": 5,\n \"v5/account/transaction-log\": 1,\n \"v5/account/smp-group\": 1,\n \"v5/account/mmp-state\": 5,\n // asset\n \"v5/asset/exchange/order-record\": 5,\n \"v5/asset/delivery-record\": 5,\n \"v5/asset/settlement-record\": 5,\n \"v5/asset/transfer/query-asset-info\": 50,\n \"v5/asset/transfer/query-account-coins-balance\": 25,\n \"v5/asset/transfer/query-account-coin-balance\": 50,\n \"v5/asset/transfer/query-transfer-coin-list\": 50,\n \"v5/asset/transfer/query-inter-transfer-list\": 50,\n \"v5/asset/transfer/query-sub-member-list\": 50,\n \"v5/asset/transfer/query-universal-transfer-list\": 25,\n \"v5/asset/deposit/query-allowed-list\": 5,\n \"v5/asset/deposit/query-record\": 10,\n \"v5/asset/deposit/query-sub-member-record\": 10,\n \"v5/asset/deposit/query-internal-record\": 5,\n \"v5/asset/deposit/query-address\": 10,\n \"v5/asset/deposit/query-sub-member-address\": 10,\n \"v5/asset/coin/query-info\": 28,\n \"v5/asset/withdraw/query-record\": 10,\n \"v5/asset/withdraw/withdrawable-amount\": 5,\n // user\n \"v5/user/query-sub-members\": 5,\n \"v5/user/query-api\": 5,\n \"v5/user/sub-apikeys\": 5,\n \"v5/user/get-member-type\": 5,\n \"v5/user/aff-customer-info\": 5,\n \"v5/user/del-submember\": 5,\n // spot leverage token\n \"v5/spot-lever-token/order-record\": 1,\n // spot margin trade\n \"v5/spot-margin-trade/state\": 5,\n \"v5/spot-cross-margin-trade/loan-info\": 1,\n \"v5/spot-cross-margin-trade/account\": 1,\n \"v5/spot-cross-margin-trade/orders\": 1,\n \"v5/spot-cross-margin-trade/repay-history\": 1,\n // institutional lending\n \"v5/ins-loan/product-infos\": 5,\n \"v5/ins-loan/ensure-tokens-convert\": 5,\n \"v5/ins-loan/loan-order\": 5,\n \"v5/ins-loan/repaid-history\": 5,\n \"v5/ins-loan/ltv-convert\": 5,\n // c2c lending\n \"v5/lending/info\": 5,\n \"v5/lending/history-order\": 5,\n \"v5/lending/account\": 5,\n // broker\n \"v5/broker/earning-record\": 5,\n \"v5/broker/earnings-info\": 5,\n \"v5/broker/account-info\": 5\n },\n post: {\n // Legacy option USDC\n \"option/usdc/openapi/private/v1/place-order\": 2.5,\n \"option/usdc/openapi/private/v1/replace-order\": 2.5,\n \"option/usdc/openapi/private/v1/cancel-order\": 2.5,\n \"option/usdc/openapi/private/v1/cancel-all\": 2.5,\n \"option/usdc/openapi/private/v1/query-active-orders\": 2.5,\n \"option/usdc/openapi/private/v1/query-order-history\": 2.5,\n \"option/usdc/openapi/private/v1/execution-list\": 2.5,\n \"option/usdc/openapi/private/v1/query-position\": 2.5,\n // Legacy perpetual swap USDC\n \"perpetual/usdc/openapi/private/v1/place-order\": 2.5,\n \"perpetual/usdc/openapi/private/v1/replace-order\": 2.5,\n \"perpetual/usdc/openapi/private/v1/cancel-order\": 2.5,\n \"perpetual/usdc/openapi/private/v1/cancel-all\": 2.5,\n \"perpetual/usdc/openapi/private/v1/position/leverage/save\": 2.5,\n // spot\n \"spot/v3/private/order\": 2.5,\n \"spot/v3/private/cancel-order\": 2.5,\n \"spot/v3/private/cancel-orders\": 2.5,\n \"spot/v3/private/cancel-orders-by-ids\": 2.5,\n \"spot/v3/private/purchase\": 2.5,\n \"spot/v3/private/redeem\": 2.5,\n \"spot/v3/private/cross-margin-loan\": 10,\n \"spot/v3/private/cross-margin-repay\": 10,\n // account\n \"asset/v3/private/transfer/inter-transfer\": 150,\n \"asset/v3/private/withdraw/create\": 300,\n \"asset/v3/private/withdraw/cancel\": 50,\n \"asset/v3/private/transfer/sub-member-transfer\": 150,\n \"asset/v3/private/transfer/transfer-sub-member-save\": 150,\n \"asset/v3/private/transfer/universal-transfer\": 10,\n \"user/v3/private/create-sub-member\": 10,\n \"user/v3/private/create-sub-api\": 10,\n \"user/v3/private/update-api\": 10,\n \"user/v3/private/delete-api\": 10,\n \"user/v3/private/update-sub-api\": 10,\n \"user/v3/private/delete-sub-api\": 10,\n // contract\n \"contract/v3/private/copytrading/order/create\": 30,\n \"contract/v3/private/copytrading/order/cancel\": 30,\n \"contract/v3/private/copytrading/order/close\": 30,\n \"contract/v3/private/copytrading/position/close\": 40,\n \"contract/v3/private/copytrading/position/set-leverage\": 40,\n \"contract/v3/private/copytrading/wallet/transfer\": 25,\n \"contract/v3/private/copytrading/order/trading-stop\": 2.5,\n \"contract/v3/private/order/create\": 1,\n \"contract/v3/private/order/cancel\": 1,\n \"contract/v3/private/order/cancel-all\": 1,\n \"contract/v3/private/order/replace\": 1,\n \"contract/v3/private/position/set-auto-add-margin\": 1,\n \"contract/v3/private/position/switch-isolated\": 1,\n \"contract/v3/private/position/switch-mode\": 1,\n \"contract/v3/private/position/switch-tpsl-mode\": 1,\n \"contract/v3/private/position/set-leverage\": 1,\n \"contract/v3/private/position/trading-stop\": 1,\n \"contract/v3/private/position/set-risk-limit\": 1,\n \"contract/v3/private/account/setMarginMode\": 1,\n // derivative\n \"unified/v3/private/order/create\": 30,\n \"unified/v3/private/order/replace\": 30,\n \"unified/v3/private/order/cancel\": 30,\n \"unified/v3/private/order/create-batch\": 30,\n \"unified/v3/private/order/replace-batch\": 30,\n \"unified/v3/private/order/cancel-batch\": 30,\n \"unified/v3/private/order/cancel-all\": 30,\n \"unified/v3/private/position/set-leverage\": 2.5,\n \"unified/v3/private/position/tpsl/switch-mode\": 2.5,\n \"unified/v3/private/position/set-risk-limit\": 2.5,\n \"unified/v3/private/position/trading-stop\": 2.5,\n \"unified/v3/private/account/upgrade-unified-account\": 2.5,\n \"unified/v3/private/account/setMarginMode\": 2.5,\n // tax\n \"fht/compliance/tax/v3/private/registertime\": 50,\n \"fht/compliance/tax/v3/private/create\": 50,\n \"fht/compliance/tax/v3/private/status\": 50,\n \"fht/compliance/tax/v3/private/url\": 50,\n // v5\n // trade\n \"v5/order/create\": 2.5,\n \"v5/order/amend\": 5,\n \"v5/order/cancel\": 2.5,\n \"v5/order/cancel-all\": 50,\n \"v5/order/create-batch\": 5,\n \"v5/order/amend-batch\": 5,\n \"v5/order/cancel-batch\": 5,\n \"v5/order/disconnected-cancel-all\": 5,\n // position\n \"v5/position/set-leverage\": 5,\n \"v5/position/switch-isolated\": 5,\n \"v5/position/set-tpsl-mode\": 5,\n \"v5/position/switch-mode\": 5,\n \"v5/position/set-risk-limit\": 5,\n \"v5/position/trading-stop\": 5,\n \"v5/position/set-auto-add-margin\": 5,\n \"v5/position/add-margin\": 5,\n \"v5/position/move-positions\": 5,\n \"v5/position/confirm-pending-mmr\": 5,\n // account\n \"v5/account/upgrade-to-uta\": 5,\n \"v5/account/quick-repayment\": 5,\n \"v5/account/set-margin-mode\": 5,\n \"v5/account/set-hedging-mode\": 5,\n \"v5/account/mmp-modify\": 5,\n \"v5/account/mmp-reset\": 5,\n // asset\n \"v5/asset/transfer/inter-transfer\": 50,\n \"v5/asset/transfer/save-transfer-sub-member\": 150,\n \"v5/asset/transfer/universal-transfer\": 10,\n \"v5/asset/deposit/deposit-to-account\": 5,\n \"v5/asset/withdraw/create\": 50,\n \"v5/asset/withdraw/cancel\": 50,\n // user\n \"v5/user/create-sub-member\": 10,\n \"v5/user/create-sub-api\": 10,\n \"v5/user/frozen-sub-member\": 10,\n \"v5/user/update-api\": 10,\n \"v5/user/update-sub-api\": 10,\n \"v5/user/delete-api\": 10,\n \"v5/user/delete-sub-api\": 10,\n // spot leverage token\n \"v5/spot-lever-token/purchase\": 2.5,\n \"v5/spot-lever-token/redeem\": 2.5,\n // spot margin trade\n \"v5/spot-margin-trade/switch-mode\": 5,\n \"v5/spot-margin-trade/set-leverage\": 5,\n \"v5/spot-cross-margin-trade/loan\": 2.5,\n \"v5/spot-cross-margin-trade/repay\": 2.5,\n \"v5/spot-cross-margin-trade/switch\": 2.5,\n // institutional lending\n \"v5/ins-loan/association-uid\": 5,\n // c2c lending\n \"v5/lending/purchase\": 5,\n \"v5/lending/redeem\": 5,\n \"v5/lending/redeem-cancel\": 5,\n \"v5/account/set-collateral-switch\": 5,\n \"v5/account/set-collateral-switch-batch\": 5\n }\n }\n },\n httpExceptions: {\n 403: Ae\n // Forbidden -- You request too many times\n },\n exceptions: {\n // Uncodumented explanation of error strings:\n // - oc_diff: order cost needed to place this order\n // - new_oc: total order cost of open orders including the order you are trying to open\n // - ob: order balance - the total cost of current open orders\n // - ab: available balance\n exact: {\n \"-10009\": g,\n \"-1004\": g,\n \"-1021\": g,\n \"-1103\": g,\n \"-1140\": g,\n \"-1197\": g,\n \"-2013\": k,\n \"-2015\": Z,\n \"-6017\": g,\n \"-6025\": g,\n \"-6029\": g,\n 5004: O,\n 7001: g,\n 10001: g,\n 10002: ze,\n 10003: Pt,\n 10004: Z,\n 10005: ee,\n 10006: Ae,\n 10007: Z,\n 10008: Z,\n 10009: Z,\n 10010: ee,\n 10014: O,\n 10016: O,\n 10017: O,\n 10018: Ae,\n 10020: ee,\n 10024: ee,\n 10027: ee,\n 10028: ee,\n 10029: ee,\n 12137: g,\n 12201: g,\n 12141: g,\n 100028: ee,\n 110001: Se,\n 110003: g,\n 110004: re,\n 110005: k,\n 110006: re,\n 110007: re,\n 110008: k,\n 110009: k,\n 110010: k,\n 110011: k,\n 110012: re,\n 110013: k,\n 110014: re,\n 110015: k,\n 110016: k,\n 110017: k,\n 110018: O,\n 110019: g,\n 110020: k,\n 110021: k,\n 110022: k,\n 110023: k,\n 110024: k,\n 110025: k,\n 110026: O,\n 110027: O,\n 110028: k,\n 110029: k,\n 110030: k,\n 110031: k,\n 110032: k,\n 110033: k,\n 110034: k,\n 110035: k,\n 110036: k,\n 110037: k,\n 110038: k,\n 110039: k,\n 110040: k,\n 110041: k,\n 110042: k,\n 110043: k,\n 110044: re,\n 110045: re,\n 110046: O,\n 110047: k,\n 110048: k,\n 110049: k,\n 110050: k,\n 110051: re,\n 110052: re,\n 110053: re,\n 110054: k,\n 110055: k,\n 110056: k,\n 110057: k,\n 110058: k,\n 110059: k,\n 110060: O,\n 110061: O,\n 110062: O,\n 110063: O,\n 110064: k,\n 110065: ee,\n 110066: O,\n 110067: ee,\n 110068: ee,\n 110069: ee,\n 110070: k,\n 110071: O,\n 110072: k,\n 110073: O,\n 130006: k,\n 130021: re,\n 130074: k,\n 131001: Xt,\n 131084: O,\n 131200: O,\n 131201: O,\n 131202: g,\n 131203: g,\n 131204: g,\n 131205: g,\n 131206: O,\n 131207: g,\n 131208: O,\n 131209: g,\n 131210: g,\n 131211: g,\n 131212: re,\n 131213: g,\n 131214: g,\n 131215: g,\n 131216: O,\n 131217: O,\n 131231: Vt,\n 131232: Vt,\n 131002: g,\n 131003: O,\n 131004: Z,\n 131085: re,\n 131086: ke,\n 131088: ws,\n 131089: ke,\n 131090: O,\n 131091: O,\n 131092: O,\n 131093: gi,\n 131094: ee,\n 131095: ke,\n 131096: ke,\n 131097: O,\n 131098: O,\n 131099: O,\n 140001: Se,\n 140003: g,\n 140004: re,\n 140005: k,\n 140006: re,\n 140007: re,\n 140008: k,\n 140009: k,\n 140010: k,\n 140011: k,\n 140012: re,\n 140013: k,\n 140014: re,\n 140015: k,\n 140016: k,\n 140017: k,\n 140018: O,\n 140019: k,\n 140020: k,\n 140021: k,\n 140022: k,\n 140023: k,\n 140024: k,\n 140025: k,\n 140026: k,\n 140027: k,\n 140028: k,\n 140029: k,\n 140030: k,\n 140031: k,\n 140032: k,\n 140033: k,\n 140034: k,\n 140035: k,\n 140036: k,\n 140037: k,\n 140038: k,\n 140039: k,\n 140040: k,\n 140041: k,\n 140042: k,\n 140043: k,\n 140044: re,\n 140045: re,\n 140046: k,\n 140047: k,\n 140048: k,\n 140049: k,\n 140050: g,\n 140051: re,\n 140052: re,\n 140053: re,\n 140054: k,\n 140055: k,\n 140056: k,\n 140057: k,\n 140058: k,\n 140059: k,\n 140060: O,\n 140061: O,\n 140062: O,\n 140063: O,\n 140064: k,\n 140065: ee,\n 140066: O,\n 140067: ee,\n 140068: ee,\n 140069: ee,\n 140070: k,\n 170001: O,\n 170007: Nt,\n 170005: k,\n 170031: O,\n 170032: O,\n 170033: re,\n 170034: re,\n 170035: be,\n 170036: O,\n 170037: O,\n 170105: g,\n 170115: g,\n 170116: g,\n 170117: g,\n 170121: g,\n 170130: g,\n 170131: re,\n 170132: g,\n 170133: g,\n 170134: g,\n 170135: g,\n 170136: g,\n 170137: g,\n 170139: g,\n 170140: g,\n 170124: g,\n 170141: k,\n 170142: k,\n 170143: k,\n 170144: k,\n 170145: k,\n 170146: k,\n 170147: k,\n 170148: g,\n 170149: O,\n 170150: O,\n 170151: k,\n 170157: k,\n 170159: k,\n 170190: k,\n 170191: k,\n 170192: g,\n 170193: g,\n 170194: g,\n 170195: k,\n 170196: k,\n 170197: g,\n 170198: g,\n 170199: g,\n 170200: g,\n 170221: $e,\n 170222: Ae,\n 170223: re,\n 170224: ee,\n 170226: re,\n 170227: O,\n 170228: k,\n 170229: k,\n 170234: O,\n 170210: k,\n 170213: Se,\n 170217: k,\n 170218: g,\n 170010: g,\n 170011: g,\n 170019: g,\n 170201: ee,\n 170202: g,\n 170203: g,\n 170204: g,\n 170206: g,\n 175e3: g,\n 175001: k,\n 175002: k,\n 175003: re,\n 175004: k,\n 175005: k,\n 175006: re,\n 175007: Se,\n 175008: k,\n 175009: k,\n 175010: ee,\n 175012: k,\n 175013: k,\n 175014: k,\n 175015: k,\n 175016: g,\n 175017: g,\n 175027: O,\n 176002: O,\n 176004: O,\n 176003: O,\n 176006: O,\n 176005: O,\n 176008: O,\n 176007: O,\n 176010: O,\n 176009: O,\n 176012: it,\n 176011: O,\n 176014: O,\n 176013: O,\n 176015: re,\n 176016: O,\n 176017: O,\n 176018: O,\n 176019: O,\n 176020: O,\n 176021: O,\n 176022: O,\n 176023: O,\n 176024: O,\n 176025: O,\n 176026: O,\n 176027: O,\n 176028: O,\n 176029: O,\n 176030: O,\n 176031: g,\n 176034: O,\n 176035: ee,\n 176036: ee,\n 176037: ee,\n 176038: O,\n 176039: O,\n 176040: O,\n 181e3: O,\n 181001: g,\n 181002: g,\n 181003: g,\n 181004: g,\n 182e3: g,\n 181017: g,\n 20001: Se,\n 20003: g,\n 20004: g,\n 20005: g,\n 20006: g,\n 20007: g,\n 20008: g,\n 20009: g,\n 20010: g,\n 20011: g,\n 20012: g,\n 20013: g,\n 20014: g,\n 20015: g,\n 20016: g,\n 20017: g,\n 20018: g,\n 20019: g,\n 20020: g,\n 20021: g,\n 20022: g,\n 20023: g,\n 20031: g,\n 20070: g,\n 20071: g,\n 20084: g,\n 30001: g,\n 30003: g,\n 30004: g,\n 30005: g,\n 30007: g,\n 30008: g,\n 30009: O,\n 30010: re,\n 30011: ee,\n 30012: ee,\n 30013: ee,\n 30014: g,\n 30015: g,\n 30016: O,\n 30017: g,\n 30018: g,\n 30019: g,\n 30020: k,\n 30021: k,\n 30022: g,\n 30023: g,\n 30024: k,\n 30025: g,\n 30026: g,\n 30027: g,\n 30028: g,\n 30029: g,\n 30030: g,\n 30031: re,\n 30032: k,\n 30033: Ae,\n 30034: Se,\n 30035: Ae,\n 30036: O,\n 30037: k,\n 30041: O,\n 30042: re,\n 30043: k,\n 30044: k,\n 30045: k,\n 30049: re,\n 30050: O,\n 30051: O,\n 30052: O,\n 30054: O,\n 30057: O,\n 30063: O,\n 30067: re,\n 30068: O,\n 30074: k,\n 30075: k,\n 30078: O,\n // '30084': BadRequest, // Isolated not modified, see handleErrors below\n 33004: Z,\n 34026: O,\n 34036: O,\n 35015: O,\n 340099: O,\n 3400045: O,\n 3100116: g,\n 3100198: g,\n 3200300: re\n // {\"retCode\":3200300,\"retMsg\":\"Insufficient margin balance.\",\"result\":null,\"retExtMap\":{}}\n },\n broad: {\n \"Request timeout\": Nt,\n \"unknown orderInfo\": Se,\n \"invalid api_key\": Z,\n // the below two issues are caused as described: issues/9149#issuecomment-1146559498, when response is such: {\"ret_code\":130021,\"ret_msg\":\"oc_diff[1707966351], new_oc[1707966351] with ob[....]+AB[....]\",\"ext_code\":\"\",\"ext_info\":\"\",\"result\":null,\"time_now\":\"1658395300.872766\",\"rate_limit_status\":99,\"rate_limit_reset_ms\":1658395300855,\"rate_limit\":100}\n oc_diff: re,\n new_oc: re,\n \"openapi sign params error!\": Z,\n \"withdraw address is invalid\": et\n },\n messages: {\n \"Order value exceeded lower limit\": ye.ORDER_UNDER_MINIMUM\n }\n },\n precisionMode: ct,\n options: {\n fetchMarkets: [\"spot\", \"linear\", \"inverse\", \"option\"],\n enableUnifiedMargin: void 0,\n enableUnifiedAccount: void 0,\n createMarketBuyOrderRequiresPrice: !0,\n createUnifiedMarginAccount: !1,\n defaultType: \"swap\",\n defaultSubType: \"linear\",\n defaultSettle: \"USDT\",\n code: \"BTC\",\n recvWindow: 10 * 1e3,\n timeDifference: 0,\n adjustForTimeDifference: !1,\n loadAllOptions: !1,\n loadExpiredOptions: !1,\n brokerId: \"CEDE\",\n accountsByType: {\n spot: \"SPOT\",\n margin: \"SPOT\",\n future: \"CONTRACT\",\n swap: \"CONTRACT\",\n option: \"OPTION\",\n investment: \"INVESTMENT\",\n unified: \"UNIFIED\",\n funding: \"FUND\",\n fund: \"FUND\",\n contract: \"CONTRACT\"\n },\n accountsById: {\n SPOT: \"spot\",\n MARGIN: \"spot\",\n CONTRACT: \"contract\",\n OPTION: \"option\",\n INVESTMENT: \"investment\",\n UNIFIED: \"unified\",\n FUND: \"fund\"\n },\n networks: {\n ERC20: \"ETH\",\n TRC20: \"TRX\",\n BEP20: \"BSC\",\n OMNI: \"OMNI\",\n SPL: \"SOL\"\n },\n networksById: {\n ETH: \"ERC20\",\n TRX: \"TRC20\",\n BSC: \"BEP20\",\n OMNI: \"OMNI\",\n SPL: \"SOL\"\n },\n defaultNetwork: \"ERC20\",\n defaultNetworks: {\n USDT: \"TRC20\"\n },\n intervals: {\n \"5m\": \"5min\",\n \"15m\": \"15min\",\n \"30m\": \"30min\",\n \"1h\": \"1h\",\n \"4h\": \"4h\",\n \"1d\": \"1d\"\n }\n },\n fees: {\n trading: {\n feeSide: \"get\",\n tierBased: !0,\n percentage: !0,\n taker: 75e-5,\n maker: 1e-4\n },\n funding: {\n tierBased: !1,\n percentage: !1,\n withdraw: {},\n deposit: {}\n }\n }\n });\n }\n isUsingForcedProxy(e = {}, t = \"public\") {\n return t === \"private\";\n }\n nonce() {\n return this.milliseconds() - this.options.timeDifference;\n }\n addPaginationCursorToResult(e) {\n const t = this.safeValue(e, \"result\", {}), i = this.safeValueN(t, [\"list\", \"rows\", \"data\", \"dataList\"], []), s = this.safeString2(t, \"nextPageCursor\", \"cursor\"), n = i.length;\n if (s !== void 0 && n > 0) {\n const r = i[0];\n r.nextPageCursor = s, i[0] = r;\n }\n return i;\n }\n async isUnifiedEnabled(e = {}) {\n const t = this.safeValue(this.options, \"enableUnifiedMargin\"), i = this.safeValue(this.options, \"enableUnifiedAccount\"), s = this.safeValue(e, \"methodCallId\");\n if (t === void 0 || i === void 0 || s) {\n const n = await this.privateGetV5UserQueryApi(e), r = this.safeValue(n, \"result\", {});\n this.options.enableUnifiedMargin = this.safeInteger(r, \"unified\") === 1, this.options.enableUnifiedAccount = this.safeInteger(r, \"uta\") === 1;\n }\n return [this.options.enableUnifiedMargin, this.options.enableUnifiedAccount];\n }\n convertExpireDate(e) {\n const t = e.slice(0, 2), i = e.slice(2, 4), s = e.slice(4, 6);\n return \"20\" + t + \"-\" + i + \"-\" + s + \"T00:00:00Z\";\n }\n convertExpireDateToMarketIdDate(e) {\n const t = e.slice(0, 2), i = e.slice(2, 4);\n let s;\n const n = e.slice(4, 6);\n return i === \"01\" ? s = \"JAN\" : i === \"02\" ? s = \"FEB\" : i === \"03\" ? s = \"MAR\" : i === \"04\" ? s = \"APR\" : i === \"05\" ? s = \"MAY\" : i === \"06\" ? s = \"JUN\" : i === \"07\" ? s = \"JUL\" : i === \"08\" ? s = \"AUG\" : i === \"09\" ? s = \"SEP\" : i === \"10\" ? s = \"OCT\" : i === \"11\" ? s = \"NOV\" : i === \"12\" && (s = \"DEC\"), n + s + t;\n }\n convertMarketIdExpireDate(e) {\n const t = {\n JAN: \"01\",\n FEB: \"02\",\n MAR: \"03\",\n APR: \"04\",\n MAY: \"05\",\n JUN: \"06\",\n JUL: \"07\",\n AUG: \"08\",\n SEP: \"09\",\n OCT: \"10\",\n NOV: \"11\",\n DEC: \"12\"\n }, i = e.slice(0, 2), s = e.slice(2, 5), n = this.safeString(t, s);\n return e.slice(5, 7) + n + i;\n }\n createExpiredOptionMarket(e) {\n const t = \"USD\", i = \"USDC\", s = e.split(\"-\"), n = e.split(\"/\");\n let r, a;\n e.indexOf(\"/\") > -1 ? (r = this.safeString(n, 0), a = this.safeString(s, 1)) : (r = this.safeString(s, 0), a = this.convertMarketIdExpireDate(this.safeString(s, 1)));\n const o = this.safeString(s, 2), c = this.safeString(s, 3), u = this.convertExpireDate(a), f = this.parse8601(u);\n return {\n id: r + \"-\" + this.convertExpireDateToMarketIdDate(a) + \"-\" + o + \"-\" + c,\n symbol: r + \"/\" + t + \":\" + i + \"-\" + a + \"-\" + o + \"-\" + c,\n base: r,\n quote: t,\n settle: i,\n baseId: r,\n quoteId: t,\n settleId: i,\n active: !1,\n type: \"option\",\n linear: void 0,\n inverse: void 0,\n spot: !1,\n swap: !1,\n future: !1,\n option: !0,\n margin: !1,\n contract: !0,\n contractSize: void 0,\n expiry: f,\n expiryDatetime: u,\n optionType: c === \"C\" ? \"call\" : \"put\",\n strike: this.parseNumber(o),\n precision: {\n amount: void 0,\n price: void 0\n },\n limits: {\n amount: {\n min: void 0,\n max: void 0\n },\n price: {\n min: void 0,\n max: void 0\n },\n cost: {\n min: void 0,\n max: void 0\n }\n },\n info: void 0\n };\n }\n safeMarket(e = void 0, t = void 0, i = void 0, s = void 0) {\n return e !== void 0 && (e.indexOf(\"-C\") > -1 || e.indexOf(\"-P\") > -1) && !(e in this.markets_by_id) ? this.createExpiredOptionMarket(e) : super.safeMarket(e, t, i, s);\n }\n getBybitType(e, t, i = {}) {\n let s;\n [s, i] = this.handleMarketTypeAndParams(e, t, i);\n let n;\n return [n, i] = this.handleSubTypeAndParams(e, t, i), s === \"option\" || s === \"spot\" ? [s, i] : [n, i];\n }\n async fetchStatus(e = {}) {\n const t = await this.publicGetV5MarketTime(e), s = this.safeString(t, \"retCode\") === \"0\" ? \"ok\" : \"maintenance\", n = this.safeInteger(t, \"time\");\n return {\n status: s,\n updated: n,\n eta: void 0,\n url: void 0,\n info: t\n };\n }\n async fetchTime(e = {}) {\n const t = await this.publicGetV5MarketTime(e);\n return this.safeInteger(t, \"time\");\n }\n async fetchCurrencies(e = {}) {\n if (!this.checkRequiredCredentials(!1))\n return;\n const t = await this.privateGetV5AssetCoinQueryInfo(e), i = this.safeValue(t, \"result\", []), s = this.safeValue(i, \"rows\", []), n = {};\n for (let r = 0; r < s.length; r++) {\n const a = s[r], o = this.safeString(a, \"coin\"), c = this.safeCurrencyCode(o), u = this.safeString(a, \"name\"), f = this.safeValue(a, \"chains\", []), h = {};\n let l, p, m, y, w = !1, S = !1;\n for (let b = 0; b < f.length; b++) {\n const T = f[b], x = this.safeString(T, \"chain\"), v = this.networkIdToCode(x), _ = this.parseNumber(this.parsePrecision(this.safeString(T, \"minAccuracy\")));\n l = l === void 0 ? _ : Math.min(l, _);\n const V = this.safeInteger(T, \"chainDeposit\") === 1, j = this.safeInteger(T, \"chainWithdraw\") === 1;\n w = V || w, S = j || S;\n const G = this.safeString(T, \"withdrawFee\");\n G !== void 0 && (p = p === void 0 ? G : P.stringMin(G, p));\n const W = this.safeString(T, \"withdrawMin\");\n W !== void 0 && (m = m === void 0 ? W : P.stringMin(W, m));\n const B = this.safeString(T, \"depositMin\");\n B !== void 0 && (y = y === void 0 ? B : P.stringMin(B, y)), h[v] = {\n info: T,\n id: x,\n network: v,\n active: V && j,\n deposit: V,\n withdraw: j,\n fee: this.parseNumber(G),\n precision: _,\n limits: {\n withdraw: {\n min: this.parseNumber(W),\n max: void 0\n },\n deposit: {\n min: this.parseNumber(B),\n max: void 0\n }\n }\n };\n }\n n[c] = {\n info: a,\n code: c,\n id: o,\n name: u,\n active: w && S,\n deposit: w,\n withdraw: S,\n fee: this.parseNumber(p),\n precision: l,\n limits: {\n amount: {\n min: void 0,\n max: void 0\n },\n withdraw: {\n min: this.parseNumber(m),\n max: void 0\n },\n deposit: {\n min: this.parseNumber(y),\n max: void 0\n }\n },\n networks: h\n };\n }\n return n;\n }\n async fetchMarkets(e = {}) {\n const t = [], i = this.safeValue(this.options, \"fetchMarkets\", [\"spot\", \"linear\", \"inverse\"]);\n for (let p = 0; p < i.length; p++) {\n const m = i[p];\n if (m === \"spot\")\n t.push(this.fetchSpotMarkets(e));\n else if (m === \"linear\")\n t.push(this.fetchFutureMarkets({ category: \"linear\" }));\n else if (m === \"inverse\")\n t.push(this.fetchFutureMarkets({ category: \"inverse\" }));\n else if (m === \"option\")\n t.push(this.fetchOptionMarkets({ baseCoin: \"BTC\" })), t.push(this.fetchOptionMarkets({ baseCoin: \"ETH\" })), t.push(this.fetchOptionMarkets({ baseCoin: \"SOL\" }));\n else\n throw new ge(m).exchange(this.id);\n }\n const s = await Promise.all(t), n = this.safeValue(s, 0, []), r = this.safeValue(s, 1, []), a = this.safeValue(s, 2, []), o = this.safeValue(s, 3, []), c = this.safeValue(s, 4, []), u = this.safeValue(s, 5, []), f = this.arrayConcat(r, a);\n let h = this.arrayConcat(o, c);\n h = this.arrayConcat(h, u);\n const l = this.arrayConcat(f, h);\n return this.arrayConcat(n, l);\n }\n async fetchSpotMarkets(e) {\n const t = {\n category: \"spot\"\n }, i = await this.publicGetV5MarketInstrumentsInfo(this.extend(t, e)), s = this.safeValue(i, \"result\", {}), n = this.safeValue(s, \"list\", []), r = [], a = this.parseNumber(\"0.001\"), o = this.parseNumber(\"0.001\");\n for (let c = 0; c < n.length; c++) {\n const u = n[c], f = this.safeString(u, \"symbol\"), h = this.safeString(u, \"baseCoin\"), l = this.safeString(u, \"quoteCoin\"), p = this.safeCurrencyCode(h), m = this.safeCurrencyCode(l), y = p + \"/\" + m, S = this.safeString(u, \"status\") === \"Trading\", b = this.safeValue(u, \"lotSizeFilter\"), T = this.safeValue(u, \"priceFilter\"), x = this.safeNumber(b, \"quotePrecision\");\n r.push({\n id: f,\n symbol: y,\n base: p,\n quote: m,\n settle: void 0,\n baseId: h,\n quoteId: l,\n settleId: void 0,\n type: \"spot\",\n spot: !0,\n margin: void 0,\n swap: !1,\n future: !1,\n option: !1,\n active: S,\n contract: !1,\n linear: void 0,\n inverse: void 0,\n taker: a,\n maker: o,\n contractSize: void 0,\n expiry: void 0,\n expiryDatetime: void 0,\n strike: void 0,\n optionType: void 0,\n precision: {\n amount: this.safeNumber(b, \"basePrecision\"),\n price: this.safeNumber(T, \"tickSize\", x)\n },\n limits: {\n leverage: {\n min: this.parseNumber(\"1\"),\n max: void 0\n },\n amount: {\n min: this.safeNumber(b, \"minOrderQty\"),\n max: this.safeNumber(b, \"maxOrderQty\")\n },\n price: {\n min: void 0,\n max: void 0\n },\n cost: {\n min: this.safeNumber(b, \"minOrderAmt\"),\n max: this.safeNumber(b, \"maxOrderAmt\")\n }\n },\n created: void 0,\n info: u\n });\n }\n return r;\n }\n async fetchFutureMarkets(e) {\n e = this.extend(e), e.limit = 1e3;\n const t = await this.publicGetV5MarketInstrumentsInfo(e), i = this.safeValue(t, \"result\", {});\n let s = this.safeValue(i, \"list\", []), n = this.safeString(i, \"nextPageCursor\");\n if (n !== void 0)\n for (; n !== void 0; ) {\n e.cursor = n;\n const o = await this.publicGetV5MarketInstrumentsInfo(e), c = this.safeValue(o, \"result\", {}), u = this.safeValue(c, \"list\", []);\n if (u.length === 0)\n break;\n s = this.arrayConcat(u, s), n = this.safeString(c, \"nextPageCursor\");\n }\n const r = [];\n let a = this.safeString(i, \"category\");\n for (let o = 0; o < s.length; o++) {\n const c = s[o];\n a === void 0 && (a = this.safeString(c, \"category\"));\n const u = a === \"linear\", f = a === \"inverse\", h = this.safeString(c, \"contractType\"), l = h === \"InverseFutures\", p = h === \"LinearFutures\", m = h === \"LinearPerpetual\", y = h === \"InversePerpetual\", w = this.safeString(c, \"symbol\"), S = this.safeString(c, \"baseCoin\"), b = this.safeString(c, \"quoteCoin\"), T = u ? b : S, x = this.safeString(c, \"settleCoin\", T), v = this.safeCurrencyCode(S), _ = this.safeCurrencyCode(b);\n let V;\n m && x === \"USD\" ? V = \"USDC\" : V = this.safeCurrencyCode(x);\n let j = v + \"/\" + _;\n const G = this.safeValue(c, \"lotSizeFilter\", {}), W = this.safeValue(c, \"priceFilter\", {}), B = this.safeValue(c, \"leverageFilter\", {}), Q = this.safeString(c, \"status\"), se = m || y, $ = l || p;\n let te;\n se ? te = \"swap\" : $ && (te = \"future\");\n let E;\n se || (E = this.omitZero(this.safeString(c, \"deliveryTime\")), E !== void 0 && (E = parseInt(E)));\n const N = this.iso8601(E);\n j = j + \":\" + V, E !== void 0 && (j = j + \"-\" + this.yymmdd(E));\n const L = f ? this.safeNumber2(G, \"minTradingQty\", \"minOrderQty\") : this.parseNumber(\"1\");\n r.push({\n id: w,\n symbol: j,\n base: v,\n quote: _,\n settle: V,\n baseId: S,\n quoteId: b,\n settleId: x,\n type: te,\n spot: !1,\n margin: void 0,\n swap: se,\n future: $,\n option: !1,\n active: Q === \"Trading\",\n contract: !0,\n linear: u,\n inverse: f,\n taker: this.safeNumber(c, \"takerFee\", this.parseNumber(\"0.0006\")),\n maker: this.safeNumber(c, \"makerFee\", this.parseNumber(\"0.0001\")),\n contractSize: L,\n expiry: E,\n expiryDatetime: N,\n strike: void 0,\n optionType: void 0,\n precision: {\n amount: this.safeNumber(G, \"qtyStep\"),\n price: this.safeNumber(W, \"tickSize\")\n },\n limits: {\n leverage: {\n min: this.safeNumber(B, \"minLeverage\"),\n max: this.safeNumber(B, \"maxLeverage\")\n },\n amount: {\n min: this.safeNumber2(G, \"minTradingQty\", \"minOrderQty\"),\n max: this.safeNumber2(G, \"maxTradingQty\", \"maxOrderQty\")\n },\n price: {\n min: this.safeNumber(W, \"minPrice\"),\n max: this.safeNumber(W, \"maxPrice\")\n },\n cost: {\n min: void 0,\n max: void 0\n }\n },\n created: this.safeInteger(c, \"launchTime\"),\n info: c\n });\n }\n return r;\n }\n async fetchOptionMarkets(e) {\n const t = {\n category: \"option\"\n }, i = await this.publicGetV5MarketInstrumentsInfo(this.extend(t, e)), s = this.safeValue(i, \"result\", {});\n let n = this.safeValue(s, \"list\", []);\n if (this.options.loadAllOptions) {\n t.limit = 1e3;\n let a = this.safeString(s, \"nextPageCursor\");\n if (a !== void 0)\n for (; a !== void 0; ) {\n t.cursor = a;\n const o = await this.publicGetV5MarketInstrumentsInfo(this.extend(t, e)), c = this.safeValue(o, \"result\", {}), u = this.safeValue(c, \"list\", []);\n if (u.length === 0)\n break;\n n = this.arrayConcat(u, n), a = this.safeString(c, \"nextPageCursor\");\n }\n }\n const r = [];\n for (let a = 0; a < n.length; a++) {\n const o = n[a], c = this.safeString(o, \"symbol\"), u = this.safeString(o, \"baseCoin\"), f = this.safeString(o, \"quoteCoin\"), h = this.safeString(o, \"settleCoin\"), l = this.safeCurrencyCode(u), p = this.safeCurrencyCode(f), m = this.safeCurrencyCode(h), y = this.safeValue(o, \"lotSizeFilter\", {}), w = this.safeValue(o, \"priceFilter\", {}), S = this.safeString(o, \"status\"), b = this.safeInteger(o, \"deliveryTime\"), T = c.split(\"-\"), x = this.safeString(T, 2), v = this.safeString(T, 3), _ = S === \"Trading\";\n (_ || this.options.loadAllOptions || this.options.loadExpiredOptions) && r.push({\n id: c,\n symbol: l + \"/\" + p + \":\" + m + \"-\" + this.yymmdd(b) + \"-\" + x + \"-\" + v,\n base: l,\n quote: p,\n settle: m,\n baseId: u,\n quoteId: f,\n settleId: h,\n type: \"option\",\n spot: !1,\n margin: !1,\n swap: !1,\n future: !1,\n option: !0,\n active: _,\n contract: !0,\n linear: void 0,\n inverse: void 0,\n taker: this.safeNumber(o, \"takerFee\", this.parseNumber(\"0.0006\")),\n maker: this.safeNumber(o, \"makerFee\", this.parseNumber(\"0.0001\")),\n contractSize: this.safeNumber(y, \"minOrderQty\"),\n expiry: b,\n expiryDatetime: this.iso8601(b),\n strike: this.parseNumber(x),\n optionType: this.safeStringLower(o, \"optionsType\"),\n precision: {\n amount: this.safeNumber(y, \"qtyStep\"),\n price: this.safeNumber(w, \"tickSize\")\n },\n limits: {\n leverage: {\n min: void 0,\n max: void 0\n },\n amount: {\n min: this.safeNumber(y, \"minOrderQty\"),\n max: this.safeNumber(y, \"maxOrderQty\")\n },\n price: {\n min: this.safeNumber(w, \"minPrice\"),\n max: this.safeNumber(w, \"maxPrice\")\n },\n cost: {\n min: void 0,\n max: void 0\n }\n },\n created: this.safeInteger(o, \"launchTime\"),\n info: o\n });\n }\n return r;\n }\n parseTicker(e, t = void 0) {\n const i = this.safeString(e, \"openInterestValue\") === void 0, s = this.safeInteger(e, \"time\"), n = this.safeString(e, \"symbol\"), r = i ? \"spot\" : \"contract\";\n t = this.safeMarket(n, t, void 0, r);\n const a = this.safeSymbol(n, t, void 0, r), o = this.safeString(e, \"lastPrice\"), c = this.safeString(e, \"prevPrice24h\");\n let u = this.safeString(e, \"price24hPcnt\");\n u = P.stringMul(u, \"100\");\n const f = this.safeString(e, \"turnover24h\"), h = this.safeString(e, \"volume24h\"), l = this.safeString(e, \"bid1Price\"), p = this.safeString(e, \"ask1Price\"), m = this.safeString(e, \"highPrice24h\"), y = this.safeString(e, \"lowPrice24h\");\n return this.safeTicker({\n symbol: a,\n timestamp: s,\n datetime: this.iso8601(s),\n high: m,\n low: y,\n bid: l,\n bidVolume: this.safeString2(e, \"bidSize\", \"bid1Size\"),\n ask: p,\n askVolume: this.safeString2(e, \"askSize\", \"ask1Size\"),\n vwap: void 0,\n open: c,\n close: o,\n last: o,\n previousClose: void 0,\n change: void 0,\n percentage: u,\n average: void 0,\n baseVolume: h,\n quoteVolume: f,\n info: e\n }, t);\n }\n async fetchTicker(e, t = {}) {\n if (e === void 0)\n throw new g(\"fetchTicker() requires a symbol argument\").exchange(this.id);\n await this.loadMarkets();\n const i = this.market(e), s = {\n symbol: i.id\n // 'baseCoin': '', Base coin. For option only\n // 'expDate': '', Expiry date. e.g., 25DEC22. For option only\n };\n i.spot ? s.category = \"spot\" : i.option ? s.category = \"option\" : i.linear ? s.category = \"linear\" : i.inverse && (s.category = \"inverse\");\n const n = await this.publicGetV5MarketTickers(this.extend(s, t)), r = this.safeValue(n, \"result\", []), a = this.safeValue(r, \"list\", []), o = this.safeValue(a, 0);\n return this.parseTicker(o, i);\n }\n async fetchTickers(e = void 0, t = {}) {\n await this.loadMarkets();\n let i, s;\n if (e !== void 0) {\n s = [];\n const f = this.handleMarketTypeAndParams(\"fetchTickers\", void 0, t)[0];\n let h;\n for (let l = 0; l < e.length; l++) {\n const p = e[l];\n if (p.indexOf(\"/\") === -1 ? i = this.safeMarket(p, void 0, void 0, f) : i = this.market(p), h === void 0)\n h = i.type;\n else if (i.type !== h)\n throw new g(\"fetchTickers can only accept a list of symbols of the same type\").exchange(this.id);\n s.push(i.symbol);\n }\n }\n const n = {\n // 'symbol': market['id'],\n // 'baseCoin': '', // Base coin. For option only\n // 'expDate': '', // Expiry date. e.g., 25DEC22. For option only\n };\n let r;\n if ([r, t] = this.handleMarketTypeAndParams(\"fetchTickers\", i, t), r === \"spot\")\n n.category = \"spot\";\n else if (r === \"swap\" || r === \"future\") {\n let u;\n [u, t] = this.handleSubTypeAndParams(\"fetchTickers\", i, t, \"linear\"), n.category = u;\n } else\n r === \"option\" && (n.category = \"option\");\n const a = await this.publicGetV5MarketTickers(this.extend(n, t)), o = this.safeValue(a, \"result\", {}), c = this.safeValue(o, \"list\", []);\n return this.parseTickers(c, s);\n }\n parseOHLCV(e, t = void 0) {\n const i = t.inverse ? 6 : 5;\n return [\n this.safeInteger(e, 0),\n this.safeNumber(e, 1),\n this.safeNumber(e, 2),\n this.safeNumber(e, 3),\n this.safeNumber(e, 4),\n this.safeNumber(e, i)\n ];\n }\n async fetchOHLCV(e, t = \"1m\", i = void 0, s = void 0, n = {}) {\n if (e === void 0)\n throw new g(\"fetchOHLCV() requires a symbol argument\").exchange(this.id);\n await this.loadMarkets();\n let r = !1;\n if ([r, n] = this.handleOptionAndParams(n, \"fetchOHLCV\", \"paginate\"), r)\n return await this.fetchPaginatedCallDeterministic(\"fetchOHLCV\", e, i, s, t, n, 1e3);\n const a = this.market(e);\n let o = {\n symbol: a.id\n };\n s === void 0 && (s = 200), i !== void 0 && (o.start = i), s !== void 0 && (o.limit = s), [o, n] = this.handleUntilOption(\"end\", o, n), o.interval = this.safeString(this.timeframes, t, t);\n let c;\n if (a.spot)\n o.category = \"spot\", c = await this.publicGetV5MarketKline(this.extend(o, n));\n else {\n const h = this.safeString(n, \"price\");\n if (n = this.omit(n, \"price\"), a.linear)\n o.category = \"linear\";\n else if (a.inverse)\n o.category = \"inverse\";\n else\n throw new ge(a.type).exchange(this.id);\n h === \"mark\" ? c = await this.publicGetV5MarketMarkPriceKline(this.extend(o, n)) : h === \"index\" ? c = await this.publicGetV5MarketIndexPriceKline(this.extend(o, n)) : h === \"premiumIndex\" ? c = await this.publicGetV5MarketPremiumIndexPriceKline(this.extend(o, n)) : c = await this.publicGetV5MarketKline(this.extend(o, n));\n }\n const u = this.safeValue(c, \"result\", {}), f = this.safeValue(u, \"list\", []);\n return this.parseOHLCVs(f, a, t, i, s);\n }\n parseTrade(e, t = void 0) {\n const i = this.safeStringN(e, [\"execId\", \"id\", \"tradeId\"]), s = this.safeString(e, \"symbol\");\n let n = \"contract\";\n t !== void 0 && (n = t.type);\n const r = this.safeString(e, \"category\");\n r !== void 0 && r === \"spot\" && (n = \"spot\"), t = this.safeMarket(s, t, void 0, n);\n const a = t.symbol, o = this.safeStringN(e, [\"execQty\", \"orderQty\", \"size\"]), c = this.safeStringN(e, [\"execPrice\", \"orderPrice\", \"price\"]), u = this.safeString(e, \"execValue\"), f = this.safeIntegerN(e, [\"time\", \"execTime\", \"tradeTime\"]);\n let h = this.safeStringLower(e, \"side\");\n if (h === void 0) {\n const S = this.safeInteger(e, \"isBuyer\");\n S !== void 0 && (h = S ? \"buy\" : \"sell\");\n }\n const l = this.safeValue(e, \"isMaker\");\n let p;\n if (l !== void 0)\n p = l ? \"maker\" : \"taker\";\n else {\n let S = this.safeString(e, \"lastLiquidityInd\");\n S === \"UNKNOWN\" && (S = void 0), S !== void 0 && (S === \"TAKER\" || S === \"MAKER\" ? p = S.toLowerCase() : p = S === \"AddedLiquidity\" ? \"maker\" : \"taker\");\n }\n let m = this.safeStringLower(e, \"orderType\");\n m === \"unknown\" && (m = void 0);\n const y = this.safeString(e, \"execFee\");\n let w;\n if (y !== void 0) {\n const S = this.safeString(e, \"feeRate\");\n let b;\n t.spot ? P.stringGt(y, \"0\") ? h === \"buy\" ? b = t.base : b = t.quote : h === \"buy\" ? b = t.quote : b = t.base : b = t.inverse ? t.base : t.settle, w = {\n cost: y,\n currency: b,\n rate: S\n };\n }\n return this.safeTrade({\n id: i,\n info: e,\n timestamp: f,\n datetime: this.iso8601(f),\n symbol: a,\n order: this.safeString(e, \"orderId\"),\n type: m,\n side: h,\n takerOrMaker: p,\n price: c,\n amount: o,\n cost: u,\n fee: w\n }, t);\n }\n async fetchTrades(e, t = void 0, i = void 0, s = {}) {\n if (e === void 0)\n throw new g(\"fetchTrades() requires a symbol argument\").exchange(this.id);\n await this.loadMarkets();\n const n = this.market(e), r = {\n symbol: n.id\n // 'baseCoin': '', // Base coin. For option only. If not passed, return BTC data by default\n // 'optionType': 'Call', // Option type. Call or Put. For option only\n };\n i !== void 0 && (r.limit = i);\n let a;\n [a, s] = this.getBybitType(\"fetchTrades\", n, s), r.category = a;\n const o = await this.publicGetV5MarketRecentTrade(this.extend(r, s)), c = this.safeValue(o, \"result\", {}), u = this.safeValue(c, \"list\", []);\n return this.parseTrades(u, n, t, i);\n }\n async fetchOrderBook(e, t = void 0, i = {}) {\n if (e === void 0)\n throw new g(\"fetchOrderBook() requires a symbol argument\").exchange(this.id);\n await this.loadMarkets();\n const s = this.market(e), n = {\n symbol: s.id\n };\n let r = 25;\n s.spot ? (r = 50, n.category = \"spot\") : s.option ? n.category = \"option\" : s.linear ? n.category = \"linear\" : s.inverse && (n.category = \"inverse\"), n.limit = t !== void 0 ? t : r;\n const a = await this.publicGetV5MarketOrderbook(this.extend(n, i)), o = this.safeValue(a, \"result\", []), c = this.safeInteger(o, \"ts\");\n return this.parseOrderBook(o, e, c, \"b\", \"a\");\n }\n parseBalance(e) {\n const t = this.safeInteger(e, \"time\"), i = {\n info: e,\n timestamp: t,\n datetime: this.iso8601(t)\n }, s = this.safeValue(e, \"result\", {}), n = this.safeValueN(s, [\"loanAccountList\", \"list\", \"balance\"]);\n if (n === void 0) {\n const r = \"USDC\", a = this.account();\n a.free = this.safeString(s, \"availableBalance\"), a.total = this.safeString(s, \"walletBalance\"), i[r] = a;\n } else\n for (let r = 0; r < n.length; r++) {\n const a = n[r], o = this.safeString(a, \"accountType\");\n if (o === \"UNIFIED\" || o === \"CONTRACT\" || o === \"SPOT\") {\n const c = this.safeValue(a, \"coin\");\n for (let u = 0; u < c.length; u++) {\n const f = this.account(), h = c[u], l = this.safeString(h, \"borrowAmount\"), p = this.safeString(h, \"accruedInterest\");\n l !== void 0 && p !== void 0 && (f.debt = P.stringAdd(l, p)), f.total = this.safeString(h, \"walletBalance\"), f.free = this.safeString2(h, \"availableToWithdraw\", \"free\");\n const m = this.safeString(h, \"coin\"), y = this.safeCurrencyCode(m);\n i[y] = f;\n }\n } else {\n const c = this.account(), u = this.safeString(a, \"loan\"), f = this.safeString(a, \"interest\");\n u !== void 0 && f !== void 0 && (c.debt = P.stringAdd(u, f)), c.total = this.safeString2(a, \"total\", \"walletBalance\"), c.free = this.safeStringN(a, [\"free\", \"availableBalanceWithoutConvert\", \"availableBalance\", \"transferBalance\"]), c.used = this.safeString(a, \"locked\");\n const h = this.safeStringN(a, [\"tokenId\", \"coin\", \"currencyCoin\"]), l = this.safeCurrencyCode(h);\n i[l] = c;\n }\n }\n return this.safeBalance(i);\n }\n async fetchBalance(e = {}) {\n const t = e.methodCallId;\n await this.loadMarkets(!!t, { methodCallId: t });\n const i = {}, [s, n] = await this.isUnifiedEnabled({ methodCallId: t }), r = s || n;\n let a;\n [a, e] = this.handleMarketTypeAndParams(\"fetchBalance\", void 0, e);\n const o = a === \"spot\", c = a === \"swap\";\n r ? (o || c) && (a = \"unified\") : c && (a = \"contract\");\n const u = this.safeValue(this.options, \"accountsByType\", {}), f = this.safeStringUpper(u, a, a);\n let h;\n [h, e] = this.handleMarginModeAndParams(\"fetchBalance\", e);\n let l;\n const p = this.safeString(e, \"memberId\") !== void 0;\n return o && h !== void 0 ? l = await this.privateGetV5SpotCrossMarginTradeAccount(this.extend(i, e)) : f === \"FUND\" || p ? (i.accountType = f, l = await this.privateGetV5AssetTransferQueryAccountCoinsBalance(this.extend(i, e))) : (i.accountType = f, l = await this.privateGetV5AccountWalletBalance(this.extend(i, e))), this.parseBalance(l);\n }\n parseOrderStatus(e) {\n const t = {\n // v3 spot\n NEW: \"open\",\n PARTIALLY_FILLED: \"open\",\n FILLED: \"closed\",\n CANCELED: \"canceled\",\n PENDING_CANCEL: \"open\",\n PENDING_NEW: \"open\",\n REJECTED: \"rejected\",\n PARTIALLY_FILLED_CANCELLED: \"closed\",\n // v3 contract / unified margin / unified account\n Created: \"open\",\n New: \"open\",\n Rejected: \"rejected\",\n PartiallyFilled: \"open\",\n PartiallyFilledCanceled: \"closed\",\n Filled: \"closed\",\n PendingCancel: \"open\",\n Cancelled: \"canceled\",\n // below this line the status only pertains to conditional orders\n Untriggered: \"open\",\n Deactivated: \"canceled\",\n Triggered: \"open\",\n Active: \"open\"\n };\n return this.safeString(t, e, e);\n }\n parseTimeInForce(e) {\n const t = {\n GoodTillCancel: \"GTC\",\n ImmediateOrCancel: \"IOC\",\n FillOrKill: \"FOK\",\n PostOnly: \"PO\"\n };\n return this.safeString(t, e, e);\n }\n parseOrder(e, t = void 0) {\n const i = this.safeString(e, \"code\");\n if (i !== void 0 && i !== \"0\") {\n const N = this.safeString(e, \"category\") === \"spot\" ? \"spot\" : \"contract\";\n return this.safeOrder({\n info: e,\n status: \"rejected\",\n id: this.safeString(e, \"orderId\"),\n clientOrderId: this.safeString(e, \"orderLinkId\"),\n symbol: this.safeSymbol(this.safeString(e, \"symbol\"), void 0, void 0, N)\n });\n }\n const s = this.safeString(e, \"symbol\"), n = \"tpslMode\" in e;\n let r;\n t !== void 0 ? r = t.type : r = n ? \"contract\" : \"spot\", t = this.safeMarket(s, t, void 0, r);\n const a = t.symbol, o = this.safeInteger2(e, \"createdTime\", \"createdAt\"), c = this.safeString(e, \"orderId\"), u = this.safeStringLower(e, \"orderType\"), f = this.safeString(e, \"price\"), h = this.safeString(e, \"cumExecValue\"), l = this.safeString(e, \"cumExecQty\"), p = this.safeString(e, \"leavesQty\"), m = this.safeInteger2(e, \"updatedTime\", \"updatedAt\"), y = this.safeString(e, \"orderStatus\"), w = this.parseOrderStatus(y), S = this.safeStringLower(e, \"side\");\n let b = this.safeString(e, \"qty\");\n const T = this.omitZero(this.safeString(e, \"avgPrice\"));\n S === \"buy\" && (b = P.stringDiv(b, T));\n let x;\n const v = this.safeString(e, \"cumExecFee\");\n if (v !== void 0) {\n let E;\n t.spot ? P.stringGt(v, \"0\") ? S === \"buy\" ? E = t.base : E = t.quote : S === \"buy\" ? E = t.quote : E = t.base : E = t.inverse ? t.base : t.settle, x = {\n cost: v,\n currency: E\n };\n }\n let _ = this.safeString(e, \"orderLinkId\");\n _ !== void 0 && _.length < 1 && (_ = void 0);\n const V = this.safeString(e, \"timeInForce\"), j = this.parseTimeInForce(V), G = this.omitZero(this.safeString(e, \"triggerPrice\")), W = this.safeValue(e, \"reduceOnly\");\n let B = this.omitZero(this.safeString(e, \"takeProfit\")), Q = this.omitZero(this.safeString(e, \"stopLoss\"));\n const $ = this.safeString(e, \"triggerDirection\") === \"1\", te = G !== void 0 && W;\n return Q === void 0 && te && ($ && S === \"buy\" && (Q = G), !$ && S === \"sell\" && (Q = G)), B === void 0 && te && ($ && S === \"sell\" && (B = G), !$ && S === \"buy\" && (B = G)), this.safeOrder({\n info: e,\n id: c,\n clientOrderId: _,\n timestamp: o,\n datetime: this.iso8601(o),\n lastTradeTimestamp: m,\n lastUpdateTimestamp: m,\n symbol: a,\n type: u,\n timeInForce: j,\n postOnly: void 0,\n reduceOnly: this.safeValue(e, \"reduceOnly\"),\n side: S,\n price: f,\n stopPrice: G,\n triggerPrice: G,\n takeProfitPrice: B,\n stopLossPrice: Q,\n amount: b,\n cost: h,\n average: T,\n filled: l,\n remaining: p,\n status: w,\n fee: x,\n trades: void 0\n }, t);\n }\n async fetchOrder(e, t = void 0, i = {}) {\n if (t === void 0)\n throw new g(\"fetchOrder() requires a symbol argument\").exchange(this.id);\n await this.loadMarkets();\n const s = {\n orderId: e\n }, n = await this.fetchOrders(t, void 0, void 0, this.extend(s, i)), r = n.length;\n if (r === 0) {\n const o = (await this.fetchOpenOrders(t, void 0, void 0, i)).find((f) => f.id === e);\n if (o !== void 0)\n return o;\n const u = this.safeBoolN(i, [\"trigger\", \"stop\"], !1) ? \"\" : 'If you are trying to fetch SL/TP conditional order, you might try setting params[\"trigger\"] = true';\n throw new Se().addMessage(\"Order \" + e.toString() + \" was not found.\" + u);\n }\n if (r > 1)\n throw new k().addMessage(this.id + \" returned more than one order\").exchange(this.id);\n return this.safeValue(n, 0);\n }\n async createMarketBuyOrderWithCost(e, t, i = {}) {\n await this.loadMarkets();\n const s = this.market(e);\n if (!s.spot)\n throw new ge(s.type).addMessage(\"createMarketBuyOrderWithCost() supports spot orders only\").exchange(this.id);\n return await this.createOrder(e, \"market\", \"buy\", t, 1, i);\n }\n async createMarketSellOrderWithCost(e, t, i = {}) {\n if (await this.loadMarkets(), !(await this.isUnifiedEnabled())[1])\n throw new k().addMessage(\"createMarketSellOrderWithCost() supports UTA accounts only\").exchange(this.id);\n const r = this.market(e);\n if (!r.spot)\n throw new ge(r.type).addMessage(\"createMarketSellOrderWithCost() supports spot orders only\").exchange(this.id);\n return await this.createOrder(e, \"market\", \"sell\", t, 1, i);\n }\n async createOrder(e, t, i, s, n = void 0, r = {}) {\n await this.loadMarkets();\n const a = this.market(e), [o, c] = await this.isUnifiedEnabled(), u = o || c;\n if (a.settle === \"USDC\" && !u)\n return await this.createUsdcOrder(e, t, i, s, n, r);\n const l = this.safeString2(r, \"trailingAmount\", \"trailingStop\") !== void 0, p = this.createOrderRequest(e, t, i, s, n, r, c);\n let m;\n l ? m = await this.privatePostV5PositionTradingStop(p) : m = await this.privatePostV5OrderCreate(p);\n const y = this.safeValue(m, \"result\", {});\n return this.parseOrder(y, a);\n }\n createOrderRequest(e, t, i, s, n = void 0, r = {}, a = !0) {\n const o = this.market(e);\n e = o.symbol;\n const c = t.toLowerCase();\n if (n === void 0 && c === \"limit\")\n throw new g(\"createOrder requires a price argument for limit orders\").exchange(this.id);\n const u = {\n symbol: o.id,\n side: this.capitalize(i),\n orderType: this.capitalize(c)\n // limit or market\n // 'timeInForce': 'GTC', // IOC, FOK, PostOnly\n // 'takeProfit': 123.45, // take profit price, only take effect upon opening the position\n // 'stopLoss': 123.45, // stop loss price, only take effect upon opening the position\n // 'reduceOnly': false, // reduce only, required for linear orders\n // when creating a closing order, bybit recommends a True value for\n // closeOnTrigger to avoid failing due to insufficient available margin\n // 'closeOnTrigger': false, required for linear orders\n // 'orderLinkId': 'string', // unique client order id, max 36 characters\n // 'triggerPrice': 123.46, // trigger price, required for conditional orders\n // 'triggerBy': 'MarkPrice', // IndexPrice, MarkPrice, LastPrice\n // 'tpTriggerby': 'MarkPrice', // IndexPrice, MarkPrice, LastPrice\n // 'slTriggerBy': 'MarkPrice', // IndexPrice, MarkPrice, LastPrice\n // 'mmp': false // market maker protection\n // 'positionIdx': 0, // Position mode. Unified account has one-way mode only (0)\n // 'triggerDirection': 1, // Conditional order param. Used to identify the expected direction of the conditional order. 1: triggered when market price rises to triggerPrice 2: triggered when market price falls to triggerPrice\n // Valid for spot only.\n // 'isLeverage': 0, // Whether to borrow. 0(default): false, 1: true\n // 'orderFilter': 'Order' // Order,tpslOrder. If not passed, Order by default\n // Valid for option only.\n // 'orderIv': '0', // Implied volatility; parameters are passed according to the real value; for example, for 10%, 0.1 is passed\n };\n o.spot ? u.category = \"spot\" : o.linear ? u.category = \"linear\" : o.inverse ? u.category = \"inverse\" : o.option && (u.category = \"option\");\n const f = this.safeString(r, \"cost\");\n if (r = this.omit(r, \"cost\"), o.spot && c === \"market\" && i === \"sell\" && a)\n u.marketUnit = \"baseCoin\", u.qty = this.amountToPrecision(e, s);\n else if (o.spot && c === \"market\" && i === \"buy\") {\n let se = !0;\n if ([se, r] = this.handleOptionAndParams(r, \"createOrder\", \"createMarketBuyOrderRequiresPrice\", !0), se) {\n if (n === void 0 && f === void 0)\n throw new g(\"createOrder() requires the price argument for market buy orders to calculate the total cost to spend (amount * price), alternatively set the createMarketBuyOrderRequiresPrice option or param to false and pass the cost to spend in the amount argument\").exchange(this.id);\n {\n const $ = this.numberToString(s), te = this.numberToString(n), E = P.stringMul($, te), N = f !== void 0 ? f : E;\n u.qty = this.costToPrecision(e, N);\n }\n } else\n u.qty = this.costToPrecision(e, s);\n } else\n u.qty = this.amountToPrecision(e, s);\n const h = c === \"market\";\n c === \"limit\" && (u.price = this.priceToPrecision(e, n));\n const p = this.safeStringLower(r, \"timeInForce\");\n let m;\n [m, r] = this.handlePostOnly(h, p === \"postonly\", r), m ? u.timeInForce = \"PostOnly\" : p === \"gtc\" ? u.timeInForce = \"GTC\" : p === \"fok\" ? u.timeInForce = \"FOK\" : p === \"ioc\" && (u.timeInForce = \"IOC\");\n let y = this.safeValue2(r, \"triggerPrice\", \"stopPrice\");\n const w = this.safeValue(r, \"stopLossPrice\"), S = this.safeValue(r, \"takeProfitPrice\"), b = this.safeValue(r, \"stopLoss\"), T = this.safeValue(r, \"takeProfit\"), x = this.safeString2(r, \"trailingTriggerPrice\", \"activePrice\", this.numberToString(n)), v = this.safeString2(r, \"trailingAmount\", \"trailingStop\"), _ = v !== void 0, V = w !== void 0, j = S !== void 0, G = b !== void 0, W = T !== void 0, B = i === \"buy\";\n if (_)\n x !== void 0 && (u.activePrice = this.priceToPrecision(e, x)), u.trailingStop = v;\n else if (y !== void 0) {\n const se = this.safeString(r, \"triggerDirection\");\n if (r = this.omit(r, [\"triggerPrice\", \"stopPrice\", \"triggerDirection\"]), o.spot) {\n if (se !== void 0)\n throw new g(\"createOrder() : trigger order does not support triggerDirection for spot markets yet\").exchange(this.id);\n } else {\n if (se === void 0)\n throw new g('stop/trigger orders require a triggerDirection parameter, either \"above\" or \"below\" to determine the direction of the trigger.').exchange(this.id);\n const $ = se === \"above\" || se === \"1\";\n u.triggerDirection = $ ? 1 : 2;\n }\n u.triggerPrice = this.priceToPrecision(e, y);\n } else\n (V || j) && (B ? u.triggerDirection = V ? 1 : 2 : u.triggerDirection = V ? 2 : 1, y = V ? w : S, u.triggerPrice = this.priceToPrecision(e, y), u.reduceOnly = !0);\n if (G || W) {\n if (G) {\n const se = this.safeValue2(b, \"triggerPrice\", \"stopPrice\", b);\n u.stopLoss = this.priceToPrecision(e, se);\n const $ = this.safeValue(b, \"price\");\n $ !== void 0 && (u.tpslMode = \"Partial\", u.slOrderType = \"Limit\", u.slLimitPrice = this.priceToPrecision(e, $));\n }\n if (W) {\n const se = this.safeValue2(T, \"triggerPrice\", \"stopPrice\", T);\n u.takeProfit = this.priceToPrecision(e, se);\n const $ = this.safeValue(T, \"price\");\n $ !== void 0 && (u.tpslMode = \"Partial\", u.tpOrderType = \"Limit\", u.tpLimitPrice = this.priceToPrecision(e, $));\n }\n }\n o.spot && (y !== void 0 ? u.orderFilter = \"StopOrder\" : (w !== void 0 || S !== void 0 || G || W) && (u.orderFilter = \"tpslOrder\"));\n const Q = this.safeString(r, \"clientOrderId\");\n return Q !== void 0 ? u.orderLinkId = Q : o.option && (u.orderLinkId = this.uuid16()), r = this.omit(r, [\"stopPrice\", \"timeInForce\", \"stopLossPrice\", \"takeProfitPrice\", \"postOnly\", \"clientOrderId\", \"triggerPrice\", \"stopLoss\", \"takeProfit\", \"trailingAmount\", \"trailingTriggerPrice\"]), this.extend(u, r);\n }\n async createOrders(e, t = {}) {\n await this.loadMarkets();\n const s = (await this.isUnifiedEnabled())[1], n = [], r = [];\n for (let y = 0; y < e.length; y++) {\n const w = e[y], S = this.safeString(w, \"symbol\");\n r.push(S);\n const b = this.safeString(w, \"type\"), T = this.safeString(w, \"side\"), x = this.safeValue(w, \"amount\"), v = this.safeValue(w, \"price\"), _ = this.safeValue(w, \"params\", {}), V = this.createOrderRequest(S, b, T, x, v, _, s);\n n.push(V);\n }\n const a = this.marketSymbols(r, void 0, !1, !0, !0), o = this.market(a[0]);\n let c;\n if ([c, t] = this.getBybitType(\"createOrders\", o, t), c === \"spot\" || c === \"inverse\")\n throw new g(\"createOrders does not allow spot or inverse orders\").exchange(this.id);\n const u = {\n category: c,\n request: n\n }, f = await this.privatePostV5OrderCreateBatch(this.extend(u, t)), h = this.safeValue(f, \"result\", {}), l = this.safeValue(h, \"list\", []), p = this.safeValue(f, \"retExtInfo\", {}), m = this.safeValue(p, \"list\", []);\n for (let y = 0; y < m.length; y++) {\n const w = m[y];\n this.safeInteger(w, \"code\") !== 0 && (l[y] = this.extend(l[y], w));\n }\n return this.parseOrders(l);\n }\n async createUsdcOrder(e, t, i, s, n = void 0, r = {}) {\n await this.loadMarkets();\n const a = this.market(e);\n if (t === \"market\")\n throw new k().addMessage(\"createOrder does not allow market orders for \" + e + \" markets\").exchange(this.id);\n const o = t.toLowerCase();\n if (n === void 0 && o === \"limit\")\n throw new g(\"createOrder requires a price argument for limit orders\").exchange(this.id);\n const c = {\n symbol: a.id,\n side: this.capitalize(i),\n orderType: this.capitalize(o),\n timeInForce: \"GoodTillCancel\",\n orderQty: this.amountToPrecision(e, s)\n // 'takeProfit': 123.45, // take profit price, only take effect upon opening the position\n // 'stopLoss': 123.45, // stop loss price, only take effect upon opening the position\n // 'reduceOnly': false, // reduce only, required for linear orders\n // when creating a closing order, bybit recommends a True value for\n // closeOnTrigger to avoid failing due to insufficient available margin\n // 'closeOnTrigger': false, required for linear orders\n // 'orderLinkId': 'string', // unique client order id, max 36 characters\n // 'triggerPrice': 123.45, // trigger price, required for conditional orders\n // 'trigger_by': 'MarkPrice', // IndexPrice, MarkPrice\n // 'tptriggerby': 'MarkPrice', // IndexPrice, MarkPrice\n // 'slTriggerBy': 'MarkPrice', // IndexPrice, MarkPrice\n // 'orderFilter': 'Order' or 'StopOrder'\n // 'mmp': false // market maker protection\n }, u = o === \"market\";\n o === \"limit\" !== void 0 && (c.orderPrice = this.priceToPrecision(e, n));\n const h = this.safeString(r, \"time_in_force\"), l = this.safeStringLower(r, \"timeInForce\");\n if (this.isPostOnly(u, h === \"PostOnly\", r) ? c.time_in_force = \"PostOnly\" : l === \"gtc\" ? c.time_in_force = \"GoodTillCancel\" : l === \"fok\" ? c.time_in_force = \"FillOrKill\" : l === \"ioc\" && (c.time_in_force = \"ImmediateOrCancel\"), a.swap) {\n const S = this.safeValue2(r, \"stopPrice\", \"triggerPrice\"), b = this.safeValue(r, \"stopLossPrice\", S), T = this.safeValue(r, \"takeProfitPrice\"), x = this.safeValue(r, \"stopLoss\"), v = this.safeValue(r, \"takeProfit\"), _ = b !== void 0, V = T !== void 0, j = x !== void 0, G = v !== void 0;\n if (_ || V) {\n c.orderFilter = \"StopOrder\", c.trigger_by = \"LastPrice\";\n const B = _ ? b : T, Q = this.priceToPrecision(e, B);\n c.triggerPrice = Q;\n const se = this.numberToString(a.precision.price);\n c.basePrice = _ ? P.stringSub(Q, se) : P.stringAdd(Q, se);\n } else if (j || G) {\n if (j) {\n const B = this.safeValue2(x, \"triggerPrice\", \"stopPrice\", x);\n c.stopLoss = this.priceToPrecision(e, B);\n }\n if (G) {\n const B = this.safeValue2(v, \"triggerPrice\", \"stopPrice\", v);\n c.takeProfit = this.priceToPrecision(e, B);\n }\n } else\n c.orderFilter = \"Order\";\n }\n const m = this.safeString(r, \"clientOrderId\");\n m !== void 0 ? c.orderLinkId = m : a.option && (c.orderLinkId = this.uuid16()), r = this.omit(r, [\"stopPrice\", \"timeInForce\", \"triggerPrice\", \"stopLossPrice\", \"takeProfitPrice\", \"postOnly\", \"clientOrderId\"]);\n let y;\n a.option ? y = await this.privatePostOptionUsdcOpenapiPrivateV1PlaceOrder(this.extend(c, r)) : y = await this.privatePostPerpetualUsdcOpenapiPrivateV1PlaceOrder(this.extend(c, r));\n const w = this.safeValue(y, \"result\", {});\n return this.parseOrder(w, a);\n }\n async editUsdcOrder(e, t, i, s, n = void 0, r = void 0, a = {}) {\n await this.loadMarkets();\n const o = this.market(t), c = {\n symbol: o.id,\n orderId: e\n };\n n !== void 0 && (c.orderQty = this.amountToPrecision(t, n)), r !== void 0 && (c.orderPrice = this.priceToPrecision(t, r));\n let u;\n if (o.option)\n u = await this.privatePostOptionUsdcOpenapiPrivateV1ReplaceOrder(this.extend(c, a));\n else {\n const h = this.safeValue2(a, \"stop\", \"trigger\", !1), l = this.safeValue2(a, \"stopPrice\", \"triggerPrice\"), p = this.safeValue(a, \"stopLossPrice\"), m = p !== void 0, y = this.safeValue(a, \"takeProfitPrice\");\n (m || y !== void 0 || h) && (c.orderFilter = h ? \"StopOrder\" : \"Order\", l !== void 0 && (c.triggerPrice = this.priceToPrecision(t, l)), p !== void 0 && (c.stopLoss = this.priceToPrecision(t, p)), y !== void 0 && (c.takeProfit = this.priceToPrecision(t, y))), a = this.omit(a, [\"stop\", \"stopPrice\", \"triggerPrice\", \"stopLossPrice\", \"takeProfitPrice\"]), u = await this.privatePostPerpetualUsdcOpenapiPrivateV1ReplaceOrder(this.extend(c, a));\n }\n const f = this.safeValue(u, \"result\", {});\n return this.parseOrder(f, o);\n }\n async editOrder(e, t, i, s, n = void 0, r = void 0, a = {}) {\n if (t === void 0)\n throw new g(\"editOrder() requires a symbol argument\").exchange(this.id);\n await this.loadMarkets();\n const o = this.market(t), [c, u] = await this.isUnifiedEnabled(), f = c || u;\n if (o.settle === \"USDC\" && !f)\n return await this.editUsdcOrder(e, t, i, s, n, r, a);\n const l = {\n symbol: o.id,\n orderId: e\n // 'orderLinkId': 'string', // unique client order id, max 36 characters\n // 'takeProfit': 123.45, // take profit price, only take effect upon opening the position\n // 'stopLoss': 123.45, // stop loss price, only take effect upon opening the position\n // 'triggerPrice': 123.45, // trigger price, required for conditional orders\n // 'triggerBy': 'MarkPrice', // IndexPrice, MarkPrice, LastPrice\n // 'tpTriggerby': 'MarkPrice', // IndexPrice, MarkPrice, LastPrice\n // 'slTriggerBy': 'MarkPrice', // IndexPrice, MarkPrice, LastPrice\n // Valid for option only.\n // 'orderIv': '0', // Implied volatility; parameters are passed according to the real value; for example, for 10%, 0.1 is passed\n };\n o.spot ? l.category = \"spot\" : o.linear ? l.category = \"linear\" : o.inverse ? l.category = \"inverse\" : o.option && (l.category = \"option\"), n !== void 0 && (l.qty = this.amountToPrecision(t, n)), r !== void 0 && (l.price = this.priceToPrecision(t, r)), n !== void 0 && (l.qty = this.amountToPrecision(t, n));\n let p = this.safeString2(a, \"triggerPrice\", \"stopPrice\");\n const m = this.safeString(a, \"stopLossPrice\"), y = this.safeString(a, \"takeProfitPrice\"), w = this.safeValue(a, \"stopLoss\"), S = this.safeValue(a, \"takeProfit\"), b = m !== void 0, T = y !== void 0, x = w !== void 0, v = S !== void 0;\n if ((b || T) && (p = b ? m : y), p !== void 0) {\n const G = p === \"0\" ? p : this.priceToPrecision(t, p);\n l.triggerPrice = G;\n const W = this.safeString(a, \"triggerBy\", \"LastPrice\");\n l.triggerBy = W;\n }\n if (x || v) {\n if (x) {\n const G = this.safeString2(w, \"triggerPrice\", \"stopPrice\", w), W = G === \"0\" ? G : this.priceToPrecision(t, G);\n l.stopLoss = W;\n const B = this.safeString(a, \"slTriggerBy\", \"LastPrice\");\n l.slTriggerBy = B;\n }\n if (v) {\n const G = this.safeString2(S, \"triggerPrice\", \"stopPrice\", S), W = G === \"0\" ? G : this.priceToPrecision(t, G);\n l.takeProfit = W;\n const B = this.safeString(a, \"tpTriggerBy\", \"LastPrice\");\n l.tpTriggerBy = B;\n }\n }\n const _ = this.safeString(a, \"clientOrderId\");\n _ !== void 0 && (l.orderLinkId = _), a = this.omit(a, [\"stopPrice\", \"stopLossPrice\", \"takeProfitPrice\", \"triggerPrice\", \"clientOrderId\", \"stopLoss\", \"takeProfit\"]);\n const V = await this.privatePostV5OrderAmend(this.extend(l, a)), j = this.safeValue(V, \"result\", {});\n return this.safeOrder({\n info: V,\n id: this.safeString(j, \"orderId\")\n });\n }\n async cancelUsdcOrder(e, t = void 0, i = {}) {\n if (t === void 0)\n throw new g(\"cancelUsdcOrder() requires a symbol argument\").exchange(this.id);\n await this.loadMarkets();\n const s = this.market(t), n = {\n symbol: s.id\n // 'orderLinkId': 'string', // one of order_id, stop_order_id or order_link_id is required\n // 'orderId': id,\n }, r = this.safeValue2(i, \"stop\", \"trigger\", !1);\n i = this.omit(i, [\"stop\", \"trigger\"]), e !== void 0 && (n.orderId = e);\n let a;\n s.option ? a = await this.privatePostOptionUsdcOpenapiPrivateV1CancelOrder(this.extend(n, i)) : (n.orderFilter = r ? \"StopOrder\" : \"Order\", a = await this.privatePostPerpetualUsdcOpenapiPrivateV1CancelOrder(this.extend(n, i)));\n const o = this.safeValue(a, \"result\", {});\n return this.parseOrder(o, s);\n }\n async cancelOrder(e, t = void 0, i = {}) {\n if (t === void 0)\n throw new g(\"cancelOrder() requires a symbol argument\").exchange(this.id);\n await this.loadMarkets();\n const s = this.market(t), [n, r] = await this.isUnifiedEnabled(), a = n || r;\n if (s.settle === \"USDC\" && !a)\n return await this.cancelUsdcOrder(e, t, i);\n const c = {\n symbol: s.id\n // 'orderLinkId': 'string',\n // 'orderId': id,\n // conditional orders\n // 'orderFilter': '', // Valid for spot only. Order,tpslOrder. If not passed, Order by default\n };\n if (s.spot) {\n const h = this.safeValue2(i, \"stop\", \"trigger\", !1);\n i = this.omit(i, [\"stop\", \"trigger\"]), c.orderFilter = h ? \"StopOrder\" : \"Order\";\n }\n e !== void 0 && (c.orderId = e), s.spot ? c.category = \"spot\" : s.linear ? c.category = \"linear\" : s.inverse ? c.category = \"inverse\" : s.option && (c.category = \"option\");\n const u = await this.privatePostV5OrderCancel(this.extend(c, i)), f = this.safeValue(u, \"result\", {});\n return this.parseOrder(f, s);\n }\n async cancelAllUsdcOrders(e = void 0, t = {}) {\n if (e === void 0)\n throw new g(\"cancelAllUsdcOrders() requires a symbol argument\").exchange(this.id);\n await this.loadMarkets();\n const i = this.market(e), s = {\n symbol: i.id\n };\n let n;\n i.option ? n = await this.privatePostOptionUsdcOpenapiPrivateV1CancelAll(this.extend(s, t)) : (this.safeValue2(t, \"stop\", \"trigger\", !1) ? s.orderFilter = \"StopOrder\" : s.orderFilter = \"Order\", t = this.omit(t, [\"stop\", \"trigger\"]), n = await this.privatePostPerpetualUsdcOpenapiPrivateV1CancelAll(this.extend(s, t)));\n const r = this.safeValue(n, \"result\", []);\n return Array.isArray(r) ? this.parseOrders(r, i) : n;\n }\n async cancelAllOrders(e = void 0, t = {}) {\n await this.loadMarkets();\n const [i, s] = await this.isUnifiedEnabled(), n = i || s;\n let r;\n const a = {};\n if (e !== void 0) {\n if (r = this.market(e), r.settle === \"USDC\" && !n)\n return await this.cancelAllUsdcOrders(e, t);\n a.symbol = r.id;\n }\n let o;\n if ([o, t] = this.getBybitType(\"cancelAllOrders\", r, t), a.category = o, o === \"option\" && !n)\n throw new ge(\"type\").addMessage(\"cancelAllOrders() Normal Account not support \" + o + \" market\").exchange(this.id);\n if (o === \"linear\" || o === \"inverse\") {\n const l = this.safeString(t, \"baseCoin\");\n if (e === void 0 && l === void 0) {\n const p = this.safeString(this.options, \"defaultSettle\", \"USDT\");\n a.settleCoin = this.safeString(t, \"settleCoin\", p);\n }\n }\n const c = this.safeValue2(t, \"stop\", \"trigger\", !1);\n t = this.omit(t, [\"stop\", \"trigger\"]), c && (a.orderFilter = \"StopOrder\");\n const u = await this.privatePostV5OrderCancelAll(this.extend(a, t)), f = this.safeValue(u, \"result\", []), h = this.safeValue(f, \"list\");\n return Array.isArray(h) ? this.parseOrders(h, r) : u;\n }\n async fetchUsdcOrders(e = void 0, t = void 0, i = void 0, s = {}) {\n await this.loadMarkets();\n let n;\n const r = {\n // 'category': '', // Type. PERPETUAL, OPTION\n // 'symbol': '', // Contract name\n // 'baseCoin': '', // Base currency\n // 'orderId': '', // Order ID\n // 'orderLinkId': '', // Custom ID used for cross-platform strategy remarks; a max. of 32 characters\n // 'orderStatus': '', // Order status\n // 'orderFilter': '', // refer to Order Filter\n // 'direction': '', // prev: prev page, next: next page.\n // 'limit': 0, // Limit for data size per page, max size is 50. Default as showing 20 pieces of data per page\n // 'cursor': '', // API pass-through\n };\n e !== void 0 && (n = this.market(e), r.symbol = n.id);\n let a;\n [a, s] = this.handleMarketTypeAndParams(\"fetchOrders\", n, s), a === \"swap\" ? r.category = \"PERPETUAL\" : r.category = \"OPTION\";\n const o = this.safeValue2(s, \"stop\", \"trigger\", !1);\n s = this.omit(s, [\"stop\", \"trigger\"]), o && (r.orderFilter = \"StopOrder\"), i !== void 0 && (r.limit = i);\n const c = await this.privatePostOptionUsdcOpenapiPrivateV1QueryOrderHistory(this.extend(r, s)), u = this.safeValue(c, \"result\", {}), f = this.safeValue(u, \"dataList\", []);\n return this.parseOrders(f, n, t, i);\n }\n async fetchOrders(e = void 0, t = void 0, i = void 0, s = {}) {\n await this.loadMarkets();\n let n = !1;\n if ([n, s] = this.handleOptionAndParams(s, \"fetchOrders\", \"paginate\"), n)\n return await this.fetchPaginatedCallCursor(\"fetchOrders\", e, t, i, s, \"nextPageCursor\", \"nextPageCursor\", void 0, 50);\n const [r, a] = await this.isUnifiedEnabled(), o = r || a, c = {};\n let u, f = !1;\n e !== void 0 && (u = this.market(e), f = u.settle === \"USDC\", c.symbol = u.id);\n let h;\n if ([h, s] = this.getBybitType(\"fetchOrders\", u, s), (h === \"option\" || f) && !o)\n return await this.fetchUsdcOrders(e, t, i, s);\n c.category = h;\n const l = this.safeBoolN(s, [\"trigger\", \"stop\"], !1);\n s = this.omit(s, [\"trigger\", \"stop\"]), l && (c.orderFilter = \"StopOrder\"), i !== void 0 && (c.limit = i), t !== void 0 && (c.startTime = t);\n const p = this.safeInteger2(s, \"until\", \"till\"), m = this.safeInteger(s, \"endTime\", p);\n s = this.omit(s, [\"endTime\", \"till\", \"until\"]), m !== void 0 && (c.endTime = m);\n const y = await this.privateGetV5OrderHistory(this.extend(c, s)), w = this.addPaginationCursorToResult(y);\n return this.parseOrders(w, u, t, i);\n }\n async fetchClosedOrders(e = void 0, t = void 0, i = void 0, s = {}) {\n await this.loadMarkets();\n const n = {\n orderStatus: \"Filled\"\n };\n return await this.fetchOrders(e, t, i, this.extend(n, s));\n }\n async fetchCanceledOrders(e = void 0, t = void 0, i = void 0, s = {}) {\n await this.loadMarkets();\n const n = {\n orderStatus: \"Cancelled\"\n };\n return await this.fetchOrders(e, t, i, this.extend(n, s));\n }\n async fetchUsdcOpenOrders(e = void 0, t = void 0, i = void 0, s = {}) {\n await this.loadMarkets();\n const n = {};\n let r;\n e !== void 0 && (r = this.market(e), n.symbol = r.id);\n let a;\n [a, s] = this.handleMarketTypeAndParams(\"fetchUsdcOpenOrders\", r, s), n.category = a === \"swap\" ? \"perpetual\" : \"option\";\n const o = await this.privatePostOptionUsdcOpenapiPrivateV1QueryActiveOrders(this.extend(n, s)), c = this.safeValue(o, \"result\", {}), u = this.safeValue(c, \"dataList\", []);\n return this.parseOrders(u, r, t, i);\n }\n async fetchOpenOrders(e = void 0, t = void 0, i = void 0, s = {}) {\n await this.loadMarkets();\n const [n, r] = await this.isUnifiedEnabled(), a = n || r, o = {};\n let c, u = !1;\n e !== void 0 && (c = this.market(e), u = c.settle === \"USDC\", o.symbol = c.id);\n let f;\n if ([f, s] = this.getBybitType(\"fetchOpenOrders\", c, s), f === \"linear\" || f === \"inverse\") {\n const m = this.safeString(s, \"baseCoin\");\n if (e === void 0 && m === void 0) {\n const y = this.safeString(this.options, \"defaultSettle\", \"USDT\"), w = this.safeString(s, \"settleCoin\", y);\n o.settleCoin = w, u = w === \"USDC\";\n }\n }\n if ((f === \"option\" || u) && !a)\n return await this.fetchUsdcOpenOrders(e, t, i, s);\n o.category = f;\n const h = this.safeValue2(s, \"stop\", \"trigger\", !1);\n s = this.omit(s, [\"stop\", \"trigger\"]), h && (o.orderFilter = \"StopOrder\"), i !== void 0 && (o.limit = i);\n const l = await this.privateGetV5OrderRealtime(this.extend(o, s)), p = this.addPaginationCursorToResult(l);\n return this.parseOrders(p, c, t, i);\n }\n async fetchOrderTrades(e, t = void 0, i = void 0, s = void 0, n = {}) {\n const r = {}, a = this.safeString2(n, \"clientOrderId\", \"orderLinkId\");\n return a !== void 0 ? r.orderLinkId = a : r.orderId = e, n = this.omit(n, [\"clientOrderId\", \"orderLinkId\"]), await this.fetchMyTrades(t, i, s, this.extend(r, n));\n }\n async fetchMyUsdcTrades(e = void 0, t = void 0, i = void 0, s = {}) {\n await this.loadMarkets();\n let n;\n const r = {};\n e !== void 0 ? (n = this.market(e), r.symbol = n.id, r.category = n.option ? \"OPTION\" : \"PERPETUAL\") : r.category = \"PERPETUAL\";\n const a = await this.privatePostOptionUsdcOpenapiPrivateV1ExecutionList(this.extend(r, s)), o = this.safeValue(a, \"result\", {}), c = this.safeValue(o, \"dataList\", []);\n return this.parseTrades(c, n, t, i);\n }\n async fetchMyTrades(e = void 0, t = void 0, i = void 0, s = {}) {\n await this.loadMarkets();\n let n = !1;\n if ([n, s] = this.handleOptionAndParams(s, \"fetchMyTrades\", \"paginate\"), n)\n return await this.fetchPaginatedCallCursor(\"fetchMyTrades\", e, t, i, s, \"nextPageCursor\", \"nextPageCursor\", void 0, 100);\n const [r, a] = await this.isUnifiedEnabled(), o = r || a;\n let c = {}, u, f = !1;\n e !== void 0 && (u = this.market(e), f = u.settle === \"USDC\", c.symbol = u.id);\n let h;\n if ([h, s] = this.getBybitType(\"fetchMyTrades\", u, s), (h === \"option\" || f) && !o)\n return await this.fetchMyUsdcTrades(e, t, i, s);\n c.category = h, i !== void 0 && (c.limit = i), t !== void 0 && (c.startTime = t), [c, s] = this.handleUntilOption(\"endTime\", c, s);\n const l = await this.privateGetV5ExecutionList(this.extend(c, s)), p = this.addPaginationCursorToResult(l);\n return this.parseTrades(p, u, t, i);\n }\n parseDepositAddress(e, t = void 0) {\n const i = this.safeString(e, \"addressDeposit\"), s = this.safeString(e, \"tagDeposit\"), n = this.safeString(t, \"code\"), r = this.safeString(e, \"chain\"), a = this.networkIdToCode(r);\n return this.checkAddress(i), {\n currency: n,\n address: i,\n tag: s,\n network: a,\n info: e\n };\n }\n async fetchDepositAddressesByNetwork(e, t = {}) {\n const i = t.methodCallId;\n await this.loadMarkets(!!i, { methodCallId: i });\n let s = this.currency(e);\n const n = {\n coin: s.id\n }, r = await this.privateGetV5AssetDepositQueryAddress(this.extend(n, t)), a = this.safeValue(r, \"result\", []), o = this.safeValue(a, \"chains\", []), c = this.safeString(a, \"coin\");\n s = this.currency(c);\n const u = this.parseDepositAddresses(o, [s.code], !1, {\n currency: s.id\n });\n return this.indexBy(u, \"network\");\n }\n async fetchDepositAddress(e, t = {}) {\n const i = t.methodCallId;\n await this.loadMarkets(!!i, { methodCallId: i });\n const [s, n] = this.handleNetworkCodeAndParams(t), r = this.networkCodeToId(s), a = this.currency(e), o = {\n coin: a.id\n };\n r !== void 0 && (o.chainType = r);\n const c = await this.privateGetV5AssetDepositQueryAddress(this.extend(o, n)), u = this.safeValue(c, \"result\", {}), f = this.safeValue(u, \"chains\", []), h = this.indexBy(f, \"chain\"), l = this.selectNetworkIdFromRawNetworks(e, s, h), p = this.safeValue(h, l, {});\n return this.parseDepositAddress(p, a);\n }\n async fetchDeposits(e = void 0, t = void 0, i = void 0, s = {}) {\n await this.loadMarkets();\n let n = !1;\n if ([n, s] = this.handleOptionAndParams(s, \"fetchDeposits\", \"paginate\"), n)\n return await this.fetchPaginatedCallCursor(\"fetchDeposits\", e, t, i, s, \"nextPageCursor\", \"nextPageCursor\", void 0, 50);\n let r = {\n // 'coin': currency['id'],\n // 'limit': 20, // max 50\n // 'cursor': '',\n }, a;\n e !== void 0 && (a = this.currency(e), r.coin = a.id), t !== void 0 && (r.startTime = t), i !== void 0 && (r.limit = i), [r, s] = this.handleUntilOption(\"endTime\", r, s);\n const o = await this.privateGetV5AssetDepositQueryRecord(this.extend(r, s)), c = this.addPaginationCursorToResult(o);\n return this.parseTransactions(c, a, t, i);\n }\n async fetchWithdrawals(e = void 0, t = void 0, i = void 0, s = {}) {\n await this.loadMarkets();\n let n = !1;\n if ([n, s] = this.handleOptionAndParams(s, \"fetchWithdrawals\", \"paginate\"), n)\n return await this.fetchPaginatedCallCursor(\"fetchWithdrawals\", e, t, i, s, \"nextPageCursor\", \"nextPageCursor\", void 0, 50);\n let r = {\n // 'coin': currency['id'],\n // 'limit': 20, // max 50\n // 'cusor': '',\n }, a;\n e !== void 0 && (a = this.currency(e), r.coin = a.id), t !== void 0 && (r.startTime = t), i !== void 0 && (r.limit = i), [r, s] = this.handleUntilOption(\"endTime\", r, s);\n const o = await this.privateGetV5AssetWithdrawQueryRecord(this.extend(r, s)), c = this.addPaginationCursorToResult(o);\n return this.parseTransactions(c, a, t, i);\n }\n parseTransactionStatus(e) {\n const t = {\n // v3 deposit status\n 0: \"unknown\",\n 1: \"pending\",\n 2: \"processing\",\n 3: \"ok\",\n 4: \"fail\",\n // v3 withdrawal status\n SecurityCheck: \"pending\",\n Pending: \"pending\",\n success: \"ok\",\n CancelByUser: \"canceled\",\n Reject: \"rejected\",\n Fail: \"failed\",\n BlockchainConfirmed: \"ok\"\n };\n return this.safeString(t, e, e);\n }\n parseTransaction(e, t = void 0) {\n const i = this.safeString(e, \"coin\"), s = this.safeCurrencyCode(i, t), n = this.safeInteger2(e, \"createTime\", \"successAt\"), r = this.safeInteger(e, \"updateTime\"), a = this.parseTransactionStatus(this.safeString(e, \"status\")), o = this.safeNumber2(e, \"depositFee\", \"withdrawFee\"), c = \"depositFee\" in e ? \"deposit\" : \"withdrawal\";\n let u;\n o !== void 0 && (u = {\n cost: o,\n currency: s\n });\n const f = this.safeString(e, \"toAddress\");\n return {\n info: e,\n id: this.safeString2(e, \"id\", \"withdrawId\"),\n txid: this.safeString(e, \"txID\"),\n timestamp: n,\n datetime: this.iso8601(n),\n network: this.networkIdToCode(this.safeString(e, \"chain\")),\n address: void 0,\n addressTo: f,\n addressFrom: void 0,\n tag: this.safeString(e, \"tag\"),\n tagTo: void 0,\n tagFrom: void 0,\n type: c,\n amount: this.safeNumber(e, \"amount\"),\n currency: s,\n status: a,\n updated: r,\n fee: u,\n internal: void 0,\n comment: void 0\n };\n }\n async fetchLedger(e = void 0, t = void 0, i = void 0, s = {}) {\n await this.loadMarkets();\n const n = {\n // 'coin': currency['id'],\n // 'currency': currency['id'], // alias\n // 'start_date': this.iso8601 (since),\n // 'end_date': this.iso8601 (till),\n // 'wallet_fund_type': 'Deposit', // Withdraw, RealisedPNL, Commission, Refund, Prize, ExchangeOrderWithdraw, ExchangeOrderDeposit\n // 'page': 1,\n // 'limit': 20, // max 50\n // v5 transaction log\n // 'accountType': '', Account Type. UNIFIED\n // 'category': '', Product type. spot,linear,option\n // 'currency': '', Currency\n // 'baseCoin': '', BaseCoin. e.g., BTC of BTCPERP\n // 'type': '', Types of transaction logs\n // 'startTime': 0, The start timestamp (ms)\n // 'endTime': 0, The end timestamp (ms)\n // 'limit': 0, Limit for data size per page. [1, 50]. Default: 20\n // 'cursor': '', Cursor. Used for pagination\n }, r = await this.isUnifiedEnabled();\n let a, o = \"coin\";\n r[1] ? (o = \"currency\", t !== void 0 && (n.startTime = t)) : t !== void 0 && (n.start_date = this.yyyymmdd(t)), e !== void 0 && (a = this.currency(e), n[o] = a.id), i !== void 0 && (n.limit = i);\n let c;\n r[1] ? c = await this.privateGetV5AccountTransactionLog(this.extend(n, s)) : c = await this.privateGetV2PrivateWalletFundRecords(this.extend(n, s));\n const u = this.addPaginationCursorToResult(c);\n return this.parseLedger(u, a, t, i);\n }\n parseLedgerEntry(e, t = void 0) {\n const i = this.safeString2(e, \"coin\", \"currency\"), s = this.safeCurrencyCode(i, t), n = this.safeString2(e, \"amount\", \"change\"), r = this.safeString2(e, \"wallet_balance\", \"cashBalance\"), a = P.stringLt(n, \"0\") ? \"out\" : \"in\";\n let o;\n if (r !== void 0 && n !== void 0) {\n const l = a === \"out\" ? n : P.stringNeg(n);\n o = P.stringAdd(r, l);\n }\n let c = this.parse8601(this.safeString(e, \"exec_time\"));\n c === void 0 && (c = this.safeInteger(e, \"transactionTime\"));\n const u = this.parseLedgerEntryType(this.safeString(e, \"type\")), f = this.safeString(e, \"id\"), h = this.safeString(e, \"tx_id\");\n return {\n id: f,\n currency: s,\n account: this.safeString(e, \"wallet_id\"),\n referenceAccount: void 0,\n referenceId: h,\n status: void 0,\n amount: this.parseNumber(P.stringAbs(n)),\n before: this.parseNumber(o),\n after: this.parseNumber(r),\n fee: this.parseNumber(this.safeString(e, \"fee\")),\n direction: a,\n timestamp: c,\n datetime: this.iso8601(c),\n type: u,\n info: e\n };\n }\n parseLedgerEntryType(e) {\n const t = {\n Deposit: \"transaction\",\n Withdraw: \"transaction\",\n RealisedPNL: \"trade\",\n Commission: \"fee\",\n Refund: \"cashback\",\n Prize: \"prize\",\n ExchangeOrderWithdraw: \"transaction\",\n ExchangeOrderDeposit: \"transaction\",\n // v5\n TRANSFER_IN: \"transaction\",\n TRANSFER_OUT: \"transaction\",\n TRADE: \"trade\",\n SETTLEMENT: \"trade\",\n DELIVERY: \"trade\",\n LIQUIDATION: \"trade\",\n BONUS: \"Prize\",\n FEE_REFUND: \"cashback\",\n INTEREST: \"transaction\",\n CURRENCY_BUY: \"trade\",\n CURRENCY_SELL: \"trade\"\n };\n return this.safeString(t, e, e);\n }\n async withdraw(e, t, i, s = void 0, n = {}) {\n [s, n] = this.handleWithdrawTagAndParams(s, n), await this.loadMarkets(), this.checkAddress(i);\n const r = this.currency(e), a = {\n coin: r.id,\n address: i,\n timestamp: this.nonce(),\n feeType: 1\n // bybit will deduce the fee from the amount\n };\n s !== void 0 && (a.tag = s);\n const [o, c] = this.handleNetworkCodeAndParams(n), u = this.networkCodeToId(o), f = this.currencyToPrecision(e, t, o);\n a.amount = this.numberToString(f), u !== void 0 && (a.chain = u.toUpperCase());\n const h = await this.privatePostV5AssetWithdrawCreate(this.extend(a, c)), l = this.safeValue(h, \"result\", {});\n return this.parseTransaction(l, r);\n }\n async fetchPosition(e, t = {}) {\n if (e === void 0)\n throw new g(\"fetchPosition() requires a symbol argument\").exchange(this.id);\n await this.loadMarkets();\n const i = this.market(e), s = {\n symbol: i.id\n }, [n, r] = await this.isUnifiedEnabled(), a = n || r, o = i.settle === \"USDC\";\n let c, u;\n [u, t] = this.getBybitType(\"fetchPosition\", i, t), (u === \"option\" || o) && !a ? (s.category = u === \"option\" ? \"OPTION\" : \"PERPETUAL\", c = await this.privatePostOptionUsdcOpenapiPrivateV1QueryPosition(this.extend(s, t))) : (s.category = u, c = await this.privateGetV5PositionList(this.extend(s, t)));\n const f = this.safeDict(c, \"result\", {}), h = this.safeList2(f, \"list\", \"dataList\", []), l = this.safeInteger(c, \"time\"), p = this.safeDict(h, 0, {}), m = this.parsePosition(p, i);\n return m.timestamp = l, m.datetime = this.iso8601(l), m;\n }\n async fetchUsdcPositions(e = void 0, t = {}) {\n await this.loadMarkets();\n const i = {};\n let s;\n if (Array.isArray(e)) {\n if (e.length !== 1)\n throw new g(\"fetchUsdcPositions() takes an array with exactly one symbol\").exchange(this.id);\n const f = this.safeString(e, 0);\n s = this.market(f), i.symbol = s.id;\n } else\n e !== void 0 && (s = this.market(e), i.symbol = s.id);\n let n;\n [n, t] = this.getBybitType(\"fetchUsdcPositions\", s, t), i.category = n === \"option\" ? \"OPTION\" : \"PERPETUAL\";\n const r = await this.privatePostOptionUsdcOpenapiPrivateV1QueryPosition(this.extend(i, t)), a = this.safeValue(r, \"result\", {}), o = this.safeValue(a, \"dataList\", []), c = [];\n for (let u = 0; u < o.length; u++) {\n let f = o[u];\n \"data\" in f && \"is_valid\" in f && (f = this.safeValue(f, \"data\")), c.push(this.parsePosition(f, s));\n }\n return this.filterByArrayPositions(c, \"symbol\", e, !1);\n }\n async fetchPositions(e = void 0, t = {}) {\n let i;\n if (e !== void 0 && Array.isArray(e)) {\n const p = e.length;\n if (p > 1)\n throw new g(\"fetchPositions() does not accept an array with more than one symbol\").exchange(this.id);\n p === 1 && (i = e[0]), e = this.marketSymbols(e);\n } else\n e !== void 0 && (i = e, e = [this.symbol(i)]);\n await this.loadMarkets();\n const [s, n] = await this.isUnifiedEnabled(), r = s || n, a = {};\n let o, c = !1;\n i !== void 0 && (o = this.market(i), i = o.symbol, a.symbol = o.id, c = o.settle === \"USDC\");\n let u;\n if ([u, t] = this.getBybitType(\"fetchPositions\", o, t), u === \"linear\" || u === \"inverse\") {\n const p = this.safeString(t, \"baseCoin\");\n if (u === \"linear\") {\n if (i === void 0 && p === void 0) {\n const m = this.safeString(this.options, \"defaultSettle\", \"USDT\"), y = this.safeString(t, \"settleCoin\", m);\n a.settleCoin = y, c = y === \"USDC\";\n }\n } else\n i === void 0 && p === void 0 && (a.category = \"inverse\");\n }\n if ((u === \"option\" || c) && !r)\n return await this.fetchUsdcPositions(e, t);\n t = this.omit(t, [\"type\"]), a.category = u;\n const f = await this.privateGetV5PositionList(this.extend(a, t)), h = this.addPaginationCursorToResult(f), l = [];\n for (let p = 0; p < h.length; p++) {\n let m = h[p];\n \"data\" in m && \"is_valid\" in m && (m = this.safeValue(m, \"data\")), l.push(this.parsePosition(m));\n }\n return this.filterByArrayPositions(l, \"symbol\", e, !1);\n }\n parsePosition(e, t = void 0) {\n const i = this.safeString(e, \"symbol\");\n t = this.safeMarket(i, t, void 0, \"contract\");\n const s = P.stringAbs(this.safeString(e, \"size\"));\n let n = this.safeString(e, \"side\");\n n !== void 0 && (n === \"Buy\" ? n = \"long\" : n === \"Sell\" ? n = \"short\" : n = void 0);\n const r = this.safeString(e, \"positionValue\"), a = this.omitZero(this.safeString(e, \"unrealisedPnl\"));\n let o = this.safeString(e, \"positionIM\"), c = this.safeString(e, \"positionMM\"), u = this.parse8601(this.safeString(e, \"updated_at\"));\n u === void 0 && (u = this.safeIntegerN(e, [\"updatedTime\", \"updatedAt\"]));\n let f = this.safeString(e, \"positionBalance\");\n const h = this.omitZero(this.safeString2(e, \"entryPrice\", \"avgPrice\")), l = this.omitZero(this.safeString(e, \"liqPrice\")), p = this.safeString(e, \"leverage\");\n if (l !== void 0)\n if (t.settle === \"USDC\") {\n const w = P.stringAbs(P.stringSub(h, l));\n f = P.stringAdd(P.stringAdd(P.stringMul(w, s), c), a);\n } else {\n const w = this.safeString(e, \"bustPrice\");\n if (t.linear) {\n const S = P.stringAbs(P.stringSub(l, w));\n c = P.stringMul(S, s), h !== void 0 && (o = P.stringDiv(P.stringMul(s, h), p));\n } else {\n const S = P.stringAbs(P.stringSub(w, l)), b = P.stringMul(w, l);\n c = P.stringDiv(P.stringMul(s, S), b), h !== void 0 && (o = P.stringDiv(s, P.stringMul(h, p)));\n }\n }\n const m = P.stringDiv(c, r), y = P.stringDiv(c, f, 4);\n return this.safePosition({\n info: e,\n id: void 0,\n symbol: t.symbol,\n timestamp: u,\n datetime: this.iso8601(u),\n lastUpdateTimestamp: void 0,\n initialMargin: this.parseNumber(o),\n initialMarginPercentage: this.parseNumber(P.stringDiv(o, r)),\n maintenanceMargin: this.parseNumber(c),\n maintenanceMarginPercentage: this.parseNumber(m),\n entryPrice: this.parseNumber(h),\n notional: this.parseNumber(r),\n leverage: this.parseNumber(p),\n unrealizedPnl: this.parseNumber(a),\n contracts: this.parseNumber(s),\n contractSize: this.safeNumber(t, \"contractSize\"),\n marginRatio: this.parseNumber(y),\n liquidationPrice: this.parseNumber(l),\n markPrice: this.safeNumber(e, \"markPrice\"),\n lastPrice: void 0,\n collateral: this.parseNumber(f),\n marginMode: void 0,\n side: n,\n percentage: void 0,\n stopLossPrice: this.safeNumber2(e, \"stop_loss\", \"stopLoss\"),\n takeProfitPrice: this.safeNumber2(e, \"take_profit\", \"takeProfit\")\n });\n }\n // https://bybit-exchange.github.io/docs/v5/asset/balance/all-balance\n async fetchSubAccountBalances(e, t = {}) {\n const i = {}, [s, n] = await this.isUnifiedEnabled();\n if (!(s || n))\n throw new Error(this.id + \" getSubAccountBalances() is only supported for unified accounts\");\n const o = [\"UNIFIED\", \"FUND\", \"CONTRACT\"].map((u) => this.fetchBalance({ type: u, memberId: e }).then((f) => {\n const h = Object.keys(f), l = {};\n for (let p = 0; p < h.length; p++) {\n const m = h[p];\n l[m] = f[m];\n }\n return { accountType: u, balances: l };\n }).catch((f) => ({ accountType: u, balances: null, error: f })));\n return (await Promise.allSettled(o)).forEach((u) => {\n if (u.status === \"fulfilled\" && u.value.balances) {\n const { accountType: f, balances: h } = u.value;\n f in i || (i[f] = {}), Object.assign(i[f], h);\n }\n }), i;\n }\n // https://bybit-exchange.github.io/docs/account-asset/sub-uid-list\n async getSubAccounts() {\n await this.loadMarkets();\n const e = await this.privateGetAssetV3PrivateTransferSubMemberListQuery(), t = this.safeValue(e, \"result\", {}), i = this.safeValue(t, \"subMemberIds\", []);\n return i == null ? void 0 : i.map((s) => ({\n uid: s\n }));\n }\n async subAccountTransfer(e, t, i, s, n, r, a = {}) {\n await this.loadMarkets();\n const o = this.safeString(a, \"transferId\", this.uuid()), c = this.safeValue(this.options, \"accountsByType\", {});\n let u = this.safeString(c, i, i), f = this.safeString(c, s, s);\n const [h, l] = await this.isUnifiedEnabled();\n (h || l) && (u === \"SPOT\" && (u = \"UNIFIED\"), f === \"SPOT\" && (f = \"UNIFIED\"));\n const m = this.currency(e), y = this.currencyToPrecision(e, t), w = {\n transferId: o,\n fromAccountType: u,\n toAccountType: f,\n coin: m.id,\n amount: y,\n fromMemberId: n,\n toMemberId: r\n }, S = await this.privatePostV5AssetTransferUniversalTransfer(this.extend(w, a)), b = this.safeInteger(S, \"time\"), T = this.safeValue(S, \"result\", {}), x = this.safeStringN(S, [\"retCode\", \"retMsg\"]), v = this.parseTransferStatus(x);\n return this.extend(this.parseTransfer(T, m), {\n timestamp: b,\n datetime: this.iso8601(b),\n amount: this.parseNumber(y),\n fromAccount: i,\n toAccount: s,\n fromUid: n,\n toUid: r,\n status: v\n });\n }\n async transfer(e, t, i, s, n = {}) {\n await this.loadMarkets();\n const r = this.safeString(n, \"transferId\", this.uuid()), a = this.safeValue(this.options, \"accountsByType\", {});\n let o = this.safeString(a, i, i), c = this.safeString(a, s, s);\n const [u, f] = await this.isUnifiedEnabled();\n (u || f) && (o === \"SPOT\" && (o = \"UNIFIED\"), c === \"SPOT\" && (c = \"UNIFIED\"));\n const l = this.currency(e), p = this.currencyToPrecision(e, t), m = {\n transferId: r,\n fromAccountType: o,\n toAccountType: c,\n coin: l.id,\n amount: p\n }, y = await this.privatePostV5AssetTransferInterTransfer(this.extend(m, n)), w = this.safeInteger(y, \"time\"), S = this.safeValue(y, \"result\", {}), b = this.safeStringN(y, [\"retCode\", \"retMsg\"]), T = this.parseTransferStatus(b);\n return this.extend(this.parseTransfer(S, l), {\n timestamp: w,\n datetime: this.iso8601(w),\n amount: this.parseNumber(p),\n fromAccount: i,\n toAccount: s,\n status: T\n });\n }\n async fetchTransfers(e = void 0, t = void 0, i = void 0, s = {}) {\n await this.loadMarkets();\n let n = !1;\n if ([n, s] = this.handleOptionAndParams(s, \"fetchTransfers\", \"paginate\"), n)\n return await this.fetchPaginatedCallCursor(\"fetchTransfers\", e, t, i, s, \"nextPageCursor\", \"nextPageCursor\", void 0, 50);\n let r, a = {};\n e !== void 0 && (r = this.safeCurrencyCode(e), a.coin = r), t !== void 0 && (a.startTime = t), i !== void 0 && (a.limit = i), [a, s] = this.handleUntilOption(\"endTime\", a, s);\n const o = await this.privateGetV5AssetTransferQueryInterTransferList(this.extend(a, s)), c = this.addPaginationCursorToResult(o);\n return this.parseTransfers(c, r, t, i);\n }\n parseTransferStatus(e) {\n const t = {\n 0: \"ok\",\n OK: \"ok\",\n SUCCESS: \"ok\"\n };\n return this.safeString(t, e, e);\n }\n parseTransfer(e, t = void 0) {\n const i = this.safeString(e, \"coin\"), s = this.safeInteger(e, \"timestamp\"), n = this.safeString(e, \"fromAccountType\"), r = this.safeString(e, \"toAccountType\"), a = this.safeValue(this.options, \"accountsById\", {}), o = this.safeString(a, n, n), c = this.safeString(a, r, r);\n return {\n info: e,\n id: this.safeString(e, \"transferId\"),\n timestamp: s,\n datetime: this.iso8601(s),\n currency: this.safeCurrencyCode(i, t),\n amount: this.safeNumber(e, \"amount\"),\n fromAccount: o,\n toAccount: c,\n status: this.parseTransferStatus(this.safeString(e, \"status\"))\n };\n }\n parseTradingFee(e, t = void 0) {\n const i = this.safeString(e, \"symbol\"), s = this.safeSymbol(i, void 0, void 0, \"contract\");\n return {\n info: e,\n symbol: s,\n maker: this.safeNumber(e, \"makerFeeRate\"),\n taker: this.safeNumber(e, \"takerFeeRate\")\n };\n }\n async fetchTradingFee(e, t = {}) {\n await this.loadMarkets();\n const i = this.market(e);\n if (i.spot)\n throw new ge(\"spot\").exchange(this.id);\n const s = {\n symbol: i.id\n }, n = await this.privateGetV5AccountFeeRate(this.extend(s, t)), r = this.safeValue(n, \"result\", {}), a = this.safeValue(r, \"list\", []), o = this.safeValue(a, 0, {});\n return this.parseTradingFee(o);\n }\n async fetchTradingFees(e = {}) {\n await this.loadMarkets();\n let t;\n if ([t, e] = this.handleOptionAndParams(e, \"fetchTradingFees\", \"type\", \"future\"), t === \"spot\")\n throw new pe(\"fetchTradingFees\").addMessage(\"It is not supported for spot market\").exchange(this.id);\n const i = await this.privateGetV5AccountFeeRate(e);\n let s = this.safeValue(i, \"result\", {});\n s = this.safeValue(s, \"list\", []);\n const n = {};\n for (let r = 0; r < s.length; r++) {\n const a = this.parseTradingFee(s[r]), o = a.symbol;\n n[o] = a;\n }\n return n;\n }\n parseDepositWithdrawFee(e, t = void 0) {\n const i = this.safeValue(e, \"chains\", []), s = i.length, n = {\n info: e,\n withdraw: {\n fee: void 0,\n percentage: void 0\n },\n deposit: {\n fee: void 0,\n percentage: void 0\n },\n networks: {}\n };\n if (s !== 0)\n for (let r = 0; r < s; r++) {\n const a = i[r], o = this.safeString(a, \"chain\"), c = this.safeString(t, \"code\"), u = this.networkIdToCode(o, c);\n n.networks[u] = {\n deposit: { fee: void 0, percentage: void 0 },\n withdraw: { fee: this.safeNumber(a, \"withdrawFee\"), percentage: !1 }\n }, s === 1 && (n.withdraw.fee = this.safeNumber(a, \"withdrawFee\"), n.withdraw.percentage = !1);\n }\n return n;\n }\n async fetchDepositWithdrawFees(e = void 0, t = {}) {\n this.checkRequiredCredentials(), await this.loadMarkets();\n const i = await this.privateGetV5AssetCoinQueryInfo(t), s = this.safeValue(i, \"result\", {}), n = this.safeValue(s, \"rows\", []);\n return this.parseDepositWithdrawFees(n, e, \"coin\");\n }\n async sign(e, t = \"public\", i = \"GET\", s = {}, n = void 0, r = void 0) {\n let a = this.implodeHostname(this.urls.api[t]) + \"/\" + e;\n if (t === \"public\")\n Object.keys(s).length && (a += \"?\" + this.rawencode(s));\n else if (t === \"private\") {\n this.checkRequiredCredentials();\n const o = a.indexOf(\"openapi\") >= 0, c = a.indexOf(\"unified/v3\") >= 0, u = a.indexOf(\"contract/v3\") >= 0, f = a.indexOf(\"v5\") >= 0, h = this.nonce().toString();\n if (o) {\n Object.keys(s).length ? r = this.json(s) : r = \"{}\";\n const l = h + this.apiKey + r;\n let p;\n this.externalSigner ? p = await this.externalSigner.sign({\n payload: this.encode(l),\n publicApiKey: this.apiKey,\n exchangeId: this.id,\n opts: {\n digest: \"hex\"\n }\n }) : p = this.hmac(this.encode(l), this.encode(this.secret), Re, \"hex\"), n = {\n \"Content-Type\": \"application/json\",\n \"X-BAPI-API-KEY\": this.apiKey,\n \"X-BAPI-TIMESTAMP\": h,\n \"X-BAPI-SIGN\": p\n };\n } else if (c || u || f) {\n n = {\n \"Content-Type\": \"application/json\",\n \"X-BAPI-API-KEY\": this.apiKey,\n \"X-BAPI-TIMESTAMP\": h,\n \"X-BAPI-RECV-WINDOW\": this.options.recvWindow.toString()\n }, (c || u) && (n[\"X-BAPI-SIGN-TYPE\"] = \"2\");\n const l = this.extend({}, s), p = this.rawencode(l), m = h.toString() + this.apiKey + this.options.recvWindow.toString();\n let y;\n i === \"POST\" ? (r = this.json(l), y = m + r) : (y = m + p, a += \"?\" + this.rawencode(l));\n let w;\n this.secret && this.secret.indexOf(\"PRIVATE KEY\") > -1 ? w = Zn(y, this.secret, Re) : this.externalSigner ? w = await this.externalSigner.sign({\n payload: this.encode(y),\n publicApiKey: this.apiKey,\n exchangeId: this.id\n }) : w = this.hmac(this.encode(y), this.encode(this.secret), Re), n[\"X-BAPI-SIGN\"] = w;\n } else {\n const l = this.extend(s, {\n api_key: this.apiKey,\n recv_window: this.options.recvWindow,\n timestamp: h\n }), p = this.keysort(l), m = this.rawencode(p);\n let y;\n if (this.secret && this.secret.indexOf(\"PRIVATE KEY\") > -1 ? y = Zn(m, this.secret, Re) : this.externalSigner ? y = await this.externalSigner.sign({\n payload: this.encode(m),\n publicApiKey: this.apiKey,\n exchangeId: this.id\n }) : y = this.hmac(this.encode(m), this.encode(this.secret), Re), i === \"POST\") {\n const w = a.indexOf(\"spot\") >= 0, S = this.extend(l, {\n sign: y\n });\n w ? (r = this.urlencode(S), n = {\n \"Content-Type\": \"application/x-www-form-urlencoded\"\n }) : (r = this.json(S), n = {\n \"Content-Type\": \"application/json\"\n });\n } else\n a += \"?\" + this.rawencode(p), a += \"&sign=\" + y;\n }\n }\n if (i === \"POST\") {\n const o = this.safeString(this.options, \"brokerId\");\n o !== void 0 && (n.Referer = o);\n }\n return { url: a, method: i, body: r, headers: n };\n }\n handleErrors(e, t, i, s, n, r, a, o, c) {\n if (!a)\n return;\n const u = this.safeString2(a, \"ret_code\", \"retCode\");\n if (u !== \"0\") {\n if (u === \"30084\")\n return;\n const f = this.safeString2(a, \"ret_msg\", \"retMsg\");\n let h;\n throw u === \"10005\" && i.indexOf(\"order\") < 0 ? h = u + ': Private api uses /user/v3/private/query-api to check if you have a unified account. The API key of user id must own one of permissions: \"Account Transfer\", \"Subaccount Transfer\", \"Withdrawal\" ' : h = u + \": \" + f, this.throwBroadlyMatchedException(this.exceptions.broad, r, h), this.throwExactlyMatchedException(this.exceptions.exact, u, h), new O().addMessage(h).exchange(this.id);\n }\n }\n}\nlet $y = class extends gt {\n};\nclass Zy extends $y {\n describe() {\n return this.deepExtend(super.describe(), {\n id: \"coinbase\",\n name: \"Coinbase\",\n countries: [\"US\"],\n pro: !0,\n rateLimit: 400,\n version: \"v2\",\n userAgent: this.userAgents.chrome,\n headers: {\n \"CB-VERSION\": \"2018-05-30\"\n },\n has: {\n CORS: !0,\n spot: !0,\n margin: !1,\n swap: !1,\n future: !1,\n option: !1,\n cancelOrder: !0,\n cancelOrders: !0,\n createDepositAddress: !0,\n createLimitBuyOrder: !0,\n createLimitSellOrder: !0,\n createMarketBuyOrder: !0,\n createMarketBuyOrderWithCost: !0,\n createMarketOrderWithCost: !1,\n createMarketSellOrder: !0,\n createMarketSellOrderWithCost: !1,\n createOrder: !0,\n editOrder: !0,\n fetchAccounts: !0,\n fetchBalance: !0,\n fetchCanceledOrders: !0,\n fetchClosedOrders: !0,\n fetchCurrencies: !0,\n fetchDeposits: !0,\n fetchL2OrderBook: !1,\n fetchLedger: !0,\n fetchMarkets: !0,\n fetchMyBuys: !0,\n fetchMySells: !0,\n fetchMyTrades: !0,\n fetchOHLCV: !0,\n fetchOpenOrders: !0,\n fetchOrder: !0,\n fetchOrderBook: !0,\n fetchOrders: !0,\n fetchPosition: !1,\n fetchPositions: !1,\n fetchPositionsRisk: !1,\n fetchTicker: !0,\n fetchTickers: !0,\n fetchTime: !0,\n fetchTrades: !0,\n fetchTradingFee: !1,\n fetchTradingFees: !1,\n fetchWithdrawals: !0,\n withdraw: !0\n },\n urls: {\n logo: \"https://user-images.githubusercontent.com/1294454/40811661-b6eceae2-653a-11e8-829e-10bfadb078cf.jpg\",\n api: {\n rest: \"https://api.coinbase.com\"\n },\n www: \"https://www.coinbase.com\",\n doc: [\n \"https://developers.coinbase.com/api/v2\",\n \"https://docs.cloud.coinbase.com/advanced-trade-api/docs/welcome\"\n ],\n fees: [\n \"https://support.coinbase.com/customer/portal/articles/2109597-buy-sell-bank-transfer-fees\",\n \"https://www.coinbase.com/advanced-fees\"\n ],\n // https://www.coinbase.com/join/58cbe25a355148797479dbd2 - I removed the code for now, because CWS is blocking until we explain our affiliate program to our users\n referral: \"https://www.coinbase.com\"\n },\n requiredCredentials: {\n apiKey: !0,\n secret: !0\n },\n api: {\n v2: {\n public: {\n get: [\n \"currencies\",\n \"currencies/crypto\",\n \"time\",\n \"exchange-rates\",\n \"users/{user_id}\",\n \"prices/{symbol}/buy\",\n \"prices/{symbol}/sell\",\n \"prices/{symbol}/spot\"\n ]\n },\n private: {\n get: [\n \"accounts\",\n \"accounts/{account_id}\",\n \"accounts/{account_id}/addresses\",\n \"accounts/{account_id}/addresses/{address_id}\",\n \"accounts/{account_id}/addresses/{address_id}/transactions\",\n \"accounts/{account_id}/transactions\",\n \"accounts/{account_id}/transactions/{transaction_id}\",\n \"accounts/{account_id}/buys\",\n \"accounts/{account_id}/buys/{buy_id}\",\n \"accounts/{account_id}/sells\",\n \"accounts/{account_id}/sells/{sell_id}\",\n \"accounts/{account_id}/deposits\",\n \"accounts/{account_id}/deposits/{deposit_id}\",\n \"accounts/{account_id}/withdrawals\",\n \"accounts/{account_id}/withdrawals/{withdrawal_id}\",\n \"payment-methods\",\n \"payment-methods/{payment_method_id}\",\n \"user\",\n \"user/auth\"\n ],\n post: [\n \"accounts\",\n \"accounts/{account_id}/primary\",\n \"accounts/{account_id}/addresses\",\n \"accounts/{account_id}/transactions\",\n \"accounts/{account_id}/transactions/{transaction_id}/complete\",\n \"accounts/{account_id}/transactions/{transaction_id}/resend\",\n \"accounts/{account_id}/buys\",\n \"accounts/{account_id}/buys/{buy_id}/commit\",\n \"accounts/{account_id}/sells\",\n \"accounts/{account_id}/sells/{sell_id}/commit\",\n \"accounts/{account_id}/deposits\",\n \"accounts/{account_id}/deposits/{deposit_id}/commit\",\n \"accounts/{account_id}/withdrawals\",\n \"accounts/{account_id}/withdrawals/{withdrawal_id}/commit\"\n ],\n put: [\n \"accounts/{account_id}\",\n \"user\"\n ],\n delete: [\n \"accounts/{id}\",\n \"accounts/{account_id}/transactions/{transaction_id}\"\n ]\n }\n },\n v3: {\n public: {\n get: [\n \"brokerage/time\"\n ]\n },\n private: {\n get: [\n \"brokerage/accounts\",\n \"brokerage/accounts/{account_uuid}\",\n \"brokerage/orders/historical/batch\",\n \"brokerage/orders/historical/fills\",\n \"brokerage/orders/historical/{order_id}\",\n \"brokerage/products\",\n \"brokerage/products/{product_id}\",\n \"brokerage/products/{product_id}/candles\",\n \"brokerage/products/{product_id}/ticker\",\n \"brokerage/portfolios\",\n \"brokerage/portfolios/{portfolio_uuid}\",\n \"brokerage/transaction_summary\",\n \"brokerage/product_book\",\n \"brokerage/best_bid_ask\",\n \"brokerage/convert/trade/{trade_id}\",\n \"brokerage/cfm/balance_summary\",\n \"brokerage/cfm/positions\",\n \"brokerage/cfm/positions/{product_id}\",\n \"brokerage/cfm/sweeps\",\n \"brokerage/intx/portfolio/{portfolio_uuid}\",\n \"brokerage/intx/positions/{portfolio_uuid}\",\n \"brokerage/intx/positions/{portfolio_uuid}/{symbol}\"\n ],\n post: [\n \"brokerage/orders\",\n \"brokerage/orders/batch_cancel\",\n \"brokerage/orders/edit\",\n \"brokerage/orders/edit_preview\",\n \"brokerage/orders/preview\",\n \"brokerage/portfolios\",\n \"brokerage/portfolios/move_funds\",\n \"brokerage/convert/quote\",\n \"brokerage/convert/trade/{trade_id}\",\n \"brokerage/cfm/sweeps/schedule\",\n \"brokerage/intx/allocate\"\n ],\n put: [\n \"brokerage/portfolios/{portfolio_uuid}\"\n ],\n delete: [\n \"brokerage/portfolios/{portfolio_uuid}\",\n \"brokerage/cfm/sweeps\"\n ]\n }\n }\n },\n fees: {\n trading: {\n taker: this.parseNumber(\"0.006\"),\n maker: this.parseNumber(\"0.004\"),\n tierBased: !0,\n percentage: !0,\n tiers: {\n taker: [\n [this.parseNumber(\"0\"), this.parseNumber(\"0.006\")],\n [this.parseNumber(\"10000\"), this.parseNumber(\"0.004\")],\n [this.parseNumber(\"50000\"), this.parseNumber(\"0.0025\")],\n [this.parseNumber(\"100000\"), this.parseNumber(\"0.002\")],\n [this.parseNumber(\"1000000\"), this.parseNumber(\"0.0018\")],\n [this.parseNumber(\"15000000\"), this.parseNumber(\"0.0016\")],\n [this.parseNumber(\"75000000\"), this.parseNumber(\"0.0012\")],\n [this.parseNumber(\"250000000\"), this.parseNumber(\"0.0008\")],\n [this.parseNumber(\"400000000\"), this.parseNumber(\"0.0005\")]\n ],\n maker: [\n [this.parseNumber(\"0\"), this.parseNumber(\"0.004\")],\n [this.parseNumber(\"10000\"), this.parseNumber(\"0.0025\")],\n [this.parseNumber(\"50000\"), this.parseNumber(\"0.0015\")],\n [this.parseNumber(\"100000\"), this.parseNumber(\"0.001\")],\n [this.parseNumber(\"1000000\"), this.parseNumber(\"0.0008\")],\n [this.parseNumber(\"15000000\"), this.parseNumber(\"0.0006\")],\n [this.parseNumber(\"75000000\"), this.parseNumber(\"0.0003\")],\n [this.parseNumber(\"250000000\"), this.parseNumber(\"0.0\")],\n [this.parseNumber(\"400000000\"), this.parseNumber(\"0.0\")]\n ]\n }\n }\n },\n precisionMode: ct,\n exceptions: {\n exact: {\n two_factor_required: Z,\n param_required: g,\n validation_error: O,\n invalid_request: g,\n personal_details_required: Z,\n identity_verification_required: Z,\n jumio_verification_required: Z,\n jumio_face_match_verification_required: Z,\n unverified_email: Z,\n authentication_error: Z,\n invalid_authentication_method: Z,\n invalid_token: Z,\n revoked_token: Z,\n expired_token: Z,\n invalid_scope: Z,\n not_found: O,\n rate_limit_exceeded: Ae,\n internal_server_error: O,\n UNSUPPORTED_ORDER_CONFIGURATION: k,\n INSUFFICIENT_FUND: re\n },\n broad: {\n \"request timestamp expired\": ze,\n \"order with this orderID was not found\": Se\n // {\"error\":\"unknown\",\"error_details\":\"order with this orderID was not found\",\"message\":\"order with this orderID was not found\"}\n }\n },\n timeframes: {\n \"1m\": \"ONE_MINUTE\",\n \"5m\": \"FIVE_MINUTE\",\n \"15m\": \"FIFTEEN_MINUTE\",\n \"30m\": \"THIRTY_MINUTE\",\n \"1h\": \"ONE_HOUR\",\n \"2h\": \"TWO_HOUR\",\n \"6h\": \"SIX_HOUR\",\n \"1d\": \"ONE_DAY\"\n },\n options: {\n stablePairs: [\"BUSD-USD\", \"CBETH-ETH\", \"DAI-USD\", \"GUSD-USD\", \"GYEN-USD\", \"PAX-USD\", \"PAX-USDT\", \"USDC-EUR\", \"USDC-GBP\", \"USDT-EUR\", \"USDT-GBP\", \"USDT-USD\", \"USDT-USDC\", \"WBTC-BTC\"],\n fetchCurrencies: {\n expires: 5e3\n },\n accounts: [\n \"wallet\",\n \"fiat\"\n // 'vault',\n ],\n v3Accounts: [\n \"ACCOUNT_TYPE_CRYPTO\",\n \"ACCOUNT_TYPE_FIAT\"\n ],\n createMarketBuyOrderRequiresPrice: !0,\n advanced: !0,\n fetchMarkets: \"fetchMarketsV3\",\n fetchTicker: \"fetchTickerV3\",\n fetchTickers: \"fetchTickersV3\",\n fetchAccounts: \"fetchAccountsV3\",\n fetchBalance: \"v2PrivateGetAccounts\",\n user_native_currency: \"USD\"\n // needed to get fees for v3\n }\n });\n }\n async fetchStatus(e = {}) {\n const t = await this.v3PublicGetBrokerageTime(e), i = this.safeString(t, \"iso\"), s = this.parse8601(i);\n return {\n status: s !== void 0 ? \"ok\" : \"maintenance\",\n updated: s,\n eta: void 0,\n url: void 0,\n info: t\n };\n }\n async fetchTime(e = {}) {\n const t = await this.v2PublicGetTime(e), i = this.safeValue(t, \"data\", {});\n return this.safeTimestamp(i, \"epoch\");\n }\n async fetchAccounts(e = {}) {\n return this.safeString(this.options, \"fetchAccounts\", \"fetchAccountsV3\") === \"fetchAccountsV3\" ? await this.fetchAccountsV3(e) : await this.fetchAccountsV2(e);\n }\n async fetchAccountsV2(e = {}) {\n await this.loadMarkets();\n let t = !1;\n if ([t, e] = this.handleOptionAndParams(e, \"fetchAccounts\", \"paginate\"), t)\n return await this.fetchPaginatedCallCursor(\"fetchAccounts\", void 0, void 0, void 0, e, \"next_starting_after\", \"starting_after\", void 0, 100);\n const i = {\n limit: 250\n }, s = await this.v2PrivateGetAccounts(this.extend(i, e)), n = this.safeList(s, \"data\", []), r = this.safeDict(s, \"pagination\", {}), a = this.safeString(r, \"next_starting_after\"), o = this.safeList(s, \"data\", []), u = o.length - 1, f = this.safeValue(o, u);\n return a !== void 0 && a !== \"\" && (f.next_starting_after = a, o[u] = f), this.parseAccounts(n, e);\n }\n async fetchAccountsV3(e = {}) {\n await this.loadMarkets();\n let t = !0, i = null, s = [];\n for (; t; ) {\n const n = {\n cursor: i,\n limit: 250\n }, r = await this.v3PrivateGetBrokerageAccounts(this.extend(n, e));\n t = this.safeValue(r, \"has_next\"), i = this.safeValue(r, \"cursor\");\n const a = this.safeValue(r, \"accounts\", []);\n s = s.concat(a);\n }\n return this.parseAccounts(s, e);\n }\n parseAccount(e) {\n const t = this.safeValue(e, \"active\"), i = this.safeString(e, \"currency\"), s = this.safeValue(e, \"currency\", {}), n = this.safeString(s, \"code\", i), r = this.safeString(e, \"type\"), a = this.safeString(e, \"type\");\n return {\n id: this.safeString2(e, \"id\", \"uuid\"),\n type: t !== void 0 ? r : a,\n code: this.safeCurrencyCode(n),\n info: e,\n active: t\n };\n }\n async createDepositAddress(e, t = {}) {\n let i = this.safeString(t, \"account_id\");\n if (t = this.omit(t, \"account_id\"), i === void 0) {\n await this.loadAccounts();\n for (let u = 0; u < this.accounts.length; u++) {\n const f = this.accounts[u];\n if (f.code === e && f.type === \"ACCOUNT_TYPE_CRYPTO\") {\n i = f.id;\n break;\n }\n }\n }\n if (i === void 0)\n throw new mr(e).addMessage(\"createDepositAddress() could not find the account with matching currency code, specify an `account_id` extra param\").exchange(this.id);\n const s = {\n account_id: i\n }, n = await this.v2PrivatePostAccountsAccountIdAddresses(this.extend(s, t)), r = this.safeValue(n, \"data\", {}), a = this.safeString(r, \"destination_tag\"), o = this.safeString(r, \"address\"), c = this.safeString(r, \"network\");\n return {\n currency: e,\n tag: a,\n address: o,\n network: c,\n info: n\n };\n }\n async fetchMySells(e = void 0, t = void 0, i = void 0, s = {}) {\n const n = this.prepareAccountRequest(i, s);\n await this.loadMarkets();\n const r = this.omit(s, [\"account_id\", \"accountId\"]), a = await this.v2PrivateGetAccountsAccountIdSells(this.extend(n, r));\n return this.parseTrades(a.data, void 0, t, i);\n }\n async fetchMyBuys(e = void 0, t = void 0, i = void 0, s = {}) {\n const n = this.prepareAccountRequest(i, s);\n await this.loadMarkets();\n const r = this.omit(s, [\"account_id\", \"accountId\"]), a = await this.v2PrivateGetAccountsAccountIdBuys(this.extend(n, r));\n return this.parseTrades(a.data, void 0, t, i);\n }\n async fetchTransactionsWithMethod(e, t = void 0, i = void 0, s = void 0, n = {}) {\n const r = await this.prepareAccountRequestWithCurrencyCode(t, s, n);\n await this.loadMarkets();\n const a = this.omit(n, [\"account_id\", \"accountId\"]), o = await this[e](this.extend(r, a));\n return this.parseTransactions(o.data, void 0, i, s);\n }\n async fetchWithdrawals(e = void 0, t = void 0, i = void 0, s = {}) {\n return await this.fetchTransactionsWithMethod(\"v2PrivateGetAccountsAccountIdWithdrawals\", e, t, i, s);\n }\n async fetchDeposits(e = void 0, t = void 0, i = void 0, s = {}) {\n return await this.fetchTransactionsWithMethod(\"v2PrivateGetAccountsAccountIdDeposits\", e, t, i, s);\n }\n parseTransactionStatus(e) {\n const t = {\n created: \"pending\",\n completed: \"ok\",\n canceled: \"canceled\"\n };\n return this.safeString(t, e, e);\n }\n parseTransaction(e, t = void 0) {\n const i = this.safeString(e, \"type\");\n let s, n;\n if (i === \"send\") {\n const l = this.safeValue(e, \"network\", {});\n s = this.safeValue(l, \"transaction_amount\", {}), n = this.safeValue(l, \"transaction_fee\", {});\n } else\n s = this.safeValue(e, \"subtotal\", {}), n = this.safeValue(e, \"fee\", {});\n let r = this.parseTransactionStatus(this.safeString(e, \"status\"));\n r === void 0 && (r = this.safeValue(e, \"committed\") ? \"ok\" : \"pending\");\n const a = this.safeString(e, \"id\"), o = this.safeString(s, \"currency\"), c = this.safeString(n, \"currency\"), u = this.safeValue(e, \"created_at\"), f = this.safeValue(e, \"to\", {}), h = this.safeString(f, \"address\");\n return {\n info: e,\n id: a,\n txid: a,\n timestamp: this.parse8601(u),\n datetime: u,\n network: void 0,\n address: h,\n addressTo: h,\n addressFrom: void 0,\n tag: void 0,\n tagTo: void 0,\n tagFrom: void 0,\n type: this.safeString(e, \"resource\"),\n amount: this.safeNumber(s, \"amount\"),\n currency: this.safeCurrencyCode(o, t),\n status: r,\n updated: this.parse8601(this.safeValue(e, \"updated_at\")),\n fee: {\n cost: this.safeNumber(n, \"amount\"),\n currency: this.safeCurrencyCode(c)\n }\n };\n }\n parseTrade(e, t = void 0) {\n let i;\n const s = this.safeValue(e, \"total\", {}), n = this.safeValue(e, \"amount\", {}), r = this.safeValue(e, \"subtotal\", {}), a = this.safeValue(e, \"fee\", {}), o = this.safeString(e, \"product_id\");\n if (t = this.safeMarket(o, t, \"-\"), t !== void 0)\n i = t.symbol;\n else {\n const V = this.safeString(n, \"currency\"), j = this.safeString(s, \"currency\");\n if (V !== void 0 && j !== void 0) {\n const G = this.safeCurrencyCode(V), W = this.safeCurrencyCode(j);\n i = G + \"/\" + W;\n }\n }\n const c = this.safeValue(e, \"size_in_quote\"), u = this.safeString(e, \"price\");\n let f, h = this.safeString(e, \"size\");\n c && (f = h, h = P.stringDiv(h, u));\n const l = this.safeString(e, \"commission\"), p = this.safeString(n, \"amount\", h), m = this.safeString(r, \"amount\", f);\n let y, w, S;\n m !== void 0 && p !== void 0 ? y = P.stringDiv(m, p) : y = u, y !== void 0 && p !== void 0 ? w = P.stringMul(y, p) : w = m, m !== void 0 && p === void 0 && y !== void 0 ? S = P.stringDiv(m, y) : S = p;\n let b = this.safeString(a, \"currency\");\n const T = this.safeNumber(a, \"amount\", this.parseNumber(l));\n b === void 0 && t !== void 0 && T !== void 0 && (b = t.quote);\n const x = this.safeStringN(e, [\"created_at\", \"trade_time\", \"time\"]), v = this.safeStringLower2(e, \"resource\", \"side\"), _ = this.safeStringLower(e, \"liquidity_indicator\");\n return this.safeTrade({\n info: e,\n id: this.safeString2(e, \"id\", \"trade_id\"),\n order: this.safeString(e, \"order_id\"),\n timestamp: this.parse8601(x),\n datetime: x,\n symbol: i,\n type: void 0,\n side: v === \"unknown_order_side\" ? void 0 : v,\n takerOrMaker: _ === \"unknown_liquidity_indicator\" ? void 0 : _,\n price: y,\n amount: S,\n cost: w,\n fee: {\n cost: T,\n currency: this.safeCurrencyCode(b)\n }\n });\n }\n async fetchMarkets(e = {}) {\n const t = this.safeString(this.options, \"fetchMarkets\", \"fetchMarketsV3\");\n return await this[t](e);\n }\n async fetchMarketsV2(e = {}) {\n const t = await this.fetchCurrenciesFromCache(e), i = this.safeValue(t, \"currencies\", {}), s = this.safeValue(t, \"exchangeRates\", {}), n = this.safeValue(i, \"data\", []), r = this.indexBy(n, \"id\"), a = this.safeValue(this.safeValue(s, \"data\", {}), \"rates\", {}), o = Object.keys(a), c = [];\n for (let u = 0; u < o.length; u++) {\n const f = o[u], h = this.safeCurrencyCode(f);\n if ((f in r ? \"fiat\" : \"crypto\") === \"crypto\")\n for (let p = 0; p < n.length; p++) {\n const m = n[p], y = this.safeString(m, \"id\"), w = this.safeCurrencyCode(y);\n c.push({\n id: f + \"-\" + y,\n symbol: h + \"/\" + w,\n base: h,\n quote: w,\n settle: void 0,\n baseId: f,\n quoteId: y,\n settleId: void 0,\n type: \"spot\",\n spot: !0,\n margin: !1,\n swap: !1,\n future: !1,\n option: !1,\n active: void 0,\n contract: !1,\n linear: void 0,\n inverse: void 0,\n contractSize: void 0,\n expiry: void 0,\n expiryDatetime: void 0,\n strike: void 0,\n optionType: void 0,\n precision: {\n amount: void 0,\n price: void 0\n },\n limits: {\n leverage: {\n min: void 0,\n max: void 0\n },\n amount: {\n min: void 0,\n max: void 0\n },\n price: {\n min: void 0,\n max: void 0\n },\n cost: {\n min: this.safeNumber(m, \"min_size\"),\n max: void 0\n }\n },\n info: m\n });\n }\n }\n return c;\n }\n async fetchMarketsV3(e = {}) {\n const t = await this.v3PrivateGetBrokerageProducts(e), i = await this.v3PrivateGetBrokerageTransactionSummary(e), s = this.safeValue(i, \"fee_tier\", {}), n = this.safeValue(t, \"products\", []), r = [];\n for (let a = 0; a < n.length; a++) {\n const o = n[a], c = this.safeString(o, \"product_id\"), u = this.safeString(o, \"base_currency_id\"), f = this.safeString(o, \"quote_currency_id\"), h = this.safeCurrencyCode(u), l = this.safeCurrencyCode(f), p = this.safeStringLower(o, \"product_type\"), m = this.safeValue(o, \"trading_disabled\"), y = this.safeValue(this.options, \"stablePairs\", []);\n r.push({\n id: c,\n symbol: h + \"/\" + l,\n base: h,\n quote: l,\n settle: void 0,\n baseId: u,\n quoteId: f,\n settleId: void 0,\n type: p,\n spot: p === \"spot\",\n margin: void 0,\n swap: !1,\n future: !1,\n option: !1,\n active: !m,\n contract: !1,\n linear: void 0,\n inverse: void 0,\n taker: this.inArray(c, y) ? 1e-5 : this.safeNumber(s, \"taker_fee_rate\"),\n maker: this.inArray(c, y) ? 0 : this.safeNumber(s, \"maker_fee_rate\"),\n contractSize: void 0,\n expiry: void 0,\n expiryDatetime: void 0,\n strike: void 0,\n optionType: void 0,\n precision: {\n amount: this.safeNumber(o, \"base_increment\"),\n price: this.safeNumber2(o, \"price_increment\", \"quote_increment\")\n },\n limits: {\n leverage: {\n min: void 0,\n max: void 0\n },\n amount: {\n min: this.safeNumber(o, \"base_min_size\"),\n max: this.safeNumber(o, \"base_max_size\")\n },\n price: {\n min: void 0,\n max: void 0\n },\n cost: {\n min: this.safeNumber(o, \"quote_min_size\"),\n max: this.safeNumber(o, \"quote_max_size\")\n }\n },\n created: void 0,\n info: o\n });\n }\n return r;\n }\n async fetchCurrenciesFromCache(e = {}) {\n const t = this.safeValue(this.options, \"fetchCurrencies\", {}), i = this.safeInteger(t, \"timestamp\"), s = this.safeInteger(t, \"expires\", 1e3), n = this.milliseconds();\n if (i === void 0 || n - i > s) {\n const r = this.v2PublicGetCurrenciesCrypto(e), a = this.v2PublicGetCurrencies(e), o = this.v2PublicGetExchangeRates(e), [c, u, f] = await Promise.all([r, a, o]);\n this.options.fetchCurrencies = this.extend(t, {\n currencies: c,\n exchangeRates: f,\n fiatCurrencies: u,\n timestamp: n\n });\n }\n return this.safeValue(this.options, \"fetchCurrencies\", {});\n }\n async fetchCurrencies(e = {}) {\n const t = await this.fetchCurrenciesFromCache(e), i = this.safeValue(t, \"currencies\", {}), s = this.safeValue(t, \"fiatCurrencies\", {}), n = this.safeValue(t, \"exchangeRates\", {}), r = this.safeValue(s, \"data\", []), a = this.safeValue(i, \"data\", []), o = this.indexBy(a, \"code\"), c = this.indexBy(r, \"id\"), u = this.safeValue(this.safeValue(n, \"data\", {}), \"rates\", {}), f = Object.keys(u), h = {};\n for (let l = 0; l < f.length; l++) {\n const p = f[l], m = p in c ? \"fiat\" : \"crypto\", y = this.safeValue(o, p, {}), w = this.safeString(y, \"code\", p), S = this.safeString(y, \"name\"), b = this.safeCurrencyCode(w), T = this.safeString(y, \"exponent\", \"2\"), x = Math.pow(10, -T).toString();\n h[b] = {\n id: w,\n code: b,\n info: y,\n type: m,\n name: S,\n active: !0,\n deposit: void 0,\n withdraw: void 0,\n fee: void 0,\n precision: x,\n limits: {\n amount: {\n min: this.safeNumber(y, \"min_size\"),\n max: void 0\n },\n withdraw: {\n min: void 0,\n max: void 0\n }\n }\n };\n }\n return h;\n }\n async fetchTickers(e = void 0, t = {}) {\n return this.safeString(this.options, \"fetchTickers\", \"fetchTickersV3\") === \"fetchTickersV3\" ? await this.fetchTickersV3(e, t) : await this.fetchTickersV2(e, t);\n }\n async fetchTickersV2(e = void 0, t = {}) {\n await this.loadMarkets(), e = this.marketSymbols(e);\n const i = {\n // 'currency': 'USD',\n }, s = await this.v2PublicGetExchangeRates(this.extend(i, t)), n = this.safeValue(s, \"data\", {}), r = this.safeValue(n, \"rates\", {}), a = this.safeString(n, \"currency\"), o = {}, c = Object.keys(r), u = \"-\";\n for (let f = 0; f < c.length; f++) {\n const h = c[f], l = h + u + a, p = this.safeMarket(l, void 0, u), m = p.symbol;\n o[m] = this.parseTicker(r[h], p);\n }\n return this.filterByArrayTickers(o, \"symbol\", e);\n }\n async fetchTickersV3(e = void 0, t = {}) {\n await this.loadMarkets(), e = this.marketSymbols(e);\n const i = {};\n e !== void 0 && (i.product_ids = this.marketIds(e));\n const s = await this.v3PrivateGetBrokerageProducts(this.extend(i, t)), n = this.safeValue(s, \"products\", []), r = {};\n for (let a = 0; a < n.length; a++) {\n const o = n[a], c = this.safeString(o, \"product_id\"), u = this.safeMarket(c, void 0, \"-\"), f = u.symbol;\n r[f] = this.parseTicker(o, u);\n }\n return this.filterByArrayTickers(r, \"symbol\", e);\n }\n async fetchTicker(e, t = {}) {\n return this.safeString(this.options, \"fetchTicker\", \"fetchTickerV3\") === \"fetchTickerV3\" ? await this.fetchTickerV3(e, t) : await this.fetchTickerV2(e, t);\n }\n async fetchTickerV2(e, t = {}) {\n await this.loadMarkets();\n const i = this.market(e), s = this.extend({\n symbol: i.id\n }, t), n = await this.v2PublicGetPricesSymbolSpot(s), r = await this.v2PublicGetPricesSymbolBuy(s), a = await this.v2PublicGetPricesSymbolSell(s), o = this.safeValue(n, \"data\", {}), c = this.safeValue(r, \"data\", {}), u = this.safeValue(a, \"data\", {}), f = {\n bid: this.safeNumber(u, \"amount\"),\n ask: this.safeNumber(c, \"amount\"),\n price: this.safeNumber(o, \"amount\")\n };\n return this.parseTicker(f, i);\n }\n async fetchTickerV3(e, t = {}) {\n await this.loadMarkets();\n const i = this.market(e), s = {\n product_id: i.id,\n limit: 1\n }, n = await this.v3PrivateGetBrokerageProductsProductIdTicker(this.extend(s, t)), r = this.safeValue(n, \"trades\", []), a = this.parseTicker(r[0], i);\n return a.bid = this.safeNumber(n, \"best_bid\"), a.ask = this.safeNumber(n, \"best_ask\"), a;\n }\n parseTicker(e, t = void 0) {\n let i = this.safeNumber(e, \"bid\"), s = this.safeNumber(e, \"ask\"), n, r;\n if (\"bids\" in e) {\n const u = this.safeValue(e, \"bids\", []), f = this.safeValue(e, \"asks\", []);\n i = this.safeNumber(u[0], \"price\"), n = this.safeNumber(u[0], \"size\"), s = this.safeNumber(f[0], \"price\"), r = this.safeNumber(f[0], \"size\");\n }\n const a = this.safeString(e, \"product_id\"), o = this.safeNumber(e, \"price\"), c = this.safeString(e, \"time\");\n return this.safeTicker({\n symbol: this.safeSymbol(a, t),\n timestamp: this.parse8601(c),\n datetime: c,\n bid: i,\n ask: s,\n last: o,\n high: void 0,\n low: void 0,\n bidVolume: n,\n askVolume: r,\n vwap: void 0,\n open: void 0,\n close: o,\n previousClose: void 0,\n change: void 0,\n percentage: this.safeNumber(e, \"price_percentage_change_24h\"),\n average: void 0,\n baseVolume: void 0,\n quoteVolume: void 0,\n info: e\n }, t);\n }\n parseCustomBalance(e, t = {}) {\n const i = e, s = this.safeValue(t, \"type\", this.options.accounts), n = this.safeValue(t, \"type\", this.options.v3Accounts), r = { info: e };\n for (let a = 0; a < i.length; a++) {\n const o = i[a], c = this.safeString(o, \"type\");\n if (this.inArray(c, s)) {\n const u = this.safeValue(o, \"balance\");\n if (u !== void 0) {\n const f = this.safeString(u, \"currency\"), h = this.safeCurrencyCode(f), l = this.safeString(u, \"amount\"), p = l;\n let m = this.safeValue(r, h);\n m === void 0 ? (m = this.account(), m.free = p, m.total = l) : (m.free = P.stringAdd(m.free, l), m.total = P.stringAdd(m.total, l)), r[h] = m;\n }\n } else if (this.inArray(c, n)) {\n const u = this.safeValue(o, \"available_balance\"), f = this.safeValue(o, \"hold\");\n if (u !== void 0 && f !== void 0) {\n const h = this.safeString(u, \"currency\"), l = this.safeCurrencyCode(h), p = this.safeString(f, \"value\"), m = this.safeString(u, \"value\"), y = P.stringAdd(p, m);\n let w = this.safeValue(r, l);\n w === void 0 ? (w = this.account(), w.free = m, w.used = p, w.total = y) : (w.free = P.stringAdd(w.free, m), w.used = P.stringAdd(w.used, p), w.total = P.stringAdd(w.total, y)), r[l] = w;\n }\n }\n }\n return this.safeBalance(r);\n }\n async fetchBalance(e = {}) {\n await this.loadMarkets();\n let t = !0, i = null, s = [];\n for (; t; ) {\n const n = {\n limit: 250\n };\n i && (n.starting_after = i);\n const r = await this.v2PrivateGetAccounts(this.extend(n, e));\n t = this.safeValue(r.pagination, \"next_uri\"), i = this.safeValue(r.pagination, \"next_starting_after\");\n const a = this.safeValue(r, \"data\", []);\n s = s.concat(a);\n }\n return this.parseCustomBalance(s, e);\n }\n async fetchLedger(e = void 0, t = void 0, i = void 0, s = {}) {\n await this.loadMarkets();\n let n;\n e !== void 0 && (n = this.currency(e));\n const r = await this.prepareAccountRequestWithCurrencyCode(e, i, s), a = this.omit(s, [\"account_id\", \"accountId\"]), o = await this.v2PrivateGetAccountsAccountIdTransactions(this.extend(r, a));\n return this.parseLedger(o.data, n, t, i);\n }\n parseLedgerEntryStatus(e) {\n const t = {\n completed: \"ok\"\n };\n return this.safeString(t, e, e);\n }\n parseLedgerEntryType(e) {\n const t = {\n buy: \"trade\",\n sell: \"trade\",\n fiat_deposit: \"transaction\",\n fiat_withdrawal: \"transaction\",\n exchange_deposit: \"transaction\",\n exchange_withdrawal: \"transaction\",\n send: \"transaction\",\n pro_deposit: \"transaction\",\n pro_withdrawal: \"transaction\"\n // crypto deposit (to coinbase from coinbasepro)\n };\n return this.safeString(t, e, e);\n }\n parseLedgerEntry(e, t = void 0) {\n const i = this.safeValue(e, \"amount\", {});\n let s = this.safeString(i, \"amount\"), n;\n P.stringLt(s, \"0\") ? (n = \"out\", s = P.stringNeg(s)) : n = \"in\";\n const r = this.safeString(i, \"currency\"), a = this.safeCurrencyCode(r, t);\n let o;\n const c = this.safeValue(e, \"network\", {}), u = c.hash, f = this.safeString(c, \"network_name\"), h = this.safeValue(c, \"transaction_fee\");\n if (h !== void 0) {\n const b = this.safeString(h, \"currency\"), T = this.safeCurrencyCode(b, t);\n o = {\n cost: this.safeNumber(h, \"amount\"),\n currency: T\n };\n }\n const l = this.parse8601(this.safeValue(e, \"created_at\")), p = this.safeString(e, \"id\"), m = this.parseLedgerEntryType(this.safeString(e, \"type\")), y = this.parseLedgerEntryStatus(this.safeString(e, \"status\")), w = this.safeString(e, \"resource_path\");\n let S;\n if (w !== void 0) {\n const b = w.split(\"/\");\n b.length > 3 && (S = b[3]);\n }\n return {\n info: e,\n id: p,\n txid: u,\n network: f,\n timestamp: l,\n datetime: this.iso8601(l),\n direction: n,\n account: S,\n referenceId: void 0,\n referenceAccount: void 0,\n type: m,\n currency: a,\n amount: this.parseNumber(s),\n before: void 0,\n after: void 0,\n status: y,\n fee: o\n };\n }\n async findAccountId(e) {\n await this.loadMarkets(), await this.loadAccounts();\n for (let t = 0; t < this.accounts.length; t++) {\n const i = this.accounts[t];\n if (i.code === e)\n return i.id;\n }\n }\n prepareAccountRequest(e = void 0, t = {}) {\n const i = this.safeString2(t, \"account_id\", \"accountId\");\n if (i === void 0)\n throw new g(\"prepareAccountRequest() method requires an account_id (or accountId) parameter\").exchange(this.id);\n const s = {\n account_id: i\n };\n return e !== void 0 && (s.limit = e), s;\n }\n async prepareAccountRequestWithCurrencyCode(e = void 0, t = void 0, i = {}) {\n let s = this.safeString2(i, \"account_id\", \"accountId\");\n if (s === void 0) {\n if (e === void 0)\n throw new g(\"prepareAccountRequestWithCurrencyCode() method requires an account_id (or accountId) parameter OR a currency code argument\").exchange(this.id);\n if (s = await this.findAccountId(e), s === void 0)\n throw new O().addMessage(\"prepareAccountRequestWithCurrencyCode() could not find account id for \" + e).exchange(this.id);\n }\n const n = {\n account_id: s\n };\n return t !== void 0 && (n.limit = t), n;\n }\n async createMarketBuyOrderWithCost(e, t, i = {}) {\n await this.loadMarkets();\n const s = this.market(e);\n if (!s.spot)\n throw new ge(s.type).addMessage(\"createMarketBuyOrderWithCost() supports spot orders only\").exchange(this.id);\n return i.createMarketBuyOrderRequiresPrice = !1, await this.createOrder(e, \"market\", \"buy\", t, void 0, i);\n }\n async createOrder(e, t, i, s, n = void 0, r = {}) {\n await this.loadMarkets();\n const a = this.market(e);\n let o = {\n client_order_id: this.uuid(),\n product_id: a.id,\n side: i.toUpperCase()\n };\n const c = this.safeNumberN(r, [\"stopPrice\", \"stop_price\", \"triggerPrice\"]), u = this.safeNumber(r, \"stopLossPrice\"), f = this.safeNumber(r, \"takeProfitPrice\"), h = c !== void 0, l = u !== void 0, p = f !== void 0, m = this.safeString(r, \"timeInForce\"), y = m === \"PO\" ? !0 : this.safeValue2(r, \"postOnly\", \"post_only\", !1), w = this.safeString(r, \"end_time\");\n let S = this.safeString(r, \"stop_direction\");\n if (t === \"limit\")\n if (h)\n if (S === void 0 && (S = i === \"buy\" ? \"STOP_DIRECTION_STOP_DOWN\" : \"STOP_DIRECTION_STOP_UP\"), m === \"GTD\" || w !== void 0) {\n if (w === void 0)\n throw new g(\"createOrder() requires an end_time parameter for a GTD order\").exchange(this.id);\n o.order_configuration = {\n stop_limit_stop_limit_gtd: {\n base_size: this.amountToPrecision(e, s),\n limit_price: this.priceToPrecision(e, n),\n stop_price: this.priceToPrecision(e, c),\n stop_direction: S,\n end_time: w\n }\n };\n } else\n o.order_configuration = {\n stop_limit_stop_limit_gtc: {\n base_size: this.amountToPrecision(e, s),\n limit_price: this.priceToPrecision(e, n),\n stop_price: this.priceToPrecision(e, c),\n stop_direction: S\n }\n };\n else if (l || p) {\n let _;\n l ? (S === void 0 && (S = i === \"buy\" ? \"STOP_DIRECTION_STOP_UP\" : \"STOP_DIRECTION_STOP_DOWN\"), _ = this.priceToPrecision(e, u)) : (S === void 0 && (S = i === \"buy\" ? \"STOP_DIRECTION_STOP_DOWN\" : \"STOP_DIRECTION_STOP_UP\"), _ = this.priceToPrecision(e, f)), o.order_configuration = {\n stop_limit_stop_limit_gtc: {\n base_size: this.amountToPrecision(e, s),\n limit_price: this.priceToPrecision(e, n),\n stop_price: _,\n stop_direction: S\n }\n };\n } else if (m === \"GTD\" || w !== void 0) {\n if (w === void 0)\n throw new g(\"createOrder() requires an end_time parameter for a GTD order\").exchange(this.id);\n o.order_configuration = {\n limit_limit_gtd: {\n base_size: this.amountToPrecision(e, s),\n limit_price: this.priceToPrecision(e, n),\n end_time: w,\n post_only: y\n }\n };\n } else\n o.order_configuration = {\n limit_limit_gtc: {\n base_size: this.amountToPrecision(e, s),\n limit_price: this.priceToPrecision(e, n),\n post_only: y\n }\n };\n else {\n if (h || l || p)\n throw new k().addMessage(\"createOrder() only stop limit orders are supported\").exchange(this.id);\n if (i === \"buy\") {\n let _, V = !0;\n [V, r] = this.handleOptionAndParams(r, \"createOrder\", \"createMarketBuyOrderRequiresPrice\", !0);\n const j = this.safeNumber(r, \"cost\");\n if (r = this.omit(r, \"cost\"), j !== void 0)\n _ = this.costToPrecision(e, j);\n else if (V) {\n if (n === void 0)\n throw new g(\"createOrder() requires a price argument for market buy orders on spot markets to calculate the total amount to spend (amount * price), alternatively set the createMarketBuyOrderRequiresPrice option or param to false and pass the cost to spend in the amount argument\").exchange(this.id);\n {\n const G = this.numberToString(s), W = this.numberToString(n), B = P.stringMul(G, W);\n _ = this.costToPrecision(e, B);\n }\n } else\n _ = this.costToPrecision(e, s);\n o.order_configuration = {\n market_market_ioc: {\n quote_size: _\n }\n };\n } else\n o.order_configuration = {\n market_market_ioc: {\n base_size: this.amountToPrecision(e, s)\n }\n };\n }\n r = this.omit(r, [\"timeInForce\", \"triggerPrice\", \"stopLossPrice\", \"takeProfitPrice\", \"stopPrice\", \"stop_price\", \"stopDirection\", \"stop_direction\", \"clientOrderId\", \"postOnly\", \"post_only\", \"end_time\"]);\n const b = this.safeValue2(r, \"preview\", \"test\", !1);\n let T;\n if (b ? (r = this.omit(r, [\"preview\", \"test\"]), o = this.omit(o, \"client_order_id\"), T = await this.v3PrivatePostBrokerageOrdersPreview(this.extend(o, r))) : T = await this.v3PrivatePostBrokerageOrders(this.extend(o, r)), this.safeValue(T, \"success\") !== !0) {\n const _ = this.safeValue(T, \"error_response\"), V = this.safeString(_, \"error\"), j = this.safeString(_, \"message\");\n if (_ !== void 0)\n throw this.throwExactlyMatchedException(this.exceptions.exact, V, j), this.throwBroadlyMatchedException(this.exceptions.broad, V, j), new k().addMessage(j).exchange(this.id);\n }\n const v = this.safeValue(T, \"success_response\", {});\n return this.parseOrder(v, a);\n }\n parseOrder(e, t = void 0) {\n const i = this.safeString(e, \"product_id\"), s = this.safeSymbol(i, t, \"-\");\n s !== void 0 && (t = this.market(s));\n const n = this.safeValue(e, \"order_configuration\", {}), r = this.safeValue(n, \"limit_limit_gtc\"), a = this.safeValue(n, \"limit_limit_gtd\"), o = this.safeValue(n, \"stop_limit_stop_limit_gtc\"), c = this.safeValue(n, \"stop_limit_stop_limit_gtd\"), u = this.safeValue(n, \"market_market_ioc\"), f = r !== void 0 || a !== void 0, h = o !== void 0 || c !== void 0;\n let l, p, m, y;\n if (f) {\n const T = r !== void 0 ? r : a;\n l = this.safeString(T, \"limit_price\"), p = this.safeString(T, \"base_size\"), m = this.safeValue(T, \"post_only\");\n } else if (h) {\n const T = o !== void 0 ? o : c;\n l = this.safeString(T, \"limit_price\"), p = this.safeString(T, \"base_size\"), m = this.safeValue(T, \"post_only\"), y = this.safeString(T, \"stop_price\");\n } else\n p = this.safeString(u, \"base_size\");\n const w = this.safeString(e, \"created_time\"), S = this.safeString(e, \"total_fees\");\n let b;\n return S !== void 0 && t !== void 0 && (b = t.quote), this.safeOrder({\n info: e,\n id: this.safeString(e, \"order_id\"),\n clientOrderId: this.safeString(e, \"client_order_id\"),\n timestamp: this.parse8601(w),\n datetime: w,\n lastTradeTimestamp: void 0,\n symbol: s,\n type: this.parseOrderType(this.safeString(e, \"order_type\")),\n timeInForce: this.parseTimeInForce(this.safeString(e, \"time_in_force\")),\n postOnly: m,\n side: this.safeStringLower(e, \"side\"),\n price: l,\n stopPrice: y,\n triggerPrice: y,\n amount: p,\n filled: this.safeString(e, \"filled_size\"),\n remaining: void 0,\n cost: void 0,\n average: this.safeString(e, \"average_filled_price\"),\n status: this.parseOrderStatus(this.safeString(e, \"status\")),\n fee: {\n cost: this.safeString(e, \"total_fees\"),\n currency: b\n },\n trades: void 0\n }, t);\n }\n parseOrderStatus(e) {\n const t = {\n OPEN: \"open\",\n FILLED: \"closed\",\n CANCELLED: \"canceled\",\n EXPIRED: \"canceled\",\n FAILED: \"canceled\",\n UNKNOWN_ORDER_STATUS: void 0\n };\n return this.safeString(t, e, e);\n }\n parseOrderType(e) {\n if (e === \"UNKNOWN_ORDER_TYPE\")\n return;\n const t = {\n MARKET: \"market\",\n LIMIT: \"limit\",\n STOP: \"limit\",\n STOP_LIMIT: \"limit\"\n };\n return this.safeString(t, e, e);\n }\n parseTimeInForce(e) {\n const t = {\n GOOD_UNTIL_CANCELLED: \"GTC\",\n GOOD_UNTIL_DATE_TIME: \"GTD\",\n IMMEDIATE_OR_CANCEL: \"IOC\",\n FILL_OR_KILL: \"FOK\",\n UNKNOWN_TIME_IN_FORCE: void 0\n };\n return this.safeString(t, e, e);\n }\n async cancelOrder(e, t = void 0, i = {}) {\n await this.loadMarkets();\n const s = await this.cancelOrders([e], t, i);\n return this.safeValue(s, 0, {});\n }\n async cancelOrders(e, t = void 0, i = {}) {\n await this.loadMarkets();\n let s;\n t !== void 0 && (s = this.market(t));\n const n = {\n order_ids: e\n }, r = await this.v3PrivatePostBrokerageOrdersBatchCancel(this.extend(n, i)), a = this.safeValue(r, \"results\", []);\n for (let o = 0; o < a.length; o++)\n if (this.safeValue(a[o], \"success\") !== !0)\n throw new k().addMessage(\"cancelOrders() has failed, check your arguments and parameters\").exchange(this.id);\n return this.parseOrders(a, s);\n }\n async editOrder(e, t, i, s, n = void 0, r = void 0, a = {}) {\n await this.loadMarkets();\n const o = this.market(t), c = {\n order_id: e\n };\n n !== void 0 && (c.size = this.amountToPrecision(t, n)), r !== void 0 && (c.price = this.priceToPrecision(t, r));\n const u = this.safeValue2(a, \"preview\", \"test\", !1);\n let f;\n return u ? (a = this.omit(a, [\"preview\", \"test\"]), f = await this.v3PrivatePostBrokerageOrdersEditPreview(this.extend(c, a))) : f = await this.v3PrivatePostBrokerageOrdersEdit(this.extend(c, a)), this.parseOrder(f, o);\n }\n async fetchOrder(e, t = void 0, i = {}) {\n await this.loadMarkets();\n let s;\n t !== void 0 && (s = this.market(t));\n const n = {\n order_id: e\n }, r = await this.v3PrivateGetBrokerageOrdersHistoricalOrderId(this.extend(n, i)), a = this.safeValue(r, \"order\", {});\n return this.parseOrder(a, s);\n }\n async fetchOrders(e = void 0, t = void 0, i = 100, s = {}) {\n await this.loadMarkets();\n let n = !1;\n if ([n, s] = this.handleOptionAndParams(s, \"fetchOrders\", \"paginate\"), n)\n return await this.fetchPaginatedCallCursor(\"fetchOrders\", e, t, i, s, \"cursor\", \"cursor\", void 0, 100);\n let r;\n e !== void 0 && (r = this.market(e));\n const a = {};\n r !== void 0 && (a.product_id = r.id), i !== void 0 && (a.limit = i), t !== void 0 && (a.start_date = this.iso8601(t));\n const o = this.safeValueN(s, [\"until\", \"till\"]);\n o !== void 0 && (s = this.omit(s, [\"until\", \"till\"]), a.end_date = this.iso8601(o));\n const c = await this.v3PrivateGetBrokerageOrdersHistoricalBatch(this.extend(a, s)), u = this.safeValue(c, \"orders\", []), f = this.safeValue(u, 0), h = this.safeString(c, \"cursor\");\n return h !== void 0 && h !== \"\" && (f.cursor = h, u[0] = f), this.parseOrders(u, r, t, i);\n }\n async fetchOrdersByStatus(e, t = void 0, i = void 0, s = void 0, n = {}) {\n await this.loadMarkets();\n let r;\n t !== void 0 && (r = this.market(t));\n const a = {\n order_status: e\n };\n r !== void 0 && (a.product_id = r.id), s === void 0 && (s = 100), a.limit = s, i !== void 0 && (a.start_date = this.iso8601(i));\n const o = this.safeValueN(n, [\"until\", \"till\"]);\n o !== void 0 && (n = this.omit(n, [\"until\", \"till\"]), a.end_date = this.iso8601(o));\n const c = await this.v3PrivateGetBrokerageOrdersHistoricalBatch(this.extend(a, n)), u = this.safeValue(c, \"orders\", []), f = this.safeValue(u, 0), h = this.safeString(c, \"cursor\");\n return h !== void 0 && h !== \"\" && (f.cursor = h, u[0] = f), this.parseOrders(u, r, i, s);\n }\n async fetchOpenOrders(e = void 0, t = void 0, i = void 0, s = {}) {\n await this.loadMarkets();\n let n = !1;\n return [n, s] = this.handleOptionAndParams(s, \"fetchOpenOrders\", \"paginate\"), n ? await this.fetchPaginatedCallCursor(\"fetchOpenOrders\", e, t, i, s, \"cursor\", \"cursor\", void 0, 100) : await this.fetchOrdersByStatus(\"OPEN\", e, t, i, s);\n }\n async fetchClosedOrders(e = void 0, t = void 0, i = void 0, s = {}) {\n await this.loadMarkets();\n let n = !1;\n return [n, s] = this.handleOptionAndParams(s, \"fetchClosedOrders\", \"paginate\"), n ? await this.fetchPaginatedCallCursor(\"fetchClosedOrders\", e, t, i, s, \"cursor\", \"cursor\", void 0, 100) : await this.fetchOrdersByStatus(\"FILLED\", e, t, i, s);\n }\n async fetchCanceledOrders(e = void 0, t = void 0, i = void 0, s = {}) {\n return await this.fetchOrdersByStatus(\"CANCELLED\", e, t, i, s);\n }\n async fetchOHLCV(e, t = \"1m\", i = void 0, s = void 0, n = {}) {\n await this.loadMarkets();\n let r = !1;\n if ([r, n] = this.handleOptionAndParams(n, \"fetchOHLCV\", \"paginate\", !1), r)\n return await this.fetchPaginatedCallDeterministic(\"fetchOHLCV\", e, i, s, t, n, 299);\n const a = this.market(e), o = {\n product_id: a.id,\n granularity: this.safeString(this.timeframes, t, t)\n }, c = this.safeValueN(n, [\"until\", \"till\", \"end\"]);\n n = this.omit(n, [\"until\", \"till\"]);\n const f = 300 * this.parseTimeframe(t);\n let h;\n if (i !== void 0)\n h = this.numberToString(this.parseToInt(i / 1e3));\n else {\n const y = this.seconds().toString();\n h = P.stringSub(y, f.toString());\n }\n o.start = h;\n let l = this.numberToString(c);\n c === void 0 && (l = P.stringAdd(h, f.toString())), o.end = l;\n const p = await this.v3PrivateGetBrokerageProductsProductIdCandles(this.extend(o, n)), m = this.safeValue(p, \"candles\", []);\n return this.parseOHLCVs(m, a, t, i, s);\n }\n parseOHLCV(e, t = void 0) {\n return [\n this.safeTimestamp(e, \"start\"),\n this.safeNumber(e, \"open\"),\n this.safeNumber(e, \"high\"),\n this.safeNumber(e, \"low\"),\n this.safeNumber(e, \"close\"),\n this.safeNumber(e, \"volume\")\n ];\n }\n async fetchTrades(e, t = void 0, i = void 0, s = {}) {\n await this.loadMarkets();\n const n = this.market(e), r = {\n product_id: n.id\n };\n i !== void 0 && (r.limit = i);\n const a = await this.v3PrivateGetBrokerageProductsProductIdTicker(this.extend(r, s)), o = this.safeValue(a, \"trades\", []);\n return this.parseTrades(o, n, t, i);\n }\n async fetchMyTrades(e = void 0, t = void 0, i = void 0, s = {}) {\n await this.loadMarkets();\n let n = !1;\n if ([n, s] = this.handleOptionAndParams(s, \"fetchMyTrades\", \"paginate\"), n)\n return await this.fetchPaginatedCallCursor(\"fetchMyTrades\", e, t, i, s, \"cursor\", \"cursor\", void 0, 100);\n let r;\n e !== void 0 && (r = this.market(e));\n const a = {};\n r !== void 0 && (a.product_id = r.id), i !== void 0 && (a.limit = i), t !== void 0 && (a.start_sequence_timestamp = this.iso8601(t));\n const o = this.safeValueN(s, [\"until\", \"till\"]);\n o !== void 0 && (s = this.omit(s, [\"until\", \"till\"]), a.end_sequence_timestamp = this.iso8601(o));\n const c = await this.v3PrivateGetBrokerageOrdersHistoricalFills(this.extend(a, s)), u = this.safeValue(c, \"fills\", []), f = this.safeValue(u, 0), h = this.safeString(c, \"cursor\");\n return h !== void 0 && h !== \"\" && (f.cursor = h, u[0] = f), this.parseTrades(u, r, t, i);\n }\n async fetchOrderBook(e, t = void 0, i = {}) {\n await this.loadMarkets();\n const n = {\n product_id: this.market(e).id\n };\n t !== void 0 && (n.limit = t);\n const r = await this.v3PrivateGetBrokerageProductBook(this.extend(n, i)), a = this.safeValue(r, \"pricebook\", {}), o = this.safeString(a, \"time\"), c = this.parse8601(o);\n return this.parseOrderBook(a, e, c, \"bids\", \"asks\", \"price\", \"size\");\n }\n async withdraw(e, t, i, s = void 0, n = {}) {\n [s, n] = this.handleWithdrawTagAndParams(s, n), this.checkAddress(i), await this.loadMarkets();\n const r = this.currency(e);\n let a = this.safeString2(n, \"account_id\", \"accountId\");\n if (n = this.omit(n, [\"account_id\", \"accountId\"]), a === void 0) {\n if (e === void 0)\n throw new g(\"withdraw() requires an account_id (or accountId) parameter OR a currency code argument\").exchange(this.id);\n if (a = await this.findAccountId(e), a === void 0)\n throw new wo(e).addMessage(\"It could not find account id for \" + e).exchange(this.id);\n }\n const o = this.safeString(n, \"network\"), c = this.currencyToPrecision(e, t, o), u = {\n account_id: a,\n type: \"send\",\n to: i,\n amount: c,\n currency: r.id\n };\n s !== void 0 && (u.destination_tag = s);\n const f = await this.v2PrivatePostAccountsAccountIdTransactions(this.extend(u, n)), h = this.safeValue(f, \"data\", {});\n return this.parseTransaction(h, r);\n }\n async createAuthToken(e, t = void 0, i = void 0) {\n let s;\n if (i !== void 0) {\n s = t + \" \" + i.replace(\"https://\", \"\");\n const o = s.indexOf(\"?\");\n o > 0 && (s = s.slice(0, o));\n }\n const n = this.randomBytes(16), r = {\n aud: [\"retail_rest_api_proxy\"],\n iss: \"coinbase-cloud\",\n nbf: e,\n exp: e + 120,\n sub: this.apiKey,\n iat: e\n };\n s !== void 0 && (r.uri = s);\n let a;\n return this.externalSigner ? a = await this.externalSigner.sign({\n payload: r,\n publicApiKey: this.apiKey,\n exchangeId: this.id,\n opts: {\n nonce: n,\n type: \"jwt\"\n }\n }) : a = Hm(r, this.encode(this.secret), Re, !1, { kid: this.apiKey, nonce: n, alg: \"ES256\" }), a;\n }\n async sign(e, t = [], i = \"GET\", s = {}, n = void 0, r = void 0) {\n var m;\n const a = t[0], o = t[1] === \"private\", c = a === \"v3\";\n let f = \"/\" + (c ? \"api/v3\" : \"v2\") + \"/\" + this.implodeParams(e, s);\n const h = this.omit(s, this.extractParams(e)), l = f;\n i === \"GET\" && Object.keys(h).length && (f += \"?\" + this.urlencodeWithArrayRepeat(h));\n const p = this.urls.api.rest + f;\n if (o) {\n const y = this.safeString(this.headers, \"Authorization\");\n let w;\n if (y !== void 0)\n w = y;\n else if (this.token)\n w = \"Bearer \" + this.token;\n else {\n this.checkRequiredCredentials();\n const S = this.seconds();\n let b = \"\";\n if (i !== \"GET\" ? Object.keys(h).length && (r = this.json(h), b = r) : c || Object.keys(h).length && (b += \"?\" + this.urlencode(h)), this.apiKey.indexOf(\"organizations/\") >= 0 || ((m = this.secret) == null ? void 0 : m.startsWith(\"-----BEGIN\")) || !this.secret && this.externalSigner) {\n if (this.apiKey.startsWith(\"-----BEGIN\"))\n throw new Z().addMessage(\"apiKey should contain the name (eg: organizations/3b910e93....) and not the public key\").exchange(this.id);\n w = \"Bearer \" + await this.createAuthToken(S, i, p);\n } else {\n const x = this.seconds().toString(), v = x + i + l + b;\n let _;\n this.externalSigner ? _ = await this.externalSigner.sign({\n payload: this.encode(v),\n publicApiKey: this.apiKey,\n exchangeId: this.id\n }) : _ = this.hmac(this.encode(v), this.encode(this.secret), Re), n = {\n \"CB-ACCESS-KEY\": this.apiKey,\n \"CB-ACCESS-SIGN\": _,\n \"CB-ACCESS-TIMESTAMP\": x,\n \"Content-Type\": \"application/json\"\n };\n }\n }\n w !== void 0 && (n = {\n Authorization: w,\n \"Content-Type\": \"application/json\"\n }, i !== \"GET\" && Object.keys(h).length && (r = this.json(h)));\n }\n return { url: p, method: i, body: r, headers: n };\n }\n handleErrors(e, t, i, s, n, r, a, o, c) {\n if (a === void 0)\n return;\n let u = this.safeString(a, \"error\");\n if (u !== void 0) {\n const p = this.safeString2(a, \"error_description\", \"message\"), m = u + \": \" + p;\n throw this.throwExactlyMatchedException(this.exceptions.exact, u, m), this.throwBroadlyMatchedException(this.exceptions.broad, p, m), new O().addMessage(m).exchange(this.id);\n }\n const f = this.safeValue(a, \"errors\");\n if (f !== void 0 && Array.isArray(f) && f.length > 0 && (u = this.safeString(f[0], \"id\"), u !== void 0)) {\n const m = this.safeString(f[0], \"message\"), y = u + \": \" + m;\n throw this.throwExactlyMatchedException(this.exceptions.exact, u, y), this.throwBroadlyMatchedException(this.exceptions.broad, m, y), new O().addMessage(y).exchange(this.id);\n }\n const h = this.options.advanced;\n if (this.safeValue(a, \"data\") === void 0 && !h)\n throw new O().addMessage(\"Failed due to a malformed response \" + this.json(a)).exchange(this.id);\n }\n}\nlet Qy = class extends gt {\n};\nclass Jy extends Qy {\n describe() {\n return this.deepExtend(super.describe(), {\n id: \"coinbaseexchange\",\n name: \"Coinbase Exchange\",\n countries: [\"US\"],\n rateLimit: 100,\n userAgent: this.userAgents.chrome,\n pro: !0,\n has: {\n CORS: !0,\n spot: !0,\n margin: !1,\n swap: !1,\n future: !1,\n option: !1,\n cancelAllOrders: !0,\n cancelOrder: !0,\n createDepositAddress: !0,\n createOrder: !0,\n createStopLimitOrder: !0,\n createStopMarketOrder: !0,\n createStopOrder: !0,\n fetchAccounts: !0,\n fetchBalance: !0,\n fetchClosedOrders: !0,\n fetchCurrencies: !0,\n fetchDepositAddress: !1,\n fetchDeposits: !0,\n fetchDepositsWithdrawals: !0,\n fetchFundingRate: !1,\n fetchLedger: !0,\n fetchMarginMode: !1,\n fetchMarkets: !0,\n fetchMyTrades: !0,\n fetchOHLCV: !0,\n fetchOpenOrders: !0,\n fetchOrder: !0,\n fetchOrderBook: !0,\n fetchOrders: !0,\n fetchOrderTrades: !0,\n fetchPosition: !1,\n fetchPositionHistory: !1,\n fetchPositionMode: !1,\n fetchPositions: !1,\n fetchPositionsForSymbol: !1,\n fetchPositionsHistory: !1,\n fetchPositionsRisk: !1,\n fetchTicker: !0,\n fetchTickers: !0,\n fetchTime: !0,\n fetchTrades: !0,\n fetchTradingFee: !1,\n fetchTradingFees: !0,\n fetchTransactions: \"emulated\",\n fetchWithdrawals: !0,\n withdraw: !0\n },\n timeframes: {\n \"1m\": 60,\n \"5m\": 300,\n \"15m\": 900,\n \"1h\": 3600,\n \"6h\": 21600,\n \"1d\": 86400\n },\n hostname: \"exchange.coinbase.com\",\n urls: {\n test: {\n public: \"https://api-public.sandbox.exchange.coinbase.com\",\n private: \"https://api-public.sandbox.exchange.coinbase.com\"\n },\n logo: \"https://github.com/ccxt/ccxt/assets/43336371/34a65553-88aa-4a38-a714-064bd228b97e\",\n api: {\n public: \"https://api.{hostname}\",\n private: \"https://api.{hostname}\"\n },\n www: \"https://coinbase.com/\",\n doc: \"https://docs.cloud.coinbase.com/exchange/docs/\",\n fees: [\n \"https://docs.pro.coinbase.com/#fees\",\n \"https://support.pro.coinbase.com/customer/en/portal/articles/2945310-fees\"\n ]\n },\n requiredCredentials: {\n apiKey: !0,\n secret: !0,\n password: !0\n },\n api: {\n public: {\n get: [\n \"currencies\",\n \"products\",\n \"products/{id}\",\n \"products/{id}/book\",\n \"products/{id}/candles\",\n \"products/{id}/stats\",\n \"products/{id}/ticker\",\n \"products/{id}/trades\",\n \"time\",\n \"products/spark-lines\"\n // experimental\n ]\n },\n private: {\n get: [\n \"address-book\",\n \"accounts\",\n \"accounts/{id}\",\n \"accounts/{id}/holds\",\n \"accounts/{id}/ledger\",\n \"accounts/{id}/transfers\",\n \"coinbase-accounts\",\n \"fills\",\n \"funding\",\n \"fees\",\n \"margin/profile_information\",\n \"margin/buying_power\",\n \"margin/withdrawal_power\",\n \"margin/withdrawal_power_all\",\n \"margin/exit_plan\",\n \"margin/liquidation_history\",\n \"margin/position_refresh_amounts\",\n \"margin/status\",\n \"oracle\",\n \"orders\",\n \"orders/{id}\",\n \"orders/client:{client_oid}\",\n \"otc/orders\",\n \"payment-methods\",\n \"position\",\n \"profiles\",\n \"profiles/{id}\",\n \"reports/{report_id}\",\n \"transfers\",\n \"transfers/{transfer_id}\",\n \"users/self/exchange-limits\",\n \"users/self/hold-balances\",\n \"users/self/trailing-volume\",\n \"withdrawals/fee-estimate\",\n \"conversions/{conversion_id}\",\n \"conversions/fees\"\n ],\n post: [\n \"conversions\",\n \"deposits/coinbase-account\",\n \"deposits/payment-method\",\n \"coinbase-accounts/{id}/addresses\",\n \"funding/repay\",\n \"orders\",\n \"position/close\",\n \"profiles/margin-transfer\",\n \"profiles/transfer\",\n \"reports\",\n \"withdrawals/coinbase\",\n \"withdrawals/coinbase-account\",\n \"withdrawals/crypto\",\n \"withdrawals/payment-method\"\n ],\n delete: [\n \"orders\",\n \"orders/client:{client_oid}\",\n \"orders/{id}\"\n ]\n }\n },\n commonCurrencies: {\n CGLD: \"CELO\"\n },\n precisionMode: ct,\n fees: {\n trading: {\n tierBased: !0,\n percentage: !0,\n maker: this.parseNumber(\"0.004\"),\n taker: this.parseNumber(\"0.006\")\n // highest fee of all tiers\n },\n funding: {\n tierBased: !1,\n percentage: !1,\n withdraw: {\n BCH: 0,\n BTC: 0,\n LTC: 0,\n ETH: 0,\n EUR: 0.15,\n USD: 25\n },\n deposit: {\n BCH: 0,\n BTC: 0,\n LTC: 0,\n ETH: 0,\n EUR: 0.15,\n USD: 10\n }\n }\n },\n exceptions: {\n exact: {\n \"Insufficient funds\": re,\n NotFound: Se,\n \"Invalid API Key\": Z,\n \"invalid signature\": Z,\n \"Invalid Passphrase\": Z,\n \"Invalid order id\": g,\n \"Private rate limit exceeded\": Ae,\n \"Trading pair not available\": ee,\n \"Product not found\": it\n },\n broad: {\n \"Order already done\": Se,\n \"order not found\": Se,\n \"price too small\": g,\n \"price too precise\": g,\n \"under maintenance\": O,\n \"size is too small\": g,\n \"Cancel only mode\": O\n // https://github.com/ccxt/ccxt/issues/7690\n }\n }\n });\n }\n async fetchCurrencies(e = {}) {\n const t = await this.publicGetCurrencies(e), i = {};\n for (let s = 0; s < t.length; s++) {\n const n = t[s], r = this.safeString(n, \"id\"), a = this.safeString(n, \"name\"), o = this.safeCurrencyCode(r), c = this.safeValue(n, \"details\", {}), f = this.safeString(n, \"status\") === \"online\";\n i[o] = {\n id: r,\n code: o,\n info: n,\n type: this.safeString(c, \"type\"),\n name: a,\n active: f,\n deposit: void 0,\n withdraw: void 0,\n fee: void 0,\n precision: this.safeNumber(n, \"max_precision\"),\n limits: {\n amount: {\n min: this.safeNumber(c, \"min_size\"),\n max: void 0\n },\n withdraw: {\n min: this.safeNumber(c, \"min_withdrawal_amount\"),\n max: void 0\n }\n },\n networks: {}\n };\n }\n return i;\n }\n async fetchMarkets(e = {}) {\n const t = await this.publicGetProducts(e), i = [];\n for (let s = 0; s < t.length; s++) {\n const n = t[s], r = this.safeString(n, \"id\"), [a, o] = r.split(\"-\"), c = this.safeCurrencyCode(a), u = this.safeCurrencyCode(o), f = this.safeString(n, \"status\");\n i.push(this.extend(this.fees.trading, {\n id: r,\n symbol: c + \"/\" + u,\n base: c,\n quote: u,\n settle: void 0,\n baseId: a,\n quoteId: o,\n settleId: void 0,\n type: \"spot\",\n spot: !0,\n margin: this.safeValue(n, \"margin_enabled\"),\n swap: !1,\n future: !1,\n option: !1,\n active: f === \"online\",\n contract: !1,\n linear: void 0,\n inverse: void 0,\n contractSize: void 0,\n expiry: void 0,\n expiryDatetime: void 0,\n strike: void 0,\n optionType: void 0,\n precision: {\n amount: this.safeNumber(n, \"base_increment\"),\n price: this.safeNumber(n, \"quote_increment\")\n },\n limits: {\n leverage: {\n min: void 0,\n max: void 0\n },\n amount: {\n min: void 0,\n max: void 0\n },\n price: {\n min: void 0,\n max: void 0\n },\n cost: {\n min: this.safeNumber(n, \"min_market_funds\"),\n max: void 0\n }\n },\n created: void 0,\n info: n\n }));\n }\n return i;\n }\n async fetchAccounts(e = {}) {\n await this.loadMarkets();\n const t = await this.privateGetAccounts(e);\n return this.parseAccounts(t, e);\n }\n parseAccount(e) {\n const t = this.safeString(e, \"currency\");\n return {\n id: this.safeString(e, \"id\"),\n type: void 0,\n code: this.safeCurrencyCode(t),\n info: e\n };\n }\n parseBalance(e) {\n const t = { info: e };\n for (let i = 0; i < e.length; i++) {\n const s = e[i], n = this.safeString(s, \"currency\"), r = this.safeCurrencyCode(n), a = this.account();\n a.free = this.safeString(s, \"available\"), a.used = this.safeString(s, \"hold\"), a.total = this.safeString(s, \"balance\"), t[r] = a;\n }\n return this.safeBalance(t);\n }\n async fetchBalance(e = {}) {\n await this.loadMarkets();\n const t = await this.privateGetAccounts(e);\n return this.parseBalance(t);\n }\n async fetchOrderBook(e, t = void 0, i = {}) {\n await this.loadMarkets();\n const s = {\n id: this.marketId(e),\n level: 2\n // 1 best bidask, 2 aggregated, 3 full\n }, n = await this.publicGetProductsIdBook(this.extend(s, i)), r = this.parseOrderBook(n, e);\n return r.nonce = this.safeInteger(n, \"sequence\"), r;\n }\n parseTicker(e, t = void 0) {\n let i, s, n, r, a, o, c, u;\n const f = t === void 0 ? void 0 : t.symbol;\n return Array.isArray(e) ? (r = this.safeString(e, 4), i = this.milliseconds()) : (i = this.parse8601(this.safeValue(e, \"time\")), s = this.safeString(e, \"bid\"), n = this.safeString(e, \"ask\"), a = this.safeString(e, \"high\"), o = this.safeString(e, \"low\"), c = this.safeString(e, \"open\"), r = this.safeString2(e, \"price\", \"last\"), u = this.safeString(e, \"volume\")), this.safeTicker({\n symbol: f,\n timestamp: i,\n datetime: this.iso8601(i),\n high: a,\n low: o,\n bid: s,\n bidVolume: void 0,\n ask: n,\n askVolume: void 0,\n vwap: void 0,\n open: c,\n close: r,\n last: r,\n previousClose: void 0,\n change: void 0,\n percentage: void 0,\n average: void 0,\n baseVolume: u,\n quoteVolume: void 0,\n info: e\n }, t);\n }\n async fetchTickers(e = void 0, t = {}) {\n await this.loadMarkets(), e = this.marketSymbols(e);\n const i = {}, s = await this.publicGetProductsSparkLines(this.extend(i, t)), n = {}, r = Object.keys(s), a = \"-\";\n for (let o = 0; o < r.length; o++) {\n const c = r[o], u = this.safeValue(s, c, []), f = this.safeValue(u, 0, []), h = this.safeMarket(c, void 0, a), l = h.symbol;\n n[l] = this.parseTicker(f, h);\n }\n return this.filterByArrayTickers(n, \"symbol\", e);\n }\n async fetchTicker(e, t = {}) {\n await this.loadMarkets();\n const i = this.market(e), s = {\n id: i.id\n }, n = this.safeString(this.options, \"fetchTickerMethod\", \"publicGetProductsIdTicker\"), r = await this[n](this.extend(s, t));\n return this.parseTicker(r, i);\n }\n parseTrade(e, t = void 0) {\n const i = this.parse8601(this.safeString2(e, \"time\", \"created_at\")), s = this.safeString(e, \"product_id\");\n t = this.safeMarket(s, t, \"-\");\n let n, r, a;\n const o = this.safeStringLower(t, \"quoteId\");\n if (o !== void 0) {\n const S = o + \"_value\";\n a = this.safeString(e, S);\n const b = this.safeString(e, \"liquidity\");\n b !== void 0 && (r = b === \"T\" ? \"taker\" : \"maker\", n = this.safeString(t, r));\n }\n const u = {\n cost: this.safeString2(e, \"fill_fees\", \"fee\"),\n currency: t.quote,\n rate: n\n }, f = this.safeString(e, \"trade_id\");\n let h = e.side === \"buy\" ? \"sell\" : \"buy\";\n const l = this.safeString(e, \"order_id\"), p = this.safeString(e, \"maker_order_id\"), m = this.safeString(e, \"taker_order_id\");\n (l !== void 0 || p !== void 0 && m !== void 0) && (h = e.side === \"buy\" ? \"buy\" : \"sell\");\n const y = this.safeString(e, \"price\"), w = this.safeString(e, \"size\");\n return this.safeTrade({\n id: f,\n order: l,\n info: e,\n timestamp: i,\n datetime: this.iso8601(i),\n symbol: t.symbol,\n type: void 0,\n takerOrMaker: r,\n side: h,\n price: y,\n amount: w,\n fee: u,\n cost: a\n }, t);\n }\n async fetchMyTrades(e = void 0, t = void 0, i = void 0, s = {}) {\n if (e === void 0)\n throw new k().addMessage(\"fetchMyTrades() requires a symbol argument\").exchange(this.id);\n let n = !1;\n if ([n, s] = this.handleOptionAndParams(s, \"fetchMyTrades\", \"paginate\"), n)\n return await this.fetchPaginatedCallDynamic(\"fetchMyTrades\", e, t, i, s, 100);\n await this.loadMarkets();\n const r = this.market(e), a = {\n product_id: r.id\n };\n i !== void 0 && (a.limit = i), t !== void 0 && (a.start_date = this.iso8601(t));\n const o = this.safeValue2(s, \"until\", \"end_date\");\n o !== void 0 && (s = this.omit(s, [\"until\"]), a.end_date = this.iso8601(o));\n const c = await this.privateGetFills(this.extend(a, s));\n return this.parseTrades(c, r, t, i);\n }\n async fetchTrades(e, t = void 0, i = void 0, s = {}) {\n await this.loadMarkets();\n const n = this.market(e), r = {\n id: n.id\n // fixes issue #2\n };\n i !== void 0 && (r.limit = i);\n const a = await this.publicGetProductsIdTrades(this.extend(r, s));\n return this.parseTrades(a, n, t, i);\n }\n async fetchTradingFees(e = {}) {\n await this.loadMarkets();\n const t = await this.privateGetFees(e), i = this.safeNumber(t, \"maker_fee_rate\"), s = this.safeNumber(t, \"taker_fee_rate\"), n = {};\n for (let r = 0; r < this.symbols.length; r++) {\n const a = this.symbols[r];\n n[a] = {\n info: t,\n symbol: a,\n maker: i,\n taker: s,\n percentage: !0,\n tierBased: !0\n };\n }\n return n;\n }\n parseOHLCV(e, t = void 0) {\n return [\n this.safeTimestamp(e, 0),\n this.safeNumber(e, 3),\n this.safeNumber(e, 2),\n this.safeNumber(e, 1),\n this.safeNumber(e, 4),\n this.safeNumber(e, 5)\n ];\n }\n async fetchOHLCV(e, t = \"1m\", i = void 0, s = void 0, n = {}) {\n await this.loadMarkets();\n let r = !1;\n if ([r, n] = this.handleOptionAndParams(n, \"fetchOHLCV\", \"paginate\", !1), r)\n return await this.fetchPaginatedCallDeterministic(\"fetchOHLCV\", e, i, s, t, n, 300);\n const a = this.market(e), o = this.safeInteger(this.timeframes, t), c = {\n id: a.id\n };\n o !== void 0 ? c.granularity = o : c.granularity = t;\n const u = this.safeValue2(n, \"until\", \"end\");\n if (n = this.omit(n, [\"until\"]), i !== void 0)\n if (c.start = this.iso8601(i), s === void 0 ? s = 300 : s = Math.min(300, s), u === void 0) {\n const h = o * 1e3;\n this.isRoundNumber(i % h) ? c.end = this.iso8601(this.sum((s - 1) * h, i)) : c.end = this.iso8601(this.sum(s * h, i));\n } else\n c.end = this.iso8601(u);\n const f = await this.publicGetProductsIdCandles(this.extend(c, n));\n return this.parseOHLCVs(f, a, t, i, s);\n }\n async fetchTime(e = {}) {\n const t = await this.publicGetTime(e);\n return this.safeTimestamp(t, \"epoch\");\n }\n parseOrderStatus(e) {\n const t = {\n pending: \"open\",\n active: \"open\",\n open: \"open\",\n done: \"closed\",\n canceled: \"canceled\",\n canceling: \"open\"\n };\n return this.safeString(t, e, e);\n }\n parseOrder(e, t = void 0) {\n const i = this.parse8601(this.safeString(e, \"created_at\")), s = this.safeString(e, \"product_id\");\n t = this.safeMarket(s, t, \"-\");\n let n = this.parseOrderStatus(this.safeString(e, \"status\"));\n const r = this.safeString(e, \"done_reason\");\n n === \"closed\" && r === \"canceled\" && (n = \"canceled\");\n const a = this.safeString(e, \"price\"), o = this.safeString(e, \"filled_size\"), c = this.safeString(e, \"size\", o), u = this.safeString(e, \"executed_value\"), f = this.safeNumber(e, \"fill_fees\");\n let h;\n f !== void 0 && (h = {\n cost: f,\n currency: t.quote,\n rate: void 0\n });\n const l = this.safeString(e, \"id\"), p = this.safeString(e, \"type\"), m = this.safeString(e, \"side\"), y = this.safeString(e, \"time_in_force\"), w = this.safeValue(e, \"post_only\"), S = this.safeNumber(e, \"stop_price\"), b = this.safeString(e, \"client_oid\");\n return this.safeOrder({\n id: l,\n clientOrderId: b,\n info: e,\n timestamp: i,\n datetime: this.iso8601(i),\n lastTradeTimestamp: void 0,\n status: n,\n symbol: t.symbol,\n type: p,\n timeInForce: y,\n postOnly: w,\n side: m,\n price: a,\n stopPrice: S,\n triggerPrice: S,\n cost: u,\n amount: c,\n filled: o,\n remaining: void 0,\n fee: h,\n average: void 0,\n trades: void 0\n }, t);\n }\n async fetchOrder(e, t = void 0, i = {}) {\n await this.loadMarkets();\n const s = {}, n = this.safeString2(i, \"clientOrderId\", \"client_oid\");\n let r;\n n === void 0 ? (r = \"privateGetOrdersId\", s.id = e) : (r = \"privateGetOrdersClientClientOid\", s.client_oid = n, i = this.omit(i, [\"clientOrderId\", \"client_oid\"]));\n const a = await this[r](this.extend(s, i));\n return this.parseOrder(a);\n }\n async fetchOrderTrades(e, t = void 0, i = void 0, s = void 0, n = {}) {\n await this.loadMarkets();\n let r;\n t !== void 0 && (r = this.market(t));\n const a = {\n order_id: e\n }, o = await this.privateGetFills(this.extend(a, n));\n return this.parseTrades(o, r, i, s);\n }\n async fetchOrders(e = void 0, t = void 0, i = void 0, s = {}) {\n const n = {\n status: \"all\"\n };\n return await this.fetchOpenOrders(e, t, i, this.extend(n, s));\n }\n async fetchOpenOrders(e = void 0, t = void 0, i = void 0, s = {}) {\n await this.loadMarkets();\n let n = !1;\n if ([n, s] = this.handleOptionAndParams(s, \"fetchOpenOrders\", \"paginate\"), n)\n return await this.fetchPaginatedCallDynamic(\"fetchOpenOrders\", e, t, i, s, 100);\n const r = {};\n let a;\n e !== void 0 && (a = this.market(e), r.product_id = a.id), i !== void 0 && (r.limit = i), t !== void 0 && (r.start_date = this.iso8601(t));\n const o = this.safeValue2(s, \"until\", \"end_date\");\n o !== void 0 && (s = this.omit(s, [\"until\"]), r.end_date = this.iso8601(o));\n const c = await this.privateGetOrders(this.extend(r, s));\n return this.parseOrders(c, a, t, i);\n }\n async fetchClosedOrders(e = void 0, t = void 0, i = void 0, s = {}) {\n const n = {\n status: \"done\"\n };\n return await this.fetchOpenOrders(e, t, i, this.extend(n, s));\n }\n async createOrder(e, t, i, s, n = void 0, r = {}) {\n await this.loadMarkets();\n const a = this.market(e), o = {\n // common params --------------------------------------------------\n // 'client_oid': clientOrderId,\n type: t,\n side: i,\n product_id: a.id\n // 'size': this.amountToPrecision (symbol, amount),\n // 'stp': 'dc', // self-trade prevention, dc = decrease and cancel, co = cancel oldest, cn = cancel newest, cb = cancel both\n // 'stop': 'loss', // \"loss\" = stop loss below price, \"entry\" = take profit above price\n // 'stop_price': this.priceToPrecision (symbol, price),\n // limit order params ---------------------------------------------\n // 'price': this.priceToPrecision (symbol, price),\n // 'size': this.amountToPrecision (symbol, amount),\n // 'time_in_force': 'GTC', // GTC, GTT, IOC, or FOK\n // 'cancel_after' [optional]* min, hour, day, requires time_in_force to be GTT\n // 'post_only': false, // invalid when time_in_force is IOC or FOK\n // market order params --------------------------------------------\n // 'size': this.amountToPrecision (symbol, amount),\n // 'funds': this.costToPrecision (symbol, amount),\n }, c = this.safeString2(r, \"clientOrderId\", \"client_oid\");\n c !== void 0 && (o.client_oid = c);\n const u = this.safeNumberN(r, [\"stopPrice\", \"stop_price\", \"triggerPrice\"]);\n u !== void 0 && (o.stop_price = this.priceToPrecision(e, u));\n const f = this.safeString2(r, \"timeInForce\", \"time_in_force\");\n if (f !== void 0 && (o.time_in_force = f), this.safeValue2(r, \"postOnly\", \"post_only\", !1) && (o.post_only = !0), r = this.omit(r, [\"timeInForce\", \"time_in_force\", \"stopPrice\", \"stop_price\", \"clientOrderId\", \"client_oid\", \"postOnly\", \"post_only\", \"triggerPrice\"]), t === \"limit\")\n o.price = this.priceToPrecision(e, n), o.size = this.amountToPrecision(e, s);\n else if (t === \"market\") {\n let p = this.safeNumber2(r, \"cost\", \"funds\");\n p === void 0 ? n !== void 0 && (p = s * n) : r = this.omit(r, [\"cost\", \"funds\"]), p !== void 0 ? o.funds = this.costToPrecision(e, p) : o.size = this.amountToPrecision(e, s);\n }\n const l = await this.privatePostOrders(this.extend(o, r));\n return this.parseOrder(l, a);\n }\n async cancelOrder(e, t = void 0, i = {}) {\n await this.loadMarkets();\n const s = {\n // 'product_id': market['id'], // the request will be more performant if you include it\n }, n = this.safeString2(i, \"clientOrderId\", \"client_oid\");\n let r;\n n === void 0 ? (r = \"privateDeleteOrdersId\", s.id = e) : (r = \"privateDeleteOrdersClientClientOid\", s.client_oid = n, i = this.omit(i, [\"clientOrderId\", \"client_oid\"]));\n let a;\n return t !== void 0 && (a = this.market(t), s.product_id = a.symbol), await this[r](this.extend(s, i));\n }\n async cancelAllOrders(e = void 0, t = {}) {\n await this.loadMarkets();\n const i = {};\n let s;\n return e !== void 0 && (s = this.market(e), i.product_id = s.symbol), await this.privateDeleteOrders(this.extend(i, t));\n }\n async fetchPaymentMethods(e = {}) {\n return await this.privateGetPaymentMethods(e);\n }\n async withdraw(e, t, i, s = void 0, n = {}) {\n [s, n] = this.handleWithdrawTagAndParams(s, n), this.checkAddress(i), await this.loadMarkets();\n const r = this.currency(e), a = {\n currency: r.id,\n amount: t\n };\n let o = \"privatePostWithdrawals\";\n \"payment_method_id\" in n ? o += \"PaymentMethod\" : \"coinbase_account_id\" in n ? o += \"CoinbaseAccount\" : (o += \"Crypto\", a.crypto_address = i, s !== void 0 && (a.destination_tag = s));\n const c = await this[o](this.extend(a, n));\n if (!c)\n throw new O().addMessage(\" withdraw() error: \" + this.json(c)).exchange(this.id);\n return this.parseTransaction(c, r);\n }\n parseLedgerEntryType(e) {\n const t = {\n transfer: \"transfer\",\n match: \"trade\",\n fee: \"fee\",\n rebate: \"rebate\",\n conversion: \"trade\"\n // Funds converted between fiat currency and a stablecoin\n };\n return this.safeString(t, e, e);\n }\n parseLedgerEntry(e, t = void 0) {\n const i = this.safeString(e, \"id\");\n let s = this.safeString(e, \"amount\"), n;\n const r = this.safeString(e, \"balance\"), a = P.stringSub(r, s);\n P.stringLt(s, \"0\") ? (n = \"out\", s = P.stringAbs(s)) : n = \"in\";\n const o = this.parseNumber(s), c = this.parseNumber(r), u = this.parseNumber(a), f = this.parse8601(this.safeValue(e, \"created_at\")), h = this.parseLedgerEntryType(this.safeString(e, \"type\")), l = this.safeCurrencyCode(void 0, t), p = this.safeValue(e, \"details\", {});\n let m, y, w;\n h === \"transfer\" ? (m = this.safeString(p, \"from\"), y = this.safeString(p, \"to\"), w = this.safeString(p, \"profile_transfer_id\")) : w = this.safeString(p, \"order_id\");\n const S = \"ok\";\n return this.safeLedgerEntry({\n info: e,\n id: i,\n timestamp: f,\n datetime: this.iso8601(f),\n direction: n,\n account: m,\n referenceAccount: y,\n referenceId: w,\n type: h,\n currency: l,\n amount: o,\n before: u,\n after: c,\n status: S,\n fee: void 0\n }, t);\n }\n async fetchLedger(e = void 0, t = void 0, i = void 0, s = {}) {\n if (e === void 0)\n throw new g(\"withdraw() requires an account_id (or accountId) parameter OR a currency code argument\").exchange(this.id);\n await this.loadMarkets(), await this.loadAccounts();\n const n = this.currency(e), r = this.indexBy(this.accounts, \"code\"), a = this.safeValue(r, e);\n if (a === void 0)\n throw new wo(e).addMessage(\"It could not find account id for \" + e).exchange(this.id);\n const o = {\n id: a.id\n // 'start_date': this.iso8601 (since),\n // 'end_date': this.iso8601 (this.milliseconds ()),\n // 'before': 'cursor', // sets start cursor to before date\n // 'after': 'cursor', // sets end cursor to after date\n // 'limit': limit, // default 100\n // 'profile_id': 'string'\n };\n t !== void 0 && (o.start_date = this.iso8601(t)), i !== void 0 && (o.limit = i);\n const c = this.safeValue2(s, \"until\", \"end_date\");\n c !== void 0 && (s = this.omit(s, [\"until\"]), o.end_date = this.iso8601(c));\n const u = await this.privateGetAccountsIdLedger(this.extend(o, s));\n for (let f = 0; f < u.length; f++)\n u[f].currency = e;\n return this.parseLedger(u, n, t, i);\n }\n async fetchDepositsWithdrawals(e = void 0, t = void 0, i = void 0, s = {}) {\n await this.loadMarkets(), await this.loadAccounts();\n let n, r = this.safeString(s, \"id\");\n if (r === void 0 && e !== void 0) {\n n = this.currency(e);\n const c = this.indexBy(this.accounts, \"code\"), u = this.safeValue(c, e);\n if (u === void 0)\n throw new O().addMessage(\"fetchDepositsWithdrawals() could not find account id for \" + e).exchange(this.id);\n r = u.id;\n }\n const a = {};\n r !== void 0 && (a.id = r), i !== void 0 && (a.limit = i);\n let o;\n if (r === void 0) {\n o = await this.privateGetTransfers(this.extend(a, s));\n for (let c = 0; c < o.length; c++) {\n const u = this.safeString(o[c], \"account_id\"), f = this.safeValue(this.accountsById, u), h = this.safeString(f, \"code\");\n o[c].currency = h;\n }\n } else {\n o = await this.privateGetAccountsIdTransfers(this.extend(a, s));\n for (let c = 0; c < o.length; c++)\n o[c].currency = e;\n }\n return this.parseTransactions(o, n, t, i);\n }\n async fetchDeposits(e = void 0, t = void 0, i = void 0, s = {}) {\n return await this.fetchDepositsWithdrawals(e, t, i, this.extend({ type: \"deposit\" }, s));\n }\n async fetchWithdrawals(e = void 0, t = void 0, i = void 0, s = {}) {\n return await this.fetchDepositsWithdrawals(e, t, i, this.extend({ type: \"withdraw\" }, s));\n }\n parseTransactionStatus(e) {\n if (this.safeValue(e, \"canceled_at\"))\n return \"canceled\";\n const i = this.safeValue(e, \"processed_at\"), s = this.safeValue(e, \"completed_at\");\n return s ? \"ok\" : i && !s ? \"failed\" : \"pending\";\n }\n parseTransaction(e, t = void 0) {\n const i = this.safeValue(e, \"details\", {}), s = this.parse8601(this.safeString(e, \"created_at\")), n = this.safeString(e, \"currency\"), r = this.safeCurrencyCode(n, t);\n let a = this.safeNumber(e, \"amount\"), o = this.safeString(e, \"type\"), c = this.safeString(i, \"crypto_address\");\n c = this.safeString(e, \"crypto_address\", c);\n const u = {\n currency: void 0,\n cost: void 0,\n rate: void 0\n };\n if (o === \"withdraw\") {\n o = \"withdrawal\", c = this.safeString(i, \"sent_to_address\", c);\n const h = this.safeNumber(i, \"fee\");\n h !== void 0 && (a !== void 0 && (a -= h), u.cost = h, u.currency = r);\n }\n const f = this.safeString(i, \"network\");\n return {\n info: e,\n id: this.safeString(e, \"id\"),\n txid: this.safeString(i, \"crypto_transaction_hash\"),\n type: o,\n currency: r,\n network: this.networkIdToCode(f),\n amount: a,\n status: this.parseTransactionStatus(e),\n timestamp: s,\n datetime: this.iso8601(s),\n address: c,\n addressFrom: void 0,\n addressTo: this.safeString(i, \"crypto_address\"),\n tag: this.safeString(i, \"destination_tag\"),\n tagFrom: void 0,\n tagTo: void 0,\n updated: this.parse8601(this.safeString(e, \"processed_at\")),\n comment: void 0,\n internal: !1,\n fee: u\n };\n }\n async createDepositAddress(e, t = {}) {\n await this.loadMarkets();\n const i = this.currency(e);\n let s = this.safeValue(this.options, \"coinbaseAccounts\");\n s === void 0 && (s = await this.privateGetCoinbaseAccounts(), this.options.coinbaseAccounts = s, this.options.coinbaseAccountsByCurrencyId = this.indexBy(s, \"currency\"));\n const n = i.id, r = this.safeValue(this.options.coinbaseAccountsByCurrencyId, n);\n if (r === void 0)\n throw new mr(e).addMessage(\"createDepositAddress() could not find the account with matching currency code, specify an `account_id` extra param\").exchange(this.id);\n const a = {\n id: r.id\n }, o = await this.privatePostCoinbaseAccountsIdAddresses(this.extend(a, t)), c = this.safeString(o, \"address\"), u = this.safeString(o, \"destination_tag\");\n return {\n currency: e,\n address: this.checkAddress(c),\n tag: u,\n info: o\n };\n }\n // https://docs.cdp.coinbase.com/exchange/reference/exchangerestapi_getprofiles\n async getSubAccounts() {\n await this.loadMarkets();\n const e = await this.privateGetProfiles();\n return e == null ? void 0 : e.map((t) => ({\n uid: t.id\n }));\n }\n async sign(e, t = \"public\", i = \"GET\", s = {}, n = void 0, r = void 0) {\n let a = \"/\" + this.implodeParams(e, s);\n const o = this.omit(s, this.extractParams(e));\n i === \"GET\" && Object.keys(o).length && (a += \"?\" + this.urlencode(o));\n const c = this.implodeHostname(this.urls.api[t]) + a;\n if (t === \"private\") {\n this.checkRequiredCredentials();\n const u = this.nonce().toString();\n let f = \"\";\n i !== \"GET\" && Object.keys(o).length && (r = this.json(o), f = r);\n const h = u + i + a + f;\n let l;\n try {\n l = this.base64ToBinary(this.secret);\n } catch {\n throw new Z().addMessage(\" sign() invalid base64 secret\").exchange(this.id);\n }\n let p;\n this.externalSigner ? p = await this.externalSigner.sign({\n payload: this.encode(h),\n publicApiKey: this.apiKey,\n exchangeId: this.id\n }) : p = this.hmac(this.encode(h), l, Re, \"base64\"), n = {\n \"CB-ACCESS-KEY\": this.apiKey,\n \"CB-ACCESS-SIGN\": p,\n \"CB-ACCESS-TIMESTAMP\": u,\n \"CB-ACCESS-PASSPHRASE\": this.password,\n \"Content-Type\": \"application/json\"\n };\n }\n return { url: c, method: i, body: r, headers: n };\n }\n handleErrors(e, t, i, s, n, r, a, o, c) {\n if (e === 400 || e === 404) {\n if (r[0] === \"{\") {\n const u = this.safeString(a, \"message\"), f = this.id + \" \" + u;\n throw this.throwExactlyMatchedException(this.exceptions.exact, u, f), this.throwBroadlyMatchedException(this.exceptions.broad, u, f), new O().addMessage(u).exchange(this.id);\n }\n throw new O().addMessage(r).exchange(this.id);\n }\n }\n async request(e, t = \"public\", i = \"GET\", s = {}, n = void 0, r = void 0, a = {}) {\n const o = await this.fetch2(e, t, i, s, n, r, a);\n if (typeof o != \"string\" && \"message\" in o)\n throw new O().addMessage(this.json(o)).exchange(this.id);\n return o;\n }\n}\nlet ew = class extends gt {\n};\nclass Eu extends ew {\n describe() {\n return this.deepExtend(super.describe(), {\n id: \"gate\",\n name: \"Gate.io\",\n countries: [\"KR\"],\n rateLimit: 50,\n version: \"v4\",\n certified: !0,\n pro: !0,\n urls: {\n logo: \"https://user-images.githubusercontent.com/1294454/31784029-0313c702-b509-11e7-9ccc-bc0da6a0e435.jpg\",\n doc: \"https://www.gate.io/docs/developers/apiv4/en/\",\n www: \"https://gate.io/\",\n api: {\n public: {\n wallet: \"https://api.gateio.ws/api/v4\",\n futures: \"https://api.gateio.ws/api/v4\",\n margin: \"https://api.gateio.ws/api/v4\",\n delivery: \"https://api.gateio.ws/api/v4\",\n spot: \"https://api.gateio.ws/api/v4\",\n options: \"https://api.gateio.ws/api/v4\",\n sub_accounts: \"https://api.gateio.ws/api/v4\",\n earn: \"https://api.gateio.ws/api/v4\"\n },\n private: {\n withdrawals: \"https://api.gateio.ws/api/v4\",\n wallet: \"https://api.gateio.ws/api/v4\",\n futures: \"https://api.gateio.ws/api/v4\",\n margin: \"https://api.gateio.ws/api/v4\",\n delivery: \"https://api.gateio.ws/api/v4\",\n spot: \"https://api.gateio.ws/api/v4\",\n options: \"https://api.gateio.ws/api/v4\",\n subAccounts: \"https://api.gateio.ws/api/v4\",\n portfolio: \"https://api.gateio.ws/api/v4\",\n rebate: \"https://api.gateio.ws/api/v4\",\n earn: \"https://api.gateio.ws/api/v4\",\n account: \"https://api.gateio.ws/api/v4\"\n }\n },\n test: {\n public: {\n futures: \"https://fx-api-testnet.gateio.ws/api/v4\",\n delivery: \"https://fx-api-testnet.gateio.ws/api/v4\",\n options: \"https://fx-api-testnet.gateio.ws/api/v4\"\n },\n private: {\n futures: \"https://fx-api-testnet.gateio.ws/api/v4\",\n delivery: \"https://fx-api-testnet.gateio.ws/api/v4\",\n options: \"https://fx-api-testnet.gateio.ws/api/v4\"\n }\n },\n referral: {\n // https://www.gate.io/signup/2436035- I removed the code for now, because CWS is blocking until we explain our affiliate program to our users\n url: \"https://www.gate.io/signup\",\n discount: 0.2\n }\n },\n has: {\n CORS: void 0,\n spot: !0,\n margin: !0,\n swap: !0,\n future: !0,\n option: !0,\n cancelAllOrders: !0,\n cancelOrder: !0,\n createMarketBuyOrderWithCost: !0,\n createMarketOrder: !0,\n createMarketOrderWithCost: !1,\n createMarketSellOrderWithCost: !1,\n createOrder: !0,\n createOrders: !0,\n createTakeProfitOrder: !0,\n createTriggerOrder: !0,\n editOrder: !0,\n fetchBalance: !0,\n fetchClosedOrders: !0,\n fetchCurrencies: !0,\n fetchDepositAddress: !0,\n fetchDeposits: !0,\n fetchDepositWithdrawFee: \"emulated\",\n fetchDepositWithdrawFees: !0,\n fetchLedger: !0,\n fetchMarkets: !0,\n fetchMyTrades: !0,\n fetchNetworkDepositAddress: !0,\n fetchOHLCV: !0,\n fetchOpenOrders: !0,\n fetchOrder: !0,\n fetchOrderBook: !0,\n fetchPosition: !0,\n fetchPositions: !0,\n fetchTicker: !0,\n fetchTickers: !0,\n fetchTime: !0,\n fetchTrades: !0,\n fetchTradingFee: !0,\n fetchTradingFees: !0,\n fetchTransactionFees: !0,\n fetchWithdrawals: !0,\n transfer: !0,\n withdraw: !0\n },\n api: {\n public: {\n // All public endpoints 200r/10s per endpoint\n wallet: {\n get: {\n currency_chains: 1\n }\n },\n spot: {\n get: {\n currencies: 1,\n \"currencies/{currency}\": 1,\n currency_pairs: 1,\n \"currency_pairs/{currency_pair}\": 1,\n tickers: 1,\n order_book: 1,\n trades: 1,\n candlesticks: 1,\n time: 1\n }\n },\n margin: {\n get: {\n currency_pairs: 1,\n \"currency_pairs/{currency_pair}\": 1,\n funding_book: 1,\n \"cross/currencies\": 1,\n \"cross/currencies/{currency}\": 1,\n \"uni/currency_pairs\": 1,\n \"uni/currency_pairs/{currency_pair}\": 1\n }\n },\n flash_swap: {\n get: {\n currencies: 1\n }\n },\n futures: {\n get: {\n \"{settle}/contracts\": 1,\n \"{settle}/contracts/{contract}\": 1,\n \"{settle}/order_book\": 1,\n \"{settle}/trades\": 1,\n \"{settle}/candlesticks\": 1,\n \"{settle}/premium_index\": 1,\n \"{settle}/tickers\": 1,\n \"{settle}/funding_rate\": 1,\n \"{settle}/insurance\": 1,\n \"{settle}/contract_stats\": 1,\n \"{settle}/index_constituents/{index}\": 1,\n \"{settle}/liq_orders\": 1\n }\n },\n delivery: {\n get: {\n \"{settle}/contracts\": 1,\n \"{settle}/contracts/{contract}\": 1,\n \"{settle}/order_book\": 1,\n \"{settle}/trades\": 1,\n \"{settle}/candlesticks\": 1,\n \"{settle}/tickers\": 1,\n \"{settle}/insurance\": 1\n }\n },\n options: {\n get: {\n underlyings: 1,\n expirations: 1,\n contracts: 1,\n \"contracts/{contract}\": 1,\n settlements: 1,\n \"settlements/{contract}\": 1,\n order_book: 1,\n tickers: 1,\n \"underlying/tickers/{underlying}\": 1,\n candlesticks: 1,\n \"underlying/candlesticks\": 1,\n trades: 1\n }\n },\n earn: {\n get: {\n \"uni/currencies\": 1,\n \"uni/currencies/{currency}\": 1\n }\n }\n },\n private: {\n // private endpoints default is 150r/10s per endpoint\n withdrawals: {\n post: {\n withdrawals: 20\n // 1r/s cost = 20 / 1 = 20\n },\n delete: {\n \"withdrawals/{withdrawal_id}\": 1\n }\n },\n wallet: {\n get: {\n deposit_address: 1,\n withdrawals: 1,\n deposits: 1,\n sub_account_transfers: 1,\n withdraw_status: 1,\n sub_account_balances: 2.5,\n sub_account_margin_balances: 2.5,\n sub_account_futures_balances: 2.5,\n sub_account_cross_margin_balances: 2.5,\n saved_address: 1,\n fee: 1,\n total_balance: 2.5\n },\n post: {\n transfers: 2.5,\n sub_account_transfers: 2.5,\n sub_account_to_sub_account: 2.5\n }\n },\n subAccounts: {\n get: {\n sub_accounts: 2.5,\n \"sub_accounts/{user_id}\": 2.5,\n \"sub_accounts/{user_id}/keys\": 2.5,\n \"sub_accounts/{user_id}/keys/{key}\": 2.5\n },\n post: {\n sub_accounts: 2.5,\n \"sub_accounts/{user_id}/keys\": 2.5,\n \"sub_accounts/{user_id}/lock\": 2.5,\n \"sub_accounts/{user_id}/unlock\": 2.5\n },\n put: {\n \"sub_accounts/{user_id}/keys/{key}\": 2.5\n },\n delete: {\n \"sub_accounts/{user_id}/keys/{key}\": 2.5\n }\n },\n portfolio: {\n get: {\n accounts: 20 / 15,\n account_mode: 20 / 15,\n borrowable: 20 / 15,\n transferable: 20 / 15,\n loans: 20 / 15,\n loan_records: 20 / 15,\n interest_records: 20 / 15\n },\n post: {\n account_mode: 20 / 15,\n loans: 200 / 15\n // 15r/10s cost = 20 / 1.5 = 13.33\n }\n },\n spot: {\n // default is 200r/10s\n get: {\n fee: 1,\n batch_fee: 1,\n accounts: 1,\n account_book: 1,\n open_orders: 1,\n orders: 1,\n \"orders/{order_id}\": 1,\n my_trades: 1,\n price_orders: 1,\n \"price_orders/{order_id}\": 1\n },\n post: {\n batch_orders: 0.4,\n cross_liquidate_orders: 1,\n orders: 0.4,\n cancel_batch_orders: 20 / 75,\n countdown_cancel_all: 20 / 75,\n amend_batch_orders: 0.4,\n price_orders: 0.4\n },\n delete: {\n orders: 20 / 75,\n \"orders/{order_id}\": 20 / 75,\n price_orders: 20 / 75,\n \"price_orders/{order_id}\": 20 / 75\n },\n patch: {\n \"orders/{order_id}\": 0.4\n }\n },\n margin: {\n get: {\n accounts: 20 / 15,\n account_book: 20 / 15,\n funding_accounts: 20 / 15,\n auto_repay: 20 / 15,\n transferable: 20 / 15,\n loans: 20 / 15,\n \"loans/{loan_id}\": 20 / 15,\n \"loans/{loan_id}/repayment\": 20 / 15,\n loan_records: 20 / 15,\n \"loan_records/{loan_record_id}\": 20 / 15,\n borrowable: 20 / 15,\n \"cross/accounts\": 20 / 15,\n \"cross/account_book\": 20 / 15,\n \"cross/loans\": 20 / 15,\n \"cross/loans/{loan_id}\": 20 / 15,\n \"cross/repayments\": 20 / 15,\n \"cross/interest_records\": 20 / 15,\n \"cross/transferable\": 20 / 15,\n \"cross/estimate_rate\": 20 / 15,\n \"cross/borrowable\": 20 / 15,\n \"uni/estimate_rate\": 20 / 15,\n \"uni/loans\": 20 / 15,\n \"uni/loan_records\": 20 / 15,\n \"uni/interest_records\": 20 / 15,\n \"uni/borrowable\": 20 / 15\n },\n post: {\n auto_repay: 20 / 15,\n loans: 20 / 15,\n merged_loans: 20 / 15,\n \"loans/{loan_id}/repayment\": 20 / 15,\n \"cross/loans\": 20 / 15,\n \"cross/repayments\": 20 / 15,\n \"uni/loans\": 20 / 15\n },\n patch: {\n \"loans/{loan_id}\": 20 / 15,\n \"loan_records/{loan_record_id}\": 20 / 15\n },\n delete: {\n \"loans/{loan_id}\": 20 / 15\n }\n },\n flash_swap: {\n get: {\n currencies: 1,\n currency_pairs: 1,\n orders: 1,\n \"orders/{order_id}\": 1\n },\n post: {\n orders: 1,\n \"orders/preview\": 1\n }\n },\n futures: {\n get: {\n \"{settle}/accounts\": 1,\n \"{settle}/account_book\": 1,\n \"{settle}/positions\": 1,\n \"{settle}/positions/{contract}\": 1,\n \"{settle}/dual_comp/positions/{contract}\": 1,\n \"{settle}/orders\": 1,\n \"{settle}/orders_timerange\": 1,\n \"{settle}/orders/{order_id}\": 1,\n \"{settle}/my_trades\": 1,\n \"{settle}/my_trades_timerange\": 1,\n \"{settle}/position_close\": 1,\n \"{settle}/liquidates\": 1,\n \"{settle}/auto_deleverages\": 1,\n \"{settle}/fee\": 1,\n \"{settle}/risk_limit_tiers\": 1,\n \"{settle}/price_orders\": 1,\n \"{settle}/price_orders/{order_id}\": 1\n },\n post: {\n \"{settle}/positions/{contract}/margin\": 1,\n \"{settle}/positions/{contract}/leverage\": 1,\n \"{settle}/positions/{contract}/risk_limit\": 1,\n \"{settle}/dual_mode\": 1,\n \"{settle}/dual_comp/positions/{contract}/margin\": 1,\n \"{settle}/dual_comp/positions/{contract}/leverage\": 1,\n \"{settle}/dual_comp/positions/{contract}/risk_limit\": 1,\n \"{settle}/orders\": 0.4,\n \"{settle}/batch_orders\": 0.4,\n \"{settle}/countdown_cancel_all\": 0.4,\n \"{settle}/batch_cancel_orders\": 0.4,\n \"{settle}/price_orders\": 0.4\n },\n put: {\n \"{settle}/orders/{order_id}\": 1\n },\n delete: {\n \"{settle}/orders\": 20 / 75,\n \"{settle}/orders/{order_id}\": 20 / 75,\n \"{settle}/price_orders\": 20 / 75,\n \"{settle}/price_orders/{order_id}\": 20 / 75\n }\n },\n delivery: {\n get: {\n \"{settle}/accounts\": 20 / 15,\n \"{settle}/account_book\": 20 / 15,\n \"{settle}/positions\": 20 / 15,\n \"{settle}/positions/{contract}\": 20 / 15,\n \"{settle}/orders\": 20 / 15,\n \"{settle}/orders/{order_id}\": 20 / 15,\n \"{settle}/my_trades\": 20 / 15,\n \"{settle}/position_close\": 20 / 15,\n \"{settle}/liquidates\": 20 / 15,\n \"{settle}/settlements\": 20 / 15,\n \"{settle}/price_orders\": 20 / 15,\n \"{settle}/price_orders/{order_id}\": 20 / 15\n },\n post: {\n \"{settle}/positions/{contract}/margin\": 20 / 15,\n \"{settle}/positions/{contract}/leverage\": 20 / 15,\n \"{settle}/positions/{contract}/risk_limit\": 20 / 15,\n \"{settle}/orders\": 20 / 15,\n \"{settle}/price_orders\": 20 / 15\n },\n delete: {\n \"{settle}/orders\": 20 / 15,\n \"{settle}/orders/{order_id}\": 20 / 15,\n \"{settle}/price_orders\": 20 / 15,\n \"{settle}/price_orders/{order_id}\": 20 / 15\n }\n },\n options: {\n get: {\n my_settlements: 20 / 15,\n accounts: 20 / 15,\n account_book: 20 / 15,\n positions: 20 / 15,\n \"positions/{contract}\": 20 / 15,\n position_close: 20 / 15,\n orders: 20 / 15,\n \"orders/{order_id}\": 20 / 15,\n my_trades: 20 / 15\n },\n post: {\n orders: 20 / 15\n },\n delete: {\n orders: 20 / 15,\n \"orders/{order_id}\": 20 / 15\n }\n },\n earn: {\n get: {\n \"uni/currencies\": 20 / 15,\n \"uni/currencies/{currency}\": 20 / 15,\n \"uni/lends\": 20 / 15,\n \"uni/lend_records\": 20 / 15,\n \"uni/interests/{currency}\": 20 / 15,\n \"uni/interest_records\": 20 / 15,\n \"uni/interest_status/{currency}\": 20 / 15\n },\n post: {\n \"uni/lends\": 20 / 15\n },\n put: {\n \"uni/interest_reinvest\": 20 / 15\n },\n patch: {\n \"uni/lends\": 20 / 15\n }\n },\n loan: {\n get: {\n \"collateral/orders\": 20 / 15,\n \"collateral/orders/{order_id}\": 20 / 15,\n \"collateral/repay_records\": 20 / 15,\n \"collateral/collaterals\": 20 / 15,\n \"collateral/total_amount\": 20 / 15,\n \"collateral/ltv\": 20 / 15,\n \"collateral/currencies\": 20 / 15,\n \"multi_collateral/orders\": 20 / 15,\n \"multi_collateral/orders/{order_id}\": 20 / 15,\n \"multi_collateral/repay\": 20 / 15,\n \"multi_collateral/mortgage\": 20 / 15,\n \"multi_collateral/currency_quota\": 20 / 15,\n \"multi_collateral/currencies\": 20 / 15,\n \"multi_collateral/ltv\": 20 / 15,\n \"multi_collateral/fixed_rate\": 20 / 15\n },\n post: {\n \"collateral/orders\": 20 / 15,\n \"collateral/repay\": 20 / 15,\n \"collateral/collaterals\": 20 / 15,\n \"multi_collateral/orders\": 20 / 15,\n \"multi_collateral/repay\": 20 / 15,\n \"multi_collateral/mortgage\": 20 / 15\n }\n },\n account: {\n get: {\n detail: 20 / 15,\n stp_groups: 20 / 15,\n \"stp_groups/{stp_id}/users\": 20 / 15\n },\n post: {\n stp_groups: 20 / 15,\n \"stp_groups/{stp_id}/users\": 20 / 15\n },\n delete: {\n \"stp_groups/{stp_id}/users\": 20 / 15\n }\n },\n rebate: {\n get: {\n \"agency/transaction_history\": 20 / 15,\n \"agency/commission_history\": 20 / 15\n }\n }\n }\n },\n timeframes: {\n \"10s\": \"10s\",\n \"1m\": \"1m\",\n \"5m\": \"5m\",\n \"15m\": \"15m\",\n \"30m\": \"30m\",\n \"1h\": \"1h\",\n \"2h\": \"2h\",\n \"4h\": \"4h\",\n \"8h\": \"8h\",\n \"1d\": \"1d\",\n \"7d\": \"7d\",\n \"1w\": \"7d\"\n },\n requiredCredentials: {\n apiKey: !0,\n secret: !0\n },\n headers: {\n \"X-Gate-Channel-Id\": \"cede\"\n },\n options: {\n sandboxMode: !1,\n timeDifference: 0,\n createOrder: {\n expiration: 86400\n // for conditional orders\n },\n networks: {\n CHZ: \"CHZ2\",\n GATEIO: \"GTEVM\",\n KSM: \"KSMSM\",\n DOT: \"DOTSM\",\n MANTA: \"MANTAETH\"\n },\n networksById: {\n CHZ2: \"CHZ\",\n DOTSM: \"DOT\",\n GTEVM: \"GATEIO\",\n KSMSM: \"KSM\",\n MANTAETH: \"MANTA\"\n },\n timeInForce: {\n GTC: \"gtc\",\n IOC: \"ioc\",\n PO: \"poc\",\n POC: \"poc\",\n FOK: \"fok\"\n },\n accountsByType: {\n funding: \"spot\",\n spot: \"spot\",\n margin: \"margin\",\n cross_margin: \"cross_margin\",\n cross: \"cross_margin\",\n isolated: \"margin\",\n swap: \"futures\",\n future: \"delivery\",\n futures: \"futures\",\n delivery: \"delivery\",\n option: \"options\",\n options: \"options\"\n },\n defaultType: \"spot\",\n swap: {\n fetchMarkets: {\n settlementCurrencies: [\"usdt\", \"btc\"]\n }\n },\n future: {\n fetchMarkets: {\n settlementCurrencies: [\"usdt\"]\n }\n }\n },\n precisionMode: ct,\n fees: {\n trading: {\n tierBased: !0,\n feeSide: \"get\",\n percentage: !0,\n maker: this.parseNumber(\"0.002\"),\n taker: this.parseNumber(\"0.002\"),\n tiers: {\n // volume is in BTC\n maker: [\n [this.parseNumber(\"0\"), this.parseNumber(\"0.002\")],\n [this.parseNumber(\"1.5\"), this.parseNumber(\"0.00185\")],\n [this.parseNumber(\"3\"), this.parseNumber(\"0.00175\")],\n [this.parseNumber(\"6\"), this.parseNumber(\"0.00165\")],\n [this.parseNumber(\"12.5\"), this.parseNumber(\"0.00155\")],\n [this.parseNumber(\"25\"), this.parseNumber(\"0.00145\")],\n [this.parseNumber(\"75\"), this.parseNumber(\"0.00135\")],\n [this.parseNumber(\"200\"), this.parseNumber(\"0.00125\")],\n [this.parseNumber(\"500\"), this.parseNumber(\"0.00115\")],\n [this.parseNumber(\"1250\"), this.parseNumber(\"0.00105\")],\n [this.parseNumber(\"2500\"), this.parseNumber(\"0.00095\")],\n [this.parseNumber(\"3000\"), this.parseNumber(\"0.00085\")],\n [this.parseNumber(\"6000\"), this.parseNumber(\"0.00075\")],\n [this.parseNumber(\"11000\"), this.parseNumber(\"0.00065\")],\n [this.parseNumber(\"20000\"), this.parseNumber(\"0.00055\")],\n [this.parseNumber(\"40000\"), this.parseNumber(\"0.00055\")],\n [this.parseNumber(\"75000\"), this.parseNumber(\"0.00055\")]\n ],\n taker: [\n [this.parseNumber(\"0\"), this.parseNumber(\"0.002\")],\n [this.parseNumber(\"1.5\"), this.parseNumber(\"0.00195\")],\n [this.parseNumber(\"3\"), this.parseNumber(\"0.00185\")],\n [this.parseNumber(\"6\"), this.parseNumber(\"0.00175\")],\n [this.parseNumber(\"12.5\"), this.parseNumber(\"0.00165\")],\n [this.parseNumber(\"25\"), this.parseNumber(\"0.00155\")],\n [this.parseNumber(\"75\"), this.parseNumber(\"0.00145\")],\n [this.parseNumber(\"200\"), this.parseNumber(\"0.00135\")],\n [this.parseNumber(\"500\"), this.parseNumber(\"0.00125\")],\n [this.parseNumber(\"1250\"), this.parseNumber(\"0.00115\")],\n [this.parseNumber(\"2500\"), this.parseNumber(\"0.00105\")],\n [this.parseNumber(\"3000\"), this.parseNumber(\"0.00095\")],\n [this.parseNumber(\"6000\"), this.parseNumber(\"0.00085\")],\n [this.parseNumber(\"11000\"), this.parseNumber(\"0.00075\")],\n [this.parseNumber(\"20000\"), this.parseNumber(\"0.00065\")],\n [this.parseNumber(\"40000\"), this.parseNumber(\"0.00065\")],\n [this.parseNumber(\"75000\"), this.parseNumber(\"0.00065\")]\n ]\n }\n },\n swap: {\n tierBased: !0,\n feeSide: \"base\",\n percentage: !0,\n maker: this.parseNumber(\"0.0\"),\n taker: this.parseNumber(\"0.0005\"),\n tiers: {\n maker: [\n [this.parseNumber(\"0\"), this.parseNumber(\"0.0000\")],\n [this.parseNumber(\"1.5\"), this.parseNumber(\"-0.00005\")],\n [this.parseNumber(\"3\"), this.parseNumber(\"-0.00005\")],\n [this.parseNumber(\"6\"), this.parseNumber(\"-0.00005\")],\n [this.parseNumber(\"12.5\"), this.parseNumber(\"-0.00005\")],\n [this.parseNumber(\"25\"), this.parseNumber(\"-0.00005\")],\n [this.parseNumber(\"75\"), this.parseNumber(\"-0.00005\")],\n [this.parseNumber(\"200\"), this.parseNumber(\"-0.00005\")],\n [this.parseNumber(\"500\"), this.parseNumber(\"-0.00005\")],\n [this.parseNumber(\"1250\"), this.parseNumber(\"-0.00005\")],\n [this.parseNumber(\"2500\"), this.parseNumber(\"-0.00005\")],\n [this.parseNumber(\"3000\"), this.parseNumber(\"-0.00008\")],\n [this.parseNumber(\"6000\"), this.parseNumber(\"-0.01000\")],\n [this.parseNumber(\"11000\"), this.parseNumber(\"-0.01002\")],\n [this.parseNumber(\"20000\"), this.parseNumber(\"-0.01005\")],\n [this.parseNumber(\"40000\"), this.parseNumber(\"-0.02000\")],\n [this.parseNumber(\"75000\"), this.parseNumber(\"-0.02005\")]\n ],\n taker: [\n [this.parseNumber(\"0\"), this.parseNumber(\"0.00050\")],\n [this.parseNumber(\"1.5\"), this.parseNumber(\"0.00048\")],\n [this.parseNumber(\"3\"), this.parseNumber(\"0.00046\")],\n [this.parseNumber(\"6\"), this.parseNumber(\"0.00044\")],\n [this.parseNumber(\"12.5\"), this.parseNumber(\"0.00042\")],\n [this.parseNumber(\"25\"), this.parseNumber(\"0.00040\")],\n [this.parseNumber(\"75\"), this.parseNumber(\"0.00038\")],\n [this.parseNumber(\"200\"), this.parseNumber(\"0.00036\")],\n [this.parseNumber(\"500\"), this.parseNumber(\"0.00034\")],\n [this.parseNumber(\"1250\"), this.parseNumber(\"0.00032\")],\n [this.parseNumber(\"2500\"), this.parseNumber(\"0.00030\")],\n [this.parseNumber(\"3000\"), this.parseNumber(\"0.00030\")],\n [this.parseNumber(\"6000\"), this.parseNumber(\"0.00030\")],\n [this.parseNumber(\"11000\"), this.parseNumber(\"0.00030\")],\n [this.parseNumber(\"20000\"), this.parseNumber(\"0.00030\")],\n [this.parseNumber(\"40000\"), this.parseNumber(\"0.00030\")],\n [this.parseNumber(\"75000\"), this.parseNumber(\"0.00030\")]\n ]\n }\n }\n },\n // https://www.gate.io/docs/developers/apiv4/en/#label-list\n exceptions: {\n exact: {\n INVALID_PARAM_VALUE: g,\n INVALID_PROTOCOL: g,\n INVALID_ARGUMENT: g,\n INVALID_REQUEST_BODY: g,\n MISSING_REQUIRED_PARAM: g,\n BAD_REQUEST: g,\n INVALID_CONTENT_TYPE: g,\n NOT_ACCEPTABLE: g,\n METHOD_NOT_ALLOWED: g,\n NOT_FOUND: O,\n INVALID_CREDENTIALS: Pt,\n INVALID_KEY: Pt,\n IP_FORBIDDEN: Z,\n READ_ONLY: ee,\n INVALID_SIGNATURE: Z,\n MISSING_REQUIRED_HEADER: Z,\n REQUEST_EXPIRED: Z,\n ACCOUNT_LOCKED: Ee,\n FORBIDDEN: ee,\n SUB_ACCOUNT_NOT_FOUND: O,\n SUB_ACCOUNT_LOCKED: Ee,\n MARGIN_BALANCE_EXCEPTION: O,\n MARGIN_TRANSFER_FAILED: O,\n TOO_MUCH_FUTURES_AVAILABLE: O,\n FUTURES_BALANCE_NOT_ENOUGH: re,\n ACCOUNT_EXCEPTION: O,\n SUB_ACCOUNT_TRANSFER_FAILED: O,\n ADDRESS_NOT_USED: O,\n TOO_FAST: Ae,\n WITHDRAWAL_OVER_LIMIT: O,\n API_WITHDRAW_DISABLED: Te,\n INVALID_WITHDRAW_ID: O,\n INVALID_WITHDRAW_CANCEL_STATUS: O,\n INVALID_PRECISION: g,\n INVALID_CURRENCY: g,\n INVALID_CURRENCY_PAIR: it,\n POC_FILL_IMMEDIATELY: k,\n ORDER_NOT_FOUND: Se,\n CLIENT_ID_NOT_FOUND: Se,\n ORDER_CLOSED: k,\n ORDER_CANCELLED: k,\n QUANTITY_NOT_ENOUGH: g,\n BALANCE_NOT_ENOUGH: re,\n MARGIN_NOT_SUPPORTED: k,\n MARGIN_BALANCE_NOT_ENOUGH: re,\n AMOUNT_TOO_LITTLE: g,\n AMOUNT_TOO_MUCH: g,\n REPEATED_CREATION: k,\n LOAN_NOT_FOUND: Se,\n LOAN_RECORD_NOT_FOUND: Se,\n NO_MATCHED_LOAN: O,\n NOT_MERGEABLE: O,\n NO_CHANGE: O,\n REPAY_TOO_MUCH: O,\n TOO_MANY_CURRENCY_PAIRS: k,\n TOO_MANY_ORDERS: k,\n TOO_MANY_REQUESTS: Ae,\n MIXED_ACCOUNT_TYPE: k,\n AUTO_BORROW_TOO_MUCH: O,\n TRADE_RESTRICTED: re,\n USER_NOT_FOUND: Z,\n CONTRACT_NO_COUNTER: O,\n CONTRACT_NOT_FOUND: O,\n RISK_LIMIT_EXCEEDED: O,\n INSUFFICIENT_AVAILABLE: re,\n LIQUIDATE_IMMEDIATELY: k,\n LEVERAGE_TOO_HIGH: g,\n LEVERAGE_TOO_LOW: g,\n ORDER_NOT_OWNED: O,\n ORDER_FINISHED: O,\n POSITION_CROSS_MARGIN: O,\n POSITION_IN_LIQUIDATION: O,\n POSITION_IN_CLOSE: O,\n POSITION_EMPTY: k,\n REMOVE_TOO_MUCH: O,\n RISK_LIMIT_NOT_MULTIPLE: O,\n RISK_LIMIT_TOO_HIGH: O,\n RISK_LIMIT_TOO_lOW: O,\n PRICE_TOO_DEVIATED: k,\n SIZE_TOO_LARGE: g,\n SIZE_TOO_SMALL: g,\n PRICE_OVER_LIQUIDATION: g,\n PRICE_OVER_BANKRUPT: g,\n ORDER_POC_IMMEDIATE: g,\n INCREASE_POSITION: k,\n CONTRACT_IN_DELISTING: O,\n INTERNAL: Te,\n SERVER_ERROR: Te,\n TOO_BUSY: Te,\n CROSS_ACCOUNT_NOT_FOUND: O,\n RISK_LIMIT_TOO_LOW: g,\n AUTO_TRIGGER_PRICE_LESS_LAST: k,\n AUTO_TRIGGER_PRICE_GREATE_LAST: k,\n POSITION_HOLDING: g,\n USER_LOAN_EXCEEDED: g\n // {\"label\":\"USER_LOAN_EXCEEDED\",\"message\":\"Max loan amount per user would be exceeded\"}\n },\n broad: {\n \"only used addresses or verified addresses are allowed for api withdrawal\": gi,\n \"Error: Invalid amount or below minimum amount limit.\": Xt,\n \"Candlestick too long ago. Maximum 10000 points ago are allowed\": Au\n },\n messages: {\n \"INVALID_PARAM_VALUE: Your order size %% is too small\": ye.ORDER_UNDER_MINIMUM\n }\n }\n });\n }\n convertExpireDate(e) {\n const t = e.slice(0, 2), i = e.slice(2, 4), s = e.slice(4, 6);\n return \"20\" + t + \"-\" + i + \"-\" + s + \"T00:00:00Z\";\n }\n createExpiredOptionMarket(e) {\n const t = \"USDT\", i = t, s = e.split(\"-\"), n = e.split(\"/\"), r = e.split(\"_\");\n let a, o = this.safeString(s, 1);\n e.indexOf(\"/\") > -1 ? a = this.safeString(n, 0) : (a = this.safeString(r, 0), o = o.slice(2, 8));\n const c = this.safeString(s, 2), u = this.safeString(s, 3), f = this.convertExpireDate(o), h = this.parse8601(f);\n return {\n id: a + \"_\" + t + \"-20\" + o + \"-\" + c + \"-\" + u,\n symbol: a + \"/\" + t + \":\" + i + \"-\" + o + \"-\" + c + \"-\" + u,\n base: a,\n quote: t,\n settle: i,\n baseId: a,\n quoteId: t,\n settleId: i,\n active: !1,\n type: \"option\",\n linear: void 0,\n inverse: void 0,\n spot: !1,\n swap: !1,\n future: !1,\n option: !0,\n margin: !1,\n contract: !0,\n contractSize: this.parseNumber(\"1\"),\n expiry: h,\n expiryDatetime: f,\n optionType: u === \"C\" ? \"call\" : \"put\",\n strike: this.parseNumber(c),\n precision: {\n amount: this.parseNumber(\"1\"),\n price: void 0\n },\n limits: {\n amount: {\n min: void 0,\n max: void 0\n },\n price: {\n min: void 0,\n max: void 0\n },\n cost: {\n min: void 0,\n max: void 0\n }\n },\n info: void 0\n };\n }\n safeMarket(e = void 0, t = void 0, i = void 0, s = void 0) {\n return e !== void 0 && (e.indexOf(\"-C\") > -1 || e.indexOf(\"-P\") > -1) && !(e in this.markets_by_id) ? this.createExpiredOptionMarket(e) : super.safeMarket(e, t, i, s);\n }\n isUsingForcedProxy(e = {}, t = []) {\n return t[0] === \"private\";\n }\n nonce() {\n const e = this.safeString(this.options, \"timeDifference\"), t = this.parseNumber(P.stringDiv(e, \"1000\"));\n return this.seconds() - t;\n }\n async fetchStatus(e = {}) {\n const t = await this.publicSpotGetTime(e), i = this.safeInteger(t, \"server_time\");\n return {\n status: i !== void 0 ? \"ok\" : \"maintenance\",\n updated: i,\n eta: void 0,\n url: void 0,\n info: t\n };\n }\n async fetchTime(e) {\n const t = await this.publicSpotGetTime(e);\n return this.safeInteger(t, \"server_time\");\n }\n async fetchMarkets(e = {}) {\n const t = this.safeValue(this.options, \"sandboxMode\", !1);\n let i = [\n this.fetchContractMarkets(e),\n this.fetchOptionMarkets(e)\n ];\n if (!t) {\n const c = [this.fetchSpotMarkets(e)];\n i = this.arrayConcat(i, c);\n }\n const s = await Promise.all(i), n = this.safeValue(s, 0, []), r = this.safeValue(s, 1, []), a = this.safeValue(s, 2, []), o = this.arrayConcat(n, r);\n return this.arrayConcat(o, a);\n }\n async fetchSpotMarkets(e = {}) {\n const t = await this.publicMarginGetCurrencyPairs(e), i = await this.publicSpotGetCurrencyPairs(e), s = this.indexBy(t, \"id\"), n = [];\n for (let r = 0; r < i.length; r++) {\n const a = i[r], o = this.safeString(a, \"id\"), c = this.safeValue(s, o), u = this.deepExtend(c, a), [f, h] = o.split(\"_\"), l = this.safeCurrencyCode(f), p = this.safeCurrencyCode(h), m = this.safeString(u, \"fee\"), y = this.safeString(u, \"maker_fee_rate\", m), w = this.parseNumber(this.parsePrecision(this.safeString(u, \"amount_precision\"))), S = this.safeString(u, \"trade_status\"), T = this.safeNumber(u, \"leverage\") !== void 0;\n n.push({\n id: o,\n symbol: l + \"/\" + p,\n base: l,\n quote: p,\n settle: void 0,\n baseId: f,\n quoteId: h,\n settleId: void 0,\n type: \"spot\",\n spot: !0,\n margin: T,\n swap: !1,\n future: !1,\n option: !1,\n active: S === \"tradable\",\n contract: !1,\n linear: void 0,\n inverse: void 0,\n // Fee is in %, so divide by 100\n taker: this.parseNumber(P.stringDiv(m, \"100\")),\n maker: this.parseNumber(P.stringDiv(y, \"100\")),\n contractSize: void 0,\n expiry: void 0,\n expiryDatetime: void 0,\n strike: void 0,\n optionType: void 0,\n precision: {\n amount: w,\n price: this.parseNumber(this.parsePrecision(this.safeString(u, \"precision\")))\n },\n limits: {\n leverage: {\n min: this.parseNumber(\"1\"),\n max: this.safeNumber(u, \"leverage\", 1)\n },\n amount: {\n min: this.safeNumber(a, \"min_base_amount\", w),\n max: void 0\n },\n price: {\n min: void 0,\n max: void 0\n },\n cost: {\n min: this.safeNumber(u, \"min_quote_amount\"),\n max: T ? this.safeNumber(u, \"max_quote_amount\") : void 0\n }\n },\n created: void 0,\n info: u\n });\n }\n return n;\n }\n async fetchContractMarkets(e = {}) {\n const t = [], i = this.getSettlementCurrencies(\"swap\", \"fetchMarkets\"), s = this.getSettlementCurrencies(\"future\", \"fetchMarkets\");\n for (let n = 0; n < i.length; n++) {\n const r = i[n], a = {\n settle: r\n }, o = await this.publicFuturesGetSettleContracts(this.extend(a, e));\n for (let c = 0; c < o.length; c++) {\n const u = this.parseContractMarket(o[c], r);\n t.push(u);\n }\n }\n for (let n = 0; n < s.length; n++) {\n const r = s[n], a = {\n settle: r\n }, o = await this.publicDeliveryGetSettleContracts(this.extend(a, e));\n for (let c = 0; c < o.length; c++) {\n const u = this.parseContractMarket(o[c], r);\n t.push(u);\n }\n }\n return t;\n }\n parseContractMarket(e, t) {\n const i = this.safeString(e, \"name\"), s = i.split(\"_\"), n = this.safeString(s, 0), r = this.safeString(s, 1), a = this.safeString(s, 2), o = this.safeCurrencyCode(n), c = this.safeCurrencyCode(r), u = this.safeCurrencyCode(t), f = this.safeTimestamp(e, \"expire_time\");\n let h = \"\", l = \"swap\";\n a !== void 0 ? (h = o + \"/\" + c + \":\" + u + \"-\" + this.yymmdd(f, \"\"), l = \"future\") : h = o + \"/\" + c + \":\" + u;\n const p = this.safeString(e, \"order_price_deviate\"), m = this.safeString(e, \"mark_price\"), y = P.stringSub(\"1\", p), w = P.stringAdd(\"1\", p), S = P.stringMul(y, m), b = P.stringMul(w, m), T = this.safeString(e, \"taker_fee_rate\"), x = this.safeString(e, \"maker_fee_rate\", T), v = c === u;\n return {\n id: i,\n symbol: h,\n base: o,\n quote: c,\n settle: u,\n baseId: n,\n quoteId: r,\n settleId: t,\n type: l,\n spot: !1,\n margin: !1,\n swap: l === \"swap\",\n future: l === \"future\",\n option: l === \"option\",\n active: !0,\n contract: !0,\n linear: v,\n inverse: !v,\n taker: this.parseNumber(P.stringDiv(T, \"100\")),\n maker: this.parseNumber(P.stringDiv(x, \"100\")),\n contractSize: this.safeNumber(e, \"quanto_multiplier\"),\n expiry: f,\n expiryDatetime: this.iso8601(f),\n strike: void 0,\n optionType: void 0,\n precision: {\n amount: this.parseNumber(\"1\"),\n price: this.safeNumber(e, \"order_price_round\")\n },\n limits: {\n leverage: {\n min: this.safeNumber(e, \"leverage_min\"),\n max: this.safeNumber(e, \"leverage_max\")\n },\n amount: {\n min: this.safeNumber(e, \"order_size_min\"),\n max: this.safeNumber(e, \"order_size_max\")\n },\n price: {\n min: this.parseNumber(S),\n max: this.parseNumber(b)\n },\n cost: {\n min: void 0,\n max: void 0\n }\n },\n created: void 0,\n info: e\n };\n }\n async fetchOptionMarkets(e = {}) {\n const t = [], i = await this.fetchOptionUnderlyings();\n for (let s = 0; s < i.length; s++) {\n const n = i[s], r = this.extend({}, e);\n r.underlying = n;\n const a = await this.publicOptionsGetContracts(r);\n for (let o = 0; o < a.length; o++) {\n const c = a[o], u = this.safeString(c, \"name\"), f = n.split(\"_\"), h = this.safeString(f, 0), l = this.safeString(f, 1), p = this.safeCurrencyCode(h), m = this.safeCurrencyCode(l);\n let y = p + \"/\" + m;\n const w = this.safeTimestamp(c, \"expiration_time\"), S = this.safeString(c, \"strike_price\"), b = this.safeValue(c, \"is_call\"), T = b ? \"C\" : \"P\", x = b ? \"call\" : \"put\";\n y = y + \":\" + m + \"-\" + this.yymmdd(w) + \"-\" + S + \"-\" + T;\n const v = this.safeString(c, \"order_price_deviate\"), _ = this.safeString(c, \"mark_price\"), V = P.stringSub(\"1\", v), j = P.stringAdd(\"1\", v), G = P.stringMul(V, _), W = P.stringMul(j, _), B = this.safeString(c, \"taker_fee_rate\"), Q = this.safeString(c, \"maker_fee_rate\", B);\n t.push({\n id: u,\n symbol: y,\n base: p,\n quote: m,\n settle: m,\n baseId: h,\n quoteId: l,\n settleId: l,\n type: \"option\",\n spot: !1,\n margin: !1,\n swap: !1,\n future: !1,\n option: !0,\n active: !0,\n contract: !0,\n linear: !0,\n inverse: !1,\n taker: this.parseNumber(P.stringDiv(B, \"100\")),\n maker: this.parseNumber(P.stringDiv(Q, \"100\")),\n contractSize: this.parseNumber(\"1\"),\n expiry: w,\n expiryDatetime: this.iso8601(w),\n strike: S,\n optionType: x,\n precision: {\n amount: this.parseNumber(\"1\"),\n price: this.safeNumber(c, \"order_price_round\")\n },\n limits: {\n leverage: {\n min: void 0,\n max: void 0\n },\n amount: {\n min: this.safeNumber(c, \"order_size_min\"),\n max: this.safeNumber(c, \"order_size_max\")\n },\n price: {\n min: this.parseNumber(G),\n max: this.parseNumber(W)\n },\n cost: {\n min: void 0,\n max: void 0\n }\n },\n created: this.safeTimestamp(c, \"create_time\"),\n info: c\n });\n }\n }\n return t;\n }\n async fetchOptionUnderlyings() {\n const e = await this.publicOptionsGetUnderlyings(), t = [];\n for (let i = 0; i < e.length; i++) {\n const s = e[i], n = this.safeString(s, \"name\");\n n !== void 0 && t.push(n);\n }\n return t;\n }\n prepareRequest(e = void 0, t = void 0, i = {}) {\n const s = {};\n if (e !== void 0)\n e.contract ? (s.contract = e.id, e.option || (s.settle = e.settleId)) : s.currency_pair = e.id;\n else {\n const n = t === \"swap\";\n if (n || t === \"future\") {\n const a = n ? \"usdt\" : \"btc\", o = this.safeStringLower(i, \"settle\", a);\n i = this.omit(i, \"settle\"), s.settle = o;\n }\n }\n return [s, i];\n }\n spotOrderPrepareRequest(e = void 0, t = !1, i = {}) {\n const [s, n] = this.getMarginMode(t, i), r = {};\n if (!t) {\n if (e === void 0)\n throw new g(\"spotOrderPrepareRequest() requires a market argument for non-stop orders\").exchange(this.id);\n r.account = s, r.currency_pair = e.id;\n }\n return [r, n];\n }\n multiOrderSpotPrepareRequest(e = void 0, t = !1, i = {}) {\n const [s, n] = this.getMarginMode(t, i), r = {\n account: s\n };\n return e !== void 0 && (t ? r.market = e.id : r.currency_pair = e.id), [r, n];\n }\n getMarginMode(e, t) {\n const i = this.safeStringLower2(this.options, \"defaultMarginMode\", \"marginMode\", \"spot\");\n let s = this.safeStringLower2(t, \"marginMode\", \"account\", i);\n if (t = this.omit(t, [\"marginMode\", \"account\"]), s === \"cross\" ? s = \"cross_margin\" : s === \"isolated\" ? s = \"margin\" : s === \"\" && (s = \"spot\"), e && (s === \"spot\" && (s = \"normal\"), s === \"cross_margin\"))\n throw new O().addMessage(\"getMarginMode() does not support stop orders for cross margin\").exchange(this.id);\n return [s, t];\n }\n getSettlementCurrencies(e, t) {\n const i = this.safeValue(this.options, e, {}), s = this.safeValue(i, t, {}), n = e === \"swap\" ? [\"usdt\"] : [\"btc\"];\n return this.safeValue(s, \"settlementCurrencies\", n);\n }\n async fetchCurrencies(e = {}) {\n if (this.safeValue(this.urls, \"apiBackup\") !== void 0)\n return;\n const i = await this.publicSpotGetCurrencies(e), s = {};\n for (let n = 0; n < i.length; n++) {\n const r = i[n], a = this.safeString(r, \"currency\"), o = this.safeStringLower(r, \"currency\"), u = a.split(\"_\")[0], f = this.safeCurrencyCode(u), h = this.safeString(r, \"chain\");\n let l;\n h !== void 0 && (l = this.networkIdToCode(h, f));\n const p = this.safeValue(r, \"delisted\"), m = this.safeBool(r, \"withdraw_disabled\", !1), y = this.safeBool(r, \"deposit_disabled\", !1), w = this.safeBool(r, \"trade_disabled\", !1), S = !m, b = !y, v = !p && !w && S && b;\n this.safeValue(s, f) === void 0 && (s[f] = {\n id: f.toLowerCase(),\n code: f,\n info: void 0,\n name: void 0,\n active: v,\n deposit: b,\n withdraw: S,\n fee: void 0,\n fees: [],\n precision: a === \"BTC\" ? this.parseNumber(\"1e-6\") : this.parseNumber(\"1e-4\"),\n limits: this.limits,\n networks: {}\n });\n let _ = this.safeValue(s[f], \"deposit\"), V = this.safeValue(s[f], \"withdraw\");\n _ = b || _, V = S || V;\n const j = this.safeValue(s[f], \"networks\", {});\n l !== void 0 && (j[l] = {\n info: r,\n id: h,\n network: l,\n currencyId: a,\n lowerCaseCurrencyId: o,\n deposit: b,\n withdraw: S,\n active: v,\n fee: void 0,\n precision: a === \"BTC\" ? this.parseNumber(\"1e-6\") : this.parseNumber(\"1e-4\"),\n limits: {\n amount: {\n min: void 0,\n max: void 0\n },\n withdraw: {\n min: void 0,\n max: void 0\n },\n deposit: {\n min: void 0,\n max: void 0\n }\n }\n }), s[f].networks = j;\n const G = this.safeValue(s[f], \"info\", []);\n G.push(r), s[f].info = G, s[f].active = _ && V, s[f].deposit = _, s[f].withdraw = V;\n }\n return s;\n }\n async fetchNetworkDepositAddress(e, t = {}) {\n await this.loadMarkets();\n const s = {\n currency: this.currency(e).id\n }, n = await this.privateWalletGetDepositAddress(this.extend(s, t)), r = this.safeValue(n, \"multichain_addresses\"), a = this.safeString(n, \"currency\");\n e = this.safeCurrencyCode(a);\n const o = {};\n for (let c = 0; c < r.length; c++) {\n const u = r[c];\n if (this.safeInteger(u, \"obtain_failed\"))\n continue;\n const h = this.safeString(u, \"chain\"), l = this.safeString(u, \"address\"), p = this.safeString(u, \"payment_id\");\n o[h] = {\n info: u,\n code: e,\n currency: e,\n address: l,\n tag: p\n };\n }\n return o;\n }\n async fetchDepositAddress(e, t = {}) {\n await this.loadMarkets();\n const s = {\n currency: this.currency(e).id\n }, n = await this.privateWalletGetDepositAddress(this.extend(s, t)), r = this.safeString(n, \"currency\");\n e = this.safeCurrencyCode(r);\n let a, o;\n const c = this.safeString(t, \"network\");\n if (c !== void 0) {\n const u = this.safeValue(n, \"multichain_addresses\");\n for (let f = 0; f < u.length; f++) {\n const h = u[f], l = this.safeString(h, \"chain\");\n if (c === l) {\n if (this.safeInteger(h, \"obtain_failed\"))\n break;\n o = this.safeString(h, \"address\"), a = this.safeString(h, \"payment_id\");\n break;\n }\n }\n } else {\n const u = this.safeString(n, \"address\");\n if (u !== void 0) {\n if (u.indexOf(\"New address is being generated for you, please wait\") >= 0)\n throw new It(e).overwriteMessage(\"New address is being generated for you, please wait a few seconds and try again to get the address.\").exchange(this.id);\n if (u.indexOf(\" \") >= 0) {\n const f = u.split(\" \");\n o = f[0], a = f[1];\n } else\n o = u;\n }\n }\n return this.checkAddress(o), {\n info: n,\n code: e,\n currency: e,\n address: o,\n tag: a,\n network: c\n };\n }\n async fetchTradingFee(e, t = {}) {\n await this.loadMarkets();\n const i = this.market(e), s = {\n currency_pair: i.id\n }, n = await this.privateWalletGetFee(this.extend(s, t));\n return this.parseTradingFee(n, i);\n }\n async fetchTradingFees(e = {}) {\n await this.loadMarkets();\n const t = await this.privateWalletGetFee(e);\n return this.parseTradingFees(t);\n }\n parseTradingFees(e) {\n const t = {};\n for (let i = 0; i < this.symbols.length; i++) {\n const s = this.symbols[i], n = this.market(s);\n t[s] = this.parseTradingFee(e, n);\n }\n return t;\n }\n parseTradingFee(e, t = void 0) {\n const i = this.safeValue(e, \"gt_discount\"), s = i ? \"gt_taker_fee\" : \"taker_fee\", n = i ? \"gt_maker_fee\" : \"maker_fee\", r = this.safeValue(t, \"contract\"), a = r ? \"futures_taker_fee\" : s, o = r ? \"futures_maker_fee\" : n;\n return {\n info: e,\n symbol: this.safeString(t, \"symbol\"),\n maker: this.safeNumber(e, o),\n taker: this.safeNumber(e, a)\n };\n }\n async fetchTransactionFees(e = void 0, t = {}) {\n await this.loadMarkets();\n const i = await this.privateWalletGetWithdrawStatus(t), s = {};\n let n = {};\n for (let r = 0; r < i.length; r++) {\n n = {};\n const a = i[r], o = this.safeString(a, \"currency\"), c = this.safeCurrencyCode(o);\n if (e !== void 0 && !this.inArray(c, e))\n continue;\n const u = this.safeValue(a, \"withdraw_fix_on_chains\");\n if (u === void 0)\n n = this.safeNumber(a, \"withdraw_fix\");\n else {\n const f = Object.keys(u);\n for (let h = 0; h < f.length; h++) {\n const l = f[h];\n n[l] = this.parseNumber(u[l]);\n }\n }\n s[c] = {\n withdraw: n,\n deposit: void 0,\n info: a\n };\n }\n return s;\n }\n async fetchDepositWithdrawFees(e = void 0, t = {}) {\n await this.loadMarkets();\n const i = await this.privateWalletGetWithdrawStatus(t);\n return this.parseDepositWithdrawFees(i, e, \"currency\");\n }\n parseDepositWithdrawFee(e, t = void 0) {\n const i = this.safeValue(e, \"withdraw_fix_on_chains\"), s = {\n info: e,\n withdraw: {\n fee: this.safeNumber(e, \"withdraw_fix\"),\n min: this.safeNumber(e, \"withdraw_amount_mini\"),\n percentage: !1\n },\n deposit: {\n fee: this.safeNumber(e, \"deposit\"),\n percentage: !1\n },\n networks: {}\n };\n if (i !== void 0) {\n const n = Object.keys(i);\n for (let r = 0; r < n.length; r++) {\n const a = n[r];\n s.networks[a] = {\n withdraw: {\n fee: this.parseNumber(i[a]),\n percentage: !1,\n min: this.safeNumber(e, \"withdraw_amount_mini\")\n },\n deposit: {\n fee: void 0,\n percentage: void 0\n }\n };\n }\n }\n return s;\n }\n async fetchOrderBook(e, t = void 0, i = {}) {\n await this.loadMarkets();\n const s = this.market(e), [n, r] = this.prepareRequest(s, s.type, i);\n t !== void 0 && (n.limit = t), n.with_id = !0;\n let a;\n if (s.spot || s.margin)\n a = await this.publicSpotGetOrderBook(this.extend(n, r));\n else if (s.swap)\n a = await this.publicFuturesGetSettleOrderBook(this.extend(n, r));\n else if (s.future)\n a = await this.publicDeliveryGetSettleOrderBook(this.extend(n, r));\n else if (s.option)\n a = await this.publicOptionsGetOrderBook(this.extend(n, r));\n else\n throw new ge(s.type).addMessage(\"fetchOrderBook() not support this market type\").exchange(this.id);\n let o = this.safeInteger(a, \"current\");\n s.spot || (o = o * 1e3);\n const c = s.spot ? 0 : \"p\", u = s.spot ? 1 : \"s\", f = this.safeInteger(a, \"id\"), h = this.parseOrderBook(a, e, o, \"bids\", \"asks\", c, u);\n return h.nonce = f, h;\n }\n async fetchTicker(e, t = {}) {\n await this.loadMarkets();\n const i = this.market(e), [s, n] = this.prepareRequest(i, void 0, t);\n let r;\n if (i.spot || i.margin)\n r = await this.publicSpotGetTickers(this.extend(s, n));\n else if (i.swap)\n r = await this.publicFuturesGetSettleTickers(this.extend(s, n));\n else if (i.future)\n r = await this.publicDeliveryGetSettleTickers(this.extend(s, n));\n else if (i.option) {\n const c = i.id.split(\"-\");\n s.underlying = this.safeString(c, 0), r = await this.publicOptionsGetTickers(this.extend(s, n));\n } else\n throw new ge(i.type).exchange(this.id);\n let a;\n if (i.option)\n for (let o = 0; o < r.length; o++) {\n const c = r[o];\n if (c.name === i.id) {\n a = c;\n break;\n }\n }\n else\n a = this.safeValue(r, 0);\n return this.parseTicker(a, i);\n }\n parseTicker(e, t = void 0) {\n const i = this.safeStringN(e, [\"currency_pair\", \"contract\", \"name\"]), s = \"mark_price\" in e ? \"contract\" : \"spot\", n = this.safeSymbol(i, t, \"_\", s), r = this.safeString2(e, \"last\", \"last_price\"), a = this.safeStringN(e, [\"lowest_ask\", \"a\", \"ask1_price\"]), o = this.safeStringN(e, [\"highest_bid\", \"b\", \"bid1_price\"]), c = this.safeString(e, \"high_24h\"), u = this.safeString(e, \"low_24h\"), f = this.safeString2(e, \"B\", \"bid1_size\"), h = this.safeString2(e, \"A\", \"ask1_size\"), l = this.safeInteger(e, \"t\");\n let p = this.safeString2(e, \"base_volume\", \"volume_24h_base\");\n p === \"nan\" && (p = \"0\");\n let m = this.safeString2(e, \"quote_volume\", \"volume_24h_quote\");\n m === \"nan\" && (m = \"0\");\n const y = this.safeString(e, \"change_percentage\");\n return this.safeTicker({\n symbol: n,\n timestamp: l,\n datetime: this.iso8601(l),\n high: c,\n low: u,\n bid: o,\n bidVolume: f,\n ask: a,\n askVolume: h,\n vwap: void 0,\n open: void 0,\n close: r,\n last: r,\n previousClose: void 0,\n change: void 0,\n percentage: y,\n average: void 0,\n baseVolume: p,\n quoteVolume: m,\n info: e\n }, t);\n }\n async fetchTickers(e = void 0, t = {}) {\n await this.loadMarkets(), e = this.marketSymbols(e);\n const i = this.safeString(e, 0);\n let s;\n i !== void 0 && (s = this.market(i));\n const [n, r] = this.handleMarketTypeAndParams(\"fetchTickers\", s, t), [a, o] = this.prepareRequest(void 0, n, r);\n let c;\n if (a.timezone = \"utc0\", n === \"spot\" || n === \"margin\")\n c = await this.publicSpotGetTickers(this.extend(a, o));\n else if (n === \"swap\")\n c = await this.publicFuturesGetSettleTickers(this.extend(a, o));\n else if (n === \"future\")\n c = await this.publicDeliveryGetSettleTickers(this.extend(a, o));\n else if (n === \"option\") {\n this.checkRequiredArgument(\"fetchTickers\", e, \"symbols\");\n const f = s.id.split(\"-\");\n a.underlying = this.safeString(f, 0), c = await this.publicOptionsGetTickers(this.extend(a, o));\n } else\n throw new ge(n).addMessage('fetchTickers() not support this market type, provide symbols or set params[\"defaultType\"] to one from spot/margin/swap/future/options').exchange(this.id);\n return this.parseTickers(c, e);\n }\n parseBalanceHelper(e) {\n const t = this.account();\n return t.used = this.safeString2(e, \"freeze\", \"locked\"), t.free = this.safeString(e, \"available\"), t.total = this.safeString(e, \"total\"), \"borrowed\" in e && (t.debt = this.safeString(e, \"borrowed\")), t;\n }\n async fetchBalance(e = {}) {\n await this.loadMarkets();\n const t = this.safeString(e, \"symbol\");\n e = this.omit(e, \"symbol\");\n const [i, s] = this.handleMarketTypeAndParams(\"fetchBalance\", void 0, e), [n, r] = this.prepareRequest(void 0, i, s), [a, o] = this.getMarginMode(!1, r);\n if (t !== void 0) {\n const m = this.market(t);\n n.currency_pair = m.id;\n }\n let c;\n if (i === \"spot\")\n if (a === \"spot\")\n c = await this.privateSpotGetAccounts(this.extend(n, o));\n else if (a === \"margin\")\n c = await this.privateMarginGetAccounts(this.extend(n, o));\n else if (a === \"cross_margin\")\n c = await this.privateMarginGetCrossAccounts(this.extend(n, o));\n else\n throw new To().addMessage(\"fetchBalance() not support this marginMode\").exchange(this.id);\n else if (i === \"funding\")\n c = await this.privateMarginGetFundingAccounts(this.extend(n, o));\n else if (i === \"swap\")\n c = await this.privateFuturesGetSettleAccounts(this.extend(n, o));\n else if (i === \"future\")\n c = await this.privateDeliveryGetSettleAccounts(this.extend(n, o));\n else if (i === \"option\")\n c = await this.privateOptionsGetAccounts(this.extend(n, o));\n else\n throw new ge(i).exchange(this.id);\n (i === \"swap\" || i === \"future\" || i === \"option\") && (c = [c]);\n const f = {\n info: c\n }, h = a === \"margin\";\n let l = c;\n if (\"balances\" in l) {\n const m = [], y = this.safeValue(l, \"balances\", []), w = Object.keys(y);\n for (let S = 0; S < w.length; S++) {\n const b = w[S], T = y[b];\n T.currency = b, m.push(T);\n }\n l = m;\n }\n for (let m = 0; m < l.length; m++) {\n const y = l[m];\n if (h) {\n const w = this.safeString(y, \"currency_pair\"), S = this.safeSymbol(w, void 0, \"_\", \"margin\"), b = this.safeValue(y, \"base\", {}), T = this.safeValue(y, \"quote\", {}), x = this.safeCurrencyCode(this.safeString(b, \"currency\")), v = this.safeCurrencyCode(this.safeString(T, \"currency\")), _ = {};\n _[x] = this.parseBalanceHelper(b), _[v] = this.parseBalanceHelper(T), f[S] = this.safeBalance(_);\n } else {\n const w = this.safeCurrencyCode(this.safeString(y, \"currency\"));\n f[w] = this.parseBalanceHelper(y);\n }\n }\n return h ? f : this.safeBalance(f);\n }\n async fetchOHLCV(e, t = \"1m\", i = void 0, s = void 0, n = {}) {\n await this.loadMarkets();\n const r = this.market(e);\n let a = !1;\n if ([a, n] = this.handleOptionAndParams(n, \"fetchOHLCV\", \"paginate\"), a)\n return await this.fetchPaginatedCallDeterministic(\"fetchOHLCV\", e, i, s, t, n, 1e3);\n if (r.option)\n return await this.fetchOptionOHLCV(e, t, i, s, n);\n const o = this.safeString(n, \"price\");\n let c = {};\n [c, n] = this.prepareRequest(r, void 0, n), c.interval = this.safeString(this.timeframes, t, t);\n let u = 1e3;\n s = s === void 0 ? u : Math.min(s, u);\n let f = this.safeInteger(n, \"until\");\n if (f !== void 0 && (f = this.parseToInt(f / 1e3), n = this.omit(n, \"until\")), i !== void 0) {\n const l = this.parseTimeframe(t);\n c.from = this.parseToInt(i / 1e3);\n const p = (s - 1) * l, m = this.sum(c.from, p), y = this.seconds(), w = Math.min(m, y);\n f !== void 0 ? c.to = Math.min(w, f) : c.to = w;\n } else\n f !== void 0 && (c.to = f), c.limit = s;\n let h;\n return r.contract ? (u = 1999, (o === \"mark\" || o === \"index\") && (c.contract = o + \"_\" + r.id, n = this.omit(n, \"price\")), r.future ? h = await this.publicDeliveryGetSettleCandlesticks(this.extend(c, n)) : r.swap && (h = await this.publicFuturesGetSettleCandlesticks(this.extend(c, n)))) : h = await this.publicSpotGetCandlesticks(this.extend(c, n)), this.parseOHLCVs(h, r, t, i, s);\n }\n async fetchOptionOHLCV(e, t = \"1m\", i = void 0, s = void 0, n = {}) {\n await this.loadMarkets();\n const r = this.market(e);\n let a = {};\n [a, n] = this.prepareRequest(r, void 0, n), a.interval = this.safeString(this.timeframes, t, t);\n const o = await this.publicOptionsGetCandlesticks(this.extend(a, n));\n return this.parseOHLCVs(o, r, t, i, s);\n }\n parseOHLCV(e, t = void 0) {\n return Array.isArray(e) ? [\n this.safeTimestamp(e, 0),\n this.safeNumber(e, 5),\n this.safeNumber(e, 3),\n this.safeNumber(e, 4),\n this.safeNumber(e, 2),\n this.safeNumber(e, 6)\n // trading volume\n ] : [\n this.safeTimestamp(e, \"t\"),\n this.safeNumber(e, \"o\"),\n this.safeNumber(e, \"h\"),\n this.safeNumber(e, \"l\"),\n this.safeNumber(e, \"c\"),\n this.safeNumber(e, \"v\")\n // trading volume, undefined for mark or index price\n ];\n }\n async fetchTrades(e, t = void 0, i = void 0, s = {}) {\n await this.loadMarkets();\n let n = !1;\n if ([n, s] = this.handleOptionAndParams(s, \"fetchTrades\", \"paginate\"), n)\n return await this.fetchPaginatedCallDynamic(\"fetchTrades\", e, t, i, s);\n const r = this.market(e), [a, o] = this.prepareRequest(r, void 0, s), c = this.safeInteger2(s, \"to\", \"until\");\n c !== void 0 && (s = this.omit(s, [\"until\"]), a.to = this.parseToInt(c / 1e3)), i !== void 0 && (a.limit = Math.min(i, 1e3)), t !== void 0 && r.contract && (a.from = this.parseToInt(t / 1e3));\n let u;\n if (r.type === \"spot\" || r.type === \"margin\")\n u = await this.publicSpotGetTrades(this.extend(a, o));\n else if (r.swap)\n u = await this.publicFuturesGetSettleTrades(this.extend(a, o));\n else if (r.future)\n u = await this.publicDeliveryGetSettleTrades(this.extend(a, o));\n else if (r.type === \"option\")\n u = await this.publicOptionsGetTrades(this.extend(a, o));\n else\n throw new ge(r.type).exchange(this.id);\n return this.parseTrades(u, r, t, i);\n }\n async fetchOrderTrades(e, t = void 0, i = void 0, s = void 0, n = {}) {\n if (t === void 0)\n throw new g(\"fetchOrderTrades() requires a symbol argument\").exchange(this.id);\n return await this.loadMarkets(), await this.fetchMyTrades(t, i, s, { order_id: e });\n }\n async fetchMyTrades(e = void 0, t = void 0, i = void 0, s = {}) {\n await this.loadMarkets();\n let n = !1;\n if ([n, s] = this.handleOptionAndParams(s, \"fetchMyTrades\", \"paginate\"), n)\n return await this.fetchPaginatedCallDynamic(\"fetchMyTrades\", e, t, i, s);\n let r, a, o = {};\n const c = e !== void 0 ? this.market(e) : void 0, u = this.safeInteger2(s, \"until\", \"till\");\n s = this.omit(s, [\"until\", \"till\"]), [r, s] = this.handleMarketTypeAndParams(\"fetchMyTrades\", c, s), r === \"swap\" || r === \"future\" || r === \"option\" ? ([o, s] = this.prepareRequest(c, r, s), r === \"option\" && (s = this.omit(s, \"order_id\"))) : (c !== void 0 && (o.currency_pair = c.id), [a, s] = this.getMarginMode(!1, s), o.account = a), i !== void 0 && (o.limit = i), t !== void 0 && (o.from = this.parseToInt(t / 1e3)), u !== void 0 && (o.to = this.parseToInt(u / 1e3));\n let h;\n if (r === \"spot\" || r === \"margin\")\n h = await this.privateSpotGetMyTrades(this.extend(o, s));\n else if (r === \"swap\")\n h = await this.privateFuturesGetSettleMyTradesTimerange(this.extend(o, s));\n else if (r === \"future\")\n h = await this.privateDeliveryGetSettleMyTrades(this.extend(o, s));\n else if (r === \"option\")\n h = await this.privateOptionsGetMyTrades(this.extend(o, s));\n else\n throw new ge(r).exchange(this.id);\n return this.parseTrades(h, c, t, i);\n }\n parseTrade(e, t = void 0) {\n const i = this.safeString2(e, \"id\", \"trade_id\");\n let s = this.safeTimestamp2(e, \"time\", \"create_time\");\n s = this.safeInteger(e, \"create_time_ms\", s);\n const n = this.safeString2(e, \"currency_pair\", \"contract\"), r = \"contract\" in e ? \"contract\" : \"spot\";\n t = this.safeMarket(n, t, \"_\", r);\n let a = this.safeString2(e, \"amount\", \"size\");\n const o = this.safeString(e, \"price\"), c = P.stringLt(a, \"0\") ? \"sell\" : \"buy\";\n a = P.stringAbs(a);\n const u = this.safeString2(e, \"side\", \"type\", c), f = this.safeString(e, \"order_id\"), h = this.safeString(e, \"fee\"), l = this.safeString(e, \"gt_fee\"), p = this.safeString(e, \"point_fee\"), m = [];\n if (h !== void 0) {\n const w = this.safeString(e, \"fee_currency\");\n let S = this.safeCurrencyCode(w);\n S === void 0 && (S = this.safeString(t, \"settle\")), m.push({\n cost: h,\n currency: S\n });\n }\n l !== void 0 && m.push({\n cost: l,\n currency: \"GT\"\n }), p !== void 0 && m.push({\n cost: p,\n currency: \"GatePoint\"\n });\n const y = this.safeString(e, \"role\");\n return this.safeTrade({\n info: e,\n id: i,\n timestamp: s,\n datetime: this.iso8601(s),\n symbol: t.symbol,\n order: f,\n type: void 0,\n side: u,\n takerOrMaker: y,\n price: o,\n amount: a,\n cost: void 0,\n fee: m.length ? m[0] : void 0,\n fees: m\n }, t);\n }\n async fetchDeposits(e = void 0, t = void 0, i = void 0, s = {}) {\n await this.loadMarkets();\n let n = !1;\n if ([n, s] = this.handleOptionAndParams(s, \"fetchDeposits\", \"paginate\"), n)\n return await this.fetchPaginatedCallDynamic(\"fetchDeposits\", e, t, i, s);\n let r = {}, a;\n if (e !== void 0 && (a = this.currency(e), r.currency = a.id), i !== void 0 && (r.limit = i), t !== void 0) {\n const c = this.parseToInt(t / 1e3);\n r.from = c, r.to = this.sum(c, 30 * 24 * 60 * 60);\n }\n [r, s] = this.handleUntilOption(\"to\", r, s);\n const o = await this.privateWalletGetDeposits(this.extend(r, s));\n return this.parseTransactions(o, a);\n }\n async fetchWithdrawals(e = void 0, t = void 0, i = void 0, s = {}) {\n await this.loadMarkets();\n let n = !1;\n if ([n, s] = this.handleOptionAndParams(s, \"fetchWithdrawals\", \"paginate\"), n)\n return await this.fetchPaginatedCallDynamic(\"fetchWithdrawals\", e, t, i, s);\n let r = {}, a;\n if (e !== void 0 && (a = this.currency(e), r.currency = a.id), i !== void 0 && (r.limit = i), t !== void 0) {\n const c = this.parseToInt(t / 1e3);\n r.from = c, r.to = this.sum(c, 30 * 24 * 60 * 60);\n }\n [r, s] = this.handleUntilOption(\"to\", r, s);\n const o = await this.privateWalletGetWithdrawals(this.extend(r, s));\n return this.parseTransactions(o, a);\n }\n async withdraw(e, t, i, s = void 0, n = {}) {\n [s, n] = this.handleWithdrawTagAndParams(s, n), this.checkAddress(i), await this.loadMarkets();\n const r = this.currency(e), a = {\n currency: r.id,\n address: i\n };\n s !== void 0 && (a.memo = s);\n const o = this.safeValue(this.options, \"networks\", {});\n let c = this.safeStringUpper(n, \"network\");\n c = this.safeStringLower(o, c, c), c !== void 0 ? (a.chain = c, n = this.omit(n, \"network\")) : a.chain = r.id;\n const u = this.currencyToPrecision(e, t, c);\n a.amount = u;\n const f = await this.privateWithdrawalsPostWithdrawals(this.extend(a, n));\n return this.parseTransaction(f, r);\n }\n parseTransactionStatus(e) {\n const t = {\n PEND: \"pending\",\n REQUEST: \"pending\",\n DMOVE: \"pending\",\n MANUAL: \"pending\",\n VERIFY: \"pending\",\n PROCES: \"pending\",\n EXTPEND: \"pending\",\n SPLITPEND: \"pending\",\n CANCEL: \"canceled\",\n FAIL: \"failed\",\n INVALID: \"failed\",\n DONE: \"ok\",\n BCODE: \"ok\"\n // GateCode withdrawal\n };\n return this.safeString(t, e, e);\n }\n parseTransactionType(e) {\n const t = {\n d: \"deposit\",\n w: \"withdrawal\"\n };\n return this.safeString(t, e, e);\n }\n parseTransaction(e, t = void 0) {\n const i = this.safeString(e, \"id\");\n let s, n = this.safeString(e, \"amount\");\n i !== void 0 && (i[0] === \"b\" ? (s = P.stringGt(n, \"0\") ? \"deposit\" : \"withdrawal\", n = P.stringAbs(n)) : s = this.parseTransactionType(i[0]));\n const r = this.safeString(e, \"fee\");\n s === \"withdrawal\" && (n = P.stringSub(n, r));\n const a = this.safeStringUpper(e, \"chain\"), o = this.safeString(e, \"currency\"), c = this.safeCurrencyCode(o), u = this.safeString(e, \"txid\"), f = this.safeString(e, \"status\"), h = this.parseTransactionStatus(f), l = this.safeString(e, \"address\"), p = this.safeString(e, \"memo\"), m = this.safeTimestamp(e, \"timestamp\");\n return {\n info: e,\n id: i,\n txid: u,\n currency: c,\n amount: this.parseNumber(n),\n network: this.networkIdToCode(a),\n address: l,\n addressTo: void 0,\n addressFrom: void 0,\n tag: p,\n tagTo: void 0,\n tagFrom: void 0,\n status: h,\n type: s,\n timestamp: m,\n datetime: this.iso8601(m),\n updated: void 0,\n internal: void 0,\n comment: void 0,\n fee: {\n currency: c,\n cost: this.parseNumber(r)\n }\n };\n }\n async createOrder(e, t, i, s, n = void 0, r = {}) {\n await this.loadMarkets();\n const a = this.market(e), o = this.safeValue(r, \"trigger\"), c = this.safeValue2(r, \"triggerPrice\", \"stopPrice\"), u = this.safeValue(r, \"stopLossPrice\", c), f = this.safeValue(r, \"takeProfitPrice\"), m = !(u !== void 0 || f !== void 0) && o === void 0, y = this.createOrderRequest(e, t, i, s, n, r);\n let w;\n return a.spot || a.margin ? m ? w = await this.privateSpotPostOrders(y) : w = await this.privateSpotPostPriceOrders(y) : a.swap ? m ? w = await this.privateFuturesPostSettleOrders(y) : w = await this.privateFuturesPostSettlePriceOrders(y) : a.future ? m ? w = await this.privateDeliveryPostSettleOrders(y) : w = await this.privateDeliveryPostSettlePriceOrders(y) : w = await this.privateOptionsPostOrders(y), this.parseOrder(w, a);\n }\n async createOrders(e, t = {}) {\n await this.loadMarkets();\n const i = [], s = [];\n for (let o = 0; o < e.length; o++) {\n const c = e[o], u = this.safeString(c, \"symbol\");\n s.push(u);\n const f = this.safeString(c, \"type\"), h = this.safeString(c, \"side\"), l = this.safeValue(c, \"amount\"), p = this.safeValue(c, \"price\"), m = this.safeValue(c, \"params\", {}), y = this.extend(m, t);\n if (this.safeValueN(m, [\"triggerPrice\", \"stopPrice\", \"takeProfitPrice\", \"stopLossPrice\"]) !== void 0)\n throw new g(\"createOrders() does not support advanced order properties (stopPrice, takeProfitPrice, stopLossPrice)\").exchange(this.id);\n y.textIsRequired = !0;\n const S = this.createOrderRequest(u, f, h, l, p, y);\n i.push(S);\n }\n const n = this.marketSymbols(s, void 0, !1, !0, !0), r = this.market(n[0]);\n if (r.future || r.option)\n throw new ge(r.type).overwriteMessage(\"createOrders() does not support futures or options markets\").exchange(this.id);\n let a;\n return r.spot ? a = await this.privateSpotPostBatchOrders(i) : r.swap && (a = await this.privateFuturesPostSettleBatchOrders(i)), this.parseOrders(a);\n }\n createOrderRequest(e, t, i, s, n = void 0, r = {}) {\n const a = this.market(e), o = a.contract, c = this.safeValue(r, \"trigger\"), u = this.safeValue2(r, \"triggerPrice\", \"stopPrice\"), f = this.safeValue(r, \"stopLossPrice\", u), h = this.safeValue(r, \"takeProfitPrice\"), l = f !== void 0, p = h !== void 0, m = l || p;\n if (l && p)\n throw new g(\"createOrder() stopLossPrice and takeProfitPrice cannot both be defined\").exchange(this.id);\n const y = this.safeValue(r, \"reduceOnly\"), w = this.safeStringLowerN(r, [\"timeInForce\", \"tif\", \"time_in_force\"]);\n let S;\n [S, r] = this.handlePostOnly(t === \"market\", w === \"poc\", r);\n let b = this.handleTimeInForce(r);\n S && (b = \"poc\"), r = this.omit(r, [\"stopPrice\", \"triggerPrice\", \"stopLossPrice\", \"takeProfitPrice\", \"reduceOnly\", \"timeInForce\", \"postOnly\"]);\n const T = t === \"limit\", x = t === \"market\";\n if (T && n === void 0)\n throw new g(\" createOrder () requires a price argument for \" + t + \" orders\").exchange(this.id);\n if (x) {\n if (b === \"poc\" || b === \"gtc\")\n throw new g('createOrder () timeInForce for market order can only be \"FOK\" or \"IOC\"').exchange(this.id);\n if (b === void 0) {\n const V = this.safeString(this.options, \"defaultTimeInForce\", \"IOC\");\n b = this.safeString(this.options.timeInForce, V, \"ioc\");\n }\n o && (n = 0);\n }\n if (o)\n if (this.safeValue(r, \"close\"))\n s = 0;\n else {\n const j = this.amountToPrecision(e, s), G = i === \"sell\" ? P.stringNeg(j) : j;\n s = parseInt(G);\n }\n let v;\n if (!m && c === void 0) {\n if (o)\n v = {\n contract: a.id,\n size: s\n // int64, positive = bid, negative = ask\n // 'iceberg': 0, // int64, display size for iceberg order, 0 for non-iceberg, note that you will have to pay the taker fee for the hidden size\n // 'close': false, // true to close the position, with size set to 0\n // 'reduce_only': false, // St as true to be reduce-only order\n // 'tif': 'gtc', // gtc, ioc, poc PendingOrCancelled == postOnly order\n // 'text': clientOrderId, // 't-abcdef1234567890',\n // 'auto_size': '', // close_long, close_short, note size also needs to be set to 0\n }, a.option || (v.settle = a.settleId), x ? v.price = n : v.price = this.priceToPrecision(e, n), y !== void 0 && (v.reduce_only = y), b !== void 0 && (v.tif = b);\n else {\n let G;\n if ([G, r] = this.getMarginMode(!1, r), v = {\n // 'text': clientOrderId, // 't-abcdef1234567890',\n currency_pair: a.id,\n type: t,\n account: G,\n side: i\n // 'time_in_force': 'gtc', // gtc, ioc, poc PendingOrCancelled == postOnly order\n // 'iceberg': 0, // amount to display for the iceberg order, null or 0 for normal orders, set to -1 to hide the order completely\n // 'auto_borrow': false, // used in margin or cross margin trading to allow automatic loan of insufficient amount if balance is not enough\n // 'auto_repay': false, // automatic repayment for automatic borrow loan generated by cross margin order, diabled by default\n }, x && i === \"buy\") {\n let W, B = !0;\n [B, r] = this.handleOptionAndParams(r, \"createOrder\", \"createMarketBuyOrderRequiresPrice\", !0);\n const Q = this.safeNumber(r, \"cost\");\n if (r = this.omit(r, \"cost\"), Q !== void 0)\n W = this.costToPrecision(e, Q);\n else if (B) {\n if (n === void 0)\n throw new g(\"createOrder() requires the price argument for market buy orders to calculate the total cost to spend (amount * price), alternatively set the createMarketBuyOrderRequiresPrice option or param to false and pass the cost to spend (quote quantity) in the amount argument\").exchange(this.id);\n {\n const se = this.numberToString(s), $ = this.numberToString(n), te = P.stringMul(se, $);\n W = this.costToPrecision(e, te);\n }\n } else\n W = this.costToPrecision(e, s);\n v.amount = W;\n } else\n v.amount = this.amountToPrecision(e, s);\n T && (v.price = this.priceToPrecision(e, n)), b !== void 0 && (v.time_in_force = b);\n }\n let V = this.safeString2(r, \"text\", \"clientOrderId\");\n const j = this.safeBool(r, \"textIsRequired\", !1);\n if (V !== void 0) {\n if (V.length > 28)\n throw new g(\"createOrder () clientOrderId or text param must be up to 28 characters\").exchange(this.id);\n r = this.omit(r, [\"text\", \"clientOrderId\", \"textIsRequired\"]), V[0] !== \"t\" && (V = \"t-\" + V), v.text = V;\n } else\n j && (v.text = \"t-\" + this.uuid16());\n } else {\n if (a.option)\n throw new ge(\"option\").addMessage(\"createOrder() conditional option orders are not supported\").exchange(this.id);\n if (o) {\n if (v = {\n initial: {\n contract: a.id,\n size: s,\n price: this.priceToPrecision(e, n)\n // set to 0 to use market price\n // 'close': false, // set to true if trying to close the position\n // 'tif': 'gtc', // gtc, ioc, if using market price, only ioc is supported\n // 'text': clientOrderId, // web, api, app\n // 'reduce_only': false,\n },\n settle: a.settleId\n }, c === void 0) {\n let V, j;\n l ? (V = i === \"buy\" ? 1 : 2, j = this.priceToPrecision(e, f)) : p && (V = i === \"buy\" ? 2 : 1, j = this.priceToPrecision(e, h));\n const G = this.safeInteger(r, \"price_type\", 0);\n if (G < 0 || G > 2)\n throw new g(this.id + \" createOrder () price_type should be 0 latest deal price, 1 mark price, 2 index price\").exchange(this.id);\n r = this.omit(r, [\"price_type\"]), v.trigger = {\n // 'strategy_type': 0, // 0 = by price, 1 = by price gap, only 0 is supported currently\n price_type: G,\n price: this.priceToPrecision(e, j),\n rule: V\n // 1 means price_type >= price, 2 means price_type <= price\n // 'expiration': expiration, how many seconds to wait for the condition to be triggered before cancelling the order\n };\n }\n y !== void 0 && (v.initial.reduce_only = y), b !== void 0 && (v.initial.tif = b);\n } else {\n const V = this.safeValue(this.options, \"createOrder\", {});\n let j;\n if ([j, r] = this.getMarginMode(!0, r), b === void 0 && (b = \"gtc\"), v = {\n put: {\n type: t,\n side: i,\n price: this.priceToPrecision(e, n),\n amount: this.amountToPrecision(e, s),\n account: j,\n time_in_force: b\n // gtc, ioc (ioc is for taker only, so shouldnt't be in conditional order)\n },\n market: a.id\n }, c === void 0) {\n const G = this.safeInteger(V, \"expiration\"), W = this.safeInteger(r, \"expiration\", G);\n let B, Q;\n l ? (B = i === \"buy\" ? \">=\" : \"<=\", Q = this.priceToPrecision(e, f)) : p && (B = i === \"buy\" ? \"<=\" : \">=\", Q = this.priceToPrecision(e, h)), v.trigger = {\n price: this.priceToPrecision(e, Q),\n rule: B,\n expiration: W\n // required, how long (in seconds) to wait for the condition to be triggered before cancelling the order\n };\n }\n }\n }\n return this.extend(v, r);\n }\n async createMarketBuyOrderWithCost(e, t, i = {}) {\n await this.loadMarkets();\n const s = this.market(e);\n if (!s.spot)\n throw new ge(s.type).addMessage(\"createMarketBuyOrderWithCost() supports spot orders only\").exchange(this.id);\n return i.createMarketBuyOrderRequiresPrice = !1, await this.createOrder(e, \"market\", \"buy\", t, void 0, i);\n }\n async editOrder(e, t, i, s, n = void 0, r = void 0, a = {}) {\n await this.loadMarkets();\n const o = this.market(t), [c, u] = this.handleMarketTypeAndParams(\"editOrder\", o, a), f = this.convertTypeToAccount(c);\n if (f === \"spot\" && !(i === \"limit\"))\n throw new ge(c).addMessage(\"editOrder() does not support \" + i + \" orders for \" + c + \" markets\").exchange(this.id);\n const l = {\n order_id: e,\n currency_pair: o.id,\n account: f\n };\n n !== void 0 && (l.amount = this.amountToPrecision(t, n)), r !== void 0 && (l.price = this.priceToPrecision(t, r));\n let p;\n return o.spot ? p = await this.privateSpotPatchOrdersOrderId(this.extend(l, u)) : (l.settle = o.settleId, p = await this.privateFuturesPutSettleOrdersOrderId(this.extend(l, u))), this.parseOrder(p, o);\n }\n parseOrderStatus(e) {\n const t = {\n open: \"open\",\n _new: \"open\",\n filled: \"closed\",\n cancelled: \"canceled\",\n liquidated: \"closed\",\n ioc: \"canceled\",\n failed: \"canceled\",\n expired: \"canceled\",\n finished: \"closed\",\n succeeded: \"closed\"\n };\n return this.safeString(t, e, e);\n }\n parseOrder(e, t = void 0) {\n if (!this.safeBool(e, \"succeeded\", !0))\n return this.safeOrder({\n clientOrderId: this.safeString(e, \"text\"),\n info: e,\n status: \"rejected\"\n });\n const s = this.safeValue2(e, \"put\", \"initial\", {}), n = this.safeValue(e, \"trigger\", {});\n let r = this.safeString(s, \"contract\"), a = this.safeString(s, \"type\"), o = this.safeStringUpper2(s, \"time_in_force\", \"tif\"), c = this.safeString2(s, \"amount\", \"size\"), u = this.safeString(s, \"side\"), f = this.safeString(s, \"price\");\n r = this.safeString(e, \"contract\", r), a = this.safeString(e, \"type\", a), o = this.safeStringUpper2(e, \"time_in_force\", \"tif\", o), o === \"POC\" && (o = \"PO\");\n const h = o === \"PO\";\n c = this.safeString2(e, \"amount\", \"size\", c), u = this.safeString(e, \"side\", u), f = this.safeString(e, \"price\", f);\n let l = this.safeString(e, \"left\"), p = this.safeString(e, \"filled_total\");\n const m = this.safeNumber(n, \"price\");\n let y = this.safeNumber2(e, \"avg_deal_price\", \"fill_price\");\n m && (l = c, p = \"0\"), r && (a = P.stringEquals(f, \"0\") && o === \"IOC\" ? \"market\" : \"limit\", u = P.stringGt(c, \"0\") ? \"buy\" : \"sell\");\n const w = this.safeStringN(e, [\"finish_as\", \"status\", \"open\"]);\n let S = this.safeInteger(e, \"create_time_ms\");\n S === void 0 && (S = this.safeTimestamp2(e, \"create_time\", \"ctime\"));\n let b = this.safeInteger(e, \"update_time_ms\");\n b === void 0 && (b = this.safeTimestamp2(e, \"update_time\", \"finish_time\"));\n const T = \"currency_pair\" in e ? \"spot\" : \"contract\", x = this.safeString2(e, \"currency_pair\", \"market\", r), v = this.safeSymbol(x, t, \"_\", T), _ = [], V = this.safeString(e, \"gt_fee\");\n V && _.push({\n currency: \"GT\",\n cost: V\n });\n const j = this.safeString(e, \"fee\");\n j && _.push({\n currency: this.safeCurrencyCode(this.safeString(e, \"fee_currency\")),\n cost: j\n });\n const G = this.safeString(e, \"rebated_fee\");\n G && _.push({\n currency: this.safeCurrencyCode(this.safeString(e, \"rebated_fee_currency\")),\n cost: P.stringNeg(G)\n });\n const B = _.length > 1, Q = this.parseOrderStatus(w);\n let se = P.stringAbs(l);\n if (this.safeString(e, \"account\") === \"spot\") {\n const te = this.safeString(e, \"avg_deal_price\");\n if (y = this.parseNumber(te), a === \"market\" && u === \"buy\") {\n const E = this.safeString2(e, \"filled_total\", \"amount\");\n se = P.stringDiv(l, te), f = void 0, p = E, c = P.stringDiv(E, te);\n }\n }\n return this.safeOrder({\n id: this.safeString(e, \"id\"),\n clientOrderId: this.safeString(e, \"text\"),\n timestamp: S,\n datetime: this.iso8601(S),\n lastTradeTimestamp: b,\n status: Q,\n symbol: v,\n type: a,\n timeInForce: o,\n postOnly: h,\n reduceOnly: this.safeValue(e, \"is_reduce_only\"),\n side: u,\n price: f,\n stopPrice: m,\n triggerPrice: m,\n average: y,\n amount: P.stringAbs(c),\n cost: P.stringAbs(p),\n filled: void 0,\n remaining: se,\n fee: B ? void 0 : this.safeValue(_, 0),\n fees: B ? _ : [],\n trades: void 0,\n info: e\n }, t);\n }\n async fetchOrder(e, t = void 0, i = {}) {\n await this.loadMarkets();\n const s = this.safeValue2(i, \"is_stop_order\", \"stop\", !1);\n i = this.omit(i, [\"is_stop_order\", \"stop\"]);\n let n = this.safeString2(i, \"text\", \"clientOrderId\"), r = e;\n n !== void 0 && (i = this.omit(i, [\"text\", \"clientOrderId\"]), n[0] !== \"t\" && (n = \"t-\" + n), r = n);\n const a = t === void 0 ? void 0 : this.market(t), [o, c] = this.handleMarketTypeAndParams(\"fetchOrder\", a, i), u = o === \"swap\" || o === \"future\" || o === \"option\", [f, h] = u ? this.prepareRequest(a, o, c) : this.spotOrderPrepareRequest(a, s, c);\n f.order_id = r;\n let l;\n if (o === \"spot\" || o === \"margin\")\n s ? l = await this.privateSpotGetPriceOrdersOrderId(this.extend(f, h)) : l = await this.privateSpotGetOrdersOrderId(this.extend(f, h));\n else if (o === \"swap\")\n s ? l = await this.privateFuturesGetSettlePriceOrdersOrderId(this.extend(f, h)) : l = await this.privateFuturesGetSettleOrdersOrderId(this.extend(f, h));\n else if (o === \"future\")\n s ? l = await this.privateDeliveryGetSettlePriceOrdersOrderId(this.extend(f, h)) : l = await this.privateDeliveryGetSettleOrdersOrderId(this.extend(f, h));\n else if (o === \"option\")\n l = await this.privateOptionsGetOrdersOrderId(this.extend(f, h));\n else\n throw new ge(o).exchange(this.id);\n return this.parseOrder(l, a);\n }\n async fetchOpenOrders(e = void 0, t = void 0, i = void 0, s = {}) {\n return await this.fetchOrdersByStatus(\"open\", e, t, i, s);\n }\n async fetchClosedOrders(e = void 0, t = void 0, i = void 0, s = {}) {\n return await this.fetchOrdersByStatus(\"finished\", e, t, i, s);\n }\n async fetchOrdersByStatus(e, t = void 0, i = void 0, s = void 0, n = {}) {\n await this.loadMarkets();\n let r;\n t !== void 0 && (r = this.market(t), t = r.symbol);\n const a = this.safeValue(n, \"stop\");\n n = this.omit(n, \"stop\");\n const [o, c] = this.handleMarketTypeAndParams(\"fetchOrdersByStatus\", r, n), u = o === \"spot\" || o === \"margin\", [f, h] = u ? this.multiOrderSpotPrepareRequest(r, a, c) : this.prepareRequest(r, o, c);\n e === \"closed\" && (e = \"finished\"), f.status = e, s !== void 0 && (f.limit = s), i !== void 0 && u && (f.from = this.parseToInt(i / 1e3));\n const l = u && e === \"open\" && !a;\n let p;\n if (o === \"spot\" || o === \"margin\")\n l ? p = await this.privateSpotGetOpenOrders(this.extend(f, h)) : a ? p = await this.privateSpotGetPriceOrders(this.extend(f, h)) : p = await this.privateSpotGetOrders(this.extend(f, h));\n else if (o === \"swap\")\n a ? p = await this.privateFuturesGetSettlePriceOrders(this.extend(f, h)) : p = await this.privateFuturesGetSettleOrders(this.extend(f, h));\n else if (o === \"future\")\n a ? p = await this.privateDeliveryGetSettlePriceOrders(this.extend(f, h)) : p = await this.privateDeliveryGetSettleOrders(this.extend(f, h));\n else if (o === \"option\")\n p = await this.privateOptionsGetOrders(this.extend(f, h));\n else\n throw new ge(o).exchange(this.id);\n let m = p;\n if (l) {\n m = [];\n for (let w = 0; w < p.length; w++) {\n const S = this.safeValue(p[w], \"orders\");\n m = this.arrayConcat(m, S);\n }\n }\n const y = this.parseOrders(m, r, i, s);\n return this.filterBySymbolSinceLimit(y, t, i, s);\n }\n async cancelOrder(e, t = void 0, i = {}) {\n await this.loadMarkets();\n const s = t === void 0 ? void 0 : this.market(t), n = this.safeValue2(i, \"is_stop_order\", \"stop\", !1);\n i = this.omit(i, [\"is_stop_order\", \"stop\"]);\n const [r, a] = this.handleMarketTypeAndParams(\"cancelOrder\", s, i), [o, c] = r === \"spot\" || r === \"margin\" ? this.spotOrderPrepareRequest(s, n, a) : this.prepareRequest(s, r, a);\n o.order_id = e;\n let u;\n if (r === \"spot\" || r === \"margin\")\n n ? u = await this.privateSpotDeletePriceOrdersOrderId(this.extend(o, c)) : u = await this.privateSpotDeleteOrdersOrderId(this.extend(o, c));\n else if (r === \"swap\")\n n ? u = await this.privateFuturesDeleteSettlePriceOrdersOrderId(this.extend(o, c)) : u = await this.privateFuturesDeleteSettleOrdersOrderId(this.extend(o, c));\n else if (r === \"future\")\n n ? u = await this.privateDeliveryDeleteSettlePriceOrdersOrderId(this.extend(o, c)) : u = await this.privateDeliveryDeleteSettleOrdersOrderId(this.extend(o, c));\n else if (r === \"option\")\n u = await this.privateOptionsDeleteOrdersOrderId(this.extend(o, c));\n else\n throw new ge(r).exchange(this.id);\n return this.parseOrder(u, s);\n }\n async cancelAllOrders(e = void 0, t = {}) {\n await this.loadMarkets();\n const i = e === void 0 ? void 0 : this.market(e), s = this.safeValue(t, \"stop\");\n t = this.omit(t, \"stop\");\n const [n, r] = this.handleMarketTypeAndParams(\"cancelAllOrders\", i, t), [a, o] = n === \"spot\" ? this.multiOrderSpotPrepareRequest(i, s, r) : this.prepareRequest(i, n, r);\n let c;\n if (n === \"spot\" || n === \"margin\")\n s ? c = await this.privateSpotDeletePriceOrders(this.extend(a, o)) : c = await this.privateSpotDeleteOrders(this.extend(a, o));\n else if (n === \"swap\")\n s ? c = await this.privateFuturesDeleteSettlePriceOrders(this.extend(a, o)) : c = await this.privateFuturesDeleteSettleOrders(this.extend(a, o));\n else if (n === \"future\")\n s ? c = await this.privateDeliveryDeleteSettlePriceOrders(this.extend(a, o)) : c = await this.privateDeliveryDeleteSettleOrders(this.extend(a, o));\n else if (n === \"option\")\n c = await this.privateOptionsDeleteOrders(this.extend(a, o));\n else\n throw new ge(n).exchange(this.id);\n return this.parseOrders(c, i);\n }\n // https://www.gate.io/docs/developers/apiv4/#retrieve-sub-account-balances\n async fetchSubAccountBalances(e, t = {}) {\n await this.loadMarkets();\n const i = await this.privateWalletGetSubAccountBalances({\n sub_uid: e\n }), s = {}, n = this.safeValue(i, 0), r = this.safeValue(n, \"available\", {}), a = Object.keys(r);\n for (let o = 0; o < a.length; o++) {\n const c = a[o], u = this.safeCurrencyCode(c);\n s[u] = {\n free: this.safeString(r, c),\n used: \"0\",\n total: this.safeString(r, c)\n };\n }\n return { spot: s };\n }\n // https://www.gate.io/docs/developers/apiv4/#list-sub-accounts\n async getSubAccounts() {\n return await this.loadMarkets(), (await this.privateSubAccountsGetSubAccounts()).map((t) => ({\n uid: t.user_id\n }));\n }\n // https://www.gate.io/docs/developers/apiv4/#sub-account-transfers-to-sub-account\n // https://www.gate.io/docs/developers/apiv4/#transfer-between-main-and-sub-accounts\n async subAccountTransfer(e, t, i, s, n, r, a = {}) {\n await this.loadMarkets();\n const o = this.currency(e), c = this.convertTypeToAccount(i), u = this.convertTypeToAccount(s), f = this.currencyToPrecision(e, t), h = n === \"master\" ? \"to\" : \"from\", l = {\n currency: o.id,\n amount: f,\n fromAccountType: c,\n toAccountType: u,\n direction: h\n };\n n !== \"master\" && (l.sub_account = n, l.sub_account_type = c), r !== \"master\" && (l.sub_account = r, l.sub_account_type = u), \"clientOid\" in a || (l.clientOid = this.uuid());\n const p = await this.privateWalletPostSubAccountTransfers(this.extend(l, a)), m = this.parseTransfer(p, o);\n return this.extend(m, {\n amount: f,\n fromAccount: n,\n toAccount: r\n });\n }\n async transfer(e, t, i, s, n = {}) {\n await this.loadMarkets();\n const r = this.currency(e), a = this.convertTypeToAccount(i), o = this.convertTypeToAccount(s), c = this.currencyToPrecision(e, t), u = {\n currency: r.id,\n amount: c\n };\n if (a in this.options.accountsByType ? u.from = a : (u.from = \"margin\", u.currency_pair = a), o in this.options.accountsByType ? u.to = o : (u.to = \"margin\", u.currency_pair = o), a === \"margin\" || o === \"margin\") {\n const h = this.safeString2(n, \"symbol\", \"currency_pair\");\n if (h === void 0)\n throw new g('transfer requires params[\"symbol\"] for isolated margin transfers').exchange(this.id);\n const l = this.market(h);\n u.currency_pair = l.id, n = this.omit(n, \"symbol\");\n }\n (o === \"futures\" || o === \"delivery\" || a === \"futures\" || a === \"delivery\") && (u.settle = r.id);\n const f = await this.privateWalletPostTransfers(this.extend(u, n));\n return this.parseTransfer(f, r);\n }\n parseTransfer(e, t = void 0) {\n return {\n id: this.safeString(e, \"tx_id\"),\n timestamp: void 0,\n datetime: void 0,\n currency: this.safeCurrencyCode(void 0, t),\n amount: void 0,\n fromAccount: void 0,\n toAccount: void 0,\n status: void 0,\n info: e\n };\n }\n async fetchPosition(e, t = {}) {\n await this.loadMarkets();\n const i = this.market(e);\n if (!i.contract)\n throw new ge(i.type).addMessage(\"fetchPosition() supports contract markets only\").exchange(this.id);\n let s = {};\n [s, t] = this.prepareRequest(i, i.type, t);\n const n = this.extend(s, t);\n let r;\n return i.swap ? r = await this.privateFuturesGetSettlePositionsContract(n) : i.future ? r = await this.privateDeliveryGetSettlePositionsContract(n) : i.type === \"option\" && (r = await this.privateOptionsGetPositionsContract(n)), this.parsePosition(r, i);\n }\n async fetchPositions(e = void 0, t = {}) {\n await this.loadMarkets();\n let i;\n e = this.marketSymbols(e, void 0, !0, !0, !0), e !== void 0 && e.length > 0 && (i = this.market(e[0]));\n let s, n = {};\n if ([s, t] = this.handleMarketTypeAndParams(\"fetchPositions\", i, t), (s === void 0 || s === \"spot\") && (s = \"swap\"), s === \"option\") {\n if (e !== void 0) {\n const o = i.id.split(\"-\");\n n.underlying = this.safeString(o, 0);\n }\n } else\n [n, t] = this.prepareRequest(void 0, s, t);\n let r;\n return s === \"swap\" ? r = await this.privateFuturesGetSettlePositions(this.extend(n, t)) : s === \"future\" ? r = await this.privateDeliveryGetSettlePositions(this.extend(n, t)) : s === \"option\" && (r = await this.privateOptionsGetPositions(this.extend(n, t))), this.parsePositions(r, e);\n }\n parseMarginLoan(e, t = void 0) {\n const i = this.safeString2(this.options, \"defaultMarginMode\", \"marginMode\", \"cross\");\n let s = this.safeInteger(e, \"create_time\");\n i === \"isolated\" && (s = this.safeTimestamp(e, \"create_time\"));\n const n = this.safeString(e, \"currency\"), r = this.safeString(e, \"currency_pair\");\n return {\n id: this.safeInteger(e, \"id\"),\n currency: this.safeCurrencyCode(n, t),\n amount: this.safeNumber(e, \"amount\"),\n symbol: this.safeSymbol(r, void 0, \"_\", \"margin\"),\n timestamp: s,\n datetime: this.iso8601(s),\n info: e\n };\n }\n async sign(e, t = [], i = \"GET\", s = {}, n = void 0, r = void 0) {\n const a = t[0], o = t[1];\n let c = this.omit(s, this.extractParams(e));\n if (Array.isArray(s)) {\n const l = this.safeValue(s, 0, {});\n e = this.implodeParams(e, l);\n } else\n e = this.implodeParams(e, s);\n const u = e === \"\" ? \"\" : \"/\" + e;\n let f = \"/\" + o + u;\n (o === \"subAccounts\" || o === \"withdrawals\") && (f = u);\n let h = this.urls.api[a][o];\n if (h === void 0)\n throw new be().addMessage(\"It does not have a testnet for the \" + o + \" market type.\").exchange(this.id);\n if (h += f, a === \"public\")\n Object.keys(c).length && (h += \"?\" + this.urlencode(c));\n else {\n this.checkRequiredCredentials();\n let l = \"\", p = !1;\n if ((o === \"futures\" || o === \"delivery\") && i === \"POST\") {\n const v = e.split(\"/\"), _ = this.safeString(v, 1, \"\");\n p = _.indexOf(\"dual\") >= 0 || _.indexOf(\"positions\") >= 0;\n }\n if (i === \"GET\" || i === \"DELETE\" || p || i === \"PATCH\")\n Object.keys(c).length && (l = this.urlencode(c), h += \"?\" + l), i === \"PATCH\" && (r = this.json(c));\n else {\n const v = this.safeValue(c, \"query\", {});\n Object.keys(v).length && (l = this.urlencode(v), h += \"?\" + l), c = this.omit(c, \"query\"), r = this.json(c);\n }\n const m = r === void 0 ? \"\" : r, y = this.hash(this.encode(m), Ss), w = this.nonce().toString(), S = \"/api/\" + this.version + f, T = [i.toUpperCase(), S, l, y, w].join(`\n`);\n let x;\n this.externalSigner ? x = await this.externalSigner.sign({\n payload: this.encode(T),\n publicApiKey: this.apiKey,\n exchangeId: this.id\n }) : x = this.hmac(this.encode(T), this.encode(this.secret), Ss), n = {\n KEY: this.apiKey,\n Timestamp: w,\n SIGN: x,\n \"Content-Type\": \"application/json\"\n };\n }\n return { url: h, method: i, body: r, headers: n };\n }\n async fetchLedger(e = void 0, t = void 0, i = void 0, s = {}) {\n await this.loadMarkets();\n let n = !1;\n if ([n, s] = this.handleOptionAndParams(s, \"fetchLedger\", \"paginate\"), n)\n return await this.fetchPaginatedCallDynamic(\"fetchLedger\", e, t, i, s);\n let r, a, o, c = {};\n if ([r, s] = this.handleMarketTypeAndParams(\"fetchLedger\", void 0, s), (r === \"spot\" || r === \"margin\") && e !== void 0 && (a = this.currency(e), c.currency = a.id), r === \"swap\" || r === \"future\") {\n const u = r === \"swap\" ? \"usdt\" : \"btc\", f = this.safeStringLower(s, \"settle\", u);\n s = this.omit(s, \"settle\"), c.settle = f;\n }\n return t !== void 0 && (c.from = t), i !== void 0 && (c.limit = i), [c, s] = this.handleUntilOption(\"to\", c, s), r === \"spot\" ? o = await this.privateSpotGetAccountBook(this.extend(c, s)) : r === \"margin\" ? o = await this.privateMarginGetAccountBook(this.extend(c, s)) : r === \"swap\" ? o = await this.privateFuturesGetSettleAccountBook(this.extend(c, s)) : r === \"future\" ? o = await this.privateDeliveryGetSettleAccountBook(this.extend(c, s)) : r === \"option\" && (o = await this.privateOptionsGetAccountBook(this.extend(c, s))), this.parseLedger(o, a, t, i);\n }\n parseLedgerEntry(e, t = void 0) {\n let i, s = this.safeString(e, \"change\");\n P.stringLt(s, \"0\") ? (i = \"out\", s = P.stringAbs(s)) : i = \"in\";\n const n = this.safeString(e, \"currency\"), r = this.safeString(e, \"type\"), a = this.safeString(e, \"time\");\n let o;\n a.length > 10 ? o = parseInt(a) : o = parseInt(a) * 1e3;\n const c = this.safeString(e, \"balance\"), u = this.safeString(e, \"change\"), f = this.parseNumber(P.stringSub(c, u));\n return {\n id: this.safeString(e, \"id\"),\n direction: i,\n account: void 0,\n referenceAccount: void 0,\n referenceId: void 0,\n type: this.parseLedgerEntryType(r),\n currency: this.safeCurrencyCode(n, t),\n amount: this.parseNumber(s),\n timestamp: o,\n datetime: this.iso8601(o),\n before: f,\n after: this.safeNumber(e, \"balance\"),\n status: void 0,\n fee: void 0,\n info: e\n };\n }\n parseLedgerEntryType(e) {\n const t = {\n deposit: \"deposit\",\n withdraw: \"withdrawal\",\n sub_account_transfer: \"transfer\",\n margin_in: \"transfer\",\n margin_out: \"transfer\",\n margin_funding_in: \"transfer\",\n margin_funding_out: \"transfer\",\n cross_margin_in: \"transfer\",\n cross_margin_out: \"transfer\",\n copy_trading_in: \"transfer\",\n copy_trading_out: \"transfer\",\n quant_in: \"transfer\",\n quant_out: \"transfer\",\n futures_in: \"transfer\",\n futures_out: \"transfer\",\n delivery_in: \"transfer\",\n delivery_out: \"transfer\",\n new_order: \"trade\",\n order_fill: \"trade\",\n referral_fee: \"rebate\",\n order_fee: \"fee\",\n interest: \"interest\",\n lend: \"loan\",\n redeem: \"loan\",\n profit: \"interest\",\n flash_swap_buy: \"trade\",\n flash_swap_sell: \"trade\",\n unknown: \"unknown\",\n set: \"settlement\",\n prem: \"trade\",\n point_refr: \"rebate\",\n point_fee: \"fee\",\n point_dnw: \"deposit/withdraw\",\n fund: \"fee\",\n refr: \"rebate\",\n fee: \"fee\",\n pnl: \"trade\",\n dnw: \"deposit/withdraw\"\n };\n return this.safeString(t, e, e);\n }\n handleErrors(e, t, i, s, n, r, a, o, c) {\n if (a === void 0)\n return;\n const u = this.safeString(a, \"label\");\n if (u !== void 0) {\n const f = this.safeString(a, \"message\"), h = u + \": \" + f;\n throw this.throwBroadlyMatchedException(this.exceptions.broad, h, h), this.throwExactlyMatchedException(this.exceptions.exact, u, h), new O().addMessage(h).exchange(this.id);\n }\n }\n}\nclass tw extends Eu {\n describe() {\n return this.deepExtend(super.describe(), {\n id: \"gateio\",\n alias: !0\n });\n }\n}\nlet iw = class extends gt {\n};\nclass sw extends iw {\n describe() {\n return this.deepExtend(super.describe(), {\n id: \"htx\",\n name: \"HTX\",\n countries: [\"CN\"],\n rateLimit: 100,\n userAgent: this.userAgents.chrome100,\n certified: !0,\n version: \"v1\",\n hostname: \"api.huobi.pro\",\n pro: !0,\n has: {\n CORS: void 0,\n spot: !0,\n margin: !0,\n swap: !0,\n future: !0,\n option: void 0,\n cancelAllOrders: !0,\n cancelOrder: !0,\n cancelOrders: !0,\n createDepositAddress: void 0,\n createMarketBuyOrderWithCost: !0,\n createMarketOrderWithCost: !1,\n createMarketSellOrderWithCost: !1,\n createOrder: !0,\n createOrders: !0,\n createTakeProfitOrder: !0,\n createTrailingPercentOrder: !0,\n createTriggerOrder: !0,\n fetchAccounts: !0,\n fetchBalance: !0,\n fetchCanceledOrders: void 0,\n fetchClosedOrder: void 0,\n fetchClosedOrders: !0,\n fetchCurrencies: !0,\n fetchDeposit: void 0,\n fetchDepositAddress: !0,\n fetchDepositAddresses: void 0,\n fetchDepositAddressesByNetwork: !0,\n fetchDeposits: !0,\n fetchDepositWithdrawFee: \"emulated\",\n fetchDepositWithdrawFees: !0,\n fetchLedger: !0,\n fetchLedgerEntry: void 0,\n fetchMarkets: !0,\n fetchMyTrades: !0,\n fetchOHLCV: !0,\n fetchOpenOrder: void 0,\n fetchOpenOrders: !0,\n fetchOrder: !0,\n fetchOrderBook: !0,\n fetchOrderBooks: void 0,\n fetchOrders: !0,\n fetchOrderTrades: !0,\n fetchPosition: !0,\n fetchPositions: !0,\n fetchPositionsRisk: !1,\n fetchStatus: !0,\n fetchTicker: !0,\n fetchTickers: !0,\n fetchTime: !0,\n fetchTrades: !0,\n fetchTradingFee: !0,\n fetchTradingFees: !1,\n fetchTradingLimits: !0,\n fetchTransactionFee: void 0,\n fetchTransactionFees: void 0,\n fetchTransactions: void 0,\n fetchTransfers: void 0,\n fetchWithdrawAddresses: !0,\n fetchWithdrawal: void 0,\n fetchWithdrawals: !0,\n fetchWithdrawalWhitelist: void 0,\n transfer: !0,\n withdraw: !0\n },\n timeframes: {\n \"1m\": \"1min\",\n \"5m\": \"5min\",\n \"15m\": \"15min\",\n \"30m\": \"30min\",\n \"1h\": \"60min\",\n \"4h\": \"4hour\",\n \"1d\": \"1day\",\n \"1w\": \"1week\",\n \"1M\": \"1mon\",\n \"1y\": \"1year\"\n },\n urls: {\n // 'test': {\n // 'market': 'https://api.testnet.huobi.pro',\n // 'public': 'https://api.testnet.huobi.pro',\n // 'private': 'https://api.testnet.huobi.pro',\n // },\n logo: \"https://user-images.githubusercontent.com/1294454/76137448-22748a80-604e-11ea-8069-6e389271911d.jpg\",\n hostnames: {\n contract: \"api.hbdm.com\",\n spot: \"api.huobi.pro\",\n status: {\n spot: \"status.huobigroup.com\",\n future: {\n inverse: \"status-dm.huobigroup.com\",\n linear: \"status-linear-swap.huobigroup.com\"\n // USDT-Margined Contracts\n },\n swap: {\n inverse: \"status-swap.huobigroup.com\",\n linear: \"status-linear-swap.huobigroup.com\"\n // USDT-Margined Contracts\n }\n }\n // recommended for AWS\n // 'contract': 'api.hbdm.vn',\n // 'spot': 'api-aws.huobi.pro',\n },\n api: {\n status: \"https://{hostname}\",\n contract: \"https://{hostname}\",\n spot: \"https://{hostname}\",\n public: \"https://{hostname}\",\n private: \"https://{hostname}\",\n v2Public: \"https://{hostname}\",\n v2Private: \"https://{hostname}\"\n },\n www: \"https://www.huobi.com\",\n referral: {\n // https://www.huobi.com/en-us/v/register/double-invite/?inviter_id=11343840&invite_code=6rmm2223 - I removed the code for now, because CWS is blocking until we explain our affiliate program to our users\n url: \"https://www.huobi.com/en-us/v/register\",\n discount: 0.15\n },\n doc: [\n \"https://huobiapi.github.io/docs/spot/v1/en/\",\n \"https://huobiapi.github.io/docs/dm/v1/en/\",\n \"https://huobiapi.github.io/docs/coin_margined_swap/v1/en/\",\n \"https://huobiapi.github.io/docs/usdt_swap/v1/en/\",\n \"https://www.huobi.com/en-us/opend/newApiPages/\"\n ],\n fees: \"https://www.huobi.com/about/fee/\"\n },\n api: {\n // ------------------------------------------------------------\n // old api definitions\n v2Public: {\n get: {\n \"reference/currencies\": 1,\n \"market-status\": 1\n // 获取当前市场状态\n }\n },\n v2Private: {\n get: {\n \"account/ledger\": 1,\n \"account/withdraw/quota\": 1,\n \"account/withdraw/address\": 1,\n \"account/deposit/address\": 1,\n \"account/repayment\": 5,\n \"reference/transact-fee-rate\": 1,\n \"account/asset-valuation\": 0.2,\n \"point/account\": 5,\n \"sub-user/user-list\": 1,\n \"sub-user/user-state\": 1,\n \"sub-user/account-list\": 1,\n \"sub-user/deposit-address\": 1,\n \"sub-user/query-deposit\": 1,\n \"user/api-key\": 1,\n \"user/uid\": 1,\n \"algo-orders/opening\": 1,\n \"algo-orders/history\": 1,\n \"algo-orders/specific\": 1,\n \"c2c/offers\": 1,\n \"c2c/offer\": 1,\n \"c2c/transactions\": 1,\n \"c2c/repayment\": 1,\n \"c2c/account\": 1,\n \"etp/reference\": 1,\n \"etp/transactions\": 5,\n \"etp/transaction\": 5,\n \"etp/rebalance\": 1,\n \"etp/limit\": 1\n // 获取ETP持仓限额\n },\n post: {\n \"account/transfer\": 1,\n \"account/repayment\": 5,\n \"point/transfer\": 5,\n \"sub-user/management\": 1,\n \"sub-user/creation\": 1,\n \"sub-user/tradable-market\": 1,\n \"sub-user/transferability\": 1,\n \"sub-user/api-key-generation\": 1,\n \"sub-user/api-key-modification\": 1,\n \"sub-user/api-key-deletion\": 1,\n \"sub-user/deduct-mode\": 1,\n \"algo-orders\": 1,\n \"algo-orders/cancel-all-after\": 1,\n \"algo-orders/cancellation\": 1,\n \"c2c/offer\": 1,\n \"c2c/cancellation\": 1,\n \"c2c/cancel-all\": 1,\n \"c2c/repayment\": 1,\n \"c2c/transfer\": 1,\n \"etp/creation\": 5,\n \"etp/redemption\": 5,\n \"etp/{transactId}/cancel\": 10,\n \"etp/batch-cancel\": 50\n // 杠杆ETP批量撤单\n }\n },\n public: {\n get: {\n \"common/symbols\": 1,\n \"common/currencys\": 1,\n \"common/timestamp\": 1,\n \"common/exchange\": 1,\n \"settings/currencys\": 1\n // ?language=en-US\n }\n },\n private: {\n get: {\n \"account/accounts\": 0.2,\n \"account/accounts/{id}/balance\": 0.2,\n \"account/accounts/{sub-uid}\": 1,\n \"account/history\": 4,\n \"cross-margin/loan-info\": 1,\n \"margin/loan-info\": 1,\n \"fee/fee-rate/get\": 1,\n \"order/openOrders\": 0.4,\n \"order/orders\": 0.4,\n \"order/orders/{id}\": 0.4,\n \"order/orders/{id}/matchresults\": 0.4,\n \"order/orders/getClientOrder\": 0.4,\n \"order/history\": 1,\n \"order/matchresults\": 1,\n // 'dw/withdraw-virtual/addresses', // 查询虚拟币提现地址(Deprecated)\n \"query/deposit-withdraw\": 1,\n // 'margin/loan-info', // duplicate\n \"margin/loan-orders\": 0.2,\n \"margin/accounts/balance\": 0.2,\n \"cross-margin/loan-orders\": 1,\n \"cross-margin/accounts/balance\": 1,\n \"points/actions\": 1,\n \"points/orders\": 1,\n \"subuser/aggregate-balance\": 10,\n \"stable-coin/exchange_rate\": 1,\n \"stable-coin/quote\": 1\n },\n post: {\n \"account/transfer\": 1,\n \"futures/transfer\": 1,\n \"order/batch-orders\": 0.4,\n \"order/orders/place\": 0.2,\n \"order/orders/submitCancelClientOrder\": 0.2,\n \"order/orders/batchCancelOpenOrders\": 0.4,\n // 'order/orders', // 创建一个新的订单请求 (仅创建订单,不执行下单)\n // 'order/orders/{id}/place', // 执行一个订单 (仅执行已创建的订单)\n \"order/orders/{id}/submitcancel\": 0.2,\n \"order/orders/batchcancel\": 0.4,\n // 'dw/balance/transfer', // 资产划转\n \"dw/withdraw/api/create\": 1,\n // 'dw/withdraw-virtual/create', // 申请提现虚拟币\n // 'dw/withdraw-virtual/{id}/place', // 确认申请虚拟币提现(Deprecated)\n \"dw/withdraw-virtual/{id}/cancel\": 1,\n \"dw/transfer-in/margin\": 10,\n \"dw/transfer-out/margin\": 10,\n \"margin/orders\": 10,\n \"margin/orders/{id}/repay\": 10,\n \"cross-margin/transfer-in\": 1,\n \"cross-margin/transfer-out\": 1,\n \"cross-margin/orders\": 1,\n \"cross-margin/orders/{id}/repay\": 1,\n \"stable-coin/exchange\": 1,\n \"subuser/transfer\": 10\n }\n },\n // ------------------------------------------------------------\n // new api definitions\n // 'https://status.huobigroup.com/api/v2/summary.json': 1,\n // 'https://status-dm.huobigroup.com/api/v2/summary.json': 1,\n // 'https://status-swap.huobigroup.com/api/v2/summary.json': 1,\n // 'https://status-linear-swap.huobigroup.com/api/v2/summary.json': 1,\n status: {\n public: {\n spot: {\n get: {\n \"api/v2/summary.json\": 1\n }\n },\n future: {\n inverse: {\n get: {\n \"api/v2/summary.json\": 1\n }\n },\n linear: {\n get: {\n \"api/v2/summary.json\": 1\n }\n }\n },\n swap: {\n inverse: {\n get: {\n \"api/v2/summary.json\": 1\n }\n },\n linear: {\n get: {\n \"api/v2/summary.json\": 1\n }\n }\n }\n }\n },\n spot: {\n public: {\n get: {\n \"v2/market-status\": 1,\n \"v1/common/symbols\": 1,\n \"v1/common/currencys\": 1,\n \"v2/settings/common/currencies\": 1,\n \"v2/reference/currencies\": 1,\n \"v1/common/timestamp\": 1,\n \"v1/common/exchange\": 1,\n \"v1/settings/common/chains\": 1,\n \"v1/settings/common/currencys\": 1,\n \"v1/settings/common/symbols\": 1,\n \"v2/settings/common/symbols\": 1,\n \"v1/settings/common/market-symbols\": 1,\n // Market Data\n \"market/history/candles\": 1,\n \"market/history/kline\": 1,\n \"market/detail/merged\": 1,\n \"market/tickers\": 1,\n \"market/detail\": 1,\n \"market/depth\": 1,\n \"market/trade\": 1,\n \"market/history/trade\": 1,\n \"market/etp\": 1,\n // ETP\n \"v2/etp/reference\": 1,\n \"v2/etp/rebalance\": 1\n }\n },\n private: {\n get: {\n // Account\n \"v1/account/accounts\": 0.2,\n \"v1/account/accounts/{account-id}/balance\": 0.2,\n \"v2/account/valuation\": 1,\n \"v2/account/asset-valuation\": 0.2,\n \"v1/account/history\": 4,\n \"v2/account/ledger\": 1,\n \"v2/point/account\": 5,\n // Wallet (Deposit and Withdraw)\n \"v2/account/deposit/address\": 1,\n \"v2/account/withdraw/quota\": 1,\n \"v2/account/withdraw/address\": 1,\n \"v2/reference/currencies\": 1,\n \"v1/query/deposit-withdraw\": 1,\n \"v1/query/withdraw/client-order-id\": 1,\n // Sub user management\n \"v2/user/api-key\": 1,\n \"v2/user/uid\": 1,\n \"v2/sub-user/user-list\": 1,\n \"v2/sub-user/user-state\": 1,\n \"v2/sub-user/account-list\": 1,\n \"v2/sub-user/deposit-address\": 1,\n \"v2/sub-user/query-deposit\": 1,\n \"v1/subuser/aggregate-balance\": 10,\n \"v1/account/accounts/{sub-uid}\": 1,\n // Trading\n \"v1/order/openOrders\": 0.4,\n \"v1/order/orders/{order-id}\": 0.4,\n \"v1/order/orders/getClientOrder\": 0.4,\n \"v1/order/orders/{order-id}/matchresult\": 0.4,\n \"v1/order/orders/{order-id}/matchresults\": 0.4,\n \"v1/order/orders\": 0.4,\n \"v1/order/history\": 1,\n \"v1/order/matchresults\": 1,\n \"v2/reference/transact-fee-rate\": 1,\n // Conditional Order\n \"v2/algo-orders/opening\": 1,\n \"v2/algo-orders/history\": 1,\n \"v2/algo-orders/specific\": 1,\n // Margin Loan (Cross/Isolated)\n \"v1/margin/loan-info\": 1,\n \"v1/margin/loan-orders\": 0.2,\n \"v1/margin/accounts/balance\": 0.2,\n \"v1/cross-margin/loan-info\": 1,\n \"v1/cross-margin/loan-orders\": 1,\n \"v1/cross-margin/accounts/balance\": 1,\n \"v2/account/repayment\": 5,\n // Stable Coin Exchange\n \"v1/stable-coin/quote\": 1,\n \"v1/stable_coin/exchange_rate\": 1,\n // ETP\n \"v2/etp/transactions\": 5,\n \"v2/etp/transaction\": 5,\n \"v2/etp/limit\": 1\n },\n post: {\n // Account\n \"v1/account/transfer\": 1,\n \"v1/futures/transfer\": 1,\n \"v2/point/transfer\": 5,\n \"v2/account/transfer\": 1,\n // Wallet (Deposit and Withdraw)\n \"v1/dw/withdraw/api/create\": 1,\n \"v1/dw/withdraw-virtual/{withdraw-id}/cancel\": 1,\n // Sub user management\n \"v2/sub-user/deduct-mode\": 1,\n \"v2/sub-user/creation\": 1,\n \"v2/sub-user/management\": 1,\n \"v2/sub-user/tradable-market\": 1,\n \"v2/sub-user/transferability\": 1,\n \"v2/sub-user/api-key-generation\": 1,\n \"v2/sub-user/api-key-modification\": 1,\n \"v2/sub-user/api-key-deletion\": 1,\n \"v1/subuser/transfer\": 10,\n // Trading\n \"v1/order/orders/place\": 0.2,\n \"v1/order/batch-orders\": 0.4,\n \"v1/order/auto/place\": 0.2,\n \"v1/order/orders/{order-id}/submitcancel\": 0.2,\n \"v1/order/orders/submitCancelClientOrder\": 0.2,\n \"v1/order/orders/batchCancelOpenOrders\": 0.4,\n \"v1/order/orders/batchcancel\": 0.4,\n \"v2/algo-orders/cancel-all-after\": 1,\n // Conditional Order\n \"v2/algo-orders\": 1,\n \"v2/algo-orders/cancellation\": 1,\n // Margin Loan (Cross/Isolated)\n \"v2/account/repayment\": 5,\n \"v1/dw/transfer-in/margin\": 10,\n \"v1/dw/transfer-out/margin\": 10,\n \"v1/margin/orders\": 10,\n \"v1/margin/orders/{order-id}/repay\": 10,\n \"v1/cross-margin/transfer-in\": 1,\n \"v1/cross-margin/transfer-out\": 1,\n \"v1/cross-margin/orders\": 1,\n \"v1/cross-margin/orders/{order-id}/repay\": 1,\n // Stable Coin Exchange\n \"v1/stable-coin/exchange\": 1,\n // ETP\n \"v2/etp/creation\": 5,\n \"v2/etp/redemption\": 5,\n \"v2/etp/{transactId}/cancel\": 10,\n \"v2/etp/batch-cancel\": 50\n }\n }\n },\n contract: {\n public: {\n get: {\n \"api/v1/timestamp\": 1,\n \"heartbeat/\": 1,\n // Future Market Data interface\n \"api/v1/contract_contract_info\": 1,\n \"api/v1/contract_index\": 1,\n \"api/v1/contract_query_elements\": 1,\n \"api/v1/contract_price_limit\": 1,\n \"api/v1/contract_open_interest\": 1,\n \"api/v1/contract_delivery_price\": 1,\n \"market/depth\": 1,\n \"market/bbo\": 1,\n \"market/history/kline\": 1,\n \"index/market/history/mark_price_kline\": 1,\n \"market/detail/merged\": 1,\n \"market/detail/batch_merged\": 1,\n \"v2/market/detail/batch_merged\": 1,\n \"market/trade\": 1,\n \"market/history/trade\": 1,\n \"api/v1/contract_risk_info\": 1,\n \"api/v1/contract_insurance_fund\": 1,\n \"api/v1/contract_adjustfactor\": 1,\n \"api/v1/contract_his_open_interest\": 1,\n \"api/v1/contract_ladder_margin\": 1,\n \"api/v1/contract_api_state\": 1,\n \"api/v1/contract_elite_account_ratio\": 1,\n \"api/v1/contract_elite_position_ratio\": 1,\n \"api/v1/contract_liquidation_orders\": 1,\n \"api/v1/contract_settlement_records\": 1,\n \"index/market/history/index\": 1,\n \"index/market/history/basis\": 1,\n \"api/v1/contract_estimated_settlement_price\": 1,\n \"api/v3/contract_liquidation_orders\": 1,\n // Swap Market Data interface\n \"swap-api/v1/swap_contract_info\": 1,\n \"swap-api/v1/swap_index\": 1,\n \"swap-api/v1/swap_query_elements\": 1,\n \"swap-api/v1/swap_price_limit\": 1,\n \"swap-api/v1/swap_open_interest\": 1,\n \"swap-ex/market/depth\": 1,\n \"swap-ex/market/bbo\": 1,\n \"swap-ex/market/history/kline\": 1,\n \"index/market/history/swap_mark_price_kline\": 1,\n \"swap-ex/market/detail/merged\": 1,\n \"v2/swap-ex/market/detail/batch_merged\": 1,\n \"index/market/history/swap_premium_index_kline\": 1,\n \"swap-ex/market/detail/batch_merged\": 1,\n \"swap-ex/market/trade\": 1,\n \"swap-ex/market/history/trade\": 1,\n \"swap-api/v1/swap_risk_info\": 1,\n \"swap-api/v1/swap_insurance_fund\": 1,\n \"swap-api/v1/swap_adjustfactor\": 1,\n \"swap-api/v1/swap_his_open_interest\": 1,\n \"swap-api/v1/swap_ladder_margin\": 1,\n \"swap-api/v1/swap_api_state\": 1,\n \"swap-api/v1/swap_elite_account_ratio\": 1,\n \"swap-api/v1/swap_elite_position_ratio\": 1,\n \"swap-api/v1/swap_estimated_settlement_price\": 1,\n \"swap-api/v1/swap_liquidation_orders\": 1,\n \"swap-api/v1/swap_settlement_records\": 1,\n \"swap-api/v1/swap_funding_rate\": 1,\n \"swap-api/v1/swap_batch_funding_rate\": 1,\n \"swap-api/v1/swap_historical_funding_rate\": 1,\n \"swap-api/v3/swap_liquidation_orders\": 1,\n \"index/market/history/swap_estimated_rate_kline\": 1,\n \"index/market/history/swap_basis\": 1,\n // Swap Market Data interface\n \"linear-swap-api/v1/swap_contract_info\": 1,\n \"linear-swap-api/v1/swap_index\": 1,\n \"linear-swap-api/v1/swap_query_elements\": 1,\n \"linear-swap-api/v1/swap_price_limit\": 1,\n \"linear-swap-api/v1/swap_open_interest\": 1,\n \"linear-swap-ex/market/depth\": 1,\n \"linear-swap-ex/market/bbo\": 1,\n \"linear-swap-ex/market/history/kline\": 1,\n \"index/market/history/linear_swap_mark_price_kline\": 1,\n \"linear-swap-ex/market/detail/merged\": 1,\n \"linear-swap-ex/market/detail/batch_merged\": 1,\n \"v2/linear-swap-ex/market/detail/batch_merged\": 1,\n \"linear-swap-ex/market/trade\": 1,\n \"linear-swap-ex/market/history/trade\": 1,\n \"linear-swap-api/v1/swap_risk_info\": 1,\n \"swap-api/v1/linear-swap-api/v1/swap_insurance_fund\": 1,\n \"linear-swap-api/v1/swap_adjustfactor\": 1,\n \"linear-swap-api/v1/swap_cross_adjustfactor\": 1,\n \"linear-swap-api/v1/swap_his_open_interest\": 1,\n \"linear-swap-api/v1/swap_ladder_margin\": 1,\n \"linear-swap-api/v1/swap_cross_ladder_margin\": 1,\n \"linear-swap-api/v1/swap_api_state\": 1,\n \"linear-swap-api/v1/swap_cross_transfer_state\": 1,\n \"linear-swap-api/v1/swap_cross_trade_state\": 1,\n \"linear-swap-api/v1/swap_elite_account_ratio\": 1,\n \"linear-swap-api/v1/swap_elite_position_ratio\": 1,\n \"linear-swap-api/v1/swap_liquidation_orders\": 1,\n \"linear-swap-api/v1/swap_settlement_records\": 1,\n \"linear-swap-api/v1/swap_funding_rate\": 1,\n \"linear-swap-api/v1/swap_batch_funding_rate\": 1,\n \"linear-swap-api/v1/swap_historical_funding_rate\": 1,\n \"linear-swap-api/v3/swap_liquidation_orders\": 1,\n \"index/market/history/linear_swap_premium_index_kline\": 1,\n \"index/market/history/linear_swap_estimated_rate_kline\": 1,\n \"index/market/history/linear_swap_basis\": 1,\n \"linear-swap-api/v1/swap_estimated_settlement_price\": 1\n }\n },\n private: {\n get: {\n // Future Account Interface\n \"api/v1/contract_sub_auth_list\": 1,\n \"api/v1/contract_api_trading_status\": 1,\n // Swap Account Interface\n \"swap-api/v1/swap_sub_auth_list\": 1,\n \"swap-api/v1/swap_api_trading_status\": 1,\n // Swap Account Interface\n \"linear-swap-api/v1/swap_sub_auth_list\": 1,\n \"linear-swap-api/v1/swap_api_trading_status\": 1,\n \"linear-swap-api/v1/swap_cross_position_side\": 1,\n \"linear-swap-api/v1/swap_position_side\": 1,\n \"linear-swap-api/v3/unified_account_info\": 1,\n \"linear-swap-api/v3/fix_position_margin_change_record\": 1,\n \"linear-swap-api/v3/swap_unified_account_type\": 1,\n \"linear-swap-api/v3/linear_swap_overview_account_info\": 1\n },\n post: {\n // Future Account Interface\n \"api/v1/contract_balance_valuation\": 1,\n \"api/v1/contract_account_info\": 1,\n \"api/v1/contract_position_info\": 1,\n \"api/v1/contract_sub_auth\": 1,\n \"api/v1/contract_sub_account_list\": 1,\n \"api/v1/contract_sub_account_info_list\": 1,\n \"api/v1/contract_sub_account_info\": 1,\n \"api/v1/contract_sub_position_info\": 1,\n \"api/v1/contract_financial_record\": 1,\n \"api/v1/contract_financial_record_exact\": 1,\n \"api/v1/contract_user_settlement_records\": 1,\n \"api/v1/contract_order_limit\": 1,\n \"api/v1/contract_fee\": 1,\n \"api/v1/contract_transfer_limit\": 1,\n \"api/v1/contract_position_limit\": 1,\n \"api/v1/contract_account_position_info\": 1,\n \"api/v1/contract_master_sub_transfer\": 1,\n \"api/v1/contract_master_sub_transfer_record\": 1,\n \"api/v1/contract_available_level_rate\": 1,\n \"api/v3/contract_financial_record\": 1,\n \"api/v3/contract_financial_record_exact\": 1,\n // Future Trade Interface\n \"api/v1/contract-cancel-after\": 1,\n \"api/v1/contract_order\": 1,\n \"api/v1/contract_batchorder\": 1,\n \"api/v1/contract_cancel\": 1,\n \"api/v1/contract_cancelall\": 1,\n \"api/v1/contract_switch_lever_rate\": 1,\n \"api/v1/lightning_close_position\": 1,\n \"api/v1/contract_order_info\": 1,\n \"api/v1/contract_order_detail\": 1,\n \"api/v1/contract_openorders\": 1,\n \"api/v1/contract_hisorders\": 1,\n \"api/v1/contract_hisorders_exact\": 1,\n \"api/v1/contract_matchresults\": 1,\n \"api/v1/contract_matchresults_exact\": 1,\n \"api/v3/contract_hisorders\": 1,\n \"api/v3/contract_hisorders_exact\": 1,\n \"api/v3/contract_matchresults\": 1,\n \"api/v3/contract_matchresults_exact\": 1,\n // Contract Strategy Order Interface\n \"api/v1/contract_trigger_order\": 1,\n \"api/v1/contract_trigger_cancel\": 1,\n \"api/v1/contract_trigger_cancelall\": 1,\n \"api/v1/contract_trigger_openorders\": 1,\n \"api/v1/contract_trigger_hisorders\": 1,\n \"api/v1/contract_tpsl_order\": 1,\n \"api/v1/contract_tpsl_cancel\": 1,\n \"api/v1/contract_tpsl_cancelall\": 1,\n \"api/v1/contract_tpsl_openorders\": 1,\n \"api/v1/contract_tpsl_hisorders\": 1,\n \"api/v1/contract_relation_tpsl_order\": 1,\n \"api/v1/contract_track_order\": 1,\n \"api/v1/contract_track_cancel\": 1,\n \"api/v1/contract_track_cancelall\": 1,\n \"api/v1/contract_track_openorders\": 1,\n \"api/v1/contract_track_hisorders\": 1,\n // Swap Account Interface\n \"swap-api/v1/swap_balance_valuation\": 1,\n \"swap-api/v1/swap_account_info\": 1,\n \"swap-api/v1/swap_position_info\": 1,\n \"swap-api/v1/swap_account_position_info\": 1,\n \"swap-api/v1/swap_sub_auth\": 1,\n \"swap-api/v1/swap_sub_account_list\": 1,\n \"swap-api/v1/swap_sub_account_info_list\": 1,\n \"swap-api/v1/swap_sub_account_info\": 1,\n \"swap-api/v1/swap_sub_position_info\": 1,\n \"swap-api/v1/swap_financial_record\": 1,\n \"swap-api/v1/swap_financial_record_exact\": 1,\n \"swap-api/v1/swap_user_settlement_records\": 1,\n \"swap-api/v1/swap_available_level_rate\": 1,\n \"swap-api/v1/swap_order_limit\": 1,\n \"swap-api/v1/swap_fee\": 1,\n \"swap-api/v1/swap_transfer_limit\": 1,\n \"swap-api/v1/swap_position_limit\": 1,\n \"swap-api/v1/swap_master_sub_transfer\": 1,\n \"swap-api/v1/swap_master_sub_transfer_record\": 1,\n \"swap-api/v3/swap_financial_record\": 1,\n \"swap-api/v3/swap_financial_record_exact\": 1,\n // Swap Trade Interface\n \"swap-api/v1/swap-cancel-after\": 1,\n \"swap-api/v1/swap_order\": 1,\n \"swap-api/v1/swap_batchorder\": 1,\n \"swap-api/v1/swap_cancel\": 1,\n \"swap-api/v1/swap_cancelall\": 1,\n \"swap-api/v1/swap_lightning_close_position\": 1,\n \"swap-api/v1/swap_switch_lever_rate\": 1,\n \"swap-api/v1/swap_order_info\": 1,\n \"swap-api/v1/swap_order_detail\": 1,\n \"swap-api/v1/swap_openorders\": 1,\n \"swap-api/v1/swap_hisorders\": 1,\n \"swap-api/v1/swap_hisorders_exact\": 1,\n \"swap-api/v1/swap_matchresults\": 1,\n \"swap-api/v1/swap_matchresults_exact\": 1,\n \"swap-api/v3/swap_matchresults\": 1,\n \"swap-api/v3/swap_matchresults_exact\": 1,\n \"swap-api/v3/swap_hisorders\": 1,\n \"swap-api/v3/swap_hisorders_exact\": 1,\n // Swap Strategy Order Interface\n \"swap-api/v1/swap_trigger_order\": 1,\n \"swap-api/v1/swap_trigger_cancel\": 1,\n \"swap-api/v1/swap_trigger_cancelall\": 1,\n \"swap-api/v1/swap_trigger_openorders\": 1,\n \"swap-api/v1/swap_trigger_hisorders\": 1,\n \"swap-api/v1/swap_tpsl_order\": 1,\n \"swap-api/v1/swap_tpsl_cancel\": 1,\n \"swap-api/v1/swap_tpsl_cancelall\": 1,\n \"swap-api/v1/swap_tpsl_openorders\": 1,\n \"swap-api/v1/swap_tpsl_hisorders\": 1,\n \"swap-api/v1/swap_relation_tpsl_order\": 1,\n \"swap-api/v1/swap_track_order\": 1,\n \"swap-api/v1/swap_track_cancel\": 1,\n \"swap-api/v1/swap_track_cancelall\": 1,\n \"swap-api/v1/swap_track_openorders\": 1,\n \"swap-api/v1/swap_track_hisorders\": 1,\n // Swap Account Interface\n \"linear-swap-api/v1/swap_lever_position_limit\": 1,\n \"linear-swap-api/v1/swap_cross_lever_position_limit\": 1,\n \"linear-swap-api/v1/swap_balance_valuation\": 1,\n \"linear-swap-api/v1/swap_account_info\": 1,\n \"linear-swap-api/v1/swap_cross_account_info\": 1,\n \"linear-swap-api/v1/swap_position_info\": 1,\n \"linear-swap-api/v1/swap_cross_position_info\": 1,\n \"linear-swap-api/v1/swap_account_position_info\": 1,\n \"linear-swap-api/v1/swap_cross_account_position_info\": 1,\n \"linear-swap-api/v1/swap_sub_auth\": 1,\n \"linear-swap-api/v1/swap_sub_account_list\": 1,\n \"linear-swap-api/v1/swap_cross_sub_account_list\": 1,\n \"linear-swap-api/v1/swap_sub_account_info_list\": 1,\n \"linear-swap-api/v1/swap_cross_sub_account_info_list\": 1,\n \"linear-swap-api/v1/swap_sub_account_info\": 1,\n \"linear-swap-api/v1/swap_cross_sub_account_info\": 1,\n \"linear-swap-api/v1/swap_sub_position_info\": 1,\n \"linear-swap-api/v1/swap_cross_sub_position_info\": 1,\n \"linear-swap-api/v1/swap_financial_record\": 1,\n \"linear-swap-api/v1/swap_financial_record_exact\": 1,\n \"linear-swap-api/v1/swap_user_settlement_records\": 1,\n \"linear-swap-api/v1/swap_cross_user_settlement_records\": 1,\n \"linear-swap-api/v1/swap_available_level_rate\": 1,\n \"linear-swap-api/v1/swap_cross_available_level_rate\": 1,\n \"linear-swap-api/v1/swap_order_limit\": 1,\n \"linear-swap-api/v1/swap_fee\": 1,\n \"linear-swap-api/v1/swap_transfer_limit\": 1,\n \"linear-swap-api/v1/swap_cross_transfer_limit\": 1,\n \"linear-swap-api/v1/swap_position_limit\": 1,\n \"linear-swap-api/v1/swap_cross_position_limit\": 1,\n \"linear-swap-api/v1/swap_master_sub_transfer\": 1,\n \"linear-swap-api/v1/swap_master_sub_transfer_record\": 1,\n \"linear-swap-api/v1/swap_transfer_inner\": 1,\n \"linear-swap-api/v3/swap_financial_record\": 1,\n \"linear-swap-api/v3/swap_financial_record_exact\": 1,\n // Swap Trade Interface\n \"linear-swap-api/v1/swap_order\": 1,\n \"linear-swap-api/v1/swap_cross_order\": 1,\n \"linear-swap-api/v1/swap_batchorder\": 1,\n \"linear-swap-api/v1/swap_cross_batchorder\": 1,\n \"linear-swap-api/v1/swap_cancel\": 1,\n \"linear-swap-api/v1/swap_cross_cancel\": 1,\n \"linear-swap-api/v1/swap_cancelall\": 1,\n \"linear-swap-api/v1/swap_cross_cancelall\": 1,\n \"linear-swap-api/v1/swap_switch_lever_rate\": 1,\n \"linear-swap-api/v1/swap_cross_switch_lever_rate\": 1,\n \"linear-swap-api/v1/swap_lightning_close_position\": 1,\n \"linear-swap-api/v1/swap_cross_lightning_close_position\": 1,\n \"linear-swap-api/v1/swap_order_info\": 1,\n \"linear-swap-api/v1/swap_cross_order_info\": 1,\n \"linear-swap-api/v1/swap_order_detail\": 1,\n \"linear-swap-api/v1/swap_cross_order_detail\": 1,\n \"linear-swap-api/v1/swap_openorders\": 1,\n \"linear-swap-api/v1/swap_cross_openorders\": 1,\n \"linear-swap-api/v1/swap_hisorders\": 1,\n \"linear-swap-api/v1/swap_cross_hisorders\": 1,\n \"linear-swap-api/v1/swap_hisorders_exact\": 1,\n \"linear-swap-api/v1/swap_cross_hisorders_exact\": 1,\n \"linear-swap-api/v1/swap_matchresults\": 1,\n \"linear-swap-api/v1/swap_cross_matchresults\": 1,\n \"linear-swap-api/v1/swap_matchresults_exact\": 1,\n \"linear-swap-api/v1/swap_cross_matchresults_exact\": 1,\n \"linear-swap-api/v1/linear-cancel-after\": 1,\n \"linear-swap-api/v1/swap_switch_position_mode\": 1,\n \"linear-swap-api/v1/swap_cross_switch_position_mode\": 1,\n \"linear-swap-api/v3/swap_matchresults\": 1,\n \"linear-swap-api/v3/swap_cross_matchresults\": 1,\n \"linear-swap-api/v3/swap_matchresults_exact\": 1,\n \"linear-swap-api/v3/swap_cross_matchresults_exact\": 1,\n \"linear-swap-api/v3/swap_hisorders\": 1,\n \"linear-swap-api/v3/swap_cross_hisorders\": 1,\n \"linear-swap-api/v3/swap_hisorders_exact\": 1,\n \"linear-swap-api/v3/swap_cross_hisorders_exact\": 1,\n \"linear-swap-api/v3/fix_position_margin_change\": 1,\n \"linear-swap-api/v3/swap_switch_account_type\": 1,\n \"linear-swap-api/v3/linear_swap_fee_switch\": 1,\n // Swap Strategy Order Interface\n \"linear-swap-api/v1/swap_trigger_order\": 1,\n \"linear-swap-api/v1/swap_cross_trigger_order\": 1,\n \"linear-swap-api/v1/swap_trigger_cancel\": 1,\n \"linear-swap-api/v1/swap_cross_trigger_cancel\": 1,\n \"linear-swap-api/v1/swap_trigger_cancelall\": 1,\n \"linear-swap-api/v1/swap_cross_trigger_cancelall\": 1,\n \"linear-swap-api/v1/swap_trigger_openorders\": 1,\n \"linear-swap-api/v1/swap_cross_trigger_openorders\": 1,\n \"linear-swap-api/v1/swap_trigger_hisorders\": 1,\n \"linear-swap-api/v1/swap_cross_trigger_hisorders\": 1,\n \"linear-swap-api/v1/swap_tpsl_order\": 1,\n \"linear-swap-api/v1/swap_cross_tpsl_order\": 1,\n \"linear-swap-api/v1/swap_tpsl_cancel\": 1,\n \"linear-swap-api/v1/swap_cross_tpsl_cancel\": 1,\n \"linear-swap-api/v1/swap_tpsl_cancelall\": 1,\n \"linear-swap-api/v1/swap_cross_tpsl_cancelall\": 1,\n \"linear-swap-api/v1/swap_tpsl_openorders\": 1,\n \"linear-swap-api/v1/swap_cross_tpsl_openorders\": 1,\n \"linear-swap-api/v1/swap_tpsl_hisorders\": 1,\n \"linear-swap-api/v1/swap_cross_tpsl_hisorders\": 1,\n \"linear-swap-api/v1/swap_relation_tpsl_order\": 1,\n \"linear-swap-api/v1/swap_cross_relation_tpsl_order\": 1,\n \"linear-swap-api/v1/swap_track_order\": 1,\n \"linear-swap-api/v1/swap_cross_track_order\": 1,\n \"linear-swap-api/v1/swap_track_cancel\": 1,\n \"linear-swap-api/v1/swap_cross_track_cancel\": 1,\n \"linear-swap-api/v1/swap_track_cancelall\": 1,\n \"linear-swap-api/v1/swap_cross_track_cancelall\": 1,\n \"linear-swap-api/v1/swap_track_openorders\": 1,\n \"linear-swap-api/v1/swap_cross_track_openorders\": 1,\n \"linear-swap-api/v1/swap_track_hisorders\": 1,\n \"linear-swap-api/v1/swap_cross_track_hisorders\": 1\n }\n }\n }\n },\n fees: {\n trading: {\n feeSide: \"get\",\n tierBased: !1,\n percentage: !0,\n maker: this.parseNumber(\"0.002\"),\n taker: this.parseNumber(\"0.002\")\n }\n },\n exceptions: {\n broad: {\n \"contract is restricted of closing positions on API. Please contact customer service\": dt,\n maintain: dt,\n \"API key has no permission\": ee\n // {\"status\":\"error\",\"err-code\":\"api-signature-not-valid\",\"err-msg\":\"Signature not valid: API key has no permission [API Key没有权限]\",\"data\":null}\n },\n exact: {\n // err-code\n 403: Pt,\n 1010: O,\n 1003: Z,\n 1013: k,\n 1017: Se,\n 1034: g,\n 1036: g,\n 1039: g,\n 1041: g,\n 1047: re,\n 1048: re,\n 1051: k,\n 1066: g,\n 1067: g,\n 1094: g,\n 1220: ee,\n 1303: je,\n 1461: k,\n 4007: O,\n \"bad-request\": O,\n \"validation-format-error\": g,\n \"validation-constraints-required\": g,\n \"base-date-limit-error\": g,\n \"api-not-support-temp-addr\": et,\n timeout: Nt,\n \"gateway-internal-error\": Te,\n \"account-frozen-balance-insufficient-error\": re,\n \"invalid-amount\": g,\n \"order-limitorder-amount-min-error\": g,\n \"order-limitorder-amount-max-error\": g,\n \"order-marketorder-amount-min-error\": g,\n \"order-limitorder-price-min-error\": g,\n \"order-limitorder-price-max-error\": g,\n \"order-stop-order-hit-trigger\": k,\n \"order-value-min-error\": g,\n \"order-invalid-price\": g,\n \"order-holding-limit-failed\": k,\n \"order-orderprice-precision-error\": g,\n \"order-etp-nav-price-max-error\": g,\n \"order-orderstate-error\": Se,\n \"order-queryorder-invalid\": Se,\n \"order-update-error\": Te,\n \"api-signature-check-failed\": Z,\n \"api-signature-not-valid\": Pt,\n \"base-record-invalid\": Se,\n \"base-symbol-trade-disabled\": k,\n \"base-symbol-error\": k,\n \"system-maintenance\": dt,\n \"base-request-exceed-frequency-limit\": Ae,\n // err-msg\n \"invalid symbol\": g,\n \"symbol trade not open now\": it,\n \"require-symbol\": g,\n \"invalid-address\": et,\n \"base-currency-chain-error\": O,\n \"dw-insufficient-balance\": re,\n \"base-withdraw-fee-error\": ke,\n \"dw-withdraw-min-limit\": Xt,\n \"request limit\": Ae\n // {\"ts\":1687004814731,\"status\":\"error\",\"err-code\":\"invalid-parameter\",\"err-msg\":\"request limit\"}\n },\n messages: {\n \"market order trading volume can not be less than\": ye.ORDER_UNDER_MINIMUM,\n \"Order total cannot be lower than\": ye.ORDER_UNDER_MINIMUM\n }\n },\n precisionMode: ct,\n options: {\n timeDifference: 0,\n fetchMarkets: {\n types: {\n spot: !0,\n future: {\n linear: !0,\n inverse: !0\n },\n swap: {\n linear: !0,\n inverse: !0\n }\n }\n },\n withdraw: {\n includeFee: !1\n },\n defaultType: \"spot\",\n defaultSubType: \"linear\",\n defaultNetwork: \"ERC20\",\n defaultNetworks: {\n ETH: \"ERC20\",\n BTC: \"BTC\",\n USDT: \"TRC20\"\n },\n networks: {\n // by displaynames\n TRC20: \"TRX\",\n BTC: \"BTC\",\n ERC20: \"ETH\",\n SOL: \"SOLANA\",\n HRC20: \"HECO\",\n BEP20: \"BSC\",\n XMR: \"XMR\",\n LTC: \"LTC\",\n XRP: \"XRP\",\n XLM: \"XLM\",\n CRONOS: \"CRO\",\n CRO: \"CRO\",\n GLMR: \"GLMR\",\n POLYGON: \"MATIC\",\n MATIC: \"MATIC\",\n BTT: \"BTT\",\n CUBE: \"CUBE\",\n IOST: \"IOST\",\n NEO: \"NEO\",\n KLAY: \"KLAY\",\n EOS: \"EOS\",\n THETA: \"THETA\",\n NAS: \"NAS\",\n NULS: \"NULS\",\n QTUM: \"QTUM\",\n FTM: \"FTM\",\n CELO: \"CELO\",\n DOGE: \"DOGE\",\n DOGECHAIN: \"DOGECHAIN\",\n NEAR: \"NEAR\",\n STEP: \"STEP\",\n BITCI: \"BITCI\",\n CARDANO: \"ADA\",\n ADA: \"ADA\",\n ETC: \"ETC\",\n LUK: \"LUK\",\n MINEPLEX: \"MINEPLEX\",\n DASH: \"DASH\",\n ZEC: \"ZEC\",\n IOTA: \"IOTA\",\n NEON3: \"NEON3\",\n XEM: \"XEM\",\n HC: \"HC\",\n LSK: \"LSK\",\n DCR: \"DCR\",\n BTG: \"BTG\",\n STEEM: \"STEEM\",\n BTS: \"BTS\",\n ICX: \"ICX\",\n WAVES: \"WAVES\",\n CMT: \"CMT\",\n BTM: \"BTM\",\n VET: \"VET\",\n XZC: \"XZC\",\n ACT: \"ACT\",\n SMT: \"SMT\",\n BCD: \"BCD\",\n WAX: \"WAX1\",\n WICC: \"WICC\",\n ELF: \"ELF\",\n ZIL: \"ZIL\",\n ELA: \"ELA\",\n BCX: \"BCX\",\n SBTC: \"SBTC\",\n BIFI: \"BIFI\",\n CTXC: \"CTXC\",\n WAN: \"WAN\",\n POLYX: \"POLYX\",\n PAI: \"PAI\",\n WTC: \"WTC\",\n DGB: \"DGB\",\n XVG: \"XVG\",\n AAC: \"AAC\",\n AE: \"AE\",\n SEELE: \"SEELE\",\n BCV: \"BCV\",\n GRS: \"GRS\",\n ARDR: \"ARDR\",\n NANO: \"NANO\",\n ZEN: \"ZEN\",\n RBTC: \"RBTC\",\n BSV: \"BSV\",\n GAS: \"GAS\",\n XTZ: \"XTZ\",\n LAMB: \"LAMB\",\n CVNT1: \"CVNT1\",\n DOCK: \"DOCK\",\n SC: \"SC\",\n KMD: \"KMD\",\n ETN: \"ETN\",\n TOP: \"TOP\",\n IRIS: \"IRIS\",\n UGAS: \"UGAS\",\n TT: \"TT\",\n NEWTON: \"NEWTON\",\n VSYS: \"VSYS\",\n FSN: \"FSN\",\n BHD: \"BHD\",\n ONE: \"ONE\",\n EM: \"EM\",\n CKB: \"CKB\",\n EOSS: \"EOSS\",\n HIVE: \"HIVE\",\n RVN: \"RVN\",\n DOT: \"DOT\",\n KSM: \"KSM\",\n BAND: \"BAND\",\n OEP4: \"OEP4\",\n NBS: \"NBS\",\n FIS: \"FIS\",\n AR: \"AR\",\n HBAR: \"HBAR\",\n FIL: \"FIL\",\n MASS: \"MASS\",\n KAVA: \"KAVA\",\n XYM: \"XYM\",\n ENJ: \"ENJ\",\n CRUST: \"CRUST\",\n ICP: \"ICP\",\n CSPR: \"CSPR\",\n FLOW: \"FLOW\",\n IOTX: \"IOTX\",\n LAT: \"LAT\",\n APT: \"APT\",\n XCH: \"XCH\",\n MINA: \"MINA\",\n XEC: \"ECASH\",\n XPRT: \"XPRT\",\n CCA: \"ACA\",\n AOTI: \"COTI\",\n AKT: \"AKT\",\n ARS: \"ARS\",\n ASTR: \"ASTR\",\n AZERO: \"AZERO\",\n BLD: \"BLD\",\n BRISE: \"BRISE\",\n CORE: \"CORE\",\n DESO: \"DESO\",\n DFI: \"DFI\",\n EGLD: \"EGLD\",\n ERG: \"ERG\",\n ETHF: \"ETHFAIR\",\n ETHW: \"ETHW\",\n EVMOS: \"EVMOS\",\n FIO: \"FIO\",\n FLR: \"FLR\",\n FINSCHIA: \"FINSCHIA\",\n KMA: \"KMA\",\n KYVE: \"KYVE\",\n MEV: \"MEV\",\n MOVR: \"MOVR\",\n NODL: \"NODL\",\n OAS: \"OAS\",\n OSMO: \"OSMO\",\n PAYCOIN: \"PAYCOIN\",\n POKT: \"POKT\",\n PYG: \"PYG\",\n REI: \"REI\",\n SCRT: \"SCRT\",\n SDN: \"SDN\",\n SEI: \"SEI\",\n SGB: \"SGB\",\n SUI: \"SUI\",\n SXP: \"SOLAR\",\n SYS: \"SYS\",\n TENET: \"TENET\",\n TON: \"TON\",\n UNQ: \"UNQ\",\n UYU: \"UYU\",\n WEMIX: \"WEMIX\",\n XDC: \"XDC\",\n XPLA: \"XPLA\"\n // todo: below\n // 'LUNC': 'LUNC',\n // 'TERRA': 'TERRA', // tbd\n // 'LUNA': 'LUNA', tbd\n // 'FCT2': 'FCT2',\n // FIL-0X ?\n // 'COSMOS': 'ATOM1',\n // 'ATOM': 'ATOM1',\n // 'CRO': 'CRO',\n // 'OP': [ 'OPTIMISM', 'OPTIMISMETH' ]\n // 'ARB': ['ARB', 'ARBITRUMETH']\n // 'CHZ': [ 'CHZ', 'CZH' ],\n // todo: AVAXCCHAIN CCHAIN AVAX\n // 'ALGO': ['ALGO', 'ALGOUSDT']\n // 'ONT': [ 'ONT', 'ONTOLOGY' ],\n // 'BCC': 'BCC', BCH's somewhat chain\n // 'DBC1': 'DBC1',\n },\n // https://github.com/ccxt/ccxt/issues/5376\n fetchOrdersByStatesMethod: \"spot_private_get_v1_order_orders\",\n createMarketBuyOrderRequiresPrice: !0,\n language: \"en-US\",\n broker: {\n id: \"AA03022abc\"\n },\n accountsByType: {\n spot: \"pro\",\n funding: \"pro\",\n future: \"futures\"\n },\n accountsById: {\n spot: \"spot\",\n margin: \"margin\",\n otc: \"otc\",\n point: \"point\",\n \"super-margin\": \"super-margin\",\n investment: \"investment\",\n borrow: \"borrow\",\n \"grid-trading\": \"grid-trading\",\n \"deposit-earning\": \"deposit-earning\",\n \"otc-options\": \"otc-options\"\n },\n typesByAccount: {\n pro: \"spot\",\n futures: \"future\"\n },\n spot: {\n stopOrderTypes: {\n \"stop-limit\": !0,\n \"buy-stop-limit\": !0,\n \"sell-stop-limit\": !0,\n \"stop-limit-fok\": !0,\n \"buy-stop-limit-fok\": !0,\n \"sell-stop-limit-fok\": !0\n },\n limitOrderTypes: {\n limit: !0,\n \"buy-limit\": !0,\n \"sell-limit\": !0,\n ioc: !0,\n \"buy-ioc\": !0,\n \"sell-ioc\": !0,\n \"limit-maker\": !0,\n \"buy-limit-maker\": !0,\n \"sell-limit-maker\": !0,\n \"stop-limit\": !0,\n \"buy-stop-limit\": !0,\n \"sell-stop-limit\": !0,\n \"limit-fok\": !0,\n \"buy-limit-fok\": !0,\n \"sell-limit-fok\": !0,\n \"stop-limit-fok\": !0,\n \"buy-stop-limit-fok\": !0,\n \"sell-stop-limit-fok\": !0\n }\n }\n }\n });\n }\n isUsingForcedProxy(e = {}, t = []) {\n const i = Array.isArray(t) ? t[1] : t;\n return i === \"private\" || i === \"v2Private\";\n }\n nonce() {\n return this.milliseconds() - this.options.timeDifference;\n }\n async fetchStatus(e = {}) {\n await this.loadMarkets();\n let t;\n [t, e] = this.handleMarketTypeAndParams(\"fetchMyTrades\", void 0, e);\n let i;\n if (t !== \"spot\") {\n const a = this.safeString(e, \"subType\", this.options.defaultSubType);\n t === \"swap\" ? a === \"linear\" ? i = await this.statusPublicSwapLinearGetApiV2SummaryJson() : a === \"inverse\" && (i = await this.statusPublicSwapInverseGetApiV2SummaryJson()) : t === \"future\" ? a === \"linear\" ? i = await this.statusPublicFutureLinearGetApiV2SummaryJson() : a === \"inverse\" && (i = await this.statusPublicFutureInverseGetApiV2SummaryJson()) : t === \"contract\" && (i = await this.contractPublicGetHeartbeat());\n } else\n i = await this.statusPublicSpotGetApiV2SummaryJson();\n let s, n, r;\n if (t === \"contract\")\n s = this.safeString(i, \"status\") === \"ok\" ? \"ok\" : \"maintenance\", n = this.safeString(i, \"ts\");\n else {\n const a = this.safeValue(i, \"status\", {});\n s = this.safeString(a, \"indicator\") === \"none\" ? \"ok\" : \"maintenance\";\n const c = this.safeValue(i, \"page\", {}), u = this.safeString(c, \"updated_at\");\n n = this.parse8601(u), r = this.safeString(c, \"url\");\n }\n return {\n status: s,\n updated: n,\n eta: void 0,\n url: r,\n info: i\n };\n }\n async fetchTime(e = {}) {\n const t = this.safeValue(this.options, \"fetchTime\", {}), i = this.safeString(this.options, \"defaultType\", \"spot\");\n let s = this.safeString(t, \"type\", i);\n s = this.safeString(e, \"type\", s);\n let n;\n return s === \"future\" || s === \"swap\" ? n = await this.contractPublicGetApiV1Timestamp(e) : n = await this.spotPublicGetV1CommonTimestamp(e), this.safeInteger2(n, \"data\", \"ts\");\n }\n parseTradingFee(e, t = void 0) {\n const i = this.safeString(e, \"symbol\");\n return {\n info: e,\n symbol: this.safeSymbol(i, t),\n maker: this.safeNumber(e, \"actualMakerRate\"),\n taker: this.safeNumber(e, \"actualTakerRate\")\n };\n }\n async fetchTradingFee(e, t = {}) {\n await this.loadMarkets();\n const i = this.market(e), s = {\n symbols: i.id\n // trading symbols comma-separated\n }, n = await this.spotPrivateGetV2ReferenceTransactFeeRate(this.extend(s, t)), r = this.safeValue(n, \"data\", []), a = this.safeValue(r, 0, {});\n return this.parseTradingFee(a, i);\n }\n async fetchTradingLimits(e = void 0, t = {}) {\n await this.loadMarkets(), e === void 0 && (e = this.symbols);\n const i = {};\n for (let s = 0; s < e.length; s++) {\n const n = e[s];\n i[n] = await this.fetchTradingLimitsById(this.marketId(n), t);\n }\n return i;\n }\n async fetchTradingLimitsById(e, t = {}) {\n const i = {\n symbol: e\n }, s = await this.spotPublicGetV1CommonExchange(this.extend(i, t));\n return this.parseTradingLimits(this.safeValue(s, \"data\", {}));\n }\n parseTradingLimits(e, t = void 0, i = {}) {\n return {\n info: e,\n limits: {\n amount: {\n min: this.safeNumber(e, \"limit-order-must-greater-than\"),\n max: this.safeNumber(e, \"limit-order-must-less-than\")\n }\n }\n };\n }\n costToPrecision(e, t) {\n return this.decimalToPrecision(t, Et, this.markets[e].precision.cost, this.precisionMode);\n }\n async fetchMarkets(e = {}) {\n const t = this.safeValue(this.options, \"fetchMarkets\", {}), i = this.safeValue(t, \"types\", {});\n let s = [], n = [];\n const r = Object.keys(i);\n for (let a = 0; a < r.length; a++) {\n const o = r[a], c = this.safeValue(i, o);\n if (c === !0)\n n.push(this.fetchMarketsByTypeAndSubType(o, void 0, e));\n else if (c) {\n const u = Object.keys(c);\n for (let f = 0; f < u.length; f++) {\n const h = u[f];\n this.safeValue(c, h) && n.push(this.fetchMarketsByTypeAndSubType(o, h, e));\n }\n }\n }\n n = await Promise.all(n);\n for (let a = 0; a < n.length; a++)\n s = this.arrayConcat(s, n[a]);\n return s;\n }\n async fetchMarketsByTypeAndSubType(e, t, i = {}) {\n const s = this.omit(i, [\"type\", \"subType\"]), n = e === \"spot\", r = e !== \"spot\", a = e === \"future\", o = e === \"swap\";\n let c, u;\n const f = {};\n let h;\n r ? (c = t === \"linear\", u = t === \"inverse\", c ? (a && (f.business_type = \"futures\"), h = await this.contractPublicGetLinearSwapApiV1SwapContractInfo(this.extend(f, s))) : u && (a ? h = await this.contractPublicGetApiV1ContractContractInfo(this.extend(f, s)) : o && (h = await this.contractPublicGetSwapApiV1SwapContractInfo(this.extend(f, s))))) : h = await this.spotPublicGetV1CommonSymbols(this.extend(f, s));\n const l = this.safeValue(h, \"data\", []);\n if (l.length < 1)\n throw new pt().addMessage(\"fetchMarkets() returned an empty response: \" + this.json(l)).exchange(this.id);\n const m = [];\n for (let y = 0; y < l.length; y++) {\n const w = l[y];\n let S, b, T, x, v;\n if (r) {\n if (x = this.safeString(w, \"contract_code\"), v = x.toLowerCase(), o) {\n const A = x.split(\"-\");\n S = this.safeStringLower(w, \"symbol\"), b = this.safeStringLower(A, 1), T = u ? S : b;\n } else if (a)\n if (S = this.safeStringLower(w, \"symbol\"), u)\n b = \"USD\", T = S;\n else {\n const M = this.safeString(w, \"pair\").split(\"-\");\n b = this.safeStringLower(M, 1), T = b;\n }\n } else\n S = this.safeString(w, \"base-currency\"), b = this.safeString(w, \"quote-currency\"), x = S + b, v = x.toLowerCase();\n const _ = this.safeCurrencyCode(S), V = this.safeCurrencyCode(b), j = this.safeCurrencyCode(T);\n let G = _ + \"/\" + V, W;\n r && (u ? G += \":\" + _ : c && (G += \":\" + V), a && (W = this.safeInteger(w, \"delivery_time\"), G += \"-\" + this.yymmdd(W)));\n const B = this.safeNumber(w, \"contract_size\");\n let Q = this.safeNumber(w, \"min-order-value\");\n const se = this.safeNumber(w, \"max-order-amt\");\n let $ = this.safeNumber(w, \"min-order-amt\");\n r && (c ? $ = B : u && (Q = B));\n let te, E, N, L, z, K;\n n ? (te = this.parseNumber(this.parsePrecision(this.safeString(w, \"price-precision\"))), E = this.parseNumber(this.parsePrecision(this.safeString(w, \"amount-precision\"))), N = this.parseNumber(this.parsePrecision(this.safeString(w, \"value-precision\"))), L = this.parseNumber(\"0.002\"), z = this.parseNumber(\"0.002\"), K = this.safeString(w, \"state\") === \"online\") : (te = this.safeNumber(w, \"price_tick\"), E = this.parseNumber(\"1\"), L = this.parseNumber(\"0.0002\"), z = this.parseNumber(\"0.0005\"), K = this.safeInteger(w, \"contract_status\") === 1);\n const R = this.safeString(w, \"leverage-ratio\", \"1\"), U = this.safeString(w, \"super-margin-leverage-ratio\", \"1\"), Y = P.stringGt(R, \"1\") || P.stringGt(U, \"1\");\n let J, ae = this.safeString(w, \"create_date\");\n if (ae !== void 0) {\n const A = this.stringToCharsArray(ae);\n ae = A[0] + A[1] + A[2] + A[3] + \"-\" + A[4] + A[5] + \"-\" + A[6] + A[7] + \" 00:00:00\", J = this.parse8601(ae);\n }\n m.push({\n id: x,\n lowercaseId: v,\n symbol: G,\n base: _,\n quote: V,\n settle: j,\n baseId: S,\n quoteId: b,\n settleId: T,\n type: e,\n spot: n,\n margin: n && Y,\n swap: o,\n future: a,\n option: !1,\n active: K,\n contract: r,\n linear: c,\n inverse: u,\n taker: z,\n maker: L,\n contractSize: B,\n expiry: W,\n expiryDatetime: this.iso8601(W),\n strike: void 0,\n optionType: void 0,\n precision: {\n amount: E,\n price: te,\n cost: N\n },\n limits: {\n leverage: {\n min: this.parseNumber(\"1\"),\n max: this.parseNumber(R),\n superMax: this.parseNumber(U)\n },\n amount: {\n min: $,\n max: se\n },\n price: {\n min: void 0,\n max: void 0\n },\n cost: {\n min: Q,\n max: void 0\n }\n },\n created: J,\n info: w\n });\n }\n return m;\n }\n parseTicker(e, t = void 0) {\n const i = this.safeString2(e, \"symbol\", \"contract_code\"), s = this.safeSymbol(i, t), n = this.safeInteger2(e, \"ts\", \"quoteTime\");\n let r, a, o, c;\n \"bid\" in e && (Array.isArray(e.bid) ? (r = this.safeString(e.bid, 0), a = this.safeString(e.bid, 1)) : (r = this.safeString(e, \"bid\"), a = this.safeString(e, \"bidSize\"))), \"ask\" in e && (Array.isArray(e.ask) ? (o = this.safeString(e.ask, 0), c = this.safeString(e.ask, 1)) : (o = this.safeString(e, \"ask\"), c = this.safeString(e, \"askSize\")));\n const u = this.safeString(e, \"open\"), f = this.safeString(e, \"close\"), h = this.safeString(e, \"amount\"), l = this.safeString(e, \"vol\");\n return this.safeTicker({\n symbol: s,\n timestamp: n,\n datetime: this.iso8601(n),\n high: this.safeString(e, \"high\"),\n low: this.safeString(e, \"low\"),\n bid: r,\n bidVolume: a,\n ask: o,\n askVolume: c,\n vwap: void 0,\n open: u,\n close: f,\n last: f,\n previousClose: void 0,\n change: void 0,\n percentage: void 0,\n average: void 0,\n baseVolume: h,\n quoteVolume: l,\n info: e\n }, t);\n }\n async fetchTicker(e, t = {}) {\n await this.loadMarkets();\n const i = this.market(e), s = {};\n let n;\n i.linear ? (s.contract_code = i.id, n = await this.contractPublicGetLinearSwapExMarketDetailMerged(this.extend(s, t))) : i.inverse ? i.future ? (s.symbol = i.id, n = await this.contractPublicGetMarketDetailMerged(this.extend(s, t))) : i.swap && (s.contract_code = i.id, n = await this.contractPublicGetSwapExMarketDetailMerged(this.extend(s, t))) : (s.symbol = i.id, n = await this.spotPublicGetMarketDetailMerged(this.extend(s, t)));\n const r = this.safeValue(n, \"tick\", {}), a = this.parseTicker(r, i), o = this.safeInteger(n, \"ts\");\n return a.timestamp = o, a.datetime = this.iso8601(o), a;\n }\n async fetchTickers(e = void 0, t = {}) {\n await this.loadMarkets(), e = this.marketSymbols(e);\n const i = this.safeString(e, 0);\n let s;\n i !== void 0 && (s = this.market(i));\n let n, r;\n [n, t] = this.handleMarketTypeAndParams(\"fetchTickers\", s, t), [r, t] = this.handleSubTypeAndParams(\"fetchTickers\", s, t);\n const a = {}, o = n === \"future\", c = n === \"swap\", u = r === \"linear\", f = r === \"inverse\";\n t = this.omit(t, [\"type\", \"subType\"]);\n let h;\n o || c ? u ? (o && (a.business_type = \"futures\"), h = await this.contractPublicGetLinearSwapExMarketDetailBatchMerged(this.extend(a, t))) : f && (o ? h = await this.contractPublicGetMarketDetailBatchMerged(this.extend(a, t)) : c && (h = await this.contractPublicGetSwapExMarketDetailBatchMerged(this.extend(a, t)))) : h = await this.spotPublicGetMarketTickers(this.extend(a, t));\n const l = this.safeValue2(h, \"data\", \"ticks\", []), p = this.safeInteger(h, \"ts\"), m = {};\n for (let y = 0; y < l.length; y++) {\n const w = this.parseTicker(l[y]);\n if (o && u)\n for (let b = 0; b < this.symbols.length; b++) {\n const T = this.symbols[b], x = this.market(T), v = this.safeString(x.info, \"contract_type\");\n if (v === \"this_week\" && w.symbol === x.baseId + \"-\" + x.quoteId + \"-CW\") {\n w.symbol = x.symbol;\n break;\n } else if (v === \"next_week\" && w.symbol === x.baseId + \"-\" + x.quoteId + \"-NW\") {\n w.symbol = x.symbol;\n break;\n } else if (v === \"this_quarter\" && w.symbol === x.baseId + \"-\" + x.quoteId + \"-CQ\") {\n w.symbol = x.symbol;\n break;\n } else if (v === \"next_quarter\" && w.symbol === x.baseId + \"-\" + x.quoteId + \"-NQ\") {\n w.symbol = x.symbol;\n break;\n }\n }\n const S = w.symbol;\n w.timestamp = p, w.datetime = this.iso8601(p), m[S] = w;\n }\n return this.filterByArrayTickers(m, \"symbol\", e);\n }\n async fetchOrderBook(e, t = void 0, i = {}) {\n await this.loadMarkets();\n const s = this.market(e), n = {\n //\n // from the API docs\n //\n // to get depth data within step 150, use step0, step1, step2, step3, step4, step5, step14, step15(merged depth data 0-5,14-15, when step is 0,depth data will not be merged\n // to get depth data within step 20, use step6, step7, step8, step9, step10, step11, step12, step13(merged depth data 7-13), when step is 6, depth data will not be merged\n //\n type: \"step0\"\n // 'symbol': market['id'], // spot, future\n // 'contract_code': market['id'], // swap\n };\n let r;\n if (s.linear)\n n.contract_code = s.id, r = await this.contractPublicGetLinearSwapExMarketDepth(this.extend(n, i));\n else if (s.inverse)\n s.future ? (n.symbol = s.id, r = await this.contractPublicGetMarketDepth(this.extend(n, i))) : s.swap && (n.contract_code = s.id, r = await this.contractPublicGetSwapExMarketDepth(this.extend(n, i)));\n else {\n if (t !== void 0) {\n if (t !== 5 && t !== 10 && t !== 20 && t !== 150)\n throw new g(\"fetchOrderBook() limit argument must be undefined, 5, 10, 20, or 150, default is 150\").exchange(this.id);\n t !== 150 && (n.depth = t);\n }\n n.symbol = s.id, r = await this.spotPublicGetMarketDepth(this.extend(n, i));\n }\n if (\"tick\" in r) {\n if (!r.tick)\n throw new k().addMessage(\"fetchOrderBook() returned empty response: \" + this.json(r)).exchange(this.id);\n const a = this.safeValue(r, \"tick\"), o = this.safeInteger(a, \"ts\", this.safeInteger(r, \"ts\")), c = this.parseOrderBook(a, e, o);\n return c.nonce = this.safeInteger(a, \"version\"), c;\n }\n throw new O().addMessage(\"fetchOrderBook() returned unrecognized response: \" + this.json(r)).exchange(this.id);\n }\n parseTrade(e, t = void 0) {\n const i = this.safeString2(e, \"contract_code\", \"symbol\");\n t = this.safeMarket(i, t);\n const s = t.symbol;\n let n = this.safeInteger2(e, \"ts\", \"created-at\");\n n = this.safeInteger2(e, \"created_at\", \"create_date\", n);\n const r = this.safeString2(e, \"order-id\", \"order_id\");\n let a = this.safeString(e, \"direction\"), o = this.safeString(e, \"type\");\n if (o !== void 0) {\n const b = o.split(\"-\");\n a = b[0], o = b[1];\n }\n const c = this.safeStringLower(e, \"role\"), u = this.safeString2(e, \"price\", \"trade_price\");\n let f = this.safeString2(e, \"filled-amount\", \"amount\");\n f = this.safeString(e, \"trade_volume\", f);\n const h = this.safeString(e, \"trade_turnover\");\n let l, p = this.safeString2(e, \"filled-fees\", \"trade_fee\");\n const m = this.safeString2(e, \"fee-currency\", \"fee_asset\");\n let y = this.safeCurrencyCode(m);\n const w = this.safeString(e, \"filled-points\");\n if (w !== void 0 && (p === void 0 || P.stringEquals(p, \"0\"))) {\n const b = this.safeString(e, \"fee-deduct-currency\");\n b !== void 0 && (p = w, y = this.safeCurrencyCode(b));\n }\n p !== void 0 && (l = {\n cost: p,\n currency: y\n });\n const S = this.safeStringN(e, [\"trade_id\", \"trade-id\", \"id\"]);\n return this.safeTrade({\n id: S,\n info: e,\n order: r,\n timestamp: n,\n datetime: this.iso8601(n),\n symbol: s,\n type: o,\n side: a,\n takerOrMaker: c,\n price: u,\n amount: f,\n cost: h,\n fee: l\n }, t);\n }\n async fetchOrderTrades(e, t = void 0, i = void 0, s = void 0, n = {}) {\n let r;\n t !== void 0 && (r = this.market(t));\n let a;\n if ([a, n] = this.handleMarketTypeAndParams(\"fetchOrderTrades\", r, n), a !== \"spot\")\n throw new ge(a).addMessage(\"fetchOrderTrades() is only supported for spot markets\").exchange(this.id);\n return await this.fetchSpotOrderTrades(e, t, i, s, n);\n }\n async fetchSpotOrderTrades(e, t = void 0, i = void 0, s = void 0, n = {}) {\n await this.loadMarkets();\n const r = {\n \"order-id\": e\n }, a = await this.spotPrivateGetV1OrderOrdersOrderIdMatchresults(this.extend(r, n));\n return this.parseTrades(a.data, void 0, i, s);\n }\n async fetchMyTrades(e = void 0, t = void 0, i = void 0, s = {}) {\n await this.loadMarkets();\n let n = !1;\n if ([n, s] = this.handleOptionAndParams(s, \"fetchMyTrades\", \"paginate\"), n)\n return await this.fetchPaginatedCallDynamic(\"fetchMyTrades\", e, t, i, s);\n let r;\n e !== void 0 && (r = this.market(e));\n let a;\n [a, s] = this.handleMarketTypeAndParams(\"fetchMyTrades\", r, s);\n let o = {\n // spot -----------------------------------------------------------\n // 'symbol': market['id'],\n // 'types': 'buy-market,sell-market,buy-limit,sell-limit,buy-ioc,sell-ioc,buy-limit-maker,sell-limit-maker,buy-stop-limit,sell-stop-limit',\n // 'start-time': since, // max 48 hours within 120 days\n // 'end-time': this.milliseconds (), // max 48 hours within 120 days\n // 'from': 'id', // tring false N/A Search internal id to begin with if search next page, then this should be the last id (not trade-id) of last page; if search previous page, then this should be the first id (not trade-id) of last page\n // 'direct': 'next', // next, prev\n // 'size': limit, // default 100, max 500 The number of orders to return [1-500]\n // contracts ------------------------------------------------------\n // 'symbol': market['settleId'], // required\n // 'trade_type': 0, // required, 0 all, 1 open long, 2 open short, 3 close short, 4 close long, 5 liquidate long positions, 6 liquidate short positions\n // 'contract_code': market['id'],\n // 'start_time': since, // max 48 hours within 120 days\n // 'end_time': this.milliseconds (), // max 48 hours within 120 days\n // 'from_id': 'id', // tring false N/A Search internal id to begin with if search next page, then this should be the last id (not trade-id) of last page; if search previous page, then this should be the first id (not trade-id) of last page\n // 'direct': 'prev', // next, prev\n // 'size': limit, // default 20, max 50\n }, c;\n if (a === \"spot\")\n e !== void 0 && (r = this.market(e), o.symbol = r.id), i !== void 0 && (o.size = i), t !== void 0 && (o[\"start-time\"] = t), [o, s] = this.handleUntilOption(\"end-time\", o, s), c = await this.spotPrivateGetV1OrderMatchresults(this.extend(o, s));\n else {\n if (e === void 0)\n throw new g(\"fetchMyTrades() requires a symbol argument\").exchange(this.id);\n if (o.contract = r.id, o.trade_type = 0, t !== void 0 && (o.start_time = t), [o, s] = this.handleUntilOption(\"end_time\", o, s), i !== void 0 && (o.page_size = i), r.linear) {\n let f;\n [f, s] = this.handleMarginModeAndParams(\"fetchMyTrades\", s), f = f === void 0 ? \"cross\" : f, f === \"isolated\" ? c = await this.contractPrivatePostLinearSwapApiV3SwapMatchresultsExact(this.extend(o, s)) : f === \"cross\" && (c = await this.contractPrivatePostLinearSwapApiV3SwapCrossMatchresultsExact(this.extend(o, s)));\n } else if (r.inverse)\n if (a === \"future\")\n o.symbol = r.settleId, c = await this.contractPrivatePostApiV3ContractMatchresultsExact(this.extend(o, s));\n else if (a === \"swap\")\n c = await this.contractPrivatePostSwapApiV3SwapMatchresultsExact(this.extend(o, s));\n else\n throw new ge(a).exchange(this.id);\n }\n let u = this.safeValue(c, \"data\");\n return Array.isArray(u) || (u = this.safeValue(u, \"trades\")), this.parseTrades(u, r, t, i);\n }\n async fetchTrades(e, t = void 0, i = 1e3, s = {}) {\n await this.loadMarkets();\n const n = this.market(e), r = {\n // 'symbol': market['id'], // spot, future\n // 'contract_code': market['id'], // swap\n };\n i !== void 0 && (r.size = Math.min(i, 2e3));\n let a;\n n.future ? n.inverse ? (r.symbol = n.id, a = await this.contractPublicGetMarketHistoryTrade(this.extend(r, s))) : n.linear && (r.contract_code = n.id, a = await this.contractPublicGetLinearSwapExMarketHistoryTrade(this.extend(r, s))) : n.swap ? (r.contract_code = n.id, n.inverse ? a = await this.contractPublicGetSwapExMarketHistoryTrade(this.extend(r, s)) : n.linear && (a = await this.contractPublicGetLinearSwapExMarketHistoryTrade(this.extend(r, s)))) : (r.symbol = n.id, a = await this.spotPublicGetMarketHistoryTrade(this.extend(r, s)));\n const o = this.safeValue(a, \"data\", []);\n let c = [];\n for (let u = 0; u < o.length; u++) {\n const f = this.safeValue(o[u], \"data\", []);\n for (let h = 0; h < f.length; h++) {\n const l = this.parseTrade(f[h], n);\n c.push(l);\n }\n }\n return c = this.sortBy(c, \"timestamp\"), this.filterBySymbolSinceLimit(c, n.symbol, t, i);\n }\n parseOHLCV(e, t = void 0) {\n return [\n this.safeTimestamp(e, \"id\"),\n this.safeNumber(e, \"open\"),\n this.safeNumber(e, \"high\"),\n this.safeNumber(e, \"low\"),\n this.safeNumber(e, \"close\"),\n this.safeNumber(e, \"amount\")\n ];\n }\n async fetchOHLCV(e, t = \"1m\", i = void 0, s = void 0, n = {}) {\n await this.loadMarkets();\n let r = !1;\n if ([r, n] = this.handleOptionAndParams(n, \"fetchOHLCV\", \"paginate\"), r)\n return await this.fetchPaginatedCallDeterministic(\"fetchOHLCV\", e, i, s, t, n, 1e3);\n const a = this.market(e), o = {\n period: this.safeString(this.timeframes, t, t)\n // 'symbol': market['id'], // spot, future\n // 'contract_code': market['id'], // swap\n // 'size': 1000, // max 1000 for spot, 2000 for contracts\n // 'from': parseInt ((since / 1000).toString ()), spot only\n // 'to': this.seconds (), spot only\n }, c = this.safeString(n, \"price\");\n if (n = this.omit(n, \"price\"), a.contract && (s !== void 0 ? o.size = s : s = 2e3, c === void 0)) {\n const h = this.parseTimeframe(t);\n if (i === void 0) {\n const l = this.seconds();\n o.from = l - h * (s - 1), o.to = l;\n } else {\n const l = this.parseToInt(i / 1e3);\n o.from = l, o.to = this.sum(l, h * (s - 1));\n }\n }\n let u;\n if (a.future) {\n if (a.inverse)\n if (o.symbol = a.id, c === \"mark\")\n u = await this.contractPublicGetIndexMarketHistoryMarkPriceKline(this.extend(o, n));\n else if (c === \"index\")\n u = await this.contractPublicGetIndexMarketHistoryIndex(this.extend(o, n));\n else {\n if (c === \"premiumIndex\")\n throw new O().addMessage(a.type + \" has no api endpoint for \" + c + \" kline data\").exchange(this.id);\n u = await this.contractPublicGetMarketHistoryKline(this.extend(o, n));\n }\n else if (a.linear)\n if (o.contract_code = a.id, c === \"mark\")\n u = await this.contractPublicGetIndexMarketHistoryLinearSwapMarkPriceKline(this.extend(o, n));\n else {\n if (c === \"index\")\n throw new O().addMessage(a.type + \" has no api endpoint for \" + c + \" kline data\").exchange(this.id);\n c === \"premiumIndex\" ? u = await this.contractPublicGetIndexMarketHistoryLinearSwapPremiumIndexKline(this.extend(o, n)) : u = await this.contractPublicGetLinearSwapExMarketHistoryKline(this.extend(o, n));\n }\n } else if (a.swap) {\n if (o.contract_code = a.id, a.inverse)\n if (c === \"mark\")\n u = await this.contractPublicGetIndexMarketHistorySwapMarkPriceKline(this.extend(o, n));\n else {\n if (c === \"index\")\n throw new O().addMessage(a.type + \" has no api endpoint for \" + c + \" kline data\").exchange(this.id);\n c === \"premiumIndex\" ? u = await this.contractPublicGetIndexMarketHistorySwapPremiumIndexKline(this.extend(o, n)) : u = await this.contractPublicGetSwapExMarketHistoryKline(this.extend(o, n));\n }\n else if (a.linear)\n if (c === \"mark\")\n u = await this.contractPublicGetIndexMarketHistoryLinearSwapMarkPriceKline(this.extend(o, n));\n else {\n if (c === \"index\")\n throw new O().addMessage(a.type + \" has no api endpoint for \" + c + \" kline data\").exchange(this.id);\n c === \"premiumIndex\" ? u = await this.contractPublicGetIndexMarketHistoryLinearSwapPremiumIndexKline(this.extend(o, n)) : u = await this.contractPublicGetLinearSwapExMarketHistoryKline(this.extend(o, n));\n }\n } else\n i !== void 0 && (o.from = this.parseToInt(i / 1e3)), s !== void 0 && (o.size = s), o.symbol = a.id, t === \"1M\" || t === \"1y\" ? u = await this.spotPublicGetMarketHistoryKline(this.extend(o, n)) : u = await this.spotPublicGetMarketHistoryCandles(this.extend(o, n));\n const f = this.safeValue(u, \"data\", []);\n return this.parseOHLCVs(f, a, t, i, s);\n }\n async fetchAccounts(e = {}) {\n await this.loadMarkets();\n const t = await this.spotPrivateGetV1AccountAccounts(e), i = this.safeValue(t, \"data\");\n return this.parseAccounts(i);\n }\n parseAccount(e) {\n const t = this.safeString(e, \"type\"), i = this.safeValue(this.options, \"accountsById\", {}), s = this.safeValue(i, t, t);\n return {\n info: e,\n id: this.safeString(e, \"id\"),\n type: s,\n code: void 0\n };\n }\n async fetchAccountIdByType(e, t = void 0, i = void 0, s = {}) {\n const n = await this.loadAccounts(), r = this.safeValue2(s, \"accountId\", \"account-id\");\n if (r !== void 0)\n return r;\n e === \"spot\" && (t === \"cross\" ? e = \"super-margin\" : t === \"isolated\" && (e = \"margin\"));\n const a = i === void 0 ? void 0 : this.marketId(i);\n for (let c = 0; c < n.length; c++) {\n const u = n[c], f = this.safeValue(u, \"info\"), h = this.safeString(f, \"subtype\", void 0), l = this.safeString(u, \"type\");\n if (e === \"margin\") {\n if (h === a)\n return this.safeString(u, \"id\");\n } else if (e === l)\n return this.safeString(u, \"id\");\n }\n const o = this.safeValue(n, 0, {});\n return this.safeString(o, \"id\");\n }\n async generateMethodsMapping(e) {\n const t = e.data.map((s) => s.currency), i = {};\n return this.cedeMapping.forEach((s) => {\n const n = s.ecid.toLowerCase();\n i[n] = n, t.forEach((r) => {\n const a = n + r.toLowerCase(), o = r.toLowerCase() + n;\n i[a] = n, i[o] = n;\n });\n }), i;\n }\n safeNetwork(e) {\n const t = {\n hbtc: \"erc20\",\n ht2: \"erc20\",\n hbch: \"erc20\",\n eth: \"erc20\",\n ETH: \"erc20\",\n rain: \"erc20\",\n xfi: \"erc20\",\n arbieth: \"arb\",\n gas1: \"neo1\",\n avax: \"arc20\",\n atm: \"chz20\",\n babydoge: \"bep20\",\n bscface1: \"bep20\",\n mbl: \"ont\",\n wld: \"opt\",\n aury: \"sol\",\n bonk: \"sol\",\n wlkn: \"sol\",\n dio: \"sol\",\n elu: \"sol\",\n gari: \"sol\",\n gmt: \"sol\",\n hbb: \"sol\",\n sao: \"sol\",\n like: \"sol\",\n mlpx: \"sol\",\n zbc: \"sol\",\n sns: \"sol\",\n dav: \"arb\",\n ARBITRUM: \"arb\",\n ARBITRUMONE: \"arb\",\n SOLANA: \"sol\",\n \"C-CHAIN\": \"cchain\",\n BTT: \"btt2\",\n gns: \"arb\",\n ipv: \"klay\",\n joy: \"klay\",\n mbx: \"klay\",\n npt: \"klay\",\n we: \"klay\",\n well: \"glmr\",\n wmt: \"ada\",\n roco: \"cchain\",\n fio: \"cchain\",\n hec: \"cchain\",\n gmx: \"cchain\",\n xeta: \"cchain\",\n kube: \"ADA\",\n nt: \"erc20\",\n solo: \"xrp\",\n tao: \"near\",\n uft: \"erc20\"\n };\n return this.safeString(t, e, e);\n }\n async fetchCurrencies(e = {}) {\n const t = await this.spotPublicGetV2ReferenceCurrencies(e), i = await this.generateMethodsMapping(t), s = this.safeValue(t, \"data\", []), n = {};\n this.options.networkNamesByChainIds = {}, this.options.ecidByChainIds = {}, this.options.chainIdbyEcids = {};\n for (let r = 0; r < s.length; r++) {\n const a = s[r], o = this.safeString(a, \"currency\"), c = this.safeCurrencyCode(o);\n this.options.chainIdbyEcids[c] = {};\n const u = this.safeValue(a, \"chains\", []), f = {}, l = this.safeString(a, \"instStatus\") === \"normal\";\n let p, m, y, w = !1, S = !1;\n for (let b = 0; b < u.length; b++) {\n const T = u[b], x = this.safeString(T, \"chain\"), v = this.safeString2(T, \"baseChain\", \"displayName\");\n m = this.safeNumber(T, \"minWithdrawAmt\"), y = this.safeNumber(T, \"maxWithdrawAmt\");\n const _ = this.safeString(T, \"withdrawStatus\"), V = this.safeString(T, \"depositStatus\"), j = _ === \"allowed\", G = V === \"allowed\";\n S = j || S, w = G || w;\n const W = j && G, B = this.parsePrecision(this.safeString(T, \"withdrawPrecision\"));\n B !== void 0 && (p = p === void 0 ? B : P.stringMin(B, p));\n const Q = this.safeNumber(T, \"transactFeeWithdraw\"), se = this.safeNetwork(v), $ = this.safeNetwork(x), te = i[se.toLowerCase()] || i[$.toLowerCase()];\n this.options.ecidByChainIds[x] = te, this.options.chainIdbyEcids[c][te] = x, f[se] = {\n info: T,\n id: x,\n network: te,\n limits: {\n deposit: {\n min: void 0,\n max: void 0\n },\n withdraw: {\n min: m,\n max: y\n }\n },\n active: W,\n deposit: G,\n withdraw: j,\n fee: Q,\n precision: this.parseNumber(B)\n };\n }\n n[c] = {\n info: a,\n code: c,\n id: o,\n active: l,\n deposit: w,\n withdraw: S,\n fee: void 0,\n name: void 0,\n limits: {\n amount: {\n min: void 0,\n max: void 0\n },\n withdraw: {\n min: m,\n max: y\n },\n deposit: {\n min: void 0,\n max: void 0\n }\n },\n precision: this.parseNumber(p),\n networks: f\n };\n }\n return await Promise.all([\n this.cache.set({\n key: fd(this.id),\n data: this.options.ecidByChainIds,\n clone: !1,\n ttl: null\n }),\n this.cache.set({\n key: ud(this.id),\n data: this.options.chainIdbyEcids,\n clone: !1,\n ttl: null\n })\n ]), n;\n }\n networkIdToEcid(e) {\n if (Object.keys(this.options.ecidByChainIds).length === 0)\n throw new bs().addMessage(\"networkIdToEcid() - markets need to be loaded at first\").exchange(this.id);\n return this.safeValue(this.options.ecidByChainIds, e, e);\n }\n ecidToNetworkId(e, t = void 0) {\n if (Object.keys(this.options.chainIdbyEcids).length === 0)\n throw new bs().addMessage(\"ecidToNetworkId() - markets need to be loaded at first\").exchange(this.id);\n const n = this.safeValue(this.options.chainIdbyEcids, t, {});\n return this.safeValue(n, e, e);\n }\n async fetchBalance(e = {}) {\n await this.loadMarkets();\n let t;\n [t, e] = this.handleMarketTypeAndParams(\"fetchBalance\", void 0, e);\n const i = this.safeValue(this.options, \"fetchBalance\", {}), s = this.safeValue2(e, \"isUnifiedAccount\", \"unified\", !1);\n e = this.omit(e, [\"isUnifiedAccount\", \"unified\"]);\n const n = {}, r = t === \"spot\", a = t === \"future\", o = this.safeString2(this.options, \"defaultSubType\", \"subType\", \"linear\");\n let c = this.safeString2(i, \"defaultSubType\", \"subType\", o);\n c = this.safeString2(e, \"defaultSubType\", \"subType\", c);\n const u = c === \"inverse\", f = c === \"linear\";\n let h;\n [h, e] = this.handleMarginModeAndParams(\"fetchBalance\", e), e = this.omit(e, [\"defaultSubType\", \"subType\"]);\n const l = h === \"isolated\", m = t === \"margin\" || r && (h === \"cross\" || l);\n let y;\n if (r || m)\n if (m)\n l ? y = await this.spotPrivateGetV1MarginAccountsBalance(this.extend(n, e)) : y = await this.spotPrivateGetV1CrossMarginAccountsBalance(this.extend(n, e));\n else {\n const b = this.safeString(e, \"methodCallId\");\n await this.loadAccounts(!!b, { methodCallId: b });\n const T = await this.fetchAccountIdByType(t, void 0, void 0, e);\n n[\"account-id\"] = T, y = await this.spotPrivateGetV1AccountAccountsAccountIdBalance(this.extend(n, e));\n }\n else\n s ? y = await this.contractPrivateGetLinearSwapApiV3UnifiedAccountInfo(this.extend(n, e)) : f ? l ? y = await this.contractPrivatePostLinearSwapApiV1SwapAccountInfo(this.extend(n, e)) : y = await this.contractPrivatePostLinearSwapApiV1SwapCrossAccountInfo(this.extend(n, e)) : u && (a ? y = await this.contractPrivatePostApiV1ContractAccountInfo(this.extend(n, e)) : y = await this.contractPrivatePostSwapApiV1SwapAccountInfo(this.extend(n, e)));\n let w = { info: y };\n const S = this.safeValue(y, \"data\");\n if (r || m)\n if (l)\n for (let b = 0; b < S.length; b++) {\n const T = S[b], x = this.safeSymbol(this.safeString(T, \"symbol\")), v = this.safeValue(T, \"list\"), _ = {};\n for (let V = 0; V < v.length; V++) {\n const j = v[V], G = this.safeString(j, \"currency\"), W = this.safeCurrencyCode(G);\n _[W] = this.parseMarginBalanceHelper(j, W, _);\n }\n w[x] = this.safeBalance(_);\n }\n else {\n const b = this.safeValue(S, \"list\", []);\n for (let T = 0; T < b.length; T++) {\n const x = b[T], v = this.safeString(x, \"currency\"), _ = this.safeCurrencyCode(v);\n w[_] = this.parseMarginBalanceHelper(x, _, w);\n }\n w = this.safeBalance(w);\n }\n else if (s)\n for (let b = 0; b < S.length; b++) {\n const T = S[b], x = this.safeString(T, \"margin_asset\"), v = this.safeCurrencyCode(x);\n if (l) {\n const _ = this.safeValue(T, \"isolated_swap\", {});\n for (let V = 0; V < _.length; V++) {\n const j = _[V], G = this.safeString(j, \"contract_code\"), W = {\n code: v,\n free: this.safeNumber(j, \"margin_available\")\n }, B = this.safeSymbol(G);\n w[B] = W, w = this.safeBalance(w);\n }\n } else {\n const _ = this.account();\n _.free = this.safeString(T, \"margin_static\"), _.used = this.safeString(T, \"margin_frozen\"), w[v] = _, w = this.safeBalance(w);\n }\n }\n else if (f)\n if (l)\n for (let b = 0; b < S.length; b++) {\n const T = S[b], x = this.safeString2(T, \"contract_code\", \"margin_account\"), v = this.safeMarket(x), _ = this.safeString(T, \"margin_asset\"), V = this.safeCurrency(_), j = this.safeString(v, \"settle\", V.code);\n if (j !== void 0) {\n const G = this.account();\n G.free = this.safeString(T, \"margin_balance\"), G.used = this.safeString(T, \"margin_frozen\");\n const W = {};\n W[j] = G;\n const B = v.symbol;\n w[B] = this.safeBalance(W);\n }\n }\n else {\n for (let b = 0; b < S.length; b++) {\n const T = S[b], x = this.account();\n x.free = this.safeString(T, \"withdraw_available\"), x.total = this.safeString(T, \"margin_balance\");\n const v = this.safeString2(T, \"margin_asset\", \"symbol\"), _ = this.safeCurrencyCode(v);\n w[_] = x;\n }\n w = this.safeBalance(w);\n }\n else if (u) {\n for (let b = 0; b < S.length; b++) {\n const T = S[b], x = this.safeString(T, \"symbol\"), v = this.safeCurrencyCode(x), _ = this.account();\n _.free = this.safeString(T, \"margin_available\"), _.used = this.safeString(T, \"margin_frozen\"), w[v] = _;\n }\n w = this.safeBalance(w);\n }\n return w;\n }\n async fetchOrder(e, t = void 0, i = {}) {\n await this.loadMarkets();\n let s;\n t !== void 0 && (s = this.market(t));\n let n;\n [n, i] = this.handleMarketTypeAndParams(\"fetchOrder\", s, i);\n const r = {\n // spot -----------------------------------------------------------\n // 'order-id': 'id',\n // 'symbol': market['id'],\n // 'client-order-id': clientOrderId,\n // 'clientOrderId': clientOrderId,\n // contracts ------------------------------------------------------\n // 'order_id': id,\n // 'client_order_id': clientOrderId,\n // 'contract_code': market['id'],\n // 'pair': 'BTC-USDT',\n // 'contract_type': 'this_week', // swap, this_week, next_week, quarter, next_ quarter\n };\n let a;\n if (n === \"spot\")\n this.safeString(i, \"clientOrderId\") !== void 0 ? a = await this.spotPrivateGetV1OrderOrdersGetClientOrder(this.extend(r, i)) : (r[\"order-id\"] = e, a = await this.spotPrivateGetV1OrderOrdersOrderId(this.extend(r, i)));\n else {\n if (t === void 0)\n throw new g(\"fetchOrder() requires a symbol argument\").exchange(this.id);\n const c = this.safeString2(i, \"client_order_id\", \"clientOrderId\");\n if (c === void 0 ? r.order_id = e : (r.client_order_id = c, i = this.omit(i, [\"client_order_id\", \"clientOrderId\"])), r.contract_code = s.id, s.linear) {\n let u;\n [u, i] = this.handleMarginModeAndParams(\"fetchOrder\", i), u = u === void 0 ? \"cross\" : u, u === \"isolated\" ? a = await this.contractPrivatePostLinearSwapApiV1SwapOrderInfo(this.extend(r, i)) : u === \"cross\" && (a = await this.contractPrivatePostLinearSwapApiV1SwapCrossOrderInfo(this.extend(r, i)));\n } else if (s.inverse)\n if (n === \"future\")\n r.symbol = s.settleId, a = await this.contractPrivatePostApiV1ContractOrderInfo(this.extend(r, i));\n else if (n === \"swap\")\n a = await this.contractPrivatePostSwapApiV1SwapOrderInfo(this.extend(r, i));\n else\n throw new ge(n).exchange(this.id);\n }\n let o = this.safeValue(a, \"data\");\n return Array.isArray(o) && (o = this.safeValue(o, 0)), this.parseOrder(o);\n }\n parseMarginBalanceHelper(e, t, i) {\n let s;\n return t in i ? s = i[t] : s = this.account(), e.type === \"trade\" && (s.free = this.safeString(e, \"balance\")), e.type === \"frozen\" && (s.used = this.safeString(e, \"balance\")), s;\n }\n async fetchSpotOrdersByStates(e, t = void 0, i = void 0, s = void 0, n = {}) {\n const r = this.safeString(this.options, \"fetchOrdersByStatesMethod\", \"spot_private_get_v1_order_orders\");\n if (r === \"spot_private_get_v1_order_orders\" && t === void 0)\n throw new g(\"fetchOrders() requires a symbol argument\").exchange(this.id);\n await this.loadMarkets();\n let a, o = {\n // spot_private_get_v1_order_orders GET /v1/order/orders ----------\n // 'symbol': market['id'], // required\n // 'types': 'buy-market,sell-market,buy-limit,sell-limit,buy-ioc,sell-ioc,buy-stop-limit,sell-stop-limit,buy-limit-fok,sell-limit-fok,buy-stop-limit-fok,sell-stop-limit-fok',\n // 'start-time': since, // max window of 48h within a range of 180 days, within past 2 hours for cancelled orders\n // 'end-time': this.milliseconds (),\n states: e\n // filled, partial-canceled, canceled\n // 'from': order['id'],\n // 'direct': 'next', // next, prev, used with from\n // 'size': 100, // max 100\n // spot_private_get_v1_order_history GET /v1/order/history --------\n // 'symbol': market['id'], // optional\n // 'start-time': since, // max window of 48h within a range of 180 days, within past 2 hours for cancelled orders\n // 'end-time': this.milliseconds (),\n // 'direct': 'next', // next, prev, used with from\n // 'size': 100, // max 100\n };\n t !== void 0 && (a = this.market(t), o.symbol = a.id), i !== void 0 && (o[\"start-time\"] = i, o[\"end-time\"] = this.sum(i, 48 * 60 * 60 * 1e3)), [o, n] = this.handleUntilOption(\"end-time\", o, n), s !== void 0 && (o.size = s);\n let c;\n r === \"spot_private_get_v1_order_orders\" ? c = await this.spotPrivateGetV1OrderOrders(this.extend(o, n)) : c = await this.spotPrivateGetV1OrderHistory(this.extend(o, n));\n const u = this.safeValue(c, \"data\", []);\n return this.parseOrders(u, a, i, s);\n }\n async fetchSpotOrders(e = void 0, t = void 0, i = void 0, s = {}) {\n return await this.fetchSpotOrdersByStates(\"pre-submitted,submitted,partial-filled,filled,partial-canceled,canceled\", e, t, i, s);\n }\n async fetchClosedSpotOrders(e = void 0, t = void 0, i = void 0, s = {}) {\n return await this.fetchSpotOrdersByStates(\"filled,partial-canceled,canceled\", e, t, i, s);\n }\n async fetchContractOrders(e = void 0, t = void 0, i = void 0, s = {}) {\n if (e === void 0)\n throw new g(\"fetchContractOrders() requires a symbol argument\").exchange(this.id);\n await this.loadMarkets();\n const n = this.market(e);\n let r = {\n // POST /api/v1/contract_hisorders inverse futures ----------------\n // 'symbol': market['settleId'], // BTC, ETH, ...\n // 'order_type': '1', // 1 limit,3 opponent,4 lightning, 5 trigger order, 6 pst_only, 7 optimal_5, 8 optimal_10, 9 optimal_20, 10 fok, 11 ioc\n // POST /swap-api/v3/swap_hisorders inverse swap ------------------\n // POST /linear-swap-api/v3/swap_hisorders linear isolated --------\n // POST /linear-swap-api/v3/swap_cross_hisorders linear cross -----\n trade_type: 0,\n status: \"0\"\n // support multiple query seperated by ',',such as '3,4,5', 0: all. 3. Have sumbmitted the orders; 4. Orders partially matched; 5. Orders cancelled with partially matched; 6. Orders fully matched; 7. Orders cancelled;\n }, a;\n const o = this.safeValue(s, \"stop\"), c = this.safeValue(s, \"stopLossTakeProfit\"), u = this.safeBool(s, \"trailing\", !1);\n if (s = this.omit(s, [\"stop\", \"stopLossTakeProfit\", \"trailing\"]), o || c || u ? (i !== void 0 && (r.page_size = i), r.contract_code = n.id, r.create_date = 90) : (t !== void 0 && (r.start_time = t), r.contract = n.id, r.type = 1), [r, s] = this.handleUntilOption(\"end_time\", r, s), n.linear) {\n let h;\n [h, s] = this.handleMarginModeAndParams(\"fetchContractOrders\", s), h = h === void 0 ? \"cross\" : h, h === \"isolated\" ? o ? a = await this.contractPrivatePostLinearSwapApiV1SwapTriggerHisorders(this.extend(r, s)) : c ? a = await this.contractPrivatePostLinearSwapApiV1SwapTpslHisorders(this.extend(r, s)) : u ? a = await this.contractPrivatePostLinearSwapApiV1SwapTrackHisorders(this.extend(r, s)) : a = await this.contractPrivatePostLinearSwapApiV3SwapHisorders(this.extend(r, s)) : h === \"cross\" && (o ? a = await this.contractPrivatePostLinearSwapApiV1SwapCrossTriggerHisorders(this.extend(r, s)) : c ? a = await this.contractPrivatePostLinearSwapApiV1SwapCrossTpslHisorders(this.extend(r, s)) : u ? a = await this.contractPrivatePostLinearSwapApiV1SwapCrossTrackHisorders(this.extend(r, s)) : a = await this.contractPrivatePostLinearSwapApiV3SwapCrossHisorders(this.extend(r, s)));\n } else\n n.inverse && (n.swap ? o ? a = await this.contractPrivatePostSwapApiV1SwapTriggerHisorders(this.extend(r, s)) : c ? a = await this.contractPrivatePostSwapApiV1SwapTpslHisorders(this.extend(r, s)) : u ? a = await this.contractPrivatePostSwapApiV1SwapTrackHisorders(this.extend(r, s)) : a = await this.contractPrivatePostSwapApiV3SwapHisorders(this.extend(r, s)) : n.future && (r.symbol = n.settleId, o ? a = await this.contractPrivatePostApiV1ContractTriggerHisorders(this.extend(r, s)) : c ? a = await this.contractPrivatePostApiV1ContractTpslHisorders(this.extend(r, s)) : u ? a = await this.contractPrivatePostApiV1ContractTrackHisorders(this.extend(r, s)) : a = await this.contractPrivatePostApiV3ContractHisorders(this.extend(r, s))));\n let f = this.safeValue(a, \"data\");\n return Array.isArray(f) || (f = this.safeValue(f, \"orders\", [])), this.parseOrders(f, n, t, i);\n }\n async fetchClosedContractOrders(e = void 0, t = void 0, i = void 0, s = {}) {\n const n = {\n status: \"5,6,7\"\n // comma separated, 0 all, 3 submitted orders, 4 partially matched, 5 partially cancelled, 6 fully matched and closed, 7 canceled\n };\n return await this.fetchContractOrders(e, t, i, this.extend(n, s));\n }\n async fetchOrders(e = void 0, t = void 0, i = void 0, s = {}) {\n await this.loadMarkets();\n let n;\n e !== void 0 && (n = this.market(e));\n let r;\n [r, s] = this.handleMarketTypeAndParams(\"fetchOrders\", n, s);\n const a = r === \"swap\" || r === \"future\";\n if (a && e === void 0)\n throw new g(\" fetchOrders() requires a symbol argument for \" + r + \" orders\").exchange(this.id);\n return a ? await this.fetchContractOrders(e, t, i, s) : await this.fetchSpotOrders(e, t, i, s);\n }\n async fetchClosedOrders(e = void 0, t = void 0, i = void 0, s = {}) {\n await this.loadMarkets();\n let n = !1;\n if ([n, s] = this.handleOptionAndParams(s, \"fetchClosedOrders\", \"paginate\"), n)\n return await this.fetchPaginatedCallDynamic(\"fetchClosedOrders\", e, t, i, s, 100);\n let r;\n e !== void 0 && (r = this.market(e));\n let a;\n return [a, s] = this.handleMarketTypeAndParams(\"fetchClosedOrders\", r, s), a === \"spot\" ? await this.fetchClosedSpotOrders(e, t, i, s) : await this.fetchClosedContractOrders(e, t, i, s);\n }\n async fetchOpenOrders(e = void 0, t = void 0, i = void 0, s = {}) {\n await this.loadMarkets();\n let n;\n e !== void 0 && (n = this.market(e));\n const r = {};\n let a;\n [a, s] = this.handleMarketTypeAndParams(\"fetchOpenOrders\", n, s);\n let o;\n if (a === \"spot\") {\n e !== void 0 && (r.symbol = n.id);\n let u = this.safeString(s, \"account-id\");\n if (u === void 0) {\n await this.loadAccounts();\n for (let f = 0; f < this.accounts.length; f++) {\n const h = this.accounts[f];\n if (h.type === \"spot\" && (u = this.safeString(h, \"id\"), u !== void 0))\n break;\n }\n }\n r[\"account-id\"] = u, i !== void 0 && (r.size = i), s = this.omit(s, \"account-id\"), o = await this.spotPrivateGetV1OrderOpenOrders(this.extend(r, s));\n } else {\n if (e === void 0)\n throw new g(\"fetchOpenOrders() requires a symbol argument\").exchange(this.id);\n i !== void 0 && (r.page_size = i), r.contract_code = n.id;\n const u = this.safeValue(s, \"stop\"), f = this.safeValue(s, \"stopLossTakeProfit\"), h = this.safeBool(s, \"trailing\", !1);\n if (s = this.omit(s, [\"stop\", \"stopLossTakeProfit\", \"trailing\"]), n.linear) {\n let l;\n [l, s] = this.handleMarginModeAndParams(\"fetchOpenOrders\", s), l = l === void 0 ? \"cross\" : l, l === \"isolated\" ? u ? o = await this.contractPrivatePostLinearSwapApiV1SwapTriggerOpenorders(this.extend(r, s)) : f ? o = await this.contractPrivatePostLinearSwapApiV1SwapTpslOpenorders(this.extend(r, s)) : h ? o = await this.contractPrivatePostLinearSwapApiV1SwapTrackOpenorders(this.extend(r, s)) : o = await this.contractPrivatePostLinearSwapApiV1SwapOpenorders(this.extend(r, s)) : l === \"cross\" && (u ? o = await this.contractPrivatePostLinearSwapApiV1SwapCrossTriggerOpenorders(this.extend(r, s)) : f ? o = await this.contractPrivatePostLinearSwapApiV1SwapCrossTpslOpenorders(this.extend(r, s)) : h ? o = await this.contractPrivatePostLinearSwapApiV1SwapCrossTrackOpenorders(this.extend(r, s)) : o = await this.contractPrivatePostLinearSwapApiV1SwapCrossOpenorders(this.extend(r, s)));\n } else\n n.inverse && (n.swap ? u ? o = await this.contractPrivatePostSwapApiV1SwapTriggerOpenorders(this.extend(r, s)) : f ? o = await this.contractPrivatePostSwapApiV1SwapTpslOpenorders(this.extend(r, s)) : h ? o = await this.contractPrivatePostSwapApiV1SwapTrackOpenorders(this.extend(r, s)) : o = await this.contractPrivatePostSwapApiV1SwapOpenorders(this.extend(r, s)) : n.future && (r.symbol = n.settleId, u ? o = await this.contractPrivatePostApiV1ContractTriggerOpenorders(this.extend(r, s)) : f ? o = await this.contractPrivatePostApiV1ContractTpslOpenorders(this.extend(r, s)) : h ? o = await this.contractPrivatePostApiV1ContractTrackOpenorders(this.extend(r, s)) : o = await this.contractPrivatePostApiV1ContractOpenorders(this.extend(r, s))));\n }\n let c = this.safeValue(o, \"data\");\n return Array.isArray(c) || (c = this.safeValue(c, \"orders\", [])), this.parseOrders(c, n, t, i);\n }\n parseOrderStatus(e) {\n const t = {\n // spot\n \"partial-filled\": \"open\",\n \"partial-canceled\": \"canceled\",\n filled: \"closed\",\n canceled: \"canceled\",\n submitted: \"open\",\n created: \"open\",\n // contract\n 1: \"open\",\n 2: \"open\",\n 3: \"open\",\n 4: \"open\",\n 5: \"canceled\",\n 6: \"closed\",\n 7: \"canceled\",\n 11: \"canceling\"\n };\n return this.safeString(t, e, e);\n }\n parseOrder(e, t = void 0) {\n const i = this.safeString2(e, \"err_code\", \"err-code\");\n let s = this.parseOrderStatus(this.safeString2(e, \"state\", \"status\"));\n i !== void 0 && (s = \"rejected\");\n const n = this.safeStringN(e, [\"id\", \"order_id_str\", \"order-id\"]);\n let r = this.safeString(e, \"direction\"), a = this.safeString(e, \"order_price_type\");\n if (\"type\" in e) {\n const v = e.type.split(\"-\");\n r = v[0], a = v[1];\n }\n const o = this.safeString2(e, \"contract_code\", \"symbol\");\n t = this.safeMarket(o, t);\n const c = this.safeIntegerN(e, [\"created_at\", \"created-at\", \"create_date\"]), u = this.safeString2(e, \"client_order_id\", \"client-order-id\");\n let f, h;\n a !== void 0 && a.indexOf(\"market\") >= 0 ? r === \"sell\" ? f = this.safeString(e, \"field-cash-amount\") : f = this.safeString(e, \"amount\") : (h = this.safeString2(e, \"volume\", \"amount\"), f = this.safeStringN(e, [\"filled-cash-amount\", \"field-cash-amount\", \"trade_turnover\"]));\n const l = this.safeStringN(e, [\"filled-amount\", \"field-amount\", \"trade_volume\"]), p = this.safeString2(e, \"price\", \"order_price\");\n let m = this.safeString2(e, \"filled-fees\", \"field-fees\");\n m = this.safeString(e, \"fee\", m);\n let y;\n if (m !== void 0) {\n let v;\n const _ = this.safeString(e, \"fee_asset\");\n _ !== void 0 ? v = this.safeCurrencyCode(_) : v = r === \"sell\" ? t.quote : t.base, y = {\n cost: m,\n currency: v\n };\n }\n const w = this.safeString2(e, \"stop-price\", \"trigger_price\"), S = this.safeString(e, \"trade_avg_price\"), b = this.safeValue(e, \"trades\"), T = this.safeInteger(e, \"reduce_only\");\n let x;\n return T !== void 0 && (x = T !== 0), this.safeOrder({\n info: e,\n id: n,\n clientOrderId: u,\n timestamp: c,\n datetime: this.iso8601(c),\n lastTradeTimestamp: void 0,\n symbol: t.symbol,\n type: a,\n timeInForce: void 0,\n postOnly: void 0,\n side: r,\n price: p,\n stopPrice: w,\n triggerPrice: w,\n average: S,\n cost: f,\n amount: h,\n filled: l,\n remaining: void 0,\n status: s,\n reduceOnly: x,\n fee: y,\n trades: b\n }, t);\n }\n async createMarketBuyOrderWithCost(e, t, i = {}) {\n await this.loadMarkets();\n const s = this.market(e);\n if (!s.spot)\n throw new ge(s.type).addMessage(\"It supports spot orders only\").exchange(this.id);\n return i.createMarketBuyOrderRequiresPrice = !1, await this.createOrder(e, \"market\", \"buy\", t, void 0, i);\n }\n async createTrailingPercentOrder(e, t, i, s, n = void 0, r = void 0, a = void 0, o = {}) {\n if (r === void 0)\n throw new g(\"createTrailingPercentOrder() requires a trailingPercent argument\").exchange(this.id);\n if (a === void 0)\n throw new g(\"createTrailingPercentOrder() requires a trailingTriggerPrice argument\").exchange(this.id);\n return o.trailingPercent = r, o.trailingTriggerPrice = a, await this.createOrder(e, t, i, s, n, o);\n }\n async createSpotOrderRequest(e, t, i, s, n = void 0, r = {}) {\n await this.loadMarkets(), await this.loadAccounts();\n const a = this.market(e);\n let o;\n [o, r] = this.handleMarginModeAndParams(\"createOrder\", r);\n const u = {\n // spot -----------------------------------------------------------\n \"account-id\": await this.fetchAccountIdByType(a.type, o, e),\n symbol: a.id\n // 'type': side + '-' + type, // buy-market, sell-market, buy-limit, sell-limit, buy-ioc, sell-ioc, buy-limit-maker, sell-limit-maker, buy-stop-limit, sell-stop-limit, buy-limit-fok, sell-limit-fok, buy-stop-limit-fok, sell-stop-limit-fok\n // 'amount': this.amountToPrecision (symbol, amount), // for buy market orders it's the order cost\n // 'price': this.priceToPrecision (symbol, price),\n // 'source': 'spot-api', // optional, spot-api, margin-api = isolated margin, super-margin-api = cross margin, c2c-margin-api\n // 'client-order-id': clientOrderId, // optional, max 64 chars, must be unique within 8 hours\n // 'stop-price': this.priceToPrecision (symbol, stopPrice), // trigger price for stop limit orders\n // 'operator': 'gte', // gte, lte, trigger price condition\n };\n let f = t.replace(\"buy-\", \"\");\n f = f.replace(\"sell-\", \"\");\n const h = this.safeValue(this.options, a.type, {}), l = this.safeString2(r, \"stopPrice\", \"stop-price\");\n if (l === void 0) {\n const S = this.safeValue(h, \"stopOrderTypes\", {});\n if (f in S)\n throw new g(\"createOrder() requires a stopPrice or a stop-price parameter for a stop order\").exchange(this.id);\n } else {\n const S = i === \"sell\" ? \"lte\" : \"gte\", b = this.safeString(r, \"operator\", S);\n if (u[\"stop-price\"] = this.priceToPrecision(e, l), u.operator = b, f === \"limit\" || f === \"limit-fok\")\n f = \"stop-\" + f;\n else if (f !== \"stop-limit\" && f !== \"stop-limit-fok\")\n throw new ge(t).addMessage(\"createOrder() does not support \" + t + \" orders\").exchange(this.id);\n }\n let p;\n [p, r] = this.handlePostOnly(f === \"market\", f === \"limit-maker\", r), p && (f = \"limit-maker\");\n const m = this.safeString(r, \"timeInForce\", \"GTC\");\n m === \"FOK\" ? f = f + \"-fok\" : m === \"IOC\" && (f = \"ioc\"), u.type = i + \"-\" + f;\n const y = this.safeString2(r, \"clientOrderId\", \"client-order-id\");\n if (y === void 0) {\n const S = this.safeValue(this.options, \"broker\", {}), b = this.safeString(S, \"id\");\n u[\"client-order-id\"] = b + this.uuid();\n } else\n u[\"client-order-id\"] = y;\n if (o === \"cross\" ? u.source = \"super-margin-api\" : o === \"isolated\" ? u.source = \"margin-api\" : o === \"c2c\" && (u.source = \"c2c-margin-api\"), f === \"market\" && i === \"buy\") {\n let S, b = !0;\n [b, r] = this.handleOptionAndParams(r, \"createOrder\", \"createMarketBuyOrderRequiresPrice\", !0);\n const T = this.safeNumber(r, \"cost\");\n if (r = this.omit(r, \"cost\"), T !== void 0)\n S = this.amountToPrecision(e, T);\n else if (b) {\n if (n === void 0)\n throw new g(\"createOrder() requires the price argument for market buy orders to calculate the total cost to spend (amount * price), alternatively set the createMarketBuyOrderRequiresPrice option or param to false and pass the cost to spend in the amount argument\").exchange(this.id);\n {\n const x = this.numberToString(s), v = this.numberToString(n);\n S = this.costToPrecision(e, P.stringMul(x, v));\n }\n } else\n S = this.amountToPrecision(e, s);\n u.amount = S;\n } else\n u.amount = this.amountToPrecision(e, s);\n const w = this.safeValue(h, \"limitOrderTypes\", {});\n return f in w && (u.price = this.priceToPrecision(e, n)), r = this.omit(r, [\"stopPrice\", \"stop-price\", \"clientOrderId\", \"client-order-id\", \"operator\", \"timeInForce\"]), this.extend(u, r);\n }\n createContractOrderRequest(e, t, i, s, n = void 0, r = {}) {\n const o = {\n contract_code: this.market(e).id,\n volume: this.amountToPrecision(e, s),\n direction: i\n };\n let c;\n [c, r] = this.handlePostOnly(t === \"market\", t === \"post_only\", r), c && (t = \"post_only\");\n const u = this.safeString(r, \"timeInForce\", \"GTC\");\n u === \"FOK\" ? t = \"fok\" : u === \"IOC\" && (t = \"ioc\");\n const f = this.safeNumber2(r, \"stopPrice\", \"trigger_price\"), h = this.safeNumber2(r, \"stopLossPrice\", \"sl_trigger_price\"), l = this.safeNumber2(r, \"takeProfitPrice\", \"tp_trigger_price\"), p = this.safeString2(r, \"trailingPercent\", \"callback_rate\"), m = this.safeNumber(r, \"trailingTriggerPrice\", n), y = p !== void 0, w = f !== void 0, S = h !== void 0, b = l !== void 0;\n if (w) {\n const v = this.safeString2(r, \"triggerType\", \"trigger_type\", \"le\");\n o.trigger_type = v, o.trigger_price = this.priceToPrecision(e, f), n !== void 0 && (o.order_price = this.priceToPrecision(e, n));\n } else if (S || b)\n S ? (o.sl_order_price_type = t, o.sl_trigger_price = this.priceToPrecision(e, h), n !== void 0 && (o.sl_order_price = this.priceToPrecision(e, n))) : (o.tp_order_price_type = t, o.tp_trigger_price = this.priceToPrecision(e, l), n !== void 0 && (o.tp_order_price = this.priceToPrecision(e, n)));\n else if (y) {\n const v = P.stringDiv(p, \"100\");\n o.callback_rate = this.parseToNumeric(v), o.active_price = m, o.order_price_type = this.safeString(r, \"order_price_type\", \"formula_price\");\n } else {\n const v = this.safeInteger2(r, \"client_order_id\", \"clientOrderId\");\n v !== void 0 && (o.client_order_id = v, r = this.omit(r, [\"clientOrderId\"])), (t === \"limit\" || t === \"ioc\" || t === \"fok\" || t === \"post_only\") && (o.price = this.priceToPrecision(e, n));\n }\n !S && !b && (this.safeValue2(r, \"reduceOnly\", \"reduce_only\", !1) && (o.reduce_only = 1), o.lever_rate = this.safeIntegerN(r, [\"leverRate\", \"lever_rate\", \"leverage\"], 1), y || (o.order_price_type = t));\n const T = this.safeValue(this.options, \"broker\", {}), x = this.safeString(T, \"id\");\n return o.channel_code = x, r = this.omit(r, [\"reduceOnly\", \"stopPrice\", \"stopLossPrice\", \"takeProfitPrice\", \"triggerType\", \"leverRate\", \"timeInForce\", \"leverage\", \"trailingPercent\", \"trailingTriggerPrice\"]), this.extend(o, r);\n }\n async createOrder(e, t, i, s, n = void 0, r = {}) {\n await this.loadMarkets();\n const a = this.market(e), o = this.safeNumber2(r, \"stopPrice\", \"trigger_price\"), c = this.safeNumber2(r, \"stopLossPrice\", \"sl_trigger_price\"), u = this.safeNumber2(r, \"takeProfitPrice\", \"tp_trigger_price\"), h = this.safeNumber(r, \"trailingPercent\") !== void 0, l = o !== void 0, p = c !== void 0, m = u !== void 0;\n let y;\n if (a.spot) {\n if (h)\n throw new k().addMessage(\"createOrder() does not support trailing orders for spot markets\").exchange(this.id);\n const b = await this.createSpotOrderRequest(e, t, i, s, n, r);\n y = await this.spotPrivatePostV1OrderOrdersPlace(b);\n } else {\n let b = this.createContractOrderRequest(e, t, i, s, n, r);\n if (a.linear) {\n let T;\n [T, b] = this.handleMarginModeAndParams(\"createOrder\", b), T = T === void 0 ? \"cross\" : T, T === \"isolated\" ? l ? y = await this.contractPrivatePostLinearSwapApiV1SwapTriggerOrder(b) : p || m ? y = await this.contractPrivatePostLinearSwapApiV1SwapTpslOrder(b) : h ? y = await this.contractPrivatePostLinearSwapApiV1SwapTrackOrder(b) : y = await this.contractPrivatePostLinearSwapApiV1SwapOrder(b) : T === \"cross\" && (l ? y = await this.contractPrivatePostLinearSwapApiV1SwapCrossTriggerOrder(b) : p || m ? y = await this.contractPrivatePostLinearSwapApiV1SwapCrossTpslOrder(b) : h ? y = await this.contractPrivatePostLinearSwapApiV1SwapCrossTrackOrder(b) : y = await this.contractPrivatePostLinearSwapApiV1SwapCrossOrder(b));\n } else\n a.inverse && (a.swap ? l ? y = await this.contractPrivatePostSwapApiV1SwapTriggerOrder(b) : p || m ? y = await this.contractPrivatePostSwapApiV1SwapTpslOrder(b) : h ? y = await this.contractPrivatePostSwapApiV1SwapTrackOrder(b) : y = await this.contractPrivatePostSwapApiV1SwapOrder(b) : a.future && (l ? y = await this.contractPrivatePostApiV1ContractTriggerOrder(b) : p || m ? y = await this.contractPrivatePostApiV1ContractTpslOrder(b) : h ? y = await this.contractPrivatePostApiV1ContractTrackOrder(b) : y = await this.contractPrivatePostApiV1ContractOrder(b)));\n }\n let w, S;\n return a.spot ? this.safeOrder({\n info: y,\n id: this.safeString(y, \"data\"),\n timestamp: void 0,\n datetime: void 0,\n lastTradeTimestamp: void 0,\n status: void 0,\n symbol: void 0,\n type: t,\n side: i,\n price: n,\n amount: s,\n filled: void 0,\n remaining: void 0,\n cost: void 0,\n trades: void 0,\n fee: void 0,\n clientOrderId: void 0,\n average: void 0\n }, a) : (p ? (w = this.safeValue(y, \"data\", {}), S = this.safeValue(w, \"sl_order\", {})) : m ? (w = this.safeValue(y, \"data\", {}), S = this.safeValue(w, \"tp_order\", {})) : S = this.safeValue(y, \"data\", {}), this.parseOrder(S, a));\n }\n async createOrders(e, t = {}) {\n await this.loadMarkets();\n const i = [];\n let s, n, r;\n for (let u = 0; u < e.length; u++) {\n const f = e[u], h = this.safeString(f, \"symbol\");\n if (s === void 0)\n s = h;\n else if (s !== h)\n throw new g(\"createOrders() requires all orders to have the same symbol\").exchange(this.id);\n const l = this.safeString(f, \"type\"), p = this.safeString(f, \"side\"), m = this.safeValue(f, \"amount\"), y = this.safeValue(f, \"price\"), w = this.safeValue(f, \"params\", {}), b = this.handleMarginModeAndParams(\"createOrders\", w)[0];\n if (b !== void 0) {\n if (r === void 0)\n r = b;\n else if (r !== b)\n throw new g(\"createOrders() requires all orders to have the same margin mode (isolated or cross)\").exchange(this.id);\n }\n n = this.market(s);\n let T;\n n.spot ? T = await this.createSpotOrderRequest(h, l, p, m, y, w) : T = this.createContractOrderRequest(h, l, p, m, y, w), T = this.omit(T, \"marginMode\"), i.push(T);\n }\n const a = {};\n let o;\n n.spot ? o = await this.privatePostOrderBatchOrders(i) : (a.orders_data = i, n.linear ? (r = r === void 0 ? \"cross\" : r, r === \"isolated\" ? o = await this.contractPrivatePostLinearSwapApiV1SwapBatchorder(a) : r === \"cross\" && (o = await this.contractPrivatePostLinearSwapApiV1SwapCrossBatchorder(a))) : n.inverse && (n.swap ? o = await this.contractPrivatePostSwapApiV1SwapBatchorder(a) : n.future && (o = await this.contractPrivatePostApiV1ContractBatchorder(a))));\n let c;\n if (n.spot)\n c = this.safeValue(o, \"data\", []);\n else {\n const u = this.safeValue(o, \"data\", {}), f = this.safeValue(u, \"success\", []), h = this.safeValue(u, \"errors\", []);\n c = this.arrayConcat(f, h);\n }\n return this.parseOrders(c, n);\n }\n async cancelOrder(e, t = void 0, i = {}) {\n await this.loadMarkets();\n let s;\n t !== void 0 && (s = this.market(t));\n let n;\n [n, i] = this.handleMarketTypeAndParams(\"cancelOrder\", s, i);\n const r = {\n // spot -----------------------------------------------------------\n // 'order-id': 'id',\n // 'symbol': market['id'],\n // 'client-order-id': clientOrderId,\n // contracts ------------------------------------------------------\n // 'order_id': id,\n // 'client_order_id': clientOrderId,\n // 'contract_code': market['id'],\n // 'pair': 'BTC-USDT',\n // 'contract_type': 'this_week', // swap, this_week, next_week, quarter, next_ quarter\n };\n let a;\n if (n === \"spot\") {\n const o = this.safeString2(i, \"client-order-id\", \"clientOrderId\");\n o === void 0 ? (r[\"order-id\"] = e, a = await this.spotPrivatePostV1OrderOrdersOrderIdSubmitcancel(this.extend(r, i))) : (r[\"client-order-id\"] = o, i = this.omit(i, [\"client-order-id\", \"clientOrderId\"]), a = await this.spotPrivatePostV1OrderOrdersSubmitCancelClientOrder(this.extend(r, i)));\n } else {\n if (t === void 0)\n throw new g(\"cancelOrder() requires a symbol argument\").exchange(this.id);\n const o = this.safeString2(i, \"client_order_id\", \"clientOrderId\");\n o === void 0 ? r.order_id = e : (r.client_order_id = o, i = this.omit(i, [\"client_order_id\", \"clientOrderId\"])), s.future ? r.symbol = s.settleId : r.contract_code = s.id;\n const c = this.safeValue(i, \"stop\"), u = this.safeValue(i, \"stopLossTakeProfit\"), f = this.safeBool(i, \"trailing\", !1);\n if (i = this.omit(i, [\"stop\", \"stopLossTakeProfit\", \"trailing\"]), s.linear) {\n let h;\n [h, i] = this.handleMarginModeAndParams(\"cancelOrder\", i), h = h === void 0 ? \"cross\" : h, h === \"isolated\" ? c ? a = await this.contractPrivatePostLinearSwapApiV1SwapTriggerCancel(this.extend(r, i)) : u ? a = await this.contractPrivatePostLinearSwapApiV1SwapTpslCancel(this.extend(r, i)) : f ? a = await this.contractPrivatePostLinearSwapApiV1SwapTrackCancel(this.extend(r, i)) : a = await this.contractPrivatePostLinearSwapApiV1SwapCancel(this.extend(r, i)) : h === \"cross\" && (c ? a = await this.contractPrivatePostLinearSwapApiV1SwapCrossTriggerCancel(this.extend(r, i)) : u ? a = await this.contractPrivatePostLinearSwapApiV1SwapCrossTpslCancel(this.extend(r, i)) : f ? a = await this.contractPrivatePostLinearSwapApiV1SwapCrossTrackCancel(this.extend(r, i)) : a = await this.contractPrivatePostLinearSwapApiV1SwapCrossCancel(this.extend(r, i)));\n } else if (s.inverse)\n s.swap ? c ? a = await this.contractPrivatePostSwapApiV1SwapTriggerCancel(this.extend(r, i)) : u ? a = await this.contractPrivatePostSwapApiV1SwapTpslCancel(this.extend(r, i)) : f ? a = await this.contractPrivatePostSwapApiV1SwapTrackCancel(this.extend(r, i)) : a = await this.contractPrivatePostSwapApiV1SwapCancel(this.extend(r, i)) : s.future && (c ? a = await this.contractPrivatePostApiV1ContractTriggerCancel(this.extend(r, i)) : u ? a = await this.contractPrivatePostApiV1ContractTpslCancel(this.extend(r, i)) : f ? a = await this.contractPrivatePostApiV1ContractTrackCancel(this.extend(r, i)) : a = await this.contractPrivatePostApiV1ContractCancel(this.extend(r, i)));\n else\n throw new ge(n).exchange(this.id);\n }\n return this.extend(this.parseOrder(a, s), {\n id: e,\n status: \"canceled\"\n });\n }\n async cancelOrders(e, t = void 0, i = {}) {\n await this.loadMarkets();\n let s;\n t !== void 0 && (s = this.market(t));\n let n;\n [n, i] = this.handleMarketTypeAndParams(\"cancelOrders\", s, i);\n const r = {\n // spot -----------------------------------------------------------\n // 'order-ids': ids.join (','), // max 50\n // 'client-order-ids': ids.join (','), // max 50\n // contracts ------------------------------------------------------\n // 'order_id': id, // comma separated, max 10\n // 'client_order_id': clientOrderId, // comma separated, max 10\n // 'contract_code': market['id'],\n // 'symbol': market['settleId'],\n };\n let a;\n if (n === \"spot\") {\n let o = this.safeValue2(i, \"client-order-id\", \"clientOrderId\");\n o = this.safeValue2(i, \"client-order-ids\", \"clientOrderIds\", o), o === void 0 ? typeof o == \"string\" ? r[\"order-ids\"] = [e] : r[\"order-ids\"] = e : (typeof o == \"string\" ? r[\"client-order-ids\"] = [o] : r[\"client-order-ids\"] = o, i = this.omit(i, [\"client-order-id\", \"client-order-ids\", \"clientOrderId\", \"clientOrderIds\"])), a = await this.spotPrivatePostV1OrderOrdersBatchcancel(this.extend(r, i));\n } else {\n if (t === void 0)\n throw new g(\"cancelOrders() requires a symbol argument\").exchange(this.id);\n let o = this.safeString2(i, \"client_order_id\", \"clientOrderId\");\n o = this.safeString2(i, \"client_order_ids\", \"clientOrderIds\", o), o === void 0 ? r.order_id = e.join(\",\") : (r.client_order_id = o, i = this.omit(i, [\"client_order_id\", \"client_order_ids\", \"clientOrderId\", \"clientOrderIds\"])), s.future ? r.symbol = s.settleId : r.contract_code = s.id;\n const c = this.safeValue(i, \"stop\"), u = this.safeValue(i, \"stopLossTakeProfit\");\n if (i = this.omit(i, [\"stop\", \"stopLossTakeProfit\"]), s.linear) {\n let f;\n [f, i] = this.handleMarginModeAndParams(\"cancelOrders\", i), f = f === void 0 ? \"cross\" : f, f === \"isolated\" ? c ? a = await this.contractPrivatePostLinearSwapApiV1SwapTriggerCancel(this.extend(r, i)) : u ? a = await this.contractPrivatePostLinearSwapApiV1SwapTpslCancel(this.extend(r, i)) : a = await this.contractPrivatePostLinearSwapApiV1SwapCancel(this.extend(r, i)) : f === \"cross\" && (c ? a = await this.contractPrivatePostLinearSwapApiV1SwapCrossTriggerCancel(this.extend(r, i)) : u ? a = await this.contractPrivatePostLinearSwapApiV1SwapCrossTpslCancel(this.extend(r, i)) : a = await this.contractPrivatePostLinearSwapApiV1SwapCrossCancel(this.extend(r, i)));\n } else if (s.inverse)\n s.swap ? c ? a = await this.contractPrivatePostSwapApiV1SwapTriggerCancel(this.extend(r, i)) : u ? a = await this.contractPrivatePostSwapApiV1SwapTpslCancel(this.extend(r, i)) : a = await this.contractPrivatePostSwapApiV1SwapCancel(this.extend(r, i)) : s.future && (c ? a = await this.contractPrivatePostApiV1ContractTriggerCancel(this.extend(r, i)) : u ? a = await this.contractPrivatePostApiV1ContractTpslCancel(this.extend(r, i)) : a = await this.contractPrivatePostApiV1ContractCancel(this.extend(r, i)));\n else\n throw new ge(n).exchange(this.id);\n }\n return a;\n }\n async cancelAllOrders(e = void 0, t = {}) {\n await this.loadMarkets();\n let i;\n e !== void 0 && (i = this.market(e));\n let s;\n [s, t] = this.handleMarketTypeAndParams(\"cancelAllOrders\", i, t);\n const n = {\n // spot -----------------------------------------------------------\n // 'account-id': account['id'],\n // 'symbol': market['id'], // a list of comma-separated symbols, all symbols by default\n // 'types' 'string', buy-market, sell-market, buy-limit, sell-limit, buy-ioc, sell-ioc, buy-stop-limit, sell-stop-limit, buy-limit-fok, sell-limit-fok, buy-stop-limit-fok, sell-stop-limit-fok\n // 'side': 'buy', // or 'sell'\n // 'size': 100, // the number of orders to cancel 1-100\n // contract -------------------------------------------------------\n // 'symbol': market['settleId'], // required\n // 'contract_code': market['id'],\n // 'contract_type': 'this_week', // swap, this_week, next_week, quarter, next_ quarter\n // 'direction': 'buy': // buy, sell\n // 'offset': 'open', // open, close\n };\n let r;\n if (s === \"spot\")\n e !== void 0 && (n.symbol = i.id), r = await this.spotPrivatePostV1OrderOrdersBatchCancelOpenOrders(this.extend(n, t));\n else {\n if (e === void 0)\n throw new g(\"cancelAllOrders() requires a symbol argument\").exchange(this.id);\n i.future && (n.symbol = i.settleId), n.contract_code = i.id;\n const a = this.safeValue(t, \"stop\"), o = this.safeValue(t, \"stopLossTakeProfit\"), c = this.safeBool(t, \"trailing\", !1);\n if (t = this.omit(t, [\"stop\", \"stopLossTakeProfit\", \"trailing\"]), i.linear) {\n let u;\n [u, t] = this.handleMarginModeAndParams(\"cancelAllOrders\", t), u = u === void 0 ? \"cross\" : u, u === \"isolated\" ? a ? r = await this.contractPrivatePostLinearSwapApiV1SwapTriggerCancelall(this.extend(n, t)) : o ? r = await this.contractPrivatePostLinearSwapApiV1SwapTpslCancelall(this.extend(n, t)) : c ? r = await this.contractPrivatePostLinearSwapApiV1SwapTrackCancelall(this.extend(n, t)) : r = await this.contractPrivatePostLinearSwapApiV1SwapCancelall(this.extend(n, t)) : u === \"cross\" && (a ? r = await this.contractPrivatePostLinearSwapApiV1SwapCrossTriggerCancelall(this.extend(n, t)) : o ? r = await this.contractPrivatePostLinearSwapApiV1SwapCrossTpslCancelall(this.extend(n, t)) : c ? r = await this.contractPrivatePostLinearSwapApiV1SwapCrossTrackCancelall(this.extend(n, t)) : r = await this.contractPrivatePostLinearSwapApiV1SwapCrossCancelall(this.extend(n, t)));\n } else if (i.inverse)\n i.swap ? a ? r = await this.contractPrivatePostSwapApiV1SwapTriggerCancelall(this.extend(n, t)) : o ? r = await this.contractPrivatePostSwapApiV1SwapTpslCancelall(this.extend(n, t)) : c ? r = await this.contractPrivatePostSwapApiV1SwapTrackCancelall(this.extend(n, t)) : r = await this.contractPrivatePostSwapApiV1SwapCancelall(this.extend(n, t)) : i.future && (a ? r = await this.contractPrivatePostApiV1ContractTriggerCancelall(this.extend(n, t)) : o ? r = await this.contractPrivatePostApiV1ContractTpslCancelall(this.extend(n, t)) : c ? r = await this.contractPrivatePostApiV1ContractTrackCancelall(this.extend(n, t)) : r = await this.contractPrivatePostApiV1ContractCancelall(this.extend(n, t)));\n else\n throw new ge(s).exchange(this.id);\n }\n return r;\n }\n parseDepositAddress(e, t = void 0) {\n const i = this.safeString(e, \"address\"), s = this.safeString(e, \"addressTag\"), n = this.safeString(e, \"currency\");\n t = this.safeCurrency(n, t);\n const r = this.safeCurrencyCode(n, t), a = this.safeString(e, \"note\"), o = this.safeString(e, \"chain\");\n return this.checkAddress(i), {\n currency: r,\n address: i,\n tag: s,\n network: this.networkIdToEcid(o),\n note: a,\n info: e\n };\n }\n async fetchDepositAddressesByNetwork(e, t = {}) {\n await this.loadMarkets();\n const i = this.currency(e), s = {\n currency: i.id\n }, n = await this.spotPrivateGetV2AccountDepositAddress(this.extend(s, t)), r = this.safeValue(n, \"data\", []), a = this.parseDepositAddresses(r, [i.code], !1);\n return this.indexBy(a, \"network\");\n }\n async fetchDepositAddress(e, t = {}) {\n await this.loadMarkets();\n const [i, s] = this.handleEcidAndParams(t);\n return (await this.fetchDepositAddressesByNetwork(e, s))[i];\n }\n async fetchWithdrawAddresses(e, t = void 0, i = void 0, s = {}) {\n await this.loadMarkets();\n const n = this.currency(e), r = {\n currency: n.id\n }, a = await this.spotPrivateGetV2AccountWithdrawAddress(this.extend(r, s)), o = this.safeValue(a, \"data\", []), c = this.parseDepositAddresses(o, [n.code], !1), u = [];\n for (let f = 0; f < c.length; f++) {\n const h = c[f], l = t === void 0 || h.note === t, p = i === void 0 || h.network === i;\n l && p && u.push(h);\n }\n return u;\n }\n async fetchDeposits(e = void 0, t = void 0, i = void 0, s = {}) {\n (i === void 0 || i > 100) && (i = 100), await this.loadMarkets();\n let n;\n e !== void 0 && (n = this.currency(e));\n const r = {\n type: \"deposit\",\n direct: \"next\",\n from: 0\n // From 'id' ... if you want to get results after a particular transaction id, pass the id in params.from\n };\n n !== void 0 && (r.currency = n.id), i !== void 0 && (r.size = i);\n const a = await this.spotPrivateGetV1QueryDepositWithdraw(this.extend(r, s));\n return this.parseTransactions(a.data, n, t, i);\n }\n async fetchWithdrawals(e = void 0, t = void 0, i = void 0, s = {}) {\n (i === void 0 || i > 100) && (i = 100), await this.loadMarkets();\n let n;\n e !== void 0 && (n = this.currency(e));\n const r = {\n type: \"withdraw\",\n direct: \"next\",\n from: 0\n // From 'id' ... if you want to get results after a particular transaction id, pass the id in params.from\n };\n n !== void 0 && (r.currency = n.id), i !== void 0 && (r.size = i);\n const a = await this.spotPrivateGetV1QueryDepositWithdraw(this.extend(r, s));\n return this.parseTransactions(a.data, n, t, i);\n }\n parseTransaction(e, t = void 0) {\n const i = this.safeInteger(e, \"created-at\"), s = this.safeCurrencyCode(this.safeString(e, \"currency\"));\n let n = this.safeString(e, \"type\");\n n === \"withdraw\" && (n = \"withdrawal\");\n let r = this.safeString(e, \"fee\");\n r !== void 0 && (r = P.stringAbs(r));\n const a = this.safeString(e, \"chain\");\n let o = this.safeString(e, \"tx-hash\");\n a === \"ETH\" && o.indexOf(\"0x\") < 0 && (o = \"0x\" + o);\n const u = this.safeString(e, \"sub-type\") === \"FAST\";\n return {\n info: e,\n id: this.safeString2(e, \"id\", \"data\"),\n txid: o,\n timestamp: i,\n datetime: this.iso8601(i),\n network: this.networkIdToEcid(a),\n address: this.safeString(e, \"address\"),\n addressTo: void 0,\n addressFrom: void 0,\n tag: this.safeString(e, \"address-tag\"),\n tagTo: void 0,\n tagFrom: void 0,\n type: n,\n amount: this.safeNumber(e, \"amount\"),\n currency: s,\n status: this.parseTransactionStatus(this.safeString(e, \"state\")),\n updated: this.safeInteger(e, \"updated-at\"),\n comment: void 0,\n internal: u,\n fee: {\n currency: s,\n cost: this.parseNumber(r),\n rate: void 0\n }\n };\n }\n parseTransactionStatus(e) {\n const t = {\n // deposit statuses\n unknown: \"failed\",\n confirming: \"pending\",\n confirmed: \"ok\",\n safe: \"ok\",\n orphan: \"failed\",\n // withdrawal statuses\n submitted: \"pending\",\n canceled: \"canceled\",\n reexamine: \"pending\",\n reject: \"failed\",\n pass: \"pending\",\n \"wallet-reject\": \"failed\",\n // 'confirmed': 'ok', // present in deposit statuses\n \"confirm-error\": \"failed\",\n repealed: \"failed\",\n \"wallet-transfer\": \"pending\",\n \"pre-transfer\": \"pending\"\n };\n return this.safeString(t, e, e);\n }\n async withdraw(e, t, i, s = void 0, n = {}) {\n [s, n] = this.handleWithdrawTagAndParams(s, n), await this.loadMarkets(), this.checkAddress(i);\n const r = this.currency(e), a = {\n address: i,\n currency: r.id.toLowerCase()\n };\n s !== void 0 && (a[\"addr-tag\"] = s);\n let o;\n [o, n] = this.handleEcidAndParams(n), o !== void 0 && (a.chain = this.ecidToNetworkId(o, e)), t = this.currencyToPrecision(e, t, o);\n const c = this.safeValue(this.options, \"withdraw\", {});\n if (this.safeBool(c, \"includeFee\", !1)) {\n let f = this.safeNumber(n, \"fee\");\n if (f === void 0) {\n const y = await this.fetchCurrencies();\n this.currencies = this.deepExtend(this.currencies, y);\n const w = this.safeValue(r.networks, o, {});\n if (f = this.safeNumber(w, \"fee\"), f === void 0)\n throw new ke().addMessage('withdraw() function can not find withdraw fee for chosen network. You need to re-load markets with \"exchange.loadMarkets(true)\", or provide the \"fee\" parameter').exchange(this.id);\n }\n const h = this.currencyToPrecision(e, f, o);\n n = this.omit(n, \"fee\");\n const l = this.numberToString(t), p = P.stringSub(l, h), m = parseFloat(p);\n a.fee = parseFloat(h), t = parseFloat(this.currencyToPrecision(e, m, o));\n }\n a.amount = t;\n const u = await this.spotPrivatePostV1DwWithdrawApiCreate(this.extend(a, n));\n return this.parseTransaction(u, r);\n }\n parseTransfer(e, t = void 0) {\n const i = this.safeString(e, \"data\"), s = this.safeCurrencyCode(void 0, t);\n return {\n info: e,\n id: i,\n timestamp: void 0,\n datetime: void 0,\n currency: s,\n amount: void 0,\n fromAccount: void 0,\n toAccount: void 0,\n status: void 0\n };\n }\n // https://www.htx.com/en-us/opend/newApiPages/?id=7ec4b62b-7773-11ed-9966-0242ac110003\n async fetchSubAccountBalances(e, t = {}) {\n await this.loadMarkets();\n const i = await this.privateGetAccountAccountsSubUid({\n \"sub-uid\": e\n }), s = this.safeValue(i, \"data\"), n = {};\n for (let r = 0; r < s.length; r++) {\n const a = s[r], o = this.safeValue(a, \"list\", []);\n for (let c = 0; c < o.length; c++) {\n const u = o[c], f = this.safeString(u, \"currency\"), h = this.safeCurrencyCode(f), l = this.safeString(a, \"type\"), p = this.safeValue(this.options, \"accountsById\", {}), m = this.safeValue(p, l, l);\n m in n || (n[m] = {}), n[m][h] = {\n free: this.safeString(u, \"available\"),\n used: this.safeString(u, \"debt\"),\n total: this.safeString(u, \"balance\")\n };\n }\n }\n return n;\n }\n // https://www.htx.com/en-us/opend/newApiPages/?id=7ec52a87-7773-11ed-9966-0242ac110003\n async getSubAccounts() {\n await this.loadMarkets();\n const e = await this.v2PrivateGetSubUserUserList();\n return this.safeValue(e, \"data\").map((i) => ({\n uid: i.uid\n }));\n }\n async subAccountTransfer(e, t, i, s, n = {}) {\n await this.loadMarkets();\n const r = this.currency(e), a = i === \"master\" ? \"master-transfer-out\" : \"master-transfer-in\", o = i === \"master\" ? s : i, c = {\n currency: r.id,\n amount: parseFloat(this.currencyToPrecision(e, t)),\n type: a,\n \"sub-uid\": o\n }, u = await this.privatePostSubuserTransfer(this.extend(c, n));\n return {\n transferId: this.safeValue(u, \"data\")\n };\n }\n async transfer(e, t, i, s, n = {}) {\n await this.loadMarkets();\n const r = this.currency(e), a = {\n currency: r.id,\n amount: parseFloat(this.currencyToPrecision(e, t))\n };\n let o;\n [o, n] = this.handleSubTypeAndParams(\"transfer\", void 0, n);\n let c = this.convertTypeToAccount(i), u = this.convertTypeToAccount(s);\n const f = u === \"cross\", h = c === \"cross\", l = this.inArray(u, this.ids), p = this.inArray(c, this.ids), m = c === \"pro\", y = u === \"pro\";\n if (m && y)\n throw new je().addMessage(\"Cannot make a transfer between \" + i + \" and \" + s).exchange(this.id);\n const w = c === \"futures\" || u === \"futures\";\n let S;\n if (w) {\n let b = c + \"-to-\" + u;\n b = this.safeString(n, \"type\", b), a.type = b, S = await this.spotPrivatePostV1FuturesTransfer(this.extend(a, n));\n } else if (m && f)\n S = await this.privatePostCrossMarginTransferIn(this.extend(a, n));\n else if (h && y)\n S = await this.privatePostCrossMarginTransferOut(this.extend(a, n));\n else if (m && l)\n a.symbol = u, S = await this.privatePostDwTransferInMargin(this.extend(a, n));\n else if (p && y)\n a.symbol = c, S = await this.privatePostDwTransferOutMargin(this.extend(a, n));\n else {\n if (o === \"linear\") {\n c === \"swap\" || i === \"linear-swap\" ? c = \"linear-swap\" : u = \"linear-swap\";\n let b = this.safeString(n, \"symbol\");\n n = this.omit(n, \"symbol\"), b !== void 0 ? (b = this.marketId(b), a[\"margin-account\"] = b) : a[\"margin-account\"] = \"USDT\";\n }\n a.from = m ? \"spot\" : c, a.to = y ? \"spot\" : u, S = await this.v2PrivatePostAccountTransfer(this.extend(a, n));\n }\n return this.parseTransfer(S, r);\n }\n async sign(e, t = \"public\", i = \"GET\", s = {}, n = void 0, r = void 0) {\n let a = \"/\";\n const o = this.omit(s, this.extractParams(e));\n if (typeof t == \"string\") {\n if (t === \"public\" || t === \"private\" ? a += this.version : (t === \"v2Public\" || t === \"v2Private\") && (a += \"v2\"), a += \"/\" + this.implodeParams(e, s), t === \"private\" || t === \"v2Private\") {\n this.checkRequiredCredentials();\n const c = this.ymdhms(this.nonce(), \"T\");\n let u = {\n SignatureMethod: \"HmacSHA256\",\n SignatureVersion: \"2\",\n AccessKeyId: this.apiKey,\n Timestamp: c\n };\n i !== \"POST\" && (u = this.extend(u, o));\n const f = this.keysort(u);\n let h = this.urlencode(f);\n const l = [i, this.hostname, a, h].join(`\n`);\n let p;\n this.externalSigner ? p = await this.externalSigner.sign({\n payload: this.encode(l),\n publicApiKey: this.apiKey,\n exchangeId: \"huobi\"\n // @todo replace by the id once migrated from ccxt to sdk exchange id\n }) : p = this.hmac(this.encode(l), this.encode(this.secret), Re, \"base64\"), h += \"&\" + this.urlencode({ Signature: p }), a += \"?\" + h, i === \"POST\" ? (r = this.json(o), n = {\n \"Content-Type\": \"application/json\"\n }) : n = {\n \"Content-Type\": \"application/x-www-form-urlencoded\"\n };\n } else\n Object.keys(o).length && (a += \"?\" + this.urlencode(o));\n a = this.implodeParams(this.urls.api[t], {\n hostname: this.hostname\n }) + a;\n } else {\n const c = this.safeString(t, 0), u = this.safeString(t, 1), f = this.safeString(t, 2), h = this.safeString(t, 3);\n let l, p = this.safeValue(this.urls.hostnames, c);\n if (typeof p != \"string\" && (p = this.safeValue(p, f), typeof p != \"string\" && h !== void 0 && (p = this.safeValue(p, h))), l = p, a += this.implodeParams(e, s), u === \"public\")\n Object.keys(o).length && (a += \"?\" + this.urlencode(o));\n else if (u === \"private\") {\n if (this.checkRequiredCredentials(), i === \"POST\") {\n const T = this.safeValue(this.options, \"broker\", {}), x = this.safeString(T, \"id\", \"AA03022abc\");\n e.indexOf(\"cancel\") === -1 && e.endsWith(\"order\") ? this.safeString(s, \"channel_code\") === void 0 && (s.channel_code = x) : e.endsWith(\"orders/place\") && this.safeString(s, \"client-order-id\") === void 0 && (s[\"client-order-id\"] = x + this.uuid());\n }\n const m = this.ymdhms(this.nonce(), \"T\");\n let y = {\n SignatureMethod: \"HmacSHA256\",\n SignatureVersion: \"2\",\n AccessKeyId: this.apiKey,\n Timestamp: m\n };\n i !== \"POST\" && (y = this.extend(y, o)), y = this.keysort(y);\n let w = this.urlencode(y);\n const S = [i, l, a, w].join(`\n`);\n let b;\n this.externalSigner ? b = await this.externalSigner.sign({\n payload: this.encode(S),\n publicApiKey: this.apiKey,\n exchangeId: \"huobi\"\n // @todo replace by the id once migrated from ccxt to sdk exchange id\n }) : b = this.hmac(this.encode(S), this.encode(this.secret), Re, \"base64\"), w += \"&\" + this.urlencode({ Signature: b }), a += \"?\" + w, i === \"POST\" ? (r = this.json(o), r.length === 2 && (r = \"{}\"), n = {\n \"Content-Type\": \"application/json\"\n }) : n = {\n \"Content-Type\": \"application/x-www-form-urlencoded\"\n };\n }\n a = this.implodeParams(this.urls.api[c], {\n hostname: l\n }) + a;\n }\n return { url: a, method: i, body: r, headers: n };\n }\n handleErrors(e, t, i, s, n, r, a, o, c) {\n if (a !== void 0) {\n if (\"status\" in a && this.safeString(a, \"status\") === \"error\") {\n const f = this.safeString2(a, \"err-code\", \"err_code\"), h = this.safeString2(a, \"err-msg\", \"err_msg\"), l = f + \": \" + h;\n throw this.throwBroadlyMatchedException(this.exceptions.broad, r, l), this.throwExactlyMatchedException(this.exceptions.exact, f, l), this.throwExactlyMatchedException(this.exceptions.exact, h, l), new O().addMessage(l).exchange(this.id);\n }\n if (\"code\" in a) {\n const u = this.safeString(a, \"code\"), f = this.safeString(a, \"message\"), h = u + \": \" + f;\n this.throwExactlyMatchedException(this.exceptions.exact, u, h);\n }\n }\n }\n parsePosition(e, t = void 0) {\n t = this.safeMarket(this.safeString(e, \"contract_code\"));\n const i = t.symbol, s = this.safeString(e, \"volume\"), n = this.safeValue(t, \"contractSize\"), r = this.numberToString(n), a = this.safeNumber(e, \"cost_open\"), o = this.safeString(e, \"position_margin\"), u = this.safeString(e, \"direction\") === \"buy\" ? \"long\" : \"short\", f = this.safeNumber(e, \"profit_unreal\");\n let h = this.safeString(e, \"margin_mode\");\n const l = this.safeString(e, \"lever_rate\"), p = P.stringMul(this.safeString(e, \"profit_rate\"), \"100\"), m = this.safeString(e, \"last_price\"), y = P.stringMul(s, r);\n let w;\n t.linear ? w = P.stringMul(y, m) : (w = P.stringDiv(y, m), h = \"cross\");\n const S = P.stringDiv(o, w), b = this.safeString(e, \"margin_balance\"), T = this.safeNumber(e, \"liquidation_price\"), x = this.safeString(e, \"adjust_factor\"), v = P.stringDiv(x, l), _ = P.stringMul(v, w), V = P.stringDiv(_, b);\n return this.safePosition({\n info: e,\n id: void 0,\n symbol: i,\n contracts: this.parseNumber(s),\n contractSize: n,\n entryPrice: a,\n collateral: this.parseNumber(b),\n side: u,\n unrealizedPnl: f,\n leverage: this.parseNumber(l),\n percentage: this.parseNumber(p),\n marginMode: h,\n notional: this.parseNumber(w),\n markPrice: void 0,\n lastPrice: void 0,\n liquidationPrice: T,\n initialMargin: this.parseNumber(o),\n initialMarginPercentage: this.parseNumber(S),\n maintenanceMargin: this.parseNumber(_),\n maintenanceMarginPercentage: this.parseNumber(v),\n marginRatio: this.parseNumber(V),\n timestamp: void 0,\n datetime: void 0,\n hedged: void 0,\n lastUpdateTimestamp: void 0,\n stopLossPrice: void 0,\n takeProfitPrice: void 0\n });\n }\n async fetchPositions(e = void 0, t = {}) {\n await this.loadMarkets(), e = this.marketSymbols(e);\n let i;\n if (e !== void 0) {\n const f = this.safeString(e, 0);\n i = this.market(f);\n }\n let s;\n [s, t] = this.handleMarginModeAndParams(\"fetchPositions\", t, \"cross\");\n let n;\n [n, t] = this.handleSubTypeAndParams(\"fetchPositions\", i, t, \"linear\");\n let r;\n [r, t] = this.handleMarketTypeAndParams(\"fetchPositions\", i, t), r === \"spot\" && (r = \"future\");\n let a;\n if (n === \"linear\")\n if (s === \"isolated\")\n a = await this.contractPrivatePostLinearSwapApiV1SwapPositionInfo(t);\n else if (s === \"cross\")\n a = await this.contractPrivatePostLinearSwapApiV1SwapCrossPositionInfo(t);\n else\n throw new ge(s).exchange(this.id);\n else if (r === \"future\")\n a = await this.contractPrivatePostApiV1ContractPositionInfo(t);\n else if (r === \"swap\")\n a = await this.contractPrivatePostSwapApiV1SwapPositionInfo(t);\n else\n throw new ge(r).exchange(this.id);\n const o = this.safeValue(a, \"data\", []), c = this.safeInteger(a, \"ts\"), u = [];\n for (let f = 0; f < o.length; f++) {\n const h = o[f], l = this.parsePosition(h);\n u.push(this.extend(l, {\n timestamp: c,\n datetime: this.iso8601(c)\n }));\n }\n return this.filterByArrayPositions(u, \"symbol\", e, !1);\n }\n async fetchPosition(e, t = {}) {\n await this.loadMarkets();\n const i = this.market(e);\n let s;\n [s, t] = this.handleMarginModeAndParams(\"fetchPosition\", t), s = s === void 0 ? \"cross\" : s;\n const [n, r] = this.handleMarketTypeAndParams(\"fetchPosition\", i, t), a = {};\n i.future && i.inverse ? a.symbol = i.settleId : (s === \"cross\" && (a.margin_account = \"USDT\"), a.contract_code = i.id);\n let o;\n if (i.linear)\n if (s === \"isolated\")\n o = await this.contractPrivatePostLinearSwapApiV1SwapAccountPositionInfo(this.extend(a, r));\n else if (s === \"cross\")\n o = await this.contractPrivatePostLinearSwapApiV1SwapCrossAccountPositionInfo(this.extend(a, r));\n else\n throw new ge(s).exchange(this.id);\n else if (n === \"future\")\n o = await this.contractPrivatePostApiV1ContractAccountPositionInfo(this.extend(a, r));\n else if (n === \"swap\")\n o = await this.contractPrivatePostSwapApiV1SwapAccountPositionInfo(this.extend(a, r));\n else\n throw new ge(n).exchange(this.id);\n const c = this.safeValue(o, \"data\");\n let u;\n s === \"cross\" ? u = c : u = this.safeValue(c, 0);\n const f = this.omit(u, [\"positions\"]), h = this.safeValue(u, \"positions\");\n let l;\n if (i.future && i.inverse)\n for (let y = 0; y < h.length; y++) {\n const w = h[y];\n if (w.contract_code === i.id) {\n l = w;\n break;\n }\n }\n else\n l = this.safeValue(h, 0);\n const p = this.safeInteger(o, \"ts\"), m = this.parsePosition(this.extend(l, f));\n return m.timestamp = p, m.datetime = this.iso8601(p), m;\n }\n parseLedgerEntryType(e) {\n const t = {\n trade: \"trade\",\n etf: \"trade\",\n \"transact-fee\": \"fee\",\n \"fee-deduction\": \"fee\",\n transfer: \"transfer\",\n credit: \"credit\",\n liquidation: \"trade\",\n interest: \"credit\",\n deposit: \"deposit\",\n withdraw: \"withdrawal\",\n \"withdraw-fee\": \"fee\",\n exchange: \"exchange\",\n \"other-types\": \"transfer\",\n rebate: \"rebate\"\n };\n return this.safeString(t, e, e);\n }\n parseLedgerEntry(e, t = void 0) {\n const i = this.safeString(e, \"transactId\"), s = this.safeString(e, \"currency\"), n = this.safeCurrencyCode(s, t), r = this.safeNumber(e, \"transactAmt\"), a = this.safeString(e, \"transferType\"), o = this.parseLedgerEntryType(a), c = this.safeString(e, \"direction\"), u = this.safeInteger(e, \"transactTime\"), f = this.iso8601(u), h = this.safeString(e, \"accountId\");\n return {\n id: i,\n direction: c,\n account: h,\n referenceId: i,\n referenceAccount: h,\n type: o,\n currency: n,\n amount: r,\n timestamp: u,\n datetime: f,\n before: void 0,\n after: void 0,\n status: void 0,\n fee: void 0,\n info: e\n };\n }\n async fetchLedger(e = void 0, t = void 0, i = void 0, s = {}) {\n await this.loadMarkets();\n let n = !1;\n if ([n, s] = this.handleOptionAndParams(s, \"fetchLedger\", \"paginate\"), n)\n return await this.fetchPaginatedCallDynamic(\"fetchLedger\", e, t, i, s, 500);\n let a = {\n accountId: await this.fetchAccountIdByType(\"spot\", void 0, void 0, s)\n // 'currency': code,\n // 'transactTypes': 'all', // default all\n // 'startTime': 1546272000000,\n // 'endTime': 1546272000000,\n // 'sort': asc, // asc, desc\n // 'limit': 100, // range 1-500\n // 'fromId': 323 // first record ID in this query for pagination\n }, o;\n e !== void 0 && (o = this.currency(e), a.currency = o.id), t !== void 0 && (a.startTime = t), i !== void 0 && (a.limit = i), [a, s] = this.handleUntilOption(\"endTime\", a, s);\n const c = await this.spotPrivateGetV2AccountLedger(this.extend(a, s)), u = this.safeValue(c, \"data\", []);\n return this.parseLedger(u, o, t, i);\n }\n async fetchDepositWithdrawFees(e = void 0, t = {}) {\n await this.loadMarkets();\n const i = await this.spotPublicGetV2ReferenceCurrencies(t), s = this.safeValue(i, \"data\");\n return this.parseDepositWithdrawFees(s, e, \"currency\");\n }\n parseDepositWithdrawFee(e, t = void 0) {\n const i = this.safeValue(e, \"chains\", []);\n let s = this.depositWithdrawFee(e);\n for (let n = 0; n < i.length; n++) {\n const r = i[n], a = this.safeString(r, \"chain\"), o = this.safeString(r, \"withdrawFeeType\"), c = this.networkIdToEcid(a);\n let u, f;\n o === \"fixed\" ? (u = this.safeNumber(r, \"transactFeeWithdraw\"), f = {\n fee: u,\n percentage: !1\n }) : (u = this.safeNumber(r, \"transactFeeRateWithdraw\"), f = {\n fee: u,\n percentage: !0\n }), s.networks[c] = {\n withdraw: f,\n deposit: {\n fee: void 0,\n percentage: void 0\n }\n }, s = this.assignDefaultDepositWithdrawFees(s, t);\n }\n return s;\n }\n async loadMarketsHelper(e, t) {\n var i, s;\n await super.loadMarketsHelper(e, t), this.options.ecidByChainIds = (i = await this.cache.get(fd(this.id), { clone: !1 })) == null ? void 0 : i.data, this.options.chainIdbyEcids = (s = await this.cache.get(ud(this.id), { clone: !1 })) == null ? void 0 : s.data;\n }\n}\nlet nw = class extends gt {\n};\nclass rw extends nw {\n describe() {\n return this.deepExtend(super.describe(), {\n id: \"kraken\",\n name: \"Kraken\",\n countries: [\"US\"],\n version: \"0\",\n rateLimit: 3e3,\n certified: !1,\n pro: !0,\n has: {\n CORS: void 0,\n spot: !0,\n margin: !0,\n swap: !1,\n future: !1,\n option: !1,\n cancelAllOrders: !0,\n cancelOrder: !0,\n cancelOrders: !0,\n createDepositAddress: !0,\n createOrder: !0,\n createTrailingAmountOrder: !0,\n editOrder: !0,\n fetchBalance: !0,\n fetchClosedOrders: !0,\n fetchCurrencies: !0,\n fetchDepositAddress: !0,\n fetchDeposits: !0,\n fetchLedger: !0,\n fetchLedgerEntry: !0,\n fetchMarkets: !0,\n fetchMyTrades: !0,\n fetchOHLCV: !0,\n fetchOpenOrders: !0,\n fetchOrder: !0,\n fetchOrderBook: !0,\n fetchOrderTrades: \"emulated\",\n fetchPositions: !0,\n fetchTicker: !0,\n fetchTickers: !0,\n fetchTime: !0,\n fetchTrades: !0,\n fetchTradingFee: !0,\n fetchTradingFees: !1,\n fetchWithdrawals: !0,\n transfer: !0,\n withdraw: !0\n },\n timeframes: {\n \"1m\": 1,\n \"5m\": 5,\n \"15m\": 15,\n \"30m\": 30,\n \"1h\": 60,\n \"4h\": 240,\n \"1d\": 1440,\n \"1w\": 10080,\n \"2w\": 21600\n },\n urls: {\n logo: \"https://user-images.githubusercontent.com/51840849/76173629-fc67fb00-61b1-11ea-84fe-f2de582f58a3.jpg\",\n api: {\n public: \"https://api.kraken.com\",\n private: \"https://api.kraken.com\",\n zendesk: \"https://kraken.zendesk.com/api/v2/help_center/en-us/articles\"\n // use the public zendesk api to receive article bodies and bypass new anti-spam protections\n },\n www: \"https://www.kraken.com\",\n doc: \"https://docs.kraken.com/rest/\",\n fees: \"https://www.kraken.com/en-us/features/fee-schedule\"\n },\n fees: {\n trading: {\n tierBased: !0,\n percentage: !0,\n taker: this.parseNumber(\"0.0026\"),\n maker: this.parseNumber(\"0.0016\"),\n tiers: {\n taker: [\n [this.parseNumber(\"0\"), this.parseNumber(\"0.0026\")],\n [this.parseNumber(\"50000\"), this.parseNumber(\"0.0024\")],\n [this.parseNumber(\"100000\"), this.parseNumber(\"0.0022\")],\n [this.parseNumber(\"250000\"), this.parseNumber(\"0.0020\")],\n [this.parseNumber(\"500000\"), this.parseNumber(\"0.0018\")],\n [this.parseNumber(\"1000000\"), this.parseNumber(\"0.0016\")],\n [this.parseNumber(\"2500000\"), this.parseNumber(\"0.0014\")],\n [this.parseNumber(\"5000000\"), this.parseNumber(\"0.0012\")],\n [this.parseNumber(\"10000000\"), this.parseNumber(\"0.0001\")]\n ],\n maker: [\n [this.parseNumber(\"0\"), this.parseNumber(\"0.0016\")],\n [this.parseNumber(\"50000\"), this.parseNumber(\"0.0014\")],\n [this.parseNumber(\"100000\"), this.parseNumber(\"0.0012\")],\n [this.parseNumber(\"250000\"), this.parseNumber(\"0.0010\")],\n [this.parseNumber(\"500000\"), this.parseNumber(\"0.0008\")],\n [this.parseNumber(\"1000000\"), this.parseNumber(\"0.0006\")],\n [this.parseNumber(\"2500000\"), this.parseNumber(\"0.0004\")],\n [this.parseNumber(\"5000000\"), this.parseNumber(\"0.0002\")],\n [this.parseNumber(\"10000000\"), this.parseNumber(\"0.0\")]\n ]\n }\n }\n },\n handleContentTypeApplicationZip: !0,\n api: {\n zendesk: {\n get: [\n // we should really refrain from putting fixed fee numbers and stop hardcoding\n // we will be using their web APIs to scrape all numbers from these articles\n \"360000292886\",\n \"201893608\"\n // -What-are-the-withdrawal-fees-\n ]\n },\n public: {\n get: {\n // public endpoint rate-limits are described in article: https://support.kraken.com/hc/en-us/articles/206548367-What-are-the-API-rate-limits-#1\n Assets: 1,\n AssetPairs: 1,\n Depth: 1,\n OHLC: 1,\n Spread: 1,\n SystemStatus: 1,\n Ticker: 1,\n Time: 1,\n Trades: 1\n }\n },\n private: {\n post: {\n AddOrder: 0,\n AddOrderBatch: 0,\n AddExport: 1,\n Balance: 1,\n CancelAll: 1,\n CancelAllOrdersAfter: 1,\n CancelOrder: 0,\n CancelOrderBatch: 0,\n ClosedOrders: 1,\n DepositAddresses: 1,\n DepositMethods: 1,\n DepositStatus: 1,\n EditOrder: 0,\n ExportStatus: 1,\n GetWebSocketsToken: 1,\n Ledgers: 2,\n OpenOrders: 1,\n OpenPositions: 1,\n QueryLedgers: 1,\n QueryOrders: 1,\n QueryTrades: 1,\n RetrieveExport: 1,\n RemoveExport: 1,\n BalanceEx: 1,\n TradeBalance: 1,\n TradesHistory: 2,\n TradeVolume: 1,\n Withdraw: 1,\n WithdrawCancel: 1,\n WithdrawInfo: 1,\n WithdrawMethods: 1,\n WithdrawAddresses: 1,\n WithdrawStatus: 1,\n WalletTransfer: 1,\n // sub accounts\n CreateSubaccount: 1,\n AccountTransfer: 1,\n // earn\n \"Earn/Allocate\": 1,\n \"Earn/Deallocate\": 1,\n \"Earn/AllocateStatus\": 1,\n \"Earn/DeallocateStatus\": 1,\n \"Earn/Strategies\": 1,\n \"Earn/Allocations\": 1\n }\n }\n },\n options: {\n marketsByAltname: {},\n timeDifference: 0,\n delistedMarketsById: {},\n // cannot withdraw/deposit these\n inactiveCurrencies: [\"CAD\", \"USD\", \"JPY\", \"GBP\"],\n networks: {\n ETH: \"ERC20\",\n TRX: \"TRC20\"\n },\n // used for deposit methods since they are different from withdrawal methods sometimes\n hardCodedMethodsToEcid: {\n \"Ethereum (ERC20)\": \"Ethereum\",\n \"1INCH - Ethereum (Unified)\": \"Ethereum\",\n \"AAVE - Ethereum (Unified)\": \"Ethereum\",\n \"ACH - Ethereum (Unified)\": \"Ethereum\",\n \"ADX - Ethereum (Unified)\": \"Ethereum\",\n \"AGLD - Ethereum (Unified)\": \"Ethereum\",\n \"ALCX - Ethereum (Unified)\": \"Ethereum\",\n \"ALICE - Ethereum (Unified)\": \"Ethereum\",\n \"ALPHA - Ethereum (Unified)\": \"Ethereum\",\n \"ANKR - Ethereum (Unified)\": \"Ethereum\",\n \"Link - Ethereum (Unified)\": \"Ethereum\",\n \"Marinade SOL (mSOL)\": \"Solana\",\n \"ETHW - Ethereum PoW (Unified)\": \"Ethereum PoW\",\n \"REPv2 - Ethereum (Unified)\": \"Ethereum\",\n \"TRC20 (USDC)\": \"Tron\",\n \"USDC.e - Polygon (Unified)\": \"Polygon (USDC.e)\",\n \"USDC - Optimism (Unified)\": \"Optimism\",\n \"USDC - Arbitrum One (Unified)\": \"Arbitrum One\",\n \"USDC - Polygon (Unified)\": \"Polygon\",\n \"USDC.e - Arbitrum One (Unified)\": \"Arbitrum One (USDC.e)\",\n \"USDC.e - Optimism (Unified)\": \"Optimism (USDC.e)\"\n },\n withdrawalNetworks: [],\n currenciesNetworks: {}\n },\n precisionMode: ct,\n exceptions: {\n exact: {\n \"EQuery:Invalid asset pair\": it,\n \"EAPI:Invalid key\": Z,\n \"EFunding:Unknown withdraw key\": et,\n \"EFunding:Invalid amount\": re,\n \"EFunding:Fee amount is greater than asset amount\": Xt,\n \"EService:Unavailable\": Te,\n \"EDatabase:Internal error\": Te,\n \"EService:Busy\": Te,\n \"EQuery:Unknown asset\": $e,\n \"EAPI:Rate limit exceeded\": Rt,\n \"EOrder:Rate limit exceeded\": Rt,\n \"EGeneral:Internal error\": Te,\n \"EGeneral:Temporary lockout\": Rt,\n \"EGeneral:Permission denied\": ee,\n \"EOrder:Unknown order\": k,\n \"EOrder:Order minimum not met\": g,\n \"EGeneral:Invalid arguments\": g,\n \"ESession:Invalid session\": Z,\n \"EAPI:Invalid nonce\": ze,\n \"EFunding:No funding method\": O,\n \"EFunding:Unknown asset\": $e,\n \"EService:Market in post_only mode\": dt,\n \"EGeneral:Too many requests\": Rt,\n \"ETrade:User Locked\": Ee\n // {\"error\":[\"ETrade:User Locked\"]}\n },\n broad: {\n \"Invalid order\": g,\n \"Invalid nonce\": ze,\n \"Insufficient funds\": re,\n \"Cancel pending\": O,\n \"Invalid arguments:volume\": g,\n \"Rate limit exceeded\": Rt\n },\n messages: {\n \"EGeneral:Invalid arguments:volume\": ye.ORDER_UNDER_MINIMUM\n }\n }\n });\n }\n feeToPrecision(e, t) {\n return this.decimalToPrecision(t, Et, this.markets[e].precision.amount, this.precisionMode);\n }\n async fetchMarkets(e = {}) {\n const t = await this.publicGetAssetPairs(e), i = this.safeValue(t, \"result\", {}), s = Object.keys(i);\n let n = [];\n for (let r = 0; r < s.length; r++) {\n const a = s[r], o = i[a], c = this.safeString(o, \"base\"), u = this.safeString(o, \"quote\"), f = this.safeCurrencyCode(c), h = this.safeCurrencyCode(u), l = a.indexOf(\".d\") >= 0, p = this.safeString(o, \"altname\"), m = this.safeValue(o, \"fees_maker\", []), y = this.safeValue(m, 0, []), w = this.safeString(y, 1);\n let S;\n w !== void 0 && (S = this.parseNumber(P.stringDiv(w, \"100\")));\n const b = this.safeValue(o, \"fees\", []), T = this.safeValue(b, 0, []), x = this.safeString(T, 1);\n let v;\n x !== void 0 && (v = this.parseNumber(P.stringDiv(x, \"100\")));\n const _ = this.safeValue(o, \"leverage_buy\", []), V = _.length, j = this.parseNumber(this.parsePrecision(this.safeString(o, \"pair_decimals\")));\n n.push({\n id: a,\n wsId: this.safeString(o, \"wsname\"),\n symbol: l ? p : f + \"/\" + h,\n base: f,\n quote: h,\n settle: void 0,\n baseId: c,\n quoteId: u,\n settleId: void 0,\n darkpool: l,\n altname: o.altname,\n type: \"spot\",\n spot: !0,\n margin: V > 0,\n swap: !1,\n future: !1,\n option: !1,\n active: !0,\n contract: !1,\n linear: void 0,\n inverse: void 0,\n taker: v,\n maker: S,\n contractSize: void 0,\n expiry: void 0,\n expiryDatetime: void 0,\n strike: void 0,\n optionType: void 0,\n precision: {\n amount: this.parseNumber(this.parsePrecision(this.safeString(o, \"lot_decimals\"))),\n price: j\n },\n limits: {\n leverage: {\n min: this.parseNumber(\"1\"),\n max: this.safeNumber(_, V - 1, 1)\n },\n amount: {\n min: this.safeNumber(o, \"ordermin\"),\n max: void 0\n },\n price: {\n min: j,\n max: void 0\n },\n cost: {\n min: this.safeNumber(o, \"costmin\"),\n max: void 0\n }\n },\n created: void 0,\n info: o\n });\n }\n return n = this.appendInactiveMarkets(n), this.options.marketsByAltname = this.indexBy(n, \"altname\"), n;\n }\n safeCurrency(e, t = void 0) {\n if (e !== void 0 && e.length > 3 && (e.indexOf(\"X\") === 0 || e.indexOf(\"Z\") === 0)) {\n if (e.indexOf(\".\") > 0)\n return super.safeCurrency(e, t);\n e = e.slice(1);\n }\n return super.safeCurrency(e, t);\n }\n appendInactiveMarkets(e) {\n const t = {\n amount: this.parseNumber(\"1e-8\"),\n price: this.parseNumber(\"1e-8\")\n }, i = { min: void 0, max: void 0 }, s = { min: t.price, max: void 0 }, r = { amount: { min: t.amount, max: void 0 }, price: s, cost: i }, a = {\n darkpool: !1,\n info: void 0,\n maker: void 0,\n taker: void 0,\n active: !1,\n precision: t,\n limits: r\n }, o = [\n // { 'id': 'XXLMZEUR', 'symbol': 'XLM/EUR', 'base': 'XLM', 'quote': 'EUR', 'altname': 'XLMEUR' },\n ];\n for (let c = 0; c < o.length; c++)\n e.push(this.extend(a, o[c]));\n return e;\n }\n async fetchStatus(e = {}) {\n const t = await this.publicGetSystemStatus(e), i = this.safeValue(t, \"result\", {}), s = this.safeString(i, \"status\"), n = this.safeString({ online: \"ok\", maintenance: \"maintenance\", cancel_only: \"maintenance\", post_only: \"maintenance\" }, s, \"maintenance\"), r = this.parse8601(this.safeString(i, \"timestamp\"));\n return {\n status: n,\n updated: r,\n eta: void 0,\n url: void 0,\n info: t\n };\n }\n async fetchWithdrawalMethods() {\n let e = this.safeValue(this.options, \"withdrawalNetworks\", []);\n if (e.length === 0 && this.checkRequiredCredentials(!1))\n try {\n const i = await this.privatePostWithdrawMethods();\n this.handleErrors(null, null, null, null, null, {}, i, null, null), e = this.safeValue(i, \"result\", []), this.options.withdrawalNetworks = e;\n } catch (i) {\n if (i instanceof ee)\n return [];\n throw i;\n }\n this.options.methodsByEcids = {}, this.options.ecidsByMethods = {};\n const t = {};\n for (let i = 0; i < e.length; i++) {\n const s = this.safeValue(e, i), n = this.safeString(s, \"asset\"), r = this.safeCurrencyCode(n), a = {\n info: s,\n network: this.safeString(s, \"network\"),\n withdraw: {\n min: this.parseNumber(this.safeString(s, \"minimum\")),\n max: void 0\n },\n withdraw_enabled: !0\n };\n this.options.methodsByEcids[r] = this.safeValue(this.options.methodsByEcids, r, {}), this.options.ecidsByMethods[r] = this.safeValue(this.options.ecidsByMethods, r, {});\n const o = this.safeString(a.info, \"method\");\n this.options.methodsByEcids[r][a.network] = o, this.options.ecidsByMethods[r][o] = a.network;\n const c = this.safeValue(t, r, []);\n c.push(a), t[r] = c;\n }\n return this.options.currenciesNetworks = t, e;\n }\n async fetchCurrencies(e = {}) {\n const t = await this.publicGetAssets(e);\n await this.fetchWithdrawalMethods();\n const i = this.safeValue(t, \"result\", {}), s = Object.keys(i), n = {};\n for (let r = 0; r < s.length; r++) {\n const a = s[r], o = i[a], c = this.safeCurrencyCode(this.safeString(o, \"altname\")), u = this.parseNumber(this.parsePrecision(this.safeString(o, \"decimals\"))), f = this.safeString(o, \"status\"), h = f === \"enabled\" || f === \"deposit_only\", l = f === \"enabled\" || f === \"withdrawal_only\", p = this.safeValue(this.options, \"currenciesNetworks\", {}), m = this.safeValue(p, c, []);\n n[c] = {\n id: a,\n code: c,\n info: o,\n name: c,\n active: h && l,\n deposit: h,\n withdraw: l,\n fee: void 0,\n precision: u,\n limits: {\n amount: {\n min: u,\n max: void 0\n },\n withdraw: {\n min: void 0,\n max: void 0\n }\n },\n networks: m\n };\n }\n return n;\n }\n async fetchTradingFee(e, t = {}) {\n await this.loadMarkets();\n const i = this.market(e), s = {\n pair: i.id,\n \"fee-info\": !0\n }, n = await this.privatePostTradeVolume(this.extend(s, t)), r = this.safeValue(n, \"result\", {});\n return this.parseTradingFee(r, i);\n }\n async getWhitelistedAddresses(e) {\n await this.loadMarkets();\n const t = await this.privatePostWithdrawAddresses(e), i = [];\n return this.safeValue(t, \"result\", []).forEach((n) => {\n const r = this.safeString(n, \"asset\"), a = this.safeString(n, \"method\"), o = this.safeCurrencyCode(r), c = this.methodToEcid(a, o);\n i.push({\n address: this.safeString(n, \"address\"),\n asset: o,\n method: a,\n key: this.safeString(n, \"key\"),\n verified: this.safeValue(n, \"verified\"),\n network: c\n });\n }), i;\n }\n methodToEcid(e, t) {\n if (Object.keys(this.options.ecidsByMethods).length === 0)\n throw new bs().addMessage(\"methodToEcid() - markets need to be loaded at first\").exchange(this.id);\n const n = this.safeValue(this.options.ecidsByMethods, t, {});\n let r = this.safeValue(n, e);\n if (r || (r = this.safeValue(this.options.hardCodedMethodsToEcid, e)), !r) {\n const a = e.replace(/\\s*\\((Unified|Hex)\\)/g, \"\").trim();\n r = this.safeValue(n, a);\n }\n if (!r) {\n const a = e.replace(/\\s*\\((Unified|Hex)\\)/g, \"\").replace(`${t} -`, \"\").trim();\n r = this.safeValue(n, a);\n }\n if (!r) {\n const a = this.options.withdrawalNetworks;\n for (let o = 0; o < a.length; o++) {\n const c = this.safeValue(a, o), u = this.safeString(c, \"asset\"), f = this.safeCurrencyCode(u), h = this.safeString(c, \"network\"), l = e.replace(/\\s*\\((Unified|Hex)\\)/g, \"\").trim();\n if (`${f} - ${h}` === l) {\n r = h;\n break;\n }\n }\n }\n if (!r) {\n const a = e.replace(`${t} -`, \"\").trim();\n r = this.safeValue(this.options.hardCodedMethodsToEcid, a);\n }\n return r;\n }\n parseTradingFee(e, t) {\n const i = this.safeValue(e, \"fees_maker\", {}), s = this.safeValue(e, \"fees\", {}), n = this.safeValue(i, t.id, {}), r = this.safeValue(s, t.id, {});\n return {\n info: e,\n symbol: t.symbol,\n maker: this.safeNumber(n, \"fee\"),\n taker: this.safeNumber(r, \"fee\"),\n percentage: !0,\n tierBased: !0\n };\n }\n parseBidAsk(e, t = 0, i = 1, s = 2) {\n const n = this.safeNumber(e, t), r = this.safeNumber(e, i), a = this.safeInteger(e, 2);\n return [n, r, a];\n }\n async fetchOrderBook(e, t = void 0, i = {}) {\n await this.loadMarkets();\n const s = this.market(e);\n if (s.darkpool)\n throw new ge(\"darkpool\").addMessage(\" fetchOrderBook() does not provide an order book for darkpool symbol \" + e).exchange(this.id);\n const n = {\n pair: s.id\n };\n t !== void 0 && (n.count = t);\n const r = await this.publicGetDepth(this.extend(n, i)), a = this.safeValue(r, \"result\", {});\n let o = this.safeValue(a, s.id);\n const c = this.safeValue(s, \"info\", {}), u = this.safeValue(c, \"wsname\");\n return u !== void 0 && (o = this.safeValue(a, u, o)), this.parseOrderBook(o, e);\n }\n parseTicker(e, t = void 0) {\n const i = this.safeSymbol(void 0, t), s = this.safeValue(e, \"v\", []), n = this.safeString(s, 1), r = this.safeValue(e, \"p\", []), a = this.safeString(r, 1), o = P.stringMul(n, a), c = this.safeValue(e, \"c\", []), u = this.safeString(c, 0), f = this.safeValue(e, \"h\", []), h = this.safeValue(e, \"l\", []), l = this.safeValue(e, \"b\", []), p = this.safeValue(e, \"a\", []);\n return this.safeTicker({\n symbol: i,\n timestamp: void 0,\n datetime: void 0,\n high: this.safeString(f, 1),\n low: this.safeString(h, 1),\n bid: this.safeString(l, 0),\n bidVolume: void 0,\n ask: this.safeString(p, 0),\n askVolume: void 0,\n vwap: a,\n open: this.safeString(e, \"o\"),\n close: u,\n last: u,\n previousClose: void 0,\n change: void 0,\n percentage: void 0,\n average: void 0,\n baseVolume: n,\n quoteVolume: o,\n info: e\n }, t);\n }\n async fetchTickers(e = void 0, t = {}) {\n await this.loadMarkets();\n const i = {};\n if (e !== void 0) {\n e = this.marketSymbols(e);\n const o = [];\n for (let c = 0; c < e.length; c++) {\n const u = e[c], f = this.markets[u];\n f.active && !f.darkpool && o.push(f.id);\n }\n i.pair = o.join(\",\");\n }\n const n = (await this.publicGetTicker(this.extend(i, t))).result, r = Object.keys(n), a = {};\n for (let o = 0; o < r.length; o++) {\n const c = r[o], u = this.safeMarket(c), f = u.symbol, h = n[c];\n a[f] = this.parseTicker(h, u);\n }\n return this.filterByArrayTickers(a, \"symbol\", e);\n }\n async fetchTicker(e, t = {}) {\n if (await this.loadMarkets(), e.indexOf(\".d\") >= 0)\n throw new k().addMessage(\"fetchTicker() does not provide a ticker for darkpool symbol \" + e).exchange(this.id);\n const s = this.market(e), n = {\n pair: s.id\n }, a = (await this.publicGetTicker(this.extend(n, t))).result[s.id];\n return this.parseTicker(a, s);\n }\n parseOHLCV(e, t = void 0) {\n return [\n this.safeTimestamp(e, 0),\n this.safeNumber(e, 1),\n this.safeNumber(e, 2),\n this.safeNumber(e, 3),\n this.safeNumber(e, 4),\n this.safeNumber(e, 6)\n ];\n }\n async fetchOHLCV(e, t = \"1m\", i = void 0, s = void 0, n = {}) {\n await this.loadMarkets();\n let r = !1;\n if ([r, n] = this.handleOptionAndParams(n, \"fetchOHLCV\", \"paginate\"), r)\n return await this.fetchPaginatedCallDeterministic(\"fetchOHLCV\", e, i, s, t, n, 720);\n const a = this.market(e), o = this.safeInteger(this.timeframes, t), c = {\n pair: a.id\n };\n o !== void 0 ? c.interval = o : c.interval = t, i !== void 0 && (c.since = this.numberToString(i) + \"000000\");\n const u = await this.publicGetOHLC(this.extend(c, n)), f = this.safeValue(u, \"result\", {}), h = this.safeValue(f, a.id, []);\n return this.parseOHLCVs(h, a, t, i, s);\n }\n parseLedgerEntryType(e) {\n const t = {\n trade: \"trade\",\n withdrawal: \"transaction\",\n deposit: \"transaction\",\n transfer: \"transfer\",\n margin: \"margin\"\n };\n return this.safeString(t, e, e);\n }\n parseLedgerEntry(e, t = void 0) {\n const i = this.safeString(e, \"id\");\n let s;\n const n = void 0, r = this.safeString(e, \"refid\"), a = void 0, o = this.parseLedgerEntryType(this.safeString(e, \"type\")), c = this.safeCurrencyCode(this.safeString(e, \"asset\"), t);\n let u = this.safeString(e, \"amount\");\n P.stringLt(u, \"0\") ? (s = \"out\", u = P.stringAbs(u)) : s = \"in\";\n const f = this.safeTimestamp(e, \"time\");\n return {\n info: e,\n id: i,\n direction: s,\n account: n,\n referenceId: r,\n referenceAccount: a,\n type: o,\n currency: c,\n amount: this.parseNumber(u),\n before: void 0,\n after: this.safeNumber(e, \"balance\"),\n status: \"ok\",\n timestamp: f,\n datetime: this.iso8601(f),\n fee: {\n cost: this.safeNumber(e, \"fee\"),\n currency: c\n }\n };\n }\n async fetchLedger(e = void 0, t = void 0, i = void 0, s = {}) {\n await this.loadMarkets();\n let n = {}, r;\n e !== void 0 && (r = this.currency(e), n.asset = r.id), t !== void 0 && (n.start = this.parseToInt(t / 1e3)), [n, s] = this.handleUntilOption(\"end\", n, s);\n const a = await this.privatePostLedgers(this.extend(n, s)), o = this.safeValue(a, \"result\", {}), c = this.safeValue(o, \"ledger\", {}), u = Object.keys(c), f = [];\n for (let h = 0; h < u.length; h++) {\n const l = u[h], p = c[l];\n p.id = l, f.push(p);\n }\n return this.parseLedger(f, r, t, i);\n }\n async fetchLedgerEntriesByIds(e, t = void 0, i = {}) {\n await this.loadMarkets(), e = e.join(\",\");\n const s = this.extend({\n id: e\n }, i), r = (await this.privatePostQueryLedgers(s)).result, a = Object.keys(r), o = [];\n for (let c = 0; c < a.length; c++) {\n const u = a[c], f = r[u];\n f.id = u, o.push(f);\n }\n return this.parseLedger(o);\n }\n async fetchLedgerEntry(e, t = void 0, i = {}) {\n return (await this.fetchLedgerEntriesByIds([e], t, i))[0];\n }\n parseTrade(e, t = void 0) {\n let i, s, n, r, a, o, c, u, f;\n if (Array.isArray(e))\n i = this.safeTimestamp(e, 2), s = e[3] === \"s\" ? \"sell\" : \"buy\", n = e[4] === \"l\" ? \"limit\" : \"market\", r = this.safeString(e, 0), a = this.safeString(e, 1), e.length > 6 && (o = this.safeString(e, 6));\n else if (typeof e == \"string\")\n o = e;\n else if (\"ordertxid\" in e) {\n const l = this.safeString(e, \"pair\"), p = this.findMarketByAltnameOrId(l);\n if (p !== void 0 ? t = p : l !== void 0 && (t = this.getDelistedMarketById(l)), c = this.safeString(e, \"ordertxid\"), o = this.safeString2(e, \"id\", \"postxid\"), i = this.safeTimestamp(e, \"time\"), s = this.safeString(e, \"type\"), n = this.safeString(e, \"ordertype\"), r = this.safeString(e, \"price\"), a = this.safeString(e, \"vol\"), \"fee\" in e) {\n let m;\n t !== void 0 && (m = t.quote), u = {\n cost: this.safeString(e, \"fee\"),\n currency: m\n };\n }\n }\n t !== void 0 && (f = t.symbol);\n const h = this.safeString(e, \"cost\");\n return this.safeTrade({\n id: o,\n order: c,\n info: e,\n timestamp: i,\n datetime: this.iso8601(i),\n symbol: f,\n type: n,\n side: s,\n takerOrMaker: void 0,\n price: r,\n amount: a,\n cost: h,\n fee: u\n }, t);\n }\n async fetchTrades(e, t = void 0, i = void 0, s = {}) {\n await this.loadMarkets();\n const n = this.market(e), r = n.id, a = {\n pair: r\n };\n t !== void 0 && (a.since = t * 1e6, a.since = t.toString() + \"000000\"), i !== void 0 && (a.count = i);\n const c = (await this.publicGetTrades(this.extend(a, s))).result, u = c[r], f = u.length;\n if (f <= 0)\n return [];\n const h = u[f - 1], l = this.safeString(c, \"last\");\n return h.push(l), this.parseTrades(u, n, t, i);\n }\n parseBalanceCustom(e, t) {\n const i = {\n info: e,\n timestamp: void 0,\n datetime: void 0\n }, s = this.safeValue(e, \"result\", {});\n if (t === \"earn\") {\n const n = this.safeValue(s, \"items\", []);\n for (let r = 0; r < n.length; r++) {\n const a = n[r], o = this.safeValue(a, \"native_asset\"), c = this.safeValue(a, \"amount_allocated\"), u = this.safeValue(a, \"total_rewarded\"), f = this.safeValue(c, \"total\"), h = this.safeNumber(f, \"native\"), l = this.safeNumber(u, \"native\"), p = h + l, m = this.safeCurrencyCode(o);\n i[m] = {\n free: 0,\n used: p,\n total: p\n };\n }\n } else {\n const n = Object.keys(s);\n for (let r = 0; r < n.length; r++) {\n const a = n[r], o = this.safeCurrencyCode(a), c = s[a], u = this.safeNumber(c, \"balance\", 0), f = this.safeNumber(c, \"credit\", 0), h = this.safeNumber(c, \"credit_used\", 0), l = this.safeNumber(c, \"hold_trade\", 0), p = this.safeNumber(c, \"debt\", 0), m = u + f - h - l, y = l + h, w = m + y;\n i[o] = {\n free: m,\n used: y,\n total: w,\n debt: p\n };\n }\n }\n return this.safeBalance(i);\n }\n async fetchBalance(e = {}) {\n await this.loadMarkets();\n const t = this.safeString(e, \"type\", \"spot\");\n let i;\n return t === \"earn\" ? i = await this.privatePostEarnAllocations(e) : i = await this.privatePostBalanceEx(e), this.parseBalanceCustom(i, t);\n }\n async createOrder(e, t, i, s, n = void 0, r = {}) {\n await this.loadMarkets();\n const o = {\n pair: this.market(e).id,\n type: i,\n ordertype: t,\n volume: this.amountToPrecision(e, s)\n }, c = this.orderRequest(\"createOrder()\", e, t, o, n, r), u = await this.privatePostAddOrder(this.extend(c[0], c[1])), f = this.safeValue(u, \"result\");\n return this.parseOrder(f);\n }\n findMarketByAltnameOrId(e) {\n const t = this.safeValue(this.options, \"marketsByAltname\", {});\n return e in t ? t[e] : this.safeMarket(e);\n }\n getDelistedMarketById(e) {\n if (e === void 0)\n return e;\n let t = this.safeValue(this.options.delistedMarketsById, e);\n if (t !== void 0)\n return t;\n const i = 0;\n let s = 3, n = 3, r = 6;\n e.length === 8 ? (s = 4, n = 4, r = 8) : e.length === 7 && (s = 4, n = 4, r = 7);\n const a = e.slice(i, s), o = e.slice(n, r), c = this.safeCurrencyCode(a), u = this.safeCurrencyCode(o);\n return t = {\n symbol: c + \"/\" + u,\n base: c,\n quote: u,\n baseId: a,\n quoteId: o\n }, this.options.delistedMarketsById[e] = t, t;\n }\n parseOrderStatus(e) {\n const t = {\n pending: \"open\",\n open: \"open\",\n closed: \"closed\",\n canceled: \"canceled\",\n expired: \"expired\"\n };\n return this.safeString(t, e, e);\n }\n parseOrderType(e) {\n const t = {\n \"take-profit\": \"market\",\n \"stop-loss-limit\": \"limit\",\n \"stop-loss\": \"market\",\n \"take-profit-limit\": \"limit\",\n \"trailing-stop-limit\": \"limit\"\n };\n return this.safeString(t, e, e);\n }\n parseOrder(e, t = void 0) {\n const i = this.safeValue(e, \"descr\", {}), s = this.safeString(i, \"order\", i);\n let n, r, a, o, c, u;\n if (s !== void 0) {\n const G = s.split(\" \");\n n = this.safeString(G, 0), c = this.safeString(G, 1), a = this.safeString(G, 2), r = this.safeString(G, 4), r === \"stop\" ? (u = this.safeString(G, 6), o = this.safeString(G, 9)) : r === \"limit\" && (o = this.safeString(G, 5));\n }\n n = this.safeString(i, \"type\", n), r = this.safeString(i, \"ordertype\", r), a = this.safeString(i, \"pair\", a);\n const f = this.findMarketByAltnameOrId(a);\n let h;\n f !== void 0 ? t = f : a !== void 0 && (t = this.getDelistedMarketById(a));\n const l = this.safeTimestamp(e, \"opentm\");\n c = this.safeString(e, \"vol\", c);\n const p = this.safeString(e, \"vol_exec\");\n let m;\n o = this.safeString(i, \"price\", o), o !== void 0 && o.endsWith(\"%\") && (o = void 0), (o === void 0 || P.stringEquals(o, \"0\")) && (o = this.safeString(i, \"price2\")), (o === void 0 || P.stringEquals(o, \"0\")) && (o = this.safeString(e, \"price\", o));\n const y = this.safeString(e, \"oflags\", \"\"), w = y.indexOf(\"post\") > -1, S = this.safeNumber(e, \"price\");\n t !== void 0 && (h = t.symbol, \"fee\" in e && (m = {\n cost: this.safeString(e, \"fee\"),\n rate: void 0\n }, y.indexOf(\"fciq\") >= 0 ? m.currency = t.quote : y.indexOf(\"fcib\") >= 0 && (m.currency = t.base)));\n const b = this.parseOrderStatus(this.safeString(e, \"status\"));\n let T = this.safeString2(e, \"id\", \"txid\");\n if (T === void 0 || T.slice(0, 1) === \"[\") {\n const G = this.safeValue(e, \"txid\");\n T = this.safeString(G, 0);\n }\n const x = this.safeString(e, \"userref\"), v = this.safeValue(e, \"trades\", []), _ = [];\n for (let G = 0; G < v.length; G++) {\n const W = v[G];\n typeof W == \"string\" ? _.push(this.safeTrade({ id: W, orderId: T, symbol: h, info: {} })) : _.push(W);\n }\n u = this.omitZero(this.safeString(e, \"stopprice\", u));\n let V, j;\n return r.startsWith(\"take-profit\") ? (j = this.safeString(i, \"price\"), o = this.omitZero(this.safeString(i, \"price2\"))) : r.startsWith(\"stop-loss\") && (V = this.safeString(i, \"price\"), o = this.omitZero(this.safeString(i, \"price2\"))), this.safeOrder({\n id: T,\n clientOrderId: x,\n info: e,\n timestamp: l,\n datetime: this.iso8601(l),\n lastTradeTimestamp: void 0,\n status: b,\n symbol: h,\n type: this.parseOrderType(r),\n timeInForce: void 0,\n postOnly: w,\n side: n,\n price: o,\n stopPrice: u,\n triggerPrice: u,\n takeProfitPrice: j,\n stopLossPrice: V,\n cost: void 0,\n amount: c,\n filled: p,\n average: S,\n remaining: void 0,\n fee: m,\n trades: _\n }, t);\n }\n orderRequest(e, t, i, s, n = void 0, r = {}) {\n const a = this.safeString2(r, \"userref\", \"clientOrderId\");\n r = this.omit(r, [\"userref\", \"clientOrderId\"]), a !== void 0 && (s.userref = a);\n const o = this.safeString(r, \"stopLossPrice\"), c = this.safeString(r, \"takeProfitPrice\"), u = o !== void 0, f = c !== void 0, h = u || f, l = this.safeString(r, \"trailingAmount\"), p = this.safeString(r, \"trailingLimitAmount\"), m = l !== void 0, y = i.endsWith(\"limit\");\n y && !m && (s.price = this.priceToPrecision(t, n));\n const w = this.safeValue2(r, \"reduceOnly\", \"reduce_only\");\n if (h)\n u ? (s.price = this.priceToPrecision(t, o), y ? s.ordertype = \"stop-loss-limit\" : s.ordertype = \"stop-loss\") : f && (s.price = this.priceToPrecision(t, c), y ? s.ordertype = \"take-profit-limit\" : s.ordertype = \"take-profit\"), y && (s.price2 = this.priceToPrecision(t, n));\n else if (m) {\n const v = this.safeString(r, \"trigger\", \"last\"), _ = \"+\" + l;\n if (s.trigger = v, y || p !== void 0) {\n const j = this.safeString(r, \"offset\", \"-\") + this.numberToString(p);\n s.price = _, s.price2 = j, s.ordertype = \"trailing-stop-limit\";\n } else\n s.price = _, s.ordertype = \"trailing-stop\";\n }\n w && (s.reduce_only = \"true\");\n let S = this.safeValue(r, \"close\");\n if (S !== void 0) {\n S = this.extend({}, S);\n const v = this.safeValue(S, \"price\");\n v !== void 0 && (S.price = this.priceToPrecision(t, v));\n const _ = this.safeValue(S, \"price2\");\n _ !== void 0 && (S.price2 = this.priceToPrecision(t, _)), s.close = S;\n }\n const b = this.safeString2(r, \"timeInForce\", \"timeinforce\");\n b !== void 0 && (s.timeinforce = b);\n const T = i === \"market\";\n let x;\n return [x, r] = this.handlePostOnly(T, !1, r), x && (s.oflags = \"post\"), r = this.omit(r, [\"timeInForce\", \"reduceOnly\", \"stopLossPrice\", \"takeProfitPrice\", \"trailingAmount\", \"trailingLimitAmount\", \"offset\"]), [s, r];\n }\n async editOrder(e, t, i, s, n = void 0, r = void 0, a = {}) {\n await this.loadMarkets();\n const o = this.market(t);\n if (!o.spot)\n throw new ge(o.type).addMessage(\"Only spot orders are accepted\").exchange(this.id);\n const c = {\n txid: e,\n pair: o.id\n };\n n !== void 0 && (c.volume = this.amountToPrecision(t, n));\n const u = this.orderRequest(\"editOrder()\", t, i, c, r, a), f = await this.privatePostEditOrder(this.extend(u[0], u[1])), h = this.safeValue(f, \"result\", {});\n return this.parseOrder(h, o);\n }\n async fetchOrder(e, t = void 0, i = {}) {\n await this.loadMarkets();\n const s = this.safeValue2(i, \"userref\", \"clientOrderId\"), n = {\n trades: !0\n // whether or not to include trades in output (optional, default false)\n // 'txid': id, // do not comma separate a list of ids - use fetchOrdersByIds instead\n // 'userref': 'optional', // restrict results to given user reference id (optional)\n };\n let r = i;\n s !== void 0 ? (n.userref = s, r = this.omit(i, [\"userref\", \"clientOrderId\"])) : n.txid = e;\n const a = await this.privatePostQueryOrders(this.extend(n, r)), o = this.safeValue(a, \"result\", []);\n if (!(e in o))\n throw new Se().addMessage(\"fetchOrder() could not find order id \" + e).exchange(this.id);\n return this.parseOrder(this.extend({ id: e }, o[e]));\n }\n async fetchOrderTrades(e, t = void 0, i = void 0, s = void 0, n = {}) {\n const r = this.safeValue(n, \"trades\"), a = [];\n if (r === void 0)\n throw new g(\"fetchOrderTrades() requires a unified order structure in the params argument or a 'trades' param (an array of trade id strings)\").exchange(this.id);\n for (let l = 0; l < r.length; l++) {\n const p = r[l];\n typeof p == \"string\" ? a.push(p) : a.push(p.id);\n }\n await this.loadMarkets(), t !== void 0 && (t = this.symbol(t));\n const o = this.safeValue(this.options, \"fetchOrderTrades\", {}), c = this.safeInteger(o, \"batchSize\", 20), u = a.length;\n let f = this.parseToInt(u / c);\n f = this.sum(f, 1);\n let h = [];\n for (let l = 0; l < f; l++) {\n const p = [];\n for (let x = 0; x < c; x++) {\n const v = this.sum(l * c, x);\n v < u && p.push(a[v]);\n }\n const m = {\n txid: p.join(\",\")\n }, y = await this.privatePostQueryTrades(m), w = this.safeValue(y, \"result\"), S = Object.keys(w);\n for (let x = 0; x < S.length; x++)\n w[S[x]].id = S[x];\n const b = this.parseTrades(w, void 0, i, s), T = this.filterBySymbol(b, t);\n h = this.arrayConcat(h, T);\n }\n return h;\n }\n async fetchOrdersByIds(e, t = void 0, i = {}) {\n await this.loadMarkets();\n const s = await this.privatePostQueryOrders(this.extend({\n trades: !0,\n txid: e.join(\",\")\n // comma delimited list of transaction ids to query info about (20 maximum)\n }, i)), n = this.safeValue(s, \"result\", {}), r = [], a = Object.keys(n);\n for (let o = 0; o < a.length; o++) {\n const c = a[o], u = n[c], f = this.parseOrder(this.extend({ id: c }, u));\n r.push(f);\n }\n return r;\n }\n async fetchMyTrades(e = void 0, t = void 0, i = void 0, s = {}) {\n await this.loadMarkets();\n const n = {\n // 'type': 'all', // any position, closed position, closing position, no position\n // 'trades': false, // whether or not to include trades related to position in output\n // 'start': 1234567890, // starting unix timestamp or trade tx id of results (exclusive)\n // 'end': 1234567890, // ending unix timestamp or trade tx id of results (inclusive)\n // 'ofs' = result offset\n };\n t !== void 0 && (n.start = this.parseToInt(t / 1e3));\n const a = (await this.privatePostTradesHistory(this.extend(n, s))).result.trades, o = Object.keys(a);\n for (let u = 0; u < o.length; u++)\n a[o[u]].id = o[u];\n let c;\n return e !== void 0 && (c = this.market(e)), this.parseTrades(a, c, t, i);\n }\n async cancelOrder(e, t = void 0, i = {}) {\n await this.loadMarkets();\n let s;\n const r = {\n txid: this.safeValue2(i, \"userref\", \"clientOrderId\", e)\n // order id or userref\n };\n i = this.omit(i, [\"userref\", \"clientOrderId\"]);\n try {\n s = await this.privatePostCancelOrder(this.extend(r, i));\n } catch (a) {\n throw this.last_http_response && this.last_http_response.indexOf(\"EOrder:Unknown order\") >= 0 ? new Se().addMessage(this.last_http_response).exchange(this.id) : a;\n }\n return s;\n }\n async cancelOrders(e, t = void 0, i = {}) {\n const s = {\n orders: e\n };\n return await this.privatePostCancelOrderBatch(this.extend(s, i));\n }\n async cancelAllOrders(e = void 0, t = {}) {\n return await this.loadMarkets(), await this.privatePostCancelAll(t);\n }\n async fetchOpenOrders(e = void 0, t = void 0, i = void 0, s = {}) {\n await this.loadMarkets();\n const n = {};\n t !== void 0 && (n.start = this.parseToInt(t / 1e3));\n let r = s;\n const a = this.safeValue2(s, \"userref\", \"clientOrderId\");\n a !== void 0 && (n.userref = a, r = this.omit(s, [\"userref\", \"clientOrderId\"]));\n const o = await this.privatePostOpenOrders(this.extend(n, r));\n let c;\n e !== void 0 && (c = this.market(e));\n const u = this.safeValue(o, \"result\", {}), f = this.safeValue(u, \"open\", []);\n return this.parseOrders(f, c, t, i);\n }\n async fetchClosedOrders(e = void 0, t = void 0, i = void 0, s = {}) {\n await this.loadMarkets();\n let n = {};\n t !== void 0 && (n.start = this.parseToInt(t / 1e3));\n let r = s;\n const a = this.safeValue2(s, \"userref\", \"clientOrderId\");\n a !== void 0 && (n.userref = a, r = this.omit(s, [\"userref\", \"clientOrderId\"])), [n, s] = this.handleUntilOption(\"end\", n, s);\n const o = await this.privatePostClosedOrders(this.extend(n, r));\n let c;\n e !== void 0 && (c = this.market(e));\n const u = this.safeValue(o, \"result\", {}), f = this.safeValue(u, \"closed\", []);\n return this.parseOrders(f, c, t, i);\n }\n parseTransactionStatus(e) {\n const t = {\n Initial: \"pending\",\n Pending: \"pending\",\n Success: \"ok\",\n Settled: \"pending\",\n Failure: \"failed\",\n Partial: \"ok\"\n };\n return this.safeString(t, e, e);\n }\n parseTransaction(e, t = void 0) {\n const i = this.safeString(e, \"refid\"), s = this.safeString(e, \"txid\"), n = this.safeTimestamp(e, \"time\"), r = this.safeString(e, \"asset\"), a = this.safeCurrencyCode(r, t), o = this.safeString(e, \"info\"), c = this.safeNumber(e, \"amount\");\n let u = this.safeString(e, \"network\");\n const f = this.safeString(e, \"method\");\n f !== void 0 && (u = this.methodToEcid(f, a));\n let h = this.parseTransactionStatus(this.safeString(e, \"status\"));\n const l = this.safeString(e, \"status-prop\");\n (l === \"on-hold\" || l === \"cancel-pending\" || l === \"onhold\") && (h = \"pending\");\n const w = this.safeString(e, \"type\");\n let S = this.safeNumber(e, \"fee\");\n return S === void 0 && w === \"deposit\" && (S = 0), {\n info: e,\n id: i,\n currency: a,\n amount: c,\n network: u,\n address: o,\n addressTo: void 0,\n addressFrom: void 0,\n tag: void 0,\n tagTo: void 0,\n tagFrom: void 0,\n status: h,\n type: w,\n updated: void 0,\n txid: s,\n timestamp: n,\n datetime: this.iso8601(n),\n comment: void 0,\n internal: void 0,\n fee: {\n currency: a,\n cost: S\n }\n };\n }\n parseTransactionsByType(e, t, i = void 0, s = void 0, n = void 0) {\n const r = [];\n for (let a = 0; a < t.length; a++) {\n const o = this.parseTransaction(this.extend({\n type: e\n }, t[a]));\n r.push(o);\n }\n return this.filterByCurrencySinceLimit(r, i, s, n);\n }\n async fetchDeposits(e = void 0, t = void 0, i = void 0, s = {}) {\n if (e === void 0)\n throw new g(\"fetchDeposits() requires a currency code argument\").exchange(this.id);\n await this.loadMarkets();\n const r = {\n asset: this.currency(e).id\n };\n t !== void 0 && (r.start = t);\n const a = await this.privatePostDepositStatus(this.extend(r, s));\n return this.parseTransactionsByType(\"deposit\", a.result, e, t, i);\n }\n async fetchTime(e = {}) {\n const t = await this.publicGetTime(e), i = this.safeValue(t, \"result\", {});\n return this.safeTimestamp(i, \"unixtime\");\n }\n async fetchWithdrawals(e = void 0, t = void 0, i = void 0, s = {}) {\n await this.loadMarkets();\n let n = !1;\n if ([n, s] = this.handleOptionAndParams(s, \"fetchWithdrawals\", \"paginate\"), n)\n return s.cursor = !0, await this.fetchPaginatedCallCursor(\"fetchWithdrawals\", e, t, i, s, \"next_cursor\", \"cursor\");\n const r = {};\n if (e !== void 0) {\n const u = this.currency(e);\n r.asset = u.id;\n }\n t !== void 0 && (r.since = t.toString());\n const a = await this.privatePostWithdrawStatus(this.extend(r, s));\n let o;\n const c = this.safeValue(a, \"result\");\n return Array.isArray(c) ? o = c : o = this.addPaginationCursorToResult(c), this.parseTransactionsByType(\"withdrawal\", o, e, t, i);\n }\n addPaginationCursorToResult(e) {\n const t = this.safeString(e, \"next_cursor\"), i = this.safeValue(e, \"withdrawals\"), s = i.length;\n if (t !== void 0 && s > 0) {\n const n = i[s - 1];\n n.next_cursor = t, i[s - 1] = n;\n }\n return i;\n }\n async createDepositAddress(e, t = {}) {\n const i = {\n new: \"true\"\n };\n return await this.fetchDepositAddress(e, this.extend(i, t));\n }\n async fetchDepositMethods(e, t = {}) {\n var o, c;\n await this.loadMarkets();\n const s = {\n asset: this.currency(e).id\n }, n = await this.privatePostDepositMethods(this.extend(s, t)), r = this.safeValue(n, \"result\", []), a = [];\n for (let u = 0; u < r.length; u++) {\n const f = this.safeValue(r, u, {}), h = this.safeString(f, \"method\"), l = this.safeString2(f, \"address-setup-fee\", \"fee\"), p = this.safeValue(f, \"limit\"), m = this.methodToEcid(h, e);\n m === void 0 && ((c = (o = this.options) == null ? void 0 : o.report) == null || c.call(o, \"unmapped_network\", {\n method: h,\n tokenSymbol: e\n })), a.push({\n method: h,\n network: m,\n fee: l,\n limit: p,\n info: f\n });\n }\n return a;\n }\n async fetchDepositAddress(e, t = {}) {\n await this.loadMarkets();\n const i = this.currency(e), s = this.safeValue(t, \"network\");\n if (!s)\n throw new g(\"network parameter is required\").exchange(this.id);\n const r = (await this.fetchDepositMethods(e)).filter((l) => this.safeString(l, \"network\") === s), a = this.safeValue(r, 0, void 0);\n if (!a)\n throw new It(e, s).exchange(this.id);\n const o = this.safeString(a, \"method\"), c = {\n asset: i.id,\n method: o\n }, u = await this.privatePostDepositAddresses(this.extend(c, t)), f = this.safeValue(u, \"result\", []), h = this.safeValue(f, 0, {});\n if (h === void 0)\n throw new It(e, s).exchange(this.id);\n return this.parseDepositAddress(h, i);\n }\n parseDepositAddress(e, t = void 0) {\n const i = this.safeString(e, \"address\"), s = this.safeString(e, \"tag\");\n t = this.safeCurrency(void 0, t);\n const n = t.code;\n return this.checkAddress(i), {\n currency: n,\n address: i,\n tag: s,\n network: void 0,\n info: e\n };\n }\n async withdraw(e, t, i, s = void 0, n = {}) {\n if ([s, n] = this.handleWithdrawTagAndParams(s, n), i !== void 0 && this.checkAddress(i), \"key\" in n) {\n await this.loadMarkets();\n const r = this.currency(e), a = this.currencyToPrecision(e, t), o = {\n asset: r.id,\n amount: a\n };\n i && (o.address = i);\n const c = await this.privatePostWithdraw(this.extend(o, n)), u = this.safeValue(c, \"result\", {});\n return this.parseTransaction(u, r);\n }\n throw new g(\"withdraw() requires a 'key' parameter (withdrawal key name, as set up on your account)\").exchange(this.id);\n }\n async fetchPositions(e = void 0, t = {}) {\n await this.loadMarkets();\n const i = {\n // 'txid': 'comma delimited list of transaction ids to restrict output to',\n // 'docalcs': false, // whether or not to include profit/loss calculations\n // 'consolidation': 'market', // what to consolidate the positions data around, market will consolidate positions based on market pair\n }, s = await this.privatePostOpenPositions(this.extend(i, t));\n return this.safeValue(s, \"result\");\n }\n parseAccount(e) {\n const t = {\n spot: \"Spot Wallet\",\n swap: \"Futures Wallet\",\n future: \"Futures Wallet\"\n };\n return this.safeString(t, e, e);\n }\n async transfer(e, t, i, s, n = {}) {\n await this.loadMarkets();\n const r = this.currency(e);\n i = this.parseAccount(i), s = this.parseAccount(s);\n const a = {\n amount: this.currencyToPrecision(e, t),\n from: i,\n to: s,\n asset: r.id\n };\n if (i !== \"Spot Wallet\")\n throw new je().addMessage(\"Transfer cannot transfer from \" + i + \" to \" + s + \". Use krakenfutures instead to transfer from the futures account.\").exchange(this.id);\n const o = await this.privatePostWalletTransfer(this.extend(a, n)), c = this.parseTransfer(o, r);\n return this.extend(c, {\n amount: t,\n fromAccount: i,\n toAccount: s\n });\n }\n parseTransfer(e, t = void 0) {\n const i = this.safeValue(e, \"result\", {}), s = this.safeString(i, \"refid\");\n return {\n info: e,\n id: s,\n timestamp: void 0,\n datetime: void 0,\n currency: this.safeString(t, \"code\"),\n amount: void 0,\n fromAccount: void 0,\n toAccount: void 0,\n status: \"sucess\"\n };\n }\n async sign(e, t = \"public\", i = \"GET\", s = {}, n = void 0, r = void 0) {\n let a = \"/\" + this.version + \"/\" + t + \"/\" + e;\n if (t === \"public\")\n Object.keys(s).length && (a += \"?\" + this.urlencodeNested(s));\n else if (t === \"private\") {\n const o = e === \"CancelOrderBatch\";\n this.checkRequiredCredentials();\n const c = this.nonce().toString();\n o ? r = this.json(this.extend({ nonce: c }, s)) : r = this.urlencodeNested(this.extend({ nonce: c }, s));\n const u = this.encode(c + r), f = this.hash(u, Re, \"binary\"), h = this.encode(a), l = this.binaryConcat(h, f);\n let p;\n if (this.externalSigner)\n p = await this.externalSigner.sign({\n payload: l,\n publicApiKey: this.apiKey,\n exchangeId: this.id\n });\n else {\n const m = this.base64ToBinary(this.secret);\n p = this.hmac(l, m, Ss, \"base64\");\n }\n n = {\n \"API-Key\": this.apiKey,\n \"API-Sign\": p\n // 'Content-Type': 'application/x-www-form-urlencoded',\n }, o ? n[\"Content-Type\"] = \"application/json\" : n[\"Content-Type\"] = \"application/x-www-form-urlencoded\";\n } else\n a = \"/\" + e;\n return a = this.urls.api[t] + a, { url: a, method: i, body: r, headers: n };\n }\n nonce() {\n return this.milliseconds() - this.options.timeDifference;\n }\n handleErrors(e, t, i, s, n, r, a, o, c) {\n if (r) {\n if (e === 520)\n throw new Te().addMessage(e.toString() + \": \" + t).exchange(this.id);\n const u = this.safeValue(a, \"error\", []);\n if (u.length > 0) {\n for (let f = 0; f < u.length; f++) {\n const h = u[f], l = h;\n this.throwExactlyMatchedException(this.exceptions.exact, h, l), this.throwBroadlyMatchedException(this.exceptions.broad, h, l);\n }\n throw new O().addMessage(u.join(\", \")).exchange(this.id);\n }\n }\n }\n}\nlet aw = class extends gt {\n};\nclass ow extends aw {\n describe() {\n return this.deepExtend(super.describe(), {\n id: \"kucoin\",\n name: \"KuCoin\",\n countries: [\"SC\"],\n rateLimit: 10,\n version: \"v2\",\n certified: !0,\n pro: !0,\n comment: \"Platform 2.0\",\n quoteJsonNumbers: !1,\n has: {\n CORS: void 0,\n spot: !0,\n margin: !0,\n swap: !1,\n future: !1,\n option: !1,\n cancelAllOrders: !0,\n cancelOrder: !0,\n createDepositAddress: !0,\n createMarketBuyOrderWithCost: !0,\n createMarketOrderWithCost: !0,\n createMarketSellOrderWithCost: !0,\n createOrder: !0,\n createOrders: !0,\n createTriggerOrder: !0,\n editOrder: !0,\n fetchAccounts: !0,\n fetchBalance: !0,\n fetchClosedOrders: !0,\n fetchCurrencies: !0,\n fetchDepositAddress: !0,\n fetchDepositAddressesByNetwork: !0,\n fetchDeposits: !0,\n fetchDepositWithdrawFee: !0,\n fetchDepositWithdrawFees: !0,\n fetchLedger: !0,\n fetchMarkets: !0,\n fetchMyTrades: !0,\n fetchOHLCV: !0,\n fetchOpenOrders: !0,\n fetchOrder: !0,\n fetchOrderBook: !0,\n fetchOrderBooks: !1,\n fetchOrdersByStatus: !0,\n fetchOrderTrades: !0,\n fetchStatus: !0,\n fetchTicker: !0,\n fetchTickers: !0,\n fetchTime: !0,\n fetchTrades: !0,\n fetchTradingFee: !0,\n fetchTradingFees: !1,\n fetchTransactionFee: !0,\n fetchTransfers: !1,\n fetchWithdrawals: !0,\n transfer: !0,\n withdraw: !0\n },\n urls: {\n logo: \"https://user-images.githubusercontent.com/51840849/87295558-132aaf80-c50e-11ea-9801-a2fb0c57c799.jpg\",\n // https://www.kucoin.com/ucenter/signup?rcode=E5wkqe - I removed the code for now, because CWS is blocking until we explain our affiliate program to our users\n referral: \"https://www.kucoin.com/ucenter/signup\",\n api: {\n public: \"https://api.kucoin.com\",\n private: \"https://api.kucoin.com\",\n futuresPrivate: \"https://api-futures.kucoin.com\",\n futuresPublic: \"https://api-futures.kucoin.com\",\n webExchange: \"https://kucoin.com/_api\"\n },\n www: \"https://www.kucoin.com\",\n doc: [\n \"https://docs.kucoin.com\"\n ]\n },\n requiredCredentials: {\n apiKey: !0,\n secret: !0,\n password: !0\n },\n api: {\n // level VIP0\n // Spot => 3000/30s => 100/s\n // Weight = x => 100/(100/x) = x\n // Futures Management Public => 2000/30s => 200/3/s\n // Weight = x => 100/(200/3/x) = x*1.5\n public: {\n get: {\n // spot trading\n currencies: 4.5,\n \"currencies/{currency}\": 4.5,\n symbols: 6,\n \"market/orderbook/level1\": 3,\n \"market/allTickers\": 22.5,\n \"market/stats\": 22.5,\n markets: 4.5,\n \"market/orderbook/level{level}_{limit}\": 6,\n \"market/orderbook/level2_20\": 3,\n \"market/orderbook/level2_100\": 6,\n \"market/histories\": 4.5,\n \"market/candles\": 4.5,\n prices: 4.5,\n timestamp: 4.5,\n status: 4.5,\n // margin trading\n \"mark-price/{symbol}/current\": 3,\n \"margin/config\": 25\n // 25SW\n },\n post: {\n // ws\n \"bullet-public\": 15\n // 10PW\n }\n },\n private: {\n get: {\n // account\n \"user-info\": 30,\n accounts: 7.5,\n \"accounts/{accountId}\": 7.5,\n \"accounts/ledgers\": 3,\n \"hf/accounts/ledgers\": 2,\n \"hf/margin/account/ledgers\": 2,\n \"transaction-history\": 3,\n \"sub/user\": 30,\n \"sub-accounts/{subUserId}\": 22.5,\n \"sub-accounts\": 30,\n \"sub/api-key\": 30,\n // funding\n \"margin/account\": 40,\n \"margin/accounts\": 15,\n \"isolated/accounts\": 15,\n \"deposit-addresses\": 7.5,\n deposits: 7.5,\n \"hist-deposits\": 7.5,\n withdrawals: 30,\n \"hist-withdrawals\": 30,\n \"withdrawals/quotas\": 30,\n \"accounts/transferable\": 30,\n \"transfer-list\": 30,\n \"base-fee\": 3,\n \"trade-fees\": 3,\n // spot trading\n \"market/orderbook/level{level}\": 3,\n \"market/orderbook/level2\": 3,\n \"market/orderbook/level3\": 3,\n \"hf/orders/active\": 2,\n \"hf/orders/active/symbols\": 2,\n \"hf/orders/done\": 2,\n \"hf/orders/{orderId}\": 2,\n \"hf/orders/client-order/{clientOid}\": 2,\n \"hf/orders/dead-cancel-all/query\": 2,\n \"hf/fills\": 2,\n orders: 2,\n \"limit/orders\": 3,\n \"orders/{orderId}\": 2,\n \"order/client-order/{clientOid}\": 3,\n fills: 10,\n \"limit/fills\": 20,\n \"stop-order\": 8,\n \"stop-order/{orderId}\": 3,\n \"stop-order/queryOrderByClientOid\": 3,\n \"oco/order/{orderId}\": 2,\n \"oco/order/details/{orderId}\": 2,\n \"oco/client-order/{clientOid}\": 2,\n \"oco/orders\": 2,\n // margin trading\n \"hf/margin/orders/active\": 4,\n \"hf/margin/orders/done\": 10,\n \"hf/margin/orders/{orderId}\": 4,\n \"hf/margin/orders/client-order/{clientOid}\": 5,\n \"hf/margin/fills\": 5,\n \"etf/info\": 25,\n \"margin/currencies\": 20,\n \"risk/limit/strategy\": 20,\n \"isolated/symbols\": 20,\n \"isolated/account/{symbol}\": 50,\n \"margin/borrow\": 15,\n \"margin/repay\": 15,\n \"project/list\": 10,\n \"project/marketInterestRate\": 7.5,\n \"redeem/orders\": 10,\n \"purchase/orders\": 10,\n \"earn/hold-assets\": 5\n // 5SW\n },\n post: {\n // account\n \"sub/user/created\": 22.5,\n \"sub/api-key\": 30,\n \"sub/api-key/update\": 45,\n // funding\n \"deposit-addresses\": 30,\n withdrawals: 7.5,\n \"accounts/universal-transfer\": 6,\n \"accounts/sub-transfer\": 45,\n \"accounts/inner-transfer\": 15,\n \"transfer-out\": 30,\n \"transfer-in\": 30,\n // spot trading\n \"hf/orders\": 1,\n \"hf/orders/test\": 1,\n \"hf/orders/sync\": 1,\n \"hf/orders/multi\": 1,\n \"hf/orders/multi/sync\": 1,\n \"hf/orders/alter\": 3,\n \"hf/orders/dead-cancel-all\": 2,\n orders: 2,\n \"orders/test\": 2,\n \"orders/multi\": 3,\n \"stop-order\": 2,\n \"oco/order\": 2,\n // margin trading\n \"hf/margin/order\": 5,\n \"hf/margin/order/test\": 5,\n \"margin/order\": 5,\n \"margin/order/test\": 5,\n \"margin/borrow\": 15,\n \"margin/repay\": 10,\n purchase: 15,\n redeem: 15,\n \"lend/purchase/update\": 10,\n // ws\n \"bullet-private\": 10\n // 10SW\n },\n delete: {\n // account\n \"sub/api-key\": 45,\n // funding\n \"withdrawals/{withdrawalId}\": 30,\n // spot trading\n \"hf/orders/{orderId}\": 1,\n \"hf/orders/sync/{orderId}\": 1,\n \"hf/orders/client-order/{clientOid}\": 1,\n \"hf/orders/sync/client-order/{clientOid}\": 1,\n \"hf/orders/cancel/{orderId}\": 2,\n \"hf/orders\": 2,\n \"hf/orders/cancelAll\": 30,\n \"orders/{orderId}\": 3,\n \"order/client-order/{clientOid}\": 5,\n orders: 20,\n \"stop-order/{orderId}\": 3,\n \"stop-order/cancelOrderByClientOid\": 5,\n \"stop-order/cancel\": 3,\n \"oco/order/{orderId}\": 3,\n \"oco/client-order/{clientOid}\": 3,\n \"oco/orders\": 3,\n // margin trading\n \"hf/margin/orders/{orderId}\": 5,\n \"hf/margin/orders/client-order/{clientOid}\": 5,\n \"hf/margin/orders\": 10\n // 10SW\n }\n },\n futuresPublic: {\n get: {\n \"contracts/active\": 4.5,\n \"contracts/{symbol}\": 4.5,\n ticker: 3,\n \"level2/snapshot\": 4.5,\n \"level2/depth20\": 7.5,\n \"level2/depth100\": 15,\n \"trade/history\": 7.5,\n \"kline/query\": 4.5,\n \"interest/query\": 7.5,\n \"index/query\": 3,\n \"mark-price/{symbol}/current\": 4.5,\n \"premium/query\": 4.5,\n \"trade-statistics\": 4.5,\n \"funding-rate/{symbol}/current\": 3,\n \"contract/funding-rates\": 7.5,\n timestamp: 3,\n status: 6,\n // ?\n \"level2/message/query\": 1.3953\n },\n post: {\n // ws\n \"bullet-public\": 15\n // 10PW\n }\n },\n futuresPrivate: {\n get: {\n // account\n \"transaction-history\": 3,\n // funding\n \"account-overview\": 7.5,\n \"account-overview-all\": 9,\n \"transfer-list\": 30,\n // futures\n orders: 3,\n stopOrders: 9,\n recentDoneOrders: 7.5,\n \"orders/{orderId}\": 7.5,\n \"orders/byClientOid\": 7.5,\n fills: 7.5,\n recentFills: 4.5,\n openOrderStatistics: 15,\n position: 3,\n positions: 3,\n \"margin/maxWithdrawMargin\": 15,\n \"contracts/risk-limit/{symbol}\": 7.5,\n \"funding-history\": 7.5\n // 5FW\n },\n post: {\n // funding\n \"transfer-out\": 30,\n \"transfer-in\": 30,\n // futures\n orders: 3,\n \"orders/test\": 3,\n \"orders/multi\": 4.5,\n \"position/margin/auto-deposit-status\": 6,\n \"margin/withdrawMargin\": 15,\n \"position/margin/deposit-margin\": 6,\n \"position/risk-limit-level/change\": 6,\n // ws\n \"bullet-private\": 15\n // 10FW\n },\n delete: {\n \"orders/{orderId}\": 1.5,\n \"orders/client-order/{clientOid}\": 1.5,\n orders: 45,\n stopOrders: 22.5\n // 15FW\n }\n },\n webExchange: {\n get: {\n \"currency/currency/chain-info\": 1\n // this is temporary from webApi\n }\n }\n },\n timeframes: {\n \"1m\": \"1min\",\n \"3m\": \"3min\",\n \"5m\": \"5min\",\n \"15m\": \"15min\",\n \"30m\": \"30min\",\n \"1h\": \"1hour\",\n \"2h\": \"2hour\",\n \"4h\": \"4hour\",\n \"6h\": \"6hour\",\n \"8h\": \"8hour\",\n \"12h\": \"12hour\",\n \"1d\": \"1day\",\n \"1w\": \"1week\"\n },\n precisionMode: ct,\n exceptions: {\n exact: {\n \"order not exist\": Se,\n \"order not exist.\": Se,\n order_not_exist: Se,\n order_not_exist_or_not_allow_to_cancel: k,\n \"Order size below the minimum requirement.\": g,\n \"Withdrawal amount is below the minimum requirement.\": Xt,\n \"Unsuccessful! Exceeded the max. funds out-transfer limit\": re,\n 400: be,\n 401: Z,\n 403: pe,\n 404: pe,\n 405: pe,\n 415: pe,\n 429: Ae,\n 500: Te,\n 503: Te,\n 101030: ee,\n 103e3: g,\n 130101: g,\n 130102: O,\n 130103: Se,\n 130104: O,\n 130105: re,\n 130106: O,\n 130107: O,\n 130108: Se,\n 130201: ee,\n 130202: O,\n 130203: re,\n 130204: O,\n 200004: re,\n 210014: g,\n 210021: re,\n 230003: re,\n 26e4: mr,\n 260100: re,\n 260325: gi,\n 3e5: k,\n 4e5: g,\n 400001: Z,\n 400002: ze,\n 400003: Pt,\n 400004: Pt,\n 400005: Z,\n 400006: Z,\n 400007: ee,\n 400008: O,\n 400100: O,\n 400200: ee,\n 400350: k,\n 400370: g,\n 400400: g,\n 400500: go,\n 400600: g,\n 400760: g,\n 401e3: g,\n 411100: Ee,\n 415e3: g,\n 400303: ee,\n 5e5: Te,\n 260220: It,\n 900014: g\n // {\"code\":\"900014\",\"msg\":\"Invalid chainId\"}\n },\n broad: {\n \"Exceeded the access frequency\": Ae,\n \"require more permission\": ee\n },\n messages: {\n \"The quantity is below the minimum requirement\": ye.ORDER_UNDER_MINIMUM\n }\n },\n fees: {\n trading: {\n tierBased: !0,\n percentage: !0,\n taker: this.parseNumber(\"0.001\"),\n maker: this.parseNumber(\"0.001\"),\n tiers: {\n taker: [\n [this.parseNumber(\"0\"), this.parseNumber(\"0.001\")],\n [this.parseNumber(\"50\"), this.parseNumber(\"0.001\")],\n [this.parseNumber(\"200\"), this.parseNumber(\"0.0009\")],\n [this.parseNumber(\"500\"), this.parseNumber(\"0.0008\")],\n [this.parseNumber(\"1000\"), this.parseNumber(\"0.0007\")],\n [this.parseNumber(\"2000\"), this.parseNumber(\"0.0007\")],\n [this.parseNumber(\"4000\"), this.parseNumber(\"0.0006\")],\n [this.parseNumber(\"8000\"), this.parseNumber(\"0.0005\")],\n [this.parseNumber(\"15000\"), this.parseNumber(\"0.00045\")],\n [this.parseNumber(\"25000\"), this.parseNumber(\"0.0004\")],\n [this.parseNumber(\"40000\"), this.parseNumber(\"0.00035\")],\n [this.parseNumber(\"60000\"), this.parseNumber(\"0.0003\")],\n [this.parseNumber(\"80000\"), this.parseNumber(\"0.00025\")]\n ],\n maker: [\n [this.parseNumber(\"0\"), this.parseNumber(\"0.001\")],\n [this.parseNumber(\"50\"), this.parseNumber(\"0.0009\")],\n [this.parseNumber(\"200\"), this.parseNumber(\"0.0007\")],\n [this.parseNumber(\"500\"), this.parseNumber(\"0.0005\")],\n [this.parseNumber(\"1000\"), this.parseNumber(\"0.0003\")],\n [this.parseNumber(\"2000\"), this.parseNumber(\"0\")],\n [this.parseNumber(\"4000\"), this.parseNumber(\"0\")],\n [this.parseNumber(\"8000\"), this.parseNumber(\"0\")],\n [this.parseNumber(\"15000\"), this.parseNumber(\"-0.00005\")],\n [this.parseNumber(\"25000\"), this.parseNumber(\"-0.00005\")],\n [this.parseNumber(\"40000\"), this.parseNumber(\"-0.00005\")],\n [this.parseNumber(\"60000\"), this.parseNumber(\"-0.00005\")],\n [this.parseNumber(\"80000\"), this.parseNumber(\"-0.00005\")]\n ]\n }\n },\n funding: {\n tierBased: !1,\n percentage: !1,\n withdraw: {},\n deposit: {}\n }\n },\n options: {\n version: \"v1\",\n timeDifference: 0,\n symbolSeparator: \"-\",\n fetchMyTradesMethod: \"private_get_fills\",\n fetchCurrencies: {\n webApiEnable: !0,\n webApiRetries: 1,\n webApiMuteFailure: !0\n },\n fetchMarkets: {\n fetchTickersFees: !0\n },\n withdraw: {\n includeFee: !1\n },\n // endpoint versions\n versions: {\n public: {\n GET: {\n // spot trading\n currencies: \"v3\",\n \"currencies/{currency}\": \"v3\",\n symbols: \"v2\"\n }\n },\n private: {\n GET: {\n // account\n \"user-info\": \"v2\",\n \"hf/margin/account/ledgers\": \"v3\",\n \"sub/user\": \"v2\",\n \"sub-accounts\": \"v2\",\n // funding\n \"margin/accounts\": \"v3\",\n \"isolated/accounts\": \"v3\",\n // 'deposit-addresses': 'v2',\n \"deposit-addresses\": \"v1\",\n // spot trading\n \"market/orderbook/level2\": \"v3\",\n \"market/orderbook/level3\": \"v3\",\n \"market/orderbook/level{level}\": \"v3\",\n \"oco/order/{orderId}\": \"v3\",\n \"oco/order/details/{orderId}\": \"v3\",\n \"oco/client-order/{clientOid}\": \"v3\",\n \"oco/orders\": \"v3\",\n // margin trading\n \"hf/margin/orders/active\": \"v3\",\n \"hf/margin/orders/done\": \"v3\",\n \"hf/margin/orders/{orderId}\": \"v3\",\n \"hf/margin/orders/client-order/{clientOid}\": \"v3\",\n \"hf/margin/fills\": \"v3\",\n \"etf/info\": \"v3\",\n \"margin/currencies\": \"v3\",\n \"margin/borrow\": \"v3\",\n \"margin/repay\": \"v3\",\n \"project/list\": \"v3\",\n \"project/marketInterestRate\": \"v3\",\n \"redeem/orders\": \"v3\",\n \"purchase/orders\": \"v3\"\n },\n POST: {\n // account\n \"sub/user/created\": \"v2\",\n // funding\n \"accounts/universal-transfer\": \"v3\",\n \"accounts/sub-transfer\": \"v2\",\n \"accounts/inner-transfer\": \"v2\",\n \"transfer-out\": \"v3\",\n // spot trading\n \"oco/order\": \"v3\",\n // margin trading\n \"hf/margin/order\": \"v3\",\n \"hf/margin/order/test\": \"v3\",\n \"margin/borrow\": \"v3\",\n \"margin/repay\": \"v3\",\n purchase: \"v3\",\n redeem: \"v3\",\n \"lend/purchase/update\": \"v3\"\n },\n DELETE: {\n // account\n // funding\n // spot trading\n \"hf/margin/orders/{orderId}\": \"v3\",\n \"hf/margin/orders/client-order/{clientOid}\": \"v3\",\n \"hf/margin/orders\": \"v3\",\n \"oco/order/{orderId}\": \"v3\",\n \"oco/client-order/{clientOid}\": \"v3\",\n \"oco/orders\": \"v3\"\n // margin trading\n }\n },\n futuresPrivate: {\n POST: {\n \"transfer-out\": \"v3\"\n }\n }\n },\n partner: {\n // the support for spot and future exchanges as separate settings\n spot: {\n id: \"ccxt\",\n key: \"9e58cc35-5b5e-4133-92ec-166e3f077cb8\"\n },\n future: {\n id: \"ccxtfutures\",\n key: \"1b327198-f30c-4f14-a0ac-918871282f15\"\n }\n // exchange-wide settings are also supported\n // 'id': 'ccxt'\n // 'key': '9e58cc35-5b5e-4133-92ec-166e3f077cb8',\n },\n accountsByType: {\n spot: \"trade\",\n margin: \"margin\",\n cross: \"margin\",\n isolated: \"isolated\",\n main: \"main\",\n funding: \"main\",\n future: \"contract\",\n swap: \"contract\",\n mining: \"pool\",\n hf: \"trade_hf\"\n },\n marginModes: {\n cross: \"MARGIN_TRADE\",\n isolated: \"MARGIN_ISOLATED_TRADE\",\n spot: \"TRADE\"\n }\n }\n });\n }\n nonce() {\n return this.milliseconds() - this.options.timeDifference;\n }\n async fetchTime(e = {}) {\n const t = await this.publicGetTimestamp(e);\n return this.safeInteger(t, \"data\");\n }\n isUsingForcedProxy(e = {}, t = \"public\") {\n return t === \"private\" || t === \"futuresPrivate\";\n }\n async fetchStatus(e = {}) {\n const t = await this.publicGetStatus(e), i = this.safeValue(t, \"data\", {});\n return {\n status: this.safeString(i, \"status\") === \"open\" ? \"ok\" : \"maintenance\",\n updated: void 0,\n eta: void 0,\n url: void 0,\n info: t\n };\n }\n async fetchMarkets(e = {}) {\n const t = await this.publicGetSymbols(e), i = this.safeValue(t, \"data\"), s = this.safeValue(this.options, \"fetchMarkets\", {}), n = this.safeBool(s, \"fetchTickersFees\", !0);\n let r = {};\n n && (r = await this.publicGetMarketAllTickers(e));\n const a = this.safeValue(r, \"data\", {}), o = this.safeValue(a, \"ticker\", []), c = this.indexBy(o, \"symbol\"), u = [];\n for (let f = 0; f < i.length; f++) {\n const h = i[f], l = this.safeString(h, \"symbol\"), [p, m] = l.split(\"-\"), y = this.safeCurrencyCode(p), w = this.safeCurrencyCode(m), S = this.safeValue(c, l, {}), b = this.safeString(S, \"makerFeeRate\"), T = this.safeString(S, \"takerFeeRate\"), x = this.safeString(S, \"makerCoefficient\"), v = this.safeString(S, \"takerCoefficient\");\n u.push({\n id: l,\n symbol: y + \"/\" + w,\n base: y,\n quote: w,\n settle: void 0,\n baseId: p,\n quoteId: m,\n settleId: void 0,\n type: \"spot\",\n spot: !0,\n margin: this.safeValue(h, \"isMarginEnabled\"),\n swap: !1,\n future: !1,\n option: !1,\n active: this.safeValue(h, \"enableTrading\"),\n contract: !1,\n linear: void 0,\n inverse: void 0,\n taker: this.parseNumber(P.stringMul(T, v)),\n maker: this.parseNumber(P.stringMul(b, x)),\n contractSize: void 0,\n expiry: void 0,\n expiryDatetime: void 0,\n strike: void 0,\n optionType: void 0,\n precision: {\n amount: this.safeNumber(h, \"baseIncrement\"),\n price: this.safeNumber(h, \"priceIncrement\")\n },\n limits: {\n leverage: {\n min: void 0,\n max: void 0\n },\n amount: {\n min: this.safeNumber(h, \"baseMinSize\"),\n max: this.safeNumber(h, \"baseMaxSize\")\n },\n price: {\n min: void 0,\n max: void 0\n },\n cost: {\n min: this.safeNumber(h, \"quoteMinSize\"),\n max: this.safeNumber(h, \"quoteMaxSize\")\n }\n },\n created: void 0,\n info: h\n });\n }\n return u;\n }\n async fetchCurrencies(e = {}) {\n const t = [];\n t.push(this.publicGetCurrencies(e)), t.push(this.fetchWebEndpoint(\"fetchCurrencies\", \"webExchangeGetCurrencyCurrencyChainInfo\", !0));\n const i = await Promise.all(t), s = this.safeValue(i, 0, {}), n = this.safeValue(s, \"data\", []), r = this.safeValue(i, 1, {}), a = this.safeValue(r, \"data\", []), o = this.groupBy(a, \"currency\"), c = {};\n for (let u = 0; u < n.length; u++) {\n const f = n[u], h = this.safeString(f, \"currency\"), l = this.safeString(f, \"fullName\"), p = this.safeCurrencyCode(h);\n let m = !1, y = !1;\n const w = {}, S = this.safeValue(f, \"chains\", []), b = this.indexBy(this.safeValue(o, h, []), \"chain\"), T = this.safeString(f, \"precision\"), x = this.parseNumber(this.parsePrecision(T)), v = S.length;\n v || (m = !1, y = !1);\n for (let V = 0; V < v; V++) {\n const j = S[V], G = this.safeString(j, \"chainId\"), W = this.networkIdToCode(G), B = this.safeBool(j, \"isWithdrawEnabled\", !1), Q = this.safeBool(j, \"isDepositEnabled\", !1);\n y = Q || y, m = B || m;\n const se = this.safeValue(b, G, {}), $ = this.safeNumber(j, \"withdrawalMinSize\", 0);\n w[W] = {\n info: {\n ...j,\n chainExtraData: se\n },\n id: G,\n name: this.safeString(j, \"chainName\"),\n code: W,\n active: B && Q,\n fee: this.safeNumber(j, \"withdrawalMinFee\"),\n deposit: Q,\n withdraw: B,\n limits: {\n withdraw: {\n min: $,\n max: void 0\n },\n deposit: {\n min: this.safeNumber(se, \"depositMinSize\"),\n max: void 0\n }\n }\n };\n }\n const _ = T === \"2\" && v === 0;\n c[p] = {\n id: h,\n name: l,\n code: p,\n type: _ ? \"fiat\" : \"crypto\",\n precision: x,\n info: f,\n active: y || m,\n deposit: y,\n withdraw: m,\n fee: void 0,\n limits: this.limits,\n networks: w\n };\n }\n return c;\n }\n async fetchAccounts(e = {}) {\n const t = await this.privateGetAccounts(e), i = this.safeValue(t, \"data\", []), s = [];\n for (let n = 0; n < i.length; n++) {\n const r = i[n], a = this.safeString(r, \"id\"), o = this.safeString(r, \"currency\"), c = this.safeCurrencyCode(o), u = this.safeString(r, \"type\");\n s.push({\n id: a,\n type: u,\n currency: c,\n code: c,\n info: r\n });\n }\n return s;\n }\n async fetchTransactionFee(e, t = {}) {\n await this.loadMarkets();\n const s = {\n currency: this.currency(e).id\n };\n let n;\n [n, t] = this.handleNetworkCodeAndParams(t), n !== void 0 && (s.chain = this.networkCodeToId(n).toLowerCase());\n const r = await this.privateGetWithdrawalsQuotas(this.extend(s, t)), a = this.safeValue(r, \"data\"), o = {};\n return o[e] = this.safeNumber(a, \"withdrawMinFee\"), {\n info: r,\n withdraw: o,\n deposit: {}\n };\n }\n async fetchDepositWithdrawFee(e, t = {}) {\n await this.loadMarkets();\n const i = this.currency(e), s = {\n currency: i.id\n };\n let n;\n [n, t] = this.handleNetworkCodeAndParams(t), n !== void 0 && (s.chain = this.networkCodeToId(n).toLowerCase());\n const r = await this.privateGetWithdrawalsQuotas(this.extend(s, t)), a = this.safeValue(r, \"data\");\n return this.parseDepositWithdrawFee(a, i);\n }\n parseDepositWithdrawFee(e, t = void 0) {\n const i = {\n info: e,\n withdraw: {\n fee: void 0,\n percentage: void 0\n },\n deposit: {\n fee: void 0,\n percentage: void 0\n },\n networks: {}\n };\n if (this.safeValue(e, \"isWithdrawEnabled\")) {\n i.withdraw.fee = this.safeNumber2(e, \"withdrawalMinFee\", \"withdrawMinFee\"), i.withdraw.percentage = !1;\n const n = this.safeString(e, \"chain\");\n if (n) {\n const r = this.networkIdToCode(n, this.safeString(t, \"code\"));\n i.networks[r] = {\n withdraw: i.withdraw,\n deposit: {\n fee: void 0,\n percentage: void 0\n }\n };\n }\n }\n return i;\n }\n parseTicker(e, t = void 0) {\n let i = this.safeString(e, \"changeRate\");\n i !== void 0 && (i = P.stringMul(i, \"100\"));\n let s = this.safeString2(e, \"last\", \"lastTradedPrice\");\n s = this.safeString(e, \"price\", s);\n const n = this.safeString(e, \"symbol\");\n t = this.safeMarket(n, t, \"-\");\n const r = t.symbol, a = this.safeString(e, \"vol\"), o = this.safeString(e, \"volValue\"), c = this.safeInteger2(e, \"time\", \"datetime\");\n return this.safeTicker({\n symbol: r,\n timestamp: c,\n datetime: this.iso8601(c),\n high: this.safeString(e, \"high\"),\n low: this.safeString(e, \"low\"),\n bid: this.safeString2(e, \"buy\", \"bestBid\"),\n bidVolume: this.safeString(e, \"bestBidSize\"),\n ask: this.safeString2(e, \"sell\", \"bestAsk\"),\n askVolume: this.safeString(e, \"bestAskSize\"),\n vwap: void 0,\n open: this.safeString(e, \"open\"),\n close: s,\n last: s,\n previousClose: void 0,\n change: this.safeString(e, \"changePrice\"),\n percentage: i,\n average: this.safeString(e, \"averagePrice\"),\n baseVolume: a,\n quoteVolume: o,\n info: e\n }, t);\n }\n async fetchTickers(e = void 0, t = {}) {\n await this.loadMarkets(), e = this.marketSymbols(e);\n const i = await this.publicGetMarketAllTickers(t), s = this.safeValue(i, \"data\", {}), n = this.safeValue(s, \"ticker\", []), r = this.safeInteger(s, \"time\"), a = {};\n for (let o = 0; o < n.length; o++) {\n n[o].time = r;\n const c = this.parseTicker(n[o]), u = this.safeString(c, \"symbol\");\n u !== void 0 && (a[u] = c);\n }\n return this.filterByArrayTickers(a, \"symbol\", e);\n }\n async fetchTicker(e, t = {}) {\n await this.loadMarkets();\n const i = this.market(e), s = {\n symbol: i.id\n }, n = await this.publicGetMarketStats(this.extend(s, t));\n return this.parseTicker(n.data, i);\n }\n parseOHLCV(e, t = void 0) {\n return [\n this.safeTimestamp(e, 0),\n this.safeNumber(e, 1),\n this.safeNumber(e, 3),\n this.safeNumber(e, 4),\n this.safeNumber(e, 2),\n this.safeNumber(e, 5)\n ];\n }\n async fetchOHLCV(e, t = \"1m\", i = void 0, s = void 0, n = {}) {\n await this.loadMarkets();\n let r = !1;\n if ([r, n] = this.handleOptionAndParams(n, \"fetchOHLCV\", \"paginate\"), r)\n return await this.fetchPaginatedCallDeterministic(\"fetchOHLCV\", e, i, s, t, n, 1500);\n const a = this.market(e), c = {\n symbol: a.id,\n type: this.safeString(this.timeframes, t, t)\n }, u = this.parseTimeframe(t) * 1e3;\n let f = this.milliseconds();\n i !== void 0 ? (c.startAt = this.parseToInt(Math.floor(i / 1e3)), s === void 0 && (s = this.safeInteger(this.options, \"fetchOHLCVLimit\", 1500)), f = this.sum(i, s * u)) : s !== void 0 && (i = f - s * u, c.startAt = this.parseToInt(Math.floor(i / 1e3))), c.endAt = this.parseToInt(Math.floor(f / 1e3));\n const h = await this.publicGetMarketCandles(this.extend(c, n)), l = this.safeValue(h, \"data\", []);\n return this.parseOHLCVs(l, a, t, i, s);\n }\n async createDepositAddress(e, t = {}) {\n await this.loadMarkets();\n const i = this.currency(e), s = {\n currency: i.id\n };\n let n;\n [n, t] = this.handleNetworkCodeAndParams(t), n !== void 0 && (s.chain = this.networkCodeToId(n).toLowerCase());\n const r = await this.privatePostDepositAddresses(this.extend(s, t)), a = this.safeValue(r, \"data\", {});\n return this.parseDepositAddress(a, i);\n }\n async fetchDepositAddress(e, t = {}) {\n await this.loadMarkets();\n const i = this.currency(e), s = {\n currency: i.id\n // for USDT - OMNI, ERC20, TRC20, default is ERC20\n // for BTC - Native, Segwit, TRC20, the parameters are bech32, btc, trx, default is Native\n // 'chain': 'ERC20', // optional\n };\n let n;\n [n, t] = this.handleNetworkCodeAndParams(t), n !== void 0 && (s.chain = this.networkCodeToId(n).toLowerCase());\n const r = this.options.versions.private.GET[\"deposit-addresses\"];\n this.options.versions.private.GET[\"deposit-addresses\"] = \"v1\";\n const a = await this.privateGetDepositAddresses(this.extend(s, t));\n this.options.versions.private.GET[\"deposit-addresses\"] = r;\n const o = this.safeValue(a, \"data\");\n if (o === void 0)\n throw new It(e, n).addMessage(\"fetchDepositAddress() returned an empty response, you might try to run createDepositAddress() first and try again\").exchange(this.id);\n return this.parseDepositAddress(o, i);\n }\n parseDepositAddress(e, t = void 0) {\n let i = this.safeString(e, \"address\");\n i !== void 0 && (i = i.replace(\"bitcoincash:\", \"\"));\n let s;\n return t !== void 0 && (s = t.id, s !== \"NIM\" && this.checkAddress(i)), {\n info: e,\n currency: s,\n address: i,\n tag: this.safeString(e, \"memo\")\n // it's hard to retrieve the network here, the api returns the chain name, not the id\n };\n }\n async fetchDepositAddressesByNetwork(e, t = {}) {\n await this.loadMarkets();\n const i = this.currency(e), s = {\n currency: i.id\n }, n = this.options.versions.private.GET[\"deposit-addresses\"];\n this.options.versions.private.GET[\"deposit-addresses\"] = \"v2\";\n const r = await this.privateGetDepositAddresses(this.extend(s, t));\n this.options.versions.private.GET[\"deposit-addresses\"] = n;\n const a = this.safeValue(r, \"data\", []), o = this.parseDepositAddresses(a, [i.code], !1, {\n currency: i.id\n });\n return this.indexBy(o, \"network\");\n }\n async fetchOrderBook(e, t = void 0, i = {}) {\n await this.loadMarkets();\n const s = this.market(e), n = this.safeInteger(i, \"level\", 2), r = { symbol: s.id }, a = this.checkRequiredCredentials(!1);\n let o;\n if (!a || t !== void 0) {\n if (n === 2) {\n if (r.level = n, t !== void 0)\n if (t === 20 || t === 100)\n r.limit = t;\n else\n throw new g(\"fetchOrderBook() limit argument must be 20 or 100\").exchange(this.id);\n r.limit = t || 100;\n }\n o = await this.publicGetMarketOrderbookLevelLevelLimit(this.extend(r, i));\n } else\n o = await this.privateGetMarketOrderbookLevel2(this.extend(r, i));\n const c = this.safeValue(o, \"data\", {}), u = this.safeInteger(c, \"time\"), f = this.parseOrderBook(c, s.symbol, u, \"bids\", \"asks\", n - 2, n - 1);\n return f.nonce = this.safeInteger(c, \"sequence\"), f;\n }\n handleTriggerPrices(e) {\n const t = this.safeValue2(e, \"triggerPrice\", \"stopPrice\"), i = this.safeValue(e, \"stopLossPrice\"), s = this.safeValue(e, \"takeProfitPrice\"), n = i !== void 0, r = s !== void 0;\n if (n && r || t && i || t && r)\n throw new g(\"createOrder() - you should use either triggerPrice or stopLossPrice or takeProfitPrice\").exchange(this.id);\n return [t, i, s];\n }\n async createOrder(e, t, i, s, n = void 0, r = {}) {\n await this.loadMarkets();\n const a = this.market(e), o = this.safeBool(r, \"test\", !1);\n r = this.omit(r, \"test\");\n const c = this.safeBool(r, \"hf\", !1), [u, f, h] = this.handleTriggerPrices(r), l = this.safeString(r, \"tradeType\"), p = u || f || h, m = this.handleMarginModeAndParams(\"createOrder\", r), y = this.safeString(m, 0), w = l === \"MARGIN_TRADE\" || y !== void 0, S = this.createOrderRequest(e, t, i, s, n, r);\n let b;\n o ? w ? b = await this.privatePostMarginOrderTest(S) : b = await this.privatePostOrdersTest(S) : c ? b = await this.privatePostHfOrders(S) : p ? b = await this.privatePostStopOrder(S) : w ? b = await this.privatePostMarginOrder(S) : b = await this.privatePostOrders(S);\n const T = this.safeValue(b, \"data\", {});\n return this.parseOrder(T, a);\n }\n async createMarketOrderWithCost(e, t, i, s = {}) {\n return await this.loadMarkets(), s.cost = i, await this.createOrder(e, \"market\", t, i, void 0, s);\n }\n async createMarketBuyOrderWithCost(e, t, i = {}) {\n return await this.loadMarkets(), await this.createMarketOrderWithCost(e, \"buy\", t, i);\n }\n async createMarketSellOrderWithCost(e, t, i = {}) {\n return await this.loadMarkets(), await this.createMarketOrderWithCost(e, \"sell\", t, i);\n }\n async createOrders(e, t = {}) {\n await this.loadMarkets();\n const i = [];\n let s;\n for (let u = 0; u < e.length; u++) {\n const f = e[u], h = this.safeString(f, \"symbol\");\n if (s === void 0)\n s = h;\n else if (s !== h)\n throw new g(\"createOrders() requires all orders to have the same symbol\").exchange(this.id);\n const l = this.safeString(f, \"type\");\n if (l !== \"limit\")\n throw new ge(l).addMessage(\"createOrders() only supports limit orders\").exchange(this.id);\n const p = this.safeString(f, \"side\"), m = this.safeValue(f, \"amount\"), y = this.safeValue(f, \"price\"), w = this.safeValue(f, \"params\", {}), S = this.createOrderRequest(h, l, p, m, y, w);\n i.push(S);\n }\n const r = {\n symbol: this.market(s).id,\n orderList: i\n }, a = this.safeBool(t, \"hf\", !1);\n t = this.omit(t, \"hf\");\n let o;\n a ? o = await this.privatePostHfOrdersMulti(this.extend(r, t)) : o = await this.privatePostOrdersMulti(this.extend(r, t));\n let c = this.safeValue(o, \"data\", {});\n return c = this.safeValue(c, \"data\", []), this.parseOrders(c);\n }\n createOrderRequest(e, t, i, s, n = void 0, r = {}) {\n const a = this.market(e), o = this.safeString2(r, \"clientOid\", \"clientOrderId\", this.uuid());\n r = this.omit(r, [\"clientOid\", \"clientOrderId\"]);\n const c = {\n clientOid: o,\n side: i,\n symbol: a.id,\n type: t\n // limit or market\n }, u = this.safeNumber2(r, \"cost\", \"funds\");\n let f, h, l;\n [l, r] = this.handleMarginModeAndParams(\"createOrder\", r), t === \"market\" ? u !== void 0 ? (r = this.omit(r, [\"cost\", \"funds\"]), h = this.amountToPrecision(e, u), c.funds = h) : (f = this.amountToPrecision(e, s), c.size = this.amountToPrecision(e, s)) : (f = this.amountToPrecision(e, s), c.size = f, c.price = this.priceToPrecision(e, n));\n const p = this.safeString(r, \"tradeType\"), [m, y, w] = this.handleTriggerPrices(r), S = m || y || w, b = p === \"MARGIN_TRADE\" || l !== void 0;\n if (r = this.omit(r, [\"stopLossPrice\", \"takeProfitPrice\", \"triggerPrice\", \"stopPrice\"]), S) {\n if (m ? c.stopPrice = this.priceToPrecision(e, m) : (y || w) && (y ? (c.stop = i === \"buy\" ? \"entry\" : \"loss\", c.stopPrice = this.priceToPrecision(e, y)) : (c.stop = i === \"buy\" ? \"loss\" : \"entry\", c.stopPrice = this.priceToPrecision(e, w))), l === \"isolated\")\n throw new k().addMessage(\"createOrder does not support isolated margin for stop orders\").exchange(this.id);\n l === \"cross\" && (c.tradeType = this.options.marginModes[l]);\n } else\n b && l === \"isolated\" && (c.marginModel = \"isolated\");\n let T;\n return [T, r] = this.handlePostOnly(t === \"market\", !1, r), T && (c.postOnly = !0), this.extend(c, r);\n }\n async editOrder(e, t, i, s, n = void 0, r = void 0, a = {}) {\n await this.loadMarkets();\n const o = this.market(t), c = {\n symbol: o.id\n }, u = this.safeString2(a, \"clientOid\", \"clientOrderId\");\n u !== void 0 ? c.clientOid = u : c.orderId = e, n !== void 0 && (c.newSize = this.amountToPrecision(t, n)), r !== void 0 && (c.newPrice = this.priceToPrecision(t, r));\n const f = await this.privatePostHfOrdersAlter(this.extend(c, a)), h = this.safeValue(f, \"data\", {});\n return this.parseOrder(h, o);\n }\n async cancelOrder(e, t = void 0, i = {}) {\n await this.loadMarkets();\n const s = {}, n = this.safeString2(i, \"clientOid\", \"clientOrderId\"), r = this.safeValue2(i, \"stop\", \"trigger\", !1), a = this.safeBool(i, \"hf\", !1);\n if (a) {\n if (t === void 0)\n throw new g(\"cancelOrder() requires a symbol parameter for hf orders\").exchange(this.id);\n const c = this.market(t);\n s.symbol = c.id;\n }\n let o;\n return i = this.omit(i, [\"clientOid\", \"clientOrderId\", \"stop\", \"hf\", \"trigger\"]), n !== void 0 ? (s.clientOid = n, r ? o = await this.privateDeleteStopOrderCancelOrderByClientOid(this.extend(s, i)) : a ? o = await this.privateDeleteHfOrdersClientOrderClientOid(this.extend(s, i)) : o = await this.privateDeleteOrderClientOrderClientOid(this.extend(s, i))) : (s.orderId = e, r ? o = await this.privateDeleteStopOrderOrderId(this.extend(s, i)) : a ? o = await this.privateDeleteHfOrdersOrderId(this.extend(s, i)) : o = await this.privateDeleteOrdersOrderId(this.extend(s, i))), o;\n }\n async cancelAllOrders(e = void 0, t = {}) {\n await this.loadMarkets();\n const i = {}, s = this.safeBool(t, \"stop\", !1), n = this.safeBool(t, \"hf\", !1);\n t = this.omit(t, [\"stop\", \"hf\"]);\n const [r, a] = this.handleMarginModeAndParams(\"cancelAllOrders\", t);\n if (e !== void 0 && (i.symbol = this.marketId(e)), r !== void 0 && (i.tradeType = this.options.marginModes[r], r === \"isolated\" && s))\n throw new g(\"cancelAllOrders does not support isolated margin for stop orders\").exchange(this.id);\n let o;\n return s ? o = await this.privateDeleteStopOrderCancel(this.extend(i, a)) : n ? e === void 0 ? o = await this.privateDeleteHfOrdersCancelAll(this.extend(i, a)) : o = await this.privateDeleteHfOrders(this.extend(i, a)) : o = await this.privateDeleteOrders(this.extend(i, a)), o;\n }\n async fetchOrdersByStatus(e, t = void 0, i = void 0, s = void 0, n = {}) {\n await this.loadMarkets();\n let r = e.toLowerCase();\n const a = this.safeInteger2(n, \"until\", \"till\"), o = this.safeBool(n, \"stop\", !1), c = this.safeBool(n, \"hf\", !1);\n n = this.omit(n, [\"stop\", \"hf\", \"till\", \"until\"]);\n const [u, f] = this.handleMarginModeAndParams(\"fetchOrdersByStatus\", n);\n r === \"open\" ? r = \"active\" : r === \"closed\" && (r = \"done\");\n const h = {\n status: r\n };\n let l;\n t !== void 0 && (l = this.market(t), h.symbol = l.id), i !== void 0 && (h.startAt = i), s !== void 0 && (h.pageSize = s), a && (h.endAt = a), h.tradeType = this.safeString(this.options.marginModes, u, \"TRADE\");\n let p;\n o ? p = await this.privateGetStopOrder(this.extend(h, f)) : c ? r === \"active\" ? p = await this.privateGetHfOrdersActive(this.extend(h, f)) : r === \"done\" && (p = await this.privateGetHfOrdersDone(this.extend(h, f))) : p = await this.privateGetOrders(this.extend(h, f));\n const m = this.safeValue(p, \"data\", {}), y = this.safeValue(m, \"items\", m);\n return this.parseOrders(y, l, i, s);\n }\n async fetchClosedOrders(e = void 0, t = void 0, i = void 0, s = {}) {\n await this.loadMarkets();\n let n = !1;\n return [n, s] = this.handleOptionAndParams(s, \"fetchClosedOrders\", \"paginate\"), n ? await this.fetchPaginatedCallDynamic(\"fetchClosedOrders\", e, t, i, s) : await this.fetchOrdersByStatus(\"done\", e, t, i, s);\n }\n async fetchOpenOrders(e = void 0, t = void 0, i = void 0, s = {}) {\n await this.loadMarkets();\n let n = !1;\n return [n, s] = this.handleOptionAndParams(s, \"fetchOpenOrders\", \"paginate\"), n ? await this.fetchPaginatedCallDynamic(\"fetchOpenOrders\", e, t, i, s) : await this.fetchOrdersByStatus(\"active\", e, t, i, s);\n }\n async fetchOrder(e, t = void 0, i = {}) {\n await this.loadMarkets();\n const s = {}, n = this.safeString2(i, \"clientOid\", \"clientOrderId\"), r = this.safeBool(i, \"stop\", !1), a = this.safeBool(i, \"hf\", !1);\n let o;\n if (t !== void 0 && (o = this.market(t)), a) {\n if (t === void 0)\n throw new g(\"fetchOrder() requires a symbol parameter for hf orders\").exchange(this.id);\n s.symbol = o.id;\n }\n i = this.omit(i, [\"stop\", \"hf\", \"clientOid\", \"clientOrderId\"]);\n let c;\n if (n !== void 0)\n s.clientOid = n, r ? (t !== void 0 && (s.symbol = o.id), c = await this.privateGetStopOrderQueryOrderByClientOid(this.extend(s, i))) : a ? c = await this.privateGetHfOrdersClientOrderClientOid(this.extend(s, i)) : c = await this.privateGetOrderClientOrderClientOid(this.extend(s, i));\n else {\n if (e === void 0)\n throw new g(\"fetchOrder() requires an order id\").exchange(this.id);\n s.orderId = e, r ? c = await this.privateGetStopOrderOrderId(this.extend(s, i)) : a ? c = await this.privateGetHfOrdersOrderId(this.extend(s, i)) : c = await this.privateGetOrdersOrderId(this.extend(s, i));\n }\n let u = this.safeValue(c, \"data\", {});\n return Array.isArray(u) && (u = this.safeValue(u, 0)), this.parseOrder(u, o);\n }\n parseOrder(e, t = void 0) {\n const i = this.safeString(e, \"symbol\"), s = this.safeInteger(e, \"createdAt\"), n = this.safeString(e, \"feeCurrency\"), r = this.safeBool(e, \"cancelExist\", !1), o = this.safeString(e, \"stop\") !== void 0, c = this.safeBool(e, \"stopTriggered\", !1), u = this.safeValue2(e, \"isActive\", \"active\"), f = this.safeString(e, \"status\");\n let h;\n u !== void 0 && (u === !0 ? h = \"open\" : h = \"closed\"), o && (f === \"NEW\" ? h = \"open\" : !u && !c && (h = \"cancelled\")), r && (h = \"canceled\"), f === \"fail\" && (h = \"rejected\");\n const l = this.safeNumber(e, \"stopPrice\");\n return this.safeOrder({\n info: e,\n id: this.safeStringN(e, [\"id\", \"orderId\", \"newOrderId\"]),\n clientOrderId: this.safeString(e, \"clientOid\"),\n symbol: this.safeSymbol(i, t, \"-\"),\n type: this.safeString(e, \"type\"),\n timeInForce: this.safeString(e, \"timeInForce\"),\n postOnly: this.safeValue(e, \"postOnly\"),\n side: this.safeString(e, \"side\"),\n amount: this.safeString(e, \"size\"),\n price: this.safeString(e, \"price\"),\n stopPrice: l,\n triggerPrice: l,\n cost: this.safeString(e, \"dealFunds\"),\n filled: this.safeString(e, \"dealSize\"),\n remaining: void 0,\n timestamp: s,\n datetime: this.iso8601(s),\n fee: {\n currency: this.safeCurrencyCode(n),\n cost: this.safeNumber(e, \"fee\")\n },\n status: h,\n lastTradeTimestamp: void 0,\n average: void 0,\n trades: void 0\n }, t);\n }\n async fetchOrderTrades(e, t = void 0, i = void 0, s = void 0, n = {}) {\n const r = {\n orderId: e\n };\n return await this.fetchMyTrades(t, i, s, this.extend(r, n));\n }\n async fetchMyTrades(e = void 0, t = void 0, i = void 0, s = {}) {\n await this.loadMarkets();\n let n = !1;\n if ([n, s] = this.handleOptionAndParams(s, \"fetchMyTrades\", \"paginate\"), n)\n return await this.fetchPaginatedCallDynamic(\"fetchMyTrades\", e, t, i, s);\n let r = {};\n const a = this.safeBool(s, \"hf\", !1);\n if (a && e === void 0)\n throw new g(\"fetchMyTrades() requires a symbol parameter for hf orders\").exchange(this.id);\n let o;\n e !== void 0 && (o = this.market(e), r.symbol = o.id), i !== void 0 && (r.pageSize = i);\n const c = this.options.fetchMyTradesMethod;\n let u = !1, f;\n if ([r, s] = this.handleUntilOption(\"endAt\", r, s), a)\n f = await this.privateGetHfFills(this.extend(r, s));\n else if (c === \"private_get_fills\")\n t !== void 0 && (r.startAt = t), f = await this.privateGetFills(this.extend(r, s));\n else if (c === \"private_get_limit_fills\")\n u = !0, f = await this.privateGetLimitFills(this.extend(r, s));\n else\n throw new pe(\"fetchMyTradesMethod() invalid method\").exchange(this.id);\n const h = this.safeValue(f, \"data\", {});\n let l;\n return u ? l = h : l = this.safeValue(h, \"items\", []), this.parseTrades(l, o, t, i);\n }\n async fetchTrades(e, t = void 0, i = void 0, s = {}) {\n await this.loadMarkets();\n const n = this.market(e), r = {\n symbol: n.id\n }, a = await this.publicGetMarketHistories(this.extend(r, s)), o = this.safeValue(a, \"data\", []);\n return this.parseTrades(o, n, t, i);\n }\n parseTrade(e, t = void 0) {\n const i = this.safeString(e, \"symbol\");\n t = this.safeMarket(i, t, \"-\");\n const s = this.safeString2(e, \"tradeId\", \"id\"), n = this.safeString(e, \"orderId\"), r = this.safeString(e, \"liquidity\");\n let a = this.safeInteger(e, \"time\");\n a !== void 0 ? a = this.parseToInt(a / 1e6) : (a = this.safeInteger(e, \"createdAt\"), \"dealValue\" in e && a !== void 0 && (a = a * 1e3));\n const o = this.safeString2(e, \"price\", \"dealPrice\"), c = this.safeString2(e, \"size\", \"amount\"), u = this.safeString(e, \"side\");\n let f;\n const h = this.safeString(e, \"fee\");\n if (h !== void 0) {\n const m = this.safeString(e, \"feeCurrency\");\n let y = this.safeCurrencyCode(m);\n y === void 0 && (y = u === \"sell\" ? t.quote : t.base), f = {\n cost: h,\n currency: y,\n rate: this.safeString(e, \"feeRate\")\n };\n }\n let l = this.safeString(e, \"type\");\n l === \"match\" && (l = void 0);\n const p = this.safeString2(e, \"funds\", \"dealValue\");\n return this.safeTrade({\n info: e,\n id: s,\n order: n,\n timestamp: a,\n datetime: this.iso8601(a),\n symbol: t.symbol,\n type: l,\n takerOrMaker: r,\n side: u,\n price: o,\n amount: c,\n cost: p,\n fee: f\n }, t);\n }\n async fetchTradingFee(e, t = {}) {\n await this.loadMarkets();\n const i = this.market(e), s = {\n symbols: i.id\n }, n = await this.privateGetTradeFees(this.extend(s, t)), r = this.safeValue(n, \"data\", []), a = this.safeValue(r, 0), o = this.safeString(a, \"symbol\");\n return {\n info: n,\n symbol: this.safeSymbol(o, i),\n maker: this.safeNumber(a, \"makerFeeRate\"),\n taker: this.safeNumber(a, \"takerFeeRate\"),\n percentage: !0,\n tierBased: !0\n };\n }\n async withdraw(e, t, i, s = void 0, n = {}) {\n [s, n] = this.handleWithdrawTagAndParams(s, n), await this.loadMarkets(), this.checkAddress(i);\n const r = this.currency(e), a = this.safeString(n, \"network\"), o = this.currencyToPrecision(e, t, a), c = {\n currency: r.id,\n address: i,\n amount: o\n // 'memo': tag,\n // 'isInner': false, // internal transfer or external withdrawal\n // 'remark': 'optional',\n // 'chain': 'OMNI', // 'ERC20', 'TRC20', default is ERC20, This only apply for multi-chain currency, and there is no need for single chain currency.\n };\n s !== void 0 && (c.memo = s);\n let u;\n [u, n] = this.handleNetworkCodeAndParams(n), u !== void 0 && (c.chain = this.networkCodeToId(u).toLowerCase());\n let f;\n [f, n] = this.handleOptionAndParams(n, \"withdraw\", \"includeFee\", !1), f && (c.feeDeductType = \"INTERNAL\");\n const h = await this.privatePostWithdrawals(this.extend(c, n)), l = this.safeValue(h, \"data\", {});\n return this.parseTransaction(l, r);\n }\n parseTransactionStatus(e) {\n const t = {\n SUCCESS: \"ok\",\n PROCESSING: \"pending\",\n WALLET_PROCESSING: \"pending\",\n FAILURE: \"failed\"\n };\n return this.safeString(t, e, e);\n }\n parseTransaction(e, t = void 0) {\n const i = this.safeString(e, \"currency\"), s = this.safeCurrencyCode(i, t);\n let n = this.safeString(e, \"address\");\n const r = this.safeString(e, \"amount\");\n let a = this.safeString(e, \"walletTxId\");\n if (a !== void 0) {\n const w = a.split(\"@\");\n w.length > 1 && n === void 0 && w[1].length > 1 && (n = w[1]), a = w[0];\n }\n let o = a === void 0 ? \"withdrawal\" : \"deposit\";\n const c = this.safeString(e, \"status\");\n let u;\n const f = this.safeString(e, \"fee\");\n if (f !== void 0) {\n let w;\n r !== void 0 && (w = P.stringDiv(f, r)), u = {\n cost: this.parseNumber(f),\n rate: this.parseNumber(w),\n currency: s\n };\n }\n let h = this.safeInteger2(e, \"createdAt\", \"createAt\"), l = this.safeInteger(e, \"updatedAt\");\n !(\"createdAt\" in e) && (o = \"address\" in e ? \"withdrawal\" : \"deposit\", h !== void 0 && (h = h * 1e3), l !== void 0 && (l = l * 1e3));\n const m = this.safeValue(e, \"isInner\"), y = this.safeString(e, \"memo\");\n return {\n info: e,\n id: this.safeString2(e, \"id\", \"withdrawalId\"),\n timestamp: h,\n datetime: this.iso8601(h),\n network: this.networkIdToCode(this.safeString(e, \"chain\")),\n address: n,\n addressTo: n,\n addressFrom: void 0,\n tag: y,\n tagTo: y,\n tagFrom: void 0,\n currency: s,\n amount: this.parseNumber(r),\n txid: a,\n type: o,\n status: this.parseTransactionStatus(c),\n comment: this.safeString(e, \"remark\"),\n internal: m,\n fee: u,\n updated: l\n };\n }\n async fetchDeposits(e = void 0, t = void 0, i = void 0, s = {}) {\n await this.loadMarkets();\n let n = !1;\n if ([n, s] = this.handleOptionAndParams(s, \"fetchDeposits\", \"paginate\"), n)\n return await this.fetchPaginatedCallDynamic(\"fetchDeposits\", e, t, i, s);\n let r = {}, a;\n e !== void 0 && (a = this.currency(e), r.currency = a.id), i !== void 0 && (r.pageSize = i), [r, s] = this.handleUntilOption(\"endAt\", r, s);\n let o;\n t !== void 0 && t < 1550448e6 ? (r.startAt = this.parseToInt(t / 1e3), o = await this.privateGetHistDeposits(this.extend(r, s))) : (t !== void 0 && (r.startAt = t), o = await this.privateGetDeposits(this.extend(r, s)));\n const c = o.data.items;\n return this.parseTransactions(c, a, t, i, { type: \"deposit\" });\n }\n async fetchWithdrawals(e = void 0, t = void 0, i = void 0, s = {}) {\n await this.loadMarkets();\n let n = !1;\n if ([n, s] = this.handleOptionAndParams(s, \"fetchWithdrawals\", \"paginate\"), n)\n return await this.fetchPaginatedCallDynamic(\"fetchWithdrawals\", e, t, i, s);\n let r = {}, a;\n e !== void 0 && (a = this.currency(e), r.currency = a.id), i !== void 0 && (r.pageSize = i), [r, s] = this.handleUntilOption(\"endAt\", r, s);\n let o;\n t !== void 0 && t < 1550448e6 ? (r.startAt = this.parseToInt(t / 1e3), o = await this.privateGetHistWithdrawals(this.extend(r, s))) : (t !== void 0 && (r.startAt = t), o = await this.privateGetWithdrawals(this.extend(r, s)));\n const c = o.data.items;\n return this.parseTransactions(c, a, t, i, { type: \"withdrawal\" });\n }\n parseBalanceHelper(e) {\n const t = this.account();\n t.used = this.safeString(e, \"holdBalance\", this.safeString(e, \"hold\")), t.free = this.safeString(e, \"availableBalance\", this.safeString(e, \"available\")), t.total = this.safeString(e, \"totalBalance\", this.safeString(e, \"total\"));\n const i = this.safeString(e, \"liability\"), s = this.safeString(e, \"interest\");\n return t.debt = P.stringAdd(i, s), t;\n }\n async fetchBalance(e = {}) {\n await this.loadMarkets();\n const t = this.safeString(e, \"code\"), i = this.safeString(e, \"future\");\n let s;\n t !== void 0 && (s = this.currency(t));\n const n = this.safeString2(this.options, \"fetchBalance\", \"defaultType\", \"spot\"), r = this.safeString(e, \"type\", n), a = this.safeValue(this.options, \"accountsByType\");\n let o = this.safeString(a, r, r);\n e = this.omit(e, \"type\"), this.safeBool(e, \"hf\", !1) && (o = \"trade_hf\"), e = this.omit(e, \"hf\");\n const [u, f] = this.handleMarginModeAndParams(\"fetchBalance\", e);\n let h;\n const l = {}, p = u === \"isolated\" || o === \"isolated\", m = u === \"cross\" || o === \"cross\";\n if (p)\n s !== void 0 && (l.balanceCurrency = s.id), h = await this.privateGetIsolatedAccounts(this.extend(l, f));\n else if (m)\n h = await this.privateGetMarginAccount(this.extend(l, f));\n else if (i) {\n const b = o === \"coin-m\" ? [\"BTC\", \"ETH\", \"DOT\", \"XRP\", \"SOL\"] : [\"USDT\", \"USDC\"], T = {\n info: void 0,\n timestamp: void 0,\n datetime: void 0\n };\n return await Promise.all(b.map(async (x) => {\n const v = { currency: x }, _ = await this.futuresPrivateGetAccountOverview(this.extend(v, e)), V = this.account(), j = this.safeValue(_, \"data\"), G = this.safeCurrencyCode(x);\n V.free = this.safeString(j, \"availableBalance\"), V.total = this.safeString(j, \"accountEquity\"), V.used = P.stringSub(V.total, V.free), T[G] = V;\n })), this.safeBalance(T);\n } else\n o === \"earn\" ? h = await this.paginate(\"privateGetEarnHoldAssets\", this.extend(l, f), \"items\") : (s !== void 0 && (l.currency = s.id), l.type = o, h = await this.privateGetAccounts(this.extend(l, f)));\n const y = this.safeValue(h, \"data\", []), w = {\n info: h,\n timestamp: void 0,\n datetime: void 0\n };\n if (p) {\n const b = this.safeValue(y, \"assets\", y);\n for (let T = 0; T < b.length; T++) {\n const x = b[T], v = this.safeString(x, \"symbol\"), _ = this.safeSymbol(v, void 0, \"_\"), V = this.safeValue(x, \"baseAsset\", {}), j = this.safeValue(x, \"quoteAsset\", {}), G = this.safeCurrencyCode(this.safeString(V, \"currency\")), W = this.safeCurrencyCode(this.safeString(j, \"currency\")), B = {};\n B[G] = this.parseBalanceHelper(V), B[W] = this.parseBalanceHelper(j), w[_] = this.safeBalance(B);\n }\n } else if (m) {\n const b = this.safeValue(y, \"accounts\", []);\n for (let T = 0; T < b.length; T++) {\n const x = b[T], v = this.safeString(x, \"currency\"), _ = this.safeCurrencyCode(v);\n w[_] = this.parseBalanceHelper(x);\n }\n } else if (o === \"earn\")\n h.forEach((b) => {\n const T = this.safeString(b, \"currency\"), x = this.safeCurrencyCode(T), v = this.account();\n v.used = this.safeString(b, \"holdAmount\"), v.total = this.safeString(b, \"holdAmount\"), w[x] = v;\n });\n else\n for (let b = 0; b < y.length; b++) {\n const T = y[b];\n if (this.safeString(T, \"type\") === o) {\n const v = this.safeString(T, \"currency\"), _ = this.safeCurrencyCode(v), V = this.account();\n V.total = this.safeString(T, \"balance\"), V.free = this.safeString(T, \"available\"), V.used = this.safeString(T, \"holds\"), w[_] = V;\n }\n }\n return p ? w : this.safeBalance(w);\n }\n async paginate(e, t, i, s = {}) {\n const n = await this[e](this.extend(t, s)), r = this.safeValue(n, \"data\", {}), a = this.safeValue(r, i, []), o = this.safeInteger(r, \"totalPage\"), c = this.safeInteger(r, \"currentPage\");\n if (c < o) {\n const u = this.extend(t, { page: c + 1 }), f = await this.paginate(e, u, i, s);\n return this.arrayConcat(a, f);\n }\n return a;\n }\n parseSubAccountTypeBalances(e) {\n const t = {};\n for (let i = 0; i < e.length; i++) {\n const s = e[i], n = this.safeString(s, \"currency\"), r = this.safeCurrencyCode(n);\n t[r] = {\n free: this.safeString(s, \"available\"),\n used: this.safeString(s, \"holds\"),\n total: this.safeString(s, \"balance\")\n };\n }\n return t;\n }\n // https://www.kucoin.com/docs/rest/account/sub-account/get-all-sub-accounts-balance-v2-\n async fetchSubAccountBalances(e, t = {}) {\n await this.loadMarkets();\n const s = (await this.paginate(\"privateGetSubAccounts\", {}, \"items\")).find((c) => c.subUserId === e);\n if (s === void 0)\n throw new ku(e);\n const n = this.safeValue(s, \"mainAccounts\", []), r = this.safeValue(s, \"tradeAccounts\", []), a = this.safeValue(s, \"marginAccounts\", []), o = this.safeValue(s, \"tradeHFAccounts\", []);\n return {\n main: this.parseSubAccountTypeBalances(n),\n trade: this.parseSubAccountTypeBalances(r),\n margin: this.parseSubAccountTypeBalances(a),\n tradeHF: this.parseSubAccountTypeBalances(o)\n };\n }\n // https://www.kucoin.com/docs/rest/account/sub-account/get-all-sub-accounts-info-v2-\n async getSubAccounts() {\n await this.loadMarkets();\n const e = await this.paginate(\"privateGetSubUser\", {}, \"items\");\n return e == null ? void 0 : e.map((t) => ({\n uid: this.safeString(t, \"userId\")\n }));\n }\n async subAccountTransfer(e, t, i, s, n, r, a = {}) {\n await this.loadMarkets();\n const o = this.currency(e), c = this.currencyToPrecision(e, t), u = n === \"master\" ? \"OUT\" : \"IN\", f = n === \"master\" ? r : n, h = this.convertTypeToAccount(i), l = this.convertTypeToAccount(s), p = n === \"master\" ? l : h, m = n === \"master\" ? h : l;\n if (m !== \"trade\" || p !== \"trade\")\n throw new Error(\"subAccountTransfer() only supports transferring between TRADE accounts\");\n const y = {\n currency: o.id,\n amount: c,\n direction: u,\n subUserId: f,\n subAccountTypeExt: p,\n accountTypeExt: m\n };\n \"clientOid\" in a || (y.clientOid = this.uuid());\n const w = await this.privatePostAccountsSubTransfer(this.extend(y, a)), S = this.safeValue(w, \"data\");\n return this.parseTransfer(S, o);\n }\n async transfer(e, t, i, s, n = {}) {\n await this.loadMarkets();\n const r = this.currency(e), a = this.currencyToPrecision(e, t);\n let o = this.convertTypeToAccount(i), c = this.convertTypeToAccount(s);\n const u = this.inArray(o, this.ids), f = this.inArray(c, this.ids);\n if (o === \"contract\") {\n if (c !== \"main\")\n throw new Vt().addMessage(\"transfer() only supports transferring from futures account to main account\").exchange(this.id);\n const h = {\n currency: r.id,\n amount: a\n };\n \"bizNo\" in n || (h.bizNo = this.uuid22());\n const l = await this.futuresPrivatePostTransferOut(this.extend(h, n)), p = this.safeValue(l, \"data\");\n return this.parseTransfer(p, r);\n } else {\n const h = {\n currency: r.id,\n amount: a\n };\n (u || f) && (this.inArray(o, this.ids) && (h.fromTag = o, o = \"isolated\"), this.inArray(c, this.ids) && (h.toTag = c, c = \"isolated\")), h.from = o, h.to = c, \"clientOid\" in n || (h.clientOid = this.uuid());\n const l = await this.privatePostAccountsInnerTransfer(this.extend(h, n)), p = this.safeValue(l, \"data\");\n return this.parseTransfer(p, r);\n }\n }\n parseTransfer(e, t = void 0) {\n const i = this.safeInteger(e, \"createdAt\"), s = this.safeString(e, \"currency\"), n = this.safeString(e, \"status\"), r = this.safeStringLower(e, \"payAccountType\"), a = this.safeStringLower(e, \"recAccountType\"), o = this.safeValue(this.options, \"accountsByType\"), c = this.safeString(o, r, r), u = this.safeString(o, a, a);\n return {\n id: this.safeString2(e, \"applyId\", \"orderId\"),\n currency: this.safeCurrencyCode(s, t),\n timestamp: i,\n datetime: this.iso8601(i),\n amount: this.safeNumber(e, \"amount\"),\n fromAccount: c,\n toAccount: u,\n status: this.parseTransferStatus(n),\n info: e\n };\n }\n parseTransferStatus(e) {\n const t = {\n PROCESSING: \"pending\"\n };\n return this.safeString(t, e, e);\n }\n parseLedgerEntryType(e) {\n const t = {\n \"Assets Transferred in After Upgrading\": \"transfer\",\n Deposit: \"transaction\",\n Withdrawal: \"transaction\",\n Transfer: \"transfer\",\n Trade_Exchange: \"trade\",\n // 'Vote for Coin': 'Vote for Coin', // Vote for Coin\n \"KuCoin Bonus\": \"bonus\",\n \"Referral Bonus\": \"referral\",\n Rewards: \"bonus\",\n // 'Distribution': 'Distribution', // Distribution, such as get GAS by holding NEO\n \"Airdrop/Fork\": \"airdrop\",\n \"Other rewards\": \"bonus\",\n \"Fee Rebate\": \"rebate\",\n \"Buy Crypto\": \"trade\",\n \"Sell Crypto\": \"sell\",\n \"Public Offering Purchase\": \"trade\",\n // 'Send red envelope': 'Send red envelope', // Send red envelope\n // 'Open red envelope': 'Open red envelope', // Open red envelope\n // 'Staking': 'Staking', // Staking\n // 'LockDrop Vesting': 'LockDrop Vesting', // LockDrop Vesting\n // 'Staking Profits': 'Staking Profits', // Staking Profits\n // 'Redemption': 'Redemption', // Redemption\n \"Refunded Fees\": \"fee\",\n \"KCS Pay Fees\": \"fee\",\n \"Margin Trade\": \"trade\",\n Loans: \"Loans\",\n // 'Borrowings': 'Borrowings', // Borrowings\n // 'Debt Repayment': 'Debt Repayment', // Debt Repayment\n // 'Loans Repaid': 'Loans Repaid', // Loans Repaid\n // 'Lendings': 'Lendings', // Lendings\n // 'Pool transactions': 'Pool transactions', // Pool-X transactions\n \"Instant Exchange\": \"trade\",\n \"Sub-account transfer\": \"transfer\",\n \"Liquidation Fees\": \"fee\"\n // Liquidation Fees\n // 'Soft Staking Profits': 'Soft Staking Profits', // Soft Staking Profits\n // 'Voting Earnings': 'Voting Earnings', // Voting Earnings on Pool-X\n // 'Redemption of Voting': 'Redemption of Voting', // Redemption of Voting on Pool-X\n // 'Voting': 'Voting', // Voting on Pool-X\n // 'Convert to KCS': 'Convert to KCS', // Convert to KCS\n };\n return this.safeString(t, e, e);\n }\n parseLedgerEntry(e, t = void 0) {\n const i = this.safeString(e, \"id\"), s = this.safeString(e, \"currency\"), n = this.safeCurrencyCode(s, t), r = this.safeNumber(e, \"amount\"), a = void 0, o = this.safeString(e, \"bizType\"), c = this.parseLedgerEntryType(o), u = this.safeString(e, \"direction\"), f = this.safeInteger(e, \"createdAt\"), h = this.iso8601(f), l = this.safeString(e, \"accountType\"), p = this.safeString(e, \"context\");\n let m;\n if (p !== void 0 && p !== \"\")\n try {\n const b = JSON.parse(p), T = this.safeString(b, \"orderId\"), x = this.safeString(b, \"tradeId\");\n x !== void 0 ? m = x : m = T;\n } catch {\n m = p;\n }\n let y;\n const w = this.safeString(e, \"fee\");\n let S;\n return w !== \"0\" && (S = n, y = { cost: this.parseNumber(w), currency: S }), {\n id: i,\n direction: u,\n account: l,\n referenceId: m,\n referenceAccount: l,\n type: c,\n currency: n,\n amount: r,\n timestamp: f,\n datetime: h,\n before: void 0,\n after: a,\n status: void 0,\n fee: y,\n info: e\n };\n }\n async fetchLedger(e = void 0, t = void 0, i = void 0, s = {}) {\n await this.loadMarkets(), await this.loadAccounts();\n let n = !1;\n [n, s] = this.handleOptionAndParams(s, \"fetchLedger\", \"paginate\");\n const r = this.safeValue(s, \"hf\");\n if (s = this.omit(s, \"hf\"), n)\n return await this.fetchPaginatedCallDynamic(\"fetchLedger\", e, t, i, s);\n let a = {\n // 'currency': currency['id'], // can choose up to 10, if not provided returns for all currencies by default\n // 'direction': 'in', // 'out'\n // 'bizType': 'DEPOSIT', // DEPOSIT, WITHDRAW, TRANSFER, SUB_TRANSFER,TRADE_EXCHANGE, MARGIN_EXCHANGE, KUCOIN_BONUS (optional)\n // 'startAt': since,\n // 'endAt': exchange.milliseconds (),\n };\n t !== void 0 && (a.startAt = t);\n let o;\n e !== void 0 && (o = this.currency(e), a.currency = o.id), [a, s] = this.handleUntilOption(\"endAt\", a, s);\n let c;\n [c, s] = this.handleMarginModeAndParams(\"fetchLedger\", s);\n let u;\n r ? c !== void 0 ? u = await this.privateGetHfMarginAccountLedgers(this.extend(a, s)) : u = await this.privateGetHfAccountsLedgers(this.extend(a, s)) : u = await this.privateGetAccountsLedgers(this.extend(a, s));\n const f = this.safeList(u, \"data\");\n if (f !== void 0)\n return this.parseLedger(f, o, t, i);\n const h = this.safeDict(u, \"data\"), l = this.safeList(h, \"items\", []);\n return this.parseLedger(l, o, t, i);\n }\n calculateRateLimiterCost(e, t, i, s, n = {}) {\n const r = this.safeValue(this.options, \"versions\", {}), a = this.safeValue(r, e, {}), o = this.safeValue(a, t, {}), c = this.safeString(o, i, this.options.version), u = this.safeString(s, \"version\", c);\n return u === \"v3\" && \"v3\" in n ? n.v3 : u === \"v2\" && \"v2\" in n ? n.v2 : u === \"v1\" && \"v1\" in n ? n.v1 : this.safeValue(n, \"cost\", 1);\n }\n parseBorrowRateHistory(e, t, i, s) {\n const n = [];\n for (let a = 0; a < e.length; a++) {\n const o = e[a], c = this.parseBorrowRate(o);\n n.push(c);\n }\n const r = this.sortBy(n, \"timestamp\");\n return this.filterByCurrencySinceLimit(r, t, i, s);\n }\n parseBorrowRate(e, t = void 0) {\n const i = this.safeString(e, \"timestamp\"), s = P.stringMul(i, \"0.000001\"), n = this.safeString(e, \"currency\");\n return {\n currency: this.safeCurrencyCode(n, t),\n rate: this.safeNumber(e, \"dailyIntRate\"),\n period: 864e5,\n timestamp: s,\n datetime: this.iso8601(s),\n info: e\n };\n }\n async fetchDepositWithdrawFees(e = void 0, t = {}) {\n await this.loadMarkets();\n const i = await this.publicGetCurrencies(t), s = this.safeValue(i, \"data\", []);\n return this.parseDepositWithdrawFees(s, e, \"currency\");\n }\n async sign(e, t = \"public\", i = \"GET\", s = {}, n = void 0, r = void 0) {\n const a = this.safeValue(this.options, \"versions\", {}), o = this.safeValue(a, t, {}), c = this.safeValue(o, i, {}), u = this.safeString(c, e, this.options.version), f = this.safeString(s, \"version\", u);\n s = this.omit(s, \"version\");\n let h = \"/api/\" + f + \"/\" + this.implodeParams(e, s);\n t === \"webExchange\" && (h = \"/\" + this.implodeParams(e, s));\n const l = this.omit(s, this.extractParams(e));\n let p = \"\";\n n = n !== void 0 ? n : {};\n let m = this.urls.api[t];\n this.isEmpty(l) || (i === \"GET\" || i === \"DELETE\" ? h += \"?\" + this.rawencode(l) : (r = this.json(l), p = r, n[\"Content-Type\"] = \"application/json\")), m = m + h;\n const y = t === \"futuresPrivate\";\n if (t === \"private\" || y) {\n this.checkRequiredCredentials();\n const S = this.nonce().toString();\n n = this.extend({\n \"KC-API-KEY-VERSION\": \"2\",\n \"KC-API-KEY\": this.apiKey,\n \"KC-API-TIMESTAMP\": S\n }, n);\n const b = this.safeString(n, \"KC-API-KEY-VERSION\");\n if (b === \"2\" || b === \"3\") {\n let j;\n this.externalSigner ? j = await this.externalSigner.sign({\n payload: this.encode(this.password),\n publicApiKey: this.apiKey,\n exchangeId: this.id\n }) : j = this.hmac(this.encode(this.password), this.encode(this.secret), Re, \"base64\"), n[\"KC-API-PASSPHRASE\"] = j;\n } else\n n[\"KC-API-PASSPHRASE\"] = this.password;\n const T = S + i + h + p;\n let x;\n this.externalSigner ? x = await this.externalSigner.sign({\n payload: this.encode(T),\n publicApiKey: this.apiKey,\n exchangeId: this.id\n }) : x = this.hmac(this.encode(T), this.encode(this.secret), Re, \"base64\"), n[\"KC-API-SIGN\"] = x;\n let v = this.safeValue(this.options, \"partner\", {});\n v = y ? this.safeValue(v, \"future\", v) : this.safeValue(v, \"spot\", v);\n const _ = this.safeString(v, \"id\"), V = this.safeString2(v, \"secret\", \"key\");\n if (_ !== void 0 && V !== void 0) {\n const j = S + _ + this.apiKey, G = this.hmac(this.encode(j), this.encode(V), Re, \"base64\");\n n[\"KC-API-PARTNER-SIGN\"] = G, n[\"KC-API-PARTNER\"] = _;\n }\n }\n return { url: m, method: i, body: r, headers: n };\n }\n handleErrors(e, t, i, s, n, r, a, o, c) {\n if (!a) {\n this.throwBroadlyMatchedException(this.exceptions.broad, r, r);\n return;\n }\n const u = this.safeString(a, \"code\"), f = this.safeString2(a, \"msg\", \"data\", \"\"), h = u + \": \" + f;\n if (this.throwExactlyMatchedException(this.exceptions.exact, f, h), this.throwExactlyMatchedException(this.exceptions.exact, u, h), this.throwBroadlyMatchedException(this.exceptions.broad, r, h), u !== \"200000\" && u !== \"200\")\n throw new O().addMessage(h).exchange(this.id);\n }\n}\nlet dw = class extends gt {\n};\nclass cw extends dw {\n describe() {\n return this.deepExtend(super.describe(), {\n id: \"mexc\",\n name: \"MEXC Global\",\n countries: [\"SC\"],\n rateLimit: 50,\n version: \"v3\",\n certified: !0,\n pro: !0,\n has: {\n CORS: void 0,\n spot: !0,\n margin: !0,\n swap: !0,\n future: !1,\n option: !1,\n cancelAllOrders: !0,\n cancelOrder: !0,\n cancelOrders: void 0,\n createDepositAddress: !0,\n createMarketBuyOrderWithCost: !0,\n createMarketOrderWithCost: !1,\n createMarketSellOrderWithCost: !1,\n createOrder: !0,\n createOrders: !0,\n deposit: void 0,\n editOrder: void 0,\n fetchAccounts: !0,\n fetchBalance: !0,\n fetchCanceledOrders: !0,\n fetchClosedOrder: void 0,\n fetchClosedOrders: !0,\n fetchCurrencies: !0,\n fetchDeposit: void 0,\n fetchDepositAddress: !0,\n fetchDepositAddresses: void 0,\n fetchDepositAddressesByNetwork: !0,\n fetchDeposits: !0,\n fetchDepositWithdrawFee: \"emulated\",\n fetchDepositWithdrawFees: !0,\n fetchL2OrderBook: !0,\n fetchLedger: void 0,\n fetchLedgerEntry: void 0,\n fetchMarkets: !0,\n fetchMyTrades: !0,\n fetchOHLCV: !0,\n fetchOpenOrder: void 0,\n fetchOpenOrders: !0,\n fetchOrder: !0,\n fetchOrderBook: !0,\n fetchOrderBooks: void 0,\n fetchOrders: !0,\n fetchOrderTrades: !0,\n fetchPosition: !0,\n fetchPositions: !0,\n fetchPositionsRisk: void 0,\n fetchStatus: !0,\n fetchTicker: !0,\n fetchTickers: !0,\n fetchTime: !0,\n fetchTrades: !0,\n fetchTradingFee: void 0,\n fetchTradingFees: !0,\n fetchTradingLimits: void 0,\n fetchTransactionFee: \"emulated\",\n fetchTransactionFees: !0,\n fetchTransactions: void 0,\n fetchTransfer: !0,\n fetchTransfers: !0,\n fetchWithdrawal: void 0,\n fetchWithdrawals: !0,\n transfer: void 0,\n withdraw: !0\n },\n urls: {\n logo: \"https://user-images.githubusercontent.com/1294454/137283979-8b2a818d-8633-461b-bfca-de89e8c446b2.jpg\",\n api: {\n spot: {\n public: \"https://api.mexc.com\",\n private: \"https://api.mexc.com\"\n },\n spot2: {\n public: \"https://www.mexc.com/open/api/v2\",\n private: \"https://www.mexc.com/open/api/v2\"\n },\n contract: {\n public: \"https://contract.mexc.com/api/v1/contract\",\n private: \"https://contract.mexc.com/api/v1/private\"\n },\n broker: {\n private: \"https://api.mexc.com/api/v3/broker\"\n }\n },\n www: \"https://www.mexc.com/\",\n doc: [\n \"https://mexcdevelop.github.io/apidocs/\"\n ],\n fees: [\n \"https://www.mexc.com/fee\"\n ],\n // https://m.mexc.com/auth/signup?inviteCode=1FQ1G - I removed the code for now, because CWS is blocking until we explain our affiliate program to our users\n referral: \"https://m.mexc.com/auth/signup\"\n },\n api: {\n spot: {\n public: {\n get: {\n ping: 1,\n time: 1,\n exchangeInfo: 10,\n depth: 1,\n trades: 5,\n historicalTrades: 1,\n aggTrades: 1,\n klines: 1,\n avgPrice: 1,\n \"ticker/24hr\": 1,\n \"ticker/price\": 1,\n \"ticker/bookTicker\": 1,\n \"etf/info\": 1\n }\n },\n private: {\n get: {\n order: 2,\n openOrders: 3,\n allOrders: 10,\n account: 10,\n myTrades: 10,\n \"sub-account/list\": 1,\n \"sub-account/apiKey\": 1,\n \"sub-account/asset\": 1,\n \"capital/config/getall\": 10,\n \"capital/deposit/hisrec\": 1,\n \"capital/withdraw/history\": 1,\n \"capital/withdraw/address\": 10,\n \"capital/deposit/address\": 10,\n \"capital/transfer\": 1,\n \"capital/transfer/tranId\": 1,\n \"capital/transfer/internal\": 1,\n \"capital/sub-account/universalTransfer\": 1,\n \"capital/convert\": 1,\n \"capital/convert/list\": 1,\n \"margin/loan\": 1,\n \"margin/allOrders\": 1,\n \"margin/myTrades\": 1,\n \"margin/openOrders\": 1,\n \"margin/maxTransferable\": 1,\n \"margin/priceIndex\": 1,\n \"margin/order\": 1,\n \"margin/isolated/account\": 1,\n \"margin/maxBorrowable\": 1,\n \"margin/repay\": 1,\n \"margin/isolated/pair\": 1,\n \"margin/forceLiquidationRec\": 1,\n \"margin/isolatedMarginData\": 1,\n \"margin/isolatedMarginTier\": 1,\n \"rebate/taxQuery\": 1,\n \"rebate/detail\": 1,\n \"rebate/detail/kickback\": 1,\n \"rebate/referCode\": 1,\n \"rebate/affiliate/commission\": 1,\n \"rebate/affiliate/withdraw\": 1,\n \"rebate/affiliate/commission/detail\": 1,\n \"mxDeduct/enable\": 1,\n userDataStream: 1\n },\n post: {\n order: 1,\n \"order/test\": 1,\n \"sub-account/virtualSubAccount\": 1,\n \"sub-account/apiKey\": 1,\n \"sub-account/futures\": 1,\n \"sub-account/margin\": 1,\n batchOrders: 10,\n \"capital/withdraw/apply\": 1,\n \"capital/transfer\": 1,\n \"capital/transfer/internal\": 1,\n \"capital/deposit/address\": 1,\n \"capital/sub-account/universalTransfer\": 1,\n \"capital/convert\": 10,\n \"mxDeduct/enable\": 1,\n userDataStream: 1\n },\n put: {\n userDataStream: 1\n },\n delete: {\n order: 1,\n openOrders: 1,\n \"sub-account/apiKey\": 1,\n \"margin/order\": 1,\n \"margin/openOrders\": 1,\n userDataStream: 1\n }\n }\n },\n contract: {\n public: {\n get: {\n ping: 2,\n detail: 100,\n support_currencies: 2,\n \"depth/{symbol}\": 2,\n \"depth_commits/{symbol}/{limit}\": 2,\n \"index_price/{symbol}\": 2,\n \"fair_price/{symbol}\": 2,\n \"funding_rate/{symbol}\": 2,\n \"kline/{symbol}\": 2,\n \"kline/index_price/{symbol}\": 2,\n \"kline/fair_price/{symbol}\": 2,\n \"deals/{symbol}\": 2,\n ticker: 2,\n risk_reverse: 2,\n \"risk_reverse/history\": 2,\n \"funding_rate/history\": 2\n }\n },\n private: {\n get: {\n \"account/assets\": 2,\n \"account/asset/{currency}\": 2,\n \"account/transfer_record\": 2,\n \"position/list/history_positions\": 2,\n \"position/open_positions\": 2,\n \"position/funding_records\": 2,\n \"position/position_mode\": 2,\n \"order/list/open_orders/{symbol}\": 2,\n \"order/list/history_orders\": 2,\n \"order/external/{symbol}/{external_oid}\": 2,\n \"order/get/{order_id}\": 2,\n \"order/batch_query\": 8,\n \"order/deal_details/{order_id}\": 2,\n \"order/list/order_deals\": 2,\n \"planorder/list/orders\": 2,\n \"stoporder/list/orders\": 2,\n \"stoporder/order_details/{stop_order_id}\": 2,\n \"account/risk_limit\": 2,\n \"account/tiered_fee_rate\": 2,\n \"position/leverage\": 2\n },\n post: {\n \"position/change_margin\": 2,\n \"position/change_leverage\": 2,\n \"position/change_position_mode\": 2,\n \"order/submit\": 2,\n \"order/submit_batch\": 40,\n \"order/cancel\": 2,\n \"order/cancel_with_external\": 2,\n \"order/cancel_all\": 2,\n \"account/change_risk_level\": 2,\n \"planorder/place\": 2,\n \"planorder/cancel\": 2,\n \"planorder/cancel_all\": 2,\n \"stoporder/cancel\": 2,\n \"stoporder/cancel_all\": 2,\n \"stoporder/change_price\": 2,\n \"stoporder/change_plan_price\": 2\n }\n }\n },\n spot2: {\n public: {\n get: {\n \"market/symbols\": 1,\n \"market/coin/list\": 2,\n \"common/timestamp\": 1,\n \"common/ping\": 2,\n \"market/ticker\": 1,\n \"market/depth\": 1,\n \"market/deals\": 1,\n \"market/kline\": 1,\n \"market/api_default_symbols\": 2\n }\n },\n private: {\n get: {\n \"account/info\": 1,\n \"order/open_orders\": 1,\n \"order/list\": 1,\n \"order/query\": 1,\n \"order/deals\": 1,\n \"order/deal_detail\": 1,\n \"asset/deposit/address/list\": 2,\n \"asset/deposit/list\": 2,\n \"asset/address/list\": 2,\n \"asset/withdraw/list\": 2,\n \"asset/internal/transfer/record\": 10,\n \"account/balance\": 10,\n \"asset/internal/transfer/info\": 10,\n \"market/api_symbols\": 2\n },\n post: {\n \"order/place\": 1,\n \"order/place_batch\": 1,\n \"order/advanced/place_batch\": 1,\n \"asset/withdraw\": 2,\n \"asset/internal/transfer\": 10\n },\n delete: {\n \"order/cancel\": 1,\n \"order/cancel_by_symbol\": 1,\n \"asset/withdraw\": 2\n }\n }\n },\n broker: {\n private: {\n get: {\n \"sub-account/universalTransfer\": 1,\n \"sub-account/list\": 1,\n \"sub-account/apiKey\": 1,\n \"capital/deposit/subAddress\": 1,\n \"capital/deposit/subHisrec\": 1,\n \"capital/deposit/subHisrec/getall\": 1\n },\n post: {\n \"sub-account/virtualSubAccount\": 1,\n \"sub-account/apiKey\": 1,\n \"capital/deposit/subAddress\": 1,\n \"capital/withdraw/apply\": 1,\n \"sub-account/universalTransfer\": 1,\n \"sub-account/futures\": 1\n },\n delete: {\n \"sub-account/apiKey\": 1\n }\n }\n }\n },\n precisionMode: ct,\n timeframes: {\n \"1m\": \"1m\",\n \"5m\": \"5m\",\n \"15m\": \"15m\",\n \"30m\": \"30m\",\n \"1h\": \"1h\",\n \"4h\": \"4h\",\n \"8h\": \"8h\",\n \"1d\": \"1d\",\n \"1w\": \"1w\",\n \"1M\": \"1M\"\n // spot, swap\n },\n fees: {\n trading: {\n tierBased: !1,\n percentage: !0,\n maker: this.parseNumber(\"0.002\"),\n taker: this.parseNumber(\"0.002\")\n }\n },\n options: {\n timeDifference: 0,\n createMarketBuyOrderRequiresPrice: !0,\n unavailableContracts: {\n \"BTC/USDT:USDT\": !0,\n \"LTC/USDT:USDT\": !0,\n \"ETH/USDT:USDT\": !0\n },\n fetchMarkets: {\n types: {\n spot: !0,\n swap: {\n linear: !0,\n inverse: !1\n }\n }\n },\n timeframes: {\n spot: {\n \"1m\": \"1m\",\n \"5m\": \"5m\",\n \"15m\": \"15m\",\n \"30m\": \"30m\",\n \"1h\": \"60m\",\n \"4h\": \"4h\",\n \"1d\": \"1d\",\n \"1M\": \"1M\"\n },\n swap: {\n \"1m\": \"Min1\",\n \"5m\": \"Min5\",\n \"15m\": \"Min15\",\n \"30m\": \"Min30\",\n \"1h\": \"Min60\",\n \"4h\": \"Hour4\",\n \"8h\": \"Hour8\",\n \"1d\": \"Day1\",\n \"1w\": \"Week1\",\n \"1M\": \"Month1\"\n }\n },\n defaultType: \"spot\",\n defaultNetwork: \"ETH\",\n defaultNetworks: {\n ETH: \"ETH\",\n USDT: \"ERC20\",\n USDC: \"ERC20\",\n BTC: \"BTC\",\n LTC: \"LTC\"\n },\n networks: {\n ABBC: \"ABBC\",\n ACA: \"ACALA\",\n ADA: \"Cardano(ADA)\",\n AE: \"AE\",\n ALGO: \"Algorand(ALGO)\",\n ALPH: \"Alephium(ALPH)\",\n AME: \"AME\",\n AOK: \"AOK\",\n APT: \"APTOS(APT)\",\n AR: \"AR\",\n ARB: \"Arbitrum One(ARB)\",\n ARBNOVA: \"ARBNOVA\",\n ARBONE: \"ArbitrumOne(ARB)\",\n ARK: \"ARK\",\n ASTR: \"ASTAR\",\n ATOM: \"Cosmos(ATOM)\",\n AVAXC: \"Avalanche C Chain(AVAX CCHAIN)\",\n AVAXX: \"Avalanche X Chain(AVAX XCHAIN)\",\n AZERO: \"Aleph Zero(AZERO)\",\n BCH: \"Bitcoin Cash(BCH)\",\n BDX: \"BDX\",\n BEAM: \"BEAM\",\n BEP2: \"BNB Beacon Chain(BEP2)\",\n BEP20: \"BNB Smart Chain(BEP20)\",\n BITCI: \"BITCI\",\n BNC: \"BNC\",\n BNCDOT: \"BNCPOLKA\",\n BOBA: \"BOBA\",\n BSC: \"BEP20(BSC)\",\n BSV: \"Bitcoin SV(BSV)\",\n BTC: \"Bitcoin(BTC)\",\n BTM: \"BTM2\",\n CELO: \"CELO\",\n CFX: \"CFX\",\n CHZ: \"Chiliz Legacy Chain(CHZ)\",\n CHZ2: \"Chiliz Chain(CHZ2)\",\n CKB: \"CKB\",\n CLORE: \"Clore.ai(CLORE)\",\n CRC20: \"CRONOS\",\n CSPR: \"CSPR\",\n DASH: \"DASH\",\n DC: \"Dogechain(DC)\",\n DCR: \"DCR\",\n DNX: \"Dynex(DNX)\",\n DOGE: \"Dogecoin(DOGE)\",\n DOT: \"Polkadot(DOT)\",\n DYM: \"Dymension(DYM)\",\n EDG: \"EDG\",\n EGLD: \"EGLD\",\n EOS: \"EOS\",\n ERC20: \"Ethereum(ERC20)\",\n ETC: \"Ethereum Classic(ETC)\",\n ETHF: \"ETF\",\n ETHW: \"ETHW\",\n EVER: \"EVER\",\n FET: \"FET\",\n FIL: \"FIL\",\n FIO: \"FIO\",\n FLOW: \"FLOW\",\n FSN: \"FSN\",\n FTM: \"Fantom(FTM)\",\n FUSE: \"FUSE\",\n GLMR: \"GLMR\",\n GRIN: \"GRIN\",\n HBAR: \"Hedera(HBAR)\",\n HIVE: \"HIVE\",\n HRC20: \"HECO\",\n HYDRA: \"HYDRA\",\n ICP: \"Internet Computer(ICP)\",\n INDEX: \"Index Chain\",\n IOST: \"IOST\",\n IOTA: \"IOTA\",\n IOTX: \"IOTX\",\n IRIS: \"IRIS\",\n KAR: \"KAR\",\n KAS: \"Kaspa(KAS)\",\n KAVA: \"KAVA\",\n KDA: \"KDA\",\n KILT: \"KILT\",\n KLAY: \"Klaytn(KLAY)\",\n KMA: \"KMA\",\n KSM: \"KSM\",\n LAT: \"LAT\",\n LAVA: \"Elysium(LAVA)\",\n LTC: \"Litecoin(LTC)\",\n LUNA: \"Terra(LUNA)\",\n MASS: \"MASS\",\n MATIC: \"Polygon(MATIC)\",\n MCOIN: \"Mcoin Network\",\n METIS: \"METIS\",\n MINA: \"MINA\",\n MNT: \"Mantle(MNT)\",\n MOVR: \"MOVR\",\n MTRG: \"Meter(MTRG)\",\n NAS: \"NAS\",\n NEAR: \"NEAR Protocol(NEAR)\",\n NEBL: \"NEBL\",\n NEM: \"NEM\",\n NEO: \"NEO\",\n NEO3: \"NEO3\",\n NEOXA: \"Neoxa Network\",\n NULS: \"NULS\",\n OASIS: \"ROSE\",\n OASYS: \"OASYS\",\n OKC: \"OKT\",\n OMN: \"Omega Network(OMN)\",\n OMNI: \"OMNI\",\n ONE: \"ONE\",\n ONT: \"ONT\",\n OPTIMISM: \"Optimism(OP)\",\n OSMO: \"OSMO\",\n PLCU: \"PLCU\",\n POKT: \"POKT\",\n QKC: \"QKC\",\n QTUM: \"QTUM\",\n RAP20: \"RAP20 (Rangers Mainnet)\",\n REI: \"REI\",\n RSK: \"RBTC\",\n RVN: \"Ravencoin(RVN)\",\n SATOX: \"Satoxcoin(SATOX)\",\n SC: \"SC\",\n SCRT: \"SCRT\",\n SDN: \"SDN\",\n SGB: \"SGB\",\n SOL: \"Solana(SOL)\",\n STAR: \"STAR\",\n STARK: \"Starknet(STARK)\",\n STEEM: \"STEEM\",\n SYS: \"SYS\",\n TAO: \"Bittensor(TAO)\",\n TIA: \"Celestia(TIA)\",\n TOMO: \"TOMO\",\n TON: \"Toncoin(TON)\",\n TRC10: \"TRC10\",\n TRC20: \"Tron(TRC20)\",\n UGAS: \"UGAS(Ultrain)\",\n VET: \"VeChain(VET)\",\n VEX: \"Vexanium(VEX)\",\n VSYS: \"VSYS\",\n WAVES: \"WAVES\",\n WAX: \"WAX\",\n WEMIX: \"WEMIX\",\n XCH: \"Chia(XCH)\",\n XDC: \"XDC\",\n XEC: \"XEC\",\n XLM: \"Stellar(XLM)\",\n XMR: \"Monero(XMR)\",\n XNA: \"Neurai(XNA)\",\n XPR: \"XPR Network\",\n XRD: \"XRD\",\n XRP: \"Ripple(XRP)\",\n XTZ: \"XTZ\",\n XVG: \"XVG\",\n XYM: \"XYM\",\n ZEC: \"ZEC\",\n ZEN: \"ZEN\",\n ZIL: \"Zilliqa(ZIL)\",\n ZTG: \"ZTG\"\n // todo: uncomment below after concensus\n // 'ALAYA': 'ATP',\n // 'ANDUSCHAIN': 'DEB',\n // 'ASSETMANTLE': 'MNTL',\n // 'AXE': 'AXE',\n // 'BITCOINHD': 'BHD',\n // 'BITCOINVAULT': 'BTCV',\n // 'BITKUB': 'KUB',\n // 'BITSHARES_OLD': 'BTS',\n // 'BITSHARES': 'NBS',\n // 'BYTZ': 'BYTZ',\n // 'CANTO': 'CANTO', // CANTOEVM\n // 'CENNZ': 'CENNZ',\n // 'CHAINX': 'PCX',\n // 'CONCODRIUM': 'CCD',\n // 'CONTENTVALUENETWORK': 'CVNT',\n // 'CORTEX': 'CTXC',\n // 'CYPHERIUM': 'CPH',\n // 'DANGNN': 'DGC',\n // 'DARWINIASMARTCHAIN': 'Darwinia Smart Chain',\n // 'DHEALTH': 'DHP',\n // 'DOGECOIN': [ 'DOGE', 'DOGECHAIN' ], // todo after unification\n // 'DRAC': 'DRAC',\n // 'DRAKEN': 'DRK',\n // 'ECOCHAIN': 'ECOC',\n // 'ELECTRAPROTOCOL': 'XEP',\n // 'EMERALD': 'EMERALD', // sits on top of OASIS\n // 'EVMOS': 'EVMOS', // EVMOSETH is different\n // 'EXOSAMA': 'SAMA',\n // 'FIBOS': 'FO',\n // 'FILECASH': 'FIC',\n // 'FIRMACHAIN': 'FCT',\n // 'FIRO': 'XZC',\n // 'FNCY': 'FNCY',\n // 'FRUITS': 'FRTS',\n // 'GLEEC': 'GLEEC',\n // 'GXCHAIN': 'GXC',\n // 'HANDSHAKE': 'HNS',\n // 'HPB': 'HPB',\n // 'HSHARE': 'HC',\n // 'HUAHUA': 'HUAHUA',\n // 'HUPAYX': 'HPX',\n // 'INDEXCHAIN': 'IDX',\n // 'INTCHAIN': 'INT',\n // 'INTEGRITEE': 'TEER',\n // 'INTERLAY': 'INTR',\n // 'IOEX': 'IOEX',\n // 'JUNO': 'JUNO',\n // 'KASPA': 'KASPA',\n // 'KEKCHAIN': 'KEKCHAIN',\n // 'KINTSUGI': 'KINT',\n // 'KOINOS': 'KOINOS',\n // 'KONSTELLATION': 'DARC',\n // 'KUJIRA': 'KUJI',\n // 'KULUPU': 'KLP',\n // 'LBRY': 'LBC',\n // 'LEDGIS': 'LED',\n // 'LIGHTNINGBITCOIN': 'LBTC',\n // 'LINE': 'LINE',\n // 'MDNA': 'DNA',\n // 'MDUKEY': 'MDU',\n // 'METAMUI': 'MMUI',\n // 'METAVERSE_ETP': 'ETP',\n // 'METER': 'MTRG',\n // 'MEVERSE': 'MEVerse',\n // 'NEWTON': 'NEW',\n // 'NODLE': 'NODLE',\n // 'ORIGYN': 'OGY',\n // 'PAC': 'PAC',\n // 'PASTEL': 'PSL',\n // 'PHALA': 'Khala',\n // 'PLEX': 'PLEX',\n // 'PMG': 'PMG',\n // 'POINT': 'POINT', // POINTEVM is different\n // 'PROOFOFMEMES': 'POM',\n // 'PROXIMAX': 'XPX',\n // 'RCHAIN': 'REV',\n // 'REBUS': 'REBUS', // REBUSEVM is different\n // 'RIZON': 'ATOLO',\n // 'SENTINEL': 'DVPN',\n // 'SERO': 'SERO',\n // 'TECHPAY': 'TPC',\n // 'TELOSCOIN': 'TLOS', // todo\n // 'TERRA': 'LUNA2',\n // 'TERRACLASSIC': 'LUNC',\n // 'TLOS': 'TELOS', // todo\n // 'TOMAINFO': 'TON',\n // 'TONGTONG': 'TTC',\n // 'TURTLECOIN': 'TRTL',\n // 'ULORD': 'UT',\n // 'ULTRAIN': 'UGAS',\n // 'UMEE': 'UMEE',\n // 'VDIMENSION': 'VOLLAR',\n // 'VEXANIUM': 'VEX',\n // 'VNT': 'VNT',\n // 'WAYKICHAIN': 'WICC',\n // 'WHITECOIN': 'XWC',\n // 'WITNET': 'WIT',\n // 'XDAI': 'XDAI',\n // 'XX': 'XX',\n // 'YAS': 'YAS',\n // 'ZENITH': 'ZENITH',\n // 'ZKSYNC': 'ZKSYNC',\n // // 'BAJUN': '',\n // OKB <> OKT (for usdt it's exception) for OKC, PMEER, FLARE, STRD, ZEL, FUND, \"NONE\", CRING, FREETON, QTZ (probably unique network is meant), HT, BSC(RACAV1), BSC(RACAV2), AMBROSUS, BAJUN, NOM. their individual info is at https://www.mexc.com/api/platform/asset/spot/{COINNAME}\n },\n networksById: {\n \"Aleph Zero(AZERO)\": \"AZERO\",\n \"Alephium(ALPH)\": \"ALPH\",\n \"Algorand(ALGO)\": \"ALGO\",\n \"APTOS(APT)\": \"APT\",\n \"Arbitrum One(ARB)\": \"ARB\",\n \"Avalanche C Chain(AVAX CCHAIN)\": \"AVAXC\",\n \"Avalanche X Chain(AVAX XCHAIN)\": \"AVAXX\",\n \"BEP20(BSC)\": \"BSC\",\n \"Bitcoin Cash(BCH)\": \"BCH\",\n \"Bitcoin SV(BSV)\": \"BSV\",\n \"Bitcoin(BTC)\": \"BTC\",\n \"Bittensor(TAO)\": \"TAO\",\n \"BNB Beacon Chain(BEP2)\": \"BEP2\",\n \"BNB Smart Chain(BEP20-RACAV1)\": \"BSC\",\n \"BNB Smart Chain(BEP20-RACAV2)\": \"BSC\",\n \"BNB Smart Chain(BEP20)\": \"BSC\",\n \"Cardano(ADA)\": \"ADA\",\n \"Celestia(TIA)\": \"TIA\",\n \"Chia(XCH)\": \"XCH\",\n \"Chiliz Chain(CHZ2)\": \"CHZ2\",\n \"Chiliz Legacy Chain(CHZ)\": \"CHZ\",\n \"Clore.ai(CLORE)\": \"CLORE\",\n \"Cosmos(ATOM)\": \"ATOM\",\n \"Dogechain(DC)\": \"DC\",\n \"Dogecoin(DOGE)\": \"DOGE\",\n \"Dymension(DYM)\": \"DYM\",\n \"Dynex(DNX)\": \"DNX\",\n \"Elysium(LAVA)\": \"LAVA\",\n \"Ethereum Classic(ETC)\": \"ETC\",\n \"Ethereum(ERC20)\": \"ERC20\",\n \"Fantom(FTM)\": \"FTM\",\n \"Hedera(HBAR)\": \"HBAR\",\n \"Index Chain\": \"INDEX\",\n \"Internet Computer(ICP)\": \"ICP\",\n \"Kaspa(KAS)\": \"KAS\",\n \"Klaytn(KLAY)\": \"KLAY\",\n \"Litecoin(LTC)\": \"LTC\",\n \"Mantle(MNT)\": \"MNT\",\n \"Mcoin Network\": \"MCOIN\",\n \"Meter(MTRG)\": \"MTRG\",\n \"Monero(XMR)\": \"XMR\",\n \"NEAR Protocol(NEAR)\": \"NEAR\",\n \"Neoxa Network\": \"NEOXA\",\n \"Neurai(XNA)\": \"XNA\",\n \"Omega Network(OMN)\": \"OMN\",\n \"Optimism(OP)\": \"OPTIMISM\",\n \"Polkadot(DOT)\": \"DOT\",\n \"Polygon(MATIC)\": \"MATIC\",\n \"RAP20 (Rangers Mainnet)\": \"RAP20\",\n \"Ravencoin(RVN)\": \"RVN\",\n \"Ripple(XRP)\": \"XRP\",\n \"Satoxcoin(SATOX)\": \"SATOX\",\n \"Solana(SOL)\": \"SOL\",\n \"Starknet(STARK)\": \"STARK\",\n \"Stellar(XLM)\": \"XLM\",\n \"Terra(LUNA)\": \"LUNA\",\n \"Toncoin(TON)\": \"TON\",\n \"Tron(TRC20)\": \"TRC20\",\n \"UGAS(Ultrain)\": \"UGAS\",\n \"VeChain(VET)\": \"VET\",\n \"Vexanium(VEX)\": \"VEX\",\n \"XPR Network\": \"XPR\",\n \"Zilliqa(ZIL)\": \"ZIL\"\n // TODO: uncomment below after deciding unified name\n // 'PEPE COIN BSC':\n // 'SMART BLOCKCHAIN':\n // 'f(x)Core':\n // 'Syscoin Rollux':\n // 'Syscoin UTXO':\n // 'zkSync Era':\n // 'zkSync Lite':\n // 'Darwinia Smart Chain':\n // 'Arbitrum One(ARB-Bridged)':\n // 'Optimism(OP-Bridged)':\n // 'Polygon(MATIC-Bridged)':\n },\n recvWindow: 5 * 1e3,\n maxTimeTillEnd: 90 * 86400 * 1e3 - 1,\n broker: \"CEDE\",\n accountsByType: {\n spot: \"SPOT\",\n swap: \"FUTURES\",\n margin: \"ISOLATED_MARGIN\"\n }\n },\n exceptions: {\n exact: {\n // until mexc migrates fully to v3, it might be worth to note the version & market aside errors, not easily remove obsolete version's exceptions in future\n \"-1128\": O,\n \"-2011\": O,\n \"-1121\": g,\n 10101: re,\n 2009: k,\n 2011: O,\n 30004: re,\n 33333: g,\n 44444: O,\n 1002: k,\n 30019: pe,\n 30005: k,\n 2003: k,\n 2005: re,\n 400: g,\n // '500': OnMaintenance, // {\"code\": 500,\"message\": \"Under maintenance, please try again later\",\"announcement\": \"https://www.mexc.com/support/articles/17827791510263\"}\n 600: O,\n 70011: ee,\n 88004: re,\n 88009: O,\n 88013: g,\n 88015: re,\n 700003: ze,\n 26: O,\n 602: Z,\n 10001: Z,\n 10007: g,\n 10015: g,\n 10072: Z,\n 10073: Nt,\n 10095: g,\n 10096: g,\n 10097: g,\n 10098: k,\n 10099: O,\n 10100: $e,\n 10102: g,\n 10103: O,\n 10200: je,\n 10201: je,\n 10202: je,\n 10206: Vt,\n 10211: Vt,\n 10212: ke,\n 10216: O,\n 10219: O,\n 10222: g,\n 10232: $e,\n 10259: O,\n 10265: O,\n 10268: g,\n 20001: O,\n 20002: O,\n 22222: O,\n 3e4: O,\n 30001: k,\n 30002: g,\n 30003: g,\n 30010: g,\n 30014: g,\n 30016: k,\n 30018: Ee,\n 30020: Z,\n 30021: g,\n 30025: k,\n 30026: Se,\n 30027: k,\n 30028: k,\n 30029: k,\n 30032: k,\n 30041: k,\n 60005: O,\n 700001: Z,\n 700002: Z,\n 700004: g,\n 700005: ze,\n 700006: ee,\n 700007: ee,\n 700008: g,\n 730001: it,\n 730002: g,\n 73e4: O,\n 730003: O,\n 730100: O,\n 730600: O,\n 730601: O,\n 730602: O,\n 730700: O,\n 730701: O,\n 730702: O,\n 730703: O,\n 730704: O,\n 730705: O,\n 730706: Z,\n 730707: Z,\n 730101: O,\n 140001: O,\n 140002: Z,\n 152046: gi\n // Unable to withdraw to this address. Please contact the relevant business party.\n },\n broad: {\n \"Order quantity error, please try to modify.\": g,\n \"Combination of optional parameters invalid\": g,\n \"api market order is disabled\": pe,\n \"Contract not allow place order!\": k,\n Oversold: k,\n \"Insufficient position\": re,\n \"Insufficient balance!\": re,\n \"Bid price is great than max allow price\": g,\n \"Invalid symbol.\": g,\n \"Param error!\": g,\n maintenance: dt\n // {\"code\": 500,\"message\": \"Under maintenance, please try again later\",\"announcement\": \"https://www.mexc.com/support/articles/17827791510263\"}\n }\n }\n });\n }\n async fetchStatus(e = {}) {\n const [t, i] = this.handleMarketTypeAndParams(\"fetchStatus\", void 0, e);\n let s, n, r;\n return t === \"spot\" ? (s = await this.spotPublicGetPing(i), n = Object.keys(s).length ? this.json(s) : \"ok\") : t === \"swap\" && (s = await this.contractPublicGetPing(i), n = this.safeValue(s, \"success\") ? \"ok\" : this.json(s), r = this.safeInteger(s, \"data\")), {\n status: n,\n updated: r,\n url: void 0,\n eta: void 0,\n info: s\n };\n }\n async fetchTime(e = {}) {\n const [t, i] = this.handleMarketTypeAndParams(\"fetchTime\", void 0, e);\n let s;\n if (t === \"spot\")\n return s = await this.spotPublicGetTime(i), this.safeInteger(s, \"serverTime\");\n if (t === \"swap\")\n return s = await this.contractPublicGetPing(i), this.safeInteger(s, \"data\");\n }\n nonce() {\n return this.milliseconds() - this.options.timeDifference;\n }\n isUsingForcedProxy(e = {}, t = []) {\n return t[1] === \"private\";\n }\n async fetchCurrencies(e = {}) {\n if (!this.checkRequiredCredentials(!1))\n return;\n const t = await this.spotPrivateGetCapitalConfigGetall(e), i = {};\n for (let s = 0; s < t.length; s++) {\n const n = t[s], r = this.safeString(n, \"coin\"), a = this.safeCurrencyCode(r), o = this.safeString(n, \"name\");\n let c = !1, u, f, h, l = !1, p = !1;\n const m = {}, y = this.safeValue(n, \"networkList\", []);\n for (let b = 0; b < y.length; b++) {\n const T = y[b], x = this.safeString(T, \"network\"), v = this.safeBool(T, \"depositEnable\", !1), _ = this.safeBool(T, \"withdrawEnable\", !1), V = v && _;\n c = V || c;\n const j = this.safeString(T, \"withdrawMin\"), G = this.safeString(T, \"withdrawMax\");\n f = f === void 0 ? j : f, h = h === void 0 ? G : h;\n const W = this.safeNumber(T, \"withdrawFee\");\n u = u === void 0 ? W : u, P.stringGt(f, j) && (f = j), P.stringLt(h, G) && (h = G), v && (l = !0), _ && (p = !0), m[x] = {\n info: T,\n id: x,\n network: x,\n active: V,\n deposit: v,\n withdraw: _,\n fee: W,\n precision: void 0,\n limits: {\n withdraw: {\n min: j,\n max: G\n }\n }\n };\n }\n const S = Object.keys(m).length;\n if (S === 1 || \"NONE\" in m) {\n const b = this.safeValue2(m, \"NONE\", S - 1);\n b !== void 0 && (u = b.fee);\n }\n i[a] = {\n info: n,\n id: r,\n code: a,\n name: o,\n active: c,\n deposit: l,\n withdraw: p,\n fee: u,\n precision: void 0,\n limits: {\n amount: {\n min: void 0,\n max: void 0\n },\n withdraw: {\n min: f,\n max: h\n }\n },\n networks: m\n };\n }\n return i;\n }\n async fetchMarkets(e = {}) {\n const t = await this.fetchSpotMarkets(e), i = await this.fetchSwapMarkets(e);\n return this.arrayConcat(t, i);\n }\n async fetchSpotMarkets(e = {}) {\n const t = await this.spotPublicGetExchangeInfo(e), i = this.safeValue(t, \"symbols\", []), s = [];\n for (let n = 0; n < i.length; n++) {\n const r = i[n], a = this.safeString(r, \"symbol\"), o = this.safeString(r, \"baseAsset\"), c = this.safeString(r, \"quoteAsset\"), u = this.safeCurrencyCode(o), f = this.safeCurrencyCode(c), h = this.safeString(r, \"status\"), l = this.safeValue(r, \"isSpotTradingAllowed\");\n let p = !1;\n (h === \"ENABLED\" || h === \"1\") && l && (p = !0);\n const m = this.safeValue(r, \"isMarginTradingAllowed\"), y = this.safeNumber(r, \"makerCommission\"), w = this.safeNumber(r, \"takerCommission\"), S = this.safeNumber(r, \"maxQuoteAmount\");\n s.push({\n id: a,\n symbol: u + \"/\" + f,\n base: u,\n quote: f,\n settle: void 0,\n baseId: o,\n quoteId: c,\n settleId: void 0,\n type: \"spot\",\n spot: !0,\n margin: m,\n swap: !1,\n future: !1,\n option: !1,\n active: p,\n contract: !1,\n linear: void 0,\n inverse: void 0,\n taker: w,\n maker: y,\n contractSize: void 0,\n expiry: void 0,\n expiryDatetime: void 0,\n strike: void 0,\n optionType: void 0,\n precision: {\n amount: this.parseNumber(this.parsePrecision(this.safeString(r, \"baseAssetPrecision\"))),\n price: this.parseNumber(this.parsePrecision(this.safeString(r, \"quoteAssetPrecision\")))\n },\n limits: {\n leverage: {\n min: void 0,\n max: void 0\n },\n amount: {\n min: this.safeNumber(r, \"baseSizePrecision\"),\n max: void 0\n },\n price: {\n min: void 0,\n max: void 0\n },\n cost: {\n min: this.safeNumber(r, \"quoteAmountPrecision\"),\n max: S\n }\n },\n created: void 0,\n info: r\n });\n }\n return s;\n }\n async fetchSwapMarkets(e = {}) {\n const t = await this.contractPublicGetDetail(e), i = this.safeValue(t, \"data\", []), s = [];\n for (let n = 0; n < i.length; n++) {\n const r = i[n], a = this.safeString(r, \"symbol\"), o = this.safeString(r, \"baseCoin\"), c = this.safeString(r, \"quoteCoin\"), u = this.safeString(r, \"settleCoin\"), f = this.safeCurrencyCode(o), h = this.safeCurrencyCode(c), l = this.safeCurrencyCode(u), p = this.safeString(r, \"state\");\n s.push({\n id: a,\n symbol: f + \"/\" + h + \":\" + l,\n base: f,\n quote: h,\n settle: l,\n baseId: o,\n quoteId: c,\n settleId: u,\n type: \"swap\",\n spot: !1,\n margin: !1,\n swap: !0,\n future: !1,\n option: !1,\n active: p === \"0\",\n contract: !0,\n linear: !0,\n inverse: !1,\n taker: this.safeNumber(r, \"takerFeeRate\"),\n maker: this.safeNumber(r, \"makerFeeRate\"),\n contractSize: this.safeNumber(r, \"contractSize\"),\n expiry: void 0,\n expiryDatetime: void 0,\n strike: void 0,\n optionType: void 0,\n precision: {\n amount: this.safeNumber(r, \"volUnit\"),\n price: this.safeNumber(r, \"priceUnit\")\n },\n limits: {\n leverage: {\n min: this.safeNumber(r, \"minLeverage\"),\n max: this.safeNumber(r, \"maxLeverage\")\n },\n amount: {\n min: this.safeNumber(r, \"minVol\"),\n max: this.safeNumber(r, \"maxVol\")\n },\n price: {\n min: void 0,\n max: void 0\n },\n cost: {\n min: void 0,\n max: void 0\n }\n },\n created: void 0,\n info: r\n });\n }\n return s;\n }\n async fetchOrderBook(e, t = void 0, i = {}) {\n await this.loadMarkets();\n const s = this.market(e), n = {\n symbol: s.id\n };\n t !== void 0 && (n.limit = t);\n let r;\n if (s.spot) {\n const a = await this.spotPublicGetDepth(this.extend(n, i)), o = this.safeInteger(a, \"timestamp\");\n r = this.parseOrderBook(a, e, o), r.nonce = this.safeInteger(a, \"lastUpdateId\");\n } else if (s.swap) {\n const a = await this.contractPublicGetDepthSymbol(this.extend(n, i)), o = this.safeValue(a, \"data\"), c = this.safeInteger(o, \"timestamp\");\n r = this.parseOrderBook(o, e, c), r.nonce = this.safeInteger(o, \"version\");\n }\n return r;\n }\n parseBidAsk(e, t = 0, i = 1, s = 2) {\n const r = this.safeNumber(e, t), a = this.safeNumber(e, i), o = this.safeNumber(e, 2);\n return o !== void 0 ? [r, a, o] : [r, a];\n }\n async fetchTrades(e, t = void 0, i = void 0, s = {}) {\n await this.loadMarkets();\n const n = this.market(e), r = {\n symbol: n.id\n };\n i !== void 0 && (r.limit = i);\n let a;\n if (n.spot) {\n const o = this.safeIntegerN(s, [\"endTime\", \"until\", \"till\"]);\n if (t !== void 0 && (r.startTime = t, o === void 0))\n throw new g(\"fetchTrades() requires an until parameter when since is provided\").exchange(this.id);\n if (o !== void 0) {\n if (t === void 0)\n throw new g(\"fetchTrades() requires a since parameter when until is provided\").exchange(this.id);\n r.endTime = o;\n }\n let c = this.safeString(this.options, \"fetchTradesMethod\", \"spotPublicGetAggTrades\");\n if (c = this.safeString(s, \"method\", c), s = this.omit(s, [\"method\"]), c === \"spotPublicGetAggTrades\")\n a = await this.spotPublicGetAggTrades(this.extend(r, s));\n else if (c === \"spotPublicGetHistoricalTrades\")\n a = await this.spotPublicGetHistoricalTrades(this.extend(r, s));\n else if (c === \"spotPublicGetTrades\")\n a = await this.spotPublicGetTrades(this.extend(r, s));\n else\n throw new pe(c).addMessage(\"fetchTrades() not support this method\").exchange(this.id);\n } else if (n.swap) {\n const o = await this.contractPublicGetDealsSymbol(this.extend(r, s));\n a = this.safeValue(o, \"data\");\n }\n return this.parseTrades(a, n, t, i);\n }\n parseTrade(e, t = void 0) {\n let i, s, n, r, a, c, u, f, h, l;\n if (\"v\" in e)\n s = this.safeInteger(e, \"t\"), t = this.safeMarket(void 0, t), r = t.symbol, f = this.safeString(e, \"p\"), h = this.safeString(e, \"v\"), c = this.parseOrderSide(this.safeString(e, \"T\")), u = \"taker\";\n else {\n const p = this.safeString(e, \"symbol\");\n if (t = this.safeMarket(p, t), r = t.symbol, i = this.safeString2(e, \"id\", \"a\"), f = this.safeString2(e, \"price\", \"p\"), n = this.safeString(e, \"orderId\"), \"positionMode\" in e)\n s = this.safeInteger(e, \"timestamp\"), h = this.safeString(e, \"vol\"), c = this.parseOrderSide(this.safeString(e, \"side\")), a = {\n cost: this.safeString(e, \"fee\"),\n currency: this.safeCurrencyCode(this.safeString(e, \"feeCurrency\"))\n }, u = this.safeValue(e, \"taker\") ? \"taker\" : \"maker\";\n else {\n s = this.safeInteger2(e, \"time\", \"T\"), h = this.safeString2(e, \"qty\", \"q\"), l = this.safeString(e, \"quoteQty\");\n const m = this.safeValue(e, \"isBuyer\"), y = this.safeValue(e, \"isMaker\"), w = this.safeValue2(e, \"isBuyerMaker\", \"m\");\n y !== void 0 && (u = y ? \"maker\" : \"taker\"), m !== void 0 && (c = m ? \"buy\" : \"sell\"), w !== void 0 && (c = w ? \"sell\" : \"buy\", u = \"taker\");\n const S = this.safeString(e, \"commissionAsset\");\n S !== void 0 && (a = {\n cost: this.safeString(e, \"commission\"),\n currency: this.safeCurrencyCode(S)\n });\n }\n }\n return i === void 0 && (i = this.syntheticTradeId(t, s, c, h, f, void 0, u)), this.safeTrade({\n id: i,\n order: n,\n timestamp: s,\n datetime: this.iso8601(s),\n symbol: r,\n type: void 0,\n side: c,\n takerOrMaker: u,\n price: f,\n amount: h,\n cost: l,\n fee: a,\n info: e\n }, t);\n }\n syntheticTradeId(e = void 0, t = void 0, i = void 0, s = void 0, n = void 0, r = void 0, a = void 0) {\n let o = \"\";\n return t !== void 0 && (o = this.numberToString(t) + \"-\" + this.safeString(e, \"id\", \"_\"), i !== void 0 && (o += \"-\" + i), s !== void 0 && (o += \"-\" + this.numberToString(s)), n !== void 0 && (o += \"-\" + this.numberToString(n)), a !== void 0 && (o += \"-\" + a), r !== void 0 && (o += \"-\" + r)), o;\n }\n async fetchOHLCV(e, t = \"1m\", i = void 0, s = void 0, n = {}) {\n await this.loadMarkets();\n const r = this.market(e), a = r.spot ? 1e3 : 2e3;\n let o = !1;\n if ([o, n] = this.handleOptionAndParams(n, \"fetchOHLCV\", \"paginate\", !1), o)\n return await this.fetchPaginatedCallDeterministic(\"fetchOHLCV\", e, i, s, t, n, a);\n const c = this.safeValue(this.options, \"timeframes\", {}), u = this.safeValue(c, r.type, {}), f = this.safeString(u, t), h = this.parseTimeframe(t) * 1e3, l = {\n symbol: r.id,\n interval: f\n };\n let p;\n if (r.spot) {\n const m = this.safeIntegerN(n, [\"until\", \"endTime\", \"till\"]);\n if (i !== void 0 && (l.startTime = i, m === void 0)) {\n const w = this.sum(i, a * h), S = this.milliseconds();\n l.endTime = Math.min(w, S);\n }\n s !== void 0 && (l.limit = s), m !== void 0 && (n = this.omit(n, [\"until\", \"till\"]), l.endTime = m), p = await this.spotPublicGetKlines(this.extend(l, n));\n } else if (r.swap) {\n const m = this.safeIntegerProductN(n, [\"until\", \"endTime\", \"till\"], 1e-3);\n i !== void 0 && (l.start = this.parseToInt(i / 1e3)), m !== void 0 && (n = this.omit(n, [\"until\", \"till\"]), l.end = m);\n const y = this.safeString(n, \"price\", \"default\");\n n = this.omit(n, \"price\");\n let w;\n if (y === \"default\")\n w = await this.contractPublicGetKlineSymbol(this.extend(l, n));\n else if (y === \"index\")\n w = await this.contractPublicGetKlineIndexPriceSymbol(this.extend(l, n));\n else if (y === \"mark\")\n w = await this.contractPublicGetKlineFairPriceSymbol(this.extend(l, n));\n else\n throw new g(\"fetchOHLCV() not support this price type, [default, index, mark]\").exchange(this.id);\n const S = this.safeValue(w, \"data\");\n p = this.convertTradingViewToOHLCV(S, \"time\", \"open\", \"high\", \"low\", \"close\", \"vol\");\n }\n return this.parseOHLCVs(p, r, t, i, s);\n }\n parseOHLCV(e, t = void 0) {\n return [\n this.safeInteger(e, 0),\n this.safeNumber(e, 1),\n this.safeNumber(e, 2),\n this.safeNumber(e, 3),\n this.safeNumber(e, 4),\n this.safeNumber(e, 5)\n ];\n }\n async fetchTickers(e = void 0, t = {}) {\n await this.loadMarkets();\n const i = {};\n let s, n = !1;\n if (e !== void 0) {\n n = e.length === 1;\n const u = this.safeString(e, 0);\n s = this.market(u);\n }\n const [r, a] = this.handleMarketTypeAndParams(\"fetchTickers\", s, t);\n let o;\n if (n && (i.symbol = s.id), r === \"spot\")\n o = await this.spotPublicGetTicker24hr(this.extend(i, a));\n else if (r === \"swap\") {\n const c = await this.contractPublicGetTicker(this.extend(i, a));\n o = this.safeValue(c, \"data\", []);\n }\n return n && (o = [o]), this.parseTickers(o, e);\n }\n async fetchTicker(e, t = {}) {\n await this.loadMarkets();\n const i = this.market(e), [s, n] = this.handleMarketTypeAndParams(\"fetchTicker\", i, t);\n let r;\n const a = {\n symbol: i.id\n };\n if (s === \"spot\")\n r = await this.spotPublicGetTicker24hr(this.extend(a, n));\n else if (s === \"swap\") {\n const o = await this.contractPublicGetTicker(this.extend(a, n));\n r = this.safeValue(o, \"data\", {});\n }\n return this.parseTicker(r, i);\n }\n parseTicker(e, t = void 0) {\n const i = this.safeString(e, \"symbol\");\n t = this.safeMarket(i, t);\n let s, n, r, a, o, c, u, f, h, l, p, m, y;\n return this.safeValue(t, \"swap\") || \"timestamp\" in e ? (s = this.safeInteger(e, \"timestamp\"), n = this.safeString(e, \"bid1\"), r = this.safeString(e, \"ask1\"), c = this.safeString(e, \"volume24\"), u = this.safeString(e, \"amount24\"), h = this.safeString(e, \"high24Price\"), l = this.safeString(e, \"lower24Price\"), m = this.safeString(e, \"riseFallValue\"), p = this.safeString(e, \"riseFallRate\"), p = P.stringMul(p, \"100\")) : (s = this.safeInteger(e, \"closeTime\"), n = this.safeString(e, \"bidPrice\"), r = this.safeString(e, \"askPrice\"), a = this.safeString(e, \"bidQty\"), o = this.safeString(e, \"askQty\"), P.stringEq(a, \"0\") && (a = void 0), P.stringEq(o, \"0\") && (o = void 0), c = this.safeString(e, \"volume\"), u = this.safeString(e, \"quoteVolume\"), f = this.safeString(e, \"openPrice\"), h = this.safeString(e, \"highPrice\"), l = this.safeString(e, \"lowPrice\"), y = this.safeString(e, \"prevClosePrice\"), m = this.safeString(e, \"priceChange\"), p = this.safeString(e, \"priceChangePercent\"), p = P.stringMul(p, \"100\")), this.safeTicker({\n symbol: t.symbol,\n timestamp: s,\n datetime: this.iso8601(s),\n open: f,\n high: h,\n low: l,\n close: this.safeString(e, \"lastPrice\"),\n bid: n,\n bidVolume: a,\n ask: r,\n askVolume: o,\n vwap: void 0,\n previousClose: y,\n change: m,\n percentage: p,\n average: void 0,\n baseVolume: c,\n quoteVolume: u,\n info: e\n }, t);\n }\n async createMarketBuyOrderWithCost(e, t, i = {}) {\n await this.loadMarkets();\n const s = this.market(e);\n if (!s.spot)\n throw new ge(s.type).exchange(this.id);\n return i.createMarketBuyOrderRequiresPrice = !1, await this.createOrder(e, \"market\", \"buy\", t, void 0, i);\n }\n async createOrder(e, t, i, s, n = void 0, r = {}) {\n await this.loadMarkets();\n const a = this.market(e), [o, c] = this.handleMarginModeAndParams(\"createOrder\", r);\n return a.spot ? await this.createSpotOrder(a, t, i, s, n, o, c) : await this.createSwapOrder(a, t, i, s, n, o, c);\n }\n createSpotOrderRequest(e, t, i, s, n = void 0, r = void 0, a = {}) {\n const o = e.symbol, c = i.toUpperCase(), u = {\n symbol: e.id,\n side: c,\n type: t.toUpperCase()\n };\n if (c === \"BUY\" && t === \"market\") {\n let l = !0;\n [l, a] = this.handleOptionAndParams(a, \"createOrder\", \"createMarketBuyOrderRequiresPrice\", !0);\n const p = this.safeNumber2(a, \"cost\", \"quoteOrderQty\");\n if (a = this.omit(a, \"cost\"), p !== void 0)\n s = p;\n else if (l) {\n if (n === void 0)\n throw new g(\"createOrder() requires the price argument for market buy orders to calculate the total cost to spend (amount * price), alternatively set the createMarketBuyOrderRequiresPrice option or param to false and pass the cost to spend in the amount argument\").exchange(this.id);\n {\n const m = this.numberToString(s), y = this.numberToString(n);\n s = P.stringMul(m, y);\n }\n }\n u.quoteOrderQty = this.costToPrecision(o, s);\n } else\n u.quantity = this.amountToPrecision(o, s);\n n !== void 0 && (u.price = this.priceToPrecision(o, n));\n const f = this.safeString(a, \"clientOrderId\");\n if (f !== void 0 && (u.newClientOrderId = f, a = this.omit(a, [\"type\", \"clientOrderId\"])), r !== void 0 && r !== \"isolated\")\n throw new k().addMessage(\"createOrder() does not support marginMode \" + r + \" for spot-margin trading\").exchange(this.id);\n let h;\n return [h, a] = this.handlePostOnly(t === \"market\", t === \"LIMIT_MAKER\", a), h && (u.type = \"LIMIT_MAKER\"), this.extend(u, a);\n }\n async createSpotOrder(e, t, i, s, n = void 0, r = void 0, a = {}) {\n await this.loadMarkets();\n const o = this.createSpotOrderRequest(e, t, i, s, n, r, a), c = await this.spotPrivatePostOrder(this.extend(o, a)), u = this.parseOrder(c, e);\n return u.side = i, u.type = t, u.price = n, u.amount = s, u;\n }\n async createSwapOrder(e, t, i, s, n = void 0, r = void 0, a = {}) {\n await this.loadMarkets();\n const o = e.symbol, c = this.safeValue(this.options, \"unavailableContracts\", {});\n if (this.safeBool(c, o, !1))\n throw new it(o).addMessage(\"createSwapOrder() does not support yet this symbol:\" + o).exchange(this.id);\n let f;\n if (r !== void 0)\n if (r === \"cross\")\n f = 2;\n else if (r === \"isolated\")\n f = 1;\n else\n throw new g('createSwapOrder() marginMode parameter should be either \"cross\" or \"isolated\"').exchange(this.id);\n else\n f = this.safeInteger(a, \"openType\", 2);\n if (t !== \"limit\" && t !== \"market\" && t !== 1 && t !== 2 && t !== 3 && t !== 4 && t !== 5 && t !== 6)\n throw new g(\"createSwapOrder() order type must either limit, market, or 1 for limit orders, 2 for post-only orders, 3 for IOC orders, 4 for FOK orders, 5 for market orders or 6 to convert market price to current price\").exchange(this.id);\n let h;\n [h, a] = this.handlePostOnly(t === \"market\", t === 2, a), h ? t = 2 : t === \"limit\" ? t = 1 : t === \"market\" && (t = 6);\n const l = {\n symbol: e.id,\n // 'price': parseFloat (this.priceToPrecision (symbol, price)),\n vol: parseFloat(this.amountToPrecision(o, s)),\n // 'leverage': int, // required for isolated margin\n // 'side': side, // 1 open long, 2 close short, 3 open short, 4 close long\n //\n // supported order types\n //\n // 1 limit\n // 2 post only maker (PO)\n // 3 transact or cancel instantly (IOC)\n // 4 transact completely or cancel completely (FOK)\n // 5 market orders\n // 6 convert market price to current price\n //\n type: t,\n openType: f\n // 1 isolated, 2 cross\n // 'positionId': 1394650, // long, filling in this parameter when closing a position is recommended\n // 'externalOid': clientOrderId,\n // 'triggerPrice': 10.0, // Required for trigger order\n // 'triggerType': 1, // Required for trigger order 1: more than or equal, 2: less than or equal\n // 'executeCycle': 1, // Required for trigger order 1: 24 hours,2: 7 days\n // 'trend': 1, // Required for trigger order 1: latest price, 2: fair price, 3: index price\n // 'orderType': 1, // Required for trigger order 1: limit order,2:Post Only Maker,3: close or cancel instantly ,4: close or cancel completely,5: Market order\n };\n if (t !== 5 && t !== 6 && t !== \"market\" && (l.price = parseFloat(this.priceToPrecision(o, n))), f === 1 && this.safeInteger(a, \"leverage\") === void 0)\n throw new g(\"createSwapOrder() requires a leverage parameter for isolated margin orders\").exchange(this.id);\n this.safeBool(a, \"reduceOnly\", !1) ? l.side = i === \"buy\" ? 2 : 4 : l.side = i === \"buy\" ? 1 : 3;\n const m = this.safeString2(a, \"clientOrderId\", \"externalOid\");\n m !== void 0 && (l.externalOid = m);\n const y = this.safeNumber2(a, \"triggerPrice\", \"stopPrice\");\n a = this.omit(a, [\"clientOrderId\", \"externalOid\", \"postOnly\", \"stopPrice\", \"triggerPrice\"]);\n let w;\n y ? (l.triggerPrice = this.priceToPrecision(o, y), l.triggerType = this.safeInteger(a, \"triggerType\", 1), l.executeCycle = this.safeInteger(a, \"executeCycle\", 1), l.trend = this.safeInteger(a, \"trend\", 1), l.orderType = this.safeInteger(a, \"orderType\", 1), w = await this.contractPrivatePostPlanorderPlace(this.extend(l, a))) : w = await this.contractPrivatePostOrderSubmit(this.extend(l, a));\n const S = this.safeString(w, \"data\");\n return this.parseOrder(S, e);\n }\n async createOrders(e, t = {}) {\n await this.loadMarkets();\n const i = [];\n let s;\n for (let a = 0; a < e.length; a++) {\n const o = e[a], c = this.safeString(o, \"symbol\"), u = this.market(c);\n if (!u.spot)\n throw new ge(u.type).addMessage(\"createOrders() is only supported for spot markets\").exchange(this.id);\n if (s === void 0)\n s = c;\n else if (s !== c)\n throw new g(\"createOrders() requires all orders to have the same symbol\").exchange(this.id);\n const f = this.safeString(o, \"type\"), h = this.safeString(o, \"side\"), l = this.safeValue(o, \"amount\"), p = this.safeValue(o, \"price\"), m = this.safeValue(o, \"params\", {});\n let y;\n [y, t] = this.handleMarginModeAndParams(\"createOrder\", t);\n const w = this.createSpotOrderRequest(u, f, h, l, p, y, m);\n i.push(w);\n }\n const n = {\n batchOrders: this.json(i)\n }, r = await this.spotPrivatePostBatchOrders(n);\n return this.parseOrders(r);\n }\n async fetchOrder(e, t = void 0, i = {}) {\n if (t === void 0)\n throw new g(\"fetchOrder() requires a symbol argument\").exchange(this.id);\n await this.loadMarkets();\n const s = this.market(t), n = {\n symbol: s.id\n };\n let r;\n if (s.spot) {\n const a = this.safeString(i, \"clientOrderId\");\n a !== void 0 ? (i = this.omit(i, \"clientOrderId\"), n.origClientOrderId = a) : n.orderId = e;\n const [o, c] = this.handleMarginModeAndParams(\"fetchOrder\", i);\n if (o !== void 0) {\n if (o !== \"isolated\")\n throw new g(\"fetchOrder() does not support marginMode \" + o + \" for spot-margin trading\").exchange(this.id);\n r = await this.spotPrivateGetMarginOrder(this.extend(n, c));\n } else\n r = await this.spotPrivateGetOrder(this.extend(n, c));\n } else if (s.swap) {\n n.order_id = e;\n const a = await this.contractPrivateGetOrderGetOrderId(this.extend(n, i));\n r = this.safeValue(a, \"data\");\n }\n return this.parseOrder(r, s);\n }\n async fetchOrders(e = void 0, t = void 0, i = void 0, s = {}) {\n await this.loadMarkets();\n const n = {};\n let r;\n e !== void 0 && (r = this.market(e), n.symbol = r.id);\n const [a, o] = this.handleMarketTypeAndParams(\"fetchOrders\", r, s);\n if (a === \"spot\") {\n if (e === void 0)\n throw new g(\"fetchOrders() requires a symbol argument for spot market\").exchange(this.id);\n const [c, u] = this.handleMarginModeAndParams(\"fetchOrders\", s);\n t !== void 0 && (n.startTime = t), i !== void 0 && (n.limit = i);\n let f;\n if (c !== void 0) {\n if (c !== \"isolated\")\n throw new g(\" fetchOrders() does not support marginMode \" + c + \" for spot-margin trading\").exchange(this.id);\n f = await this.spotPrivateGetMarginAllOrders(this.extend(n, u));\n } else\n f = await this.spotPrivateGetAllOrders(this.extend(n, u));\n return this.parseOrders(f, r, t, i);\n } else {\n t !== void 0 && (n.start_time = t, this.safeInteger(s, \"end_time\") === void 0 && (n.end_time = this.sum(t, this.options.maxTimeTillEnd))), i !== void 0 && (n.page_size = i);\n let c = this.safeString(this.options, \"fetchOrders\", \"contractPrivateGetOrderListHistoryOrders\");\n c = this.safeString(o, \"method\", c);\n let u = [], f = [];\n if (c === \"contractPrivateGetOrderListHistoryOrders\") {\n const l = await this.contractPrivateGetOrderListHistoryOrders(this.extend(n, o));\n u = this.safeValue(l, \"data\");\n } else {\n const l = await this.contractPrivateGetPlanorderListOrders(this.extend(n, o));\n f = this.safeValue(l, \"data\");\n }\n const h = this.arrayConcat(f, u);\n return this.parseOrders(h, r, t, i, s);\n }\n }\n async fetchOrdersByIds(e, t = void 0, i = {}) {\n await this.loadMarkets();\n const s = {};\n let n;\n t !== void 0 && (n = this.market(t), s.symbol = n.id);\n const [r, a] = this.handleMarketTypeAndParams(\"fetchOrdersByIds\", n, i);\n if (r === \"spot\")\n throw new ge(r).exchange(this.id);\n {\n s.order_ids = e.join(\",\");\n const o = await this.contractPrivateGetOrderBatchQuery(this.extend(s, a)), c = this.safeValue(o, \"data\");\n return this.parseOrders(c, n);\n }\n }\n async fetchOpenOrders(e = void 0, t = void 0, i = void 0, s = {}) {\n await this.loadMarkets();\n const n = {};\n let r, a;\n if (e !== void 0 && (r = this.market(e)), [a, s] = this.handleMarketTypeAndParams(\"fetchOpenOrders\", r, s), a === \"spot\") {\n if (e === void 0)\n throw new g(\" fetchOpenOrders() requires a symbol argument for spot market\").exchange(this.id);\n n.symbol = r.id;\n const [o, c] = this.handleMarginModeAndParams(\"fetchOpenOrders\", s);\n let u;\n if (o !== void 0) {\n if (o !== \"isolated\")\n throw new g(\"fetchOpenOrders() does not support marginMode \" + o + \" for spot-margin trading\").exchange(this.id);\n u = await this.spotPrivateGetMarginOpenOrders(this.extend(n, c));\n } else\n u = await this.spotPrivateGetOpenOrders(this.extend(n, c));\n return this.parseOrders(u, r, t, i);\n } else\n return await this.fetchOrdersByState(2, e, t, i, s);\n }\n async fetchClosedOrders(e = void 0, t = void 0, i = void 0, s = {}) {\n return await this.fetchOrdersByState(3, e, t, i, s);\n }\n async fetchCanceledOrders(e = void 0, t = void 0, i = void 0, s = {}) {\n return await this.fetchOrdersByState(4, e, t, i, s);\n }\n async fetchOrdersByState(e, t = void 0, i = void 0, s = void 0, n = {}) {\n await this.loadMarkets();\n const r = {};\n let a;\n t !== void 0 && (a = this.market(t));\n const [o] = this.handleMarketTypeAndParams(\"fetchOrdersByState\", a, n);\n if (o === \"spot\")\n throw new ge(o).exchange(this.id);\n return r.states = e, await this.fetchOrders(t, i, s, this.extend(r, n));\n }\n async cancelOrder(e, t = void 0, i = {}) {\n await this.loadMarkets();\n let s;\n t !== void 0 && (s = this.market(t), s.id);\n let n;\n [n, i] = this.handleMarketTypeAndParams(\"cancelOrder\", s, i);\n const [r, a] = this.handleMarginModeAndParams(\"cancelOrder\", i);\n let o;\n if (n === \"spot\") {\n if (t === void 0)\n throw new g(\"cancelOrder() requires a symbol argument\").exchange(this.id);\n const c = {\n symbol: s.id\n }, u = this.safeString(i, \"clientOrderId\");\n if (u !== void 0 ? (i = this.omit(a, \"clientOrderId\"), c.origClientOrderId = u) : c.orderId = e, r !== void 0) {\n if (r !== \"isolated\")\n throw new k().addMessage(\"cancelOrder() does not support marginMode \" + r + \" for spot-margin trading\").exchange(this.id);\n o = await this.spotPrivateDeleteMarginOrder(this.extend(c, a));\n } else\n o = await this.spotPrivateDeleteOrder(this.extend(c, a));\n } else {\n let c = this.safeString(this.options, \"cancelOrder\", \"contractPrivatePostOrderCancel\");\n c = this.safeString(a, \"method\", c);\n let u;\n if (c === \"contractPrivatePostOrderCancel\")\n u = await this.contractPrivatePostOrderCancel([e]);\n else if (c === \"contractPrivatePostPlanorderCancel\")\n u = await this.contractPrivatePostPlanorderCancel([e]);\n else\n throw new pe(c).exchange(this.id);\n o = this.safeValue(u, \"data\");\n const f = this.safeValue(o, 0), h = this.safeValue(f, \"errorMsg\", \"\");\n if (h !== \"success\")\n throw new k().addMessage(\"cancelOrder() the order with id \" + e + \" cannot be cancelled: \" + h).exchange(this.id);\n }\n return this.parseOrder(o, s);\n }\n async cancelOrders(e, t = void 0, i = {}) {\n await this.loadMarkets();\n const s = t !== void 0 ? this.market(t) : void 0, [n] = this.handleMarketTypeAndParams(\"cancelOrders\", s, i);\n if (n === \"spot\")\n throw new ge(n).addMessage(\"cancelOrders() is not supported for \" + n).exchange(this.id);\n {\n const r = await this.contractPrivatePostOrderCancel(e), a = this.safeValue(r, \"data\");\n return this.parseOrders(a, s);\n }\n }\n async cancelAllOrders(e = void 0, t = {}) {\n await this.loadMarkets();\n const i = e !== void 0 ? this.market(e) : void 0, s = {};\n let n;\n [n, t] = this.handleMarketTypeAndParams(\"cancelAllOrders\", i, t);\n const [r, a] = this.handleMarginModeAndParams(\"cancelAllOrders\", t);\n if (n === \"spot\") {\n if (e === void 0)\n throw new g(\"cancelAllOrders() requires a symbol argument on spot\").exchange(this.id);\n s.symbol = i.id;\n let o;\n if (r !== void 0) {\n if (r !== \"isolated\")\n throw new k().addMessage(\" cancelAllOrders() does not support marginMode \" + r + \" for spot-margin trading\").exchange(this.id);\n o = await this.spotPrivateDeleteMarginOpenOrders(this.extend(s, a));\n } else\n o = await this.spotPrivateDeleteOpenOrders(this.extend(s, a));\n return this.parseOrders(o, i);\n } else {\n e !== void 0 && (s.symbol = i.id);\n let o = this.safeString(this.options, \"cancelAllOrders\", \"contractPrivatePostOrderCancelAll\");\n o = this.safeString(a, \"method\", o);\n let c;\n o === \"contractPrivatePostOrderCancelAll\" ? c = await this.contractPrivatePostOrderCancelAll(this.extend(s, a)) : o === \"contractPrivatePostPlanorderCancelAll\" && (c = await this.contractPrivatePostPlanorderCancelAll(this.extend(s, a)));\n const u = this.safeValue(c, \"data\", []);\n return this.parseOrders(u, i);\n }\n }\n parseOrder(e, t = void 0) {\n if (this.safeInteger(e, \"code\") !== void 0)\n return this.safeOrder({\n info: e,\n status: \"rejected\",\n clientOrderId: this.safeString(e, \"newClientOrderId\")\n });\n let s;\n typeof e == \"string\" ? s = e : s = this.safeString2(e, \"orderId\", \"id\");\n const n = this.safeString(e, \"symbol\");\n t = this.safeMarket(n, t);\n const r = this.safeIntegerN(e, [\"time\", \"createTime\", \"transactTime\"]);\n let a;\n const o = this.safeString(e, \"feeCurrency\");\n if (o !== void 0) {\n const c = this.safeString(e, \"takerFee\"), u = this.safeString(e, \"makerFee\"), f = P.stringAdd(c, u);\n a = {\n currency: o,\n cost: this.parseNumber(f)\n };\n }\n return this.safeOrder({\n id: s,\n clientOrderId: this.safeString(e, \"clientOrderId\"),\n timestamp: r,\n datetime: this.iso8601(r),\n lastTradeTimestamp: void 0,\n status: this.parseOrderStatus(this.safeString2(e, \"status\", \"state\")),\n symbol: t.symbol,\n type: this.parseOrderType(this.safeString(e, \"type\")),\n timeInForce: this.parseOrderTimeInForce(this.safeString(e, \"timeInForce\")),\n side: this.parseOrderSide(this.safeString(e, \"side\")),\n price: this.safeNumber(e, \"price\"),\n stopPrice: this.safeNumber2(e, \"stopPrice\", \"triggerPrice\"),\n triggerPrice: this.safeNumber2(e, \"stopPrice\", \"triggerPrice\"),\n average: this.safeNumber(e, \"dealAvgPrice\"),\n amount: this.safeNumber2(e, \"origQty\", \"vol\"),\n cost: this.safeNumber(e, \"cummulativeQuoteQty\"),\n filled: this.safeNumber2(e, \"executedQty\", \"dealVol\"),\n remaining: void 0,\n fee: a,\n trades: void 0,\n info: e\n }, t);\n }\n parseOrderSide(e) {\n const t = {\n BUY: \"buy\",\n SELL: \"sell\",\n 1: \"buy\",\n 2: \"sell\"\n // contracts v1 : TODO\n };\n return this.safeString(t, e, e);\n }\n parseOrderType(e) {\n const t = {\n MARKET: \"market\",\n LIMIT: \"limit\",\n LIMIT_MAKER: \"limit\"\n };\n return this.safeString(t, e, e);\n }\n parseOrderStatus(e) {\n const t = {\n NEW: \"open\",\n FILLED: \"closed\",\n CANCELED: \"canceled\",\n PARTIALLY_FILLED: \"open\",\n PARTIALLY_CANCELED: \"canceled\",\n // contracts v1\n // '1': 'uninformed', // TODO: wt?\n 2: \"open\",\n 3: \"closed\",\n 4: \"canceled\"\n // '5': 'invalid', // TODO: wt?\n };\n return this.safeString(t, e, e);\n }\n parseOrderTimeInForce(e) {\n const t = {\n GTC: \"GTC\",\n FOK: \"FOK\",\n IOC: \"IOC\"\n };\n return this.safeString(t, e, e);\n }\n async fetchAccountHelper(e, t) {\n if (e === \"spot\")\n return await this.spotPrivateGetAccount(t);\n if (e === \"swap\") {\n const i = await this.contractPrivateGetAccountAssets(t);\n return this.safeValue(i, \"data\");\n }\n }\n async fetchAccounts(e = {}) {\n const [t, i] = this.handleMarketTypeAndParams(\"fetchAccounts\", void 0, e);\n await this.loadMarkets();\n const s = await this.fetchAccountHelper(t, i), n = this.safeValue(s, \"balances\", []), r = [];\n for (let a = 0; a < n.length; a++) {\n const o = n[a], c = this.safeString2(o, \"asset\", \"currency\"), u = this.safeCurrencyCode(c);\n r.push({\n id: this.safeString(o, \"id\"),\n type: this.safeString(o, \"type\"),\n code: u,\n info: o\n });\n }\n return r;\n }\n async fetchTradingFees(e = {}) {\n await this.loadMarkets();\n const t = await this.fetchAccountHelper(\"spot\", e);\n let i = this.safeString(t, \"makerCommission\"), s = this.safeString(t, \"takerCommission\");\n i = P.stringDiv(i, \"1000\"), s = P.stringDiv(s, \"1000\");\n const n = {};\n for (let r = 0; r < this.symbols.length; r++) {\n const a = this.symbols[r];\n n[a] = {\n symbol: a,\n maker: this.parseNumber(i),\n taker: this.parseNumber(s),\n percentage: !0,\n tierBased: !1,\n info: t\n };\n }\n return n;\n }\n customParseBalance(e, t) {\n let i;\n t === \"margin\" ? i = this.safeValue(e, \"assets\", []) : t === \"coin-m\" || t === \"usd-m\" ? i = this.safeValue(e, \"data\", []) : i = this.safeValue(e, \"balances\", []);\n const s = { info: e };\n if (t === \"margin\") {\n for (let n = 0; n < i.length; n++) {\n const r = i[n], a = this.safeString(r, \"symbol\"), o = this.safeSymbol(a, void 0), c = this.safeValue(r, \"baseAsset\", {}), u = this.safeValue(r, \"quoteAsset\", {}), f = this.safeCurrencyCode(this.safeString(c, \"asset\")), h = this.safeCurrencyCode(this.safeString(u, \"asset\")), l = {};\n l[f] = this.parseBalanceHelper(c), l[h] = this.parseBalanceHelper(u), s[o] = this.safeBalance(l);\n }\n return s;\n } else if (t === \"coin-m\" || t === \"usd-m\") {\n for (let n = 0; n < i.length; n++) {\n const r = i[n], a = this.safeString(r, \"currency\"), o = this.safeCurrencyCode(a);\n if (t === \"coin-m\" && o === \"USDT\" || t === \"usd-m\" && o !== \"USDT\")\n continue;\n const c = this.account();\n c.free = this.safeString(r, \"availableBalance\"), c.used = this.safeString(r, \"frozenBalance\"), s[o] = c;\n }\n return this.safeBalance(s);\n } else {\n for (let n = 0; n < i.length; n++) {\n const r = i[n], a = this.safeString(r, \"asset\"), o = this.safeCurrencyCode(a), c = this.account();\n c.free = this.safeString(r, \"free\"), c.used = this.safeString(r, \"locked\"), s[o] = c;\n }\n return this.safeBalance(s);\n }\n }\n parseBalanceHelper(e) {\n const t = this.account();\n t.used = this.safeString(e, \"locked\"), t.free = this.safeString(e, \"free\"), t.total = this.safeString(e, \"totalAsset\");\n const i = this.safeString(e, \"borrowed\"), s = this.safeString(e, \"interest\");\n return t.debt = P.stringAdd(i, s), t;\n }\n async fetchBalance(e = {}) {\n await this.loadMarkets();\n let t;\n const i = {};\n [t, e] = this.handleMarketTypeAndParams(\"fetchBalance\", void 0, e);\n const s = this.safeString(e, \"marginMode\"), n = this.safeBool(e, \"margin\", !1);\n e = this.omit(e, [\"margin\", \"marginMode\"]);\n let r;\n if (s !== void 0 || n || t === \"margin\") {\n let a;\n const o = this.safeString(e, \"symbol\");\n if (o === void 0) {\n const c = this.safeValue(e, \"symbols\");\n c !== void 0 && (a = this.marketIds(c).join(\",\"));\n } else\n a = this.market(o).id;\n this.checkRequiredArgument(\"fetchBalance\", a, \"symbol or symbols\"), t = \"margin\", i.symbols = a, e = this.omit(e, [\"symbol\", \"symbols\"]), r = await this.spotPrivateGetMarginIsolatedAccount(this.extend(i, e));\n } else if (t === \"spot\")\n r = await this.spotPrivateGetAccount(this.extend(i, e));\n else if (t === \"coin-m\" || t === \"usd-m\")\n r = await this.contractPrivateGetAccountAssets(this.extend(i, e));\n else\n throw new pe(\"fetchBalance\").exchange(this.id);\n return this.customParseBalance(r, t);\n }\n async fetchMyTrades(e = void 0, t = void 0, i = void 0, s = {}) {\n if (e === void 0)\n throw new g(\"fetchMyTrades() requires a symbol argument\").exchange(this.id);\n await this.loadMarkets();\n const n = this.market(e), [r, a] = this.handleMarketTypeAndParams(\"fetchMyTrades\", n, s), o = {\n symbol: n.id\n };\n let c;\n if (r === \"spot\")\n t !== void 0 && (o.start_time = t), i !== void 0 && (o.limit = i), c = await this.spotPrivateGetMyTrades(this.extend(o, a));\n else {\n t !== void 0 && (o.start_time = t, this.safeInteger(s, \"end_time\") === void 0 && (o.end_time = this.sum(t, this.options.maxTimeTillEnd))), i !== void 0 && (o.page_size = i);\n const u = await this.contractPrivateGetOrderListOrderDeals(this.extend(o, a));\n c = this.safeValue(u, \"data\");\n }\n return this.parseTrades(c, n, t, i);\n }\n async fetchOrderTrades(e, t = void 0, i = void 0, s = void 0, n = {}) {\n await this.loadMarkets();\n const r = {};\n let a;\n t !== void 0 && (a = this.market(t));\n const [o, c] = this.handleMarketTypeAndParams(\"fetchOrderTrades\", a, n);\n let u;\n if (o === \"spot\") {\n if (t === void 0)\n throw new g(\"fetchOrderTrades() requires a symbol argument\").exchange(this.id);\n r.symbol = a.id, r.orderId = e, u = await this.spotPrivateGetMyTrades(this.extend(r, c));\n } else {\n r.order_id = e;\n const f = await this.contractPrivateGetOrderDealDetailsOrderId(this.extend(r, c));\n u = this.safeValue(f, \"data\");\n }\n return this.parseTrades(u, a, i, s, c);\n }\n parseDepositAddress(e, t = void 0) {\n const i = this.safeString(e, \"address\"), s = this.safeString(e, \"coin\"), n = this.safeString(e, \"network\");\n return this.checkAddress(i), {\n currency: this.safeCurrencyCode(s, t),\n address: i,\n tag: this.safeString(e, \"memo\"),\n network: n,\n info: e\n };\n }\n async fetchDepositAddressesByNetwork(e, t = {}) {\n await this.loadMarkets();\n const s = {\n coin: this.currency(e).id\n }, n = this.safeString(t, \"network\");\n n !== void 0 && (s.network = n), t = this.omit(t, \"network\");\n const r = await this.spotPrivateGetCapitalDepositAddress(this.extend(s, t)), a = this.parseDepositAddresses(r, void 0, !1);\n return this.indexBy(a, \"network\");\n }\n async createDepositAddress(e, t = {}) {\n await this.loadMarkets();\n const i = this.currency(e), s = {\n coin: i.id\n }, n = this.safeString(t, \"network\");\n if (n === void 0)\n throw new g(\"createDepositAddress requires a `network` parameter\").exchange(this.id);\n n !== void 0 && (s.network = n), t = this.omit(t, \"network\");\n const r = await this.spotPrivatePostCapitalDepositAddress(this.extend(s, t));\n return this.parseDepositAddress(r, i);\n }\n async fetchDepositAddress(e, t = {}) {\n const i = this.safeString(t, \"network\");\n t = this.omit(t, [\"network\"]);\n const s = await this.fetchDepositAddressesByNetwork(e, t);\n let n;\n if (i !== void 0)\n n = this.safeDict(s, i);\n else {\n const r = this.safeDict(this.options, \"defaultNetworks\"), a = this.safeString(r, e);\n if (a !== void 0)\n n = this.safeDict(s, a);\n else {\n const o = Object.keys(s), c = this.safeString(o, 0);\n n = this.safeDict(s, c);\n }\n }\n if (n === void 0)\n throw new It(e, i).addMessage(\"consider creating one using the MEXC platform\").exchange(this.id);\n return n;\n }\n async fetchDeposits(e = void 0, t = void 0, i = void 0, s = {}) {\n await this.loadMarkets();\n const n = {\n // 'coin': currency['id'] + network example: USDT-TRX,\n // 'status': 'status',\n // 'startTime': since, // default 90 days\n // 'endTime': this.milliseconds (),\n // 'limit': limit, // default 1000, maximum 1000\n };\n let r;\n if (e !== void 0) {\n r = this.currency(e), n.coin = r.id;\n const o = this.safeString(s, \"network\");\n o !== void 0 && (s = this.omit(s, \"network\"), n.coin += \"-\" + o);\n }\n if (t !== void 0 && (n.startTime = t), i !== void 0) {\n if (i > 1e3)\n throw new O().addMessage(\"This exchange supports a maximum limit of 1000\").exchange(this.id);\n n.limit = i;\n }\n const a = await this.spotPrivateGetCapitalDepositHisrec(this.extend(n, s));\n return this.parseTransactions(a, r, t, i);\n }\n async fetchWithdrawals(e = void 0, t = void 0, i = void 0, s = {}) {\n await this.loadMarkets();\n const n = {\n // 'coin': currency['id'],\n // 'status': 'status',\n // 'startTime': since, // default 90 days\n // 'endTime': this.milliseconds (),\n // 'limit': limit, // default 1000, maximum 1000\n };\n let r;\n if (e !== void 0 && (r = this.currency(e), n.coin = r.id), t !== void 0 && (n.startTime = t), i !== void 0) {\n if (i > 1e3)\n throw new O().addMessage(\"This exchange supports a maximum limit of 1000\").exchange(this.id);\n n.limit = i;\n }\n const a = await this.spotPrivateGetCapitalWithdrawHistory(this.extend(n, s));\n return this.parseTransactions(a, r, t, i);\n }\n parseTransaction(e, t = void 0) {\n const i = this.safeString(e, \"id\"), s = i === void 0 ? \"deposit\" : \"withdrawal\", n = this.safeInteger2(e, \"insertTime\", \"applyTime\");\n let r;\n const a = this.safeString(e, \"coin\");\n a !== void 0 && (r = a.split(\"-\")[0]);\n const o = this.safeString(e, \"network\"), c = this.safeCurrencyCode(r, t), u = this.parseTransactionStatusByType(this.safeString(e, \"status\"), s);\n let f = this.safeString(e, \"amount\");\n const h = this.safeString(e, \"address\"), l = this.safeString(e, \"txId\", \"\").split(\":\")[0];\n let p;\n const m = this.safeString(e, \"transactionFee\");\n return m !== void 0 && (p = {\n cost: this.parseNumber(m),\n currency: c\n }), s === \"withdrawal\" && (f = P.stringSub(f, m)), {\n info: e,\n id: i,\n txid: l,\n timestamp: n,\n datetime: this.iso8601(n),\n network: o,\n address: h,\n addressTo: h,\n addressFrom: void 0,\n tag: this.safeString(e, \"memo\"),\n tagTo: void 0,\n tagFrom: void 0,\n type: s,\n amount: this.parseNumber(f),\n currency: c,\n status: u,\n updated: void 0,\n comment: void 0,\n internal: void 0,\n fee: p\n };\n }\n parseTransactionStatusByType(e, t = void 0) {\n const i = {\n deposit: {\n 1: \"failed\",\n 2: \"pending\",\n 3: \"pending\",\n 4: \"pending\",\n 5: \"ok\",\n 6: \"pending\",\n 7: \"failed\"\n // REJECTED\n },\n withdrawal: {\n 1: \"pending\",\n 2: \"pending\",\n 3: \"pending\",\n 4: \"pending\",\n 5: \"pending\",\n 6: \"pending\",\n 7: \"ok\",\n 8: \"failed\",\n 9: \"canceled\",\n 10: \"pending\"\n // MANUAL\n }\n }, s = this.safeValue(i, t, {});\n return this.safeString(s, e, e);\n }\n async fetchPosition(e, t = {}) {\n await this.loadMarkets();\n const s = {\n symbol: this.market(e).id\n }, n = await this.fetchPositions(void 0, this.extend(s, t));\n return this.safeValue(n, 0);\n }\n async fetchPositions(e = void 0, t = {}) {\n await this.loadMarkets();\n const i = await this.contractPrivateGetPositionOpenPositions(t), s = this.safeValue(i, \"data\", []);\n return this.parsePositions(s, e);\n }\n parsePosition(e, t = void 0) {\n t = this.safeMarket(this.safeString(e, \"symbol\"), t);\n const i = t.symbol, s = this.safeString(e, \"holdVol\"), n = this.safeNumber(e, \"openAvgPrice\"), r = this.safeString(e, \"im\"), o = this.safeString(e, \"positionType\") === \"1\" ? \"long\" : \"short\", u = this.safeString(e, \"margin_mode\") === \"1\" ? \"isolated\" : \"cross\", f = this.safeNumber(e, \"leverage\"), h = this.safeNumber(e, \"liquidatePrice\"), l = this.safeInteger(e, \"updateTime\");\n return this.safePosition({\n info: e,\n id: void 0,\n symbol: i,\n contracts: this.parseNumber(s),\n contractSize: void 0,\n entryPrice: n,\n collateral: void 0,\n side: o,\n unrealizedProfit: void 0,\n leverage: this.parseNumber(f),\n percentage: void 0,\n marginMode: u,\n notional: void 0,\n markPrice: void 0,\n lastPrice: void 0,\n liquidationPrice: h,\n initialMargin: this.parseNumber(r),\n initialMarginPercentage: void 0,\n maintenanceMargin: void 0,\n maintenanceMarginPercentage: void 0,\n marginRatio: void 0,\n timestamp: l,\n datetime: this.iso8601(l),\n hedged: void 0,\n stopLossPrice: void 0,\n takeProfitPrice: void 0,\n lastUpdateTimestamp: void 0\n });\n }\n async fetchTransfer(e, t = void 0, i = void 0, s = {}) {\n const [n, r] = this.handleMarketTypeAndParams(\"fetchTransfer\", void 0, s);\n if (await this.loadMarkets(), n === \"spot\") {\n const a = {\n transact_id: e\n }, o = await this.spot2PrivateGetAssetInternalTransferInfo(this.extend(a, r)), c = this.safeValue(o, \"data\", {});\n return this.parseTransfer(c);\n } else if (n === \"swap\")\n throw new ge(n).addMessage(\"fetchTransfer() is not supported for \" + n).exchange(this.id);\n }\n async fetchTransfers(e = void 0, t = void 0, i = void 0, s = {}) {\n const [n, r] = this.handleMarketTypeAndParams(\"fetchTransfers\", void 0, s);\n await this.loadMarkets();\n const a = {};\n let o, c;\n if (e !== void 0 && (o = this.currency(e), a.currency = o.id), n === \"spot\") {\n if (t !== void 0 && (a.start_time = t), i !== void 0) {\n if (i > 50)\n throw new O().addMessage(\"This exchange supports a maximum limit of 50\").exchange(this.id);\n a[\"page-size\"] = i;\n }\n const u = await this.spot2PrivateGetAssetInternalTransferRecord(this.extend(a, r)), f = this.safeValue(u, \"data\", {});\n c = this.safeValue(f, \"result_list\", []);\n } else if (n === \"swap\") {\n i !== void 0 && (a.page_size = i);\n const u = await this.contractPrivateGetAccountTransferRecord(this.extend(a, r)), f = this.safeValue(u, \"data\");\n c = this.safeValue(f, \"resultList\");\n }\n return this.parseTransfers(c, o, t, i);\n }\n // https://mexcdevelop.github.io/apidocs/spot_v3_en/#query-sub-account-asset\n // currently only spot wallet is supported by the exchange\n async fetchSubAccountBalances(e, t = {}) {\n await this.loadMarkets();\n const i = await this.spotPrivateGetSubAccountAsset(this.extend({ subAccount: e, accountType: \"SPOT\" })), s = this.safeValue(i, \"balances\", []), n = {};\n for (let r = 0; r < s.length; r++) {\n const a = s[r], o = this.safeCurrencyCode(this.safeString(a, \"asset\"));\n n[o] = {\n free: this.safeNumber(a, \"free\"),\n used: this.safeNumber(a, \"locked\"),\n total: this.safeNumber(a, \"free\") + this.safeNumber(a, \"locked\")\n };\n }\n return { spot: n };\n }\n // https://mexcdevelop.github.io/apidocs/spot_v3_en/#query-sub-account-list-for-master-account\n async getSubAccounts() {\n await this.loadMarkets();\n const e = await this.spotPrivateGetSubAccountList();\n return this.safeValue(e, \"subAccounts\", {}).map((i) => ({\n uid: i.subAccount\n }));\n }\n // https://mexcdevelop.github.io/apidocs/spot_v3_en/#universal-transfer-for-master-account\n async subAccountTransfer(e, t, i, s, n, r, a = {}) {\n await this.loadMarkets();\n const o = this.currency(e), c = this.safeDict(this.options, \"accountsByType\", {}), u = this.safeString(c, i), f = this.safeString(c, s), h = this.currencyToPrecision(e, t), l = {\n asset: o.id,\n amount: h,\n fromAccountType: u,\n toAccountType: f\n };\n n !== \"master\" && (l.fromAccount = n), r !== \"master\" && (l.toAccount = r), \"clientOid\" in a || (l.clientOid = this.uuid());\n const p = await this.spotPrivatePostCapitalSubAccountUniversalTransfer(this.extend(l, a)), m = this.parseTransfer(p, o);\n return this.extend(m, {\n amount: h,\n fromAccount: n,\n toAccount: r\n });\n }\n async transfer(e, t, i, s, n = {}) {\n await this.loadMarkets();\n const r = this.currency(e), a = {\n spot: \"SPOT\",\n swap: \"FUTURES\",\n margin: \"ISOLATED_MARGIN\"\n }, o = this.safeString(a, i), c = this.safeString(a, s);\n if (o === void 0) {\n const l = Object.keys(a);\n throw new g(\"fromAccount must be one of \" + l.join(\", \")).exchange(this.id);\n }\n if (c === void 0) {\n const l = Object.keys(a);\n throw new g(\"toAccount must be one of \" + l.join(\", \")).exchange(this.id);\n }\n const u = {\n asset: r.id,\n amount: this.currencyToPrecision(e, t),\n fromAccountType: o,\n toAccountType: c\n };\n if (o === \"ISOLATED_MARGIN\" || c === \"ISOLATED_MARGIN\") {\n const l = this.safeString(n, \"symbol\");\n if (n = this.omit(n, \"symbol\"), l === void 0)\n throw new g(\"transfer() requires a symbol argument for isolated margin\").exchange(this.id);\n const p = this.market(l);\n u.symbol = p.id;\n }\n const f = await this.spotPrivatePostCapitalTransfer(this.extend(u, n)), h = this.parseTransfer(f, r);\n return this.extend(h, {\n amount: this.amountToPrecision(e, t),\n fromAccount: i,\n toAccount: s\n });\n }\n parseTransfer(e, t = void 0) {\n const i = this.safeString(e, \"currency\"), s = this.safeStringN(e, [\"transact_id\", \"txid\", \"tranId\"]), n = this.safeInteger(e, \"createTime\"), r = n !== void 0 ? this.iso8601(n) : void 0, a = this.safeString(e, \"type\");\n let o, c;\n return a !== void 0 ? (o = a === \"IN\" ? \"MAIN\" : \"CONTRACT\", c = a === \"IN\" ? \"CONTRACT\" : \"MAIN\") : (o = this.safeString(e, \"from\"), c = this.safeString(e, \"to\")), {\n info: e,\n id: s,\n timestamp: n,\n datetime: r,\n currency: this.safeCurrencyCode(i, t),\n amount: this.safeNumber(e, \"amount\"),\n fromAccount: this.parseAccountId(o),\n toAccount: this.parseAccountId(c),\n status: this.parseTransferStatus(this.safeString2(e, \"transact_state\", \"state\"))\n };\n }\n parseAccountId(e) {\n const t = {\n MAIN: \"spot\",\n CONTRACT: \"swap\"\n };\n return this.safeString(t, e, e);\n }\n parseTransferStatus(e) {\n const t = {\n SUCCESS: \"ok\",\n FAILED: \"failed\",\n WAIT: \"pending\"\n };\n return this.safeString(t, e, e);\n }\n async withdraw(e, t, i, s = void 0, n = {}) {\n [s, n] = this.handleWithdrawTagAndParams(s, n);\n const r = this.safeValue(this.options, \"networks\", {});\n let a = this.safeString2(n, \"network\", \"chain\");\n a = this.safeString(r, a, a), this.checkAddress(i), await this.loadMarkets();\n const o = this.currency(e), c = this.currencyToPrecision(e, t, a), u = {\n coin: o.id,\n address: i,\n amount: c\n };\n s !== void 0 && (u.memo = s), a !== void 0 && (u.network = a, n = this.omit(n, [\"network\", \"chain\"]));\n const f = await this.spotPrivatePostCapitalWithdrawApply(this.extend(u, n));\n return this.parseTransaction(f, o);\n }\n async fetchTransactionFees(e = void 0, t = {}) {\n await this.loadMarkets();\n const i = await this.spotPrivateGetCapitalConfigGetall(t);\n return this.parseTransactionFees(i, e);\n }\n parseTransactionFees(e, t = void 0) {\n const i = {};\n for (let s = 0; s < e.length; s++) {\n const n = e[s], r = this.safeString(n, \"coin\"), a = this.safeCurrency(r), o = this.safeString(a, \"code\");\n (t === void 0 || this.inArray(o, t)) && (i[o] = this.parseTransactionFee(n, a));\n }\n return {\n withdraw: i,\n deposit: {},\n info: e\n };\n }\n parseTransactionFee(e, t = void 0) {\n const i = this.safeValue(e, \"networkList\", []), s = {};\n for (let n = 0; n < i.length; n++) {\n const r = i[n], a = this.safeString(r, \"network\"), o = this.safeNumber(r, \"withdrawFee\");\n s[a] = o;\n }\n return s;\n }\n async fetchDepositWithdrawFees(e = void 0, t = {}) {\n await this.loadMarkets();\n const i = await this.spotPrivateGetCapitalConfigGetall(t);\n return this.parseDepositWithdrawFees(i, e, \"coin\");\n }\n parseDepositWithdrawFee(e, t = void 0) {\n const i = this.safeValue(e, \"networkList\", []), s = this.depositWithdrawFee(e);\n for (let n = 0; n < i.length; n++) {\n const r = i[n], a = this.safeString(r, \"network\");\n s.networks[a] = {\n withdraw: {\n fee: this.safeNumber(r, \"withdrawFee\"),\n percentage: void 0\n },\n deposit: {\n fee: void 0,\n percentage: void 0\n }\n };\n }\n return this.assignDefaultDepositWithdrawFees(s);\n }\n handleMarginModeAndParams(e, t = {}, i = void 0) {\n const s = this.safeString(this.options, \"defaultType\"), n = this.safeBool(t, \"margin\", !1);\n let r;\n return [r, t] = super.handleMarginModeAndParams(e, t, i), (s === \"margin\" || n === !0) && (r = \"isolated\"), [r, t];\n }\n async sign(e, t = \"public\", i = \"GET\", s = {}, n = void 0, r = void 0) {\n const a = this.safeString(t, 0), o = this.safeString(t, 1);\n [e, s] = this.resolvePath(e, s);\n let c;\n if (a === \"spot\" || a === \"broker\") {\n a === \"broker\" ? c = this.urls.api[a][o] + \"/\" + e : c = this.urls.api[a][o] + \"/api/\" + this.version + \"/\" + e;\n let u = \"\";\n if (o === \"private\" && (s.timestamp = this.nonce(), s.recvWindow = this.safeInteger(this.options, \"recvWindow\", 5e3)), Object.keys(s).length && (u = this.urlencode(s), c += \"?\" + u), o === \"private\") {\n this.checkRequiredCredentials();\n let f;\n this.externalSigner ? f = await this.externalSigner.sign({\n payload: this.encode(u),\n publicApiKey: this.apiKey,\n exchangeId: this.id\n }) : f = this.hmac(this.encode(u), this.encode(this.secret), Re), c += \"&signature=\" + f, n = {\n \"X-MEXC-APIKEY\": this.apiKey,\n source: this.safeString(this.options, \"broker\", \"CEDE\")\n };\n }\n i === \"POST\" && (n[\"Content-Type\"] = \"application/json\");\n } else if (a === \"contract\" || a === \"spot2\")\n if (c = this.urls.api[a][o] + \"/\" + this.implodeParams(e, s), s = this.omit(s, this.extractParams(e)), o === \"public\")\n Object.keys(s).length && (c += \"?\" + this.urlencode(s));\n else {\n this.checkRequiredCredentials();\n const u = this.nonce().toString();\n let f = \"\";\n n = {\n ApiKey: this.apiKey,\n \"Request-Time\": u,\n \"Content-Type\": \"application/json\",\n source: this.safeString(this.options, \"broker\", \"CEDE\")\n }, i === \"POST\" ? (f = this.json(s), r = f) : (s = this.keysort(s), Object.keys(s).length && (f += this.urlencode(s), c += \"?\" + f)), f = this.apiKey + u + f;\n let h;\n this.externalSigner ? h = await this.externalSigner.sign({\n payload: this.encode(f),\n publicApiKey: this.apiKey,\n exchangeId: this.id\n }) : h = this.hmac(this.encode(f), this.encode(this.secret), Re), n.Signature = h;\n }\n return { url: c, method: i, body: r, headers: n };\n }\n handleErrors(e, t, i, s, n, r, a, o, c) {\n if (a === void 0 || this.safeBool(a, \"success\", !1) === !0)\n return;\n const f = this.safeString(a, \"code\", void 0);\n if (f !== void 0 && f !== \"200\" && f !== \"0\") {\n const h = this.id + \" \" + r;\n throw this.throwBroadlyMatchedException(this.exceptions.broad, r, h), this.throwExactlyMatchedException(this.exceptions.exact, f, h), new O().addMessage(h).exchange(this.id);\n }\n }\n}\nclass uw extends gt {\n}\nclass fw extends uw {\n describe() {\n return this.deepExtend(super.describe(), {\n id: \"okx\",\n name: \"OKX\",\n countries: [\"CN\", \"US\"],\n version: \"v5\",\n rateLimit: 100 * 1.03,\n pro: !0,\n certified: !0,\n termId: \"\",\n has: {\n CORS: void 0,\n spot: !0,\n margin: !0,\n swap: !0,\n future: !0,\n option: !0,\n cancelAllOrders: !1,\n cancelOrder: !0,\n cancelOrders: !0,\n createDepositAddress: !1,\n createMarketBuyOrderWithCost: !0,\n createMarketSellOrderWithCost: !0,\n createOrder: !0,\n createOrders: !0,\n createOrderWithTakeProfitAndStopLoss: !0,\n createTakeProfitOrder: !0,\n createTrailingPercentOrder: !0,\n createTriggerOrder: !0,\n editOrder: !0,\n fetchAccounts: !0,\n fetchBalance: !0,\n fetchCanceledOrders: !0,\n fetchClosedOrder: void 0,\n fetchClosedOrders: !0,\n fetchCurrencies: !0,\n fetchDeposit: !0,\n fetchDepositAddress: !0,\n fetchDepositAddresses: !1,\n fetchDepositAddressesByNetwork: !0,\n fetchDeposits: !0,\n fetchDepositsWithdrawals: !1,\n fetchDepositWithdrawFee: \"emulated\",\n fetchDepositWithdrawFees: !0,\n fetchLedger: !0,\n fetchLedgerEntry: void 0,\n fetchMarkets: !0,\n fetchMyTrades: !0,\n fetchOHLCV: !0,\n fetchOpenOrder: void 0,\n fetchOpenOrders: !0,\n fetchOrder: !0,\n fetchOrderBook: !0,\n fetchOrderBooks: !1,\n fetchOrders: !1,\n fetchOrderTrades: !0,\n fetchPermissions: void 0,\n fetchPosition: !0,\n fetchPositions: !0,\n fetchPositionsForSymbol: !0,\n fetchPositionsRisk: !1,\n fetchStatus: !0,\n fetchTicker: !0,\n fetchTickers: !0,\n fetchTime: !0,\n fetchTrades: !0,\n fetchTradingFee: !0,\n fetchTradingFees: !1,\n fetchTradingLimits: !1,\n fetchTransactionFee: !1,\n fetchTransactionFees: !1,\n fetchTransactions: !1,\n fetchTransfer: !0,\n fetchTransfers: !0,\n fetchWithdrawal: !0,\n fetchWithdrawals: !0,\n fetchWithdrawalWhitelist: !1,\n transfer: !0,\n withdraw: !0\n },\n timeframes: {\n \"1m\": \"1m\",\n \"3m\": \"3m\",\n \"5m\": \"5m\",\n \"15m\": \"15m\",\n \"30m\": \"30m\",\n \"1h\": \"1H\",\n \"2h\": \"2H\",\n \"4h\": \"4H\",\n \"6h\": \"6H\",\n \"12h\": \"12H\",\n \"1d\": \"1D\",\n \"1w\": \"1W\",\n \"1M\": \"1M\",\n \"3M\": \"3M\"\n },\n hostname: \"www.okx.com\",\n urls: {\n logo: \"https://user-images.githubusercontent.com/1294454/152485636-38b19e4a-bece-4dec-979a-5982859ffc04.jpg\",\n api: {\n rest: \"https://{hostname}\"\n },\n www: \"https://www.okx.com\",\n doc: \"https://www.okx.com/docs-v5/en/\",\n fees: \"https://www.okx.com/pages/products/fees.html\",\n referral: {\n // https://www.okx.com/join/CCXT2023 - I removed the code for now, because CWS is blocking until we explain our affiliate program to our users\n // old reflink 0% discount https://www.okx.com/join/1888677\n // new reflink 20% discount https://www.okx.com/join/CCXT2023\n url: \"https://www.okx.com/\",\n discount: 0.2\n },\n test: {\n rest: \"https://{hostname}\"\n }\n },\n api: {\n public: {\n get: {\n \"market/books-full\": 2,\n \"market/tickers\": 1,\n \"market/ticker\": 1,\n \"market/index-tickers\": 1,\n \"market/books\": 1 / 2,\n \"market/books-lite\": 5 / 3,\n \"market/candles\": 1 / 2,\n \"market/history-candles\": 1,\n \"market/index-candles\": 1,\n \"market/history-index-candles\": 2,\n \"market/mark-price-candles\": 1,\n \"market/history-mark-price-candles\": 2,\n \"market/trades\": 1 / 5,\n \"market/history-trades\": 2,\n \"market/option/instrument-family-trades\": 1,\n \"market/platform-24-volume\": 10,\n \"market/open-oracle\": 50,\n \"market/exchange-rate\": 20,\n \"market/index-components\": 1,\n \"public/economic-calendar\": 50,\n \"market/block-tickers\": 1,\n \"market/block-ticker\": 1,\n \"public/block-trades\": 1,\n \"public/instruments\": 1,\n \"public/delivery-exercise-history\": 1 / 2,\n \"public/open-interest\": 1,\n \"public/funding-rate\": 1,\n \"public/funding-rate-history\": 1,\n \"public/price-limit\": 1,\n \"public/opt-summary\": 1,\n \"public/estimated-price\": 2,\n \"public/discount-rate-interest-free-quota\": 10,\n \"public/time\": 2,\n \"public/mark-price\": 2,\n \"public/position-tiers\": 2,\n \"public/interest-rate-loan-quota\": 10,\n \"public/vip-interest-rate-loan-quota\": 10,\n \"public/underlying\": 1,\n \"public/insurance-fund\": 2,\n \"public/convert-contract-coin\": 2,\n \"public/option-trades\": 1,\n \"public/instrument-tick-bands\": 4,\n \"rubik/stat/trading-data/support-coin\": 4,\n \"rubik/stat/taker-volume\": 4,\n \"rubik/stat/margin/loan-ratio\": 4,\n // long/short\n \"rubik/stat/contracts/long-short-account-ratio\": 4,\n \"rubik/stat/contracts/open-interest-volume\": 4,\n \"rubik/stat/option/open-interest-volume\": 4,\n // put/call\n \"rubik/stat/option/open-interest-volume-ratio\": 4,\n \"rubik/stat/option/open-interest-volume-expiry\": 4,\n \"rubik/stat/option/open-interest-volume-strike\": 4,\n \"rubik/stat/option/taker-block-volume\": 4,\n \"system/status\": 50,\n // public api\n \"sprd/spreads\": 1,\n \"sprd/books\": 1 / 2,\n \"sprd/ticker\": 1,\n \"sprd/public-trades\": 1 / 5,\n \"tradingBot/grid/ai-param\": 1,\n \"tradingBot/grid/min-investment\": 1,\n \"tradingBot/public/rsi-back-testing\": 1,\n \"asset/exchange-list\": 5 / 3,\n \"finance/staking-defi/eth/apy-history\": 5 / 3,\n \"finance/savings/lending-rate-summary\": 5 / 3,\n \"finance/savings/lending-rate-history\": 5 / 3,\n // public broker\n \"finance/sfp/dcd/products\": 2 / 3,\n // copytrading\n \"copytrading/public-lead-traders\": 4,\n \"copytrading/public-weekly-pnl\": 4,\n \"copytrading/public-stats\": 4,\n \"copytrading/public-preference-currency\": 4,\n \"copytrading/public-current-subpositions\": 4,\n \"copytrading/public-subpositions-history\": 4\n }\n },\n private: {\n get: {\n // rfq\n \"rfq/counterparties\": 4,\n \"rfq/maker-instrument-settings\": 4,\n \"rfq/mmp-config\": 4,\n \"rfq/rfqs\": 10,\n \"rfq/quotes\": 10,\n \"rfq/trades\": 4,\n \"rfq/public-trades\": 4,\n // sprd\n \"sprd/order\": 1 / 3,\n \"sprd/orders-pending\": 1 / 3,\n \"sprd/orders-history\": 1 / 2,\n \"sprd/orders-history-archive\": 1 / 2,\n \"sprd/trades\": 1 / 3,\n // trade\n \"trade/order\": 1 / 3,\n \"trade/orders-pending\": 1 / 3,\n \"trade/orders-history\": 1 / 2,\n \"trade/orders-history-archive\": 1,\n \"trade/fills\": 1 / 3,\n \"trade/fills-history\": 2.2,\n \"trade/fills-archive\": 2,\n \"trade/order-algo\": 1,\n \"trade/orders-algo-pending\": 1,\n \"trade/orders-algo-history\": 1,\n \"trade/easy-convert-currency-list\": 20,\n \"trade/easy-convert-history\": 20,\n \"trade/one-click-repay-currency-list\": 20,\n \"trade/one-click-repay-history\": 20,\n \"trade/account-rate-limit\": 1,\n // asset\n \"asset/currencies\": 5 / 3,\n \"asset/balances\": 5 / 3,\n \"asset/non-tradable-assets\": 5 / 3,\n \"asset/asset-valuation\": 10,\n \"asset/transfer-state\": 10,\n \"asset/bills\": 5 / 3,\n \"asset/deposit-lightning\": 5,\n \"asset/deposit-address\": 5 / 3,\n \"asset/deposit-history\": 5 / 3,\n \"asset/withdrawal-history\": 5 / 3,\n \"asset/deposit-withdraw-status\": 20,\n \"asset/convert/currencies\": 5 / 3,\n \"asset/convert/currency-pair\": 5 / 3,\n \"asset/convert/history\": 5 / 3,\n \"asset/monthly-statement\": 2,\n // account\n \"account/balance\": 2,\n \"account/positions\": 2,\n \"account/positions-history\": 100,\n \"account/account-position-risk\": 2,\n \"account/bills\": 5 / 3,\n \"account/bills-archive\": 5 / 3,\n \"account/config\": 4,\n \"account/max-size\": 1,\n \"account/max-avail-size\": 1,\n \"account/leverage-info\": 1,\n \"account/adjust-leverage-info\": 4,\n \"account/max-loan\": 1,\n \"account/trade-fee\": 4,\n \"account/interest-accrued\": 4,\n \"account/interest-rate\": 4,\n \"account/max-withdrawal\": 1,\n \"account/risk-state\": 2,\n \"account/quick-margin-borrow-repay-history\": 4,\n \"account/borrow-repay-history\": 4,\n \"account/vip-interest-accrued\": 4,\n \"account/vip-interest-deducted\": 4,\n \"account/vip-loan-order-list\": 4,\n \"account/vip-loan-order-detail\": 4,\n \"account/interest-limits\": 4,\n \"account/greeks\": 2,\n \"account/position-tiers\": 2,\n \"account/mmp-config\": 4,\n // subaccount\n \"users/subaccount/list\": 10,\n \"account/subaccount/balances\": 10 / 3,\n \"asset/subaccount/balances\": 10 / 3,\n \"account/subaccount/max-withdrawal\": 1,\n \"asset/subaccount/bills\": 5 / 3,\n \"asset/subaccount/managed-subaccount-bills\": 5 / 3,\n \"users/entrust-subaccount-list\": 10,\n \"account/subaccount/interest-limits\": 4,\n // grid trading\n \"tradingBot/grid/orders-algo-pending\": 1,\n \"tradingBot/grid/orders-algo-history\": 1,\n \"tradingBot/grid/orders-algo-details\": 1,\n \"tradingBot/grid/sub-orders\": 1,\n \"tradingBot/grid/positions\": 1,\n \"tradingBot/grid/ai-param\": 1,\n \"tradingBot/signal/signals\": 1,\n \"tradingBot/signal/orders-algo-details\": 1,\n \"tradingBot/signal/orders-algo-history\": 1,\n \"tradingBot/signal/positions\": 1,\n \"tradingBot/signal/positions-history\": 1,\n \"tradingBot/signal/sub-orders\": 1,\n \"tradingBot/signal/event-history\": 1,\n \"tradingBot/recurring/orders-algo-pending\": 1,\n \"tradingBot/recurring/orders-algo-history\": 1,\n \"tradingBot/recurring/orders-algo-details\": 1,\n \"tradingBot/recurring/sub-orders\": 1,\n // earn\n \"finance/savings/balance\": 5 / 3,\n \"finance/savings/lending-history\": 5 / 3,\n \"finance/staking-defi/offers\": 10 / 3,\n \"finance/staking-defi/orders-active\": 10 / 3,\n \"finance/staking-defi/orders-history\": 10 / 3,\n // eth staking\n \"finance/staking-defi/eth/balance\": 5 / 3,\n \"finance/staking-defi/eth/purchase-redeem-history\": 5 / 3,\n // copytrading\n \"copytrading/current-subpositions\": 1,\n \"copytrading/subpositions-history\": 1,\n \"copytrading/instruments\": 4,\n \"copytrading/profit-sharing-details\": 4,\n \"copytrading/total-profit-sharing\": 4,\n \"copytrading/unrealized-profit-sharing-details\": 4,\n \"copytrading/copy-settings\": 4,\n \"copytrading/batch-leverage-info\": 4,\n \"copytrading/current-lead-traders\": 4,\n \"copytrading/lead-traders-history\": 4,\n // broker\n \"broker/nd/info\": 10,\n \"broker/nd/subaccount-info\": 10,\n \"broker/nd/subaccount/apikey\": 10,\n \"asset/broker/nd/subaccount-deposit-address\": 5 / 3,\n \"asset/broker/nd/subaccount-deposit-history\": 4,\n \"asset/broker/nd/subaccount-withdrawal-history\": 4,\n \"broker/nd/rebate-daily\": 100,\n \"broker/nd/rebate-per-orders\": 300,\n \"finance/sfp/dcd/order\": 2,\n \"finance/sfp/dcd/orders\": 2,\n \"broker/fd/rebate-per-orders\": 300,\n \"broker/fd/if-rebate\": 5,\n // affiliate\n \"affiliate/invitee/detail\": 1,\n \"users/partner/if-rebate\": 1\n },\n post: {\n // rfq\n \"rfq/create-rfq\": 4,\n \"rfq/cancel-rfq\": 4,\n \"rfq/cancel-batch-rfqs\": 10,\n \"rfq/cancel-all-rfqs\": 10,\n \"rfq/execute-quote\": 15,\n \"rfq/maker-instrument-settings\": 4,\n \"rfq/mmp-reset\": 4,\n \"rfq/mmp-config\": 100,\n \"rfq/create-quote\": 0.4,\n \"rfq/cancel-quote\": 0.4,\n \"rfq/cancel-batch-quotes\": 10,\n \"rfq/cancel-all-quotes\": 10,\n // sprd\n \"sprd/order\": 1,\n \"sprd/cancel-order\": 1,\n \"sprd/mass-cancel\": 1,\n \"sprd/amend-order\": 1,\n // trade\n \"trade/order\": 1 / 3,\n \"trade/batch-orders\": 1 / 15,\n \"trade/cancel-order\": 1 / 3,\n \"trade/cancel-batch-orders\": 1 / 15,\n \"trade/amend-order\": 1 / 3,\n \"trade/amend-batch-orders\": 1 / 150,\n \"trade/close-position\": 1,\n \"trade/fills-archive\": 172800,\n \"trade/order-algo\": 1,\n \"trade/cancel-algos\": 1,\n \"trade/amend-algos\": 1,\n \"trade/cancel-advance-algos\": 1,\n \"trade/easy-convert\": 20,\n \"trade/one-click-repay\": 20,\n \"trade/mass-cancel\": 4,\n \"trade/cancel-all-after\": 10,\n // asset\n \"asset/transfer\": 10,\n \"asset/withdrawal\": 5 / 3,\n \"asset/withdrawal-lightning\": 5,\n \"asset/cancel-withdrawal\": 5 / 3,\n \"asset/convert-dust-assets\": 10,\n \"asset/convert/estimate-quote\": 1,\n \"asset/convert/trade\": 1,\n \"asset/monthly-statement\": 1,\n // account\n \"account/set-position-mode\": 4,\n \"account/set-leverage\": 1,\n \"account/position/margin-balance\": 1,\n \"account/set-greeks\": 4,\n \"account/set-isolated-mode\": 4,\n \"account/quick-margin-borrow-repay\": 4,\n \"account/borrow-repay\": 5 / 3,\n \"account/simulated_margin\": 10,\n \"account/set-riskOffset-type\": 2,\n \"account/activate-option\": 4,\n \"account/set-auto-loan\": 4,\n \"account/set-account-level\": 4,\n \"account/mmp-reset\": 4,\n \"account/mmp-config\": 100,\n // subaccount\n \"users/subaccount/modify-apikey\": 10,\n \"asset/subaccount/transfer\": 10,\n \"users/subaccount/set-transfer-out\": 10,\n \"account/subaccount/set-loan-allocation\": 4,\n // grid trading\n \"tradingBot/grid/order-algo\": 1,\n \"tradingBot/grid/amend-order-algo\": 1,\n \"tradingBot/grid/stop-order-algo\": 1,\n \"tradingBot/grid/close-position\": 1,\n \"tradingBot/grid/cancel-close-order\": 1,\n \"tradingBot/grid/order-instant-trigger\": 1,\n \"tradingBot/grid/withdraw-income\": 1,\n \"tradingBot/grid/compute-margin-balance\": 1,\n \"tradingBot/grid/margin-balance\": 1,\n \"tradingBot/grid/min-investment\": 1,\n \"tradingBot/signal/create-signal\": 1,\n \"tradingBot/signal/order-algo\": 1,\n \"tradingBot/signal/stop-order-algo\": 1,\n \"tradingBot/signal/margin-balance\": 1,\n \"tradingBot/signal/amendTPSL\": 1,\n \"tradingBot/signal/set-instruments\": 1,\n \"tradingBot/signal/close-position\": 1,\n \"tradingBot/signal/sub-order\": 1,\n \"tradingBot/signal/cancel-sub-order\": 1,\n \"tradingBot/recurring/order-algo\": 1,\n \"tradingBot/recurring/amend-order-algo\": 1,\n \"tradingBot/recurring/stop-order-algo\": 1,\n // earn\n \"finance/savings/purchase-redempt\": 5 / 3,\n \"finance/savings/set-lending-rate\": 5 / 3,\n \"finance/staking-defi/purchase\": 3,\n \"finance/staking-defi/redeem\": 3,\n \"finance/staking-defi/cancel\": 3,\n // eth staking\n \"finance/staking-defi/eth/purchase\": 5,\n \"finance/staking-defi/eth/redeem\": 5,\n // copytrading\n \"copytrading/algo-order\": 1,\n \"copytrading/close-subposition\": 1,\n \"copytrading/set-instruments\": 4,\n \"copytrading/first-copy-settings\": 4,\n \"copytrading/amend-copy-settings\": 4,\n \"copytrading/stop-copy-trading\": 4,\n \"copytrading/batch-set-leverage\": 4,\n // broker\n \"broker/nd/create-subaccount\": 0.25,\n \"broker/nd/delete-subaccount\": 1,\n \"broker/nd/subaccount/apikey\": 0.25,\n \"broker/nd/subaccount/modify-apikey\": 1,\n \"broker/nd/subaccount/delete-apikey\": 1,\n \"broker/nd/set-subaccount-level\": 4,\n \"broker/nd/set-subaccount-fee-rate\": 4,\n \"broker/nd/set-subaccount-assets\": 0.25,\n \"asset/broker/nd/subaccount-deposit-address\": 1,\n \"asset/broker/nd/modify-subaccount-deposit-address\": 5 / 3,\n \"broker/nd/rebate-per-orders\": 36e3,\n \"finance/sfp/dcd/quote\": 10,\n \"finance/sfp/dcd/order\": 10,\n \"broker/nd/report-subaccount-ip\": 0.25,\n \"broker/fd/rebate-per-orders\": 36e3\n }\n }\n },\n fees: {\n trading: {\n taker: this.parseNumber(\"0.0015\"),\n maker: this.parseNumber(\"0.0010\")\n },\n spot: {\n taker: this.parseNumber(\"0.0015\"),\n maker: this.parseNumber(\"0.0010\")\n },\n future: {\n taker: this.parseNumber(\"0.0005\"),\n maker: this.parseNumber(\"0.0002\")\n },\n swap: {\n taker: this.parseNumber(\"0.00050\"),\n maker: this.parseNumber(\"0.00020\")\n }\n },\n requiredCredentials: {\n apiKey: !0,\n secret: !0,\n password: !0\n },\n exceptions: {\n exact: {\n // Public error codes from 50000-53999\n // General Class\n 1: ie,\n 2: ie,\n 5e4: g,\n 50001: dt,\n 50002: g,\n 50004: Nt,\n 50005: Te,\n 50006: g,\n 50007: Ee,\n 50008: Z,\n 50009: Ee,\n 50010: g,\n 50011: Ae,\n 50012: O,\n 50013: Te,\n 50014: g,\n 50015: g,\n 50016: g,\n 50017: O,\n 50018: O,\n 50019: O,\n 50020: O,\n 50021: O,\n 50022: O,\n 50023: O,\n 50024: g,\n 50025: g,\n 50026: Te,\n 50027: ee,\n 50028: k,\n 50044: k,\n // API Class\n 50100: Te,\n 50101: Z,\n 50102: ze,\n 50103: Z,\n 50104: Z,\n 50105: Z,\n 50106: Z,\n 50107: Z,\n 50108: g,\n 50109: O,\n 50110: ee,\n 50111: Z,\n 50112: Z,\n 50113: Z,\n 50114: Z,\n 50115: pe,\n 50120: ee,\n // Trade Class\n 51e3: g,\n 51001: g,\n 51002: g,\n 51003: g,\n 51004: g,\n 51005: g,\n 51006: g,\n 51007: k,\n 51008: re,\n 51009: Ee,\n 51010: ee,\n 51011: k,\n 51012: $e,\n 51014: O,\n 51015: O,\n 51016: k,\n 51017: g,\n 51018: O,\n 51019: O,\n 51020: g,\n 51021: O,\n 51022: O,\n 51023: k,\n 51024: Ee,\n 51025: k,\n 51026: O,\n 51027: O,\n 51028: O,\n 51029: O,\n 51030: O,\n 51031: g,\n 51046: g,\n 51047: g,\n 51072: k,\n 51073: k,\n 51074: k,\n 51100: g,\n 51101: g,\n 51102: g,\n 51103: g,\n 51104: g,\n 51105: g,\n 51106: g,\n 51107: g,\n 51108: k,\n 51109: k,\n 51110: k,\n 51111: k,\n 51112: k,\n 51113: Ae,\n 51115: k,\n 51116: g,\n 51117: k,\n 51118: k,\n 51119: re,\n 51120: g,\n 51121: g,\n 51122: g,\n 51124: k,\n 51125: k,\n 51126: k,\n 51127: re,\n 51128: k,\n 51129: k,\n 51130: k,\n 51131: re,\n 51132: g,\n 51133: k,\n 51134: k,\n 51135: g,\n 51136: g,\n 51137: g,\n 51138: g,\n 51139: k,\n 51156: k,\n 51159: k,\n 51162: k,\n 51163: k,\n 51166: k,\n 51174: k,\n 51185: g,\n 51201: k,\n 51202: g,\n 51203: g,\n 51204: g,\n 51205: g,\n 51250: g,\n 51251: g,\n 51252: g,\n 51253: k,\n 51254: k,\n 51255: k,\n 51256: k,\n 51257: k,\n 51258: k,\n 51259: k,\n 51260: k,\n 51261: k,\n 51262: k,\n 51263: k,\n 51264: k,\n 51265: k,\n 51267: k,\n 51268: k,\n 51269: k,\n 51270: k,\n 51271: k,\n 51272: k,\n 51273: k,\n 51274: k,\n 51275: k,\n 51276: k,\n 51277: k,\n 51278: k,\n 51279: k,\n 51280: k,\n 51321: k,\n 51322: k,\n 51323: k,\n 51324: k,\n 51325: k,\n 51327: k,\n 51328: k,\n 51329: k,\n 51330: k,\n 51400: Se,\n 51401: Se,\n 51402: Se,\n 51403: k,\n 51404: k,\n 51405: k,\n 51406: k,\n 51407: g,\n 51408: k,\n 51409: g,\n 51410: k,\n 51500: g,\n 51501: k,\n 51502: re,\n 51503: k,\n 51506: k,\n 51508: k,\n 51509: k,\n 51510: k,\n 51511: k,\n 51600: g,\n 51601: g,\n 51602: g,\n 51603: Se,\n 51732: Z,\n 51733: Z,\n 51734: Z,\n 51735: O,\n 51736: re,\n // Data class\n 52e3: O,\n // SPOT/MARGIN error codes 54000-54999\n 54e3: O,\n 54001: O,\n // FUNDING error codes 58000-58999\n 58e3: O,\n 58001: Z,\n 58002: ee,\n 58003: $e,\n 58004: Ee,\n 58005: g,\n 58006: O,\n 58007: be,\n 58100: je,\n 58101: Ee,\n 58102: Ae,\n 58103: O,\n 58104: O,\n 58105: O,\n 58106: O,\n 58107: O,\n 58108: O,\n 58109: O,\n 58110: je,\n 58111: je,\n 58112: je,\n 58114: g,\n 58115: O,\n 58116: je,\n 58117: O,\n 58125: je,\n 58126: je,\n 58127: je,\n 58128: je,\n 58200: Yn,\n 58201: Yn,\n 58202: ke,\n 58203: et,\n 58204: Ee,\n 58205: ws,\n 58206: Xt,\n 58207: gi,\n 58208: ke,\n 58209: ke,\n 58210: ke,\n 58211: ke,\n 58212: ke,\n 58213: Z,\n 58221: et,\n 58222: et,\n 58224: ke,\n 58227: ke,\n 58228: ke,\n 58229: re,\n 58300: It,\n 58350: re,\n // Account error codes 59000-59999\n 59e3: O,\n 59001: O,\n 59100: k,\n 59101: k,\n 59102: k,\n 59103: re,\n 59104: k,\n 59105: k,\n 59106: k,\n 59107: k,\n 59108: re,\n 59109: k,\n 59128: k,\n 59200: re,\n 59201: re,\n 59216: k,\n 59260: ee,\n 59262: ee,\n 59300: O,\n 59301: O,\n 59313: O,\n 59401: O,\n 59500: ee,\n 59501: Z,\n 59502: O,\n 59503: Z,\n 59504: pe,\n 59505: Z,\n 59506: Z,\n 59507: je,\n 59508: Ee,\n 59642: O,\n 59643: O,\n // WebSocket error Codes from 60000-63999\n 60001: Z,\n 60002: Z,\n 60003: Z,\n 60004: Z,\n 60005: Z,\n 60006: ze,\n 60007: Z,\n 60008: Z,\n 60009: Z,\n 60010: Z,\n 60011: Z,\n 60012: g,\n 60013: g,\n 60014: Ae,\n 60015: O,\n 60016: Te,\n 60017: g,\n 60018: g,\n 60019: g,\n 63999: be,\n 70010: be,\n 70013: g,\n 70016: g\n // Please specify your instrument settings for at least one instType.\n },\n broad: {\n \"Internal Server Error\": Te,\n \"server error\": Te\n // {\"code\":500,\"data\":{},\"detailMsg\":\"\",\"error_code\":\"500\",\"error_message\":\"server error 1236805249\",\"msg\":\"server error 1236805249\"}\n },\n messages: {\n \"Order amount should be greater than the minimum available amount\": ye.ORDER_UNDER_MINIMUM\n }\n },\n httpExceptions: {\n 429: Te\n // https://github.com/ccxt/ccxt/issues/9612\n },\n precisionMode: ct,\n options: {\n sandboxMode: !1,\n timeDifference: 0,\n defaultNetwork: \"ERC20\",\n defaultNetworks: {\n ETH: \"ERC20\",\n BTC: \"BTC\",\n USDT: \"TRC20\"\n },\n networks: {\n BTC: \"Bitcoin\",\n BTCLN: \"Lightning\",\n BEP20: \"BSC\",\n ERC20: \"ERC20\",\n TRC20: \"TRC20\",\n CRC20: \"Crypto\",\n // sorted\n ACA: \"Acala\",\n ALGO: \"Algorand\",\n BHP: \"BHP\",\n APT: \"Aptos\",\n ARBONE: \"Arbitrum One\",\n AVAXC: \"Avalanche C\",\n AVAXX: \"Avalanche X-Chain\",\n ARK: \"ARK\",\n AR: \"Arweave\",\n ASTR: \"Astar\",\n BCH: \"BitcoinCash\",\n BSV: \"Bitcoin SV\",\n BTM: \"Bytom\",\n ADA: \"Cardano\",\n CSPR: \"Casper\",\n CELO: \"CELO\",\n XCH: \"Chia\",\n CHZ: \"Chiliz\",\n ATOM: \"Cosmos\",\n TRUE: \"TrueChain\",\n DCR: \"Decred\",\n DGB: \"Digibyte\",\n DOGE: \"Dogecoin\",\n XEC: \"XEC\",\n EGLD: \"Elrond\",\n EOS: \"EOS\",\n ETC: \"Ethereum Classic\",\n ETHW: \"EthereumPow\",\n FTM: \"Fantom\",\n FIL: \"Filecoin\",\n FLOW: \"FLOW\",\n FSN: \"Fusion\",\n ONE: \"Harmony\",\n HBAR: \"Hedera\",\n HNT: \"Helium\",\n ZEN: \"Horizen\",\n ICX: \"ICON\",\n ICP: \"Dfinity\",\n IOST: \"IOST\",\n IOTA: \"MIOTA\",\n KDA: \"Kadena\",\n KAR: \"KAR\",\n KLAY: \"Klaytn\",\n KSM: \"Kusama\",\n LSK: \"Lisk\",\n LTC: \"Litecoin\",\n METIS: \"Metis\",\n MINA: \"Mina\",\n XMR: \"Monero\",\n GLRM: \"Moonbeam\",\n MOVR: \"Moonriver\",\n NANO: \"Nano\",\n NEAR: \"NEAR\",\n NAS: \"Nebulas\",\n NEM: \"New Economy Movement\",\n NULS: \"NULS\",\n OASYS: \"OASYS\",\n OKC: \"OKC\",\n ONT: \"Ontology\",\n OPTIMISM: \"Optimism\",\n LAT: \"PlatON\",\n DOT: \"Polkadot\",\n MATIC: \"Polygon\",\n RVN: \"Ravencoin\",\n XRP: \"Ripple\",\n SC: \"Siacoin\",\n SOL: \"Solana\",\n STX: \"l-Stacks\",\n XLM: \"Stellar Lumens\",\n XTZ: \"Tezos\",\n TON: \"TON\",\n THETA: \"Theta\",\n VSYS: \"VSYSTEMS\",\n WAVES: \"WAVES\",\n WAX: \"Wax\",\n ZEC: \"Zcash\",\n ZIL: \"Zilliqa\",\n ZKSYNC: \"ZKSYNC\"\n // 'NEON3': 'N3', // tbd\n // undetermined : \"CELO-TOKEN\", \"Digital Cash\", Khala\n // todo: uncomment below after consensus\n // 'AELF': 'AELF',\n // 'BITCOINDIAMOND': 'Bitcoin Diamond',\n // 'BITCOINGOLD': 'BitcoinGold',\n // 'YOYOW': 'YOYOW',\n // 'QTUM': 'Quantum',\n // 'INTCHAIN': 'INTCHAIN',\n // 'YOUCHAIN': 'YOUCHAIN',\n // 'RONIN': 'Ronin',\n // 'OEC': 'OEC',\n // 'WAYIKICHAIN': 'WGRT',\n // 'MDNA': 'DNA',\n // 'STEP': 'Step Network',\n // 'EMINER': 'Eminer',\n // 'CYBERMILES': 'CyberMiles',\n // 'HYPERCASH': 'HyperCash',\n // 'CONFLUX': 'Conflux',\n // 'CORTEX': 'Cortex',\n // 'TERRA': 'Terra',\n // 'TERRACLASSIC': 'Terra Classic',\n },\n fetchOHLCV: {\n // 'type': 'Candles', // Candles or HistoryCandles, IndexCandles, MarkPriceCandles\n timezone: \"UTC\"\n // UTC, HK\n },\n fetchPositions: {\n method: \"privateGetAccountPositions\"\n // privateGetAccountPositions or privateGetAccountPositionsHistory\n },\n createOrder: \"privatePostTradeBatchOrders\",\n createMarketBuyOrderRequiresPrice: !1,\n fetchMarkets: [\"spot\", \"future\", \"swap\", \"option\"],\n defaultType: \"spot\",\n // 'fetchBalance': {\n // 'type': 'spot', // 'funding', 'trading', 'spot'\n // },\n fetchLedger: {\n method: \"privateGetAccountBills\"\n // privateGetAccountBills, privateGetAccountBillsArchive, privateGetAssetBills\n },\n // 6: Funding account, 18: Trading account\n fetchOrder: {\n method: \"privateGetTradeOrder\"\n // privateGetTradeOrdersAlgoHistory\n },\n fetchOpenOrders: {\n method: \"privateGetTradeOrdersPending\"\n // privateGetTradeOrdersAlgoPending\n },\n cancelOrders: {\n method: \"privatePostTradeCancelBatchOrders\"\n // privatePostTradeCancelAlgos\n },\n fetchCanceledOrders: {\n method: \"privateGetTradeOrdersHistory\"\n // privateGetTradeOrdersAlgoHistory\n },\n fetchClosedOrders: {\n method: \"privateGetTradeOrdersHistory\"\n // privateGetTradeOrdersAlgoHistory\n },\n withdraw: {\n // a funding password credential is required by the exchange for the\n // withdraw call (not to be confused with the api password credential)\n password: void 0,\n pwd: void 0\n // password or pwd both work\n },\n algoOrderTypes: {\n conditional: !0,\n trigger: !0,\n oco: !0,\n move_order_stop: !0,\n iceberg: !0,\n twap: !0\n },\n accountsByType: {\n funding: \"6\",\n trading: \"18\",\n spot: \"18\",\n future: \"18\",\n futures: \"18\",\n margin: \"18\",\n swap: \"18\",\n option: \"18\"\n },\n accountsById: {\n 6: \"funding\",\n 18: \"trading\"\n // unified trading account\n },\n exchangeType: {\n spot: \"SPOT\",\n margin: \"MARGIN\",\n swap: \"SWAP\",\n future: \"FUTURES\",\n futures: \"FUTURES\",\n option: \"OPTION\",\n SPOT: \"SPOT\",\n MARGIN: \"MARGIN\",\n SWAP: \"SWAP\",\n FUTURES: \"FUTURES\",\n OPTION: \"OPTION\"\n },\n brokerId: \"e847386590ce4dBC\"\n }\n });\n }\n isUsingForcedProxy(e = {}, t = \"public\") {\n return t === \"private\";\n }\n nonce() {\n return this.milliseconds() - this.options.timeDifference;\n }\n handleMarketTypeAndParams(e, t = void 0, i = {}) {\n const s = this.safeString(i, \"instType\");\n return i = this.omit(i, \"instType\"), this.safeString(i, \"type\") === void 0 && s !== void 0 && (i.type = s), super.handleMarketTypeAndParams(e, t, i);\n }\n convertToInstrumentType(e) {\n const t = this.safeValue(this.options, \"exchangeType\", {});\n return this.safeString(t, e, e);\n }\n convertExpireDate(e) {\n const t = e.slice(0, 2), i = e.slice(2, 4), s = e.slice(4, 6);\n return \"20\" + t + \"-\" + i + \"-\" + s + \"T00:00:00Z\";\n }\n createExpiredOptionMarket(e) {\n const t = \"USD\", i = e.split(\"-\"), s = e.split(\"/\");\n let n;\n e.indexOf(\"/\") > -1 ? n = this.safeString(s, 0) : n = this.safeString(i, 0);\n const r = n, a = this.safeString(i, 2), o = this.safeString(i, 3), c = this.safeString(i, 4), u = this.convertExpireDate(a), f = this.parse8601(u);\n return {\n id: n + \"-\" + t + \"-\" + a + \"-\" + o + \"-\" + c,\n symbol: n + \"/\" + t + \":\" + r + \"-\" + a + \"-\" + o + \"-\" + c,\n base: n,\n quote: t,\n settle: r,\n baseId: n,\n quoteId: t,\n settleId: r,\n active: !1,\n type: \"option\",\n linear: void 0,\n inverse: void 0,\n spot: !1,\n swap: !1,\n future: !1,\n option: !0,\n margin: !1,\n contract: !0,\n contractSize: this.parseNumber(\"1\"),\n expiry: f,\n expiryDatetime: u,\n optionType: c === \"C\" ? \"call\" : \"put\",\n strike: this.parseNumber(o),\n precision: {\n amount: void 0,\n price: void 0\n },\n limits: {\n amount: {\n min: void 0,\n max: void 0\n },\n price: {\n min: void 0,\n max: void 0\n },\n cost: {\n min: void 0,\n max: void 0\n }\n },\n info: void 0\n };\n }\n safeMarket(e = void 0, t = void 0, i = void 0, s = void 0) {\n return e !== void 0 && (e.indexOf(\"-C\") > -1 || e.indexOf(\"-P\") > -1) && !(e in this.markets_by_id) ? this.createExpiredOptionMarket(e) : super.safeMarket(e, t, i, s);\n }\n async fetchStatus(e = {}) {\n const t = await this.publicGetSystemStatus(e), i = this.safeValue(t, \"data\", []), n = {\n updated: void 0,\n status: i.length === 0 ? \"ok\" : \"maintenance\",\n eta: void 0,\n url: void 0,\n info: t\n };\n for (let r = 0; r < i.length; r++) {\n const a = i[r], o = this.safeString(a, \"state\");\n n.eta = this.safeInteger(a, \"end\"), n.url = this.safeString(a, \"href\"), o === \"ongoing\" ? n.status = \"maintenance\" : (o === \"scheduled\" || o === \"completed\" || o === \"canceled\") && (n.status = \"ok\");\n }\n return n;\n }\n async fetchTime(e = {}) {\n const t = await this.publicGetPublicTime(e), i = this.safeValue(t, \"data\", []), s = this.safeValue(i, 0, {});\n return this.safeInteger(s, \"ts\");\n }\n async fetchAccounts(e = {}) {\n const t = await this.privateGetAccountConfig(e), i = this.safeValue(t, \"data\", []), s = [];\n for (let n = 0; n < i.length; n++) {\n const r = i[n], a = this.safeString(r, \"uid\"), o = this.safeString(r, \"acctLv\");\n s.push({\n id: a,\n type: o,\n currency: void 0,\n info: r,\n code: void 0\n });\n }\n return s;\n }\n async fetchMarkets(e = {}) {\n const t = this.safeValue(this.options, \"fetchMarkets\");\n let i = [], s = [];\n for (let n = 0; n < t.length; n++)\n i.push(this.fetchMarketsByType(t[n], e));\n i = await Promise.all(i);\n for (let n = 0; n < i.length; n++)\n s = this.arrayConcat(s, i[n]);\n return s;\n }\n parseMarket(e) {\n const t = this.safeString(e, \"instId\");\n let i = this.safeStringLower(e, \"instType\");\n i === \"futures\" && (i = \"future\");\n const s = i === \"spot\", n = i === \"future\", r = i === \"swap\", a = i === \"option\", o = r || n || a;\n let c = this.safeString(e, \"baseCcy\"), u = this.safeString(e, \"quoteCcy\");\n const f = this.safeString(e, \"settleCcy\"), h = this.safeCurrencyCode(f), l = this.safeString(e, \"uly\");\n if (l !== void 0 && !s) {\n const V = l.split(\"-\");\n c = this.safeString(V, 0), u = this.safeString(V, 1);\n }\n const p = this.safeCurrencyCode(c), m = this.safeCurrencyCode(u);\n let y = p + \"/\" + m, w, S, b;\n if (o) {\n if (y = y + \":\" + h, w = this.safeInteger(e, \"expTime\"), n) {\n const V = this.yymmdd(w);\n y = y + \"-\" + V;\n } else if (a) {\n S = this.safeString(e, \"stk\"), b = this.safeString(e, \"optType\");\n const V = this.yymmdd(w);\n y = y + \"-\" + V + \"-\" + S + \"-\" + b, b = b === \"P\" ? \"put\" : \"call\";\n }\n }\n const T = this.safeString(e, \"tickSz\"), x = this.safeValue2(this.fees, i, \"trading\", {});\n let v = this.safeString(e, \"lever\", \"1\");\n v = P.stringMax(v, \"1\");\n const _ = this.safeNumber(e, \"maxMktSz\");\n return this.extend(x, {\n id: t,\n symbol: y,\n base: p,\n quote: m,\n settle: h,\n baseId: c,\n quoteId: u,\n settleId: f,\n type: i,\n spot: s,\n margin: s && P.stringGt(v, \"1\"),\n swap: r,\n future: n,\n option: a,\n active: !0,\n contract: o,\n linear: o ? u === f : void 0,\n inverse: o ? c === f : void 0,\n contractSize: o ? this.safeNumber(e, \"ctVal\") : void 0,\n expiry: w,\n expiryDatetime: this.iso8601(w),\n strike: S,\n optionType: b,\n created: this.safeInteger(e, \"listTime\"),\n precision: {\n amount: this.safeNumber(e, \"lotSz\"),\n price: this.parseNumber(T)\n },\n limits: {\n leverage: {\n min: this.parseNumber(\"1\"),\n max: this.parseNumber(v)\n },\n amount: {\n min: this.safeNumber(e, \"minSz\"),\n max: void 0\n },\n price: {\n min: void 0,\n max: void 0\n },\n cost: {\n min: void 0,\n max: o ? void 0 : _\n }\n },\n info: e\n });\n }\n async fetchMarketsByType(e, t = {}) {\n const i = {\n instType: this.convertToInstrumentType(e)\n };\n if (e === \"option\") {\n const r = this.safeValue(this.options, \"defaultUnderlying\", [\"BTC-USD\", \"ETH-USD\"]), a = [];\n for (let u = 0; u < r.length; u++) {\n const f = r[u];\n i.uly = f, a.push(this.publicGetPublicInstruments(this.extend(i, t)));\n }\n const o = await Promise.all(a);\n let c = [];\n for (let u = 0; u < o.length; u++) {\n const f = this.safeValue(o, u, {}), h = this.safeValue(f, \"data\", []);\n c = this.arrayConcat(c, h);\n }\n return this.parseMarkets(c);\n }\n const s = await this.publicGetPublicInstruments(this.extend(i, t)), n = this.safeValue(s, \"data\", []);\n return this.parseMarkets(n);\n }\n safeNetwork(e) {\n const t = {\n Bitcoin: \"BTC\",\n \"Optimism (V2)\": \"Optimism\",\n Omni: \"OMNI\",\n TRON: \"TRC20\"\n };\n return this.safeString(t, e, e);\n }\n async fetchCurrencies(e = {}) {\n const t = this.safeValue(this.options, \"sandboxMode\", !1);\n if (!this.checkRequiredCredentials(!1) || t)\n return;\n const i = await this.privateGetAssetCurrencies(e), s = this.safeValue(i, \"data\", []), n = {}, r = this.groupBy(s, \"ccy\"), a = Object.keys(r);\n for (let o = 0; o < a.length; o++) {\n const c = a[o], f = this.safeCurrency(c).code, h = r[c], l = {};\n let p = !1, m = !1, y = !1, w;\n for (let b = 0; b < h.length; b++) {\n const T = h[b], x = this.safeValue(T, \"canDep\"), v = this.safeValue(T, \"canWd\");\n m = x || m, y = v || y;\n const _ = this.safeValue(T, \"canInternal\"), V = !!(x && v && _);\n p = V || p;\n const j = this.safeString(T, \"chain\");\n if (j !== void 0 && j.indexOf(\"-\") >= 0) {\n const W = j.split(\"-\").slice(1).join(\"-\"), B = this.safeNetwork(W), Q = this.parsePrecision(this.safeString(T, \"wdTickSz\"));\n w === void 0 ? w = Q : w = P.stringMin(w, Q), l[B] = {\n id: j,\n network: B,\n active: V,\n deposit: x,\n withdraw: v,\n fee: this.safeNumber(T, \"minFee\"),\n precision: this.parseNumber(Q),\n limits: {\n withdraw: {\n min: this.safeNumber(T, \"minWd\"),\n max: this.safeNumber(T, \"maxWd\")\n }\n },\n info: T\n };\n }\n }\n const S = this.safeValue(h, 0);\n n[f] = {\n info: void 0,\n code: f,\n id: c,\n name: this.safeString(S, \"name\"),\n active: p,\n deposit: m,\n withdraw: y,\n fee: void 0,\n precision: this.parseNumber(w),\n limits: {\n amount: {\n min: void 0,\n max: void 0\n }\n },\n networks: l\n };\n }\n return n;\n }\n async fetchOrderBook(e, t = void 0, i = {}) {\n await this.loadMarkets();\n const n = {\n instId: this.market(e).id\n };\n let r;\n [r, i] = this.handleOptionAndParams(i, \"fetchOrderBook\", \"method\", \"publicGetMarketBooks\"), r === \"publicGetMarketBooksFull\" && t === void 0 && (t = 5e3), t = t === void 0 ? 100 : t, t !== void 0 && (n.sz = t);\n let a;\n r === \"publicGetMarketBooksFull\" || t > 400 ? a = await this.publicGetMarketBooksFull(this.extend(n, i)) : a = await this.publicGetMarketBooks(this.extend(n, i));\n const o = this.safeValue(a, \"data\", []), c = this.safeValue(o, 0, {}), u = this.safeInteger(c, \"ts\");\n return this.parseOrderBook(c, e, u);\n }\n parseTicker(e, t = void 0) {\n const i = this.safeInteger(e, \"ts\"), s = this.safeString(e, \"instId\");\n t = this.safeMarket(s, t, \"-\");\n const n = t.symbol, r = this.safeString(e, \"last\"), a = this.safeString(e, \"open24h\"), c = this.safeBool(t, \"spot\", !1) ? this.safeString(e, \"volCcy24h\") : void 0, u = this.safeString(e, \"vol24h\"), f = this.safeString(e, \"high24h\"), h = this.safeString(e, \"low24h\");\n return this.safeTicker({\n symbol: n,\n timestamp: i,\n datetime: this.iso8601(i),\n high: f,\n low: h,\n bid: this.safeString(e, \"bidPx\"),\n bidVolume: this.safeString(e, \"bidSz\"),\n ask: this.safeString(e, \"askPx\"),\n askVolume: this.safeString(e, \"askSz\"),\n vwap: void 0,\n open: a,\n close: r,\n last: r,\n previousClose: void 0,\n change: void 0,\n percentage: void 0,\n average: void 0,\n baseVolume: u,\n quoteVolume: c,\n info: e\n }, t);\n }\n async fetchTicker(e, t = {}) {\n await this.loadMarkets();\n const i = this.market(e), s = {\n instId: i.id\n }, n = await this.publicGetMarketTicker(this.extend(s, t)), r = this.safeValue(n, \"data\", []), a = this.safeValue(r, 0, {});\n return this.parseTicker(a, i);\n }\n async fetchTickersByType(e, t = void 0, i = {}) {\n await this.loadMarkets();\n const s = {\n instType: this.convertToInstrumentType(e)\n };\n if (e === \"option\") {\n const a = this.safeValue(this.options, \"defaultUnderlying\", \"BTC-USD\"), o = this.safeString2(i, \"uly\", \"marketId\", a);\n if (o === void 0)\n throw new g(\"fetchTickersByType() requires an underlying uly or marketId parameter for options markets\").exchange(this.id);\n s.uly = o;\n }\n const n = await this.publicGetMarketTickers(this.extend(s, i)), r = this.safeValue(n, \"data\", []);\n return this.parseTickers(r, t);\n }\n async fetchTickers(e = void 0, t = {}) {\n await this.loadMarkets(), e = this.marketSymbols(e);\n const i = this.safeString(e, 0);\n let s;\n i !== void 0 && (s = this.market(i));\n const [n, r] = this.handleMarketTypeAndParams(\"fetchTickers\", s, t);\n return await this.fetchTickersByType(n, e, r);\n }\n parseTrade(e, t = void 0) {\n const i = this.safeString(e, \"tradeId\"), s = this.safeString(e, \"instId\");\n t = this.safeMarket(s, t, \"-\");\n const n = t.symbol, r = this.safeInteger(e, \"ts\"), a = this.safeString2(e, \"fillPx\", \"px\"), o = this.safeString2(e, \"fillSz\", \"sz\"), c = this.safeString(e, \"side\"), u = this.safeString(e, \"ordId\"), f = this.safeString(e, \"fee\");\n let h;\n if (f !== void 0) {\n const p = P.stringNeg(f), m = this.safeString(e, \"feeCcy\"), y = this.safeCurrencyCode(m);\n h = {\n cost: p,\n currency: y\n };\n }\n let l = this.safeString(e, \"execType\");\n return l === \"T\" ? l = \"taker\" : l === \"M\" && (l = \"maker\"), this.safeTrade({\n info: e,\n timestamp: r,\n datetime: this.iso8601(r),\n symbol: n,\n id: i,\n order: u,\n type: void 0,\n takerOrMaker: l,\n side: c,\n price: a,\n amount: o,\n cost: void 0,\n fee: h\n }, t);\n }\n async fetchTrades(e, t = void 0, i = void 0, s = {}) {\n await this.loadMarkets();\n let n = !1;\n if ([n, s] = this.handleOptionAndParams(s, \"fetchTrades\", \"paginate\"), n)\n return await this.fetchPaginatedCallCursor(\"fetchTrades\", e, t, i, s, \"tradeId\", \"after\", void 0, 100);\n const r = this.market(e), a = {\n instId: r.id\n };\n let o;\n if (r.option)\n o = await this.publicGetPublicOptionTrades(this.extend(a, s));\n else {\n i !== void 0 && (a.limit = i);\n let u;\n [u, s] = this.handleOptionAndParams(s, \"fetchTrades\", \"method\", \"publicGetMarketTrades\"), u === \"publicGetMarketTrades\" ? o = await this.publicGetMarketTrades(this.extend(a, s)) : u === \"publicGetMarketHistoryTrades\" && (o = await this.publicGetMarketHistoryTrades(this.extend(a, s)));\n }\n const c = this.safeValue(o, \"data\", []);\n return this.parseTrades(c, r, t, i);\n }\n parseOHLCV(e, t = void 0) {\n const n = this.handleMarketTypeAndParams(\"fetchOHLCV\", t, void 0)[0] === \"spot\" ? 5 : 6;\n return [\n this.safeInteger(e, 0),\n this.safeNumber(e, 1),\n this.safeNumber(e, 2),\n this.safeNumber(e, 3),\n this.safeNumber(e, 4),\n this.safeNumber(e, n)\n ];\n }\n async fetchOHLCV(e, t = \"1m\", i = void 0, s = void 0, n = {}) {\n await this.loadMarkets();\n const r = this.market(e);\n let a = !1;\n if ([a, n] = this.handleOptionAndParams(n, \"fetchOHLCV\", \"paginate\"), a)\n return await this.fetchPaginatedCallDeterministic(\"fetchOHLCV\", e, i, s, t, n, 200);\n const o = this.safeString(n, \"price\");\n n = this.omit(n, \"price\");\n const c = this.safeValue(this.options, \"fetchOHLCV\", {}), u = this.safeString(c, \"timezone\", \"UTC\");\n s === void 0 && (s = 100);\n const f = this.parseTimeframe(t);\n let h = this.safeString(this.timeframes, t, t);\n u === \"UTC\" && f >= 21600 && (h += u.toLowerCase());\n const l = {\n instId: r.id,\n bar: h,\n limit: s\n };\n let p = \"Candles\";\n if (i !== void 0) {\n const T = this.milliseconds(), x = f * 1e3, v = T - (1440 - 1) * x;\n i < v && (p = \"HistoryCandles\");\n const _ = Math.max(i - 1, 0);\n l.before = _, l.after = this.sum(i, x * s);\n }\n const m = this.safeInteger(n, \"until\");\n m !== void 0 && (l.after = m, n = this.omit(n, \"until\")), p = this.safeString(c, \"type\", p);\n const y = this.safeString(n, \"type\", p);\n n = this.omit(n, \"type\");\n const w = y === \"HistoryCandles\";\n let S;\n o === \"mark\" ? w ? S = await this.publicGetMarketHistoryMarkPriceCandles(this.extend(l, n)) : S = await this.publicGetMarketMarkPriceCandles(this.extend(l, n)) : o === \"index\" ? (l.instId = r.info.instFamily, w ? S = await this.publicGetMarketHistoryIndexCandles(this.extend(l, n)) : S = await this.publicGetMarketIndexCandles(this.extend(l, n))) : w ? S = await this.publicGetMarketHistoryCandles(this.extend(l, n)) : S = await this.publicGetMarketCandles(this.extend(l, n));\n const b = this.safeValue(S, \"data\", []);\n return this.parseOHLCVs(b, r, t, i, s);\n }\n parseBalanceByType(e, t) {\n return e === \"funding\" ? this.parseFundingBalance(t) : e === \"savings\" ? this.parseSavingsBalance(t) : this.parseTradingBalance(t);\n }\n parseSavingsBalance(e) {\n const t = { info: e }, i = this.safeValue(e, \"data\", []);\n for (let s = 0; s < i.length; s++) {\n const n = i[s], r = this.safeString(n, \"ccy\"), a = this.safeCurrencyCode(r), o = this.account();\n o.total = this.safeString(n, \"amt\"), o.used = this.safeString(n, \"loanAmt\"), o.free = P.stringSub(o.total, o.used), t[a] = o;\n }\n return this.safeBalance(t);\n }\n parseTradingBalance(e) {\n const t = { info: e }, i = this.safeValue(e, \"data\", []), s = this.safeValue(i, 0, {}), n = this.safeInteger(s, \"uTime\"), r = this.safeValue(s, \"details\", []);\n for (let a = 0; a < r.length; a++) {\n const o = r[a], c = this.safeString(o, \"ccy\"), u = this.safeCurrencyCode(c), f = this.account(), h = this.safeString(o, \"eq\"), l = this.safeString(o, \"availEq\");\n h === void 0 || l === void 0 ? (f.free = this.safeString(o, \"availBal\"), f.used = this.safeString(o, \"frozenBal\")) : (f.total = h, f.free = l), t[u] = f;\n }\n return t.timestamp = n, t.datetime = this.iso8601(n), this.safeBalance(t);\n }\n parseFundingBalance(e) {\n const t = { info: e }, i = this.safeValue(e, \"data\", []);\n for (let s = 0; s < i.length; s++) {\n const n = i[s], r = this.safeString(n, \"ccy\"), a = this.safeCurrencyCode(r), o = this.account();\n o.total = this.safeString(n, \"bal\"), o.free = this.safeString(n, \"availBal\"), o.used = this.safeString(n, \"frozenBal\"), t[a] = o;\n }\n return this.safeBalance(t);\n }\n parseTradingFee(e, t = void 0) {\n return {\n info: e,\n symbol: this.safeSymbol(void 0, t),\n // OKX returns the fees as negative values opposed to other exchanges, so the sign needs to be flipped\n maker: this.parseNumber(P.stringNeg(this.safeString2(e, \"maker\", \"makerU\"))),\n taker: this.parseNumber(P.stringNeg(this.safeString2(e, \"taker\", \"takerU\")))\n };\n }\n async fetchTradingFee(e, t = {}) {\n await this.loadMarkets();\n const i = this.market(e), s = {\n instType: this.convertToInstrumentType(i.type)\n // SPOT, MARGIN, SWAP, FUTURES, OPTION\n // \"instId\": market[\"id\"], // only applicable to SPOT/MARGIN\n // \"uly\": market[\"id\"], // only applicable to FUTURES/SWAP/OPTION\n // \"category\": \"1\", // 1 = Class A, 2 = Class B, 3 = Class C, 4 = Class D\n };\n if (i.spot)\n s.instId = i.id;\n else if (i.swap || i.future || i.option)\n s.uly = i.baseId + \"-\" + i.quoteId;\n else\n throw new ge(i.type).addMessage(\"fetchTradingFee() supports spot, swap, future or option markets only\").exchange(this.id);\n const n = await this.privateGetAccountTradeFee(this.extend(s, t)), r = this.safeValue(n, \"data\", []), a = this.safeValue(r, 0, {});\n return this.parseTradingFee(a, i);\n }\n async fetchBalance(e = {}) {\n await this.loadMarkets();\n const [t, i] = this.handleMarketTypeAndParams(\"fetchBalance\", void 0, e), s = {\n // 'ccy': 'BTC,ETH', // comma-separated list of currency ids\n };\n let n;\n return t === \"funding\" ? n = await this.privateGetAssetBalances(this.extend(s, i)) : t === \"savings\" ? n = await this.privateGetFinanceSavingsBalance(this.extend(s, i)) : n = await this.privateGetAccountBalance(this.extend(s, i)), this.parseBalanceByType(t, n);\n }\n async createMarketBuyOrderWithCost(e, t, i = {}) {\n await this.loadMarkets();\n const s = this.market(e);\n if (!s.spot)\n throw new ge(s.type).addMessage(\"createMarketBuyOrderWithCost() supports spot markets only\").exchange(this.id);\n return i.createMarketBuyOrderRequiresPrice = !1, i.tgtCcy = \"quote_ccy\", await this.createOrder(e, \"market\", \"buy\", t, void 0, i);\n }\n async createMarketSellOrderWithCost(e, t, i = {}) {\n await this.loadMarkets();\n const s = this.market(e);\n if (!s.spot)\n throw new ge(s.type).addMessage(\"createMarketSellOrderWithCost() supports spot markets only\").exchange(this.id);\n return i.createMarketBuyOrderRequiresPrice = !1, i.tgtCcy = \"quote_ccy\", await this.createOrder(e, \"market\", \"sell\", t, void 0, i);\n }\n createOrderRequest(e, t, i, s, n = void 0, r = {}) {\n const a = this.market(e), o = {\n instId: a.id,\n // 'ccy': currency['id'], // only applicable to cross MARGIN orders in single-currency margin\n // 'clOrdId': clientOrderId, // up to 32 characters, must be unique\n // 'tag': tag, // up to 8 characters\n side: i,\n // 'posSide': 'long', // long, short, // required in the long/short mode, and can only be long or short (only for future or swap)\n ordType: t,\n // 'ordType': type, // privatePostTradeOrder: market, limit, post_only, fok, ioc, optimal_limit_ioc\n // 'ordType': type, // privatePostTradeOrderAlgo: conditional, oco, trigger, move_order_stop, iceberg, twap\n sz: this.amountToPrecision(e, s)\n // 'px': this.priceToPrecision (symbol, price), // limit orders only\n // 'reduceOnly': false,\n //\n // 'triggerPx': 10, // stopPrice (trigger orders)\n // 'orderPx': 10, // Order price if -1, the order will be executed at the market price. (trigger orders)\n // 'triggerPxType': 'last', // Conditional default is last, mark or index (trigger orders)\n //\n // 'tpTriggerPx': 10, // takeProfitPrice (conditional orders)\n // 'tpTriggerPxType': 'last', // Conditional default is last, mark or index (conditional orders)\n // 'tpOrdPx': 10, // Order price for Take-Profit orders, if -1 will be executed at market price (conditional orders)\n //\n // 'slTriggerPx': 10, // stopLossPrice (conditional orders)\n // 'slTriggerPxType': 'last', // Conditional default is last, mark or index (conditional orders)\n // 'slOrdPx': 10, // Order price for Stop-Loss orders, if -1 will be executed at market price (conditional orders)\n }, c = a.spot, u = a.contract, f = this.safeValueN(r, [\"triggerPrice\", \"stopPrice\", \"triggerPx\"]), h = this.safeString(r, \"timeInForce\", \"GTC\"), l = this.safeValue2(r, \"takeProfitPrice\", \"tpTriggerPx\"), p = this.safeValue(r, \"tpOrdPx\", n), m = this.safeString(r, \"tpTriggerPxType\", \"last\"), y = this.safeValue2(r, \"stopLossPrice\", \"slTriggerPx\"), w = this.safeValue(r, \"slOrdPx\", n), S = this.safeString(r, \"slTriggerPxType\", \"last\"), b = this.safeString2(r, \"clOrdId\", \"clientOrderId\"), T = this.safeValue(r, \"stopLoss\"), x = T !== void 0, v = this.safeValue(r, \"takeProfit\"), _ = v !== void 0, V = this.safeString2(r, \"trailingPercent\", \"callbackRatio\"), j = V !== void 0, G = this.safeString2(this.options, \"defaultMarginMode\", \"marginMode\", \"cross\");\n let W = this.safeString2(r, \"marginMode\", \"tdMode\"), B = !1;\n if (W !== void 0 && W !== \"cash\" ? B = !0 : (W = G, B = this.safeBool(r, \"margin\", !1)), c) {\n if (B) {\n const U = i === \"buy\" ? a.quote : a.base, Y = this.safeString(r, \"ccy\", U);\n o.ccy = this.safeCurrencyCode(Y);\n }\n const R = B ? W : \"cash\";\n o.tdMode = R;\n } else if (u) {\n if (a.swap || a.future) {\n let R;\n [R, r] = this.handleOptionAndParams(r, \"createOrder\", \"positionSide\"), R !== void 0 && (o.posSide = R);\n }\n o.tdMode = W;\n }\n const Q = t === \"market\";\n let se = !1;\n [se, r] = this.handlePostOnly(Q, t === \"post_only\", r), r = this.omit(r, [\"currency\", \"ccy\", \"marginMode\", \"timeInForce\", \"stopPrice\", \"triggerPrice\", \"clientOrderId\", \"stopLossPrice\", \"takeProfitPrice\", \"slOrdPx\", \"tpOrdPx\", \"margin\", \"stopLoss\", \"takeProfit\", \"trailingPercent\"]);\n const $ = h === \"IOC\" || t === \"ioc\", te = h === \"FOK\" || t === \"fok\", E = f !== void 0 || t === \"trigger\", N = y !== void 0 || l !== void 0 || t === \"conditional\", L = Q && $ || t === \"optimal_limit_ioc\", z = this.safeString(this.options, \"tgtCcy\", \"base_ccy\"), K = this.safeString(r, \"tgtCcy\", z);\n if (!u && !B && (o.tgtCcy = K), Q || L) {\n if (o.ordType = \"market\", c && i === \"buy\" && K === \"quote_ccy\") {\n let R = !0;\n [R, r] = this.handleOptionAndParams(r, \"createOrder\", \"createMarketBuyOrderRequiresPrice\", !0);\n let U = this.safeNumber2(r, \"cost\", \"sz\");\n if (r = this.omit(r, [\"cost\", \"sz\"]), R) {\n if (n !== void 0) {\n if (U === void 0) {\n const Y = this.numberToString(s), J = this.numberToString(n), ae = P.stringMul(Y, J);\n U = this.parseNumber(ae);\n }\n } else if (U === void 0)\n throw new g(\"createOrder() requires the price argument with market buy orders to calculate total order cost (amount to spend), where cost = amount * price. Supply a price argument to createOrder() call if you want the cost to be calculated for you from price and amount, or, alternatively, add .options['createMarketBuyOrderRequiresPrice'] = false and supply the total cost value in the 'amount' argument or in the 'cost' unified extra parameter or in exchange-specific 'sz' extra parameter (the exchange-specific behaviour)\").exchange(this.id);\n } else\n U = U === void 0 ? s : U;\n o.sz = this.costToPrecision(e, U);\n }\n L && u && (o.ordType = \"optimal_limit_ioc\");\n } else\n !E && !N && (o.px = this.priceToPrecision(e, n));\n if (se ? o.ordType = \"post_only\" : $ && !L ? o.ordType = \"ioc\" : te && (o.ordType = \"fok\"), j) {\n const R = P.stringDiv(V, \"100\");\n o.callbackRatio = R, o.ordType = \"move_order_stop\";\n } else if (x || _) {\n if (x) {\n const R = this.safeValueN(T, [\"triggerPrice\", \"stopPrice\", \"slTriggerPx\"]);\n if (R === void 0)\n throw new g('createOrder() requires a trigger price in params[\"stopLoss\"][\"triggerPrice\"], or params[\"stopLoss\"][\"stopPrice\"], or params[\"stopLoss\"][\"slTriggerPx\"] for a stop loss order').exchange(this.id);\n o.slTriggerPx = this.priceToPrecision(e, R);\n const U = this.safeValueN(T, [\"price\", \"stopLossPrice\", \"slOrdPx\"]), Y = this.safeString(T, \"type\");\n if (Y !== void 0) {\n const ae = Y === \"limit\";\n if (!ae && !(Y === \"market\"))\n throw new g('createOrder() params[\"stopLoss\"][\"type\"] must be either \"limit\" or \"market\"').exchange(this.id);\n if (ae) {\n if (U === void 0)\n throw new g('createOrder() requires a limit price in params[\"stopLoss\"][\"price\"] or params[\"stopLoss\"][\"slOrdPx\"] for a stop loss limit order').exchange(this.id);\n o.slOrdPx = this.priceToPrecision(e, U);\n } else\n Y === \"market\" && (o.slOrdPx = \"-1\");\n } else\n U !== void 0 ? o.slOrdPx = this.priceToPrecision(e, U) : o.slOrdPx = \"-1\";\n const J = this.safeString2(T, \"triggerPriceType\", \"slTriggerPxType\", \"last\");\n if (J !== void 0) {\n if (J !== \"last\" && J !== \"index\" && J !== \"mark\")\n throw new g('createOrder() stop loss trigger price type must be one of \"last\", \"index\" or \"mark\"').exchange(this.id);\n o.slTriggerPxType = J;\n }\n }\n if (_) {\n const R = this.safeValueN(v, [\"triggerPrice\", \"stopPrice\", \"tpTriggerPx\"]);\n if (R === void 0)\n throw new g('createOrder() requires a trigger price in params[\"takeProfit\"][\"triggerPrice\"], or params[\"takeProfit\"][\"stopPrice\"], or params[\"takeProfit\"][\"tpTriggerPx\"] for a take profit order').exchange(this.id);\n o.tpTriggerPx = this.priceToPrecision(e, R);\n const U = this.safeValueN(v, [\"price\", \"takeProfitPrice\", \"tpOrdPx\"]), Y = this.safeString(v, \"type\");\n if (Y !== void 0) {\n const ae = Y === \"limit\";\n if (!ae && !(Y === \"market\"))\n throw new g('createOrder() params[\"takeProfit\"][\"type\"] must be either \"limit\" or \"market\"').exchange(this.id);\n if (ae) {\n if (U === void 0)\n throw new g('createOrder() requires a limit price in params[\"takeProfit\"][\"price\"] or params[\"takeProfit\"][\"tpOrdPx\"] for a take profit limit order').exchange(this.id);\n o.tpOrdPx = this.priceToPrecision(e, U);\n } else\n Y === \"market\" && (o.tpOrdPx = \"-1\");\n } else\n U !== void 0 ? o.tpOrdPx = this.priceToPrecision(e, U) : o.tpOrdPx = \"-1\";\n const J = this.safeString2(v, \"triggerPriceType\", \"tpTriggerPxType\", \"last\");\n if (J !== void 0) {\n if (J !== \"last\" && J !== \"index\" && J !== \"mark\")\n throw new g('createOrder() take profit trigger price type must be one of \"last\", \"index\" or \"mark\"').exchange(this.id);\n o.tpTriggerPxType = J;\n }\n }\n } else\n E ? (o.ordType = \"trigger\", o.triggerPx = this.priceToPrecision(e, f), o.orderPx = Q ? \"-1\" : this.priceToPrecision(e, n)) : N && (o.ordType = \"conditional\", l !== void 0 && y !== void 0 && (o.ordType = \"oco\"), l !== void 0 && (o.tpTriggerPx = this.priceToPrecision(e, l), o.tpOrdPx = p === void 0 ? \"-1\" : this.priceToPrecision(e, p), o.tpTriggerPxType = m), y !== void 0 && (o.slTriggerPx = this.priceToPrecision(e, y), o.slOrdPx = w === void 0 ? \"-1\" : this.priceToPrecision(e, w), o.slTriggerPxType = S));\n if (b === void 0) {\n const R = this.safeString(this.options, \"brokerId\");\n R !== void 0 && (o.clOrdId = R + this.uuid16(), o.tag = R);\n } else\n o.clOrdId = b, r = this.omit(r, [\"clOrdId\", \"clientOrderId\"]);\n return this.extend(o, r);\n }\n async createOrder(e, t, i, s, n = void 0, r = {}) {\n await this.loadMarkets();\n const a = this.market(e);\n let o = this.createOrderRequest(e, t, i, s, n, r), c = this.safeString(this.options, \"createOrder\", \"privatePostTradeBatchOrders\");\n const u = this.safeString(o, \"ordType\");\n if ((u === \"trigger\" || u === \"conditional\" || u === \"move_order_stop\" || t === \"move_order_stop\" || t === \"oco\" || t === \"iceberg\" || t === \"twap\") && (c = \"privatePostTradeOrderAlgo\"), c !== \"privatePostTradeOrder\" && c !== \"privatePostTradeOrderAlgo\" && c !== \"privatePostTradeBatchOrders\")\n throw new be().addMessage('createOrder() this.options[\"createOrder\"] must be either privatePostTradeBatchOrders or privatePostTradeOrder or privatePostTradeOrderAlgo').exchange(this.id);\n c === \"privatePostTradeBatchOrders\" && (o = [o]);\n let f;\n c === \"privatePostTradeOrder\" ? f = await this.privatePostTradeOrder(o) : c === \"privatePostTradeOrderAlgo\" ? f = await this.privatePostTradeOrderAlgo(o) : f = await this.privatePostTradeBatchOrders(o);\n const h = this.safeValue(f, \"data\", []), l = this.safeValue(h, 0), p = this.parseOrder(l, a);\n return p.type = t, p.side = i, p;\n }\n async createOrders(e, t = {}) {\n await this.loadMarkets();\n const i = [];\n for (let r = 0; r < e.length; r++) {\n const a = e[r], o = this.safeString(a, \"symbol\"), c = this.safeString(a, \"type\"), u = this.safeString(a, \"side\"), f = this.safeValue(a, \"amount\"), h = this.safeValue(a, \"price\"), l = this.safeValue(a, \"params\", {}), p = this.extend(l, t), m = this.createOrderRequest(o, c, u, f, h, p);\n i.push(m);\n }\n const s = await this.privatePostTradeBatchOrders(i), n = this.safeValue(s, \"data\", []);\n return this.parseOrders(n);\n }\n editOrderRequest(e, t, i, s, n = void 0, r = void 0, a = {}) {\n const c = {\n instId: this.market(t).id\n };\n let u;\n (i === \"trigger\" || i === \"conditional\" || i === \"move_order_stop\" || i === \"oco\" || i === \"iceberg\" || i === \"twap\") && (u = !0);\n const f = this.safeString2(a, \"clOrdId\", \"clientOrderId\");\n f !== void 0 ? u ? c.algoClOrdId = f : c.clOrdId = f : u ? c.algoId = e : c.ordId = e;\n let h = this.safeValue2(a, \"stopLossPrice\", \"newSlTriggerPx\"), l = this.safeValue(a, \"newSlOrdPx\");\n const p = this.safeString(a, \"newSlTriggerPxType\", \"last\");\n let m = this.safeValue2(a, \"takeProfitPrice\", \"newTpTriggerPx\"), y = this.safeValue(a, \"newTpOrdPx\");\n const w = this.safeString(a, \"newTpTriggerPxType\", \"last\"), S = this.safeValue(a, \"stopLoss\"), b = this.safeValue(a, \"takeProfit\"), T = S !== void 0, x = b !== void 0;\n if (u) {\n if (h === void 0 && m === void 0)\n throw new g(\"editOrder() requires a stopLossPrice or takeProfitPrice parameter for editing an algo order\").exchange(this.id);\n if (h !== void 0) {\n if (l === void 0)\n throw new g(\"editOrder() requires a newSlOrdPx parameter for editing an algo order\").exchange(this.id);\n c.newSlTriggerPx = this.priceToPrecision(t, h), c.newSlOrdPx = i === \"market\" ? \"-1\" : this.priceToPrecision(t, l), c.newSlTriggerPxType = p;\n }\n if (m !== void 0) {\n if (y === void 0)\n throw new g(\"editOrder() requires a newTpOrdPx parameter for editing an algo order\").exchange(this.id);\n c.newTpTriggerPx = this.priceToPrecision(t, m), c.newTpOrdPx = i === \"market\" ? \"-1\" : this.priceToPrecision(t, y), c.newTpTriggerPxType = w;\n }\n } else {\n if (h !== void 0 && (c.newSlTriggerPx = this.priceToPrecision(t, h), c.newSlOrdPx = i === \"market\" ? \"-1\" : this.priceToPrecision(t, l), c.newSlTriggerPxType = p), m !== void 0 && (c.newTpTriggerPx = this.priceToPrecision(t, m), c.newTpOrdPx = i === \"market\" ? \"-1\" : this.priceToPrecision(t, y), c.newTpTriggerPxType = w), T) {\n h = this.safeValue(S, \"triggerPrice\"), l = this.safeValue(S, \"price\");\n const v = this.safeString(S, \"type\");\n c.newSlTriggerPx = this.priceToPrecision(t, h), c.newSlOrdPx = v === \"market\" ? \"-1\" : this.priceToPrecision(t, l), c.newSlTriggerPxType = p;\n }\n if (x) {\n m = this.safeValue(b, \"triggerPrice\"), y = this.safeValue(b, \"price\");\n const v = this.safeString(b, \"type\");\n c.newTpTriggerPx = this.priceToPrecision(t, m), c.newTpOrdPx = v === \"market\" ? \"-1\" : this.priceToPrecision(t, y), c.newTpTriggerPxType = w;\n }\n }\n return n !== void 0 && (c.newSz = this.amountToPrecision(t, n)), u || r !== void 0 && (c.newPx = this.priceToPrecision(t, r)), a = this.omit(a, [\"clOrdId\", \"clientOrderId\", \"takeProfitPrice\", \"stopLossPrice\", \"stopLoss\", \"takeProfit\"]), this.extend(c, a);\n }\n async editOrder(e, t, i, s, n = void 0, r = void 0, a = {}) {\n await this.loadMarkets();\n const o = this.market(t), c = this.editOrderRequest(e, t, i, s, n, r, a);\n let u;\n (i === \"trigger\" || i === \"conditional\" || i === \"move_order_stop\" || i === \"oco\" || i === \"iceberg\" || i === \"twap\") && (u = !0);\n let f;\n u ? f = await this.privatePostTradeAmendAlgos(this.extend(c, a)) : f = await this.privatePostTradeAmendOrder(this.extend(c, a));\n const h = this.safeValue(f, \"data\", []), l = this.safeValue(h, 0), p = this.parseOrder(l, o);\n return p.type = i, p.side = s, p;\n }\n async cancelOrder(e, t = void 0, i = {}) {\n if (t === void 0)\n throw new g(\"cancelOrder() requires a symbol argument\").exchange(this.id);\n const s = this.safeValue2(i, \"stop\", \"trigger\"), n = this.safeBool(i, \"trailing\", !1);\n if (s || n) {\n const l = await this.cancelOrders([e], t, i);\n return this.safeValue(l, 0);\n }\n await this.loadMarkets();\n const r = this.market(t), a = {\n instId: r.id\n // 'ordId': id, // either ordId or clOrdId is required\n // 'clOrdId': clientOrderId,\n }, o = this.safeString2(i, \"clOrdId\", \"clientOrderId\");\n o !== void 0 ? a.clOrdId = o : a.ordId = e;\n const c = this.omit(i, [\"clOrdId\", \"clientOrderId\"]), u = await this.privatePostTradeCancelOrder(this.extend(a, c)), f = this.safeValue(u, \"data\", []), h = this.safeValue(f, 0);\n return this.parseOrder(h, r);\n }\n parseIds(e) {\n return e !== void 0 && typeof e == \"string\" ? e.split(\",\") : e;\n }\n async cancelOrders(e, t = void 0, i = {}) {\n if (t === void 0)\n throw new g(\"cancelOrders() requires a symbol argument\").exchange(this.id);\n await this.loadMarkets();\n const s = this.market(t), n = [], r = this.safeValue(this.options, \"cancelOrders\", {}), a = this.safeString(r, \"method\", \"privatePostTradeCancelBatchOrders\");\n let o = this.safeString(i, \"method\", a);\n const c = this.parseIds(this.safeValue2(i, \"clOrdId\", \"clientOrderId\")), u = this.parseIds(this.safeValue(i, \"algoId\")), f = this.safeValue2(i, \"stop\", \"trigger\"), h = this.safeBool(i, \"trailing\", !1);\n if ((f || h) && (o = \"privatePostTradeCancelAlgos\"), c === void 0) {\n if (e = this.parseIds(e), u !== void 0)\n for (let m = 0; m < u.length; m++)\n n.push({\n algoId: u[m],\n instId: s.id\n });\n for (let m = 0; m < e.length; m++)\n h || f ? n.push({\n algoId: e[m],\n instId: s.id\n }) : n.push({\n ordId: e[m],\n instId: s.id\n });\n } else\n for (let m = 0; m < c.length; m++)\n n.push({\n instId: s.id,\n clOrdId: c[m]\n });\n let l;\n o === \"privatePostTradeCancelAlgos\" ? l = await this.privatePostTradeCancelAlgos(n) : l = await this.privatePostTradeCancelBatchOrders(n);\n const p = this.safeValue(l, \"data\", []);\n return this.parseOrders(p, s, void 0, void 0, i);\n }\n parseOrderStatus(e) {\n const t = {\n canceled: \"canceled\",\n order_failed: \"canceled\",\n live: \"open\",\n partially_filled: \"open\",\n filled: \"closed\",\n effective: \"closed\"\n };\n return this.safeString(t, e, e);\n }\n parseOrder(e, t = void 0) {\n const i = this.safeString(e, \"sCode\");\n if (i !== void 0 && i !== \"0\")\n return this.safeOrder({\n id: this.safeString(e, \"ordId\"),\n clientOrderId: this.safeString(e, \"clOrdId\"),\n status: \"rejected\",\n info: e\n });\n const s = this.safeString2(e, \"algoId\", \"ordId\"), n = this.safeInteger(e, \"cTime\"), r = this.safeInteger(e, \"uTime\"), a = this.safeInteger(e, \"fillTime\"), o = this.safeString(e, \"side\");\n let c = this.safeString(e, \"ordType\"), u, f;\n c === \"post_only\" ? (u = !0, c = \"limit\") : c === \"fok\" ? (f = \"FOK\", c = \"limit\") : c === \"ioc\" && (f = \"IOC\", c = \"limit\");\n const h = this.safeString(e, \"instId\");\n t = this.safeMarket(h, t);\n const l = this.safeSymbol(h, t, \"-\"), p = this.safeString(e, \"accFillSz\"), m = this.safeString2(e, \"px\", \"ordPx\"), y = this.safeString(e, \"avgPx\"), w = this.parseOrderStatus(this.safeString(e, \"state\")), S = this.safeString(e, \"fee\");\n let b, T;\n const x = this.safeString(this.options, \"tgtCcy\", \"base_ccy\"), v = this.safeString(e, \"tgtCcy\", x), _ = this.safeString(e, \"instType\");\n o === \"buy\" && c === \"market\" && _ === \"SPOT\" && v === \"quote_ccy\" ? T = this.safeString(e, \"sz\") : b = this.safeString(e, \"sz\");\n let V;\n if (S !== void 0) {\n const $ = P.stringNeg(S), te = this.safeString(e, \"feeCcy\"), E = this.safeCurrencyCode(te);\n V = {\n cost: this.parseNumber($),\n currency: E\n };\n }\n let j = this.safeString(e, \"clOrdId\");\n j !== void 0 && j.length < 1 && (j = void 0);\n const G = this.safeNumber2(e, \"slTriggerPx\", \"slOrdPx\"), W = this.safeNumber2(e, \"tpTriggerPx\", \"tpOrdPx\"), B = this.safeNumberN(e, [\"triggerPx\", \"moveTriggerPx\"]), Q = this.safeString(e, \"reduceOnly\");\n let se = !1;\n return se !== void 0 && (se = Q === \"true\"), this.safeOrder({\n info: e,\n id: s,\n clientOrderId: j,\n timestamp: n,\n datetime: this.iso8601(n),\n lastTradeTimestamp: a,\n lastUpdateTimestamp: r,\n symbol: l,\n type: c,\n timeInForce: f,\n postOnly: u,\n side: o,\n price: m,\n stopLossPrice: G,\n takeProfitPrice: W,\n stopPrice: B,\n triggerPrice: B,\n average: y,\n cost: T,\n amount: b,\n filled: p,\n remaining: void 0,\n status: w,\n fee: V,\n trades: void 0,\n reduceOnly: se\n }, t);\n }\n async fetchOrder(e, t = void 0, i = {}) {\n if (t === void 0)\n throw new g(\"fetchOrder() requires a symbol argument\").exchange(this.id);\n await this.loadMarkets();\n const s = this.market(t), n = {\n instId: s.id\n // 'clOrdId': 'abcdef12345', // optional, [a-z0-9]{1,32}\n // 'ordId': id,\n // 'instType': // spot, swap, futures, margin\n }, r = this.safeString2(i, \"clOrdId\", \"clientOrderId\"), a = this.safeValue(this.options, \"fetchOrder\", {}), o = this.safeString(a, \"method\", \"privateGetTradeOrder\");\n let c = this.safeString(i, \"method\", o);\n this.safeValue2(i, \"stop\", \"trigger\") ? (c = \"privateGetTradeOrderAlgo\", r !== void 0 ? n.algoClOrdId = r : n.algoId = e) : r !== void 0 ? n.clOrdId = r : n.ordId = e;\n const f = this.omit(i, [\"method\", \"clOrdId\", \"clientOrderId\", \"stop\", \"trigger\"]);\n let h;\n c === \"privateGetTradeOrderAlgo\" ? h = await this.privateGetTradeOrderAlgo(this.extend(n, f)) : h = await this.privateGetTradeOrder(this.extend(n, f));\n const l = this.safeValue(h, \"data\", []), p = this.safeValue(l, 0);\n return this.parseOrder(p, s);\n }\n async fetchOpenOrders(e = void 0, t = void 0, i = void 0, s = {}) {\n await this.loadMarkets();\n let n = !1;\n if ([n, s] = this.handleOptionAndParams(s, \"fetchOpenOrders\", \"paginate\"), n)\n return await this.fetchPaginatedCallDynamic(\"fetchOpenOrders\", e, t, i, s);\n const r = {\n // 'instType': 'SPOT', // SPOT, MARGIN, SWAP, FUTURES, OPTION\n // 'uly': currency['id'],\n // 'instId': market['id'],\n // 'ordType': 'limit', // market, limit, post_only, fok, ioc, comma-separated, stop orders: conditional, oco, trigger, move_order_stop, iceberg, or twap\n // 'state': 'live', // live, partially_filled\n // 'after': orderId,\n // 'before': orderId,\n // 'limit': limit, // default 100, max 100\n };\n let a;\n e !== void 0 && (a = this.market(e), r.instId = a.id), i !== void 0 && (r.limit = i);\n const o = this.safeValue(this.options, \"fetchOpenOrders\", {}), c = this.safeValue(this.options, \"algoOrderTypes\", {}), u = this.safeString(o, \"method\", \"privateGetTradeOrdersPending\");\n let f = this.safeString(s, \"method\", u);\n const h = this.safeString(s, \"ordType\"), l = this.safeValue2(s, \"stop\", \"trigger\"), p = this.safeBool(s, \"trailing\", !1);\n (p || l || h in c) && (f = \"privateGetTradeOrdersAlgoPending\"), p ? r.ordType = \"move_order_stop\" : l && h === void 0 && (r.ordType = \"trigger\");\n const m = this.omit(s, [\"method\", \"stop\", \"trigger\", \"trailing\"]);\n let y;\n f === \"privateGetTradeOrdersAlgoPending\" ? y = await this.privateGetTradeOrdersAlgoPending(this.extend(r, m)) : y = await this.privateGetTradeOrdersPending(this.extend(r, m));\n const w = this.safeValue(y, \"data\", []);\n return this.parseOrders(w, a, t, i);\n }\n async fetchCanceledOrders(e = void 0, t = void 0, i = void 0, s = {}) {\n await this.loadMarkets();\n const n = {\n // 'instType': type.toUpperCase (), // SPOT, MARGIN, SWAP, FUTURES, OPTION\n // 'uly': currency['id'],\n // 'instId': market['id'],\n // 'ordType': 'limit', // market, limit, post_only, fok, ioc, comma-separated stop orders: conditional, oco, trigger, move_order_stop, iceberg, or twap\n // 'state': 'canceled', // filled, canceled\n // 'after': orderId,\n // 'before': orderId,\n // 'limit': limit, // default 100, max 100\n // 'algoId': \"'433845797218942976'\", // Algo order\n };\n let r;\n e !== void 0 && (r = this.market(e), n.instId = r.id);\n let a, o;\n [a, o] = this.handleMarketTypeAndParams(\"fetchCanceledOrders\", r, s), n.instType = this.convertToInstrumentType(a), i !== void 0 && (n.limit = i), n.state = \"canceled\";\n const c = this.safeValue(this.options, \"fetchCanceledOrders\", {}), u = this.safeValue(this.options, \"algoOrderTypes\", {}), f = this.safeString(c, \"method\", \"privateGetTradeOrdersHistory\");\n let h = this.safeString(s, \"method\", f);\n const l = this.safeString(s, \"ordType\"), p = this.safeValue2(s, \"stop\", \"trigger\");\n if (this.safeBool(s, \"trailing\", !1))\n h = \"privateGetTradeOrdersAlgoHistory\", n.ordType = \"move_order_stop\";\n else if (p || l in u) {\n h = \"privateGetTradeOrdersAlgoHistory\";\n const b = this.safeString(s, \"algoId\");\n if (b !== void 0 && (n.algoId = b, s = this.omit(s, \"algoId\")), p && l === void 0)\n throw new g('fetchCanceledOrders() requires an \"ordType\" string parameter, \"conditional\", \"oco\", \"trigger\", \"move_order_stop\", \"iceberg\", or \"twap\"').exchange(this.id);\n } else {\n t !== void 0 && (n.begin = t);\n const b = this.safeInteger2(o, \"till\", \"until\");\n b !== void 0 && (n.end = b, o = this.omit(o, [\"until\", \"till\"]));\n }\n const y = this.omit(o, [\"method\", \"stop\", \"trigger\", \"trailing\"]);\n let w;\n h === \"privateGetTradeOrdersAlgoHistory\" ? w = await this.privateGetTradeOrdersAlgoHistory(this.extend(n, y)) : w = await this.privateGetTradeOrdersHistory(this.extend(n, y));\n const S = this.safeValue(w, \"data\", []);\n return this.parseOrders(S, r, t, i);\n }\n async fetchClosedOrders(e = void 0, t = void 0, i = void 0, s = {}) {\n await this.loadMarkets();\n let n = !1;\n if ([n, s] = this.handleOptionAndParams(s, \"fetchClosedOrders\", \"paginate\"), n)\n return await this.fetchPaginatedCallDynamic(\"fetchClosedOrders\", e, t, i, s);\n const r = {\n // 'instType': type.toUpperCase (), // SPOT, MARGIN, SWAP, FUTURES, OPTION\n // 'uly': currency['id'],\n // 'instId': market['id'],\n // 'ordType': 'limit', // market, limit, post_only, fok, ioc, comma-separated stop orders: conditional, oco, trigger, move_order_stop, iceberg, or twap\n // 'state': 'filled', // filled, effective\n // 'after': orderId,\n // 'before': orderId,\n // 'limit': limit, // default 100, max 100\n // 'algoId': \"'433845797218942976'\", // Algo order\n };\n let a;\n e !== void 0 && (a = this.market(e), r.instId = a.id);\n let o, c;\n [o, c] = this.handleMarketTypeAndParams(\"fetchClosedOrders\", a, s), r.instType = this.convertToInstrumentType(o), i !== void 0 && (r.limit = i);\n const u = this.safeDict(this.options, \"fetchClosedOrders\", {}), f = this.safeDict(this.options, \"algoOrderTypes\", {}), h = this.safeString(u, \"method\", \"privateGetTradeOrdersHistory\");\n let l = this.safeString(s, \"method\", h);\n const p = this.safeString(s, \"ordType\"), m = this.safeBool2(s, \"stop\", \"trigger\"), y = this.safeBool(s, \"trailing\", !1);\n if ((y || m || p in f) && (l = \"privateGetTradeOrdersAlgoHistory\", r.state = \"effective\"), y)\n r.ordType = \"move_order_stop\";\n else if (m)\n p === void 0 && (r.ordType = \"trigger\");\n else {\n t !== void 0 && (r.begin = t);\n const T = this.safeInteger2(c, \"till\", \"until\");\n T !== void 0 && (r.end = T, c = this.omit(c, [\"until\", \"till\"])), r.state = \"filled\";\n }\n const w = this.omit(c, [\"method\", \"stop\", \"trigger\", \"trailing\"]);\n let S;\n l === \"privateGetTradeOrdersAlgoHistory\" ? S = await this.privateGetTradeOrdersAlgoHistory(this.extend(r, w)) : l === \"privateGetTradeOrdersHistoryArchive\" ? S = await this.privateGetTradeOrdersHistoryArchive(this.extend(r, w)) : S = await this.privateGetTradeOrdersHistory(this.extend(r, w));\n const b = this.safeValue(S, \"data\", []);\n return this.parseOrders(b, a, t, i);\n }\n async fetchMyTrades(e = void 0, t = void 0, i = void 0, s = {}) {\n await this.loadMarkets();\n let n = !1;\n if ([n, s] = this.handleOptionAndParams(s, \"fetchMyTrades\", \"paginate\"), n)\n return await this.fetchPaginatedCallDynamic(\"fetchMyTrades\", e, t, i, s);\n let r = {\n // 'instType': 'SPOT', // SPOT, MARGIN, SWAP, FUTURES, OPTION\n // 'uly': currency['id'],\n // 'instId': market['id'],\n // 'ordId': orderId,\n // 'after': billId,\n // 'before': billId,\n // 'limit': limit, // default 100, max 100\n }, a;\n e !== void 0 && (a = this.market(e), r.instId = a.id), t !== void 0 && (r.begin = t), [r, s] = this.handleUntilOption(\"end\", r, s);\n const [o, c] = this.handleMarketTypeAndParams(\"fetchMyTrades\", a, s);\n r.instType = this.convertToInstrumentType(o), i !== void 0 && t === void 0 && (r.limit = i);\n const u = await this.privateGetTradeFillsHistory(this.extend(r, c)), f = this.safeValue(u, \"data\", []);\n return this.parseTrades(f, a, t, i, c);\n }\n async fetchOrderTrades(e, t = void 0, i = void 0, s = void 0, n = {}) {\n const r = {\n // 'instrument_id': market['id'],\n ordId: e\n // 'after': '1', // return the page after the specified page number\n // 'before': '1', // return the page before the specified page number\n // 'limit': limit, // optional, number of results per request, default = maximum = 100\n };\n return await this.fetchMyTrades(t, i, s, this.extend(r, n));\n }\n async fetchLedger(e = void 0, t = void 0, i = void 0, s = {}) {\n await this.loadMarkets();\n let n = !1;\n if ([n, s] = this.handleOptionAndParams(s, \"fetchLedger\", \"paginate\"), n)\n return await this.fetchPaginatedCallDynamic(\"fetchLedger\", e, t, i, s);\n const r = this.safeValue(this.options, \"fetchLedger\", {});\n let a = this.safeString(r, \"method\");\n a = this.safeString(s, \"method\", a), s = this.omit(s, \"method\");\n let o = {\n // 'instType': undefined, // 'SPOT', 'MARGIN', 'SWAP', 'FUTURES\", 'OPTION'\n // 'ccy': undefined, // currency['id'],\n // 'mgnMode': undefined, // 'isolated', 'cross'\n // 'ctType': undefined, // 'linear', 'inverse', only applicable to FUTURES/SWAP\n // 'type': varies depending the 'method' endpoint :\n // - https://www.okx.com/docs-v5/en/#rest-api-account-get-bills-details-last-7-days\n // - https://www.okx.com/docs-v5/en/#rest-api-funding-asset-bills-details\n // - https://www.okx.com/docs-v5/en/#rest-api-account-get-bills-details-last-3-months\n // 'after': 'id', // return records earlier than the requested bill id\n // 'before': 'id', // return records newer than the requested bill id\n // 'limit': 100, // default 100, max 100\n }, c;\n [c, s] = this.handleMarginModeAndParams(\"fetchLedger\", s), c === void 0 && (c = this.safeString(s, \"mgnMode\")), a !== \"privateGetAssetBills\" && c !== void 0 && (o.mgnMode = c);\n const [u, f] = this.handleMarketTypeAndParams(\"fetchLedger\", void 0, s);\n u !== void 0 && (o.instType = this.convertToInstrumentType(u)), i !== void 0 && (o.limit = i);\n let h;\n e !== void 0 && (h = this.currency(e), o.ccy = h.id), [o, s] = this.handleUntilOption(\"end\", o, s);\n let l;\n a === \"privateGetAccountBillsArchive\" ? l = await this.privateGetAccountBillsArchive(this.extend(o, f)) : a === \"privateGetAssetBills\" ? l = await this.privateGetAssetBills(this.extend(o, f)) : l = await this.privateGetAccountBills(this.extend(o, f));\n const p = this.safeValue(l, \"data\", []);\n return this.parseLedger(p, h, t, i);\n }\n parseLedgerEntryType(e) {\n const t = {\n 1: \"transfer\",\n 2: \"trade\",\n 3: \"trade\",\n 4: \"rebate\",\n 5: \"trade\",\n 6: \"transfer\",\n 7: \"trade\",\n 8: \"fee\",\n 9: \"trade\",\n 10: \"trade\",\n 11: \"trade\"\n // system token conversion\n };\n return this.safeString(t, e, e);\n }\n parseLedgerEntry(e, t = void 0) {\n const i = this.safeString(e, \"billId\"), s = void 0, n = this.safeString(e, \"ordId\"), r = void 0, a = this.parseLedgerEntryType(this.safeString(e, \"type\")), o = this.safeCurrencyCode(this.safeString(e, \"ccy\"), t), c = this.safeString(e, \"balChg\"), u = this.parseNumber(c), f = this.safeInteger(e, \"ts\"), h = this.safeString(e, \"fee\");\n let l;\n h !== void 0 && (l = {\n cost: this.parseNumber(P.stringNeg(h)),\n currency: o\n });\n const p = void 0, m = this.safeString(e, \"bal\"), y = this.parseNumber(m), w = \"ok\", S = this.safeString(e, \"instId\"), b = this.safeSymbol(S, void 0, \"-\");\n return {\n id: i,\n info: e,\n timestamp: f,\n datetime: this.iso8601(f),\n account: s,\n referenceId: n,\n referenceAccount: r,\n type: a,\n currency: o,\n symbol: b,\n amount: u,\n before: p,\n after: y,\n status: w,\n fee: l\n };\n }\n parseDepositAddress(e, t = void 0) {\n const i = this.safeString(e, \"addr\");\n let s = this.safeStringN(e, [\"tag\", \"pmtId\", \"memo\"]);\n if (s === void 0) {\n const h = this.safeValue(e, \"addrEx\", {});\n s = this.safeString(h, \"comment\");\n }\n const n = this.safeString(e, \"ccy\");\n t = this.safeCurrency(n, t);\n const r = t.code, a = this.safeString(e, \"chain\"), o = this.safeValue(t, \"networks\", {}), c = this.indexBy(o, \"id\"), u = this.safeValue(c, a), f = this.safeString(u, \"network\");\n return this.checkAddress(i), {\n currency: r,\n address: i,\n tag: s,\n network: f,\n info: e\n };\n }\n async fetchDepositAddressesByNetwork(e, t = {}) {\n await this.loadMarkets();\n const i = this.currency(e), s = {\n ccy: i.id\n }, n = await this.privateGetAssetDepositAddress(this.extend(s, t)), r = this.safeValue(n, \"data\", []), a = this.filterBy(r, \"selected\", !0), o = this.parseDepositAddresses(a, [i.code], !1);\n return this.indexBy(o, \"network\");\n }\n async fetchDepositAddress(e, t = {}) {\n const i = this.safeString(t, \"network\"), s = this.safeValue(this.options, \"networks\", {});\n t = this.omit(t, \"network\");\n const n = await this.fetchDepositAddressesByNetwork(e, t);\n let r;\n if (i === void 0) {\n if (r = this.safeValue(n, e), r === void 0) {\n const a = this.safeString(s, e, e);\n if (r = this.safeValue(n, a), r === void 0) {\n const o = this.safeString(this.options, \"defaultNetwork\", \"ERC20\");\n if (r = this.safeValue(n, o), r === void 0) {\n const c = Object.values(n);\n if (r = this.safeValue(c, 0), r === void 0)\n throw new It(e, i).exchange(this.id);\n }\n }\n }\n return r;\n }\n if (r = this.safeValue(n, i), r === void 0)\n throw new It(e, i).exchange(this.id);\n return r;\n }\n async withdraw(e, t, i, s = void 0, n = {}) {\n [s, n] = this.handleWithdrawTagAndParams(s, n), this.checkAddress(i), await this.loadMarkets();\n const r = this.currency(e);\n s !== void 0 && s.length > 0 && (i = i + \":\" + s);\n const a = {\n ccy: r.id,\n toAddr: i,\n dest: \"4\"\n // 2 = OKCoin International, 3 = OKX 4 = others\n };\n let o = this.safeString(n, \"network\");\n if (o !== void 0) {\n const m = this.safeValue(this.options, \"networks\", {});\n o = this.safeString(m, o.toUpperCase(), o), a.chain = r.id + \"-\" + o, n = this.omit(n, \"network\");\n }\n const c = this.currencyToPrecision(e, t, o);\n a.amt = this.numberToString(c);\n let u = this.safeString(n, \"fee\");\n if (u === void 0) {\n const m = await this.fetchCurrencies();\n this.currencies = this.deepExtend(this.currencies, m);\n const y = this.safeValue(r.networks, this.networkIdToCode(o), {});\n if (u = this.safeString(y, \"fee\"), u === void 0)\n throw new g('withdraw() requires a \"fee\" string parameter, network transaction fee must be ≥ 0. Withdrawals to OKCoin or OKX are fee-free, please set \"0\". Withdrawing to external digital asset address requires network transaction fee.').exchange(this.id);\n }\n if (a.fee = this.numberToString(u), \"password\" in n)\n a.pwd = n.password;\n else if (\"pwd\" in n)\n a.pwd = n.pwd;\n else {\n const m = this.safeValue(this.options, \"withdraw\", {}), y = this.safeString2(m, \"password\", \"pwd\");\n y !== void 0 && (a.pwd = y);\n }\n const f = this.omit(n, [\"fee\", \"password\", \"pwd\"]);\n if (!(\"pwd\" in a))\n throw new g(\"withdraw() requires a password parameter or a pwd parameter, it must be the funding password, not the API passphrase\").exchange(this.id);\n const h = await this.privatePostAssetWithdrawal(this.extend(a, f)), l = this.safeValue(h, \"data\", []), p = this.safeValue(l, 0);\n return this.parseTransaction(p, r);\n }\n async fetchDeposits(e = void 0, t = void 0, i = void 0, s = {}) {\n await this.loadMarkets();\n let n = !1;\n if ([n, s] = this.handleOptionAndParams(s, \"fetchDeposits\", \"paginate\"), n)\n return await this.fetchPaginatedCallDynamic(\"fetchDeposits\", e, t, i, s);\n let r = {\n // 'ccy': currency['id'],\n // 'state': 2, // 0 waiting for confirmation, 1 deposit credited, 2 deposit successful\n // 'after': since,\n // 'before' this.milliseconds (),\n // 'limit': limit, // default 100, max 100\n }, a;\n e !== void 0 && (a = this.currency(e), r.ccy = a.id), t !== void 0 && (r.before = Math.max(t - 1, 0)), i !== void 0 && (r.limit = i), [r, s] = this.handleUntilOption(\"after\", r, s);\n const o = await this.privateGetAssetDepositHistory(this.extend(r, s)), c = this.safeValue(o, \"data\", []);\n return this.parseTransactions(c, a, t, i, s);\n }\n async fetchDeposit(e, t = void 0, i = {}) {\n await this.loadMarkets();\n const s = {\n depId: e\n };\n let n;\n t !== void 0 && (n = this.currency(t), s.ccy = n.id);\n const r = await this.privateGetAssetDepositHistory(this.extend(s, i)), a = this.safeValue(r, \"data\"), o = this.safeValue(a, 0, {});\n return this.parseTransaction(o, n);\n }\n async fetchWithdrawals(e = void 0, t = void 0, i = void 0, s = {}) {\n await this.loadMarkets();\n let n = !1;\n if ([n, s] = this.handleOptionAndParams(s, \"fetchWithdrawals\", \"paginate\"), n)\n return await this.fetchPaginatedCallDynamic(\"fetchWithdrawals\", e, t, i, s);\n let r = {\n // 'ccy': currency['id'],\n // 'state': 2, // -3: pending cancel, -2 canceled, -1 failed, 0, pending, 1 sending, 2 sent, 3 awaiting email verification, 4 awaiting manual verification, 5 awaiting identity verification\n // 'after': since,\n // 'before': this.milliseconds (),\n // 'limit': limit, // default 100, max 100\n }, a;\n e !== void 0 && (a = this.currency(e), r.ccy = a.id), t !== void 0 && (r.before = Math.max(t - 1, 0)), i !== void 0 && (r.limit = i), [r, s] = this.handleUntilOption(\"after\", r, s);\n const o = await this.privateGetAssetWithdrawalHistory(this.extend(r, s)), c = this.safeValue(o, \"data\", []);\n return this.parseTransactions(c, a, t, i, s);\n }\n async fetchWithdrawal(e, t = void 0, i = {}) {\n await this.loadMarkets();\n const s = {\n wdId: e\n };\n let n;\n t !== void 0 && (n = this.currency(t), s.ccy = n.id);\n const r = await this.privateGetAssetWithdrawalHistory(this.extend(s, i)), a = this.safeValue(r, \"data\"), o = this.safeValue(a, 0, {});\n return this.parseTransaction(o);\n }\n parseTransactionStatus(e) {\n const t = {\n \"-3\": \"pending\",\n \"-2\": \"canceled\",\n \"-1\": \"failed\",\n 0: \"pending\",\n 1: \"pending\",\n 2: \"ok\",\n 3: \"pending\",\n 4: \"pending\",\n 5: \"pending\"\n };\n return this.safeString(t, e, e);\n }\n parseTransaction(e, t = void 0) {\n let i, s;\n const n = this.safeString(e, \"wdId\"), r = this.safeString(e, \"from\"), a = this.safeString(e, \"to\"), u = this.safeString(e, \"chain\").split(\"-\").slice(1).join(\"-\"), f = this.safeNetwork(u), h = a;\n let l = this.safeString2(e, \"tag\", \"memo\");\n l = this.safeString2(e, \"pmtId\", l), n !== void 0 ? (i = \"withdrawal\", s = n) : (s = this.safeString(e, \"depId\"), i = \"deposit\");\n const p = this.safeString(e, \"ccy\"), m = this.safeCurrencyCode(p), y = this.safeNumber(e, \"amt\"), w = this.parseTransactionStatus(this.safeString(e, \"state\")), S = this.safeString(e, \"txId\"), b = this.safeInteger(e, \"ts\");\n let T;\n return i === \"deposit\" ? T = 0 : T = this.safeNumber(e, \"fee\"), {\n info: e,\n id: s,\n currency: m,\n amount: y,\n network: f,\n addressFrom: r,\n addressTo: a,\n address: h,\n tagFrom: void 0,\n tagTo: l,\n tag: l,\n status: w,\n type: i,\n updated: void 0,\n txid: S,\n timestamp: b,\n datetime: this.iso8601(b),\n internal: void 0,\n comment: void 0,\n fee: {\n currency: m,\n cost: T\n }\n };\n }\n async fetchPosition(e, t = {}) {\n await this.loadMarkets();\n const i = this.market(e), [s, n] = this.handleMarketTypeAndParams(\"fetchPosition\", i, t), r = {\n // instType String No Instrument type, MARGIN, SWAP, FUTURES, OPTION\n instId: i.id\n // posId String No Single position ID or multiple position IDs (no more than 20) separated with comma\n };\n s !== void 0 && (r.instType = this.convertToInstrumentType(s));\n const a = await this.privateGetAccountPositions(this.extend(r, n)), o = this.safeValue(a, \"data\", []), c = this.safeValue(o, 0);\n if (c !== void 0)\n return this.parsePosition(c, i);\n }\n async fetchPositions(e = void 0, t = {}) {\n await this.loadMarkets();\n const i = {\n // 'instType': 'MARGIN', // optional string, MARGIN, SWAP, FUTURES, OPTION\n // 'instId': market['id'], // optional string, e.g. 'BTC-USD-190927-5000-C'\n // 'posId': '307173036051017730', // optional string, Single or multiple position IDs (no more than 20) separated with commas\n };\n if (e !== void 0) {\n const c = [];\n for (let f = 0; f < e.length; f++) {\n const h = e[f], l = this.market(h);\n c.push(l.id);\n }\n c.length > 0 && (i.instId = c.join(\",\"));\n }\n const s = this.safeValue(this.options, \"fetchPositions\", {}), n = this.safeString(s, \"method\", \"privateGetAccountPositions\");\n let r;\n n === \"privateGetAccountPositionsHistory\" ? r = await this.privateGetAccountPositionsHistory(this.extend(i, t)) : r = await this.privateGetAccountPositions(this.extend(i, t));\n const a = this.safeValue(r, \"data\", []), o = [];\n for (let c = 0; c < a.length; c++)\n o.push(this.parsePosition(a[c]));\n return this.filterByArrayPositions(o, \"symbol\", e, !1);\n }\n async fetchPositionsForSymbol(e, t = {}) {\n return await this.fetchPositions([e], t);\n }\n parsePosition(e, t = void 0) {\n const i = this.safeString(e, \"instId\");\n t = this.safeMarket(i, t);\n const s = t.symbol, n = this.safeString(e, \"pos\"), r = P.stringAbs(n);\n let a = this.safeString(e, \"posSide\");\n const o = a !== \"net\", c = this.parseNumber(r);\n if (t.margin) {\n if (a === \"net\") {\n const te = this.safeString(e, \"posCcy\"), E = this.safeCurrencyCode(te);\n E !== void 0 && (a = t.base === E ? \"long\" : \"short\");\n }\n a === void 0 && (a = this.safeString(e, \"direction\"));\n } else\n n !== void 0 && a === \"net\" && (P.stringGt(n, \"0\") ? a = \"long\" : P.stringLt(n, \"0\") ? a = \"short\" : a = void 0);\n const u = this.safeNumber(t, \"contractSize\"), f = this.numberToString(u), h = this.safeString(e, \"markPx\");\n let l = this.safeString(e, \"notionalUsd\");\n t.inverse && (l = P.stringDiv(P.stringMul(r, f), h));\n const p = this.parseNumber(l), m = this.safeString(e, \"mgnMode\");\n let y;\n const w = this.safeString(e, \"avgPx\"), S = this.safeString(e, \"upl\"), b = this.safeString(e, \"lever\");\n let T, x;\n m === \"cross\" ? (y = this.safeString(e, \"imr\"), x = P.stringAdd(y, S)) : m === \"isolated\" && (T = P.stringDiv(\"1\", b), x = this.safeString(e, \"margin\"));\n const v = this.safeString(e, \"mmr\"), _ = this.parseNumber(v), V = P.stringDiv(v, l);\n T === void 0 ? T = this.parseNumber(P.stringDiv(y, l, 4)) : y === void 0 && (y = P.stringMul(T, l));\n const j = \"0.00005\", G = this.parseNumber(P.stringDiv(P.stringAdd(V, j), \"1\", 4)), W = this.safeNumber(e, \"liqPx\"), B = this.safeString(e, \"uplRatio\"), Q = this.parseNumber(P.stringMul(B, \"100\")), se = this.safeInteger(e, \"uTime\"), $ = this.parseNumber(P.stringDiv(v, x, 4));\n return this.safePosition({\n info: e,\n id: void 0,\n symbol: s,\n notional: p,\n marginMode: m,\n liquidationPrice: W,\n entryPrice: this.parseNumber(w),\n unrealizedPnl: this.parseNumber(S),\n percentage: Q,\n contracts: c,\n contractSize: u,\n markPrice: this.parseNumber(h),\n lastPrice: void 0,\n side: a,\n hedged: o,\n timestamp: se,\n datetime: this.iso8601(se),\n lastUpdateTimestamp: void 0,\n maintenanceMargin: _,\n maintenanceMarginPercentage: G,\n collateral: this.parseNumber(x),\n initialMargin: this.parseNumber(y),\n initialMarginPercentage: this.parseNumber(T),\n leverage: this.parseNumber(b),\n marginRatio: $,\n stopLossPrice: void 0,\n takeProfitPrice: void 0\n });\n }\n // https://www.okx.com/docs-v5/en/#sub-account-rest-api-get-sub-account-trading-balance\n // https://www.okx.com/docs-v5/en/#sub-account-rest-api-get-sub-account-funding-balance\n async fetchSubAccountBalances(e, t = {}) {\n await this.loadMarkets();\n const i = await this.privateGetAssetSubaccountBalances({\n subAcct: e\n }), s = this.parseFundingBalance(i), n = await this.privateGetAccountSubaccountBalances({\n subAcct: e\n }), r = this.parseFundingBalance(n);\n return {\n trading: s,\n funding: r\n };\n }\n // https://www.okx.com/docs-v5/en/#sub-account-rest-api-get-sub-account-list\n async getSubAccounts() {\n await this.loadMarkets();\n const e = await this.privateGetUsersSubaccountList();\n return this.safeValue(e, \"data\", []).map((i) => ({\n uid: i.subAcct\n }));\n }\n // https://www.okx.com/docs-v5/en/#funding-account-rest-api-funds-transfer\n async subAccountTransfer(e, t, i, s, n, r, a = {}) {\n await this.loadMarkets();\n const o = this.currency(e), c = this.safeValue(this.options, \"accountsByType\", {}), u = this.safeString(c, i, i), f = this.safeString(c, s, s), h = {\n ccy: o.id,\n amt: this.currencyToPrecision(e, t),\n type: \"0\",\n from: u,\n to: f\n // beneficiary account, 6: Funding account, 18: Trading account\n // 'subAcct': 'sub-account-name', // optional, only required when type is 1, 2 or 4\n // 'loanTrans': false, // Whether or not borrowed coins can be transferred out under Multi-currency margin and Portfolio margin. The default is false\n // 'clientId': 'client-supplied id', // A combination of case-sensitive alphanumerics, all numbers, or all letters of up to 32 characters\n // 'omitPosRisk': false, // Ignore position risk. Default is false. Applicable to Portfolio margin\n };\n n === \"master\" ? (h.type = \"1\", h.subAcct = r) : r === \"master\" && (h.type = \"2\", h.subAcct = n);\n const l = await this.privatePostAssetTransfer(this.extend(h, a)), p = this.safeValue(l, \"data\", []), m = this.safeValue(p, 0, {});\n return this.parseTransfer(m, o);\n }\n async transfer(e, t, i, s, n = {}) {\n await this.loadMarkets();\n const r = this.currency(e), a = this.safeValue(this.options, \"accountsByType\", {}), o = this.safeString(a, i, i), c = this.safeString(a, s, s), u = {\n ccy: r.id,\n amt: this.currencyToPrecision(e, t),\n type: \"0\",\n from: o,\n to: c\n // beneficiary account, 6: Funding account, 18: Trading account\n // 'subAcct': 'sub-account-name', // optional, only required when type is 1, 2 or 4\n // 'loanTrans': false, // Whether or not borrowed coins can be transferred out under Multi-currency margin and Portfolio margin. The default is false\n // 'clientId': 'client-supplied id', // A combination of case-sensitive alphanumerics, all numbers, or all letters of up to 32 characters\n // 'omitPosRisk': false, // Ignore position risk. Default is false. Applicable to Portfolio margin\n };\n o === \"master\" ? (u.type = \"1\", u.subAcct = c, u.from = this.safeString(n, \"from\", \"6\"), u.to = this.safeString(n, \"to\", \"6\")) : c === \"master\" && (u.type = \"2\", u.subAcct = o, u.from = this.safeString(n, \"from\", \"6\"), u.to = this.safeString(n, \"to\", \"6\"));\n const f = await this.privatePostAssetTransfer(this.extend(u, n)), h = this.safeValue(f, \"data\", []), l = this.safeValue(h, 0, {});\n return this.parseTransfer(l, r);\n }\n parseTransfer(e, t = void 0) {\n const i = this.safeString2(e, \"transId\", \"billId\"), s = this.safeString(e, \"ccy\"), n = this.safeCurrencyCode(s, t);\n let r = this.safeNumber(e, \"amt\");\n const a = this.safeString(e, \"from\"), o = this.safeString(e, \"to\"), c = this.safeValue(this.options, \"accountsById\", {}), u = this.safeInteger(e, \"ts\", this.milliseconds()), f = this.safeString(e, \"sz\");\n return f !== void 0 && (r = this.parseNumber(P.stringAbs(f))), {\n info: e,\n id: i,\n timestamp: u,\n datetime: this.iso8601(u),\n currency: n,\n amount: r,\n fromAccount: this.safeString(c, a),\n toAccount: this.safeString(c, o),\n status: this.parseTransferStatus(this.safeString(e, \"state\"))\n };\n }\n parseTransferStatus(e) {\n const t = {\n success: \"ok\"\n };\n return this.safeString(t, e, e);\n }\n async fetchTransfer(e, t = void 0, i = {}) {\n await this.loadMarkets();\n const s = {\n transId: e\n // 'type': 0, // default is 0 transfer within account, 1 master to sub, 2 sub to master\n }, n = await this.privateGetAssetTransferState(this.extend(s, i)), r = this.safeValue(n, \"data\", []), a = this.safeValue(r, 0);\n return this.parseTransfer(a);\n }\n async fetchTransfers(e = void 0, t = void 0, i = void 0, s = {}) {\n await this.loadMarkets();\n let n;\n const r = {\n type: \"1\"\n // https://www.okx.com/docs-v5/en/#rest-api-account-get-bills-details-last-3-months\n };\n e !== void 0 && (n = this.currency(e), r.ccy = n.id), t !== void 0 && (r.begin = t), i !== void 0 && (r.limit = i);\n const a = await this.privateGetAccountBillsArchive(this.extend(r, s)), o = this.safeValue(a, \"data\", []);\n return this.parseTransfers(o, n, t, i, s);\n }\n async sign(e, t = \"public\", i = \"GET\", s = {}, n = void 0, r = void 0) {\n const a = Array.isArray(s), o = \"/api/\" + this.version + \"/\" + this.implodeParams(e, s), c = this.omit(s, this.extractParams(e));\n let u = this.implodeHostname(this.urls.api.rest) + o;\n if (t === \"public\")\n Object.keys(c).length && (u += \"?\" + this.urlencode(c));\n else if (t === \"private\")\n if (this.checkRequiredCredentials(), this.token)\n n = {\n Authorization: \"Bearer \" + this.token,\n \"Content-Type\": \"application/json\",\n TERMID: this.termId\n }, i !== \"GET\" ? Object.keys(c).length && (r = this.json(c)) : Object.keys(c).length && (u += \"?\" + this.urlencode(c));\n else {\n if (i === \"POST\" && (e === \"trade/batch-orders\" || e === \"trade/order-algo\" || e === \"trade/order\")) {\n const p = this.safeString(this.options, \"brokerId\", \"e847386590ce4dBC\");\n if (Array.isArray(s))\n for (let m = 0; m < s.length; m++) {\n const y = s[m];\n this.safeString(y, \"clOrdId\") === void 0 && (y.clOrdId = p + this.uuid16(), y.tag = p, s[m] = y);\n }\n else\n this.safeString(s, \"clOrdId\") === void 0 && (s.clOrdId = p + this.uuid16(), s.tag = p);\n }\n const f = this.iso8601(this.nonce());\n n = {\n \"OK-ACCESS-KEY\": this.apiKey,\n \"OK-ACCESS-PASSPHRASE\": this.password,\n \"OK-ACCESS-TIMESTAMP\": f\n // 'OK-FROM': '',\n // 'OK-TO': '',\n // 'OK-LIMIT': '',\n };\n let h = f + i + o;\n if (i === \"GET\") {\n if (Object.keys(c).length) {\n const p = \"?\" + this.urlencode(c);\n u += p, h += p;\n }\n } else\n (a || Object.keys(c).length) && (r = this.json(c), h += r), n[\"Content-Type\"] = \"application/json\";\n let l;\n this.externalSigner ? l = await this.externalSigner.sign({\n payload: this.encode(h),\n publicApiKey: this.apiKey,\n exchangeId: this.id\n }) : l = this.hmac(this.encode(h), this.encode(this.secret), Re, \"base64\"), n[\"OK-ACCESS-SIGN\"] = l;\n }\n return { url: u, method: i, body: r, headers: n };\n }\n async fetchDepositWithdrawFees(e = void 0, t = {}) {\n await this.loadMarkets();\n const i = await this.privateGetAssetCurrencies(t), s = this.safeValue(i, \"data\");\n return this.parseDepositWithdrawFees(s, e);\n }\n parseDepositWithdrawFees(e, t = void 0, i = void 0) {\n const s = {};\n t = this.marketCodes(t);\n for (let r = 0; r < e.length; r++) {\n const a = e[r], o = this.safeString(a, \"ccy\"), c = this.safeCurrencyCode(o);\n if (t === void 0 || this.inArray(c, t)) {\n this.safeValue(s, c) === void 0 && (s[c] = this.depositWithdrawFee({})), s[c].info[o] = a;\n const h = this.safeString(a, \"chain\").split(\"-\"), l = this.safeValue(h, 1), p = this.safeNumber(a, \"minFee\"), m = {\n fee: p,\n percentage: p !== void 0 ? !1 : void 0\n }, y = {\n fee: void 0,\n percentage: void 0\n }, w = this.networkIdToCode(l, c);\n s[c].networks[w] = {\n withdraw: m,\n deposit: y\n };\n }\n }\n const n = Object.keys(s);\n for (let r = 0; r < n.length; r++) {\n const a = n[r], o = this.currency(a);\n s[a] = this.assignDefaultDepositWithdrawFees(s[a], o);\n }\n return s;\n }\n handleErrors(e, t, i, s, n, r, a, o, c) {\n if (!a)\n return;\n const u = this.safeString(a, \"code\");\n if (u !== \"0\" && u !== \"2\") {\n const f = this.safeValue(a, \"data\", []);\n let h, l;\n for (let p = 0; p < f.length; p++) {\n const m = f[p], y = this.safeString(m, \"sCode\");\n h = this.safeString(m, \"sMsg\"), l = y + \": \" + h, this.throwExactlyMatchedException(this.exceptions.exact, y, l), this.throwBroadlyMatchedException(this.exceptions.broad, h, l);\n }\n throw h = this.safeString(a, \"msg\"), l = u + \": \" + h, this.throwExactlyMatchedException(this.exceptions.exact, u, l), new O().addMessage(h).exchange(this.id);\n }\n }\n}\nconst Nu = \"4.2.44\";\ngt.ccxtVersion = Nu;\nconst _d = {\n binance: Vy,\n bitfinex2: Fy,\n bitget: Gy,\n bitmart: Hy,\n bitstamp: Yy,\n bybit: Xy,\n coinbase: Zy,\n coinbaseexchange: Jy,\n gate: Eu,\n gateio: tw,\n htx: sw,\n kraken: rw,\n kucoin: ow,\n mexc: cw,\n okx: fw\n};\nObject.assign({ errors: od, version: Nu, Exchange: gt, Precise: P, exchanges: Object.keys(_d), ...od }, _d, mo);\nvar vi = /* @__PURE__ */ ((d) => (d.TRADE = \"trade\", d.SEND = \"send\", d))(vi || {});\nFs.WITHDRAW, Fs.TRADE, Fs.READ, Fs.TRADE;\nfunction Ld() {\n return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);\n}\nconst hw = (d) => {\n const e = {};\n function t(i, s = \"\") {\n for (const n in i) {\n const r = i[n], a = s ? `${s}.${n}` : n;\n typeof r == \"object\" && \"code\" in r && typeof r.code == \"number\" && typeof r.documentation == \"string\" && typeof r.message == \"string\" ? e[a] = {\n code: r.code,\n message: r.message,\n documentation: r.documentation\n } : typeof r == \"object\" && t(r, a);\n }\n }\n return t(d), e;\n}, br = `\n <svg width=\"110\" height=\"110\" viewBox=\"0 0 110 110\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M0.00745909 26.3991C0.00745909 11.815 11.8292 0 26.4048 0H83.6027C98.1857 0 110 11.8225 110 26.3991V83.6009C110 98.185 98.1783 110 83.6027 110H26.2704C11.762 110 0 98.2372 0 83.7278V26.3917L0.00745909 26.3991Z\" fill=\"url(#paint0_linear_2187_113375)\"/>\n <path d=\"M6.35721 29.6979C6.35721 16.8006 16.8131 6.34399 29.7095 6.34399H80.31C93.2064 6.34399 103.662 16.8006 103.662 29.6979V80.3018C103.662 93.1991 93.2064 103.656 80.31 103.656H29.5901C16.7534 103.656 6.34974 93.2513 6.34974 80.4138V29.6904L6.35721 29.6979Z\" fill=\"black\"/>\n <path d=\"M12.6995 32.9969C12.6995 21.7789 21.7896 12.6881 33.0068 12.6881H77.0098C88.227 12.6881 97.3171 21.7789 97.3171 32.9969V77.0029C97.3171 88.2208 88.227 97.3116 77.0098 97.3116H32.9098C21.7523 97.3116 12.7069 88.2656 12.7069 77.0999V32.9969H12.6995Z\" fill=\"white\"/>\n <path d=\"M45.7361 59.2219C49.8786 52.0466 48.6935 43.6066 43.0892 40.3708C37.485 37.1349 29.5838 40.3286 25.4414 47.5039C21.2989 54.6793 22.484 63.1192 28.0882 66.355C33.6925 69.5909 41.5937 66.3973 45.7361 59.2219Z\" fill=\"black\"/>\n <path d=\"M41.3015 52.747C43.7375 52.747 45.7123 50.7721 45.7123 48.3359C45.7123 45.8998 43.7375 43.9249 41.3015 43.9249C38.8656 43.9249 36.8908 45.8998 36.8908 48.3359C36.8908 50.7721 38.8656 52.747 41.3015 52.747Z\" fill=\"white\"/>\n <path d=\"M82.1606 66.4148C87.7649 63.1789 88.9499 54.739 84.8075 47.5636C80.6651 40.3883 72.7639 37.1947 67.1596 40.4305C61.5554 43.6663 60.3703 52.1063 64.5127 59.2817C68.6551 66.457 76.5564 69.6506 82.1606 66.4148Z\" fill=\"black\"/>\n <path d=\"M68.9501 52.814C71.3861 52.814 73.3608 50.8392 73.3608 48.403C73.3608 45.9669 71.3861 43.9919 68.9501 43.9919C66.5141 43.9919 64.5393 45.9669 64.5393 48.403C64.5393 50.8392 66.5141 52.814 68.9501 52.814Z\" fill=\"white\"/>\n <path d=\"M55.1234 71.4422C55.1234 71.4422 51.9739 71.3153 50.8469 72.1213C49.72 72.9274 49.7946 74.1739 49.7946 74.1739C49.7946 74.1739 49.6454 75.4501 50.0185 76.2786C50.3917 77.1071 52.5784 76.9653 53.6531 78.8088C53.6531 78.8088 54.6382 79.1447 55.1234 79.0477\" fill=\"black\"/>\n <path d=\"M55.1234 71.4422C55.1234 71.4422 58.273 71.3154 59.4 72.1215C60.5269 72.9276 60.4523 74.174 60.4523 74.174C60.4523 74.174 60.6015 75.4503 60.2284 76.2788C59.8552 77.1073 57.6685 76.9655 56.5938 78.809C56.5938 78.809 55.6085 79.1447 55.1234 79.0477\" fill=\"black\"/>\n <defs>\n <linearGradient id=\"paint0_linear_2187_113375\" x1=\"55\" y1=\"0\" x2=\"55\" y2=\"123.049\" gradientUnits=\"userSpaceOnUse\">\n <stop stop-color=\"currentColor\"/>\n <stop offset=\"1\" stop-color=\"currentColor\" stop-opacity=\"0.4\"/>\n </linearGradient>\n </defs>\n </svg>\n`, lw = (d) => `\n .error-container {\n height: 100%;\n text-align: center;\n display: flex;\n align-items: center;\n flex-direction: column;\n justify-content: center;\n padding: ${d.custom.gutterMargin} 0;\n gap: ${d.custom.gutterMargin};\n }\n .error-logo {\n height: ${d.custom.imgSize.large};\n width: ${d.custom.imgSize.large};\n }\n .error-title {\n color: ${d.palette.error.main};\n }\n .error-content {\n color: ${d.palette.error.main};\n text-align: center;\n font-size: ${d.typography(d.palette).body1.fontSize};;\n font-weight: normal;\n }\n`, pw = (d, { error: e }) => `\n <section class=\"error-container\">\n <div class=\"error-logo cede-logo\">\n ${br}\n </div>\n <h1 class=\"error-title\">\n Error\n </h1>\n <h2 class=\"error-content\">\n ${e}\n </h2>\n </section>\n`, gw = {\n style: lw,\n html: pw\n}, Dd = \"https://discord.gg/V7hgKf6NWf\", mw = (d) => `\n .help-container {\n position: absolute;\n top: 2%;\n right: 4%;\n display: flex;\n flex-direction: column;\n align-items: flex-end;\n gap: ${d.custom.smallGutterMargin};\n z-index: 3;\n }\n\n .help-button {\n cursor: pointer;\n display: inline-flex;\n border-radius: 100%;\n border: none;\n background: transparent;\n }\n\n .help-button svg {\n fill: ${d.palette.text.primary};\n }\n\n .help-popper__hidden {\n display: none;\n }\n\n .help-popper__exit {\n animation: scale-out 0.2s ease-in-out forwards;\n }\n\n .help-popper__visible {\n animation: scale-in 0.2s ease-in;\n }\n\n .help-popper {\n transform-origin: top right;\n background: ${d.palette.background.help};\n padding: ${d.custom.smallGutterMargin};\n border-radius: ${d.custom.buttonDefaultRadius}px;\n }\n\n .help-popper a {\n text-decoration: none;\n transition: 0.2s;\n display: inline-flex;\n align-items: center;\n gap: ${d.custom.gutterMargin};\n }\n\n .help-popper a:hover {\n opacity: 0.6;\n }\n\n .help-popper svg {\n fill: ${d.palette.text.primary};\n }\n\n .help-inner-icon {\n fill: ${d.palette.background.default};\n }\n\n @keyframes scale-in {\n from {\n transform: scale(0.7);\n opacity: 0;\n }\n to {\n transform: scale(1);\n opacity: 1;\n }\n }\n\n @keyframes scale-out {\n from {\n transform: scale(1);\n opacity: 1;\n }\n to {\n transform: scale(0.7);\n opacity: 0;\n }\n }\n`, yw = () => `\n <div class=\"help-container\">\n <a href=\"${Dd}\" target=\"_blank\" id=\"help-button\" class=\"help-button\">\n <svg width=\"20\" height=\"20\" focusable=\"false\" aria-hidden=\"true\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M11 18h2v-2h-2v2zm1-16C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm0-14c-2.21 0-4 1.79-4 4h2c0-1.1.9-2 2-2s2 .9 2 2c0 2-3 1.75-3 5h2c0-2.25 3-2.5 3-5 0-2.21-1.79-4-4-4z\">\n </path>\n </svg>\n </a>\n <div id=\"help-popper\" class=\"help-popper help-popper__hidden\">\n <a href=\"${Dd}\" target=\"_blank\">\n Get help on Discord \n <svg width=\"24\" height=\"24\" focusable=\"false\" aria-hidden=\"true\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M24 12C24 18.627 18.627 24 12 24C5.373 24 0 18.627 0 12C0 5.373 5.373 0 12 0C18.627 0 24 5.373 24 12Z\"\n />\n <path\n fill=\"transparent\"\n class=\"help-inner-icon\"\n d=\"M16.8515 7.82936C15.959 7.44605 15.0024 7.16274 14.002 7.00164C13.9931 7.00001 13.9839 7.00106 13.9756 7.00464C13.9674 7.00823 13.9605 7.01416 13.9559 7.02164C13.8334 7.22662 13.6969 7.49383 13.6013 7.70493C12.5403 7.55396 11.4616 7.55396 10.4006 7.70493C10.2941 7.47097 10.1739 7.24286 10.0407 7.02164C10.0362 7.01407 10.0294 7.008 10.0211 7.00423C10.0129 7.00046 10.0037 6.99917 9.99464 7.00053C8.99483 7.16163 8.03819 7.44494 7.14513 7.82881C7.13745 7.83188 7.13094 7.83711 7.12647 7.84381C5.31119 10.3853 4.81362 12.864 5.05803 15.3116C5.05871 15.3176 5.06066 15.3234 5.06377 15.3287C5.06688 15.3339 5.07108 15.3385 5.07611 15.3422C6.13564 16.0768 7.31741 16.6365 8.57193 16.9976C8.58067 17.0002 8.59003 17.0002 8.59877 16.9976C8.60751 16.9951 8.61523 16.99 8.62092 16.9832C8.89088 16.6394 9.1301 16.2746 9.33607 15.8927C9.33893 15.8875 9.34058 15.8818 9.3409 15.8759C9.34123 15.87 9.34022 15.8641 9.33795 15.8586C9.33569 15.8532 9.33221 15.8482 9.32776 15.8441C9.32331 15.84 9.31799 15.8369 9.31216 15.8349C8.93534 15.6998 8.57023 15.5367 8.22019 15.3472C8.2139 15.3438 8.2086 15.3389 8.20476 15.3331C8.20093 15.3272 8.19868 15.3206 8.19822 15.3137C8.19775 15.3068 8.19909 15.2999 8.20211 15.2936C8.20513 15.2874 8.20974 15.2819 8.21552 15.2778C8.28902 15.2261 8.36252 15.1722 8.43251 15.1183C8.43882 15.1135 8.44641 15.1104 8.45444 15.1094C8.46247 15.1084 8.47063 15.1096 8.47801 15.1128C10.7687 16.0927 13.2495 16.0927 15.5134 15.1128C15.5208 15.1094 15.529 15.1081 15.5372 15.109C15.5453 15.1099 15.5531 15.1129 15.5595 15.1178C15.6295 15.1722 15.7024 15.2261 15.7765 15.2778C15.7823 15.2818 15.787 15.2872 15.7901 15.2934C15.7932 15.2996 15.7947 15.3065 15.7943 15.3134C15.794 15.3203 15.7918 15.3269 15.7881 15.3329C15.7844 15.3388 15.7792 15.3437 15.773 15.3472C15.4241 15.5383 15.0613 15.7 14.6804 15.8344C14.6746 15.8364 14.6692 15.8396 14.6648 15.8437C14.6603 15.8479 14.6569 15.8529 14.6546 15.8584C14.6523 15.8639 14.6513 15.8698 14.6517 15.8758C14.652 15.8817 14.6536 15.8875 14.6565 15.8927C14.8665 16.2744 15.1068 16.6377 15.3711 16.9826C15.3766 16.9897 15.3842 16.995 15.393 16.9978C15.4017 17.0006 15.4112 17.0007 15.4201 16.9982C16.6767 16.638 17.8604 16.0781 18.9211 15.3422C18.9263 15.3388 18.9306 15.3343 18.9339 15.3291C18.9371 15.3239 18.9391 15.3182 18.9398 15.3122C19.2315 12.4824 18.451 10.0237 16.8696 7.84492C16.8657 7.83784 16.8593 7.83232 16.8515 7.82936ZM9.67848 13.8212C8.989 13.8212 8.42026 13.2273 8.42026 12.4991C8.42026 11.7702 8.97791 11.1769 9.67848 11.1769C10.3843 11.1769 10.9478 11.7752 10.9367 12.4991C10.9367 13.2279 10.379 13.8212 9.67848 13.8212ZM14.3304 13.8212C13.6404 13.8212 13.0722 13.2273 13.0722 12.4991C13.0722 11.7702 13.6293 11.1769 14.3304 11.1769C15.0362 11.1769 15.5997 11.7752 15.5886 12.4991C15.5886 13.2279 15.0368 13.8212 14.3304 13.8212Z\"\n />\n </svg>\n </a>\n\n </div>\n </div>\n`, ww = (d) => {\n const e = d.html.querySelector(\".help-container\"), t = d.html.querySelector(\"#help-button\"), i = d.html.querySelector(\"#help-popper\");\n let s = !1;\n if (!t || !i || !e)\n throw new Error(\"Could not find help button or popper\");\n t.addEventListener(\"mouseenter\", () => {\n s = !0, i.classList.remove(\"help-popper__hidden\"), i.classList.remove(\"help-popper__exit\"), i.classList.add(\"help-popper__visible\");\n }), e.addEventListener(\"mouseleave\", () => {\n s = !1, i.classList.add(\"help-popper__exit\"), i.classList.remove(\"help-popper__visible\"), setTimeout(() => {\n s || (i.classList.add(\"help-popper__hidden\"), i.classList.remove(\"help-popper__exit\"));\n }, 250);\n });\n}, bw = {\n style: mw,\n html: yw,\n action: ww\n}, Sw = \"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTAyIiBoZWlnaHQ9IjEwMiIgdmlld0JveD0iMCAwIDEwMiAxMDIiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxwYXRoIGQ9Ik0wLjU4ODMxOCAyNC43Nzc2QzAuNTg4MzE4IDExLjQxMTQgMTEuNDI0NSAwLjU3NDQ3MSAyNC43ODk4IDAuNTc0NDcxSDc3LjIzMDNDOTAuNTk1NiAwLjU3NDQ3MSAxMDEuNDMyIDExLjQxMTQgMTAxLjQzMiAyNC43Nzc2Vjc3LjIyMTZDMTAxLjQzMiA5MC41ODc5IDkwLjU5NTYgMTAxLjQyNSA3Ny4yMzAzIDEwMS40MjVIMjQuNjY2MUMxMS4zNjI2IDEwMS40MjUgMC41ODA1NzQgOTAuNjQyMSAwLjU4MDU3NCA3Ny4zMzc3VjI0Ljc2OTlMMC41ODgzMTggMjQuNzc3NloiIGZpbGw9ImJsYWNrIi8+CjxwYXRoIGQ9Ik03LjE2MTE2IDI4LjE5NjlDNy4xNjExNiAxNi41NzEgMTYuNTgxOSA3LjE0OTYyIDI4LjIwNyA3LjE0OTYySDczLjgxQzg1LjQzNTEgNy4xNDk2MiA5NC44NTU4IDE2LjU3MSA5NC44NTU4IDI4LjE5NjlWNzMuODAzMUM5NC44NTU4IDg1LjQyODkgODUuNDM1MSA5NC44NTAzIDczLjgxIDk0Ljg1MDNIMjguMTA2NEMxNi41NDMyIDk0Ljg1MDMgNy4xNjg4OCA4NS40NzU0IDcuMTY4ODggNzMuOTAzNlYyOC4xOTY5SDcuMTYxMTZaIiBmaWxsPSJ3aGl0ZSIvPgo8cGF0aCBkPSJNNDEuMzk5MiA1NS4zNzU2QzQ1LjY5MjIgNDcuOTM5MyA0NC40NjQxIDM5LjE5MjQgMzguNjU2IDM1LjgzODlDMzIuODQ4IDMyLjQ4NTQgMjQuNjU5NSAzNS43OTUyIDIwLjM2NjQgNDMuMjMxNUMxNi4wNzM0IDUwLjY2NzggMTcuMzAxNSA1OS40MTQ2IDIzLjEwOTUgNjIuNzY4MUMyOC45MTc2IDY2LjEyMTYgMzcuMTA2MSA2Mi44MTE5IDQxLjM5OTIgNTUuMzc1NloiIGZpbGw9ImJsYWNrIi8+CjxwYXRoIGQ9Ik0zNi44MDM1IDQ4LjY2NTNDMzkuMzI4MSA0OC42NjUzIDQxLjM3NDcgNDYuNjE4NSA0MS4zNzQ3IDQ0LjA5MzhDNDEuMzc0NyA0MS41NjkgMzkuMzI4MSAzOS41MjIzIDM2LjgwMzUgMzkuNTIyM0MzNC4yNzkgMzkuNTIyMyAzMi4yMzI0IDQxLjU2OSAzMi4yMzI0IDQ0LjA5MzhDMzIuMjMyNCA0Ni42MTg1IDM0LjI3OSA0OC42NjUzIDM2LjgwMzUgNDguNjY1M1oiIGZpbGw9IndoaXRlIi8+CjxwYXRoIGQ9Ik03OS4xNDgzIDYyLjgzQzg0Ljk1NjMgNTkuNDc2NSA4Ni4xODQ1IDUwLjcyOTcgODEuODkxNCA0My4yOTM0Qzc3LjU5ODQgMzUuODU3MSA2OS40MDk4IDMyLjU0NzMgNjMuNjAxOCAzNS45MDA5QzU3Ljc5MzcgMzkuMjU0NCA1Ni41NjU2IDQ4LjAwMTIgNjAuODU4NiA1NS40Mzc1QzY1LjE1MTcgNjIuODczOCA3My4zNDAyIDY2LjE4MzUgNzkuMTQ4MyA2Mi44M1oiIGZpbGw9ImJsYWNrIi8+CjxwYXRoIGQ9Ik02NS40NTczIDQ4LjczNDVDNjcuOTgxOSA0OC43MzQ1IDcwLjAyODQgNDYuNjg3OCA3MC4wMjg0IDQ0LjE2MzFDNzAuMDI4NCA0MS42MzgzIDY3Ljk4MTkgMzkuNTkxNiA2NS40NTczIDM5LjU5MTZDNjIuOTMyNyAzOS41OTE2IDYwLjg4NjEgNDEuNjM4MyA2MC44ODYxIDQ0LjE2MzFDNjAuODg2MSA0Ni42ODc4IDYyLjkzMjcgNDguNzM0NSA2NS40NTczIDQ4LjczNDVaIiBmaWxsPSJ3aGl0ZSIvPgo8cGF0aCBkPSJNNTEuMTI3OSA2OC4wNDAxQzUxLjEyNzkgNjguMDQwMSA0Ny44NjM5IDY3LjkwODYgNDYuNjk1OSA2OC43NDM5QzQ1LjUyOCA2OS41NzkzIDQ1LjYwNTQgNzAuODcxMSA0NS42MDU0IDcwLjg3MTFDNDUuNjA1NCA3MC44NzExIDQ1LjQ1MDYgNzIuMTkzOCA0NS44Mzc0IDczLjA1MjRDNDYuMjI0MSA3My45MTEgNDguNDkwNCA3My43NjQxIDQ5LjYwNDEgNzUuNjc0NkM0OS42MDQxIDc1LjY3NDYgNTAuNjI1MSA3Ni4wMjI3IDUxLjEyNzkgNzUuOTIyMiIgZmlsbD0iYmxhY2siLz4KPHBhdGggZD0iTTUxLjEyNzkgNjguMDQwMUM1MS4xMjc5IDY4LjA0MDEgNTQuMzkyIDY3LjkwODQgNTUuNTU5OSA2OC43NDM4QzU2LjcyNzggNjkuNTc5MiA1Ni42NTA1IDcwLjg3MDkgNTYuNjUwNSA3MC44NzA5QzU2LjY1MDUgNzAuODcwOSA1Ni44MDUyIDcyLjE5MzYgNTYuNDE4NSA3My4wNTIyQzU2LjAzMTcgNzMuOTEwOCA1My43NjU1IDczLjc2MzkgNTIuNjUxNyA3NS42NzQ0QzUyLjY1MTcgNzUuNjc0NCA1MS42MzA2IDc2LjAyMjcgNTEuMTI3OSA3NS45MjIyIiBmaWxsPSJibGFjayIvPgo8L3N2Zz4K\", Tw = (d) => `\n .loader-container {\n height: 100%;\n width: 100%;\n display: flex;\n justify-content: center;\n align-items: center;\n position: absolute;\n top: 0;\n left: 0;\n background: ${d.palette.background.default};\n }\n\n\n .cede-loader-wrapper {\n position: relative;\n display: flex;\n align-items: center;\n justify-content: center;\n height: ${d.custom.imgSize.large};\n width: ${d.custom.imgSize.large};\n padding: 6px;\n overflow: hidden;\n border-radius: 25%;\n box-sizing: border-box;\n }\n\n .cede-loader-wrapper::before {\n content: \"\";\n position: absolute;\n top: -20px;\n bottom: -20px;\n left: -20px;\n right: -20px;\n background: linear-gradient(${d.palette.logoBorderColor}, ${d.palette.logoBorderColor}, ${d.palette.logoBorderColor}, rgba(0, 0, 0, 0.1), rgba(0, 0, 0, 0.1));\n z-index: 0;\n border-radius: 50%;\n animation: spinner-spin 2s linear infinite;\n }\n\n @keyframes spinner-spin {\n 100% {\n transform: rotate(360deg); \n }\n }\n\n .cede-loader-img {\n height: 100%;\n width: 100%;\n z-index: 1;\n }\n`, Aw = () => `\n <div id=\"cede-loader\" class=\"loader-container\">\n <div class=\"cede-loader-wrapper\">\n <img class=\"cede-loader-img\" src=\"${Sw}\" />\n </div>\n </div>\n`, Iw = {\n style: Tw,\n html: Aw\n}, Ow = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB2aWV3Qm94PSI5My4xNjYgMTY5LjM5MiAyNjAuMjIyIDYxLjMzMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyB0cmFuc2Zvcm09Im1hdHJpeCgxLCAwLCAwLCAxLCA1MC41NTg2NjcsIDg5LjY1MTg4NykiPgogICAgPGc+CiAgICAgIDxnPgogICAgICAgIDxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik0xMzMsMTI4LjFjLTIuMywwLTQuMi0wLjgtNS43LTIuM2MtMS41LTEuNS0yLjMtMy41LTIuMy01LjhzMC44LTQuMiwyLjMtNS44YzEuNS0xLjUsMy40LTIuMyw1LjctMi4zIGMyLjMsMCw0LjIsMC44LDUuNywyLjVsLTEuNCwxLjNjLTEuMS0xLjMtMi41LTItNC4zLTJjLTEuNywwLTMuMSwwLjYtNC4zLDEuN2MtMS4yLDEuMS0xLjcsMi42LTEuNyw0LjVjMCwxLjgsMC42LDMuMywxLjcsNC41IGMxLjIsMS4xLDIuNiwxLjcsNC4zLDEuN2MxLjksMCwzLjQtMC44LDQuOC0yLjJsMS40LDEuNGMtMC43LDAuOC0xLjYsMS41LTIuNywyQzEzNS40LDEyNy44LDEzNC4zLDEyOC4xLDEzMywxMjguMXoiIHN0eWxlPSJmaWxsOiByZ2IoOTYsIDEwMCwgMTA1KTsiLz4KICAgICAgICA8cGF0aCBjbGFzcz0ic3QwIiBkPSJNMTQyLjksMTEyLjN2NC45bC0wLjEsMS41aDAuMWMwLjMtMC41LDAuNy0wLjksMS40LTEuM2MwLjYtMC40LDEuMy0wLjUsMi0wLjVjMS4zLDAsMi4zLDAuNCwzLDEuMiBjMC43LDAuOCwxLDEuOSwxLDMuMnY2LjVoLTJ2LTYuMmMwLTItMC45LTIuOS0yLjYtMi45Yy0wLjgsMC0xLjUsMC4zLTIsMWMtMC41LDAuNy0wLjgsMS40LTAuOCwyLjN2NS44aC0ydi0xNS40TDE0Mi45LDExMi4zIEwxNDIuOSwxMTIuM3oiIHN0eWxlPSJmaWxsOiByZ2IoOTYsIDEwMCwgMTA1KTsiLz4KICAgICAgICA8cGF0aCBjbGFzcz0ic3QwIiBkPSJNMTU0LjYsMTI3LjdoLTJ2LTEwLjZoMS45djEuN2gwLjFjMC4yLTAuNiwwLjYtMS4xLDEuMi0xLjRjMC42LTAuNCwxLjItMC42LDEuOC0wLjZzMS4xLDAuMSwxLjUsMC4zIGwtMC44LDEuOWMtMC4zLTAuMS0wLjYtMC4yLTEuMS0wLjJjLTAuNywwLTEuNCwwLjMtMS45LDAuOWMtMC42LDAuNi0wLjgsMS4zLTAuOCwyLjJWMTI3Ljd6IiBzdHlsZT0iZmlsbDogcmdiKDk2LCAxMDAsIDEwNSk7Ii8+CiAgICAgICAgPHBhdGggY2xhc3M9InN0MCIgZD0iTTE2MC43LDExOC40YzEtMS4xLDIuMy0xLjYsMy45LTEuNmMxLjYsMCwyLjksMC41LDMuOSwxLjZjMSwxLjEsMS41LDIuNCwxLjUsNGMwLDEuNi0wLjUsMy0xLjUsNCBjLTEsMS4xLTIuMywxLjYtMy45LDEuNmMtMS42LDAtMi45LTAuNS0zLjktMS42Yy0xLTEuMS0xLjUtMi40LTEuNS00QzE1OS4yLDEyMC44LDE1OS43LDExOS41LDE2MC43LDExOC40eiBNMTYyLjIsMTI1LjIgYzAuNywwLjcsMS41LDEsMi40LDFjMC45LDAsMS43LTAuNCwyLjQtMWMwLjctMC43LDEtMS42LDEtMi44cy0wLjMtMi4xLTEtMi44Yy0wLjctMC43LTEuNS0xLTIuNC0xYy0wLjksMC0xLjcsMC40LTIuNCwxIGMtMC43LDAuNy0xLDEuNi0xLDIuOFMxNjEuNSwxMjQuNSwxNjIuMiwxMjUuMnoiIHN0eWxlPSJmaWxsOiByZ2IoOTYsIDEwMCwgMTA1KTsiLz4KICAgICAgICA8cGF0aCBjbGFzcz0ic3QwIiBkPSJNMTcxLjcsMTI3Ljd2LTEwLjZoMS45djEuNWgwLjFjMC4zLTAuNSwwLjgtMC45LDEuNC0xLjNjMC42LTAuNCwxLjItMC41LDEuOS0wLjVjMS42LDAsMi44LDAuNywzLjMsMiBjMC45LTEuMywyLjEtMiwzLjctMmMxLjMsMCwyLjIsMC40LDIuOCwxLjJjMC42LDAuOCwxLDEuOSwxLDMuMnY2LjVoLTJ2LTYuMmMwLTEuMS0wLjItMS44LTAuNi0yLjNjLTAuNC0wLjQtMS0wLjctMS44LTAuNyBjLTAuOCwwLTEuNCwwLjMtMS45LDFjLTAuNSwwLjctMC44LDEuNC0wLjgsMi4zdjUuOGgtMnYtNi4yYzAtMS4xLTAuMi0xLjgtMC42LTIuM2MtMC40LTAuNC0xLTAuNy0xLjgtMC43Yy0wLjgsMC0xLjQsMC4zLTEuOSwxIGMtMC41LDAuNy0wLjgsMS40LTAuOCwyLjN2NS44TDE3MS43LDEyNy43TDE3MS43LDEyNy43eiIgc3R5bGU9ImZpbGw6IHJnYig5NiwgMTAwLCAxMDUpOyIvPgogICAgICAgIDxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik0xOTQuOCwxMjguMWMtMS42LDAtMi45LTAuNS0zLjktMS42Yy0xLTEuMS0xLjUtMi40LTEuNS00YzAtMS41LDAuNS0yLjksMS41LTRjMS0xLjEsMi4yLTEuNywzLjctMS43IGMxLjYsMCwyLjgsMC41LDMuOCwxLjVjMC45LDEsMS40LDIuNCwxLjQsNC4xbDAsMC40aC04LjRjMC4xLDEuMSwwLjQsMS45LDEuMSwyLjVjMC43LDAuNiwxLjQsMC45LDIuMywwLjkgYzEuNCwwLDIuNC0wLjYsMi45LTEuOGwxLjgsMC43Yy0wLjMsMC44LTAuOSwxLjUtMS43LDIuMUMxOTcsMTI3LjgsMTk2LDEyOC4xLDE5NC44LDEyOC4xeiBNMTk3LjcsMTIxLjJjMC0wLjYtMC4zLTEuMi0wLjgtMS43IGMtMC41LTAuNi0xLjMtMC44LTIuMy0wLjhjLTAuNywwLTEuNCwwLjItMS45LDAuN2MtMC41LDAuNS0wLjksMS4xLTEuMSwxLjlIMTk3Ljd6IiBzdHlsZT0iZmlsbDogcmdiKDk2LCAxMDAsIDEwNSk7Ii8+CiAgICAgICAgPHBhdGggY2xhc3M9InN0MCIgZD0iTTIyMy44LDExMi4zbC00LjEsMTUuNGgtMmwtMy4zLTEwLjJoLTAuMWwtMy4zLDEwLjJoLTJsLTQuMy0xNS40aDIuMWwzLjMsMTIuMmgwLjFsMy4zLTEwLjFoMS45bDMuMywxMC4xIGgwLjFsMy4xLTEyLjJIMjIzLjh6IiBzdHlsZT0iZmlsbDogcmdiKDk2LCAxMDAsIDEwNSk7Ii8+CiAgICAgICAgPHBhdGggY2xhc3M9InN0MCIgZD0iTTIyOSwxMjguMWMtMS42LDAtMi45LTAuNS0zLjktMS42Yy0xLTEuMS0xLjUtMi40LTEuNS00YzAtMS41LDAuNS0yLjksMS41LTRjMS0xLjEsMi4yLTEuNywzLjctMS43IGMxLjYsMCwyLjgsMC41LDMuOCwxLjVjMC45LDEsMS40LDIuNCwxLjQsNC4xbDAsMC40aC04LjRjMC4xLDEuMSwwLjQsMS45LDEuMSwyLjVjMC43LDAuNiwxLjQsMC45LDIuMywwLjkgYzEuNCwwLDIuNC0wLjYsMi45LTEuOGwxLjgsMC43Yy0wLjMsMC44LTAuOSwxLjUtMS43LDIuMUMyMzEuMSwxMjcuOCwyMzAuMSwxMjguMSwyMjksMTI4LjF6IE0yMzEuOCwxMjEuMiBjMC0wLjYtMC4zLTEuMi0wLjgtMS43Yy0wLjUtMC42LTEuMy0wLjgtMi4zLTAuOGMtMC43LDAtMS40LDAuMi0xLjksMC43Yy0wLjUsMC41LTAuOSwxLjEtMS4xLDEuOUgyMzEuOHoiIHN0eWxlPSJmaWxsOiByZ2IoOTYsIDEwMCwgMTA1KTsiLz4KICAgICAgICA8cGF0aCBjbGFzcz0ic3QwIiBkPSJNMjQxLjMsMTI4LjFjLTAuOCwwLTEuNS0wLjItMi4yLTAuNWMtMC42LTAuMy0xLjEtMC44LTEuNC0xLjNoLTAuMXYxLjVoLTEuOXYtMTUuNGgydjQuOWwtMC4xLDEuNWgwLjEgYzAuMy0wLjUsMC44LTEsMS40LTEuM2MwLjYtMC4zLDEuNC0wLjUsMi4yLTAuNWMxLjQsMCwyLjUsMC41LDMuNSwxLjZjMSwxLjEsMS41LDIuNCwxLjUsNGMwLDEuNi0wLjUsMi45LTEuNSw0IEMyNDMuOSwxMjcuNSwyNDIuNywxMjguMSwyNDEuMywxMjguMXogTTI0MSwxMjYuM2MwLjksMCwxLjctMC40LDIuNC0xYzAuNy0wLjcsMS0xLjYsMS0yLjhzLTAuMy0yLjEtMS0yLjhjLTAuNy0wLjctMS41LTEtMi40LTEgYy0wLjksMC0xLjcsMC4zLTIuNCwxYy0wLjcsMC43LTEsMS42LTEsMi44czAuMywyLjEsMSwyLjhDMjM5LjMsMTI1LjksMjQwLjEsMTI2LjMsMjQxLDEyNi4zeiIgc3R5bGU9ImZpbGw6IHJnYig5NiwgMTAwLCAxMDUpOyIvPgogICAgICAgIDxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik0yNTcsMTI4LjFjLTEuMSwwLTIuMi0wLjQtMy4zLTEuMWMtMS4xLTAuNy0xLjgtMS44LTIuMS0zLjFsMS44LTAuN2MwLjIsMC44LDAuNywxLjYsMS4zLDIuMSBzMS40LDAuOSwyLjMsMC45YzAuOSwwLDEuNi0wLjIsMi4yLTAuN2MwLjYtMC41LDAuOS0xLjEsMC45LTEuOGMwLTAuOS0wLjMtMS41LTAuOS0ycy0xLjYtMC45LTIuOS0xLjNjLTEuNC0wLjQtMi40LTEtMy4xLTEuNyBjLTAuNy0wLjctMS4xLTEuNi0xLjEtMi42YzAtMS4xLDAuNC0yLjEsMS4zLTIuOWMwLjktMC44LDItMS4yLDMuNC0xLjJjMS4zLDAsMi40LDAuMywzLjIsMXMxLjMsMS40LDEuNiwyLjFsLTEuOCwwLjggYy0wLjEtMC41LTAuNC0wLjktMS0xLjRjLTAuNS0wLjQtMS4yLTAuNi0yLTAuNmMtMC44LDAtMS40LDAuMi0xLjksMC42Yy0wLjUsMC40LTAuOCwxLTAuOCwxLjZjMCwwLjYsMC4yLDEuMSwwLjcsMS41IGMwLjUsMC40LDEuMiwwLjgsMi4yLDEuMWMwLjgsMC4yLDEuNCwwLjUsMS45LDAuN2MwLjUsMC4yLDEsMC41LDEuNSwwLjljMC41LDAuNCwwLjksMC45LDEuMiwxLjRjMC4zLDAuNiwwLjQsMS4yLDAuNCwyIGMwLDAuOC0wLjIsMS40LTAuNSwyYy0wLjMsMC42LTAuNywxLjEtMS4yLDEuNGMtMC41LDAuMy0xLjEsMC42LTEuNywwLjhDMjU4LjIsMTI4LDI1Ny42LDEyOC4xLDI1NywxMjguMXoiIHN0eWxlPSJmaWxsOiByZ2IoOTYsIDEwMCwgMTA1KTsiLz4KICAgICAgICA8cGF0aCBjbGFzcz0ic3QwIiBkPSJNMjY4LjMsMTI3LjljLTEuMSwwLTEuOS0wLjMtMi41LTAuOWMtMC42LTAuNi0wLjktMS40LTAuOS0yLjVWMTE5SDI2M3YtMS44aDEuOXYtMy4yaDJ2My4yaDIuNnYxLjhoLTIuNiB2NS40YzAsMS4xLDAuNSwxLjcsMS40LDEuN2MwLjQsMCwwLjctMC4xLDAuOS0wLjJsMC43LDEuN0MyNjkuNCwxMjcuOCwyNjguOSwxMjcuOSwyNjguMywxMjcuOXoiIHN0eWxlPSJmaWxsOiByZ2IoOTYsIDEwMCwgMTA1KTsiLz4KICAgICAgICA8cGF0aCBjbGFzcz0ic3QwIiBkPSJNMjcyLjEsMTE4LjRjMS0xLjEsMi4zLTEuNiwzLjktMS42czIuOSwwLjUsMy45LDEuNmMxLDEuMSwxLjUsMi40LDEuNSw0YzAsMS42LTAuNSwzLTEuNSw0IGMtMSwxLjEtMi4zLDEuNi0zLjksMS42cy0yLjktMC41LTMuOS0xLjZjLTEtMS4xLTEuNS0yLjQtMS41LTRDMjcwLjYsMTIwLjgsMjcxLjEsMTE5LjUsMjcyLjEsMTE4LjR6IE0yNzMuNiwxMjUuMiBjMC43LDAuNywxLjUsMSwyLjQsMXMxLjctMC40LDIuNC0xYzAuNy0wLjcsMS0xLjYsMS0yLjhzLTAuMy0yLjEtMS0yLjhjLTAuNy0wLjctMS41LTEtMi40LTFzLTEuNywwLjQtMi40LDEgYy0wLjcsMC43LTEsMS42LTEsMi44UzI3Mi45LDEyNC41LDI3My42LDEyNS4yeiIgc3R5bGU9ImZpbGw6IHJnYig5NiwgMTAwLCAxMDUpOyIvPgogICAgICAgIDxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik0yODUuMSwxMjcuN2gtMnYtMTAuNmgxLjl2MS43aDAuMWMwLjItMC42LDAuNi0xLjEsMS4yLTEuNGMwLjYtMC40LDEuMi0wLjYsMS44LTAuNnMxLjEsMC4xLDEuNSwwLjMgbC0wLjgsMS45Yy0wLjMtMC4xLTAuNi0wLjItMS4xLTAuMmMtMC43LDAtMS40LDAuMy0xLjksMC45Yy0wLjYsMC42LTAuOCwxLjMtMC44LDIuMlYxMjcuN3oiIHN0eWxlPSJmaWxsOiByZ2IoOTYsIDEwMCwgMTA1KTsiLz4KICAgICAgICA8cGF0aCBjbGFzcz0ic3QwIiBkPSJNMjk1LDEyOC4xYy0xLjYsMC0yLjktMC41LTMuOS0xLjZzLTEuNS0yLjQtMS41LTRjMC0xLjUsMC41LTIuOSwxLjUtNGMxLTEuMSwyLjItMS43LDMuNy0xLjcgYzEuNiwwLDIuOCwwLjUsMy44LDEuNWMwLjksMSwxLjQsMi40LDEuNCw0LjFsMCwwLjRoLTguNGMwLjEsMS4xLDAuNCwxLjksMS4xLDIuNWMwLjcsMC42LDEuNCwwLjksMi4zLDAuOSBjMS40LDAsMi40LTAuNiwyLjktMS44bDEuOCwwLjdjLTAuMywwLjgtMC45LDEuNS0xLjcsMi4xQzI5Ny4yLDEyNy44LDI5Ni4yLDEyOC4xLDI5NSwxMjguMXogTTI5Ny45LDEyMS4yIGMwLTAuNi0wLjMtMS4yLTAuOC0xLjdjLTAuNS0wLjYtMS4zLTAuOC0yLjMtMC44Yy0wLjcsMC0xLjQsMC4yLTEuOSwwLjdjLTAuNSwwLjUtMC45LDEuMS0xLjEsMS45SDI5Ny45eiIgc3R5bGU9ImZpbGw6IHJnYig5NiwgMTAwLCAxMDUpOyIvPgogICAgICA8L2c+CiAgICAgIDxnPgogICAgICAgIDxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik0xMjYuMSwxMDMuN2w0LjQtMTEuN2gxLjdsNC40LDExLjdIMTM1bC0xLjEtMy4ySDEyOWwtMS4xLDMuMkgxMjYuMXogTTEyOS41LDk5LjJoMy45bC0xLjktNS4zaC0wLjEgTDEyOS41LDk5LjJ6IiBzdHlsZT0iZmlsbDogcmdiKDk2LCAxMDAsIDEwNSk7Ii8+CiAgICAgICAgPHBhdGggY2xhc3M9InN0MCIgZD0iTTEzOS4zLDEwMy43bC0zLjItOGgxLjZsMi4zLDYuMmgwbDIuNC02LjJoMS42bC0zLjMsOEgxMzkuM3oiIHN0eWxlPSJmaWxsOiByZ2IoOTYsIDEwMCwgMTA1KTsiLz4KICAgICAgICA8cGF0aCBjbGFzcz0ic3QwIiBkPSJNMTQ3LjQsMTA0Yy0wLjgsMC0xLjYtMC4yLTIuMS0wLjdjLTAuNi0wLjUtMC45LTEuMS0wLjktMS45YzAtMC45LDAuMy0xLjUsMS0yLjFjMC43LTAuNSwxLjUtMC43LDIuNS0wLjcgYzAuOSwwLDEuNiwwLjIsMi4yLDAuNXYtMC4yYzAtMC42LTAuMi0xLjEtMC42LTEuNGMtMC40LTAuNC0wLjktMC41LTEuNS0wLjVjLTAuNCwwLTAuOCwwLjEtMS4yLDAuM2MtMC40LDAuMi0wLjYsMC41LTAuNywwLjggbC0xLjQtMC42YzAuMi0wLjUsMC42LTAuOSwxLjEtMS4zYzAuNS0wLjQsMS4zLTAuNiwyLjItMC42YzEsMCwxLjksMC4zLDIuNSwwLjljMC43LDAuNiwxLDEuNCwxLDIuNXY0LjhoLTEuNHYtMS4xSDE1MCBDMTQ5LjUsMTAzLjUsMTQ4LjYsMTA0LDE0Ny40LDEwNHogTTE0Ny43LDEwMi42YzAuNiwwLDEuMi0wLjIsMS43LTAuN2MwLjUtMC41LDAuOC0xLDAuOC0xLjZjLTAuNC0wLjQtMS4xLTAuNS0xLjktMC41IGMtMC43LDAtMS4zLDAuMi0xLjcsMC41Yy0wLjQsMC4zLTAuNiwwLjctMC42LDEuMWMwLDAuNCwwLjIsMC43LDAuNSwwLjlDMTQ2LjksMTAyLjUsMTQ3LjMsMTAyLjYsMTQ3LjcsMTAyLjZ6IiBzdHlsZT0iZmlsbDogcmdiKDk2LCAxMDAsIDEwNSk7Ii8+CiAgICAgICAgPHBhdGggY2xhc3M9InN0MCIgZD0iTTE1NC45LDkzLjdjLTAuMiwwLjItMC41LDAuMy0wLjgsMC4zcy0wLjUtMC4xLTAuOC0wLjNjLTAuMi0wLjItMC4zLTAuNS0wLjMtMC44czAuMS0wLjUsMC4zLTAuOCBjMC4yLTAuMiwwLjUtMC4zLDAuOC0wLjNzMC41LDAuMSwwLjgsMC4zYzAuMiwwLjIsMC4zLDAuNSwwLjMsMC44UzE1NS4xLDkzLjUsMTU0LjksOTMuN3ogTTE1NC45LDEwMy43aC0xLjV2LThoMS41VjEwMy43eiIgc3R5bGU9ImZpbGw6IHJnYig5NiwgMTAwLCAxMDUpOyIvPgogICAgICAgIDxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik0xNTguNCwxMDMuN2gtMS41VjkyLjFoMS41VjEwMy43eiIgc3R5bGU9ImZpbGw6IHJnYig5NiwgMTAwLCAxMDUpOyIvPgogICAgICAgIDxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik0xNjIuNiwxMDRjLTAuOCwwLTEuNi0wLjItMi4xLTAuN2MtMC42LTAuNS0wLjktMS4xLTAuOS0xLjljMC0wLjksMC4zLTEuNSwxLTIuMWMwLjctMC41LDEuNS0wLjcsMi41LTAuNyBjMC45LDAsMS42LDAuMiwyLjIsMC41di0wLjJjMC0wLjYtMC4yLTEuMS0wLjYtMS40Yy0wLjQtMC40LTAuOS0wLjUtMS41LTAuNWMtMC40LDAtMC44LDAuMS0xLjIsMC4zYy0wLjQsMC4yLTAuNiwwLjUtMC43LDAuOCBsLTEuNC0wLjZjMC4yLTAuNSwwLjYtMC45LDEuMS0xLjNjMC41LTAuNCwxLjMtMC42LDIuMi0wLjZjMSwwLDEuOSwwLjMsMi41LDAuOWMwLjcsMC42LDEsMS40LDEsMi41djQuOGgtMS40di0xLjFoLTAuMSBDMTY0LjcsMTAzLjUsMTYzLjgsMTA0LDE2Mi42LDEwNHogTTE2Mi45LDEwMi42YzAuNiwwLDEuMi0wLjIsMS43LTAuN2MwLjUtMC41LDAuOC0xLDAuOC0xLjZjLTAuNC0wLjQtMS4xLTAuNS0xLjktMC41IGMtMC43LDAtMS4zLDAuMi0xLjcsMC41Yy0wLjQsMC4zLTAuNiwwLjctMC42LDEuMWMwLDAuNCwwLjIsMC43LDAuNSwwLjlDMTYyLjEsMTAyLjUsMTYyLjUsMTAyLjYsMTYyLjksMTAyLjZ6IiBzdHlsZT0iZmlsbDogcmdiKDk2LCAxMDAsIDEwNSk7Ii8+CiAgICAgICAgPHBhdGggY2xhc3M9InN0MCIgZD0iTTE3Mi43LDEwNGMtMC42LDAtMS4yLTAuMS0xLjYtMC40Yy0wLjUtMC4zLTAuOC0wLjYtMS4xLTFoLTAuMXYxLjFoLTEuNFY5Mi4xaDEuNXYzLjdsLTAuMSwxLjFoMC4xIGMwLjItMC40LDAuNi0wLjcsMS4xLTFjMC41LTAuMywxLTAuNCwxLjYtMC40YzEsMCwxLjksMC40LDIuNywxLjJjMC44LDAuOCwxLjEsMS44LDEuMSwzYzAsMS4yLTAuNCwyLjItMS4xLDMgQzE3NC42LDEwMy42LDE3My43LDEwNCwxNzIuNywxMDR6IE0xNzIuNSwxMDIuNmMwLjcsMCwxLjMtMC4zLDEuOC0wLjhjMC41LTAuNSwwLjgtMS4yLDAuOC0yLjFjMC0wLjktMC4yLTEuNi0wLjgtMi4xIGMtMC41LTAuNS0xLjEtMC44LTEuOC0wLjhjLTAuNywwLTEuMywwLjMtMS44LDAuOGMtMC41LDAuNS0wLjcsMS4yLTAuNywyLjFjMCwwLjksMC4yLDEuNiwwLjcsMi4xIEMxNzEuMSwxMDIuNCwxNzEuNywxMDIuNiwxNzIuNSwxMDIuNnoiIHN0eWxlPSJmaWxsOiByZ2IoOTYsIDEwMCwgMTA1KTsiLz4KICAgICAgICA8cGF0aCBjbGFzcz0ic3QwIiBkPSJNMTc5LjMsMTAzLjdoLTEuNVY5Mi4xaDEuNVYxMDMuN3oiIHN0eWxlPSJmaWxsOiByZ2IoOTYsIDEwMCwgMTA1KTsiLz4KICAgICAgICA8cGF0aCBjbGFzcz0ic3QwIiBkPSJNMTg0LjcsMTA0Yy0xLjIsMC0yLjItMC40LTIuOS0xLjJjLTAuOC0wLjgtMS4xLTEuOC0xLjEtMy4xYzAtMS4yLDAuNC0yLjIsMS4xLTNjMC43LTAuOCwxLjctMS4zLDIuOC0xLjMgYzEuMiwwLDIuMSwwLjQsMi45LDEuMmMwLjcsMC44LDEuMSwxLjgsMS4xLDMuMWwwLDAuM2gtNi4zYzAsMC44LDAuMywxLjQsMC44LDEuOWMwLjUsMC41LDEuMSwwLjcsMS43LDAuNyBjMS4xLDAsMS44LTAuNSwyLjItMS40bDEuMywwLjZjLTAuMywwLjYtMC43LDEuMS0xLjMsMS42QzE4Ni4zLDEwMy44LDE4NS41LDEwNCwxODQuNywxMDR6IE0xODYuOCw5OC44YzAtMC41LTAuMi0wLjktMC42LTEuMyBzLTEtMC42LTEuNy0wLjZjLTAuNiwwLTEsMC4yLTEuNCwwLjVjLTAuNCwwLjQtMC43LDAuOC0wLjgsMS40TDE4Ni44LDk4LjhMMTg2LjgsOTguOHoiIHN0eWxlPSJmaWxsOiByZ2IoOTYsIDEwMCwgMTA1KTsiLz4KICAgICAgICA8cGF0aCBjbGFzcz0ic3QwIiBkPSJNMTk1LDkzLjdjLTAuMiwwLjItMC41LDAuMy0wLjgsMC4zcy0wLjUtMC4xLTAuOC0wLjNjLTAuMi0wLjItMC4zLTAuNS0wLjMtMC44czAuMS0wLjUsMC4zLTAuOCBjMC4yLTAuMiwwLjUtMC4zLDAuOC0wLjNzMC41LDAuMSwwLjgsMC4zYzAuMiwwLjIsMC4zLDAuNSwwLjMsMC44UzE5NS4yLDkzLjUsMTk1LDkzLjd6IE0xOTUsMTAzLjdoLTEuNXYtOGgxLjVWMTAzLjd6IiBzdHlsZT0iZmlsbDogcmdiKDk2LCAxMDAsIDEwNSk7Ii8+CiAgICAgICAgPHBhdGggY2xhc3M9InN0MCIgZD0iTTE5OC40LDk1Ljd2MS4xaDAuMWMwLjItMC40LDAuNi0wLjcsMS0xYzAuNS0wLjMsMS0wLjQsMS41LTAuNGMxLDAsMS43LDAuMywyLjMsMC45IGMwLjUsMC42LDAuOCwxLjQsMC44LDIuNXY0LjloLTEuNXYtNC43YzAtMS41LTAuNy0yLjItMi0yLjJjLTAuNiwwLTEuMSwwLjItMS41LDAuN2MtMC40LDAuNS0wLjYsMS4xLTAuNiwxLjd2NC40SDE5N3YtOCBMMTk4LjQsOTUuN0wxOTguNCw5NS43eiIgc3R5bGU9ImZpbGw6IHJnYig5NiwgMTAwLCAxMDUpOyIvPgogICAgICAgIDxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik0yMTIuOSwxMDMuOWMtMC44LDAtMS41LTAuMi0xLjktMC43Yy0wLjQtMC40LTAuNy0xLjEtMC43LTEuOXYtNC4yaC0xLjR2LTEuNGgxLjR2LTIuNWgxLjV2Mi41aDJ2MS40aC0yIHY0LjFjMCwwLjksMC40LDEuMywxLjEsMS4zYzAuMywwLDAuNSwwLDAuNy0wLjFsMC41LDEuM0MyMTMuOCwxMDMuOCwyMTMuNCwxMDMuOSwyMTIuOSwxMDMuOXoiIHN0eWxlPSJmaWxsOiByZ2IoOTYsIDEwMCwgMTA1KTsiLz4KICAgICAgICA8cGF0aCBjbGFzcz0ic3QwIiBkPSJNMjE2LjgsOTIuMXYzLjdsLTAuMSwxLjFoMC4xYzAuMi0wLjQsMC42LTAuNywxLTFjMC41LTAuMywxLTAuNCwxLjUtMC40YzEsMCwxLjcsMC4zLDIuMywwLjkgYzAuNSwwLjYsMC44LDEuNCwwLjgsMi41djQuOWgtMS41di00LjdjMC0xLjUtMC43LTIuMi0yLTIuMmMtMC42LDAtMS4xLDAuMi0xLjUsMC43Yy0wLjQsMC41LTAuNiwxLjEtMC42LDEuN3Y0LjRoLTEuNVY5Mi4xIEwyMTYuOCw5Mi4xTDIxNi44LDkyLjF6IiBzdHlsZT0iZmlsbDogcmdiKDk2LCAxMDAsIDEwNSk7Ii8+CiAgICAgICAgPHBhdGggY2xhc3M9InN0MCIgZD0iTTIyNy44LDEwNGMtMS4yLDAtMi4yLTAuNC0yLjktMS4yYy0wLjgtMC44LTEuMS0xLjgtMS4xLTMuMWMwLTEuMiwwLjQtMi4yLDEuMS0zczEuNy0xLjMsMi44LTEuMyBjMS4yLDAsMi4xLDAuNCwyLjksMS4yYzAuNywwLjgsMS4xLDEuOCwxLjEsMy4xbDAsMC4zaC02LjNjMCwwLjgsMC4zLDEuNCwwLjgsMS45YzAuNSwwLjUsMS4xLDAuNywxLjcsMC43IGMxLjEsMCwxLjgtMC41LDIuMi0xLjRsMS4zLDAuNmMtMC4zLDAuNi0wLjcsMS4xLTEuMywxLjZDMjI5LjQsMTAzLjgsMjI4LjYsMTA0LDIyNy44LDEwNHogTTIyOS45LDk4LjhjMC0wLjUtMC4yLTAuOS0wLjYtMS4zIGMtMC40LTAuNC0xLTAuNi0xLjctMC42Yy0wLjYsMC0xLDAuMi0xLjQsMC41Yy0wLjQsMC40LTAuNywwLjgtMC44LDEuNEwyMjkuOSw5OC44TDIyOS45LDk4Ljh6IiBzdHlsZT0iZmlsbDogcmdiKDk2LCAxMDAsIDEwNSk7Ii8+CiAgICAgIDwvZz4KICAgIDwvZz4KICAgIDxnPgogICAgICA8Zz4KICAgICAgICA8Zz4KICAgICAgICAgIDxkZWZzPgogICAgICAgICAgICA8cGF0aCBpZD0iU1ZHSURfMV8iIGQ9Ik00Niw4Mi4ydjUxLjFjMCwyLjQsMiw0LjQsNC40LDQuNGg1NS41YzIuNCwwLDQuNC0yLDQuNC00LjRWODIuMkg0NnogTTg1LjQsOTMuOUg3MC44IGMtMS42LDAtMi45LTEuMy0yLjktMi45czEuMy0yLjksMi45LTIuOWgxNC42YzEuNiwwLDIuOSwxLjMsMi45LDIuOVM4Nyw5My45LDg1LjQsOTMuOXoiLz4KICAgICAgICAgIDwvZGVmcz4KICAgICAgICAgIDxjbGlwUGF0aCBpZD0iU1ZHSURfMl8iPgogICAgICAgICAgICA8cGF0aCBkPSJNNDYsODIuMnY1MS4xYzAsMi40LDIsNC40LDQuNCw0LjRoNTUuNWMyLjQsMCw0LjQtMiw0LjQtNC40VjgyLjJINDZ6IE04NS40LDkzLjlINzAuOCBjLTEuNiwwLTIuOS0xLjMtMi45LTIuOXMxLjMtMi45LDIuOS0yLjloMTQuNmMxLjYsMCwyLjksMS4zLDIuOSwyLjlTODcsOTMuOSw4NS40LDkzLjl6IiBzdHlsZT0ib3ZlcmZsb3c6IHZpc2libGU7Ii8+CiAgICAgICAgICA8L2NsaXBQYXRoPgogICAgICAgICAgPHBhdGggY2xhc3M9InN0MSIgZD0iTTQ2LDgyLjJoNjQuM3Y1NS41SDQ2VjgyLjJ6IiBzdHlsZT0iY2xpcC1wYXRoOiB1cmwoI1NWR0lEXzJfKTsgZmlsbDogcmdiKDIzOCwgMjM3LCAyMzgpOyIvPgogICAgICAgIDwvZz4KICAgICAgPC9nPgogICAgICA8Zz4KICAgICAgICA8Zz4KICAgICAgICAgIDxkZWZzPgogICAgICAgICAgICA8cGF0aCBpZD0iU1ZHSURfM18iIGQ9Ik00Niw4Mi4ydjUxLjFjMCwyLjQsMiw0LjQsNC40LDQuNGg1NS41YzIuNCwwLDQuNC0yLDQuNC00LjRWODIuMkg0NnogTTg1LjQsOTMuOUg3MC44IGMtMS42LDAtMi45LTEuMy0yLjktMi45czEuMy0yLjksMi45LTIuOWgxNC42YzEuNiwwLDIuOSwxLjMsMi45LDIuOVM4Nyw5My45LDg1LjQsOTMuOXoiLz4KICAgICAgICAgIDwvZGVmcz4KICAgICAgICAgIDxjbGlwUGF0aCBpZD0iU1ZHSURfNF8iPgogICAgICAgICAgICA8cGF0aCBkPSJNNDYsODIuMnY1MS4xYzAsMi40LDIsNC40LDQuNCw0LjRoNTUuNWMyLjQsMCw0LjQtMiw0LjQtNC40VjgyLjJINDZ6IE04NS40LDkzLjlINzAuOCBjLTEuNiwwLTIuOS0xLjMtMi45LTIuOXMxLjMtMi45LDIuOS0yLjloMTQuNmMxLjYsMCwyLjksMS4zLDIuOSwyLjlTODcsOTMuOSw4NS40LDkzLjl6IiBzdHlsZT0ib3ZlcmZsb3c6IHZpc2libGU7Ii8+CiAgICAgICAgICA8L2NsaXBQYXRoPgogICAgICAgICAgPHBhdGggY2xhc3M9InN0MiIgZD0iTTg1LjQsODguMUg3MC44Yy0xLjYsMC0yLjksMS4zLTIuOSwyLjlzMS4zLDIuOSwyLjksMi45aDE0LjZjMS42LDAsMi45LTEuMywyLjktMi45Uzg3LDg4LjEsODUuNCw4OC4xeiIgc3R5bGU9ImNsaXAtcGF0aDogdXJsKCNTVkdJRF80Xyk7IGZpbGw6IHJnYigyNTUsIDI1NSwgMjU1KTsiLz4KICAgICAgICA8L2c+CiAgICAgIDwvZz4KICAgICAgPGc+CiAgICAgICAgPGc+CiAgICAgICAgICA8ZGVmcz4KICAgICAgICAgICAgPHBhdGggaWQ9IlNWR0lEXzVfIiBkPSJNNDYsODIuMnY1MS4xYzAsMi40LDIsNC40LDQuNCw0LjRoNTUuNWMyLjQsMCw0LjQtMiw0LjQtNC40VjgyLjJINDZ6IE04NS40LDkzLjlINzAuOCBjLTEuNiwwLTIuOS0xLjMtMi45LTIuOXMxLjMtMi45LDIuOS0yLjloMTQuNmMxLjYsMCwyLjksMS4zLDIuOSwyLjlTODcsOTMuOSw4NS40LDkzLjl6Ii8+CiAgICAgICAgICA8L2RlZnM+CiAgICAgICAgICA8Y2xpcFBhdGggaWQ9IlNWR0lEXzZfIj4KICAgICAgICAgICAgPHBhdGggZD0iTTQ2LDgyLjJ2NTEuMWMwLDIuNCwyLDQuNCw0LjQsNC40aDU1LjVjMi40LDAsNC40LTIsNC40LTQuNFY4Mi4ySDQ2eiBNODUuNCw5My45SDcwLjggYy0xLjYsMC0yLjktMS4zLTIuOS0yLjlzMS4zLTIuOSwyLjktMi45aDE0LjZjMS42LDAsMi45LDEuMywyLjksMi45Uzg3LDkzLjksODUuNCw5My45eiIgc3R5bGU9Im92ZXJmbG93OiB2aXNpYmxlOyIvPgogICAgICAgICAgPC9jbGlwUGF0aD4KICAgICAgICAgIDxnIGNsYXNzPSJzdDMiIHN0eWxlPSJjbGlwLXBhdGg6IHVybCgjU1ZHSURfNl8pOyI+CiAgICAgICAgICAgIDxnPgogICAgICAgICAgICAgIDxnPgogICAgICAgICAgICAgICAgPGRlZnM+CiAgICAgICAgICAgICAgICAgIDxlbGxpcHNlIGlkPSJTVkdJRF83XyIgdHJhbnNmb3JtPSJtYXRyaXgoNy4wODg5MDJlLTAyIC0wLjk5NzUgMC45OTc1IDcuMDg4OTAyZS0wMiAtNjAuNDQ5NCAyMDEuODM4MikiIGN4PSI3OC4xIiBjeT0iMTMzLjQiIHJ4PSIyNy44IiByeT0iMjcuOCIvPgogICAgICAgICAgICAgICAgPC9kZWZzPgogICAgICAgICAgICAgIDwvZz4KICAgICAgICAgICAgICA8Zz4KICAgICAgICAgICAgICAgIDxkZWZzPgogICAgICAgICAgICAgICAgICA8ZWxsaXBzZSBpZD0iU1ZHSURfOV8iIHRyYW5zZm9ybT0ibWF0cml4KDcuMDg4OTAyZS0wMiAtMC45OTc1IDAuOTk3NSA3LjA4ODkwMmUtMDIgLTYwLjQ0OTQgMjAxLjgzODIpIiBjeD0iNzguMSIgY3k9IjEzMy40IiByeD0iMjcuOCIgcnk9IjI3LjgiLz4KICAgICAgICAgICAgICAgIDwvZGVmcz4KICAgICAgICAgICAgICAgIDxkZWZzPgogICAgICAgICAgICAgICAgICA8ZWxsaXBzZSBpZD0iU1ZHSURfMTBfIiB0cmFuc2Zvcm09Im1hdHJpeCg3LjA4ODkwMmUtMDIgLTAuOTk3NSAwLjk5NzUgNy4wODg5MDJlLTAyIC02MC40NDk0IDIwMS44MzgyKSIgY3g9Ijc4LjEiIGN5PSIxMzMuNCIgcng9IjI3LjgiIHJ5PSIyNy44Ii8+CiAgICAgICAgICAgICAgICA8L2RlZnM+CiAgICAgICAgICAgICAgPC9nPgogICAgICAgICAgICAgIDxnPgogICAgICAgICAgICAgICAgPGRlZnM+CiAgICAgICAgICAgICAgICAgIDxlbGxpcHNlIGlkPSJTVkdJRF8xM18iIHRyYW5zZm9ybT0ibWF0cml4KDcuMDg4OTAyZS0wMiAtMC45OTc1IDAuOTk3NSA3LjA4ODkwMmUtMDIgLTYwLjQ0OTQgMjAxLjgzODIpIiBjeD0iNzguMSIgY3k9IjEzMy40IiByeD0iMjcuOCIgcnk9IjI3LjgiLz4KICAgICAgICAgICAgICAgIDwvZGVmcz4KICAgICAgICAgICAgICAgIDxkZWZzPgogICAgICAgICAgICAgICAgICA8ZWxsaXBzZSBpZD0iU1ZHSURfMTRfIiB0cmFuc2Zvcm09Im1hdHJpeCg3LjA4ODkwMmUtMDIgLTAuOTk3NSAwLjk5NzUgNy4wODg5MDJlLTAyIC02MC40NDk0IDIwMS44MzgyKSIgY3g9Ijc4LjEiIGN5PSIxMzMuNCIgcng9IjI3LjgiIHJ5PSIyNy44Ii8+CiAgICAgICAgICAgICAgICA8L2RlZnM+CiAgICAgICAgICAgICAgICA8ZGVmcz4KICAgICAgICAgICAgICAgICAgPGVsbGlwc2UgaWQ9IlNWR0lEXzE1XyIgdHJhbnNmb3JtPSJtYXRyaXgoNy4wODg5MDJlLTAyIC0wLjk5NzUgMC45OTc1IDcuMDg4OTAyZS0wMiAtNjAuNDQ5NCAyMDEuODM4MikiIGN4PSI3OC4xIiBjeT0iMTMzLjQiIHJ4PSIyNy44IiByeT0iMjcuOCIvPgogICAgICAgICAgICAgICAgPC9kZWZzPgogICAgICAgICAgICAgIDwvZz4KICAgICAgICAgICAgICA8Zz4KICAgICAgICAgICAgICAgIDxkZWZzPgogICAgICAgICAgICAgICAgICA8ZWxsaXBzZSBpZD0iU1ZHSURfMTlfIiB0cmFuc2Zvcm09Im1hdHJpeCg3LjA4ODkwMmUtMDIgLTAuOTk3NSAwLjk5NzUgNy4wODg5MDJlLTAyIC02MC40NDk0IDIwMS44MzgyKSIgY3g9Ijc4LjEiIGN5PSIxMzMuNCIgcng9IjI3LjgiIHJ5PSIyNy44Ii8+CiAgICAgICAgICAgICAgICA8L2RlZnM+CiAgICAgICAgICAgICAgICA8ZGVmcz4KICAgICAgICAgICAgICAgICAgPGVsbGlwc2UgaWQ9IlNWR0lEXzIwXyIgdHJhbnNmb3JtPSJtYXRyaXgoNy4wODg5MDJlLTAyIC0wLjk5NzUgMC45OTc1IDcuMDg4OTAyZS0wMiAtNjAuNDQ5NCAyMDEuODM4MikiIGN4PSI3OC4xIiBjeT0iMTMzLjQiIHJ4PSIyNy44IiByeT0iMjcuOCIvPgogICAgICAgICAgICAgICAgPC9kZWZzPgogICAgICAgICAgICAgICAgPGRlZnM+CiAgICAgICAgICAgICAgICAgIDxlbGxpcHNlIGlkPSJTVkdJRF8yMV8iIHRyYW5zZm9ybT0ibWF0cml4KDcuMDg4OTAyZS0wMiAtMC45OTc1IDAuOTk3NSA3LjA4ODkwMmUtMDIgLTYwLjQ0OTQgMjAxLjgzODIpIiBjeD0iNzguMSIgY3k9IjEzMy40IiByeD0iMjcuOCIgcnk9IjI3LjgiLz4KICAgICAgICAgICAgICAgIDwvZGVmcz4KICAgICAgICAgICAgICAgIDxkZWZzPgogICAgICAgICAgICAgICAgICA8ZWxsaXBzZSBpZD0iU1ZHSURfMjJfIiB0cmFuc2Zvcm09Im1hdHJpeCg3LjA4ODkwMmUtMDIgLTAuOTk3NSAwLjk5NzUgNy4wODg5MDJlLTAyIC02MC40NDk0IDIwMS44MzgyKSIgY3g9Ijc4LjEiIGN5PSIxMzMuNCIgcng9IjI3LjgiIHJ5PSIyNy44Ii8+CiAgICAgICAgICAgICAgICA8L2RlZnM+CiAgICAgICAgICAgICAgICA8Y2xpcFBhdGggaWQ9IlNWR0lEXzIzXyI+CiAgICAgICAgICAgICAgICAgIDxlbGxpcHNlIHRyYW5zZm9ybT0ibWF0cml4KDAuMDcwODg5MDE4NDc2MDA5MzcsIC0wLjk5NzUwMDA2MTk4ODgzMDYsIDAuOTk3NTAwMDYxOTg4ODMwNiwgMC4wNzA4ODkwMTg0NzYwMDkzNywgLTYwLjQ0OTQwMjc1NjIzNTAzLCAyMDEuODM4MTk4ODA4NDA0NzQpIiBjeD0iNzguMSIgY3k9IjEzMy40IiByeD0iMjcuOCIgcnk9IjI3LjgiIHN0eWxlPSJvdmVyZmxvdzogdmlzaWJsZTsiLz4KICAgICAgICAgICAgICAgIDwvY2xpcFBhdGg+CiAgICAgICAgICAgICAgICA8Y2xpcFBhdGggaWQ9IlNWR0lEXzI0XyIgY2xhc3M9InN0NyIgc3R5bGU9ImNsaXAtcGF0aDogdXJsKCNTVkdJRF8yM18pOyI+CiAgICAgICAgICAgICAgICAgIDxlbGxpcHNlIHRyYW5zZm9ybT0ibWF0cml4KDAuMDcwODg5MDE4NDc2MDA5MzcsIC0wLjk5NzUwMDA2MTk4ODgzMDYsIDAuOTk3NTAwMDYxOTg4ODMwNiwgMC4wNzA4ODkwMTg0NzYwMDkzNywgLTYwLjQ0OTQwMjc1NjIzNTAzLCAyMDEuODM4MTk4ODA4NDA0NzQpIiBjeD0iNzguMSIgY3k9IjEzMy40IiByeD0iMjcuOCIgcnk9IjI3LjgiIHN0eWxlPSJvdmVyZmxvdzogdmlzaWJsZTsiLz4KICAgICAgICAgICAgICAgIDwvY2xpcFBhdGg+CiAgICAgICAgICAgICAgICA8Y2xpcFBhdGggaWQ9IlNWR0lEXzI1XyIgY2xhc3M9InN0OCIgc3R5bGU9ImNsaXAtcGF0aDogdXJsKCNTVkdJRF8yNF8pOyI+CiAgICAgICAgICAgICAgICAgIDxlbGxpcHNlIHRyYW5zZm9ybT0ibWF0cml4KDAuMDcwODg5MDE4NDc2MDA5MzcsIC0wLjk5NzUwMDA2MTk4ODgzMDYsIDAuOTk3NTAwMDYxOTg4ODMwNiwgMC4wNzA4ODkwMTg0NzYwMDkzNywgLTYwLjQ0OTQwMjc1NjIzNTAzLCAyMDEuODM4MTk4ODA4NDA0NzQpIiBjeD0iNzguMSIgY3k9IjEzMy40IiByeD0iMjcuOCIgcnk9IjI3LjgiIHN0eWxlPSJvdmVyZmxvdzogdmlzaWJsZTsiLz4KICAgICAgICAgICAgICAgIDwvY2xpcFBhdGg+CiAgICAgICAgICAgICAgICA8Y2xpcFBhdGggaWQ9IlNWR0lEXzI2XyIgY2xhc3M9InN0OSIgc3R5bGU9ImNsaXAtcGF0aDogdXJsKCNTVkdJRF8yNV8pOyI+CiAgICAgICAgICAgICAgICAgIDxlbGxpcHNlIHRyYW5zZm9ybT0ibWF0cml4KDAuMDcwODg5MDE4NDc2MDA5MzcsIC0wLjk5NzUwMDA2MTk4ODgzMDYsIDAuOTk3NTAwMDYxOTg4ODMwNiwgMC4wNzA4ODkwMTg0NzYwMDkzNywgLTYwLjQ0OTQwMjc1NjIzNTAzLCAyMDEuODM4MTk4ODA4NDA0NzQpIiBjeD0iNzguMSIgY3k9IjEzMy40IiByeD0iMjcuOCIgcnk9IjI3LjgiIHN0eWxlPSJvdmVyZmxvdzogdmlzaWJsZTsiLz4KICAgICAgICAgICAgICAgIDwvY2xpcFBhdGg+CiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0ic3QxMCIgZD0iTTU0LjgsMTA1LjZ2MzQuMWgxMi40bDEwLjktMTguOWgyNy44di0xNS4xSDU0Ljh6IE01NC44LDEwNS42djM0LjFoMTIuNGwxMC45LTE4LjloMjcuOHYtMTUuMUg1NC44eiIgc3R5bGU9ImNsaXAtcGF0aDogdXJsKCNTVkdJRF8yNl8pOyBmaWxsOiByZ2IoMjIwLCA3MCwgNTUpOyIvPgogICAgICAgICAgICAgIDwvZz4KICAgICAgICAgICAgICA8Zz4KICAgICAgICAgICAgICAgIDxkZWZzPgogICAgICAgICAgICAgICAgICA8ZWxsaXBzZSBpZD0iU1ZHSURfMjdfIiB0cmFuc2Zvcm09Im1hdHJpeCg3LjA4ODkwMmUtMDIgLTAuOTk3NSAwLjk5NzUgNy4wODg5MDJlLTAyIC02MC40NDk0IDIwMS44MzgyKSIgY3g9Ijc4LjEiIGN5PSIxMzMuNCIgcng9IjI3LjgiIHJ5PSIyNy44Ii8+CiAgICAgICAgICAgICAgICA8L2RlZnM+CiAgICAgICAgICAgICAgICA8ZGVmcz4KICAgICAgICAgICAgICAgICAgPGVsbGlwc2UgaWQ9IlNWR0lEXzI4XyIgdHJhbnNmb3JtPSJtYXRyaXgoNy4wODg5MDJlLTAyIC0wLjk5NzUgMC45OTc1IDcuMDg4OTAyZS0wMiAtNjAuNDQ5NCAyMDEuODM4MikiIGN4PSI3OC4xIiBjeT0iMTMzLjQiIHJ4PSIyNy44IiByeT0iMjcuOCIvPgogICAgICAgICAgICAgICAgPC9kZWZzPgogICAgICAgICAgICAgICAgPGRlZnM+CiAgICAgICAgICAgICAgICAgIDxlbGxpcHNlIGlkPSJTVkdJRF8yOV8iIHRyYW5zZm9ybT0ibWF0cml4KDcuMDg4OTAyZS0wMiAtMC45OTc1IDAuOTk3NSA3LjA4ODkwMmUtMDIgLTYwLjQ0OTQgMjAxLjgzODIpIiBjeD0iNzguMSIgY3k9IjEzMy40IiByeD0iMjcuOCIgcnk9IjI3LjgiLz4KICAgICAgICAgICAgICAgIDwvZGVmcz4KICAgICAgICAgICAgICAgIDxkZWZzPgogICAgICAgICAgICAgICAgICA8ZWxsaXBzZSBpZD0iU1ZHSURfMzBfIiB0cmFuc2Zvcm09Im1hdHJpeCg3LjA4ODkwMmUtMDIgLTAuOTk3NSAwLjk5NzUgNy4wODg5MDJlLTAyIC02MC40NDk0IDIwMS44MzgyKSIgY3g9Ijc4LjEiIGN5PSIxMzMuNCIgcng9IjI3LjgiIHJ5PSIyNy44Ii8+CiAgICAgICAgICAgICAgICA8L2RlZnM+CiAgICAgICAgICAgICAgICA8Y2xpcFBhdGggaWQ9IlNWR0lEXzMxXyI+CiAgICAgICAgICAgICAgICAgIDxlbGxpcHNlIHRyYW5zZm9ybT0ibWF0cml4KDAuMDcwODg5MDE4NDc2MDA5MzcsIC0wLjk5NzUwMDA2MTk4ODgzMDYsIDAuOTk3NTAwMDYxOTg4ODMwNiwgMC4wNzA4ODkwMTg0NzYwMDkzNywgLTYwLjQ0OTQwMjc1NjIzNTAzLCAyMDEuODM4MTk4ODA4NDA0NzQpIiBjeD0iNzguMSIgY3k9IjEzMy40IiByeD0iMjcuOCIgcnk9IjI3LjgiIHN0eWxlPSJvdmVyZmxvdzogdmlzaWJsZTsiLz4KICAgICAgICAgICAgICAgIDwvY2xpcFBhdGg+CiAgICAgICAgICAgICAgICA8Y2xpcFBhdGggaWQ9IlNWR0lEXzMyXyIgY2xhc3M9InN0MTEiIHN0eWxlPSJjbGlwLXBhdGg6IHVybCgjU1ZHSURfMzFfKTsiPgogICAgICAgICAgICAgICAgICA8ZWxsaXBzZSB0cmFuc2Zvcm09Im1hdHJpeCgwLjA3MDg4OTAxODQ3NjAwOTM3LCAtMC45OTc1MDAwNjE5ODg4MzA2LCAwLjk5NzUwMDA2MTk4ODgzMDYsIDAuMDcwODg5MDE4NDc2MDA5MzcsIC02MC40NDk0MDI3NTYyMzUwMywgMjAxLjgzODE5ODgwODQwNDc0KSIgY3g9Ijc4LjEiIGN5PSIxMzMuNCIgcng9IjI3LjgiIHJ5PSIyNy44IiBzdHlsZT0ib3ZlcmZsb3c6IHZpc2libGU7Ii8+CiAgICAgICAgICAgICAgICA8L2NsaXBQYXRoPgogICAgICAgICAgICAgICAgPGNsaXBQYXRoIGlkPSJTVkdJRF8zM18iIGNsYXNzPSJzdDEyIiBzdHlsZT0iY2xpcC1wYXRoOiB1cmwoI1NWR0lEXzMyXyk7Ij4KICAgICAgICAgICAgICAgICAgPGVsbGlwc2UgdHJhbnNmb3JtPSJtYXRyaXgoMC4wNzA4ODkwMTg0NzYwMDkzNywgLTAuOTk3NTAwMDYxOTg4ODMwNiwgMC45OTc1MDAwNjE5ODg4MzA2LCAwLjA3MDg4OTAxODQ3NjAwOTM3LCAtNjAuNDQ5NDAyNzU2MjM1MDMsIDIwMS44MzgxOTg4MDg0MDQ3NCkiIGN4PSI3OC4xIiBjeT0iMTMzLjQiIHJ4PSIyNy44IiByeT0iMjcuOCIgc3R5bGU9Im92ZXJmbG93OiB2aXNpYmxlOyIvPgogICAgICAgICAgICAgICAgPC9jbGlwUGF0aD4KICAgICAgICAgICAgICAgIDxjbGlwUGF0aCBpZD0iU1ZHSURfMzRfIiBjbGFzcz0ic3QxMyIgc3R5bGU9ImNsaXAtcGF0aDogdXJsKCNTVkdJRF8zM18pOyI+CiAgICAgICAgICAgICAgICAgIDxlbGxpcHNlIHRyYW5zZm9ybT0ibWF0cml4KDAuMDcwODg5MDE4NDc2MDA5MzcsIC0wLjk5NzUwMDA2MTk4ODgzMDYsIDAuOTk3NTAwMDYxOTg4ODMwNiwgMC4wNzA4ODkwMTg0NzYwMDkzNywgLTYwLjQ0OTQwMjc1NjIzNTAzLCAyMDEuODM4MTk4ODA4NDA0NzQpIiBjeD0iNzguMSIgY3k9IjEzMy40IiByeD0iMjcuOCIgcnk9IjI3LjgiIHN0eWxlPSJvdmVyZmxvdzogdmlzaWJsZTsiLz4KICAgICAgICAgICAgICAgIDwvY2xpcFBhdGg+CiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0ic3QxNCIgZD0iTTUwLjQsMTYxLjFoMjYuNEw4OSwxNDguOXYtOS4ySDY3LjJsLTE2LjgtMjguOUM1MC40LDExMC44LDUwLjQsMTYxLjEsNTAuNCwxNjEuMXogTTUwLjQsMTYxLjFoMjYuNCBMODksMTQ4Ljl2LTkuMkg2Ny4ybC0xNi44LTI4LjlDNTAuNCwxMTAuOCw1MC40LDE2MS4xLDUwLjQsMTYxLjF6IiBzdHlsZT0iY2xpcC1wYXRoOiB1cmwoI1NWR0lEXzM0Xyk7IGZpbGw6IHJnYigxNSwgMTU3LCA4OCk7Ii8+CiAgICAgICAgICAgICAgPC9nPgogICAgICAgICAgICAgIDxnPgogICAgICAgICAgICAgICAgPGRlZnM+CiAgICAgICAgICAgICAgICAgIDxlbGxpcHNlIGlkPSJTVkdJRF8zNV8iIHRyYW5zZm9ybT0ibWF0cml4KDcuMDg4OTAyZS0wMiAtMC45OTc1IDAuOTk3NSA3LjA4ODkwMmUtMDIgLTYwLjQ0OTQgMjAxLjgzODIpIiBjeD0iNzguMSIgY3k9IjEzMy40IiByeD0iMjcuOCIgcnk9IjI3LjgiLz4KICAgICAgICAgICAgICAgIDwvZGVmcz4KICAgICAgICAgICAgICAgIDxkZWZzPgogICAgICAgICAgICAgICAgICA8ZWxsaXBzZSBpZD0iU1ZHSURfMzZfIiB0cmFuc2Zvcm09Im1hdHJpeCg3LjA4ODkwMmUtMDIgLTAuOTk3NSAwLjk5NzUgNy4wODg5MDJlLTAyIC02MC40NDk0IDIwMS44MzgyKSIgY3g9Ijc4LjEiIGN5PSIxMzMuNCIgcng9IjI3LjgiIHJ5PSIyNy44Ii8+CiAgICAgICAgICAgICAgICA8L2RlZnM+CiAgICAgICAgICAgICAgICA8ZGVmcz4KICAgICAgICAgICAgICAgICAgPGVsbGlwc2UgaWQ9IlNWR0lEXzM3XyIgdHJhbnNmb3JtPSJtYXRyaXgoNy4wODg5MDJlLTAyIC0wLjk5NzUgMC45OTc1IDcuMDg4OTAyZS0wMiAtNjAuNDQ5NCAyMDEuODM4MikiIGN4PSI3OC4xIiBjeT0iMTMzLjQiIHJ4PSIyNy44IiByeT0iMjcuOCIvPgogICAgICAgICAgICAgICAgPC9kZWZzPgogICAgICAgICAgICAgICAgPGRlZnM+CiAgICAgICAgICAgICAgICAgIDxlbGxpcHNlIGlkPSJTVkdJRF8zOF8iIHRyYW5zZm9ybT0ibWF0cml4KDcuMDg4OTAyZS0wMiAtMC45OTc1IDAuOTk3NSA3LjA4ODkwMmUtMDIgLTYwLjQ0OTQgMjAxLjgzODIpIiBjeD0iNzguMSIgY3k9IjEzMy40IiByeD0iMjcuOCIgcnk9IjI3LjgiLz4KICAgICAgICAgICAgICAgIDwvZGVmcz4KICAgICAgICAgICAgICAgIDxjbGlwUGF0aCBpZD0iU1ZHSURfMzlfIj4KICAgICAgICAgICAgICAgICAgPGVsbGlwc2UgdHJhbnNmb3JtPSJtYXRyaXgoMC4wNzA4ODkwMTg0NzYwMDkzNywgLTAuOTk3NTAwMDYxOTg4ODMwNiwgMC45OTc1MDAwNjE5ODg4MzA2LCAwLjA3MDg4OTAxODQ3NjAwOTM3LCAtNjAuNDQ5NDAyNzU2MjM1MDMsIDIwMS44MzgxOTg4MDg0MDQ3NCkiIGN4PSI3OC4xIiBjeT0iMTMzLjQiIHJ4PSIyNy44IiByeT0iMjcuOCIgc3R5bGU9Im92ZXJmbG93OiB2aXNpYmxlOyIvPgogICAgICAgICAgICAgICAgPC9jbGlwUGF0aD4KICAgICAgICAgICAgICAgIDxjbGlwUGF0aCBpZD0iU1ZHSURfNDBfIiBjbGFzcz0ic3QxNSIgc3R5bGU9ImNsaXAtcGF0aDogdXJsKCNTVkdJRF8zOV8pOyI+CiAgICAgICAgICAgICAgICAgIDxlbGxpcHNlIHRyYW5zZm9ybT0ibWF0cml4KDAuMDcwODg5MDE4NDc2MDA5MzcsIC0wLjk5NzUwMDA2MTk4ODgzMDYsIDAuOTk3NTAwMDYxOTg4ODMwNiwgMC4wNzA4ODkwMTg0NzYwMDkzNywgLTYwLjQ0OTQwMjc1NjIzNTAzLCAyMDEuODM4MTk4ODA4NDA0NzQpIiBjeD0iNzguMSIgY3k9IjEzMy40IiByeD0iMjcuOCIgcnk9IjI3LjgiIHN0eWxlPSJvdmVyZmxvdzogdmlzaWJsZTsiLz4KICAgICAgICAgICAgICAgIDwvY2xpcFBhdGg+CiAgICAgICAgICAgICAgICA8Y2xpcFBhdGggaWQ9IlNWR0lEXzQxXyIgY2xhc3M9InN0MTYiIHN0eWxlPSJjbGlwLXBhdGg6IHVybCgjU1ZHSURfNDBfKTsiPgogICAgICAgICAgICAgICAgICA8ZWxsaXBzZSB0cmFuc2Zvcm09Im1hdHJpeCgwLjA3MDg4OTAxODQ3NjAwOTM3LCAtMC45OTc1MDAwNjE5ODg4MzA2LCAwLjk5NzUwMDA2MTk4ODgzMDYsIDAuMDcwODg5MDE4NDc2MDA5MzcsIC02MC40NDk0MDI3NTYyMzUwMywgMjAxLjgzODE5ODgwODQwNDc0KSIgY3g9Ijc4LjEiIGN5PSIxMzMuNCIgcng9IjI3LjgiIHJ5PSIyNy44IiBzdHlsZT0ib3ZlcmZsb3c6IHZpc2libGU7Ii8+CiAgICAgICAgICAgICAgICA8L2NsaXBQYXRoPgogICAgICAgICAgICAgICAgPGNsaXBQYXRoIGlkPSJTVkdJRF80Ml8iIGNsYXNzPSJzdDE3IiBzdHlsZT0iY2xpcC1wYXRoOiB1cmwoI1NWR0lEXzQxXyk7Ij4KICAgICAgICAgICAgICAgICAgPGVsbGlwc2UgdHJhbnNmb3JtPSJtYXRyaXgoMC4wNzA4ODkwMTg0NzYwMDkzNywgLTAuOTk3NTAwMDYxOTg4ODMwNiwgMC45OTc1MDAwNjE5ODg4MzA2LCAwLjA3MDg4OTAxODQ3NjAwOTM3LCAtNjAuNDQ5NDAyNzU2MjM1MDMsIDIwMS44MzgxOTg4MDg0MDQ3NCkiIGN4PSI3OC4xIiBjeT0iMTMzLjQiIHJ4PSIyNy44IiByeT0iMjcuOCIgc3R5bGU9Im92ZXJmbG93OiB2aXNpYmxlOyIvPgogICAgICAgICAgICAgICAgPC9jbGlwUGF0aD4KICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJzdDE4IiBkPSJNNzguMSwxMjAuOEw4OSwxMzkuN2wtMTIuMywyMS40aDI5LjF2LTQwLjRINzguMXogTTc4LjEsMTIwLjhMODksMTM5LjdsLTEyLjMsMjEuNGgyOS4xdi00MC40SDc4LjF6IiBzdHlsZT0iY2xpcC1wYXRoOiB1cmwoI1NWR0lEXzQyXyk7IGZpbGw6IHJnYigyNTUsIDIwNiwgNjUpOyIvPgogICAgICAgICAgICAgIDwvZz4KICAgICAgICAgICAgICA8Zz4KICAgICAgICAgICAgICAgIDxkZWZzPgogICAgICAgICAgICAgICAgICA8ZWxsaXBzZSBpZD0iU1ZHSURfNDNfIiB0cmFuc2Zvcm09Im1hdHJpeCg3LjA4ODkwMmUtMDIgLTAuOTk3NSAwLjk5NzUgNy4wODg5MDJlLTAyIC02MC40NDk0IDIwMS44MzgyKSIgY3g9Ijc4LjEiIGN5PSIxMzMuNCIgcng9IjI3LjgiIHJ5PSIyNy44Ii8+CiAgICAgICAgICAgICAgICA8L2RlZnM+CiAgICAgICAgICAgICAgICA8ZGVmcz4KICAgICAgICAgICAgICAgICAgPGVsbGlwc2UgaWQ9IlNWR0lEXzQ0XyIgdHJhbnNmb3JtPSJtYXRyaXgoNy4wODg5MDJlLTAyIC0wLjk5NzUgMC45OTc1IDcuMDg4OTAyZS0wMiAtNjAuNDQ5NCAyMDEuODM4MikiIGN4PSI3OC4xIiBjeT0iMTMzLjQiIHJ4PSIyNy44IiByeT0iMjcuOCIvPgogICAgICAgICAgICAgICAgPC9kZWZzPgogICAgICAgICAgICAgICAgPGRlZnM+CiAgICAgICAgICAgICAgICAgIDxlbGxpcHNlIGlkPSJTVkdJRF80NV8iIHRyYW5zZm9ybT0ibWF0cml4KDcuMDg4OTAyZS0wMiAtMC45OTc1IDAuOTk3NSA3LjA4ODkwMmUtMDIgLTYwLjQ0OTQgMjAxLjgzODIpIiBjeD0iNzguMSIgY3k9IjEzMy40IiByeD0iMjcuOCIgcnk9IjI3LjgiLz4KICAgICAgICAgICAgICAgIDwvZGVmcz4KICAgICAgICAgICAgICAgIDxkZWZzPgogICAgICAgICAgICAgICAgICA8ZWxsaXBzZSBpZD0iU1ZHSURfNDZfIiB0cmFuc2Zvcm09Im1hdHJpeCg3LjA4ODkwMmUtMDIgLTAuOTk3NSAwLjk5NzUgNy4wODg5MDJlLTAyIC02MC40NDk0IDIwMS44MzgyKSIgY3g9Ijc4LjEiIGN5PSIxMzMuNCIgcng9IjI3LjgiIHJ5PSIyNy44Ii8+CiAgICAgICAgICAgICAgICA8L2RlZnM+CiAgICAgICAgICAgICAgICA8Y2xpcFBhdGggaWQ9IlNWR0lEXzQ3XyI+CiAgICAgICAgICAgICAgICAgIDxlbGxpcHNlIHRyYW5zZm9ybT0ibWF0cml4KDAuMDcwODg5MDE4NDc2MDA5MzcsIC0wLjk5NzUwMDA2MTk4ODgzMDYsIDAuOTk3NTAwMDYxOTg4ODMwNiwgMC4wNzA4ODkwMTg0NzYwMDkzNywgLTYwLjQ0OTQwMjc1NjIzNTAzLCAyMDEuODM4MTk4ODA4NDA0NzQpIiBjeD0iNzguMSIgY3k9IjEzMy40IiByeD0iMjcuOCIgcnk9IjI3LjgiIHN0eWxlPSJvdmVyZmxvdzogdmlzaWJsZTsiLz4KICAgICAgICAgICAgICAgIDwvY2xpcFBhdGg+CiAgICAgICAgICAgICAgICA8Y2xpcFBhdGggaWQ9IlNWR0lEXzQ4XyIgY2xhc3M9InN0MTkiIHN0eWxlPSJjbGlwLXBhdGg6IHVybCgjU1ZHSURfNDdfKTsiPgogICAgICAgICAgICAgICAgICA8ZWxsaXBzZSB0cmFuc2Zvcm09Im1hdHJpeCgwLjA3MDg4OTAxODQ3NjAwOTM3LCAtMC45OTc1MDAwNjE5ODg4MzA2LCAwLjk5NzUwMDA2MTk4ODgzMDYsIDAuMDcwODg5MDE4NDc2MDA5MzcsIC02MC40NDk0MDI3NTYyMzUwMywgMjAxLjgzODE5ODgwODQwNDc0KSIgY3g9Ijc4LjEiIGN5PSIxMzMuNCIgcng9IjI3LjgiIHJ5PSIyNy44IiBzdHlsZT0ib3ZlcmZsb3c6IHZpc2libGU7Ii8+CiAgICAgICAgICAgICAgICA8L2NsaXBQYXRoPgogICAgICAgICAgICAgICAgPGNsaXBQYXRoIGlkPSJTVkdJRF80OV8iIGNsYXNzPSJzdDIwIiBzdHlsZT0iY2xpcC1wYXRoOiB1cmwoI1NWR0lEXzQ4Xyk7Ij4KICAgICAgICAgICAgICAgICAgPGVsbGlwc2UgdHJhbnNmb3JtPSJtYXRyaXgoMC4wNzA4ODkwMTg0NzYwMDkzNywgLTAuOTk3NTAwMDYxOTg4ODMwNiwgMC45OTc1MDAwNjE5ODg4MzA2LCAwLjA3MDg4OTAxODQ3NjAwOTM3LCAtNjAuNDQ5NDAyNzU2MjM1MDMsIDIwMS44MzgxOTg4MDg0MDQ3NCkiIGN4PSI3OC4xIiBjeT0iMTMzLjQiIHJ4PSIyNy44IiByeT0iMjcuOCIgc3R5bGU9Im92ZXJmbG93OiB2aXNpYmxlOyIvPgogICAgICAgICAgICAgICAgPC9jbGlwUGF0aD4KICAgICAgICAgICAgICAgIDxjbGlwUGF0aCBpZD0iU1ZHSURfNTBfIiBjbGFzcz0ic3QyMSIgc3R5bGU9ImNsaXAtcGF0aDogdXJsKCNTVkdJRF80OV8pOyI+CiAgICAgICAgICAgICAgICAgIDxlbGxpcHNlIHRyYW5zZm9ybT0ibWF0cml4KDAuMDcwODg5MDE4NDc2MDA5MzcsIC0wLjk5NzUwMDA2MTk4ODgzMDYsIDAuOTk3NTAwMDYxOTg4ODMwNiwgMC4wNzA4ODkwMTg0NzYwMDkzNywgLTYwLjQ0OTQwMjc1NjIzNTAzLCAyMDEuODM4MTk4ODA4NDA0NzQpIiBjeD0iNzguMSIgY3k9IjEzMy40IiByeD0iMjcuOCIgcnk9IjI3LjgiIHN0eWxlPSJvdmVyZmxvdzogdmlzaWJsZTsiLz4KICAgICAgICAgICAgICAgIDwvY2xpcFBhdGg+CiAgICAgICAgICAgICAgICA8ZyBjbGFzcz0ic3QyMiIgc3R5bGU9ImNsaXAtcGF0aDogdXJsKCNTVkdJRF81MF8pOyI+CiAgICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9InN0MjMiIGN4PSI3OC4xIiBjeT0iMTMzLjQiIHI9IjEyLjYiIHN0eWxlPSJmaWxsOiByZ2IoMjQyLCAyNDIsIDI0Mik7Ii8+CiAgICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9InN0MjQiIGN4PSI3OC4xIiBjeT0iMTMzLjQiIHI9IjEwLjEiIHN0eWxlPSJmaWxsOiByZ2IoODUsIDEyNiwgMTkxKTsiLz4KICAgICAgICAgICAgICAgIDwvZz4KICAgICAgICAgICAgICA8L2c+CiAgICAgICAgICAgIDwvZz4KICAgICAgICAgICAgPGc+CiAgICAgICAgICAgICAgPGc+CiAgICAgICAgICAgICAgICA8ZGVmcz4KICAgICAgICAgICAgICAgICAgPHBhdGggaWQ9IlNWR0lEXzUxXyIgZD0iTTQ2LDgyLjJ2NTEuMWMwLDIuNCwyLDQuNCw0LjQsNC40aDU1LjVjMi40LDAsNC40LTIsNC40LTQuNFY4Mi4ySDQ2eiBNODUuNCw5My45SDcwLjggYy0xLjYsMC0yLjktMS4zLTIuOS0yLjlzMS4zLTIuOSwyLjktMi45aDE0LjZjMS42LDAsMi45LDEuMywyLjksMi45Uzg3LDkzLjksODUuNCw5My45eiIvPgogICAgICAgICAgICAgICAgPC9kZWZzPgogICAgICAgICAgICAgICAgPGNsaXBQYXRoIGlkPSJTVkdJRF81Ml8iPgogICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNNDYsODIuMnY1MS4xYzAsMi40LDIsNC40LDQuNCw0LjRoNTUuNWMyLjQsMCw0LjQtMiw0LjQtNC40VjgyLjJINDZ6IE04NS40LDkzLjlINzAuOCBjLTEuNiwwLTIuOS0xLjMtMi45LTIuOXMxLjMtMi45LDIuOS0yLjloMTQuNmMxLjYsMCwyLjksMS4zLDIuOSwyLjlTODcsOTMuOSw4NS40LDkzLjl6IiBzdHlsZT0ib3ZlcmZsb3c6IHZpc2libGU7Ii8+CiAgICAgICAgICAgICAgICA8L2NsaXBQYXRoPgogICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9InN0MjUiIGQ9Ik00Niw4Mi4yaDY0LjNWMTEwSDQ2VjgyLjJ6IiBzdHlsZT0iY2xpcC1wYXRoOiB1cmwoI1NWR0lEXzUyXyk7IGZpbGw6IHJnYigzMywgMzMsIDMzKTsgZmlsbC1vcGFjaXR5OiAwLjA1OyIvPgogICAgICAgICAgICAgIDwvZz4KICAgICAgICAgICAgPC9nPgogICAgICAgICAgICA8cGF0aCBjbGFzcz0ic3QyNiIgZD0iTTQ2LDEwOS42aDY0LjN2MC40SDQ2VjEwOS42eiIgc3R5bGU9ImZpbGw6IHJnYigzMywgMzMsIDMzKTsgZmlsbC1vcGFjaXR5OiAwLjAyOyIvPgogICAgICAgICAgICA8cGF0aCBjbGFzcz0ic3QyNyIgZD0iTTQ2LDExMGg2NC4zdjAuNEg0NlYxMTB6IiBzdHlsZT0iZmlsbDogcmdiKDI1NSwgMjU1LCAyNTUpOyBmaWxsLW9wYWNpdHk6IDAuMDU7Ii8+CiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJzdDI2IiBkPSJNODUuNCw5My45SDcwLjhjLTEuNSwwLTIuOC0xLjItMi45LTIuN2MwLDAuMSwwLDAuMSwwLDAuMmMwLDEuNiwxLjMsMi45LDIuOSwyLjloMTQuNiBjMS42LDAsMi45LTEuMywyLjktMi45YzAtMC4xLDAtMC4xLDAtMC4yQzg4LjIsOTIuNyw4Nyw5My45LDg1LjQsOTMuOXogTTQ2LDgyLjJ2MC40aDY0LjN2LTAuNEg0NnoiIHN0eWxlPSJmaWxsOiByZ2IoMzMsIDMzLCAzMyk7IGZpbGwtb3BhY2l0eTogMC4wMjsiLz4KICAgICAgICAgICAgPHBhdGggY2xhc3M9InN0MjgiIGQ9Ik03MC44LDg4LjFoMTQuNmMxLjUsMCwyLjgsMS4yLDIuOSwyLjdjMC0wLjEsMC0wLjEsMC0wLjJjMC0xLjYtMS4zLTIuOS0yLjktMi45SDcwLjggYy0xLjYsMC0yLjksMS4zLTIuOSwyLjljMCwwLjEsMCwwLjEsMCwwLjJDNjgsODkuMyw2OS4zLDg4LjEsNzAuOCw4OC4xeiBNMTA1LjksMTM3LjRINTAuNGMtMi40LDAtNC40LTItNC40LTQuNHYwLjQgYzAsMi40LDIsNC40LDQuNCw0LjRoNTUuNWMyLjQsMCw0LjQtMiw0LjQtNC40VjEzM0MxMTAuMywxMzUuNCwxMDguMywxMzcuNCwxMDUuOSwxMzcuNHoiIHN0eWxlPSJmaWxsOiByZ2IoMzUsIDMxLCAzMik7IGZpbGwtb3BhY2l0eTogMC4xOyIvPgogICAgICAgICAgICA8cmFkaWFsR3JhZGllbnQgaWQ9IlNWR0lEXzUzXyIgY3g9IjExNTIuMjI1NSIgY3k9IjEwMTUuMDMzMSIgcj0iMzMyLjQzNjEiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMC4yNSAwIDAgMC4yNSAtMjQyLjI1IC0xNzEuNzUpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgICAgICAgICAgICAgPHN0b3Agb2Zmc2V0PSIwIiBzdHlsZT0ic3RvcC1jb2xvcjojRkZGRkZGO3N0b3Atb3BhY2l0eTowLjEiLz4KICAgICAgICAgICAgICA8c3RvcCBvZmZzZXQ9IjEiIHN0eWxlPSJzdG9wLWNvbG9yOiNGRkZGRkY7c3RvcC1vcGFjaXR5OjAiLz4KICAgICAgICAgICAgPC9yYWRpYWxHcmFkaWVudD4KICAgICAgICAgICAgPHBhdGggY2xhc3M9InN0MjkiIGQ9Ik00Niw4Mi4ydjUxLjFjMCwyLjQsMiw0LjQsNC40LDQuNGg1NS41YzIuNCwwLDQuNC0yLDQuNC00LjRWODIuMkg0NnogTTg1LjQsOTMuOUg3MC44IGMtMS42LDAtMi45LTEuMy0yLjktMi45czEuMy0yLjksMi45LTIuOWgxNC42YzEuNiwwLDIuOSwxLjMsMi45LDIuOVM4Nyw5My45LDg1LjQsOTMuOXoiIHN0eWxlPSJmaWxsOiB1cmwoI1NWR0lEXzUzXyk7Ii8+CiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJzdDMwIiBkPSJNNDMuMSw3NC45aDcwLjF2NzAuMUg0My4xVjc0Ljl6IiBzdHlsZT0iZmlsbDogbm9uZTsiLz4KICAgICAgICAgIDwvZz4KICAgICAgICA8L2c+CiAgICAgIDwvZz4KICAgIDwvZz4KICA8L2c+Cjwvc3ZnPg==\", Mw = (d) => `\n .modal-container {\n position: fixed;\n top: 0;\n left: 0;\n z-index: 9999;\n height: 100%;\n width: 100%;\n background: rgba(0, 0, 0, 0.5);\n display: flex;\n justify-content: center;\n align-items: center;\n animation: fade-in 0.3s ease-in-out;\n }\n\n .modal {\n max-width: 100%;\n width: 600px;\n height: 500px;\n border-radius: 14px;\n text-align: center;\n display: flex;\n flex-direction: column;\n justify-content: flex-start;\n background: ${d.palette.background.default};\n overflow-y: auto;\n overflow-x: hidden;\n box-shadow: 0px 4px 70px 50px #5EA6FF26;\n }\n\n .modal-header {\n display: flex;\n flex-direction: row-reverse;\n width: auto;\n min-height: 50px;\n padding: 8px;\n }\n\n .close-icon {\n width: 24px;\n height: 24px;\n fill: rgb(155, 155, 155);\n }\n\n .modal-content {\n display: flex;\n flex-direction: column;\n align-items: center;\n height: calc(100% - 50px);\n overflow: hidden;\n padding: 10px 50px 25px 50px;\n justify-content: space-between;\n }\n\n .modal-title {\n width: 100%;\n }\n\n .modal-title img {\n width: 110px;\n height: 110px;\n }\n\n .modal-title h1 {\n font-weight: 600;\n margin-top: 28px;\n font-size: 24px;\n color: ${d.palette.text.primary};\n }\n\n .modal-title h1 span {\n color: ${d.palette.primary.main};\n }\n\n .modal-title p {\n font-size: 14px;\n color: ${d.palette.text.secondary};\n line-height: 18px;\n font-weight: 400;\n margin-top: 20px;\n }\n\n .modal-title p.modal-content-last {\n margin-top: 35px;\n }\n\n .modal-title p strong {\n color: ${d.palette.text.secondary};\n }\n\n .modal-content-image:hover {\n box-shadow: 0px 0px 20px 14px rgba(94, 166, 255, 0.31);\n }\n \n .modal-content-image {\n margin-top: 20px;\n transition: box-shadow 0.3s ease-in-out;\n box-shadow: 0px 0px 0px 0px rgba(94, 166, 255, 0.31);\n height: 67px;\n width: 220px;\n border: 1px solid ${d.palette.cedeComponentHr};\n border-radius: 13px;\n padding: 0 10px;\n cursor: pointer;\n }\n\n .modal-banner-link {\n color: ${d.palette.text.secondary};\n margin-top: 20px;\n }\n`, Cw = () => `\n <div class=\"modal-container\" id=\"cede-modal-onboarding\">\n <div class=\"modal\">\n <header class=\"modal-header\">\n <button class=\"icon-button\" id=\"close-modal\">\n <svg class=\"close-icon\" focusable=\"false\" aria-hidden=\"true\" viewBox=\"0 0 24 24\" data-testid=\"CloseIcon\"><path d=\"M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\"></path></svg>\n </button>\n </header>\n <section class=\"modal-content\">\n <div class=\"modal-title\">\n <div class=\"cede-logo\">\n ${br}\n </div>\n <h1>\n <span>Cede.store</span>\n is not detected\n </h1>\n <p>\n To proceed, you will need to <strong>download</strong> the extension from the \n <strong>Chrome Web Store</strong>. Let you guide by the <strong>onboarding flow</strong>.\n </p>\n <p class=\"modal-content-last\">\n Click below to access the Chrome Web Store\n </p>\n </div>\n <img id=\"chrome-web-store\" src=${Ow} class=\"modal-content-image\" alt=\"Download from Chrome Web Store\" />\n <a href=\"https://cede.store\" target=\"_blank\" class=\"modal-banner-link\">\n Discover more about cede.store\n </a>\n </section>\n </div>\n </div>\n`, xw = (d) => (e, t) => {\n const i = e.html.querySelector(\"#close-modal\"), s = e.html.querySelector(\"#chrome-web-store\");\n !i || !s || (i.addEventListener(\"click\", () => {\n t.remove(e);\n }), s.addEventListener(\"click\", () => {\n localStorage.setItem(\"cede.store-onboarding\", JSON.stringify(d ?? {})), window.open(\"https://chrome.google.com/webstore/detail/cedestore/dcfphbfmjohnlcpelbhfbjolhmmlcbhd\", \"_blank\");\n }));\n}, vw = (d) => ({\n style: Mw,\n html: Cw,\n action: xw(d)\n}), kw = (d) => `\n .login-container {\n height: 100%;\n width: 100%;\n padding: ${d.custom.gutterMargin} 0;\n display: flex;\n justify-content: space-between;\n align-items: stretch;\n flex-direction: column;\n box-sizing: border-box;\n }\n\n .login-banner {\n margin-top: 122px;\n display: flex;\n flex-direction: column;\n align-items: center;\n text-align: center;\n }\n\n .login-logo {\n height: ${d.custom.imgSize.large};\n width: ${d.custom.imgSize.large};\n margin-bottom: ${d.custom.gutterMargin};\n }\n\n .login-title {\n font-size: 20px;\n margin-bottom: 4px;\n }\n\n .login-title-link {\n font-size: 20px;\n color: ${d.palette.primary.main};\n display: inline;\n text-decoration: none;\n }\n\n .login-title-link:hover {\n text-decoration: underline;\n }\n\n .login-title-2 {\n margin-top: 4px;\n font-size: ${d.typography(d.palette).body1.fontSize};\n font-weight: normal;\n color: ${d.palette.text.secondary};\n text-align: center;\n }\n\n .login-footer {\n margin-top: 40px;\n display: flex;\n flex-direction: column;\n align-items: stretch;\n gap: ${d.custom.gutterMargin};\n padding-top: ${d.custom.bigGutterMargin};\n }\n`, Ew = (d, { widgetType: e }) => `\n <section class=\"login-container\">\n <div class=\"login-banner\">\n <div class=\"login-logo cede-logo\">\n ${br}\n </div>\n <h1 class=\"login-title\">\n Welcome to <a href=\"https://cede.store\" target=\"_blank\" class=\"login-title-link\">cede.store</a> ${e === vi.SEND ? \"send\" : \"trade\"} portal\n </h1>\n <h2 class=\"login-title-2\">\n ${e === vi.SEND ? Gs.WIDGETS.SEND.TRANSFER_CEX_ASSETS : Gs.WIDGETS.TRADE.WELCOME_MESSAGE}\n </h2>\n </div>\n <div class=\"login-footer\">\n <button class=\"cede-button\" data-testid=\"widget-connect-button\" id=\"login-btn\">${Gs.WIDGETS.SEND.CONNECT}</button>\n </div>\n </section>\n`, Nw = (d, e) => {\n const t = d.html.querySelector(\"#login-btn\");\n t && t.addEventListener(\"click\", () => {\n e.renderHtml(vw(), { clearPrevious: !1, animateOnExit: !0 });\n });\n}, Pw = {\n style: kw,\n html: Ew,\n action: Nw\n}, _w = \"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjU2IiBoZWlnaHQ9IjI1NiIgdmlld0JveD0iMCAwIDI1NiAyNTYiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMF8yNjkzXzQ5MTMpIj4KPHBhdGggZD0iTTEyOC4wMDMgMTk5LjIxNkMxNjcuMzM4IDE5OS4yMTYgMTk5LjIyNCAxNjcuMzI4IDE5OS4yMjQgMTI3Ljk5M0MxOTkuMjI0IDg4LjY1OCAxNjcuMzM4IDU2Ljc3IDEyOC4wMDMgNTYuNzdDODguNjY4IDU2Ljc3IDU2Ljc4MSA4OC42NTggNTYuNzgxIDEyNy45OTNDNTYuNzgxIDE2Ny4zMjggODguNjY4IDE5OS4yMTYgMTI4LjAwMyAxOTkuMjE2WiIgZmlsbD0id2hpdGUiLz4KPHBhdGggZD0iTTM1Ljg4OTkgOTIuOTk3QzMwLjU3NjkgODMuNzk0IDI0LjMzMTkgNzQuMTM1IDE3LjE1MzkgNjQuMDJDNS45MTc1OCA4My40Nzc0IDAuMDAxODQ2NTIgMTA1LjU1IDAuMDAxNDY0ODYgMTI4LjAxOUMwLjAwMTA4MzIgMTUwLjQ4OCA1LjkxNjA3IDE3Mi41NiAxNy4xNTE3IDE5Mi4wMThDMjguMzg3NCAyMTEuNDc2IDQ0LjU0NzcgMjI3LjYzMyA2NC4wMDc4IDIzOC44NjRDODMuNDY4IDI1MC4wOTYgMTA1LjU0MiAyNTYuMDA2IDEyOC4wMTEgMjU2LjAwMUMxMzkuNzkxIDIzOS40NzggMTQ3Ljc5MSAyMjcuNTY0IDE1Mi4wMDcgMjIwLjI2MUMxNjAuMTA2IDIwNi4yMzMgMTcwLjU4IDE4Ni4xNDkgMTgzLjQzIDE2MC4wMVYxNTkuOTk1QzE3Ny44MTYgMTY5LjcyOCAxNjkuNzM4IDE3Ny44MTIgMTYwLjAwOSAxODMuNDMzQzE1MC4yOCAxODkuMDU0IDEzOS4yNDIgMTkyLjAxNCAxMjguMDA2IDE5Mi4wMTZDMTE2Ljc3IDE5Mi4wMTcgMTA1LjczMiAxODkuMDYgOTYuMDAwNyAxODMuNDQzQzg2LjI2OTkgMTc3LjgyNSA3OC4xODk3IDE2OS43NDQgNzIuNTcyOSAxNjAuMDEyQzU1LjExOTkgMTI3LjQ2NCA0Mi44OTI5IDEwNS4xMjUgMzUuODg5OSA5Mi45OTdaIiBmaWxsPSIjMjI5MzQyIi8+CjxwYXRoIGQ9Ik0xMjguMDA4IDI1NS45OTZDMTQ0LjgxOCAyNTUuOTk5IDE2MS40NjMgMjUyLjY5IDE3Ni45OTMgMjQ2LjI1OEMxOTIuNTI0IDIzOS44MjYgMjA2LjYzNSAyMzAuMzk4IDIxOC41MiAyMTguNTExQzIzMC40MDYgMjA2LjYyNSAyMzkuODM0IDE5Mi41MTMgMjQ2LjI2NSAxNzYuOTgzQzI1Mi42OTYgMTYxLjQ1MiAyNTYuMDA0IDE0NC44MDYgMjU2IDEyNy45OTdDMjU1Ljk5NiAxMDUuNTI4IDI1MC4wNzcgODMuNDU1OSAyMzguODM3IDY0QzIxNC41ODkgNjEuNjEgMTk2LjY5NCA2MC40MTUgMTg1LjE1MSA2MC40MTVDMTcyLjA2MyA2MC40MTUgMTUzLjAxMiA2MS42MSAxMjcuOTk5IDY0TDEyNy45ODUgNjQuMDFDMTM5LjIyMSA2NC4wMDQ3IDE1MC4yNjEgNjYuOTU4MSAxNTkuOTk0IDcyLjU3MzJDMTY5LjcyNyA3OC4xODgyIDE3Ny44MDkgODYuMjY3IDE4My40MjkgOTUuOTk3QzE4OS4wNDkgMTA1LjcyNyAxOTIuMDA3IDExNi43NjYgMTkyLjAwNyAxMjguMDAyQzE5Mi4wMDcgMTM5LjIzOSAxODkuMDQ4IDE1MC4yNzcgMTgzLjQyOCAxNjAuMDA3TDEyOC4wMDggMjU1Ljk5NloiIGZpbGw9IiNGQkMxMTYiLz4KPHBhdGggZD0iTTEyOC4wMDMgMTc4LjY3N0MxNTUuOTg3IDE3OC42NzcgMTc4LjY3MiAxNTUuOTkyIDE3OC42NzIgMTI4LjAwN0MxNzguNjcyIDEwMC4wMjEgMTU1Ljk4NyA3Ny4zMzcgMTI4LjAwMiA3Ny4zMzdDMTAwLjAxOSA3Ny4zMzcgNzcuMzMzIDEwMC4wMjMgNzcuMzMzIDEyOC4wMDdDNzcuMzMzIDE1NS45OTEgMTAwLjAxOSAxNzguNjc3IDEyOC4wMDMgMTc4LjY3N1oiIGZpbGw9IiMxQTczRTgiLz4KPHBhdGggZD0iTTEyOC4wMDMgNjQuMDA0SDIzOC44NEMyMjcuNjA5IDQ0LjU0MzYgMjExLjQ1MiAyOC4zODMyIDE5MS45OTQgMTcuMTQ3OEMxNzIuNTM1IDUuOTEyNDIgMTUwLjQ2MiAtMC4wMDE4NTU3MyAxMjcuOTkzIC0wLjAwMDMzNTRDMTA1LjUyNCAwLjAwMTE4NDkzIDgzLjQ1MTggNS45MTg0NCA2My45OTUyIDE3LjE1NjRDNDQuNTM4NiAyOC4zOTQ0IDI4LjM4MzcgNDQuNTU3IDE3LjE1NSA2NC4wMTlMNzIuNTc0IDE2MC4wMDlMNzIuNTg5IDE2MC4wMTdDNjYuOTY2NiAxNTAuMjg5IDY0LjAwNDcgMTM5LjI1MSA2NC4wMDE0IDEyOC4wMTVDNjMuOTk4MSAxMTYuNzc5IDY2Ljk1MzUgMTA1LjczOSA3Mi41NzAyIDk2LjAwNzZDNzguMTg2OSA4Ni4yNzU4IDg2LjI2NzEgNzguMTk0NSA5NS45OTggNzIuNTc2NEMxMDUuNzI5IDY2Ljk1ODIgMTE2Ljc2OCA2NC4wMDEzIDEyOC4wMDQgNjQuMDAzTDEyOC4wMDMgNjQuMDA0WiIgZmlsbD0iI0UzM0IyRSIvPgo8L2c+CjxkZWZzPgo8Y2xpcFBhdGggaWQ9ImNsaXAwXzI2OTNfNDkxMyI+CjxyZWN0IHdpZHRoPSIyNTYiIGhlaWdodD0iMjU2IiBmaWxsPSJ3aGl0ZSIvPgo8L2NsaXBQYXRoPgo8L2RlZnM+Cjwvc3ZnPgo=\", Lw = (d) => `\n .not-supported-container {\n height: 100%;\n width: 100%;\n padding: ${d.custom.gutterMargin} 0;\n display: flex;\n justify-content: space-between;\n align-items: stretch;\n flex-direction: column;\n }\n\n .not-supported-banner {\n text-align: center;\n margin-top: 116px;\n }\n\n .not-supported-logo {\n height: ${d.custom.imgSize.large};\n width: ${d.custom.imgSize.large};\n }\n\n .not-supported-title {\n font-size: 20px;\n font-weight: 600;\n color: ${d.palette.text.primary};\n margin-top: ${d.custom.gutterMargin};\n line-height: 1.167;\n }\n\n .not-supported-title span {\n font-size: 20px;\n color: ${d.palette.primary.main};\n display: inline;\n }\n\n .not-supported-banner-retry {\n display: flex;\n justify-content: center;\n align-items: center;\n gap: ${d.custom.gutterMargin};\n padding-top: ${d.custom.gutterMargin};\n }\n\n .not-supported-banner-retry p {\n color: ${d.palette.text.secondary};\n }\n\n .not-supported-footer {\n display: flex;\n flex-direction: column;\n align-items: stretch;\n gap: ${d.custom.gutterMargin};\n margin-top: 40px;\n }\n\n .not-supported-banner-link {\n color: ${d.palette.text.secondary};\n margin-top: ${d.custom.smallGutterMargin};\n display: inline-flex;\n align-items: center;\n gap: ${d.custom.smallGutterMargin};\n }\n \n .not-supported-banner-link path {\n stroke: ${d.palette.text.secondary};\n }\n`, Dw = () => `\n <section id=\"not-supported-page\" class=\"not-supported-container\">\n <div class=\"not-supported-banner\">\n <div class=\"not-supported-logo cede-logo\">\n ${br}\n </div>\n <h1 class=\"not-supported-title\">\n <span>Cede.store</span>\n send portal is not available on ${Ld() ? \"mobile\" : \"your current browser\"}.\n </h1>\n <div class=\"not-supported-banner-retry\">\n <p>\n Retry on a ${Ld() ? \"desktop\" : \"\"} chromium browser.\n </p>\n <img src=\"${_w}\" width=\"20\" alt=\"Google Chrome Icon\" />\n </div>\n <a\n href=\"https://en.wikipedia.org/wiki/Chromium_(web_browser)#Active\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n class=\"not-supported-banner-link\"\n >\n List of compatible browser \n <svg width=\"13\" height=\"13\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M11 1H7.66667M11 1L6 6M11 1V4.33333\" stroke=\"#B8B8B8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M11 6.55556V9.88889C11 10.5026 10.5026 11 9.88889 11H2.11111C1.49746 11 1 10.5026 1 9.88889V2.11111C1 1.49746 1.49746 1 2.11111 1H5.44444\" stroke=\"#B8B8B8\" stroke-linecap=\"round\"/>\n </svg>\n </a>\n </div>\n <div class=\"not-supported-footer\">\n <button class=\"cede-button\" id=\"return-to-menu\">Return to the menu</button>\n </div>\n </section>\n`, Rw = (d) => {\n const e = d.html.querySelector(\"#return-to-menu\");\n if (!e)\n throw new Error(\"Could not find button\");\n e.addEventListener(\"click\", () => {\n window.location.href = \"/\";\n });\n}, Bw = {\n style: Lw,\n html: Dw,\n action: Rw\n}, Vw = (d) => `\n * {\n color: ${d.palette.text.primary};\n font-family: ${d.typography(d.palette).fontFamily};\n margin: 0;\n padding: 0;\n box-sizing: border-box;\n }\n\n .cede-layout {\n position: relative;\n overflow: hidden;\n max-width: ${d.custom.storeSize.widgetMaxWidth};\n min-width: ${d.custom.storeSize.widgetMinWidth};\n background: ${d.palette.background.default};\n width: ${d.custom.storeSize.widgetWidth};\n height: ${d.custom.storeSize.widgetHeight};\n border-radius: 12px;\n padding: 12px;\n border: 1px solid transparent;\n }\n\n .component-container {\n position: absolute;\n left: 0;\n top: 0;\n width: 100%;\n height: 100%;\n padding: 12px;\n box-sizing: border-box;\n }\n\n .cede-button {\n height: 50px;\n border-radius: 14px;\n background: ${d.palette.primary.main};\n color: ${d.palette.text.primary};\n border: none;\n color: rgba(0, 0, 0, 0.87);\n cursor: pointer;\n width: 100%;\n font-size: ${d.typography(d.palette).body1.fontSize};\n }\n\n .icon-button {\n border: none;\n background: transparent;\n cursor: pointer;\n }\n\n .cede-logo, .cede-logo * {\n color: ${d.palette.logoBorderColor};\n display: inline-block;\n }\n\n .animate-exit {\n z-index: 2;\n animation: fade-out .5s ease-in forwards;\n }\n\n @keyframes fade-out {\n from { opacity: 1; }\n to { opacity: 0; }\n }\n\n @keyframes fade-in {\n from { opacity: 0; }\n to { opacity: 1; }\n }\n`;\nclass jw {\n constructor(e, t, i) {\n // Shadow dom to isolate styles\n ft(this, \"shadow\");\n // Layout to contain components\n ft(this, \"layout\");\n // Keep track of active components to remove them later\n ft(this, \"activeComponents\", []);\n this.root = e, this.theme = t, this.config = i;\n const s = document.createElement(\"div\");\n this.root.appendChild(s), this.shadow = s.attachShadow({ mode: \"open\" });\n const n = document.createElement(\"style\");\n n.innerHTML = Vw(this.theme), n.id = \"cede-global-style\", this.shadow.appendChild(n), this.layout = document.createElement(\"div\"), (i == null ? void 0 : i.displayLayout) !== !1 && this.layout.classList.add(\"cede-layout\"), this.layout.id = \"cede-layout\", this.shadow.appendChild(this.layout);\n }\n renderHtml(e, { clearPrevious: t = !0, animateOnExit: i = !1, layout: s = !1, data: n = {} } = {}) {\n var c;\n (c = this.activeComponents) != null && c.length && t && !s && (this.activeComponents.forEach((u) => this.remove(u)), this.activeComponents = []);\n const r = document.createElement(\"style\");\n r.innerHTML = e.style(this.theme), this.shadow.appendChild(r), e.name && (r.id = `${e.name}-style`);\n const a = document.createElement(\"div\");\n a.classList.add(\"component-container\"), a.innerHTML = e.html(this.config, n), this.layout.appendChild(a), e.name && (a.id = `${e.name}-html`);\n const o = { style: r, html: a, opts: { animateOnExit: i } };\n s || this.activeComponents.push(o), e.action && e.action(o, this);\n }\n remove(e) {\n var t;\n if ((t = e.opts) != null && t.animateOnExit) {\n e.html.classList.add(\"animate-exit\"), setTimeout(() => {\n this.layout.removeChild(e.html), this.shadow.removeChild(e.style);\n }, 600);\n return;\n }\n this.layout.removeChild(e.html), this.shadow.removeChild(e.style);\n }\n clear() {\n this.root.innerHTML = \"\";\n }\n}\nconst Co = {\n primaryDarkBlue: \"#3D4E5B\",\n //Grey Blue\n secondaryDarkBlue: \"#247CEC\",\n //Navy blue\n cedePrimaryColor: \"#5EA6FF\",\n //Blue\n cedePrimaryColorLight: \"#9acfed\",\n // This color is not part of the DS can change at any time\n cedeSecondaryColor: \"#A6FB74\",\n //Green\n cedeSuccessColor: \"#A6FB74\",\n // Same color as above but this is not a primary color it is a success color\n cedeWarningColor: \"#FFA726\",\n cedeWarningLightColor: \"#E2C395\",\n cedeErrorColor: \"#f44335\",\n cedeSecondaryColorDark: \"#0B7400\",\n // This color is not part of the DS can change at any time\n cedePrimaryBackgroundColor: \"#0A0B0b\",\n //Black\n cedeTextPrimaryColor: \"#FFFFFF\",\n //White\n cedeTextSecondaryColor: \"#9B9B9B\",\n cedeSecondaryBackgroundColor: \"#1B1B1B\",\n //Black\n cedeTextGrey: \"rgba(255, 255, 255, 0.5)\",\n cedeTextDisabled: \"rgba(255, 255, 255, 0.7)\",\n cedeSkeleton: \"rgba(255, 255, 255, 0.2)\",\n cedeComponentHr: \"rgba(255, 255, 255, 0.12)\",\n cedeComponentBackgroundColor: \"rgba(255, 255, 255, 0.08)\",\n cedeComponentBorderGreyColor: \"#A3A3A3\",\n cedeComponentHoveredBackgroundColor: \"rgba(255, 255, 255, 0.18)\",\n cedePaperBackgroundColor: \"linear-gradient(180deg, rgba(255, 255, 255, 0.12) 0%, rgba(255, 255, 255, 0.12) 100%), #121212\",\n cedePaperLightBackgroundColor: \"#373737\",\n cedePaperDarkBackgroundColor: \"#1F1F1F\",\n cedePaperGradientBackground: \"linear-gradient(180deg, rgba(255, 255, 255, 0.13) 0%, rgba(255, 255, 255, 0.13) 100%), #121212\",\n cedePaperModalGradientBackground: \"linear-gradient(180deg, rgba(255, 255, 255, 0.05) 0%, rgba(255, 255, 255, 0.05) 100%), #121212\",\n cedeBubbleBackgroundColor: \"#616161E5\",\n cedeGradientPrimaryBackground: \"linear-gradient(140.84deg, #5EA6FF -14.8%, #A6FB75 127.29%);\",\n cedeBuyColor: \"#11cb81\",\n cedeSellColor: \"#f5465d\",\n cedeHelpBackgroundColor: \"#404040\"\n}, Fw = {\n ...Co,\n cedePrimaryBackgroundColor: \"#FFFEFD\",\n cedeTextPrimaryColor: \"#1B2026\",\n cedeTextSecondaryColor: \"#525860\",\n cedeHelpBackgroundColor: \"#EDEDED\",\n cedePaperLightBackgroundColor: \"#EDEDED\",\n cedePaperDarkBackgroundColor: \"#F6F6F6\",\n cedePaperBackgroundColor: \"#FFFEFD\",\n cedeTextDisabled: \"rgba(54, 63, 77, 0.5)\",\n cedeSkeleton: \"rgba(54, 63, 77, 0.2)\",\n cedeComponentBackgroundColor: \"#F6F6F6\",\n cedeSuccessColor: \"rgb(91, 188, 33)\",\n cedeComponentHr: \"#EDEDED\"\n}, Uw = (d, e = \"dark\") => ({\n mode: e,\n background: {\n default: d.cedePrimaryBackgroundColor,\n paper: d.cedePaperBackgroundColor,\n lightPaper: d.cedePaperLightBackgroundColor,\n darkPaper: d.cedePaperDarkBackgroundColor,\n component: d.cedeComponentBackgroundColor,\n help: d.cedeHelpBackgroundColor\n },\n primary: { main: d.cedePrimaryColor },\n secondary: { main: d.cedeSecondaryColor },\n text: {\n primary: d.cedeTextPrimaryColor,\n secondary: d.cedeTextSecondaryColor,\n disabled: d.cedeTextDisabled\n },\n action: {\n disabledBackground: d.cedeComponentHr,\n disabled: d.cedeTextDisabled\n },\n success: {\n main: d.cedeSuccessColor\n },\n warning: {\n main: d.cedeWarningColor,\n light: d.cedeWarningLightColor\n },\n error: {\n main: d.cedeErrorColor\n },\n logoBorderColor: d.cedePrimaryColor,\n ...d\n}), qw = {\n zIndex: {\n baseLayer: 1,\n mediumLayer: 5,\n topLayer: 10,\n extraLayer: 15\n },\n storeSize: {\n width: \"370px\",\n tabWidth: \"450px\",\n bigTabWidth: \"1265px\",\n requestTabWidth: \"600px\",\n height: \"600px\",\n tabHeight: \"600px\",\n bigTabHeight: \"800px\",\n requestTabHeight: \"500px\",\n widgetWidth: \"385px\",\n tradeWidgetHeight: \"600px\",\n widgetHeight: \"565px\",\n widgetMinWidth: \"330px\",\n widgetMaxWidth: \"500px\"\n },\n navBarSize: {\n height: \"50px\",\n widgetHeight: \"35px\"\n },\n defaultBoxRadius: 1,\n largeBoxRadius: 3.5,\n mediumBoxRadius: 2,\n buttonSmallRadius: 3,\n buttonDefaultRadius: 3.5,\n buttonRoundedRadius: 100,\n smallGutterMargin: \"8px\",\n gutterMargin: \"16px\",\n mediumGutterMargin: \"28px\",\n bigGutterMargin: \"40px\",\n cedeLinkBigContentMargin: \"60px\",\n cedeLinkSmallContentMargin: \"16px\",\n cedeLinkBigContentMaxWidth: \"1315px\",\n inputRadius: {\n default: 4,\n rounded: 5\n },\n imgSize: {\n small: \"32px\",\n medium: \"56px\",\n large: \"110px\"\n },\n iconSize: {\n small: \"16px\",\n medium: \"20px\",\n large: \"29px\"\n },\n linkLogoWidth: {\n small: \"99px\",\n medium: \"151px\",\n large: \"230px\"\n },\n linkLogoHeight: {\n small: \"15px\",\n medium: \"23px\",\n large: \"35px\"\n },\n inputWidth: {\n small: \"256px\"\n },\n circleSize: {\n small: \"8px\"\n },\n opacity: {\n alert: 0.6,\n legend: 0.7\n },\n textSize: {\n small: \"9px\",\n medium: \"11px\",\n large: \"13px\"\n },\n iconUnderlayMargin: 4,\n portfolioItemWidth: \"170px\",\n portfolioItemHeight: \"60px\",\n linkInactiveFilterWidth: \"160px\",\n linkActiveFilterWidth: \"200px\",\n txHistoryItem: {\n height: 50\n },\n txHistoryList: {\n dateLineHeight: 74,\n dateLineMargin: 16,\n txDate: {\n margin: 15,\n height: 35\n },\n txPlace: {\n margin: 16,\n height: 50\n },\n txItem: {\n collapsed: 75,\n toggled: 145\n }\n },\n dappListItemHeight: 55,\n gradientButtonBackground: Co.cedeGradientPrimaryBackground\n}, Gw = \"'Inter', sans-serif\", zw = (d) => {\n var e, t, i, s, n, r, a, o, c, u;\n return {\n fontFamily: Gw,\n h1: {\n fontWeight: \"600\",\n marginTop: \"16px\",\n fontSize: \"24px\",\n color: (e = d.text) == null ? void 0 : e.primary\n },\n h2: {\n fontWeight: \"500\",\n fontSize: \"20px\",\n marginBottom: \"15px\",\n lineHeight: \"18px\",\n color: (t = d.text) == null ? void 0 : t.secondary\n },\n h3: {\n fontSize: \"16px\",\n color: (i = d.text) == null ? void 0 : i.primary\n },\n h4: {\n color: (s = d.text) == null ? void 0 : s.primary\n },\n h5: {\n color: (n = d.text) == null ? void 0 : n.primary\n },\n subtitle1: {\n color: (r = d.text) == null ? void 0 : r.primary\n },\n subtitle2: {\n color: (a = d.text) == null ? void 0 : a.secondary\n },\n body1: {\n fontSize: \"14px\",\n lineHeight: \"18px\",\n fontWeight: 400,\n color: (o = d.text) == null ? void 0 : o.primary\n },\n body2: {\n color: (c = d.text) == null ? void 0 : c.secondary,\n fontSize: \"14px\"\n },\n caption: {\n fontSize: \"11px\",\n color: (u = d.text) == null ? void 0 : u.secondary\n }\n };\n}, Hw = {\n values: {\n xs: 0,\n sm: 600,\n md: 960,\n lg: 1480,\n xl: 1920\n }\n}, Ww = {\n borderRadius: 4\n}, xn = { palette: Uw, custom: qw, typography: zw, breakpoints: Hw, shape: Ww }, Yw = (d) => {\n var n, r, a, o, c, u;\n const { palette: e, typography: t, custom: i } = xn, s = e((d == null ? void 0 : d.mode) === \"light\" ? Fw : Co, d == null ? void 0 : d.mode);\n return {\n ...xn,\n palette: {\n ...s,\n background: {\n ...s.background,\n default: (d == null ? void 0 : d.primaryColor) ?? ((n = s.background) == null ? void 0 : n.default),\n darkPaper: (d == null ? void 0 : d.primaryColor) ?? ((r = s.background) == null ? void 0 : r.darkPaper),\n paper: (d == null ? void 0 : d.secondaryColor) ?? ((a = s.background) == null ? void 0 : a.paper),\n component: (d == null ? void 0 : d.secondaryColor) ?? ((o = s.background) == null ? void 0 : o.component)\n },\n text: {\n ...s.text,\n primary: (d == null ? void 0 : d.primaryTextColor) ?? ((c = s.text) == null ? void 0 : c.primary),\n secondary: (d == null ? void 0 : d.secondaryTextColor) ?? ((u = s.text) == null ? void 0 : u.secondary)\n },\n error: {\n main: (d == null ? void 0 : d.errorColor) ?? s.cedeErrorColor\n },\n primary: {\n main: (d == null ? void 0 : d.accentColor) ?? s.cedePrimaryColor\n },\n warning: {\n main: (d == null ? void 0 : d.warningColor) ?? s.cedeWarningColor\n },\n cedeTextDisabled: (d == null ? void 0 : d.primaryTextColor) ?? s.cedeTextDisabled,\n logoBorderColor: (d == null ? void 0 : d.logoBorderColor) ?? s.logoBorderColor,\n cedeComponentHr: (d == null ? void 0 : d.inputBorderColor) ?? s.cedeComponentHr\n },\n typography: (f) => ({\n ...t(f),\n fontFamily: (d == null ? void 0 : d.fontFamily) ?? t(f).fontFamily\n }),\n shape: {\n borderRadius: (d == null ? void 0 : d.borderRadius) ?? xn.shape.borderRadius\n },\n custom: {\n ...i,\n storeSize: {\n ...i.storeSize,\n widgetWidth: (d == null ? void 0 : d.width) ?? i.storeSize.widgetWidth\n }\n },\n breakpoints: xn.breakpoints\n };\n}, Kw = {\n connect: 2,\n disconnect: 1,\n vaults: 1,\n vaultAccounts: 1,\n supportedExchanges: 1,\n getWithdrawalById: 2,\n transactions: 2,\n balances: 3,\n nfts: 2,\n openOrders: 2,\n retrieveOrder: 2,\n editOrder: 2,\n getMinAmounts: 2,\n createOrder: 2,\n prepareOrder: 2,\n getStandardizedNetworks: 1,\n getMarketPairs: 2,\n getMarketRate: 2,\n tickers: 1,\n tokens: 1,\n activeVault: 1,\n depositableTokens: 2,\n getNetworks: 2,\n deposit: 2,\n cancelOrder: 2,\n addCex: 2,\n withdrawToDefi: 2,\n withdrawableTokens: 2,\n getPrices: 1,\n prepareWithdrawal: 2,\n getSettings: 1,\n getEnvironment: 1,\n getAddressBook: 1,\n checkAddressIsWhitelisted: 1,\n searchTransaction: 1,\n getWidgetBundleUrl: 1,\n getWhitelistedAddresses: 1,\n getTradePath: 1,\n getSupportedTokens: 1,\n isWalletTypeTotupNeeded: 1,\n trackLink: 1,\n openPageWithHelper: 1,\n untrackLink: 1,\n getConfig: 1,\n fetchPartners: 1,\n getCurrentAppTab: 1,\n focusTab: 1,\n getUserId: 1,\n getTradePathBySupportedTokens: 1,\n verifyKYC: 1,\n getTokenNamesAndSymbols: 1,\n getDiscordInvitation: 1,\n hasJoinedDiscord: 1,\n getOHLCV: 1,\n openTab: 1,\n setByPassApprovalTradeHub: 1,\n canByPassApprovalTradeHub: 1,\n getAppVersion: 1\n /* V1 */\n};\nclass Rd {\n constructor(e) {\n ft(this, \"inpageProvider\");\n ft(this, \"request\", async (e) => {\n const i = Kw[e.method] ?? -1, s = e;\n return s.params ? s.params = { ...s.params, version: i } : s.params = { version: i }, this.inpageProvider.request(s);\n });\n ft(this, \"on\", (e, t) => (this.inpageProvider.on(e, t), this));\n ft(this, \"once\", (e, t) => (this.inpageProvider.on(e, t), this));\n ft(this, \"off\", (e, t) => (this.inpageProvider.off(e, t), this));\n ft(this, \"removeListener\", (e, t) => (this.inpageProvider.removeListener(e, t), this));\n ft(this, \"removeAllListeners\", (e) => (this.inpageProvider.removeAllListeners(e), this));\n ft(this, \"emit\", (e, ...t) => this.inpageProvider.emit(e, ...t));\n ft(this, \"getVaultPreviews\", () => this.inpageProvider.getVaultPreviews());\n ft(this, \"getIsUnlocked\", () => this.inpageProvider.getIsUnlocked());\n ft(this, \"getIsConnected\", () => this.inpageProvider.getIsConnected());\n ft(this, \"getActiveVault\", () => this.inpageProvider.getActiveVault());\n this.inpageProvider = e;\n }\n}\nfunction Xw(d = 1500) {\n let e = !1;\n return new Promise((t) => {\n window.cede ? i() : (window.addEventListener(\"cede#initialized\", i, {\n once: !0\n }), setTimeout(() => {\n i();\n }, d));\n function i() {\n if (e) {\n const n = window.cede, r = new Rd(n);\n t(r);\n return;\n }\n e = !0, window.removeEventListener(\"cede#initialized\", i);\n const { cede: s } = window;\n if (s) {\n const n = window.cede, r = new Rd(n);\n t(r);\n } else\n t(null);\n }\n });\n}\nhw(Yf);\nvar Sr = {}, Pa = { exports: {} }, _a = { exports: {} };\ntypeof Ce > \"u\" || !Ce.version || Ce.version.indexOf(\"v0.\") === 0 || Ce.version.indexOf(\"v1.\") === 0 && Ce.version.indexOf(\"v1.8.\") !== 0 ? _a.exports = { nextTick: $w } : _a.exports = Ce;\nfunction $w(d, e, t, i) {\n if (typeof d != \"function\")\n throw new TypeError('\"callback\" argument must be a function');\n var s = arguments.length, n, r;\n switch (s) {\n case 0:\n case 1:\n return Ce.nextTick(d);\n case 2:\n return Ce.nextTick(function() {\n d.call(null, e);\n });\n case 3:\n return Ce.nextTick(function() {\n d.call(null, e, t);\n });\n case 4:\n return Ce.nextTick(function() {\n d.call(null, e, t, i);\n });\n default:\n for (n = new Array(s - 1), r = 0; r < n.length; )\n n[r++] = arguments[r];\n return Ce.nextTick(function() {\n d.apply(null, n);\n });\n }\n}\nvar Vi = _a.exports, Zw = {}.toString, Qw = Array.isArray || function(d) {\n return Zw.call(d) == \"[object Array]\";\n}, xo = { exports: {} }, ls = typeof Reflect == \"object\" ? Reflect : null, Bd = ls && typeof ls.apply == \"function\" ? ls.apply : function(e, t, i) {\n return Function.prototype.apply.call(e, t, i);\n}, Rn;\nls && typeof ls.ownKeys == \"function\" ? Rn = ls.ownKeys : Object.getOwnPropertySymbols ? Rn = function(e) {\n return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e));\n} : Rn = function(e) {\n return Object.getOwnPropertyNames(e);\n};\nfunction Jw(d) {\n console && console.warn && console.warn(d);\n}\nvar Pu = Number.isNaN || function(e) {\n return e !== e;\n};\nfunction Be() {\n Be.init.call(this);\n}\nxo.exports = Be;\nvar vT = xo.exports.once = s1;\nBe.EventEmitter = Be;\nBe.prototype._events = void 0;\nBe.prototype._eventsCount = 0;\nBe.prototype._maxListeners = void 0;\nvar Vd = 10;\nfunction Tr(d) {\n if (typeof d != \"function\")\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof d);\n}\nObject.defineProperty(Be, \"defaultMaxListeners\", {\n enumerable: !0,\n get: function() {\n return Vd;\n },\n set: function(d) {\n if (typeof d != \"number\" || d < 0 || Pu(d))\n throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + d + \".\");\n Vd = d;\n }\n});\nBe.init = function() {\n (this._events === void 0 || this._events === Object.getPrototypeOf(this)._events) && (this._events = /* @__PURE__ */ Object.create(null), this._eventsCount = 0), this._maxListeners = this._maxListeners || void 0;\n};\nBe.prototype.setMaxListeners = function(e) {\n if (typeof e != \"number\" || e < 0 || Pu(e))\n throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + e + \".\");\n return this._maxListeners = e, this;\n};\nfunction _u(d) {\n return d._maxListeners === void 0 ? Be.defaultMaxListeners : d._maxListeners;\n}\nBe.prototype.getMaxListeners = function() {\n return _u(this);\n};\nBe.prototype.emit = function(e) {\n for (var t = [], i = 1; i < arguments.length; i++)\n t.push(arguments[i]);\n var s = e === \"error\", n = this._events;\n if (n !== void 0)\n s = s && n.error === void 0;\n else if (!s)\n return !1;\n if (s) {\n var r;\n if (t.length > 0 && (r = t[0]), r instanceof Error)\n throw r;\n var a = new Error(\"Unhandled error.\" + (r ? \" (\" + r.message + \")\" : \"\"));\n throw a.context = r, a;\n }\n var o = n[e];\n if (o === void 0)\n return !1;\n if (typeof o == \"function\")\n Bd(o, this, t);\n else\n for (var c = o.length, u = Vu(o, c), i = 0; i < c; ++i)\n Bd(u[i], this, t);\n return !0;\n};\nfunction Lu(d, e, t, i) {\n var s, n, r;\n if (Tr(t), n = d._events, n === void 0 ? (n = d._events = /* @__PURE__ */ Object.create(null), d._eventsCount = 0) : (n.newListener !== void 0 && (d.emit(\n \"newListener\",\n e,\n t.listener ? t.listener : t\n ), n = d._events), r = n[e]), r === void 0)\n r = n[e] = t, ++d._eventsCount;\n else if (typeof r == \"function\" ? r = n[e] = i ? [t, r] : [r, t] : i ? r.unshift(t) : r.push(t), s = _u(d), s > 0 && r.length > s && !r.warned) {\n r.warned = !0;\n var a = new Error(\"Possible EventEmitter memory leak detected. \" + r.length + \" \" + String(e) + \" listeners added. Use emitter.setMaxListeners() to increase limit\");\n a.name = \"MaxListenersExceededWarning\", a.emitter = d, a.type = e, a.count = r.length, Jw(a);\n }\n return d;\n}\nBe.prototype.addListener = function(e, t) {\n return Lu(this, e, t, !1);\n};\nBe.prototype.on = Be.prototype.addListener;\nBe.prototype.prependListener = function(e, t) {\n return Lu(this, e, t, !0);\n};\nfunction e1() {\n if (!this.fired)\n return this.target.removeListener(this.type, this.wrapFn), this.fired = !0, arguments.length === 0 ? this.listener.call(this.target) : this.listener.apply(this.target, arguments);\n}\nfunction Du(d, e, t) {\n var i = { fired: !1, wrapFn: void 0, target: d, type: e, listener: t }, s = e1.bind(i);\n return s.listener = t, i.wrapFn = s, s;\n}\nBe.prototype.once = function(e, t) {\n return Tr(t), this.on(e, Du(this, e, t)), this;\n};\nBe.prototype.prependOnceListener = function(e, t) {\n return Tr(t), this.prependListener(e, Du(this, e, t)), this;\n};\nBe.prototype.removeListener = function(e, t) {\n var i, s, n, r, a;\n if (Tr(t), s = this._events, s === void 0)\n return this;\n if (i = s[e], i === void 0)\n return this;\n if (i === t || i.listener === t)\n --this._eventsCount === 0 ? this._events = /* @__PURE__ */ Object.create(null) : (delete s[e], s.removeListener && this.emit(\"removeListener\", e, i.listener || t));\n else if (typeof i != \"function\") {\n for (n = -1, r = i.length - 1; r >= 0; r--)\n if (i[r] === t || i[r].listener === t) {\n a = i[r].listener, n = r;\n break;\n }\n if (n < 0)\n return this;\n n === 0 ? i.shift() : t1(i, n), i.length === 1 && (s[e] = i[0]), s.removeListener !== void 0 && this.emit(\"removeListener\", e, a || t);\n }\n return this;\n};\nBe.prototype.off = Be.prototype.removeListener;\nBe.prototype.removeAllListeners = function(e) {\n var t, i, s;\n if (i = this._events, i === void 0)\n return this;\n if (i.removeListener === void 0)\n return arguments.length === 0 ? (this._events = /* @__PURE__ */ Object.create(null), this._eventsCount = 0) : i[e] !== void 0 && (--this._eventsCount === 0 ? this._events = /* @__PURE__ */ Object.create(null) : delete i[e]), this;\n if (arguments.length === 0) {\n var n = Object.keys(i), r;\n for (s = 0; s < n.length; ++s)\n r = n[s], r !== \"removeListener\" && this.removeAllListeners(r);\n return this.removeAllListeners(\"removeListener\"), this._events = /* @__PURE__ */ Object.create(null), this._eventsCount = 0, this;\n }\n if (t = i[e], typeof t == \"function\")\n this.removeListener(e, t);\n else if (t !== void 0)\n for (s = t.length - 1; s >= 0; s--)\n this.removeListener(e, t[s]);\n return this;\n};\nfunction Ru(d, e, t) {\n var i = d._events;\n if (i === void 0)\n return [];\n var s = i[e];\n return s === void 0 ? [] : typeof s == \"function\" ? t ? [s.listener || s] : [s] : t ? i1(s) : Vu(s, s.length);\n}\nBe.prototype.listeners = function(e) {\n return Ru(this, e, !0);\n};\nBe.prototype.rawListeners = function(e) {\n return Ru(this, e, !1);\n};\nBe.listenerCount = function(d, e) {\n return typeof d.listenerCount == \"function\" ? d.listenerCount(e) : Bu.call(d, e);\n};\nBe.prototype.listenerCount = Bu;\nfunction Bu(d) {\n var e = this._events;\n if (e !== void 0) {\n var t = e[d];\n if (typeof t == \"function\")\n return 1;\n if (t !== void 0)\n return t.length;\n }\n return 0;\n}\nBe.prototype.eventNames = function() {\n return this._eventsCount > 0 ? Rn(this._events) : [];\n};\nfunction Vu(d, e) {\n for (var t = new Array(e), i = 0; i < e; ++i)\n t[i] = d[i];\n return t;\n}\nfunction t1(d, e) {\n for (; e + 1 < d.length; e++)\n d[e] = d[e + 1];\n d.pop();\n}\nfunction i1(d) {\n for (var e = new Array(d.length), t = 0; t < e.length; ++t)\n e[t] = d[t].listener || d[t];\n return e;\n}\nfunction s1(d, e) {\n return new Promise(function(t, i) {\n function s(r) {\n d.removeListener(e, n), i(r);\n }\n function n() {\n typeof d.removeListener == \"function\" && d.removeListener(\"error\", s), t([].slice.call(arguments));\n }\n ju(d, e, n, { once: !0 }), e !== \"error\" && n1(d, s, { once: !0 });\n });\n}\nfunction n1(d, e, t) {\n typeof d.on == \"function\" && ju(d, \"error\", e, t);\n}\nfunction ju(d, e, t, i) {\n if (typeof d.on == \"function\")\n i.once ? d.once(e, t) : d.on(e, t);\n else if (typeof d.addEventListener == \"function\")\n d.addEventListener(e, function s(n) {\n i.once && d.removeEventListener(e, s), t(n);\n });\n else\n throw new TypeError('The \"emitter\" argument must be of type EventEmitter. Received type ' + typeof d);\n}\nvar vs = xo.exports, Fu = vs.EventEmitter, La = { exports: {} };\n(function(d, e) {\n var t = nn(), i = t.Buffer;\n function s(r, a) {\n for (var o in r)\n a[o] = r[o];\n }\n i.from && i.alloc && i.allocUnsafe && i.allocUnsafeSlow ? d.exports = t : (s(t, e), e.Buffer = n);\n function n(r, a, o) {\n return i(r, a, o);\n }\n s(i, n), n.from = function(r, a, o) {\n if (typeof r == \"number\")\n throw new TypeError(\"Argument must not be a number\");\n return i(r, a, o);\n }, n.alloc = function(r, a, o) {\n if (typeof r != \"number\")\n throw new TypeError(\"Argument must be a number\");\n var c = i(r);\n return a !== void 0 ? typeof o == \"string\" ? c.fill(a, o) : c.fill(a) : c.fill(0), c;\n }, n.allocUnsafe = function(r) {\n if (typeof r != \"number\")\n throw new TypeError(\"Argument must be a number\");\n return i(r);\n }, n.allocUnsafeSlow = function(r) {\n if (typeof r != \"number\")\n throw new TypeError(\"Argument must be a number\");\n return t.SlowBuffer(r);\n };\n})(La, La.exports);\nvar vo = La.exports, Fe = {};\nfunction r1(d) {\n return Array.isArray ? Array.isArray(d) : Ar(d) === \"[object Array]\";\n}\nFe.isArray = r1;\nfunction a1(d) {\n return typeof d == \"boolean\";\n}\nFe.isBoolean = a1;\nfunction o1(d) {\n return d === null;\n}\nFe.isNull = o1;\nfunction d1(d) {\n return d == null;\n}\nFe.isNullOrUndefined = d1;\nfunction c1(d) {\n return typeof d == \"number\";\n}\nFe.isNumber = c1;\nfunction u1(d) {\n return typeof d == \"string\";\n}\nFe.isString = u1;\nfunction f1(d) {\n return typeof d == \"symbol\";\n}\nFe.isSymbol = f1;\nfunction h1(d) {\n return d === void 0;\n}\nFe.isUndefined = h1;\nfunction l1(d) {\n return Ar(d) === \"[object RegExp]\";\n}\nFe.isRegExp = l1;\nfunction p1(d) {\n return typeof d == \"object\" && d !== null;\n}\nFe.isObject = p1;\nfunction g1(d) {\n return Ar(d) === \"[object Date]\";\n}\nFe.isDate = g1;\nfunction m1(d) {\n return Ar(d) === \"[object Error]\" || d instanceof Error;\n}\nFe.isError = m1;\nfunction y1(d) {\n return typeof d == \"function\";\n}\nFe.isFunction = y1;\nfunction w1(d) {\n return d === null || typeof d == \"boolean\" || typeof d == \"number\" || typeof d == \"string\" || typeof d == \"symbol\" || // ES6 symbol\n typeof d > \"u\";\n}\nFe.isPrimitive = w1;\nFe.isBuffer = nn().Buffer.isBuffer;\nfunction Ar(d) {\n return Object.prototype.toString.call(d);\n}\nvar Da = { exports: {} };\ntypeof Object.create == \"function\" ? Da.exports = function(e, t) {\n t && (e.super_ = t, e.prototype = Object.create(t.prototype, {\n constructor: {\n value: e,\n enumerable: !1,\n writable: !0,\n configurable: !0\n }\n }));\n} : Da.exports = function(e, t) {\n if (t) {\n e.super_ = t;\n var i = function() {\n };\n i.prototype = t.prototype, e.prototype = new i(), e.prototype.constructor = e;\n }\n};\nvar jt = Da.exports, dn = {}, Uu = {}, qu = function() {\n if (typeof Symbol != \"function\" || typeof Object.getOwnPropertySymbols != \"function\")\n return !1;\n if (typeof Symbol.iterator == \"symbol\")\n return !0;\n var e = {}, t = Symbol(\"test\"), i = Object(t);\n if (typeof t == \"string\" || Object.prototype.toString.call(t) !== \"[object Symbol]\" || Object.prototype.toString.call(i) !== \"[object Symbol]\")\n return !1;\n var s = 42;\n e[t] = s;\n for (t in e)\n return !1;\n if (typeof Object.keys == \"function\" && Object.keys(e).length !== 0 || typeof Object.getOwnPropertyNames == \"function\" && Object.getOwnPropertyNames(e).length !== 0)\n return !1;\n var n = Object.getOwnPropertySymbols(e);\n if (n.length !== 1 || n[0] !== t || !Object.prototype.propertyIsEnumerable.call(e, t))\n return !1;\n if (typeof Object.getOwnPropertyDescriptor == \"function\") {\n var r = Object.getOwnPropertyDescriptor(e, t);\n if (r.value !== s || r.enumerable !== !0)\n return !1;\n }\n return !0;\n}, b1 = qu, ko = function() {\n return b1() && !!Symbol.toStringTag;\n}, S1 = Error, T1 = EvalError, A1 = RangeError, I1 = ReferenceError, Gu = SyntaxError, Ir = TypeError, O1 = URIError, jd = typeof Symbol < \"u\" && Symbol, M1 = qu, C1 = function() {\n return typeof jd != \"function\" || typeof Symbol != \"function\" || typeof jd(\"foo\") != \"symbol\" || typeof Symbol(\"bar\") != \"symbol\" ? !1 : M1();\n}, Xr = {\n __proto__: null,\n foo: {}\n}, x1 = Object, v1 = function() {\n return { __proto__: Xr }.foo === Xr.foo && !(Xr instanceof x1);\n}, k1 = \"Function.prototype.bind called on incompatible \", E1 = Object.prototype.toString, N1 = Math.max, P1 = \"[object Function]\", Fd = function(e, t) {\n for (var i = [], s = 0; s < e.length; s += 1)\n i[s] = e[s];\n for (var n = 0; n < t.length; n += 1)\n i[n + e.length] = t[n];\n return i;\n}, _1 = function(e, t) {\n for (var i = [], s = t || 0, n = 0; s < e.length; s += 1, n += 1)\n i[n] = e[s];\n return i;\n}, L1 = function(d, e) {\n for (var t = \"\", i = 0; i < d.length; i += 1)\n t += d[i], i + 1 < d.length && (t += e);\n return t;\n}, D1 = function(e) {\n var t = this;\n if (typeof t != \"function\" || E1.apply(t) !== P1)\n throw new TypeError(k1 + t);\n for (var i = _1(arguments, 1), s, n = function() {\n if (this instanceof s) {\n var u = t.apply(\n this,\n Fd(i, arguments)\n );\n return Object(u) === u ? u : this;\n }\n return t.apply(\n e,\n Fd(i, arguments)\n );\n }, r = N1(0, t.length - i.length), a = [], o = 0; o < r; o++)\n a[o] = \"$\" + o;\n if (s = Function(\"binder\", \"return function (\" + L1(a, \",\") + \"){ return binder.apply(this,arguments); }\")(n), t.prototype) {\n var c = function() {\n };\n c.prototype = t.prototype, s.prototype = new c(), c.prototype = null;\n }\n return s;\n}, R1 = D1, Eo = Function.prototype.bind || R1, B1 = Function.prototype.call, V1 = Object.prototype.hasOwnProperty, j1 = Eo, F1 = j1.call(B1, V1), ve, U1 = S1, q1 = T1, G1 = A1, z1 = I1, Ts = Gu, ps = Ir, H1 = O1, zu = Function, $r = function(d) {\n try {\n return zu('\"use strict\"; return (' + d + \").constructor;\")();\n } catch {\n }\n}, Yi = Object.getOwnPropertyDescriptor;\nif (Yi)\n try {\n Yi({}, \"\");\n } catch {\n Yi = null;\n }\nvar Zr = function() {\n throw new ps();\n}, W1 = Yi ? function() {\n try {\n return arguments.callee, Zr;\n } catch {\n try {\n return Yi(arguments, \"callee\").get;\n } catch {\n return Zr;\n }\n }\n}() : Zr, ns = C1(), Y1 = v1(), tt = Object.getPrototypeOf || (Y1 ? function(d) {\n return d.__proto__;\n} : null), ds = {}, K1 = typeof Uint8Array > \"u\" || !tt ? ve : tt(Uint8Array), Ki = {\n __proto__: null,\n \"%AggregateError%\": typeof AggregateError > \"u\" ? ve : AggregateError,\n \"%Array%\": Array,\n \"%ArrayBuffer%\": typeof ArrayBuffer > \"u\" ? ve : ArrayBuffer,\n \"%ArrayIteratorPrototype%\": ns && tt ? tt([][Symbol.iterator]()) : ve,\n \"%AsyncFromSyncIteratorPrototype%\": ve,\n \"%AsyncFunction%\": ds,\n \"%AsyncGenerator%\": ds,\n \"%AsyncGeneratorFunction%\": ds,\n \"%AsyncIteratorPrototype%\": ds,\n \"%Atomics%\": typeof Atomics > \"u\" ? ve : Atomics,\n \"%BigInt%\": typeof BigInt > \"u\" ? ve : BigInt,\n \"%BigInt64Array%\": typeof BigInt64Array > \"u\" ? ve : BigInt64Array,\n \"%BigUint64Array%\": typeof BigUint64Array > \"u\" ? ve : BigUint64Array,\n \"%Boolean%\": Boolean,\n \"%DataView%\": typeof DataView > \"u\" ? ve : DataView,\n \"%Date%\": Date,\n \"%decodeURI%\": decodeURI,\n \"%decodeURIComponent%\": decodeURIComponent,\n \"%encodeURI%\": encodeURI,\n \"%encodeURIComponent%\": encodeURIComponent,\n \"%Error%\": U1,\n \"%eval%\": eval,\n // eslint-disable-line no-eval\n \"%EvalError%\": q1,\n \"%Float32Array%\": typeof Float32Array > \"u\" ? ve : Float32Array,\n \"%Float64Array%\": typeof Float64Array > \"u\" ? ve : Float64Array,\n \"%FinalizationRegistry%\": typeof FinalizationRegistry > \"u\" ? ve : FinalizationRegistry,\n \"%Function%\": zu,\n \"%GeneratorFunction%\": ds,\n \"%Int8Array%\": typeof Int8Array > \"u\" ? ve : Int8Array,\n \"%Int16Array%\": typeof Int16Array > \"u\" ? ve : Int16Array,\n \"%Int32Array%\": typeof Int32Array > \"u\" ? ve : Int32Array,\n \"%isFinite%\": isFinite,\n \"%isNaN%\": isNaN,\n \"%IteratorPrototype%\": ns && tt ? tt(tt([][Symbol.iterator]())) : ve,\n \"%JSON%\": typeof JSON == \"object\" ? JSON : ve,\n \"%Map%\": typeof Map > \"u\" ? ve : Map,\n \"%MapIteratorPrototype%\": typeof Map > \"u\" || !ns || !tt ? ve : tt((/* @__PURE__ */ new Map())[Symbol.iterator]()),\n \"%Math%\": Math,\n \"%Number%\": Number,\n \"%Object%\": Object,\n \"%parseFloat%\": parseFloat,\n \"%parseInt%\": parseInt,\n \"%Promise%\": typeof Promise > \"u\" ? ve : Promise,\n \"%Proxy%\": typeof Proxy > \"u\" ? ve : Proxy,\n \"%RangeError%\": G1,\n \"%ReferenceError%\": z1,\n \"%Reflect%\": typeof Reflect > \"u\" ? ve : Reflect,\n \"%RegExp%\": RegExp,\n \"%Set%\": typeof Set > \"u\" ? ve : Set,\n \"%SetIteratorPrototype%\": typeof Set > \"u\" || !ns || !tt ? ve : tt((/* @__PURE__ */ new Set())[Symbol.iterator]()),\n \"%SharedArrayBuffer%\": typeof SharedArrayBuffer > \"u\" ? ve : SharedArrayBuffer,\n \"%String%\": String,\n \"%StringIteratorPrototype%\": ns && tt ? tt(\"\"[Symbol.iterator]()) : ve,\n \"%Symbol%\": ns ? Symbol : ve,\n \"%SyntaxError%\": Ts,\n \"%ThrowTypeError%\": W1,\n \"%TypedArray%\": K1,\n \"%TypeError%\": ps,\n \"%Uint8Array%\": typeof Uint8Array > \"u\" ? ve : Uint8Array,\n \"%Uint8ClampedArray%\": typeof Uint8ClampedArray > \"u\" ? ve : Uint8ClampedArray,\n \"%Uint16Array%\": typeof Uint16Array > \"u\" ? ve : Uint16Array,\n \"%Uint32Array%\": typeof Uint32Array > \"u\" ? ve : Uint32Array,\n \"%URIError%\": H1,\n \"%WeakMap%\": typeof WeakMap > \"u\" ? ve : WeakMap,\n \"%WeakRef%\": typeof WeakRef > \"u\" ? ve : WeakRef,\n \"%WeakSet%\": typeof WeakSet > \"u\" ? ve : WeakSet\n};\nif (tt)\n try {\n null.error;\n } catch (d) {\n var X1 = tt(tt(d));\n Ki[\"%Error.prototype%\"] = X1;\n }\nvar $1 = function d(e) {\n var t;\n if (e === \"%AsyncFunction%\")\n t = $r(\"async function () {}\");\n else if (e === \"%GeneratorFunction%\")\n t = $r(\"function* () {}\");\n else if (e === \"%AsyncGeneratorFunction%\")\n t = $r(\"async function* () {}\");\n else if (e === \"%AsyncGenerator%\") {\n var i = d(\"%AsyncGeneratorFunction%\");\n i && (t = i.prototype);\n } else if (e === \"%AsyncIteratorPrototype%\") {\n var s = d(\"%AsyncGenerator%\");\n s && tt && (t = tt(s.prototype));\n }\n return Ki[e] = t, t;\n}, Ud = {\n __proto__: null,\n \"%ArrayBufferPrototype%\": [\"ArrayBuffer\", \"prototype\"],\n \"%ArrayPrototype%\": [\"Array\", \"prototype\"],\n \"%ArrayProto_entries%\": [\"Array\", \"prototype\", \"entries\"],\n \"%ArrayProto_forEach%\": [\"Array\", \"prototype\", \"forEach\"],\n \"%ArrayProto_keys%\": [\"Array\", \"prototype\", \"keys\"],\n \"%ArrayProto_values%\": [\"Array\", \"prototype\", \"values\"],\n \"%AsyncFunctionPrototype%\": [\"AsyncFunction\", \"prototype\"],\n \"%AsyncGenerator%\": [\"AsyncGeneratorFunction\", \"prototype\"],\n \"%AsyncGeneratorPrototype%\": [\"AsyncGeneratorFunction\", \"prototype\", \"prototype\"],\n \"%BooleanPrototype%\": [\"Boolean\", \"prototype\"],\n \"%DataViewPrototype%\": [\"DataView\", \"prototype\"],\n \"%DatePrototype%\": [\"Date\", \"prototype\"],\n \"%ErrorPrototype%\": [\"Error\", \"prototype\"],\n \"%EvalErrorPrototype%\": [\"EvalError\", \"prototype\"],\n \"%Float32ArrayPrototype%\": [\"Float32Array\", \"prototype\"],\n \"%Float64ArrayPrototype%\": [\"Float64Array\", \"prototype\"],\n \"%FunctionPrototype%\": [\"Function\", \"prototype\"],\n \"%Generator%\": [\"GeneratorFunction\", \"prototype\"],\n \"%GeneratorPrototype%\": [\"GeneratorFunction\", \"prototype\", \"prototype\"],\n \"%Int8ArrayPrototype%\": [\"Int8Array\", \"prototype\"],\n \"%Int16ArrayPrototype%\": [\"Int16Array\", \"prototype\"],\n \"%Int32ArrayPrototype%\": [\"Int32Array\", \"prototype\"],\n \"%JSONParse%\": [\"JSON\", \"parse\"],\n \"%JSONStringify%\": [\"JSON\", \"stringify\"],\n \"%MapPrototype%\": [\"Map\", \"prototype\"],\n \"%NumberPrototype%\": [\"Number\", \"prototype\"],\n \"%ObjectPrototype%\": [\"Object\", \"prototype\"],\n \"%ObjProto_toString%\": [\"Object\", \"prototype\", \"toString\"],\n \"%ObjProto_valueOf%\": [\"Object\", \"prototype\", \"valueOf\"],\n \"%PromisePrototype%\": [\"Promise\", \"prototype\"],\n \"%PromiseProto_then%\": [\"Promise\", \"prototype\", \"then\"],\n \"%Promise_all%\": [\"Promise\", \"all\"],\n \"%Promise_reject%\": [\"Promise\", \"reject\"],\n \"%Promise_resolve%\": [\"Promise\", \"resolve\"],\n \"%RangeErrorPrototype%\": [\"RangeError\", \"prototype\"],\n \"%ReferenceErrorPrototype%\": [\"ReferenceError\", \"prototype\"],\n \"%RegExpPrototype%\": [\"RegExp\", \"prototype\"],\n \"%SetPrototype%\": [\"Set\", \"prototype\"],\n \"%SharedArrayBufferPrototype%\": [\"SharedArrayBuffer\", \"prototype\"],\n \"%StringPrototype%\": [\"String\", \"prototype\"],\n \"%SymbolPrototype%\": [\"Symbol\", \"prototype\"],\n \"%SyntaxErrorPrototype%\": [\"SyntaxError\", \"prototype\"],\n \"%TypedArrayPrototype%\": [\"TypedArray\", \"prototype\"],\n \"%TypeErrorPrototype%\": [\"TypeError\", \"prototype\"],\n \"%Uint8ArrayPrototype%\": [\"Uint8Array\", \"prototype\"],\n \"%Uint8ClampedArrayPrototype%\": [\"Uint8ClampedArray\", \"prototype\"],\n \"%Uint16ArrayPrototype%\": [\"Uint16Array\", \"prototype\"],\n \"%Uint32ArrayPrototype%\": [\"Uint32Array\", \"prototype\"],\n \"%URIErrorPrototype%\": [\"URIError\", \"prototype\"],\n \"%WeakMapPrototype%\": [\"WeakMap\", \"prototype\"],\n \"%WeakSetPrototype%\": [\"WeakSet\", \"prototype\"]\n}, cn = Eo, Jn = F1, Z1 = cn.call(Function.call, Array.prototype.concat), Q1 = cn.call(Function.apply, Array.prototype.splice), qd = cn.call(Function.call, String.prototype.replace), er = cn.call(Function.call, String.prototype.slice), J1 = cn.call(Function.call, RegExp.prototype.exec), eb = /[^%.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|%$))/g, tb = /\\\\(\\\\)?/g, ib = function(e) {\n var t = er(e, 0, 1), i = er(e, -1);\n if (t === \"%\" && i !== \"%\")\n throw new Ts(\"invalid intrinsic syntax, expected closing `%`\");\n if (i === \"%\" && t !== \"%\")\n throw new Ts(\"invalid intrinsic syntax, expected opening `%`\");\n var s = [];\n return qd(e, eb, function(n, r, a, o) {\n s[s.length] = a ? qd(o, tb, \"$1\") : r || n;\n }), s;\n}, sb = function(e, t) {\n var i = e, s;\n if (Jn(Ud, i) && (s = Ud[i], i = \"%\" + s[0] + \"%\"), Jn(Ki, i)) {\n var n = Ki[i];\n if (n === ds && (n = $1(i)), typeof n > \"u\" && !t)\n throw new ps(\"intrinsic \" + e + \" exists, but is not available. Please file an issue!\");\n return {\n alias: s,\n name: i,\n value: n\n };\n }\n throw new Ts(\"intrinsic \" + e + \" does not exist!\");\n}, un = function(e, t) {\n if (typeof e != \"string\" || e.length === 0)\n throw new ps(\"intrinsic name must be a non-empty string\");\n if (arguments.length > 1 && typeof t != \"boolean\")\n throw new ps('\"allowMissing\" argument must be a boolean');\n if (J1(/^%?[^%]*%?$/, e) === null)\n throw new Ts(\"`%` may not be present anywhere but at the beginning and end of the intrinsic name\");\n var i = ib(e), s = i.length > 0 ? i[0] : \"\", n = sb(\"%\" + s + \"%\", t), r = n.name, a = n.value, o = !1, c = n.alias;\n c && (s = c[0], Q1(i, Z1([0, 1], c)));\n for (var u = 1, f = !0; u < i.length; u += 1) {\n var h = i[u], l = er(h, 0, 1), p = er(h, -1);\n if ((l === '\"' || l === \"'\" || l === \"`\" || p === '\"' || p === \"'\" || p === \"`\") && l !== p)\n throw new Ts(\"property names with quotes must have matching quotes\");\n if ((h === \"constructor\" || !f) && (o = !0), s += \".\" + h, r = \"%\" + s + \"%\", Jn(Ki, r))\n a = Ki[r];\n else if (a != null) {\n if (!(h in a)) {\n if (!t)\n throw new ps(\"base intrinsic for \" + e + \" exists, but the property is not available.\");\n return;\n }\n if (Yi && u + 1 >= i.length) {\n var m = Yi(a, h);\n f = !!m, f && \"get\" in m && !(\"originalValue\" in m.get) ? a = m.get : a = a[h];\n } else\n f = Jn(a, h), a = a[h];\n f && !o && (Ki[r] = a);\n }\n }\n return a;\n}, Hu = { exports: {} }, Qr, Gd;\nfunction No() {\n if (Gd)\n return Qr;\n Gd = 1;\n var d = un, e = d(\"%Object.defineProperty%\", !0) || !1;\n if (e)\n try {\n e({}, \"a\", { value: 1 });\n } catch {\n e = !1;\n }\n return Qr = e, Qr;\n}\nvar nb = un, Bn = nb(\"%Object.getOwnPropertyDescriptor%\", !0);\nif (Bn)\n try {\n Bn([], \"length\");\n } catch {\n Bn = null;\n }\nvar Po = Bn, zd = No(), rb = Gu, rs = Ir, Hd = Po, ab = function(e, t, i) {\n if (!e || typeof e != \"object\" && typeof e != \"function\")\n throw new rs(\"`obj` must be an object or a function`\");\n if (typeof t != \"string\" && typeof t != \"symbol\")\n throw new rs(\"`property` must be a string or a symbol`\");\n if (arguments.length > 3 && typeof arguments[3] != \"boolean\" && arguments[3] !== null)\n throw new rs(\"`nonEnumerable`, if provided, must be a boolean or null\");\n if (arguments.length > 4 && typeof arguments[4] != \"boolean\" && arguments[4] !== null)\n throw new rs(\"`nonWritable`, if provided, must be a boolean or null\");\n if (arguments.length > 5 && typeof arguments[5] != \"boolean\" && arguments[5] !== null)\n throw new rs(\"`nonConfigurable`, if provided, must be a boolean or null\");\n if (arguments.length > 6 && typeof arguments[6] != \"boolean\")\n throw new rs(\"`loose`, if provided, must be a boolean\");\n var s = arguments.length > 3 ? arguments[3] : null, n = arguments.length > 4 ? arguments[4] : null, r = arguments.length > 5 ? arguments[5] : null, a = arguments.length > 6 ? arguments[6] : !1, o = !!Hd && Hd(e, t);\n if (zd)\n zd(e, t, {\n configurable: r === null && o ? o.configurable : !r,\n enumerable: s === null && o ? o.enumerable : !s,\n value: i,\n writable: n === null && o ? o.writable : !n\n });\n else if (a || !s && !n && !r)\n e[t] = i;\n else\n throw new rb(\"This environment does not support defining a property as non-configurable, non-writable, or non-enumerable.\");\n}, Ra = No(), Wu = function() {\n return !!Ra;\n};\nWu.hasArrayLengthDefineBug = function() {\n if (!Ra)\n return null;\n try {\n return Ra([], \"length\", { value: 1 }).length !== 1;\n } catch {\n return !0;\n }\n};\nvar ob = Wu, db = un, Wd = ab, cb = ob(), Yd = Po, Kd = Ir, ub = db(\"%Math.floor%\"), fb = function(e, t) {\n if (typeof e != \"function\")\n throw new Kd(\"`fn` is not a function\");\n if (typeof t != \"number\" || t < 0 || t > 4294967295 || ub(t) !== t)\n throw new Kd(\"`length` must be a positive 32-bit integer\");\n var i = arguments.length > 2 && !!arguments[2], s = !0, n = !0;\n if (\"length\" in e && Yd) {\n var r = Yd(e, \"length\");\n r && !r.configurable && (s = !1), r && !r.writable && (n = !1);\n }\n return (s || n || !i) && (cb ? Wd(\n /** @type {Parameters<define>[0]} */\n e,\n \"length\",\n t,\n !0,\n !0\n ) : Wd(\n /** @type {Parameters<define>[0]} */\n e,\n \"length\",\n t\n )), e;\n};\n(function(d) {\n var e = Eo, t = un, i = fb, s = Ir, n = t(\"%Function.prototype.apply%\"), r = t(\"%Function.prototype.call%\"), a = t(\"%Reflect.apply%\", !0) || e.call(r, n), o = No(), c = t(\"%Math.max%\");\n d.exports = function(h) {\n if (typeof h != \"function\")\n throw new s(\"a function is required\");\n var l = a(e, r, arguments);\n return i(\n l,\n 1 + c(0, h.length - (arguments.length - 1)),\n !0\n );\n };\n var u = function() {\n return a(e, n, arguments);\n };\n o ? o(d.exports, \"apply\", { value: u }) : d.exports.apply = u;\n})(Hu);\nvar Yu = Hu.exports, Ku = un, Xu = Yu, hb = Xu(Ku(\"String.prototype.indexOf\")), $u = function(e, t) {\n var i = Ku(e, !!t);\n return typeof i == \"function\" && hb(e, \".prototype.\") > -1 ? Xu(i) : i;\n}, lb = ko(), pb = $u, Ba = pb(\"Object.prototype.toString\"), Or = function(e) {\n return lb && e && typeof e == \"object\" && Symbol.toStringTag in e ? !1 : Ba(e) === \"[object Arguments]\";\n}, Zu = function(e) {\n return Or(e) ? !0 : e !== null && typeof e == \"object\" && typeof e.length == \"number\" && e.length >= 0 && Ba(e) !== \"[object Array]\" && Ba(e.callee) === \"[object Function]\";\n}, gb = function() {\n return Or(arguments);\n}();\nOr.isLegacyArguments = Zu;\nvar mb = gb ? Or : Zu, yb = Object.prototype.toString, wb = Function.prototype.toString, bb = /^\\s*(?:function)?\\*/, Qu = ko(), Jr = Object.getPrototypeOf, Sb = function() {\n if (!Qu)\n return !1;\n try {\n return Function(\"return function*() {}\")();\n } catch {\n }\n}, ea, Tb = function(e) {\n if (typeof e != \"function\")\n return !1;\n if (bb.test(wb.call(e)))\n return !0;\n if (!Qu) {\n var t = yb.call(e);\n return t === \"[object GeneratorFunction]\";\n }\n if (!Jr)\n return !1;\n if (typeof ea > \"u\") {\n var i = Sb();\n ea = i ? Jr(i) : !1;\n }\n return Jr(e) === ea;\n}, Ju = Function.prototype.toString, cs = typeof Reflect == \"object\" && Reflect !== null && Reflect.apply, Va, Vn;\nif (typeof cs == \"function\" && typeof Object.defineProperty == \"function\")\n try {\n Va = Object.defineProperty({}, \"length\", {\n get: function() {\n throw Vn;\n }\n }), Vn = {}, cs(function() {\n throw 42;\n }, null, Va);\n } catch (d) {\n d !== Vn && (cs = null);\n }\nelse\n cs = null;\nvar Ab = /^\\s*class\\b/, ja = function(e) {\n try {\n var t = Ju.call(e);\n return Ab.test(t);\n } catch {\n return !1;\n }\n}, ta = function(e) {\n try {\n return ja(e) ? !1 : (Ju.call(e), !0);\n } catch {\n return !1;\n }\n}, jn = Object.prototype.toString, Ib = \"[object Object]\", Ob = \"[object Function]\", Mb = \"[object GeneratorFunction]\", Cb = \"[object HTMLAllCollection]\", xb = \"[object HTML document.all class]\", vb = \"[object HTMLCollection]\", kb = typeof Symbol == \"function\" && !!Symbol.toStringTag, Eb = !(0 in [,]), Fa = function() {\n return !1;\n};\nif (typeof document == \"object\") {\n var Nb = document.all;\n jn.call(Nb) === jn.call(document.all) && (Fa = function(e) {\n if ((Eb || !e) && (typeof e > \"u\" || typeof e == \"object\"))\n try {\n var t = jn.call(e);\n return (t === Cb || t === xb || t === vb || t === Ib) && e(\"\") == null;\n } catch {\n }\n return !1;\n });\n}\nvar Pb = cs ? function(e) {\n if (Fa(e))\n return !0;\n if (!e || typeof e != \"function\" && typeof e != \"object\")\n return !1;\n try {\n cs(e, null, Va);\n } catch (t) {\n if (t !== Vn)\n return !1;\n }\n return !ja(e) && ta(e);\n} : function(e) {\n if (Fa(e))\n return !0;\n if (!e || typeof e != \"function\" && typeof e != \"object\")\n return !1;\n if (kb)\n return ta(e);\n if (ja(e))\n return !1;\n var t = jn.call(e);\n return t !== Ob && t !== Mb && !/^\\[object HTML/.test(t) ? !1 : ta(e);\n}, _b = Pb, Lb = Object.prototype.toString, ef = Object.prototype.hasOwnProperty, Db = function(e, t, i) {\n for (var s = 0, n = e.length; s < n; s++)\n ef.call(e, s) && (i == null ? t(e[s], s, e) : t.call(i, e[s], s, e));\n}, Rb = function(e, t, i) {\n for (var s = 0, n = e.length; s < n; s++)\n i == null ? t(e.charAt(s), s, e) : t.call(i, e.charAt(s), s, e);\n}, Bb = function(e, t, i) {\n for (var s in e)\n ef.call(e, s) && (i == null ? t(e[s], s, e) : t.call(i, e[s], s, e));\n}, Vb = function(e, t, i) {\n if (!_b(t))\n throw new TypeError(\"iterator must be a function\");\n var s;\n arguments.length >= 3 && (s = i), Lb.call(e) === \"[object Array]\" ? Db(e, t, s) : typeof e == \"string\" ? Rb(e, t, s) : Bb(e, t, s);\n}, jb = Vb, Fb = [\n \"Float32Array\",\n \"Float64Array\",\n \"Int8Array\",\n \"Int16Array\",\n \"Int32Array\",\n \"Uint8Array\",\n \"Uint8ClampedArray\",\n \"Uint16Array\",\n \"Uint32Array\",\n \"BigInt64Array\",\n \"BigUint64Array\"\n], ia = Fb, Ub = typeof globalThis > \"u\" ? qe : globalThis, qb = function() {\n for (var e = [], t = 0; t < ia.length; t++)\n typeof Ub[ia[t]] == \"function\" && (e[e.length] = ia[t]);\n return e;\n}, tr = jb, Gb = qb, Xd = Yu, _o = $u, Fn = Po, zb = _o(\"Object.prototype.toString\"), tf = ko(), $d = typeof globalThis > \"u\" ? qe : globalThis, Ua = Gb(), Lo = _o(\"String.prototype.slice\"), sa = Object.getPrototypeOf, Hb = _o(\"Array.prototype.indexOf\", !0) || function(e, t) {\n for (var i = 0; i < e.length; i += 1)\n if (e[i] === t)\n return i;\n return -1;\n}, ir = { __proto__: null };\ntf && Fn && sa ? tr(Ua, function(d) {\n var e = new $d[d]();\n if (Symbol.toStringTag in e) {\n var t = sa(e), i = Fn(t, Symbol.toStringTag);\n if (!i) {\n var s = sa(t);\n i = Fn(s, Symbol.toStringTag);\n }\n ir[\"$\" + d] = Xd(i.get);\n }\n}) : tr(Ua, function(d) {\n var e = new $d[d](), t = e.slice || e.set;\n t && (ir[\"$\" + d] = Xd(t));\n});\nvar Wb = function(e) {\n var t = !1;\n return tr(\n // eslint-disable-next-line no-extra-parens\n /** @type {Record<`\\$${TypedArrayName}`, Getter>} */\n /** @type {any} */\n ir,\n /** @type {(getter: Getter, name: `\\$${import('.').TypedArrayName}`) => void} */\n function(i, s) {\n if (!t)\n try {\n \"$\" + i(e) === s && (t = Lo(s, 1));\n } catch {\n }\n }\n ), t;\n}, Yb = function(e) {\n var t = !1;\n return tr(\n // eslint-disable-next-line no-extra-parens\n /** @type {Record<`\\$${TypedArrayName}`, Getter>} */\n /** @type {any} */\n ir,\n /** @type {(getter: typeof cache, name: `\\$${import('.').TypedArrayName}`) => void} */\n function(i, s) {\n if (!t)\n try {\n i(e), t = Lo(s, 1);\n } catch {\n }\n }\n ), t;\n}, sf = function(e) {\n if (!e || typeof e != \"object\")\n return !1;\n if (!tf) {\n var t = Lo(zb(e), 8, -1);\n return Hb(Ua, t) > -1 ? t : t !== \"Object\" ? !1 : Yb(e);\n }\n return Fn ? Wb(e) : null;\n}, Kb = sf, Xb = function(e) {\n return !!Kb(e);\n};\n(function(d) {\n var e = mb, t = Tb, i = sf, s = Xb;\n function n(ue) {\n return ue.call.bind(ue);\n }\n var r = typeof BigInt < \"u\", a = typeof Symbol < \"u\", o = n(Object.prototype.toString), c = n(Number.prototype.valueOf), u = n(String.prototype.valueOf), f = n(Boolean.prototype.valueOf);\n if (r)\n var h = n(BigInt.prototype.valueOf);\n if (a)\n var l = n(Symbol.prototype.valueOf);\n function p(ue, Tt) {\n if (typeof ue != \"object\")\n return !1;\n try {\n return Tt(ue), !0;\n } catch {\n return !1;\n }\n }\n d.isArgumentsObject = e, d.isGeneratorFunction = t, d.isTypedArray = s;\n function m(ue) {\n return typeof Promise < \"u\" && ue instanceof Promise || ue !== null && typeof ue == \"object\" && typeof ue.then == \"function\" && typeof ue.catch == \"function\";\n }\n d.isPromise = m;\n function y(ue) {\n return typeof ArrayBuffer < \"u\" && ArrayBuffer.isView ? ArrayBuffer.isView(ue) : s(ue) || U(ue);\n }\n d.isArrayBufferView = y;\n function w(ue) {\n return i(ue) === \"Uint8Array\";\n }\n d.isUint8Array = w;\n function S(ue) {\n return i(ue) === \"Uint8ClampedArray\";\n }\n d.isUint8ClampedArray = S;\n function b(ue) {\n return i(ue) === \"Uint16Array\";\n }\n d.isUint16Array = b;\n function T(ue) {\n return i(ue) === \"Uint32Array\";\n }\n d.isUint32Array = T;\n function x(ue) {\n return i(ue) === \"Int8Array\";\n }\n d.isInt8Array = x;\n function v(ue) {\n return i(ue) === \"Int16Array\";\n }\n d.isInt16Array = v;\n function _(ue) {\n return i(ue) === \"Int32Array\";\n }\n d.isInt32Array = _;\n function V(ue) {\n return i(ue) === \"Float32Array\";\n }\n d.isFloat32Array = V;\n function j(ue) {\n return i(ue) === \"Float64Array\";\n }\n d.isFloat64Array = j;\n function G(ue) {\n return i(ue) === \"BigInt64Array\";\n }\n d.isBigInt64Array = G;\n function W(ue) {\n return i(ue) === \"BigUint64Array\";\n }\n d.isBigUint64Array = W;\n function B(ue) {\n return o(ue) === \"[object Map]\";\n }\n B.working = typeof Map < \"u\" && B(/* @__PURE__ */ new Map());\n function Q(ue) {\n return typeof Map > \"u\" ? !1 : B.working ? B(ue) : ue instanceof Map;\n }\n d.isMap = Q;\n function se(ue) {\n return o(ue) === \"[object Set]\";\n }\n se.working = typeof Set < \"u\" && se(/* @__PURE__ */ new Set());\n function $(ue) {\n return typeof Set > \"u\" ? !1 : se.working ? se(ue) : ue instanceof Set;\n }\n d.isSet = $;\n function te(ue) {\n return o(ue) === \"[object WeakMap]\";\n }\n te.working = typeof WeakMap < \"u\" && te(/* @__PURE__ */ new WeakMap());\n function E(ue) {\n return typeof WeakMap > \"u\" ? !1 : te.working ? te(ue) : ue instanceof WeakMap;\n }\n d.isWeakMap = E;\n function N(ue) {\n return o(ue) === \"[object WeakSet]\";\n }\n N.working = typeof WeakSet < \"u\" && N(/* @__PURE__ */ new WeakSet());\n function L(ue) {\n return N(ue);\n }\n d.isWeakSet = L;\n function z(ue) {\n return o(ue) === \"[object ArrayBuffer]\";\n }\n z.working = typeof ArrayBuffer < \"u\" && z(new ArrayBuffer());\n function K(ue) {\n return typeof ArrayBuffer > \"u\" ? !1 : z.working ? z(ue) : ue instanceof ArrayBuffer;\n }\n d.isArrayBuffer = K;\n function R(ue) {\n return o(ue) === \"[object DataView]\";\n }\n R.working = typeof ArrayBuffer < \"u\" && typeof DataView < \"u\" && R(new DataView(new ArrayBuffer(1), 0, 1));\n function U(ue) {\n return typeof DataView > \"u\" ? !1 : R.working ? R(ue) : ue instanceof DataView;\n }\n d.isDataView = U;\n var Y = typeof SharedArrayBuffer < \"u\" ? SharedArrayBuffer : void 0;\n function J(ue) {\n return o(ue) === \"[object SharedArrayBuffer]\";\n }\n function ae(ue) {\n return typeof Y > \"u\" ? !1 : (typeof J.working > \"u\" && (J.working = J(new Y())), J.working ? J(ue) : ue instanceof Y);\n }\n d.isSharedArrayBuffer = ae;\n function A(ue) {\n return o(ue) === \"[object AsyncFunction]\";\n }\n d.isAsyncFunction = A;\n function M(ue) {\n return o(ue) === \"[object Map Iterator]\";\n }\n d.isMapIterator = M;\n function q(ue) {\n return o(ue) === \"[object Set Iterator]\";\n }\n d.isSetIterator = q;\n function H(ue) {\n return o(ue) === \"[object Generator]\";\n }\n d.isGeneratorObject = H;\n function le(ue) {\n return o(ue) === \"[object WebAssembly.Module]\";\n }\n d.isWebAssemblyCompiledModule = le;\n function oe(ue) {\n return p(ue, c);\n }\n d.isNumberObject = oe;\n function he(ue) {\n return p(ue, u);\n }\n d.isStringObject = he;\n function Ie(ue) {\n return p(ue, f);\n }\n d.isBooleanObject = Ie;\n function Pe(ue) {\n return r && p(ue, h);\n }\n d.isBigIntObject = Pe;\n function He(ue) {\n return a && p(ue, l);\n }\n d.isSymbolObject = He;\n function bt(ue) {\n return oe(ue) || he(ue) || Ie(ue) || Pe(ue) || He(ue);\n }\n d.isBoxedPrimitive = bt;\n function mt(ue) {\n return typeof Uint8Array < \"u\" && (K(ue) || ae(ue));\n }\n d.isAnyArrayBuffer = mt, [\"isProxy\", \"isExternal\", \"isModuleNamespaceObject\"].forEach(function(ue) {\n Object.defineProperty(d, ue, {\n enumerable: !1,\n value: function() {\n throw new Error(ue + \" is not supported in userland\");\n }\n });\n });\n})(Uu);\nvar $b = function(e) {\n return e && typeof e == \"object\" && typeof e.copy == \"function\" && typeof e.fill == \"function\" && typeof e.readUInt8 == \"function\";\n};\n(function(d) {\n var e = Object.getOwnPropertyDescriptors || function(U) {\n for (var Y = Object.keys(U), J = {}, ae = 0; ae < Y.length; ae++)\n J[Y[ae]] = Object.getOwnPropertyDescriptor(U, Y[ae]);\n return J;\n }, t = /%[sdj%]/g;\n d.format = function(R) {\n if (!x(R)) {\n for (var U = [], Y = 0; Y < arguments.length; Y++)\n U.push(r(arguments[Y]));\n return U.join(\" \");\n }\n for (var Y = 1, J = arguments, ae = J.length, A = String(R).replace(t, function(q) {\n if (q === \"%%\")\n return \"%\";\n if (Y >= ae)\n return q;\n switch (q) {\n case \"%s\":\n return String(J[Y++]);\n case \"%d\":\n return Number(J[Y++]);\n case \"%j\":\n try {\n return JSON.stringify(J[Y++]);\n } catch {\n return \"[Circular]\";\n }\n default:\n return q;\n }\n }), M = J[Y]; Y < ae; M = J[++Y])\n S(M) || !j(M) ? A += \" \" + M : A += \" \" + r(M);\n return A;\n }, d.deprecate = function(R, U) {\n if (typeof Ce < \"u\" && Ce.noDeprecation === !0)\n return R;\n if (typeof Ce > \"u\")\n return function() {\n return d.deprecate(R, U).apply(this, arguments);\n };\n var Y = !1;\n function J() {\n if (!Y) {\n if (Ce.throwDeprecation)\n throw new Error(U);\n Ce.traceDeprecation ? console.trace(U) : console.error(U), Y = !0;\n }\n return R.apply(this, arguments);\n }\n return J;\n };\n var i = {}, s = /^$/;\n if (Ce.env.NODE_DEBUG) {\n var n = Ce.env.NODE_DEBUG;\n n = n.replace(/[|\\\\{}()[\\]^$+?.]/g, \"\\\\$&\").replace(/\\*/g, \".*\").replace(/,/g, \"$|^\").toUpperCase(), s = new RegExp(\"^\" + n + \"$\", \"i\");\n }\n d.debuglog = function(R) {\n if (R = R.toUpperCase(), !i[R])\n if (s.test(R)) {\n var U = Ce.pid;\n i[R] = function() {\n var Y = d.format.apply(d, arguments);\n console.error(\"%s %d: %s\", R, U, Y);\n };\n } else\n i[R] = function() {\n };\n return i[R];\n };\n function r(R, U) {\n var Y = {\n seen: [],\n stylize: o\n };\n return arguments.length >= 3 && (Y.depth = arguments[2]), arguments.length >= 4 && (Y.colors = arguments[3]), w(U) ? Y.showHidden = U : U && d._extend(Y, U), _(Y.showHidden) && (Y.showHidden = !1), _(Y.depth) && (Y.depth = 2), _(Y.colors) && (Y.colors = !1), _(Y.customInspect) && (Y.customInspect = !0), Y.colors && (Y.stylize = a), u(Y, R, Y.depth);\n }\n d.inspect = r, r.colors = {\n bold: [1, 22],\n italic: [3, 23],\n underline: [4, 24],\n inverse: [7, 27],\n white: [37, 39],\n grey: [90, 39],\n black: [30, 39],\n blue: [34, 39],\n cyan: [36, 39],\n green: [32, 39],\n magenta: [35, 39],\n red: [31, 39],\n yellow: [33, 39]\n }, r.styles = {\n special: \"cyan\",\n number: \"yellow\",\n boolean: \"yellow\",\n undefined: \"grey\",\n null: \"bold\",\n string: \"green\",\n date: \"magenta\",\n // \"name\": intentionally not styling\n regexp: \"red\"\n };\n function a(R, U) {\n var Y = r.styles[U];\n return Y ? \"\\x1B[\" + r.colors[Y][0] + \"m\" + R + \"\\x1B[\" + r.colors[Y][1] + \"m\" : R;\n }\n function o(R, U) {\n return R;\n }\n function c(R) {\n var U = {};\n return R.forEach(function(Y, J) {\n U[Y] = !0;\n }), U;\n }\n function u(R, U, Y) {\n if (R.customInspect && U && B(U.inspect) && // Filter out the util module, it's inspect function is special\n U.inspect !== d.inspect && // Also filter out any prototype objects using the circular check.\n !(U.constructor && U.constructor.prototype === U)) {\n var J = U.inspect(Y, R);\n return x(J) || (J = u(R, J, Y)), J;\n }\n var ae = f(R, U);\n if (ae)\n return ae;\n var A = Object.keys(U), M = c(A);\n if (R.showHidden && (A = Object.getOwnPropertyNames(U)), W(U) && (A.indexOf(\"message\") >= 0 || A.indexOf(\"description\") >= 0))\n return h(U);\n if (A.length === 0) {\n if (B(U)) {\n var q = U.name ? \": \" + U.name : \"\";\n return R.stylize(\"[Function\" + q + \"]\", \"special\");\n }\n if (V(U))\n return R.stylize(RegExp.prototype.toString.call(U), \"regexp\");\n if (G(U))\n return R.stylize(Date.prototype.toString.call(U), \"date\");\n if (W(U))\n return h(U);\n }\n var H = \"\", le = !1, oe = [\"{\", \"}\"];\n if (y(U) && (le = !0, oe = [\"[\", \"]\"]), B(U)) {\n var he = U.name ? \": \" + U.name : \"\";\n H = \" [Function\" + he + \"]\";\n }\n if (V(U) && (H = \" \" + RegExp.prototype.toString.call(U)), G(U) && (H = \" \" + Date.prototype.toUTCString.call(U)), W(U) && (H = \" \" + h(U)), A.length === 0 && (!le || U.length == 0))\n return oe[0] + H + oe[1];\n if (Y < 0)\n return V(U) ? R.stylize(RegExp.prototype.toString.call(U), \"regexp\") : R.stylize(\"[Object]\", \"special\");\n R.seen.push(U);\n var Ie;\n return le ? Ie = l(R, U, Y, M, A) : Ie = A.map(function(Pe) {\n return p(R, U, Y, M, Pe, le);\n }), R.seen.pop(), m(Ie, H, oe);\n }\n function f(R, U) {\n if (_(U))\n return R.stylize(\"undefined\", \"undefined\");\n if (x(U)) {\n var Y = \"'\" + JSON.stringify(U).replace(/^\"|\"$/g, \"\").replace(/'/g, \"\\\\'\").replace(/\\\\\"/g, '\"') + \"'\";\n return R.stylize(Y, \"string\");\n }\n if (T(U))\n return R.stylize(\"\" + U, \"number\");\n if (w(U))\n return R.stylize(\"\" + U, \"boolean\");\n if (S(U))\n return R.stylize(\"null\", \"null\");\n }\n function h(R) {\n return \"[\" + Error.prototype.toString.call(R) + \"]\";\n }\n function l(R, U, Y, J, ae) {\n for (var A = [], M = 0, q = U.length; M < q; ++M)\n N(U, String(M)) ? A.push(p(\n R,\n U,\n Y,\n J,\n String(M),\n !0\n )) : A.push(\"\");\n return ae.forEach(function(H) {\n H.match(/^\\d+$/) || A.push(p(\n R,\n U,\n Y,\n J,\n H,\n !0\n ));\n }), A;\n }\n function p(R, U, Y, J, ae, A) {\n var M, q, H;\n if (H = Object.getOwnPropertyDescriptor(U, ae) || { value: U[ae] }, H.get ? H.set ? q = R.stylize(\"[Getter/Setter]\", \"special\") : q = R.stylize(\"[Getter]\", \"special\") : H.set && (q = R.stylize(\"[Setter]\", \"special\")), N(J, ae) || (M = \"[\" + ae + \"]\"), q || (R.seen.indexOf(H.value) < 0 ? (S(Y) ? q = u(R, H.value, null) : q = u(R, H.value, Y - 1), q.indexOf(`\n`) > -1 && (A ? q = q.split(`\n`).map(function(le) {\n return \" \" + le;\n }).join(`\n`).slice(2) : q = `\n` + q.split(`\n`).map(function(le) {\n return \" \" + le;\n }).join(`\n`))) : q = R.stylize(\"[Circular]\", \"special\")), _(M)) {\n if (A && ae.match(/^\\d+$/))\n return q;\n M = JSON.stringify(\"\" + ae), M.match(/^\"([a-zA-Z_][a-zA-Z_0-9]*)\"$/) ? (M = M.slice(1, -1), M = R.stylize(M, \"name\")) : (M = M.replace(/'/g, \"\\\\'\").replace(/\\\\\"/g, '\"').replace(/(^\"|\"$)/g, \"'\"), M = R.stylize(M, \"string\"));\n }\n return M + \": \" + q;\n }\n function m(R, U, Y) {\n var J = R.reduce(function(ae, A) {\n return A.indexOf(`\n`) >= 0, ae + A.replace(/\\u001b\\[\\d\\d?m/g, \"\").length + 1;\n }, 0);\n return J > 60 ? Y[0] + (U === \"\" ? \"\" : U + `\n `) + \" \" + R.join(`,\n `) + \" \" + Y[1] : Y[0] + U + \" \" + R.join(\", \") + \" \" + Y[1];\n }\n d.types = Uu;\n function y(R) {\n return Array.isArray(R);\n }\n d.isArray = y;\n function w(R) {\n return typeof R == \"boolean\";\n }\n d.isBoolean = w;\n function S(R) {\n return R === null;\n }\n d.isNull = S;\n function b(R) {\n return R == null;\n }\n d.isNullOrUndefined = b;\n function T(R) {\n return typeof R == \"number\";\n }\n d.isNumber = T;\n function x(R) {\n return typeof R == \"string\";\n }\n d.isString = x;\n function v(R) {\n return typeof R == \"symbol\";\n }\n d.isSymbol = v;\n function _(R) {\n return R === void 0;\n }\n d.isUndefined = _;\n function V(R) {\n return j(R) && se(R) === \"[object RegExp]\";\n }\n d.isRegExp = V, d.types.isRegExp = V;\n function j(R) {\n return typeof R == \"object\" && R !== null;\n }\n d.isObject = j;\n function G(R) {\n return j(R) && se(R) === \"[object Date]\";\n }\n d.isDate = G, d.types.isDate = G;\n function W(R) {\n return j(R) && (se(R) === \"[object Error]\" || R instanceof Error);\n }\n d.isError = W, d.types.isNativeError = W;\n function B(R) {\n return typeof R == \"function\";\n }\n d.isFunction = B;\n function Q(R) {\n return R === null || typeof R == \"boolean\" || typeof R == \"number\" || typeof R == \"string\" || typeof R == \"symbol\" || // ES6 symbol\n typeof R > \"u\";\n }\n d.isPrimitive = Q, d.isBuffer = $b;\n function se(R) {\n return Object.prototype.toString.call(R);\n }\n function $(R) {\n return R < 10 ? \"0\" + R.toString(10) : R.toString(10);\n }\n var te = [\n \"Jan\",\n \"Feb\",\n \"Mar\",\n \"Apr\",\n \"May\",\n \"Jun\",\n \"Jul\",\n \"Aug\",\n \"Sep\",\n \"Oct\",\n \"Nov\",\n \"Dec\"\n ];\n function E() {\n var R = /* @__PURE__ */ new Date(), U = [\n $(R.getHours()),\n $(R.getMinutes()),\n $(R.getSeconds())\n ].join(\":\");\n return [R.getDate(), te[R.getMonth()], U].join(\" \");\n }\n d.log = function() {\n console.log(\"%s - %s\", E(), d.format.apply(d, arguments));\n }, d.inherits = jt, d._extend = function(R, U) {\n if (!U || !j(U))\n return R;\n for (var Y = Object.keys(U), J = Y.length; J--; )\n R[Y[J]] = U[Y[J]];\n return R;\n };\n function N(R, U) {\n return Object.prototype.hasOwnProperty.call(R, U);\n }\n var L = typeof Symbol < \"u\" ? Symbol(\"util.promisify.custom\") : void 0;\n d.promisify = function(U) {\n if (typeof U != \"function\")\n throw new TypeError('The \"original\" argument must be of type Function');\n if (L && U[L]) {\n var Y = U[L];\n if (typeof Y != \"function\")\n throw new TypeError('The \"util.promisify.custom\" argument must be of type Function');\n return Object.defineProperty(Y, L, {\n value: Y,\n enumerable: !1,\n writable: !1,\n configurable: !0\n }), Y;\n }\n function Y() {\n for (var J, ae, A = new Promise(function(H, le) {\n J = H, ae = le;\n }), M = [], q = 0; q < arguments.length; q++)\n M.push(arguments[q]);\n M.push(function(H, le) {\n H ? ae(H) : J(le);\n });\n try {\n U.apply(this, M);\n } catch (H) {\n ae(H);\n }\n return A;\n }\n return Object.setPrototypeOf(Y, Object.getPrototypeOf(U)), L && Object.defineProperty(Y, L, {\n value: Y,\n enumerable: !1,\n writable: !1,\n configurable: !0\n }), Object.defineProperties(\n Y,\n e(U)\n );\n }, d.promisify.custom = L;\n function z(R, U) {\n if (!R) {\n var Y = new Error(\"Promise was rejected with a falsy value\");\n Y.reason = R, R = Y;\n }\n return U(R);\n }\n function K(R) {\n if (typeof R != \"function\")\n throw new TypeError('The \"original\" argument must be of type Function');\n function U() {\n for (var Y = [], J = 0; J < arguments.length; J++)\n Y.push(arguments[J]);\n var ae = Y.pop();\n if (typeof ae != \"function\")\n throw new TypeError(\"The last argument must be of type Function\");\n var A = this, M = function() {\n return ae.apply(A, arguments);\n };\n R.apply(this, Y).then(\n function(q) {\n Ce.nextTick(M.bind(null, null, q));\n },\n function(q) {\n Ce.nextTick(z.bind(null, q, M));\n }\n );\n }\n return Object.setPrototypeOf(U, Object.getPrototypeOf(R)), Object.defineProperties(\n U,\n e(R)\n ), U;\n }\n d.callbackify = K;\n})(dn);\nvar na = { exports: {} }, Zd;\nfunction Zb() {\n return Zd || (Zd = 1, function(d) {\n function e(n, r) {\n if (!(n instanceof r))\n throw new TypeError(\"Cannot call a class as a function\");\n }\n var t = vo.Buffer, i = dn;\n function s(n, r, a) {\n n.copy(r, a);\n }\n d.exports = function() {\n function n() {\n e(this, n), this.head = null, this.tail = null, this.length = 0;\n }\n return n.prototype.push = function(a) {\n var o = { data: a, next: null };\n this.length > 0 ? this.tail.next = o : this.head = o, this.tail = o, ++this.length;\n }, n.prototype.unshift = function(a) {\n var o = { data: a, next: this.head };\n this.length === 0 && (this.tail = o), this.head = o, ++this.length;\n }, n.prototype.shift = function() {\n if (this.length !== 0) {\n var a = this.head.data;\n return this.length === 1 ? this.head = this.tail = null : this.head = this.head.next, --this.length, a;\n }\n }, n.prototype.clear = function() {\n this.head = this.tail = null, this.length = 0;\n }, n.prototype.join = function(a) {\n if (this.length === 0)\n return \"\";\n for (var o = this.head, c = \"\" + o.data; o = o.next; )\n c += a + o.data;\n return c;\n }, n.prototype.concat = function(a) {\n if (this.length === 0)\n return t.alloc(0);\n for (var o = t.allocUnsafe(a >>> 0), c = this.head, u = 0; c; )\n s(c.data, o, u), u += c.data.length, c = c.next;\n return o;\n }, n;\n }(), i && i.inspect && i.inspect.custom && (d.exports.prototype[i.inspect.custom] = function() {\n var n = i.inspect({ length: this.length });\n return this.constructor.name + \" \" + n;\n });\n }(na)), na.exports;\n}\nvar vn = Vi;\nfunction Qb(d, e) {\n var t = this, i = this._readableState && this._readableState.destroyed, s = this._writableState && this._writableState.destroyed;\n return i || s ? (e ? e(d) : d && (this._writableState ? this._writableState.errorEmitted || (this._writableState.errorEmitted = !0, vn.nextTick(kn, this, d)) : vn.nextTick(kn, this, d)), this) : (this._readableState && (this._readableState.destroyed = !0), this._writableState && (this._writableState.destroyed = !0), this._destroy(d || null, function(n) {\n !e && n ? t._writableState ? t._writableState.errorEmitted || (t._writableState.errorEmitted = !0, vn.nextTick(kn, t, n)) : vn.nextTick(kn, t, n) : e && e(n);\n }), this);\n}\nfunction Jb() {\n this._readableState && (this._readableState.destroyed = !1, this._readableState.reading = !1, this._readableState.ended = !1, this._readableState.endEmitted = !1), this._writableState && (this._writableState.destroyed = !1, this._writableState.ended = !1, this._writableState.ending = !1, this._writableState.finalCalled = !1, this._writableState.prefinished = !1, this._writableState.finished = !1, this._writableState.errorEmitted = !1);\n}\nfunction kn(d, e) {\n d.emit(\"error\", e);\n}\nvar nf = {\n destroy: Qb,\n undestroy: Jb\n}, rf = eS;\nfunction eS(d, e) {\n if (ra(\"noDeprecation\"))\n return d;\n var t = !1;\n function i() {\n if (!t) {\n if (ra(\"throwDeprecation\"))\n throw new Error(e);\n ra(\"traceDeprecation\") ? console.trace(e) : console.warn(e), t = !0;\n }\n return d.apply(this, arguments);\n }\n return i;\n}\nfunction ra(d) {\n try {\n if (!qe.localStorage)\n return !1;\n } catch {\n return !1;\n }\n var e = qe.localStorage[d];\n return e == null ? !1 : String(e).toLowerCase() === \"true\";\n}\nvar aa, Qd;\nfunction af() {\n if (Qd)\n return aa;\n Qd = 1;\n var d = Vi;\n aa = m;\n function e(E) {\n var N = this;\n this.next = null, this.entry = null, this.finish = function() {\n te(N, E);\n };\n }\n var t = !Ce.browser && [\"v0.10\", \"v0.9.\"].indexOf(Ce.version.slice(0, 5)) > -1 ? setImmediate : d.nextTick, i;\n m.WritableState = l;\n var s = Object.create(Fe);\n s.inherits = jt;\n var n = {\n deprecate: rf\n }, r = Fu, a = vo.Buffer, o = (typeof qe < \"u\" ? qe : typeof window < \"u\" ? window : typeof self < \"u\" ? self : {}).Uint8Array || function() {\n };\n function c(E) {\n return a.from(E);\n }\n function u(E) {\n return a.isBuffer(E) || E instanceof o;\n }\n var f = nf;\n s.inherits(m, r);\n function h() {\n }\n function l(E, N) {\n i = i || As(), E = E || {};\n var L = N instanceof i;\n this.objectMode = !!E.objectMode, L && (this.objectMode = this.objectMode || !!E.writableObjectMode);\n var z = E.highWaterMark, K = E.writableHighWaterMark, R = this.objectMode ? 16 : 16 * 1024;\n z || z === 0 ? this.highWaterMark = z : L && (K || K === 0) ? this.highWaterMark = K : this.highWaterMark = R, this.highWaterMark = Math.floor(this.highWaterMark), this.finalCalled = !1, this.needDrain = !1, this.ending = !1, this.ended = !1, this.finished = !1, this.destroyed = !1;\n var U = E.decodeStrings === !1;\n this.decodeStrings = !U, this.defaultEncoding = E.defaultEncoding || \"utf8\", this.length = 0, this.writing = !1, this.corked = 0, this.sync = !0, this.bufferProcessing = !1, this.onwrite = function(Y) {\n _(N, Y);\n }, this.writecb = null, this.writelen = 0, this.bufferedRequest = null, this.lastBufferedRequest = null, this.pendingcb = 0, this.prefinished = !1, this.errorEmitted = !1, this.bufferedRequestCount = 0, this.corkedRequestsFree = new e(this);\n }\n l.prototype.getBuffer = function() {\n for (var N = this.bufferedRequest, L = []; N; )\n L.push(N), N = N.next;\n return L;\n }, function() {\n try {\n Object.defineProperty(l.prototype, \"buffer\", {\n get: n.deprecate(function() {\n return this.getBuffer();\n }, \"_writableState.buffer is deprecated. Use _writableState.getBuffer instead.\", \"DEP0003\")\n });\n } catch {\n }\n }();\n var p;\n typeof Symbol == \"function\" && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] == \"function\" ? (p = Function.prototype[Symbol.hasInstance], Object.defineProperty(m, Symbol.hasInstance, {\n value: function(E) {\n return p.call(this, E) ? !0 : this !== m ? !1 : E && E._writableState instanceof l;\n }\n })) : p = function(E) {\n return E instanceof this;\n };\n function m(E) {\n if (i = i || As(), !p.call(m, this) && !(this instanceof i))\n return new m(E);\n this._writableState = new l(E, this), this.writable = !0, E && (typeof E.write == \"function\" && (this._write = E.write), typeof E.writev == \"function\" && (this._writev = E.writev), typeof E.destroy == \"function\" && (this._destroy = E.destroy), typeof E.final == \"function\" && (this._final = E.final)), r.call(this);\n }\n m.prototype.pipe = function() {\n this.emit(\"error\", new Error(\"Cannot pipe, not readable\"));\n };\n function y(E, N) {\n var L = new Error(\"write after end\");\n E.emit(\"error\", L), d.nextTick(N, L);\n }\n function w(E, N, L, z) {\n var K = !0, R = !1;\n return L === null ? R = new TypeError(\"May not write null values to stream\") : typeof L != \"string\" && L !== void 0 && !N.objectMode && (R = new TypeError(\"Invalid non-string/buffer chunk\")), R && (E.emit(\"error\", R), d.nextTick(z, R), K = !1), K;\n }\n m.prototype.write = function(E, N, L) {\n var z = this._writableState, K = !1, R = !z.objectMode && u(E);\n return R && !a.isBuffer(E) && (E = c(E)), typeof N == \"function\" && (L = N, N = null), R ? N = \"buffer\" : N || (N = z.defaultEncoding), typeof L != \"function\" && (L = h), z.ended ? y(this, L) : (R || w(this, z, E, L)) && (z.pendingcb++, K = b(this, z, R, E, N, L)), K;\n }, m.prototype.cork = function() {\n var E = this._writableState;\n E.corked++;\n }, m.prototype.uncork = function() {\n var E = this._writableState;\n E.corked && (E.corked--, !E.writing && !E.corked && !E.bufferProcessing && E.bufferedRequest && G(this, E));\n }, m.prototype.setDefaultEncoding = function(N) {\n if (typeof N == \"string\" && (N = N.toLowerCase()), !([\"hex\", \"utf8\", \"utf-8\", \"ascii\", \"binary\", \"base64\", \"ucs2\", \"ucs-2\", \"utf16le\", \"utf-16le\", \"raw\"].indexOf((N + \"\").toLowerCase()) > -1))\n throw new TypeError(\"Unknown encoding: \" + N);\n return this._writableState.defaultEncoding = N, this;\n };\n function S(E, N, L) {\n return !E.objectMode && E.decodeStrings !== !1 && typeof N == \"string\" && (N = a.from(N, L)), N;\n }\n Object.defineProperty(m.prototype, \"writableHighWaterMark\", {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: !1,\n get: function() {\n return this._writableState.highWaterMark;\n }\n });\n function b(E, N, L, z, K, R) {\n if (!L) {\n var U = S(N, z, K);\n z !== U && (L = !0, K = \"buffer\", z = U);\n }\n var Y = N.objectMode ? 1 : z.length;\n N.length += Y;\n var J = N.length < N.highWaterMark;\n if (J || (N.needDrain = !0), N.writing || N.corked) {\n var ae = N.lastBufferedRequest;\n N.lastBufferedRequest = {\n chunk: z,\n encoding: K,\n isBuf: L,\n callback: R,\n next: null\n }, ae ? ae.next = N.lastBufferedRequest : N.bufferedRequest = N.lastBufferedRequest, N.bufferedRequestCount += 1;\n } else\n T(E, N, !1, Y, z, K, R);\n return J;\n }\n function T(E, N, L, z, K, R, U) {\n N.writelen = z, N.writecb = U, N.writing = !0, N.sync = !0, L ? E._writev(K, N.onwrite) : E._write(K, R, N.onwrite), N.sync = !1;\n }\n function x(E, N, L, z, K) {\n --N.pendingcb, L ? (d.nextTick(K, z), d.nextTick(se, E, N), E._writableState.errorEmitted = !0, E.emit(\"error\", z)) : (K(z), E._writableState.errorEmitted = !0, E.emit(\"error\", z), se(E, N));\n }\n function v(E) {\n E.writing = !1, E.writecb = null, E.length -= E.writelen, E.writelen = 0;\n }\n function _(E, N) {\n var L = E._writableState, z = L.sync, K = L.writecb;\n if (v(L), N)\n x(E, L, z, N, K);\n else {\n var R = W(L);\n !R && !L.corked && !L.bufferProcessing && L.bufferedRequest && G(E, L), z ? t(V, E, L, R, K) : V(E, L, R, K);\n }\n }\n function V(E, N, L, z) {\n L || j(E, N), N.pendingcb--, z(), se(E, N);\n }\n function j(E, N) {\n N.length === 0 && N.needDrain && (N.needDrain = !1, E.emit(\"drain\"));\n }\n function G(E, N) {\n N.bufferProcessing = !0;\n var L = N.bufferedRequest;\n if (E._writev && L && L.next) {\n var z = N.bufferedRequestCount, K = new Array(z), R = N.corkedRequestsFree;\n R.entry = L;\n for (var U = 0, Y = !0; L; )\n K[U] = L, L.isBuf || (Y = !1), L = L.next, U += 1;\n K.allBuffers = Y, T(E, N, !0, N.length, K, \"\", R.finish), N.pendingcb++, N.lastBufferedRequest = null, R.next ? (N.corkedRequestsFree = R.next, R.next = null) : N.corkedRequestsFree = new e(N), N.bufferedRequestCount = 0;\n } else {\n for (; L; ) {\n var J = L.chunk, ae = L.encoding, A = L.callback, M = N.objectMode ? 1 : J.length;\n if (T(E, N, !1, M, J, ae, A), L = L.next, N.bufferedRequestCount--, N.writing)\n break;\n }\n L === null && (N.lastBufferedRequest = null);\n }\n N.bufferedRequest = L, N.bufferProcessing = !1;\n }\n m.prototype._write = function(E, N, L) {\n L(new Error(\"_write() is not implemented\"));\n }, m.prototype._writev = null, m.prototype.end = function(E, N, L) {\n var z = this._writableState;\n typeof E == \"function\" ? (L = E, E = null, N = null) : typeof N == \"function\" && (L = N, N = null), E != null && this.write(E, N), z.corked && (z.corked = 1, this.uncork()), z.ending || $(this, z, L);\n };\n function W(E) {\n return E.ending && E.length === 0 && E.bufferedRequest === null && !E.finished && !E.writing;\n }\n function B(E, N) {\n E._final(function(L) {\n N.pendingcb--, L && E.emit(\"error\", L), N.prefinished = !0, E.emit(\"prefinish\"), se(E, N);\n });\n }\n function Q(E, N) {\n !N.prefinished && !N.finalCalled && (typeof E._final == \"function\" ? (N.pendingcb++, N.finalCalled = !0, d.nextTick(B, E, N)) : (N.prefinished = !0, E.emit(\"prefinish\")));\n }\n function se(E, N) {\n var L = W(N);\n return L && (Q(E, N), N.pendingcb === 0 && (N.finished = !0, E.emit(\"finish\"))), L;\n }\n function $(E, N, L) {\n N.ending = !0, se(E, N), L && (N.finished ? d.nextTick(L) : E.once(\"finish\", L)), N.ended = !0, E.writable = !1;\n }\n function te(E, N, L) {\n var z = E.entry;\n for (E.entry = null; z; ) {\n var K = z.callback;\n N.pendingcb--, K(L), z = z.next;\n }\n N.corkedRequestsFree.next = E;\n }\n return Object.defineProperty(m.prototype, \"destroyed\", {\n get: function() {\n return this._writableState === void 0 ? !1 : this._writableState.destroyed;\n },\n set: function(E) {\n this._writableState && (this._writableState.destroyed = E);\n }\n }), m.prototype.destroy = f.destroy, m.prototype._undestroy = f.undestroy, m.prototype._destroy = function(E, N) {\n this.end(), N(E);\n }, aa;\n}\nvar oa, Jd;\nfunction As() {\n if (Jd)\n return oa;\n Jd = 1;\n var d = Vi, e = Object.keys || function(f) {\n var h = [];\n for (var l in f)\n h.push(l);\n return h;\n };\n oa = o;\n var t = Object.create(Fe);\n t.inherits = jt;\n var i = of(), s = af();\n t.inherits(o, i);\n for (var n = e(s.prototype), r = 0; r < n.length; r++) {\n var a = n[r];\n o.prototype[a] || (o.prototype[a] = s.prototype[a]);\n }\n function o(f) {\n if (!(this instanceof o))\n return new o(f);\n i.call(this, f), s.call(this, f), f && f.readable === !1 && (this.readable = !1), f && f.writable === !1 && (this.writable = !1), this.allowHalfOpen = !0, f && f.allowHalfOpen === !1 && (this.allowHalfOpen = !1), this.once(\"end\", c);\n }\n Object.defineProperty(o.prototype, \"writableHighWaterMark\", {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: !1,\n get: function() {\n return this._writableState.highWaterMark;\n }\n });\n function c() {\n this.allowHalfOpen || this._writableState.ended || d.nextTick(u, this);\n }\n function u(f) {\n f.end();\n }\n return Object.defineProperty(o.prototype, \"destroyed\", {\n get: function() {\n return this._readableState === void 0 || this._writableState === void 0 ? !1 : this._readableState.destroyed && this._writableState.destroyed;\n },\n set: function(f) {\n this._readableState === void 0 || this._writableState === void 0 || (this._readableState.destroyed = f, this._writableState.destroyed = f);\n }\n }), o.prototype._destroy = function(f, h) {\n this.push(null), this.end(), d.nextTick(h, f);\n }, oa;\n}\nvar da = {}, En = { exports: {} };\n/*! safe-buffer. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */\nvar ec;\nfunction tS() {\n return ec || (ec = 1, function(d, e) {\n var t = nn(), i = t.Buffer;\n function s(r, a) {\n for (var o in r)\n a[o] = r[o];\n }\n i.from && i.alloc && i.allocUnsafe && i.allocUnsafeSlow ? d.exports = t : (s(t, e), e.Buffer = n);\n function n(r, a, o) {\n return i(r, a, o);\n }\n n.prototype = Object.create(i.prototype), s(i, n), n.from = function(r, a, o) {\n if (typeof r == \"number\")\n throw new TypeError(\"Argument must not be a number\");\n return i(r, a, o);\n }, n.alloc = function(r, a, o) {\n if (typeof r != \"number\")\n throw new TypeError(\"Argument must be a number\");\n var c = i(r);\n return a !== void 0 ? typeof o == \"string\" ? c.fill(a, o) : c.fill(a) : c.fill(0), c;\n }, n.allocUnsafe = function(r) {\n if (typeof r != \"number\")\n throw new TypeError(\"Argument must be a number\");\n return i(r);\n }, n.allocUnsafeSlow = function(r) {\n if (typeof r != \"number\")\n throw new TypeError(\"Argument must be a number\");\n return t.SlowBuffer(r);\n };\n }(En, En.exports)), En.exports;\n}\nvar tc;\nfunction sr() {\n if (tc)\n return da;\n tc = 1;\n var d = tS().Buffer, e = d.isEncoding || function(w) {\n switch (w = \"\" + w, w && w.toLowerCase()) {\n case \"hex\":\n case \"utf8\":\n case \"utf-8\":\n case \"ascii\":\n case \"binary\":\n case \"base64\":\n case \"ucs2\":\n case \"ucs-2\":\n case \"utf16le\":\n case \"utf-16le\":\n case \"raw\":\n return !0;\n default:\n return !1;\n }\n };\n function t(w) {\n if (!w)\n return \"utf8\";\n for (var S; ; )\n switch (w) {\n case \"utf8\":\n case \"utf-8\":\n return \"utf8\";\n case \"ucs2\":\n case \"ucs-2\":\n case \"utf16le\":\n case \"utf-16le\":\n return \"utf16le\";\n case \"latin1\":\n case \"binary\":\n return \"latin1\";\n case \"base64\":\n case \"ascii\":\n case \"hex\":\n return w;\n default:\n if (S)\n return;\n w = (\"\" + w).toLowerCase(), S = !0;\n }\n }\n function i(w) {\n var S = t(w);\n if (typeof S != \"string\" && (d.isEncoding === e || !e(w)))\n throw new Error(\"Unknown encoding: \" + w);\n return S || w;\n }\n da.StringDecoder = s;\n function s(w) {\n this.encoding = i(w);\n var S;\n switch (this.encoding) {\n case \"utf16le\":\n this.text = f, this.end = h, S = 4;\n break;\n case \"utf8\":\n this.fillLast = o, S = 4;\n break;\n case \"base64\":\n this.text = l, this.end = p, S = 3;\n break;\n default:\n this.write = m, this.end = y;\n return;\n }\n this.lastNeed = 0, this.lastTotal = 0, this.lastChar = d.allocUnsafe(S);\n }\n s.prototype.write = function(w) {\n if (w.length === 0)\n return \"\";\n var S, b;\n if (this.lastNeed) {\n if (S = this.fillLast(w), S === void 0)\n return \"\";\n b = this.lastNeed, this.lastNeed = 0;\n } else\n b = 0;\n return b < w.length ? S ? S + this.text(w, b) : this.text(w, b) : S || \"\";\n }, s.prototype.end = u, s.prototype.text = c, s.prototype.fillLast = function(w) {\n if (this.lastNeed <= w.length)\n return w.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed), this.lastChar.toString(this.encoding, 0, this.lastTotal);\n w.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, w.length), this.lastNeed -= w.length;\n };\n function n(w) {\n return w <= 127 ? 0 : w >> 5 === 6 ? 2 : w >> 4 === 14 ? 3 : w >> 3 === 30 ? 4 : w >> 6 === 2 ? -1 : -2;\n }\n function r(w, S, b) {\n var T = S.length - 1;\n if (T < b)\n return 0;\n var x = n(S[T]);\n return x >= 0 ? (x > 0 && (w.lastNeed = x - 1), x) : --T < b || x === -2 ? 0 : (x = n(S[T]), x >= 0 ? (x > 0 && (w.lastNeed = x - 2), x) : --T < b || x === -2 ? 0 : (x = n(S[T]), x >= 0 ? (x > 0 && (x === 2 ? x = 0 : w.lastNeed = x - 3), x) : 0));\n }\n function a(w, S, b) {\n if ((S[0] & 192) !== 128)\n return w.lastNeed = 0, \"�\";\n if (w.lastNeed > 1 && S.length > 1) {\n if ((S[1] & 192) !== 128)\n return w.lastNeed = 1, \"�\";\n if (w.lastNeed > 2 && S.length > 2 && (S[2] & 192) !== 128)\n return w.lastNeed = 2, \"�\";\n }\n }\n function o(w) {\n var S = this.lastTotal - this.lastNeed, b = a(this, w);\n if (b !== void 0)\n return b;\n if (this.lastNeed <= w.length)\n return w.copy(this.lastChar, S, 0, this.lastNeed), this.lastChar.toString(this.encoding, 0, this.lastTotal);\n w.copy(this.lastChar, S, 0, w.length), this.lastNeed -= w.length;\n }\n function c(w, S) {\n var b = r(this, w, S);\n if (!this.lastNeed)\n return w.toString(\"utf8\", S);\n this.lastTotal = b;\n var T = w.length - (b - this.lastNeed);\n return w.copy(this.lastChar, 0, T), w.toString(\"utf8\", S, T);\n }\n function u(w) {\n var S = w && w.length ? this.write(w) : \"\";\n return this.lastNeed ? S + \"�\" : S;\n }\n function f(w, S) {\n if ((w.length - S) % 2 === 0) {\n var b = w.toString(\"utf16le\", S);\n if (b) {\n var T = b.charCodeAt(b.length - 1);\n if (T >= 55296 && T <= 56319)\n return this.lastNeed = 2, this.lastTotal = 4, this.lastChar[0] = w[w.length - 2], this.lastChar[1] = w[w.length - 1], b.slice(0, -1);\n }\n return b;\n }\n return this.lastNeed = 1, this.lastTotal = 2, this.lastChar[0] = w[w.length - 1], w.toString(\"utf16le\", S, w.length - 1);\n }\n function h(w) {\n var S = w && w.length ? this.write(w) : \"\";\n if (this.lastNeed) {\n var b = this.lastTotal - this.lastNeed;\n return S + this.lastChar.toString(\"utf16le\", 0, b);\n }\n return S;\n }\n function l(w, S) {\n var b = (w.length - S) % 3;\n return b === 0 ? w.toString(\"base64\", S) : (this.lastNeed = 3 - b, this.lastTotal = 3, b === 1 ? this.lastChar[0] = w[w.length - 1] : (this.lastChar[0] = w[w.length - 2], this.lastChar[1] = w[w.length - 1]), w.toString(\"base64\", S, w.length - b));\n }\n function p(w) {\n var S = w && w.length ? this.write(w) : \"\";\n return this.lastNeed ? S + this.lastChar.toString(\"base64\", 0, 3 - this.lastNeed) : S;\n }\n function m(w) {\n return w.toString(this.encoding);\n }\n function y(w) {\n return w && w.length ? this.write(w) : \"\";\n }\n return da;\n}\nvar ca, ic;\nfunction of() {\n if (ic)\n return ca;\n ic = 1;\n var d = Vi;\n ca = S;\n var e = Qw, t;\n S.ReadableState = w, vs.EventEmitter;\n var i = function(A, M) {\n return A.listeners(M).length;\n }, s = Fu, n = vo.Buffer, r = (typeof qe < \"u\" ? qe : typeof window < \"u\" ? window : typeof self < \"u\" ? self : {}).Uint8Array || function() {\n };\n function a(A) {\n return n.from(A);\n }\n function o(A) {\n return n.isBuffer(A) || A instanceof r;\n }\n var c = Object.create(Fe);\n c.inherits = jt;\n var u = dn, f = void 0;\n u && u.debuglog ? f = u.debuglog(\"stream\") : f = function() {\n };\n var h = Zb(), l = nf, p;\n c.inherits(S, s);\n var m = [\"error\", \"close\", \"destroy\", \"pause\", \"resume\"];\n function y(A, M, q) {\n if (typeof A.prependListener == \"function\")\n return A.prependListener(M, q);\n !A._events || !A._events[M] ? A.on(M, q) : e(A._events[M]) ? A._events[M].unshift(q) : A._events[M] = [q, A._events[M]];\n }\n function w(A, M) {\n t = t || As(), A = A || {};\n var q = M instanceof t;\n this.objectMode = !!A.objectMode, q && (this.objectMode = this.objectMode || !!A.readableObjectMode);\n var H = A.highWaterMark, le = A.readableHighWaterMark, oe = this.objectMode ? 16 : 16 * 1024;\n H || H === 0 ? this.highWaterMark = H : q && (le || le === 0) ? this.highWaterMark = le : this.highWaterMark = oe, this.highWaterMark = Math.floor(this.highWaterMark), this.buffer = new h(), this.length = 0, this.pipes = null, this.pipesCount = 0, this.flowing = null, this.ended = !1, this.endEmitted = !1, this.reading = !1, this.sync = !0, this.needReadable = !1, this.emittedReadable = !1, this.readableListening = !1, this.resumeScheduled = !1, this.destroyed = !1, this.defaultEncoding = A.defaultEncoding || \"utf8\", this.awaitDrain = 0, this.readingMore = !1, this.decoder = null, this.encoding = null, A.encoding && (p || (p = sr().StringDecoder), this.decoder = new p(A.encoding), this.encoding = A.encoding);\n }\n function S(A) {\n if (t = t || As(), !(this instanceof S))\n return new S(A);\n this._readableState = new w(A, this), this.readable = !0, A && (typeof A.read == \"function\" && (this._read = A.read), typeof A.destroy == \"function\" && (this._destroy = A.destroy)), s.call(this);\n }\n Object.defineProperty(S.prototype, \"destroyed\", {\n get: function() {\n return this._readableState === void 0 ? !1 : this._readableState.destroyed;\n },\n set: function(A) {\n this._readableState && (this._readableState.destroyed = A);\n }\n }), S.prototype.destroy = l.destroy, S.prototype._undestroy = l.undestroy, S.prototype._destroy = function(A, M) {\n this.push(null), M(A);\n }, S.prototype.push = function(A, M) {\n var q = this._readableState, H;\n return q.objectMode ? H = !0 : typeof A == \"string\" && (M = M || q.defaultEncoding, M !== q.encoding && (A = n.from(A, M), M = \"\"), H = !0), b(this, A, M, !1, H);\n }, S.prototype.unshift = function(A) {\n return b(this, A, null, !0, !1);\n };\n function b(A, M, q, H, le) {\n var oe = A._readableState;\n if (M === null)\n oe.reading = !1, G(A, oe);\n else {\n var he;\n le || (he = x(oe, M)), he ? A.emit(\"error\", he) : oe.objectMode || M && M.length > 0 ? (typeof M != \"string\" && !oe.objectMode && Object.getPrototypeOf(M) !== n.prototype && (M = a(M)), H ? oe.endEmitted ? A.emit(\"error\", new Error(\"stream.unshift() after end event\")) : T(A, oe, M, !0) : oe.ended ? A.emit(\"error\", new Error(\"stream.push() after EOF\")) : (oe.reading = !1, oe.decoder && !q ? (M = oe.decoder.write(M), oe.objectMode || M.length !== 0 ? T(A, oe, M, !1) : Q(A, oe)) : T(A, oe, M, !1))) : H || (oe.reading = !1);\n }\n return v(oe);\n }\n function T(A, M, q, H) {\n M.flowing && M.length === 0 && !M.sync ? (A.emit(\"data\", q), A.read(0)) : (M.length += M.objectMode ? 1 : q.length, H ? M.buffer.unshift(q) : M.buffer.push(q), M.needReadable && W(A)), Q(A, M);\n }\n function x(A, M) {\n var q;\n return !o(M) && typeof M != \"string\" && M !== void 0 && !A.objectMode && (q = new TypeError(\"Invalid non-string/buffer chunk\")), q;\n }\n function v(A) {\n return !A.ended && (A.needReadable || A.length < A.highWaterMark || A.length === 0);\n }\n S.prototype.isPaused = function() {\n return this._readableState.flowing === !1;\n }, S.prototype.setEncoding = function(A) {\n return p || (p = sr().StringDecoder), this._readableState.decoder = new p(A), this._readableState.encoding = A, this;\n };\n var _ = 8388608;\n function V(A) {\n return A >= _ ? A = _ : (A--, A |= A >>> 1, A |= A >>> 2, A |= A >>> 4, A |= A >>> 8, A |= A >>> 16, A++), A;\n }\n function j(A, M) {\n return A <= 0 || M.length === 0 && M.ended ? 0 : M.objectMode ? 1 : A !== A ? M.flowing && M.length ? M.buffer.head.data.length : M.length : (A > M.highWaterMark && (M.highWaterMark = V(A)), A <= M.length ? A : M.ended ? M.length : (M.needReadable = !0, 0));\n }\n S.prototype.read = function(A) {\n f(\"read\", A), A = parseInt(A, 10);\n var M = this._readableState, q = A;\n if (A !== 0 && (M.emittedReadable = !1), A === 0 && M.needReadable && (M.length >= M.highWaterMark || M.ended))\n return f(\"read: emitReadable\", M.length, M.ended), M.length === 0 && M.ended ? Y(this) : W(this), null;\n if (A = j(A, M), A === 0 && M.ended)\n return M.length === 0 && Y(this), null;\n var H = M.needReadable;\n f(\"need readable\", H), (M.length === 0 || M.length - A < M.highWaterMark) && (H = !0, f(\"length less than watermark\", H)), M.ended || M.reading ? (H = !1, f(\"reading or ended\", H)) : H && (f(\"do read\"), M.reading = !0, M.sync = !0, M.length === 0 && (M.needReadable = !0), this._read(M.highWaterMark), M.sync = !1, M.reading || (A = j(q, M)));\n var le;\n return A > 0 ? le = z(A, M) : le = null, le === null ? (M.needReadable = !0, A = 0) : M.length -= A, M.length === 0 && (M.ended || (M.needReadable = !0), q !== A && M.ended && Y(this)), le !== null && this.emit(\"data\", le), le;\n };\n function G(A, M) {\n if (!M.ended) {\n if (M.decoder) {\n var q = M.decoder.end();\n q && q.length && (M.buffer.push(q), M.length += M.objectMode ? 1 : q.length);\n }\n M.ended = !0, W(A);\n }\n }\n function W(A) {\n var M = A._readableState;\n M.needReadable = !1, M.emittedReadable || (f(\"emitReadable\", M.flowing), M.emittedReadable = !0, M.sync ? d.nextTick(B, A) : B(A));\n }\n function B(A) {\n f(\"emit readable\"), A.emit(\"readable\"), L(A);\n }\n function Q(A, M) {\n M.readingMore || (M.readingMore = !0, d.nextTick(se, A, M));\n }\n function se(A, M) {\n for (var q = M.length; !M.reading && !M.flowing && !M.ended && M.length < M.highWaterMark && (f(\"maybeReadMore read 0\"), A.read(0), q !== M.length); )\n q = M.length;\n M.readingMore = !1;\n }\n S.prototype._read = function(A) {\n this.emit(\"error\", new Error(\"_read() is not implemented\"));\n }, S.prototype.pipe = function(A, M) {\n var q = this, H = this._readableState;\n switch (H.pipesCount) {\n case 0:\n H.pipes = A;\n break;\n case 1:\n H.pipes = [H.pipes, A];\n break;\n default:\n H.pipes.push(A);\n break;\n }\n H.pipesCount += 1, f(\"pipe count=%d opts=%j\", H.pipesCount, M);\n var le = (!M || M.end !== !1) && A !== Ce.stdout && A !== Ce.stderr, oe = le ? Ie : De;\n H.endEmitted ? d.nextTick(oe) : q.once(\"end\", oe), A.on(\"unpipe\", he);\n function he(Je, nt) {\n f(\"onunpipe\"), Je === q && nt && nt.hasUnpiped === !1 && (nt.hasUnpiped = !0, bt());\n }\n function Ie() {\n f(\"onend\"), A.end();\n }\n var Pe = $(q);\n A.on(\"drain\", Pe);\n var He = !1;\n function bt() {\n f(\"cleanup\"), A.removeListener(\"close\", Ot), A.removeListener(\"finish\", Le), A.removeListener(\"drain\", Pe), A.removeListener(\"error\", Tt), A.removeListener(\"unpipe\", he), q.removeListener(\"end\", Ie), q.removeListener(\"end\", De), q.removeListener(\"data\", ue), He = !0, H.awaitDrain && (!A._writableState || A._writableState.needDrain) && Pe();\n }\n var mt = !1;\n q.on(\"data\", ue);\n function ue(Je) {\n f(\"ondata\"), mt = !1;\n var nt = A.write(Je);\n nt === !1 && !mt && ((H.pipesCount === 1 && H.pipes === A || H.pipesCount > 1 && ae(H.pipes, A) !== -1) && !He && (f(\"false write response, pause\", H.awaitDrain), H.awaitDrain++, mt = !0), q.pause());\n }\n function Tt(Je) {\n f(\"onerror\", Je), De(), A.removeListener(\"error\", Tt), i(A, \"error\") === 0 && A.emit(\"error\", Je);\n }\n y(A, \"error\", Tt);\n function Ot() {\n A.removeListener(\"finish\", Le), De();\n }\n A.once(\"close\", Ot);\n function Le() {\n f(\"onfinish\"), A.removeListener(\"close\", Ot), De();\n }\n A.once(\"finish\", Le);\n function De() {\n f(\"unpipe\"), q.unpipe(A);\n }\n return A.emit(\"pipe\", q), H.flowing || (f(\"pipe resume\"), q.resume()), A;\n };\n function $(A) {\n return function() {\n var M = A._readableState;\n f(\"pipeOnDrain\", M.awaitDrain), M.awaitDrain && M.awaitDrain--, M.awaitDrain === 0 && i(A, \"data\") && (M.flowing = !0, L(A));\n };\n }\n S.prototype.unpipe = function(A) {\n var M = this._readableState, q = { hasUnpiped: !1 };\n if (M.pipesCount === 0)\n return this;\n if (M.pipesCount === 1)\n return A && A !== M.pipes ? this : (A || (A = M.pipes), M.pipes = null, M.pipesCount = 0, M.flowing = !1, A && A.emit(\"unpipe\", this, q), this);\n if (!A) {\n var H = M.pipes, le = M.pipesCount;\n M.pipes = null, M.pipesCount = 0, M.flowing = !1;\n for (var oe = 0; oe < le; oe++)\n H[oe].emit(\"unpipe\", this, { hasUnpiped: !1 });\n return this;\n }\n var he = ae(M.pipes, A);\n return he === -1 ? this : (M.pipes.splice(he, 1), M.pipesCount -= 1, M.pipesCount === 1 && (M.pipes = M.pipes[0]), A.emit(\"unpipe\", this, q), this);\n }, S.prototype.on = function(A, M) {\n var q = s.prototype.on.call(this, A, M);\n if (A === \"data\")\n this._readableState.flowing !== !1 && this.resume();\n else if (A === \"readable\") {\n var H = this._readableState;\n !H.endEmitted && !H.readableListening && (H.readableListening = H.needReadable = !0, H.emittedReadable = !1, H.reading ? H.length && W(this) : d.nextTick(te, this));\n }\n return q;\n }, S.prototype.addListener = S.prototype.on;\n function te(A) {\n f(\"readable nexttick read 0\"), A.read(0);\n }\n S.prototype.resume = function() {\n var A = this._readableState;\n return A.flowing || (f(\"resume\"), A.flowing = !0, E(this, A)), this;\n };\n function E(A, M) {\n M.resumeScheduled || (M.resumeScheduled = !0, d.nextTick(N, A, M));\n }\n function N(A, M) {\n M.reading || (f(\"resume read 0\"), A.read(0)), M.resumeScheduled = !1, M.awaitDrain = 0, A.emit(\"resume\"), L(A), M.flowing && !M.reading && A.read(0);\n }\n S.prototype.pause = function() {\n return f(\"call pause flowing=%j\", this._readableState.flowing), this._readableState.flowing !== !1 && (f(\"pause\"), this._readableState.flowing = !1, this.emit(\"pause\")), this;\n };\n function L(A) {\n var M = A._readableState;\n for (f(\"flow\", M.flowing); M.flowing && A.read() !== null; )\n ;\n }\n S.prototype.wrap = function(A) {\n var M = this, q = this._readableState, H = !1;\n A.on(\"end\", function() {\n if (f(\"wrapped end\"), q.decoder && !q.ended) {\n var he = q.decoder.end();\n he && he.length && M.push(he);\n }\n M.push(null);\n }), A.on(\"data\", function(he) {\n if (f(\"wrapped data\"), q.decoder && (he = q.decoder.write(he)), !(q.objectMode && he == null) && !(!q.objectMode && (!he || !he.length))) {\n var Ie = M.push(he);\n Ie || (H = !0, A.pause());\n }\n });\n for (var le in A)\n this[le] === void 0 && typeof A[le] == \"function\" && (this[le] = function(he) {\n return function() {\n return A[he].apply(A, arguments);\n };\n }(le));\n for (var oe = 0; oe < m.length; oe++)\n A.on(m[oe], this.emit.bind(this, m[oe]));\n return this._read = function(he) {\n f(\"wrapped _read\", he), H && (H = !1, A.resume());\n }, this;\n }, Object.defineProperty(S.prototype, \"readableHighWaterMark\", {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: !1,\n get: function() {\n return this._readableState.highWaterMark;\n }\n }), S._fromList = z;\n function z(A, M) {\n if (M.length === 0)\n return null;\n var q;\n return M.objectMode ? q = M.buffer.shift() : !A || A >= M.length ? (M.decoder ? q = M.buffer.join(\"\") : M.buffer.length === 1 ? q = M.buffer.head.data : q = M.buffer.concat(M.length), M.buffer.clear()) : q = K(A, M.buffer, M.decoder), q;\n }\n function K(A, M, q) {\n var H;\n return A < M.head.data.length ? (H = M.head.data.slice(0, A), M.head.data = M.head.data.slice(A)) : A === M.head.data.length ? H = M.shift() : H = q ? R(A, M) : U(A, M), H;\n }\n function R(A, M) {\n var q = M.head, H = 1, le = q.data;\n for (A -= le.length; q = q.next; ) {\n var oe = q.data, he = A > oe.length ? oe.length : A;\n if (he === oe.length ? le += oe : le += oe.slice(0, A), A -= he, A === 0) {\n he === oe.length ? (++H, q.next ? M.head = q.next : M.head = M.tail = null) : (M.head = q, q.data = oe.slice(he));\n break;\n }\n ++H;\n }\n return M.length -= H, le;\n }\n function U(A, M) {\n var q = n.allocUnsafe(A), H = M.head, le = 1;\n for (H.data.copy(q), A -= H.data.length; H = H.next; ) {\n var oe = H.data, he = A > oe.length ? oe.length : A;\n if (oe.copy(q, q.length - A, 0, he), A -= he, A === 0) {\n he === oe.length ? (++le, H.next ? M.head = H.next : M.head = M.tail = null) : (M.head = H, H.data = oe.slice(he));\n break;\n }\n ++le;\n }\n return M.length -= le, q;\n }\n function Y(A) {\n var M = A._readableState;\n if (M.length > 0)\n throw new Error('\"endReadable()\" called on non-empty stream');\n M.endEmitted || (M.ended = !0, d.nextTick(J, M, A));\n }\n function J(A, M) {\n !A.endEmitted && A.length === 0 && (A.endEmitted = !0, M.readable = !1, M.emit(\"end\"));\n }\n function ae(A, M) {\n for (var q = 0, H = A.length; q < H; q++)\n if (A[q] === M)\n return q;\n return -1;\n }\n return ca;\n}\nvar df = oi, Mr = As(), cf = Object.create(Fe);\ncf.inherits = jt;\ncf.inherits(oi, Mr);\nfunction iS(d, e) {\n var t = this._transformState;\n t.transforming = !1;\n var i = t.writecb;\n if (!i)\n return this.emit(\"error\", new Error(\"write callback called multiple times\"));\n t.writechunk = null, t.writecb = null, e != null && this.push(e), i(d);\n var s = this._readableState;\n s.reading = !1, (s.needReadable || s.length < s.highWaterMark) && this._read(s.highWaterMark);\n}\nfunction oi(d) {\n if (!(this instanceof oi))\n return new oi(d);\n Mr.call(this, d), this._transformState = {\n afterTransform: iS.bind(this),\n needTransform: !1,\n transforming: !1,\n writecb: null,\n writechunk: null,\n writeencoding: null\n }, this._readableState.needReadable = !0, this._readableState.sync = !1, d && (typeof d.transform == \"function\" && (this._transform = d.transform), typeof d.flush == \"function\" && (this._flush = d.flush)), this.on(\"prefinish\", sS);\n}\nfunction sS() {\n var d = this;\n typeof this._flush == \"function\" ? this._flush(function(e, t) {\n sc(d, e, t);\n }) : sc(this, null, null);\n}\noi.prototype.push = function(d, e) {\n return this._transformState.needTransform = !1, Mr.prototype.push.call(this, d, e);\n};\noi.prototype._transform = function(d, e, t) {\n throw new Error(\"_transform() is not implemented\");\n};\noi.prototype._write = function(d, e, t) {\n var i = this._transformState;\n if (i.writecb = t, i.writechunk = d, i.writeencoding = e, !i.transforming) {\n var s = this._readableState;\n (i.needTransform || s.needReadable || s.length < s.highWaterMark) && this._read(s.highWaterMark);\n }\n};\noi.prototype._read = function(d) {\n var e = this._transformState;\n e.writechunk !== null && e.writecb && !e.transforming ? (e.transforming = !0, this._transform(e.writechunk, e.writeencoding, e.afterTransform)) : e.needTransform = !0;\n};\noi.prototype._destroy = function(d, e) {\n var t = this;\n Mr.prototype._destroy.call(this, d, function(i) {\n e(i), t.emit(\"close\");\n });\n};\nfunction sc(d, e, t) {\n if (e)\n return d.emit(\"error\", e);\n if (t != null && d.push(t), d._writableState.length)\n throw new Error(\"Calling transform done when ws.length != 0\");\n if (d._transformState.transforming)\n throw new Error(\"Calling transform done when still transforming\");\n return d.push(null);\n}\nvar nS = Js, uf = df, ff = Object.create(Fe);\nff.inherits = jt;\nff.inherits(Js, uf);\nfunction Js(d) {\n if (!(this instanceof Js))\n return new Js(d);\n uf.call(this, d);\n}\nJs.prototype._transform = function(d, e, t) {\n t(null, d);\n};\n(function(d, e) {\n e = d.exports = of(), e.Stream = e, e.Readable = e, e.Writable = af(), e.Duplex = As(), e.Transform = df, e.PassThrough = nS;\n})(Pa, Pa.exports);\nvar hf = Pa.exports, Do = { exports: {} }, rS = lf;\nfunction lf(d, e) {\n if (d && e)\n return lf(d)(e);\n if (typeof d != \"function\")\n throw new TypeError(\"need wrapper function\");\n return Object.keys(d).forEach(function(i) {\n t[i] = d[i];\n }), t;\n function t() {\n for (var i = new Array(arguments.length), s = 0; s < i.length; s++)\n i[s] = arguments[s];\n var n = d.apply(this, i), r = i[i.length - 1];\n return typeof n == \"function\" && n !== r && Object.keys(r).forEach(function(a) {\n n[a] = r[a];\n }), n;\n }\n}\nvar pf = rS;\nDo.exports = pf(Un);\nDo.exports.strict = pf(gf);\nUn.proto = Un(function() {\n Object.defineProperty(Function.prototype, \"once\", {\n value: function() {\n return Un(this);\n },\n configurable: !0\n }), Object.defineProperty(Function.prototype, \"onceStrict\", {\n value: function() {\n return gf(this);\n },\n configurable: !0\n });\n});\nfunction Un(d) {\n var e = function() {\n return e.called ? e.value : (e.called = !0, e.value = d.apply(this, arguments));\n };\n return e.called = !1, e;\n}\nfunction gf(d) {\n var e = function() {\n if (e.called)\n throw new Error(e.onceError);\n return e.called = !0, e.value = d.apply(this, arguments);\n }, t = d.name || \"Function wrapped with `once`\";\n return e.onceError = t + \" shouldn't be called more than once\", e.called = !1, e;\n}\nvar mf = Do.exports, aS = mf, oS = function() {\n}, dS = function(d) {\n return d.setHeader && typeof d.abort == \"function\";\n}, cS = function(d) {\n return d.stdio && Array.isArray(d.stdio) && d.stdio.length === 3;\n}, yf = function(d, e, t) {\n if (typeof e == \"function\")\n return yf(d, null, e);\n e || (e = {}), t = aS(t || oS);\n var i = d._writableState, s = d._readableState, n = e.readable || e.readable !== !1 && d.readable, r = e.writable || e.writable !== !1 && d.writable, a = !1, o = function() {\n d.writable || c();\n }, c = function() {\n r = !1, n || t.call(d);\n }, u = function() {\n n = !1, r || t.call(d);\n }, f = function(y) {\n t.call(d, y ? new Error(\"exited with error code: \" + y) : null);\n }, h = function(y) {\n t.call(d, y);\n }, l = function() {\n Ce.nextTick(p);\n }, p = function() {\n if (!a) {\n if (n && !(s && s.ended && !s.destroyed))\n return t.call(d, new Error(\"premature close\"));\n if (r && !(i && i.ended && !i.destroyed))\n return t.call(d, new Error(\"premature close\"));\n }\n }, m = function() {\n d.req.on(\"finish\", c);\n };\n return dS(d) ? (d.on(\"complete\", c), d.on(\"abort\", l), d.req ? m() : d.on(\"request\", m)) : r && !i && (d.on(\"end\", o), d.on(\"close\", o)), cS(d) && d.on(\"exit\", f), d.on(\"end\", u), d.on(\"finish\", c), e.error !== !1 && d.on(\"error\", h), d.on(\"close\", l), function() {\n a = !0, d.removeListener(\"complete\", c), d.removeListener(\"abort\", l), d.removeListener(\"request\", m), d.req && d.req.removeListener(\"finish\", c), d.removeListener(\"end\", o), d.removeListener(\"close\", o), d.removeListener(\"finish\", c), d.removeListener(\"exit\", f), d.removeListener(\"end\", u), d.removeListener(\"error\", h), d.removeListener(\"close\", l);\n };\n}, uS = yf, Cr = {};\nObject.defineProperty(Cr, \"__esModule\", { value: !0 });\nCr.Substream = void 0;\nconst fS = hf;\nclass hS extends fS.Duplex {\n constructor({ parent: e, name: t }) {\n super({ objectMode: !0 }), this._parent = e, this._name = t;\n }\n /**\n * Explicitly sets read operations to a no-op.\n */\n _read() {\n }\n /**\n * Called when data should be written to this writable stream.\n *\n * @param chunk - Arbitrary object to write\n * @param encoding - Encoding to use when writing payload\n * @param callback - Called when writing is complete or an error occurs\n */\n _write(e, t, i) {\n this._parent.push({\n name: this._name,\n data: e\n }), i();\n }\n}\nCr.Substream = hS;\nvar wf = qe && qe.__importDefault || function(d) {\n return d && d.__esModule ? d : { default: d };\n};\nObject.defineProperty(Sr, \"__esModule\", { value: !0 });\nSr.ObjectMultiplex = void 0;\nconst lS = hf, nc = wf(uS), pS = wf(mf), gS = Cr, rc = Symbol(\"IGNORE_SUBSTREAM\");\nclass mS extends lS.Duplex {\n constructor(e = {}) {\n super(Object.assign(Object.assign({}, e), { objectMode: !0 })), this._substreams = {};\n }\n createStream(e) {\n if (this.destroyed)\n throw new Error(`ObjectMultiplex - parent stream for name \"${e}\" already destroyed`);\n if (this._readableState.ended || this._writableState.ended)\n throw new Error(`ObjectMultiplex - parent stream for name \"${e}\" already ended`);\n if (!e)\n throw new Error(\"ObjectMultiplex - name must not be empty\");\n if (this._substreams[e])\n throw new Error(`ObjectMultiplex - Substream for name \"${e}\" already exists`);\n const t = new gS.Substream({ parent: this, name: e });\n return this._substreams[e] = t, yS(this, (i) => t.destroy(i || void 0)), t;\n }\n // ignore streams (dont display orphaned data warning)\n ignoreStream(e) {\n if (!e)\n throw new Error(\"ObjectMultiplex - name must not be empty\");\n if (this._substreams[e])\n throw new Error(`ObjectMultiplex - Substream for name \"${e}\" already exists`);\n this._substreams[e] = rc;\n }\n _read() {\n }\n _write(e, t, i) {\n const { name: s, data: n } = e;\n if (!s)\n return console.warn(`ObjectMultiplex - malformed chunk without name \"${e}\"`), i();\n const r = this._substreams[s];\n return r ? (r !== rc && r.push(n), i()) : (console.warn(`ObjectMultiplex - orphaned data for stream \"${s}\"`), i());\n }\n}\nSr.ObjectMultiplex = mS;\nfunction yS(d, e) {\n const t = pS.default(e);\n nc.default(d, { readable: !1 }, t), nc.default(d, { writable: !1 }, t);\n}\nconst wS = Sr;\nwS.ObjectMultiplex;\nvar bf = {};\nObject.defineProperty(bf, \"__esModule\", { value: !0 });\nconst bS = {\n errors: {\n disconnected: () => \"MetaMask: Disconnected from chain. Attempting to connect.\",\n permanentlyDisconnected: () => \"MetaMask: Disconnected from MetaMask background. Page reload required.\",\n sendSiteMetadata: () => \"MetaMask: Failed to send site metadata. This is an internal error, please report this bug.\",\n unsupportedSync: (d) => `MetaMask: The MetaMask Ethereum provider does not support synchronous methods like ${d} without a callback parameter.`,\n invalidDuplexStream: () => \"Must provide a Node.js-style duplex stream.\",\n invalidRequestArgs: () => \"Expected a single, non-array, object argument.\",\n invalidRequestMethod: () => \"'args.method' must be a non-empty string.\",\n invalidRequestParams: () => \"'args.params' must be an object or array if provided.\",\n invalidLoggerObject: () => \"'args.logger' must be an object if provided.\",\n invalidLoggerMethod: (d) => `'args.logger' must include required method '${d}'.`\n },\n info: {\n connected: (d) => `MetaMask: Connected to chain with ID \"${d}\".`\n },\n warnings: {\n // deprecated methods\n enableDeprecation: `MetaMask: 'ethereum.enable()' is deprecated and may be removed in the future. Please use the 'eth_requestAccounts' RPC method instead.\nFor more information, see: https://eips.ethereum.org/EIPS/eip-1102`,\n sendDeprecation: `MetaMask: 'ethereum.send(...)' is deprecated and may be removed in the future. Please use 'ethereum.sendAsync(...)' or 'ethereum.request(...)' instead.\nFor more information, see: https://eips.ethereum.org/EIPS/eip-1193`,\n // deprecated events\n events: {\n close: `MetaMask: The event 'close' is deprecated and may be removed in the future. Please use 'disconnect' instead.\nFor more information, see: https://eips.ethereum.org/EIPS/eip-1193#disconnect`,\n data: `MetaMask: The event 'data' is deprecated and will be removed in the future. Use 'message' instead.\nFor more information, see: https://eips.ethereum.org/EIPS/eip-1193#message`,\n networkChanged: `MetaMask: The event 'networkChanged' is deprecated and may be removed in the future. Use 'chainChanged' instead.\nFor more information, see: https://eips.ethereum.org/EIPS/eip-1193#chainchanged`,\n notification: `MetaMask: The event 'notification' is deprecated and may be removed in the future. Use 'message' instead.\nFor more information, see: https://eips.ethereum.org/EIPS/eip-1193#message`\n },\n // misc\n experimentalMethods: \"MetaMask: 'ethereum._metamask' exposes non-standard, experimental methods. They may be removed or changed without warning.\"\n }\n};\nbf.default = bS;\nvar Bt = {}, Ro = {}, Ni = {}, SS = en;\nen.default = en;\nen.stable = Af;\nen.stableStringify = Af;\nvar nr = \"[...]\", Sf = \"[Circular]\", Xi = [], Wi = [];\nfunction Tf() {\n return {\n depthLimit: Number.MAX_SAFE_INTEGER,\n edgesLimit: Number.MAX_SAFE_INTEGER\n };\n}\nfunction en(d, e, t, i) {\n typeof i > \"u\" && (i = Tf()), qa(d, \"\", 0, [], void 0, 0, i);\n var s;\n try {\n Wi.length === 0 ? s = JSON.stringify(d, e, t) : s = JSON.stringify(d, If(e), t);\n } catch {\n return JSON.stringify(\"[unable to serialize, circular reference is too complex to analyze]\");\n } finally {\n for (; Xi.length !== 0; ) {\n var n = Xi.pop();\n n.length === 4 ? Object.defineProperty(n[0], n[1], n[3]) : n[0][n[1]] = n[2];\n }\n }\n return s;\n}\nfunction gs(d, e, t, i) {\n var s = Object.getOwnPropertyDescriptor(i, t);\n s.get !== void 0 ? s.configurable ? (Object.defineProperty(i, t, { value: d }), Xi.push([i, t, e, s])) : Wi.push([e, t, d]) : (i[t] = d, Xi.push([i, t, e]));\n}\nfunction qa(d, e, t, i, s, n, r) {\n n += 1;\n var a;\n if (typeof d == \"object\" && d !== null) {\n for (a = 0; a < i.length; a++)\n if (i[a] === d) {\n gs(Sf, d, e, s);\n return;\n }\n if (typeof r.depthLimit < \"u\" && n > r.depthLimit) {\n gs(nr, d, e, s);\n return;\n }\n if (typeof r.edgesLimit < \"u\" && t + 1 > r.edgesLimit) {\n gs(nr, d, e, s);\n return;\n }\n if (i.push(d), Array.isArray(d))\n for (a = 0; a < d.length; a++)\n qa(d[a], a, a, i, d, n, r);\n else {\n var o = Object.keys(d);\n for (a = 0; a < o.length; a++) {\n var c = o[a];\n qa(d[c], c, a, i, d, n, r);\n }\n }\n i.pop();\n }\n}\nfunction TS(d, e) {\n return d < e ? -1 : d > e ? 1 : 0;\n}\nfunction Af(d, e, t, i) {\n typeof i > \"u\" && (i = Tf());\n var s = Ga(d, \"\", 0, [], void 0, 0, i) || d, n;\n try {\n Wi.length === 0 ? n = JSON.stringify(s, e, t) : n = JSON.stringify(s, If(e), t);\n } catch {\n return JSON.stringify(\"[unable to serialize, circular reference is too complex to analyze]\");\n } finally {\n for (; Xi.length !== 0; ) {\n var r = Xi.pop();\n r.length === 4 ? Object.defineProperty(r[0], r[1], r[3]) : r[0][r[1]] = r[2];\n }\n }\n return n;\n}\nfunction Ga(d, e, t, i, s, n, r) {\n n += 1;\n var a;\n if (typeof d == \"object\" && d !== null) {\n for (a = 0; a < i.length; a++)\n if (i[a] === d) {\n gs(Sf, d, e, s);\n return;\n }\n try {\n if (typeof d.toJSON == \"function\")\n return;\n } catch {\n return;\n }\n if (typeof r.depthLimit < \"u\" && n > r.depthLimit) {\n gs(nr, d, e, s);\n return;\n }\n if (typeof r.edgesLimit < \"u\" && t + 1 > r.edgesLimit) {\n gs(nr, d, e, s);\n return;\n }\n if (i.push(d), Array.isArray(d))\n for (a = 0; a < d.length; a++)\n Ga(d[a], a, a, i, d, n, r);\n else {\n var o = {}, c = Object.keys(d).sort(TS);\n for (a = 0; a < c.length; a++) {\n var u = c[a];\n Ga(d[u], u, a, i, d, n, r), o[u] = d[u];\n }\n if (typeof s < \"u\")\n Xi.push([s, e, d]), s[e] = o;\n else\n return o;\n }\n i.pop();\n }\n}\nfunction If(d) {\n return d = typeof d < \"u\" ? d : function(e, t) {\n return t;\n }, function(e, t) {\n if (Wi.length > 0)\n for (var i = 0; i < Wi.length; i++) {\n var s = Wi[i];\n if (s[1] === e && s[0] === t) {\n t = s[2], Wi.splice(i, 1);\n break;\n }\n }\n return d.call(this, e, t);\n };\n}\nObject.defineProperty(Ni, \"__esModule\", { value: !0 });\nNi.EthereumProviderError = Ni.EthereumRpcError = void 0;\nconst AS = SS;\nclass Of extends Error {\n constructor(e, t, i) {\n if (!Number.isInteger(e))\n throw new Error('\"code\" must be an integer.');\n if (!t || typeof t != \"string\")\n throw new Error('\"message\" must be a nonempty string.');\n super(t), this.code = e, i !== void 0 && (this.data = i);\n }\n /**\n * Returns a plain object with all public class properties.\n */\n serialize() {\n const e = {\n code: this.code,\n message: this.message\n };\n return this.data !== void 0 && (e.data = this.data), this.stack && (e.stack = this.stack), e;\n }\n /**\n * Return a string representation of the serialized error, omitting\n * any circular references.\n */\n toString() {\n return AS.default(this.serialize(), MS, 2);\n }\n}\nNi.EthereumRpcError = Of;\nclass IS extends Of {\n /**\n * Create an Ethereum Provider JSON-RPC error.\n * `code` must be an integer in the 1000 <= 4999 range.\n */\n constructor(e, t, i) {\n if (!OS(e))\n throw new Error('\"code\" must be an integer such that: 1000 <= code <= 4999');\n super(e, t, i);\n }\n}\nNi.EthereumProviderError = IS;\nfunction OS(d) {\n return Number.isInteger(d) && d >= 1e3 && d <= 4999;\n}\nfunction MS(d, e) {\n if (e !== \"[Circular]\")\n return e;\n}\nvar Bo = {}, Pi = {};\nObject.defineProperty(Pi, \"__esModule\", { value: !0 });\nPi.errorValues = Pi.errorCodes = void 0;\nPi.errorCodes = {\n rpc: {\n invalidInput: -32e3,\n resourceNotFound: -32001,\n resourceUnavailable: -32002,\n transactionRejected: -32003,\n methodNotSupported: -32004,\n limitExceeded: -32005,\n parse: -32700,\n invalidRequest: -32600,\n methodNotFound: -32601,\n invalidParams: -32602,\n internal: -32603\n },\n provider: {\n userRejectedRequest: 4001,\n unauthorized: 4100,\n unsupportedMethod: 4200,\n disconnected: 4900,\n chainDisconnected: 4901\n }\n};\nPi.errorValues = {\n \"-32700\": {\n standard: \"JSON RPC 2.0\",\n message: \"Invalid JSON was received by the server. An error occurred on the server while parsing the JSON text.\"\n },\n \"-32600\": {\n standard: \"JSON RPC 2.0\",\n message: \"The JSON sent is not a valid Request object.\"\n },\n \"-32601\": {\n standard: \"JSON RPC 2.0\",\n message: \"The method does not exist / is not available.\"\n },\n \"-32602\": {\n standard: \"JSON RPC 2.0\",\n message: \"Invalid method parameter(s).\"\n },\n \"-32603\": {\n standard: \"JSON RPC 2.0\",\n message: \"Internal JSON-RPC error.\"\n },\n \"-32000\": {\n standard: \"EIP-1474\",\n message: \"Invalid input.\"\n },\n \"-32001\": {\n standard: \"EIP-1474\",\n message: \"Resource not found.\"\n },\n \"-32002\": {\n standard: \"EIP-1474\",\n message: \"Resource unavailable.\"\n },\n \"-32003\": {\n standard: \"EIP-1474\",\n message: \"Transaction rejected.\"\n },\n \"-32004\": {\n standard: \"EIP-1474\",\n message: \"Method not supported.\"\n },\n \"-32005\": {\n standard: \"EIP-1474\",\n message: \"Request limit exceeded.\"\n },\n 4001: {\n standard: \"EIP-1193\",\n message: \"User rejected the request.\"\n },\n 4100: {\n standard: \"EIP-1193\",\n message: \"The requested account and/or method has not been authorized by the user.\"\n },\n 4200: {\n standard: \"EIP-1193\",\n message: \"The requested method is not supported by this Ethereum provider.\"\n },\n 4900: {\n standard: \"EIP-1193\",\n message: \"The provider is disconnected from all chains.\"\n },\n 4901: {\n standard: \"EIP-1193\",\n message: \"The provider is disconnected from the specified chain.\"\n }\n};\n(function(d) {\n Object.defineProperty(d, \"__esModule\", { value: !0 }), d.serializeError = d.isValidCode = d.getMessageFromCode = d.JSON_RPC_SERVER_ERROR_MESSAGE = void 0;\n const e = Pi, t = Ni, i = e.errorCodes.rpc.internal, s = \"Unspecified error message. This is a bug, please report it.\", n = {\n code: i,\n message: r(i)\n };\n d.JSON_RPC_SERVER_ERROR_MESSAGE = \"Unspecified server error.\";\n function r(h, l = s) {\n if (Number.isInteger(h)) {\n const p = h.toString();\n if (f(e.errorValues, p))\n return e.errorValues[p].message;\n if (c(h))\n return d.JSON_RPC_SERVER_ERROR_MESSAGE;\n }\n return l;\n }\n d.getMessageFromCode = r;\n function a(h) {\n if (!Number.isInteger(h))\n return !1;\n const l = h.toString();\n return !!(e.errorValues[l] || c(h));\n }\n d.isValidCode = a;\n function o(h, { fallbackError: l = n, shouldIncludeStack: p = !1 } = {}) {\n var m, y;\n if (!l || !Number.isInteger(l.code) || typeof l.message != \"string\")\n throw new Error(\"Must provide fallback error with integer number code and string message.\");\n if (h instanceof t.EthereumRpcError)\n return h.serialize();\n const w = {};\n if (h && typeof h == \"object\" && !Array.isArray(h) && f(h, \"code\") && a(h.code)) {\n const b = h;\n w.code = b.code, b.message && typeof b.message == \"string\" ? (w.message = b.message, f(b, \"data\") && (w.data = b.data)) : (w.message = r(w.code), w.data = { originalError: u(h) });\n } else {\n w.code = l.code;\n const b = (m = h) === null || m === void 0 ? void 0 : m.message;\n w.message = b && typeof b == \"string\" ? b : l.message, w.data = { originalError: u(h) };\n }\n const S = (y = h) === null || y === void 0 ? void 0 : y.stack;\n return p && h && S && typeof S == \"string\" && (w.stack = S), w;\n }\n d.serializeError = o;\n function c(h) {\n return h >= -32099 && h <= -32e3;\n }\n function u(h) {\n return h && typeof h == \"object\" && !Array.isArray(h) ? Object.assign({}, h) : h;\n }\n function f(h, l) {\n return Object.prototype.hasOwnProperty.call(h, l);\n }\n})(Bo);\nvar xr = {};\nObject.defineProperty(xr, \"__esModule\", { value: !0 });\nxr.ethErrors = void 0;\nconst Vo = Ni, Mf = Bo, ht = Pi;\nxr.ethErrors = {\n rpc: {\n /**\n * Get a JSON RPC 2.0 Parse (-32700) error.\n */\n parse: (d) => Ct(ht.errorCodes.rpc.parse, d),\n /**\n * Get a JSON RPC 2.0 Invalid Request (-32600) error.\n */\n invalidRequest: (d) => Ct(ht.errorCodes.rpc.invalidRequest, d),\n /**\n * Get a JSON RPC 2.0 Invalid Params (-32602) error.\n */\n invalidParams: (d) => Ct(ht.errorCodes.rpc.invalidParams, d),\n /**\n * Get a JSON RPC 2.0 Method Not Found (-32601) error.\n */\n methodNotFound: (d) => Ct(ht.errorCodes.rpc.methodNotFound, d),\n /**\n * Get a JSON RPC 2.0 Internal (-32603) error.\n */\n internal: (d) => Ct(ht.errorCodes.rpc.internal, d),\n /**\n * Get a JSON RPC 2.0 Server error.\n * Permits integer error codes in the [ -32099 <= -32005 ] range.\n * Codes -32000 through -32004 are reserved by EIP-1474.\n */\n server: (d) => {\n if (!d || typeof d != \"object\" || Array.isArray(d))\n throw new Error(\"Ethereum RPC Server errors must provide single object argument.\");\n const { code: e } = d;\n if (!Number.isInteger(e) || e > -32005 || e < -32099)\n throw new Error('\"code\" must be an integer such that: -32099 <= code <= -32005');\n return Ct(e, d);\n },\n /**\n * Get an Ethereum JSON RPC Invalid Input (-32000) error.\n */\n invalidInput: (d) => Ct(ht.errorCodes.rpc.invalidInput, d),\n /**\n * Get an Ethereum JSON RPC Resource Not Found (-32001) error.\n */\n resourceNotFound: (d) => Ct(ht.errorCodes.rpc.resourceNotFound, d),\n /**\n * Get an Ethereum JSON RPC Resource Unavailable (-32002) error.\n */\n resourceUnavailable: (d) => Ct(ht.errorCodes.rpc.resourceUnavailable, d),\n /**\n * Get an Ethereum JSON RPC Transaction Rejected (-32003) error.\n */\n transactionRejected: (d) => Ct(ht.errorCodes.rpc.transactionRejected, d),\n /**\n * Get an Ethereum JSON RPC Method Not Supported (-32004) error.\n */\n methodNotSupported: (d) => Ct(ht.errorCodes.rpc.methodNotSupported, d),\n /**\n * Get an Ethereum JSON RPC Limit Exceeded (-32005) error.\n */\n limitExceeded: (d) => Ct(ht.errorCodes.rpc.limitExceeded, d)\n },\n provider: {\n /**\n * Get an Ethereum Provider User Rejected Request (4001) error.\n */\n userRejectedRequest: (d) => js(ht.errorCodes.provider.userRejectedRequest, d),\n /**\n * Get an Ethereum Provider Unauthorized (4100) error.\n */\n unauthorized: (d) => js(ht.errorCodes.provider.unauthorized, d),\n /**\n * Get an Ethereum Provider Unsupported Method (4200) error.\n */\n unsupportedMethod: (d) => js(ht.errorCodes.provider.unsupportedMethod, d),\n /**\n * Get an Ethereum Provider Not Connected (4900) error.\n */\n disconnected: (d) => js(ht.errorCodes.provider.disconnected, d),\n /**\n * Get an Ethereum Provider Chain Not Connected (4901) error.\n */\n chainDisconnected: (d) => js(ht.errorCodes.provider.chainDisconnected, d),\n /**\n * Get a custom Ethereum Provider error.\n */\n custom: (d) => {\n if (!d || typeof d != \"object\" || Array.isArray(d))\n throw new Error(\"Ethereum Provider custom errors must provide single object argument.\");\n const { code: e, message: t, data: i } = d;\n if (!t || typeof t != \"string\")\n throw new Error('\"message\" must be a nonempty string');\n return new Vo.EthereumProviderError(e, t, i);\n }\n }\n};\nfunction Ct(d, e) {\n const [t, i] = Cf(e);\n return new Vo.EthereumRpcError(d, t || Mf.getMessageFromCode(d), i);\n}\nfunction js(d, e) {\n const [t, i] = Cf(e);\n return new Vo.EthereumProviderError(d, t || Mf.getMessageFromCode(d), i);\n}\nfunction Cf(d) {\n if (d) {\n if (typeof d == \"string\")\n return [d];\n if (typeof d == \"object\" && !Array.isArray(d)) {\n const { message: e, data: t } = d;\n if (e && typeof e != \"string\")\n throw new Error(\"Must specify string message.\");\n return [e || void 0, t];\n }\n }\n return [];\n}\n(function(d) {\n Object.defineProperty(d, \"__esModule\", { value: !0 }), d.getMessageFromCode = d.serializeError = d.EthereumProviderError = d.EthereumRpcError = d.ethErrors = d.errorCodes = void 0;\n const e = Ni;\n Object.defineProperty(d, \"EthereumRpcError\", { enumerable: !0, get: function() {\n return e.EthereumRpcError;\n } }), Object.defineProperty(d, \"EthereumProviderError\", { enumerable: !0, get: function() {\n return e.EthereumProviderError;\n } });\n const t = Bo;\n Object.defineProperty(d, \"serializeError\", { enumerable: !0, get: function() {\n return t.serializeError;\n } }), Object.defineProperty(d, \"getMessageFromCode\", { enumerable: !0, get: function() {\n return t.getMessageFromCode;\n } });\n const i = xr;\n Object.defineProperty(d, \"ethErrors\", { enumerable: !0, get: function() {\n return i.ethErrors;\n } });\n const s = Pi;\n Object.defineProperty(d, \"errorCodes\", { enumerable: !0, get: function() {\n return s.errorCodes;\n } });\n})(Ro);\nObject.defineProperty(Bt, \"__esModule\", { value: !0 });\nBt.EMITTED_NOTIFICATIONS = Bt.NOOP = Bt.logStreamDisconnectWarning = Bt.getRpcPromiseCallback = Bt.createErrorMiddleware = void 0;\nconst CS = Ro;\nfunction xS(d) {\n return (e, t, i) => {\n (typeof e.method != \"string\" || !e.method) && (t.error = CS.ethErrors.rpc.invalidRequest({\n message: \"The request 'method' must be a non-empty string.\",\n data: e\n })), i((s) => {\n const { error: n } = t;\n return n && d.error(`MetaMask - RPC Error: ${n.message}`, n), s();\n });\n };\n}\nBt.createErrorMiddleware = xS;\nconst vS = (d, e, t = !0) => (i, s) => {\n i || s.error ? e(i || s.error) : !t || Array.isArray(s) ? d(s) : d(s.result);\n};\nBt.getRpcPromiseCallback = vS;\nfunction kS(d, e, t, i) {\n let s = `MetaMask: Lost connection to \"${e}\".`;\n t != null && t.stack && (s += `\n${t.stack}`), d.warn(s), i && i.listenerCount(\"error\") > 0 && i.emit(\"error\", s);\n}\nBt.logStreamDisconnectWarning = kS;\nconst ES = () => {\n};\nBt.NOOP = ES;\nBt.EMITTED_NOTIFICATIONS = [\n \"eth_subscription\"\n // per eth-json-rpc-filters/subscriptionManager\n];\nconst ri = (d) => d !== null && typeof d == \"object\" && typeof d.pipe == \"function\";\nri.writable = (d) => ri(d) && d.writable !== !1 && typeof d._write == \"function\" && typeof d._writableState == \"object\";\nri.readable = (d) => ri(d) && d.readable !== !1 && typeof d._read == \"function\" && typeof d._readableState == \"object\";\nri.duplex = (d) => ri.writable(d) && ri.readable(d);\nri.transform = (d) => ri.duplex(d) && typeof d._transform == \"function\";\nvar NS = {}, vr = {}, fn = {};\nObject.defineProperty(fn, \"__esModule\", { value: !0 });\nfn.getUniqueId = void 0;\nconst xf = 4294967295;\nlet ua = Math.floor(Math.random() * xf);\nfunction PS() {\n return ua = (ua + 1) % xf, ua;\n}\nfn.getUniqueId = PS;\nObject.defineProperty(vr, \"__esModule\", { value: !0 });\nvr.createIdRemapMiddleware = void 0;\nconst _S = fn;\nfunction LS() {\n return (d, e, t, i) => {\n const s = d.id, n = _S.getUniqueId();\n d.id = n, e.id = n, t((r) => {\n d.id = s, e.id = s, r();\n });\n };\n}\nvr.createIdRemapMiddleware = LS;\nvar kr = {};\nObject.defineProperty(kr, \"__esModule\", { value: !0 });\nkr.createAsyncMiddleware = void 0;\nfunction DS(d) {\n return async (e, t, i, s) => {\n let n;\n const r = new Promise((u) => {\n n = u;\n });\n let a = null, o = !1;\n const c = async () => {\n o = !0, i((u) => {\n a = u, n();\n }), await r;\n };\n try {\n await d(e, t, c), o ? (await r, a(null)) : s(null);\n } catch (u) {\n a ? a(u) : s(u);\n }\n };\n}\nkr.createAsyncMiddleware = DS;\nvar Er = {};\nObject.defineProperty(Er, \"__esModule\", { value: !0 });\nEr.createScaffoldMiddleware = void 0;\nfunction RS(d) {\n return (e, t, i, s) => {\n const n = d[e.method];\n return n === void 0 ? i() : typeof n == \"function\" ? n(e, t, i, s) : (t.result = n, s());\n };\n}\nEr.createScaffoldMiddleware = RS;\nvar hn = {}, jo = {};\nObject.defineProperty(jo, \"__esModule\", { value: !0 });\nconst BS = vs;\nfunction ac(d, e, t) {\n try {\n Reflect.apply(d, e, t);\n } catch (i) {\n setTimeout(() => {\n throw i;\n });\n }\n}\nfunction VS(d) {\n const e = d.length, t = new Array(e);\n for (let i = 0; i < e; i += 1)\n t[i] = d[i];\n return t;\n}\nlet jS = class extends BS.EventEmitter {\n emit(e, ...t) {\n let i = e === \"error\";\n const s = this._events;\n if (s !== void 0)\n i = i && s.error === void 0;\n else if (!i)\n return !1;\n if (i) {\n let r;\n if (t.length > 0 && ([r] = t), r instanceof Error)\n throw r;\n const a = new Error(`Unhandled error.${r ? ` (${r.message})` : \"\"}`);\n throw a.context = r, a;\n }\n const n = s[e];\n if (n === void 0)\n return !1;\n if (typeof n == \"function\")\n ac(n, this, t);\n else {\n const r = n.length, a = VS(n);\n for (let o = 0; o < r; o += 1)\n ac(a[o], this, t);\n }\n return !0;\n }\n};\njo.default = jS;\nvar FS = qe && qe.__importDefault || function(d) {\n return d && d.__esModule ? d : { default: d };\n};\nObject.defineProperty(hn, \"__esModule\", { value: !0 });\nhn.JsonRpcEngine = void 0;\nconst US = FS(jo), xt = Ro;\nclass ei extends US.default {\n constructor() {\n super(), this._middleware = [];\n }\n /**\n * Add a middleware function to the engine's middleware stack.\n *\n * @param middleware - The middleware function to add.\n */\n push(e) {\n this._middleware.push(e);\n }\n handle(e, t) {\n if (t && typeof t != \"function\")\n throw new Error('\"callback\" must be a function if provided.');\n return Array.isArray(e) ? t ? this._handleBatch(e, t) : this._handleBatch(e) : t ? this._handle(e, t) : this._promiseHandle(e);\n }\n /**\n * Returns this engine as a middleware function that can be pushed to other\n * engines.\n *\n * @returns This engine as a middleware function.\n */\n asMiddleware() {\n return async (e, t, i, s) => {\n try {\n const [n, r, a] = await ei._runAllMiddleware(e, t, this._middleware);\n return r ? (await ei._runReturnHandlers(a), s(n)) : i(async (o) => {\n try {\n await ei._runReturnHandlers(a);\n } catch (c) {\n return o(c);\n }\n return o();\n });\n } catch (n) {\n return s(n);\n }\n };\n }\n async _handleBatch(e, t) {\n try {\n const i = await Promise.all(\n // 1. Begin executing each request in the order received\n e.map(this._promiseHandle.bind(this))\n );\n return t ? t(null, i) : i;\n } catch (i) {\n if (t)\n return t(i);\n throw i;\n }\n }\n /**\n * A promise-wrapped _handle.\n */\n _promiseHandle(e) {\n return new Promise((t) => {\n this._handle(e, (i, s) => {\n t(s);\n });\n });\n }\n /**\n * Ensures that the request object is valid, processes it, and passes any\n * error and the response object to the given callback.\n *\n * Does not reject.\n */\n async _handle(e, t) {\n if (!e || Array.isArray(e) || typeof e != \"object\") {\n const r = new xt.EthereumRpcError(xt.errorCodes.rpc.invalidRequest, `Requests must be plain objects. Received: ${typeof e}`, { request: e });\n return t(r, { id: void 0, jsonrpc: \"2.0\", error: r });\n }\n if (typeof e.method != \"string\") {\n const r = new xt.EthereumRpcError(xt.errorCodes.rpc.invalidRequest, `Must specify a string method. Received: ${typeof e.method}`, { request: e });\n return t(r, { id: e.id, jsonrpc: \"2.0\", error: r });\n }\n const i = Object.assign({}, e), s = {\n id: i.id,\n jsonrpc: i.jsonrpc\n };\n let n = null;\n try {\n await this._processRequest(i, s);\n } catch (r) {\n n = r;\n }\n return n && (delete s.result, s.error || (s.error = xt.serializeError(n))), t(n, s);\n }\n /**\n * For the given request and response, runs all middleware and their return\n * handlers, if any, and ensures that internal request processing semantics\n * are satisfied.\n */\n async _processRequest(e, t) {\n const [i, s, n] = await ei._runAllMiddleware(e, t, this._middleware);\n if (ei._checkForCompletion(e, t, s), await ei._runReturnHandlers(n), i)\n throw i;\n }\n /**\n * Serially executes the given stack of middleware.\n *\n * @returns An array of any error encountered during middleware execution,\n * a boolean indicating whether the request was completed, and an array of\n * middleware-defined return handlers.\n */\n static async _runAllMiddleware(e, t, i) {\n const s = [];\n let n = null, r = !1;\n for (const a of i)\n if ([n, r] = await ei._runMiddleware(e, t, a, s), r)\n break;\n return [n, r, s.reverse()];\n }\n /**\n * Runs an individual middleware.\n *\n * @returns An array of any error encountered during middleware exection,\n * and a boolean indicating whether the request should end.\n */\n static _runMiddleware(e, t, i, s) {\n return new Promise((n) => {\n const r = (o) => {\n const c = o || t.error;\n c && (t.error = xt.serializeError(c)), n([c, !0]);\n }, a = (o) => {\n t.error ? r(t.error) : (o && (typeof o != \"function\" && r(new xt.EthereumRpcError(xt.errorCodes.rpc.internal, `JsonRpcEngine: \"next\" return handlers must be functions. Received \"${typeof o}\" for request:\n${fa(e)}`, { request: e })), s.push(o)), n([null, !1]));\n };\n try {\n i(e, t, a, r);\n } catch (o) {\n r(o);\n }\n });\n }\n /**\n * Serially executes array of return handlers. The request and response are\n * assumed to be in their scope.\n */\n static async _runReturnHandlers(e) {\n for (const t of e)\n await new Promise((i, s) => {\n t((n) => n ? s(n) : i());\n });\n }\n /**\n * Throws an error if the response has neither a result nor an error, or if\n * the \"isComplete\" flag is falsy.\n */\n static _checkForCompletion(e, t, i) {\n if (!(\"result\" in t) && !(\"error\" in t))\n throw new xt.EthereumRpcError(xt.errorCodes.rpc.internal, `JsonRpcEngine: Response has no error or result for request:\n${fa(e)}`, { request: e });\n if (!i)\n throw new xt.EthereumRpcError(xt.errorCodes.rpc.internal, `JsonRpcEngine: Nothing ended request:\n${fa(e)}`, { request: e });\n }\n}\nhn.JsonRpcEngine = ei;\nfunction fa(d) {\n return JSON.stringify(d, null, 2);\n}\nvar Nr = {};\nObject.defineProperty(Nr, \"__esModule\", { value: !0 });\nNr.mergeMiddleware = void 0;\nconst qS = hn;\nfunction GS(d) {\n const e = new qS.JsonRpcEngine();\n return d.forEach((t) => e.push(t)), e.asMiddleware();\n}\nNr.mergeMiddleware = GS;\n(function(d) {\n var e = qe && qe.__createBinding || (Object.create ? function(i, s, n, r) {\n r === void 0 && (r = n), Object.defineProperty(i, r, { enumerable: !0, get: function() {\n return s[n];\n } });\n } : function(i, s, n, r) {\n r === void 0 && (r = n), i[r] = s[n];\n }), t = qe && qe.__exportStar || function(i, s) {\n for (var n in i)\n n !== \"default\" && !Object.prototype.hasOwnProperty.call(s, n) && e(s, i, n);\n };\n Object.defineProperty(d, \"__esModule\", { value: !0 }), t(vr, d), t(kr, d), t(Er, d), t(fn, d), t(hn, d), t(Nr, d);\n})(NS);\nvar tn = {}, Fo = {}, za = { exports: {} }, zS = {}.toString, HS = Array.isArray || function(d) {\n return zS.call(d) == \"[object Array]\";\n}, vf = vs.EventEmitter, Ha = { exports: {} };\n(function(d, e) {\n var t = nn(), i = t.Buffer;\n function s(r, a) {\n for (var o in r)\n a[o] = r[o];\n }\n i.from && i.alloc && i.allocUnsafe && i.allocUnsafeSlow ? d.exports = t : (s(t, e), e.Buffer = n);\n function n(r, a, o) {\n return i(r, a, o);\n }\n s(i, n), n.from = function(r, a, o) {\n if (typeof r == \"number\")\n throw new TypeError(\"Argument must not be a number\");\n return i(r, a, o);\n }, n.alloc = function(r, a, o) {\n if (typeof r != \"number\")\n throw new TypeError(\"Argument must be a number\");\n var c = i(r);\n return a !== void 0 ? typeof o == \"string\" ? c.fill(a, o) : c.fill(a) : c.fill(0), c;\n }, n.allocUnsafe = function(r) {\n if (typeof r != \"number\")\n throw new TypeError(\"Argument must be a number\");\n return i(r);\n }, n.allocUnsafeSlow = function(r) {\n if (typeof r != \"number\")\n throw new TypeError(\"Argument must be a number\");\n return t.SlowBuffer(r);\n };\n})(Ha, Ha.exports);\nvar Uo = Ha.exports, ha = { exports: {} }, oc;\nfunction WS() {\n return oc || (oc = 1, function(d) {\n function e(n, r) {\n if (!(n instanceof r))\n throw new TypeError(\"Cannot call a class as a function\");\n }\n var t = Uo.Buffer, i = dn;\n function s(n, r, a) {\n n.copy(r, a);\n }\n d.exports = function() {\n function n() {\n e(this, n), this.head = null, this.tail = null, this.length = 0;\n }\n return n.prototype.push = function(a) {\n var o = { data: a, next: null };\n this.length > 0 ? this.tail.next = o : this.head = o, this.tail = o, ++this.length;\n }, n.prototype.unshift = function(a) {\n var o = { data: a, next: this.head };\n this.length === 0 && (this.tail = o), this.head = o, ++this.length;\n }, n.prototype.shift = function() {\n if (this.length !== 0) {\n var a = this.head.data;\n return this.length === 1 ? this.head = this.tail = null : this.head = this.head.next, --this.length, a;\n }\n }, n.prototype.clear = function() {\n this.head = this.tail = null, this.length = 0;\n }, n.prototype.join = function(a) {\n if (this.length === 0)\n return \"\";\n for (var o = this.head, c = \"\" + o.data; o = o.next; )\n c += a + o.data;\n return c;\n }, n.prototype.concat = function(a) {\n if (this.length === 0)\n return t.alloc(0);\n for (var o = t.allocUnsafe(a >>> 0), c = this.head, u = 0; c; )\n s(c.data, o, u), u += c.data.length, c = c.next;\n return o;\n }, n;\n }(), i && i.inspect && i.inspect.custom && (d.exports.prototype[i.inspect.custom] = function() {\n var n = i.inspect({ length: this.length });\n return this.constructor.name + \" \" + n;\n });\n }(ha)), ha.exports;\n}\nvar Nn = Vi;\nfunction YS(d, e) {\n var t = this, i = this._readableState && this._readableState.destroyed, s = this._writableState && this._writableState.destroyed;\n return i || s ? (e ? e(d) : d && (this._writableState ? this._writableState.errorEmitted || (this._writableState.errorEmitted = !0, Nn.nextTick(Pn, this, d)) : Nn.nextTick(Pn, this, d)), this) : (this._readableState && (this._readableState.destroyed = !0), this._writableState && (this._writableState.destroyed = !0), this._destroy(d || null, function(n) {\n !e && n ? t._writableState ? t._writableState.errorEmitted || (t._writableState.errorEmitted = !0, Nn.nextTick(Pn, t, n)) : Nn.nextTick(Pn, t, n) : e && e(n);\n }), this);\n}\nfunction KS() {\n this._readableState && (this._readableState.destroyed = !1, this._readableState.reading = !1, this._readableState.ended = !1, this._readableState.endEmitted = !1), this._writableState && (this._writableState.destroyed = !1, this._writableState.ended = !1, this._writableState.ending = !1, this._writableState.finalCalled = !1, this._writableState.prefinished = !1, this._writableState.finished = !1, this._writableState.errorEmitted = !1);\n}\nfunction Pn(d, e) {\n d.emit(\"error\", e);\n}\nvar kf = {\n destroy: YS,\n undestroy: KS\n}, la, dc;\nfunction Ef() {\n if (dc)\n return la;\n dc = 1;\n var d = Vi;\n la = m;\n function e(E) {\n var N = this;\n this.next = null, this.entry = null, this.finish = function() {\n te(N, E);\n };\n }\n var t = !Ce.browser && [\"v0.10\", \"v0.9.\"].indexOf(Ce.version.slice(0, 5)) > -1 ? setImmediate : d.nextTick, i;\n m.WritableState = l;\n var s = Object.create(Fe);\n s.inherits = jt;\n var n = {\n deprecate: rf\n }, r = vf, a = Uo.Buffer, o = (typeof qe < \"u\" ? qe : typeof window < \"u\" ? window : typeof self < \"u\" ? self : {}).Uint8Array || function() {\n };\n function c(E) {\n return a.from(E);\n }\n function u(E) {\n return a.isBuffer(E) || E instanceof o;\n }\n var f = kf;\n s.inherits(m, r);\n function h() {\n }\n function l(E, N) {\n i = i || Is(), E = E || {};\n var L = N instanceof i;\n this.objectMode = !!E.objectMode, L && (this.objectMode = this.objectMode || !!E.writableObjectMode);\n var z = E.highWaterMark, K = E.writableHighWaterMark, R = this.objectMode ? 16 : 16 * 1024;\n z || z === 0 ? this.highWaterMark = z : L && (K || K === 0) ? this.highWaterMark = K : this.highWaterMark = R, this.highWaterMark = Math.floor(this.highWaterMark), this.finalCalled = !1, this.needDrain = !1, this.ending = !1, this.ended = !1, this.finished = !1, this.destroyed = !1;\n var U = E.decodeStrings === !1;\n this.decodeStrings = !U, this.defaultEncoding = E.defaultEncoding || \"utf8\", this.length = 0, this.writing = !1, this.corked = 0, this.sync = !0, this.bufferProcessing = !1, this.onwrite = function(Y) {\n _(N, Y);\n }, this.writecb = null, this.writelen = 0, this.bufferedRequest = null, this.lastBufferedRequest = null, this.pendingcb = 0, this.prefinished = !1, this.errorEmitted = !1, this.bufferedRequestCount = 0, this.corkedRequestsFree = new e(this);\n }\n l.prototype.getBuffer = function() {\n for (var N = this.bufferedRequest, L = []; N; )\n L.push(N), N = N.next;\n return L;\n }, function() {\n try {\n Object.defineProperty(l.prototype, \"buffer\", {\n get: n.deprecate(function() {\n return this.getBuffer();\n }, \"_writableState.buffer is deprecated. Use _writableState.getBuffer instead.\", \"DEP0003\")\n });\n } catch {\n }\n }();\n var p;\n typeof Symbol == \"function\" && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] == \"function\" ? (p = Function.prototype[Symbol.hasInstance], Object.defineProperty(m, Symbol.hasInstance, {\n value: function(E) {\n return p.call(this, E) ? !0 : this !== m ? !1 : E && E._writableState instanceof l;\n }\n })) : p = function(E) {\n return E instanceof this;\n };\n function m(E) {\n if (i = i || Is(), !p.call(m, this) && !(this instanceof i))\n return new m(E);\n this._writableState = new l(E, this), this.writable = !0, E && (typeof E.write == \"function\" && (this._write = E.write), typeof E.writev == \"function\" && (this._writev = E.writev), typeof E.destroy == \"function\" && (this._destroy = E.destroy), typeof E.final == \"function\" && (this._final = E.final)), r.call(this);\n }\n m.prototype.pipe = function() {\n this.emit(\"error\", new Error(\"Cannot pipe, not readable\"));\n };\n function y(E, N) {\n var L = new Error(\"write after end\");\n E.emit(\"error\", L), d.nextTick(N, L);\n }\n function w(E, N, L, z) {\n var K = !0, R = !1;\n return L === null ? R = new TypeError(\"May not write null values to stream\") : typeof L != \"string\" && L !== void 0 && !N.objectMode && (R = new TypeError(\"Invalid non-string/buffer chunk\")), R && (E.emit(\"error\", R), d.nextTick(z, R), K = !1), K;\n }\n m.prototype.write = function(E, N, L) {\n var z = this._writableState, K = !1, R = !z.objectMode && u(E);\n return R && !a.isBuffer(E) && (E = c(E)), typeof N == \"function\" && (L = N, N = null), R ? N = \"buffer\" : N || (N = z.defaultEncoding), typeof L != \"function\" && (L = h), z.ended ? y(this, L) : (R || w(this, z, E, L)) && (z.pendingcb++, K = b(this, z, R, E, N, L)), K;\n }, m.prototype.cork = function() {\n var E = this._writableState;\n E.corked++;\n }, m.prototype.uncork = function() {\n var E = this._writableState;\n E.corked && (E.corked--, !E.writing && !E.corked && !E.bufferProcessing && E.bufferedRequest && G(this, E));\n }, m.prototype.setDefaultEncoding = function(N) {\n if (typeof N == \"string\" && (N = N.toLowerCase()), !([\"hex\", \"utf8\", \"utf-8\", \"ascii\", \"binary\", \"base64\", \"ucs2\", \"ucs-2\", \"utf16le\", \"utf-16le\", \"raw\"].indexOf((N + \"\").toLowerCase()) > -1))\n throw new TypeError(\"Unknown encoding: \" + N);\n return this._writableState.defaultEncoding = N, this;\n };\n function S(E, N, L) {\n return !E.objectMode && E.decodeStrings !== !1 && typeof N == \"string\" && (N = a.from(N, L)), N;\n }\n Object.defineProperty(m.prototype, \"writableHighWaterMark\", {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: !1,\n get: function() {\n return this._writableState.highWaterMark;\n }\n });\n function b(E, N, L, z, K, R) {\n if (!L) {\n var U = S(N, z, K);\n z !== U && (L = !0, K = \"buffer\", z = U);\n }\n var Y = N.objectMode ? 1 : z.length;\n N.length += Y;\n var J = N.length < N.highWaterMark;\n if (J || (N.needDrain = !0), N.writing || N.corked) {\n var ae = N.lastBufferedRequest;\n N.lastBufferedRequest = {\n chunk: z,\n encoding: K,\n isBuf: L,\n callback: R,\n next: null\n }, ae ? ae.next = N.lastBufferedRequest : N.bufferedRequest = N.lastBufferedRequest, N.bufferedRequestCount += 1;\n } else\n T(E, N, !1, Y, z, K, R);\n return J;\n }\n function T(E, N, L, z, K, R, U) {\n N.writelen = z, N.writecb = U, N.writing = !0, N.sync = !0, L ? E._writev(K, N.onwrite) : E._write(K, R, N.onwrite), N.sync = !1;\n }\n function x(E, N, L, z, K) {\n --N.pendingcb, L ? (d.nextTick(K, z), d.nextTick(se, E, N), E._writableState.errorEmitted = !0, E.emit(\"error\", z)) : (K(z), E._writableState.errorEmitted = !0, E.emit(\"error\", z), se(E, N));\n }\n function v(E) {\n E.writing = !1, E.writecb = null, E.length -= E.writelen, E.writelen = 0;\n }\n function _(E, N) {\n var L = E._writableState, z = L.sync, K = L.writecb;\n if (v(L), N)\n x(E, L, z, N, K);\n else {\n var R = W(L);\n !R && !L.corked && !L.bufferProcessing && L.bufferedRequest && G(E, L), z ? t(V, E, L, R, K) : V(E, L, R, K);\n }\n }\n function V(E, N, L, z) {\n L || j(E, N), N.pendingcb--, z(), se(E, N);\n }\n function j(E, N) {\n N.length === 0 && N.needDrain && (N.needDrain = !1, E.emit(\"drain\"));\n }\n function G(E, N) {\n N.bufferProcessing = !0;\n var L = N.bufferedRequest;\n if (E._writev && L && L.next) {\n var z = N.bufferedRequestCount, K = new Array(z), R = N.corkedRequestsFree;\n R.entry = L;\n for (var U = 0, Y = !0; L; )\n K[U] = L, L.isBuf || (Y = !1), L = L.next, U += 1;\n K.allBuffers = Y, T(E, N, !0, N.length, K, \"\", R.finish), N.pendingcb++, N.lastBufferedRequest = null, R.next ? (N.corkedRequestsFree = R.next, R.next = null) : N.corkedRequestsFree = new e(N), N.bufferedRequestCount = 0;\n } else {\n for (; L; ) {\n var J = L.chunk, ae = L.encoding, A = L.callback, M = N.objectMode ? 1 : J.length;\n if (T(E, N, !1, M, J, ae, A), L = L.next, N.bufferedRequestCount--, N.writing)\n break;\n }\n L === null && (N.lastBufferedRequest = null);\n }\n N.bufferedRequest = L, N.bufferProcessing = !1;\n }\n m.prototype._write = function(E, N, L) {\n L(new Error(\"_write() is not implemented\"));\n }, m.prototype._writev = null, m.prototype.end = function(E, N, L) {\n var z = this._writableState;\n typeof E == \"function\" ? (L = E, E = null, N = null) : typeof N == \"function\" && (L = N, N = null), E != null && this.write(E, N), z.corked && (z.corked = 1, this.uncork()), z.ending || $(this, z, L);\n };\n function W(E) {\n return E.ending && E.length === 0 && E.bufferedRequest === null && !E.finished && !E.writing;\n }\n function B(E, N) {\n E._final(function(L) {\n N.pendingcb--, L && E.emit(\"error\", L), N.prefinished = !0, E.emit(\"prefinish\"), se(E, N);\n });\n }\n function Q(E, N) {\n !N.prefinished && !N.finalCalled && (typeof E._final == \"function\" ? (N.pendingcb++, N.finalCalled = !0, d.nextTick(B, E, N)) : (N.prefinished = !0, E.emit(\"prefinish\")));\n }\n function se(E, N) {\n var L = W(N);\n return L && (Q(E, N), N.pendingcb === 0 && (N.finished = !0, E.emit(\"finish\"))), L;\n }\n function $(E, N, L) {\n N.ending = !0, se(E, N), L && (N.finished ? d.nextTick(L) : E.once(\"finish\", L)), N.ended = !0, E.writable = !1;\n }\n function te(E, N, L) {\n var z = E.entry;\n for (E.entry = null; z; ) {\n var K = z.callback;\n N.pendingcb--, K(L), z = z.next;\n }\n N.corkedRequestsFree.next = E;\n }\n return Object.defineProperty(m.prototype, \"destroyed\", {\n get: function() {\n return this._writableState === void 0 ? !1 : this._writableState.destroyed;\n },\n set: function(E) {\n this._writableState && (this._writableState.destroyed = E);\n }\n }), m.prototype.destroy = f.destroy, m.prototype._undestroy = f.undestroy, m.prototype._destroy = function(E, N) {\n this.end(), N(E);\n }, la;\n}\nvar pa, cc;\nfunction Is() {\n if (cc)\n return pa;\n cc = 1;\n var d = Vi, e = Object.keys || function(f) {\n var h = [];\n for (var l in f)\n h.push(l);\n return h;\n };\n pa = o;\n var t = Object.create(Fe);\n t.inherits = jt;\n var i = Nf(), s = Ef();\n t.inherits(o, i);\n for (var n = e(s.prototype), r = 0; r < n.length; r++) {\n var a = n[r];\n o.prototype[a] || (o.prototype[a] = s.prototype[a]);\n }\n function o(f) {\n if (!(this instanceof o))\n return new o(f);\n i.call(this, f), s.call(this, f), f && f.readable === !1 && (this.readable = !1), f && f.writable === !1 && (this.writable = !1), this.allowHalfOpen = !0, f && f.allowHalfOpen === !1 && (this.allowHalfOpen = !1), this.once(\"end\", c);\n }\n Object.defineProperty(o.prototype, \"writableHighWaterMark\", {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: !1,\n get: function() {\n return this._writableState.highWaterMark;\n }\n });\n function c() {\n this.allowHalfOpen || this._writableState.ended || d.nextTick(u, this);\n }\n function u(f) {\n f.end();\n }\n return Object.defineProperty(o.prototype, \"destroyed\", {\n get: function() {\n return this._readableState === void 0 || this._writableState === void 0 ? !1 : this._readableState.destroyed && this._writableState.destroyed;\n },\n set: function(f) {\n this._readableState === void 0 || this._writableState === void 0 || (this._readableState.destroyed = f, this._writableState.destroyed = f);\n }\n }), o.prototype._destroy = function(f, h) {\n this.push(null), this.end(), d.nextTick(h, f);\n }, pa;\n}\nvar ga, uc;\nfunction Nf() {\n if (uc)\n return ga;\n uc = 1;\n var d = Vi;\n ga = S;\n var e = HS, t;\n S.ReadableState = w, vs.EventEmitter;\n var i = function(A, M) {\n return A.listeners(M).length;\n }, s = vf, n = Uo.Buffer, r = (typeof qe < \"u\" ? qe : typeof window < \"u\" ? window : typeof self < \"u\" ? self : {}).Uint8Array || function() {\n };\n function a(A) {\n return n.from(A);\n }\n function o(A) {\n return n.isBuffer(A) || A instanceof r;\n }\n var c = Object.create(Fe);\n c.inherits = jt;\n var u = dn, f = void 0;\n u && u.debuglog ? f = u.debuglog(\"stream\") : f = function() {\n };\n var h = WS(), l = kf, p;\n c.inherits(S, s);\n var m = [\"error\", \"close\", \"destroy\", \"pause\", \"resume\"];\n function y(A, M, q) {\n if (typeof A.prependListener == \"function\")\n return A.prependListener(M, q);\n !A._events || !A._events[M] ? A.on(M, q) : e(A._events[M]) ? A._events[M].unshift(q) : A._events[M] = [q, A._events[M]];\n }\n function w(A, M) {\n t = t || Is(), A = A || {};\n var q = M instanceof t;\n this.objectMode = !!A.objectMode, q && (this.objectMode = this.objectMode || !!A.readableObjectMode);\n var H = A.highWaterMark, le = A.readableHighWaterMark, oe = this.objectMode ? 16 : 16 * 1024;\n H || H === 0 ? this.highWaterMark = H : q && (le || le === 0) ? this.highWaterMark = le : this.highWaterMark = oe, this.highWaterMark = Math.floor(this.highWaterMark), this.buffer = new h(), this.length = 0, this.pipes = null, this.pipesCount = 0, this.flowing = null, this.ended = !1, this.endEmitted = !1, this.reading = !1, this.sync = !0, this.needReadable = !1, this.emittedReadable = !1, this.readableListening = !1, this.resumeScheduled = !1, this.destroyed = !1, this.defaultEncoding = A.defaultEncoding || \"utf8\", this.awaitDrain = 0, this.readingMore = !1, this.decoder = null, this.encoding = null, A.encoding && (p || (p = sr().StringDecoder), this.decoder = new p(A.encoding), this.encoding = A.encoding);\n }\n function S(A) {\n if (t = t || Is(), !(this instanceof S))\n return new S(A);\n this._readableState = new w(A, this), this.readable = !0, A && (typeof A.read == \"function\" && (this._read = A.read), typeof A.destroy == \"function\" && (this._destroy = A.destroy)), s.call(this);\n }\n Object.defineProperty(S.prototype, \"destroyed\", {\n get: function() {\n return this._readableState === void 0 ? !1 : this._readableState.destroyed;\n },\n set: function(A) {\n this._readableState && (this._readableState.destroyed = A);\n }\n }), S.prototype.destroy = l.destroy, S.prototype._undestroy = l.undestroy, S.prototype._destroy = function(A, M) {\n this.push(null), M(A);\n }, S.prototype.push = function(A, M) {\n var q = this._readableState, H;\n return q.objectMode ? H = !0 : typeof A == \"string\" && (M = M || q.defaultEncoding, M !== q.encoding && (A = n.from(A, M), M = \"\"), H = !0), b(this, A, M, !1, H);\n }, S.prototype.unshift = function(A) {\n return b(this, A, null, !0, !1);\n };\n function b(A, M, q, H, le) {\n var oe = A._readableState;\n if (M === null)\n oe.reading = !1, G(A, oe);\n else {\n var he;\n le || (he = x(oe, M)), he ? A.emit(\"error\", he) : oe.objectMode || M && M.length > 0 ? (typeof M != \"string\" && !oe.objectMode && Object.getPrototypeOf(M) !== n.prototype && (M = a(M)), H ? oe.endEmitted ? A.emit(\"error\", new Error(\"stream.unshift() after end event\")) : T(A, oe, M, !0) : oe.ended ? A.emit(\"error\", new Error(\"stream.push() after EOF\")) : (oe.reading = !1, oe.decoder && !q ? (M = oe.decoder.write(M), oe.objectMode || M.length !== 0 ? T(A, oe, M, !1) : Q(A, oe)) : T(A, oe, M, !1))) : H || (oe.reading = !1);\n }\n return v(oe);\n }\n function T(A, M, q, H) {\n M.flowing && M.length === 0 && !M.sync ? (A.emit(\"data\", q), A.read(0)) : (M.length += M.objectMode ? 1 : q.length, H ? M.buffer.unshift(q) : M.buffer.push(q), M.needReadable && W(A)), Q(A, M);\n }\n function x(A, M) {\n var q;\n return !o(M) && typeof M != \"string\" && M !== void 0 && !A.objectMode && (q = new TypeError(\"Invalid non-string/buffer chunk\")), q;\n }\n function v(A) {\n return !A.ended && (A.needReadable || A.length < A.highWaterMark || A.length === 0);\n }\n S.prototype.isPaused = function() {\n return this._readableState.flowing === !1;\n }, S.prototype.setEncoding = function(A) {\n return p || (p = sr().StringDecoder), this._readableState.decoder = new p(A), this._readableState.encoding = A, this;\n };\n var _ = 8388608;\n function V(A) {\n return A >= _ ? A = _ : (A--, A |= A >>> 1, A |= A >>> 2, A |= A >>> 4, A |= A >>> 8, A |= A >>> 16, A++), A;\n }\n function j(A, M) {\n return A <= 0 || M.length === 0 && M.ended ? 0 : M.objectMode ? 1 : A !== A ? M.flowing && M.length ? M.buffer.head.data.length : M.length : (A > M.highWaterMark && (M.highWaterMark = V(A)), A <= M.length ? A : M.ended ? M.length : (M.needReadable = !0, 0));\n }\n S.prototype.read = function(A) {\n f(\"read\", A), A = parseInt(A, 10);\n var M = this._readableState, q = A;\n if (A !== 0 && (M.emittedReadable = !1), A === 0 && M.needReadable && (M.length >= M.highWaterMark || M.ended))\n return f(\"read: emitReadable\", M.length, M.ended), M.length === 0 && M.ended ? Y(this) : W(this), null;\n if (A = j(A, M), A === 0 && M.ended)\n return M.length === 0 && Y(this), null;\n var H = M.needReadable;\n f(\"need readable\", H), (M.length === 0 || M.length - A < M.highWaterMark) && (H = !0, f(\"length less than watermark\", H)), M.ended || M.reading ? (H = !1, f(\"reading or ended\", H)) : H && (f(\"do read\"), M.reading = !0, M.sync = !0, M.length === 0 && (M.needReadable = !0), this._read(M.highWaterMark), M.sync = !1, M.reading || (A = j(q, M)));\n var le;\n return A > 0 ? le = z(A, M) : le = null, le === null ? (M.needReadable = !0, A = 0) : M.length -= A, M.length === 0 && (M.ended || (M.needReadable = !0), q !== A && M.ended && Y(this)), le !== null && this.emit(\"data\", le), le;\n };\n function G(A, M) {\n if (!M.ended) {\n if (M.decoder) {\n var q = M.decoder.end();\n q && q.length && (M.buffer.push(q), M.length += M.objectMode ? 1 : q.length);\n }\n M.ended = !0, W(A);\n }\n }\n function W(A) {\n var M = A._readableState;\n M.needReadable = !1, M.emittedReadable || (f(\"emitReadable\", M.flowing), M.emittedReadable = !0, M.sync ? d.nextTick(B, A) : B(A));\n }\n function B(A) {\n f(\"emit readable\"), A.emit(\"readable\"), L(A);\n }\n function Q(A, M) {\n M.readingMore || (M.readingMore = !0, d.nextTick(se, A, M));\n }\n function se(A, M) {\n for (var q = M.length; !M.reading && !M.flowing && !M.ended && M.length < M.highWaterMark && (f(\"maybeReadMore read 0\"), A.read(0), q !== M.length); )\n q = M.length;\n M.readingMore = !1;\n }\n S.prototype._read = function(A) {\n this.emit(\"error\", new Error(\"_read() is not implemented\"));\n }, S.prototype.pipe = function(A, M) {\n var q = this, H = this._readableState;\n switch (H.pipesCount) {\n case 0:\n H.pipes = A;\n break;\n case 1:\n H.pipes = [H.pipes, A];\n break;\n default:\n H.pipes.push(A);\n break;\n }\n H.pipesCount += 1, f(\"pipe count=%d opts=%j\", H.pipesCount, M);\n var le = (!M || M.end !== !1) && A !== Ce.stdout && A !== Ce.stderr, oe = le ? Ie : De;\n H.endEmitted ? d.nextTick(oe) : q.once(\"end\", oe), A.on(\"unpipe\", he);\n function he(Je, nt) {\n f(\"onunpipe\"), Je === q && nt && nt.hasUnpiped === !1 && (nt.hasUnpiped = !0, bt());\n }\n function Ie() {\n f(\"onend\"), A.end();\n }\n var Pe = $(q);\n A.on(\"drain\", Pe);\n var He = !1;\n function bt() {\n f(\"cleanup\"), A.removeListener(\"close\", Ot), A.removeListener(\"finish\", Le), A.removeListener(\"drain\", Pe), A.removeListener(\"error\", Tt), A.removeListener(\"unpipe\", he), q.removeListener(\"end\", Ie), q.removeListener(\"end\", De), q.removeListener(\"data\", ue), He = !0, H.awaitDrain && (!A._writableState || A._writableState.needDrain) && Pe();\n }\n var mt = !1;\n q.on(\"data\", ue);\n function ue(Je) {\n f(\"ondata\"), mt = !1;\n var nt = A.write(Je);\n nt === !1 && !mt && ((H.pipesCount === 1 && H.pipes === A || H.pipesCount > 1 && ae(H.pipes, A) !== -1) && !He && (f(\"false write response, pause\", H.awaitDrain), H.awaitDrain++, mt = !0), q.pause());\n }\n function Tt(Je) {\n f(\"onerror\", Je), De(), A.removeListener(\"error\", Tt), i(A, \"error\") === 0 && A.emit(\"error\", Je);\n }\n y(A, \"error\", Tt);\n function Ot() {\n A.removeListener(\"finish\", Le), De();\n }\n A.once(\"close\", Ot);\n function Le() {\n f(\"onfinish\"), A.removeListener(\"close\", Ot), De();\n }\n A.once(\"finish\", Le);\n function De() {\n f(\"unpipe\"), q.unpipe(A);\n }\n return A.emit(\"pipe\", q), H.flowing || (f(\"pipe resume\"), q.resume()), A;\n };\n function $(A) {\n return function() {\n var M = A._readableState;\n f(\"pipeOnDrain\", M.awaitDrain), M.awaitDrain && M.awaitDrain--, M.awaitDrain === 0 && i(A, \"data\") && (M.flowing = !0, L(A));\n };\n }\n S.prototype.unpipe = function(A) {\n var M = this._readableState, q = { hasUnpiped: !1 };\n if (M.pipesCount === 0)\n return this;\n if (M.pipesCount === 1)\n return A && A !== M.pipes ? this : (A || (A = M.pipes), M.pipes = null, M.pipesCount = 0, M.flowing = !1, A && A.emit(\"unpipe\", this, q), this);\n if (!A) {\n var H = M.pipes, le = M.pipesCount;\n M.pipes = null, M.pipesCount = 0, M.flowing = !1;\n for (var oe = 0; oe < le; oe++)\n H[oe].emit(\"unpipe\", this, { hasUnpiped: !1 });\n return this;\n }\n var he = ae(M.pipes, A);\n return he === -1 ? this : (M.pipes.splice(he, 1), M.pipesCount -= 1, M.pipesCount === 1 && (M.pipes = M.pipes[0]), A.emit(\"unpipe\", this, q), this);\n }, S.prototype.on = function(A, M) {\n var q = s.prototype.on.call(this, A, M);\n if (A === \"data\")\n this._readableState.flowing !== !1 && this.resume();\n else if (A === \"readable\") {\n var H = this._readableState;\n !H.endEmitted && !H.readableListening && (H.readableListening = H.needReadable = !0, H.emittedReadable = !1, H.reading ? H.length && W(this) : d.nextTick(te, this));\n }\n return q;\n }, S.prototype.addListener = S.prototype.on;\n function te(A) {\n f(\"readable nexttick read 0\"), A.read(0);\n }\n S.prototype.resume = function() {\n var A = this._readableState;\n return A.flowing || (f(\"resume\"), A.flowing = !0, E(this, A)), this;\n };\n function E(A, M) {\n M.resumeScheduled || (M.resumeScheduled = !0, d.nextTick(N, A, M));\n }\n function N(A, M) {\n M.reading || (f(\"resume read 0\"), A.read(0)), M.resumeScheduled = !1, M.awaitDrain = 0, A.emit(\"resume\"), L(A), M.flowing && !M.reading && A.read(0);\n }\n S.prototype.pause = function() {\n return f(\"call pause flowing=%j\", this._readableState.flowing), this._readableState.flowing !== !1 && (f(\"pause\"), this._readableState.flowing = !1, this.emit(\"pause\")), this;\n };\n function L(A) {\n var M = A._readableState;\n for (f(\"flow\", M.flowing); M.flowing && A.read() !== null; )\n ;\n }\n S.prototype.wrap = function(A) {\n var M = this, q = this._readableState, H = !1;\n A.on(\"end\", function() {\n if (f(\"wrapped end\"), q.decoder && !q.ended) {\n var he = q.decoder.end();\n he && he.length && M.push(he);\n }\n M.push(null);\n }), A.on(\"data\", function(he) {\n if (f(\"wrapped data\"), q.decoder && (he = q.decoder.write(he)), !(q.objectMode && he == null) && !(!q.objectMode && (!he || !he.length))) {\n var Ie = M.push(he);\n Ie || (H = !0, A.pause());\n }\n });\n for (var le in A)\n this[le] === void 0 && typeof A[le] == \"function\" && (this[le] = function(he) {\n return function() {\n return A[he].apply(A, arguments);\n };\n }(le));\n for (var oe = 0; oe < m.length; oe++)\n A.on(m[oe], this.emit.bind(this, m[oe]));\n return this._read = function(he) {\n f(\"wrapped _read\", he), H && (H = !1, A.resume());\n }, this;\n }, Object.defineProperty(S.prototype, \"readableHighWaterMark\", {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: !1,\n get: function() {\n return this._readableState.highWaterMark;\n }\n }), S._fromList = z;\n function z(A, M) {\n if (M.length === 0)\n return null;\n var q;\n return M.objectMode ? q = M.buffer.shift() : !A || A >= M.length ? (M.decoder ? q = M.buffer.join(\"\") : M.buffer.length === 1 ? q = M.buffer.head.data : q = M.buffer.concat(M.length), M.buffer.clear()) : q = K(A, M.buffer, M.decoder), q;\n }\n function K(A, M, q) {\n var H;\n return A < M.head.data.length ? (H = M.head.data.slice(0, A), M.head.data = M.head.data.slice(A)) : A === M.head.data.length ? H = M.shift() : H = q ? R(A, M) : U(A, M), H;\n }\n function R(A, M) {\n var q = M.head, H = 1, le = q.data;\n for (A -= le.length; q = q.next; ) {\n var oe = q.data, he = A > oe.length ? oe.length : A;\n if (he === oe.length ? le += oe : le += oe.slice(0, A), A -= he, A === 0) {\n he === oe.length ? (++H, q.next ? M.head = q.next : M.head = M.tail = null) : (M.head = q, q.data = oe.slice(he));\n break;\n }\n ++H;\n }\n return M.length -= H, le;\n }\n function U(A, M) {\n var q = n.allocUnsafe(A), H = M.head, le = 1;\n for (H.data.copy(q), A -= H.data.length; H = H.next; ) {\n var oe = H.data, he = A > oe.length ? oe.length : A;\n if (oe.copy(q, q.length - A, 0, he), A -= he, A === 0) {\n he === oe.length ? (++le, H.next ? M.head = H.next : M.head = M.tail = null) : (M.head = H, H.data = oe.slice(he));\n break;\n }\n ++le;\n }\n return M.length -= le, q;\n }\n function Y(A) {\n var M = A._readableState;\n if (M.length > 0)\n throw new Error('\"endReadable()\" called on non-empty stream');\n M.endEmitted || (M.ended = !0, d.nextTick(J, M, A));\n }\n function J(A, M) {\n !A.endEmitted && A.length === 0 && (A.endEmitted = !0, M.readable = !1, M.emit(\"end\"));\n }\n function ae(A, M) {\n for (var q = 0, H = A.length; q < H; q++)\n if (A[q] === M)\n return q;\n return -1;\n }\n return ga;\n}\nvar Pf = di, Pr = Is(), _f = Object.create(Fe);\n_f.inherits = jt;\n_f.inherits(di, Pr);\nfunction XS(d, e) {\n var t = this._transformState;\n t.transforming = !1;\n var i = t.writecb;\n if (!i)\n return this.emit(\"error\", new Error(\"write callback called multiple times\"));\n t.writechunk = null, t.writecb = null, e != null && this.push(e), i(d);\n var s = this._readableState;\n s.reading = !1, (s.needReadable || s.length < s.highWaterMark) && this._read(s.highWaterMark);\n}\nfunction di(d) {\n if (!(this instanceof di))\n return new di(d);\n Pr.call(this, d), this._transformState = {\n afterTransform: XS.bind(this),\n needTransform: !1,\n transforming: !1,\n writecb: null,\n writechunk: null,\n writeencoding: null\n }, this._readableState.needReadable = !0, this._readableState.sync = !1, d && (typeof d.transform == \"function\" && (this._transform = d.transform), typeof d.flush == \"function\" && (this._flush = d.flush)), this.on(\"prefinish\", $S);\n}\nfunction $S() {\n var d = this;\n typeof this._flush == \"function\" ? this._flush(function(e, t) {\n fc(d, e, t);\n }) : fc(this, null, null);\n}\ndi.prototype.push = function(d, e) {\n return this._transformState.needTransform = !1, Pr.prototype.push.call(this, d, e);\n};\ndi.prototype._transform = function(d, e, t) {\n throw new Error(\"_transform() is not implemented\");\n};\ndi.prototype._write = function(d, e, t) {\n var i = this._transformState;\n if (i.writecb = t, i.writechunk = d, i.writeencoding = e, !i.transforming) {\n var s = this._readableState;\n (i.needTransform || s.needReadable || s.length < s.highWaterMark) && this._read(s.highWaterMark);\n }\n};\ndi.prototype._read = function(d) {\n var e = this._transformState;\n e.writechunk !== null && e.writecb && !e.transforming ? (e.transforming = !0, this._transform(e.writechunk, e.writeencoding, e.afterTransform)) : e.needTransform = !0;\n};\ndi.prototype._destroy = function(d, e) {\n var t = this;\n Pr.prototype._destroy.call(this, d, function(i) {\n e(i), t.emit(\"close\");\n });\n};\nfunction fc(d, e, t) {\n if (e)\n return d.emit(\"error\", e);\n if (t != null && d.push(t), d._writableState.length)\n throw new Error(\"Calling transform done when ws.length != 0\");\n if (d._transformState.transforming)\n throw new Error(\"Calling transform done when still transforming\");\n return d.push(null);\n}\nvar ZS = sn, Lf = Pf, Df = Object.create(Fe);\nDf.inherits = jt;\nDf.inherits(sn, Lf);\nfunction sn(d) {\n if (!(this instanceof sn))\n return new sn(d);\n Lf.call(this, d);\n}\nsn.prototype._transform = function(d, e, t) {\n t(null, d);\n};\n(function(d, e) {\n e = d.exports = Nf(), e.Stream = e, e.Readable = e, e.Writable = Ef(), e.Duplex = Is(), e.Transform = Pf, e.PassThrough = ZS;\n})(za, za.exports);\nvar Rf = za.exports;\nObject.defineProperty(Fo, \"__esModule\", { value: !0 });\nconst QS = Rf;\nfunction JS(d) {\n if (!d || !d.engine)\n throw new Error(\"Missing engine parameter!\");\n const { engine: e } = d, t = new QS.Duplex({ objectMode: !0, read: i, write: s });\n return e.on && e.on(\"notification\", (n) => {\n t.push(n);\n }), t;\n function i() {\n }\n function s(n, r, a) {\n e.handle(n, (o, c) => {\n t.push(c);\n }), a();\n }\n}\nFo.default = JS;\nvar qo = {}, Go = {};\nObject.defineProperty(Go, \"__esModule\", { value: !0 });\nconst eT = vs;\nfunction hc(d, e, t) {\n try {\n Reflect.apply(d, e, t);\n } catch (i) {\n setTimeout(() => {\n throw i;\n });\n }\n}\nfunction tT(d) {\n const e = d.length, t = new Array(e);\n for (let i = 0; i < e; i += 1)\n t[i] = d[i];\n return t;\n}\nclass iT extends eT.EventEmitter {\n emit(e, ...t) {\n let i = e === \"error\";\n const s = this._events;\n if (s !== void 0)\n i = i && s.error === void 0;\n else if (!i)\n return !1;\n if (i) {\n let r;\n if (t.length > 0 && ([r] = t), r instanceof Error)\n throw r;\n const a = new Error(`Unhandled error.${r ? ` (${r.message})` : \"\"}`);\n throw a.context = r, a;\n }\n const n = s[e];\n if (n === void 0)\n return !1;\n if (typeof n == \"function\")\n hc(n, this, t);\n else {\n const r = n.length, a = tT(n);\n for (let o = 0; o < r; o += 1)\n hc(a[o], this, t);\n }\n return !0;\n }\n}\nGo.default = iT;\nvar sT = qe && qe.__importDefault || function(d) {\n return d && d.__esModule ? d : { default: d };\n};\nObject.defineProperty(qo, \"__esModule\", { value: !0 });\nconst nT = sT(Go), rT = Rf;\nfunction aT() {\n const d = {}, e = new rT.Duplex({\n objectMode: !0,\n read: s,\n write: n\n }), t = new nT.default();\n return { events: t, middleware: (o, c, u, f) => {\n e.push(o), d[o.id] = { req: o, res: c, next: u, end: f };\n }, stream: e };\n function s() {\n return !1;\n }\n function n(o, c, u) {\n let f;\n try {\n !o.id ? a(o) : r(o);\n } catch (h) {\n f = h;\n }\n u(f);\n }\n function r(o) {\n const c = d[o.id];\n if (!c)\n throw new Error(`StreamMiddleware - Unknown response id \"${o.id}\"`);\n delete d[o.id], Object.assign(c.res, o), setTimeout(c.end);\n }\n function a(o) {\n t.emit(\"notification\", o);\n }\n}\nqo.default = aT;\nvar Bf = qe && qe.__importDefault || function(d) {\n return d && d.__esModule ? d : { default: d };\n};\nObject.defineProperty(tn, \"__esModule\", { value: !0 });\ntn.createStreamMiddleware = tn.createEngineStream = void 0;\nconst oT = Bf(Fo);\ntn.createEngineStream = oT.default;\nconst dT = Bf(qo);\ntn.createStreamMiddleware = dT.default;\n/^v?\\.0/.test(Ce.version);\nasync function Vf({ selector: d, widgetType: e, config: t }) {\n const i = document.querySelector(d);\n if (!i)\n throw new Error(\"Could not find root element\");\n if (i.innerHTML = \"\", e !== vi.TRADE && e !== vi.SEND)\n throw new Error(\"Invalid widget type\");\n window.cedeWidgets = window.cedeWidgets || {};\n const s = { ...t, selector: d };\n window.cedeWidgets[e] = s;\n const n = Yw(t == null ? void 0 : t.theme), r = new jw(i, n, s);\n if (r.renderHtml(bw, { layout: !0 }), !window.chrome) {\n r.renderHtml(Bw);\n return;\n }\n r.renderHtml(Iw, { animateOnExit: !0 });\n const a = await Xw();\n if (!a) {\n r.renderHtml(Pw, {\n data: {\n widgetType: e\n }\n });\n return;\n }\n a.on(\"widgetClosed\", () => r.clear());\n const o = await a.request({ method: \"getWidgetBundleUrl\", params: { name: e } }).catch(() => null);\n if (!o) {\n r.renderHtml(gw, {\n data: {\n error: e === vi.SEND ? Gs.WIDGETS.SEND.CANT_FETCH_BUNDLE : Gs.WIDGETS.TRADE.CANT_FETCH_BUNDLE\n }\n });\n return;\n }\n const c = document.createElement(\"script\");\n return c.src = o, document.body.appendChild(c), a;\n}\nconst ET = async (d, e) => Vf({ selector: d, widgetType: vi.SEND, config: e }), NT = async (d, e) => Vf({ selector: d, widgetType: vi.TRADE, config: e });\nexport {\n $f as B,\n $u as a,\n ab as b,\n qe as c,\n Xf as d,\n vs as e,\n Yu as f,\n Kf as g,\n ob as h,\n jt as i,\n rf as j,\n sr as k,\n ET as l,\n NT as m,\n vT as o,\n Ce as p,\n nn as r,\n qu as s,\n dn as u\n};\n","export default __webpack_public_path__ + \"f42be28a1a26aec2441488502c4494e9.svg\";","import chromeWebStore from \"../assets/chromeWebStore.svg\";\nimport storeLogo from \"@cede/ds/src/assets/storeLogo.svg\";\nimport CloseIcon from \"@mui/icons-material/Close\";\nimport { Box, Fade, IconButton, Modal, ModalProps, Typography, useTheme } from \"@mui/material\";\n\nexport type CedeOnboardingModalProps = {\n open: ModalProps[\"open\"];\n exit: VoidFunction;\n onClose?: ModalProps[\"onClose\"];\n readOnlyOnboarding?: boolean;\n callbackUrl?: string;\n};\n\nexport const CedeOnboardingModal = (props: CedeOnboardingModalProps) => {\n const theme = useTheme();\n const handleExit = () => {\n localStorage.removeItem(\"cede.store-onboarding\");\n props.exit();\n };\n\n const onClick = () => {\n // stores a value in the local storage for the extension to know from where the user installed the extension\n localStorage.setItem(\n \"cede.store-onboarding\",\n JSON.stringify({ readOnlyOnboarding: props.readOnlyOnboarding, callbackUrl: props.callbackUrl }),\n );\n window.open(\"https://chrome.google.com/webstore/detail/cedestore/dcfphbfmjohnlcpelbhfbjolhmmlcbhd\", \"_blank\");\n };\n\n return (\n <Modal\n {...props}\n aria-labelledby=\"cede-modal-onboarding\"\n aria-describedby=\"cede-modal-onboarding\"\n id=\"cede-modal-onboarding\"\n closeAfterTransition\n disablePortal={true}\n >\n <Fade in={props.open}>\n <Box\n sx={{\n outline: \"none\",\n position: \"absolute\",\n top: \"50%\",\n left: \"50%\",\n transform: \"translate(-50%, -50%)\",\n maxWidth: \"100%\",\n width: \"600px\",\n height: \"500px\",\n borderRadius: \"14px\",\n margin: \"auto\",\n textAlign: \"center\",\n display: \"flex\",\n flexDirection: \"column\",\n justifyContent: \"flex-start\",\n backgroundColor: theme.palette.background.default,\n overflowY: \"auto\",\n overflowX: \"hidden\",\n borderColor: \"none\",\n boxShadow: `0px 4px 70px 50px #5EA6FF26`,\n }}\n >\n <Box\n component=\"header\"\n display={\"flex\"}\n flexDirection={\"row-reverse\"}\n width=\"auto\"\n minHeight=\"50px\"\n paddingX=\"8px\"\n paddingY=\"8px\"\n >\n <IconButton onClick={handleExit} disabled={false}>\n <CloseIcon sx={{ color: \"#9B9B9B\" }} />\n </IconButton>\n </Box>\n <Box\n component=\"section\"\n display={\"flex\"}\n flexDirection={\"column\"}\n alignItems={\"center\"}\n paddingTop={\"10px\"}\n paddingBottom={\"25px\"}\n sx={{\n height: \"100%\",\n width: \"auto\",\n paddingX: \"50px\",\n justifyContent: \"space-between\",\n }}\n >\n <Box\n sx={{\n width: \"100%\",\n }}\n >\n <Box\n component=\"img\"\n sx={{\n height: \"110px\",\n width: \"110px\",\n }}\n alt={\"Cede.store logo\"}\n src={storeLogo}\n />\n\n <Typography\n component=\"h1\"\n fontFamily=\"'Inter', sans-serif\"\n fontWeight=\"600\"\n marginTop=\"16px\"\n fontSize=\"24px\"\n color={theme.palette.text.primary}\n mt=\"28px\"\n >\n <Box\n component=\"span\"\n sx={{\n color: theme.palette.primary.main,\n }}\n >\n Cede.store\n </Box>{\" \"}\n is not detected\n </Typography>\n\n <Typography\n component=\"p\"\n fontFamily=\"'Inter', sans-serif\"\n color={theme.palette.text.secondary}\n fontSize=\"14px\"\n lineHeight=\"18px\"\n fontWeight=\"400\"\n sx={{ marginTop: \"20px\" }}\n >\n To proceed, you will need to <strong>download</strong> the extension from the{\" \"}\n <strong>Chrome Web Store</strong>. Let you guide by the <strong>onboarding flow</strong>.\n </Typography>\n <Typography\n component=\"p\"\n fontFamily=\"'Inter', sans-serif\"\n color={theme.palette.text.secondary}\n fontSize=\"14px\"\n lineHeight=\"18px\"\n fontWeight=\"400\"\n sx={{ marginTop: \"35px\" }}\n >\n Click below to access the Chrome Web Store\n </Typography>\n </Box>\n\n <Box\n component=\"img\"\n sx={{\n \"height\": \"67px\",\n \"width\": \"220px\",\n \"backgroundColor\": \"#FFFFFF\",\n \"borderRadius\": \"13px\",\n \"paddingX\": \"10px\",\n \"cursor\": \"pointer\",\n \"transition\": \"box-shadow 0.3s ease-in-out\",\n \"boxShadow\": \"0px 0px 0px 0px rgba(94, 166, 255, 0.31)\",\n \"marginTop\": \"20px\",\n \"border\": `1px solid ${theme.palette.cedeComponentHr}`,\n \":hover\": {\n boxShadow: \"0px 0px 20px 14px rgba(94, 166, 255, 0.31)\",\n },\n }}\n alt={\"Download from Chrome Web Store\"}\n src={chromeWebStore}\n onClick={onClick}\n />\n <Box\n marginTop={\"30px\"}\n component={\"a\"}\n target=\"_blank\"\n href=\"https://cede.store\"\n color={theme.palette.text.secondary}\n >\n Discover more about cede.store\n </Box>\n </Box>\n </Box>\n </Fade>\n </Modal>\n );\n};\n","/**\n * @remix-run/router v1.19.0\n *\n * Copyright (c) Remix Software Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE.md file in the root directory of this source tree.\n *\n * @license MIT\n */\nfunction _extends() {\n _extends = Object.assign ? Object.assign.bind() : function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n return target;\n };\n return _extends.apply(this, arguments);\n}\n\n////////////////////////////////////////////////////////////////////////////////\n//#region Types and Constants\n////////////////////////////////////////////////////////////////////////////////\n/**\n * Actions represent the type of change to a location value.\n */\nvar Action;\n(function (Action) {\n /**\n * A POP indicates a change to an arbitrary index in the history stack, such\n * as a back or forward navigation. It does not describe the direction of the\n * navigation, only that the current index changed.\n *\n * Note: This is the default action for newly created history objects.\n */\n Action[\"Pop\"] = \"POP\";\n /**\n * A PUSH indicates a new entry being added to the history stack, such as when\n * a link is clicked and a new page loads. When this happens, all subsequent\n * entries in the stack are lost.\n */\n Action[\"Push\"] = \"PUSH\";\n /**\n * A REPLACE indicates the entry at the current index in the history stack\n * being replaced by a new one.\n */\n Action[\"Replace\"] = \"REPLACE\";\n})(Action || (Action = {}));\nconst PopStateEventType = \"popstate\";\n/**\n * Memory history stores the current location in memory. It is designed for use\n * in stateful non-browser environments like tests and React Native.\n */\nfunction createMemoryHistory(options) {\n if (options === void 0) {\n options = {};\n }\n let {\n initialEntries = [\"/\"],\n initialIndex,\n v5Compat = false\n } = options;\n let entries; // Declare so we can access from createMemoryLocation\n entries = initialEntries.map((entry, index) => createMemoryLocation(entry, typeof entry === \"string\" ? null : entry.state, index === 0 ? \"default\" : undefined));\n let index = clampIndex(initialIndex == null ? entries.length - 1 : initialIndex);\n let action = Action.Pop;\n let listener = null;\n function clampIndex(n) {\n return Math.min(Math.max(n, 0), entries.length - 1);\n }\n function getCurrentLocation() {\n return entries[index];\n }\n function createMemoryLocation(to, state, key) {\n if (state === void 0) {\n state = null;\n }\n let location = createLocation(entries ? getCurrentLocation().pathname : \"/\", to, state, key);\n warning(location.pathname.charAt(0) === \"/\", \"relative pathnames are not supported in memory history: \" + JSON.stringify(to));\n return location;\n }\n function createHref(to) {\n return typeof to === \"string\" ? to : createPath(to);\n }\n let history = {\n get index() {\n return index;\n },\n get action() {\n return action;\n },\n get location() {\n return getCurrentLocation();\n },\n createHref,\n createURL(to) {\n return new URL(createHref(to), \"http://localhost\");\n },\n encodeLocation(to) {\n let path = typeof to === \"string\" ? parsePath(to) : to;\n return {\n pathname: path.pathname || \"\",\n search: path.search || \"\",\n hash: path.hash || \"\"\n };\n },\n push(to, state) {\n action = Action.Push;\n let nextLocation = createMemoryLocation(to, state);\n index += 1;\n entries.splice(index, entries.length, nextLocation);\n if (v5Compat && listener) {\n listener({\n action,\n location: nextLocation,\n delta: 1\n });\n }\n },\n replace(to, state) {\n action = Action.Replace;\n let nextLocation = createMemoryLocation(to, state);\n entries[index] = nextLocation;\n if (v5Compat && listener) {\n listener({\n action,\n location: nextLocation,\n delta: 0\n });\n }\n },\n go(delta) {\n action = Action.Pop;\n let nextIndex = clampIndex(index + delta);\n let nextLocation = entries[nextIndex];\n index = nextIndex;\n if (listener) {\n listener({\n action,\n location: nextLocation,\n delta\n });\n }\n },\n listen(fn) {\n listener = fn;\n return () => {\n listener = null;\n };\n }\n };\n return history;\n}\n/**\n * Browser history stores the location in regular URLs. This is the standard for\n * most web apps, but it requires some configuration on the server to ensure you\n * serve the same app at multiple URLs.\n *\n * @see https://github.com/remix-run/history/tree/main/docs/api-reference.md#createbrowserhistory\n */\nfunction createBrowserHistory(options) {\n if (options === void 0) {\n options = {};\n }\n function createBrowserLocation(window, globalHistory) {\n let {\n pathname,\n search,\n hash\n } = window.location;\n return createLocation(\"\", {\n pathname,\n search,\n hash\n },\n // state defaults to `null` because `window.history.state` does\n globalHistory.state && globalHistory.state.usr || null, globalHistory.state && globalHistory.state.key || \"default\");\n }\n function createBrowserHref(window, to) {\n return typeof to === \"string\" ? to : createPath(to);\n }\n return getUrlBasedHistory(createBrowserLocation, createBrowserHref, null, options);\n}\n/**\n * Hash history stores the location in window.location.hash. This makes it ideal\n * for situations where you don't want to send the location to the server for\n * some reason, either because you do cannot configure it or the URL space is\n * reserved for something else.\n *\n * @see https://github.com/remix-run/history/tree/main/docs/api-reference.md#createhashhistory\n */\nfunction createHashHistory(options) {\n if (options === void 0) {\n options = {};\n }\n function createHashLocation(window, globalHistory) {\n let {\n pathname = \"/\",\n search = \"\",\n hash = \"\"\n } = parsePath(window.location.hash.substr(1));\n // Hash URL should always have a leading / just like window.location.pathname\n // does, so if an app ends up at a route like /#something then we add a\n // leading slash so all of our path-matching behaves the same as if it would\n // in a browser router. This is particularly important when there exists a\n // root splat route (<Route path=\"*\">) since that matches internally against\n // \"/*\" and we'd expect /#something to 404 in a hash router app.\n if (!pathname.startsWith(\"/\") && !pathname.startsWith(\".\")) {\n pathname = \"/\" + pathname;\n }\n return createLocation(\"\", {\n pathname,\n search,\n hash\n },\n // state defaults to `null` because `window.history.state` does\n globalHistory.state && globalHistory.state.usr || null, globalHistory.state && globalHistory.state.key || \"default\");\n }\n function createHashHref(window, to) {\n let base = window.document.querySelector(\"base\");\n let href = \"\";\n if (base && base.getAttribute(\"href\")) {\n let url = window.location.href;\n let hashIndex = url.indexOf(\"#\");\n href = hashIndex === -1 ? url : url.slice(0, hashIndex);\n }\n return href + \"#\" + (typeof to === \"string\" ? to : createPath(to));\n }\n function validateHashLocation(location, to) {\n warning(location.pathname.charAt(0) === \"/\", \"relative pathnames are not supported in hash history.push(\" + JSON.stringify(to) + \")\");\n }\n return getUrlBasedHistory(createHashLocation, createHashHref, validateHashLocation, options);\n}\nfunction invariant(value, message) {\n if (value === false || value === null || typeof value === \"undefined\") {\n throw new Error(message);\n }\n}\nfunction warning(cond, message) {\n if (!cond) {\n // eslint-disable-next-line no-console\n if (typeof console !== \"undefined\") console.warn(message);\n try {\n // Welcome to debugging history!\n //\n // This error is thrown as a convenience, so you can more easily\n // find the source for a warning that appears in the console by\n // enabling \"pause on exceptions\" in your JavaScript debugger.\n throw new Error(message);\n // eslint-disable-next-line no-empty\n } catch (e) {}\n }\n}\nfunction createKey() {\n return Math.random().toString(36).substr(2, 8);\n}\n/**\n * For browser-based histories, we combine the state and key into an object\n */\nfunction getHistoryState(location, index) {\n return {\n usr: location.state,\n key: location.key,\n idx: index\n };\n}\n/**\n * Creates a Location object with a unique key from the given Path\n */\nfunction createLocation(current, to, state, key) {\n if (state === void 0) {\n state = null;\n }\n let location = _extends({\n pathname: typeof current === \"string\" ? current : current.pathname,\n search: \"\",\n hash: \"\"\n }, typeof to === \"string\" ? parsePath(to) : to, {\n state,\n // TODO: This could be cleaned up. push/replace should probably just take\n // full Locations now and avoid the need to run through this flow at all\n // But that's a pretty big refactor to the current test suite so going to\n // keep as is for the time being and just let any incoming keys take precedence\n key: to && to.key || key || createKey()\n });\n return location;\n}\n/**\n * Creates a string URL path from the given pathname, search, and hash components.\n */\nfunction createPath(_ref) {\n let {\n pathname = \"/\",\n search = \"\",\n hash = \"\"\n } = _ref;\n if (search && search !== \"?\") pathname += search.charAt(0) === \"?\" ? search : \"?\" + search;\n if (hash && hash !== \"#\") pathname += hash.charAt(0) === \"#\" ? hash : \"#\" + hash;\n return pathname;\n}\n/**\n * Parses a string URL path into its separate pathname, search, and hash components.\n */\nfunction parsePath(path) {\n let parsedPath = {};\n if (path) {\n let hashIndex = path.indexOf(\"#\");\n if (hashIndex >= 0) {\n parsedPath.hash = path.substr(hashIndex);\n path = path.substr(0, hashIndex);\n }\n let searchIndex = path.indexOf(\"?\");\n if (searchIndex >= 0) {\n parsedPath.search = path.substr(searchIndex);\n path = path.substr(0, searchIndex);\n }\n if (path) {\n parsedPath.pathname = path;\n }\n }\n return parsedPath;\n}\nfunction getUrlBasedHistory(getLocation, createHref, validateLocation, options) {\n if (options === void 0) {\n options = {};\n }\n let {\n window = document.defaultView,\n v5Compat = false\n } = options;\n let globalHistory = window.history;\n let action = Action.Pop;\n let listener = null;\n let index = getIndex();\n // Index should only be null when we initialize. If not, it's because the\n // user called history.pushState or history.replaceState directly, in which\n // case we should log a warning as it will result in bugs.\n if (index == null) {\n index = 0;\n globalHistory.replaceState(_extends({}, globalHistory.state, {\n idx: index\n }), \"\");\n }\n function getIndex() {\n let state = globalHistory.state || {\n idx: null\n };\n return state.idx;\n }\n function handlePop() {\n action = Action.Pop;\n let nextIndex = getIndex();\n let delta = nextIndex == null ? null : nextIndex - index;\n index = nextIndex;\n if (listener) {\n listener({\n action,\n location: history.location,\n delta\n });\n }\n }\n function push(to, state) {\n action = Action.Push;\n let location = createLocation(history.location, to, state);\n if (validateLocation) validateLocation(location, to);\n index = getIndex() + 1;\n let historyState = getHistoryState(location, index);\n let url = history.createHref(location);\n // try...catch because iOS limits us to 100 pushState calls :/\n try {\n globalHistory.pushState(historyState, \"\", url);\n } catch (error) {\n // If the exception is because `state` can't be serialized, let that throw\n // outwards just like a replace call would so the dev knows the cause\n // https://html.spec.whatwg.org/multipage/nav-history-apis.html#shared-history-push/replace-state-steps\n // https://html.spec.whatwg.org/multipage/structured-data.html#structuredserializeinternal\n if (error instanceof DOMException && error.name === \"DataCloneError\") {\n throw error;\n }\n // They are going to lose state here, but there is no real\n // way to warn them about it since the page will refresh...\n window.location.assign(url);\n }\n if (v5Compat && listener) {\n listener({\n action,\n location: history.location,\n delta: 1\n });\n }\n }\n function replace(to, state) {\n action = Action.Replace;\n let location = createLocation(history.location, to, state);\n if (validateLocation) validateLocation(location, to);\n index = getIndex();\n let historyState = getHistoryState(location, index);\n let url = history.createHref(location);\n globalHistory.replaceState(historyState, \"\", url);\n if (v5Compat && listener) {\n listener({\n action,\n location: history.location,\n delta: 0\n });\n }\n }\n function createURL(to) {\n // window.location.origin is \"null\" (the literal string value) in Firefox\n // under certain conditions, notably when serving from a local HTML file\n // See https://bugzilla.mozilla.org/show_bug.cgi?id=878297\n let base = window.location.origin !== \"null\" ? window.location.origin : window.location.href;\n let href = typeof to === \"string\" ? to : createPath(to);\n // Treating this as a full URL will strip any trailing spaces so we need to\n // pre-encode them since they might be part of a matching splat param from\n // an ancestor route\n href = href.replace(/ $/, \"%20\");\n invariant(base, \"No window.location.(origin|href) available to create URL for href: \" + href);\n return new URL(href, base);\n }\n let history = {\n get action() {\n return action;\n },\n get location() {\n return getLocation(window, globalHistory);\n },\n listen(fn) {\n if (listener) {\n throw new Error(\"A history only accepts one active listener\");\n }\n window.addEventListener(PopStateEventType, handlePop);\n listener = fn;\n return () => {\n window.removeEventListener(PopStateEventType, handlePop);\n listener = null;\n };\n },\n createHref(to) {\n return createHref(window, to);\n },\n createURL,\n encodeLocation(to) {\n // Encode a Location the same way window.location would\n let url = createURL(to);\n return {\n pathname: url.pathname,\n search: url.search,\n hash: url.hash\n };\n },\n push,\n replace,\n go(n) {\n return globalHistory.go(n);\n }\n };\n return history;\n}\n//#endregion\n\nvar ResultType;\n(function (ResultType) {\n ResultType[\"data\"] = \"data\";\n ResultType[\"deferred\"] = \"deferred\";\n ResultType[\"redirect\"] = \"redirect\";\n ResultType[\"error\"] = \"error\";\n})(ResultType || (ResultType = {}));\nconst immutableRouteKeys = new Set([\"lazy\", \"caseSensitive\", \"path\", \"id\", \"index\", \"children\"]);\nfunction isIndexRoute(route) {\n return route.index === true;\n}\n// Walk the route tree generating unique IDs where necessary, so we are working\n// solely with AgnosticDataRouteObject's within the Router\nfunction convertRoutesToDataRoutes(routes, mapRouteProperties, parentPath, manifest) {\n if (parentPath === void 0) {\n parentPath = [];\n }\n if (manifest === void 0) {\n manifest = {};\n }\n return routes.map((route, index) => {\n let treePath = [...parentPath, String(index)];\n let id = typeof route.id === \"string\" ? route.id : treePath.join(\"-\");\n invariant(route.index !== true || !route.children, \"Cannot specify children on an index route\");\n invariant(!manifest[id], \"Found a route id collision on id \\\"\" + id + \"\\\". Route \" + \"id's must be globally unique within Data Router usages\");\n if (isIndexRoute(route)) {\n let indexRoute = _extends({}, route, mapRouteProperties(route), {\n id\n });\n manifest[id] = indexRoute;\n return indexRoute;\n } else {\n let pathOrLayoutRoute = _extends({}, route, mapRouteProperties(route), {\n id,\n children: undefined\n });\n manifest[id] = pathOrLayoutRoute;\n if (route.children) {\n pathOrLayoutRoute.children = convertRoutesToDataRoutes(route.children, mapRouteProperties, treePath, manifest);\n }\n return pathOrLayoutRoute;\n }\n });\n}\n/**\n * Matches the given routes to a location and returns the match data.\n *\n * @see https://reactrouter.com/utils/match-routes\n */\nfunction matchRoutes(routes, locationArg, basename) {\n if (basename === void 0) {\n basename = \"/\";\n }\n return matchRoutesImpl(routes, locationArg, basename, false);\n}\nfunction matchRoutesImpl(routes, locationArg, basename, allowPartial) {\n let location = typeof locationArg === \"string\" ? parsePath(locationArg) : locationArg;\n let pathname = stripBasename(location.pathname || \"/\", basename);\n if (pathname == null) {\n return null;\n }\n let branches = flattenRoutes(routes);\n rankRouteBranches(branches);\n let matches = null;\n for (let i = 0; matches == null && i < branches.length; ++i) {\n // Incoming pathnames are generally encoded from either window.location\n // or from router.navigate, but we want to match against the unencoded\n // paths in the route definitions. Memory router locations won't be\n // encoded here but there also shouldn't be anything to decode so this\n // should be a safe operation. This avoids needing matchRoutes to be\n // history-aware.\n let decoded = decodePath(pathname);\n matches = matchRouteBranch(branches[i], decoded, allowPartial);\n }\n return matches;\n}\nfunction convertRouteMatchToUiMatch(match, loaderData) {\n let {\n route,\n pathname,\n params\n } = match;\n return {\n id: route.id,\n pathname,\n params,\n data: loaderData[route.id],\n handle: route.handle\n };\n}\nfunction flattenRoutes(routes, branches, parentsMeta, parentPath) {\n if (branches === void 0) {\n branches = [];\n }\n if (parentsMeta === void 0) {\n parentsMeta = [];\n }\n if (parentPath === void 0) {\n parentPath = \"\";\n }\n let flattenRoute = (route, index, relativePath) => {\n let meta = {\n relativePath: relativePath === undefined ? route.path || \"\" : relativePath,\n caseSensitive: route.caseSensitive === true,\n childrenIndex: index,\n route\n };\n if (meta.relativePath.startsWith(\"/\")) {\n invariant(meta.relativePath.startsWith(parentPath), \"Absolute route path \\\"\" + meta.relativePath + \"\\\" nested under path \" + (\"\\\"\" + parentPath + \"\\\" is not valid. An absolute child route path \") + \"must start with the combined path of all its parent routes.\");\n meta.relativePath = meta.relativePath.slice(parentPath.length);\n }\n let path = joinPaths([parentPath, meta.relativePath]);\n let routesMeta = parentsMeta.concat(meta);\n // Add the children before adding this route to the array, so we traverse the\n // route tree depth-first and child routes appear before their parents in\n // the \"flattened\" version.\n if (route.children && route.children.length > 0) {\n invariant(\n // Our types know better, but runtime JS may not!\n // @ts-expect-error\n route.index !== true, \"Index routes must not have child routes. Please remove \" + (\"all child routes from route path \\\"\" + path + \"\\\".\"));\n flattenRoutes(route.children, branches, routesMeta, path);\n }\n // Routes without a path shouldn't ever match by themselves unless they are\n // index routes, so don't add them to the list of possible branches.\n if (route.path == null && !route.index) {\n return;\n }\n branches.push({\n path,\n score: computeScore(path, route.index),\n routesMeta\n });\n };\n routes.forEach((route, index) => {\n var _route$path;\n // coarse-grain check for optional params\n if (route.path === \"\" || !((_route$path = route.path) != null && _route$path.includes(\"?\"))) {\n flattenRoute(route, index);\n } else {\n for (let exploded of explodeOptionalSegments(route.path)) {\n flattenRoute(route, index, exploded);\n }\n }\n });\n return branches;\n}\n/**\n * Computes all combinations of optional path segments for a given path,\n * excluding combinations that are ambiguous and of lower priority.\n *\n * For example, `/one/:two?/three/:four?/:five?` explodes to:\n * - `/one/three`\n * - `/one/:two/three`\n * - `/one/three/:four`\n * - `/one/three/:five`\n * - `/one/:two/three/:four`\n * - `/one/:two/three/:five`\n * - `/one/three/:four/:five`\n * - `/one/:two/three/:four/:five`\n */\nfunction explodeOptionalSegments(path) {\n let segments = path.split(\"/\");\n if (segments.length === 0) return [];\n let [first, ...rest] = segments;\n // Optional path segments are denoted by a trailing `?`\n let isOptional = first.endsWith(\"?\");\n // Compute the corresponding required segment: `foo?` -> `foo`\n let required = first.replace(/\\?$/, \"\");\n if (rest.length === 0) {\n // Intepret empty string as omitting an optional segment\n // `[\"one\", \"\", \"three\"]` corresponds to omitting `:two` from `/one/:two?/three` -> `/one/three`\n return isOptional ? [required, \"\"] : [required];\n }\n let restExploded = explodeOptionalSegments(rest.join(\"/\"));\n let result = [];\n // All child paths with the prefix. Do this for all children before the\n // optional version for all children, so we get consistent ordering where the\n // parent optional aspect is preferred as required. Otherwise, we can get\n // child sections interspersed where deeper optional segments are higher than\n // parent optional segments, where for example, /:two would explode _earlier_\n // then /:one. By always including the parent as required _for all children_\n // first, we avoid this issue\n result.push(...restExploded.map(subpath => subpath === \"\" ? required : [required, subpath].join(\"/\")));\n // Then, if this is an optional value, add all child versions without\n if (isOptional) {\n result.push(...restExploded);\n }\n // for absolute paths, ensure `/` instead of empty segment\n return result.map(exploded => path.startsWith(\"/\") && exploded === \"\" ? \"/\" : exploded);\n}\nfunction rankRouteBranches(branches) {\n branches.sort((a, b) => a.score !== b.score ? b.score - a.score // Higher score first\n : compareIndexes(a.routesMeta.map(meta => meta.childrenIndex), b.routesMeta.map(meta => meta.childrenIndex)));\n}\nconst paramRe = /^:[\\w-]+$/;\nconst dynamicSegmentValue = 3;\nconst indexRouteValue = 2;\nconst emptySegmentValue = 1;\nconst staticSegmentValue = 10;\nconst splatPenalty = -2;\nconst isSplat = s => s === \"*\";\nfunction computeScore(path, index) {\n let segments = path.split(\"/\");\n let initialScore = segments.length;\n if (segments.some(isSplat)) {\n initialScore += splatPenalty;\n }\n if (index) {\n initialScore += indexRouteValue;\n }\n return segments.filter(s => !isSplat(s)).reduce((score, segment) => score + (paramRe.test(segment) ? dynamicSegmentValue : segment === \"\" ? emptySegmentValue : staticSegmentValue), initialScore);\n}\nfunction compareIndexes(a, b) {\n let siblings = a.length === b.length && a.slice(0, -1).every((n, i) => n === b[i]);\n return siblings ?\n // If two routes are siblings, we should try to match the earlier sibling\n // first. This allows people to have fine-grained control over the matching\n // behavior by simply putting routes with identical paths in the order they\n // want them tried.\n a[a.length - 1] - b[b.length - 1] :\n // Otherwise, it doesn't really make sense to rank non-siblings by index,\n // so they sort equally.\n 0;\n}\nfunction matchRouteBranch(branch, pathname, allowPartial) {\n if (allowPartial === void 0) {\n allowPartial = false;\n }\n let {\n routesMeta\n } = branch;\n let matchedParams = {};\n let matchedPathname = \"/\";\n let matches = [];\n for (let i = 0; i < routesMeta.length; ++i) {\n let meta = routesMeta[i];\n let end = i === routesMeta.length - 1;\n let remainingPathname = matchedPathname === \"/\" ? pathname : pathname.slice(matchedPathname.length) || \"/\";\n let match = matchPath({\n path: meta.relativePath,\n caseSensitive: meta.caseSensitive,\n end\n }, remainingPathname);\n let route = meta.route;\n if (!match && end && allowPartial && !routesMeta[routesMeta.length - 1].route.index) {\n match = matchPath({\n path: meta.relativePath,\n caseSensitive: meta.caseSensitive,\n end: false\n }, remainingPathname);\n }\n if (!match) {\n return null;\n }\n Object.assign(matchedParams, match.params);\n matches.push({\n // TODO: Can this as be avoided?\n params: matchedParams,\n pathname: joinPaths([matchedPathname, match.pathname]),\n pathnameBase: normalizePathname(joinPaths([matchedPathname, match.pathnameBase])),\n route\n });\n if (match.pathnameBase !== \"/\") {\n matchedPathname = joinPaths([matchedPathname, match.pathnameBase]);\n }\n }\n return matches;\n}\n/**\n * Returns a path with params interpolated.\n *\n * @see https://reactrouter.com/utils/generate-path\n */\nfunction generatePath(originalPath, params) {\n if (params === void 0) {\n params = {};\n }\n let path = originalPath;\n if (path.endsWith(\"*\") && path !== \"*\" && !path.endsWith(\"/*\")) {\n warning(false, \"Route path \\\"\" + path + \"\\\" will be treated as if it were \" + (\"\\\"\" + path.replace(/\\*$/, \"/*\") + \"\\\" because the `*` character must \") + \"always follow a `/` in the pattern. To get rid of this warning, \" + (\"please change the route path to \\\"\" + path.replace(/\\*$/, \"/*\") + \"\\\".\"));\n path = path.replace(/\\*$/, \"/*\");\n }\n // ensure `/` is added at the beginning if the path is absolute\n const prefix = path.startsWith(\"/\") ? \"/\" : \"\";\n const stringify = p => p == null ? \"\" : typeof p === \"string\" ? p : String(p);\n const segments = path.split(/\\/+/).map((segment, index, array) => {\n const isLastSegment = index === array.length - 1;\n // only apply the splat if it's the last segment\n if (isLastSegment && segment === \"*\") {\n const star = \"*\";\n // Apply the splat\n return stringify(params[star]);\n }\n const keyMatch = segment.match(/^:([\\w-]+)(\\??)$/);\n if (keyMatch) {\n const [, key, optional] = keyMatch;\n let param = params[key];\n invariant(optional === \"?\" || param != null, \"Missing \\\":\" + key + \"\\\" param\");\n return stringify(param);\n }\n // Remove any optional markers from optional static segments\n return segment.replace(/\\?$/g, \"\");\n })\n // Remove empty segments\n .filter(segment => !!segment);\n return prefix + segments.join(\"/\");\n}\n/**\n * Performs pattern matching on a URL pathname and returns information about\n * the match.\n *\n * @see https://reactrouter.com/utils/match-path\n */\nfunction matchPath(pattern, pathname) {\n if (typeof pattern === \"string\") {\n pattern = {\n path: pattern,\n caseSensitive: false,\n end: true\n };\n }\n let [matcher, compiledParams] = compilePath(pattern.path, pattern.caseSensitive, pattern.end);\n let match = pathname.match(matcher);\n if (!match) return null;\n let matchedPathname = match[0];\n let pathnameBase = matchedPathname.replace(/(.)\\/+$/, \"$1\");\n let captureGroups = match.slice(1);\n let params = compiledParams.reduce((memo, _ref, index) => {\n let {\n paramName,\n isOptional\n } = _ref;\n // We need to compute the pathnameBase here using the raw splat value\n // instead of using params[\"*\"] later because it will be decoded then\n if (paramName === \"*\") {\n let splatValue = captureGroups[index] || \"\";\n pathnameBase = matchedPathname.slice(0, matchedPathname.length - splatValue.length).replace(/(.)\\/+$/, \"$1\");\n }\n const value = captureGroups[index];\n if (isOptional && !value) {\n memo[paramName] = undefined;\n } else {\n memo[paramName] = (value || \"\").replace(/%2F/g, \"/\");\n }\n return memo;\n }, {});\n return {\n params,\n pathname: matchedPathname,\n pathnameBase,\n pattern\n };\n}\nfunction compilePath(path, caseSensitive, end) {\n if (caseSensitive === void 0) {\n caseSensitive = false;\n }\n if (end === void 0) {\n end = true;\n }\n warning(path === \"*\" || !path.endsWith(\"*\") || path.endsWith(\"/*\"), \"Route path \\\"\" + path + \"\\\" will be treated as if it were \" + (\"\\\"\" + path.replace(/\\*$/, \"/*\") + \"\\\" because the `*` character must \") + \"always follow a `/` in the pattern. To get rid of this warning, \" + (\"please change the route path to \\\"\" + path.replace(/\\*$/, \"/*\") + \"\\\".\"));\n let params = [];\n let regexpSource = \"^\" + path.replace(/\\/*\\*?$/, \"\") // Ignore trailing / and /*, we'll handle it below\n .replace(/^\\/*/, \"/\") // Make sure it has a leading /\n .replace(/[\\\\.*+^${}|()[\\]]/g, \"\\\\$&\") // Escape special regex chars\n .replace(/\\/:([\\w-]+)(\\?)?/g, (_, paramName, isOptional) => {\n params.push({\n paramName,\n isOptional: isOptional != null\n });\n return isOptional ? \"/?([^\\\\/]+)?\" : \"/([^\\\\/]+)\";\n });\n if (path.endsWith(\"*\")) {\n params.push({\n paramName: \"*\"\n });\n regexpSource += path === \"*\" || path === \"/*\" ? \"(.*)$\" // Already matched the initial /, just match the rest\n : \"(?:\\\\/(.+)|\\\\/*)$\"; // Don't include the / in params[\"*\"]\n } else if (end) {\n // When matching to the end, ignore trailing slashes\n regexpSource += \"\\\\/*$\";\n } else if (path !== \"\" && path !== \"/\") {\n // If our path is non-empty and contains anything beyond an initial slash,\n // then we have _some_ form of path in our regex, so we should expect to\n // match only if we find the end of this path segment. Look for an optional\n // non-captured trailing slash (to match a portion of the URL) or the end\n // of the path (if we've matched to the end). We used to do this with a\n // word boundary but that gives false positives on routes like\n // /user-preferences since `-` counts as a word boundary.\n regexpSource += \"(?:(?=\\\\/|$))\";\n } else ;\n let matcher = new RegExp(regexpSource, caseSensitive ? undefined : \"i\");\n return [matcher, params];\n}\nfunction decodePath(value) {\n try {\n return value.split(\"/\").map(v => decodeURIComponent(v).replace(/\\//g, \"%2F\")).join(\"/\");\n } catch (error) {\n warning(false, \"The URL path \\\"\" + value + \"\\\" could not be decoded because it is is a \" + \"malformed URL segment. This is probably due to a bad percent \" + (\"encoding (\" + error + \").\"));\n return value;\n }\n}\n/**\n * @private\n */\nfunction stripBasename(pathname, basename) {\n if (basename === \"/\") return pathname;\n if (!pathname.toLowerCase().startsWith(basename.toLowerCase())) {\n return null;\n }\n // We want to leave trailing slash behavior in the user's control, so if they\n // specify a basename with a trailing slash, we should support it\n let startIndex = basename.endsWith(\"/\") ? basename.length - 1 : basename.length;\n let nextChar = pathname.charAt(startIndex);\n if (nextChar && nextChar !== \"/\") {\n // pathname does not start with basename/\n return null;\n }\n return pathname.slice(startIndex) || \"/\";\n}\n/**\n * Returns a resolved path object relative to the given pathname.\n *\n * @see https://reactrouter.com/utils/resolve-path\n */\nfunction resolvePath(to, fromPathname) {\n if (fromPathname === void 0) {\n fromPathname = \"/\";\n }\n let {\n pathname: toPathname,\n search = \"\",\n hash = \"\"\n } = typeof to === \"string\" ? parsePath(to) : to;\n let pathname = toPathname ? toPathname.startsWith(\"/\") ? toPathname : resolvePathname(toPathname, fromPathname) : fromPathname;\n return {\n pathname,\n search: normalizeSearch(search),\n hash: normalizeHash(hash)\n };\n}\nfunction resolvePathname(relativePath, fromPathname) {\n let segments = fromPathname.replace(/\\/+$/, \"\").split(\"/\");\n let relativeSegments = relativePath.split(\"/\");\n relativeSegments.forEach(segment => {\n if (segment === \"..\") {\n // Keep the root \"\" segment so the pathname starts at /\n if (segments.length > 1) segments.pop();\n } else if (segment !== \".\") {\n segments.push(segment);\n }\n });\n return segments.length > 1 ? segments.join(\"/\") : \"/\";\n}\nfunction getInvalidPathError(char, field, dest, path) {\n return \"Cannot include a '\" + char + \"' character in a manually specified \" + (\"`to.\" + field + \"` field [\" + JSON.stringify(path) + \"]. Please separate it out to the \") + (\"`to.\" + dest + \"` field. Alternatively you may provide the full path as \") + \"a string in <Link to=\\\"...\\\"> and the router will parse it for you.\";\n}\n/**\n * @private\n *\n * When processing relative navigation we want to ignore ancestor routes that\n * do not contribute to the path, such that index/pathless layout routes don't\n * interfere.\n *\n * For example, when moving a route element into an index route and/or a\n * pathless layout route, relative link behavior contained within should stay\n * the same. Both of the following examples should link back to the root:\n *\n * <Route path=\"/\">\n * <Route path=\"accounts\" element={<Link to=\"..\"}>\n * </Route>\n *\n * <Route path=\"/\">\n * <Route path=\"accounts\">\n * <Route element={<AccountsLayout />}> // <-- Does not contribute\n * <Route index element={<Link to=\"..\"} /> // <-- Does not contribute\n * </Route\n * </Route>\n * </Route>\n */\nfunction getPathContributingMatches(matches) {\n return matches.filter((match, index) => index === 0 || match.route.path && match.route.path.length > 0);\n}\n// Return the array of pathnames for the current route matches - used to\n// generate the routePathnames input for resolveTo()\nfunction getResolveToMatches(matches, v7_relativeSplatPath) {\n let pathMatches = getPathContributingMatches(matches);\n // When v7_relativeSplatPath is enabled, use the full pathname for the leaf\n // match so we include splat values for \".\" links. See:\n // https://github.com/remix-run/react-router/issues/11052#issuecomment-1836589329\n if (v7_relativeSplatPath) {\n return pathMatches.map((match, idx) => idx === pathMatches.length - 1 ? match.pathname : match.pathnameBase);\n }\n return pathMatches.map(match => match.pathnameBase);\n}\n/**\n * @private\n */\nfunction resolveTo(toArg, routePathnames, locationPathname, isPathRelative) {\n if (isPathRelative === void 0) {\n isPathRelative = false;\n }\n let to;\n if (typeof toArg === \"string\") {\n to = parsePath(toArg);\n } else {\n to = _extends({}, toArg);\n invariant(!to.pathname || !to.pathname.includes(\"?\"), getInvalidPathError(\"?\", \"pathname\", \"search\", to));\n invariant(!to.pathname || !to.pathname.includes(\"#\"), getInvalidPathError(\"#\", \"pathname\", \"hash\", to));\n invariant(!to.search || !to.search.includes(\"#\"), getInvalidPathError(\"#\", \"search\", \"hash\", to));\n }\n let isEmptyPath = toArg === \"\" || to.pathname === \"\";\n let toPathname = isEmptyPath ? \"/\" : to.pathname;\n let from;\n // Routing is relative to the current pathname if explicitly requested.\n //\n // If a pathname is explicitly provided in `to`, it should be relative to the\n // route context. This is explained in `Note on `<Link to>` values` in our\n // migration guide from v5 as a means of disambiguation between `to` values\n // that begin with `/` and those that do not. However, this is problematic for\n // `to` values that do not provide a pathname. `to` can simply be a search or\n // hash string, in which case we should assume that the navigation is relative\n // to the current location's pathname and *not* the route pathname.\n if (toPathname == null) {\n from = locationPathname;\n } else {\n let routePathnameIndex = routePathnames.length - 1;\n // With relative=\"route\" (the default), each leading .. segment means\n // \"go up one route\" instead of \"go up one URL segment\". This is a key\n // difference from how <a href> works and a major reason we call this a\n // \"to\" value instead of a \"href\".\n if (!isPathRelative && toPathname.startsWith(\"..\")) {\n let toSegments = toPathname.split(\"/\");\n while (toSegments[0] === \"..\") {\n toSegments.shift();\n routePathnameIndex -= 1;\n }\n to.pathname = toSegments.join(\"/\");\n }\n from = routePathnameIndex >= 0 ? routePathnames[routePathnameIndex] : \"/\";\n }\n let path = resolvePath(to, from);\n // Ensure the pathname has a trailing slash if the original \"to\" had one\n let hasExplicitTrailingSlash = toPathname && toPathname !== \"/\" && toPathname.endsWith(\"/\");\n // Or if this was a link to the current path which has a trailing slash\n let hasCurrentTrailingSlash = (isEmptyPath || toPathname === \".\") && locationPathname.endsWith(\"/\");\n if (!path.pathname.endsWith(\"/\") && (hasExplicitTrailingSlash || hasCurrentTrailingSlash)) {\n path.pathname += \"/\";\n }\n return path;\n}\n/**\n * @private\n */\nfunction getToPathname(to) {\n // Empty strings should be treated the same as / paths\n return to === \"\" || to.pathname === \"\" ? \"/\" : typeof to === \"string\" ? parsePath(to).pathname : to.pathname;\n}\n/**\n * @private\n */\nconst joinPaths = paths => paths.join(\"/\").replace(/\\/\\/+/g, \"/\");\n/**\n * @private\n */\nconst normalizePathname = pathname => pathname.replace(/\\/+$/, \"\").replace(/^\\/*/, \"/\");\n/**\n * @private\n */\nconst normalizeSearch = search => !search || search === \"?\" ? \"\" : search.startsWith(\"?\") ? search : \"?\" + search;\n/**\n * @private\n */\nconst normalizeHash = hash => !hash || hash === \"#\" ? \"\" : hash.startsWith(\"#\") ? hash : \"#\" + hash;\n/**\n * This is a shortcut for creating `application/json` responses. Converts `data`\n * to JSON and sets the `Content-Type` header.\n */\nconst json = function json(data, init) {\n if (init === void 0) {\n init = {};\n }\n let responseInit = typeof init === \"number\" ? {\n status: init\n } : init;\n let headers = new Headers(responseInit.headers);\n if (!headers.has(\"Content-Type\")) {\n headers.set(\"Content-Type\", \"application/json; charset=utf-8\");\n }\n return new Response(JSON.stringify(data), _extends({}, responseInit, {\n headers\n }));\n};\nclass DataWithResponseInit {\n constructor(data, init) {\n this.type = \"DataWithResponseInit\";\n this.data = data;\n this.init = init || null;\n }\n}\n/**\n * Create \"responses\" that contain `status`/`headers` without forcing\n * serialization into an actual `Response` - used by Remix single fetch\n */\nfunction data(data, init) {\n return new DataWithResponseInit(data, typeof init === \"number\" ? {\n status: init\n } : init);\n}\nclass AbortedDeferredError extends Error {}\nclass DeferredData {\n constructor(data, responseInit) {\n this.pendingKeysSet = new Set();\n this.subscribers = new Set();\n this.deferredKeys = [];\n invariant(data && typeof data === \"object\" && !Array.isArray(data), \"defer() only accepts plain objects\");\n // Set up an AbortController + Promise we can race against to exit early\n // cancellation\n let reject;\n this.abortPromise = new Promise((_, r) => reject = r);\n this.controller = new AbortController();\n let onAbort = () => reject(new AbortedDeferredError(\"Deferred data aborted\"));\n this.unlistenAbortSignal = () => this.controller.signal.removeEventListener(\"abort\", onAbort);\n this.controller.signal.addEventListener(\"abort\", onAbort);\n this.data = Object.entries(data).reduce((acc, _ref2) => {\n let [key, value] = _ref2;\n return Object.assign(acc, {\n [key]: this.trackPromise(key, value)\n });\n }, {});\n if (this.done) {\n // All incoming values were resolved\n this.unlistenAbortSignal();\n }\n this.init = responseInit;\n }\n trackPromise(key, value) {\n if (!(value instanceof Promise)) {\n return value;\n }\n this.deferredKeys.push(key);\n this.pendingKeysSet.add(key);\n // We store a little wrapper promise that will be extended with\n // _data/_error props upon resolve/reject\n let promise = Promise.race([value, this.abortPromise]).then(data => this.onSettle(promise, key, undefined, data), error => this.onSettle(promise, key, error));\n // Register rejection listeners to avoid uncaught promise rejections on\n // errors or aborted deferred values\n promise.catch(() => {});\n Object.defineProperty(promise, \"_tracked\", {\n get: () => true\n });\n return promise;\n }\n onSettle(promise, key, error, data) {\n if (this.controller.signal.aborted && error instanceof AbortedDeferredError) {\n this.unlistenAbortSignal();\n Object.defineProperty(promise, \"_error\", {\n get: () => error\n });\n return Promise.reject(error);\n }\n this.pendingKeysSet.delete(key);\n if (this.done) {\n // Nothing left to abort!\n this.unlistenAbortSignal();\n }\n // If the promise was resolved/rejected with undefined, we'll throw an error as you\n // should always resolve with a value or null\n if (error === undefined && data === undefined) {\n let undefinedError = new Error(\"Deferred data for key \\\"\" + key + \"\\\" resolved/rejected with `undefined`, \" + \"you must resolve/reject with a value or `null`.\");\n Object.defineProperty(promise, \"_error\", {\n get: () => undefinedError\n });\n this.emit(false, key);\n return Promise.reject(undefinedError);\n }\n if (data === undefined) {\n Object.defineProperty(promise, \"_error\", {\n get: () => error\n });\n this.emit(false, key);\n return Promise.reject(error);\n }\n Object.defineProperty(promise, \"_data\", {\n get: () => data\n });\n this.emit(false, key);\n return data;\n }\n emit(aborted, settledKey) {\n this.subscribers.forEach(subscriber => subscriber(aborted, settledKey));\n }\n subscribe(fn) {\n this.subscribers.add(fn);\n return () => this.subscribers.delete(fn);\n }\n cancel() {\n this.controller.abort();\n this.pendingKeysSet.forEach((v, k) => this.pendingKeysSet.delete(k));\n this.emit(true);\n }\n async resolveData(signal) {\n let aborted = false;\n if (!this.done) {\n let onAbort = () => this.cancel();\n signal.addEventListener(\"abort\", onAbort);\n aborted = await new Promise(resolve => {\n this.subscribe(aborted => {\n signal.removeEventListener(\"abort\", onAbort);\n if (aborted || this.done) {\n resolve(aborted);\n }\n });\n });\n }\n return aborted;\n }\n get done() {\n return this.pendingKeysSet.size === 0;\n }\n get unwrappedData() {\n invariant(this.data !== null && this.done, \"Can only unwrap data on initialized and settled deferreds\");\n return Object.entries(this.data).reduce((acc, _ref3) => {\n let [key, value] = _ref3;\n return Object.assign(acc, {\n [key]: unwrapTrackedPromise(value)\n });\n }, {});\n }\n get pendingKeys() {\n return Array.from(this.pendingKeysSet);\n }\n}\nfunction isTrackedPromise(value) {\n return value instanceof Promise && value._tracked === true;\n}\nfunction unwrapTrackedPromise(value) {\n if (!isTrackedPromise(value)) {\n return value;\n }\n if (value._error) {\n throw value._error;\n }\n return value._data;\n}\nconst defer = function defer(data, init) {\n if (init === void 0) {\n init = {};\n }\n let responseInit = typeof init === \"number\" ? {\n status: init\n } : init;\n return new DeferredData(data, responseInit);\n};\n/**\n * A redirect response. Sets the status code and the `Location` header.\n * Defaults to \"302 Found\".\n */\nconst redirect = function redirect(url, init) {\n if (init === void 0) {\n init = 302;\n }\n let responseInit = init;\n if (typeof responseInit === \"number\") {\n responseInit = {\n status: responseInit\n };\n } else if (typeof responseInit.status === \"undefined\") {\n responseInit.status = 302;\n }\n let headers = new Headers(responseInit.headers);\n headers.set(\"Location\", url);\n return new Response(null, _extends({}, responseInit, {\n headers\n }));\n};\n/**\n * A redirect response that will force a document reload to the new location.\n * Sets the status code and the `Location` header.\n * Defaults to \"302 Found\".\n */\nconst redirectDocument = (url, init) => {\n let response = redirect(url, init);\n response.headers.set(\"X-Remix-Reload-Document\", \"true\");\n return response;\n};\n/**\n * A redirect response that will perform a `history.replaceState` instead of a\n * `history.pushState` for client-side navigation redirects.\n * Sets the status code and the `Location` header.\n * Defaults to \"302 Found\".\n */\nconst replace = (url, init) => {\n let response = redirect(url, init);\n response.headers.set(\"X-Remix-Replace\", \"true\");\n return response;\n};\n/**\n * @private\n * Utility class we use to hold auto-unwrapped 4xx/5xx Response bodies\n *\n * We don't export the class for public use since it's an implementation\n * detail, but we export the interface above so folks can build their own\n * abstractions around instances via isRouteErrorResponse()\n */\nclass ErrorResponseImpl {\n constructor(status, statusText, data, internal) {\n if (internal === void 0) {\n internal = false;\n }\n this.status = status;\n this.statusText = statusText || \"\";\n this.internal = internal;\n if (data instanceof Error) {\n this.data = data.toString();\n this.error = data;\n } else {\n this.data = data;\n }\n }\n}\n/**\n * Check if the given error is an ErrorResponse generated from a 4xx/5xx\n * Response thrown from an action/loader\n */\nfunction isRouteErrorResponse(error) {\n return error != null && typeof error.status === \"number\" && typeof error.statusText === \"string\" && typeof error.internal === \"boolean\" && \"data\" in error;\n}\n\nconst validMutationMethodsArr = [\"post\", \"put\", \"patch\", \"delete\"];\nconst validMutationMethods = new Set(validMutationMethodsArr);\nconst validRequestMethodsArr = [\"get\", ...validMutationMethodsArr];\nconst validRequestMethods = new Set(validRequestMethodsArr);\nconst redirectStatusCodes = new Set([301, 302, 303, 307, 308]);\nconst redirectPreserveMethodStatusCodes = new Set([307, 308]);\nconst IDLE_NAVIGATION = {\n state: \"idle\",\n location: undefined,\n formMethod: undefined,\n formAction: undefined,\n formEncType: undefined,\n formData: undefined,\n json: undefined,\n text: undefined\n};\nconst IDLE_FETCHER = {\n state: \"idle\",\n data: undefined,\n formMethod: undefined,\n formAction: undefined,\n formEncType: undefined,\n formData: undefined,\n json: undefined,\n text: undefined\n};\nconst IDLE_BLOCKER = {\n state: \"unblocked\",\n proceed: undefined,\n reset: undefined,\n location: undefined\n};\nconst ABSOLUTE_URL_REGEX = /^(?:[a-z][a-z0-9+.-]*:|\\/\\/)/i;\nconst defaultMapRouteProperties = route => ({\n hasErrorBoundary: Boolean(route.hasErrorBoundary)\n});\nconst TRANSITIONS_STORAGE_KEY = \"remix-router-transitions\";\n//#endregion\n////////////////////////////////////////////////////////////////////////////////\n//#region createRouter\n////////////////////////////////////////////////////////////////////////////////\n/**\n * Create a router and listen to history POP navigations\n */\nfunction createRouter(init) {\n const routerWindow = init.window ? init.window : typeof window !== \"undefined\" ? window : undefined;\n const isBrowser = typeof routerWindow !== \"undefined\" && typeof routerWindow.document !== \"undefined\" && typeof routerWindow.document.createElement !== \"undefined\";\n const isServer = !isBrowser;\n invariant(init.routes.length > 0, \"You must provide a non-empty routes array to createRouter\");\n let mapRouteProperties;\n if (init.mapRouteProperties) {\n mapRouteProperties = init.mapRouteProperties;\n } else if (init.detectErrorBoundary) {\n // If they are still using the deprecated version, wrap it with the new API\n let detectErrorBoundary = init.detectErrorBoundary;\n mapRouteProperties = route => ({\n hasErrorBoundary: detectErrorBoundary(route)\n });\n } else {\n mapRouteProperties = defaultMapRouteProperties;\n }\n // Routes keyed by ID\n let manifest = {};\n // Routes in tree format for matching\n let dataRoutes = convertRoutesToDataRoutes(init.routes, mapRouteProperties, undefined, manifest);\n let inFlightDataRoutes;\n let basename = init.basename || \"/\";\n let dataStrategyImpl = init.unstable_dataStrategy || defaultDataStrategy;\n let patchRoutesOnMissImpl = init.unstable_patchRoutesOnMiss;\n // Config driven behavior flags\n let future = _extends({\n v7_fetcherPersist: false,\n v7_normalizeFormMethod: false,\n v7_partialHydration: false,\n v7_prependBasename: false,\n v7_relativeSplatPath: false,\n v7_skipActionErrorRevalidation: false\n }, init.future);\n // Cleanup function for history\n let unlistenHistory = null;\n // Externally-provided functions to call on all state changes\n let subscribers = new Set();\n // Externally-provided object to hold scroll restoration locations during routing\n let savedScrollPositions = null;\n // Externally-provided function to get scroll restoration keys\n let getScrollRestorationKey = null;\n // Externally-provided function to get current scroll position\n let getScrollPosition = null;\n // One-time flag to control the initial hydration scroll restoration. Because\n // we don't get the saved positions from <ScrollRestoration /> until _after_\n // the initial render, we need to manually trigger a separate updateState to\n // send along the restoreScrollPosition\n // Set to true if we have `hydrationData` since we assume we were SSR'd and that\n // SSR did the initial scroll restoration.\n let initialScrollRestored = init.hydrationData != null;\n let initialMatches = matchRoutes(dataRoutes, init.history.location, basename);\n let initialErrors = null;\n if (initialMatches == null && !patchRoutesOnMissImpl) {\n // If we do not match a user-provided-route, fall back to the root\n // to allow the error boundary to take over\n let error = getInternalRouterError(404, {\n pathname: init.history.location.pathname\n });\n let {\n matches,\n route\n } = getShortCircuitMatches(dataRoutes);\n initialMatches = matches;\n initialErrors = {\n [route.id]: error\n };\n }\n // In SPA apps, if the user provided a patchRoutesOnMiss implementation and\n // our initial match is a splat route, clear them out so we run through lazy\n // discovery on hydration in case there's a more accurate lazy route match.\n // In SSR apps (with `hydrationData`), we expect that the server will send\n // up the proper matched routes so we don't want to run lazy discovery on\n // initial hydration and want to hydrate into the splat route.\n if (initialMatches && !init.hydrationData) {\n let fogOfWar = checkFogOfWar(initialMatches, dataRoutes, init.history.location.pathname);\n if (fogOfWar.active) {\n initialMatches = null;\n }\n }\n let initialized;\n if (!initialMatches) {\n initialized = false;\n initialMatches = [];\n // If partial hydration and fog of war is enabled, we will be running\n // `patchRoutesOnMiss` during hydration so include any partial matches as\n // the initial matches so we can properly render `HydrateFallback`'s\n if (future.v7_partialHydration) {\n let fogOfWar = checkFogOfWar(null, dataRoutes, init.history.location.pathname);\n if (fogOfWar.active && fogOfWar.matches) {\n initialMatches = fogOfWar.matches;\n }\n }\n } else if (initialMatches.some(m => m.route.lazy)) {\n // All initialMatches need to be loaded before we're ready. If we have lazy\n // functions around still then we'll need to run them in initialize()\n initialized = false;\n } else if (!initialMatches.some(m => m.route.loader)) {\n // If we've got no loaders to run, then we're good to go\n initialized = true;\n } else if (future.v7_partialHydration) {\n // If partial hydration is enabled, we're initialized so long as we were\n // provided with hydrationData for every route with a loader, and no loaders\n // were marked for explicit hydration\n let loaderData = init.hydrationData ? init.hydrationData.loaderData : null;\n let errors = init.hydrationData ? init.hydrationData.errors : null;\n let isRouteInitialized = m => {\n // No loader, nothing to initialize\n if (!m.route.loader) {\n return true;\n }\n // Explicitly opting-in to running on hydration\n if (typeof m.route.loader === \"function\" && m.route.loader.hydrate === true) {\n return false;\n }\n // Otherwise, initialized if hydrated with data or an error\n return loaderData && loaderData[m.route.id] !== undefined || errors && errors[m.route.id] !== undefined;\n };\n // If errors exist, don't consider routes below the boundary\n if (errors) {\n let idx = initialMatches.findIndex(m => errors[m.route.id] !== undefined);\n initialized = initialMatches.slice(0, idx + 1).every(isRouteInitialized);\n } else {\n initialized = initialMatches.every(isRouteInitialized);\n }\n } else {\n // Without partial hydration - we're initialized if we were provided any\n // hydrationData - which is expected to be complete\n initialized = init.hydrationData != null;\n }\n let router;\n let state = {\n historyAction: init.history.action,\n location: init.history.location,\n matches: initialMatches,\n initialized,\n navigation: IDLE_NAVIGATION,\n // Don't restore on initial updateState() if we were SSR'd\n restoreScrollPosition: init.hydrationData != null ? false : null,\n preventScrollReset: false,\n revalidation: \"idle\",\n loaderData: init.hydrationData && init.hydrationData.loaderData || {},\n actionData: init.hydrationData && init.hydrationData.actionData || null,\n errors: init.hydrationData && init.hydrationData.errors || initialErrors,\n fetchers: new Map(),\n blockers: new Map()\n };\n // -- Stateful internal variables to manage navigations --\n // Current navigation in progress (to be committed in completeNavigation)\n let pendingAction = Action.Pop;\n // Should the current navigation prevent the scroll reset if scroll cannot\n // be restored?\n let pendingPreventScrollReset = false;\n // AbortController for the active navigation\n let pendingNavigationController;\n // Should the current navigation enable document.startViewTransition?\n let pendingViewTransitionEnabled = false;\n // Store applied view transitions so we can apply them on POP\n let appliedViewTransitions = new Map();\n // Cleanup function for persisting applied transitions to sessionStorage\n let removePageHideEventListener = null;\n // We use this to avoid touching history in completeNavigation if a\n // revalidation is entirely uninterrupted\n let isUninterruptedRevalidation = false;\n // Use this internal flag to force revalidation of all loaders:\n // - submissions (completed or interrupted)\n // - useRevalidator()\n // - X-Remix-Revalidate (from redirect)\n let isRevalidationRequired = false;\n // Use this internal array to capture routes that require revalidation due\n // to a cancelled deferred on action submission\n let cancelledDeferredRoutes = [];\n // Use this internal array to capture fetcher loads that were cancelled by an\n // action navigation and require revalidation\n let cancelledFetcherLoads = new Set();\n // AbortControllers for any in-flight fetchers\n let fetchControllers = new Map();\n // Track loads based on the order in which they started\n let incrementingLoadId = 0;\n // Track the outstanding pending navigation data load to be compared against\n // the globally incrementing load when a fetcher load lands after a completed\n // navigation\n let pendingNavigationLoadId = -1;\n // Fetchers that triggered data reloads as a result of their actions\n let fetchReloadIds = new Map();\n // Fetchers that triggered redirect navigations\n let fetchRedirectIds = new Set();\n // Most recent href/match for fetcher.load calls for fetchers\n let fetchLoadMatches = new Map();\n // Ref-count mounted fetchers so we know when it's ok to clean them up\n let activeFetchers = new Map();\n // Fetchers that have requested a delete when using v7_fetcherPersist,\n // they'll be officially removed after they return to idle\n let deletedFetchers = new Set();\n // Store DeferredData instances for active route matches. When a\n // route loader returns defer() we stick one in here. Then, when a nested\n // promise resolves we update loaderData. If a new navigation starts we\n // cancel active deferreds for eliminated routes.\n let activeDeferreds = new Map();\n // Store blocker functions in a separate Map outside of router state since\n // we don't need to update UI state if they change\n let blockerFunctions = new Map();\n // Map of pending patchRoutesOnMiss() promises (keyed by path/matches) so\n // that we only kick them off once for a given combo\n let pendingPatchRoutes = new Map();\n // Flag to ignore the next history update, so we can revert the URL change on\n // a POP navigation that was blocked by the user without touching router state\n let ignoreNextHistoryUpdate = false;\n // Initialize the router, all side effects should be kicked off from here.\n // Implemented as a Fluent API for ease of:\n // let router = createRouter(init).initialize();\n function initialize() {\n // If history informs us of a POP navigation, start the navigation but do not update\n // state. We'll update our own state once the navigation completes\n unlistenHistory = init.history.listen(_ref => {\n let {\n action: historyAction,\n location,\n delta\n } = _ref;\n // Ignore this event if it was just us resetting the URL from a\n // blocked POP navigation\n if (ignoreNextHistoryUpdate) {\n ignoreNextHistoryUpdate = false;\n return;\n }\n warning(blockerFunctions.size === 0 || delta != null, \"You are trying to use a blocker on a POP navigation to a location \" + \"that was not created by @remix-run/router. This will fail silently in \" + \"production. This can happen if you are navigating outside the router \" + \"via `window.history.pushState`/`window.location.hash` instead of using \" + \"router navigation APIs. This can also happen if you are using \" + \"createHashRouter and the user manually changes the URL.\");\n let blockerKey = shouldBlockNavigation({\n currentLocation: state.location,\n nextLocation: location,\n historyAction\n });\n if (blockerKey && delta != null) {\n // Restore the URL to match the current UI, but don't update router state\n ignoreNextHistoryUpdate = true;\n init.history.go(delta * -1);\n // Put the blocker into a blocked state\n updateBlocker(blockerKey, {\n state: \"blocked\",\n location,\n proceed() {\n updateBlocker(blockerKey, {\n state: \"proceeding\",\n proceed: undefined,\n reset: undefined,\n location\n });\n // Re-do the same POP navigation we just blocked\n init.history.go(delta);\n },\n reset() {\n let blockers = new Map(state.blockers);\n blockers.set(blockerKey, IDLE_BLOCKER);\n updateState({\n blockers\n });\n }\n });\n return;\n }\n return startNavigation(historyAction, location);\n });\n if (isBrowser) {\n // FIXME: This feels gross. How can we cleanup the lines between\n // scrollRestoration/appliedTransitions persistance?\n restoreAppliedTransitions(routerWindow, appliedViewTransitions);\n let _saveAppliedTransitions = () => persistAppliedTransitions(routerWindow, appliedViewTransitions);\n routerWindow.addEventListener(\"pagehide\", _saveAppliedTransitions);\n removePageHideEventListener = () => routerWindow.removeEventListener(\"pagehide\", _saveAppliedTransitions);\n }\n // Kick off initial data load if needed. Use Pop to avoid modifying history\n // Note we don't do any handling of lazy here. For SPA's it'll get handled\n // in the normal navigation flow. For SSR it's expected that lazy modules are\n // resolved prior to router creation since we can't go into a fallbackElement\n // UI for SSR'd apps\n if (!state.initialized) {\n startNavigation(Action.Pop, state.location, {\n initialHydration: true\n });\n }\n return router;\n }\n // Clean up a router and it's side effects\n function dispose() {\n if (unlistenHistory) {\n unlistenHistory();\n }\n if (removePageHideEventListener) {\n removePageHideEventListener();\n }\n subscribers.clear();\n pendingNavigationController && pendingNavigationController.abort();\n state.fetchers.forEach((_, key) => deleteFetcher(key));\n state.blockers.forEach((_, key) => deleteBlocker(key));\n }\n // Subscribe to state updates for the router\n function subscribe(fn) {\n subscribers.add(fn);\n return () => subscribers.delete(fn);\n }\n // Update our state and notify the calling context of the change\n function updateState(newState, opts) {\n if (opts === void 0) {\n opts = {};\n }\n state = _extends({}, state, newState);\n // Prep fetcher cleanup so we can tell the UI which fetcher data entries\n // can be removed\n let completedFetchers = [];\n let deletedFetchersKeys = [];\n if (future.v7_fetcherPersist) {\n state.fetchers.forEach((fetcher, key) => {\n if (fetcher.state === \"idle\") {\n if (deletedFetchers.has(key)) {\n // Unmounted from the UI and can be totally removed\n deletedFetchersKeys.push(key);\n } else {\n // Returned to idle but still mounted in the UI, so semi-remains for\n // revalidations and such\n completedFetchers.push(key);\n }\n }\n });\n }\n // Iterate over a local copy so that if flushSync is used and we end up\n // removing and adding a new subscriber due to the useCallback dependencies,\n // we don't get ourselves into a loop calling the new subscriber immediately\n [...subscribers].forEach(subscriber => subscriber(state, {\n deletedFetchers: deletedFetchersKeys,\n unstable_viewTransitionOpts: opts.viewTransitionOpts,\n unstable_flushSync: opts.flushSync === true\n }));\n // Remove idle fetchers from state since we only care about in-flight fetchers.\n if (future.v7_fetcherPersist) {\n completedFetchers.forEach(key => state.fetchers.delete(key));\n deletedFetchersKeys.forEach(key => deleteFetcher(key));\n }\n }\n // Complete a navigation returning the state.navigation back to the IDLE_NAVIGATION\n // and setting state.[historyAction/location/matches] to the new route.\n // - Location is a required param\n // - Navigation will always be set to IDLE_NAVIGATION\n // - Can pass any other state in newState\n function completeNavigation(location, newState, _temp) {\n var _location$state, _location$state2;\n let {\n flushSync\n } = _temp === void 0 ? {} : _temp;\n // Deduce if we're in a loading/actionReload state:\n // - We have committed actionData in the store\n // - The current navigation was a mutation submission\n // - We're past the submitting state and into the loading state\n // - The location being loaded is not the result of a redirect\n let isActionReload = state.actionData != null && state.navigation.formMethod != null && isMutationMethod(state.navigation.formMethod) && state.navigation.state === \"loading\" && ((_location$state = location.state) == null ? void 0 : _location$state._isRedirect) !== true;\n let actionData;\n if (newState.actionData) {\n if (Object.keys(newState.actionData).length > 0) {\n actionData = newState.actionData;\n } else {\n // Empty actionData -> clear prior actionData due to an action error\n actionData = null;\n }\n } else if (isActionReload) {\n // Keep the current data if we're wrapping up the action reload\n actionData = state.actionData;\n } else {\n // Clear actionData on any other completed navigations\n actionData = null;\n }\n // Always preserve any existing loaderData from re-used routes\n let loaderData = newState.loaderData ? mergeLoaderData(state.loaderData, newState.loaderData, newState.matches || [], newState.errors) : state.loaderData;\n // On a successful navigation we can assume we got through all blockers\n // so we can start fresh\n let blockers = state.blockers;\n if (blockers.size > 0) {\n blockers = new Map(blockers);\n blockers.forEach((_, k) => blockers.set(k, IDLE_BLOCKER));\n }\n // Always respect the user flag. Otherwise don't reset on mutation\n // submission navigations unless they redirect\n let preventScrollReset = pendingPreventScrollReset === true || state.navigation.formMethod != null && isMutationMethod(state.navigation.formMethod) && ((_location$state2 = location.state) == null ? void 0 : _location$state2._isRedirect) !== true;\n // Commit any in-flight routes at the end of the HMR revalidation \"navigation\"\n if (inFlightDataRoutes) {\n dataRoutes = inFlightDataRoutes;\n inFlightDataRoutes = undefined;\n }\n if (isUninterruptedRevalidation) ; else if (pendingAction === Action.Pop) ; else if (pendingAction === Action.Push) {\n init.history.push(location, location.state);\n } else if (pendingAction === Action.Replace) {\n init.history.replace(location, location.state);\n }\n let viewTransitionOpts;\n // On POP, enable transitions if they were enabled on the original navigation\n if (pendingAction === Action.Pop) {\n // Forward takes precedence so they behave like the original navigation\n let priorPaths = appliedViewTransitions.get(state.location.pathname);\n if (priorPaths && priorPaths.has(location.pathname)) {\n viewTransitionOpts = {\n currentLocation: state.location,\n nextLocation: location\n };\n } else if (appliedViewTransitions.has(location.pathname)) {\n // If we don't have a previous forward nav, assume we're popping back to\n // the new location and enable if that location previously enabled\n viewTransitionOpts = {\n currentLocation: location,\n nextLocation: state.location\n };\n }\n } else if (pendingViewTransitionEnabled) {\n // Store the applied transition on PUSH/REPLACE\n let toPaths = appliedViewTransitions.get(state.location.pathname);\n if (toPaths) {\n toPaths.add(location.pathname);\n } else {\n toPaths = new Set([location.pathname]);\n appliedViewTransitions.set(state.location.pathname, toPaths);\n }\n viewTransitionOpts = {\n currentLocation: state.location,\n nextLocation: location\n };\n }\n updateState(_extends({}, newState, {\n actionData,\n loaderData,\n historyAction: pendingAction,\n location,\n initialized: true,\n navigation: IDLE_NAVIGATION,\n revalidation: \"idle\",\n restoreScrollPosition: getSavedScrollPosition(location, newState.matches || state.matches),\n preventScrollReset,\n blockers\n }), {\n viewTransitionOpts,\n flushSync: flushSync === true\n });\n // Reset stateful navigation vars\n pendingAction = Action.Pop;\n pendingPreventScrollReset = false;\n pendingViewTransitionEnabled = false;\n isUninterruptedRevalidation = false;\n isRevalidationRequired = false;\n cancelledDeferredRoutes = [];\n }\n // Trigger a navigation event, which can either be a numerical POP or a PUSH\n // replace with an optional submission\n async function navigate(to, opts) {\n if (typeof to === \"number\") {\n init.history.go(to);\n return;\n }\n let normalizedPath = normalizeTo(state.location, state.matches, basename, future.v7_prependBasename, to, future.v7_relativeSplatPath, opts == null ? void 0 : opts.fromRouteId, opts == null ? void 0 : opts.relative);\n let {\n path,\n submission,\n error\n } = normalizeNavigateOptions(future.v7_normalizeFormMethod, false, normalizedPath, opts);\n let currentLocation = state.location;\n let nextLocation = createLocation(state.location, path, opts && opts.state);\n // When using navigate as a PUSH/REPLACE we aren't reading an already-encoded\n // URL from window.location, so we need to encode it here so the behavior\n // remains the same as POP and non-data-router usages. new URL() does all\n // the same encoding we'd get from a history.pushState/window.location read\n // without having to touch history\n nextLocation = _extends({}, nextLocation, init.history.encodeLocation(nextLocation));\n let userReplace = opts && opts.replace != null ? opts.replace : undefined;\n let historyAction = Action.Push;\n if (userReplace === true) {\n historyAction = Action.Replace;\n } else if (userReplace === false) ; else if (submission != null && isMutationMethod(submission.formMethod) && submission.formAction === state.location.pathname + state.location.search) {\n // By default on submissions to the current location we REPLACE so that\n // users don't have to double-click the back button to get to the prior\n // location. If the user redirects to a different location from the\n // action/loader this will be ignored and the redirect will be a PUSH\n historyAction = Action.Replace;\n }\n let preventScrollReset = opts && \"preventScrollReset\" in opts ? opts.preventScrollReset === true : undefined;\n let flushSync = (opts && opts.unstable_flushSync) === true;\n let blockerKey = shouldBlockNavigation({\n currentLocation,\n nextLocation,\n historyAction\n });\n if (blockerKey) {\n // Put the blocker into a blocked state\n updateBlocker(blockerKey, {\n state: \"blocked\",\n location: nextLocation,\n proceed() {\n updateBlocker(blockerKey, {\n state: \"proceeding\",\n proceed: undefined,\n reset: undefined,\n location: nextLocation\n });\n // Send the same navigation through\n navigate(to, opts);\n },\n reset() {\n let blockers = new Map(state.blockers);\n blockers.set(blockerKey, IDLE_BLOCKER);\n updateState({\n blockers\n });\n }\n });\n return;\n }\n return await startNavigation(historyAction, nextLocation, {\n submission,\n // Send through the formData serialization error if we have one so we can\n // render at the right error boundary after we match routes\n pendingError: error,\n preventScrollReset,\n replace: opts && opts.replace,\n enableViewTransition: opts && opts.unstable_viewTransition,\n flushSync\n });\n }\n // Revalidate all current loaders. If a navigation is in progress or if this\n // is interrupted by a navigation, allow this to \"succeed\" by calling all\n // loaders during the next loader round\n function revalidate() {\n interruptActiveLoads();\n updateState({\n revalidation: \"loading\"\n });\n // If we're currently submitting an action, we don't need to start a new\n // navigation, we'll just let the follow up loader execution call all loaders\n if (state.navigation.state === \"submitting\") {\n return;\n }\n // If we're currently in an idle state, start a new navigation for the current\n // action/location and mark it as uninterrupted, which will skip the history\n // update in completeNavigation\n if (state.navigation.state === \"idle\") {\n startNavigation(state.historyAction, state.location, {\n startUninterruptedRevalidation: true\n });\n return;\n }\n // Otherwise, if we're currently in a loading state, just start a new\n // navigation to the navigation.location but do not trigger an uninterrupted\n // revalidation so that history correctly updates once the navigation completes\n startNavigation(pendingAction || state.historyAction, state.navigation.location, {\n overrideNavigation: state.navigation\n });\n }\n // Start a navigation to the given action/location. Can optionally provide a\n // overrideNavigation which will override the normalLoad in the case of a redirect\n // navigation\n async function startNavigation(historyAction, location, opts) {\n // Abort any in-progress navigations and start a new one. Unset any ongoing\n // uninterrupted revalidations unless told otherwise, since we want this\n // new navigation to update history normally\n pendingNavigationController && pendingNavigationController.abort();\n pendingNavigationController = null;\n pendingAction = historyAction;\n isUninterruptedRevalidation = (opts && opts.startUninterruptedRevalidation) === true;\n // Save the current scroll position every time we start a new navigation,\n // and track whether we should reset scroll on completion\n saveScrollPosition(state.location, state.matches);\n pendingPreventScrollReset = (opts && opts.preventScrollReset) === true;\n pendingViewTransitionEnabled = (opts && opts.enableViewTransition) === true;\n let routesToUse = inFlightDataRoutes || dataRoutes;\n let loadingNavigation = opts && opts.overrideNavigation;\n let matches = matchRoutes(routesToUse, location, basename);\n let flushSync = (opts && opts.flushSync) === true;\n let fogOfWar = checkFogOfWar(matches, routesToUse, location.pathname);\n if (fogOfWar.active && fogOfWar.matches) {\n matches = fogOfWar.matches;\n }\n // Short circuit with a 404 on the root error boundary if we match nothing\n if (!matches) {\n let {\n error,\n notFoundMatches,\n route\n } = handleNavigational404(location.pathname);\n completeNavigation(location, {\n matches: notFoundMatches,\n loaderData: {},\n errors: {\n [route.id]: error\n }\n }, {\n flushSync\n });\n return;\n }\n // Short circuit if it's only a hash change and not a revalidation or\n // mutation submission.\n //\n // Ignore on initial page loads because since the initial load will always\n // be \"same hash\". For example, on /page#hash and submit a <Form method=\"post\">\n // which will default to a navigation to /page\n if (state.initialized && !isRevalidationRequired && isHashChangeOnly(state.location, location) && !(opts && opts.submission && isMutationMethod(opts.submission.formMethod))) {\n completeNavigation(location, {\n matches\n }, {\n flushSync\n });\n return;\n }\n // Create a controller/Request for this navigation\n pendingNavigationController = new AbortController();\n let request = createClientSideRequest(init.history, location, pendingNavigationController.signal, opts && opts.submission);\n let pendingActionResult;\n if (opts && opts.pendingError) {\n // If we have a pendingError, it means the user attempted a GET submission\n // with binary FormData so assign here and skip to handleLoaders. That\n // way we handle calling loaders above the boundary etc. It's not really\n // different from an actionError in that sense.\n pendingActionResult = [findNearestBoundary(matches).route.id, {\n type: ResultType.error,\n error: opts.pendingError\n }];\n } else if (opts && opts.submission && isMutationMethod(opts.submission.formMethod)) {\n // Call action if we received an action submission\n let actionResult = await handleAction(request, location, opts.submission, matches, fogOfWar.active, {\n replace: opts.replace,\n flushSync\n });\n if (actionResult.shortCircuited) {\n return;\n }\n // If we received a 404 from handleAction, it's because we couldn't lazily\n // discover the destination route so we don't want to call loaders\n if (actionResult.pendingActionResult) {\n let [routeId, result] = actionResult.pendingActionResult;\n if (isErrorResult(result) && isRouteErrorResponse(result.error) && result.error.status === 404) {\n pendingNavigationController = null;\n completeNavigation(location, {\n matches: actionResult.matches,\n loaderData: {},\n errors: {\n [routeId]: result.error\n }\n });\n return;\n }\n }\n matches = actionResult.matches || matches;\n pendingActionResult = actionResult.pendingActionResult;\n loadingNavigation = getLoadingNavigation(location, opts.submission);\n flushSync = false;\n // No need to do fog of war matching again on loader execution\n fogOfWar.active = false;\n // Create a GET request for the loaders\n request = createClientSideRequest(init.history, request.url, request.signal);\n }\n // Call loaders\n let {\n shortCircuited,\n matches: updatedMatches,\n loaderData,\n errors\n } = await handleLoaders(request, location, matches, fogOfWar.active, loadingNavigation, opts && opts.submission, opts && opts.fetcherSubmission, opts && opts.replace, opts && opts.initialHydration === true, flushSync, pendingActionResult);\n if (shortCircuited) {\n return;\n }\n // Clean up now that the action/loaders have completed. Don't clean up if\n // we short circuited because pendingNavigationController will have already\n // been assigned to a new controller for the next navigation\n pendingNavigationController = null;\n completeNavigation(location, _extends({\n matches: updatedMatches || matches\n }, getActionDataForCommit(pendingActionResult), {\n loaderData,\n errors\n }));\n }\n // Call the action matched by the leaf route for this navigation and handle\n // redirects/errors\n async function handleAction(request, location, submission, matches, isFogOfWar, opts) {\n if (opts === void 0) {\n opts = {};\n }\n interruptActiveLoads();\n // Put us in a submitting state\n let navigation = getSubmittingNavigation(location, submission);\n updateState({\n navigation\n }, {\n flushSync: opts.flushSync === true\n });\n if (isFogOfWar) {\n let discoverResult = await discoverRoutes(matches, location.pathname, request.signal);\n if (discoverResult.type === \"aborted\") {\n return {\n shortCircuited: true\n };\n } else if (discoverResult.type === \"error\") {\n let {\n boundaryId,\n error\n } = handleDiscoverRouteError(location.pathname, discoverResult);\n return {\n matches: discoverResult.partialMatches,\n pendingActionResult: [boundaryId, {\n type: ResultType.error,\n error\n }]\n };\n } else if (!discoverResult.matches) {\n let {\n notFoundMatches,\n error,\n route\n } = handleNavigational404(location.pathname);\n return {\n matches: notFoundMatches,\n pendingActionResult: [route.id, {\n type: ResultType.error,\n error\n }]\n };\n } else {\n matches = discoverResult.matches;\n }\n }\n // Call our action and get the result\n let result;\n let actionMatch = getTargetMatch(matches, location);\n if (!actionMatch.route.action && !actionMatch.route.lazy) {\n result = {\n type: ResultType.error,\n error: getInternalRouterError(405, {\n method: request.method,\n pathname: location.pathname,\n routeId: actionMatch.route.id\n })\n };\n } else {\n let results = await callDataStrategy(\"action\", request, [actionMatch], matches);\n result = results[0];\n if (request.signal.aborted) {\n return {\n shortCircuited: true\n };\n }\n }\n if (isRedirectResult(result)) {\n let replace;\n if (opts && opts.replace != null) {\n replace = opts.replace;\n } else {\n // If the user didn't explicity indicate replace behavior, replace if\n // we redirected to the exact same location we're currently at to avoid\n // double back-buttons\n let location = normalizeRedirectLocation(result.response.headers.get(\"Location\"), new URL(request.url), basename);\n replace = location === state.location.pathname + state.location.search;\n }\n await startRedirectNavigation(request, result, {\n submission,\n replace\n });\n return {\n shortCircuited: true\n };\n }\n if (isDeferredResult(result)) {\n throw getInternalRouterError(400, {\n type: \"defer-action\"\n });\n }\n if (isErrorResult(result)) {\n // Store off the pending error - we use it to determine which loaders\n // to call and will commit it when we complete the navigation\n let boundaryMatch = findNearestBoundary(matches, actionMatch.route.id);\n // By default, all submissions to the current location are REPLACE\n // navigations, but if the action threw an error that'll be rendered in\n // an errorElement, we fall back to PUSH so that the user can use the\n // back button to get back to the pre-submission form location to try\n // again\n if ((opts && opts.replace) !== true) {\n pendingAction = Action.Push;\n }\n return {\n matches,\n pendingActionResult: [boundaryMatch.route.id, result]\n };\n }\n return {\n matches,\n pendingActionResult: [actionMatch.route.id, result]\n };\n }\n // Call all applicable loaders for the given matches, handling redirects,\n // errors, etc.\n async function handleLoaders(request, location, matches, isFogOfWar, overrideNavigation, submission, fetcherSubmission, replace, initialHydration, flushSync, pendingActionResult) {\n // Figure out the right navigation we want to use for data loading\n let loadingNavigation = overrideNavigation || getLoadingNavigation(location, submission);\n // If this was a redirect from an action we don't have a \"submission\" but\n // we have it on the loading navigation so use that if available\n let activeSubmission = submission || fetcherSubmission || getSubmissionFromNavigation(loadingNavigation);\n // If this is an uninterrupted revalidation, we remain in our current idle\n // state. If not, we need to switch to our loading state and load data,\n // preserving any new action data or existing action data (in the case of\n // a revalidation interrupting an actionReload)\n // If we have partialHydration enabled, then don't update the state for the\n // initial data load since it's not a \"navigation\"\n let shouldUpdateNavigationState = !isUninterruptedRevalidation && (!future.v7_partialHydration || !initialHydration);\n // When fog of war is enabled, we enter our `loading` state earlier so we\n // can discover new routes during the `loading` state. We skip this if\n // we've already run actions since we would have done our matching already.\n // If the children() function threw then, we want to proceed with the\n // partial matches it discovered.\n if (isFogOfWar) {\n if (shouldUpdateNavigationState) {\n let actionData = getUpdatedActionData(pendingActionResult);\n updateState(_extends({\n navigation: loadingNavigation\n }, actionData !== undefined ? {\n actionData\n } : {}), {\n flushSync\n });\n }\n let discoverResult = await discoverRoutes(matches, location.pathname, request.signal);\n if (discoverResult.type === \"aborted\") {\n return {\n shortCircuited: true\n };\n } else if (discoverResult.type === \"error\") {\n let {\n boundaryId,\n error\n } = handleDiscoverRouteError(location.pathname, discoverResult);\n return {\n matches: discoverResult.partialMatches,\n loaderData: {},\n errors: {\n [boundaryId]: error\n }\n };\n } else if (!discoverResult.matches) {\n let {\n error,\n notFoundMatches,\n route\n } = handleNavigational404(location.pathname);\n return {\n matches: notFoundMatches,\n loaderData: {},\n errors: {\n [route.id]: error\n }\n };\n } else {\n matches = discoverResult.matches;\n }\n }\n let routesToUse = inFlightDataRoutes || dataRoutes;\n let [matchesToLoad, revalidatingFetchers] = getMatchesToLoad(init.history, state, matches, activeSubmission, location, future.v7_partialHydration && initialHydration === true, future.v7_skipActionErrorRevalidation, isRevalidationRequired, cancelledDeferredRoutes, cancelledFetcherLoads, deletedFetchers, fetchLoadMatches, fetchRedirectIds, routesToUse, basename, pendingActionResult);\n // Cancel pending deferreds for no-longer-matched routes or routes we're\n // about to reload. Note that if this is an action reload we would have\n // already cancelled all pending deferreds so this would be a no-op\n cancelActiveDeferreds(routeId => !(matches && matches.some(m => m.route.id === routeId)) || matchesToLoad && matchesToLoad.some(m => m.route.id === routeId));\n pendingNavigationLoadId = ++incrementingLoadId;\n // Short circuit if we have no loaders to run\n if (matchesToLoad.length === 0 && revalidatingFetchers.length === 0) {\n let updatedFetchers = markFetchRedirectsDone();\n completeNavigation(location, _extends({\n matches,\n loaderData: {},\n // Commit pending error if we're short circuiting\n errors: pendingActionResult && isErrorResult(pendingActionResult[1]) ? {\n [pendingActionResult[0]]: pendingActionResult[1].error\n } : null\n }, getActionDataForCommit(pendingActionResult), updatedFetchers ? {\n fetchers: new Map(state.fetchers)\n } : {}), {\n flushSync\n });\n return {\n shortCircuited: true\n };\n }\n if (shouldUpdateNavigationState) {\n let updates = {};\n if (!isFogOfWar) {\n // Only update navigation/actionNData if we didn't already do it above\n updates.navigation = loadingNavigation;\n let actionData = getUpdatedActionData(pendingActionResult);\n if (actionData !== undefined) {\n updates.actionData = actionData;\n }\n }\n if (revalidatingFetchers.length > 0) {\n updates.fetchers = getUpdatedRevalidatingFetchers(revalidatingFetchers);\n }\n updateState(updates, {\n flushSync\n });\n }\n revalidatingFetchers.forEach(rf => {\n if (fetchControllers.has(rf.key)) {\n abortFetcher(rf.key);\n }\n if (rf.controller) {\n // Fetchers use an independent AbortController so that aborting a fetcher\n // (via deleteFetcher) does not abort the triggering navigation that\n // triggered the revalidation\n fetchControllers.set(rf.key, rf.controller);\n }\n });\n // Proxy navigation abort through to revalidation fetchers\n let abortPendingFetchRevalidations = () => revalidatingFetchers.forEach(f => abortFetcher(f.key));\n if (pendingNavigationController) {\n pendingNavigationController.signal.addEventListener(\"abort\", abortPendingFetchRevalidations);\n }\n let {\n loaderResults,\n fetcherResults\n } = await callLoadersAndMaybeResolveData(state.matches, matches, matchesToLoad, revalidatingFetchers, request);\n if (request.signal.aborted) {\n return {\n shortCircuited: true\n };\n }\n // Clean up _after_ loaders have completed. Don't clean up if we short\n // circuited because fetchControllers would have been aborted and\n // reassigned to new controllers for the next navigation\n if (pendingNavigationController) {\n pendingNavigationController.signal.removeEventListener(\"abort\", abortPendingFetchRevalidations);\n }\n revalidatingFetchers.forEach(rf => fetchControllers.delete(rf.key));\n // If any loaders returned a redirect Response, start a new REPLACE navigation\n let redirect = findRedirect([...loaderResults, ...fetcherResults]);\n if (redirect) {\n if (redirect.idx >= matchesToLoad.length) {\n // If this redirect came from a fetcher make sure we mark it in\n // fetchRedirectIds so it doesn't get revalidated on the next set of\n // loader executions\n let fetcherKey = revalidatingFetchers[redirect.idx - matchesToLoad.length].key;\n fetchRedirectIds.add(fetcherKey);\n }\n await startRedirectNavigation(request, redirect.result, {\n replace\n });\n return {\n shortCircuited: true\n };\n }\n // Process and commit output from loaders\n let {\n loaderData,\n errors\n } = processLoaderData(state, matches, matchesToLoad, loaderResults, pendingActionResult, revalidatingFetchers, fetcherResults, activeDeferreds);\n // Wire up subscribers to update loaderData as promises settle\n activeDeferreds.forEach((deferredData, routeId) => {\n deferredData.subscribe(aborted => {\n // Note: No need to updateState here since the TrackedPromise on\n // loaderData is stable across resolve/reject\n // Remove this instance if we were aborted or if promises have settled\n if (aborted || deferredData.done) {\n activeDeferreds.delete(routeId);\n }\n });\n });\n // During partial hydration, preserve SSR errors for routes that don't re-run\n if (future.v7_partialHydration && initialHydration && state.errors) {\n Object.entries(state.errors).filter(_ref2 => {\n let [id] = _ref2;\n return !matchesToLoad.some(m => m.route.id === id);\n }).forEach(_ref3 => {\n let [routeId, error] = _ref3;\n errors = Object.assign(errors || {}, {\n [routeId]: error\n });\n });\n }\n let updatedFetchers = markFetchRedirectsDone();\n let didAbortFetchLoads = abortStaleFetchLoads(pendingNavigationLoadId);\n let shouldUpdateFetchers = updatedFetchers || didAbortFetchLoads || revalidatingFetchers.length > 0;\n return _extends({\n matches,\n loaderData,\n errors\n }, shouldUpdateFetchers ? {\n fetchers: new Map(state.fetchers)\n } : {});\n }\n function getUpdatedActionData(pendingActionResult) {\n if (pendingActionResult && !isErrorResult(pendingActionResult[1])) {\n // This is cast to `any` currently because `RouteData`uses any and it\n // would be a breaking change to use any.\n // TODO: v7 - change `RouteData` to use `unknown` instead of `any`\n return {\n [pendingActionResult[0]]: pendingActionResult[1].data\n };\n } else if (state.actionData) {\n if (Object.keys(state.actionData).length === 0) {\n return null;\n } else {\n return state.actionData;\n }\n }\n }\n function getUpdatedRevalidatingFetchers(revalidatingFetchers) {\n revalidatingFetchers.forEach(rf => {\n let fetcher = state.fetchers.get(rf.key);\n let revalidatingFetcher = getLoadingFetcher(undefined, fetcher ? fetcher.data : undefined);\n state.fetchers.set(rf.key, revalidatingFetcher);\n });\n return new Map(state.fetchers);\n }\n // Trigger a fetcher load/submit for the given fetcher key\n function fetch(key, routeId, href, opts) {\n if (isServer) {\n throw new Error(\"router.fetch() was called during the server render, but it shouldn't be. \" + \"You are likely calling a useFetcher() method in the body of your component. \" + \"Try moving it to a useEffect or a callback.\");\n }\n if (fetchControllers.has(key)) abortFetcher(key);\n let flushSync = (opts && opts.unstable_flushSync) === true;\n let routesToUse = inFlightDataRoutes || dataRoutes;\n let normalizedPath = normalizeTo(state.location, state.matches, basename, future.v7_prependBasename, href, future.v7_relativeSplatPath, routeId, opts == null ? void 0 : opts.relative);\n let matches = matchRoutes(routesToUse, normalizedPath, basename);\n let fogOfWar = checkFogOfWar(matches, routesToUse, normalizedPath);\n if (fogOfWar.active && fogOfWar.matches) {\n matches = fogOfWar.matches;\n }\n if (!matches) {\n setFetcherError(key, routeId, getInternalRouterError(404, {\n pathname: normalizedPath\n }), {\n flushSync\n });\n return;\n }\n let {\n path,\n submission,\n error\n } = normalizeNavigateOptions(future.v7_normalizeFormMethod, true, normalizedPath, opts);\n if (error) {\n setFetcherError(key, routeId, error, {\n flushSync\n });\n return;\n }\n let match = getTargetMatch(matches, path);\n pendingPreventScrollReset = (opts && opts.preventScrollReset) === true;\n if (submission && isMutationMethod(submission.formMethod)) {\n handleFetcherAction(key, routeId, path, match, matches, fogOfWar.active, flushSync, submission);\n return;\n }\n // Store off the match so we can call it's shouldRevalidate on subsequent\n // revalidations\n fetchLoadMatches.set(key, {\n routeId,\n path\n });\n handleFetcherLoader(key, routeId, path, match, matches, fogOfWar.active, flushSync, submission);\n }\n // Call the action for the matched fetcher.submit(), and then handle redirects,\n // errors, and revalidation\n async function handleFetcherAction(key, routeId, path, match, requestMatches, isFogOfWar, flushSync, submission) {\n interruptActiveLoads();\n fetchLoadMatches.delete(key);\n function detectAndHandle405Error(m) {\n if (!m.route.action && !m.route.lazy) {\n let error = getInternalRouterError(405, {\n method: submission.formMethod,\n pathname: path,\n routeId: routeId\n });\n setFetcherError(key, routeId, error, {\n flushSync\n });\n return true;\n }\n return false;\n }\n if (!isFogOfWar && detectAndHandle405Error(match)) {\n return;\n }\n // Put this fetcher into it's submitting state\n let existingFetcher = state.fetchers.get(key);\n updateFetcherState(key, getSubmittingFetcher(submission, existingFetcher), {\n flushSync\n });\n let abortController = new AbortController();\n let fetchRequest = createClientSideRequest(init.history, path, abortController.signal, submission);\n if (isFogOfWar) {\n let discoverResult = await discoverRoutes(requestMatches, path, fetchRequest.signal);\n if (discoverResult.type === \"aborted\") {\n return;\n } else if (discoverResult.type === \"error\") {\n let {\n error\n } = handleDiscoverRouteError(path, discoverResult);\n setFetcherError(key, routeId, error, {\n flushSync\n });\n return;\n } else if (!discoverResult.matches) {\n setFetcherError(key, routeId, getInternalRouterError(404, {\n pathname: path\n }), {\n flushSync\n });\n return;\n } else {\n requestMatches = discoverResult.matches;\n match = getTargetMatch(requestMatches, path);\n if (detectAndHandle405Error(match)) {\n return;\n }\n }\n }\n // Call the action for the fetcher\n fetchControllers.set(key, abortController);\n let originatingLoadId = incrementingLoadId;\n let actionResults = await callDataStrategy(\"action\", fetchRequest, [match], requestMatches);\n let actionResult = actionResults[0];\n if (fetchRequest.signal.aborted) {\n // We can delete this so long as we weren't aborted by our own fetcher\n // re-submit which would have put _new_ controller is in fetchControllers\n if (fetchControllers.get(key) === abortController) {\n fetchControllers.delete(key);\n }\n return;\n }\n // When using v7_fetcherPersist, we don't want errors bubbling up to the UI\n // or redirects processed for unmounted fetchers so we just revert them to\n // idle\n if (future.v7_fetcherPersist && deletedFetchers.has(key)) {\n if (isRedirectResult(actionResult) || isErrorResult(actionResult)) {\n updateFetcherState(key, getDoneFetcher(undefined));\n return;\n }\n // Let SuccessResult's fall through for revalidation\n } else {\n if (isRedirectResult(actionResult)) {\n fetchControllers.delete(key);\n if (pendingNavigationLoadId > originatingLoadId) {\n // A new navigation was kicked off after our action started, so that\n // should take precedence over this redirect navigation. We already\n // set isRevalidationRequired so all loaders for the new route should\n // fire unless opted out via shouldRevalidate\n updateFetcherState(key, getDoneFetcher(undefined));\n return;\n } else {\n fetchRedirectIds.add(key);\n updateFetcherState(key, getLoadingFetcher(submission));\n return startRedirectNavigation(fetchRequest, actionResult, {\n fetcherSubmission: submission\n });\n }\n }\n // Process any non-redirect errors thrown\n if (isErrorResult(actionResult)) {\n setFetcherError(key, routeId, actionResult.error);\n return;\n }\n }\n if (isDeferredResult(actionResult)) {\n throw getInternalRouterError(400, {\n type: \"defer-action\"\n });\n }\n // Start the data load for current matches, or the next location if we're\n // in the middle of a navigation\n let nextLocation = state.navigation.location || state.location;\n let revalidationRequest = createClientSideRequest(init.history, nextLocation, abortController.signal);\n let routesToUse = inFlightDataRoutes || dataRoutes;\n let matches = state.navigation.state !== \"idle\" ? matchRoutes(routesToUse, state.navigation.location, basename) : state.matches;\n invariant(matches, \"Didn't find any matches after fetcher action\");\n let loadId = ++incrementingLoadId;\n fetchReloadIds.set(key, loadId);\n let loadFetcher = getLoadingFetcher(submission, actionResult.data);\n state.fetchers.set(key, loadFetcher);\n let [matchesToLoad, revalidatingFetchers] = getMatchesToLoad(init.history, state, matches, submission, nextLocation, false, future.v7_skipActionErrorRevalidation, isRevalidationRequired, cancelledDeferredRoutes, cancelledFetcherLoads, deletedFetchers, fetchLoadMatches, fetchRedirectIds, routesToUse, basename, [match.route.id, actionResult]);\n // Put all revalidating fetchers into the loading state, except for the\n // current fetcher which we want to keep in it's current loading state which\n // contains it's action submission info + action data\n revalidatingFetchers.filter(rf => rf.key !== key).forEach(rf => {\n let staleKey = rf.key;\n let existingFetcher = state.fetchers.get(staleKey);\n let revalidatingFetcher = getLoadingFetcher(undefined, existingFetcher ? existingFetcher.data : undefined);\n state.fetchers.set(staleKey, revalidatingFetcher);\n if (fetchControllers.has(staleKey)) {\n abortFetcher(staleKey);\n }\n if (rf.controller) {\n fetchControllers.set(staleKey, rf.controller);\n }\n });\n updateState({\n fetchers: new Map(state.fetchers)\n });\n let abortPendingFetchRevalidations = () => revalidatingFetchers.forEach(rf => abortFetcher(rf.key));\n abortController.signal.addEventListener(\"abort\", abortPendingFetchRevalidations);\n let {\n loaderResults,\n fetcherResults\n } = await callLoadersAndMaybeResolveData(state.matches, matches, matchesToLoad, revalidatingFetchers, revalidationRequest);\n if (abortController.signal.aborted) {\n return;\n }\n abortController.signal.removeEventListener(\"abort\", abortPendingFetchRevalidations);\n fetchReloadIds.delete(key);\n fetchControllers.delete(key);\n revalidatingFetchers.forEach(r => fetchControllers.delete(r.key));\n let redirect = findRedirect([...loaderResults, ...fetcherResults]);\n if (redirect) {\n if (redirect.idx >= matchesToLoad.length) {\n // If this redirect came from a fetcher make sure we mark it in\n // fetchRedirectIds so it doesn't get revalidated on the next set of\n // loader executions\n let fetcherKey = revalidatingFetchers[redirect.idx - matchesToLoad.length].key;\n fetchRedirectIds.add(fetcherKey);\n }\n return startRedirectNavigation(revalidationRequest, redirect.result);\n }\n // Process and commit output from loaders\n let {\n loaderData,\n errors\n } = processLoaderData(state, state.matches, matchesToLoad, loaderResults, undefined, revalidatingFetchers, fetcherResults, activeDeferreds);\n // Since we let revalidations complete even if the submitting fetcher was\n // deleted, only put it back to idle if it hasn't been deleted\n if (state.fetchers.has(key)) {\n let doneFetcher = getDoneFetcher(actionResult.data);\n state.fetchers.set(key, doneFetcher);\n }\n abortStaleFetchLoads(loadId);\n // If we are currently in a navigation loading state and this fetcher is\n // more recent than the navigation, we want the newer data so abort the\n // navigation and complete it with the fetcher data\n if (state.navigation.state === \"loading\" && loadId > pendingNavigationLoadId) {\n invariant(pendingAction, \"Expected pending action\");\n pendingNavigationController && pendingNavigationController.abort();\n completeNavigation(state.navigation.location, {\n matches,\n loaderData,\n errors,\n fetchers: new Map(state.fetchers)\n });\n } else {\n // otherwise just update with the fetcher data, preserving any existing\n // loaderData for loaders that did not need to reload. We have to\n // manually merge here since we aren't going through completeNavigation\n updateState({\n errors,\n loaderData: mergeLoaderData(state.loaderData, loaderData, matches, errors),\n fetchers: new Map(state.fetchers)\n });\n isRevalidationRequired = false;\n }\n }\n // Call the matched loader for fetcher.load(), handling redirects, errors, etc.\n async function handleFetcherLoader(key, routeId, path, match, matches, isFogOfWar, flushSync, submission) {\n let existingFetcher = state.fetchers.get(key);\n updateFetcherState(key, getLoadingFetcher(submission, existingFetcher ? existingFetcher.data : undefined), {\n flushSync\n });\n let abortController = new AbortController();\n let fetchRequest = createClientSideRequest(init.history, path, abortController.signal);\n if (isFogOfWar) {\n let discoverResult = await discoverRoutes(matches, path, fetchRequest.signal);\n if (discoverResult.type === \"aborted\") {\n return;\n } else if (discoverResult.type === \"error\") {\n let {\n error\n } = handleDiscoverRouteError(path, discoverResult);\n setFetcherError(key, routeId, error, {\n flushSync\n });\n return;\n } else if (!discoverResult.matches) {\n setFetcherError(key, routeId, getInternalRouterError(404, {\n pathname: path\n }), {\n flushSync\n });\n return;\n } else {\n matches = discoverResult.matches;\n match = getTargetMatch(matches, path);\n }\n }\n // Call the loader for this fetcher route match\n fetchControllers.set(key, abortController);\n let originatingLoadId = incrementingLoadId;\n let results = await callDataStrategy(\"loader\", fetchRequest, [match], matches);\n let result = results[0];\n // Deferred isn't supported for fetcher loads, await everything and treat it\n // as a normal load. resolveDeferredData will return undefined if this\n // fetcher gets aborted, so we just leave result untouched and short circuit\n // below if that happens\n if (isDeferredResult(result)) {\n result = (await resolveDeferredData(result, fetchRequest.signal, true)) || result;\n }\n // We can delete this so long as we weren't aborted by our our own fetcher\n // re-load which would have put _new_ controller is in fetchControllers\n if (fetchControllers.get(key) === abortController) {\n fetchControllers.delete(key);\n }\n if (fetchRequest.signal.aborted) {\n return;\n }\n // We don't want errors bubbling up or redirects followed for unmounted\n // fetchers, so short circuit here if it was removed from the UI\n if (deletedFetchers.has(key)) {\n updateFetcherState(key, getDoneFetcher(undefined));\n return;\n }\n // If the loader threw a redirect Response, start a new REPLACE navigation\n if (isRedirectResult(result)) {\n if (pendingNavigationLoadId > originatingLoadId) {\n // A new navigation was kicked off after our loader started, so that\n // should take precedence over this redirect navigation\n updateFetcherState(key, getDoneFetcher(undefined));\n return;\n } else {\n fetchRedirectIds.add(key);\n await startRedirectNavigation(fetchRequest, result);\n return;\n }\n }\n // Process any non-redirect errors thrown\n if (isErrorResult(result)) {\n setFetcherError(key, routeId, result.error);\n return;\n }\n invariant(!isDeferredResult(result), \"Unhandled fetcher deferred data\");\n // Put the fetcher back into an idle state\n updateFetcherState(key, getDoneFetcher(result.data));\n }\n /**\n * Utility function to handle redirects returned from an action or loader.\n * Normally, a redirect \"replaces\" the navigation that triggered it. So, for\n * example:\n *\n * - user is on /a\n * - user clicks a link to /b\n * - loader for /b redirects to /c\n *\n * In a non-JS app the browser would track the in-flight navigation to /b and\n * then replace it with /c when it encountered the redirect response. In\n * the end it would only ever update the URL bar with /c.\n *\n * In client-side routing using pushState/replaceState, we aim to emulate\n * this behavior and we also do not update history until the end of the\n * navigation (including processed redirects). This means that we never\n * actually touch history until we've processed redirects, so we just use\n * the history action from the original navigation (PUSH or REPLACE).\n */\n async function startRedirectNavigation(request, redirect, _temp2) {\n let {\n submission,\n fetcherSubmission,\n replace\n } = _temp2 === void 0 ? {} : _temp2;\n if (redirect.response.headers.has(\"X-Remix-Revalidate\")) {\n isRevalidationRequired = true;\n }\n let location = redirect.response.headers.get(\"Location\");\n invariant(location, \"Expected a Location header on the redirect Response\");\n location = normalizeRedirectLocation(location, new URL(request.url), basename);\n let redirectLocation = createLocation(state.location, location, {\n _isRedirect: true\n });\n if (isBrowser) {\n let isDocumentReload = false;\n if (redirect.response.headers.has(\"X-Remix-Reload-Document\")) {\n // Hard reload if the response contained X-Remix-Reload-Document\n isDocumentReload = true;\n } else if (ABSOLUTE_URL_REGEX.test(location)) {\n const url = init.history.createURL(location);\n isDocumentReload =\n // Hard reload if it's an absolute URL to a new origin\n url.origin !== routerWindow.location.origin ||\n // Hard reload if it's an absolute URL that does not match our basename\n stripBasename(url.pathname, basename) == null;\n }\n if (isDocumentReload) {\n if (replace) {\n routerWindow.location.replace(location);\n } else {\n routerWindow.location.assign(location);\n }\n return;\n }\n }\n // There's no need to abort on redirects, since we don't detect the\n // redirect until the action/loaders have settled\n pendingNavigationController = null;\n let redirectHistoryAction = replace === true || redirect.response.headers.has(\"X-Remix-Replace\") ? Action.Replace : Action.Push;\n // Use the incoming submission if provided, fallback on the active one in\n // state.navigation\n let {\n formMethod,\n formAction,\n formEncType\n } = state.navigation;\n if (!submission && !fetcherSubmission && formMethod && formAction && formEncType) {\n submission = getSubmissionFromNavigation(state.navigation);\n }\n // If this was a 307/308 submission we want to preserve the HTTP method and\n // re-submit the GET/POST/PUT/PATCH/DELETE as a submission navigation to the\n // redirected location\n let activeSubmission = submission || fetcherSubmission;\n if (redirectPreserveMethodStatusCodes.has(redirect.response.status) && activeSubmission && isMutationMethod(activeSubmission.formMethod)) {\n await startNavigation(redirectHistoryAction, redirectLocation, {\n submission: _extends({}, activeSubmission, {\n formAction: location\n }),\n // Preserve this flag across redirects\n preventScrollReset: pendingPreventScrollReset\n });\n } else {\n // If we have a navigation submission, we will preserve it through the\n // redirect navigation\n let overrideNavigation = getLoadingNavigation(redirectLocation, submission);\n await startNavigation(redirectHistoryAction, redirectLocation, {\n overrideNavigation,\n // Send fetcher submissions through for shouldRevalidate\n fetcherSubmission,\n // Preserve this flag across redirects\n preventScrollReset: pendingPreventScrollReset\n });\n }\n }\n // Utility wrapper for calling dataStrategy client-side without having to\n // pass around the manifest, mapRouteProperties, etc.\n async function callDataStrategy(type, request, matchesToLoad, matches) {\n try {\n let results = await callDataStrategyImpl(dataStrategyImpl, type, request, matchesToLoad, matches, manifest, mapRouteProperties);\n return await Promise.all(results.map((result, i) => {\n if (isRedirectHandlerResult(result)) {\n let response = result.result;\n return {\n type: ResultType.redirect,\n response: normalizeRelativeRoutingRedirectResponse(response, request, matchesToLoad[i].route.id, matches, basename, future.v7_relativeSplatPath)\n };\n }\n return convertHandlerResultToDataResult(result);\n }));\n } catch (e) {\n // If the outer dataStrategy method throws, just return the error for all\n // matches - and it'll naturally bubble to the root\n return matchesToLoad.map(() => ({\n type: ResultType.error,\n error: e\n }));\n }\n }\n async function callLoadersAndMaybeResolveData(currentMatches, matches, matchesToLoad, fetchersToLoad, request) {\n let [loaderResults, ...fetcherResults] = await Promise.all([matchesToLoad.length ? callDataStrategy(\"loader\", request, matchesToLoad, matches) : [], ...fetchersToLoad.map(f => {\n if (f.matches && f.match && f.controller) {\n let fetcherRequest = createClientSideRequest(init.history, f.path, f.controller.signal);\n return callDataStrategy(\"loader\", fetcherRequest, [f.match], f.matches).then(r => r[0]);\n } else {\n return Promise.resolve({\n type: ResultType.error,\n error: getInternalRouterError(404, {\n pathname: f.path\n })\n });\n }\n })]);\n await Promise.all([resolveDeferredResults(currentMatches, matchesToLoad, loaderResults, loaderResults.map(() => request.signal), false, state.loaderData), resolveDeferredResults(currentMatches, fetchersToLoad.map(f => f.match), fetcherResults, fetchersToLoad.map(f => f.controller ? f.controller.signal : null), true)]);\n return {\n loaderResults,\n fetcherResults\n };\n }\n function interruptActiveLoads() {\n // Every interruption triggers a revalidation\n isRevalidationRequired = true;\n // Cancel pending route-level deferreds and mark cancelled routes for\n // revalidation\n cancelledDeferredRoutes.push(...cancelActiveDeferreds());\n // Abort in-flight fetcher loads\n fetchLoadMatches.forEach((_, key) => {\n if (fetchControllers.has(key)) {\n cancelledFetcherLoads.add(key);\n abortFetcher(key);\n }\n });\n }\n function updateFetcherState(key, fetcher, opts) {\n if (opts === void 0) {\n opts = {};\n }\n state.fetchers.set(key, fetcher);\n updateState({\n fetchers: new Map(state.fetchers)\n }, {\n flushSync: (opts && opts.flushSync) === true\n });\n }\n function setFetcherError(key, routeId, error, opts) {\n if (opts === void 0) {\n opts = {};\n }\n let boundaryMatch = findNearestBoundary(state.matches, routeId);\n deleteFetcher(key);\n updateState({\n errors: {\n [boundaryMatch.route.id]: error\n },\n fetchers: new Map(state.fetchers)\n }, {\n flushSync: (opts && opts.flushSync) === true\n });\n }\n function getFetcher(key) {\n if (future.v7_fetcherPersist) {\n activeFetchers.set(key, (activeFetchers.get(key) || 0) + 1);\n // If this fetcher was previously marked for deletion, unmark it since we\n // have a new instance\n if (deletedFetchers.has(key)) {\n deletedFetchers.delete(key);\n }\n }\n return state.fetchers.get(key) || IDLE_FETCHER;\n }\n function deleteFetcher(key) {\n let fetcher = state.fetchers.get(key);\n // Don't abort the controller if this is a deletion of a fetcher.submit()\n // in it's loading phase since - we don't want to abort the corresponding\n // revalidation and want them to complete and land\n if (fetchControllers.has(key) && !(fetcher && fetcher.state === \"loading\" && fetchReloadIds.has(key))) {\n abortFetcher(key);\n }\n fetchLoadMatches.delete(key);\n fetchReloadIds.delete(key);\n fetchRedirectIds.delete(key);\n deletedFetchers.delete(key);\n cancelledFetcherLoads.delete(key);\n state.fetchers.delete(key);\n }\n function deleteFetcherAndUpdateState(key) {\n if (future.v7_fetcherPersist) {\n let count = (activeFetchers.get(key) || 0) - 1;\n if (count <= 0) {\n activeFetchers.delete(key);\n deletedFetchers.add(key);\n } else {\n activeFetchers.set(key, count);\n }\n } else {\n deleteFetcher(key);\n }\n updateState({\n fetchers: new Map(state.fetchers)\n });\n }\n function abortFetcher(key) {\n let controller = fetchControllers.get(key);\n invariant(controller, \"Expected fetch controller: \" + key);\n controller.abort();\n fetchControllers.delete(key);\n }\n function markFetchersDone(keys) {\n for (let key of keys) {\n let fetcher = getFetcher(key);\n let doneFetcher = getDoneFetcher(fetcher.data);\n state.fetchers.set(key, doneFetcher);\n }\n }\n function markFetchRedirectsDone() {\n let doneKeys = [];\n let updatedFetchers = false;\n for (let key of fetchRedirectIds) {\n let fetcher = state.fetchers.get(key);\n invariant(fetcher, \"Expected fetcher: \" + key);\n if (fetcher.state === \"loading\") {\n fetchRedirectIds.delete(key);\n doneKeys.push(key);\n updatedFetchers = true;\n }\n }\n markFetchersDone(doneKeys);\n return updatedFetchers;\n }\n function abortStaleFetchLoads(landedId) {\n let yeetedKeys = [];\n for (let [key, id] of fetchReloadIds) {\n if (id < landedId) {\n let fetcher = state.fetchers.get(key);\n invariant(fetcher, \"Expected fetcher: \" + key);\n if (fetcher.state === \"loading\") {\n abortFetcher(key);\n fetchReloadIds.delete(key);\n yeetedKeys.push(key);\n }\n }\n }\n markFetchersDone(yeetedKeys);\n return yeetedKeys.length > 0;\n }\n function getBlocker(key, fn) {\n let blocker = state.blockers.get(key) || IDLE_BLOCKER;\n if (blockerFunctions.get(key) !== fn) {\n blockerFunctions.set(key, fn);\n }\n return blocker;\n }\n function deleteBlocker(key) {\n state.blockers.delete(key);\n blockerFunctions.delete(key);\n }\n // Utility function to update blockers, ensuring valid state transitions\n function updateBlocker(key, newBlocker) {\n let blocker = state.blockers.get(key) || IDLE_BLOCKER;\n // Poor mans state machine :)\n // https://mermaid.live/edit#pako:eNqVkc9OwzAMxl8l8nnjAYrEtDIOHEBIgwvKJTReGy3_lDpIqO27k6awMG0XcrLlnz87nwdonESogKXXBuE79rq75XZO3-yHds0RJVuv70YrPlUrCEe2HfrORS3rubqZfuhtpg5C9wk5tZ4VKcRUq88q9Z8RS0-48cE1iHJkL0ugbHuFLus9L6spZy8nX9MP2CNdomVaposqu3fGayT8T8-jJQwhepo_UtpgBQaDEUom04dZhAN1aJBDlUKJBxE1ceB2Smj0Mln-IBW5AFU2dwUiktt_2Qaq2dBfaKdEup85UV7Yd-dKjlnkabl2Pvr0DTkTreM\n invariant(blocker.state === \"unblocked\" && newBlocker.state === \"blocked\" || blocker.state === \"blocked\" && newBlocker.state === \"blocked\" || blocker.state === \"blocked\" && newBlocker.state === \"proceeding\" || blocker.state === \"blocked\" && newBlocker.state === \"unblocked\" || blocker.state === \"proceeding\" && newBlocker.state === \"unblocked\", \"Invalid blocker state transition: \" + blocker.state + \" -> \" + newBlocker.state);\n let blockers = new Map(state.blockers);\n blockers.set(key, newBlocker);\n updateState({\n blockers\n });\n }\n function shouldBlockNavigation(_ref4) {\n let {\n currentLocation,\n nextLocation,\n historyAction\n } = _ref4;\n if (blockerFunctions.size === 0) {\n return;\n }\n // We ony support a single active blocker at the moment since we don't have\n // any compelling use cases for multi-blocker yet\n if (blockerFunctions.size > 1) {\n warning(false, \"A router only supports one blocker at a time\");\n }\n let entries = Array.from(blockerFunctions.entries());\n let [blockerKey, blockerFunction] = entries[entries.length - 1];\n let blocker = state.blockers.get(blockerKey);\n if (blocker && blocker.state === \"proceeding\") {\n // If the blocker is currently proceeding, we don't need to re-check\n // it and can let this navigation continue\n return;\n }\n // At this point, we know we're unblocked/blocked so we need to check the\n // user-provided blocker function\n if (blockerFunction({\n currentLocation,\n nextLocation,\n historyAction\n })) {\n return blockerKey;\n }\n }\n function handleNavigational404(pathname) {\n let error = getInternalRouterError(404, {\n pathname\n });\n let routesToUse = inFlightDataRoutes || dataRoutes;\n let {\n matches,\n route\n } = getShortCircuitMatches(routesToUse);\n // Cancel all pending deferred on 404s since we don't keep any routes\n cancelActiveDeferreds();\n return {\n notFoundMatches: matches,\n route,\n error\n };\n }\n function handleDiscoverRouteError(pathname, discoverResult) {\n return {\n boundaryId: findNearestBoundary(discoverResult.partialMatches).route.id,\n error: getInternalRouterError(400, {\n type: \"route-discovery\",\n pathname,\n message: discoverResult.error != null && \"message\" in discoverResult.error ? discoverResult.error : String(discoverResult.error)\n })\n };\n }\n function cancelActiveDeferreds(predicate) {\n let cancelledRouteIds = [];\n activeDeferreds.forEach((dfd, routeId) => {\n if (!predicate || predicate(routeId)) {\n // Cancel the deferred - but do not remove from activeDeferreds here -\n // we rely on the subscribers to do that so our tests can assert proper\n // cleanup via _internalActiveDeferreds\n dfd.cancel();\n cancelledRouteIds.push(routeId);\n activeDeferreds.delete(routeId);\n }\n });\n return cancelledRouteIds;\n }\n // Opt in to capturing and reporting scroll positions during navigations,\n // used by the <ScrollRestoration> component\n function enableScrollRestoration(positions, getPosition, getKey) {\n savedScrollPositions = positions;\n getScrollPosition = getPosition;\n getScrollRestorationKey = getKey || null;\n // Perform initial hydration scroll restoration, since we miss the boat on\n // the initial updateState() because we've not yet rendered <ScrollRestoration/>\n // and therefore have no savedScrollPositions available\n if (!initialScrollRestored && state.navigation === IDLE_NAVIGATION) {\n initialScrollRestored = true;\n let y = getSavedScrollPosition(state.location, state.matches);\n if (y != null) {\n updateState({\n restoreScrollPosition: y\n });\n }\n }\n return () => {\n savedScrollPositions = null;\n getScrollPosition = null;\n getScrollRestorationKey = null;\n };\n }\n function getScrollKey(location, matches) {\n if (getScrollRestorationKey) {\n let key = getScrollRestorationKey(location, matches.map(m => convertRouteMatchToUiMatch(m, state.loaderData)));\n return key || location.key;\n }\n return location.key;\n }\n function saveScrollPosition(location, matches) {\n if (savedScrollPositions && getScrollPosition) {\n let key = getScrollKey(location, matches);\n savedScrollPositions[key] = getScrollPosition();\n }\n }\n function getSavedScrollPosition(location, matches) {\n if (savedScrollPositions) {\n let key = getScrollKey(location, matches);\n let y = savedScrollPositions[key];\n if (typeof y === \"number\") {\n return y;\n }\n }\n return null;\n }\n function checkFogOfWar(matches, routesToUse, pathname) {\n if (patchRoutesOnMissImpl) {\n if (!matches) {\n let fogMatches = matchRoutesImpl(routesToUse, pathname, basename, true);\n return {\n active: true,\n matches: fogMatches || []\n };\n } else {\n let leafRoute = matches[matches.length - 1].route;\n if (leafRoute.path && (leafRoute.path === \"*\" || leafRoute.path.endsWith(\"/*\"))) {\n // If we matched a splat, it might only be because we haven't yet fetched\n // the children that would match with a higher score, so let's fetch\n // around and find out\n let partialMatches = matchRoutesImpl(routesToUse, pathname, basename, true);\n return {\n active: true,\n matches: partialMatches\n };\n }\n }\n }\n return {\n active: false,\n matches: null\n };\n }\n async function discoverRoutes(matches, pathname, signal) {\n let partialMatches = matches;\n let route = partialMatches.length > 0 ? partialMatches[partialMatches.length - 1].route : null;\n while (true) {\n let isNonHMR = inFlightDataRoutes == null;\n let routesToUse = inFlightDataRoutes || dataRoutes;\n try {\n await loadLazyRouteChildren(patchRoutesOnMissImpl, pathname, partialMatches, routesToUse, manifest, mapRouteProperties, pendingPatchRoutes, signal);\n } catch (e) {\n return {\n type: \"error\",\n error: e,\n partialMatches\n };\n } finally {\n // If we are not in the middle of an HMR revalidation and we changed the\n // routes, provide a new identity so when we `updateState` at the end of\n // this navigation/fetch `router.routes` will be a new identity and\n // trigger a re-run of memoized `router.routes` dependencies.\n // HMR will already update the identity and reflow when it lands\n // `inFlightDataRoutes` in `completeNavigation`\n if (isNonHMR) {\n dataRoutes = [...dataRoutes];\n }\n }\n if (signal.aborted) {\n return {\n type: \"aborted\"\n };\n }\n let newMatches = matchRoutes(routesToUse, pathname, basename);\n let matchedSplat = false;\n if (newMatches) {\n let leafRoute = newMatches[newMatches.length - 1].route;\n if (leafRoute.index) {\n // If we found an index route, we can stop\n return {\n type: \"success\",\n matches: newMatches\n };\n }\n if (leafRoute.path && leafRoute.path.length > 0) {\n if (leafRoute.path === \"*\") {\n // If we found a splat route, we can't be sure there's not a\n // higher-scoring route down some partial matches trail so we need\n // to check that out\n matchedSplat = true;\n } else {\n // If we found a non-splat route, we can stop\n return {\n type: \"success\",\n matches: newMatches\n };\n }\n }\n }\n let newPartialMatches = matchRoutesImpl(routesToUse, pathname, basename, true);\n // If we are no longer partially matching anything, this was either a\n // legit splat match above, or it's a 404. Also avoid loops if the\n // second pass results in the same partial matches\n if (!newPartialMatches || partialMatches.map(m => m.route.id).join(\"-\") === newPartialMatches.map(m => m.route.id).join(\"-\")) {\n return {\n type: \"success\",\n matches: matchedSplat ? newMatches : null\n };\n }\n partialMatches = newPartialMatches;\n route = partialMatches[partialMatches.length - 1].route;\n if (route.path === \"*\") {\n // The splat is still our most accurate partial, so run with it\n return {\n type: \"success\",\n matches: partialMatches\n };\n }\n }\n }\n function _internalSetRoutes(newRoutes) {\n manifest = {};\n inFlightDataRoutes = convertRoutesToDataRoutes(newRoutes, mapRouteProperties, undefined, manifest);\n }\n function patchRoutes(routeId, children) {\n let isNonHMR = inFlightDataRoutes == null;\n let routesToUse = inFlightDataRoutes || dataRoutes;\n patchRoutesImpl(routeId, children, routesToUse, manifest, mapRouteProperties);\n // If we are not in the middle of an HMR revalidation and we changed the\n // routes, provide a new identity and trigger a reflow via `updateState`\n // to re-run memoized `router.routes` dependencies.\n // HMR will already update the identity and reflow when it lands\n // `inFlightDataRoutes` in `completeNavigation`\n if (isNonHMR) {\n dataRoutes = [...dataRoutes];\n updateState({});\n }\n }\n router = {\n get basename() {\n return basename;\n },\n get future() {\n return future;\n },\n get state() {\n return state;\n },\n get routes() {\n return dataRoutes;\n },\n get window() {\n return routerWindow;\n },\n initialize,\n subscribe,\n enableScrollRestoration,\n navigate,\n fetch,\n revalidate,\n // Passthrough to history-aware createHref used by useHref so we get proper\n // hash-aware URLs in DOM paths\n createHref: to => init.history.createHref(to),\n encodeLocation: to => init.history.encodeLocation(to),\n getFetcher,\n deleteFetcher: deleteFetcherAndUpdateState,\n dispose,\n getBlocker,\n deleteBlocker,\n patchRoutes,\n _internalFetchControllers: fetchControllers,\n _internalActiveDeferreds: activeDeferreds,\n // TODO: Remove setRoutes, it's temporary to avoid dealing with\n // updating the tree while validating the update algorithm.\n _internalSetRoutes\n };\n return router;\n}\n//#endregion\n////////////////////////////////////////////////////////////////////////////////\n//#region createStaticHandler\n////////////////////////////////////////////////////////////////////////////////\nconst UNSAFE_DEFERRED_SYMBOL = Symbol(\"deferred\");\nfunction createStaticHandler(routes, opts) {\n invariant(routes.length > 0, \"You must provide a non-empty routes array to createStaticHandler\");\n let manifest = {};\n let basename = (opts ? opts.basename : null) || \"/\";\n let mapRouteProperties;\n if (opts != null && opts.mapRouteProperties) {\n mapRouteProperties = opts.mapRouteProperties;\n } else if (opts != null && opts.detectErrorBoundary) {\n // If they are still using the deprecated version, wrap it with the new API\n let detectErrorBoundary = opts.detectErrorBoundary;\n mapRouteProperties = route => ({\n hasErrorBoundary: detectErrorBoundary(route)\n });\n } else {\n mapRouteProperties = defaultMapRouteProperties;\n }\n // Config driven behavior flags\n let future = _extends({\n v7_relativeSplatPath: false,\n v7_throwAbortReason: false\n }, opts ? opts.future : null);\n let dataRoutes = convertRoutesToDataRoutes(routes, mapRouteProperties, undefined, manifest);\n /**\n * The query() method is intended for document requests, in which we want to\n * call an optional action and potentially multiple loaders for all nested\n * routes. It returns a StaticHandlerContext object, which is very similar\n * to the router state (location, loaderData, actionData, errors, etc.) and\n * also adds SSR-specific information such as the statusCode and headers\n * from action/loaders Responses.\n *\n * It _should_ never throw and should report all errors through the\n * returned context.errors object, properly associating errors to their error\n * boundary. Additionally, it tracks _deepestRenderedBoundaryId which can be\n * used to emulate React error boundaries during SSr by performing a second\n * pass only down to the boundaryId.\n *\n * The one exception where we do not return a StaticHandlerContext is when a\n * redirect response is returned or thrown from any action/loader. We\n * propagate that out and return the raw Response so the HTTP server can\n * return it directly.\n *\n * - `opts.requestContext` is an optional server context that will be passed\n * to actions/loaders in the `context` parameter\n * - `opts.skipLoaderErrorBubbling` is an optional parameter that will prevent\n * the bubbling of errors which allows single-fetch-type implementations\n * where the client will handle the bubbling and we may need to return data\n * for the handling route\n */\n async function query(request, _temp3) {\n let {\n requestContext,\n skipLoaderErrorBubbling,\n unstable_dataStrategy\n } = _temp3 === void 0 ? {} : _temp3;\n let url = new URL(request.url);\n let method = request.method;\n let location = createLocation(\"\", createPath(url), null, \"default\");\n let matches = matchRoutes(dataRoutes, location, basename);\n // SSR supports HEAD requests while SPA doesn't\n if (!isValidMethod(method) && method !== \"HEAD\") {\n let error = getInternalRouterError(405, {\n method\n });\n let {\n matches: methodNotAllowedMatches,\n route\n } = getShortCircuitMatches(dataRoutes);\n return {\n basename,\n location,\n matches: methodNotAllowedMatches,\n loaderData: {},\n actionData: null,\n errors: {\n [route.id]: error\n },\n statusCode: error.status,\n loaderHeaders: {},\n actionHeaders: {},\n activeDeferreds: null\n };\n } else if (!matches) {\n let error = getInternalRouterError(404, {\n pathname: location.pathname\n });\n let {\n matches: notFoundMatches,\n route\n } = getShortCircuitMatches(dataRoutes);\n return {\n basename,\n location,\n matches: notFoundMatches,\n loaderData: {},\n actionData: null,\n errors: {\n [route.id]: error\n },\n statusCode: error.status,\n loaderHeaders: {},\n actionHeaders: {},\n activeDeferreds: null\n };\n }\n let result = await queryImpl(request, location, matches, requestContext, unstable_dataStrategy || null, skipLoaderErrorBubbling === true, null);\n if (isResponse(result)) {\n return result;\n }\n // When returning StaticHandlerContext, we patch back in the location here\n // since we need it for React Context. But this helps keep our submit and\n // loadRouteData operating on a Request instead of a Location\n return _extends({\n location,\n basename\n }, result);\n }\n /**\n * The queryRoute() method is intended for targeted route requests, either\n * for fetch ?_data requests or resource route requests. In this case, we\n * are only ever calling a single action or loader, and we are returning the\n * returned value directly. In most cases, this will be a Response returned\n * from the action/loader, but it may be a primitive or other value as well -\n * and in such cases the calling context should handle that accordingly.\n *\n * We do respect the throw/return differentiation, so if an action/loader\n * throws, then this method will throw the value. This is important so we\n * can do proper boundary identification in Remix where a thrown Response\n * must go to the Catch Boundary but a returned Response is happy-path.\n *\n * One thing to note is that any Router-initiated Errors that make sense\n * to associate with a status code will be thrown as an ErrorResponse\n * instance which include the raw Error, such that the calling context can\n * serialize the error as they see fit while including the proper response\n * code. Examples here are 404 and 405 errors that occur prior to reaching\n * any user-defined loaders.\n *\n * - `opts.routeId` allows you to specify the specific route handler to call.\n * If not provided the handler will determine the proper route by matching\n * against `request.url`\n * - `opts.requestContext` is an optional server context that will be passed\n * to actions/loaders in the `context` parameter\n */\n async function queryRoute(request, _temp4) {\n let {\n routeId,\n requestContext,\n unstable_dataStrategy\n } = _temp4 === void 0 ? {} : _temp4;\n let url = new URL(request.url);\n let method = request.method;\n let location = createLocation(\"\", createPath(url), null, \"default\");\n let matches = matchRoutes(dataRoutes, location, basename);\n // SSR supports HEAD requests while SPA doesn't\n if (!isValidMethod(method) && method !== \"HEAD\" && method !== \"OPTIONS\") {\n throw getInternalRouterError(405, {\n method\n });\n } else if (!matches) {\n throw getInternalRouterError(404, {\n pathname: location.pathname\n });\n }\n let match = routeId ? matches.find(m => m.route.id === routeId) : getTargetMatch(matches, location);\n if (routeId && !match) {\n throw getInternalRouterError(403, {\n pathname: location.pathname,\n routeId\n });\n } else if (!match) {\n // This should never hit I don't think?\n throw getInternalRouterError(404, {\n pathname: location.pathname\n });\n }\n let result = await queryImpl(request, location, matches, requestContext, unstable_dataStrategy || null, false, match);\n if (isResponse(result)) {\n return result;\n }\n let error = result.errors ? Object.values(result.errors)[0] : undefined;\n if (error !== undefined) {\n // If we got back result.errors, that means the loader/action threw\n // _something_ that wasn't a Response, but it's not guaranteed/required\n // to be an `instanceof Error` either, so we have to use throw here to\n // preserve the \"error\" state outside of queryImpl.\n throw error;\n }\n // Pick off the right state value to return\n if (result.actionData) {\n return Object.values(result.actionData)[0];\n }\n if (result.loaderData) {\n var _result$activeDeferre;\n let data = Object.values(result.loaderData)[0];\n if ((_result$activeDeferre = result.activeDeferreds) != null && _result$activeDeferre[match.route.id]) {\n data[UNSAFE_DEFERRED_SYMBOL] = result.activeDeferreds[match.route.id];\n }\n return data;\n }\n return undefined;\n }\n async function queryImpl(request, location, matches, requestContext, unstable_dataStrategy, skipLoaderErrorBubbling, routeMatch) {\n invariant(request.signal, \"query()/queryRoute() requests must contain an AbortController signal\");\n try {\n if (isMutationMethod(request.method.toLowerCase())) {\n let result = await submit(request, matches, routeMatch || getTargetMatch(matches, location), requestContext, unstable_dataStrategy, skipLoaderErrorBubbling, routeMatch != null);\n return result;\n }\n let result = await loadRouteData(request, matches, requestContext, unstable_dataStrategy, skipLoaderErrorBubbling, routeMatch);\n return isResponse(result) ? result : _extends({}, result, {\n actionData: null,\n actionHeaders: {}\n });\n } catch (e) {\n // If the user threw/returned a Response in callLoaderOrAction for a\n // `queryRoute` call, we throw the `HandlerResult` to bail out early\n // and then return or throw the raw Response here accordingly\n if (isHandlerResult(e) && isResponse(e.result)) {\n if (e.type === ResultType.error) {\n throw e.result;\n }\n return e.result;\n }\n // Redirects are always returned since they don't propagate to catch\n // boundaries\n if (isRedirectResponse(e)) {\n return e;\n }\n throw e;\n }\n }\n async function submit(request, matches, actionMatch, requestContext, unstable_dataStrategy, skipLoaderErrorBubbling, isRouteRequest) {\n let result;\n if (!actionMatch.route.action && !actionMatch.route.lazy) {\n let error = getInternalRouterError(405, {\n method: request.method,\n pathname: new URL(request.url).pathname,\n routeId: actionMatch.route.id\n });\n if (isRouteRequest) {\n throw error;\n }\n result = {\n type: ResultType.error,\n error\n };\n } else {\n let results = await callDataStrategy(\"action\", request, [actionMatch], matches, isRouteRequest, requestContext, unstable_dataStrategy);\n result = results[0];\n if (request.signal.aborted) {\n throwStaticHandlerAbortedError(request, isRouteRequest, future);\n }\n }\n if (isRedirectResult(result)) {\n // Uhhhh - this should never happen, we should always throw these from\n // callLoaderOrAction, but the type narrowing here keeps TS happy and we\n // can get back on the \"throw all redirect responses\" train here should\n // this ever happen :/\n throw new Response(null, {\n status: result.response.status,\n headers: {\n Location: result.response.headers.get(\"Location\")\n }\n });\n }\n if (isDeferredResult(result)) {\n let error = getInternalRouterError(400, {\n type: \"defer-action\"\n });\n if (isRouteRequest) {\n throw error;\n }\n result = {\n type: ResultType.error,\n error\n };\n }\n if (isRouteRequest) {\n // Note: This should only be non-Response values if we get here, since\n // isRouteRequest should throw any Response received in callLoaderOrAction\n if (isErrorResult(result)) {\n throw result.error;\n }\n return {\n matches: [actionMatch],\n loaderData: {},\n actionData: {\n [actionMatch.route.id]: result.data\n },\n errors: null,\n // Note: statusCode + headers are unused here since queryRoute will\n // return the raw Response or value\n statusCode: 200,\n loaderHeaders: {},\n actionHeaders: {},\n activeDeferreds: null\n };\n }\n // Create a GET request for the loaders\n let loaderRequest = new Request(request.url, {\n headers: request.headers,\n redirect: request.redirect,\n signal: request.signal\n });\n if (isErrorResult(result)) {\n // Store off the pending error - we use it to determine which loaders\n // to call and will commit it when we complete the navigation\n let boundaryMatch = skipLoaderErrorBubbling ? actionMatch : findNearestBoundary(matches, actionMatch.route.id);\n let context = await loadRouteData(loaderRequest, matches, requestContext, unstable_dataStrategy, skipLoaderErrorBubbling, null, [boundaryMatch.route.id, result]);\n // action status codes take precedence over loader status codes\n return _extends({}, context, {\n statusCode: isRouteErrorResponse(result.error) ? result.error.status : result.statusCode != null ? result.statusCode : 500,\n actionData: null,\n actionHeaders: _extends({}, result.headers ? {\n [actionMatch.route.id]: result.headers\n } : {})\n });\n }\n let context = await loadRouteData(loaderRequest, matches, requestContext, unstable_dataStrategy, skipLoaderErrorBubbling, null);\n return _extends({}, context, {\n actionData: {\n [actionMatch.route.id]: result.data\n }\n }, result.statusCode ? {\n statusCode: result.statusCode\n } : {}, {\n actionHeaders: result.headers ? {\n [actionMatch.route.id]: result.headers\n } : {}\n });\n }\n async function loadRouteData(request, matches, requestContext, unstable_dataStrategy, skipLoaderErrorBubbling, routeMatch, pendingActionResult) {\n let isRouteRequest = routeMatch != null;\n // Short circuit if we have no loaders to run (queryRoute())\n if (isRouteRequest && !(routeMatch != null && routeMatch.route.loader) && !(routeMatch != null && routeMatch.route.lazy)) {\n throw getInternalRouterError(400, {\n method: request.method,\n pathname: new URL(request.url).pathname,\n routeId: routeMatch == null ? void 0 : routeMatch.route.id\n });\n }\n let requestMatches = routeMatch ? [routeMatch] : pendingActionResult && isErrorResult(pendingActionResult[1]) ? getLoaderMatchesUntilBoundary(matches, pendingActionResult[0]) : matches;\n let matchesToLoad = requestMatches.filter(m => m.route.loader || m.route.lazy);\n // Short circuit if we have no loaders to run (query())\n if (matchesToLoad.length === 0) {\n return {\n matches,\n // Add a null for all matched routes for proper revalidation on the client\n loaderData: matches.reduce((acc, m) => Object.assign(acc, {\n [m.route.id]: null\n }), {}),\n errors: pendingActionResult && isErrorResult(pendingActionResult[1]) ? {\n [pendingActionResult[0]]: pendingActionResult[1].error\n } : null,\n statusCode: 200,\n loaderHeaders: {},\n activeDeferreds: null\n };\n }\n let results = await callDataStrategy(\"loader\", request, matchesToLoad, matches, isRouteRequest, requestContext, unstable_dataStrategy);\n if (request.signal.aborted) {\n throwStaticHandlerAbortedError(request, isRouteRequest, future);\n }\n // Process and commit output from loaders\n let activeDeferreds = new Map();\n let context = processRouteLoaderData(matches, matchesToLoad, results, pendingActionResult, activeDeferreds, skipLoaderErrorBubbling);\n // Add a null for any non-loader matches for proper revalidation on the client\n let executedLoaders = new Set(matchesToLoad.map(match => match.route.id));\n matches.forEach(match => {\n if (!executedLoaders.has(match.route.id)) {\n context.loaderData[match.route.id] = null;\n }\n });\n return _extends({}, context, {\n matches,\n activeDeferreds: activeDeferreds.size > 0 ? Object.fromEntries(activeDeferreds.entries()) : null\n });\n }\n // Utility wrapper for calling dataStrategy server-side without having to\n // pass around the manifest, mapRouteProperties, etc.\n async function callDataStrategy(type, request, matchesToLoad, matches, isRouteRequest, requestContext, unstable_dataStrategy) {\n let results = await callDataStrategyImpl(unstable_dataStrategy || defaultDataStrategy, type, request, matchesToLoad, matches, manifest, mapRouteProperties, requestContext);\n return await Promise.all(results.map((result, i) => {\n if (isRedirectHandlerResult(result)) {\n let response = result.result;\n // Throw redirects and let the server handle them with an HTTP redirect\n throw normalizeRelativeRoutingRedirectResponse(response, request, matchesToLoad[i].route.id, matches, basename, future.v7_relativeSplatPath);\n }\n if (isResponse(result.result) && isRouteRequest) {\n // For SSR single-route requests, we want to hand Responses back\n // directly without unwrapping\n throw result;\n }\n return convertHandlerResultToDataResult(result);\n }));\n }\n return {\n dataRoutes,\n query,\n queryRoute\n };\n}\n//#endregion\n////////////////////////////////////////////////////////////////////////////////\n//#region Helpers\n////////////////////////////////////////////////////////////////////////////////\n/**\n * Given an existing StaticHandlerContext and an error thrown at render time,\n * provide an updated StaticHandlerContext suitable for a second SSR render\n */\nfunction getStaticContextFromError(routes, context, error) {\n let newContext = _extends({}, context, {\n statusCode: isRouteErrorResponse(error) ? error.status : 500,\n errors: {\n [context._deepestRenderedBoundaryId || routes[0].id]: error\n }\n });\n return newContext;\n}\nfunction throwStaticHandlerAbortedError(request, isRouteRequest, future) {\n if (future.v7_throwAbortReason && request.signal.reason !== undefined) {\n throw request.signal.reason;\n }\n let method = isRouteRequest ? \"queryRoute\" : \"query\";\n throw new Error(method + \"() call aborted: \" + request.method + \" \" + request.url);\n}\nfunction isSubmissionNavigation(opts) {\n return opts != null && (\"formData\" in opts && opts.formData != null || \"body\" in opts && opts.body !== undefined);\n}\nfunction normalizeTo(location, matches, basename, prependBasename, to, v7_relativeSplatPath, fromRouteId, relative) {\n let contextualMatches;\n let activeRouteMatch;\n if (fromRouteId) {\n // Grab matches up to the calling route so our route-relative logic is\n // relative to the correct source route\n contextualMatches = [];\n for (let match of matches) {\n contextualMatches.push(match);\n if (match.route.id === fromRouteId) {\n activeRouteMatch = match;\n break;\n }\n }\n } else {\n contextualMatches = matches;\n activeRouteMatch = matches[matches.length - 1];\n }\n // Resolve the relative path\n let path = resolveTo(to ? to : \".\", getResolveToMatches(contextualMatches, v7_relativeSplatPath), stripBasename(location.pathname, basename) || location.pathname, relative === \"path\");\n // When `to` is not specified we inherit search/hash from the current\n // location, unlike when to=\".\" and we just inherit the path.\n // See https://github.com/remix-run/remix/issues/927\n if (to == null) {\n path.search = location.search;\n path.hash = location.hash;\n }\n // Add an ?index param for matched index routes if we don't already have one\n if ((to == null || to === \"\" || to === \".\") && activeRouteMatch && activeRouteMatch.route.index && !hasNakedIndexQuery(path.search)) {\n path.search = path.search ? path.search.replace(/^\\?/, \"?index&\") : \"?index\";\n }\n // If we're operating within a basename, prepend it to the pathname. If\n // this is a root navigation, then just use the raw basename which allows\n // the basename to have full control over the presence of a trailing slash\n // on root actions\n if (prependBasename && basename !== \"/\") {\n path.pathname = path.pathname === \"/\" ? basename : joinPaths([basename, path.pathname]);\n }\n return createPath(path);\n}\n// Normalize navigation options by converting formMethod=GET formData objects to\n// URLSearchParams so they behave identically to links with query params\nfunction normalizeNavigateOptions(normalizeFormMethod, isFetcher, path, opts) {\n // Return location verbatim on non-submission navigations\n if (!opts || !isSubmissionNavigation(opts)) {\n return {\n path\n };\n }\n if (opts.formMethod && !isValidMethod(opts.formMethod)) {\n return {\n path,\n error: getInternalRouterError(405, {\n method: opts.formMethod\n })\n };\n }\n let getInvalidBodyError = () => ({\n path,\n error: getInternalRouterError(400, {\n type: \"invalid-body\"\n })\n });\n // Create a Submission on non-GET navigations\n let rawFormMethod = opts.formMethod || \"get\";\n let formMethod = normalizeFormMethod ? rawFormMethod.toUpperCase() : rawFormMethod.toLowerCase();\n let formAction = stripHashFromPath(path);\n if (opts.body !== undefined) {\n if (opts.formEncType === \"text/plain\") {\n // text only support POST/PUT/PATCH/DELETE submissions\n if (!isMutationMethod(formMethod)) {\n return getInvalidBodyError();\n }\n let text = typeof opts.body === \"string\" ? opts.body : opts.body instanceof FormData || opts.body instanceof URLSearchParams ?\n // https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#plain-text-form-data\n Array.from(opts.body.entries()).reduce((acc, _ref5) => {\n let [name, value] = _ref5;\n return \"\" + acc + name + \"=\" + value + \"\\n\";\n }, \"\") : String(opts.body);\n return {\n path,\n submission: {\n formMethod,\n formAction,\n formEncType: opts.formEncType,\n formData: undefined,\n json: undefined,\n text\n }\n };\n } else if (opts.formEncType === \"application/json\") {\n // json only supports POST/PUT/PATCH/DELETE submissions\n if (!isMutationMethod(formMethod)) {\n return getInvalidBodyError();\n }\n try {\n let json = typeof opts.body === \"string\" ? JSON.parse(opts.body) : opts.body;\n return {\n path,\n submission: {\n formMethod,\n formAction,\n formEncType: opts.formEncType,\n formData: undefined,\n json,\n text: undefined\n }\n };\n } catch (e) {\n return getInvalidBodyError();\n }\n }\n }\n invariant(typeof FormData === \"function\", \"FormData is not available in this environment\");\n let searchParams;\n let formData;\n if (opts.formData) {\n searchParams = convertFormDataToSearchParams(opts.formData);\n formData = opts.formData;\n } else if (opts.body instanceof FormData) {\n searchParams = convertFormDataToSearchParams(opts.body);\n formData = opts.body;\n } else if (opts.body instanceof URLSearchParams) {\n searchParams = opts.body;\n formData = convertSearchParamsToFormData(searchParams);\n } else if (opts.body == null) {\n searchParams = new URLSearchParams();\n formData = new FormData();\n } else {\n try {\n searchParams = new URLSearchParams(opts.body);\n formData = convertSearchParamsToFormData(searchParams);\n } catch (e) {\n return getInvalidBodyError();\n }\n }\n let submission = {\n formMethod,\n formAction,\n formEncType: opts && opts.formEncType || \"application/x-www-form-urlencoded\",\n formData,\n json: undefined,\n text: undefined\n };\n if (isMutationMethod(submission.formMethod)) {\n return {\n path,\n submission\n };\n }\n // Flatten submission onto URLSearchParams for GET submissions\n let parsedPath = parsePath(path);\n // On GET navigation submissions we can drop the ?index param from the\n // resulting location since all loaders will run. But fetcher GET submissions\n // only run a single loader so we need to preserve any incoming ?index params\n if (isFetcher && parsedPath.search && hasNakedIndexQuery(parsedPath.search)) {\n searchParams.append(\"index\", \"\");\n }\n parsedPath.search = \"?\" + searchParams;\n return {\n path: createPath(parsedPath),\n submission\n };\n}\n// Filter out all routes below any caught error as they aren't going to\n// render so we don't need to load them\nfunction getLoaderMatchesUntilBoundary(matches, boundaryId) {\n let boundaryMatches = matches;\n if (boundaryId) {\n let index = matches.findIndex(m => m.route.id === boundaryId);\n if (index >= 0) {\n boundaryMatches = matches.slice(0, index);\n }\n }\n return boundaryMatches;\n}\nfunction getMatchesToLoad(history, state, matches, submission, location, isInitialLoad, skipActionErrorRevalidation, isRevalidationRequired, cancelledDeferredRoutes, cancelledFetcherLoads, deletedFetchers, fetchLoadMatches, fetchRedirectIds, routesToUse, basename, pendingActionResult) {\n let actionResult = pendingActionResult ? isErrorResult(pendingActionResult[1]) ? pendingActionResult[1].error : pendingActionResult[1].data : undefined;\n let currentUrl = history.createURL(state.location);\n let nextUrl = history.createURL(location);\n // Pick navigation matches that are net-new or qualify for revalidation\n let boundaryId = pendingActionResult && isErrorResult(pendingActionResult[1]) ? pendingActionResult[0] : undefined;\n let boundaryMatches = boundaryId ? getLoaderMatchesUntilBoundary(matches, boundaryId) : matches;\n // Don't revalidate loaders by default after action 4xx/5xx responses\n // when the flag is enabled. They can still opt-into revalidation via\n // `shouldRevalidate` via `actionResult`\n let actionStatus = pendingActionResult ? pendingActionResult[1].statusCode : undefined;\n let shouldSkipRevalidation = skipActionErrorRevalidation && actionStatus && actionStatus >= 400;\n let navigationMatches = boundaryMatches.filter((match, index) => {\n let {\n route\n } = match;\n if (route.lazy) {\n // We haven't loaded this route yet so we don't know if it's got a loader!\n return true;\n }\n if (route.loader == null) {\n return false;\n }\n if (isInitialLoad) {\n if (typeof route.loader !== \"function\" || route.loader.hydrate) {\n return true;\n }\n return state.loaderData[route.id] === undefined && (\n // Don't re-run if the loader ran and threw an error\n !state.errors || state.errors[route.id] === undefined);\n }\n // Always call the loader on new route instances and pending defer cancellations\n if (isNewLoader(state.loaderData, state.matches[index], match) || cancelledDeferredRoutes.some(id => id === match.route.id)) {\n return true;\n }\n // This is the default implementation for when we revalidate. If the route\n // provides it's own implementation, then we give them full control but\n // provide this value so they can leverage it if needed after they check\n // their own specific use cases\n let currentRouteMatch = state.matches[index];\n let nextRouteMatch = match;\n return shouldRevalidateLoader(match, _extends({\n currentUrl,\n currentParams: currentRouteMatch.params,\n nextUrl,\n nextParams: nextRouteMatch.params\n }, submission, {\n actionResult,\n actionStatus,\n defaultShouldRevalidate: shouldSkipRevalidation ? false :\n // Forced revalidation due to submission, useRevalidator, or X-Remix-Revalidate\n isRevalidationRequired || currentUrl.pathname + currentUrl.search === nextUrl.pathname + nextUrl.search ||\n // Search params affect all loaders\n currentUrl.search !== nextUrl.search || isNewRouteInstance(currentRouteMatch, nextRouteMatch)\n }));\n });\n // Pick fetcher.loads that need to be revalidated\n let revalidatingFetchers = [];\n fetchLoadMatches.forEach((f, key) => {\n // Don't revalidate:\n // - on initial load (shouldn't be any fetchers then anyway)\n // - if fetcher won't be present in the subsequent render\n // - no longer matches the URL (v7_fetcherPersist=false)\n // - was unmounted but persisted due to v7_fetcherPersist=true\n if (isInitialLoad || !matches.some(m => m.route.id === f.routeId) || deletedFetchers.has(key)) {\n return;\n }\n let fetcherMatches = matchRoutes(routesToUse, f.path, basename);\n // If the fetcher path no longer matches, push it in with null matches so\n // we can trigger a 404 in callLoadersAndMaybeResolveData. Note this is\n // currently only a use-case for Remix HMR where the route tree can change\n // at runtime and remove a route previously loaded via a fetcher\n if (!fetcherMatches) {\n revalidatingFetchers.push({\n key,\n routeId: f.routeId,\n path: f.path,\n matches: null,\n match: null,\n controller: null\n });\n return;\n }\n // Revalidating fetchers are decoupled from the route matches since they\n // load from a static href. They revalidate based on explicit revalidation\n // (submission, useRevalidator, or X-Remix-Revalidate)\n let fetcher = state.fetchers.get(key);\n let fetcherMatch = getTargetMatch(fetcherMatches, f.path);\n let shouldRevalidate = false;\n if (fetchRedirectIds.has(key)) {\n // Never trigger a revalidation of an actively redirecting fetcher\n shouldRevalidate = false;\n } else if (cancelledFetcherLoads.has(key)) {\n // Always mark for revalidation if the fetcher was cancelled\n cancelledFetcherLoads.delete(key);\n shouldRevalidate = true;\n } else if (fetcher && fetcher.state !== \"idle\" && fetcher.data === undefined) {\n // If the fetcher hasn't ever completed loading yet, then this isn't a\n // revalidation, it would just be a brand new load if an explicit\n // revalidation is required\n shouldRevalidate = isRevalidationRequired;\n } else {\n // Otherwise fall back on any user-defined shouldRevalidate, defaulting\n // to explicit revalidations only\n shouldRevalidate = shouldRevalidateLoader(fetcherMatch, _extends({\n currentUrl,\n currentParams: state.matches[state.matches.length - 1].params,\n nextUrl,\n nextParams: matches[matches.length - 1].params\n }, submission, {\n actionResult,\n actionStatus,\n defaultShouldRevalidate: shouldSkipRevalidation ? false : isRevalidationRequired\n }));\n }\n if (shouldRevalidate) {\n revalidatingFetchers.push({\n key,\n routeId: f.routeId,\n path: f.path,\n matches: fetcherMatches,\n match: fetcherMatch,\n controller: new AbortController()\n });\n }\n });\n return [navigationMatches, revalidatingFetchers];\n}\nfunction isNewLoader(currentLoaderData, currentMatch, match) {\n let isNew =\n // [a] -> [a, b]\n !currentMatch ||\n // [a, b] -> [a, c]\n match.route.id !== currentMatch.route.id;\n // Handle the case that we don't have data for a re-used route, potentially\n // from a prior error or from a cancelled pending deferred\n let isMissingData = currentLoaderData[match.route.id] === undefined;\n // Always load if this is a net-new route or we don't yet have data\n return isNew || isMissingData;\n}\nfunction isNewRouteInstance(currentMatch, match) {\n let currentPath = currentMatch.route.path;\n return (\n // param change for this match, /users/123 -> /users/456\n currentMatch.pathname !== match.pathname ||\n // splat param changed, which is not present in match.path\n // e.g. /files/images/avatar.jpg -> files/finances.xls\n currentPath != null && currentPath.endsWith(\"*\") && currentMatch.params[\"*\"] !== match.params[\"*\"]\n );\n}\nfunction shouldRevalidateLoader(loaderMatch, arg) {\n if (loaderMatch.route.shouldRevalidate) {\n let routeChoice = loaderMatch.route.shouldRevalidate(arg);\n if (typeof routeChoice === \"boolean\") {\n return routeChoice;\n }\n }\n return arg.defaultShouldRevalidate;\n}\n/**\n * Idempotent utility to execute patchRoutesOnMiss() to lazily load route\n * definitions and update the routes/routeManifest\n */\nasync function loadLazyRouteChildren(patchRoutesOnMissImpl, path, matches, routes, manifest, mapRouteProperties, pendingRouteChildren, signal) {\n let key = [path, ...matches.map(m => m.route.id)].join(\"-\");\n try {\n let pending = pendingRouteChildren.get(key);\n if (!pending) {\n pending = patchRoutesOnMissImpl({\n path,\n matches,\n patch: (routeId, children) => {\n if (!signal.aborted) {\n patchRoutesImpl(routeId, children, routes, manifest, mapRouteProperties);\n }\n }\n });\n pendingRouteChildren.set(key, pending);\n }\n if (pending && isPromise(pending)) {\n await pending;\n }\n } finally {\n pendingRouteChildren.delete(key);\n }\n}\nfunction patchRoutesImpl(routeId, children, routesToUse, manifest, mapRouteProperties) {\n if (routeId) {\n var _route$children;\n let route = manifest[routeId];\n invariant(route, \"No route found to patch children into: routeId = \" + routeId);\n let dataChildren = convertRoutesToDataRoutes(children, mapRouteProperties, [routeId, \"patch\", String(((_route$children = route.children) == null ? void 0 : _route$children.length) || \"0\")], manifest);\n if (route.children) {\n route.children.push(...dataChildren);\n } else {\n route.children = dataChildren;\n }\n } else {\n let dataChildren = convertRoutesToDataRoutes(children, mapRouteProperties, [\"patch\", String(routesToUse.length || \"0\")], manifest);\n routesToUse.push(...dataChildren);\n }\n}\n/**\n * Execute route.lazy() methods to lazily load route modules (loader, action,\n * shouldRevalidate) and update the routeManifest in place which shares objects\n * with dataRoutes so those get updated as well.\n */\nasync function loadLazyRouteModule(route, mapRouteProperties, manifest) {\n if (!route.lazy) {\n return;\n }\n let lazyRoute = await route.lazy();\n // If the lazy route function was executed and removed by another parallel\n // call then we can return - first lazy() to finish wins because the return\n // value of lazy is expected to be static\n if (!route.lazy) {\n return;\n }\n let routeToUpdate = manifest[route.id];\n invariant(routeToUpdate, \"No route found in manifest\");\n // Update the route in place. This should be safe because there's no way\n // we could yet be sitting on this route as we can't get there without\n // resolving lazy() first.\n //\n // This is different than the HMR \"update\" use-case where we may actively be\n // on the route being updated. The main concern boils down to \"does this\n // mutation affect any ongoing navigations or any current state.matches\n // values?\". If not, it should be safe to update in place.\n let routeUpdates = {};\n for (let lazyRouteProperty in lazyRoute) {\n let staticRouteValue = routeToUpdate[lazyRouteProperty];\n let isPropertyStaticallyDefined = staticRouteValue !== undefined &&\n // This property isn't static since it should always be updated based\n // on the route updates\n lazyRouteProperty !== \"hasErrorBoundary\";\n warning(!isPropertyStaticallyDefined, \"Route \\\"\" + routeToUpdate.id + \"\\\" has a static property \\\"\" + lazyRouteProperty + \"\\\" \" + \"defined but its lazy function is also returning a value for this property. \" + (\"The lazy route property \\\"\" + lazyRouteProperty + \"\\\" will be ignored.\"));\n if (!isPropertyStaticallyDefined && !immutableRouteKeys.has(lazyRouteProperty)) {\n routeUpdates[lazyRouteProperty] = lazyRoute[lazyRouteProperty];\n }\n }\n // Mutate the route with the provided updates. Do this first so we pass\n // the updated version to mapRouteProperties\n Object.assign(routeToUpdate, routeUpdates);\n // Mutate the `hasErrorBoundary` property on the route based on the route\n // updates and remove the `lazy` function so we don't resolve the lazy\n // route again.\n Object.assign(routeToUpdate, _extends({}, mapRouteProperties(routeToUpdate), {\n lazy: undefined\n }));\n}\n// Default implementation of `dataStrategy` which fetches all loaders in parallel\nfunction defaultDataStrategy(opts) {\n return Promise.all(opts.matches.map(m => m.resolve()));\n}\nasync function callDataStrategyImpl(dataStrategyImpl, type, request, matchesToLoad, matches, manifest, mapRouteProperties, requestContext) {\n let routeIdsToLoad = matchesToLoad.reduce((acc, m) => acc.add(m.route.id), new Set());\n let loadedMatches = new Set();\n // Send all matches here to allow for a middleware-type implementation.\n // handler will be a no-op for unneeded routes and we filter those results\n // back out below.\n let results = await dataStrategyImpl({\n matches: matches.map(match => {\n let shouldLoad = routeIdsToLoad.has(match.route.id);\n // `resolve` encapsulates the route.lazy, executing the\n // loader/action, and mapping return values/thrown errors to a\n // HandlerResult. Users can pass a callback to take fine-grained control\n // over the execution of the loader/action\n let resolve = handlerOverride => {\n loadedMatches.add(match.route.id);\n return shouldLoad ? callLoaderOrAction(type, request, match, manifest, mapRouteProperties, handlerOverride, requestContext) : Promise.resolve({\n type: ResultType.data,\n result: undefined\n });\n };\n return _extends({}, match, {\n shouldLoad,\n resolve\n });\n }),\n request,\n params: matches[0].params,\n context: requestContext\n });\n // Throw if any loadRoute implementations not called since they are what\n // ensures a route is fully loaded\n matches.forEach(m => invariant(loadedMatches.has(m.route.id), \"`match.resolve()` was not called for route id \\\"\" + m.route.id + \"\\\". \" + \"You must call `match.resolve()` on every match passed to \" + \"`dataStrategy` to ensure all routes are properly loaded.\"));\n // Filter out any middleware-only matches for which we didn't need to run handlers\n return results.filter((_, i) => routeIdsToLoad.has(matches[i].route.id));\n}\n// Default logic for calling a loader/action is the user has no specified a dataStrategy\nasync function callLoaderOrAction(type, request, match, manifest, mapRouteProperties, handlerOverride, staticContext) {\n let result;\n let onReject;\n let runHandler = handler => {\n // Setup a promise we can race against so that abort signals short circuit\n let reject;\n // This will never resolve so safe to type it as Promise<HandlerResult> to\n // satisfy the function return value\n let abortPromise = new Promise((_, r) => reject = r);\n onReject = () => reject();\n request.signal.addEventListener(\"abort\", onReject);\n let actualHandler = ctx => {\n if (typeof handler !== \"function\") {\n return Promise.reject(new Error(\"You cannot call the handler for a route which defines a boolean \" + (\"\\\"\" + type + \"\\\" [routeId: \" + match.route.id + \"]\")));\n }\n return handler({\n request,\n params: match.params,\n context: staticContext\n }, ...(ctx !== undefined ? [ctx] : []));\n };\n let handlerPromise;\n if (handlerOverride) {\n handlerPromise = handlerOverride(ctx => actualHandler(ctx));\n } else {\n handlerPromise = (async () => {\n try {\n let val = await actualHandler();\n return {\n type: \"data\",\n result: val\n };\n } catch (e) {\n return {\n type: \"error\",\n result: e\n };\n }\n })();\n }\n return Promise.race([handlerPromise, abortPromise]);\n };\n try {\n let handler = match.route[type];\n if (match.route.lazy) {\n if (handler) {\n // Run statically defined handler in parallel with lazy()\n let handlerError;\n let [value] = await Promise.all([\n // If the handler throws, don't let it immediately bubble out,\n // since we need to let the lazy() execution finish so we know if this\n // route has a boundary that can handle the error\n runHandler(handler).catch(e => {\n handlerError = e;\n }), loadLazyRouteModule(match.route, mapRouteProperties, manifest)]);\n if (handlerError !== undefined) {\n throw handlerError;\n }\n result = value;\n } else {\n // Load lazy route module, then run any returned handler\n await loadLazyRouteModule(match.route, mapRouteProperties, manifest);\n handler = match.route[type];\n if (handler) {\n // Handler still runs even if we got interrupted to maintain consistency\n // with un-abortable behavior of handler execution on non-lazy or\n // previously-lazy-loaded routes\n result = await runHandler(handler);\n } else if (type === \"action\") {\n let url = new URL(request.url);\n let pathname = url.pathname + url.search;\n throw getInternalRouterError(405, {\n method: request.method,\n pathname,\n routeId: match.route.id\n });\n } else {\n // lazy() route has no loader to run. Short circuit here so we don't\n // hit the invariant below that errors on returning undefined.\n return {\n type: ResultType.data,\n result: undefined\n };\n }\n }\n } else if (!handler) {\n let url = new URL(request.url);\n let pathname = url.pathname + url.search;\n throw getInternalRouterError(404, {\n pathname\n });\n } else {\n result = await runHandler(handler);\n }\n invariant(result.result !== undefined, \"You defined \" + (type === \"action\" ? \"an action\" : \"a loader\") + \" for route \" + (\"\\\"\" + match.route.id + \"\\\" but didn't return anything from your `\" + type + \"` \") + \"function. Please return a value or `null`.\");\n } catch (e) {\n // We should already be catching and converting normal handler executions to\n // HandlerResults and returning them, so anything that throws here is an\n // unexpected error we still need to wrap\n return {\n type: ResultType.error,\n result: e\n };\n } finally {\n if (onReject) {\n request.signal.removeEventListener(\"abort\", onReject);\n }\n }\n return result;\n}\nasync function convertHandlerResultToDataResult(handlerResult) {\n let {\n result,\n type\n } = handlerResult;\n if (isResponse(result)) {\n let data;\n try {\n let contentType = result.headers.get(\"Content-Type\");\n // Check between word boundaries instead of startsWith() due to the last\n // paragraph of https://httpwg.org/specs/rfc9110.html#field.content-type\n if (contentType && /\\bapplication\\/json\\b/.test(contentType)) {\n if (result.body == null) {\n data = null;\n } else {\n data = await result.json();\n }\n } else {\n data = await result.text();\n }\n } catch (e) {\n return {\n type: ResultType.error,\n error: e\n };\n }\n if (type === ResultType.error) {\n return {\n type: ResultType.error,\n error: new ErrorResponseImpl(result.status, result.statusText, data),\n statusCode: result.status,\n headers: result.headers\n };\n }\n return {\n type: ResultType.data,\n data,\n statusCode: result.status,\n headers: result.headers\n };\n }\n if (type === ResultType.error) {\n if (isDataWithResponseInit(result)) {\n var _result$init2;\n if (result.data instanceof Error) {\n var _result$init;\n return {\n type: ResultType.error,\n error: result.data,\n statusCode: (_result$init = result.init) == null ? void 0 : _result$init.status\n };\n }\n // Convert thrown unstable_data() to ErrorResponse instances\n result = new ErrorResponseImpl(((_result$init2 = result.init) == null ? void 0 : _result$init2.status) || 500, undefined, result.data);\n }\n return {\n type: ResultType.error,\n error: result,\n statusCode: isRouteErrorResponse(result) ? result.status : undefined\n };\n }\n if (isDeferredData(result)) {\n var _result$init3, _result$init4;\n return {\n type: ResultType.deferred,\n deferredData: result,\n statusCode: (_result$init3 = result.init) == null ? void 0 : _result$init3.status,\n headers: ((_result$init4 = result.init) == null ? void 0 : _result$init4.headers) && new Headers(result.init.headers)\n };\n }\n if (isDataWithResponseInit(result)) {\n var _result$init5, _result$init6;\n return {\n type: ResultType.data,\n data: result.data,\n statusCode: (_result$init5 = result.init) == null ? void 0 : _result$init5.status,\n headers: (_result$init6 = result.init) != null && _result$init6.headers ? new Headers(result.init.headers) : undefined\n };\n }\n return {\n type: ResultType.data,\n data: result\n };\n}\n// Support relative routing in internal redirects\nfunction normalizeRelativeRoutingRedirectResponse(response, request, routeId, matches, basename, v7_relativeSplatPath) {\n let location = response.headers.get(\"Location\");\n invariant(location, \"Redirects returned/thrown from loaders/actions must have a Location header\");\n if (!ABSOLUTE_URL_REGEX.test(location)) {\n let trimmedMatches = matches.slice(0, matches.findIndex(m => m.route.id === routeId) + 1);\n location = normalizeTo(new URL(request.url), trimmedMatches, basename, true, location, v7_relativeSplatPath);\n response.headers.set(\"Location\", location);\n }\n return response;\n}\nfunction normalizeRedirectLocation(location, currentUrl, basename) {\n if (ABSOLUTE_URL_REGEX.test(location)) {\n // Strip off the protocol+origin for same-origin + same-basename absolute redirects\n let normalizedLocation = location;\n let url = normalizedLocation.startsWith(\"//\") ? new URL(currentUrl.protocol + normalizedLocation) : new URL(normalizedLocation);\n let isSameBasename = stripBasename(url.pathname, basename) != null;\n if (url.origin === currentUrl.origin && isSameBasename) {\n return url.pathname + url.search + url.hash;\n }\n }\n return location;\n}\n// Utility method for creating the Request instances for loaders/actions during\n// client-side navigations and fetches. During SSR we will always have a\n// Request instance from the static handler (query/queryRoute)\nfunction createClientSideRequest(history, location, signal, submission) {\n let url = history.createURL(stripHashFromPath(location)).toString();\n let init = {\n signal\n };\n if (submission && isMutationMethod(submission.formMethod)) {\n let {\n formMethod,\n formEncType\n } = submission;\n // Didn't think we needed this but it turns out unlike other methods, patch\n // won't be properly normalized to uppercase and results in a 405 error.\n // See: https://fetch.spec.whatwg.org/#concept-method\n init.method = formMethod.toUpperCase();\n if (formEncType === \"application/json\") {\n init.headers = new Headers({\n \"Content-Type\": formEncType\n });\n init.body = JSON.stringify(submission.json);\n } else if (formEncType === \"text/plain\") {\n // Content-Type is inferred (https://fetch.spec.whatwg.org/#dom-request)\n init.body = submission.text;\n } else if (formEncType === \"application/x-www-form-urlencoded\" && submission.formData) {\n // Content-Type is inferred (https://fetch.spec.whatwg.org/#dom-request)\n init.body = convertFormDataToSearchParams(submission.formData);\n } else {\n // Content-Type is inferred (https://fetch.spec.whatwg.org/#dom-request)\n init.body = submission.formData;\n }\n }\n return new Request(url, init);\n}\nfunction convertFormDataToSearchParams(formData) {\n let searchParams = new URLSearchParams();\n for (let [key, value] of formData.entries()) {\n // https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#converting-an-entry-list-to-a-list-of-name-value-pairs\n searchParams.append(key, typeof value === \"string\" ? value : value.name);\n }\n return searchParams;\n}\nfunction convertSearchParamsToFormData(searchParams) {\n let formData = new FormData();\n for (let [key, value] of searchParams.entries()) {\n formData.append(key, value);\n }\n return formData;\n}\nfunction processRouteLoaderData(matches, matchesToLoad, results, pendingActionResult, activeDeferreds, skipLoaderErrorBubbling) {\n // Fill in loaderData/errors from our loaders\n let loaderData = {};\n let errors = null;\n let statusCode;\n let foundError = false;\n let loaderHeaders = {};\n let pendingError = pendingActionResult && isErrorResult(pendingActionResult[1]) ? pendingActionResult[1].error : undefined;\n // Process loader results into state.loaderData/state.errors\n results.forEach((result, index) => {\n let id = matchesToLoad[index].route.id;\n invariant(!isRedirectResult(result), \"Cannot handle redirect results in processLoaderData\");\n if (isErrorResult(result)) {\n let error = result.error;\n // If we have a pending action error, we report it at the highest-route\n // that throws a loader error, and then clear it out to indicate that\n // it was consumed\n if (pendingError !== undefined) {\n error = pendingError;\n pendingError = undefined;\n }\n errors = errors || {};\n if (skipLoaderErrorBubbling) {\n errors[id] = error;\n } else {\n // Look upwards from the matched route for the closest ancestor error\n // boundary, defaulting to the root match. Prefer higher error values\n // if lower errors bubble to the same boundary\n let boundaryMatch = findNearestBoundary(matches, id);\n if (errors[boundaryMatch.route.id] == null) {\n errors[boundaryMatch.route.id] = error;\n }\n }\n // Clear our any prior loaderData for the throwing route\n loaderData[id] = undefined;\n // Once we find our first (highest) error, we set the status code and\n // prevent deeper status codes from overriding\n if (!foundError) {\n foundError = true;\n statusCode = isRouteErrorResponse(result.error) ? result.error.status : 500;\n }\n if (result.headers) {\n loaderHeaders[id] = result.headers;\n }\n } else {\n if (isDeferredResult(result)) {\n activeDeferreds.set(id, result.deferredData);\n loaderData[id] = result.deferredData.data;\n // Error status codes always override success status codes, but if all\n // loaders are successful we take the deepest status code.\n if (result.statusCode != null && result.statusCode !== 200 && !foundError) {\n statusCode = result.statusCode;\n }\n if (result.headers) {\n loaderHeaders[id] = result.headers;\n }\n } else {\n loaderData[id] = result.data;\n // Error status codes always override success status codes, but if all\n // loaders are successful we take the deepest status code.\n if (result.statusCode && result.statusCode !== 200 && !foundError) {\n statusCode = result.statusCode;\n }\n if (result.headers) {\n loaderHeaders[id] = result.headers;\n }\n }\n }\n });\n // If we didn't consume the pending action error (i.e., all loaders\n // resolved), then consume it here. Also clear out any loaderData for the\n // throwing route\n if (pendingError !== undefined && pendingActionResult) {\n errors = {\n [pendingActionResult[0]]: pendingError\n };\n loaderData[pendingActionResult[0]] = undefined;\n }\n return {\n loaderData,\n errors,\n statusCode: statusCode || 200,\n loaderHeaders\n };\n}\nfunction processLoaderData(state, matches, matchesToLoad, results, pendingActionResult, revalidatingFetchers, fetcherResults, activeDeferreds) {\n let {\n loaderData,\n errors\n } = processRouteLoaderData(matches, matchesToLoad, results, pendingActionResult, activeDeferreds, false // This method is only called client side so we always want to bubble\n );\n // Process results from our revalidating fetchers\n for (let index = 0; index < revalidatingFetchers.length; index++) {\n let {\n key,\n match,\n controller\n } = revalidatingFetchers[index];\n invariant(fetcherResults !== undefined && fetcherResults[index] !== undefined, \"Did not find corresponding fetcher result\");\n let result = fetcherResults[index];\n // Process fetcher non-redirect errors\n if (controller && controller.signal.aborted) {\n // Nothing to do for aborted fetchers\n continue;\n } else if (isErrorResult(result)) {\n let boundaryMatch = findNearestBoundary(state.matches, match == null ? void 0 : match.route.id);\n if (!(errors && errors[boundaryMatch.route.id])) {\n errors = _extends({}, errors, {\n [boundaryMatch.route.id]: result.error\n });\n }\n state.fetchers.delete(key);\n } else if (isRedirectResult(result)) {\n // Should never get here, redirects should get processed above, but we\n // keep this to type narrow to a success result in the else\n invariant(false, \"Unhandled fetcher revalidation redirect\");\n } else if (isDeferredResult(result)) {\n // Should never get here, deferred data should be awaited for fetchers\n // in resolveDeferredResults\n invariant(false, \"Unhandled fetcher deferred data\");\n } else {\n let doneFetcher = getDoneFetcher(result.data);\n state.fetchers.set(key, doneFetcher);\n }\n }\n return {\n loaderData,\n errors\n };\n}\nfunction mergeLoaderData(loaderData, newLoaderData, matches, errors) {\n let mergedLoaderData = _extends({}, newLoaderData);\n for (let match of matches) {\n let id = match.route.id;\n if (newLoaderData.hasOwnProperty(id)) {\n if (newLoaderData[id] !== undefined) {\n mergedLoaderData[id] = newLoaderData[id];\n }\n } else if (loaderData[id] !== undefined && match.route.loader) {\n // Preserve existing keys not included in newLoaderData and where a loader\n // wasn't removed by HMR\n mergedLoaderData[id] = loaderData[id];\n }\n if (errors && errors.hasOwnProperty(id)) {\n // Don't keep any loader data below the boundary\n break;\n }\n }\n return mergedLoaderData;\n}\nfunction getActionDataForCommit(pendingActionResult) {\n if (!pendingActionResult) {\n return {};\n }\n return isErrorResult(pendingActionResult[1]) ? {\n // Clear out prior actionData on errors\n actionData: {}\n } : {\n actionData: {\n [pendingActionResult[0]]: pendingActionResult[1].data\n }\n };\n}\n// Find the nearest error boundary, looking upwards from the leaf route (or the\n// route specified by routeId) for the closest ancestor error boundary,\n// defaulting to the root match\nfunction findNearestBoundary(matches, routeId) {\n let eligibleMatches = routeId ? matches.slice(0, matches.findIndex(m => m.route.id === routeId) + 1) : [...matches];\n return eligibleMatches.reverse().find(m => m.route.hasErrorBoundary === true) || matches[0];\n}\nfunction getShortCircuitMatches(routes) {\n // Prefer a root layout route if present, otherwise shim in a route object\n let route = routes.length === 1 ? routes[0] : routes.find(r => r.index || !r.path || r.path === \"/\") || {\n id: \"__shim-error-route__\"\n };\n return {\n matches: [{\n params: {},\n pathname: \"\",\n pathnameBase: \"\",\n route\n }],\n route\n };\n}\nfunction getInternalRouterError(status, _temp5) {\n let {\n pathname,\n routeId,\n method,\n type,\n message\n } = _temp5 === void 0 ? {} : _temp5;\n let statusText = \"Unknown Server Error\";\n let errorMessage = \"Unknown @remix-run/router error\";\n if (status === 400) {\n statusText = \"Bad Request\";\n if (type === \"route-discovery\") {\n errorMessage = \"Unable to match URL \\\"\" + pathname + \"\\\" - the `unstable_patchRoutesOnMiss()` \" + (\"function threw the following error:\\n\" + message);\n } else if (method && pathname && routeId) {\n errorMessage = \"You made a \" + method + \" request to \\\"\" + pathname + \"\\\" but \" + (\"did not provide a `loader` for route \\\"\" + routeId + \"\\\", \") + \"so there is no way to handle the request.\";\n } else if (type === \"defer-action\") {\n errorMessage = \"defer() is not supported in actions\";\n } else if (type === \"invalid-body\") {\n errorMessage = \"Unable to encode submission body\";\n }\n } else if (status === 403) {\n statusText = \"Forbidden\";\n errorMessage = \"Route \\\"\" + routeId + \"\\\" does not match URL \\\"\" + pathname + \"\\\"\";\n } else if (status === 404) {\n statusText = \"Not Found\";\n errorMessage = \"No route matches URL \\\"\" + pathname + \"\\\"\";\n } else if (status === 405) {\n statusText = \"Method Not Allowed\";\n if (method && pathname && routeId) {\n errorMessage = \"You made a \" + method.toUpperCase() + \" request to \\\"\" + pathname + \"\\\" but \" + (\"did not provide an `action` for route \\\"\" + routeId + \"\\\", \") + \"so there is no way to handle the request.\";\n } else if (method) {\n errorMessage = \"Invalid request method \\\"\" + method.toUpperCase() + \"\\\"\";\n }\n }\n return new ErrorResponseImpl(status || 500, statusText, new Error(errorMessage), true);\n}\n// Find any returned redirect errors, starting from the lowest match\nfunction findRedirect(results) {\n for (let i = results.length - 1; i >= 0; i--) {\n let result = results[i];\n if (isRedirectResult(result)) {\n return {\n result,\n idx: i\n };\n }\n }\n}\nfunction stripHashFromPath(path) {\n let parsedPath = typeof path === \"string\" ? parsePath(path) : path;\n return createPath(_extends({}, parsedPath, {\n hash: \"\"\n }));\n}\nfunction isHashChangeOnly(a, b) {\n if (a.pathname !== b.pathname || a.search !== b.search) {\n return false;\n }\n if (a.hash === \"\") {\n // /page -> /page#hash\n return b.hash !== \"\";\n } else if (a.hash === b.hash) {\n // /page#hash -> /page#hash\n return true;\n } else if (b.hash !== \"\") {\n // /page#hash -> /page#other\n return true;\n }\n // If the hash is removed the browser will re-perform a request to the server\n // /page#hash -> /page\n return false;\n}\nfunction isPromise(val) {\n return typeof val === \"object\" && val != null && \"then\" in val;\n}\nfunction isHandlerResult(result) {\n return result != null && typeof result === \"object\" && \"type\" in result && \"result\" in result && (result.type === ResultType.data || result.type === ResultType.error);\n}\nfunction isRedirectHandlerResult(result) {\n return isResponse(result.result) && redirectStatusCodes.has(result.result.status);\n}\nfunction isDeferredResult(result) {\n return result.type === ResultType.deferred;\n}\nfunction isErrorResult(result) {\n return result.type === ResultType.error;\n}\nfunction isRedirectResult(result) {\n return (result && result.type) === ResultType.redirect;\n}\nfunction isDataWithResponseInit(value) {\n return typeof value === \"object\" && value != null && \"type\" in value && \"data\" in value && \"init\" in value && value.type === \"DataWithResponseInit\";\n}\nfunction isDeferredData(value) {\n let deferred = value;\n return deferred && typeof deferred === \"object\" && typeof deferred.data === \"object\" && typeof deferred.subscribe === \"function\" && typeof deferred.cancel === \"function\" && typeof deferred.resolveData === \"function\";\n}\nfunction isResponse(value) {\n return value != null && typeof value.status === \"number\" && typeof value.statusText === \"string\" && typeof value.headers === \"object\" && typeof value.body !== \"undefined\";\n}\nfunction isRedirectResponse(result) {\n if (!isResponse(result)) {\n return false;\n }\n let status = result.status;\n let location = result.headers.get(\"Location\");\n return status >= 300 && status <= 399 && location != null;\n}\nfunction isValidMethod(method) {\n return validRequestMethods.has(method.toLowerCase());\n}\nfunction isMutationMethod(method) {\n return validMutationMethods.has(method.toLowerCase());\n}\nasync function resolveDeferredResults(currentMatches, matchesToLoad, results, signals, isFetcher, currentLoaderData) {\n for (let index = 0; index < results.length; index++) {\n let result = results[index];\n let match = matchesToLoad[index];\n // If we don't have a match, then we can have a deferred result to do\n // anything with. This is for revalidating fetchers where the route was\n // removed during HMR\n if (!match) {\n continue;\n }\n let currentMatch = currentMatches.find(m => m.route.id === match.route.id);\n let isRevalidatingLoader = currentMatch != null && !isNewRouteInstance(currentMatch, match) && (currentLoaderData && currentLoaderData[match.route.id]) !== undefined;\n if (isDeferredResult(result) && (isFetcher || isRevalidatingLoader)) {\n // Note: we do not have to touch activeDeferreds here since we race them\n // against the signal in resolveDeferredData and they'll get aborted\n // there if needed\n let signal = signals[index];\n invariant(signal, \"Expected an AbortSignal for revalidating fetcher deferred result\");\n await resolveDeferredData(result, signal, isFetcher).then(result => {\n if (result) {\n results[index] = result || results[index];\n }\n });\n }\n }\n}\nasync function resolveDeferredData(result, signal, unwrap) {\n if (unwrap === void 0) {\n unwrap = false;\n }\n let aborted = await result.deferredData.resolveData(signal);\n if (aborted) {\n return;\n }\n if (unwrap) {\n try {\n return {\n type: ResultType.data,\n data: result.deferredData.unwrappedData\n };\n } catch (e) {\n // Handle any TrackedPromise._error values encountered while unwrapping\n return {\n type: ResultType.error,\n error: e\n };\n }\n }\n return {\n type: ResultType.data,\n data: result.deferredData.data\n };\n}\nfunction hasNakedIndexQuery(search) {\n return new URLSearchParams(search).getAll(\"index\").some(v => v === \"\");\n}\nfunction getTargetMatch(matches, location) {\n let search = typeof location === \"string\" ? parsePath(location).search : location.search;\n if (matches[matches.length - 1].route.index && hasNakedIndexQuery(search || \"\")) {\n // Return the leaf index route when index is present\n return matches[matches.length - 1];\n }\n // Otherwise grab the deepest \"path contributing\" match (ignoring index and\n // pathless layout routes)\n let pathMatches = getPathContributingMatches(matches);\n return pathMatches[pathMatches.length - 1];\n}\nfunction getSubmissionFromNavigation(navigation) {\n let {\n formMethod,\n formAction,\n formEncType,\n text,\n formData,\n json\n } = navigation;\n if (!formMethod || !formAction || !formEncType) {\n return;\n }\n if (text != null) {\n return {\n formMethod,\n formAction,\n formEncType,\n formData: undefined,\n json: undefined,\n text\n };\n } else if (formData != null) {\n return {\n formMethod,\n formAction,\n formEncType,\n formData,\n json: undefined,\n text: undefined\n };\n } else if (json !== undefined) {\n return {\n formMethod,\n formAction,\n formEncType,\n formData: undefined,\n json,\n text: undefined\n };\n }\n}\nfunction getLoadingNavigation(location, submission) {\n if (submission) {\n let navigation = {\n state: \"loading\",\n location,\n formMethod: submission.formMethod,\n formAction: submission.formAction,\n formEncType: submission.formEncType,\n formData: submission.formData,\n json: submission.json,\n text: submission.text\n };\n return navigation;\n } else {\n let navigation = {\n state: \"loading\",\n location,\n formMethod: undefined,\n formAction: undefined,\n formEncType: undefined,\n formData: undefined,\n json: undefined,\n text: undefined\n };\n return navigation;\n }\n}\nfunction getSubmittingNavigation(location, submission) {\n let navigation = {\n state: \"submitting\",\n location,\n formMethod: submission.formMethod,\n formAction: submission.formAction,\n formEncType: submission.formEncType,\n formData: submission.formData,\n json: submission.json,\n text: submission.text\n };\n return navigation;\n}\nfunction getLoadingFetcher(submission, data) {\n if (submission) {\n let fetcher = {\n state: \"loading\",\n formMethod: submission.formMethod,\n formAction: submission.formAction,\n formEncType: submission.formEncType,\n formData: submission.formData,\n json: submission.json,\n text: submission.text,\n data\n };\n return fetcher;\n } else {\n let fetcher = {\n state: \"loading\",\n formMethod: undefined,\n formAction: undefined,\n formEncType: undefined,\n formData: undefined,\n json: undefined,\n text: undefined,\n data\n };\n return fetcher;\n }\n}\nfunction getSubmittingFetcher(submission, existingFetcher) {\n let fetcher = {\n state: \"submitting\",\n formMethod: submission.formMethod,\n formAction: submission.formAction,\n formEncType: submission.formEncType,\n formData: submission.formData,\n json: submission.json,\n text: submission.text,\n data: existingFetcher ? existingFetcher.data : undefined\n };\n return fetcher;\n}\nfunction getDoneFetcher(data) {\n let fetcher = {\n state: \"idle\",\n formMethod: undefined,\n formAction: undefined,\n formEncType: undefined,\n formData: undefined,\n json: undefined,\n text: undefined,\n data\n };\n return fetcher;\n}\nfunction restoreAppliedTransitions(_window, transitions) {\n try {\n let sessionPositions = _window.sessionStorage.getItem(TRANSITIONS_STORAGE_KEY);\n if (sessionPositions) {\n let json = JSON.parse(sessionPositions);\n for (let [k, v] of Object.entries(json || {})) {\n if (v && Array.isArray(v)) {\n transitions.set(k, new Set(v || []));\n }\n }\n }\n } catch (e) {\n // no-op, use default empty object\n }\n}\nfunction persistAppliedTransitions(_window, transitions) {\n if (transitions.size > 0) {\n let json = {};\n for (let [k, v] of transitions) {\n json[k] = [...v];\n }\n try {\n _window.sessionStorage.setItem(TRANSITIONS_STORAGE_KEY, JSON.stringify(json));\n } catch (error) {\n warning(false, \"Failed to save applied view transitions in sessionStorage (\" + error + \").\");\n }\n }\n}\n//#endregion\n\nexport { AbortedDeferredError, Action, IDLE_BLOCKER, IDLE_FETCHER, IDLE_NAVIGATION, UNSAFE_DEFERRED_SYMBOL, DeferredData as UNSAFE_DeferredData, ErrorResponseImpl as UNSAFE_ErrorResponseImpl, convertRouteMatchToUiMatch as UNSAFE_convertRouteMatchToUiMatch, convertRoutesToDataRoutes as UNSAFE_convertRoutesToDataRoutes, decodePath as UNSAFE_decodePath, getResolveToMatches as UNSAFE_getResolveToMatches, invariant as UNSAFE_invariant, warning as UNSAFE_warning, createBrowserHistory, createHashHistory, createMemoryHistory, createPath, createRouter, createStaticHandler, defer, generatePath, getStaticContextFromError, getToPathname, isDataWithResponseInit, isDeferredData, isRouteErrorResponse, joinPaths, json, matchPath, matchRoutes, normalizePathname, parsePath, redirect, redirectDocument, replace, resolvePath, resolveTo, stripBasename, data as unstable_data };\n//# sourceMappingURL=router.js.map\n","/**\n * React Router v6.26.0\n *\n * Copyright (c) Remix Software Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE.md file in the root directory of this source tree.\n *\n * @license MIT\n */\nimport * as React from 'react';\nimport { UNSAFE_invariant, joinPaths, matchPath, UNSAFE_decodePath, UNSAFE_getResolveToMatches, UNSAFE_warning, resolveTo, parsePath, matchRoutes, Action, UNSAFE_convertRouteMatchToUiMatch, stripBasename, IDLE_BLOCKER, isRouteErrorResponse, createMemoryHistory, AbortedDeferredError, createRouter } from '@remix-run/router';\nexport { AbortedDeferredError, Action as NavigationType, createPath, defer, generatePath, isRouteErrorResponse, json, matchPath, matchRoutes, parsePath, redirect, redirectDocument, replace, resolvePath } from '@remix-run/router';\n\nfunction _extends() {\n _extends = Object.assign ? Object.assign.bind() : function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n return target;\n };\n return _extends.apply(this, arguments);\n}\n\n// Create react-specific types from the agnostic types in @remix-run/router to\n// export from react-router\nconst DataRouterContext = /*#__PURE__*/React.createContext(null);\nif (process.env.NODE_ENV !== \"production\") {\n DataRouterContext.displayName = \"DataRouter\";\n}\nconst DataRouterStateContext = /*#__PURE__*/React.createContext(null);\nif (process.env.NODE_ENV !== \"production\") {\n DataRouterStateContext.displayName = \"DataRouterState\";\n}\nconst AwaitContext = /*#__PURE__*/React.createContext(null);\nif (process.env.NODE_ENV !== \"production\") {\n AwaitContext.displayName = \"Await\";\n}\n\n/**\n * A Navigator is a \"location changer\"; it's how you get to different locations.\n *\n * Every history instance conforms to the Navigator interface, but the\n * distinction is useful primarily when it comes to the low-level `<Router>` API\n * where both the location and a navigator must be provided separately in order\n * to avoid \"tearing\" that may occur in a suspense-enabled app if the action\n * and/or location were to be read directly from the history instance.\n */\n\nconst NavigationContext = /*#__PURE__*/React.createContext(null);\nif (process.env.NODE_ENV !== \"production\") {\n NavigationContext.displayName = \"Navigation\";\n}\nconst LocationContext = /*#__PURE__*/React.createContext(null);\nif (process.env.NODE_ENV !== \"production\") {\n LocationContext.displayName = \"Location\";\n}\nconst RouteContext = /*#__PURE__*/React.createContext({\n outlet: null,\n matches: [],\n isDataRoute: false\n});\nif (process.env.NODE_ENV !== \"production\") {\n RouteContext.displayName = \"Route\";\n}\nconst RouteErrorContext = /*#__PURE__*/React.createContext(null);\nif (process.env.NODE_ENV !== \"production\") {\n RouteErrorContext.displayName = \"RouteError\";\n}\n\n/**\n * Returns the full href for the given \"to\" value. This is useful for building\n * custom links that are also accessible and preserve right-click behavior.\n *\n * @see https://reactrouter.com/hooks/use-href\n */\nfunction useHref(to, _temp) {\n let {\n relative\n } = _temp === void 0 ? {} : _temp;\n !useInRouterContext() ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, // TODO: This error is probably because they somehow have 2 versions of the\n // router loaded. We can help them understand how to avoid that.\n \"useHref() may be used only in the context of a <Router> component.\") : UNSAFE_invariant(false) : void 0;\n let {\n basename,\n navigator\n } = React.useContext(NavigationContext);\n let {\n hash,\n pathname,\n search\n } = useResolvedPath(to, {\n relative\n });\n let joinedPathname = pathname;\n\n // If we're operating within a basename, prepend it to the pathname prior\n // to creating the href. If this is a root navigation, then just use the raw\n // basename which allows the basename to have full control over the presence\n // of a trailing slash on root links\n if (basename !== \"/\") {\n joinedPathname = pathname === \"/\" ? basename : joinPaths([basename, pathname]);\n }\n return navigator.createHref({\n pathname: joinedPathname,\n search,\n hash\n });\n}\n\n/**\n * Returns true if this component is a descendant of a `<Router>`.\n *\n * @see https://reactrouter.com/hooks/use-in-router-context\n */\nfunction useInRouterContext() {\n return React.useContext(LocationContext) != null;\n}\n\n/**\n * Returns the current location object, which represents the current URL in web\n * browsers.\n *\n * Note: If you're using this it may mean you're doing some of your own\n * \"routing\" in your app, and we'd like to know what your use case is. We may\n * be able to provide something higher-level to better suit your needs.\n *\n * @see https://reactrouter.com/hooks/use-location\n */\nfunction useLocation() {\n !useInRouterContext() ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, // TODO: This error is probably because they somehow have 2 versions of the\n // router loaded. We can help them understand how to avoid that.\n \"useLocation() may be used only in the context of a <Router> component.\") : UNSAFE_invariant(false) : void 0;\n return React.useContext(LocationContext).location;\n}\n\n/**\n * Returns the current navigation action which describes how the router came to\n * the current location, either by a pop, push, or replace on the history stack.\n *\n * @see https://reactrouter.com/hooks/use-navigation-type\n */\nfunction useNavigationType() {\n return React.useContext(LocationContext).navigationType;\n}\n\n/**\n * Returns a PathMatch object if the given pattern matches the current URL.\n * This is useful for components that need to know \"active\" state, e.g.\n * `<NavLink>`.\n *\n * @see https://reactrouter.com/hooks/use-match\n */\nfunction useMatch(pattern) {\n !useInRouterContext() ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, // TODO: This error is probably because they somehow have 2 versions of the\n // router loaded. We can help them understand how to avoid that.\n \"useMatch() may be used only in the context of a <Router> component.\") : UNSAFE_invariant(false) : void 0;\n let {\n pathname\n } = useLocation();\n return React.useMemo(() => matchPath(pattern, UNSAFE_decodePath(pathname)), [pathname, pattern]);\n}\n\n/**\n * The interface for the navigate() function returned from useNavigate().\n */\n\nconst navigateEffectWarning = \"You should call navigate() in a React.useEffect(), not when \" + \"your component is first rendered.\";\n\n// Mute warnings for calls to useNavigate in SSR environments\nfunction useIsomorphicLayoutEffect(cb) {\n let isStatic = React.useContext(NavigationContext).static;\n if (!isStatic) {\n // We should be able to get rid of this once react 18.3 is released\n // See: https://github.com/facebook/react/pull/26395\n // eslint-disable-next-line react-hooks/rules-of-hooks\n React.useLayoutEffect(cb);\n }\n}\n\n/**\n * Returns an imperative method for changing the location. Used by `<Link>`s, but\n * may also be used by other elements to change the location.\n *\n * @see https://reactrouter.com/hooks/use-navigate\n */\nfunction useNavigate() {\n let {\n isDataRoute\n } = React.useContext(RouteContext);\n // Conditional usage is OK here because the usage of a data router is static\n // eslint-disable-next-line react-hooks/rules-of-hooks\n return isDataRoute ? useNavigateStable() : useNavigateUnstable();\n}\nfunction useNavigateUnstable() {\n !useInRouterContext() ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, // TODO: This error is probably because they somehow have 2 versions of the\n // router loaded. We can help them understand how to avoid that.\n \"useNavigate() may be used only in the context of a <Router> component.\") : UNSAFE_invariant(false) : void 0;\n let dataRouterContext = React.useContext(DataRouterContext);\n let {\n basename,\n future,\n navigator\n } = React.useContext(NavigationContext);\n let {\n matches\n } = React.useContext(RouteContext);\n let {\n pathname: locationPathname\n } = useLocation();\n let routePathnamesJson = JSON.stringify(UNSAFE_getResolveToMatches(matches, future.v7_relativeSplatPath));\n let activeRef = React.useRef(false);\n useIsomorphicLayoutEffect(() => {\n activeRef.current = true;\n });\n let navigate = React.useCallback(function (to, options) {\n if (options === void 0) {\n options = {};\n }\n process.env.NODE_ENV !== \"production\" ? UNSAFE_warning(activeRef.current, navigateEffectWarning) : void 0;\n\n // Short circuit here since if this happens on first render the navigate\n // is useless because we haven't wired up our history listener yet\n if (!activeRef.current) return;\n if (typeof to === \"number\") {\n navigator.go(to);\n return;\n }\n let path = resolveTo(to, JSON.parse(routePathnamesJson), locationPathname, options.relative === \"path\");\n\n // If we're operating within a basename, prepend it to the pathname prior\n // to handing off to history (but only if we're not in a data router,\n // otherwise it'll prepend the basename inside of the router).\n // If this is a root navigation, then we navigate to the raw basename\n // which allows the basename to have full control over the presence of a\n // trailing slash on root links\n if (dataRouterContext == null && basename !== \"/\") {\n path.pathname = path.pathname === \"/\" ? basename : joinPaths([basename, path.pathname]);\n }\n (!!options.replace ? navigator.replace : navigator.push)(path, options.state, options);\n }, [basename, navigator, routePathnamesJson, locationPathname, dataRouterContext]);\n return navigate;\n}\nconst OutletContext = /*#__PURE__*/React.createContext(null);\n\n/**\n * Returns the context (if provided) for the child route at this level of the route\n * hierarchy.\n * @see https://reactrouter.com/hooks/use-outlet-context\n */\nfunction useOutletContext() {\n return React.useContext(OutletContext);\n}\n\n/**\n * Returns the element for the child route at this level of the route\n * hierarchy. Used internally by `<Outlet>` to render child routes.\n *\n * @see https://reactrouter.com/hooks/use-outlet\n */\nfunction useOutlet(context) {\n let outlet = React.useContext(RouteContext).outlet;\n if (outlet) {\n return /*#__PURE__*/React.createElement(OutletContext.Provider, {\n value: context\n }, outlet);\n }\n return outlet;\n}\n\n/**\n * Returns an object of key/value pairs of the dynamic params from the current\n * URL that were matched by the route path.\n *\n * @see https://reactrouter.com/hooks/use-params\n */\nfunction useParams() {\n let {\n matches\n } = React.useContext(RouteContext);\n let routeMatch = matches[matches.length - 1];\n return routeMatch ? routeMatch.params : {};\n}\n\n/**\n * Resolves the pathname of the given `to` value against the current location.\n *\n * @see https://reactrouter.com/hooks/use-resolved-path\n */\nfunction useResolvedPath(to, _temp2) {\n let {\n relative\n } = _temp2 === void 0 ? {} : _temp2;\n let {\n future\n } = React.useContext(NavigationContext);\n let {\n matches\n } = React.useContext(RouteContext);\n let {\n pathname: locationPathname\n } = useLocation();\n let routePathnamesJson = JSON.stringify(UNSAFE_getResolveToMatches(matches, future.v7_relativeSplatPath));\n return React.useMemo(() => resolveTo(to, JSON.parse(routePathnamesJson), locationPathname, relative === \"path\"), [to, routePathnamesJson, locationPathname, relative]);\n}\n\n/**\n * Returns the element of the route that matched the current location, prepared\n * with the correct context to render the remainder of the route tree. Route\n * elements in the tree must render an `<Outlet>` to render their child route's\n * element.\n *\n * @see https://reactrouter.com/hooks/use-routes\n */\nfunction useRoutes(routes, locationArg) {\n return useRoutesImpl(routes, locationArg);\n}\n\n// Internal implementation with accept optional param for RouterProvider usage\nfunction useRoutesImpl(routes, locationArg, dataRouterState, future) {\n !useInRouterContext() ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, // TODO: This error is probably because they somehow have 2 versions of the\n // router loaded. We can help them understand how to avoid that.\n \"useRoutes() may be used only in the context of a <Router> component.\") : UNSAFE_invariant(false) : void 0;\n let {\n navigator\n } = React.useContext(NavigationContext);\n let {\n matches: parentMatches\n } = React.useContext(RouteContext);\n let routeMatch = parentMatches[parentMatches.length - 1];\n let parentParams = routeMatch ? routeMatch.params : {};\n let parentPathname = routeMatch ? routeMatch.pathname : \"/\";\n let parentPathnameBase = routeMatch ? routeMatch.pathnameBase : \"/\";\n let parentRoute = routeMatch && routeMatch.route;\n if (process.env.NODE_ENV !== \"production\") {\n // You won't get a warning about 2 different <Routes> under a <Route>\n // without a trailing *, but this is a best-effort warning anyway since we\n // cannot even give the warning unless they land at the parent route.\n //\n // Example:\n //\n // <Routes>\n // {/* This route path MUST end with /* because otherwise\n // it will never match /blog/post/123 */}\n // <Route path=\"blog\" element={<Blog />} />\n // <Route path=\"blog/feed\" element={<BlogFeed />} />\n // </Routes>\n //\n // function Blog() {\n // return (\n // <Routes>\n // <Route path=\"post/:id\" element={<Post />} />\n // </Routes>\n // );\n // }\n let parentPath = parentRoute && parentRoute.path || \"\";\n warningOnce(parentPathname, !parentRoute || parentPath.endsWith(\"*\"), \"You rendered descendant <Routes> (or called `useRoutes()`) at \" + (\"\\\"\" + parentPathname + \"\\\" (under <Route path=\\\"\" + parentPath + \"\\\">) but the \") + \"parent route path has no trailing \\\"*\\\". This means if you navigate \" + \"deeper, the parent won't match anymore and therefore the child \" + \"routes will never render.\\n\\n\" + (\"Please change the parent <Route path=\\\"\" + parentPath + \"\\\"> to <Route \") + (\"path=\\\"\" + (parentPath === \"/\" ? \"*\" : parentPath + \"/*\") + \"\\\">.\"));\n }\n let locationFromContext = useLocation();\n let location;\n if (locationArg) {\n var _parsedLocationArg$pa;\n let parsedLocationArg = typeof locationArg === \"string\" ? parsePath(locationArg) : locationArg;\n !(parentPathnameBase === \"/\" || ((_parsedLocationArg$pa = parsedLocationArg.pathname) == null ? void 0 : _parsedLocationArg$pa.startsWith(parentPathnameBase))) ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, \"When overriding the location using `<Routes location>` or `useRoutes(routes, location)`, \" + \"the location pathname must begin with the portion of the URL pathname that was \" + (\"matched by all parent routes. The current pathname base is \\\"\" + parentPathnameBase + \"\\\" \") + (\"but pathname \\\"\" + parsedLocationArg.pathname + \"\\\" was given in the `location` prop.\")) : UNSAFE_invariant(false) : void 0;\n location = parsedLocationArg;\n } else {\n location = locationFromContext;\n }\n let pathname = location.pathname || \"/\";\n let remainingPathname = pathname;\n if (parentPathnameBase !== \"/\") {\n // Determine the remaining pathname by removing the # of URL segments the\n // parentPathnameBase has, instead of removing based on character count.\n // This is because we can't guarantee that incoming/outgoing encodings/\n // decodings will match exactly.\n // We decode paths before matching on a per-segment basis with\n // decodeURIComponent(), but we re-encode pathnames via `new URL()` so they\n // match what `window.location.pathname` would reflect. Those don't 100%\n // align when it comes to encoded URI characters such as % and &.\n //\n // So we may end up with:\n // pathname: \"/descendant/a%25b/match\"\n // parentPathnameBase: \"/descendant/a%b\"\n //\n // And the direct substring removal approach won't work :/\n let parentSegments = parentPathnameBase.replace(/^\\//, \"\").split(\"/\");\n let segments = pathname.replace(/^\\//, \"\").split(\"/\");\n remainingPathname = \"/\" + segments.slice(parentSegments.length).join(\"/\");\n }\n let matches = matchRoutes(routes, {\n pathname: remainingPathname\n });\n if (process.env.NODE_ENV !== \"production\") {\n process.env.NODE_ENV !== \"production\" ? UNSAFE_warning(parentRoute || matches != null, \"No routes matched location \\\"\" + location.pathname + location.search + location.hash + \"\\\" \") : void 0;\n process.env.NODE_ENV !== \"production\" ? UNSAFE_warning(matches == null || matches[matches.length - 1].route.element !== undefined || matches[matches.length - 1].route.Component !== undefined || matches[matches.length - 1].route.lazy !== undefined, \"Matched leaf route at location \\\"\" + location.pathname + location.search + location.hash + \"\\\" \" + \"does not have an element or Component. This means it will render an <Outlet /> with a \" + \"null value by default resulting in an \\\"empty\\\" page.\") : void 0;\n }\n let renderedMatches = _renderMatches(matches && matches.map(match => Object.assign({}, match, {\n params: Object.assign({}, parentParams, match.params),\n pathname: joinPaths([parentPathnameBase,\n // Re-encode pathnames that were decoded inside matchRoutes\n navigator.encodeLocation ? navigator.encodeLocation(match.pathname).pathname : match.pathname]),\n pathnameBase: match.pathnameBase === \"/\" ? parentPathnameBase : joinPaths([parentPathnameBase,\n // Re-encode pathnames that were decoded inside matchRoutes\n navigator.encodeLocation ? navigator.encodeLocation(match.pathnameBase).pathname : match.pathnameBase])\n })), parentMatches, dataRouterState, future);\n\n // When a user passes in a `locationArg`, the associated routes need to\n // be wrapped in a new `LocationContext.Provider` in order for `useLocation`\n // to use the scoped location instead of the global location.\n if (locationArg && renderedMatches) {\n return /*#__PURE__*/React.createElement(LocationContext.Provider, {\n value: {\n location: _extends({\n pathname: \"/\",\n search: \"\",\n hash: \"\",\n state: null,\n key: \"default\"\n }, location),\n navigationType: Action.Pop\n }\n }, renderedMatches);\n }\n return renderedMatches;\n}\nfunction DefaultErrorComponent() {\n let error = useRouteError();\n let message = isRouteErrorResponse(error) ? error.status + \" \" + error.statusText : error instanceof Error ? error.message : JSON.stringify(error);\n let stack = error instanceof Error ? error.stack : null;\n let lightgrey = \"rgba(200,200,200, 0.5)\";\n let preStyles = {\n padding: \"0.5rem\",\n backgroundColor: lightgrey\n };\n let codeStyles = {\n padding: \"2px 4px\",\n backgroundColor: lightgrey\n };\n let devInfo = null;\n if (process.env.NODE_ENV !== \"production\") {\n console.error(\"Error handled by React Router default ErrorBoundary:\", error);\n devInfo = /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(\"p\", null, \"\\uD83D\\uDCBF Hey developer \\uD83D\\uDC4B\"), /*#__PURE__*/React.createElement(\"p\", null, \"You can provide a way better UX than this when your app throws errors by providing your own \", /*#__PURE__*/React.createElement(\"code\", {\n style: codeStyles\n }, \"ErrorBoundary\"), \" or\", \" \", /*#__PURE__*/React.createElement(\"code\", {\n style: codeStyles\n }, \"errorElement\"), \" prop on your route.\"));\n }\n return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(\"h2\", null, \"Unexpected Application Error!\"), /*#__PURE__*/React.createElement(\"h3\", {\n style: {\n fontStyle: \"italic\"\n }\n }, message), stack ? /*#__PURE__*/React.createElement(\"pre\", {\n style: preStyles\n }, stack) : null, devInfo);\n}\nconst defaultErrorElement = /*#__PURE__*/React.createElement(DefaultErrorComponent, null);\nclass RenderErrorBoundary extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n location: props.location,\n revalidation: props.revalidation,\n error: props.error\n };\n }\n static getDerivedStateFromError(error) {\n return {\n error: error\n };\n }\n static getDerivedStateFromProps(props, state) {\n // When we get into an error state, the user will likely click \"back\" to the\n // previous page that didn't have an error. Because this wraps the entire\n // application, that will have no effect--the error page continues to display.\n // This gives us a mechanism to recover from the error when the location changes.\n //\n // Whether we're in an error state or not, we update the location in state\n // so that when we are in an error state, it gets reset when a new location\n // comes in and the user recovers from the error.\n if (state.location !== props.location || state.revalidation !== \"idle\" && props.revalidation === \"idle\") {\n return {\n error: props.error,\n location: props.location,\n revalidation: props.revalidation\n };\n }\n\n // If we're not changing locations, preserve the location but still surface\n // any new errors that may come through. We retain the existing error, we do\n // this because the error provided from the app state may be cleared without\n // the location changing.\n return {\n error: props.error !== undefined ? props.error : state.error,\n location: state.location,\n revalidation: props.revalidation || state.revalidation\n };\n }\n componentDidCatch(error, errorInfo) {\n console.error(\"React Router caught the following error during render\", error, errorInfo);\n }\n render() {\n return this.state.error !== undefined ? /*#__PURE__*/React.createElement(RouteContext.Provider, {\n value: this.props.routeContext\n }, /*#__PURE__*/React.createElement(RouteErrorContext.Provider, {\n value: this.state.error,\n children: this.props.component\n })) : this.props.children;\n }\n}\nfunction RenderedRoute(_ref) {\n let {\n routeContext,\n match,\n children\n } = _ref;\n let dataRouterContext = React.useContext(DataRouterContext);\n\n // Track how deep we got in our render pass to emulate SSR componentDidCatch\n // in a DataStaticRouter\n if (dataRouterContext && dataRouterContext.static && dataRouterContext.staticContext && (match.route.errorElement || match.route.ErrorBoundary)) {\n dataRouterContext.staticContext._deepestRenderedBoundaryId = match.route.id;\n }\n return /*#__PURE__*/React.createElement(RouteContext.Provider, {\n value: routeContext\n }, children);\n}\nfunction _renderMatches(matches, parentMatches, dataRouterState, future) {\n var _dataRouterState;\n if (parentMatches === void 0) {\n parentMatches = [];\n }\n if (dataRouterState === void 0) {\n dataRouterState = null;\n }\n if (future === void 0) {\n future = null;\n }\n if (matches == null) {\n var _future;\n if (!dataRouterState) {\n return null;\n }\n if (dataRouterState.errors) {\n // Don't bail if we have data router errors so we can render them in the\n // boundary. Use the pre-matched (or shimmed) matches\n matches = dataRouterState.matches;\n } else if ((_future = future) != null && _future.v7_partialHydration && parentMatches.length === 0 && !dataRouterState.initialized && dataRouterState.matches.length > 0) {\n // Don't bail if we're initializing with partial hydration and we have\n // router matches. That means we're actively running `patchRoutesOnMiss`\n // so we should render down the partial matches to the appropriate\n // `HydrateFallback`. We only do this if `parentMatches` is empty so it\n // only impacts the root matches for `RouterProvider` and no descendant\n // `<Routes>`\n matches = dataRouterState.matches;\n } else {\n return null;\n }\n }\n let renderedMatches = matches;\n\n // If we have data errors, trim matches to the highest error boundary\n let errors = (_dataRouterState = dataRouterState) == null ? void 0 : _dataRouterState.errors;\n if (errors != null) {\n let errorIndex = renderedMatches.findIndex(m => m.route.id && (errors == null ? void 0 : errors[m.route.id]) !== undefined);\n !(errorIndex >= 0) ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, \"Could not find a matching route for errors on route IDs: \" + Object.keys(errors).join(\",\")) : UNSAFE_invariant(false) : void 0;\n renderedMatches = renderedMatches.slice(0, Math.min(renderedMatches.length, errorIndex + 1));\n }\n\n // If we're in a partial hydration mode, detect if we need to render down to\n // a given HydrateFallback while we load the rest of the hydration data\n let renderFallback = false;\n let fallbackIndex = -1;\n if (dataRouterState && future && future.v7_partialHydration) {\n for (let i = 0; i < renderedMatches.length; i++) {\n let match = renderedMatches[i];\n // Track the deepest fallback up until the first route without data\n if (match.route.HydrateFallback || match.route.hydrateFallbackElement) {\n fallbackIndex = i;\n }\n if (match.route.id) {\n let {\n loaderData,\n errors\n } = dataRouterState;\n let needsToRunLoader = match.route.loader && loaderData[match.route.id] === undefined && (!errors || errors[match.route.id] === undefined);\n if (match.route.lazy || needsToRunLoader) {\n // We found the first route that's not ready to render (waiting on\n // lazy, or has a loader that hasn't run yet). Flag that we need to\n // render a fallback and render up until the appropriate fallback\n renderFallback = true;\n if (fallbackIndex >= 0) {\n renderedMatches = renderedMatches.slice(0, fallbackIndex + 1);\n } else {\n renderedMatches = [renderedMatches[0]];\n }\n break;\n }\n }\n }\n }\n return renderedMatches.reduceRight((outlet, match, index) => {\n // Only data routers handle errors/fallbacks\n let error;\n let shouldRenderHydrateFallback = false;\n let errorElement = null;\n let hydrateFallbackElement = null;\n if (dataRouterState) {\n error = errors && match.route.id ? errors[match.route.id] : undefined;\n errorElement = match.route.errorElement || defaultErrorElement;\n if (renderFallback) {\n if (fallbackIndex < 0 && index === 0) {\n warningOnce(\"route-fallback\", false, \"No `HydrateFallback` element provided to render during initial hydration\");\n shouldRenderHydrateFallback = true;\n hydrateFallbackElement = null;\n } else if (fallbackIndex === index) {\n shouldRenderHydrateFallback = true;\n hydrateFallbackElement = match.route.hydrateFallbackElement || null;\n }\n }\n }\n let matches = parentMatches.concat(renderedMatches.slice(0, index + 1));\n let getChildren = () => {\n let children;\n if (error) {\n children = errorElement;\n } else if (shouldRenderHydrateFallback) {\n children = hydrateFallbackElement;\n } else if (match.route.Component) {\n // Note: This is a de-optimized path since React won't re-use the\n // ReactElement since it's identity changes with each new\n // React.createElement call. We keep this so folks can use\n // `<Route Component={...}>` in `<Routes>` but generally `Component`\n // usage is only advised in `RouterProvider` when we can convert it to\n // `element` ahead of time.\n children = /*#__PURE__*/React.createElement(match.route.Component, null);\n } else if (match.route.element) {\n children = match.route.element;\n } else {\n children = outlet;\n }\n return /*#__PURE__*/React.createElement(RenderedRoute, {\n match: match,\n routeContext: {\n outlet,\n matches,\n isDataRoute: dataRouterState != null\n },\n children: children\n });\n };\n // Only wrap in an error boundary within data router usages when we have an\n // ErrorBoundary/errorElement on this route. Otherwise let it bubble up to\n // an ancestor ErrorBoundary/errorElement\n return dataRouterState && (match.route.ErrorBoundary || match.route.errorElement || index === 0) ? /*#__PURE__*/React.createElement(RenderErrorBoundary, {\n location: dataRouterState.location,\n revalidation: dataRouterState.revalidation,\n component: errorElement,\n error: error,\n children: getChildren(),\n routeContext: {\n outlet: null,\n matches,\n isDataRoute: true\n }\n }) : getChildren();\n }, null);\n}\nvar DataRouterHook = /*#__PURE__*/function (DataRouterHook) {\n DataRouterHook[\"UseBlocker\"] = \"useBlocker\";\n DataRouterHook[\"UseRevalidator\"] = \"useRevalidator\";\n DataRouterHook[\"UseNavigateStable\"] = \"useNavigate\";\n return DataRouterHook;\n}(DataRouterHook || {});\nvar DataRouterStateHook = /*#__PURE__*/function (DataRouterStateHook) {\n DataRouterStateHook[\"UseBlocker\"] = \"useBlocker\";\n DataRouterStateHook[\"UseLoaderData\"] = \"useLoaderData\";\n DataRouterStateHook[\"UseActionData\"] = \"useActionData\";\n DataRouterStateHook[\"UseRouteError\"] = \"useRouteError\";\n DataRouterStateHook[\"UseNavigation\"] = \"useNavigation\";\n DataRouterStateHook[\"UseRouteLoaderData\"] = \"useRouteLoaderData\";\n DataRouterStateHook[\"UseMatches\"] = \"useMatches\";\n DataRouterStateHook[\"UseRevalidator\"] = \"useRevalidator\";\n DataRouterStateHook[\"UseNavigateStable\"] = \"useNavigate\";\n DataRouterStateHook[\"UseRouteId\"] = \"useRouteId\";\n return DataRouterStateHook;\n}(DataRouterStateHook || {});\nfunction getDataRouterConsoleError(hookName) {\n return hookName + \" must be used within a data router. See https://reactrouter.com/routers/picking-a-router.\";\n}\nfunction useDataRouterContext(hookName) {\n let ctx = React.useContext(DataRouterContext);\n !ctx ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, getDataRouterConsoleError(hookName)) : UNSAFE_invariant(false) : void 0;\n return ctx;\n}\nfunction useDataRouterState(hookName) {\n let state = React.useContext(DataRouterStateContext);\n !state ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, getDataRouterConsoleError(hookName)) : UNSAFE_invariant(false) : void 0;\n return state;\n}\nfunction useRouteContext(hookName) {\n let route = React.useContext(RouteContext);\n !route ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, getDataRouterConsoleError(hookName)) : UNSAFE_invariant(false) : void 0;\n return route;\n}\n\n// Internal version with hookName-aware debugging\nfunction useCurrentRouteId(hookName) {\n let route = useRouteContext(hookName);\n let thisRoute = route.matches[route.matches.length - 1];\n !thisRoute.route.id ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, hookName + \" can only be used on routes that contain a unique \\\"id\\\"\") : UNSAFE_invariant(false) : void 0;\n return thisRoute.route.id;\n}\n\n/**\n * Returns the ID for the nearest contextual route\n */\nfunction useRouteId() {\n return useCurrentRouteId(DataRouterStateHook.UseRouteId);\n}\n\n/**\n * Returns the current navigation, defaulting to an \"idle\" navigation when\n * no navigation is in progress\n */\nfunction useNavigation() {\n let state = useDataRouterState(DataRouterStateHook.UseNavigation);\n return state.navigation;\n}\n\n/**\n * Returns a revalidate function for manually triggering revalidation, as well\n * as the current state of any manual revalidations\n */\nfunction useRevalidator() {\n let dataRouterContext = useDataRouterContext(DataRouterHook.UseRevalidator);\n let state = useDataRouterState(DataRouterStateHook.UseRevalidator);\n return React.useMemo(() => ({\n revalidate: dataRouterContext.router.revalidate,\n state: state.revalidation\n }), [dataRouterContext.router.revalidate, state.revalidation]);\n}\n\n/**\n * Returns the active route matches, useful for accessing loaderData for\n * parent/child routes or the route \"handle\" property\n */\nfunction useMatches() {\n let {\n matches,\n loaderData\n } = useDataRouterState(DataRouterStateHook.UseMatches);\n return React.useMemo(() => matches.map(m => UNSAFE_convertRouteMatchToUiMatch(m, loaderData)), [matches, loaderData]);\n}\n\n/**\n * Returns the loader data for the nearest ancestor Route loader\n */\nfunction useLoaderData() {\n let state = useDataRouterState(DataRouterStateHook.UseLoaderData);\n let routeId = useCurrentRouteId(DataRouterStateHook.UseLoaderData);\n if (state.errors && state.errors[routeId] != null) {\n console.error(\"You cannot `useLoaderData` in an errorElement (routeId: \" + routeId + \")\");\n return undefined;\n }\n return state.loaderData[routeId];\n}\n\n/**\n * Returns the loaderData for the given routeId\n */\nfunction useRouteLoaderData(routeId) {\n let state = useDataRouterState(DataRouterStateHook.UseRouteLoaderData);\n return state.loaderData[routeId];\n}\n\n/**\n * Returns the action data for the nearest ancestor Route action\n */\nfunction useActionData() {\n let state = useDataRouterState(DataRouterStateHook.UseActionData);\n let routeId = useCurrentRouteId(DataRouterStateHook.UseLoaderData);\n return state.actionData ? state.actionData[routeId] : undefined;\n}\n\n/**\n * Returns the nearest ancestor Route error, which could be a loader/action\n * error or a render error. This is intended to be called from your\n * ErrorBoundary/errorElement to display a proper error message.\n */\nfunction useRouteError() {\n var _state$errors;\n let error = React.useContext(RouteErrorContext);\n let state = useDataRouterState(DataRouterStateHook.UseRouteError);\n let routeId = useCurrentRouteId(DataRouterStateHook.UseRouteError);\n\n // If this was a render error, we put it in a RouteError context inside\n // of RenderErrorBoundary\n if (error !== undefined) {\n return error;\n }\n\n // Otherwise look for errors from our data router state\n return (_state$errors = state.errors) == null ? void 0 : _state$errors[routeId];\n}\n\n/**\n * Returns the happy-path data from the nearest ancestor `<Await />` value\n */\nfunction useAsyncValue() {\n let value = React.useContext(AwaitContext);\n return value == null ? void 0 : value._data;\n}\n\n/**\n * Returns the error from the nearest ancestor `<Await />` value\n */\nfunction useAsyncError() {\n let value = React.useContext(AwaitContext);\n return value == null ? void 0 : value._error;\n}\nlet blockerId = 0;\n\n/**\n * Allow the application to block navigations within the SPA and present the\n * user a confirmation dialog to confirm the navigation. Mostly used to avoid\n * using half-filled form data. This does not handle hard-reloads or\n * cross-origin navigations.\n */\nfunction useBlocker(shouldBlock) {\n let {\n router,\n basename\n } = useDataRouterContext(DataRouterHook.UseBlocker);\n let state = useDataRouterState(DataRouterStateHook.UseBlocker);\n let [blockerKey, setBlockerKey] = React.useState(\"\");\n let blockerFunction = React.useCallback(arg => {\n if (typeof shouldBlock !== \"function\") {\n return !!shouldBlock;\n }\n if (basename === \"/\") {\n return shouldBlock(arg);\n }\n\n // If they provided us a function and we've got an active basename, strip\n // it from the locations we expose to the user to match the behavior of\n // useLocation\n let {\n currentLocation,\n nextLocation,\n historyAction\n } = arg;\n return shouldBlock({\n currentLocation: _extends({}, currentLocation, {\n pathname: stripBasename(currentLocation.pathname, basename) || currentLocation.pathname\n }),\n nextLocation: _extends({}, nextLocation, {\n pathname: stripBasename(nextLocation.pathname, basename) || nextLocation.pathname\n }),\n historyAction\n });\n }, [basename, shouldBlock]);\n\n // This effect is in charge of blocker key assignment and deletion (which is\n // tightly coupled to the key)\n React.useEffect(() => {\n let key = String(++blockerId);\n setBlockerKey(key);\n return () => router.deleteBlocker(key);\n }, [router]);\n\n // This effect handles assigning the blockerFunction. This is to handle\n // unstable blocker function identities, and happens only after the prior\n // effect so we don't get an orphaned blockerFunction in the router with a\n // key of \"\". Until then we just have the IDLE_BLOCKER.\n React.useEffect(() => {\n if (blockerKey !== \"\") {\n router.getBlocker(blockerKey, blockerFunction);\n }\n }, [router, blockerKey, blockerFunction]);\n\n // Prefer the blocker from `state` not `router.state` since DataRouterContext\n // is memoized so this ensures we update on blocker state updates\n return blockerKey && state.blockers.has(blockerKey) ? state.blockers.get(blockerKey) : IDLE_BLOCKER;\n}\n\n/**\n * Stable version of useNavigate that is used when we are in the context of\n * a RouterProvider.\n */\nfunction useNavigateStable() {\n let {\n router\n } = useDataRouterContext(DataRouterHook.UseNavigateStable);\n let id = useCurrentRouteId(DataRouterStateHook.UseNavigateStable);\n let activeRef = React.useRef(false);\n useIsomorphicLayoutEffect(() => {\n activeRef.current = true;\n });\n let navigate = React.useCallback(function (to, options) {\n if (options === void 0) {\n options = {};\n }\n process.env.NODE_ENV !== \"production\" ? UNSAFE_warning(activeRef.current, navigateEffectWarning) : void 0;\n\n // Short circuit here since if this happens on first render the navigate\n // is useless because we haven't wired up our router subscriber yet\n if (!activeRef.current) return;\n if (typeof to === \"number\") {\n router.navigate(to);\n } else {\n router.navigate(to, _extends({\n fromRouteId: id\n }, options));\n }\n }, [router, id]);\n return navigate;\n}\nconst alreadyWarned = {};\nfunction warningOnce(key, cond, message) {\n if (!cond && !alreadyWarned[key]) {\n alreadyWarned[key] = true;\n process.env.NODE_ENV !== \"production\" ? UNSAFE_warning(false, message) : void 0;\n }\n}\n\n/**\n Webpack + React 17 fails to compile on any of the following because webpack\n complains that `startTransition` doesn't exist in `React`:\n * import { startTransition } from \"react\"\n * import * as React from from \"react\";\n \"startTransition\" in React ? React.startTransition(() => setState()) : setState()\n * import * as React from from \"react\";\n \"startTransition\" in React ? React[\"startTransition\"](() => setState()) : setState()\n\n Moving it to a constant such as the following solves the Webpack/React 17 issue:\n * import * as React from from \"react\";\n const START_TRANSITION = \"startTransition\";\n START_TRANSITION in React ? React[START_TRANSITION](() => setState()) : setState()\n\n However, that introduces webpack/terser minification issues in production builds\n in React 18 where minification/obfuscation ends up removing the call of\n React.startTransition entirely from the first half of the ternary. Grabbing\n this exported reference once up front resolves that issue.\n\n See https://github.com/remix-run/react-router/issues/10579\n*/\nconst START_TRANSITION = \"startTransition\";\nconst startTransitionImpl = React[START_TRANSITION];\n\n/**\n * Given a Remix Router instance, render the appropriate UI\n */\nfunction RouterProvider(_ref) {\n let {\n fallbackElement,\n router,\n future\n } = _ref;\n let [state, setStateImpl] = React.useState(router.state);\n let {\n v7_startTransition\n } = future || {};\n let setState = React.useCallback(newState => {\n if (v7_startTransition && startTransitionImpl) {\n startTransitionImpl(() => setStateImpl(newState));\n } else {\n setStateImpl(newState);\n }\n }, [setStateImpl, v7_startTransition]);\n\n // Need to use a layout effect here so we are subscribed early enough to\n // pick up on any render-driven redirects/navigations (useEffect/<Navigate>)\n React.useLayoutEffect(() => router.subscribe(setState), [router, setState]);\n React.useEffect(() => {\n process.env.NODE_ENV !== \"production\" ? UNSAFE_warning(fallbackElement == null || !router.future.v7_partialHydration, \"`<RouterProvider fallbackElement>` is deprecated when using \" + \"`v7_partialHydration`, use a `HydrateFallback` component instead\") : void 0;\n // Only log this once on initial mount\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n let navigator = React.useMemo(() => {\n return {\n createHref: router.createHref,\n encodeLocation: router.encodeLocation,\n go: n => router.navigate(n),\n push: (to, state, opts) => router.navigate(to, {\n state,\n preventScrollReset: opts == null ? void 0 : opts.preventScrollReset\n }),\n replace: (to, state, opts) => router.navigate(to, {\n replace: true,\n state,\n preventScrollReset: opts == null ? void 0 : opts.preventScrollReset\n })\n };\n }, [router]);\n let basename = router.basename || \"/\";\n let dataRouterContext = React.useMemo(() => ({\n router,\n navigator,\n static: false,\n basename\n }), [router, navigator, basename]);\n\n // The fragment and {null} here are important! We need them to keep React 18's\n // useId happy when we are server-rendering since we may have a <script> here\n // containing the hydrated server-side staticContext (from StaticRouterProvider).\n // useId relies on the component tree structure to generate deterministic id's\n // so we need to ensure it remains the same on the client even though\n // we don't need the <script> tag\n return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(DataRouterContext.Provider, {\n value: dataRouterContext\n }, /*#__PURE__*/React.createElement(DataRouterStateContext.Provider, {\n value: state\n }, /*#__PURE__*/React.createElement(Router, {\n basename: basename,\n location: state.location,\n navigationType: state.historyAction,\n navigator: navigator,\n future: {\n v7_relativeSplatPath: router.future.v7_relativeSplatPath\n }\n }, state.initialized || router.future.v7_partialHydration ? /*#__PURE__*/React.createElement(DataRoutes, {\n routes: router.routes,\n future: router.future,\n state: state\n }) : fallbackElement))), null);\n}\nfunction DataRoutes(_ref2) {\n let {\n routes,\n future,\n state\n } = _ref2;\n return useRoutesImpl(routes, undefined, state, future);\n}\n/**\n * A `<Router>` that stores all entries in memory.\n *\n * @see https://reactrouter.com/router-components/memory-router\n */\nfunction MemoryRouter(_ref3) {\n let {\n basename,\n children,\n initialEntries,\n initialIndex,\n future\n } = _ref3;\n let historyRef = React.useRef();\n if (historyRef.current == null) {\n historyRef.current = createMemoryHistory({\n initialEntries,\n initialIndex,\n v5Compat: true\n });\n }\n let history = historyRef.current;\n let [state, setStateImpl] = React.useState({\n action: history.action,\n location: history.location\n });\n let {\n v7_startTransition\n } = future || {};\n let setState = React.useCallback(newState => {\n v7_startTransition && startTransitionImpl ? startTransitionImpl(() => setStateImpl(newState)) : setStateImpl(newState);\n }, [setStateImpl, v7_startTransition]);\n React.useLayoutEffect(() => history.listen(setState), [history, setState]);\n return /*#__PURE__*/React.createElement(Router, {\n basename: basename,\n children: children,\n location: state.location,\n navigationType: state.action,\n navigator: history,\n future: future\n });\n}\n/**\n * Changes the current location.\n *\n * Note: This API is mostly useful in React.Component subclasses that are not\n * able to use hooks. In functional components, we recommend you use the\n * `useNavigate` hook instead.\n *\n * @see https://reactrouter.com/components/navigate\n */\nfunction Navigate(_ref4) {\n let {\n to,\n replace,\n state,\n relative\n } = _ref4;\n !useInRouterContext() ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, // TODO: This error is probably because they somehow have 2 versions of\n // the router loaded. We can help them understand how to avoid that.\n \"<Navigate> may be used only in the context of a <Router> component.\") : UNSAFE_invariant(false) : void 0;\n let {\n future,\n static: isStatic\n } = React.useContext(NavigationContext);\n process.env.NODE_ENV !== \"production\" ? UNSAFE_warning(!isStatic, \"<Navigate> must not be used on the initial render in a <StaticRouter>. \" + \"This is a no-op, but you should modify your code so the <Navigate> is \" + \"only ever rendered in response to some user interaction or state change.\") : void 0;\n let {\n matches\n } = React.useContext(RouteContext);\n let {\n pathname: locationPathname\n } = useLocation();\n let navigate = useNavigate();\n\n // Resolve the path outside of the effect so that when effects run twice in\n // StrictMode they navigate to the same place\n let path = resolveTo(to, UNSAFE_getResolveToMatches(matches, future.v7_relativeSplatPath), locationPathname, relative === \"path\");\n let jsonPath = JSON.stringify(path);\n React.useEffect(() => navigate(JSON.parse(jsonPath), {\n replace,\n state,\n relative\n }), [navigate, jsonPath, relative, replace, state]);\n return null;\n}\n/**\n * Renders the child route's element, if there is one.\n *\n * @see https://reactrouter.com/components/outlet\n */\nfunction Outlet(props) {\n return useOutlet(props.context);\n}\n/**\n * Declares an element that should be rendered at a certain URL path.\n *\n * @see https://reactrouter.com/components/route\n */\nfunction Route(_props) {\n process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, \"A <Route> is only ever to be used as the child of <Routes> element, \" + \"never rendered directly. Please wrap your <Route> in a <Routes>.\") : UNSAFE_invariant(false) ;\n}\n/**\n * Provides location context for the rest of the app.\n *\n * Note: You usually won't render a `<Router>` directly. Instead, you'll render a\n * router that is more specific to your environment such as a `<BrowserRouter>`\n * in web browsers or a `<StaticRouter>` for server rendering.\n *\n * @see https://reactrouter.com/router-components/router\n */\nfunction Router(_ref5) {\n let {\n basename: basenameProp = \"/\",\n children = null,\n location: locationProp,\n navigationType = Action.Pop,\n navigator,\n static: staticProp = false,\n future\n } = _ref5;\n !!useInRouterContext() ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, \"You cannot render a <Router> inside another <Router>.\" + \" You should never have more than one in your app.\") : UNSAFE_invariant(false) : void 0;\n\n // Preserve trailing slashes on basename, so we can let the user control\n // the enforcement of trailing slashes throughout the app\n let basename = basenameProp.replace(/^\\/*/, \"/\");\n let navigationContext = React.useMemo(() => ({\n basename,\n navigator,\n static: staticProp,\n future: _extends({\n v7_relativeSplatPath: false\n }, future)\n }), [basename, future, navigator, staticProp]);\n if (typeof locationProp === \"string\") {\n locationProp = parsePath(locationProp);\n }\n let {\n pathname = \"/\",\n search = \"\",\n hash = \"\",\n state = null,\n key = \"default\"\n } = locationProp;\n let locationContext = React.useMemo(() => {\n let trailingPathname = stripBasename(pathname, basename);\n if (trailingPathname == null) {\n return null;\n }\n return {\n location: {\n pathname: trailingPathname,\n search,\n hash,\n state,\n key\n },\n navigationType\n };\n }, [basename, pathname, search, hash, state, key, navigationType]);\n process.env.NODE_ENV !== \"production\" ? UNSAFE_warning(locationContext != null, \"<Router basename=\\\"\" + basename + \"\\\"> is not able to match the URL \" + (\"\\\"\" + pathname + search + hash + \"\\\" because it does not start with the \") + \"basename, so the <Router> won't render anything.\") : void 0;\n if (locationContext == null) {\n return null;\n }\n return /*#__PURE__*/React.createElement(NavigationContext.Provider, {\n value: navigationContext\n }, /*#__PURE__*/React.createElement(LocationContext.Provider, {\n children: children,\n value: locationContext\n }));\n}\n/**\n * A container for a nested tree of `<Route>` elements that renders the branch\n * that best matches the current location.\n *\n * @see https://reactrouter.com/components/routes\n */\nfunction Routes(_ref6) {\n let {\n children,\n location\n } = _ref6;\n return useRoutes(createRoutesFromChildren(children), location);\n}\n/**\n * Component to use for rendering lazily loaded data from returning defer()\n * in a loader function\n */\nfunction Await(_ref7) {\n let {\n children,\n errorElement,\n resolve\n } = _ref7;\n return /*#__PURE__*/React.createElement(AwaitErrorBoundary, {\n resolve: resolve,\n errorElement: errorElement\n }, /*#__PURE__*/React.createElement(ResolveAwait, null, children));\n}\nvar AwaitRenderStatus = /*#__PURE__*/function (AwaitRenderStatus) {\n AwaitRenderStatus[AwaitRenderStatus[\"pending\"] = 0] = \"pending\";\n AwaitRenderStatus[AwaitRenderStatus[\"success\"] = 1] = \"success\";\n AwaitRenderStatus[AwaitRenderStatus[\"error\"] = 2] = \"error\";\n return AwaitRenderStatus;\n}(AwaitRenderStatus || {});\nconst neverSettledPromise = new Promise(() => {});\nclass AwaitErrorBoundary extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n error: null\n };\n }\n static getDerivedStateFromError(error) {\n return {\n error\n };\n }\n componentDidCatch(error, errorInfo) {\n console.error(\"<Await> caught the following error during render\", error, errorInfo);\n }\n render() {\n let {\n children,\n errorElement,\n resolve\n } = this.props;\n let promise = null;\n let status = AwaitRenderStatus.pending;\n if (!(resolve instanceof Promise)) {\n // Didn't get a promise - provide as a resolved promise\n status = AwaitRenderStatus.success;\n promise = Promise.resolve();\n Object.defineProperty(promise, \"_tracked\", {\n get: () => true\n });\n Object.defineProperty(promise, \"_data\", {\n get: () => resolve\n });\n } else if (this.state.error) {\n // Caught a render error, provide it as a rejected promise\n status = AwaitRenderStatus.error;\n let renderError = this.state.error;\n promise = Promise.reject().catch(() => {}); // Avoid unhandled rejection warnings\n Object.defineProperty(promise, \"_tracked\", {\n get: () => true\n });\n Object.defineProperty(promise, \"_error\", {\n get: () => renderError\n });\n } else if (resolve._tracked) {\n // Already tracked promise - check contents\n promise = resolve;\n status = \"_error\" in promise ? AwaitRenderStatus.error : \"_data\" in promise ? AwaitRenderStatus.success : AwaitRenderStatus.pending;\n } else {\n // Raw (untracked) promise - track it\n status = AwaitRenderStatus.pending;\n Object.defineProperty(resolve, \"_tracked\", {\n get: () => true\n });\n promise = resolve.then(data => Object.defineProperty(resolve, \"_data\", {\n get: () => data\n }), error => Object.defineProperty(resolve, \"_error\", {\n get: () => error\n }));\n }\n if (status === AwaitRenderStatus.error && promise._error instanceof AbortedDeferredError) {\n // Freeze the UI by throwing a never resolved promise\n throw neverSettledPromise;\n }\n if (status === AwaitRenderStatus.error && !errorElement) {\n // No errorElement, throw to the nearest route-level error boundary\n throw promise._error;\n }\n if (status === AwaitRenderStatus.error) {\n // Render via our errorElement\n return /*#__PURE__*/React.createElement(AwaitContext.Provider, {\n value: promise,\n children: errorElement\n });\n }\n if (status === AwaitRenderStatus.success) {\n // Render children with resolved value\n return /*#__PURE__*/React.createElement(AwaitContext.Provider, {\n value: promise,\n children: children\n });\n }\n\n // Throw to the suspense boundary\n throw promise;\n }\n}\n\n/**\n * @private\n * Indirection to leverage useAsyncValue for a render-prop API on `<Await>`\n */\nfunction ResolveAwait(_ref8) {\n let {\n children\n } = _ref8;\n let data = useAsyncValue();\n let toRender = typeof children === \"function\" ? children(data) : children;\n return /*#__PURE__*/React.createElement(React.Fragment, null, toRender);\n}\n\n///////////////////////////////////////////////////////////////////////////////\n// UTILS\n///////////////////////////////////////////////////////////////////////////////\n\n/**\n * Creates a route config from a React \"children\" object, which is usually\n * either a `<Route>` element or an array of them. Used internally by\n * `<Routes>` to create a route config from its children.\n *\n * @see https://reactrouter.com/utils/create-routes-from-children\n */\nfunction createRoutesFromChildren(children, parentPath) {\n if (parentPath === void 0) {\n parentPath = [];\n }\n let routes = [];\n React.Children.forEach(children, (element, index) => {\n if (! /*#__PURE__*/React.isValidElement(element)) {\n // Ignore non-elements. This allows people to more easily inline\n // conditionals in their route config.\n return;\n }\n let treePath = [...parentPath, index];\n if (element.type === React.Fragment) {\n // Transparently support React.Fragment and its children.\n routes.push.apply(routes, createRoutesFromChildren(element.props.children, treePath));\n return;\n }\n !(element.type === Route) ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, \"[\" + (typeof element.type === \"string\" ? element.type : element.type.name) + \"] is not a <Route> component. All component children of <Routes> must be a <Route> or <React.Fragment>\") : UNSAFE_invariant(false) : void 0;\n !(!element.props.index || !element.props.children) ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, \"An index route cannot have child routes.\") : UNSAFE_invariant(false) : void 0;\n let route = {\n id: element.props.id || treePath.join(\"-\"),\n caseSensitive: element.props.caseSensitive,\n element: element.props.element,\n Component: element.props.Component,\n index: element.props.index,\n path: element.props.path,\n loader: element.props.loader,\n action: element.props.action,\n errorElement: element.props.errorElement,\n ErrorBoundary: element.props.ErrorBoundary,\n hasErrorBoundary: element.props.ErrorBoundary != null || element.props.errorElement != null,\n shouldRevalidate: element.props.shouldRevalidate,\n handle: element.props.handle,\n lazy: element.props.lazy\n };\n if (element.props.children) {\n route.children = createRoutesFromChildren(element.props.children, treePath);\n }\n routes.push(route);\n });\n return routes;\n}\n\n/**\n * Renders the result of `matchRoutes()` into a React element.\n */\nfunction renderMatches(matches) {\n return _renderMatches(matches);\n}\n\nfunction mapRouteProperties(route) {\n let updates = {\n // Note: this check also occurs in createRoutesFromChildren so update\n // there if you change this -- please and thank you!\n hasErrorBoundary: route.ErrorBoundary != null || route.errorElement != null\n };\n if (route.Component) {\n if (process.env.NODE_ENV !== \"production\") {\n if (route.element) {\n process.env.NODE_ENV !== \"production\" ? UNSAFE_warning(false, \"You should not include both `Component` and `element` on your route - \" + \"`Component` will be used.\") : void 0;\n }\n }\n Object.assign(updates, {\n element: /*#__PURE__*/React.createElement(route.Component),\n Component: undefined\n });\n }\n if (route.HydrateFallback) {\n if (process.env.NODE_ENV !== \"production\") {\n if (route.hydrateFallbackElement) {\n process.env.NODE_ENV !== \"production\" ? UNSAFE_warning(false, \"You should not include both `HydrateFallback` and `hydrateFallbackElement` on your route - \" + \"`HydrateFallback` will be used.\") : void 0;\n }\n }\n Object.assign(updates, {\n hydrateFallbackElement: /*#__PURE__*/React.createElement(route.HydrateFallback),\n HydrateFallback: undefined\n });\n }\n if (route.ErrorBoundary) {\n if (process.env.NODE_ENV !== \"production\") {\n if (route.errorElement) {\n process.env.NODE_ENV !== \"production\" ? UNSAFE_warning(false, \"You should not include both `ErrorBoundary` and `errorElement` on your route - \" + \"`ErrorBoundary` will be used.\") : void 0;\n }\n }\n Object.assign(updates, {\n errorElement: /*#__PURE__*/React.createElement(route.ErrorBoundary),\n ErrorBoundary: undefined\n });\n }\n return updates;\n}\nfunction createMemoryRouter(routes, opts) {\n return createRouter({\n basename: opts == null ? void 0 : opts.basename,\n future: _extends({}, opts == null ? void 0 : opts.future, {\n v7_prependBasename: true\n }),\n history: createMemoryHistory({\n initialEntries: opts == null ? void 0 : opts.initialEntries,\n initialIndex: opts == null ? void 0 : opts.initialIndex\n }),\n hydrationData: opts == null ? void 0 : opts.hydrationData,\n routes,\n mapRouteProperties,\n unstable_dataStrategy: opts == null ? void 0 : opts.unstable_dataStrategy,\n unstable_patchRoutesOnMiss: opts == null ? void 0 : opts.unstable_patchRoutesOnMiss\n }).initialize();\n}\n\nexport { Await, MemoryRouter, Navigate, Outlet, Route, Router, RouterProvider, Routes, DataRouterContext as UNSAFE_DataRouterContext, DataRouterStateContext as UNSAFE_DataRouterStateContext, LocationContext as UNSAFE_LocationContext, NavigationContext as UNSAFE_NavigationContext, RouteContext as UNSAFE_RouteContext, mapRouteProperties as UNSAFE_mapRouteProperties, useRouteId as UNSAFE_useRouteId, useRoutesImpl as UNSAFE_useRoutesImpl, createMemoryRouter, createRoutesFromChildren, createRoutesFromChildren as createRoutesFromElements, renderMatches, useActionData, useAsyncError, useAsyncValue, useBlocker, useHref, useInRouterContext, useLoaderData, useLocation, useMatch, useMatches, useNavigate, useNavigation, useNavigationType, useOutlet, useOutletContext, useParams, useResolvedPath, useRevalidator, useRouteError, useRouteLoaderData, useRoutes };\n//# sourceMappingURL=index.js.map\n","import { generateUtilityClass, generateUtilityClasses } from '@mui/base';\nexport function getAppBarUtilityClass(slot) {\n return generateUtilityClass('MuiAppBar', slot);\n}\nconst appBarClasses = generateUtilityClasses('MuiAppBar', ['root', 'positionFixed', 'positionAbsolute', 'positionSticky', 'positionStatic', 'positionRelative', 'colorDefault', 'colorPrimary', 'colorSecondary', 'colorInherit', 'colorTransparent']);\nexport default appBarClasses;","import _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nconst _excluded = [\"className\", \"color\", \"enableColorOnDark\", \"position\"];\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport { unstable_composeClasses as composeClasses } from '@mui/base';\nimport styled from '../styles/styled';\nimport useThemeProps from '../styles/useThemeProps';\nimport capitalize from '../utils/capitalize';\nimport Paper from '../Paper';\nimport { getAppBarUtilityClass } from './appBarClasses';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\n\nconst useUtilityClasses = ownerState => {\n const {\n color,\n position,\n classes\n } = ownerState;\n const slots = {\n root: ['root', `color${capitalize(color)}`, `position${capitalize(position)}`]\n };\n return composeClasses(slots, getAppBarUtilityClass, classes);\n}; // var2 is the fallback.\n// Ex. var1: 'var(--a)', var2: 'var(--b)'; return: 'var(--a, var(--b))'\n\n\nconst joinVars = (var1, var2) => `${var1 == null ? void 0 : var1.replace(')', '')}, ${var2})`;\n\nconst AppBarRoot = styled(Paper, {\n name: 'MuiAppBar',\n slot: 'Root',\n overridesResolver: (props, styles) => {\n const {\n ownerState\n } = props;\n return [styles.root, styles[`position${capitalize(ownerState.position)}`], styles[`color${capitalize(ownerState.color)}`]];\n }\n})(({\n theme,\n ownerState\n}) => {\n const backgroundColorDefault = theme.palette.mode === 'light' ? theme.palette.grey[100] : theme.palette.grey[900];\n return _extends({\n display: 'flex',\n flexDirection: 'column',\n width: '100%',\n boxSizing: 'border-box',\n // Prevent padding issue with the Modal and fixed positioned AppBar.\n flexShrink: 0\n }, ownerState.position === 'fixed' && {\n position: 'fixed',\n zIndex: (theme.vars || theme).zIndex.appBar,\n top: 0,\n left: 'auto',\n right: 0,\n '@media print': {\n // Prevent the app bar to be visible on each printed page.\n position: 'absolute'\n }\n }, ownerState.position === 'absolute' && {\n position: 'absolute',\n zIndex: (theme.vars || theme).zIndex.appBar,\n top: 0,\n left: 'auto',\n right: 0\n }, ownerState.position === 'sticky' && {\n // ⚠️ sticky is not supported by IE11.\n position: 'sticky',\n zIndex: (theme.vars || theme).zIndex.appBar,\n top: 0,\n left: 'auto',\n right: 0\n }, ownerState.position === 'static' && {\n position: 'static'\n }, ownerState.position === 'relative' && {\n position: 'relative'\n }, !theme.vars && _extends({}, ownerState.color === 'default' && {\n backgroundColor: backgroundColorDefault,\n color: theme.palette.getContrastText(backgroundColorDefault)\n }, ownerState.color && ownerState.color !== 'default' && ownerState.color !== 'inherit' && ownerState.color !== 'transparent' && {\n backgroundColor: theme.palette[ownerState.color].main,\n color: theme.palette[ownerState.color].contrastText\n }, ownerState.color === 'inherit' && {\n color: 'inherit'\n }, theme.palette.mode === 'dark' && !ownerState.enableColorOnDark && {\n backgroundColor: null,\n color: null\n }, ownerState.color === 'transparent' && _extends({\n backgroundColor: 'transparent',\n color: 'inherit'\n }, theme.palette.mode === 'dark' && {\n backgroundImage: 'none'\n })), theme.vars && _extends({}, ownerState.color === 'default' && {\n '--AppBar-background': ownerState.enableColorOnDark ? theme.vars.palette.AppBar.defaultBg : joinVars(theme.vars.palette.AppBar.darkBg, theme.vars.palette.AppBar.defaultBg),\n '--AppBar-color': ownerState.enableColorOnDark ? theme.vars.palette.text.primary : joinVars(theme.vars.palette.AppBar.darkColor, theme.vars.palette.text.primary)\n }, ownerState.color && !ownerState.color.match(/^(default|inherit|transparent)$/) && {\n '--AppBar-background': ownerState.enableColorOnDark ? theme.vars.palette[ownerState.color].main : joinVars(theme.vars.palette.AppBar.darkBg, theme.vars.palette[ownerState.color].main),\n '--AppBar-color': ownerState.enableColorOnDark ? theme.vars.palette[ownerState.color].contrastText : joinVars(theme.vars.palette.AppBar.darkColor, theme.vars.palette[ownerState.color].contrastText)\n }, {\n backgroundColor: 'var(--AppBar-background)',\n color: ownerState.color === 'inherit' ? 'inherit' : 'var(--AppBar-color)'\n }, ownerState.color === 'transparent' && {\n backgroundImage: 'none',\n backgroundColor: 'transparent',\n color: 'inherit'\n }));\n});\nconst AppBar = /*#__PURE__*/React.forwardRef(function AppBar(inProps, ref) {\n const props = useThemeProps({\n props: inProps,\n name: 'MuiAppBar'\n });\n\n const {\n className,\n color = 'primary',\n enableColorOnDark = false,\n position = 'fixed'\n } = props,\n other = _objectWithoutPropertiesLoose(props, _excluded);\n\n const ownerState = _extends({}, props, {\n color,\n position,\n enableColorOnDark\n });\n\n const classes = useUtilityClasses(ownerState);\n return /*#__PURE__*/_jsx(AppBarRoot, _extends({\n square: true,\n component: \"header\",\n ownerState: ownerState,\n elevation: 4,\n className: clsx(classes.root, className, position === 'fixed' && 'mui-fixed'),\n ref: ref\n }, other));\n});\nprocess.env.NODE_ENV !== \"production\" ? AppBar.propTypes\n/* remove-proptypes */\n= {\n // ----------------------------- Warning --------------------------------\n // | These PropTypes are generated from the TypeScript type definitions |\n // | To update them edit the d.ts file and run \"yarn proptypes\" |\n // ----------------------------------------------------------------------\n\n /**\n * The content of the component.\n */\n children: PropTypes.node,\n\n /**\n * Override or extend the styles applied to the component.\n */\n classes: PropTypes.object,\n\n /**\n * @ignore\n */\n className: PropTypes.string,\n\n /**\n * The color of the component.\n * It supports both default and custom theme colors, which can be added as shown in the\n * [palette customization guide](https://mui.com/material-ui/customization/palette/#adding-new-colors).\n * @default 'primary'\n */\n color: PropTypes\n /* @typescript-to-proptypes-ignore */\n .oneOfType([PropTypes.oneOf(['default', 'inherit', 'primary', 'secondary', 'transparent']), PropTypes.string]),\n\n /**\n * If true, the `color` prop is applied in dark mode.\n * @default false\n */\n enableColorOnDark: PropTypes.bool,\n\n /**\n * The positioning type. The behavior of the different options is described\n * [in the MDN web docs](https://developer.mozilla.org/en-US/docs/Learn/CSS/CSS_layout/Positioning).\n * Note: `sticky` is not universally supported and will fall back to `static` when unavailable.\n * @default 'fixed'\n */\n position: PropTypes.oneOf(['absolute', 'fixed', 'relative', 'static', 'sticky']),\n\n /**\n * The system prop that allows defining system overrides as well as additional CSS styles.\n */\n sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])\n} : void 0;\nexport default AppBar;","import React from \"react\";\nimport { ViewEnvironment } from \"@cede/types\";\nimport { useDependencies } from \"../../hooks\";\nimport { AppBar, Box, useTheme } from \"@mui/material\";\n\ninterface Props {\n leftSide?: React.ReactElement | null;\n center?: React.ReactElement | null;\n rightSide?: React.ReactElement | null;\n isDisplayed: boolean;\n}\n\nexport const NavBar = ({ leftSide = null, center = null, rightSide = null, isDisplayed }: Props) => {\n const { useViewEnvironment } = useDependencies();\n const theme = useTheme();\n const { environment: viewEnvironment } = useViewEnvironment();\n\n return (\n <>\n {isDisplayed && (\n <AppBar\n sx={{\n backgroundColor: \"transparent\",\n backgroundImage: \"none\",\n position: \"sticky\",\n top: \"0\",\n left: \"0\",\n width: \"100%\",\n boxShadow: \"none\",\n paddingX: theme.custom.gutterMargin,\n }}\n >\n <Box\n height={\n viewEnvironment === ViewEnvironment.WIDGET\n ? theme.custom.navBarSize.widgetHeight\n : theme.custom.navBarSize.height\n }\n sx={{\n display: \"grid\",\n gridTemplateColumns: \"1fr auto 1fr\",\n }}\n >\n <Box display=\"flex\" alignItems=\"center\">\n {leftSide}\n </Box>\n <Box display=\"flex\" justifyContent=\"center\" alignItems=\"center\">\n {center}\n </Box>\n <Box\n display=\"flex\"\n justifyContent=\"flex-end\"\n alignItems=\"center\"\n // On widget we have the help icon on every screens\n pr={viewEnvironment === ViewEnvironment.WIDGET ? \"24px\" : \"0\"}\n >\n {rightSide}\n </Box>\n </Box>\n </AppBar>\n )}\n </>\n );\n};\n","import { useNavBar } from \"@cede/ds\";\nimport { NavBar as AppBar } from \"./NavBar\";\n\nexport const NavBar = () => {\n const { leftSide, center, rightSide, isDisplayed } = useNavBar();\n return <AppBar leftSide={leftSide} center={center} rightSide={rightSide} isDisplayed={isDisplayed} />;\n};\n","import { DiscordIcon } from \"@cede/ds\";\nimport { useDependencies } from \"../../hooks\";\nimport HelpOutlineIcon from \"@mui/icons-material/HelpOutline\";\nimport { Box, Link, SvgIcon, Tooltip, Typography, tooltipClasses, useTheme } from \"@mui/material\";\n\nexport const HelpLink = () => {\n const theme = useTheme();\n const { useDiscordInvitation } = useDependencies();\n const { joinDiscord } = useDiscordInvitation();\n\n // @TODO: put the link inside the feature flag management system so it's hot swappable\n return (\n <Link\n onClick={joinDiscord}\n sx={{\n cursor: \"pointer\",\n }}\n display=\"flex\"\n alignItems=\"center\"\n justifyContent=\"center\"\n >\n <Tooltip\n title={\n <Typography\n display=\"flex\"\n alignItems=\"center\"\n justifyContent=\"space-between\"\n fontSize=\"14px\"\n sx={{\n \"minWidth\": \"164px\",\n \"transition\": \".2s ease-out\",\n \":hover\": {\n opacity: 0.6,\n },\n \"color\": theme.palette.text.secondary,\n }}\n >\n Get help on Discord\n <Box ml={theme.custom.smallGutterMargin} display=\"flex\" alignItems=\"center\">\n <SvgIcon fill={theme.palette.text.secondary}>\n <DiscordIcon innerLogoColor={theme.palette.background.default} />\n </SvgIcon>\n </Box>\n </Typography>\n }\n sx={{\n fontSize: \"20px\",\n color: theme.palette.text.primary,\n }}\n placement=\"bottom-end\"\n arrow\n PopperProps={{\n disablePortal: true,\n sx: {\n [`& .${tooltipClasses.tooltip}`]: {\n marginTop: \"6px!important\",\n padding: \"8px\",\n backgroundColor: theme.palette.background.help,\n },\n\n [`& .${tooltipClasses.arrow}`]: {\n color: theme.palette.background.help,\n },\n },\n }}\n >\n <HelpOutlineIcon color=\"inherit\" fontSize=\"inherit\" />\n </Tooltip>\n </Link>\n );\n};\n","import { TransitionGroup } from \"react-transition-group\";\nimport { InformationCard } from \"@cede/ds\";\nimport { useDependencies } from \"../../hooks/useDependencies\";\nimport { Box, Grow, useTheme } from \"@mui/material\";\n\nexport const AlertQueue = () => {\n const { useVaults, useAlert } = useDependencies();\n const theme = useTheme();\n const { activeVault } = useVaults();\n const alertQueue = useAlert((state) => state.alertQueue);\n const removeAlert = useAlert((state) => state.remove);\n\n return (\n <Box\n position={\"absolute\"}\n display={\"flex\"}\n flexDirection={\"column\"}\n alignItems={\"center\"}\n gap={theme.custom.gutterMargin}\n left={\"50%\"}\n zIndex={theme.custom.zIndex.extraLayer + 100}\n width={\"70%\"}\n paddingTop={theme.custom.gutterMargin}\n sx={{\n transform: \"TranslateX(-50%)\",\n }}\n >\n <TransitionGroup>\n {alertQueue\n .filter((alert) => (alert.vault?.id ? alert.vault.id === activeVault?.id : true))\n .map((alert) => (\n <Grow key={alert.id} in={true}>\n <Box bgcolor={theme.palette.background.default} marginBottom={theme.custom.smallGutterMargin}>\n <InformationCard\n color={alert.type}\n content={alert.message}\n onClose={() => removeAlert(alert.id)}\n onClick={alert.onClick}\n />\n </Box>\n </Grow>\n ))}\n </TransitionGroup>\n </Box>\n );\n};\n","/*\n * Copyright (C) CEDE Labs, SAS - All Rights Reserved\n * Unauthorized copying of this file, via any medium is strictly prohibited\n * Proprietary and confidential\n * Written by CEDE Labs team <team@cedelabs.io>, September 2021\n */\nimport { ReactElement } from \"react\";\nimport { Logger } from \"@cede/utils\";\nimport { create, StoreApi, UseBoundStore } from \"zustand\";\n\nexport type LoadingState = {\n nbBigRequests: number;\n nbSmallRequests: number;\n isBlockingLoading: boolean;\n isLoading: boolean;\n description: string | null | ReactElement;\n setDescription: (description: string | null | ReactElement) => void;\n addBigPendingRequest: () => void;\n removeBigPendingRequest: () => void;\n addSmallPendingRequests: (reqsToAdd?: number) => void;\n removeSmallPendingRequests: (reqsToRemove?: number) => void;\n};\n\nexport type UseLoadingHook = UseBoundStore<StoreApi<LoadingState>>;\n\nexport const useLoading: UseLoadingHook = create<LoadingState>((set, get) => ({\n nbBigRequests: 0,\n nbSmallRequests: 0,\n isBlockingLoading: false,\n isLoading: false,\n description: null,\n setDescription: (description: string | null | ReactElement) => {\n set(() => ({\n description,\n }));\n },\n addBigPendingRequest: () => {\n set((state) => ({\n nbBigRequests: state.nbBigRequests + 1,\n isBlockingLoading: true,\n }));\n },\n removeBigPendingRequest: () => {\n const nbBigRequests = get().nbBigRequests;\n if (nbBigRequests - 1 < 0) {\n Logger.error(\"We try to remove big a pending request but the counter is already at 0\");\n return;\n }\n set((state) => ({\n nbBigRequests: state.nbBigRequests - 1,\n isBlockingLoading: state.nbBigRequests > 1,\n }));\n },\n addSmallPendingRequests: (reqsToAdd = 1) => {\n set((state) => ({\n isLoading: true,\n nbSmallRequests: state.nbSmallRequests + reqsToAdd,\n }));\n },\n removeSmallPendingRequests: (reqsToRemove = 1) => {\n const nbSmallRequests = get().nbSmallRequests;\n if (nbSmallRequests - reqsToRemove < 0) {\n Logger.error(\"We try to remove small pending requests but the counter is already at 0\");\n return;\n }\n set((state) => ({\n isLoading: state.nbSmallRequests > reqsToRemove,\n nbSmallRequests: state.nbSmallRequests - reqsToRemove,\n }));\n },\n}));\n","import { Logo } from \"@cede/ds\";\nimport { ViewEnvironment } from \"@cede/types\";\nimport { useDependencies } from \"../../hooks\";\nimport { useLoading } from \"../../store\";\nimport { Box, Fade, Typography, useTheme } from \"@mui/material\";\n\nexport const Loading = () => {\n const { useViewEnvironment } = useDependencies();\n const theme = useTheme();\n\n const isBlockingLoading = useLoading((state) => state.isBlockingLoading);\n const description = useLoading((state) => state.description);\n const { environment: viewEnvironment } = useViewEnvironment();\n\n return (\n <Fade appear={false} in={isBlockingLoading} timeout={{ appear: 0, enter: 0, exit: 500 }}>\n <Box\n sx={{\n position: \"absolute\",\n top: 0,\n left: 0,\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n flexDirection: \"column\",\n height: \"100%\",\n width: \"100%\",\n background: theme.palette.background.default,\n zIndex: theme.custom.zIndex.extraLayer + 1,\n borderRadius: viewEnvironment === ViewEnvironment.TAB ? theme.custom.mediumBoxRadius : 0,\n }}\n >\n <Logo isLoading />\n {description && (\n <Typography\n component=\"h2\"\n variant=\"body2\"\n sx={{ marginTop: theme.custom.gutterMargin }}\n textAlign=\"center\"\n px=\"22px\"\n >\n {description}\n </Typography>\n )}\n </Box>\n </Fade>\n );\n};\n","import { WidgetType } from \"@cede/types\";\nimport packageJson from \"../../../package.json\";\nimport { AlertQueue, HelpLink, Loading, NavBar, useDependencies } from \"@cedelabs/react-utils\";\nimport { Box, useTheme } from \"@mui/material\";\n\nexport const Container = ({ children }: { children: React.ReactNode }) => {\n const theme = useTheme();\n const { widgetProps, widgetType } = useDependencies();\n const { theme: themeProp } = widgetProps;\n\n return (\n <Box\n sx={{\n maxWidth: theme.custom.storeSize.widgetMaxWidth,\n minWidth: theme.custom.storeSize.widgetMinWidth,\n height:\n widgetType === WidgetType.SEND\n ? theme.custom.storeSize.widgetHeight\n : theme.custom.storeSize.tradeWidgetHeight,\n width: themeProp?.width ?? theme.custom.storeSize.widgetWidth,\n backgroundColor: \"background.default\",\n borderRadius: 3,\n border: \"1px solid\",\n borderColor: widgetProps?.theme?.borderColor ?? \"transparent\",\n padding: \"12px\",\n position: \"relative\",\n display: \"flex\",\n flexDirection: \"column\",\n overflow: \"hidden\",\n fontSize: \"100%\",\n }}\n data-version={packageJson.version}\n >\n <Box position=\"relative\" mt=\"6px\">\n <Box zIndex={theme.custom.zIndex.topLayer} position=\"relative\">\n <NavBar />\n </Box>\n\n <Box sx={{ position: \"absolute\", zIndex: \"1299\", right: \"4px\", top: \"50%\", transform: \"translateY(-50%)\" }}>\n <HelpLink />\n </Box>\n </Box>\n\n <AlertQueue />\n <Loading />\n {children}\n </Box>\n );\n};\n","export type RouteValue = (typeof STORE_ROUTES)[keyof typeof STORE_ROUTES];\n\nexport const STORE_ROUTES = {\n DEFAULT_ROUTE: \"/\",\n LOGIN_ROUTE: \"/login\",\n ON_BOARDING_ROUTE: \"/on-boarding\",\n ONBOARDING_SHOWCASE_TRACK_ASSETS_ROUTE: \"/onboarding-track\",\n ONBOARDING_SHOWCASE_TRADE_ROUTE: \"/onboarding-trade\",\n ONBOARDING_SHOWCASE_TRANSFER_ROUTE: \"/onboarding-transfer\",\n ON_BOARDING_REFERRAL_CODE_ROUTE: \"/on-boarding-referralCode\",\n ON_BOARDING_SUCCESS_ROUTE: \"/on-boarding-success\",\n RECREATE_VAULT_ROUTE: \"/recreate-vault\",\n NAME_YOUR_VAULT_ROUTE: \"/name-your-vault\",\n CREATE_PASSWORD_ROUTE: \"/create-password\",\n TERMS_OF_SERVICE_ROUTE: \"/terms-of-service\",\n ACCEPT_METRICS_ROUTE: \"/accept-metrics\",\n ADD_CEX_ROUTE: \"/add-cex\",\n SET_PERMISSIONS_ROUTE: \"/set-permissions\",\n ADD_CEX_KEY_ROUTE: \"/add-cex-key\",\n CHOOSE_STORAGE_ROUTE: \"/choose-storage\",\n CHOOSE_KEY_ROUTE: \"/choose-key\",\n API_KEYS_TUTO: \"/api-keys-tuto\",\n SET_CEX_KEY_ROUTE: \"/set-cex-key\",\n OAUTH_ROUTE: \"/oauth\",\n CONNECTED_CEXS_ROUTE: \"/connected-cexs\",\n EDIT_ASSETS_ROUTE: \"/edit-assets\",\n VAULT_DETAILS_ROUTE: \"/vault-details\",\n CONNECTED_DAPPS_ROUTE: \"/connected-dapps\",\n DELETE_DAPP_ROUTE: \"/delete-dapp\",\n RECEIVE_ROUTE: \"/receive\",\n CONFIRM_RECEIVE_ROUTE: \"/receive/confirm\",\n SEND_ROUTE: \"/send\",\n CONFIRM_SEND_ROUTE: \"/send-confirmation\",\n TRADE_ROUTE: \"/trade\",\n CONFIRM_TRADE_ROUTE: \"/trade-confirmation\",\n COMPLETED_TRANSACTION_ROUTE: \"/completed-transaction\",\n COMPLETED_TRANSACTION_DETAILS_ROUTE: \"/completed-transaction-details\",\n SETTINGS_ROUTE: \"/settings\",\n SUPPORT_ROUTE: \"/support\",\n FEEDBACK_ROUTE: \"/feedback\",\n ASSET_ROUTE: \"/asset\",\n SECURITY_ROUTE: \"/security\",\n PRIVACY_POLICY_ROUTE: \"/privacy-policy\",\n VAULT_SETTINGS_ROUTE: \"/vault-settings\",\n DELETE_VAULT_ROUTE: \"/delete-vault\",\n DELETE_ACCOUNT_ROUTE: \"/delete-account\",\n CHANGE_PASSWORD_ROUTE: \"/change-password\",\n SECURITY_VERIFICATION_ROUTE: \"/security-verification\",\n ADDRESS_BOOK_ROUTE: \"/address-book\",\n ADD_ADDRESS_ROUTE: \"/add-address\",\n DELETE_ADDRESS_ROUTE: \"/delete-address\",\n SEND_OAUTH_TUTORIAL_ROUTE: \"/send-oauth-tutorial\",\n AFFILIATION_ROUTE: \"/affiliation\",\n API_KEY_TO_OAUTH: \"/api-key-to-oauth\",\n SECURITY_POINT_ROUTE: \"/security-point\",\n EDIT_OAUTH_ROUTE: \"/edit-oauth\",\n EDIT_API_KEYS_PERMISSIONS_ROUTE: \"/edit-api-keys-permissions\",\n RECONNECT_OAUTH: \"/reconnect-oauth\",\n UPDATE_PERMISSIONS_TUTORIAL: \"/update-permissions-tutorial\",\n MULTIPLE_TRANSACTIONS: \"/multiple-transaction\",\n FIX_INVALID_PERMISSIONS_TUTORIAL: \"/fix-invalid-permissions-tutorial\",\n STATE_MACHINE_ROUTER: \"/state-machine-router\",\n POINTS: \"/points\",\n\n //Request routes\n REQUEST_CONNECT: \"/connect\",\n REQUEST_SILENT_CONNECT: \"/silentConnect\",\n REQUEST_CONNECTED_VAULTS: \"/connectVaults\",\n REQUEST_WITHDRAW_TO_DEFI: \"/withdrawToDefi\",\n REQUEST_WITHDRAW_TO_CEFI: \"/withdrawTokenToAnotherAccount\",\n REQUEST_CREATE_ORDER: \"/createOrder\",\n REQUEST_EDIT_ORDER: \"/editOrder\",\n REQUEST_MARKET_ORDER: \"/marketOrder\",\n REQUEST_CANCEL_ORDER: \"/cancelOrder\",\n REQUEST_CANCEL_ORDER_BY_EXCHANGE_ID: \"/cancelOrderByExchangeId\",\n REQUEST_GET_DEPOSIT_ADDRESS: \"/getDepositAddress\",\n REQUEST_TRANSACTIONS: \"/transactions\",\n REQUEST_ADD_CEX: \"/addCex\",\n REQUEST_ADD_CEX_SELECT_VAULT: \"/addCexSelectVault\",\n REQUEST_ADD_CEX_RESULT: \"/addCexResult\",\n REQUEST_ONBOARDING: \"/connect\",\n REQUEST_INSTALLATION_COMPLETE: \"/installationComplete\",\n};\n\nexport const WIDGET_ROUTES = {\n LOGIN: \"/login\",\n DEFAULT_ROUTE: \"/\",\n ACTION_ROUTE: \"/action\",\n COMPLETED_TRANSACTION_DETAILS_ROUTE: \"/completed-transaction-details\",\n FIX_INVALID_PERMISSIONS_TUTORIAL: STORE_ROUTES.FIX_INVALID_PERMISSIONS_TUTORIAL,\n MULTIPLE_TRANSACTIONS: \"/multiple-transaction\",\n COMPLETED_TRANSACTION_ROUTE: \"/completed-transaction\",\n};\n\nexport const TRADE_WIDGET_ROUTES = {\n ...WIDGET_ROUTES,\n ADD_DEFI_ADDRESS: \"/add-defi-address\",\n};\n","export const randomId = () => {\n const min = 100000;\n const max = 1000000; // Exclusive\n return Math.floor(Math.random() * (max - min) + min).toString();\n};\n\nexport const advancedRandomId = (length: number) => {\n return new Array(length).fill(\"\").map(randomId).join(\"-\");\n};\n","import { WalletType, WalletTypesConfig } from \"@cede/types\";\nimport { CEDE_CEXS } from \"../../cexs\";\n\nexport const WALLET_TYPES_COMMON_CONFIG: WalletTypesConfig = {\n send_wallet_types: {\n [CEDE_CEXS.OKX]: WalletType.FUNDING,\n [CEDE_CEXS.BINANCE]: WalletType.SPOT,\n [CEDE_CEXS.KUCOIN]: WalletType.FUNDING,\n [CEDE_CEXS.BYBIT]: WalletType.FUNDING,\n [CEDE_CEXS.BITFINEX]: WalletType.SPOT,\n [CEDE_CEXS.COINBASE]: WalletType.SPOT,\n [CEDE_CEXS.KRAKEN]: WalletType.SPOT,\n [CEDE_CEXS.GATEIO]: WalletType.SPOT,\n [CEDE_CEXS.HTX]: WalletType.SPOT,\n [CEDE_CEXS.BITGET]: WalletType.SPOT,\n [CEDE_CEXS.MEXC]: WalletType.SPOT,\n [CEDE_CEXS.BITSTAMP]: WalletType.SPOT,\n [CEDE_CEXS.COINBASE_EXCHANGE]: WalletType.SPOT,\n },\n transfer_wallet_types: {\n [CEDE_CEXS.OKX]: [WalletType.FUNDING, WalletType.SPOT],\n [CEDE_CEXS.BINANCE]: [WalletType.SPOT, WalletType.FUNDING],\n [CEDE_CEXS.KUCOIN]: [WalletType.FUNDING, WalletType.SPOT],\n [CEDE_CEXS.BYBIT]: [WalletType.FUNDING, WalletType.SPOT],\n [CEDE_CEXS.BITFINEX]: [WalletType.SPOT],\n [CEDE_CEXS.COINBASE]: [WalletType.SPOT],\n [CEDE_CEXS.KRAKEN]: [WalletType.SPOT],\n [CEDE_CEXS.GATEIO]: [WalletType.SPOT],\n [CEDE_CEXS.HTX]: [WalletType.SPOT],\n [CEDE_CEXS.BITGET]: [WalletType.SPOT],\n [CEDE_CEXS.MEXC]: [WalletType.SPOT],\n [CEDE_CEXS.BITSTAMP]: [WalletType.SPOT],\n [CEDE_CEXS.COINBASE_EXCHANGE]: [WalletType.SPOT],\n [CEDE_CEXS.BITMART]: [WalletType.SPOT],\n },\n external_to_internal_wallet_types: {\n [CEDE_CEXS.BINANCE]: {\n spot: WalletType.SPOT,\n },\n [CEDE_CEXS.BITFINEX]: {\n spot: WalletType.SPOT,\n },\n [CEDE_CEXS.BITGET]: {\n spot: WalletType.SPOT,\n funding: WalletType.FUNDING,\n },\n [CEDE_CEXS.BYBIT]: {\n UNIFIED: WalletType.SPOT,\n FUND: WalletType.FUNDING,\n },\n [CEDE_CEXS.GATEIO]: {\n spot: WalletType.SPOT,\n margin: WalletType.ISOLATED_MARGIN,\n },\n [CEDE_CEXS.KUCOIN]: {\n trade: WalletType.SPOT,\n main: WalletType.FUNDING,\n margin: WalletType.ISOLATED_MARGIN,\n earn: WalletType.EARN,\n },\n [CEDE_CEXS.MEXC]: {\n spot: WalletType.SPOT,\n },\n [CEDE_CEXS.HTX]: {\n spot: WalletType.SPOT,\n margin: WalletType.CROSS_MARGIN,\n },\n [CEDE_CEXS.OKX]: {\n trading: WalletType.SPOT,\n funding: WalletType.FUNDING,\n },\n [CEDE_CEXS.COINBASE_EXCHANGE]: {\n spot: WalletType.SPOT,\n },\n },\n internal_to_external_wallet_types: {\n [CEDE_CEXS.BINANCE]: {\n [WalletType.FUNDING]: \"funding\",\n [WalletType.EARN]: \"savings\",\n [WalletType.SPOT]: \"spot\",\n [WalletType.OPTIONS]: \"option\",\n [WalletType.ISOLATED_MARGIN]: \"margin\",\n [WalletType.CROSS_MARGIN]: \"margin\",\n },\n [CEDE_CEXS.KRAKEN]: {\n [WalletType.SPOT]: \"spot\",\n [WalletType.EARN]: \"earn\",\n },\n [CEDE_CEXS.BITFINEX]: {\n [WalletType.SPOT]: \"exchange\",\n [WalletType.CROSS_MARGIN]: \"margin\",\n [WalletType.DERIVATIVES]: \"derivatives\",\n },\n [CEDE_CEXS.BYBIT]: {\n [WalletType.FUNDING]: \"fund\",\n [WalletType.SPOT]: \"spot\",\n },\n [CEDE_CEXS.KUCOIN]: {\n [WalletType.SPOT]: \"trade\",\n [WalletType.ISOLATED_MARGIN]: \"margin\",\n [WalletType.FUNDING]: \"main\",\n [WalletType.EARN]: \"earn\",\n },\n [CEDE_CEXS.OKX]: {\n [WalletType.FUNDING]: \"funding\",\n [WalletType.SPOT]: \"trading\",\n [WalletType.CROSS_MARGIN]: \"margin\",\n [WalletType.COIN_M_SWAP]: \"swap\",\n [WalletType.OPTIONS]: \"option\",\n },\n [CEDE_CEXS.BITGET]: {\n [WalletType.FUNDING]: \"funding\",\n [WalletType.SPOT]: \"spot\",\n },\n [CEDE_CEXS.MEXC]: {\n [WalletType.SPOT]: \"spot\",\n },\n [CEDE_CEXS.GATEIO]: {\n [WalletType.SPOT]: \"spot\",\n [WalletType.ISOLATED_MARGIN]: \"margin\",\n [WalletType.CROSS_MARGIN]: \"margin\",\n },\n },\n external_wallet_types_parameters: {\n [CEDE_CEXS.BITGET]: {\n [WalletType.FUNDING]: [\n {\n type: \"funding\",\n },\n ],\n [WalletType.SPOT]: [\n {\n type: \"spot\",\n },\n ],\n [WalletType.CROSS_MARGIN]: [\n {\n type: \"spot\",\n marginMode: \"cross\",\n },\n ],\n [WalletType.ISOLATED_MARGIN]: [\n {\n type: \"spot\",\n marginMode: \"isolated\",\n },\n ],\n [WalletType.COIN_M_FUTURES]: [\n {\n type: \"swap\",\n productType: \"COIN-FUTURES\",\n },\n ],\n [WalletType.USD_M_FUTURES]: [\n {\n type: \"swap\",\n productType: \"USDT-FUTURES\",\n },\n { type: \"swap\", productType: \"USDC-FUTURES\" },\n ],\n [WalletType.EARN]: [\n {\n type: \"earn\",\n },\n ],\n },\n [CEDE_CEXS.BITFINEX]: {\n [WalletType.SPOT]: [{ type: \"exchange\" }],\n [WalletType.CROSS_MARGIN]: [{ type: \"margin\" }],\n [WalletType.DERIVATIVES]: [{ type: \"derivatives\" }],\n },\n [CEDE_CEXS.COINBASE]: {\n [WalletType.SPOT]: [{}], // coinbase only have 1 wallet type, spot will be used in ccxt\n },\n [CEDE_CEXS.COINBASE_EXCHANGE]: {\n [WalletType.SPOT]: [{}], // coinbaseexchange only have 1 wallet type, spot will be used in ccxt\n },\n [CEDE_CEXS.HTX]: {\n [WalletType.SPOT]: [{}],\n [WalletType.CROSS_MARGIN]: [\n {\n type: \"spot\",\n marginMode: \"cross\",\n },\n ],\n [WalletType.ISOLATED_MARGIN]: [\n {\n type: \"spot\",\n marginMode: \"isolated\",\n },\n ],\n [WalletType.USD_M_FUTURES]: [{ type: \"future\", unified: true }],\n [WalletType.COIN_M_FUTURES]: [{ type: \"future\", subType: \"inverse\" }],\n [WalletType.COIN_M_SWAP]: [{ type: \"swap\", subType: \"inverse\" }],\n },\n [CEDE_CEXS.KRAKEN]: {\n [WalletType.SPOT]: [{}],\n [WalletType.EARN]: [\n {\n type: \"earn\",\n },\n ],\n },\n [CEDE_CEXS.BYBIT]: {\n [WalletType.FUNDING]: [{ type: \"fund\" }],\n [WalletType.SPOT]: [{ type: \"spot\" }],\n [WalletType.DERIVATIVES]: [{ type: \"contract\" }],\n },\n [CEDE_CEXS.BINANCE]: {\n [WalletType.FUNDING]: [\n {\n type: \"funding\",\n },\n ],\n [WalletType.EARN]: [\n {\n type: \"savings\",\n },\n ],\n [WalletType.COIN_M_FUTURES]: [\n {\n // Coin M\n type: \"delivery\",\n },\n ],\n [WalletType.USD_M_FUTURES]: [\n {\n // USD-M\n type: \"future\",\n },\n ],\n [WalletType.CROSS_MARGIN]: [\n {\n type: \"margin\",\n marginMode: \"cross\",\n },\n ],\n [WalletType.ISOLATED_MARGIN]: [\n {\n type: \"margin\",\n marginMode: \"isolated\",\n },\n ],\n [WalletType.SPOT]: [{}],\n [WalletType.OPTIONS]: [\n {\n type: \"option\",\n },\n ],\n },\n [CEDE_CEXS.GATEIO]: {\n [WalletType.SPOT]: [\n {\n type: \"spot\",\n marginMode: \"\",\n },\n ],\n [WalletType.ISOLATED_MARGIN]: [\n {\n type: \"spot\",\n marginMode: \"margin\",\n },\n ],\n [WalletType.CROSS_MARGIN]: [\n {\n type: \"spot\",\n marginMode: \"cross_margin\",\n },\n ],\n [WalletType.OPTIONS]: [\n {\n type: \"option\",\n },\n ],\n },\n [CEDE_CEXS.OKX]: {\n [WalletType.FUNDING]: [\n {\n type: \"funding\",\n },\n ],\n [WalletType.SPOT]: [\n {\n type: \"trading\",\n },\n ],\n [WalletType.EARN]: [\n {\n type: \"savings\",\n },\n ],\n },\n [CEDE_CEXS.KUCOIN]: {\n [WalletType.SPOT]: [\n {\n type: \"trade\",\n },\n ],\n [WalletType.ISOLATED_MARGIN]: [\n {\n type: \"margin\",\n marginMode: \"isolated\",\n },\n ],\n [WalletType.CROSS_MARGIN]: [\n {\n type: \"margin\",\n marginMode: \"cross\",\n },\n ],\n [WalletType.FUNDING]: [\n {\n type: \"main\",\n },\n ],\n [WalletType.EARN]: [\n {\n type: \"earn\",\n },\n ],\n [WalletType.COIN_M_FUTURES]: [\n {\n future: true,\n type: \"coin-m\",\n },\n ],\n [WalletType.USD_M_FUTURES]: [\n {\n future: true,\n type: \"usd-m\",\n },\n ],\n },\n [CEDE_CEXS.BITMART]: {\n [WalletType.SPOT]: [\n {\n type: \"spot\",\n },\n ],\n [WalletType.USD_M_FUTURES]: [\n {\n type: \"usd-m\",\n },\n ],\n [WalletType.COIN_M_FUTURES]: [\n {\n type: \"coin-m\",\n },\n ],\n [WalletType.ISOLATED_MARGIN]: [{ type: \"margin\" }],\n },\n [CEDE_CEXS.BITSTAMP]: {\n [WalletType.SPOT]: [\n {\n type: \"spot\",\n },\n ],\n [WalletType.EARN]: [\n {\n type: \"earn\",\n },\n ],\n },\n [CEDE_CEXS.MEXC]: {\n [WalletType.SPOT]: [\n {\n type: \"spot\",\n },\n ],\n [WalletType.COIN_M_FUTURES]: [\n {\n type: \"coin-m\",\n },\n ],\n [WalletType.USD_M_FUTURES]: [\n {\n type: \"usd-m\",\n },\n ],\n },\n },\n};\n","import { WalletTypesConfig } from \"@cede/types\";\nimport { WALLET_TYPES_COMMON_CONFIG } from \"./walletTypes.common.config\";\n\nexport const WALLET_TYPES_TEST_CONFIG: WalletTypesConfig = {\n ...WALLET_TYPES_COMMON_CONFIG,\n};\n","export function firstLetterToUpperCase(text: string) {\n if (!text) return text;\n return (text[0] || \"\").toUpperCase() + text.slice(1).toLowerCase();\n}\n","import { ApiPermissions, ConnectionStatus } from \"@cede/types\";\nimport { CEDE_CEXS } from \"../cexs\";\nimport { firstLetterToUpperCase } from \"../text\";\n\nexport const fakeAccount = {\n id: \"11111-11111\",\n accountName: \"Binance 1\",\n exchangeId: CEDE_CEXS.BINANCE,\n permissions: [ApiPermissions.READ, ApiPermissions.TRADE],\n status: ConnectionStatus.ONLINE,\n};\n\nexport const fakeAccount2 = {\n id: \"22222-22222\",\n accountName: \"Coinbase 1\",\n exchangeId: CEDE_CEXS.COINBASE,\n permissions: [ApiPermissions.READ, ApiPermissions.WITHDRAW, ApiPermissions.TRADE],\n status: ConnectionStatus.ONLINE,\n};\n\nexport const fakeAccount3 = {\n id: \"33333-33333\",\n accountName: \"Bitfinex 1\",\n exchangeId: CEDE_CEXS.BITFINEX,\n permissions: [ApiPermissions.READ, ApiPermissions.WITHDRAW, ApiPermissions.TRADE],\n status: ConnectionStatus.ONLINE,\n};\n\nexport const fakeAccount4 = {\n id: \"44444-44444\",\n accountName: \"Kraken 1\",\n exchangeId: CEDE_CEXS.KRAKEN,\n permissions: [ApiPermissions.READ, ApiPermissions.WITHDRAW, ApiPermissions.TRADE],\n status: ConnectionStatus.ONLINE,\n};\n\nexport const fakeAccount5 = {\n id: \"55555-55555\",\n accountName: \"Bitmart 1\",\n exchangeId: CEDE_CEXS.BITMART,\n permissions: [ApiPermissions.READ, ApiPermissions.WITHDRAW, ApiPermissions.TRADE],\n status: ConnectionStatus.ONLINE,\n};\n\nexport const fakeAccount6 = {\n ...fakeAccount,\n permissions: [ApiPermissions.READ, ApiPermissions.WITHDRAW, ApiPermissions.TRADE],\n};\n\nexport const fakeAccountsForAllExchanges = Object.values(CEDE_CEXS)\n .filter((exchange) => ![CEDE_CEXS.BITMART, CEDE_CEXS.BITSTAMP].includes(exchange))\n .map((exchange, index) => ({\n id: `${exchange}-${index}`,\n accountName: `${firstLetterToUpperCase(exchange)} 1`,\n exchangeId: exchange,\n permissions: [ApiPermissions.READ, ApiPermissions.WITHDRAW, ApiPermissions.TRADE],\n status: ConnectionStatus.ONLINE,\n }));\n","import {\n BalancesByWalletTypeByAccountId,\n CampaignOrder,\n DetailedChain,\n DiscordInvitation,\n ExchangeNameStatus,\n ExchangeToStandarizedChainsMapping,\n FiatCurrencyMetadata,\n GasData,\n GeneralStats,\n KrakenWithdrawalNetworkDto,\n LeaderboardEntry,\n MarketNetwork,\n Partner,\n SupportedTokensWithNetworks,\n TokenMappingItem,\n TokenMetadata,\n TokenPriceResponse,\n TokenSymbolName,\n TradeLeaderBoardUser,\n TradePathBySupportedTokens,\n TradePathData,\n UserMultiplierState,\n UserStats,\n UserRewardState,\n WalletTypesConfig,\n} from \"@cede/types\";\n\nexport type TokenPrices = {\n [key: string]: number;\n};\n\nexport type GasPriceResponseDto = GasData[];\n\nexport type DetailedChainsResponseDto = DetailedChain[];\n\nexport type AccountBalanceResponseDto = {\n balances: AccountBalance[];\n message: string;\n};\n\n// Account Balance\nexport type AccountBalance = {\n protocolSymbol: string | null;\n protocolName: string;\n positionType: string;\n quantity: number;\n value: number; // value in USD\n price: number; // price per token in USD\n changes: {\n absolute_1d: number;\n percent_1d: number;\n };\n token: Currency;\n updatedAt: string;\n chainId: string;\n};\n\nexport type Currency = {\n name: string;\n icon: string;\n symbol: string;\n};\n\nexport type AllFiatCurrencies = {\n [key: string]: boolean;\n};\n\nexport type ServerApiError = { statusCode: number; message: string; error: string };\n\nexport const isServerApiError = (data: unknown): data is ServerApiError => {\n return (data as ServerApiError).statusCode !== undefined;\n};\n\nexport type APIResponseMap = {\n [API_ENDPOINT.EXCHANGES_STATUS]: ExchangeNameStatus[];\n [API_ENDPOINT.TOKEN_NAMES_AND_SYMBOLS]: TokenSymbolName[];\n [API_ENDPOINT.FIAT_CURRENCIES]: FiatCurrencyMetadata[];\n [API_ENDPOINT.STANDARDIZED_CHAINS]: ExchangeToStandarizedChainsMapping;\n [API_ENDPOINT.PRICES]: TokenPriceResponse;\n [API_ENDPOINT.SUPPORTED_TOKENS]: SupportedTokensWithNetworks;\n [API_ENDPOINT.SUPPORTED_TOKENS_BY_EXCHANGE]: string[];\n [API_ENDPOINT.SUPPORTED_NETWORKS_BY_EXCHANGE]: MarketNetwork[];\n [API_ENDPOINT.TRADE_PATH]: TradePathData[];\n [API_ENDPOINT.PARTNERS]: Partner[];\n [API_ENDPOINT.ALL_FIAT_CURRENCIES]: AllFiatCurrencies;\n [API_ENDPOINT.KRAKEN_WITHDRAWAL_NETWORKS_INFO]: KrakenWithdrawalNetworkDto;\n [API_ENDPOINT.WALLET_TYPES_CONFIG]: WalletTypesConfig;\n [API_ENDPOINT.USER_REWARDS]: UserRewardState;\n [API_ENDPOINT.TRADE_PATH_BY_SUPPORTED_TOKENS]: TradePathBySupportedTokens | ServerApiError;\n [API_ENDPOINT.GET_DISCORD_INVITATION]: DiscordInvitation | ServerApiError;\n [API_ENDPOINT.GET_REFERRAL_CODE]: { code: string };\n [API_ENDPOINT.USER_ACTIVE_REWARD_MULTIPLIERS]: UserMultiplierState;\n [API_ENDPOINT.TRADE_LEADERBOARD]: TradeLeaderBoardUser[];\n [API_ENDPOINT.BALANCES]: BalancesByWalletTypeByAccountId;\n [API_ENDPOINT.TOKENS_MAPPING]: TokenMappingItem[];\n [API_ENDPOINT.TOKENS_METADATA]: Record<string, TokenMetadata>;\n [API_ENDPOINT.CAMPAIGN_OPEN_ORDERS]: CampaignOrder[];\n [API_ENDPOINT.ACCOUNTS_BY_USER_ID]: { accountId: string; exchangeId: string; publicApiKey: string }[];\n [API_ENDPOINT.ACCOUNTS]: {\n accountId: string;\n exchangeId: string;\n status: string;\n };\n [API_ENDPOINT.HUB_STATS]: GeneralStats;\n [API_ENDPOINT.HUB_USER_STATS]: UserStats;\n [API_ENDPOINT.HUB_GLOBAL_LEADERBOARD]: LeaderboardEntry[];\n};\n\nexport enum API_ENDPOINT {\n EXCHANGES_STATUS = \"v1/exchange/status\",\n TOKEN_NAMES_AND_SYMBOLS = \"v1/tokens\",\n FIAT_CURRENCIES = \"v1/fiat/currencies\",\n STANDARDIZED_CHAINS = \"v1/exchange/map/chains\",\n PRICES = \"v2/price/crypto\",\n SUPPORTED_TOKENS = \"v1/tokens/supported-tokens\",\n SUPPORTED_TOKENS_BY_EXCHANGE = \"v1/tokens/supported-tokens-by-exchange\",\n SUPPORTED_NETWORKS_BY_EXCHANGE = \"v1/tokens/supported-networks-by-exchange\",\n TRADE_PATH = \"v1/trade/path\",\n PARTNERS = \"v1/misc/partners\",\n ALL_FIAT_CURRENCIES = \"v1/fiat/currencies/all\",\n KRAKEN_WITHDRAWAL_NETWORKS_INFO = \"v1/exchange/kraken/withdrawal_networks_info\",\n ACCOUNTS = \"v1/accounts\",\n WALLET_TYPES_CONFIG = \"v2/misc/walletTypesConfig\",\n USER_REWARDS = \"v2/rewards/users\",\n USER_ACTIVE_REWARD_MULTIPLIERS = \"v2/rewards/activeMultipliers\",\n UNINSTALL = \"v1/misc/uninstall\",\n TRADE_PATH_BY_SUPPORTED_TOKENS = \"v1/trade/path-by-supported-tokens\",\n GET_DISCORD_INVITATION = \"v1/social/discord-invite\",\n GET_REFERRAL_CODE = \"v2/rewards/referral-code\",\n CLAIM_REFERRAL = \"v2/rewards/refer\",\n TRADE_LEADERBOARD = \"v1/tradeReporting/leaderboard\",\n BALANCES = \"v1/balances\",\n TOKENS_MAPPING = \"v1/tokens/mapping\",\n TOKENS_METADATA = \"v2/tokens/metadata\",\n CAMPAIGN_OPEN_ORDERS = \"v1/tradeReporting/open-orders\",\n ACCOUNTS_BY_USER_ID = \"v1/accounts/accounts-by-user-id\",\n HUB_STATS = \"v1/hub/stats\",\n HUB_USER_STATS = \"v1/hub/stats/user\",\n HUB_GLOBAL_LEADERBOARD = \"v1/hub/stats/global-leaderboard\",\n}\n","import { UserRewardState, ConnectionStatus } from \"@cede/types\";\nimport { forgeNetworkURL } from \"../cdn-client\";\nimport { CEDE_CEXS } from \"../cexs\";\nimport { WALLET_TYPES_TEST_CONFIG } from \"../configs\";\nimport { EXISTING_FIAT_CURRENCIES } from \"../fiat\";\nimport { fakeAccount } from \"../mocks\";\nimport { API_ENDPOINT } from \"./types\";\n\nexport const API_MOCK_DATA = {\n [API_ENDPOINT.EXCHANGES_STATUS]: [\n {\n id: CEDE_CEXS.COINBASE,\n name: \"Coinbase\",\n status: \"ok\",\n },\n {\n id: CEDE_CEXS.BINANCE,\n name: \"Binance\",\n status: \"ok\",\n },\n {\n id: CEDE_CEXS.KRAKEN,\n name: \"Kraken\",\n status: \"ok\",\n },\n {\n id: CEDE_CEXS.GATEIO,\n name: \"Gate.io\",\n status: \"ok\",\n },\n {\n id: CEDE_CEXS.BITFINEX,\n name: \"Bitfinex\",\n status: \"ok\",\n },\n {\n id: CEDE_CEXS.HTX,\n name: \"HTX\",\n status: \"ok\",\n },\n {\n id: CEDE_CEXS.KUCOIN,\n name: \"KuCoin\",\n status: \"ok\",\n },\n {\n id: CEDE_CEXS.BITSTAMP,\n name: \"Bitstamp\",\n status: \"ok\",\n },\n {\n id: CEDE_CEXS.OKX,\n name: \"OKX\",\n status: \"ok\",\n },\n {\n id: CEDE_CEXS.BITGET,\n name: \"Bitget\",\n status: \"ok\",\n },\n {\n id: CEDE_CEXS.BITMART,\n name: \"BitMart\",\n status: \"ok\",\n },\n {\n id: CEDE_CEXS.BYBIT,\n name: \"Bybit\",\n status: \"ok\",\n },\n ],\n [API_ENDPOINT.TOKEN_NAMES_AND_SYMBOLS]: [\n {\n symbol: \"zoc\",\n name: \"01coin\",\n },\n {\n symbol: \"zcn\",\n name: \"Zus\",\n },\n {\n symbol: \"0kn\",\n name: \"0 Knowledge Network\",\n },\n {\n symbol: \"vix\",\n name: \"0VIX Protocol\",\n },\n {\n symbol: \"zrx\",\n name: \"0x Protocol\",\n },\n {\n symbol: \"0x0\",\n name: \"0x0.ai: AI Smart Contract\",\n },\n {\n symbol: \"0x1\",\n name: \"0x1.tools: AI Multi-tool\",\n },\n {\n symbol: \"0xa\",\n name: \"0xAuto.io : Contract Auto Deployer\",\n },\n {\n symbol: \"coco\",\n name: \"0xCoco\",\n },\n {\n symbol: \"oxd\",\n name: \"0xDAO\",\n },\n {\n symbol: \"oxd v2\",\n name: \"0xDAO V2\",\n },\n {\n symbol: \"cafe\",\n name: \"0xDEFCAFE\",\n },\n {\n symbol: \"0xf\",\n name: \"0xFriend\",\n },\n {\n symbol: \"0xgas\",\n name: \"0xGasless\",\n },\n {\n symbol: \"0xmr\",\n name: \"0xMonero\",\n },\n {\n symbol: \"$0xs\",\n name: \"0xS\",\n },\n {\n symbol: \"shield\",\n name: \"0xShield\",\n },\n {\n symbol: \"0xs\",\n name: \"0xSniper\",\n },\n {\n symbol: \"tshp\",\n name: \"12Ships\",\n },\n {\n symbol: \"1art\",\n name: \"OneArt\",\n },\n {\n symbol: \"1eco\",\n name: \"1eco\",\n },\n {\n symbol: \"water\",\n name: \"1Hive Water\",\n },\n {\n symbol: \"1inch\",\n name: \"1inch\",\n },\n {\n symbol: \"yv1inch\",\n name: \"1INCH yVault\",\n },\n {\n symbol: \"1mil\",\n name: \"1MillionNFTs\",\n },\n {\n symbol: \"1mb\",\n name: \"1minBET\",\n },\n {\n symbol: \"1mt\",\n name: \"1Move Token\",\n },\n {\n symbol: \"1peco\",\n name: \"1peco\",\n },\n {\n symbol: \"1rt\",\n name: \"1Reward Token\",\n },\n {\n symbol: \"safu\",\n name: \"1SAFU\",\n },\n {\n symbol: \"1sol\",\n name: \"1Sol\",\n },\n {\n symbol: \"1sol\",\n name: \"1sol.io (Wormhole)\",\n },\n {\n symbol: \"₿\",\n name: \"₿\",\n },\n {\n symbol: \"2049\",\n name: \"2049\",\n },\n {\n symbol: \"20weth-80bal\",\n name: \"20WETH-80BAL\",\n },\n {\n symbol: \"vck\",\n name: \"28VCK\",\n },\n {\n symbol: \"arms\",\n name: \"2ACoin\",\n },\n {\n symbol: \"2crz\",\n name: \"2crazyNFT\",\n },\n {\n symbol: \"2dai\",\n name: \"2DAI.io\",\n },\n {\n symbol: \"2gcc\",\n name: \"2G Carbon Coin\",\n },\n {\n symbol: \"2omb\",\n name: \"2omb\",\n },\n {\n symbol: \"2shares\",\n name: \"2SHARE\",\n },\n ],\n [API_ENDPOINT.FIAT_CURRENCIES]: [\n {\n symbol: \"USD\",\n name: \"United States Dollar\",\n symbolNative: \"$\",\n },\n {\n symbol: \"EUR\",\n name: \"Euro\",\n symbolNative: \"€\",\n },\n {\n symbol: \"GBP\",\n name: \"British Pound Sterling\",\n symbolNative: \"£\",\n },\n ],\n [API_ENDPOINT.STANDARDIZED_CHAINS]: {\n binance: [\n {\n ecid: \"ETH\",\n icid: \"ethereum\",\n icn: \"Ethereum\",\n chainId: 1,\n },\n {\n ecid: \"DOT\",\n icid: \"polkadot\",\n icn: \"Polkadot\",\n chainId: 2,\n },\n {\n ecid: \"AVAX\",\n icid: \"avalanche\",\n icn: \"Avalanche\",\n chainId: 3,\n },\n ],\n coinbase: [\n {\n ecid: \"ethereum\",\n icid: \"ethereum\",\n icn: \"Ethereum\",\n chainId: 1,\n },\n ],\n okx: [\n {\n ecid: \"ERC20\",\n icid: \"ethereum\",\n icn: \"Ethereum\",\n chainId: 1,\n },\n ],\n },\n [API_ENDPOINT.PRICES]: {\n data: {\n updatedAt: \"2021-09-20T08:51:12.000Z\",\n tokens: [\n {\n tokenSymbol: \"USDC\",\n average: 1,\n exchanges: {\n [CEDE_CEXS.BITSTAMP]: 1,\n [CEDE_CEXS.COINBASE]: 1,\n [CEDE_CEXS.BITGET]: 1,\n [CEDE_CEXS.KUCOIN]: 1,\n [CEDE_CEXS.OKX]: 1,\n [CEDE_CEXS.BITFINEX]: 1,\n [CEDE_CEXS.BYBIT]: 1,\n [CEDE_CEXS.HTX]: 1,\n [CEDE_CEXS.KRAKEN]: 1,\n [CEDE_CEXS.GATEIO]: 1,\n [CEDE_CEXS.BITMART]: 1,\n [CEDE_CEXS.BINANCE]: 1,\n },\n },\n {\n tokenSymbol: \"BTC\",\n average: 26854.01620548817,\n exchanges: {\n [CEDE_CEXS.BITSTAMP]: 26859.833,\n [CEDE_CEXS.COINBASE]: 26840.316203576476,\n [CEDE_CEXS.BITGET]: 26856.019189999995,\n [CEDE_CEXS.KUCOIN]: 26985.197453932367,\n [CEDE_CEXS.OKX]: 26790.1762308,\n [CEDE_CEXS.BITFINEX]: 26857.831,\n [CEDE_CEXS.BYBIT]: 26829.1276505092,\n [CEDE_CEXS.HTX]: 26855.298469999998,\n [CEDE_CEXS.KRAKEN]: 26840.1,\n [CEDE_CEXS.GATEIO]: 26857.630799999995,\n [CEDE_CEXS.BITMART]: 26835.50246841,\n [CEDE_CEXS.BINANCE]: 26841.16199863,\n },\n },\n {\n tokenSymbol: \"ETH\",\n average: 1638.3047911131491,\n exchanges: {\n [CEDE_CEXS.BITSTAMP]: 1638.5368999999998,\n [CEDE_CEXS.COINBASE]: 1637.67902,\n [CEDE_CEXS.BITGET]: 1637.74500528,\n [CEDE_CEXS.KUCOIN]: 1640.448408955305,\n [CEDE_CEXS.OKX]: 1637.67902,\n [CEDE_CEXS.BITFINEX]: 1638.8372,\n [CEDE_CEXS.BYBIT]: 1637.7762899224856,\n [CEDE_CEXS.HTX]: 1639.2075699999998,\n [CEDE_CEXS.KRAKEN]: 1637.88,\n [CEDE_CEXS.GATEIO]: 1639.1274899999999,\n [CEDE_CEXS.BITMART]: 1637.27651,\n [CEDE_CEXS.BINANCE]: 1637.4640791999998,\n },\n },\n {\n tokenSymbol: \"AVAX\",\n average: 9.455109874685059,\n exchanges: {\n [CEDE_CEXS.BITSTAMP]: 9.473832728420724,\n [CEDE_CEXS.GATEIO]: 9.448,\n [CEDE_CEXS.BYBIT]: 9.4598918778,\n [CEDE_CEXS.BITFINEX]: 9.453,\n [CEDE_CEXS.HTX]: 9.4524,\n [CEDE_CEXS.OKX]: 9.445359,\n [CEDE_CEXS.KRAKEN]: 9.46,\n [CEDE_CEXS.BITGET]: 9.4516,\n [CEDE_CEXS.KUCOIN]: 9.444792210000001,\n [CEDE_CEXS.COINBASE]: 9.454222679999999,\n [CEDE_CEXS.BINANCE]: 9.46242,\n [CEDE_CEXS.BITMART]: 9.4558,\n },\n },\n {\n tokenSymbol: \"USDT\",\n average: 0.995892009896678,\n exchanges: {\n [CEDE_CEXS.BITSTAMP]: 0.9994891104662439,\n [CEDE_CEXS.GATEIO]: 0.998761239,\n [CEDE_CEXS.BYBIT]: 1.0007220978867657,\n [CEDE_CEXS.BITFINEX]: 1.0004608327,\n [CEDE_CEXS.OKX]: 0.999978,\n [CEDE_CEXS.KRAKEN]: 0.9999809474200001,\n [CEDE_CEXS.BITGET]: 0.9996880566905006,\n [CEDE_CEXS.KUCOIN]: 0.9613928192032687,\n [CEDE_CEXS.COINBASE]: 1.0001779956,\n [CEDE_CEXS.BINANCE]: 0.998269,\n },\n },\n {\n tokenSymbol: \"LINK\",\n average: 7.521685779649785,\n exchanges: {\n [CEDE_CEXS.BITSTAMP]: 7.5147387,\n [CEDE_CEXS.GATEIO]: 7.5317,\n [CEDE_CEXS.BYBIT]: 7.5281343774,\n [CEDE_CEXS.BITFINEX]: 7.5375,\n [CEDE_CEXS.HTX]: 7.5327,\n [CEDE_CEXS.OKX]: 7.5068532,\n [CEDE_CEXS.KRAKEN]: 7.513076760000001,\n [CEDE_CEXS.BITGET]: 7.511691809999999,\n [CEDE_CEXS.KUCOIN]: 7.521034533600001,\n [CEDE_CEXS.COINBASE]: 7.51917054,\n [CEDE_CEXS.BINANCE]: 7.510729434797414,\n [CEDE_CEXS.BITMART]: 7.5329,\n },\n },\n {\n tokenSymbol: \"BNB\",\n average: 212.78111366,\n exchanges: {\n [CEDE_CEXS.GATEIO]: 213,\n [CEDE_CEXS.BYBIT]: 212.8291,\n [CEDE_CEXS.HTX]: 213.04,\n [CEDE_CEXS.OKX]: 212.83531752000002,\n [CEDE_CEXS.BITGET]: 212.98,\n [CEDE_CEXS.KUCOIN]: 212.51532456,\n [CEDE_CEXS.BINANCE]: 212.4316432,\n [CEDE_CEXS.BITMART]: 212.617524,\n },\n },\n {\n tokenSymbol: \"DOT\",\n average: 3.771710283627618,\n exchanges: {\n [CEDE_CEXS.BITSTAMP]: 3.7801075875314116,\n [CEDE_CEXS.GATEIO]: 3.7784,\n [CEDE_CEXS.BYBIT]: 3.777916884,\n [CEDE_CEXS.BITFINEX]: 3.7676,\n [CEDE_CEXS.HTX]: 3.7736,\n [CEDE_CEXS.OKX]: 3.76762023,\n [CEDE_CEXS.KRAKEN]: 3.7692799200000002,\n [CEDE_CEXS.BITGET]: 3.7768,\n [CEDE_CEXS.KUCOIN]: 3.768917082,\n [CEDE_CEXS.COINBASE]: 3.7559843999999996,\n [CEDE_CEXS.BINANCE]: 3.7691973,\n [CEDE_CEXS.BITMART]: 3.7751,\n },\n },\n ],\n },\n },\n [API_ENDPOINT.SUPPORTED_TOKENS]: {\n kraken: [\n {\n tokenSymbol: \"1INCH\",\n isDepositable: true,\n isWithdrawable: true,\n networks: [\n {\n name: \"Ethereum\",\n network: \"ethereum\",\n depositEnabled: true,\n withdrawalEnabled: true,\n withdrawFee: \"3.82\",\n withdrawMin: \"2\",\n withdrawMax: \"22513350\",\n chainId: 1,\n iconUrl: forgeNetworkURL(\"ethereum\"),\n },\n ],\n },\n ],\n okx: [\n {\n tokenSymbol: \"USDT\",\n isDepositable: true,\n isWithdrawable: true,\n networks: [\n {\n name: \"OKT Chain\",\n network: \"oktchain\",\n depositEnabled: true,\n withdrawalEnabled: false,\n withdrawFee: \"0\",\n withdrawMin: \"0\",\n withdrawMax: \"22513350\",\n chainId: 66,\n iconUrl: forgeNetworkURL(\"oktchain\"),\n },\n {\n name: \"Ethereum\",\n network: \"ethereum\",\n depositEnabled: true,\n withdrawalEnabled: true,\n withdrawFee: \"3.82\",\n withdrawMin: \"2\",\n withdrawMax: \"22513350\",\n chainId: 1,\n iconUrl: forgeNetworkURL(\"ethereum\"),\n },\n ],\n },\n {\n tokenSymbol: \"USDC\",\n isDepositable: true,\n isWithdrawable: true,\n networks: [\n {\n name: \"OKT Chain\",\n network: \"oktchain\",\n depositEnabled: true,\n withdrawalEnabled: false,\n withdrawFee: \"0\",\n withdrawMin: \"0\",\n withdrawMax: \"22531375\",\n chainId: 66,\n iconUrl: forgeNetworkURL(\"oktchain\"),\n },\n {\n name: \"Ethereum\",\n network: \"ethereum\",\n depositEnabled: true,\n withdrawalEnabled: true,\n withdrawFee: \"11.52\",\n withdrawMin: \"1\",\n withdrawMax: \"22531375\",\n chainId: 1,\n iconUrl: forgeNetworkURL(\"ethereum\"),\n },\n ],\n },\n ],\n },\n [API_ENDPOINT.SUPPORTED_TOKENS_BY_EXCHANGE]: [\n \"AGLD\",\n \"STPT\",\n \"MXN\",\n \"MATICUSDCE\",\n \"UGX\",\n \"GLM\",\n \"RAY\",\n \"NEAR\",\n \"AUDIO\",\n \"WLD\",\n \"FDUSD\",\n \"FARM\",\n \"SDG\",\n \"XNO\",\n \"AVAOLD\",\n \"DGB\",\n \"ZRX\",\n \"SANTOS\",\n \"WING\",\n \"WNXM\",\n \"BCH\",\n \"AI\",\n \"JST\",\n \"HOT\",\n \"XOF\",\n \"GMT\",\n \"AR\",\n \"IRIS\",\n \"GMX\",\n \"SEI\",\n \"GNF\",\n \"QAR\",\n \"JTO\",\n \"FLM\",\n \"GNO\",\n \"VITE\",\n \"GNS\",\n \"VANRY\",\n \"CFX\",\n \"T\",\n \"LYD\",\n \"KWD\",\n \"SFP\",\n \"DIA\",\n \"ACA\",\n \"ISK\",\n \"ARDR\",\n \"ACE\",\n \"ACH\",\n \"BEL\",\n \"JUV\",\n \"ACM\",\n \"MINA\",\n \"TIA\",\n \"VTHO\",\n \"PAB\",\n \"WOO\",\n \"REI\",\n \"BLUR\",\n \"REN\",\n \"ADA\",\n \"ELF\",\n \"REQ\",\n \"STORJ\",\n \"DF\",\n \"RARE\",\n \"PAXG\",\n \"PAX\",\n \"CHR\",\n \"VND\",\n \"WAVES\",\n \"CHZ\",\n \"ADX\",\n \"XRP\",\n \"PGALA\",\n \"FLOKI\",\n \"JASMY\",\n \"TJS\",\n \"AED\",\n \"FIDA\",\n \"SAND\",\n \"OCEAN\",\n \"FOR\",\n \"UMA\",\n \"SCRT\",\n \"TUSD\",\n \"TKO\",\n \"IDRT\",\n \"BHD\",\n \"ENJ\",\n \"KZT\",\n \"OAX\",\n \"GRT\",\n \"AFN\",\n \"HARD\",\n \"TFUEL\",\n \"ENS\",\n \"TROY\",\n \"UNI\",\n \"TLM\",\n \"HUF\",\n \"CKB\",\n \"WRX\",\n \"LUNC\",\n \"XTZ\",\n \"LUNA\",\n \"FUSDC\",\n \"BCHA\",\n \"EOS\",\n \"RIF\",\n \"SKL\",\n \"GTC\",\n \"PEN\",\n \"SOLO\",\n \"TMT\",\n \"BURGER\",\n \"HOOK\",\n \"XVG\",\n \"EPS\",\n \"TND\",\n \"CLV\",\n \"EPX\",\n \"FLOW\",\n \"XVS\",\n \"MEME\",\n \"STEEM\",\n \"SLP\",\n \"VRT\",\n \"ID\",\n \"DOP\",\n \"LAZIO\",\n \"DOT\",\n \"IQ\",\n \"1INCH\",\n \"CHESS\",\n \"MAD\",\n \"DEGO\",\n \"GYEN\",\n \"UNFI\",\n \"FTM\",\n \"POWR\",\n \"ERN\",\n \"MAV\",\n \"FTT\",\n \"VOXEL\",\n \"PHA\",\n \"RLC\",\n \"BEAMX\",\n \"PHB\",\n \"ARKM\",\n \"ATOM\",\n \"PENDLE\",\n \"QUICK\",\n \"BLZ\",\n \"MBL\",\n \"SNT\",\n \"PHP\",\n \"SNX\",\n \"FUN\",\n \"COP\",\n \"COS\",\n \"API3\",\n \"QKC\",\n \"ROSE\",\n \"GLMR\",\n \"SOL\",\n \"ETB\",\n \"CITY\",\n \"ETC\",\n \"BNB\",\n \"CELR\",\n \"OGN\",\n \"LAK\",\n \"ETH\",\n \"BND\",\n \"NEO\",\n \"CELO\",\n \"KLAY\",\n \"AUCTION\",\n \"TUSDOLD\",\n \"BADGER\",\n \"MULTI\",\n \"HIGH\",\n \"TRB\",\n \"BNT\",\n \"LBA\",\n \"BNX\",\n \"UTK\",\n \"ORDI\",\n \"WSOL\",\n \"MDL\",\n \"AMB\",\n \"TRU\",\n \"WBNB\",\n \"AMD\",\n \"DREP\",\n \"NFP\",\n \"TRY\",\n \"TRX\",\n \"MDT\",\n \"NFT\",\n \"MDX\",\n \"AERGO\",\n \"EUR\",\n \"AMP\",\n \"HIFI\",\n \"NULS\",\n \"USTC\",\n \"RON\",\n \"RDNTOLD\",\n \"NGN\",\n \"CRC\",\n \"PKR\",\n \"EGLD\",\n \"PUNDIX\",\n \"SPELL\",\n \"FXS\",\n \"PLA\",\n \"EVX\",\n \"CRV\",\n \"BAKE\",\n \"ANT\",\n \"FLUX\",\n \"RPL\",\n \"TORN\",\n \"PLN\",\n \"MAGIC\",\n \"LDO\",\n \"QNT\",\n \"ALICE\",\n \"OG\",\n \"ETHW\",\n \"OM\",\n \"AEUR\",\n \"OP\",\n \"BTTOLD\",\n \"BETH\",\n \"WETH\",\n \"BETA\",\n \"APE\",\n \"SSV\",\n \"BUSD\",\n \"CTK\",\n \"ARPA\",\n \"BRL\",\n \"ALCX\",\n \"MATIC\",\n \"APT\",\n \"STG\",\n \"IOTX\",\n \"SHIB\",\n \"FRONT\",\n \"KDA\",\n \"ZAR\",\n \"QUICKOLD\",\n \"DOCK\",\n \"STX\",\n \"PNT\",\n \"QI\",\n \"DENT\",\n \"MBOX\",\n \"TWD\",\n \"IOST\",\n \"SUI\",\n \"CAKE\",\n \"BSW\",\n \"WBETH\",\n \"OMG\",\n \"BAND\",\n \"SUN\",\n \"ASTR\",\n \"TRXOLD\",\n \"BTC\",\n \"TWT\",\n \"NKN\",\n \"RSR\",\n \"UYU\",\n \"ARB\",\n \"IOTA\",\n \"CVC\",\n \"REEF\",\n \"OMR\",\n \"KES\",\n \"ARK\",\n \"LOKA\",\n \"CVP\",\n \"KEY\",\n \"ARS\",\n \"CVX\",\n \"ONE\",\n \"ONG\",\n \"ANKR\",\n \"SUSHI\",\n \"ALGO\",\n \"UZS\",\n \"SC\",\n \"WBTC\",\n \"ONT\",\n \"BTTC\",\n \"RUB\",\n \"PIVX\",\n \"ASR\",\n \"AST\",\n \"MANA\",\n \"ATA\",\n \"DZD\",\n \"NMR\",\n \"MKR\",\n \"DODO\",\n \"LIT\",\n \"KGS\",\n \"ICP\",\n \"ATM\",\n \"JEX\",\n \"XAF\",\n \"ICX\",\n \"POLYX\",\n \"XAI\",\n \"LOOM\",\n \"KP3R\",\n \"DOGE\",\n \"DUSK\",\n \"ALPHA\",\n \"HBAR\",\n \"SXP\",\n \"RVN\",\n \"TZS\",\n \"MLN\",\n \"PEPE\",\n \"AUD\",\n \"KHR\",\n \"CTSI\",\n \"BWP\",\n \"KAVA\",\n \"C98\",\n \"OSMO\",\n \"PSG\",\n \"SYN\",\n \"MMK\",\n \"VIDT\",\n \"NOK\",\n \"AVA\",\n \"SYS\",\n \"STRAX\",\n \"GAL\",\n \"CZK\",\n \"GAS\",\n \"COMBO\",\n \"THETA\",\n \"WAN\",\n \"ORN\",\n \"PERL\",\n \"NEXO\",\n \"MASK\",\n \"AAVE\",\n \"MNT\",\n \"GBP\",\n \"BONK\",\n \"PERP\",\n \"BYN\",\n \"BOND\",\n \"YFI\",\n \"LQTY\",\n \"BICO\",\n \"XEC\",\n \"YGG\",\n \"PEOPLE\",\n \"AXS\",\n \"ZIL\",\n \"VAI\",\n \"XEM\",\n \"CTXC\",\n \"BIDR\",\n \"COMP\",\n \"HFT\",\n \"OOKI\",\n \"RUNE\",\n \"FORTH\",\n \"KMD\",\n \"GHST\",\n \"ALPINE\",\n \"LEVER\",\n \"IDEX\",\n \"GEL\",\n \"DEXE\",\n \"AVAX\",\n \"AZN\",\n \"UAH\",\n \"KNC\",\n \"PROS\",\n \"PROM\",\n \"BGBP\",\n \"LPT\",\n \"HIVE\",\n \"GFT\",\n \"BIFI\",\n \"RDNT\",\n \"PORTO\",\n \"OPUSDCE\",\n \"PYR\",\n \"WAXP\",\n \"DAI\",\n \"DAR\",\n \"FET\",\n \"LRC\",\n \"VET\",\n \"MTL\",\n \"ALPACA\",\n \"USDT\",\n \"OXT\",\n \"USDP\",\n \"DASH\",\n \"ILS\",\n \"ILV\",\n \"GHS\",\n \"EDU\",\n \"JOD\",\n \"HKD\",\n \"JOE\",\n \"CAN\",\n \"DCR\",\n \"CREAM\",\n \"DATA\",\n \"IMX\",\n \"USDC\",\n \"LTC\",\n \"WIN\",\n \"INJ\",\n \"TCT\",\n \"SAR\",\n \"LTO\",\n \"VGX\",\n \"DYDX\",\n \"EFI\",\n \"AGIX\",\n \"POND\",\n \"LINA\",\n \"1000SATS\",\n \"XLM\",\n \"LINK\",\n \"QTUM\",\n \"CYBER\",\n \"UFT\",\n \"SUPER\",\n \"POLS\",\n \"KSM\",\n \"ARBUSDCE\",\n \"FIL\",\n \"STMX\",\n \"RNDR\",\n \"BAL\",\n \"FIO\",\n \"GALA\",\n \"VIB\",\n \"VIC\",\n \"FIS\",\n \"BAR\",\n \"RAD\",\n \"BAT\",\n \"AKRO\",\n \"NZD\",\n \"MOVR\",\n \"COTI\",\n ],\n [API_ENDPOINT.SUPPORTED_NETWORKS_BY_EXCHANGE]: [\n {\n name: \"Ethereum\",\n network: \"ethereum\",\n withdrawFee: \"335\",\n withdrawMax: \"10000000000\",\n withdrawMin: \"670\",\n depositEnabled: true,\n withdrawalEnabled: true,\n chainId: 1,\n iconUrl: forgeNetworkURL(\"ethereum\"),\n },\n {\n name: \"Polygon\",\n network: \"polygon\",\n withdrawFee: \"1\",\n withdrawMax: \"100000000\",\n withdrawMin: \"10\",\n depositEnabled: true,\n withdrawalEnabled: true,\n chainId: 137,\n iconUrl: forgeNetworkURL(\"polygon\"),\n },\n {\n name: \"Solana\",\n network: \"solana\",\n withdrawFee: \"1\",\n withdrawMax: \"250000000\",\n withdrawMin: \"10\",\n depositEnabled: true,\n withdrawalEnabled: true,\n chainId: 1399811149,\n iconUrl: forgeNetworkURL(\"solana\"),\n },\n {\n name: \"BNB Smart Chain\",\n network: \"bsc\",\n withdrawFee: \"6.28\",\n withdrawMax: \"10000000000\",\n withdrawMin: \"12\",\n depositEnabled: true,\n withdrawalEnabled: true,\n chainId: 56,\n iconUrl: forgeNetworkURL(\"bsc\"),\n },\n {\n name: \"Near Protocol\",\n network: \"near\",\n withdrawFee: \"1\",\n withdrawMax: \"9999999\",\n withdrawMin: \"10\",\n depositEnabled: true,\n withdrawalEnabled: true,\n iconUrl: forgeNetworkURL(\"near\"),\n },\n {\n name: \"BNB Beacon Chain\",\n network: \"bnb\",\n withdrawFee: \"2.61\",\n withdrawMax: \"10000000000\",\n withdrawMin: \"5.22\",\n depositEnabled: true,\n withdrawalEnabled: true,\n iconUrl: forgeNetworkURL(\"bnb\"),\n },\n ],\n [API_ENDPOINT.ALL_FIAT_CURRENCIES]: EXISTING_FIAT_CURRENCIES,\n [API_ENDPOINT.TRADE_PATH]: [\n {\n from: \"NEAR\",\n to: \"BNB\",\n orderSide: \"sell\",\n pairSymbol: \"NEAR/BNB\",\n precision: {\n amount: 1e-7,\n price: 1e-7,\n },\n },\n {\n from: \"BNB\",\n to: \"SUI\",\n orderSide: \"sell\",\n pairSymbol: \"BNB/SUI\",\n precision: {\n amount: 1e-7,\n price: 1e-7,\n },\n },\n ],\n [API_ENDPOINT.PARTNERS]: [],\n [API_ENDPOINT.KRAKEN_WITHDRAWAL_NETWORKS_INFO]: [\n {\n asset: \"ZUSD\",\n method: \"Bank Frick (SWIFT) Europe\",\n network: null,\n minimum: \"100.00\",\n },\n {\n asset: \"ZEUR\",\n method: \"Bank Frick (SWIFT) Europe\",\n network: null,\n minimum: \"100.00\",\n },\n {\n asset: \"ZEUR\",\n method: \"Banking Circle (SEPA & SEPA Instant)\",\n network: null,\n minimum: \"2.00\",\n },\n {\n asset: \"ZGBP\",\n method: \"Bank Frick (SWIFT) Europe\",\n network: null,\n minimum: \"100.00\",\n },\n {\n asset: \"ZCAD\",\n method: \"Bank Frick (SWIFT) Europe\",\n network: null,\n minimum: \"100.00\",\n },\n {\n asset: \"ZJPY\",\n method: \"Bank Frick (SWIFT) Europe\",\n network: null,\n minimum: \"15000.00\",\n },\n {\n asset: \"CHF\",\n method: \"Bank Frick (SWIFT) Europe\",\n network: null,\n minimum: \"100.00\",\n },\n {\n asset: \"XXBT\",\n method: \"Bitcoin\",\n network: \"Bitcoin\",\n minimum: \"0.0004\",\n },\n {\n asset: \"XETH\",\n method: \"Ether\",\n network: \"Ethereum\",\n minimum: \"0.005\",\n },\n {\n asset: \"XETH\",\n method: \"Arbitrum One\",\n network: \"Arbitrum One\",\n minimum: \"0.0020\",\n },\n {\n asset: \"XETH\",\n method: \"Ethereum (Polygon)\",\n network: \"Polygon\",\n minimum: \"0.0020\",\n },\n {\n asset: \"XETH\",\n method: \"Arbitrum Nova\",\n network: \"Arbitrum Nova\",\n minimum: \"0.0020\",\n },\n {\n asset: \"XETH\",\n method: \"Optimism\",\n network: \"Optimism\",\n minimum: \"0.0020\",\n },\n {\n asset: \"XETH\",\n method: \"zkSync Era\",\n network: \"zkSync Era\",\n minimum: \"0.0031\",\n },\n {\n asset: \"XETC\",\n method: \"Ether Classic\",\n network: \"Ethereum Classic\",\n minimum: \"0.01\",\n },\n {\n asset: \"USDT\",\n method: \"Tether USD (ERC20)\",\n network: \"Ethereum\",\n minimum: \"16.00\",\n },\n {\n asset: \"USDT\",\n method: \"Tether USD (TRC20)\",\n network: \"Tron\",\n minimum: \"6.00\",\n },\n {\n asset: \"USDT\",\n method: \"Tether USD (SPL)\",\n network: \"Solana\",\n minimum: \"2.00\",\n },\n {\n asset: \"USDT\",\n method: \"Tether USD (Polygon)\",\n network: \"Polygon\",\n minimum: \"2.00\",\n },\n {\n asset: \"USDT\",\n method: \"Arbitrum One Network\",\n network: \"Arbitrum One\",\n minimum: \"4.00\",\n },\n {\n asset: \"USDT\",\n method: \"Optimism\",\n network: \"Optimism\",\n minimum: \"2.50\",\n },\n {\n asset: \"LINK\",\n method: \"Link\",\n network: \"Ethereum\",\n minimum: \"1.50\",\n },\n {\n asset: \"DOT\",\n method: \"Polkadot\",\n network: \"Polkadot\",\n minimum: \"1.05\",\n },\n {\n asset: \"AVAX\",\n method: \"Avalanche C-Chain\",\n network: \"Avalanche C-Chain\",\n minimum: \"0.5\",\n },\n ],\n [API_ENDPOINT.WALLET_TYPES_CONFIG]: WALLET_TYPES_TEST_CONFIG,\n [API_ENDPOINT.USER_REWARDS]: {\n storeUserId: \"1\",\n totalPoints: \"100\",\n activeMutlipliers: [],\n } as UserRewardState,\n [API_ENDPOINT.TRADE_PATH_BY_SUPPORTED_TOKENS]: {\n USDT: [\n {\n from: \"ALGO\",\n to: \"USDT\",\n orderSide: \"sell\",\n pairSymbol: \"ALGO/USDT\",\n precision: {\n amount: 1e-7,\n price: 1e-7,\n },\n },\n ],\n USDC: [\n {\n from: \"ALGO\",\n to: \"USDC\",\n orderSide: \"sell\",\n pairSymbol: \"ALGO/USDC\",\n precision: {\n amount: 1e-7,\n price: 1e-7,\n },\n },\n ],\n KNC: [\n {\n from: \"ALGO\",\n to: \"BTC\",\n orderSide: \"sell\",\n pairSymbol: \"ALGO/BTC\",\n precision: {\n amount: 1e-7,\n price: 1e-7,\n },\n },\n {\n from: \"BTC\",\n to: \"KNC\",\n orderSide: \"buy\",\n pairSymbol: \"KNC/BTC\",\n precision: {\n amount: 1e-7,\n price: 1e-7,\n },\n },\n ],\n DATA: [\n {\n from: \"ALGO\",\n to: \"BTC\",\n orderSide: \"sell\",\n pairSymbol: \"ALGO/BTC\",\n precision: {\n amount: 1e-7,\n price: 1e-7,\n },\n },\n {\n from: \"BTC\",\n to: \"DATA\",\n orderSide: \"buy\",\n pairSymbol: \"DATA/BTC\",\n precision: {\n amount: 1e-7,\n price: 1e-7,\n },\n },\n ],\n MATIC: [\n {\n from: \"ALGO\",\n to: \"BTC\",\n orderSide: \"sell\",\n pairSymbol: \"ALGO/BTC\",\n precision: {\n amount: 1e-7,\n price: 1e-7,\n },\n },\n {\n from: \"BTC\",\n to: \"MATIC\",\n orderSide: \"buy\",\n pairSymbol: \"MATIC/BTC\",\n precision: {\n amount: 1e-7,\n price: 1e-7,\n },\n },\n ],\n DAI: [\n {\n from: \"ALGO\",\n to: \"BTC\",\n orderSide: \"sell\",\n pairSymbol: \"ALGO/BTC\",\n precision: {\n amount: 1e-7,\n price: 1e-7,\n },\n },\n {\n from: \"BTC\",\n to: \"DAI\",\n orderSide: \"sell\",\n pairSymbol: \"BTC/DAI\",\n precision: {\n amount: 1e-7,\n price: 1e-7,\n },\n },\n ],\n SAND: [\n {\n from: \"ALGO\",\n to: \"BTC\",\n orderSide: \"sell\",\n pairSymbol: \"ALGO/BTC\",\n precision: {\n amount: 1e-7,\n price: 1e-7,\n },\n },\n {\n from: \"BTC\",\n to: \"SAND\",\n orderSide: \"buy\",\n pairSymbol: \"SAND/BTC\",\n precision: {\n amount: 1e-7,\n price: 1e-7,\n },\n },\n ],\n GRT: [\n {\n from: \"ALGO\",\n to: \"BTC\",\n orderSide: \"sell\",\n pairSymbol: \"ALGO/BTC\",\n precision: {\n amount: 1e-7,\n price: 1e-7,\n },\n },\n {\n from: \"BTC\",\n to: \"GRT\",\n orderSide: \"buy\",\n pairSymbol: \"GRT/BTC\",\n precision: {\n amount: 1e-7,\n price: 1e-7,\n },\n },\n ],\n QUICK: [\n {\n from: \"ALGO\",\n to: \"BTC\",\n orderSide: \"sell\",\n pairSymbol: \"ALGO/BTC\",\n precision: {\n amount: 1e-7,\n price: 1e-7,\n },\n },\n {\n from: \"BTC\",\n to: \"QUICK\",\n orderSide: \"buy\",\n pairSymbol: \"QUICK/BTC\",\n precision: {\n amount: 1e-7,\n price: 1e-7,\n },\n },\n ],\n PYR: [\n {\n from: \"ALGO\",\n to: \"BTC\",\n orderSide: \"sell\",\n pairSymbol: \"ALGO/BTC\",\n precision: {\n amount: 1e-7,\n price: 1e-7,\n },\n },\n {\n from: \"BTC\",\n to: \"PYR\",\n orderSide: \"buy\",\n pairSymbol: \"PYR/BTC\",\n precision: {\n amount: 1e-7,\n price: 1e-7,\n },\n },\n ],\n VOXEL: [\n {\n from: \"ALGO\",\n to: \"BTC\",\n orderSide: \"sell\",\n pairSymbol: \"ALGO/BTC\",\n precision: {\n amount: 1e-7,\n price: 1e-7,\n },\n },\n {\n from: \"BTC\",\n to: \"VOXEL\",\n orderSide: \"buy\",\n pairSymbol: \"VOXEL/BTC\",\n precision: {\n amount: 1e-7,\n price: 1e-7,\n },\n },\n ],\n GMT: [\n {\n from: \"ALGO\",\n to: \"BTC\",\n orderSide: \"sell\",\n pairSymbol: \"ALGO/BTC\",\n precision: {\n amount: 1e-7,\n price: 1e-7,\n },\n },\n {\n from: \"BTC\",\n to: \"GMT\",\n orderSide: \"buy\",\n pairSymbol: \"GMT/BTC\",\n precision: {\n amount: 1e-7,\n price: 1e-7,\n },\n },\n ],\n NEXO: [\n {\n from: \"ALGO\",\n to: \"BTC\",\n orderSide: \"sell\",\n pairSymbol: \"ALGO/BTC\",\n precision: {\n amount: 1e-7,\n price: 1e-7,\n },\n },\n {\n from: \"BTC\",\n to: \"NEXO\",\n orderSide: \"buy\",\n pairSymbol: \"NEXO/BTC\",\n precision: {\n amount: 1e-7,\n price: 1e-7,\n },\n },\n ],\n STG: [\n {\n from: \"ALGO\",\n to: \"BTC\",\n orderSide: \"sell\",\n pairSymbol: \"ALGO/BTC\",\n precision: {\n amount: 1e-7,\n price: 1e-7,\n },\n },\n {\n from: \"BTC\",\n to: \"STG\",\n orderSide: \"buy\",\n pairSymbol: \"STG/BTC\",\n precision: {\n amount: 1e-7,\n price: 1e-7,\n },\n },\n ],\n SYN: [\n {\n from: \"ALGO\",\n to: \"BTC\",\n orderSide: \"sell\",\n pairSymbol: \"ALGO/BTC\",\n precision: {\n amount: 1e-7,\n price: 1e-7,\n },\n },\n {\n from: \"BTC\",\n to: \"SYN\",\n orderSide: \"buy\",\n pairSymbol: \"SYN/BTC\",\n precision: {\n amount: 1e-7,\n price: 1e-7,\n },\n },\n ],\n VANRY: [\n {\n from: \"ALGO\",\n to: \"BTC\",\n orderSide: \"sell\",\n pairSymbol: \"ALGO/BTC\",\n precision: {\n amount: 1e-7,\n price: 1e-7,\n },\n },\n {\n from: \"BTC\",\n to: \"VANRY\",\n orderSide: \"buy\",\n pairSymbol: \"VANRY/BTC\",\n precision: {\n amount: 1e-7,\n price: 1e-7,\n },\n },\n ],\n AXL: [\n {\n from: \"ALGO\",\n to: \"BTC\",\n orderSide: \"sell\",\n pairSymbol: \"ALGO/BTC\",\n precision: {\n amount: 1e-7,\n price: 1e-7,\n },\n },\n {\n from: \"BTC\",\n to: \"AXL\",\n orderSide: \"buy\",\n pairSymbol: \"AXL/BTC\",\n precision: {\n amount: 1e-7,\n price: 1e-7,\n },\n },\n ],\n },\n [API_ENDPOINT.GET_DISCORD_INVITATION]: { invitationUrl: \"https://discord.gg/invite\" },\n [API_ENDPOINT.GET_REFERRAL_CODE]: { code: \"cede is cool\" },\n [API_ENDPOINT.USER_ACTIVE_REWARD_MULTIPLIERS]: {\n totalMultiplier: \"0\",\n nextEndDate: undefined,\n activeMultipliers: [],\n referrerMultipliers: [],\n referreeMultiplier: null,\n },\n [API_ENDPOINT.TRADE_LEADERBOARD]: [],\n [API_ENDPOINT.BALANCES]: {},\n [API_ENDPOINT.TOKENS_MAPPING]: [],\n [API_ENDPOINT.TOKENS_METADATA]: [],\n [API_ENDPOINT.CAMPAIGN_OPEN_ORDERS]: [],\n [API_ENDPOINT.ACCOUNTS_BY_USER_ID]: [],\n [API_ENDPOINT.ACCOUNTS]: {\n accountId: fakeAccount.id,\n exchangeId: fakeAccount.exchangeId,\n status: ConnectionStatus.ONLINE,\n },\n [API_ENDPOINT.HUB_STATS]: {\n totalVolumeTraded: 56986875.01883306,\n totalNumberOfTrades: 152715,\n totalRewardsReceived: 161584.5999999976,\n },\n [API_ENDPOINT.HUB_USER_STATS]: {\n totalVolumeTraded: 2753251.433132099,\n totalNumberOfTrades: 6004,\n totalRewardsReceived: 6949.129999999998,\n campaignsParticipated: 17,\n globalRank: 4,\n cedePoints: 1382963,\n },\n [API_ENDPOINT.HUB_GLOBAL_LEADERBOARD]: [\n {\n defiAddress: \"0xe6876Aa0282C3D050bf131C8f0Bb93330d256CAe\",\n totalVolume: 11450404.488217168,\n rank: 1,\n },\n {\n defiAddress: \"0x167dAA01aC96Ccf1D9aCE255cd7b20bc4A860895\",\n totalVolume: 7897119.457897761,\n rank: 2,\n },\n {\n defiAddress: \"0xf8575829fD42050997fB08093Db564037478be75\",\n totalVolume: 5385984.153300833,\n rank: 3,\n },\n {\n defiAddress: \"0xD8b1d18707c1886B8db18a599f1383B32f8658EA\",\n totalVolume: 2753251.4331320836,\n rank: 4,\n },\n {\n defiAddress: \"0x3D3eDC1865346bE5f3d92882332D0b73dc89d4ac\",\n totalVolume: 2642524.220280274,\n rank: 5,\n },\n {\n defiAddress: \"0xb1ec72c4D4782053fc9ebEDb02838CEA0d8664D2\",\n totalVolume: 2204819.4136017733,\n rank: 6,\n },\n {\n defiAddress: \"0x1aa3CFfa556aEe20C08Ce6112a35Eb94f9fF325A\",\n totalVolume: 1982963.409645091,\n rank: 7,\n },\n {\n defiAddress: \"0x23e7472fC657Af6F9d4f9D6aeaD068B14a9D4327\",\n totalVolume: 1817895.0173047222,\n rank: 8,\n },\n {\n defiAddress: \"0x6692b4eA56c872e1A511bB23d460539F6b3E71B8\",\n totalVolume: 1397026.8520959024,\n rank: 9,\n },\n {\n defiAddress: \"0x21c11Fe94D7C9b82F1F18b6c8D16dAAedA2c6d70\",\n totalVolume: 1395567.420154534,\n rank: 10,\n },\n ],\n};\n","'use strict';\n\nexport default function bind(fn, thisArg) {\n return function wrap() {\n return fn.apply(thisArg, arguments);\n };\n}\n","'use strict';\n\nimport bind from './helpers/bind.js';\n\n// utils is a library of generic helper functions non-specific to axios\n\nconst {toString} = Object.prototype;\nconst {getPrototypeOf} = Object;\n\nconst kindOf = (cache => thing => {\n const str = toString.call(thing);\n return cache[str] || (cache[str] = str.slice(8, -1).toLowerCase());\n})(Object.create(null));\n\nconst kindOfTest = (type) => {\n type = type.toLowerCase();\n return (thing) => kindOf(thing) === type\n}\n\nconst typeOfTest = type => thing => typeof thing === type;\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n *\n * @returns {boolean} True if value is an Array, otherwise false\n */\nconst {isArray} = Array;\n\n/**\n * Determine if a value is undefined\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nconst isUndefined = typeOfTest('undefined');\n\n/**\n * Determine if a value is a Buffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Buffer, otherwise false\n */\nfunction isBuffer(val) {\n return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor)\n && isFunction(val.constructor.isBuffer) && val.constructor.isBuffer(val);\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nconst isArrayBuffer = kindOfTest('ArrayBuffer');\n\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n let result;\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n result = ArrayBuffer.isView(val);\n } else {\n result = (val) && (val.buffer) && (isArrayBuffer(val.buffer));\n }\n return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a String, otherwise false\n */\nconst isString = typeOfTest('string');\n\n/**\n * Determine if a value is a Function\n *\n * @param {*} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nconst isFunction = typeOfTest('function');\n\n/**\n * Determine if a value is a Number\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Number, otherwise false\n */\nconst isNumber = typeOfTest('number');\n\n/**\n * Determine if a value is an Object\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an Object, otherwise false\n */\nconst isObject = (thing) => thing !== null && typeof thing === 'object';\n\n/**\n * Determine if a value is a Boolean\n *\n * @param {*} thing The value to test\n * @returns {boolean} True if value is a Boolean, otherwise false\n */\nconst isBoolean = thing => thing === true || thing === false;\n\n/**\n * Determine if a value is a plain Object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a plain Object, otherwise false\n */\nconst isPlainObject = (val) => {\n if (kindOf(val) !== 'object') {\n return false;\n }\n\n const prototype = getPrototypeOf(val);\n return (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(Symbol.toStringTag in val) && !(Symbol.iterator in val);\n}\n\n/**\n * Determine if a value is a Date\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Date, otherwise false\n */\nconst isDate = kindOfTest('Date');\n\n/**\n * Determine if a value is a File\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFile = kindOfTest('File');\n\n/**\n * Determine if a value is a Blob\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nconst isBlob = kindOfTest('Blob');\n\n/**\n * Determine if a value is a FileList\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFileList = kindOfTest('FileList');\n\n/**\n * Determine if a value is a Stream\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nconst isStream = (val) => isObject(val) && isFunction(val.pipe);\n\n/**\n * Determine if a value is a FormData\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nconst isFormData = (thing) => {\n let kind;\n return thing && (\n (typeof FormData === 'function' && thing instanceof FormData) || (\n isFunction(thing.append) && (\n (kind = kindOf(thing)) === 'formdata' ||\n // detect form-data instance\n (kind === 'object' && isFunction(thing.toString) && thing.toString() === '[object FormData]')\n )\n )\n )\n}\n\n/**\n * Determine if a value is a URLSearchParams object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nconst isURLSearchParams = kindOfTest('URLSearchParams');\n\nconst [isReadableStream, isRequest, isResponse, isHeaders] = ['ReadableStream', 'Request', 'Response', 'Headers'].map(kindOfTest);\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n *\n * @returns {String} The String freed of excess whitespace\n */\nconst trim = (str) => str.trim ?\n str.trim() : str.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, '');\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n *\n * @param {Boolean} [allOwnKeys = false]\n * @returns {any}\n */\nfunction forEach(obj, fn, {allOwnKeys = false} = {}) {\n // Don't bother if no value provided\n if (obj === null || typeof obj === 'undefined') {\n return;\n }\n\n let i;\n let l;\n\n // Force an array if not already something iterable\n if (typeof obj !== 'object') {\n /*eslint no-param-reassign:0*/\n obj = [obj];\n }\n\n if (isArray(obj)) {\n // Iterate over array values\n for (i = 0, l = obj.length; i < l; i++) {\n fn.call(null, obj[i], i, obj);\n }\n } else {\n // Iterate over object keys\n const keys = allOwnKeys ? Object.getOwnPropertyNames(obj) : Object.keys(obj);\n const len = keys.length;\n let key;\n\n for (i = 0; i < len; i++) {\n key = keys[i];\n fn.call(null, obj[key], key, obj);\n }\n }\n}\n\nfunction findKey(obj, key) {\n key = key.toLowerCase();\n const keys = Object.keys(obj);\n let i = keys.length;\n let _key;\n while (i-- > 0) {\n _key = keys[i];\n if (key === _key.toLowerCase()) {\n return _key;\n }\n }\n return null;\n}\n\nconst _global = (() => {\n /*eslint no-undef:0*/\n if (typeof globalThis !== \"undefined\") return globalThis;\n return typeof self !== \"undefined\" ? self : (typeof window !== 'undefined' ? window : global)\n})();\n\nconst isContextDefined = (context) => !isUndefined(context) && context !== _global;\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n *\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/* obj1, obj2, obj3, ... */) {\n const {caseless} = isContextDefined(this) && this || {};\n const result = {};\n const assignValue = (val, key) => {\n const targetKey = caseless && findKey(result, key) || key;\n if (isPlainObject(result[targetKey]) && isPlainObject(val)) {\n result[targetKey] = merge(result[targetKey], val);\n } else if (isPlainObject(val)) {\n result[targetKey] = merge({}, val);\n } else if (isArray(val)) {\n result[targetKey] = val.slice();\n } else {\n result[targetKey] = val;\n }\n }\n\n for (let i = 0, l = arguments.length; i < l; i++) {\n arguments[i] && forEach(arguments[i], assignValue);\n }\n return result;\n}\n\n/**\n * Extends object a by mutably adding to it the properties of object b.\n *\n * @param {Object} a The object to be extended\n * @param {Object} b The object to copy properties from\n * @param {Object} thisArg The object to bind function to\n *\n * @param {Boolean} [allOwnKeys]\n * @returns {Object} The resulting value of object a\n */\nconst extend = (a, b, thisArg, {allOwnKeys}= {}) => {\n forEach(b, (val, key) => {\n if (thisArg && isFunction(val)) {\n a[key] = bind(val, thisArg);\n } else {\n a[key] = val;\n }\n }, {allOwnKeys});\n return a;\n}\n\n/**\n * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)\n *\n * @param {string} content with BOM\n *\n * @returns {string} content value without BOM\n */\nconst stripBOM = (content) => {\n if (content.charCodeAt(0) === 0xFEFF) {\n content = content.slice(1);\n }\n return content;\n}\n\n/**\n * Inherit the prototype methods from one constructor into another\n * @param {function} constructor\n * @param {function} superConstructor\n * @param {object} [props]\n * @param {object} [descriptors]\n *\n * @returns {void}\n */\nconst inherits = (constructor, superConstructor, props, descriptors) => {\n constructor.prototype = Object.create(superConstructor.prototype, descriptors);\n constructor.prototype.constructor = constructor;\n Object.defineProperty(constructor, 'super', {\n value: superConstructor.prototype\n });\n props && Object.assign(constructor.prototype, props);\n}\n\n/**\n * Resolve object with deep prototype chain to a flat object\n * @param {Object} sourceObj source object\n * @param {Object} [destObj]\n * @param {Function|Boolean} [filter]\n * @param {Function} [propFilter]\n *\n * @returns {Object}\n */\nconst toFlatObject = (sourceObj, destObj, filter, propFilter) => {\n let props;\n let i;\n let prop;\n const merged = {};\n\n destObj = destObj || {};\n // eslint-disable-next-line no-eq-null,eqeqeq\n if (sourceObj == null) return destObj;\n\n do {\n props = Object.getOwnPropertyNames(sourceObj);\n i = props.length;\n while (i-- > 0) {\n prop = props[i];\n if ((!propFilter || propFilter(prop, sourceObj, destObj)) && !merged[prop]) {\n destObj[prop] = sourceObj[prop];\n merged[prop] = true;\n }\n }\n sourceObj = filter !== false && getPrototypeOf(sourceObj);\n } while (sourceObj && (!filter || filter(sourceObj, destObj)) && sourceObj !== Object.prototype);\n\n return destObj;\n}\n\n/**\n * Determines whether a string ends with the characters of a specified string\n *\n * @param {String} str\n * @param {String} searchString\n * @param {Number} [position= 0]\n *\n * @returns {boolean}\n */\nconst endsWith = (str, searchString, position) => {\n str = String(str);\n if (position === undefined || position > str.length) {\n position = str.length;\n }\n position -= searchString.length;\n const lastIndex = str.indexOf(searchString, position);\n return lastIndex !== -1 && lastIndex === position;\n}\n\n\n/**\n * Returns new array from array like object or null if failed\n *\n * @param {*} [thing]\n *\n * @returns {?Array}\n */\nconst toArray = (thing) => {\n if (!thing) return null;\n if (isArray(thing)) return thing;\n let i = thing.length;\n if (!isNumber(i)) return null;\n const arr = new Array(i);\n while (i-- > 0) {\n arr[i] = thing[i];\n }\n return arr;\n}\n\n/**\n * Checking if the Uint8Array exists and if it does, it returns a function that checks if the\n * thing passed in is an instance of Uint8Array\n *\n * @param {TypedArray}\n *\n * @returns {Array}\n */\n// eslint-disable-next-line func-names\nconst isTypedArray = (TypedArray => {\n // eslint-disable-next-line func-names\n return thing => {\n return TypedArray && thing instanceof TypedArray;\n };\n})(typeof Uint8Array !== 'undefined' && getPrototypeOf(Uint8Array));\n\n/**\n * For each entry in the object, call the function with the key and value.\n *\n * @param {Object<any, any>} obj - The object to iterate over.\n * @param {Function} fn - The function to call for each entry.\n *\n * @returns {void}\n */\nconst forEachEntry = (obj, fn) => {\n const generator = obj && obj[Symbol.iterator];\n\n const iterator = generator.call(obj);\n\n let result;\n\n while ((result = iterator.next()) && !result.done) {\n const pair = result.value;\n fn.call(obj, pair[0], pair[1]);\n }\n}\n\n/**\n * It takes a regular expression and a string, and returns an array of all the matches\n *\n * @param {string} regExp - The regular expression to match against.\n * @param {string} str - The string to search.\n *\n * @returns {Array<boolean>}\n */\nconst matchAll = (regExp, str) => {\n let matches;\n const arr = [];\n\n while ((matches = regExp.exec(str)) !== null) {\n arr.push(matches);\n }\n\n return arr;\n}\n\n/* Checking if the kindOfTest function returns true when passed an HTMLFormElement. */\nconst isHTMLForm = kindOfTest('HTMLFormElement');\n\nconst toCamelCase = str => {\n return str.toLowerCase().replace(/[-_\\s]([a-z\\d])(\\w*)/g,\n function replacer(m, p1, p2) {\n return p1.toUpperCase() + p2;\n }\n );\n};\n\n/* Creating a function that will check if an object has a property. */\nconst hasOwnProperty = (({hasOwnProperty}) => (obj, prop) => hasOwnProperty.call(obj, prop))(Object.prototype);\n\n/**\n * Determine if a value is a RegExp object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a RegExp object, otherwise false\n */\nconst isRegExp = kindOfTest('RegExp');\n\nconst reduceDescriptors = (obj, reducer) => {\n const descriptors = Object.getOwnPropertyDescriptors(obj);\n const reducedDescriptors = {};\n\n forEach(descriptors, (descriptor, name) => {\n let ret;\n if ((ret = reducer(descriptor, name, obj)) !== false) {\n reducedDescriptors[name] = ret || descriptor;\n }\n });\n\n Object.defineProperties(obj, reducedDescriptors);\n}\n\n/**\n * Makes all methods read-only\n * @param {Object} obj\n */\n\nconst freezeMethods = (obj) => {\n reduceDescriptors(obj, (descriptor, name) => {\n // skip restricted props in strict mode\n if (isFunction(obj) && ['arguments', 'caller', 'callee'].indexOf(name) !== -1) {\n return false;\n }\n\n const value = obj[name];\n\n if (!isFunction(value)) return;\n\n descriptor.enumerable = false;\n\n if ('writable' in descriptor) {\n descriptor.writable = false;\n return;\n }\n\n if (!descriptor.set) {\n descriptor.set = () => {\n throw Error('Can not rewrite read-only method \\'' + name + '\\'');\n };\n }\n });\n}\n\nconst toObjectSet = (arrayOrString, delimiter) => {\n const obj = {};\n\n const define = (arr) => {\n arr.forEach(value => {\n obj[value] = true;\n });\n }\n\n isArray(arrayOrString) ? define(arrayOrString) : define(String(arrayOrString).split(delimiter));\n\n return obj;\n}\n\nconst noop = () => {}\n\nconst toFiniteNumber = (value, defaultValue) => {\n return value != null && Number.isFinite(value = +value) ? value : defaultValue;\n}\n\nconst ALPHA = 'abcdefghijklmnopqrstuvwxyz'\n\nconst DIGIT = '0123456789';\n\nconst ALPHABET = {\n DIGIT,\n ALPHA,\n ALPHA_DIGIT: ALPHA + ALPHA.toUpperCase() + DIGIT\n}\n\nconst generateString = (size = 16, alphabet = ALPHABET.ALPHA_DIGIT) => {\n let str = '';\n const {length} = alphabet;\n while (size--) {\n str += alphabet[Math.random() * length|0]\n }\n\n return str;\n}\n\n/**\n * If the thing is a FormData object, return true, otherwise return false.\n *\n * @param {unknown} thing - The thing to check.\n *\n * @returns {boolean}\n */\nfunction isSpecCompliantForm(thing) {\n return !!(thing && isFunction(thing.append) && thing[Symbol.toStringTag] === 'FormData' && thing[Symbol.iterator]);\n}\n\nconst toJSONObject = (obj) => {\n const stack = new Array(10);\n\n const visit = (source, i) => {\n\n if (isObject(source)) {\n if (stack.indexOf(source) >= 0) {\n return;\n }\n\n if(!('toJSON' in source)) {\n stack[i] = source;\n const target = isArray(source) ? [] : {};\n\n forEach(source, (value, key) => {\n const reducedValue = visit(value, i + 1);\n !isUndefined(reducedValue) && (target[key] = reducedValue);\n });\n\n stack[i] = undefined;\n\n return target;\n }\n }\n\n return source;\n }\n\n return visit(obj, 0);\n}\n\nconst isAsyncFn = kindOfTest('AsyncFunction');\n\nconst isThenable = (thing) =>\n thing && (isObject(thing) || isFunction(thing)) && isFunction(thing.then) && isFunction(thing.catch);\n\n// original code\n// https://github.com/DigitalBrainJS/AxiosPromise/blob/16deab13710ec09779922131f3fa5954320f83ab/lib/utils.js#L11-L34\n\nconst _setImmediate = ((setImmediateSupported, postMessageSupported) => {\n if (setImmediateSupported) {\n return setImmediate;\n }\n\n return postMessageSupported ? ((token, callbacks) => {\n _global.addEventListener(\"message\", ({source, data}) => {\n if (source === _global && data === token) {\n callbacks.length && callbacks.shift()();\n }\n }, false);\n\n return (cb) => {\n callbacks.push(cb);\n _global.postMessage(token, \"*\");\n }\n })(`axios@${Math.random()}`, []) : (cb) => setTimeout(cb);\n})(\n typeof setImmediate === 'function',\n isFunction(_global.postMessage)\n);\n\nconst asap = typeof queueMicrotask !== 'undefined' ?\n queueMicrotask.bind(_global) : ( typeof process !== 'undefined' && process.nextTick || _setImmediate);\n\n// *********************\n\nexport default {\n isArray,\n isArrayBuffer,\n isBuffer,\n isFormData,\n isArrayBufferView,\n isString,\n isNumber,\n isBoolean,\n isObject,\n isPlainObject,\n isReadableStream,\n isRequest,\n isResponse,\n isHeaders,\n isUndefined,\n isDate,\n isFile,\n isBlob,\n isRegExp,\n isFunction,\n isStream,\n isURLSearchParams,\n isTypedArray,\n isFileList,\n forEach,\n merge,\n extend,\n trim,\n stripBOM,\n inherits,\n toFlatObject,\n kindOf,\n kindOfTest,\n endsWith,\n toArray,\n forEachEntry,\n matchAll,\n isHTMLForm,\n hasOwnProperty,\n hasOwnProp: hasOwnProperty, // an alias to avoid ESLint no-prototype-builtins detection\n reduceDescriptors,\n freezeMethods,\n toObjectSet,\n toCamelCase,\n noop,\n toFiniteNumber,\n findKey,\n global: _global,\n isContextDefined,\n ALPHABET,\n generateString,\n isSpecCompliantForm,\n toJSONObject,\n isAsyncFn,\n isThenable,\n setImmediate: _setImmediate,\n asap\n};\n","'use strict';\n\nimport utils from '../utils.js';\n\n/**\n * Create an Error with the specified message, config, error code, request and response.\n *\n * @param {string} message The error message.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [config] The config.\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n *\n * @returns {Error} The created error.\n */\nfunction AxiosError(message, code, config, request, response) {\n Error.call(this);\n\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n } else {\n this.stack = (new Error()).stack;\n }\n\n this.message = message;\n this.name = 'AxiosError';\n code && (this.code = code);\n config && (this.config = config);\n request && (this.request = request);\n response && (this.response = response);\n}\n\nutils.inherits(AxiosError, Error, {\n toJSON: function toJSON() {\n return {\n // Standard\n message: this.message,\n name: this.name,\n // Microsoft\n description: this.description,\n number: this.number,\n // Mozilla\n fileName: this.fileName,\n lineNumber: this.lineNumber,\n columnNumber: this.columnNumber,\n stack: this.stack,\n // Axios\n config: utils.toJSONObject(this.config),\n code: this.code,\n status: this.response && this.response.status ? this.response.status : null\n };\n }\n});\n\nconst prototype = AxiosError.prototype;\nconst descriptors = {};\n\n[\n 'ERR_BAD_OPTION_VALUE',\n 'ERR_BAD_OPTION',\n 'ECONNABORTED',\n 'ETIMEDOUT',\n 'ERR_NETWORK',\n 'ERR_FR_TOO_MANY_REDIRECTS',\n 'ERR_DEPRECATED',\n 'ERR_BAD_RESPONSE',\n 'ERR_BAD_REQUEST',\n 'ERR_CANCELED',\n 'ERR_NOT_SUPPORT',\n 'ERR_INVALID_URL'\n// eslint-disable-next-line func-names\n].forEach(code => {\n descriptors[code] = {value: code};\n});\n\nObject.defineProperties(AxiosError, descriptors);\nObject.defineProperty(prototype, 'isAxiosError', {value: true});\n\n// eslint-disable-next-line func-names\nAxiosError.from = (error, code, config, request, response, customProps) => {\n const axiosError = Object.create(prototype);\n\n utils.toFlatObject(error, axiosError, function filter(obj) {\n return obj !== Error.prototype;\n }, prop => {\n return prop !== 'isAxiosError';\n });\n\n AxiosError.call(axiosError, error.message, code, config, request, response);\n\n axiosError.cause = error;\n\n axiosError.name = error.name;\n\n customProps && Object.assign(axiosError, customProps);\n\n return axiosError;\n};\n\nexport default AxiosError;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosError from '../core/AxiosError.js';\n// temporary hotfix to avoid circular references until AxiosURLSearchParams is refactored\nimport PlatformFormData from '../platform/node/classes/FormData.js';\n\n/**\n * Determines if the given thing is a array or js object.\n *\n * @param {string} thing - The object or array to be visited.\n *\n * @returns {boolean}\n */\nfunction isVisitable(thing) {\n return utils.isPlainObject(thing) || utils.isArray(thing);\n}\n\n/**\n * It removes the brackets from the end of a string\n *\n * @param {string} key - The key of the parameter.\n *\n * @returns {string} the key without the brackets.\n */\nfunction removeBrackets(key) {\n return utils.endsWith(key, '[]') ? key.slice(0, -2) : key;\n}\n\n/**\n * It takes a path, a key, and a boolean, and returns a string\n *\n * @param {string} path - The path to the current key.\n * @param {string} key - The key of the current object being iterated over.\n * @param {string} dots - If true, the key will be rendered with dots instead of brackets.\n *\n * @returns {string} The path to the current key.\n */\nfunction renderKey(path, key, dots) {\n if (!path) return key;\n return path.concat(key).map(function each(token, i) {\n // eslint-disable-next-line no-param-reassign\n token = removeBrackets(token);\n return !dots && i ? '[' + token + ']' : token;\n }).join(dots ? '.' : '');\n}\n\n/**\n * If the array is an array and none of its elements are visitable, then it's a flat array.\n *\n * @param {Array<any>} arr - The array to check\n *\n * @returns {boolean}\n */\nfunction isFlatArray(arr) {\n return utils.isArray(arr) && !arr.some(isVisitable);\n}\n\nconst predicates = utils.toFlatObject(utils, {}, null, function filter(prop) {\n return /^is[A-Z]/.test(prop);\n});\n\n/**\n * Convert a data object to FormData\n *\n * @param {Object} obj\n * @param {?Object} [formData]\n * @param {?Object} [options]\n * @param {Function} [options.visitor]\n * @param {Boolean} [options.metaTokens = true]\n * @param {Boolean} [options.dots = false]\n * @param {?Boolean} [options.indexes = false]\n *\n * @returns {Object}\n **/\n\n/**\n * It converts an object into a FormData object\n *\n * @param {Object<any, any>} obj - The object to convert to form data.\n * @param {string} formData - The FormData object to append to.\n * @param {Object<string, any>} options\n *\n * @returns\n */\nfunction toFormData(obj, formData, options) {\n if (!utils.isObject(obj)) {\n throw new TypeError('target must be an object');\n }\n\n // eslint-disable-next-line no-param-reassign\n formData = formData || new (PlatformFormData || FormData)();\n\n // eslint-disable-next-line no-param-reassign\n options = utils.toFlatObject(options, {\n metaTokens: true,\n dots: false,\n indexes: false\n }, false, function defined(option, source) {\n // eslint-disable-next-line no-eq-null,eqeqeq\n return !utils.isUndefined(source[option]);\n });\n\n const metaTokens = options.metaTokens;\n // eslint-disable-next-line no-use-before-define\n const visitor = options.visitor || defaultVisitor;\n const dots = options.dots;\n const indexes = options.indexes;\n const _Blob = options.Blob || typeof Blob !== 'undefined' && Blob;\n const useBlob = _Blob && utils.isSpecCompliantForm(formData);\n\n if (!utils.isFunction(visitor)) {\n throw new TypeError('visitor must be a function');\n }\n\n function convertValue(value) {\n if (value === null) return '';\n\n if (utils.isDate(value)) {\n return value.toISOString();\n }\n\n if (!useBlob && utils.isBlob(value)) {\n throw new AxiosError('Blob is not supported. Use a Buffer instead.');\n }\n\n if (utils.isArrayBuffer(value) || utils.isTypedArray(value)) {\n return useBlob && typeof Blob === 'function' ? new Blob([value]) : Buffer.from(value);\n }\n\n return value;\n }\n\n /**\n * Default visitor.\n *\n * @param {*} value\n * @param {String|Number} key\n * @param {Array<String|Number>} path\n * @this {FormData}\n *\n * @returns {boolean} return true to visit the each prop of the value recursively\n */\n function defaultVisitor(value, key, path) {\n let arr = value;\n\n if (value && !path && typeof value === 'object') {\n if (utils.endsWith(key, '{}')) {\n // eslint-disable-next-line no-param-reassign\n key = metaTokens ? key : key.slice(0, -2);\n // eslint-disable-next-line no-param-reassign\n value = JSON.stringify(value);\n } else if (\n (utils.isArray(value) && isFlatArray(value)) ||\n ((utils.isFileList(value) || utils.endsWith(key, '[]')) && (arr = utils.toArray(value))\n )) {\n // eslint-disable-next-line no-param-reassign\n key = removeBrackets(key);\n\n arr.forEach(function each(el, index) {\n !(utils.isUndefined(el) || el === null) && formData.append(\n // eslint-disable-next-line no-nested-ternary\n indexes === true ? renderKey([key], index, dots) : (indexes === null ? key : key + '[]'),\n convertValue(el)\n );\n });\n return false;\n }\n }\n\n if (isVisitable(value)) {\n return true;\n }\n\n formData.append(renderKey(path, key, dots), convertValue(value));\n\n return false;\n }\n\n const stack = [];\n\n const exposedHelpers = Object.assign(predicates, {\n defaultVisitor,\n convertValue,\n isVisitable\n });\n\n function build(value, path) {\n if (utils.isUndefined(value)) return;\n\n if (stack.indexOf(value) !== -1) {\n throw Error('Circular reference detected in ' + path.join('.'));\n }\n\n stack.push(value);\n\n utils.forEach(value, function each(el, key) {\n const result = !(utils.isUndefined(el) || el === null) && visitor.call(\n formData, el, utils.isString(key) ? key.trim() : key, path, exposedHelpers\n );\n\n if (result === true) {\n build(el, path ? path.concat(key) : [key]);\n }\n });\n\n stack.pop();\n }\n\n if (!utils.isObject(obj)) {\n throw new TypeError('data must be an object');\n }\n\n build(obj);\n\n return formData;\n}\n\nexport default toFormData;\n","'use strict';\n\nimport toFormData from './toFormData.js';\n\n/**\n * It encodes a string by replacing all characters that are not in the unreserved set with\n * their percent-encoded equivalents\n *\n * @param {string} str - The string to encode.\n *\n * @returns {string} The encoded string.\n */\nfunction encode(str) {\n const charMap = {\n '!': '%21',\n \"'\": '%27',\n '(': '%28',\n ')': '%29',\n '~': '%7E',\n '%20': '+',\n '%00': '\\x00'\n };\n return encodeURIComponent(str).replace(/[!'()~]|%20|%00/g, function replacer(match) {\n return charMap[match];\n });\n}\n\n/**\n * It takes a params object and converts it to a FormData object\n *\n * @param {Object<string, any>} params - The parameters to be converted to a FormData object.\n * @param {Object<string, any>} options - The options object passed to the Axios constructor.\n *\n * @returns {void}\n */\nfunction AxiosURLSearchParams(params, options) {\n this._pairs = [];\n\n params && toFormData(params, this, options);\n}\n\nconst prototype = AxiosURLSearchParams.prototype;\n\nprototype.append = function append(name, value) {\n this._pairs.push([name, value]);\n};\n\nprototype.toString = function toString(encoder) {\n const _encode = encoder ? function(value) {\n return encoder.call(this, value, encode);\n } : encode;\n\n return this._pairs.map(function each(pair) {\n return _encode(pair[0]) + '=' + _encode(pair[1]);\n }, '').join('&');\n};\n\nexport default AxiosURLSearchParams;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosURLSearchParams from '../helpers/AxiosURLSearchParams.js';\n\n/**\n * It replaces all instances of the characters `:`, `$`, `,`, `+`, `[`, and `]` with their\n * URI encoded counterparts\n *\n * @param {string} val The value to be encoded.\n *\n * @returns {string} The encoded value.\n */\nfunction encode(val) {\n return encodeURIComponent(val).\n replace(/%3A/gi, ':').\n replace(/%24/g, '$').\n replace(/%2C/gi, ',').\n replace(/%20/g, '+').\n replace(/%5B/gi, '[').\n replace(/%5D/gi, ']');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @param {?object} options\n *\n * @returns {string} The formatted url\n */\nexport default function buildURL(url, params, options) {\n /*eslint no-param-reassign:0*/\n if (!params) {\n return url;\n }\n \n const _encode = options && options.encode || encode;\n\n const serializeFn = options && options.serialize;\n\n let serializedParams;\n\n if (serializeFn) {\n serializedParams = serializeFn(params, options);\n } else {\n serializedParams = utils.isURLSearchParams(params) ?\n params.toString() :\n new AxiosURLSearchParams(params, options).toString(_encode);\n }\n\n if (serializedParams) {\n const hashmarkIndex = url.indexOf(\"#\");\n\n if (hashmarkIndex !== -1) {\n url = url.slice(0, hashmarkIndex);\n }\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n }\n\n return url;\n}\n","'use strict';\n\nimport utils from './../utils.js';\n\nclass InterceptorManager {\n constructor() {\n this.handlers = [];\n }\n\n /**\n * Add a new interceptor to the stack\n *\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\n * @param {Function} rejected The function to handle `reject` for a `Promise`\n *\n * @return {Number} An ID used to remove interceptor later\n */\n use(fulfilled, rejected, options) {\n this.handlers.push({\n fulfilled,\n rejected,\n synchronous: options ? options.synchronous : false,\n runWhen: options ? options.runWhen : null\n });\n return this.handlers.length - 1;\n }\n\n /**\n * Remove an interceptor from the stack\n *\n * @param {Number} id The ID that was returned by `use`\n *\n * @returns {Boolean} `true` if the interceptor was removed, `false` otherwise\n */\n eject(id) {\n if (this.handlers[id]) {\n this.handlers[id] = null;\n }\n }\n\n /**\n * Clear all interceptors from the stack\n *\n * @returns {void}\n */\n clear() {\n if (this.handlers) {\n this.handlers = [];\n }\n }\n\n /**\n * Iterate over all the registered interceptors\n *\n * This method is particularly useful for skipping over any\n * interceptors that may have become `null` calling `eject`.\n *\n * @param {Function} fn The function to call for each interceptor\n *\n * @returns {void}\n */\n forEach(fn) {\n utils.forEach(this.handlers, function forEachHandler(h) {\n if (h !== null) {\n fn(h);\n }\n });\n }\n}\n\nexport default InterceptorManager;\n","'use strict';\n\nexport default {\n silentJSONParsing: true,\n forcedJSONParsing: true,\n clarifyTimeoutError: false\n};\n","import URLSearchParams from './classes/URLSearchParams.js'\nimport FormData from './classes/FormData.js'\nimport Blob from './classes/Blob.js'\n\nexport default {\n isBrowser: true,\n classes: {\n URLSearchParams,\n FormData,\n Blob\n },\n protocols: ['http', 'https', 'file', 'blob', 'url', 'data']\n};\n","'use strict';\n\nimport AxiosURLSearchParams from '../../../helpers/AxiosURLSearchParams.js';\nexport default typeof URLSearchParams !== 'undefined' ? URLSearchParams : AxiosURLSearchParams;\n","'use strict';\n\nexport default typeof FormData !== 'undefined' ? FormData : null;\n","'use strict'\n\nexport default typeof Blob !== 'undefined' ? Blob : null\n","const hasBrowserEnv = typeof window !== 'undefined' && typeof document !== 'undefined';\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n * typeof window -> undefined\n * typeof document -> undefined\n *\n * react-native:\n * navigator.product -> 'ReactNative'\n * nativescript\n * navigator.product -> 'NativeScript' or 'NS'\n *\n * @returns {boolean}\n */\nconst hasStandardBrowserEnv = (\n (product) => {\n return hasBrowserEnv && ['ReactNative', 'NativeScript', 'NS'].indexOf(product) < 0\n })(typeof navigator !== 'undefined' && navigator.product);\n\n/**\n * Determine if we're running in a standard browser webWorker environment\n *\n * Although the `isStandardBrowserEnv` method indicates that\n * `allows axios to run in a web worker`, the WebWorker will still be\n * filtered out due to its judgment standard\n * `typeof window !== 'undefined' && typeof document !== 'undefined'`.\n * This leads to a problem when axios post `FormData` in webWorker\n */\nconst hasStandardBrowserWebWorkerEnv = (() => {\n return (\n typeof WorkerGlobalScope !== 'undefined' &&\n // eslint-disable-next-line no-undef\n self instanceof WorkerGlobalScope &&\n typeof self.importScripts === 'function'\n );\n})();\n\nconst origin = hasBrowserEnv && window.location.href || 'http://localhost';\n\nexport {\n hasBrowserEnv,\n hasStandardBrowserWebWorkerEnv,\n hasStandardBrowserEnv,\n origin\n}\n","import platform from './node/index.js';\nimport * as utils from './common/utils.js';\n\nexport default {\n ...utils,\n ...platform\n}\n","'use strict';\n\nimport utils from '../utils.js';\n\n/**\n * It takes a string like `foo[x][y][z]` and returns an array like `['foo', 'x', 'y', 'z']\n *\n * @param {string} name - The name of the property to get.\n *\n * @returns An array of strings.\n */\nfunction parsePropPath(name) {\n // foo[x][y][z]\n // foo.x.y.z\n // foo-x-y-z\n // foo x y z\n return utils.matchAll(/\\w+|\\[(\\w*)]/g, name).map(match => {\n return match[0] === '[]' ? '' : match[1] || match[0];\n });\n}\n\n/**\n * Convert an array to an object.\n *\n * @param {Array<any>} arr - The array to convert to an object.\n *\n * @returns An object with the same keys and values as the array.\n */\nfunction arrayToObject(arr) {\n const obj = {};\n const keys = Object.keys(arr);\n let i;\n const len = keys.length;\n let key;\n for (i = 0; i < len; i++) {\n key = keys[i];\n obj[key] = arr[key];\n }\n return obj;\n}\n\n/**\n * It takes a FormData object and returns a JavaScript object\n *\n * @param {string} formData The FormData object to convert to JSON.\n *\n * @returns {Object<string, any> | null} The converted object.\n */\nfunction formDataToJSON(formData) {\n function buildPath(path, value, target, index) {\n let name = path[index++];\n\n if (name === '__proto__') return true;\n\n const isNumericKey = Number.isFinite(+name);\n const isLast = index >= path.length;\n name = !name && utils.isArray(target) ? target.length : name;\n\n if (isLast) {\n if (utils.hasOwnProp(target, name)) {\n target[name] = [target[name], value];\n } else {\n target[name] = value;\n }\n\n return !isNumericKey;\n }\n\n if (!target[name] || !utils.isObject(target[name])) {\n target[name] = [];\n }\n\n const result = buildPath(path, value, target[name], index);\n\n if (result && utils.isArray(target[name])) {\n target[name] = arrayToObject(target[name]);\n }\n\n return !isNumericKey;\n }\n\n if (utils.isFormData(formData) && utils.isFunction(formData.entries)) {\n const obj = {};\n\n utils.forEachEntry(formData, (name, value) => {\n buildPath(parsePropPath(name), value, obj, 0);\n });\n\n return obj;\n }\n\n return null;\n}\n\nexport default formDataToJSON;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosError from '../core/AxiosError.js';\nimport transitionalDefaults from './transitional.js';\nimport toFormData from '../helpers/toFormData.js';\nimport toURLEncodedForm from '../helpers/toURLEncodedForm.js';\nimport platform from '../platform/index.js';\nimport formDataToJSON from '../helpers/formDataToJSON.js';\n\n/**\n * It takes a string, tries to parse it, and if it fails, it returns the stringified version\n * of the input\n *\n * @param {any} rawValue - The value to be stringified.\n * @param {Function} parser - A function that parses a string into a JavaScript object.\n * @param {Function} encoder - A function that takes a value and returns a string.\n *\n * @returns {string} A stringified version of the rawValue.\n */\nfunction stringifySafely(rawValue, parser, encoder) {\n if (utils.isString(rawValue)) {\n try {\n (parser || JSON.parse)(rawValue);\n return utils.trim(rawValue);\n } catch (e) {\n if (e.name !== 'SyntaxError') {\n throw e;\n }\n }\n }\n\n return (encoder || JSON.stringify)(rawValue);\n}\n\nconst defaults = {\n\n transitional: transitionalDefaults,\n\n adapter: ['xhr', 'http', 'fetch'],\n\n transformRequest: [function transformRequest(data, headers) {\n const contentType = headers.getContentType() || '';\n const hasJSONContentType = contentType.indexOf('application/json') > -1;\n const isObjectPayload = utils.isObject(data);\n\n if (isObjectPayload && utils.isHTMLForm(data)) {\n data = new FormData(data);\n }\n\n const isFormData = utils.isFormData(data);\n\n if (isFormData) {\n return hasJSONContentType ? JSON.stringify(formDataToJSON(data)) : data;\n }\n\n if (utils.isArrayBuffer(data) ||\n utils.isBuffer(data) ||\n utils.isStream(data) ||\n utils.isFile(data) ||\n utils.isBlob(data) ||\n utils.isReadableStream(data)\n ) {\n return data;\n }\n if (utils.isArrayBufferView(data)) {\n return data.buffer;\n }\n if (utils.isURLSearchParams(data)) {\n headers.setContentType('application/x-www-form-urlencoded;charset=utf-8', false);\n return data.toString();\n }\n\n let isFileList;\n\n if (isObjectPayload) {\n if (contentType.indexOf('application/x-www-form-urlencoded') > -1) {\n return toURLEncodedForm(data, this.formSerializer).toString();\n }\n\n if ((isFileList = utils.isFileList(data)) || contentType.indexOf('multipart/form-data') > -1) {\n const _FormData = this.env && this.env.FormData;\n\n return toFormData(\n isFileList ? {'files[]': data} : data,\n _FormData && new _FormData(),\n this.formSerializer\n );\n }\n }\n\n if (isObjectPayload || hasJSONContentType ) {\n headers.setContentType('application/json', false);\n return stringifySafely(data);\n }\n\n return data;\n }],\n\n transformResponse: [function transformResponse(data) {\n const transitional = this.transitional || defaults.transitional;\n const forcedJSONParsing = transitional && transitional.forcedJSONParsing;\n const JSONRequested = this.responseType === 'json';\n\n if (utils.isResponse(data) || utils.isReadableStream(data)) {\n return data;\n }\n\n if (data && utils.isString(data) && ((forcedJSONParsing && !this.responseType) || JSONRequested)) {\n const silentJSONParsing = transitional && transitional.silentJSONParsing;\n const strictJSONParsing = !silentJSONParsing && JSONRequested;\n\n try {\n return JSON.parse(data);\n } catch (e) {\n if (strictJSONParsing) {\n if (e.name === 'SyntaxError') {\n throw AxiosError.from(e, AxiosError.ERR_BAD_RESPONSE, this, null, this.response);\n }\n throw e;\n }\n }\n }\n\n return data;\n }],\n\n /**\n * A timeout in milliseconds to abort a request. If set to 0 (default) a\n * timeout is not created.\n */\n timeout: 0,\n\n xsrfCookieName: 'XSRF-TOKEN',\n xsrfHeaderName: 'X-XSRF-TOKEN',\n\n maxContentLength: -1,\n maxBodyLength: -1,\n\n env: {\n FormData: platform.classes.FormData,\n Blob: platform.classes.Blob\n },\n\n validateStatus: function validateStatus(status) {\n return status >= 200 && status < 300;\n },\n\n headers: {\n common: {\n 'Accept': 'application/json, text/plain, */*',\n 'Content-Type': undefined\n }\n }\n};\n\nutils.forEach(['delete', 'get', 'head', 'post', 'put', 'patch'], (method) => {\n defaults.headers[method] = {};\n});\n\nexport default defaults;\n","'use strict';\n\nimport utils from '../utils.js';\nimport toFormData from './toFormData.js';\nimport platform from '../platform/index.js';\n\nexport default function toURLEncodedForm(data, options) {\n return toFormData(data, new platform.classes.URLSearchParams(), Object.assign({\n visitor: function(value, key, path, helpers) {\n if (platform.isNode && utils.isBuffer(value)) {\n this.append(key, value.toString('base64'));\n return false;\n }\n\n return helpers.defaultVisitor.apply(this, arguments);\n }\n }, options));\n}\n","'use strict';\n\nimport utils from './../utils.js';\n\n// RawAxiosHeaders whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\nconst ignoreDuplicateOf = utils.toObjectSet([\n 'age', 'authorization', 'content-length', 'content-type', 'etag',\n 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',\n 'last-modified', 'location', 'max-forwards', 'proxy-authorization',\n 'referer', 'retry-after', 'user-agent'\n]);\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} rawHeaders Headers needing to be parsed\n *\n * @returns {Object} Headers parsed into an object\n */\nexport default rawHeaders => {\n const parsed = {};\n let key;\n let val;\n let i;\n\n rawHeaders && rawHeaders.split('\\n').forEach(function parser(line) {\n i = line.indexOf(':');\n key = line.substring(0, i).trim().toLowerCase();\n val = line.substring(i + 1).trim();\n\n if (!key || (parsed[key] && ignoreDuplicateOf[key])) {\n return;\n }\n\n if (key === 'set-cookie') {\n if (parsed[key]) {\n parsed[key].push(val);\n } else {\n parsed[key] = [val];\n }\n } else {\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n }\n });\n\n return parsed;\n};\n","'use strict';\n\nimport utils from '../utils.js';\nimport parseHeaders from '../helpers/parseHeaders.js';\n\nconst $internals = Symbol('internals');\n\nfunction normalizeHeader(header) {\n return header && String(header).trim().toLowerCase();\n}\n\nfunction normalizeValue(value) {\n if (value === false || value == null) {\n return value;\n }\n\n return utils.isArray(value) ? value.map(normalizeValue) : String(value);\n}\n\nfunction parseTokens(str) {\n const tokens = Object.create(null);\n const tokensRE = /([^\\s,;=]+)\\s*(?:=\\s*([^,;]+))?/g;\n let match;\n\n while ((match = tokensRE.exec(str))) {\n tokens[match[1]] = match[2];\n }\n\n return tokens;\n}\n\nconst isValidHeaderName = (str) => /^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(str.trim());\n\nfunction matchHeaderValue(context, value, header, filter, isHeaderNameFilter) {\n if (utils.isFunction(filter)) {\n return filter.call(this, value, header);\n }\n\n if (isHeaderNameFilter) {\n value = header;\n }\n\n if (!utils.isString(value)) return;\n\n if (utils.isString(filter)) {\n return value.indexOf(filter) !== -1;\n }\n\n if (utils.isRegExp(filter)) {\n return filter.test(value);\n }\n}\n\nfunction formatHeader(header) {\n return header.trim()\n .toLowerCase().replace(/([a-z\\d])(\\w*)/g, (w, char, str) => {\n return char.toUpperCase() + str;\n });\n}\n\nfunction buildAccessors(obj, header) {\n const accessorName = utils.toCamelCase(' ' + header);\n\n ['get', 'set', 'has'].forEach(methodName => {\n Object.defineProperty(obj, methodName + accessorName, {\n value: function(arg1, arg2, arg3) {\n return this[methodName].call(this, header, arg1, arg2, arg3);\n },\n configurable: true\n });\n });\n}\n\nclass AxiosHeaders {\n constructor(headers) {\n headers && this.set(headers);\n }\n\n set(header, valueOrRewrite, rewrite) {\n const self = this;\n\n function setHeader(_value, _header, _rewrite) {\n const lHeader = normalizeHeader(_header);\n\n if (!lHeader) {\n throw new Error('header name must be a non-empty string');\n }\n\n const key = utils.findKey(self, lHeader);\n\n if(!key || self[key] === undefined || _rewrite === true || (_rewrite === undefined && self[key] !== false)) {\n self[key || _header] = normalizeValue(_value);\n }\n }\n\n const setHeaders = (headers, _rewrite) =>\n utils.forEach(headers, (_value, _header) => setHeader(_value, _header, _rewrite));\n\n if (utils.isPlainObject(header) || header instanceof this.constructor) {\n setHeaders(header, valueOrRewrite)\n } else if(utils.isString(header) && (header = header.trim()) && !isValidHeaderName(header)) {\n setHeaders(parseHeaders(header), valueOrRewrite);\n } else if (utils.isHeaders(header)) {\n for (const [key, value] of header.entries()) {\n setHeader(value, key, rewrite);\n }\n } else {\n header != null && setHeader(valueOrRewrite, header, rewrite);\n }\n\n return this;\n }\n\n get(header, parser) {\n header = normalizeHeader(header);\n\n if (header) {\n const key = utils.findKey(this, header);\n\n if (key) {\n const value = this[key];\n\n if (!parser) {\n return value;\n }\n\n if (parser === true) {\n return parseTokens(value);\n }\n\n if (utils.isFunction(parser)) {\n return parser.call(this, value, key);\n }\n\n if (utils.isRegExp(parser)) {\n return parser.exec(value);\n }\n\n throw new TypeError('parser must be boolean|regexp|function');\n }\n }\n }\n\n has(header, matcher) {\n header = normalizeHeader(header);\n\n if (header) {\n const key = utils.findKey(this, header);\n\n return !!(key && this[key] !== undefined && (!matcher || matchHeaderValue(this, this[key], key, matcher)));\n }\n\n return false;\n }\n\n delete(header, matcher) {\n const self = this;\n let deleted = false;\n\n function deleteHeader(_header) {\n _header = normalizeHeader(_header);\n\n if (_header) {\n const key = utils.findKey(self, _header);\n\n if (key && (!matcher || matchHeaderValue(self, self[key], key, matcher))) {\n delete self[key];\n\n deleted = true;\n }\n }\n }\n\n if (utils.isArray(header)) {\n header.forEach(deleteHeader);\n } else {\n deleteHeader(header);\n }\n\n return deleted;\n }\n\n clear(matcher) {\n const keys = Object.keys(this);\n let i = keys.length;\n let deleted = false;\n\n while (i--) {\n const key = keys[i];\n if(!matcher || matchHeaderValue(this, this[key], key, matcher, true)) {\n delete this[key];\n deleted = true;\n }\n }\n\n return deleted;\n }\n\n normalize(format) {\n const self = this;\n const headers = {};\n\n utils.forEach(this, (value, header) => {\n const key = utils.findKey(headers, header);\n\n if (key) {\n self[key] = normalizeValue(value);\n delete self[header];\n return;\n }\n\n const normalized = format ? formatHeader(header) : String(header).trim();\n\n if (normalized !== header) {\n delete self[header];\n }\n\n self[normalized] = normalizeValue(value);\n\n headers[normalized] = true;\n });\n\n return this;\n }\n\n concat(...targets) {\n return this.constructor.concat(this, ...targets);\n }\n\n toJSON(asStrings) {\n const obj = Object.create(null);\n\n utils.forEach(this, (value, header) => {\n value != null && value !== false && (obj[header] = asStrings && utils.isArray(value) ? value.join(', ') : value);\n });\n\n return obj;\n }\n\n [Symbol.iterator]() {\n return Object.entries(this.toJSON())[Symbol.iterator]();\n }\n\n toString() {\n return Object.entries(this.toJSON()).map(([header, value]) => header + ': ' + value).join('\\n');\n }\n\n get [Symbol.toStringTag]() {\n return 'AxiosHeaders';\n }\n\n static from(thing) {\n return thing instanceof this ? thing : new this(thing);\n }\n\n static concat(first, ...targets) {\n const computed = new this(first);\n\n targets.forEach((target) => computed.set(target));\n\n return computed;\n }\n\n static accessor(header) {\n const internals = this[$internals] = (this[$internals] = {\n accessors: {}\n });\n\n const accessors = internals.accessors;\n const prototype = this.prototype;\n\n function defineAccessor(_header) {\n const lHeader = normalizeHeader(_header);\n\n if (!accessors[lHeader]) {\n buildAccessors(prototype, _header);\n accessors[lHeader] = true;\n }\n }\n\n utils.isArray(header) ? header.forEach(defineAccessor) : defineAccessor(header);\n\n return this;\n }\n}\n\nAxiosHeaders.accessor(['Content-Type', 'Content-Length', 'Accept', 'Accept-Encoding', 'User-Agent', 'Authorization']);\n\n// reserved names hotfix\nutils.reduceDescriptors(AxiosHeaders.prototype, ({value}, key) => {\n let mapped = key[0].toUpperCase() + key.slice(1); // map `set` => `Set`\n return {\n get: () => value,\n set(headerValue) {\n this[mapped] = headerValue;\n }\n }\n});\n\nutils.freezeMethods(AxiosHeaders);\n\nexport default AxiosHeaders;\n","'use strict';\n\nimport utils from './../utils.js';\nimport defaults from '../defaults/index.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Array|Function} fns A single function or Array of functions\n * @param {?Object} response The response object\n *\n * @returns {*} The resulting transformed data\n */\nexport default function transformData(fns, response) {\n const config = this || defaults;\n const context = response || config;\n const headers = AxiosHeaders.from(context.headers);\n let data = context.data;\n\n utils.forEach(fns, function transform(fn) {\n data = fn.call(config, data, headers.normalize(), response ? response.status : undefined);\n });\n\n headers.normalize();\n\n return data;\n}\n","'use strict';\n\nexport default function isCancel(value) {\n return !!(value && value.__CANCEL__);\n}\n","'use strict';\n\nimport AxiosError from '../core/AxiosError.js';\nimport utils from '../utils.js';\n\n/**\n * A `CanceledError` is an object that is thrown when an operation is canceled.\n *\n * @param {string=} message The message.\n * @param {Object=} config The config.\n * @param {Object=} request The request.\n *\n * @returns {CanceledError} The created error.\n */\nfunction CanceledError(message, config, request) {\n // eslint-disable-next-line no-eq-null,eqeqeq\n AxiosError.call(this, message == null ? 'canceled' : message, AxiosError.ERR_CANCELED, config, request);\n this.name = 'CanceledError';\n}\n\nutils.inherits(CanceledError, AxiosError, {\n __CANCEL__: true\n});\n\nexport default CanceledError;\n","'use strict';\n\nimport AxiosError from './AxiosError.js';\n\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n *\n * @returns {object} The response.\n */\nexport default function settle(resolve, reject, response) {\n const validateStatus = response.config.validateStatus;\n if (!response.status || !validateStatus || validateStatus(response.status)) {\n resolve(response);\n } else {\n reject(new AxiosError(\n 'Request failed with status code ' + response.status,\n [AxiosError.ERR_BAD_REQUEST, AxiosError.ERR_BAD_RESPONSE][Math.floor(response.status / 100) - 4],\n response.config,\n response.request,\n response\n ));\n }\n}\n","'use strict';\n\n/**\n * Calculate data maxRate\n * @param {Number} [samplesCount= 10]\n * @param {Number} [min= 1000]\n * @returns {Function}\n */\nfunction speedometer(samplesCount, min) {\n samplesCount = samplesCount || 10;\n const bytes = new Array(samplesCount);\n const timestamps = new Array(samplesCount);\n let head = 0;\n let tail = 0;\n let firstSampleTS;\n\n min = min !== undefined ? min : 1000;\n\n return function push(chunkLength) {\n const now = Date.now();\n\n const startedAt = timestamps[tail];\n\n if (!firstSampleTS) {\n firstSampleTS = now;\n }\n\n bytes[head] = chunkLength;\n timestamps[head] = now;\n\n let i = tail;\n let bytesCount = 0;\n\n while (i !== head) {\n bytesCount += bytes[i++];\n i = i % samplesCount;\n }\n\n head = (head + 1) % samplesCount;\n\n if (head === tail) {\n tail = (tail + 1) % samplesCount;\n }\n\n if (now - firstSampleTS < min) {\n return;\n }\n\n const passed = startedAt && now - startedAt;\n\n return passed ? Math.round(bytesCount * 1000 / passed) : undefined;\n };\n}\n\nexport default speedometer;\n","/**\n * Throttle decorator\n * @param {Function} fn\n * @param {Number} freq\n * @return {Function}\n */\nfunction throttle(fn, freq) {\n let timestamp = 0;\n let threshold = 1000 / freq;\n let lastArgs;\n let timer;\n\n const invoke = (args, now = Date.now()) => {\n timestamp = now;\n lastArgs = null;\n if (timer) {\n clearTimeout(timer);\n timer = null;\n }\n fn.apply(null, args);\n }\n\n const throttled = (...args) => {\n const now = Date.now();\n const passed = now - timestamp;\n if ( passed >= threshold) {\n invoke(args, now);\n } else {\n lastArgs = args;\n if (!timer) {\n timer = setTimeout(() => {\n timer = null;\n invoke(lastArgs)\n }, threshold - passed);\n }\n }\n }\n\n const flush = () => lastArgs && invoke(lastArgs);\n\n return [throttled, flush];\n}\n\nexport default throttle;\n","import speedometer from \"./speedometer.js\";\nimport throttle from \"./throttle.js\";\nimport utils from \"../utils.js\";\n\nexport const progressEventReducer = (listener, isDownloadStream, freq = 3) => {\n let bytesNotified = 0;\n const _speedometer = speedometer(50, 250);\n\n return throttle(e => {\n const loaded = e.loaded;\n const total = e.lengthComputable ? e.total : undefined;\n const progressBytes = loaded - bytesNotified;\n const rate = _speedometer(progressBytes);\n const inRange = loaded <= total;\n\n bytesNotified = loaded;\n\n const data = {\n loaded,\n total,\n progress: total ? (loaded / total) : undefined,\n bytes: progressBytes,\n rate: rate ? rate : undefined,\n estimated: rate && total && inRange ? (total - loaded) / rate : undefined,\n event: e,\n lengthComputable: total != null,\n [isDownloadStream ? 'download' : 'upload']: true\n };\n\n listener(data);\n }, freq);\n}\n\nexport const progressEventDecorator = (total, throttled) => {\n const lengthComputable = total != null;\n\n return [(loaded) => throttled[0]({\n lengthComputable,\n total,\n loaded\n }), throttled[1]];\n}\n\nexport const asyncDecorator = (fn) => (...args) => utils.asap(() => fn(...args));\n","'use strict';\n\nimport utils from './../utils.js';\nimport platform from '../platform/index.js';\n\nexport default platform.hasStandardBrowserEnv ?\n\n// Standard browser envs have full support of the APIs needed to test\n// whether the request URL is of the same origin as current location.\n (function standardBrowserEnv() {\n const msie = /(msie|trident)/i.test(navigator.userAgent);\n const urlParsingNode = document.createElement('a');\n let originURL;\n\n /**\n * Parse a URL to discover its components\n *\n * @param {String} url The URL to be parsed\n * @returns {Object}\n */\n function resolveURL(url) {\n let href = url;\n\n if (msie) {\n // IE needs attribute set twice to normalize properties\n urlParsingNode.setAttribute('href', href);\n href = urlParsingNode.href;\n }\n\n urlParsingNode.setAttribute('href', href);\n\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\n return {\n href: urlParsingNode.href,\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\n host: urlParsingNode.host,\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\n hostname: urlParsingNode.hostname,\n port: urlParsingNode.port,\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\n urlParsingNode.pathname :\n '/' + urlParsingNode.pathname\n };\n }\n\n originURL = resolveURL(window.location.href);\n\n /**\n * Determine if a URL shares the same origin as the current location\n *\n * @param {String} requestURL The URL to test\n * @returns {boolean} True if URL shares the same origin, otherwise false\n */\n return function isURLSameOrigin(requestURL) {\n const parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\n return (parsed.protocol === originURL.protocol &&\n parsed.host === originURL.host);\n };\n })() :\n\n // Non standard browser envs (web workers, react-native) lack needed support.\n (function nonStandardBrowserEnv() {\n return function isURLSameOrigin() {\n return true;\n };\n })();\n","import utils from './../utils.js';\nimport platform from '../platform/index.js';\n\nexport default platform.hasStandardBrowserEnv ?\n\n // Standard browser envs support document.cookie\n {\n write(name, value, expires, path, domain, secure) {\n const cookie = [name + '=' + encodeURIComponent(value)];\n\n utils.isNumber(expires) && cookie.push('expires=' + new Date(expires).toGMTString());\n\n utils.isString(path) && cookie.push('path=' + path);\n\n utils.isString(domain) && cookie.push('domain=' + domain);\n\n secure === true && cookie.push('secure');\n\n document.cookie = cookie.join('; ');\n },\n\n read(name) {\n const match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n return (match ? decodeURIComponent(match[3]) : null);\n },\n\n remove(name) {\n this.write(name, '', Date.now() - 86400000);\n }\n }\n\n :\n\n // Non-standard browser env (web workers, react-native) lack needed support.\n {\n write() {},\n read() {\n return null;\n },\n remove() {}\n };\n\n","'use strict';\n\nimport isAbsoluteURL from '../helpers/isAbsoluteURL.js';\nimport combineURLs from '../helpers/combineURLs.js';\n\n/**\n * Creates a new URL by combining the baseURL with the requestedURL,\n * only when the requestedURL is not already an absolute URL.\n * If the requestURL is absolute, this function returns the requestedURL untouched.\n *\n * @param {string} baseURL The base URL\n * @param {string} requestedURL Absolute or relative URL to combine\n *\n * @returns {string} The combined full path\n */\nexport default function buildFullPath(baseURL, requestedURL) {\n if (baseURL && !isAbsoluteURL(requestedURL)) {\n return combineURLs(baseURL, requestedURL);\n }\n return requestedURL;\n}\n","'use strict';\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n *\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nexport default function isAbsoluteURL(url) {\n // A URL is considered absolute if it begins with \"<scheme>://\" or \"//\" (protocol-relative URL).\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n // by any combination of letters, digits, plus, period, or hyphen.\n return /^([a-z][a-z\\d+\\-.]*:)?\\/\\//i.test(url);\n}\n","'use strict';\n\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n *\n * @returns {string} The combined URL\n */\nexport default function combineURLs(baseURL, relativeURL) {\n return relativeURL\n ? baseURL.replace(/\\/?\\/$/, '') + '/' + relativeURL.replace(/^\\/+/, '')\n : baseURL;\n}\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosHeaders from \"./AxiosHeaders.js\";\n\nconst headersToObject = (thing) => thing instanceof AxiosHeaders ? { ...thing } : thing;\n\n/**\n * Config-specific merge-function which creates a new config-object\n * by merging two configuration objects together.\n *\n * @param {Object} config1\n * @param {Object} config2\n *\n * @returns {Object} New object resulting from merging config2 to config1\n */\nexport default function mergeConfig(config1, config2) {\n // eslint-disable-next-line no-param-reassign\n config2 = config2 || {};\n const config = {};\n\n function getMergedValue(target, source, caseless) {\n if (utils.isPlainObject(target) && utils.isPlainObject(source)) {\n return utils.merge.call({caseless}, target, source);\n } else if (utils.isPlainObject(source)) {\n return utils.merge({}, source);\n } else if (utils.isArray(source)) {\n return source.slice();\n }\n return source;\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDeepProperties(a, b, caseless) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(a, b, caseless);\n } else if (!utils.isUndefined(a)) {\n return getMergedValue(undefined, a, caseless);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function valueFromConfig2(a, b) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(undefined, b);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function defaultToConfig2(a, b) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(undefined, b);\n } else if (!utils.isUndefined(a)) {\n return getMergedValue(undefined, a);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDirectKeys(a, b, prop) {\n if (prop in config2) {\n return getMergedValue(a, b);\n } else if (prop in config1) {\n return getMergedValue(undefined, a);\n }\n }\n\n const mergeMap = {\n url: valueFromConfig2,\n method: valueFromConfig2,\n data: valueFromConfig2,\n baseURL: defaultToConfig2,\n transformRequest: defaultToConfig2,\n transformResponse: defaultToConfig2,\n paramsSerializer: defaultToConfig2,\n timeout: defaultToConfig2,\n timeoutMessage: defaultToConfig2,\n withCredentials: defaultToConfig2,\n withXSRFToken: defaultToConfig2,\n adapter: defaultToConfig2,\n responseType: defaultToConfig2,\n xsrfCookieName: defaultToConfig2,\n xsrfHeaderName: defaultToConfig2,\n onUploadProgress: defaultToConfig2,\n onDownloadProgress: defaultToConfig2,\n decompress: defaultToConfig2,\n maxContentLength: defaultToConfig2,\n maxBodyLength: defaultToConfig2,\n beforeRedirect: defaultToConfig2,\n transport: defaultToConfig2,\n httpAgent: defaultToConfig2,\n httpsAgent: defaultToConfig2,\n cancelToken: defaultToConfig2,\n socketPath: defaultToConfig2,\n responseEncoding: defaultToConfig2,\n validateStatus: mergeDirectKeys,\n headers: (a, b) => mergeDeepProperties(headersToObject(a), headersToObject(b), true)\n };\n\n utils.forEach(Object.keys(Object.assign({}, config1, config2)), function computeConfigValue(prop) {\n const merge = mergeMap[prop] || mergeDeepProperties;\n const configValue = merge(config1[prop], config2[prop], prop);\n (utils.isUndefined(configValue) && merge !== mergeDirectKeys) || (config[prop] = configValue);\n });\n\n return config;\n}\n","import platform from \"../platform/index.js\";\nimport utils from \"../utils.js\";\nimport isURLSameOrigin from \"./isURLSameOrigin.js\";\nimport cookies from \"./cookies.js\";\nimport buildFullPath from \"../core/buildFullPath.js\";\nimport mergeConfig from \"../core/mergeConfig.js\";\nimport AxiosHeaders from \"../core/AxiosHeaders.js\";\nimport buildURL from \"./buildURL.js\";\n\nexport default (config) => {\n const newConfig = mergeConfig({}, config);\n\n let {data, withXSRFToken, xsrfHeaderName, xsrfCookieName, headers, auth} = newConfig;\n\n newConfig.headers = headers = AxiosHeaders.from(headers);\n\n newConfig.url = buildURL(buildFullPath(newConfig.baseURL, newConfig.url), config.params, config.paramsSerializer);\n\n // HTTP basic authentication\n if (auth) {\n headers.set('Authorization', 'Basic ' +\n btoa((auth.username || '') + ':' + (auth.password ? unescape(encodeURIComponent(auth.password)) : ''))\n );\n }\n\n let contentType;\n\n if (utils.isFormData(data)) {\n if (platform.hasStandardBrowserEnv || platform.hasStandardBrowserWebWorkerEnv) {\n headers.setContentType(undefined); // Let the browser set it\n } else if ((contentType = headers.getContentType()) !== false) {\n // fix semicolon duplication issue for ReactNative FormData implementation\n const [type, ...tokens] = contentType ? contentType.split(';').map(token => token.trim()).filter(Boolean) : [];\n headers.setContentType([type || 'multipart/form-data', ...tokens].join('; '));\n }\n }\n\n // Add xsrf header\n // This is only done if running in a standard browser environment.\n // Specifically not if we're in a web worker, or react-native.\n\n if (platform.hasStandardBrowserEnv) {\n withXSRFToken && utils.isFunction(withXSRFToken) && (withXSRFToken = withXSRFToken(newConfig));\n\n if (withXSRFToken || (withXSRFToken !== false && isURLSameOrigin(newConfig.url))) {\n // Add xsrf header\n const xsrfValue = xsrfHeaderName && xsrfCookieName && cookies.read(xsrfCookieName);\n\n if (xsrfValue) {\n headers.set(xsrfHeaderName, xsrfValue);\n }\n }\n }\n\n return newConfig;\n}\n\n","import utils from './../utils.js';\nimport settle from './../core/settle.js';\nimport transitionalDefaults from '../defaults/transitional.js';\nimport AxiosError from '../core/AxiosError.js';\nimport CanceledError from '../cancel/CanceledError.js';\nimport parseProtocol from '../helpers/parseProtocol.js';\nimport platform from '../platform/index.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\nimport {progressEventReducer} from '../helpers/progressEventReducer.js';\nimport resolveConfig from \"../helpers/resolveConfig.js\";\n\nconst isXHRAdapterSupported = typeof XMLHttpRequest !== 'undefined';\n\nexport default isXHRAdapterSupported && function (config) {\n return new Promise(function dispatchXhrRequest(resolve, reject) {\n const _config = resolveConfig(config);\n let requestData = _config.data;\n const requestHeaders = AxiosHeaders.from(_config.headers).normalize();\n let {responseType, onUploadProgress, onDownloadProgress} = _config;\n let onCanceled;\n let uploadThrottled, downloadThrottled;\n let flushUpload, flushDownload;\n\n function done() {\n flushUpload && flushUpload(); // flush events\n flushDownload && flushDownload(); // flush events\n\n _config.cancelToken && _config.cancelToken.unsubscribe(onCanceled);\n\n _config.signal && _config.signal.removeEventListener('abort', onCanceled);\n }\n\n let request = new XMLHttpRequest();\n\n request.open(_config.method.toUpperCase(), _config.url, true);\n\n // Set the request timeout in MS\n request.timeout = _config.timeout;\n\n function onloadend() {\n if (!request) {\n return;\n }\n // Prepare the response\n const responseHeaders = AxiosHeaders.from(\n 'getAllResponseHeaders' in request && request.getAllResponseHeaders()\n );\n const responseData = !responseType || responseType === 'text' || responseType === 'json' ?\n request.responseText : request.response;\n const response = {\n data: responseData,\n status: request.status,\n statusText: request.statusText,\n headers: responseHeaders,\n config,\n request\n };\n\n settle(function _resolve(value) {\n resolve(value);\n done();\n }, function _reject(err) {\n reject(err);\n done();\n }, response);\n\n // Clean up request\n request = null;\n }\n\n if ('onloadend' in request) {\n // Use onloadend if available\n request.onloadend = onloadend;\n } else {\n // Listen for ready state to emulate onloadend\n request.onreadystatechange = function handleLoad() {\n if (!request || request.readyState !== 4) {\n return;\n }\n\n // The request errored out and we didn't get a response, this will be\n // handled by onerror instead\n // With one exception: request that using file: protocol, most browsers\n // will return status as 0 even though it's a successful request\n if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\n return;\n }\n // readystate handler is calling before onerror or ontimeout handlers,\n // so we should call onloadend on the next 'tick'\n setTimeout(onloadend);\n };\n }\n\n // Handle browser request cancellation (as opposed to a manual cancellation)\n request.onabort = function handleAbort() {\n if (!request) {\n return;\n }\n\n reject(new AxiosError('Request aborted', AxiosError.ECONNABORTED, config, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle low level network errors\n request.onerror = function handleError() {\n // Real errors are hidden from us by the browser\n // onerror should only fire if it's a network error\n reject(new AxiosError('Network Error', AxiosError.ERR_NETWORK, config, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle timeout\n request.ontimeout = function handleTimeout() {\n let timeoutErrorMessage = _config.timeout ? 'timeout of ' + _config.timeout + 'ms exceeded' : 'timeout exceeded';\n const transitional = _config.transitional || transitionalDefaults;\n if (_config.timeoutErrorMessage) {\n timeoutErrorMessage = _config.timeoutErrorMessage;\n }\n reject(new AxiosError(\n timeoutErrorMessage,\n transitional.clarifyTimeoutError ? AxiosError.ETIMEDOUT : AxiosError.ECONNABORTED,\n config,\n request));\n\n // Clean up request\n request = null;\n };\n\n // Remove Content-Type if data is undefined\n requestData === undefined && requestHeaders.setContentType(null);\n\n // Add headers to the request\n if ('setRequestHeader' in request) {\n utils.forEach(requestHeaders.toJSON(), function setRequestHeader(val, key) {\n request.setRequestHeader(key, val);\n });\n }\n\n // Add withCredentials to request if needed\n if (!utils.isUndefined(_config.withCredentials)) {\n request.withCredentials = !!_config.withCredentials;\n }\n\n // Add responseType to request if needed\n if (responseType && responseType !== 'json') {\n request.responseType = _config.responseType;\n }\n\n // Handle progress if needed\n if (onDownloadProgress) {\n ([downloadThrottled, flushDownload] = progressEventReducer(onDownloadProgress, true));\n request.addEventListener('progress', downloadThrottled);\n }\n\n // Not all browsers support upload events\n if (onUploadProgress && request.upload) {\n ([uploadThrottled, flushUpload] = progressEventReducer(onUploadProgress));\n\n request.upload.addEventListener('progress', uploadThrottled);\n\n request.upload.addEventListener('loadend', flushUpload);\n }\n\n if (_config.cancelToken || _config.signal) {\n // Handle cancellation\n // eslint-disable-next-line func-names\n onCanceled = cancel => {\n if (!request) {\n return;\n }\n reject(!cancel || cancel.type ? new CanceledError(null, config, request) : cancel);\n request.abort();\n request = null;\n };\n\n _config.cancelToken && _config.cancelToken.subscribe(onCanceled);\n if (_config.signal) {\n _config.signal.aborted ? onCanceled() : _config.signal.addEventListener('abort', onCanceled);\n }\n }\n\n const protocol = parseProtocol(_config.url);\n\n if (protocol && platform.protocols.indexOf(protocol) === -1) {\n reject(new AxiosError('Unsupported protocol ' + protocol + ':', AxiosError.ERR_BAD_REQUEST, config));\n return;\n }\n\n\n // Send the request\n request.send(requestData || null);\n });\n}\n","'use strict';\n\nexport default function parseProtocol(url) {\n const match = /^([-+\\w]{1,25})(:?\\/\\/|:)/.exec(url);\n return match && match[1] || '';\n}\n","import CanceledError from \"../cancel/CanceledError.js\";\nimport AxiosError from \"../core/AxiosError.js\";\n\nconst composeSignals = (signals, timeout) => {\n let controller = new AbortController();\n\n let aborted;\n\n const onabort = function (cancel) {\n if (!aborted) {\n aborted = true;\n unsubscribe();\n const err = cancel instanceof Error ? cancel : this.reason;\n controller.abort(err instanceof AxiosError ? err : new CanceledError(err instanceof Error ? err.message : err));\n }\n }\n\n let timer = timeout && setTimeout(() => {\n onabort(new AxiosError(`timeout ${timeout} of ms exceeded`, AxiosError.ETIMEDOUT))\n }, timeout)\n\n const unsubscribe = () => {\n if (signals) {\n timer && clearTimeout(timer);\n timer = null;\n signals.forEach(signal => {\n signal &&\n (signal.removeEventListener ? signal.removeEventListener('abort', onabort) : signal.unsubscribe(onabort));\n });\n signals = null;\n }\n }\n\n signals.forEach((signal) => signal && signal.addEventListener && signal.addEventListener('abort', onabort));\n\n const {signal} = controller;\n\n signal.unsubscribe = unsubscribe;\n\n return [signal, () => {\n timer && clearTimeout(timer);\n timer = null;\n }];\n}\n\nexport default composeSignals;\n","\nexport const streamChunk = function* (chunk, chunkSize) {\n let len = chunk.byteLength;\n\n if (!chunkSize || len < chunkSize) {\n yield chunk;\n return;\n }\n\n let pos = 0;\n let end;\n\n while (pos < len) {\n end = pos + chunkSize;\n yield chunk.slice(pos, end);\n pos = end;\n }\n}\n\nexport const readBytes = async function* (iterable, chunkSize, encode) {\n for await (const chunk of iterable) {\n yield* streamChunk(ArrayBuffer.isView(chunk) ? chunk : (await encode(String(chunk))), chunkSize);\n }\n}\n\nexport const trackStream = (stream, chunkSize, onProgress, onFinish, encode) => {\n const iterator = readBytes(stream, chunkSize, encode);\n\n let bytes = 0;\n let done;\n let _onFinish = (e) => {\n if (!done) {\n done = true;\n onFinish && onFinish(e);\n }\n }\n\n return new ReadableStream({\n async pull(controller) {\n try {\n const {done, value} = await iterator.next();\n\n if (done) {\n _onFinish();\n controller.close();\n return;\n }\n\n let len = value.byteLength;\n if (onProgress) {\n let loadedBytes = bytes += len;\n onProgress(loadedBytes);\n }\n controller.enqueue(new Uint8Array(value));\n } catch (err) {\n _onFinish(err);\n throw err;\n }\n },\n cancel(reason) {\n _onFinish(reason);\n return iterator.return();\n }\n }, {\n highWaterMark: 2\n })\n}\n","import platform from \"../platform/index.js\";\nimport utils from \"../utils.js\";\nimport AxiosError from \"../core/AxiosError.js\";\nimport composeSignals from \"../helpers/composeSignals.js\";\nimport {trackStream} from \"../helpers/trackStream.js\";\nimport AxiosHeaders from \"../core/AxiosHeaders.js\";\nimport {progressEventReducer, progressEventDecorator, asyncDecorator} from \"../helpers/progressEventReducer.js\";\nimport resolveConfig from \"../helpers/resolveConfig.js\";\nimport settle from \"../core/settle.js\";\n\nconst isFetchSupported = typeof fetch === 'function' && typeof Request === 'function' && typeof Response === 'function';\nconst isReadableStreamSupported = isFetchSupported && typeof ReadableStream === 'function';\n\n// used only inside the fetch adapter\nconst encodeText = isFetchSupported && (typeof TextEncoder === 'function' ?\n ((encoder) => (str) => encoder.encode(str))(new TextEncoder()) :\n async (str) => new Uint8Array(await new Response(str).arrayBuffer())\n);\n\nconst test = (fn, ...args) => {\n try {\n return !!fn(...args);\n } catch (e) {\n return false\n }\n}\n\nconst supportsRequestStream = isReadableStreamSupported && test(() => {\n let duplexAccessed = false;\n\n const hasContentType = new Request(platform.origin, {\n body: new ReadableStream(),\n method: 'POST',\n get duplex() {\n duplexAccessed = true;\n return 'half';\n },\n }).headers.has('Content-Type');\n\n return duplexAccessed && !hasContentType;\n});\n\nconst DEFAULT_CHUNK_SIZE = 64 * 1024;\n\nconst supportsResponseStream = isReadableStreamSupported &&\n test(() => utils.isReadableStream(new Response('').body));\n\n\nconst resolvers = {\n stream: supportsResponseStream && ((res) => res.body)\n};\n\nisFetchSupported && (((res) => {\n ['text', 'arrayBuffer', 'blob', 'formData', 'stream'].forEach(type => {\n !resolvers[type] && (resolvers[type] = utils.isFunction(res[type]) ? (res) => res[type]() :\n (_, config) => {\n throw new AxiosError(`Response type '${type}' is not supported`, AxiosError.ERR_NOT_SUPPORT, config);\n })\n });\n})(new Response));\n\nconst getBodyLength = async (body) => {\n if (body == null) {\n return 0;\n }\n\n if(utils.isBlob(body)) {\n return body.size;\n }\n\n if(utils.isSpecCompliantForm(body)) {\n return (await new Request(body).arrayBuffer()).byteLength;\n }\n\n if(utils.isArrayBufferView(body) || utils.isArrayBuffer(body)) {\n return body.byteLength;\n }\n\n if(utils.isURLSearchParams(body)) {\n body = body + '';\n }\n\n if(utils.isString(body)) {\n return (await encodeText(body)).byteLength;\n }\n}\n\nconst resolveBodyLength = async (headers, body) => {\n const length = utils.toFiniteNumber(headers.getContentLength());\n\n return length == null ? getBodyLength(body) : length;\n}\n\nexport default isFetchSupported && (async (config) => {\n let {\n url,\n method,\n data,\n signal,\n cancelToken,\n timeout,\n onDownloadProgress,\n onUploadProgress,\n responseType,\n headers,\n withCredentials = 'same-origin',\n fetchOptions\n } = resolveConfig(config);\n\n responseType = responseType ? (responseType + '').toLowerCase() : 'text';\n\n let [composedSignal, stopTimeout] = (signal || cancelToken || timeout) ?\n composeSignals([signal, cancelToken], timeout) : [];\n\n let finished, request;\n\n const onFinish = () => {\n !finished && setTimeout(() => {\n composedSignal && composedSignal.unsubscribe();\n });\n\n finished = true;\n }\n\n let requestContentLength;\n\n try {\n if (\n onUploadProgress && supportsRequestStream && method !== 'get' && method !== 'head' &&\n (requestContentLength = await resolveBodyLength(headers, data)) !== 0\n ) {\n let _request = new Request(url, {\n method: 'POST',\n body: data,\n duplex: \"half\"\n });\n\n let contentTypeHeader;\n\n if (utils.isFormData(data) && (contentTypeHeader = _request.headers.get('content-type'))) {\n headers.setContentType(contentTypeHeader)\n }\n\n if (_request.body) {\n const [onProgress, flush] = progressEventDecorator(\n requestContentLength,\n progressEventReducer(asyncDecorator(onUploadProgress))\n );\n\n data = trackStream(_request.body, DEFAULT_CHUNK_SIZE, onProgress, flush, encodeText);\n }\n }\n\n if (!utils.isString(withCredentials)) {\n withCredentials = withCredentials ? 'include' : 'omit';\n }\n\n request = new Request(url, {\n ...fetchOptions,\n signal: composedSignal,\n method: method.toUpperCase(),\n headers: headers.normalize().toJSON(),\n body: data,\n duplex: \"half\",\n credentials: withCredentials\n });\n\n let response = await fetch(request);\n\n const isStreamResponse = supportsResponseStream && (responseType === 'stream' || responseType === 'response');\n\n if (supportsResponseStream && (onDownloadProgress || isStreamResponse)) {\n const options = {};\n\n ['status', 'statusText', 'headers'].forEach(prop => {\n options[prop] = response[prop];\n });\n\n const responseContentLength = utils.toFiniteNumber(response.headers.get('content-length'));\n\n const [onProgress, flush] = onDownloadProgress && progressEventDecorator(\n responseContentLength,\n progressEventReducer(asyncDecorator(onDownloadProgress), true)\n ) || [];\n\n response = new Response(\n trackStream(response.body, DEFAULT_CHUNK_SIZE, onProgress, () => {\n flush && flush();\n isStreamResponse && onFinish();\n }, encodeText),\n options\n );\n }\n\n responseType = responseType || 'text';\n\n let responseData = await resolvers[utils.findKey(resolvers, responseType) || 'text'](response, config);\n\n !isStreamResponse && onFinish();\n\n stopTimeout && stopTimeout();\n\n return await new Promise((resolve, reject) => {\n settle(resolve, reject, {\n data: responseData,\n headers: AxiosHeaders.from(response.headers),\n status: response.status,\n statusText: response.statusText,\n config,\n request\n })\n })\n } catch (err) {\n onFinish();\n\n if (err && err.name === 'TypeError' && /fetch/i.test(err.message)) {\n throw Object.assign(\n new AxiosError('Network Error', AxiosError.ERR_NETWORK, config, request),\n {\n cause: err.cause || err\n }\n )\n }\n\n throw AxiosError.from(err, err && err.code, config, request);\n }\n});\n\n\n","import utils from '../utils.js';\nimport httpAdapter from './http.js';\nimport xhrAdapter from './xhr.js';\nimport fetchAdapter from './fetch.js';\nimport AxiosError from \"../core/AxiosError.js\";\n\nconst knownAdapters = {\n http: httpAdapter,\n xhr: xhrAdapter,\n fetch: fetchAdapter\n}\n\nutils.forEach(knownAdapters, (fn, value) => {\n if (fn) {\n try {\n Object.defineProperty(fn, 'name', {value});\n } catch (e) {\n // eslint-disable-next-line no-empty\n }\n Object.defineProperty(fn, 'adapterName', {value});\n }\n});\n\nconst renderReason = (reason) => `- ${reason}`;\n\nconst isResolvedHandle = (adapter) => utils.isFunction(adapter) || adapter === null || adapter === false;\n\nexport default {\n getAdapter: (adapters) => {\n adapters = utils.isArray(adapters) ? adapters : [adapters];\n\n const {length} = adapters;\n let nameOrAdapter;\n let adapter;\n\n const rejectedReasons = {};\n\n for (let i = 0; i < length; i++) {\n nameOrAdapter = adapters[i];\n let id;\n\n adapter = nameOrAdapter;\n\n if (!isResolvedHandle(nameOrAdapter)) {\n adapter = knownAdapters[(id = String(nameOrAdapter)).toLowerCase()];\n\n if (adapter === undefined) {\n throw new AxiosError(`Unknown adapter '${id}'`);\n }\n }\n\n if (adapter) {\n break;\n }\n\n rejectedReasons[id || '#' + i] = adapter;\n }\n\n if (!adapter) {\n\n const reasons = Object.entries(rejectedReasons)\n .map(([id, state]) => `adapter ${id} ` +\n (state === false ? 'is not supported by the environment' : 'is not available in the build')\n );\n\n let s = length ?\n (reasons.length > 1 ? 'since :\\n' + reasons.map(renderReason).join('\\n') : ' ' + renderReason(reasons[0])) :\n 'as no adapter specified';\n\n throw new AxiosError(\n `There is no suitable adapter to dispatch the request ` + s,\n 'ERR_NOT_SUPPORT'\n );\n }\n\n return adapter;\n },\n adapters: knownAdapters\n}\n","// eslint-disable-next-line strict\nexport default null;\n","'use strict';\n\nimport transformData from './transformData.js';\nimport isCancel from '../cancel/isCancel.js';\nimport defaults from '../defaults/index.js';\nimport CanceledError from '../cancel/CanceledError.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\nimport adapters from \"../adapters/adapters.js\";\n\n/**\n * Throws a `CanceledError` if cancellation has been requested.\n *\n * @param {Object} config The config that is to be used for the request\n *\n * @returns {void}\n */\nfunction throwIfCancellationRequested(config) {\n if (config.cancelToken) {\n config.cancelToken.throwIfRequested();\n }\n\n if (config.signal && config.signal.aborted) {\n throw new CanceledError(null, config);\n }\n}\n\n/**\n * Dispatch a request to the server using the configured adapter.\n *\n * @param {object} config The config that is to be used for the request\n *\n * @returns {Promise} The Promise to be fulfilled\n */\nexport default function dispatchRequest(config) {\n throwIfCancellationRequested(config);\n\n config.headers = AxiosHeaders.from(config.headers);\n\n // Transform request data\n config.data = transformData.call(\n config,\n config.transformRequest\n );\n\n if (['post', 'put', 'patch'].indexOf(config.method) !== -1) {\n config.headers.setContentType('application/x-www-form-urlencoded', false);\n }\n\n const adapter = adapters.getAdapter(config.adapter || defaults.adapter);\n\n return adapter(config).then(function onAdapterResolution(response) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n response.data = transformData.call(\n config,\n config.transformResponse,\n response\n );\n\n response.headers = AxiosHeaders.from(response.headers);\n\n return response;\n }, function onAdapterRejection(reason) {\n if (!isCancel(reason)) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n if (reason && reason.response) {\n reason.response.data = transformData.call(\n config,\n config.transformResponse,\n reason.response\n );\n reason.response.headers = AxiosHeaders.from(reason.response.headers);\n }\n }\n\n return Promise.reject(reason);\n });\n}\n","export const VERSION = \"1.7.3\";","'use strict';\n\nimport {VERSION} from '../env/data.js';\nimport AxiosError from '../core/AxiosError.js';\n\nconst validators = {};\n\n// eslint-disable-next-line func-names\n['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach((type, i) => {\n validators[type] = function validator(thing) {\n return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type;\n };\n});\n\nconst deprecatedWarnings = {};\n\n/**\n * Transitional option validator\n *\n * @param {function|boolean?} validator - set to false if the transitional option has been removed\n * @param {string?} version - deprecated version / removed since version\n * @param {string?} message - some message with additional info\n *\n * @returns {function}\n */\nvalidators.transitional = function transitional(validator, version, message) {\n function formatMessage(opt, desc) {\n return '[Axios v' + VERSION + '] Transitional option \\'' + opt + '\\'' + desc + (message ? '. ' + message : '');\n }\n\n // eslint-disable-next-line func-names\n return (value, opt, opts) => {\n if (validator === false) {\n throw new AxiosError(\n formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')),\n AxiosError.ERR_DEPRECATED\n );\n }\n\n if (version && !deprecatedWarnings[opt]) {\n deprecatedWarnings[opt] = true;\n // eslint-disable-next-line no-console\n console.warn(\n formatMessage(\n opt,\n ' has been deprecated since v' + version + ' and will be removed in the near future'\n )\n );\n }\n\n return validator ? validator(value, opt, opts) : true;\n };\n};\n\n/**\n * Assert object's properties type\n *\n * @param {object} options\n * @param {object} schema\n * @param {boolean?} allowUnknown\n *\n * @returns {object}\n */\n\nfunction assertOptions(options, schema, allowUnknown) {\n if (typeof options !== 'object') {\n throw new AxiosError('options must be an object', AxiosError.ERR_BAD_OPTION_VALUE);\n }\n const keys = Object.keys(options);\n let i = keys.length;\n while (i-- > 0) {\n const opt = keys[i];\n const validator = schema[opt];\n if (validator) {\n const value = options[opt];\n const result = value === undefined || validator(value, opt, options);\n if (result !== true) {\n throw new AxiosError('option ' + opt + ' must be ' + result, AxiosError.ERR_BAD_OPTION_VALUE);\n }\n continue;\n }\n if (allowUnknown !== true) {\n throw new AxiosError('Unknown option ' + opt, AxiosError.ERR_BAD_OPTION);\n }\n }\n}\n\nexport default {\n assertOptions,\n validators\n};\n","'use strict';\n\nimport utils from './../utils.js';\nimport buildURL from '../helpers/buildURL.js';\nimport InterceptorManager from './InterceptorManager.js';\nimport dispatchRequest from './dispatchRequest.js';\nimport mergeConfig from './mergeConfig.js';\nimport buildFullPath from './buildFullPath.js';\nimport validator from '../helpers/validator.js';\nimport AxiosHeaders from './AxiosHeaders.js';\n\nconst validators = validator.validators;\n\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n *\n * @return {Axios} A new instance of Axios\n */\nclass Axios {\n constructor(instanceConfig) {\n this.defaults = instanceConfig;\n this.interceptors = {\n request: new InterceptorManager(),\n response: new InterceptorManager()\n };\n }\n\n /**\n * Dispatch a request\n *\n * @param {String|Object} configOrUrl The config specific for this request (merged with this.defaults)\n * @param {?Object} config\n *\n * @returns {Promise} The Promise to be fulfilled\n */\n async request(configOrUrl, config) {\n try {\n return await this._request(configOrUrl, config);\n } catch (err) {\n if (err instanceof Error) {\n let dummy;\n\n Error.captureStackTrace ? Error.captureStackTrace(dummy = {}) : (dummy = new Error());\n\n // slice off the Error: ... line\n const stack = dummy.stack ? dummy.stack.replace(/^.+\\n/, '') : '';\n try {\n if (!err.stack) {\n err.stack = stack;\n // match without the 2 top stack lines\n } else if (stack && !String(err.stack).endsWith(stack.replace(/^.+\\n.+\\n/, ''))) {\n err.stack += '\\n' + stack\n }\n } catch (e) {\n // ignore the case where \"stack\" is an un-writable property\n }\n }\n\n throw err;\n }\n }\n\n _request(configOrUrl, config) {\n /*eslint no-param-reassign:0*/\n // Allow for axios('example/url'[, config]) a la fetch API\n if (typeof configOrUrl === 'string') {\n config = config || {};\n config.url = configOrUrl;\n } else {\n config = configOrUrl || {};\n }\n\n config = mergeConfig(this.defaults, config);\n\n const {transitional, paramsSerializer, headers} = config;\n\n if (transitional !== undefined) {\n validator.assertOptions(transitional, {\n silentJSONParsing: validators.transitional(validators.boolean),\n forcedJSONParsing: validators.transitional(validators.boolean),\n clarifyTimeoutError: validators.transitional(validators.boolean)\n }, false);\n }\n\n if (paramsSerializer != null) {\n if (utils.isFunction(paramsSerializer)) {\n config.paramsSerializer = {\n serialize: paramsSerializer\n }\n } else {\n validator.assertOptions(paramsSerializer, {\n encode: validators.function,\n serialize: validators.function\n }, true);\n }\n }\n\n // Set config.method\n config.method = (config.method || this.defaults.method || 'get').toLowerCase();\n\n // Flatten headers\n let contextHeaders = headers && utils.merge(\n headers.common,\n headers[config.method]\n );\n\n headers && utils.forEach(\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n (method) => {\n delete headers[method];\n }\n );\n\n config.headers = AxiosHeaders.concat(contextHeaders, headers);\n\n // filter out skipped interceptors\n const requestInterceptorChain = [];\n let synchronousRequestInterceptors = true;\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) {\n return;\n }\n\n synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous;\n\n requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected);\n });\n\n const responseInterceptorChain = [];\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);\n });\n\n let promise;\n let i = 0;\n let len;\n\n if (!synchronousRequestInterceptors) {\n const chain = [dispatchRequest.bind(this), undefined];\n chain.unshift.apply(chain, requestInterceptorChain);\n chain.push.apply(chain, responseInterceptorChain);\n len = chain.length;\n\n promise = Promise.resolve(config);\n\n while (i < len) {\n promise = promise.then(chain[i++], chain[i++]);\n }\n\n return promise;\n }\n\n len = requestInterceptorChain.length;\n\n let newConfig = config;\n\n i = 0;\n\n while (i < len) {\n const onFulfilled = requestInterceptorChain[i++];\n const onRejected = requestInterceptorChain[i++];\n try {\n newConfig = onFulfilled(newConfig);\n } catch (error) {\n onRejected.call(this, error);\n break;\n }\n }\n\n try {\n promise = dispatchRequest.call(this, newConfig);\n } catch (error) {\n return Promise.reject(error);\n }\n\n i = 0;\n len = responseInterceptorChain.length;\n\n while (i < len) {\n promise = promise.then(responseInterceptorChain[i++], responseInterceptorChain[i++]);\n }\n\n return promise;\n }\n\n getUri(config) {\n config = mergeConfig(this.defaults, config);\n const fullPath = buildFullPath(config.baseURL, config.url);\n return buildURL(fullPath, config.params, config.paramsSerializer);\n }\n}\n\n// Provide aliases for supported request methods\nutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, config) {\n return this.request(mergeConfig(config || {}, {\n method,\n url,\n data: (config || {}).data\n }));\n };\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n /*eslint func-names:0*/\n\n function generateHTTPMethod(isForm) {\n return function httpMethod(url, data, config) {\n return this.request(mergeConfig(config || {}, {\n method,\n headers: isForm ? {\n 'Content-Type': 'multipart/form-data'\n } : {},\n url,\n data\n }));\n };\n }\n\n Axios.prototype[method] = generateHTTPMethod();\n\n Axios.prototype[method + 'Form'] = generateHTTPMethod(true);\n});\n\nexport default Axios;\n","'use strict';\n\nimport CanceledError from './CanceledError.js';\n\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @param {Function} executor The executor function.\n *\n * @returns {CancelToken}\n */\nclass CancelToken {\n constructor(executor) {\n if (typeof executor !== 'function') {\n throw new TypeError('executor must be a function.');\n }\n\n let resolvePromise;\n\n this.promise = new Promise(function promiseExecutor(resolve) {\n resolvePromise = resolve;\n });\n\n const token = this;\n\n // eslint-disable-next-line func-names\n this.promise.then(cancel => {\n if (!token._listeners) return;\n\n let i = token._listeners.length;\n\n while (i-- > 0) {\n token._listeners[i](cancel);\n }\n token._listeners = null;\n });\n\n // eslint-disable-next-line func-names\n this.promise.then = onfulfilled => {\n let _resolve;\n // eslint-disable-next-line func-names\n const promise = new Promise(resolve => {\n token.subscribe(resolve);\n _resolve = resolve;\n }).then(onfulfilled);\n\n promise.cancel = function reject() {\n token.unsubscribe(_resolve);\n };\n\n return promise;\n };\n\n executor(function cancel(message, config, request) {\n if (token.reason) {\n // Cancellation has already been requested\n return;\n }\n\n token.reason = new CanceledError(message, config, request);\n resolvePromise(token.reason);\n });\n }\n\n /**\n * Throws a `CanceledError` if cancellation has been requested.\n */\n throwIfRequested() {\n if (this.reason) {\n throw this.reason;\n }\n }\n\n /**\n * Subscribe to the cancel signal\n */\n\n subscribe(listener) {\n if (this.reason) {\n listener(this.reason);\n return;\n }\n\n if (this._listeners) {\n this._listeners.push(listener);\n } else {\n this._listeners = [listener];\n }\n }\n\n /**\n * Unsubscribe from the cancel signal\n */\n\n unsubscribe(listener) {\n if (!this._listeners) {\n return;\n }\n const index = this._listeners.indexOf(listener);\n if (index !== -1) {\n this._listeners.splice(index, 1);\n }\n }\n\n /**\n * Returns an object that contains a new `CancelToken` and a function that, when called,\n * cancels the `CancelToken`.\n */\n static source() {\n let cancel;\n const token = new CancelToken(function executor(c) {\n cancel = c;\n });\n return {\n token,\n cancel\n };\n }\n}\n\nexport default CancelToken;\n","const HttpStatusCode = {\n Continue: 100,\n SwitchingProtocols: 101,\n Processing: 102,\n EarlyHints: 103,\n Ok: 200,\n Created: 201,\n Accepted: 202,\n NonAuthoritativeInformation: 203,\n NoContent: 204,\n ResetContent: 205,\n PartialContent: 206,\n MultiStatus: 207,\n AlreadyReported: 208,\n ImUsed: 226,\n MultipleChoices: 300,\n MovedPermanently: 301,\n Found: 302,\n SeeOther: 303,\n NotModified: 304,\n UseProxy: 305,\n Unused: 306,\n TemporaryRedirect: 307,\n PermanentRedirect: 308,\n BadRequest: 400,\n Unauthorized: 401,\n PaymentRequired: 402,\n Forbidden: 403,\n NotFound: 404,\n MethodNotAllowed: 405,\n NotAcceptable: 406,\n ProxyAuthenticationRequired: 407,\n RequestTimeout: 408,\n Conflict: 409,\n Gone: 410,\n LengthRequired: 411,\n PreconditionFailed: 412,\n PayloadTooLarge: 413,\n UriTooLong: 414,\n UnsupportedMediaType: 415,\n RangeNotSatisfiable: 416,\n ExpectationFailed: 417,\n ImATeapot: 418,\n MisdirectedRequest: 421,\n UnprocessableEntity: 422,\n Locked: 423,\n FailedDependency: 424,\n TooEarly: 425,\n UpgradeRequired: 426,\n PreconditionRequired: 428,\n TooManyRequests: 429,\n RequestHeaderFieldsTooLarge: 431,\n UnavailableForLegalReasons: 451,\n InternalServerError: 500,\n NotImplemented: 501,\n BadGateway: 502,\n ServiceUnavailable: 503,\n GatewayTimeout: 504,\n HttpVersionNotSupported: 505,\n VariantAlsoNegotiates: 506,\n InsufficientStorage: 507,\n LoopDetected: 508,\n NotExtended: 510,\n NetworkAuthenticationRequired: 511,\n};\n\nObject.entries(HttpStatusCode).forEach(([key, value]) => {\n HttpStatusCode[value] = key;\n});\n\nexport default HttpStatusCode;\n","'use strict';\n\nimport utils from './utils.js';\nimport bind from './helpers/bind.js';\nimport Axios from './core/Axios.js';\nimport mergeConfig from './core/mergeConfig.js';\nimport defaults from './defaults/index.js';\nimport formDataToJSON from './helpers/formDataToJSON.js';\nimport CanceledError from './cancel/CanceledError.js';\nimport CancelToken from './cancel/CancelToken.js';\nimport isCancel from './cancel/isCancel.js';\nimport {VERSION} from './env/data.js';\nimport toFormData from './helpers/toFormData.js';\nimport AxiosError from './core/AxiosError.js';\nimport spread from './helpers/spread.js';\nimport isAxiosError from './helpers/isAxiosError.js';\nimport AxiosHeaders from \"./core/AxiosHeaders.js\";\nimport adapters from './adapters/adapters.js';\nimport HttpStatusCode from './helpers/HttpStatusCode.js';\n\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n *\n * @returns {Axios} A new instance of Axios\n */\nfunction createInstance(defaultConfig) {\n const context = new Axios(defaultConfig);\n const instance = bind(Axios.prototype.request, context);\n\n // Copy axios.prototype to instance\n utils.extend(instance, Axios.prototype, context, {allOwnKeys: true});\n\n // Copy context to instance\n utils.extend(instance, context, null, {allOwnKeys: true});\n\n // Factory for creating new instances\n instance.create = function create(instanceConfig) {\n return createInstance(mergeConfig(defaultConfig, instanceConfig));\n };\n\n return instance;\n}\n\n// Create the default instance to be exported\nconst axios = createInstance(defaults);\n\n// Expose Axios class to allow class inheritance\naxios.Axios = Axios;\n\n// Expose Cancel & CancelToken\naxios.CanceledError = CanceledError;\naxios.CancelToken = CancelToken;\naxios.isCancel = isCancel;\naxios.VERSION = VERSION;\naxios.toFormData = toFormData;\n\n// Expose AxiosError class\naxios.AxiosError = AxiosError;\n\n// alias for CanceledError for backward compatibility\naxios.Cancel = axios.CanceledError;\n\n// Expose all/spread\naxios.all = function all(promises) {\n return Promise.all(promises);\n};\n\naxios.spread = spread;\n\n// Expose isAxiosError\naxios.isAxiosError = isAxiosError;\n\n// Expose mergeConfig\naxios.mergeConfig = mergeConfig;\n\naxios.AxiosHeaders = AxiosHeaders;\n\naxios.formToJSON = thing => formDataToJSON(utils.isHTMLForm(thing) ? new FormData(thing) : thing);\n\naxios.getAdapter = adapters.getAdapter;\n\naxios.HttpStatusCode = HttpStatusCode;\n\naxios.default = axios;\n\n// this module should only have a default export\nexport default axios\n","'use strict';\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n * ```js\n * function f(x, y, z) {}\n * var args = [1, 2, 3];\n * f.apply(null, args);\n * ```\n *\n * With `spread` this example can be re-written.\n *\n * ```js\n * spread(function(x, y, z) {})([1, 2, 3]);\n * ```\n *\n * @param {Function} callback\n *\n * @returns {Function}\n */\nexport default function spread(callback) {\n return function wrap(arr) {\n return callback.apply(null, arr);\n };\n}\n","'use strict';\n\nimport utils from './../utils.js';\n\n/**\n * Determines whether the payload is an error thrown by Axios\n *\n * @param {*} payload The value to test\n *\n * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false\n */\nexport default function isAxiosError(payload) {\n return utils.isObject(payload) && (payload.isAxiosError === true);\n}\n","import { Any, CurrenciesResponse } from \"@cede/types\";\nimport { advancedRandomId } from \"../random\";\nimport { API_MOCK_DATA } from \"./mocks\";\nimport { APIResponseMap, API_ENDPOINT } from \"./types\";\nimport { Scope } from \"@sentry/types\";\nimport axios from \"axios\";\n\nexport * from \"./readAssetFromExtension\";\nexport * from \"./types\";\n\nconst CEDE_API_URL = process.env.CEDE_API_URL || process.env.REACT_APP_CEDE_API_URL || \"\";\nconst CEDE_API_TOKEN = process.env.CEDE_API_TOKEN || process.env.REACT_APP_CEDE_API_TOKEN || \"\";\nconst ENVIRONMENT = process.env.CEDE_NODE_ENV || \"development\";\n\nif (ENVIRONMENT === undefined) throw new Error(\"CEDE_NODE_ENV is not defined\");\n\ntype ApiParams = {\n pathParams?: string[];\n queryParams?: Record<string, string>;\n apiBaseUrl?: string;\n};\n\ntype PostApiParams = ApiParams & {\n bodyParams?: Record<string, Any>;\n};\n\nexport const fakeGetFromApi = async <E extends keyof APIResponseMap>(endpoint: E): Promise<APIResponseMap[E]> => {\n return Promise.resolve(API_MOCK_DATA[endpoint] as APIResponseMap[E]);\n};\n\n/**\n * @description This function is used to call the Cede API.\n * It handles the authentication and the error handling.\n * It also handles the mock data for the tests.\n */\nexport const getFromApi = async <E extends keyof APIResponseMap>(\n endpoint: E,\n params?: ApiParams,\n): Promise<APIResponseMap[E]> => {\n if (ENVIRONMENT === \"test\") return await fakeGetFromApi(endpoint);\n const requestId = advancedRandomId(3);\n try {\n const pathParamsString = params?.pathParams ? `/${params?.pathParams?.join(\"/\")}` : \"\";\n const queryParamsString = params?.queryParams ? `?${new URLSearchParams(params.queryParams)}` : \"\";\n const baseUrl = params?.apiBaseUrl || CEDE_API_URL;\n const response = await fetch(`${baseUrl}/${endpoint}${pathParamsString}${queryParamsString}`, {\n method: \"GET\",\n headers: {\n \"X-TOKEN\": `${CEDE_API_TOKEN}`,\n \"X-REQUEST-ID\": requestId,\n \"X-ENDPOINT\": endpoint,\n },\n });\n\n const unwrappedResponse = await response.json();\n return unwrappedResponse;\n } catch (error: Any) {\n throw new Error(`Couldn't reach Cede API - ${endpoint}: ${error.message}, requestId:${requestId}`);\n }\n};\n\nexport const getFromCdn = async <E extends keyof APIResponseMap>(endpoint: E): Promise<APIResponseMap[E]> => {\n return await getFromApi(endpoint, {\n apiBaseUrl: \"https://cdn-api.cedelabs.io\",\n });\n};\n\nexport const postToApi = async <E extends API_ENDPOINT>(\n endpoint: E,\n params?: PostApiParams,\n sentryInstance?: Scope,\n): Promise<Any> => {\n const requestId = advancedRandomId(3);\n try {\n const pathParamsString = params?.pathParams ? `/${params?.pathParams?.join(\"/\")}` : \"\";\n const queryParamsString = params?.queryParams ? `?${new URLSearchParams(params.queryParams)}` : \"\";\n const res = await fetch(`${CEDE_API_URL}/${endpoint}${pathParamsString}${queryParamsString}`, {\n method: \"POST\",\n headers: {\n \"X-TOKEN\": `${CEDE_API_TOKEN}`,\n \"X-REQUEST-ID\": requestId,\n \"X-ENDPOINT\": endpoint,\n ...(params?.bodyParams ? { \"Content-Type\": \"application/json\" } : {}), // Only add Content-Type if there are bodyParams\n },\n body: params?.bodyParams ? JSON.stringify(params.bodyParams) : undefined,\n });\n return await res.json();\n } catch (error: Any) {\n if (sentryInstance) {\n sentryInstance.captureException(new Error(`Couldn't POST to Cede API`), {\n captureContext: {\n extra: {\n url: `${CEDE_API_URL}/${endpoint}`,\n message: `Error when calling ${CEDE_API_URL}/${endpoint}: ${error.message}, ${error.stack}`,\n requestId,\n },\n },\n });\n }\n throw error;\n }\n};\n\nexport const deleteToApi = async <E extends API_ENDPOINT, T extends Record<string, Any>>(\n endpoint: E,\n params?: T,\n sentryInstance?: Scope,\n): Promise<void> => {\n const requestId = advancedRandomId(3);\n try {\n const queryParamsString = params ? `?${new URLSearchParams(params)}` : \"\";\n await fetch(`${CEDE_API_URL}/${endpoint}${queryParamsString}`, {\n method: \"DELETE\",\n headers: {\n \"X-TOKEN\": `${CEDE_API_TOKEN}`,\n \"X-REQUEST-ID\": requestId,\n \"X-ENDPOINT\": endpoint,\n },\n body: params ? JSON.stringify(params) : undefined,\n });\n } catch (error: Any) {\n if (sentryInstance) {\n sentryInstance.captureException(new Error(`Couldn't DELETE to Cede API`), {\n captureContext: {\n extra: {\n url: `${CEDE_API_URL}/${endpoint}`,\n message: `Error when calling ${CEDE_API_URL}/${endpoint}: ${error.message}, ${error.stack}`,\n requestId,\n },\n },\n });\n }\n throw error;\n }\n};\n\nconst axiosInstance = axios.create({\n headers: {\n \"X-TOKEN\": CEDE_API_TOKEN,\n },\n});\n\nexport const fetchAvailableCurrencies = async () => {\n if (ENVIRONMENT === \"test\") {\n const res: CurrenciesResponse = {\n data: {\n updatedAt: Date.now().toString(),\n currencies: {\n fiat: [\"EUR\", \"USD\"],\n crypto: [\"BTC\"],\n },\n },\n };\n return res;\n }\n const { data } = await axiosInstance.get<CurrenciesResponse>(`${CEDE_API_URL}/v2/price/available_vs_currencies`);\n return data;\n};\n","import { VaultItem } from \"@cede/types\";\nimport {\n fakeAccount,\n fakeAccount2,\n fakeAccount3,\n fakeAccount4,\n fakeAccount5,\n fakeAccountsForAllExchanges,\n} from \"./accounts\";\n\nexport const fakeActiveVault: VaultItem = {\n id: \"fakeId\",\n name: \"fakeName\",\n accounts: [fakeAccount, fakeAccount2, fakeAccount3, fakeAccount4, fakeAccount5],\n image: \"fakeImage\",\n isActive: true,\n};\n\nexport const fakeActiveVault2: VaultItem = {\n id: \"fakeId2\",\n name: \"fakeName2\",\n accounts: [fakeAccount, fakeAccount2, fakeAccount3, fakeAccount4, fakeAccount5],\n image: \"fakeImage2\",\n isActive: false,\n};\n\nexport const fakeActiveVaultForDemo: VaultItem = {\n id: \"11111-11111\",\n name: \"Main vault\",\n accounts: fakeAccountsForAllExchanges,\n image: \"fakeImage\",\n isActive: true,\n};\n","import { UserSettings } from \"@cede/types\";\n\nexport const fakeSettings: UserSettings = {\n currency: {\n symbol: \"USD\",\n rate: 1.1,\n },\n language: \"fr\",\n balanceBelow: 1,\n extensionUrl: \"\",\n};\n\nexport const mockedFiatCurrencies = [\n {\n symbol: \"USD\",\n name: \"United States Dollar\",\n symbolNative: \"$\",\n },\n {\n symbol: \"EUR\",\n name: \"Euro\",\n symbolNative: \"€\",\n },\n {\n symbol: \"GBP\",\n name: \"British Pound Sterling\",\n symbolNative: \"£\",\n },\n];\n","import { ExchangeInfo, ExchangeStatus } from \"@cede/types\";\nimport { CEDE_CEXS } from \"../cexs\";\n\nfunction generateExchangeInfo(exchangeId: string): ExchangeInfo {\n return {\n name: exchangeId,\n id: exchangeId,\n logo: \"#\",\n status: ExchangeStatus.Ok,\n supportedWalletTypes: [\"spot\"],\n supportedFeatures: [\"send\", \"trade\", \"receive\"],\n auhenticationMethod: \"apiKeys\",\n isRequiringEmailConfirmation: false,\n minimumWithdrawalUrl: \"\",\n isRequiringAddressWhitelisting: false,\n shouldCheckWhitelist: false,\n ipWhitelistAddresses: [],\n provideWhitelistedAddresses: false,\n minimumDepositlUrl: \"\",\n addressManagementUrl: \"\",\n affiliationLink: \"\",\n websiteHomelinkIdentifier: \"\",\n whitelistScopes: [],\n inducedPermissions: {},\n featuresUnderMaintenance: {\n send: false,\n trade: false,\n receive: false,\n trade_and_send: false,\n limit_trade: false,\n },\n requiresPassword: false,\n requiresTwoKeys: false,\n requiresUid: false,\n apiManagementLink: \"\",\n notConnectedIdentifier: \"\",\n supportVerifyKYC: false,\n hybridAuthentication: undefined,\n oauthAuthentication: {\n isOauthLoginSupported: false,\n isUsingFastApi: false,\n hasPkceFlow: false,\n },\n transferWalletTypes: [],\n };\n}\n\nexport const mockSupportedExchanges: ExchangeInfo[] = Object.values(CEDE_CEXS).map(generateExchangeInfo);\n","import { GroupedBalances } from \"@cede/types\";\nimport { fakeActiveVaultForDemo } from \"./vaults\";\n\nexport const mockedWithdrawableBalances = {\n USDT: {\n freeBalance: 5780,\n totalBalance: 5780,\n refFreeBalance: 5777.780479999999,\n refTotalBalance: 5777.780479999999,\n },\n LINK: {\n freeBalance: 569,\n totalBalance: 569,\n refFreeBalance: 4384.30611804,\n refTotalBalance: 4384.30611804,\n },\n ETH: {\n freeBalance: 5.305,\n totalBalance: 5.305,\n refFreeBalance: 8694.85261305,\n refTotalBalance: 8694.85261305,\n },\n DOT: {\n freeBalance: 533.5,\n totalBalance: 533.5,\n refFreeBalance: 2167.9150218,\n refTotalBalance: 2167.9150218,\n },\n};\n\nconst generateGroupedBalances = (tokens: string[], balances: number[]): GroupedBalances => {\n return tokens.reduce((acc, token, index) => {\n acc[token] = {\n freeBalance: balances[index] || 0,\n totalBalance: balances[index] || 0,\n refFreeBalance: 0,\n refTotalBalance: 0,\n };\n return acc;\n }, {} as GroupedBalances);\n};\n\nexport const mockedWithdrawableBalancesByAccountId: Record<string, GroupedBalances> =\n fakeActiveVaultForDemo.accounts.reduce((acc, account) => {\n return {\n ...acc,\n [account.id]: generateGroupedBalances([\"USDT\", \"MATIC\", \"ETH\", \"WBTC\"], [0, 0, 0, 0]),\n };\n }, {});\n","import { MarketNetwork, TokenSymbol } from \"@cede/types\";\nimport { forgeNetworkURL } from \"../cdn-client\";\n\nconst generateMarketNetwork = (name: string, network: string, min: string, max: string) => ({\n name,\n network,\n withdrawFee: String(Number(min) / 2),\n withdrawMax: max,\n withdrawMin: min,\n withdrawalEnabled: true,\n depositEnabled: true,\n iconUrl: forgeNetworkURL(network),\n});\n\nexport const mockedNetworks: MarketNetwork[] = [\n generateMarketNetwork(\"Ethereum\", \"ethereum\", \"0.001\", \"2000\"),\n generateMarketNetwork(\"Polygon\", \"polygon\", \"0.001\", \"2000\"),\n];\n\nexport const mockedNetworksByToken: Record<TokenSymbol, MarketNetwork[]> = {\n WBTC: [\n generateMarketNetwork(\"Ethereum\", \"ethereum\", \"0\", \"2000\"),\n generateMarketNetwork(\"Polygon\", \"polygon\", \"0\", \"2000\"),\n ],\n USDT: [\n generateMarketNetwork(\"Ethereum\", \"ethereum\", \"0\", \"2000\"),\n generateMarketNetwork(\"Polygon\", \"polygon\", \"0\", \"2000\"),\n ],\n ETH: [\n generateMarketNetwork(\"Ethereum\", \"ethereum\", \"0\", \"2000\"),\n generateMarketNetwork(\"Polygon\", \"polygon\", \"0\", \"2000\"),\n ],\n MATIC: [\n generateMarketNetwork(\"Ethereum\", \"ethereum\", \"0\", \"2000\"),\n generateMarketNetwork(\"Polygon\", \"polygon\", \"0\", \"2000\"),\n ],\n};\n","const E_TIMEOUT = new Error('timeout while waiting for mutex to become available');\nconst E_ALREADY_LOCKED = new Error('mutex already locked');\nconst E_CANCELED = new Error('request for lock canceled');\n\nvar __awaiter$2 = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nclass Semaphore {\n constructor(_value, _cancelError = E_CANCELED) {\n this._value = _value;\n this._cancelError = _cancelError;\n this._weightedQueues = [];\n this._weightedWaiters = [];\n }\n acquire(weight = 1) {\n if (weight <= 0)\n throw new Error(`invalid weight ${weight}: must be positive`);\n return new Promise((resolve, reject) => {\n if (!this._weightedQueues[weight - 1])\n this._weightedQueues[weight - 1] = [];\n this._weightedQueues[weight - 1].push({ resolve, reject });\n this._dispatch();\n });\n }\n runExclusive(callback, weight = 1) {\n return __awaiter$2(this, void 0, void 0, function* () {\n const [value, release] = yield this.acquire(weight);\n try {\n return yield callback(value);\n }\n finally {\n release();\n }\n });\n }\n waitForUnlock(weight = 1) {\n if (weight <= 0)\n throw new Error(`invalid weight ${weight}: must be positive`);\n return new Promise((resolve) => {\n if (!this._weightedWaiters[weight - 1])\n this._weightedWaiters[weight - 1] = [];\n this._weightedWaiters[weight - 1].push(resolve);\n this._dispatch();\n });\n }\n isLocked() {\n return this._value <= 0;\n }\n getValue() {\n return this._value;\n }\n setValue(value) {\n this._value = value;\n this._dispatch();\n }\n release(weight = 1) {\n if (weight <= 0)\n throw new Error(`invalid weight ${weight}: must be positive`);\n this._value += weight;\n this._dispatch();\n }\n cancel() {\n this._weightedQueues.forEach((queue) => queue.forEach((entry) => entry.reject(this._cancelError)));\n this._weightedQueues = [];\n }\n _dispatch() {\n var _a;\n for (let weight = this._value; weight > 0; weight--) {\n const queueEntry = (_a = this._weightedQueues[weight - 1]) === null || _a === void 0 ? void 0 : _a.shift();\n if (!queueEntry)\n continue;\n const previousValue = this._value;\n const previousWeight = weight;\n this._value -= weight;\n weight = this._value + 1;\n queueEntry.resolve([previousValue, this._newReleaser(previousWeight)]);\n }\n this._drainUnlockWaiters();\n }\n _newReleaser(weight) {\n let called = false;\n return () => {\n if (called)\n return;\n called = true;\n this.release(weight);\n };\n }\n _drainUnlockWaiters() {\n for (let weight = this._value; weight > 0; weight--) {\n if (!this._weightedWaiters[weight - 1])\n continue;\n this._weightedWaiters[weight - 1].forEach((waiter) => waiter());\n this._weightedWaiters[weight - 1] = [];\n }\n }\n}\n\nvar __awaiter$1 = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nclass Mutex {\n constructor(cancelError) {\n this._semaphore = new Semaphore(1, cancelError);\n }\n acquire() {\n return __awaiter$1(this, void 0, void 0, function* () {\n const [, releaser] = yield this._semaphore.acquire();\n return releaser;\n });\n }\n runExclusive(callback) {\n return this._semaphore.runExclusive(() => callback());\n }\n isLocked() {\n return this._semaphore.isLocked();\n }\n waitForUnlock() {\n return this._semaphore.waitForUnlock();\n }\n release() {\n if (this._semaphore.isLocked())\n this._semaphore.release();\n }\n cancel() {\n return this._semaphore.cancel();\n }\n}\n\nvar __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nfunction withTimeout(sync, timeout, timeoutError = E_TIMEOUT) {\n return {\n acquire: (weight) => {\n if (weight !== undefined && weight <= 0) {\n throw new Error(`invalid weight ${weight}: must be positive`);\n }\n return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {\n let isTimeout = false;\n const handle = setTimeout(() => {\n isTimeout = true;\n reject(timeoutError);\n }, timeout);\n try {\n const ticket = yield sync.acquire(weight);\n if (isTimeout) {\n const release = Array.isArray(ticket) ? ticket[1] : ticket;\n release();\n }\n else {\n clearTimeout(handle);\n resolve(ticket);\n }\n }\n catch (e) {\n if (!isTimeout) {\n clearTimeout(handle);\n reject(e);\n }\n }\n }));\n },\n runExclusive(callback, weight) {\n return __awaiter(this, void 0, void 0, function* () {\n let release = () => undefined;\n try {\n const ticket = yield this.acquire(weight);\n if (Array.isArray(ticket)) {\n release = ticket[1];\n return yield callback(ticket[0]);\n }\n else {\n release = ticket;\n return yield callback();\n }\n }\n finally {\n release();\n }\n });\n },\n release(weight) {\n sync.release(weight);\n },\n cancel() {\n return sync.cancel();\n },\n waitForUnlock: (weight) => {\n if (weight !== undefined && weight <= 0) {\n throw new Error(`invalid weight ${weight}: must be positive`);\n }\n return new Promise((resolve, reject) => {\n const handle = setTimeout(() => reject(timeoutError), timeout);\n sync.waitForUnlock(weight).then(() => {\n clearTimeout(handle);\n resolve();\n });\n });\n },\n isLocked: () => sync.isLocked(),\n getValue: () => sync.getValue(),\n setValue: (value) => sync.setValue(value),\n };\n}\n\n// eslint-disable-next-lisne @typescript-eslint/explicit-module-boundary-types\nfunction tryAcquire(sync, alreadyAcquiredError = E_ALREADY_LOCKED) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return withTimeout(sync, 0, alreadyAcquiredError);\n}\n\nexport { E_ALREADY_LOCKED, E_CANCELED, E_TIMEOUT, Mutex, Semaphore, tryAcquire, withTimeout };\n","import {\n Any,\n CedeEvents,\n GroupedBalances,\n HandlerType,\n MarketNetwork,\n PricesByTokenSymbol,\n ProviderHandler,\n TokenPrice,\n} from \"@cede/types\";\nimport { API_ENDPOINT, getFromApi } from \"../api-client\";\nimport {\n fakeActiveVaultForDemo,\n fakeSettings,\n mockedNetworks,\n mockedNetworksByToken,\n mockedWithdrawableBalancesByAccountId,\n mockSupportedExchanges,\n} from \"../mocks\";\nimport { CedeProvider } from \"@cedelabs/providers/src\";\nimport { Mutex } from \"async-mutex\";\n\nconst eventEmitter = new EventTarget();\n\nconst pricesMutex = new Mutex();\n\nlet cachedPrices: TokenPrice[] = [];\n\nconst mockedApi: Partial<ProviderHandler> & {\n getIsConnected: CedeProvider[\"getIsConnected\"];\n getIsUnlocked: CedeProvider[\"getIsUnlocked\"];\n getVaultPreviews: CedeProvider[\"getVaultPreviews\"];\n getActiveVault: CedeProvider[\"getActiveVault\"];\n on: CedeProvider[\"on\"];\n once: CedeProvider[\"once\"];\n emit: CedeProvider[\"emit\"];\n off: CedeProvider[\"off\"];\n} = {\n isReady: true,\n isReal: false,\n getIsConnected: () => {\n return true;\n },\n getIsUnlocked: () => {\n return true;\n },\n emit: (event: string, ...args: Any[]) => {\n eventEmitter.dispatchEvent(new CustomEvent(event, { detail: args }));\n return true;\n },\n getVaultPreviews() {\n return [fakeActiveVaultForDemo];\n },\n getActiveVault() {\n return fakeActiveVaultForDemo;\n },\n on: (event: CedeEvents, callback: (...args: unknown[]) => void) => {\n eventEmitter.addEventListener(event, callback);\n\n return mockedApi as CedeProvider;\n },\n once: (event: CedeEvents, callback: (...args: unknown[]) => void) => {\n eventEmitter.addEventListener(event, callback, { once: true });\n return mockedApi as CedeProvider;\n },\n off: (event: CedeEvents, callback: VoidFunction) => {\n eventEmitter.removeEventListener(event, callback);\n return mockedApi as CedeProvider;\n },\n connect: async () => {\n eventEmitter.dispatchEvent(new Event(\"unlock\"));\n return [fakeActiveVaultForDemo];\n },\n getSettings: async () => {\n return fakeSettings;\n },\n supportedExchanges: async () => {\n return mockSupportedExchanges;\n },\n vaults: async () => {\n return [fakeActiveVaultForDemo];\n },\n withdrawableTokens: async (params) => {\n const { accountId } = params;\n const balances = mockedWithdrawableBalancesByAccountId[accountId] as GroupedBalances;\n\n await mockedApi?.getPrices?.();\n\n return Object.entries(balances).reduce((acc, [token, balance]) => {\n const tokenPrice = cachedPrices.find((price) => price.tokenSymbol === token)?.average || 0;\n return {\n ...acc,\n [token]: {\n ...balance,\n refTotalBalance: balance.totalBalance * tokenPrice,\n refFreeBalance: balance.freeBalance * tokenPrice,\n },\n };\n }, {} as GroupedBalances);\n },\n getNetworks: async ({ tokenSymbol }) => {\n if (tokenSymbol && mockedNetworksByToken[tokenSymbol]) {\n return mockedNetworksByToken[tokenSymbol] as MarketNetwork[];\n }\n return mockedNetworks;\n },\n getPrices: async () => {\n const release = await pricesMutex.acquire();\n if (!cachedPrices.length) {\n const { data } = await getFromApi(API_ENDPOINT.PRICES, undefined).catch(() => ({\n data: {\n tokens: [],\n },\n }));\n cachedPrices = data ? data.tokens : [];\n }\n release();\n return cachedPrices.reduce((acc, { tokenSymbol, average }) => {\n acc[tokenSymbol] = average;\n return acc;\n }, {} as PricesByTokenSymbol);\n },\n};\n\nexport function mockedHandlerFactory() {\n return new Proxy(eventEmitter, {\n get: (object: Any, property: string) => {\n if (property === \"type\") return HandlerType.UNTRUSTED_PROVIDER_API;\n if (property === \"isReady\") return true;\n if (property === \"isReal\") return false;\n\n if (object[property]) return object[property];\n return async (...parameters: [Any, Any]) => {\n const method = mockedApi[property as keyof typeof mockedApi];\n if (!method || typeof method !== \"function\") {\n throw new Error(`Method ${property} not found`);\n }\n const response = method(...parameters);\n return response;\n };\n },\n }) as ProviderHandler & CedeProvider;\n}\n","import { ProviderHandler, SendWidgetProps, TradeWidgetProps } from \"@cede/types\";\nimport type { DefaultDependenciesWithFeatures } from \"../contexts/dependencies/dependencies\";\nimport { CedeProvider } from \"@cedelabs/providers/src\";\nimport { useDependencies as useDependenciesUtil } from \"@cedelabs/react-utils\";\n\nexport function useDependencies<\n T extends {\n backgroundHandler: ProviderHandler & CedeProvider;\n widgetProps: SendWidgetProps | TradeWidgetProps;\n setBackgroundHandler: React.Dispatch<(ProviderHandler & CedeProvider) | undefined>;\n },\n>() {\n return useDependenciesUtil<T & DefaultDependenciesWithFeatures>();\n}\n","import { PublicAccount, VaultItem } from \"@cede/types\";\n\nexport enum AlertTypes {\n ERROR = \"error\",\n WARNING = \"warning\",\n INFO = \"info\",\n SUCCESS = \"success\",\n}\n\nexport type AlertItem = {\n id: string;\n message: string;\n type: AlertTypes;\n vault?: VaultItem;\n account?: PublicAccount;\n onClick?: VoidFunction;\n};\n\nexport type AlertData = {\n vault?: VaultItem;\n account?: PublicAccount;\n customMsTimeout?: number;\n noTimeout?: boolean;\n};\n\nexport type UseAlertState = {\n alertQueue: AlertItem[];\n append: (message: string, type: AlertItem[\"type\"], data?: AlertData, onClick?: VoidFunction) => void;\n remove: (id: string) => void;\n removeByMessage: (message: string) => void;\n};\n","import { safeJsonParse } from \"@cede/utils\";\nimport { PersistStorage } from \"zustand/middleware/persist\";\n\ntype GetTimeLimitedPersistStorageParams<T> = {\n onHydration?: (state: T) => T;\n ttl: number;\n};\n\nexport const getTimeLimitedPersistStorage = <T = unknown>({\n ttl,\n onHydration,\n}: GetTimeLimitedPersistStorageParams<T>): PersistStorage<T> => {\n return {\n getItem(key: string) {\n const itemStr = localStorage.getItem(key);\n if (!itemStr) {\n return null;\n }\n\n const item = safeJsonParse(itemStr);\n const now = new Date();\n\n if (now.getTime() > item.expiry) {\n localStorage.removeItem(key);\n return null;\n }\n\n const value = item.value;\n\n if (onHydration) {\n return { state: onHydration(value) };\n }\n\n return { state: value };\n },\n\n setItem(key: string, value) {\n const now = new Date();\n const item = {\n value: value.state,\n expiry: now.getTime() + ttl,\n };\n localStorage.setItem(key, JSON.stringify(item));\n },\n\n removeItem(key: string) {\n window.localStorage.removeItem(key);\n },\n };\n};\n","import { useRef } from \"react\";\nimport { TradeForm, TradeWidgetConfig } from \"@cede/types\";\nimport { forgeTokenURL, QueryKeys } from \"@cede/utils\";\nimport { useDependencies } from \"../../../hooks\";\nimport { AlertTypes } from \"../../../store\";\nimport { getTimeLimitedPersistStorage } from \"../../../utils/timeLimitedPersistStorage\";\nimport { TradeFormAction } from \"../types\";\nimport { useQuery } from \"@tanstack/react-query\";\nimport { create } from \"zustand\";\nimport { persist, subscribeWithSelector } from \"zustand/middleware\";\n\ntype TradeFormState = {\n dispatchForm: (action: TradeFormAction<TradeForm>) => void;\n setInitialProps: (props: TradeWidgetConfig) => void;\n resetForm: (keepSelectedAccount?: boolean) => void;\n} & TradeForm;\n\nconst _initialFormState: TradeForm = {\n tokenFrom: null,\n amountFrom: \"0\",\n tokenTo: null,\n amountTo: \"0\",\n selectedAccount: null,\n market: null,\n orderSide: null,\n noCommonMarket: false,\n limitPrice: \"0\",\n initialProps: {\n tokenSymbols: undefined,\n },\n};\n\nconst PERSISTANCE_DURATION = 1000 * 60 * 10; // 10 minutes\nexport const useTradeFormStore = create(\n subscribeWithSelector(\n persist<TradeFormState>(\n (set) => ({\n ..._initialFormState,\n resetForm: (keepSelectedAccount = false) => {\n set({\n ..._initialFormState,\n selectedAccount: keepSelectedAccount ? useTradeFormStore.getState().selectedAccount : null,\n initialProps: useTradeFormStore.getState().initialProps,\n });\n },\n setInitialProps: (initialProps: TradeWidgetConfig) =>\n set(() => {\n return {\n initialProps,\n };\n }),\n dispatchForm: (action) => {\n const state = useTradeFormStore.getState();\n\n if (action.field === \"revertToken\") {\n set({\n tokenFrom: state.tokenTo,\n tokenTo: state.tokenFrom,\n });\n return;\n }\n // If the user changes the tokenFrom or tokenTo, we need to reset the noCommonMarket flag\n // It will be set to true if the user selects two tokens that don't have a common market in further steps\n if (\n (action.field === \"tokenFrom\" && state.tokenFrom !== action.value) ||\n (action.field === \"tokenTo\" && state.tokenTo !== action.value)\n ) {\n set({ noCommonMarket: false });\n }\n set({\n [action.field]: action.value,\n });\n },\n }),\n {\n name: \"TradeStore\",\n storage: getTimeLimitedPersistStorage<TradeFormState>({\n ttl: PERSISTANCE_DURATION,\n onHydration: (state) => {\n if (state.tokenFrom) {\n state.tokenFrom.img = forgeTokenURL(state.tokenFrom.value);\n }\n if (state.tokenTo) {\n state.tokenTo.img = forgeTokenURL(state.tokenTo.value);\n }\n return state;\n },\n }),\n },\n ),\n ),\n);\n\nexport const useTradeForm = () => {\n const { backgroundHandler, useLoginStore, useAlert } = useDependencies();\n const { dispatchForm, resetForm, ...tradeForm } = useTradeFormStore();\n const focusedInput = useRef<\"amountFrom\" | \"amountTo\" | null>(null);\n const { isLoggedIn } = useLoginStore();\n const appendAlert = useAlert((state) => state.append);\n\n const { data: canByPassApprovalTradeHub, refetch } = useQuery({\n queryKey: [QueryKeys.BYPASS_APPROVAL_TRADE_HUB],\n queryFn: async () => {\n return backgroundHandler.canByPassApprovalTradeHub();\n },\n enabled: !!backgroundHandler?.isReady && isLoggedIn,\n });\n\n const setByPassApprovalTradeHub = async (value: boolean) => {\n try {\n await backgroundHandler.setByPassApprovalTradeHub({ bypassApprovalTradeHub: value });\n await refetch();\n } catch {\n appendAlert(\"Ensure that the cede.store extension is updated to version 1.72.3 or higher.\", AlertTypes.WARNING);\n }\n };\n\n /**\n * Set the focused input. It helps to know which input is currently updated by the user and apply the correct computation\n */\n const setFocusedInput = (focused: \"amountFrom\" | \"amountTo\" | null) => {\n focusedInput.current = focused;\n };\n\n const hasSelectedBothTokens = !tradeForm.tokenFrom || !tradeForm.tokenTo;\n\n const addMax = (amount: string | number | null) => {\n setFocusedInput(\"amountFrom\");\n dispatchForm({\n field: \"amountFrom\",\n value: amount?.toString() ?? \"0\",\n });\n };\n\n const resetAmounts = () => {\n dispatchForm({\n field: \"amountFrom\",\n value: \"0\",\n });\n dispatchForm({\n field: \"amountTo\",\n value: \"0\",\n });\n };\n\n return {\n tradeForm,\n dispatchForm,\n setFocusedInput,\n focusedInput,\n resetForm,\n hasSelectedBothTokens,\n addMax,\n resetAmounts,\n canByPassApprovalTradeHub: canByPassApprovalTradeHub ?? false,\n setByPassApprovalTradeHub,\n };\n};\n","import { ConnectParams, userFacingMessages } from \"@cede/types\";\nimport { useDependencies } from \"./useDependencies\";\n\nexport const useWidgetLogin = () => {\n const { useLoading, backgroundHandler, useLogin, useOnboardingModal } = useDependencies();\n const addBigPendingRequest = useLoading((state) => state.addBigPendingRequest);\n const removeBigPendingRequest = useLoading((state) => state.removeBigPendingRequest);\n const setDescription = useLoading((state) => state.setDescription);\n const { isLoggedIn, handleLogin: login, isLoading, isError } = useLogin();\n\n const { isOnboardingModalOpened, setIsOnboardingModalOpened } = useOnboardingModal();\n\n const openOnboardingModal = () => {\n setIsOnboardingModalOpened(true);\n };\n\n const closeOnboardingModal = () => {\n setIsOnboardingModalOpened(false);\n removeBigPendingRequest();\n };\n\n const handleLogin = async (props: ConnectParams) => {\n addBigPendingRequest();\n setDescription(\n <>\n {userFacingMessages.WIDGETS.SEND.LOGIN_LOADING_FIRST_LINE}\n <br />\n {userFacingMessages.WIDGETS.SEND.LOGIN_LOADING_SECOND_LINE}\n </>,\n );\n if (!backgroundHandler && !props.silent) {\n openOnboardingModal();\n\n return;\n }\n\n try {\n await login(props);\n // Silently handle cancel of login\n // eslint-disable-next-line no-empty\n } catch {\n } finally {\n setDescription(null);\n removeBigPendingRequest();\n }\n };\n\n return {\n handleLogin,\n isLoading,\n isError,\n closeOnboardingModal,\n isOnboardingModalOpened,\n isLoggedIn,\n };\n};\n","import { useNavigate } from \"react-router-dom\";\nimport { SendWidgetProps, TradeWidgetProps } from \"@cede/types\";\nimport { useInitialize } from \"../../hooks/useInitialize\";\nimport { useWidgetBackgroundHandler } from \"../../hooks/useWidgetBackgroundHandler\";\nimport { useWidgetLogin } from \"../../hooks/useWidgetLogin\";\nimport { useOnboardingModal } from \"../../stores/onboardingModal/onboardingModal\";\nimport { DefaultDependencies } from \"@cedelabs/react-utils\";\n\nexport type WidgetsDependencies = {\n useWidgetLogin: typeof useWidgetLogin;\n useNavigate: typeof useNavigate;\n useInitialize: typeof useInitialize;\n useOnboardingModal: typeof useOnboardingModal;\n widgetProps?: SendWidgetProps | TradeWidgetProps;\n useBackgroundHandler: typeof useWidgetBackgroundHandler; // override the react-sdk useBackgroundHandler dependency\n};\n\nexport type DefaultDependenciesWithFeatures = DefaultDependencies & WidgetsDependencies;\n\nexport const defaultDependencies: DefaultDependenciesWithFeatures = {\n useNavigate,\n useInitialize,\n useOnboardingModal,\n useWidgetLogin,\n useBackgroundHandler: useWidgetBackgroundHandler,\n} as DefaultDependenciesWithFeatures;\n","import { useEffect } from \"react\";\nimport { TradeWidgetConfig, WidgetType } from \"@cede/types\";\nimport { TRADE_WIDGET_ROUTES, WIDGET_ROUTES } from \"@cede/utils\";\nimport { mockedHandlerFactory } from \"@cede/utils\";\nimport { useDependencies } from \"../hooks/useDependencies\";\nimport { useTradeFormStore } from \"@cedelabs/react-utils\";\n\nexport const useInitialize = () => {\n const {\n useVaults,\n setBackgroundHandler,\n useBackgroundHandler,\n useSetupSettings,\n useLoading,\n useProviderEvents,\n useStandardizedNetworks,\n useSendStore,\n useNavigate,\n widgetProps,\n useLogin,\n widgetType,\n useMultipleTransactionsStore,\n backgroundHandler,\n } = useDependencies();\n const navigate = useNavigate();\n const { addBigPendingRequest, removeBigPendingRequest } = useLoading((state) => ({\n addBigPendingRequest: state.addBigPendingRequest,\n removeBigPendingRequest: state.removeBigPendingRequest,\n }));\n const { refetchVaults } = useVaults();\n const { isLoggedIn, checkAutoLogin } = useLogin();\n const hasStartedMultipleTransactions = useMultipleTransactionsStore((state) => state.hasStartedTheProcess);\n useSetupSettings();\n useStandardizedNetworks();\n\n const setSendInitialProps = useSendStore((state) => state.setInitialProps);\n const setTradeInitialProps = useTradeFormStore((state) => state.setInitialProps);\n\n useProviderEvents({\n onUnlock: () => {\n refetchVaults();\n removeBigPendingRequest();\n },\n onLock: () => {\n refetchVaults();\n navigate(WIDGET_ROUTES.LOGIN);\n },\n onAccountsChanged: () => {\n refetchVaults();\n },\n });\n\n useBackgroundHandler({\n onProviderNotFound: () => {\n setBackgroundHandler(mockedHandlerFactory());\n },\n onProviderFound: (nativeBackgroundHandler) => {\n setBackgroundHandler(nativeBackgroundHandler);\n },\n });\n\n useEffect(() => {\n // Display the loader by default, then if the provider isn't found, remove it\n // if it's found, when the backgroundHandler is set, remove it.\n addBigPendingRequest();\n\n const timeout = setTimeout(() => {\n // if the background handler isn't present or not ready, remove the loader\n if (!backgroundHandler?.isReady) {\n navigate(WIDGET_ROUTES.LOGIN);\n removeBigPendingRequest();\n }\n }, 3000);\n return () => {\n clearTimeout(timeout);\n removeBigPendingRequest();\n };\n }, [backgroundHandler]);\n\n // It manages the initial routing of the widget\n useEffect(() => {\n if (backgroundHandler?.isReady) {\n if (!isLoggedIn) {\n checkAutoLogin(backgroundHandler)\n .then((isLoggedIn) => {\n if (!isLoggedIn) {\n navigate(WIDGET_ROUTES.LOGIN);\n }\n })\n .finally(removeBigPendingRequest);\n } else {\n if (widgetType === WidgetType.TRADE && !localStorage.getItem(\"defiAddress\")) {\n navigate(TRADE_WIDGET_ROUTES.ADD_DEFI_ADDRESS);\n return;\n }\n\n if (hasStartedMultipleTransactions) {\n navigate(WIDGET_ROUTES.MULTIPLE_TRANSACTIONS);\n return;\n }\n // if page is login, redirect to action route\n // we need this condition for an edge case with the defi address page\n navigate(WIDGET_ROUTES.ACTION_ROUTE);\n removeBigPendingRequest();\n }\n }\n }, [isLoggedIn, backgroundHandler?.isReady]);\n\n useEffect(() => {\n if (!widgetProps?.config) return;\n\n if (widgetType === WidgetType.SEND) setSendInitialProps(widgetProps.config);\n else if (widgetType === WidgetType.TRADE) setTradeInitialProps(widgetProps.config as TradeWidgetConfig);\n }, [widgetProps.config]);\n};\n","import { create } from \"zustand\";\n\nexport type OnboardingModalState = {\n isOnboardingModalOpened: boolean;\n setIsOnboardingModalOpened: (value: boolean) => void;\n};\n\nexport const useOnboardingModal = create<OnboardingModalState>((set) => ({\n isOnboardingModalOpened: false,\n setIsOnboardingModalOpened: (isOnboardingModalOpened: boolean) => {\n set(() => ({\n isOnboardingModalOpened,\n }));\n },\n}));\n","import { useDependencies } from \"./useDependencies\";\nimport { CedeReactDependencies, useBackgroundHandler, UseProviderProps } from \"@cedelabs/react-sdk/src\";\n\n/**\n * Wrapper of useBackgroundHandler hook to handle the case when the provider is not found and\n * a mocked background handler needs to be retrieved from the context.\n */\nexport const useWidgetBackgroundHandler = ({ onProviderNotFound, onProviderFound }: UseProviderProps = {}): ReturnType<\n CedeReactDependencies[\"useBackgroundHandler\"]\n> => {\n const { backgroundHandler } = useDependencies();\n const { refetchProvider, backgroundHandler: nativeBackgroundHandler } = useBackgroundHandler({\n onProviderNotFound,\n onProviderFound,\n });\n\n /**\n * If the native background handler isn't present, we return the background handler from the context\n * which is possibly the mocked one\n */\n return { backgroundHandler: nativeBackgroundHandler || backgroundHandler, refetchProvider };\n};\n","import {\n Any,\n CedeNews,\n CMSPartnerDto,\n CMSQuestDto,\n CMSReferralRewardPointDTO,\n CMSTokenData,\n CMSTradingCampaign,\n} from \"@cede/types\";\nimport {\n mapCMSPartnerDTOToPartner,\n mapCMSQuestDTOToQuest,\n mapMSReferralRewardPointDTOToReferralRewardPoint,\n} from \"./CMSMapper\";\n\nexport const fetchNews = async (queryParams: { filters: string; apiUrl?: string }) => {\n const query = `what-s-news?populate=*&sort=publishedAt:desc&${queryParams.filters}`;\n return await requestCMS<CedeNews[]>(query);\n};\n\nexport const fetchPartners = async (queryParams: { filters: string }) => {\n const query = `partners?populate=*&${queryParams.filters}`;\n const partners = await requestCMS<CMSPartnerDto[]>(query);\n return partners.map(mapCMSPartnerDTOToPartner);\n};\n\nexport const fetchReferralRewards = async () => {\n const query = `referral-reward-point`;\n const referralReward = await requestCMS<CMSReferralRewardPointDTO>(query);\n return mapMSReferralRewardPointDTOToReferralRewardPoint(referralReward);\n};\n\nexport const fetchQuests = async (queryParams: { filters: string }) => {\n const query = `quests?populate[quest_requirements][populate]=*&populate[reward][populate]=*&populate[partners]=*&${queryParams.filters}`;\n const quests = await requestCMS<CMSQuestDto[]>(query);\n return quests.map(mapCMSQuestDTOToQuest);\n};\n\nexport const fetchPopularTokens = async () => {\n const query = \"token\";\n const tokensData = await requestCMS<CMSTokenData>(query);\n if (!tokensData) return [];\n const SEPERATOR = \";\";\n const popular = tokensData.attributes.popular;\n return popular.split(SEPERATOR);\n};\n\nexport const fetchTradingCampaigns = async () => {\n const sort = \"sort=startedAt:desc\";\n let filters = \"\";\n if (process.env.CEDE_NODE_ENV === \"production\") {\n filters = \"&filters[production][$eq]=true\";\n }\n const query = `trading-campaigns?${sort}${filters}&pagination[pageSize]=1000&populate=icon`;\n return await requestCMS<CMSTradingCampaign[]>(query);\n};\n\nexport const fetchTradingCampaignsFull = async (sort = \"startedAt:desc\") => {\n let filters = \"\";\n\n // Start with production filter if needed\n if (process.env.CEDE_NODE_ENV === \"production\") {\n filters = \"&filters[production][$eq]=true\";\n }\n\n const query = `trading-campaigns?sort=${sort}${filters}&pagination[pageSize]=1000&populate=*`;\n return await requestCMS<CMSTradingCampaign[]>(query);\n};\n\nexport const fetchTradingCampaignByName = async (campaignName: string) => {\n let filters = `filters[name][$eq]=${campaignName}`;\n if (process.env.CEDE_NODE_ENV === \"production\") {\n filters += \"&filters[production][$eq]=true\";\n }\n const query = `trading-campaigns?${filters}&populate=*`;\n const campaigns = await requestCMS<CMSTradingCampaign[]>(query);\n return campaigns[0] || null;\n};\n\nexport const fetchActiveTradingCampaignByPairSymbol = async (pairSymbol: string) => {\n let query = `trading-campaign/by-pair-symbol?pairSymbol=${pairSymbol}`;\n if (process.env.CEDE_NODE_ENV === \"production\") {\n query += \"&production=true\";\n }\n const campaigns = await requestCMS<CMSTradingCampaign[]>(query);\n return campaigns[0] || null;\n};\n\nconst requestCMS = async <T>(query: string) => {\n const apiUrl = process.env.NEXT_PUBLIC_CMS_API_URL || process.env.CMS_API_URL;\n const apiToken = process.env.NEXT_PUBLIC_CMS_API_TOKEN || process.env.CMS_API_TOKEN;\n\n const url = `${apiUrl}/api/${query}`;\n const headers = {\n Authorization: `Bearer ${apiToken}`,\n };\n\n const res = await fetch(url, {\n headers,\n });\n const json = await res.json();\n return json.data as T;\n};\n\n/**\n *\n * It converts a query object to a query string\n * ````\n * { filters: { title: { $eq: \"123\" }, description: { $gte: \"123\" } } }\n * ````\n * becomes\n * ````\n * \"filters[title][$eq]=123&filters[description][$gte]=123\"\n * ````\n *\n * @param queryObject\n * @param initialQuery\n * @param withBracket\n * @returns\n */\nexport const buildQueryString = (queryObject: Record<string, Any>, initialQuery = \"\", withBracket?: boolean) => {\n const startBracket = withBracket ? \"[\" : \"\";\n const endBracket = withBracket ? \"]\" : \"\";\n const subQueries: string[] = [];\n\n Object.entries(queryObject).forEach(([key, currentObject]) => {\n if (currentObject === undefined) return;\n\n let subQuery = `${initialQuery}${startBracket}${key}${endBracket}`;\n\n if (typeof currentObject === \"object\") {\n if (Array.isArray(currentObject)) {\n currentObject = currentObject.reduce(\n (newObject, item, index) => ({\n ...newObject,\n [index]: item,\n }),\n {},\n );\n }\n subQuery = buildQueryString(currentObject, subQuery, true);\n } else {\n subQuery += `=${currentObject}`;\n }\n subQueries.push(subQuery);\n });\n\n return subQueries.join(\"&\");\n};\n\nexport * from \"./tradingCampaign\";\n","import { QueryKeys } from \"@cede/utils\";\nimport { useDependencies } from \".\";\nimport { useQuery } from \"@tanstack/react-query\";\n\nexport const useConfig = () => {\n const { backgroundHandler } = useDependencies();\n\n const { data: config, refetch } = useQuery({\n queryKey: [QueryKeys.CONFIG],\n queryFn: () => backgroundHandler.getConfig(),\n enabled: !!backgroundHandler?.isReady,\n staleTime: Infinity,\n gcTime: Infinity,\n refetchOnWindowFocus: false,\n });\n return {\n config,\n refetchConfig: refetch,\n };\n};\n","import { useEffect, useMemo, useRef, useState } from \"react\";\nimport ccxt from \"@cede/ccxt\";\nimport { BalancesByToken, DropListWithIconItem, MarketPair, MarketRate, OrderType, ViewEnvironment } from \"@cede/types\";\nimport { balancesByWalletTypeToBalancesByToken, fetchPopularTokens, forgeTokenURL, formatBalance } from \"@cede/utils\";\nimport { useConfig } from \"../../../hooks\";\nimport { useDependencies } from \"../../../hooks/useDependencies\";\nimport { BALANCE_DEFAULT_TTL } from \"../constants\";\nimport { AvailableAssets, UseTradeApiHook } from \"../types\";\nimport { useQuery } from \"@tanstack/react-query\";\n\nconst EMPTY_RATE = { bid: \"0\", ask: \"0\" };\n\nexport const useTradeApi: UseTradeApiHook = (params) => {\n const {\n useVaults,\n backgroundHandler,\n useTokenNamesAndSymbols,\n useSupportedExchanges,\n useViewEnvironment,\n useTradePath,\n useTradeTabs,\n useCedeStoreVersion,\n } = useDependencies();\n const { selectedAccount, tokenFrom, form } = params;\n const { activeVault } = useVaults();\n const [markets, setMarkets] = useState<MarketPair[]>([]);\n const { tokenNamesAndSymbols } = useTokenNamesAndSymbols();\n const { supportedExchangesById } = useSupportedExchanges();\n const { environment } = useViewEnvironment();\n const orderType = useTradeTabs((state) => state.selectedTab);\n const { config } = useConfig();\n const { isGreaterVersion } = useCedeStoreVersion();\n\n // It's used to avoid having an empty assetsTo while the new droplistDestinationTokens are loading\n // which could cause side effects like flickering\n const prevAssetsTo = useRef<AvailableAssets>([]);\n\n const isTradeSquareSupported =\n selectedAccount?.cexValue &&\n supportedExchangesById[selectedAccount?.cexValue]?.supportedFeatures.includes(\"trade_square\") &&\n environment === ViewEnvironment.WIDGET &&\n orderType === OrderType.MARKET;\n\n const isLimitOrderSupported = config ? !!config?.limit_order_ui && isGreaterVersion(\"1.72.3\") : undefined;\n\n const shouldUseTradeSquare = Boolean(form?.tokenFrom && isTradeSquareSupported && params.form?.noCommonMarket);\n\n const {\n droplistDestinationTokens,\n isLoading: droplistDestinationTokensAreLoading,\n error: droplistDestinationTokensError,\n tradePath,\n } = useTradePath({\n accountId: selectedAccount?.value || \"\",\n fromToken: tokenFrom?.value || \"\",\n toToken: form?.tokenTo?.value,\n activeWithdrawal: false,\n enabled: !!isTradeSquareSupported,\n });\n\n const _fetchPortfolioAssetOfSelectedCex = async () => {\n if (selectedAccount) {\n if (!activeVault?.id) return;\n\n const transferWalletTypes = supportedExchangesById[selectedAccount.cexValue]?.transferWalletTypes;\n // TODO standardise the common methods between the trusted and the untrusted api\n let accountBalances: BalancesByToken = {};\n if (environment === ViewEnvironment.WIDGET) {\n const balances = await backgroundHandler.balances({\n vaultId: activeVault.id,\n accountIds: [selectedAccount.value],\n walletTypes: transferWalletTypes,\n opts: {\n forceRefresh: true,\n },\n });\n accountBalances = balances[selectedAccount.value];\n } else {\n const balances = await backgroundHandler.getBalances({\n vaultId: activeVault.id,\n accountIds: [selectedAccount.value],\n walletTypes: transferWalletTypes,\n opts: {\n forceRefresh: true,\n },\n });\n\n const balancesByWalletType = balances[selectedAccount.value];\n if (!balancesByWalletType) return;\n\n accountBalances = balancesByWalletTypeToBalancesByToken(balancesByWalletType);\n if (!accountBalances) return;\n }\n const assetPortfolio: AvailableAssets = Object.entries(accountBalances)\n .map(([tokenSymbol, balance]) => {\n const searchableTerms = [tokenSymbol];\n\n const tokenName = balance.tokenName;\n if (tokenName) {\n searchableTerms.push(tokenName);\n }\n\n const asset: AvailableAssets[number] = {\n img: forgeTokenURL(tokenSymbol),\n label: tokenSymbol,\n value: tokenSymbol,\n balance: formatBalance(balance.freeBalance || 0),\n freeBalance: balance.freeBalance || 0,\n amount: balance.refFreeBalance.toFixed(2),\n ...(searchableTerms && {\n searchableTerms,\n }),\n };\n return asset;\n })\n .filter((asset) => Number(asset.amount) > 0)\n .sort((a, b) => Number(b.amount) - Number(a.amount));\n\n return assetPortfolio;\n }\n\n return [];\n };\n\n const { data: assetsFrom, isLoading: isLoadingBalances } = useQuery({\n queryKey: [\"fetchPortfolioAssetPeriodicaly\", selectedAccount, activeVault],\n queryFn: _fetchPortfolioAssetOfSelectedCex,\n // staleTime and refetchInterval has to contain the same value because if the validity\n // is > than the refetch interval the refetch will retrieve the data from the cache\n staleTime: BALANCE_DEFAULT_TTL / 2,\n refetchInterval: BALANCE_DEFAULT_TTL / 2,\n });\n\n /**\n * Fetches all pairs and tickers from selected cex\n */\n const loadMarkets = async () => {\n if (!activeVault || !selectedAccount) return;\n setMarkets([]);\n const resMarkets = await backgroundHandler.getMarketPairs({\n accountId: selectedAccount.value,\n });\n setMarkets(resMarkets);\n };\n\n /**\n * Computes the price for the selected trade path. The amount is in the destination token.\n */\n const computePriceForTradePath = async () => {\n let price = \"0\";\n if (!tradePath || !selectedAccount) return price;\n for (const path of tradePath) {\n const marketRate = (await backgroundHandler.getMarketRate({\n accountId: selectedAccount.value,\n pairSymbol: path.pairSymbol,\n })) as MarketRate;\n const sellPriceInDestinationToken =\n path.orderSide === \"sell\" ? marketRate.bid : ccxt.Precise.stringDiv(\"1\", marketRate.ask);\n price = price === \"0\" ? sellPriceInDestinationToken : ccxt.Precise.stringMul(price, sellPriceInDestinationToken);\n }\n return price;\n };\n\n /**\n * Fetches the market price for the selected pair or for the trade path.\n * For buy orders, the price is the ask price.\n * For sell orders, the price is the bid price.\n */\n const { data: marketRate } = useQuery({\n queryKey: [\"updateMarketRate\", tradePath, form?.market?.pairSymbol, selectedAccount, activeVault],\n queryFn: async () => {\n if (!activeVault || !selectedAccount) return EMPTY_RATE;\n\n if (!form?.market && tradePath) {\n const tradePathPrice = await computePriceForTradePath();\n return {\n bid: tradePathPrice.toString(),\n ask: tradePathPrice.toString(),\n };\n }\n return await backgroundHandler.getMarketRate({\n accountId: selectedAccount.value,\n pairSymbol: form?.market?.pairSymbol,\n });\n },\n staleTime: BALANCE_DEFAULT_TTL / 2,\n refetchInterval: BALANCE_DEFAULT_TTL / 2,\n enabled:\n !!backgroundHandler?.isReady &&\n selectedAccount !== null &&\n activeVault !== null &&\n (form?.market?.pairSymbol !== undefined || tradePath !== undefined),\n });\n\n const { data: popularTokens } = useQuery({\n queryKey: [\"popularTokens\"],\n queryFn: fetchPopularTokens,\n staleTime: Infinity,\n refetchInterval: Infinity,\n });\n\n /**\n * When token from is selected, find all tradable assets\n */\n const { assetsTo, underlyingMarkets, assetsToAreLoading, isLoadingUnderlyingMarkets } = useMemo<{\n underlyingMarkets: MarketPair[];\n assetsTo: AvailableAssets;\n assetsToAreLoading: boolean;\n isLoadingUnderlyingMarkets: boolean;\n }>(() => {\n if (!tokenFrom) {\n return {\n assetsTo: [],\n underlyingMarkets: [],\n assetsToAreLoading: false,\n isLoadingUnderlyingMarkets: false,\n };\n }\n\n if (!markets.length) {\n return {\n assetsTo: [],\n underlyingMarkets: [],\n assetsToAreLoading: true,\n isLoadingUnderlyingMarkets: true,\n };\n }\n let tokensAvailable: DropListWithIconItem<{\n balance: string;\n freeBalance: number;\n amount: string;\n }>[] = [];\n const underlyingMarkets: MarketPair[] = markets.filter(\n (market) => market.base === tokenFrom.label || market.quote === tokenFrom.label,\n );\n\n // If trade square feature supported, we allow the user to select all the available destination tokens\n if (isTradeSquareSupported) {\n // If the destination tokens are loading, we return the previous assetsTo\n // to avoid the flickering of the droplist\n if (droplistDestinationTokensAreLoading && !droplistDestinationTokens?.length) {\n return {\n assetsTo: prevAssetsTo.current,\n underlyingMarkets,\n assetsToAreLoading: true,\n isLoadingUnderlyingMarkets: false,\n };\n }\n tokensAvailable = (droplistDestinationTokens || []).map((token) => {\n // We use assets owned by the user to get the balance\n const assetOwnedByUser = assetsFrom?.find((asset) => asset.value === token.value);\n\n const asset: AvailableAssets[number] = {\n value: token.value,\n label: token.label,\n img: forgeTokenURL(token.value),\n balance: assetOwnedByUser?.balance || \"0\",\n freeBalance: assetOwnedByUser?.freeBalance || 0,\n amount: assetOwnedByUser?.amount || \"0\",\n };\n return asset;\n });\n } else {\n // If trade square feature not supported, we allow the user to select only the destination tokens\n // which have a common market with the source token\n tokensAvailable = underlyingMarkets.map((market) => {\n const tokenSymbol = market.base === tokenFrom.label ? market.quote : market.base;\n\n const tokenNameSymbol = tokenNamesAndSymbols.find((token) => token.symbol === tokenSymbol);\n\n const searchableTerms = [tokenSymbol];\n\n if (tokenNameSymbol?.name) {\n searchableTerms.push(tokenNameSymbol.name);\n }\n\n // We use assets owned by the user to get the balance\n const assetOwnedByUser = assetsFrom?.find((asset) => asset.value === tokenSymbol);\n\n const asset: AvailableAssets[number] = {\n value: tokenSymbol,\n label: tokenSymbol,\n img: forgeTokenURL(tokenSymbol),\n ...(searchableTerms && {\n searchableTerms,\n }),\n balance: assetOwnedByUser?.balance || \"0\",\n freeBalance: assetOwnedByUser?.freeBalance || 0,\n amount: assetOwnedByUser?.amount || \"0\",\n };\n return asset;\n });\n }\n\n const newAssetsTo = tokensAvailable.filter(\n (obj, index, self) => index === self.findIndex((t) => t[\"value\"] === obj[\"value\"]),\n );\n\n return {\n assetsTo: newAssetsTo,\n underlyingMarkets,\n assetsToAreLoading: false,\n isLoadingUnderlyingMarkets: false,\n };\n }, [markets, tokenFrom, assetsFrom, isTradeSquareSupported, droplistDestinationTokens]);\n\n useEffect(() => {\n prevAssetsTo.current = assetsTo;\n }, [assetsTo]);\n\n return {\n isLoadingBalances,\n isLoadingUnderlyingMarkets,\n assetsFrom: assetsFrom ?? [],\n assetsTo,\n assetsToAreLoading,\n underlyingMarkets,\n loadMarkets,\n marketRate: marketRate ?? EMPTY_RATE,\n tradePath,\n shouldUseTradeSquare,\n droplistDestinationTokensError,\n droplistDestinationTokensAreLoading,\n popularTokens: popularTokens ?? [],\n markets,\n isLimitOrderSupported,\n };\n};\n","import { Any, userFacingMessages } from \"@cede/types\";\n\n/**\n * Get the error message from an error. Used in the UI to display the error to the user.\n */\nexport const getErrorMessage = (error: Any, defaultMessage = userFacingMessages.UNKNOWN_ERROR): string => {\n if (error?.isBaseError) {\n return error.userFacingDescription;\n }\n\n // This case happens when the error comes from an RPC request\n if (error?.data?.userFacingDescription) {\n return error.data.userFacingDescription;\n }\n\n return defaultMessage;\n};\n","import { useEffect, useRef } from \"react\";\nimport { Any } from \"@cede/types\";\n\n/**\n * Trigger an effect only once when a condition is met.\n *\n * @param effect - The effect to trigger.\n * @param triggerCondition - The condition to trigger the effect or not. (should return true to trigger the effect)\n * @param dependencies - The dependencies to watch for changes\n * @param resetDependencies - if any of these dependencies change, it will be able to trigger the effect again (if the trigger condition is met).\n */\nexport const useEffectOnce = (\n effect: React.EffectCallback,\n triggerCondition: () => boolean,\n dependencies: Any[],\n resetDependencies: Any[],\n) => {\n const hasTriggered = useRef(false);\n\n useEffect(() => {\n if (triggerCondition() && !hasTriggered.current) {\n hasTriggered.current = true;\n effect();\n }\n }, dependencies);\n\n useEffect(() => {\n hasTriggered.current = false;\n }, resetDependencies);\n};\n","import { useEffect, useState } from \"react\";\nimport { Any } from \"@cede/types\";\nimport { useEffectOnce } from \"./useEffectOnce\";\n\nexport const useTriggerEffect = (effect: () => boolean, dependencies: Any[]) => {\n const [trigger, setTrigger] = useState(false);\n\n useEffect(() => {\n const result = effect();\n if (result !== trigger) {\n setTrigger(result);\n }\n }, dependencies);\n\n return trigger;\n};\n\nexport const useTriggerEffectOnce = (\n effect: () => boolean,\n triggerCondition: () => boolean,\n dependencies: Any[],\n resetDependencies: Any[],\n) => {\n const [trigger, setTrigger] = useState(false);\n\n useEffectOnce(\n () => {\n const result = effect();\n if (result && !trigger) {\n setTrigger(true);\n }\n },\n triggerCondition,\n dependencies,\n resetDependencies,\n );\n\n return trigger;\n};\n","import { TradePathData } from \"@cede/types\";\n\nexport const getTradePathLabel = (tradePath: TradePathData[]) => {\n return tradePath.reduce((acc, path) => acc + ` → ${path.to}`, tradePath[0]?.from || \"\");\n};\n","import { useEffect, useRef, useState } from \"react\";\nimport { Any, userFacingMessages } from \"@cede/types\";\nimport { CEDE_CEX_LABELS, formatBalance } from \"@cede/utils\";\nimport { useDependencies } from \"../../../hooks/useDependencies\";\nimport { UseTradeRepeatParams } from \"../types\";\nimport { AlertTypes } from \"@cedelabs/react-utils\";\n\n// @TODO: Change to Transaction Type\n\nexport const useRepeatTrade: (params: UseTradeRepeatParams) => {\n assetFromLoading: boolean;\n assetToLoading: boolean;\n} = ({ useLocation, useAlert, dispatchForm, assetsFrom, assetsTo, tradeForm, resetAmounts, setFocusedInput }) => {\n const _location = useLocation();\n const { useAccounts } = useDependencies();\n const { droplistAccounts } = useAccounts();\n const _locationState = _location.state as Any;\n const prefillingForm = _locationState !== null;\n const [assetFromLoading, setAssetFromLoading] = useState<boolean>(prefillingForm);\n const [assetToLoading, setAssetToLoading] = useState<boolean>(prefillingForm);\n const hasBeenPrefilledRef = useRef(false);\n\n const setHasBeenPrefilled = (value: boolean) => {\n hasBeenPrefilledRef.current = value;\n };\n\n const _appendAlert = useAlert((state) => state.append);\n\n const _prefillSelectedCex = (transaction: Any) => {\n const selectedAccount = droplistAccounts?.find((account) => account.label === transaction.account.label);\n if (!selectedAccount) {\n return _appendAlert(userFacingMessages.TRANSACTION.ACCOUNT_NOT_FOUND, AlertTypes.ERROR);\n }\n dispatchForm({ field: \"selectedAccount\", value: selectedAccount });\n };\n\n const _prefillTokenFrom = (transaction: Any) => {\n const tokenFrom = assetsFrom.find((asset) => asset.label === transaction.currency.tokenSymbol);\n if (!tokenFrom) {\n return _appendAlert(userFacingMessages.TRANSACTION.TOKEN_FROM_NOT_FOUND, AlertTypes.ERROR);\n }\n dispatchForm({ field: \"tokenFrom\", value: tokenFrom });\n };\n\n const _prefillTokenToAndAmountFrom = (transaction: Any) => {\n const tokenTo = assetsTo.find((asset) => asset.label === transaction.tradeFields?.currencyTo.tokenSymbol);\n if (!tokenTo) {\n const exchangeId = CEDE_CEX_LABELS[tradeForm.selectedAccount?.cexValue || \"\"];\n return _appendAlert(\n `Token pair ${transaction.currency.tokenSymbol}/${transaction.tradeFields?.currencyTo.tokenSymbol} not found on ${exchangeId}`,\n AlertTypes.ERROR,\n );\n }\n dispatchForm({ field: \"tokenTo\", value: tokenTo });\n setFocusedInput(\"amountFrom\");\n\n dispatchForm({ field: \"amountFrom\", value: formatBalance(transaction.currency.amount) });\n };\n\n // Complete some fields if we can prefill info\n useEffect(() => {\n if (!droplistAccounts) return;\n if (prefillingForm && droplistAccounts.length > 0 && !hasBeenPrefilledRef.current && !tradeForm.selectedAccount) {\n _prefillSelectedCex(_locationState.transaction);\n }\n }, [droplistAccounts]);\n\n useEffect(() => {\n if (prefillingForm && assetsFrom.length > 0 && !hasBeenPrefilledRef.current) {\n _prefillTokenFrom(_locationState.transaction);\n }\n }, [assetsFrom]);\n\n useEffect(() => {\n if (tradeForm.tokenFrom && tradeForm.tokenTo && tradeForm.amountFrom && tradeForm.selectedAccount) {\n setHasBeenPrefilled(true);\n }\n }, [tradeForm.tokenFrom, tradeForm.tokenTo, tradeForm.amountFrom, tradeForm.selectedAccount]);\n\n useEffect(() => {\n if (\n prefillingForm &&\n assetsTo.length > 0 &&\n tradeForm.tokenFrom?.label === _locationState.transaction.currency.tokenSymbol &&\n !hasBeenPrefilledRef.current\n ) {\n _prefillTokenToAndAmountFrom(_locationState.transaction);\n }\n }, [assetsTo]);\n\n // Set loading to false when amountTo is set\n useEffect(() => {\n if (prefillingForm && tradeForm.amountTo !== \"0\") {\n setAssetFromLoading(false);\n setAssetToLoading(false);\n }\n }, [tradeForm.amountTo]);\n\n useEffect(() => {\n if (!prefillingForm && !assetFromLoading && !assetToLoading) {\n resetAmounts();\n }\n }, [tradeForm.tokenFrom]);\n\n return {\n assetFromLoading,\n assetToLoading,\n prefillingForm,\n };\n};\n","import { QueryClient } from \"@tanstack/react-query\";\n\nlet queryClient: QueryClient;\nexport const getQueryClient = () => {\n if (!queryClient) {\n queryClient = new QueryClient({\n defaultOptions: {\n queries: {\n refetchOnWindowFocus: false,\n },\n },\n });\n }\n\n return queryClient;\n};\n","import {\n CefiInfoTx,\n DefiInfoTx,\n ExchangeToStandarizedChainsMapping,\n StandardizedChain,\n TradeConfirmationLocationState,\n TradeForm,\n Transaction,\n TxStatus,\n WalletType,\n isCefiInfoTx,\n} from \"@cede/types\";\nimport { QueryKeys } from \"@cede/utils\";\nimport { SendForm } from \"../../components/Send/types\";\nimport { getQueryClient } from \"../../utils\";\nimport { create } from \"zustand\";\n\ntype SelectedTransactionState = {\n reset: () => void;\n setTransaction: (transaction: Transaction | null) => void;\n transaction: null | Transaction;\n networkLabel: string | null;\n error: string | null;\n errorCode: number | null;\n setError: (error: string | null, errorCode: number) => void;\n resetError: VoidFunction;\n total: null | number;\n totalFiatValue: null | number;\n isTrade: boolean;\n isSend: boolean;\n isReceive: boolean;\n};\n\n// This store is used to pass the transaction from the Send page to the SendConfirmation page\n// and fill the CompletedTransaction and CompletedTransactionDetails pages\nexport const useSelectedTransaction = create<SelectedTransactionState>((set) => ({\n transaction: null,\n error: null,\n errorCode: null,\n total: null,\n totalFiatValue: null,\n networkLabel: null,\n isTrade: false,\n isSend: false,\n isReceive: false,\n reset: () => {\n set({ transaction: null, error: null }, false);\n },\n setTransaction: (transaction: Transaction | null) => {\n set(() => {\n if (!transaction) {\n return { transaction: null, error: null, networkLabel: null, total: null, totalFiatValue: null };\n }\n\n const standardizedNetworks = getQueryClient().getQueryData<ExchangeToStandarizedChainsMapping>([\n QueryKeys.STANDARDIZED_NETWORKS,\n ]);\n\n const totalFiatValue =\n transaction && isCefiInfoTx(transaction.from) ? transaction?.from.transaction.refAmount ?? 0 : 0;\n\n const total = transaction?.from.transaction.fee.refAmount ?? 0 + totalFiatValue;\n\n const isTrade = transaction?.type === \"order\";\n\n const isSend = transaction?.type === \"withdrawal\" && isCefiInfoTx(transaction.from);\n\n const isReceive = transaction?.type === \"deposit\" && isCefiInfoTx(transaction.to);\n\n const exchangeId = isCefiInfoTx(transaction.from)\n ? transaction.from.account.exchangeId\n : isCefiInfoTx(transaction.to)\n ? transaction.to.account.exchangeId\n : undefined;\n const infoTx = isCefiInfoTx(transaction.from)\n ? transaction.from\n : isCefiInfoTx(transaction.to)\n ? transaction.to\n : undefined;\n\n const standardizedNetwork = standardizedNetworks?.[exchangeId ?? \"\"]?.find(\n (network: StandardizedChain) =>\n network.icid === infoTx?.account.network || network.ecid === infoTx?.account.network,\n );\n\n const networkLabel = standardizedNetwork?.icn ?? transaction.to.account.network ?? \"unknown\";\n\n return { transaction, isTrade, isSend, isReceive, total, totalFiatValue, networkLabel };\n });\n },\n setError: (error: string | null, errorCode: number) => {\n set(() => ({ error, errorCode }));\n },\n resetError: () => {\n set(() => ({\n error: null,\n errorCode: null,\n }));\n },\n}));\n\n// todo remove this function and adapt generateFakeTradeTransactionFromStore when we migrate to store from the location state for the trade flow\nexport function generateFakeTradeTransactionTradeForm(form: TradeForm): Transaction<CefiInfoTx, CefiInfoTx> {\n return {\n type: \"order\",\n pairSymbol: form.market?.pairSymbol,\n from: {\n account: {\n exchangeId: form.selectedAccount?.cexValue ?? \"\",\n accountId: form.selectedAccount?.value ?? \"\",\n },\n wallet: {\n walletType: WalletType.SPOT,\n depositAddress: \"\",\n },\n transaction: {\n amount: Number(form.amountFrom) ?? 0,\n refAmount: 0,\n tokenSymbol: form.tokenFrom?.value ?? \"\",\n transactionId: \"\",\n fee: { amount: 0, tokenSymbol: form.tokenFrom?.value ?? \"\" },\n status: TxStatus.FAILED,\n timestamp: Date.now(),\n },\n },\n to: {\n account: {\n exchangeId: form.selectedAccount?.cexValue ?? \"\",\n accountId: form.selectedAccount?.value ?? \"\",\n },\n wallet: {\n walletType: WalletType.SPOT,\n depositAddress: \"\",\n },\n transaction: {\n amount: Number(form.amountTo) ?? 0,\n refAmount: 0,\n tokenSymbol: form.tokenTo?.value ?? \"\",\n transactionId: \"\",\n fee: { amount: 0, tokenSymbol: form.tokenTo?.value ?? \"\" },\n status: TxStatus.FAILED,\n timestamp: Date.now(),\n },\n },\n };\n}\n\nexport function generateFakeTradeTransactionFromStore(\n form: TradeConfirmationLocationState,\n): Transaction<CefiInfoTx, CefiInfoTx> {\n return {\n type: \"order\",\n pairSymbol: form.market?.pairSymbol,\n from: {\n account: {\n exchangeId: form.account?.cexValue ?? \"\",\n accountId: form.account?.value ?? \"\",\n },\n wallet: {\n walletType: WalletType.SPOT,\n depositAddress: \"\",\n },\n transaction: {\n amount: Number(form.amountFrom) ?? 0,\n refAmount: 0,\n tokenSymbol: form.tokenFrom?.value ?? \"\",\n transactionId: \"\",\n fee: { amount: 0, tokenSymbol: form.tokenFrom?.value ?? \"\" },\n status: TxStatus.FAILED,\n timestamp: Date.now(),\n },\n },\n to: {\n account: {\n exchangeId: form.account?.cexValue ?? \"\",\n accountId: form.account?.value ?? \"\",\n },\n wallet: {\n walletType: WalletType.SPOT,\n depositAddress: \"\",\n },\n transaction: {\n amount: Number(form.amountTo) ?? 0,\n refAmount: 0,\n tokenSymbol: form.tokenTo?.value ?? \"\",\n transactionId: \"\",\n fee: { amount: 0, tokenSymbol: form.tokenTo?.value ?? \"\" },\n status: TxStatus.FAILED,\n timestamp: Date.now(),\n },\n },\n };\n}\n\n// This function is used to generate a fake transaction from the Send page when the withdraw function fails\nexport function generateFakeSendTransactionFromStore(form: SendForm, tokenPrice: number) {\n const transaction: Transaction<CefiInfoTx, DefiInfoTx> = {\n from: {\n account: {\n exchangeId: form.fromAccount?.cexValue ?? \"\",\n accountId: form.fromAccount?.value ?? \"\",\n network: form.network?.value ?? \"\",\n },\n wallet: {\n depositAddress: form.recipientAddress ?? \"\",\n walletType: WalletType.SPOT,\n },\n transaction: {\n amount: Number(form.assetValue) ?? 0,\n refAmount: Number(form.assetValue) * tokenPrice ?? 0,\n tokenSymbol: form.currency?.value ?? \"\",\n transactionId: \"\",\n fee: { amount: 0, tokenSymbol: form.currency?.value ?? \"\" },\n status: TxStatus.FAILED,\n timestamp: Date.now(),\n },\n },\n to: {\n account: {\n address: form.recipientAddress ?? \"\",\n network: form.network?.value ?? \"\",\n },\n transaction: {\n transactionHash: \"\",\n fee: { amount: 0, refAmount: 0, tokenSymbol: \"\" },\n status: TxStatus.FAILED,\n timestamp: Date.now(),\n tokens: [\n {\n amount: Number(form.assetValue) ?? 0,\n refAmount: Number(form.assetValue) * tokenPrice ?? 0,\n tokenSymbol: form.currency?.value ?? \"\",\n address: \"\",\n },\n ],\n },\n },\n type: \"withdrawal\",\n };\n\n return transaction;\n}\n","import { create } from \"zustand\";\n\ntype TabItem<T> = {\n value: T;\n label: string;\n disabled?: boolean;\n};\n\ntype UseTabsFactoryState<T extends string> = {\n selectedTab: T;\n setSelectedTab: (tab: T) => void;\n};\n\nexport const useTabsFactory = <T extends string>(tabs: TabItem<T>[]) =>\n create<UseTabsFactoryState<T>>((set) => ({\n selectedTab: tabs[0]?.value || (\"\" as T),\n setSelectedTab: (tab) => {\n if (tabs.some((item) => item.value === tab)) {\n set({ selectedTab: tab });\n }\n },\n }));\n","import { OrderType } from \"@cede/types\";\nimport { useTabsFactory } from \"../../../store\";\n\nexport const tradeTabs = [\n { value: OrderType.LIMIT, label: \"Limit\", disabled: false }, // TODO: Enable when limit order is implemented\n { value: OrderType.MARKET, label: \"Market\", disabled: false },\n];\n\nexport const useTradeTabs = useTabsFactory(tradeTabs);\n","export const htmlExports = {\n popupHtml: \"/popup.html\",\n requestHtml: \"/request.html\",\n requestOnboardingHtml: \"/requestOnboarding.html\",\n};\n","import { Button } from \"@cede/ds\";\nimport { ApiPermissions, DropListWithIconItem, ViewEnvironment, userFacingMessages } from \"@cede/types\";\nimport { STORE_ROUTES } from \"@cede/utils\";\nimport { useDependencies } from \"../../hooks\";\nimport { htmlExports } from \"../../utils\";\nimport { useTheme } from \"@mui/material\";\n\nexport const DroplistMissingPermission = ({\n option,\n}: {\n option: DropListWithIconItem<{ cexValue?: string; permissions?: ApiPermissions[] }>;\n}) => {\n const { useViewEnvironment, useSettings, useNavigate, backgroundHandler } = useDependencies();\n const theme = useTheme();\n const { environment } = useViewEnvironment();\n const navigate = useNavigate();\n const { extensionUrl } = useSettings();\n\n return (\n <Button\n variant=\"text\"\n sx={{\n \"padding\": 0,\n \"color\": theme.palette.primary.main,\n \"height\": \"auto\",\n \"fontSize\": \"14px\",\n \"&:hover\": {\n background: \"inherit\",\n opacity: \".6\",\n },\n }}\n onClick={() => {\n if (!option.cexValue) return;\n\n const url = `${STORE_ROUTES.STATE_MACHINE_ROUTER}?accountId=${option.value}&fmState=EditApiKeysPermissions&mode=update`;\n\n if (environment === ViewEnvironment.WIDGET) {\n return window.open(`${extensionUrl}${htmlExports.popupHtml.replace(\"/\", \"\")}#${url}`, \"_blank\");\n }\n\n if (environment === ViewEnvironment.TAB) {\n return navigate(url);\n }\n\n backgroundHandler?.openTab({\n route: url,\n });\n }}\n >\n {userFacingMessages.EXCHANGES_STATUSES.ADD_PERMISSION}\n </Button>\n );\n};\n","import { themeConfig } from \"@cede/utils\";\nimport { create } from \"zustand\";\n\nexport type UseLayoutState = {\n tabContainerWidth: string;\n setTabContainerWidth: (tabContainerSize: string) => void;\n tabContainerHeight: string;\n setTabContainerHeight: (tabContainerSize: string) => void;\n resetTabContainerSize: () => Promise<void>;\n};\n\nexport type UseLayoutHook = () => UseLayoutState;\n\nexport const useLayout = create<UseLayoutState>((set) => ({\n tabContainerWidth: themeConfig.custom.storeSize.tabWidth,\n tabContainerHeight: themeConfig.custom.storeSize.tabHeight,\n setTabContainerWidth: (tabContainerWidth) => set({ tabContainerWidth }),\n setTabContainerHeight: (tabContainerHeight) => set({ tabContainerHeight }),\n resetTabContainerSize: async () => {\n set({\n tabContainerWidth: themeConfig.custom.storeSize.tabWidth,\n tabContainerHeight: themeConfig.custom.storeSize.tabHeight,\n });\n await new Promise((resolve) => setTimeout(resolve, 300));\n },\n}));\n","import { Dispatch, FormEventHandler, MutableRefObject, ReactElement } from \"react\";\nimport { DropListWithIconItem, ValidateFunction, ValidateFunctionReturnValue, ValidationTextFieldRef } from \"@cede/ds\";\nimport {\n Any,\n ApiPermissions,\n CurrencyDropListWithIconItem,\n FiatCurrency,\n MarketNetwork,\n SendWidgetConfig,\n SupportedTokensDropListWithIconItem,\n TradePathData,\n} from \"@cede/types\";\nimport { DropListWhitelistedAddress } from \"../../hooks\";\nimport { QueryObserverResult } from \"@tanstack/react-query\";\n\nexport enum AddressInputType {\n WHITELIST = \"whitelist\",\n ADDRESS_BOOK = \"addressBook\",\n}\n\nexport type PresentationalSendProps = {\n controller: UseSendState<SendForm>;\n disableAddressBook?: boolean;\n};\n\nexport type WithdrawMinAmountProps = {\n controller: UseSendState<SendForm>;\n};\n\nexport type SendFormAccount = DropListWithIconItem<{\n amount: string;\n cexValue: string;\n permissions: ApiPermissions[];\n isOauth: boolean;\n}>;\n\nexport type ShouldPrefillObject = {\n tokenSymbol: boolean;\n network: boolean;\n address: boolean;\n amount: boolean;\n account: boolean;\n};\n\nexport type SendForm = {\n shouldPrefill?: ShouldPrefillObject;\n fromAccount: SendFormAccount | null;\n initialProps: SendWidgetConfig;\n currency: CurrencyDropListWithIconItem | null;\n assetValue: string;\n whitelistedAddress: DropListWhitelistedAddress | undefined;\n refValue: string;\n network: DropListWithIconItem<{\n withdrawMin?: string;\n withdrawFee?: string;\n [key: string]: Any;\n }> | null;\n destinationCurrency: SupportedTokensDropListWithIconItem | null;\n tagValue: string;\n recipientAddress: string | null; // Equivalent to Address Key for Kraken\n toAccount: SendFormAccount | null;\n tutorialIsOpen: boolean;\n isDemo: boolean;\n};\n\nexport type AmountInputRefValue = { validate: () => void };\n\nexport type CheckWhitelistFunction = () => Promise<QueryObserverResult<boolean, unknown>>;\n\nexport type UseSendState<T = SendForm> = {\n form: T;\n dispatchInput: Dispatch<FormAction<T>>;\n validateAddress: ValidateFunction<string>;\n droplistAddressBook: DropListWithIconItem[];\n droplistWhitelistedAddresses: DropListWhitelistedAddress[];\n isValid: boolean;\n setMaxAssetValue: VoidFunction;\n validateAssetValue: ValidateFunction<string | number>;\n submit: FormEventHandler<HTMLFormElement>;\n fromAccounts: DropListWithIconItem<{\n amount: string;\n permissions: ApiPermissions[];\n cexValue: string;\n isOauth: boolean;\n isLoading?: boolean;\n }>[];\n toAccounts: DropListWithIconItem<{ amount: string }>[];\n currencies: CurrencyDropListWithIconItem[];\n droplistDestinationTokens: SupportedTokensDropListWithIconItem[];\n droplistDestinationTokensAreLoading: boolean;\n droplistDestinationTokensError: Error | null;\n minAmountIsLoading: boolean;\n networks: DropListWithIconItem<Partial<MarketNetwork>>[];\n allNetworks: DropListWithIconItem<Partial<MarketNetwork>>[];\n switchSelectedCexs: VoidFunction;\n warningMessage: string;\n networksAreLoading: boolean;\n fiatCurrency: FiatCurrency;\n currenciesAreLoading: boolean;\n areAccountsLoading?: boolean;\n isOauth?: boolean;\n addressInputType: AddressInputType;\n isWhitelistedAddressesLoading: boolean;\n needWhitelist: boolean;\n displayWhitelistTooltip: boolean;\n tutorialIsOpen: boolean;\n recipientAddress: string;\n setIsRecipientInputFocused: (isFocused: boolean) => void;\n setTutorialIsOpen: (isOpen: boolean) => void;\n handleAddAddressManually: () => void;\n addCexRedirect?: VoidFunction;\n isAddressWhitelisted?: boolean;\n isDefiTab: boolean;\n isBetweenCexTab: boolean;\n checkWhitelist: CheckWhitelistFunction;\n disabledCexText: (\n v: DropListWithIconItem<{ cexValue?: string; permissions?: ApiPermissions[] }>,\n ) => string | JSX.Element;\n shouldDisableCex: (v: DropListWithIconItem<{ cexValue?: string; permissions?: ApiPermissions[] }>) => boolean;\n validateAssetValueRef: MutableRefObject<ValidationTextFieldRef | undefined>;\n shouldUseTradeAndSend: boolean;\n isTradeSendConfirmModalOpened: boolean;\n setTradeSendConfirmModalOpened: (isOpen: boolean) => void;\n onTradeSendModalContinue: () => void;\n isTutorialCheckboxChecked: boolean;\n setIsTutorialCheckboxChecked: (isChecked: boolean) => void;\n minAmount: string | undefined;\n tradePath: TradePathData[] | null | undefined;\n isDemo: boolean;\n refValue: string;\n formErrors: Record<string, ReactElement | string>;\n};\n\nexport type FilteredAccounts = {\n fromAccounts: UseSendState[\"fromAccounts\"];\n toAccounts: UseSendState[\"fromAccounts\"];\n};\n\nexport type FormAction<T> = {\n field: keyof T | \"all\" | \"switch-accounts\";\n value?: T[keyof T] | T;\n};\n\nexport type ValidateAssetFunction = () => ValidateFunctionReturnValue;\n","import { useTabsFactory } from \"../../../store\";\n\nexport enum SendTabsValues {\n DefiAddress = \"defi-address\",\n BetweenCex = \"between-cex\",\n}\n\nexport const sendTabs = [\n { value: SendTabsValues.DefiAddress, label: \"To a defi address\", disabled: false },\n { value: SendTabsValues.BetweenCex, label: \"Between CEX\", disabled: false },\n];\n\nexport const useSendTabs = useTabsFactory(sendTabs);\n","import { useMemo } from \"react\";\nimport { ApiPermissions, ViewEnvironment } from \"@cede/types\";\nimport { useDependencies } from \"../../../hooks/useDependencies\";\nimport { DroplistMissingPermission } from \"../../DroplistMissingPermission/DroplistMissingPermission\";\nimport { AddressInputType, FilteredAccounts, SendFormAccount, UseSendState } from \"../types\";\nimport { SendTabsValues, useSendTabs } from \"./useSendTabs\";\n\nexport const useSendApi = () => {\n const {\n useSendStore,\n useSupportedExchanges,\n useVaults,\n useWithdrawableBalances,\n useAddressBook,\n useAccounts,\n useNetworks,\n useWhitelistedAddresses,\n useViewEnvironment,\n useTriggerLoadingConditionally,\n useTradePath,\n useBackgroundHandler,\n } = useDependencies();\n const { selectedTab } = useSendTabs();\n const { activeVault } = useVaults();\n const form = useSendStore();\n const { supportedExchangesById, shouldDisableCex, disabledCexText, isSupportedExchangesLoading } =\n useSupportedExchanges();\n const { backgroundHandler } = useBackgroundHandler();\n const { environment } = useViewEnvironment();\n\n useTriggerLoadingConditionally({\n isLoading:\n !!backgroundHandler?.isReady && (isSupportedExchangesLoading || Object.keys(supportedExchangesById).length === 0),\n });\n\n const isSendSupported =\n !form.fromAccount?.cexValue ||\n supportedExchangesById[form.fromAccount.cexValue]?.supportedFeatures.includes(\"send\");\n\n const isTradeAndSendSupported =\n form.fromAccount?.cexValue &&\n supportedExchangesById[form.fromAccount.cexValue]?.supportedFeatures.includes(\"trade_and_send\") &&\n environment === ViewEnvironment.WIDGET;\n\n const {\n droplistDestinationTokens,\n isLoading: droplistDestinationTokensAreLoading,\n error: droplistDestinationTokensError,\n tradePath,\n } = useTradePath({\n enabled: !!isTradeAndSendSupported,\n accountId: form.fromAccount?.value ?? \"\",\n fromToken: form.currency?.value ?? \"\",\n network: form.network?.value ?? \"\",\n toToken: form.destinationCurrency?.value ?? \"\",\n activeWithdrawal: true,\n });\n\n const {\n droplistNetworks: tokenDroplistNetworks,\n networksAreLoading,\n networksByValue,\n } = useNetworks({\n toDeposit: false,\n toWithdraw: true,\n accountId: form.fromAccount?.value ?? \"\",\n tokenSymbol: form.currency?.value,\n isInternalTransfer: !!form.initialProps.isInternalTransfer,\n });\n\n const isNetworkDisabledForSelectedCurrency = useMemo(() => {\n return droplistDestinationTokens\n .find((token) => form.currency?.value === token.value)\n ?.networks.some((n) => n.network === form.network?.value && !n.withdrawalEnabled);\n }, [droplistDestinationTokens, form.currency, form.network]);\n\n const shouldUseTradeAndSend = Boolean(\n networksByValue &&\n form.network &&\n (!networksByValue[form.network?.network] || isNetworkDisabledForSelectedCurrency) &&\n form.currency &&\n droplistDestinationTokens &&\n isTradeAndSendSupported,\n );\n\n const { droplistNetworks: droplistAllNetworks } = useNetworks({\n toDeposit: false,\n toWithdraw: true,\n accountId: form.fromAccount?.value ?? \"\",\n isInternalTransfer: !!form.initialProps.isInternalTransfer,\n });\n\n const { totalBalancesByAccountId } = useWithdrawableBalances(\n !isTradeAndSendSupported ? form.network?.value : undefined,\n );\n\n const { droplistWhitelistedAddresses, isWhitelistedAddressesLoading, refetchWhitelistedAddresses } =\n useWhitelistedAddresses({\n accountId: form.fromAccount?.value ?? \"\",\n tokenSymbol: shouldUseTradeAndSend ? form.destinationCurrency?.value : form.currency?.value,\n network: form.network?.value,\n });\n const { droplistAddressBook } = useAddressBook();\n const { droplistAccounts, accountsByIds, areAccountsLoading } = useAccounts();\n\n const addressInputType = useMemo(() => {\n if (supportedExchangesById[form.fromAccount?.cexValue ?? \"\"]?.provideWhitelistedAddresses) {\n return AddressInputType.WHITELIST;\n }\n return AddressInputType.ADDRESS_BOOK;\n }, [form.fromAccount, supportedExchangesById]);\n\n // we must update the droplist networks after selecting the token to get fees and withdrawal limits\n const droplistNetworks = !isTradeAndSendSupported && form.currency ? tokenDroplistNetworks : droplistAllNetworks;\n\n const isReceiveSupported =\n !form.toAccount?.cexValue || supportedExchangesById[form.toAccount.cexValue]?.supportedFeatures.includes(\"receive\");\n\n const isSendAllowed = form.fromAccount && form.fromAccount.permissions.includes(ApiPermissions.WITHDRAW);\n\n const accounts: UseSendState[\"fromAccounts\"] = useMemo(() => {\n return droplistAccounts.map((account) => ({\n ...account,\n isLoading:\n (totalBalancesByAccountId.totalBalances[account.value]?.isLoading === undefined ??\n !!totalBalancesByAccountId.totalBalances[account.value]?.isLoading) &&\n !account.isDisabled,\n amount: totalBalancesByAccountId.totalBalances[account.value]?.total.toString() ?? \"0\",\n isOauth: !!accountsByIds[account.value]?.isOauth,\n }));\n }, [activeVault?.accounts, totalBalancesByAccountId, droplistAccounts]);\n\n const { fromAccounts, toAccounts } = useMemo(() => {\n const filteredAccounts: FilteredAccounts = { fromAccounts: [], toAccounts: [] };\n if (!supportedExchangesById) return filteredAccounts;\n\n const filterAccounts = (selectedAccount?: SendFormAccount | null) => {\n return accounts.filter(\n (account) =>\n supportedExchangesById[account.cexValue]?.supportedFeatures.includes(\"send\") &&\n selectedAccount?.value !== account.value,\n );\n };\n\n if (form.toAccount) {\n filteredAccounts.fromAccounts = filterAccounts(form.toAccount);\n }\n\n filteredAccounts.fromAccounts = accounts.filter((account) =>\n supportedExchangesById[account.cexValue]?.supportedFeatures.includes(\"send\"),\n );\n filteredAccounts.toAccounts = filterAccounts(form.fromAccount);\n\n return filteredAccounts;\n }, [supportedExchangesById, accounts, form.toAccount, form.fromAccount]);\n\n const isDefiTab = selectedTab === SendTabsValues.DefiAddress;\n const isBetweenCexTab = selectedTab === SendTabsValues.BetweenCex;\n\n return {\n isSendAllowed,\n isSendSupported,\n isReceiveSupported,\n droplistCurrencies: totalBalancesByAccountId.droplistCurrenciesByAccountId[form.fromAccount?.value ?? \"\"],\n areCurrenciesLoading: !totalBalancesByAccountId.totalBalances[form.fromAccount?.value ?? \"\"] ?? false,\n fromAccounts,\n toAccounts,\n droplistNetworks,\n droplistAllNetworks,\n networksAreLoading,\n droplistAddressBook,\n isWhitelistedAddressesLoading,\n refetchWhitelistedAddresses,\n droplistWhitelistedAddresses,\n droplistDestinationTokens,\n droplistDestinationTokensError,\n droplistDestinationTokensAreLoading,\n shouldUseTradeAndSend,\n areAccountsLoading: areAccountsLoading || isSupportedExchangesLoading,\n isDefiTab,\n isBetweenCexTab,\n shouldDisableCex: shouldDisableCex(\"send\"),\n disabledCexText: disabledCexText(\"send\", DroplistMissingPermission),\n addressInputType,\n tradePath,\n };\n};\n","import { useMemo } from \"react\";\nimport { AddressBookItem, DropListWithIconItem } from \"@cede/types\";\nimport { QueryKeys, STORE_ROUTES } from \"@cede/utils\";\nimport { useDependencies } from \"../hooks/useDependencies\";\nimport { useQuery } from \"@tanstack/react-query\";\n\nexport const useAddressBook = () => {\n const { backgroundHandler, useNavigate, useGlobalMenu } = useDependencies();\n const setIsOpen = useGlobalMenu((state) => state.setIsOpen);\n const navigate = typeof useNavigate === \"function\" ? useNavigate() : () => undefined;\n\n const {\n data: addressBook,\n refetch,\n isLoading,\n isError,\n } = useQuery<AddressBookItem[], Error>({\n queryKey: [QueryKeys.ADDRESS_BOOK],\n queryFn: async () => {\n if (!backgroundHandler?.isReady) return [];\n const addressBook = await backgroundHandler.getAddressBook();\n return addressBook;\n },\n enabled: !!backgroundHandler?.isReady,\n staleTime: 0,\n gcTime: 0,\n });\n\n const droplistAddressBook: DropListWithIconItem[] = useMemo(() => {\n if (!addressBook) return [];\n\n return addressBook.map<DropListWithIconItem>((book) => {\n return {\n img: \"\",\n name: book.name,\n value: book.address,\n label: book.name,\n };\n });\n }, [addressBook]);\n\n const goBack = () => {\n navigate(-1);\n setIsOpen(true);\n };\n\n const addAddress = () => {\n navigate(STORE_ROUTES.ADD_ADDRESS_ROUTE, { state: { mode: \"add\" } });\n };\n\n const modifyAddress = (item: AddressBookItem) => {\n navigate(STORE_ROUTES.ADD_ADDRESS_ROUTE, { state: { item, mode: \"edit\" } });\n };\n\n return {\n addressBook,\n isAddressBookLoading: isLoading,\n isAddressBookError: isError,\n droplistAddressBook,\n goBack,\n addAddress,\n modifyAddress,\n refetchAddressBook: refetch,\n };\n};\n","import { useEffect, useMemo, useState } from \"react\";\nimport { ValidateFunction } from \"@cede/ds\";\nimport { useAddressBook } from \"../../../hooks\";\nimport { useDependencies } from \"../../../hooks/useDependencies\";\nimport { getQueryClient } from \"../../../utils\";\nimport { AddressInputType, SendForm, ValidateAssetFunction } from \"../types\";\nimport { SendTabsValues, useSendTabs } from \"./useSendTabs\";\nimport { useQuery } from \"@tanstack/react-query\";\n\ntype UseSendValidationProps = {\n shouldUseTradeAndSend?: boolean;\n addressInputType: AddressInputType;\n supportedTokensAreLoading: boolean;\n};\n\nexport const useSendValidation = ({\n shouldUseTradeAndSend = false,\n addressInputType,\n supportedTokensAreLoading,\n}: UseSendValidationProps) => {\n const {\n useSendStore,\n useSupportedExchanges,\n backgroundHandler,\n useVaults,\n useLoading,\n useSendMinAmount,\n useWhitelistedAddresses,\n useTradePath,\n } = useDependencies();\n const { selectedTab } = useSendTabs();\n const { isBlockingLoading } = useLoading((state) => ({\n isBlockingLoading: state.isBlockingLoading,\n }));\n const { supportedExchangesById } = useSupportedExchanges();\n const form = useSendStore();\n const { tradePath } = useTradePath({\n enabled: shouldUseTradeAndSend,\n accountId: form.fromAccount?.value ?? \"\",\n fromToken: form.currency?.value ?? \"\",\n toToken: form.destinationCurrency?.value ?? \"\",\n network: form.network?.value ?? \"\",\n activeWithdrawal: true,\n });\n const { droplistAddressBook } = useAddressBook();\n const { activeVault } = useVaults();\n const [needWhitelist, setNeedWhitelist] = useState(false);\n const [isTutorialCheckboxChecked, setIsTutorialCheckboxChecked] = useState(false);\n const [displayWhitelistTooltip, setDisplayWhitelistTooltip] = useState(false);\n const queryClient = getQueryClient();\n const { droplistWhitelistedAddresses, isWhitelistedAddressesError } = useWhitelistedAddresses({\n accountId: form.fromAccount?.value ?? \"\",\n tokenSymbol: form.destinationCurrency?.value ?? form.currency?.value,\n network: form.network?.value,\n });\n const { minAmount, minAmountIsLoading } = useSendMinAmount({ shouldUseTradeAndSend, supportedTokensAreLoading });\n // For CEXs requiring whitelist, the user needs to pick an address from the whitelisted addresses, It cannot be invalid\n // For other CEXs, there is no validation\n const validateAddressWhitelist: ValidateFunction<string> = () => {\n if (!droplistAddressBook && addressInputType === AddressInputType.ADDRESS_BOOK)\n return { color: \"error\", message: \"Couldn't retrieve the address book\" };\n else if (isWhitelistedAddressesError && addressInputType === AddressInputType.WHITELIST)\n return { color: \"error\", message: \"Couldn't retrieve the whitelisted addresses\" };\n return { color: \"success\" };\n };\n\n const { isRequiringWhitelist, shouldCheckWhitelist } = useMemo(() => {\n if (!supportedExchangesById || !form.fromAccount?.cexValue) {\n setNeedWhitelist(false);\n setDisplayWhitelistTooltip(false);\n\n return {\n isRequiringWhitelist: false,\n shouldCheckWhitelist: false,\n };\n }\n\n const isRequiringWhitelist =\n supportedExchangesById[form.fromAccount?.cexValue]?.isRequiringAddressWhitelisting || false;\n const shouldCheckWhitelist = supportedExchangesById[form.fromAccount?.cexValue]?.shouldCheckWhitelist;\n\n setDisplayWhitelistTooltip(isRequiringWhitelist);\n setNeedWhitelist(isRequiringWhitelist && !!shouldCheckWhitelist);\n\n return { isRequiringWhitelist, shouldCheckWhitelist };\n }, [form.fromAccount?.cexValue, supportedExchangesById]);\n\n useEffect(() => {\n queryClient.invalidateQueries({\n queryKey: [\n \"checkAddressIsWhitelisted\",\n form.recipientAddress,\n form.whitelistedAddress,\n form.currency,\n form.network,\n ],\n });\n }, [form.recipientAddress, form.whitelistedAddress, form.currency, form.network]);\n\n const { data: isAddressWhitelisted, refetch: checkWhitelist } = useQuery<boolean>({\n queryKey: [\n \"checkAddressIsWhitelisted\",\n form.fromAccount?.label,\n form.whitelistedAddress,\n form.recipientAddress,\n form.currency?.value,\n form.network?.value,\n activeVault?.id,\n {\n isRequiringWhitelist,\n shouldCheckWhitelist,\n },\n ],\n queryFn: async () => {\n if (!form.fromAccount || !form.currency || !form.recipientAddress || !activeVault) return undefined;\n if (!form.whitelistedAddress || form.whitelistedAddress.address !== form.recipientAddress) {\n return false;\n }\n\n const result = await backgroundHandler.checkAddressIsWhitelisted({\n accountId: form.fromAccount.value,\n key: form.whitelistedAddress.key,\n address: form.whitelistedAddress.address,\n tokenSymbol: form.currency.value,\n });\n\n return result;\n },\n enabled: !!backgroundHandler?.isReady && isRequiringWhitelist && shouldCheckWhitelist,\n });\n\n useEffect(() => {\n if (isAddressWhitelisted !== undefined) {\n setNeedWhitelist(!isAddressWhitelisted);\n setDisplayWhitelistTooltip(!isAddressWhitelisted);\n }\n }, [isAddressWhitelisted]);\n\n const validateAddress: ValidateFunction<string> = (v) => {\n if (!form.fromAccount?.cexValue) return { color: \"error\", message: \"No CEX selected\" };\n\n if (isRequiringWhitelist) {\n return validateAddressWhitelist(v);\n }\n\n // TODO we need to rework the address validation\n // // @TODO: Should we do a method to retrieve if the network is supported by the CEX?\n // let isValid;\n // try {\n // isValid = validateCoinAddress(v, form.network?.value || form.network?.default_network);\n // } catch (e) {\n // if (e instanceof Error) Logger.error(e);\n // isValid = /^(0x)[0-9A-Fa-f]{40}$/.test(v);\n // }\n // if (!isValid) {\n // return { color: \"error\", message: \"Invalid address\" };\n // }\n\n return { color: \"success\" };\n };\n\n const validateAssetValue: ValidateAssetFunction = () => {\n if (form.isDemo) {\n return {\n color: \"success\",\n };\n }\n\n const assetValueNumber = Number(form.assetValue);\n const withdrawMinWithFee = Number(minAmount || \"0\");\n\n if (assetValueNumber < withdrawMinWithFee) {\n return {\n color: \"error\",\n message: `The amount should be at least ${withdrawMinWithFee}`,\n };\n }\n\n if (form.currency?.balance && assetValueNumber > form.currency.freeBalance) {\n return {\n color: \"error\",\n message: `The amount should be max ${form.currency?.balance}`,\n };\n }\n\n return {\n color: \"success\",\n };\n };\n\n const validateForm = (form: SendForm): boolean => {\n return !!(\n Number(form.assetValue) &&\n // @TODO: Should we do a method to retrieve if the network is supported by the CEX?\n form.network &&\n form.fromAccount &&\n form.currency\n );\n };\n\n const shouldDisplayWhitelistTooltip =\n displayWhitelistTooltip && !isBlockingLoading && !!form.recipientAddress && !!form.currency && !!form.network;\n\n const isValid = useMemo(() => {\n return (\n ((shouldDisplayWhitelistTooltip && isTutorialCheckboxChecked) || !shouldDisplayWhitelistTooltip) &&\n (shouldUseTradeAndSend ? !!tradePath && tradePath.length > 0 : true) &&\n !minAmountIsLoading &&\n validateForm(form) &&\n validateAssetValue().color === \"success\" &&\n ((form.toAccount && selectedTab === SendTabsValues.BetweenCex) ||\n (form.recipientAddress != undefined &&\n form.recipientAddress != \"\" &&\n selectedTab === SendTabsValues.DefiAddress &&\n validateAddress(form.recipientAddress).color === \"success\" &&\n !needWhitelist))\n );\n }, [\n form,\n needWhitelist,\n droplistAddressBook,\n selectedTab,\n droplistWhitelistedAddresses,\n isTutorialCheckboxChecked,\n shouldDisplayWhitelistTooltip,\n minAmount,\n shouldUseTradeAndSend,\n tradePath,\n ]);\n\n return {\n validateAddress,\n validateAssetValue,\n isValid,\n isAddressWhitelisted,\n needWhitelist,\n checkWhitelist,\n setIsTutorialCheckboxChecked,\n isTutorialCheckboxChecked,\n displayWhitelistTooltip: shouldDisplayWhitelistTooltip,\n };\n};\n","import * as React from 'react';\nimport { getThemeProps, useThemeWithoutDefault as useTheme } from '@mui/system';\nimport useEnhancedEffect from '../utils/useEnhancedEffect';\n/**\n * @deprecated Not used internally. Use `MediaQueryListEvent` from lib.dom.d.ts instead.\n */\n\nfunction useMediaQueryOld(query, defaultMatches, matchMedia, ssrMatchMedia, noSsr) {\n const supportMatchMedia = typeof window !== 'undefined' && typeof window.matchMedia !== 'undefined';\n const [match, setMatch] = React.useState(() => {\n if (noSsr && supportMatchMedia) {\n return matchMedia(query).matches;\n }\n\n if (ssrMatchMedia) {\n return ssrMatchMedia(query).matches;\n } // Once the component is mounted, we rely on the\n // event listeners to return the correct matches value.\n\n\n return defaultMatches;\n });\n useEnhancedEffect(() => {\n let active = true;\n\n if (!supportMatchMedia) {\n return undefined;\n }\n\n const queryList = matchMedia(query);\n\n const updateMatch = () => {\n // Workaround Safari wrong implementation of matchMedia\n // TODO can we remove it?\n // https://github.com/mui/material-ui/pull/17315#issuecomment-528286677\n if (active) {\n setMatch(queryList.matches);\n }\n };\n\n updateMatch(); // TODO: Use `addEventListener` once support for Safari < 14 is dropped\n\n queryList.addListener(updateMatch);\n return () => {\n active = false;\n queryList.removeListener(updateMatch);\n };\n }, [query, matchMedia, supportMatchMedia]);\n return match;\n} // eslint-disable-next-line no-useless-concat -- Workaround for https://github.com/webpack/webpack/issues/14814\n\n\nconst maybeReactUseSyncExternalStore = React['useSyncExternalStore' + ''];\n\nfunction useMediaQueryNew(query, defaultMatches, matchMedia, ssrMatchMedia) {\n const getDefaultSnapshot = React.useCallback(() => defaultMatches, [defaultMatches]);\n const getServerSnapshot = React.useMemo(() => {\n if (ssrMatchMedia !== null) {\n const {\n matches\n } = ssrMatchMedia(query);\n return () => matches;\n }\n\n return getDefaultSnapshot;\n }, [getDefaultSnapshot, query, ssrMatchMedia]);\n const [getSnapshot, subscribe] = React.useMemo(() => {\n if (matchMedia === null) {\n return [getDefaultSnapshot, () => () => {}];\n }\n\n const mediaQueryList = matchMedia(query);\n return [() => mediaQueryList.matches, notify => {\n // TODO: Use `addEventListener` once support for Safari < 14 is dropped\n mediaQueryList.addListener(notify);\n return () => {\n mediaQueryList.removeListener(notify);\n };\n }];\n }, [getDefaultSnapshot, matchMedia, query]);\n const match = maybeReactUseSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);\n return match;\n}\n\nexport default function useMediaQuery(queryInput, options = {}) {\n const theme = useTheme(); // Wait for jsdom to support the match media feature.\n // All the browsers MUI support have this built-in.\n // This defensive check is here for simplicity.\n // Most of the time, the match media logic isn't central to people tests.\n\n const supportMatchMedia = typeof window !== 'undefined' && typeof window.matchMedia !== 'undefined';\n const {\n defaultMatches = false,\n matchMedia = supportMatchMedia ? window.matchMedia : null,\n ssrMatchMedia = null,\n noSsr\n } = getThemeProps({\n name: 'MuiUseMediaQuery',\n props: options,\n theme\n });\n\n if (process.env.NODE_ENV !== 'production') {\n if (typeof queryInput === 'function' && theme === null) {\n console.error(['MUI: The `query` argument provided is invalid.', 'You are providing a function without a theme in the context.', 'One of the parent elements needs to use a ThemeProvider.'].join('\\n'));\n }\n }\n\n let query = typeof queryInput === 'function' ? queryInput(theme) : queryInput;\n query = query.replace(/^@media( ?)/m, ''); // TODO: Drop `useMediaQueryOld` and use `use-sync-external-store` shim in `useMediaQueryNew` once the package is stable\n\n const useMediaQueryImplementation = maybeReactUseSyncExternalStore !== undefined ? useMediaQueryNew : useMediaQueryOld;\n const match = useMediaQueryImplementation(query, defaultMatches, matchMedia, ssrMatchMedia, noSsr);\n\n if (process.env.NODE_ENV !== 'production') {\n // eslint-disable-next-line react-hooks/rules-of-hooks\n React.useDebugValue({\n query,\n match\n });\n }\n\n return match;\n}","import { ReactElement, useEffect, useMemo, useRef, useState } from \"react\";\nimport ccxt from \"@cede/ccxt\";\nimport { ValidationTextFieldRef, useNavBar } from \"@cede/ds\";\nimport { Any, ViewEnvironment, WithdrawToDefiParams, userFacingMessages } from \"@cede/types\";\nimport { CEDE_CEX_LABELS, QueryKeys, STORE_ROUTES, WIDGET_ROUTES, getCexLabel, getErrorMessage } from \"@cede/utils\";\nimport { DropListWhitelistedAddress } from \"../../../hooks\";\nimport { useDependencies } from \"../../../hooks/useDependencies\";\nimport { AlertTypes, generateFakeSendTransactionFromStore, useLayout } from \"../../../store\";\nimport { HelpLink } from \"../../HelpLink/HelpLink\";\nimport { AddressInputType, SendForm, UseSendState } from \"../types\";\nimport { useSendApi } from \"./useSendApi\";\nimport { useSendValidation } from \"./useSendValidation\";\nimport { getTradePathLabel } from \"./utils\";\nimport { Typography, useMediaQuery, useTheme } from \"@mui/material\";\nimport { useQueryClient } from \"@tanstack/react-query\";\n\ntype UseSendOpts = {\n addCex?: () => void;\n onSubmitDemo?: () => void;\n};\n\nexport const useSend: (opts?: UseSendOpts) => UseSendState<SendForm> = (opts) => {\n const {\n useSendStore,\n useSettings,\n useLoading,\n backgroundHandler,\n useAlert,\n useVaults,\n useNavigate,\n useViewEnvironment,\n usePrice,\n useSelectedTransaction,\n useAddressInputValue,\n useSendMinAmount,\n } = useDependencies();\n const { environment, source, origin } = useViewEnvironment();\n const addBigPendingRequest = useLoading((state) => state.addBigPendingRequest);\n const removeBigPendingRequest = useLoading((state) => state.removeBigPendingRequest);\n const setDescription = useLoading((state) => state.setDescription);\n const navigate = useNavigate();\n const { activeVault } = useVaults();\n const appendAlert = useAlert((state) => state.append);\n const form = useSendStore();\n const setTransaction = useSelectedTransaction((state) => state.setTransaction);\n const setError = useSelectedTransaction((state) => state.setError);\n const theme = useTheme();\n const isMobile = useMediaQuery(theme.breakpoints.down(\"md\"));\n const { setTabContainerWidth, setTabContainerHeight, resetTabContainerSize } = useLayout();\n const isDemo = backgroundHandler?.isReal === false;\n const {\n areCurrenciesLoading,\n droplistCurrencies,\n fromAccounts,\n toAccounts,\n networksAreLoading,\n droplistNetworks,\n droplistAllNetworks,\n droplistAddressBook,\n droplistWhitelistedAddresses,\n isWhitelistedAddressesLoading,\n droplistDestinationTokens,\n droplistDestinationTokensAreLoading,\n droplistDestinationTokensError,\n refetchWhitelistedAddresses,\n isSendAllowed,\n isSendSupported,\n isReceiveSupported,\n areAccountsLoading,\n isDefiTab,\n isBetweenCexTab,\n disabledCexText,\n shouldDisableCex,\n shouldUseTradeAndSend,\n addressInputType,\n tradePath,\n } = useSendApi();\n\n const {\n validateAddress,\n validateAssetValue,\n isValid,\n displayWhitelistTooltip,\n isAddressWhitelisted,\n checkWhitelist,\n isTutorialCheckboxChecked,\n setIsTutorialCheckboxChecked,\n needWhitelist,\n } = useSendValidation({\n addressInputType,\n shouldUseTradeAndSend,\n supportedTokensAreLoading: droplistDestinationTokensAreLoading,\n });\n const { minAmount, minAmountIsLoading } = useSendMinAmount({\n shouldUseTradeAndSend,\n supportedTokensAreLoading: droplistDestinationTokensAreLoading,\n });\n const { currency } = useSettings();\n const { dispatchInput, dispatchPrefill, setTutorialIsOpen, tutorialIsOpen } = form;\n const [isTradeSendConfirmModalOpened, setTradeSendConfirmModalOpened] = useState(false);\n const tokenPrice = usePrice(form.currency?.value ?? \"\");\n const config = form.initialProps;\n const queryClient = useQueryClient();\n const validateAssetValueRef = useRef<ValidationTextFieldRef>();\n const [isRecipientInputFocused, setIsRecipientInputFocused] = useState(false);\n const isSendSupportedRef = useRef(isSendSupported); // temporary quickfix to avoid showing the loader when the send supported status is fetched.\n\n const { value: recipientAddress } = useAddressInputValue({\n address: form.recipientAddress ?? undefined,\n isFocused: isRecipientInputFocused,\n });\n\n const switchToMinimalLayout = async () => {\n // If the tutorial is open, we await the resetTabContainerSize to let the transition finish\n if ((displayWhitelistTooltip && !isMobile) || isMobile) {\n await resetTabContainerSize();\n } else resetTabContainerSize();\n };\n\n const { setGoBack, setRightSide } = useNavBar();\n const goBack = async () => {\n form.reset();\n await switchToMinimalLayout();\n return environment !== ViewEnvironment.WIDGET ? navigate(STORE_ROUTES.VAULT_DETAILS_ROUTE) : navigate(-1);\n };\n\n const handleAddAddressManually = () => {\n if (addressInputType === AddressInputType.WHITELIST) {\n // Open the whitelist tutorial\n setTutorialIsOpen(true);\n return;\n }\n\n // @TODO: Can't implement this on widget side for now\n if (environment === ViewEnvironment.WIDGET) return;\n\n navigate(STORE_ROUTES.ADD_ADDRESS_ROUTE, {\n state: { mode: \"add\" },\n });\n };\n\n const addCexRedirect = () => {\n if (opts?.addCex) {\n opts.addCex();\n return;\n }\n\n if (environment === ViewEnvironment.WIDGET) {\n backgroundHandler?.addCex({});\n }\n };\n\n const submit: UseSendState[\"submit\"] = async (e) => {\n e.preventDefault();\n\n if (isDemo) {\n opts?.onSubmitDemo?.();\n return;\n }\n\n if (shouldUseTradeAndSend) {\n setTradeSendConfirmModalOpened(true);\n return;\n }\n\n addBigPendingRequest();\n\n if (isValid && activeVault && form.fromAccount && form.currency && form.recipientAddress && backgroundHandler) {\n await backgroundHandler\n .prepareWithdrawal({\n accountId: form.fromAccount?.value,\n tokenSymbol: form.currency?.value,\n amount: parseFloat(form.assetValue),\n network: form.network?.value,\n opts: {\n isInternalTransfer: config.isInternalTransfer,\n },\n })\n .catch((e: Error) => {\n appendAlert(getErrorMessage(e), AlertTypes.ERROR);\n });\n\n if (environment === ViewEnvironment.WIDGET) {\n setDescription(\n <>\n {userFacingMessages.WIDGETS.SEND.TRANSACTION_LOADING_FIRST_LINE}\n <br />\n {userFacingMessages.WIDGETS.SEND.TRANSACTION_LOADING_SECOND_LINE}\n </>,\n );\n try {\n if (!form.fromAccount || !form.currency || !form.assetValue || !form.recipientAddress || !form.network) {\n // TODO implement a way to throw custom errors on the frontend side\n throw new Error(\"Missing required fields\");\n }\n\n const address = form.recipientAddress;\n\n const params: WithdrawToDefiParams = {\n accountId: form.fromAccount.value,\n tokenSymbol: form.currency.value,\n amount: form.assetValue,\n address,\n network: form.network.value,\n isInternalTransfer: config.isInternalTransfer,\n metadata: {\n referrerSource: source,\n origin,\n clientTxId: config.clientTxId,\n callbackUrl: config.callbackUrl,\n },\n };\n if (form.tagValue !== \"\") {\n params.withdrawalTag = form.tagValue;\n }\n const transaction = await backgroundHandler.withdrawToDefi(params);\n backgroundHandler.emit(\"sendTxStatusUpdate\", {\n status: \"submitted\",\n });\n setTransaction(transaction);\n } catch (e: Any) {\n backgroundHandler.emit(\"sendTxStatusUpdate\", {\n status: \"failed\",\n });\n setError(getErrorMessage(e), e?.code);\n setTransaction(generateFakeSendTransactionFromStore(form, tokenPrice));\n } finally {\n setDescription(null);\n // Invalidate the withdrawable balances query to update the balances after the transaction\n queryClient.invalidateQueries({ queryKey: [QueryKeys.WITHDRAWABLE_CURRENCIES, form.fromAccount.value] });\n removeBigPendingRequest();\n navigate(WIDGET_ROUTES.COMPLETED_TRANSACTION_ROUTE);\n }\n return;\n }\n\n await switchToMinimalLayout();\n removeBigPendingRequest();\n navigate(STORE_ROUTES.CONFIRM_SEND_ROUTE);\n } else removeBigPendingRequest();\n };\n\n const onTradeSendModalContinue = () => {\n navigate(WIDGET_ROUTES.MULTIPLE_TRANSACTIONS);\n };\n\n useEffect(() => {\n if (addressInputType === AddressInputType.WHITELIST) {\n form.dispatchInput({ field: \"recipientAddress\", value: null });\n form.dispatchInput({ field: \"whitelistedAddress\", value: null });\n }\n }, [form.network, form.currency]);\n\n // Temporary quickfix to show the loader when the send supported status is fetched.\n // Otherwise the \"Send will be availble soon is shown\" is shown to the user.\n useEffect(() => {\n // we don't put the loader once we've fetched the send supported status\n if (isSendSupportedRef.current !== undefined) return;\n if (isSendSupported === undefined) {\n addBigPendingRequest();\n } else {\n removeBigPendingRequest();\n isSendSupportedRef.current = isSendSupported;\n }\n }, [isSendSupported]);\n\n const warningMessage = useMemo(() => {\n if (form.fromAccount && isSendSupported === false) {\n return `${CEDE_CEX_LABELS[form.fromAccount?.cexValue]} will be supported soon`;\n }\n\n if (form.toAccount && !isReceiveSupported) {\n return `${CEDE_CEX_LABELS[form.toAccount.cexValue]} will be supported soon`;\n }\n\n return \"\";\n }, [form.fromAccount, isSendAllowed, isSendSupported]);\n\n useEffect(() => {\n const selectedNetwork = form.network;\n if (selectedNetwork && !networksAreLoading && droplistNetworks.length) {\n // The network id might not change, properties like minWithdrawal could\n const updatedValue = droplistNetworks?.find((network) => network.network === selectedNetwork.network);\n dispatchInput({ field: \"network\", value: updatedValue });\n }\n }, [networksAreLoading, form.currency, droplistNetworks]);\n\n useEffect(() => {\n if (!tutorialIsOpen) refetchWhitelistedAddresses();\n }, [tutorialIsOpen]);\n\n const formErrors = useMemo(() => {\n if (!form.fromAccount) return {};\n const errors: Record<string, ReactElement | string> = {};\n\n if ((!droplistCurrencies || droplistCurrencies.length === 0) && !areCurrenciesLoading) {\n errors[\"tokenFrom\"] = (\n <Typography component={\"span\"} color={\"inherit\"}>\n {`You don't have tokens available to send. You may have some token locked on your ${getCexLabel(\n form.fromAccount?.cexValue || \"\",\n )} account, or you can deposit any asset directly by clicking `}\n <Typography\n sx={{\n textDecoration: \"underline\",\n cursor: \"pointer\",\n color: \"inherit\",\n }}\n component={\"span\"}\n onClick={() =>\n environment === ViewEnvironment.WIDGET\n ? backgroundHandler?.openTab({\n route: STORE_ROUTES.RECEIVE_ROUTE + `?&accountId=${form.fromAccount?.value}`,\n })\n : navigate(STORE_ROUTES.RECEIVE_ROUTE, {\n state: { currency: form.currency, account: form.fromAccount },\n })\n }\n >\n here.\n </Typography>\n </Typography>\n );\n }\n\n return errors;\n }, [form.fromAccount, droplistCurrencies, areCurrenciesLoading]);\n\n const prefillTokenSymbol = () => {\n if (config?.tokenSymbol && form.shouldPrefill?.tokenSymbol && form.fromAccount) {\n droplistCurrencies?.forEach((currency) => {\n if (currency.label === config.tokenSymbol) {\n dispatchInput({ field: \"currency\", value: currency });\n dispatchPrefill({\n tokenSymbol: false,\n });\n\n if (config.amount) {\n dispatchInput({ field: \"assetValue\", value: config.amount });\n dispatchPrefill({\n amount: false,\n });\n }\n }\n });\n }\n };\n\n const prefillNetwork = () => {\n if (config?.network && droplistNetworks && form.shouldPrefill?.network) {\n droplistNetworks?.forEach((network) => {\n if (network.network === config.network || network.chainId === config.network) {\n dispatchInput({ field: \"network\", value: network });\n dispatchPrefill({\n network: false,\n });\n }\n });\n }\n };\n\n const prefillAddress = () => {\n if (config?.address && form.shouldPrefill?.address) {\n dispatchInput({ field: \"recipientAddress\", value: config.address });\n dispatchPrefill({\n address: false,\n });\n }\n };\n\n const prefillWhitelistedAddress = () => {\n if (isWhitelistedAddressesLoading) return;\n let address: DropListWhitelistedAddress | undefined = undefined;\n // If a prefiled address is provided, we check if it's whitelisted\n if (config?.address && form.shouldPrefill?.address) {\n address = droplistWhitelistedAddresses.find(\n (address) => address.address.toLowerCase() === (config.address ?? \"\").toLocaleLowerCase(),\n );\n dispatchPrefill({\n address: false,\n });\n } // Else, if a network and a currency are selected and only one whitelisted address is available, we prefill the address\n else if (form.network && form.currency && droplistWhitelistedAddresses.length === 1) {\n address = droplistWhitelistedAddresses[0];\n }\n if (!address) {\n form.dispatchInput({ field: \"recipientAddress\", value: \"\" });\n form.dispatchInput({\n field: \"whitelistedAddress\",\n value: null,\n });\n return;\n }\n form.dispatchInput({ field: \"recipientAddress\", value: address?.address });\n form.dispatchInput({\n field: \"whitelistedAddress\",\n value: address,\n });\n };\n\n const prefillAccount = () => {\n if (config?.exchangeIds && config.exchangeIds.length === 1 && form.shouldPrefill?.account) {\n fromAccounts.forEach((account) => {\n if (config.exchangeIds?.includes(account.cexValue)) {\n dispatchInput({ field: \"fromAccount\", value: account });\n dispatchPrefill({\n account: false,\n });\n }\n });\n }\n\n // we need to clean the account value if the account is not part of the exchangeIds\n // example: available accounts are gateio and kraken, but okx is loaded from the persistent state\n if (config?.exchangeIds && config.exchangeIds.length > 1 && form.shouldPrefill?.account && form.fromAccount) {\n if (!config.exchangeIds.includes(form.fromAccount.cexValue)) {\n dispatchInput({ field: \"fromAccount\", value: null });\n dispatchPrefill({\n account: false,\n });\n }\n }\n };\n\n useEffect(() => {\n prefillAccount();\n }, [fromAccounts, form.shouldPrefill?.account, config]);\n\n useEffect(() => {\n prefillTokenSymbol();\n }, [form.fromAccount, droplistCurrencies, form.shouldPrefill?.tokenSymbol, config]);\n\n useEffect(() => {\n prefillNetwork();\n }, [form.currency, droplistNetworks, form.shouldPrefill?.network, config]);\n\n useEffect(() => {\n if (addressInputType === undefined) return;\n if (addressInputType === AddressInputType.WHITELIST) prefillWhitelistedAddress();\n else prefillAddress();\n }, [\n form.shouldPrefill?.address,\n config,\n addressInputType,\n droplistWhitelistedAddresses,\n form.network,\n form.currency,\n isWhitelistedAddressesLoading,\n ]);\n\n useEffect(() => {\n if (shouldUseTradeAndSend && form.destinationCurrency) {\n if (tradePath && tradePath[0]) {\n appendAlert(\n userFacingMessages.WIDGETS.TRADE_SEND.PERFORM_TRADE_PATH(\n getTradePathLabel(tradePath),\n form.network?.label || \"\",\n ),\n AlertTypes.INFO,\n );\n return;\n }\n }\n }, [shouldUseTradeAndSend, form.destinationCurrency, tradePath]);\n\n useEffect(() => {\n if (droplistDestinationTokensError) {\n appendAlert(getErrorMessage(droplistDestinationTokensError.message), AlertTypes.ERROR);\n }\n }, [droplistDestinationTokensError]);\n\n useEffect(() => {\n if (\n shouldUseTradeAndSend &&\n (!form.destinationCurrency ||\n // We want to change the destination currency to the first supported token if the selected one is not supported\n !droplistDestinationTokens.some((token) => token.value === form.destinationCurrency?.value))\n ) {\n dispatchInput({\n field: \"destinationCurrency\",\n value: droplistDestinationTokens[0],\n });\n }\n }, [droplistDestinationTokens, shouldUseTradeAndSend, form.destinationCurrency, form.network]);\n\n useEffect(() => {\n setGoBack(goBack);\n }, [displayWhitelistTooltip, isMobile]);\n\n useEffect(() => {\n setTransaction(null);\n }, []);\n\n useEffect(() => {\n if (!validateAssetValueRef.current) return;\n\n if ((form.network && !form.currency) || !minAmount || form.assetValue === \"\") {\n validateAssetValueRef.current.cancelValidation();\n return;\n }\n\n validateAssetValueRef.current.validate();\n }, [form.network, form.currency, minAmount]);\n\n useEffect(() => {\n if (!isMobile && displayWhitelistTooltip && environment) {\n setTabContainerWidth(theme.custom.storeSize.bigTabWidth);\n setTabContainerHeight(theme.custom.storeSize.bigTabHeight);\n\n if (environment !== ViewEnvironment.WIDGET) {\n setRightSide(null);\n }\n } else if (isMobile && environment) {\n setTabContainerWidth(\"100vw\");\n setTabContainerHeight(\"100vh\");\n\n if (environment !== ViewEnvironment.WIDGET) {\n setRightSide(<HelpLink />);\n }\n }\n\n return () => {\n resetTabContainerSize();\n\n if (environment && environment !== ViewEnvironment.WIDGET) {\n setRightSide(<HelpLink />);\n }\n };\n }, [isMobile, displayWhitelistTooltip, environment]);\n\n useEffect(() => {\n if (backgroundHandler) {\n form.setIsDemo(isDemo);\n }\n }, [isDemo, backgroundHandler]);\n\n return {\n // #Form\n form,\n dispatchInput,\n switchSelectedCexs: form.switchAccounts,\n setMaxAssetValue: form.setMaxAssetValue,\n submit,\n setIsRecipientInputFocused,\n\n // #Validation\n validateAddress,\n validateAssetValue,\n isValid,\n displayWhitelistTooltip,\n isAddressWhitelisted,\n checkWhitelist,\n validateAssetValueRef,\n isTutorialCheckboxChecked,\n setIsTutorialCheckboxChecked,\n\n // #Data\n fromAccounts:\n config?.exchangeIds && config.exchangeIds.length > 0\n ? fromAccounts.filter((account) => config.exchangeIds?.includes(account.cexValue))\n : fromAccounts,\n toAccounts,\n currencies: droplistCurrencies ?? [],\n currenciesAreLoading: areCurrenciesLoading,\n areAccountsLoading,\n networks:\n config?.network && config?.lockNetwork\n ? droplistNetworks.filter((network) => network.network === config.network)\n : droplistNetworks,\n allNetworks: droplistAllNetworks,\n networksAreLoading,\n droplistAddressBook,\n droplistWhitelistedAddresses,\n fiatCurrency: currency,\n isOauth: form.fromAccount?.isOauth,\n needWhitelist,\n isDefiTab,\n isBetweenCexTab,\n disabledCexText,\n shouldDisableCex,\n recipientAddress,\n addressInputType,\n isWhitelistedAddressesLoading,\n droplistDestinationTokens,\n droplistDestinationTokensError,\n droplistDestinationTokensAreLoading,\n shouldUseTradeAndSend: !!shouldUseTradeAndSend,\n minAmount,\n minAmountIsLoading,\n tradePath,\n refValue: isDemo ? ccxt.Precise.stringMul(form.assetValue, String(tokenPrice)) : form.refValue,\n\n // #Send logic\n tutorialIsOpen,\n setTutorialIsOpen,\n warningMessage,\n handleAddAddressManually,\n isTradeSendConfirmModalOpened,\n setTradeSendConfirmModalOpened,\n onTradeSendModalContinue,\n\n formErrors,\n\n // #Add CEX\n addCexRedirect,\n\n // #Demo\n isDemo,\n };\n};\n","import { MarketRate, OrderSide } from \"@cede/types\";\n\nexport const getCurrentRate = (marketRate: MarketRate | undefined, orderSide: OrderSide) => {\n if (!marketRate) return \"0\";\n return orderSide === \"buy\" ? marketRate.ask : marketRate.bid;\n};\n","import { useMemo, useState } from \"react\";\nimport ccxt from \"@cede/ccxt\";\nimport {\n DropListWithIconItem,\n GroupedBalancesByAccount,\n Order,\n OrderStatus,\n OrderType,\n PreparedOrder,\n TradePathData,\n} from \"@cede/types\";\nimport {\n forgeTokenURL,\n getCurrentRate,\n getErrorMessage,\n getExchangeLogo,\n orderToTransactionMapper,\n unformatNumberAsString,\n} from \"@cede/utils\";\nimport { AlertTypes, useDependencies } from \"..\";\nimport {\n MultipleTransactionsPreparedOrder,\n MultipleTransactionsPreparedWithdrawal,\n} from \"./useMultipleTransactionsStore\";\n\nexport const isMultipleTransactionsPreparedOrder = (\n transaction: MultipleTransactionsPreparedOrder | MultipleTransactionsPreparedWithdrawal,\n): transaction is MultipleTransactionsPreparedOrder => {\n return \"from\" in transaction;\n};\n\nexport const getLastOrderTransaction = (\n transactions: (MultipleTransactionsPreparedOrder | MultipleTransactionsPreparedWithdrawal)[],\n) => {\n for (const transaction of [...transactions].reverse()) {\n if (isMultipleTransactionsPreparedOrder(transaction)) {\n return transaction;\n }\n }\n return null;\n};\n\nexport type UseMultipleTransactionsParams = {\n accountId: string;\n fromTokenAmount: string;\n onFinish?: () => void;\n tradePath: TradePathData[] | undefined | null;\n /**\n * Only for withdrawals\n */\n activeWithdrawal?: boolean;\n whitelistedAddress?: string;\n recipientAddress?: string;\n network?: DropListWithIconItem;\n withdrawalTag?: string;\n};\n\nexport const useMultipleTransactions = ({\n accountId,\n fromTokenAmount,\n tradePath,\n onFinish,\n activeWithdrawal = false,\n recipientAddress,\n network,\n withdrawalTag,\n whitelistedAddress,\n}: UseMultipleTransactionsParams) => {\n const {\n backgroundHandler,\n useAlert,\n useSelectedTransaction,\n useVaults,\n useSupportedExchanges,\n useTriggerLoadingConditionally,\n useViewEnvironment,\n useMultipleTransactionsStore,\n useAccounts,\n useTradeForm,\n } = useDependencies();\n const { accountsByIds } = useAccounts();\n const account = accountsByIds[accountId];\n const { source, origin } = useViewEnvironment();\n const { activeVault } = useVaults();\n const appendAlert = useAlert((state) => state.append);\n const {\n transactions,\n setTransactions,\n clear: clearState,\n startProcess,\n hasStartedTheProcess,\n } = useMultipleTransactionsStore();\n const setExecutedTransactionData = useSelectedTransaction((state) => state.setTransaction);\n const [isTxLoading, setIsTxLoading] = useState(false);\n const { supportedExchangesById, isSupportedExchangesLoading } = useSupportedExchanges();\n\n useTriggerLoadingConditionally({\n isLoading: isSupportedExchangesLoading || Object.keys(supportedExchangesById).length === 0,\n });\n\n const { tradeForm } = useTradeForm();\n const config = tradeForm.initialProps;\n\n const txTracker = useMemo(() => {\n return transactions.filter((tx) => tx.isExecuted).length;\n }, [transactions]);\n\n const _fitTxAmountToTokenFreeBalance = (\n amountTo: number,\n tokenSymbol: string,\n balances: GroupedBalancesByAccount,\n ) => {\n const accountBalance = balances[accountId ?? \"\"];\n if (!accountBalance) return amountTo;\n const tokenFreeBalance = accountBalance[tokenSymbol]?.freeBalance || 0;\n\n // If the amount is higher than the free balance, we need to update the amount to be sure the next transaction\n // won't fail due to insufficient balance\n return Math.min(amountTo, tokenFreeBalance);\n };\n\n const _awaitOrderToBeFilled = async (orderData: Order) => {\n const _handler = async (resolve: (value: Order) => unknown) => {\n const order: Order = await backgroundHandler.retrieveOrder({\n accountId: accountId ?? \"\",\n orderId: orderData.id,\n pairSymbol: orderData.pairSymbol,\n });\n\n if (order.status === OrderStatus.CLOSED) {\n resolve(order);\n return;\n }\n\n setTimeout(() => {\n _handler(resolve);\n }, 1000);\n };\n return new Promise(_handler);\n };\n\n const _getOrdersFromTradePath = async (\n executedTransactions: MultipleTransactionsPreparedOrder[],\n ): Promise<MultipleTransactionsPreparedOrder[]> => {\n if (!tradePath) return [];\n\n const preparedOrders: MultipleTransactionsPreparedOrder[] = executedTransactions;\n for (const path of tradePath) {\n const { pairSymbol, orderSide, from, to } = path;\n\n if (executedTransactions.find((tx) => isMultipleTransactionsPreparedOrder(tx) && tx.to.tokenSymbol === to)) {\n continue; // Skip already executed transactions\n }\n\n const marketRate = await backgroundHandler.getMarketRate({\n accountId,\n pairSymbol: pairSymbol,\n });\n const currentRate = getCurrentRate(marketRate, orderSide);\n const amount =\n preparedOrders.length === 0\n ? String(unformatNumberAsString(fromTokenAmount))\n : preparedOrders[preparedOrders.length - 1]?.to.amount || \"0\";\n const baseAmount = orderSide === \"sell\" ? amount : ccxt.Precise.stringDiv(amount, currentRate);\n const orderRequest: PreparedOrder = await backgroundHandler.prepareOrder({\n accountId,\n pairSymbol,\n orderSide,\n orderType: OrderType.MARKET,\n amount: baseAmount,\n price: currentRate,\n });\n orderRequest.createOrderRequest.metadata = {\n tradeAndSend: true,\n };\n\n // Create the transaction\n preparedOrders.push({\n from: {\n amount,\n tokenSymbol: from,\n img: forgeTokenURL(from),\n },\n to: {\n amount:\n orderSide === \"sell\"\n ? ccxt.Precise.stringMul(orderRequest.estimatedAmount, orderRequest.createOrderRequest.price)\n : orderRequest.estimatedAmount,\n tokenSymbol: to,\n img: forgeTokenURL(to),\n },\n request: orderRequest.createOrderRequest,\n estimatedFee: orderRequest.estimatedFee,\n isExecuted: false,\n exchange: {\n label: account?.accountName ?? \"\",\n img: getExchangeLogo(account?.exchangeId ?? \"\"),\n },\n });\n }\n\n return preparedOrders;\n };\n\n const _getWithdrawal = (tokenSymbol: string, amount: string): MultipleTransactionsPreparedWithdrawal => {\n const address = recipientAddress;\n return {\n network: {\n label: network?.label ?? \"\",\n img: network?.img ?? \"\",\n value: network?.value ?? \"\",\n },\n request: {\n accountId,\n amount: amount ?? \"0\",\n tokenSymbol: tokenSymbol ?? \"\",\n address: address ?? \"\",\n network: network?.value ?? \"\",\n withdrawalTag: withdrawalTag ?? \"\",\n metadata: {\n tradeAndSend: true,\n referrerSource: source,\n origin,\n },\n },\n isExecuted: false,\n exchange: {\n label: account?.accountName ?? \"\",\n img: getExchangeLogo(account?.exchangeId ?? \"\"),\n },\n };\n };\n\n const _prepareTransactions = async (\n executedTransactions: (MultipleTransactionsPreparedOrder | MultipleTransactionsPreparedWithdrawal)[] = [],\n ) => {\n // If all txs are already executed, we don't need to prepare anything\n if (executedTransactions.length === (tradePath?.length || 0) + 1) {\n return;\n }\n\n setIsTxLoading(true);\n const preparedOrders = await _getOrdersFromTradePath(\n executedTransactions.filter(isMultipleTransactionsPreparedOrder),\n );\n\n const lastOrder = preparedOrders[preparedOrders.length - 1];\n\n if (!lastOrder) {\n // Should never happen\n return;\n }\n\n if (activeWithdrawal) {\n const preparedWithdrawal = _getWithdrawal(lastOrder.to.tokenSymbol, lastOrder.to.amount);\n setTransactions([...preparedOrders, preparedWithdrawal]);\n } else {\n setTransactions(preparedOrders);\n }\n setIsTxLoading(false);\n };\n\n const executeNextTransaction = async () => {\n if (isTxLoading || !transactions.length) return;\n\n if (transactions.every((tx) => tx.isExecuted)) {\n onFinish?.();\n return;\n }\n\n setIsTxLoading(true);\n try {\n // Execute the transaction\n const transactionToExecute = transactions[txTracker];\n\n if (!transactionToExecute) return;\n\n if (isMultipleTransactionsPreparedOrder(transactionToExecute)) {\n // Execute the order\n const createOrderResponse: Order = await backgroundHandler.createOrder({\n ...transactionToExecute.request,\n accountId: account?.id ?? \"\",\n metadata: {\n defiAddress: localStorage.getItem(\"defiAddress\") ?? undefined,\n },\n });\n setTimeout(() => {\n config?.onTradeSubmitted?.(createOrderResponse);\n }, 3000);\n // Wait for the order to be filled\n const orderResponse = await _awaitOrderToBeFilled(createOrderResponse);\n\n // Update the portfolio before allowing the user to execute the next transaction\n // to ensure the balance is up to date for the internal transfer\n const transferWalletTypes = supportedExchangesById[account?.exchangeId ?? \"\"]?.transferWalletTypes;\n const balances = await backgroundHandler.balances({\n vaultId: activeVault?.id,\n accountIds: [account?.id],\n walletTypes: transferWalletTypes,\n opts: { forceRefresh: true },\n });\n\n const transaction = orderToTransactionMapper({\n ...orderResponse,\n accountId: account?.id ?? \"\",\n exchangeId: account?.exchangeId ?? \"\",\n });\n\n // Update the transaction data for the CompletedTransaction page\n setExecutedTransactionData(transaction);\n\n // If the fees are in quote currency, we need to update the amount\n let updatedToAmount =\n orderResponse.fee.tokenSymbol === transaction.to.transaction.tokenSymbol\n ? transaction.to.transaction.amount - transaction.to.transaction.fee.amount\n : transaction.to.transaction.amount;\n\n updatedToAmount = _fitTxAmountToTokenFreeBalance(\n updatedToAmount,\n transaction.to.transaction.tokenSymbol,\n balances,\n );\n\n // Update transaction state\n const newTransactions = [...transactions];\n const transactionToUpdate = { ...newTransactions[txTracker] } as MultipleTransactionsPreparedOrder;\n transactionToUpdate.isExecuted = true;\n transactionToUpdate.to.amount = String(updatedToAmount);\n transactionToUpdate.from.amount = String(transaction.from.transaction.amount);\n newTransactions[txTracker] = transactionToUpdate;\n\n await _prepareTransactions(newTransactions.filter((tx) => tx.isExecuted));\n return;\n }\n\n // Execute the withdrawal\n await backgroundHandler.prepareWithdrawal({\n accountId: account?.id,\n tokenSymbol: transactionToExecute.request.tokenSymbol,\n amount: parseFloat(transactionToExecute.request.amount),\n network: network?.value,\n opts: {\n key: whitelistedAddress,\n tradeAndSend: true,\n },\n });\n\n const transaction = await backgroundHandler.withdrawToDefi(transactionToExecute.request);\n\n // Update the transaction data for the CompletedTransaction page\n setExecutedTransactionData(transaction);\n\n const newTransactions = [...transactions];\n const transactionToUpdate = { ...newTransactions[txTracker] } as MultipleTransactionsPreparedWithdrawal;\n transactionToUpdate.isExecuted = true;\n newTransactions[txTracker] = transactionToUpdate;\n setTransactions(newTransactions);\n return;\n } catch (e) {\n appendAlert(getErrorMessage(e), AlertTypes.ERROR);\n } finally {\n setIsTxLoading(false);\n }\n };\n\n return {\n /**\n * Is truthy when the transactions are computing or being executed\n */\n isTxLoading,\n transactions,\n executeNextTransaction,\n txTracker,\n clearState,\n loadTransactions: _prepareTransactions,\n /**\n * Store in memory the process has started (to redirect the user to the multiple transactions page\n * if the user refreshes the page)\n */\n startProcess,\n /**\n * Check if the process has started (to redirect the user to the multiple transactions page\n * if the user refreshes the page)\n */\n hasStartedTheProcess,\n };\n};\n","// src/queriesObserver.ts\nimport { notifyManager } from \"./notifyManager.js\";\nimport { QueryObserver } from \"./queryObserver.js\";\nimport { Subscribable } from \"./subscribable.js\";\nimport { replaceEqualDeep } from \"./utils.js\";\nfunction difference(array1, array2) {\n return array1.filter((x) => !array2.includes(x));\n}\nfunction replaceAt(array, index, value) {\n const copy = array.slice(0);\n copy[index] = value;\n return copy;\n}\nvar QueriesObserver = class extends Subscribable {\n #client;\n #result;\n #queries;\n #observers;\n #combinedResult;\n #lastCombine;\n #lastResult;\n constructor(client, queries, _options) {\n super();\n this.#client = client;\n this.#queries = [];\n this.#observers = [];\n this.#result = [];\n this.setQueries(queries);\n }\n onSubscribe() {\n if (this.listeners.size === 1) {\n this.#observers.forEach((observer) => {\n observer.subscribe((result) => {\n this.#onUpdate(observer, result);\n });\n });\n }\n }\n onUnsubscribe() {\n if (!this.listeners.size) {\n this.destroy();\n }\n }\n destroy() {\n this.listeners = /* @__PURE__ */ new Set();\n this.#observers.forEach((observer) => {\n observer.destroy();\n });\n }\n setQueries(queries, _options, notifyOptions) {\n this.#queries = queries;\n notifyManager.batch(() => {\n const prevObservers = this.#observers;\n const newObserverMatches = this.#findMatchingObservers(this.#queries);\n newObserverMatches.forEach(\n (match) => match.observer.setOptions(match.defaultedQueryOptions, notifyOptions)\n );\n const newObservers = newObserverMatches.map((match) => match.observer);\n const newResult = newObservers.map(\n (observer) => observer.getCurrentResult()\n );\n const hasIndexChange = newObservers.some(\n (observer, index) => observer !== prevObservers[index]\n );\n if (prevObservers.length === newObservers.length && !hasIndexChange) {\n return;\n }\n this.#observers = newObservers;\n this.#result = newResult;\n if (!this.hasListeners()) {\n return;\n }\n difference(prevObservers, newObservers).forEach((observer) => {\n observer.destroy();\n });\n difference(newObservers, prevObservers).forEach((observer) => {\n observer.subscribe((result) => {\n this.#onUpdate(observer, result);\n });\n });\n this.#notify();\n });\n }\n getCurrentResult() {\n return this.#result;\n }\n getQueries() {\n return this.#observers.map((observer) => observer.getCurrentQuery());\n }\n getObservers() {\n return this.#observers;\n }\n getOptimisticResult(queries, combine) {\n const matches = this.#findMatchingObservers(queries);\n const result = matches.map(\n (match) => match.observer.getOptimisticResult(match.defaultedQueryOptions)\n );\n return [\n result,\n (r) => {\n return this.#combineResult(r ?? result, combine);\n },\n () => {\n return matches.map((match, index) => {\n const observerResult = result[index];\n return !match.defaultedQueryOptions.notifyOnChangeProps ? match.observer.trackResult(observerResult, (accessedProp) => {\n matches.forEach((m) => {\n m.observer.trackProp(accessedProp);\n });\n }) : observerResult;\n });\n }\n ];\n }\n #combineResult(input, combine) {\n if (combine) {\n if (!this.#combinedResult || this.#result !== this.#lastResult || combine !== this.#lastCombine) {\n this.#lastCombine = combine;\n this.#lastResult = this.#result;\n this.#combinedResult = replaceEqualDeep(\n this.#combinedResult,\n combine(input)\n );\n }\n return this.#combinedResult;\n }\n return input;\n }\n #findMatchingObservers(queries) {\n const prevObservers = this.#observers;\n const prevObserversMap = new Map(\n prevObservers.map((observer) => [observer.options.queryHash, observer])\n );\n const defaultedQueryOptions = queries.map(\n (options) => this.#client.defaultQueryOptions(options)\n );\n const matchingObservers = defaultedQueryOptions.flatMap((defaultedOptions) => {\n const match = prevObserversMap.get(defaultedOptions.queryHash);\n if (match != null) {\n return [{ defaultedQueryOptions: defaultedOptions, observer: match }];\n }\n return [];\n });\n const matchedQueryHashes = new Set(\n matchingObservers.map((match) => match.defaultedQueryOptions.queryHash)\n );\n const unmatchedQueries = defaultedQueryOptions.filter(\n (defaultedOptions) => !matchedQueryHashes.has(defaultedOptions.queryHash)\n );\n const getObserver = (options) => {\n const defaultedOptions = this.#client.defaultQueryOptions(options);\n const currentObserver = this.#observers.find(\n (o) => o.options.queryHash === defaultedOptions.queryHash\n );\n return currentObserver ?? new QueryObserver(this.#client, defaultedOptions);\n };\n const newOrReusedObservers = unmatchedQueries.map((options) => {\n return {\n defaultedQueryOptions: options,\n observer: getObserver(options)\n };\n });\n const sortMatchesByOrderOfQueries = (a, b) => defaultedQueryOptions.indexOf(a.defaultedQueryOptions) - defaultedQueryOptions.indexOf(b.defaultedQueryOptions);\n return matchingObservers.concat(newOrReusedObservers).sort(sortMatchesByOrderOfQueries);\n }\n #onUpdate(observer, result) {\n const index = this.#observers.indexOf(observer);\n if (index !== -1) {\n this.#result = replaceAt(this.#result, index, result);\n this.#notify();\n }\n }\n #notify() {\n notifyManager.batch(() => {\n this.listeners.forEach((listener) => {\n listener(this.#result);\n });\n });\n }\n};\nexport {\n QueriesObserver\n};\n//# sourceMappingURL=queriesObserver.js.map","import { forgeTokenURL, QueryKeys, WITHDRAWABLE_BALANCES_TTL, formatBalance } from \"@cede/utils\";\nimport { useDependencies } from \"../../hooks/useDependencies\";\nimport { BalancesQueriesResult, BalancesWithQueryKey } from \"./types\";\nimport { UseQueryOptions, UseQueryResult, useQueries } from \"@tanstack/react-query\";\n\nconst getTotalBalancesByAccountId = (balances: UseQueryResult<BalancesWithQueryKey, Error>[]) => {\n const result: BalancesQueriesResult = {\n totalBalances: {},\n droplistCurrenciesByAccountId: {},\n areBalancesLoading: false,\n areBalancesError: false,\n };\n\n if (!balances || !balances.length) return result;\n\n return balances.reduce((acc, query) => {\n if (query.isLoading || query.isFetching || query.isRefetching) {\n acc.areBalancesLoading = true;\n }\n\n if (query.isError) {\n acc.areBalancesError = true;\n }\n\n if (!query.data) return acc;\n\n const { accountId, balances: queryBalances } = query.data;\n\n if (queryBalances) {\n if (!acc.totalBalances[accountId]) {\n acc.totalBalances[accountId] = { total: 0, isLoading: false, isError: query.isError };\n }\n\n Object.entries(queryBalances).forEach(([tokenSymbol, asset]) => {\n if (!acc.droplistCurrenciesByAccountId[accountId]) {\n acc.droplistCurrenciesByAccountId[accountId] = [];\n }\n acc.totalBalances[accountId]!.total += asset.refTotalBalance;\n\n const searchableTerms = [tokenSymbol];\n\n if (asset.tokenName) {\n searchableTerms.push(asset.tokenName);\n }\n\n acc.droplistCurrenciesByAccountId[accountId]!.push({\n img: forgeTokenURL(tokenSymbol),\n label: tokenSymbol,\n value: tokenSymbol,\n balance: formatBalance(asset.freeBalance),\n freeBalance: asset.freeBalance,\n amount: asset.refFreeBalance?.toFixed(2),\n ...(searchableTerms && {\n searchableTerms,\n }),\n });\n });\n }\n\n return acc;\n }, result);\n};\n\nexport const useWithdrawableBalances = (network?: string) => {\n const { useVaults, backgroundHandler, useAccounts } = useDependencies();\n const { activeVault } = useVaults();\n const { accountsIds } = useAccounts();\n\n const enableQueries = !!backgroundHandler?.isReady && !!activeVault && !!accountsIds;\n\n const { balances, totalBalancesByAccountId } = useQueries({\n queries: accountsIds.map<UseQueryOptions<BalancesWithQueryKey>>((accountId: string) => ({\n queryKey: [QueryKeys.WITHDRAWABLE_CURRENCIES, accountId, network],\n queryFn: async () => {\n const result = await backgroundHandler.withdrawableTokens({\n accountId,\n network,\n });\n\n return {\n accountId,\n balances: result,\n };\n },\n gcTime: WITHDRAWABLE_BALANCES_TTL,\n staleTime: WITHDRAWABLE_BALANCES_TTL,\n enabled: enableQueries,\n })),\n combine: (queries) => {\n return {\n balances: queries,\n totalBalancesByAccountId: getTotalBalancesByAccountId(queries),\n };\n },\n });\n\n return {\n balances,\n totalBalancesByAccountId,\n };\n};\n","import { useMemo } from \"react\";\nimport { SupportedTokensDropListWithIconItem, TradePathBySupportedTokens } from \"@cede/types\";\nimport { USE_SUPPORTED_TOKENS_CACHE_TIME, forgeTokenURL } from \"@cede/utils\";\nimport { useDependencies } from \"../useDependencies\";\nimport { useQuery } from \"@tanstack/react-query\";\n\ntype Params = {\n enabled: boolean;\n accountId?: string;\n fromToken?: string;\n network?: string;\n activeWithdrawal: boolean; // true for trade&send feature, false for trade square feature\n};\n\nexport const useTradePathBySupportedTokens = ({ enabled, accountId, fromToken, network, activeWithdrawal }: Params) => {\n const { backgroundHandler } = useDependencies();\n\n const {\n data: tradePathBySupportedTokens,\n isFetching,\n error,\n } = useQuery({\n queryKey: [\"tradePathBySupportedTokens\", accountId, fromToken, network],\n queryFn: async () => {\n return backgroundHandler.getTradePathBySupportedTokens({\n accountId,\n from: fromToken,\n network,\n }) as Promise<TradePathBySupportedTokens>;\n },\n enabled: enabled && !!accountId && !!fromToken && (!activeWithdrawal || !!network) && !!backgroundHandler?.isReady,\n staleTime: USE_SUPPORTED_TOKENS_CACHE_TIME,\n gcTime: USE_SUPPORTED_TOKENS_CACHE_TIME,\n });\n\n const droplistSupportedTokens = useMemo<SupportedTokensDropListWithIconItem[]>(() => {\n if (!tradePathBySupportedTokens) return [];\n return Object.keys(tradePathBySupportedTokens).map<SupportedTokensDropListWithIconItem>((token) => ({\n label: token,\n value: token,\n searchableTerms: [token],\n img: forgeTokenURL(token),\n isDisabled: false,\n networks: [], // useless for the moment, since we assume that getTradePathBySupportedTokens returns the supported tokens for the given network\n }));\n }, [tradePathBySupportedTokens]);\n\n return {\n tradePathBySupportedTokens,\n supportedTokens: tradePathBySupportedTokens,\n droplistSupportedTokens,\n isLoading: isFetching,\n error,\n };\n};\n","import { QueryKeys } from \"@cede/utils\";\nimport { useDependencies } from \"./useDependencies\";\nimport { useQuery } from \"@tanstack/react-query\";\n\nconst DEFAULT_CEDE_STORE_VERSION = \"1.72.3\";\n\nexport const useCedeStoreVersion = () => {\n const { backgroundHandler } = useDependencies();\n const { data: cedeStoreVersion } = useQuery<string>({\n queryKey: [QueryKeys.CEDE_STORE_VERSION],\n queryFn: () => backgroundHandler.getAppVersion().catch(() => DEFAULT_CEDE_STORE_VERSION),\n });\n\n const isGreaterVersion = (version: string) => {\n const [currentMajor, currentMinor, currentPatch] = (cedeStoreVersion || DEFAULT_CEDE_STORE_VERSION)\n .split(\".\")\n .map((v) => (v ? Number(v) : 0)) as [number, number, number];\n const [major, minor, patch] = version.split(\".\").map((v) => (v ? Number(v) : 0)) as [number, number, number];\n\n if (currentMajor > major) return true;\n if (currentMajor < major) return false;\n\n if (currentMinor > minor) return true;\n if (currentMinor < minor) return false;\n\n return currentPatch > patch;\n };\n\n return { cedeStoreVersion, isGreaterVersion };\n};\n","export const DISCORD_INVITE_URL = \"https://discord.gg/V7hgKf6NWf\";\nexport const TWITTER_URL = \"https://twitter.com/CedeLabs\";\nexport const LINKEDIN_URL = \"https://www.linkedin.com/company/cede-labs\";\nexport const TELEGRAM_URL = \"https://t.me/+vCVyR7QbFIllMTY8\";\n\nexport const CEDE_STORE_URL = \"https://cede.store/\";\nexport const CEDE_STORE_WIDGET_DOCUMENTATION_URL = \"https://docs.cede.store/widgets/installation\";\n","import ccxt from \"@cede/ccxt\";\nimport { DropListWithIconItem, MarketRate } from \"@cede/types\";\nimport { QueryKeys, getCurrentRate, getErrorMessage } from \"@cede/utils\";\nimport { AlertTypes } from \"../store\";\nimport { useDependencies } from \"./useDependencies\";\nimport { isMultipleTransactionsPreparedOrder } from \"./useMultipleTransactions\";\nimport { useQuery } from \"@tanstack/react-query\";\n\ntype UseMultipleTransactionsFeesParams = {\n enabled: boolean;\n accountId: string;\n fromToken: string;\n /**\n * The amount of the fromToken is needed to compute the fees\n */\n fromTokenAmount: string;\n toToken: string;\n activeWithdrawal: boolean;\n network?: DropListWithIconItem<{\n withdrawMin?: string;\n withdrawFee?: string;\n }>;\n isInternalTransfer?: boolean;\n};\n\n// We compute the fees in the from currency\n// We do the opposite operation regarding the classic order since we are reverting the order side\n// If the orderSide is \"buy\" we need to multiply the fees by ask price of the market\n// If the orderSide is \"sell\" we need to divide the fees by bid price of the market\nconst reverseComputeAmount = (amount: string, price: string, orderSide: \"buy\" | \"sell\") => {\n return orderSide === \"buy\" ? ccxt.Precise.stringMul(amount, price) : ccxt.Precise.stringDiv(amount, price);\n};\n\n/**\n * Hook to compute the fees for multiple transactions\n * !!important: You need to load the multiple transactions before using this hook\n */\nexport const useMultipleTransactionsFees = ({\n enabled,\n accountId,\n fromToken,\n fromTokenAmount,\n toToken,\n activeWithdrawal,\n network,\n isInternalTransfer = false,\n}: UseMultipleTransactionsFeesParams) => {\n const { backgroundHandler, useNetworks, useTradePath, useMultipleTransactions, useAlert } = useDependencies();\n const { tradePath, isLoading: tradePathIsLoading } = useTradePath({\n enabled,\n accountId,\n fromToken,\n toToken,\n activeWithdrawal,\n network: network?.value,\n });\n const { droplistNetworks: networksForDestinationCurrency } = useNetworks({\n toDeposit: false,\n toWithdraw: true,\n accountId,\n tokenSymbol: toToken, // in order to get the withdrawMin and withdrawFee\n isInternalTransfer,\n });\n const appendAlert = useAlert((state) => state.append);\n\n const { transactions, isTxLoading } = useMultipleTransactions({\n accountId,\n fromTokenAmount,\n tradePath,\n });\n\n /**\n *\n * @returns The fees in the from currency\n */\n const _computeFees = async () => {\n if (!tradePath) return \"0\";\n try {\n const networkForDestinationCurrency = networksForDestinationCurrency.find(\n (destinationCurrencyNetwork) => destinationCurrencyNetwork.value === network?.value,\n );\n let _fees = networkForDestinationCurrency?.withdrawFee || \"0\";\n\n // We need to reverse the trade path in order to start from the final currency\n // and convert through the iterations to the first one\n for (const tradePathData of [...tradePath].reverse()) {\n const { pairSymbol, orderSide, from, to } = tradePathData;\n\n const marketRate: MarketRate = await backgroundHandler.getMarketRate({\n accountId,\n pairSymbol: pairSymbol,\n });\n\n const price = getCurrentRate(marketRate, orderSide);\n\n _fees = reverseComputeAmount(_fees, price, orderSide);\n\n const preparedOrder = transactions.find(\n (tx) => isMultipleTransactionsPreparedOrder(tx) && tx.request.pairSymbol === pairSymbol,\n );\n\n if (preparedOrder && isMultipleTransactionsPreparedOrder(preparedOrder)) {\n const feeAmount = String(preparedOrder.estimatedFee.amount);\n // We compute the fees in the from currency\n const newFees =\n preparedOrder.estimatedFee.tokenSymbol === from\n ? String(preparedOrder.estimatedFee.amount)\n : preparedOrder.estimatedFee.tokenSymbol === to\n ? reverseComputeAmount(feeAmount, price, orderSide)\n : \"0\";\n\n _fees = ccxt.Precise.stringAdd(_fees, newFees);\n }\n }\n return _fees;\n } catch (error) {\n appendAlert(getErrorMessage(error), AlertTypes.ERROR);\n return \"0\";\n }\n };\n\n const { data: multipleTransactionFeesInFromToken, isFetching } = useQuery({\n queryKey: [QueryKeys.MULTIPLE_TX_FEES, tradePath, accountId, fromTokenAmount, transactions],\n queryFn: _computeFees,\n enabled: !!tradePath && !!accountId && transactions.length > 0 && enabled && !isTxLoading,\n });\n\n return {\n multipleTransactionFeesInFromToken,\n isLoading: isFetching || isTxLoading || tradePathIsLoading,\n };\n};\n","import ccxt from \"@cede/ccxt\";\nimport { DropListWithIconItem, MarketRate, MinAmounts } from \"@cede/types\";\nimport { getCurrentRate, getErrorMessage } from \"@cede/utils\";\nimport { AlertTypes, useDependencies } from \"..\";\nimport { useQuery } from \"@tanstack/react-query\";\n\ntype MultipleTransactionsMinAmountProps = {\n enabled: boolean;\n accountId: string;\n fromToken: string;\n toToken: string;\n isInternalTransfer?: boolean;\n network?: DropListWithIconItem<{\n withdrawMin?: string;\n withdrawFee?: string;\n }>;\n activeWithdrawal: boolean;\n};\n\n/**\n * @description Get the biggest min amount for the orders and the withdrawal in the original currency\n *\n */\nexport const useMultipleTransactionsMinAmount = ({\n enabled,\n accountId,\n network,\n fromToken,\n toToken,\n isInternalTransfer = false,\n activeWithdrawal,\n}: MultipleTransactionsMinAmountProps) => {\n const { backgroundHandler, useAlert, useNetworks, useTradePath } = useDependencies();\n const { tradePath, isLoading: tradePathIsLoading } = useTradePath({\n enabled,\n accountId,\n fromToken,\n toToken,\n network: network?.value,\n activeWithdrawal,\n });\n const appendAlert = useAlert((state) => state.append);\n const { droplistNetworks: networksForDestinationCurrency } = useNetworks({\n toDeposit: false,\n toWithdraw: true,\n accountId,\n tokenSymbol: toToken, // in order to get the withdrawMin and withdrawFee\n isInternalTransfer,\n });\n\n const _computeBiggestMinAmount = async () => {\n if (!tradePath) return \"0\";\n try {\n const safeMargin = \"0.2\";\n const networkForDestinationCurrency = networksForDestinationCurrency.find(\n (destinationCurrencyNetwork) => destinationCurrencyNetwork.value === network?.value,\n );\n let _minAmounts = [\n ccxt.Precise.stringAdd(\n networkForDestinationCurrency?.withdrawMin || \"0\",\n networkForDestinationCurrency?.withdrawFee || \"0\",\n ),\n ];\n\n // We need to reverse the trade path in order to start from the final currency\n // and convert through the iterations to the first one\n for (const tradePathData of [...tradePath].reverse()) {\n const { pairSymbol, orderSide } = tradePathData;\n\n const marketRate: MarketRate = await backgroundHandler.getMarketRate({\n accountId,\n pairSymbol: pairSymbol,\n });\n\n const price = getCurrentRate(marketRate, orderSide);\n // We compute all the min amounts in the current currency\n // We do the opposite operation regarding the classic order since we are reverting the order side\n // If the orderSide is \"buy\" we need to multiply the min amount by ask price of the market\n // If the orderSide is \"sell\" we need to divide the min amount by bid price of the market\n if (orderSide === \"buy\") {\n _minAmounts = _minAmounts.map((minAmount) => ccxt.Precise.stringMul(minAmount, price));\n } else {\n _minAmounts = _minAmounts.map((minAmount) => ccxt.Precise.stringDiv(minAmount, price));\n }\n // We add the min trade amount to the array\n // We do it at the end of the loop to avoid converting the min trade amount in the current currency\n // because it's already in the current currency\n const minTradeAmount: MinAmounts = await backgroundHandler.getMinAmounts({\n accountId,\n pairSymbol,\n orderSide,\n price,\n });\n\n _minAmounts.push(orderSide === \"sell\" ? minTradeAmount.minBaseAmount : minTradeAmount.minQuoteAmount);\n }\n const maxMinAmount = String(Math.max(..._minAmounts.map((minAmount) => parseFloat(minAmount))));\n const finalMinAmount = ccxt.Precise.stringAdd(maxMinAmount, ccxt.Precise.stringMul(maxMinAmount, safeMargin));\n return finalMinAmount;\n } catch (error) {\n appendAlert(getErrorMessage(error), AlertTypes.ERROR);\n return \"0\";\n }\n };\n\n const { data: minAmount, isFetching } = useQuery({\n queryKey: [\"minAmount\", tradePath, accountId],\n queryFn: _computeBiggestMinAmount,\n enabled:\n !!backgroundHandler?.isReady &&\n !!tradePath &&\n tradePath.length > 0 &&\n enabled &&\n (!activeWithdrawal || networksForDestinationCurrency.length > 0),\n refetchOnWindowFocus: false,\n staleTime: Infinity,\n });\n\n return {\n minAmount,\n isLoading: isFetching || tradePathIsLoading,\n tradePath: tradePath || [],\n };\n};\n","import { CreateOrderRequest, DropListWithIconItem, EstimatedFee, WidgetType, WithdrawToDefiParams } from \"@cede/types\";\nimport { getTimeLimitedPersistStorage } from \"../utils/timeLimitedPersistStorage\";\nimport { create } from \"zustand\";\nimport { persist } from \"zustand/middleware\";\n\nexport type MultipleTransactionsPreparedTransaction = {\n isExecuted: boolean;\n exchange: {\n label: string;\n img: string;\n };\n};\n\nexport type MultipleTransactionsPreparedOrder = {\n from: {\n amount: string;\n tokenSymbol: string;\n img: string;\n };\n to: {\n amount: string;\n tokenSymbol: string;\n img: string;\n };\n request: CreateOrderRequest;\n estimatedFee: EstimatedFee;\n} & MultipleTransactionsPreparedTransaction;\n\nexport type MultipleTransactionsPreparedWithdrawal = {\n network: DropListWithIconItem;\n request: WithdrawToDefiParams;\n} & MultipleTransactionsPreparedTransaction;\n\nexport type MultipleTransactionsStore = {\n hasStartedTheProcess: boolean;\n transactions: (MultipleTransactionsPreparedOrder | MultipleTransactionsPreparedWithdrawal)[];\n startProcess: VoidFunction;\n setTransactions: (\n transactions: (MultipleTransactionsPreparedOrder | MultipleTransactionsPreparedWithdrawal)[],\n ) => void;\n clear: VoidFunction;\n};\n\nconst PERSISTANCE_DURATION = 1000 * 60 * 10; // 10 minutes\n\n/**\n * Get the store for multiple transactions\n * (it changes the local storage name based on the widget type to avoid conflicts between the widgets)\n */\nexport const getUseMultipleTransactionsStore = (type: WidgetType | \"STORE\") =>\n create<MultipleTransactionsStore>()(\n persist(\n (set) => ({\n transactions: [],\n hasStartedTheProcess: false,\n startProcess: () => set({ hasStartedTheProcess: true }),\n setTransactions: (transactions) => set({ transactions }),\n clear: () => set({ transactions: [], hasStartedTheProcess: false }),\n }),\n {\n name: `MultipleTransactionsStore-${type}`,\n storage: getTimeLimitedPersistStorage({ ttl: PERSISTANCE_DURATION }),\n partialize: (state) => {\n return {\n // Don't need to persist state if the process is finished (all transactions are executed)\n transactions: state.transactions.every((tx) => tx.isExecuted) ? [] : state.transactions,\n hasStartedTheProcess: state.hasStartedTheProcess,\n };\n },\n },\n ),\n );\n","import { SendWidgetConfig } from \"@cede/types\";\nimport { forgeTokenURL } from \"@cede/utils\";\nimport { FormAction, SendForm, ShouldPrefillObject } from \"../../components/Send/types\";\nimport { getTimeLimitedPersistStorage } from \"../../utils/timeLimitedPersistStorage\";\nimport { create } from \"zustand\";\nimport { persist } from \"zustand/middleware\";\n\nconst initialState: SendForm = {\n shouldPrefill: {\n tokenSymbol: true,\n network: true,\n address: true,\n amount: true,\n account: true,\n },\n initialProps: {\n tokenSymbol: undefined,\n network: undefined,\n address: undefined,\n amount: undefined,\n exchangeIds: [],\n },\n fromAccount: null,\n toAccount: null,\n currency: null,\n destinationCurrency: null,\n network: null,\n recipientAddress: null,\n whitelistedAddress: undefined,\n assetValue: \"\",\n refValue: \"\",\n tagValue: \"\",\n tutorialIsOpen: false,\n isDemo: false,\n};\n\nexport type SendStoreState = SendForm & {\n dispatchInput: (action: FormAction<SendForm>) => void;\n dispatchPrefill: (action: Partial<ShouldPrefillObject>) => void;\n setMaxAssetValue: () => void;\n partialReset: () => void;\n switchAccounts: () => void;\n reset: (params?: { keepInitialProps?: boolean }) => void;\n setInitialProps: (props: SendWidgetConfig) => void;\n setTutorialIsOpen: (isOpen: boolean) => void;\n /**\n * It stamps the demo status in the state and resets the form if the status changes\n * Therefore, the state is directly linked to the demo status and any conflict is impossible\n */\n setIsDemo: (isDemo: boolean) => void;\n};\n\nconst PERSISTANCE_DURATION = 1000 * 60 * 10; // 10 minutes\n\nexport const useSendStore = create<SendStoreState>()(\n persist(\n (set) => ({\n ...initialState,\n transaction: null,\n error: undefined,\n dispatchPrefill: (value: Partial<ShouldPrefillObject>) =>\n set((state) => {\n return {\n shouldPrefill: {\n tokenSymbol: value.tokenSymbol ?? !!state.shouldPrefill?.tokenSymbol,\n network: value.network ?? !!state.shouldPrefill?.network,\n address: value.address ?? !!state.shouldPrefill?.address,\n amount: value.amount ?? !!state.shouldPrefill?.amount,\n account: value.account ?? !!state.shouldPrefill?.account,\n },\n };\n }),\n dispatchInput: (action: FormAction<SendForm>) =>\n set((state) => {\n const newState = {} as SendStoreState;\n if (action.field === \"fromAccount\") {\n state.partialReset();\n newState.shouldPrefill = {\n tokenSymbol: true,\n network: true,\n address: true,\n amount: true,\n account: false,\n };\n }\n\n if (action.field === \"currency\") {\n newState.assetValue = \"\";\n newState.refValue = \"\";\n }\n\n if (action.field === \"assetValue\" && state.currency && action.value) {\n const ratio = Number(action.value) / state.currency.freeBalance;\n newState.refValue = (ratio * Number(state.currency.amount)).toString();\n }\n\n return { [action.field]: action.value, ...newState };\n }),\n reset: ({ keepInitialProps = false } = {}) => {\n set((state) => {\n return { ...initialState, initialProps: keepInitialProps ? state.initialProps : initialState.initialProps };\n }, false);\n },\n switchAccounts: () => {\n set((state) => {\n state.partialReset();\n return { fromAccount: state.toAccount, toAccount: state.fromAccount };\n }, false);\n },\n setTutorialIsOpen: (isOpen: boolean) => {\n set(() => {\n return { tutorialIsOpen: isOpen };\n });\n },\n partialReset: () => {\n set(() => {\n return {\n destinationCurrency: null,\n currency: null,\n network: null,\n assetValue: \"\",\n refValue: \"\",\n amount: \"\",\n tagValue: \"\",\n recipientAddress: null,\n whitelistedAddress: undefined,\n };\n });\n },\n setMaxAssetValue: () => {\n set((state) => {\n if (!state.currency) return {};\n\n const ratio = Number(state.currency.freeBalance) / state.currency.freeBalance;\n\n return {\n assetValue: String(state.currency.freeBalance),\n refValue: (ratio * Number(state.currency.amount)).toString(),\n };\n });\n },\n setInitialProps: (initialProps: SendWidgetConfig) =>\n set(() => {\n return {\n initialProps,\n };\n }),\n setIsDemo: (isDemo: boolean) =>\n set((state) => {\n if (state.isDemo !== isDemo) {\n state.reset();\n }\n return {\n isDemo,\n };\n }),\n }),\n {\n name: \"SendStore\",\n storage: getTimeLimitedPersistStorage<SendStoreState>({\n ttl: PERSISTANCE_DURATION,\n onHydration: (state) => {\n if (state.currency) {\n state.currency.img = forgeTokenURL(state.currency.value);\n }\n return state;\n },\n }),\n // We don't persist the shouldPrefill object, as we need to populate the form with config values on each mount\n partialize: (state) => {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { shouldPrefill, ...persistableState } = state;\n return persistableState;\n },\n },\n ),\n);\n","import { create } from \"zustand\";\n\nexport type GlobalMenuState = {\n isOpen: boolean;\n setIsOpen: (isOpen: boolean) => void;\n};\n\nexport type UseGlobalMenuHook = () => GlobalMenuState;\n\nexport const useGlobalMenu = create<GlobalMenuState>((set) => ({\n isOpen: false,\n setIsOpen: (isOpen) => set({ isOpen }),\n}));\n","export const CEDE_LANGUAGES = {\n ENGLISH: \"english\",\n};\n\nexport const CEDE_LANGUAGE_LABELS = {\n [CEDE_LANGUAGES.ENGLISH]: \"English\",\n};\n\nexport const DEFAULT_LANGUAGE = CEDE_LANGUAGES.ENGLISH;\n","/*\n * Copyright (C) CEDE Labs, SAS - All Rights Reserved\n * Unauthorized copying of this file, via any medium is strictly prohibited\n * Proprietary and confidential\n * Written by CEDE Labs team <team@cedelabs.io>, September 2021\n */\nimport { useEffect } from \"react\";\nimport { Any, FiatCurrency, JSONLikeObject, toObject } from \"@cede/types\";\nimport { DEFAULT_CURRENCY, DEFAULT_LANGUAGE } from \"@cede/utils\";\nimport { useDependencies } from \"../../hooks\";\nimport { create } from \"zustand\";\nimport { persist } from \"zustand/middleware\";\n\nexport type SettingsState = {\n language: string;\n currency: FiatCurrency;\n hiddenBalance: number;\n extensionUrl: string;\n setLanguage: (language: string) => void;\n setCurrency: (currency: string) => void;\n setHiddenBalance: (hiddenBalance: number) => void;\n setExtensionUrl: (extensionUrl: string) => void;\n};\n\nexport type UseSettingsHook = typeof useSettings;\n\nexport const useSettings = create(\n persist(\n (set) => ({\n language: DEFAULT_LANGUAGE,\n currency: { symbol: DEFAULT_CURRENCY },\n hiddenBalance: 0,\n isMetricsActive: true,\n extensionUrl: \"\",\n setLanguage: (language: string) => {\n set(() => ({\n language,\n }));\n },\n setCurrency: async (symbol: string) => {\n // @TODO: get rate from API when we will need it\n set(() => ({\n currency: { symbol },\n }));\n },\n setHiddenBalance: (hiddenBalance: number) => {\n set(() => ({\n hiddenBalance,\n }));\n },\n setExtensionUrl: (extensionUrl: string) => {\n set(() => ({\n extensionUrl,\n }));\n },\n }),\n {\n name: \"settings\",\n partialize: (state: Any) => ({\n language: state.language,\n currency: state.currency,\n hiddenBalance: state.hiddenBalance,\n }),\n version: 1,\n migrate: (persistedState: unknown, version: number | undefined) => {\n if (!version || version === 0) {\n return {\n ...toObject(persistedState as JSONLikeObject),\n currency: { symbol: DEFAULT_CURRENCY },\n } as unknown as SettingsState;\n } else {\n return persistedState as SettingsState;\n }\n },\n },\n ),\n);\n\nexport const useSetupSettings = () => {\n const {\n currency,\n language,\n hiddenBalance,\n extensionUrl,\n setLanguage,\n setCurrency,\n setHiddenBalance,\n setExtensionUrl,\n } = useSettings((state: Any) => ({\n currency: state.currency,\n language: state.language,\n hiddenBalance: state.hiddenBalance,\n extensionUrl: state.extensionUrl,\n setLanguage: state.setLanguage,\n setCurrency: state.setCurrency,\n setHiddenBalance: state.setHiddenBalance,\n setExtensionUrl: state.setExtensionUrl,\n }));\n const { useViewEnvironment, useBackgroundHandler } = useDependencies();\n const { environment } = useViewEnvironment();\n const { backgroundHandler } = useBackgroundHandler();\n\n const getSettings = async () => {\n if (!backgroundHandler) return;\n\n const { currency, language, balanceBelow, extensionUrl } = await backgroundHandler.getSettings();\n setCurrency(currency.symbol);\n setLanguage(language);\n setHiddenBalance(balanceBelow);\n setExtensionUrl(extensionUrl);\n };\n\n useEffect(() => {\n if (!backgroundHandler || !environment) return;\n\n getSettings();\n }, [backgroundHandler, environment]);\n\n return {\n currency,\n language,\n hiddenBalance,\n extensionUrl,\n };\n};\n","import { randomId } from \"@cede/utils\";\nimport { UseAlertState } from \"./types\";\nimport { create, StoreApi, UseBoundStore } from \"zustand\";\n\nconst ALERT_TIMEOUT = 5000;\n\nexport type UseAlertHook = UseBoundStore<StoreApi<UseAlertState>>;\n\nexport const useAlert = create<UseAlertState>((set, get) => ({\n alertQueue: [],\n append: (message, type, data = {}, onClick) => {\n const alertItem = {\n message,\n type,\n id: randomId(),\n vault: data.vault,\n account: data.account,\n onClick: onClick,\n };\n\n if (!data?.noTimeout) {\n setTimeout(() => {\n get().remove(alertItem.id);\n }, data?.customMsTimeout ?? ALERT_TIMEOUT);\n }\n\n set((state) => ({ alertQueue: [...state.alertQueue, alertItem] }));\n },\n remove: (id) => {\n set((state) => ({\n alertQueue: state.alertQueue.filter((alert) => alert.id !== id),\n }));\n },\n removeByMessage: (message: string) => {\n set((state) => ({\n alertQueue: state.alertQueue.filter((alert) => !alert.message.includes(message)),\n }));\n },\n}));\n","import { useLocation, useNavigate } from \"react-router-dom\";\nimport { SendWidgetProps, WidgetType } from \"@cede/types\";\nimport { useTrade, useTradeApi, useTradeForm, useTradeFormStore, useTradeTabs } from \"../../components\";\nimport { useSend } from \"../../components/Send/hooks/useSend\";\nimport { useSendMinAmount } from \"../../components/Send/hooks/useSendMinAmount\";\nimport { useTradeAmountComputation } from \"../../components/Trade/hooks/useTradeAmountComputation\";\nimport { useTradeEventDispatcher } from \"../../components/Trade/hooks/useTradeDispatcher\";\nimport { useTradeFee } from \"../../components/Trade/hooks/useTradeFee\";\nimport { useTradeMinAmount } from \"../../components/Trade/hooks/useTradeMinAmount\";\nimport {\n // WidgetType,\n useAddressBook,\n useAddressInputValue,\n useConfig,\n useExtensionAsset,\n useNetworks,\n usePartners,\n useStandardizedNetworks,\n useTokenNamesAndSymbols,\n useTriggerUpdateTransaction,\n useWhitelistedAddresses,\n useWithdrawableBalances,\n} from \"../../hooks\";\nimport { useSupportedTokens } from \"../../hooks/supportedTokens/useSupportedTokens\";\nimport { useTradePathBySupportedTokens } from \"../../hooks/tradePathBySupportedTokens/useTradePathBySupportedTokens\";\nimport { useCedeStoreVersion } from \"../../hooks/useCedeStoreVersion\";\nimport { useDiscordInvitation } from \"../../hooks/useDiscordInvitation\";\nimport { useExchangesStatusAlerts } from \"../../hooks/useExchangesStatusAlerts\";\nimport { useMultipleTransactionsFees } from \"../../hooks/useMultipleTransactionFees\";\nimport { useMultipleTransactions } from \"../../hooks/useMultipleTransactions\";\nimport { useMultipleTransactionsMinAmount } from \"../../hooks/useMultipleTransactionsMinAmount\";\nimport { getUseMultipleTransactionsStore } from \"../../hooks/useMultipleTransactionsStore\";\nimport { useShareOnTwitter } from \"../../hooks/useShareOnTwitter\";\nimport { useTradePath } from \"../../hooks/useTradePath\";\nimport { useTriggerLoadingConditionally } from \"../../hooks/useTriggerLoadingConditionally\";\nimport { useCompletedTransaction } from \"../../pages/CompletedTransaction/useCompletedTransaction\";\nimport {\n UseLoadingHook,\n useAlert,\n useGlobalMenu,\n useLoading,\n useSelectedTransaction,\n useSendStore,\n useSettings,\n useSetupSettings,\n} from \"../../store\";\nimport { CedeReactDependencies } from \"@cedelabs/react-sdk/src\";\n\nexport type DefaultDependencies = {\n [key: string]: unknown;\n useLoading: UseLoadingHook;\n useSendStore: typeof useSendStore;\n useSelectedTransaction: typeof useSelectedTransaction;\n useSend: typeof useSend;\n useWithdrawableBalances: typeof useWithdrawableBalances;\n useAddressBook: typeof useAddressBook;\n useGlobalMenu: typeof useGlobalMenu;\n useSettings: typeof useSettings;\n useSetupSettings: typeof useSetupSettings;\n useAlert: typeof useAlert;\n useNavigate: typeof useNavigate;\n useNetworks: typeof useNetworks;\n useLocation: typeof useLocation;\n useCompletedTransaction: typeof useCompletedTransaction;\n useTriggerUpdateTransaction: typeof useTriggerUpdateTransaction;\n useExtensionAsset: typeof useExtensionAsset;\n useExchangesStatusAlerts: typeof useExchangesStatusAlerts;\n useStandardizedNetworks: typeof useStandardizedNetworks;\n useAddressInputValue: typeof useAddressInputValue;\n useWhitelistedAddresses: typeof useWhitelistedAddresses;\n useSupportedTokens: typeof useSupportedTokens;\n useSendMinAmount: typeof useSendMinAmount;\n useTriggerLoadingConditionally: typeof useTriggerLoadingConditionally;\n usePartners: typeof usePartners;\n useConfig: typeof useConfig;\n useShareOnTwitter: typeof useShareOnTwitter;\n useTradePathBySupportedTokens: typeof useTradePathBySupportedTokens;\n useTokenNamesAndSymbols: typeof useTokenNamesAndSymbols;\n useTradeForm: typeof useTradeForm;\n useTradeApi: typeof useTradeApi;\n useTradeMinAmount: typeof useTradeMinAmount;\n useTrade: typeof useTrade;\n useTradeTabs: typeof useTradeTabs;\n useDiscordInvitation: typeof useDiscordInvitation;\n useTradePath: typeof useTradePath;\n useMultipleTransactionsMinAmount: typeof useMultipleTransactionsMinAmount;\n useMultipleTransactions: typeof useMultipleTransactions;\n useMultipleTransactionsStore: ReturnType<typeof getUseMultipleTransactionsStore>;\n useMultipleTransactionsFees: typeof useMultipleTransactionsFees;\n useTradeFee: typeof useTradeFee;\n useTradeAmountComputation: typeof useTradeAmountComputation;\n useTradeEventDispatcher: typeof useTradeEventDispatcher;\n useTradeFormStore: typeof useTradeFormStore;\n useCedeStoreVersion: typeof useCedeStoreVersion;\n};\n\nexport type DefaultDependenciesWithFeatures = CedeReactDependencies &\n DefaultDependencies & { widgetProps: SendWidgetProps };\n\nexport const defaultDependencies: DefaultDependenciesWithFeatures = {\n useLoading,\n useSendStore,\n useSelectedTransaction,\n useSend,\n useWithdrawableBalances,\n useAddressBook,\n useGlobalMenu,\n useSettings,\n useSetupSettings,\n useAlert,\n useNavigate,\n useNetworks,\n useLocation,\n useCompletedTransaction,\n useTriggerUpdateTransaction,\n useExtensionAsset,\n useExchangesStatusAlerts,\n useStandardizedNetworks,\n useAddressInputValue,\n useWhitelistedAddresses,\n useSupportedTokens,\n useSendMinAmount,\n useTriggerLoadingConditionally,\n usePartners,\n useConfig,\n useShareOnTwitter,\n useTradePathBySupportedTokens,\n useTokenNamesAndSymbols,\n useTradeForm,\n useTradeApi,\n useTrade,\n useTradeMinAmount,\n useTradeTabs,\n useDiscordInvitation,\n useTradePath,\n useMultipleTransactionsMinAmount,\n useMultipleTransactions,\n useMultipleTransactionsFees,\n useTradeFee,\n useTradeAmountComputation,\n useMultipleTransactionsStore: getUseMultipleTransactionsStore(WidgetType.SEND),\n useTradeEventDispatcher,\n useTradeFormStore,\n useCedeStoreVersion,\n} as DefaultDependenciesWithFeatures;\n","\"use client\";\n\n// src/useQueries.ts\nimport * as React from \"react\";\nimport {\n QueriesObserver,\n QueryObserver,\n notifyManager\n} from \"@tanstack/query-core\";\nimport { useQueryClient } from \"./QueryClientProvider.js\";\nimport { useIsRestoring } from \"./isRestoring.js\";\nimport { useQueryErrorResetBoundary } from \"./QueryErrorResetBoundary.js\";\nimport {\n ensurePreventErrorBoundaryRetry,\n getHasError,\n useClearResetErrorBoundary\n} from \"./errorBoundaryUtils.js\";\nimport {\n ensureSuspenseTimers,\n fetchOptimistic,\n shouldSuspend,\n willFetch\n} from \"./suspense.js\";\nfunction useQueries({\n queries,\n ...options\n}, queryClient) {\n const client = useQueryClient(queryClient);\n const isRestoring = useIsRestoring();\n const errorResetBoundary = useQueryErrorResetBoundary();\n const defaultedQueries = React.useMemo(\n () => queries.map((opts) => {\n const defaultedOptions = client.defaultQueryOptions(\n opts\n );\n defaultedOptions._optimisticResults = isRestoring ? \"isRestoring\" : \"optimistic\";\n return defaultedOptions;\n }),\n [queries, client, isRestoring]\n );\n defaultedQueries.forEach((query) => {\n ensureSuspenseTimers(query);\n ensurePreventErrorBoundaryRetry(query, errorResetBoundary);\n });\n useClearResetErrorBoundary(errorResetBoundary);\n const [observer] = React.useState(\n () => new QueriesObserver(\n client,\n defaultedQueries,\n options\n )\n );\n const [optimisticResult, getCombinedResult, trackResult] = observer.getOptimisticResult(\n defaultedQueries,\n options.combine\n );\n React.useSyncExternalStore(\n React.useCallback(\n (onStoreChange) => isRestoring ? () => void 0 : observer.subscribe(notifyManager.batchCalls(onStoreChange)),\n [observer, isRestoring]\n ),\n () => observer.getCurrentResult(),\n () => observer.getCurrentResult()\n );\n React.useEffect(() => {\n observer.setQueries(\n defaultedQueries,\n options,\n {\n listeners: false\n }\n );\n }, [defaultedQueries, options, observer]);\n const shouldAtLeastOneSuspend = optimisticResult.some(\n (result, index) => shouldSuspend(defaultedQueries[index], result)\n );\n const suspensePromises = shouldAtLeastOneSuspend ? optimisticResult.flatMap((result, index) => {\n const opts = defaultedQueries[index];\n if (opts) {\n const queryObserver = new QueryObserver(client, opts);\n if (shouldSuspend(opts, result)) {\n return fetchOptimistic(opts, queryObserver, errorResetBoundary);\n } else if (willFetch(result, isRestoring)) {\n void fetchOptimistic(opts, queryObserver, errorResetBoundary);\n }\n }\n return [];\n }) : [];\n if (suspensePromises.length > 0) {\n throw Promise.all(suspensePromises);\n }\n const firstSingleResultWhichShouldThrow = optimisticResult.find(\n (result, index) => {\n const query = defaultedQueries[index];\n return query && getHasError({\n result,\n errorResetBoundary,\n throwOnError: query.throwOnError,\n query: client.getQueryCache().get(query.queryHash)\n });\n }\n );\n if (firstSingleResultWhichShouldThrow?.error) {\n throw firstSingleResultWhichShouldThrow.error;\n }\n return getCombinedResult(trackResult());\n}\nexport {\n useQueries\n};\n//# sourceMappingURL=useQueries.js.map","import { useMemo } from \"react\";\nimport { DropListWithIconItem, MarketNetwork } from \"@cede/types\";\nimport { USE_NETWORKS_CACHE_TIME } from \"@cede/utils\";\nimport { UseSendState } from \"../../components/Send/types\";\nimport { useDependencies } from \"../../hooks/useDependencies\";\nimport { UseNetworksProps } from \"./types\";\nimport { useQuery } from \"@tanstack/react-query\";\n\nexport const useNetworks = ({\n toDeposit = false,\n toWithdraw = false,\n accountId,\n tokenSymbol,\n isInternalTransfer,\n}: UseNetworksProps) => {\n const { useVaults, backgroundHandler } = useDependencies();\n const { activeVault } = useVaults();\n\n const { data: networks, isFetching: networksAreLoading } = useQuery<MarketNetwork[]>({\n queryKey: [\"networks\", activeVault, accountId, tokenSymbol, isInternalTransfer, { toDeposit, toWithdraw }],\n queryFn: async () => {\n const networks = await backgroundHandler.getNetworks({\n accountId,\n tokenSymbol,\n isInternalTransfer,\n opts: {\n toDeposit,\n toWithdraw,\n isInternalTransfer,\n },\n });\n return networks;\n },\n enabled: !!activeVault?.id && !!backgroundHandler?.isReady && !!accountId,\n staleTime: USE_NETWORKS_CACHE_TIME,\n gcTime: USE_NETWORKS_CACHE_TIME,\n });\n\n const droplistNetworks: UseSendState[\"networks\"] = useMemo(() => {\n if (networks) {\n let allNetworks: MarketNetwork[] = [];\n allNetworks = networks.map((network) => {\n return {\n ...network,\n label: network.name,\n value: network.network,\n img: network.iconUrl,\n isDisabled: (toDeposit && !network.depositEnabled) || (toWithdraw && !network.withdrawalEnabled),\n };\n });\n return allNetworks.map(\n (network) =>\n ({\n ...network,\n label: network.name,\n } as DropListWithIconItem<MarketNetwork>),\n );\n } else {\n return [];\n }\n }, [tokenSymbol, networks]);\n\n const networksByValue = useMemo(() => {\n return networks?.reduce((acc, network) => {\n acc[network.network] = network;\n return acc;\n }, {} as Record<string, MarketNetwork>);\n }, [networks]);\n\n return {\n networksAreLoading,\n networks,\n droplistNetworks,\n networksByValue,\n };\n};\n","import { SdkErrorCodes, Transaction, ViewEnvironment, isCefiInfoTx } from \"@cede/types\";\nimport { CEDE_CEX_LABELS, STORE_ROUTES, TweetDataKey, WIDGET_ROUTES, tweets } from \"@cede/utils\";\nimport { useDependencies } from \"../../hooks/useDependencies\";\n\nexport const useCompletedTransaction = () => {\n const {\n useNavigate,\n useSendStore,\n useSupportedExchanges,\n useViewEnvironment,\n useTriggerUpdateTransaction,\n useSelectedTransaction,\n useShareOnTwitter,\n } = useDependencies();\n const navigate = useNavigate();\n const { environment } = useViewEnvironment();\n const { isSupportedExchangesLoading, supportedExchangesById } = useSupportedExchanges();\n const { reset, dispatchPrefill, setTutorialIsOpen } = useSendStore();\n const { error, resetError, errorCode } = useSelectedTransaction((state) => ({\n error: state.error,\n resetError: state.resetError,\n errorCode: state.errorCode,\n }));\n\n const transaction: Transaction | null = useTriggerUpdateTransaction();\n\n const { networkName, partnerName, share } = useShareOnTwitter(transaction);\n\n const onTransactionDetails = () => {\n navigate(WIDGET_ROUTES.COMPLETED_TRANSACTION_DETAILS_ROUTE);\n };\n\n const goToSend = () => {\n if (environment === ViewEnvironment.WIDGET) {\n if (!error) {\n reset({ keepInitialProps: true });\n // We want to reactivate the prefill for the widget\n dispatchPrefill({\n tokenSymbol: true,\n network: true,\n address: true,\n amount: true,\n });\n }\n\n if (error && errorCode === SdkErrorCodes.EXCHANGE_INVALID_PERMISSION) {\n navigate(WIDGET_ROUTES.FIX_INVALID_PERMISSIONS_TUTORIAL);\n } else {\n if (errorCode === SdkErrorCodes.WHITELIST_CHECK_FAILED) {\n setTutorialIsOpen(true);\n }\n resetError();\n navigate(WIDGET_ROUTES.ACTION_ROUTE);\n }\n\n return;\n }\n\n reset();\n\n if (error && errorCode === SdkErrorCodes.EXCHANGE_INVALID_PERMISSION) {\n navigate(STORE_ROUTES.FIX_INVALID_PERMISSIONS_TUTORIAL);\n } else {\n resetError();\n navigate(STORE_ROUTES.DEFAULT_ROUTE);\n }\n\n return;\n };\n\n const copy = () => {\n navigator.clipboard.writeText(\n (transaction?.to.account && \"address\" in transaction.to.account && transaction?.to.account.address) || \"\",\n );\n };\n\n const shareOnTwitter = () => {\n const from = transaction?.from;\n if (!from || !isCefiInfoTx(from)) return;\n const placeHolders: Record<string, string> =\n transaction.type === \"order\"\n ? {\n [TweetDataKey.CEX_LABEL]: CEDE_CEX_LABELS[from.account.exchangeId] ?? \"\",\n }\n : {\n [TweetDataKey.CEX_LABEL]: CEDE_CEX_LABELS[from.account.exchangeId] ?? \"\",\n [TweetDataKey.NETWORK]: networkName ?? transaction.to.account.network ?? \"\",\n [TweetDataKey.PARTNER]: partnerName ?? \"\",\n };\n const content =\n transaction.type === \"order\"\n ? tweets.TRADE\n : partnerName\n ? tweets.SEND_WITH_PARTNER\n : tweets.SEND_WITHOUT_PARTNER;\n share(content, placeHolders);\n };\n\n const isRequiringEmailConfirmation =\n transaction?.from.account &&\n isCefiInfoTx(transaction.from) &&\n !!supportedExchangesById[transaction?.from.account.exchangeId]?.isRequiringEmailConfirmation;\n\n return {\n transaction,\n onTransactionDetails,\n goTo: goToSend,\n copy,\n isRequiringEmailConfirmation,\n isSupportedExchangesLoading,\n error,\n errorCode,\n networkName,\n partnerName,\n shareOnTwitter,\n };\n};\n","import { useEffect, useRef } from \"react\";\nimport { SearchTransactionParams, TxStatus, ViewEnvironment, isCefiInfoTx } from \"@cede/types\";\nimport { QueryKeys, STORE_ROUTES, WIDGET_ROUTES } from \"@cede/utils\";\nimport { useDependencies } from \"../hooks/useDependencies\";\nimport { useQuery, useQueryClient } from \"@tanstack/react-query\";\n\nexport const useTriggerUpdateTransaction = () => {\n const { useSelectedTransaction, backgroundHandler, useNavigate, useViewEnvironment } = useDependencies();\n const transaction = useSelectedTransaction((state) => state.transaction);\n const setTransaction = useSelectedTransaction((state) => state.setTransaction);\n const startTime = useRef(Date.now());\n const navigate = useNavigate();\n const { environment } = useViewEnvironment();\n const queryClient = useQueryClient();\n\n // @TODO: The number value should use refresh_status.max_time from the app config but we have no way to retrieve it for now\n const shouldContinuePolling = Date.now() - startTime.current > 60 * 10 * 1000;\n\n const { data: foundTransaction } = useQuery({\n queryKey: [\n \"searchTransaction\",\n {\n transactionId:\n transaction && isCefiInfoTx(transaction.from) ? transaction?.from.transaction.transactionId : undefined,\n tokenOrPairSymbol:\n transaction && isCefiInfoTx(transaction.from) ? transaction?.from.transaction.tokenSymbol : undefined,\n },\n ],\n queryFn: async () => {\n if (!transaction || !isCefiInfoTx(transaction.from)) return;\n\n const params: SearchTransactionParams = {\n accountId: transaction?.from.account.accountId,\n transactionId: transaction?.from.transaction.transactionId,\n transactionType: transaction?.type === \"order\" ? \"trade\" : \"withdrawal\",\n tokenOrPairSymbol: transaction.pairSymbol ?? transaction.from.transaction.tokenSymbol,\n timestamp: transaction.from.transaction.timestamp,\n metadata: {\n defiAddress: localStorage.getItem(\"defiAddress\") ?? undefined,\n },\n };\n return await backgroundHandler.searchTransaction(params);\n },\n gcTime: 0,\n staleTime: 0,\n // @TODO: Retrieve the refresh_status.interval from config, we currently can't get this information from anywhere using the provider\n refetchInterval: 5000,\n enabled:\n !!backgroundHandler.isReady &&\n !!transaction &&\n transaction?.from.transaction.status === TxStatus.PENDING &&\n !shouldContinuePolling,\n });\n\n useEffect(() => {\n if (!foundTransaction || foundTransaction.from.transaction.status === TxStatus.PENDING) return;\n\n queryClient.invalidateQueries({ queryKey: [QueryKeys.VAULT_TRANSACTIONS] });\n setTransaction(foundTransaction);\n }, [foundTransaction]);\n\n useEffect(() => {\n if (!transaction) {\n navigate(environment === ViewEnvironment.POPUP ? STORE_ROUTES.VAULT_DETAILS_ROUTE : WIDGET_ROUTES.ACTION_ROUTE);\n }\n }, [transaction]);\n\n return transaction;\n};\n","import { useEffect } from \"react\";\nimport { readAssetFromExtension } from \"@cede/utils\";\nimport { useDependencies } from \".\";\nimport { useQuery } from \"@tanstack/react-query\";\n\ntype UseExtensionAssetProps = {\n path?: string;\n disable?: boolean;\n onAssetNotFound?: () => void;\n};\n\nexport const useExtensionAsset = ({ path, onAssetNotFound, disable = false }: UseExtensionAssetProps) => {\n const { useSettings } = useDependencies();\n const { extensionUrl } = useSettings();\n\n const {\n data: asset,\n isLoading,\n isError,\n isSuccess,\n } = useQuery({\n queryKey: [`extensionAsset`, path, extensionUrl],\n queryFn: () => (path ? readAssetFromExtension(path, extensionUrl) : undefined),\n enabled: !!path && !disable,\n staleTime: Infinity,\n gcTime: Infinity,\n });\n\n useEffect(() => {\n if (isLoading) return;\n if (isError || !isSuccess) {\n onAssetNotFound?.();\n }\n }, [asset, isLoading, isError, isSuccess]);\n\n return {\n asset,\n fullPath: `${extensionUrl}${path}`,\n isAssetLoading: isLoading,\n isAssetError: isError,\n isAssetSuccess: isSuccess,\n };\n};\n","export const readAssetFromExtension = async (path: string, basePath?: string) => {\n const url = basePath ? `${basePath}${path}` : chrome.runtime.getURL(path);\n const file = await fetch(url)\n .then(async (res) => res.text())\n .catch(() => null);\n return file;\n};\n","import { useEffect, useMemo, useRef } from \"react\";\nimport { ExchangeStatusesUpdateResponse, userFacingMessages } from \"@cede/types\";\nimport { CEDE_CEX_LABELS } from \"@cede/utils\";\nimport { useDependencies } from \"../hooks/useDependencies\";\nimport { AlertTypes } from \"../store\";\n\nexport const useExchangesStatusAlerts = () => {\n const { useSupportedExchanges, useAlert, backgroundHandler, useVaults, useLoginStore } = useDependencies();\n const { downExchanges } = useSupportedExchanges();\n const appendAlert = useAlert((state) => state.append);\n const hasSentInitialAlerts = useRef<boolean>(false);\n const { activeVault } = useVaults();\n const { isLoggedIn } = useLoginStore();\n\n const downCexNames = useMemo<Array<string[]>>(() => {\n const groups: Array<string[]> = [];\n if (!downExchanges || !activeVault?.accounts) return groups;\n\n // We only want to show alerts for exchanges that are connected to the active vault\n const filteredExchanges = downExchanges.filter((cex) =>\n activeVault.accounts.some((acc) => acc.exchangeId === cex.id),\n );\n\n const downExchangesNames = filteredExchanges.map((cex) => CEDE_CEX_LABELS[cex.id] ?? cex.name);\n\n for (let i = 0; i < downExchangesNames.length; i += 3) {\n groups.push(downExchangesNames.slice(i, i + 3));\n }\n return groups;\n }, [downExchanges, activeVault]);\n\n const displayAlerts = (names: Array<string>, alertType: AlertTypes) => {\n let alertMessage = \"\";\n\n if (alertType === AlertTypes.ERROR) {\n if (names[0] && names.length === 1) {\n alertMessage = userFacingMessages.EXCHANGES_STATUSES.SINGLE_DOWN(names[0]);\n } else if (names[0] && names[1] && names.length === 2) {\n alertMessage = userFacingMessages.EXCHANGES_STATUSES.TWO_DOWN(names[0], names[1]);\n } else if (names[0] && names[1] && names[2] && names.length === 3) {\n alertMessage = userFacingMessages.EXCHANGES_STATUSES.THREE_DOWN(names[0], names[1], names[2]);\n }\n } else {\n if (names[0] && names.length === 1) {\n alertMessage = userFacingMessages.EXCHANGES_STATUSES.SINGLE_BACK_ONLINE(names[0]);\n } else if (names[0] && names[1] && names.length === 2) {\n alertMessage = userFacingMessages.EXCHANGES_STATUSES.TWO_BACK_ONLINE(names[0], names[1]);\n } else if (names[0] && names[1] && names[2] && names.length === 3) {\n alertMessage = userFacingMessages.EXCHANGES_STATUSES.THREE_BACK_ONLINE(names[0], names[1], names[2]);\n }\n }\n\n appendAlert(alertMessage, alertType);\n };\n\n useEffect(() => {\n if (!activeVault?.accounts || hasSentInitialAlerts.current) return;\n\n const listenerId = backgroundHandler.on(\n \"exchangesStatusesUpdate\",\n ({ hasGoneOffline, hasBackOnline }: ExchangeStatusesUpdateResponse) => {\n const filteredOnlineCex = hasBackOnline.filter((cex) =>\n activeVault?.accounts?.some((acc) => acc.exchangeId === cex),\n );\n const filteredOfflineCex = hasGoneOffline.filter((cex) =>\n activeVault?.accounts?.some((acc) => acc.exchangeId === cex),\n );\n\n const backOnlineCexNames = filteredOnlineCex.map((cex) => CEDE_CEX_LABELS[cex] ?? cex);\n const goneOfflineCexNames = filteredOfflineCex.map((cex) => CEDE_CEX_LABELS[cex] ?? cex);\n\n if (backOnlineCexNames.length) {\n for (let i = 0; i < backOnlineCexNames.length; i += 3) {\n displayAlerts(backOnlineCexNames.slice(i, i + 3), AlertTypes.SUCCESS);\n }\n }\n\n if (goneOfflineCexNames.length) {\n for (let i = 0; i < goneOfflineCexNames.length; i += 3) {\n displayAlerts(goneOfflineCexNames.slice(i, i + 3), AlertTypes.ERROR);\n }\n }\n },\n );\n\n return () => {\n backgroundHandler.off(listenerId);\n };\n }, [activeVault?.accounts]);\n\n useEffect(() => {\n if (downCexNames.length === 0 || !isLoggedIn || hasSentInitialAlerts.current) return;\n hasSentInitialAlerts.current = true;\n\n downCexNames.map((names) => {\n displayAlerts(names, AlertTypes.ERROR);\n });\n }, [downCexNames, isLoggedIn]);\n};\n","import { ExchangeToStandarizedChainsMapping, StandardizedChain } from \"@cede/types\";\nimport { QueryKeys } from \"@cede/utils\";\nimport { useDependencies } from \"../hooks/useDependencies\";\nimport { useQuery } from \"@tanstack/react-query\";\n\nexport const useStandardizedNetworks = () => {\n const { backgroundHandler } = useDependencies();\n\n const { data, error, isLoading, refetch } = useQuery<{\n standardizedNetworksByExchange: ExchangeToStandarizedChainsMapping;\n supportedNetworks: StandardizedChain[];\n }>({\n queryKey: [QueryKeys.STANDARDIZED_NETWORKS],\n queryFn: async () => {\n const standardizedNetworksByExchange: ExchangeToStandarizedChainsMapping =\n await backgroundHandler.getStandardizedNetworks();\n\n return {\n standardizedNetworksByExchange,\n supportedNetworks: Object.values(standardizedNetworksByExchange)\n .flat()\n .filter((network, index, self) => self.findIndex((n) => n.icid === network.icid) === index),\n };\n },\n enabled: !!backgroundHandler?.isReady,\n staleTime: Infinity,\n gcTime: Infinity,\n refetchOnWindowFocus: false,\n });\n\n const { standardizedNetworksByExchange, supportedNetworks } = data || {};\n\n const getNetworkName = (internalNetwork: string, exchangeId?: string) => {\n if (!standardizedNetworksByExchange) return undefined;\n const exchangeNetworks = exchangeId ? standardizedNetworksByExchange[exchangeId] : supportedNetworks;\n if (!exchangeNetworks) return undefined;\n const network = exchangeNetworks.find((network) => network.icid === internalNetwork);\n return network?.icn;\n };\n\n return {\n refetchStandardizedNetworks: refetch,\n standardizedNetworks: standardizedNetworksByExchange,\n isStandardizedNetworksLoading: isLoading,\n standardizedNetworksError: error,\n getNetworkName,\n supportedNetworks,\n };\n};\n","import { useEffect, useState } from \"react\";\n\nexport type AddressInputValueProps = {\n address?: string;\n isFocused?: boolean;\n};\n\nconst lengthToShow = 4;\n// We start splitting the address after 13 chars\nconst minLength = lengthToShow * 2 + 7;\n\nexport const useAddressInputValue = ({ address, isFocused }: AddressInputValueProps = {}) => {\n const [value, setValue] = useState(\"\");\n\n const splitAddress = (address?: string) => {\n if (address && address.length > minLength) {\n const prefix = address.slice(0, lengthToShow + 2);\n const suffix = address.slice(-lengthToShow);\n\n return `${prefix}.....${suffix}`;\n }\n\n return address ?? \"\";\n };\n\n useEffect(() => {\n if (isFocused) {\n setValue(address ?? \"\");\n } else {\n setValue(splitAddress(address ?? \"\"));\n }\n }, [address, isFocused]);\n\n return { value, splitAddress };\n};\n","import { useMemo } from \"react\";\nimport { Any, WhitelistedAddresses } from \"@cede/types\";\nimport { CEDE_CEXS, USE_WHITELISTED_ADDRESSES_CACHE_TIME, USE_WHITELISTED_ADDRESSES_STALE_TIME } from \"@cede/utils\";\nimport { useDependencies } from \"../../hooks/useDependencies\";\nimport { DropListWhitelistedAddress, UseWhitelistedAddressesProps } from \"./types\";\nimport { useQuery } from \"@tanstack/react-query\";\n\nexport const useWhitelistedAddresses = ({ accountId, tokenSymbol, network }: UseWhitelistedAddressesProps) => {\n const { useVaults, backgroundHandler, useSupportedExchanges, useAccounts } = useDependencies();\n\n const { activeVault } = useVaults();\n const { supportedExchangesById } = useSupportedExchanges();\n const { accountsByIds } = useAccounts();\n\n const exchangeSupportGetWhitelistedAddresses = useMemo(() => {\n if (!accountId || !accountsByIds || !supportedExchangesById) return false;\n const account = accountsByIds[accountId];\n if (!account) return false;\n return !!supportedExchangesById[account.exchangeId]?.provideWhitelistedAddresses;\n }, [supportedExchangesById, accountsByIds, accountId]);\n\n const getWhitelistedAddressQueryKey = () => {\n const account = accountsByIds[accountId];\n const key: Any[] = [\"whitelistedAddresses\", activeVault, accountId, exchangeSupportGetWhitelistedAddresses];\n if (account && [CEDE_CEXS.GATEIO, CEDE_CEXS.HTX].includes(account.exchangeId)) {\n key.push(tokenSymbol);\n }\n return key;\n };\n\n const isWhitelistedAddressQueryEnabled = () => {\n const account = accountsByIds[accountId];\n let status = !!activeVault?.id && !!backgroundHandler?.isReady && !!accountId && !!supportedExchangesById;\n if (account && [CEDE_CEXS.GATEIO, CEDE_CEXS.HTX].includes(account.exchangeId)) {\n status = status && !!tokenSymbol;\n }\n return status;\n };\n\n const getWhitelistedAddressParams = () => {\n const account = accountsByIds[accountId];\n if (!account || ![CEDE_CEXS.GATEIO, CEDE_CEXS.HTX].includes(account.exchangeId)) return { accountId };\n return {\n accountId,\n tokenSymbol,\n };\n };\n\n const {\n data: whitelistedAddresses,\n isFetching: isWhitelistedAddressesLoading,\n isError: isWhitelistedAddressesError,\n refetch: refetchWhitelistedAddresses,\n } = useQuery<WhitelistedAddresses[]>({\n queryKey: getWhitelistedAddressQueryKey(),\n queryFn: async () => {\n if (!exchangeSupportGetWhitelistedAddresses) return [];\n const addresses: WhitelistedAddresses[] = await backgroundHandler.getWhitelistedAddresses(\n getWhitelistedAddressParams(),\n );\n return addresses;\n },\n enabled: isWhitelistedAddressQueryEnabled(),\n staleTime: USE_WHITELISTED_ADDRESSES_STALE_TIME,\n gcTime: USE_WHITELISTED_ADDRESSES_CACHE_TIME,\n });\n\n const { filteredAddresses, droplistWhitelistedAddresses } = useMemo(() => {\n const filteredAddresses = whitelistedAddresses?.filter(\n (address) =>\n (!tokenSymbol || !address.tokenSymbol || address.tokenSymbol === tokenSymbol) &&\n (!network || address.network === network),\n );\n\n const droplistWhitelistedAddresses: DropListWhitelistedAddress[] =\n filteredAddresses?.map((address) => ({\n key: address.key,\n address: address.address,\n label: address.key,\n value: `${address.key}-${address.address}`,\n searchableTerms: [address.key, address.address],\n img: \"\",\n })) ?? [];\n\n return { filteredAddresses, droplistWhitelistedAddresses };\n }, [whitelistedAddresses, tokenSymbol, network]);\n\n return {\n whitelistedAddresses: filteredAddresses,\n isWhitelistedAddressesLoading,\n isWhitelistedAddressesError,\n droplistWhitelistedAddresses,\n refetchWhitelistedAddresses,\n };\n};\n","import { useMemo } from \"react\";\nimport { SupportedTokensDropListWithIconItem, TokenWithMarketNetworkAndTokenName } from \"@cede/types\";\nimport { forgeTokenURL, USE_SUPPORTED_TOKENS_CACHE_TIME } from \"@cede/utils\";\nimport { UseSendState } from \"../../components/Send/types\";\nimport { useDependencies } from \"../../hooks/useDependencies\";\nimport { UseSupportedTokensProps } from \"./types\";\nimport { useQuery } from \"@tanstack/react-query\";\n\nexport const useSupportedTokens = ({ network, accountId, onlyWithdrawable = false }: UseSupportedTokensProps) => {\n const { backgroundHandler } = useDependencies();\n\n const { data: supportedTokens, isFetching: supportedTokensAreLoading } = useQuery<\n TokenWithMarketNetworkAndTokenName[]\n >({\n queryKey: [\"supportedTokens\", accountId, network],\n queryFn: async () => {\n const supportedTokens = await backgroundHandler.getSupportedTokens({\n accountId,\n network,\n });\n return supportedTokens;\n },\n enabled: !!backgroundHandler?.isReady && !!accountId,\n staleTime: USE_SUPPORTED_TOKENS_CACHE_TIME,\n gcTime: USE_SUPPORTED_TOKENS_CACHE_TIME,\n });\n\n const isWithdrawEnabledNetwork = ({\n network,\n token,\n }: {\n network?: string;\n token: TokenWithMarketNetworkAndTokenName;\n }) => {\n return token.networks?.find((n) => n.network === network)?.withdrawalEnabled;\n };\n\n const droplistSupportedTokens: UseSendState[\"droplistDestinationTokens\"] = useMemo(() => {\n if (supportedTokens) {\n let allSupportedTokens: SupportedTokensDropListWithIconItem[] = [];\n allSupportedTokens = supportedTokens.map((token) => {\n return {\n ...token,\n label: token.name ?? token.tokenSymbol,\n value: token.tokenSymbol,\n searchableTerms: [token.tokenSymbol, token.name ?? \"\"],\n img: forgeTokenURL(token.tokenSymbol),\n isDisabled: onlyWithdrawable && !isWithdrawEnabledNetwork({ network, token }),\n };\n });\n\n if (onlyWithdrawable) {\n allSupportedTokens = allSupportedTokens.filter((token) => token.isWithdrawable);\n }\n\n return allSupportedTokens;\n } else {\n return [];\n }\n }, [network, accountId, supportedTokens]);\n\n return {\n supportedTokensAreLoading,\n droplistSupportedTokens,\n supportedTokens,\n };\n};\n","import { useMemo } from \"react\";\nimport { useDependencies } from \"../../../hooks\";\n\ntype UseSendMinAmountProps = {\n shouldUseTradeAndSend?: boolean;\n supportedTokensAreLoading?: boolean;\n};\n\nexport const useSendMinAmount = ({ shouldUseTradeAndSend = false }: UseSendMinAmountProps = {}) => {\n const { useSendStore, useNetworks, useMultipleTransactionsMinAmount } = useDependencies();\n const form = useSendStore();\n const { droplistNetworks, networksAreLoading } = useNetworks({\n toDeposit: false,\n toWithdraw: true,\n accountId: form.fromAccount?.value ?? \"\",\n tokenSymbol: form.currency?.value,\n isInternalTransfer: !!form.initialProps.isInternalTransfer,\n });\n const { minAmount: multipleTransactionsMinAmount, isLoading: multiWithdrawalMinIsLoading } =\n useMultipleTransactionsMinAmount({\n enabled: shouldUseTradeAndSend,\n accountId: form.fromAccount?.value ?? \"\",\n fromToken: form.currency?.value ?? \"\",\n toToken: form.destinationCurrency?.value ?? \"\",\n network: form.network || undefined,\n activeWithdrawal: true,\n isInternalTransfer: !!form.initialProps.isInternalTransfer,\n });\n\n const classicWithdrawalMinAmount = useMemo(() => {\n if (!form.currency) return undefined;\n const network = droplistNetworks.find((network) => network.network === form.network?.value);\n if (network) {\n // min amount must take into account the fee if defined\n const minAmount = Number(network.withdrawMin);\n const fee = Number(network.withdrawFee);\n return String(fee ? minAmount + fee : minAmount);\n }\n return undefined;\n }, [form.network, form.currency, droplistNetworks]);\n\n return {\n minAmount: shouldUseTradeAndSend ? multipleTransactionsMinAmount : classicWithdrawalMinAmount,\n minAmountIsLoading:\n (shouldUseTradeAndSend && (multiWithdrawalMinIsLoading || multipleTransactionsMinAmount === undefined)) ||\n networksAreLoading,\n };\n};\n","import { useRef, useEffect } from \"react\";\nimport { useDependencies } from \".\";\n\ntype UseTriggerLoadingConditionallyProps = {\n isLoading: boolean;\n};\n\n/**\n * This hook is used to trigger a loading state conditionally.\n * If isLoading is true, it will add a big pending request to the loading store (only once).\n * If isLoading is false, it will remove the big pending request from the loading store (only once).\n */\nexport const useTriggerLoadingConditionally = ({ isLoading }: UseTriggerLoadingConditionallyProps) => {\n const { useLoading } = useDependencies();\n const addBigPendingRequest = useLoading((state) => state.addBigPendingRequest);\n const removeBigPendingRequest = useLoading((state) => state.removeBigPendingRequest);\n const hasStarted = useRef(false);\n const hasFinished = useRef(false);\n\n useEffect(() => {\n if (isLoading && !hasStarted.current) {\n addBigPendingRequest();\n hasStarted.current = true;\n } else if (!isLoading && hasStarted.current && !hasFinished.current) {\n hasFinished.current = true;\n removeBigPendingRequest();\n }\n }, [isLoading]);\n\n // We need to reset the states if the hook is unmounted\n // while the request is still pending\n useEffect(() => {\n return () => {\n if (hasStarted.current && !hasFinished.current) {\n hasStarted.current = false;\n removeBigPendingRequest();\n }\n };\n }, []);\n};\n","import { Partner } from \"@cede/types\";\nimport { QueryKeys } from \"@cede/utils\";\nimport { useDependencies } from \".\";\nimport { useQuery } from \"@tanstack/react-query\";\n\n/**\n * Hook to fetch our partners\n * @returns partners, isLoadingPartners, refetchPartners\n */\nexport const usePartners = () => {\n const { backgroundHandler } = useDependencies();\n\n const {\n data: partners,\n isFetching: isLoadingPartners,\n refetch,\n } = useQuery<Partner[]>({\n queryKey: [QueryKeys.PARTNERS],\n queryFn: async () => {\n return await backgroundHandler.fetchPartners({\n visible: true,\n });\n },\n enabled: !!backgroundHandler?.isReady,\n gcTime: Infinity,\n staleTime: Infinity,\n refetchOnWindowFocus: false,\n });\n\n return {\n partners,\n isLoadingPartners,\n refetchPartners: refetch,\n };\n};\n","import { useMemo } from \"react\";\nimport { Partner, Transaction, isCefiInfoTx, isDefiInfoTx } from \"@cede/types\";\nimport { NETWORK_TWITTER_HANDLE_CONFIG_IDENTIFIER, POST_ON_TWITTER_URL, replacePlaceholdersByValue } from \"@cede/utils\";\nimport { useDependencies } from \".\";\n\n/**\n * Hook to get the twitter handle of a partner and a network from a transaction\n * @param transaction contains the partnerId and the network\n * @returns partnerName, networkName\n */\nexport const useShareOnTwitter = (transaction: Transaction | null) => {\n const { usePartners, useStandardizedNetworks, useConfig } = useDependencies();\n\n const { getNetworkName } = useStandardizedNetworks();\n const { partners } = usePartners();\n const { config } = useConfig();\n\n // Returns the twitter handle if it exists in the config (growthbook) and the internal network name otherwise\n const networkName = useMemo(() => {\n if (!transaction) return undefined;\n if (transaction.type === \"withdrawal\" && isCefiInfoTx(transaction.from) && isDefiInfoTx(transaction.to)) {\n const internalNetwork = transaction.to.account.network;\n const key = `${NETWORK_TWITTER_HANDLE_CONFIG_IDENTIFIER}${internalNetwork}`;\n const twitterNetworkName = config?.[key];\n if (twitterNetworkName) return `@${twitterNetworkName}`;\n // If no twitter handle is found, we return the internal network name\n return getNetworkName(internalNetwork, transaction.from.account.exchangeId);\n }\n return undefined;\n }, [config, getNetworkName]);\n\n const partnerName = useMemo(() => {\n if (!transaction || !partners) return undefined;\n const partnerId = transaction.partnerId;\n if (partnerId !== undefined) {\n const partner = partners.find((partner: Partner) => partner.id === partnerId);\n if (partner?.twitterHandle) return `@${partner.twitterHandle}`;\n }\n return undefined;\n }, [partners, transaction]);\n\n const share = (content: string, placeholderValues: Record<string, string>) => {\n const mappedContent = replacePlaceholdersByValue(content, placeholderValues);\n const twitterUrl = `${POST_ON_TWITTER_URL}${encodeURIComponent(mappedContent)}`;\n window.open(twitterUrl, \"_blank\");\n };\n\n return {\n partnerName,\n networkName,\n share,\n };\n};\n","import { TokenSymbolName } from \"@cede/types\";\nimport { TOKENS_NAMES_AND_SYMBOLS_CACHE_TIME } from \"@cede/utils\";\nimport { useDependencies } from \"../../hooks/useDependencies\";\nimport { useQuery } from \"@tanstack/react-query\";\n\nexport const useTokenNamesAndSymbols = () => {\n const { useBackgroundHandler } = useDependencies();\n const { backgroundHandler } = useBackgroundHandler();\n\n const {\n data: tokenNamesAndSymbols,\n error,\n isLoading,\n refetch,\n } = useQuery<TokenSymbolName[], Error>({\n queryKey: [\"tokenNamesAndSymbol\"],\n queryFn: backgroundHandler?.getTokenNamesAndSymbols,\n enabled: false,\n staleTime: TOKENS_NAMES_AND_SYMBOLS_CACHE_TIME,\n gcTime: TOKENS_NAMES_AND_SYMBOLS_CACHE_TIME,\n });\n\n return {\n getTokensNameAndSymbols: refetch,\n tokenNamesAndSymbols: tokenNamesAndSymbols?.length ? tokenNamesAndSymbols : [],\n isLoading,\n error,\n };\n};\n","import { BalancesByToken, BalancesByWalletType } from \"@cede/types\";\n\n/**\n * @description\n * Converts balances structure indexed by wallet type to the structure indexed by token.\n */\nexport const balancesByWalletTypeToBalancesByToken = (balancesByWalletType: BalancesByWalletType): BalancesByToken => {\n const balancesByToken = Object.values(balancesByWalletType).reduce((acc, balancesByToken) => {\n Object.entries(balancesByToken).forEach(([tokenSymbol, balance]) => {\n const existingBalance = acc[tokenSymbol];\n if (!existingBalance) {\n acc[tokenSymbol] = {\n totalBalance: balance.totalBalance,\n freeBalance: balance.freeBalance,\n usedBalance: balance.usedBalance,\n refTotalBalance: balance.refTotalBalance,\n refFreeBalance: balance.refFreeBalance,\n refUsedBalance: balance.refUsedBalance,\n };\n } else {\n existingBalance.totalBalance += balance.totalBalance;\n existingBalance.refTotalBalance += balance.refTotalBalance;\n existingBalance.freeBalance += balance.freeBalance;\n existingBalance.refFreeBalance += balance.refFreeBalance;\n existingBalance.usedBalance += balance.usedBalance;\n existingBalance.refUsedBalance += balance.refUsedBalance;\n }\n });\n\n return acc;\n }, {} as BalancesByToken);\n return balancesByToken;\n};\n","import { ReactElement, useEffect, useMemo, useState } from \"react\";\nimport ccxt from \"@cede/ccxt\";\nimport { DropListWithIconItem } from \"@cede/ds\";\nimport {\n Any,\n AssetItemListProps,\n MarketPair,\n OrderSide,\n TokenPrice,\n TokenSymbol,\n OrderType,\n TradeForm,\n ViewEnvironment,\n userFacingMessages,\n} from \"@cede/types\";\nimport {\n API_ENDPOINT,\n CEDE_CEXS,\n CEDE_CEX_LABELS,\n STORE_ROUTES,\n WIDGET_ROUTES,\n getCexLabel,\n getErrorMessage,\n getFromApi,\n orderToTransactionMapper,\n unformatNumberAsString,\n} from \"@cede/utils\";\nimport { useDebounceValue } from \"../../../hooks/useDebounceFn\";\nimport { useDependencies } from \"../../../hooks/useDependencies\";\nimport { useEffectOnce } from \"../../../hooks/useEffectOnce\";\nimport { useTriggerEffect, useTriggerEffectOnce } from \"../../../hooks/useTriggerEffect\";\nimport { getTradePathLabel } from \"../../Send/hooks/utils\";\nimport { AvailableAssets, UseTradeHook, UseTradeOpts } from \"../types\";\nimport { useRepeatTrade } from \"./useRepeatTrade\";\nimport {\n AlertTypes,\n DroplistMissingPermission,\n generateFakeTradeTransactionTradeForm,\n tradeTabs,\n} from \"@cedelabs/react-utils\";\nimport { Typography } from \"@mui/material\";\nimport { useQuery, useQueryClient } from \"@tanstack/react-query\";\n\nexport const useTrade: UseTradeHook = (opts?: UseTradeOpts) => {\n const {\n useLocation,\n useAlert,\n usePrice,\n useVaults,\n useSettings,\n useAccounts,\n useTradeApi,\n useTradeForm,\n useSupportedExchanges,\n useViewEnvironment,\n useBackgroundHandler,\n useSelectedTransaction,\n useLoading,\n useNavigate,\n useTradeMinAmount,\n useTradeFee,\n useMultipleTransactions,\n useTradeAmountComputation,\n useTradeFormStore,\n useTradeEventDispatcher,\n useTradeTabs,\n } = useDependencies();\n\n /**\n * ************************ Utils ************************\n */\n const {\n tradeForm,\n dispatchForm,\n setFocusedInput,\n focusedInput,\n resetForm,\n addMax,\n resetAmounts,\n hasSelectedBothTokens,\n canByPassApprovalTradeHub,\n setByPassApprovalTradeHub,\n } = useTradeForm();\n\n // we need to debounce the amountFrom to avoid multiple requests while the user is typing\n const { debouncedValue: debouncedAmountFrom, isDebouncing } = useDebounceValue(tradeForm.amountFrom, 500);\n const config = tradeForm.initialProps;\n\n const { selectedTab: orderType, setSelectedTab: selectOrderType } = useTradeTabs();\n\n const {\n assetsFrom,\n assetsTo,\n assetsToAreLoading,\n underlyingMarkets,\n loadMarkets,\n marketRate,\n isLoadingBalances,\n isLoadingUnderlyingMarkets,\n tradePath,\n droplistDestinationTokensError,\n shouldUseTradeSquare,\n droplistDestinationTokensAreLoading,\n popularTokens,\n markets,\n isLimitOrderSupported,\n } = useTradeApi({\n selectedAccount: tradeForm.selectedAccount,\n dispatchForm,\n tokenFrom: tradeForm.tokenFrom,\n form: tradeForm,\n });\n const {\n fee,\n isLoading: feeIsLoading,\n preparedOrder,\n } = useTradeFee({\n tradeForm,\n debouncedAmountFrom,\n marketRate,\n shouldUseTradeSquare,\n orderType,\n });\n\n const { minAmount: minAmountFrom } = useTradeMinAmount({\n tradeForm,\n marketRate,\n shouldUseTradeSquare,\n orderType,\n });\n\n const {\n loadTransactions: loadMultipleTransactions,\n transactions,\n clearState: clearMultipleTransactions,\n isTxLoading: isMultipleTransactionsLoading,\n } = useMultipleTransactions({\n accountId: tradeForm.selectedAccount?.value || \"\",\n fromTokenAmount: tradeForm.amountFrom || \"\",\n tradePath,\n });\n\n const { computeAmountFrom, computeAmountTo } = useTradeAmountComputation({\n tradeForm,\n dispatchForm,\n marketRate,\n shouldUseTradeSquare,\n transactions,\n orderType,\n });\n\n const [enabledEventDispatcher, setEnabledEventDispatcher] = useState(false);\n useTradeEventDispatcher({ tradeForm, tradePath, enabled: enabledEventDispatcher });\n\n /**\n * ************************ State ************************\n */\n\n // we don't allow to trade to other tokens than the ones in the config, except if the token from is the token to trade\n const filteredAssetsTo = useMemo(() => {\n if (!config?.tokenSymbols || config?.tokenSymbols?.includes(tradeForm.tokenFrom?.value || \"\")) return assetsTo;\n\n return assetsTo.filter((asset) => config.tokenSymbols?.includes(asset.value));\n }, [assetsTo, config?.tokenSymbols, tradeForm.tokenFrom?.value]);\n\n // Split the assetsTo in 2 parts: the popular ones and the rest\n const derivedAssetsTo = useMemo(() => {\n const popularAssetsTo: AvailableAssets = [];\n const allAssetsTo: AvailableAssets = [];\n filteredAssetsTo.forEach((asset) => {\n if (popularTokens.includes(asset.value)) {\n popularAssetsTo.push(asset);\n } else {\n allAssetsTo.push(asset);\n }\n });\n const data: Record<string, AvailableAssets> = {};\n if (popularAssetsTo.length) data.popular = popularAssetsTo;\n if (allAssetsTo.length) data.rest = allAssetsTo;\n return data;\n }, [filteredAssetsTo, popularTokens]);\n\n const quoteToken = tradeForm.orderSide === \"buy\" ? tradeForm.tokenFrom : tradeForm.tokenTo;\n const price = tradeForm.orderSide === \"buy\" ? marketRate.ask : marketRate.bid;\n\n const { droplistAccounts: availableAccounts, areAccountsLoading } = useAccounts();\n const { shouldDisableCex, disabledCexText, isFeatureSupportedByCex, isSupportedExchangesLoading } =\n useSupportedExchanges();\n const { backgroundHandler } = useBackgroundHandler();\n const { environment } = useViewEnvironment();\n const setTransaction = useSelectedTransaction((state) => state.setTransaction);\n const setError = useSelectedTransaction((state) => state.setError);\n const addBigPendingRequest = useLoading((state) => state.addBigPendingRequest);\n const removeBigPendingRequest = useLoading((state) => state.removeBigPendingRequest);\n const setDescription = useLoading((state) => state.setDescription);\n const navigate = useNavigate();\n const queryClient = useQueryClient();\n const appendAlert = useAlert((state) => state.append);\n const removeByMessage = useAlert((state) => state.removeByMessage);\n\n // @todo fix $GPT token symbol as on MEXC it's not the same as on the other exchanges\n // for mexc GPT campaign (the shit coin project) we use customprices as a quickfix, it should be removed in the future\n const customPrices = useQuery({\n queryKey: [\"customPrices\"],\n queryFn: async () => {\n const { data } = await getFromApi(API_ENDPOINT.PRICES, undefined);\n const tokens = data?.tokens;\n const mappedTokens: { [tokenSymbol: TokenSymbol]: TokenPrice } = {};\n\n tokens?.forEach((token: TokenPrice) => {\n mappedTokens[token.tokenSymbol] = token;\n });\n return mappedTokens;\n },\n enabled: tradeForm.selectedAccount?.cexValue === CEDE_CEXS.MEXC,\n refetchInterval: 1000 * 60 * 5,\n });\n\n const { availableForTradeAccounts, availableForTradeAccountsAreLoading } = useMemo(() => {\n if (areAccountsLoading || isSupportedExchangesLoading) {\n return {\n availableForTradeAccounts: [],\n availableForTradeAccountsAreLoading: true,\n };\n }\n const accounts = availableAccounts.filter((account) =>\n isFeatureSupportedByCex(account.cexValue, orderType === OrderType.LIMIT ? \"limit_trade\" : \"trade\"),\n );\n return {\n availableForTradeAccounts:\n config?.exchangeIds && config.exchangeIds.length > 0\n ? accounts.filter((account) => config.exchangeIds?.includes(account.cexValue))\n : accounts,\n availableForTradeAccountsAreLoading: false,\n };\n }, [availableAccounts, orderType, areAccountsLoading, isSupportedExchangesLoading]);\n\n const { assetFromLoading, assetToLoading } = useRepeatTrade({\n availableAccounts: availableForTradeAccounts,\n tradeForm,\n dispatchForm,\n useAlert,\n useLocation,\n assetsFrom,\n assetsTo,\n setFocusedInput,\n resetAmounts,\n });\n\n const { activeVault } = useVaults();\n const _navigate = useNavigate();\n\n const [isSwitchIconHovered, setIsSwitchIconHovered] = useState(false);\n\n const assetBalance = useMemo(() => {\n const balance = assetsFrom.find((asset) => asset.value === tradeForm.tokenFrom?.value);\n\n return balance?.freeBalance ?? 0;\n }, [assetsFrom, tradeForm.tokenFrom]);\n\n let tokenFromPrice = usePrice(tradeForm.tokenFrom?.value || \"\");\n let tokenToPrice = usePrice(tradeForm.tokenTo?.value || \"\");\n\n if (tradeForm.tokenFrom?.value === \"GPT\") tokenFromPrice = customPrices.data?.GPT?.exchanges?.mexc || 0;\n if (tradeForm.tokenTo?.value === \"GPT\") tokenToPrice = customPrices.data?.GPT?.exchanges?.mexc || 0;\n\n const currency = useSettings((state) => state.currency);\n\n const warningMessage = useMemo(() => {\n if (\n tradeForm.selectedAccount &&\n !isSupportedExchangesLoading &&\n !isFeatureSupportedByCex(tradeForm.selectedAccount.cexValue, \"trade\")\n ) {\n return `${CEDE_CEX_LABELS[tradeForm.selectedAccount.cexValue]} will be supported soon`;\n }\n\n return \"\";\n }, [tradeForm.selectedAccount]);\n\n const isSubmitButtonActive = useMemo(() => {\n return (\n verifyTradeValidity(tradeForm, assetBalance, assetsFrom, minAmountFrom) &&\n verifyLimitOrderValidity() &&\n !feeIsLoading &&\n preparedOrder !== null\n );\n }, [\n tradeForm.tokenFrom,\n tradeForm.tokenTo,\n tradeForm.amountFrom,\n tradeForm.amountTo,\n assetBalance,\n tradeForm.market,\n assetsFrom,\n minAmountFrom,\n feeIsLoading,\n ]);\n\n const formErrors = useMemo(() => {\n const errors: Record<string, ReactElement | string> = {};\n if (assetBalance < Number(minAmountFrom)) {\n errors[\"amountFrom\"] = (\n <Typography component={\"span\"} color={\"inherit\"}>\n {`Your ${tradeForm.tokenFrom?.label} balance available is lower than the minimum required to make a trade. `}\n <Typography\n sx={{\n textDecoration: \"underline\",\n cursor: \"pointer\",\n color: \"inherit\",\n }}\n component={\"span\"}\n onClick={() =>\n environment === ViewEnvironment.WIDGET\n ? backgroundHandler?.openTab({\n route:\n STORE_ROUTES.RECEIVE_ROUTE +\n `?currency=${tradeForm.tokenFrom?.value}&accountId=${tradeForm.selectedAccount?.value}`,\n })\n : navigate(STORE_ROUTES.RECEIVE_ROUTE, {\n state: { currency: tradeForm.tokenFrom, account: tradeForm.selectedAccount },\n })\n }\n >\n Refill {tradeForm.tokenFrom?.label}\n </Typography>\n </Typography>\n );\n\n return errors;\n }\n\n if (assetsFrom.length === 0 && !isLoadingBalances) {\n errors[\"tokenFrom\"] = (\n <Typography component={\"span\"} color={\"inherit\"}>\n {`You don't have tokens available to trade. You may have some token locked on your ${getCexLabel(\n tradeForm.selectedAccount?.cexValue || \"\",\n )} account, or you can deposit any asset directly by clicking `}\n <Typography\n sx={{\n textDecoration: \"underline\",\n cursor: \"pointer\",\n color: \"inherit\",\n }}\n component={\"span\"}\n onClick={() =>\n environment === ViewEnvironment.WIDGET\n ? backgroundHandler?.openTab({\n route:\n STORE_ROUTES.RECEIVE_ROUTE +\n `?currency=${tradeForm.tokenFrom?.value}&accountId=${tradeForm.selectedAccount?.value}`,\n })\n : navigate(STORE_ROUTES.RECEIVE_ROUTE, {\n state: { currency: tradeForm.tokenFrom, account: tradeForm.selectedAccount },\n })\n }\n >\n here.\n </Typography>\n </Typography>\n );\n }\n\n if (tradeForm.amountFrom === \"0\") return errors;\n\n if (tradeForm.amountFrom ? parseFloat(tradeForm.amountFrom.replace(/\\s/g, \"\") as string) > assetBalance : false) {\n errors[\"amountFrom\"] = \"The from amount is higher than the balance available.\";\n }\n\n if (\n minAmountFrom &&\n tradeForm.amountFrom &&\n ccxt.Precise.stringGt(minAmountFrom, tradeForm.amountFrom.replace(/\\s/g, \"\"))\n ) {\n errors[\"amountFrom\"] = \"The from amount is under the minimum amount.\";\n }\n\n return errors;\n }, [tradeForm.amountFrom, assetBalance, minAmountFrom, tradeForm.selectedAccount, isLoadingBalances]);\n\n const hasTokenTo = useMemo(\n () => assetsFrom.find((asset: DropListWithIconItem) => asset.value === tradeForm.tokenTo?.value),\n [assetsFrom, tradeForm.tokenTo?.value],\n );\n\n const { isSwitchable, disabledSwitchMessage } = useMemo(() => {\n if (tradeForm.tokenFrom && tradeForm.tokenTo && hasTokenTo) {\n return {\n isSwitchable: true,\n disabledSwitchMessage: \"\",\n };\n }\n\n if (hasSelectedBothTokens) {\n return {\n isSwitchable: false,\n disabledSwitchMessage: \"You must select both tokens to switch.\",\n };\n }\n\n if (tradeForm.tokenFrom && tradeForm.tokenTo && !hasTokenTo) {\n return {\n isSwitchable: false,\n disabledSwitchMessage: `You don't have ${tradeForm.tokenTo.label}`,\n };\n }\n\n return {\n isSwitchable: false,\n disabledSwitchMessage: \"\",\n };\n }, [tradeForm.tokenTo, hasTokenTo, hasSelectedBothTokens, tradeForm.tokenFrom]);\n\n const addCexRedirect = () => {\n if (opts?.addCex) {\n opts.addCex();\n return;\n }\n\n if (environment === ViewEnvironment.WIDGET) {\n backgroundHandler?.addCex({});\n }\n };\n\n /**\n * ************************ Public Functions ************************\n */\n\n const goBack = () => {\n return _navigate(-1);\n };\n\n const submitTrade = async () => {\n if (environment === ViewEnvironment.WIDGET) {\n setDescription(\n <>\n {userFacingMessages.WIDGETS.TRADE.TRANSACTION_LOADING_FIRST_LINE}\n <br />\n {userFacingMessages.WIDGETS.TRADE.TRANSACTION_LOADING_SECOND_LINE}\n </>,\n );\n\n if (shouldUseTradeSquare) {\n navigate(WIDGET_ROUTES.MULTIPLE_TRANSACTIONS);\n\n return;\n }\n\n if (backgroundHandler && preparedOrder && tradeForm.selectedAccount) {\n addBigPendingRequest();\n try {\n const order = await backgroundHandler.createOrder({\n accountId: tradeForm.selectedAccount.value,\n ...preparedOrder.createOrderRequest,\n orderType: orderType,\n price:\n orderType === OrderType.LIMIT\n ? unformatNumberAsString(tradeForm.limitPrice).toString()\n : preparedOrder.createOrderRequest.price,\n metadata: {\n defiAddress: localStorage.getItem(\"defiAddress\") ?? undefined,\n },\n });\n setTimeout(() => {\n config?.onTradeSubmitted?.(order);\n }, 3000);\n\n setTransaction(\n orderToTransactionMapper({\n ...order,\n accountId: tradeForm.selectedAccount.value,\n exchangeId: tradeForm.selectedAccount.cexValue,\n }),\n );\n } catch (error: Any) {\n setError(getErrorMessage(error), error?.code);\n setTransaction(generateFakeTradeTransactionTradeForm(tradeForm));\n } finally {\n setDescription(null);\n queryClient.invalidateQueries({\n queryKey: [\"fetchPortfolioAssetPeriodicaly\", tradeForm.selectedAccount.value, activeVault],\n });\n removeBigPendingRequest();\n navigate(WIDGET_ROUTES.COMPLETED_TRANSACTION_ROUTE);\n }\n }\n return;\n }\n const amountFrom = tradeForm.amountFrom?.replace(/\\s/g, \"\") || \"\";\n const amountTo = tradeForm.amountTo?.replace(/\\s/g, \"\") || \"\";\n // todo replace by constant the path\n return _navigate(STORE_ROUTES.CONFIRM_TRADE_ROUTE, {\n state: {\n tokenFrom: tradeForm.tokenFrom,\n tokenTo: tradeForm.tokenTo,\n amountFrom,\n amountTo,\n market: tradeForm.market,\n orderType: orderType,\n limitPrice: unformatNumberAsString(tradeForm.limitPrice).toString(),\n createOrderRequest: preparedOrder,\n account: tradeForm.selectedAccount, // TODO : update the location in confirm trade page\n vault: activeVault,\n rate: tradeForm.orderSide === \"buy\" ? marketRate.ask : marketRate.bid,\n orderSide: tradeForm.orderSide,\n },\n });\n };\n\n const switchToken = () => {\n if (\n tradeForm.tokenFrom &&\n tradeForm.tokenTo &&\n assetsFrom.map((asset: DropListWithIconItem) => asset.value === tradeForm.tokenTo?.value).includes(true)\n ) {\n dispatchForm({\n field: \"amountFrom\",\n value: \"0\",\n });\n dispatchForm({\n field: \"amountTo\",\n value: \"0\",\n });\n dispatchForm({\n field: \"revertToken\",\n });\n }\n };\n\n /**\n * ************************ Private Functions ************************\n */\n\n /**\n * @description Get the common market between the two tokens.\n * If there is no common market, we set the noCommonMarket flag to true to enable the trade square feature.\n */\n const getTheCurrentMarket = (newMarketsTokenFrom = underlyingMarkets) => {\n // find market from underlying markets\n let market: MarketPair | undefined;\n let orderSide: OrderSide | undefined;\n\n if (tradeForm.tokenFrom && tradeForm.tokenTo) {\n newMarketsTokenFrom.forEach((marketPair: MarketPair) => {\n if (marketPair.base === tradeForm.tokenFrom?.value && marketPair.quote === tradeForm.tokenTo?.value) {\n market = marketPair;\n orderSide = \"sell\";\n } else if (marketPair.base === tradeForm.tokenTo?.value && marketPair.quote === tradeForm.tokenFrom?.value) {\n market = marketPair;\n orderSide = \"buy\";\n }\n });\n }\n if (!market || !orderSide) {\n if (tradeForm.tokenFrom && tradeForm.tokenTo) {\n dispatchForm({\n field: \"noCommonMarket\",\n value: true,\n });\n }\n dispatchForm({\n field: \"market\",\n value: null,\n });\n dispatchForm({\n field: \"orderSide\",\n value: null,\n });\n return;\n }\n\n dispatchForm({\n field: \"noCommonMarket\",\n value: false,\n });\n\n dispatchForm({\n field: \"market\",\n value: market,\n });\n\n dispatchForm({\n field: \"orderSide\",\n value: orderSide,\n });\n };\n\n function verifyTradeSquareValidity() {\n return shouldUseTradeSquare && tradePath?.length && !isMultipleTransactionsLoading && transactions.length;\n }\n\n function verifyTradeValidity(\n tradeForm: TradeForm,\n assetBalance: number,\n portfolioAssets: DropListWithIconItem[] | AssetItemListProps[],\n minAmountFrom: string | undefined,\n ): boolean {\n return !!(\n tradeForm.tokenFrom &&\n tradeForm.tokenTo &&\n tradeForm.amountFrom &&\n tradeForm.amountFrom === debouncedAmountFrom && // check if the debounced value is up to date\n tradeForm.amountTo &&\n assetBalance &&\n (tradeForm.market || verifyTradeSquareValidity()) &&\n portfolioAssets.map((asset: DropListWithIconItem) => asset.label === tradeForm.tokenFrom?.label).includes(true) &&\n parseFloat(tradeForm.amountFrom.replace(/\\s/g, \"\") as string) <= assetBalance &&\n parseFloat(tradeForm.amountFrom.replace(/\\s/g, \"\") as string) > 0 &&\n minAmountFrom &&\n ccxt.Precise.stringLe(minAmountFrom, tradeForm.amountFrom.replace(/\\s/g, \"\"))\n );\n }\n\n function verifyLimitOrderValidity() {\n return orderType === OrderType.LIMIT ? tradeForm.limitPrice !== \"0\" : true;\n }\n\n const _clearTokenToIfNotAvailable = () => {\n // Check if the assetsTo contain the tokenTo, and if not, clear the value\n if (\n tradeForm.tokenTo &&\n !filteredAssetsTo.find((asset: DropListWithIconItem) => asset.value === tradeForm.tokenTo?.value) &&\n !assetsToAreLoading\n ) {\n dispatchForm({\n field: \"tokenTo\",\n value: null,\n });\n }\n };\n\n const selectTokenFrom = () => {\n if (!assetsFrom?.length) return;\n const config = tradeForm?.initialProps;\n\n if (tradeForm?.tokenFrom && config?.keepPreviousTradeValues) {\n const isTokenFromInAssets = assetsFrom.find((asset) => asset.value === tradeForm.tokenFrom?.value);\n if (isTokenFromInAssets) return;\n }\n\n // Try to match the recommended token to with a token having a common market\n if (config?.recommendedTokenTo) {\n for (const asset of assetsFrom) {\n const commonMarket = markets.find(\n (market) =>\n market?.pairSymbol?.includes(asset.value) && market?.pairSymbol?.includes(config.recommendedTokenTo || \"\"),\n );\n if (commonMarket) {\n dispatchForm({\n field: \"tokenFrom\",\n value: asset,\n });\n return;\n }\n }\n }\n\n dispatchForm({\n field: \"tokenFrom\",\n value: assetsFrom[0],\n });\n };\n\n const chooseRecommendedTokenTo = () => {\n if (config?.recommendedTokenTo) {\n const recommendedToken = filteredAssetsTo.find((asset) => asset.value === config.recommendedTokenTo);\n if (recommendedToken) {\n dispatchForm({\n field: \"tokenTo\",\n value: recommendedToken,\n });\n }\n }\n };\n\n /**\n * ************************ Effects ************************\n */\n\n const checkAccountValidityOnMount = useTriggerEffect(() => {\n if (availableForTradeAccountsAreLoading) return false;\n if (config?.exchangeIds && config?.exchangeIds.length === 1 && availableForTradeAccounts.length > 0) {\n for (const account of availableForTradeAccounts) {\n if (config.exchangeIds?.includes(account.cexValue)) {\n dispatchForm({\n field: \"selectedAccount\",\n value: account,\n });\n return true;\n }\n }\n }\n // we need to clean the account value if the account is not part of the exchangeIds\n // example: available accounts are gateio and kraken, but okx is loaded from the persistent state\n if (config?.exchangeIds && config.exchangeIds.length >= 1 && tradeForm.selectedAccount) {\n if (!config.exchangeIds.includes(tradeForm.selectedAccount.cexValue)) {\n dispatchForm({ field: \"selectedAccount\", value: null });\n }\n }\n return true;\n }, [config?.exchangeIds, availableForTradeAccounts, availableForTradeAccountsAreLoading]);\n\n useEffect(() => {\n if (isSupportedExchangesLoading || !checkAccountValidityOnMount) return;\n if (\n tradeForm.selectedAccount &&\n !isFeatureSupportedByCex(\n tradeForm.selectedAccount.cexValue,\n orderType === OrderType.MARKET ? \"trade\" : \"limit_trade\",\n )\n ) {\n dispatchForm({ field: \"selectedAccount\", value: null });\n }\n }, [orderType, isSupportedExchangesLoading, checkAccountValidityOnMount]);\n\n useEffect(() => {\n if (!checkAccountValidityOnMount) return;\n // We want to load the markets only when the selected account is valid (and not just after the hydration)\n loadMarkets();\n }, [tradeForm.selectedAccount, activeVault, checkAccountValidityOnMount]);\n\n // It is to avoid the flickering of the droplist when the balances are refetched every 10 seconds\n const tokenFromSelectedOnMount = useTriggerEffectOnce(\n () => {\n selectTokenFrom();\n return true;\n },\n () => !!assetsFrom?.length && !!markets.length && !!tradeForm.selectedAccount,\n [assetsFrom, markets],\n [tradeForm.selectedAccount],\n );\n\n useEffect(() => {\n if (!tokenFromSelectedOnMount) return;\n _clearTokenToIfNotAvailable();\n }, [filteredAssetsTo, tokenFromSelectedOnMount]);\n\n const tokenToSelectedOnMount = useTriggerEffectOnce(\n () => {\n chooseRecommendedTokenTo();\n return true;\n },\n () => !!filteredAssetsTo.length && tokenFromSelectedOnMount,\n [filteredAssetsTo, tokenFromSelectedOnMount],\n [tradeForm.selectedAccount],\n );\n\n useEffect(() => {\n // for some reasons in cede.store the trade is blocked when we execute the logic of the widget.\n // @todo fix it. For now, we keep the new logic only in the widget\n if (environment === ViewEnvironment.WIDGET) {\n if (!tradeForm.tokenFrom || !tradeForm.tokenTo || !underlyingMarkets || !underlyingMarkets.length) return;\n getTheCurrentMarket();\n return;\n }\n getTheCurrentMarket();\n }, [tradeForm.tokenTo, underlyingMarkets, tradeForm.tokenFrom]);\n\n useEffect(() => {\n if (!tradeForm.tokenFrom) return;\n computeAmountTo();\n }, [marketRate, tradeForm.orderSide, shouldUseTradeSquare, transactions, tradeForm.limitPrice, orderType]);\n\n useEffect(() => {\n // we need to update the amount to when the amount from is updated directly by the user\n // We don't want to compute the amount to if the amount from has been updated automatically due to the computeAmountFrom function\n if (focusedInput.current === \"amountFrom\" && tradeForm.tokenFrom) {\n computeAmountTo();\n }\n }, [tradeForm.amountFrom]);\n\n useEffect(() => {\n if (focusedInput.current === \"amountTo\") {\n computeAmountFrom();\n }\n }, [tradeForm.amountTo]);\n\n useEffect(\n () =>\n useTradeFormStore.subscribe(\n (state) => state.selectedAccount,\n () => {\n resetForm(true);\n },\n ),\n [],\n );\n\n /** Trade path */\n\n useEffect(() => {\n if (shouldUseTradeSquare && tradeForm.tokenTo && tokenToSelectedOnMount && !droplistDestinationTokensAreLoading) {\n if (tradePath && tradePath[0]) {\n removeByMessage(\"You will need to perform the following\");\n appendAlert(\n userFacingMessages.WIDGETS.TRADE_SQUARE.PERFORM_TRADE_PATH(\n getTradePathLabel(tradePath),\n tradeForm.tokenTo?.label || \"\",\n ),\n AlertTypes.INFO,\n );\n return;\n }\n }\n }, [shouldUseTradeSquare, tradeForm.tokenTo, tradePath, tokenToSelectedOnMount, droplistDestinationTokensAreLoading]);\n\n useEffect(() => {\n if (droplistDestinationTokensError) {\n appendAlert(getErrorMessage(droplistDestinationTokensError.message), AlertTypes.ERROR);\n }\n }, [droplistDestinationTokensError]);\n\n /**\n * Compute the transactions each time the trade path or the amount from are updated\n * It will be used to compute the amountTo and the fees\n */\n useEffect(() => {\n // clear the existing transactions in the store when the trade path is updated\n if (transactions.length) clearMultipleTransactions();\n if (!tradePath || tradeForm.amountFrom === \"0\" || !shouldUseTradeSquare) return;\n loadMultipleTransactions();\n }, [tradePath, debouncedAmountFrom, shouldUseTradeSquare]);\n\n useEffect(() => {\n // we need to clear the existing transactions in the store when the trade page is mounted\n clearMultipleTransactions();\n // // We need to reset the form when the trade page is mounted\n if (!config.keepPreviousTradeValues) resetForm(false);\n\n setEnabledEventDispatcher(true);\n }, []);\n\n // Auto switch to market order if the user doesn't have any available account to trade on limit\n useEffectOnce(\n () => {\n if (availableForTradeAccounts.length === 0 && orderType === OrderType.LIMIT) {\n selectOrderType(OrderType.MARKET);\n }\n },\n () => !!availableAccounts.length && !availableForTradeAccountsAreLoading,\n [availableAccounts],\n [],\n );\n\n useEffect(() => {\n if (isLimitOrderSupported === false) {\n selectOrderType(OrderType.MARKET);\n }\n }, [isLimitOrderSupported]);\n\n /**\n * ************************ Return ************************\n */\n\n return {\n goBack,\n tabs: tradeTabs,\n orderType,\n selectOrderType,\n availableAccounts: availableForTradeAccounts,\n portfolioAssets: assetsFrom,\n tradeAbleAsset: derivedAssetsTo,\n tradeForm,\n tradePath,\n dispatchForm,\n tokenFromPrice,\n tokenToPrice,\n marketRate,\n currency,\n switchToken,\n isSwitchable,\n isSwitchIconHovered,\n setIsSwitchIconHovered,\n disabledSwitchMessage,\n assetFromLoading,\n assetToLoading: shouldUseTradeSquare\n ? assetsToAreLoading || droplistDestinationTokensAreLoading\n : assetToLoading || isLoadingUnderlyingMarkets,\n isSubmitButtonActive,\n cexFeeIsLoading: feeIsLoading || isDebouncing,\n minAmountFrom,\n addMax: () => addMax(assetBalance),\n amountToIsLoading: shouldUseTradeSquare && isMultipleTransactionsLoading,\n assetBalance,\n warningMessage,\n addCexRedirect,\n submitTrade,\n setFocusedInput,\n fee,\n formErrors,\n isLoadingBalances,\n isLoadingUnderlyingMarkets,\n vaultName: activeVault?.name,\n shouldDisableCex: shouldDisableCex(\"trade\"),\n disabledCexText: disabledCexText(\"trade\", DroplistMissingPermission),\n quoteToken,\n price,\n /**\n * TODO: implement the reverse computation of the multiple transactions to allow the user to update the amountTo\n * when the trade square feature is active\n */\n allowUserInputAmountTo: !shouldUseTradeSquare,\n\n canByPassApprovalTradeHub,\n setByPassApprovalTradeHub,\n isWidget: environment === ViewEnvironment.WIDGET,\n isLimitOrderSupported,\n };\n};\n","import { useCallback, useEffect, useRef, useState } from \"react\";\nimport { Any } from \"@cede/types\";\n\nexport const useDebounceFn = <T extends Any[]>(fn: (...args: T) => void, delay: number) => {\n const timeoutRef = useRef<NodeJS.Timeout>();\n const callbackRef = useRef(fn);\n\n useEffect(() => {\n callbackRef.current = fn;\n\n return () => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n };\n }, [fn]);\n\n return useCallback(\n (...args: T) => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n timeoutRef.current = setTimeout(() => {\n callbackRef.current(...args);\n }, delay);\n },\n [delay],\n );\n};\n\nexport const useDebounceValue = <T>(value: T, delay: number) => {\n const [debouncedValue, setDebouncedValue] = useState(value);\n const [isDebouncing, setIsDebouncing] = useState(false);\n\n useEffect(() => {\n setIsDebouncing(true);\n const timeout = setTimeout(() => {\n setDebouncedValue(value);\n setIsDebouncing(false);\n }, delay);\n\n return () => {\n clearTimeout(timeout);\n };\n }, [value, delay]);\n\n return { debouncedValue, isDebouncing };\n};\n","import { useEffect } from \"react\";\nimport { MarketRate, OrderSide, OrderType, PairSymbol, TradeForm } from \"@cede/types\";\nimport { getCurrentRate, unformatNumberAsString } from \"@cede/utils\";\nimport { useDependencies } from \"../../../hooks/useDependencies\";\nimport { useQuery } from \"@tanstack/react-query\";\n\ntype UseTradeMinAmountParams = {\n tradeForm: TradeForm;\n marketRate: MarketRate;\n shouldUseTradeSquare: boolean;\n orderType: OrderType;\n};\n\nexport const useTradeMinAmount = ({\n tradeForm,\n marketRate,\n shouldUseTradeSquare,\n orderType,\n}: UseTradeMinAmountParams) => {\n const { backgroundHandler, useVaults, useMultipleTransactionsMinAmount } = useDependencies();\n const { activeVault } = useVaults();\n\n const { isLoading: multipleTransactionMinAmountIsLoading, minAmount: multipleTransactionsMinAmount } =\n useMultipleTransactionsMinAmount({\n enabled: shouldUseTradeSquare,\n accountId: tradeForm.selectedAccount?.value || \"\",\n fromToken: tradeForm.tokenFrom?.value || \"\",\n toToken: tradeForm.tokenTo?.value || \"\",\n activeWithdrawal: false,\n });\n\n /**\n * Find the minimum amount to trade for the tokenFrom\n */\n const getMinAmountFrom = async (pairSymbol: PairSymbol, orderSide: OrderSide) => {\n const price =\n orderType === OrderType.MARKET\n ? getCurrentRate(marketRate, orderSide)\n : unformatNumberAsString(tradeForm.limitPrice).toString();\n\n if (!tradeForm.selectedAccount || !activeVault || price === \"0\") return \"0\";\n\n const minAmounts = await backgroundHandler.getMinAmounts({\n accountId: tradeForm.selectedAccount.value,\n pairSymbol,\n orderSide,\n price,\n });\n return orderSide === \"buy\" ? minAmounts.minQuoteAmount : minAmounts.minBaseAmount;\n };\n\n const {\n data: classicMinAmount,\n isLoading: classicMinAmountIsLoading,\n refetch: refetchClassicMinAmount,\n } = useQuery({\n queryKey: [\"tradeMinAmount\", tradeForm.market?.pairSymbol, tradeForm.orderSide, tradeForm.limitPrice, orderType],\n queryFn: () => getMinAmountFrom(tradeForm.market?.pairSymbol || \"\", tradeForm.orderSide!),\n enabled:\n !!backgroundHandler?.isReady &&\n !!tradeForm.market?.pairSymbol &&\n !!tradeForm.orderSide &&\n !!tradeForm.selectedAccount,\n });\n\n const minAmount = shouldUseTradeSquare ? multipleTransactionsMinAmount : classicMinAmount;\n\n // we need to refetch the min amount when the market rate changes\n // /!\\ We shouldn't put the market rate as dependency of the useQuery because the min amount\n // will have the undefined value during the fetching, which could lead to clipping issues\n useEffect(() => {\n refetchClassicMinAmount();\n }, [marketRate]);\n\n return {\n minAmount,\n isLoading: shouldUseTradeSquare ? multipleTransactionMinAmountIsLoading : classicMinAmountIsLoading,\n };\n};\n","import { DISCORD_INVITE_URL, QueryKeys, getErrorMessage } from \"@cede/utils\";\nimport { AlertTypes } from \"../store\";\nimport { useDependencies } from \"./useDependencies\";\nimport { useQuery } from \"@tanstack/react-query\";\n\nexport const useDiscordInvitation = () => {\n const { backgroundHandler, useLoading, useAlert, useLoginStore } = useDependencies();\n const addBigPendingRequest = useLoading((state) => state.addBigPendingRequest);\n const removeBigPendingRequest = useLoading((state) => state.removeBigPendingRequest);\n const appendAlert = useAlert((state) => state.append);\n const isLoggedIn = useLoginStore((state) => state.isLoggedIn);\n\n const {\n data: hasJoinedDiscord,\n refetch: refetchHasJoinedDiscord,\n isFetching: isLoadingHasJoinedDiscord,\n } = useQuery({\n queryKey: [QueryKeys.HAS_JOINED_DISCORD],\n queryFn: () => backgroundHandler.hasJoinedDiscord(),\n enabled: !!backgroundHandler?.isReady && isLoggedIn,\n gcTime: Infinity,\n staleTime: Infinity,\n });\n\n const joinDiscord = async () => {\n try {\n addBigPendingRequest();\n const discordInvitation = await backgroundHandler.getDiscordInvitation().catch(() => DISCORD_INVITE_URL);\n window.open(discordInvitation, \"_blank\");\n await refetchHasJoinedDiscord();\n } catch (error) {\n appendAlert(getErrorMessage(error), AlertTypes.ERROR);\n } finally {\n removeBigPendingRequest();\n }\n };\n\n return { joinDiscord, hasJoinedDiscord, isLoadingHasJoinedDiscord, refetchHasJoinedDiscord };\n};\n","import { useMemo } from \"react\";\nimport { useDependencies } from \"..\";\n\ntype UseTradePathParams = {\n enabled: boolean;\n accountId: string;\n fromToken: string;\n toToken?: string;\n network?: string;\n activeWithdrawal: boolean;\n};\n\nexport const useTradePath = ({\n enabled,\n accountId,\n fromToken,\n network,\n activeWithdrawal,\n toToken,\n}: UseTradePathParams) => {\n const { useTradePathBySupportedTokens } = useDependencies();\n\n const { tradePathBySupportedTokens, error, isLoading, droplistSupportedTokens } = useTradePathBySupportedTokens({\n accountId,\n fromToken,\n network,\n activeWithdrawal,\n enabled,\n });\n\n const tradePath = useMemo(() => {\n if (!tradePathBySupportedTokens) return null;\n return tradePathBySupportedTokens[toToken ?? \"\"];\n }, [tradePathBySupportedTokens, toToken, fromToken, network]);\n\n return {\n tradePath,\n tradePathBySupportedTokens,\n error,\n isLoading,\n droplistDestinationTokens: droplistSupportedTokens,\n };\n};\n","import { useMemo } from \"react\";\nimport ccxt from \"@cede/ccxt\";\nimport { MarketRate, OrderType, PreparedOrder, TradeForm } from \"@cede/types\";\nimport { getCurrentRate, unformatNumberAsString } from \"@cede/utils\";\nimport { useDependencies } from \"../../../hooks\";\nimport { useQuery } from \"@tanstack/react-query\";\n\ntype UseTradeFeeParams = {\n tradeForm: TradeForm;\n marketRate: MarketRate;\n shouldUseTradeSquare: boolean;\n debouncedAmountFrom: string | null;\n orderType: OrderType;\n};\n\nexport const useTradeFee = ({\n tradeForm,\n marketRate,\n shouldUseTradeSquare,\n debouncedAmountFrom,\n orderType,\n}: UseTradeFeeParams) => {\n const { backgroundHandler, useVaults, useMultipleTransactionsFees, usePrices } = useDependencies();\n const { activeVault } = useVaults();\n const prices = usePrices();\n\n const { data: preparedOrderWithFeeForCommonMarket, isFetching: preparedOrderWithFeeForCommonMarketIsLoading } =\n useQuery({\n queryKey: [\"tradeFee\", tradeForm.orderSide, debouncedAmountFrom, tradeForm.market?.pairSymbol, marketRate],\n queryFn: async () => {\n const currentRate =\n orderType === OrderType.MARKET\n ? getCurrentRate(marketRate, tradeForm.orderSide!)\n : unformatNumberAsString(tradeForm.limitPrice).toString();\n const unformattedAmountFrom = String(unformatNumberAsString(debouncedAmountFrom || \"0\"));\n const baseAmount =\n tradeForm.orderSide === \"sell\"\n ? unformattedAmountFrom\n : ccxt.Precise.stringDiv(unformattedAmountFrom, currentRate);\n const preparedOrder: PreparedOrder = await backgroundHandler.prepareOrder({\n accountId: tradeForm.selectedAccount?.value,\n pairSymbol: tradeForm.market?.pairSymbol,\n orderSide: tradeForm.orderSide,\n amount: baseAmount,\n orderType,\n price: currentRate,\n });\n\n const fee = {\n tokenSymbol: preparedOrder?.estimatedFee?.tokenSymbol || \"\",\n amount: preparedOrder?.estimatedFee?.amount || 0,\n refAmount: preparedOrder?.estimatedFee?.refAmount || 0,\n };\n return {\n fee,\n preparedOrder,\n };\n },\n enabled:\n !!backgroundHandler?.isReady &&\n !!activeVault &&\n !!tradeForm.selectedAccount &&\n !!tradeForm.orderSide &&\n !!tradeForm.market &&\n tradeForm.amountFrom !== \"0\" &&\n tradeForm.amountTo !== \"0\",\n });\n\n const { multipleTransactionFeesInFromToken, isLoading: isMultipleTransactionsFeesLoading } =\n useMultipleTransactionsFees({\n enabled: shouldUseTradeSquare,\n accountId: tradeForm.selectedAccount?.value || \"\",\n fromToken: tradeForm.tokenFrom?.value || \"\",\n toToken: tradeForm.tokenTo?.value || \"\",\n fromTokenAmount: debouncedAmountFrom || \"\",\n activeWithdrawal: false,\n });\n\n const multipleTransactionFees = useMemo(() => {\n return {\n tokenSymbol: tradeForm.tokenFrom?.value || \"\",\n amount: Number(multipleTransactionFeesInFromToken),\n refAmount: (prices[tradeForm.tokenFrom?.value || \"\"] || 0) * Number(multipleTransactionFeesInFromToken),\n };\n }, [multipleTransactionFeesInFromToken]);\n\n return {\n fee: shouldUseTradeSquare ? multipleTransactionFees : preparedOrderWithFeeForCommonMarket?.fee,\n preparedOrder: preparedOrderWithFeeForCommonMarket?.preparedOrder,\n isLoading: shouldUseTradeSquare ? isMultipleTransactionsFeesLoading : preparedOrderWithFeeForCommonMarketIsLoading,\n };\n};\n","import ccxt from \"@cede/ccxt\";\nimport { MarketRate, OrderType, TradeForm } from \"@cede/types\";\nimport { unformatNumberAsString } from \"@cede/utils\";\nimport { getLastOrderTransaction } from \"../../../hooks/useMultipleTransactions\";\nimport {\n MultipleTransactionsPreparedOrder,\n MultipleTransactionsPreparedWithdrawal,\n} from \"../../../hooks/useMultipleTransactionsStore\";\nimport { TradeFormAction } from \"../types\";\n\ntype UseTradeAmountComputation = {\n tradeForm: TradeForm;\n dispatchForm: (value: TradeFormAction<TradeForm>) => void;\n transactions: (MultipleTransactionsPreparedOrder | MultipleTransactionsPreparedWithdrawal)[];\n shouldUseTradeSquare: boolean;\n marketRate: MarketRate;\n orderType: OrderType;\n};\n\nexport const useTradeAmountComputation = ({\n tradeForm,\n dispatchForm,\n transactions,\n shouldUseTradeSquare,\n marketRate,\n orderType,\n}: UseTradeAmountComputation) => {\n const getRate = () => {\n if (orderType === OrderType.MARKET) {\n return tradeForm.orderSide === \"buy\" ? marketRate.ask : marketRate.bid;\n } else {\n return unformatNumberAsString(tradeForm.limitPrice).toString();\n }\n };\n\n const computeAmountTo = () => {\n if (!tradeForm.tokenTo || !tradeForm.tokenFrom || tradeForm.amountFrom === \"0\") {\n dispatchForm({\n field: \"amountTo\",\n value: \"0\",\n });\n return;\n }\n\n if (transactions && transactions.length && shouldUseTradeSquare) {\n dispatchForm({\n field: \"amountTo\",\n value: getLastOrderTransaction(transactions)?.to?.amount || \"0\",\n });\n return;\n }\n\n const rate = getRate();\n\n if (!tradeForm.market || !tradeForm.tokenFrom || !tradeForm.tokenTo || !tradeForm.amountFrom) return;\n\n if (rate === \"0\") {\n dispatchForm({\n field: \"amountTo\",\n value: \"0\",\n });\n return;\n }\n\n const amountFrom = String(unformatNumberAsString(tradeForm.amountFrom));\n const estimatedAmount =\n tradeForm.orderSide === \"sell\"\n ? ccxt.Precise.stringMul(amountFrom, rate)\n : ccxt.Precise.stringDiv(amountFrom, rate);\n dispatchForm({\n field: \"amountTo\",\n value: estimatedAmount.toString(),\n });\n };\n\n const computeAmountFrom = () => {\n if (!tradeForm.market || !tradeForm.tokenFrom || !tradeForm.tokenTo || !tradeForm.amountTo) return;\n const rate = getRate();\n\n if (rate === \"0\") {\n dispatchForm({\n field: \"amountFrom\",\n value: \"0\",\n });\n return;\n }\n\n const amountTo = String(unformatNumberAsString(tradeForm.amountTo));\n const estimatedAmount =\n tradeForm.orderSide === \"sell\" ? ccxt.Precise.stringDiv(amountTo, rate) : ccxt.Precise.stringMul(amountTo, rate);\n\n dispatchForm({\n field: \"amountFrom\",\n value: estimatedAmount?.toString(),\n });\n };\n\n return {\n computeAmountTo,\n computeAmountFrom,\n };\n};\n","import { useEffect } from \"react\";\nimport {\n TradeForm,\n TradePathData,\n ViewEnvironment,\n WidgetEventMessage,\n WidgetEventUpdateExchangePayload,\n WidgetEventUpdatePairPayload,\n WidgetWindowEvents,\n} from \"@cede/types\";\nimport { useDependencies } from \"../../../hooks\";\n\ntype TradeDispatcherParams = {\n enabled: boolean;\n tradeForm: TradeForm;\n tradePath: TradePathData[] | null | undefined;\n};\n\n/**\n * Dispatch events through the window object (only available for Widgets)\n */\nexport const useTradeEventDispatcher = ({ enabled, tradeForm, tradePath }: TradeDispatcherParams) => {\n const { useViewEnvironment } = useDependencies();\n const { environment } = useViewEnvironment();\n\n const onChangeSelectedAccount = () => {\n const message: WidgetEventMessage<WidgetEventUpdateExchangePayload> = {\n type: WidgetWindowEvents.UPDATE_EXCHANGE,\n payload: tradeForm.selectedAccount\n ? { exchangeId: tradeForm.selectedAccount?.cexValue, accountId: tradeForm.selectedAccount?.value }\n : null,\n };\n window.postMessage(message);\n };\n\n const onChangePairSymbol = async () => {\n let pairSymbol = \"\";\n let precision = 0;\n if (tradeForm.market) {\n pairSymbol = tradeForm.market.pairSymbol;\n precision = tradeForm.market.precision?.price ?? 0;\n } else if (tradePath?.length) {\n const lastTradePath = tradePath[tradePath.length - 1];\n if (!lastTradePath) return;\n // we want to use the precision of the destination token\n // eg. BTC/USDT: price precision is 0.01 but if the destination token is BTC,\n // we want to use the BTC (base amount) precision which is 0.00000001\n precision = lastTradePath.orderSide === \"sell\" ? lastTradePath.precision.price : lastTradePath.precision.amount;\n pairSymbol = `${tradeForm.tokenFrom?.value}/${tradeForm.tokenTo?.value}`;\n }\n\n const message: WidgetEventMessage<WidgetEventUpdatePairPayload> = {\n type: WidgetWindowEvents.UPDATE_PAIR,\n payload: pairSymbol ? { pairSymbol, precision } : null,\n };\n window.postMessage(message);\n };\n\n useEffect(() => {\n if (environment !== ViewEnvironment.WIDGET || !enabled) return;\n onChangeSelectedAccount();\n }, [tradeForm.selectedAccount, enabled]);\n\n useEffect(() => {\n if (environment !== ViewEnvironment.WIDGET || !enabled) return;\n onChangePairSymbol();\n }, [tradeForm.market, tradePath, enabled]);\n};\n","import { useMemo } from \"react\";\nimport { defaultDependencies } from \"./dependencies\";\nimport { DependenciesProvider as SDKDependenciesProvider } from \"@cedelabs/react-sdk/src\";\n\nexport type DependenciesProviderProps<T> = {\n children: React.ReactNode;\n dependencies?: T;\n};\n\nexport function DependenciesProvider<T extends Record<string, unknown>>({\n children,\n dependencies,\n}: DependenciesProviderProps<T>) {\n const finalDependencies = useMemo(() => {\n return {\n ...defaultDependencies,\n ...dependencies,\n };\n }, [dependencies]);\n\n return <SDKDependenciesProvider dependencies={finalDependencies}>{children}</SDKDependenciesProvider>;\n}\n","import { useState, useMemo } from \"react\";\nimport { ProviderHandler } from \"@cede/types\";\nimport { defaultDependencies } from \"./dependencies\";\nimport { CedeProvider } from \"@cedelabs/providers/src\";\nimport type { DependenciesProviderProps } from \"@cedelabs/react-utils\";\nimport { DependenciesProvider as DependenciesProviderUtil } from \"@cedelabs/react-utils\";\n\nexport function DependenciesProvider<T extends Record<string, unknown>>({\n children,\n dependencies,\n}: DependenciesProviderProps<T>) {\n const [backgroundHandler, setBackgroundHandler] = useState<(ProviderHandler & CedeProvider) | null>(null);\n\n const finalDependencies = useMemo(() => {\n return {\n backgroundHandler,\n setBackgroundHandler,\n ...defaultDependencies,\n ...dependencies,\n };\n }, [dependencies, backgroundHandler]);\n\n return <DependenciesProviderUtil dependencies={finalDependencies}>{children}</DependenciesProviderUtil>;\n}\n","import { MemoryRouter } from \"react-router-dom\";\nimport { SendWidgetProps, TradeWidgetProps } from \"@cede/types\";\nimport { DependenciesProvider } from \"../contexts/dependencies/provider\";\nimport { useCustomTheme } from \"../hooks/useCustomTheme\";\nimport { CssBaseline, ThemeProvider as MUIThemeProvider } from \"@mui/material\";\nimport { QueryClient, QueryClientProvider } from \"@tanstack/react-query\";\n\nconst queryClient = new QueryClient({\n defaultOptions: {\n queries: {\n refetchOnWindowFocus: false,\n },\n },\n});\n\nexport const Providers = <T extends Record<string, unknown> & { widgetProps: SendWidgetProps | TradeWidgetProps }>({\n children,\n dependencies,\n}: {\n children: React.ReactNode;\n dependencies: T;\n}) => {\n const theme = useCustomTheme(dependencies);\n\n return (\n <QueryClientProvider client={queryClient}>\n <DependenciesProvider dependencies={dependencies}>\n <MemoryRouter>\n <MUIThemeProvider theme={theme}>\n <CssBaseline />\n {children}\n </MUIThemeProvider>\n </MemoryRouter>\n </DependenciesProvider>\n </QueryClientProvider>\n );\n};\n","import { useMemo } from \"react\";\nimport { components } from \"@cede/ds\";\nimport { SendWidgetProps } from \"@cede/types\";\nimport { inferTheme } from \"@cede/utils\";\nimport { createTheme } from \"@mui/material\";\n\nexport const useCustomTheme = <T extends Record<string, unknown> & { widgetProps: SendWidgetProps }>(\n dependencies: T,\n) => {\n const theme = useMemo(() => {\n const { theme } = dependencies.widgetProps;\n const inferredTheme = inferTheme(theme);\n return createTheme({\n ...inferredTheme,\n components: {\n ...components,\n MuiButton: {\n styleOverrides: theme?.buttonTextColor\n ? {\n root: {\n \"color\": theme?.buttonTextColor,\n \"&.Mui-disabled\": {\n backgroundColor: theme?.deactivateButtonColor ?? undefined,\n },\n },\n }\n : undefined,\n },\n MuiOutlinedInput: {\n ...components.MuiOutlinedInput,\n styleOverrides: {\n notchedOutline: {\n borderColor: theme?.inputBorderColor,\n },\n root: {\n \"&.Mui-disabled .MuiOutlinedInput-notchedOutline\": {\n borderColor: theme?.inputBorderColor,\n color: theme?.primaryTextColor,\n },\n \".MuiOutlinedInput-input.Mui-disabled\": {\n \"color\": theme?.primaryTextColor,\n \"-webkit-text-fill-color\": theme?.primaryTextColor,\n },\n },\n },\n },\n },\n });\n }, [dependencies.widgetProps]);\n return theme;\n};\n","import { Route } from \"react-router-dom\";\nimport { AppRoute } from \"@cedelabs/react-utils\";\n\n// @TODO: We might need to use sentry, remove `renderRoutes` from store and externalize this one to react-utils\nexport function renderRoutes(routes: AppRoute[]) {\n let key = 0;\n return routes.map((route) => {\n key++;\n if (route.element) {\n const Element = route.element;\n return <Route element={<Element />} key={key} path={route.path} />;\n }\n\n if (route.wrapper && route.routes) {\n const Wrapper = route.wrapper;\n return (\n <Route key={key} element={<Wrapper />}>\n {renderRoutes(route.routes)}\n </Route>\n );\n }\n\n return null;\n });\n}\n","import { useEffect } from \"react\";\nimport { useDependencies } from \"../../hooks/useDependencies\";\n\nexport const DefaultPage = () => {\n const { useLoading } = useDependencies();\n const addBigPendingRequest = useLoading((state) => state.addBigPendingRequest);\n const removeBigPendingRequest = useLoading((state) => state.removeBigPendingRequest);\n useEffect(() => {\n addBigPendingRequest();\n return () => {\n removeBigPendingRequest();\n };\n }, []);\n return null;\n};\n","import { Button, StoreLogo } from \"@cede/ds\";\nimport { userFacingMessages, WidgetType } from \"@cede/types\";\nimport { useDependencies } from \"../../hooks/useDependencies\";\nimport { useTheme } from \"@mui/material\";\nimport Box from \"@mui/material/Box\";\nimport Typography from \"@mui/material/Typography\";\n\nexport const DefaultLogin = () => {\n const { useWidgetLogin, widgetType } = useDependencies();\n const theme = useTheme();\n const { handleLogin } = useWidgetLogin();\n\n return (\n <Box\n component=\"section\"\n sx={{\n height: \"100%\",\n }}\n display={\"flex\"}\n flexDirection={\"column\"}\n alignItems={\"stretch\"}\n justifyContent={\"space-between\"}\n paddingY={theme.custom.gutterMargin}\n >\n <Box\n component=\"div\"\n sx={{\n marginTop: \"110px\",\n textAlign: \"center\",\n }}\n >\n <StoreLogo size=\"large\" />\n <Typography component=\"h1\" variant=\"h1\" fontSize=\"20px\">\n Welcome to{\" \"}\n <Typography\n component={\"a\"}\n target=\"_blank\"\n href=\"https://cede.store\"\n variant=\"h1\"\n fontSize=\"20px\"\n sx={{\n \"display\": \"inline\",\n \"color\": \"primary.main\",\n \"textDecoration\": \"none\",\n \":hover\": { textDecoration: \"underline\" },\n }}\n >\n {\"cede.store \"}\n </Typography>\n {widgetType === WidgetType.SEND ? \"send\" : \"trade\"} portal\n </Typography>\n <Typography component=\"h2\" variant=\"body2\" sx={{ marginTop: \"4px\" }}>\n {widgetType === WidgetType.SEND\n ? userFacingMessages.WIDGETS.SEND.TRANSFER_CEX_ASSETS\n : userFacingMessages.WIDGETS.TRADE.WELCOME_MESSAGE}\n </Typography>\n </Box>\n\n <Box\n sx={{\n marginTop: \"40px\",\n }}\n >\n <Box\n component=\"div\"\n sx={{\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"stretch\",\n gap: theme.custom.gutterMargin,\n paddingTop: theme.custom.bigGutterMargin,\n }}\n >\n <Button\n data-testid={\"widget-connect-button\"}\n onClick={() => handleLogin({ onboard: true })}\n variant={\"contained\"}\n color={\"primary\"}\n height={\"tall\"}\n >\n {widgetType === WidgetType.SEND\n ? userFacingMessages.WIDGETS.SEND.CONNECT\n : userFacingMessages.WIDGETS.TRADE.CONNECT}\n </Button>\n </Box>\n </Box>\n </Box>\n );\n};\n","import { useEffect } from \"react\";\nimport { useNavBar } from \"@cede/ds\";\nimport { CedeOnboardingModal } from \"../../features/CedeOnboardingModal\";\nimport { useDependencies } from \"../../hooks/useDependencies\";\nimport { DefaultLogin } from \"./DefaultLogin\";\n\nexport const Login = () => {\n const { useWidgetLogin, widgetProps } = useDependencies();\n const { isOnboardingModalOpened, closeOnboardingModal } = useWidgetLogin();\n const { setCenter, setLeftSide, setIsDisplayed } = useNavBar();\n\n useEffect(() => {\n setIsDisplayed(false);\n setLeftSide(null);\n setCenter(null);\n }, []);\n\n return (\n <>\n {widgetProps?.CustomOnboardingModal ? (\n <widgetProps.CustomOnboardingModal open={isOnboardingModalOpened} exit={closeOnboardingModal} />\n ) : (\n <CedeOnboardingModal open={isOnboardingModalOpened} exit={closeOnboardingModal} />\n )}\n <DefaultLogin />\n </>\n );\n};\n","/**\n * React Router DOM v6.26.0\n *\n * Copyright (c) Remix Software Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE.md file in the root directory of this source tree.\n *\n * @license MIT\n */\nimport * as React from 'react';\nimport * as ReactDOM from 'react-dom';\nimport { UNSAFE_mapRouteProperties, UNSAFE_DataRouterContext, UNSAFE_DataRouterStateContext, Router, UNSAFE_useRoutesImpl, UNSAFE_NavigationContext, useHref, useResolvedPath, useLocation, useNavigate, createPath, UNSAFE_useRouteId, UNSAFE_RouteContext, useMatches, useNavigation, useBlocker } from 'react-router';\nexport { AbortedDeferredError, Await, MemoryRouter, Navigate, NavigationType, Outlet, Route, Router, Routes, UNSAFE_DataRouterContext, UNSAFE_DataRouterStateContext, UNSAFE_LocationContext, UNSAFE_NavigationContext, UNSAFE_RouteContext, UNSAFE_useRouteId, createMemoryRouter, createPath, createRoutesFromChildren, createRoutesFromElements, defer, generatePath, isRouteErrorResponse, json, matchPath, matchRoutes, parsePath, redirect, redirectDocument, renderMatches, replace, resolvePath, useActionData, useAsyncError, useAsyncValue, useBlocker, useHref, useInRouterContext, useLoaderData, useLocation, useMatch, useMatches, useNavigate, useNavigation, useNavigationType, useOutlet, useOutletContext, useParams, useResolvedPath, useRevalidator, useRouteError, useRouteLoaderData, useRoutes } from 'react-router';\nimport { stripBasename, UNSAFE_warning, createRouter, createBrowserHistory, createHashHistory, UNSAFE_ErrorResponseImpl, UNSAFE_invariant, joinPaths, IDLE_FETCHER, matchPath } from '@remix-run/router';\nexport { UNSAFE_ErrorResponseImpl } from '@remix-run/router';\n\nfunction _extends() {\n _extends = Object.assign ? Object.assign.bind() : function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n return target;\n };\n return _extends.apply(this, arguments);\n}\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n return target;\n}\n\nconst defaultMethod = \"get\";\nconst defaultEncType = \"application/x-www-form-urlencoded\";\nfunction isHtmlElement(object) {\n return object != null && typeof object.tagName === \"string\";\n}\nfunction isButtonElement(object) {\n return isHtmlElement(object) && object.tagName.toLowerCase() === \"button\";\n}\nfunction isFormElement(object) {\n return isHtmlElement(object) && object.tagName.toLowerCase() === \"form\";\n}\nfunction isInputElement(object) {\n return isHtmlElement(object) && object.tagName.toLowerCase() === \"input\";\n}\nfunction isModifiedEvent(event) {\n return !!(event.metaKey || event.altKey || event.ctrlKey || event.shiftKey);\n}\nfunction shouldProcessLinkClick(event, target) {\n return event.button === 0 && (\n // Ignore everything but left clicks\n !target || target === \"_self\") &&\n // Let browser handle \"target=_blank\" etc.\n !isModifiedEvent(event) // Ignore clicks with modifier keys\n ;\n}\n/**\n * Creates a URLSearchParams object using the given initializer.\n *\n * This is identical to `new URLSearchParams(init)` except it also\n * supports arrays as values in the object form of the initializer\n * instead of just strings. This is convenient when you need multiple\n * values for a given key, but don't want to use an array initializer.\n *\n * For example, instead of:\n *\n * let searchParams = new URLSearchParams([\n * ['sort', 'name'],\n * ['sort', 'price']\n * ]);\n *\n * you can do:\n *\n * let searchParams = createSearchParams({\n * sort: ['name', 'price']\n * });\n */\nfunction createSearchParams(init) {\n if (init === void 0) {\n init = \"\";\n }\n return new URLSearchParams(typeof init === \"string\" || Array.isArray(init) || init instanceof URLSearchParams ? init : Object.keys(init).reduce((memo, key) => {\n let value = init[key];\n return memo.concat(Array.isArray(value) ? value.map(v => [key, v]) : [[key, value]]);\n }, []));\n}\nfunction getSearchParamsForLocation(locationSearch, defaultSearchParams) {\n let searchParams = createSearchParams(locationSearch);\n if (defaultSearchParams) {\n // Use `defaultSearchParams.forEach(...)` here instead of iterating of\n // `defaultSearchParams.keys()` to work-around a bug in Firefox related to\n // web extensions. Relevant Bugzilla tickets:\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1414602\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1023984\n defaultSearchParams.forEach((_, key) => {\n if (!searchParams.has(key)) {\n defaultSearchParams.getAll(key).forEach(value => {\n searchParams.append(key, value);\n });\n }\n });\n }\n return searchParams;\n}\n// One-time check for submitter support\nlet _formDataSupportsSubmitter = null;\nfunction isFormDataSubmitterSupported() {\n if (_formDataSupportsSubmitter === null) {\n try {\n new FormData(document.createElement(\"form\"),\n // @ts-expect-error if FormData supports the submitter parameter, this will throw\n 0);\n _formDataSupportsSubmitter = false;\n } catch (e) {\n _formDataSupportsSubmitter = true;\n }\n }\n return _formDataSupportsSubmitter;\n}\nconst supportedFormEncTypes = new Set([\"application/x-www-form-urlencoded\", \"multipart/form-data\", \"text/plain\"]);\nfunction getFormEncType(encType) {\n if (encType != null && !supportedFormEncTypes.has(encType)) {\n process.env.NODE_ENV !== \"production\" ? UNSAFE_warning(false, \"\\\"\" + encType + \"\\\" is not a valid `encType` for `<Form>`/`<fetcher.Form>` \" + (\"and will default to \\\"\" + defaultEncType + \"\\\"\")) : void 0;\n return null;\n }\n return encType;\n}\nfunction getFormSubmissionInfo(target, basename) {\n let method;\n let action;\n let encType;\n let formData;\n let body;\n if (isFormElement(target)) {\n // When grabbing the action from the element, it will have had the basename\n // prefixed to ensure non-JS scenarios work, so strip it since we'll\n // re-prefix in the router\n let attr = target.getAttribute(\"action\");\n action = attr ? stripBasename(attr, basename) : null;\n method = target.getAttribute(\"method\") || defaultMethod;\n encType = getFormEncType(target.getAttribute(\"enctype\")) || defaultEncType;\n formData = new FormData(target);\n } else if (isButtonElement(target) || isInputElement(target) && (target.type === \"submit\" || target.type === \"image\")) {\n let form = target.form;\n if (form == null) {\n throw new Error(\"Cannot submit a <button> or <input type=\\\"submit\\\"> without a <form>\");\n }\n // <button>/<input type=\"submit\"> may override attributes of <form>\n // When grabbing the action from the element, it will have had the basename\n // prefixed to ensure non-JS scenarios work, so strip it since we'll\n // re-prefix in the router\n let attr = target.getAttribute(\"formaction\") || form.getAttribute(\"action\");\n action = attr ? stripBasename(attr, basename) : null;\n method = target.getAttribute(\"formmethod\") || form.getAttribute(\"method\") || defaultMethod;\n encType = getFormEncType(target.getAttribute(\"formenctype\")) || getFormEncType(form.getAttribute(\"enctype\")) || defaultEncType;\n // Build a FormData object populated from a form and submitter\n formData = new FormData(form, target);\n // If this browser doesn't support the `FormData(el, submitter)` format,\n // then tack on the submitter value at the end. This is a lightweight\n // solution that is not 100% spec compliant. For complete support in older\n // browsers, consider using the `formdata-submitter-polyfill` package\n if (!isFormDataSubmitterSupported()) {\n let {\n name,\n type,\n value\n } = target;\n if (type === \"image\") {\n let prefix = name ? name + \".\" : \"\";\n formData.append(prefix + \"x\", \"0\");\n formData.append(prefix + \"y\", \"0\");\n } else if (name) {\n formData.append(name, value);\n }\n }\n } else if (isHtmlElement(target)) {\n throw new Error(\"Cannot submit element that is not <form>, <button>, or \" + \"<input type=\\\"submit|image\\\">\");\n } else {\n method = defaultMethod;\n action = null;\n encType = defaultEncType;\n body = target;\n }\n // Send body for <Form encType=\"text/plain\" so we encode it into text\n if (formData && encType === \"text/plain\") {\n body = formData;\n formData = undefined;\n }\n return {\n action,\n method: method.toLowerCase(),\n encType,\n formData,\n body\n };\n}\n\nconst _excluded = [\"onClick\", \"relative\", \"reloadDocument\", \"replace\", \"state\", \"target\", \"to\", \"preventScrollReset\", \"unstable_viewTransition\"],\n _excluded2 = [\"aria-current\", \"caseSensitive\", \"className\", \"end\", \"style\", \"to\", \"unstable_viewTransition\", \"children\"],\n _excluded3 = [\"fetcherKey\", \"navigate\", \"reloadDocument\", \"replace\", \"state\", \"method\", \"action\", \"onSubmit\", \"relative\", \"preventScrollReset\", \"unstable_viewTransition\"];\n// HEY YOU! DON'T TOUCH THIS VARIABLE!\n//\n// It is replaced with the proper version at build time via a babel plugin in\n// the rollup config.\n//\n// Export a global property onto the window for React Router detection by the\n// Core Web Vitals Technology Report. This way they can configure the `wappalyzer`\n// to detect and properly classify live websites as being built with React Router:\n// https://github.com/HTTPArchive/wappalyzer/blob/main/src/technologies/r.json\nconst REACT_ROUTER_VERSION = \"6\";\ntry {\n window.__reactRouterVersion = REACT_ROUTER_VERSION;\n} catch (e) {\n // no-op\n}\nfunction createBrowserRouter(routes, opts) {\n return createRouter({\n basename: opts == null ? void 0 : opts.basename,\n future: _extends({}, opts == null ? void 0 : opts.future, {\n v7_prependBasename: true\n }),\n history: createBrowserHistory({\n window: opts == null ? void 0 : opts.window\n }),\n hydrationData: (opts == null ? void 0 : opts.hydrationData) || parseHydrationData(),\n routes,\n mapRouteProperties: UNSAFE_mapRouteProperties,\n unstable_dataStrategy: opts == null ? void 0 : opts.unstable_dataStrategy,\n unstable_patchRoutesOnMiss: opts == null ? void 0 : opts.unstable_patchRoutesOnMiss,\n window: opts == null ? void 0 : opts.window\n }).initialize();\n}\nfunction createHashRouter(routes, opts) {\n return createRouter({\n basename: opts == null ? void 0 : opts.basename,\n future: _extends({}, opts == null ? void 0 : opts.future, {\n v7_prependBasename: true\n }),\n history: createHashHistory({\n window: opts == null ? void 0 : opts.window\n }),\n hydrationData: (opts == null ? void 0 : opts.hydrationData) || parseHydrationData(),\n routes,\n mapRouteProperties: UNSAFE_mapRouteProperties,\n unstable_dataStrategy: opts == null ? void 0 : opts.unstable_dataStrategy,\n unstable_patchRoutesOnMiss: opts == null ? void 0 : opts.unstable_patchRoutesOnMiss,\n window: opts == null ? void 0 : opts.window\n }).initialize();\n}\nfunction parseHydrationData() {\n var _window;\n let state = (_window = window) == null ? void 0 : _window.__staticRouterHydrationData;\n if (state && state.errors) {\n state = _extends({}, state, {\n errors: deserializeErrors(state.errors)\n });\n }\n return state;\n}\nfunction deserializeErrors(errors) {\n if (!errors) return null;\n let entries = Object.entries(errors);\n let serialized = {};\n for (let [key, val] of entries) {\n // Hey you! If you change this, please change the corresponding logic in\n // serializeErrors in react-router-dom/server.tsx :)\n if (val && val.__type === \"RouteErrorResponse\") {\n serialized[key] = new UNSAFE_ErrorResponseImpl(val.status, val.statusText, val.data, val.internal === true);\n } else if (val && val.__type === \"Error\") {\n // Attempt to reconstruct the right type of Error (i.e., ReferenceError)\n if (val.__subType) {\n let ErrorConstructor = window[val.__subType];\n if (typeof ErrorConstructor === \"function\") {\n try {\n // @ts-expect-error\n let error = new ErrorConstructor(val.message);\n // Wipe away the client-side stack trace. Nothing to fill it in with\n // because we don't serialize SSR stack traces for security reasons\n error.stack = \"\";\n serialized[key] = error;\n } catch (e) {\n // no-op - fall through and create a normal Error\n }\n }\n }\n if (serialized[key] == null) {\n let error = new Error(val.message);\n // Wipe away the client-side stack trace. Nothing to fill it in with\n // because we don't serialize SSR stack traces for security reasons\n error.stack = \"\";\n serialized[key] = error;\n }\n } else {\n serialized[key] = val;\n }\n }\n return serialized;\n}\nconst ViewTransitionContext = /*#__PURE__*/React.createContext({\n isTransitioning: false\n});\nif (process.env.NODE_ENV !== \"production\") {\n ViewTransitionContext.displayName = \"ViewTransition\";\n}\nconst FetchersContext = /*#__PURE__*/React.createContext(new Map());\nif (process.env.NODE_ENV !== \"production\") {\n FetchersContext.displayName = \"Fetchers\";\n}\n//#endregion\n////////////////////////////////////////////////////////////////////////////////\n//#region Components\n////////////////////////////////////////////////////////////////////////////////\n/**\n Webpack + React 17 fails to compile on any of the following because webpack\n complains that `startTransition` doesn't exist in `React`:\n * import { startTransition } from \"react\"\n * import * as React from from \"react\";\n \"startTransition\" in React ? React.startTransition(() => setState()) : setState()\n * import * as React from from \"react\";\n \"startTransition\" in React ? React[\"startTransition\"](() => setState()) : setState()\n\n Moving it to a constant such as the following solves the Webpack/React 17 issue:\n * import * as React from from \"react\";\n const START_TRANSITION = \"startTransition\";\n START_TRANSITION in React ? React[START_TRANSITION](() => setState()) : setState()\n\n However, that introduces webpack/terser minification issues in production builds\n in React 18 where minification/obfuscation ends up removing the call of\n React.startTransition entirely from the first half of the ternary. Grabbing\n this exported reference once up front resolves that issue.\n\n See https://github.com/remix-run/react-router/issues/10579\n*/\nconst START_TRANSITION = \"startTransition\";\nconst startTransitionImpl = React[START_TRANSITION];\nconst FLUSH_SYNC = \"flushSync\";\nconst flushSyncImpl = ReactDOM[FLUSH_SYNC];\nconst USE_ID = \"useId\";\nconst useIdImpl = React[USE_ID];\nfunction startTransitionSafe(cb) {\n if (startTransitionImpl) {\n startTransitionImpl(cb);\n } else {\n cb();\n }\n}\nfunction flushSyncSafe(cb) {\n if (flushSyncImpl) {\n flushSyncImpl(cb);\n } else {\n cb();\n }\n}\nclass Deferred {\n constructor() {\n this.status = \"pending\";\n this.promise = new Promise((resolve, reject) => {\n this.resolve = value => {\n if (this.status === \"pending\") {\n this.status = \"resolved\";\n resolve(value);\n }\n };\n this.reject = reason => {\n if (this.status === \"pending\") {\n this.status = \"rejected\";\n reject(reason);\n }\n };\n });\n }\n}\n/**\n * Given a Remix Router instance, render the appropriate UI\n */\nfunction RouterProvider(_ref) {\n let {\n fallbackElement,\n router,\n future\n } = _ref;\n let [state, setStateImpl] = React.useState(router.state);\n let [pendingState, setPendingState] = React.useState();\n let [vtContext, setVtContext] = React.useState({\n isTransitioning: false\n });\n let [renderDfd, setRenderDfd] = React.useState();\n let [transition, setTransition] = React.useState();\n let [interruption, setInterruption] = React.useState();\n let fetcherData = React.useRef(new Map());\n let {\n v7_startTransition\n } = future || {};\n let optInStartTransition = React.useCallback(cb => {\n if (v7_startTransition) {\n startTransitionSafe(cb);\n } else {\n cb();\n }\n }, [v7_startTransition]);\n let setState = React.useCallback((newState, _ref2) => {\n let {\n deletedFetchers,\n unstable_flushSync: flushSync,\n unstable_viewTransitionOpts: viewTransitionOpts\n } = _ref2;\n deletedFetchers.forEach(key => fetcherData.current.delete(key));\n newState.fetchers.forEach((fetcher, key) => {\n if (fetcher.data !== undefined) {\n fetcherData.current.set(key, fetcher.data);\n }\n });\n let isViewTransitionUnavailable = router.window == null || router.window.document == null || typeof router.window.document.startViewTransition !== \"function\";\n // If this isn't a view transition or it's not available in this browser,\n // just update and be done with it\n if (!viewTransitionOpts || isViewTransitionUnavailable) {\n if (flushSync) {\n flushSyncSafe(() => setStateImpl(newState));\n } else {\n optInStartTransition(() => setStateImpl(newState));\n }\n return;\n }\n // flushSync + startViewTransition\n if (flushSync) {\n // Flush through the context to mark DOM elements as transition=ing\n flushSyncSafe(() => {\n // Cancel any pending transitions\n if (transition) {\n renderDfd && renderDfd.resolve();\n transition.skipTransition();\n }\n setVtContext({\n isTransitioning: true,\n flushSync: true,\n currentLocation: viewTransitionOpts.currentLocation,\n nextLocation: viewTransitionOpts.nextLocation\n });\n });\n // Update the DOM\n let t = router.window.document.startViewTransition(() => {\n flushSyncSafe(() => setStateImpl(newState));\n });\n // Clean up after the animation completes\n t.finished.finally(() => {\n flushSyncSafe(() => {\n setRenderDfd(undefined);\n setTransition(undefined);\n setPendingState(undefined);\n setVtContext({\n isTransitioning: false\n });\n });\n });\n flushSyncSafe(() => setTransition(t));\n return;\n }\n // startTransition + startViewTransition\n if (transition) {\n // Interrupting an in-progress transition, cancel and let everything flush\n // out, and then kick off a new transition from the interruption state\n renderDfd && renderDfd.resolve();\n transition.skipTransition();\n setInterruption({\n state: newState,\n currentLocation: viewTransitionOpts.currentLocation,\n nextLocation: viewTransitionOpts.nextLocation\n });\n } else {\n // Completed navigation update with opted-in view transitions, let 'er rip\n setPendingState(newState);\n setVtContext({\n isTransitioning: true,\n flushSync: false,\n currentLocation: viewTransitionOpts.currentLocation,\n nextLocation: viewTransitionOpts.nextLocation\n });\n }\n }, [router.window, transition, renderDfd, fetcherData, optInStartTransition]);\n // Need to use a layout effect here so we are subscribed early enough to\n // pick up on any render-driven redirects/navigations (useEffect/<Navigate>)\n React.useLayoutEffect(() => router.subscribe(setState), [router, setState]);\n // When we start a view transition, create a Deferred we can use for the\n // eventual \"completed\" render\n React.useEffect(() => {\n if (vtContext.isTransitioning && !vtContext.flushSync) {\n setRenderDfd(new Deferred());\n }\n }, [vtContext]);\n // Once the deferred is created, kick off startViewTransition() to update the\n // DOM and then wait on the Deferred to resolve (indicating the DOM update has\n // happened)\n React.useEffect(() => {\n if (renderDfd && pendingState && router.window) {\n let newState = pendingState;\n let renderPromise = renderDfd.promise;\n let transition = router.window.document.startViewTransition(async () => {\n optInStartTransition(() => setStateImpl(newState));\n await renderPromise;\n });\n transition.finished.finally(() => {\n setRenderDfd(undefined);\n setTransition(undefined);\n setPendingState(undefined);\n setVtContext({\n isTransitioning: false\n });\n });\n setTransition(transition);\n }\n }, [optInStartTransition, pendingState, renderDfd, router.window]);\n // When the new location finally renders and is committed to the DOM, this\n // effect will run to resolve the transition\n React.useEffect(() => {\n if (renderDfd && pendingState && state.location.key === pendingState.location.key) {\n renderDfd.resolve();\n }\n }, [renderDfd, transition, state.location, pendingState]);\n // If we get interrupted with a new navigation during a transition, we skip\n // the active transition, let it cleanup, then kick it off again here\n React.useEffect(() => {\n if (!vtContext.isTransitioning && interruption) {\n setPendingState(interruption.state);\n setVtContext({\n isTransitioning: true,\n flushSync: false,\n currentLocation: interruption.currentLocation,\n nextLocation: interruption.nextLocation\n });\n setInterruption(undefined);\n }\n }, [vtContext.isTransitioning, interruption]);\n React.useEffect(() => {\n process.env.NODE_ENV !== \"production\" ? UNSAFE_warning(fallbackElement == null || !router.future.v7_partialHydration, \"`<RouterProvider fallbackElement>` is deprecated when using \" + \"`v7_partialHydration`, use a `HydrateFallback` component instead\") : void 0;\n // Only log this once on initial mount\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n let navigator = React.useMemo(() => {\n return {\n createHref: router.createHref,\n encodeLocation: router.encodeLocation,\n go: n => router.navigate(n),\n push: (to, state, opts) => router.navigate(to, {\n state,\n preventScrollReset: opts == null ? void 0 : opts.preventScrollReset\n }),\n replace: (to, state, opts) => router.navigate(to, {\n replace: true,\n state,\n preventScrollReset: opts == null ? void 0 : opts.preventScrollReset\n })\n };\n }, [router]);\n let basename = router.basename || \"/\";\n let dataRouterContext = React.useMemo(() => ({\n router,\n navigator,\n static: false,\n basename\n }), [router, navigator, basename]);\n let routerFuture = React.useMemo(() => ({\n v7_relativeSplatPath: router.future.v7_relativeSplatPath\n }), [router.future.v7_relativeSplatPath]);\n // The fragment and {null} here are important! We need them to keep React 18's\n // useId happy when we are server-rendering since we may have a <script> here\n // containing the hydrated server-side staticContext (from StaticRouterProvider).\n // useId relies on the component tree structure to generate deterministic id's\n // so we need to ensure it remains the same on the client even though\n // we don't need the <script> tag\n return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(UNSAFE_DataRouterContext.Provider, {\n value: dataRouterContext\n }, /*#__PURE__*/React.createElement(UNSAFE_DataRouterStateContext.Provider, {\n value: state\n }, /*#__PURE__*/React.createElement(FetchersContext.Provider, {\n value: fetcherData.current\n }, /*#__PURE__*/React.createElement(ViewTransitionContext.Provider, {\n value: vtContext\n }, /*#__PURE__*/React.createElement(Router, {\n basename: basename,\n location: state.location,\n navigationType: state.historyAction,\n navigator: navigator,\n future: routerFuture\n }, state.initialized || router.future.v7_partialHydration ? /*#__PURE__*/React.createElement(MemoizedDataRoutes, {\n routes: router.routes,\n future: router.future,\n state: state\n }) : fallbackElement))))), null);\n}\n// Memoize to avoid re-renders when updating `ViewTransitionContext`\nconst MemoizedDataRoutes = /*#__PURE__*/React.memo(DataRoutes);\nfunction DataRoutes(_ref3) {\n let {\n routes,\n future,\n state\n } = _ref3;\n return UNSAFE_useRoutesImpl(routes, undefined, state, future);\n}\n/**\n * A `<Router>` for use in web browsers. Provides the cleanest URLs.\n */\nfunction BrowserRouter(_ref4) {\n let {\n basename,\n children,\n future,\n window\n } = _ref4;\n let historyRef = React.useRef();\n if (historyRef.current == null) {\n historyRef.current = createBrowserHistory({\n window,\n v5Compat: true\n });\n }\n let history = historyRef.current;\n let [state, setStateImpl] = React.useState({\n action: history.action,\n location: history.location\n });\n let {\n v7_startTransition\n } = future || {};\n let setState = React.useCallback(newState => {\n v7_startTransition && startTransitionImpl ? startTransitionImpl(() => setStateImpl(newState)) : setStateImpl(newState);\n }, [setStateImpl, v7_startTransition]);\n React.useLayoutEffect(() => history.listen(setState), [history, setState]);\n return /*#__PURE__*/React.createElement(Router, {\n basename: basename,\n children: children,\n location: state.location,\n navigationType: state.action,\n navigator: history,\n future: future\n });\n}\n/**\n * A `<Router>` for use in web browsers. Stores the location in the hash\n * portion of the URL so it is not sent to the server.\n */\nfunction HashRouter(_ref5) {\n let {\n basename,\n children,\n future,\n window\n } = _ref5;\n let historyRef = React.useRef();\n if (historyRef.current == null) {\n historyRef.current = createHashHistory({\n window,\n v5Compat: true\n });\n }\n let history = historyRef.current;\n let [state, setStateImpl] = React.useState({\n action: history.action,\n location: history.location\n });\n let {\n v7_startTransition\n } = future || {};\n let setState = React.useCallback(newState => {\n v7_startTransition && startTransitionImpl ? startTransitionImpl(() => setStateImpl(newState)) : setStateImpl(newState);\n }, [setStateImpl, v7_startTransition]);\n React.useLayoutEffect(() => history.listen(setState), [history, setState]);\n return /*#__PURE__*/React.createElement(Router, {\n basename: basename,\n children: children,\n location: state.location,\n navigationType: state.action,\n navigator: history,\n future: future\n });\n}\n/**\n * A `<Router>` that accepts a pre-instantiated history object. It's important\n * to note that using your own history object is highly discouraged and may add\n * two versions of the history library to your bundles unless you use the same\n * version of the history library that React Router uses internally.\n */\nfunction HistoryRouter(_ref6) {\n let {\n basename,\n children,\n future,\n history\n } = _ref6;\n let [state, setStateImpl] = React.useState({\n action: history.action,\n location: history.location\n });\n let {\n v7_startTransition\n } = future || {};\n let setState = React.useCallback(newState => {\n v7_startTransition && startTransitionImpl ? startTransitionImpl(() => setStateImpl(newState)) : setStateImpl(newState);\n }, [setStateImpl, v7_startTransition]);\n React.useLayoutEffect(() => history.listen(setState), [history, setState]);\n return /*#__PURE__*/React.createElement(Router, {\n basename: basename,\n children: children,\n location: state.location,\n navigationType: state.action,\n navigator: history,\n future: future\n });\n}\nif (process.env.NODE_ENV !== \"production\") {\n HistoryRouter.displayName = \"unstable_HistoryRouter\";\n}\nconst isBrowser = typeof window !== \"undefined\" && typeof window.document !== \"undefined\" && typeof window.document.createElement !== \"undefined\";\nconst ABSOLUTE_URL_REGEX = /^(?:[a-z][a-z0-9+.-]*:|\\/\\/)/i;\n/**\n * The public API for rendering a history-aware `<a>`.\n */\nconst Link = /*#__PURE__*/React.forwardRef(function LinkWithRef(_ref7, ref) {\n let {\n onClick,\n relative,\n reloadDocument,\n replace,\n state,\n target,\n to,\n preventScrollReset,\n unstable_viewTransition\n } = _ref7,\n rest = _objectWithoutPropertiesLoose(_ref7, _excluded);\n let {\n basename\n } = React.useContext(UNSAFE_NavigationContext);\n // Rendered into <a href> for absolute URLs\n let absoluteHref;\n let isExternal = false;\n if (typeof to === \"string\" && ABSOLUTE_URL_REGEX.test(to)) {\n // Render the absolute href server- and client-side\n absoluteHref = to;\n // Only check for external origins client-side\n if (isBrowser) {\n try {\n let currentUrl = new URL(window.location.href);\n let targetUrl = to.startsWith(\"//\") ? new URL(currentUrl.protocol + to) : new URL(to);\n let path = stripBasename(targetUrl.pathname, basename);\n if (targetUrl.origin === currentUrl.origin && path != null) {\n // Strip the protocol/origin/basename for same-origin absolute URLs\n to = path + targetUrl.search + targetUrl.hash;\n } else {\n isExternal = true;\n }\n } catch (e) {\n // We can't do external URL detection without a valid URL\n process.env.NODE_ENV !== \"production\" ? UNSAFE_warning(false, \"<Link to=\\\"\" + to + \"\\\"> contains an invalid URL which will probably break \" + \"when clicked - please update to a valid URL path.\") : void 0;\n }\n }\n }\n // Rendered into <a href> for relative URLs\n let href = useHref(to, {\n relative\n });\n let internalOnClick = useLinkClickHandler(to, {\n replace,\n state,\n target,\n preventScrollReset,\n relative,\n unstable_viewTransition\n });\n function handleClick(event) {\n if (onClick) onClick(event);\n if (!event.defaultPrevented) {\n internalOnClick(event);\n }\n }\n return (\n /*#__PURE__*/\n // eslint-disable-next-line jsx-a11y/anchor-has-content\n React.createElement(\"a\", _extends({}, rest, {\n href: absoluteHref || href,\n onClick: isExternal || reloadDocument ? onClick : handleClick,\n ref: ref,\n target: target\n }))\n );\n});\nif (process.env.NODE_ENV !== \"production\") {\n Link.displayName = \"Link\";\n}\n/**\n * A `<Link>` wrapper that knows if it's \"active\" or not.\n */\nconst NavLink = /*#__PURE__*/React.forwardRef(function NavLinkWithRef(_ref8, ref) {\n let {\n \"aria-current\": ariaCurrentProp = \"page\",\n caseSensitive = false,\n className: classNameProp = \"\",\n end = false,\n style: styleProp,\n to,\n unstable_viewTransition,\n children\n } = _ref8,\n rest = _objectWithoutPropertiesLoose(_ref8, _excluded2);\n let path = useResolvedPath(to, {\n relative: rest.relative\n });\n let location = useLocation();\n let routerState = React.useContext(UNSAFE_DataRouterStateContext);\n let {\n navigator,\n basename\n } = React.useContext(UNSAFE_NavigationContext);\n let isTransitioning = routerState != null &&\n // Conditional usage is OK here because the usage of a data router is static\n // eslint-disable-next-line react-hooks/rules-of-hooks\n useViewTransitionState(path) && unstable_viewTransition === true;\n let toPathname = navigator.encodeLocation ? navigator.encodeLocation(path).pathname : path.pathname;\n let locationPathname = location.pathname;\n let nextLocationPathname = routerState && routerState.navigation && routerState.navigation.location ? routerState.navigation.location.pathname : null;\n if (!caseSensitive) {\n locationPathname = locationPathname.toLowerCase();\n nextLocationPathname = nextLocationPathname ? nextLocationPathname.toLowerCase() : null;\n toPathname = toPathname.toLowerCase();\n }\n if (nextLocationPathname && basename) {\n nextLocationPathname = stripBasename(nextLocationPathname, basename) || nextLocationPathname;\n }\n // If the `to` has a trailing slash, look at that exact spot. Otherwise,\n // we're looking for a slash _after_ what's in `to`. For example:\n //\n // <NavLink to=\"/users\"> and <NavLink to=\"/users/\">\n // both want to look for a / at index 6 to match URL `/users/matt`\n const endSlashPosition = toPathname !== \"/\" && toPathname.endsWith(\"/\") ? toPathname.length - 1 : toPathname.length;\n let isActive = locationPathname === toPathname || !end && locationPathname.startsWith(toPathname) && locationPathname.charAt(endSlashPosition) === \"/\";\n let isPending = nextLocationPathname != null && (nextLocationPathname === toPathname || !end && nextLocationPathname.startsWith(toPathname) && nextLocationPathname.charAt(toPathname.length) === \"/\");\n let renderProps = {\n isActive,\n isPending,\n isTransitioning\n };\n let ariaCurrent = isActive ? ariaCurrentProp : undefined;\n let className;\n if (typeof classNameProp === \"function\") {\n className = classNameProp(renderProps);\n } else {\n // If the className prop is not a function, we use a default `active`\n // class for <NavLink />s that are active. In v5 `active` was the default\n // value for `activeClassName`, but we are removing that API and can still\n // use the old default behavior for a cleaner upgrade path and keep the\n // simple styling rules working as they currently do.\n className = [classNameProp, isActive ? \"active\" : null, isPending ? \"pending\" : null, isTransitioning ? \"transitioning\" : null].filter(Boolean).join(\" \");\n }\n let style = typeof styleProp === \"function\" ? styleProp(renderProps) : styleProp;\n return /*#__PURE__*/React.createElement(Link, _extends({}, rest, {\n \"aria-current\": ariaCurrent,\n className: className,\n ref: ref,\n style: style,\n to: to,\n unstable_viewTransition: unstable_viewTransition\n }), typeof children === \"function\" ? children(renderProps) : children);\n});\nif (process.env.NODE_ENV !== \"production\") {\n NavLink.displayName = \"NavLink\";\n}\n/**\n * A `@remix-run/router`-aware `<form>`. It behaves like a normal form except\n * that the interaction with the server is with `fetch` instead of new document\n * requests, allowing components to add nicer UX to the page as the form is\n * submitted and returns with data.\n */\nconst Form = /*#__PURE__*/React.forwardRef((_ref9, forwardedRef) => {\n let {\n fetcherKey,\n navigate,\n reloadDocument,\n replace,\n state,\n method = defaultMethod,\n action,\n onSubmit,\n relative,\n preventScrollReset,\n unstable_viewTransition\n } = _ref9,\n props = _objectWithoutPropertiesLoose(_ref9, _excluded3);\n let submit = useSubmit();\n let formAction = useFormAction(action, {\n relative\n });\n let formMethod = method.toLowerCase() === \"get\" ? \"get\" : \"post\";\n let submitHandler = event => {\n onSubmit && onSubmit(event);\n if (event.defaultPrevented) return;\n event.preventDefault();\n let submitter = event.nativeEvent.submitter;\n let submitMethod = (submitter == null ? void 0 : submitter.getAttribute(\"formmethod\")) || method;\n submit(submitter || event.currentTarget, {\n fetcherKey,\n method: submitMethod,\n navigate,\n replace,\n state,\n relative,\n preventScrollReset,\n unstable_viewTransition\n });\n };\n return /*#__PURE__*/React.createElement(\"form\", _extends({\n ref: forwardedRef,\n method: formMethod,\n action: formAction,\n onSubmit: reloadDocument ? onSubmit : submitHandler\n }, props));\n});\nif (process.env.NODE_ENV !== \"production\") {\n Form.displayName = \"Form\";\n}\n/**\n * This component will emulate the browser's scroll restoration on location\n * changes.\n */\nfunction ScrollRestoration(_ref10) {\n let {\n getKey,\n storageKey\n } = _ref10;\n useScrollRestoration({\n getKey,\n storageKey\n });\n return null;\n}\nif (process.env.NODE_ENV !== \"production\") {\n ScrollRestoration.displayName = \"ScrollRestoration\";\n}\n//#endregion\n////////////////////////////////////////////////////////////////////////////////\n//#region Hooks\n////////////////////////////////////////////////////////////////////////////////\nvar DataRouterHook;\n(function (DataRouterHook) {\n DataRouterHook[\"UseScrollRestoration\"] = \"useScrollRestoration\";\n DataRouterHook[\"UseSubmit\"] = \"useSubmit\";\n DataRouterHook[\"UseSubmitFetcher\"] = \"useSubmitFetcher\";\n DataRouterHook[\"UseFetcher\"] = \"useFetcher\";\n DataRouterHook[\"useViewTransitionState\"] = \"useViewTransitionState\";\n})(DataRouterHook || (DataRouterHook = {}));\nvar DataRouterStateHook;\n(function (DataRouterStateHook) {\n DataRouterStateHook[\"UseFetcher\"] = \"useFetcher\";\n DataRouterStateHook[\"UseFetchers\"] = \"useFetchers\";\n DataRouterStateHook[\"UseScrollRestoration\"] = \"useScrollRestoration\";\n})(DataRouterStateHook || (DataRouterStateHook = {}));\n// Internal hooks\nfunction getDataRouterConsoleError(hookName) {\n return hookName + \" must be used within a data router. See https://reactrouter.com/routers/picking-a-router.\";\n}\nfunction useDataRouterContext(hookName) {\n let ctx = React.useContext(UNSAFE_DataRouterContext);\n !ctx ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, getDataRouterConsoleError(hookName)) : UNSAFE_invariant(false) : void 0;\n return ctx;\n}\nfunction useDataRouterState(hookName) {\n let state = React.useContext(UNSAFE_DataRouterStateContext);\n !state ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, getDataRouterConsoleError(hookName)) : UNSAFE_invariant(false) : void 0;\n return state;\n}\n// External hooks\n/**\n * Handles the click behavior for router `<Link>` components. This is useful if\n * you need to create custom `<Link>` components with the same click behavior we\n * use in our exported `<Link>`.\n */\nfunction useLinkClickHandler(to, _temp) {\n let {\n target,\n replace: replaceProp,\n state,\n preventScrollReset,\n relative,\n unstable_viewTransition\n } = _temp === void 0 ? {} : _temp;\n let navigate = useNavigate();\n let location = useLocation();\n let path = useResolvedPath(to, {\n relative\n });\n return React.useCallback(event => {\n if (shouldProcessLinkClick(event, target)) {\n event.preventDefault();\n // If the URL hasn't changed, a regular <a> will do a replace instead of\n // a push, so do the same here unless the replace prop is explicitly set\n let replace = replaceProp !== undefined ? replaceProp : createPath(location) === createPath(path);\n navigate(to, {\n replace,\n state,\n preventScrollReset,\n relative,\n unstable_viewTransition\n });\n }\n }, [location, navigate, path, replaceProp, state, target, to, preventScrollReset, relative, unstable_viewTransition]);\n}\n/**\n * A convenient wrapper for reading and writing search parameters via the\n * URLSearchParams interface.\n */\nfunction useSearchParams(defaultInit) {\n process.env.NODE_ENV !== \"production\" ? UNSAFE_warning(typeof URLSearchParams !== \"undefined\", \"You cannot use the `useSearchParams` hook in a browser that does not \" + \"support the URLSearchParams API. If you need to support Internet \" + \"Explorer 11, we recommend you load a polyfill such as \" + \"https://github.com/ungap/url-search-params.\") : void 0;\n let defaultSearchParamsRef = React.useRef(createSearchParams(defaultInit));\n let hasSetSearchParamsRef = React.useRef(false);\n let location = useLocation();\n let searchParams = React.useMemo(() =>\n // Only merge in the defaults if we haven't yet called setSearchParams.\n // Once we call that we want those to take precedence, otherwise you can't\n // remove a param with setSearchParams({}) if it has an initial value\n getSearchParamsForLocation(location.search, hasSetSearchParamsRef.current ? null : defaultSearchParamsRef.current), [location.search]);\n let navigate = useNavigate();\n let setSearchParams = React.useCallback((nextInit, navigateOptions) => {\n const newSearchParams = createSearchParams(typeof nextInit === \"function\" ? nextInit(searchParams) : nextInit);\n hasSetSearchParamsRef.current = true;\n navigate(\"?\" + newSearchParams, navigateOptions);\n }, [navigate, searchParams]);\n return [searchParams, setSearchParams];\n}\nfunction validateClientSideSubmission() {\n if (typeof document === \"undefined\") {\n throw new Error(\"You are calling submit during the server render. \" + \"Try calling submit within a `useEffect` or callback instead.\");\n }\n}\nlet fetcherId = 0;\nlet getUniqueFetcherId = () => \"__\" + String(++fetcherId) + \"__\";\n/**\n * Returns a function that may be used to programmatically submit a form (or\n * some arbitrary data) to the server.\n */\nfunction useSubmit() {\n let {\n router\n } = useDataRouterContext(DataRouterHook.UseSubmit);\n let {\n basename\n } = React.useContext(UNSAFE_NavigationContext);\n let currentRouteId = UNSAFE_useRouteId();\n return React.useCallback(function (target, options) {\n if (options === void 0) {\n options = {};\n }\n validateClientSideSubmission();\n let {\n action,\n method,\n encType,\n formData,\n body\n } = getFormSubmissionInfo(target, basename);\n if (options.navigate === false) {\n let key = options.fetcherKey || getUniqueFetcherId();\n router.fetch(key, currentRouteId, options.action || action, {\n preventScrollReset: options.preventScrollReset,\n formData,\n body,\n formMethod: options.method || method,\n formEncType: options.encType || encType,\n unstable_flushSync: options.unstable_flushSync\n });\n } else {\n router.navigate(options.action || action, {\n preventScrollReset: options.preventScrollReset,\n formData,\n body,\n formMethod: options.method || method,\n formEncType: options.encType || encType,\n replace: options.replace,\n state: options.state,\n fromRouteId: currentRouteId,\n unstable_flushSync: options.unstable_flushSync,\n unstable_viewTransition: options.unstable_viewTransition\n });\n }\n }, [router, basename, currentRouteId]);\n}\n// v7: Eventually we should deprecate this entirely in favor of using the\n// router method directly?\nfunction useFormAction(action, _temp2) {\n let {\n relative\n } = _temp2 === void 0 ? {} : _temp2;\n let {\n basename\n } = React.useContext(UNSAFE_NavigationContext);\n let routeContext = React.useContext(UNSAFE_RouteContext);\n !routeContext ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, \"useFormAction must be used inside a RouteContext\") : UNSAFE_invariant(false) : void 0;\n let [match] = routeContext.matches.slice(-1);\n // Shallow clone path so we can modify it below, otherwise we modify the\n // object referenced by useMemo inside useResolvedPath\n let path = _extends({}, useResolvedPath(action ? action : \".\", {\n relative\n }));\n // If no action was specified, browsers will persist current search params\n // when determining the path, so match that behavior\n // https://github.com/remix-run/remix/issues/927\n let location = useLocation();\n if (action == null) {\n // Safe to write to this directly here since if action was undefined, we\n // would have called useResolvedPath(\".\") which will never include a search\n path.search = location.search;\n // When grabbing search params from the URL, remove any included ?index param\n // since it might not apply to our contextual route. We add it back based\n // on match.route.index below\n let params = new URLSearchParams(path.search);\n if (params.has(\"index\") && params.get(\"index\") === \"\") {\n params.delete(\"index\");\n path.search = params.toString() ? \"?\" + params.toString() : \"\";\n }\n }\n if ((!action || action === \".\") && match.route.index) {\n path.search = path.search ? path.search.replace(/^\\?/, \"?index&\") : \"?index\";\n }\n // If we're operating within a basename, prepend it to the pathname prior\n // to creating the form action. If this is a root navigation, then just use\n // the raw basename which allows the basename to have full control over the\n // presence of a trailing slash on root actions\n if (basename !== \"/\") {\n path.pathname = path.pathname === \"/\" ? basename : joinPaths([basename, path.pathname]);\n }\n return createPath(path);\n}\n// TODO: (v7) Change the useFetcher generic default from `any` to `unknown`\n/**\n * Interacts with route loaders and actions without causing a navigation. Great\n * for any interaction that stays on the same page.\n */\nfunction useFetcher(_temp3) {\n var _route$matches;\n let {\n key\n } = _temp3 === void 0 ? {} : _temp3;\n let {\n router\n } = useDataRouterContext(DataRouterHook.UseFetcher);\n let state = useDataRouterState(DataRouterStateHook.UseFetcher);\n let fetcherData = React.useContext(FetchersContext);\n let route = React.useContext(UNSAFE_RouteContext);\n let routeId = (_route$matches = route.matches[route.matches.length - 1]) == null ? void 0 : _route$matches.route.id;\n !fetcherData ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, \"useFetcher must be used inside a FetchersContext\") : UNSAFE_invariant(false) : void 0;\n !route ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, \"useFetcher must be used inside a RouteContext\") : UNSAFE_invariant(false) : void 0;\n !(routeId != null) ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, \"useFetcher can only be used on routes that contain a unique \\\"id\\\"\") : UNSAFE_invariant(false) : void 0;\n // Fetcher key handling\n // OK to call conditionally to feature detect `useId`\n // eslint-disable-next-line react-hooks/rules-of-hooks\n let defaultKey = useIdImpl ? useIdImpl() : \"\";\n let [fetcherKey, setFetcherKey] = React.useState(key || defaultKey);\n if (key && key !== fetcherKey) {\n setFetcherKey(key);\n } else if (!fetcherKey) {\n // We will only fall through here when `useId` is not available\n setFetcherKey(getUniqueFetcherId());\n }\n // Registration/cleanup\n React.useEffect(() => {\n router.getFetcher(fetcherKey);\n return () => {\n // Tell the router we've unmounted - if v7_fetcherPersist is enabled this\n // will not delete immediately but instead queue up a delete after the\n // fetcher returns to an `idle` state\n router.deleteFetcher(fetcherKey);\n };\n }, [router, fetcherKey]);\n // Fetcher additions\n let load = React.useCallback((href, opts) => {\n !routeId ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, \"No routeId available for fetcher.load()\") : UNSAFE_invariant(false) : void 0;\n router.fetch(fetcherKey, routeId, href, opts);\n }, [fetcherKey, routeId, router]);\n let submitImpl = useSubmit();\n let submit = React.useCallback((target, opts) => {\n submitImpl(target, _extends({}, opts, {\n navigate: false,\n fetcherKey\n }));\n }, [fetcherKey, submitImpl]);\n let FetcherForm = React.useMemo(() => {\n let FetcherForm = /*#__PURE__*/React.forwardRef((props, ref) => {\n return /*#__PURE__*/React.createElement(Form, _extends({}, props, {\n navigate: false,\n fetcherKey: fetcherKey,\n ref: ref\n }));\n });\n if (process.env.NODE_ENV !== \"production\") {\n FetcherForm.displayName = \"fetcher.Form\";\n }\n return FetcherForm;\n }, [fetcherKey]);\n // Exposed FetcherWithComponents\n let fetcher = state.fetchers.get(fetcherKey) || IDLE_FETCHER;\n let data = fetcherData.get(fetcherKey);\n let fetcherWithComponents = React.useMemo(() => _extends({\n Form: FetcherForm,\n submit,\n load\n }, fetcher, {\n data\n }), [FetcherForm, submit, load, fetcher, data]);\n return fetcherWithComponents;\n}\n/**\n * Provides all fetchers currently on the page. Useful for layouts and parent\n * routes that need to provide pending/optimistic UI regarding the fetch.\n */\nfunction useFetchers() {\n let state = useDataRouterState(DataRouterStateHook.UseFetchers);\n return Array.from(state.fetchers.entries()).map(_ref11 => {\n let [key, fetcher] = _ref11;\n return _extends({}, fetcher, {\n key\n });\n });\n}\nconst SCROLL_RESTORATION_STORAGE_KEY = \"react-router-scroll-positions\";\nlet savedScrollPositions = {};\n/**\n * When rendered inside a RouterProvider, will restore scroll positions on navigations\n */\nfunction useScrollRestoration(_temp4) {\n let {\n getKey,\n storageKey\n } = _temp4 === void 0 ? {} : _temp4;\n let {\n router\n } = useDataRouterContext(DataRouterHook.UseScrollRestoration);\n let {\n restoreScrollPosition,\n preventScrollReset\n } = useDataRouterState(DataRouterStateHook.UseScrollRestoration);\n let {\n basename\n } = React.useContext(UNSAFE_NavigationContext);\n let location = useLocation();\n let matches = useMatches();\n let navigation = useNavigation();\n // Trigger manual scroll restoration while we're active\n React.useEffect(() => {\n window.history.scrollRestoration = \"manual\";\n return () => {\n window.history.scrollRestoration = \"auto\";\n };\n }, []);\n // Save positions on pagehide\n usePageHide(React.useCallback(() => {\n if (navigation.state === \"idle\") {\n let key = (getKey ? getKey(location, matches) : null) || location.key;\n savedScrollPositions[key] = window.scrollY;\n }\n try {\n sessionStorage.setItem(storageKey || SCROLL_RESTORATION_STORAGE_KEY, JSON.stringify(savedScrollPositions));\n } catch (error) {\n process.env.NODE_ENV !== \"production\" ? UNSAFE_warning(false, \"Failed to save scroll positions in sessionStorage, <ScrollRestoration /> will not work properly (\" + error + \").\") : void 0;\n }\n window.history.scrollRestoration = \"auto\";\n }, [storageKey, getKey, navigation.state, location, matches]));\n // Read in any saved scroll locations\n if (typeof document !== \"undefined\") {\n // eslint-disable-next-line react-hooks/rules-of-hooks\n React.useLayoutEffect(() => {\n try {\n let sessionPositions = sessionStorage.getItem(storageKey || SCROLL_RESTORATION_STORAGE_KEY);\n if (sessionPositions) {\n savedScrollPositions = JSON.parse(sessionPositions);\n }\n } catch (e) {\n // no-op, use default empty object\n }\n }, [storageKey]);\n // Enable scroll restoration in the router\n // eslint-disable-next-line react-hooks/rules-of-hooks\n React.useLayoutEffect(() => {\n let getKeyWithoutBasename = getKey && basename !== \"/\" ? (location, matches) => getKey( // Strip the basename to match useLocation()\n _extends({}, location, {\n pathname: stripBasename(location.pathname, basename) || location.pathname\n }), matches) : getKey;\n let disableScrollRestoration = router == null ? void 0 : router.enableScrollRestoration(savedScrollPositions, () => window.scrollY, getKeyWithoutBasename);\n return () => disableScrollRestoration && disableScrollRestoration();\n }, [router, basename, getKey]);\n // Restore scrolling when state.restoreScrollPosition changes\n // eslint-disable-next-line react-hooks/rules-of-hooks\n React.useLayoutEffect(() => {\n // Explicit false means don't do anything (used for submissions)\n if (restoreScrollPosition === false) {\n return;\n }\n // been here before, scroll to it\n if (typeof restoreScrollPosition === \"number\") {\n window.scrollTo(0, restoreScrollPosition);\n return;\n }\n // try to scroll to the hash\n if (location.hash) {\n let el = document.getElementById(decodeURIComponent(location.hash.slice(1)));\n if (el) {\n el.scrollIntoView();\n return;\n }\n }\n // Don't reset if this navigation opted out\n if (preventScrollReset === true) {\n return;\n }\n // otherwise go to the top on new locations\n window.scrollTo(0, 0);\n }, [location, restoreScrollPosition, preventScrollReset]);\n }\n}\n/**\n * Setup a callback to be fired on the window's `beforeunload` event. This is\n * useful for saving some data to `window.localStorage` just before the page\n * refreshes.\n *\n * Note: The `callback` argument should be a function created with\n * `React.useCallback()`.\n */\nfunction useBeforeUnload(callback, options) {\n let {\n capture\n } = options || {};\n React.useEffect(() => {\n let opts = capture != null ? {\n capture\n } : undefined;\n window.addEventListener(\"beforeunload\", callback, opts);\n return () => {\n window.removeEventListener(\"beforeunload\", callback, opts);\n };\n }, [callback, capture]);\n}\n/**\n * Setup a callback to be fired on the window's `pagehide` event. This is\n * useful for saving some data to `window.localStorage` just before the page\n * refreshes. This event is better supported than beforeunload across browsers.\n *\n * Note: The `callback` argument should be a function created with\n * `React.useCallback()`.\n */\nfunction usePageHide(callback, options) {\n let {\n capture\n } = options || {};\n React.useEffect(() => {\n let opts = capture != null ? {\n capture\n } : undefined;\n window.addEventListener(\"pagehide\", callback, opts);\n return () => {\n window.removeEventListener(\"pagehide\", callback, opts);\n };\n }, [callback, capture]);\n}\n/**\n * Wrapper around useBlocker to show a window.confirm prompt to users instead\n * of building a custom UI with useBlocker.\n *\n * Warning: This has *a lot of rough edges* and behaves very differently (and\n * very incorrectly in some cases) across browsers if user click addition\n * back/forward navigations while the confirm is open. Use at your own risk.\n */\nfunction usePrompt(_ref12) {\n let {\n when,\n message\n } = _ref12;\n let blocker = useBlocker(when);\n React.useEffect(() => {\n if (blocker.state === \"blocked\") {\n let proceed = window.confirm(message);\n if (proceed) {\n // This timeout is needed to avoid a weird \"race\" on POP navigations\n // between the `window.history` revert navigation and the result of\n // `window.confirm`\n setTimeout(blocker.proceed, 0);\n } else {\n blocker.reset();\n }\n }\n }, [blocker, message]);\n React.useEffect(() => {\n if (blocker.state === \"blocked\" && !when) {\n blocker.reset();\n }\n }, [blocker, when]);\n}\n/**\n * Return a boolean indicating if there is an active view transition to the\n * given href. You can use this value to render CSS classes or viewTransitionName\n * styles onto your elements\n *\n * @param href The destination href\n * @param [opts.relative] Relative routing type (\"route\" | \"path\")\n */\nfunction useViewTransitionState(to, opts) {\n if (opts === void 0) {\n opts = {};\n }\n let vtContext = React.useContext(ViewTransitionContext);\n !(vtContext != null) ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, \"`unstable_useViewTransitionState` must be used within `react-router-dom`'s `RouterProvider`. \" + \"Did you accidentally import `RouterProvider` from `react-router`?\") : UNSAFE_invariant(false) : void 0;\n let {\n basename\n } = useDataRouterContext(DataRouterHook.useViewTransitionState);\n let path = useResolvedPath(to, {\n relative: opts.relative\n });\n if (!vtContext.isTransitioning) {\n return false;\n }\n let currentPath = stripBasename(vtContext.currentLocation.pathname, basename) || vtContext.currentLocation.pathname;\n let nextPath = stripBasename(vtContext.nextLocation.pathname, basename) || vtContext.nextLocation.pathname;\n // Transition is active if we're going to or coming from the indicated\n // destination. This ensures that other PUSH navigations that reverse\n // an indicated transition apply. I.e., on the list view you have:\n //\n // <NavLink to=\"/details/1\" unstable_viewTransition>\n //\n // If you click the breadcrumb back to the list view:\n //\n // <NavLink to=\"/list\" unstable_viewTransition>\n //\n // We should apply the transition because it's indicated as active going\n // from /list -> /details/1 and therefore should be active on the reverse\n // (even though this isn't strictly a POP reverse)\n return matchPath(path.pathname, nextPath) != null || matchPath(path.pathname, currentPath) != null;\n}\n//#endregion\n\nexport { BrowserRouter, Form, HashRouter, Link, NavLink, RouterProvider, ScrollRestoration, FetchersContext as UNSAFE_FetchersContext, ViewTransitionContext as UNSAFE_ViewTransitionContext, useScrollRestoration as UNSAFE_useScrollRestoration, createBrowserRouter, createHashRouter, createSearchParams, HistoryRouter as unstable_HistoryRouter, usePrompt as unstable_usePrompt, useViewTransitionState as unstable_useViewTransitionState, useBeforeUnload, useFetcher, useFetchers, useFormAction, useLinkClickHandler, useSearchParams, useSubmit };\n//# sourceMappingURL=index.js.map\n","export default __webpack_public_path__ + \"f42be28a1a26aec2441488502c4494e9.svg\";","import { useDependencies } from \"../../hooks\";\nimport HelpOutlineIcon from \"@mui/icons-material/HelpOutline\";\nimport { Button, useTheme } from \"@mui/material\";\n\nexport const HelpButton = () => {\n const theme = useTheme();\n const { useDiscordInvitation } = useDependencies();\n const { joinDiscord } = useDiscordInvitation();\n\n // @TODO: put the link inside the feature flag management system so it's hot swappable\n return (\n <Button\n variant=\"contained\"\n endIcon={<HelpOutlineIcon color=\"inherit\" fontSize=\"inherit\" />}\n onClick={joinDiscord}\n sx={{\n \"position\": \"relative\",\n \"zIndex\": \"9999\",\n \"backgroundColor\": theme.palette.background.darkPaper,\n \"color\": \"white\",\n \"transition\": \".25s ease-out\",\n \"textTransform\": \"none\",\n \"&:hover\": {\n opacity: \"0.7\",\n backgroundColor: theme.palette.background.darkPaper,\n },\n }}\n >\n Contact us for help\n </Button>\n );\n};\n","import { Box, BoxProps, useTheme } from \"@mui/material\";\n\nexport type MainFooterProps = BoxProps;\n\nexport const MainFooter = ({ children, sx, ...boxProps }: MainFooterProps) => {\n const theme = useTheme();\n return (\n <Box\n paddingY={theme.custom.gutterMargin}\n {...boxProps}\n sx={{\n width: \"100%\",\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"stretch\",\n gap: theme.custom.gutterMargin,\n ...sx,\n }}\n >\n {children}\n </Box>\n );\n};\n","import { useEffect, useRef, useState } from \"react\";\nimport { useDependencies } from \"../../../hooks\";\nimport { UseWhitelistAddressTutorialsHook } from \"./types\";\n\nexport const useWhitelistAddressTutorials: UseWhitelistAddressTutorialsHook = ({\n onClose,\n exchangeId,\n checkWhitelist,\n}) => {\n const { useExtensionAsset, useSupportedExchanges } = useDependencies();\n const { supportedExchangesById } = useSupportedExchanges();\n const [currentPage, setCurrentPage] = useState(0);\n const [status, setStatus] = useState<\"waiting\" | \"success\" | \"failed\">(\"waiting\" as const);\n const [maxPage, setMaxPage] = useState(0);\n const currentPageRef = useRef(currentPage);\n const { asset: mdContent } = useExtensionAsset({\n path: `tutorials/whitelist/${exchangeId}/${exchangeId}.md`,\n onAssetNotFound: () => {\n onClose();\n setCurrentPage(0);\n },\n });\n\n const onNext = () => {\n if (currentPageRef.current === maxPage) {\n onClose();\n setCurrentPage(0);\n } else {\n setCurrentPage((prev) => prev + 1);\n }\n };\n\n const goBack = () => {\n setCurrentPage((prev) => prev - 1);\n };\n\n const checkAddress = () => {\n if (!checkWhitelist) return;\n setStatus(\"waiting\" as const);\n checkWhitelist().then((res) => {\n if (res) {\n setStatus(\"success\" as const);\n } else {\n setStatus(\"failed\" as const);\n }\n });\n };\n\n useEffect(() => {\n checkAddress();\n }, []);\n\n useEffect(() => {\n currentPageRef.current = currentPage;\n }, [currentPage]);\n\n return {\n goBack,\n tutorialType: \"whitelist/\" + exchangeId,\n currentPage,\n ipWhitelistAddresses: supportedExchangesById[exchangeId]?.ipWhitelistAddresses ?? [],\n onNext,\n mdContent: mdContent ?? \"\",\n maxPage,\n setMaxPage,\n setCurrentPage,\n status,\n checkAddress,\n };\n};\n","import { generateUtilityClass, generateUtilityClasses } from '@mui/base';\nexport function getDialogUtilityClass(slot) {\n return generateUtilityClass('MuiDialog', slot);\n}\nconst dialogClasses = generateUtilityClasses('MuiDialog', ['root', 'scrollPaper', 'scrollBody', 'container', 'paper', 'paperScrollPaper', 'paperScrollBody', 'paperWidthFalse', 'paperWidthXs', 'paperWidthSm', 'paperWidthMd', 'paperWidthLg', 'paperWidthXl', 'paperFullWidth', 'paperFullScreen']);\nexport default dialogClasses;","import { createContext } from 'react';\nconst DialogContext = /*#__PURE__*/createContext({});\n\nif (process.env.NODE_ENV !== 'production') {\n DialogContext.displayName = 'DialogContext';\n}\n\nexport default DialogContext;","import _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nconst _excluded = [\"aria-describedby\", \"aria-labelledby\", \"BackdropComponent\", \"BackdropProps\", \"children\", \"className\", \"disableEscapeKeyDown\", \"fullScreen\", \"fullWidth\", \"maxWidth\", \"onBackdropClick\", \"onClose\", \"open\", \"PaperComponent\", \"PaperProps\", \"scroll\", \"TransitionComponent\", \"transitionDuration\", \"TransitionProps\"];\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport { unstable_composeClasses as composeClasses } from '@mui/base';\nimport { unstable_useId as useId } from '@mui/utils';\nimport capitalize from '../utils/capitalize';\nimport Modal from '../Modal';\nimport Fade from '../Fade';\nimport Paper from '../Paper';\nimport useThemeProps from '../styles/useThemeProps';\nimport styled from '../styles/styled';\nimport dialogClasses, { getDialogUtilityClass } from './dialogClasses';\nimport DialogContext from './DialogContext';\nimport Backdrop from '../Backdrop';\nimport useTheme from '../styles/useTheme';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst DialogBackdrop = styled(Backdrop, {\n name: 'MuiDialog',\n slot: 'Backdrop',\n overrides: (props, styles) => styles.backdrop\n})({\n // Improve scrollable dialog support.\n zIndex: -1\n});\n\nconst useUtilityClasses = ownerState => {\n const {\n classes,\n scroll,\n maxWidth,\n fullWidth,\n fullScreen\n } = ownerState;\n const slots = {\n root: ['root'],\n container: ['container', `scroll${capitalize(scroll)}`],\n paper: ['paper', `paperScroll${capitalize(scroll)}`, `paperWidth${capitalize(String(maxWidth))}`, fullWidth && 'paperFullWidth', fullScreen && 'paperFullScreen']\n };\n return composeClasses(slots, getDialogUtilityClass, classes);\n};\n\nconst DialogRoot = styled(Modal, {\n name: 'MuiDialog',\n slot: 'Root',\n overridesResolver: (props, styles) => styles.root\n})({\n '@media print': {\n // Use !important to override the Modal inline-style.\n position: 'absolute !important'\n }\n});\nconst DialogContainer = styled('div', {\n name: 'MuiDialog',\n slot: 'Container',\n overridesResolver: (props, styles) => {\n const {\n ownerState\n } = props;\n return [styles.container, styles[`scroll${capitalize(ownerState.scroll)}`]];\n }\n})(({\n ownerState\n}) => _extends({\n height: '100%',\n '@media print': {\n height: 'auto'\n },\n // We disable the focus ring for mouse, touch and keyboard users.\n outline: 0\n}, ownerState.scroll === 'paper' && {\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center'\n}, ownerState.scroll === 'body' && {\n overflowY: 'auto',\n overflowX: 'hidden',\n textAlign: 'center',\n '&:after': {\n content: '\"\"',\n display: 'inline-block',\n verticalAlign: 'middle',\n height: '100%',\n width: '0'\n }\n}));\nconst DialogPaper = styled(Paper, {\n name: 'MuiDialog',\n slot: 'Paper',\n overridesResolver: (props, styles) => {\n const {\n ownerState\n } = props;\n return [styles.paper, styles[`scrollPaper${capitalize(ownerState.scroll)}`], styles[`paperWidth${capitalize(String(ownerState.maxWidth))}`], ownerState.fullWidth && styles.paperFullWidth, ownerState.fullScreen && styles.paperFullScreen];\n }\n})(({\n theme,\n ownerState\n}) => _extends({\n margin: 32,\n position: 'relative',\n overflowY: 'auto',\n // Fix IE11 issue, to remove at some point.\n '@media print': {\n overflowY: 'visible',\n boxShadow: 'none'\n }\n}, ownerState.scroll === 'paper' && {\n display: 'flex',\n flexDirection: 'column',\n maxHeight: 'calc(100% - 64px)'\n}, ownerState.scroll === 'body' && {\n display: 'inline-block',\n verticalAlign: 'middle',\n textAlign: 'left' // 'initial' doesn't work on IE11\n\n}, !ownerState.maxWidth && {\n maxWidth: 'calc(100% - 64px)'\n}, ownerState.maxWidth === 'xs' && {\n maxWidth: theme.breakpoints.unit === 'px' ? Math.max(theme.breakpoints.values.xs, 444) : `${theme.breakpoints.values.xs}${theme.breakpoints.unit}`,\n [`&.${dialogClasses.paperScrollBody}`]: {\n [theme.breakpoints.down(Math.max(theme.breakpoints.values.xs, 444) + 32 * 2)]: {\n maxWidth: 'calc(100% - 64px)'\n }\n }\n}, ownerState.maxWidth && ownerState.maxWidth !== 'xs' && {\n maxWidth: `${theme.breakpoints.values[ownerState.maxWidth]}${theme.breakpoints.unit}`,\n [`&.${dialogClasses.paperScrollBody}`]: {\n [theme.breakpoints.down(theme.breakpoints.values[ownerState.maxWidth] + 32 * 2)]: {\n maxWidth: 'calc(100% - 64px)'\n }\n }\n}, ownerState.fullWidth && {\n width: 'calc(100% - 64px)'\n}, ownerState.fullScreen && {\n margin: 0,\n width: '100%',\n maxWidth: '100%',\n height: '100%',\n maxHeight: 'none',\n borderRadius: 0,\n [`&.${dialogClasses.paperScrollBody}`]: {\n margin: 0,\n maxWidth: '100%'\n }\n}));\n/**\n * Dialogs are overlaid modal paper based components with a backdrop.\n */\n\nconst Dialog = /*#__PURE__*/React.forwardRef(function Dialog(inProps, ref) {\n const props = useThemeProps({\n props: inProps,\n name: 'MuiDialog'\n });\n const theme = useTheme();\n const defaultTransitionDuration = {\n enter: theme.transitions.duration.enteringScreen,\n exit: theme.transitions.duration.leavingScreen\n };\n\n const {\n 'aria-describedby': ariaDescribedby,\n 'aria-labelledby': ariaLabelledbyProp,\n BackdropComponent,\n BackdropProps,\n children,\n className,\n disableEscapeKeyDown = false,\n fullScreen = false,\n fullWidth = false,\n maxWidth = 'sm',\n onBackdropClick,\n onClose,\n open,\n PaperComponent = Paper,\n PaperProps = {},\n scroll = 'paper',\n TransitionComponent = Fade,\n transitionDuration = defaultTransitionDuration,\n TransitionProps\n } = props,\n other = _objectWithoutPropertiesLoose(props, _excluded);\n\n const ownerState = _extends({}, props, {\n disableEscapeKeyDown,\n fullScreen,\n fullWidth,\n maxWidth,\n scroll\n });\n\n const classes = useUtilityClasses(ownerState);\n const backdropClick = React.useRef();\n\n const handleMouseDown = event => {\n // We don't want to close the dialog when clicking the dialog content.\n // Make sure the event starts and ends on the same DOM element.\n backdropClick.current = event.target === event.currentTarget;\n };\n\n const handleBackdropClick = event => {\n // Ignore the events not coming from the \"backdrop\".\n if (!backdropClick.current) {\n return;\n }\n\n backdropClick.current = null;\n\n if (onBackdropClick) {\n onBackdropClick(event);\n }\n\n if (onClose) {\n onClose(event, 'backdropClick');\n }\n };\n\n const ariaLabelledby = useId(ariaLabelledbyProp);\n const dialogContextValue = React.useMemo(() => {\n return {\n titleId: ariaLabelledby\n };\n }, [ariaLabelledby]);\n return /*#__PURE__*/_jsx(DialogRoot, _extends({\n className: clsx(classes.root, className),\n closeAfterTransition: true,\n components: {\n Backdrop: DialogBackdrop\n },\n componentsProps: {\n backdrop: _extends({\n transitionDuration,\n as: BackdropComponent\n }, BackdropProps)\n },\n disableEscapeKeyDown: disableEscapeKeyDown,\n onClose: onClose,\n open: open,\n ref: ref,\n onClick: handleBackdropClick,\n ownerState: ownerState\n }, other, {\n children: /*#__PURE__*/_jsx(TransitionComponent, _extends({\n appear: true,\n in: open,\n timeout: transitionDuration,\n role: \"presentation\"\n }, TransitionProps, {\n children: /*#__PURE__*/_jsx(DialogContainer, {\n className: clsx(classes.container),\n onMouseDown: handleMouseDown,\n ownerState: ownerState,\n children: /*#__PURE__*/_jsx(DialogPaper, _extends({\n as: PaperComponent,\n elevation: 24,\n role: \"dialog\",\n \"aria-describedby\": ariaDescribedby,\n \"aria-labelledby\": ariaLabelledby\n }, PaperProps, {\n className: clsx(classes.paper, PaperProps.className),\n ownerState: ownerState,\n children: /*#__PURE__*/_jsx(DialogContext.Provider, {\n value: dialogContextValue,\n children: children\n })\n }))\n })\n }))\n }));\n});\nprocess.env.NODE_ENV !== \"production\" ? Dialog.propTypes\n/* remove-proptypes */\n= {\n // ----------------------------- Warning --------------------------------\n // | These PropTypes are generated from the TypeScript type definitions |\n // | To update them edit the d.ts file and run \"yarn proptypes\" |\n // ----------------------------------------------------------------------\n\n /**\n * The id(s) of the element(s) that describe the dialog.\n */\n 'aria-describedby': PropTypes.string,\n\n /**\n * The id(s) of the element(s) that label the dialog.\n */\n 'aria-labelledby': PropTypes.string,\n\n /**\n * A backdrop component. This prop enables custom backdrop rendering.\n * @deprecated Use `components.Backdrop` instead. While this prop currently works, it will be removed in the next major version.\n * Use the `components.Backdrop` prop to make your application ready for the next version of Material UI.\n * @default styled(Backdrop, {\n * name: 'MuiModal',\n * slot: 'Backdrop',\n * overridesResolver: (props, styles) => {\n * return styles.backdrop;\n * },\n * })({\n * zIndex: -1,\n * })\n */\n BackdropComponent: PropTypes.elementType,\n\n /**\n * @ignore\n */\n BackdropProps: PropTypes.object,\n\n /**\n * Dialog children, usually the included sub-components.\n */\n children: PropTypes.node,\n\n /**\n * Override or extend the styles applied to the component.\n */\n classes: PropTypes.object,\n\n /**\n * @ignore\n */\n className: PropTypes.string,\n\n /**\n * If `true`, hitting escape will not fire the `onClose` callback.\n * @default false\n */\n disableEscapeKeyDown: PropTypes.bool,\n\n /**\n * If `true`, the dialog is full-screen.\n * @default false\n */\n fullScreen: PropTypes.bool,\n\n /**\n * If `true`, the dialog stretches to `maxWidth`.\n *\n * Notice that the dialog width grow is limited by the default margin.\n * @default false\n */\n fullWidth: PropTypes.bool,\n\n /**\n * Determine the max-width of the dialog.\n * The dialog width grows with the size of the screen.\n * Set to `false` to disable `maxWidth`.\n * @default 'sm'\n */\n maxWidth: PropTypes\n /* @typescript-to-proptypes-ignore */\n .oneOfType([PropTypes.oneOf(['xs', 'sm', 'md', 'lg', 'xl', false]), PropTypes.string]),\n\n /**\n * Callback fired when the backdrop is clicked.\n * @deprecated Use the `onClose` prop with the `reason` argument to handle the `backdropClick` events.\n */\n onBackdropClick: PropTypes.func,\n\n /**\n * Callback fired when the component requests to be closed.\n *\n * @param {object} event The event source of the callback.\n * @param {string} reason Can be: `\"escapeKeyDown\"`, `\"backdropClick\"`.\n */\n onClose: PropTypes.func,\n\n /**\n * If `true`, the component is shown.\n */\n open: PropTypes.bool.isRequired,\n\n /**\n * The component used to render the body of the dialog.\n * @default Paper\n */\n PaperComponent: PropTypes.elementType,\n\n /**\n * Props applied to the [`Paper`](/material-ui/api/paper/) element.\n * @default {}\n */\n PaperProps: PropTypes.object,\n\n /**\n * Determine the container for scrolling the dialog.\n * @default 'paper'\n */\n scroll: PropTypes.oneOf(['body', 'paper']),\n\n /**\n * The system prop that allows defining system overrides as well as additional CSS styles.\n */\n sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),\n\n /**\n * The component used for the transition.\n * [Follow this guide](/material-ui/transitions/#transitioncomponent-prop) to learn more about the requirements for this component.\n * @default Fade\n */\n TransitionComponent: PropTypes.elementType,\n\n /**\n * The duration for the transition, in milliseconds.\n * You may specify a single timeout for all transitions, or individually with an object.\n * @default {\n * enter: theme.transitions.duration.enteringScreen,\n * exit: theme.transitions.duration.leavingScreen,\n * }\n */\n transitionDuration: PropTypes.oneOfType([PropTypes.number, PropTypes.shape({\n appear: PropTypes.number,\n enter: PropTypes.number,\n exit: PropTypes.number\n })]),\n\n /**\n * Props applied to the transition element.\n * By default, the element is based on this [`Transition`](http://reactcommunity.org/react-transition-group/transition/) component.\n */\n TransitionProps: PropTypes.object\n} : void 0;\nexport default Dialog;","import { useEffect, useMemo } from \"react\";\nimport { Button } from \"@cede/ds\";\nimport { ApiPermissions } from \"@cede/types\";\nimport { CEDE_CEXS, CEDE_CEX_LABELS } from \"@cede/utils\";\nimport { useDependencies } from \"../../hooks\";\nimport { TutorialReader } from \"../Tutorial\";\nimport { useWhitelistAddressTutorials } from \"./Tutorials/useWhitelistAddressTutorials\";\nimport { WhitelistAddressTutorialProps } from \"./types\";\nimport { Box, Dialog, useTheme } from \"@mui/material\";\n\nconst EMPTY_PERMISSIONS: ApiPermissions[] = [];\n\nexport const WhitelistAddressTutorial = ({\n name,\n address,\n isOpen,\n onClose,\n exchangeId,\n checkWhitelist,\n asset,\n tokenSymbol,\n network,\n}: WhitelistAddressTutorialProps) => {\n const theme = useTheme();\n const { useSupportedExchanges } = useDependencies();\n const { supportedExchangesById } = useSupportedExchanges();\n const { currentPage, tutorialType, mdContent, setMaxPage, onNext, maxPage, setCurrentPage, status, checkAddress } =\n useWhitelistAddressTutorials({\n checkWhitelist,\n onClose,\n exchangeId,\n });\n\n const onCloseModal = () => {\n onClose();\n setCurrentPage(0);\n };\n\n useEffect(() => {\n if (currentPage > 0 && currentPage === maxPage) {\n checkAddress();\n }\n }, [currentPage, maxPage]);\n\n const setupButtons = () => {\n const retry = currentPage === maxPage && status === \"failed\";\n const end = currentPage === maxPage;\n if (retry) {\n return (\n <Box\n display=\"flex\"\n flexDirection={\"column\"}\n justifyContent=\"space-between\"\n alignItems=\"center\"\n width=\"100%\"\n gap={\"10px\"}\n >\n <Button form=\"defi-form\" size=\"large\" type=\"button\" variant={\"contained\"} fullWidth onClick={checkAddress}>\n Retry\n </Button>\n <Button form=\"defi-form\" size=\"large\" type=\"button\" variant={\"text\"} fullWidth onClick={onCloseModal}>\n Close\n </Button>\n </Box>\n );\n }\n\n if (end) {\n return (\n <Box display=\"flex\" justifyContent=\"space-between\" alignItems=\"center\" width=\"100%\" gap={\"10px\"}>\n <Button type=\"button\" form=\"defi-form\" size=\"large\" variant={\"contained\"} fullWidth onClick={onCloseModal}>\n Finish\n </Button>\n </Box>\n );\n } else {\n return (\n <Box\n display=\"flex\"\n flexDirection={\"column\"}\n justifyContent=\"space-between\"\n alignItems=\"center\"\n width=\"100%\"\n gap={\"10px\"}\n >\n <Button form=\"defi-form\" size=\"large\" type=\"button\" variant={\"contained\"} fullWidth onClick={onNext}>\n Next\n </Button>\n <Button form=\"defi-form\" size=\"large\" type=\"button\" variant={\"text\"} fullWidth onClick={onCloseModal}>\n Close\n </Button>\n </Box>\n );\n }\n };\n\n const getCustomHref = () => {\n let addressManagementUrl = supportedExchangesById[exchangeId]?.addressManagementUrl;\n if (!addressManagementUrl) return \"\";\n if (exchangeId === CEDE_CEXS.KRAKEN) addressManagementUrl = addressManagementUrl.concat(asset ? asset : \"BTC\");\n return addressManagementUrl;\n };\n\n const tutorialReaderData = useMemo(() => {\n return {\n customHref: getCustomHref(),\n name,\n address,\n status,\n ...(tokenSymbol && { tokenSymbol }),\n ...(network && { network }),\n };\n }, [name, address, status, network, tokenSymbol]);\n\n return (\n <Dialog\n open={isOpen}\n sx={{\n \"position\": \"absolute\",\n \"maxHeight\": \"none\",\n \"zIndex\": theme.custom.zIndex.extraLayer,\n \"& .MuiDialog-container\": {\n alignItems: \"flex-start\",\n overflow: \"hidden\",\n },\n }}\n PaperProps={{\n style: {\n position: \"relative\",\n backgroundColor: \"transparent\",\n backgroundImage: \"none\",\n boxShadow: \"none\",\n height: \"100%\",\n maxHeight: `calc(100% - ${theme.custom.bigGutterMargin} * 3)`,\n },\n }}\n container={() => document.getElementById(\"app-body\")}\n fullWidth={true}\n disablePortal\n onClose={onCloseModal}\n >\n <Box\n width={\"100%\"}\n height=\"100%\"\n borderRadius={theme.custom.buttonDefaultRadius}\n position=\"relative\"\n p={theme.custom.gutterMargin}\n sx={{\n background: theme.palette.background.paper,\n overflowX: \"auto\",\n scrollBehavior: \"smooth\",\n }}\n >\n <Box\n flex={\"1\"}\n paddingTop={theme.custom.gutterMargin}\n width=\"100%\"\n mb={theme.custom.gutterMargin}\n sx={{\n overflow: \"auto\",\n }}\n >\n <TutorialReader\n currentPage={currentPage}\n folder={tutorialType}\n mdContent={mdContent}\n setMaxPage={setMaxPage}\n permissions={EMPTY_PERMISSIONS}\n accountPermissions={EMPTY_PERMISSIONS}\n exchangeId={CEDE_CEX_LABELS[exchangeId] || exchangeId}\n data={tutorialReaderData}\n />\n </Box>\n\n {setupButtons()}\n </Box>\n </Dialog>\n );\n};\n","import { useMemo } from \"react\";\nimport { ApiPermissions } from \"@cede/types\";\nimport { CEDE_CEXS, CEDE_CEX_LABELS } from \"@cede/utils\";\nimport { TutorialReader } from \"../Tutorial\";\nimport { useWhitelistAddressTutorials } from \"./Tutorials/useWhitelistAddressTutorials\";\nimport { WhitelistAddressTutorialProps } from \"./types\";\nimport { Box, useTheme } from \"@mui/material\";\n\nconst EMPTY_PERMISSIONS: ApiPermissions[] = [];\n\nexport const FullPageWhitelistTutorial = ({\n name,\n address,\n onClose,\n exchangeId,\n checkWhitelist,\n asset,\n tokenSymbol,\n network,\n}: WhitelistAddressTutorialProps) => {\n const theme = useTheme();\n\n const { tutorialType, mdContent, status } = useWhitelistAddressTutorials({\n checkWhitelist,\n onClose,\n exchangeId,\n });\n\n const getCustomHref = () => {\n switch (exchangeId) {\n case CEDE_CEXS.BINANCE:\n return \"https://www.binance.com/en/my/security/address-management\";\n case CEDE_CEXS.OKX:\n return \"https://www.okx.com/balance/withdrawal\";\n case CEDE_CEXS.BITGET:\n return \"https://www.bitget.com/asset/address\";\n case CEDE_CEXS.BYBIT:\n return \"https://www.bybit.com/en/login?redirect_url=https://www.bybit.com/user/assets/money-address\";\n case CEDE_CEXS.KRAKEN:\n return `https://www.kraken.com/u/funding/withdraw?asset=${asset ? asset : \"BTC\"}`;\n case CEDE_CEXS.HTX:\n return \"https://www.htx.com/en-us/finance/address/\";\n case CEDE_CEXS.GATEIO:\n return \"https://www.gate.io/myaccount/withdraw_address\";\n case CEDE_CEXS.KUCOIN:\n return \"https://www.kucoin.com/withdraw-addr-manage\";\n case CEDE_CEXS.MEXC:\n return `https://www.mexc.com/user/withdraw-address?currency==${asset ? asset : \"BTC\"}`;\n default:\n return \"\";\n }\n };\n\n const tutorialReaderData = useMemo(() => {\n return {\n customHref: getCustomHref(),\n name,\n address,\n status,\n ...(tokenSymbol && { tokenSymbol }),\n ...(network && { network }),\n };\n }, [name, address, status, network, tokenSymbol]);\n\n return (\n <Box\n display={\"flex\"}\n flexDirection=\"column\"\n flex={\"1\"}\n paddingBottom={theme.custom.gutterMargin}\n height=\"100%\"\n sx={{\n overflowY: \"scroll\",\n }}\n >\n <TutorialReader\n folder={tutorialType}\n mdContent={mdContent}\n permissions={EMPTY_PERMISSIONS}\n accountPermissions={EMPTY_PERMISSIONS}\n exchangeId={CEDE_CEX_LABELS[exchangeId] || exchangeId}\n data={tutorialReaderData}\n />\n </Box>\n );\n};\n","import { Button } from \"@cede/ds\";\nimport { userFacingMessages } from \"@cede/types\";\nimport { cropTextInMiddle } from \"@cede/utils\";\nimport { Box, Fade, Modal, Typography, useTheme } from \"@mui/material\";\n\nexport type TradeSendConfirmModalProps = {\n id?: string;\n open: boolean;\n setOpen: (open: boolean) => void;\n tradePath: string;\n destinationCurrency: string;\n recipientAddress: string;\n network: string;\n onConfirm: () => void;\n};\n\nexport function TradeSendConfirmModal({\n id,\n open,\n setOpen,\n tradePath,\n destinationCurrency,\n recipientAddress,\n network,\n onConfirm,\n}: TradeSendConfirmModalProps) {\n const theme = useTheme();\n\n return (\n <Modal\n open={open}\n onClose={() => setOpen(false)}\n sx={{\n position: \"absolute\",\n }}\n closeAfterTransition\n disablePortal={true}\n >\n <Fade in={open} timeout={300}>\n <Box\n data-testid={`${id || \"\"}-permission-changed-modal`}\n sx={{\n \"width\": `calc(${theme.custom.storeSize.width} * 0.9)`,\n \"height\": \"max-content\",\n \"padding\": theme.custom.gutterMargin,\n \"position\": \"absolute\",\n \"top\": \"50%\",\n \"left\": \"50%\",\n \"transform\": \"translate(-50%, -50%)\",\n \"background\": theme.palette.background.darkPaper,\n \"borderRadius\": theme.custom.mediumBoxRadius,\n \"display\": \"flex\",\n \"flexDirection\": \"column\",\n \"alignItems\": \"center\",\n \"justifyContent\": \"center\",\n \"gap\": theme.custom.gutterMargin,\n \":focus\": {\n outline: \"none\",\n },\n }}\n >\n <Box\n sx={{\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n justifyContent: \"center\",\n gap: theme.custom.smallGutterMargin,\n }}\n >\n <Typography fontSize={theme.typography.h2.fontSize}>Confirmation</Typography>\n <Typography color={theme.palette.text.disabled}>\n {userFacingMessages.WIDGETS.TRADE_SEND.ACTIONS_LABEL}\n </Typography>\n </Box>\n <Typography sx={{ marginTop: theme.custom.smallGutterMargin, textAlign: \"left\" }} component=\"ul\">\n <li>{`${tradePath} trade`}</li>\n <li>\n {userFacingMessages.WIDGETS.TRADE_SEND.WITHDRAW_CURRENCY(\n destinationCurrency,\n cropTextInMiddle(recipientAddress, 8),\n network,\n )}\n </li>\n </Typography>\n <Typography sx={{ marginTop: theme.custom.smallGutterMargin }}>\n {userFacingMessages.WIDGETS.TRADE_SEND.RECEIVE_CURRENCY(destinationCurrency)}\n </Typography>\n <Button\n variant=\"contained\"\n height=\"tall\"\n fullWidth\n onClick={() => {\n onConfirm();\n setOpen(false);\n }}\n >\n {userFacingMessages.WIDGETS.TRADE_SEND.MODAL_CONFIRM}\n </Button>\n </Box>\n </Fade>\n </Modal>\n );\n}\n","import { formatBalance } from \"@cede/utils\";\nimport { useDependencies } from \"../../hooks/useDependencies\";\nimport { WithdrawMinAmountProps } from \"./types\";\nimport { Link, Skeleton, Typography, useTheme } from \"@mui/material\";\n\nexport const WithdrawMinAmount = ({ controller }: WithdrawMinAmountProps) => {\n const { useSupportedExchanges } = useDependencies();\n const { supportedExchangesById } = useSupportedExchanges();\n const theme = useTheme();\n\n const {\n form: { currency, fromAccount },\n } = controller;\n\n let amountValue: JSX.Element | null = null;\n\n if (controller.minAmount) {\n amountValue = (\n <>\n {formatBalance(controller.minAmount)} {currency?.value.toUpperCase()}\n </>\n );\n }\n\n if (\n !controller.minAmount &&\n fromAccount?.cexValue &&\n supportedExchangesById &&\n supportedExchangesById[fromAccount.cexValue]?.minimumWithdrawalUrl\n ) {\n amountValue = (\n <Link\n data-testid={\"withdrawmin-link\"}\n sx={{ textDecoration: \"none\" }}\n target=\"_blank\"\n href={supportedExchangesById[fromAccount.cexValue]?.minimumWithdrawalUrl}\n >\n see here\n </Link>\n );\n }\n\n return amountValue || (controller.minAmountIsLoading && controller.form.network && controller.form.currency) ? (\n <Typography paddingLeft={theme.custom.smallGutterMargin} data-testid={\"withdrawmin-value\"} variant={\"caption\"}>\n Minimum amount:{\" \"}\n {controller.minAmountIsLoading ? (\n <Skeleton\n sx={{\n display: \"inline-block\",\n }}\n width={30}\n height={20}\n />\n ) : (\n amountValue\n )}\n </Typography>\n ) : null;\n};\n","\"use client\";\n\nimport createSvgIcon from './utils/createSvgIcon';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon( /*#__PURE__*/_jsx(\"path\", {\n d: \"M3 17.25V21h3.75L17.81 9.94l-3.75-3.75zM20.71 7.04c.39-.39.39-1.02 0-1.41l-2.34-2.34a.9959.9959 0 0 0-1.41 0l-1.83 1.83 3.75 3.75z\"\n}), 'Create');","\"use client\";\n\nimport createSvgIcon from './utils/createSvgIcon';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon( /*#__PURE__*/_jsx(\"path\", {\n d: \"M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6z\"\n}), 'Add');","\"use client\";\n\nimport createSvgIcon from './utils/createSvgIcon';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon( /*#__PURE__*/_jsx(\"path\", {\n d: \"M6.99 11 3 15l3.99 4v-3H14v-2H6.99zM21 9l-3.99-4v3H10v2h7.01v3z\"\n}), 'SwapHoriz');","import * as React from 'react';\nimport createSvgIcon from '../../utils/createSvgIcon';\n/**\n * @ignore - internal component.\n */\n\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon( /*#__PURE__*/_jsx(\"path\", {\n d: \"M19 5v14H5V5h14m0-2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2z\"\n}), 'CheckBoxOutlineBlank');","import * as React from 'react';\nimport createSvgIcon from '../../utils/createSvgIcon';\n/**\n * @ignore - internal component.\n */\n\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon( /*#__PURE__*/_jsx(\"path\", {\n d: \"M19 3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.11 0 2-.9 2-2V5c0-1.1-.89-2-2-2zm-9 14l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z\"\n}), 'CheckBox');","import * as React from 'react';\nimport createSvgIcon from '../../utils/createSvgIcon';\n/**\n * @ignore - internal component.\n */\n\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon( /*#__PURE__*/_jsx(\"path\", {\n d: \"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-2 10H7v-2h10v2z\"\n}), 'IndeterminateCheckBox');","import { generateUtilityClass, generateUtilityClasses } from '@mui/base';\nexport function getCheckboxUtilityClass(slot) {\n return generateUtilityClass('MuiCheckbox', slot);\n}\nconst checkboxClasses = generateUtilityClasses('MuiCheckbox', ['root', 'checked', 'disabled', 'indeterminate', 'colorPrimary', 'colorSecondary']);\nexport default checkboxClasses;","import _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nconst _excluded = [\"checkedIcon\", \"color\", \"icon\", \"indeterminate\", \"indeterminateIcon\", \"inputProps\", \"size\"];\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport { refType } from '@mui/utils';\nimport { unstable_composeClasses as composeClasses } from '@mui/base';\nimport { alpha } from '@mui/system';\nimport SwitchBase from '../internal/SwitchBase';\nimport CheckBoxOutlineBlankIcon from '../internal/svg-icons/CheckBoxOutlineBlank';\nimport CheckBoxIcon from '../internal/svg-icons/CheckBox';\nimport IndeterminateCheckBoxIcon from '../internal/svg-icons/IndeterminateCheckBox';\nimport capitalize from '../utils/capitalize';\nimport useThemeProps from '../styles/useThemeProps';\nimport styled, { rootShouldForwardProp } from '../styles/styled';\nimport checkboxClasses, { getCheckboxUtilityClass } from './checkboxClasses';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\n\nconst useUtilityClasses = ownerState => {\n const {\n classes,\n indeterminate,\n color\n } = ownerState;\n const slots = {\n root: ['root', indeterminate && 'indeterminate', `color${capitalize(color)}`]\n };\n const composedClasses = composeClasses(slots, getCheckboxUtilityClass, classes);\n return _extends({}, classes, composedClasses);\n};\n\nconst CheckboxRoot = styled(SwitchBase, {\n shouldForwardProp: prop => rootShouldForwardProp(prop) || prop === 'classes',\n name: 'MuiCheckbox',\n slot: 'Root',\n overridesResolver: (props, styles) => {\n const {\n ownerState\n } = props;\n return [styles.root, ownerState.indeterminate && styles.indeterminate, ownerState.color !== 'default' && styles[`color${capitalize(ownerState.color)}`]];\n }\n})(({\n theme,\n ownerState\n}) => _extends({\n color: (theme.vars || theme).palette.text.secondary\n}, !ownerState.disableRipple && {\n '&:hover': {\n backgroundColor: theme.vars ? `rgba(${ownerState.color === 'default' ? theme.vars.palette.action.activeChannel : theme.vars.palette.primary.mainChannel} / ${theme.vars.palette.action.hoverOpacity})` : alpha(ownerState.color === 'default' ? theme.palette.action.active : theme.palette[ownerState.color].main, theme.palette.action.hoverOpacity),\n // Reset on touch devices, it doesn't add specificity\n '@media (hover: none)': {\n backgroundColor: 'transparent'\n }\n }\n}, ownerState.color !== 'default' && {\n [`&.${checkboxClasses.checked}, &.${checkboxClasses.indeterminate}`]: {\n color: (theme.vars || theme).palette[ownerState.color].main\n },\n [`&.${checkboxClasses.disabled}`]: {\n color: (theme.vars || theme).palette.action.disabled\n }\n}));\n\nconst defaultCheckedIcon = /*#__PURE__*/_jsx(CheckBoxIcon, {});\n\nconst defaultIcon = /*#__PURE__*/_jsx(CheckBoxOutlineBlankIcon, {});\n\nconst defaultIndeterminateIcon = /*#__PURE__*/_jsx(IndeterminateCheckBoxIcon, {});\n\nconst Checkbox = /*#__PURE__*/React.forwardRef(function Checkbox(inProps, ref) {\n var _icon$props$fontSize, _indeterminateIcon$pr;\n\n const props = useThemeProps({\n props: inProps,\n name: 'MuiCheckbox'\n });\n\n const {\n checkedIcon = defaultCheckedIcon,\n color = 'primary',\n icon: iconProp = defaultIcon,\n indeterminate = false,\n indeterminateIcon: indeterminateIconProp = defaultIndeterminateIcon,\n inputProps,\n size = 'medium'\n } = props,\n other = _objectWithoutPropertiesLoose(props, _excluded);\n\n const icon = indeterminate ? indeterminateIconProp : iconProp;\n const indeterminateIcon = indeterminate ? indeterminateIconProp : checkedIcon;\n\n const ownerState = _extends({}, props, {\n color,\n indeterminate,\n size\n });\n\n const classes = useUtilityClasses(ownerState);\n return /*#__PURE__*/_jsx(CheckboxRoot, _extends({\n type: \"checkbox\",\n inputProps: _extends({\n 'data-indeterminate': indeterminate\n }, inputProps),\n icon: /*#__PURE__*/React.cloneElement(icon, {\n fontSize: (_icon$props$fontSize = icon.props.fontSize) != null ? _icon$props$fontSize : size\n }),\n checkedIcon: /*#__PURE__*/React.cloneElement(indeterminateIcon, {\n fontSize: (_indeterminateIcon$pr = indeterminateIcon.props.fontSize) != null ? _indeterminateIcon$pr : size\n }),\n ownerState: ownerState,\n ref: ref\n }, other, {\n classes: classes\n }));\n});\nprocess.env.NODE_ENV !== \"production\" ? Checkbox.propTypes\n/* remove-proptypes */\n= {\n // ----------------------------- Warning --------------------------------\n // | These PropTypes are generated from the TypeScript type definitions |\n // | To update them edit the d.ts file and run \"yarn proptypes\" |\n // ----------------------------------------------------------------------\n\n /**\n * If `true`, the component is checked.\n */\n checked: PropTypes.bool,\n\n /**\n * The icon to display when the component is checked.\n * @default <CheckBoxIcon />\n */\n checkedIcon: PropTypes.node,\n\n /**\n * Override or extend the styles applied to the component.\n */\n classes: PropTypes.object,\n\n /**\n * The color of the component.\n * It supports both default and custom theme colors, which can be added as shown in the\n * [palette customization guide](https://mui.com/material-ui/customization/palette/#adding-new-colors).\n * @default 'primary'\n */\n color: PropTypes\n /* @typescript-to-proptypes-ignore */\n .oneOfType([PropTypes.oneOf(['default', 'primary', 'secondary', 'error', 'info', 'success', 'warning']), PropTypes.string]),\n\n /**\n * The default checked state. Use when the component is not controlled.\n */\n defaultChecked: PropTypes.bool,\n\n /**\n * If `true`, the component is disabled.\n */\n disabled: PropTypes.bool,\n\n /**\n * If `true`, the ripple effect is disabled.\n */\n disableRipple: PropTypes.bool,\n\n /**\n * The icon to display when the component is unchecked.\n * @default <CheckBoxOutlineBlankIcon />\n */\n icon: PropTypes.node,\n\n /**\n * The id of the `input` element.\n */\n id: PropTypes.string,\n\n /**\n * If `true`, the component appears indeterminate.\n * This does not set the native input element to indeterminate due\n * to inconsistent behavior across browsers.\n * However, we set a `data-indeterminate` attribute on the `input`.\n * @default false\n */\n indeterminate: PropTypes.bool,\n\n /**\n * The icon to display when the component is indeterminate.\n * @default <IndeterminateCheckBoxIcon />\n */\n indeterminateIcon: PropTypes.node,\n\n /**\n * [Attributes](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#Attributes) applied to the `input` element.\n */\n inputProps: PropTypes.object,\n\n /**\n * Pass a ref to the `input` element.\n */\n inputRef: refType,\n\n /**\n * Callback fired when the state is changed.\n *\n * @param {React.ChangeEvent<HTMLInputElement>} event The event source of the callback.\n * You can pull out the new checked state by accessing `event.target.checked` (boolean).\n */\n onChange: PropTypes.func,\n\n /**\n * If `true`, the `input` element is required.\n */\n required: PropTypes.bool,\n\n /**\n * The size of the component.\n * `small` is equivalent to the dense checkbox styling.\n * @default 'medium'\n */\n size: PropTypes\n /* @typescript-to-proptypes-ignore */\n .oneOfType([PropTypes.oneOf(['medium', 'small']), PropTypes.string]),\n\n /**\n * The system prop that allows defining system overrides as well as additional CSS styles.\n */\n sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),\n\n /**\n * The value of the component. The DOM API casts this to a string.\n * The browser uses \"on\" as the default value.\n */\n value: PropTypes.any\n} : void 0;\nexport default Checkbox;","import chromeWebStore from \"../../assets/chromeWebStore.svg\";\nimport { useMemo } from \"react\";\nimport {\n AddNewCexButton,\n Button,\n DropListWithIconModal,\n EmptyState,\n EmptyStateTypeEnum,\n ResizeFieldsWrapper,\n TextFieldWithIcon,\n ValidationDropList,\n ValidationTextFieldWithIcon,\n} from \"@cede/ds\";\nimport { DropListWithIconItem, ViewEnvironment, userFacingMessages } from \"@cede/types\";\nimport { CEDE_CEX_LABELS, cropTextInMiddle } from \"@cede/utils\";\nimport { useDependencies } from \"../../hooks\";\nimport { HelpButton } from \"../HelpButton/HelpButton\";\nimport { MainFooter } from \"../MainFooter/MainFooter\";\nimport { FullPageWhitelistTutorial, WhitelistAddressTutorial } from \"../WhitelistAddressTutorial\";\nimport { TradeSendConfirmModal } from \"./TradeSendConfirmModal\";\nimport { WithdrawMinAmount } from \"./WithdrawMinAmount\";\nimport { getTradePathLabel } from \"./hooks/utils\";\nimport { AddressInputType, PresentationalSendProps } from \"./types\";\nimport { Add, Create, SwapHoriz } from \"@mui/icons-material\";\nimport { Box, Checkbox, Link, Skeleton, Tooltip, Typography, alpha, useMediaQuery, useTheme } from \"@mui/material\";\n\nconst unfocus = () => {\n document.activeElement instanceof HTMLElement ? document.activeElement.blur() : undefined;\n};\n\nexport const PresentationalSend = ({ controller, disableAddressBook = false }: PresentationalSendProps) => {\n const { useViewEnvironment } = useDependencies();\n const { environment } = useViewEnvironment();\n\n const isWidget = environment === ViewEnvironment.WIDGET;\n\n const theme = useTheme();\n const isMobile = useMediaQuery(theme.breakpoints.down(\"md\"));\n const {\n dispatchInput,\n validateAddress,\n setMaxAssetValue,\n submit,\n validateAssetValue,\n form,\n isValid,\n droplistAddressBook,\n droplistWhitelistedAddresses,\n fromAccounts,\n currencies,\n networks,\n warningMessage,\n networksAreLoading,\n currenciesAreLoading,\n fiatCurrency,\n isOauth,\n addressInputType,\n isWhitelistedAddressesLoading,\n displayWhitelistTooltip,\n setTutorialIsOpen,\n handleAddAddressManually,\n areAccountsLoading,\n toAccounts,\n switchSelectedCexs,\n addCexRedirect,\n isDefiTab,\n isBetweenCexTab,\n disabledCexText,\n shouldDisableCex,\n validateAssetValueRef,\n setIsRecipientInputFocused,\n droplistDestinationTokens,\n droplistDestinationTokensAreLoading,\n droplistDestinationTokensError,\n shouldUseTradeAndSend,\n recipientAddress,\n isTutorialCheckboxChecked,\n setIsTutorialCheckboxChecked,\n isDemo,\n refValue,\n formErrors,\n } = controller;\n\n const FormErrors = () => {\n const errorKeys = Object.keys(formErrors);\n\n if (!errorKeys.length) {\n return null;\n }\n\n return (\n <Box\n display={\"flex\"}\n flexDirection={\"column\"}\n sx={{\n background: alpha(theme.palette.error.main, 0.3),\n border: `2px solid ${theme.palette.error.main}`,\n borderRadius: theme.custom.defaultBoxRadius,\n padding: theme.spacing(),\n }}\n >\n {errorKeys.map((key) => {\n return (\n <Typography key={key} color={theme.palette.error.main} textAlign=\"left\">\n {formErrors[key]}\n </Typography>\n );\n })}\n </Box>\n );\n };\n\n const memoizedCurrencyNetworkFields = useMemo(\n () => (\n <Box\n sx={{\n width: \"100%\",\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"flex-start\",\n }}\n >\n <Box\n sx={{\n flex: 1,\n }}\n marginRight={theme.custom.gutterMargin}\n data-testid={\"currency-network\"}\n >\n <DropListWithIconModal\n inputProps={{ label: \"Currency\", id: \"select-currency\", placeholder: \"Currency\" }}\n items={currencies}\n value={form.currency}\n emptyMessage={\"No currencies available\"}\n onChange={(value) => {\n dispatchInput({ field: \"currency\", value });\n }}\n title={\"Select Currency\"}\n loading={currenciesAreLoading}\n disableModalPortal={true}\n onClear={() => dispatchInput({ field: \"currency\", value: null })}\n bottomElement={\n isDemo ? (\n <Box display={\"flex\"} flexDirection={\"column\"} flex={1} justifyContent={\"center\"} alignItems={\"center\"}>\n <Typography\n paddingX={theme.custom.gutterMargin}\n variant=\"body1\"\n color={theme.palette.cedePrimaryColor}\n textAlign={\"center\"}\n fontWeight={theme.typography.fontWeightBold}\n >\n Connect now your CEX account, to access more than +2700 tokens.\n </Typography>\n <Box\n component=\"img\"\n sx={{\n \"height\": \"67px\",\n \"width\": \"220px\",\n \"backgroundColor\": \"#FFFFFF\",\n \"borderRadius\": \"13px\",\n \"paddingX\": \"10px\",\n \"cursor\": \"pointer\",\n \"transition\": \"box-shadow 0.3s ease-in-out\",\n \"boxShadow\": \"0px 0px 0px 0px rgba(94, 166, 255, 0.31)\",\n \"marginTop\": \"20px\",\n \"border\": `1px solid ${theme.palette.cedeComponentHr}`,\n \":hover\": {\n boxShadow: \"0px 0px 20px 14px rgba(94, 166, 255, 0.31)\",\n },\n }}\n alt={\"Download from Chrome Web Store\"}\n src={chromeWebStore}\n onClick={() =>\n window.open(\n \"https://chrome.google.com/webstore/detail/cedestore/dcfphbfmjohnlcpelbhfbjolhmmlcbhd\",\n \"_blank\",\n )\n }\n />\n </Box>\n ) : null\n }\n />\n {form.currency ? (\n <Typography\n width=\"100%\"\n display=\"block\"\n textAlign=\"left\"\n variant={\"caption\"}\n px={theme.custom.smallGutterMargin}\n data-testid={\"select-currency-balance\"}\n >\n Balance: {form.currency.balance} {form.currency.label}\n </Typography>\n ) : (\n <Box height={theme.custom.gutterMargin} />\n )}\n </Box>\n <Box\n sx={{\n flex: 1,\n }}\n >\n <DropListWithIconModal\n inputProps={{\n id: \"select-network\",\n label: \"Network\",\n placeholder: \"Network\",\n }}\n title={\"Select Network\"}\n value={form.network}\n items={networks}\n loading={networksAreLoading && networks.length === 0}\n emptyMessage={\"No networks available\"}\n onChange={(value) => dispatchInput({ field: \"network\", value })}\n disableModalPortal={true}\n onClear={() => dispatchInput({ field: \"network\", value: null })}\n disabledTextItem={() => \"Under maintenance\"}\n bottomElement={\n isDemo ? (\n <Box display={\"flex\"} flexDirection={\"column\"} flex={1} justifyContent={\"center\"} alignItems={\"center\"}>\n <Typography\n paddingX={theme.custom.gutterMargin}\n variant=\"body1\"\n color={theme.palette.cedePrimaryColor}\n textAlign={\"center\"}\n fontWeight={theme.typography.fontWeightBold}\n >\n Connect now your CEX account, to access more than +500 networks.\n </Typography>\n <Box\n component=\"img\"\n sx={{\n \"height\": \"67px\",\n \"width\": \"220px\",\n \"backgroundColor\": \"#FFFFFF\",\n \"borderRadius\": \"13px\",\n \"paddingX\": \"10px\",\n \"cursor\": \"pointer\",\n \"transition\": \"box-shadow 0.3s ease-in-out\",\n \"boxShadow\": \"0px 0px 0px 0px rgba(94, 166, 255, 0.31)\",\n \"marginTop\": \"20px\",\n \"border\": `1px solid ${theme.palette.cedeComponentHr}`,\n \":hover\": {\n boxShadow: \"0px 0px 20px 14px rgba(94, 166, 255, 0.31)\",\n },\n }}\n alt={\"Download from Chrome Web Store\"}\n src={chromeWebStore}\n onClick={() =>\n window.open(\n \"https://chrome.google.com/webstore/detail/cedestore/dcfphbfmjohnlcpelbhfbjolhmmlcbhd\",\n \"_blank\",\n )\n }\n />\n </Box>\n ) : null\n }\n />\n {shouldUseTradeAndSend ? (\n <DropListWithIconModal\n inputProps={{\n id: \"select-destination-token\",\n label: \"Destination Token\",\n placeholder: \"Search token\",\n }}\n description=\"The token you chose is not available for the selected network. You will have to convert it to another token.\"\n disableModalPortal={true}\n value={form.destinationCurrency}\n onChange={(value) => dispatchInput({ field: \"destinationCurrency\", value })}\n title={\"Select destination token\"}\n loading={droplistDestinationTokensAreLoading}\n baseElement={({ onClick }) => (\n <Link\n color={droplistDestinationTokensError ? theme.palette.error.main : theme.palette.primary.main}\n onClick={onClick}\n sx={{\n \"cursor\": \"pointer\",\n \":hover\": {\n opacity: \".6\",\n },\n \"fontWeight\": \"700\",\n \"fontSize\": \"12px\",\n }}\n >\n Destination Token:{\" \"}\n {form.destinationCurrency?.label ||\n (!droplistDestinationTokensError ? (\n <Skeleton\n sx={{\n display: \"inline-block\",\n }}\n width={30}\n height={20}\n />\n ) : (\n userFacingMessages.WIDGETS.TRADE_SEND.ERROR\n ))}\n </Link>\n )}\n items={droplistDestinationTokens}\n />\n ) : null}\n </Box>\n </Box>\n ),\n [\n form.currency,\n form.network,\n currencies,\n networks,\n networksAreLoading,\n form.fromAccount,\n currenciesAreLoading,\n droplistDestinationTokens,\n droplistDestinationTokensAreLoading,\n form.destinationCurrency,\n ],\n );\n\n const setRecipientAddressValue = async (address: string) => {\n dispatchInput({ field: \"recipientAddress\", value: address });\n if (controller.form.whitelistedAddress !== null) dispatchInput({ field: \"whitelistedAddress\", value: null });\n };\n\n const renderItem = (item: DropListWithIconItem, onclick: VoidFunction) => (\n <Tooltip title={item.isDisabled ? \"This address is not valid\" : \"\"} arrow>\n <Box\n data-testid={item.testId}\n key={item.label}\n onClick={\n item.disabled\n ? undefined\n : () => {\n dispatchInput({ field: \"recipientAddress\", value: item.value });\n onclick && onclick();\n }\n }\n sx={{\n \"textTransform\": \"none\",\n \"borderRadius\": \"0px\",\n \"display\": \"flex\",\n \"flexDirection\": \"row\",\n \"width\": \"100%\",\n \"justifyContent\": \"flex-start\",\n \"padding\": \"10px 16px\",\n \"alignItems\": \"center\",\n \"gap\": \"6px\",\n \"boxSizing\": \"border-box\",\n \"&:hover\": {\n backgroundColor: item.disabled ? \"cedePaperDarkBackgroundColor\" : \"cedePaperLightBackgroundColor\",\n },\n \"cursor\": item.disabled ? \"initial\" : \"pointer\",\n \"backgroundColor\": \"cedePaperDarkBackgroundColor\",\n }}\n >\n <Typography variant={item.disabled ? \"body2\" : \"body1\"}>{item.label}</Typography>\n <Box\n sx={{\n width: \"5px\",\n height: \"5px\",\n borderRadius: \"50%\",\n backgroundColor: item.disabled ? \"text.secondary\" : \"text.primary\",\n }}\n ></Box>\n <Typography variant=\"body2\" color={theme.palette.text.secondary}>\n {cropTextInMiddle(item.value, 8)}\n </Typography>\n </Box>\n </Tooltip>\n );\n\n const recipientAddressInputText = (\n <ValidationDropList\n id={\"recipient-address\"}\n sx={{\n width: \"100%\",\n }}\n value={recipientAddress}\n setValue={setRecipientAddressValue}\n validate={validateAddress}\n selectTitle={\"Address Book\"}\n items={droplistAddressBook}\n placeholder={\"Recipient address\"}\n renderItem={renderItem}\n onFocus={() => {\n setIsRecipientInputFocused(true);\n }}\n onBlur={() => {\n setIsRecipientInputFocused(false);\n }}\n noOptionsText={\n !disableAddressBook || addressInputType === AddressInputType.WHITELIST ? (\n <Button\n variant=\"text\"\n onClick={() => {\n unfocus();\n handleAddAddressManually();\n }}\n data-testid=\"add-address-manually-button\"\n sx={{\n \"width\": \"calc(100% + 32px)\",\n \"height\": \"44px\",\n \"padding\": 0,\n \"padding-left\": theme.custom.gutterMargin,\n \"color\": theme.palette.text.secondary,\n \"margin\": `-${theme.custom.gutterMargin}`,\n \"px\": theme.custom.gutterMargin,\n \"borderRadius\": 0,\n \"justifyContent\": \"flex-start\",\n \"&:hover\": {\n backgroundColor: theme.palette.cedePaperLightBackgroundColor,\n },\n }}\n startIcon={<Create />}\n >\n Add Address Manually\n </Button>\n ) : undefined\n }\n disableOptions={disableAddressBook}\n timeout={400}\n bottomElement={\n !disableAddressBook ? (\n <Box\n sx={{\n \":hover\": {\n backgroundColor: \"cedePaperLightBackgroundColor\",\n },\n \"width\": \"100%\",\n }}\n >\n <Button\n sx={{\n \":hover\": {\n background: \"transparent\",\n },\n \"display\": \"flex\",\n \"alignItems\": \"center\",\n \"gap\": theme.custom.smallGutterMargin,\n \"borderRadius\": 0,\n \"color\": theme.palette.primary.main,\n }}\n variant=\"text\"\n fullWidth\n onClick={() => {\n unfocus();\n handleAddAddressManually();\n }}\n >\n <Add />\n Add a new address\n </Button>\n </Box>\n ) : undefined\n }\n />\n );\n\n const whitelistedAddressDropList = (\n <DropListWithIconModal\n inputProps={{\n id: \"select-whitelisted-address\",\n label: `${CEDE_CEX_LABELS[form.fromAccount?.cexValue ?? \"\"]}'s Address Book`,\n placeholder: \"Address key\",\n }}\n title={\"Address Book\"}\n value={form.whitelistedAddress || null}\n items={droplistWhitelistedAddresses}\n loading={isWhitelistedAddressesLoading}\n onChange={(value) => {\n dispatchInput({ field: \"whitelistedAddress\", value });\n if (value) dispatchInput({ field: \"recipientAddress\", value: value?.address });\n }}\n disableModalPortal={true}\n actionButton={\n <Button\n sx={{\n gap: theme.custom.smallGutterMargin,\n display: \"flex\",\n marginTop: theme.custom.smallGutterMargin,\n marginLeft: \"auto\",\n marginRight: \"auto\",\n color: theme.palette.primary.main,\n alignItems: \"center\",\n }}\n variant=\"text\"\n onClick={() => {\n unfocus();\n handleAddAddressManually();\n }}\n >\n <Add />\n Add a new address\n </Button>\n }\n renderItem={(item: (typeof droplistWhitelistedAddresses)[number]) => {\n return (\n <Box\n sx={{\n py: theme.custom.smallGutterMargin,\n px: theme.custom.gutterMargin,\n }}\n >\n <Typography\n variant=\"body1\"\n sx={{\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n }}\n >\n {item.label}\n </Typography>\n <Typography\n variant=\"body2\"\n color={theme.palette.text.secondary}\n sx={{\n fontSize: \"10px\",\n }}\n >\n {cropTextInMiddle(item.address, 45)}\n </Typography>\n </Box>\n );\n }}\n itemSize={() => 48}\n />\n );\n const recipientAddressInput =\n addressInputType === AddressInputType.WHITELIST ? whitelistedAddressDropList : recipientAddressInputText;\n\n return (\n <>\n {shouldUseTradeAndSend && (\n <TradeSendConfirmModal\n open={controller.isTradeSendConfirmModalOpened}\n setOpen={controller.setTradeSendConfirmModalOpened}\n tradePath={getTradePathLabel(controller?.tradePath ?? [])}\n recipientAddress={controller.form.recipientAddress || \"\"}\n destinationCurrency={controller.form.destinationCurrency?.label || \"\"}\n network={controller.form.network?.label || \"\"}\n onConfirm={controller.onTradeSendModalContinue}\n />\n )}\n {controller.form.fromAccount && isDefiTab && (\n <WhitelistAddressTutorial\n name={controller.form.whitelistedAddress?.label ?? \"\"}\n address={controller.form.whitelistedAddress?.address ?? controller.form.recipientAddress ?? \"\"}\n isOpen={controller.tutorialIsOpen}\n onClose={function (): void {\n controller.setTutorialIsOpen(false);\n }}\n exchangeId={controller.form.fromAccount.cexValue}\n checkWhitelist={controller.needWhitelist ? controller.checkWhitelist : undefined}\n asset={form.destinationCurrency?.label ?? form.currency?.label}\n tokenSymbol={form.destinationCurrency?.label ?? form.currency?.label}\n network={\n controller.form.fromAccount.cexValue === \"bybit\" && form.network?.label === \"Moonbeam\"\n ? \"GLMR\"\n : form.network?.label\n }\n />\n )}\n <Box\n height=\"100%\"\n display={\"flex\"}\n paddingX={!isWidget && displayWhitelistTooltip && !isMobile ? theme.custom.gutterMargin : 0}\n paddingBottom={isWidget ? 0 : isMobile ? theme.custom.smallGutterMargin : theme.custom.gutterMargin}\n alignItems={\"stretch\"}\n justifyContent={\"center\"}\n width=\"100%\"\n textAlign=\"left\"\n >\n <Box\n sx={{\n \"transition\": \".2s linear\",\n \"transitionDelay\": \"0.1s\",\n \"width\": \"100%\",\n \"&.half-width\": {\n width: \"50%\",\n },\n }}\n className={displayWhitelistTooltip && !isMobile && !isWidget ? \"half-width\" : \"\"}\n >\n <Box\n component={\"form\"}\n display={\"flex\"}\n flexDirection={\"column\"}\n alignItems={\"stretch\"}\n justifyContent={displayWhitelistTooltip && !isWidget && !isMobile ? \"flex-start\" : \"space-between\"}\n id=\"defi-form\"\n onSubmit={submit}\n maxWidth={displayWhitelistTooltip && !isMobile && !isWidget ? \"380px\" : \"100%\"}\n margin=\"auto\"\n height={displayWhitelistTooltip && !isWidget && !isMobile ? \"calc(100% - 60px)\" : \"100%\"}\n mb={displayWhitelistTooltip && !isWidget ? theme.custom.smallGutterMargin : 0}\n >\n <Box display=\"flex\" flexDirection=\"column\" gap={theme.custom.gutterMargin}>\n <Box\n sx={{\n width: \"100%\",\n display: \"flex\",\n justifyContent: \"space-between\",\n flexDirection: isBetweenCexTab ? \"row\" : \"column\",\n alignItems: isBetweenCexTab ? \"flex-start\" : \"stretch\",\n }}\n >\n {!isWidget && displayWhitelistTooltip && (\n <Typography\n variant=\"h3\"\n component=\"h1\"\n mb={theme.custom.mediumGutterMargin}\n fontWeight=\"bold\"\n display=\"flex\"\n alignItems=\"center\"\n justifyContent=\"space-between\"\n >\n Withdraw asset to your DeFi wallet:\n {displayWhitelistTooltip && isMobile && (\n <Link\n component=\"button\"\n variant=\"body2\"\n onClick={() => {\n setTutorialIsOpen(true);\n }}\n type=\"button\"\n sx={{\n marginLeft: theme.custom.smallGutterMargin,\n verticalAlign: \"middle\",\n fontWeight: \"bold\",\n }}\n >\n Whitelisting tutorial\n </Link>\n )}\n </Typography>\n )}\n <DropListWithIconModal\n inputProps={{\n id: \"select-from-account\",\n label: \"From\",\n placeholder: \"Account\",\n }}\n title={\"Select account\"}\n value={form.fromAccount}\n items={fromAccounts}\n loading={areAccountsLoading}\n onChange={(value) => {\n dispatchInput({ field: \"fromAccount\", value: value });\n }}\n disableModalPortal={true}\n actionButton={addCexRedirect ? <AddNewCexButton onClick={addCexRedirect} /> : undefined}\n shouldDisableItem={shouldDisableCex}\n disabledTextItem={disabledCexText}\n />{\" \"}\n {!form.fromAccount && (\n <Typography\n component=\"p\"\n fontSize=\"12px\"\n color={theme.palette.text.secondary}\n textAlign=\"left\"\n margin=\"4px 8px\"\n >\n Please, choose an account to continue.\n </Typography>\n )}\n {isBetweenCexTab && (\n <>\n <Box sx={{ padding: \"10px\", cursor: \"pointer\" }} onClick={switchSelectedCexs}>\n <SwapHoriz\n sx={{\n \"path\": { fill: theme.palette.action.disabled },\n \":hover\": { path: { fill: theme.palette.action.active } },\n }}\n />\n </Box>\n <DropListWithIconModal\n inputProps={{\n id: \"select-to-account\",\n label: \"To\",\n placeholder: \"Account\",\n }}\n title={\"Select account\"}\n value={form.toAccount ? form.toAccount : null}\n loading={areAccountsLoading}\n items={toAccounts}\n onChange={(value) => {\n dispatchInput({ field: \"toAccount\", value: value });\n }}\n />\n </>\n )}\n </Box>\n {form.fromAccount && !warningMessage && (\n <>\n {memoizedCurrencyNetworkFields}\n {isDefiTab && (\n <Box width=\"100%\">\n <Box\n width={\"100%\"}\n display=\"flex\"\n justifyContent={\"space-between\"}\n alignItems={\"flex-start\"}\n gap={theme.custom.gutterMargin}\n >\n <ResizeFieldsWrapper\n fieldElements={[\n recipientAddressInput,\n <TextFieldWithIcon\n label={\"Memo (optional)\"}\n id={\"tag-value\"}\n value={form.tagValue}\n handleChange={(e) =>\n dispatchInput({\n field: \"tagValue\",\n value: e.target.value,\n })\n }\n icon={<div />}\n sx={{\n flex: 1,\n }}\n />,\n ]}\n />\n </Box>\n\n {isWidget && displayWhitelistTooltip && (\n <Link\n component=\"button\"\n variant=\"body2\"\n onClick={() => {\n setTutorialIsOpen(true);\n }}\n type=\"button\"\n sx={{\n marginLeft: theme.custom.smallGutterMargin,\n verticalAlign: \"middle\",\n fontWeight: \"bold\",\n fontSize: \"12px\",\n lineHeight: \"1\",\n textAlign: \"left\",\n }}\n >\n Whitelisting tutorial\n </Link>\n )}\n </Box>\n )}\n <Box\n display=\"flex\"\n justifyContent={\"space-between\"}\n gap={theme.custom.gutterMargin}\n data-testid={\"ref-asset-values\"}\n position=\"relative\"\n >\n <ValidationTextFieldWithIcon\n validate={validateAssetValue}\n id={\"asset-value\"}\n label={form.currency?.label}\n value={String(form.assetValue)}\n sx={{\n flex: 1,\n flexBasis: \"50%\",\n }}\n helperSx={{\n paddingLeft: 0,\n top: \"inherit\",\n position: \"inherit\",\n }}\n handleChange={(e) =>\n dispatchInput({\n field: \"assetValue\",\n value: e.target.value,\n })\n }\n elementRef={validateAssetValueRef}\n icon={\n <Button variant={\"contained\"} onClick={setMaxAssetValue}>\n Max\n </Button>\n }\n subCaption={<WithdrawMinAmount controller={controller} />}\n />\n <TextFieldWithIcon\n label={fiatCurrency.symbol.toUpperCase()}\n id={\"ref-value\"}\n value={refValue}\n icon={<div />}\n sx={{\n \"cursor\": \"not-allowed\",\n \"opacity\": 0.6,\n \"& .MuiOutlinedInput-root.Mui-disabled input\": {\n cursor: \"not-allowed\",\n },\n }}\n disabled\n />\n </Box>\n </>\n )}\n {warningMessage && <EmptyState type={EmptyStateTypeEnum.WARNING} title={warningMessage} />}\n\n <Box>\n {form.fromAccount && isOauth && (\n <Typography\n sx={{\n color: theme.palette.text.secondary,\n }}\n >\n For this send, you will have to login again to {CEDE_CEX_LABELS[form.fromAccount.cexValue]}.\n </Typography>\n )}\n </Box>\n <Box paddingY={theme.spacing()}>\n <FormErrors />\n </Box>\n </Box>\n\n <MainFooter sx={{ paddingTop: theme.custom.smallGutterMargin, pb: 0 }}>\n <Box>\n {displayWhitelistTooltip && (\n <Box\n display=\"flex\"\n alignItems=\"center\"\n data-testid=\"tutorial-checkbox\"\n onClick={() => setIsTutorialCheckboxChecked(!isTutorialCheckboxChecked)}\n sx={{\n \"&:hover\": {\n cursor: \"pointer\",\n },\n }}\n mb={theme.custom.smallGutterMargin}\n >\n <Checkbox checked={isTutorialCheckboxChecked} />\n <Typography component=\"p\" variant=\"h3\" fontSize={theme.typography.body1.fontSize} textAlign=\"left\">\n I had correctly followed the <strong>tutorial</strong> and <strong>whitelisted</strong> the\n recipient address.\n </Typography>\n </Box>\n )}\n\n <Button\n type=\"submit\"\n form=\"defi-form\"\n height={\"tall\"}\n variant={\"contained\"}\n fullWidth\n disabled={!isValid}\n data-testid={\"send-button\"}\n >\n {isDemo ? \"Connect to cede.store\" : \"Send\"}\n </Button>\n </Box>\n </MainFooter>\n </Box>\n {displayWhitelistTooltip && !isWidget && !isMobile && <HelpButton />}\n </Box>\n {controller.form.fromAccount && isDefiTab && (\n <Box\n height=\"100%\"\n pb=\"20px\"\n sx={{\n \"transition\": \".2s linear\",\n \"transitionDelay\": \".2s\",\n \"opacity\": 0,\n \"pointerEvents\": \"none\",\n \"width\": \"0%\",\n \"&.half-width\": {\n width: \"50%\",\n pointerEvents: \"all\",\n opacity: 1,\n },\n }}\n className={displayWhitelistTooltip && !isMobile && !isWidget ? \"half-width\" : \"\"}\n >\n <FullPageWhitelistTutorial\n name={controller.form.whitelistedAddress?.label ?? \"\"}\n address={controller.form.whitelistedAddress?.address ?? controller.form.recipientAddress ?? \"\"}\n isOpen={displayWhitelistTooltip && isDefiTab}\n onClose={function (): void {\n controller.setTutorialIsOpen(false);\n }}\n exchangeId={controller.form.fromAccount.cexValue}\n checkWhitelist={controller.needWhitelist ? controller.checkWhitelist : undefined}\n asset={form.destinationCurrency?.label ?? form.currency?.label}\n tokenSymbol={form.destinationCurrency?.label ?? form.currency?.label}\n network={form.network?.label}\n />\n </Box>\n )}\n </Box>\n </>\n );\n};\n","import { Navigate, Outlet } from \"react-router-dom\";\nimport { WIDGET_ROUTES } from \"@cede/utils\";\nimport { useDependencies } from \"../hooks/useDependencies\";\n\nexport const authenticationMiddleware = () => {\n const { backgroundHandler, useWidgetLogin } = useDependencies();\n const { isLoggedIn } = useWidgetLogin();\n if (backgroundHandler?.isReady && !isLoggedIn) {\n return <Navigate to={WIDGET_ROUTES.LOGIN} replace />;\n }\n\n return <Outlet />;\n};\n","export function isMobile() {\n return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);\n}\n","import chromeIcon from \"../../assets/chrome.svg\";\nimport { Button, StoreLogo } from \"@cede/ds\";\nimport { isMobile } from \"@cede/utils\";\nimport OpenInNewIcon from \"@mui/icons-material/OpenInNew\";\nimport { Box, Typography, useTheme } from \"@mui/material\";\n\nexport const NotSupported = () => {\n const theme = useTheme();\n\n return (\n <Box\n component=\"section\"\n sx={{\n backgroundColor: theme.palette.background.default,\n height: \"100%\",\n }}\n display={\"flex\"}\n flexDirection={\"column\"}\n alignItems={\"stretch\"}\n justifyContent={\"space-between\"}\n paddingY={theme.custom.smallGutterMargin}\n >\n <Box\n component=\"div\"\n sx={{\n marginTop: \"110px\",\n textAlign: \"center\",\n }}\n >\n <StoreLogo size=\"large\" />\n <Typography component=\"h1\" variant=\"h1\" fontSize=\"20px\">\n <Typography\n component={\"span\"}\n variant=\"h1\"\n fontSize=\"20px\"\n sx={{ display: \"inline\", color: theme.palette.primary.main }}\n >\n {\"Cede.store \"}\n </Typography>\n send portal is not available on {isMobile() ? \"mobile\" : \"your current browser\"}.\n </Typography>\n <Box\n display={\"flex\"}\n alignItems={\"center\"}\n justifyContent={\"center\"}\n gap={theme.custom.smallGutterMargin}\n paddingTop={theme.custom.gutterMargin}\n >\n <Typography component=\"h2\" variant=\"body2\">\n Retry on a {isMobile() ? \"desktop\" : \"\"} chromium browser\n </Typography>\n <Box component={\"img\"} src={chromeIcon} width={20} alt=\"Google Chrome Icon\" />\n </Box>\n\n <Box\n component=\"a\"\n href={\"https://en.wikipedia.org/wiki/Chromium_(web_browser)#Active\"}\n target={\"_blank\"}\n rel=\"noopener noreferrer\"\n data-testid=\"anchor\"\n sx={{\n color: theme.palette.text.secondary,\n marginTop: theme.custom.gutterMargin,\n display: \"inline-flex\",\n alignItems: \"center\",\n }}\n >\n List of compatible browser\n <OpenInNewIcon\n sx={{\n height: \"16px\",\n width: \"16px\",\n ml: \"5px\",\n }}\n />\n </Box>\n </Box>\n <Box\n component=\"div\"\n sx={{\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"stretch\",\n gap: theme.custom.gutterMargin,\n paddingTop: theme.custom.bigGutterMargin,\n marginTop: \"40px\",\n }}\n >\n <Button onClick={() => (window.location.href = \"/\")} variant={\"contained\"} color={\"primary\"} height={\"tall\"}>\n Return to the menu\n </Button>\n </Box>\n </Box>\n );\n};\n","import { Outlet } from \"react-router-dom\";\nimport { NotSupported } from \"../components/NotSupported\";\n\n/**\n * @description This component is used to check if the browser is chromium based.\n * If not, it will display the NotSupported component.\n */\nexport const chromiumMiddleware = () => {\n if (!window.chrome) {\n return <NotSupported />;\n }\n return <Outlet />;\n};\n","import { Outlet } from \"react-router-dom\";\nimport { useDependencies } from \"../hooks/useDependencies\";\n\nexport const initMiddleware = () => {\n const { useInitialize } = useDependencies();\n useInitialize();\n return <Outlet />;\n};\n","import { forwardRef } from \"react\";\nimport { useNavBar } from \"@cede/ds\";\nimport { Any, ViewEnvironment } from \"@cede/types\";\nimport { useDependencies, useIsOnboardingRequest } from \"../../hooks\";\nimport { Box, BoxProps, useTheme } from \"@mui/material\";\n\nexport type PageProps = {\n displayFlex?: boolean;\n onSubmit?: React.FormEventHandler<Any>; // we have to redefine onSubmit here because ts doesn't infer the type correctly\n} & Omit<BoxProps, \"onSubmit\">;\n\nexport const Page = forwardRef(({ children, displayFlex, sx, ...boxProps }: PageProps, ref: Any) => {\n const { useViewEnvironment } = useDependencies();\n const theme = useTheme();\n const { isDisplayed } = useNavBar();\n const { isOnboardingRequest } = useIsOnboardingRequest();\n const { environment } = useViewEnvironment();\n\n const getHeight = () => {\n if (environment === ViewEnvironment.WIDGET) return \"100%\";\n if (isDisplayed) return `calc(${theme.custom.storeSize.height} - ${theme.custom.navBarSize.height})`;\n else return theme.custom.storeSize.height;\n };\n\n return (\n <Box\n ref={ref}\n display={displayFlex ? \"flex\" : \"block\"}\n flexDirection={\"column\"}\n justifyContent={\"space-between\"}\n width={\"100%\"}\n {...boxProps}\n sx={{\n \"height\": getHeight(),\n \"paddingX\": isOnboardingRequest ? \"50px\" : theme.custom.gutterMargin,\n \"paddingBottom\": 0,\n \"paddingTop\": theme.custom.smallGutterMargin, // many pages have a droplist at the top of the page. The label might have an overflow if we don't put the padding\n \"::-webkit-scrollbar\": {\n width: \"4px\",\n },\n \":hover::-webkit-scrollbar-thumb\": {\n backgroundColor: \"white\",\n },\n \"::-webkit-scrollbar-thumb\": {\n borderRadius: \"4px\",\n },\n ...sx,\n }}\n >\n {children}\n </Box>\n );\n});\n","import { useMemo } from \"react\";\nimport { htmlExports } from \"../utils/htmlExports\";\n\nexport const useIsOnboardingRequest = () => {\n const isOnboardingRequest = useMemo(() => {\n const url = new URL(window.location.href);\n return url.pathname === htmlExports.requestOnboardingHtml;\n }, []);\n\n return {\n isOnboardingRequest,\n };\n};\n","import { userFacingMessages } from \"@cede/types\";\nimport { useDependencies } from \"../../hooks\";\nimport { Typography } from \"@mui/material\";\n\nexport const CedeStoreMessage = () => {\n const { useSelectedTransaction } = useDependencies();\n const { transaction, isSend } = useSelectedTransaction(({ transaction, isSend }) => ({ transaction, isSend }));\n if (!transaction || !isSend) return null;\n\n return (\n <>\n <Typography variant={\"body2\"}>Cede.store message</Typography>\n <Typography variant={\"body1\"} fontWeight={\"bold\"} justifySelf={\"flex-end\"}>\n {userFacingMessages.SEND.YOUR_FUND_SAFE}\n </Typography>\n </>\n );\n};\n","import { IconText } from \"@cede/ds\";\nimport { isCefiInfoTx } from \"@cede/types\";\nimport { firstLetterToUpperCase, getExchangeLogo } from \"@cede/utils\";\nimport { useDependencies } from \"../../hooks\";\nimport { Typography } from \"@mui/material\";\n\nexport const CexLine = () => {\n const { useSelectedTransaction } = useDependencies();\n const { transaction, isTrade } = useSelectedTransaction(({ transaction, isTrade }) => ({\n transaction,\n isTrade,\n }));\n if (!transaction || !isTrade) return null;\n const from = transaction.from;\n if (!isCefiInfoTx(from)) return null;\n\n return (\n <>\n <Typography variant={\"body2\"}>CEX</Typography>\n <IconText\n iconName={from.account.exchangeId}\n iconUrl={getExchangeLogo(from.account.exchangeId)}\n text={firstLetterToUpperCase(from.account.exchangeId)}\n justifySelf={\"flex-end\"}\n hover={false}\n padding={0}\n />\n </>\n );\n};\n","import { isCefiInfoTx, userFacingMessages } from \"@cede/types\";\nimport { firstLetterToUpperCase } from \"@cede/utils\";\nimport { useDependencies } from \"../../hooks\";\nimport { Typography, useTheme } from \"@mui/material\";\n\nexport const ConfirmEmail = () => {\n const theme = useTheme();\n const { useSelectedTransaction } = useDependencies();\n\n const { transaction, isSend } = useSelectedTransaction(({ transaction, isSend }) => ({\n transaction,\n isSend,\n }));\n\n if (!transaction || !isSend) return null;\n\n const from = transaction.from;\n\n if (!isCefiInfoTx(from)) return null;\n\n const exchangeId = from.account.exchangeId;\n\n return (\n <Typography\n data-testid={\"confirm-email\"}\n fontSize={\"12px\"}\n fontWeight={\"bold\"}\n textAlign={\"center\"}\n color={theme.palette.warning.main}\n width={\"100%\"}\n >\n {userFacingMessages.SEND.CONFIRM_EMAIL(firstLetterToUpperCase(exchangeId))}\n </Typography>\n );\n};\n","import { useRef, useState } from \"react\";\nimport { Bubble } from \"@cede/ds\";\nimport { useDependencies } from \"../../hooks\";\nimport { Box, Typography, useTheme } from \"@mui/material\";\n\ntype Props = {\n label?: string;\n};\n\nexport const ErrorLine = ({ label = \"Error\" }: Props) => {\n const theme = useTheme();\n const { useSelectedTransaction } = useDependencies();\n const error = useSelectedTransaction((state) => state.error);\n const popperRef = useRef(null);\n const popperAnchor = useRef(null);\n const [isOpen, setIsOpen] = useState(false);\n\n const onMouseIn = () => {\n setIsOpen(true);\n };\n\n const onMouseOut = () => {\n setIsOpen(false);\n };\n\n if (!error) return null;\n\n return (\n <>\n <Typography variant={\"body2\"}>{label}</Typography>\n <Box ref={popperAnchor} onMouseEnter={onMouseIn} onMouseOut={onMouseOut} justifySelf={\"right\"}>\n <Typography textAlign={\"right\"} variant={\"body1\"} color={theme.palette.error.main}>\n {error.length > 16 ? `${error.slice(0, 16)}...` : error}\n </Typography>\n <Bubble\n hideArrow={true}\n ref={popperRef}\n isOpen={isOpen}\n anchor={popperAnchor.current}\n placement={\"top-end\"}\n disablePortal={true}\n >\n <Typography variant={\"body1\"} fontSize={theme.custom.textSize.medium}>\n {error}\n </Typography>\n </Bubble>\n </Box>\n </>\n );\n};\n","import { IconText } from \"@cede/ds\";\nimport { CefiInfoTx, isDefiInfoTx } from \"@cede/types\";\nimport { firstLetterToUpperCase, forgeNetworkURL } from \"@cede/utils\";\nimport { useDependencies } from \"../../hooks\";\nimport { Typography } from \"@mui/material\";\n\nexport const NetworkLine = () => {\n const { useSelectedTransaction, useNetworks } = useDependencies();\n const { networkLabel, transaction } = useSelectedTransaction(({ networkLabel, transaction }) => ({\n networkLabel,\n transaction,\n }));\n // both at false as we just need all existing networks\n const { networksByValue } = useNetworks({\n accountId: (transaction?.from as CefiInfoTx).account.accountId,\n toDeposit: false,\n toWithdraw: false,\n });\n if (!transaction || !networkLabel || !isDefiInfoTx(transaction.to)) return null;\n\n return (\n <>\n <Typography variant={\"body2\"}>Network</Typography>\n <IconText\n justifySelf={\"flex-end\"}\n iconName={networkLabel}\n iconUrl={forgeNetworkURL(transaction.to.account.network)}\n text={networksByValue?.[transaction.to.account.network]?.name ?? firstLetterToUpperCase(networkLabel) ?? \"\"}\n padding={0}\n hover={false}\n />\n </>\n );\n};\n","import { CopyIconButton } from \"@cede/ds\";\nimport { isDefiInfoTx } from \"@cede/types\";\nimport { cropTextInMiddle } from \"@cede/utils\";\nimport { useDependencies } from \"../../hooks\";\nimport { Box, Typography, useTheme } from \"@mui/material\";\n\nexport const RecipientAddressLine = () => {\n const theme = useTheme();\n const { useSelectedTransaction } = useDependencies();\n const transaction = useSelectedTransaction((state) => state.transaction);\n\n if (!transaction || !isDefiInfoTx(transaction.to) || !transaction.to.account.address) return null;\n\n return (\n <>\n <Typography variant={\"body2\"}>Recipient address</Typography>\n <Box\n sx={{\n display: \"inline-flex\",\n alignItems: \"center\",\n justifySelf: \"right\",\n gap: theme.custom.smallGutterMargin,\n }}\n >\n <Typography variant={\"body1\"} justifySelf={\"right\"}>\n {cropTextInMiddle(transaction.to.account.address, 10)}\n </Typography>\n <CopyIconButton\n size=\"small\"\n sx={{\n color: \"text.primary\",\n }}\n text={transaction.to.account.address}\n />\n </Box>\n </>\n );\n};\n","import { IconTextSubText } from \"@cede/ds\";\nimport { isCefiInfoTx } from \"@cede/types\";\nimport { firstLetterToUpperCase, forgeTokenURL, formatBalance, getExchangeLogo } from \"@cede/utils\";\nimport { useDependencies } from \"../../hooks\";\n\nexport const SendHeader = () => {\n const { useSelectedTransaction } = useDependencies();\n const { transaction, isSend } = useSelectedTransaction(({ transaction, isSend }) => ({\n transaction,\n isSend,\n }));\n if (!transaction || !isSend) return null;\n const from = transaction.from;\n if (!isCefiInfoTx(from)) return null;\n\n return (\n <>\n <IconTextSubText\n iconName={from.account.exchangeId}\n icon={getExchangeLogo(from.account.exchangeId)}\n text={firstLetterToUpperCase(from.account.exchangeId)}\n subText={\"CEX\"}\n />\n <IconTextSubText\n sx={{ width: \"auto\" }}\n iconName={from.transaction.tokenSymbol}\n icon={forgeTokenURL(from.transaction.tokenSymbol)}\n text={`${formatBalance(from.transaction.amount)} ${from.transaction.tokenSymbol}`}\n subText={\"Amount\"}\n sxSubGroup={{\n alignItems: \"flex-end\",\n }}\n />\n </>\n );\n};\n","import { ConnectionStatus, ConnectionStatusProps, PendingTransactionLoader } from \"@cede/ds\";\nimport { TxStatus, isCefiInfoTx } from \"@cede/types\";\nimport { useDependencies } from \"../../hooks\";\nimport { Box, Typography } from \"@mui/material\";\n\nexport const statusStates = {\n [TxStatus.OK]: \"Completed\",\n [TxStatus.FAILED]: \"Rejected\",\n [TxStatus.PENDING]: \"In progress\",\n [TxStatus.CANCELLED]: \"Canceled\",\n};\n\nexport const connectionStatusColors: Record<TxStatus, ConnectionStatusProps[\"color\"]> = {\n [TxStatus.OK]: \"success\",\n [TxStatus.FAILED]: \"error\",\n [TxStatus.PENDING]: \"warning\",\n [TxStatus.CANCELLED]: \"error\",\n};\n\nexport const StatusLine = () => {\n const { useSelectedTransaction } = useDependencies();\n const { transaction, isReceive } = useSelectedTransaction(({ transaction, isReceive }) => ({\n transaction,\n isReceive,\n }));\n\n if (!transaction) return null;\n\n const infoTx =\n isCefiInfoTx(transaction.to) && isReceive\n ? transaction.to\n : isCefiInfoTx(transaction.from)\n ? transaction.from\n : null;\n\n if (!infoTx) return null;\n\n return (\n <>\n <Typography variant={\"body2\"}>Status</Typography>\n <Box justifySelf={\"right\"} display={\"flex\"} flexDirection={\"row\"} alignItems={\"center\"}>\n <ConnectionStatus\n label={statusStates[infoTx.transaction.status]}\n color={connectionStatusColors[infoTx.transaction.status]}\n />\n {infoTx.transaction.status === TxStatus.PENDING && <PendingTransactionLoader />}\n </Box>\n </>\n );\n};\n","import { formatBalance } from \"@cede/utils\";\nimport { useDependencies } from \"../../hooks\";\nimport { Typography } from \"@mui/material\";\n\nexport const TotalFees = () => {\n const { useSelectedTransaction } = useDependencies();\n const from = useSelectedTransaction((state) => state.transaction?.from);\n\n if (!from) return null;\n return (\n <>\n <Typography variant={\"body2\"}>Total fees</Typography>\n <Typography variant={\"body1\"} justifySelf={\"right\"}>\n {formatBalance(from.transaction.fee.amount)} {from.transaction.fee.tokenSymbol}\n </Typography>\n </>\n );\n};\n","\"use client\";\n\nimport createSvgIcon from './utils/createSvgIcon';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon( /*#__PURE__*/_jsx(\"path\", {\n d: \"M14.29 5.71c-.39.39-.39 1.02 0 1.41L18.17 11H3c-.55 0-1 .45-1 1s.45 1 1 1h15.18l-3.88 3.88c-.39.39-.39 1.02 0 1.41.39.39 1.02.39 1.41 0l5.59-5.59c.39-.39.39-1.02 0-1.41l-5.6-5.58c-.38-.39-1.02-.39-1.41 0\"\n}), 'EastRounded');","import { IconTextSubText } from \"@cede/ds\";\nimport { isCefiInfoTx } from \"@cede/types\";\nimport { forgeTokenURL, formatBalance } from \"@cede/utils\";\nimport { useDependencies } from \"../../hooks\";\nimport { EastRounded } from \"@mui/icons-material\";\nimport { useTheme } from \"@mui/material\";\n\nexport const TradeHeader = () => {\n const theme = useTheme();\n const { useSelectedTransaction } = useDependencies();\n const { transaction, isTrade } = useSelectedTransaction(({ transaction, isTrade }) => ({\n transaction,\n isTrade,\n }));\n if (!transaction) return null;\n const from = transaction.from;\n const to = transaction.to;\n\n if (!isCefiInfoTx(from) || !isCefiInfoTx(to) || !isTrade) return null;\n\n return (\n <>\n <IconTextSubText\n iconName={from.transaction.tokenSymbol}\n icon={forgeTokenURL(from.transaction.tokenSymbol)}\n text={`${formatBalance(from.transaction.amount)} ${from.transaction.tokenSymbol}`}\n subText={\"From\"}\n sx={{ width: \"auto\" }}\n />\n <EastRounded\n sx={{\n color: theme.palette.text.primary,\n }}\n />\n <IconTextSubText\n iconName={to.transaction.tokenSymbol}\n icon={forgeTokenURL(to.transaction.tokenSymbol)}\n text={`${formatBalance(to.transaction.amount)} ${to.transaction.tokenSymbol}`}\n subText={\"To\"}\n sx={{ width: \"auto\" }}\n sxSubGroup={{\n alignItems: \"flex-end\",\n }}\n />\n </>\n );\n};\n","export const isOnrampMoney = window.location.origin.match(/onramp.money|.*\\.?bitbns\\.com/);\n","import { Button } from \"@cede/ds\";\nimport { SdkErrorCodes, ViewEnvironment } from \"@cede/types\";\nimport { MainFooter } from \"../../..\";\nimport { useDependencies } from \"../../../hooks/useDependencies\";\n\nexport const DefaultFooter = () => {\n const { useCompletedTransaction, useViewEnvironment } = useDependencies();\n const { transaction, goTo, error, isSupportedExchangesLoading, isRequiringEmailConfirmation, errorCode } =\n useCompletedTransaction();\n const { environment: viewEnvironment } = useViewEnvironment();\n\n if (!transaction) return null;\n\n const actionButtonLabel = () => {\n if (errorCode === SdkErrorCodes.EXCHANGE_INVALID_PERMISSION) return \"Update permissions\";\n if (errorCode === SdkErrorCodes.WHITELIST_CHECK_FAILED) return \"Update whitelisted addresses\";\n if (viewEnvironment === ViewEnvironment.WIDGET) {\n if (error) return \"Back\";\n if (isRequiringEmailConfirmation && transaction.type === \"withdrawal\") return \"Confirm via email\";\n if (transaction.type === \"withdrawal\") return \"New Transfer\";\n if (transaction.type === \"order\") return \"New Trade\";\n return \"Back\";\n }\n\n if (isSupportedExchangesLoading) return;\n\n if (isRequiringEmailConfirmation && transaction.type === \"withdrawal\") {\n return \"Confirm via email\";\n } else {\n return \"Go to vault\";\n }\n };\n\n return (\n <MainFooter>\n <Button fullWidth data-testid=\"submit-btn\" height={\"tall\"} variant={\"contained\"} onClick={goTo}>\n {actionButtonLabel()}\n </Button>\n </MainFooter>\n );\n};\n","import { Button } from \"@cede/ds\";\nimport { SdkErrorCodes } from \"@cede/types\";\nimport { MainFooter } from \"../../..\";\nimport { useDependencies } from \"../../../hooks/useDependencies\";\nimport { useTheme } from \"@mui/material\";\n\n/**\n * @description\n * Custom footer for the Onramp Money widget.\n */\nexport const OnrampMoneyCustomFooter = () => {\n const theme = useTheme();\n\n const { useBackgroundHandler, useCompletedTransaction } = useDependencies();\n const { transaction, errorCode, goTo } = useCompletedTransaction();\n\n if (!transaction) return null;\n\n const actionButtonLabel = () => {\n if (errorCode === SdkErrorCodes.EXCHANGE_INVALID_PERMISSION) return \"Update permissions\";\n if (errorCode === SdkErrorCodes.WHITELIST_CHECK_FAILED) return \"Update whitelisted addresses\";\n return null;\n };\n const { backgroundHandler } = useBackgroundHandler();\n\n const onClose = () => {\n backgroundHandler?.emit(\"widgetClosed\");\n };\n\n return (\n <MainFooter>\n {actionButtonLabel() ? (\n <Button\n fullWidth\n data-testid=\"submit-btn\"\n height={\"tall\"}\n variant={\"contained\"}\n onClick={goTo}\n sx={{\n background: theme.palette.primary.main,\n color: theme.palette.primary.contrastText,\n }}\n >\n {actionButtonLabel()}\n </Button>\n ) : (\n <Button\n fullWidth\n height={\"tall\"}\n variant={\"text\"}\n onClick={onClose}\n sx={{\n color: theme.palette.primary.main,\n }}\n >\n Close\n </Button>\n )}\n </MainFooter>\n );\n};\n","\"use client\";\n\nimport createSvgIcon from './utils/createSvgIcon';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon( /*#__PURE__*/_jsx(\"path\", {\n d: \"M13 14v6c0 .55.45 1 1 1h6c.55 0 1-.45 1-1v-6c0-.55-.45-1-1-1h-6c-.55 0-1 .45-1 1m-9 7h6c.55 0 1-.45 1-1v-6c0-.55-.45-1-1-1H4c-.55 0-1 .45-1 1v6c0 .55.45 1 1 1M3 4v6c0 .55.45 1 1 1h6c.55 0 1-.45 1-1V4c0-.55-.45-1-1-1H4c-.55 0-1 .45-1 1m12.95-1.6L11.7 6.64c-.39.39-.39 1.02 0 1.41l4.25 4.25c.39.39 1.02.39 1.41 0l4.25-4.25c.39-.39.39-1.02 0-1.41L17.37 2.4c-.39-.39-1.03-.39-1.42 0\"\n}), 'WidgetsRounded');","'use client';\n\nimport * as React from 'react';\nimport createSvgIcon from './utils/createSvgIcon';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon( /*#__PURE__*/_jsx(\"path\", {\n d: \"M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-5.214-6.817L4.99 21.75H1.68l7.73-8.835L1.254 2.25H8.08l4.713 6.231zm-1.161 17.52h1.833L7.084 4.126H5.117z\"\n}), 'X');","import { ReactNode, useEffect } from \"react\";\nimport { DiscordIcon, StoreLogo, useNavBar } from \"@cede/ds\";\nimport { TxStatus, TxType, ViewEnvironment } from \"@cede/types\";\nimport { DISCORD_INVITE_URL } from \"@cede/utils\";\nimport { HelpLink, Page } from \"../..\";\nimport { CedeStoreMessage } from \"../../components/Transaction/CedeStoreMessage\";\nimport { CexLine } from \"../../components/Transaction/CexLine\";\nimport { ConfirmEmail } from \"../../components/Transaction/ConfirmEmail\";\nimport { ErrorLine } from \"../../components/Transaction/ErrorLine\";\nimport { NetworkLine } from \"../../components/Transaction/NetworkLine\";\nimport { RecipientAddressLine } from \"../../components/Transaction/RecipientAddressLine\";\nimport { SendHeader } from \"../../components/Transaction/SendHeader\";\nimport { StatusLine } from \"../../components/Transaction/StatusLine\";\nimport { TotalFees } from \"../../components/Transaction/TotalFees\";\nimport { TradeHeader } from \"../../components/Transaction/TradeHeader\";\nimport { useDependencies } from \"../../hooks/useDependencies\";\nimport { getFooter } from \"./footers/getFooter\";\nimport { isOnrampMoney } from \"./utils\";\nimport { WidgetsRounded, X } from \"@mui/icons-material\";\nimport { Box, CardActionArea, Fade, SvgIcon, Typography, useTheme } from \"@mui/material\";\n\nconst titles = {\n [TxStatus.OK]: (type: TxType) => (type === \"order\" ? \"Successfully traded!\" : \"Successfully sent!\"),\n [TxStatus.CANCELLED]: (type: TxType) => (type === \"order\" ? \"Trade attempt failed!\" : \"Send attempt failed!\"),\n [TxStatus.FAILED]: (type: TxType) => (type === \"order\" ? \"Trade attempt failed!\" : \"Send attempt failed!\"),\n [TxStatus.PENDING]: (type: TxType) => (type === \"order\" ? \"Trade submitted!\" : \"Send submitted!\"),\n};\n\nconst operationNames: Record<TxType, string> = {\n order: \"Trade\",\n withdrawal: \"Send\",\n deposit: \"Deposit\",\n transfer: \"Transfer\",\n swap: \"Swap\",\n};\n\nconst transactionStatuses = {\n [TxStatus.OK]: \"success\",\n [TxStatus.FAILED]: \"error\",\n [TxStatus.PENDING]: \"pending\",\n [TxStatus.CANCELLED]: \"error\",\n};\n\nconst HeaderButton = ({ children, onClick }: { children: ReactNode[]; onClick: VoidFunction }) => {\n const theme = useTheme();\n return (\n <CardActionArea\n onClick={onClick}\n sx={{\n display: \"inline-flex\",\n gap: theme.spacing(1),\n alignItems: \"center\",\n flex: 1,\n background: theme.palette.background.darkPaper,\n color: theme.palette.text.primary,\n borderRadius: theme.custom.buttonSmallRadius,\n paddingY: theme.spacing(1),\n }}\n >\n {children}\n </CardActionArea>\n );\n};\n\nexport const CompletedTransaction = () => {\n const { useCompletedTransaction, widgetProps, useViewEnvironment, useSendStore } = useDependencies();\n const { transaction, onTransactionDetails, shareOnTwitter, isRequiringEmailConfirmation, error } =\n useCompletedTransaction();\n const theme = useTheme();\n const { setIsDisplayed } = useNavBar();\n const { environment: viewEnvironment } = useViewEnvironment();\n const { initialProps } = useSendStore();\n\n useEffect(() => {\n setIsDisplayed(false);\n }, []);\n\n if (!transaction) return null;\n\n const transactionStatus = transaction.from.transaction.status;\n const transactionResult = transactionStatuses[transactionStatus];\n\n const logoType = transactionResult === \"success\" ? \"happy\" : transactionResult === \"error\" ? \"sad\" : \"normal\";\n\n const titleColor = () => {\n if (transactionResult === \"success\") return theme.palette.success.main;\n if (transactionResult === \"error\") return theme.palette.error.main;\n if (transactionResult === \"pending\") return theme.palette.warning.main;\n return theme.palette.text.primary;\n };\n\n const onSupportNeeded = () => {\n window.open(DISCORD_INVITE_URL, \"_blank\");\n };\n\n const logoSize = viewEnvironment === ViewEnvironment.WIDGET ? \"75px\" : theme.custom.imgSize.large;\n\n const shouldDisplayConfirmEmail = isRequiringEmailConfirmation && transaction.type === \"withdrawal\" && !error;\n\n return (\n <Fade in={true}>\n <Page displayFlex alignItems=\"center\">\n <Box\n position={\"absolute\"}\n top={viewEnvironment === ViewEnvironment.WIDGET ? \"30px\" : theme.custom.smallGutterMargin}\n right={theme.custom.smallGutterMargin}\n >\n {viewEnvironment !== ViewEnvironment.WIDGET && <HelpLink />}\n </Box>\n <Box paddingTop={viewEnvironment === ViewEnvironment.WIDGET ? \"15px\" : \"30px\"}>\n {widgetProps?.logo !== undefined ? (\n widgetProps.logo\n ) : (\n <StoreLogo size=\"medium\" type={logoType} width={logoSize} height={logoSize} />\n )}\n </Box>\n <Typography variant={\"h1\"} marginTop={0} paddingY={theme.spacing()} color={titleColor()}>\n {titles[transactionStatus](transaction.type)}\n </Typography>\n <Box display={\"flex\"} alignItems={\"center\"} gap={theme.spacing(3)} width={\"100%\"}>\n <HeaderButton onClick={onTransactionDetails}>\n <Typography>{operationNames[transaction.type]} details</Typography>\n <WidgetsRounded fontSize=\"small\" />\n </HeaderButton>\n {!isOnrampMoney && !error && (\n <HeaderButton onClick={shareOnTwitter}>\n <Typography>Share on</Typography>\n <X fontSize=\"small\" />\n </HeaderButton>\n )}\n {error && (\n <HeaderButton onClick={onSupportNeeded}>\n <Typography>Contact support </Typography>\n <Box ml={theme.custom.smallGutterMargin} display=\"flex\" alignItems=\"center\">\n <SvgIcon fill={theme.palette.text.secondary}>\n <DiscordIcon innerLogoColor={theme.palette.background.default} />\n </SvgIcon>\n </Box>\n </HeaderButton>\n )}\n </Box>\n <Box\n sx={{\n background: theme.palette.background.darkPaper,\n borderRadius: theme.custom.buttonSmallRadius,\n width: \"100%\",\n }}\n >\n <Box\n display={\"flex\"}\n padding={theme.spacing(2)}\n alignItems={\"center\"}\n justifyContent={\"space-between\"}\n borderBottom={`1px solid ${theme.palette.cedeComponentHr}`}\n >\n <TradeHeader />\n <SendHeader />\n </Box>\n <Box\n display={\"grid\"}\n gridTemplateColumns={\"repeat(2, auto)\"}\n gap={theme.spacing(2)}\n alignItems={\"center\"}\n justifyItems={\"left\"}\n padding={theme.spacing(2)}\n paddingBottom={shouldDisplayConfirmEmail ? theme.spacing(0.5) : theme.spacing(2)}\n >\n <CexLine />\n <StatusLine />\n {!error && <NetworkLine />}\n {!error && <RecipientAddressLine />}\n {!shouldDisplayConfirmEmail && !error && <TotalFees />}\n <ErrorLine label=\"CEX error message\" />\n {error && <CedeStoreMessage />}\n </Box>\n {shouldDisplayConfirmEmail && (\n <Box padding={theme.spacing(2)} paddingTop={0}>\n <ConfirmEmail />\n </Box>\n )}\n </Box>\n {getFooter(initialProps.clientTxId)}\n </Page>\n </Fade>\n );\n};\n","import { isOnrampMoney } from \"../utils\";\nimport { DefaultFooter } from \"./DefaultFooter\";\nimport { OnrampMoneyCustomFooter } from \"./OnrampMoneyCustomFooter\";\n\nexport const getFooter = (clientTxId: string | undefined) => {\n if (isOnrampMoney && clientTxId) {\n return <OnrampMoneyCustomFooter />;\n }\n return <DefaultFooter />;\n};\n","import { ComponentUnderlay, Icon } from \"@cede/ds\";\nimport { isCefiInfoTx } from \"@cede/types\";\nimport { CEDE_CEX_LABELS, getExchangeLogo } from \"@cede/utils\";\nimport { useDependencies } from \"../../hooks\";\nimport { Box, Typography, useTheme } from \"@mui/material\";\n\nexport const AccountLine = () => {\n const theme = useTheme();\n const { useSelectedTransaction } = useDependencies();\n const { transaction, isReceive } = useSelectedTransaction(({ transaction, isReceive }) => ({\n transaction,\n isReceive,\n }));\n\n if (!transaction) return null;\n\n const infoTx =\n isCefiInfoTx(transaction.to) && isReceive\n ? transaction.to\n : isCefiInfoTx(transaction.from)\n ? transaction.from\n : null;\n\n if (!infoTx) return null;\n\n return (\n <>\n <Typography variant={\"body2\"}>Account</Typography>\n <Box justifySelf={\"right\"} display={\"inline-flex\"} alignItems={\"center\"} gap={theme.custom.gutterMargin}>\n <ComponentUnderlay size={\"small\"}>\n <Icon\n iconUrl={getExchangeLogo(infoTx.account.exchangeId)}\n iconName={infoTx.account.exchangeId}\n iconSize={\"small\"}\n />\n </ComponentUnderlay>\n <Typography variant={\"body1\"}>{CEDE_CEX_LABELS[infoTx.account.exchangeId]}</Typography>\n </Box>\n </>\n );\n};\n","export enum DateFormat {\n DEFAULT = \"default\",\n METRICS = \"metrics\",\n}\n\nconst metricsDateOptions = {\n hour12: true,\n hour: \"numeric\" as const,\n minute: \"2-digit\" as const,\n second: \"2-digit\" as const,\n fractionalSecondDigits: 3 as const,\n timeZoneName: \"short\" as const,\n weekday: \"short\" as const,\n month: \"short\" as const,\n day: \"numeric\" as const,\n year: \"numeric\" as const,\n};\n\nexport function getRelativeDate(date: number) {\n const relativeDate = Date.now() - date;\n\n let seconds = Math.floor(relativeDate / 1000);\n\n let minutes = Math.floor(seconds / 60);\n\n const hours = Math.floor(minutes / 60);\n\n const days = Math.floor(hours / 24);\n\n seconds = seconds % 60;\n\n minutes = minutes % 60;\n\n return days ? `${days} d` : hours ? `${hours} h` : minutes ? `${minutes} min` : `${seconds} sec`;\n}\n\nexport function timestampToDate(timestamp: number, format: DateFormat = DateFormat.DEFAULT) {\n const date = new Date(timestamp);\n\n const dayStr = date.getDate().toString().padStart(2, \"0\");\n const monthStr = (date.getMonth() + 1).toString().padStart(2, \"0\");\n const year = date.getFullYear();\n\n const hoursStr = date.getHours().toString().padStart(2, \"0\");\n const minutesStr = date.getMinutes().toString().padStart(2, \"0\");\n\n switch (format) {\n case DateFormat.METRICS:\n // Format: Tue, Jan 20, 1970, 4:55:50.293 PM GMT+1\n return date.toLocaleString(\"en-US\", metricsDateOptions);\n default:\n // Format: 20/01/1970 16:55\n return `${dayStr}/${monthStr}/${year} ${hoursStr}:${minutesStr}`;\n }\n}\n\nexport function formatDateYYYYMMDD(date: Date) {\n const day = date.getDate().toString().padStart(2, \"0\");\n const month = (date.getMonth() + 1).toString().padStart(2, \"0\");\n const year = date.getFullYear();\n\n return `${year}-${month}-${day}`;\n}\n\nexport function formatDateAMPM(date: Date) {\n const hours = date.getUTCHours();\n const minutes = date.getUTCMinutes();\n const ampm = hours >= 12 ? \"PM\" : \"AM\";\n const hours12 = hours % 12 || 12;\n\n return `${hours12}:${minutes.toString().padStart(2, \"0\")} ${ampm}`;\n}\n","import { timestampToDate } from \"@cede/utils\";\nimport { useDependencies } from \"../../hooks\";\nimport { Typography } from \"@mui/material\";\n\nexport const DateLine = () => {\n const { useSelectedTransaction } = useDependencies();\n const transaction = useSelectedTransaction((state) => state.transaction);\n\n if (!transaction) return null;\n\n return (\n <>\n <Typography variant={\"body2\"}>Date</Typography>\n <Typography variant={\"body1\"} justifySelf={\"right\"}>\n {timestampToDate(transaction.from.transaction.timestamp)}\n </Typography>\n </>\n );\n};\n","import { CurrencyAmountFormatter } from \"@cede/ds\";\nimport { formatBalance } from \"@cede/utils\";\nimport { useDependencies } from \"../../hooks\";\nimport { Box, Typography, useTheme } from \"@mui/material\";\n\nexport const FeeLine = () => {\n const theme = useTheme();\n const { useSettings, useSelectedTransaction } = useDependencies();\n const transaction = useSelectedTransaction((state) => state.transaction);\n const fiatCurrency = useSettings((state) => state.currency);\n\n if (!transaction?.from.transaction.fee) return null;\n\n return (\n <>\n <Box position={\"relative\"}>\n <Typography variant={\"body2\"}>CEX fee</Typography>\n <Typography variant={\"caption\"} position={\"absolute\"} left={0} top={\"110%\"}>\n {\"(estimated)\"}\n </Typography>\n </Box>\n <Box justifySelf={\"right\"} display={\"inline-flex\"} alignItems={\"center\"} gap={theme.custom.smallGutterMargin}>\n {transaction.from.transaction.fee.refAmount ? (\n <CurrencyAmountFormatter\n amount={transaction.from.transaction.fee.refAmount ?? 0}\n colors={{\n integer: theme.palette.text.primary,\n decimal: theme.palette.text.primary,\n }}\n size={\"small\"}\n currency={fiatCurrency}\n />\n ) : null}\n <Typography variant={\"body1\"}>\n {!transaction.from.transaction.fee.amount\n ? \"-\"\n : `(${formatBalance(transaction.from.transaction.fee.amount)} ${\n transaction.from.transaction.fee.tokenSymbol\n })`}\n </Typography>\n </Box>\n </>\n );\n};\n","import { isCefiInfoTx } from \"@cede/types\";\nimport { formatBalance } from \"@cede/utils\";\nimport { useDependencies } from \"../../hooks\";\nimport { Box, Typography, useTheme } from \"@mui/material\";\n\nexport const PriceLine = () => {\n const theme = useTheme();\n const { useSettings, useSelectedTransaction, usePrice } = useDependencies();\n const transaction = useSelectedTransaction((state) => state.transaction);\n const fiatCurrency = useSettings((state) => state.currency);\n\n if (!transaction || !isCefiInfoTx(transaction.from) || !transaction.from.transaction.amount) return null;\n const price = usePrice(transaction.from.transaction.tokenSymbol);\n return (\n <>\n <Typography variant={\"body2\"}>Price</Typography>\n <Box justifySelf={\"right\"} display={\"inline-flex\"} alignItems={\"center\"} gap={theme.custom.smallGutterMargin}>\n <Typography variant={\"body1\"} justifySelf={\"right\"}>\n {`${formatBalance(transaction.from.transaction.amount)} ${\n transaction.from.transaction.tokenSymbol\n } = ${formatBalance(transaction.from.transaction.amount * price, { roundForFiat: true })} ${\n fiatCurrency.symbol\n }`}\n </Typography>\n </Box>\n </>\n );\n};\n","import { CopyIconButton } from \"@cede/ds\";\nimport { isDefiInfoTx } from \"@cede/types\";\nimport { cropTextInMiddle, DEFAULT_UNDEFINED_STRING } from \"@cede/utils\";\nimport { useDependencies } from \"../../hooks\";\nimport { Box, Typography, useTheme } from \"@mui/material\";\n\nexport const TxHashLine = () => {\n const theme = useTheme();\n const { useSelectedTransaction } = useDependencies();\n const transaction = useSelectedTransaction((state) => state.transaction);\n\n if (!transaction || !isDefiInfoTx(transaction.to) || !transaction.to.account.address) return null;\n\n return (\n <>\n <Typography variant={\"body2\"}>Transaction hash</Typography>\n <Box\n sx={{\n display: \"inline-flex\",\n alignItems: \"center\",\n justifySelf: \"right\",\n gap: theme.custom.smallGutterMargin,\n }}\n >\n {transaction.to.transaction.transactionHash === DEFAULT_UNDEFINED_STRING ? (\n <Typography variant={\"body1\"}>Waiting CEX...</Typography>\n ) : (\n <>\n <Typography variant={\"body1\"} justifySelf={\"right\"}>\n {cropTextInMiddle(transaction.to.transaction.transactionHash, 10)}\n </Typography>\n <CopyIconButton\n size=\"small\"\n sx={{\n color: \"text.primary\",\n }}\n text={transaction.to.transaction.transactionHash}\n />\n </>\n )}\n </Box>\n </>\n );\n};\n","import { PropsWithChildren } from \"react\";\nimport { Box, useTheme } from \"@mui/material\";\n\nexport const TransactionInformationsBlock = ({ children }: PropsWithChildren) => {\n const theme = useTheme();\n return (\n <Box\n display={\"grid\"}\n gridTemplateColumns={\"repeat(2, auto)\"}\n gap={theme.custom.gutterMargin}\n alignItems={\"center\"}\n justifyItems={\"left\"}\n paddingY={theme.custom.gutterMargin}\n sx={{\n \"&:not(:last-of-type)\": {\n borderBottom: `1px solid ${theme.palette.cedeComponentHr}`,\n },\n }}\n >\n {children}\n </Box>\n );\n};\n","import { TransactionStatusCardLite } from \"@cede/ds\";\nimport { Any, isCefiInfoTx } from \"@cede/types\";\nimport { formatBalance } from \"@cede/utils\";\nimport { useDependencies } from \"../../../hooks\";\n\nexport const TransactionStatus = () => {\n const { useSettings, useSelectedTransaction } = useDependencies();\n const transaction = useSelectedTransaction((state: Any) => state.transaction);\n const isReceive = useSelectedTransaction((state: Any) => state.isReceive);\n const isTrade = useSelectedTransaction((state: Any) => state.isTrade);\n const isSend = useSelectedTransaction((state: Any) => state.isSend);\n const fiatCurrency = useSettings((state: Any) => state.currency);\n\n if (!transaction) return null;\n\n if (isSend && isCefiInfoTx(transaction.from)) {\n return (\n <TransactionStatusCardLite\n content={formatBalance(transaction.from.transaction.amount) + \" \" + transaction.from.transaction.tokenSymbol}\n amountValue={transaction.from.transaction.refAmount ?? 0}\n assetTokenSymbol={transaction.from.transaction.tokenSymbol}\n currency={fiatCurrency}\n transactionType={\"send\"}\n />\n );\n }\n\n if (isReceive && isCefiInfoTx(transaction.to)) {\n return (\n <TransactionStatusCardLite\n content={formatBalance(transaction.to.transaction.amount) + \" \" + transaction.to.transaction.tokenSymbol}\n amountValue={transaction.to.transaction.refAmount ?? 0}\n assetTokenSymbol={transaction.to.transaction.tokenSymbol}\n currency={fiatCurrency}\n transactionType={\"receive\"}\n />\n );\n }\n\n if (isTrade && isCefiInfoTx(transaction.from) && isCefiInfoTx(transaction.to)) {\n return (\n <TransactionStatusCardLite\n content={formatBalance(transaction.to.transaction.amount, {\n maxDigits: 10,\n })}\n amountValue={transaction.from.transaction.amount}\n assetTokenSymbol={transaction.to.transaction.tokenSymbol}\n cryptoCurrency={transaction.from.transaction.tokenSymbol}\n cryptoCurrencyTo={transaction.to.transaction.tokenSymbol}\n transactionType=\"trade\"\n />\n );\n }\n\n return null;\n};\n","import { Button } from \"@cede/ds\";\nimport { TxStatus } from \"@cede/types\";\nimport { useDependencies } from \"../../../hooks\";\nimport { ArrowForward } from \"@mui/icons-material\";\nimport { Box, useTheme } from \"@mui/material\";\n\nexport const TxExplorerLink = () => {\n const theme = useTheme();\n const { useSelectedTransaction } = useDependencies();\n const transaction = useSelectedTransaction((state) => state.transaction);\n\n // Not implemented yet\n return (\n <Box\n flex={\"1\"}\n display={\"flex\"}\n flexDirection={\"column\"}\n justifyContent={\"flex-end\"}\n width={\"100%\"}\n alignItems={\"center\"}\n paddingBottom={theme.custom.bigGutterMargin}\n >\n {transaction?.from.transaction.status === TxStatus.OK && false && (\n <Box>\n <Button variant={\"outlined\"}>\n <Box display={\"flex\"} alignItems={\"center\"} gap={theme.custom.smallGutterMargin}>\n <Box component={\"span\"}>View on Tx Explorer </Box>\n <ArrowForward\n sx={{\n width: theme.custom.iconSize.small,\n height: theme.custom.iconSize.small,\n }}\n />\n </Box>\n </Button>\n </Box>\n )}\n </Box>\n );\n};\n","\"use client\";\n\nimport createSvgIcon from './utils/createSvgIcon';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon( /*#__PURE__*/_jsx(\"path\", {\n d: \"M12 4V1L8 5l4 4V6c3.31 0 6 2.69 6 6 0 1.01-.25 1.97-.7 2.8l1.46 1.46C19.54 15.03 20 13.57 20 12c0-4.42-3.58-8-8-8m0 14c-3.31 0-6-2.69-6-6 0-1.01.25-1.97.7-2.8L5.24 7.74C4.46 8.97 4 10.43 4 12c0 4.42 3.58 8 8 8v3l4-4-4-4z\"\n}), 'Loop');","import { useEffect } from \"react\";\nimport { Button, ShareOnTwitter, useNavBar } from \"@cede/ds\";\nimport { TxStatus, ViewEnvironment, isCefiInfoTx, isDefiInfoTx } from \"@cede/types\";\nimport { CEDE_CEX_LABELS, TweetDataKey, WIDGET_ROUTES, tweets } from \"@cede/utils\";\nimport { HelpLink, Page } from \"../..\";\nimport { AccountLine } from \"../../components/Transaction/AccountLine\";\nimport { DateLine } from \"../../components/Transaction/DateLine\";\nimport { ErrorLine } from \"../../components/Transaction/ErrorLine\";\nimport { FeeLine } from \"../../components/Transaction/FeeLine\";\nimport { NetworkLine } from \"../../components/Transaction/NetworkLine\";\nimport { PriceLine } from \"../../components/Transaction/PriceLine\";\nimport { RecipientAddressLine } from \"../../components/Transaction/RecipientAddressLine\";\nimport { StatusLine } from \"../../components/Transaction/StatusLine\";\nimport { TxHashLine } from \"../../components/Transaction/TxHashLine\";\nimport { useDependencies } from \"../../hooks/useDependencies\";\nimport { isOnrampMoney } from \"../CompletedTransaction/utils\";\nimport { TransactionInformationsBlock } from \"./ui/TransactionInformationsBlock\";\nimport { TransactionStatus } from \"./ui/TransactionStatus\";\nimport { TxExplorerLink } from \"./ui/TxExplorerLink\";\nimport { Loop } from \"@mui/icons-material\";\nimport { Box, Typography, useTheme } from \"@mui/material\";\n\nexport const CompletedTransactionDetails = () => {\n const theme = useTheme();\n const { setIsDisplayed, setGoBack, setCenter, setRightSide } = useNavBar();\n const {\n useSelectedTransaction,\n useSendStore,\n useNavigate,\n useViewEnvironment,\n useTriggerUpdateTransaction,\n useShareOnTwitter,\n } = useDependencies();\n const transaction = useTriggerUpdateTransaction();\n const isReceive = useSelectedTransaction((state) => state.isReceive);\n const isTrade = useSelectedTransaction((state) => state.isTrade);\n const isSend = useSelectedTransaction((state) => state.isSend);\n const { setInitialProps } = useSendStore((state) => ({\n setInitialProps: state.setInitialProps,\n }));\n const navigate = useNavigate();\n const { environment } = useViewEnvironment();\n\n const goBack = () => {\n navigate(-1);\n };\n\n const { networkName, partnerName } = useShareOnTwitter(transaction);\n\n const transactionStatus = transaction?.from.transaction.status;\n\n const onRepeat = () => {\n if (transaction && isCefiInfoTx(transaction.from)) {\n setInitialProps({\n tokenSymbol: transaction?.from.transaction.tokenSymbol,\n network: transaction?.from.account.network ?? \"\",\n address: isDefiInfoTx(transaction.to) ? transaction?.to.account.address : \"\",\n amount: transaction?.from.transaction.amount.toString(),\n exchangeIds: [transaction.from.account.exchangeId],\n });\n }\n let path = `/${isTrade ? \"trade\" : \"send\"}`;\n\n if (environment === ViewEnvironment.WIDGET) {\n path = WIDGET_ROUTES.ACTION_ROUTE;\n }\n navigate(path);\n };\n\n const definePageTitle = () => {\n if (isTrade) return \"Trade\";\n if (isSend) return \"Withdrawal\";\n if (isReceive) return \"Deposit\";\n return \"\";\n };\n\n const getTweetContent = () => {\n if (isTrade) return tweets.TRADE;\n if (isSend) return partnerName ? tweets.SEND_WITH_PARTNER : tweets.SEND_WITHOUT_PARTNER;\n return \"\";\n };\n\n const getTweetMappingTable = () => {\n if (transaction && isCefiInfoTx(transaction.from)) {\n return {\n [TweetDataKey.CEX_LABEL]: CEDE_CEX_LABELS[transaction.from.account.exchangeId],\n [TweetDataKey.NETWORK]: networkName,\n [TweetDataKey.PARTNER]: partnerName,\n };\n }\n return {};\n };\n\n useEffect(() => {\n setIsDisplayed(true);\n setGoBack(goBack);\n setCenter(\n <Typography component=\"h1\" variant=\"h3\" margin={0}>\n {definePageTitle()}\n </Typography>,\n );\n\n return () => {\n setRightSide(null);\n };\n }, []);\n\n if (!transaction) return null;\n\n useEffect(() => {\n // @TODO: Implement this for the trades, including the store\n if (transaction.from.transaction.status === TxStatus.OK && isSend) {\n setRightSide(\n <Box display=\"flex\" alignItems=\"center\">\n <Button\n variant={\"text\"}\n sx={{\n display: \"inline-flex\",\n alignItems: \"center\",\n gap: theme.custom.smallGutterMargin,\n mr: theme.custom.smallGutterMargin,\n }}\n onClick={onRepeat}\n >\n <Loop\n sx={{\n width: theme.custom.iconSize.small,\n height: theme.custom.iconSize.small,\n }}\n />\n <Box component={\"span\"}>Repeat</Box>\n </Button>\n {environment !== ViewEnvironment.WIDGET && <HelpLink />}\n </Box>,\n );\n } else {\n if (environment !== ViewEnvironment.WIDGET) {\n setRightSide(<HelpLink />);\n }\n }\n }, [transaction.from.transaction.status, isSend, isTrade]);\n\n return (\n <Page displayFlex sx={{ overflowY: \"scroll\" }}>\n <Box>\n <TransactionStatus />\n\n <TransactionInformationsBlock>\n <AccountLine />\n <StatusLine />\n <ErrorLine />\n <DateLine />\n </TransactionInformationsBlock>\n\n <TransactionInformationsBlock>\n <PriceLine />\n <NetworkLine />\n <RecipientAddressLine />\n {isDefiInfoTx(transaction.to) && <TxHashLine />}\n </TransactionInformationsBlock>\n\n <TransactionInformationsBlock>\n <FeeLine />\n </TransactionInformationsBlock>\n </Box>\n\n <TxExplorerLink />\n\n {(isTrade || isSend) &&\n (transactionStatus === TxStatus.OK || transactionStatus === TxStatus.PENDING) &&\n !isOnrampMoney && <ShareOnTwitter content={getTweetContent()} mappingTable={getTweetMappingTable()} />}\n </Page>\n );\n};\n","import { useMemo } from \"react\";\nimport { ApiPermissions, Transaction, ViewEnvironment, isCefiInfoTx } from \"@cede/types\";\nimport { STORE_ROUTES, TWO_KEYS_PERMISSIONS_WITH_PROXY, WIDGET_ROUTES } from \"@cede/utils\";\nimport { useDependencies } from \"../../hooks\";\nimport { useQuery } from \"@tanstack/react-query\";\n\nexport const useFixInvalidPermissionsTutorial = ({ transaction }: { transaction: Transaction | null }) => {\n const { useExtensionAsset, useViewEnvironment, useNavigate, backgroundHandler, useAccounts, useSelectedTransaction } =\n useDependencies();\n const { environment } = useViewEnvironment();\n const { resetError } = useSelectedTransaction((state) => ({\n resetError: state.resetError,\n }));\n\n const { accountsByIds } = useAccounts();\n const account = useMemo(() => {\n if (transaction && !isCefiInfoTx(transaction.from)) {\n if (environment === ViewEnvironment.WIDGET) navigate(WIDGET_ROUTES.ACTION_ROUTE);\n else navigate(STORE_ROUTES.SEND_ROUTE);\n }\n if (transaction && isCefiInfoTx(transaction.from)) return accountsByIds[transaction.from.account.accountId];\n return;\n }, [transaction]);\n\n const navigate = useNavigate();\n const { asset: mdContent } = useExtensionAsset({\n path: account?.exchangeId\n ? `tutorials/fix-invalid-permissions/${account.exchangeId}/${account.exchangeId}.md`\n : undefined,\n });\n\n const { data: publicApiKey, isFetching: isFetchingPublicApiKey } = useQuery({\n queryKey: [\"publicApiKey\", account?.exchangeId],\n queryFn: async () => {\n if (!account) return;\n const publicKeys = await backgroundHandler.getAccountPublicKeys({\n accountId: account.id,\n });\n\n let permission = ApiPermissions.READ;\n if (TWO_KEYS_PERMISSIONS_WITH_PROXY[account?.exchangeId]) {\n const proxiedPermission = TWO_KEYS_PERMISSIONS_WITH_PROXY[account.exchangeId]?.find((key) => publicKeys[key]);\n if (proxiedPermission) permission = proxiedPermission; // for 2 keys system, we use proxied permission for withdrawals. The user will need to update the proxied key.\n }\n return publicKeys[permission]?.apiPublic;\n },\n refetchOnWindowFocus: false,\n enabled: !!backgroundHandler?.isReady && !!account,\n gcTime: Infinity,\n staleTime: Infinity,\n });\n\n const onUpdated = () => {\n resetError();\n if (environment === ViewEnvironment.WIDGET) navigate(WIDGET_ROUTES.ACTION_ROUTE);\n else navigate(STORE_ROUTES.SEND_ROUTE);\n };\n\n return {\n tutorialType: \"fix-invalid-permissions/\" + account?.exchangeId,\n mdContent: mdContent ?? \"\",\n onUpdated,\n publicApiKey,\n isFetchingPublicApiKey,\n environment,\n account,\n };\n};\n","import { useEffect } from \"react\";\nimport { Button, useNavBar } from \"@cede/ds\";\nimport { ApiPermissions, ViewEnvironment } from \"@cede/types\";\nimport { CEDE_CEX_LABELS, TWO_KEYS_PERMISSIONS_WITHOUT_PROXY } from \"@cede/utils\";\nimport { HelpLink, MainFooter, Page, TutorialReader } from \"../../components\";\nimport { useDependencies } from \"../../hooks\";\nimport { useFixInvalidPermissionsTutorial } from \"./useFixInvalidPermissionsTutorial\";\nimport { Box, Fade, Typography } from \"@mui/material\";\n\nexport const FixInvalidPermissionsTutorial = () => {\n const { useCompletedTransaction, useNavigate } = useDependencies();\n const { transaction } = useCompletedTransaction();\n const navigate = useNavigate();\n const { setIsDisplayed, setGoBack, setCenter, setRightSide, setLeftSide } = useNavBar();\n\n const { mdContent, tutorialType, onUpdated, publicApiKey, environment, account } = useFixInvalidPermissionsTutorial({\n transaction,\n });\n\n const goBack = () => navigate(-1);\n\n useEffect(() => {\n setIsDisplayed(true);\n if (goBack) setGoBack(goBack);\n else setLeftSide(null);\n setCenter(\n <Typography component=\"h1\" variant=\"h3\" margin={0}>\n Fix missing permissions\n </Typography>,\n );\n\n if (environment !== ViewEnvironment.WIDGET) {\n setRightSide(<HelpLink />);\n } else {\n setRightSide(null);\n }\n }, []);\n\n const filterPermissions = (permissions: ApiPermissions[]) => {\n if (!account) return permissions;\n if (TWO_KEYS_PERMISSIONS_WITHOUT_PROXY[account.exchangeId])\n return permissions.filter((p) => TWO_KEYS_PERMISSIONS_WITHOUT_PROXY[account.exchangeId]?.includes(p));\n else return permissions;\n };\n\n return (\n <Fade in={true}>\n <Page displayFlex overflow=\"auto\">\n <Box>\n {account && (\n <TutorialReader\n folder={tutorialType}\n mdContent={mdContent}\n permissions={filterPermissions(account.permissions)}\n accountPermissions={account.permissions || []}\n exchangeId={CEDE_CEX_LABELS[account.exchangeId] || account.exchangeId}\n data={{\n publicAPIKey: publicApiKey,\n }}\n />\n )}\n </Box>\n <MainFooter>\n <Button\n data-testid=\"choose-cex-button\"\n height=\"tall\"\n variant=\"contained\"\n size=\"large\"\n type=\"submit\"\n fullWidth\n onClick={onUpdated}\n >\n Done\n </Button>\n </MainFooter>\n </Page>\n </Fade>\n );\n};\n","import { Icon } from \"@cede/ds\";\nimport { cropTextInMiddle, forgeTokenURL } from \"@cede/utils\";\nimport { SingleTransactionProps } from \"./type\";\nimport ArrowForwardIcon from \"@mui/icons-material/ArrowForward\";\nimport { Box, Typography, useTheme } from \"@mui/material\";\n\nexport const SingleTransaction = ({ transaction, number, isLast }: SingleTransactionProps) => {\n const theme = useTheme();\n\n const TopLine = () => {\n if (transaction.type === \"order\") {\n return (\n <>\n {transaction.from.amount}{\" \"}\n <Icon\n iconUrl={forgeTokenURL(transaction.from.tokenSymbol)}\n iconName={transaction.from.tokenSymbol}\n sx={{ ml: \"12px\", mr: \"4px\" }}\n iconSize={\"medium\"}\n />{\" \"}\n {transaction.from.tokenSymbol}\n <ArrowForwardIcon\n sx={{ mx: \"5px\", color: theme.palette.text.secondary, width: \"0.7em\", height: \"0.7em\" }}\n />{\" \"}\n {transaction.to.amount}{\" \"}\n <Icon\n iconUrl={forgeTokenURL(transaction.to.tokenSymbol)}\n iconName={transaction.to.tokenSymbol}\n iconSize={\"medium\"}\n sx={{ ml: \"12px\", mr: \"4px\" }}\n />{\" \"}\n {transaction.to.tokenSymbol}\n </>\n );\n }\n\n if (transaction.type === \"withdrawal\") {\n return (\n <>\n Send {transaction.from.amount}{\" \"}\n <Icon\n iconUrl={forgeTokenURL(transaction.from.tokenSymbol)}\n iconName={transaction.from.tokenSymbol}\n sx={{ mx: \"4px\" }}\n iconSize={\"medium\"}\n />{\" \"}\n {transaction.from.tokenSymbol} to {transaction.to.network?.label} Network\n <Icon\n iconUrl={transaction.to.network?.img || \"\"}\n iconName={transaction.from.tokenSymbol}\n iconSize={\"medium\"}\n sx={{ ml: \"12px\", mx: \"4px\" }}\n />\n </>\n );\n }\n\n return null;\n };\n\n const BottomLine = () => {\n if (transaction.type === \"order\") {\n return (\n <>\n Trade on {transaction.account?.label}{\" \"}\n <Icon\n iconUrl={transaction.account?.img || \"\"}\n iconName={\"Binance\"}\n customSize={\"10px\"}\n sx={{ ml: \"8px\", mr: \"2px\" }}\n />\n </>\n );\n }\n\n if (transaction.type === \"withdrawal\") {\n return (\n <>\n From {transaction.account?.label} to {cropTextInMiddle(transaction.to.address || \"\", 8)} on{\" \"}\n {transaction.to.network?.label} Network\n </>\n );\n }\n\n return null;\n };\n\n return (\n <Box width=\"100%\">\n <Box\n sx={{\n display: \"flex\",\n alignItems: \"center\",\n }}\n >\n <Typography\n sx={{\n \"display\": \"flex\",\n \"alignItems\": \"center\",\n \"justifyContent\": \"center\",\n \"borderRadius\": \"100%\",\n \"backgroundColor\": transaction.isExecuted ? theme.palette.primary.main : theme.palette.text.secondary,\n \"height\": \"30px\",\n \"width\": \"30px\",\n \"color\": theme.palette.background.darkPaper,\n \"fontWeight\": \"bold\",\n \"position\": \"relative\",\n \"&::before\": {},\n \"flexShrink\": 0,\n }}\n >\n {number}\n </Typography>\n <Box\n sx={{\n paddingLeft: theme.custom.smallGutterMargin,\n }}\n >\n <Typography\n sx={{\n flexWrap: \"wrap\",\n borderRadius: \"100%\",\n display: \"flex\",\n alignItems: \"center\",\n fontSize: \"14px\",\n lineHeight: \"1.2\",\n }}\n >\n <TopLine />\n </Typography>\n <Typography\n sx={{\n borderRadius: \"100%\",\n display: \"flex\",\n alignItems: \"center\",\n fontSize: \"12px\",\n color: theme.palette.text.secondary,\n mt: \"2px\",\n }}\n >\n <BottomLine />\n </Typography>\n </Box>\n </Box>\n {!isLast && (\n <Box\n sx={{\n height: \"32px\",\n width: \"2px\",\n backgroundColor: transaction.isExecuted ? theme.palette.primary.main : theme.palette.text.secondary,\n ml: \"13px\",\n my: \"10px\",\n }}\n ></Box>\n )}\n </Box>\n );\n};\n","import { useEffect, useRef } from \"react\";\nimport { Button, useNavBar } from \"@cede/ds\";\nimport { ViewEnvironment, userFacingMessages } from \"@cede/types\";\nimport { WIDGET_ROUTES, formatBalance } from \"@cede/utils\";\nimport { SingleTransaction } from \"../../components/SingleTransaction/SingleTransaction\";\nimport { isMultipleTransactionsPreparedOrder } from \"../../hooks/useMultipleTransactions\";\nimport {\n MultipleTransactionsPreparedOrder,\n MultipleTransactionsPreparedWithdrawal,\n} from \"../../hooks/useMultipleTransactionsStore\";\nimport { HelpLink, MainFooter, Page, useDependencies } from \"@cedelabs/react-utils\";\nimport { Box, Typography } from \"@mui/material\";\n\ntype PresentationalMultipleTransactionsProps = {\n goBack: () => void;\n environment: ViewEnvironment | null;\n transactions: (MultipleTransactionsPreparedOrder | MultipleTransactionsPreparedWithdrawal)[];\n txTracker: number;\n isLoading: boolean;\n onContinue: () => void;\n};\n\nexport const PresentationalMultipleTransactions = ({\n goBack,\n environment,\n transactions,\n txTracker,\n isLoading,\n onContinue,\n}: PresentationalMultipleTransactionsProps) => {\n const { setGeneral, setGoBack, setRightSide } = useNavBar();\n\n useEffect(() => {\n setGeneral({\n leftSide: null,\n center: <Typography>Confirm Transactions</Typography>,\n rightSide: <div />,\n isDisplayed: true,\n });\n if (goBack) {\n setGoBack(goBack);\n }\n\n if (environment !== ViewEnvironment.WIDGET) {\n setRightSide(<HelpLink />);\n } else {\n setRightSide(null);\n }\n }, []);\n\n return (\n <Page displayFlex>\n <Box height=\"100%\" display=\"flex\" flexDirection=\"column\" justifyContent=\"center\" alignItems=\"center\">\n {transactions.map((tx, index) => {\n const number = String(index + 1);\n if (isMultipleTransactionsPreparedOrder(tx)) {\n return (\n <SingleTransaction\n key={index}\n transaction={{\n from: {\n amount: formatBalance(tx.from.amount),\n tokenSymbol: tx.from.tokenSymbol,\n },\n to: {\n amount: formatBalance(tx.to.amount),\n tokenSymbol: tx.to.tokenSymbol,\n },\n isExecuted: tx.isExecuted,\n type: \"order\",\n account: {\n label: tx.exchange.label,\n img: tx.exchange.img,\n },\n }}\n number={number}\n isLast={index === transactions.length - 1}\n />\n );\n }\n return (\n <SingleTransaction\n key={index}\n transaction={{\n from: {\n amount: formatBalance(tx.request.amount),\n tokenSymbol: tx.request.tokenSymbol,\n },\n to: {\n amount: formatBalance(tx.request.amount),\n tokenSymbol: tx.request.tokenSymbol,\n network: tx.network,\n address: tx.request.address,\n },\n isExecuted: tx.isExecuted,\n type: \"withdrawal\",\n account: {\n label: tx.exchange.label,\n img: tx.exchange.img,\n },\n }}\n number={number}\n isLast={index === transactions.length - 1}\n />\n );\n })}\n </Box>\n\n <MainFooter>\n <Button height={\"tall\"} variant={\"contained\"} fullWidth onClick={onContinue} disabled={isLoading}>\n {txTracker >= transactions.length\n ? userFacingMessages.WIDGETS.TRADE_SEND.FINISH\n : userFacingMessages.WIDGETS.TRADE_SEND.CONFIRM_TX(txTracker + 1)}\n </Button>\n </MainFooter>\n </Page>\n );\n};\n\nexport const MultipleTransactionsForTrade = () => {\n const { useViewEnvironment, useMultipleTransactions, useNavigate, useTradeForm, useTradePath } = useDependencies();\n const navigate = useNavigate();\n const { environment } = useViewEnvironment();\n const { tradeForm, resetForm } = useTradeForm();\n const { tradePath } = useTradePath({\n enabled: true,\n accountId: tradeForm.selectedAccount?.value || \"\",\n activeWithdrawal: false,\n fromToken: tradeForm.tokenFrom?.value || \"\",\n toToken: tradeForm.tokenTo?.value || \"\",\n });\n const wantsToGoBack = useRef(false);\n\n const {\n transactions,\n txTracker,\n executeNextTransaction,\n isTxLoading,\n clearState,\n startProcess,\n hasStartedTheProcess,\n } = useMultipleTransactions({\n accountId: tradeForm.selectedAccount?.value || \"\",\n tradePath,\n fromTokenAmount: tradeForm.amountFrom || \"\",\n onFinish: () => {\n clearState();\n const config = tradeForm.initialProps;\n if (!config.keepPreviousTradeValues) resetForm();\n navigate(WIDGET_ROUTES.COMPLETED_TRANSACTION_ROUTE);\n },\n });\n\n const goBack = () => {\n clearState();\n resetForm();\n wantsToGoBack.current = true;\n };\n\n useEffect(() => {\n startProcess();\n }, []);\n\n // We need to wait for the state to be cleared before navigating back\n useEffect(() => {\n if (!hasStartedTheProcess && wantsToGoBack.current) {\n return navigate(WIDGET_ROUTES.ACTION_ROUTE);\n }\n }, [hasStartedTheProcess]);\n\n return (\n <PresentationalMultipleTransactions\n goBack={goBack}\n environment={environment}\n transactions={transactions}\n txTracker={txTracker}\n isLoading={isTxLoading}\n onContinue={executeNextTransaction}\n />\n );\n};\n\nexport const MultipleTransactionsForSend = () => {\n const { useViewEnvironment, useMultipleTransactions, useNavigate, useSendStore, useTradePath, useLoading } =\n useDependencies();\n const addBigPendingRequest = useLoading((state) => state.addBigPendingRequest);\n const removeBigPendingRequest = useLoading((state) => state.removeBigPendingRequest);\n const navigate = useNavigate();\n const { environment } = useViewEnvironment();\n\n const form = useSendStore();\n const { tradePath } = useTradePath({\n enabled: true,\n accountId: form.fromAccount?.value || \"\",\n activeWithdrawal: true,\n fromToken: form.currency?.value || \"\",\n toToken: form.destinationCurrency?.value || \"\",\n network: form.network?.value,\n });\n const { transactions, txTracker, executeNextTransaction, isTxLoading, clearState, loadTransactions, startProcess } =\n useMultipleTransactions({\n accountId: form.fromAccount?.value || \"\",\n tradePath,\n fromTokenAmount: form.assetValue || \"\",\n network: form.network || undefined,\n activeWithdrawal: true,\n recipientAddress: form.recipientAddress || \"\",\n whitelistedAddress: form.whitelistedAddress?.key,\n withdrawalTag: form.tagValue,\n onFinish: () => {\n clearState();\n form.reset();\n navigate(WIDGET_ROUTES.COMPLETED_TRANSACTION_ROUTE);\n },\n });\n\n const goBack = () => {\n clearState();\n return navigate(WIDGET_ROUTES.ACTION_ROUTE);\n };\n\n useEffect(() => {\n if (!tradePath) return;\n addBigPendingRequest();\n loadTransactions(transactions.filter((tx) => tx.isExecuted)).finally(() => {\n removeBigPendingRequest();\n });\n }, [tradePath]);\n\n useEffect(() => {\n startProcess();\n }, []);\n\n return (\n <PresentationalMultipleTransactions\n goBack={goBack}\n environment={environment}\n transactions={transactions}\n txTracker={txTracker}\n isLoading={isTxLoading}\n onContinue={executeNextTransaction}\n />\n );\n};\n","import { WIDGET_ROUTES } from \"@cede/utils\";\nimport { DefaultPage } from \"../components/DefaultPage\";\nimport { Login } from \"../components/Login\";\nimport { Send } from \"../components/Send\";\nimport { authenticationMiddleware } from \"./authenticationMiddleware\";\nimport { chromiumMiddleware } from \"./chromiumMiddleware\";\nimport { initMiddleware } from \"./initMiddleware\";\nimport {\n AppRoute,\n CompletedTransaction,\n CompletedTransactionDetails,\n FixInvalidPermissionsTutorial,\n MultipleTransactionsForSend,\n} from \"@cedelabs/react-utils\";\n\nexport const SEND_ROUTES: AppRoute[] = [\n {\n wrapper: chromiumMiddleware,\n routes: [\n {\n wrapper: initMiddleware,\n routes: [\n {\n path: WIDGET_ROUTES.DEFAULT_ROUTE,\n element: DefaultPage,\n },\n { path: WIDGET_ROUTES.LOGIN, element: Login },\n {\n wrapper: authenticationMiddleware,\n routes: [\n {\n path: WIDGET_ROUTES.ACTION_ROUTE,\n element: Send,\n },\n { path: WIDGET_ROUTES.COMPLETED_TRANSACTION_ROUTE, element: CompletedTransaction },\n { path: WIDGET_ROUTES.COMPLETED_TRANSACTION_DETAILS_ROUTE, element: CompletedTransactionDetails },\n { path: WIDGET_ROUTES.FIX_INVALID_PERMISSIONS_TUTORIAL, element: FixInvalidPermissionsTutorial },\n { path: WIDGET_ROUTES.MULTIPLE_TRANSACTIONS, element: MultipleTransactionsForSend },\n ],\n },\n ],\n },\n ],\n },\n];\n","import { useEffect, useState } from \"react\";\nimport { Link } from \"react-router-dom\";\nimport { Logo, LogoSizeEnum, useNavBar } from \"@cede/ds\";\nimport { CEDE_STORE_URL } from \"@cede/utils\";\nimport { useDependencies } from \"../../hooks/useDependencies\";\nimport { PresentationalSend } from \"@cedelabs/react-utils\";\nimport { Box, useTheme } from \"@mui/material\";\nimport { CedeOnboardingModal } from \"../../features/CedeOnboardingModal\";\n\nexport const Send = () => {\n const { useSend, widgetProps } = useDependencies();\n const theme = useTheme();\n const [isOnboardingModalOpened, setIsOnboardingModalOpened] = useState(false);\n const controller = useSend({\n onSubmitDemo: () => setIsOnboardingModalOpened(true),\n });\n const { setTitle, setIsDisplayed, setLeftSide } = useNavBar();\n const { navbarLogo } = widgetProps;\n\n useEffect(() => {\n setLeftSide(\n navbarLogo !== undefined ? (\n navbarLogo\n ) : (\n <Link to={CEDE_STORE_URL} target=\"_blank\">\n <Logo size={LogoSizeEnum.SMALL} />\n </Link>\n ),\n );\n setIsDisplayed(true);\n setTitle(\"Send\");\n }, [navbarLogo]);\n\n return (\n <Box\n display={\"flex\"}\n flexDirection=\"column\"\n alignItems={\"stretch\"}\n gap={theme.custom.gutterMargin}\n paddingTop={theme.custom.gutterMargin}\n justifyContent={\"space-between\"}\n flex={1}\n height=\"calc(100% - 60px)\"\n >\n <CedeOnboardingModal open={isOnboardingModalOpened} exit={() => setIsOnboardingModalOpened(false)} />\n <PresentationalSend controller={controller} disableAddressBook={true} />\n </Box>\n );\n};\n","import { Routes } from \"react-router-dom\";\nimport root from \"react-shadow/emotion\";\nimport { SendWidgetProps, WidgetType } from \"@cede/types\";\nimport { Container } from \"../components/Container\";\nimport { Providers } from \"../providers\";\nimport { renderRoutes } from \"../routes/renderRoutes\";\nimport { SEND_ROUTES } from \"../routes/sendRoutes\";\nimport { getUseMultipleTransactionsStore } from \"@cedelabs/react-utils/src/hooks/useMultipleTransactionsStore\";\n\nexport const CedeSend = (widgetProps: SendWidgetProps = {}) => {\n return (\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n <root.div>\n <Providers\n dependencies={{\n widgetProps,\n widgetType: WidgetType.SEND,\n useMultipleTransactionsStore: getUseMultipleTransactionsStore(WidgetType.SEND),\n }}\n >\n <Container>\n <Routes>{renderRoutes(SEND_ROUTES)}</Routes>\n </Container>\n </Providers>\n </root.div>\n );\n};\n","import { ValidationTextFieldWithIcon } from \"@cede/ds\";\nimport { formatNumberAsString, unformatNumberAsString } from \"@cede/utils\";\nimport { Box, Tooltip, tooltipClasses, Typography, useTheme } from \"@mui/material\";\n\ntype LimitPriceProps = {\n priceSymbol: string;\n limitPrice: string;\n price: string;\n setLimitPrice: (price: string) => void;\n};\n\nexport function LimitPrice({ priceSymbol, limitPrice, price, setLimitPrice }: LimitPriceProps) {\n const theme = useTheme();\n const unformattedLimitPrice = unformatNumberAsString(limitPrice);\n const unfornattedPrice = unformatNumberAsString(price);\n const percentageDifference =\n price !== \"0\"\n ? ((Number(unformattedLimitPrice || 0) - Number(unfornattedPrice || 0)) / Number(unfornattedPrice || 0)) * 100\n : 0;\n\n return (\n <Box display=\"flex\" gap={theme.spacing()} marginTop={theme.spacing(1.5)}>\n <Tooltip\n title={\n <Typography variant=\"caption\" color={theme.palette.text.primary} fontWeight={\"bold\"} fontSize={\"0.8rem\"}>\n {percentageDifference > 0 ? \"+\" : \"\"} {percentageDifference.toFixed(2)}%\n </Typography>\n }\n arrow\n placement=\"top\"\n PopperProps={{\n disablePortal: true,\n sx: {\n [`& .${tooltipClasses.tooltip}`]: {\n marginTop: \"6px!important\",\n },\n },\n }}\n >\n <Box flex={1} width={\"100%\"}>\n <ValidationTextFieldWithIcon\n label=\"Price\"\n value={limitPrice}\n handleChange={(e) => {\n setLimitPrice(formatNumberAsString(e.target.value));\n }}\n validate={() => ({ color: \"success\" })}\n sx={{\n flex: 1,\n width: \"100%\",\n }}\n icon={<Typography variant=\"body1\">{priceSymbol}</Typography>}\n />\n </Box>\n </Tooltip>\n\n <ValidationTextFieldWithIcon\n label=\"Actual price\"\n value={price}\n validate={() => ({ color: \"success\" })}\n sx={{\n flex: 1,\n width: \"auto\",\n }}\n disabled\n icon={<Typography variant=\"body1\">{priceSymbol}</Typography>}\n />\n </Box>\n );\n}\n","import { Button } from \"@cede/ds\";\nimport { userFacingMessages } from \"@cede/types\";\nimport { firstLetterToUpperCase } from \"@cede/utils\";\nimport { Box, Fade, Modal, Typography, useTheme } from \"@mui/material\";\n\nexport type TradeRouteInfoModalProps = {\n id?: string;\n open: boolean;\n setOpen: (open: boolean) => void;\n tradePath: string;\n cexName: string;\n tokenFrom: string;\n tokenTo: string;\n};\n\nexport function TradeRouteInfoModal({\n id,\n open,\n setOpen,\n tradePath,\n tokenFrom,\n tokenTo,\n cexName,\n}: TradeRouteInfoModalProps) {\n const theme = useTheme();\n\n return (\n <Modal\n open={open}\n onClose={() => setOpen(false)}\n sx={{\n position: \"absolute\",\n }}\n closeAfterTransition\n disablePortal={true}\n >\n <Fade in={open} timeout={300}>\n <Box\n data-testid={`${id || \"\"}-permission-changed-modal`}\n sx={{\n \"width\": `calc(${theme.custom.storeSize.width} * 0.9)`,\n \"height\": \"max-content\",\n \"padding\": theme.custom.gutterMargin,\n \"position\": \"absolute\",\n \"top\": \"50%\",\n \"left\": \"50%\",\n \"transform\": \"translate(-50%, -50%)\",\n \"background\": theme.palette.background.darkPaper,\n \"borderRadius\": theme.custom.mediumBoxRadius,\n \"display\": \"flex\",\n \"flexDirection\": \"column\",\n \"alignItems\": \"center\",\n \"justifyContent\": \"center\",\n \"gap\": theme.custom.gutterMargin,\n \":focus\": {\n outline: \"none\",\n },\n }}\n >\n <Box\n sx={{\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n justifyContent: \"center\",\n gap: theme.custom.smallGutterMargin,\n }}\n >\n <Typography fontSize={theme.typography.h2.fontSize}>Confirmation</Typography>\n <Typography color={theme.palette.text.disabled}>\n {userFacingMessages.WIDGETS.TRADE_SQUARE.ACTIONS_LABEL}\n </Typography>\n </Box>\n <Typography sx={{ marginTop: theme.custom.smallGutterMargin, textAlign: \"left\" }}>\n {userFacingMessages.WIDGETS.TRADE_SQUARE.INFO_DETAILS(\n firstLetterToUpperCase(cexName),\n tokenFrom,\n tokenTo,\n ).map((text, index) => (\n <Typography component={\"span\"} fontWeight={index % 2 !== 0 ? \"bold\" : \"normal\"} key={index}>\n {text}\n </Typography>\n ))}\n </Typography>\n <Typography textAlign={\"center\"} width={\"100%\"}>\n {tradePath}\n </Typography>\n <Button\n variant=\"contained\"\n height=\"tall\"\n fullWidth\n onClick={() => {\n setOpen(false);\n }}\n >\n {userFacingMessages.WIDGETS.TRADE_SQUARE.CLOSE}\n </Button>\n </Box>\n </Fade>\n </Modal>\n );\n}\n","\"use client\";\n\nimport createSvgIcon from './utils/createSvgIcon';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon( /*#__PURE__*/_jsx(\"path\", {\n d: \"M11 18h2v-2h-2zm1-16C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2m0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8m0-14c-2.21 0-4 1.79-4 4h2c0-1.1.9-2 2-2s2 .9 2 2c0 2-3 1.75-3 5h2c0-2.25 3-2.5 3-5 0-2.21-1.79-4-4-4\"\n}), 'HelpOutline');","import { generateUtilityClass, generateUtilityClasses } from '@mui/base';\nexport function getTabUtilityClass(slot) {\n return generateUtilityClass('MuiTab', slot);\n}\nconst tabClasses = generateUtilityClasses('MuiTab', ['root', 'labelIcon', 'textColorInherit', 'textColorPrimary', 'textColorSecondary', 'selected', 'disabled', 'fullWidth', 'wrapped', 'iconWrapper']);\nexport default tabClasses;","import _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nconst _excluded = [\"className\", \"disabled\", \"disableFocusRipple\", \"fullWidth\", \"icon\", \"iconPosition\", \"indicator\", \"label\", \"onChange\", \"onClick\", \"onFocus\", \"selected\", \"selectionFollowsFocus\", \"textColor\", \"value\", \"wrapped\"];\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport { unstable_composeClasses as composeClasses } from '@mui/base';\nimport ButtonBase from '../ButtonBase';\nimport capitalize from '../utils/capitalize';\nimport useThemeProps from '../styles/useThemeProps';\nimport styled from '../styles/styled';\nimport unsupportedProp from '../utils/unsupportedProp';\nimport tabClasses, { getTabUtilityClass } from './tabClasses';\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\n\nconst useUtilityClasses = ownerState => {\n const {\n classes,\n textColor,\n fullWidth,\n wrapped,\n icon,\n label,\n selected,\n disabled\n } = ownerState;\n const slots = {\n root: ['root', icon && label && 'labelIcon', `textColor${capitalize(textColor)}`, fullWidth && 'fullWidth', wrapped && 'wrapped', selected && 'selected', disabled && 'disabled'],\n iconWrapper: ['iconWrapper']\n };\n return composeClasses(slots, getTabUtilityClass, classes);\n};\n\nconst TabRoot = styled(ButtonBase, {\n name: 'MuiTab',\n slot: 'Root',\n overridesResolver: (props, styles) => {\n const {\n ownerState\n } = props;\n return [styles.root, ownerState.label && ownerState.icon && styles.labelIcon, styles[`textColor${capitalize(ownerState.textColor)}`], ownerState.fullWidth && styles.fullWidth, ownerState.wrapped && styles.wrapped];\n }\n})(({\n theme,\n ownerState\n}) => _extends({}, theme.typography.button, {\n maxWidth: 360,\n minWidth: 90,\n position: 'relative',\n minHeight: 48,\n flexShrink: 0,\n padding: '12px 16px',\n overflow: 'hidden',\n whiteSpace: 'normal',\n textAlign: 'center'\n}, ownerState.label && {\n flexDirection: ownerState.iconPosition === 'top' || ownerState.iconPosition === 'bottom' ? 'column' : 'row'\n}, {\n lineHeight: 1.25\n}, ownerState.icon && ownerState.label && {\n minHeight: 72,\n paddingTop: 9,\n paddingBottom: 9,\n [`& > .${tabClasses.iconWrapper}`]: _extends({}, ownerState.iconPosition === 'top' && {\n marginBottom: 6\n }, ownerState.iconPosition === 'bottom' && {\n marginTop: 6\n }, ownerState.iconPosition === 'start' && {\n marginRight: theme.spacing(1)\n }, ownerState.iconPosition === 'end' && {\n marginLeft: theme.spacing(1)\n })\n}, ownerState.textColor === 'inherit' && {\n color: 'inherit',\n opacity: 0.6,\n // same opacity as theme.palette.text.secondary\n [`&.${tabClasses.selected}`]: {\n opacity: 1\n },\n [`&.${tabClasses.disabled}`]: {\n opacity: (theme.vars || theme).palette.action.disabledOpacity\n }\n}, ownerState.textColor === 'primary' && {\n color: (theme.vars || theme).palette.text.secondary,\n [`&.${tabClasses.selected}`]: {\n color: (theme.vars || theme).palette.primary.main\n },\n [`&.${tabClasses.disabled}`]: {\n color: (theme.vars || theme).palette.text.disabled\n }\n}, ownerState.textColor === 'secondary' && {\n color: (theme.vars || theme).palette.text.secondary,\n [`&.${tabClasses.selected}`]: {\n color: (theme.vars || theme).palette.secondary.main\n },\n [`&.${tabClasses.disabled}`]: {\n color: (theme.vars || theme).palette.text.disabled\n }\n}, ownerState.fullWidth && {\n flexShrink: 1,\n flexGrow: 1,\n flexBasis: 0,\n maxWidth: 'none'\n}, ownerState.wrapped && {\n fontSize: theme.typography.pxToRem(12)\n}));\nconst Tab = /*#__PURE__*/React.forwardRef(function Tab(inProps, ref) {\n const props = useThemeProps({\n props: inProps,\n name: 'MuiTab'\n });\n\n const {\n className,\n disabled = false,\n disableFocusRipple = false,\n // eslint-disable-next-line react/prop-types\n fullWidth,\n icon: iconProp,\n iconPosition = 'top',\n // eslint-disable-next-line react/prop-types\n indicator,\n label,\n onChange,\n onClick,\n onFocus,\n // eslint-disable-next-line react/prop-types\n selected,\n // eslint-disable-next-line react/prop-types\n selectionFollowsFocus,\n // eslint-disable-next-line react/prop-types\n textColor = 'inherit',\n value,\n wrapped = false\n } = props,\n other = _objectWithoutPropertiesLoose(props, _excluded);\n\n const ownerState = _extends({}, props, {\n disabled,\n disableFocusRipple,\n selected,\n icon: !!iconProp,\n iconPosition,\n label: !!label,\n fullWidth,\n textColor,\n wrapped\n });\n\n const classes = useUtilityClasses(ownerState);\n const icon = iconProp && label && /*#__PURE__*/React.isValidElement(iconProp) ? /*#__PURE__*/React.cloneElement(iconProp, {\n className: clsx(classes.iconWrapper, iconProp.props.className)\n }) : iconProp;\n\n const handleClick = event => {\n if (!selected && onChange) {\n onChange(event, value);\n }\n\n if (onClick) {\n onClick(event);\n }\n };\n\n const handleFocus = event => {\n if (selectionFollowsFocus && !selected && onChange) {\n onChange(event, value);\n }\n\n if (onFocus) {\n onFocus(event);\n }\n };\n\n return /*#__PURE__*/_jsxs(TabRoot, _extends({\n focusRipple: !disableFocusRipple,\n className: clsx(classes.root, className),\n ref: ref,\n role: \"tab\",\n \"aria-selected\": selected,\n disabled: disabled,\n onClick: handleClick,\n onFocus: handleFocus,\n ownerState: ownerState,\n tabIndex: selected ? 0 : -1\n }, other, {\n children: [iconPosition === 'top' || iconPosition === 'start' ? /*#__PURE__*/_jsxs(React.Fragment, {\n children: [icon, label]\n }) : /*#__PURE__*/_jsxs(React.Fragment, {\n children: [label, icon]\n }), indicator]\n }));\n});\nprocess.env.NODE_ENV !== \"production\" ? Tab.propTypes\n/* remove-proptypes */\n= {\n // ----------------------------- Warning --------------------------------\n // | These PropTypes are generated from the TypeScript type definitions |\n // | To update them edit the d.ts file and run \"yarn proptypes\" |\n // ----------------------------------------------------------------------\n\n /**\n * This prop isn't supported.\n * Use the `component` prop if you need to change the children structure.\n */\n children: unsupportedProp,\n\n /**\n * Override or extend the styles applied to the component.\n */\n classes: PropTypes.object,\n\n /**\n * @ignore\n */\n className: PropTypes.string,\n\n /**\n * If `true`, the component is disabled.\n * @default false\n */\n disabled: PropTypes.bool,\n\n /**\n * If `true`, the keyboard focus ripple is disabled.\n * @default false\n */\n disableFocusRipple: PropTypes.bool,\n\n /**\n * If `true`, the ripple effect is disabled.\n *\n * ⚠️ Without a ripple there is no styling for :focus-visible by default. Be sure\n * to highlight the element by applying separate styles with the `.Mui-focusVisible` class.\n * @default false\n */\n disableRipple: PropTypes.bool,\n\n /**\n * The icon to display.\n */\n icon: PropTypes.oneOfType([PropTypes.element, PropTypes.string]),\n\n /**\n * The position of the icon relative to the label.\n * @default 'top'\n */\n iconPosition: PropTypes.oneOf(['bottom', 'end', 'start', 'top']),\n\n /**\n * The label element.\n */\n label: PropTypes.node,\n\n /**\n * @ignore\n */\n onChange: PropTypes.func,\n\n /**\n * @ignore\n */\n onClick: PropTypes.func,\n\n /**\n * @ignore\n */\n onFocus: PropTypes.func,\n\n /**\n * The system prop that allows defining system overrides as well as additional CSS styles.\n */\n sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),\n\n /**\n * You can provide your own value. Otherwise, we fallback to the child position index.\n */\n value: PropTypes.any,\n\n /**\n * Tab labels appear in a single row.\n * They can use a second line if needed.\n * @default false\n */\n wrapped: PropTypes.bool\n} : void 0;\nexport default Tab;","import { useRef, useState } from \"react\";\nimport ccxt from \"@cede/ccxt\";\nimport {\n AddNewCexButton,\n AmountFieldWithTokens,\n Bubble,\n Button,\n DropListWithIconModal,\n EmptyState,\n EmptyStateTypeEnum,\n Tabs,\n theme,\n} from \"@cede/ds\";\nimport { Any, OrderType } from \"@cede/types\";\nimport { formatBalance, getCurrencySymbol } from \"@cede/utils\";\nimport { getTradePathLabel } from \"../../Send/hooks/utils\";\nimport { PresentationalTradeProps } from \"../types\";\nimport { LimitPrice } from \"./LimitPrice\";\nimport { TradeRouteInfoModal } from \"./TradeRouteInfoModal\";\nimport { MainFooter, Page } from \"@cedelabs/react-utils\";\nimport { HelpOutline } from \"@mui/icons-material\";\nimport { Box, Checkbox, Skeleton, Tab, Tooltip, Typography, alpha } from \"@mui/material\";\n\nconst ASSETS_TO_SUBLIST_TITLES = {\n popular: \"Trending tokens\",\n rest: \"All tokens\",\n};\n\nexport const PresentationalTradePage = ({ controller }: PresentationalTradeProps) => {\n const {\n tradeAbleAsset,\n availableAccounts,\n isSubmitButtonActive,\n portfolioAssets,\n assetBalance,\n switchToken,\n amountToIsLoading,\n submitTrade,\n tokenFromPrice,\n tokenToPrice,\n tradeForm,\n dispatchForm,\n addMax,\n minAmountFrom,\n warningMessage,\n currency,\n isSwitchable,\n disabledSwitchMessage,\n isSwitchIconHovered,\n setIsSwitchIconHovered,\n assetFromLoading,\n assetToLoading,\n setFocusedInput,\n fee,\n formErrors,\n cexFeeIsLoading,\n isLoadingBalances,\n addCexRedirect,\n shouldDisableCex,\n disabledCexText,\n allowUserInputAmountTo,\n tradePath,\n marketRate,\n canByPassApprovalTradeHub,\n setByPassApprovalTradeHub,\n isWidget,\n tabs,\n orderType,\n selectOrderType,\n quoteToken,\n price,\n isLimitOrderSupported,\n } = controller;\n\n const [tradeRouteInfoModalIsOpen, setTradeRouteInfoModalIsOpen] = useState(false);\n\n const FormErrors = () => {\n const errorKeys = Object.keys(formErrors);\n\n if (!errorKeys.length) {\n return null;\n }\n\n return (\n <Box\n display={\"flex\"}\n flexDirection={\"column\"}\n paddingY={theme.spacing()}\n mt={theme.spacing()}\n sx={{\n background: alpha(theme.palette.error.main, 0.3),\n border: `2px solid ${theme.palette.error.main}`,\n borderRadius: theme.custom.defaultBoxRadius,\n padding: theme.spacing(),\n }}\n >\n {errorKeys.map((key) => {\n return (\n <Typography key={key} color={theme.palette.error.main} textAlign=\"left\">\n {formErrors[key]}\n </Typography>\n );\n })}\n </Box>\n );\n };\n\n const CexFees = () => {\n if (!tradeForm.tokenTo || !tradeForm.tokenFrom || (!cexFeeIsLoading && !fee)) return null;\n\n return (\n <Box display={\"flex\"} justifyContent={\"space-between\"}>\n <Typography sx={{ color: theme.palette.text.secondary, textAlign: \"left\" }}>Estimated CEX Fees:</Typography>\n {cexFeeIsLoading ? (\n <Skeleton variant=\"text\" sx={{ width: \"50px\", height: \"20px\" }} />\n ) : (\n <Typography>\n {formatBalance(fee?.amount || 0)} {fee?.tokenSymbol || \"\"} (\n {formatBalance(fee?.refAmount ?? 0, {\n roundForFiat: true,\n })}{\" \"}\n {getCurrencySymbol(\"en-US\", currency.symbol)})\n </Typography>\n )}\n </Box>\n );\n };\n\n const MinValue = () => {\n if (!tradeForm.tokenTo || !tradeForm.tokenFrom) return null;\n return (\n <Box display=\"flex\" justifyContent=\"space-between\" alignItems=\"center\" width=\"100%\" mt=\"2px\">\n {tradeForm.tokenFrom && tradeForm.tokenTo && (\n <>\n <Typography color={theme.palette.text.secondary} textAlign=\"right\">\n Minimum {tradeForm.tokenFrom.label} amount:\n </Typography>\n {minAmountFrom ? (\n <Typography data-testid=\"min-value\">\n {minAmountFrom} {tradeForm.tokenFrom.label}\n </Typography>\n ) : (\n <Skeleton variant=\"text\" sx={{ width: \"50px\", height: \"20px\" }} />\n )}\n </>\n )}\n </Box>\n );\n };\n\n const TradeRoute = () => {\n if (!tradePath || !tradeForm.noCommonMarket) return null;\n return (\n <Box display={\"flex\"} justifyContent={\"space-between\"}>\n <Typography color={theme.palette.text.secondary} textAlign=\"left\">\n Trade route:\n </Typography>\n <Typography\n sx={{\n cursor: \"pointer\",\n }}\n fontWeight={\"bold\"}\n color={theme.palette.primary.main}\n onClick={() => setTradeRouteInfoModalIsOpen(true)}\n >\n View\n </Typography>\n </Box>\n );\n };\n\n const Price = () => {\n return (\n <Box display={\"flex\"} justifyContent={\"space-between\"}>\n <Typography color={theme.palette.text.secondary} textAlign=\"left\">\n Price:\n </Typography>\n {!marketRate ? (\n <Skeleton variant=\"text\" sx={{ width: \"50px\", height: \"20px\" }} />\n ) : (\n <Typography>\n 1 {tradeForm.tokenFrom?.value} ={\" \"}\n {formatBalance(\n !tradeForm.market || tradeForm.tokenTo?.value === tradeForm.market.quote\n ? marketRate.bid\n : ccxt.Precise.stringDiv(\"1\", marketRate.ask),\n )}{\" \"}\n {tradeForm.tokenTo?.value}\n </Typography>\n )}\n </Box>\n );\n };\n\n const shouldDisplayDescription = !!(tradeForm.tokenFrom && tradeForm.tokenTo) || !!tradePath;\n\n const anchor = useRef<HTMLDivElement>(null);\n\n return (\n <Page displayFlex>\n <Box display={\"flex\"} flexDirection={\"column\"} flex={1}>\n <TradeRouteInfoModal\n tradePath={getTradePathLabel(tradePath || [])}\n cexName={tradeForm.selectedAccount?.cexValue || \"\"}\n tokenFrom={tradeForm.tokenFrom?.value || \"\"}\n tokenTo={tradeForm.tokenTo?.value || \"\"}\n open={tradeRouteInfoModalIsOpen}\n setOpen={setTradeRouteInfoModalIsOpen}\n />\n {isLimitOrderSupported && (\n <Tabs\n sx={{\n paddingBottom: theme.spacing(1),\n }}\n value={orderType}\n onChange={(_, value) => selectOrderType(value)}\n >\n {tabs.map((tab) => (\n <Tab\n data-testid={`${tab.value}-tab`}\n label={tab.label}\n value={tab.value}\n sx={{\n minHeight: \"auto\",\n padding: \"8px 16px\",\n }}\n />\n ))}\n </Tabs>\n )}\n\n <Box>\n <Box\n display={\"flex\"}\n paddingX={0}\n paddingBottom={0}\n alignItems={\"stretch\"}\n justifyContent={\"center\"}\n width=\"100%\"\n textAlign=\"left\"\n >\n <Box\n sx={{\n \"transition\": \".2s linear\",\n \"transitionDelay\": \"0.1s\",\n \"width\": \"100%\",\n \"paddingBottom\": 0,\n \"&.half-width\": {\n width: \"50%\",\n },\n }}\n className={\"\"}\n >\n <DropListWithIconModal\n inputProps={{\n id: \"select-account\",\n placeholder: \"Account\",\n }}\n title={\"Select account\"}\n value={tradeForm.selectedAccount}\n items={availableAccounts}\n onChange={(value: Any) => dispatchForm({ field: \"selectedAccount\", value })}\n actionButton={addCexRedirect ? <AddNewCexButton onClick={addCexRedirect} /> : undefined}\n shouldDisableItem={shouldDisableCex}\n disableModalPortal={true}\n disabledTextItem={disabledCexText}\n />\n </Box>\n </Box>\n {!tradeForm.selectedAccount && (\n <Typography\n component=\"p\"\n fontSize=\"12px\"\n color={theme.palette.text.secondary}\n textAlign=\"left\"\n margin=\"4px 8px\"\n >\n Please, choose an account to continue.\n </Typography>\n )}\n\n {warningMessage && (\n <Box marginTop={theme.custom.gutterMargin}>\n <EmptyState type={EmptyStateTypeEnum.WARNING} title={warningMessage} />\n </Box>\n )}\n </Box>\n\n {tradeForm.selectedAccount && !warningMessage && (\n <>\n <Box display=\"flex\" flexDirection=\"column\" flex={1}>\n <Box data-testid=\"trade-form\">\n {orderType === \"limit\" && (\n <LimitPrice\n priceSymbol={quoteToken?.label || \"\"}\n price={price}\n limitPrice={tradeForm.limitPrice}\n setLimitPrice={(price) => dispatchForm({ field: \"limitPrice\", value: price })}\n />\n )}\n <Box\n display=\"flex\"\n flexDirection=\"column\"\n mt={theme.spacing(2)}\n alignItems=\"flex-end\"\n gap={\"12px\"}\n position={\"relative\"}\n >\n <AmountFieldWithTokens\n assets={portfolioAssets || []}\n amount={tradeForm.amountFrom || \"\"}\n setAmount={(value) => dispatchForm({ field: \"amountFrom\", value })}\n selectedAsset={tradeForm.tokenFrom}\n setSelectedAsset={(value) => dispatchForm({ field: \"tokenFrom\", value })}\n estimatedValue={tokenFromPrice * parseFloat((tradeForm.amountFrom || \"0\").replace(/\\s/g, \"\"))}\n currency={currency}\n error={!!formErrors[\"amountFrom\"]}\n label=\"From\"\n loading={assetFromLoading || isLoadingBalances}\n id=\"trade-amount-from\"\n onFocus={() => setFocusedInput(\"amountFrom\")}\n onBlur={() => setFocusedInput(null)}\n availableBalance={\n <Typography\n variant=\"body2\"\n data-testid=\"max-amount\"\n onClick={addMax}\n sx={{\n \"paddingTop\": theme.spacing(1),\n \"fontSize\": \"12px\",\n \"textAlign\": \"right\",\n \":hover\": {\n textDecoration: \"underline\",\n cursor: \"pointer\",\n },\n }}\n >\n Available:{\" \"}\n {tradeForm.tokenFrom?.value && assetBalance !== null\n ? formatBalance(Number(assetBalance as string)) + \" \" + tradeForm.tokenFrom?.value\n : \"0\"}\n </Typography>\n }\n />\n\n <Box\n position={\"absolute\"}\n sx={{\n right: \"50%\",\n top: \"50%\",\n transform: \"translateX(50%) translateY(-50%)\",\n zIndex: theme.custom.zIndex.extraLayer,\n }}\n >\n <Bubble\n anchor={anchor.current}\n isOpen={isSwitchIconHovered && !isSwitchable}\n hideArrow\n background={theme.palette.background.paper}\n sx={{\n color: theme.palette.common.white,\n }}\n >\n <Typography>{disabledSwitchMessage}</Typography>\n </Bubble>\n <Box\n sx={{\n \"background\": theme.palette.background.default,\n \"display\": \"inline-flex\",\n \"alignItems\": \"center\",\n \"justifyContent\": \"center\",\n \"borderRadius\": \"100%\",\n \"border\": `2px solid ${theme.palette.divider}`,\n \"padding\": \"6px\",\n \"transition\": \"0.5s\",\n \":hover\": {\n background: \"#2E2E2E\",\n cursor: isSwitchable ? \"pointer\" : \"not-allowed\",\n },\n }}\n onClick={switchToken}\n >\n <Box\n component=\"svg\"\n width={\"16px\"}\n height={\"14px\"}\n viewBox=\"0 0 14 12\"\n ref={anchor}\n onMouseEnter={() => setIsSwitchIconHovered(true)}\n onMouseLeave={() => setIsSwitchIconHovered(false)}\n data-testid={\"switch-token\"}\n sx={{\n \"fill\": \"rgba(255, 255, 255, 0.56)\",\n \":hover\": {\n fill: isSwitchable ? theme.palette.primary.main : \"rgba(255, 255, 255, 0.56)\",\n },\n }}\n >\n <path\n d=\"M13.1016 8.5021C13.1679 8.4403 13.2211 8.36578 13.258 8.28298C13.2949 8.20018 13.3147 8.1108 13.3163 8.02017C13.3179 7.92953 13.3012 7.83951 13.2673 7.75546C13.2333 7.67141 13.1828 7.59506 13.1187 7.53096C13.0546 7.46687 12.9783 7.41634 12.8942 7.38239C12.8102 7.34844 12.7201 7.33177 12.6295 7.33336C12.5389 7.33496 12.4495 7.3548 12.3667 7.39169C12.2839 7.42859 12.2094 7.48178 12.1476 7.5481L10.5996 9.0961L10.5996 1.2751C10.5996 1.09608 10.5285 0.924387 10.4019 0.7978C10.2753 0.671213 10.1036 0.600098 9.92457 0.600098C9.74555 0.600098 9.57386 0.671213 9.44727 0.7978C9.32068 0.924387 9.24957 1.09608 9.24957 1.2751L9.24957 9.0961L7.70157 7.5481C7.63977 7.48178 7.56525 7.42859 7.48245 7.39169C7.39965 7.3548 7.31027 7.33496 7.21964 7.33336C7.12901 7.33176 7.03898 7.34844 6.95493 7.38239C6.87088 7.41634 6.79453 7.46687 6.73043 7.53096C6.66634 7.59506 6.61581 7.67141 6.58186 7.75546C6.54791 7.83951 6.53124 7.92953 6.53284 8.02017C6.53444 8.1108 6.55427 8.20018 6.59117 8.28298C6.62806 8.36578 6.68125 8.4403 6.74757 8.5021L9.44757 11.2021C9.57413 11.3285 9.74569 11.3995 9.92457 11.3995C10.1034 11.3995 10.275 11.3285 10.4016 11.2021L13.1016 8.5021V8.5021ZM6.29757 4.4521C6.35936 4.51841 6.43389 4.57161 6.51668 4.6085C6.59948 4.64539 6.68887 4.66523 6.7795 4.66683C6.87013 4.66843 6.96016 4.65176 7.04421 4.61781C7.12826 4.58386 7.20461 4.53333 7.2687 4.46923C7.3328 4.40513 7.38333 4.32878 7.41728 4.24474C7.45123 4.16069 7.4679 4.07066 7.4663 3.98003C7.4647 3.88939 7.44486 3.80001 7.40797 3.71721C7.37108 3.63441 7.31789 3.55989 7.25157 3.4981L4.55157 0.798097C4.42501 0.671692 4.25344 0.600691 4.07457 0.600691C3.89569 0.600691 3.72413 0.671692 3.59757 0.798097L0.897568 3.4981C0.778336 3.62605 0.713427 3.7953 0.716512 3.97017C0.719597 4.14504 0.790438 4.31188 0.91411 4.43556C1.03778 4.55923 1.20463 4.63007 1.3795 4.63315C1.55437 4.63624 1.72361 4.57133 1.85157 4.4521L3.39957 2.9041L3.39957 10.7251C3.39957 10.9041 3.47068 11.0758 3.59727 11.2024C3.72386 11.329 3.89555 11.4001 4.07457 11.4001C4.25359 11.4001 4.42528 11.329 4.55187 11.2024C4.67845 11.0758 4.74957 10.9041 4.74957 10.7251L4.74957 2.9041L6.29757 4.4521Z\"\n fill=\"white\"\n />\n </Box>\n </Box>\n </Box>\n <AmountFieldWithTokens\n assets={tradeAbleAsset}\n amount={tradeForm.amountTo || \"\"}\n setAmount={(value) => allowUserInputAmountTo && dispatchForm({ field: \"amountTo\", value })}\n selectedAsset={tradeForm.tokenTo}\n setSelectedAsset={(value) => dispatchForm({ field: \"tokenTo\", value })}\n estimatedValue={tokenToPrice * parseFloat((tradeForm.amountTo || \"0\").replace(/\\s/g, \"\"))}\n currency={currency}\n label=\"To\"\n loading={assetToLoading}\n id=\"trade-amount-to\"\n onFocus={() => setFocusedInput(\"amountTo\")}\n onBlur={() => setFocusedInput(null)}\n subListTitles={ASSETS_TO_SUBLIST_TITLES}\n amountIsLoading={amountToIsLoading}\n />\n </Box>\n </Box>\n {shouldDisplayDescription && (\n <Box\n sx={{\n width: \"100%\",\n mt: \"16px\",\n display: \"flex\",\n flexDirection: \"column\",\n gap: theme.custom.smallGutterMargin,\n background: theme.palette.background.darkPaper,\n borderRadius: theme.custom.defaultBoxRadius,\n paddingX: theme.spacing(),\n paddingY: theme.spacing(1.5),\n }}\n >\n <MinValue />\n <CexFees />\n {orderType === OrderType.MARKET && <Price />}\n\n <TradeRoute />\n </Box>\n )}\n {isWidget && !Object.keys(formErrors).length && (\n <Box\n display={\"flex\"}\n alignItems=\"center\"\n onClick={() => setByPassApprovalTradeHub(!canByPassApprovalTradeHub)}\n >\n <Checkbox checked={canByPassApprovalTradeHub} />\n <Box display=\"flex\" alignItems=\"center\" gap={theme.spacing()}>\n <Typography variant=\"body1\">Enable fast trade</Typography>\n <Tooltip\n title={\n <Typography\n display=\"flex\"\n alignItems=\"center\"\n justifyContent=\"space-between\"\n fontSize=\"14px\"\n sx={{\n \"minWidth\": \"164px\",\n \"transition\": \".2s ease-out\",\n \":hover\": {\n opacity: 0.6,\n },\n }}\n >\n If enabled, the approval page won't be shown before executing the trade.\n </Typography>\n }\n sx={{\n fontSize: \"20px\",\n color: theme.palette.text.primary,\n }}\n placement=\"top\"\n arrow\n PopperProps={{\n disablePortal: true,\n }}\n >\n <HelpOutline color=\"inherit\" fontSize=\"inherit\" />\n </Tooltip>\n </Box>\n </Box>\n )}\n\n <FormErrors />\n </Box>\n\n <MainFooter>\n <Button\n variant={\"contained\"}\n disabled={!isSubmitButtonActive}\n height=\"tall\"\n fullWidth\n data-testid={\"trade-button\"}\n onClick={submitTrade}\n >\n Confirm\n </Button>\n </MainFooter>\n </>\n )}\n </Box>\n </Page>\n );\n};\n","import { TRADE_WIDGET_ROUTES, WIDGET_ROUTES } from \"@cede/utils\";\nimport { DefaultPage } from \"../components/DefaultPage\";\nimport { DefiAddress } from \"../components/DefiAddress/DefiAddress\";\nimport { Login } from \"../components/Login\";\nimport { Trade } from \"../components/Trade\";\nimport { authenticationMiddleware } from \"./authenticationMiddleware\";\nimport { chromiumMiddleware } from \"./chromiumMiddleware\";\nimport { initMiddleware } from \"./initMiddleware\";\nimport {\n AppRoute,\n CompletedTransaction,\n CompletedTransactionDetails,\n FixInvalidPermissionsTutorial,\n MultipleTransactionsForTrade,\n} from \"@cedelabs/react-utils\";\n\nexport const TRADE_ROUTES: AppRoute[] = [\n {\n wrapper: chromiumMiddleware,\n routes: [\n {\n wrapper: initMiddleware,\n routes: [\n {\n path: WIDGET_ROUTES.DEFAULT_ROUTE,\n element: DefaultPage,\n },\n { path: WIDGET_ROUTES.LOGIN, element: Login },\n { path: TRADE_WIDGET_ROUTES.ADD_DEFI_ADDRESS, element: DefiAddress },\n {\n wrapper: authenticationMiddleware,\n routes: [\n {\n path: WIDGET_ROUTES.ACTION_ROUTE,\n element: Trade,\n },\n { path: WIDGET_ROUTES.COMPLETED_TRANSACTION_ROUTE, element: CompletedTransaction },\n { path: WIDGET_ROUTES.COMPLETED_TRANSACTION_DETAILS_ROUTE, element: CompletedTransactionDetails },\n { path: WIDGET_ROUTES.FIX_INVALID_PERMISSIONS_TUTORIAL, element: FixInvalidPermissionsTutorial },\n { path: WIDGET_ROUTES.MULTIPLE_TRANSACTIONS, element: MultipleTransactionsForTrade },\n ],\n },\n ],\n },\n ],\n },\n];\n","import { useEffect, useRef } from \"react\";\nimport { UserFieldGroup } from \"../components/form/UserFieldsGroup\";\nimport { JsonField } from \"../components/form/fields/JsonField\";\nimport { WIDGET_CONFIGS } from \"../constants/widgetConfig\";\nimport { useParamsForms } from \"../hooks/useParamsForms/useParamsForms\";\nimport { renderSendWidget } from \"@cedelabs/widgets-universal\";\nimport { CedeSend } from \"@cedelabs/widgets/src\";\nimport { Box, Card, Typography, useTheme } from \"@mui/material\";\n\nconst sendWidgetConfig = WIDGET_CONFIGS.WIDGETS[0];\n\nconst universalSendWidgetConfig = WIDGET_CONFIGS.WIDGETS[1];\n\nexport const Widgets = () => {\n const theme = useTheme();\n const universalSendWidgetContainerRef = useRef<HTMLDivElement>(null);\n const sendWidgetForm = useParamsForms((state) => state.forms[sendWidgetConfig.methodName]);\n const universalSendWidgetForm = useParamsForms((state) => state.forms[universalSendWidgetConfig.methodName]);\n const mode = useParamsForms((state) => state.mode);\n const timeoutId = useRef<NodeJS.Timeout>();\n\n const { themeMode, ...sendWidgetConfigValues } = sendWidgetForm;\n\n useEffect(() => {\n if (universalSendWidgetContainerRef.current) {\n clearTimeout(timeoutId.current);\n const { themeMode, ...config } = universalSendWidgetForm;\n timeoutId.current = setTimeout(\n () =>\n renderSendWidget(\"#universal-send-widget\", { config, theme: { mode: themeMode || \"dark\", width: \"800px\" } }),\n 300,\n );\n }\n }, [universalSendWidgetForm]);\n\n return (\n <Box\n sx={{\n width: \"100%\",\n display: \"flex\",\n flexDirection: \"row\",\n alignItems: \"flex-start\",\n gap: theme.custom.smallGutterMargin,\n marginBottom: theme.custom.bigGutterMargin,\n }}\n >\n <Box display={\"flex\"} gap={theme.custom.gutterMargin} flexDirection={\"column\"}>\n <Typography\n sx={{\n fontSize: \"25px\",\n lineHeight: \"40px\",\n fontWeight: \"600\",\n }}\n >\n Widget\n </Typography>\n <Card\n data-testid={`actionCard-send-widget`}\n sx={{\n bgcolor: theme.palette.background.component,\n borderRadius: theme.custom.largeBoxRadius,\n padding: theme.custom.gutterMargin,\n display: \"flex\",\n flexDirection: \"column\",\n gap: theme.custom.gutterMargin,\n width: \"100%\",\n }}\n >\n <Typography sx={{ color: theme.palette.text.primary, textAlign: \"center\" }}>Widget configuration</Typography>\n {mode === \"user\" && <UserFieldGroup method={sendWidgetConfig} id={\"widget-config-fields\"} />}\n {mode === \"json\" && <JsonField method={sendWidgetConfig} />}\n </Card>\n <Box data-testid=\"send-widget\">\n <CedeSend config={sendWidgetConfigValues} theme={{ mode: themeMode || \"dark\" }} />\n </Box>\n </Box>\n <Box display={\"flex\"} gap={theme.custom.gutterMargin} flexDirection={\"column\"}>\n <Typography\n sx={{\n fontSize: \"25px\",\n lineHeight: \"40px\",\n fontWeight: \"600\",\n }}\n >\n Universal Widget\n </Typography>\n <Card\n data-testid={`actionCard-universal-send-widget`}\n sx={{\n bgcolor: theme.palette.background.component,\n borderRadius: theme.custom.largeBoxRadius,\n padding: theme.custom.gutterMargin,\n display: \"flex\",\n flexDirection: \"column\",\n gap: theme.custom.gutterMargin,\n width: \"100%\",\n }}\n >\n <Typography sx={{ color: theme.palette.text.primary, textAlign: \"center\" }}>\n Universal Widget configuration\n </Typography>\n {mode === \"user\" && (\n <UserFieldGroup method={universalSendWidgetConfig} id={\"universal-widget-config-fields\"} />\n )}\n {mode === \"json\" && <JsonField method={universalSendWidgetConfig} />}\n </Card>\n <Box\n sx={{\n width: \"100%\",\n display: \"grid\",\n gridTemplateColumns: `repeat(auto-fill, minmax(350px, 1fr))`,\n gap: theme.custom.bigGutterMargin,\n }}\n data-testid=\"universal-send-widget\"\n id=\"universal-send-widget\"\n ref={universalSendWidgetContainerRef}\n ></Box>\n </Box>\n </Box>\n );\n};\n","import { CheckConnection, Header } from \"./components\";\nimport { Settings } from \"./components/Settings\";\nimport { SuiteSection } from \"./components/SuiteSection\";\nimport { STORE_API_METHODS } from \"./constants/methods\";\nimport { useSetupApp } from \"./hooks/useSetupApp\";\nimport { Widgets } from \"./suites\";\nimport { Box, useTheme } from \"@mui/material\";\n\nfunction App() {\n const theme = useTheme();\n useSetupApp();\n\n return (\n <Box\n sx={{\n backgroundColor: theme.palette.background.default,\n display: \"flex\",\n flexDirection: \"column\",\n width: \"100%\",\n height: \"100%\",\n }}\n >\n <Header />\n <Settings />\n <Box\n sx={{\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"flex-start\",\n justifyContent: \"center\",\n padding: theme.custom.bigGutterMargin,\n }}\n >\n <SuiteSection\n title=\"Connection Suite\"\n methods={STORE_API_METHODS.CONNECTION_SUITE}\n startSlot={<CheckConnection />}\n />\n <SuiteSection title=\"Private Read Suite\" methods={STORE_API_METHODS.PRIVATE_READ_SUITE} />\n <SuiteSection title=\"Public Read Suite\" methods={STORE_API_METHODS.PUBLIC_READ_SUITE} />\n <SuiteSection title=\"Write Suite\" methods={STORE_API_METHODS.WRITE_SUITE} />\n <Widgets />\n </Box>\n </Box>\n );\n}\n\nexport default App;\n","import { useEffect, useRef } from \"react\";\nimport { cherryPickState } from \"@cede/utils\";\nimport { useCedeStore } from \"./useCedeStore\";\nimport { useParamsForms } from \"./useParamsForms/useParamsForms\";\nimport { detectCedeProvider, CedeProvider } from \"@cedelabs/providers/src\";\n\n/**\n * @description It manages all the logic necessary to setup the app\n *\n * TODO: Use an unified hook to detect the cede provider\n */\nexport const useSetupApp = () => {\n const prefillValueForAllForms = useParamsForms((state) => state.prefillValueForAllForms);\n const { setVaults, setProvider, activeVault } = useCedeStore(\n cherryPickState([\"setVaults\", \"setProvider\", \"activeVault\"]),\n );\n // Cede.store provider fires the unlock event continually when the user is connected so\n // we need to prevent the vaults to be updated more than once\n const shouldUpdateVaults = useRef(true);\n\n useEffect(() => {\n detectCedeProvider().then((provider) => {\n if (provider instanceof CedeProvider) {\n setProvider(provider);\n\n provider.on(\"accountsChanged\", () => {\n if (!shouldUpdateVaults.current) return;\n const providerVaults = provider.getVaultPreviews();\n if (providerVaults) {\n setVaults(providerVaults);\n shouldUpdateVaults.current = false;\n }\n });\n\n provider.on(\"lock\", () => {\n setVaults([]);\n });\n }\n });\n\n return () => {\n detectCedeProvider().then((provider) => {\n if (provider instanceof CedeProvider) {\n provider.removeAllListeners();\n }\n });\n };\n }, []);\n\n useEffect(() => {\n if (activeVault) {\n prefillValueForAllForms(\"vaultId\", activeVault.id);\n }\n }, [activeVault]);\n};\n","import \"./index.css\";\nimport ReactDOM from \"react-dom/client\";\nimport { ThemeProvider } from \"@cede/ds\";\nimport App from \"./App\";\n\nReactDOM.createRoot(document.getElementById(\"root\") as HTMLElement).render(\n <ThemeProvider>\n <App />\n </ThemeProvider>,\n);\n"],"names":["StyleSheet","options","_this","this","_insertTag","tag","before","tags","length","insertionPoint","nextSibling","prepend","container","firstChild","insertBefore","push","isSpeedy","undefined","speedy","ctr","nonce","key","_proto","prototype","hydrate","nodes","forEach","insert","rule","document","createElement","setAttribute","appendChild","createTextNode","createStyleElement","sheet","i","styleSheets","ownerNode","sheetForTag","insertRule","cssRules","e","flush","_tag$parentNode","parentNode","removeChild","abs","Math","String","fromCharCode","Object","assign","trim","value","pattern","replacement","replace","indexof","search","indexOf","index","charCodeAt","begin","end","slice","array","line","column","position","character","characters","node","root","parent","type","props","children","return","prev","next","peek","caret","token","alloc","dealloc","delimit","delimiter","whitespace","escaping","count","commenter","identifier","COMMENT","callback","output","stringify","element","join","compile","parse","rules","rulesets","pseudo","points","declarations","offset","atrule","property","previous","variable","scanning","ampersand","reference","comment","declaration","ruleset","post","size","j","k","x","y","z","identifierWithPointTracking","getRules","parsed","toRules","fixedElements","WeakMap","compat","isImplicitRule","get","set","parentRules","removeLabel","hash","defaultStylisPlugins","map","exec","createCache","ssrStyles","querySelectorAll","Array","call","getAttribute","head","_insert","stylisPlugins","inserted","nodesToHydrate","attrib","split","currentSheet","finalizingPlugins","serializer","collection","middleware","concat","selector","serialized","shouldCache","styles","cache","name","registered","memoize","fn","create","arg","weakMemoize","func","has","ret","hoistNonReactStatics","targetComponent","sourceComponent","isDevelopment","EmotionCacheContext","HTMLElement","CacheProvider","Provider","__unsafe_useEmotionCache","useContext","withEmotionCache","forwardRef","ref","ThemeContext","useTheme","createCacheWithTheme","outerTheme","theme","getTheme","ThemeProvider","withTheme","Component","componentName","displayName","render","WithTheme","hasOwn","hasOwnProperty","typePropName","createEmotionProps","newProps","Insertion","_ref","isStringTag","Emotion$1","cssProp","css","WrappedComponent","registeredStyles","className","jsx","args","arguments","h","apply","argsLength","createElementArgArray","E","c","Global","w","T","sheetRef","constructor","rehydrating","querySelector","current","sheetRefCurrent","nextElementSibling","_len","_key","keyframes","insertable","anim","toString","classnames","len","cls","toAdd","isArray","serializedArr","ClassNames","hasRendered","Error","content","cx","_len2","_key2","rawClassName","merge","ele","unitlessKeys","animationIterationCount","aspectRatio","borderImageOutset","borderImageSlice","borderImageWidth","boxFlex","boxFlexGroup","boxOrdinalGroup","columnCount","columns","flex","flexGrow","flexPositive","flexShrink","flexNegative","flexOrder","gridRow","gridRowEnd","gridRowSpan","gridRowStart","gridColumn","gridColumnEnd","gridColumnSpan","gridColumnStart","msGridRow","msGridRowSpan","msGridColumn","msGridColumnSpan","fontWeight","lineHeight","opacity","order","orphans","tabSize","widows","zIndex","zoom","WebkitLineClamp","fillOpacity","floodOpacity","stopOpacity","strokeDasharray","strokeDashoffset","strokeMiterlimit","strokeOpacity","strokeWidth","hyphenateRegex","animationRegex","isCustomProperty","isProcessableValue","processStyleName","styleName","toLowerCase","processStyleValue","match","p1","p2","cursor","noComponentSelectorMessage","handleInterpolation","mergedProps","interpolation","componentSelector","__emotion_styles","serializedStyles","obj","string","asString","interpolated","_i","createStringFromObject","previousCursor","result","cached","labelPattern","serializeStyles","stringMode","strings","raw","lastIndex","identifierName","str","useInsertionEffect","useInsertionEffectAlwaysWithSyncFallback","useInsertionEffectWithLayoutFallback","getRegisteredStyles","classNames","registerStyles","insertStyles","__importDefault","mod","__esModule","defineProperty","exports","ObjectMultiplex","readable_stream_1","end_of_stream_1","once_1","Substream_1","IGNORE_SUBSTREAM","Symbol","Duplex","opts","super","objectMode","_substreams","createStream","destroyed","_readableState","ended","_writableState","substream","Substream","stream","_cb","cb","default","readable","writable","anyStreamEnd","_error","destroy","ignoreStream","_read","_write","chunk","_encoding","data","console","warn","_parent","_name","ObjectMultiplex_1","module","arr","pna","objectKeys","keys","util","inherits","Readable","Writable","v","method","allowHalfOpen","once","onend","nextTick","onEndNT","self","enumerable","highWaterMark","_destroy","err","PassThrough","Transform","_transform","encoding","ReadableState","EElistenerCount","emitter","listeners","Stream","Buffer","OurUint8Array","g","window","Uint8Array","debugUtil","debug","debuglog","StringDecoder","BufferList","destroyImpl","kProxyEvents","isDuplex","readableObjectMode","hwm","readableHwm","readableHighWaterMark","defaultHwm","floor","buffer","pipes","pipesCount","flowing","endEmitted","reading","sync","needReadable","emittedReadable","readableListening","resumeScheduled","defaultEncoding","awaitDrain","readingMore","decoder","read","readableAddChunk","addToFront","skipChunkCheck","er","state","emitReadable","onEofChunk","isBuffer","TypeError","chunkInvalid","emit","getPrototypeOf","from","_uint8ArrayToBuffer","addChunk","write","maybeReadMore","needMoreData","unshift","_undestroy","undestroy","isPaused","setEncoding","enc","MAX_HWM","howMuchToRead","n","computeNewHighWaterMark","emitReadable_","flow","maybeReadMore_","nReadingNextTick","resume_","fromList","shift","clear","list","hasStrings","p","nb","tail","copyFromBufferString","allocUnsafe","copy","buf","copyFromBuffer","fromListPartial","endReadable","endReadableNT","xs","l","parseInt","nOrig","doRead","pipe","dest","pipeOpts","src","endFn","process","stdout","stderr","unpipe","onunpipe","unpipeInfo","hasUnpiped","removeListener","onclose","onfinish","ondrain","onerror","ondata","cleanedUp","needDrain","on","pipeOnDrain","increasedAwaitDrain","pause","event","prependListener","_events","resume","dests","splice","ev","res","addListener","wrap","paused","bind","_fromList","afterTransform","ts","_transformState","transforming","writecb","writechunk","rs","needTransform","writeencoding","transform","_flush","prefinish","done","_this2","err2","CorkedRequest","entry","finish","corkReq","pendingcb","corkedRequestsFree","onCorkedFinish","asyncWrite","browser","version","setImmediate","WritableState","internalUtil","deprecate","realHasInstance","nop","writableObjectMode","writableHwm","writableHighWaterMark","finalCalled","ending","finished","noDecode","decodeStrings","writing","corked","bufferProcessing","onwrite","writelen","onwriteStateUpdate","finishMaybe","errorEmitted","onwriteError","needFinish","bufferedRequest","clearBuffer","afterWrite","lastBufferedRequest","prefinished","bufferedRequestCount","writev","_writev","final","_final","doWrite","onwriteDrain","holder","allBuffers","isBuf","callFinal","need","getBuffer","out","_","hasInstance","Function","object","writeAfterEnd","valid","validChunk","newChunk","decodeChunk","last","writeOrBuffer","cork","uncork","setDefaultEncoding","endWritable","instance","Constructor","_classCallCheck","s","target","inspect","custom","emitErrorNT","readableDestroyed","writableDestroyed","copyProps","dst","SafeBuffer","encodingOrOffset","allocUnsafeSlow","fill","SlowBuffer","isEncoding","nenc","retried","_normalizeEncoding","normalizeEncoding","text","utf16Text","utf16End","fillLast","utf8FillLast","base64Text","base64End","simpleWrite","simpleEnd","lastNeed","lastTotal","lastChar","utf8CheckByte","byte","r","utf8CheckExtraBytes","total","utf8CheckIncomplete","messages","errors","disconnected","permanentlyDisconnected","sendSiteMetadata","unsupportedSync","invalidDuplexStream","invalidRequestArgs","invalidRequestMethod","invalidRequestParams","invalidLoggerObject","invalidLoggerMethod","info","connected","chainId","warnings","enableDeprecation","sendDeprecation","events","close","networkChanged","notification","experimentalMethods","eth_rpc_errors_1","resolve","reject","unwrapResult","error","response","disablePortal","mountNode","setMountNode","handleRef","getContainer","body","appendOwnerState","elementType","otherProps","ownerState","resolveComponentProps","componentProps","t","f","omitEventHandlers","filter","prop","mergeSlotProps","parameters","getSlotProps","additionalProps","externalSlotProps","externalForwardedProps","joinedClasses","mergedStyle","style","internalRef","eventHandlers","excludeKeys","includes","extractEventHandlers","componentsPropsWithoutEventHandlers","otherPropsWithoutEventHandlers","internalSlotProps","_excluded","useSlotProps","_parameters$additiona","rest","resolvedComponentsProps","useForkRef","_interopRequireDefault","_createSvgIcon","_jsxRuntime","d","_utils","createSvgIcon","getAlertUtilityClass","slot","generateUtilityClass","_CloseIcon","AlertRoot","styled","Paper","overridesResolver","variant","capitalize","color","severity","getColor","palette","mode","getBackgroundColor","typography","body2","backgroundColor","display","padding","vars","Alert","light","icon","main","border","fontWeightMedium","dark","getContrastText","AlertIcon","marginRight","fontSize","AlertMessage","message","minWidth","overflow","AlertAction","action","alignItems","marginLeft","defaultIconMapping","success","SuccessOutlined","warning","ReportProblemOutlined","ErrorOutline","InfoOutlined","inProps","useThemeProps","closeText","iconMapping","onClose","role","other","classes","slots","composeClasses","useUtilityClasses","elevation","IconButton","title","onClick","Close","getBackdropUtilityClass","BackdropRoot","invisible","justifyContent","right","bottom","top","left","WebkitTapHighlightColor","_components$Root","_componentsProps$root","component","components","componentsProps","open","transitionDuration","TransitionComponent","Fade","in","timeout","as","Root","defaultTheme","defaultClassName","generateClassName","generate","getButtonUtilityClass","_excluded2","commonIconStyles","ButtonRoot","ButtonBase","shouldForwardProp","colorInherit","disableElevation","fullWidth","_theme$palette$getCon","_theme$palette","button","borderRadius","shape","transition","transitions","duration","short","textDecoration","primaryChannel","hoverOpacity","primary","mainChannel","grey","A100","boxShadow","shadows","focusVisible","disabled","disabledBackground","contrastText","borderColor","pxToRem","width","ButtonStartIcon","startIcon","ButtonEndIcon","endIcon","contextProps","resolvedProps","resolveProps","disableFocusRipple","endIconProp","focusVisibleClassName","startIconProp","_useUtilityClasses","label","composedClasses","classesRoot","focusRipple","pulsate","rippleX","rippleY","rippleSize","inProp","onExited","leaving","setLeaving","rippleClassName","ripple","rippleVisible","ripplePulsate","rippleStyles","height","childClassName","child","childLeaving","childPulsate","timeoutId","setTimeout","clearTimeout","generateUtilityClasses","_t","_t2","_t3","_t4","enterKeyframe","exitKeyframe","pulsateKeyframe","TouchRippleRoot","pointerEvents","TouchRippleRipple","easing","easeInOut","shorter","center","centerProp","ripples","setRipples","nextKey","rippleCallback","ignoringMouseDown","startTimer","startTimerCommit","startCommit","params","oldRipples","start","fakeElement","rect","getBoundingClientRect","clientX","clientY","touches","round","sqrt","sizeX","max","clientWidth","sizeY","clientHeight","stop","TransitionGroup","exit","getButtonBaseUtilityClass","ButtonBaseRoot","boxSizing","outline","margin","userSelect","verticalAlign","MozAppearance","WebkitAppearance","borderStyle","colorAdjust","centerRipple","disableRipple","disableTouchRipple","LinkComponent","onBlur","onContextMenu","onDragLeave","onFocus","onFocusVisible","onKeyDown","onKeyUp","onMouseDown","onMouseLeave","onMouseUp","onTouchEnd","onTouchMove","onTouchStart","tabIndex","TouchRippleProps","touchRippleRef","buttonRef","rippleRef","handleRippleRef","isFocusVisibleRef","handleFocusVisible","handleBlurVisible","focusVisibleRef","useIsFocusVisible","setFocusVisible","focus","mountedState","setMountedState","enableTouchRipple","useRippleHandler","rippleAction","eventCallback","skipRippleAction","useEventCallback","handleMouseDown","handleContextMenu","handleDragLeave","handleMouseUp","handleMouseLeave","preventDefault","handleTouchStart","handleTouchEnd","handleTouchMove","handleBlur","handleFocus","currentTarget","isNonNativeButton","tagName","href","keydownRef","handleKeyDown","handleKeyUp","defaultPrevented","ComponentProp","to","buttonProps","handleOwnRef","getCardUtilityClass","CardRoot","raised","getCardActionAreaUtilityClass","CardActionAreaRoot","textAlign","focusHighlight","focusOpacity","CardActionAreaFocusHighlight","getChipUtilityClass","ChipRoot","clickable","onDelete","avatar","deleteIcon","deletable","deleteIconColor","textColor","maxWidth","fontFamily","selected","whiteSpace","disabledOpacity","Chip","defaultAvatarColor","avatarColorPrimary","avatarColorSecondary","secondary","avatarSmall","defaultIconColor","contrastTextChannel","selectedChannel","selectedOpacity","defaultBorder","hover","iconSmall","deleteIconSmall","ChipLabel","textOverflow","paddingLeft","paddingRight","isDeleteKeyboardEvent","keyboardEvent","avatarProp","clickableProp","deleteIconProp","iconProp","chipRef","handleDeleteIconClick","stopPropagation","moreProps","Cancel","blur","getCircularProgressUtilityClass","SIZE","circularRotateKeyframe","circularDashKeyframe","CircularProgressRoot","CircularProgressSVG","svg","CircularProgressCircle","circle","disableShrink","circleDisableShrink","stroke","thickness","circleStyle","rootStyle","rootProps","circumference","PI","toFixed","viewBox","cy","html","enableColorScheme","WebkitFontSmoothing","MozOsxFontSmoothing","WebkitTextSizeAdjust","colorScheme","body1","background","common","white","_theme$components","_theme$components$Mui","defaultStyles","fontWeightBold","themeOverrides","MuiCssBaseline","styleOverrides","getDividerUtilityClass","entering","entered","defaultTimeout","enter","enteringScreen","leavingScreen","addEndListener","appear","onEnter","onEntered","onEntering","onExit","onExiting","nodeRef","foreignRef","normalizedTransitionCallback","maybeIsAppearing","handleEntering","handleEnter","isAppearing","transitionProps","webkitTransition","handleEntered","handleExiting","handleExit","handleExited","childProps","visibility","FilledInputRoot","disableUnderline","underline","_palette","bottomLineColor","hoverBackground","FilledInput","bg","borderTopLeftRadius","borderTopRightRadius","easeOut","hoverBg","focused","disabledBg","borderBottom","borderBottomColor","onBackgroundChannel","inputUnderline","borderBottomStyle","startAdornment","endAdornment","multiline","paddingTop","paddingBottom","hiddenLabel","FilledInputInput","WebkitBoxShadow","WebkitTextFillColor","caretColor","getColorSchemeSelector","componentsPropsProp","inputComponent","input","filledInputComponentsProps","Input","muiName","getFilledInputUtilityClass","getFormControlUtilityClasses","FormControlRoot","flexDirection","marginTop","marginBottom","visuallyFocused","required","adornedStart","setAdornedStart","initialAdornedStart","isMuiElement","filled","setFilled","initialFilled","focusedState","setFocused","onFilled","childContext","onEmpty","registerEffect","FormControlContext","formControlState","states","muiFormControl","reduce","acc","useFormControl","getFormHelperTextUtilityClasses","_span","FormHelperTextRoot","contained","caption","fcs","FormLabelRoot","colorSecondary","AsteriskComponent","asterisk","getFormLabelUtilityClasses","GlobalStyles","globalStyles","themeInput","themeId","upperTheme","getScale","isWebKit154","navigator","test","userAgent","Grow","timer","autoTimeout","delay","transitionTimingFunction","getAutoHeightDuration","muiSupportAuto","getIconButtonUtilityClass","IconButtonRoot","edge","active","shortest","activeChannel","InputRoot","formControl","InputInput","inputComponentsProps","getInputUtilityClass","getInputAdornmentUtilityClass","InputAdornmentRoot","disablePointerEvents","maxHeight","positionStart","disableTypography","variantProp","Typography","getStyleValue","computedStyle","isEmpty","onChange","maxRows","minRows","isControlled","inputRef","shadowRef","renders","setState","getUpdatedState","ownerWindow","getComputedStyle","inputShallow","placeholder","innerHeight","scrollHeight","singleRowHeight","outerHeight","Number","min","outerHeightStyle","updateState","prevState","newState","syncHeight","handleResize","debounce","flushSync","syncHeightWithFlushSycn","containerWindow","resizeObserver","addEventListener","ResizeObserver","observe","removeEventListener","disconnect","useEnhancedEffect","rows","readOnly","rootOverridesResolver","adornedEnd","sizeSmall","inputOverridesResolver","inputSizeSmall","inputMultiline","inputTypeSearch","inputAdornedStart","inputAdornedEnd","inputHiddenLabel","InputBaseRoot","inputBaseClasses","InputBaseComponent","inputPlaceholder","placeholderHidden","placeholderVisible","font","letterSpacing","animationName","animationDuration","resize","inputGlobalStyles","ariaDescribedby","autoComplete","autoFocus","defaultValue","disableInjectingGlobalStyles","id","inputProps","inputPropsProp","inputRefProp","renderSuffix","valueProp","handleInputRefWarning","handleInputPropsRefProp","handleInputRefProp","handleInputRef","checkDirty","InputComponent","Boolean","isHostComponent","onAnimationStart","getInputBaseUtilityClass","hasValue","isFilled","SSR","isAdornedStart","getInputLabelUtilityClasses","InputLabelRoot","FormLabel","formLabelClasses","shrink","disableAnimation","animated","transformOrigin","shrinkProp","getLinkUtilityClass","colorTransformations","textPrimary","textSecondary","transformedColor","transformDeprecatedColors","channelColor","LinkRoot","textDecorationColor","TypographyClasses","sx","handlerRef","ariaHidden","show","removeAttribute","getPaddingRight","ariaHiddenSiblings","mountElement","currentElement","elementsToExclude","blacklist","isNotExcludedElement","isNotForbiddenElement","isForbiddenTagName","isInputHidden","isAriaHiddenForbiddenOnElement","findIndexOf","items","idx","some","item","handleContainer","containerInfo","restoreStyle","disableScrollLock","doc","ownerDocument","innerWidth","documentElement","isOverflowing","scrollbarSize","getScrollbarSize","el","scrollContainer","DocumentFragment","parentElement","nodeName","overflowY","overflowX","setProperty","removeProperty","candidatesSelector","defaultGetTabbable","regularTabNodes","orderedTabNodes","nodeTabIndex","tabindexAttr","isNaN","contentEditable","getTabIndex","getRadio","roving","isNonTabbableRadio","isNodeMatchingSelectorFocusable","documentOrder","sort","a","b","defaultIsEnabled","disableAutoFocus","disableEnforceFocus","disableRestoreFocus","getTabbable","isEnabled","ignoreNextEnforceFocus","sentinelStart","sentinelEnd","nodeToRestore","reactFocusEventTarget","activated","rootRef","lastKeydown","contains","activeElement","hasAttribute","contain","nativeEvent","rootElement","hasFocus","tabbable","_lastKeydown$current","_lastKeydown$current2","isShiftTab","shiftKey","focusNext","focusPrevious","loopFocus","interval","setInterval","clearInterval","handleFocusSentinel","relatedTarget","childrenPropsHandler","getModalUtilityClass","defaultManager","containers","modals","add","modal","modalIndex","modalRef","hiddenSiblings","getHiddenSiblings","mount","containerIndex","restore","remove","ariaHiddenState","nextTop","isTopModal","_props$ariaHidden","classesProp","closeAfterTransition","disableEscapeKeyDown","hideBackdrop","keepMounted","manager","onBackdropClick","onTransitionEnter","onTransitionExited","exited","setExited","mountNodeRef","hasTransition","getHasTransition","ariaHiddenProp","getModal","handleMounted","scrollTop","handleOpen","resolvedContainer","handlePortalRef","handleClose","createChainedFunction","BackdropComponent","Backdrop","backdropProps","backdrop","Portal","ModalRoot","hidden","ModalBackdrop","BackdropProps","commonProps","extendUtilityClasses","NotchedOutlineRoot","borderWidth","NotchedOutlineLegend","float","withLabel","notched","OutlinedInputRoot","InputBase","outlinedInputClasses","notchedOutline","OutlinedInputInput","OutlinedInput","_React$Fragment","getOutlinedInputUtilityClass","getPaperUtilityClass","getOverlayAlpha","alphaValue","log","PaperRoot","square","rounded","_theme$vars$overlays","paper","divider","backgroundImage","overlays","getWindow","defaultView","isElement","Element","isHTMLElement","isShadowRoot","ShadowRoot","getUAString","uaData","userAgentData","brands","brand","isLayoutViewport","includeScale","isFixedStrategy","clientRect","scaleX","scaleY","offsetWidth","offsetHeight","visualViewport","addVisualOffsets","offsetLeft","offsetTop","getWindowScroll","win","scrollLeft","pageXOffset","pageYOffset","getNodeName","getDocumentElement","getWindowScrollBarX","isScrollParent","_getComputedStyle","getCompositeRect","elementOrVirtualElement","offsetParent","isFixed","isOffsetParentAnElement","offsetParentIsScaled","isElementScaled","scroll","offsets","getNodeScroll","clientLeft","clientTop","getLayoutRect","getParentNode","assignedSlot","host","getScrollParent","listScrollParents","_element$ownerDocumen","scrollParent","isBody","updatedList","isTableElement","getTrueOffsetParent","getOffsetParent","isFirefox","currentNode","perspective","willChange","getContainingBlock","auto","basePlacements","clippingParents","viewport","popper","variationPlacements","placement","modifierPhases","modifiers","Map","visited","Set","modifier","requires","requiresIfExists","dep","depModifier","pending","Promise","then","DEFAULT_OPTIONS","strategy","areValidElements","popperGenerator","generatorOptions","_generatorOptions","_generatorOptions$def","defaultModifiers","_generatorOptions$def2","defaultOptions","orderedModifiers","modifiersData","elements","attributes","effectCleanupFns","isDestroyed","setOptions","setOptionsAction","cleanupModifierEffects","scrollParents","contextElement","phase","orderModifiers","merged","existing","mergeByName","m","enabled","_ref$options","effect","cleanupFn","noopFn","update","forceUpdate","_state$elements","rects","reset","_state$orderedModifie","_state$orderedModifie2","_options","onFirstUpdate","passive","getBasePlacement","getVariation","getMainAxisFromPlacement","computeOffsets","basePlacement","variation","commonX","commonY","mainAxis","unsetSides","mapToStyles","_ref2","_Object$assign2","popperRect","gpuAcceleration","adaptive","roundOffsets","_offsets$x","_offsets$y","_ref3","hasX","hasY","sideX","sideY","heightProp","widthProp","_Object$assign","commonStyles","_ref4","dpr","devicePixelRatio","roundOffsetsByDPR","_options$offset","invertDistance","skidding","distance","distanceAndSkiddingToXY","_data$state$placement","popperOffsets","getOppositePlacement","matched","getOppositeVariationPlacement","rootNode","getRootNode","isSameNode","rectToClientRect","getClientRectFromMixedType","clippingParent","layoutViewport","getViewportRect","getInnerBoundingClientRect","winScroll","scrollWidth","direction","getDocumentRect","getClippingRect","boundary","rootBoundary","mainClippingParents","clipperElement","getClippingParents","firstClippingParent","clippingRect","accRect","mergePaddingObject","paddingObject","expandToHashMap","hashMap","detectOverflow","_options$placement","_options$strategy","_options$boundary","_options$rootBoundary","_options$elementConte","elementContext","_options$altBoundary","altBoundary","_options$padding","altContext","clippingClientRect","referenceClientRect","popperClientRect","elementClientRect","overflowOffsets","offsetData","multiply","axis","within","_options$mainAxis","checkMainAxis","_options$altAxis","altAxis","checkAltAxis","_options$tether","tether","_options$tetherOffset","tetherOffset","isBasePlacement","referenceRect","tetherOffsetValue","normalizedTetherOffsetValue","offsetModifierState","_offsetModifierState$","mainSide","altSide","additive","minLen","maxLen","arrowElement","arrow","arrowRect","arrowPaddingObject","arrowPaddingMin","arrowPaddingMax","arrowLen","minOffset","maxOffset","arrowOffsetParent","clientOffset","offsetModifierValue","tetherMax","preventedOffset","_offsetModifierState$2","_mainSide","_altSide","_offset","_min","_max","isOriginSide","_offsetModifierValue","_tetherMin","_tetherMax","_preventedOffset","withinMaxClamp","_state$modifiersData$","toPaddingObject","minProp","maxProp","endDiff","startDiff","clientSize","centerToReference","axisProp","centerOffset","_options$element","getSideOffsets","preventedOffsets","isAnySideFullyClipped","side","_options$scroll","_options$resize","_ref5","_options$gpuAccelerat","_options$adaptive","_options$roundOffsets","initialStyles","attribute","_skip","specifiedFallbackPlacements","fallbackPlacements","_options$flipVariatio","flipVariations","allowedAutoPlacements","preferredPlacement","oppositePlacement","getExpandedFallbackPlacements","placements","_options$allowedAutoP","allowedPlacements","overflows","computeAutoPlacement","checksMap","makeFallbackChecks","firstFittingPlacement","_basePlacement","isStartVariation","isVertical","mainVariationSide","altVariationSide","checks","every","check","_loop","fittingPlacement","find","preventOverflow","referenceOverflow","popperAltOverflow","referenceClippingOffsets","popperEscapeOffsets","isReferenceHidden","hasPopperEscaped","getPopperUnstyledUtilityClass","resolveAnchorEl","anchorEl","defaultPopperOptions","PopperTooltip","initialPlacement","popperOptions","popperRef","popperRefProp","TransitionProps","tooltipRef","ownRef","handlePopperRef","handlePopperRefRef","rtlPlacement","flipPlacement","setPlacement","popperModifiers","containerProp","PopperRoot","getListUtilityClass","ListRoot","disablePadding","dense","subheader","listStyle","context","ListContext","nextItem","disableListWrap","previousItem","lastChild","previousElementSibling","textCriteriaMatches","nextFocus","textCriteria","innerText","textContent","repeating","moveFocus","currentFocus","disabledItemsFocusable","traversalFunction","wrappedOnce","nextFocusDisabled","actions","autoFocusItem","listRef","textCriteriaRef","previousKeyMatched","lastTime","adjustStyleForScrollbar","containerElement","noExplicitWidth","activeItemIndex","newChildProps","criteria","lowerKey","currTime","performance","now","keepFocusOnCurrent","getPopoverUtilityClass","getOffsetTop","vertical","getOffsetLeft","horizontal","getTransformOriginValue","PopoverRoot","Modal","PopoverPaper","minHeight","anchorOrigin","anchorPosition","anchorReference","marginThreshold","PaperProps","transitionDurationProp","paperRef","handlePaperRef","getAnchorOffset","resolvedAnchorEl","anchorRect","nodeType","getTransformOrigin","elemRect","getPositioningStyle","elemTransformOrigin","anchorOffset","heightThreshold","widthThreshold","diff","setPositioningStyles","positioning","updatePosition","getMenuUtilityClass","RTL_ORIGIN","LTR_ORIGIN","MenuRoot","MenuPaper","WebkitOverflowScrolling","MenuMenuList","disableAutoFocusItem","MenuListProps","PopoverClasses","isRtl","menuListActionsRef","getNativeSelectUtilityClasses","nativeSelectSelectStyles","NativeSelectSelect","select","multiple","nativeSelectIconStyles","NativeSelectIcon","iconOpen","IconComponent","getSelectUtilityClasses","SelectSelect","SelectIcon","SelectNativeInput","nativeInput","areEqualValues","ariaLabel","autoWidth","defaultOpen","displayEmpty","labelId","MenuProps","onOpen","openProp","renderValue","SelectDisplayProps","tabIndexProp","setValueState","useControlled","controlled","openState","setOpenState","displayRef","displayNode","setDisplayNode","isOpenControlled","menuMinWidthState","setMenuMinWidthState","handleDisplayRef","getElementById","handler","getSelection","isCollapsed","childrenArray","toArray","handleItemClick","newValue","itemIndex","clonedEvent","displaySingle","displayMultiple","computeDisplay","foundMatch","firstSelectableElement","isFirstSelectableElement","menuMinWidth","buttonId","_StyledInput","_StyledFilledInput","styledRootConfig","StyledInput","StyledOutlinedInput","StyledFilledInput","Select","ArrowDropDown","A","native","standard","outlined","inputComponentRef","deepmerge","getUnit","toUnitless","parseFloat","getSkeletonUtilityClass","pulseKeyframe","waveKeyframe","SkeletonRoot","animation","hasChildren","withChildren","fitContent","heightAuto","radiusUnit","radiusValue","Skeleton","getSvgIconUtilityClass","SvgIconRoot","_theme$transitions","_theme$transitions$cr","_theme$transitions2","_theme$transitions2$d","_theme$typography","_theme$typography$pxT","_theme$typography2","_theme$typography2$px","_theme$typography3","_theme$typography3$px","_palette$ownerState$c","_palette$ownerState$c2","_palette2","_palette2$action","_palette3","_palette3$action","inherit","small","medium","large","SvgIcon","htmlColor","inheritViewBox","titleAccess","instanceFontSize","more","focusable","getTextFieldUtilityClass","variantComponent","TextFieldRoot","FormControl","FormHelperTextProps","helperText","idOverride","InputLabelProps","InputProps","SelectProps","InputMore","useId","helperTextId","inputLabelId","InputElement","InputLabel","htmlFor","FormHelperText","TooltipPopper","disableInteractive","popperInteractive","popperArrow","popperClose","tooltip","TooltipTooltip","touch","tooltipArrow","Tooltip","wordWrap","fontWeightRegular","TooltipArrow","hystersisOpen","hystersisTimer","composeEventHandler","eventHandler","_components$Popper","_components$Transitio","_components$Tooltip","_components$Arrow","_componentsProps$popp","describeChild","disableFocusListener","disableHoverListener","disableInteractiveProp","disableTouchListener","enterDelay","enterNextDelay","enterTouchDelay","followCursor","idProp","leaveDelay","leaveTouchDelay","PopperComponent","PopperComponentProp","PopperProps","TransitionComponentProp","childNode","setChildNode","arrowRef","setArrowRef","ignoreNonTouchEvents","closeTimer","enterTimer","leaveTimer","touchTimer","prevUserSelect","stopTouchInteraction","WebkitUserSelect","handleLeave","setChildIsFocusVisible","detectTouchStart","childrenProps","handleMouseOver","handleUseRef","handleFocusRef","positionRef","nameOrDescProps","titleIsString","onMouseMove","interactiveWrapperListeners","onMouseOver","_PopperProps$popperOp","tooltipModifiers","Popper","Transition","TooltipComponent","ArrowComponent","Arrow","popperProps","tooltipProps","tooltipArrowProps","TransitionPropsInner","_componentsProps$tool","_componentsProps$arro","getTooltipUtilityClass","getTypographyUtilityClass","TypographyRoot","align","noWrap","gutterBottom","paragraph","defaultVariantMapping","h1","h2","h3","h4","h5","h6","subtitle1","subtitle2","themeProps","extendSxProp","variantMapping","black","A200","A400","A700","activatedOpacity","addLightOrDark","intent","shade","tonalOffset","tonalOffsetLight","tonalOffsetDark","createPalette","contrastThreshold","getDefaultPrimary","getDefaultSecondary","getDefaultError","getDefaultInfo","getDefaultSuccess","getDefaultWarning","augmentColor","mainShade","lightShade","darkShade","JSON","modes","caseAllCaps","textTransform","defaultFontFamily","createTypography","fontWeightLight","htmlFontSize","allVariants","pxToRem2","coef","buildVariant","casing","variants","overline","clone","createShadow","px","mobileStepper","fab","speedDial","appBar","drawer","snackbar","mixins","mixinsInput","paletteInput","transitionsInput","typographyInput","systemTheme","muiTheme","breakpoints","toolbar","up","createTransitions","argument","easeIn","sharp","complex","formatMs","milliseconds","constant","inputTransitions","mergedEasing","mergedDuration","durationOption","easingOption","animatedProp","_excluded3","systemDefaultTheme","createTheme","lowercaseFirstLetter","charAt","resolveTheme","defaultOverridesResolver","processStyleArg","callableStyle","resolvedStylesArg","flatMap","resolvedStyle","isMatch","rootShouldForwardProp","slotShouldForwardProp","systemSx","styleFunctionSx","__mui_systemSx","inputOptions","componentSlot","skipVariantsResolver","inputSkipVariantsResolver","skipSx","inputSkipSx","shouldForwardPropOption","defaultStyledResolver","transformStyleArg","stylesArg","__emotion_real","muiStyledResolver","styleArg","expressions","transformedStyleArg","expressionsWithDefaultTheme","resolvedStyleOverrides","entries","slotKey","slotStyle","numOfCustomFnsApplied","placeholders","withConfig","createStyled","getThemeProps","reflow","getTransitionProps","_style$transitionDura","_style$transitionTimi","transitionDelay","path","validator","reason","componentNameInError","propName","location","propFullName","unstable_ClassNameGenerator","configure","generator","ClassNameGenerator","muiNames","_muiName","_element$type","_payload","Timeout","currentId","disposeEffect","hadKeyboardEvent","hadFocusVisibleRecently","hadFocusVisibleRecentlyTimeout","inputTypesWhitelist","url","tel","email","password","number","date","month","week","time","datetime","metaKey","altKey","ctrlKey","handlePointerDown","handleVisibilityChange","visibilityState","isFocusVisible","matches","isContentEditable","focusTriggersKeyboardModality","reactPropsRegex","isPropValid","testOmitPropsOnStringTag","testOmitPropsOnComponent","getDefaultShouldForwardProp","composeShouldForwardProps","isReal","optionsShouldForwardProp","__emotion_forwardProp","newStyled","targetClassName","baseTag","__emotion_base","defaultShouldForwardProp","shouldUseAs","Styled","FinalTag","classInterpolations","finalShouldForwardProp","defaultProps","withComponent","nextTag","nextOptions","internal_processStyles","processor","for","localTheme","mergeOuterLocalTheme","nested","RtlContext","PropsContext","EMPTY_THEME","useThemeScoping","isPrivate","resolvedTheme","mergedTheme","useThemeWithoutDefault","upperPrivateTheme","engineTheme","privateTheme","rtlValue","values","sm","md","lg","xl","defaultBreakpoints","handleBreakpoints","propValue","styleFromPropValue","themeBreakpoints","breakpoint","cssKey","createEmptyBreakpointObject","breakpointsInput","_breakpointsInput$key","removeUnusedBreakpoints","breakpointKeys","breakpointOutput","mergeBreakpointsInOrder","emptyBreakpoints","mergedOutput","resolveBreakpointValues","breakpointValues","base","customBase","breakpointsKeys","computeBreakpointsBase","val","MIN_SAFE_INTEGER","MAX_SAFE_INTEGER","clampWrapper","decomposeColor","re","RegExp","colors","hexToRgb","marker","substring","colorSpace","recomposeColor","getLuminance","rgb","hslToRgb","getContrastRatio","foreground","lumA","lumB","alpha","darken","coefficient","lighten","o","createBox","BoxRoot","_extendSxProp","sortBreakpointsValues","breakpointsAsArray","breakpoint1","breakpoint2","applyStyles","spacing","spacingInput","shapeInput","unit","step","sortedValues","down","between","endIndex","only","not","keyIndex","createBreakpoints","mui","argsInput","createSpacing","unstable_sxConfig","defaultSxConfig","unstable_sx","properties","directions","aliases","marginX","marginY","paddingX","paddingY","getCssProperties","dir","marginKeys","paddingKeys","spacingKeys","createUnaryUnit","themeKey","_getPath","themeSpacing","createUnarySpacing","getValue","transformer","transformed","resolveCssProperty","cssProperties","cssProperty","getStyleFromPropValue","propTypes","filterProps","getPath","checkVars","themeMapping","propValueFinal","userValue","handlers","borderTransform","createBorderStyle","borderTop","borderRight","borderLeft","borderTopColor","borderRightColor","borderLeftColor","outlineColor","gap","columnGap","rowGap","paletteTransform","sizingTransform","_props$theme","_props$theme2","bgcolor","pt","pr","pb","pl","py","paddingInline","paddingInlineStart","paddingInlineEnd","paddingBlock","paddingBlockStart","paddingBlockEnd","mt","mr","mb","ml","mx","my","marginInline","marginInlineStart","marginInlineEnd","marginBlock","marginBlockStart","marginBlockEnd","displayPrint","flexBasis","flexWrap","alignContent","alignSelf","justifyItems","justifySelf","gridAutoFlow","gridAutoColumns","gridAutoRows","gridTemplateColumns","gridTemplateRows","gridTemplateAreas","gridArea","fontStyle","splitProps","_props$theme$unstable","systemProps","config","inSx","finalSx","getThemeValue","_theme$unstable_sxCon","traverse","sxInput","sxObject","styleKey","maybeFn","breakpointsValues","objects","allKeys","union","objectsHaveSameKeys","unstable_createStyleFunctionSx","contextTheme","defaultGenerator","createClassNameGenerator","toUpperCase","getUtilityClass","utilityClass","funcs","wait","debounced","isPlainObject","toStringTag","iterator","deepClone","source","formatMuiErrorMessage","code","encodeURIComponent","globalStateClasses","checked","completed","expanded","globalStatePrefix","globalStateClass","documentWidth","defaultSlotProps","slotProps","slotPropName","setRef","defaultProp","valueState","setValue","refs","globalId","maybeReactUseId","reactId","defaultId","setDefaultId","useGlobalId","byteLength","b64","lens","getLens","validLen","placeHoldersLen","toByteArray","tmp","Arr","_byteLength","curByte","revLookup","fromByteArray","uint8","extraBytes","parts","maxChunkLength","len2","encodeChunk","lookup","num","base64","ieee754","customInspectSymbol","INSPECT_MAX_BYTES","K_MAX_LENGTH","createBuffer","RangeError","setPrototypeOf","actual","fromString","ArrayBuffer","isView","arrayView","isInstance","fromArrayBuffer","byteOffset","fromArrayLike","fromArrayView","SharedArrayBuffer","valueOf","numberIsNaN","fromObject","toPrimitive","assertSize","mustMatch","loweredCase","utf8ToBytes","base64ToBytes","slowToString","hexSlice","utf8Slice","asciiSlice","latin1Slice","base64Slice","utf16leSlice","swap","bidirectionalIndexOf","arrayIndexOf","lastIndexOf","indexSize","arrLength","valLength","readUInt16BE","foundIndex","found","hexWrite","remaining","strLen","substr","utf8Write","blitBuffer","asciiWrite","byteArray","asciiToBytes","base64Write","ucs2Write","units","hi","lo","utf16leToBytes","firstByte","codePoint","bytesPerSequence","secondByte","thirdByte","fourthByte","tempCodePoint","codePoints","MAX_ARGUMENTS_LENGTH","decodeCodePointsArray","kMaxLength","TYPED_ARRAY_SUPPORT","proto","foo","typedArraySupport","poolSize","_isBuffer","compare","pos","swap16","swap32","swap64","toLocaleString","equals","thisStart","thisEnd","thisCopy","targetCopy","isFinite","toJSON","_arr","hexSliceLookupTable","bytes","checkOffset","ext","checkInt","wrtBigUInt64LE","checkIntBI","BigInt","wrtBigUInt64BE","checkIEEE754","writeFloat","littleEndian","noAssert","writeDouble","newBuf","subarray","readUintLE","readUIntLE","mul","readUintBE","readUIntBE","readUint8","readUInt8","readUint16LE","readUInt16LE","readUint16BE","readUint32LE","readUInt32LE","readUint32BE","readUInt32BE","readBigUInt64LE","defineBigIntMethod","validateNumber","first","boundsError","readBigUInt64BE","readIntLE","pow","readIntBE","readInt8","readInt16LE","readInt16BE","readInt32LE","readInt32BE","readBigInt64LE","readBigInt64BE","readFloatLE","readFloatBE","readDoubleLE","readDoubleBE","writeUintLE","writeUIntLE","writeUintBE","writeUIntBE","writeUint8","writeUInt8","writeUint16LE","writeUInt16LE","writeUint16BE","writeUInt16BE","writeUint32LE","writeUInt32LE","writeUint32BE","writeUInt32BE","writeBigUInt64LE","writeBigUInt64BE","writeIntLE","limit","sub","writeIntBE","writeInt8","writeInt16LE","writeInt16BE","writeInt32LE","writeInt32BE","writeBigInt64LE","writeBigInt64BE","writeFloatLE","writeFloatBE","writeDoubleLE","writeDoubleBE","targetStart","copyWithin","sym","getMessage","Base","configurable","stack","addNumericalSeparator","range","ERR_OUT_OF_RANGE","checkBounds","ERR_INVALID_ARG_TYPE","ERR_BUFFER_OUT_OF_BOUNDS","msg","received","isInteger","INVALID_BASE64_RE","Infinity","leadSurrogate","base64clean","alphabet","table","i16","BufferBigIntNotDefined","objectToString","isBoolean","isNull","isNullOrUndefined","isNumber","isString","isSymbol","isUndefined","isRegExp","isObject","isDate","isError","isFunction","isPrimitive","___CSS_LOADER_EXPORT___","cssWithMappingToString","needLayer","modules","media","dedupe","supports","layer","alreadyImportedModules","_k","cssMapping","btoa","unescape","sourceMapping","noop","eos","ws","cancelled","onlegacyfinish","onexit","exitCode","onclosenexttick","onrequest","req","setHeader","abort","isRequest","stdio","isChildProcess","_a","_b","buttonSmallRadius","AddNewCexButton","smallGutterMargin","xmlns","AddressDescription","address","CopyCard","testId","onCopy","clipboard","writeText","execCommand","currency","estimatedValue","local","displayDefaultEstimatedValue","loading","gutterMargin","CurrencyAmountFormatter","amount","integer","decimal","AmountFieldWithTokens","assets","setAmount","selectedAsset","setSelectedAsset","availableBalance","subListTitles","amountIsLoading","sortedItems","useMemo","inputRadius","disableModalPortal","sublistTitles","BackButton","handleReturn","Button","buttonRoundedRadius","buttonDefaultRadius","IconVariant","tooltipClasses","ComponentUnderlay","underlayColor","newSize","setNewSize","useState","changeSize","sizeNumber","iconSize","iconUnderlayMargin","useEffect","ConnectionStatus","CopyBox","darkPaper","defaultBoxRadius","CopyIconButton","isCopied","setIsCopied","anchor","useRef","onClickBody","largeBoxRadius","wordBreak","isOpen","popupOpened","setPopupOpened","catch","topLayer","onPointerEnterCapture","onPointerLeaveCapture","getTypography","hideBalance","formattedNumber","rate","symbol","separatorIndex","AmountDropListWithIconItemElement","option","setOpen","shouldDisableItem","disabledTextItem","isDisabled","img","Icon","iconUrl","iconName","textWrap","isLoading","balance","disabledText","userFacingMessages","EXCHANGES_STATUSES","TEMPORARILY_UNAVAILABLE","windowObject","cancelFrame","requestFrame","clearTimeoutFn","setTimeoutFn","cancelAnimationFrameFn","cancelAnimationFrame","mozCancelAnimationFrame","webkitCancelAnimationFrame","requestAnimationFrameFn","requestAnimationFrame","mozRequestAnimationFrame","webkitRequestAnimationFrame","createDetectElementResize","animationKeyframes","animationStartEvent","animationStyle","checkTriggers","resetTriggers","scrollListener","attachEvent","triggers","__resizeTriggers__","expand","firstElementChild","contract","lastElementChild","expandChild","__resizeLast__","__resizeRAF__","__resizeListeners__","keyframeprefix","domPrefixes","startEvents","pfx","elm","addResizeListener","elementStyle","getElementsByTagName","styleSheet","cssText","createStyles","expandTrigger","contractTrigger","__animationListener__","removeResizeListener","detachEvent","animationFrameID","timeoutID","AutoSizer","defaultHeight","scaledHeight","scaledWidth","defaultWidth","_autoSizer","_detectElementResize","_parentNode","_resizeObserver","_timeoutId","_onResize","disableHeight","disableWidth","onResize","_setRef","autoSizer","componentDidMount","ResizeObserverInstance","componentWillUnmount","doNotBailOutOnEmptyChildren","outerStyle","childParams","bailoutOnChildren","safeIsNaN","areInputsEqual","newInputs","lastInputs","second","resultFn","isEqual","lastThis","lastResult","lastArgs","calledOnce","newArgs","Date","cancelTimeout","requestTimeout","tick","recalculate","div","cachedRTLResult","getRTLOffsetType","outerDiv","innerDiv","innerStyle","defaultItemKey$1","createListComponent","_class","getItemOffset","getEstimatedTotalSize","getItemSize","getOffsetForIndexAndAlignment","getStartIndexForOffset","getStopIndexForStartIndex","initInstanceProps","shouldResetStyleCacheOnItemSizeChange","validateProps","_PureComponent","List","_instanceProps","_outerRef","_resetIsScrollingTimeoutId","isScrolling","scrollDirection","scrollOffset","initialScrollOffset","scrollUpdateWasRequested","_callOnItemsRendered","overscanStartIndex","overscanStopIndex","visibleStartIndex","visibleStopIndex","onItemsRendered","_callOnScroll","onScroll","_getItemStyle","_this$props","itemSize","layout","itemStyleCache","_getItemStyleCache","isHorizontal","offsetHorizontal","__","___","_onScrollHorizontal","_event$currentTarget","_resetIsScrollingDebounced","_onScrollVertical","_event$currentTarget2","_outerRefSetter","outerRef","_resetIsScrolling","getDerivedStateFromProps","nextProps","validateSharedProps$1","scrollTo","scrollToItem","_this$props2","itemCount","_this$props3","_callPropsCallbacks","componentDidUpdate","_this$props4","_this$state","_this$props5","innerRef","innerElementType","innerTagName","itemData","_this$props5$itemKey","itemKey","outerElementType","outerTagName","useIsScrolling","_this$_getRangeToRend","_getRangeToRender","startIndex","stopIndex","_index","estimatedTotalSize","_this$_getRangeToRend2","_overscanStartIndex","_overscanStopIndex","_visibleStartIndex","_visibleStopIndex","_this$state2","_scrollDirection","_scrollOffset","_scrollUpdateWasRequested","_this$props6","overscanCount","_this$state3","overscanBackward","overscanForward","PureComponent","getItemMetadata$1","instanceProps","itemMetadataMap","lastMeasuredIndex","itemMetadata","findNearestItemBinarySearch$1","high","low","middle","currentOffset","findNearestItemExponentialSearch$1","estimatedItemSize","totalSizeOfMeasuredItems","VariableSizeList","findNearestItem$1","resetAfterIndex","shouldForceUpdate","DropListWithIconInput","isActive","onClear","Box","InputAdornment","defaultIcon","defaultImg","isDropListItemTitle","DropListWithIconModal","emptyMessage","description","actionButton","baseElement","BaseElement","renderItem","bottomElement","searchValue","setSearchValue","setIsOpen","selectedItemValue","filterItemList","filteredAndSortedItems","isLabelSearched","isSearchTermSearched","searchableTerms","searchableTerm","selectedItemIndex","findIndex","selectedItem","filteredItems","sortedLists","itemTitle","searchInputRef","setSearchInputRef","openModal","Row","AmountDropListWithIconItem","storeSize","mediumBoxRadius","SearchBar","CircularProgress","EmptyStateTypeEnum","EmptyState","emptyStateType","SUCCESS","INFO","ERROR","WARNING","ExternalLink","inNewTab","linkColor","rel","iconChildUrl","customSize","customChildIconPosition","positionChildIcon","alt","onError","URL","isCDNIcon","origin","setTranslateValue","containerPropProp","containerRect","fakeTransform","getPropertyValue","offsetX","offsetY","transformValues","getTranslateValue","webkitTransform","defaultEasing","easingProp","childrenRef","handleRefIntermediary","IconButtonWithPopper","popperPlacement","onPopperClick","isAnimated","persistent","animationTimeout","popperSx","hasBorderRadius","setHasBorderRadius","animationStart","popperId","onMouseEnter","baseLayer","cedePrimaryColor","borderBottomLeftRadius","getCompactWidth","maxIcons","DefautExtraLabel","icons","filteredIcons","compactStyle","withBubble","itemTranslation","isOverlapped","bubbleIsOpen","setBubbleIsOpen","anchorRef","hiddenIcons","textSize","IconGroup","forceCollapse","renderLabelElement","iconSx","ButtonExtraLabel","isSelected","KeyboardBackspace","HideButton","IconText","textTag","isStateLoading","IconTextSubText","I","subIcon","sxSubGroup","subText","getCollapseUtilityClass","CollapseRoot","orientation","collapsedSize","CollapseWrapper","wrapper","CollapseWrapperInner","wrapperInner","Collapse","collapsedSizeProp","wrapperRef","autoTransitionDuration","getWrapperSize","wrapperSize","duration2","InformationCard","actionElement","alert","LogoSizeEnum","Logo","imageSize","LARGE","imgSize","MEDIUM","SMALL","borderSize","logoBorderColor","StoreLogo","paperSx","header","handleChange","ArrowBack","Title","useNavBar","leftSide","rightSide","isDisplayed","setLeftSide","setCenter","setRightSide","setIsDisplayed","toggleDisplay","setLogo","setGoBack","setTitle","setGeneral","PendingTransactionLoader","ApiPermissions","READ","TRADE","WITHDRAW","Bubble","hideArrow","onMouseOut","popperBackground","cedeBubbleBackgroundColor","clipPath","ResizeFieldsWrapper","fieldElements","middleElement","focusRef","indexesDisabled","fieldRefs","componentRef","focusElement","setFocusElement","field","unFocus","removeStyle","Fragment","onSubmit","TextFieldWithIcon","Search","iconPosition","setIsActive","CefiServices","CARD","STAKING","ShareOnTwitter","mappingTable","mappedContent","mapContent","twitterUrl","Link","innerLogoColor","XIcon","DiscordIcon","fillRule","clipRule","SpinnerLoader","PandaBasic","x1","y1","x2","y2","gradientUnits","stopColor","PandaHappy","PandaSad","cachedType","detectScrollType","dummy","getNormalizedScrollLeft","easeInOutSin","sin","getTabScrollButtonUtilityClass","_KeyboardArrowLeft","_KeyboardArrowRight","TabScrollButtonRoot","KeyboardArrowLeft","KeyboardArrowRight","getTabsUtilityClass","TabsRoot","scrollButtons","scrollButtonsHideMobile","TabsScroller","scroller","fixed","hideScrollbar","scrollableX","scrollableY","scrollbarWidth","FlexContainer","flexContainer","flexContainerVertical","centered","TabsIndicator","indicator","indicatorColor","TabsScrollbarSize","scrollbarHeight","setMeasurements","prevHeight","defaultIndicatorStyle","ariaLabelledBy","childrenProp","allowScrollButtonsMobile","ScrollButtonComponent","selectionFollowsFocus","TabIndicatorProps","TabScrollButtonProps","visibleScrollbar","scrollable","scrollStart","mounted","setMounted","indicatorStyle","setIndicatorStyle","displayScroll","setDisplayScroll","scrollerStyle","setScrollerStyle","valueToIndex","tabsRef","tabListRef","getTabsMeta","tabsNode","tabsMeta","tabMeta","scrollLeftNormalized","tab","updateIndicatorState","startIndicator","startValue","correction","newIndicatorStyle","dStart","dSize","scrollValue","ease","cancel","timestamp","animate","moveTabsScroll","delta","getScrollSize","containerSize","totalSize","handleStartScrollClick","handleEndScrollClick","handleScrollbarSizeChange","scrollSelectedIntoView","nextScrollStart","updateScrollButtonState","showStartScroll","showEndScroll","handleTabsScroll","updateIndicator","updateScrollButtons","childIndex","childValue","conditionalElements","scrollbarSizeListener","scrollButtonsActive","showScrollButtons","scrollButtonStart","scrollButtonEnd","getConditionalElements","previousItemKey","nextItemKey","tabsColor","selectedColor","inactive","cedePrimaryColorLight","cedeSecondaryColorDark","cedeTextPrimaryColor","cedeTextDisabled","inputSx","iconRotation","iconVisibility","iconPositionProps","StyledEngineProvider","injectFirst","C","CssBaseline","themeConfig","MuiFormControl","MuiChip","MuiSwitch","MuiTextField","legend","MuiOutlinedInput","MuiListItem","MuiTab","MuiAutocomplete","MuiSkeleton","cedeSkeleton","TransactionStatusCardLite","amountValue","cryptoCurrency","cryptoCurrencyTo","transactionType","assetTokenSymbol","maxDigits","placeItems","cedeComponentHr","stripDiacritics","normalize","comp","defaultFilterOptions","ignoreAccents","ignoreCase","matchFrom","inputValue","getOptionLabel","filteredOptions","candidate","createFilterOptions","useAutocomplete","autoHighlight","autoSelect","blurOnSelect","clearOnBlur","freeSolo","clearOnEscape","disableClearable","disableCloseOnSelect","disabledProp","filterOptions","filterSelectedOptions","getOptionDisabled","getOptionLabelProp","_option$label","groupBy","handleHomeEndKeys","includeInputInList","inputValueProp","isOptionEqualToValue","onHighlightChange","onInputChange","openOnFocus","selectOnFocus","optionLabel","ignoreFocus","firstFocus","listboxRef","setAnchorEl","focusedTag","setFocusedTag","defaultHighlighted","highlightedIndexRef","setInputValueState","resetInputValue","newInputValue","prevValue","valueChange","inputPristine","setInputPristine","inputValueIsSelectedValue","popupOpen","value2","listboxAvailable","focusTag","tagToFocus","setHighlightedIndex","classList","listboxNode","scrollBottom","elementBottom","changeHighlightedIndex","nextIndex","validOptionIndex","maxIndex","newIndex","getNextIndex","setSelectionRange","syncHighlightedIndex","valueItem","currentOption","optionItem","handleListboxRef","handleValue","details","isTouch","selectNewValue","reasonProp","handleFocusTag","validTagIndex","handleClear","defaultMuiPrevented","which","handleInputChange","handleOptionMouseOver","handleOptionTouchStart","handleOptionClick","handleTagDelete","handlePopupIndicator","handleClick","selectionEnd","selectionStart","handleInputMouseDown","dirty","groupedOptions","group","getRootProps","getInputLabelProps","getInputProps","autoCapitalize","spellCheck","getClearProps","getPopupIndicatorProps","getTagProps","getListboxProps","getOptionProps","getListSubheaderUtilityClass","ListSubheaderRoot","disableGutters","gutters","inset","disableSticky","sticky","getAutocompleteUtilityClass","_ClearIcon","_ArrowDropDownIcon","AutocompleteRoot","hasClearIcon","hasPopupIcon","inputFocused","inputRoot","clearIndicator","inputClasses","filledInputClasses","AutocompleteEndAdornment","AutocompleteClearIndicator","AutocompletePopupIndicator","popupIndicator","popupIndicatorOpen","AutocompletePopper","popperDisablePortal","AutocompletePaper","AutocompleteLoading","AutocompleteNoOptions","noOptions","AutocompleteListbox","listbox","AutocompleteGroupLabel","groupLabel","AutocompleteGroupUl","groupUl","_componentsProps$clea","_componentsProps$popu","_componentsProps$pape","ChipProps","clearIcon","clearText","forcePopupIcon","getLimitTagsText","limitTags","ListboxComponent","ListboxProps","loadingText","noOptionsText","openText","PaperComponent","popupIcon","renderGroup","renderGroupProp","renderInput","renderOption","renderOptionProp","renderTags","getCustomizedTagProps","props2","renderListOption","optionProps","option2","index2","ValidationDropList","selectTitle","validate","disableOptions","SKELETON_IDENTIFIER","validationStatus","setValidationStatus","setHelperText","firstLostFocusOrType","setFirstLostFocusOrType","validation","toggleModal","forceState","currentModalState","manageModalState","localeCompare","cedePaperDarkBackgroundColor","_props","_event","TextField","onInput","ValidationTextField","validateOnMount","elementRef","triggerValidate","cancelValidation","useImperativeHandle","ValidationTextFieldWithIcon","subCaption","helperSx","useValidation","allowValidationRef","_validate","latestVersion","connect","vaults","vaultAccounts","supportedExchanges","getWithdrawalById","transactions","balances","nfts","openOrders","retrieveOrder","editOrder","getMinAmounts","createOrder","prepareOrder","getStandardizedNetworks","getMarketPairs","getMarketRate","tickers","tokens","activeVault","depositableTokens","getNetworks","deposit","cancelOrder","addCex","withdrawToDefi","withdrawableTokens","getPrices","prepareWithdrawal","getSettings","getEnvironment","getAddressBook","checkAddressIsWhitelisted","searchTransaction","getWidgetBundleUrl","getWhitelistedAddresses","getTradePath","getSupportedTokens","isWalletTypeTotupNeeded","trackLink","openPageWithHelper","untrackLink","getConfig","fetchPartners","getCurrentAppTab","focusTab","getUserId","getTradePathBySupportedTokens","verifyKYC","getTokenNamesAndSymbols","getDiscordInvitation","hasJoinedDiscord","getOHLCV","openTab","setByPassApprovalTradeHub","canByPassApprovalTradeHub","getAppVersion","CedeProvider","inpageProvider","request","anyArgs","listener","off","removeAllListeners","getVaultPreviews","getIsUnlocked","getIsConnected","getActiveVault","detectCedeProvider","handled","handleConnection","cede","cedeProvider","displayInstallationModal","readOnlyOnboarding","callbackUrl","inferTheme","UI","displayLayout","renderHtml","OnBoardingModal","clearPrevious","animateOnExit","errorObj","flattened","recursiveExtract","parentKey","currentObj","fullKey","documentation","sanitizeErrors","cedeErrors","safeApply","Reflect","SafeEventEmitter","EventEmitter","doError","arrayClone","connectionStream","jsonRpcStreamName","maxEventListeners","ethErrors","rpc","invalidRequest","executedMethodPromise","payload","jsonrpc","_rpcEngine","handle","isConnected","_state","isUnlocked","_connectionStream","setMaxListeners","structuredClone","_defaultState","_handleStreamDisconnect","mux","_jsonRpcConnection","createStreamMiddleware","rpcEngine","JsonRpcEngine","createIdRemapMiddleware","executeMethod","streamName","vaultPreviews","_connectionEstablished","_updateVaults","vaultsPreview","vault","onExchangesStatusesUpdate","exchangesStatuses","_unlock","_lock","_trackLogin","tabId","redirectLink","websiteHomelinkIdentifier","notConnectedIdentifier","handleRedirection","redirectUrl","pathname","getNotificationApi","methodFn","DependenciesContext","createContext","useDependencies","Proxy","BTC","ETH","convertToDictionary","prices","tokenSymbol","usePrices","useBackgroundHandler","backgroundHandler","useQuery","queryKey","queryFn","isReady","setPrices","providerHandlerFactory","provider","HandlerType","UNTRUSTED_PROVIDER_API","onProviderNotFound","onProviderFound","refetch","refetchProvider","gcTime","staleTime","useLoginStore","isLoggedIn","setIsLoggedIn","useViewEnvironmentStore","viewEnvironment","setViewEnvironment","environment","determineViewEnvironment","ViewEnvironment","WIDGET","chrome","tabs","getCurrent","TAB","POPUP","reactSdkDefaultDependencies","useLogin","onSuccess","useProviderEvents","checkAutoLogin","bgHandler","silent","onboard","onUnlock","onLock","mutateAsync","login","isPending","useMutation","mutationFn","handleLogin","useVaults","fetchedVaults","refetchVaults","areVaultsLoading","VAULTS_QUERY_KEY","onAccountsChanged","VAULTS_EVENTS_QUERY_KEY","vaultsById","useSupportedExchanges","SUPPORTED_EXCHANGES","availableExchanges","isFetching","isUnavailableExchangesLoading","refetchUnavailableExchanges","AVAILABLE_EXCHANGES","promises","exchange","verifyApiCountryAvailability","exchangeId","all","supportedExchangesById","curr","downExchanges","ExchangeStatus","Shutdown","Maintenance","status","downExchangesIds","unavailableExchangesIds","isAvailable","refetchSupportedExchanges","isSupportedExchangesLoading","supportedExchangesError","isRequiringWhitelist","permissions","permission","whitelistScopes","shouldDisableCex","feature","cexValue","featuresUnderMaintenance","featureKeyToPermission","disabledCexText","MissingPermissionElement","UNDER_MAINTENANCE","isFeatureSupportedByCex","supportedFeatures","hasAtLeastOneCexSupported","useAccounts","accounts","droplistAccounts","accountsByIds","accountsIds","areAccountsLoading","account","accountName","RECONNECTION_REQUIRED","ACCOUNT","OFFLINE","usePrice","useSetupPrices","callbacks","refetchOnWindowFocus","refetchInterval","hasBeenUnlockedRef","queryKeyRef","onUnlockHandler","onLockHandler","onAccountsChangedHandler","PROVIDER_EVENTS_QUERY","useViewEnvironment","URLSearchParams","queries","dependencies","finalDependencies","QueryClientProvider","client","settings","padRight","padLeft","nameRe","nameReJsx","emptyOptions","empty","Schema","normal","space","definitions","Info","boolean","booleanish","overloadedBoolean","commaSeparated","spaceSeparated","commaOrSpaceSeparated","mustUseProperty","defined","powers","increment","DefinedInfo","mask","mark","own","definition","xlink","xLinkActuate","xLinkArcRole","xLinkHref","xLinkRole","xLinkShow","xLinkTitle","xLinkType","xml","xmlLang","xmlBase","xmlSpace","caseSensitiveTransform","caseInsensitiveTransform","xmlnsxlink","xmlnsXLink","aria","ariaActiveDescendant","ariaAtomic","ariaAutoComplete","ariaBusy","ariaChecked","ariaColCount","ariaColIndex","ariaColSpan","ariaControls","ariaCurrent","ariaDescribedBy","ariaDetails","ariaDisabled","ariaDropEffect","ariaErrorMessage","ariaExpanded","ariaFlowTo","ariaGrabbed","ariaHasPopup","ariaInvalid","ariaKeyShortcuts","ariaLevel","ariaLive","ariaModal","ariaMultiLine","ariaMultiSelectable","ariaOrientation","ariaOwns","ariaPlaceholder","ariaPosInSet","ariaPressed","ariaReadOnly","ariaRelevant","ariaRequired","ariaRoleDescription","ariaRowCount","ariaRowIndex","ariaRowSpan","ariaSelected","ariaSetSize","ariaSort","ariaValueMax","ariaValueMin","ariaValueNow","ariaValueText","acceptcharset","classname","htmlfor","httpequiv","abbr","accept","acceptCharset","accessKey","allow","allowFullScreen","allowPaymentRequest","allowUserMedia","async","autoPlay","blocking","capture","charSet","cite","cols","colSpan","controls","controlsList","coords","crossOrigin","dateTime","decoding","defer","dirName","download","draggable","encType","enterKeyHint","fetchPriority","form","formAction","formEncType","formMethod","formNoValidate","formTarget","headers","hrefLang","httpEquiv","imageSizes","imageSrcSet","inert","inputMode","integrity","is","isMap","itemId","itemProp","itemRef","itemScope","itemType","kind","lang","language","loop","manifest","maxLength","minLength","muted","noModule","noValidate","onAbort","onAfterPrint","onAuxClick","onBeforeMatch","onBeforePrint","onBeforeToggle","onBeforeUnload","onCancel","onCanPlay","onCanPlayThrough","onContextLost","onContextRestored","onCueChange","onCut","onDblClick","onDrag","onDragEnd","onDragEnter","onDragExit","onDragOver","onDragStart","onDrop","onDurationChange","onEmptied","onEnded","onFormData","onHashChange","onInvalid","onKeyPress","onLanguageChange","onLoad","onLoadedData","onLoadedMetadata","onLoadEnd","onLoadStart","onMessage","onMessageError","onOffline","onOnline","onPageHide","onPageShow","onPaste","onPause","onPlay","onPlaying","onPopState","onProgress","onRateChange","onRejectionHandled","onReset","onScrollEnd","onSecurityPolicyViolation","onSeeked","onSeeking","onSelect","onSlotChange","onStalled","onStorage","onSuspend","onTimeUpdate","onToggle","onUnhandledRejection","onUnload","onVolumeChange","onWaiting","onWheel","optimum","ping","playsInline","popover","popoverTarget","popoverTargetAction","poster","preload","referrerPolicy","reversed","rowSpan","sandbox","scope","scoped","seamless","shadowRootClonable","shadowRootDelegatesFocus","shadowRootMode","sizes","span","srcDoc","srcLang","srcSet","translate","typeMustMatch","useMap","writingSuggestions","aLink","archive","bgColor","bottomMargin","cellPadding","cellSpacing","char","charOff","classId","codeBase","codeType","compact","declare","face","frame","frameBorder","hSpace","leftMargin","link","longDesc","lowSrc","marginHeight","marginWidth","noResize","noHref","noShade","profile","prompt","rev","rightMargin","scheme","scrolling","standby","summary","topMargin","valueType","vAlign","vLink","vSpace","allowTransparency","autoCorrect","autoSave","disablePictureInPicture","disableRemotePlayback","prefix","results","security","unselectable","accentHeight","alignmentBaseline","arabicForm","baselineShift","capHeight","colorInterpolation","colorInterpolationFilters","colorProfile","colorRendering","dataType","dominantBaseline","enableBackground","floodColor","fontSizeAdjust","fontStretch","fontVariant","glyphName","glyphOrientationHorizontal","glyphOrientationVertical","horizAdvX","horizOriginX","horizOriginY","imageRendering","lightingColor","markerEnd","markerMid","markerStart","navDown","navDownLeft","navDownRight","navLeft","navNext","navPrev","navRight","navUp","navUpLeft","navUpRight","onActivate","onBegin","onEnd","onFocusIn","onFocusOut","onMouseWheel","onRepeat","onShow","onZoom","overlinePosition","overlineThickness","paintOrder","panose1","renderingIntent","shapeRendering","strikethroughPosition","strikethroughThickness","strokeDashArray","strokeDashOffset","strokeLineCap","strokeLineJoin","strokeMiterLimit","textAnchor","textRendering","typeOf","underlinePosition","underlineThickness","unicodeBidi","unicodeRange","unitsPerEm","vAlphabetic","vHanging","vIdeographic","vMathematical","vectorEffect","vertAdvY","vertOriginX","vertOriginY","wordSpacing","writingMode","xHeight","playbackOrder","timelineBegin","about","accumulate","alphabetic","amplitude","ascent","attributeName","attributeType","azimuth","bandwidth","baseFrequency","baseProfile","bbox","bias","by","calcMode","clip","clipPathUnits","contentScriptType","contentStyleType","defaultAction","descent","diffuseConstant","dur","divisor","dx","dy","edgeMode","editable","exponent","externalResourcesRequired","filterRes","filterUnits","format","fr","fx","fy","g1","g2","glyphRef","gradientTransform","hanging","hatchContentUnits","hatchUnits","ideographic","initialVisibility","in2","intercept","k1","k2","k3","k4","kernelMatrix","kernelUnitLength","keyPoints","keySplines","keyTimes","kerning","lengthAdjust","limitingConeAngle","markerHeight","markerUnits","markerWidth","maskContentUnits","maskUnits","mathematical","mediaCharacterEncoding","mediaContentEncodings","mediaSize","mediaTime","numOctaves","observer","operator","orient","overlay","pathLength","patternContentUnits","patternTransform","patternUnits","pitch","pointsAtX","pointsAtY","pointsAtZ","preserveAlpha","preserveAspectRatio","primitiveUnits","propagate","radius","refX","refY","repeatCount","repeatDur","requiredExtensions","requiredFeatures","requiredFonts","requiredFormats","resource","restart","rotate","rx","ry","scale","seed","slope","snapshotTime","specularConstant","specularExponent","spreadMethod","startOffset","stdDeviation","stemh","stemv","stitchTiles","surfaceScale","syncBehavior","syncBehaviorDefault","syncMaster","syncTolerance","syncToleranceDefault","systemLanguage","tableValues","targetX","targetY","textLength","transformBehavior","u1","u2","unicode","viewTarget","widths","xChannelSelector","yChannelSelector","zoomAndPan","dash","cap","schema","Type","camelcase","dashes","kebab","$0","hastToReact","pointEnd","point","pointStart","VFileMessage","causeOrReason","optionsOrParentOrPlace","legacyCause","place","ancestors","cause","ruleId","fatal","file","expected","note","emptyMap","dashSomething","tableElements","tableCellElement","docs","toJsxRuntime","tree","filePath","development","jsxDEV","isStaticChildren","columnNumber","fileName","lineNumber","developmentCreate","jsxs","productionCreate","elementAttributeNameCase","evaluater","createEvaluater","ignoreInvalidStyle","passKeys","passNode","stylePropertyNameCase","tableCellAlignToStyle","one","parentSchema","findComponentFromName","alignValue","createProperty","createElementProps","createChildren","thing","addNode","addChildren","pop","estree","expression","evaluateExpression","crashEstree","mdxExpression","objectExpression","createJsxElementProps","mdxJsxElement","evaluateProgram","mdxEsm","countsByName","styleObject","replacer","toCamel","parseStyle","domCasing","cssCasing","transformStyleToCssCasing","transformStylesToCssCasing","allowExpression","identifiers","computed","optional","toDash","$1","urlAttributes","includeImageAlt","includeHtml","chunkStart","SpliceBuffer","initial","setCursor","POSITIVE_INFINITY","reverse","deleteCount","trunc","removed","chunkedPush","pushMany","unshiftMany","subtokenize","eventsArray","jumps","lineIndex","otherIndex","otherEvent","subevents","_tokenizer","_isInFirstContentOfListItem","contentType","subcontent","_container","eventIndex","startPosition","startPositions","tokenizer","parser","childEvents","gaps","adjust","breaks","sliceStream","defineSkip","_gfmTasklistFirstContentOfListItem","syntaxExtension","extension","hook","constructs","asciiAlpha","regexCheck","asciiAlphanumeric","asciiAtext","asciiControl","asciiDigit","asciiHexDigit","asciiPunctuation","markdownLineEnding","markdownLineEndingOrSpace","markdownSpace","unicodePunctuation","unicodeWhitespace","regex","factorySpace","effects","ok","consume","tokenize","contentStart","attempt","contentInitial","lineStart","childFlow","childToken","lineStartOffset","continued","containerState","continuation","documentContinue","checkNewContainers","_closeFlow","closeFlow","indexBeforeExits","indexBeforeFlow","exitContainers","documentContinued","currentConstruct","concrete","flowStart","interrupt","_gfmTableDynamicInterruptHack","containerConstruct","thereIsANewContainer","thereIsNoNewContainer","lazy","containerContinue","flowContinue","writeToChild","eof","seen","nok","disable","null","blankLine","after","partial","chunkInside","contentEnd","continuationConstruct","contentContinue","prefixed","sliceSerialize","flowInitial","afterConstruct","resolver","resolveAll","createResolver","initializeFactory","notText","atBreak","resolveAllLineSuffixes","extraResolver","chunks","bufferIndex","_bufferIndex","called","createTokenizer","initialize","columnStart","resolveAllConstructs","consumed","accountForPotentialSkip","fields","constructFactory","construct","addResult","onsuccessfulcheck","expandTabs","atTab","serializeChunks","expectedCode","startBufferIndex","endBufferIndex","view","sliceChunks","chunkIndex","go","onreturn","returnState","bogusState","listOfConstructs","constructIndex","handleListOfConstructs","def","handleMapOfConstructs","handleConstruct","startPoint","startPrevious","startCurrentConstruct","startEventsIndex","startStack","store","resolveTo","thematicBreak","sequence","initialSize","atMarker","inside","onBlank","listItemPrefixWhitespaceConstruct","endOfPrefix","otherPrefix","initialBlankLine","notBlank","furtherBlankLines","notInCurrentItem","indentConstruct","blockQuote","contBefore","factoryDestination","literalType","literalMarkerType","rawType","stringType","enclosedBefore","enclosed","enclosedEscape","rawEscape","factoryLabel","markerType","labelInside","labelEscape","factoryTitle","escape","factoryWhitespace","normalizeIdentifier","labelAfter","markerAfter","destinationBefore","destinationAfter","titleBefore","afterWhitespace","beforeMarker","titleAfter","titleAfterOptionalWhitespace","codeIndented","afterPrefix","furtherStart","headingAtx","sequenceOpen","sequenceFurther","setextUnderline","heading","htmlBlockNames","htmlRawNames","htmlFlow","closingTag","markerB","declarationOpen","tagCloseStart","continuationDeclarationInside","commentOpenInside","cdataOpenInside","slash","basicSelfClosing","completeClosingTagAfter","completeAttributeNameBefore","completeEnd","completeAttributeName","completeAttributeNameAfter","completeAttributeValueBefore","completeAttributeValueQuoted","completeAttributeValueUnquoted","completeAttributeValueQuotedAfter","completeAfter","continuationCommentInside","continuationRawTagOpen","continuationClose","continuationCdataInside","continuationStart","blankLineBefore","continuationAfter","nonLazyContinuationStart","continuationStartNonLazy","continuationBefore","continuationRawEndTag","nonLazyContinuation","codeFenced","closeStart","startBefore","beforeSequenceClose","sequenceClose","sizeOpen","sequenceCloseAfter","initialPrefix","beforeSequenceOpen","infoBefore","atNonLazyBreak","metaBefore","meta","contentBefore","beforeContentChunk","contentChunk","decodeNamedCharacterReference","characterReference","innerHTML","numeric","characterEscape","lineEnding","labelEnd","labelStart","_balanced","_inactive","labelEndNok","resourceConstruct","labelEndOk","referenceFullConstruct","referenceNotFull","referenceCollapsedConstruct","insideSpan","resourceBefore","resourceOpen","resourceEnd","resourceDestinationAfter","resourceDestinationMissing","resourceBetween","resourceTitleAfter","referenceFullAfter","referenceFullMissing","referenceCollapsedOpen","labelStartImage","classifyCharacter","attention","attentionMarkers","_open","_close","openingSequence","closingSequence","use","nextEvents","movePoint","autolink","schemeOrEmailAtext","emailAtext","schemeInsideOrEmailAtext","urlInside","emailAtSignOrDot","emailLabel","emailValue","htmlText","instruction","tagOpen","commentEnd","commentClose","lineEndingBefore","cdata","cdataClose","cdataEnd","instructionClose","tagClose","tagCloseBetween","tagOpenBetween","tagOpenAttributeName","tagOpenAttributeNameAfter","tagOpenAttributeValueBefore","tagOpenAttributeValueQuoted","tagOpenAttributeValueUnquoted","tagOpenAttributeValueQuotedAfter","lineEndingAfter","lineEndingAfterPrefix","labelStartLink","hardBreakEscape","codeText","tailExitIndex","headEnterIndex","extensions","combineExtensions","decodeNumericCharacterReference","fromCodePoint","characterEscapeOrReference","decode","$2","hex","fromMarkdown","transforms","canContainEols","opener","autolinkProtocol","onenterdata","autolinkEmail","atxHeading","codeFlow","codeFencedFenceInfo","codeFencedFenceMeta","codeTextData","codeFlowValue","definitionDestinationString","definitionLabelString","definitionTitleString","emphasis","hardBreak","hardBreakTrailing","htmlFlowData","htmlTextData","image","listItem","listItemValue","onenterlistitemvalue","listOrdered","onenterlistordered","listUnordered","onenterreference","referenceString","resourceDestinationString","resourceTitleString","setextHeading","strong","closer","atxHeadingSequence","onexitatxheadingsequence","onexitautolinkemail","onexitautolinkprotocol","characterEscapeValue","onexitdata","characterReferenceMarkerHexadecimal","onexitcharacterreferencemarker","characterReferenceMarkerNumeric","characterReferenceValue","onexitcharacterreferencevalue","onexitcharacterreference","onexitcodefenced","codeFencedFence","onexitcodefencedfence","onexitcodefencedfenceinfo","onexitcodefencedfencemeta","onexitcodeindented","onexitcodetext","onexitdefinitiondestinationstring","onexitdefinitionlabelstring","onexitdefinitiontitlestring","onexithardbreak","onexithtmlflow","onexithtmltext","onexitimage","onexitlabel","labelText","onexitlabeltext","onexitlineending","onexitlink","onexitreferencestring","onexitresourcedestinationstring","onexitresourcetitlestring","onexitresource","onexitsetextheading","setextHeadingLineSequence","onexitsetextheadinglinesequence","setextHeadingText","onexitsetextheadingtext","mdastExtensions","tokenStack","listStack","prepareList","defaultOnError","firstBlankLineIndex","containerBalance","listSpread","tailIndex","tailEvent","_spread","and","errorHandler","onExitError","expectingFirstListItemValue","flowCodeInside","depth","setextHeadingSlurpLineEnding","codePointAt","siblings","atHardBreak","inReference","referenceType","ancestor","decodeString","fragment","characterReferenceType","ordered","spread","compiler","postprocess","atCarriageReturn","endPosition","TextDecoder","ceil","preprocess","combined","remarkParse","env","globalThis","deserialize","$","unpair","flags","deserializer","EMPTY","shouldSkip","TYPE","serialize","json","lossy","strict","pair","toISOString","any","normalizeUri","skip","defaultFootnoteBackContent","rereferenceIndex","defaultFootnoteBackLabel","referenceIndex","convert","castFactory","tests","anyFactory","checkAsRecord","nodeAsRecord","propsFactory","typeFactory","testFunction","looksLikeANode","CONTINUE","EXIT","SKIP","visitParents","visitor","factory","parents","visit","subresult","grandparents","toResult","nodeAsParent","testOrVisitor","visitorOrReverse","maybeReverse","revert","subtype","suffix","contents","listItemLoose","trimLines","lines","trimLine","blockquote","patch","applyData","break","delete","footnoteReference","clobberPrefix","safeId","footnoteOrder","counter","reuseCounter","footnoteCounts","dataFootnoteRef","sup","allowDangerousHtml","imageReference","definitionById","inlineCode","linkReference","loose","listLoose","firstRow","tableContent","tableCell","tableRow","cellIndex","cells","cell","toml","ignore","yaml","footnoteDefinition","hName","hChildren","hProperties","defaultUnknownHandler","trimMarkdownSpaceStart","toHast","footnoteById","passThrough","shallow","unknownHandler","createState","foot","footnoteBackContent","footnoteBackLabel","footnoteLabel","footnoteLabelTagName","footnoteLabelProperties","listItems","backReferences","counts","dataFootnoteBackref","tailTail","dataFootnotes","footer","remarkRehype","destination","hastTree","run","bail","trough","fns","pipeline","middlewareIndex","wrapped","fnExpectsCallback","middelware","minpath","basename","extname","assertPath","seenNonSlash","firstNonSlashEnd","extnameIndex","dirname","unmatchedSlash","startPart","startDot","preDotState","segments","joined","absolute","allowAboveRoot","lastSlashIndex","lastSegmentLength","lastSlash","dots","normalizeString","sep","minproc","cwd","isUrl","fileUrlOrPath","protocol","auth","urlToPath","hostname","third","decodeURIComponent","getPathFromURLPosix","VFile","isUint8Array","history","stored","assertNonEmpty","assertPart","stem","fail","part","CallableInstance","Processor","Compiler","Parser","attachers","freezeIndex","frozen","namespace","transformers","attacher","extend","assertUnfrozen","freeze","realFile","vfile","assertParser","assertCompiler","executor","parseTree","realDone","compileTree","compileResult","processSync","complete","assertDone","assertNode","outputTree","resultingTree","runSync","addPlugin","addList","addPreset","plugin","plugins","entryIndex","currentPrimary","unified","asyncName","looksLikeAVFile","emptyPlugins","emptyRemarkRehypeOptions","safeProtocol","deprecations","Markdown","allowedElements","allowElement","disallowedElements","rehypePlugins","remarkPlugins","remarkRehypeOptions","skipHtml","unwrapDisallowed","urlTransform","defaultUrlTransform","deprecation","mdastTree","colon","questionMark","numberSign","checkRequiredPermissionStatement","requireStatement","requiredPermissions","redirectInBrowser","PAGE_SEPARATOR","removeGarbage","mdContent","removeComments","ExtensionImage","canZoom","iconColor","useExtensionAsset","isZoom","setIsZoom","fullPath","Checklist","ZoomOutMap","bigTabWidth","bigGutterMargin","TutorialAffiliation","TutorialBox","help","HelpOutline","TutorialInfo","TutorialList","strippable","li","activateStrippable","replaceWith","cloneNode","tabWidth","TutorialModal","subtitle","getCardContentUtilityClass","CardContentRoot","TutorialVideoCard","CardActionArea","DividerRoot","flexItem","withChildrenVertical","textAlignRight","textAlignLeft","borderBottomWidth","dividerChannel","borderRightWidth","DividerWrapper","wrapperVertical","buttonTypes","createH","defaultTagName","caseSensitive","createAdjustMap","subvalue","parseSelector","isProperties","addProperty","addChild","parsePrimitive","finalResult","cr","lf","webNamespaces","mathml","quirksMode","childNodes","loc","indices","toOffset","eol","toPoint","namespaceURI","attrs","sourceCodeLocation","startTag","endTag","verbose","opening","closing","createLocation","startLine","startCol","endLine","endCol","endOffset","zwitch","invalid","unknown","currentSchema","publicId","systemId","htmlVoidElements","UNDEFINED_CODE_POINTS","REPLACEMENT_CHARACTER","CODE_POINTS","SEQUENCES","isSurrogate","cp","isControlCodePoint","isUndefinedCodePoint","ERR","Preprocessor","lastGapPos","gapStack","skipNextNewLine","lastChunkWritten","endOfChunkHit","bufferWaterline","isEol","lineStartPos","droppedBufferSize","lastErrOffset","col","getError","_err","onParseError","_addGap","_processSurrogate","nextCp","isSurrogatePair","EOF","surrogateInInputStream","willDropParsedChunk","dropParsedChunk","isLastChunk","insertHtmlAtCurrentPos","startsWith","CARRIAGE_RETURN","LINE_FEED","advance","_checkForProblematicCharacters","controlCharacterInInputStream","noncharacterInInputStream","retreat","TokenType","getTokenAttr","attrName","Uint16Array","decodeMap","replaceCodePoint","CharCodes","BinTrieFlags","EntityDecoderState","DecodingMode","ZERO","NINE","isHexadecimalCharacter","UPPER_A","UPPER_F","LOWER_A","LOWER_F","isEntityInAttributeInvalidEnd","EQUALS","UPPER_Z","LOWER_Z","isAsciiAlphaNumeric","EntityDecoder","decodeTree","emitCodePoint","EntityStart","treeIndex","excess","decodeMode","Strict","startEntity","NUM","NumericStart","stateNumericStart","NamedEntity","stateNamedEntity","NumericDecimal","stateNumericDecimal","NumericHex","stateNumericHex","LOWER_X","addToNumericResult","digitCount","startIdx","emitNumericEntity","lastCp","expectedLength","absenceOfDigitsInNumericCharacterReference","SEMI","missingSemicolonAfterCharacterReference","validateNumericCharacterReference","valueLength","VALUE_LENGTH","determineBranch","Attribute","emitNotTerminatedNamedEntity","emitNamedEntityData","getDecoder","nodeIdx","branchCount","BRANCH_LENGTH","jumpOffset","JUMP_TABLE","mid","midVal","ATTRS","DOCUMENT_MODE","TAG_NAMES","TAG_ID","NS","TAG_NAME_TO_ID","ADDRESS","ANNOTATION_XML","APPLET","AREA","ARTICLE","ASIDE","B","BASE","BASEFONT","BGSOUND","BIG","BLOCKQUOTE","BODY","BR","BUTTON","CAPTION","CENTER","CODE","COL","COLGROUP","DD","DESC","DETAILS","DIALOG","DIR","DIV","DL","DT","EM","EMBED","FIELDSET","FIGCAPTION","FIGURE","FONT","FOOTER","FOREIGN_OBJECT","FORM","FRAME","FRAMESET","H1","H2","H3","H4","H5","H6","HEAD","HEADER","HGROUP","HR","HTML","IMG","IMAGE","INPUT","IFRAME","KEYGEN","LABEL","LI","LINK","LISTING","MAIN","MALIGNMARK","MARQUEE","MATH","MENU","META","MGLYPH","MI","MO","MN","MS","MTEXT","NAV","NOBR","NOFRAMES","NOEMBED","NOSCRIPT","OBJECT","OL","OPTGROUP","OPTION","P","PARAM","PLAINTEXT","PRE","RB","RP","RT","RTC","RUBY","S","SCRIPT","SECTION","SELECT","SOURCE","SPAN","STRIKE","STRONG","STYLE","SUB","SUMMARY","SUP","TABLE","TBODY","TEMPLATE","TEXTAREA","TFOOT","TD","TH","THEAD","TITLE","TR","TRACK","TT","U","UL","SVG","VAR","WBR","XMP","getTagID","UNKNOWN","SPECIAL_ELEMENTS","MATHML","XLINK","XML","XMLNS","isNumberedHeader","tn","C1_CONTROLS_REFERENCE_REPLACEMENTS","State","TokenizerMode","DATA","RCDATA","RAWTEXT","SCRIPT_DATA","CDATA_SECTION","isAsciiDigit","DIGIT_0","DIGIT_9","isAsciiUpper","LATIN_CAPITAL_A","LATIN_CAPITAL_Z","isAsciiLetter","LATIN_SMALL_A","LATIN_SMALL_Z","isAsciiLower","isAsciiUpperHexDigit","LATIN_CAPITAL_F","isAsciiLowerHexDigit","LATIN_SMALL_F","toAsciiLower","isWhitespace","SPACE","TABULATION","FORM_FEED","isScriptDataDoubleEscapeSequenceEnd","SOLIDUS","GREATER_THAN_SIGN","Tokenizer","inLoop","inForeignNode","lastStartTagName","charRefCode","consumedAfterSnapshot","currentCharacterToken","currentToken","currentAttr","preprocessor","currentLocation","getCurrentLocation","sourceCodeLocationInfo","_runParsingLoop","_consume","_ensureHibernation","_callState","writeCallback","_unconsume","_reconsumeInState","_advanceBy","_consumeSequenceIfMatch","_createStartTagToken","START_TAG","tagID","selfClosing","ackSelfClosing","_createEndTagToken","END_TAG","_createCommentToken","_createDoctypeToken","initialName","DOCTYPE","forceQuirks","_createCharacterToken","chars","_createAttr","attrNameFirstCh","_leaveAttrName","_leaveAttrValue","duplicateAttribute","prepareToken","ct","_emitCurrentCharacterToken","emitCurrentTagToken","onStartTag","endTagWithAttributes","endTagWithTrailingSolidus","onEndTag","emitCurrentComment","onComment","emitCurrentDoctype","onDoctype","nextLocation","CHARACTER","onCharacter","NULL_CHARACTER","onNullCharacter","WHITESPACE_CHARACTER","onWhitespaceCharacter","_emitEOFToken","onEof","_appendCharToCurrentCharacterToken","ch","_emitCodePoint","NULL","_emitChars","_matchNamedCharacterReference","withoutSemicolon","masked","SEMICOLON","_isCharacterReferenceInAttribute","EQUALS_SIGN","AMPERSAND","ATTRIBUTE_VALUE_DOUBLE_QUOTED","ATTRIBUTE_VALUE_SINGLE_QUOTED","ATTRIBUTE_VALUE_UNQUOTED","_flushCodePointConsumedAsCharacterReference","_stateData","_stateRcdata","_stateRawtext","_stateScriptData","_statePlaintext","TAG_OPEN","_stateTagOpen","END_TAG_OPEN","_stateEndTagOpen","TAG_NAME","_stateTagName","RCDATA_LESS_THAN_SIGN","_stateRcdataLessThanSign","RCDATA_END_TAG_OPEN","_stateRcdataEndTagOpen","RCDATA_END_TAG_NAME","_stateRcdataEndTagName","RAWTEXT_LESS_THAN_SIGN","_stateRawtextLessThanSign","RAWTEXT_END_TAG_OPEN","_stateRawtextEndTagOpen","RAWTEXT_END_TAG_NAME","_stateRawtextEndTagName","SCRIPT_DATA_LESS_THAN_SIGN","_stateScriptDataLessThanSign","SCRIPT_DATA_END_TAG_OPEN","_stateScriptDataEndTagOpen","SCRIPT_DATA_END_TAG_NAME","_stateScriptDataEndTagName","SCRIPT_DATA_ESCAPE_START","_stateScriptDataEscapeStart","SCRIPT_DATA_ESCAPE_START_DASH","_stateScriptDataEscapeStartDash","SCRIPT_DATA_ESCAPED","_stateScriptDataEscaped","SCRIPT_DATA_ESCAPED_DASH","_stateScriptDataEscapedDash","SCRIPT_DATA_ESCAPED_DASH_DASH","_stateScriptDataEscapedDashDash","SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN","_stateScriptDataEscapedLessThanSign","SCRIPT_DATA_ESCAPED_END_TAG_OPEN","_stateScriptDataEscapedEndTagOpen","SCRIPT_DATA_ESCAPED_END_TAG_NAME","_stateScriptDataEscapedEndTagName","SCRIPT_DATA_DOUBLE_ESCAPE_START","_stateScriptDataDoubleEscapeStart","SCRIPT_DATA_DOUBLE_ESCAPED","_stateScriptDataDoubleEscaped","SCRIPT_DATA_DOUBLE_ESCAPED_DASH","_stateScriptDataDoubleEscapedDash","SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH","_stateScriptDataDoubleEscapedDashDash","SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN","_stateScriptDataDoubleEscapedLessThanSign","SCRIPT_DATA_DOUBLE_ESCAPE_END","_stateScriptDataDoubleEscapeEnd","BEFORE_ATTRIBUTE_NAME","_stateBeforeAttributeName","ATTRIBUTE_NAME","_stateAttributeName","AFTER_ATTRIBUTE_NAME","_stateAfterAttributeName","BEFORE_ATTRIBUTE_VALUE","_stateBeforeAttributeValue","_stateAttributeValueDoubleQuoted","_stateAttributeValueSingleQuoted","_stateAttributeValueUnquoted","AFTER_ATTRIBUTE_VALUE_QUOTED","_stateAfterAttributeValueQuoted","SELF_CLOSING_START_TAG","_stateSelfClosingStartTag","BOGUS_COMMENT","_stateBogusComment","MARKUP_DECLARATION_OPEN","_stateMarkupDeclarationOpen","COMMENT_START","_stateCommentStart","COMMENT_START_DASH","_stateCommentStartDash","_stateComment","COMMENT_LESS_THAN_SIGN","_stateCommentLessThanSign","COMMENT_LESS_THAN_SIGN_BANG","_stateCommentLessThanSignBang","COMMENT_LESS_THAN_SIGN_BANG_DASH","_stateCommentLessThanSignBangDash","COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH","_stateCommentLessThanSignBangDashDash","COMMENT_END_DASH","_stateCommentEndDash","COMMENT_END","_stateCommentEnd","COMMENT_END_BANG","_stateCommentEndBang","_stateDoctype","BEFORE_DOCTYPE_NAME","_stateBeforeDoctypeName","DOCTYPE_NAME","_stateDoctypeName","AFTER_DOCTYPE_NAME","_stateAfterDoctypeName","AFTER_DOCTYPE_PUBLIC_KEYWORD","_stateAfterDoctypePublicKeyword","BEFORE_DOCTYPE_PUBLIC_IDENTIFIER","_stateBeforeDoctypePublicIdentifier","DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED","_stateDoctypePublicIdentifierDoubleQuoted","DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED","_stateDoctypePublicIdentifierSingleQuoted","AFTER_DOCTYPE_PUBLIC_IDENTIFIER","_stateAfterDoctypePublicIdentifier","BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS","_stateBetweenDoctypePublicAndSystemIdentifiers","AFTER_DOCTYPE_SYSTEM_KEYWORD","_stateAfterDoctypeSystemKeyword","BEFORE_DOCTYPE_SYSTEM_IDENTIFIER","_stateBeforeDoctypeSystemIdentifier","DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED","_stateDoctypeSystemIdentifierDoubleQuoted","DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED","_stateDoctypeSystemIdentifierSingleQuoted","AFTER_DOCTYPE_SYSTEM_IDENTIFIER","_stateAfterDoctypeSystemIdentifier","BOGUS_DOCTYPE","_stateBogusDoctype","_stateCdataSection","CDATA_SECTION_BRACKET","_stateCdataSectionBracket","CDATA_SECTION_END","_stateCdataSectionEnd","CHARACTER_REFERENCE","_stateCharacterReference","NAMED_CHARACTER_REFERENCE","_stateNamedCharacterReference","AMBIGUOUS_AMPERSAND","_stateAmbiguousAmpersand","NUMERIC_CHARACTER_REFERENCE","_stateNumericCharacterReference","HEXADEMICAL_CHARACTER_REFERENCE_START","_stateHexademicalCharacterReferenceStart","HEXADEMICAL_CHARACTER_REFERENCE","_stateHexademicalCharacterReference","DECIMAL_CHARACTER_REFERENCE","_stateDecimalCharacterReference","NUMERIC_CHARACTER_REFERENCE_END","_stateNumericCharacterReferenceEnd","LESS_THAN_SIGN","unexpectedNullCharacter","EXCLAMATION_MARK","QUESTION_MARK","unexpectedQuestionMarkInsteadOfTagName","eofBeforeTagName","invalidFirstCharacterOfTagName","missingEndTagName","eofInTag","handleSpecialEndTag","_cp","HYPHEN_MINUS","eofInScriptHtmlCommentLikeText","unexpectedEqualsSignBeforeAttributeName","QUOTATION_MARK","APOSTROPHE","unexpectedCharacterInAttributeName","missingAttributeValue","GRAVE_ACCENT","unexpectedCharacterInUnquotedAttributeValue","missingWhitespaceBetweenAttributes","unexpectedSolidusInTag","cdataInHtmlContent","incorrectlyOpenedComment","abruptClosingOfEmptyComment","eofInComment","nestedComment","incorrectlyClosedComment","eofInDoctype","missingWhitespaceBeforeDoctypeName","missingDoctypeName","invalidCharacterSequenceAfterDoctypeName","missingWhitespaceAfterDoctypePublicKeyword","missingDoctypePublicIdentifier","missingQuoteBeforeDoctypePublicIdentifier","abruptDoctypePublicIdentifier","missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers","missingQuoteBeforeDoctypeSystemIdentifier","missingWhitespaceAfterDoctypeSystemKeyword","missingDoctypeSystemIdentifier","abruptDoctypeSystemIdentifier","unexpectedCharacterAfterDoctypeSystemIdentifier","RIGHT_SQUARE_BRACKET","eofInCdata","NUMBER_SIGN","matchResult","unknownNamedCharacterReference","LATIN_SMALL_X","LATIN_CAPITAL_X","isAsciiHexDigit","nullCharacterReference","characterReferenceOutsideUnicodeRange","surrogateCharacterReference","noncharacterCharacterReference","controlCharacterReference","IMPLICIT_END_TAG_REQUIRED","IMPLICIT_END_TAG_REQUIRED_THOROUGHLY","SCOPING_ELEMENT_NS","NAMED_HEADERS","TABLE_ROW_CONTEXT","TABLE_BODY_CONTEXT","TABLE_CONTEXT","TABLE_CELLS","OpenElementStack","currentTmplContentOrNode","_isInTemplate","treeAdapter","getTemplateContent","tagIDs","stackTop","tmplCount","currentTagId","_indexOf","getNamespaceURI","_updateCurrentElement","onItemPush","popped","onItemPop","oldElement","newElement","insertAfter","referenceElement","newElementID","insertionIdx","popUntilTagNamePopped","targetIdx","shortenToLength","popUntilElementPopped","popUntilPopped","tagNames","targetNS","_indexOfTagNames","popUntilNumberedHeaderPopped","popUntilTableCellPopped","popAllUpToHtmlElement","clearBackTo","clearBackToTableContext","clearBackToTableBodyContext","clearBackToTableRowContext","tryPeekProperlyNestedBodyElement","getCommonAncestor","elementIdx","isRootHtmlElementCurrent","hasInScope","ns","hasNumberedHeaderInScope","hasInListItemScope","hasInButtonScope","hasInTableScope","hasTableBodyContextInTableScope","hasInSelectScope","generateImpliedEndTags","generateImpliedEndTagsThoroughly","generateImpliedEndTagsWithExclusion","exclusionId","EntryType","MARKER","Marker","FormattingElementList","bookmark","_getNoahArkConditionCandidates","neAttrs","candidates","neAttrsLength","neTagName","getTagName","neNamespaceURI","elementAttrs","getAttrList","_ensureNoahArkCondition","neAttrsMap","neAttr","validCandidates","cAttr","insertMarker","pushElement","insertElementAfterBookmark","bookmarkIdx","removeEntry","clearToLastMarker","markerIdx","getElementEntryInScopeWithTagName","getElementEntry","defaultTreeAdapter","createDocument","NO_QUIRKS","createDocumentFragment","createCommentNode","newNode","referenceNode","setTemplateContent","templateElement","contentElement","setDocumentType","doctypeNode","setDocumentMode","getDocumentMode","detachNode","insertText","prevNode","isTextNode","insertTextBefore","adoptAttributes","recipient","recipientAttrsMap","attr","getFirstChild","getChildNodes","getTextNodeContent","textNode","getCommentNodeContent","commentNode","getDocumentTypeNodeName","getDocumentTypeNodePublicId","getDocumentTypeNodeSystemId","isCommentNode","isDocumentTypeNode","isElementNode","setNodeSourceCodeLocation","getNodeSourceCodeLocation","updateNodeSourceCodeLocation","endLocation","VALID_DOCTYPE_NAME","VALID_SYSTEM_ID","QUIRKS_MODE_SYSTEM_ID","QUIRKS_MODE_PUBLIC_ID_PREFIXES","QUIRKS_MODE_NO_SYSTEM_ID_PUBLIC_ID_PREFIXES","QUIRKS_MODE_PUBLIC_IDS","LIMITED_QUIRKS_PUBLIC_ID_PREFIXES","LIMITED_QUIRKS_WITH_SYSTEM_ID_PUBLIC_ID_PREFIXES","hasPrefix","prefixes","MIME_TYPES","TEXT_HTML","APPLICATION_XML","DEFINITION_URL_ATTR","ADJUSTED_DEFINITION_URL_ATTR","SVG_ATTRS_ADJUSTMENT_MAP","XML_ATTRS_ADJUSTMENT_MAP","SVG_TAG_NAMES_ADJUSTMENT_MAP","EXITS_FOREIGN_CONTENT","adjustTokenMathMLAttrs","adjustTokenSVGAttrs","adjustedAttrName","adjustTokenXMLAttrs","adjustedAttrEntry","isIntegrationPoint","foreignNS","ENCODING","isHtmlIntegrationPoint","isMathMLTextIntegrationPoint","HIDDEN_INPUT_TYPE","AA_OUTER_LOOP_ITER","AA_INNER_LOOP_ITER","InsertionMode","BASE_LOC","TABLE_STRUCTURE_TAGS","defaultParserOptions","scriptingEnabled","fragmentContext","scriptHandler","stopped","insertionMode","INITIAL","originalInsertionMode","headElement","formElement","currentNotInHTML","tmplInsertionModeStack","pendingCharacterTokens","hasNonWhitespacePendingCharacterToken","framesetOk","fosterParentingEnabled","activeFormattingElements","fragmentContextID","_setContextModes","openElements","getFragmentParser","documentMock","IN_TEMPLATE","_initTokenizerForFragmentParsing","_insertFakeRootElement","_resetInsertionMode","_findFormInFragmentContext","getFragment","_adoptNodes","beforeToken","tid","isTop","_setEndLocation","isHTML","_isIntegrationPoint","_switchToTextParsing","nextTokenizerState","_insertElement","TEXT","switchToPlaintextParsing","IN_BODY","_getAdjustedCurrentElement","_setDocumentType","docTypeNode","_attachElementToTree","_shouldFosterParentOnInsertion","_fosterParentElement","_appendElement","_insertFakeElement","_insertTemplate","tmpl","_appendCommentNode","_insertCharacters","beforeElement","_findFosterParentingLocation","textNodeIdx","donor","closingToken","ctLoc","endLoc","shouldProcessStartTagTokenInForeignContent","_processToken","_processStartTag","_reconstructActiveFormattingElements","listLength","_closeTableCell","IN_ROW","_closePElement","IN_TABLE_BODY","IN_CAPTION","IN_COLUMN_GROUP","IN_TABLE","IN_FRAMESET","_resetInsertionModeForSelect","AFTER_HEAD","BEFORE_HEAD","IN_CELL","IN_HEAD","selectIdx","IN_SELECT_IN_TABLE","IN_SELECT","_isElementCausesFosterParenting","openElement","_isSpecialElement","characterInForeignContent","tokenInInitialMode","BEFORE_HTML","tokenBeforeHtml","tokenBeforeHead","tokenInHead","IN_HEAD_NO_SCRIPT","tokenInHeadNoScript","tokenAfterHead","characterInBody","characterInTable","IN_TABLE_TEXT","characterInTableText","tokenInColumnGroup","AFTER_BODY","tokenAfterBody","AFTER_AFTER_BODY","tokenAfterAfterBody","nullCharacterInForeignContent","appendComment","AFTER_FRAMESET","tokenInTableText","appendCommentToRootHtmlElement","AFTER_AFTER_FRAMESET","appendCommentToDocument","QUIRKS","LIMITED_QUIRKS","nonConformingDoctype","doctypeInInitialMode","misplacedDoctype","nonVoidHtmlElementStartTagWithTrailingSolidus","startTagToken","COLOR","FACE","popUntilHtmlOrIntegrationPoint","_startTagOutsideForeignContent","currentNs","adjustedTagName","startTagInForeignContent","startTagBeforeHtml","startTagInBody","startTagBeforeHead","startTagInHead","nestedNoscriptInHead","startTagInHeadNoScript","abandonedHeadElementChild","misplacedStartTagForHeadElement","startTagAfterHead","startTagInTable","TABLE_VOID_ELEMENTS","startTagInCaption","startTagInColumnGroup","startTagInTableBody","startTagInRow","startTagInCell","startTagInSelect","startTagInSelectInTable","startTagInTemplate","startTagAfterBody","startTagInFrameset","startTagAfterFrameset","startTagAfterAfterBody","startTagAfterAfterFrameset","_endTagOutsideForeignContent","endTagInForeignContent","endTagBeforeHtml","endTagWithoutMatchingOpenElement","endTagBeforeHead","templateEndTagInHead","endTagInHead","endTagInHeadNoScript","endTagAfterHead","endTagInBody","endTagInText","endTagInTable","endTagInCaption","endTagInColumnGroup","endTagInTableBody","endTagInRow","endTagInCell","endTagInSelect","endTagInSelectInTable","endTagInTemplate","endTagAfterBody","endTagInFrameset","endTagAfterFrameset","eofInBody","eofInElementThatCanContainOnlyText","eofInText","eofInTemplate","stopParsing","whitespaceCharacterInBody","whitespaceCharacterInTableText","aaObtainFormattingElementEntry","formattingElementEntry","genericEndTagInBody","aaObtainFurthestBlock","furthestBlock","aaInnerLoop","formattingElement","lastElement","nextElement","elementEntry","counterOverflow","aaRecreateElementFromEntry","aaInsertLastNodeInCommonAncestor","commonAncestor","aaReplaceFormattingElement","callAdoptionAgency","htmlElement","htmlLocation","bodyElement","bodyLocation","missingDoctype","closingOfElementWithOpenChildElements","errCode","openElementsLeftAfterEof","disallowedContentInNoscriptInHead","modeInBody","areaStartTagInBody","isHiddenInput","inputType","noembedStartTagInBody","genericStartTagInBody","bStartTagInBody","activeElementEntry","aStartTagInBody","numberedHeaderStartTagInBody","addressStartTagInBody","elementId","listItemStartTagInBody","hrStartTagInBody","rbStartTagInBody","rtStartTagInBody","preStartTagInBody","xmpStartTagInBody","svgStartTagInBody","htmlStartTagInBody","bodyStartTagInBody","inTemplate","formStartTagInBody","nobrStartTagInBody","mathStartTagInBody","tableStartTagInBody","inputStartTagInBody","paramStartTagInBody","imageStartTagInBody","buttonStartTagInBody","appletStartTagInBody","iframeStartTagInBody","selectStartTagInBody","optgroupStartTagInBody","framesetStartTagInBody","textareaStartTagInBody","plaintextStartTagInBody","pEndTagInBody","addressEndTagInBody","liEndTagInBody","ddEndTagInBody","numberedHeaderEndTagInBody","brEndTagInBody","bodyEndTagInBody","htmlEndTagInBody","formEndTagInBody","appletEndTagInBody","tokenInTable","tdStartTagInTable","colStartTagInTable","formStartTagInTable","tableStartTagInTable","tbodyStartTagInTable","inputStartTagInTable","captionStartTagInTable","colgroupStartTagInTable","savedFosterParentingState","xmlCodeMap","getEscaper","lastIdx","knownMdxNames","parseOptions","documentMode","stitches","resetTokenizer","fromParse5","stitch","toParse5","createParse5Location","cloneWithoutChildren","fakeRoot","handleRaw","setPoint","node_","extra","DEFAULT_DATA","DEFAULT_ACTION_PROPS","REHYPE_PLUGINS","useTutoModalManager","activeModal","setActiveModal","WrappedTutorialModal","WrappedExtensionImage","renderChildren","renderChildrenAsString","divTransformer","componentType","require","conditionalValue","buildStringWithRequirements","lightPaper","TutorialReader","currentPage","setMaxPage","folder","accountPermissions","actionProps","trackEvent","openTabWithHelper","onLinkClick","trackedType","pages","disablePagination","pageContent","extractPages","mdComponents","requireTwoKeys","cex","tracked","iconcolor","perm","CheckCircle","ul","ol","reactMarkdownComponents","requiresTwoKeys","methodNotFound","invalidParams","internal","defaultError","ccxt","baseError","requestExpired","general","badPassword","misc","jobs","fetchTransactionHistoryError","getLastTxUpdateError","cancelTrackingError","accountAlreadyExists","nameExists","nameCannotBeGenerated","accountKeysInconsistent","cannotUnlockStorage","cannotPersisted","creationError","deletionError","checkApiCredentialsError","updateApiCredentialsError","updateCexSettingsError","accountCreationError","accountUpdateError","globalUnlockError","notWhitelisted","accountKeyAlreadyExists","whitelistCheckFail","dispatcherDefaultError","approvalNotFound","vaultNotAllowedToAccess","accountNotPermission","notConnected","notInitialized","notSupportedFeature","userDeniedApproval","accountInvalidSetOfPermissions","methodNotAvailableForThisExchange","invalidPermissionsSetup","notFound","accountNotFound","fetchVaultsError","generateAccountNameError","validateAccountNameError","updateAccountNameError","getAccountError","getAccountsError","notOAuthAccount","accountAlreadyContainsApiKeys","public","fetchTickerFromTokenError","serverDown","underMaintenance","supportedTokensError","unavailableInThisCountry","getBalancesError","getNftFromCexError","getVaultTransactionsError","getDepositableTokensError","getDepositAddressError","trade","postOrderError","fetchMarketPairsError","fetchAllTickersFromSymbolsError","orderNotFound","minAmountError","tickerNotFound","invalidOrderRequest","fetchMarketPriceError","getTradePathError","network","networkNotFound","networkNotProvided","networksNotStandardized","withdrawal","tokenToDefiAddressError","tokenToAnotherCexError","infoError","invalidAddress","coinbase","exchangeInstance","authentication","oauthFlowInterruptedByTheUser","nft","notSupportedNfts","api","LOCKED_FOR_INACTIVITY","MESSAGE_SENT_TO_CEDE_TEAM","FEEDBACK_ERROR","API_KEY","ALREADY_EXISTS","CREDENTIALS_INCORRECT","SUCCESSFULLY","endOfSentence","REMOVED","VERIFYING_VALIDITY","VAULT","CANT_DELETE_SINGLE","REQUIRE_NON_EMPTY","CREATED_SUCCESSFULLY","NOT_FOUND","TRANSACTION","TOKEN_FROM_NOT_FOUND","ACCOUNT_NOT_FOUND","ORDER_NOT_FOUND","NOT_FOUND_WITH_NAME","RECONNECT","DELETED","MARKET_NOT_FOUND","CANCELLATION_FAILED","OAUTH","FAILED","SUCCESSFULLY_SETUP","UNKNOWN_ERROR","PRICES","CANT_FETCH","SEND","YOUR_FUND_SAFE","CONFIRM_EMAIL","WIDGETS","LOGIN_LOADING_FIRST_LINE","LOGIN_LOADING_SECOND_LINE","TRANSACTION_LOADING_FIRST_LINE","TRANSACTION_LOADING_SECOND_LINE","TRANSFER_CEX_ASSETS","CONNECT","CONNECT_WALLET","CANT_FETCH_BUNDLE","TRADE_SEND","ACTIONS_LABEL","WITHDRAW_CURRENCY","destCurrency","recipientAddress","RECEIVE_CURRENCY","MODAL_CONFIRM","PERFORM_TRADE_PATH","tradePathLabel","NO_TRADE_PATH","CONFIRM_TX","FINISH","TRADE_SQUARE","destinationTokenSymbol","INFO_DETAILS","cexName","tokenFrom","tokenTo","CLOSE","WELCOME_MESSAGE","SINGLE_DOWN","TWO_DOWN","firstName","secondName","THREE_DOWN","thirdName","SINGLE_BACK_ONLINE","TWO_BACK_ONLINE","THREE_BACK_ONLINE","ADD_PERMISSION","TEMPORARILY_UNAVAILABLE_IN_YOUR_COUNTRY","STATE_MACHINE_ROUTER","ERRORS","MISSING_PARAMETERS","TWO_KEY_NOT_SUPPORTED","READ_ONLY_ONBOARDING","PERMISSION_HINT","AVAILABLE_SOON","WidgetWindowEvents","toObject","checkObject","send","receive","limit_trade","TxStatus","WalletType","isCefiInfoTx","tx","isDefiInfoTx","OrderType","OrderStatus","WidgetType","CURRENCY_CODE_MAP","AED","AFN","ALL","AMD","ANG","AOA","ARS","AUD","AWG","AZN","BAM","BBD","BDT","BGN","BHD","BIF","BMD","BND","BOB","BOV","BRL","BSD","BTN","BWP","BYN","BYR","BZD","CAD","CDF","CHE","CHF","CHW","CLF","CLP","CNH","CNY","COP","COU","CRC","CUC","CUP","CVE","CZK","DJF","DKK","DOP","DZD","EEK","EGP","ERN","ETB","EUR","FJD","FKP","GBP","GEL","GGP","GHC","GHS","GIP","GMD","GNF","GTQ","GYD","HKD","HNL","HRK","HTG","HUF","IDR","ILS","IMP","INR","IQD","IRR","ISK","JEP","JMD","JOD","JPY","KES","KGS","KHR","KMF","KPW","KRW","KWD","KYD","KZT","LAK","LBP","LKR","LRD","LSL","LTC","LTL","LVL","LYD","MAD","MDL","MGA","MKD","MMK","MNT","MOP","MRO","MRU","MUR","MVR","MWK","MXN","MXV","MYR","MZN","NAD","NGN","NIO","NOK","NPR","NZD","OMR","PAB","PEN","PGK","PHP","PKR","PLN","PYG","QAR","RMB","RON","RSD","RUB","RWF","SAR","SBD","SCR","SDG","SEK","SGD","SHP","SLL","SOS","SRD","SSP","STD","STN","SVC","SYP","SZL","THB","TJS","TMT","TND","TOP","TRL","TRY","TTD","TVD","TWD","TZS","UAH","UGX","USD","UYI","UYU","UYW","UZS","VEF","VES","VND","VUV","WST","XAF","XBT","XCD","XOF","XPF","XSU","XUA","YER","ZAR","ZMW","ZWD","ZWL","DEFAULT_CURRENCY","formatCurrencyAmount","amountNumber","roundForFiat","currencySymbol","getCurrencySymbol","locale","minimumFractionDigits","maximumFractionDigits","negativeType","negative","negativeLeftSymbol","negativeRightSymbol","overrideOptions","negativeLeftOut","noUnits","places","decim","leadingzeros","truncate","noSeparator","separator","rgx","addDecimalSeparators","decimalsSeparator","addIntegerSeparators","integerSeparator","negativeRightOut","negativeOut","separate","unformat","allowedSeparators","newNumber","formatBalance","keepExponential","canHideNumberOverMaxDigits","sign","toPrecision","decimalsNumber","formattedValue","firstNonZeroDigit","repeat","int","unformatNumberAsString","CDN_MODULES","CEDE_CDN_URL","DEFAULT_NETWORK_ICON","DEFAULT_TOKEN_ICON","forgeCDNUrl","cdnUrl","forgeNetworkURL","icid","NETWORK","forgeTokenURL","TOKEN","resolveCDNMiss","CEDE_CEXS","BINANCE","COINBASE","KRAKEN","GATEIO","OKX","BITFINEX","HTX","KUCOIN","BYBIT","BITGET","BITSTAMP","BITMART","MEXC","COINBASE_EXCHANGE","CEDE_CEXS_SOON_SUPPORTED","GEMINI","BINANCE_US","CEDE_CEX_LABELS","getCexLabel","hasPermissionsWithProxy","hasPermissionsWithoutProxy","USE_NETWORKS_CACHE_TIME","TOKENS_NAMES_AND_SYMBOLS_CACHE_TIME","SUPPORTED_EXCHANGES_CACHE_TIME","USE_SUPPORTED_TOKENS_CACHE_TIME","WITHDRAWABLE_BALANCES_TTL","USE_WHITELISTED_ADDRESSES_CACHE_TIME","USE_WHITELISTED_ADDRESSES_STALE_TIME","AVAILABLE_EXCHANGES_CACHE_TIME","TWO_KEYS_PERMISSIONS_WITHOUT_PROXY","TWO_KEYS_PERMISSIONS_WITH_PROXY","fromEntries","tweets","SEND_WITH_PARTNER","SEND_WITHOUT_PARTNER","REFERRAL","NETWORK_TWITTER_HANDLE_CONFIG_IDENTIFIER","TweetDataKey","POST_ON_TWITTER_URL","isChildOf","childRef","isEqualNode","onElementAvailable","fallback","MutationObserver","childList","subtree","ui","closeBtn","chromeWebStoreBtn","localStorage","setItem","activeComponents","shadowWrapper","shadow","attachShadow","globalStyleElement","widgetMaxWidth","widgetMinWidth","widgetWidth","widgetHeight","globalStyle","newActiveComponent","EXCHANGE_LOGOS","getExchangeLogo","VITEST_WORKER_ID","enableVerbose","getInstance","singleton","Logger","types","orderStatusToTransactionStatus","PENDING","OK","CANCELLED","orderToTransactionMapper","cost","stringMul","price","accountId","wallet","walletType","SPOT","depositAddress","transaction","pairSymbol","transactionId","fee","DEFAULT_UNDEFINED_STRING","generateRandomNumber","minRange","maxRange","random","getNumberFromAmount","formatNumberAsString","endsWith","decimalZero","newAmount","inputNumber","QueryKeys","sortItemsByDescendingAmountAndAlphabetical","shouldDisable","hasAmount","amountA","amountB","plainWords","makeFirstLettersCapital","rawStr","usePlainwords","plainWordList","customPlainWords","word","cropTextInMiddle","middleLength","replacePlaceholdersByValue","widgetTheme","paletteConfig","lightColors","primaryColor","secondaryColor","primaryTextColor","secondaryTextColor","errorColor","cedeErrorColor","accentColor","warningColor","cedeWarningColor","inputBorderColor","primaryDarkBlue","secondaryDarkBlue","cedeSecondaryColor","cedeSuccessColor","cedeWarningLightColor","cedePrimaryBackgroundColor","cedeTextSecondaryColor","cedeSecondaryBackgroundColor","cedeTextGrey","cedeComponentBackgroundColor","cedeComponentBorderGreyColor","cedeComponentHoveredBackgroundColor","cedePaperBackgroundColor","cedePaperLightBackgroundColor","cedePaperGradientBackground","cedePaperModalGradientBackground","cedeGradientPrimaryBackground","cedeBuyColor","cedeSellColor","cedeHelpBackgroundColor","mediumLayer","extraLayer","requestTabWidth","tabHeight","bigTabHeight","requestTabHeight","tradeWidgetHeight","navBarSize","mediumGutterMargin","cedeLinkBigContentMargin","cedeLinkSmallContentMargin","cedeLinkBigContentMaxWidth","linkLogoWidth","linkLogoHeight","inputWidth","circleSize","portfolioItemWidth","portfolioItemHeight","linkInactiveFilterWidth","linkActiveFilterWidth","txHistoryItem","txHistoryList","dateLineHeight","dateLineMargin","txDate","txPlace","txItem","collapsed","toggled","dappListItemHeight","gradientButtonBackground","EthereumProviderError","EthereumRpcError","fast_safe_stringify_1","stringifyReplacer","isValidEthProviderCode","errorValues","errorCodes","invalidInput","resourceNotFound","resourceUnavailable","transactionRejected","methodNotSupported","limitExceeded","userRejectedRequest","unauthorized","unsupportedMethod","chainDisconnected","classes_1","utils_1","error_constants_1","getEthJsonRpcError","parseOpts","getMessageFromCode","getEthProviderError","server","serializeError","errors_1","isValidCode","JSON_RPC_SERVER_ERROR_MESSAGE","FALLBACK_ERROR_CODE","FALLBACK_MESSAGE","FALLBACK_ERROR","fallbackMessage","codeString","hasKey","isJsonRpcServerError","assignOriginalError","fallbackError","shouldIncludeStack","originalError","ReflectOwnKeys","R","ReflectApply","receiver","ownKeys","getOwnPropertySymbols","getOwnPropertyNames","NumberIsNaN","init","errorListener","eventTargetAgnosticAddListener","addErrorHandlerIfEventEmitter","_eventsCount","_maxListeners","defaultMaxListeners","checkListener","_getMaxListeners","that","_addListener","newListener","warned","onceWrapper","fired","wrapFn","_onceWrap","_listeners","unwrap","evlistener","unwrapListeners","listenerCount","wrapListener","getMaxListeners","prependOnceListener","originalListener","spliceOne","rawListeners","eventNames","toStr","gOPD","getOwnPropertyDescriptor","hasOwnConstructor","hasIsPrototypeOf","getProperty","copyIsArray","deep","stable","deterministicStringify","stableStringify","LIMIT_REPLACE_NODE","CIRCULAR_REPLACE_NODE","replacerStack","depthLimit","edgesLimit","spacer","decirc","replaceGetterValues","setReplace","propertyDescriptor","edgeIndex","compareFunction","deterministicDecirc","reactIs","REACT_STATICS","childContextTypes","contextType","contextTypes","getDefaultProps","getDerivedStateFromError","KNOWN_STATICS","caller","callee","arity","MEMO_STATICS","TYPE_STATICS","getStatics","isMemo","ForwardRef","Memo","objectPrototype","inheritedComponent","targetStatics","sourceStatics","descriptor","q","u","$$typeof","AsyncMode","ConcurrentMode","ContextConsumer","ContextProvider","Lazy","Profiler","StrictMode","Suspense","isAsyncMode","isConcurrentMode","isContextConsumer","isContextProvider","isForwardRef","isFragment","isLazy","isPortal","isProfiler","isStrictMode","isSuspense","isValidElementType","isLE","mLen","nBytes","eLen","eMax","eBias","nBits","NaN","rt","LN2","ctor","superCtor","super_","TempCtor","COMMENT_REGEX","NEWLINE_REGEX","WHITESPACE_REGEX","PROPERTY_REGEX","COLON_REGEX","VALUE_REGEX","SEMICOLON_REGEX","TRIM_REGEX","EMPTY_STRING","lineno","Position","errorsList","filename","comments","decl","decls","isStream","duplex","safe_event_emitter_1","_middleware","_handleBatch","_handle","_promiseHandle","asMiddleware","middlewareError","isComplete","returnHandlers","_runAllMiddleware","_runReturnHandlers","handlerCallback","reqs","responses","callerReq","_processRequest","_checkForCompletion","middlewareStack","_runMiddleware","returnHandler","jsonify","createAsyncMiddleware","asyncMiddleware","resolveNextPromise","nextPromise","returnHandlerCallback","nextWasCalled","asyncNext","runReturnHandlersCallback","createScaffoldMiddleware","getUniqueId","MAX","idCounter","getUniqueId_1","_end","originalId","newId","__createBinding","__exportStar","mergeMiddleware","JsonRpcEngine_1","engine","events_1","idMap","processNotification","processResponse","createEngineStream","createEngineStream_1","createStreamMiddleware_1","wrappy","onceStrict","onceError","arg1","arg2","arg3","cachedSetTimeout","cachedClearTimeout","defaultSetTimout","defaultClearTimeout","runTimeout","fun","currentQueue","queue","draining","queueIndex","cleanUpNextTick","drainQueue","runClearTimeout","Item","argv","versions","binding","chdir","umask","ReactPropTypesSecret","emptyFunction","emptyFunctionWithReset","resetWarningCache","shim","secret","getShim","isRequired","ReactPropTypes","bigint","bool","arrayOf","instanceOf","objectOf","oneOf","oneOfType","exact","checkPropTypes","PropTypes","fs","ancient","isFn","destroyer","closed","ReadStream","WriteStream","isFS","streams","destroys","aa","fa","ha","ia","ja","acceptsBooleans","attributeNamespace","propertyName","sanitizeURL","removeEmptyString","ka","la","xlinkHref","lineClamp","ma","na","oa","pa","qa","selectedValue","sa","ta","__html","va","wa","xa","ya","Children","ua","D","za","Ca","Da","Fa","generateStaticMarkup","Ga","Ha","Ia","Ja","Ka","La","Ma","Na","Oa","Pa","Qa","Ra","Sa","Ta","Ua","Va","Wa","Xa","_context","_init","Ya","Za","F","_currentValue2","parentValue","$a","ab","bb","G","db","isMounted","enqueueSetState","_reactInternals","enqueueReplaceState","enqueueForceUpdate","eb","updater","getSnapshotBeforeUpdate","UNSAFE_componentWillMount","componentWillMount","fb","gb","H","clz32","ib","jb","lb","ob","J","K","L","M","N","O","Q","memoizedState","qb","rb","sb","tb","dispatch","ub","vb","wb","xb","readContext","useReducer","useLayoutEffect","useCallback","useDebugValue","useDeferredValue","useTransition","treeContext","idPrefix","useMutableSource","_source","useSyncExternalStore","yb","__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED","ReactCurrentDispatcher","zb","Bb","allPendingTasks","pendingRootTasks","pendingTasks","pingedTasks","Cb","blockedBoundary","blockedSegment","abortSet","legacyContext","parentFlushed","formatContext","lastPushedText","textEmbedded","V","W","onShellError","onFatalError","fatalError","Db","Eb","getChildContext","X","Fb","Gb","isReactComponent","rootSegmentID","forceClientRender","completedSegments","byteSize","fallbackAbortableTasks","errorDigest","Hb","responseState","Y","_defaultValue","ra","Ib","Jb","Kb","Lb","clientRenderedBoundaries","onAllReady","completedRootSegment","onShellReady","completedBoundaries","partialBoundaries","Mb","Z","nextSegmentId","placeholderPrefix","Nb","nextSuspenseID","boundaryPrefix","progressiveChunkSize","Ob","segmentPrefix","Aa","Ba","Pb","Qb","startInlineScript","sentCompleteBoundaryFunction","sentCompleteSegmentFunction","bootstrapChunks","errorMessage","errorComponentStack","sentClientRenderFunction","ba","ca","da","ea","Rb","abortableTasks","Sb","Tb","Ab","Ea","identifierPrefix","renderToNodeStream","renderToStaticMarkup","renderToStaticNodeStream","renderToString","enqueue","TextEncoder","encode","hb","kb","Ub","Vb","Wb","Xb","Yb","Zb","$b","ac","bc","cc","dc","ec","fc","gc","hc","ic","jc","kc","lc","_currentValue","mc","nc","oc","pc","qc","rc","sc","tc","uc","wc","xc","zc","Ac","Bc","Cc","Dc","Ec","Fc","Gc","Hc","Ic","Jc","Kc","Lc","Mc","Oc","Nc","Pc","Qc","Tc","Uc","Sc","Vc","Wc","Xc","Yc","Zc","$c","ad","bd","cd","dd","ed","fd","gd","hd","jd","kd","ld","renderToReadableStream","Rc","bootstrapScriptContent","bootstrapScripts","bootstrapModules","ReadableStream","pull","allReady","signal","setAttributeNS","prepareStackTrace","_valueTracker","stopTracking","defaultChecked","_wrapperState","initialChecked","initialValue","defaultSelected","dangerouslySetInnerHTML","MSApp","execUnsafeLocalFunction","nodeValue","menuitem","area","br","embed","hr","keygen","param","track","wbr","srcElement","correspondingUseElement","stateNode","alternate","dehydrated","sibling","unstable_scheduleCallback","unstable_cancelCallback","unstable_shouldYield","unstable_requestPaint","unstable_now","unstable_getCurrentPriorityLevel","unstable_ImmediatePriority","unstable_UserBlockingPriority","unstable_NormalPriority","unstable_LowPriority","unstable_IdlePriority","pendingLanes","suspendedLanes","pingedLanes","entangledLanes","entanglements","vc","yc","eventTimes","pointerId","blockedOn","domEventName","eventSystemFlags","targetContainers","priority","isDehydrated","dispatchEvent","ReactCurrentBatchConfig","nd","od","keyCode","charCode","pd","qd","rd","_reactName","_targetInst","isDefaultPrevented","returnValue","isPropagationStopped","cancelBubble","persist","isPersistent","wd","xd","yd","sd","eventPhase","bubbles","cancelable","timeStamp","isTrusted","td","ud","detail","vd","Ad","screenX","screenY","pageX","pageY","getModifierState","zd","buttons","fromElement","toElement","movementX","movementY","Bd","Dd","dataTransfer","Fd","Hd","elapsedTime","pseudoElement","Id","clipboardData","Jd","Ld","Md","Esc","Spacebar","Left","Up","Right","Down","Del","Win","Menu","Apps","Scroll","MozPrintableKey","Nd","Od","Alt","Control","Meta","Shift","Pd","Qd","Rd","Td","pressure","tangentialPressure","tiltX","tiltY","twist","pointerType","isPrimary","Vd","targetTouches","changedTouches","Xd","Yd","deltaX","wheelDeltaX","deltaY","wheelDeltaY","wheelDelta","deltaZ","deltaMode","Zd","$d","ae","be","ce","de","ee","fe","ge","he","ie","le","me","ne","oe","pe","qe","se","te","ue","ve","we","xe","ye","ze","oninput","Ae","Be","Ce","De","Ee","Fe","He","Ie","Je","Ke","Le","compareDocumentPosition","Me","HTMLIFrameElement","contentWindow","Ne","Oe","focusedElem","selectionRange","rangeCount","anchorNode","focusNode","focusOffset","createRange","setStart","removeAllRanges","addRange","setEnd","Pe","Qe","Re","Se","Te","Ue","Ve","We","animationend","animationiteration","animationstart","transitionend","Xe","Ye","Ze","$e","af","bf","cf","df","ef","ff","gf","hf","mf","nf","of","pf","qf","rf","sf","tf","uf","parentWindow","vf","wf","je","ke","xf","yf","zf","Af","Bf","Cf","Df","Ef","Ff","Gf","Hf","Jf","queueMicrotask","If","Kf","Lf","Mf","previousSibling","Nf","Of","Pf","Qf","Rf","Sf","Tf","Uf","Vf","Wf","Xf","Yf","__reactInternalMemoizedUnmaskedChildContext","__reactInternalMemoizedMaskedChildContext","Zf","$f","ag","cg","__reactInternalMemoizedMergedChildContext","dg","eg","fg","gg","hg","jg","kg","mg","ng","og","pg","qg","rg","sg","tg","ug","vg","wg","xg","yg","zg","Ag","Bg","deletions","Cg","pendingProps","retryLane","Dg","Eg","Fg","Gg","memoizedProps","Hg","Ig","Jg","Kg","Lg","_owner","_stringRef","Mg","Ng","Og","Pg","Qg","Rg","implementation","Sg","Tg","Ug","Vg","Wg","Xg","Yg","Zg","$g","ah","bh","childLanes","firstContext","lanes","dh","eh","memoizedValue","fh","gh","hh","interleaved","ih","jh","kh","updateQueue","baseState","firstBaseUpdate","lastBaseUpdate","shared","lh","mh","eventTime","lane","nh","oh","ph","qh","rh","sh","th","uh","vh","wh","xh","yh","zh","Ah","Bh","Ch","revealOrder","Dh","Eh","_workInProgressVersionPrimary","Fh","Gh","Hh","Ih","Jh","Kh","Lh","Mh","Nh","Oh","Ph","Qh","Rh","Sh","Th","baseQueue","Uh","Vh","Wh","lastRenderedReducer","hasEagerState","eagerState","lastRenderedState","Xh","Yh","Zh","$h","ai","getSnapshot","bi","ci","di","lastEffect","stores","ei","fi","gi","ii","deps","ji","ki","mi","ni","oi","pi","qi","ri","si","ti","vi","wi","xi","yi","zi","Ai","Bi","unstable_isNewReconciler","Ci","Di","Ei","Fi","shouldComponentUpdate","isPureReactComponent","Gi","Hi","componentWillReceiveProps","UNSAFE_componentWillReceiveProps","Ii","Ji","digest","Ki","Li","Mi","Ni","Oi","Pi","Qi","componentDidCatch","Ri","componentStack","Si","pingCache","Ti","Ui","Vi","Wi","ReactCurrentOwner","Xi","Yi","Zi","$i","aj","bj","cj","dj","baseLanes","cachePool","ej","fj","gj","hj","ij","UNSAFE_componentWillUpdate","componentWillUpdate","jj","kj","pendingContext","lj","zj","Aj","Bj","Cj","mj","nj","oj","pj","qj","sj","dataset","dgst","tj","uj","_reactRetry","rj","subtreeFlags","vj","wj","isBackwards","rendering","renderingStartTime","tailMode","xj","Dj","Ej","Fj","wasMultiple","suppressHydrationWarning","onclick","createElementNS","Gj","Hj","Ij","Jj","Kj","WeakSet","Lj","Mj","Nj","Pj","Qj","Rj","Sj","Tj","Uj","Vj","_reactRootContainer","Wj","Xj","Yj","Zj","onCommitFiberUnmount","ak","bk","ck","dk","ek","isHidden","fk","gk","hk","ik","jk","kk","__reactInternalSnapshotBeforeUpdate","Vk","lk","mk","nk","pk","qk","rk","sk","tk","uk","vk","wk","xk","yk","zk","Ak","Bk","Ck","Dk","callbackNode","expirationTimes","expiredLanes","callbackPriority","ig","Ek","Fk","Gk","Hk","Ik","Jk","Kk","Lk","Mk","Nk","Ok","finishedWork","finishedLanes","Pk","timeoutHandle","Qk","Rk","Sk","Tk","Uk","mutableReadLanes","Oj","onCommitFiberRoot","onRecoverableError","Wk","onPostCommitFiberRoot","Xk","Yk","$k","pendingChildren","al","mutableSourceEagerHydrationData","bl","pendingSuspenseBoundaries","dl","fl","gl","hl","il","yj","Zk","kl","reportError","ll","_internalRoot","nl","rl","ql","unmount","unstable_scheduleHydration","sl","usingClientEntryPoint","Events","tl","findFiberByHostInstance","bundleType","rendererPackageName","rendererConfig","overrideHookState","overrideHookStateDeletePath","overrideHookStateRenamePath","overrideProps","overridePropsDeletePath","overridePropsRenamePath","setErrorHandler","setSuspenseHandler","scheduleUpdate","currentDispatcherRef","findHostInstanceByFiber","findHostInstancesForRefresh","scheduleRefresh","scheduleRoot","setRefreshHandler","getCurrentFiber","reconcilerVersion","__REACT_DEVTOOLS_GLOBAL_HOOK__","vl","supportsFiber","inject","createPortal","cl","createRoot","unstable_strictMode","findDOMNode","hydrateRoot","hydratedSources","_getVersion","unmountComponentAtNode","unstable_batchedUpdates","unstable_renderSubtreeIntoContainer","checkDCE","_typeof","Loader","_react","_getRequireWildcardCache","newObj","hasPropertyDescriptor","desc","_interopRequireWildcard","_propTypes","_loader","enumerableOnly","symbols","_defineProperty","_slicedToArray","_arrayWithHoles","_n","_d","_e","_s","_iterableToArrayLimit","_arrayLikeToArray","_unsupportedIterableToArray","_nonIterableRest","arr2","componentNames","_useState2","setDisplay","visible","Spinner","Audio","getOwnPropertyDescriptors","defineProperties","_objectSpread","BallTriangle","Bars","Circles","CradleLoader","Grid","Hearts","MutatingDots","Oval","Plane","strokeLinecap","strokeLinejoin","Puff","RevolvingDot","Rings","TailSpin","ThreeDots","Triangle","Watch","_Circles","_Watch","_Audio","_BallTriangle","_Bars","_CradleLoader","_Grid","_Hearts","_MutatingDots","_Oval","_Plane","_Puff","_RevolvingDot","_Rings","_TailSpin","_ThreeDots","_Triangle","camelize","decamelize","pascalize","depascalize","camelizeKeys","decamelizeKeys","pascalizeKeys","depascalizeKeys","humps","propertyIsEnumerable","delegatesFocus","ssr","shadowRoot","adoptedStyleSheets","shadowroot","shadowrootmode","CSSStyleSheet","UNMOUNTED","EXITED","ENTERING","ENTERED","EXITING","_React$Component","initialStatus","isMounting","appearStatus","unmountOnExit","mountOnEnter","nextCallback","updateStatus","prevProps","nextStatus","cancelNextCallback","getTimeouts","mounting","forceReflow","performEnter","performExit","appearing","maybeNode","maybeAppearing","timeouts","enterTimeout","safeSetState","onTransitionEnd","_this3","nextState","setNextCallback","_this4","doesNotHaveTimeoutOrListener","maybeNextCallback","TransitionGroupContext","getChildMapping","mapFn","isValidElement","mapper","getProp","getNextChildMapping","prevChildMapping","nextChildMapping","getValueForKey","nextKeysPending","pendingKeys","prevKey","childMapping","pendingNextKey","mergeChildMappings","hasPrev","hasNext","prevChild","isLeaving","cloneElement","contextValue","firstRender","currentChildMapping","childFactory","__self","__source","_status","_result","act","_threadCount","Consumer","_globalName","createFactory","createRef","memo","startTransition","unstable_act","sortIndex","startTime","expirationTime","priorityLevel","scheduling","isInputPending","MessageChannel","port2","port1","onmessage","postMessage","unstable_Profiling","unstable_continueExecution","unstable_forceFrameRate","unstable_getFirstCallbackNode","unstable_next","unstable_pauseExecution","unstable_runWithPriority","unstable_wrapCallback","stylesInDOM","getIndexByIdentifier","modulesToDom","idCountMap","indexByIdentifier","sourceMap","references","addElementStyle","byIndex","domAPI","lastIdentifiers","newList","newLastIdentifiers","styleTarget","contentDocument","getTarget","setAttributes","styleElement","insertStyleElement","styleTagTransform","removeStyleElement","inline_style_parser_1","hasIterator","inst","useSyncExternalStoreWithSelector","trace","percentTwenties","formatters","RFC1738","RFC3986","formats","utils","defaults","allowDots","allowPrototypes","arrayLimit","charset","charsetSentinel","comma","ignoreQueryPrefix","interpretNumericEntities","parameterLimit","parseArrays","plainObjects","strictNullHandling","numberStr","parseKeys","givenKey","segment","chain","leaf","cleanRoot","parseObject","normalizeParseOptions","tempObj","cleanStr","skipIndex","bracketEqualsPos","combine","parseValues","arrayPrefixGenerators","brackets","pushToArray","valueOrArray","toISO","addQueryPrefix","encoder","encodeValuesOnly","formatter","serializeDate","skipNulls","generateArrayPrefix","objKeys","normalizeStringifyOptions","arrayFormat","hexTable","arrayToObject","compacted","compactQueue","strWithoutPlus","defaultEncoder","mergeTarget","targetItem","isBrowser","isElectron","electron","isWebWorker","WorkerGlobalScope","isWindows","platform","isNode","hasProps","isDictionary","isStringCoercible","prop2","getValueFromKeysInArray","asFloat","asInteger","safeFloat","$default","safeInteger","safeIntegerProduct","$factor","safeTimestamp","safeValue","safeString","safeStringLower","safeStringUpper","safeFloat2","safeInteger2","safeIntegerProduct2","safeTimestamp2","safeValue2","safeString2","safeStringLower2","safeStringUpper2","safeFloatN","safeIntegerN","safeIntegerProductN","safeTimestampN","safeValueN","safeStringN","safeStringLowerN","safeStringUpperN","unique","arrayConcat","inArray","needle","haystack","keysort","indexBy","filterBy","sortBy","descending","sortBy2","key1","key2","flatten","pluck","omit","sum","deepExtend","overwrite","unCamelCase","exceptions","strip","uuid","uuid16","uuid22","TRUNCATE","ROUND","ROUND_UP","ROUND_DOWN","DECIMAL_PLACES","SIGNIFICANT_DIGITS","TICK_SIZE","NO_PADDING","PAD_WITH_ZERO","precisionConstants","numberToString","n_e","neg","truncate_regExpCache","truncate_to_string","precision","precisionFromString","numStr","decimalToPrecision","roundingMode","numPrecisionDigits","countingMode","paddingMode","disableThreshold","internalDecimalToPrecision","toNearest","newNumPrecisionDigits","missing","isNegative","strStart","strEnd","strDot","hasDot","afterDot","digitsStart","digitsEnd","precisionStart","precisionEnd","allZeros","signNeeded","readStart","readEnd","nSign","nBeforeDot","nAfterDot","actualLength","desiredLength","pad","padStart","padEnd","omitZero","stringNumber","assertNumber","isSafeInteger","digits","letter","bits","chr","convertRadix","carry","digit","digitBase","gcd","radix2carry","convertRadix2","radix","radix2","revPadding","unsafeWrapper","base16","base32","genBase58","abc","base58","BECH_ALPHABET","POLYMOD_GENERATORS","bech32Polymod","pre","chk","bechChecksum","words","encodingConst","genBech32","ENCODING_CONST","_words","fromWords","toWords","fromWordsUnsafe","lowered","sepIndex","decodeToBytes","decodeUnsafe","utf8","_1n","_2n","u8a","hexes","bytesToHex","hexToNumber","hexToBytes","hexByte","bytesToNumberBE","bytesToNumberLE","numberToBytesBE","numberToBytesLE","ensureBytes","concatBytes","arrs","equalBytes","b1","b2","bitMask","u8n","u8fr","createHmacDrbg","hashLen","qByteLen","hmacFn","reseed","gen","pred","validatorFns","function","Fp","isValid","outputLen","validateObject","validators","optValidators","checkField","fieldName","isOptional","checkVal","pow32","floatBuffer","floatView","append","isReplacement","appendNull","appendByte","appendBoolean","appendBytes","appendInt64","DataView","setFloat64","appendNumber","ascii","c2","encodeUtf8","appendString","sec","getTime","getMilliseconds","appendDate","appendArray","Uint8ClampedArray","appendBinArray","Int8Array","Int16Array","Int32Array","Uint32Array","Float32Array","Float64Array","appendObject","invalidTypeReplacement","newLength","newArray","isJsonEncodedObject","binaryToString","stringToBinary","stringToBase64","base64ToString","base64ToBinary","binaryToBase64","base16ToBinary","binaryToBase16","base58ToBinary","binaryToBase58","binaryConcat","binaryConcatArray","urlencode","qs","urlencodeNested","urlencodeWithArrayRepeat","rawencode","urlencodeBase64","numberToLE","numberToBE","packb","lengths","assert","blockLen","exists","checkFinished","crypto","createView","rotr","toBytes","arrays","Hash","_cloneInto","wrapConstructor","hashConstructor","hashC","randomBytes","bytesLength","getRandomValues","HMAC","iHash","oHash","digestInto","hmac","Base64","char_count","unarmor","Int10","mulAdd","simplify","reTimeS","reTimeL","stringCut","hexDigits","hexDump","isASCII","parseStringISO","parseStringUTF","parseStringBMP","parseTime","shortYear","parseInteger","parseBitString","unusedBit","intro","parseOctetString","parseOID","ASN1","ASN1Tag","typeName","tagClass","tagNumber","posContent","isUniversal","toPrettyString","indent","tagConstructed","posStart","posEnd","toHexString","decodeLength","getHexStringValue","hexString","streamStart","getSub","isEOC","SHA2","padOffset","take","dataView","roundClean","setBigUint64","_32n","_u32_max","wl","setUint32","oview","outLen","Maj","SHA256_K","IV","SHA256_W","SHA256","getUint32","W15","W2","s0","s1","T1","T2","SHA224","sha256","_3n","_4n","_5n","_8n","power","modulo","pow2","invert","FpSqrt","p1div4","eql","sqr","c1","n2","nv","ONE","legendreC","Q1div2","t2","tonelliShanks","isNegativeLE","FIELD_FIELDS","validateField","ORDER","MASK","BYTES","BITS","nLength","nBitLength","_nBitLength","nByteLength","bitLen","redef","sqrtP","is0","isOdd","lhs","rhs","FpPow","sqrN","addN","subN","mulN","inv","invertBatch","lst","nums","lastMultiplied","inverted","reduceRight","FpInvertBatch","cmov","fromBytes","wNAF","constTimeNegate","condition","negate","windows","windowSize","unsafeLadder","double","precomputeWindow","precomputes","maxNumber","shiftBy","wbits","offset1","offset2","cond1","cond2","wNAFCached","precomputesMap","_WINDOW_SIZE","validateBasic","curve","Gx","Gy","b2n","h2b","DER","Err","_parseInt","toSig","sBytes","rBytesLeft","hexFromSig","sig","shl","rhl","weierstrassPoints","CURVE","allowedPrivateKeyLengths","wrapPrivateKey","isTorsionFree","clearCofactor","allowInfinityPoint","endo","beta","splitScalar","validatePointOpts","weierstrassEquation","x3","isWithinCurveOrder","assertGE","normPrivateKeyToScalar","pointPrecomputes","assertPrjPoint","Point","pz","fromAffine","toAffine","normalizeZ","toInv","fromHex","assertValidity","fromPrivateKey","privateKey","_setWindowSize","hasEvenY","X1","Y1","Z1","X2","Y2","Z2","U1","U2","b3","X3","Y3","Z3","t0","t1","t3","t4","t5","subtract","wnaf","multiplyUnsafe","k1neg","k2neg","k1p","k2p","scalar","fake","f1p","f2p","multiplyAndAddUnsafe","iz","ax","ay","zz","cofactor","toRawBytes","isCompressed","toHex","_bits","ProjectivePoint","weierstrass","curveDef","bits2int","bits2int_modN","lowS","validateOpts","CURVE_ORDER","compressedLen","uncompressedLen","modN","invN","cat","numToNByteStr","isBiggerThanHalfOrder","slcNum","Signature","recovery","fromCompact","fromDER","addRecoveryBit","recoverPublicKey","msgHash","rec","radj","ir","hasHighS","normalizeS","toDERRawBytes","toDERHex","toCompactRawBytes","toCompactHex","isValidPrivateKey","randomPrivateKey","groupOrder","precompute","isProbPub","ORDER_MASK","int2octets","prepSig","defaultSigOpts","prehash","extraEntropy","ent","h1int","seedArgs","k2sig","kBytes","normS","defaultVerOpts","getPublicKey","getSharedSecret","privateA","publicB","privKey","drbg","verify","signature","publicKey","_sig","derError","mapToCurveSimpleSWU","sqrtRatio","c3","c4","c5","c6","c7","tv1","tv2","tv3","tv5","tv4","isQR","tvv5","e1","SWUFpSqrtRatio","tv6","os2ip","i2osp","strxor","isBytes","isNum","hash_to_field","DST","_DST","validateDST","log2p","len_in_bytes","prb","lenInBytes","b_in_bytes","r_in_bytes","ell","DST_prime","Z_pad","l_i_b_str","b_0","expand_message_xmd","dkLen","expand_message_xof","elm_offset","tv","createHasher","mapToCurve","hashToCurve","u0","encodeToCurve","encodeDST","getHash","msgs","createCurve","defHash","secp256k1P","secp256k1N","divNearest","sqrtMod","_6n","_11n","_22n","_23n","_44n","_88n","b6","b9","b11","b22","b44","b88","b176","b220","b223","secp256k1","a1","a2","POW_2_128","TAGGED_HASH_PREFIXES","taggedHash","tagP","tagH","pointToBytes","modP","lift_x","xx","isoMap","COEFF","xNum","xDen","yNum","yDen","mapSWU","scalars","CURVE_A","CURVE_B","P256","secp256r1","encoders","binary","supportedCurve","ecdsa","fixedLength","der","asn1","oid","minimumSize","halfOrder","axolotl","signModified","eddsa","crc32","signed","crc","unsigned","microseconds","seconds","uuidv1","timeHex","biasSeconds","setTimeout_original","setTimeout_safe","ms","targetTime","clearInnerTimeout","TimedOut","__proto__","iso8601","_timestampNumber","parse8601","parseDate","rfc2616","toUTCString","mdy","infix","getUTCFullYear","getUTCMonth","getUTCDate","ymd","fullYear","intYear","yymmdd","yyyymmdd","ymdhms","getUTCHours","getUTCMinutes","getUTCSeconds","sleep","promise","expires","race","SdkErrorCodes","SdkErrorMessages","DEFAULT_ERROR","INVALID_PARAMS","INVALID_CACHE","INVALID_ADDRESS","FETCH_FROM_CACHE_ERROR","INTERNAL_ERROR","INVALID_EXCHANGE_INSTANCE_ID","exchangeInstanceId","INVALID_EXCHANGE_ID","AUTHENTICATION_ERROR","INVALID_CREDENTIALS","AUTHENTICATION_FLOW_NOT_SUPPORTED","OAUTH_ACCESS_REVOKED","WITHDRAWAL_ERROR","READONLY_EXCHANGE_NOT_PROVIDED_ERROR","TOKEN_SYMBOL_NOT_FOUND","WITHDRAWAL_NOT_FOUND","UNDER_WITHDRAW_MINIMUM","OVER_WITHDRAW_MAXIMUM","WHITELIST_CHECK_FAILED","WITHDRAWAL_FORBIDDEN","TRADE_ERROR","MARKET_ERROR","market","MARKET_NOT_LOADED","MARKET_TYPE_NOT_SUPPORTED","marketType","ORDER_UNDER_MINIMUM","INVALID_OHLCV_FORMAT","CANNOT_PROVIDE_OHLCV","PORTFOLIO_ERROR","NOT_ENOUGH_BALANCE","DEPOSIT_ERROR","DEPOSIT_NOT_FOUND","GET_DEPOSIT_ADDRESS","CREATE_DEPOSIT_ADDRESS","NETWORK_ERROR","NETWORK_NOT_FOUND","NETWORK_NOT_FOUND_FOR_TOKEN_SYMBOL","API_ERROR","INVALID_API_REQUEST","EXCHANGE_ERROR","EXCHANGE_SERVER_DOWN","EXCHANGE_UNDER_MAINTENANCE","EXCHANGE_REQUEST_EXPIRED","EXCHANGE_INVALID_PERMISSION","EXCHANGE_TRANSFER_NOT_ALLOWED","EXCHANGE_TRANSFER_ERROR","EXCHANGE_DDOS_PROTECTION","EXCHANGE_RATE_LIMIT_EXCEEDED","EXCHANGE_INTERNAL_ERROR","EXCHANGE_UNKNOWN_ASSET","asset","EXCHANGE_OPERATION_FAILED","EXCHANGE_ACCOUNT_SUSPENDED","EXCHANGE_NOT_ALLOWED_METHOD","methodName","EXCHANGE_NOT_AVAILABLE","EXCHANGE_INVALID_NONCE","EXCHANGE_UNAVAILABLE_IN_COUNTRY","EXCHANGE_WALLET_TYPE_NOT_SUPPORTED","SUB_ACCOUNT_ERROR","SUB_ACCOUNT_NOT_FOUND_ERROR","uid","CedeSDKError","isBaseError","metadata","notReportable","sentryName","addOriginalError","originalErrorMessage","reportSentry","sentry","captureException","captureContext","setSentryName","setMetadata","addMetadata","overwriteMessage","addMessage","shouldPrependExchangeId","DefaultError","InvalidParamsError","InvalidCacheError","FetchFromCacheError","InvalidAddressError","ExchangeError","ExchangeServerDownError","ExchangeUnderMaintenanceError","ExchangeRequestExpiredError","ExchangeInvalidPermissionsError","ExchangeTransferNotAllowedError","ExchangeTransferError","ExchangeDDosProtectionError","ExchangeRateLimitExceededError","ExchangeOperationFailedError","ExchangeUnknownAssetError","ExchangeAccountSuspendedError","ExchangeNotAllowedMethodError","ExchangeNotAvailableError","ExchangeInvalidNonceError","ExchangeUnavailableInCountry","ExchangeWalletTypeNotSupportedError","CustomThrottlePriority","Throttler","refillRate","capacity","maxCapacity","priorities","expireIntervals","priorityQueue","running","getMostImportantQueue","priorityIndices","highestPriorityIndex","highestPriorityQueue","lastTimestamp","rejecter","expireInterval","elapsed","customThrottle","customExpireInterval","customPriority","cur","parseTimeframe","timeframe","roundTimeframe","extractParams","implodeParams","vwap","baseVolume","quoteVolume","aggregate","bidasks","volume","zero","minusOne","Precise","decimals","decimalIndex","integerString","integerResult","numerator","smaller","bigger","rationizerNumerator","rationizerDenominator","denominator","lt","gt","difference","integerArray","string1","string2","stringDiv","string2Precise","stringAdd","stringSub","stringAbs","stringNeg","stringMod","stringEquals","stringEq","stringMin","stringMax","stringGt","stringGe","stringLt","stringLe","Future","resolve_","reject_","futures","aggregatePromise","wrapFuture","InternalError","InvalidExchangeInstanceIdError","InvalidExchangeIdError","AuthenticationError","InvalidCredentialsError","AuthenticationFlowNotSupportedError","OAuthAccessRevokedError","WithdrawalError","ReadonlyExchangeNotProvidedError","TokenSymbolNotFoundError","WithdrawalNotFoundError","UnderWithdrawMinimumError","OverWithdrawMaximumError","WhitelistCheckFailedError","WithdrawalForbiddenError","NetworkError","NetworkNotFoundError","NetworkNotFoundForTokenSymbol","DepositError","GetDepositAddressError","CreateDepositAddressError","DepositNotFoundError","ApiError","InvalidApiRequestError","InternalApiExceptionError","INTERNAL_API_EXCEPTION","PortfolioError","InsufficientBalanceError","TradeError","OrderNotFoundError","MarketNotFoundError","InvalidOHLCVFormatError","CannotProvideOHLCVError","MarketError","MarketNotLoadedError","MarketTypeNotSupportedError","Arcfour","rng_state","rng_pptr","rng_pool","onMouseMoveListener","mouseCoordinates","rng_get_byte","SecureRandom","nextBytes","marketsByIdCacheIdentifier","marketsCacheIdentifier","symbolsCacheIdentifier","idsCacheIdentifier","currenciesCacheIdentifier","currenciesByIdCacheIdentifier","networkIdsByCurrencyAndNetworkCodesCacheIdentifier","currencyIdsByCodeAndNetworkCodeCacheIdentifier","chainIdbyEcidsCacheIdentifier","ecidByChainIdsCacheIdentifier","accountsCacheIdentifier","timeDifferenceCacheIdentifier","PUBLIC_DATA_CACHE_TTL","currenciesCacheTTL","rotl","SHA1_W","SHA1","sha1","hex2dec","epoch","leftpad","hmacRes","otp","userConfig","throttleProp","user_agent","userAgents","forcedProxy","agent","termId","nodeHttpModuleLoaded","httpAgent","httpsAgent","minFundingAddressLength","quoteJsonNumbers","handleContentTypeApplicationZip","fetchPrivateMethodsFromCache","reduceFees","validateServerSsl","validateClientSsl","twofa","orderbooks","bidsasks","orders","triggerOrders","requiresWeb3","requiresEddsa","enableLastJsonResponse","enableLastHttpResponse","enableLastResponseHeaders","last_http_response","last_json_response","last_response_headers","last_request_headers","last_request_body","last_request_url","last_request_path","markets","rateLimit","tokenBucket","throttler","enableRateLimit","httpExceptions","markets_by_id","ids","currencies","tokensMapping","tokensMetadata","baseCurrencies","quoteCurrencies","currencies_by_id","codes","reloadingMarkets","marketsLoading","accountsById","precisionMode","timeframes","marketsByAltname","targetAccount","stablePairs","clients","newUpdates","streaming","alias","externalSigner","mutex","httpProxyAgentModule","httpsProxyAgentModule","socksProxyAgentModule","socksProxyAgentModuleChecked","proxyDictionaries","proxyModulesLoaded","getDefaultOptions","fetchImplementation","apiKey","walletAddress","trades","ohlcvs","myTrades","positions","lastRestRequestTimestamp","unCamelCaseProperties","ownPropertyNames","configEntries","describe","agentOptions","hasKeys","defineRestApi","initRestRateLimiter","checkAddress","MAX_VALUE","throttlerFactory","throttle","defineRestApiEndpoint","uppercaseMethod","lowercaseMethod","camelcaseMethod","paths","splitPath","camelcaseSuffix","underscoreSuffix","camelcasePrefix","underscorePrefix","underscore","typeArgument","endpoints","endpoint","loadProxyModules","import","setProxyAgents","httpProxy","httpsProxy","socksProxy","chosenAgent","HttpProxyAgent","HttpsProxyAgent","keepAlive","SocksProxyAgent","loadHttpProxyAgent","httpModule","Agent","getHttpAgentIfNeeded","fetch","httpsModule","proxyUrl","checkProxyUrlSettings","httpProxyAgent","checkProxySettings","checkConflictingProxies","setHeaders","AbortError","FetchError","DOMException","controller","AbortController","handleRestResponse","fetchFromCache","requestCallId","parseJson","jsonString","onJsonResponse","getResponseHeaders","requestHeaders","requestBody","responseHeaders","responseBuffer","statusText","responseBody","bodyText","onRestResponse","handleErrors","handleHttpStatusCode","statusCode","loadMarketsHelper","reload","waitForUnlockAll","needFetchCurrencies","needFetchMarkets","currenciesKeys","marketsKeys","mutexKeys","isLockedMany","acquireAll","fetchCurrenciesPromise","fetchCurrencies","ttl","fetchMarketsPromise","fetchMarkets","setMarkets","releaseAll","loadMarkets","resolved","parseNumber","codeAsString","ErrorClass","remove0xPrefix","hexData","spawn","future","convertToBigInt","stringToCharsArray","valueIsDefined","arraySlice","rng","hexKey","ed25519","fixStringifiedJsonMembers","modifiedContent","replaceAll","safeBoolN","dictionaryOrList","safeBool2","dictionary","safeBool","safeDictN","safeDict","safeDict2","safeListN","safeList2","safeList","handleDeltas","orderbook","deltas","handleDelta","bookside","getCacheIndex","findTimeframe","usedProxies","proxy_url","proxyUrlCallback","proxy_url_callback","proxy","joinedProxyNames","http_proxy","httpProxyCallback","http_proxy_callback","https_proxy","httpsProxyCallback","https_proxy_callback","socks_proxy","socksProxyCallback","socks_proxy_callback","proxyAgentSet","proxyUrlSet","filterByLimit","fromStart","arrayLength","ascending","filterBySinceLimit","since","sinceIsDefined","parsedArray","shouldFilterFromStart","filterByValueSinceLimit","entryFiledEqualValue","firstCondition","entryKeyValue","setSandboxMode","urls","newUrls","fetchAccounts","fetchTrades","fetchDepositAddresses","fetchOrderBook","fetchRestOrderBookSafe","fetchSnapshotMaxRetries","handleOption","fetchTime","fetchTradingLimits","parseMarket","parseMarkets","parseTicker","ticker","parseDepositAddress","parseTrade","parseTransaction","parseTransfer","transfer","parseAccount","parseLedgerEntry","parseOrder","parsePosition","fromAccount","toAccount","withdraw","createDepositAddress","fetchDepositAddressesByNetwork","parseToInt","stringifiedNumber","convertedNumber","parseToNumeric","stringVersion","isRoundNumber","createNetworksByIdObject","networkIdsToCodesGenerated","invertFlatStringDictionary","safeLedgerEntry","safeCurrency","safeNumber","safeCurrencyStructure","safeMarketStructure","cleanStructure","marketValues","limits","fees","marketsSortedBySymbol","marketsSortedById","defaultCurrencyPrecision","marketPrecision","allCurrencies","groupedCurrencies","resultingCurrencies","groupedCurrenciesCode","highestPrecisionCurrency","currentCurrency","sortedCurrencies","currenciesSortedByCode","safeBalance","filteredBalances","free","used","debt","parsedFree","parsedUsed","parsedTotal","parsedDebt","safeOrder","average","lastTradeTimeTimestamp","parseFilled","parseCost","parseLastTradeTimeTimestamp","parseFee","parseFees","parseSymbol","parseSide","shouldParseFees","rawTrades","oldNumber","firstTrade","parseTrades","tradesLength","tradeAmount","tradeCost","tradeTimestamp","tradeFees","tradeFee","reducedFees","reduceFeesByCurrency","reducedLength","feeCopy","inverse","contractSize","filledTimesContractSize","multiplyPrice","orderType","entryFees","timeInForce","postOnly","lastUpdateTimestamp","triggerPrice","takeProfitPrice","stopLossPrice","parseOrders","filterBySymbolSinceLimit","calculateFee","takerOrMaker","feeSide","useQuote","priceString","safeLiquidation","liquidation","contracts","baseValue","quoteValue","safeTrade","dict","reduced","feeCurrencyCode","rateKey","feeValues","reducedFeeValues","safeTicker","change","percentage","fetchOHLCV","convertTradingViewToOHLCV","timestamps","opens","highs","lows","closes","volumes","convertOHLCVToTradingView","fetchWebEndpoint","endpointMethod","returnAsJson","startRegex","endRegex","muteOnFailure","maxRetries","retry","splitted_by_start","splitted_by_end","jsoned","marketIds","marketId","marketSymbols","allowEmpty","sameTypeOnly","sameSubTypeOnly","isLinearSubType","marketCodes","getCodeFromCurrencyId","parseBidsAsks","priceKey","amountKey","countOrIdKey","parseBidAsk","fetchL2OrderBook","filterBySymbol","parseOHLCV","ohlcv","networkCodeToId","networkCode","currencyCode","networkIdsByCodes","networkId","networkCodeReplacements","replacementObject","networkIdToCode","networkCodesByIds","handleNetworkCodeAndParams","networkCodeInParams","handleEcidAndParams","ecidInParams","defaultNetworkCode","defaultNetworks","defaultNetwork","selectNetworkCodeFromUnifiedNetworks","indexedNetworkEntries","selectNetworkKeyFromNetworks","selectNetworkIdFromRawNetworks","isIndexedByUnifiedNetworkCode","chosenNetworkId","availableNetworkIds","responseNetworksLength","defaultNetworkId","safeNumber2","parseOrderBook","bidsKey","asksKey","bids","asks","parseOHLCVs","sorted","loadTradingLimits","safePosition","unrealizedPnlString","initialMarginString","percentageString","parsePositions","filterByArrayPositions","parseAccounts","parseTransactions","filterByCurrencySinceLimit","parseTransfers","transfers","parseLedger","arrayData","itemOrItems","handleParamString","paramName","resolvePath","getListFromObjectValues","getSymbolsForMarketType","subType","symbolWithActiveStatus","symbolWithUnknownStatus","filteredMarkets","checkRequiredArgument","activeStatuses","filterByArray","indexed","isUsingForcedProxy","fetch2","methodCallId","calculateRateLimiterCost","generateMethodCallId","customExtraHeaders","loadAccounts","waitForUnlock","isLocked","acquire","release","buildOHLCVC","oldest","openingTime","candle","parseTradingViewOHLCV","editLimitBuyOrder","editLimitOrder","editLimitSellOrder","fetchPermissions","fetchPosition","getSubAccounts","fetchSubAccountBalances","subAccountTransfer","fromAccountType","toAccountType","fromUid","toUid","fetchPositionsForSymbol","fetchPositions","fetchPositionsRisk","fetchLedger","fetchLedgerEntry","bidask","countOrId","bidAsk","currencyId","safeMarket","currentMarket","safeCurrencyCode","checkRequiredCredentials","requiredCredentials","oath","fetchBalance","parseBalance","fetchPartialBalance","fetchFreeBalance","fetchUsedBalance","fetchTotalBalance","fetchStatus","fetchFundingFee","fetchTransactionFee","fetchFundingFees","fetchTransactionFees","fetchDepositWithdrawFees","fetchDepositWithdrawFee","getSupportedMapping","mapping","handleOptionAndParams","optionName","defaultOptionName","exchangeWideMethodOptions","handleOptionAndParams2","methodName2","handleMarketTypeAndParams","defaultType","methodOptions","methodType","handleSubTypeAndParams","subTypeInParams","handleMarginModeAndParams","throwExactlyMatchedException","replaceErrorMessage","throwBroadlyMatchedException","broad","broadKey","findBroadlyMatchedKey","newMessageKey","subKey","fetchTicker","fetchTickers","fetchOrderBooks","fetchOrder","fetchOrderStatus","fetchUnifiedOrder","createTrailingAmountOrder","trailingAmount","trailingTriggerPrice","createTrailingPercentOrder","trailingPercent","createMarketOrderWithCost","createMarketBuyOrderWithCost","createMarketSellOrderWithCost","createTriggerOrder","createStopLossOrder","createTakeProfitOrder","createOrderWithTakeProfitAndStopLoss","takeProfit","stopLoss","takeProfitType","takeProfitPriceType","takeProfitLimitPrice","takeProfitAmount","stopLossType","stopLossPriceType","stopLossLimitPrice","stopLossAmount","createOrders","cancelAllOrders","cancelUnifiedOrder","fetchOrders","fetchOrderTrades","fetchOpenOrders","fetchClosedOrders","fetchCanceledAndClosedOrders","fetchMyTrades","fetchDepositsWithdrawals","fetchDeposits","fetchWithdrawals","parseLastPrice","fetchDepositAddress","depositAddresses","standardisedTokenSymbol","tokenMappingItem","createExpiredOptionMarket","handleWithdrawTagAndParams","createLimitOrder","createMarketOrder","createLimitBuyOrder","createLimitSellOrder","createMarketBuyOrder","createMarketSellOrder","costToPrecision","priceToPrecision","amountToPrecision","feeToPrecision","currencyToPrecision","networks","networkItem","forceString","isTickPrecision","isDecimalPrecision","isSignificantPrecision","defaultNumber","safeNumberN","parsePrecision","precisionNumber","parsedPrecision","loadTimeDifference","timeDifference","serverTime","implodeHostname","filterBySymbolsSinceLimit","parseTickers","parseDepositAddresses","addresses","safeSymbol","isTriggerOrder","isTrigger","isPostOnly","isMarketOrder","exchangeSpecificParam","handlePostOnly","exchangeSpecificPostOnlyOption","po","fetchTradingFees","fetchTradingFee","handleTimeInForce","exchangeValue","convertTypeToAccount","accountsByType","lowercaseAccount","argumentName","optionsLength","messageOptions","parseDepositWithdrawFees","currencyIdKey","depositWithdrawFees","responseKeys","parseDepositWithdrawFee","depositWithdrawFee","assignDefaultDepositWithdrawFees","networkKeys","numNetworks","getMarketFromSymbols","firstMarket","fetchTransactions","filterByArrayTickers","handleMaxEntriesPerRequestAndParams","maxEntriesPerRequest","newMaxEntriesPerRequest","fetchPaginatedCallDynamic","maxCalls","paginationDirection","paginationTimestamp","calls","until","responseLength","backwardMessage","firstElement","forwardMessage","uniqueResults","removeRepeatedElementsFromArray","safeDeterministicCall","fetchPaginatedCallDeterministic","tasks","currentSince","requiredCalls","fetchPaginatedCallCursor","cursorReceived","cursorSent","cursorIncrement","cursorValue","cursorMessage","sortCursorPaginatedResult","fetchPaginatedCallIncremental","pageKey","incrementalMessage","uniqueResult","handleUntilOption","multiplier","hex2b64","b64tohex","Hex","int2char","op_and","op_or","op_xor","op_andnot","lbit","cbit","dbits","lowprimes","lplim","BigInteger","fromNumber","toRadix","km","DB","nbi","subTo","compareTo","bitLength","nbits","DM","divRemTo","modPowInt","isEven","Classic","Montgomery","exp","copyTo","intValue","DV","byteValue","shortValue","signum","bitwiseTo","or","xor","andNot","shiftLeft","rShiftTo","lShiftTo","shiftRight","getLowestSetBit","bitCount","testBit","setBit","changeBit","clearBit","flipBit","addTo","multiplyTo","divide","remainder","divideAndRemainder","modPow","nbv","Barrett","sqrTo","mulTo","is1","r2","modInverse","NullExp","isProbablePrime","modInt","millerRabin","fromInt","fromRadix","intAt","clamp","dlShiftTo","drShiftTo","bs","cbs","bm","ds","am","squareTo","pm","nsh","ys","y0","yt","F1","F2","d1","FV","d2","invDigit","chunkSize","cs","dMultiply","dAddOffset","op","multiplyLowerTo","multiplyUpperTo","n1","gcda","gcda1","fromNumberAsync","bnp","bnpfn1","mp","mpl","mph","um","mt2","q3","mu","parseBigInt","inBrowser","appName","BI_RC","rr","vv","RSAKey","dmp1","dmq1","coeff","doPublic","doPrivate","xp","xq","setPublic","encrypt","pkcs1pad2","setPrivate","setPrivateEx","DP","DQ","q1","phi","decrypt","ctext","pkcs1unpad2","generateAsync","rsa","loop1","loop4","loop3","loop2","digestMethod","digestName","filler","pkcs1pad1","DIGEST_HEADERS","removeDigestHeader","md2","md5","sha224","sha384","sha512","ripemd160","YAHOO","subc","superc","overrides","superclass","_IEEnumFix","ADD","fname","ex","KJUR","ASN1Util","integerToByteHex","bigIntToMinTwosComplementsHex","bigIntegerValue","xorLen","hMask","getPEMStringFromHex","dataHex","pemHeader","hextopem","newObject","_KJUR_asn1","_DERBoolean","DERBoolean","_DERInteger","DERInteger","_DERBitString","DERBitString","_DEROctetString","DEROctetString","_DERNull","DERNull","_DERObjectIdentifier","DERObjectIdentifier","_DEREnumerated","DEREnumerated","_DERUTF8String","DERUTF8String","_DERNumericString","DERNumericString","_DERPrintableString","DERPrintableString","_DERTeletexString","DERTeletexString","_DERIA5String","DERIA5String","_DERUTCTime","DERUTCTime","_DERGeneralizedTime","DERGeneralizedTime","_DERSequence","DERSequence","_DERSet","DERSet","_DERTaggedObject","DERTaggedObject","_newObject","paramList","asn1Obj","tagParam","explicit","newParam","jsonToASN1HEX","getEncodedHex","oidHexToInt","i01","binbuf","bin","oidIntToHex","oidString","itox","roidtox","roid","padLen","bPad","b8","i0","ASN1Object","getLengthHexFromValue","hV","hN","hNlen","hTLV","isModified","getFreshValueHex","hL","hT","getValueHex","DERAbstractString","getString","setString","newS","stohex","setStringHex","newHexString","DERAbstractTime","localDateToUTC","utc","getTimezoneOffset","formatDate","dateObject","withMillis","zeroPadding","year","getFullYear","getMonth","getDate","getHours","getMinutes","getSeconds","millis","sMillis","setByDateValue","day","hour","UTC","setByDate","DERAbstractStructured","setByASN1ObjectArray","asn1ObjectArray","asn1Array","appendASN1Object","asn1Object","setByBigInteger","setByInteger","setValueHex","setHexValueIncludingUnusedBits","newHexStringIncludingUnusedBits","setUnusedBitsAndHexValue","unusedBits","hValue","hUnusedBits","setByBinaryString","binaryString","setByBooleanArray","booleanArray","newFalseArray","setValueOidString","setValueName","oidName","x509","OID","name2oid","sortFlag","sortflag","isExplicit","setASN1Object","isExplicitFlag","tagNoHex","JSEncryptRSAKey","parseKey","hasPrivateKeyProperty","hasPublicKeyProperty","parsePropertiesFrom","pem","modulus","public_exponent","private_exponent","prime1","prime2","exponent1","exponent2","getPrivateBaseKey","getPrivateBaseKeyB64","getPublicBaseKey","first_sequence","second_sequence","bit_string","getPublicBaseKeyB64","wordwrap","getPrivateKey","npm_package_version","JSEncrypt","default_key_size","default_public_exponent","setKey","setPrivateKey","privkey","setPublicKey","pubkey","getKey","getPrivateKeyB64","getPublicKeyB64","RSA","U32_MASK64","fromBig","Al","toBig","shrSH","shrSL","rotrSH","rotrSL","rotrBH","rotrBL","rotr32H","rotr32L","rotlSH","rotlSL","rotlBH","rotlBL","Bl","add3L","Cl","add3H","add4L","Dl","add4H","add5H","add5L","El","SHA512_Kh","SHA512_Kl","SHA512_W_H","SHA512_W_L","SHA512","Fl","Gl","Hl","W15h","W15l","s0h","s0l","W2h","W2l","s1h","s1l","SUMl","SUMh","sigma1h","sigma1l","CHIh","CHIl","T1ll","T1h","T1l","sigma0h","sigma0l","MAJh","MAJl","All","SHA512_224","SHA512_256","SHA384","twistedEdwards","adjustScalarBytes","domain","uvRatio","preHash","cHash","ctx","phflag","inBig","inRange","in0MaskRange","assertInRange","assertGE0","isPoint","ey","ez","et","Z4","aX2","X1Z2","X2Z1","Y1Z2","Y2Z1","x1y1","T3","isSmallOrder","normed","lastByte","getExtendedPublicKey","modN_LE","hashed","pointBytes","hashDomainToScalar","privKeyBytes","privKeyNumber","signBit","Sencoded","SB","ExtendedPoint","ED25519_P","ED25519_SQRT_M1","_10n","_20n","_40n","_80n","ed25519_pow_2_252_3","b4","b5","b10","b20","b40","b80","b160","b240","b250","pow_p_5_8","v3","v7","vx2","root1","root2","useRoot1","useRoot2","noRoot","ED25519_DEF","ed25519_domain","montgomeryBits","powPminus2","Gu","montgomeryBytes","fieldLen","cswap","x_2","x_3","assertFieldElement","a24","encodeUCoordinate","scalarMult","pointU","uEnc","decodeUCoordinate","_scalar","decodeScalar","pu","x_1","sw","z_2","z_3","k_t","AA","BB","DA","CB","dacb","da_cb","z2","montgomeryLadder","GuBytes","scalarMultBase","montgomery","ELL2_C1","ELL2_C2","ELL2_C3","ELL2_C4","ELL2_J","ELL2_C1_EDWARDS","FpSqrtEven","map_to_curve_elligator2_edwards25519","xMn","xMd","yMn","yMd","x1n","gxd","gx1","y11","y12","x2n","y21","y22","gx2","e2","e3","xn","e4","map_to_curve_elligator2_curve25519","yn","assertRstPoint","RistrettoPoint","SQRT_M1","SQRT_AD_MINUS_ONE","INVSQRT_A_MINUS_D","ONE_MINUS_D_SQ","D_MINUS_ONE_SQ","invertSqrt","MAX_255B","bytes255ToNumberLE","calcElligatorRistrettoMap","r0","Ns","Ns_D_is_sq","s_","Nt","s2","W0","W1","W3","ep","ap","R1","R2","emsg","u1_2","u2_2","Dx","Dy","u2sq","invsqrt","D1","D2","zInv","_x","_y","two","SubAccount","SubAccountNotFoundError","STABLE_COINS","gate","convertExpireDate","quote","settle","optionParts","symbolBase","marketIdBase","expiry","strike","optionType","timeDifferenceMs","timeDifferenceS","publicSpotGetTime","sandboxMode","rawPromises","fetchContractMarkets","fetchOptionMarkets","mainnetOnly","fetchSpotMarkets","spotMarkets","contractMarkets","optionMarkets","marginResponse","publicMarginGetCurrencyPairs","spotMarketsResponse","publicSpotGetCurrencyPairs","marginMarkets","spotMarket","marginMarket","baseId","quoteId","takerPercent","makerPercent","amountPrecision","tradeStatus","swapSettlementCurrencies","getSettlementCurrencies","futureSettlementCurrencies","settleId","publicFuturesGetSettleContracts","parsedMarket","parseContractMarket","publicDeliveryGetSettleContracts","priceDeviate","markPrice","minMultiplier","maxMultiplier","minPrice","maxPrice","isLinear","underlyings","fetchOptionUnderlyings","underlying","query","publicOptionsGetContracts","isCall","optionLetter","underlyingsResponse","publicOptionsGetUnderlyings","prepareRequest","defaultSettle","spotOrderPrepareRequest","marginMode","getMarginMode","multiOrderSpotPrepareRequest","defaultMarginMode","fetchMarketsContractOptions","publicSpotGetCurrencies","currencyIdLower","delisted","withdrawDisabled","depositDisabled","tradeDisabled","isWithdrawalEnabled","isDepositEnabled","isTokenDepositable","isTokenWithdrawable","fetchNetworkDepositAddress","privateWalletGetDepositAddress","addressField","splitted","privateWalletGetFee","parseTradingFee","parseTradingFees","gtDiscount","taker","maker","takerKey","makerKey","privateWalletGetWithdrawStatus","withdrawFees","withdrawFixOnChains","chainKeys","chainKey","publicSpotGetOrderBook","publicFuturesGetSettleOrderBook","publicDeliveryGetSettleOrderBook","publicOptionsGetOrderBook","publicSpotGetTickers","publicFuturesGetSettleTickers","publicDeliveryGetSettleTickers","publicOptionsGetTickers","ask","bid","bidVolume","askVolume","requestParams","parseBalanceHelper","requestQuery","privateSpotGetAccounts","privateMarginGetAccounts","privateMarginGetCrossAccounts","privateMarginGetFundingAccounts","privateFuturesGetSettleAccounts","privateDeliveryGetSettleAccounts","privateOptionsGetAccounts","isolated","flatBalances","symbolInner","baseCode","quoteCode","subResult","paginate","fetchOptionOHLCV","maxLimit","toTimestamp","currentTimestamp","publicDeliveryGetSettleCandlesticks","publicFuturesGetSettleCandlesticks","publicSpotGetCandlesticks","publicOptionsGetCandlesticks","publicSpotGetTrades","publicFuturesGetSettleTrades","publicDeliveryGetSettleTrades","publicOptionsGetTrades","privateSpotGetMyTrades","privateFuturesGetSettleMyTradesTimerange","privateDeliveryGetSettleMyTrades","privateOptionsGetMyTrades","amountString","contractSide","orderId","feeAmount","gtFee","pointFee","feeCurrencyId","privateWalletGetDeposits","privateWalletGetWithdrawals","precisionAmount","privateWithdrawalsPostWithdrawals","parseTransactionStatus","parseTransactionType","feeCostString","txid","rawStatus","trigger","nonTriggerOrder","orderRequest","createOrderRequest","privateSpotPostOrders","privateSpotPostPriceOrders","privateFuturesPostSettleOrders","privateFuturesPostSettlePriceOrders","privateDeliveryPostSettleOrders","privateDeliveryPostSettlePriceOrders","privateOptionsPostOrders","ordersRequests","orderSymbols","rawOrder","orderParams","extendedParams","privateSpotPostBatchOrders","privateFuturesPostSettleBatchOrders","isStopLossOrder","isTakeProfitOrder","isStopOrder","reduceOnly","exchangeSpecificTimeInForce","isLimitOrder","defaultTif","signedAmount","quoteAmount","createMarketBuyOrderRequiresPrice","costRequest","clientOrderId","textIsRequired","triggerOrderPrice","priceType","defaultExpiration","expiration","privateSpotPatchOrdersOrderId","privateFuturesPutSettleOrdersOrderId","parseOrderStatus","put","remainingString","lastTradeTimestamp","exchangeSymbol","rebate","multipleFeeCurrencies","averageString","filledTotal","privateSpotGetPriceOrdersOrderId","privateSpotGetOrdersOrderId","privateFuturesGetSettlePriceOrdersOrderId","privateFuturesGetSettleOrdersOrderId","privateDeliveryGetSettlePriceOrdersOrderId","privateDeliveryGetSettleOrdersOrderId","privateOptionsGetOrdersOrderId","fetchOrdersByStatus","spot","openSpotOrders","privateSpotGetOpenOrders","privateSpotGetPriceOrders","privateSpotGetOrders","privateFuturesGetSettlePriceOrders","privateFuturesGetSettleOrders","privateDeliveryGetSettlePriceOrders","privateDeliveryGetSettleOrders","privateOptionsGetOrders","ordersInner","privateSpotDeletePriceOrdersOrderId","privateSpotDeleteOrdersOrderId","privateFuturesDeleteSettlePriceOrdersOrderId","privateFuturesDeleteSettleOrdersOrderId","privateDeliveryDeleteSettlePriceOrdersOrderId","privateDeliveryDeleteSettleOrdersOrderId","privateOptionsDeleteOrdersOrderId","privateSpotDeletePriceOrders","privateSpotDeleteOrders","privateFuturesDeleteSettlePriceOrders","privateFuturesDeleteSettleOrders","privateDeliveryDeleteSettlePriceOrders","privateDeliveryDeleteSettleOrders","privateOptionsDeleteOrders","privateWalletGetSubAccountBalances","subAccount","available","privateSubAccountsGetSubAccounts","user_id","fromAccountTypeExt","toAccountTypeExt","requestedAmount","privateWalletPostSubAccountTransfers","fromId","toId","truncated","privateWalletPostTransfers","extendedRequest","privateFuturesGetSettlePositionsContract","privateDeliveryGetSettlePositionsContract","privateOptionsGetPositionsContract","privateFuturesGetSettlePositions","privateDeliveryGetSettlePositions","privateOptionsGetPositions","parseMarginLoan","endPart","entirePath","queryString","requiresURLEncoding","pathParts","secondPart","urlQueryParams","bodyPayload","bodySignature","timestampString","signaturePath","privateSpotGetAccountBook","privateMarginGetAccountBook","privateFuturesGetSettleAccountBook","privateDeliveryGetSettleAccountBook","privateOptionsGetAccountBook","rawTimestamp","balanceString","changeString","parseLedgerEntryType","userMessage","ccxtVersion","exchanges","forceProxy","isInverse","strikeAsString","defaultSubType","isLegacyLinear","isLegacyInverse","isLegacy","futuresSymbol","fapiPublicGetTime","dapiPublicGetTime","publicGetTime","sapiGetCapitalConfigGetall","legalMoney","minPrecision","networkList","networksById","ecid","withdrawFee","precisionTick","minNetworkWithdrawString","maxNetworkWithdrawString","trading","maxDecimalPlaces","promisesRaw","rawFetchMarkets","publicGetExchangeInfo","fapiPublicGetExchangeInfo","dapiPublicGetExchangeInfo","eapiPublicGetExchangeInfo","futureMarkets","deliveryMarkets","optionBase","lowercaseId","contractType","filters","filtersByType","linear","feesType","permissionSets","permissionsFromSets","isMarginTradingAllowed","unifiedType","stepSize","interest","parseBalanceCustom","cross","borrowed","lockedPositions","flexiblePositions","withdrawing","locked","isPortfolioMargin","papiGetBalance","fapiPrivateV2GetAccount","dapiPrivateGetAccount","paramSymbols","sapiGetMarginIsolatedAccount","sapiGetMarginAccount","fetchPaginatedPositionsByPage","sapiPostAssetGetFundingAsset","privateGetAccount","pageSize","maxPages","page","eapiPublicGetDepth","fapiPublicGetDepth","dapiPublicGetDepth","publicGetDepth","sapiGetSystemStatus","statusRaw","eapiPublicGetTicker","fapiPublicGetTicker24hr","dapiPublicGetTicker24hr","rolling","publicGetTicker","publicGetTicker24hr","firstTicker","volumeIndex","endTime","eapiPublicGetKlines","dapiPublicGetMarkPriceKlines","fapiPublicGetMarkPriceKlines","dapiPublicGetIndexPriceKlines","fapiPublicGetIndexPriceKlines","fapiPublicGetKlines","dapiPublicGetKlines","publicGetKlines","parseDustTrade","buyerMaker","tradedCurrency","earnedCurrency","applicantSymbol","tradedCurrencyIsQuote","costString","isFutureOrSwap","eapiPublicGetTrades","fapiPublicGetAggTrades","dapiPublicGetAggTrades","publicGetAggTrades","editSpotOrder","editSpotOrderRequest","privatePostOrderCancelReplace","initialUppercaseType","uppercaseType","stopPrice","validOrderTypes","broker","brokerId","timeInForceIsRequired","priceIsRequired","stopPriceIsRequired","quantityIsRequired","quoteOrderQtyNew","quoteOrderQuantity","editContractOrder","fapiPrivatePutOrder","dapiPrivatePutOrder","timestampValue","fills","stopPriceString","feeCost","fapiPrivatePostBatchOrders","eapiPrivatePostBatchOrders","dapiPrivatePostBatchOrders","isConditional","sor","eapiPrivatePostOrder","privatePostSorOrderTest","privatePostSorOrder","papiPostUmConditionalOrder","papiPostUmOrder","fapiPrivatePostOrder","papiPostCmConditionalOrder","papiPostCmOrder","dapiPrivatePostOrder","papiPostMarginOrder","sapiPostMarginOrder","privatePostOrderTest","privatePostOrder","trailingDelta","isTrailingPercentOrder","isStopLoss","isTakeProfit","isPortfolioMarginConditional","clientOrderIdRequest","eapiPrivateGetOrder","papiGetUmOrder","fapiPrivateGetOrder","papiGetCmOrder","dapiPrivateGetOrder","papiGetMarginOrder","sapiGetMarginOrder","privateGetOrder","eapiPrivateGetHistoryOrders","papiGetUmConditionalAllOrders","papiGetUmAllOrders","fapiPrivateGetAllOrders","papiGetCmConditionalAllOrders","papiGetCmAllOrders","dapiPrivateGetAllOrders","papiGetMarginAllOrders","sapiGetMarginAllOrders","privateGetAllOrders","numSymbols","fetchOpenOrdersRateLimit","eapiPrivateGetOpenOrders","papiGetUmConditionalOpenOrders","papiGetUmOpenOrders","fapiPrivateGetOpenOrders","papiGetCmConditionalOpenOrders","papiGetCmOpenOrders","dapiPrivateGetOpenOrders","papiGetMarginOpenOrders","sapiGetMarginOpenOrders","privateGetOpenOrders","filteredOrders","fetchCanceledOrders","eapiPrivateDeleteOrder","papiDeleteUmConditionalOrder","papiDeleteUmOrder","fapiPrivateDeleteOrder","papiDeleteCmConditionalOrder","papiDeleteCmOrder","dapiPrivateDeleteOrder","papiDeleteMarginOrder","sapiDeleteMarginOrder","privateDeleteOrder","eapiPrivateDeleteAllOpenOrders","papiDeleteUmConditionalAllOpenOrders","papiDeleteUmAllOpenOrders","fapiPrivateDeleteAllOpenOrders","papiDeleteCmConditionalAllOpenOrders","papiDeleteCmAllOpenOrders","dapiPrivateDeleteAllOpenOrders","papiDeleteMarginAllOpenOrders","sapiDeleteMarginOpenOrders","privateDeleteOpenOrders","cancelOrders","fapiPrivateDeleteBatchOrders","dapiPrivateDeleteBatchOrders","oneWeek","eapiPrivateGetUserTrades","papiGetMarginMyTrades","sapiGetMarginMyTrades","privateGetMyTrades","papiGetUmUserTrades","fapiPrivateGetUserTrades","papiGetCmUserTrades","dapiPrivateGetUserTrades","fiatOnly","sapiGetFiatOrders","sapiGetCapitalDepositHisrec","sapiGetCapitalWithdrawHistory","parseTransactionStatusByType","statuses","updated","txType","legalMoneyCurrenciesById","internalInteger","parseTransferStatus","sapiV4GetSubAccountAssets","spotBalances","sapiGetSubAccountList","subAccounts","sapiPostSubAccountUniversalTransfer","isolatedSymbol","fromIsolated","toIsolated","fromSpot","toSpot","sapiPostAssetTransfer","fetchTransfers","defaultTo","sapiGetAssetTransfer","sapiGetCapitalDepositAddress","impliedNetwork","reverseNetworks","topLevel","subLevel","impliedNetworks","conversion","networkEntry","sapiPostCapitalWithdrawApply","papiGetUmCommissionRate","fapiPrivateGetCommissionRate","papiGetCmCommissionRate","dapiPrivateGetCommissionRate","sapiGetAssetTradeFee","isSpotOrMargin","feeTier","feeTiers","parseAccountPositions","crossWalletBalance","crossUnPnl","maintenanceMargin","parseAccountPosition","leverageString","leverage","initialMargin","initialMarginPercentageString","usdm","maintenanceMarginString","entryPriceString","entryPrice","notionalString","notionalStringAbs","notional","contractsString","contractsStringAbs","entryNotional","contractSizeNew","leverageBrackets","leverageBracket","maintenanceMarginPercentageString","bracket","maintenanceMarginPercentage","unrealizedPnl","collateralString","walletBalance","collateral","marginRatio","liquidationPriceStringRaw","liquidationPrice","contractSizeString","onePlusMaintenanceMarginPercentageString","entryPriceSignString","pricePrecision","pricePrecisionPlusOneString","rounderString","liquidationPriceRoundedString","truncatedLiquidationPrice","hedged","parsePositionRisk","contractsAbs","liquidationPriceString","inner","quotePrecision","basePrecision","loadLeverageBrackets","papiGetUmLeverageBracket","fapiPrivateGetLeverageBracket","papiGetCmLeverageBracket","dapiPrivateV2GetLeverageBracket","floorValue","eapiPrivateGetPosition","fetchOptionPositions","quantity","defaultMethod","fetchAccountPositions","papiGetUmAccount","papiGetCmAccount","papiGetUmPositionRisk","fapiPrivateV2GetPositionRisk","papiGetCmPositionRisk","dapiPrivateGetPositionRisk","eapiPrivateGetBill","papiGetUmIncome","fapiPrivateGetIncome","papiGetCmIncome","dapiPrivateGetIncome","batchOrders","queryBatch","defaultRecvWindow","recvWindow","orderidlist","origclientorderidlist","orderidlistLength","origclientorderidlistLength","getExceptionsByUrl","exactOrBroad","exceptionsForMarketType","messageNew","parsedMessage","errorCode","byLimit","isFiat","getCurrencyId","getCurrencyName","publicGetPlatformStatus","spotMarketsInfo","publicGetConfPubInfoPair","futuresMarketsInfo","publicGetConfPubInfoPairFutures","marginIds","publicGetConfPubListPairMargin","splitBase","splitQuote","minOrderSizeString","maxOrderSizeString","publicGetConfConfig","pool","undl","fid","isWithdrawEnabled","currencyNetworks","cleanId","safeNetwork","networkStatus","depositEnable","withdrawEnable","requestedType","accountType","isDerivative","privatePostAuthRWallets","isDerivativeCode","fromCurrencyId","convertDerivativesId","toCurrencyId","privatePostAuthWTransfer","transferId","fullRequest","publicGetBookSymbolPrecision","priceIndex","publicGetTickers","publicGetTickerSymbol","amountIndex","timestampIndex","publicGetTradesSymbolHist","publicGetCandlesTradeTimeframeSymbolHist","parseOrderFlags","parseTimeInForce","rawFlags","statusString","privatePostAuthROrdersSymbolHist","postOnlyParam","ioc","fok","privatePostAuthWOrderSubmit","errorText","privatePostAuthWOrderMulti","individualOrder","privatePostAuthWOrderCancelMulti","cid","cidDate","privatePostAuthWOrderCancel","fetchOpenOrder","fetchClosedOrder","privatePostAuthROrders","privatePostAuthROrdersSymbol","privatePostAuthROrdersHist","privatePostAuthROrderSymbolIdTrades","privatePostAuthRTradesSymbolHist","privatePostAuthRTradesHist","currencyNetwork","privatePostAuthWDepositAddress","poolAddress","transactionLength","addressTo","privatePostAuthRSummary","fiat","feeData","makerData","takerData","makerFee","makerFeeFiat","makerFeeDeriv","takerFee","takerFeeFiat","takerFeeDeriv","privatePostAuthRMovementsCurrencyHist","privatePostAuthRMovementsHist","withdrawOptions","privatePostAuthWWithdraw","statusMessage","txId","privatePostAuthRPositions","tradePrice","feedback","privatePostAuthRLedgersCurrencyHist","privatePostAuthRLedgersHist","privatePostAuthWOrderUpdate","USDT_FUTURES","USDT_SETTLES","USDC_FUTURES","USDC_SETTLES","SUSDT_FUTURES","SUSDT_SETTLES","SUSDC_FUTURES","SUSDC_SETTLES","COIN_FUTURES","SCOIN_FUTURES","SCOIN_SETTLES","convertSymbolForSandbox","convertedSymbol","previousBase","previousQuote","splitSettle","previousSettle","publicCommonGetV2PublicTime","handleProductTypeAndParams","defaultProductType","productType","getFutureMarginCoin","otherProductTypes","subTypes","fetchMarketsByType","supportMarginCoins","expiryDatetime","symbolType","expiryParts","yearPart","dayPart","priceDecimals","amountDecimals","priceStep","amountStep","precisePrice","preciseAmount","minCost","publicSpotGetV2SpotPublicSymbols","publicMixGetV2MixMarketContracts","networkIdsByCurrencyAndNetworkCodes","publicSpotGetV2SpotPublicCoins","chains","minWithdrawString","minDepositString","minWithdrawFeeString","networkWithdrawFeeString","networkMinWithdrawString","networkMinDepositString","privateSpotGetV2SpotWalletDepositRecords","rawTransactions","privateSpotPostSpotV1WalletWithdrawalV2","privateSpotGetV2SpotWalletWithdrawalRecords","feeCostAbsString","privateSpotGetV2SpotWalletDepositAddress","parsedCurrency","sandboxSymbol","publicSpotGetV2SpotMarketOrderbook","publicMixGetV2MixMarketMergeDepth","open24","openValue","publicSpotGetV2SpotMarketTickers","publicMixGetV2MixMarketTicker","publicMixGetV2MixMarketTickers","feeDetail","feeStructure","spotOptions","defaultSpotMethod","spotMethod","publicSpotGetV2SpotMarketFillsHistory","publicSpotGetV2SpotMarketFills","swapOptions","defaultSwapMethod","swapMethod","publicMixGetV2MixMarketFillsHistory","publicMixGetV2MixMarketFills","privateCommonGetV2CommonTradeRate","publicMarginGetV2MarginCurrencies","selectedTimeframe","thirtyOneDaysAgo","publicSpotGetV2SpotMarketHistoryCandles","publicSpotGetV2SpotMarketCandles","publicMixGetV2MixMarketHistoryMarkCandles","publicMixGetV2MixMarketHistoryIndexCandles","publicMixGetV2MixMarketHistoryCandles","publicMixGetV2MixMarketCandles","privateMixGetV2MixAccountAccounts","privateMixGetV2AccountFundingAssets","privateMarginGetMarginV1IsolatedAccountAssets","resData","parseIsolatedMarginBalance","privateMarginGetMarginV1CrossAccountAssets","privateSpotGetV2SpotAccountAssets","privateEarnGetV2EarnAccountAssets","parseEarnBalance","borrow","spotAccountFree","contractAccountFree","updateTimestamp","parsedFeeDetail","feeObject","feeValue","reduceOnlyRaw","baseSize","stopLossTriggerPrice","takeProfitTriggerPrice","isStopLossOrTakeProfitTrigger","privateSpotPostV2SpotTradePlacePlanOrder","privateMarginPostV2MarginIsolatedPlaceOrder","privateMarginPostV2MarginCrossedPlaceOrder","privateSpotPostV2SpotTradePlaceOrder","privateMixPostV2MixOrderPlacePlanOrder","privateMixPostV2MixOrderPlaceTpslOrder","privateMixPostV2MixOrderPlaceOrder","isStopLossTriggerOrder","isTakeProfitTriggerOrder","isStopLossOrTakeProfit","triggerType","exchangeSpecificTifParam","defaultTimeInForce","slTriggerPrice","slPrice","slType","tpTriggerPrice","tpPrice","tpType","marginModeRequest","oneWayMode","requestSide","planType","currentMarginMode","privateMixPostV2MixOrderBatchPlaceOrder","privateMarginPostV2MarginIsolatedBatchPlaceOrder","privateMarginPostV2MarginCrossedBatchPlaceOrder","privateSpotPostV2SpotTradeBatchOrders","failure","orderInfo","both","privateSpotPostV2SpotTradeModifyPlanOrder","privateMixPostV2MixOrderModifyPlanOrder","privateMixPostV2MixOrderModifyTpslOrder","defaultNewClientOrderId","newClientOrderId","privateMixPostV2MixOrderModifyOrder","trailing","orderIdList","privateMixPostV2MixOrderCancelPlanOrder","privateMixPostV2MixOrderCancelOrder","privateMarginPostV2MarginIsolatedCancelOrder","privateMarginPostV2MarginCrossedCancelOrder","privateSpotPostV2SpotTradeCancelPlanOrder","privateSpotPostV2SpotTradeCancelOrder","privateMarginPostV2MarginCrossedBatchCancelOrder","privateMarginPostV2MarginIsolatedBatchCancelOrder","privateSpotPostV2SpotTradeBatchCancelOrder","privateMixPostV2MixOrderBatchCancelOrders","privateMarginPostMarginV1CrossOrderBatchCancelOrder","privateMarginPostMarginV1IsolatedOrderBatchCancelOrder","privateSpotPostV2SpotTradeCancelSymbolOrder","privateSpotGetV2SpotTradeOrderInfo","privateMixGetV2MixOrderDetail","privateMarginGetV2MarginIsolatedOpenOrders","privateMarginGetV2MarginCrossedOpenOrders","privateSpotGetV2SpotTradeCurrentPlanOrder","privateSpotGetV2SpotTradeUnfilledOrders","privateMixGetV2MixOrderOrdersPlanPending","privateMixGetV2MixOrderOrdersPending","resultList","privateMarginGetV2MarginIsolatedHistoryOrders","privateMarginGetV2MarginCrossedHistoryOrders","privateSpotGetV2SpotTradeHistoryPlanOrder","privateSpotGetV2SpotTradeHistoryOrders","privateMixGetV2MixOrderOrdersPlanHistory","privateMixGetV2MixOrderOrdersHistory","privateSpotGetV2SpotAccountBills","privateMixGetV2MixAccountBill","bills","amountRaw","parseLedgerType","privateMarginGetV2MarginIsolatedFills","privateMarginGetV2MarginCrossedFills","privateSpotGetV2SpotTradeFills","privateMixGetV2MixOrderFills","fillList","privateMixGetV2MixPositionSinglePosition","fetchPositionsOptions","isHistory","marginCoin","privateMixGetV2MixPositionAllPosition","privateMixGetV2MixPositionHistoryPosition","rawCollateral","holdMode","contractSizeNumber","baseAmount","openNotional","initialMarginPercentage","calcTakerFeeMult","signedMargin","signedMmp","mmrMinusOne","feeToClose","privateSpotGetV2SpotAccountTransferRecords","privateSpotGetV2SpotAccountSubaccountAssets","assetsList","privateSpotPostV2SpotWalletSubaccountTransfer","privateSpotPostV2SpotWalletTransfer","fromAccountRaw","toAccountRaw","chainsLength","cachedNetworkIdsByCurrencyAndNetworkCodes","nonEmptyMessage","nonZeroErrorCode","queryInner","publicGetSystemTime","publicGetSystemService","services","servicesByType","service","eta","publicGetSpotV1SymbolsDetails","numericId","minBuyCost","minSellCost","baseMinSize","publicGetContractPublicDetails","isSwap","isFutures","safeCurrencyByCode","publicGetAccountV1Currencies","privateGetAccountV1WithdrawCharge","percentageRaw","parseTickerV3","publicGetContractV1Tickers","publicGetSpotQuotationV3Ticker","tickersById","parsedTicker","publicGetSpotV2Ticker","publicGetSpotQuotationV3Books","publicGetContractPublicDepth","parseOrderSide","publicGetSpotV1SymbolsTrades","parsedTimeframe","publicGetContractPublicKline","publicGetSpotQuotationV3Klines","defaultLimit","privatePostSpotV4QueryTrades","privateGetContractPrivateTrades","privatePostSpotV4QueryOrderTrades","customParseBalance","isMargin","privateGetSpotV1Wallet","privateGetContractPrivateAssetsDetail","privateGetAccountV1Wallet","privateGetSpotV1MarginIsolatedAccount","privateGetSpotV1TradeFee","parseOrderStatusByType","spotRequest","createSpotOrderRequest","privatePostSpotV1MarginSubmitOrder","privatePostSpotV2SubmitOrder","swapRequest","createSwapOrderRequest","privatePostContractPrivateSubmitPlanOrder","privatePostContractPrivateSubmitOrder","isExchangeSpecificPo","privatePostSpotV3CancelOrder","privatePostContractPrivateCancelPlanOrder","privatePostContractPrivateCancelOrder","succeeded","privatePostSpotV1CancelOrders","privatePostContractPrivateCancelOrders","responseHistoryOrders","privatePostSpotV4QueryHistoryOrders","responseOpenOrders","privatePostSpotV4QueryOpenOrders","historyOrders","privateGetSpotV3Orders","isStop","privateGetContractPrivateCurrentPlanOrder","privateGetContractPrivateGetOpenOrders","endTimeKey","privateGetContractPrivateOrderHistory","privatePostSpotV4QueryClientOrder","privatePostSpotV4QueryOrder","privateGetContractPrivateOrder","privateGetAccountV1DepositAddress","privatePostAccountV1WithdrawApply","fetchTransactionsByType","privateGetAccountV2DepositWithdrawHistory","records","fetchDeposit","privateGetAccountV1DepositWithdrawDetail","record","fetchWithdrawal","withdrawId","depositId","NETWORK_SEPARATOR","privatePostSpotV1MarginIsolatedTransfer","privatePostAccountV1TransferContract","parseTransferToAccount","parseTransferFromAccount","privatePostAccountV1TransferContractList","privateGetContractPrivatePosition","symbolsLength","cachedCurrencyIdsByCodeAndNetwork","getOrDelete","isErrorMessage","publicGetEurUsd","buy","sell","fetchMarketsFromCache","constructCurrencyObject","originalPayload","currencyType","tickSize","publicGetTradingPairsInfo","marketsPromise","currenciesPromise","publicGetCurrencies","indexedCurrencies","baseDescription","quoteDescription","baseDecimals","matchedCurrency","counterDecimals","publicGetOrderBookPair","microtimestamp","publicGetTickerPair","getCurrencyIdFromTransaction","getMarketFromTrade","currencyIds","numCurrencyIds","rawMarketId","currentKey","feeCurrency","priceId","datetimeString","publicGetTransactionsPair","publicGetOhlcPair","ohlc","privateGetEarnSubscriptions","privatePostBalance","privatePostBalancePair","feeString","dividedFeeString","parseTransactionFees","mainCurrencyId","dictValue","capitalizedSide","privatePostBuyMarketPair","privatePostSellMarketPair","privatePostBuyInstantPair","privatePostSellInstantPair","privatePostBuyPair","privatePostSellPair","privatePostCancelOrder","privatePostCancelAllOrdersPair","privatePostCancelAllOrders","privatePostOrderStatus","privatePostUserTransactions","privatePostWithdrawalRequests","addressParts","parsedTrade","parsedTransaction","privatePostOpenOrdersAll","xAuth","xAuthNonce","xAuthTimestamp","xAuthVersion","authBody","httpCode","reasonInner","addPaginationCursorToResult","paginationCursor","dataLength","isUnifiedEnabled","enableUnifiedMargin","enableUnifiedAccount","privateGetV5UserQueryApi","convertExpireDateToMarketIdDate","monthRaw","convertMarketIdExpireDate","monthName","getBybitType","publicGetV5MarketTime","privateGetV5AssetCoinQueryInfo","withdrawFeeString","minNetworkDepositString","promisesUnresolved","fetchFutureMarkets","linearMarkets","inverseMarkets","btcOptionMarkets","ethOptionMarkets","solOptionMarkets","derivativeMarkets","publicGetV5MarketInstrumentsInfo","responseResult","lotSizeFilter","priceFilter","responseInner","dataNew","rawMarkets","category","inverseFutures","linearFutures","linearPerpetual","inversePerpetual","defaultSettledId","splitId","isSpot","publicGetV5MarketTickers","rawTicker","parsedSymbols","currentType","tickerList","publicGetV5MarketKline","publicGetV5MarketMarkPriceKline","publicGetV5MarketIndexPriceKline","publicGetV5MarketPremiumIndexPriceKline","isBuyer","isMaker","lastLiquidityInd","feeRateString","publicGetV5MarketRecentTrade","publicGetV5MarketOrderbook","currencyList","coins","coinEntry","loan","isUnifiedAccount","accountTypes","isSubAccount","privateGetV5SpotCrossMarginTradeAccount","privateGetV5AssetTransferQueryAccountCoinsBalance","privateGetV5AccountWalletBalance","inferedMarketType","isContract","avgPrice","rawTimeInForce","isAscending","isStopOrderType2","openOrder","createUsdcOrder","isTrailingAmountOrder","privatePostV5PositionTradingStop","privatePostV5OrderCreate","isUTA","lowerCaseType","isMarket","isBuy","triggerDirection","isAsending","slLimitPrice","tpLimitPrice","isUta","privatePostV5OrderCreateBatch","retInfo","stopPx","preciseStopPrice","privatePostOptionUsdcOpenapiPrivateV1PlaceOrder","privatePostPerpetualUsdcOpenapiPrivateV1PlaceOrder","editUsdcOrder","privatePostOptionUsdcOpenapiPrivateV1ReplaceOrder","privatePostPerpetualUsdcOpenapiPrivateV1ReplaceOrder","triggerPriceRequest","triggerBy","stopLossRequest","slTriggerBy","takeProfitRequest","tpTriggerBy","privatePostV5OrderAmend","cancelUsdcOrder","privatePostOptionUsdcOpenapiPrivateV1CancelOrder","privatePostPerpetualUsdcOpenapiPrivateV1CancelOrder","privatePostV5OrderCancel","cancelAllUsdcOrders","privatePostOptionUsdcOpenapiPrivateV1CancelAll","privatePostPerpetualUsdcOpenapiPrivateV1CancelAll","baseCoin","privatePostV5OrderCancelAll","fetchUsdcOrders","privatePostOptionUsdcOpenapiPrivateV1QueryOrderHistory","isUsdcSettled","privateGetV5OrderHistory","fetchUsdcOpenOrders","privatePostOptionUsdcOpenapiPrivateV1QueryActiveOrders","settleCoin","privateGetV5OrderRealtime","fetchMyUsdcTrades","privatePostOptionUsdcOpenapiPrivateV1ExecutionList","dataList","privateGetV5ExecutionList","privateGetV5AssetDepositQueryAddress","coin","chainsIndexedById","selectedNetworkId","addressObject","privateGetV5AssetDepositQueryRecord","privateGetV5AssetWithdrawQueryRecord","toAddress","enableUnified","currencyKey","privateGetV5AccountTransactionLog","privateGetV2PrivateWalletFundRecords","referenceId","privatePostV5AssetWithdrawCreate","privateGetV5PositionList","privatePostOptionUsdcOpenapiPrivateV1QueryPosition","fetchUsdcPositions","rawPosition","unrealisedPnl","bustPrice","maintenanceMarginPriceDifference","balancesByAccount","tokenSymbols","allSettled","privateGetAssetV3PrivateTransferSubMemberListQuery","uids","fromAccountTypeExternal","toAccountTypeExternal","privatePostV5AssetTransferUniversalTransfer","privatePostV5AssetTransferInterTransfer","privateGetV5AssetTransferQueryInterTransferList","fromAccountId","toAccountId","accountIds","privateGetV5AccountFeeRate","isOpenapi","isV3UnifiedMargin","isV3Contract","isV5UnifiedAccount","queryEncoded","auth_base","authFull","sortedQuery","extendedQuery","v3PublicGetBrokerageTime","iso","v2PublicGetTime","fetchAccountsV3","fetchAccountsV2","v2PrivateGetAccounts","pagination","accountsResponse","v3PrivateGetBrokerageAccounts","currencyIdV3","typeV3","typeV2","v2PrivatePostAccountsAccountIdAddresses","fetchMySells","prepareAccountRequest","sells","v2PrivateGetAccountsAccountIdSells","fetchMyBuys","buys","v2PrivateGetAccountsAccountIdBuys","fetchTransactionsWithMethod","prepareAccountRequestWithCurrencyCode","amountAndCurrencyObject","totalObject","amountObject","subtotalObject","sizeInQuote","v3Price","v3Cost","v3Amount","v3FeeCost","fetchMarketsV2","fetchCurrenciesFromCache","exchangeRates","dataById","rates","baseIds","quoteCurrency","fetchMarketsV3","v3PrivateGetBrokerageProducts","v3PrivateGetBrokerageTransactionSummary","tradingDisabled","v2PublicGetCurrenciesCrypto","fiatCurrenciesPromise","v2PublicGetCurrencies","exchangeRatesPromise","v2PublicGetExchangeRates","fiatCurrencies","cryptoData","cryptoDataById","fetchTickersV3","fetchTickersV2","fetchTickerV3","fetchTickerV2","v2PublicGetPricesSymbolSpot","v2PublicGetPricesSymbolBuy","v2PublicGetPricesSymbolSell","spotData","askData","bidData","bidAskLast","v3PrivateGetBrokerageProductsProductIdTicker","parseCustomBalance","v3Accounts","hold","starting_after","v2PrivateGetAccountsAccountIdTransactions","parseLedgerEntryStatus","amountInfo","networkInfo","feeInfo","findAccountId","stopDirection","v3PrivatePostBrokerageOrdersPreview","v3PrivatePostBrokerageOrders","errorResponse","errorTitle","orderConfiguration","limitGTC","limitGTD","stopLimitGTC","stopLimitGTD","marketIOC","stopTarget","currencyFee","parseOrderType","timeInForces","v3PrivatePostBrokerageOrdersBatchCancel","v3PrivatePostBrokerageOrdersEditPreview","v3PrivatePostBrokerageOrdersEdit","v3PrivateGetBrokerageOrdersHistoricalOrderId","v3PrivateGetBrokerageOrdersHistoricalBatch","candles300","sinceString","endString","v3PrivateGetBrokerageProductsProductIdCandles","candles","v3PrivateGetBrokerageOrdersHistoricalFills","v3PrivateGetBrokerageProductBook","v2PrivatePostAccountsAccountIdTransactions","createAuthToken","uri","quesPos","isRSA","alg","algoType","signedHash","jwt","isV3","savedPath","authorization","authorizationString","advancedTrade","publicGetProducts","privateGetAccounts","publicGetProductsIdBook","publicGetProductsSparkLines","feeRate","costField","liquidity","makerOrderId","takerOrderId","privateGetFills","publicGetProductsIdTrades","privateGetFees","parsedTimeframeMilliseconds","publicGetProductsIdCandles","doneReason","privateGetOrders","privatePostOrders","privateDeleteOrders","fetchPaymentMethods","privateGetPaymentMethods","afterString","beforeString","referenceAccount","accountsByCurrencyCode","privateGetAccountsIdLedger","privateGetTransfers","account_id","codeInner","privateGetAccountsIdTransfers","processed","privateGetCoinbaseAccounts","privatePostCoinbaseAccountsIdAddresses","privateGetProfiles","what","statusPublicSwapLinearGetApiV2SummaryJson","statusPublicSwapInverseGetApiV2SummaryJson","statusPublicFutureLinearGetApiV2SummaryJson","statusPublicFutureInverseGetApiV2SummaryJson","contractPublicGetHeartbeat","statusPublicSpotGetApiV2SummaryJson","statusData","pageData","contractPublicGetApiV1Timestamp","spotPublicGetV1CommonTimestamp","spotPrivateGetV2ReferenceTransactFeeRate","fetchTradingLimitsById","spotPublicGetV1CommonExchange","parseTradingLimits","allMarkets","fetchMarketsByTypeAndSubType","subKeys","contractPublicGetLinearSwapApiV1SwapContractInfo","contractPublicGetApiV1ContractContractInfo","contractPublicGetSwapApiV1SwapContractInfo","spotPublicGetV1CommonSymbols","maxAmount","costPrecision","minAmount","leverageRatio","superLeverageRatio","hasLeverage","created","createdDate","createdArray","contractPublicGetLinearSwapExMarketDetailMerged","contractPublicGetMarketDetailMerged","contractPublicGetSwapExMarketDetailMerged","spotPublicGetMarketDetailMerged","contractPublicGetLinearSwapExMarketDetailBatchMerged","contractPublicGetMarketDetailBatchMerged","contractPublicGetSwapExMarketDetailBatchMerged","spotPublicGetMarketTickers","marketInner","contractPublicGetLinearSwapExMarketDepth","contractPublicGetMarketDepth","contractPublicGetSwapExMarketDepth","spotPublicGetMarketDepth","typeParts","filledPoints","feeDeductCurrency","fetchSpotOrderTrades","spotPrivateGetV1OrderOrdersOrderIdMatchresults","spotPrivateGetV1OrderMatchresults","contractPrivatePostLinearSwapApiV3SwapMatchresultsExact","contractPrivatePostLinearSwapApiV3SwapCrossMatchresultsExact","contractPrivatePostApiV3ContractMatchresultsExact","contractPrivatePostSwapApiV3SwapMatchresultsExact","contractPublicGetMarketHistoryTrade","contractPublicGetLinearSwapExMarketHistoryTrade","contractPublicGetSwapExMarketHistoryTrade","spotPublicGetMarketHistoryTrade","contractPublicGetIndexMarketHistoryMarkPriceKline","contractPublicGetIndexMarketHistoryIndex","contractPublicGetMarketHistoryKline","contractPublicGetIndexMarketHistoryLinearSwapMarkPriceKline","contractPublicGetIndexMarketHistoryLinearSwapPremiumIndexKline","contractPublicGetLinearSwapExMarketHistoryKline","contractPublicGetIndexMarketHistorySwapMarkPriceKline","contractPublicGetIndexMarketHistorySwapPremiumIndexKline","contractPublicGetSwapExMarketHistoryKline","spotPublicGetMarketHistoryKline","spotPublicGetMarketHistoryCandles","spotPrivateGetV1AccountAccounts","typeId","fetchAccountIdByType","typeFromAccount","defaultAccount","generateMethodsMapping","flatCurrencies","mappedMethods","cedeMapping","mn","flattenEcid","methodWithCurency","methodInversedWithCurrency","spotPublicGetV2ReferenceCurrencies","methodsMapping","currencyActive","minWithdraw","maxWithdraw","chainEntry","uniqueChainId","withdrawEnabled","depositEnabled","safeCode","networkIdToEcid","ecidToNetworkId","uniqueNetworkIds","spotPrivateGetV1MarginAccountsBalance","spotPrivateGetV1CrossMarginAccountsBalance","spotPrivateGetV1AccountAccountsAccountIdBalance","contractPrivateGetLinearSwapApiV3UnifiedAccountInfo","contractPrivatePostLinearSwapApiV1SwapAccountInfo","contractPrivatePostLinearSwapApiV1SwapCrossAccountInfo","contractPrivatePostApiV1ContractAccountInfo","contractPrivatePostSwapApiV1SwapAccountInfo","parseMarginBalanceHelper","marginAsset","isolated_swap","subBalance","accountsByCode","spotPrivateGetV1OrderOrdersGetClientOrder","spotPrivateGetV1OrderOrdersOrderId","contractPrivatePostLinearSwapApiV1SwapOrderInfo","contractPrivatePostLinearSwapApiV1SwapCrossOrderInfo","contractPrivatePostApiV1ContractOrderInfo","contractPrivatePostSwapApiV1SwapOrderInfo","fetchSpotOrdersByStates","spotPrivateGetV1OrderOrders","spotPrivateGetV1OrderHistory","fetchSpotOrders","fetchClosedSpotOrders","fetchContractOrders","stopLossTakeProfit","contractPrivatePostLinearSwapApiV1SwapTriggerHisorders","contractPrivatePostLinearSwapApiV1SwapTpslHisorders","contractPrivatePostLinearSwapApiV1SwapTrackHisorders","contractPrivatePostLinearSwapApiV3SwapHisorders","contractPrivatePostLinearSwapApiV1SwapCrossTriggerHisorders","contractPrivatePostLinearSwapApiV1SwapCrossTpslHisorders","contractPrivatePostLinearSwapApiV1SwapCrossTrackHisorders","contractPrivatePostLinearSwapApiV3SwapCrossHisorders","contractPrivatePostSwapApiV1SwapTriggerHisorders","contractPrivatePostSwapApiV1SwapTpslHisorders","contractPrivatePostSwapApiV1SwapTrackHisorders","contractPrivatePostSwapApiV3SwapHisorders","contractPrivatePostApiV1ContractTriggerHisorders","contractPrivatePostApiV1ContractTpslHisorders","contractPrivatePostApiV1ContractTrackHisorders","contractPrivatePostApiV3ContractHisorders","fetchClosedContractOrders","spotPrivateGetV1OrderOpenOrders","contractPrivatePostLinearSwapApiV1SwapTriggerOpenorders","contractPrivatePostLinearSwapApiV1SwapTpslOpenorders","contractPrivatePostLinearSwapApiV1SwapTrackOpenorders","contractPrivatePostLinearSwapApiV1SwapOpenorders","contractPrivatePostLinearSwapApiV1SwapCrossTriggerOpenorders","contractPrivatePostLinearSwapApiV1SwapCrossTpslOpenorders","contractPrivatePostLinearSwapApiV1SwapCrossTrackOpenorders","contractPrivatePostLinearSwapApiV1SwapCrossOpenorders","contractPrivatePostSwapApiV1SwapTriggerOpenorders","contractPrivatePostSwapApiV1SwapTpslOpenorders","contractPrivatePostSwapApiV1SwapTrackOpenorders","contractPrivatePostSwapApiV1SwapOpenorders","contractPrivatePostApiV1ContractTriggerOpenorders","contractPrivatePostApiV1ContractTpslOpenorders","contractPrivatePostApiV1ContractTrackOpenorders","contractPrivatePostApiV1ContractOpenorders","rejectedCreateOrders","reduceOnlyInteger","defaultOperator","stopOperator","createContractOrderRequest","trailingPercentString","spotPrivatePostV1OrderOrdersPlace","contractRequest","contractPrivatePostLinearSwapApiV1SwapTriggerOrder","contractPrivatePostLinearSwapApiV1SwapTpslOrder","contractPrivatePostLinearSwapApiV1SwapTrackOrder","contractPrivatePostLinearSwapApiV1SwapOrder","contractPrivatePostLinearSwapApiV1SwapCrossTriggerOrder","contractPrivatePostLinearSwapApiV1SwapCrossTpslOrder","contractPrivatePostLinearSwapApiV1SwapCrossTrackOrder","contractPrivatePostLinearSwapApiV1SwapCrossOrder","contractPrivatePostSwapApiV1SwapTriggerOrder","contractPrivatePostSwapApiV1SwapTpslOrder","contractPrivatePostSwapApiV1SwapTrackOrder","contractPrivatePostSwapApiV1SwapOrder","contractPrivatePostApiV1ContractTriggerOrder","contractPrivatePostApiV1ContractTpslOrder","contractPrivatePostApiV1ContractTrackOrder","contractPrivatePostApiV1ContractOrder","privatePostOrderBatchOrders","contractPrivatePostLinearSwapApiV1SwapBatchorder","contractPrivatePostLinearSwapApiV1SwapCrossBatchorder","contractPrivatePostSwapApiV1SwapBatchorder","contractPrivatePostApiV1ContractBatchorder","spotPrivatePostV1OrderOrdersOrderIdSubmitcancel","spotPrivatePostV1OrderOrdersSubmitCancelClientOrder","contractPrivatePostLinearSwapApiV1SwapTriggerCancel","contractPrivatePostLinearSwapApiV1SwapTpslCancel","contractPrivatePostLinearSwapApiV1SwapTrackCancel","contractPrivatePostLinearSwapApiV1SwapCancel","contractPrivatePostLinearSwapApiV1SwapCrossTriggerCancel","contractPrivatePostLinearSwapApiV1SwapCrossTpslCancel","contractPrivatePostLinearSwapApiV1SwapCrossTrackCancel","contractPrivatePostLinearSwapApiV1SwapCrossCancel","contractPrivatePostSwapApiV1SwapTriggerCancel","contractPrivatePostSwapApiV1SwapTpslCancel","contractPrivatePostSwapApiV1SwapTrackCancel","contractPrivatePostSwapApiV1SwapCancel","contractPrivatePostApiV1ContractTriggerCancel","contractPrivatePostApiV1ContractTpslCancel","contractPrivatePostApiV1ContractTrackCancel","contractPrivatePostApiV1ContractCancel","clientOrderIds","spotPrivatePostV1OrderOrdersBatchcancel","spotPrivatePostV1OrderOrdersBatchCancelOpenOrders","contractPrivatePostLinearSwapApiV1SwapTriggerCancelall","contractPrivatePostLinearSwapApiV1SwapTpslCancelall","contractPrivatePostLinearSwapApiV1SwapTrackCancelall","contractPrivatePostLinearSwapApiV1SwapCancelall","contractPrivatePostLinearSwapApiV1SwapCrossTriggerCancelall","contractPrivatePostLinearSwapApiV1SwapCrossTpslCancelall","contractPrivatePostLinearSwapApiV1SwapCrossTrackCancelall","contractPrivatePostLinearSwapApiV1SwapCrossCancelall","contractPrivatePostSwapApiV1SwapTriggerCancelall","contractPrivatePostSwapApiV1SwapTpslCancelall","contractPrivatePostSwapApiV1SwapTrackCancelall","contractPrivatePostSwapApiV1SwapCancelall","contractPrivatePostApiV1ContractTriggerCancelall","contractPrivatePostApiV1ContractTpslCancelall","contractPrivatePostApiV1ContractTrackCancelall","contractPrivatePostApiV1ContractCancelall","spotPrivateGetV2AccountDepositAddress","paramsOmited","fetchWithdrawAddresses","spotPrivateGetV2AccountWithdrawAddress","allAddresses","noteMatch","networkMatch","spotPrivateGetV1QueryDepositWithdraw","txHash","targetNetwork","amountSubtractedString","amountSubtracted","spotPrivatePostV1DwWithdrawApiCreate","privateGetAccountAccountsSubUid","accountList","v2PrivateGetSubUserUserList","subUserId","privatePostSubuserTransfer","toCross","fromCross","spotPrivatePostV1FuturesTransfer","privatePostCrossMarginTransferIn","privatePostCrossMarginTransferOut","privatePostDwTransferInMargin","privatePostDwTransferOutMargin","v2PrivatePostAccountTransfer","sortedRequest","access","levelOneNestedPath","levelTwoNestedPath","hostnames","lastPrice","faceValue","intialMarginPercentage","adjustmentFactor","contractPrivatePostLinearSwapApiV1SwapPositionInfo","contractPrivatePostLinearSwapApiV1SwapCrossPositionInfo","contractPrivatePostApiV1ContractPositionInfo","contractPrivatePostSwapApiV1SwapPositionInfo","contractPrivatePostLinearSwapApiV1SwapAccountPositionInfo","contractPrivatePostLinearSwapApiV1SwapCrossAccountPositionInfo","contractPrivatePostApiV1ContractAccountPositionInfo","contractPrivatePostSwapApiV1SwapAccountPositionInfo","omitted","transferType","spotPrivateGetV2AccountLedger","withdrawFeeType","withdrawResult","publicGetAssetPairs","darkpool","altname","makerFees","firstMakerFee","firstMakerFeeRate","takerFees","firstTakerFee","firstTakerFeeRate","leverageBuy","leverageBuyLength","precisionPrice","appendInactiveMarkets","publicGetSystemStatus","fetchWithdrawalMethods","withdrawalNetworks","withdrawNetworkResponse","privatePostWithdrawMethods","networksPerCurrency","networkInformation","assetsResponse","publicGetAssets","currenciesNetworks","networkInformations","privatePostTradeVolume","privatePostWithdrawAddresses","whitelistedAddresses","methodToEcid","methods","greedyMethod","withdrawalNetwork","greedyHardcodedMethod","symbolMakerFee","symbolTakerFee","marketInfo","wsName","publicGetOHLC","privatePostLedgers","ledger","fetchLedgerEntriesByIds","privatePostQueryLedgers","foundMarket","findMarketByAltnameOrId","getDelistedMarketById","publicGetTrades","lastTrade","lastTradeId","amountAllocated","totalRewarded","totalAmountAllocated","totalAmount","totalBalance","credit","creditUsed","holdTrade","privatePostEarnAllocations","privatePostBalanceEx","privatePostAddOrder","baseIdEnd","quoteIdStart","quoteIdEnd","orderDescription","rawTrade","trailingLimitAmount","trailingActivationPriceType","trailingAmountString","trailingLimitAmountString","closePrice","closePrice2","privatePostEditOrder","privatePostQueryOrders","orderTrades","tradeIds","orderTrade","batchSize","numTradeIds","numBatches","requestIds","privatePostQueryTrades","tradesFilteredBySymbol","fetchOrdersByIds","orderIds","privatePostTradesHistory","privatePostCancelOrderBatch","privatePostCancelAll","privatePostOpenOrders","privatePostClosedOrders","statusProp","parseTransactionsByType","privatePostDepositStatus","privatePostWithdrawStatus","rawWithdrawals","fetchDepositMethods","privatePostDepositMethods","depositMethods","report","targetedDepositMethods","depoMethod","targetedDepositMethod","depositMethod","privatePostDepositAddresses","firstResult","privatePostWithdraw","privatePostOpenPositions","privatePostWalletTransfer","isCancelOrderBatch","binhash","publicGetTimestamp","publicGetStatus","publicGetSymbols","tickersResponse","publicGetMarketAllTickers","tickersData","tickersByMarketId","makerFeeRate","takerFeeRate","makerCoefficient","takerCoefficient","currenciesResponse","currenciesData","additionalResponse","additionalData","additionalDataGrouped","extraChainsData","rawPrecision","chainExtraData","withdrawalMinSize","privateGetWithdrawalsQuotas","publicGetMarketStats","endAt","publicGetMarketCandles","privateGetDepositAddresses","level","privateGetMarketOrderbookLevel2","publicGetMarketOrderbookLevelLevelLimit","handleTriggerPrices","testOrder","isHf","tradeType","marginResult","isMarginOrder","privatePostMarginOrderTest","privatePostOrdersTest","privatePostHfOrders","privatePostStopOrder","privatePostMarginOrder","privatePostHfOrdersMulti","privatePostOrdersMulti","privatePostHfOrdersAlter","privateDeleteStopOrderCancelOrderByClientOid","privateDeleteHfOrdersClientOrderClientOid","privateDeleteOrderClientOrderClientOid","privateDeleteStopOrderOrderId","privateDeleteHfOrdersOrderId","privateDeleteOrdersOrderId","privateDeleteStopOrderCancel","privateDeleteHfOrdersCancelAll","privateDeleteHfOrders","lowercaseStatus","privateGetStopOrder","privateGetHfOrdersActive","privateGetHfOrdersDone","responseData","privateGetStopOrderQueryOrderByClientOid","privateGetHfOrdersClientOrderClientOid","privateGetOrderClientOrderClientOid","privateGetStopOrderOrderId","privateGetHfOrdersOrderId","privateGetOrdersOrderId","cancelExist","stopTriggered","responseStatus","parseResponseData","privateGetHfFills","privateGetLimitFills","publicGetMarketHistories","privateGetTradeFees","truncatedAmount","includeFee","privatePostWithdrawals","txidParts","privateGetHistDeposits","privateGetDeposits","privateGetHistWithdrawals","privateGetWithdrawals","privateGetIsolatedAccounts","privateGetMarginAccount","futureCurrencies","futureResult","futureCurrency","futureRequest","futureResponse","futuresPrivateGetAccountOverview","futureData","futureCode","codeInner2","totalPage","nextPageRequest","nextPage","parseSubAccountTypeBalances","subUserBalanceData","subUser","mainAccounts","tradeAccounts","marginAccounts","tradeHFAccounts","subAccountTypeExt","accountTypeExt","privatePostAccountsSubTransfer","futuresPrivatePostTransferOut","privatePostAccountsInnerTransfer","accountFromRaw","accountToRaw","accountFrom","accountTo","bizType","tradeId","exc","privateGetHfMarginAccountLedgers","privateGetHfAccountsLedgers","privateGetAccountsLedgers","apiVersions","methodVersions","defaultVersion","parseBorrowRateHistory","borrowRate","parseBorrowRate","timestampId","endpart","isFuturePrivate","apiKeyVersion","passphrase","partner","partnerId","partnerSecret","partnerPayload","partnerSignature","spotPublicGetPing","contractPublicGetPing","spotPublicGetTime","spotPrivateGetCapitalConfigGetall","currencyWithdrawMin","currencyWithdrawMax","withdrawMin","withdrawMax","networkKeysLength","swapMarket","fetchSwapMarkets","spotPublicGetExchangeInfo","isSpotTradingAllowed","makerCommission","takerCommission","maxQuoteAmount","contractPublicGetDetail","spotPublicGetDepth","spotTimestamp","contractPublicGetDepthSymbol","spotPublicGetAggTrades","spotPublicGetHistoricalTrades","spotPublicGetTrades","contractPublicGetDealsSymbol","feeAsset","syntheticTradeId","timeframeValue","spotPublicGetKlines","contractPublicGetKlineSymbol","contractPublicGetKlineIndexPriceSymbol","contractPublicGetKlineFairPriceSymbol","isSingularMarket","firstSymbol","spotPublicGetTicker24hr","contractPublicGetTicker","changePcnt","changeValue","prevClose","createSpotOrder","createSwapOrder","orderSide","spotPrivatePostOrder","unavailableContracts","openType","contractPrivatePostPlanorderPlace","contractPrivatePostOrderSubmit","spotPrivatePostBatchOrders","spotPrivateGetMarginOrder","spotPrivateGetOrder","contractPrivateGetOrderGetOrderId","spotPrivateGetMarginAllOrders","spotPrivateGetAllOrders","ordersOfRegular","ordersOfTrigger","contractPrivateGetOrderListHistoryOrders","contractPrivateGetPlanorderListOrders","contractPrivateGetOrderBatchQuery","spotPrivateGetMarginOpenOrders","spotPrivateGetOpenOrders","fetchOrdersByState","requestInner","spotPrivateDeleteMarginOrder","spotPrivateDeleteOrder","contractPrivatePostOrderCancel","contractPrivatePostPlanorderCancel","errorMsg","spotPrivateDeleteMarginOpenOrders","spotPrivateDeleteOpenOrders","contractPrivatePostOrderCancelAll","contractPrivatePostPlanorderCancelAll","feeSum","parseOrderTimeInForce","fetchAccountHelper","spotPrivateGetAccount","contractPrivateGetAccountAssets","spotPrivateGetMarginIsolatedAccount","spotPrivateGetMyTrades","contractPrivateGetOrderListOrderDeals","contractPrivateGetOrderDealDetailsOrderId","spotPrivateGetCapitalDepositAddress","addressStructures","spotPrivatePostCapitalDepositAddress","defaultNetworkForCurrency","rawNetwork","spotPrivateGetCapitalDepositHisrec","spotPrivateGetCapitalWithdrawHistory","currencyWithNetwork","contractPrivateGetPositionOpenPositions","marginType","fetchTransfer","spot2PrivateGetAssetInternalTransferInfo","spot2PrivateGetAssetInternalTransferRecord","contractPrivateGetAccountTransferRecord","spotPrivateGetSubAccountAsset","spotPrivateGetSubAccountList","spotPrivatePostCapitalSubAccountUniversalTransfer","spotPrivatePostCapitalTransfer","parseAccountId","spotPrivatePostCapitalWithdrawApply","parseTransactionFee","section","paramsEncoded","responseCode","instType","convertToInstrumentType","exchangeTypes","publicGetPublicTime","privateGetAccountConfig","strikePrice","maxLeverage","maxSpotCost","optionsUnderlying","publicGetPublicInstruments","promisesResult","dataResponse","isSandboxMode","privateGetAssetCurrencies","dataByCurrencyId","maxPrecision","canInternal","chainPart","firstChain","publicGetMarketBooksFull","publicGetMarketBooks","publicGetMarketTicker","fetchTickersByType","defaultUnderlying","publicGetMarketTickers","feeCostSigned","publicGetPublicOptionTrades","publicGetMarketTrades","publicGetMarketHistoryTrades","timezone","bar","durationInMilliseconds","isHistoryCandles","publicGetMarketHistoryMarkPriceCandles","publicGetMarketMarkPriceCandles","publicGetMarketHistoryIndexCandles","publicGetMarketIndexCandles","publicGetMarketHistoryCandles","parseBalanceByType","parseFundingBalance","parseSavingsBalance","parseTradingBalance","eq","availEq","privateGetAccountTradeFee","privateGetAssetBalances","privateGetFinanceSavingsBalance","privateGetAccountBalance","tpOrdPx","tpTriggerPxType","slOrdPx","slTriggerPxType","stopLossDefined","takeProfitDefined","defaultCurrency","tradeMode","positionSide","conditional","defaultTgtCcy","tgtCcy","convertedTrailingPercent","stopLossOrderType","stopLossLimitOrderType","stopLossTriggerPriceType","takeProfitOrderType","takeProfitLimitOrderType","takeProfitTriggerPriceType","requestOrdType","privatePostTradeOrder","privatePostTradeOrderAlgo","privatePostTradeBatchOrders","editOrderRequest","isAlgoOrder","privatePostTradeAmendAlgos","privatePostTradeAmendOrder","orderInner","privatePostTradeCancelOrder","parseIds","algoIds","privatePostTradeCancelAlgos","privatePostTradeCancelBatchOrders","ordersData","scode","privateGetTradeOrderAlgo","privateGetTradeOrder","algoOrderTypes","ordType","privateGetTradeOrdersAlgoPending","privateGetTradeOrdersPending","algoId","privateGetTradeOrdersAlgoHistory","privateGetTradeOrdersHistory","privateGetTradeOrdersHistoryArchive","privateGetTradeFillsHistory","privateGetAccountBillsArchive","privateGetAssetBills","privateGetAccountBills","addrEx","networkData","privateGetAssetDepositAddress","filtered","privatePostAssetWithdrawal","privateGetAssetDepositHistory","privateGetAssetWithdrawalHistory","withdrawalId","addressFrom","tagTo","privateGetAccountPositions","privateGetAccountPositionsHistory","posCcy","markPriceString","tradingWalletBalancesRes","privateGetAssetSubaccountBalances","tradingBalances","fundingWalletBalancesRes","privateGetAccountSubaccountBalances","privateGetUsersSubaccountList","subAcct","privatePostAssetTransfer","rawTransfer","balanceChange","privateGetAssetTransferState","urlencodedQuery","chainSplit","depositResult","depositWithdrawCodes","_assertThisInitialized","ReferenceError","_extends","_setPrototypeOf","_inheritsLoose","_objectWithoutPropertiesLoose","focusManager","onSubscribe","setEventListener","onUnsubscribe","hasListeners","setup","isFocused","Mutation","mutationId","mutationCache","failureCount","failureReason","variables","submittedAt","scheduleGc","updateGcTime","addObserver","clearGcTimeout","notify","mutation","removeObserver","optionalRemove","continue","execute","onFail","onContinue","retryDelay","networkMode","canRun","restored","canStart","onMutate","onSettled","runNext","reducer","batch","onMutationUpdate","getDefaultState","notifyManager","notifyFn","batchNotifyFn","scheduleFn","schedule","originalQueue","batchCalls","setNotifyFunction","setBatchNotifyFunction","setScheduler","createNotifyManager","onlineManager","onlineListener","offlineListener","setOnline","online","isOnline","Query","observers","queryHash","initialData","hasData","initialDataUpdatedAt","dataUpdateCount","dataUpdatedAt","errorUpdateCount","errorUpdatedAt","fetchFailureCount","fetchFailureReason","fetchMeta","isInvalidated","setData","newData","updatedAt","manual","setStateOptions","getObserversCount","isStale","getCurrentResult","isStaleByTime","shouldFetchOnWindowFocus","cancelRefetch","shouldFetchOnReconnect","cancelRetry","invalidate","fetchOptions","continueRetry","abortController","addSignalProperty","fetchFn","queryFnContext","persister","behavior","onFetch","isFetchingOptimistic","initialPromise","fetchState","onQueryUpdate","QueryCache","build","defaultQueryOptions","getQueryDefaults","queryInMap","getAll","defaultedFilters","findAll","MutationCache","defaultMutationOptions","scopeFor","mutations","firstPendingMutation","foundMutation","flat","resumePausedMutations","pausedMutations","infiniteQueryBehavior","fetchMore","oldPages","oldPageParams","pageParams","fetchPage","pageParam","aborted","oldData","getPreviousPageParam","getNextPageParam","initialPageParam","remainingPages","QueryClient","queryCache","subscribe","isMutating","getQueryData","ensureQueryData","cachedData","fetchQuery","defaultedOptions","revalidateIfStale","prefetchQuery","getQueriesData","setQueryData","prevData","setQueriesData","getQueryState","removeQueries","resetQueries","refetchFilters","refetchQueries","cancelQueries","cancelOptions","defaultedCancelOptions","invalidateQueries","refetchType","throwOnError","fetchInfiniteQuery","prefetchInfiniteQuery","getQueryCache","getMutationCache","setDefaultOptions","setQueryDefaults","queryDefault","setMutationDefaults","mutationKey","getMutationDefaults","_defaulted","refetchOnReconnect","suspense","QueryObserver","bindMethods","shouldFetchOnMount","updateResult","shouldFetchOn","notifyOptions","prevOptions","prevQuery","shouldFetchOptionally","nextRefetchInterval","getOptimisticResult","createResult","optimisticResult","shouldAssignObserverCurrentProperties","trackResult","onPropTracked","trackedResult","trackProp","getCurrentQuery","fetchOptimistic","nextInterval","refetchIntervalInBackground","prevResult","prevResultState","prevResultOptions","queryInitialState","isPlaceholderData","_optimisticResults","fetchOnMount","fetchOptionally","selectError","placeholderData","isSuccess","isInitialLoading","isFetched","isFetchedAfterMount","isRefetching","isLoadingError","isRefetchError","nextResult","defaultNotifyOptions","notifyOnChangeProps","notifyOnChangePropsValue","includedProps","typedKey","shouldNotifyListeners","retryOnMount","shouldLoadOnMount","refetchOnMount","Removable","newGcTime","defaultRetryDelay","canFetch","CancelledError","isCancelledError","createRetryer","continueFn","promiseResolve","promiseReject","isRetryCancelled","isResolved","outerResolve","outerReject","canContinue","continueResolve","promiseOrValue","shouldRetry","Subscribable","isServer","functionalUpdate","isValidTimeout","timeUntilStale","resolveStaleTime","resolveEnabled","matchQuery","predicate","stale","hashQueryKeyByOptions","partialMatchKey","matchMutation","hashKey","queryKeyHashFn","replaceEqualDeep","isPlainArray","aItems","aSize","bItems","bSize","equalItems","shallowEqualObjects","hasObjectPrototype","prot","replaceData","structuralSharing","addToEnd","newItems","addToStart","skipToken","ensureQueryFn","QueryClientContext","useQueryClient","queryClient","createValue","isReset","clearReset","QueryErrorResetBoundaryContext","useQueryErrorResetBoundary","ensurePreventErrorBoundaryRetry","errorResetBoundary","useClearResetErrorBoundary","getHasError","IsRestoringContext","useIsRestoring","ensureSuspenseTimers","willFetch","isRestoring","shouldSuspend","mutate","isIdle","onStoreChange","mutateOptions","Observer","_experimental_beforeQuery","unsubscribe","_experimental_afterQuery","useBaseQuery","shouldThrowError","throwError","createStoreImpl","previousState","getState","getInitialState","initialState","createStore","didWarnAboutEqualityFn","identity","createImpl","useBoundStore","equalityFn","getServerState","useStore","subscribeWithSelector","origSubscribe","optListener","currentSlice","nextSlice","previousSlice","fireImmediately","createJSONStorage","getStorage","storage","getItem","str2","reviver","removeItem","toThenable","onFulfilled","_onRejected","_onFulfilled","onRejected","baseOptions","partialize","persistedState","currentState","hasHydrated","hydrationListeners","finishHydrationListeners","thenableSerialize","errorInSync","thenable","serializedValue","savedSetState","configResult","stateFromStorage","postRehydrationCallback","onRehydrateStorage","storageValue","deserializedStorageValue","migrate","migratedState","_a2","newOptions","clearStorage","getOptions","rehydrate","onHydrate","onFinishHydration","oldImpl","skipHydration","newImpl","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","getter","leafPrototypes","getProto","locals","Header","updateNestedObjectFieldValue","pathArray","removeIfUndefined","OPTIONAL_MARKER","ARRAY_MARKER","STORE_API_METHODS","CONNECTION_SUITE","actionName","PUBLIC_READ_SUITE","toDeposit","toWithdraw","apiParamsMapping","PRIVATE_READ_SUITE","vaultId","pageCount","pageIndex","WRITE_SUITE","WIDGET_CONFIGS","lockNetwork","themeMode","exchangeIds","clientTxId","isInternalTransfer","getDefaultValue","defaultValuesByTypes","castValue","castedValue","valueAsNumber","convertFormParamsToApiParams","methodParams","castedParams","pathMapping","constructNestedObjectFromFlatObject","getInitialFormState","paramState","getInitialFormStateForAllMethods","getFormValue","apiParamMapping","validateType","checkStateValidity","methodDefinition","forms","useParamsForms","togglePersist","toggleMode","setForm","setFormValue","newForm","resetForms","prefillValueForAllForms","newForms","oldState","oldParamsFormState","isStateValid","cherryPickState","useCedeStore","setVaults","setProvider","getMenuItemUtilityClass","MenuItemRoot","backgroundClip","dividerClasses","menuItemRef","AccountIdsField","AccountOrVaultIdField","getFormGroupUtilityClass","FormGroupRoot","row","getSwitchBaseUtilityClass","SwitchBaseRoot","SwitchBaseInput","SwitchBase","checkedProp","checkedIcon","setCheckedState","hasLabelFor","newChecked","getSwitchUtilityClass","SwitchRoot","thumb","switchBase","SwitchSwitchBase","Switch","defaultColor","defaultDisabledColor","switchTrackDisabled","SwitchTrack","onBackground","switchTrack","SwitchThumb","BooleanField","SelectField","displayType","getSafeStringValue","UserFieldGroup","filteredAccounts","safeJsonParse","JsonField","setContent","updatedContent","ResultField","ActionCard","setResult","toLocaleUpperCase","getGridUtilityClass","GRID_SIZES","gridClasses","getOffset","extractZeroValueBreakpointKeys","nonZeroKey","sortedBreakpointKeysByValue","GridRoot","zeroMinWidth","spacingStyles","resolveSpacingStyles","breakpointsStyles","directionValues","rowSpacing","rowSpacingValues","zeroValueBreakpointKeys","_zeroValueBreakpointK","columnSpacing","columnSpacingValues","_zeroValueBreakpointK2","columnsBreakpointValues","columnValue","spacingClasses","resolveSpacingClasses","breakpointsClasses","columnsProp","columnSpacingProp","rowSpacingProp","columnsContext","otherFiltered","CheckConnection","joinChildren","StackRoot","spacingValues","previousDirectionValue","Stack","AntSwitch","Settings","allowPersistence","togglePersistence","SuiteSection","startSlot","setOpenModal","ft","Fs","Gs","global","Ho","Rr","nn","Ft","Dr","Lr","zo","Tt","Ot","gn","bt","pn","nt","ks","Es","Qt","Ps","ln","_r","jf","Gt","zt","us","ut","Os","rn","$t","Zt","Ms","Wo","qn","Cs","dr","Yo","Gn","Ko","Xo","$o","Ls","Zo","base64url","base58xmr","_c","wt","Wt","Kt","ot","ur","Br","Qo","bitGet","bitSet","numberToHexUnpadded","numberToVarBytesBE","yl","Vr","Ut","zs","Jo","Nl","Pl","Ws","jl","_l","zl","Ul","Vl","Kl","Xl","Zl","Ql","Jl","os","jr","Fr","qt","eo","Ys","Us","yp","hs","Hs","io","wp","bp","Sp","Tp","Ap","st","Ip","Ge","Mp","Op","Cp","so","no","vp","Np","Ur","ro","_p","Lp","vt","Dp","Pp","Bp","Rp","Ep","eu","Vp","Ks","ao","jp","qp","Gp","oo","Hp","tu","lr","zn","iu","su","an","$p","zp","Zp","$s","du","cu","Qp","ho","uu","fu","hu","lu","Yt","gu","Zs","yu","wu","dt","Vt","Rt","Wn","HIGH","LOW","bu","Su","mo","Ln","fetchOHLCVWs","es","yo","Pt","wo","Tu","Xt","Yn","bo","Kn","gr","It","So","To","it","Au","Lt","Xn","wn","bn","Sn","Tn","Ds","Rs","An","Gr","Bs","e0","n0","a0","o0","d0","c0","f0","h0","l0","p0","g0","m0","w0","b0","S0","T0","A0","I0","O0","M0","lT","C0","x0","v0","k0","E0","N0","P0","_0","L0","D0","R0","B0","V0","j0","F0","U0","q0","G0","z0","H0","Y0","K0","X0","Z0","Q0","J0","em","tm","im","nm","rm","om","dm","cm","fm","hm","lm","gm","mm","ym","wm","Sm","Tm","Am","Im","Om","Mm","zr","Hr","Cm","xm","ss","chrome39","chrome100","countries","certified","pro","publicAPI","privateAPI","CORS","logo","www","tierBased","funding","Origin","apiBackup","ERC20","TRX","TRC20","CRO","CRC20","dept","previousClose","limitsLoaded","createMarketSellOrderRequiresPrice","vm","$n","Nm","In","Pm","_m","Dm","On","Bm","Rm","yr","kt","Fm","jm","Um","Dn","qm","Vm","Gm","zm","Ou","Zn","Mn","Mu","ly","wr","gy","yy","Ss","wy","Jt","Mt","Cn","Io","Sy","Qs","Iy","Qn","Oy","Cd","My","Cy","Cu","xu","Oo","Mo","at","vu","Ty","Vs","Wr","Ay","xy","vy","ky","Ny","kp","Py","Ey","Yr","At","Ly","Ry","Ed","By","Kr","jy","Uy","qy","ku","zy","Wy","Ky","$y","Qy","ew","Eu","delivery","sub_accounts","earn","private","withdrawals","portfolio","referral","discount","currency_chains","currency_pairs","order_book","candlesticks","funding_book","flash_swap","expirations","settlements","deposit_address","deposits","sub_account_transfers","withdraw_status","sub_account_balances","sub_account_margin_balances","sub_account_futures_balances","sub_account_cross_margin_balances","saved_address","total_balance","sub_account_to_sub_account","account_mode","borrowable","transferable","loans","loan_records","interest_records","batch_fee","account_book","open_orders","my_trades","price_orders","batch_orders","cross_liquidate_orders","cancel_batch_orders","countdown_cancel_all","amend_batch_orders","funding_accounts","auto_repay","merged_loans","my_settlements","position_close","stp_groups","CHZ","KSM","DOT","MANTA","CHZ2","DOTSM","GTEVM","KSMSM","MANTAETH","GTC","IOC","PO","POC","FOK","cross_margin","settlementCurrencies","tiers","INVALID_PARAM_VALUE","INVALID_PROTOCOL","INVALID_ARGUMENT","INVALID_REQUEST_BODY","MISSING_REQUIRED_PARAM","BAD_REQUEST","INVALID_CONTENT_TYPE","NOT_ACCEPTABLE","METHOD_NOT_ALLOWED","INVALID_KEY","IP_FORBIDDEN","READ_ONLY","INVALID_SIGNATURE","MISSING_REQUIRED_HEADER","REQUEST_EXPIRED","ACCOUNT_LOCKED","FORBIDDEN","SUB_ACCOUNT_NOT_FOUND","SUB_ACCOUNT_LOCKED","MARGIN_BALANCE_EXCEPTION","MARGIN_TRANSFER_FAILED","TOO_MUCH_FUTURES_AVAILABLE","FUTURES_BALANCE_NOT_ENOUGH","ACCOUNT_EXCEPTION","SUB_ACCOUNT_TRANSFER_FAILED","ADDRESS_NOT_USED","TOO_FAST","WITHDRAWAL_OVER_LIMIT","API_WITHDRAW_DISABLED","INVALID_WITHDRAW_ID","INVALID_WITHDRAW_CANCEL_STATUS","INVALID_PRECISION","INVALID_CURRENCY","INVALID_CURRENCY_PAIR","POC_FILL_IMMEDIATELY","CLIENT_ID_NOT_FOUND","ORDER_CLOSED","ORDER_CANCELLED","QUANTITY_NOT_ENOUGH","BALANCE_NOT_ENOUGH","MARGIN_NOT_SUPPORTED","MARGIN_BALANCE_NOT_ENOUGH","AMOUNT_TOO_LITTLE","AMOUNT_TOO_MUCH","REPEATED_CREATION","LOAN_NOT_FOUND","LOAN_RECORD_NOT_FOUND","NO_MATCHED_LOAN","NOT_MERGEABLE","NO_CHANGE","REPAY_TOO_MUCH","TOO_MANY_CURRENCY_PAIRS","TOO_MANY_ORDERS","TOO_MANY_REQUESTS","MIXED_ACCOUNT_TYPE","AUTO_BORROW_TOO_MUCH","TRADE_RESTRICTED","USER_NOT_FOUND","CONTRACT_NO_COUNTER","CONTRACT_NOT_FOUND","RISK_LIMIT_EXCEEDED","INSUFFICIENT_AVAILABLE","LIQUIDATE_IMMEDIATELY","LEVERAGE_TOO_HIGH","LEVERAGE_TOO_LOW","ORDER_NOT_OWNED","ORDER_FINISHED","POSITION_CROSS_MARGIN","POSITION_IN_LIQUIDATION","POSITION_IN_CLOSE","POSITION_EMPTY","REMOVE_TOO_MUCH","RISK_LIMIT_NOT_MULTIPLE","RISK_LIMIT_TOO_HIGH","RISK_LIMIT_TOO_lOW","PRICE_TOO_DEVIATED","SIZE_TOO_LARGE","SIZE_TOO_SMALL","PRICE_OVER_LIQUIDATION","PRICE_OVER_BANKRUPT","ORDER_POC_IMMEDIATE","INCREASE_POSITION","CONTRACT_IN_DELISTING","INTERNAL","SERVER_ERROR","TOO_BUSY","CROSS_ACCOUNT_NOT_FOUND","RISK_LIMIT_TOO_LOW","AUTO_TRIGGER_PRICE_LESS_LAST","AUTO_TRIGGER_PRICE_GREATE_LAST","POSITION_HOLDING","USER_LOAN_EXCEEDED","currency_pair","lowerCaseCurrencyId","with_id","order_id","PEND","REQUEST","DMOVE","MANUAL","VERIFY","PROCES","EXTPEND","SPLITPEND","CANCEL","FAIL","INVALID","DONE","BCODE","tagFrom","price_type","reduce_only","tif","time_in_force","_new","liquidated","failed","expired","sub_uid","sub_account","sub_account_type","clientOid","publicApiKey","KEY","Timestamp","SIGN","sub_account_transfer","margin_in","margin_out","margin_funding_in","margin_funding_out","cross_margin_in","cross_margin_out","copy_trading_in","copy_trading_out","quant_in","quant_out","futures_in","futures_out","delivery_in","delivery_out","new_order","order_fill","referral_fee","order_fee","lend","redeem","profit","flash_swap_buy","flash_swap_sell","prem","point_refr","point_fee","point_dnw","fund","refr","pnl","dnw","iw","nw","aw","dw","uw","Nu","binance","fetchWithdrawalWhitelist","dapiPublic","dapiPrivate","dapiPrivateV2","fapiPublic","fapiPublicV2","fapiPrivate","fapiPrivateV2","v1","sapi","sapiV2","sapiV3","sapiV4","eapiPublic","eapiPrivate","dapiData","fapiData","papi","api_management","accountSnapshot","noCoin","bnbBurn","noPoolId","userDataStream","exchangeInfo","historicalTrades","aggTrades","premiumIndex","fundingRate","klines","continuousKlines","indexPriceKlines","markPriceKlines","premiumIndexKlines","noSymbol","constituents","openInterest","openInterestHist","topLongShortAccountRatio","topLongShortPositionRatio","globalLongShortAccountRatio","takerBuySellVol","basis","orderAmendment","allOrders","positionRisk","userTrades","income","forceOrders","adlQuantile","commissionRate","pmExchangeInfo","pmAccountInfo","countdownCancelAll","positionMargin","listenKey","allOpenOrders","fundingInfo","indexInfo","assetIndex","apiTradingStatus","lvtKlines","takerlongshortRatio","multiAssetsMargin","exerciseHistory","exerciseRecord","bill","marginAccount","mmp","mmpSet","mmpReset","countdownCancelAllHeartBeat","allOpenOrdersByUnderlying","uiKlines","allOrderList","openOrderList","orderList","myPreventedMatches","myAllocations","marginLoan","repayLoan","warnOnFetchOpenOrdersWithoutSymbol","throwMarginModeAlreadySet","adjustForTimeDifference","newOrderRespType","quoteOrderQty","FUNDING","MARGIN","UMFUTURE","CMFUTURE","BEP2","BEP20","OMNI","EOS","SPL","EURPS","BUSD","portfolioMargin","MAX_POSITION","cancelReplaceMode","cancelOrderId","origClientOrderId","NEW","PARTIALLY_FILLED","ACCEPTED","FILLED","CANCELED","PENDING_CANCEL","REJECTED","EXPIRED","EXPIRED_IN_MATCH","sideEffectType","callbackRate","activationPrice","isIsolated","newClientStrategyId","strategyId","beginTime","Processing","Failed","Successful","Refunding","Refunded","CONFIRMED","fromEmail","toEmail","fromSymbol","toSymbol","addressTag","crossMargin","FEE","FUNDING_FEE","OPTIONS_PREMIUM_FEE","POSITION_LIMIT_INCREASE_FEE","CONTRACT","REALIZED_PNL","TRANSFER","CROSS_COLLATERAL_TRANSFER","INTERNAL_TRANSFER","COIN_SWAP_DEPOSIT","COIN_SWAP_WITHDRAW","OPTIONS_SETTLE_PROFIT","DELIVERED_SETTELMENT","WELCOME_BONUS","CONTEST_REWARD","COMMISSION_REBATE","API_REBATE","REFERRAL_KICKBACK","COMMISSION","bitfinex2","orderTypes","CHN","v2AccountsByType","derivatives","temporarily_unavailable","currencyNames","explorer","uppercaseId","BITCOIN","LITECOIN","ETHEREUM","TETHERUSE","TETHERUSO","TETHERUSL","TETHERUSX","TETHERUSS","TETHERUSDTAVAX","TETHERUSDTSOL","TETHERUSDTALG","TETHERUSDTBCH","TETHERUSDTKSM","TETHERUSDTDVF","TETHERUSDTOMG","TETHERUSDTXTZ","TETHERUSDTNEAR","TETHERUSDTDOT","TETHERUSDTPLY","TETHERUSDTKAVA","TETHERMXNTE","TETHERXAUTE","TETHEREUE","TETHERCNHTX","TETHERCNHTE","TETHERUSDTZK","XAUT","CNHT","EUT","MXNT","NEOGAS","LES","LET","currency_to","FAILURE","ACTIVE","PARTIALLY","EXECUTED","INSUFFICIENT","RSN_DUST","RSN_PAUSE","price_trailing","price_aux_limit","ops","cid_date","op_renew","COMPLETED","SENDING","payment_id","fee_deduct","lev","bitget","mix","user","p2p","tax","fillResponseFromRequest","usdc_swap","crossed_margin","isolated_margin","usdt_futures","usdc_futures","coin_futures","TRC10","BRC20","POLYGON","Pending","pending_review","pending_review_fail","businessType","granularity","new","not_trigger","partial_fill","partially_fill","triggered","full_fill","fail_trigger","canceled","live","fail_execute","executed","force","callbackRatio","executePrice","stopLossExecutePrice","stopLossTriggerType","stopSurplusTriggerPrice","stopSurplusExecutePrice","stopSurplusTriggerType","holdSide","presetStopLossPrice","presetStopSurplusPrice","tradeSide","loanType","quoteSize","newPrice","newTriggerPrice","newCallbackRatio","newStopLossTriggerPrice","newStopLossExecutePrice","newStopLossTriggerType","newSurplusTriggerPrice","newStopSurplusExecutePrice","newStopSurplusTriggerType","newClientOid","newPresetStopLossPrice","newPresetStopSurplusPrice","trans_to_cross","trans_from_cross","trans_to_exchange","trans_from_exchange","trans_to_isolated","trans_from_isolated","trans_to_contract","trans_from_contract","trans_to_otc","trans_from_otc","open_long","close_long","open_short","close_short","force_close_long","force_close_short","burst_long_loss_query","burst_short_loss_query","force_buy","force_sell","burst_buy","burst_sell","delivery_long","delivery_short","contract_settle_fee","append_margin","adjust_down_lever_append_margin","reduce_margin","auto_append_margin","cash_gift_issue","cash_gift_recycle","bonus_issue","bonus_recycle","bonus_expired","transfer_in","transfer_out","realizedPnl","fromType","userId","toType","fromUserId","toUserId","successful","bitmart","fetchWithdrawAddressesByNetwork","restV2","USDT","SOLANA","MATIC","Polygon","ARB","Arbitrum","klaytn","Klaytn","Vechain","OP","Zksyncera_eth","OZO","Fantom","MultiversX","ARC20","ARBI","BSC_BNB","XLM","NEO","BTM","BCH","BSV","XRP","PLEX","XCH","NEAR","FIO","SCRT","IOTX","SOL","ALGO","ATOM","ADA","DOGE","XYM","GLMR","MOVR","ZIL","INJ","ZEC","NAS","HRC20","XDC","LAT","CSPR","ICP","XTZ","MINA","THETA","AKT","AR","CELO","FIL","NULS","ETC","DASH","DGB","GRIN","WAVES","ABBC","ACA","QTUM","PAC","TLOS","KARDIA","FUSE","FIRO","FTM","EVER","KAVA","HYDRA","PLCU","BRISE","OPTIMISM","REEF","SYS","VITE","STX","SXP","BITCI","XRD","ASTR","ZEN","LTO","ETHW","ETHF","IOST","APT","ONT","EVMOS","XMR","OASYS","OSMO","OMAX","DESO","BFIC","OHO","CS","CHEQ","NODL","NEM","FRA","ERGO","currencyIdsByCodeAndNetwork","contract_symbol","start_time","end_time","orderMode","partially_filled","partially_canceled","callback_rate","activation_price","activation_price_type","executive_price","trigger_price","price_way","open_type","client_order_id","address_memo","operation_type","FINISHED","contract_to_spot","spot_to_contract","time_start","time_end","bitstamp","yfi_address","grt_withdrawal","PAX","Open","Finished","Canceled","timedelta","iban","account_currency","destination_tag","memo_id","bybit","v2","oc_diff","new_oc","createUnifiedMarginAccount","loadAllOptions","loadExpiredOptions","investment","INVESTMENT","UNIFIED","FUND","BSC","intervals","nextPageCursor","JAN","FEB","MAR","APR","MAY","JUN","JUL","AUG","SEP","OCT","NOV","DEC","PENDING_NEW","PARTIALLY_FILLED_CANCELLED","Created","New","Rejected","PartiallyFilled","PartiallyFilledCanceled","Filled","PendingCancel","Cancelled","Untriggered","Deactivated","Triggered","Active","GoodTillCancel","ImmediateOrCancel","FillOrKill","PostOnly","marketUnit","qty","activePrice","trailingStop","tpslMode","slOrderType","tpOrderType","orderFilter","orderLinkId","orderQty","orderPrice","trigger_by","basePrice","orderStatus","chainType","SecurityCheck","CancelByUser","Reject","Fail","BlockchainConfirmed","start_date","Deposit","Withdraw","RealisedPNL","Commission","Refund","Prize","ExchangeOrderWithdraw","ExchangeOrderDeposit","TRANSFER_IN","TRANSFER_OUT","SETTLEMENT","DELIVERY","LIQUIDATION","BONUS","FEE_REFUND","INTEREST","CURRENCY_BUY","CURRENCY_SELL","feeType","memberId","fromMemberId","toMemberId","api_key","recv_window","Referer","two_factor_required","param_required","validation_error","invalid_request","personal_details_required","identity_verification_required","jumio_verification_required","jumio_face_match_verification_required","unverified_email","authentication_error","invalid_authentication_method","invalid_token","revoked_token","expired_token","invalid_scope","not_found","rate_limit_exceeded","internal_server_error","UNSUPPORTED_ORDER_CONFIGURATION","INSUFFICIENT_FUND","advanced","user_native_currency","next_starting_after","product_ids","product_id","fiat_deposit","fiat_withdrawal","exchange_deposit","exchange_withdrawal","pro_deposit","pro_withdrawal","order_configuration","stop_limit_stop_limit_gtd","base_size","limit_price","stop_price","stop_direction","stop_limit_stop_limit_gtc","limit_limit_gtd","post_only","limit_limit_gtc","market_market_ioc","quote_size","OPEN","UNKNOWN_ORDER_STATUS","MARKET","LIMIT","STOP","STOP_LIMIT","GOOD_UNTIL_CANCELLED","GOOD_UNTIL_DATE_TIME","IMMEDIATE_OR_CANCEL","FILL_OR_KILL","UNKNOWN_TIME_IN_FORCE","order_ids","end_date","order_status","start_sequence_timestamp","end_sequence_timestamp","aud","iss","nbf","iat","typ","Hm","kid","Authorization","coinbaseexchange","createStopLimitOrder","createStopMarketOrder","createStopOrder","fetchFundingRate","fetchMarginMode","fetchPositionHistory","fetchPositionMode","fetchPositionsHistory","commonCurrencies","CGLD","NotFound","canceling","client_oid","funds","crypto_address","coinbaseAccounts","coinbaseAccountsByCurrencyId","gateio","htx","v2Public","v2Private","maintain","CRONOS","BTT","CUBE","KLAY","DOGECHAIN","STEP","CARDANO","LUK","MINEPLEX","IOTA","NEON3","XEM","HC","LSK","DCR","BTG","STEEM","BTS","ICX","CMT","VET","XZC","ACT","SMT","BCD","WAX","WICC","ELF","ELA","BCX","SBTC","BIFI","CTXC","WAN","POLYX","PAI","WTC","XVG","AAC","AE","SEELE","BCV","GRS","ARDR","NANO","RBTC","GAS","LAMB","CVNT1","DOCK","SC","KMD","ETN","IRIS","UGAS","NEWTON","VSYS","FSN","CKB","EOSS","HIVE","RVN","BAND","OEP4","NBS","FIS","HBAR","MASS","ENJ","CRUST","FLOW","XEC","XPRT","CCA","AOTI","AZERO","BLD","CORE","DFI","EGLD","ERG","FLR","FINSCHIA","KMA","KYVE","MEV","OAS","PAYCOIN","POKT","REI","SDN","SEI","SGB","SUI","TENET","TON","UNQ","WEMIX","XPLA","fetchOrdersByStatesMethod","otc","typesByAccount","stopOrderTypes","limitOrderTypes","business_type","superMax","contract_code","trade_type","page_size","period","hbtc","ht2","hbch","eth","rain","xfi","arbieth","gas1","avax","atm","babydoge","bscface1","mbl","wld","aury","bonk","wlkn","dio","elu","gari","gmt","hbb","sao","like","mlpx","zbc","sns","dav","ARBITRUM","ARBITRUMONE","gns","ipv","joy","mbx","npt","well","wmt","roco","fio","hec","gmx","xeta","kube","solo","tao","uft","networkNamesByChainIds","ecidByChainIds","chainIdbyEcids","create_date","submitted","trigger_type","order_price","sl_order_price_type","sl_trigger_price","sl_order_price","tp_order_price_type","tp_trigger_price","tp_order_price","active_price","order_price_type","lever_rate","channel_code","orders_data","direct","confirming","confirmed","safe","orphan","reexamine","pass","repealed","SignatureMethod","SignatureVersion","AccessKeyId","margin_account","etf","kraken","zendesk","Assets","AssetPairs","Depth","OHLC","Spread","SystemStatus","Ticker","Time","Trades","AddOrder","AddOrderBatch","AddExport","Balance","CancelAll","CancelAllOrdersAfter","CancelOrder","CancelOrderBatch","ClosedOrders","DepositAddresses","DepositMethods","DepositStatus","EditOrder","ExportStatus","GetWebSocketsToken","Ledgers","OpenOrders","OpenPositions","QueryLedgers","QueryOrders","QueryTrades","RetrieveExport","RemoveExport","BalanceEx","TradeBalance","TradesHistory","TradeVolume","WithdrawCancel","WithdrawInfo","WithdrawMethods","WithdrawAddresses","WithdrawStatus","WalletTransfer","CreateSubaccount","AccountTransfer","delistedMarketsById","inactiveCurrencies","hardCodedMethodsToEcid","wsId","maintenance","cancel_only","methodsByEcids","ecidsByMethods","withdraw_enabled","verified","ordertype","userref","price2","timeinforce","oflags","Initial","Success","Settled","Failure","Partial","next_cursor","kucoin","futuresPrivate","futuresPublic","webExchange","purchase","stopOrders","recentDoneOrders","recentFills","openOrderStatistics","order_not_exist","order_not_exist_or_not_allow_to_cancel","symbolSeparator","fetchMyTradesMethod","webApiEnable","webApiRetries","webApiMuteFailure","fetchTickersFees","GET","POST","DELETE","mining","marginModes","startAt","marginModel","feeDeductType","PROCESSING","WALLET_PROCESSING","balanceCurrency","tradeHF","bizNo","fromTag","toTag","Withdrawal","Transfer","Trade_Exchange","Rewards","Loans","mexc","spot2","support_currencies","risk_reverse","USDC","ALPH","AME","AOK","ARBNOVA","ARBONE","ARK","AVAXC","AVAXX","BDX","BEAM","BNC","BNCDOT","BOBA","CFX","CLORE","DC","DNX","DYM","EDG","FET","INDEX","KAR","KAS","KDA","KILT","LAVA","LUNA","MCOIN","METIS","MTRG","NEBL","NEO3","NEOXA","OASIS","OKC","OMN","QKC","RAP20","RSK","SATOX","STAR","STARK","TAO","TIA","TOMO","VEX","XNA","XPR","ZTG","maxTimeTillEnd","Oversold","vol","externalOid","executeCycle","trend","BUY","SELL","LIMIT_MAKER","PARTIALLY_CANCELED","unrealizedProfit","transact_id","WAIT","ApiKey","okx","BTCLN","BHP","TRUE","HNT","GLRM","ZKSYNC","pwd","oco","move_order_stop","iceberg","twap","exchangeType","SWAP","FUTURES","uly","Bitcoin","Omni","TRON","instId","sz","instFamily","ccy","tdMode","posSide","slTriggerPx","tpTriggerPx","triggerPx","orderPx","clOrdId","algoClOrdId","ordId","newSlTriggerPx","newSlOrdPx","newSlTriggerPxType","newTpTriggerPx","newTpOrdPx","newTpTriggerPxType","newSz","newPx","order_failed","effective","mgnMode","toAddr","amt","depId","wdId","transId","TERMID","Exchange","gw","bw","Iw","Mw","Cw","xw","Pw","widgetType","vw","Bw","jw","Vw","Co","Fw","Kw","hw","Sr","Rn","Zw","Qw","xo","ls","Pu","ju","Tr","_u","Lu","Jw","Du","Ru","i1","Vu","Bu","vs","Fu","vo","Ar","jt","dn","Uu","qu","ko","S1","EvalError","A1","I1","SyntaxError","Ir","O1","URIError","M1","Xr","E1","N1","_1","L1","Eo","B1","V1","G1","z1","Ts","ps","zu","$r","Zr","tt","K1","AggregateError","Atomics","BigInt64Array","BigUint64Array","decodeURI","encodeURI","eval","FinalizationRegistry","WeakRef","Qr","Gd","Ud","cn","Jn","Q1","J1","un","Hu","No","Bn","Po","Wu","hasArrayLengthDefineBug","Wd","Kd","Yu","Ku","Xu","$u","Or","Zu","isLegacyArguments","Vn","Qu","Jr","Ju","jn","tr","_o","Fn","Lo","working","isArgumentsObject","isGeneratorFunction","isTypedArray","isPromise","isArrayBufferView","isUint8ClampedArray","isUint16Array","isUint32Array","isInt8Array","isInt16Array","isInt32Array","isFloat32Array","isFloat64Array","isBigInt64Array","isBigUint64Array","isSet","isWeakMap","isWeakSet","isArrayBuffer","isDataView","isSharedArrayBuffer","isAsyncFunction","isMapIterator","isSetIterator","isGeneratorObject","isWebAssemblyCompiledModule","isNumberObject","isStringObject","isBooleanObject","isBigIntObject","isSymbolObject","isBoxedPrimitive","isAnyArrayBuffer","noDeprecation","throwDeprecation","traceDeprecation","NODE_DEBUG","stylize","showHidden","_extend","customInspect","pid","bold","italic","blue","cyan","green","magenta","red","yellow","special","regexp","isNativeError","promisify","callbackify","vn","kn","As","En","sr","Mr","iS","sS","nS","Js","Do","rS","Un","aS","oS","dS","cS","uS","Cr","fS","hS","lS","pS","gS","mS","yS","bS","Bt","Ro","SS","en","nr","gs","TS","AS","OS","Bo","xr","Vo","ht","Ct","js","EMITTED_NOTIFICATIONS","NOOP","logStreamDisconnectWarning","getRpcPromiseCallback","createErrorMiddleware","vr","_S","kr","Er","hn","jo","BS","jS","VS","FS","US","xt","Nr","qS","Fo","zS","HS","Uo","WS","Nn","Pn","ga","kf","Is","Pr","_f","XS","$S","ZS","sn","QS","qo","Go","eT","iT","tT","sT","nT","rT","oT","dT","cedeWidgets","Yw","Xw","CedeOnboardingModal","chromeWebStore","Action","invariant","cond","parsePath","parsedPath","hashIndex","searchIndex","ResultType","matchRoutes","routes","locationArg","matchRoutesImpl","allowPartial","branches","flattenRoutes","score","compareIndexes","routesMeta","childrenIndex","rankRouteBranches","decoded","decodePath","matchRouteBranch","parentsMeta","parentPath","flattenRoute","route","relativePath","computeScore","_route$path","exploded","explodeOptionalSegments","restExploded","subpath","paramRe","dynamicSegmentValue","indexRouteValue","emptySegmentValue","staticSegmentValue","splatPenalty","isSplat","initialScore","branch","matchedParams","matchedPathname","remainingPathname","pathnameBase","normalizePathname","matcher","compiledParams","regexpSource","compilePath","captureGroups","splatValue","nextChar","getInvalidPathError","getPathContributingMatches","getResolveToMatches","v7_relativeSplatPath","pathMatches","toArg","routePathnames","locationPathname","isPathRelative","isEmptyPath","toPathname","routePathnameIndex","toSegments","fromPathname","resolvePathname","normalizeSearch","normalizeHash","hasExplicitTrailingSlash","hasCurrentTrailingSlash","isRouteErrorResponse","validMutationMethodsArr","validRequestMethodsArr","DataRouterContext","DataRouterStateContext","NavigationContext","LocationContext","RouteContext","outlet","isDataRoute","RouteErrorContext","useInRouterContext","useIsomorphicLayoutEffect","static","router","useDataRouterContext","DataRouterHook","UseNavigateStable","useCurrentRouteId","DataRouterStateHook","activeRef","navigate","fromRouteId","useNavigateStable","dataRouterContext","routePathnamesJson","relative","useNavigateUnstable","OutletContext","_temp2","useRoutesImpl","dataRouterState","parentMatches","routeMatch","parentParams","parentPathnameBase","locationFromContext","_parsedLocationArg$pa","parsedLocationArg","parentSegments","renderedMatches","_renderMatches","encodeLocation","navigationType","Pop","DefaultErrorComponent","_state$errors","useDataRouterState","UseRouteError","routeId","useRouteError","lightgrey","preStyles","defaultErrorElement","RenderErrorBoundary","revalidation","errorInfo","routeContext","RenderedRoute","staticContext","errorElement","ErrorBoundary","_deepestRenderedBoundaryId","_dataRouterState","_future","v7_partialHydration","initialized","errorIndex","renderFallback","fallbackIndex","HydrateFallback","hydrateFallbackElement","loaderData","needsToRunLoader","loader","shouldRenderHydrateFallback","alreadyWarned","getChildren","hookName","useRouteContext","thisRoute","startTransitionImpl","MemoryRouter","initialEntries","initialIndex","historyRef","v5Compat","createMemoryLocation","clampIndex","createHref","createURL","Push","Replace","listen","setStateImpl","v7_startTransition","Navigate","isStatic","jsonPath","Outlet","useOutlet","Route","basenameProp","locationProp","staticProp","navigationContext","locationContext","trailingPathname","_ref6","createRoutesFromChildren","treePath","hasErrorBoundary","shouldRevalidate","getAppBarUtilityClass","joinVars","var1","var2","AppBarRoot","backgroundColorDefault","enableColorOnDark","AppBar","defaultBg","darkBg","darkColor","NavBar","HelpLink","useDiscordInvitation","joinDiscord","AlertQueue","useAlert","alertQueue","removeAlert","useLoading","nbBigRequests","nbSmallRequests","isBlockingLoading","setDescription","addBigPendingRequest","removeBigPendingRequest","addSmallPendingRequests","reqsToAdd","removeSmallPendingRequests","reqsToRemove","Loading","widgetProps","themeProp","STORE_ROUTES","WIDGET_ROUTES","LOGIN","DEFAULT_ROUTE","ACTION_ROUTE","COMPLETED_TRANSACTION_DETAILS_ROUTE","FIX_INVALID_PERMISSIONS_TUTORIAL","MULTIPLE_TRANSACTIONS","COMPLETED_TRANSACTION_ROUTE","TRADE_WIDGET_ROUTES","ADD_DEFI_ADDRESS","randomId","WALLET_TYPES_COMMON_CONFIG","send_wallet_types","transfer_wallet_types","external_to_internal_wallet_types","ISOLATED_MARGIN","EARN","CROSS_MARGIN","internal_to_external_wallet_types","OPTIONS","DERIVATIVES","COIN_M_SWAP","external_wallet_types_parameters","COIN_M_FUTURES","USD_M_FUTURES","WALLET_TYPES_TEST_CONFIG","firstLetterToUpperCase","fakeAccount","ONLINE","fakeAccountsForAllExchanges","API_ENDPOINT","EXCHANGES_STATUS","TOKEN_NAMES_AND_SYMBOLS","FIAT_CURRENCIES","STANDARDIZED_CHAINS","SUPPORTED_TOKENS","SUPPORTED_TOKENS_BY_EXCHANGE","SUPPORTED_NETWORKS_BY_EXCHANGE","ALL_FIAT_CURRENCIES","TRADE_PATH","PARTNERS","KRAKEN_WITHDRAWAL_NETWORKS_INFO","WALLET_TYPES_CONFIG","USER_REWARDS","TRADE_PATH_BY_SUPPORTED_TOKENS","GET_DISCORD_INVITATION","GET_REFERRAL_CODE","USER_ACTIVE_REWARD_MULTIPLIERS","TRADE_LEADERBOARD","BALANCES","TOKENS_MAPPING","TOKENS_METADATA","CAMPAIGN_OPEN_ORDERS","ACCOUNTS_BY_USER_ID","ACCOUNTS","HUB_STATS","HUB_USER_STATS","HUB_GLOBAL_LEADERBOARD","thisArg","kindOf","kindOfTest","typeOfTest","isFile","isBlob","isFileList","isURLSearchParams","isReadableStream","isHeaders","allOwnKeys","findKey","_global","isContextDefined","TypedArray","isHTMLForm","reduceDescriptors","descriptors","reducedDescriptors","ALPHA","DIGIT","ALPHABET","ALPHA_DIGIT","isAsyncFn","_setImmediate","setImmediateSupported","postMessageSupported","asap","isFormData","FormData","isResponse","caseless","assignValue","targetKey","stripBOM","superConstructor","toFlatObject","sourceObj","destObj","propFilter","searchString","forEachEntry","matchAll","regExp","hasOwnProp","freezeMethods","toObjectSet","arrayOrString","define","toCamelCase","toFiniteNumber","generateString","isSpecCompliantForm","toJSONObject","reducedValue","isThenable","AxiosError","captureStackTrace","customProps","axiosError","isVisitable","removeBrackets","renderKey","predicates","formData","metaTokens","indexes","defaultVisitor","useBlob","Blob","convertValue","isFlatArray","exposedHelpers","charMap","AxiosURLSearchParams","_pairs","_encode","buildURL","serializeFn","serializedParams","hashmarkIndex","fulfilled","rejected","synchronous","runWhen","eject","silentJSONParsing","forcedJSONParsing","clarifyTimeoutError","protocols","hasBrowserEnv","hasStandardBrowserEnv","product","hasStandardBrowserWebWorkerEnv","importScripts","buildPath","isNumericKey","isLast","parsePropPath","transitional","adapter","transformRequest","getContentType","hasJSONContentType","isObjectPayload","setContentType","helpers","toURLEncodedForm","formSerializer","_FormData","rawValue","stringifySafely","transformResponse","JSONRequested","responseType","strictJSONParsing","ERR_BAD_RESPONSE","xsrfCookieName","xsrfHeaderName","maxContentLength","maxBodyLength","validateStatus","ignoreDuplicateOf","$internals","normalizeHeader","normalizeValue","matchHeaderValue","isHeaderNameFilter","AxiosHeaders","valueOrRewrite","rewrite","_value","_header","_rewrite","lHeader","rawHeaders","parseHeaders","tokensRE","parseTokens","deleted","deleteHeader","normalized","formatHeader","targets","asStrings","accessor","accessors","defineAccessor","accessorName","buildAccessors","mapped","headerValue","transformData","isCancel","__CANCEL__","CanceledError","ERR_CANCELED","ERR_BAD_REQUEST","samplesCount","firstSampleTS","chunkLength","startedAt","bytesCount","passed","freq","threshold","invoke","progressEventReducer","isDownloadStream","bytesNotified","_speedometer","loaded","lengthComputable","progressBytes","progress","estimated","progressEventDecorator","throttled","asyncDecorator","msie","urlParsingNode","originURL","resolveURL","port","requestURL","secure","cookie","toGMTString","buildFullPath","baseURL","requestedURL","relativeURL","combineURLs","headersToObject","mergeConfig","config1","config2","getMergedValue","mergeDeepProperties","valueFromConfig2","defaultToConfig2","mergeDirectKeys","mergeMap","paramsSerializer","timeoutMessage","withCredentials","withXSRFToken","onUploadProgress","onDownloadProgress","decompress","beforeRedirect","transport","cancelToken","socketPath","responseEncoding","configValue","newConfig","username","isURLSameOrigin","xsrfValue","cookies","XMLHttpRequest","_config","resolveConfig","requestData","onCanceled","uploadThrottled","downloadThrottled","flushUpload","flushDownload","onloadend","getAllResponseHeaders","responseText","onreadystatechange","readyState","responseURL","onabort","ECONNABORTED","ERR_NETWORK","ontimeout","timeoutErrorMessage","ETIMEDOUT","setRequestHeader","upload","parseProtocol","signals","streamChunk","trackStream","onFinish","iterable","readBytes","_onFinish","loadedBytes","isFetchSupported","Request","Response","isReadableStreamSupported","encodeText","arrayBuffer","supportsRequestStream","duplexAccessed","hasContentType","supportsResponseStream","resolvers","ERR_NOT_SUPPORT","resolveBodyLength","getContentLength","getBodyLength","composedSignal","stopTimeout","requestContentLength","contentTypeHeader","_request","credentials","isStreamResponse","responseContentLength","knownAdapters","http","xhr","renderReason","isResolvedHandle","adapters","nameOrAdapter","rejectedReasons","reasons","throwIfCancellationRequested","throwIfRequested","dispatchRequest","VERSION","deprecatedWarnings","formatMessage","opt","ERR_DEPRECATED","assertOptions","allowUnknown","ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","Axios","instanceConfig","interceptors","configOrUrl","contextHeaders","requestInterceptorChain","synchronousRequestInterceptors","interceptor","responseInterceptorChain","getUri","generateHTTPMethod","isForm","CancelToken","resolvePromise","onfulfilled","_resolve","HttpStatusCode","Continue","SwitchingProtocols","EarlyHints","Accepted","NonAuthoritativeInformation","NoContent","ResetContent","PartialContent","MultiStatus","AlreadyReported","ImUsed","MultipleChoices","MovedPermanently","Found","SeeOther","NotModified","UseProxy","Unused","TemporaryRedirect","PermanentRedirect","BadRequest","Unauthorized","PaymentRequired","Forbidden","MethodNotAllowed","NotAcceptable","ProxyAuthenticationRequired","RequestTimeout","Conflict","Gone","LengthRequired","PreconditionFailed","PayloadTooLarge","UriTooLong","UnsupportedMediaType","RangeNotSatisfiable","ExpectationFailed","ImATeapot","MisdirectedRequest","UnprocessableEntity","Locked","FailedDependency","TooEarly","UpgradeRequired","PreconditionRequired","TooManyRequests","RequestHeaderFieldsTooLarge","UnavailableForLegalReasons","InternalServerError","NotImplemented","BadGateway","ServiceUnavailable","GatewayTimeout","HttpVersionNotSupported","VariantAlsoNegotiates","InsufficientStorage","LoopDetected","NotExtended","NetworkAuthenticationRequired","axios","createInstance","defaultConfig","toFormData","isAxiosError","formToJSON","getAdapter","CEDE_API_URL","CEDE_API_TOKEN","getFromApi","requestId","pathParamsString","pathParams","queryParamsString","queryParams","baseUrl","apiBaseUrl","fakeActiveVaultForDemo","fakeSettings","balanceBelow","extensionUrl","mockSupportedExchanges","supportedWalletTypes","auhenticationMethod","isRequiringEmailConfirmation","minimumWithdrawalUrl","isRequiringAddressWhitelisting","shouldCheckWhitelist","ipWhitelistAddresses","provideWhitelistedAddresses","minimumDepositlUrl","addressManagementUrl","affiliationLink","inducedPermissions","trade_and_send","requiresPassword","requiresUid","apiManagementLink","supportVerifyKYC","hybridAuthentication","oauthAuthentication","isOauthLoginSupported","isUsingFastApi","hasPkceFlow","transferWalletTypes","mockedWithdrawableBalancesByAccountId","freeBalance","refFreeBalance","refTotalBalance","generateMarketNetwork","withdrawalEnabled","mockedNetworks","mockedNetworksByToken","WBTC","E_CANCELED","__awaiter$2","_arguments","Semaphore","_cancelError","_weightedQueues","_weightedWaiters","weight","_dispatch","runExclusive","queueEntry","previousValue","previousWeight","_newReleaser","_drainUnlockWaiters","waiter","__awaiter$1","eventEmitter","EventTarget","pricesMutex","cancelError","_semaphore","releaser","cachedPrices","mockedApi","CustomEvent","Event","tokenPrice","AlertTypes","getTimeLimitedPersistStorage","onHydration","itemStr","_initialFormState","amountFrom","amountTo","selectedAccount","noCommonMarket","limitPrice","initialProps","useTradeFormStore","resetForm","keepSelectedAccount","setInitialProps","dispatchForm","defaultDependencies","useNavigate","useInitialize","setBackgroundHandler","useSetupSettings","useStandardizedNetworks","useSendStore","useMultipleTransactionsStore","hasStartedMultipleTransactions","hasStartedTheProcess","setSendInitialProps","setTradeInitialProps","mockedHandlerFactory","nativeBackgroundHandler","finally","useOnboardingModal","isOnboardingModalOpened","setIsOnboardingModalOpened","useWidgetLogin","closeOnboardingModal","fetchPopularTokens","tokensData","requestCMS","popular","NEXT_PUBLIC_CMS_API_URL","CMS_API_URL","NEXT_PUBLIC_CMS_API_TOKEN","CMS_API_TOKEN","useConfig","CONFIG","refetchConfig","EMPTY_RATE","getErrorMessage","defaultMessage","userFacingDescription","useEffectOnce","triggerCondition","resetDependencies","hasTriggered","useTriggerEffectOnce","setTrigger","getTradePathLabel","tradePath","useRepeatTrade","useLocation","assetsFrom","assetsTo","tradeForm","resetAmounts","setFocusedInput","_location","_locationState","prefillingForm","assetFromLoading","setAssetFromLoading","assetToLoading","setAssetToLoading","hasBeenPrefilledRef","_appendAlert","_prefillSelectedCex","_prefillTokenFrom","tradeFields","currencyTo","_prefillTokenToAndAmountFrom","getQueryClient","useSelectedTransaction","totalFiatValue","networkLabel","isTrade","isSend","isReceive","setTransaction","standardizedNetworks","STANDARDIZED_NETWORKS","refAmount","infoTx","standardizedNetwork","icn","setError","resetError","useTabsFactory","selectedTab","setSelectedTab","tradeTabs","useTradeTabs","htmlExports","popupHtml","requestHtml","requestOnboardingHtml","DroplistMissingPermission","useSettings","useLayout","tabContainerWidth","tabContainerHeight","setTabContainerWidth","setTabContainerHeight","resetTabContainerSize","AddressInputType","SendTabsValues","useSendTabs","useSendApi","useWithdrawableBalances","useAddressBook","useNetworks","useWhitelistedAddresses","useTriggerLoadingConditionally","useTradePath","isSendSupported","isTradeAndSendSupported","droplistDestinationTokens","droplistDestinationTokensAreLoading","droplistDestinationTokensError","fromToken","toToken","destinationCurrency","activeWithdrawal","droplistNetworks","tokenDroplistNetworks","networksAreLoading","networksByValue","isNetworkDisabledForSelectedCurrency","shouldUseTradeAndSend","droplistAllNetworks","totalBalancesByAccountId","droplistWhitelistedAddresses","isWhitelistedAddressesLoading","refetchWhitelistedAddresses","droplistAddressBook","addressInputType","WHITELIST","ADDRESS_BOOK","isReceiveSupported","isSendAllowed","totalBalances","isOauth","fromAccounts","toAccounts","filterAccounts","isDefiTab","DefiAddress","isBetweenCexTab","BetweenCex","droplistCurrencies","droplistCurrenciesByAccountId","areCurrenciesLoading","useGlobalMenu","addressBook","book","isAddressBookLoading","isAddressBookError","goBack","addAddress","modifyAddress","refetchAddressBook","useSendValidation","supportedTokensAreLoading","useSendMinAmount","needWhitelist","setNeedWhitelist","isTutorialCheckboxChecked","setIsTutorialCheckboxChecked","displayWhitelistTooltip","setDisplayWhitelistTooltip","isWhitelistedAddressesError","minAmountIsLoading","whitelistedAddress","isAddressWhitelisted","checkWhitelist","validateAddress","validateAssetValue","isDemo","assetValueNumber","assetValue","withdrawMinWithFee","shouldDisplayWhitelistTooltip","useMediaQueryOld","defaultMatches","matchMedia","ssrMatchMedia","noSsr","supportMatchMedia","setMatch","queryList","updateMatch","maybeReactUseSyncExternalStore","useMediaQueryNew","getDefaultSnapshot","getServerSnapshot","mediaQueryList","useMediaQuery","queryInput","getCurrentRate","marketRate","isMultipleTransactionsPreparedOrder","getLastOrderTransaction","array1","array2","QueriesObserver","setQueries","prevObservers","newObserverMatches","defaultedQueryOptions","newObservers","newResult","hasIndexChange","getQueries","getObservers","observerResult","accessedProp","prevObserversMap","matchingObservers","matchedQueryHashes","unmatchedQueries","getObserver","newOrReusedObservers","replaceAt","getTotalBalancesByAccountId","areBalancesLoading","areBalancesError","queryBalances","tokenName","DEFAULT_CEDE_STORE_VERSION","DISCORD_INVITE_URL","CEDE_STORE_URL","reverseComputeAmount","startProcess","setTransactions","isExecuted","shouldPrefill","refValue","tagValue","tutorialIsOpen","dispatchPrefill","dispatchInput","partialReset","ratio","keepInitialProps","switchAccounts","setTutorialIsOpen","setMaxAssetValue","setIsDemo","CEDE_LANGUAGES","DEFAULT_LANGUAGE","hiddenBalance","isMetricsActive","setLanguage","setCurrency","setHiddenBalance","setExtensionUrl","alertItem","noTimeout","customMsTimeout","removeByMessage","useSend","useAddressInputValue","appendAlert","isMobile","isTradeSendConfirmModalOpened","setTradeSendConfirmModalOpened","validateAssetValueRef","isRecipientInputFocused","setIsRecipientInputFocused","isSendSupportedRef","switchToMinimalLayout","warningMessage","selectedNetwork","updatedValue","formErrors","prefillAccount","prefillTokenSymbol","prefillNetwork","toLocaleLowerCase","prefillWhitelistedAddress","prefillAddress","switchSelectedCexs","submit","onSubmitDemo","referrerSource","withdrawalTag","transactionHash","generateFakeSendTransactionFromStore","WITHDRAWABLE_CURRENCIES","currenciesAreLoading","allNetworks","fiatCurrency","handleAddAddressManually","onTradeSendModalContinue","addCexRedirect","enableQueries","defaultedQueries","getCombinedResult","suspensePromises","queryObserver","firstSingleResultWhichShouldThrow","useQueries","useCompletedTransaction","useTriggerUpdateTransaction","useShareOnTwitter","networkName","partnerName","share","onTransactionDetails","goTo","shareOnTwitter","placeHolders","CEX_LABEL","PARTNER","shouldContinuePolling","foundTransaction","tokenOrPairSymbol","defiAddress","VAULT_TRANSACTIONS","onAssetNotFound","basePath","runtime","getURL","readAssetFromExtension","isAssetLoading","isAssetError","isAssetSuccess","useExchangesStatusAlerts","hasSentInitialAlerts","downCexNames","groups","downExchangesNames","displayAlerts","names","alertType","alertMessage","listenerId","hasGoneOffline","hasBackOnline","filteredOnlineCex","filteredOfflineCex","backOnlineCexNames","goneOfflineCexNames","standardizedNetworksByExchange","supportedNetworks","refetchStandardizedNetworks","isStandardizedNetworksLoading","standardizedNetworksError","getNetworkName","internalNetwork","exchangeNetworks","splitAddress","lengthToShow","exchangeSupportGetWhitelistedAddresses","getWhitelistedAddressQueryKey","getWhitelistedAddressParams","isWhitelistedAddressQueryEnabled","filteredAddresses","useSupportedTokens","onlyWithdrawable","supportedTokens","isWithdrawEnabledNetwork","droplistSupportedTokens","allSupportedTokens","isWithdrawable","useMultipleTransactionsMinAmount","multipleTransactionsMinAmount","multiWithdrawalMinIsLoading","classicWithdrawalMinAmount","hasStarted","hasFinished","usePartners","partners","isLoadingPartners","refetchPartners","twitterNetworkName","twitterHandle","placeholderValues","useTradePathBySupportedTokens","tradePathBySupportedTokens","useTokenNamesAndSymbols","tokenNamesAndSymbols","getTokensNameAndSymbols","useTradeForm","focusedInput","BYPASS_APPROVAL_TRADE_HUB","hasSelectedBothTokens","addMax","bypassApprovalTradeHub","useTradeApi","useCedeStoreVersion","isGreaterVersion","prevAssetsTo","isTradeSquareSupported","isLimitOrderSupported","limit_order_ui","shouldUseTradeSquare","isLoadingBalances","accountBalances","walletTypes","forceRefresh","balancesByWalletType","getBalances","balancesByToken","existingBalance","usedBalance","refUsedBalance","balancesByWalletTypeToBalancesByToken","assetPortfolio","BALANCE_DEFAULT_TTL","tradePathPrice","sellPriceInDestinationToken","popularTokens","underlyingMarkets","assetsToAreLoading","isLoadingUnderlyingMarkets","tokensAvailable","assetOwnedByUser","tokenNameSymbol","resMarkets","useTrade","useTradeMinAmount","useTradeFee","useMultipleTransactions","useTradeAmountComputation","useTradeEventDispatcher","debouncedValue","debouncedAmountFrom","isDebouncing","setDebouncedValue","setIsDebouncing","useDebounceValue","selectOrderType","feeIsLoading","preparedOrder","minAmountFrom","loadTransactions","loadMultipleTransactions","clearState","clearMultipleTransactions","isTxLoading","isMultipleTransactionsLoading","fromTokenAmount","computeAmountFrom","computeAmountTo","enabledEventDispatcher","setEnabledEventDispatcher","filteredAssetsTo","derivedAssetsTo","popularAssetsTo","allAssetsTo","quoteToken","availableAccounts","customPrices","mappedTokens","availableForTradeAccounts","availableForTradeAccountsAreLoading","_navigate","isSwitchIconHovered","setIsSwitchIconHovered","assetBalance","tokenFromPrice","tokenToPrice","GPT","isSubmitButtonActive","portfolioAssets","hasTokenTo","isSwitchable","disabledSwitchMessage","getTheCurrentMarket","newMarketsTokenFrom","marketPair","checkAccountValidityOnMount","useTriggerEffect","tokenFromSelectedOnMount","keepPreviousTradeValues","recommendedTokenTo","selectTokenFrom","tokenToSelectedOnMount","recommendedToken","chooseRecommendedTokenTo","tradeAbleAsset","switchToken","cexFeeIsLoading","amountToIsLoading","submitTrade","onTradeSubmitted","generateFakeTradeTransactionTradeForm","vaultName","allowUserInputAmountTo","isWidget","multipleTransactionMinAmountIsLoading","getMinAmountFrom","minAmounts","minQuoteAmount","minBaseAmount","classicMinAmount","classicMinAmountIsLoading","refetchClassicMinAmount","refetchHasJoinedDiscord","isLoadingHasJoinedDiscord","HAS_JOINED_DISCORD","discordInvitation","tradePathIsLoading","networksForDestinationCurrency","safeMargin","networkForDestinationCurrency","destinationCurrencyNetwork","_minAmounts","tradePathData","minTradeAmount","maxMinAmount","setExecutedTransactionData","setIsTxLoading","txTracker","_prepareTransactions","executedTransactions","preparedOrders","currentRate","tradeAndSend","estimatedAmount","estimatedFee","_getOrdersFromTradePath","lastOrder","preparedWithdrawal","_getWithdrawal","executeNextTransaction","transactionToExecute","createOrderResponse","orderResponse","orderData","_handler","CLOSED","updatedToAmount","accountBalance","tokenFreeBalance","_fitTxAmountToTokenFreeBalance","newTransactions","transactionToUpdate","useMultipleTransactionsFees","multipleTransactionFeesInFromToken","MULTIPLE_TX_FEES","_fees","newFees","preparedOrderWithFeeForCommonMarket","preparedOrderWithFeeForCommonMarketIsLoading","unformattedAmountFrom","isMultipleTransactionsFeesLoading","multipleTransactionFees","getRate","onChangePairSymbol","lastTradePath","UPDATE_PAIR","UPDATE_EXCHANGE","onChangeSelectedAccount","cedeStoreVersion","CEDE_STORE_VERSION","currentMajor","currentMinor","currentPatch","major","minor","inferredTheme","MuiButton","buttonTextColor","deactivateButtonColor","useCustomTheme","Wrapper","DefaultPage","DefaultLogin","Login","CustomOnboardingModal","excluded","sourceKeys","__reactRouterVersion","_ref7","absoluteHref","reloadDocument","preventScrollReset","unstable_viewTransition","isExternal","currentUrl","targetUrl","_temp","joinedPathname","useHref","internalOnClick","replaceProp","isModifiedEvent","shouldProcessLinkClick","useLinkClickHandler","HelpButton","MainFooter","boxProps","useWhitelistAddressTutorials","setCurrentPage","setStatus","maxPage","currentPageRef","tutorialType","onNext","getDialogUtilityClass","DialogBackdrop","DialogRoot","DialogContainer","DialogPaper","paperFullWidth","fullScreen","paperFullScreen","paperScrollBody","defaultTransitionDuration","ariaLabelledbyProp","backdropClick","ariaLabelledby","dialogContextValue","titleId","EMPTY_PERMISSIONS","WhitelistAddressTutorial","onCloseModal","getCustomHref","tutorialReaderData","customHref","scrollBehavior","setupButtons","FullPageWhitelistTutorial","TradeSendConfirmModal","onConfirm","WithdrawMinAmount","getCheckboxUtilityClass","CheckboxRoot","indeterminate","defaultCheckedIcon","CheckBox","CheckBoxOutlineBlank","defaultIndeterminateIcon","IndeterminateCheckBox","_icon$props$fontSize","_indeterminateIcon$pr","indeterminateIcon","indeterminateIconProp","unfocus","PresentationalSend","disableAddressBook","FormErrors","errorKeys","memoizedCurrencyNetworkFields","recipientAddressInputText","Create","Add","whitelistedAddressDropList","recipientAddressInput","SwapHoriz","authenticationMiddleware","NotSupported","OpenInNew","chromiumMiddleware","initMiddleware","Page","displayFlex","isOnboardingRequest","CedeStoreMessage","CexLine","ConfirmEmail","ErrorLine","popperAnchor","NetworkLine","RecipientAddressLine","SendHeader","statusStates","connectionStatusColors","StatusLine","TotalFees","TradeHeader","EastRounded","isOnrampMoney","DefaultFooter","OnrampMoneyCustomFooter","actionButtonLabel","titles","operationNames","transactionStatuses","HeaderButton","CompletedTransaction","transactionStatus","transactionResult","logoType","logoSize","shouldDisplayConfirmEmail","WidgetsRounded","AccountLine","metricsDateOptions","hour12","minute","fractionalSecondDigits","timeZoneName","weekday","timestampToDate","dayStr","monthStr","hoursStr","minutesStr","DateLine","FeeLine","PriceLine","TxHashLine","TransactionInformationsBlock","TransactionStatus","TxExplorerLink","CompletedTransactionDetails","Loop","useFixInvalidPermissionsTutorial","isFetchingPublicApiKey","publicKeys","getAccountPublicKeys","proxiedPermission","apiPublic","onUpdated","FixInvalidPermissionsTutorial","publicAPIKey","SingleTransaction","TopLine","ArrowForward","BottomLine","PresentationalMultipleTransactions","SEND_ROUTES","navbarLogo","CedeSend","LimitPrice","priceSymbol","setLimitPrice","unformattedLimitPrice","unfornattedPrice","percentageDifference","TradeRouteInfoModal","getTabUtilityClass","TabRoot","labelIcon","iconWrapper","ASSETS_TO_SUBLIST_TITLES","PresentationalTradePage","tradeRouteInfoModalIsOpen","setTradeRouteInfoModalIsOpen","CexFees","MinValue","TradeRoute","Price","shouldDisplayDescription","Tabs","sendWidgetConfig","universalSendWidgetConfig","Widgets","universalSendWidgetContainerRef","sendWidgetForm","universalSendWidgetForm","sendWidgetConfigValues","shouldUpdateVaults","providerVaults","useSetupApp"],"sourceRoot":""}